Updates

What is being built, newest first.

  1. The library is getting dangerous

    The Sunken Library now has things living between the shelves. Cursed Librarians throw books down the aisles, packs of Scriveners wake each other up, and a quiet study hall can turn into a fight with the lecturer and both bodyguards. Even the furniture is trouble. Some bookcases hide loot. Others fall on you.

    We built the rooms around those encounters, with reading bays tucked into long shelf-lined halls and secret collections hidden behind the walls. The Library is still in development and won't appear in ordinary dungeon runs yet. We're working on the Grand Archivist's summoning ritual and a boss fight with portals that appear, build up, and vanish around the room.

    Cursed Librarian
    Soul Binder

    Equipment got a little harder to trust. We added enchantments and curses, including gear that reflects damage or senses enemies beyond your sight. Putting an unknown item on reveals its properties, but a curse can leave it stuck there. Identify Item lets you check first. Remove Curse gets you unstuck. Erin's Ring has its own trick: it reveals the floor when you equip it and again when you descend.

    Identify Item wand
    Identify Item wand
    Remove Curse
    Remove Curse
    Erin's Ring
    Erin's Ring

    Elsewhere, rare named monsters such as Cindermaw bring tougher fights and better loot. Mimics can crawl back to their original spot and pretend to be chests again, keeping the wounds from your last encounter. We also finished the NPC animation work, bringing the roster to 237 strips for everything from idle gestures to spellcasting.

    A lot changed behind the dungeon, too. We separated floor generation from the live simulation and built the machinery to move a running dungeon between servers when one fills up or shuts down. Your view stays on screen while the connection recovers. Dungeon invitations now use reusable links, and account signup has branded email verification. That work is part of preparing DDQ for release.

    The next art project is the Glyptotheque, a collection of marble halls and statues with matching damaged forms and scattered fragments. Its boss concept, The Shape Between, holds a red eye between floating pieces of obsidian. We're still working through its animation.

  2. Return stones, more faces, and 66 NPC concepts

    Dark blue Return Stone with a dormant carved sigil
    Unbound stone
    Return Stone glowing blue and violet after binding
    Bound stone
    Warrior
    Rogue
    Cleric

    Every new character now starts with an Unbound Return Stone. Use it once to bind it beneath your boots. Use the bound stone later in the same dungeon and it takes you back to the nearest open tile at that spot. It disappears only after the trip succeeds.

    Character creation has more faces now, too. Every Warrior, Rogue, Cleric, and Wizard can pair a masculine, feminine, or androgynous body presentation with light, medium, or dark skin. All 36 combinations have a complete animation family, so the choice follows your character through every step, spell, rest, and unlucky death.

    We have also finished the source library for 66 future NPC designs. It covers humans with different skin tones, elves, demons, and ghosts, with young, adult, and older faces, varied body presentations, and clothes that run from patched rags to formal dress. These NPCs are not in the dungeon yet. Their full 48×48 sprite sheets and the quest engine that will bring them into the game are still being built.

    The portraits below are approved source concepts rather than final runtime sprites, so their tiny versions may change.

    Early NPC concepts · final 48×48 sprites may change

    Early concept of a well-dressed Black human adult with an androgynous presentation
    Human · adult · androgynous
    Early concept of an older white human woman in heavily patched clothes
    Human · older · feminine
    Early concept of a well-dressed young masculine elf
    Elf · young · masculine
    Early concept of a red-skinned adult demon woman in formal black clothing
    Demon · adult · feminine

    A quick note from the developer:

    Modern politics is a minefield, and it’s little surprise that even something as innocent as making a video game would eventually run into political views. While working on “brown-skinned” characters this morning, I found myself in a discussion about race and inclusion that I never thought would happen, and ultimately the conversation had a price.

    Inclusivity is a feature of this game.

    While I’m sure there are populations that are absent from this game, it’s not by intention; it’s because that exercise, by nature, is work that has no end. Every individual is important and deserves to feel seen.

    The world, as it stands today, is roughly 15% “white” and 15% “black,” with the rest falling somewhere in between.

    If any group pulled from a population doesn’t resemble the original population, it is, by statistical definition, biased. Not as diverse. Equity means noticing and thinking about those biases.

    Everyone should have their own framework for considering whether they’re being biased, evaluating the origin of that bias, and working proactively to fight unfair biases. Laziness is not an answer.

    As I’ve worked on this game, it’s taken effort to be inclusive. Creating approximately 2,400 frames of animation is not something that happens by accident. It would have been easy to just say, “Yes, all the classes in this game are white men, because doing more is work.”

    Being aware means asking myself, “Why aren’t all the characters women? Why aren’t they all black?” If I can’t come up with an answer that aligns with my values, then I owe it to myself to fight that bias.

    All of this is to say that it’s important to me that people feel seen, represented, and included. For this reason, all the player characters in this game can choose their skin tone and closest-representative gender.

  3. The dungeon is getting a quest machine

    Quests are not playable yet. We have finished the language contract, its four-pass validator, and the first code that attaches a validated quest to one dungeon floor. The machinery below includes the next pieces we are building.

    A hermit asks for 10 gold. The answer is saved under one player's UUID. A guardian appears near a buried altar, and a sealed creature wakes 100 ticks later. The floor may unload first. Private, server-side JSON keeps that chain together and reveals only the actors, objects, and words the player should receive.

    Quests compile before they exist

    Four passes check a quest's JSON, exact schema, references, and complete graph before it can attach to a floor. Functions and conditions cannot form cycles. A dialog action, or a returning synchronous dispatch that can reach one, must end its function. A timeout schedules later work in a timer slot reserved by the quest and continues with the next action. Every quest needs a discoverable route to completion. A failure leaves the floor unchanged.

    Authors describe spatial relationships instead of coordinates. Attachment resolves each position from the floor seed, quest name, and position name, then saves it. A temporary occupant cannot reroll the altar. Spawning starts at its anchor and uses the game's nearest-open-tile search.

    A browser editor sits outside the current plan. Quest files already contain the pieces an editor needs. They name actors, state, conditions, actions, dialogue, and links between functions, giving a browser UI enough structure to offer forms and draw the function graph on a canvas. Before export, the same four validation passes could catch broken references or a missing route to completion. The engine reads it unchanged.

    A custom dungeon could carry a puzzle from one friend to the rest. One player hides the clue and writes the suspicious bargain. Their friends compare notes, test theories, split up the search, and try to anticipate the author's sense of mischief while the dungeon answers every attempt. Which shortcut is the trap? Solving the quest would mean working through a problem made specifically for your group by somebody you know.

    Pixel-art quest blueprint passing through four stone gates into fixed points on a dungeon floor

    Quest events stage before they commit

    One interaction might take gold, change state, call another function, give an item, and open dialogue. The execution layer will stage that chain inside a private draft. Later actions can see earlier staged writes, but the live floor stays untouched.

    The floor will recheck every identity, inventory, position, and lifecycle version the draft used, then apply a valid commit synchronously. Dialogue and story text leave the server afterward. An unexpected error discards the draft.

    Expected trouble stays in the quest language. If taking gold comes up short, its failure function runs inside the same draft and stops the caller. A warning-only action can continue.

    Pixel-art event sequence staged between two dungeon rooms, with a failed branch and one successful commit

    The floor remembers

    Each loaded floor now owns one quest engine. Its record pairs an immutable definition snapshot with mutable lifecycle, positions, entity UUIDs, and the state needed by later dialogue and timer work.

    Dormant actors wait without a position. Spawning moves the same UUID into the active collection, where ordinary dungeon code handles movement, combat, AI, inventories, and death. Loading will recompile the snapshot, check UUID relationships, and rebuild disposable indexes. Corruption will fail loudly.

    References will stay compact. A bare path uses the current owner, a quest path reaches the current quest, and a DDQ path can reach another quest or actor by UUID. UUID-keyed choices will give every dialogue recipient a separate answer.

    Dialogue sessions will survive persistence. Closing the window, dying, or disconnecting will run the authored abort path once. Timers will save their function and remaining ticks. One scheduled during tick T starts on T+1, and its creature can join the normal mob phase later that tick.

    Version one keeps quests on one floor. A dormant demon can survive eviction and restart, wait for its 100th live tick, then enter the ordinary mob runtime.

    Pixel-art dungeon cutaway showing saved quest records, a timer, fixed positions, and one actor in dormant and active states
  4. Three animations from the Sunken Library

    Arcane Apparatus
    Mutant Bookworm
    Ghostly Scholar

    We finished three idle animations for the Sunken Library. Here they are: the Arcane Apparatus, Mutant Bookworm, and Ghostly Scholar.

    The biome isn't playable yet. It depends on the quest engine we're building, and that work is still underway.

  5. Monsters are fairer now that the computer makes mistakes

    A few weeks ago, we wrote about our headless combat simulator. We built it to run hundreds of thousands of fights in seconds, pitting virtual adventurers against dungeon monsters to see who survived. But we ran into an awkward problem: our test player was infallible.

    The virtual player never clicked the wrong tile. It never panicked when surrounded by angry goblins. It counted distances with mathematical precision, saved its mana for the exact right moment, and never wasted a single turn. Because that simulated hero fought like a flawless robot, the monsters had to hit like falling anvils just to stand a chance.

    When real people played the game, they got crushed. Real players make mistakes. We turn the wrong corner in the dark. We take a greedy swing when we should retreat toward the stairs. We misjudge how far an imp can spit fire.

    So we taught the simulation how to make mistakes. Now our virtual test hero fumbles steps, misses attacks, and makes poor tactical choices under pressure. Once the computer stopped fighting like an all-knowing machine, we went back and re-tuned every creature in the Collapsed Mine.

    Rats, bats, kobolds, goblins, mimics, and the giant all have fair stat profiles now. The dungeon is still dangerous, but fights feel right. You have room to recover from a blunder instead of getting wiped out by a single misstep.

  6. Catch your breath, but keep one eye open

    Warrior
    Rogue
    Cleric
    Wizard

    Every adventurer knows the feeling of creeping down a cold hallway with low health and zero mana. You need to patch your wounds and gather your wits, but you cannot carry a whole apothecary in your backpack.

    Every class now has the Meditate action. Click the praying hands button and your hero sits down on the stone flagstones to rest.

    While you meditate, your health and mana refill four times faster than normal. Watching those red and blue bars tick upward is a welcome sight after a messy brawl with a pack of goblins.

    There is a serious catch. Sitting cross-legged in a dungeon leaves you completely exposed. If a monster creeps up and attacks you while you are resting, you cannot dodge. The blow lands as an automatic critical hit.

    Taking damage or moving breaks your meditation immediately, but that first hit stings. The trick is picking your spot. Duck into a dead-end room, pull the heavy wooden door shut behind you, and catch your breath. Just make sure nothing followed you inside.

  7. New spell animations in motion

    Fireball
    Arcane Bolt
    Terrorize
    Daze
    Mend
    Aegis

    Take a look at the latest batch of spell animations fresh out of the forge. Magic in the dungeon now has distinct visual punch whether you are hurling destruction down a stone hallway or mending yourself in the dark.

    Fireball hurtles across the floor with a trailing plume of flame before erupting into a wide conflagration. Arcane Bolt crackles with jagged electrical arcs that splatter crawling lightning on impact. Terrorize sends a shadowy violet flame speeding into enemies, and Daze pops in an expanding burst.

    Self-cast spells get their own animations as well: Mend surrounds you with luminous blue rings that rise and fall, while Aegis of Spirit raises a glowing golden ward.

    Directional projectiles face right at rest, and the dungeon renderer automatically flips them whenever you cast toward the left so sparks never fly backward.

  8. We make the computer fight itself

    How dangerous should a goblin really be? If it is too flimsy, it feels like kicking over a cardboard box. If it hits like a falling meteor, players slam their laptops shut in frustration. The sweet spot lives right in the middle, and instead of throwing darts at a spreadsheet, we built an engine to tell us.

    Hidden in our test suite sits a headless build of DDQ. It has no sprites, no user interface, and zero mercy. It just simulates hundreds of thousands of brutal skirmishes in a matter of seconds. It uses the exact same character stats, dice formulas, and spell interactions as the live game, tracking who survived, how many combat rounds it took, and who got pulverized.

    The critical discipline is writing down our target win rates before running the simulation. If you look at the raw data first, human nature will convince you that whatever chaotic numbers came out were brilliant and intentional. Setting firm benchmarks beforehand keeps our combat tuning genuinely fair.

    We also programmed two calibration dummies to test against: one specialized in martial combat and the other focused on casting spells. They have no fear and no mercy because they exist purely as measuring sticks to evaluate whether a monster packs the right punch.

    The funniest thing we keep rediscovering is that when an encounter feels impossible, raw monster stats are almost never the culprit. It is almost always spatial positioning: getting trapped in a doorway, facing three enemies at once, or charging into a fight before realizing your mana pool was completely dry.

    You will never see any of this behind the scenes while exploring the dungeon, which is exactly how good game design should work.