Inform 7 Edition
Play Current Version (with sound) Play in IF HubI’ve played video games for a long time. Video? I’ve played games with NO graphics. As a kid I stared into a CRT monitor hooked to an Atari 800 computer and marveled at the description: “You are standing in an open field west of a white house, with a boarded front door.” I’d type in short phrases — pure text. Type “open mailbox” and the game would do it — all in text. I saw so many advancements from that point. Sounds, graphics, 2D and 3D. From a few pixels on the screen to ultra-real worlds. And yet, I often still thought of that white house.
The game in question is Zork — a game of adventure, danger, and low cunning — and it’s now open source. These games, in a genre sometimes called “Text-Adventures” and sometimes “Interactive Fiction” (or IF), just gave you a text prompt (hey there’s a switch) and you responded.
Among so many computer advances, along came AI. Love it or hate it, I had to try it, and set out to see if I could code beyond my current scope without making a mess (well a mess, sure, but that compiles). I figured, “it’s just text,” and set Claude Code to translate from the ZIL source to Inform 7 syntax (an engine descended from Infocom architecture). The result was much more readable. And BOOM! It did it in one go and it compiled! Huzzah! But… it’s missing something. Why did I notice something was missing? I’m a tester at heart and always have a keen eye for little changes.
I got into a dialogue with Claude, something like, “hey, why is this detail in ZIL but not in the translation?” And so began a long introduction into the ZIL code format. There are shortcuts being taken here for sure, but using AI will force you to realize you’ve got to be in the driver’s seat, at least for now. We began to look at all text, piece by piece, every bit, discovering together the odd format of the old engine, bound by such tight limitations, and the loose translation we began to refine.
Using ZILF, we compiled the ZIL to the .z5 format and ran it online. We had a working version of the original, warts and all. Claude began to suggest trying to test outcomes deterministically. I reminded Claude about the random aspects of Zork. Claude mentioned we could compile with a specific seed to mitigate randomness and produce expected results (as it compared transcripts). Transcripts. I mean — it is text after all. Every playthrough, we stored the transcripts. We’d compare transcripts of the original and the translation side by side. That developed into a testing system that I’m now expanding to test the games.
This wasn’t a one-shot vibe code. It was a deep dive into AI and IF.
Below are snapshots of each milestone. v0 is the purest version of the original Zork I commercial release. v1 attempts to translate it into Inform 7 — if it’s in the ZIL code, it’s in v1 (any bugs naturally fixed by the move to a modern engine will remain fixed, we won’t force bugs to remain). v2 is where real improvement begins — only here do I allow myself to actually fix anything that was ever a bug in the original ZIL. v3 builds on all of that — now with ambient audio, sound effects, and atmospheric CSS visuals — but it’s really v0 to v1 being given huge attention.
Intentionally diverging from the original, leaning into what Inform 7 does best. Sound and atmospheric CSS visuals transform the player into an immersive experience.
The first version that changes the game rather than just translating it. This is also where the testing methodology was built — deterministic seed-based walkthroughs, side-by-side ZIL vs. Inform 7 transcript diffing, and automated regression testing.
A complete, playable, and winnable ZIL-to-Inform 7 translation — 110 rooms, 138 objects, every puzzle faithfully reproduced. The goal was a 1:1 gameplay match with the original.
The unmodified Infocom ZIL source code, exactly as released by Activision under the MIT License.