Do you want to play a game?
Robert ported 1983's Zork to BoxLang to demonstrate natural language parsing without AI models. Transcribed original ZIL (Zork Implementation Language) source from GitHub into BoxLang structs—rooms, objects, exits, synonyms, flags—using Claude for verbatim translation only. Parser handles tokenization and verb resolution like Infocom's original, proving vintage solutions remain viable.
The first computer I owned was a Tandy 1000SX, purchased for a 800 dollars of my own life savings — a princely sum for a 12-year-old. CGA was king at the time, but this beast had Tandy's glorious 16-color graphics, when a game bothered to support it.
What you could always count on, though, were the Infocom text adventures. The Hitchhiker's Guide to the Galaxy is my all-time favorite, but it started, as it does for most people, with the original Zork.
I've always liked writing web games, and lately I've been investigating how to pull off something like this — natural language interaction — in a browser. With AI integrations being the hammer everyone's swinging, the obvious move would be to route user interaction through an aiMessage() call. Obvious, and expensive. Meanwhile Zork — written in 1983, on hardware that makes a Tandy 1000SX look futuristic — handled natural language input just fine without a model in sight.
So when I found out the original Zork source had been open-sourced, the project picked itself: port Zork to BoxLang. I had a day off and some tokens to burn. That was the day.
That left the harder problem: reproducing Zork itself — the actual rooms, the actual objects, the actual "You are likely to be eaten by a grue" — which turned out to be the more interesting one. Fortunately I didn't have to guess at any of it. The original source for Zork I was released years ago under an MIT license and lives at github.com/historicalsource/zork1, written in ZIL — Zork Implementation Language, Infocom's in-house Lisp dialect for building interactive fiction on the Z-machine.
Reading it in 2026 is a strange experience: it's S-expressions describing rooms and objects as property lists — descriptions, flags, synonyms, starting locations — compiled down to bytecode for a virtual machine designed in the late '70s. Take the brass lantern, the lamp you can't get far without: in the source it's declared as an object living in the Living Room, with synonyms LAMP, LANTERN, and LIGHT, the adjective BRASS, a description of "brass lantern," flags marking it as takeable and a light source, an attached action function, and a defined size. Every detail the parser needs to recognize, describe, and reason about that lantern is right there in a few lines of Lisp-like syntax.
The plan was to pull the source, isolate the room and object definitions, and translate that property-list structure into the struct format my BoxLang parser skeleton already expects — rooms, objects, exits. I handed the actual transcription work to Claude Code, pointed at the ZIL source with strict instructions: verbatim translation only, no invented logic, nothing added that wasn't already there.
And the transcription itself was clean. Every object in the catalog — synonyms, adjectives, descriptions, flags, starting room — translated into BoxLang structs with no surprises and no shortcuts, no "close enough" substitutions for anything ZIL didn't spell out explicitly. What's in the BoxLang version is what was in the 1983 source, just wearing different syntax.
There's something fitting about that. A parser built to avoid burning AI tokens on every "go north," ported from a 40-year-old object catalog, transcribed without a single deviation from the original. The whole project is an argument that some problems were already solved well before anyone needed a model to solve them.
So that's where it stands right now. There's a BoxLang parser that tokenizes, resolves scope, and handles verbs the way Infocom's did, sitting on top of a faithfully transcribed object catalog from the actual 1983 source — and the rooms, the puzzles, and the fights have made the trip across too. The maze, the thief, the troll standing in your way with an axe: all of it ported, all of it working the way it did in 1983.
What exists works, without a single API call to anything. Forty years ago someone solved natural language adventure gaming on hardware weaker than a calculator. You don't always need the new hammer. Sometimes you need to read the old one's source code.
That 12-year-old thought this was the coolest thing ever. I still do today.
Play now by cloning bx-zork repo on GitHub