Hey everyone, back with another quick update!
Since the last update I've expanded the feature set and scope of version 1.7 (uh oh… feature creep!). Nine of the eleven planned phases are now complete.
The headline addition is a full town system. When transitioning to floor 10 the game loads a hand-authored static level from a binary .LEV file containing buildings, shopkeepers, and wandering NPCs. There are planned static towns for floors 20, 30, and 40 as well. For now the deeper periodic towns fall back to a procedural generator that writes a valid .LEV file at runtime. In addition to the periodic towns there are also rare random towns that can be discovered in the dungeon, which transport you to a dynamically generated town with a selection of NPCs. I've also added a Town Portal scroll that allows you to teleport to a random town at any time.
Also new in this version is a Legacy System that persists across deaths in a LEGACY.DAT file. This system currently tracks ten cross-run milestones that unlock things like the Legacy Ring, Phantom Blade, Iron Chests, and rare NPC variants.
There's also a new boss monster system with a dedicated full-width ASCII battle pane, special abilities, and per-type defeat tracking. To support these encounters I added several related gameplay systems:
- Doors (wood and iron) with stuck/locked mechanics
- A kick command with a chance of hurting your foot
- An anvil-based smithing system where cascading STR/DEF/AGI skill checks can improve, diminish, or eventually destroy the item you're working on
I've also added five new level 7 monsters to fill the difficulty gap before the endgame tier: Death Knight, Vampire, Manticore, Storm Giant, and Nightmare.
One new system used heavily in the static levels is the trigger system. Tiles can trigger events such as dialog boxes, sound effects, music start/stop, battles, flag setting, NPC or monster party spawns, monster or NPC movement, and door creation, destruction, or state changes. This opens up a lot of possibilities for scripted encounters and environmental storytelling.
After experimenting with bosses as rare random spawns, and with door-kick triggered encounters, I felt the difficulty spike from randomly encountering bosses might not be very fun or fair. Instead I've started creating hidden sub-dungeons that players can discover and enter in order to hunt down and defeat the four boss monsters. These areas use static levels and will leverage the trigger system extensively to create more thematic encounters that tie into the developing storyline.
Version 1.7 also introduces a new scoring system that makes the high score chase more interesting. The system now takes into account player level, dungeon level, inventory and equipment value, gold, and kills. This gives a much more complete picture of how a run went compared to the old system, which only tracked dungeon level with tie-breakers for kills and player level.
I've also added three new NPC types:
- A book seller who only sells magical tomes
- An enchanter who never fails to enchant items but charges more depending on the item's existing enchantment level
- A shopkeeper used in towns who allows unlimited buying and selling
The shopkeeper NPC can also have a static inventory, allowing me to create themed merchants like potion sellers, weapon stores, or consumables shops.
I've also tweaked the high score ghosts to make them more challenging since they were total pushovers in the original build. They now have three abilities (the most of any monster):
- A chance to phase through your attacks
- A drain attack that restores some of their health
- A wail attack that can silence the player, preventing singing or magic for several turns
Next up is the quest system, which I'm still designing. The basic idea is that players will be able to pick up quests and complete them for rewards. More to come once that system is fleshed out further.
Finally I'll be evaluating a few technical improvements for the engine. First is adding color support for users with EGA/VGA graphics cards, followed by controller support for players who want to use gamepads or joysticks. I'm also looking into compressing the art data to reduce disk usage since it is currently the fastest-growing asset in the build. Lastly I plan to do a full top-to-bottom code review to identify routines that could be rewritten in assembly so the game remains playable on PC/XT class hardware.