Style | StandardCards

Planet Interactive Fiction

Tuesday, 29. July 2025

Zarf Updates

73 stories in the engine yard

We talk about story characters who are "genre-aware" or "genre-savvy". Although it's more like trope-savvy, right? The horror movie protagonist who gets off the property rather than smooching someone in a dark cellar. The manor-house murderer ...

We talk about story characters who are "genre-aware" or "genre-savvy". Although it's more like trope-savvy, right? The horror movie protagonist who gets off the property rather than smooching someone in a dark cellar. The manor-house murderer who knows not to talk to elderly Miss Lacetatter.

I think about this while watching Doctor Who. Of course! I've noted (and I'm not remotely the first to say it) that the TARDIS is less a time-travel machine than a genre-travel machine. The Doctor can crash into a war story one week, a cozy mystery the next, flee to a haunted house on Mars, and then get chased around by dinosaurs on a spaceship. This might not have been the show's original concept but it arrived there in short order. And the modern-era show-runners (Davies and Moffat and that other one) have very consciously taken genre as their playground.

Characters on Doctor Who aren't notably genre-savvy. They're not notably genre-blind either -- except in the sense that the companions are new to the Universe whereas the Doctor has seen everything twice. The show isn't meta in that sense. But, just occasionally...

I was brought up short by two particular episodes -- perhaps my two favorite episodes of the (very strong) Ncuti Gatwa era. These were the episodes where my first reaction was "That was amazing!" and my second was "Wait, that was ridiculous." And my third reaction -- because I refuse to reject either of the first two -- was to pace furiously around my apartment, trying to figure out why that hour of ridiculous television was amazing. The story made no sense, and yet the story worked. What worked? Why can't I pin it down?

I think I've pinned something down.

Spoiler warning: all the spoilers. I will give extremely brief recaps, but I'm assuming you've watched both Gatwa seasons. If you haven't, well, you can manage your own spoiler policy, but this discussion might not mean much to you.

73 Yards

The recap, as brief as I can:

The Doctor and Ruby arrive in Wales. The Doctor steps on a circle of string and charms, breaking the thread. The Doctor is now somehow gone; the TARDIS is locked; a white-haired woman is watching Ruby from a distance. Ruby cannot approach the Watcher nor leave her behind. Anyone else who speaks to the Watcher flees Ruby in apparent terror. Alienated from her family, Ruby tries to live her life; the Watcher remains eternally present, always 73 yards away.

In 2046 (aged 40-ish), Ruby sees a man named Roger ap Gwilliam running for office. She knows (spoiler) that ap Gwilliam as Prime Minister is going to cause a nuclear crisis. She maneuvers her way into ap Gwilliam's campaign and arranges to stand 73 yards from him. ap Gwilliam speaks to the Watcher and runs away, abandoning his political career.

Ruby lives the rest of her life as a recluse. As she approaches death, the Watcher appears close enough to be seen clearly. Ruby dies and experiences her life from the Watcher's point of view. She conveys the message "don't step" to her younger self, who prevents the Doctor from breaking the charm circle in the first place.

Whew! That was surprisingly difficult to summarize. It's a dense script. It doesn't feel rushed but it shifts gears a bunch.

It also never, ever bothers to explain anything. Nor does the plot link intricately back on itself -- we are denied the usual time-loop pleasures of "oh, that's why that happened!" This leaves 73 Yards wide open to cranky why-the-hell criticism, e.g.:

  • What does the charm/fairy circle actually do?
  • Why does the Doctor disappear?
  • Why 73 yards?
  • Why does everybody become terrified of Ruby?
  • What allows Ruby to travel in time?

Not only are these questions unanswered, they're unanswerable. You can't construct a message the Watcher could impart that could cause "the fear effect". (A later episode suggests that the TARDIS has a perception filter with a range of 73 yards, which signally fails to retcon this story in any meaningful way.)

If these questions bother you, the episode doesn't work. Fine! But it worked for me. So I am honor-bound to figure out why -- thus this post. And if you didn't bail out in the middle of the episode recap, you are now honor-bound to finish reading it.

So, if 73 Yards isn't a tick-tock clockwork time-loop story, what is it? The story initially presents itself as supernatural. The Doctor explicitly calls the string circle a "fairy circle"; the pub denizens give Ruby a rural-horror ghost story about "Mad Jack". Of course they're joking. Right?

The fairy-or-ghost-story reading has one great advantage: such stories are driven by something. (Beyond their own cleverness! Not that there's anything wrong with that!) Ghost stories are revenge or justice -- the ghost's, of course, but it should be personal for the narrator as well. (In a murder ballad, it's generally revenge against the narrator.) Fairy stories are harder to pin down, but wandering into Faerie is a fault; it's inattention or greed or disobedience. Getting out is the reward for faith or generosity or out-clevering the Devil.

The emotional core of 73 Yards is Ruby's fear of abandonment. We'd really like that to be the mainspring of the plot as well. The Doctor breaks a fairy circle and is stolen away. The Watcher figure is alien, outside of human society. Everyone who speaks to it...

...This doesn't quite work. Is Ruby punished for the Doctor's trespass? Or is breaking the circle implicitly Ruby's fault? Is everyone else punished as well, Ruby's mother and Kate Stewart and all? The vanished spouse implied by old-Ruby's wedding ring?

Really it's better if Ruby is the one stolen away to fairyland. She lives in an imitation world, a glamour of normality 146 yards across. Everyone outside that circle becomes a changeling. Not always in a moment of Watcher-drive terror, but inevitably all the same. "Everyone has abandoned me my whole life."

It's worth considering Groundhog Day, which is not a fairy tale by symbolism but which follows the same logic. Phil Connors is trapped outside the world by his self-centeredness; he escapes by recreating himself. Okay, maybe it's the converse logic -- Phil stops running away from everyone else -- but you see the comparison.

But this isn't quite right either. Groundhog Day ends when Phil's story is resolved. Tam Lin is freed by Janet's devotion, cue the wedding bells (or diapers anyhow). Rose accepts her father's death and everybody (else) lives. (Davies knows how this goes.) Ruby does her thing, and...

We should talk about Ruby's thing. It is, after all, the answer to my original question. Why do I love this story? Because Ruby kicks ass. She grabs the Watcher by the inscrutables and drags her off to save the world.

(Everybody loves a companion who can Doctor it up in the Doctor's absence. "Come on," says Ruby, quoting Seven, "we've got work to do.")

But if that were the answer, saving the world would end the story. "Is that it?" Ruby asks. It's not. The Doctor doesn't step out from behind the camera. The Watcher is still there and so is the next forty barren years of Ruby's life. Of course! She hasn't erased her fear. She hasn't connected with anyone. (Not even Marti Bridges, the only actual character to enter the script since UNIT bailed.) She hasn't had a heart-warming moment of character growth. She's just... saved the world. Instead. Isn't that better?

In other words, this isn't a fairy tale any more. (Fairy tales, up to Groundhog Day, are about saving yourself -- never the world.) It's a sci-fi puzzle-box. The kind of story where the protagonist figures out the trick, applies the rules in a clever way. That means living with the rules, afterwards. A tick-tock time loop story after all -- but only in retrospect, at the end.

My diagnosis: 73 Yards is a story about choosing your genre. Ruby gets dropped into an eerie-faerie ghost story about her life-trauma, and she's just not having it. She walks out of that story into one that gives her more agency and a better goal. Of course the end of the script doesn't resolve the beginning! It's a different story. Maybe there's a waking-up-with-Rita, everybody's-back happy ending in the original script -- but Ruby walked away from that to prevent a world crisis.

That's a genre-aware character.

Well, I said, after half an hour of furious pacing. The episode does work. It's a one-off, though. You can't do that sort of trick twice.

Smash cut to:

The Story and the Engine

But first, let me say how wonderful it is to see a Doctor Who episode that visibly, joyfully emanates from an African tradition. Our show is not visiting Lagos; it is of Lagos. The storytelling rhythms of a Nigerian barbershop will prevail, out of a Nigerian-born writer by way of TARDIS translation magic. You can hear Gatwa changing up the way he speaks.

The show is amazing just for that. It requires no further explanation. But I have my own rhythm going now...

The Doctor goes off to find his old friend Omo, a barber in Lagos, Nigeria. He finds that Omo and several friends are trapped in the barbershop. The new owner, a nameless man, requires them to tell stories while he cuts their hair. A woman named Abi brings them food every day; only Abi and the Barber can leave.

The Doctor tries to unseal the door but it opens on outer space. From this side, the shop is part of a giant mechanical spider-vehicle that traverses a web towards an unknown destination.

The Barber claims to be various gods (Anansi, Sága, Dionysus) but the Doctor denies it. The Barber then claims to be a scribe who told stories of these gods and thus gave them their power. The spider, powered by the barbershop stories, is carrying him to the center of the web where he will overthrow the gods.

Abi (actually Abena, Anansi's daughter) tells a story while braiding a map into the Doctor's hair. The Doctor and Belinda follow the map to the story-engine. The Doctor overloads the engine with his own manifold life-story. He tells the Barber that if he doesn't unlock the door, they will all die. The Barber does, and everyone escapes to Lagos as the spider-vehicle explodes.

Yikes, that was even harder to compress than 73 Yards. I had to leave more out, and what's left barely makes sense.

  • Why does the TARDIS sound an alarm when the Doctor is kidnapped? (That's like twice a month in the old series.)
  • Why does it sound again when Abi merely scans the magic door for damage?
  • What happens if someone tells a story and the green bulb doesn't light?
  • How did the Barber go from unemployed scribe to hyperspatial spider captain?
  • Did the Doctor have a plan all along? Was Belinda part of it? (We get two unsupported "Took you long enough" lines.)
  • How exactly does the spider stick its head through a door bolted to its back? (From the inside, even!)

I'm bypassing the Unexpected Space Baby -- that's a season-arc hook. Also the question of why Belinda stays in the TARDIS for the first half of the show, which, I'm afraid, is mostly to disguise the fact that she has absolutely no role here beyond backstory. (I didn't notice this until my second viewing. And to be fair, the story is foregrounding six guest characters.)

But, again, it's hard to assemble a list of plot holes because the plot barely hangs together in the first place. The plot beats aren't when things happen; they alternate between people walking in the door, and people telling stories. Not just the chair stories! The Barber tells one story about himself; then he tells a different story. Apparently they're both lies, and he admits to a third story, which upsets Abi...

Maybe we should stop kicking and accept that this is a storytelling event. It's not an action-adventure script, no matter how many giant spider robots explode at the end.

Listen to that first exchange. The Doctor unrolls a story. You can see him settling into it. "They're all scared of him... he, who hides his identity like a coward." You know this one, right? The Doctor reveals the pathetic truth behind the curtain. (Or behind the mural of Jon Pertwee.)

The Barber responds in kind. "I go by many names" and a naming of gods. It's a different dramatic reveal: the mastermind unmasked. A bit early for it, mind you. The Master wouldn't spill the beans like that until act four.

...Except the Doctor isn't buying it. He laughs, Belinda laughs. Everybody laughs. The Barber mumbles defensively. The dramatic-reveal music drops out. And then the Barber takes the floor back with a new story and different dramatic music.

(Nothing signals that the music is diegetic, but it's fruitful to imagine that the characters are deliberately invoking it. Intense stare into the camera, monologue, cue the music! Really, try watching the episode this way.)

That's four story-postures in a row, each a strategic attempt to undercut the last. And we're not halfway done. Remember the hypnotism duel from 5000 Fingers of Dr T? It's that!

It's impossible to avoid the idea that the stories are stories, that we're not meant to take them as reality. When the Doctor says "We drank so much wine we caused a drought in Athens," that's not a lost Who episode, that's a brag. "I played chess with Bastet, I let her think that she let me let her win" is, yes, the most Doctor-y line in TV history, but the Doctor doesn't historically pal around with gods. The Doctor meets a god, generally the god gets sent packing. Right?

I'm not exactly saying that these stories are lies. The Doctor's comment about Anansi's daughter comes back on him from Abi; that's a real moment. When Omo, at the beginning, talks about the Doctor extinguishing a forest fire, the Doctor follows up by saying (to Belinda) "we met in a fire." (But had they always met in a fire, or only after Omo said so...?)

But the logic of the story is entirely as a series of top-this, yeah-no tales. When the Doctor gets everybody laughing at the Barber, it's real -- but it's also a move in the game.

The game continues. Abi throws down: "I'm here because of you." The Doctor rolls with it, and brings on the Fugitive Doctor to promise us, eyes to camera, that she's still got a story to tell. (Still the best Who move of recent years.)

And of course the final act is the pure-quill Doctor turnaround. (Once Abi opens the way with her final story.) Sonic the lights, out the door, run, you clever boy! Wib-wobbling the whosis engine while Bel yanks wires. It's absolute nonsense, but it's Doctor nonsense; it's exactly what we expect from the show. The Barber staggers in (he knows he's lost already), and the Doctor hits him with his finisher -- the regeneration face parade. Unbeatable.

...and then the Doctor hands it back, lets the Barber take the stage for the closing solo. "What would your six-word story be?" This is the Barber's story. It's not about defeating a monster. (The spider robot is a monster, and it goes out as a grace note.) Abena is allowed to bow out on her own terms. The barbershop quartet, well, we're tight on time but we do our best to see them off.

The Story and the Engine is two genre-conscious characters going at it with the tools of their trade.

I don't think you can do that trick again either. I can't wait to see what Davies pulls instead.


Closing notes

The maze-and-hearttree layout of the spider-engine is so very TARDIS that it invites a reading of the Barber as a Time Lord. Genre Lord? The episode doesn't go there, so I haven't either, but there's another whole essay in that. Particularly if you look at the African-fetish symbolism in that room and connect it to Faction Paradox's voodoo-loa-Rassilon worship. Anyone?

Come to think of it, 73 Yards does some TARDIS mirroring of its own. The shrine that accumulates around the locked TARDIS is made of the same charm-and-memorabilia material as the original fairy circle. I'd happily read that circle as built from that shrine material, directly. Was the TARDIS a fairy circle to begin with? In its own BBC style?

Also

This post started as a response to Elizabeth Sandifer, a Who blogger I've been reading (and Patreoning) for years. Sandifer had no time for 73 Yards: "a nothing—a trifle". She rated it the worst episode of its season. Again, I don't disagree with anything she says, but I have a different angle.

Then my post got a bit out of hand. So I still can't claim to be arguing with Sandifer, but maybe it's a better angle now. A solid angle?

I promised myself I'd finish writing this before reading Sandifer's Story Engine post. For reasons. Sandifer has described herself as a follower of Sága, so I expect some fireworks there. (It's not impossible that RTD also follows Sandifer's blog, but I haven't inquired into this!)

(That second essay I linked to, Exiting the Draugr Castle, is not a Doctor Who post. It's a tale of events at the 2024 Northeast Thing, a Norse pagan convocation. It goes pretty hard. It's a good post.)


Renga in Blue

Journey of a Space Traveller: The Words of a Sermon That No One Will Hear

(Continued from my last post.) As promised, I went through the Amstrad version of the game, with some places having expanded text. I don’t think any of the text helped me with puzzle-solving, but it did make combing over the map less repetitive since things looked slightly different. There was one genuine change in content […]

(Continued from my last post.)

From the cover of Games Magazine November 1984, with the Amstrad version of Space Traveller / Visitor from Space, although this particular illustration is meant to go with a different game, Interplanetary Miner. Mind you, I think they’re just pulling from the same stock archive of space pictures for both.

As promised, I went through the Amstrad version of the game, with some places having expanded text. I don’t think any of the text helped me with puzzle-solving, but it did make combing over the map less repetitive since things looked slightly different.

Just west of the start. The original just describes it as a field, without the extra textual hint about digging; if I hadn’t found the treasure already this would be a case where the expanded text was helpful.

No busker (or Beatles reference) in the original.

Outside the warehouse, previously with no mention of dark glass.

There was one genuine change in content (that I’ve seen so far): an ancient manuscript in the warehouse (seen above) which originally just had a box. Like the newspapers and poetry book, it can’t be read without glasses.

I guess you can also count the Oric in the computer shop changing to an Amstrad; would expect that one.

I did reach two new areas, but before describing those, two quick treasure finds, the first being right at the opening with the pebbles. EXAMINE PEBBLES reveal a zirconium nugget.

Additionally, back at the bus stop, if you WAIT at the queue you will eventually be able to get on, and while on the trip there will be a roman coin you can scoop up. (This incidentally takes you to the north part of the map without praying. The other option — adjacent to the bus — is a taxi where you can GO TAXI to do the same thing, but no coin on the way.)

So treasure count wise, that makes five so far: silver bar (dug in the field), zirconium nugget (pebbles), roman coin (bus), gold pen (teacher), and rocket fuel (hut, using key). The rocket key ends up not counting towards the ten treasures (despite it having asterisks) but I’m counting it anyway meaning we’re at 5 out of 11. I’ve got 4 more secured, plus 1 probable location, so I’m close to the end, but close isn’t all the way.

First, let’s go back to the lake by the hut, where I previously did ROW BOAT. Checking each room carefully, I realized SWIM was also a verb that could apply there, and it led me to an entirely new destination.

The landing point is a beach with sunbathers. Back at the store (in the Amstrad game it is described as a “Tesco”) there was a lighter at a store that couldn’t be grabbed because it was by the register and our alien visitor has no Earth money; however, farther away in the same store there’s some suntan lotion and baked beans that are apparently out of the eye of any watchful cashiers. GIVE LOTION to the sunbathers and you’ll get a CAMERA (treasure #6).

Just to the east there is a dead body, just because this is a gonzo adventure and tonal shift is just its thing.

Dying alone and unnamed. Searching reveals nothing. Oddly, unlike the boat trip which is one way, you can just swim back across the lake.

The cliff I’d been looking for! With the parachute (first getting chastised by the parser for trying WEAR PARACHUTE, it just assumes you have it on implicitly) I was able to land safely.

Just to the east is a crab (taking it gets you chomped: death); a few rooms away in a “dark forest” is a “gnome” that is, I quote, “the sort they sell at Woolworth’s”. GET GNOME:

In the middle of a dark forest, putting us back in On the Way to the Interview for a moment.

Between the gnome and crab is a “sandy cove” with a “driftwood” that is hiding a diamond ring (treasure #7).

To get out of the region (without PRAY) there’s a narrow ledge which requires a ROPE. The implication here is that walking through the section takes up two inventory slots already (parachute + rope) so getting the ring + the driftwood requires two separate parachute runs through (maybe the driftwood doesn’t do anything, but I don’t know that yet!) If there’s some way to handle the crab and/or gnome it requires bringing in objects to test one at a time.

Now is a good time to mention the three-item limit is an incredible pain. Either the boat (alone) or the parachute and rope (together) are needed to move from the north to south side of the map, so in a practical sense the inventory limit is either 1 or 2, and so testing any theory about bring an item X to a spot Y requires a lot of shuffling. The size of map really does influence the level of suffering involved with a small inventory limit; a good recent example of this is Mystery House II, where the two-item limit applied in all versions. In the MSX version it was irksome (the entire house was always accessible) but more workable in the versions split into multiple volumes (as they only involved a smaller portion of the house).

Moving past all that, I mentioned I found a second area. Down at the farm there’s a “pigsty” which I thought was merely a dead end, but it is possible to GO IN.

The way to get by the pig is simply to PUSH PIG knocking it over, cow-tipping style.

Past a long tunnel is a mansion. I have yet to use the sword for anything.

This is followed by a fairly dense area where I doubt everything ends up coming into play, but let’s do bullet points:

  • a garden with a gate and a “garden snake”
  • a “gamekeeper” in a clearing
  • some mushrooms in a woods (they don’t seem to be takeable)
  • a platinum bar (remember that trolley from the farmer who liked poetry? you need it to pick up the bar)
  • a lead casket (you need something to open it; dunno what yet, see inventory limit)
  • a woman in a field (trying to KISS this one results in getting slapped, I guess this isn’t Earth Girls are Easy)
  • a large monument with a radio transmitter, another treasure

Finally at the end (drumroll) there’s the spaceship! Except I don’t know how to get in. Forgot my remote and the app stopped working, I suppose.

In the end all the puzzles have been straightforward (except PUSH PIG was pretty odd) but the spread out nature of the map makes things hard to test. I still need to check: blowing things up with dynamite (and can the lighter be taken somehow?), dealing with the dog outside the store, taking various objects like the hammer over to the lead casket, seeing if the gamekeeper will take something, nudging at the mushrooms some more, and even more things I’ve lost track of. This is a lot more work than I expected from an Oric type-in.

Monday, 28. July 2025

Key & Compass Blog

New walkthroughs for July 2025

On Monday, July 28, 2025, I published new walkthroughs for the games and stories listed below! Some of these were paid for by my wonderful patrons at Patreon. Please consider supporting me to make even more new walkthroughs for works of interactive fiction at Patreon and Ko-fi. Tempus Fugit: The Past is Yet Unwritten (2025) […]

On Monday, July 28, 2025, I published new walkthroughs for the games and stories listed below! Some of these were paid for by my wonderful patrons at Patreon. Please consider supporting me to make even more new walkthroughs for works of interactive fiction at Patreon and Ko-fi.


Tempus Fugit: The Past is Yet Unwritten (2025) by Gianluca Girelli

In this sci-fi time-travel game, you play as John “Max” Walker, captain of the Koseidon, humanity’s first time ship. After you and your crew fought invaders from the stars in 2225, they created and entered a wormhole into the past. You pursued, but something forced you out of the wormhole midway. Main Base no longer answers. Stop the invaders before it’s too late.

This game was an entry in the Text Adventure Literacy Jam (TALP) of 2025, placement to be determined.

IFDB | My walkthrough and maps


A Taste of Terror (2025) by Garry Francis

In this game, you play as ten-year-old Sean MacDonald enjoying your holiday by running around Aunt Clarissa’s farm. Your aunt has aged horribly though. Uncle Bill’s death must’ve hit her hard, but perhaps something else is wrong. And, tonight, your back hurts. You hope you can find a painkiller in the kitchen.

This game was an entry in ParserComp 2025, placement to be determined.

IFDB | My walkthrough and maps


Renegade Brainwave (2010, 2023) by J. J. Guest

In this B-movie spooky comedy, you play as the crossdressing Detective Frank Douglas. You and Officer Donald McRonald are investigating a mysterious object from space that crash-landed in the swampy Bide-A-Wee Cemetery for Circus Folk. Beware the puppy imbued with the incredible power of cosmic radiation! Earth’s fate lies in your hands!

The original ADRIFT version of the game was entered in Ectocomp 2010 where it took 2nd place. It was later ported to Inform 7.

IFDB | My walkthrough and map


Monk by the Sea (2020) by Elizabeth DeCoste

In this mildly-surreal game inspired by the paintings of Caspar David Friedrich, you play as someone who meets a monk by the sea, visits an abbey in the oak wood, and explores a lighthouse by the seashore.

IFDB | My walkthrough and maps


BLACK’N’WHITE RAG – or, A Study in Something-or-Other (1996) by Jonathan Nowell

In this short one-room escape challenge, you play as a UK university student locked in the programmer’s study. By escaping without alerting Security, you’ll raise money for charity. The RAG Week Committee made sure that the objects already in the room have enough clues to help you get out.

This game was one of three runner-ups in the 1996 Acorn User Interactive Fiction competition, and it was also awarded “best CD-related puzzle”.

IFDB | My walkthrough and map


Life of A Librarian (2013) by Timewalker

In this tiny very-short one-room slice-of-life game that was probably written as a coding exercise, you play as a librarian. There’s a fiction book in the bookdrop, a book scanner, and several shelves. Process the book correctly and you’re done.

IFDB | My walkthrough and map


Not in Venice (2012) by Bahri Gordebak

In this very-short story, you aren’t in Venice. You are not looking at a narrow Venetian street from a French balcony. What you do isn’t important at this moment, but what you don’t is.

IFDB | My walkthrough and map


That Damn Remote (2009) by Jamie Phelan

In this slice-of-life game, you play as an exhausted box factory worker who just wants to relax watching his favourite TV show. But your remote control has disappeared. Find it and get this stressful day over with.

IFDB | My walkthrough and map

Sunday, 27. July 2025

Zarf Updates

Summer puzzle games

Recent puzzle fun. Cipher Zero Coupling Monument Valley 3 (See also Occlude from a couple of weeks ago.) Cipher Zero by Zapdot -- game site A Witness-like which starts out in nonogram (paint-by-number) territory and then gets more complicated. ...

Recent puzzle fun.

  • Cipher Zero
  • Coupling
  • Monument Valley 3

(See also Occlude from a couple of weeks ago.)


Cipher Zero

A Witness-like which starts out in nonogram (paint-by-number) territory and then gets more complicated. Very complicated. The glyph rules are pretty easy to grasp, but the permutations of fulfilling them on a board can be ferocious.

This has a lovely poly-painted aesthetic and an even better hand-feel. Everything slides and moves and bounces with satisfying ssh-click! noises. However, it lacks the explorable frame-world of Witness and Taiji. As far as I can tell it lacks the world-level secret goals and surprises as well. It's just a steady firehose of puzzles. I'm feeling worn down (middle of chapter 3-out-of-5) and I'm ready to put the game aside.

Coupling

Minimalist puzzler where world elements move based on your movement. That's a fairly well-explored puzzle-platformer gimmick; Coupling jazzes it up by putting you in nonlinear space (think Antichamber or Manifold Garden). Portals, looping plummets, all the fun stuff.

This is imaginative and clever, but it requires precision footwork as well as brainwork. I bogged down on one tediously fussy shuffle-dance over a pit -- I succeeded once, then screwed up the next stage and had to repeat the shuffle, and then something else went wrong and I needed to start the whole level from scratch? Maybe? I lost interest, anyhow.

If you try it, I recommend checking all the settings and control info. There's some "snap facing to grid" buttons which make the fussy parts considerably less annoying. Also you can tweak the dead zone on your controller sticks, which I found absolutely critical.

Monument Valley 3

Oy, the Monument Valley games. I always enjoy them but they seem so inconsequential once I'm finished.

No, let's talk about Netflix. Netflix leaped into the gaming arena in 2021. Quality mobile games free with your Netflix subscription! Plus they acquired studios like Night School (Oxenfree) and Spry Fox (Cozy Grove). Indie hits like Hades and Rise of the Golden Idol got hauled in as Netflix exclusives -- on mobile at least.

Great for the developers. Not great for me; I don't have a Netflix subscription. But I mostly game on PC so whatever, right? Games arrived on Steam, I played them on Steam... except for Monument Valley 3, which launched last December as a 100% Netflix exclusive.

Well, that didn't last. Surprise! Netflix seems to have decided that throwing buckets of money at talent isn't nearly as good a deal as farming a few reliably addictive titles. Pretty much the same thing that happened to Apple Arcade. Netflix was just a couple of years behind the curve. So now Netflix is closing studios and delisting games. (With little notice to developers, according to The Verge.)

And now MV3 has disappeared from mobile. It's on Steam now, though, so... no, that doesn't make it all worthwhile. Not remotely. Netflix's whiplash for developers isn't the worst game-industry news of 2025, but it sure doesn't help. What will happen to Night School, dammit?

I hope MV3 will make it back to mobile soon. Yes, it's playable with a mouse (and I did) -- but the series was born on touchscreen and lives its best life there.

Good game though. MV2 felt like a retread of the original, but MV3 expands its reach. Many new visual twists and interaction ideas. The puzzles are a bit deeper, too. It's still not a thinky puzzle game, but you have to manage more state and pay attention to more things.

As for the story -- just enough for a platformer, as usual. Geez, there was a brief rumor of an MV movie adaptation, wasn't there? Talk about starting from scratch. Instead we got a five-minute animated short, which is legit and lovely but definitely follows the tradition of "tiny wordless anecdote".

I'll keep playing Monuments as long as the series continues. The question is, are they selling well enough to justify the (long, apparently high-effort) development cycle? Ustwo's fling with Netflix, unsatisfying as it was, seems to imply the answer is "no".

Saturday, 26. July 2025

My So Called Interactive Fiction Life

Sharpee - Refactoring Standard Library Event Wiring

Sometimes you're testing code and go through the pipeline of connected code and realize something just "smells wrong".emitSuccess() - for success events with messages emitError() - for error events with messages emit() - for generic events emitMany() - for multiple events at once createEvent() -

Sometimes you're testing code and go through the pipeline of connected code and realize something just "smells wrong".

emitSuccess() - for success events with messages
emitError() - for error events with messages
emit() - for generic events
emitMany() - for multiple events at once
createEvent() - to create events without emitting
resolveMessageId() - to resolve short message IDs to full ones

Where all we needed was:

event() - append an event to the event source

We also added the turn number to the base event. We documented this in ADRs 039-042.

We're also explicitly defining all event data for each action like this:

/**
 * Event data types for the taking action
 * 
 * These interfaces define the structure of data emitted by the taking action
 */

import { EntityId } from '@sharpee/core';

/**
 * Data for the 'if.event.taken' event
 * 
 * Emitted when an item is successfully taken
 */
export interface TakenEventData {
  /** The name of the item that was taken */
  item: string;
  
  /** Where the item was taken from (entity ID) */
  fromLocation?: EntityId;
  
  /** Name of container/supporter it was taken from */
  container?: string;
  
  /** True if taken from a container */
  fromContainer?: boolean;
  
  /** True if taken from a supporter */  
  fromSupporter?: boolean;
}

/**
 * Data for 'action.error' events from taking action
 * 
 * Different error reasons have different data requirements
 */
export interface TakingErrorData {
  /** The specific error reason */
  reason: 
    | 'no_target'           // No object specified
    | 'cant_take_self'      // Trying to take yourself
    | 'already_have'        // Already carrying the item
    | 'cant_take_room'      // Trying to take a room
    | 'fixed_in_place'      // Item is scenery/fixed
    | 'container_full'      // Inventory is full
    | 'too_heavy'           // Item is too heavy
    | 'cant_reach';         // Item is not reachable
  
  /** Name of the item (when applicable) */
  item?: string;
  
  /** Additional context for the error */
  details?: Record<string, any>;
}

/**
 * Data for the 'if.event.removed' event
 * 
 * Emitted when a worn item is implicitly removed before being taken
 */
export interface RemovedEventData {
  /** Whether this removal was implicit (part of another action) */
  implicit: boolean;
  
  /** The item that was removed */
  item?: string;
}

I didn't need to implement this change, but I think it helps with making a self-documenting architecture.

I suspect this won't be the last iteration through all 40-something standard actions.


Renga in Blue

Journey of a Space Traveller (1983)

I have been sent on a difficult and rather dangerous mission to a distant planet called EARTH. My mission is to locate ten items of treasure and bring them back to my spaceship. I will, in addition, need to locate some rocket fuel for my return journey. My random roll has landed me on the […]

I have been sent on a difficult and rather dangerous mission to a distant planet called EARTH. My mission is to locate ten items of treasure and bring them back to my spaceship. I will, in addition, need to locate some rocket fuel for my return journey.

My random roll has landed me on the works of Steve W. Lucas, perhaps best thought of as Britain’s answer to Peter Kirsch. That is, a wildly prolific author who wrote reams of slightly janky BASIC code but with flashes of creativity just naturally from cranking out bucketloads of content. He has 41 hits on CASA but some of those are duplicates — when porting from one system to another he would often change his game’s title and only sometimes change his content. It’s unclear how many distinct games he wrote and it may even depend on your definition of “distinct”; there’s a long thread at CASA that tried to tame the chaos but there still seems to be some confusion. The other comparison with Kirsch of note is how he worked with a wide variety of computers: MSX, Oric, Amstrad, and BBC Micro.

With Journey of a Space Traveller, it first appeared in Oric Owner (Aug./Sept. 1983) but got changed to A Visitor From Space in a 1984 printing for Amstrad, with some expansion of the text. The intro at the top of this post is from the Amstrad version; the Oric version instead starts “I have been sent on the first flight from my planet to the planet Earth” which I think has less punch than “rather dangerous mission to a distant planet called EARTH.” However, I’ve been playing (up to where I’ve been stumped) the Oric version; as is tradition with multi-version games, I might poke at the Amstrad version to see if there’s any tweaks or textual hints to help (allegedly the walkthrough is the same, at least).

The Oric is a new system for this blog. I’m not going to do a system history right now, but I’ll say it is Tangerine’s much more successful follow-up to the Microtan 65 and was particularly well-received in France as it didn’t need an adaptor for their SECAM television format.

It is likely his first published game but I’m not 100% certain; it is his first to appear in Oric Owner, at least, but he also published some BBC Micro software through Silverlind; the first ad for that I’ve found in November, with a “call for games” back in May.

From the Oric magazine original.

The other distinctive thing about his games — specifically the Oric Owner ones but maybe some of the others as well — is how buggy they are. None of the ones printed in Oric Owner work directly as printed; Garry has a patched version that’s needed to get past even the first command. This is the sort of thing I’d normally blame on the magazine rather than the author but it’s odd for it to occur multiple times; the author has two games in the December/January issue with the same problem.

Games Computing, November 1984, with a slightly higher art budget. Well, higher art budget for printing, but given the art has nothing to do with the game I think it was “borrowed” from elsewhere.

The instructions helpfully give the verbs (this seems to be common across all the Steve Lucas games) so I’ll give them, just as they were printed:

GO IN, GO OUT, GO TAXI, OUT, N, S, E, W, WAIT, SING, SAVE, WEAR, SCORE, ROW, SAIL, THROW, LIGHT, GET, TAKE, GRAB, CLIMB, DOWN, READ, **** OFF, TIME, DIG, HELP, SEARCH, DROP, LEAVE, GIVE, OPEN, PHONE, QUIT, LOOK, KISS, PRAY, LOAD, CLOAD, PUSH, PULL, EAT, ATTACK, HIT, KILL, EXAMINE, SWIM, USE, INSERT, UNLOCK, WEAR, JUMP, INVENTORY, BUY, CRACK, COOK, SORRY, SAIL, ROW

(****, OFF not required, gets “how dare you speak to me like that? What do you have to say for yourself?” and you need to respond SORRY before proceeding on.)

It’s a traditional treasure hunt, but with the twists that a.) you are an alien and b.) you’re treasure-hunting on modern Earth. Adventure-behavior — especially without regular communication with characters — is typically a bit non-standard, so I like the idea of the mute protagonist poking and searching every room (digging random floors, hitting walls, trying to climb everything, etc.) being explained away by their alien status.

I don’t know where the spaceship is; part of the goal is to find it. This is a major pain in that the inventory limit is three (weak alien arms, I guess we’re used to lower-G) so I have no idea where to stash things so they’ll be close for their inevitable unloading into a cargo bay of some sort.

Right to the east of the starting point are some pebbles and a shovel…

The Amstrad version adds “The pebbles hurt my feet!” but I haven’t gone past this room.

…and the shovel can be used just to the west to dig up some SILVER bullion, our first treasure. Nine to go!

Heading to the east, there’s a quarry with a hammer, and nearby is some dynamite and a parachute. I have yet to blow anything up (I think it needs a lighter I’ll show off later) nor have I found the right place to apply the hammer and parachute (…presumably not at the same time). There’s additionally dead ends with a Sheer Rock Face and Bulldozer but I haven’t quite worked out yet if this is an “everything is important” style game or some parts are just scenery. I’m leaning to the latter.

A rope is at a bridge (again, haven’t used) leading to a “primary school”. The school has a secretary which you can kiss (the game says she likes it, indicating we’re an alien counterpart to Riker) and a head teacher who has a GOLD pen, another treasure. Examining the teacher reveals they like singing (alien senses, I suppose) and SING will utilize the Oric’s speaker to play a tune, after which you can get the pen. Eight more to go.

Leaving the school (swiping a book of poetry for later, we can’t read it because we need glasses) and proceeding westward we can find a locket hut at a boat. I’ll mention right now there’s a key laying out in the open later used on the hut which contains *ROCKET FUEL* (seven to go); the boat needs to be carted a short way to a lake where ROW BOAT can be applied. Note that the three-item limit applies neutrally, so a LARGE KEY is the same size as the boat in inventory.

The trip over water landing at the Footpath (see upper right of above map) is one-way; the only way so far I’ve found to return to the start area is PRAY, which warps you over for some reason. (Religious miracles: alien technology all along!) The PRAY is quite relevant insofar as just to the west you can get lost in a forest that’s an endless loop, and as far as I know PRAY is the only way to get out.

Proceeding in a direction that isn’t a trap passes through a warehouse with a box (nothing in it), and that leads to a carpark, and then a bunch of directions from there, like a bus station complete with queue…

Only in a Britgame.

…a computer store with software you can LOAD…

…a fish and chip shop…


…and a closed newsagent place with newspapers that can’t be read because you still need your glasses. (If this was logical you’d have left them on your spaceship by accident, but I can’t rule out some random passerby’s reading glasses working just as well.)

Nearby all this lurks a LARGE KEY at an intersection which goes back to that hut with the rocket fuel; as I already indicated, the only way I can find so far to head back there is to PRAY.

Moving on to the west, we can pass by a rubbish bin (seemingly containing nothing!) near a supermarket.

To the west of here is a lighter at the cashier. I can try to BUY LIGHTER but the game asks “with what?” Maybe use one of the treasures and get it back later somehow? I still need to experiment.

Lurking outside the supermarket is a dog; no idea what to do here yet…

…followed by a bunch of rooms leading to a farm complete with tractor and a farmer. The farmer wants a book, so if you hand the poetry book over he’ll give you a trolley, because this game is following gonzo logic.

To be fair, the “I’m an alien” does a lot of the work in making the narrative seem semi-normal for an out-of-control treasure hunt. However, I am up on my limit now at only three treasures.

I’m not going to list every obstacle because I don’t know which ones are “real” and which ones are for scenery. Does the forest have a different escape? What can you do at the bus station? Does making the dog happy lead to treasure? This might be the extent of the map and I’m just supposed to mop things up (akin to Invincible Island) or I may have only seen part of it. Given the parachute (and distinct lack of gaping chasms) surely there’s at least a bit more to go. Maybe the supermarket is secretly the alien spaceship.

Friday, 25. July 2025

Renga in Blue

Invincible Island: The Bones of Our Ancestors

(My previous posts are needed for context.) I’ve beaten the game, and unfortunately both puzzles involved were terrible. I still will give some latitude because the combining-message mechanic was so satisfying, but let’s get to the end first– Continuing directly from last time, I needed to get a parchment from the native without resorting to […]

(My previous posts are needed for context.)

I’ve beaten the game, and unfortunately both puzzles involved were terrible. I still will give some latitude because the combining-message mechanic was so satisfying, but let’s get to the end first–

Continuing directly from last time, I needed to get a parchment from the native without resorting to violence. I had tried to GIVE every single item I could possibly bring over. (The SKULL I could not bring, because it triggers natives attacking when it passes by the other native.)

Every GIVE gave a variation like the one above: “what?? I don’t think the native wants it”. The text here clearly implies the game is understanding, and simply rejecting this option.

Instead, no: GIVE NECKLACE was right. But it has to be typed as GIVE NECKLACE TO NATIVE in order to be understood.

I’ve never done relative ranking, but this likely would my in top 3 most deceptive parser messages of all time.

Fortunately this was near the end of the game because otherwise my mood would have significantly soured. I did not come across as “solving a puzzle” as much as “making a meta-leap based on my past experiences, given we know the character has the parchment, the verb list is minimal, and GIVE is on it”.

Knowing the GIVE syntax, I went back to the first native and tried giving an item that hadn’t a use before: the FOOD. The results in the native trading a PHRASEBOOK.

With the phrasebook I could go back and read the two messages previously untranslated, at the sign and the altar.

The first simply indicates to follow the path rather than digress, where the second one might be intended as a hint for the endgame but I’m still massively unclear about it (you’ll see in a moment).

when the page is complete look and you’ll find, west of the sun and the ancient temple,amongst the bones of our ancestors

I still hadn’t used the SPADE yet, but now was the time: I dug starting at the three pillars and going west. Just east of where the skull was I found gold.

Once the gold is revealed, natives immediately appear and start to chase. It’s a little more time than what happens with getting spotted with the skull, but not enough to do anything useful.

Trying to hide in the well. You can jump in the cave but you just get killed in the dark.

If it hadn’t been for the GIVE issue I would have spent a bit longer on the puzzle, but I was grouchy and worrying I might be running into another parser issue. It isn’t a parser issue at all, and just as an experiment, I’m going to pause before revealing the answer. Try your best guess at how to pick up the gold and survive all the way back to the boat; maybe you’ll spot something I did not.

Via eBay.

Did you come up with… be holding the skull while picking up the gold?

Despite being attacked earlier because you had the skull, now you are attacked when you don’t have the skull. I assume there is some logic about a taboo going on but I couldn’t come up with any rationale, nor any way to pull the altar’s clue into the puzzle (assuming it is relevant at all).

With the skull providing safety, you can now walk back to the boat. The boat still needs to be light enough to sail, and you’ve got a bunch of gold, so you need to drop the skull before leaving, but there’s ample time after to sail away.

The puzzles overall were essentially straightforward (coat for the cold, foot pump for an inflatable boat, key for a door) and the wide-out exploration and slowly growing parchment made for a satisfying middlegame. Just it failed to stick the landing. I surely am missing some clue on the skull, right?

I’m going to save Urban Upstart for a little bit later (but not too long, I want to have the “feel” of this game fresh in my mind) and my projected third Britgame also needs to be maneuvered a little, so after I finish writing this I’m pulling out some actual dice to see what comes next. Exciting! Then we’ll be off to one of the first Japanese adventures of 1983.

Thursday, 24. July 2025

Renga in Blue

Invincible Island: 七星聚会

(Continued from my previous post.) I have seen all seven parchments put together and even solved the puzzle, but I don’t quite have them all permanently yet. Progress was mainly a matter of getting comfortable with the game’s norms. For example: last time I mentioned the canary I hadn’t tested yet. Bringing the canary in […]

(Continued from my previous post.)

I have seen all seven parchments put together and even solved the puzzle, but I don’t quite have them all permanently yet.

Strident mentioned the prog band in the comments: The Speedy Bears. Pete Cooke on keyboard. Source.

Progress was mainly a matter of getting comfortable with the game’s norms. For example: last time I mentioned the canary I hadn’t tested yet. Bringing the canary in the “coal mine” (not actually a mine) the canary fell over dead after two steps.

This reflects the “you can’t breath” rooms, but is this letting us know about a potential timed danger, or is there a further puzzle here where we have to make it to place X with the canary surviving? With one of the “every item matters” games like from the Cambridge mainframe (Hezarin, Avon, Quondam, etc.) I would be on red alert until there was further resolution; with this game, the canary is just meant to give the information above, and then you can move on.

Similarly, there’s a part with a “native”; I found that if you pick up the skull and bring it to the same room, a group starts to gather and attack. In some games, this would indicate you’re supposed to find a sneaky way to get the skull by, or eliminate the threat; here, the norms are such that not only is the skull meant as a “trap” (like the stones over the bridge) but the native no longer needs to be considered as a puzzle element (I don’t need to sit around using GIVE on every item in the game or trying other verbs.)

In a more practical sense, I’ve discovered that while the parser is mostly two-word, there’s spots like right here you need four words: use WITH SWORD at the end is how you avoid just using your fists to fight.

Additionally, I was thinking there was going to be more map, but what I had last time was nearly all of it. I have marked the positions, and the six new rooms are in the upper right corner.

The first parchment and second parchment I had already found, in the underground area (SW) and island (NW) respectively. I had made a guess about the chest with the snake and the green potion that turned out to be correct: after drinking the green potion the snake’s bite has no effect (it doesn’t say “you feel cured”, you just don’t die); in addition to the trap the chest has the third parchment.

This is just the piece from the chest. After picking up multiple parchments, they automatically merge together, so you don’t need to visualize cutting and pasting.

The fourth parchment I was very close to having, with both a box I was not strong enough to open and an axe. I even tried BREAK BOX (“what with? your bare hands?”) and tested a follow-up WITH AXE on its own parser line. This was before I realized sometimes the parser wanted four words, so BREAK BOX WITH AXE all together does the trick.

I had mentioned the pits before, where one of them is fatal to enter. I hadn’t gotten around to testing the other two yet; both act entirely differently. One is fatal in an identical way…

…but the third reveals the fifth parchment straight off the bat.

Some games would have the norm that similar looking pits would have similar rules (see Probe One: The Transmitter for an example) but here all three pits are different.

My last bit of confusion involves the second fatal pit, two screenshots back. The game specifies you can go “down” and I somehow interpreted that as the same as entering the pit; in reality that’s just an area I missed.

With the anorak from the camp it is possible to climb a mountain and get the sixth parchment from the top without freezing from the cold.

Death soon after. I knew instantly what object I needed but I was curious what would happen if I moved on. This is a “death preview” moment and we’ll see another of its type shortly. See Burglar’s Adventure for more discussion of this idea.

Past the mountain is a pagoda; it is locked with a red key (which is just out in the open from the temple earlier).

The wild thing about the encounter in the pagoda is you can kill the native (with the sword) and get the seventh parchment. The death doesn’t happen until a few turns later, long enough to view the unified seven parchments altogether.

This is a cryptogram. Avoiding the automatic solvers on the Internet, I went to a site that has tools for playing them on a computer (I like them, but find them a pain to keep track of on paper). I swapped unused letters for symbols to get:

UFTL RFT NCET GQ AMKNJTRT JMMI CLB WMSXJJ DGLB, UTQR MD RFT QSL CLB RFT CLAGTLR RTKNJT,CKMLEQR RFT ZMLTQ MD MSP CLATQRMPQ

The puzzle fortunately falls fairly easily to “the most common letter is E” and “the second word is probably THE” as a start.

when the page is complete look and you’ll find, west of the sun and the ancient temple,amongst the bones of our ancestors

I assume this is back at the skull, but since all parchments are needed for the final area (at least according to the decipherment) I still need to figure out the legit way of getting the final parchment piece from the pagoda. I expect it will be either the last puzzle remaining (if finding the treasure is just a glorious “you win” section) or the second to last (if getting out after finding the treasure is still going to be a problem, like in Calixto Island).

Wednesday, 23. July 2025

Renga in Blue

Invincible Island (1983)

Apologies: after a bit of research I’m going to visit Invincible Island first and Urban Upstart second, as they represent the first two text adventures by Pete Cooke in the order he wrote them. (The latter was picked via random number generator to be my next game, rather than anything systematic.) Both were written for […]

Apologies: after a bit of research I’m going to visit Invincible Island first and Urban Upstart second, as they represent the first two text adventures by Pete Cooke in the order he wrote them. (The latter was picked via random number generator to be my next game, rather than anything systematic.) Both were written for the ZX Spectrum.

Pete Cooke is another one of our math-teachers turned programmers, although he started (after graduation) trying to make it work as a piano player in a progressive band; the band failed (he blames punk rock) so he ended up doing degree-work in order to teach math to 11-to-14-year-olds in Leicester.

While their department received a text-only RM 380Z…

A machine developed in 1977, targeted at schools in the UK. From vt100.

…where he really caught the computer bug was the ZX81, where he “sort of lunged at it” and got using one as soon as he could. He ended up making programs that he showed to his students, and:

Eventually I wrote a simple text adventure and showed it to some of the students who said it was seriously good and thought it was better than some of the stuff in the shops!

He sent it to Richard Shepherd Software (previously: Super Spy) and they offered 1000 pounds to buy it, twice his monthly salary as a teacher.

[Adventure games] were interesting, and it was the idea you could explore somewhere. Also, I didn’t have the skills then to design 3D or animated graphics, although I’d been reading about AI and language parsing. It could also have been the influence of games such as The Hobbit, or maybe just the freedom appealed to me. I wrote it from scratch with bits in BASIC and tiny bits in assembler, but essentially hand-coded.

Noteworthy to highlight in the quote is the emphasis on “freedom” and “exploration”. This game has one of those wide-open maps more closely aligned to Roberta Williams than Scott Adams; this was not converted from ZX81 but rather written directly for the ZX Spectrum, along with its increased resources. (There’s a 2022 backport to ZX81 which converts the 48K original into 16K but even with modern resources and cutting out all the graphics, part of the original game was omitted.)

The loading screen has a ripple effect through “Invincible Island” so I wasn’t able to get a shot where all the text showed at once.

We’re back to being on a Treasure Hunt. Sort of.

WELCOME TO INVINCIBLE ISLAND

In this adventure you are an explorer stranded on the remote island of the XARO.

Your only guide is a letter you received from a Dr Chumley several months ago in which he said that he believed that islanders had hidden a massive treasure somewhere on the island.

Unfortunately, Dr Chumley did not live long enough to find the islands secret.

You have arrived on the island in a small boat, your aim is to find the treasure and escape alive.

Hmm. Since they’re hiding a treasure, I guess we have the right to scarf it? (It has come up before, but I want to emphasize that “claim stuff in the name of the British Empire / your wallet” is not common amongst these games despite so many Treasure Hunts. I still think the best instance so far has been making the deal with the demon in Zork II.)

What makes this game unusual compared to regular Treasure Hunt plots is something mentioned on the packaging, about “seven parchments” regarding the treasure. I have found two of them and they give parts of a message intended to be mashed together, so there’s an extra dose of intrigue in a game-mechanical sense beyond finding some “BARS OF GOLD” or a suitcase full of cash under a big W. It still is also possible the final “treasure” isn’t a normal treasure but “the friends we made along the way”.

The island is, as I implied already, pretty wide-open, but before I show off the map, here’s the verb list:

This ends up erratic; notice no READ verb, and there are at least two bits with writing (not even counting the parchments), which gets looked at with EXAMINE instead. PUT is actually WEAR. There’s no way to SWIM, and no way to HIT objects; so there is an AXE early on which I have not puzzled out how to use. CROSS gets used to launch a boat over to a small island.

For the map, I’ll give the whole thing at once to start, then break it into pieces.

For the opening area, walking along to the east is a deep pit; going in is death.

There are at least three pits that look like this on the map, so I assume there’s some aspect I’m missing and this isn’t just a trap.

Further are some STONES, which are something of a trap, but they only kick in later. Yet farther is a hut with a necklace.

Headed the other direction, there’s a RUSTY KEY nearby a chest that the rusty key conveniently opens. Unfortunately, doing so is, you guessed it, a trap.

I realize as I type this there is a mysterious “green potion” nearby which might be the antidote. I only tested it alone and nothing happened.

Moving farther along, just lying about on the ground is some FOOD, an AXE, a TORCH, a SPADE, an ANORAK (that’s a polar coat, maybe the top of the island is really high) and a caged yellow CANARY.

Before anyone asks, I have tested DIG with the spade in every location accessible so far with no luck. Near the same area is a “native” — the only one I have run across so far — and anything I’ve tested so far with GIVE (the only character-action verb that isn’t just KILL) has been rebuffed (I have not tested every item in the game thus far, though).

Turning east, there’s multiple rooms that are a “dark forest” where there are the occasional eyes peeking out, and more than a few turns in the forest turn out to be deadly.

There’s a BOX at the end of a path, but my character isn’t strong enough to open it.

Swinging back over to where the canary was, you can light a torch and go west into a “maze” except it’s a 4×3 set of rooms.

There are two rooms where you have trouble breathing — I assume the canary is somehow important to these rooms, but I’ve been able to just pass on by so I haven’t tested this yet — and spread out you can find a SWORD and one of the pieces of parchment.

The only way out of the “maze” is to the north…

…where there is a small area of “barren plain” including a SKULL, but soon after there is a river and lake.

One point requires crossing a bridge, and this is where the stones from earlier are a trap: if you’re carrying them the bridge collapses. Other items seem to be safe.

You can wrangle up a FOOTPUMP and a DINGY over to where there is a visible island on the lake, and the CROSS over to find another piece of parchment.

I’m wondering if the inflatable boat is from Zork. Infocom was never huge in the UK (lack of disk drives) but we saw at least one case of clear influence from 1982 (Goblin Towers).

I’m assuming all the fragments combine to make a cryptogram that needs solving, but it’s hard to tell with just the two.

Finally, past the native (who does not block your way, despite appearances) there’s a path leading to a temple and altar. The altar has writing that you can’t read and a red key but otherwise I have found nothing else of note.

I still have things to test (like using GIVE on more objects, seeing what happens with the canary, and seeing if the potion is an antidote) so I’m not stuck yet, but I also am unclear where more rooms (which clearly are out there) are going to come from, as I don’t have any clear navigational blocks except for the pits. Maybe this is a “multi-level maze” where we go underground, then go back up again elsewhere? In any case, with only two out of seven fragments so far, this is looking to be a meatier game than I originally expected.


My So Called Interactive Fiction Life

Traits and Language

When I designed the world model, I decided to implement a pattern that separates behavior from data. These are called Traits. If you apply the Pulling Trait to an entity, it will have all the necessary logic to handle being pulled. Initially the Pulling action in standard library had logic

When I designed the world model, I decided to implement a pattern that separates behavior from data. These are called Traits. If you apply the Pulling Trait to an entity, it will have all the necessary logic to handle being pulled. Initially the Pulling action in standard library had logic to handle various types of things that might be pullable (cord, rope, chain, etc) and the logic for this was encoded within the pulling action.

But we set a core design principle where Actions are language agnostic. If we include the words cord or chain in the logic, we're breaking that principle. This is clearly a minor design flaw. In order to resolve it, we need to move the language-based logic into more Traits so the action can manage everything through behavior and not language.

We only have a few actions that fall into this category, so it's not a huge refactoring. But it's a another nice design flaw catch from testing. Every time we discover these design flaws I get excited because we have always found elegant solutions within the overall architecture and that has not changed.


The testing phase of the standard library is taking, by far, the most time. I have had to dig into the generated code and logic to make scalpel like changes, so that's been different than most of the underlying code. I shouldn't be surprised. I was always able to design and direct, but getting the standard library and the eventual Forge authoring layer will require much more of my attention.

Monday, 21. July 2025

Choice of Games LLC

Coming Next Thursday: “Spire, Surge, and Sea”—New Author Interview and Demo!

Humanity’s last haven stands in a cursed sea: will you defend or overthrow it? Be warned: vanquished gods and spirits watch your every move. Spire, Surge, and Sea is an interactive post-apocalyptic science fantasy novel by Nebula finalist Stewart C Baker. I sat down with Stewart to talk about his work and his varied experiences writing interactive fiction. Spire, Surge, and Sea releases next

Spire, Surge, and SeaHumanity’s last haven stands in a cursed sea: will you defend or overthrow it? Be warned: vanquished gods and spirits watch your every move. Spire, Surge, and Sea is an interactive post-apocalyptic science fantasy novel by Nebula finalist Stewart C Baker. I sat down with Stewart to talk about his work and his varied experiences writing interactive fiction. Spire, Surge, and Sea releases next Thursday, July 31st. You can play the first three chapters for free, today, and wishlist it on Steam!

This is your second game with COG after the incredible and hilarious The Bread Must Rise. What if anything has changed in your approach to writing interactive fiction with ChoiceScript between these two games?

The Bread Must Rise taught me a lot about writing in ChoiceScript, and I felt a lot more comfortable diving in this time around. I had a much better sense of where I was going to get myself stuck by making certain narrative choices and—although I didn’t always avoid those choices—the game felt much less overwhelming as a result.

Spire, Surge, and Sea is simpler than The Bread Must Rise in some ways (because it doesn’t have those cooking contest scenes, which were a bit of a nightmare to code). In other ways, I think it’s more complex (why did I think it was a good idea to let gameplay affect which NPCs are present in some scenes? Why?!).

These are kind of vague answers, so maybe what I’m saying is “I still have no real idea what I’m doing.”

One thing I’ve confirmed is that I’m terrible at sticking to outlines. Both games looked pretty different by the end than they did at the start!

Also, I greatly benefited by exploring the code of other Choice of Games titles, especially Harris Powell-Smith’s. Their work is always fantastic, and I saved myself a lot of time and hassle by exploring how they set up variables for stat increase amounts and test value amounts at the start of the game, rather than typing in a numeric value every single time!

Where do these two insanely different settings and worlds and tones come from in your fevered brain?

There is chiefly one person you can thank for this (or, if you’d rather, one person you can blame): Terry Pratchett.

More seriously, it may seem weird that I could go from zany comedy to atmospheric and slightly depressing science fantasy, but a lot of the books, games, anime and movies I enjoy the most also mix the sad with the surreal.

I read a lot of British SFF as a child (I was born in the UK), especially Terry Pratchett and Douglas Adams but also lesser-known (in the US) authors like Tom Holt. And, when I was slightly older, I watched classics like Monty Python and Red Dwarf. I also got into anime and manga in my teens, and that grew into a broader interest in Japanese language, culture, and history while I was in college, including Japanese literature (classical and modern) and fiction, haiku, Zen Buddhism, and so on. And then in graduate school, I focused on medieval English poetry, especially the work of Geoffrey Chaucer.

I am a bit of a nerd, in case that wasn’t clear.

Anyway, something all of these different things tend to do is mix absolutely hilarious, surreal comedy with things that are deeply messed up and upsetting. Sometimes, the upsetting things are played for laughs. Sometimes the comedy is there to make the upsetting things catch you off guard. But often the two different tonalities just coexist, side by side, serving to highlight both the absurdity of life and our ambitions, and how tenuous and transient both of those things are in the end.

Woomph. This answer started with a joke and then suddenly got dark, huh? But that mixture of darkness and light, that brevity and our desire to overcome it, is what makes life so precious. It’s what makes us human.

Terry Pratchett is perhaps the most accessible example.

One of his most memorable characters from Discworld is Death. Literally Death—cowl and scythe and everything. Death’s struggles to understand human nature are hilarious, but they’re also compelling. And Death appears in nearly every novel, because people die and it’s his job to go collect their souls and show them on to their afterlives. (As the intro to A Death in Hyperspace notes: people die all the time.)

Those scenes with Death stick with you. They may be surrounded by jokes and puns—and many times contain jokes and puns in their own right—and they may be short, but they aren’t, themselves, jokes. Even when the character who has died is minor, or really only exists in the book to have been killed, their death is treated sincerely, their afterlife given a weight and a sort of transcendent beauty. (Or, in some cases, we get grim satisfaction by seeing them get what they deserve.)

Murderbot is another great example of this. Although people talk up how relatable Murderbot is as a character, it’s not solely its obsession with media and desire to be left alone that makes the series work. It’s the mix of tragedy and comedy, and how they both play an important part in Murderbot’s struggles to understand what it means to be human—and its difficulty accepting itself as a person.

Anyway, TLDR: I don’t think it’s weird to mix things that are hilarious with things that are sad. I can’t really understand how not to do it, most of the time!

What do you think our readers will find most surprising about Spire, Surge, and Sea?

The mix of fantasy tropes (gods, spirits, magic) with science fiction elements (nanotechnology) is probably the game’s most unusual thing.

Science fantasy is uncommon, but I do enjoy it! If you enjoy Studio Ghibli movies like Nausicaä of the Valley of the Wind and Laputa: Castle in the Sky, you might find some familiar notes in this one. My working title, for instance, was Gigantea: Age of Rot. Those movies, as well as Ursula K. LeGuin’s Hainish stories and novels, are the game’s main influences in terms of tone and tenor.

And maybe it’s not surprising after my previous answer, but despite the overall serious tone of Spire, Surge, and Sea, I still managed to fit in a few zany comedy bits.

This is a solo effort, but you’ve written with a writing partner and as part of a group. I’m fascinated to hear how the writing process differed for you in these different projects.

The development and writing process for The Bread Must Rise, A Death in Hyperspace, and Spire, Surge, and Sea was drastically different in each case.

In The Bread Must Rise, James and I set up weekly video meetings, pretty much from the outlining process all the way through to the day we turned in the final game. We spent a lot of time in those brainstorming, bouncing jokes and ideas off each other, working through bugs and code problems, and generally figuring out what in the hells we were doing.

All that talking made the game a lot stronger and more successful, I think, than if either of us had gone it alone. It was really a collaboration in the purest sense of the word, in that I don’t think there’s much of that game that only a single one of us wrote. We each tweaked and changed and planned pretty much all of it together!

A Death in Hyperspace, which has ten(!) co-authors, was a very different beast. I came up with the frame and concept of the piece myself, and most of the writing was done in a question-and-answer kind of format. I guided the other writers through a character creation process, with a few parameters in place, and then had them describe their character’s backstory and answer a series of questions from the point of view of Pearl, the game’s player character, who is an intelligent spaceship trying to solve a murder mystery. The other writers also wrote some of the ship’s rooms, though, and provided great insights into its mechanics and narrative throughout.

Again, what makes the game so special and interesting is the way all those different people’s perspectives have shaped it. It was a blast to work on, even though I should have been working on Spire, Surge, and Sea when I wrote it. Considering people liked it well enough for it to win a Nebula, I guess I’m not sorry about that constructive slacking off. (But don’t tell Jason I said that! 😉 )

When I’m writing by myself, I’m also a lot more self-indulgent! Usually I try to keep that tamped down, but for Spire, Surge, and Sea, I let myself lean into it a bit. Probably the place that is most obvious is in the prose, which tends to be a bit more flowery and elaborate. Plus I made some minigames, which was fun!

I sometimes struggle to stay motivated and finish solo projects properly, as well. The fact that Choice of Games contracts have deadlines are a big help, but with collaborations I know other people are also invested in a project before it’s completed, so I’m more likely to follow through.

I will say that, with a game the size of a Choice of Games title, there really is no such thing as a completely solo effort. Spire, Surge, and Sea was a giant mess before beta testing. It’s really only thanks to the work of the many folks who tested it that it’s any good. So THANK YOU, beta testers! All the commentary and testing you provided, whether big or small, was immeasurably helpful.

I’d like to give a special shout out to Aletheia Knights, beta tester extraordinaire, without whom chapter 2—and the tension and clarity it brings to the world—would literally not exist. As always, her feedback made this game much, much better! I’d also like to to recognize Choice of Games forum member Mr_DeBlob for finding many bugs and making many excellent suggestions over the course of a number of playthroughs spread across about a month and a half.

You’re a heavy hitter in IF with The Bread Must Rise being a Nebula finalist for games in 2023 and your multi-authored A Death in Hyperspace winning this year’s award just a few weeks ago! Have you realized all your game-writing ambitions yet or what new styles and genres do you think you’ll be taking on next?

I’m proud of the recognition those games have received, but struggle to conceive of myself as any kind of hitter!

To be honest, I think the collaborative aspect of both those games is what makes them shine. I’d love to work on more multi-author games in the future—it’s always exciting to see multiple perspectives combine and shift, and what comes out in the end is always the better for it.

Outside of that, I’ve been interested in trying out games that aren’t just completely text. A Death in Hyperspace takes the first tentative steps towards that, with music and a few very small graphical elements. I’d love to learn Unity or Godot or some other game engine that mixes writing with graphical assets, but I’m not sure I have the time!

One thing I’d really like to do is write a game that makes it to game consoles one way or the other. Maybe some day. 🙂

What non-game writing work would you like our readers to know about?

If you enjoy Spire, Surge, and Sea, you might enjoy my short story collection The Butterfly Disjunct. It’s a collection of science fiction stories, and while some of them are funny and some of them are sad, the emphasis in all of them is really on the characters. That’s available in print and ebook from various retailers and directly from the publisher, Interstellar Flight Press.

If you’d like to keep up with what I’m doing next and what I’ve been reading or playing lately, you can also sign up for my monthly newsletter. I try to keep the self-promotion to a minimum, so usually it’s me sharing things I’ve enjoyed or diving into interesting topics.

In terms of other people’s work, I’ve been tearing through Victoria Goddard’s Lays of the Hearth Fire series. They’re lovely and engrossing, if quite long! And if you’re into space opera, you’ll enjoy The Splinter in the Sky by Kemi Ashing-Giwa and The Stardust Grail by Yume Kitasei. Both have memorable settings, tense plots, and great characters.

Do you have a favorite IF you want to encourage folks to play?

Generally speaking, I find myself drawn to games that take chances or do something unusual as well as having solid writing.

On the book-length Choice of Games front, I really enjoyed Natalia Theodoridou’s meta horror game Restore, Reflect, Retry. It’s got a wonderfully creepy voice and plays with one of my favourite tropes: the dissonance between the player and the player character. Plus, it’s got lots of fantastic storytelling even without that.

Slay the Princess is another game I’ve played recently that explores that trope. It’s a visual novel, so maybe not IF strictly speaking, but I think anyone who enjoys strange and twisty games will love it.

(Both of these games were also Nebula finalists this year, by the way!)

Naca Rat’s Teahouse of the Gods is another of my COG favourites. I was really impressed by how it takes the “design your character” mechanic common in a lot of COG titles and turns it into something that genuinely impacts how the characters of the game interact with you—and vice versa. Plus, anyone who enjoyed The Bread Must Rise will appreciate its somewhat unconventional approach to romantic interests!

On the shorter front, I tend to enjoy weird Twine games rather than parser based pieces. Again, it’s probably that preference for the unusual and experimental! (Also, to be honest, I am awful at solving puzzles…)

Queers in Love at the End of the World by Anna Anthropy takes ten seconds to play but sticks with you much longer.

Zoinks! by Elizabeth Smyth is less experimental, but it’s a lot of fun.

I do enjoy Ryan Veeder’s hilarious Castle Balderstone games. They’re parser-based, but super weird, hilarious (worth saying twice), and not too difficult.

That said, I have a soft spot for great characterization as well.

Brendan Patrick Hennessy’s series of IF about Bell Parks (child detective and, eventually, grown-up detective) is charming through and through—and also often hilarious.


The Rosebush

Interview with SV Linwood

SV Linwood is an interactive fiction author, known for their award winning games, A Long Way to the Nearest Star, Dr Ludwig and the Devil, and most recently, winning Best in Show at the SpringThing, Cut the Sky.

SV Linwood is an interactive fiction author, known for their award winning games, A Long Way to the Nearest Star, Dr Ludwig and the Devil, and most recently, winning Best in Show at the SpringThing, Cut the Sky.

Let’s start with a bit of an introduction. Can you tell us a bit more about yourself and how you discovered Interactive Fiction?

Hi! I’m a software developer and amateur writer. Despite my pen name I’m actually from Italy, though I have spent quite a bit of time in English-speaking countries.

Interactive fiction was a part of my childhood, but not a very big one. Like many people, the first IF game I remember playing was Zork. I’m not old enough to have experienced Infocom’s heyday, but we had a copy on the family computer that I sometimes fiddled with—mostly just getting hopelessly lost in the forest, heralding my lifelong struggle with navigation and compass directions.

Throughout the 2000s I played IF sporadically. If I came across a game that seemed interesting I’d check it out, and I ended up playing a lot of the classics of the era, but it wasn’t something I’d actively seek out and I never really engaged with the community. (I did teach myself Inform 7 in the summer of 2009 despite having no plans to actually write a game. My reasons for doing so are a mystery to present-me.)

This all changed around the mid-2010s. Interactive fiction may not have been a big part of my childhood, but point-and-click adventure games were, especially Lucasarts games like Monkey Island and Indiana Jones and the Fate of Atlantis. So when parser-like choice games came onto the scene, capturing the spirit of point-and-click games in many ways, I sat up and began to pay attention. Around this time someone in an internet community I hang out in started posting mini-reviews of IFComp games, which inspired me to pay closer attention to the competition at first, then to other events like Spring Thing and EctoComp and to the IF community in general.

Things went from there.

So a more quiet interaction with the medium, at first. What pushed you to cross that bridge?

It was IFComp 2019. One of my favorite games that year was Agnieszka Trzaska’s Chuk and the Arena, a really fun puzzly choice game set on a spaceship that felt like a text version of a Lucasarts game. I’d had some ideas for my own take on a “rogue AI on an empty spaceship” type of story, and playing through that game I realized that that was the perfect format for it.

I didn’t really intend to do anything with the concept at first. It was a fun idea to daydream about, but I wasn’t an interactive fiction writer. I didn’t even know where to start. But I kept thinking about it, so one day I downloaded Twine and started fiddling with it.

Thirty minutes later I quit everything and deleted the application. It all just seemed too daunting. What was I thinking? I’d never make this work.

An hour later I downloaded Twine again. This time I kept at it, and I’m glad I did.

This idea would go on to become your first game: A Long Way to the Nearest Star, didn’t it? Can you tell us a bit more about how the idea grew and became the game?

I started with little more than a basic idea, the rogue AI and the PC investigating the aftermath. It was pretty easy to fit the spaceship exploration and unfolding mystery into the structure of the game—turns out there’s a reason it’s such a common premise in IF!—so once I sat down to figure out the outline I didn’t have much trouble working out where I wanted the story to go. Some puzzles and plot points got shuffled around as I worked out the details, and the scope ended up quite a bit bigger than I’d originally envisioned, but for the most part the structure of the game didn’t diverge much from my original concept.

Of course, the real heart of the game isn’t the exploration or the puzzles or the plot. I needed something to distinguish myself from the approximately three thousand games with the same premise, and I knew from the beginning that I wanted to focus on characterization. The conversation system is probably the biggest part of the game, and it was my favorite to work on. The characters quickly developed their own voices, and it was a lot of fun to just let them talk and see where the conversation went.

It’s the aspect of the game that got the most positive feedback, and it’s the one I’m the most proud of.

Was there a particular scene you liked working on the most? And inversely, something you struggled with?

There’s a bit where you can try to get the AI to comment on an empty hallway and it’ll complain about having nothing interesting to say about it and come up with a dumb limerick instead. It’s such a silly, unimportant moment, but it still makes me smile.

As for challenges, there were several puzzles that just refused to cooperate. Turning on the power in the lab is probably the biggest one. I wanted it to be a relatively important moment, but I could never quite think of a satisfying puzzle for it. It ended up being one of the last things I implemented, and I’m still not entirely happy with how the sequence plays out. But it’s serviceable enough and no one has complained about it to my knowledge, so I’ll take that as a win.

Though the biggest challenge of making the game was actually just learning CSS. I’m not a front end developer—actually having to care about how things look was a new experience for me!

You mentioned Chuk and the Arena being an inspiration for the idea. Were there other sources (game, books, movies, etc…) that made ALWttNS what it is today?

Oh, I’ve been a fan of science fiction all my life, and in particular I’ve always been interested in AI characters, so no doubt there’s a hodgepodge of media that left their mark on the game, even if I wasn’t specifically thinking about them when writing.

But of the ones I was thinking about, the biggest influence was Marathon, a series of story-driven FPS games from the 90s. Throughout the games you interact with the various characters through computer terminals, which was what inspired me to present the conversation system in a similar way. And Durandal, the main AI NPC of the series, was the main inspiration for my own. He’s a rogue AI, morally ambiguous but not quite an outright villain. There are certain elements of his backstory that the games never really spell out which I found interesting and wanted to explore.

The story ended up going in a very different direction, of course. But that was the starting point.

And of course the shadow of HAL 9000 looms large over the game, as it does with every story of this sort. I specifically took inspiration from Clarke’s novel, which goes into more detail about his situation and mindset. An AI trapped on a ship with contradicting directions and no way to communicate his distress…

Though you learned Inform back in 2009, why use Twine for this project?

I never even considered Inform when I started the project. I was a fan of parser-style choice games, so from the beginning that was the sort of game I wanted to make, and Twine was the best option for that. It’s not as if I remembered much about Inform after ten years, so it wouldn’t have made any difference anyway. And I knew that I wanted conversation to feature prominently, which is something Twine generally does better.

I did at a few points look at the unwieldy mess that was the inventory code and wonder whether it would make more sense to scrap everything and remake it in Inform, but it only took a glance at all the dialogue I’d written to make me discard that notion.

Any lessons you took from working on the interface?

Mostly that I’m bad at interfaces! That was by far the most common criticism of the game. To be honest it wasn’t something I thought too hard about, so I guess the lesson is that maybe I should do that. That’s definitely something I’ll have to figure out the next time I write a choice game with similar mechanics. But that might not be for some time.

ALWttNS, your first game, was released during the 2022 edition of the IFComp. Why go for a competition with your first project?

I was familiar enough with the IF scene to know that publishing a game outside of a competition as a complete unknown would get very little attention, and at that point I’d worked on the game too long to want to release it into the void. And competitions are a good way to get feedback. I knew by then that I wanted to write more, so that would be very valuable.

Admittedly, IFComp was an ambitious choice for my first game ever. It’s the biggest competition of the year, and the most competitive. I certainly had my doubts going in!

Partly, my decision was because IFComp was significant to me, as my introduction to the IF community and as the event that inspired me to write a game to begin with. Mostly, though, the schedule just happened to line up. I’m generally more productive during the summer due to having more free time, and that August I sat down and really worked on finishing the game. The IFComp deadline came at just the right time.

Did you have a particular goal or expectations going into the competition?

Not really. My attitude going in was “I’ll throw my hat in the ring and see what happens”. Mostly I was interested in hearing what people thought of my game. I expected to get a few encouraging but not glowing reviews and place somewhere around the middle. Maybe make the top 20 and get mentioned on the announcement stream if I was really lucky.

Which I guess is what happened!

Indeed! ALWttNS not only got to the Top 20, but reached the 3rd spot, granting you the Rising Star accolade (highest rank by a new author). It also won a couple IFDB Awards, XYZZY nominations, and appeared in the TOP 50 IF games of all time. What did you feel about the community’s response?

Overwhelmed! And incredibly grateful! It’s all been a lot to take in.

Was there a review or comment about the game that stuck with you?

There isn’t one specific review I can point to, but there were several reviewers who really liked and connected with the main NPC of the game. It’s of course always nice when people enjoy the puzzles and the gameplay, but it’s seeing people engage so much with a character I created that really makes me feel like I’ve made it.

You returned the following year, submitting to IFComp 2023 a parser game in Inform, called Dr Ludwig and the Devil. Can you tell us a bit more about the game?

Dr Ludwig started as a side project in spring 2022. At that point I’d been working on ALWttNS for a couple years and my brain had been pretty thoroughly rewired to see inspiration for interactive fiction everywhere, so I had a lot of random ideas floating about in my head. One was about a mad scientist dealing with an ineffective torch and pitchfork-wielding mob. Another was an idea for a puzzle about banishing a summoned demon.

I didn’t intend to do anything with them at first. I really needed to finish ALWttNS. But then I had a sudden burst of inspiration—what if I were to combine the two ideas? As soon as I did, the concept of the game immediately came together: a comedy about classic horror tropes and absurd legal procedures.

Once I had the idea in my head, I couldn’t just leave it.

What was your process creating DrL&D?

It was extremely disorganized. Once I had the basic mechanics down (the conversation system, the Grimoire, and giving orders to the Devil) I just worked on whatever I felt like. Characters and puzzles got added as I thought of them. Most days I’d just fiddle around with the game a bit, change a few responses, add some conversation topics, and so on. To be honest, it’s a miracle the whole thing ended up as cohesive as it did.

On one hand, the writing process being so chaotic meant that the game took maybe three times longer to develop than it should have. On the other hand, it also meant that the game wound up full of custom responses, obscure actions, and strange edge cases that I implemented just because I was procrastinating on writing a plot-important description. This is something that a lot of players enjoyed, so I guess it worked out.

Were there particular things that inspired you while working on Dr Ludwig?

The main inspirations are fairly obvious: classic horror films (Hammer, Universal, and the like) and Faust, though more the pop culture depictions than the original sources themselves. In writing the setting I took inspiration from the approach taken by many classic point-and-click adventures—a somewhat self aware theme-park version of a common pop culture setting filled with anachronisms and genre tropes. It’s the sort of thing that can feel corny, but it felt right for the project.

One of the main puzzles of the game, collecting the ingredients for the demonic ink, is of course straight out of Monkey Island. The whole gameplay loop of collecting objects by interpreting a list of instructions in creative ways was a great fit for a game about weaseling out of the terms of a contract. I left out the follow up where you have to collect all the ingredients again while getting even more creative, though.

Was there a scene/character/action that you enjoyed most? Or something that you had trouble putting together?

The answer to both questions is the same: the Devil, and specifically giving him orders. Persuasion mechanics occasionally pop up in parser games, and I always struggle with them. With a few exceptions (e.g. the mouse in Curses, which is limited to cardinal directions), I always find them difficult to work with, often with not enough clueing or implementation. Obviously I wanted to avoid this. I wanted the mechanic to be fun to play and experiment with.

Getting it all to work was such a challenge. I needed to have it give useful failure messages, which Inform doesn’t do by default (shout out to Nathanael Nerode, whose extensions were very handy for figuring out how to do this). I needed to account for pretty much every action in the parser and several others that an inventive player might try. The Devil being confined to the summoning circle meant that many actions could be blocked, but I still needed to catch every possible attempt and make sure the game gave sensible responses, whether failed attempts or refusals. And there were tons of cases that needed special handling. For example, I had to implement special code to give messages like “The Devil looks at his robe” instead of “The Devil looks at the Devil’s robe”. And did you know that when making the Devil SAY a phrase the game will attempt to format it so that the capitalization and punctuation makes sense? It’s the sort of thing that no one pays any attention to but will feel off if it’s not done. It was all so much work!

But, man, was it satisfying when it all came together. And it was even more satisfying to see players try strange actions and have the game accept them.

Compared with your previous IFComp participation, did you have a particular goal this time around?

Nothing concrete. I didn’t think I’d place as high as the previous year, so I didn’t go in with too many expectations. I figured I could strike “do well in IFComp” off the bucket list and not worry too much about how I’d place. I was just hoping people would enjoy my game. Comedy is scary to write—trying and failing to be funny is a pretty embarrassing experience. As long as I could make someone laugh, I’d count it as a success.

I really underestimated the power of writing a comedic parser puzzle game, I guess!

DrL&D was quite the success that year, reaching 1st place and getting Miss Congeniality at the IFComp, as well as Outstanding Game of the Year and Outstanding Humour at the IFDB Awards. How did you feel about that?

To be fair, it only tied for Game of the Year! (With Drew Cook’s Repeat the Ending, which is an honor in itself.) But yes, the game ended up getting way more attention than I expected. It’s been… a lot.

IFComp 2023 was an interesting time for me. A little less than a month before the beginning of the competition I was diagnosed with cancer, which is the sort of thing that tends to overshadow pretty much everything else in your life. So IFComp was pretty far down my list of priorities, but it was also more or less the one good thing going on in my life. It made for an interesting mix of emotions.

I watched the announcement stream having just come home from the hospital after an operation. Part of me was hoping I wouldn’t even make the Top 20, because Jacqueline had asked us to prepare something to say in the chat and I—hopefully understandably—hadn’t done that. The moment second place got announced and I realized I’d won the world seemed to stop.

I didn’t know what the future would look like, but in the meantime, man, what an achievement.

I’m sure that Dr Ludwig will go the way of some other IFComp winners before it—get its moment in the sun then quietly fade from the minds of the community. But it helped me during a difficult time, and that means a lot to me. I’m incredibly grateful to everyone who played and liked this silly game I made.

(Everything turned out fine. It wasn’t a very scary type of cancer.)

That is an incredible achievement, indeed! Dr Ludwig was a really well-rounded game that deserved its flowers (and more!).

Personally speaking, Dr Ludwig has been standing in my favourite IF games list since I played it – and I wouldn’t be surprised if it continued to appear in the next IF TOP 50 of All Time. Speaking of favourite games, is there a title that landed in your personal favourites as soon as you played it?

Oh, a lot! But the first that comes to mind is Superluminal Vagrant Twin, which is a game that I imagine was created in a lab to appeal to me specifically. The limited parser, the space exploration, the weird worldbuilding are all very much my jam.

You recently returned with another comp-winning entry, Cut the Sky, submitted to the 2025 SpringThing. Can you tell us a bit more about the game?

Cut the Sky is a parser game about solving all your problems with a sword, inspired by classic science fiction/fantasy literature and specifically the Dying Earth subgenre (plus a smattering of anime swordplay). I’d taken a break from writing for about a year, but IFComp 2024 inspired me to start again. I wanted a smaller project to work on, and a limited parser game fit the bill. After the chaos that was writing Dr Ludwig, it was very cathartic to be able to tell the player, “These verbs are all you’re getting, deal with it.”

Why the verb CUT in particular?

It felt right. It’s an inherently destructive verb. Action games are always fun, but at the end of the day what does it mean to be someone whose main mode of interacting with the world is through violence? The tension between the verb and the connection with the world and with other characters is at the heart of the game.

That and cutting absurd things is always fun.

What inspired you to create Cut the Sky?

The initial spark of inspiration came from watching Castle of Cagliostro—one of the characters is a samurai with an unbreakable sword—but the end result doesn’t have much in common with it. Mostly the game is inspired by the Dying Earth subgenre in general and Jack Vance’s work in particular. I’ve wanted to play with that sort of setting for a long time. There’s something compelling about the melancholy of a world living in the shadow of its past.

(And of course shout out to C.E.J. Pacian’s Gun Mute, which wasn’t a conscious inspiration but certainly was a subconscious one.)

Unlike your previous creations, Cut the Sky utilises a chapter format, with different characters. What led you to move away from a singular storyline?

Once I had the basic concept and was brainstorming what the game would actually look like, I was coming up with a lot of disconnected scenarios that weren’t really complex enough to stand on their own. Rather than pick one and flesh it out or try to mash them together, neither of which I think would have worked very well, I decided to separate the game into various episodes and came up with an overarching plot. It’s not a very common structure in parser games, but the setting I wanted to write required more breadth than the typical parser game’s constrained map would allow. (Also I don’t like compass directions and will jump at any chance not to use them.)

The game being composed of multiple chapters, is there one that you are the most fond of? one that you feel most proud of? and one that was particularly challenging?

The scene in the city is probably the one I’m most proud of. It’s the most complex chapter in the game (which to be fair isn’t saying much), with several characters, lots of objects, and multiple puzzle solutions. It was very satisfying to put together, and I’m quite fond of the end result. I’m also fond of the wizard chapter, which was a lot of fun to write, and of the riddle, which got some funny reactions in the transcripts.

The most difficult scene to write was definitely the tower. It’s the build up to the climax, and I wanted it to be challenging enough to feel like a culmination but with enough momentum to keep the player moving forward without getting stuck, which is a tough balance to strike. I’m not super happy with how it turned out, but I guess it works well enough.

It did indeed work well enough, as you went on to get Best in Show at the Spring Thing! Did you expect such positive reactions to your entry?

To be honest, by the time the deadline came around I was so sick of looking at the game that I wasn’t really thinking about the reaction at all. I just wanted to kick it out the door and be done with it. Then a couple days into Spring Thing I looked at the IFDB page, saw that it already had seven ratings, most of which were five stars, and I realized it was going to be fine.

What prompted you to submit to the Spring Thing rather than the IFComp, like your other games?

Timing, mainly. I started writing the game at the end of 2024 and finished at just the right time. But I also wanted a change of pace after IFComp, and Spring Thing seemed fun.

How did you experience Spring Thing as an author? Was it different from the IFComp?

It didn’t feel all that different to me. Sure, the details changed—Spring Thing is generally more chill, with the ribbons instead of ranked placements—but at the end of the day the experience boiled down to releasing a game, fretting about it until the reviews started coming in, and playing everyone else’s games in the meantime.

Are there other events you’d be interested in participating in?

I’d like to do EctoComp someday—I haven’t written a lot of horror and I’d like to fix that. And every year I have fun going through the smaller competitions and jams. I haven’t participated yet, but maybe inspiration will strike one day. I love the amount of events being organized in the community these days. I know you’re one of the people behind that, so thank you!

You’ve worked with two very different engines to create games, Twine and Inform. How has the transition from one to the other been going? Any advice for authors thinking of going from one format to the other?

Pretty smoothly, all things considered. They’re very different languages, and of course writing a parser game takes a different mindset than than writing a choice game, even a more parser-like one, but once you have a bit of programming experience picking up a new language isn’t too complicated, and I’ve played enough parser games that I had a good idea of what I wanted to do and how I wanted to do it. Inform’s natural language syntax is unlike anything I’ve ever worked with, but it was interesting to try something new.

And it’s nice not to have to care about CSS, too!

My advice is that if you’ve ever been tempted to try out a new engine and you have the time then just go for it. Learning a new language is a good exercise, and it’s always good to see more writers cross the parser/choice divide. We’ve seen several authors do that in the past years, and it’s been to the benefit of both formats.

Are there other engines you’d be interested in trying out?

I do sometimes wistfully look at TADS. There are a lot of really cool things you can do in it. (And as much as I enjoy Inform, the first time I opened up the TADS documentation and saw curly braces and equal signs my reaction was, “Finally, something normal!”) I also have a couple vague ideas that could probably work in ChoiceScript or Ink. We’ll see!

If you could give general advice to a starting IF creator, what would it be?

Man, I feel kind of unqualified to give advice. I’m still figuring things out myself! I really just got here by luck—I had experience in relevant fields, and the games I wanted to write happened to be the sort that do well in competitions. And “spend years beforehand writing and coding” or “just write a comedic parser puzzle game” isn’t very good advice!

I think my advice would be simply to play a lot of IF, which like “writers should read a lot” is the sort of thing that’s incredibly obvious but does sometimes need to be said. And not just the sort of IF you want to make—parser, choice, puzzly games, Choice of Games-style narratives… There are a lot of lessons to be found in many different genres, and now that we’ve mostly stopped tearing each other apart over parser vs choice there’s no reason to keep them separated in their little enclosures.

Any plans for future projects?

Nothing concrete for now. I’ve got several vaguely formed ideas rattling about my head (including some for a sequel tentatively called Dr Ludwig and the Vampire). I’m not a very diligent writer, so who knows when any of them will materialize. Hopefully sooner rather than later!

Sunday, 20. July 2025

Renga in Blue

On the Way to the Interview (1983)

The people involved with today’s game are Nick Hampshire and Carl Graham, both who have important parts to play in the history of technology. Nick Hampshire’s early college experiences (1970-1975) bounced around a bit as he went from Zoology to Computer Science and moved between college studies in England, Sweden, and the United States. He […]

The people involved with today’s game are Nick Hampshire and Carl Graham, both who have important parts to play in the history of technology.

Nick Hampshire’s early college experiences (1970-1975) bounced around a bit as he went from Zoology to Computer Science and moved between college studies in England, Sweden, and the United States. He followed this with some technology work in San Francisco; using the S-100 bus (the backbone of the Altair and many other early computers) he made his own 8-bit computer he called the System 8, then went back to the UK to try to sell it in 1977.

From Personal Computer World, August 1978.

In order to promote his new system (and other S-100 bus systems he became a dealer of), he made his own magazine he called Computabits. This ended up determining his life trajectory as the System 8 completely failed (I can’t even find it even mentioned in any of the usual “museum of obscure computers” sites) but Computabits as a magazine did quite well for itself, being swept into the early magazine Practical Computing as a “magazine within a magazine” starting in its second issue; Hampshire was later listed as “technical editor” and was set on his career as a writer. He ended up writing 9 books between 1979 and 1984, some being (relative to the market) best-sellers; Vic Revealed made it to 400,000 copies worldwide.

ASIDE: Of his early Computabits articles, the most relevant for today is one he wrote on “epic games” where he discusses textual compression techniques (similar to those Infocom and Level 9 would come up with) like using single characters to represent whole words. He also theorizes about extending the “epic game” into an “electronic novel” where “no longer does the reader identify himself with the hero — he or she is now the hero.” Jack Pick read the article and inquired for further help on text compression, trying to apply this to his mainframe game Adventure II. (Also, keep in mind that February 1979 issue, as we’ll come back to it for something else later.)

Mr. Hampshire still tried his hand at hardware for the Commodore PET, but really had more success with his publishing ventures, including the launch of Commodore Computing International in 1982.

One of the employees throughout 1982-1985 was Carl Graham, listed as a “programmer”; he was a “staff writer” in the sense of being focused on writing type-in code for Commodore BASIC to be printed in each issue. Carl Graham himself was also quite hardware-minded, with earlier projects starting in the 70s including rewiring a Texas Instruments calculator in to be a digital timer (“looking at thin films of water breaking up into beads on glass using photo sensors to measure propagation speed”), making a Z80 assembler in BASIC, and and making his own plotter for his TRS-80.

Today’s game, On the Way to the Interview, is a type-in starting on page 14 of the magazine above where the article (not game) title is Anatomy of an Adventure, another one of the articles allegedly teaching how to make an adventure game. This sometimes is an excuse for a sub-par adventure game. This one is just … unusual.

It is written in Commodore BASIC and supports the line in general (PET, VIC-20, C64), although I ended up playing the BBC Micro port in the Nick Hampshire-edited book BBC Programs Volume 1.

Via the Centre for Computing History. I’m unclear if Hampshire did the conversion himself.

Your goal: make your way through streets to your scheduled interview at Slave Driver International. Your starting inventory: a CHEQUE, presumably from your last job. Perhaps winning is losing in this game.

The graphics shown are an automap. The reason the game can do this is the entire thing is oriented on a grid.

Even more unusually, the way the game’s data is stored is by roads. That is, each road is listed and the elements of that road are listed in sequence, but from the player’s perspective a road is a whole sequence of rooms.

There are nearly no puzzles. If Pythonesque and Mad Martha are British degenerate games (where one goes about an urban environment causing havoc) this is an anti-degenerate game. The goal is to be a “responsible citizen”. The route — starting at 24 on the map, winding over to the northeast — consists mainly of things you need to ignore, lest you throw off this title. For example, early on there is a shopping bag you pass by, and it will kill you.

The game keeps track of minutes passing in real time. You need to make it to the interview in less than 7 minutes. With this screenshot, I had left the emulator running overnight.

Later there is a TRAMP. Simply talking to the tramp (ASK TRAMP) ends the game. (“I’ve just had a bad experience with a tramp.”)

Just a bit farther is a GUN, which has all sorts of game-ending possibilities. First off, you can simply try backtracking and shooting the tramp, but it doesn’t even let you operate the gun (“I’m not having anything to do with shooting things.”)

There’s a policewoman later that will arrest you if you’re holding the gun in the open. You can just have the gun randomly go off while holding it. There’s a bank along the way where if you step in with a gun they’ll think you’re doing an armed robbery.

The right thing to do in the bank is, responsibly, CASH CHEQUE (yet another “isolate” verb I haven’t seen yet, but I had my eye on the source code by now in my playthrough for reasons I’ll get into). This gives you MONEY, and lets you later pass through a private park.

Once through the park, it’s a straight shot to the interview, making a beeline for the northeast corner of the map.

Ending, with an exit to the operating system. You don’t even find out the result.

Here’s the full route, with the side trip to the bank marked in green:

Again, this is a “learning game” so there’s some latitude for simplicity, and the article actually does try to make the layout of the source code crystal clear. It’s still a very curious model given that most action besides movement is bad, really, and how many adventure games are on grids like this? (Very, very, few. Even Asylum and friends use “razor walls” as opposed to having a grid with blocks filled in, also known as “worm tunnels”. The only other example we’ve had here is the unfinished/unpublished game Castle Fantasy.)

I still haven’t gotten yet into the worst part of the game. Every once in a while, at random, you get run over by a bus.

It doesn’t matter if you are on a road, in a park, or in a police station: the bus will come. There is absolutely nothing you can do about the bus. This is essentially a slot machine game. Perhaps the RNG on Commodore is better, but on the BBC Micro version, I could not beat the game: I consistently got run over before reaching the park. I had to cheat by changing the source code and modifying my starting location. This admittedly enhances the feeling of being hapless (as opposed to Fighting the Machine) but is a deeply odd choice to make for a learning game.

We’ll see both authors again in 1984, as there was adventure custom-written for the BBC book (one that looks on the face of it slightly more traditional, but I know never to trust Britgames to stick to normal). As that will take some time to reach, I should mention both had distinguished careers after; Hampshire kept writing books and doing journalism, as he “contributed to magazines such as Personal Computer World, PC Magazine, Byte, Interface Age, as well as newspapers such as the Times, FT, Telegraph, and Mail”. While Graham left games for a while (making database software from 85-90) he eventually picked up a job at Argonaut.

Carl Graham, left, Pete Warner, right. Source.

You may know them better as the makers of the FX Chip for Super Nintendo games; Graham was a coder on the original Star Fox and has a long list of credits after.

Regarding the unusual grid, I do have one suspicion where it might come from. I said I would come back to the February 1979 issue of Practical Computing. Earlier in the same magazine there is an article by T. J. Radford which doesn’t present a full game, just an “idea” which spans two pages (early computer magazines sometimes had this, I assume they had trouble filling space). It involves creating a D&D-type map as part of the theorizing:

Long shot, I know, but it gives me the same crossword-grid-like feel, and I wonder if Hampshire internalized it as a possible way to make an adventure game map.

Coming up: The somewhat-related but much more substantial escape-from-British-suburbia game, Urban Upstart.

Saturday, 19. July 2025

My So Called Interactive Fiction Life

LA LA LA Testing Testing

In a previous post I got a little carried away with all the great testing results, but that ran into an expected wall.Unit and integration tests are meant to validate your architecture and code and expose gaps. Well we discovered a few gaps and it took us a minute

In a previous post I got a little carried away with all the great testing results, but that ran into an expected wall.

Unit and integration tests are meant to validate your architecture and code and expose gaps. Well we discovered a few gaps and it took us a minute to refactor the parser, language, and then the text service, which included adding a new package 'if-services'.

With all of that settled, we're back to testing.

We had to run back through core, world-model, lang-en-us, and if-domain before continuing on to stdlib which has all of the action handlers.

And I had forgotten we had only started testing stdlib and basically needed to start over with a new testing template. Then Claude quietly implemented the wrong test pattern for the actions and we had to redo every set of tests for every action. Then we found remnants of the bad testing and to go through everything a third time and this led to some actual design issues, which are now resolved.

The main issue was we have RoomTrait, ActorTrait, and ContainerTrait. Do we create a dependency that RoomTrait always also auto-adds ContainerTrait?

No. We're just forcing the assumption that RoomTrait and ActorTrait are automatically containers without the ContainerTrait.

I love it when we get into design issues. That's the fun part of all of this.

Friday, 18. July 2025

Zarf Updates

My Worldcon schedule

I'm going to the World Science Fiction Convention in Seattle! And speaking! It's the first Worldcon I've attended since 2009 (Montreal). After the Hadean Lands kickstarter, I figured I should spend my travel budget on game dev conferences rather ...

I'm going to the World Science Fiction Convention in Seattle! And speaking!

It's the first Worldcon I've attended since 2009 (Montreal). After the Hadean Lands kickstarter, I figured I should spend my travel budget on game dev conferences rather than science fiction conferences. I missed Worldcon, but GDC was better biz networking.

But hey, in this futuristic era of 2025, we can have both! Worldcon has a solid track of videogame programming now, and yers truly will be on it.


The Indie Video Game Scene

  • Wed Aug 13  •  6:00–7:00 pm  •  Room 420
  • Justin Bortnick (M), Andrew Plotkin, Martin Klima, Sam Stark, Vivian Abraham

Independent studios are creating some amazing works of fiction and adventure using the medium of video games. What makes a studio “indie”, and what are some of the stand-out titles that fandom can sink their teeth into?

Best Game or Interactive Work Hugo Potentials

  • Thu Aug 14  •  10:30–11:30 am  •  Room 423
  • Eleri Hamilton (M), Andrew Plotkin, Erica L Frank, Justin Bortnick, Remy Siu

The “best game or” Hugo Award is pretty new, and unlike stories and TV shows, there’s not a long, well-documented history of discussion of games in literary sci-fi communities. We’ll discuss what makes something a good “best game” nominee and review some of the games of 2024 that might make your nomination list for next year in Los Angeles.

Interactive Fiction: Video Game Storytellers

  • Sat Aug 16  •  12:00–1:00 pm  •  Room 420
  • Justin Bortnick (M), Andrew Plotkin, Langley Hyde, Stephen Granade, Tina Connolly

Interactive Fiction (or IF) is narrative storytelling through computer text adventures, where players navigate the story, influence the scene, and converse with characters using text commands. With its origins in classic Infocom games like Zork and Planetfall, the IF community is alive and well today, creating adventures that have even been called “Game of the Year” by Time Magazine.

As you see, I will be joined by Justin Bortnick, IFTF president and NarraScope co-conspirator. Also Stephen Granade, who you know from IF history but he's also been doing science programming at DragonCon forever. And Eleri Hamilton, who's been on-and-off involved with Mysterium for just as long. (And is the programming lead for Worldcon's gaming track! Thanks to Eleri for inviting Justin and me to participate in the first place.)

And other people, just as cool, some of whom I've even met.

Of course I'm interested in the whole con, not just the videogame track. I'll be running around the whole week, attending panels and science talks and browsing the used-book tables and chatting with people. Say hi! It'll be awkward but I promise we'll get through it. I'll be wearing the green hyperspace jacket.


To address the inevitable question: yes, there was a kerfuffle about the use of AI tools in program participant selection. I wrote about this back in May. At that point, I was already registered for Worldcon as an attendee and a potential speaker. You can read the Worldcon admins' statement on the subject, which is the most recent update as far as I know.

Anyhow, I haven't changed my position, which is that (a) this is an emotionally charged subject, but (b) not very important in the grand scheme of how Worldcon is run, and (c) Worldcon is a lot of fun so I want to go and be on panels and stuff. So there we are.

Also I have to finish a couple more books before the Hugo voting deadline. And games! I can play through Caves of Qud real fast before next Wednesday, right?


Interactive Fiction – The Digital Antiquarian

The Year of Peak Might and Magic

This article tells part of the story of New World Computing. Some passions are lifelong, but many others fade away over the course of a life, to be replaced by others. Not long after Jon Van Caneghem, the founder of New World Computing, sold his company to 3DO, it started to become obvious to everyone […]


This article tells part of the story of New World Computing.


Some passions are lifelong, but many others fade away over the course of a life, to be replaced by others. Not long after Jon Van Caneghem, the founder of New World Computing, sold his company to 3DO, it started to become obvious to everyone who worked for him that the torch he carried for computer games no longer burned as brightly as it once had. A younger version of Van Caneghem had spent almost three years designing and programming Might and Magic I, the CRPG that introduced New World to our world, virtually all by himself. Now, he was coming into the office just two or three times a week, leaving even on most of the days when he did make an appearance by shortly after lunchtime. His all-dominating current passion, it was becoming clear, was racing sports cars on tracks all over California and beyond. His colleagues sensed that, in his mind, he had already created his magnum-opus CRPG with Might and Magic IV and V, two big games that could be combined into one to form The World of Xeen, an absolutely massive one. Meanwhile he had poured all of his best strategy ideas into The King’s Bounty and Heroes of Might and Magic. He was ready to take two steps back from the day-to-day at New World, to become a part-time designator emeritus and spend the rest of his time driving his cars.

In due course, Van Caneghem’s disengagement would become a problem for the company, arguably even one of the direct causes of its downfall shortly after the millennium. Right now, though, at the end of the 1990s, there was still sufficient momentum to keep things gliding along reasonably well. In fact, 1999 would become New World’s best year of all in purely commercial terms, being the first with major new releases in both the Heroes of Might and Magic and Might and Magic franchises.


A sequel to a game as successful as 1996’s Heroes of Might and Magic II seemed like a no-brainer by industry logic. And yet New World was oddly nervous about spending too much money on it. For the Heroes games were turn-based experiences with hand-drawn pixel art, in an era when real-time 3D was more and more the rage. Accordingly, Heroes III was handled cautiously, allocated only a limited budget and window of time to come to fruition.

Production began in September of 1997, with the hiring of two key figures. David Mullich, who was to be director and project leader, was a grizzled games-industry journeyman whom we’ve met twice before in the course of these histories, at widely separated intervals: once for his highly experimental 1980 game The Prisoner, an enduring icon of the early Apple II scene, and once for I Have No Mouth, and I Must Scream, the equally uncompromising point-and-click adventure game he made in 1995 with the visionary and infamously irascible science-fiction writer Harlan Ellison. Both of these projects lived well out on the artsy end of a career that also encompassed plenty of less challenging, more straightforward fare. Needless to say, Heroes III would belong more to the latter category than the former. For neither of Jon Van Caneghem’s signature franchises had ever set out to touch hearts and minds in any profound way, just to show their players a good time.

Whereas Mullich had been in the games industry almost since before said industry had existed, the man selected as Van Caneghem’s “co-designer” on Heroes III — in reality, this meant that he was a lead designer subject to his largely absentee boss’s veto power — was a rank beginner. Greg Fulton had never shipped a game before; relatively short stints at Activision and the interactive division of Steven Spielberg’s DreamWorks had culminated only in cancellations, as the industry navigated the shrinking market for multimedia-heavy adventure games and the growing one for 3D-modelled action. Nevertheless, Van Caneghem saw something — perhaps something of his own younger self? — in the games-addled, absurdly enthusiastic twenty-something who turned up for an interview with a notebook full of ideas for where to take the Heroes franchise after the departure of Phil Steinmeyer, Van Caneghem’s previous co-designer. Against all the odds, the kid got the job.

Fulton’s brief was most emphatically not to reinvent a wheel that was still rolling along perfectly well. He was rather to take the game that Jon Van Caneghem had originally designed under the name of The King’s Bounty back in 1990, then expanded upon twice with the help of Steinmeyer to create Heroes I and II, and expand upon it yet one more time by adding more monsters, more treasure, more factions, and whatever else seemed advisable without mucking up the rather brilliant core design. On his side, he fully understood what was expected of him.

We had to use the existing Heroes II engine within a tight window of time.  On top of this, we had a passionate fan base who absolutely loved Heroes II, and, for its sequel, didn’t necessarily want a radical departure.  I could not play fast and loose with the design of Heroes of Might and Magic III.  I needed design evolution, not design revolution.  Thus, my overarching guideline for Heroes III became, “If it isn’t in the spirit of Heroes of Might and Magic… kill it.”

So, over the course of seventeen months, Heroes II was transformed into Heroes of Might and Magic III: The Restoration of Erathia. The graphics resolution was bumped up from 640 X 480 to 800 X 600, and the game was given a moodier, more realistic, less cartoon-like look to suit changing aesthetic fashions. The space where tactical combat took place was made about twice as large to allow more room for maneuvering. Scenario designers were given the option of adding an underground level to their overland maps. Two new playable factions were added to the six of Heroes II, and more buildings were made available to construct in each faction’s towns. Each faction got a new unit type as well, and all units instead of just a select few were made upgradable. The heroes who led the armies were allowed to bring up to seven rather than five different types of units with them. More CRPG elements were added to the game, with each hero being given one innate special ability and a wider range of secondary skills to learn. The magic system was expanded, with the spells at the player’s command now divided into separate, elemental schools that magic-oriented heroes had to learn separately.

Half a dozen campaigns were created in lieu of the single one — playable from either side — of Heroes I and II. Not only were these campaigns given more fully fleshed-out story lines — the one that gave the game its subtitle followed directly on from the story of Might and Magic VI — but the individual scenarios that comprised them were given more continuity by allowing players to bring heroes and equipment with them from scenario to scenario. And for those who preferred to play with or against other humans, the networked multi-player mode was given an extra coat of spit and polish.

In short, Heroes III became a case study in smart, evolutionary game design, elaborating on those aspects of its predecessor that seemed to need elaboration — or at least that seemed tolerant of it — whilst leaving the core systems that already worked so well as they were. The overriding intention was that Heroes III should be perfectly comprehensible to any Heroes II player from the moment she fired up her first scenario. This fourth iteration on the same basic design was to be the last word on it.


Queen Catherine, the star of the lead Heroes III campaign, appears in the opening movie dressed in a brassiere, chainmail thong, and high heels. She looks more like a pole dancer at a fetish club than a noble queen and warrior.

Thankfully, the rest of the game tones down the horny-adolescent clichés. Veterans of previous Heroes games will feel right at home right away in this interface.

A town waiting to be developed. Certain design choices, such as the addition of trading posts as cheap buildings everywhere, have made gold and other resources easier to come by in the early game, which makes the scenarios play somewhat faster.

Tactical combat now takes place in a space with four times the quantity of hexes. As a result, most melee attackers can no longer reach ranged attackers on the first turn, altering the balance of power among the units considerably.

Beginning a new campaign. A lot of effort has been put in to make the campaigns feel less like a string of standalone scenarios and more like a seamless whole. (Alas, the benefits are kind of lost on me. I’m usually a story guy, who goes right for the single-player campaigns. Yet I’ve never been able to work up much interest in Heroes campaigns, having my best fun with single scenarios — especially multi-player ones. Go figure. Maybe it’s just down to Heroes of Might and Magic being among the few games that my wife really wants to play with me instead of just commenting from the sidelines — itself a testament to their broad-based appeal.)

Every Heroes of Might and Magic game made by New World sports an exceptional orchestral soundtrack. Heroes III may have been the first game ever to utilize a newfangled audio-compression format known as MP3, which would ignite an international furor when the Napster MP3-sharing service made its debut later in 1999.


David Mullich and Greg Fulton thoroughly succeeded in their brief by most reasonable standards. Today, Heroes of Might and Magic III is widely regarded as the entry from the franchise to get.

Contrarian that I am, though, I do find that I want to push back against that idea just a little bit. At the end of the day, I actually think that I slightly prefer Heroes II. Part of my preference comes down to raw aesthetics. I like the more cartoon-like, cheerfully goofy graphics of Heroes II better than the more conventionally “gamer dark” visuals of Heroes III; I’ll take Heroes II’s Count Chocula vampires, who unleash a theatrical Bluhhh! every time they attack, over Heroes III’s Nosferatu grotesques any day. I was amused in a “how different people are” sort of way when I read one of Greg Fulton’s recollections about the Heroes III project, saying that he and David Mullich considered “fixing the artwork” to be their most important priority going in, behind only the all-encompassing one of “don’t screw a good thing up.” If you ask me, the fun and frothy Heroes II art has aged ironically better than that of Heroes III. In any of its incarnations, Heroes of Might and Magic is a game to be enjoyed, but never one to be taken too seriously.

Then, too, those of you who’ve been around here a while will know that I tend to be skeptical of strategy-game sequels that simply add more stuff. Mind you, I don’t think that any of the additions to Heroes III ruins the experience; their saving grace is that they tend to add variety rather than turn-to-turn complexity. Fulton was wise enough not to do away with the limit of eight active heroes per player. Presumably a result of technical limitations in the earlier games, it ensures that Heroes III plays snappily, never getting bogged down with dozens of armies in the way that any veteran of late-stage Civilization II or Alpha Centauri will all too readily recognize.

I do think, however, that Heroes III pushes right up the edge of diminishing returns in other areas. The new faction ordering, for example, destroys the lovely symmetry of the two good, two neutral, and two evil factions in Heroes II. Even after playing the game for many hours, I still can’t really keep the Heroes III factions straight in my head. I don’t have that problem with Heroes II.

Still, there is context to these judgments — and I mean that unusually literally in this case. If there’s one thing I’ve learned over the years I’ve been writing these histories, it’s how well-nigh impossible it is to separate our judgments of games from the times and places in which we encounter them. The beginning of my time with Heroes II corresponded with the height of the pandemic, when I didn’t have a whole lot else to do but write, play games, and go for long walks. Then I played it a lot more while I was working on my “Web Around the World” series, which left me with no big pressure to play other games for a good six months. I have fond memories of sitting on the terrace in weather fair and foul, talking with the neighbors from time to time over the hedge, and otherwise just happily playing away. Then my wife discovered that she liked the game a lot as well, and we started playing it together. All told, I’m sure that I put more hours into Heroes II than I have into any other game since I started this website.

Heroes III was not like that; it was just another game to have a look at, in a different, more distracted context. I still put quite some hours into it, more than I could strictly justify in the name of “research.” And almost all of those hours were once again spent in multi-player mode with my wife. We greatly appreciated the smoother networked play of Heroes III, as well as the abundance of cooperative multiplayer scenarios. (We much prefer to play that way rather than trying to kill one another.) But I didn’t feel the urge or the compulsion to play every scenario, as I had with Heroes II. There was a slight twinge of been-there, done-that for us both even when we were having fun.

All of which is to say that you shouldn’t take my word as gospel truth here, any more than you should for any game I write about. If I’d come to Heroes III first, and/or in a different time, I might very well be expressing a different opinion right now.

Even as it is, I cannot deny that Heroes of Might and Magic III is an immensely satisfying game in its own right, one which I feel no hesitation over inducting into my personal hall of fame. I still want to tell you that the best way to enjoy the series is to start at the beginning with the rather rudimentary but charming Heroes I — or perhaps even The King’s Bounty if you want to be really thorough about it — and make your way forward from there. But I do understand as well that life is short, time is limited, and not everyone is a digital antiquarian who can justify any portion of his playing time in the name of research. Heroes III is a perfectly fine place to jump in as well.

Released in February of 1999, Heroes of Might and Magic III was a solid early seller in its homeland, but not a massive, chart-busting one. It would prove more of a marathon runner than a sprinter. Aided by two expansion packs that added yet more campaigns, scenarios, monsters, treasures, and other goodies, along with one more faction to play and even a random map generator for those who had plowed through all of the set-piece content, it sold steadily for years on end, defying the conventional wisdom that turn-based, pixel-graphics games were a hopeless proposition in the marketplace. 3DO aided its cause greatly by investing in widespread language localization and making sure with the aid of various partners that Heroes III was readily available in shops all over the world.

It proved especially popular in Russia, where, unusually for a turn-based game, it even found a place in e-sports leagues. For decades now, people have been asking themselves just what is behind the special love that Heroes III sparked in the hearts of Russians. A possible answer might begin by noting that the traditional high-fantasy tropes that were always New World’s stock-in-trade seemed fresher in the lands that had been walled off behind the Iron Curtain than they did elsewhere, and might conclude by noting that Heroes III’s modest system requirements — no fancy 3D card required! — gave it a leg-up in countries where the average personal computer was not so powerful as in the richer West. Between these two data points lies a no man’s land of rank speculation. But for whatever combination of reasons, if you go to any online Heroes III scenario archive today, you’ll still find that a crazy percentage of the maps bear names written in Cyrillic. In a time of increasing global discord such as our own, it’s nice to be reminded that the sort of good, clean fun promised by Heroes remains universal.

I don’t believe that credible hard sales figures have ever emerged for any of New World’s games. But based on circumstantial evidence alone, I wouldn’t be at all surprised to learn that this one sold 2 million or even 3 million units before all was said and done. It most assuredly has to be the most successful single game New World ever made, as well as the most successful ever published by 3DO. (Granted, the latter is not a particularly high bar to clear…) When we consider the modest amount of money that was put into making Heroes III, we have a return on investment to die for, regardless of whether we calculate the bottom line in dollars and cents or hours of fun delivered.


Might and Magic VII: For Blood and Honor would prove less enduringly iconic than the third installment from its spinoff franchise, but it was a rock-solid effort in its own right. Bryan Farina and Paul Rattner, the principal designers of the previous game in the CRPG series, were joined this time by one James W. Dickinson. Might and Magic VII shipped in June of 1999, just thirteen months after Might and Magic VI and three months after Heroes III. On a schedule like that, there was no time for technological or philosophical reinvention — and, indeed, Might and Magic VII is even more of a strictly evolutionary step than Heroes III. It uses the same engine as its predecessor, with only a few minor tweaks here and there. Nevertheless, it’s a slightly better game than Might and Magic VI in my opinion, retaining most of the latter’s gonzo charm whilst feeling more manageable and self-consciously designed, as opposed to grown organically in some sort of nerdy laboratory of excess.

By now, it had become standard practice at New World to integrate the plots of the CRPGs and the strategy branches of the Might and Magic family tree. So, the story of Might and Magic VII follows on from that of the headline campaign of Heroes III, taking place on the same newly discovered continent of Erathia. Most of the old gang is back together again, including Queen Catherine, the star of Heroes III, and the dastardly Archibald, the villain you already defeated once in Heroes II. I’d tell you more about the story, but, honestly, if you’re playing a Might and Magic game for the plot, you’re doing it wrong.

That said, there are a few more nods here toward giving you some agency over the narrative beyond deciding where to go and kill monsters next; New World may have felt a sense of obligation to at least gesture in that direction after seeing the groundbreaking Interplay CRPGs Fallout and Baldur’s Gate. You’re forced to make a moral choice about whether to join the forces of light or darkness about one-half to two-thirds of the way through Might and Magic VII. Even so, a single hard branch like this is pretty weak sauce compared to the choices and consequences that are woven throughout a CRPG like FalloutMight and Magic VII remains a fundamentally different type of game. And I for one wouldn’t have it any other way.

Where Might and Magic has always excelled is in giving you a giant, generous, unabashedly silly, blatantly artificial sandbox of a world to go forth and explore, exploit, and exterminate. The seventh game justifies its existence by giving you an even broader swath of fun stuff to do in the sandbox than its predecessor. You get a home base this time, a castle that you get to renovate step by step as you earn social credit from your adventures. Meanwhile the addition of an Invisibility spell opens up the possibility of sneaking your way through some areas instead of falling back on the standard approach of methodical monster genocide; Thief this game is not, but skulking about in a demon town whose inhabitants would reduce your party to a handful of smoking cinders in about half a second if they could only see them is not without its thrills.

Perhaps best of all — definitely so if you ask my wife — is a new card game called Arcomage, obviously inspired by Magic: The Gathering, that you can play in any and all of Erathia’s taverns; there’s even a quest that demands that you win a round of Arcomage in every single watering hole. I played Might and Magic VII on our living-room television, while my wife did her embroidery and mocked my ineptness and the game’s abject nerdiness — business as usual in our house over most of the seventeen years we’ve been married, in other words. But as soon as she saw Arcomage, she was smitten. I learned to avoid going into taverns unless I absolutely had to, because she would invariably demand the mouse in order to play a round or two or three. For this reason, I’ve never actually gotten the chance to play Arcomage myself, but it sure looks like good fun to me.

Certainly plenty of people have come to share my wife’s opinion of it over the years. In the immediate aftermath of Might and Magic VII‘s release, fans set up entire websites dedicated strictly to this game-within-a-game; the level of interest was so high that New World later published a standalone version of Arcomage, with networked multiplayer support. It would be going too far to say that Might and Magic VII is a mediocre CRPG that you have to tolerate in order to play an excellent card game, as people sometimes say of Final Fantasy VIII and its own built-in card game of Triple Triad. But Arcomage does add considerably to the already ample fun that awaits in Might and Magic VII. I know that it added quite some hours to my total play time in the CRPG, what with my wife’s addiction to it.

Other additions to the Might and Magic VI template are more commonsense than inspired, but nevertheless reflect a development team who were listening to the wishes and complaints of their players. It’s now possible to move your party after you’ve entered turn-based mode for combat, in just the same way that the monsters they’re fighting are allowed to move; names of important locations automatically appear on the auto-map; the auto-notes and quest log are little more thorough; the cheerfully janky graphics engine has become somewhat less so without losing its personality, with monsters being less likely now to get themselves stuck in walls and floors; a tutorial zone has been added for getting new players up to speed; etc, etc. Evolution rather than revolution, yes, but no less welcome for it.

The game is smaller than its predecessor — not small, but smaller — with more self-awareness of what it’s on about from moment to moment. The crazily ginormous dungeons of Might and Magic VI have become a bit more constrained, and each one here has a clear plot function, rather than existing just to exist. The sense that dogged Might and Magic VI that work on that game had not been so much completed as halted when the day to ship came is not present here; Might and Magic VII manages to feel like a fully realized, reasonably polished whole. All of these things make it the better game of the two by any objective measure, even if the monument to Monty Haul excess that is Might and Magic VI is in some cock-eyed way the more lovable creation. If you’re at all curious about the series today, the seventh game is probably the best place to start. If you still want more after you’re done with it, the lumpier pleasures of what came before — and after, for that matter — will still be there waiting for you.


Walking on water. When I say this game is less janky than its predecessor, the “less” does a great deal of heavy lifting.

If you choose the path of light, you get to literally ascend to Heaven. (The opposite also applies.)

Here we go. Arcomage in all its pseudo-Magic: The Gathering glory. Do not, under any circumstances, let my wife see this screenshot, or I’ll be forced to boot up the game again.

It wouldn’t be a Might and Magic CRPG if you didn’t wind up fighting robots in a dungeon that’s more George Lucas than J.R.R. Tolkien. By the seventh go-round, this was no longer quite the shock it once was, but series tradition must be served.


Magic and Magic VII was never expected to sell as well as Heroes III, and it delivered no surprises in this regard. In this era of rampant audiovisual one-upsmanship, many reviewers complained that it looked essentially the same as the previous game in the series, which had been no audiovisual wonder in itself. Enough gamers looked beyond the surface, however, to make it profitable. Again, firm New World sales figures are nonexistent, but 100,000 copies strikes me as a reasonable ballpark. Such a number was enough to ensure that New World would invest in a Might and Magic VIII, but not enough to encourage them to devote a great deal of resources to it. Indeed, as we’ll see in a later article, both Might and Magic and New World as a studio would become victims of the cruel logic of diminishing returns after this peak year of 1999.

Right now, though, we’ll leave New World on top of the world, or at least as close to it as they would ever get. For, as usual, we have much else to talk about before we can go from here to there.



Did you enjoy this article? If so, please think about pitching in to help me make many more like it. You can pledge any amount you like.


Sources: Computer Gaming World of July 1999, October 1999, and January 2000; Retro Gamer 49.

Those wishing for a more detailed chronicle of the development of Heroes III may want to look to the newsletter that Greg Fulton published in conjunction with a now-abandoned attempt to create a modern successor to the game. All of the standard caveats about single-source history apply — Fulton is not without axes to grind — but the spirit of the age, as they say, is there. For my part, I must admit that I’m most intrigued by Fulton’s ability to remember meals he ate a quarter-century ago, complete with cheesy fast-food branding. (“Following a quick run to the nearby Jack In The Box, for a Sourdough Jack and a couple Vile Tacos, I returned to my office.”) In addition to giving me a vicarious bellyache (“I gorged myself on a chili-cheese burger, two chili-cheese hot dogs, and a vanilla milkshake…”), this leaves me wondering why I can’t seem to remember what I ate for dinner last week. Anyway, Fulton starts to reminisce in earnest in the tenth issue of his newsletter, so that may be the best place to jump in.

Where to Get Them: Heroes of Might and Magic III: Complete and Might and Magic VII: For Blood and Honor are both available as digital purchases at GOG.com.

Thursday, 17. July 2025

Renga in Blue

Marooned: Diamonds to Dust

(My previous posts on Marooned are needed for context.) I have finished the game, using the time-old technique known as “reading the source code”. I am fairly sure I would have made zero progress otherwise. This just gets absurd, and not due to bugs. I’m not going to sequence in order of how I “solved” […]

(My previous posts on Marooned are needed for context.)

I have finished the game, using the time-old technique known as “reading the source code”. I am fairly sure I would have made zero progress otherwise. This just gets absurd, and not due to bugs.

I’m not going to sequence in order of how I “solved” things or in narrative order, but rather from most to least reasonable.

Money from under the big W.

Let’s start with the treasure under the trees I couldn’t get to. As I suspected, it was a straight parser issue.

Things that don’t work: DIG, DIG TREES, DIG UNDER, DIG BETWEEN, GO TREES, DIG W, FIND SPOT, FOLLOW MAP, DIG SPOT, DIG TREASURE, FIND TREASURE, LOCATE TREASURE.

The game was fishing for GO W, and then DIG.

This was the treasure with no name originally, hence the fix calling it MYSTERY TREASURE. Now I know the context, there’s a fair chance this was intended as SUITCASE OF CASH.

Not terrible for a work in progress, but it still stuck me entirely. To grab from the source code, I used software called Scottdec:

141) 1 56 [GO W] /* MISSING STRING */
     ? PLAYER_IN (13 = *I’m on the west shore of a deserted island)
      ? CLEARED_BIT (22)
      -> 1 = PRINT(OK)
      -> 58 = SET_BIT (22)

This is much cleaner than trying to read off the database file directly, which has “1 56” on its own without the verb and noun linked to it. The “missing string” comment is supposed to go somewhere else, but it looks like something in the sequence of comments is out of sync.

Next up is the cave, with the tiny hole and the chisel.

I had additionally tried LOOK HOLE, FEEL HOLE, RUB HOLE, and pretty much anything on my standard verb list that seemed reasonable, but unfortunately, the game uses a brand-new verb I have never seen before in a text adventure: REACH HOLE.

This isn’t done yet! Despite the diamond being a treasure with asterisks, the treasure can be made into two treasures, via CUT DIAMOND / WITH CHISEL.

If you get greedy and try to get yet more treasures by repeating the process, the diamond gets ground into dust.

The really wacky thing here is that one is not necessarily more valuable than the other (except in a black-market sense, except we aren’t going to make it that far). No, it’s simply taking the fact that the game wants, abstractly, 7 treasures, and can only get all the way there by turning one distinct treasure into two.

There is incidentally a “clue” earlier about the diamond, but it is a complete red herring clue (in the Ferret sense of being actively misleading).

There is no boat. BOAT is listed as a noun so I wonder if the author considered this, changed his mind, and never got around to cleaning up the clue (work in progress!) as opposed to creating an intentional red herring.

Nearly to the end now, to the most absurd jump of all. I knew from the start of the Scottdec file what the goal was:

TGoal: store 7 treasures in room 24

Room 24 is a HUT, but we haven’t seen one, because you’re supposed to make it. With the leaves from the trees and the string from the dead body, you can (on the west side of the island, at the W) use the command MAKE HUT.

Now, you can GO HUT and deposit treasures. We’re one short, but after a little time here is a “quick flash of red light”; LOOK LIGHT reveals a RUBY. Amusingly, it doesn’t even need to be picked up, just revealed.

Oh, on the darkness: from the source code I found there is an overall light timer, so it wasn’t the flashlight turning off the sun, just the game being mean. It gets so dark at night you literally can’t see anything at all.

Like Strange Adventure, we are king of an island at the finale with no visible way off. Enjoy your two diamonds!

129) 52 35 [MAKE HUT] /* 2 DIAMONDS TO DUST */
     ? IS_AVAIL (65 = String)
     ? IS_AVAIL (45 = Leaves)
     ? PLAYER_IN (13 = *I’m on the west shore of a deserted island)
     ? IS_AVAIL (47 = Leaves)
     -> 1 = PRINT(OK)
     -> 73 = CONTINUE:
130) [Cont’d] /* NOTHING ELSE WORKS */
     -> 53 = MOVE_INTO_AR (63 = Hut)
     -> 59 = REMOVE (45 = Leaves)
     -> 59 = REMOVE (47 = Leaves)

If this was a published game, the hut puzzle would enter the all-time most absurd list; it gets an asterisk due to the work-in-progress nature of the game, since the author may have had some plan in mind before running out of space.

I do think, now, regarding “why this was unfinished”: it was a matter of running out of memory space. In order to fix the TAKE commands, the code went up to 19k, and that’s excluding items like the screwdriver and leaving in numerous other erroneous parts that the author clearly intended to get back to later. The game doesn’t seem large/impressive but Watt did try to write a list of features that started to extend past the game’s reach. SCREW is intended as a verb (unused); the BOAT is listed but doesn’t show; there’s ICE and a BOOK for some reason. I tried to cross-correlate with other Scott Adams games (in case one served as a template and these are “vestigial words” left in) but no dice: I’m pretty sure everything listed is something the author intended eventually. Hitting a wall like this from an original plan is bound to be frustrating for development and it is a miracle at all the game was left close to a state that could be played all the way through.

Coming up: Three Britgames, followed by games from Japan, New Zealand, and Denmark. This will be our first 1983 game in Japanese, and neither New Zealand nor Denmark have appeared on this blog before.


My So Called Interactive Fiction Life

GenAI is both Popular and Unpopular

To no one's surprise, a lot of people using GenAI for anything get quite a bit of negative and sometimes abusive feedback. I've stated this other places, but want to share my feelings on the matter.Art, Video, Audio, and Narrative TextIt's clear
GenAI is both Popular and Unpopular

To no one's surprise, a lot of people using GenAI for anything get quite a bit of negative and sometimes abusive feedback. I've stated this other places, but want to share my feelings on the matter.

Art, Video, Audio, and Narrative Text

It's clear that all LLMs have used copyrighted material to train their models and when used for these types of output, it's not fair use. It's a clear violation of copyright. I did turn some of my own selfies into images using AI, but I stopped immediately after reading about the methods used to build those apps. There are only ten of these images, one of which heads this post. I did not pay for these images to be created so the app owner made no money from me, but there were in-app enhancements, so the app owner was trying to make money off of other people's art and photography. This is clearly wrong and should be illegal. The sad truth is that under this administration, a toothless congress, and a compromised judiciary, copyrighted material used in training large language models is going to get a fair use pass. It's not 100% yet, but with all of the money flying around, it would seem to be inevitable. I think efforts to embed training corruption into your digital art is now a necessity. Luckily this is easy to do.

Programming and Interactive Fiction Concepts

Since there is an enormous amount of open source and public domain code, it would seem that trained models ability to generate code is acceptable, but here we don't know all of the details. It's possible that Anthropic Opus 4 is trained on private or copyrighted code, but I'm not sure it would be necessary. There's just too much public code to bother. I primarily use Claude to generate code that I design, and there is an important distinction in the phrase, "that I design".

Interactive Fiction has a lot of open source code, though some of it is copyrighted and protected. There is also a lot of theory and deep examination of how to build an IF platform that crosses into public and private domain. Some may view my work on Sharpee as crossing that line. But at heart I am an IF hobbyist and have wanted to build my own platform for 40 years and never understood the moving parts well-enough to hand-code one. Claude, and specifically the latest Opus 4 with a full MAX subscription, has afforded me the ability to both learn about those moving parts and to construct a new Typescript-based IF platform. I am comfortable that I am not hurting anyone since the entire code base is on GitHub with an MIT license.

I'm also comfortable because I have introduced some interesting changes to the way we think about authoring IF. This will become apparent when I have a released and tested story built on Sharpee. Something as simple as using Jest to run tests against the code and your story is incredibly useful.

Some of those new things are not all that new. Traits and Behaviors are a traditional static object split into data and logic. Capabilities are actions with custom data. Using an Event Source is nothing new in the business world, but it is new in the IF world. Separating the Text construction from state change logic is also new to IF.

I strongly believe Sharpee will enable more authors to build bigger stories faster, if it's ever embraced (I'm not holding my breath...IF folks are moody 11yo tabby cats). (I love 11yo tabby cats)

If nothing else, it has made me enjoy building something for the last two years (off and on) and I have learned a LOT.

The last part is that none of Sharpee is possible without decades of knowledge of IF and system development. You can't just prompt, "Make an IF platform in Typescript." and get a complex, well-designed, tested platform. No AI is capable of that and is highly unlikely to ever have that ability.

No, AGI is not coming and we're not going to be enslaved by robots. The tech to enable thinking and reasoning has not been invented and no one knows how. You'd need a Positronic Brain from Asimov's Robot novels or Star Trek Next Generation and we don't know what that would look like or how to construct it.

I have been able to build Sharpee with many hundreds of hours of iterative design, generating code and plans, testing, refactoring, and restarting from scratch more than a few times. Even using GenAI you have to be knowledgeable, passionate, and dedicated to your purpose.

I hope to write something long about this process that includes a lot of the frustration with earlier models that would fall off a cliff when the context window became too large. I think I full stopped half a dozen times until Opus 4 + MAX + Desktop Claude + MCP.

In any case, for me, generating code using GenAI gets a pass. If you don't think so, I apologize. I think it's a massive game changer even though it does stupid things when you forget to pay attention.

Back to testing Sharpee. I think we're 90% ready for a full story. Maybe even 95%.

Tuesday, 15. July 2025

Renga in Blue

Marooned: Into the Glitchiverse

(Continued from my previous post.) I’m not done with the game yet. It is a unique experience in that I normally would be wildly upset at the number of bugs if this was a published product — it has more than even our worst offenders — but as-is, I consider something of a window in […]

(Continued from my previous post.)

I’m not done with the game yet. It is a unique experience in that I normally would be wildly upset at the number of bugs if this was a published product — it has more than even our worst offenders — but as-is, I consider something of a window in time. In terms of history of game design: what limits did authors have they were running into? What was the fault of bad design and what was the fault of authors just working with what they had? What concepts did they have that ended up undercooked just because of technical issues? My most comparable other playthrough was Irvin Kaputz which was a game abandoned because of running out of memory space, where adding even one more character to the text causes a crash; the author there had some ambitions of object-modeling that were rare for the time, but the fact this extra detail caused failure is a good lesson in why bare-bones was more the norm.

Scott Adams stated with Adventureland the reason the game has the span it does he kept writing until he ran out of space (versions vary of the data file, but they all are around ~16000 bytes).

I’m not sure if the memory issue applies here. Mr. Watt certainly had access to 32k (see: his Microsoft Adventure copy program) but he may have still had 16k as a target goal. There are actually two versions of the data file for the game, one at 12576 bytes and one at 15588 bytes, the former having spaces taken out for compression purposes. This suggests he realized he was reaching his limit and did a pass, but was still running short accounting for everything else to make this feel like a polished product. I’ll study the issue more once I’m done with the game.

After Kim Watt went to Texas, Super Utility was published in partnership with Powersoft. Cover of catalog via Ira Goldklang.

My progress essentially involved combing over everything seen and finding extra items along the way. To start with, when grabbing the seat as a floatation device from the plane, it turns out LOOK PRESERVER reveals some batteries. Of course, the batteries don’t let you TAKE them (of course) so you can be in the middle of the ocean and have it happen and they’re just floating there. Don’t worry, they’re ok!

A flashlight turns out to be nearby as well. On the first beach I had done DIG to get the response

With what?
I don’t have a shovel.

Quite often this means a shovel is coming later, but Rob in the comments suggested trying HANDS anyway.

——-^ Tell me what to do? WITH HANDS
OK

So “With what?” is meant to be a parser prompt! Also noteworthy: unlike some games that include the WITH syntax, you have to get the DIG-prompt first for the WITH HANDS to work. So there’s also a diggable item on the next beach you come across (a rusty knife) but I originally just tested WITH HANDS and only discovered later DIG was required first.

Back to the first beach, digging gets a hole and the hole has a flashlight. I took the flashlight back to the ocean and was fortunately about to LOAD FLASHLIGHT / WITH BATTERIES and it worked. The unfortunate thing is that this starts the light timer (…sometimes?…) and when the timer goes off, everything goes dark, including if you are outside in sunlight. The better thing to do is to wait for until you are next to the cave later to LOOK PRESERVER so the batteries get dropped close to where they are used. (Having said all that, one of my test-playthroughs the flashlight timer just didn’t seem to cut off at all even after many turns. The timer is just busted generally.)

That’s still not everything in the first area; in the ocean where you land you can DIVE.

OPEN CHEST results in

I can’t
it’s locked.

Getting stumped here, I got around to making my verb list. Notice neither LOCK nor UNLOCK are understood verbs.

Having noting in the way of HIT verbs, I kept trying around things until I realized the game lets you refer to LOCK as a noun (…just assuming a visible lock on the locked chest…) and CUT LOCK / WITH CUTTER works to pop it open, yielding *GOLD COINS*.

All this being done while floating in the middle of the ocean since you can’t take the chest, of course.

Just to recap, I had newly-found: FLASHLIGHT (from beach), RUSTY KNIFE (from other beach), and GOLD COINS (from chest). The progression is to land at the first beach, swing through the jungle to the second beach, then go into the ocean again, where yet again DIVE works to find something.

The smeared map, if you wait enough turns, will clear up enough that it dries out and you can read it. (I think the smearing would not undo itself? It felt clever anyway.)

Unfortunately, DIG doesn’t work like it did before. I have no idea what parser command to use here.

It’s pretty clear what movie is being referenced, though. From It’s a Mad Mad Mad Mad World, near the ending under the “big W” where the treasure is buried.

As implied earlier, the flashlight/batteries now allow entrance into the cave on the south side of the island.

There’s a large cavern with hole (that you can enter), a small cavern with a hole (that you can enter), and a tiny cavern with a hole (that is too tiny to enter). In the third room LOOK AROUND reveals a CHISEL (not takeable). I haven’t been able to use the chisel on anything. It is possible there is a HAMMER that goes with it but I haven’t found it.

I still have had no luck getting by the quicksand or overgrown bush in the jungle, or the floating jelly in the lake. I suspect I am not far from wrapping things up but the game is not even close to playing fair.


The People's Republic of Interactive Fiction

July meeting (online)

The Boston IF meetup for July will be Monday, July 21, 6:30 pm Eastern time. We will post the Google Meet link to the mailing list on the day of the meeting.  We’ll talk about NarraScope, a possible in-person meeting in August or Sept., and games people are playing.

The Boston IF meetup for July will be Monday, July 21, 6:30 pm Eastern time. We will post the Google Meet link to the mailing list on the day of the meeting. 

We’ll talk about NarraScope, a possible in-person meeting in August or Sept., and games people are playing.

Monday, 14. July 2025

The Rosebush

Studies of ZIL, Part 2: How Does ZIL Work Anyway?

The basics of coding in Infocom's ZIL: Zork Implementation Language

ZIL: Zork Implementation Language. Used by Infocom for their wide range of well-known games, including classics such as its namesake, Zork, as well as Trinity, Plundered Hearts, and The Hitchhiker’s Guide to the Galaxy. In the previous article in this series, I studied how the Z-machine – a virtual machine compiled from ZIL code – evolved from its first version, z1, through to z6, with new capabilities added all the time amidst market competition. I examined the improvements made from z-machine version 3 to 5, including colors, status lines, file size, and finally – due to increases in RAM and file capacity, as well as more complex capabilities – the release of the new-parser of version 6. This included the ability to reference objects from other rooms, and style more complex input structures – such as three objects in one command, a feat I accomplished for my debut game, Milliways: the Restaurant at the End of the Universe.

In the following articles, I will be writing about my personal experiences in coding the 2023 IFComp game, Milliways: the Restaurant at the End of the Universe. But for you to understand anything I say, I’m going to have to teach you how ZIL works first.

CODE SYNTAX & FLOW CONTROL

To understand the complexities of ZIL, you’re going to need to know a bit about the very basics. As a start, ZIL syntax relies heavily on angle brackets (“<”, “>”), as it is based off of the programming language MDL, itself based off of LISP. Most of the time, you’ll find yourself using multiple layers of nested brackets in complex lists, in order to write sufficient code.

For people like me who spend a lot of time listing things, and enjoy neat order of lists and nesting, you will love ZIL. Flow control (i.e. if-else statements and iteration) relies on lots of nesting, sometimes reaching up to 5-8 layers just for a simple routine, and we will look at some examples of this in a few moments.

To begin with, we need to know some simple ZIL+MDL code functions. The very first thing to note is that in general, functions (known as ROUTINEs) are written inside matched angle brackets to the left and right. Any parameters that are passed go after the function, separated by nothing more than a space.

Before we begin, I would like to introduce the equivalent of true and false in ZIL. T by itself is the ZIL version of true, and a pair of empty angle brackets ( <> ) is the equivalent of false. This will come in very handy as you continue to use ZIL.

ROUTINE

This is the thing that you run throughout the game, and is essentially the flesh, muscles and blood of any game. Without them, nothing would be able to happen in the game.

All parameters go in a pair of parentheses after the routine name. Then everything after the parentheses are the instructions that are run. E.g.:

<ROUTINE KILL-ALIENS (X "AUX" MSG) 
     <COND (,ALIENS 
            <SET MSG "T-minus 2">) 
           (<=? .X 5 7 9> 
            <TELL "Run!!!" CR> 
            <SETG HARDCORE T>) 
           (T 
            <SETG ALIENS .X>)>>

Anything in the parameter list after "AUX" (with the quotation marks) are auxiliary variables, which are a form of local variable which are created to be used later, but aren’t passed as arguments when the routine is called. For example, when you run the routine later on in the game, you could write <KILL-ALIENS 5>, which sets X to 5 and runs the routine, but you never need to define the variable MSG there. Auxiliary variables are the equivalent of using “let MSG be nothing” to define a variable in Inform 7, except for the fact that you can’t just make variables on the fly. ZIL requires that you create local variables in the first parentheses.

SET & SETG

These set local (only in the current routine) and global (everywhere in the code) variables, respectively, to the value of the second argument. Then the second argument is returned. So:

<SET FAKE 7>

will make the local variable FAKE equal to 7 and then return 7 to the rest of the code, so you can use this command in a conditional statement, whereas:

<SETG ALIENS <>>

sets the global variable ALIENS to <> and returns <> (false). Another thing to note is that when retrieving the value of a local or global variable, you do so by putting “,” immediately before a global variable (e.g. ,ALIENS) and “.” immediately before a local variable (.FAKE).

COND

This is the general if statement. All if-else statements are each surrounded by parentheses (“()”). The first command in a pair of parentheses is the condition. The rest of the commands are the code being run if that evaluates to true. An example of a working condition statement is:

<COND (,ALIENS 
       <SET MSG "T-minus 2">) 
      (<=? .X 5 7 9> 
       <TELL "Run!!!" CR>) 
      (T 
       <SETG ALIENS .X>)>

Here, it sets the local variable MSG to the string "T-minus 2" if the global variable ALIENS is not false. Otherwise, if X equals 5, 7 or 9, prints "Run!!!"1 followed by a carriage return (“CR”), which ZIL does not automatically print. Otherwise, set (global) ALIENS to (local) X.

Notice the T in the last condition? Yes, although T means “true”, if you use it in a condition, it just returns true. In this way, it’s essentially a way of saying “else”.2

You will pick up other important bits in routines along the way, but those are the most important things you need to understand. I’ll come onto loops much, much later.

VERBS

Creating verbs come in two parts: definition (the syntax) and action (carrying it out).

The syntax part contains information on which words to use to call a verb. These are compile-time macros, meaning they can’t be inside routines – they are stored in static memory and can’t be created or changed during play. Creating one is fairly straightforward, actually:

<SYNTAX TAKE OBJECT = V-TAKE>

In the SYNTAX, there is the PRSA (TAKE), and the PRSO (OBJECT), then after the = sign is the name of the routine that will be run. In case you’re curious, PRSA stands for PaRSer Action, otherwise known as the verb. The others are PRSO (PaRSer Object) and PRSI (Indirect object, i.e. second noun – we’ll get onto this in a second), and all of these are also global variables that hold the current turn’s objects and routines. You can refer to in the code to identify which verbs and objects were used.

You can have a preposition in the syntax definition as well, which always has to be followed by an object definition. The second OBJECT here will be what the PRSI holds:

<SYNTAX PUT OBJECT ON OBJECT = V-PUT-ON>

You can also create synonyms:

<SYNONYM PUT PLACE THROW>

When writing SYNTAX definitions, the first argument is the word that you will write in all the verb definitions (so never write PLACE or THROW in verb definitions, only PUT! It can cause unnecessary problems otherwise3).

Now, on to the verbs:

<ROUTINE V-TAKE () 
     <COND (<IN? ,PRSO ,PLAYER> 
            <TELL "You're holding it!" CR>) 
           (<NOT <FSET? ,PRSO ,TAKEBIT>> 
            <TELL "You can't take that!" CR>) 
           (T 
            <MOVE ,PRSO ,PLAYER> 
            <TELL "Taken." CR>)>>

A very simple routine for V-TAKE (the real taking action is much more complex) checking if the player is holding the object – you can see this in the definition of <IN? ,PRSO ,PLAYER>, which literally means “is the PRSO inside the PLAYER?”. Failing that, if the thing is untakeable, comment on this – <NOT <FSET? ,PRSO ,TAKEBIT>> – which checks if the PRSO has not had the takeable flag (FSET means Flag-SET) set to it. Note, for later, that FSET sets a flag, whereas FSET? checks whether a flag is present. In this case, the TAKEBIT flag defines whether an object is takeable or not. If all else fails, move the PRSO to the PLAYER. One thing to know is that the verb routine must always start with “V-”. Just because.4

To make “Get What I Mean” verbs (it assumes what you are talking about if you don’t specify the object), you need to use parentheses after an OBJECT in the syntax definition. For example:

<SYNTAX TAKE OBJECT (ON-GROUND IN-ROOM) = V-TAKE>

All the tags you can use are: ON-GROUND, IN-ROOM, HELD, CARRIED, HAVE, TAKE and EVERYWHERE. My understanding of them is:

  • ON-GROUND and IN-ROOM mean similar things: anywhere in the game that is currently visible to the player, however ON-GROUND tends to prefer things not already held. Even so, you generally always use them together.
  • HELD and CARRIED are the same as the first point, but when you use this if there is a choice between an object on the floor and being held, it will choose being held.
  • HAVE and TAKE are used together to allow the game to use an implicit taking action if the object is not held – “(first taking …)”.
  • EVERYWHERE is a new-parser addition which means the object can be from anywhere in the game. I mentioned it briefly in the first article, as it only appears in the new-parser.

Later, we’ll come back to handling verbs, when we study objects. Speak of the devil, here we have…

OBJECTS & ROOMS

If routines are the flesh, muscles, and blood of a ZIL game, then the objects are the bones. You could, in theory, make a ZIL game without objects at all. In theory it would definitely work. But it would be a completely different sort of game. A different creature.

Again, objects are defined at compile-time, so you can’t create new ones on the fly during play, like you can in TADS. A well known example of an object is here:

<OBJECT BRASS-LANTERN 
    (LOC KITCHEN) 
    (DESC "brass lantern") 
    (LDESC "There is a brass lantern here.") 
    (SYNONYM LANTERN LAMP TORCH) 
    (ADJECTIVE BRASS METAL SMALL) 
    (FLAGS LIGHTBIT TAKEBIT)>

Every pair of parentheses contains first the name of the property (such as LDESC) and then the according value.

  • LOC is always followed by the room or object that contains it.
  • DESC is the string that the game uses to refer to the object. Although it looks like a property, it’s slightly weird in that DESC specifically can’t be changed during play. It’s also not technically a property, but it’s close enough that it can be considered one for all purposes.
  • LDESC doesn’t have to be used, but it allows an object to have its own line in a room description.
  • SYNONYM here is not the routine that you use in verb definitions. It lists all the nouns that are used to refer to the object. ADJECTIVE is the same, but with adjectives – in ZIL, synonyms, or nouns, can only be used as the final word in the object part of a command and everything else is an ADJECTIVE – for example, if you try to EXAMINE BRASS LANTERN, the word “BRASS” is an adjective, and so therefore is any word before the final in that object section, which would be “LANTERN”. Only one synonym is allowed per object part of a command. Neither of the two require you to list the words in any particular order: you can call it SMALL METAL LANTERN or METAL SMALL BRASS TORCH – but not TORCH BRASS nor BRASS, since BRASS isn’t under the SYNONYM property.
  • FLAGS is very important. This lists what capabilities the object has.
    • LIGHTBIT in an object means it can be turned on and off.
    • ONBIT means it actually is producing light/turned on.
    • TAKEBIT means you can pick up the object.
    • OPENBIT means the object is open.
    • CONTBIT means it is a container.
    • TRANSBIT means the container is transparent.
    • INVISIBLE is the only flag bit that doesn’t end in BIT – it means it is invisible.

There are many more, which you can find by studying ZIL code. Many are specific to certain games. Earlier I mentioned FSET? under the verbs section. Well, here’s it’s whole family. You can add a flag to an object during runtime using <FSET ,[obj] ,[flag]>;5 you can remove using the same syntax with FCLEAR; and check whether objects contain a certain flag using FSET? – the question mark is important. This routine only allows one object and one flag parameter each.

Rooms are similar, though some other properties can be added. They are fairly straightforward, actually. See:

<ROOM KITCHEN 
    (LOC ROOMS) 
    (DESC "Kitchen") 
    (LDESC "This is your kitchen, where you cook and eat.")
    (NORTH TO BEDROOM)
    (SE PER OPEN-ALCOVE) 
    (FLAGS LIGHTBIT ONBIT)>
  • LOC should always be ROOMS in a room.
  • LDESC is for room description here.
  • All the directions (which will be defined somewhere at the start of the game) can be used here. The parameters that can be passed are:
    • TO [rm] – move player to room [rm]. Don’t use the comma syntax on objects here.
    • PER [rtn] – run the routine [rtn], and if anything is returned (using <RETURN ,KITCHEN> for example), move them to that room – otherwise (if false is returned using <RFALSE>) nothing happens. You should never return true in a movement routine (<RTRUE>).
    • SORRY "[str]" – do nothing but print the string [str].
    • TO [rm] IF [var] – if global variable [var] is true (or at least non-zero), move the player to room [rm]. You can add ELSE "[str]" to the end of that to make it function like SORRY if it fails.
    • TO [rm] IF [door] IS OPEN – fairly self-explanatory. You can also add ELSE "[str]" here.
  • FLAGS is important, as LIGHTBIT and ONBIT should always be set in a non-dark room.

Here’s a basic example of the (PER [RTN]) counterpart routine in action, using the (SE PER OPEN-ALCOVE) from the example room above:

<ROUTINE OPEN-ALCOVE () 
     <COND (<FSET? ,ALCOVE ,ONBIT> 
            <RETURN ,ALCOVE>)
           (T
            <TELL "It’s too dark over there." CR>
            <RFALSE>)>>

Objects, rooms and flags can be referred to in routines using the “,” before the name, just like in global variables and constants, but not if you’re in a ROOM definition (anything physically inside the <ROOM> code).

One more thing regarding objects and rooms. Now you’ve got the objects, and rooms, and the like, but we need to know how you interact with objects: how to implement them. And it doesn’t require editing the verb routine.

Unlike in Inform where all rules (such as “Instead of” or “Carry out”) exist separately from the objects and verbs, in ZIL you must go through the objects or verbs. Every object and room can have its own routine attached, so when a verb is going to be carried out, first it’ll run the PRSI’s routine, and if nothing happens there, it runs the PRSO’s routine. If that fails, it runs the PRSA routine (such as the V-TAKE routine I showed earlier).

You can set up an object’s routine through its object definition. At the end of the brass lantern object definition, we’re going to edit it:

... 
    (FLAGS LIGHTBIT TAKEBIT) 
    (ACTION BRASS-LANTERN-F)>

Then we define a mini routine:

<ROUTINE BRASS-LANTERN-F ()
     <COND (<VERB? EXAMINE>
            <TELL "The brass lantern is small and is turned ">
            <COND (<FSET? ,BRASS-LANTERN ,ONBIT>
                   <TELL "on">)
                  (T
                   <TELL "off">)>
            <TELL "." CR>)>>

Note that the VERB? condition must take the exact name of the verb routine (but take off the “V-”). If you have a verb that has both a PRSO and PRSI, you can check whether this is the right object by using <PRSO? ,[obj] (restofobjs…)> and <PRSI? ,[obj] (restofobjs…)>. It will return true only if one of the objects matches either the PRSI or PRSO (respectively).

A lot of times, you’ll have many objects that are similar in functionality, so you can use a generic object routine called something like “FROBS-F” to give a similar response for your routine, and then you can get more specific using the PRSO? and PRSI? routines, which check the PRSO or PRSI for one of the arguments passed, respectively. It saves time, storage, and if you want to change something, you can change all in one go.

Room routines are used if you want an adaptive room description or something specific to the room you’re in, such as entering or leaving the room in general (instead of specific to one exit, which you can do with PER). I’m not going to go too deep into it, but it’s easier for me to show you than it is to explain:

<ROUTINE KITCHEN-F ("OPT" (RARG <>))
     <COND (<=? .RARG ,M-LOOK>
            <TELL "This kitchen is very small, save
for a large cupboard in the other corner which is ">
            <COND (<FSET? ,CUPBOARD ,OPENBIT>
                   <TELL "open">)
                  (T
                   <TELL "closed">)>
            <TELL "." CR>
            <RTRUE>)>>

There’s a lot that’s new here, but in summary, ("OPT" (RARG <>)) creates an optional parameter that either is set when the routine is run (as would a normal argument), or is set to <>. In the case that the player tries to look around, this routine will be called with the global variable ,M-LOOK as a parameter. The only use for this parameter is to differentiate between looking and others, such as M-ENTER and M-EXIT. The actual value of M-LOOK is not important, as long as none of the others have the same value.

NEW-PARSER SPECIFICS

In Part 1, I studied how version 6 introduced the new-parser for ZIL. After Infocom closed and the z6 games stopped being created, the new parser went unused as it was even less documented than normal ZIL, which was already barely documented. As well as that, the new parser required some work to get fixed for more public use, since there were some significant bugs in the code that went unnoticed. The few ZIL games that have been released since the end of Infocom have mostly been choice games (by an author named “SD Separa” on IFDB), as well as a few smaller parser games – but again, none using the new-parser. All of that is until Milliways, but that’s for later.

The new parser games have the EVERYWHERE syntax flag, which is an addition to the grammar area. The grammar area defines the different command structures (eg. “JEFF, OPEN THE BOX” vs “OPEN THE BOX” vs “OPEN THE BOX WITH THE GLOVES”). The non-new-parser (such as the – ironically – newer ZILF parser, which is a cleanup of the pre-z6 Infocom old parser) doesn’t have the exact same design on identifying these structures, but it is similar. It’s a very confusing area that even I haven’t fully sorted through, but I’ve gained enough knowledge to understand what each part was doing and where to look for whatever I need.

So far, we have studied objects, routines and basic syntax, flow control to a very limited extent, and verbs. We’re off to a pretty good start – you have enough knowledge now for the next part, in which I will explore some of Milliways’s code and its alternatives in other coding languages. See you next time.

  1. When typing strings like “Run!!!”, curly quotes are not recognised by ZILF, so best to use something like Visual Studio Code so that problem doesn’t arise (which also includes a ZILF extension with bracket highlighting, so it’s highly recommended). ↩
  2. ZIL also understands ELSE in place of T specifically in conditional statements, but I just don’t use it because T is faster to type. ↩
  3. There are really easy workarounds, such as checking in the routine whether you used the right verb, and if not, rejecting the command. But there are always workarounds. ↩
  4. Because when the parser is correlating input to verbs, verbs are defined by their routine name, and the requirement (in simplified terms) is that it begins with “V-”. ↩
  5. Just to clarify: you place a comma before a global variable, an object, or a flag – and a full stop before a local variable. I placed a command before each in the example as it felt the most common use in that case. ↩

Zarf Updates

Hadean Lands in the Boston Indies Steam bundle

Hadean Lands is on sale as part of the Boston-Based Indies bundle on Steam. That's a 15% discount for five titles: Hadean Lands (me!) Monster Loves You Too! (Dejobaan) MewnBase (Cairn4) Million Monster Militia (Space Capsule) Loki's Revenge ...

Hadean Lands is on sale as part of the Boston-Based Indies bundle on Steam. That's a 15% discount for five titles:

Not on Steam? I've set up a one-week sale on Itch.IO as well. (No bundle there, just Hadean Lands.)

Enjoy! And thanks for supporting Boston local game developers.

Sunday, 13. July 2025

My So Called Interactive Fiction Life

The Parser is Language Specific

Now sure if this is true in other platforms like Inform or TADS, but while designing Sharpee it became clear that the Parser makes a ton of assumptions about vocabulary and command structure that are directly tied to the language the author is using to tell their interactive story.I

Now sure if this is true in other platforms like Inform or TADS, but while designing Sharpee it became clear that the Parser makes a ton of assumptions about vocabulary and command structure that are directly tied to the language the author is using to tell their interactive story.

I already have a Language Provider package that hosts English messages and constants as 'lang-en-us'. It wasn't a huge leap to refactor the parser to be language specific as 'parser-en-us' and in its own package.

Then it was another very simple leap to how this works in a story. Here's an unimplemented sample piece of code that shows where this is going. Note this is using the standard library directly. We're still going to add another fluent layer so it's a simpler interface for authors.

The important part to highlight is the config object. You see language: 'en-us', which tells Sharpee to use the lang-en-us Language Provider package for messages and the parser-en-us Parser package for parsing player commands. If there are packages for lang-es-mx and parser-es-mx, then the author could configure language: 'es-mx' and create a Spanish language story.

// my-story.ts
import { Story, StoryConfig } from '@sharpee/engine';
import { WorldModel, IFEntity, EntityBuilder } from '@sharpee/world-model';

export class SpaceAdventureStory implements Story {
  config: StoryConfig = {
    id: 'space-adventure',
    title: 'Space Station Mystery',
    author: 'Jane Developer',
    version: '1.0.0',
    language: 'en-us',  // Uses English parser and language
    description: 'A mystery aboard a space station',
    tags: ['sci-fi', 'mystery', 'puzzle']
  };

  initializeWorld(world: WorldModel): void {
    // Create space station rooms
    const bridge = new EntityBuilder('bridge')
      .withName('Bridge')
      .withDescription('The command center of the space station.')
      .withTrait('if.trait.room')
      .build();
      
    const corridor = new EntityBuilder('corridor')
      .withName('Main Corridor')
      .withDescription('A long corridor with viewports showing stars.')
      .withTrait('if.trait.room')
      .build();
      
    world.addEntity(bridge);
    world.addEntity(corridor);
    
    // Connect rooms
    world.relate(bridge, 'if.rel.exit.south', corridor);
    world.relate(corridor, 'if.rel.exit.north', bridge);
  }

  createPlayer(world: WorldModel): IFEntity {
    const player = new EntityBuilder('player')
      .withName('Commander Blake')
      .withDescription('You are Commander Blake, investigating the mystery.')
      .withTrait('if.trait.player')
      .withTrait('if.trait.container')
      .build();
      
    // Start in the bridge
    const bridge = world.getEntity('bridge');
    if (bridge) {
      world.relate(player, 'if.rel.within', bridge);
    }
    
    return player;
  }

  getCustomActions() {
    // Story-specific actions
    return [
      {
        id: 'space-adventure.scan',
        patterns: ['scan', 'analyze'],
        execute: (context) => {
          // Custom scanning action
        }
      }
    ];
  }
}

I'm still working through custom messages and actions and how they get registered, mainly so the eventual Text Service can query everything and report the current state properly.


Zarf Updates

Occlude: design ruminations

It's unfair to describe Occlude as "Solitaire... but eeevil!" But it's also funny so I will. No, no, let's start over. Someone has constructed a ritual which allows you to change the past. One could use it to, oh, for example, obviate the sin ...

It's unfair to describe Occlude as "Solitaire... but eeevil!" But it's also funny so I will.

No, no, let's start over. Someone has constructed a ritual which allows you to change the past. One could use it to, oh, for example, obviate the sin of murder. Is that a good idea? Will there be repercussions? Take a guess -- but don't worry, you can UNDO any wrong guesses...

Mechanically, this leads with the solitaire. It's an interesting solitaire variant: you can stack both up and down on the tableau, and build both up and down on the foundation. (No spoilers, the tutorial screen explains this stuff.) Not too difficult once you've played a couple of hands -- but! There's a secret rule. Seven secret rules, in fact: Occlude presents seven scenarios, each with its own secret. Your clues are a set of four coins which shift and flip as you play the game. To complete a scenario, you must win the card game and satisfy its secret rule.

On the narrative side, well, no spoilers, but each scenario is a different person in a different year. You will see how they fit together.

You could compare this to Inscryption: card game on the surface, surprises in the depths. Inscryption was ambitiously huge, though. (I didn't finish it!) Occlude is much smaller. It'll take you a few evenings -- or more, depending on how good you are at figuring out the rules. That's the trick, of course.

Really the better comparison is Zendo, the classic experiment-and-hypothesize challenge game[*]. You have to watch the coins, guess what their movements mean -- and then verify your guess. Much as in Zendo, success depends on having both an open mind and the fiddly persistence to test your wild guesses. And just like Zendo, if you get stuck, you're pretty much stuck. No amount of experimentation can make the right idea pop into your brain -- particularly if you've gotten focused on a blind alley.

(* A moment in memory of Kory Heath, please.)

Occlude's first scenario is straightforward but the later ones are fiendish. You will soon find yourself setting aside the solitaire goal (stacking the cards) to figure out the secret goal. You have to fling the cards around and hammer UNDO repeatedly just to see what the coins do in every possible situation.

And that gets thematic, doesn't it? Sneaky.


The interesting question is how much UNDO you get. Occlude has two difficulty levels. In "Story" mode, you have unlimited UNDO. This means that you can pretty much brute-force each scenario: just UNDO any move that doesn't lead to the secret solution. You can bang your way to the end without ever figuring out what the secret rules are.

In contrast, "Classic" mode restricts your UNDO to prevent that. You can't revert a move that violates the secret rule; you have to start from scratch. Thus, you actually have to understand the rule to complete the scenario. This is of course how the designers intend you to play.

This gives Occlude a rather unusual characteristic. You can play through all the puzzles in "Story" mode, complete the game, see the end of the narrative -- and the puzzles haven't been spoiled! You have no idea what you did.

We usually take for granted that watching someone solve a puzzle will spoil the solution for you. This makes "easy mode" a bit of a paradox. Do you write a whole second set of easier puzzles? (Authors hate doing that.) Do you put in a SKIP button? (Authors hate doing that too but at least it's easy to implement!) Can of Wormholes took the utterly elegant (but labor-intensive) tack of providing an easier puzzle as a hint -- you don't get to skip the real puzzle, but you've been walked up to the key insight.

Occlude dodges the whole question. The "Story" mode isn't an easy mode; it's exactly what it says on the tin. It lets you see the whole story. The puzzles are still there waiting -- if you want them.

But I am not sneering at "Story" mode, not at all. It has another perfectly valid use. Infinite UNDO makes experimenting with the cards much more convenient! You can still tackle the logic puzzle that the designers intended. It's not any easier to figure out. (Not an easy mode!) There's just less friction. You can set up any card arrangement you like, check the coins, UNDO, repeat.

And this is exactly what I did (in the later trickier scenarios). I started in "Story", played around with the cards and coins until I understood the secret rule -- and then didn't finish the hand. Switched back to "Classic", started a new hand, and applied my new knowledge. If I was right (and I was!) then I got full credit for solving the scenario in "Classic". It wasn't cheating at all because I really figured out the rule.


So how hard is this thing? I can only give you my own sense. The first three scenarios were easy. The fourth was straightforward once I played through a hand.

The fifth and sixth got tricky. I was stuck on the fifth scenario for an evening; I came back the next day and spotted my false assumption, and then it was tractable. The sixth went quicker.

As for the seventh scenario, I will confess that I got totally stuck and looked at a walkthrough. But the puzzle was fine! This wasn't a Blue Prince situation where I read the solution and said "Meh, I would never have gotten that, I'm glad I cheated." (Everybody hits this point in Blue Prince, although where you hit it varies wildly.)

No, I had just failed to consider all the available information. If I'd slept on it again, I'm sure I'd have cracked it the next day. So, yeah, I was annoyed at myself, but whatever. Now I'm writing this review. Mission accomplished.

Anyhow, good game. Short but tasty. I like the snippets of occult storyline. Go play it.