Tuesday, September 9, 2014

Adventure of the Week: Dreamer (1983)

This week's subject might be one of the earliest intentionally surreal and experimental adventures, in a vein modern interactive fiction authors continue to explore.  Dreamer was written by Jorge Mir in BASIC for the TRS-80 Color Computer, as another magazine contest entry published in The Rainbow Book of Adventures in early 1983.

Dreamer was designed to run in a mere 4K of RAM, the basic early Color Computer configuration that saw very little commercial support.  The objective is to explore all 26 rooms without being killed, but the tight memory constraints result in a novel engine approach -- there's no real parser, so there's nothing in the way of feedback, and the puzzles consist almost exclusively of guessing exactly the phrase that the game wants.

Mr. Mir claims his game is suitable for beginners, and in a way he's right -- since there's not much complexity to it, anyone can sit down and guess at phrases until something happens.  But I can't really encourage anyone to play this game today -- it's not so much an adventure game as a series of brick walls, and I had to peek at the code on a few occasions when guessing wore thin.  So feel free to experience Dreamer vicariously by reading on into the...

***** SPOILERS AHEAD! *****

We are LOST IN THE FOREST as we begin.  We have nothing in inventory; in fact, it seems there is no I or INV command, so we probably won't have to deal with any objects.  There's no exit list given, so movement will have to be by trial and error.  But it seems we can move in all directions without really going anywhere -- again, hard to verify without inventory -- and no verb I try seems to do anything.

Trying to use the title as a jumping-off point, I attempt to SLEEP and DREAM and WAKE, with no response to any of it.  I try to SEARCH WALL and JUMP and YELL, also to no avail.  I try to CLOSE EYES and IMAGINE something that might happen.  I DIG and EXAMINE FOREST and CLIMB TREE, but nothing ever occurs.

At last I try battling the parser on its own terms, and GO WEST finally brings me somewhere new -- to the edge of the forest, near a house.  Here, if I try to E I am at least given a useful response -- I CAN'T E, whereas in the forest I got no feedback at all to any phrase I tried.  We can't go anywhere else from here using compass directions, but we can GO HOUSE to approach its door.

We can't, however, GO DOOR, or OPEN DOOR, or EXAMINE DOOR, or KNOCK DOOR or RING BELL.  We can't PUSH or PULL or MOVE or SLIDE it either.  And we can only GO EAST here, which gets us lost in the forest again.  Ah!  We can UNLOCK DOOR.  This might be our house, as we've seen no evidence of a key, although since this is a dream there's not necessarily an answer to the question.  Once we've done that, the door stands open, but we can't GO DOOR or ENTER DOOR.  We have to ENTER HOUSE.

At this point I wonder if we're being graded at all, so I try to SCORE -- and I CAN'T SCORE.  Okay.  We can see STAIRS and FURNITURE here.  But we can't GO STAIRS or GO UPGOing EAST puts us back in the forest again.  We can't CLIMB STAIRS or USE STAIRS, nor STAND on, USE, MOVE or CLIMB the furniture.  We can, however, GO UPSTAIRS.

I'm beginning to realize how this game manages to work in 4K -- every location has a specific "command," really a phrase that we must hit upon exactly to get to the next stage.  There's no real parser at work here, which is why the engine is so strict yet arbitrary in its demands.  This does not make the game very much fun, I might add.

Upstairs we find a bedroom with a window, a bed, and some stairs again.  We'll try to GO DOWNSTAIRS, which actually works, leading to a family room with a fireplace and TV set.  We can GO FIREPLACE to find ourselves in the dark, and (it turns out) GO NORTH to find ourselves out in the forest again, though not in the starting LOST location this time.

We can see A HOUSE FAR AWAY, but we can't GO HOUSE from here.  GO NORTH takes us back to the starting location, lost in the forest, and we have to find our way back here exactly as we did before.  GO SOUTH takes us to a river bank with a cave.  We can't ENTER CAVE, but we can GO CAVE.  Inside we see a large box and a light to the east.

We can't OPEN BOX, but we can GET BOX -- and finally something produces a negative response, as THE BOX WAS FULL OF POISONOUS SPIDERS.  YOU ARE NOW DEAD!  YOU ONLY GOT TO SEE 11 ROOMS.  So this is how we're scored, then... if we die, we at least learn how well we performed to the author's exacting specifications.

Starting over again, we choose to ignore the box and GO EAST instead, arriving outside the cave near a hungry bear and a tree.  CLIMB TREE proves fatal, as THE BEAR CLIMBED THE TREE ALSO AND ATE YOU!  We've now seen 12 rooms.  Of 26?  This is going to seem like a very long adventure despite its simplicity.  Maybe a peek at the code will make up for the lack of a save game -- it appears we can GOTO 4 to pick up wherever we died and try something else.  I'll allow myself this concession for the sake of efficiency.

With this trick speeding things up, I try some other possibilities.  We can't PET BEAR or KILL BEAR or WRESTLE BEAR, but we can RUN to escape to a hill with a small cabin.  GO CABIN brings us to its door, where we also see a horse.  Unfortunately, we cannot GO HORSE or RIDE HORSE, nor do anything with the door.  But we can ENTER CABIN regardless.

Here we find some food and a saddle.  GET SADDLE actually responds like a normal adventure game -- the saddle disappears from the screen, leaving the food behind, though this is in actuality a simulation of normal adventure behavior.  But we can't GET FOODEAT FOOD proves, as I suspected, that it's poisonous, and we die with 16 rooms under our collective belt.  After we get the saddle, we need to EXIT CABIN.

We can't SADDLE UP, or SADDLE HORSE, or GO HORSE, but now that we have the saddle we can RIDE HORSE to a large lake.  We can't SWIM or DIVE or EXAMINE LAKE or GO LAKE or DIVE LAKE or DRINK LAKE or DRINK WATER or anything else that seems reasonable to try.  We're still on the horse, but we can't DISMOUNT or GET DOWN or GET OFF, and directional navigation doesn't get us anywhere.  I finally had to look at the BASIC code to see that Mr. Mir threw us a curve on this one -- we have to abandon the two-word approach used almost everywhere else, and dismount and/or overcome a serious drug habit as we GET OFF HORSE!

Now we can see a small boat, and GO BOAT to approach a small island.  Of course, we can't GO ISLAND, or SWIM ISLAND, or EXIT BOAT.  We have to ROW BOAT to reach the island.  Here we find some sand and a shovel; we can't GET SHOVEL or DIG, but we can DIG SAND to find a bottle.  We can't GET BOTTLE or OPEN BOTTLE, or READ BOTTLE or GET NOTE (guessing there might be one in it)... but we can, in desperation, BREAK BOTTLE.

Now we find ourselves magically transported to A STRANGE LOOKING PLACE where we see a magic wand, and a blue cloud engulfing us.  GET WAND transports us to a palace, where we see a WELL ARMED GUARD (somehow I picture Ray Harryhausen's interpretation of Kali instead of the author's intended imagery) and some DIAMONDS ON A TABLE.  Fortunately, since the engine really only recognizes a couple of responses for any given location, we can freely attempt to KILL GUARD and STAB GUARD and GOUGE OUT EYES OF GUARD without irritating him in the least.

As it turns out, what we really want to do is give in to our base impulses and simply GET DIAMONDS -- and now we have an ANGRY GUARD at hand, probably because he's envisioning his next job evaluation.  Let's try the bear strategy again, and RUN... and we find ourselves at home!  It may have only been a dream, but victory is ours!

Dreamer has an interesting concept at its core, but in execution it's a novelty, rather than a true adventure -- the solution is so constrained that it's more of a guessing game along narrative lines.  But it was fun to fight through it anyway, and I appreciate the technical variety found in low-memory adventures -- they are always forced to compromise in some way, and Dreamer does squeeze a lot of story into 4K of RAM.


  1. the solution is so constrained that it's more of a guessing game along narrative lines

    It almost sounds like a piece of constrained hyperfiction of the "click to continue" variety. If I get a little free time I might be interested in re-implementing it in Twine.

    1. Most of the locations (stages?) of the game really only have two options -- the "correct" one that allows the story to progress, and heading East to return to the start of the game. There are a few points where more options are presented, but the game as it exists doesn't provide a lot of choice -- it's dependent on the pseudo-parser fielding the player's guesses until the right phrase is found. I'm not sure how well that would fit Twine, though some additional non-progressive options could certainly be added to flesh it out and camouflage the right choice.

    2. Plenty of Twine "games" are the equivalents of long one-way hallways. Sounds like you've spent some time in it? Maybe you could do a follow-up to your fascinating "Write a game in Inform 7" series with Twine?

    3. That might be a fun project to tackle, Rowan. Thanks for the suggestion -- and I'm glad you enjoyed the Inform series, I didn't get much feedback on it so I had no idea if anyone even read it. :)

  2. Out of curiosity, are you having to type all these game in manually each week directly from the book, or is there a repository somewhere on the net containing these Rainbow Book of Adventures game in another format?

    1. I am getting them from The Rainbow's published tape/disk version of the BASIC programs -- so any bugs I'm running across should not be from my own typing, at least! I found them, and many other adventures I'd missed, at the excellent Coco repository at http://www.colorcomputerarchive.com.

  3. These types of games are at their best when every cause and effect is interesting. Some games put their effort into making frequent and elaborate failure/death scenes, for example. Kinda hard to do without a lot of text or visuals, I think...