Victor's Spring Thing 2021 Reviews

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!)

7 Likes

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.

3 Likes

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.

4 Likes

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!

3 Likes

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
ie:

~/catchphrase-app/bin/pip

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

Thanks!

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/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/victor/Documents/Spring Thing 2021/Theatre of Spud/tos/main.py", line 27, in <module>
    from tos.story import Story
  File "/home/victor/Documents/Spring Thing 2021/Theatre of Spud/tos/story.py", 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 tos.app
Traceback (most recent call last):
  File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/victor/Documents/Spring Thing 2021/Theatre of Spud/tos/app.py", 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:

2 Likes

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/runpy.py", 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/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/Users/administrator/Downloads/TheatreOfSpud/tos/main.py", line 94, in <module>
    run()
  File "/Users/administrator/Downloads/TheatreOfSpud/tos/main.py", line 89, in run
    rv = main(args)
  File "/Users/administrator/Downloads/TheatreOfSpud/tos/main.py", line 54, in main
    presenter = story.represent(lines)
  File "/Users/administrator/Downloads/TheatreOfSpud/tos/story.py", line 152, in represent
    presenter = Presenter.build_presenter(
  File "/Users/administrator/catchphrase-app/lib/python3.9/site-packages/turberfield/catchphrase/presenter.py", 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/presenter.py", line 51, in build_from_text
    script = SceneScript(path, doc=SceneScript.read(text))
  File "/Users/administrator/catchphrase-app/lib/python3.9/site-packages/turberfield/dialogue/model.py", line 439, in read
    parser.parse(text, doc)
  File "/Users/administrator/catchphrase-app/lib/python3.9/site-packages/docutils/parsers/rst/__init__.py", 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.

The problem is that docutils 0.17 added some new settings (namely, line_length_limit) that your code (or one of the libraries you’re using) is not setting up properly. It can be worked around by amending the install_requires directive in setup.py as follows:

install_requires=[
    "aiohttp>=3.7.3",
    "turberfield-catchphrase>=0.18.0",
    "docutils<0.17"
]

(See also: Docutils: Documentation Utilities / Bugs / #415 0.17 version incompatibility with some 3rd party code)

1 Like

Thanks @ArdiMaster . Does this mean you have the game running now?

I do! Looks interesting so far.

That’s great! I’ll step back now. Sorry @VictorGijsbers for diverting your review thread.

Thanks! That fixed it.