Amanda Fitch

My First Impressions of Running Local LLMs for Game Dialogue

Experimenting with small language models locally to generate NPC dialogue for an Aveyond-style RPG. What surprised me, what broke, what stuck.

Hero character talking to an NPC with a glowing dialogue box

A few weeks ago I gave myself a small challenge: could I use a locally running language model to write the first draft of NPC dialogue for a fantasy RPG? Not to replace writing — but to help prototype faster. I've been making games for twenty years. Dialogue has always been the part that takes the longest and, quietly, the part I enjoy most. So this felt like a test worth running.

The Setup

I started with Ollama running Mistral 7B on my machine. No cloud API, no subscription — just a model living locally on my hard drive, talking to me through a terminal. Setup took about twenty minutes, which honestly surprised me. I expected wrestling.

My test case was a village elder NPC in an Aveyond-style world. She needed to: (1) give the player a quest hook, (2) have a voice that felt old and a little cryptic without being annoying, and (3) respond sensibly to a few follow-up questions. Classic RPG fare.

What Surprised Me (Good)

The model was fast. Faster than I expected from something running entirely offline. Within seconds I had dialogue drafts I could actually read. Some of them were generic, but a few had a sentence or two that genuinely felt right — the kind of line I might write on a good day and reuse forever.

The bigger surprise was tone control. When I put character notes in the system prompt ("She is 80 years old. She was a sailor before the mountains rose. She speaks in short sentences and occasionally loses the thread of what she was saying."), the model held those constraints reasonably well. Not perfectly — but well enough to produce material worth editing.

"The sea was where I learned patience. And also sharks. Mostly sharks."

— An actual line the model wrote that I will absolutely use.

Retro computer terminal showing LLM dialogue generation

What Broke

Consistency. Over a longer conversation, the model would forget constraints mid-stream. The elder would suddenly sound young. A character who "never uses contractions" would use one in the very next line. This is a known limitation of context windows, and 7B models have shorter effective memory than larger ones.

The other failure mode was fantasy soup — that particular flavour of LLM writing where everything sounds vaguely like a D&D sourcebook. "Ancient evils stir in the deep places of the world." Yes. Thank you. I had to work actively against this with increasingly specific prompts.

What Stuck

The workflow I've settled on: use the model to generate ten variations of a line, then edit the best one. Don't ask it to write whole scenes — ask it to give you options for a single beat. That's where it shines. Ten variations of "the elder dismisses the player but drops a hint" takes thirty seconds and gives me raw material I can actually sculpt.

I also found it useful for reaction lines — the small ambient dialogue that fills a village. "Nice weather." "Watch yourself in the forest." "My sister married a wizard. I wouldn't recommend it." These are low stakes enough that the model's inconsistency doesn't matter, and there are so many of them in an RPG that having a fast first-draft machine is genuinely helpful.

Where I'm Landing

Local LLMs won't write my games for me, and I don't want them to. But as a dialogue sketchpad — a way to rapidly rough-draft NPC voices before committing to anything — they've earned a spot in my process. The privacy of running locally matters to me too. No data leaving my machine, no API costs, no rate limits at 2am when I'm in the middle of a writing session.

I'm going to keep running experiments. Next up: whether I can train a small LoRA on Aveyond's existing dialogue to pull the model's output closer to the series' voice. That feels ambitious. I'll report back.