AD Epoch Posted March 13, 2024 Hi All. A few days ago I released a pet project onto Sourceforge that may or may not be good.... I'm happy if it isn't of interest. The proejct can be found here https://sourceforge.net/projects/a-wad-of-dungeon-mazes/files/. It's not perfect, and is written in Python so is quite slow (mostly the BSP generation I think). But if it gives someone a fun hours worth of game play then it was worth making. I built it because I was looking for some unpredicatable dungeon crawl gameplay, and realised I could turn it into a Doom level generator. I also like reinventing the wheel just to see if I can make it round, so building it from scratch was the aim, and not using anyone else's BSP algorithms. Anyway, I hope it's useful, if not then that's ok, happy to play it myself :-) 6 Quote Share this post Link to post
Michael63 Posted March 13, 2024 Perhaps some screenshots would gain interest to your program :) 0 Quote Share this post Link to post
AD Epoch Posted March 13, 2024 2 minutes ago, Michael63 said: Perhaps some screenshots would gain interest to your program :) I understand what you're saying. Although that makes sense from a posting point of view, the pictures wouldn't be any different to what are on Sourceforge's page (just a Tkinter window with fields like WAD file name-> IWAD location -> etc) which would be boring anyway. And to play the result.... well that's just pictures of Doom... Not sure if it's worth anything more than the link to Sourceforge? 0 Quote Share this post Link to post
AD Epoch Posted March 13, 2024 (edited) Here's the images anyway. You just need an IWAD (FreeDoom's will do) and an engine. I use Chocolate Doom perosnally. Edited March 13, 2024 by AD Epoch 2 Quote Share this post Link to post
Michael63 Posted March 13, 2024 What about the final results? I mean some screenshots of maps generateg by the program. 0 Quote Share this post Link to post
bejiitas_wrath Posted March 13, 2024 I gave this a go and made a maze. The map spawned a cyber right in front of me. Impossible to beat. But it does work on Linux fine. Needs some tweaking to not create impossible maps. 1 Quote Share this post Link to post
AD Epoch Posted March 13, 2024 Ok, here's a map picked at random from a campaign file. I've opened it up in Doom Builder and taken a screen snap. It works by making a random grid maze, then filling in walls that should be closed, random monsters etc. 2 Quote Share this post Link to post
Redneckerz Posted March 13, 2024 5 hours ago, AD Epoch said: Hi All. A few days ago I released a pet project onto Sourceforge that may or may not be good.... I'm happy if it isn't of interest. The proejct can be found here https://sourceforge.net/projects/a-wad-of-dungeon-mazes/files/. It's not perfect, and is written in Python so is quite slow (mostly the BSP generation I think). But if it gives someone a fun hours worth of game play then it was worth making. I built it because I was looking for some unpredicatable dungeon crawl gameplay, and realised I could turn it into a Doom level generator. I also like reinventing the wheel just to see if I can make it round, so building it from scratch was the aim, and not using anyone else's BSP algorithms. Anyway, I hope it's useful, if not then that's ok, happy to play it myself :-) I am interested in the bolded. I like the idea of a maze generator, so good job! But you mention that your BSP generation routines were made from scratch. Was their anything that inspired you to do this? What features does your BSP routines support? Furthermore, perhaps the BSP generation routine could be reworked into a node builder ala Zennode. The more alternatives the merrier, right? Afterall, NanoBSP became the default node builder for Woof. 2 Quote Share this post Link to post
AD Epoch Posted March 14, 2024 (edited) 19 hours ago, Redneckerz said: I am interested in the bolded. I like the idea of a maze generator, so good job! But you mention that your BSP generation routines were made from scratch. Was their anything that inspired you to do this? What features does your BSP routines support? Furthermore, perhaps the BSP generation routine could be reworked into a node builder ala Zennode. The more alternatives the merrier, right? Afterall, NanoBSP became the default node builder for Woof. Sorry, it told me I'd posted too much in a 24 hour period to post again... (and incidentally I just found a bug in something so I have re-released a new version. I refactored some of my code, and failed to test whether the capaing play command worked properly). Good question. I used Zennode during the development process, before I'd made a working routine myself. I guess the main reason to build my own was to climb a personal mountain (so to speak), but also that if I released it (as I've done) then people wouldn't need to download another component on top of what they already would need. Unfortunately trying to sort out a node builder algorithm was working out to be hard than I'd assumed. I even looked at Zennode's code to see if I could borrow the algorithm and Pythonise it, but the writer of that tackled the surrounding stuff different to how I'd already done it. So I couldn't just shoehorn it in. What I ended up with was some code that could build node trees in one direction quite easily, but when it would often choose to go another direction it would then ignore intermittent nodes until it hit a point where it couldn't safely assimilate them into the pyramid. In the end I realised that since my whole sector layout was in a grid I could limit the node collection to rows, then do the top level nodes of each row after that. I even had it spitting out SVG files so I could see what was going on (you'll find the code uncalled in the app, but still enabled). I had intended on letting it build campaign maps in SVG, but realised that this process was really slow, so thought better of it (and one of the campaign map parts is left unfinished in the code as the map ends up upsidedown (you know, positive screen integers go the opposite direction to positive cartesian ones), I never got back to righting it, but the node map was right way up). You'll find all the node building stuff in the geometry.py module, with the builder object itself towards the bottom. To extend it to cater for any map you need to make one critical change to the subsector production. I could get away with my Sector objects creating just one subsector, because all sectors are occlusion safe. You'd need to have it calculate any breakups of Sectors into subsectors with no occlusion issues before unleashing it on any map. The second problem is then to get it choosing the best subsector to outside the one direction/dimension, without it overlapping and excluding nodes that it shouldn't. This will be doable... probably by someone with a bigger brain than me. You'll find a section in the geometry.NodeBuilder._getBestIndexesToAggregateNext method where I initially had code for non neighbouring collection (thinking nodes that overlap or are disjoint). As the neighbouring aggregations were working well I just cut my losses and got that working for the whole map. There's a lot of redundant code left over because of all the experiments I ran trying to get non-neighbouring nodes to aggregate safely into one big pyramid. Feel free to extend or improve my code. I release it open source so that, if people find it useful, they can borrow/use it. I'm all for free/libra software :-) At some point I'd still like to Pythonise the Zennode algorthim just for BSP's, but before I do that I want to C++ise my own algorithm then call it with ctypes to see if it improves speed. Will make a good experiment just for the fun of it. Edited March 14, 2024 by AD Epoch 1 Quote Share this post Link to post
AD Epoch Posted March 16, 2024 I should also say that I haven't fully documented this yet, but if you want to change the campaign settings it's possible without changing the Python code. It saves out the default campaign settings as a json file on exit, if the file doesn't exist. If you edit this file it overrides the campaign settings when you reload the app next time. 0 Quote Share this post Link to post
AD Epoch Posted March 20, 2024 I've release yet another version of the app with a much more compact UI, due to seeing someone with Zoom set at the default 150% for their desktop, and them not being able to see the bottom buttons to execute the commands. 1 Quote Share this post Link to post
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.