Very nice! Since you're already toying with the code, you might want to try and test the impact of moving towards a more functional, immutable data structure approach. I've found that you can separate out those parts of the game state that change more rapidly and those that don't, and the slow-changing parts can easily tolerate functional paradigms, with the advantage being greater safety and reduced state complexity.
Couldn’t let it rest, so I’m (already) announcing version 2 of it — now a much improved, practically feature-complete reimplementation of both Boulder Dash 1 & 2.
Version 2 was an excuse for me to mess around with the OCaml bindings to popular graphics engines, and as a result, it now comes with 3 backends to choose from:
1. the homely bare OCaml Graphics library (https://github.com/ocaml/graphics),
2. the TSDL binding to the SDL2 API (https://github.com/dbuenzli/tsdl),
3. the binding to the Raylib engine (https://github.com/tjammer/raylib-ocaml).
The list is in order of increasingly better user experience, for the price of a potentially harder build experience. In theory, all versions should run on Windows, Mac, and Linux, though I was too lazy to test all combinations, and I (or my opam) had trouble installing some of the dependencies on some of the systems.
Features:
* Faithful original physics, graphics, animations, sound, and music
* Authentic scrolling mechanics combined with dynamic resizing
* All 40 levels and 5 difficulties of Boulder Dash 1 & 2
* Pause-and-go mode for relaxed playing
Relative to the previous release, version 2 adds the following niceties:
* Support for SDL and Raylib engines, which allow all of the following
* Original sound effects and music
* Original level color schemes
* Full screen mode
* Faster graphics
* Dynamic graphics scaling adjustment
* Gamepad/joystick support as well as more precise keyboard controls
* Boulder Dash 2 levels and decoder
Almost looks like a real game now. One from the 80s anyways. :)
Enjoy,
/Andreas
> On 12. Nov 2024, at 16:55, Andreas Rossberg <rossberg@mpi-sws.org> wrote:
>
> Boulder Dash(*) was my favourite computer game in the 8-bit era, first released on the Atari 400/800 in 1984. Though I never owned an 8-bit machine myself, I had friends that I annoyed enough to let me play it on theirs.
>
> As a homage to its 40th anniversary, I put together a fairly faithful clone of the original game, implemented in just a few 100 lines of bare OCaml, with nothing but the homely Graphics library. It should run on Windows, Mac, and Linux, though I was too lazy to test the latter.
>
> Features:
>
> • Faithful original physics, graphics, and animations
> • Authentic scrolling mechanics combined with dynamic window resizing
> • All 20 levels, including intermissions, and 5 difficulties
> • Pause-and-go mode for relaxed playing
>
> It is open-source here:
>
> https://github.com/rossberg/boulder-dash
>
> Enjoy!
>
> /Andreas
>
> (*) https://en.wikipedia.org/wiki/Boulder_Dash_(video_game)
> "Boulder Dash" is a trademark of BBG Entertainment
>