Join us on the Linux Gaming community on Lemmy, the federated open source alternative to Reddit.
Developing my FOSS retro adventure game, FreeMazes3D
nate 24 Sep
The project started out as a random maze generator. For testing purposes, I typed it out in JavaScript as a simple browser script with a very primitive visual representation combined with large servings of console.logs to make sure that it both "looked right" and that the underlying data for the mazes were correctly logging to my browser console. At that point I still had not decided what to actually use this thing for.

During the coronavirus lockdowns last year, I had played around with a couple 3D engines (BabylonJS and Godot). I decided to go with using BabylonJS. JavaScript is, by far, the language that I've spent the most time playing around with. I also like how I can actually "type out" an entire game project using only my text editor (Atom) and the playground.babylonjs.com online testing tool.

I had already experimented with BabylonJS. So using my random maze generator's data to quickly create some actual 3D, retro-style mazes was very easy. After doing that, I needed to actually make these mazes into a game – something more than just walking through them, which is boring. I first decided to add some keys and doors to the mazes. I was now no longer just walking from a maze's start point to its end point.

However, I still wanted there to be something else to this. Just collecting keys and opening doors was not enough. I did not want the project to be just another retro FPS – I would have used GZDoom for that. So I decided to add puzzles – a core gameplay element in most 'adventure' type games (think Myst).

I then had to come up with a good way to place puzzles in this project. So I devised a way to drop the puzzles into rooms that would appear inside the mazes at certain points that, in order to progress further, you must solve a puzzle. After tinkering with this on the random maze generator, I began the much longer task of actually creating the game's puzzle content.

Now I am quick to point out that I always sucked at these kind of puzzle games and always bought the thick strategy guide books for them back in the 1990s. I am also a terrible 3D modeler, so none of this was going to look even slightly beautiful. Using the playground.babylonjs.com online tool, I created my own little workshop for cranking out this content. I made a generic empty room with a single 'force-field' style exit. Then I start playing around with it, typing out a little scene using simple 3D shapes, trying things out, playing around, testing, cussing, reading up on various parts of the BabylonJS API, until finally I have a working puzzle that removes the force-field. Then I just start copying and pasting the new puzzle's functions into the bigger game project itself.

I should pause a moment and point out that the game itself is played as a traditional desktop application, made with the Electron framework. I test as many subdivisions of the project's code as possible as simple browser scripts or using playground.babylonjs.com before bundling it all up and launching the actual game. That really helps save time and reduce swearing.

Anyway, I eventually got enough content this spring where I actually did an initial 'release.' But I only had four puzzles to offer, so the mazes seemed much too similar to each other. I've now done three more releases and have 16 different puzzles that can spawn. Finally, these random mazes are actually starting to seem like distinct little gameplay experiences. I also added treasure, secret areas, achievements, and time-limited maps to help make the gameplay more interesting. It finally, to me, feels like somewhat of a game.

As for game assets, I typed out all the 3D models you will see in this game using simple shapes from BabylonJS. For sound and music, I used material freely available for projects like this one from OpenGameArt.org. I have also provided a carefully documented credits for anyone else that wants to use the same sound/music material.

Regarding where to go next with the project, well, at this point I am looking to have more people try it out. I will also definitely be thinking of more puzzle ideas for any future releases. But at this point I could use some tester/player feedback. ;-)

For now, the game is only available on my github. If you want to try it out, a native Linux version can be downloaded and played right away (no installation necessary):

https://github.com/neytjs/FreeMazes3D/releases

BTW, I have included a "guide" txt file in the game download that should answer any simple questions you may have about gameplay. Also, try checking the key controls in game if something does not make sense. The game is not meant to be super hard, but casual friendly.
Quoting: nateThe project started out as a random maze generator. For testing purposes, I typed it out in JavaScript as a simple browser script with a very primitive visual representation combined with large servings of console.logs to make sure that it both "looked right" and that the underlying data for the mazes were correctly logging to my browser console. At that point I still had not decided what to actually use this thing for.

During the coronavirus lockdowns last year, I had played around with a couple 3D engines (BabylonJS and Godot). I decided to go with using BabylonJS. JavaScript is, by far, the language that I've spent the most time playing around with. I also like how I can actually "type out" an entire game project using only my text editor (Atom) and the playground.babylonjs.com online testing tool.

I had already experimented with BabylonJS. So using my random maze generator's data to quickly create some actual 3D, retro-style mazes was very easy. After doing that, I needed to actually make these mazes into a game – something more than just walking through them, which is boring. I first decided to add some keys and doors to the mazes. I was now no longer just walking from a maze's start point to its end point.

However, I still wanted there to be something else to this. Just collecting keys and opening doors was not enough. I did not want the project to be just another retro FPS – I would have used GZDoom for that. So I decided to add puzzles – a core gameplay element in most 'adventure' type games (think Myst).

I then had to come up with a good way to place puzzles in this project. So I devised a way to drop the puzzles into rooms that would appear inside the mazes at certain points that, in order to progress further, you must solve a puzzle. After tinkering with this on the random maze generator, I began the much longer task of actually creating the game's puzzle content.

Now I am quick to point out that I always sucked at these kind of puzzle games and always bought the thick strategy guide books for them back in the 1990s. I am also a terrible 3D modeler, so none of this was going to look even slightly beautiful. Using the playground.babylonjs.com online tool, I created my own little workshop for cranking out this content. I made a generic empty room with a single 'force-field' style exit. Then I start playing around with it, typing out a little scene using simple 3D shapes, trying things out, playing around, testing, cussing, reading up on various parts of the BabylonJS API, until finally I have a working puzzle that removes the force-field. Then I just start copying and pasting the new puzzle's functions into the bigger game project itself.

I should pause a moment and point out that the game itself is played as a traditional desktop application, made with the Electron framework. I test as many subdivisions of the project's code as possible as simple browser scripts or using playground.babylonjs.com before bundling it all up and launching the actual game. That really helps save time and reduce swearing.

Anyway, I eventually got enough content this spring where I actually did an initial 'release.' But I only had four puzzles to offer, so the mazes seemed much too similar to each other. I've now done three more releases and have 16 different puzzles that can spawn. Finally, these random mazes are actually starting to seem like distinct little gameplay experiences. I also added treasure, secret areas, achievements, and time-limited maps to help make the gameplay more interesting. It finally, to me, feels like somewhat of a game.

As for game assets, I typed out all the 3D models you will see in this game using simple shapes from BabylonJS. For sound and music, I used material freely available for projects like this one from OpenGameArt.org. I have also provided a carefully documented credits for anyone else that wants to use the same sound/music material.

Regarding where to go next with the project, well, at this point I am looking to have more people try it out. I will also definitely be thinking of more puzzle ideas for any future releases. But at this point I could use some tester/player feedback. ;-)

For now, the game is only available on my github. If you want to try it out, a native Linux version can be downloaded and played right away (no installation necessary):

https://github.com/neytjs/FreeMazes3D/releases

BTW, I have included a "guide" txt file in the game download that should answer any simple questions you may have about gameplay. Also, try checking the key controls in game if something does not make sense. The game is not meant to be super hard, but casual friendly.

I'll try to give it a go when I can. I'll aslo see if I can spread the news around a bit. Thanks for making your game FOSS !
nate 25 Sep
Quoting: PublicNuisanceI'll try to give it a go when I can. I'll aslo see if I can spread the news around a bit. Thanks for making your game FOSS !

Thanks, I hope you like trying it out. I wanted to make it FOSS from the start. I have had a lot of fun trying out other people's FOSS games and free mods over the years, so I wanted to make my own minor contribution.

Last edited by nate on 25 September 2021 at 4:33 am UTC
Julius 25 Sep
Join us on FreeGameDev.net https://freegamedev.net/d/84-freemazes3d

(we are a community of open-source game developers and players)
nate 26 Sep
Quoting: JuliusJoin us on FreeGameDev.net https://freegamedev.net/d/84-freemazes3d

(we are a community of open-source game developers and players)
Thanks for the link, I'll check it out.
While you're here, please consider supporting GamingOnLinux on:

Patreon, Liberapay or PayPal Donation.

This ensures all of our main content remains totally free for everyone with no article paywalls. We also don't have tons of adverts, there's also no tracking and we respect your privacy. Just good, fresh content. Without your continued support, we simply could not continue!

You can find even more ways to support us on this dedicated page any time. If you already are, thank you!
Login / Register

Or login with...
Sign in with Steam Sign in with Twitter Sign in with Google
Social logins require cookies to stay logged in.

Livestreams & Videos
Community Livestreams