I'm sure there is truth in original author saying tax code complexity as the core challenge. But that's not what makes this hard. That's domain complexity we all come up against it's accidental complexity that killed the ports.
The real problem is idiosyncratic and esoteric coding practices from a single self-taught accountant working in a language that didn't encourage good structure.
I can translate well-written code without understanding what it does functionally, so long as I understand what it's doing mechanically.
The original author seems to build in the assumption you're not going to translate my code you'll need to rewrite it from the the tax code!
This is such a well written story, and congratulations Ben, it sounds like it's been a lot of hard but ultimately successful work!
I know you'll deservedly get a lot of credit for all your work in remastering the game, but you should also get credit for how you've woven this narrative together, it's a lovely read. Thank you for taking the time to write it up, and good luck with the Steam release, and whatever project you take on next! :)
Claude actually! Yeah the content editing was heavily LLM assisted as I'm a terrible writer and I wanted the read to be enjoyable. So I compiled all the research and worked with Claude to build the article. I then attempted to go through with a fine tooth comb and write it in my own words. That is one particular sentence I missed with a highly recognizable LLM pattern which I will fix. I simply also don't have time to really market the game, I care more about the quality of the software. I know if the software is great then it will be successful. But I wanted to share the story in a compelling way. Apologies if it was distracting!
Professionally typeset books. Designers have been typing it—and the other dashes—manually using Option+Shift+hyphen on Mac since 1984. You can type them—plus the bullet character—today on iOS by doing a long press on the hyphen key.
Congrats on such an achievement. The remake looks great, but those DOS screenshots have an undeniable charm. With such a large scale game, something I always find interesting is uncovering what types of quirks and bugs bubble underneath the surface in the original version. Did you come across anything obvious in your testing?
The reason I discovered options prices were wrong is because for fun I created an In-The-Money visualization graph for when you're doing advanced options spreads and I noticed that the graph was asymetrical and profitability and loss made no sense. So with the help of Claude we debugged the code and came up with a pricing strategy that was closer to Black-Scholes. And it really is because it takes into account industry volatility and such it was a fun side quest and Michael is happy with the result which I am very proud of! It really makes me confident that one day, long live the king but, he is in his 80s. Decades from now I will be able to survive on my own, I hope.
Options pricing was not correct, which MJ knew because he simply based it on lookup table using ratios of a spread on a random security in his brokerage account decades ago! I tried to implement Black-Scholes best I could, my one contribution to the engine thus far. MJ has patched several things such as runaway interest rates and commodity prices, too-easy crypto price movements. Typos here and there. Certain edge cases that only a highly skilled player would ever come across, which due to the Discord server brought those players out of the woodwork to battle harden the game and a place for them to report the things they always knew but never had the motivation to report. But for the most part the engine is pretty damn solid.
Reading between the lines, the game logic itself hasn’t been reverse engineered yet, so adding, changing, or fixing logic still means working with the original code that only Michael Jenkins understands to this day.
In any case: massive props to Ben. This feels like a strong foundation, and I’m excited to see him continue evolving the game.
I loved this game. As soon as I saw the title I knew it would be Wall Street Raider. I play it via dosbox and for me the UI is part of the charm. I’d be interested in tinkering with the pricing simulation but from the article it seems like that’s almost impossible.
Not impossible but a lot of work. But with Custom Data API and Set Game State API you can do a lot of what you may wish you could do from modding the frontend. Not ideal but it goes from impossible to a possible!
I know it almost sounds crass, but you should consider letting an LLM take a crack at transpiling the code. Source to source translations are one of the most widely agreed upon strengths of LLMs.
I can tell you from reading the code in the 90s, no LLM will save you. It’s well written, but it’s not structured like modern programs. IIRC he invented his own trampoline system using goto that will leave you scratching your head for days, just trying to figure out how it works. An LLM might be able to guess, but it def isn’t going to one-shot it and that means you will need to be able to understand it as well.
I do think it is possible with the advent of Claude Agent to transpile the code. First I would refactor the trampoline system to be functional and unit test everything. Then I would use those tests to validate the transpilation. It's something that I would consider doing for a Wall Street Raider 2 to overhaul the engine and deliver massive improvements to the engine itself. I do want to do this to a certain extent to implement automated e2e testing. But I don't mind BASIC at all, prefer it actually, I just want automated testing set up. But a lot of this is beyond the scope of my goals for Early Access release.
If I can't get a response from a publisher here soon, I will be setting an Early Access release date of 1-2 months from now to give me some time to build up more wishlists before I pull the trigger.
This is very well written. I have fairly low interest in video games and rarely read gaming content, but read this all the way through. That’s an achievement in itself!
I figured the engineering crowd here would enjoy the technical journey and I am so grateful it got to front page so that I may talk about the technical side which I enjoy doing. I am not a hermit by nature and posting on HN really was a cry for someone to ask me a question about the backend. So I really appreciate all the technical questions gives me an opportunity to get into the weeds a bit.
Regarding "The Second Oldest Game Developer", there are also the authors of "Spacewar!": Steve Russell was born in 1937, meaning, he's either 89 or will be 89 this year. Dan Edwards must be around that age, as well.
I would love to do this. I do plan to code a PowerBasic virtual machine in order to make the game cross platform which would allow for a future with Wall Street Raider Online because my true dream? I want to play it on my phone!
I am working with Michael to remaster it. He transferred the domain name to me and I just redid the website. I'm not sure when the last time he updated Roninsoft website, but he has "retired" from working on WSR, although has been a huge help with the remaster. https://www.roninsoft.com/#:~:text=!!!%20Check%20out%20WallS...
This is a wonderful project, and the post is a wonderful read!
Are there any plans to break out portions of the Basic engine to a modern language? It's frustrating that the heart of the game remains inscrutable. Surely Ward is tempted?
Sorry I am slow! I do it on the side so. Bear with me. I try to market and post updates when I can. Even this onslaught of comments from hitting frontpage is overwhelming but I am trying to be gratious and respond to everyone!
This is amazing! Having no knowledge of Basic, a.) what makes the rewrite "impossible"? b.) how do coding agents perform on the codebase? It might make for a neat benchmark similar to ARC
I gather the version of Basic is not Object-Oriented.
So the program most likely is flat: a bunch of global variables (and possibly memory addresses), and instructions ordered by line number, rather than functions or methods.
Apparently PowerBasic was the successor to Borland TurboBasic and complied to a native executable. So this wasn't an interpreted 'line number' Basic like our kiddie computers. It also probably had the Borland Windows GUI stuff.
(However it wouldn't surprise me if older 'line number' programs still mostly worked. iirc VB6 also supported this.)
I enjoyed the read. How did you tap into the legacy Power Basic engine? Was there a FFI or some kind of bridge you could hook into? And what languages were you using?
I built an FFI via event dispatching and shared memory pointers/matching structs. Imported the C++ UI layer as a DLL via Win32 LoadLibrary. The PB shares a big array for storing global pointers allowing them to read/write each other's memory. The C++ has an event queue and has DLL functions the PB can call to peek/pop the next event. It actually isn't that complicated, just took me forever to come up with the idea.
As for languages, PB, C++, and JavaScript (Electron/Preact). I chose a no-build UI framework so that it could be modded by players without installing any build tools, just edit the text files in the game folder, and it has been a very good decision.
Indeed very clever. I wonder if you framed this problem up with claude how it would “guide” you to solve this problem. Would be an interesting match up of ai vs human. Love the story!
Others attempted to build from scratch or port it without the original developer's involvement. I worked directly with Michael and built a bridge layer into his existing codebase rather than rewriting it.
That is a really good idea. I totally forgot to include the link in that part of the story. I will definitely be making that change! Well, here is the one I think you are referring to: https://www.reddit.com/r/tycoon/s/bzjG709MLB
The real problem is idiosyncratic and esoteric coding practices from a single self-taught accountant working in a language that didn't encourage good structure.
I can translate well-written code without understanding what it does functionally, so long as I understand what it's doing mechanically.
The original author seems to build in the assumption you're not going to translate my code you'll need to rewrite it from the the tax code!
I know you'll deservedly get a lot of credit for all your work in remastering the game, but you should also get credit for how you've woven this narrative together, it's a lovely read. Thank you for taking the time to write it up, and good luck with the Steam release, and whatever project you take on next! :)
I'm still curious, however:
> That's not a marketing angle—it's a headline that writes itself.
Any ChatGPT assistance there?
I know it almost sounds crass, but you should consider letting an LLM take a crack at transpiling the code. Source to source translations are one of the most widely agreed upon strengths of LLMs.
I am sold on the game and wishlisted it but lack of release date saddens me.
I love spreadsheet games like Terra Invicta/Paradox/Simutrans and this seems like a terrific example of one.
https://labs.ramp.com/rct
"claude code plays wall street raider" would be very very cool.
https://www.roninsoft.com/wsraider.htm
Are there any plans to break out portions of the Basic engine to a modern language? It's frustrating that the heart of the game remains inscrutable. Surely Ward is tempted?
No real functions, only `gosub` and `goto` so everything is a global variable.
I think even assembler for x86 is easier to unravel.
So the program most likely is flat: a bunch of global variables (and possibly memory addresses), and instructions ordered by line number, rather than functions or methods.
(However it wouldn't surprise me if older 'line number' programs still mostly worked. iirc VB6 also supported this.)
As for languages, PB, C++, and JavaScript (Electron/Preact). I chose a no-build UI framework so that it could be modded by players without installing any build tools, just edit the text files in the game folder, and it has been a very good decision.
You are the engineer we all aspired to be. Though, you really are the chosen one.
Wish you the best!
Thank you for sharing your story.
We’ll wait.