Carve out morning time for roguelike development
CatheaD GameDev DK30 Fall 2021 2 2
Description
Okay, I give, I give! My last project was too ambitious, but I am not deterred! My latest project is a traditional roguelike, and my 30-day goal is to spend a little time (whether 5 minutes or an hour) every week-day before work on development.
Recent Updates
Life got real enough that I completely forgot about DK30! Everything is okay now though.
I’ve still been making some good progress regardless. Put together a rudimentary but structured build process, so I have binaries now!
Successful morning! Started to add a mechanic which I’ve been neglecting for a long time (item throwing). My wonderful little gremlin woke me up at 6am this morning, so my capacity for words is greatly diminished currently.
No time this morning which is okay; I did a huge push last night and got in a bunch of features that had been sorely missing. Who knew Javascript “localStorage” was a thing!
Also, I made a huge switch around mechanic-wise. I think it’s a big deal and that it works perfectly; the game is really fun now in a way that’s totally different to how it was fun before. Can’t wait to show it off!
I was able to carve out a little extra time this morning! I realized there was a quick task which I’ve been ignoring for a little while, so I went ahead and took care of it as my morning goal. In testing, I found it’s only partially resolved, but I’m just going to label it as a bug fix and move on. It’s not a huge deal, it functions now, and the bug should resolve pretty much immediately once I have time to walk through it with the debugger.
Feeling very good about this week so far!
Okay, not much time this morning, so I’ll dedicate it just to thinking while I get ready for work.
My AI is terrible right now. They all have the same template; build your FOV, see if the player is in your vision, if so chase and attack, otherwise pick a direction and wander in increments of a few steps before changing direction again. Typing it out, it sounds like something, but in practice you mostly just see the AI ram its head against the wall.
The level generation is done, so I really need to throw myself into the NW.js conversion, but once that’s done and I feel okay about the amount of content I have, I need to implement some kind of simple finite state machine for the AI.
Still going! We’re still kicking.
Had some craziness in my personal life this weekend (which thankfully seems to be all good now) but overall got a decent amount done this weekend, which I wasn’t expecting. The level generation is done!
I now have a really clear, self-contained, and flexible room accretion algorithm, along with configurable structures for doing multi-pass modifications to the level once generated. I haven’t set up too many of these structures yet but what I was aiming for was the architecture; I’ll get the content fleshed out later.
Speaking of content, I was working a bit last night and thought “let’s just try to add another item or two”, since I didn’t have much energy. I ended up implementing status effects, so that was a win.
Regardless, we’re finally back to the Achilles heel of this project; Chrome support for NW.js. As it turns out, it almost completely works out of the box except for an absolutely crippling framerate issue caused by how I’m handling the camera (position & left/right css properties rather than transform, which the browser can actually animate smoothly apparently). Frustratingly, I developed this entirely in Firefox up to this point which handles the position-based camera totally fine. I tried in the past to fix this but ended up moving on after spinning my tires for a bit. I have a new (and very simple) approach that may bear fruit though.
No big update today unfortunately! Oh well, I had most important things to do.
Will have some extra time tonight though to dig into a larger task, probably rewriting the level generation (again, which as a rule I try not to do, but this is one of those times). Maybe just content and bug fixes if I’m tired.
Have a good day!
Oops, forgot my post yesterday!
Gotten a lot of good progress lately. Lots of little details but also decisions on some larger ones. Need to sit down later and re-evaluate the short term roadmap. I have the last few major items all at ~70% and it’s unclear what I should finish up first.
Okay, not too much time today either, but it’s a special day! My favorite person in the world starts her new job today!
To commemorate, I’ll share a great video. If you have any interest at all in level generation, check out this video by Brian Walker (the incredible developer of Brogue): https://www.youtube.com/watch?v=Uo9-IcHhq_w
There’s a lot of thought around single algorithms that generate levels for roguelikes, but Brian Walker obliterates all of that with just a simple room accretion algorithm and then running multiple passes of smaller context-specific algorithms afterwards.
I’m working on implementing my own take on something similar, very much inspired by Brian Walker. Still working out hallways though:

A new week is upon us! I got up and out of bed in a timely manner, so that’s great.
I’m going back to basics a little bit. I’m finishing my coffee now, and then I’ll meditate and stretch for a bit, and finally just make some planning notes while I lounge with my cat. That feels like the right way to spend the morning to me.
I elected to completely ignore my last post and work instead on the transition animations for objects. The solution had been nagging me to get written, but it didn’t feel important enough to do so yet; perfect as a lazy night’s half-work though.
It turned out to make a really big difference! Movement feels significantly more fun & heavy now.
Okay, I think I’m getting into the swing of things now. I don’t have much time to work this morning but I can think about it a bit.
There’s 2 main points I’m currently banging my head against.
- Splash/Intro/Title/GameOver/Victory screen build out
- Map generation
I have functional versions of both working but both need a serious revamp before I can go any further.
Crazy week! I didn’t manage to get any time in this morning. Tomorrow’s another day though!
Okay, didn’t manage to do anything yesterday, but that’s okay! I don’t have much time this morning either but we’ll see what I can do.
Monday has rolled back around and here we are! I can’t carve out too much time this morning but I have a solid half hour or so, which is more than enough. Going to try to get the death screen (and probably the same mechanism for the “victory” screen) more worked out. It shows up currently, but system-wise the way the game passes off control to it is still rough.
Another successful morning! I didn’t get too much concrete progress this morning but who cares, I woke up, got out of bed, and opened the project!
I want to do a post, probably tomorrow, detailing where the game currently is and what’s left to do. It’s been in progress for probably about 2 months now, but picks up from an earlier prototype I put together for fun from years ago. Figures I’m going back to a project I had fun with!
No time this morning! Oh well. I got a lot done last night.
Back at it tomorrow!
Day 2 is here and going fast!
I managed to find the time and spare brain output to get some work done last night; I finally implemented a basic visual effect system. It’s really basic; everything else in the game is a 2 frame animation, so I decided to just use the same system (which has brought up some separation of concerns… concerns).
Anyway, I did some debugging this morning and added (optional) rotation based on the source object’s facing.
I was also just able to add 2 additional types of effects and debug a bit more, which is pretty good for the 15 minutes I spent after the original post here!
Okay, successful first day! The way I’m thinking about this DK30 is to make posting these updates the motivator to actually sit down and do something. It’s easy for me to want to be tired in the morning and just want to relax and prepare for work; this usually has the opposite effect, honestly.
Today, I added:
- Wand spawning in the game world
- A new type of wand (Fire, 6d6 damage to creatures and obliterates objects in its path).
This is how I’m spawning wands per floor (and items in general). The keys (0, 3, 9) refer to the floor of the dungeon. If the floor isn’t mentioned, it drops down to the last one (so floors 1 and 2 get floor 0’s spawning pattern, etc). Not the finest solution RNG-wise, but it works for now and it’ll be easy to refactor down the line once I have a more systematic approach in mind. I also already have the level generation itself able to be overridden on a floor by floor basis, so depending upon where things need to go, this may already be flexible enough.

Some thoughts I’m having: I need to add visual effects so that the wands feel more fun to use. I just added wands last night, finally, and so the content in the game world is starting to fill out a little now.
Estimated Timeframe
Oct 19th - Nov 16th
Week 1 Goal
Dedicate time before work each week-day to development
Week 2 Goal
Dedicate time before work each week-day to development
Week 3 Goal
Dedicate time before work each week-day to development
Week 4 Goal
Dedicate time before work each week-day to development
![Day[9]TV](/images/header-logo.png)