A game about moles mining with dynamite and blowing each other up (a Bomberstein3D).
- Add a "Days Since Last Accident" counter to the title screen :)
- Projection and RayCasting options should be loaded from a config etc.
- Add the multiplayer split screen rendering.
- Render mole animations in view projections.
- Add the multiplayer input control systems.
- Fix the fisheye in the raycasting even more.
- Replace the player angles with a vector for forward.
- Add a title screen.
- Apply the map collision detection in the game itself.
- Pause menu centre alignment.
- Projection rendering based on the results of the ray casting.
- Load player spawn points from the Tile Map.
- Pause menu sounds.
- Pause menu quit confirmation.
- Refactor/2nd pass on the screen/scene/state managment.
- Add a pause menu.
- Screen/scene/state managment.
- Change the animation based on the movement and direction of the player.
- Load a Tiled map.
- When rendering top-down, use an orthographic camera that follows the player.
- Bug: prototype janky collision detection... allow player to move flush up against the wall.
- Render mole instead of circle for player.
So... I wrote the prototype in C#. Then, after some playtesting and realising that the game might have some legs, I knew I had to do some fairly heavy refactoring. But, the harder I refactored, the more it became a re-write. And then the harder I re-wrote, the more of a hot spaghetti mess it became again.
I am 100% finding it hard to write game code. It is quite far removed from the kind of code that I write day-to-day in boring business software land. Dependency injection, strategy patterns, and event streaming have me all in a muddle - and my game code just ends up being a hot mess that I struggle to work with without introducing 3 bugs for every 1 feature.
I've had quite a lot of experience in F#, and I'm fairly confident with it. One of the nice things about it is that it forces you to be more strict... and in this instance, the strictness I think comes from the lack of circular dependencies (which is enforced at compile-time with the type system).
So, consider this to be a kind of prototype++.
- MapViewer: used to quickly test tile map rendering, tile destruction, and an orthographic camera.
- Floored: to figure out how to do the floor texturing (Mode7 camera)... hopefully this will work!
- Collider: to figure out how to do the collision detection.
- (Ray) Stantz: to figure out how to do the ray casting.