I have been looking for an example of a classic Japanese text adventure for some time, and Jason's blog post about the game provided the opportunity. I have examples of the early text adventure of many countries on my text adventure page (https://jggames.github.io/Type-in-Mania-Text-Adventures.html):
- Agent 999 by Kajsa Söderström 1984 (English translation from Swedish)
- Spaceship Farmer/Astronave Farmer by Mario Pettenghi 1985 (English translation from Italian)
- Caverns in the Pocket/Des Cavernes dans le poquette by Charles Feydy 1982 (English translation from French)
- Drakulas Diamanten/Dracula's Diamonds by C. Seibt 1983 (English translation from German)
- A Hös Lovag (Hero Knight) by Miklós Tihor 1985 (English translation from Hungarian)
- The Time Machine/De Tijdmachine by Gerton A. Lunter 1988 (Netherlands)
- P.R.E.S.T.A.V.B.A. by Miroslav Fídler 1988 (English translation from Czech)
I’ve now completed my translation to English and port of the game to TRS-80 MC-10. I’ve also completed playing the game. But of course I cheated by playing it from the inside (code side) out, and not as it really should be played. I look forward to Jason's account of slogging it through in a proper player's way. It’s a complex adventures with lots of subtleties and has been and will be challenging for him. Here’s a video with me demonstrating a bit of the start of the game (an early version of my port with some of the translation still rough):
I really appreciate Jason's detailed discussions of this and other games. They really help when trying to unpack the code and do a translation. Or I should really say "to tweak" a translation provided me by Copilot. It did most of the heavy lifting, but I used Jason's analysis and the contributions of others posting on his blog to help when things were unclear. I also, as usual, called in my son Charlie in to help with a few conundrums I had with certain words. For example, he helped confirm that the original used LEFT and RIGHT directions in addition to North, South, East West. For a time I had even wondered if it was using PORT/STARBOARD. One mystery I still have is the last word in the Verb list, which CoPilot and Charlie rendered as SPIT (Haku). It was clear from the code that it needed to be something like CLEAN or SWEEP, as it involved having to carry a broom and do something with a pile of trash.
Jason Dyer was stuck for a while on the main decks of the ship. I had figured out from the code that the main puzzle there was to hear a message from a pile of skeletons, which indicated that the player must PRAY or say AMEN over all the skeletons on the ship. Then the player would be allowed to interact with those skeletons without being chucked off the ship by the disturbed spirits of the dead sailors (its a neat narrative idea).
If you just looked at those skeletons you would get a message telling you they were, as Jason nicely put it "seething with angry spirits". But if you looked at them after saying AMEN" over their remains they would be described as "sleeping peacefully". Then you could SEARCH or MOVE them. These are actually different VERBS in terms of their effects, although they both accomplish the same end of revealing hidden items. You need to do this to find needed keys that allow you to proceed to the lower levels of the ship.
The game is designed so that you always have to go and visit the pile of skeletons and “LISTEN” for the message before praying over the other skeletons (Or you can just break out of the program and type in AH=1 and then enter CONT). I think in the original Japanese you might have to use a more specific formula for praying, but I changed it in my English version to be more flexible. The original might be something like “PRAY AMEN” or maybe “SAY AMEN”. I made my version work if you said either “PRAY”, “SAY AMEN”, “PRAY AMEN” or “SAY PRAYER”. These seemed a more natural English set of options. The phrase “PRAY AMEN” seemed a little unusual in English.
The game also requires that you “LOOK" at rooms after entering them before you can interact with any items. You can also and sometimes must look at individual items before you can have further interactions with them. And there is, as I mentioned, a difference between examine and move in terms of effects. I actually enjoyed these complications/subtleties, but it can get a wee bit tedious having to do all 3 actions on every item to make sure you have discovered all hidden items in the game.
I also had trouble figuring out how the doors worked in the original. Something to do with how the word "KEY" is used in Japanese so that it covers the concept of "UNLOCK" in English. Because I didn't understand this subtlety, all the doors were originally “closed” and locked for me. In my initial fix of the problem the doors to the Amory, Storage, Cook’s room, Galley, Officer 1 and Officer 2 were just open and unlocked (didn't need a key). But I noted from Jason's descriptions that they seemed to be at least closed in the original. Then I was able to figure out that doors had to be both UNLOCKed and OPENened and so discovered that my kludged solution was in error.
In porting the game I noticed a place where there might end being a bug in the code for anyone trying to translate the code to any variation of Microsoft BASIC. In the prayer routine there is the following line:
4040 IF LEFT$(A$,4)=LEFT$(V$(5),4)=0 THEN 4090
My Microsoft BASIC chokes on this. By MS BASIC standards it should be expressed with brackets around the LEFT and RIGHT logical equality comparison to separate that logic check from the = 0 check, which is just a way of checking whether that comparison is false. In the original BASIC the order of operations must be handled slightly differently so that brackets are unnecessary to distinguish logical comparisons from other logical comparisons. For MS BASIC the line must be something like this:
4040 IF (LEFT$(A$,4)=LEFT$(V$(5),4))=0 THEN 4090
OR even more simply for a Microsoft variations of BASIC, like this:
4040 IF LEFT$(A$,4)<>LEFT$(V$(5),4) THEN 4090
There is another possible bug like the above one:
1450 IF LEFT$(A1$,3)=LEFT$(N$(NN),3)=0 THEN 1490
Should for MS BASICs read:
1450 IF (LEFT$(A1$,3)=LEFT$(N$(NN),3))=0 THEN 1490
OR
1450 IF LEFT$(A1$,3)<>LEFT$(N$(NN),3) THEN 1490
Other than that there wasn't much challenge in converting the code. It was otherwise pretty MS BASIC compliant. I had to do a little condensing of the code to make sure it all fit in 20K. I comes out with only just over 300 bytes left after you play the game to the finish, so its a tight fit.
I also had to reverse the NOUN VERB order of Japanese of the parser to the VERB NOUN order of English. This required that I alter the parser a little, since it was designed to only look for the first and last space-separated words of input and therefore ignore possibly multiple word NOUN phrases. Instead, I had to have it check for only the first two distinct words (VERB and NOUN) and ignore any additional space-separated words of the noun object. This way it could handle complex nouns like GOLD COIN and MIZZEN MAST properly. I also had to check, and in a few cases, look for longer numbers of characters than the first 3 of words, so as to distinguish them from other words. In one case, CANNON versus CANNONBALL I had to change cannonball to "32lb BALL" to allow it to be distinguished properly.
I wish Jason and all the others who try to beat this game the best of luck. Its a tough game, but ultimately a fair one.
The game can be played online here:
No comments:
Post a Comment