Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
* [Caml-list] ANN: Boulder Dash in OCaml
@ 2024-11-12 15:55 Andreas Rossberg
  2024-11-12 23:28 ` Daniel Bünzli
  2024-11-26 17:38 ` Andreas Rossberg
  0 siblings, 2 replies; 8+ messages in thread
From: Andreas Rossberg @ 2024-11-12 15:55 UTC (permalink / raw)
  To: caml-list

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


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Caml-list] ANN: Boulder Dash in OCaml
  2024-11-12 15:55 [Caml-list] ANN: Boulder Dash in OCaml Andreas Rossberg
@ 2024-11-12 23:28 ` Daniel Bünzli
  2024-11-13  9:44   ` Andreas Rossberg
  2024-11-26 17:38 ` Andreas Rossberg
  1 sibling, 1 reply; 8+ messages in thread
From: Daniel Bünzli @ 2024-11-12 23:28 UTC (permalink / raw)
  To: Andreas Rossberg; +Cc: caml-list

On Tuesday, 12 November 2024 at 16:55, Andreas Rossberg <rossberg@mpi-sws.org> wrote:

> Boulder Dash() was my favourite computer game in the 8-bit era,

Nice remembrance, thanks! I also likely spent quite a few days with it on a C64. 

As WASM support is being merged to js_of_ocaml [0] this is screaming for a web page implementation to taste your own food :-) (and would nod to [1]).

I quickly tried to compile to js with js_of_ocaml's graphics version [2] but I timed out before getting something functional.

Best,

Daniel

[0]: https://github.com/ocsigen/js_of_ocaml/pull/1724
[1]: https://ocsigen.org/js_of_ocaml/latest/manual/files/boulderdash/index.html
[2]: https://ocsigen.org/js_of_ocaml/latest/api/js_of_ocaml-lwt/Graphics_js/index.html

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Caml-list] ANN: Boulder Dash in OCaml
  2024-11-12 23:28 ` Daniel Bünzli
@ 2024-11-13  9:44   ` Andreas Rossberg
  0 siblings, 0 replies; 8+ messages in thread
From: Andreas Rossberg @ 2024-11-13  9:44 UTC (permalink / raw)
  To: Daniel Bünzli; +Cc: caml-list

On 13. Nov 2024, at 00:28, Daniel Bünzli <daniel.buenzli@erratique.ch> wrote:
> 
> As WASM support is being merged to js_of_ocaml [0] this is screaming for a web page implementation to taste your own food :-) (and would nod to [1]).
> 
> I quickly tried to compile to js with js_of_ocaml's graphics version [2] but I timed out before getting something functional.

Good idea! I also spent an hour just now trying to get it to work with either js_of_ocaml or wasm_of_ocaml, but failed. It builds fine, but with the former I just get an empty page, while the latter produces a mime type error somewhere inside that I don’t quite grasp.

I admit that I have very little experience with these tools, or web apps in general. Perhaps somebody more knowledgeable wants to give it a shot… :)

Cheers,
/Andreas


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Caml-list] ANN: Boulder Dash in OCaml
  2024-11-12 15:55 [Caml-list] ANN: Boulder Dash in OCaml Andreas Rossberg
  2024-11-12 23:28 ` Daniel Bünzli
@ 2024-11-26 17:38 ` Andreas Rossberg
  2024-11-27  6:54   ` Yotam Barnoy
  2024-11-27 10:44   ` Vu Ngoc San
  1 sibling, 2 replies; 8+ messages in thread
From: Andreas Rossberg @ 2024-11-26 17:38 UTC (permalink / raw)
  To: caml-list

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
> 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Caml-list] ANN: Boulder Dash in OCaml
  2024-11-26 17:38 ` Andreas Rossberg
@ 2024-11-27  6:54   ` Yotam Barnoy
  2024-11-27  9:03     ` Andreas Rossberg
  2024-11-27 10:44   ` Vu Ngoc San
  1 sibling, 1 reply; 8+ messages in thread
From: Yotam Barnoy @ 2024-11-27  6:54 UTC (permalink / raw)
  To: Andreas Rossberg; +Cc: caml-list

[-- Attachment #1: Type: text/plain, Size: 3410 bytes --]

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.

On Tue, Nov 26, 2024 at 7:39 PM Andreas Rossberg <rossberg@mpi-sws.org>
wrote:

> 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
> >
>
>

[-- Attachment #2: Type: text/html, Size: 4383 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Caml-list] ANN: Boulder Dash in OCaml
  2024-11-27  6:54   ` Yotam Barnoy
@ 2024-11-27  9:03     ` Andreas Rossberg
  0 siblings, 0 replies; 8+ messages in thread
From: Andreas Rossberg @ 2024-11-27  9:03 UTC (permalink / raw)
  To: Yotam Barnoy; +Cc: caml-list

[-- Attachment #1: Type: text/plain, Size: 4162 bytes --]

Yeah, well, the core physics of Boulder Dash is akin to a cellular automaton whose state is advanced in ticks. So its state naturally is a 2D array with a constant change rate, and there isn’t too much to gain by a more functional representation, especially since OCaml doesn’t offer functional array types.

The uglier part in terms of being very imperative is the UI code, but without a more functional graphics library that’s probably a lost cause.

Performance would be the least of the issues, given that 1 MHz computers from the 80s were able to handle this game. :)


> On 27. Nov 2024, at 07:54, Yotam Barnoy <yotambarnoy@gmail.com> wrote:
> 
> 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.
> 
> On Tue, Nov 26, 2024 at 7:39 PM Andreas Rossberg <rossberg@mpi-sws.org <mailto:rossberg@mpi-sws.org>> wrote:
>> 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 <mailto: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
>> > 
>> 


[-- Attachment #2: Type: text/html, Size: 5661 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Caml-list] ANN: Boulder Dash in OCaml
  2024-11-26 17:38 ` Andreas Rossberg
  2024-11-27  6:54   ` Yotam Barnoy
@ 2024-11-27 10:44   ` Vu Ngoc San
  2024-11-27 16:58     ` Andreas Rossberg
  1 sibling, 1 reply; 8+ messages in thread
From: Vu Ngoc San @ 2024-11-27 10:44 UTC (permalink / raw)
  To: caml-list

that's really impressive, thanks for this!
for the sound in SDL, why not use tsdl_mixer ?

San

Le 26/11/2024 à 18:38, Andreas Rossberg a écrit :
> 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
>>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Caml-list] ANN: Boulder Dash in OCaml
  2024-11-27 10:44   ` Vu Ngoc San
@ 2024-11-27 16:58     ` Andreas Rossberg
  0 siblings, 0 replies; 8+ messages in thread
From: Andreas Rossberg @ 2024-11-27 16:58 UTC (permalink / raw)
  To: Vu Ngoc San; +Cc: caml-list

Ah, I wasn’t aware that binding existed, thanks for the hint!

> On 27. Nov 2024, at 11:44, Vu Ngoc San <san.vu-ngoc@laposte.net> wrote:
> 
> that's really impressive, thanks for this!
> for the sound in SDL, why not use tsdl_mixer ?
> 
> San
> 
> Le 26/11/2024 à 18:38, Andreas Rossberg a écrit :
>> 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
>>> 
> 


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2024-11-27 16:59 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-11-12 15:55 [Caml-list] ANN: Boulder Dash in OCaml Andreas Rossberg
2024-11-12 23:28 ` Daniel Bünzli
2024-11-13  9:44   ` Andreas Rossberg
2024-11-26 17:38 ` Andreas Rossberg
2024-11-27  6:54   ` Yotam Barnoy
2024-11-27  9:03     ` Andreas Rossberg
2024-11-27 10:44   ` Vu Ngoc San
2024-11-27 16:58     ` Andreas Rossberg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox