Skip to content

Built Hometown

My hometown was gone, so I built one locally.

I wrote about the MMO I once tried to return to. This is the sequel. The world had vanished without a trace. So I built it myself.

An open-source server implementation had been released. Flat monthly fee. Endless grind. PKers could wipe out a night's progress in an instant. The original balance, intact. Written in Java. No Japanese.

The source was clean, reorganized at each major version. You could tell years of development sat behind it.

I picked up a legitimate client DVD at auction. The disc shouldn't have worked anymore. The premium was still absurd.

This was around when I switched from Roo to Claude Code. A subscription plan had just launched. I realized a massive translation job could now run without paying API fees. I started immediately. Localization patches.

The LLM was a handful. Throw text at it, broken XML came back. Tags wouldn't close. Periods turned full-width. Proper nouns drifted from chunk to chunk. The same NPC turned into a different character across files. Rewrite the prompt. A few things improved. Something else broke.

Looking back, I should have used MCP. The know-how wasn't there, so the guardrails had to be hand-built.

Tens of thousands of files. I put a glossary out in front of everything. Pulled in-game proper nouns from the Japanese client's library. Locked them to the canonical spellings.

Dumped every file into a database. Hit next on the CLI and one unprocessed chunk came back; hand it back through the CLI when done. Run the workers in parallel. Whatever came back, I'd swap its HTML comments for placeholders, run correction, then restore the placeholders. Split the instructions per stage to lock the input and output shape as a contract.

Four lumps of trial-and-error settled in support/ — mud piles I couldn't show anyone.

After weeks of wrestling with it, the work was done.

At last, I could walk the world I remembered. The world was quiet. The scenery sat exactly as it had been. None of the old bustle. None of the noise.

It's only now, looking back, that I see it: the way I work today and that mud pile have the same shape.

Don't trust the LLM's output — pin it down downstream. Fix the schema as a contract. Run the agent's response through a validator. Slice long context into chunks and process in stages. Use the database as a queue for parallel workers. Oracle verification that matches Excel down to the bit; the boundary design of an auth library; MCP integration for a task system — all of them, at root, trace back to fumbling to fix the hometown's words.

Java finally taught me something. No — that wasn't Java, was it.