Monday, 27 March 2017

Using NEXT to Return from Subroutines

In most of my animated programs you will find a tight main FOR/NEXT loop around line 20, with common subroutines above it, something like this
0 CLS:DIMK(255):K(8)=1:K(9)=2:K(94)=3:K(10)=4:GOTO20
1 IFA-1<0THENNEXT:GOTO22
2 PRINT@A+B*32," ";:A=A-1:NEXT:GOTO22
3 IFA+1>31THENNEXT:GOTO22
4 PRINT@A+B*32," ";:A=A+1:NEXT:GOTO22
5 IFB-1<0THENNEXT:GOTO22
6 PRINT@A+B*32," ";:B=B-1:NEXT:GOTO22
7 IFB+1>14THENNEXT:GOTO22
8 PRINT@A+B*32," ";:B=B+1:NEXT:GOTO22
20 FORZ=1TO65000:PRINT@A+B*32,"X";:REM SOME ENEMY ANIMATION AND COLLISION DETECTION
21 ONK(ASC(INKEY$+"*"))GOTO1,3,5,7:NEXT
22 REM GAME OVER
24 END

This is a simple example of how you can use NEXT to return from subroutines. Since key input in an arcade game can be quite intense, you want to shave off every micro second possible in your main loop. NEXT:GOTO20 might some more kludgy than a clear RETURN but the GOTO20 part is almost never reached and the NEXT returns directly to the first command after the FOR/NEXT loop definition at the beginning of line 20. Using a FOR/NEXT loop saves you a GOTO in every iteration of the loop and all the scanning it requires to find its line number! Not to mention the interpreter having to scan for RETURN (a six letter command) rather than NEXT (a four letter command) for each subroutine call. Also, for each subroutine call you don't have a RETURN and then a NEXT (or GOTO) command to get back to the beginning of the loop. You accomplish both with the one NEXT from your subroutine.

Sunday, 26 March 2017

MC-10 Dr. Who programs

Allen Huffman recently posted on his blog about a unlicensed Dr. Who game he bought for the Coco back in the 1980s. He was a little disappointed back then when the game arrived and he discovered it was written in BASIC but I'm not disappointed today. Looks like another possible porting project for the TRS-80 MC-10! Thanks Allen!  I've written in the past about one Dr. Who themed text adventure game I ported to the MC-10 from the original TRS-80
DrWho
I thought it would be useful to write a little about some other more recent who-themed additions to the MC-10 software library.

There is my adventure called "The Doctor," which involves navigating an overhead 2-D maze. You have to trick the very dumb Darlecs to chase you and then trigger reactors and exit the screen, leaving them to be blown up.
Doctor
There is also another text adventure taken from a Sinclair type-in magazine called "Time Slider." I believe it is from Your Computer magazine, which was a general home computer magazine in Britain in the 80s. Because it covered all 8-bit computers, it sometimes had games for the Dragon 32 (i.e. British Coco), especially in the 1982-1984 period. Just stumbled across Time Slider (the article title) which had a listing of "Time Switch" (the title used in the program itself). Called the version I created for the MC-10 "Slider" because I already had program called switch. Probably should have used the filename "TSWITCH" but I prefer complete names. It's a thinly veiled Dr. Who text adventure, which again tries to avoid copyright infringement. I added a little graphic of a blue box at the end to overcome any such confusion.
Slider
And here is a video of "Doctor":

Combat Arien

Here's another 10-Liner Basic Programming Contest entry for 2017. Info about the contest can be found here: http://gkanold.wixsite.com/homeputerium/basic-10liners-2017. In addition to my entry of a 10-liner version of Mine Sweeper and the Monteiro Challenge, I have completed a simple flight combat simulator called "Combat Arien."
Combat Arien
There were lots of other entries along similar lines in the contest. It's unlikely mine will impress, given the greater power and graphics of 8-bit systems like the Atari and others.
Interceptor

Space Ranger

A contest like this, which involves a bunch of classic 8-bit home computers spanning the entire 1980s reminds me that my beloved MC-10 was based on the TRS-80 Color Computer (Coco), which was a system built on hardware from before the lat 70s. In particular its graphic chip the Motorola MC6847 was a particularly early graphic chip for home computers. Don't get me wrong, I love this neon green wonder. I also appreciate how well Tandy worked at maintaining compatibility across its whole Coco line right into the 1990s. The Coco 1 (1980) was a contemporary of the VIC20. The Coco 2 (1982) was a contemporary of the Commodore 64. The Coco 3 (1985) was a contemporary of the Atari ST. Yet each of these machines was able to run the software from the earlier machines. The VIC20, for example, wasn't around in 1985 running a multi-user, multitasking operating system. But a Coco 1 (upgraded to 64K) could. And the MC-10 was a part of this venerable family.

The program was based on some code from a type in book for the Matra Hachette Alice. I was browsing through it and saw that it was a flight combat game. I had seen the other games for the contest and I had been wanting to make an updated flight shoot-em-up game for some time. But I was really disappointed when I saw what the game code produced.

The program has the idea of the four white blocks to make a cross hair, but other than that the plane is just two blocks connected by a dash.  And the sky is orange with the plane leaves behind a trail of different coloured blocks as it jigs around the orange sky.  One shot on the plane brings victory and the end of the game, but the plane moved in increments of two making its flight extremely jerky and erratic. I kept the basic gun shots converging on the target idea and the 4 block cross hair, but replaced just about everything else. The book "102 Programmes Pour Alice et TRS MC/10," which can be found here: http://alice32.free.fr/documentation/102-programmes/102-programmes.djvu
See page 166 for the original.  Here's my code in short and long form:

0 CLS6:A=5:B=14:HT=0:TI=0:SH=0:N=15:POKE17026,6
1 PRINT@32*A+B,"ÞØÜ";:TI=TI+1:U=A:V=B:A=A+2-RND(3):B=B+2-RND(3):K=PEEK(2)ANDPEEK(17023):GOSUB7:IFK=32ORN<15THENGOSUB3
2 A=A-(K=90)+(K=87):B=B-(K=83)+(K=65):GOSUB7:PRINT@238,"ÏßÏ";:PRINT@302,"ÏßÏ";:GOTO1
3 PRINT@32*N+23-N,"Ù";:PRINT@32*N+N+7,"Ö";:PRINT@32*N+23-N,"ß";:PRINT@32*N+N+7,"ß";
4 SH=SH+1:N=N-1:Q=PEEK(9)AND128:POKE49151,0+Q:POKE49151,128-Q:IFN>7THENRETURN
5 IF(U=7ORU=8ORU=9)AND(V=13ORV=14ORV=15ORV=16)THEN?@32*U+V,"ÞÿÜ";:SOUND100,1:HT=HT+1:IFHT=5THEN8
6 GOSUB7:N=15:GOTO1
7 A=A-(A<0):A=A+(A>15):B=B-(B<0):B=B+(B>28):PRINT@32*U+V,"ßßß";:RETURN
8 ?@0,"YOU GOT HIM!  ":SOUND219,9:SOUND241,7:SOUND200,9:SC=INT(10000/(TI+SH)):IFSC>HSTHENHS=SC
9 ?@16,"SCORE"SC:PRINT"HIGH SCORE"HS:PRINT@48,;:INPUT"HIT enter";M$:GOTO0
10 REM USE A,S,W,Z TO STEER
20 REM     SPACE TO FIRE
30 REM 5 HITS TO SHOOT DOWN

Long Listing:

0 CLS6
1 A=5
2 B=14
3 HT=0
4 TI=0
5 SH=0
6 N=15
7 POKE17026,6
100 PRINT@32*A+B,"ÞØÜ";
101 TI=TI+1
102 U=A
103 V=B
104 A=A+2-RND(3)
105 B=B+2-RND(3)
106 K=PEEK(2)ANDPEEK(17023)
107 GOSUB700
108 IFK=32ORN<15THENGOSUB300
200 A=A-(K=90)+(K=87)
201 B=B-(K=83)+(K=65)
202 GOSUB700
203 PRINT@238,"ÏßÏ";
204 PRINT@302,"ÏßÏ";
205 GOTO100
300 PRINT@32*N+23-N,"Ù";
301 PRINT@32*N+N+7,"Ö";
302 PRINT@32*N+23-N,"ß";
303 PRINT@32*N+N+7,"ß";
400 SH=SH+1
401 N=N-1
402 Q=PEEK(9)AND128
403 POKE49151,0+Q
404 POKE49151,128-Q
405 IFN>7THENRETURN
500 IF(U=7ORU=8ORU=9)AND(V=13ORV=14ORV=15ORV=16)THENPRINT@32*U+V,"ÞÿÜ";:SOUND100,1:HT=HT+1:IFHT=5THEN800
600 GOSUB700
601 N=15
602 GOTO100
700 A=A-(A<0)
701 A=A+(A>15)
702 B=B-(B<0)
703 B=B+(B>28)
704 PRINT@32*U+V,"ßßß";
705 RETURN
800 PRINT@0,"YOU GOT HIM!  "
801 SOUND219,9
802 SOUND241,7
803 SOUND200,9
804 SC=INT(10000/(TI+SH))
805 IFSC>HSTHENHS=SC
900 PRINT@16,"SCORE"SC
901 PRINT"HIGH SCORE"HS
902 PRINT@48,;
903 INPUT"HIT enter";M$
904 GOTO0
1000 REM USE A,S,W,Z TO STEER
2000 REM     SPACE TO FIRE
3000 REM 5 HITS TO SHOOT DOWN


Monday, 13 February 2017

Basic 10-Liners Contest 2017

Gunnar Kanold and his friends run a really neat Basic programming contest. It has been going for a number of years. It started out, I believe, as an all Atari event but a few years back they decided to open it up to other classic 8-bit home computer systems. This year the contest is being held on Saturday April 22 at the NOMAM retro convention in Lubeck Germany. Details about the contest can be viewed here: http://gkanold.wixsite.com/homeputerium/basic-10liners-2017

I decided to try programming the classic puzzle game "Minesweeper." I managed to get the game boiled down to 10 lines of Micro Color Basic on my favourite computer, the TRS-80 Micro Color Computer (MC-10). The original version of the program only did a 4-way search (up,down,left,right) for doing the flood fill after you select a location:


However, as with so many of my programming projects, a little more effort allowed me to condense the program just that wee bit more to allow me to fit in a full 8-way search:


Hard Version with 40 Mines
Here are some brief instructions for getting the game to run:
Get: http://faculty.cbu.ca/jgerrie/Home/VMC10_073D.zip
Unzip VMC10_073D.zip
Run VMC10.exe
Type CLOAD & hit ENTER. From the File menu select “Play Cassette File…” and then select SWEEPER.​C10 in the JimG subdirectory of the Cassette directory. Type RUN...
(Any trouble running it, make sure under the “Configure” menu that Memory is set to +16K Ram Expansion).
I should note that these instructions will work for getting any of my games to run, since all of the rest of my programs are also included in the JimG subdirectory of the zip compilation. This compilation includes the wonderful VMC10 emulator by James the Animal Tamer. Thanks so much James!

In addition to the 10 line limit, this year the rules were changed to require that the same program be submitted in a "long version", which means, with one command per line. Line jumps (GOTO, GOSUB) and other dependencies have to be adjusted so that the program remains fully functional. I'm not sure what this is all about, but perhaps it is to help with the judging, or perhaps Gunnar might want to use the programs to help teach students about Basic programming. I seem to recall that he was involved with teaching. In any case here is the original 10-line version and the long version:
0 CLS0:DIMF(10,10),K(255),A(2000),B(8),J,B,L,X,Y:B(1)=-1:B(2)=1:B(3)=-32:C=RND(-(PEEK(9)*256+PEEK(10))):D=1:B(4)=31:GOTO9
1 A$(1)=CHR$(96):I=0:FORY=1TO9:FORX=1TO9:J=-(PEEK(32*Y+X+M)=46):PRINT@32*Y+X,A$(-(F(X,Y)=1));:I=I+J:NEXT:NEXT:RETURN
2 SOUND9,1:B(5)=-31:B(6)=-33:B(7)=32:B(8)=33:K(65)=-1:K(83)=1:K(87)=-32:K(90)=32:FORY=1TO9:FORX=1TO9:POKE32*Y+X+M,46:NEXT:NEXT
3 L=RND(9):B=RND(9):ON-(F(L,B)=1)GOTO3:F(L,B)=1:J=J+1:ON-(J<10)GOTO3
4 POKEP,PEEK(P)+64:K=ASC(INKEY$+"@"):POKEP,PEEK(P)-64:ON-(K=0ORPEEK(P+K(K))=128)GOTO4:P=P+K(K):L=1:B=1:A(B)=P:IFK>32THEN4
5 Y=INT((A(B)-M)/32):X=(((A(B)-M)/32)-Y)*32:IFF(X,Y)=1THEND=2:ON-(P=A(B))GOTO9:D=1:FORJ=1TO1:GOTO8
6 C=F(X-1,Y-1)+F(X,Y-1)+F(X+1,Y-1)+F(X-1,Y)+F(X+1,Y)+F(X-1,Y+1)+F(X,Y+1)+F(X+1,Y+1)+48:IFC<>48THENPOKEA(B),C:FORJ=1TO1:GOTO8
7 POKEA(B),32:FORJ=1TO8:IFPEEK(A(B)+B(J))=46THENL=L+1:A(L)=A(B)+B(J):POKEA(L),32
8 NEXT:B=B+1:ON-(B<=L)GOTO5:GOTO4
9 M=16384:P=33+M:ONDGOTO2:GOSUB1:?@416,"SAFE!":IFI<>10THEN?@416,"DEAD!":FORC=1TO10:SOUND1,1:POKE49151,64:POKEA(B),64:NEXT
20 REM     minesweeper
21 REM     ***********
22 REM BASIC 10LINERS CONTEST
23 REM http://gkanold.wixsite.com/homeputerium/basic-10liners-2017
24 REM BY JIM GERRIE 2017
25 REM USE A,S,W,Z & SPACE.
26 REM AVOID THE 10 MINES.
27 REM WHEN DONE, HIT SPACE
28 REM ON A MINE TO SHOW MINES.
******************************************************************
0 CLS0
1 DIMF(10,10),K(255),A(2000),B(8),J,B,L,X,Y
2 B(1)=-1
3 B(2)=1
4 B(3)=-32
5 C=RND(-(PEEK(9)*256+PEEK(10)))
6 D=1
7 B(4)=31
8 GOTO900
100 A$(1)=CHR$(96)
101 I=0
102 FORY=1TO9
103 FORX=1TO9
104 J=-(PEEK(32*Y+X+M)=46)
105 PRINT@32*Y+X,A$(-(F(X,Y)=1));
106 I=I+J
107 NEXT
108 NEXT
109 RETURN
200 SOUND9,1
201 B(5)=-31
202 B(6)=-33
203 B(7)=32
204 B(8)=33
205 K(65)=-1
206 K(83)=1
207 K(87)=-32
208 K(90)=32
209 FORY=1TO9
210 FORX=1TO9
211 POKE32*Y+X+M,46
212 NEXT
213 NEXT
300 L=RND(9)
301 B=RND(9)
302 IFF(L,B)=1THEN300
303 F(L,B)=1
304 J=J+1
305 IFJ<10THEN300
400 POKEP,PEEK(P)+64
401 K=ASC(INKEY$+"@")
402 POKEP,PEEK(P)-64
403 IFK=0ORPEEK(P+K(K))=128THEN400
404 P=P+K(K)
405 L=1
406 B=1
407 A(B)=P
408 IFK>32THEN400
500 Y=INT((A(B)-M)/32)
501 X=(((A(B)-M)/32)-Y)*32
502 IFF(X,Y)=1THEND=2:ON-(P=A(B))GOTO900:D=1:FORJ=1TO1:GOTO800
600 C=F(X-1,Y-1)+F(X,Y-1)+F(X+1,Y-1)+F(X-1,Y)+F(X+1,Y)+F(X-1,Y+1)+F(X,Y+1)+F(X+1,Y+1)+48
601 IFC<>48THENPOKEA(B),C:FORJ=1TO1:GOTO800
700 POKEA(B),32
701 FORJ=1TO8
702 IFPEEK(A(B)+B(J))=46THENL=L+1:A(L)=A(B)+B(J):POKEA(L),32
800 NEXT
801 B=B+1
802 IFB<=LTHEN500
803 GOTO400
900 M=16384
901 P=33+M
902 ONDGOTO200
903 GOSUB1
904 PRINT@416,"SAFE!"
905 IFI<>10THENPRINT@416,"DEAD!":FORC=1TO10:SOUND1,1:POKE49151,64:POKEA(B),64:NEXT

In addition to the Sweeper game, last year I made a game based on a suggestion from someone from Brazil who commented on one of my programs a while back.  He told me about a game he had made when he was a kid. Érico also sent me an image that had reworked using his old machine. He also described a little how it worked. Based on his recollections, I came up with another game, which I was able to cram into 10 lines in the hope of entering it into the NOMAM 2016 competition, but I was too late. So here is the "Monteiro Challenge," an arcade space flying game with 3 levels to get through, for this year's competition:


Anyway, I don't know if any of these game are any good as games, but they sure were a lot of fun to program. Thanks to Gunnar and the folks at the NOMAM retro event for organizing a great competition. Have fun in Lubeck this year!


P.S.
I had been hoping to get a car game going for the contest, But I can't for the life of me think of how I can get a game dynamic that wont sap the speed of the basic algorithm that I came up with for drawing a moving road graphic. I'll keep plunking away at it. It's called Formula1:



In addition to this program I have been busy lately making some ports of old code from other systems and reprogramming efforts based on videos I have seen. For example, RRUNNER.C10 is a game based on a Sinclair ZX-81 game, which can be seen on Villordsutch's page: https://youtu.be/0zJr3wPoi70.


Here is a modification of some code by my friend Robert Sieg from the MC-10 Yahoo group that draws a friendly frog. I was always intrigued by the starring white eyes of the frog and decided to animate them to make a version of what I call MC-10 Hynotoad:


Quite a bit of programming work had to go into converting a game from QBasic that recreated the Mattel Football classic handheld game from the 1970s. The Qbasic code was by bomberpunk. See this thread for info http://atariage.com/forums/topic/9013... and a vid of the original: https://youtu.be/jNKgpAFOsa0


In addition to the above I have also completed the following projects since I last posted:

Island of Secrets
Island of Secrets is a type-in listing in the book of the same name, which is a free PDF available for download from Usborne Publishing: https://usborne.com/browse-books/features/computer-and-coding-books/ As well as the listing the book contains an illustrated background story to the adventure. Some of the illustrations contain information that may aide the adventurer. I ported it from Commodore 64 version I found on-line. However, there were some bugs in it which prevented it from being winnable (or even playable). I fixed'em. Here's a video of a 64 version. Don't know if its the same one: https://youtu.be/Tstl9kjhpUE

Plunkit
Re-programming of Plunkit for the TRS-80 Coco by Roger Taylor. My MC-10 version was based on the Highretrogamelord video: https://youtu.be/1MFm7_zPTG8


Earthquake
Aardvark Software text adventure, ported from Commodore VIC 20 to TRS-80 MC-10. For original see: https://youtu.be/ulh2QWDoeSQ

Amazing!
A closer examination of the source has prompted some alterations to how the maze is drawn. Now level choice influences the amount of free space present on screen.



VicTron Port of Tron by F. G. Huerta
Originally for the Commodore VIC 20. This is a port of the program to Micro Color Basic for the TRS-80 Micro Color Computer. For the original see: http://blog.nanomuelle.com/2012/03/08/tron-3-0/



CupBall
Port to the TRS-80 MC-10 of a game for the Acorn Atom by Dino Dini called "CupBall." For the original see: https://youtu.be/Uwsm7TcvUao



Awful Green Things for the TRS-80 MC-10
Ported an Acorn Atom version of this classic board game to MC-10. See here for more details about the original: https://youtu.be/Es6WmwWxh50  (GREENTHI.C10)


Robot Nim
Ported from Acorn Atom to the TRS-80 MC-10. Original Basic source by P. Mainwaring, Sept 1981


Sniper 1K Game
Ported from a Sinclair ZX-81 1K games compilation. See: https://youtu.be/aANxm-v7P_M
(SNIPER.C10 in the 4K directory of JimG)

Orbit 1K Game
Ported from a Sinclair ZX81 1K game compilation. See: https://youtu.be/YPP-RhYWCUs
(ORBIT.C10 in the 4K directory of JimG)

Escape from Colditz
From the World of Stewart, a teenage software creation re-imagining escape from the famous WW2 POW camp. See: http://worldofstuart.excellentcontent.com/world/scorpion/scorpion.htm
(COLDITZ.C10)

JetPac
Jet Pac for the TRS-80 MC-10 based on an ZX81 game you can see here:
https://www.youtube.com/watch?v=tg6a84uqKTk


Bowling Champ
Basic game ported to TRS-80 MC-10 from Apple 2 game found at: http://www.atarimagazines.com/compute/issue57/bowling.html
(BOWLING.C10)


Saturday, 26 November 2016

Takaya Arita's Classic "Cavern 2160"


I ran across an interesting looking game ported to the MZ-80 by Joachim Froholt. He mentioned in the blurb for his YouTube vid that:
I translated Takaya Arita's Sharp MZ-80K classic Cavern 2160 to the Sharp MZ-80A (& english).
When I hear someone describing a Basic game as a "classic" my ears immediately pluck up. What is this classic of which you speak? The original game was published as a program listing in the July 1980 issue of I/O Magazine in Japan. I asked Joachim if he had a copy of the original source. He kindly pointed me towards a place where I might find a scan of the article. In the end I decided to simply look up as many videos of the game being played as I could to recreate what I saw using my own code and coding tricks to get speedy animation out of the MC-10. I did eventually get a scan, which was helpful in resolving a few details of the operation of the game, although I am still not sure if I have fully implemented the game, or implemented it with complete fidelity. For example, in my version there is an ultimate time limit. You get quite a bit of time to build your score, but as you do the game gets slightly harder in regular jumps (signaled by some random beeping). At these points the time it takes for the snakes to come back to life after falling shortens. But also, you can reach a point when the time will simply run out. That being said. I have never been able to play to that time.

The original game is described as a classic because, to quote the retro gamer blog:
Dr Takaya Arita’s game is a milestone release from 1980 – it has been considered “the original sandbox game,” and is a strategic digging game that arrived a good couple of years before the likes of Dig Dug and Mr Do.  36 years on, Mindware is now releasing the game on PC, in three different forms. The original version for the Japanese Sharp MZ-80 computer will be converted, and two remixed versions will be provided – one built to the specs of the Sharp MZ-700, and another built as a classic Eighties arcade game. 
The game seems like it would be simple, but it takes a lot of strategy to remove earth in a way that prevents the snakes from overwhelming you or sneaking past and making their way to your "base" and thus, defeating you.  I was able to find various version and ports to other system, including one with a pixel text drawn version of the original Japanese name of the game, which I was able to recreate as a title screen for my version. Strangely enough when I sent Joachim a video of the game I had recreated he noticed my port of  "The Valley" and sent this message:
BTW, I see your last project was The Valley, that's a fun coincidence,
because I was involved with a version for the Sharp MZ-80A just
recently. I only did playtesting for that one. An interesting little
game, more fun than I originally thought it'd be. Here's a video: 
It's a small world when porting projects are being done in such similar succession. Perhaps it's a sign that the pool of "classics" is somewhat limited. Maybe I'm coming to end of it!  Let's hope not. Anyway here's the vid of my version:

Nuclear Submarine Adventure


Commodore 64 Version
TRS-80 MC-10 Version















Nuclear Submarine Adventure was a text adventure published in 1980 by Aardvark Software. Its author was Robert J. Retelle, who also wrote the Star Trek Adventure that I ported recently. Versions exist for the C64/128, OSI/Compukit, TRS-80, TRS-80 and CoCo.  It seemed time to make a version for the MC-10. The source code was provided to me after an inquiry to the Coco e-mail list, by Guillaume Major, who oversees the Coco Archive. I found out about the game because Colin Appleby of the Grundy Newbrain Emulator site, asked me on solution archive forum whether I had the source. That sent me to Curtis Boyle's Coco game website. An inquiry to Curtis via the e-mail list (maintained by Dennis of maltedmedia.com) prompted him to respond that he couldn't place his finger on a copy of it, but the posting  prompted Guillaume  to hunt up a copy from some obscure disk and put it up on the archive.  That's a lot of work being done by a lot of different people sharing across the internet to facilitate the retrocomputing hobby!

Anyway, SPOILER ALERT!  Below I have included a walkthrough and a map thatI created as I game tested the ported source code. I had to simplify all the fancy music. This included a routine that ran a submarine "ping" noise while you are prompted to enter your command. No great loss... I found the ping a little annoying.

I think I found an error in the save routine. It didn't seem to preserve the variable that recorded that you had used the chair to smash open one of the hatches.  So every time you saved you had to get the chair again and re-smash the hatch.  I added that variable to the save routine.  I also added the synonym "GET" for the "TAKE" command, and the options to use U,D,F,A as shorthand for GO UP,GO DOWN,GO FORWARD and GO AFT.

                                     Conning
                                     Tower
                                       /
                                      /
   Engine<-->Reactor<-->Missile<-->Control<-->Galley<-->Crew<----->Torpedo
   Room      Room       Room       Room                 Quarters   Room
    /                               /                     /
   /                               /                     /
Tool                           Battery               Flooded
Room                           Room                  Compartment



About the Story
You are trapped in a crippled nuclear missile submarine and must make your escape.
GO UP,OPEN CABINET,TAKE BOARD,GO DOWN,PUT BOARD,COMPUTER,GO FORWARD,LOOK SINK,TAKE GLOVES,GO AFT
GO DOWN,TAKE BATTERIES,GO UP,GO FORWARD,OPEN HATCH,GO FORWARD,PUT ACID,DROP BATTERIES,DROP GLOVES
HOLD BREATH,GO DOWN,OPEN LOCKER,GO UP,HOLD BREATH,GO DOWN,OPEN CHEST,TAKE SCUBA,LOOK LOCKER
TAKE LANTERN,GO UP,TAKE CHAIR,GO AFT,GO AFT,FIRE TORPEDOES,OPEN HATCH,HIT HATCH,CHAIR,GO AFT
GO AFT,DROP CHAIR,LOOK UP,GO AFT,GO DOWN,TAKE SLEDGEHAMMER,GO UP,GOR FORWARD,HIT PIPES
SLEDGHAMMER,LIGHT LANTERN,DROP SLEDGEHAMMER,GO FORWARD,GO FORWARD,GO FORWARD,GO FORWARD
TAKE GLOVES,GO AFT,GO AFT,GO DOWN,TAKE ELECTRIC,GO UP,GO FORWARD,GO FORWARD,SHOO EEL
DROP ELECTRIC,GO FORWARD,OPEN TUBES,GO TUBES

You made it! Don't get the bends on the way up!


Monday, 14 November 2016

The Valley: The Adventure Continues

Found out "The Valley" actually started out as a very popular type-in for the Commodore Pet, which was then ported to a variety of systems including the original TRS-80 Sharp MZ-80, BBC and Apple. Here are some links discussing it:

http://www.robsons.org.uk/archive/www.classicgaming.com/studio2/valley/valley.htm
http://archeogaming.blogspot.ca/2013/07/the-valley-first-crpg-for-commodore-64.html
http://crpgaddict.blogspot.ca/2014/03/game-142-valley-1982.html
http://c-scope.blogspot.ca/2012/01/back-to-valley-in-8-bit-country.html

I think, from what I have read that this classic RPG was first published in Computing Today April 1982. I was able to get a listing and based on that and the viewing of many pictures of various versions, I realized that the Newbrain version had departed from the original in some ways. The most obvious was that instead of having two castles at each end of the central "path," the Castles were simply placed randomly.  Also, the map was redrawn every time you entered the valley scene from one of the other scenes (Swamp, Forest, Tower). By pouring over the original listing I was able to restore the game's function to be more like the original Pet version. I was also able to clean up the graphics quite a bit, such as making the castles look a little more like castles and the tower more like a tower. Adding better collision detection also prevents attribute clash between these elements. Now the save game feature actually saves the map info so the valley remains steady from saved game to saved game. Lots of other minor fixes too.  Here's how it looks now:
Now forests and swamps, like in the Pet version, are two characters wide. The tower is two characters high. Also revamped the beginning instruction screen to provide more detail about the keys used in the program and revamped and sped up the key input to allow for the option to use all eight directions, instead of just up down left and right, as I think it was in the Newbrain version (which made moving very tedious). Now you can use either: 
QWE
 A D
  ZXC
or
TYU
GH
VBN.
The original used the numeric keypad for movement.  Since mine uses the left letters of the keyboard you must press R instead of E to get a report of your rating level and what items you have recovered. I also changed the map routine for the Tower, Lair and Temple so that it used the original Pet routine:
Now the maps are much smaller (and less tedious to explore) and more interesting than the ones generated by the Newbrain code:
I also changed the lake and island drawing routine for the Swamp and Forest to use the Pet code. On the whole it has been a very satisfying project. I've learned about a classic RPG and done some intensive code fixing with the help of a very nice article published in Computing Today back in 1982...