Developing my FOSS retro adventure game, FreeMazes3D
Page: 1/2»
  Go to:
nate Sep 24, 2021
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.
PublicNuisance Sep 24, 2021
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 Sep 25, 2021
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 Sep 25, 2021
Join us on FreeGameDev.net https://freegamedev.net/d/84-freemazes3d

(we are a community of open-source game developers and players)
nate Sep 26, 2021
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.
slembcke Oct 22, 2021
It definitely has a nice classic maze puzzler feel to it. :) I finished a couple mazes over lunch.

Feedback:
* The mouse input has way too much smoothing. Make it feel really drunk/mushy.
* The game looses mouse focus if you switch away from it.
* Is it possible to use keyboard scancodes with Electron? This is super awkward to play on a non-qwerty keyboard.
* The solid color walls are very bland. A little shading, or at least outlines would give them a lot of extra depth.
nate Oct 24, 2021
Quoting: slembckeIt definitely has a nice classic maze puzzler feel to it. :) I finished a couple mazes over lunch.

Feedback:
* The mouse input has way too much smoothing. Make it feel really drunk/mushy.
* The game looses mouse focus if you switch away from it.
* Is it possible to use keyboard scancodes with Electron? This is super awkward to play on a non-qwerty keyboard.
* The solid color walls are very bland. A little shading, or at least outlines would give them a lot of extra depth.
Glad you liked trying it! Thanks for the feedback. I will take this into account for future releases. I already found a fix for the ALT-TABing issue (it's just not on my github yet though).

BTW, what type of non-Qwerty keyboard do you use? I will look into adding support for this.
slembcke Oct 25, 2021
Quoting: nateBTW, what type of non-Qwerty keyboard do you use? I will look into adding support for this.

I was being vague on purpose... hehe (sigh, mild rant incoming) People usually have an immediate reaction and tell me all their opinions based on an article they read once about keyboard myths when I tell them I use Dvorak. -_- I used to have terrible, and consistent wrist pain if typing for too long, and Dvorak fixed that immediately. Any other reason, myth based or otherwise is utterly unimportant to me. (end of rant)

Anyway, I'm pretty accustomed to switching layouts regularly for games. It's fine, just a mild annoyance. I've seen azerty (french keyboard layout) users mention it before too.

Many libraries (ex: SDL) use keyboard scancodes. USB keyboards actually all send the same code for keys located at the same physical positions, so regardless of the selected keyboard layout or labels printed on the keys. So what you think of as being WASD always send the same codes. I assume the reason for this is so any keyboard can trivially be compatible with any layout. If you can do use scancodes in Electron, it's generally going to be your best option, but it's not always supported. There has been an open feature request for Unity to do this for more than a decade now for example...

However, if all you need is WASD + a couple action keys there is an even easier solution. Just map multiple keys! It just so happens that there aren't conflicting keys for the most popular layouts so you can map all of them at the same time and the player probably won't notice. Worst case scenario they notice there are other keys that make them move for some reason. ;)

'WASD' on Dvorak is ',AOU' (that's a comma)
'WASD' on Azerty is 'ZQSD'

Last edited by slembcke on 25 October 2021 at 10:10 pm UTC
nate Oct 27, 2021
Okay, I will add a config file where users can adjust the action keys (W/A/S/D/E). The changes will then take effect when they next launch the game. I'll try adding that into the next big release (v0.5), which will also have some interesting graphical updates.
nate Nov 9, 2021
I have released version 0.5. The biggest change with this release is that I have decided to take the game in a different direction graphically. I created an entire collection of retro, low-resolution textures and have applied them to almost everything in the game world (with the notable exception of the skies, which are still solid color).

I intentionally limited the texture file sizes to 128 by 128 pixels for walls/floors and 64 by 64 pixels for item/object textures. Most textures also have a hard limit of no more than 16 colors, except for a few floors that have as many as 32 colors. These size/color restraints help enforce the game's desired retro look. Note, the textures are all original work, derived from pictures I took with an incredibly cheap and barely functional digital camera. I originally made them as a 256 by 256 pixel size collection for another project idea about two years ago.

I also added a feature so you can customize the key bindings. It is as simple as editing the letters in the config.json file. Be careful not to delete any commas, quotation marks, or anything else that could make the JSON invalid. If invalid JSON is detected, it will just give you the default QWERTY keys.

You can now also alt-tab in and out of the game without any issues.

As always, the latest version can be downloaded at my github:
https://github.com/neytjs/FreeMazes3D/releases
nate Jan 16, 2022
Just did another release (version 0.6). This one mainly just adds more content to the game. Four new puzzles can now spawn in the mazes. This brings the total number of puzzles up to 20. I should add that many of the puzzles themselves have different random solutions, which helps make each maze seem a little bit different from the previous.

Download link:
https://github.com/neytjs/FreeMazes3D/releases
While you're here, please consider supporting GamingOnLinux on:

Reward Tiers: Patreon. Plain Donations: PayPal.

This ensures all of our main content remains totally free for everyone! Patreon supporters can also remove all adverts and sponsors! Supporting us helps bring 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 Google
Social logins require cookies to stay logged in.