Case study — Language learning as game design
Chad Rescues Nobody
A pixel-art platformer set in 1994 Belarus — where you learn Russian by guessing wrong, and the potato is always watching.
Chad is an American in cargo shorts who cannot find Belarus on a map. Anya — a Minsk programmer who did not ask to be rescued — texts him grocery lists in a mix of English and Russian, because that’s how bilingual people text. The Cyrillic words are never translated. You infer СМЕТАНА from context, grab the tub you think is sour cream, and find out at the door.
Every language app promises immersion; almost none delivers it, because immersion means being wrong in public with something at stake. This game makes being wrong the whole loop — and makes it funny instead of humiliating. Two rules govern every piece of content: is it funny? and did the player learn a word?
The real problem
Flashcard apps optimize the streak, not the word.
Drill apps teach you to win the drill: you recognize a translation pair, the streak survives day nine, and the word still isn’t yours. Real acquisition happens the way it does for a kid — encounter a word in context, guess, act on the guess, get corrected. That process needs stakes, repetition across contexts, and low stress. Games are unreasonably good at all three.
The brief I set myself: don’t gamify a curriculum. Build the immersion environment itself — a place where a word matters because you need it to eat, get across town, or get a babushka to let you pass.
The principle
Learning happens through inference, not instruction.
There are no flashcards, no translations, no “press X to learn.” Vocabulary arrives inside Anya’s texts, in Cyrillic, surrounded by just enough context to guess from. The level is the test; the door is the grade; the reveal is a roast. Every level runs the same four-beat loop.
texts
- Mixed English / Russian messages
- “Grab СМЕТАНА on the way”
- Clues hide in the exasperation
- Side-scrolling collection + decoys
- Babushkas scold, marshrutkas kill
- Spatial memory anchors the word
- Inventory checked at the door
- Wrong? «ГДЕ ПРОДУКТЫ?!»
- No life lost — just shame
- Meaning paired with the item
- Delivered as Anya roasting Chad
- Failed runs re-read differently
you own
The decisions that mattered
A case study is really a record of what you chose.
Four calls did the most work.
The alphabet is a mechanic, not a lesson.
Cyrillic gets taught by a WASD-driven trie that runs both ways. Encode — sound to letter — is how you sound out a mystery can or spell a destination. Decode— letter to sound — is how you read the street sign that just appeared in Cyrillic only. Same component, opposite directions, same skill built from both ends. It’s also why this is a desktop game targeting Steam: the trie is keyboard-native, and a touch port would gut the feel of the core mechanic.
You can't get across Minsk without reading Minsk.
To travel, you spell your destination on the trie, a street sign appears in Cyrillic, and you decode the street name before directions unlock. Babushka gatekeepers demand «КУДА?» — where to?— and won’t budge until you can answer in Russian and prove you can read the street. Navigation vocabulary isn’t a level theme; it’s the fare. This whole system shipped in the current build, along with a four-season city that changes what the same streets ask of you.
Stress kills acquisition, so the fail state is a punchline.
Bring the wrong groceries and a voice from the cosmos bellows «ГДЕ ПРОДУКТЫ?!» before Chad can finish “But I—”. No lives lost, no score docked — you’re back at the briefing, and Anya’s texts hit different on the second read because now you know which word betrayed you. The retry isthe spaced repetition; it just doesn’t look like homework.
Comedy is the pedagogy — with rules.
The joke is never “Belarus is weird” and never at Anya’s expense. Belarus is drawn with affection and specificity, down to the sacred potato hidden in every level; Anya is smarter than everyone in the room and regrets giving out her number. Chad — sincere, oblivious, confidently wrong about neural networks in 1994 — absorbs every punchline. Laughing while you learn isn’t a garnish; emotional encoding is one of the three cognitive levers the design leans on, alongside embodied association and consequential motivation.
The mechanic, up close
One trie, read forwards and backwards.
The whole reading system is one keyboard-native trie, driven by W / A / D with S to cycle. Toggle it below. Decode reads a street sign — you pick each Cyrillic letter’s sound until ПОБЕДЫ resolves to Victory Street. Encode spells a word back — you drill the branching trie (К → О → Н → В) until only КОНВЕРТ is left to shout. It’s the actual in-game panel, not a diagram of it — which is why every sign you read makes the next word you spell cheaper.
READ THE SIGN
one trie · both directionsDecoded prefixes stick. Read ПОБЕ- off one sign and the same trie already knows the branch — so spelling it back to travel there costs almost nothing.
The build, running
Thirteen levels, playable today.
This is the current desktop build — the original level set with the two-direction trie, the babushka-gated direction system, and the seasonal city already in. Screens only get you so far; the loop is best felt moving, so the whole thing is playable at the bottom of this page.

Level design
One city, every season and hour — because geometry is data.
Streets, doors, and shops live in content, not code, so a level’s layout can be reworn. The engine drives it two ways over the exact same Minsk geometry: a seasonal pass — the same birch, linden, and ornamental trees leafing, turning, and going bare, the ground greening then snowing over — and a time-of-daypass that carries the street from amber dawn to a starlit night. Both panels below are real frames of one avenue — click through them; a route you learned at summer noon reads differently on a winter night.


Same street, every season and hour. Geometry is data; the season and the light are costumes — so a route you learned at summer noon asks new questions on a winter night.
Where it stands
A working game, honestly mid-build.
The full inference loop, the two-direction Cyrillic trie, babushka-gated navigation, and the seasonal city are live across 13 playable levels in the desktop build. What doesn’t exist yet: retention metrics and the expanded curriculum — the next milestone is playtesting vocabulary recall against the rebuilt level structure.
▸ One real playtest observation goes here once it’s run — e.g. “testers with zero Cyrillic decoded street names by level N.” One concrete result beats three adjectives.
The next move
Rebuilding the levels around how learning actually deepens.
The 13 levels proved the loop; the next pass restructures them as the spine of a curriculum mapped to Bloom’s taxonomy — climbing from remember (grab the right can) toward create (spell your own destination, hold your own at the embassy). The plan’s signature idea: completing a phase unlocks a deeper tier of every earlier level, so the game grows backward and old streets ask new questions. And because the engine already separates content from code, the longer bet is a contributor platform — bilingual friends authoring new language packs as data, no fork required.
Play it
Thirteen levels. The potato is watching.
The live desktop build, right here. Press play, read Anya’s texts, and find out at the door whether you grabbed the right tub.







