At last, the core level engine that handles rendering of levels can be deemed complete:
- Every stage renders correctly and the corresponding level object routines are complete.
- The code to handle the road split is complete.
- The code to transition tilemaps between levels is complete.
- The code to fade the road and sky palettes is complete.
- You can move through each level and seamlessly load the next one.
Being OutRun, there was an unbelievably large amount of code to handle the level transitions. For example, the road split works via a giant 15-way switch statement that looks at your position and sends commands to the sub CPU to alter the road.
So now it's onto gameplay. I've been coding the routines to render and control the Ferrari. This higher level code is far easier to work with than the core level engine code. Debugging an error in this area of code now thankfully involves a few minutes investigation, as opposed to the days some of the core rendering bugs took.
The code is atrociously messy in places. For example, the logic to handle smoke under the Ferrari's tyres seems to have been inserted pretty much everywhere: in the road splitting code, gear changing code, level object rendering code etc. There is nothing modular about this game!
To compensate for this, I allow my ported C++ classes to all access each other. They still have private members of course, but there's a global public reference to the class itself. The code could potentially be refactored at a later stage, but for now the focus is getting it ported and working.