Comment by chollida1

4 days ago

Oh man, this has been posted probably 100 times now but this is still a great blog.

I guess today another 10,000 people will learn about how crash bandicoot was made.

https://xkcd.com/1053/

I was in video game development at the time and it was really exciting due to the switch from 2D to 3D for most games which made the math a programmer was required to know go way up in complexity.

And you hade new things called graphics cards that had their own apis to program to and drivers that didn't always do what they were supposed to do so you were always feeling around in the dark a bit when working with a new console or new graphics card. I remember so many bugs that weren't necessarily our fault, but the fault of buggy drivers or a misimplemened OpenGL call by the driver or console provider.

I couldn't imagine layering on top of that a lisp dialog to program your game in given that we were doing incredible things to shave off milliseconds. It seems counter intuitive to put a high level interpreted language ontop of that but these geniuses pulled it off!!

There was a great conversation with Matt Godbolt on CoRecursive recently [1]. It was a bit of a dive into how some of those abstractions are a lie and, particularly in early game dev, how you can create magic by realising that then exploit how the hardware actually works. Highly recommend a listen.

[1]: https://corecursive.com/godbolt-rule-matt-godbolt/

I got into professional games dev at 18. The first and only released game I worked on became the worst of both worlds. It was started as a 2D isometric game, but we ran out of RAM for all the sprites we'd rendered, so we changed to 2D landscape with 3D characters, which was a clusterfuck of rendering. The tile rendering of the backgrounds had to be interlaced with the rendering of the characters since the characters could walk under and behind objects, even semi-transparent objects. I was glad for all the demo code I'd written years before.

Crash Bandicoot used a Lisp meta-language called GOOL which translated to assembly for the game target. The translator was in Common Lisp, runnng on development/build machines not on the target (and and itself would have almost certainly been compiled, not interpreted).

  • Well, the first crash interpreterd GOOL, and the subsequent ones only compiled some common expressions.

    A full compiler for the target came with GOAL in Jak & Daxter.

  • > Crash Bandicoot used a Lisp meta-language called GOOL which translated to assembly for the game target.

    This is incorrect but I see someone else already corrected you. It wasn't until later on that they created assembly compilation.

The dialect of lisp used in those games is not interpreted

  • The version in crash 1 is fully interpreted, and subsequent crash games only compiled a few very hot path expressions.

    The full compiler came later with GOAL.