September Update
It’s been very quiet here on the Hexcrawl devblog. Sorry for that everyone, but a lot has been going on.
New Job
The biggest reason I haven’t been updating is because I’m changing my day job. But fear not, my new employer has officially declared that Hexcrawl is not a conflict of interest, and I can continue working on it in my spare time. I don’t know yet what my schedule with the new work will be like, so updates may be a bit rocky while I figure it out, but the project will soldier on!
New Adventure
In my last update I declared that I was going to try and continue working on combat-oriented gameplay, and adding more content to the game to make the moment to moment more interesting. Well, what I can say, I got sidetracked from that pretty quickly.

I started by trying to add a second adventure. The first one was based on a D&D adventure I wrote, so I figured why not follow that pattern again? I went digging through the archive and landed on Mirror, Mirror, an adventure I published on DriveThruRPG a while back that has a lot of great hooks for social encounters.
In fact, maybe too many. This adventure has at least five interesting NPCs in it, many of whom hold conflicting interests and incomplete information about the events leading up to the adventure. This makes for great roleplay opportunites, but also confused the crap out of my LLM. My quest generator was really struggling to tie plotlines together and keep conflicting motives and world views of the varying NPCs separate.
Quest Linking
So I started looking at some options to link quests together. I started threading context through from one quest to another. IE, if Lord Nikola wants you to go investigate the suspicious wizard Erroman, but then when you encounter Erroman he immediately he immediately asks you to help find his missing magic mirror, it feels a bit disjoint. You want some recognition that Nikola sent you, and maybe a decision point on whether you should just return to him immediately with info about Erroman or if following his quest might help complete the original one in a more satisfying way.
To start with, a simple parent link and extra context injection was all it took to tie the two together. This of course lead to a cascade of context errors as the prompts grew too big and the tiny model got confused about who is who and what is going on. This is turning out to be a typical pattern though. The right answer is to break the prompt apart into smaller more specific prompts, and do a little branching logic in the code to pick the right one based on game state.
The end result is starting to feel promising. The quests are starting to link together, but I feel like I still have a way to go to get the LLM to tie it all together more cohesively.

I really accidentally challenged myself and the systems by trying to incoroporate this particular advneture. Maybe I could have done an easier one, but I feel like the game will be better overall for having taken this on.
New Models
A fascinating thing happened while I was working on this – the LLM I use for writing code and prompts started suggesting I use a “stronger model”. It’s very reminiscent of what I just went through with the whole Groq issue back in July. I was pretty concerned at first - why is this advice leaking into my conversations? Is Anthropic marketing trying to influence my architecture?
I went on another side quest updating my CLAUDE.md to make sure it fully understood the underlying design philosphy:
**HexCrawl targets a small, fast, non-reasoning model in the ~8B class. This is a deliberate design
constraint, not a temporary state to be grown out of.** Three things depend on it:
- **Latency.** Gameplay is interactive. A turn that waits on several sequential generations has a budget measured in low single-digit seconds, and time-to-first-token dominates it.
- **Cost.** The architecture keeps token counts small so a run costs fractions of a cent.
- **Client-side execution.** The long-term aim is to embed the model in the client and run it on consumer hardware. Every dependency on a large hosted model forecloses that.
There’s then a bunch more language about alternative approaches to fix these errors. But not to be totally blinded by my own biases, I did then take a quick spin testing out some comparable models. Ultimately most newer models are way to big to ever run on consumer grade hardware, and the alternatives do generally produce pretty similar results. I have been flipping back and forth now though between LLama 3.1 and Mistral Nemo.
Going Forward
I want to spend a little more time seeing if I can clean up some more context errors the new adventure exposes. I think the quest linking could be better. I’m also realizing there’s a whole section of content that would be really interesting to explore around NPCs meeting each other. When the Lord tells me to go find his missing daughter and then she joins my party, there really should be some pay-off when we return together.
Also I really do want to add more to the basic explore and combat loops to make the game overall more fun. My brain however insists those are solved problems and just down to execution, while making an LLM handle two NPCs meeting is a huge unknown, and solving the unknowns gets slightly higher priority for now.