Victor's Spring Thing 2021 Reviews

Heroes! by Bellamy Briks

I used to think of Quest as a system that outputs parser games, but Heroes! has shown me that it can also be used to make purely choice-based games. Briks’s game has the classic structure of a ‘time cave’ (in the terminology of Sam Kabo Ashwell), meaning that it branches often and that those branches do not, in general, come back together. Indeed, we start with a choice between one of three protagonists, whose stories are all completely different; and those protagonist tend to have at least two independent main storylines to explore.

Heroes! is charming, winsome, disarming, fun. You cannot dislike a game with pictures as adorable as these and storylines as good-humoured and whimsical. It all starts out as standard fantasy stuff and then turns into something not quite expected but almost always smile-inducing; the evil villain being a baby-kidnapper who is caring for dozens of babies in their evil house, and Bellamy Briks definitely not foregoing the opportunity of showing the protagonist sneaking off with a literal cartload of smiling babies. The pictures are essential here. While the writing is fine, it doesn’t quite stand alone. But then it doesn’t have to.

Some of the passages – especially in the goblin princess story – felt overly long to me, but otherwise I did what I was meant to do with Heroes!: enjoy it and smile.


Eyewear Cleaner 2077: Demo by Naomi Norbez

I was a beta-tester for this game (the demo, not the full length game), but replayed it to experience the Spring Thing version. In Eyewear Cleaner 2077, Naomi Norbez takes us into the world of Cyberpunk 2077, but this time not as the epoch making hero, but as one of the innumerable labourers who toil away in the corporate dystopia. The demo version takes us through two days in the life of our eyewear cleaner. We get to know some details about the setting; we learn that our job will be taken over by robots in the future; we hang out in a bar or play some games; and perhaps most importantly, we come into contact with a wide variety of people who may either be in active rebellion against the system or who may be interested in rebelling. Many of our more substantial-seeming choices have to do with expressing interest or approval when these people reveal their plans and attitudes to us. I say ‘substantial-seeming’, since the demo stops before they actually become significant for the plot.

There’s a lot of interesting stuff here, and I particularly enjoyed the mindless Sky’s Rim sessions you can play at night. But how successful is the demo as a demo? Very fresh in my mind is Brian Rushton’s recent piece about writing a good Choice-of-Games game, in which he stresses the following question: Is my first chapter as interesting as the rest of the book? And he adds:

Several of the lowest-selling games have purposely slow first chapters with later ‘big reveals’ that make the story much more exciting. While this can pay off with reader involvement, there is no payoff if no one’s reading in the first place.

When I discussed this with a friend of mine, they pointed out that famous books tend to start much slower than games narrative-wise, and that habit can sometimes carry over. Having dozens of pages of Bilbo’s birthday and Frodo walking is great for Tolkien, but doesn’t do much for gamebook sales.

I feel that Eyewear Cleaner 2077 falls into the trap that Brian is warning of: a slow build-up, which means that the beginning of the game is less interesting than what will follow. I assume that the pressure will continue to ramp up; that the protagonist will get involved in some kind of rebellion; but at the moment I’m just cleaning eyewear and playing computer games. (And getting along with the police, if I make the right choices.) Perhaps there will be a big pay-off for this slow beginning later on (and I’ve been impressed with some of Bez’s work in the past, so there no doubt will be). But we’re not experiencing any of that here. So it’s easy for me to imagine that the fragment that we play will be part of a very interesting full game; but I’m not quite sold on the demo as demo.


Perihelion, by Tim White

Without a doubt, Perihelion has the most unique use of colours I’ve seen to date in a work of interactive fiction. As we play, and the day and time of day changes, the background colours of the game change massively, running through what would seem to be the entire rainbow. It’s a powerful mood-setting device for a weird, poetic game about an alien being in an ethereal world. But having these massive changes happen every single turn was also distracting, at least in my experience. If one adds to that the very unfortunate use of slow timed text, one must reach the conclusion that the way Perihelion is presented does not encourage optimal engagement with the game itself.

The story is simple but fine: a human has crash landed on our alien world and we set out to help them. While the game labels itself (on the Spring Thing website) as a puzzle game, I didn’t find anything that would count as a puzzle: all the options that will help the alien are labelled as such, and at one point one has to wait for the right day before doing an action, but this too is clearly signposted. So one moves through the game’s locations and events without much hindrance.

The best element of Perihelion is clearly the weird world it sets out to describe. There is perhaps an over-reliance on the technique whereby we make something mysterious and poetic by describing it in terms that quite literally defy being imagined (such as the colour choices early in the game); but this game has a better justification than most, because we are looking at the world through the ideas of a life-form that ought to be incomprehensible to us.

I can’t help but feel that Perihelion doesn’t quite succeed at what it sets out to do. But it does manage to convey the strangeness of its world, and that is nothing to be sneezed at.


Just started with The Weight of a Soul, which might take me a while to complete. But I love the beginning; this seems competent and interesting!


Same here. I’m standing over a convulsing goblin bleeding out of his eyes and I’m examining myself, looking in my purse and jumping.

I’ll restart tomorrow…


The Weight of a Soul, by Chin Kee Yong

Back in 2009 I wrote an article in SPAG where hailed Jimmy Maher’s The King of Shreds and Patches as a perfect example of the “second ideal”, which I described as follows:

The second ideal that has emerged in the interactive fiction community is that of the continually engaging, linear or quasi-linear narrative interspersed with well-integrated puzzles. [W]hat is of paramount importance is that the story keeps going, that the flow is not interrupted. Playing interactive fiction is like reading a book, and reading a successful work is like reading a page turner.

Chin Kee Yong’s The Weight of a Soul perfectly fits this tradition. Indeed, with its list of goals, beautiful map, horror elements, and long playtime, it reminded me of The King of Shreds and Patches in more ways than one. (Which is not to say that it is a derivative work: the game’s story and themes are all its own.)

Most importantly, The Weight of a Soul is very very good. It really is a page-turner, gripping us with strong world building, excellent prose, great pacing, and a mystery to reveal. I also loved the fact that a game in which you play a doctor’s assistant makes the Hippocratic Oath the key element of its thematic development.

If there’s a weakness, I would say it is in the character of Justinian, whose evil plan is so insane that I don’t really how it works as an exploration of the Hippocratic theme. The love between him and the protagonist also didn’t feel real to me, even though it is a crucial element of the story.

But this is 5-star experience and no doubt a highlight of 2021 interactive fiction. (It also deserves a more detailed write-up than I can give it here!)


I read that article about a year ago and I thought it was very good. I hadn’t yet realized it was yours. So, thanks for a good article.

King of Shreds and Patches was what I thought too when trying to compare The Weight of a Soul to another game. The polish, the player guidance, the emphasis on letting the player/reader in on the mystery bit by bit. The interactivity here is less in looking under the bed or fiddling with a magic device and more in the player thinking together with the PC, becoming complicit in her actions.
I like this style of IF. (It’s certainly a welcome change in brain-exercise after Finding Martin)

I’ll share my thoughts soon, I’m almost done.


Thank you for the kind words and pertinent feedback!

Regarding your criticism (spoilers):

Justinian was an incredibly difficult character to write. He’s meant to be a direct foil of Marid, a look at the kind of person she could become if she made peace with death and left behind her uncertainty. It looks as though I didn’t quite nail that. I’ll have to go back and take another look at his characterization and relationship with the protagonist.


Copper Canyon, by Tony Pisculli

Copper Canyon is a Western story written in ink. You take on the role of a boy on the edge of manhood whose father is killed in a mining accident. In fact, the entire town seems on the verge of economic collapse because of the accident. And to make matters worse, a gang of bullies have decided to take over and make life miserable for the survivors. So it’s up to you and your gang of teenage friends to set things aright. After a series of pranks, murders, ghosts and gold nuggets, things become right again.

It’s a fine story, although I found it tonally a bit inconsistent. The protagonist insists on not using deadly violence, which fits well in a particular type of YA story; but deadly violence has already been used and will be used again very soon, blatantly, and against people who certainly do not deserve it. The narrator is interested in events far more than in personalities, brings in a quick succession of names, then makes the most crucial and formative scene happen when the protagonist is alone; but then wraps everything up by telling us about the beautiful friendships that have been formed. Nothing terrible, but I sometimes felt that the author didn’t quite know what kind of story they were trying to tell.

My more major complaint is about the approach to interaction. There’s not much of it; we’re reading big chunks of text, and most of the time these end up giving us a “Continue” message. There’s an element of taste involved, of course, but in general I find that choice-based narrative works better with more frequent interaction. And the choices that we do have seem rather random in the sense that they certainly don’t appear at all the major choice points for the protagonist! Indeed, many of the most important choices are made without our input, including the entire plan to save the town and the way to escape in the execution scene. This feels inconsistent; it is hard to discern a logic in the author’s decisions about when to offer us a choice. Finally, when we do get a choice, these often immediately reveal themselves to be irrelevant, making no difference – which isn’t a big deal in general, but becomes a bigger deal when choices are so sparse. So while playing Copper Canyon was not quite like reading a non-interactive story, it found it came dangerously close to being so.

I don’t want to end on a negative note, so let me also say what I liked most about the game: the completely unexpected, yet unexpectedly poignant, ghost scene. It surprised me, but it worked. In fact, I think I would have liked to hear a little bit more about my relation to my father earlier on in the game, just to make the pay-off of this scene even higher!


Theatre of Spud, by D E Haynes

No spoiler tag, because I failed at the first challenge – getting it to run. But why is this challenge here in the first place? I’m willing to jump through some hoops to play IF; I’ve been known to install ZX Spectrum emulators, or to run BASIC in order to play ancient BASIC games. But why on Earth would anyone enter raw python code into the 2021 Spring Thing? Surely the author could have done us the service of providing at least a Linux and a Windows executable to go along with that?

I followed the instructions, installed the python3-venv package, and then end up with this:

victor@victor-ubuntu:~$ python3 -m venv ~/catchphrase-app
victor@victor-ubuntu:~$ ~catchphrase-app/bin/pip install -U pip wheel
bash: ~catchphrase-app/bin/pip: No such file or directory

I suspect that the virtual environment never starts, but since there’s no message, I can’t be sure. (Also, I have no idea what it would look like if it did successfully run.)

1 Like

Hi Victor, it looks like you’re missing a slash in the path to the pip program


That is a valid question. And it promises such a rich seam of discussion that I created a new topic for it Why on earth Python…

1 Like


1 Like

Ok, still talking about Theatre of Spud, I’ve gotten to the ‘run’ part of the README… but now I’m again running into a wall.

victor@victor-ubuntu:~/Documents/Spring Thing 2021/Theatre of Spud$ ~/catchphrase-app/bin/python -m tos.main
Traceback (most recent call last):
  File "/usr/lib/python3.6/", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.6/", line 85, in _run_code
    exec(code, run_globals)
  File "/home/victor/Documents/Spring Thing 2021/Theatre of Spud/tos/", line 27, in <module>
    from tos.story import Story
  File "/home/victor/Documents/Spring Thing 2021/Theatre of Spud/tos/", line 121
    def build(self, pkg=None, bookmark=None, /, **kwargs):
SyntaxError: invalid syntax

And the other suggested method:

victor@victor-ubuntu:~/Documents/Spring Thing 2021/Theatre of Spud$ ~/catchphrase-app/bin/python -m
Traceback (most recent call last):
  File "/usr/lib/python3.6/", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.6/", line 85, in _run_code
    exec(code, run_globals)
  File "/home/victor/Documents/Spring Thing 2021/Theatre of Spud/tos/", line 23, in <module>
    import importlib.resources
ModuleNotFoundError: No module named 'importlib.resources'

That is due to your version of Python. Version 3.9 is recommended.

Installed 3.9 with Apt using this method. Still no luck.

victor@victor-ubuntu:~/Documents/Spring Thing 2021/Theatre of Spud$ python3.9 -m venv ~/catchphrase-app
Error: Command '['/home/victor/catchphrase-app/bin/python3.9', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.

Hi Victor, sorry this is causing you a delay.

The instructions in the readme have been tested and should work:

If you previously created a venv with Python 3.6, you will need to remove it before following those steps again:

rm -rf ~/catchphrase-app

1 Like

Okay, I also had to install a package python3.9-venv. But now I think I’m in the game.

Mood: this had better be good. :laughing:


I tried this on macOS (with Python 3.9.2 from Homebrew) and the installation went fine, but running in Terminal crashes after entering my name:

Enter your character's first name: Petter
Traceback (most recent call last):
  File "/usr/local/Cellar/python@3.9/3.9.2_4/Frameworks/Python.framework/Versions/3.9/lib/python3.9/", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/local/Cellar/python@3.9/3.9.2_4/Frameworks/Python.framework/Versions/3.9/lib/python3.9/", line 87, in _run_code
    exec(code, run_globals)
  File "/Users/administrator/Downloads/TheatreOfSpud/tos/", line 94, in <module>
  File "/Users/administrator/Downloads/TheatreOfSpud/tos/", line 89, in run
    rv = main(args)
  File "/Users/administrator/Downloads/TheatreOfSpud/tos/", line 54, in main
    presenter = story.represent(lines)
  File "/Users/administrator/Downloads/TheatreOfSpud/tos/", line 152, in represent
    presenter = Presenter.build_presenter(
  File "/Users/administrator/catchphrase-app/lib/python3.9/site-packages/turberfield/catchphrase/", line 43, in build_presenter
    rv = Presenter.build_from_text(text, index=n, ensemble=ensemble, strict=strict, roles=roles, path=p)
  File "/Users/administrator/catchphrase-app/lib/python3.9/site-packages/turberfield/catchphrase/", line 51, in build_from_text
    script = SceneScript(path,
  File "/Users/administrator/catchphrase-app/lib/python3.9/site-packages/turberfield/dialogue/", line 439, in read
    parser.parse(text, doc)
  File "/Users/administrator/catchphrase-app/lib/python3.9/site-packages/docutils/parsers/rst/", line 196, in parse
    if len(line) > self.document.settings.line_length_limit:
AttributeError: 'Namespace' object has no attribute 'line_length_limit'

Running the local server version in Safari gives

500 Internal Server Error
Server got itself in trouble

after entering my name on the first page.

I got the other Python game in the competition, Space Diner, to run fine by the way.

That happened to me too, Petter. I thought I was in, but as soon as I enter a name, I get the same series of errors that you get.

I’m very sorry @VictorGijsbers , @Angstsmurf that’s something I’m going to have to investigate deeper.
It works fine for me on Windows this morning.

I will fire up a Linux box this afternoon and see if I can find out what the problem is.

Edit: It’s likely to be an issue with a dependency package, docutils. This is frequently shared by other OS components and might be a special version on MacOS.