Adventure, or Colossal Cave Adventure, was written between 1975 and 1977 in Fortran. Brandon Rhodes ported it to Python 3, initial release in 2011, and still maintains it. We talk to Brandon about this wonderful game.


Transcript for episode 151 of the Test & Code Podcast

This transcript starts as an auto generated transcript.
PRs welcome if you want to help fix any errors.


00:00:00 You’re standing at the end of a road before a small brick building. Around you, the forest. A small stream flows out of the building and down a Gully. Let’s try east, and then a bit later, it’s now pitch dark. If you proceed, you will likely we fall into a pit. Oh, no. Let’s try to light the lamp. Your lamp is now on. You were in a debris room filled with stuff washed in from the surface. A low, wide passage with cobbles becomes plugged with mud and debris here, but an awkward Canyon leads upward and test and code on the wall says magic word. X-Y-Z-Z-Y. What is happening is that I’m playing a game called Adventure, which you can Pip install. Thanks to Brandon Rhodes. Adventure is a faithful Port to Python Three from the original 10 00 19 77 Fortran code by Krauther and woods that lets you explore colossal cave where others have found fortune and treasure and gold. Anyway, it’s a really fun text based adventure game, and in this episode we talk to Brandon Rhodes about this marvelous game.

00:01:20 Welcome to Test and Code.

00:01:30 Well, welcome to Test Code. I’m super excited to have Brandon Rhodes on the podcast.

00:01:37 I first ran into Brandon at Python Portland, but Brandon, can you introduce yourself?

00:01:44 Hey, I’m Brandon Rhodes.

00:01:48 I’m, I think most widely known for my talks at Picon conferences and events in the United States, and then on a few happy occasions in other corners of the world, I often have to really dig in on the topic before I understand it. And early on, being a member of Python Atlanta, I found that the fact that I had to kind of go so deep, go into a topic and come out with a real understanding, I could then share that with others by giving a talk. So probably most widely known for my talks at Python conferences, but I also used to blog more regularly.

00:02:34 I have more permanent thoughts up on the site I’m writing called Python Patterns, and then I do have an open source project or two. From childhood, I enjoyed going out and looking at the stars and the planets. And so I maintain a user friendly Python astronomy library, an old one called Pyefim, and a more modern numpybased one called Skyfield that are designed to be easy to use and learn for the hobbyists that wants to know where the stars and planets are at night.

00:03:08 Wow, that’s neat.

00:03:10 I was looking up.

00:03:12 There’s a website called Roadsmill.org. I think that’s yours.

00:03:17 It’s my website, yes.

00:03:19 And you’ve got a list of talks up and I have to scroll to get through them all. So you’ve given a lot of talks.

00:03:29 This isn’t something everyone can support, but I kind of have a reluctance to ever give a talk a second time if it’s been recorded and put on YouTube. If it hasn’t, then given that conference number two, I go to probably has a mostly different group of people than number one.

00:03:51 I don’t feel bad about giving a talk again, but if it’s already up on YouTube, I feel a bit awkward about giving an audience that has come all the way to a conference, something that they could just watch online. And so I do try, especially if a conference has invited me and is giving me free registration and I’m going to go to City and go to a conference I normally wouldn’t. I like to come up with something new for them, and that has, as you can see, that’s resulted in a lot of unique talks. And each time I like to try to dig out something new that I’ve been doing or thinking about.

00:04:36 I ran across this project of yours called Python Adventure.

00:04:42 It says it’s a faithful Port of the Adventure game to Python three from the original 1977 Fortran code. I want to know about this game and also kind of how you got into being the one to do this Port. Did you play these old games on, like the Fortran ones or anything else?

00:05:02 I was in the unique position of having a father who worked at Bell Telephone Laboratories.

00:05:09 Wow.

00:05:10 And so one of his best friends where we lived in Massachusetts was a coworker. We sometimes would go over to their house and me and my sister would play with their daughters. And late at night, whenever the parents would still be talking, they found that they could keep me quiet if they needed to by turning on the green and black terminal in the co workers bedroom upstairs, using the modem to dial into one of the computers where they worked at Bell Labs. And first dad found that I could be kept quiet for a while by teaching me the CD command because it lets you kind of explore around the computer. You can CD and go into a directory and LS to look and look at all the strange file names and as a child can’t guess what they are, then use CD and you escape back out. Dwd will show you where you are.

00:06:13 And I had to be shown that because Adventure was not on the standard path, so I had to CD to the games directory in order to then run adventure and Adventure, however, was so intense for me that I often once I died again in the game, I would just play the CD and CD game for 20 minutes to kind of let my heart rate slow back down.

00:06:42 So the game itself is a text based game. It was the very, very first game that allowed you to explore a virtual world.

00:06:53 All of the first games were invented for the computer, were symbolic, were things like chess or things like checkers that already in the real physical world involve abstract symbols.

00:07:10 A night in a chess board or a checker which has abstract rules around how it behaves the adventure game was first written by Willie Crowder, who was a caver, and he invented a little game where by typing little commands, go north, go south, get keys, unlock great, you could.

00:07:37 And the instructions told you to go find treasures in nearby cave. You could find your way into a cave system, which he modeled on a real life cave system in Kentucky. So for the small intersection of people that are both cavers and who play this game, apparently they recognize the series of Chambers you go through as possible.

00:08:00 And he added a few things which you do not find underground in Kentucky.

00:08:06 A Rod with a rusty black star on the end that you can discover by accident creates a Crystal bridge. When you wave it over a fissure you can’t cross, you find a nugget of gold and a few other treasures, and occasionally a dwarf will come around a corner and try to murder you with an axe.

00:08:28 This was all invented by a student who wrote this, and he then kind of got bored of the project, and someone named Don Woods picked it up and added several more elements to the cave, added some more treasures and added, I think, unreasonably hard end game to it.

00:08:49 So I as a child, when the adults just wanted to keep talking and we were getting tired, they put me upstairs and I would sit. And I regret that people play the game not in the dark because it’s conceit is that once you’re underground, which is a few moves in, you’re in the dark, and you can’t see what is outside of the small pool of lamp light from your battery powered lamp. And I think for some players, they only remember they’re in the dark if they play in the lighted room when it says a pirate jumps out of the shadows and steals one of your treasures and takes it away.

00:09:28 But when you’re not yet ten years old, not in your own house, but in a stranger’s house, upstairs in the dark, only maybe the murmur of the adults talking far below you, I would get jumpy enough that I would actually jump and my heart would raise when the next description that came up at 300 bot on the screen was not the words I was expecting from going west from the hall of the Mountain King as you’re trying to figure out the layout of the caves, how to get in and out alive. Because if your lamp goes out, you fall into a pit and you die.

00:10:10 You come to get used to what the next room is. I’m going west. I’m going to be in the hall of the Mountain King, and there’s a sudden startle if the words that come up are a good deal more alarming than that. So having played this as a kid, I think I’d seen a tweet or a note about it that mentioned an Easter egg. I had never encountered. And that made me wonder how many Easter eggs are in the game? Or are there many more than that? And as Python Three was coming out, I thought to myself, what if I re implemented this in Python Three? I would get to go through the Fort, ran line by line and kind of see how it worked on the inside, since it was really the first interactive fiction that ever really captured my imagination.

00:11:04 That’s incredible. So you converted it line by line?

00:11:09 Yes.

00:11:10 And Fortran of that era, written by an undergrad, is quite startling code. Among other things, it doesn’t do structured programming. You can’t say if a is greater than one and then have multiple lines of code that switch on or off depending on whether a is greater than one. Instead, you have to say, if a is less than or equal to one, go to line 1002 and then have a line of lines of code that you do want to run if a is greater than one, and then label the next one line 1002. So a number of the conventions of contemporary Fortran were backwards. You’re constantly reading the situation in which you don’t want to do the next few lines of code. And so I don’t even remember if I found more than like one additional Easter egg.

00:12:08 But I got to translate a lot of backwards lines of Fort ran into Python Three and then also do what I wanted. I wanted to get practice with. Python Three is very stringent rules around text, Unicode bytes, which was something I saw a lot of people were having difficulties with. And I wanted to go ahead on a project that I wasn’t on the clock and encounter all of the perks that I was reading about Python Three inflicting on its audience.

00:12:37 Cool. This is even a cooler story than I thought it would be.

00:12:41 This is great.

00:12:48 This episode is brought to you by Pie Charm. Have you ever been working on several files at once, or maybe writing some code and using a different function even in this file or some other file as a reference, and also have the test code open and maybe the color of the function. For an example, I do stuff like this all of the time, and to save time jumping around, I’ve started to use PyCharm BOOKMARKS. You just drop a bookmark in the gutter wherever. Then you Select View Tools, Favorites and then you’ve got a little window with all of my BOOKMARKS that are right there and clickable. I can even edit the descriptions to remember why I booked Mark these things in the first place. I like making sure I do this and using things like work on reference, test code, example usage, stuff like that. Just one of the ways PyCharm saves me both time and mental space. Try PyCharm yourself by going to test and code PyCharm. Savetime use PyCharm.

00:13:50 One of the things I think is interesting is that you did recreate the 300 bot situation.

00:13:59 Yeah.

00:14:01 If you run it from the command line.

00:14:04 I can’t remember, I’ve done both.

00:14:07 You can import it and run it, or you can run it from the command line and one of them does the bod thing, right?

00:14:15 So it gives you responses instantly and doesn’t try to modulate the return value. What’s printed on the screen if you play at the Python prompt, which was something I did mainly because I realized I could, and ostensibly because since it was a project that got me into Python Three, I thought, well, why shouldn’t other people be brought to the Python Three prompt in order to play the game? And so you can play it at the Python prompt. An import statement will then make some extra built ins available that make things like Go West, get key and unlock great will make those available as words right at the Python prompt.

00:15:05 But if instead you want to use a more normal prompt at which to type, if you simply from the command line, run the module, then it offers more normal custom read line prompt.

00:15:21 And to recreate the experience I had of sitting there at the edge of my chair, waiting to see what the pirate had done to me or whether the dwarf had gotten me. This time it prints out the letters slowly. I might have upped it to 1200 bot. I’d have to look back just in order to make it a little less tedious for people more accustomed to modern terminal speeds.

00:15:50 I think that at least they read me does say 1200 bot. I got that wrong.

00:15:54 No, that’s fine.

00:15:57 And honestly, I don’t remember exactly what bot I played it at, but this connects with a whole other subject.

00:16:09 Was it difficult to slow it down? I don’t even know how to do that.

00:16:12 You just write one character at a time and then time dot sleep for enough time to so you get a second, divide it by 1200, and then you do the normal thing where it wouldn’t work to sleep that amount of time. That would be a little too slow because you’ve already used up a little time writing it to the screen. Right? So you write it to the screen, do a little subtraction to figure out how much of a little slice of time you’ve already used and sleep for the rest of it. But you get a very close approximation as a result of one $200.

00:16:47 Wow. Okay.

00:16:49 Yeah, that was so obvious. I wouldn’t have thought to do that.

00:16:54 It works. Computers are so fast these days. You can just sleep for a tiny fraction of a second and then it’s like, okay, it’s a fun experience.

00:17:03 Though, because when I replayed it, I forgot that that was part of the experience, was waiting for the words to come out.

00:17:18 I think that it’s a very broad issue these days that people look at text rather than reading it.

00:17:26 Generally, as you’re looking at an article online, you need to get back to your work. You’re looking at each paragraph, you’re not reading it, and to some extent, I think one that makes people tone deaf to an author’s voice. If you’re simply looking at each paragraph to pick something out, you can’t tell the difference between someone who’s phrasing is rich and cadenced and someone whose language is very maybe bald and plain.

00:17:59 I remember it was an endless frustration to read fantasy books people would recommend to me in late College after I read Lord of the Rings, and I wondered how they could recommend such badly written books. And it eventually became clear to me that some people don’t hear a voice in their head as they read, and so there isn’t a difference to them between the rich cadence of Tolkien and the perhaps more blaring squawking writing of another author, because they literally don’t hear either as speech. They see it on the page as Wizards and dwarves and excitement and don’t pick up on there being a cadence in the writing as well. And I also have a private theory that we can talk about some other time. That the reason graphic designers no longer like putting extra space after the period, as always, had been done in European books, and don’t like putting a double space in Monte space. Typing after a period ends a sentence is partly because they look at things rather than read. If you just look at a paragraph from a distance, why are there these extra wide spaces? They don’t match, they don’t fit.

00:19:15 Whereas if you’re reading and going for cadence, it is helpful that the gap is a bit larger, where your voice will pause longer. And I realized as I was playing it at full speed, at full modern terminal speed, I realized that something was missing, and it was that I wasn’t, so to speak, being forced to read the word sequentially. I wasn’t reading a dwarf comes around the corner and waiting on the edge of my seat to see if the knife gets me.

00:19:52 I added that back not just because of nostalgia, but also because I found that I wrote with I wrote along with the text. I experienced it linearly if it came onto the screen just about as fast as I could read it.

00:20:14 Does it require very much updating, or is it pretty much keep working through the new versions of Python?

00:20:22 Fortunately, it uses completely standard Python data structures, lists, and dictionaries.

00:20:32 I got everything pretty much, I believe, correct with the Unicode or encoding in and out. Obviously it’s original data is all ASCII because it was 1970s, where they couldn’t easily put tildes on things.

00:20:53 The only report I get is at this point, once every few years someone will encounter a genuine bug. There will be a place where I thought I was faithfully copying what the Fortran code did, but missed a little nuance that I didn’t think to write a test for because I didn’t get that the expression had that nuance.

00:21:17 And it only happens if you’re not carrying the chain when you do something to the bear or whatever the situation is, and someone will run across that circumstance and open an issue. And I have to go in and dig back into that code after three years away.

00:21:37 And at first, as I don’t know if this happen, if you have any open source projects, but there’s always this, oh, come on, I worked hard. There can’t be yet another problem with that. And I always kind of have this emotional sort of difficulty. I have to get over with the fact that something did go wrong and I just want to open this issue. And how could this maybe it’s the fault of the Indianness of the system they’re running on. How could this? And I’ll go in and I’ll try to run that command and not have the chain with the bear and the same exception happens, and I go, well, my gosh, ten years after writing that, there is another bug with it and I write a test case for it and go in and get it fixed. But no, the additional versions of Python have so far been non events.

00:22:33 The three series has been fairly stable with respect to data structures and strings.

00:22:38 Well, now I’m curious how you would test it. So what a test look like for this?

00:22:45 Well, there might be.

00:22:50 So you’ll recall that through an egregious hack that was the subject of a famous lightning talk at Python many years ago. Through an egregious hack, I got the game where you could play it a pair of hacks, or you could play it at Python prompt, the hacks being one getting all of the words, all the vocabulary of the game, and adding it to builtins so that when you Typed get open Perin lamp, both of those symbols would now exist and not give you a name error. The other egregious hack being, well, what if you just type west?

00:23:29 Because in the game’s built in interpreter you can type west or more often W because you only have so long to live.

00:23:39 So the game has single letter abbreviations for the Cardinal directions. You type W and you go somewhere else.

00:23:46 At the Python prompt you are going to have to type W, open, close, perenn, enter in order to run this W built in function that I had added. So I gave a lightning talk once at Python where I introduced the project and said that this is almost a hopeless situation because in Ruby you can invoke a function by just naming it. You have a function named W. In Ruby you can just say W and it happens in Python if you type W and hit enter of the prompt, it just says built in function W or function, W or whatever.

00:24:22 However, that is doing one thing, it is running the wrapper of the object F oh my God. And so I just built a special little class, of which all of these keywords are instances that you can invoke not only by saying W OpenClose grin, but you can also invoke simply by asking for their reper. Asking for the reper of the W West object also runs the game engine, figures out where that navigates you to, and then prints the description of the new location on the screen.

00:25:04 That is kind of the thing that let me make it usable with the prompt where you wouldn’t have to follow the directions with open and closed brins and spend all your time typing.

00:25:15 And I realized once I’d done that that I could now test the game using docktest.

00:25:25 I did not think we were going going this way.

00:25:27 All I needed to do was write some text files, stabilize the random number generator at the top so that either the dwarf kills you or not deterministically when he comes around the corner, and then just have a dot test where there’s the triple chevrons W for west, and then the description of the room that should come up. And there are one or two, I think, complete walk throughs of the game as dock tests, which you can also just read through if you want to experience the game without having to learn all of its events yourself. So that was fun, because writing them kind of and oh wait, I got to test this circumstance kind of took me through all of the circumstances that could occur in the game, and then there are a few edge cases, like when people would open bugs that didn’t seem worth a full walkthrough. Why visit every room over again for this one little circumstance? There are also some dock tests that reach into the internals of the game, adjust some variables to go ahead and set me to a certain location, and then see what happens with the chain and the bear or whatever. And yeah, those are all in the form of docktests.

00:26:42 That’s a brilliant use of Doc tests. I love that.

00:26:44 I was extremely pleased with how that came together as I was adding the ability to play it at the front. It had not immediately occurred to me that this solved my testing story as well.

00:26:57 But it did nice.

00:27:00 That’s just so cool.

00:27:03 I think I’m going to read through all of these, actually, before I do that, I kind of want to explore it more. I didn’t realize the game had so much richness. I don’t think I’ve done that.

00:27:15 Even if they knew all the secrets and have done it before. How long does it take to get through the game, approximately? Do you know.

00:27:28 A speed run if you happen to not get killed by a dwarf? Could probably be done in somewhere between ten minutes and 30 minutes if you know what you’re doing, if you’ve memorized the maze that is in one part of the cave, and if you are just going through each treasure and getting in and out, it can be done rather quickly if you remember where everything is.

00:27:57 It was very fortunate, I think, for the future of games. As this was written in the 70s say a positive for the future of games is that the game was fun and clever.

00:28:12 It has little jokes, it has kind of a Rye humor about it. And the fact that it didn’t take everything deadly seriously, but kind of having fun with being a small enclosed realm of text and adventure, I think really set a tone that was taken up by the whole tradition that followed it, from pure text things like Zork to the Sierra games. I don’t know if you’ve ever played King’s Quest or one of those games that combined graphics and text, but those also tended to have humor as one of the elements.

00:28:56 The downside I would say to the game is that the extent of its puzzles are try to guess what to do so you are not told upfront what the possible set of verbs are.

00:29:14 So you have to discover by accident which verbs resulted saying, I don’t know that word and which verbs the verbs like swing result in, oh, nothing happens. So you now know you can swing things. It wasn’t confused by that word, but what are you supposed to swing and win? And if you don’t happen to try swinging the Rod with a rusty black star when you’re standing in front of the fissure you can’t cross, you’re never going to discover that’s how to create the Crystal Bridge and be able to move further west. So I’d say my criticism of this design is that the puzzles tended to just be walk around the cave doing things until something worked, which I think was a downside of many games in its tradition from there on out. And I think gaming is still recovering in many respects from the, well, just do stuff until you guess approach to an adventure.

00:30:19 Interesting, we kind of came back to there because when I was playing video games, a lot of the games I played when I was younger, things like, I don’t know, just asteroids and mapping and arcade like games.

00:30:36 Most of them you kind of knew. I mean like Donkey Kong, you got to get from the bottom to the top and jump over barrels. It wasn’t complicated, there wasn’t any guessing.

00:30:46 Plus the input was like a joystick and a button so you could try combinations of that. But really that’s really it. You can’t type in any word and then we kind of got, I don’t know, we had a PS two for a while and had a snowball game and I’m like, I’m good with this. I played that all the time. And then this when I had a small child, and then we didn’t have any games for a while. And I thought, let’s get another one. And so we got an Xbox, and then it was one of the Assassin’s Creed games, and I like to play games like 20 minutes at a time. And I jumped in, and 20 minutes later, I wasn’t even through the intro. Wow. I’m like, oh, my gosh, I want to try to play this, but you just sort of have to wander around and figure out what you’re supposed to do. To me, that’s not fun.

00:31:36 So there are some people for whom their sense of exploration is apparently satisfied by having no idea what to do with the Rod with the black star on the end and just wandering around a cave.

00:31:53 As a child, I obviously had some capacity to be entertained, wandering around with a small collection of objects, a key age, a few other things, and trying to figure out what could I do in this virtual world?

00:32:09 But there is something to be said for knowing the rules, knowing what you’re doing, knowing what all the objects are capable of, and trying to put together interesting solutions.

00:32:22 For me, the difference there between those two styles of play really came out when back in the 20 Odds, I played a little bit of net hack. And there are two ways to play net hack. One where you don’t know what you’re doing, don’t know what objects do, aren’t sure what all the vans are doing and are trying to learn. And the other where you read the spoilers files. There are these big there’s this little tome you can download, which is the official spoilers for how wands work, for how spells work, and so forth. And I did a little playing without guidance. I did a little reading, I did a little more playing, and then I went and read all the spoilers files because I realized there might be a person that wants to play, let’s say, a World War II combat game.

00:33:17 Learning by trial and error. What does a grenade do?

00:33:22 What happens when I pull the pin out?

00:33:25 When do I use a pistol? What is it good for? Oh, what is a rifle? I don’t know what a rifle is like. You can imagine going into a World War II game with no idea of what the objects do and a person being entertained by discovering one after another what the objects do.

00:33:42 But there’s a whole other way of playing where you do some reading, figure out what each of those objects are for and where the challenge isn’t. What does this object do? The challenge is, oh, I know what this object is good for. Let’s see if I can use the objects in the right combination to keep my men alive and accomplish my mission.

00:34:07 And I realized that adventure had trained me about one kind of joy of not knowing the rules, not knowing what I can and can’t do. And adventure isn’t hard enough that you aren’t going to have a good time wandering around and kind of learning most of the rules from the ground up.

00:34:28 Net Hack is not that kind of game, at least for me. If you go in not knowing the rules, you’re just going to die over and over and over again very early and give up.

00:34:40 Unless in my case you sit down and read all the spoilers files.

00:34:45 And is that cheating?

00:34:48 Am I missing out? And I ask myself, well, is the person playing the World War II shoot them up missing out if they just go in with a knowledge of what the tools are for? And I decided that with Net Hack I wasn’t going to play it, I wasn’t going to enjoy playing it that way, that I was going to accept all of the knowledge I could get from the Spoilers files as the kind of knowledge that you go into a game with rifles, knowing how to use them, and that it is two very different styles, and game developers these days have to balance the two. If you don’t have the latter, if you don’t have that second phase where you now know all of the basics, you’re trying to put them together and solve puzzles in interesting ways, you don’t get replayability.

00:35:49 If a game is just about exploration, then once you’ve explored you can maybe wait a while, forget most of the game and go back, get to explore again. But that feeling of novelty when you first reach the Fisher and don’t know how to cross, it only can happen as a novelty a few times.

00:36:11 Whereas with something like Net Hack, where Net Hack is just hard, even if you know every single rule, every single object with a game that’s really hard but open to interesting solutions like that, there’s a lot of replayability. Because even being an expert for me in the last decade, I’d say FTL faster than light. A game where you’re on a spaceship trying to race and get secret information to the Federation before the rebels attack them, is a perfect example of something where even once you know all the rules, you are fighting tooth and nail to think of solutions to the problems you meet as you encounter random, increasingly difficult enemy ships.

00:37:00 There’s definitely those two different approaches, and it sounds like the Assassin’s Creed game was wanting to kind of lead you past over maybe an hour or two of tutorial, lead you through the not knowing what you’re doing stage to then get you into the game having a better than average chance of not having the game end very quickly as you run into dangerous situations you can’t handle.

00:37:34 Yeah, and I’m not your typical player as well.

00:37:39 I’ve got friends that just love that when a game to complete it takes 1020 30 hours because it’s so much they get so much value for their money. They get so many hours of entertainment, and maybe I want to dedicate, like 10 hours of playtime per year, not in a weekend.

00:38:04 I follow a game developer who I met once after we made some comments to each other on Twitter many years ago. I then had the opportunity to meet him when I was at a conference in Europe.

00:38:18 Yuri Hornman, his Dutch, now lives in Toronto and works in game development, has been doing it longer than almost anyone else, has incredible insights. But one of the things he tweeted the other day, he admitted he plays everything on easy.

00:38:38 He’s there for the exploration. He’s there to learn and admire a game system. He doesn’t want to spend the minutes he has on a game each day trying and trying to accomplish something difficult or getting killed over and over by a particular boss. He wants to have a good time, and so he plays everything he says, uneasy.

00:39:02 That’s his big confession, he said, is that that’s how he chooses to experience games.

00:39:09 I do think it’s neat that games have that option now that people can explore a game, learn how it works, and then go, oh, I want to replay it, but I want it to be more difficult.

00:39:19 I started playing FTL on Easy because the learning curve would have been, I believe, too steep for me to enjoy. Otherwise, if every small mistake had gotten me killed, then I don’t think I would have enjoyed it as much as being able to be in that beginner mode. Learn the mechanics while I’m not as vulnerable as the spaceship I’m fighting, and then ramp up the difficulty level when I’m ready to have for FTL, people call it the real experience of playing it on the intermediate level that it was designed for.

00:39:58 One of the issues I would say with adventure is that there wasn’t a mechanism for that back in the 70s, the very first foray again into writing a virtual world, something that’s not chess or checkers.

00:40:14 But is it a cave system with descriptions that you get to enjoy? And I would say with adventure, you just kind of play until you’re out of things that interest you. I would say that some people just, all right, I’ve collected half the treasures. I’ve gone to all the places I can figure out. I think I’m done, and the game won’t help you reach that decision. You just have to get bored and stop.

00:40:45 Then there might be the people that are willing to, on a sheet of paper, try every single direction from every single room, because there’s some rooms that if you go northwest, though it’s not clear from the description, there is a crack leading that direction leads you to a secret room or whatever. So you then get rewarded with some more treasures and some more achievements. If you do that, then there are the people that are willing to explore using the little chart, they’re writing the mazes in all of their detail, one of which is easier because each room description is different. You’re in a maze of twisty little passages, all different. You’re in a twisty maze of little passages, all different, and each room description is subtly different so you can keep up with where you are. But then there’s the maze where every room looks the same. So you have to drop objects. You have to go out into the world, collect more objects, and drop them in the rooms of the maze to make them distinct as you’re writing down all of the crazy East, West, North South nonlinear connections between the rooms. So there are people that are willing to go through that and get another treasure or two.

00:41:52 Then if you collect all the treasures and make it to the end game, you wind up in this really big room, and there is one thing you have to do to get out of the game and finish it. I never figured that out until one day I saw a list of the verbs the game supported and realized it was one verb I hadn’t used.

00:42:13 If I had not happened on that fact, I would never have finished the game.

00:42:19 I don’t know how anyone has ever had patience to finish without getting some kind of hint, but if you do that, then you may get 249 points out of 349 points out of 350, and you’re nearly there. That last point requires you to do something obscure and non obvious with a magazine, and you would only discover the answer if you just started doing hundreds of things with a magazine and checking your score after doing each one to find out what the one thing you can do with Spelunker today in order to earn that last point. So the game sort of you finish the game because you get bored and frustrated, and so unfortunately, the game kind of sends you away.

00:43:15 You finish it by being too bored and frustrated. I would be surprised if anyone has ever figured all of that out. Every one of the 350 points without some help, or just without having an extremely high tolerance for endless experimentation because you don’t know it’s a magazine that gets you. The last point could be anything you could do with any object that randomly without telling you, earns you a point.

00:43:41 Well, now I know it’s the magazine.

00:43:45 Sorry, spoilers.

00:43:49 It seemed a big problem with that initial generation of adventure, and maybe some of its immediate successors is that there isn’t.

00:44:02 The only difficulty level is when do you stop? When do you get frustrated and decide this is pointless and so everyone’s last memory of it is likely to be, well, I gave up and went and got some help, and so I finished. Or I just didn’t accomplish anything for the last 10 hours I was playing, so I just stopped.

00:44:25 And that’s a very unfortunate difficulty metric. You just stop because you get frustrated and bored and know that you gave up on the game.

00:44:34 But for that very first outing of Interactive Fiction, unfortunately, quitting is the only mechanism for controlling the complexity.

00:44:45 Yeah, well, actually that was my experience with Halo. So I tried to watch people play Halo, and it was on easy mode, of course. And I would still just get stuck on some ship or stuck somewhere with nowhere else to go. And I can’t tell that there’s anything to do. One of my daughter’s friends that was an expert at Halo, I’d have to ask my daughter to ask her friend how to get out of something. And then she would eventually just come over and show me and I’m like, oh, okay. And then I could continue on. And I just got to the point also just that I was bored with it.

00:45:23 But it’s just me. I’m not a shoot em up kind of person. I don’t enjoy, like, first person shooter games.

00:45:31 Anyway, I’m actually more excited about trying this adventure game. I only played it a few minutes. But is there, like, you were saying, that maybe there was a list of verbs? Is there a list of verbs somewhere that I could kind of cheat that way to find those out? Or I have to look at the source code.

00:45:48 I’m not aware that there’s any way to get the game to display the list of verbs, either by finding documentation online that lists them or by looking at the files. You do have to go outside of the game to find them. Obviously, if you import built in, you could look for things that you don’t recognize as built in words. But yeah, the source code or an external reference, I believe are the only ways to do it. If you type help in the game, it tries to give you some general advice. I don’t believe it has a mechanism that will list the verbs.

00:46:28 Okay, well, I’ll try to figure that out and just play. But one of the things I liked about some of those old games was just like you were saying, having a piece of paper and just writing my own map or writing down the things that would work. Oh, swing works. I’m going to write swing down or, you know, north. I can just type in and it works. I don’t have to type the whole north thing, things like that.

00:46:52 Yeah. And because as I drew my little map of it, one thing I did enjoy again is because at least the opening sections are based on a real cave.

00:47:09 You start next to a well house for a large spring. You follow the Creek downhill, and then the stream bed goes dry because the stream pours into a little slit in the rock.

00:47:27 When you then have figured out how to get into the cave system, that same little stream of water keeps turning up deeper and deeper into the cave, and you can kind of trace out all the places it visits on its way in and out of the limestone as it descends into the Earth. And so mapping was kind of neat because there is a geologic story being uncovered in the initial phases of the cave, which is, again, a real one based on a real cave system where things like water and underground creeks are behaving in realistic ways, working their narrative in and out of yours.

00:48:12 One last thought. I found that I was last year able to introduce several people to antique interactive online gaming by reading Adventure to them and letting them play it from the other couch by telling me what they wanted to do next. One of the tedious difficulties for many people, as we’ve just discussed, is learning the vocabulary. I want to do this with a Rod, but I’m having to guess what verb the limited vocabulary of a game might support.

00:48:48 Well, if the person playing is just asking you a friend, well, I want to try waving the wand.

00:48:56 You can say swing Rod and then tell them the result. You can translate between their intuition, which might be correct, about what they want to do, and the game’s limited vocabulary. I discovered this by accident when I was on a trip with some friends at night.

00:49:14 We got on the topic of computer games. I mentioned adventure, and they were intrigued. So I started it on my laptop there in my lap, read them the opening description, and they started saying, all right, well, we want to go into the building. So I entered the correct command for that, and I read the next description to them, and they got about an hour into their first interactive online fiction, thanks to the fact that I could sort of impedance match and remove the difficulties of vocabulary that the gamer playing an old vocabulary limited game like this tends to encounter. I could also do things like kind of let them know if they were going if it wasn’t going to work, because if they try doing something that doesn’t work, I could say, yeah, it doesn’t work.

00:50:03 Well, I don’t think that’s going to work. And whereas the player playing at Solo just has to try 30 or 40 verbs for what they think the solution might be, and even then they might be right and not a thought of the 41st verb, which is the correct one.

00:50:19 A human listening to the person’s, I want to go down there. Yeah, I don’t think you can go down there. You can just go ahead and short circuit the tedium and let the person focus on the exploration.

00:50:33 It was sort of fun.

00:50:37 It was only by accident I came across that idea of letting other people explore through me and my voice the world of an interactive text game.

00:50:47 Well, you could do that as a group thing, then just have a handful of people in the room.

00:50:52 And they come up with different ideas that play off one another because there were a few people there. They also will remember things the other person doesn’t. One person will say, Swing the Rod, and the others will say, no, we tried that here, and they make progress faster because their corporate memory might be stronger than the individual memory.

00:51:12 Yeah. Oh, neat. I love that idea.

00:51:16 Next, I’m planning on trying. I believe it was Yuri I saw recently somebody retweeted talking about there was a game called The Hobbit that came out in that first Zork era collection of interactive text games. But it was unusual in that the characters are moving around and doing things even when you can’t see them. And apparently each playthrough is very different because Gandalf might have wandered off somewhere else this time and not be at Rivendale when you get there. So I’m planning on a few playthroughs of that just because apparently people who were there for that era really remember that as being an outside the box unusual game, because sometimes you just can’t win because Gandalf has gone and gotten himself killed by a Goblin. And so you’re not going to win this time. Yeah.

00:52:09 Oh, Randy, the Zork is actually how I got to Adventure in the first place. Yeah, because I didn’t think it was real.

00:52:22 I’m a big fan of the TV series Chuck.

00:52:25 And in that game or in that show, the main character and his old best friend used to play Zork in College.

00:52:33 And I’m like, Is that real? Because I’ve never heard of it. And I looked it up and it’s like, oh, yeah, it is real, and it’s based on Adventure.

00:52:42 And then I looked at both of those, and I’m like, I wonder if there’s Python versions. I want to play them.

00:52:48 And then came across your adventure. And I’m like, oh, my God, Brandon, did Adventure? That’s cool. Do you know if there’s a Python Zork?

00:52:55 I haven’t heard, but some of those later games, maybe adventure itself, I’m not sure.

00:53:03 There eventually was an era where writing those was so popular that someone came up with a table driven where you didn’t have to do any coding. You just could write a series of text files in a certain markup, and a generic interpreter could open your file, understand your map, understand how your objects interacted, understand your special verbs and where they didn’t apply.

00:53:32 And that by just creating this table of words and replies and location descriptions, you could power your own text game. And I believe that Zork was forwarded to that interpreter system, whose acronym I forget. But once games have been forwarded to that more generic table driven form, you’re often able to run them without needing to find a specific implementation of anything but that table driven system for your operating system or programming language of choice.

00:54:06 I’ll check it out.

00:54:09 Did you ever read those choose your own adventure like books?

00:54:12 I did.

00:54:14 Some of them had hit points and I would die part way through and you’d have to decide whether to cheat and to just keep going and pretend like you were still alive.

00:54:22 Do you know if those came before these text adventure games or if they were after?

00:54:28 I know the ones I read came after adventure and maybe work but I would have to look at publishing history that I don’t know to find out.

00:54:40 Did the very first one proceed or follow or if they had any relation if they built on each other or not. But anyway, interesting.

00:54:50 Yeah, and it’s interesting a whole other subject why some ideas became technically feasible but then didn’t happen for 400 years Choose Your own Adventure has been technically feasible since the invention of the printing press. Actually feasible for that if you were willing to do it in a scroll or handwritten Codex. But for some reason it didn’t happen to like the 70s or 80s and I’m very interested by ideas like that that are obvious in retrospect. Why didn’t the Romans have choose your own adventure? Yeah, but for some reason it’s a form that came around the same time as interactive fiction.

00:55:36 Yeah, I’ve taken a ton of your time but I’ve had a blast these memories of the past. So thank you first off for doing this conversion so that we have a Python version of adventure and also thanks for coming on this show.

00:55:50 Thank you very much for the invitation. Hope you have a good day.

00:55:54 Thanks.

00:56:01 Thanks Brandon for that super fun discussion. Thank you. Also to Patreon supporters join them at testinco.com support thank you Pie Charm for sponsoring the show. Save time, use PyCharm and try out BOOKMARKS. Check them out at testingco.com PyCharm that link is also on the show. Notes at testandcode.com that’s all for now. Now go out and test something.