⚠ HexCrawl is currently in Pre-Alpha. Expect rough edges and frequent changes. Follow the Dev Blog for updates.

Quests Are In

It’s done. Quests are in.

I wrote about the design pivot mid-build — the Glimmerwings problem, the multi-pass generation architecture, the principle that narrative specificity has to flow downstream from mechanical choices. That post was written in the middle of the chaos. This one is written from the other side of it, and I want to take a moment to just… appreciate that it shipped.

What’s Actually In

The quest system is a full six-phase feature: offer, accept, travel, encounter, return, reward. Here’s what that looks like in practice across all four quest types:

Attack quests — An NPC dispatches you to clear a threat. A marker appears on the map. You travel to the hex, fight the encounter (generated dynamically when you arrive), survive, and return to the NPC for your reward and a closing scene.

Investigate quests — You’re sent to explore a location. Same travel-and-encounter loop, but the encounter is about discovery rather than combat. The AI generates a scene around what you find when you arrive.

Deliver quests — You receive an item from the NPC and carry it to someone else on the map. This one introduced the concept of quest items — a category of item that lives in your inventory with a specific purpose and isn’t interchangeable with the usual loot.

Fetch quests — You’re asked to bring something back to the NPC. The item can come from three different sub-types of acquisition: finding it at a map location, winning it in combat, or getting it from another NPC. Each of those plays out differently.

There’s also a quest journal — a full log panel with status, objectives, and a Navigate button that centers the map on wherever you need to go next.

The AI Lift

I knew going in that quests would be AI-heavy. What I didn’t fully appreciate was how much heavier they’d be than everything else combined.

System Prompts
Quests 18
Encounters 8
NPCs 3
Characters 2
Map 1
Items 1

Quests have more AI prompts than every other system put together. There’s a prompt for generating the initial quest, one per quest type for resolving mechanics, prompts for each flavored encounter type (discovery, ambush, skill check), prompts for the handover and pickup nodes, completion dialogue, reward narration. The list goes on.

The reason there are so many is precisely because each one is small. The architecture I landed on — one prompt per question, narrative specificity flowing downstream from mechanics — means you end up with a lot of focused little calls rather than a few big fuzzy ones. That’s intentional. Each prompt is easier to tune, easier to test, and much less likely to hallucinate something that breaks the whole system.

What Made This Hard

The quest system exposed problems that no other feature had surfaced yet. Ordering matters a lot when you’re chaining multiple AI calls — who talks first, what context they have access to, what constraints they’re operating under. The early design had narrative running ahead of mechanics and kept producing things like the Glimmerwings: vivid, specific, completely made up. The fix was to resolve all the mechanics first, then let the narrative describe them.

Worse still, since I was figuring out parts of the design as we went, some of the code that the AI generated was… not great. I spent a good amount of time yesterday and the day before digging through the code by hand and cleaning up the slop that got generated along the way. AI sure does love to build everything bespoke - it does not really understand good reusable building blocks unless you lead it there by the nose. I’m definitely starting to develop more of a sense for when it’s time to ignore the AI and just get in there and write the code by hand myself.

Where Things Stand

The quest loop is complete. You can accept a quest, travel to the target, complete the encounter, and bring the result back to the NPC for a reward and a proper closing scene. All four quest types work end-to-end. The journal tracks everything.

This is the biggest feature in the game so far, and it’s the first one that really exercises the full stack — the AI pipeline, the encounter system, the inventory, the map, the UI — all at once. It works. I’m happy.

I’m sure there are plenty of bugs still to work out. Also, I need to take a pass at context building to tie things together better. Right now each quest lives in its own microcosm and they rarely string together in any meaningful way. I also need to consider things like what to do when quest outcomes really change the world. For example, if an NPC sends you on a quest to fulfill one of their motivations and it succeeds, what then? Should we remove the NPC? Give them new motivations? Something else?

There’s still plenty on the roadmap after this. But for now I’m just going to breathe a sigh of relief that this one is done.

More soon.

— Paul