Safari Sam was released from the Sam Coupé sometime in 1994, a collaboration with Derek Morgan (of SAM PD) who provided the theme and level ideas. It was developed in SCADs
Safari Sam is a platform game I developed for the Sam Coupé, sometime in 1994 — I didn't have the optional system clock for the Coupé so there are no timestamps on all except one file, but the copyright message says a year earlier — The game is a standard platformer where you control ‘Sam’ as he makes his way home through the tropics after an untimely plane crash. It was built using the Sam Coupé Arcade Development System (SCADS) and written in Basic with the SCADS extensions.
The following files are available for Safari Sam —
- Disk Image (.DSK) to run on Sam Coupé or Sim Coupé
- Extracted files in .ZIP format
- Converted files including images + BASIC text
If you don't have an actual Sam Coupé you can download Sim Coupé.
Safari Sam was reviewed in Fred 59, scoring a rather disappointing (but fair) 57%.
Story
The story of Safari Sam. I can't remember whether it was deliberately awful.
Sam woke at about 12 o'clock, he was supposed to be going to the Bermudas for his holidays and so he got himself packed and set off in the general direction of the airport.
After taking a few 'short-cuts' and arriving 3 hours late he expected to be prodded away and be made to buy a new ticket. But as he walked into the terminal he heard over the intercom that his plane was just arriving, and was late due to engine trouble.
He was rushed through the security gates and then put on the plane. As far as luxury goes this plane wasn't what you'd call very good, but it flew, for a while anyway.
'Last Chance Airlines' had always had a bad reputation but Sam being the sort of trusting (stupid) person he was decided he would put his life in their hands.
The engine roared and rattled into action then cut out with a bang. A few hours passed and then the engine started going again.
Sam was sat next to a small child of about three who insisted on showing Sam his dead beetle collection, but they were all the same which made it that bit more depressing.
As they flew over the sea the child started to count the waves and insisted that Sam should help...
"....10232.....10233..." the counting went on, and on, and on, until the child went to sleep. Sam took to reading the In-Flight magazine...
'Arts, Crafts, Explosives' was the rather ingenious title....Inside were things that had been designed to tranquilise any scared people who were on their first flight, using a special technique known as boredom..
...Then came the bang, the engine stopped and the plane began to slow down, then stop, then fall extremely fast towards the floor.
The floor grew closer and closer and closer and then the small child woke up..Totally oblivious to what was happening he started to count the trees that they were about hit..
Sam being a rational person began to scream, clutch his head, and beg for mercy and things...
Then as the plane his the first bunch of trees the plane disintigrated and Sam was left there falling in his chair...
Crunch! Sam (and his chair) hit a branch, the chair continued plummeting downwards while Sam sort of sprung up & down & up & down constantly...
Sam then began to fall towards the floor and he hit it with a whimpering sound that sounded sort of like "Awooouhahooow".
When Sam came round it was night time, he knew his time had come, his time to fight for justice to lay down his life to save those of others, to find a gun...
"Aha" he said as a gun materialised in a sort of Star-Trekky manner.
He took the gun and set off on his Journey Home.
The story has no bearing on any of the gameplay, except for the enemies that you face on the way — which include monkeys, parrots, tribesmen and hunters. Being an ecological fellow, you lose points if you kill any animals. The instructions are reproduced from the game below, and are also available from the main menu.
Instructions
Controls
To have even the slightest chance of completing this game you should know the following things. As you know you can set the keys from the Options menu, but also at any point in the game you can also change your keys:
- F1 - Joystick 1
- F2 - Cursors, SYMBOL
- F3 - Joystick 2
- F4 - Q,A,O,P, SPACE
Also during the game pressing F0 will display the Quick-Guide help which shows:
- Points Scored for killing things.
- The damage taken from certain objects.
- The key changing F keys.
How to die
There are 2 ways to die:
- Running out of energy. As soon as your energy level reaches 0 you will die.
- Falling Off The Bottom Of the Screen. By doing this you will die instantly.
In both cases you will return to the first level of the game.
Completing the Game
When you finish the 3rd level you will have completed the game, you may get a chance to enter your name in the scoreboard and the you will restart on level one at a higher difficulty setting.
Sam has a great deal of respect and stuff to animals and so if you kill one you will lose points. Shooting your food is alright - It cannot be destroyed. On each level there is a key that needs to be collected to exit the level. If you miss it you will have to go all the way back to get it.
To support developers in [[ countryRegion ]] I give a [[ localizedDiscount[couponCode] ]]% discount on all books and courses.
[[ activeDiscount.description ]] I'm giving a [[ activeDiscount.discount ]]% discount on all books and courses.
Walkthrough
The game starts with a short credit roll mostly featuring me. There are also credits for Derek Morgan, who ran the Sam Public Domain Library, and came up with the concept for the game; and Rik Moore who wrote the music. The software is released under "Metropolis Software" which was the name I was giving myself back in 1994.
The main menu follows the credit roll, which offers options to Start Game or change Options. The game options allow sound and music to be turned on/off, controls to be changed (4 alternatives) and the difficulty to be set (changing the damage done by enemies). The instructions, credits and story are all reproduced in this page.
The pre-game splash screen, showing Sam in a suit perched on a branch. These screens were generated using freely available clipart (probably from an early version of Microsoft Works), with adjusted colours and addition of the background/text. I'm not sure what this clipart would be used for other than a game about a businessman in the jungle.
The gameplay involves moving right while shooting things. Ammo is limited and must be collected through the game and there is health to pick up in the form of pizza and cupcakes. There is also some kind of diamond that gets you extra points.
All the other characters in the game are trying to kill you, and you can kill them by shooting them. However, shooting animals is not nice and you lose points.
Rolling barrels and cupcakes. I've never been on safari.
Reaching the end of level with the key turns the flag green and completes the level. Here I've not picked up the key (the zero in the top right), not sure if that's a bug.
Unfortunately, a bug in the version I was able to recover makes loading of level 2 fail. After some fiddling — and head scratching trying to remember Sam BASIC — I got it going.
But not quite. The following screenshot is supposed to be from the beginning of level 2, but shows the level 1 platform placement. The sprites are landing in the right place, and then falling to the bottom of the screen. Something to debug on a rainy day.
The complete set of splash screens are shown below. The PNG files were extracted as screenshots from running within Sim Coupé, as I've not found a reliable way to convert the images directly from the original files.
This review of Safari Sam originally appeared in Fred 59, July '95, and is written by Colin Anderton.
Sam (unfortunately not the robot - I don't think) is going on holiday. Whilst taking a number of short-cuts to the airport, he ends up three hours late. Luckily (ahem), the plane hasn't left yet due to engine trouble. Sam boards the (very dodgey) plane and after a couple of attempts, it is skyborne. Living up to its reputation, the plane conks out and begins to fall out of the sky.
By a lucky coincidence (which is necessary else it wouldn't be much of a game!) Sam survives the fall with only a bang on the head. A gun materialises in front of him as Sam finds himself in the jungle. He picks up the gun and begins his journey home.
Safari Sam is a platformer (hooray). It's a relatively small game with only three levels and has been written in SCADs by Martin Fitzpatrick. Sam must collect the key on each level then reach the exit, killing nasty hunters that get in the way and doing his best not to kill the little animals. The controls are the usual for a simple platformer - left, right, jump and fire.
To review the game properly, let's go back to the start. Safari Sam comes on one disc. Upon booting there's a simple, but very very nice introduction. The menu is excellent with plenty of options including difficulty, toggle FX, change keys (which can also be done in the game), story and instrcutions. The menu is simple to use, with a reasonable e-tracker tune (by Rik Moore) playing, the instructions are clear enough, the story is long but humorous enough to stop you getting bored and the grammar is nearly perfect.
After you've decided on what options to select, you can start the game. A different little picture greets you at the start and finish of each level, all adding to the professional feel of the program.
Then the game starts. The sprites are average sized (about 8 by 12 I think), the graphics are nothing amazing, but adequate and easily recognisable (and all done by Martin). The enemies are very nice in that they fire back a lot (as they would if it were realistic) and don't just walk around like lemons waiting to be shot. Your life is in terms of energy, so one shot won't kill you.
The idea is to jump about, shoot all the men in your way (without wasting all your ammo) and reach the end of the level. It is a really simple game, and there isn't much to it apart from that. You die when your energy runs out or when you fall off the bottom of the screen (very annoying). It's definitely not a game which will stun you with it's new ideas, but it does have a strange addictive quality to it. You have only one life, so if you die on level 3, you go back to the start of level 1. When you complete the game, you start again on a higher difficulty.
It is nice to have another platformer released, even if it is a SCADs game. It's also nice to see that F9 software are releasing plenty of decent budget games, although I hope they don't release too many that aren't up to the required standard.
Overall, it is pretty obvious that Safari Sam is a pretty standard average game. Martin has done a very good job of turning what could have beena pile of rubbish into something that is nice to look at and enjoyable to play. I doubt its lastng qualities after you have completed it, and I also doubt it'll take long before you do get through the game (remember, it only has 3 levels). However, if you like the odd platformer or are looking for a little budget game, have a look at it.
Rating | Score |
---|---|
Playability | 61% |
Lastability | 43% |
Graphics | 55% |
Sound | 50% |
Overall | 57% |
Retrospective (2022)
This review is totally fair, the game kinda sucks, it's slow, laggy and has a weird difficulty curve -- a lot of that can be blamed on SCADS/BASIC, but then you have to design to the limitations of your system. The game spams bullets on the screen which cause it to drag. There was talk of a SCADS compiler being written, which would have helped a bit, but it never materialized. See the following letter from Jupiter Software in the same issue of FRED.
Rather than a more advanced manual, I want to see a SCADs compiler. I know it's a large project, but it really is a necessity. SCADs runs far too slow, but a compiler would shoot it way above Gamesmaster (which with-out the speed, it falls behind). Someone please write a compiler.
I have vague ideas of doing something with SAM C one day... one day.
Acknowledgements
The following acknowledgements are taken from the game, and list contributors to the game itself and other tools/systems used in its creation.
Credits
- Programming - Martin Fitzpatrick
- Graphics - Martin Fitzpatrick
- Sound FX - Martin Fitzpatrick
- Game Design - Martin Fitzpatrick & Derek Morgan
- Main Idea - Derek Morgan
- Music - Rik Moore
Thanks
- Geoff Winkless For the KEDisk Screen Compresser
- GLENCO Software For creating SCADS
- FRED For E-Tracker
- Rik Moore For managing to write such good music at such short notice
- Derek Morgan For designing Safari Sam when I was in a period of hopelessness as far as ideas went.
- Whoever It Was For the untimely power cuts at all stages in making this game
- And lastly, You... ..For buying this game and supporting my work.
Thanks once again for buying Safari Sam, hope you enjoy it! .
Code
The source for the game is shown below, as extracted from the disk — LLIST to file, using Sim Coupé. The code requires the SCADS system files and the game data files to actually run. Note that SCADS extensions to BASIC are shown with a tilde (~) in front of the keyword.
autoSAM
1>POKE SVAR 321,1: DPOKE SVAR 224,0
10 OPEN TO 6: CLEAR 98304
20 CLEAR : MERGE "vars": MERGE "mvars": LOAD "font" CODE UDG " "
30 SCREEN 1: MODE 4: CLS :palblack: CSIZE 8,10: LET yos=0,xrg=256: FOR a=2 TO
15: CLOSE SCREEN a: NEXT a
40 OPEN SCREEN 2,4:palblack
50 SCREEN 2: DISPLAY 2
60 LOAD "menu" CODE 114688
65 LOAD "story" CODE 179000
66 LOAD "credits" CODE 155000
67 LOAD "help" CODE 173000
70 setup_int
80 LOAD "musik"CODE 16384*(PAGE+1): POKE &5100+PAGE,32
90 REM ****GRAFIX SETUP****
100 RESTORE
110 DIM col(30)
120 FOR a=1 TO 30
130 READ col(a)
140 NEXT a
150 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,12,12,64,66,72,68,74,70,76,79,116,1
24,127
160 DIM cu(7)
170 FOR a=1 TO 7
180 READ cu(a)
190 NEXT a
200 DATA 13,11,9,7,5,3,1
210 SCREEN 1: DISPLAY : CLS :palblack:muson
220 PUT 0,100,met$:fade 1: PAUSE 50:fade 2
230 PUT 0,100,pre$:fade 1: PAUSE 50:fade 2
240 PUT 0,100,aga$:fade 1: PAUSE 50:fade 2
250 PUT 0,100,des$:fade 1: PAUSE 50:fade 2
260 PUT 0,100,gra$:fade 1: PAUSE 50:fade 2
270 PUT 0,100,mus$:fade 1: PAUSE 50:fade 2
280 LET sfx=1,diff=10,con=4
290 LET mb$="": GRAB mb$,60,130,90,132: GRAB bitb$,160,170,20,8
295 CALL 114688:palblack
300 PUT 84,84,main$:fadem 1
310 REM ***MENU***
320 DEF PROC pointie sel,my,xpp,ms,mms,st
330 LET osel=sel
340 LET d$=""
350 PUT xpp,my,poin$: REM fadem 1
360 DO
370 LET ke=CODE INKEY$
380 IF ke=11 OR ke=113 THEN LET sel=sel-1
390 IF ke=10 OR ke=97 THEN LET sel=sel+1
400 IF sel=mms-1 THEN LET sel=mms
410 IF sel=ms+1 THEN LET sel=ms
420 IF sel<osel THEN FOR a=0 TO st : PUT xpp,my+a,poin$: NEXT a: LET my=my+st
430 IF sel>osel THEN FOR a=0 TO st: PUT xpp,my-a,poin$: NEXT a: LET my=my-st
440 LET osel=sel
450 LOOP UNTIL ke=32 OR ke=13
460 LET select=sel
470 END PROC
480 pointie 1,84,60,2,1,18
490 IF select=1 THEN fadem 2:musoff: POKE 458753,sfx: POKE 458752,diff: POKE 4
58754,con: POKE 20748,0: FOR a=1 TO 4: POKE 458747+a,0: NEXT a: LOAD "load
er"
500 fadem 2,0
510 PUT 60,124,mb$: PUT 150,124,mb$: PUT 10,124,mb$
520 PUT 84,124,opt$
530 fadem 1
540 pointie 1,126,60,7,1,19
550 fadem 2,0: PUT 60,124,mb$: PUT 140,124,mb$
560 LET dch=0
570 IF select=7 THEN GO TO 300
580 IF select=1 THEN PUT 110,90,yno$:fadem 1:pointie sfx,108-(18*sfx),90,2,1,1
8: LET sfx=select: GO TO 500
585 IF select=3 THEN PUT 80,100,cont$:fadem 1:pointie con,119-(19*con),58,4,1,
19: LET con=select: GO TO 500
586 IF select=6 THEN PEN 14: FOR x=0 TO 12: FOR c=1 TO 10: LET z=(x*10)+c: PRI
NT AT c+5,3;MEM$(179000+(z*64) TO 179025+(z*64)): NEXT c:fadem 1: PAUSE :f
adem 2,0: NEXT x: GO TO 505
587 IF select=5 THEN PEN 14: FOR x=0 TO 7: FOR c=1 TO 11: LET z=(x*11)+c: PRIN
T AT c+5,3;MEM$(155000+(z*64) TO 155025+(z*64)): NEXT c:fadem 1: PAUSE :fa
dem 2,0: NEXT x: GO TO 505
588 IF select=4 THEN PEN 14: FOR x=0 TO 7: FOR c=1 TO 10: LET z=(x*10)+c: PRIN
T AT c+5,3;MEM$(173000+(z*64) TO 173025+(z*64)): NEXT c:fadem 1: PAUSE :fa
dem 2,0: NEXT x: GO TO 505
590 IF select=2 THEN LET d=diff: PUT 110,124,high$: PUT 110,24,low$:fadem 1: F
OR a=1 TO diff: PUT 125,29+(a*7),bit$: NEXT a:pointie 11-diff,36+(7*diff),
90,10,1,7: LET diff=11-select,dch=1
600 IF dch=0 THEN GO TO 603
601 IF d<diff THEN FOR a=d TO diff: PUT 125,29+(a*7),bit$: PAUSE 1: NEXT a
602 IF d>diff THEN FOR a=d TO diff+1 STEP -1: PUT 125,29+(a*7),bitb$: PAUSE 1:
NEXT a
610 GO TO 500
620 REM ****FADE ROUTINE****
630 DEF PROC fade f
640 DEFAULT s=1
650 IF f=1 THEN FOR a=1 TO 15 STEP 2
660 IF f=2 THEN FOR a=15 TO 1 STEP -2
670 FOR b=7 TO 1 STEP -1
680 LET c=cu(b)
690 PALETTE c,col(a+c)
700 NEXT b
710 NEXT a
720 IF f=2 THEN palblack: CLS
730 END PROC
740 REM ****PALBLACK****
750 DEF PROC palblack: FOR a=1 TO 15: PALETTE a,0,0: NEXT a: END PROC
760 DEF PROC fadem f,s
770 DEFAULT s=1
780 IF f=1 THEN FOR a=1 TO 15 STEP 2
790 IF f=2 THEN FOR a=15 TO 1 STEP -2
800 FOR b=15 TO 0 STEP -1
810 PALETTE b,col(a+b)
820 NEXT b
830 NEXT a
840 IF f=2 THEN palblack: IF s=1 THEN CLS
850 END PROC
860 DEF PROC Muson: CALL 16384: END PROC
870 DEF PROC Musoff: CALL 16386: END PROC
880 DEF PROC Setup_Int page,addr
890 REM Interrupt E-Tune driver from Bunj Wobl (Fred 33)
900 DEFAULT page=12,addr=16384
910 REM Page for E-Tune, address for driver code
920 RESTORE int_code
930 DO : READ a: EXIT IF a<0
940 POKE addr,A: LET addr=addr+1: LOOP
950 LABEL int_code: DATA 195,6,64,195,32,64,243,42,112,91
960 DATA 34,34,64,33,52,64,34,112,91,62
970 DATA PAGE,211,251,205,0,128,62,1,211,251
980 DATA 251,201,243,33,0,0,34,112,91,62
990 DATA PAGE,211,251,205,0,128,62,1,211,251
1000 DATA 251,201,203,89,40,3,195,73,0,197
1010 DATA 213,221,229,253,229,8,217,245,197,213
1020 DATA 229,205,89,64,225,209,193,241,8,217
1030 DATA 253,225,221,225,209,193,195,73,0,219
1040 DATA 251,50,109,64,237,115,113,64,49,0
1050 DATA 192,62,PAGE,211,251,205,6,128,62,0
1060 DATA 211,251,49,0,0,201,-1
1070 END PROC
1080 DEF PROC palblack: FOR l1=0 TO 15: PALETTE l1,0,0: NEXT l1: BEEP .0001,0:
END PROC
1090 DEF PROC fadet d
1100 IF d=1 THEN FOR a=1 TO 15
1105 IF d=2 THEN FOR a=15 TO 1 STEP -1
1110 PALETTE 3,col(a+15)
1111 PAUSE 2
1120 NEXT a
1130 END PROC
loader
10 REM BASIC INTERPRETOR, GLENCO SOFTWARE 1992
20 SCREEN 1: FOR a=2 TO 15: CLOSE SCREEN a: NEXT a
30 CLEAR 65535: OPEN TO 3: LET MCODE=&14000: LET SCR2=&23000: MODE 4: DEF KEY
CODE 193,"MODE 3:CLS#": DEF KEYCODE 192,"~:": LET A=UDG "~": FOR I=A TO A+
7: READ B: POKE I,B: NEXT I: DATA 62,62,62,62,62,62,62,0: IF PEEK (&511F)=
192 THEN GO TO MEM512: ELSE GO TO MEM256
40 LABEL MEM512
50 LET FLAG=0: LET SCR1=&83000: LET ms=30: FOR I=&5103 TO &511C: IF PEEK (I)<
>0 THEN LET FLAG=99
60 NEXT I: FOR I=&5108 TO &511C: POKE I,&F0: NEXT I: GO TO NEXT_PART
70 LABEL MEM256
80 LET FLAG=0: LET SCR1=&43000: LET ms=14: FOR I=&5103 TO &510C: IF PEEK (I)<
>0 THEN LET FLAG=99
90 NEXT I: IF FLAG=99 THEN GO TO MEM_ERROR: ELSE FOR I=&5108 TO &510C: POKE I
,&F0: NEXT I: GO TO NEXT_PART
100 LABEL MEM_ERROR
110 PRINT "NOT ENOUGH FREE MEMORY": STOP
120 LABEL NEXT_PART
130 OPEN SCREEN 2,4: POKE &5103,&F0,&F0,&F0: PEN 1: CSIZE 8,16: PRINT AT 9,4;"
Supervisor Version 1.00": CSIZE 8,8: LOAD "SCAD.S1" CODE MCODE: POKE MCODE
+3,MS: LOAD "SCAD.S2" CODE SCR1: LOAD "SCAD.S2" CODE SCR2: CALL MCODE
140 ~INIT
150 LOAD "level1"
level1
10 GO TO 30
20 ~FILE "draw2"
30 ~INIT
40 palBLACK: PAUSE 2:~PANEL "s8"
50 fade 1
60 LET control=PEEK 458754
70 LET sfx=PEEK 458753
80 LET diff=10-(PEEK 458752)
90 LET x=14,y=113,rm=0,rom=rm+1,hit=0,energy=100,ammo=50,miss=0,keys=0
100 LET score$="0000"
110 FOR a=1 TO 4: LET score$(a)=STR$ PEEK (458747+a): NEXT a
120 LET score=VAL score$
130 RESTORE 280
140 DIM roomst(9)
150 DIM deadp(50)
160 FOR a=1 TO 5: LET deadp(a)=-25: NEXT a
170 FOR a=6 TO 10: LET deadp(a)=10: NEXT a
180 FOR a=11 TO 15: LET deadp(a)=25: NEXT a
190 FOR a=16 TO 20: LET deadp(a)=-15: NEXT a
200 FOR a=21 TO 25: LET deadp(a)=10: NEXT a
210 FOR a=26 TO 30: LET deadp(a)=10: NEXT a
220 FOR a=31 TO 32: LET deadp(a)=5: NEXT a
230 LET deadp(33)=100
240 FOR a=34 TO 37: LET deadp(a)=5: NEXT a
250 FOR a=1 TO 9
260 READ roomst(a)
270 NEXT a
280 DATA rm0,rm1,rm2,rm3,rm4,rm5,rm6,rm7,rm8
290 DIM dead(50,9): FOR a=1 TO 50: FOR b=1 TO 9: LET dead(a,b)=5: NEXT b: NEXT
a
300 ~LINK 0,0:~ANIMATE 0,1:~SETINP 0,control,2,0,68,"11122310":~FEET 0,2,2
310 FOR a=1 TO 5:~LINK a,9:~ANIMATE a,4:~DROP a,0,1: NEXT a
320 FOR a=6 TO 10:~LINK a,28:~ANIMATE a,2:~DROP a,0,1: NEXT a
330 IF sfx=1 THEN FOR a=6 TO 10:~AUTOSOUND a,0,12: NEXT a
340 FOR a=11 TO 15:~LINK a,56:~ANIMATE a,3:~DROP a,0,1: NEXT a
350 IF sfx=1 THEN FOR a=11 TO 15:~AUTOSOUND a,0,13: NEXT a
360 FOR a=16 TO 20:~LINK a,37:~ANIMATE a,5: NEXT a
370 FOR a=21 TO 25:~LINK a,79:~ANIMATE a,10:~DROP a,0,1:~YEDGE a,3,3: NEXT a
380 FOR a=26 TO 29:~LINK a,135+(a-26): NEXT a
390 ~LINK 30,159:~ANIMATE 30,14
400 FOR a=31 TO 37:~LINK a,249+(a-31): NEXT a
410 FOR a=38 TO 40:~LINK a,126: NEXT a
420 FOR a=42 TO 45:~LINK a,23:~PLATFORM a: NEXT a
430 ~LINK 41,84:~ANIMATE 41,6
440 ~LINK 46,84:~ANIMATE 46,6
450 ~LINK 47,89:~ANIMATE 47,7
460 ~LINK 48,98:~ANIMATE 48,8
470 ~LINK 49,103:~ANIMATE 49,9
480 IF sfx=2 THEN GO TO 520
490 ~AUTOSOUND 0,0,13
500 ~AUTOSOUND 0,3,10
510 ~AUTOSOUND 0,2,9
520 ~MISSRANGE 50,63
530 ~MISSILE 0,255,5,50,63,128,254,62:~AMMO 0,ammo
540 FOR a=1 TO 5:~MISSILE a,255,2*diff,50,63,128,254,63:~AMMO a,255: NEXT a
550 FOR a=6 TO 10:~MISSILE a,255,2*diff,50,63,128,254,62:~AMMO a,255: NEXT a
560 FOR a=11 TO 15:~MISSILE a,255,2*diff,50,63,128,254,62:~AMMO a,255: NEXT a
570 FOR a=16 TO 20:~MISSILE a,255,2*diff,50,63,128,254,64:~AMMO a,255: NEXT a
580 LET spr=0
590 IF sfx=1 THEN ~MISSOUND 15
600 fade 2
610 ~INKBLACK:~FULLCLEAR:~CTEXT:~VIEW
620 GO SUB room:~VIEW
630 ~COLOUR
640 LABEL start
650 DO
660 FOR outl=1 TO 25
670 LET i=CODE INKEY$: IF i>192 AND i<197 THEN LET control=i-192:~SETINP 0,con
trol,2,0,255,"11122310":SCOM 5
680 IF i=192 THEN GO TO help
690 REM [Level 2]~FIRE 1+RND(24)
700 ~MOVEALL:~VIEW
710 REM [Level 2]~FIRE 1+RND(24)
720 ~HIT 0,LENGTH(0,hit): IF hit>0 THEN ~NEXTHIT LENGTH(0,hit): GO SUB hitit
730 ~MISSHIT LENGTH(0,miss): IF miss<>255 THEN GO SUB misshit
740 ~RAMMO 0,LENGTH(0,ammo):~PNUMA 88,168,3,48,ammo
750 FOR spdup=1 TO 2
760 ~MISSHIT LENGTH(0,miss): IF miss<>255 THEN GO SUB misshit
770 ~MOVEALL:~VIEW
780 REM [Level 1]~FIRE 1+RND(24)
790 ~FIRE 1+RND(24)
800 ~FIRE 1+RND(24)
810 ~SXPOS 0,LENGTH(0,x)
820 ~SYPOS 0,LENGTH(0,y)
830 IF y=17 THEN ugh
840 IF rm=0 THEN GO TO 870
850 IF x<4 THEN LET x=236 THEN LET rm=rm-1,rom=rom-1: GO SUB room
860 IF rm=11 THEN GO TO 880
870 IF x>236 THEN LET x=4 THEN LET rm=rm+1,rom=rom+1: GO SUB room
880 NEXT spdup
890 NEXT outl
900 LOOP
910 LABEL room
920 ~INKBLACK
930 ~ROOM rm
940 ~DJCLEAR 0,1
950 ~SPUT 0,x,y,128
960 RESTORE roomst(rom)
970 FOR a=1 TO 256
980 READ r,sp,sx,sy,xs,ys
990 IF r>rm THEN GO TO 1040
1000 IF r<>rm THEN GO TO 1030
1010 IF sp<41 THEN LET pl=128: ELSE LET pl=1
1020 IF dead(sp,rom)>0 THEN ~SPUT sp,sx,sy,pl:~SPEED sp,xs,ys:~NODEON sp
1030 NEXT a
1040 ~PNUMA 26,168,3,48,energy
1050 ~PNUMA 222,168,1,48,keys
1060 ~PNUMA 146,168,4,48,score
1070 ~PNUMA 88,168,3,48,ammo
1080 ~MOVEALL:~VIEW
1090 ~VIEW:~COLOUR
1100 RETURN
1110 LABEL rm0
1120 DATA 0,46,36,113,0,0
1130 DATA 0,41,114,65,0,0
1140 DATA 0,1,140,52,0,0
1150 DATA 0,6,170,65,-2,0
1160 DATA 0,11,100,129,-2,0
1170 DATA 0,7,100,65,2,0
1180 DATA 0,16,100,160,2,0
1190 LABEL rm1
1200 DATA 1,46,100,65,0,0
1210 DATA 1,6,236,65,-2,0
1220 DATA 1,11,68,65,-2,0
1230 DATA 1,7,160,129,2,0
1240 DATA 1,16,100,160,2,0
1250 DATA 1,34,218,60,0,0
1260 DATA 1,8,56,129,-2,0
1270 DATA 1,1,146,34,0,0
1280 LABEL rm2
1290 DATA 2,45,46,97,0,-2
1300 DATA 2,11,82,145,-2,0
1310 DATA 2,31,236,81,0,0
1320 DATA 2,16,100,160,2,0
1330 DATA 2,9,222,65,-2,0
1340 DATA 2,14,126,65,-2,0
1350 DATA 2,12,66,65,-2,0
1360 DATA 2,1,226,135,0,0
1370 LABEL rm3
1380 DATA 3,16,100,160,2,0
1390 DATA 3,6,98,145,-2,0
1400 DATA 3,1,122,89,0,0
1410 DATA 3,21,236,63,-2,0
1420 DATA 3,8,178,65,-2,0
1430 DATA 3,7,98,65,-2,0
1440 DATA 3,11,178,129,-2,0
1450 DATA 3,37,214,75,0,0
1460 LABEL rm4
1470 DATA 4,41,98,65,0,0
1480 DATA 4,46,132,97,0,0
1490 DATA 4,21,236,127,-1,0
1500 DATA 4,6,83,65,-2,0
1510 DATA 4,11,52,145,2,0
1520 DATA 4,7,230,129,-2,0
1530 DATA 4,1,134,135,0,0
1540 DATA 4,35,98,145,0,0
1550 DATA 4,16,100,160,2,0
1560 DATA 4,32,204,149,0,0
1570 LABEL rm5
1580 DATA 5,1,212,113,0,0
1590 DATA 5,2,206,103,0,0
1600 DATA 5,11,236,129,-2,0
1610 DATA 5,6,178,97,-2,0
1620 DATA 5,7,98,113,-2,0
1630 DATA 5,36,216,151,0,0
1640 DATA 5,16,100,160,2,0
1650 LABEL rm6
1660 DATA 6,16,100,160,2,0
1670 DATA 6,6,96,129,-2,0
1680 DATA 6,7,220,129,-2,0
1690 DATA 6,1,136,119,0,0
1700 DATA 6,27,20,80,0,0
1710 DATA 6,11,124,81,-2,0
1720 DATA 6,12,200,81,-2,0
1730 DATA 6,35,204,89,0,0
1740 LABEL rm7
1750 DATA 7,6,236,81,-2,0
1760 DATA 7,7,138,81,-2,0
1770 DATA 7,1,90,71,0,0
1780 DATA 7,31,44,93,0,0
1790 DATA 7,2,90,119,0,0
1800 DATA 7,11,130,129,-2,0
1810 DATA 7,12,200,129,-2,0
1820 DATA 7,3,154,119,0,0
1830 DATA 7,37,206,124,0,0
1840 LABEL rm8
1850 DATA 8,30,218,83,0,0
1860 DATA 8,11,82,81,-2,0
1870 DATA 8,12,176,81,-2,0
1880 DATA 8,1,114,71,0,0
1890 DATA 8,42,160,100,0,2
1900 DATA 8,6,146,129,-2,0
1910 DATA 8,2,42,119,0,0
1920 DATA 8,33,164,112,0,0
1930 DATA 8,37,68,101,0,0
1940 DATA 256,0,0,0,0,0
1950 LABEL hitit
1960 IF hit=30 THEN SCOM 2:~SMERGE 30,154:~ANIMATE 30,13:~XEDGE 0,3,3:~SPEED 0,
1,0: FOR elp=1 TO 100::~MOVEALL:~VIEW: PAUSE 2: NEXT elp:yipee
1970 IF hit=21 THEN LET energy=energy-10: GO TO 2090
1980 IF hit>37 AND hit<41 THEN LET energy=energy-10:~ANIMOFF hit,12,9,1: LET de
ad(hit,rom)=0: GO TO 2090
1990 IF hit=31 THEN ~AMMADD 0,50: LET score=score+5,dead(hit,rom)=0:~ANIMOFF hi
t,64,9,1: GO TO 2090
2000 IF hit=32 THEN ~AMMADD 0,25: LET dead(hit,rom)=0,score=score+5:~ANIMOFF hi
t,64,9,1: GO TO 2090
2010 IF hit=33 THEN LET dead(hit,rom)=0,score=score+10:~ANIMOFF hit,64,9,1: GO
TO 2090
2020 IF hit>33 AND hit<38 THEN LET energy=energy+25,score=score+5,dead(hit,rom)
=0:~ANIMOFF hit,64,9,1: GO TO 2090
2030 IF hit>25 AND hit<30 THEN LET keys=keys+1:~ANIMOFF hit,64,9,1: LET dead(hi
t,rom)=0:SCOM 5: GO TO 2090
2040 IF hit<26 THEN LET dead(hit,rm+1)=dead(hit,rm+1)-0.2: LET energy=energy-1
2050 IF dead(hit,rom)<=0 THEN LET ded=hit : GO SUB ammoff: LET score=score+dead
p(hit): GO TO 2090
2060 IF hit=46 OR hit=41 THEN ~JUMP 0,6:SCOM 7: GO TO 2090
2070 IF hit=48 THEN ~JUMP 0,7:SCOM 7: GO TO 2090
2080 IF hit=49 OR hit=40 THEN ~JUMP 0,7:SCOM 7
2090 IF energy<=0 THEN ugh
2100 IF score<0 THEN LET score=0
2110 ~PNUMA 26,168,3,48,energy
2120 ~PNUMA 222,168,1,48,keys
2125 ~PNUMA 146,168,4,48,score
2130 RETURN
2140 LABEL misshit
2150 IF miss<>0 THEN ~FIRE miss
2160 IF miss=0 THEN LET energy=energy-5: GO TO 2200
2170 IF miss>25 THEN RETURN
2180 LET dead(miss,rm+1)=dead(miss,rm+1)-1
2190 IF dead(miss,rm+1)<=0 THEN LET ded=miss: GO SUB ammoff: LET score=score+de
adp(miss)
2200 IF energy<=0 THEN ugh
2210 IF score<0 THEN LET score=0
2220 ~PNUMA 26,168,3,48,energy
2230 ~PNUMA 146,168,4,48,score
2240 RETURN
2250 LABEL scom
2260 FOR a=1 TO 15
2270 ~SCOM a
2280 PAUSE 0
2290 NEXT a
2300 LABEL HELP
2310 RESTORE 2660
2320 FOR loopit=1 TO 5
2330 LABEL hel
2340 ~INKBLACK:~FULLCLEAR:~CTEXT:~VIEW
2350 ~TEXTA 66,180,"QUICK GUIDE HELP"
2360 FOR hy=1 TO 5
2370 READ spr,text$,po$
2380 ~SPUT spr,20,160-(hy*25),128
2390 ~TEXTA 50,152-(hy*25),text$
2400 ~TEXTA 200,152-(hy*25),po$
2410 IF hy=4 AND loopit=5 THEN GO TO 2430
2420 NEXT hy
2430 ~COLOUR:~VIEW
2440 PAUSE
2450 NEXT loopit
2460 ~INKBLACK:~FULLCLEAR:~CTEXT:~VIEW
2470 ~TEXTA 68,180,"QUICK GUIDE HELP"
2480 ~TEXTA 78,160,"INJURY LISTING"
2490 FOR a=1 TO 5
2500 READ text$,num
2510 ~TEXTA 10,140-(a*10),text$
2520 ~PNUMA 238,140-(a*10),2,48,num
2530 NEXT a
2540 ~VIEW:~COLOUR: PAUSE
2550 ~INKBLACK:~FULLCLEAR:~CTEXT:~VIEW
2560 ~TEXTA 66,180,"QUICK GUIDE HELP"
2570 ~TEXTA 76,160,"CONTROL METHOD"
2580 FOR a=1 TO 4
2590 READ text$
2600 ~TEXTA 56,140-(a*10),text$
2610 NEXT a
2620 ~VIEW:~COLOUR: PAUSE
2630 ~INKBLACK:~FULLCLEAR:~CTEXT:~VIEW
2640 GO SUB room
2650 GO TO start
2660 DATA 0,"SAFARI SAM"," 0"
2670 DATA 1,"MONKEY"," -25"
2680 DATA 6,"TRIBESMAN"," 10"
2690 DATA 11,"HUNTER"," 25"
2700 DATA 16,"PARROT"," -15"
2710 DATA 38,"ANIMAL TRAP"," 0"
2720 DATA 21,"BARREL"," 5"
2730 DATA 26,"GOLD KEY"," 10"
2740 DATA 27,"SILVER KEY"," 10"
2750 DATA 28,"BLUE KEY"," 10"
2760 DATA 29,"RED KEY"," 10"
2770 DATA 30,"GREEN KEY"," 10"
2780 DATA 31,"50 AMMO"," 5"
2790 DATA 32,"25 AMMO"," 5"
2800 DATA 33,"TOKEN"," 10"
2810 DATA 34,"PIZZA 25 ENERGY"," 5"
2820 DATA 35,"LOLLY 25 ENERGY"," 5"
2830 DATA 36,"APPLE 25 ENERGY"," 5"
2840 DATA 37,"CAKE 25 ENERGY"," 5"
2850 DATA 42,"PLATFORM"," 0"
2860 DATA 46,"SPRING UP"," 0"
2870 DATA 47,"SPRING DOWN"," 0"
2880 DATA 48,"SPRING LEFT"," 0"
2890 DATA 49,"SPRING RIGHT"," 0"
2900 DATA "BULLET",5
2910 DATA "SPEAR",5
2920 DATA "NUT",5
2930 DATA "BARREL",10
2940 DATA "CONTACT",1
2950 DATA "F1....JOYSTICK 1"
2960 DATA "F2....CURSORS,SPACE"
2970 DATA "F3....JOYSTICK 2"
2980 DATA "F4....Q,A,O,P,SPACE"
2990 LABEL ammoff
3000 ~RIMAGE ded,LENGTH(0,a)
3010 ~SXSPD ded,LENGTH(0,sx)
3020 LET d=3
3030 IF sx>0 THEN LET d=3
3040 IF sx<0 THEN LET d=7
3050 IF sx=0 THEN IF ded>0 THEN IF ded<6 OR ded>25 THEN LET d=9
3060 FOR a=0 TO 4: LET md=ded+a: IF (md/5)<>INT (md/5) THEN NEXT a
3070 IF md<21 THEN ~ANIMOFF ded,((md/5))+20,d,1: ELSE ~ANIMOFF ded,64,d,1
3080 RETURN
3090 DEF PROC scom s
3100 IF sfx=1 THEN ~SCOM s
3110 END PROC
3120 DEF PROC fade d
3130 RESTORE 3229+d
3140 IF d=1 THEN FOR a=0 TO 15
3150 IF d=2 THEN FOR a=15 TO 0 STEP -1
3160 READ col
3170 PAUSE d
3180 FOR b=a TO 15
3190 PALETTE b,col
3200 NEXT b
3210 NEXT a
3220 END PROC
3230 DATA 0,0,8,5,7,13,15,82,112,90,120,117,119,125,127,127
3240 DATA 127,127,125,119,117,120,90,112,82,15,13,7,5,8,0,0
3250 DEF PROC palblack: FOR a=1 TO 15: PALETTE a,0: NEXT a: END PROC
3260 DEF PROC yipee
3270 ~INIT:palblack: PAUSE 2
3280 ~PANEL "s7"
3290 fade 1
3300 LET score$=STR$ score
3310 LET s$="0000"
3320 LET s$(5-LEN score$ TO 4)=score$
3330 FOR a=1 TO 4: POKE (458747+a),VAL s$(a): NEXT a
3340 PAUSE :fade 2
3350 LOAD "level2"
3360 END PROC
3370 DEF PROC ugh
3380 ~INIT:palblack: PAUSE 2
3390 ~PANEL "s9"
3400 fade 1: PAUSE :fade 2
3401 LET score$=STR$ score
3402 LET s$="0000"
3403 LET s$(5-LEN score$ TO 4)=score$
3404 FOR a=1 TO 4: POKE (458747+a),VAL s$(a): NEXT a
3410 POKE 458755,1: LOAD "endit"
3420 END PROC
level2
10 GO TO 30
20 ~FILE "draw3"
30 ~INIT
40 palblack: PAUSE 2:~PANEL "s2":fade 1
60 LET x=14,y=129,rm=0,rom=rm+1,hit=0,energy=100,ammo=50,miss=0,keys=0
70 LET control=PEEK 458754
80 LET sfx=PEEK 458753
90 LET diff=10-(PEEK 458752)
95 LET score$="0000": FOR a=1 TO 4: LET score$(a)=STR$ PEEK (458747+a): NEXT
a: LET score=VAL score$
100 RESTORE 250
110 DIM roomst(10)
120 DIM deadp(50)
130 FOR a=1 TO 5: LET deadp(a)=-25: NEXT a
140 FOR a=6 TO 10: LET deadp(a)=10: NEXT a
150 FOR a=11 TO 15: LET deadp(a)=25: NEXT a
160 FOR a=16 TO 20: LET deadp(a)=-15: NEXT a
170 FOR a=21 TO 25: LET deadp(a)=10: NEXT a
180 FOR a=26 TO 30: LET deadp(a)=10: NEXT a
190 FOR a=31 TO 32: LET deadp(a)=5: NEXT a
200 LET deadp(33)=100
210 FOR a=34 TO 37: LET deadp(a)=5: NEXT a
220 FOR a=1 TO 10
230 READ roomst(a)
240 NEXT a
250 DATA rm0,rm1,rm2,rm3,rm4,rm5,rm6,rm7,rm8,rm9
260 DIM dead(50,10): FOR a=1 TO 50: FOR b=1 TO 10: LET dead(a,b)=5: NEXT b: NE
XT a
270 ~LINK 0,0:~ANIMATE 0,1:~SETINP 0,control,2,0,68,"11122310":~FEET 0,2,2
280 FOR a=1 TO 5:~LINK a,9:~ANIMATE a,4:~DROP a,0,1: NEXT a
290 FOR a=6 TO 10:~LINK a,28:~ANIMATE a,2:~DROP a,0,1: NEXT a
300 IF sfx=1 THEN FOR a=6 TO 10:~AUTOSOUND a,0,12: NEXT a
310 FOR a=11 TO 15:~LINK a,56:~ANIMATE a,3:~DROP a,0,1: NEXT a
320 IF sfx=1 THEN FOR a=11 TO 15:~AUTOSOUND a,0,13: NEXT a
330 FOR a=16 TO 20:~LINK a,37:~ANIMATE a,5: NEXT a
340 FOR a=21 TO 25:~LINK a,79:~ANIMATE a,10:~DROP a,0,1:~YEDGE a,3,3: NEXT a
350 FOR a=26 TO 29:~LINK a,135+(a-26): NEXT a
360 ~LINK 30,159:~ANIMATE 30,14
370 FOR a=31 TO 37:~LINK a,249+(a-31): NEXT a
380 FOR a=38 TO 40:~LINK a,126: NEXT a
390 FOR a=42 TO 45:~LINK a,23:~PLATFORM a: NEXT a
400 ~LINK 41,84:~ANIMATE 41,6
410 ~LINK 46,84:~ANIMATE 46,6
420 ~LINK 47,89:~ANIMATE 47,7
430 ~LINK 48,98:~ANIMATE 48,8
440 ~LINK 49,103:~ANIMATE 49,9
450 IF sfx=2 THEN GO TO 490
460 ~AUTOSOUND 0,0,13
470 ~AUTOSOUND 0,3,10
480 ~AUTOSOUND 0,2,9
490 ~MISSRANGE 50,63
500 ~MISSILE 0,255,5,50,63,128,254,62:~AMMO 0,ammo
510 FOR a=1 TO 5:~MISSILE a,255,diff*2,50,63,128,254,63:~AMMO a,255: NEXT a
520 FOR a=6 TO 10:~MISSILE a,255,2*diff,50,63,128,254,62:~AMMO a,255: NEXT a
530 FOR a=11 TO 15:~MISSILE a,255,2*diff,50,63,128,254,62:~AMMO a,255: NEXT a
540 FOR a=16 TO 20:~MISSILE a,255,2*diff,50,63,128,254,64:~AMMO a,255: NEXT a
550 LET spr=0
560 IF sfx=1 THEN ~MISSOUND 15
565 fade 2
570 ~INKBLACK:~FULLCLEAR:~CTEXT:~VIEW
580 REM ~PANEL "panel"
590 GO SUB room:~VIEW
600 ~COLOUR
610 LABEL start
620 DO
630 FOR outl=1 TO 25
640 LET i=CODE INKEY$: IF i>192 AND i<197 THEN LET control=i-192:~SETINP 0,con
trol,2,0,255,"11122310":SCOM 5
650 IF i=192 THEN GO TO help
660 REM [Level 2]~FIRE 1+RND(24)
670 ~MOVEALL:~VIEW
680 REM [Level 2]~FIRE 1+RND(24)
690 ~HIT 0,LENGTH(0,hit): IF hit>0 THEN ~NEXTHIT LENGTH(0,hit): GO SUB hitit
700 ~MISSHIT LENGTH(0,miss): IF miss<>255 THEN GO SUB misshit
710 ~RAMMO 0,LENGTH(0,ammo):~PNUMA 88,168,3,48,ammo
720 FOR spdup=1 TO 2
730 ~MISSHIT LENGTH(0,miss): IF miss<>255 THEN GO SUB misshit
740 ~MOVEALL:~VIEW
750 REM [Level 1]~FIRE 1+RND(24)
760 ~FIRE 1+RND(24)
770 ~FIRE 1+RND(24)
780 ~SXPOS 0,LENGTH(0,x)
790 ~SYPOS 0,LENGTH(0,y)
800 IF y=17 THEN ugh
810 IF rm=0 THEN GO TO 840
820 IF x<4 THEN LET x=236 THEN LET rm=rm-1,rom=rom-1: GO SUB room
830 IF rm=11 THEN GO TO 850
840 IF x>236 THEN LET x=4 THEN LET rm=rm+1,rom=rom+1: GO SUB room
850 NEXT spdup
860 NEXT outl
870 LOOP
880 LABEL room
890 ~INKBLACK
900 ~ROOM rm
910 ~DJCLEAR 0,1
920 ~SPUT 0,x,y,128
930 RESTORE roomst(rom)
940 FOR a=1 TO 256
950 READ r,sp,sx,sy,xs,ys
960 IF r>rm THEN GO TO 1010
970 IF r<>rm THEN GO TO 1000
980 IF sp<41 THEN LET pl=128: ELSE LET pl=1
990 IF dead(sp,rom)>0 THEN ~SPUT sp,sx,sy,pl:~SPEED sp,xs,ys:~NODEON sp
1000 NEXT a
1010 ~PNUMA 26,168,3,48,energy
1020 ~PNUMA 222,168,1,48,keys
1030 ~PNUMA 146,168,4,48,score
1040 ~PNUMA 88,168,3,48,ammo
1050 ~MOVEALL:~VIEW
1060 ~VIEW:~COLOUR
1070 RETURN
1080 LABEL rm0
1090 DATA 0,46,68,129,0,0
1100 DATA 0,42,90,96,0,-2
1110 DATA 0,11,148,129,-2,0
1120 DATA 0,6,8,82,2,0
1130 DATA 0,12,222,129,-2,0
1140 DATA 0,7,100,65,2,0
1150 DATA 0,16,100,160,2,0
1160 DATA 0,1,146,55,0,0
1170 LABEL rm1
1180 DATA 1,46,22,65,0,0
1190 DATA 1,6,236,65,-2,0
1200 DATA 1,12,82,113,-2,0
1210 DATA 1,7,160,129,2,0
1220 DATA 1,16,100,160,2,0
1230 DATA 1,8,130,129,-2,0
1240 DATA 1,1,148,55,0,0
1250 DATA 1,42,144,111,0,-2
1260 DATA 1,35,148,85,0,0
1270 LABEL rm2
1280 DATA 2,45,54,97,0,-2
1290 DATA 2,44,116,48,-2,0
1300 DATA 2,46,114,33,0,0
1310 DATA 2,43,192,112,0,-2
1320 DATA 2,11,196,65,-2,0
1330 DATA 2,2,70,91,0,0
1340 DATA 2,31,114,113,0,0
1350 DATA 2,16,100,160,2,0
1360 DATA 2,9,166,129,-2,0
1370 DATA 2,14,126,33,-2,0
1380 DATA 2,12,66,65,-2,0
1390 DATA 2,1,226,119,0,0
1400 LABEL rm3
1410 DATA 3,42,48,48,0,-2
1420 DATA 3,43,112,48,0,-2
1430 DATA 3,44,230,16,-2,0
1440 DATA 3,45,100,112,-2,0
1450 DATA 3,6,162,129,-2,0
1460 DATA 3,11,68,129,-2,0
1470 DATA 3,12,98,65,-2,0
1480 DATA 3,7,164,65,-2,0
1490 DATA 3,1,196,39,0,0
1500 DATA 3,41,98,65,0,0
1510 DATA 3,13,236,129,-2,0
1520 DATA 3,2,68,119,0,0
1530 DATA 3,37,222,57,0,0
1540 DATA 3,16,100,160,2,0
1550 LABEL rm4
1560 DATA 4,42,0,16,2,0
1570 DATA 4,11,192,65,-2,0
1580 DATA 4,1,98,39,0,0
1590 DATA 4,43,210,48,2,0
1600 DATA 4,12,100,97,-2,0
1610 DATA 4,2,50,103,0,0
1620 DATA 4,6,226,129,-2,0
1630 DATA 4,3,238,55,0,0
1640 DATA 4,41,194,65,0,0
1650 DATA 4,36,150,129,0,0
1660 DATA 4,16,100,160,2,0
1670 LABEL rm5
1680 DATA 5,42,80,96,0,-2
1690 DATA 5,6,228,97,-2,0
1700 DATA 5,7,150,81,-2,0
1710 DATA 5,1,51,71,0,0
1720 DATA 5,11,68,129,-2,0
1730 DATA 5,12,162,145,-2,0
1740 DATA 5,43,238,128,2,0
1750 DATA 5,2,162,87,0,0
1760 DATA 5,3,242,103,0,0
1770 DATA 5,29,154,149,0,0
1780 DATA 5,16,100,160,2,0
1790 LABEL rm6
1800 DATA 6,16,100,160,2,0
1810 DATA 6,42,80,96,0,-2
1820 DATA 6,43,112,96,0,2
1830 DATA 6,11,236,97,-2,0
1840 DATA 6,12,146,65,-2,0
1850 DATA 6,6,64,113,-2,0
1860 DATA 6,7,164,145,-2,0
1870 DATA 6,8,230,145,-2,0
1880 DATA 6,44,176,128,0,-2
1890 DATA 6,1,50,70,0,0
1900 DATA 6,45,0,128,2,0
1910 DATA 6,34,104,80,0,0
1920 LABEL rm7
1930 DATA 7,42,98,64,2,0
1940 DATA 7,13,68,81,-2,0
1950 DATA 7,43,144,112,0,-2
1960 DATA 7,7,138,81,-2,0
1970 DATA 7,8,194,65,-2,0
1980 DATA 7,31,50,110,0,0
1990 DATA 7,2,92,23,0,0
2000 DATA 7,11,130,129,-2,0
2010 DATA 7,12,200,129,-2,0
2020 DATA 7,3,226,55,0,0
2030 DATA 7,37,206,124,0,0
2040 LABEL rm8
2050 DATA 8,6,66,129,-2,0
2060 DATA 8,1,66,119,0,0
2070 DATA 8,2,98,103,0,0
2080 DATA 8,3,129,119,0,0
2090 DATA 8,42,112,100,0,2
2100 DATA 8,43,80,100,0,2
2110 DATA 8,44,80,48,-2,0
2120 DATA 8,7,130,65,-2,0
2130 DATA 8,11,194,65,-2,0
2140 DATA 8,12,48,65,-2,0
2150 LABEL rm9
2160 DATA 9,6,114,97,-2,0
2170 DATA 9,1,50,71,0,0
2180 DATA 9,42,80,128,0,-2
2190 DATA 9,43,80,128,2,0
2200 DATA 9,11,116,49,2,0
2210 DATA 9,2,66,23,0,0
2220 DATA 9,44,190,16,2,0
2230 DATA 9,12,44,145,2,0
2240 DATA 9,13,162,145,2,0
2250 DATA 9,37,134,160,0,0
2260 DATA 9,32,190,85,0,0
2270 DATA 9,33,114,51,0,0
2280 DATA 9,30,210,39,0,0
2290 DATA 256,0,0,0,0,0
2300 LABEL hitit
2310 IF hit=30 THEN SCOM 2:~SMERGE 30,154:~ANIMATE 30,13:~XEDGE 0,3,3:~SPEED 0,
1,0: DO :~MOVEALL:~VIEW: PAUSE 2: LOOP :yipee
2320 IF hit=21 THEN LET energy=energy-10: GO TO 2440
2330 IF hit>37 AND hit<41 THEN LET energy=energy-10:~ANIMOFF hit,12,9,1: LET de
ad(hit,rom)=0: GO TO 2440
2340 IF hit=31 THEN ~AMMADD 0,50: LET score=score+5,dead(hit,rom)=0:~ANIMOFF hi
t,64,9,1: GO TO 2440
2350 IF hit=32 THEN ~AMMADD 0,25: LET dead(hit,rom)=0,score=score+5:~ANIMOFF hi
t,64,9,1: GO TO 2440
2360 IF hit=33 THEN LET dead(hit,rom)=0,score=score+10:~ANIMOFF hit,64,9,1: GO
TO 2440
2370 IF hit>33 AND hit<38 THEN LET energy=energy+25,score=score+5,dead(hit,rom)
=0:~ANIMOFF hit,64,9,1: GO TO 2440
2380 IF hit>25 AND hit<30 THEN LET keys=keys+1:~ANIMOFF hit,64,9,1: LET dead(hi
t,rom)=0:SCOM 5: GO TO 2440
2390 IF hit<26 THEN LET dead(hit,rom)=dead(hit,rom)-0.2: LET energy=energy-1
2400 IF dead(hit,rom)<=0 THEN LET ded=hit : GO SUB ammoff: LET score=score+dead
p(hit): GO TO 2440
2410 IF hit=46 OR hit=41 THEN ~JUMP 0,6:SCOM 7: GO TO 2440
2420 IF hit=48 THEN ~JUMP 0,7:SCOM 7: GO TO 2440
2430 IF hit=49 OR hit=40 THEN ~JUMP 0,7:SCOM 7
2440 IF energy<=0 THEN ugh
2450 IF score<0 THEN LET score=0
2460 ~PNUMA 26,168,3,48,energy
2470 ~PNUMA 222,168,1,48,keys
2475 ~PNUMA 146,168,4,48,score
2480 RETURN
2490 LABEL misshit
2500 IF miss<>0 THEN ~FIRE miss
2510 IF miss=0 THEN LET energy=energy-5: GO TO 2550
2520 IF miss>25 THEN RETURN
2530 LET dead(miss,rm+1)=dead(miss,rm+1)-1
2540 IF dead(miss,rm+1)<=0 THEN LET ded=miss: GO SUB ammoff: LET score=score+de
adp(miss)
2550 IF energy<=0 THEN ugh
2560 IF score<0 THEN LET score=0
2570 ~PNUMA 26,168,3,48,energy
2580 ~PNUMA 146,168,4,48,score
2590 RETURN
2600 LABEL scom
2610 FOR a=1 TO 15
2620 ~SCOM a
2630 PAUSE 0
2640 NEXT a
2650 LABEL HELP
2660 RESTORE 3010
2670 FOR loopit=1 TO 5
2680 LABEL hel
2690 ~INKBLACK:~FULLCLEAR:~CTEXT:~VIEW
2700 ~TEXTA 66,180,"QUICK GUIDE HELP"
2710 FOR hy=1 TO 5
2720 READ spr,text$,po$
2730 ~SPUT spr,20,160-(hy*25),128
2740 ~TEXTA 50,152-(hy*25),text$
2750 ~TEXTA 200,152-(hy*25),po$
2760 IF hy=4 AND loopit=5 THEN GO TO 2780
2770 NEXT hy
2780 ~COLOUR:~VIEW
2790 PAUSE
2800 NEXT loopit
2810 ~INKBLACK:~FULLCLEAR:~CTEXT:~VIEW
2820 ~TEXTA 68,180,"QUICK GUIDE HELP"
2830 ~TEXTA 78,160,"INJURY LISTING"
2840 FOR a=1 TO 5
2850 READ text$,num
2860 ~TEXTA 10,140-(a*10),text$
2870 ~PNUMA 238,140-(a*10),2,48,num
2880 NEXT a
2890 ~VIEW:~COLOUR: PAUSE
2900 ~INKBLACK:~FULLCLEAR:~CTEXT:~VIEW
2910 ~TEXTA 66,180,"QUICK GUIDE HELP"
2920 ~TEXTA 76,160,"CONTROL METHOD"
2930 FOR a=1 TO 4
2940 READ text$
2950 ~TEXTA 56,140-(a*10),text$
2960 NEXT a
2970 ~VIEW:~COLOUR: PAUSE
2980 ~INKBLACK:~FULLCLEAR:~CTEXT:~VIEW
2990 GO SUB room
3000 GO TO start
3010 DATA 0,"SAFARI SAM"," 0"
3020 DATA 1,"MONKEY"," -25"
3030 DATA 6,"TRIBESMAN"," 10"
3040 DATA 11,"HUNTER"," 25"
3050 DATA 16,"PARROT"," -15"
3060 DATA 38,"ANIMAL TRAP"," 0"
3070 DATA 21,"BARREL"," 5"
3080 DATA 26,"GOLD KEY"," 10"
3090 DATA 27,"SILVER KEY"," 10"
3100 DATA 28,"BLUE KEY"," 10"
3110 DATA 29,"RED KEY"," 10"
3120 DATA 30,"GREEN KEY"," 10"
3130 DATA 31,"50 AMMO"," 5"
3140 DATA 32,"25 AMMO"," 5"
3150 DATA 33,"TOKEN"," 10"
3160 DATA 34,"PIZZA 25 ENERGY"," 5"
3170 DATA 35,"LOLLY 25 ENERGY"," 5"
3180 DATA 36,"APPLE 25 ENERGY"," 5"
3190 DATA 37,"CAKE 25 ENERGY"," 5"
3200 DATA 42,"PLATFORM"," 0"
3210 DATA 46,"SPRING UP"," 0"
3220 DATA 47,"SPRING DOWN"," 0"
3230 DATA 48,"SPRING LEFT"," 0"
3240 DATA 49,"SPRING RIGHT"," 0"
3250 DATA "BULLET",5
3260 DATA "SPEAR",5
3270 DATA "NUT",5
3280 DATA "BARREL",10
3290 DATA "CONTACT",1
3300 DATA "F1....JOYSTICK 1"
3310 DATA "F2....CURSORS,SPACE"
3320 DATA "F3....JOYSTICK 2"
3330 DATA "F4....Q,A,O,P,SPACE"
3340 LABEL ammoff
3350 ~RIMAGE ded,LENGTH(0,a)
3360 ~SXSPD ded,LENGTH(0,sx)
3370 LET d=3
3380 IF sx>0 THEN LET d=3
3390 IF sx<0 THEN LET d=7
3400 IF sx=0 THEN IF ded>0 THEN IF ded<6 OR ded>25 THEN LET d=9
3410 FOR a=0 TO 4: LET md=ded+a: IF (md/5)<>INT (md/5) THEN NEXT a
3420 IF md<21 THEN ~ANIMOFF ded,((md/5))+20,d,1: ELSE ~ANIMOFF ded,64,d,1
3430 RETURN
3440 DEF PROC scom s
3450 IF sfx=1 THEN ~SCOM s
3460 END PROC
3470 DEF PROC fade d
3480 RESTORE 3579+d
3490 IF d=1 THEN FOR a=0 TO 15
3500 IF d=2 THEN FOR a=15 TO 0 STEP -1
3510 READ col
3520 PAUSE d
3530 FOR b=a TO 15
3540 PALETTE b,col
3550 NEXT b
3560 NEXT a
3570 END PROC
3580 DATA 0,0,8,5,7,13,15,82,112,90,120,117,119,125,127,127
3590 DATA 127,127,125,119,117,120,90,112,82,15,13,7,5,8,0,0
3600 DEF PROC palblack: FOR a=1 TO 15: PALETTE a,0: NEXT a: END PROC
3610 DEF PROC yipee
3635 ~INIT:palblack: PAUSE 2
3640 ~PANEL "s3"
3650 fade 1
3660 LET score$=STR$ score
3670 LET s$="0000"
3680 LET s$(5-LEN score$ TO 4)=score$
3690 FOR a=1 TO 4: POKE (458747+a),VAL s$(a): NEXT a
3700 PAUSE :fade 2
3710 LOAD "level3"
3720 END PROC
10000 DEF PROC ugh
10010 ~INIT:palblack: PAUSE 2
10020 ~PANEL "s9"
10030 fade 1: PAUSE :fade 2
10031 LET score$=STR$ score
10032 LET s$="0000"
10033 LET s$(5-LEN score$ TO 4)=score$
10034 FOR a=1 TO 4: POKE (458747+a),VAL s$(a): NEXT a
10040 POKE 458755,1: LOAD "endit"
10050 END PROC
level3
10 GO TO 30
20 ~FILE "draw1"
30 ~INIT
40 palblack: PAUSE 2:~PANEL "s1":fade 1
50 LET x=24,y=145,rm=0,rom=rm+1,hit=0,energy=100,ammo=50,miss=0,keys=0
60 LET control=PEEK 458754
70 LET sfx=PEEK 458753
80 LET diff=10-(PEEK 458752)
90 LET score$="0000": FOR a=1 TO 4: LET score$(a)=STR$ PEEK (458747+a): NEXT
a: LET score=VAL score$
100 RESTORE 250
110 DIM roomst(12)
120 DIM deadp(50)
130 FOR a=1 TO 5: LET deadp(a)=-25: NEXT a
140 FOR a=6 TO 10: LET deadp(a)=10: NEXT a
150 FOR a=11 TO 15: LET deadp(a)=25: NEXT a
160 FOR a=16 TO 20: LET deadp(a)=-15: NEXT a
170 FOR a=21 TO 25: LET deadp(a)=10: NEXT a
180 FOR a=26 TO 30: LET deadp(a)=10: NEXT a
190 FOR a=31 TO 32: LET deadp(a)=5: NEXT a
200 LET deadp(33)=100
210 FOR a=34 TO 37: LET deadp(a)=5: NEXT a
220 FOR a=1 TO 12
230 READ roomst(a)
240 NEXT a
250 DATA rm0,rm1,rm2,rm3,rm4,rm5,rm6,rm7,rm8,rm9,rm10,rm11
260 DIM dead(50,13): FOR a=1 TO 50: FOR b=1 TO 13: LET dead(a,b)=5: NEXT b: NE
XT a
270 ~LINK 0,0:~ANIMATE 0,1:~SETINP 0,control,2,0,68,"11122310":~FEET 0,2,2
280 FOR a=1 TO 5:~LINK a,9:~ANIMATE a,4:~DROP a,0,1: NEXT a
290 FOR a=6 TO 10:~LINK a,28:~ANIMATE a,2:~DROP a,0,1: NEXT a
300 IF sfx=1 THEN FOR a=6 TO 10:~AUTOSOUND a,0,12: NEXT a
310 FOR a=11 TO 15:~LINK a,56:~ANIMATE a,3:~DROP a,0,1: NEXT a
320 IF sfx=1 THEN FOR a=11 TO 15:~AUTOSOUND a,0,13: NEXT a
330 FOR a=16 TO 20:~LINK a,37:~ANIMATE a,5: NEXT a
340 FOR a=21 TO 25:~LINK a,79:~ANIMATE a,10:~DROP a,0,1:~YEDGE a,3,3: NEXT a
350 FOR a=26 TO 29:~LINK a,135+(a-26): NEXT a
360 ~LINK 30,159:~ANIMATE 30,14
370 FOR a=31 TO 37:~LINK a,249+(a-31): NEXT a
380 FOR a=38 TO 40:~LINK a,126: NEXT a
390 FOR a=42 TO 45:~LINK a,23:~PLATFORM a: NEXT a
400 ~LINK 41,84:~ANIMATE 41,6
410 ~LINK 46,84:~ANIMATE 46,6
420 ~LINK 47,89:~ANIMATE 47,7
430 ~LINK 48,98:~ANIMATE 48,8
440 ~LINK 49,103:~ANIMATE 49,9
450 IF sfx=2 THEN GO TO 490
460 ~AUTOSOUND 0,0,13
470 ~AUTOSOUND 0,3,10
480 ~AUTOSOUND 0,2,9
490 ~MISSRANGE 50,63
500 ~MISSILE 0,255,5,50,63,128,254,62:~AMMO 0,ammo
510 FOR a=1 TO 5:~MISSILE a,255,diff*2,50,63,128,254,63:~AMMO a,255: NEXT a
520 FOR a=6 TO 10:~MISSILE a,255,diff*2,50,63,128,254,62:~AMMO a,255: NEXT a
530 FOR a=11 TO 15:~MISSILE a,255,diff*2,50,63,128,254,62:~AMMO a,255: NEXT a
540 FOR a=16 TO 20:~MISSILE a,255,diff*2,50,63,128,254,64:~AMMO a,255: NEXT a
550 LET spr=0
560 IF sfx=1 THEN ~MISSOUND 15
570 fade 2
580 ~INKBLACK:~FULLCLEAR:~CTEXT:~VIEW
590 REM ~PANEL "panel"
600 GO SUB room:~VIEW
610 ~COLOUR
620 LABEL start
630 DO
640 FOR outl=1 TO 25
650 LET i=CODE INKEY$: IF i>192 AND i<197 THEN LET control=i-192:~SETINP 0,con
trol,2,0,255,"11122310":SCOM 5
660 IF i=192 THEN GO TO help
670 ~FIRE 1+RND(24)
680 ~MOVEALL:~VIEW
690 ~FIRE 1+RND(24)
700 ~HIT 0,LENGTH(0,hit): IF hit>0 THEN ~NEXTHIT LENGTH(0,hit): GO SUB hitit
710 ~MISSHIT LENGTH(0,miss): IF miss<>255 THEN GO SUB misshit
720 ~RAMMO 0,LENGTH(0,ammo):~PNUMA 88,168,3,48,ammo
730 FOR spdup=1 TO 2
740 ~MISSHIT LENGTH(0,miss): IF miss<>255 THEN GO SUB misshit
750 ~MOVEALL:~VIEW
760 ~FIRE 1+RND(24)
770 ~FIRE 1+RND(24)
780 ~FIRE 1+RND(24)
790 ~SXPOS 0,LENGTH(0,x)
800 ~SYPOS 0,LENGTH(0,y)
810 IF y=17 THEN ugh
820 IF rm=0 THEN GO TO 850
830 IF x<4 THEN LET x=236 THEN LET rm=rm-1,rom=rom-1: GO SUB room
840 IF rm=11 THEN GO TO 860
850 IF x>236 THEN LET x=4 THEN LET rm=rm+1,rom=rom+1: GO SUB room
860 NEXT spdup
870 NEXT outl
880 LOOP
890 LABEL room
900 ~INKBLACK
910 ~ROOM rm
920 ~DJCLEAR 0,1
930 ~SPUT 0,x,y,128
940 RESTORE roomst(rom)
950 FOR a=1 TO 256
960 READ r,sp,sx,sy,xs,ys
970 IF r>rm THEN GO TO 1020
980 IF r<>rm THEN GO TO 1010
990 IF sp<41 THEN LET pl=128: ELSE LET pl=1
1000 IF dead(sp,rom)>0 THEN ~SPUT sp,sx,sy,pl:~SPEED sp,xs,ys:~NODEON sp
1010 NEXT a
1020 ~PNUMA 26,168,3,48,energy
1030 ~PNUMA 222,168,1,48,keys
1040 ~PNUMA 146,168,4,48,score
1050 ~PNUMA 88,168,3,48,ammo
1060 ~MOVEALL:~VIEW
1070 ~VIEW:~COLOUR
1080 RETURN
1090 LABEL rm0
1100 DATA 0,45,128,31,2,0
1110 DATA 0,44,150,97,0,2
1120 DATA 0,46,114,111,0,0
1130 DATA 0,41,114,50,0,0
1140 DATA 0,1,68,104,0,0
1150 DATA 0,6,34,33,2,0
1160 DATA 0,11,226,145,-2,0
1170 DATA 0,7,236,33,-2,0
1180 DATA 0,16,100,160,2,0
1190 DATA 0,26,4,48,0,0
1200 LABEL rm1
1210 DATA 1,44,48,31,0,2
1220 DATA 1,42,64,127,2,0
1230 DATA 1,45,128,97,0,2
1240 DATA 1,46,48,33,0,0
1250 DATA 1,6,82,33,-2,0
1260 DATA 1,11,116,97,-2,0
1270 DATA 1,7,228,145,-2,0
1280 DATA 1,16,100,160,2,0
1290 DATA 1,1,242,71,0,0
1300 DATA 1,34,218,60,0,0
1310 DATA 1,21,1,144,4,0
1320 DATA 1,8,56,144,-2,0
1330 DATA 1,2,161,71,0,0
1340 LABEL rm2
1350 DATA 2,44,102,97,0,2
1360 DATA 2,45,128,97,0,-2
1370 DATA 2,42,50,15,2,0
1380 DATA 2,43,239,15,-2,0
1390 DATA 2,46,116,34,0,0
1400 DATA 2,49,160,114,0,0
1410 DATA 2,41,223,82,0,0
1420 DATA 2,6,146,33,-2,0
1430 DATA 2,11,82,145,-2,0
1440 DATA 2,1,36,71,0,0
1450 DATA 2,38,190,111,0,0
1460 DATA 2,32,236,81,0,0
1470 DATA 2,16,100,160,2,0
1480 LABEL rm3
1490 DATA 3,42,0,15,2,0
1500 DATA 3,43,239,15,-2,0
1510 DATA 3,44,96,47,0,2
1520 DATA 3,46,66,98,0,0
1530 DATA 3,41,130,34,0,0
1540 DATA 3,38,36,78,0,0
1550 DATA 3,6,53,81,-2,0
1560 DATA 3,11,204,97,-2,0
1570 DATA 3,7,204,145,-2,0
1580 DATA 3,1,100,22,0,0
1590 DATA 3,16,100,160,2,0
1600 DATA 3,37,206,58,0,0
1610 LABEL rm4
1620 DATA 4,42,0,15,2,0
1630 DATA 4,43,160,47,0,2
1640 DATA 4,44,128,127,-2,0
1650 DATA 4,46,82,98,0,0
1660 DATA 4,11,146,81,-2,0
1670 DATA 4,6,68,145,-2,0
1680 DATA 4,7,212,145,-2,0
1690 DATA 4,21,235,144,-4,0
1700 DATA 4,12,236,33,-2,0
1710 DATA 4,1,148,71,0,0
1720 DATA 4,2,98,23,0,0
1730 DATA 4,16,100,160,2,0
1740 DATA 4,36,192,98,0,0
1750 LABEL rm5
1760 DATA 5,46,64,34,0,0
1770 DATA 5,43,88,31,0,2
1780 DATA 5,44,160,95,0,-2
1790 DATA 5,45,88,15,2,0
1800 DATA 5,41,240,66,0,0
1810 DATA 5,11,66,33,-2,0
1820 DATA 5,12,178,97,-2,0
1830 DATA 5,1,240,55,0,0
1840 DATA 5,7,236,145,-2,0
1850 DATA 5,8,4,145,2,0
1860 DATA 5,2,178,135,0,0
1870 DATA 5,3,66,135,0,0
1880 DATA 5,35,224,48,0,0
1890 DATA 5,16,100,160,2,0
1900 DATA 5,31,60,98,0,0
1910 LABEL rm6
1920 DATA 6,43,239,127,-2,0
1930 DATA 6,44,80,111,0,-2
1940 DATA 6,45,128,111,0,-2
1950 DATA 6,46,104,50,0,0
1960 DATA 6,41,144,113,0,0
1970 DATA 6,6,68,145,-2,0
1980 DATA 6,11,146,49,-2,0
1990 DATA 6,1,236,103,0,0
2000 DATA 6,7,210,113,-2,0
2010 DATA 6,21,235,111,-4,0
2020 DATA 6,2,68,55,0,0
2030 DATA 6,16,100,160,2,0
2040 DATA 6,37,112,112,0,0
2050 LABEL rm7
2060 DATA 7,42,82,95,0,2
2070 DATA 7,43,112,95,0,2
2080 DATA 7,11,66,113,-2,0
2090 DATA 7,44,0,127,2,0
2100 DATA 7,45,148,63,0,2
2110 DATA 7,1,130,24,0,0
2120 DATA 7,6,52,65,2,0
2130 DATA 7,2,240,24,0,0
2140 DATA 7,7,212,145,-2,0
2150 DATA 7,21,235,144,-4,0
2160 DATA 7,16,100,160,2,0
2170 DATA 7,31,186,54,0,0
2180 LABEL rm8
2190 DATA 8,11,82,145,-2,0
2200 DATA 8,43,78,100,0,2
2210 DATA 8,12,226,145,-2,0
2220 DATA 8,42,120,127,-2,0
2230 DATA 8,6,162,97,-2,0
2240 DATA 8,7,84,33,-2,0
2250 DATA 8,8,120,33,-2,0
2260 DATA 8,1,122,23,0,0
2270 DATA 8,41,78,33,0,0
2280 DATA 8,44,142,100,0,-2
2290 DATA 8,16,100,160,2,0
2300 DATA 8,35,183,75,0,0
2310 LABEL rm9
2320 DATA 9,42,128,62,0,2
2330 DATA 9,43,176,62,0,2
2340 DATA 9,1,154,72,0,0
2350 DATA 9,6,114,49,-2,0
2360 DATA 9,11,114,129,-2,0
2370 DATA 9,7,196,49,-2,0
2380 DATA 9,8,236,129,-2,0
2390 DATA 9,12,50,145,2,0
2400 DATA 9,41,114,49,0,0
2410 DATA 9,46,194,49,0,0
2420 DATA 9,13,50,33,-2,0
2430 DATA 9,35,50,49,0,0
2440 DATA 9,16,100,160,2,0
2450 LABEL rm10
2460 DATA 10,42,192,100,0,2
2470 DATA 10,43,100,32,-2,0
2480 DATA 10,44,80,100,0,2
2490 DATA 10,45,150,128,2,0
2500 DATA 10,11,48,49,-2,0
2510 DATA 10,6,114,145,-2,0
2520 DATA 10,7,50,129,-2,0
2530 DATA 10,8,178,97,-2,0
2540 DATA 10,12,194,49,-2,0
2550 DATA 10,41,178,97,0,0
2560 DATA 10,46,195,47,0,0
2570 DATA 10,1,209,135,0,0
2580 DATA 10,31,232,53,0,0
2590 DATA 10,16,100,160,2,0
2600 LABEL rm11
2610 DATA 11,6,98,145,-2,0
2620 DATA 11,42,120,100,0,2
2630 DATA 11,1,146,88,0,0
2640 DATA 11,2,166,22,0,0
2650 DATA 11,11,230,97,-2,0
2660 DATA 11,43,160,128,-2,0
2670 DATA 11,44,200,16,-2,0
2680 DATA 11,45,120,100,0,-2
2690 DATA 11,12,104,33,-2,0
2700 DATA 11,16,140,160,-2,0
2710 DATA 11,21,235,97,-2,0
2720 DATA 11,38,50,32,0,0
2730 DATA 11,41,122,33,0,0
2740 DATA 11,35,188,146,0,0
2750 DATA 11,31,124,84,0,0
2760 DATA 11,30,226,97,0,0
2770 DATA 256,0,0,0,0,0
2780 LABEL hitit
2790 IF hit=30 THEN SCOM 2:~SMERGE 30,154:~ANIMATE 30,13:~XEDGE 0,3,3:~SPEED 0,
1,0: DO :~MOVEALL:~VIEW: PAUSE 2: LOOP :yipee
2800 IF hit=21 THEN LET energy=energy-10: GO TO 2920
2810 IF hit>37 AND hit<41 THEN LET energy=energy-10:~ANIMOFF hit,12,9,1: LET de
ad(hit,rom)=0: GO TO 2920
2820 IF hit=31 THEN ~AMMADD 0,50: LET score=score+5,dead(hit,rom)=0:~ANIMOFF hi
t,64,9,1: GO TO 2920
2830 IF hit=32 THEN ~AMMADD 0,25: LET dead(hit,rom)=0,score=score+5:~ANIMOFF hi
t,64,9,1: GO TO 2920
2840 IF hit=33 THEN LET dead(hit,rom)=0,score=score+10:~ANIMOFF hit,64,9,1: GO
TO 2920
2850 IF hit>33 AND hit<38 THEN LET energy=energy+25,score=score+5,dead(hit,rom)
=0:~ANIMOFF hit,64,9,1: GO TO 2920
2860 IF hit>25 AND hit<30 THEN LET keys=keys+1:~ANIMOFF hit,64,9,1: LET dead(hi
t,rom)=0:SCOM 5: GO TO 2920
2870 IF hit<26 THEN LET dead(hit,rm+1)=dead(hit,rm+1)-0.2: LET energy=energy-1
2880 IF dead(hit,rom)<=0 THEN LET ded=hit : GO SUB ammoff: LET score=score+dead
p(hit): GO TO 2920
2890 IF hit=46 OR hit=41 THEN ~JUMP 0,6:SCOM 7: GO TO 2920
2900 IF hit=48 THEN ~JUMP 0,7:SCOM 7: GO TO 2920
2910 IF hit=49 OR hit=40 THEN ~JUMP 0,7:SCOM 7
2920 IF energy<=0 THEN ugh
2930 IF score<0 THEN LET score=0
2940 ~PNUMA 26,168,3,48,energy
2950 ~PNUMA 222,168,1,48,keys
2955 ~PNUMA 146,168,4,48,score
2960 RETURN
2970 LABEL misshit
2980 IF miss<>0 THEN ~FIRE miss
2990 IF miss=0 THEN LET energy=energy-5: GO TO 3030
3000 IF miss>25 THEN RETURN
3010 LET dead(miss,rm+1)=dead(miss,rm+1)-1
3020 IF dead(miss,rm+1)<=0 THEN LET ded=miss: GO SUB ammoff: LET score=score+de
adp(miss)
3030 IF energy<=0 THEN ugh
3040 IF score<0 THEN LET score=0
3050 ~PNUMA 26,168,3,48,energy
3060 ~PNUMA 146,168,4,48,score
3070 RETURN
3080 LABEL scom
3090 FOR a=1 TO 15
3100 ~SCOM a
3110 PAUSE 0
3120 NEXT a
3130 LABEL HELP
3140 RESTORE 3490
3150 FOR loopit=1 TO 5
3160 LABEL hel
3170 ~INKBLACK:~FULLCLEAR:~CTEXT:~VIEW
3180 ~TEXTA 66,180,"QUICK GUIDE HELP"
3190 FOR hy=1 TO 5
3200 READ spr,text$,po$
3210 ~SPUT spr,20,160-(hy*25),128
3220 ~TEXTA 50,152-(hy*25),text$
3230 ~TEXTA 200,152-(hy*25),po$
3240 IF hy=4 AND loopit=5 THEN GO TO 3260
3250 NEXT hy
3260 ~COLOUR:~VIEW
3270 PAUSE
3280 NEXT loopit
3290 ~INKBLACK:~FULLCLEAR:~CTEXT:~VIEW
3300 ~TEXTA 68,180,"QUICK GUIDE HELP"
3310 ~TEXTA 78,160,"INJURY LISTING"
3320 FOR a=1 TO 5
3330 READ text$,num
3340 ~TEXTA 10,140-(a*10),text$
3350 ~PNUMA 238,140-(a*10),2,48,num
3360 NEXT a
3370 ~VIEW:~COLOUR: PAUSE
3380 ~INKBLACK:~FULLCLEAR:~CTEXT:~VIEW
3390 ~TEXTA 66,180,"QUICK GUIDE HELP"
3400 ~TEXTA 76,160,"CONTROL METHOD"
3410 FOR a=1 TO 4
3420 READ text$
3430 ~TEXTA 56,140-(a*10),text$
3440 NEXT a
3450 ~VIEW:~COLOUR: PAUSE
3460 ~INKBLACK:~FULLCLEAR:~CTEXT:~VIEW
3470 GO SUB room
3480 GO TO start
3490 DATA 0,"SAFARI SAM"," 0"
3500 DATA 1,"MONKEY"," -25"
3510 DATA 6,"TRIBESMAN"," 10"
3520 DATA 11,"HUNTER"," 25"
3530 DATA 16,"PARROT"," -15"
3540 DATA 38,"ANIMAL TRAP"," 0"
3550 DATA 21,"BARREL"," 5"
3560 DATA 26,"GOLD KEY"," 10"
3570 DATA 27,"SILVER KEY"," 10"
3580 DATA 28,"BLUE KEY"," 10"
3590 DATA 29,"RED KEY"," 10"
3600 DATA 30,"GREEN KEY"," 10"
3610 DATA 31,"50 AMMO"," 5"
3620 DATA 32,"25 AMMO"," 5"
3630 DATA 33,"TOKEN"," 10"
3640 DATA 34,"PIZZA 25 ENERGY"," 5"
3650 DATA 35,"LOLLY 25 ENERGY"," 5"
3660 DATA 36,"APPLE 25 ENERGY"," 5"
3670 DATA 37,"CAKE 25 ENERGY"," 5"
3680 DATA 42,"PLATFORM"," 0"
3690 DATA 46,"SPRING UP"," 0"
3700 DATA 47,"SPRING DOWN"," 0"
3710 DATA 48,"SPRING LEFT"," 0"
3720 DATA 49,"SPRING RIGHT"," 0"
3730 DATA "BULLET",5
3740 DATA "SPEAR",5
3750 DATA "NUT",5
3760 DATA "BARREL",10
3770 DATA "CONTACT",1
3780 DATA "F1....JOYSTICK 1"
3790 DATA "F2....CURSORS,SPACE"
3800 DATA "F3....JOYSTICK 2"
3810 DATA "F4....Q,A,O,P,SPACE"
3820 LABEL ammoff
3830 ~RIMAGE ded,LENGTH(0,a)
3840 ~SXSPD ded,LENGTH(0,sx)
3850 LET d=3
3860 IF sx>0 THEN LET d=3
3870 IF sx<0 THEN LET d=7
3880 IF sx=0 THEN IF ded>0 THEN IF ded<6 OR ded>25 THEN LET d=9
3890 FOR a=0 TO 4: LET md=ded+a: IF (md/5)<>INT (md/5) THEN NEXT a
3900 IF md<21 THEN ~ANIMOFF ded,((md/5))+20,d,1: ELSE ~ANIMOFF ded,64,d,1
3910 RETURN
3920 DEF PROC scom s
3930 IF sfx=1 THEN ~SCOM s
3940 END PROC
3950 DEF PROC fade d
3960 RESTORE 4059+d
3970 IF d=1 THEN FOR a=0 TO 15
3980 IF d=2 THEN FOR a=15 TO 0 STEP -1
3990 READ col
4000 PAUSE d
4010 FOR b=a TO 15
4020 PALETTE b,col
4030 NEXT b
4040 NEXT a
4050 END PROC
4060 DATA 0,0,8,5,7,13,15,82,112,90,120,117,119,125,127,127
4070 DATA 127,127,125,119,117,120,90,112,82,15,13,7,5,8,0,0
4080 DEF PROC palblack: FOR a=1 TO 15: PALETTE a,0: NEXT a: END PROC
4090 DEF PROC yipee
4100 ~INIT:palblack: PAUSE 2
4110 ~PANEL "s3"
4120 fade 1
4130 LET score$=STR$ score
4140 LET s$="0000"
4150 LET s$(5-LEN score$ TO 4)=score$
4160 FOR a=1 TO 4: POKE (548747+a),VAL s$(a): NEXT a
4170 PAUSE :fade 2
4175 POKE 458755,0
4180 LOAD "endit"
4190 END PROC
4200 DEF PROC ugh
4210 ~INIT:palblack: PAUSE 2
4220 ~PANEL "s9"
4230 fade 1: PAUSE :fade 2
4231 LET score$=STR$ score
4232 LET s$="0000"
4233 LET s$(5-LEN score$ TO 4)=score$
4234 FOR a=1 TO 4: POKE (548747+a),VAL s$(a): NEXT a
4240 POKE 458755,1: LOAD "endit"
4250 END PROC
endit
10 LET diff=PEEK 458752
15 LET dead=PEEK 458755
20 LOAD "high" DATA high$
30 palblack:~INIT: PAUSE 2
35 IF dead=1 THEN palblack:~INIT: GO TO 80
40 ~PANEL "s4"
50 fade 1: PAUSE :fade 2:palblack:~INIT
55 IF diff=10 THEN GO TO 80
60 LET diff=diff+1
70 POKE 458752,diff
80 LET score$=""
90 FOR a=1 TO 4: LET score$=score$+STR$ PEEK (458747+a): NEXT a
100 LET score=VAL score$
110 LET high=VAL high$(31-3 TO 31)
112 IF high>score THEN GO TO 218
113 ~MAINSCR:fade 1:~VIEW:fade 1: PAUSE 2
115 ~PANEL "s6":fade 1
120 LET name$=""
121 ~TEXTA 10,110,high$
125 ~TEXTA 10,100," "+score$:~VIEW
130 DO
140 GET a$
145 IF CODE a$=13 THEN GO TO 215
150 IF CODE a$=12 AND LEN name$>0 THEN LET name$=name$(1 TO LEN name$-1): GO T
O 180
155 IF LEN name$=25 THEN GO TO 180
160 LET f=CODE a$: IF f>96 AND f<123 THEN LET f=f-32,a$=CHR$ f
170 LET name$=name$+a$
180 ~TEXTA 10,100," "+score$
190 IF LEN name$>0 THEN ~TEXTA 10,100,name$
200 ~VIEW
210 LOOP
215 IF LEN name$=0 THEN GO TO 218
216 LET high$(1 TO LEN name$)=name$: LET high$(31-3 TO 31)=score$
217 SAVE "high" DATA high$
218 IF dead=1 THEN FOR a=1 TO 4: POKE (458747+a),0: NEXT a
219 fade 2: LOAD "level1"
220 DEF PROC fade d
230 RESTORE 329+d
240 IF d=1 THEN FOR a=0 TO 15
250 IF d=2 THEN FOR a=15 TO 0 STEP -1
260 READ col
270 PAUSE d
280 FOR b=a TO 15
290 PALETTE b,col
300 NEXT b
310 NEXT a
320 END PROC
330 DATA 0,0,8,5,7,13,15,82,112,90,120,117,119,125,127,127
340 DATA 127,127,125,119,117,120,90,112,82,15,13,7,5,8,0,0
350 DEF PROC palblack: FOR a=1 TO 15: PALETTE a,0: NEXT a: END PROC