Pillar of the Old Gods as a 7DRL


Doing a 7 day roguelike has been something I've wanted to do for years now, and with major support from my family I was able to participate this year.

Though my day jobs have changed over time, I have a history of becoming inspired with some game development idea and half completing it. I can count at least 3 that were far enough along to send out to family and friends.

Being able to ship something, all be it with limited scope, feels great.

Time will tell how (if at all) Pillar of the Old Gods is received, and if I choose to expand it further, but here is a postmortem on the week and project:

1. Design Successes

Before the week began, I had a pretty detailed design document written up. I knew 168 hours is not very much, even if I could leverage previously written infrastructure code. I decided that I would try to innovate only in two areas:

- "Interruptible turn based time"  - Time proceeds at a fixed rate unless your character is not casting an ability. This would allow larger party on party battles in a reasonable time frame (we don't have to spend forever waiting for 9 AI controlled characters to move before we go again)

- "Row based positioning" - Ditch the standard 2d grid and use rows (Front/Middle/Back) like the great 16-bit RPGs of old. 

On the first day prototypes of the new time system went swimmingly. Very few adjustments were needed to make it feel good. I added a red border around the window to note that "time is frozen", which practically works but is a bit ugly. I considered using some shader magic to make things look "frozen" or "yellow like an old photo", but decided that was good enough.

Row based positioning worked out well, but was trickier than expected. The rub is that I have two different sized characters (regular and larger 'boss' sized) and wanted the back row to "look" behind the frontline. Since many skills has fixed ranges, getting this right to make it obvious why you couldn't attack the back line was important. After a few aborted attempts, I settled on simply laying out each character in it's own 'lane'. You can move forward and backwards in that lane without changing the layout of others on screen. This limited the number of characters on a side to about 7, but that was 'good enough'.

2. Technical Rabbit Holes

My last project was written in Rust and SDL2, and I decided to stick with it here. I was tempted to try something more feature rich, such as ggez, but the limited time compelled me to stick to what I knew.

Because of this, I defaulted to the ECS library specs which I had used before. I decided to try to use the "Systems" infrastructure, instead of just passing the entire World to processing code, and it turned out to be a rabbit hole that cost me more than half a day. It went something like this:

- Systems in specs don't get access to the entire work, just slices (storage systems)

- If I want to call code from the systems to process, I'd need to pass along multiple slices.

- Passing a Storage<Foo>, Storage<Bar>, and Storage<Buzz> around many places got very clumsy.

- I heard about Legion ECS, and they have a Subworld concept that solves this, so I spend a few hours porting.

- However - I was unable to figure out how to insert new components into a subworld. Maybe I needed to use a command buffer, I couldn't figure it out.

- As the next day was ticking away, I aborted the entire branch and rewrote all of the systems to use plain World/Entity pairs.

Looking back, a 7 day project wasn't the right time to experiment with changing the fundamental data structure of your project.

3. Massive Scope Cuts

The design document I started out with turned out to be pretty darn accurate, I completed 7 days of scheduled work in about 5 1/2 days. However, I had a "stretch goals" list a mile along.

With a little over a day left, there was a major fork in the road:

- I could add complexity and depth by implementing a skill tree and equipment

- I could work on making the game more accessible with a tutorial, and porting the tooltip/help system from my last project.

My game was likely going to be on the more 'casual' side of roguelikes created this week if I chose the latter, but it seemed like a better option.

People who can actually play your game that want more depth > people who can't figure it out at all.

I'm pretty proud of the tutorial in particular. It isn't perfect, but tutorials are somewhat rare in the genre.

4. Missing Content

The lack of skill trees, and only a single class (Flame Priest) being implemented does sting a bit.

I have a full design for two very different healer archetypes on paper.

If the game finds an audience, there is a lot of depth and content I want to add:

- At least two more classes

- More abilities for each, so you can choose from a set of tools for your skill bar.

- Aura and mastery skills that change how other skills work to unlock other ways of using skills

- A skill tree for unlocking abilities and stat bumps

- A stacking modifier based difficulty where you choose modifiers for future fights to make them more difficult.

- A light resources management "camping" system where you spend resources to heal/buff between fights.

- Party commands where you can direct your allies to target certain creatures / fight defensively / burst damage a target.


Despite this cut content, and the missteps along the way, taking part of the 7DRL this year was an amazing experience. I am very proud of what I was able to accomplish, and am very thankful for the opportunity to do it with the community.

Files

Pillar-of-the-Old-Gods-7DRL.zip 5 MB
Mar 14, 2021

Get Pillar of the Old Gods

Leave a comment

Log in with itch.io to leave a comment.