Hacker News
Reversed engineered game Starflight (1986)
s-macke
|next
[-]
There is still a functioning Forth interpreter implemented in the game. If they hadn’t removed all the word names, it would have been possible to debug at any time and analyze the program state and call functions live with real Forth code. Some crazy feature at that time.
crq-yml
|root
|parent
|next
[-]
Microblog: https://gamemaking.social/@SpindleyQ/115058149348319018
s-macke
|root
|parent
|next
|previous
[-]
[0] https://web.archive.org/web/20030906124225/http://www.sonic....
sponaugle
|root
|parent
|previous
[-]
The other game this reminds me of is a game for the TI99/4a called Tunnels of Doom. It was a cartridge game that also had a floppy or cassette data load. It had a dynamic dungeon creation so every time you played the game you got a new unique experience. That would be an equally challenging one to reverse engineer due to the oddity of the GROM/GPL architecture in the TI99/4a.
twoodfin
|next
|previous
[-]
The embedding of the story within what was almost entirely free-form exploration & adventure across a huge galaxy was masterful.
You could feel how close the creators were to the edge of what was possible with the save game system: Basically, the disk was a memory image. As you played the game would rewrite itself, so if you got stuck there was no “reset”. The documentation was emphatic: Only play with a copy of the original disk!!
reactordev
|root
|parent
|next
[-]
This was crazy! World gen is hard. Proc world gen is NP hard. Story driven proc world gen with persistence in 1986 was Kaku level brilliance.
scandox
|root
|parent
[-]
jhbadger
|root
|parent
|next
[-]
reactordev
|root
|parent
|next
|previous
[-]
Similar techniques apply today. Pregen like 100,000 stars. Give them names and locations in the galaxy, treat them as your "locations of interest" with a seed. The rest can just be another cloud of particles with no interest and if the player visits, you can RNG whatever based on the seed. No two systems can share a seed. They can, however, share a branch.
dzdt
|next
|previous
[-]
s-macke
|root
|parent
|next
[-]
EarlKing
|root
|parent
|previous
[-]
torgoguys
|root
|parent
[-]
EarlKing
|root
|parent
[-]
dzdt
|root
|parent
[-]
https://web.archive.org/web/20031218202130/http://www.sonic....
When you navigate those directory archives many of the files are missing. E.g.
https://web.archive.org/web/20030529230704/http://www.sonic....
Some design documents ARE there, e.g. "Specification of 3d display for starquest" : https://web.archive.org/web/20030719111039if_/http://www.son...
somenameforme
|next
|previous
[-]
It's open world, clue based, and with some amazing plot. Like the article mentions, the ending twist alone makes it worth suffering through your notepad of a million little hints thrown at you throughout the game. It's also the sort of game you can beat in [literally] 5 minutes if you know everything ahead of time. So I would strongly recommend avoiding walkthroughs/spoilers. The whole game is about piecing together the puzzle of what's happening and it's amazingly immersive.
Generally a game that was way ahead of its time.
ashdnazg
|next
|previous
[-]
> The reason is that Starflight was written in Forth
I recently reverse-engineered another game from the 80's, and had a similar issue because it was written with Turbo Pascal.
The different tools didn't like quirks such as data stored inline between the instructions or every library function having a different calling convention.
Turns out the simplest way to handle this was to write my own decompiler, since Turbo Pascal 3 didn't do any optimisations.
flanbiscuit
|next
|previous
[-]
This reminds me of Star Control 2, aka The Ur-Quan Masters
> The game influenced the design of numerous other games for decades after its release.
And in SC2 wiki page I see this:
> Once Reiche and Ford conceived Star Control 2, they would draw large inspiration from Starflight.
https://en.wikipedia.org/wiki/Star_Control_II
Never played Starflight before but seems right up my alley as SC2 is one of my favorite games
Edit: Just finished reading the rest of the readme. Very cool! I honestly knew nothing about Forth (just that it was a programming language) and now I want to play around with it.
jamesmcneill
|next
|previous
[-]
Starflight was my first experience with game patching. When I got my copy it would not run on my PC. I believe it was because I had an EGA graphics adapter. I wrote a letter explaining my problem and mailed it to Electronic Arts. They mailed a letter back. It said there should be a program on my computer named debug.com, and gave instructions about how to load the Starflight executable in it, replace a couple of bytes, and save it out. I followed the patch instructions and it got the game working! After which I spent many happy hours with my friends exploring the Starflight universe.
stevekemp
|next
|previous
[-]
hinkley
|next
|previous
[-]
I don’t know when I started the game, but I finished it the summer after my freshman year, which is where I first got Internet access.
davidee
|next
|previous
[-]
Random edit: It's also how I learned the word obsequious.
randomtoast
|next
|previous
[-]
Spooky23
|next
|previous
[-]
Thank you for posting this!
loloquwowndueo
|next
|previous
[-]
80s - 80ths is a fraction (1/80).
Also - the publisher was Electronic Arts, already well-established at that point. Binary Systems were the developers.
purplezooey
|next
|previous
[-]
LogicFailsMe
|next
|previous
[-]
copx
|next
|previous
[-]
lebuffon
|root
|parent
|next
[-]
The end result of that is one doesn't write the program in "Forth" per se but in the domain specific language you create for the job. This is how Forth gets more productive than pure assembly language if the team documents things well and follows the prescribed system.
ajross
|root
|parent
|previous
[-]
[1] Non-trivial optimizations were just starting to show up on big systems, but Microsoft C in 1985 was still a direct translator.
newsoftheday
|next
|previous
[-]
krige
|next
|previous
[-]
jhbadger
|root
|parent
|next
[-]
lstodd
|root
|parent
|previous
[-]
lebuffon
|root
|parent
|next
[-]
And modern systems compile optimized native code (VFX Forth, SwiftForth) but still remain fully interactive at the console.