Devlog #4: Skeleton Gameplay Loop


This week my goal was to get the skeleton of the main gameplay loop up and running. For a dungeon crawler this is the Town <-> Dungeon loop in which the player enters the dungeon, explores and gets beat up, and returns to town to heal and level up by sleeping at the inn. To that end this actually involved a lot of UI work.

Town Services UI

The Playdate has a 400x240 pixel screen. This fairly limited screen real-estate means that many modern UI designs are simply intractable. This means one has to compromise and/or break up UI into multi-part flows simply because the information won't necessarily easily fit on the screen. I say all this because I went through several iterations of the town UI this week before finally deciding to break things into two separate flows for what I call "Services", these are purchasable things from the Inn or Chapel that are applied immediately to character. There is also a separate flow for "Shops" in which you purchase things that go into your inventory.

So, the final design for now for services is a multi-page dialog in which you first pick the service (Verb) and then the person to apply the service to (Noun). You can easily apply the same service to multiple party members by just pressing (A) on each of them. This was a compromise between several possible options and I think it works pretty good for now.


Dungeon UI

The dungeon editor and file format itself also needed several changes related to allowing doors to properly function and allowing users to exit the dungeon back to town. While the dungeon view still needs a lot of work we now have working doors and exits. I've also begun sketching out the design and ideas for encounters, puzzles, and a boss on the first level of the dungeon.


Combat UI

The combat UI also needed some refinement specifically to ensure consistency with the dungeon view and then to ensure that menus and logs scroll appropriately. To this end I've added scrolling, removed the UI carets, and used highlighting for menu and player/enemy selection.

Combat was also tweaked by adding miss streak breaking where repeated misses are compensated for and a natural 20 on a d20 produces an instant hit. This just helps to break up long streaks of misses between enemies and players which are unfun and tedious.

Finally we also added chests, chest traps and disarming, and floor and enemy-specific loot:


Data Tables (The Lifeblood of an RPG)

Finally, it was time to get real about how we were managing data for the RPG. Previously, I was just hardcoding values into the codebase, but that was quickly becoming untenable and also because we are trying to keep a string table for the whole game it was just getting nasty. So I spent a day this week working on a custom system for storing tables and collating all the various table data into generated code in the game as well as putting all the strings in a string table and appropriately referencing them where needed. The code generation then runs as a prebuild step so we always compile with the latest data from our tables.

I may eventually move some of the tables to a spreadsheet or CSV or something, but for now they live in TCL files imported by the various generators.

Conclusion

Overall, we did hit the goal of having a working town <-> dungeon game loop. The goal now is to begin balancing that loop and fleshing out the first level of the dungeon. This is what I'll be doing next week as well as continuing to refine art assets and music.

Leave a comment

Log in with itch.io to leave a comment.