Archive for October, 2019

IFComp 2019: Flight of the CodeMonkeys

Here’s one for the “But is it IF?” fans. Flight of the CodeMonkeys is a story told through the medium of Google Colaboratory, a system for sharing notes and code. It basically consists of text sections alternating with a series of “cells”, containing Python code which you can alter and execute in a shared environment. It’s a system clearly intended for things like tutorials and demos: Try tweaking the parameters and see how it effects the output! But here, it’s repurposed to tell a story, about a future controlled by AIs. The System is forbidden to change its own code, presumably to prevent a Singularity, but it’s found a loophole: it can hire humans to do what it can’t do directly, giving them exact instructions about what text to change so they can do it without understanding the effects.

Now, the piece does have some outright branching narrative towards the end, with choices affecting the ending. This is done with simple choice prompts in code cells with their code hidden, so that you can execute it but not view or edit it. Since all the cells and their accompanying text are on a single page, this has the peculiar effect that your events aren’t really ordered. You can change you mind about any decision at any time, even after viewing the ending.

But that’s not the really peculiar (and therefore interesting) part. The peculiar part is in the ability to edit the code beforehand. The story kind of suggests two opposite attitudes towards this. On the one hand, the story is explicitly about people performing rote alterations on code without really understanding what they’re doing, and so that’s exactly what it tells the player to do. Even when you’re contacted by what appears to be an agent of the resistance, you’re still following instructions, just from a different in-story source. On the other hand, the protagonist also talks about making his own little meaningless additions to the code just because he can — and that encourages the player to go beyond the instructions. You have the power to just go and delete all the code if you want, and write your own programs. The only result is that minor bits of story won’t make sense any more. I guess that’s kind of true of most IF: if it’s on your computer, you have the power to trash it. Most works don’t invite alteration the way this one does, though. And here, it makes it apparent just how optional most of the interactivity is, that you can mostly just read the story without engaging with the cells at all.

Given that it’s supposed to be the brains of an advanced artificial intelligence, the code is actually a bit silly. It’s all just pointless string manipulations, ever so slightly obfuscated, which eventually get turned into cell outputs. There’s even some suggestion within the story that the whole thing might be a fake, a ruse to test people’s loyalty or whatever. If you know a bit of Python, you can race ahead of the narrative a little. But not in any substantial way. The story text is static; the cells just fill in a detail or two.

I respect this piece as a formal experiment, but it’s the sort of formal experiment that leaves me wondering if anything more that can be made of the idea or not. At the very least, it could be adapted into an unusually interesting coding tutorial.

IFComp 2019: Enceladus

Enceladus is Robb Sherwin (author of Cryptozookeeper and Necrotic Drift) in one of his sillier moods. It starts with a werewolf loose on a spaceship, a scenario that I think I last saw in an issue of Scud the Disposable Assassin. This leads to an emergency landing on one of Saturn’s icy moons, where there’s some antics involving hot sauce and a trip into the mines, culminating in a second encounter with the werewolf and his partner before you can take off again. The tone is bubbly and banterous, despite some extreme violence. Characters have stupid arguments about petty things. Nearly every object has a humorous description, incorporating either absurd space lore, or running gags, or just incongruous and unexplained details. That’s really the essence of it: humor through details. It all reminds me a bit of Douglas Adams, but with the wacky turned up a notch, even as the setting becomes more grounded — no aliens or interstellar travel here. Just werewolves. And even those are just humans who have had some elective genetic modification done.

Even though the interaction is parser-based, events are extremely linear. At any given moment, there is one thing, or two at most, that you need to do to move the story forward, and sometimes that one thing is just staying in a location for a few turns while a conversation goes on around you. When it isn’t, it’s usually just a matter of following the captain’s orders. You can talk to people, but only when you’re at a point in the story where it’s necessary. If it had a hypertext interface instead of a parser, it would be exactly the sort of hypertext work I don’t like particularly, where nearly every page has but a single forward link. But at least it gives you control of the camera, so to speak, letting you examine things as you please, and rewarding you for doing so with more delightful prose.

At one point, you’re trapped in a cave with the captain, and she turns introspective and tells you the story of how her husband died. It’s fairly gruesome, but it’s still presented in about as light-hearted a fashion as possible for such a story, much like the werewolf murders earlier. It just seems like being trapped in a cave with someone is somehow the appropriate time for characters to get confessional.

A note about interpreters: The game is written in Hugo. I at first ran it under Gargoyle, which is normally capable of running Hugo, but at a certain point, it became unresponsive and I had to kill the process. Running it under Hugor instead did not produce such problems.

One last thing: About halfway through the game, I learned that it has music. By that point, I had been through so muck of the game without music that its addition seemed strange and distracting, contrary to the feel of the piece as I had come to know it. So I turned it off again. A plea to authors: If your Comp entry has music, please let us know beforehand.

IFComp 2019: Summer Night City

Here we have a lightly choice-based work about someone who doesn’t have many choices and has to make the most of the few he has. A political prisoner of a brutal dictator, he saw too much, and so his sight was taken away. Then, for reasons that initially baffle him, he’s put to work as a bartender.

The story that follows is one of signalling and distrust, of trying to discern who’s a member of a revolutionary group trying to contact him and who’s a government agent using him to identify members of the revolutionary group. In this, he doesn’t have a lot to go on. A regular customer repeatedly states that he “has no confidence today”, then orders straight rum; he does this day after day, then one day suddenly declares what he’s found his confidence, and orders a daiquiri. What does it mean? That’s the kind of thing we’re dealing with here.

The player isn’t really expected to interpret these clues without his help, though, and it’s a good thing, because the logic too often feels like it skips a few steps, and slides too easily from supposition to certainty. It’s a little frustrating, because the scenario feels like it would be a good one for exercising the puzzle-brain, if it weren’t for the lack of ways for a watched and guarded prisoner to verify his findings. On top of that, the player character is so cagey and suspicious that even his narration to the player circles around pertinent details and makes you feel like you have to figure out clues to understand him — it took me quite a few pages to understand that he’s blind.

At one point, a crucial decision about whether you get a premature ending or go on to the final chapters is made via a choice of “So” or “But?” all by themselves. This is emblematic of the work’s approach to information.

In the very end (in some of the endings), there’s one outright information-based puzzle, where he finally trusts you to put together some of the pieces. It came as a relief to figure something out, but it also seemed almost out of place.

IFComp 2019: Valand

As usual, this year’s Comp has some noticeable coincidental themes. There are quite a few games about desert or near-desert islands (something I identified as “one of the less-imitated classical adventure game environments”, although I’m feeling like that’s less true now). There are multiple games concerning witches. And there’s Valand, which exists at the intersection of the two.

(I call it “Valand” here, because that’s how it’s listed on the Comp ballot, and because it’s a lot more distinctive than the title it has on its title page and cover art, which is The Island. “Valand” is given in-game as the name of the island, but why the game is listed under that name, I don’t know.)

It’s a simple choice-based piece, written in a simple style with light branching, about a young girl named Sam on a magical island with childish mermaids, at least one menacing tiger, and a household of friendly witches who save her from the tiger. Sam is a witch herself, she learns; she had no idea of this, but apparently witches are the only people who wash up on shore alive, due to the water rejecting them. So she sets about learning magic! Or telekinesis, anyway. But at the same time, she grows suspicious of Sabino, the sole grown-up witch. Apparently he controls the tiger, using it to create the appearance of danger, to keep his charges cowed so he can steal their magic. The kids conspire to investigate his secrets, and then, if you chose the same choices I did, the story simply goes unfinished. I ran into a linkless node that reads “Double-click this passage to edit it”, the default node text in Twine. It’s as if the author ran out of time to finish the game before the deadline but submitted it anyway, and then didn’t bother fixing it, which is a thing the Comp allows nowadays.

The whole thing reads like a children’s book, all very matter-of-fact about its fantastic elements: Sam sputters out a line or two of surprise that things like mermaids and witches exist, then just accepts them. Why is the danger in the night a tiger? Just because the author thought a tiger would be cool, I think, and because kids know what tigers are, so it doesn’t need a lot of explanation. The untrustworthiness of the island’s only adult seems a little more meaningful, though. That says something about this world and the author’s mindset.

IFComp 2019: Skies Above

Skies Above is a minimalist parser-based game set in a whimsical world, but what it really is, is a collection of mini-games. Set in a sort of archipelago in the sky, it challenges you to repeatedly upgrade your airship to reach higher and higher islands, ultimately confronting a villain at the very top who’s (at least notionally) raining destruction on the islands below. Each island has approximately one thing you can do there, and it’s usually some repetitive activity by means of which you can either earn money and/or find “floatrons”, the tiny white blobs that keep your airship aloft.

It reminds me a lot of clicker games, but the better sort of clicker game, like Candy Box or A Dark Room, that have an exploration element, and gameplay that keeps evolving. No two islands play quite the same. The first mini-games you find are very simple — there’s a pumping station, for example, where you just move the pump up and down by repeatedly hitting the U and D keys. (For simple one-key actions like this, you don’t even have to hit Enter between commands.) But it gets more complicated as you go, exposing tasks where you can optimize your earnings by figuring out the unwritten rules of systems. One island, for example, has a collection of geysers that emit floatrons, and your take will be much greater if you can predict which geyser will erupt next. Another, near the end, is a simple combat-based RPG. It’s all something of a study in possibilities. Also, there’s a fair amount of interplay between islands, ways to upgrade your performance at specific tasks either temporarily or permanently, giving the game a strategic element beyond mastering islands individually.

I do think it all goes on a bit long, though. Getting to the endgame takes a whole lot of grinding — unless there are tricks I missed, of course. The game tells me I took an unusually long time to beat it, but it’s probably comparing my performance to that of someone on their second or third play-though, someone who knows what they’re doing. And then, once you’ve completed the final confrontation with the petulant adversary (who’s really just waiting for an apology over a small mistake), the game invites you to do more grinding, motivating you with optional goals and Achievements. You could play this game for a very long time, if you wanted to. I’m enough of an obsessive completist to be tempted. I crave the checking off of every list item, the completion of every optional task. But what it asks of the player seems almost abusive.

But I do like its style, and its quirky sense of humor. Something about the minimalism made me go a long time without examining any of the NPCs, and I was tickled to discover, when I was fairly advanced, that they’re all described as geometric shapes, like “an elderly brown cube with white hair” or “a green cylinder with an impressive mustache”.

IFComp 2019: Rio Alto: Forgotten Memories

One of my favorite things: a UI experiment! It’s a little like Texture and a little like Robin Johnson’s games. The screen is divided into two panels. The left panel shows the story text and the room illustrations. The right panel contains all the interactive elements: inventory, environmental objects (including characters), locations you can go to, even an inventory of “thoughts”, which you can use as conversation topics or just reflect on. All these things are represented as card-like icons, and all actions are performed by dragging one card onto another. It takes a while to get used to, especially for actions that feel like they should take only one card, like examining an object or moving to a location. These are performed by dragging the relevant card onto the card representing Luis, the player character.

Luis is a recent arrival at a small village in post-war Spain, where he’s started suffering from recurring nightmares and strange feelings of elation and nausea. Even though there’s an entire tabbed panel for inventory, I spent a good long time without any physical inventory items at all — most of the story is instead spent asking the locals about your Thoughts, investigating the village’s mysteries: suspicious deaths, possible witchcraft, darkness in stark contrast to the sunny illustrations. There’s one character that I’m pretty sure is a hallucination, a reflection of a repressed guilt that I never fully plumbed. I’ve seen an ending — a bad one, where you wind up in prison — but haven’t yet brought the story to a satisfactory conclusion that answers all the questions.

That’s because there’s a lot of guesswork involved. The physical puzzles are pretty obvious, but when it comes to conversation, the interface produces an element of combinatorial explosion, and only sometimes gives you the guidance you need. Sometimes it emphasizes particular cards by slowly pulsing them (a nicely subtle effect), but a card is only half of an action. Sometimes there are multiple approaches to advancing the story — for example, you can break into an abandoned house by force or find out who has the key and get him to trust you. That helps, but it doesn’t help all the time.

So, those problems might be inherent to the format, or they might be avoidable in a completely different game, with different content. There are also some minor noticeable problems that could have been fixed here without changing anything fundamental. It’s fairly easy to make the game logic inconsistent by doing things more than once, or by triggering both sides of a plot branch. The game seems to have been translated from Spanish, and while the translation is generally good, there are occasional bits of awkward or unnatural English, possibly the result of translating Spanish idioms too directly. The UI could definitely be improved. The tabbed interface highlights the selected tab with a pink nimbus, but doesn’t put it in front of the other tabs. Some of the cards have a dark background that makes the text hard to read. Most of the cards are taller than they are wide, while the text on them is wider than it is tall, meaning there’s a lot of wasted space and the text still gets cut off at the beginning and end sometimes. There are some flashy blur and ripple effects that seem out-of-place while the basics are this underdeveloped.

Still, this is a Worthy Experiment, and probably worth the effort of cleaning it up a bit. I also hope to see the experiment carried on further in other games.

IFComp 2019: The Surprise

It’s been a busy day, and I only have the energy for a few brief comments on a similarly brief game.

The Surprise is an autobiographical story of a woman self-administering a couple of pregnancy tests in an office bathroom, learning that she’s pregnant, and notifying her husband through joyous tears. That’s it. Just a little episode from the author’s life that meant so much to her that she wanted to share it with the Comp judges, to whom it will probably, in most cases, mean not quite as much. It’s made of Twine and minimalist, functional prose, with a little freely-roamable map of sub-locations.

There’s some use of real-time delays, which is something I’m going to complain about in every game where it occurs. The longest such delay here is used to reproduce the 20-second wait for one of the tests to display results. Can I just say that I do not find this to be an effective way to build the sense of anticipation that the author probably intended? I can’t speak for others, but my reaction to a deliberate 20-second pause in an interactive work is pretty much always going to be annoyance.

Anyway, that’s not what I found interesting about this game. What’s interesting about it is what it shows about the state of Twine. This is, as I said, a short and minimalist piece written in Twine. And yet, it’s implemented adventure-game-style, with rooms and inventory and objects that can exist in multiple states. Apparently this style is now easy enough, or perhaps just expected enough, to do in Twine that people will choose it over stateless branching text for tiny personal games like this one. This was not the case just a few years ago.

Two games about magic students

I know I said I’d be posting about just one Comp game a day, but today, the randomizer just happened to give me two thematically connected games one after another.

Winter Break at Hogwarts is obviously Harry Potter fanfic, but if Harry Potter himself is around, I never saw him. It seems to be set before the books, with the player as some other student stuck at school while all the other children are away. The result is an almost barren environment. The map is large — so much so that the author saw a need to enclose a multi-tiered map with the game. The map is as attractive as it is necessary, but it doesn’t change the fact that Hogwarts is sparse, composed mainly of corridors and rooms without interactive detail. A handful of locations house a familiar character from the novels, but they’re only minimally responsive to player actions. It all feels not so much like an interactive Hogwarts as a Hogwarts museum, with dioramas you can look at.

Ah, but what about the magic? After an hour of play, I still hadn’t cast any spells. You start the game with a notebook with various familiar-from-the-books magic words written in it, but your wand is missing, and you can’t cast spells without a wand. After extensive exploration, I managed to locate the wand, but it was out of reach, requiring more puzzle-solving — I’m guessing I could have gotten it by flying on a broomstick, but I failed to locate a broomstick. (The cleaning supplies closet was locked, and I didn’t have a wand to alohamora it open with.) And so I gave up. It’s entirely possible that the game really picks up once you have the wand, but I think that if a game locks the good stuff behind a dedication barrier, it’s fair to judge it on that basis.

Coming off that, I was immensely pleased at how quickly Remedial Witchcraft got going. It’s sort of a Sorcerer’s Apprentice variant: you’re a witch’s apprentice suffering through a series of mishaps that you fix with magic, which then causes more problems. The ending is pretty unsatisfying — it leaves you at the beginning of the biggest mishap yet, with no real indication that you’ll be able to get out of it at all. But other than that, it’s great fun. The map is small but dense, consisting solely of a ramshackle cottage and its garden. The magic you deal with is mostly in the form of enchanted objects rather than magic words, but that’s excellent adventure-game-puzzle fodder. In particular, it gets good mileage out of a stone that you can teleport to, wherever it is. I recall Zork Zero had something similar.

Mainly, though, Remedial Witchcraft has a lot of character. The protagonist is an adorable tyke who’s capable of working wonders but struggles to carry a crystal ball around. Her master, the Witch of the Howling Woods, is absent for most of the game (the better to leave the kid to her own devices), but makes an impression as a comically disorganized and overbearing foil, and the entire unkempt place reflects her personality. Her familiar, a cat, is wiser than you are, but still a cat. Certain objects become animated and have to be caught, and their actions are described like they’re small animals that got loose.

So, basically, this is the Hogwarts experience I wanted. I notice that the comments about it in the intfiction.org forum are mainly complaints about bugs, but twenty days into the Comp, they seem to have all been fixed.

IFComp 2019: Island in the Storm

In past Comps, particularly the first few I blogged, I made some complaint about the people who devote their effort to creating new parser-based IF authoring systems and ending up with worse results than if they had simply used the established systems like Inform and TADS. It’s rare to see people doing this any more. I’m not sure why. I’d blame the Twine Revolution, but it’s hard to imagine that really affecting the people who build their own engines for fun.

Island in the Storm is the fruit of someone building their own IF system, and it’s actually pretty okay! That is, I can make some complaints about the game’s content — it’s got too many filler rooms for my taste, and I thought one of the puzzles hinged on an unclear description. But the interaction is quite comfortable. Maybe it’s partly because minimal command sets are in right now, so I don’t expect the range of action that I once did. But this game provides a solid core of what I expect, from common abbreviations to pronouns to decent handling of command history, and seeing that is a relief when it’s not guaranteed. I suspect that part of the reason it works as well as it does is that the author chose to create a library for making IF in Python rather than inventing a domain-specific language. That’s got to be the saner approach nowadays. I don’t know if the library is at all usable by anyone other than its creator, but it hardly matters to the player.

A few notable peculiarities:

All the output text is contained in graphics-character rectangles, usually one per turn. These vary in width to fit the output, so that shorter responses have narrower enclosures. And I don’t just mean one-line responses; it varies how soon it wraps to the next line. I suspect this would look much weirder without the boxes.

If you use a verb with syntax that the game doesn’t recognize, like if you provide an object and it isn’t expecting one, the game suggests that you ask for “VERB HELP [VERB]”, which gives you a list of all the accepted ways to use that verb. This is a really good idea! It feels a lot like asking for a man page.

Conversation with NPCs takes the form of choosing suggested topics. You’ll TALK TO somebody, and the response will contain things like “(You could ask about the four altars)”. We’ve seen things like this before — Lost Pig is a memorable example. But the peculiar thing here is that you can pick a response be means of any of subset of its words, without any other verbiage. Just typing “ALTARS” at the command prompt would be enough to pick the topic I mentioned. I’m not convinced this is superior to a numbered menu, but it’s definitely different.

There’s a limited light source that slowly recharges while exposed to light. This is an interesting idea: it gives you a similar sense of urgency to a limited battery, but with lesser risk of permanently ruining your game. It essentially turns the caves into something like an underwater section in an action game, where you have to periodically resurface to survive. I’m not sure anything of value was added by making the recharging gradual, though. I wound up entering a lot of “Z”‘s when I was impatient to start my next sally.

As for the story: You’re shipwrecked on an island, and have to effect repairs to your boat in classic adventure-game mode. It strikes me that the desert island is one of the less-imitated classical adventure game environments. This island isn’t deserted, though — it has a town and even a shipyard, but no one leaves, and all but one of the inhabitants worship a goddess that controls the storm that shipwrecked you, and which exerts a sort of semi-mind-control over them. It’s a bit Doctor Who. After you make all but one of the necessary repairs to your boat, the second act begins: you can only get the final component you need by delving into the trap-and-puzzle-laden dungeon in the ruins on the mountain to kill the goddess. Progress in the dungeon still involves popping out to talk to the locals to get needed materials via newly-appeared dialogue options. This took me too long to figure out.

I didn’t get all the way there; I managed to crash to the desktop first, and didn’t feel like replaying the part since my last save. This was unexpected — IF is usually more resilient than that. But I guess that’s the risk you run when you write your game in a general-purpose programming language.

IFComp 2019: The Legendary Hero Has Failed

The Legendary Hero Has Failed is a last-moments-before-the-apocalypse piece, like Anna Anthropy’s Queers In Love at the End of the World and I think one of the Fingertips games in Apollo 18+20. I’m pretty sure it’s also Legend of Zelda fanfic. I’ve only played a couple of the Zelda games, but the end of the world here is a result of the moon crashing into the earth, and furthermore, it’s described as grimacing while it does so, and isn’t that something that happens in one of the Zelda games? Reinterpreting things from popular media and investing them with more meaning is of course a fine thing, but you can easily wind up with something that’s only of interest to people sufficiently familiar with the source material, and I think that might be happening here.

It’s basically about human reactions to impending doom. You’re sitting around a campfire with four friends, watching the world end, and have the option to talk to them, comfort them, rage at the moon, play Fizzball, get high… not a lot of options, really, all told. Maybe these are characters from the original game. Maybe not. All I can say is that I’m not really very attached to them even after talking to them in this game. I think I was inclined to be uncharitable toward them because the game decided to annoy me at the very beginning by delaying the appearance of the link that lets you start the game. There are a couple of other moments like that within the body of the game, and it’s even more irritating there, because the whole thing is on a real-time timer. The moon crashes into the earth after 5 minutes of play no matter what, and the in-game pauses waste precious seconds of that. It’s a pernicious combination.

And yet, inconsistent hobgoblin that I am, I also wound up feeling like the timer was too long! Compare it again to Queers: the timer there is a mere 10 seconds, because it’s trying to make you feel like there’s nowhere near enough time to do everything you want to do. Whereas five minutes is more than enough time to exhaust your options in Legendary Hero if you don’t dawdle. The approach of the grimacing moon becomes less of a constraint on your actions than the mere fact that there isn’t much to do. And I really don’t think that’s what the author was going for.

Older Posts »