Awesome game. Good to see the code is authentically bad for an indie game of that era.
Authentically bad is a good way to put it. My favorite part is the 3300 line Game::updatestate() function and its gigantic switch statement.
One can spend months agonizing over the true nature of things and how ideas and concepts relate to each other and eventually distill it all into some object oriented organization that implements not just your game but all possible games.
One can also just cycle the game's state machine in a big function, haha switch statement go brrr. Reminds me of the old NES games which would statically allocate memory for game objects, very much in the "structure of arrays" style, they too had game logic just like that.
Also reminds me of old electromechanical pinball machines. You can literally see the machine cycle.