Upward
Climb for your life
in this Action! game.
by Greg Knauss
They left you! They actually left you! Sure, you had wandered off without telling anybody. Sure, the main transport was running short of air. Sure, nobody really likes you anyway. But still...
"Well," you think, glancing up into the dimly filtered and dirty light, "gotta get out somehow. What to do, what to do ... "
For no very good reason, you think back fondly on your carefree and happy adventuring days, the years you spent exploring, discovering and fighting-all for fun and profit. You were brave, you were valiant. You were the type of guy who, on a bet, would walk into a Marine recruiting office and start signing papers without reading them. You would eat a plateful of beans and then attend an opera. Yes, you bordered on foolhardy. And then you signed up with the government. No, not the Marines; that test with the pegs is a lot harder than it looks... You joined the Solar Energy Commission, Subterranean Division.
And now you're trapped at the bottom of an unpleasantly deep cavern with only a full tank of oxygen, an ugly brute of a bat and the ever-present poison-tipped darts.
"Oh dear," blue-pencils in the editor after seeing what you would probably say in this situation. "Well, I might as well get started."
You plug your headphones into the government issue Ultimate Heavy-Duty Super-Compact Tape Player Complete with Ashtray and drop in a tape. Gunk music, just your luck ...
As you start your long, long ascent, a thought flitters across your mind: "I hope the ropes hold."
Instructions.
To start this finger-mangling business of typing in
Upward, first, select a disk with only DOS and DUP on it. Get the disk
ready to store the thing on, and slam (or, for those of lesser
enthusiasm, put) the Action! cartridge into your computer.Now start typing Listing 1. A bit of advice: the numbers are easier to enter if you have a (soon to be ex-) friend read them to you.
Done? Okay, save the file (as UPWARD) through the editor before compiling! Also, make sure you check your typing with "D:CHECK in Action!" (issue 44). This is because, if you made a mistake, you don't want the whole program eaten. Half the game is machine language, and, if you mistyped something, the computer will acquire a bad case of schizophrenia. So save the silly thing!
Now, remove Action!, put in BASIC and type in Listing 2, the CREATOR, checking your typing with "BASIC Editor II (issue 47). This program is only used once, since it creates a file on disk which Upward reads in as a set.
Now, after saving and running (in that order) CREATOR, reinsert the Action! cartridge, go to the monitor, and type R"UPWARD". (You need to run it straight from the monitor, because the source and object code won't fit into the computer at once.)
The
rules.
When the game is run, you'll see, low on the screen,
the game title and a little man running around. Chasing our hero is an
irritating bat named Skyler. Skyler's speed can be changed between its
three settings by hitting the SELECT key. Choose one of his three
accuracy levels with OPTION. Press START or tap on the joystick button
to begin play.You start the game at the bottom of a nauseatingly deep cavern, and you must reach the top while both your life and air hold out.
For you masochists, there are several
ways to die:
(1) Lava has the predictable effect on your guy-anybody who's lost a marshmallow while toasting it knows what that's like.
(2) Skyler the bat takes huge joy in chomping large bites out of you, thus reducing your strength and killing you slowly. To indicate that Skyler's hurting you, your character will turn a bright pink, partly from anger, partly from rage-but, mostly, from embarrassment.
(3) Darts. Your good friend Illinois Smith told you there were lots of these sorts of things in big caves. They're here, en masse. As with Skyler, these don't kill you instantly, but reduce your strength.
(1) Lava has the predictable effect on your guy-anybody who's lost a marshmallow while toasting it knows what that's like.
(2) Skyler the bat takes huge joy in chomping large bites out of you, thus reducing your strength and killing you slowly. To indicate that Skyler's hurting you, your character will turn a bright pink, partly from anger, partly from rage-but, mostly, from embarrassment.
(3) Darts. Your good friend Illinois Smith told you there were lots of these sorts of things in big caves. They're here, en masse. As with Skyler, these don't kill you instantly, but reduce your strength.
And, of course, there's one way to lose air: breathe. Since you're assumed to be human (be it a correct assumption or not), you do this automatically.
When the game is in progress, there are two gray bars across the top of the screen. The top one, labeled Str:, is how much strength you have left. The second one, Air:, is the oxygen left in your tanks. Once either reaches zero, it's bye-bye!
Life, tenuous as it is, is apportioned to you at the rate of only one per game. Now, since one life in a cave where death can come at any instant is very aggravating (not to mention annoying and frustrating), I would advise you to look before you leap.
Move the joystick to have your man, er, person (sorry) move about. As might be predicted, you must be by a rope to move up and down.
Jumping is accomplished by pressing the button. And, yes, you can jump off of and onto ropes.
The SPACE BAR toggles the pause feature.
When the game ends, the obvious message will be displayed, along with your score and, if appropriate, an asterisk beside it to proclaim a high score. Hit the trigger to return to the title page.
And now, Upward!
Greg Knauss is: politically, liberal; physically, not too hot; scholastically, fairly bored; psychologically, very confused; cosmically, insignificant; and emotionally, quite happy, thank you. On a whim, he has been know to program an entire game just to write a new biography.
The two-letter checksum code preceding the line numbers in Listing 2 is not a part of the BASIC program. For further information, see the "BASIC Editor II," in issue 47. |
Listing 1.
Action! listing.
Action! listing.
; UPWARD by Greg Knauss
; CHECKSUM DATA
;[6A 3D ED A8 39 AC IE D9
; FF 74 FC 62 C0 0B 27 6C
; 92 E6 FF 87 E9 7E E6 9F
; AA A6 E8 78 A7 9A 95 62
; 80 D9 29 79 79 70 EF 7C
; C0 85 AA CD IA B4 EF ED
; B8 E1 E9 F2 DD FB 78 D0
; 45 29 D6 58 AB 75 E8 7E
; 8F 16 A5 2E D9 6E 31 61 ]
BYTE
P,PLY=1780,PIC,PL=1784,PD=1772,
DRW=[1],SKX,SKY=1782,SPIC=[1],
SSP=[3],SAC=[80],SCT=[0],DAX,
DAY=1783,DART,Y,S,I,L,PM,PC=53253,
PPC=53260,SLO,SHI,LO,HI,N,V,ES,STR,
SN,LNS=[0]
BYTE ARRAY
ST="D:UPSET.A"
INT
K1,Y1,K,SK,SY,DX,DY
CARD
DRB,DL,CH,SC=[0],HSC=[0],AIR,J
PROC DLIST()
[112 112 112 71 0 0 6 2
0 2 128 0 101 0 0 37
37 37 37 37 37 37 37 37
5 65 0 0]
RETURN
PROC DLI()
[ 72 169 0 141 10 212 141 22
208 169 0 141 23 208 169 0
141 24 208 169 0 141 25 208
169 0 141 10 212 169 0 141
26 208 169 0 141 9 212 104
64]
RETURN
PROC PLRVBI()
[162 3 189 244 6 240 89 56
221 240 6 240 83 141 254 6
106 141 255 6 142 253 6 24
169 0 109 253 6 24 169 252
6 133 204 133 206 189 240 6
133 203 173 254 6 133 205 189
248 6 170 232 46 255 6 144
16 168 177 203 145 205 169 0
145 203 136 202 208 244 76 87
6 166 0 177 203 145 205 169
0 145 203 200 202 268 244 174
253 6 173 254 6 157 240 6
189 236 6 240 48 133 203 24
138 141 253 6 109 235 6 133
204 24 173 253 6 109 252 6
133 206 189 240 6 133 205 189
248 6 170 160 0 177 203 145
205 200 202 208 248 174 253 6
169 0 157 236 6 202 48 3
76 2 6 76 98 228 0 0]
RETURN
PROC CHSTORE()
[170 170 170 170 170 170 170 170
85 170 170 170 170 170 170 170
0 85 170 170 170 170 170 170
0 0 85 170 170 170 170 170
0 0 0 85 170 170 170 170
0 0 0 0 85 170 170 170
0 0 0 0 0 85 170 170
0 0 0 0 0 0 85 170
0 0 0 0 0 0 0 85
168 32 0 0 0 0 0 0
178 42 32 0 0 0 0 0
170 42 34 0 0 0 0 0
170 170 170 168 32 0 0 0
170 170 170 170 168 32 0 0
170 170 170 170 170 168 32 0
170 170 170 170 170 170 40 32
0 0 0 0 0 0 0 0
85 170 170 170 170 170 170 32
85 170 42 42 42 10 10 0
85 170 170 168 168 160 128 128
0 0 64 128 144 164 168 169
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 2 2 6 10 26 42 106
170 42 42 10 18 2 2 2
170 168 160 128 128 128 0 0
125 190 190 190 174 190 190 190
48 60 60 60 12 60 60 60
186 190 190 190 174 190 190 190
255 255 255 255 255 255 255 255
255 191 191 191 175 175 171 170
255 254 254 250 250 234 178 170
170 171 175 175 191 191 255 255
170 234 234 250 258 250 254 254]
RETURN
PROC GPIX()
[ 56 56 56 16 124 254 186 186
186 124 56 48 40 40 40 108
56 186 186 146 254 124 56 56
56 56 56 40 40 40 40 108
184 184 186 210 122 62 60 56
56 60 60 44 40 44 32 96
56 186 186 146 254 124 56 56
56 56 56 40 40 40 40 108
58 58 186 150 188 248 120 56
56 120 128 104 40 104 8 12
28 24 28 8 28 60 60 62
60 30 31 17 50 34 32 48
28 24 28 8 60 125 95 94
28 28 28 54 98 66 67 0
28 24 28 8 28 60 60 60
62 28 108 60 20 4 4 6
28 24 28 8 28 28 28 28
28 28 30 30 28 8 8 12
56 24 56 16 56 60 60 124
60 120 248 136 76 68 4 12
56 24 56 16 60 190 250 122
56 56 56 108 70 66 194 0
56 24 56 16 56 60 60 60
120 56 54 60 24 16 16 48
56 24 56 16 56 56 56 56
56 56 120 120 56 8 8 24
56 58 58 18 126 252 184 184
184 120 56 40 40 40 40 108]
RETURN
PRO( SPIX()
[ 0 0 0 0 0 0 40 186
214 124 56 16 40 56 214 124
56 16 40 56 84 254 186 16
40 56 84 254 56 16]
RETURN
PROC MUS()
[ 0 0 0 0 150 0 180 100
0 0 75 0 100 100 0 55
75 100 0 180 75 55 0 0]
PROC MUS1()
[250 0 0 250 0 0 250 0
0 250 0 0 250 0 0 250
0 0 250 0 0 250 0 0]
PROC SETUP ()
Graphics(0)
Poke (82,0)
Poke(752,1)
PrintE(" ")
CH=(Peek(106)-40)*256
MoveBlock(CH+80,CHSTORE,272)
Zero(CH,8)
DL=PeekC(560)
SHI=Peek(106)-36
SLO=0
MOveBlock(DL,DLIST,29)
J=PeekC(88)
PokeC(DL+4,J)
PokeC(DL+13,SHI*256)
PokeC(DL+26,DL)
Zero(704,9)
Poke(DLI+2,0)
Poke(DLI+10,0)
Poke(DLI+15,0)
Poke(DLI+20,0)
Poke(DLI+25,0)
Poke(DLI+35,CH/256)
PokeC(512,DLI)
Poke(54286,192)
MoveBlock(1536,PLRVBI,168)
PM=Peek(106)-16
DRB=PM*256+1
Zero(DRB+1024,1024)
Poke(623,4)
Poke(559,62)
Poke(1788,PM+4)
Poke(53277,3)
Poke(54279,PM)
Poke(1771,PM)
PL=16
Poke(1785,3)
PD=1
Poke(1773,1)
SKY=6
SKX=0
Poke(1786,6)
Poke(1774,0)
Poke(1787,1)
Poke (1775,1)
MoveBlock(DRB,GPIK,240)
MoveBlock(DRB+511,SPIX,30)
FOR J=DRB TO DRB+2 DO
Poke(J+256,56)
Poke(J+512+255,60)
OD
POKEC(548,PLRVBI)
RETURN
PROC OXY()
Color=32
Plot(38,2)
DrawTo(AIR/280+5,2)
RETURN
PROC LIFE()
Color=32
Plot(38,1)
DrawTo(STR/6-2,1)
RETURN
PROC PLAY()
V==+2
IF V>15 THEN
N==+1 V=0
Sound(0,0,0,0)
Sound(l,0,0,0)
FI
IF N=24 THEN
N=0
FI
J=Peek(MUS+N)
IF J>0 THEN
Sound(0,J,12,15-V)
FI
J=Peek(MUS1+N)
IF J>0 THEN
Sound(1,J,10,15-V)
FI
RETURN
PROC MOVE()
PLY==+Y1
P==+X1
Poke(53248,P)
Poke(53249,P)
Poke(1781,PLY+15)
Poke(704,15)
IF PPC=6 THEN
STR==-1
Poke(704,70)
LIFE()
FI
IF PPC=10 OR PPC=8 THEN
STR==-25
Poke(53251,0)
DART=0
LIFE()
FI
RETURN
PROC SRTDRT()
DART=0
Poke(53251,0)
DAX=Rand(50)+100
DAY=0
RETURN
PROC BANG()
DAX=DAX+DX
Poke(53251,DAX)
IF DAX=2 OR DAX=252 THEN
DART=0
SRTDRT()
FI
RETURN
PROC SKYLER()
IF SCT=SSP THEN
SCT=0
IF SKX MOD SAC=0 THEN
SX=0
SY=0
IF SKX<P THEN
SX=1
FI
IF SKX>P THEN
Sx=-1
FI
IF SKY<PLY THEN
SY=1
FI
IF SKY>PLY THEN
SY=-1
FI
FI
SPIC==+1
IF SPIC=5 THEN
SPIC=1
FI
Poke(1774,SPIC*6)
SKY==+SY
SKX==+SX
Poke(53256,SKX)
FI
SCT==+1
RETURN
PROC WAY()
x1=0
Y1=0
IF S=14 THEN
Y1=-1
LO=1
HI=4
FI
IF S=13 THEN
Y1=1
LO=1
HI=4
FI
IF S=7 THEN
X1=1
LO=5
HI=8
FI
IF S=11 THEN
X1=-1
LO=9
HI=12
FI
IF X1<>0 THEN
K=X1
FI
RETURN
PROC LEGAL()
IF PC=0 THEN
Y1=1
X1=0
FI
IF PC=1 OR PC=9 THEN
Y1=0
FI
IF PC=2 THEN
P==-K
Y1=1
x1=0
FI
IF PC=3 THEN
Y1=-1
FI
IF PC=4 OR PC=6 THEN
X1=0
FI
IF P<48 THEN
P=48
FI
IF P>202 THEN
P=202
FI
RETURN
PROC ANIMATE()
IF S=15 THEN
IF PC=1 OR PC=5 OR PC=9 THEN
PD=DRW
FI
IF PC=0 THEN
PD=DRW+16
FI
FI
IF PC=1 OR PC=9 THEN
IF S=13 OR S=14 THEN
PD=DRW+208
S=15
FI
FI
IF (S=7 OR S=11) AND
(PC=4 OR PC=6) THEN
S=15
FI
IF S<>15 THEN
IF (X1<>0 AND P MOD 2=0) OR
(PC<>0 AND Y1<>0 AND
PLY MOD 3=0) OR
(PC=0 AND (S=7 OR S=11)) THEN
PIC==+1
FI
IF PIC<LO OR PIC)HI THEN
PIC=LO
FI
PD=DRW+PIC*16
FI
RETURN
PROC JUMP()
IF X1=1 THEN
PD=DRW+96
FI
IF X1=-1 THEN
PD=DRW+160
FI
FOR I=1 TO 40 DO
IF 1>35 THEN
Y1=2
FI
IF I<19 THEN
Y1=1
FI
IF I<11 THEN
Y1=0
FI
IF I<8 THEN
Y1=-1
FI
IF I<4 THEN
Y1=-2
FI
Poke(53278,0)
FOR J=1 TO 750 DO OD
IF (PC=4 OR PC=6) AND I>10 THEN
PD=DRW+32
FI
IF PC>0 AND PC<>2 AND 1>10 THEN
RETURN
FI
IF PLY=189 OR STR<54 THEN
RETURN
FI
IF P<48 OR P>202 THEN
X1=-X1
K=X1
FI
IF PC=2 THEN
X1=-X1
FI
MOVE()
SKYLER()
PLAY()
IF DART=1 THEN
BANG()
FI
OD
RETURN
PROC DN()
SndRst()
FOR S=1 TO 6 DO
FOR I=8 TO 15 DO
Poke(54277,13
PLY==-1
SKY==-1
DAY==-1
Poke(1781,PLY+15)
FOR J=1 TO 100 DO OD
OD
Poke(54277,0)
SLO==+40
IF SLO<40 THEN
SHI==+1
FI
Poke(DL+13,SLO)
Poke(DL+14,SHI)
OD
SRTDRT()
SC==-10
RETURN
PROC UP()
SndRst()
FOR S=1 TO 6 DO
Poke(54277,15)
SLO==-40
IF SL0>215 THEN
SHI==-1
FI
Poke(DL+13,SLO)
Poke(DL+14,SHI)
I=15
FOR Y=1 TO 16 DO
Poke(54277,I)
I==-1
PLY==+1
SKY==+1
DAY==+1
Poke(1781,PLY+15)
FOR J=1 TO 100 DO OD
OD
OD
SRTDRT()
SC==+10
RETURN
PROC FADEIN()
FOR I=0 TO 15 DO
Poke(704,I)
Poke(707,I)
Poke(710,I)
IF I<5 THEN
Poke(DLI+20,64+I)
FI
IF I<5 THEN
Poke(712,144+I)
FI
IF I<7 THEN
Poke(DLI+10,48+I)
Poke(709,I)
FI
IF I<9 THEN
Poke(DLI+2,48+I)
Poke(706,I)
FI
IF I<11 THEN
Poke(DLI+15,I)
FI
IF I<13 THEN
Poke(708,32+I)
FI
FOR J=1 TO 2000 DO OD
Sound(0,200,8,15-I)
OD
RETURN
PROC PLRGO()
FOR I=0 TO 3 DO
Poke(704+I,0)
Poke(53248+I,O)
OD
DN()
PLY=200
DN()
Poke(559,0)
Poke(712,0)
UP()
PLY=50
UP()
RETURN
PROC PAUSE()
Poke(764,255)
SndRst()
Position(27,0)
Print("PAUSED")
WHILE Peek(764)<>33 DO OD
Position(27,0)
Print(" ")
Poke(764,255)
RETURN
PROC TITLE()
SndRst()
J=PeekC(88)
Poke(77,0)
Poke(88,SLO-40)
Poke(89,SHI-1)
Print("***> B*C ")
Print(" A******")
Print("***C 3 ")
Print(" B******")
Print("*** ")
Print(" 4B****")
Print("**C + + ++> + ")
Print("+ A+> ++> ++> 3B**")
Print("*C * * * * * ")
Print("* * * * * *B* B*")
Print("*> * * *+C * + ")
Print("* *+* *+C * * *")
Print("** *>* * *>*A")
Print("* * * *B> *A* A*")
Print("**> B*C * B***")
Print("C * * * B>**C A**")
Print("B**+++++++++++++++++")
Print("+++++++++++++++++**C")
Print(" 3456789876543456789")
Print("8987654345678987653 ")
Zero(SHI*256+400,600)
PokeC(88,J)
Print("")
Position(4,1)
Print("Copyright 1985 ")
Print("ANALOG Computing")
IF HSC=0 THEN
Position(13,2)
Print ("By Greg Knauss")
FI
IF HSC>0 THEN
Position(13,2)
Printt"High Store: ")
PrintC(HSC)
FI
AIR=6600
STR=246
SN=1
N=0
V=0
P=183
PLY=187
S=15
PIC=0
MOVE()
FADEIN()
FOR L=1 TO 5 Do
PLY=187
PD=DRW+208
FOR J=1 TO 10000 DO OD
PD=DRW
FOR J=1 TO 10000 DO OD
OD
SRTDRT()
S=11
WHILE Peek(53279)<>6 AND
STrig(0)<>0 DO
AIR=6600
STR=246
IF P=190 THEN
S=11
FI
IF P=58 THEN
S=7
FI
PLY=187
WAY()
MOVE()
ANIMATE()
SKYLER()
PLAY()
Poke(53278,0)
FOR J=1 TO 700 DO OD
IF Peek(53279)=5 THEN
SSP==-1
SCT=0
IF SSP=0 THEN
SSP=3
FI
SndRst()
FOR J=1 TO 250 DO
Sound(0,J,10,15-J/16)
OD
FI
IF Peek(53279)=3 THEN
SAC==-20
IF SAC=0 THEN
SAC=80
FI
SndRst[7
FOR J=1 TO 250 DO
Sound(0,250-J,18,15-J/16)
OD
FI
IF P=DAX AND DART=0
AND DAY=0 THEN
DART=1
DAY=Rand(100)+75
DX=Rand(2)
IF DX=0 THEN
DX=-3
DAX=245
FI
IF DX=1 THEN
DX=3
DAX=3
FI
FI
IF DART=1 THEN
BANG()
FI
IF DART=0 THEN
SRTDRT()
FI
OD
SC=118
PLRGO()
SHI=SHI+4
Poke(DL+14,SHI)
RETURN
PROC ERR()
Close(1)
IF SN=1 THEN
Position(0,1)
Print(" Please insert a ")
PrintE("disk With Upward sets ")
Print(" present and press")
Print(" the . ")
Poke(712,149)
Poke(559,62)
WHILE STrig(0)=1 DO OD
SSP==+1
SAC==+20
Poke(559,0)
Poke(712,0)
FI
SN=1
SSP==-1
IF SSP=0 THEN
SSP=1
SAC==-20
IF SAC=0 THEN
SAC=20
SSP=1
FI
FI
Open(1,"D:UPSET.A",4,0)
RETURN
PROC READSET()
IF LNS=0 THEN
Close(1)
LNS=1
Poke(ST+9,SN+64)
Error=ERR
Open(1,ST,4,0)
FOR J=0 TO 2999 DO
S=GetD(1)
Poke(SHI*256+J,S)
OD
FI
Close(1)
AIR=6600
STR=246
ES=0
Print("")
Position(2,1)
Print("Str:")
Print("")
Position(2,2)
Print("Air:")
Print("")
FOR J=3000 TO 3079 DO
Poke(SHI*256+J,10)
OD
Poke(559,62)
FADEIN()
FOR P=1 TO 11 DO
DN ()
PLY=200
OD
PD=DRW
Poke(704,8)
P=185
PLY=187
MOVE()
FOR I=0 TO 15 DO
Poke(704,I)
FOR J=1 TO 3800 DO OD
OD
RETURN
PROC GOGOGO()
DO
SETUP()
TITLE()
DO
READSET()
WHILE ES=B DO
Poke(77,0)
IF PC=8 OR PC=18 OR PC=12 OR
STR<54 OR AIR<54 THEN
ES=1
FI
IF PLY<110 AND SLO=0 THEN
ES=2
FI
AIR==-1
IF AIR MOD 200=0 THEN
OXY()
FI
S=Stick(0)
WAY()
IF STrig(0)=0 AND PC<>0 AND
PC<>2 AND PC<>3 AND
PC<>8 THEN
JUMP 0
FI
LEGAL()
MOVE()
SKYLER()
ANIMATE()
PLAY()
Poke(53278,8)
IF P=DAX AND DART=0 AND
DAY=0 THEN
DART=1
DAY=PLY+10
DX=Rand(2)
IF DX=0 THEN
DX=-3
DAX=245
FI
IF DX=1 THEN
DX=3
DAX=3
FI
FI
IF DART=1 THEN
BANG()
FI
IF PLY>189 THEN
DN()
FI
IF PLY<85 THEN
UP()
FI
FOR J=1 TO 788 DO OD
IF Peek(764)=33 THEN
PAUSE()
FI
OD
IF ES=2 THEN
SC==+(STR/3)+(AIR/100)
Poke(706,0)
Poke(707,0)
Position(25,0)
Print("SCORE: ")
PrintCE(SC)
Print(" ")
Print("Congratulations!")
PrintE[" ")
Print(" For next cavern ")
Print("press the .")
WHILE STrig(0)=1 DO
PD=DRW+16
x1=0
SKY=200
JUMP()
FOR J=1 TO 800 DO OD
OD
Zero(SHI*256+400,600)
PLRGO()
SC==+110
LNS=0
SN==+1
FI
UNTIL ES=1
OD
PD=DRW+16
FOR I=0 TO 15 DO
PL==-1
PLY==+1
Poke(704,15-I)
SKYLER()
IF DART=1 THEN
BANG()
FI
PLAY()
FOR J=1 TO 1000 DO OD
OD
S=0
WHILE STrig(0)=1 DO
SKYLER()
IF DART=1 THEN
BANG()
FI
PLAY()
S==+1
IF S=1 THEN
Position(21,0)
Print(" ")
FI
IF S=100 THEN
Position(21,0)
Print(" SCORE: ")
PrintC(SC)
IF SC)HSC THEN
Print("")
FI
Print(" ")
FI
FOR DL=1 TO 800 DO OD
OD
IF SC>HSC THEN
HSC=SC
FI
IF SN)1 THEN LNS=0 FI
OD
RETURN
Listing 2.
BASIC listing.
BASIC listing.
IK 8 POKE 82,8:DIM AS(42),BS(42)
DZ 10 ? "↓↓↓ PLEASE PUT THE DISK TO CON
TAIN THE SET INTO DRIVE ONE AND P
RESS .":INPUT AS
UE 20 OPEN #1,8,0,"D:UPSET. A"
QV 30 FOR J=1 TO 75:READ A$
BP 40 IF LEN(A$)=42 THEN 70
SR 50 A$(LEN(A$)+1)=","
NQ 60 READ B$:A$(LEN(A$)+1)=B$:GOTO 40
JN 70 B$=A$(2,41)
QJ 80 FOR I=1 TO 40:PUT #1,ASC(B$(I))-32
PH 90 NEXT I:NEXT J
FJ 100 CLOSE #l:? " OK! SET'S DONE, YOU
CAN PLAY NOW!"
SO 10000 DATA '
'
SS 10010 DATA '
'
FZ 10020 DATA '//012 2212 21000000000
011100112 '
RV 10030 DATA '*****+D+****+++***********
*********+,,--'
OG 10040 DATA '954343EB89876543B******765
43456789876E43'
GI 10050 DATA ' E 4B***C
E '
UU 10060 DATA ' E BC3
E '
NV 10070 DATA ' E
E '
BY 10080 DATA ' E <++= .
1l E '
WL 10090 DATA ' E <= 34 3
34 E '
OX 10100 DATA '
2 E '
EP 10110 DATA ' 210/.-,=
4 E '
ZL 10120 DATA ' E 210/.-,= 345678C
E '
UP 10130 DATA '<D;8987654
E '
KV 10140 DATA ' E A+++++++++,-,
/012 '
UL 10150 DATA ' E A*********C B*
****+,-./812 2'
DT 10160 DATA ' E *********C 3
B***********DC'
AP 10170 DATA ' <= **C E BC
4 B********E '
FG 10180 DATA ' B* E
BC 5678CE '
VF 10190 DATA ' <D= 0 8 E <=
E '
US 10200 DATA ' E <= 31 //
2 0 E '
IZ 10210 DATA ' E 4 43
4 3 E '
TG 10220 DATA '++D+
++++'
DG 10230 DATA '74E45678987654345678987654
34567898765434'
OT 10240 DATA ' E
'
PB 10250 DATA '++++++++= <,-./012
'
FY 10260 DATA '89876543 3456789;,-./
012 '
SR 10270 DATA ' 3456
789;+++++++D++'
XV 10280 DATA ' AD>
345678CE34'
DX 10290 DATA '+CE* <=
E '
QG 10300 DATA '*>E* 4567654
E '
ZU 10310 DATA '**F*> 00 <=
2 E '
MW 10320 DATA '*CEB* <++= 43 <
++= 4 E '
K8 10330 DATA '* E *> 34
34 '
CW 10340 DATA '*>E **
'
DK 10350 DATA '**EA**********************
**************'
TM 10360 DATA '*CEB****F******F****F****F
********F****F'
ZY 10370 DATA '3 E 3454E345654E3453E 343E
34678765E3453E'
UE 18380 DATA ' E E E E
E E'
FL 10390 DATA ' E E E E
E'
AH 10400 DATA ' E E E
E'
DA 10410 DATA ' E
E'
PI 10420 DATA '
E'
PH 10430 DATA '
E'
VX 10440 DATA '+++++++++++++++++++
+++++++++++++D'
GR 10450 DATA '75434567898765434567898765
4345678987654E'
PY 10460 DATA '
E'
GX 18470 DATA '<D++++++++++++++++++++++++
++++++++++'
CA 10480 DATA ' EB78987654345678987654345
67898765434567'
0I 10490 DATA ' E
'
BM 10500 DATA '++= <= <+= <+++= <
+++= <= <D'
GY 10510 DATA '43 3 *C3
43 E'
LU 10520 DATA ' A*
E'
GP 10530 DATA ' <++++++++++++*C
E'
EL 10540 DATA ' 3456789876543210/.-,=
<+++++++++++'
ML 10550 DATA ' 210/.-,;8876B**
**C 3456788'
JE 10560 DATA ' 210/.-,;9876543 B*
*C '
LG 10570 DATA 'D9765433 B*9
898C '
NX 10580 DATA 'E 3
'
WX 10590 DATA '++++++++++++++++++++++++++
+++++++++++++D'
ZW 10600 DATA '54345678987654345678987654
3456789876543E'
IU 10610 DATA ' 2
E'
SM 10620 DATA '+D++++= A+> 4 <+++++
+++++++++++++'
SU 10630 DATA 'CEB876 BFC 3456
78987654345677'
KR 10640 DATA ' E E <++=
'
PC 10650 DATA ' E 2222 E 34
'
DK 10660 DATA '**C E
<+++++++D= '
XO 10670 DATA '*C E
345678CE '
OV 10680 DATA '**C <++++++++++++++++
++= E '
EW 10690 DATA '***C3 4457654345678987
6543 E '
TU 10700 DATA '653
E '
NN 10710 DATA ' <D= <++++++++++++++
+++++++= E '
GA 10720 DATA ' E 54345678987654345
6789863 A'
MW 10730 DATA ' E 2 2
A*'
PF 10748 DATA '+++++++++++++++**++++++
++++++++++++**'
Listing 3.
Action! listing.
Action! listing.
;UPWARD EDITOR by Greg Knauss
; CHECKSUM DATA
;[B4 F9 4B 46 88 45 83 FF
; 5A 8C 27 3D EC 4A IF 34
; 24 27 7E 19 65 C4 11 E8
; 69 63 6C C8 DE AC 77 1F
; 4F 3A 18 9D 15 33 5B 6D
; 65 AD 02 5F 74 60 ]
BYTE
P,I,R=[1],Y=[1],S,STG=[0],SLO,SHI,
STC=[32],SN=[1],CLR=[32],ERR=[0],
L=[1]
INT
X1,Y1
CARD
J,SCN,DL,CH
BYTE ARRAY
ST="D:UPSET.A"
PROC DLI()
[ 72 169 56 141 10 212 141 22
208 169 54 141 23 208 169 10
141 24 208 169 68 141 25 208
169 0 141 10 212 169 0 141
26 208 169 0 141 9 212 104
643
RETURN
PROC NEWLIST()
[112 112 112 71 0 0 6 130
0 5 32 101 0 0 37 37
37 37 37 37 37 37 37 5
65 8 0]
RETURN
PROC CHSTORE()
[170 170 170 178 170 170 178 170
85 170 170 170 170 170 170 170
0 85 170 170 170 170 170 170
0 0 85 170 170 170 170 170
0 0 0 85 170 178 178 170
0 0 0 0 85 170 170 170
0 0 0 0 0 85 170 170
0 0 0 0 0 0 85 170
0 0 0 0 0 0 0 85
168 32 0 0 0 0 0 0
170 42 32 0 0 0 0 0
170 42 34 0 0 0 0 0
170 178 170 168 32 0 0 0
170 170 170 170 168 32 0 0
170 170 170 170 170 168 32 0
170 170 170 170 170 170 40 32
0 0 0 0 0 0 0 0
85 170 170 170 170 170 170 32
85 170 42 42 42 10 10 0
85 170 170 168 168 160 128 128
0 0 64 128 144 164 168 169
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 2 2 6 10 26 42 106
170 42 42 10 10 2 2 2
170 168 160 128 128 128 0 0
125 190 190 190 174 190 190 190
48 68 60 60 12 60 60 60
186 190 190 190 174 190 190 190
255 255 255 255 255 255 255 255
255 191 191 191 175 175 171 170
255 254 254 250 250 234 170 170
170 171 175 175 191 191 255 255
170 234 234 250 250 250 254 254
255 195 195 195 195 195 195 255
0 63 48 63 3 3 63 0
0 60 51 51 51 51 60 0
15 15 3 63 207 287 12 60
192 204 12 248 192 192 192 240]
RETURN
PROC TOPSCRN()
Poke(83,39)
Position(0,l)
Print(" *+,-,/012 3456789; <=>ABC")
Print(" DEF GHIJK ")
Position(0,2)
Print(" *+,-./012 3456789; <=>ABC")
Print(" DEF MN ")
Poke(83,0)
RETURN
PRO( SETUP()
Graphics()
Poke(752,1)
Poke(82,1)
PrintE(" ")
DL=PeekC(560)
SHI=Peek(106)-32
SHI==+8
SLO=0
MoveBlock(DL,NEWLIST,50)
SCN=PeekC(88)
J=PeekC(88)
PokeC(DL+4,J)
Poke(DL+12,0)
Poke(DL+13,SHI)
J=PeekC(560)
PokeC(DL+25,J)
CH=(Peek(106)-40)*256
MoveBlock(CH+80,CHSTORE,512)
Zero(CH,8)
Poke(DLI+35,CH/256)
PokeC(512,DLI)
Poke(54286,192)
Poke(708,0)
Poke(709,6)
Poke(710,15)
Poke(712,148)
Zero(SHI*256+SLO,256*12+40)
Print("")
PrintE(" LEVEL: 1"7
TOPSCRN()
RETURN
PROC OOPS()
Poke(559,34)
Position(0,1)
Printt" ")
Print(" Any key to continue.X")
I=GetD(l)
ERR=1
Close(2)
RETURN
PROC SETNO()
FOR J=1 TO 15000 DO OD
WHILE STrig(0)=1 DO
IF Stick(0)=7 AND SN<25 THEN
SN==+1
FI
IF Stick(0)=11 AND SN>1 THEN
SN==-1
FI
IF Stick(0)<>15 THEN
Position(24,1)
Print(" ++")
PrintB(SN)
FI
FOR J=1 TO 7000 DO OD
OD
RETURN
PROC CONFIRM()
S=0
Position(31,1)
Print("Y/")
FOR J=1 TO 15000 DO OD
WHILE STri9(0)=1 DO
IF Stick(0)=7 THEN
Position(31,1)
Print("Y/")
S=0
FI
IF Stick(0)=11 THEN
Position(31,1)
Print("/N")
S=1
FI
OD
RETURN
PROC SAVE()
Position(0,1)
Print(" Save set:")
Print(" ")
Position(24,i)
PrintB(SN)
SETNO()
Position(6,1)
Print("ConfirM: as set ")
PrintB(SN)
Print("?")
CONFIRM()
IF S=0 THEN
RETURN
FI
Poke(559,0)
SHI=Peek(106)-32
SLO=0
L=1
Position(33,0)
Print(" ++")
PrintB(L)
Poke(DL+12,SLO)
Poke(DL+13,SHI)
Close(2)
Error=OOPS
ERR=0
Poke(ST+9,SN+64)
Open(2,ST,8,0)
IF ERR=0 THEN
FOR J=0 TO 2999 DO
S=Peek(SHI*256+J)
PutD(2,S)
OD
Close(2)
FI
Poke(559,34)
RETURN
PROC LOAD()
Position[0,1)
Print(" Load set:")
Printt" ")
PositionC24,1)
PrintB(SN)
SETNO()
Position(6,1)
Print("Confirm: set ")
PrintB(SN)
Printt"?")
CONFIRM()
IF S=0 THEN
RETURN
FI
Poke(559,0)
SHI=Peek(106)-32
SLO=0
L=1
Position(33,0)
Print(" XX")
PrintB(L)
POke(DL+12,SLO)
Poke(DL+13,SHI)
Error=OOPS
ERR=0
Poke(ST+9,SN+64)
Open(2,ST,4,0)
IF ERR=0 THEN
FOR J=0 TO 2999 DO
S=GetD(2)
Poke(SHI*256+J,S)
OD
Close(2)
FI
Poke(559,34)
RETURN
PROC CLEAR()
Position(6,1)
Print("Confirm: set?")
Print(" ")
CONFIRM()
IF S=1 THEN
SHI=Peek(106)-32
SLO=0
L=1
Position(33,0)
Print(" ++")
PrintB(L)
Poke(DL+12,SLO)
Poke(DL+13,SHI)
Zero(SHI*256+SLO,3000)
POkeC(88,SCN)
FI
RETURN
PROC DISK()
Poke(83,39)
Position(0,1)
Print(" EXIT SAVE LOAD")
Print(" CLEAR ")
S=1
WHILE STrig(0)=1 DO
IF S>1 AND Stick(0)=11 THEN
S==-1
FI
IF S<4 AND Stick(0)=7 THEN
S==+1
FI
IF Stick(0)=7 OR Stick(0)=11 THEN
Position(0,1)
Print(" EXIT SAVE")
Print(" LOAD CLEAR ")
FI
IF S=1 THEN
Position(5,1)
Print("")
FI
IF S=2 THEN
Position(13,1)
Print("")
FI
IF S=3 THEN
Position(21,1)
Print("")
FI
IF S=4 THEN
Position(29,1)
Print("")
FI
FOR J=1 TO 5000 DO OD
OD
FOR J=1 TO 10000 DO OD
IF S=2 THEN
SAVE()
FI
IF S=3 THEN
LOAD()
FI
IF S=4 THEN
CLEAR()
FI
X=38
STC=32
TOPSCRN()
Position(38,2)
Print("L")
RETURN
PROC LEV()
PokeC(88,SCN)
Poke(83,39)
Position(33,0)
Print(" XX")
PrintB(L)
Poke(83,0)
Poke(88,SL0)
Poke 189,SHI)
RETURN
PROC SCROLLDN()
Color=CLR
Plot(X,Y)
FOR S=1 TO 6 DO
FOR I=6 TO 15 DO
Poke(54277,I)
FOR J=1 TO 150 DO OD
OD
Poke(54277,0)
SLO==+40
IF SLO<40 THEN
SHI==+1
FI
Poke(DL+12,SLO)
Poke(DL+13,SHI)
Poke(88,SLO)
Poke (89, SHI)
OD
L==+1
LEV()
CLR=Locate(X,Y)
RETURN
PROC SCROLLUP()
Color=CLR
Plot(X,Y)
FOR S=1 TO 6 DO
Poke(54277,15)
SLO=SLO-40
IF SLO>215 THEN
SHI==-1
FI
Poke(DL+12,SLO)
Poke(DL+13,SHI)
Poke(88,SLO)
Poke(89,SHI)
I=15
FOR P=1 TO 16 DO
Poke(54277,I)
I==-1
FOR J=1 TO 150 DO OD
OD
OD
L==-1
LEV()
CLR=Locate(X,Y)
RETURN
PROC GETNPRNT()
STC=GetD(l)
IF STC<33 OR STC>'K THEN
STC=32
FI
IF STC>'F THEN
STC==+128
FI
Color=STC
Plot(X,Y)
CLR=STC
STG=0
IF X<39 THEN
X==+1
CLR=LOCate(X,Y)
FI
Color='L
Plot(X,Y)
Poke(764,255)
RETURN
PROC CHOOSE()
Color=CLR
Plot(X,Y)
PokeC(88,SCN)
TOPSCRN()
Y=2
CLR=Locate(X,Y)
Color='L
Plot(X,Y)
DO
S=Stick(0)
X1=0
IF S=11 AND X>8 THEN
X1=-1
FI
IF S=7 AND X<39 THEN
X1=1
FI
IF S<>15 AND (X1<>0 OR Yl<>0) THEN
S=Locate(X+XI,Y+Y1)
Color=CLR
Plot(X,Y)
X==+X1
Color='L
Plot(H,Y)
CLR=S
FI
FOR J=1 TO 2000 DO OD
IF STrig(0)=0 THEN
STC=CLR
FOR J=1 TO 255 DO
Sound(0,J,8,15-J/17)
OD
STG=0
FI
IF STC='N THEN
DISK()
FI
UNTIL StiCk(0)=13
OD
TOPSCRN()
Poke(88,SL0)
Poke(89,SHI)
Y=0
CLR=Locate(X,Y)
Color='L
Plot(X,Y)
IF STG='M THEN
STG=1
STC='3
FI
RETURN
PROC MAIN()
SETUP()
Poke(88,SLO)
POke(89,SHI)
Color=32
For J=0 TO 8 DO
P=Locate(0,J)
Plot(8,J)
OD
FOR J=3000 TO 3079 DO
Poke(SHI*256+J,10)
OD
Poke(SHI*256+2954,47)
Poke(SHI*256+2955,48)
Open(1,"K:",4,0)
CLR=32
DO
S=StiCk(0)
X1=0
Y1=0
IF (S=10 OR S=14 OR S=6) AND
Y>0 THEN
Y1=-1
FI
IF (S=9 OR S=13 OR S=5) AND
Y<8 THEN
Y1=1
FI
IF S<12 AND S>8 AND X>0 THEN
X1=-1
FI
IF S<8 AND S>4 AND X<39 THEN
X1=1
FI
IF Stick(0)=14 AND Y=0 THEN
CHOOSE()
FI
IF (X1<>0 OR Y<>0) AND
S<>15 THEN
S=Locate(X+X1,Y+Y1)
Color=CLR
Plot(X,Y)
X==+X1
Y==+Y1
CLR=S
FI
Color='L
Plot(X,Y)
IF Peek(532797=6 AND SLO<>80 THEN
SCROLLDN()
FI
IF Peek(53279)=5 AND SLO<>0 THEN
SCROLLUP()
FI
IF Peek(764)<>255 THEN
GETNPRNT()
FI
IF STrig(0)=0 AND STC<>'M THEN
CLR=STC
FI
IF STrig(0)=0 AND STG<>0 THEN
STC==+STG
IF STC='9 THEN
STG=255
FI
IF STC='3 THEN
STG=1
FI
FI
FOR J=1 TO 2088 DO OD
OD
RETURN