In Praise of the Python Games
Jungle Adventure by Paul Barter (Windows executable with Python source)
Traveller’s Log by Null Sandez (Python source)
As one begins a new IF project, the possibilities of straying from the heavyweight engines of Inform and Twine have a certain allure. Perhaps they will offer new ways to tell stories. Perhaps they’re a chance to craft an IF engine exactly the way an author would like it. Perhaps it’s simply a way for an author to tell a story in the programming environment with which they’re most comfortable.
The specific possibility of creating IF in Python crops up on the Intfiction forums every once in a while, including the provocatively titled “Why on earth would anyone enter raw Python code in the Spring Thing?” post from last year, which yields a pretty thoughtful discussion of the various factors involved. And Andrew Schultz with his charming Walking into It from last year’s Comp has proven that such a submission can place reasonably well.
I find this year’s two Python games to share some pretty strong similarities. On the positive side, both tell stories and offer interaction opportunities that might not be otherwise elsewhere. On the less positive side, both are highly idiosyncratic visions of their authors, and often resist an outside player approaching them.
Traveller’s Log is essentially a very stripped down RPG. You are given somewhat of a backstory, and then are instantly thrown into the game’s loop. In a very literal way, Traveller’s Log is a walking simulator, as that is by far the most common action you’ll undertake. Sometimes you’ll find an inn, which will house you for the evening or otherwise give you a few coins of the realm. Occasionally you’ll have an enemy encounter—I believe there are only two, a bandit and a creature called a snadwick. You can warp to another area (though they seem pretty similar) or attempt to trade with a villager in order to become more powerful: a sword to slash with, and increased magical power if you happen to be magical (which seems to be predetermined at the beginning of the game).
Every turn you are given a sitrep: your coins, your inventory, your location, and the like. Then you take another step forward, afternoon turns into night, and then you repeat it all again. It’s not clear from the outset that it’s possible to win the game, but there seem to be a few conditions to do so. As a non-magic-user, which I was for my first two playthroughs, one is kind of painful to reach: collecting 100 coins. Fortunately, there are cheats to be found in the source code that can make this effort easier.
It’s not clear why a similar structure couldn’t have been implemented with more modern comforts in Twine, though. RPG-ish by Stuart Lilford proves the general idea can done in 300 words. I’ll return to that thought.
Jungle Adventure is a parser game. Your plane has crashed, stranding you in the titular jungle. Ostensibly, your game is to survive and escape. The game offers some nifty ASCII graphics as set pieces. But, like Traveller’s Log, your commands must be precise. “Status” produces your inventory, not “I”. The examine command is instead implemented as “look”. To begin, I made it precisely two successful moves before getting stuck (but not before inadvertently jumping to my death). I even guessed that maybe a radio would be helpful. But I had no idea where to find one—turns out “look pockets” or “look clothes” reveals that “You find a 2 way radio in your pocket!”. It seemed odd to me, as the player, that I wouldn’t have already known that, and there’s not much hint that my clothes or pockets are important to me or are implemented in the game. After calling over your co-pilot, you can explore more of the game’s world through a series of menus and individually presented locales. This part of the game is reasonably logical, except again for hidden items that require the author’s exact phrasing. Consulting the walkthrough, I learned that you can take the batteries out of the radio and put them in the torch / flashlight. But even with that knowledge, I had to look through the source code to find that the precise command is “take out batteries” with no mention of the radio at all.
After killing a wolf with a shotgun, you enter a maze of a cave. (But again, only with the correct command: “go in” works.) There’s a nice little minimap that shows your approximate location, and the game becomes a series of rights, lefts, ups, and downs. I died four times in the maze: twice losing fights to snakes, and twice by bumbling into traps of swinging axes. At this point, I gave up on Jungle Adventure, doomed to wander the cave maze forever.
Conventional wisdom suggests neither of these games will place well in the Comp. Asking someone to run an unknown .exe file or fire up IDLE or Visual Studio Code is a bridge too far to many. Both games are heavily underimplemented. In the case of Traveller’s Log, it’s simply that the game becomes very repetitive—both in action and the every-turn report you get that serves as the bulk of the game’s narration. In Jungle Adventure, you will receive one “You cant do that” response after another as you struggle to enter the exact commands the parser will like.
So why, then, have I come to praise these games, not bury them? Perhaps their secrecy is part of their allure. For me, these games hearken to a pre-Internet age. They are something you might have downloaded from a BBS or purchased from a shareware catalog. You had no idea what you were actually getting. And if you were going to make a genuine attempt to play, you had better quickly acclimate yourself to the author’s expectations; otherwise, you weren’t going to get very far. Each time I entered a correct command into Jungle Adventure was a momentary thrill: I had pleased the program, and it pleased me in return. And I enjoyed seeing the number of merged entities slowly increase in Traveller’s Log, even though I had no idea what they actually did.
Being able to look at the source itself is also a kind of pleasure. Since the source is released with the game (or, in fact, is the actual game), the authors must expect us to look there. I think this is important: looking at the source and trying to discern what you need to do to progress is part of the game experience itself. These games, in some ways, become meta-games: you can’t play the game without understanding the author’s expectations. Those expectations aren’t rendered in the text of the game. Rather, the author has set up a scavenger hunt for you: “All the answers you seek are here. You simply need to decode the clues.”
There’s something romantic, too, about these authors eschewing traditional IF engines. They sailed away from all modern conveniences, departing for rough new lands. And you, as the player, get to join as one of those pioneers. Yes, things will not go well. Yes, things will break. But there are so few genuine exploration opportunities left these days. Everything else, it seems, has been mapped, charted, and solved.
These games invite you into such an intimate, walled-off experience that it becomes much like a candlelit table for two: just you, the author, and the occasional snadwick or wolf served as an appetizer. My Inform game and your Inform game are certainly good places to eat, as far as chain restaurants go. But it’s nice, sometimes, to go to this weird little basement joint that has like two tables and is only open on Tuesdays. There’s no menu, so you can only hope you like what the chef’s making.
In the end, Python games like Jungle Adventure and Traveller’s Log are love letters sent from the moon into the void. As such, they can be messy, neurotic, and inchoately passionate. They have a difficult relationship with gravity. But open your hearts, dear readers, and come love the code and the person behind it.