Archive for the ‘magical-journey’ Tag

Magical Journey: Two Working Versions   10 comments

Short post today. This information showed up in comments, but I was meaning to make a full update for posterity before Magical Journey gets kicked off my “recently played” sidebar.

Specifically, I last left off Magical Journey when it was still a bit broken, and we now have two working versions.

For the original TRS-80 experience, the ever-hardy Warrigal managed to fix the TRS-80 code directly, and I have a download here which will automatically run the game from a disk, using a program like trs80gp.

Jim Gerrie has also done a TRS-80 MC-10 conversion, found here. You can get a package with all of his games here.

One last thing I should point out is that the fixes do change the game structurally from what I experienced. Namely, this meta-map…

…is straight-out wrong. There is no path to go back to the start in the regular game (other than when you win, you get moved to the start). This means, for example, the softlock where I had dropped my shovel in order to get into the first forest area could not have happened. After this I constantly kept the shovel around, so without the bug I would have consequently had a little more inventory freedom.

Posted April 30, 2024 by Jason Dyer in Interactive Fiction, Video Games

Tagged with

Magical Journey: For Beginners and Experts Simultaneously   34 comments

(Continued from my previous post.)

Previously, we’ve encountered Softside magazine issue 47 (August 1982) with the game Operation: Sabotage. The same issue had a piece by Peter Kirsch entitled Anatomy of an Adventure.

In it he dissects his framework in BASIC that he has used for all his games up to that point:

Early in my adventure writing career, I created an adventure interpreter, or skeleton, as I call it, to serve as the backbone of each of my adventures. It has since been updated many times (now at version 4), but basically remains the same tool.

Magical Journey is clearly version 1, as the same skeleton structure of that game is clearly similar to the general structure Kirsch describes. I’ll go into it in a moment, but a few points from the article:

  • He gets introduced as “author of most of SoftSide’s Adventure of the Month series.” Alas there is no further biographical information.
  • He notes “The days of simply finding treasure and returning it to a storage location are gone forever.” which is a curious comment given how many Treasure Hunts there still are in 1982, but Kirsch got it out of his system back in 1980.
  • He tries different layouts before putting “a final version of my adventure map on a giant piece of heavy paper.”
  • He ran out of memory in writing Titanic Adventure and had to make cuts.
  • His games eventually all had ports for TRS-80, Apple II, and Atari; for making the Atari port used a special routine since the Atari BASIC doesn’t support string array, making a single string and treating it as an array by cutting the part he needs.
  • His parser on TRS-80 and Apple II uses the last three letters. He explains this “alleviates some of the annoying keyboard bounce in the TRS-80”. His Atari parser uses the first three letters because of the Atari string array issue meaning he makes the strings with padding. (I’ve played most of the Kirsch games on Atari, which explains why I didn’t recognize the last-three-letters style parser.)
  • He found Atari BASIC easier to debug because he could change something and still keep running the program, unlike on Apple on Atari.
  • Applesoft BASIC has the issue where if you use A has a variable and you write it before a THEN statement it interprets ATHEN as the command “AT”, so parentheses are required.

For the skeleton, he does something relatively distinct from other BASIC authors to start things off:

He has every single room description as a PRINT statement, and manually sets room exits along with these statements. From Magical Journey, where A is the variable which indicates the room the player is in:

10 IFDT=1THEN320ELSEONAGOTO11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86
11 PRINT”IN A FOREST.”:W=1:N=3:E=1:S=1:GOTO350
12 PRINT”ON TOP OF A TREE.”:D=1:GOTO350
13 PRINT”AT THE BASE OF A MOUNTAIN.”:S=1:E=4:GOTO350
14 PRINT”ON AN OPEN PASTURE.”:W=3:GOTO350
15 PRINT”ON TOP OF THE MOUNTAIN.”:D=3:GOTO350

This is wildly atypical. Consider Hog Jowl mansion (written July 1981, printed January 1982 in 80 Micro), which starts with room descriptions but uses DATA statements instead:

50 DATA “IN A DUMBWAITER.”,0,0,2,0,21,0,”IN A LONG HALLWAY.”,0,6,3,0,0,0,”IN A WORKSHOP.”,0,0,0,2,0,0
60 DATA “AT THE BOTTOM OF A SECRET PASSAGE.”,0,0,0,0,0,0,”IN A LABYRINTH OF TUNNELS.”,0,9,0,0,0,0
70 DATA “IN A TORTURE CHAMBER”,2,0,7,0,0,0,”IN A LABYRINTH OF TUNNELS.”,0,11,8,6,0,0,”IN A LABYRINTH OF TUNNELS.”,0,12,0,7,0,0
80 DATA “IN A LABYRINTH OF TUNNELS.”,5,0,10,0,0,0,”IN A LABYRINTH OF TUNNELS.”,0,0,11,9,0,0,”IN A LABYRINTH OF TUNNELS.”

This is the method given in other tutorials at the time, like the booklet for Deathship. Kirsch used DATA for objects and verbs, so clearly had a notion of just using a “data table” for exits rather than having to specify what the variables equal each and every time. My guess is due to the Atari string handling he didn’t want to deal with changing the method.

The remainder of the skeleton also follows the Magical Journey structure fairly closely. There’s a routine for display exits (“IFN>0PRINT” NORTH”; :B(2)=N”), a player input routine, special routines for movement, taking, and dropping, and then the whole list of other verb routines. This is followed by DATA statements for objects and verbs, and then — quite importantly for me, as you’ll see — the line

3000 PRINTA$” WHAT?”:RESUME390

What’s going on here is that the game is set up to automatically send errors to 3000. The intent is for anything that confuses the parser past what it can understand has at least some grace and a sequence reset back to resetting the parser. In practice, it means that if there’s a bug in the main code, it will stop what’s going on and jump straight to WHAT, as opposed to breaking out with a custom error message explaining what’s wrong, making the game much harder to debug.

Unfortunately, I only realized what was going on fairly late in my process of debugging Magical Journey.

For a while, I thought the issue above was potentially some sort of parser misdirection, but no; in the portion of the code that handles removing and adding objects to the player’s inventory, there was a straightforward typo. See if you can spot it:

1100 FORK2-1TO5:IFC$(K2)=H$(K3)THENC$(K2)=R$:GOSUB1150:RETURN:ELSENEXT:RETURN

That should be K2=1 to 5, with an equal sign, not a minus sign.

Or consider the hungry dwarf I gave a screenshot of last time:

There’s a farmhouse with an oven, pie filling, and pie crust, and you can BAKE PIE with them all together, but after YOU HAVE JUST BAKED A RHUBARB PIE. the game told me WHAT? and gave me no item. Spot the error:

810 PRINT”YOU HAVE JUST BAKED A RHUBARB PIE.”:PE=1:A$(59)=”RHUBARB PIE”:H$=”59)=A$(59):A(59)=25:K3=21:R$=””:GOSUB1100:K3=25:GOSUB1100:M$=””:K3=21:GOSUB1200:K3=25:GOSUB1200:GOTO5000

A few more along these lines happened, so I was simultaneously exploring the map and then every once in a while searching the source code for a misplaced character. This was as close to the metal as adventuring gets. (I also hit one inexplicable bug at the very end which I’ll get into later.)

Fortunately, the game itself was extremely simple in terms of puzzles. Find SNAKE FOOD, it goes to some RATTLESNAKES.

A GIANT CHICKEN wants to eat some CORN.

This leaves a golden egg.

For an only slightly more elaborate example, some FLYPAPER was next to some FLIES was near a GIANT KILLER FROG.

The meta-map of the game seems slightly elaborate…

…but for the most part there is only a handful of obstacles that block your way. In addition to the pie mentioned, a troll needs a toll which you can offer with a SILVER DOLLAR (not marked as a treasure) found down a pit. Even a dragon is relatively easy to defeat.

Two rooms away are a GAS MASK and some SLEEPING GAS, and the dragon is described as wide awake.

The only part slightly messy to juggle is that the game can return you to the start in two cases; in one case (passing through a dwarf house) you need to take the warp back, because it puts you at a treasure (a gold watch) before returning to the starting area.

To get back to the starting area to the main junction you need the shovel, so if you’ve left it behind, this means your game is softlocked, which is kind of rude for what is clearly intended as a beginner’s game.

The only slightly less obvious puzzle; you throw sneezing powder to defeat a MADMAN swinging an ax.

My major hang-up turned out to be at the very end. Quite inexplicably, after getting in the cave past the dragon, and heading west, the game decided to always crash, or at least stop with WHAT? when trying to show the room name, then end up in endless loop. This turned out to be the last room.

The end room is marked in red.

I still have no idea the reason for the crash. I ended up having to add some code to essentially hack my way out of the bug:

300 N=0:W=0:E=0:S=0:U=0:D=0:Y=0:CLS:PRINT”YOU’RE “;:IF(DK=0)*(A>5)DT=1
305 IF A = 72 GOTO 82
310 GOTO10

Line 305 is mine. Rather than going to the select-a-room routine, I just have the game jump directly to the relevant line that displays the room name (82). This bypasses whatever is going on with line 10 to have a bug.

With this fix in place, I could finally see the last room.

Pressing the button congratulates you and then tells you how many of the 17 treasures you found.

6000 PRINT”CONGRATULATIONS! YOU’VE MADE IT ALL THE WAY THROUGH AND BACK.”:IFNT=17PRINT”YOU FOUND ALL 17 TREASURES.”:GOTO6100
6050 PRINT”YOU ONLY FOUND”NT”TREASURES, HOWEVER. THERE ARE”17-NT”STILL OUT THERE SOMEWHERE.”
6100 INPUT”TO PARTAKE ANOTHER JOURNEY, HIT “;A$:RUN

I should possibly be thankful for the bugs. Other than the interest of the “rucksack” holding all treasures while ignoring the inventory limit, there wasn’t much of theoretical interest, but I essentially had to study all of the source code in order to make it to the end. The adventure wasn’t an abstract magical journey as much as one programmer’s journey — badly typed by someone else in the past — as interpreted by some quirky source code.

Unfortunately, some of the rooms remain inaccessible, including one to the west of a room “near the magic garden”. You’ll see on my meta map it currently goes to the opening forest, but it isn’t supposed to do that — it is supposed to go to a tool shed where you can find a ring.

Feel free to check the source yourself to try a diagnosis (including my extra line 305). It seems to have trouble with room numbers 72 or larger (jumping to lines 82 and up). Alternately, you can download a disk here I have prepared that can be run directly with the emulator trs80gp (just drag and drop the file on the emulator). I can’t guarantee there aren’t more bugs. (For example, colors of keys will change when you drop them, but at least that isn’t important for winning the game.)

Posted March 5, 2024 by Jason Dyer in Interactive Fiction, Video Games

Tagged with

Magical Journey (1980)   5 comments

This game returns rewinds us back in time a bit to February 1980.

That was extraordinarily early in our journey. While Scott Adams (with Alexis) had cranked out his first six games, and Greg Hassett had a library of work, there were only a handful of adventure games available on home computers otherwise. Dog Star Adventure had been printed in Softside, but there otherwise guidance was limited how to write an adventure game, and you had odd experiments like Dante’s Inferno from Softside January 1980, which was done entirely with movement.

Roberta Williams was able to run out of adventures to play: “She loved them all, and then there were none left.”

Treasure Hunts were still heavily the norm, making up 2/3rds of games.

1979 is the most representative part of chart here. By the end of 1980 the share of Treasure Hunt plots compared to others became less than half.

Magical Journey also brings us back to a familiar name: Peter Kirsch. He has been the editor (and often author) of the Adventure of the Month series (Arrow One was the latest one featured here). Not long ago I found, in a 1982 volume by Hayden (the book publisher who also put out Crime Stopper) a Softside compilation that also included an adventure game by Kirsch dated Februrary 1980.

Via The Internet Archive. Some games are reprints, some (like Magical Journey) appear here for the first time. I assume Softside couldn’t fit every game submission, especially ones prior to the August of 1980 when they went full-sized.

The REM statement giving the author and date on the first line is missing from all current archived versions.

MAGICAL JOURNEY
BY PETER KIRSCH
FINAL VERSION
FEB. 1980

Hence I technically had this game on my list, but as 19xx.

It is nice to have both temporal and author context; it’s one thing to play an author we’ve seen a lot of now produce something with a “retrograde” feel of collect-the-treasures (his later work went heavy on “cinematic scenes”) but we can also see a little bit of his “scene based” approach in primal form.

There’s incidentally only the TRS-80 version; the porting to Atari and Apple II didn’t happen until the Adventure of the Month series started.

Fun innovation to start: you have a sack for the treasures, meaning you don’t have to worry about the inventory limit in regard to treasures (of course, wouldn’t get rid of the inventory limit entirely, early 1980 here).

This was intended to be a quick game to throw out but I ran into a wrinkle fairly quickly. But to narrate like everything is normal, you start in a bog-standard forest, climb a standard tree, grab some twigs (see above), find a shovel, climb a mountain…

…then go down into darkness. It asks you to make light. I was puzzled at first and thought I had missed something, but no, I had scooped everything up available.

W/S/E in the opening Forest just loop.

That leaves the TWIGS, which I certainly don’t visualize as being light-providing in size, but I tried RUB TWIGS anyway, whereupon the game said WHAT? and then showed me the room description.

Doing some deciphering, I found the line in question that was supposed to trigger (by searching for the word TWIG).

930 IFD(B)13THEN950:ELSEIFE$=”IGS”IFI(2)=1THENDK=1:R$=”BURNING TWIGS”:K3=2:GOSUB1100:H$(2)=R$:PRINT”GOOD DEDUCTION! YOU HAVE CREATED A SMALL FIRE AND YOU CAN SEE!”:GOTO5000

Wild note: the game looks at the last three letters of the noun to find out if you have, in fact, typed in the word TWIGS. I have never seen this in a parser before. Finding the comparison line in the book:

930 IFD(B)13THEN950:ELSEIFE$=”IGS”IFI(2)=1THENDK=1:R$=”BURNING TWIGS”:K3=2:GOSUB1100:H$(2)=R$:PRINT”GOOD DEDUCTION! YOU HAVE CREATED A SMALL FIRE AND YOU CAN SEE!”:GOTO5000

That’s, erm, exactly the same. Well.

I decided to try to keep going — maybe the bug was only isolated. You explore the tunnel here a little, find a locked door and a spot that’s soft…

…dig in what is apparently a one way passage to land in a forest…

…and find multiple colored trees with multiple colored keys hiding and a note. Trying to read the note gets the message WHAT?

830 IFD(B)6THEN850:ELSEIFE$=”OTE”IFI(12)=AORI(12)=1OR(A-20)”*(I(12)=0)THEN?”NOTE SAYS: “CHR$(34)”THERE ARE 17 TREASURES HIDDEN. CAN YOU FIND THEM ALLPRINT”CHR$(34):GOTO380

Well, here is a typo at least. A-20 is supposed to be A=20. But even fixing that, you can’t read the note.

So I’m going to have to do some repair to the code and report back. I did manage to explore out a bit more and I can give a few teaser screenshots.

This is broken too. Your bottle does not fill.

It does seem like that Kirsch already has the “continuous journey” idea in mind given the treasure-holding sack and the one way passage, although I’m unclear if I skipped anything, and if those skips were because I missed a puzzle or if the game’s code is literally broken.

I suppose having to diagnose type-in typos makes for the authentic early-1980 experience!

Posted February 29, 2024 by Jason Dyer in Interactive Fiction, Video Games

Tagged with