Jump to content

# HELP - I AM STUCK! - TI EXtended BASIC

## Recommended Posts

3 minutes ago, oddemann said:

430 IF X=18 THEN CALL PATTERN(#2,13) ELSE 420

PATTERN has to use an integer from 32 to 143. (Page 142 of XB manual)

#### Share this post

##### Share on other sites
8 minutes ago, senior_falcon said:

PATTERN has to use an integer from 32 to 143. (Page 142 of XB manual)

Thx!!! That solved it.... Looked at the PDF... there was a 1 lurking in the line under :p The ref to manual and 32-143 helped!

f... bugs... or is it my eyes... I spent so much time, reading and reading over and trying to be sure that I typed in everything correct after the bug. BUT... manged to NOT see the "1" lurking in the line right under...
"Programmers blindness!" - wounder what sets it off! And how to de-bug that bug :p hehehe

Line 430 is...
IF X=18 THEN CALL PATTERN(#2,131) ELSE 420

With that bug fixed...
Next fix...

570 CALL MOTION(#2,0,0):: CALL SOUND(200,-4,3):: CALL PATTERN(#2,43)

Edited by oddemann

#### Share this post

##### Share on other sites
1 hour ago, oddemann said:

570 CALL MOTION(#2,0,0):: CALL SOUND(200,-4,3):: CALL PATTERN(#2,43)

I don't see anything obvious here. One of the drawbacks of multistatement lines is that you don't know which part of the line is causing the error. If you divide this line into 3 lines  then you will get more information from the error message:

570 CALL MOTION (#2,0,0)

571 CALL SOUND(200,-4,3)

572 CALL PATTERN(#2,43)

#### Share this post

##### Share on other sites
3 hours ago, oddemann said:

I typed in everything

I find this much easier...

#### Share this post

##### Share on other sites

Not really a problem... But a update of PARATROOPER to PARATROOPER 1.8... There are some "tiny" bugs and stuff I want to make/add to this game before it is PARATROOPER 2

- Thinking about making the bouts move up and down in the sea too... Anims ready! Need to play around and see how it looks.
- Make a dancing man when he hits targets... Anims ready! Have to move Dance "partner" to a better place to get correct color.
- Fix <>... "Just do it!"
- Maybe move 75,50,25 in front of targets... (and have the man dancing on top)... Tinkering and number testing...  Boring :p hehehe

- Maybe use magnify to make a level 1-2-3. First level is everything big, next level is small and last Experienced. Not give the option of N or E! Let everyone start at lvl 1, then redraw after X score. Huge change in program!
- Make sure that sprite of bout is in front of splash! Figure out WHY Sprite is behind... :p
- And MAYBE fix the colored letters by moving graphics around... VERY LOW on list!

I have been adding "better" visuals... WOW how limiting the TI 99/4A is... Or more correct Ex B. Been a lot of planing where to put the graphic to get the colors right. And jumping around and NOT "delete" some text or symbols... It is a very limiting lango / ram!

Well, I can ask about this... In the MISS of target... (Line 580)... It is displaying Parachute as green.. OK... But I want to make the waves light blue. I have not figures out way Call Color(12,6.5) will not make 120 light blue... Help? I guess it has something to do with Call Pattern?

But anyway... what do you think about it so fare?

```10 REM  EXTENDED BASIC REQUIRED
20 CALL CLEAR :: RANDOMIZE :: CALL MAGNIFY(3)
25 CALL CHAR(60,"01073F7FF8914B25130F01010103020680E0FCFE1F89D2A4C8F0808080C04060")
26 CALL CHAR(130,"107CFE8254381028")
30 FOR T=10 TO 14 :: FOR I=10 TO 14 :: DISPLAY AT(12,9):"PARATROOPER"
40 CALL SCREEN(T) :: NEXT I :: NEXT T
45 CALL SPRITE(#28,60,13,1,115,2,0)
50 CALL SCREEN(12)
60 FOR T=450 TO 550 STEP 50 :: FOR I=9 TO 19
70 CALL COLOR(13,4,1) :: DISPLAY AT(14,I):CHR\$(130)
80 CALL SOUND(10,T,3) :: NEXT I :: NEXT T
90 FOR I=1 TO 100 :: NEXT I :: GOSUB 920
100 DISPLAY AT(22,2):"NEED INSTRUCTIONS (Y/N)"
110 ACCEPT AT(22,25)VALIDATE("YNyn") : Y\$
115 CALL DELSPRITE(#28)
120 IF (Y\$="Y")OR(Y\$="y")THEN 750
130 IF (Y\$="N")OR (Y\$="n")THEN 860
140 CALL CLEAR :: CALL SCREEN(8)
150 CALL CHAR(33,"47A424468181A5E2",34,"E28585C52525A542")
160 CALL CHAR(35,"F794141621418582",120,"00030812241348201B0000000000000000A018E412E409029C00000000000000")
170 CALL CHAR(96,"00008187DFFF78000000000000000000000081E1FFFE1C000000000000000000",136,"030100010307070F1F1F3F3F7F00FF7F8080004040606060707078787C80FFFC")
180 CALL CHAR(104,"0103C3417F3F07070707077E7C40000080C0C080FCFEE2E3E0E0E06060606070",132,"202031337373F7FF")
190 CALL CHAR(133,"020203070F8FDFFF",64,"FFFFFFFFFFFFFFFF")
200 CALL CHAR(91,"FFFFFFFFFFFFFFFF",129,"00E0A6E6A6FEBAEE")
210 CALL CHAR(36,"000000000103077FDDFF3F0703010000000078F0E0C387FF57FFFE80C0E0F000",40,"FFFFCECEFF7F19191F1F19191F000000FFFF7373FFFE9898F8F89898F8000000")
220 CALL CHAR(44,"FFFFCECEFF7F19191F1F19191F000000FFFF7373FFFE9898F8F89898F8000000",92,"FFFFCECEFF7F19191F1F19191F000000FFFF7373FFFE9898F8F89898F8000000")
230 CALL CHAR(128,"183C7E7EFFFF1818",140,"00000603311EE63F5EFF7F0F1F000000000000C0E0E8F47EFFFFFFFFFE000000")
235 CALL CHAR(134,"0000889899DDFFFF",135,"008888DCDCDEFEFF")
236 CALL CHAR(104,"0103C3417F3F07070707077E7C40000080C0C080FCFEE2E3E0E0E06060606070")
240 CALL SCREEN(8) :: CALL COLOR(9,4,8,10,6,1) :: CALL COLOR(5,5,1)
250 CALL HCHAR(16,1,64,256)
260 FOR I=1 TO 31 STEP 4 :: CALL HCHAR(16,I,132) :: CALL HCHAR(16,I+1,133) ::  CALL HCHAR(16,I+2,134) :: CALL HCHAR(16,I+3,135) :: NEXT I
270 POINT=0 :: PARA=10
280 FOR N=22 TO 24 :: G=INT(RND*100)+10
290 CALL SPRITE(#N,140,15,G,G+120,0,.60) :: NEXT N :: CALL MAGNIFY(3)
300 S=7 :: FOR N=4 TO 6 :: S=S-1
310 D=INT(RND*5)+1 :: DD=INT(RND*14)+3 :: IF(D=OD)+(DD=ODD)+(DD=6) THEN 310
320 OD=D :: ODD=DD :: J=N*10+90+RND*10 :: CALL SPRITE(#S,136,DD,J,J,0,D) :: NEXT N :: CALL MAGNIFY(3)
330 IF FL=1 THEN 370 ELSE DISPLAY AT(15,5):CHR\$(35) :: DISPLAY AT(15,14):CHR\$(34)
340 DISPLAY AT(15,23):CHR\$(33)
350 CALL SPRITE(#3,32,1,180,180,0,60)
360 CALL SPRITE(#7,40,7,121,193,#8,44,12,121,121,#9,92,13,121,49)
370 IF PARA=0 THEN 630 ELSE RANDOMIZE :: U=INT(RND*70)+10
380 CALL SPRITE(#1,36,13,U,10,0,-12,#2,36,4,U,7,0,-12)
390 V=INT(RND*9)+1 :: L=INT(RND*4)+1
400 DISPLAY AT(1,1):"TROOPS LEFT";PARA;"  SCORE";POINT
410 DISPLAY AT(24,2):"WIND SPEED";L*2;"  WEIGHT";(V*25)+50
420 CALL KEY(1,X,Y)
430 IF X=18 THEN CALL PATTERN(#2,60) ELSE 420
440 CALL MOTION(#2,V,L) :: CALL SOUND(30,-6,5,150,5)
450 CALL COINC(#2,#7,Z,C)
460 CALL COINC(#2,#8,Z,CC)
470 CALL COINC(#2,#9,Z,CCC)
480 IF(C=-1)+(CC=-1)+(CCC=-1)THEN 510
490 CALL COINC(#2,#3,50,R) :: IF R=-1 THEN 570
500 GOTO 450
510 CALL MOTION(#2,0,0) :: CALL PATTERN(#2,104) :: CALL SOUND(-1500,5995,4)
520 FOR T=950 TO 1500 STEP 50 :: CALL SOUND(50,T,3) :: NEXT T
530 POINT=POINT-25*(C=-1)-50*(CC=-1)-75*(CCC=-1)
540 CALL DELSPRITE(#1,#2) :: DISPLAY AT(13,5):"MISSION ACCOMPLISHED"
550 FOR I=1 TO 150 :: NEXT I
560 CALL HCHAR(13,5,32,22) :: GOTO 370
570 CALL COLOR(2,6,1) :: CALL MOTION(#2,0,0):: CALL SOUND(200,-4,3):: CALL PATTERN(#2,96)
580 FOR I=1 TO 100 :: NEXT I :: CALL PATTERN(#2,120) :: FOR I=1 TO 200 :: NEXT I
590 CALL DELSPRITE(#1,#2) :: DISPLAY AT(13,3):"YOU MISSED THE DROP ZONE"
600 POINT=POINT-10 :: PARA=PARA-1
610 FOR I=1 TO 150 :: NEXT I :: CALL HCHAR(13,3,32,26)
620 GOTO 370
630 CALL HCHAR(1,1,32,29) :: CALL HCHAR(24,1,32,29)
640 FOR I=450 TO 850 STEP 25 :: CALL SOUND(50,I,3) :: NEXT I
650 FOR T=850 TO 450 STEP-25 :: CALL SOUND(50,T,3) :: NEXT T
660 DISPLAY AT(7,10):"GAME OVER"
670 DISPLAY AT(9,6):"YOU HAD ";POINT;"POINTS"
680 DISPLAY AT(12,2):"WANT TO PLAY AGAIN?  (Y/N)"
690 ACCEPT AT(12,27)VALIDATE("YN"):R\$
700 IF R\$="N" THEN 730
710 CALL HCHAR(12,4,32,26) :: CALL HCHAR(7,12,32,9) :: CALL HCHAR(9,6,32,24)
720 FL=1 :: GOTO 270
730 CALL CLEAR :: CALL DELSPRITE(ALL) :: CALL SCREEN(14) :: DISPLAY AT(12,10):"GOOD BYE "
740 GOSUB 920 :: END
750 CALL CLEAR :: CALL SCREEN(12)
760 PRINT "LAND YOUR PARATROOPERS ON","DROP PADS WORTH 75, 50, OR"
770 PRINT "25 POINTS. RELEASE EACH","WITH THE FIRE BUTTON ON","JOYSTICK #1 OR THE (Q) KEY.": :
780 PRINT "IF YOU MISS, YOU WILL DRIFT","INTO THE OCEN AND LOSE 10"
790 PRINT "POINTS. YOU CAN ONLY LOSE","10 TROOPERS BEFORE THE","GAME ENDS.": : :: PRINT "THE WIND SPEED AND WEIGHT"
800 PRINT "OF EACH TROOPER ARE DIS-","PLAYED AT THE BOTTOM OF THE","SCREEN. CONSIDER THE SPEED"
810 PRINT "OF DESCENT AND THE DRIFT   "
820 PRINT "CHECK THESE BEFOR RELEASING","EACH PARATROOPER."
830 PRINT TAB(10);"GOOD LUCK!": :
840 PRINT TAB(14);"PRESS ANY KEY TO BEGIN"
850 CALL KEY(0,K,S) :: IF S=0 THEN 850
860 CALL CLEAR :: DISPLAY AT(8,6):"PARATROOPER RANK ?"
870 DISPLAY AT(11,2):"<N>OVICE OR <E>XPERIENCED"
880 ACCEPT AT(14,28)VALIDATE("EeNn"):C\$
882 IF (C\$="N")OR (C\$="n")THEN 900
884 IF (C\$="E")OR(C\$="e")THEN 910
900 CALL MAGNIFY(3) :: Z=10 :: GOTO 140
910 Z=5 :: GOTO 140
920 CALL SOUND(300,330,3) :: CALL SOUND(300,392,3)
930 CALL SOUND(500,392,3) :: CALL SOUND(200,349,3)
940 CALL SOUND(100,330,3) :: CALL SOUND(200,294,3)
950 CALL SOUND(300,330,3) :: CALL SOUND(300,349,3)
960 CALL SOUND(300,370,3) :: CALL SOUND(300,349,3)
970 CALL SOUND(250,440,3) :: CALL SOUND(150,524,3)
980 CALL SOUND(500,524,3)
990 CALL SOUND(300,583,3) :: CALL SOUND(100,523,3)
1000 CALL SOUND(200,440,3) :: CALL SOUND(100,523,3)
1010 RETURN```

#### Share this post

##### Share on other sites
On 7/13/2020 at 4:52 AM, oddemann said:

Thx!!! That solved it.... Looked at the PDF... there was a 1 lurking in the line under 😛 The ref to manual and 32-143 helped!

f... bugs... or is it my eyes... I spent so much time, reading and reading over and trying to be sure that I typed in everything correct after the bug. BUT... manged to NOT see the "1" lurking in the line right under...
"Programmers blindness!" - wounder what sets it off! And how to de-bug that bug 😛 hehehe

Line 430 is...
IF X=18 THEN CALL PATTERN(#2,131) ELSE 420

With that bug fixed...
Next fix...

570 CALL MOTION(#2,0,0):: CALL SOUND(200,-4,3):: CALL PATTERN(#2,43)

CALL PATTERN(#2,30) ! notice 30 to 159 used

RXB handles 30 to 159 of course when using above characters 143 up,  care must be taken to stay with higher numbers for characters and sprite numbers.

Say for instance Sprite #28 the 4 Characters 156 to 159 redefined for that sprite.

I just noticed that I never added CALL PATTERN changes in RXB 2001 to RXB 2015, geez that is a huge oversite on my part.

#### Share this post

##### Share on other sites
7 hours ago, oddemann said:

Well, I can ask about this... In the MISS of target... (Line 580)... It is displaying Parachute as green.. OK... But I want to make the waves light blue. I have not figures out way Call Color(12,6.5) will not make 120 light blue... Help?

I guess you change a sprite from parachute to splash. You change the color of a sprite with something like this: CALL COLOR(#2,8)

7 hours ago, oddemann said:

But anyway... what do you think about it so far?

Very nice.

#### Share this post

##### Share on other sites

It seems as if the wind has too much effect if your weight is low. Half a man drifts like ... - Just saying.

Colors. Contrast. Try white clouds.

I had a lot of the original Atari 2600 games when released. Sky Diver is one I skipped, as I thought it wouldn't be that much fun.

Apparently you can deploy the parachute, and then steer. I think that would be great additions to your game, instead of just "sit and watch" after pushing the paratrooper out of the plane.

#### Share this post

##### Share on other sites

I.T. - The Adventure of the Century (Book - Terrific Games for the TI 99 4A)

New game test and debugging... I have not done 100% debugging of the DATA, most should be correct. Maybe everything is :p hehehe BUT... I think the problem is somewhere else! I have gone over so many times that my eyes has crossed over and is protesting :p (I was given a sight where many programs where, I am going to look there for this game too).

But I am putting it put here, It looks cool (I love D&D) so... Help???

```10 REM TI(EXTENDED)-I.T.
15 CALL CLEAR
20 RANDOMIZE
30 DIM K(36,6),R\$(36),H\$(15),VP(12),V\$(12),B(12),PR(6,3)
40 GOSUB 2810
50 IHD=8 :: NKAM=0
60 GOTO 80
70 GOSUB 130
80 GOSUB 390
90 GOSUB 290
100 IF CWD<5 THEN 70
110 PRINT "You were killed"
120 END
130 NKAM=0
140 IHD=0
150 INPUT "What would you like to do:":C1\$
160 LNG=LEN(C1\$)
170 FOR I=1 TO 15
180 IF SEG\$(H\$(I),1,LNG)=C1\$ THEN IHD=I :: I=16
190 NEXT I
200 IF IHD>6 THEN RETURN
210 IF IHD=0 THEN 260
220 NKAM=K(IKM,IHD)
230 IF NKAM<>0 THEN RETURN
240 PRINT "Impossible direction"
230 GOTO 130
260 PRINT "I do not understand "
270 GOTO 130
280 RETURN
290 PRINT "you are in the ";R\$(IKM)
300 IF IKM>24 OR BLL=1 THEN 330
310 PRINT "You cannot see much here"
320 GOTO 340
330 IF IVW<>0 THEN PRINT "There is a ";V\$(IVW);" here"
340 FOR I=1 TO 6
350 IF K(IKM,I)<>0 THEN PRINT "You can go ";H\$(I)
360 NEXT I
370 PRINT
380 RETURN
390 IF NKAM<>0 THEN IKM=NKAM
400 IVW=0
410 FOR I=1 TO 12
420 IF VP(I)=IKM THEN IVW=I :: I=12
430 NEXT I
440 IPS=0
450 FOR I=1 TO 6
460 IF PR(I,1)=IKM THEN IPS=I :: I=6
470 NEXT I
480 IF IKM<12 AND CRI<>8 THEN GOSUB 2670
490 CLL=CLL+BLL
500 IF IHD<7 THEN 530
510 ON IHD-6 GOSUB 560,760,810,910,1130,1220,1340,1420,1500
520 REM
530 IF IPS=0 THEN RETURN
540 ON IPS GOSUB 1620,1840,2080,2180,2290,2470
550 RETURN
560 IF IPS=0 OR IPS>4 THEN PRINT "Killing time is the only    thing you can do here" :: RETURN
570 IVWB=7
580 GOSUB 2610
590 IF IBZ=0 THEN PRINT "You can't attack without    sword" :: RETURN
600 PRINT "So you want to kill the ";P\$(IPS)
610 PRINT "You attack it with your sword";
620 IF RND<.5 THEN PRINT " but you missed him" :: GOTO 650
630 PRINT " and you give your victim a terrible blow"
640 PR(IPS,3)=PR(IPS,3)-1
650 IF RND>.2 THEN 700
660 PRINT "You can hit it again but be quick"
670 INPUT "Do you want to?(y or n)":Y\$
680 IF Y\$<>"y" THEN 700
690 PRINT "You raise your sword again";:: GOTO 620
700 IF PR(IPS,3)>1 THEN RETURN
710 IF PR(IPS,3)=1 THEN PRINT "Your victim is badly wounded" :: RETURN
720 PRINT "You killed your victim"
730 PR(IPS,1)=0 :: IVW=8+IPS
740 VP(IVW)=IKM :: IPS=0
750 RETURN
760 PRINT "Possible commands:"
770 FOR I=1 TO 15
780 PRINT H\$(I)
790 NEXT I
800 RETURN
810 IF IVW<>0 THEN 840
820 PRINT "There is nothing to take    here"
830 RETURN
840 IF BLL=0 AND IKM<25 THEN PRINT "You cannot take things that you do not see" :: RETURN
850 PRINT "I take the ";V\$(IVW);" for you"
860 B(IBMAX)=IVW
870 IBMAX=IBMAX+1
880 VP(IVW)=0
890 IVW=0
900 RETURN
910 INPUT "What would you like to drop? ":D\$
920 LNG=LEN(D\$)
930 IVWB=0
940 FOR I=1 TO 12
950 IF D\$=SEG\$(V\$(I),1,LNG) THEN IVWB=I :: I=12
960 NEXT I
970 IF IVWB<>0 THEN 1000
980 PRINT "I do not understand you"
990 RETURN
1000 GOSUB 2610
1010 IF IBZ<>0 THEN 1040
1020 PRINT "Impossible to drop"
1030 RETURN
1040 PRINT "I dropped the ";V\$(B(IBZ));" for you"
1050 IVW=B(IBZ)
1060 VP(B(IBZ))=IKM
1070 B(IBZ)=B(IBMAX-1)
1080 IBMAX=IBMAX-1
1090 IF IKM<>25 THEN RETURN
1100 INPUT "Do you want to drop more?(y or n)":Y\$
1110 IF Y\$="y" THEN 910
1120 RETURN
1130 IF IBMAX<>1 THEN 1160
1140 PRINT "You own nothing"
1150 GOTO 1200
1160 PRINT "You have the following     things:"
1170 FOR I=1 TO IBMAX-1
1180 PRINT V\$(B(I))
1190 NEXT I
1200 PRINT "You can still have ";5-CWD;"wounds before you die"
1210 RETURN
1220 IVWB=6
1230 GOSUB 2610
1240 IF IBZ<>0 THEN 1270
1250 PRINT "Impossible without bandage"
1260 RETURN
1270 PRINT "I use all the bandages to    bandage you"
1280 CALL S0UND(100,1000,0)
1290 PRINT "So, that will hold for a    while"
1300 CWD=0
1310 B(IBZ)=B(IBMAX-1)
1320 IBMAX=IBMAX-1
1330 RETURN
1340 IVWB=1
1350 GOSUB 2610
1360 IF IBZ<>0 THEN 1390
1370 PRINT "Impossible without a lantern"
1380 RETURN
1390 PRINT "The lantern is on now"
1400 BLL=1
1410 RETURN
1420 IVWB=1
1430 GOSUB 2610
1440 IF IBZ<>0 THEN 1470
1450 PRINT "You do not even have a lantern"
1460 RETURN
1470 PRINT "The lantern is off now"
1480 BLL=0
1490 RETURN
1500 IVWB=4
1510 GOSUB 2610
1520 IF IBZ<>0 THEN 1550
1530 PRINT "Nothing to read"
1540 RETURN
1550 IF BLL=1 OR IKM>24 THEN 1580
1560 PRINT "It is to dark to read here"
1570 RETURN
1580 T\$="Uifsf!jt!b!b!sfdfjqu!gps!!!!!!dppljft!jo!uijt!cppl" :: GOSUB 3520
1590 T\$="Ju!tbzt|!ublf!b!efbe!!!!!!!!ifmmipvoelboe!tpnfIxifbu/!!!Espq!uijt!po!b!cbBCfdvf!boe!xbju!b!nJovuf" :: GOSUB 3520
1600 PRINT "That is all"
1610 RETURN
1620 IF IVW=3 THEN PR(1,2)=3 :: VP(IVW)=0 :: IVW=0
1630 ON PR(1,2)GOTO 1640,1690,1720,1790,1820
1640 PRINT "I.T.(the intra-terrestrial) is here"
1650 PRINT "It looks like he wants to    talk"
1660 PRINT "He talks but you cannot     understand him"
1670 PR(1,2)=2
1680 RETURN
1690 T\$="J/U/!nblft!hftuvsft!uibu!if!offet!tpnfuijoh!upesjol" :: GOSUB 3520
1700 T\$="If!mpplt!sbuifs!eftqfsbuf" :: GOSUB 3520
1710 RETURN
1720 T\$="J/U/!offefe!uif!esjol!wfsz!!nvdi/" :: GOSUB 3520
1730 T\$="If!tbzt;QMFBTF!hp!epxo!joup!uif!dbwft!boe!gjoe!uif!!!!!!ovmmjuz!cpnc" :: GOSUB 3520
1740 T\$="Ju!nbz!cz!op!xbz!fyqmpef/!npotufs!qspufdut/" :: GOSUB 3520
1750 T\$="Pomz!ZPVidbo!tbwf!uif!fbsui/" :: GOSUB 3520
1760 PRINT "Suddenly I.T. collapses and falls down"
1770 PR(1,2)=4
1780 RETURN
1790 PRINT "I.T. is in a coma."
1800 PR(I,2)=5
1810 RETURN
1820 PRINT "I.T. is here":"He is in a coma"
1830 RETURN
1840 IF IVW=8 THEN PR(2,2)=5 :: VP(IVW)=0 :: IVW=0
1850 ON PR(2,2)G0T0 1860,1900,1930,1960,2000,2060
1860 PRINT "There is an enormous monsterhere."
1870 PRINT "The monster yells:are you a cookie"
1880 PR(2,2)=2
1890 RETURN
1900 PRINT "The monster yells louder andlouder:ARE YOU ACOOKIE"
1910 PR(2,2)=3
1920 RETURN
1930 PRINT "The monster keeps yelling and becomes rather agressive"
1940 PR(2,2)=4
1950 RETURN
1960 PRINT "The monster gives you a terrible blow. Your head is spinning"
1970 CWD=CWD+1
1980 PR(2,2)=INT(RND*3)+2
1990 RETURN
2000 PRINT "The monster starts to eat atonce."
2010 PRINT "It falls asleep"
2020 CALL SOUND(100,110,0)
2030 K(16,6)=l
2040 PR(2,2)=6
2050 RETURN
2060 PRINT "The monster sleeps"
2070 RETURN
2080 PRINT "There is a snake in here"
2090 IF RND<.4 THEN RETURN
2100 IF IBMAX=1 OR RNDX.5 THEN 2140
2110 IBMAX=IBMAX-1
2120 VP(B(BMAX))=13+INT(RND*12)
2130 PRINT "The snake takes something "
2140 PRINT "It sneaks away"
2150 PRO, l)=PRO, l)+3
2160 IF PR(3,1)>24 THEN PRO, 1)=PRO, 1)-8
2170 RETURN
2180 ON PR(4,2)G0T0 2190,2220,2260
2190 PRINT "There is a giant hellhound in here. It looks like he wants you for dinner"
2200 PR(4,2)=2
2210 RETURN
2220 PRINT "The hellhound attacks you and bites you violently"
2230 CWD=CWD+1
2240 PR(4,2)=3
2250 RETURN
2260 PRINT "The hellhound may attack youagain"
2270 PR(4,2)=2+INT(RND#2)
2280 RETURN
2290 PRINT "The nullity bomb is here"
2300 PRINT "There are three wires: a green one(g),a red one(r) and a yellow one (y)"
2310 PRINT "You must disconnect two of them"
2320 INPUT "Which will be the first one:":X\$
2330 INPUT "And which will be the second one: ":Y\$
2340 CBO=0 :: C\$="ryg"
2350 FOR I=1 TO 3
2360 IF X\$=SEG\$(C\$,1,1)THEN CB0=CB0+1
2370 IF Y\$=SEG\$(C\$,1,1)THEN CB0=CB0+1
2380 NEXT I
2390 IF CB0<2 THEN PRINT "Watch out, wrong input" :: GOTO 2300
2400 IF (X\$&Y\$)="yr" OR(X\$&Y\$)="ry" THEN 2440
2410 CALL CLEAR
2420 PRINT "By disconnecting the wrong wires, you set the bomb off and the earth was destroyed"
2430 END
2440 CALL CLEAR
2450 PRINT "Congratulations, you succeeded where others failed"
2460 END
2470 IF IVW=0 THEN 2520
2480 PR(6,2)=2
2490 IF VP(2)=IKM AND VP(12)=IKM THEN IVW=8 :: VP(IVW)=IKM :: VP(2)=0 :: VP(12)=0 :: GOTO 2520
2500 VP(IVW)=0
2510 IVW=0
2520 ON PR(6,2)G0T0 2530,2550,2580
2530 PRINT "There is an enormous barbecue here with a large fire under it"
2540 RETURN
2550 PRINT "An awful smell fills your nose"
2560 PR(6,2)=3
2570 RETURN
2580 PRINT "Everything is quiet now. Even the terrible smell fades"
2590 PR(6,2)=1
2600 RETURN
2610 REM
2620 IBZ=0
2630 FOR I=l TO IBMAX-1
2640 IF B(I)=IVWB THEN IBZ=I :: I=IBMAX-1
2650 NEXT I
2660 RETURN
2670 REM
2680 CR0=CR0+1
2690 IF IKM=D(CRO) THEN CRI=CRI+1
2700 IF CR0<8 THEN RETURN
2710 IF CRI=8 THEN 2770
2720 PRINT "Strange forces did somethingto you. It is dark"
2730 PRINT "For a moment you are        unconscious"
2740 CR0=1 :: CRI=1
2750 IKM=1
2760 RETURN
2770 PRINT "You hear a strange sound like something being pushed away"
2780 PRINT "Now it has stopped"
2790 K(2,1)=3
2800 RETURN
2810 REM
2820 REM
2830 FOR I=1 TO 36
2840 K(I,1)=I+1 :: K(I,2)=I-1
2850 K(I,3)=I+4 :: K(I,4)=I-4
2860 NEXT I
2870 FOR I=0 TO 24 STEP 12
2880 FOR J=l TO 9 STEP 4
2890 K(I+J+3,1)=0 :: K(I+J,2)=0
2900 NEXT J
2910 FOR J=l TO 4
2920 K(I+J+8,3)=0 :: K(I+J,4)=0
2930 NEXT J
2940 NEXT I
2950 K(1,5)=16 :: K(7,5)=15
2960 K(32,6)=13 :: K(13,5)=32
2970 K(35,6)=18 :: K(18,5)=35
2980 FOR I=1 TO 15
2990 READ IKM :: READ IHD
3000 K(IKM,IHD)=0
3010 NEXT I
3020 REM
3030 IKM=36
3040 IBZ=1 :: IBMAX=1
3050 CKM=0
3060 CLL=0
3070 BLL=0
3080 CWD=0
3090 CRO=0 :: CRI=0
3100 REM
3110 FOR I=1 TO 15
3120 READ H\$(I)
3130 NEXT I
3140 IN=-1
3150 FOR I=1 TO 12
3160 READ T\$
3170 GOSUB 3520
3180 V\$(I)=TN\$
3190 NEXT I
3200 FOR I=1 TO 6
3210 READ T\$
3220 GOSUB 3520
3230 P\$(I)=TN\$
3240 NEXT I
3250 FOR I=1 TO 36
3260 READ T\$
3270 GOSUB 3520
3280 R\$(I)=TN\$
3290 NEXT I
3300 FOR I=1 TO 12
3310 READ VP(I)
3320 NEXT I
3330 FOR I=1 TO 6
3340 READ PR(I,1) :: PR(I,2)=1
3350 READ PR(I,3)
3360 NEXT I
3370 FOR I=1 TO 8
3380 READ D(I)
3390 NEXT I
3400 IN=0
3410 RETURN
3420 DATA 21,1,22,2,22,1,23,2,18,1,19,2,16,3,20,4,11,1,12,2,7,1,8,2,7,4,3,3,2,1
3430 DATA east,west,north,south,up,down,kill,help,take,drop,invent,bandage,lanternon,lanternoff,read
3440 DATA mboufso,xifbuqjmf,xbufstbdl,dpplcppl,mfbgmmfu,cboebhft,txpse,dppljt,JU(t!cpez,hjbmucpez,toblfcpez,efbe!ipvoe
3450 DATA J/U/,npotufs,toblf,ifmmipvoe,cbscfdvf,cpnc
3460 DATA sftfudbwf,udbwf,tfdsfudpssjeps,dpouspmsppn,pdbwf,jdbwf,tqbdfdbwf,cmbdlsppn,qdbwf,fdbwf,odbwf,fnquzoftt
3470 DATA tnbmmdbwf,spdlzdbwf,tnfmmzdbwf,esbhpodbwf,toblfdbwf,zfmmpvdbwf,tusfbncbol,tujolzqmbdf,sfedbwf,gjobmdbwf
3480 DATA dpmpsdbwf,jdfdbwf,pqfoqmbdf,xppet,xppet,xppet,xppet,xppet,xppet,xppet,xppet,xppet,xppet,xppet
3490 DATA 34,30,28,21,14,15,13,0,0,0,0,0
3500 DATA 34,2,16,15,17,4,29,2,8,1,25,1
3510 DATA 1,5,9,10,11,7,6,2
3520 REM
3530 TN\$=""
3540 FOR AA=1 TO LEN(T\$)
3550 C\$=SEG\$(T\$,AA,1)
3560 C\$=CHR\$(ASC(C\$)-1)
3570 TN\$=TN\$&C\$
3580 NEXT AA
3590 IF IN=0 THEN PRINT TN\$
3600 RETURN
```

#### Share this post

##### Share on other sites

A somewhat different version...

```5 CALL CLEAR
7 PRINT "            I.T.": :"     Intra Terrestrial": : : :
10 PRINT " ( Alpha Lock Must Be Up!) ": : :: PRINT " Be back in just a minute.": : : : : : : :
20 RANDOMIZE
30 DIM K(36,6),R\$(36),H\$(15),VP(12),V\$(12),B(12),PR(6,3)
40 GOSUB 2810
50 IHD=8 :: NKAM=0
60 GOTO 80
70 GOSUB 130
80 GOSUB 390
90 GOSUB 290
100 IF CWD<5 THEN 70
110 PRINT "You were killed"
120 END
130 NKAM=0
140 IHD=0
150 PRINT
155 PRINT "  What would you like to do?"
156 INPUT C1\$
158 CALL CLEAR
160 LNG=LEN(C1\$)
170 FOR I=1 TO 15
180 IF SEG\$(H\$(I),1,LNG)=C1\$ THEN IHD=I :: I=16
190 NEXT I
200 IF IHD>6 THEN RETURN
210 IF IHD=0 THEN 260
220 NKAM=K(IKM,IHD)
230 IF NKAM<>0 THEN RETURN
240 PRINT "Impossible direction"
250 GOTO 130
260 PRINT "I do not understand "
270 GOTO 130
280 RETURN
290 PRINT "you are in the ";R\$(IKM)
300 IF IKM>24 OR BLL=1 THEN 330
310 PRINT "You cannot see much here"
320 GOTO 340
330 IF IVW<>0 THEN PRINT "There is a ";V\$(IVW);" here"
340 FOR I=1 TO 6
350 IF K(IKM,I)<>0 THEN PRINT "You can go ";H\$(I)
360 NEXT I
370 PRINT
380 RETURN
390 IF NKAM<>0 THEN IKM=NKAM
400 IVW=0
410 FOR I=1 TO 12
420 IF VP(I)=IKM THEN IVW=I :: I=12
430 NEXT I
440 IPS=0
450 FOR I=1 TO 6
460 IF PR(I,1)=IKM THEN IPS=I :: I=6
470 NEXT I
480 IF IKM<12 AND CRI<>8 THEN GOSUB 2670
490 CLL=CLL+BLL
500 IF IHD<7 THEN 530
510 ON IHD-6 GOSUB 560,760,810,910,1130,1220,1340,1420,1500
520 REM
530 IF IPS=0 THEN RETURN
540 ON IPS GOSUB 1620,1840,2080,2180,2290,2470
550 RETURN
560 IF IPS=0 OR IPS>4 THEN PRINT "Killing time is the only    thing you can do here" :: RETURN
570 IVWB=7
580 GOSUB 2610
590 IF IBZ=0 THEN PRINT "You can't attack without    sword" :: RETURN
600 PRINT "So you want to kill the ";P\$(IPS)
610 PRINT "You attack it with your      sword";
620 IF RND<.5 THEN PRINT " but you missed him" :: GOTO 650
630 PRINT " and you give your victim a terrible blow"
640 PR(IPS,3)=PR(IPS,3)-1
650 IF RND>.2 THEN 700
660 PRINT "You can hit again but be quick"
670 INPUT "Do you want to?(y or n)":Y\$
680 IF Y\$<>"y" THEN 700
690 PRINT "You raise your sword again"; :: GOTO 620
700 IF PR(IPS,3)>1 THEN RETURN
710 IF PR(IPS,3)=1 THEN PRINT "Your victim is badly wounded" :: RETURN
720 PRINT "You killed your victim"
730 PR(IPS,1)=0 :: IVW=8+IPS
740 VP(IVW)=IKM :: IPS=0
750 RETURN
760 CALL CLEAR
765 PRINT "Possible commands:"
770 FOR I=1 TO 15
780 PRINT H\$(I)
790 NEXT I
800 RETURN
810 IF IVW<>0 THEN 840
820 PRINT "There is nothing to take    here"
830 RETURN
840 IF BLL=0 AND IKM<25 THEN PRINT "You cannot take things that you do not see" :: RETURN
850 PRINT "I take the ";V\$(IVW);" for you"
860 B(IBMAX)=IVW
870 IBMAX=IBMAX+1
880 VP(IVW)=0
890 IVW=0
900 RETURN
910 INPUT "What would you like to drop? ":D\$
920 LNG=LEN(D\$)
930 IVWB=0
940 FOR I=1 TO 12
950 IF D\$=SEG\$(V\$(I),1,LNG)THEN IVWB=I :: I=12
960 NEXT I
970 IF IVWB<>0 THEN 1000
980 PRINT "I do not understand you"
990 RETURN
1000 GOSUB 2610
1010 IF IBZ<>0 THEN 1040
1020 PRINT "Impossible to drop"
1030 RETURN
1040 PRINT "I dropped the ";V\$(B(IBZ));" for you"
1050 IVW=B(IBZ)
1060 VP(B(IBZ))=IKM
1070 B(IBZ)=B(IBMAX-1)
1080 IBMAX=IBMAX-1
1090 IF IKM<>25 THEN RETURN
1100 INPUT "Do you want to drop more?(y or n)":Y\$
1110 IF Y\$="y" THEN 910
1120 RETURN
1130 IF IBMAX<>1 THEN 1160
1140 PRINT "You own nothing"
1150 GOTO 1200
1160 PRINT "You have the following      things:"
1170 FOR I=1 TO IBMAX-1
1180 PRINT V\$(B(I))
1190 NEXT I
1200 PRINT "You can still have ";5-CWD;"wounds before you die"
1210 RETURN
1220 IVWB=6
1230 GOSUB 2610
1240 IF IBZ<>0 THEN 1270
1250 PRINT "impossible without bandage"
1260 RETURN
1270 PRINT "I use all the bandages to   bandage you"
1280 CALL SOUND(100,1000,0)
1290 PRINT "So, that will hold for a    while"
1300 CWD=0
1310 B(IBZ)=B(IBMAX-1)
1320 IBMAX=IBMAX-1
1330 RETURN
1340 IVWB=1
1350 GOSUB 2610
1360 IF IBZ<>0 THEN 1390
1370 PRINT "Immpossible without a lantern"
1380 RETURN
1390 PRINT "The lantern is on now"
1400 BLL=1
1410 RETURN
1420 IVWB=1
1430 GOSUB 2610
1440 IF IBZ<>0 THEN 1470
1450 PRINT "You do not even have a      lantern"
1460 RETURN
1470 PRINT "The lantern is off now"
1480 BLL=0
1490 RETURN
1500 IVWB=4
1510 GOSUB 2610
1520 IF IBZ<>0 THEN 1550
1530 PRINT "Nothing to read"
1540 RETURN
1550 IF BLL=1 OR IKM>24 THEN 1580
1560 PRINT "It is too dark to read here"
1570 RETURN
1580 T\$="Uifsf!jt!b!sfdjqf!gps!!!!!!!dppljft!jo!uijt!cppl" :: GOSUB 3520
1590 T\$="Ju!tbzt;!ublf!b!efbe!!!!!!!!ifmmipvoe!boe!tpnf!xifbu/!!!Espq!uijt!po!b!cbscfdvf!boe!xbju!b!njovuf" :: GOSUB 3520
1600 PRINT "That is all"
1610 RETURN
1620 IF IVW=3 THEN PR(1,2)=3 :: VP(IVW)=0 :: IVW=0
1630 ON PR(1,2)GOTO 1640,1690,1720,1790,1820
1640 PRINT "I.T.(the intra-terrestial)  is here"
1650 PRINT "It looks like he wants to   talk"
1660 PRINT "He talks but you cannot     understand him"
1670 PR(1,2)=2
1680 RETURN
1690 T\$="J/U/!nblft!hftuvsft!uibu!if!offet!tpnfuijoh!up!esjol" :: GOSUB 3520
1700 T\$="If!mpplt!sbuifs!eftqfsbuf" :: GOSUB 3520
1710 RETURN
1720 T\$="J/U/!offefe!uif!esjol!wfsz!!nvdi/" :: GOSUB 3520
1730 T\$="If!tbzt!QMFBTF!hp!epxo!joup!uif!dbwft!boe!gjoe!uif!!!!!!ovmmjuz!cpnc" :: GOSUB 3520
1740 T\$="Ju!nbz!cz!op!xbz!fyqmpef/!B!npotufs!qspufdut/" :: GOSUB 3520
1750 T\$="Pomz!ZPV!dbo!tbwf!uif!fbsui/" :: GOSUB 3520
1760 PRINT "Suddenly I.T. collapses and falls down"
1770 PR(1,2)=4
1780 RETURN
1790 PRINT "I.T. is in a coma."
1800 PR(1,2)=5
1810 RETURN
1820 PRINT "I.T. is here":"he is in a coma"
1830 RETURN
1840 IF IVW=8 THEN PR(2,2)=5 :: VP(IVW)=0 :: IVW=0
1850 ON PR(2,2)GOTO 1860,1900,1930,1960,2000,2060
1860 PRINT "There is an enormous monsterhere."
1870 PRINT "The monster yells:are you a cookie"
1880 PR(2,2)=2
1890 RETURN
1900 PRINT "The monster yells louder andlouder:ARE YOU A COOKIE"
1910 PR(2,2)=3
1920 RETURN
1930 PRINT "The monster keeps yelling   and becomes rather agressive"
1940 PR(2,2)=4
1950 RETURN
1960 PRINT "The monster gives you a     terrible blow. Your head is spinning"
1970 CWD=CWD+1
1980 PR(2,2)=INT(RND*3)+2
1990 RETURN
2000 PRINT "The monster starts to eat atonce"
2010 PRINT "It falls asleep"
2020 CALL SOUND(100,110,0)
2030 K(16,6)=1
2040 PR(2,2)=6
2050 RETURN
2060 PRINT "The monster sleeps"
2070 RETURN
2080 PRINT "There is a snake in here"
2090 IF RND<.4 THEN RETURN
2100 IF IBMAX=1 OR RND<.5 THEN 2140
2110 IBMAX=IBMAX-1
2120 VP(B(IBMAX))=13+INT(RND*12)
2130 PRINT "The snake takes somthing"
2140 PRINT "It sneaks away"
2150 PR(3,1)=PR(3,1)+3
2160 IF PR(3,1)>24 THEN PR(3,1)=PR(3,1)-8
2170 RETURN
2180 ON PR(4,2)GOTO 2190,2220,2260
2190 PRINT "There is a giant hellhound  in here.It looks like he    wants you for dinner"
2200 PR(4,2)=2
2210 RETURN
2220 PRINT "The hellhound attacks you   and bites you violently"
2230 CWD=CWD+1
2240 PR(4,2)=3
2250 RETURN
2260 PRINT "The hellhound may attack youagain"
2270 PR(4,2)=2+INT(RND*2)
2280 RETURN
2290 PRINT "The nullity bomb is here"
2300 PRINT "There are three wires: a    green one(g),a red one(r)   and a yellow one(y)"
2310 PRINT "You must disconnect two of  them"
2320 INPUT "Which will be the first one:":X\$
2330 INPUT "And which will be the secondone:":Y\$
2340 CBO=0 :: C\$="ryg"
2350 FOR I=1 TO 3
2360 IF X\$=SEG\$(C\$,I,1)THEN CBO=CBO+1
2370 IF Y\$=SEG\$(C\$,I,1)THEN CBO=CBO+1
2380 NEXT I
2390 IF CBO<2 THEN PRINT "Watch out, wrong input" :: GOTO 2300
2400 IF(X\$&Y\$)="yr" OR(X\$&Y\$)="ry" THEN 2440
2410 CALL CLEAR
2420 PRINT "By disconnecting the wrong  wires, you set the bomb off and the earth was destroyed"
2430 END
2440 CALL CLEAR
2450 PRINT "Congradulations, you        succeeded where others      failed"
2460 END
2470 IF IVW=0 THEN 2520
2480 PR(6,2)=2
2490 IF VP(2)=IKM AND VP(12)=IKM THEN IVW=8 :: VP(IVW)=IKM :: VP(2)=0 :: VP(12)=0 :: GOTO 2520
2500 VP(IVW)=0
2510 IVW=0
2520 ON PR(6,2)GOTO 2530,2550,2580
2530 PRINT "There is an enormous        barbecue here with a large  fire under it"
2540 RETURN
2550 PRINT "An awful smell fills your   nose"
2560 PR(6,2)=3
2570 RETURN
2580 PRINT "Everything is quit now.    Even the smell fades"
2590 PR(6,2)=1
2600 RETURN
2610 REM
2620 IBZ=0
2630 FOR I=1 TO IBMAX-1
2640 IF B(I)=IVWB THEN IBZ=I :: I=IBMAX-1
2650 NEXT I
2660 RETURN
2670 REM
2680 CRO=CRO+1
2690 IF IKM=D(CRO)THEN CRI=CRI+1
2700 IF CRO<8 THEN RETURN
2710 IF CRI=8 THEN 2770
2720 PRINT "Strange forces did something to you. It is dark"
2730 PRINT "For a moment you are        unconcious"
2740 CRO=1 :: CRI=1
2750 IKM=1
2760 RETURN
2770 PRINT "You hear a strange sound    like something being pushed away"
2780 PRINT "Now it has stopped"
2790 K(2,1)=3
2800 RETURN
2810 REM
2820 REM
2830 FOR I=1 TO 36
2840 K(I,1)=I+1 :: K(I,2)=I-1
2850 K(I,3)=I+4 :: K(I,4)=I-4
2860 NEXT I
2870 FOR I=0 TO 24 STEP 12
2880 FOR J=1 TO 9 STEP 4
2890 K(I+J+3,1)=0 :: K(I+J,2)=0
2900 NEXT J
2910 FOR J=1 TO 4
2920 K(I+J+8,3)=0 :: K(I+J,4)=0
2930 NEXT J
2940 NEXT I
2950 K(1,5)=16 :: K(7,5)=15
2960 K(32,6)=13 :: K(13,5)=32
2970 K(35,6)=18 :: K(18,5)=35
2980 FOR I=1 TO 15
2990 READ IKM :: READ IHD
3000 K(IKM,IHD)=0
3010 NEXT I
3020 REM
3030 IKM=36
3040 IBZ=1 :: IBMAX=1
3050 CKM=0
3060 CLL=0
3070 BLL=0
3080 CWD=0
3090 CRO=0 :: CRI=0
3100 REM
3110 FOR I=1 TO 15
3120 READ H\$(I)
3130 NEXT I
3140 IN=-1
3150 FOR I=1 TO 12
3160 READ T\$
3170 GOSUB 3520
3180 V\$(I)=TN\$
3190 NEXT I
3200 FOR I=1 TO 6
3210 READ T\$
3220 GOSUB 3520
3230 P\$(I)=TN\$
3240 NEXT I
3250 FOR I=1 TO 36
3260 READ T\$
3270 GOSUB 3520
3280 R\$(I)=TN\$
3290 NEXT I
3300 FOR I=1 TO 12
3310 READ VP(I)
3320 NEXT I
3330 FOR I=1 TO 6
3340 READ PR(I,1) :: PR(I,2)=1
3350 READ PR(I,3)
3360 NEXT I
3370 FOR I=1 TO 8
3380 READ D(I)
3390 NEXT I
3400 IN=0
3410 RETURN
3420 DATA 21,1,22,2,22,1,23,2,18,1,19,2,16,3,20,4,11,1,12,2,7,1,8,2,7,4,3,3,2,1
3430 DATA east,west,north,south,up,down,kill,help,take,drop,invent,bandage,lanternon,lanternoff,read
3440 DATA mboufso,xifbuqjmf,xbufstbdl,dpplcppl,mfbgmfu,cboebhft,txpse,dppljf,JU(t!cpez,hjboucpez,toblfcpez,efbe!ipvoe
3450 DATA J/U/,npotufs,toblf,ifmmipvoe,cbscfdvf,cpnc
3460 DATA sftfudbwf,udbwf,tfdsfudpssjeps,dpouspmsppn,pdbwf,jdbwf,tqbdfdbwf,cmbdlsppn,qdbwf,fdbwf,odbwf,fnquzoftt
3470 DATA tnbmmdbwf,spdlzdbwf,tnfmmzdbwf,esbhpodbwf,toblfdbwf,zfmmpxdbwf,tusfbncbol,tujolzqmbdf,sfedbwf,gjobmdbwf
3480 DATA dpmpsdbwf,jdfdbwf,pqfoqmbdf,xppet,xppet,xppet,xppet,xppet,xppet,xppet,xppet,xppet,xppet,xppet
3490 DATA 34,30,28,21,14,15,13,0,0,0,0,0
3500 DATA 34,2,16,15,17,4,29,2,8,1,25,1
3510 DATA 1,5,9,10,11,7,6,2
3520 REM
3530 TN\$=""
3540 FOR I1=1 TO LEN(T\$)
3550 C\$=SEG\$(T\$,I1,1)
3560 C\$=CHR\$(ASC(C\$)-1)
3570 TN\$=TN\$&C\$
3580 NEXT I1
3590 IF IN=0 THEN PRINT TN\$
3600 RETURN
```

#### Share this post

##### Share on other sites

Rain game! - PROGRAMME für den TI 99/4a und TI 99/4

Help... Dos not work!

```10 CALL CLEAR :: CALL SCREEN(11)
20 FAR(1)=2 :: FAR(2)=11 :: FAR(3)=16 :: FAR(4)=11 :: FAR(5)=11 :: DIM ABG(11)
30 REM SPRITES, INITIALIZE SIGN****************
40 S1\$="0103070D03070F0F1B070F1F070F3F7F0080C0E0C0E0F0C0E0F0E8F0F8FCF8FE"
50 CALL CHAR(88,S1\$):: CALL COLOR(8,13,16)
60 S3\$="010709030D110719230D71030D3147010080C0B0C0B080E09CC0B08CC2B08E80"
70 CALL CHAR(40,S3\$):: CALL COLOR(2,2,1):: CALL COLOR(2,2,16)
80 S2\$="010101010101010180808080808080800000000000000000"
90 CALL CHAR(128,S2\$):: CALL COLOR(13,2,16)
100 S4\$="FFFFFFFFFFFFFFFF" :: CALL CHAR(96,S4\$):: CALL COLOR(9,4,1)
110 S5\$="606060706864626161626468706060600606060E16264686864626160E060606" :: CALL CHAR(44,S5\$)
120 S6\$="002012080513077F07130508122000008082A488D0E4F0FFF0E4D088A4828000" :: CALL CHAR(92,S6\$)
130 S7\$="FFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" :: CALL CHAR(100,S7\$)
140 S8\$="0003073F7F7FFFFFFFFF7F1F0301000000C0F0F0F8FEFEFEFCF8FEFEDCC00000" :: CALL CHAR(104,S8\$)
150 S9\$="0000000000000000000004050607000004081020403008102040800000800000" :: CALL CHAR(108,S9\$)
160 S10\$="0141541410044555511404A4A0A8090904444141012928080044454511141400" :: CALL CHAR(112,S10\$)
170 S11\$="00FFFFFFFFFF04043F60FBFBFB7B3F0000FFFFFFFFFF2020E0BCBFBFBFBCE000" :: CALL CHAR(116,S11\$)
180 S12\$="00000000061F7FFF081C3C7EFEFFFFFF00000207CFDFFFFF00000008DCFFFFFF" :: CALL CHAR(120,S12\$):: CALL COLOR(12,16,8)
190 S13\$="0000000001038BFF080C1E1E9EBFBFFF0000090F1F3FFFFF00000000848CCEFF" :: CALL CHAR(124,S13\$)
200 S14\$="00000000000000FFFF007FF0FBFBF07F00000000000000FFFF00FE0F1F1F0FFE" :: CALL CHAR(132,S14\$)
210 S15\$="01042000684402010102446800244000C0460084808CAEC6C0A6908194044010" :: CALL CHAR(36,S15\$)
220 S16\$="000000000000000000010F3F3F7F7FFF00000000000000003FFFFFFFFFFFFFFF" :: CALL CHAR(136,S16\$)
230 S17\$="FF7F7F3F3F0F01000000000000000000FFFFFFFFFFFFFF3F0000000000000000" :: CALL CHAR(140,S17\$)
240 REM INTRODUCTION***********
250 DISPLAY AT(2,10):"RAIN GAME" :: DISPLAY AT(3,10):"=========" :: DISPLAY AT(1,10): "========="
260 DISPLAY AT(5,6):"VON R HEIGENMOSER"
270 DISPLAY AT(8,2):"tv" :: DISPLAY AT(9,2):"uw     =INTERRUPTER"
280 DISPLAY AT(11,2):"hj" :: DISPLAY AT(12,2):"ik"
290 DISPLAY AT(14,2):"WHITE   = LET THROUGH"
300 DISPLAY AT(16,2):"YELLOW  = INTERCEPT" :: DISPLAY AT(18,2):"DARK    = CAUTION!!"
310 DISPLAY AT(24,2):"PRESS BUTTON!"
320 CALL KEY(0,K,STA):: IF STA=0 THEN 320
330 REM LANDSCAPE, PUT SPRAY***********
340 CALL CLEAR :: CALL SCREEN(8):: FOR I=1 TO 4
350 DISPLAY AT(19,8*I-7):"xyz{";CHR\$(124);CHR\$(125);CHR\$(126);CHR\$(127):: NEXT I
360 CALL HCHAR(20,1,130,128)
370 CALL HCHAR(24,1,96,32)
380 FOR I=1 TO 11
390 DISPLAY AT(21,2*I)SIZE(2):"XZ" :: DISPLAY AT(22,2*I)SIZE(2):"Y["
400 DISPLAY AT(23,2*I)SIZE(2):CHR\$(128);CHR\$(129)
410 NEXT I
420 DISPLAY AT(20,26)SIZE(2):",." :: DISPLAY AT(21,26)SIZE(2):"-/" :: DISPLAY AT(22,26)SIZE(2):",." :: DISPLAY AT(23,26)SIZE(2):"-/"
430 CALL MAGNIFY(3) :: SP=6 :: FA=3 :: SCO1=0 :: SCO2=11 :: BONUS=200 :: SCO3=0 :: BO1=50
440 FOR I=1 TO 11 :: ABG(I)=O :: NEXT I
450 CALL SPRITE(#9,92,12,20,1,0,1)
480 CALL SPRITE(#1,100,5,137,217,0,0)
470 CALL SPRITE(#2,116,7,50,1,0,0)
480 CALL SPRITE(#7,136,5,129,205,0,0)
490 CALL SPRITE(#8,140,5,145,205,0,0)
500 DISPLAY AT(1,2):"tvtvtv  POINTS:" :: DISPLAY AT(2,2):"uwuwuw  FILLING:"
510 REM MAIN PROGRAM*********
520 FOR DUR=1 TO 4
530 CALL DELSPRITE(#3)
540 CALL JOYST(2,XPOS,YPOS):: CALL MOTION(#2,-YPOS*SP,XPOS*SP) :: CALL POSITION(#2,POSY,POSX) :: IF POSY>160 OR POSY<10 THEN 1080
550 DISPLAY AT(1,20):SCO3 :: DISPLAY AT(2,20):SCO1
560 IF SCO1=5 THEN 950
570 RO3=INT(RND*120+10)
580 CALL JOYST(2,XPOS,YPOS):: CALL MOTION(#2,-YPOS*SP,XPOS*SP):: CALL POSITION(#2,POSY,POSX):: IF POSY>160 OR POSY<10 THEN 1080
580 STO=INT(RND*160)+25
600 NEG=-2+INT(RND*5) :: IF NEG=O THEN NEG=3
610 REM CLOUD************
620 CALL SPRITE(#3,104,16,RO3,1,0,NEG*8)
630 CALL COINC(#3,RO3,STO,5,CO3) :: IF CO3=-1 THEN 670
640 CALL JOYST(2,XPOS,YPOS) :: CALL MOTION(#2,-YPOS*SP,XPOS*SP) :: CALL POSITION(#2,POSY,POSX) :: IF POSY>160 OR POSY<10 THEN 1080
650 GOTO 630
660 REM POSITION REACHED**********
670 CALL MOTION(#3,0,0):: FA=INT(RND*5)+1 :: CALL COLOR(#3,FAR(FA)) :: ON FA GOTO 690,790,870,790,790
680 REM BLACK**********
690 CALL JOYST(2,XPOS,YPOS) :: CALL MOTION(#2,-YPOS*SP,XPOS*SP) :: CALL POSITION(#2,POSY,POSX) :: IF POSY>160 OR POSY<10 THEN 1080
700 IF FLA>1 THEN FLA=0 :: GOTO 530
710 IF INT(RND*3)<>1 THEN 690 :: FLA=FLA+1
720 SSP=INT(RND*-100)+50
730 CALL SOUND(100,-6,0)
740 CALL SPRITE(#4,108,16,RO3,STO,90,SSP)
750 CALL COINC(#2,#4,20,CO24) :: IF CO24=-1 ·THEN 1080
760 CALL POSITION(#4,POSY,POSX):: IF POSY>150 THEN CALL DELSPRITE(#4):: GOTO 700
770 GOTO 750
780 REM GUL*************
790 CALL JOYST(2,XPOS,YPOS):: CALL MOTION(#2,-YPOS*SP,XPOS*SP)
800 CALL SOUND(200,1400,0,RO3*15,0,STO*10,0,-4,0)
810 CALL SPRITE(#5,112,14,RO3,STO,20,0)
820 CALL COINC(#2,#5,7,CO25):: IF CO25=-1 THEN CALL DELSPRITE(#5):: SCO1=SCO1+1 :: GOTO 1230
830 CALL JOYST(2,XPOS,YPOS):: CALL MOTION(#2,-YPOS*SP,XPOS*SP)
840 CALL POSITION(#5,POSY,POSX):: IF POSY>160 THEN 1160
850 CALL JOYST(2,XPOS,YPOS):: CALL MOTION(#2,-YPDS*SP,XPOS*SP):: GOTO 820
860 REM HVIT************
870 CALL JOYST(2,XPOS,YPOS) :: CALL MOTION(#2,-YPOS*SP,XPOS*SP) :: CALL POSITION(#2,POSY,POSX) :: IF POSY>160 OR POSY<10 THEN 1080
880 CALL SOUND(300,-1,0)
890 CALL SPRITE(#5,112,5,RO3,STO,20,0)
900 CALL COINC(#2,#5,10,CO25):: IF CO25=-1 THEN CALL DELSPRITE(#5):: GOTO 1150
910 CALL POSITION(#5,POSY,POSX) :: IF POSY>150 THEN CALL DELSPRITE(#5) :: GOTO 530
920 CALL JOYST(2,XPOS,YPOS) :: CALL MOTION(#2,-YPOS*SP,XPOS*SP) :: CALL POSITION(#2,POSY,POSX) :: IF POSY>160 OR POSY<10 THEN 1080
930 GOTO 900
940 REM OPEN CONTAINER***********
950 CALL MOTION(#7,-1,0) :: CALL MOTION(#8,1,0)
960 CALL COINC(#7,121,205,1,CO7) :: IF CO7=-1 THEN CALL MOTION(#7,0,0) :: CALL MOTION(#8,0,0) :: CALL LOCATE(#7,121,205):: CALL LOCATE(#8,153,205):·: GOTO 990
970 CALL SOUND(-50,1400,0)
980 GOTO 960
990 SP=1
1000 REM DOCKING***********
1010 CALL JOYST(2,XPOS,YPOS):: CALL MOTION(#2,-YPOS*SP,XPOS*SP)
1020 CALL COINC(ALL,COAL):: IF COAL=-1 THEN 1040
1030 GOTO 1010
1040 CALL MOTION(#2,0,0):: SP=6 :: CALL POSITION(#2,POSY,POSX):: IF POSY<>137 THEN CLO=1 :: GOTO 1080
1050 SCO3=SCO3+BO1 :: SCO1=0 :: IF SCO3>=BONUS THEN GOSUB 1370
1060 CALL LOCATE(#2,137,180):: GOSUB 1310 :: GOSUB 1250 :: GOTO 540
1070 REM SHOCKED**********
1080 SCO1=0 :: CALL DELSPRITE(#4):: CALL MOTION(#2,0,0):: CALL PATTERN(#2,36)
1090 FOR I=O TO 30 :: CALL SOUND(50,-6,I):: NEXT I
1100 DISPLAY AT(1,2*DUR)SIZE(2):"  " :: DISPLAV AT(2,2*DUR)SIZE(2):"  "
1110 CALL DELSPRITE(#2):: IF CLO=1 THEN CLO=O:: GOSUB 1250
1120 CALL SPRITE(#2,116,7,70,10,0,0)
1130 NEXT DUR
1140 GOTO 1590
1150 REM DIED TREE************
1160 CALL DELSPRITE(#5):: VERN=-INT(-(STO-8)/8):: IF VERN/2-INT(VERN/2)<>0 THEN VERN=VERN-1
1170 DISPLAY AT(21,VERN)SIZE(2):"(*" :: DISPLAY AT(22,VERN)SIZE(2):")+"
1180 IF ABG(VERN/2)=0 THEN SCO2=SCO2-1
1190 ABG(VERN/2)=1
1200 CALL SOUND(500,110,0)
1210 IF SCO2=0 THEN 1590 ELSE 530
1220 REM SOUND FOR CAUGHT************
1230 CALL SOUND(200,440,0) :: CALL SOUND(200,880,O) :: CALL SOUND(200,1760,0) :: GOTO 530
1240 REM CLOSE CONTAINER************
1250 CALL MOTION(#7,1,0):: CALL MOTION(#8,-1,0)
1260 CALL COINC(#7,130,205,1,CO7) :: IF CO7=-1 THEN CALL MOTION(#7,0,0) :: CALL MOTION(#8,0,0) :: CALL LOCATE(#8,145,205):: GOTO 1290
1270 CALL SOUND(-50,1600,0)
1280 GOTO 1260
1290 RETURN
1300 REM RENEW TREE*********
1310 CALL SOUND(200,440,0) :: CALL SOUND(200,88O,0) :: CALL SOUND(200,1760,0)
1320 FOR I=1 TO 11
1330 IF ABG(I)=1 THEN DISPLAY AT(21,2*I)SIZE(2):"XZ" :: DISPLAY AT(22,2*I)SIZE(2):"Y[" :: ABG(I)=O :: SCO2=SCO2+1 :: GOTO 1350
1340 NEXT I :: SCO3=SCO3+BO1
1350 RETURN
1360 REM BONUS***********
1370 DISPLAY AT(15,20):"BONUS" :: CALL SPRITE(#6,132,2,169,1,0,5)
1380 CALL COINC(#6,169,217,3,CO6):: IF CO6=-1 THEN CALL MOTION(#6,0,0):: GOTO 1410
1390 CALL SOUND(50,110,10)
1400 GOTO 1380
1410 CALL MOTION(#1,1,0)
1420 CALL COINC(#1,#6,8,CO16):: IF CO16=-1 THEN CALL MOTION(#1,0,0):: GOTO 1450
1430 CALL SOUND(50,-3,0)
1440 GOTO 1420
1450 CALL MOTION(#6,0,5):: CALL MOTION(#1,0,5)
1460 FOR I=1 TO 200 :: NEXT I
1470 CALL COINC(#6,169,217,3,CO6):: IF CO6=-1 THEN CALL MOTION(#6,0,0):: CALL MOTION(#1,0,0):: GOTO 1500
1480 CALL SOUND(50,140,10)
1490 GOTO 1470
1500 CALL MOTION(#1,-1,0)
1510 CALL COINC(#1,137,217,3,CO1):: IF CO1=-1 THEN 1540
1520 CALL SOUND(20,1000,0)
1530 GOTO 1510
1540 CALL MOTION(#1,0,0) :: CALL LOCATE(#1,137,217)
1550 DISPLAY AT(15,20):"     "
1560 BONUS=BONUS+4*BO1 :: BO1=BO1+20 :: CALL DELSPRITE(#6):: IF DUR<2 THEN SCO3=SCO3+100 :: RETURN
1570 DUR=DUR-1 :: DISPLAY AT(1,2*DUR)SIZE(2):"tv" :: DISPLAY AT(2,2*DUR)SIZE(2):"uw" :: RETURN
1580 REM END**********
1590 CALL CLEAR :: CALL SCREEN(15):: DISPLAY AT(12,4):"ONCE AGAIN? J OR N"
1600 HIGH=MAX(HIGH,SCO3):: DISPLAY AT(15,5):"HIGHSCORE:";HIGH
1610 CALL KEY(0,K,STA):: IF STA=0 THEN 1610
1620 IF K=106 THEN 340
1630 END ```

#### Share this post

##### Share on other sites

Found the original German version

(I remembered it well, played it several times back in those days)

```10 CALL CLEAR :: CALL SCREEN(11)
20 FAR(1)=2 :: FAR(2)=11 :: FAR(3)=16 :: FAR(4)=11 :: FAR(5)=11 :: DIM ABG(11)
30 ! ** SPRITES,ZEICHEN ***      ** INITIALISIEREN  ***
40 S1\$="0103070103070F0F1B070F1F070F3FFF0080C0E0C0E0F0C0E0F8E8F0F8FCF8FE"
50 CALL CHAR(88,S1\$) :: CALL COLOR(8,13,16)
60 S3\$="010701030D010719231D6103053943010080C0A0C0B080E09CC0B08CC2B08E80"
70 CALL CHAR(40,S3\$) :: CALL COLOR(2,2,1) :: CALL COLOR(2,2,16)
80 S2\$="010101010101010180808080808080800000000000000000"
90 CALL CHAR(128,S2\$) :: CALL COLOR(13,2,16)
100 S4\$="FFFFFFFFFFFFFFFF" :: CALL CHAR(96,S4\$) :: CALL COLOR(9,4,1)
110 S5\$="606060706864626161626468706060600606060E16264686864626160E060606" :: CALL CHAR(44,S5\$)
120 S6\$="004020100907070FFF070709102040008082848890E0E0F0FFE0E09088848280" :: CALL CHAR(92,S6\$)
130 S7\$="FFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" :: CALL CHAR(100,S7\$)
140 S8\$="0003073F7F7FFFFFFFFF7F1F0301000000C0F0F0F8FEFEFEFCF8FEFEDCC00000" :: CALL CHAR(104,S8\$)
150 S9\$="00000000000001000000040506070000040810204080F8102040800000800000" :: CALL CHAR(108,S9\$)
160 S10\$="0141541410044555511404A4A088090904444441012928080044454511141400" :: CALL CHAR(112,S10\$)
170 S11\$="00FFFFFFFFFF04041F7FF1FBFB7F3F0000FFFFFFFFFF2020A0FC7F7F7FFC8000" :: CALL CHAR(116,S11\$)
180 S12\$="00000000061F7FFF081C3C7EFEFFFFFF00000207CFDFFFFF00000008DCFFFFFF" :: CALL CHAR(120,S12\$) :: CALL COLOR(12,16,8)
190 S13\$="0000000001038BFF080C1E1E9EBFBFFF0000080C1F3FFFFF00000000848CCEFF" :: CALL CHAR(124,S13\$)
200 S14\$="00000000000000FFFF007FF0F8F8F07F00000000000000FFFF00FE0F1F1F0FFE" :: CALL CHAR(132,S14\$)
210 S15\$="01042000684402010102446800244000C0460084808CAEC6C0A6908194044010" :: CALL CHAR(36,S15\$)
220 S16\$="000000000000000000010F3F3F7F7FFF00000000000000003FFFFFFFFFFFFFFF" :: CALL CHAR(136,S16\$)
230 S17\$="FF7F7F3F3F0F01000000000000000000FFFFFFFFFFFFFF3F0000000000000000" :: CALL CHAR(140,S17\$)
240 !**** EINLEITUNG ****
250 DISPLAY AT(2,10):"RAIN GAME" :: DISPLAY AT(3,10):"=========" :: DISPLAY AT(1,10):"========="
260 DISPLAY AT(5,6):"VON R HEIGENMOSER"
270 DISPLAY AT(8,2):"tv" :: DISPLAY AT(9,2):"uw     =ABFAENGER"
280 DISPLAY AT(11,2):"hj" :: DISPLAY AT(12,2):"ik"
290 DISPLAY AT(14,2):"WEISS  =DURCHLASSEN"
300 DISPLAY AT(16,2):"GELB   =ABFANGEN" :: DISPLAY AT(18,2):"DUNKEL =VORSICHT!!"
310 DISPLAY AT(24,2):"TASTE DRUECKEN!"
320 CALL KEY(0,K,STA) :: IF STA=0 THEN 320
330 !*** LANDSCHAFT,   ***       *** SPRITES SETZEN***
340 CALL CLEAR :: CALL SCREEN(8) :: FOR I=1 TO 4
350 DISPLAY AT(19,8*I-7):"xyz{";CHR\$(124);CHR\$(125);CHR\$(126);CHR\$(127) :: NEXT I
360 CALL HCHAR(20,1,130,128)
370 CALL HCHAR(24,1,96,32)
380 FOR I=1 TO 11
390 DISPLAY AT(21,2*I) SIZE(2):"XZ" :: DISPLAY AT(22,2*I) SIZE(2):"Y["
400 DISPLAY AT(23,2*I) SIZE(2):CHR\$(128);CHR\$(129)
410 NEXT I
420 DISPLAY AT(20,26) SIZE(2):",." :: DISPLAY AT(21,26) SIZE(2):"-/" :: DISPLAY AT(22,26) SIZE(2):",." :: DISPLAY AT(23,26) SIZE(2):"-/"
430 CALL MAGNIFY(3) :: SP=6 :: FA=3 :: SCO1,SCO2,SCO3=0 :: BONUS=200 :: BO1=50
440 FOR I=1 TO 11 :: ABG(I)=0 :: NEXT I
450 CALL SPRITE(#9,92,12,20,1,0,1)
460 CALL SPRITE(#1,100,5,137,217,0,0)
470 CALL SPRITE(#2,116,7,50,1,0,0)
480 CALL SPRITE(#7,136,5,129,205,0,0)
490 CALL SPRITE(#8,140,5,145,205,0,0)
500 DISPLAY AT(1,2):"tvtvtv  PUNKTE:" :: DISPLAY AT(2,2):"uwuwuw  FUELLUNG:"
510 !**** HAUPTPROGRAMM ****
520 FOR DUR=1 TO 4
530 CALL DELSPRITE(#3)
540 CALL JOYST(2,XPOS,YPOS) :: CALL MOTION(#2,-YPOS*SP,XPOS*SP) :: CALL POSITION(#2,POSY,POSX) :: IF POSY>160 OR POSY<10 THEN 1080
550 DISPLAY AT(1,20):SCO3 :: DISPLAY AT(2,20):SCO1
560 IF SCO1=5 THEN 950
570 RO3=INT(RND*120+10)
580 CALL JOYST(2,XPOS,YPOS) :: CALL MOTION(#2,-YPOS*SP,XPOS*SP) :: CALL POSITION(#2,POSY,POSX) :: IF POSY>160 OR POSY<10 THEN 1080
590 STO=INT(RND*160)+25
600 NEG=-2+INT(RND*5) :: IF NEG=0 THEN NEG=3
610 !****** WOLKE ******
620 CALL SPRITE(#3,104,16,RO3,1,0,NEG*8)
630 CALL COINC(#3,RO3,STO,5,CO3) :: IF CO3=-1 THEN 670
640 CALL JOYST(2,XPOS,YPOS) :: CALL MOTION(#2,-YPOS*SP,XPOS*SP) :: CALL POSITION(#2,POSY,POSX) :: IF POSY>160 OR POSY<10 THEN 1080
650 GOTO 630
660 !***** STANDPUNKT *****      *****  ERREICHT  *****
670 CALL MOTION(#3,0,0) :: FA=INT(RND*5)+1 :: CALL COLOR(#3,FAR(FA)) :: ON FA GOTO 690,790,870,790,790
680 !**** SCHWARZ ****
690 CALL JOYST(2,XPOS,YPOS) :: CALL MOTION(#2,-YPOS*SP,XPOS*SP) :: CALL POSITION(#2,POSY,POSX) :: IF POSY>160 OR POSY<10 THEN 1080
700 IF FLA>1 THEN FLA=0 :: GOTO 530
710 IF INT(RND*3)<>1 THEN 890 :: FLA=FLA+1
720 SSP=INT(RND*-100)+50
730 CALL SOUND(100,-6,0)
740 CALL SPRITE(#4,108,16,RO3,STO,90,SSP)
750 CALL COINC(#2,#4,20,CO24) :: IF CO24=-1 THEN 1080
760 CALL POSITION(#4,POSY,POSX) :: IF POSY>150 THEN CALL DELSPRITE(#4) :: GOTO 700
770 GOTO 750
780 !****** GELB ******
790 CALL JOYST(2,XPOS,YPOS) :: CALL MOTION(#2,-YPOS*SP,XPOS*SP)
800 CALL SOUND(200,1400,0,RO3*15,0,STO*10,0,-4,0)
810 CALL SPRITE(#5,112,14,RO3,STO,20,0)
820 CALL COINC(#2,#5,7,CO25) :: IF CO25=-1 THEN CALL DELSPRITE(#5) :: SCO1=SCO1+1 :: GOTO 1230
830 CALL JOYST(2,XPOS,YPOS) :: CALL MOTION(#2,-YPOS*SP,XPOS*SP)
840 CALL POSITION(#5,POSY,POSX) :: IF POSY>160 THEN 1160
850 CALL JOYST(2,XPOS,YPOS) :: CALL MOTION(#2,-YPOS*SP,XPOS*SP) :: GOTO 820
860 !******* WEISS *******
870 CALL JOYST(2,XPOS,YPOS) :: CALL MOTION(#2,-YPOS*SP,XPOS*SP) :: CALL POSITION(#2,POSY,POSX) :: IF POSY>160 OR POSY<10 THEN 1080
880 CALL SOUND(300,-1,0)
890 CALL SPRITE(#5,112,5,RO3,STO,20,0)
900 CALL COINC(#2,#5,10,CO25) :: IF CO25=-1 THEN CALL DELSPRITE(#5) :: GOTO 1150
910 CALL POSITION(#5,POSY,POSX) :: IF POSY>150 THEN CALL DELSPRITE(#5) :: GOTO 530
920 CALL JOYST(2,XPOS,YPOS) :: CALL MOTION(#2,-YPOS*SP,XPOS*SP) :: CALL POSITION(#2,POSY,POSX) :: IF POSY>160 OR POSY<10 THEN 1080
930 GOTO 900
940 !***** BEHAELTER *****       *****  OEFFNEN  *****
950 CALL MOTION(#7,-1,0) :: CALL MOTION(#8,1,0)
960 CALL COINC(#7,121,205,1,CO7) :: IF CO7=-1 THEN CALL MOTION(#7,0,0) :: CALL MOTION(#8,0,0) :: CALL LOCATE(#7,121,205) :: CALL LOCATE(#8,153,205) :: GOTO 990
970 CALL SOUND(-50,1400,0)
980 GOTO 960
990 SP=1
1000 !***** ANDOCKEN *****
1010 CALL JOYST(2,XPOS,YPOS) :: CALL MOTION(#2,-YPOS*SP,XPOS*SP)
1020 CALL COINC(ALL,COAL) :: IF COAL=-1 THEN 1040
1030 GOTO 1010
1040 CALL MOTION(#2,0,0) :: SP=6 :: CALL POSITION(#2,POSY,POSX) :: IF POSY<>137 THEN CLO=1 :: GOTO 1080
1050 SCO3=SCO3+BO1 :: SCO1=0 :: IF SCO3>=BONUS THEN GOSUB 1370
1060 CALL LOCATE(#2,137,180) :: GOSUB 1310 :: GOSUB 1250 :: GOTO 540
1070 !**** ZERSCHELLT ****
1080 SCO1=0 :: CALL DELSPRITE(#4) :: CALL MOTION(#2,0,0) :: CALL PATTERN(#2,36)
1090 FOR I=0 TO 30 :: CALL SOUND(50,-6,I) :: NEXT I
1100 DISPLAY AT(1,2*DUR) SIZE(2):"  " :: DISPLAY AT(2,2*DUR) SIZE(2):"  "
1110 CALL DELSPRITE(#2) :: IF CLO=1 THEN CLO=0 :: GOSUB 1250
1120 CALL SPRITE(#2,116,7,70,10,0,0)
1130 NEXT DUR
1140 GOTO 1590
1150 !**BAUM ABGESTORBEN**
1160 CALL DELSPRITE(#5) :: VERN=-INT(-(STO-8)/8) :: IF VERN/2-INT(VERN/2)<>0 THEN VERN=VERN-1
1170 DISPLAY AT(21,VERN) SIZE(2):"(*" :: DISPLAY AT(22,VERN) SIZE(2):")+"
1180 IF ABG(VERN/2)=0 THEN SCO2=SCO2-1
1190 ABG(VERN/2)=1
1200 CALL SOUND(500,110,0)
1210 IF SCO2=0 THEN 1590 ELSE 530
1220 !**** SOUND FUER ****        **** AUFGEFANGEN ***
1230 CALL SOUND(200,440,0) :: CALL SOUND(200,880,0) :: CALL SOUND(200,1760,0) :: GOTO 530
1240 !**** BEHAELTER  ****        **** SCHLIESSEN ****
1250 CALL MOTION(#7,1,0) :: CALL MOTION(#8,-1,0)
1260 CALL COINC(#7,130,205,1,CO7) :: IF CO7=-1 THEN CALL MOTION(#7,0,0) :: CALL MOTION(#8,0,0) :: CALL LOCATE(#8,145,205) :: GOTO 1290
1270 CALL SOUND(-50,1600,0)
1280 GOTO 1260
1290 RETURN
1300 !*** BAUM ERNEUERN ***
1310 CALL SOUND(200,440,0) :: CALL SOUND(200,880,0) :: CALL SOUND(200,1760,0)
1320 FOR I=1 TO 11
1330 IF ABG(I)=1 THEN DISPLAY AT(21,2*I) SIZE(2):"XZ" :: DISPLAY AT(22,2*I) SIZE(2):"Y[" :: ABG(I)=0 :: SCO2=SCO2+1 :: GOTO 1350
1340 NEXT I :: SCO3=SCO3+BO1
1350 RETURN
1360 !****** BONUS ******
1370 DISPLAY AT(15,20):"BONUS" :: CALL SPRITE(#6,132,2,169,1,0,5)
1380 CALL COINC(#6,169,217,3,CO6) :: IF CO6=-1 THEN CALL MOTION(#6,0,0) :: GOTO 1410
1390 CALL SOUND(50,110,10)
1400 GOTO 1380
1410 CALL MOTION(#1,1,0)
1420 CALL COINC(#1,#6,8,CO16) :: IF CO16=-1 THEN CALL MOTION(#1,0,0) :: GOTO 1450
1430 CALL SOUND(50,-3,0)
1440 GOTO 1420
1450 CALL MOTION(#6,0,5) :: CALL MOTION(#1,0,5)
1460 FOR I=1 TO 200 :: NEXT I
1470 CALL COINC(#6,169,217,3,CO6) :: IF CO6=-1 THEN CALL MOTION(#6,0,0) :: CALL MOTION(#1,0,0) :: GOTO 1500
1480 CALL SOUND(50,140,10)
1490 GOTO 1470
1500 CALL MOTION(#1,-1,0)
1510 CALL COINC(#1,137,217,3,CO1) :: IF CO1=-1 THEN 1540
1520 CALL SOUND(50,1000,0)
1530 GOTO 1510
1540 CALL MOTION(#1,0,0) :: CALL LOCATE(#1,137,217)
1550 DISPLAY AT(15,20):"     "
1560 BONUS=BONUS+4*BO1 :: BO1=BO1+20 :: CALL DELSPRITE(#6) :: IF DUR<2 THEN SCO3=SCO3+100 :: RETURN
1570 DUR=DUR-1 :: DISPLAY AT(1,2*DUR) SIZE(2):"tv" :: DISPLAY AT(2,2*DUR) SIZE(2):"uw" :: RETURN
1580 !****** ENDE ******
1590 CALL CLEAR :: CALL SCREEN(15) :: DISPLAY AT(12,4):"NOCHMAL? J ODER N"
1600 HIGH=MAX(HIGH,SCO3) :: DISPLAY AT(15,5):"HIGHSCORE:";HIGH
1610 CALL KEY(0,K,STA) :: IF STA=0 THEN 1610
1620 IF K=106 THEN 340
1630 END
```

#### Share this post

##### Share on other sites

How do you play it? I found 3 bugs in my revamped and translated ver.

My last ver. is better then yours. Your dos not end, all trees die, but the game dos not end. Mine ends, but I still cant move the air ship!

One difference is this... In your you have:

```430 CALL MAGNIFY(3) :: SP=6 :: FA=3 :: SCO1,SCO2,SCO3=0 :: BONUS=200 :: BO1=50
```

In the book it is saying:

430 CALL MAGNIFY(3) :: SP=6 :: FA=3 :: SCO1=0 :: SCO2=11 :: BONUS=200 :: SCO3=0 :: BO1=50

```10 CALL CLEAR :: CALL SCREEN(11)
20 FAR(1)=2 :: FAR(2)=11 :: FAR(3)=16 :: FAR(4)=11 :: FAR(5)=11 :: DIM ABG(11)
30 REM SPRITES, INITIALIZE SIGN****************
40 S1\$="0103070D03070F0F1B070F1F070F3F7F0080C0E0C0E0F0C0E0F0E8F0F8FCF8FE"
50 CALL CHAR(88,S1\$):: CALL COLOR(8,13,16)
60 S3\$="010709030D110719230D71030D3147010080C0B0C0B080E09CC0B08CC2B08E80"
70 CALL CHAR(40,S3\$):: CALL COLOR(2,2,1):: CALL COLOR(2,2,16)
80 S2\$="010101010101010180808080808080800000000000000000"
90 CALL CHAR(128,S2\$):: CALL COLOR(13,2,16)
100 S4\$="FFFFFFFFFFFFFFFF" :: CALL CHAR(96,S4\$):: CALL COLOR(9,4,1)
110 S5\$="606060706864626161626468706060600606060E16264686864626160E060606" :: CALL CHAR(44,S5\$)
120 S6\$="002012080513077F07130508122000008082A488D0E4F0FFF0E4D088A4828000" :: CALL CHAR(92,S6\$)
130 S7\$="FFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" :: CALL CHAR(100,S7\$)
140 S8\$="0003073F7F7FFFFFFFFF7F1F0301000000C0F0F0F8FEFEFEFCF8FEFEDCC00000" :: CALL CHAR(104,S8\$)
150 S9\$="0000000000000000000004050607000004081020403008102040800000800000" :: CALL CHAR(108,S9\$)
160 S10\$="0141541410044555511404A4A0A8090904444141012928080044454511141400" :: CALL CHAR(112,S10\$)
170 S11\$="00FFFFFFFFFF04043F60FBFBFB7B3F0000FFFFFFFFFF2020E0BCBFBFBFBCE000" :: CALL CHAR(116,S11\$)
180 S12\$="00000000061F7FFF081C3C7EFEFFFFFF00000207CFDFFFFF00000008DCFFFFFF" :: CALL CHAR(120,S12\$):: CALL COLOR(12,16,8)
190 S13\$="0000000001038BFF080C1E1E9EBFBFFF0000090F1F3FFFFF00000000848CCEFF" :: CALL CHAR(124,S13\$)
200 S14\$="00000000000000FFFF007FF0FBFBF07F00000000000000FFFF00FE0F1F1F0FFE" :: CALL CHAR(132,S14\$)
210 S15\$="01042000684402010102446800244000C0460084808CAEC6C0A6908194044010" :: CALL CHAR(36,S15\$)
220 S16\$="000000000000000000010F3F3F7F7FFF00000000000000003FFFFFFFFFFFFFFF" :: CALL CHAR(136,S16\$)
230 S17\$="FF7F7F3F3F0F01000000000000000000FFFFFFFFFFFFFF3F0000000000000000" :: CALL CHAR(140,S17\$)
240 REM INTRODUCTION***********
250 DISPLAY AT(2,10):"RAIN GAME" :: DISPLAY AT(3,10):"=========" :: DISPLAY AT(1,10): "========="
260 DISPLAY AT(5,6):"VON R HEIGENMOSER"
270 DISPLAY AT(8,2):"tv" :: DISPLAY AT(9,2):"uw     =INTERRUPTER"
280 DISPLAY AT(11,2):"hj" :: DISPLAY AT(12,2):"ik"
290 DISPLAY AT(14,2):"WHITE   = LET THROUGH"
300 DISPLAY AT(16,2):"YELLOW  = INTERCEPT" :: DISPLAY AT(18,2):"DARK    = CAUTION!!"
310 DISPLAY AT(24,2):"PRESS BUTTON!"
320 CALL KEY(0,K,STA):: IF STA=0 THEN 320
330 REM LANDSCAPE, PUT SPRAY***********
340 CALL CLEAR :: CALL SCREEN(8):: FOR I=1 TO 4
350 DISPLAY AT(19,8*I-7):"xyz{";CHR\$(124);CHR\$(125);CHR\$(126);CHR\$(127):: NEXT I
360 CALL HCHAR(20,1,130,128)
370 CALL HCHAR(24,1,96,32)
380 FOR I=1 TO 11
390 DISPLAY AT(21,2*I)SIZE(2):"XZ" :: DISPLAY AT(22,2*I)SIZE(2):"Y["
400 DISPLAY AT(23,2*I)SIZE(2):CHR\$(128);CHR\$(129)
410 NEXT I
420 DISPLAY AT(20,26)SIZE(2):",." :: DISPLAY AT(21,26)SIZE(2):"-/" :: DISPLAY AT(22,26)SIZE(2):",." :: DISPLAY AT(23,26)SIZE(2):"-/"
430 CALL MAGNIFY(3) :: SP=6 :: FA=3 :: SCO1=0 :: SCO2=11 :: BONUS=200 :: SCO3=0 :: BO1=50
440 FOR I=1 TO 11 :: ABG(I)=0 :: NEXT I
450 CALL SPRITE(#9,92,12,20,1,0,1)
480 CALL SPRITE(#1,100,5,137,217,0,0)
470 CALL SPRITE(#2,116,7,50,1,0,0)
480 CALL SPRITE(#7,136,5,129,205,0,0)
490 CALL SPRITE(#8,140,5,145,205,0,0)
500 DISPLAY AT(1,2):"tvtvtv  POINTS:" :: DISPLAY AT(2,2):"uwuwuw  FILLING:"
510 REM MAIN PROGRAM*********
520 FOR DUR=1 TO 4
530 CALL DELSPRITE(#3)
540 CALL JOYST(2,XPOS,YPOS):: CALL MOTION(#2,-YPOS*SP,XPOS*SP) :: CALL POSITION(#2,POSY,POSX) :: IF POSY>160 OR POSY<10 THEN 1080
550 DISPLAY AT(1,20):SCO3 :: DISPLAY AT(2,20):SCO1
560 IF SCO1=5 THEN 950
570 RO3=INT(RND*120+10)
580 CALL JOYST(2,XPOS,YPOS):: CALL MOTION(#2,-YPOS*SP,XPOS*SP):: CALL POSITION(#2,POSY,POSX):: IF POSY>160 OR POSY<10 THEN 1080
580 STO=INT(RND*160)+25
600 NEG=-2+INT(RND*5) :: IF NEG=O THEN NEG=3
610 REM CLOUD************
620 CALL SPRITE(#3,104,16,RO3,1,0,NEG*8)
630 CALL COINC(#3,RO3,STO,5,CO3) :: IF CO3=-1 THEN 670
640 CALL JOYST(2,XPOS,YPOS) :: CALL MOTION(#2,-YPOS*SP,XPOS*SP) :: CALL POSITION(#2,POSY,POSX) :: IF POSY>160 OR POSY<10 THEN 1080
650 GOTO 630
660 REM POSITION REACHED**********
670 CALL MOTION(#3,0,0):: FA=INT(RND*5)+1 :: CALL COLOR(#3,FAR(FA)) :: ON FA GOTO 690,790,870,790,790
680 REM BLACK**********
690 CALL JOYST(2,XPOS,YPOS) :: CALL MOTION(#2,-YPOS*SP,XPOS*SP) :: CALL POSITION(#2,POSY,POSX) :: IF POSY>160 OR POSY<10 THEN 1080
700 IF FLA>1 THEN FLA=0 :: GOTO 530
710 IF INT(RND*3)<>1 THEN 690 :: FLA=FLA+1
720 SSP=INT(RND*-100)+50
730 CALL SOUND(100,-6,0)
740 CALL SPRITE(#4,108,16,RO3,STO,90,SSP)
750 CALL COINC(#2,#4,20,CO24) :: IF CO24=-1 ·THEN 1080
760 CALL POSITION(#4,POSY,POSX):: IF POSY>150 THEN CALL DELSPRITE(#4):: GOTO 700
770 GOTO 750
780 REM GUL*************
790 CALL JOYST(2,XPOS,YPOS):: CALL MOTION(#2,-YPOS*SP,XPOS*SP)
800 CALL SOUND(200,1400,0,RO3*15,0,STO*10,0,-4,0)
810 CALL SPRITE(#5,112,14,RO3,STO,20,0)
820 CALL COINC(#2,#5,7,CO25):: IF CO25=-1 THEN CALL DELSPRITE(#5):: SCO1=SCO1+1 :: GOTO 1230
830 CALL JOYST(2,XPOS,YPOS):: CALL MOTION(#2,-YPOS*SP,XPOS*SP)
840 CALL POSITION(#5,POSY,POSX):: IF POSY>160 THEN 1160
850 CALL JOYST(2,XPOS,YPOS):: CALL MOTION(#2,-YPDS*SP,XPOS*SP):: GOTO 820
860 REM HVIT************
870 CALL JOYST(2,XPOS,YPOS) :: CALL MOTION(#2,-YPOS*SP,XPOS*SP) :: CALL POSITION(#2,POSY,POSX) :: IF POSY>160 OR POSY<10 THEN 1080
880 CALL SOUND(300,-1,0)
890 CALL SPRITE(#5,112,5,RO3,STO,20,0)
900 CALL COINC(#2,#5,10,CO25):: IF CO25=-1 THEN CALL DELSPRITE(#5):: GOTO 1150
910 CALL POSITION(#5,POSY,POSX) :: IF POSY>150 THEN CALL DELSPRITE(#5) :: GOTO 530
920 CALL JOYST(2,XPOS,YPOS) :: CALL MOTION(#2,-YPOS*SP,XPOS*SP) :: CALL POSITION(#2,POSY,POSX) :: IF POSY>160 OR POSY<10 THEN 1080
930 GOTO 900
940 REM OPEN CONTAINER***********
950 CALL MOTION(#7,-1,0) :: CALL MOTION(#8,1,0)
960 CALL COINC(#7,121,205,1,CO7) :: IF CO7=-1 THEN CALL MOTION(#7,0,0) :: CALL MOTION(#8,0,0) :: CALL LOCATE(#7,121,205):: CALL LOCATE(#8,153,205):·: GOTO 990
970 CALL SOUND(-50,1400,0)
980 GOTO 960
990 SP=1
1000 REM DOCKING***********
1010 CALL JOYST(2,XPOS,YPOS):: CALL MOTION(#2,-YPOS*SP,XPOS*SP)
1020 CALL COINC(ALL,COAL):: IF COAL=-1 THEN 1040
1030 GOTO 1010
1040 CALL MOTION(#2,0,0):: SP=6 :: CALL POSITION(#2,POSY,POSX):: IF POSY<>137 THEN CLO=1 :: GOTO 1080
1050 SCO3=SCO3+BO1 :: SCO1=0 :: IF SCO3>=BONUS THEN GOSUB 1370
1060 CALL LOCATE(#2,137,180):: GOSUB 1310 :: GOSUB 1250 :: GOTO 540
1070 REM SHOCKED**********
1080 SCO1=0 :: CALL DELSPRITE(#4):: CALL MOTION(#2,0,0):: CALL PATTERN(#2,36)
1090 FOR I=0 TO 30 :: CALL SOUND(50,-6,I):: NEXT I
1100 DISPLAY AT(1,2*DUR)SIZE(2):"  " :: DISPLAV AT(2,2*DUR)SIZE(2):"  "
1110 CALL DELSPRITE(#2):: IF CLO=1 THEN CLO=O:: GOSUB 1250
1120 CALL SPRITE(#2,116,7,70,10,0,0)
1130 NEXT DUR
1140 GOTO 1590
1150 REM DIED TREE************
1160 CALL DELSPRITE(#5):: VERN=-INT(-(STO-8)/8):: IF VERN/2-INT(VERN/2)<>0 THEN VERN=VERN-1
1170 DISPLAY AT(21,VERN)SIZE(2):"(*" :: DISPLAY AT(22,VERN)SIZE(2):")+"
1180 IF ABG(VERN/2)=0 THEN SCO2=SCO2-1
1190 ABG(VERN/2)=1
1200 CALL SOUND(500,110,0)
1210 IF SCO2=0 THEN 1590 ELSE 530
1220 REM SOUND FOR CAUGHT************
1230 CALL SOUND(200,440,0) :: CALL SOUND(200,880,O) :: CALL SOUND(200,1760,0) :: GOTO 530
1240 REM CLOSE CONTAINER************
1250 CALL MOTION(#7,1,0):: CALL MOTION(#8,-1,0)
1260 CALL COINC(#7,130,205,1,CO7) :: IF CO7=-1 THEN CALL MOTION(#7,0,0) :: CALL MOTION(#8,0,0) :: CALL LOCATE(#8,145,205):: GOTO 1290
1270 CALL SOUND(-50,1600,0)
1280 GOTO 1260
1290 RETURN
1300 REM RENEW TREE*********
1310 CALL SOUND(200,440,0) :: CALL SOUND(200,88O,0) :: CALL SOUND(200,1760,0)
1320 FOR I=1 TO 11
1330 IF ABG(I)=1 THEN DISPLAY AT(21,2*I)SIZE(2):"XZ" :: DISPLAY AT(22,2*I)SIZE(2):"Y[" :: ABG(I)=0 :: SCO2=SCO2+1 :: GOTO 1350
1340 NEXT I :: SCO3=SCO3+BO1
1350 RETURN
1360 REM BONUS***********
1370 DISPLAY AT(15,20):"BONUS" :: CALL SPRITE(#6,132,2,169,1,0,5)
1380 CALL COINC(#6,169,217,3,CO6):: IF CO6=-1 THEN CALL MOTION(#6,0,0):: GOTO 1410
1390 CALL SOUND(50,110,10)
1400 GOTO 1380
1410 CALL MOTION(#1,1,0)
1420 CALL COINC(#1,#6,8,CO16):: IF CO16=-1 THEN CALL MOTION(#1,0,0):: GOTO 1450
1430 CALL SOUND(50,-3,0)
1440 GOTO 1420
1450 CALL MOTION(#6,0,5):: CALL MOTION(#1,0,5)
1460 FOR I=1 TO 200 :: NEXT I
1470 CALL COINC(#6,169,217,3,CO6):: IF CO6=-1 THEN CALL MOTION(#6,0,0):: CALL MOTION(#1,0,0):: GOTO 1500
1480 CALL SOUND(50,140,10)
1490 GOTO 1470
1500 CALL MOTION(#1,-1,0)
1510 CALL COINC(#1,137,217,3,CO1):: IF CO1=-1 THEN 1540
1520 CALL SOUND(20,1000,0)
1530 GOTO 1510
1540 CALL MOTION(#1,0,0) :: CALL LOCATE(#1,137,217)
1550 DISPLAY AT(15,20):"     "
1560 BONUS=BONUS+4*BO1 :: BO1=BO1+20 :: CALL DELSPRITE(#6):: IF DUR<2 THEN SCO3=SCO3+100 :: RETURN
1570 DUR=DUR-1 :: DISPLAY AT(1,2*DUR)SIZE(2):"tv" :: DISPLAY AT(2,2*DUR)SIZE(2):"uw" :: RETURN
1580 REM END**********
1590 CALL CLEAR :: CALL SCREEN(15):: DISPLAY AT(12,4):"ONCE AGAIN? J OR N"
1600 HIGH=MAX(HIGH,SCO3):: DISPLAY AT(15,5):"HIGHSCORE:";HIGH
1610 CALL KEY(0,K,STA):: IF STA=0 THEN 1610
1620 IF K=106 THEN 340
1630 END ```

Edited by oddemann
New ver.

#### Share this post

##### Share on other sites

Using joystick 2, you steer the catcher below the cloud, but you must avoid to catch the normal rain (blue). Also, a black cloud can hit you with a thunderbolt. When you have collected five acid rain showers (yellow cloud), you have to steer the catcher to the docking station, and touch it exactly at row 137 (see line 1040).

Edited by mizapf

#### Share this post

##### Share on other sites
1 hour ago, mizapf said:

Using joystick 2, you steer the catcher below the cloud, but you must avoid to catch the normal rain (blue). Also, a black cloud can hit you with a thunderbolt. When you have collected five acid rain showers (yellow cloud), you have to steer the catcher to the docking station, and touch it exactly at row 137 (see line 1040).

Thx... Mizapf!

Found a new bug... Maybe last...

CORRECT in line - 1100 DISPLAY AT(1,2*DUR)SIZE(2):" " :: DISPLAY AT(2,2*DUR)SIZE(2):" "

One more - 1310 CALL SOUND(200,440,0) :: CALL SOUND(200,800,0) :: CALL SOUND(200,1760,0)

NEW fix... 600 NEG=-2+INT(RND*5) :: IF NEG=0 THEN NEG=3

One more 1110 CALL DELSPRITE(#2):: IF CLO=1 THEN CLO=0:: GOSUB 1250

One more 1230 CALL SOUND(200,440,0) :: CALL SOUND(200,880,0) :: CALL SOUND(200,1760,0) :: GOTO 530

Edited by oddemann
Adding fix!

#### Share this post

##### Share on other sites

This little Extended Basic game is - in my view - an interesting sample of historic, political statement: The topic is "Waldsterben" ("dying of the forest") by acid rain, a hot topic in the German political discussions of the mid-80s and a motivator for the Green Party.

In the recent years, the topic has returned; but this time, the forests are not dying of acid rain, but of water deficiency.

(We Germans have some special affection to our forests ... ; nearly one third of the land area is covered by forests.)

#### Share this post

##### Share on other sites

Same book as above...

Game works (but the explanation is some what wanting), the Drummer is not all working, I will look into it (if not someone fix it before I get to it. More focused on trying to understand the game). Played the game, but not sure about the rules. Have won, but... luck I guess :p Nice layout and a cool game!

PS! Google Translate from German!

7.4 Awari (Ext. BASIC)

Awari is an ancient African game that is also called Kalaha is known.

There are only a few sand pits and a handful of stones to play with necessary. But we have a computer.

Here are the rules of the game for those who do not yet know Awari. The playing field:

6 5 4 3 2 1
3 3 3 3 3 3
Computer O                  O Player
3 3 3 3 3 3
1 2 3 4 5 6

The bottom 6 pits are yours, the top 6 are your opponent's (in this case the computer). In the right pit will be yours Points, in the left the opponent's are counted.

In each of the pits, with the exception of the counting pits, there are 3 stones. A player starts by taking all stones from one of his pits and Distribute them counterclockwise to the following pits (in every 1 Stone). If his last stone hits his counting pit, then he is still allowed once.

If the last stone hits an empty pit, then he may this and all of them Place stones opposite in his counting pit (the computer does it automatically). Under certain circumstances, of course, he also lays his stones into the pits of his opponent.

The game is over when the pits on one side are empty. Then will the stones in the counting pits are counted and the player with the highest Number won.

Play it once. Awari is demanding and fun. I wish you a full pit.

If the program is too long for you, leave lines 40 - 200 and lines 220, 230 away. In these lines a drummer is defined running across the screen.

Here is the Code...

```10 CALL CLEAR
20 CALL SCREEN(4):: DISPLAY AT(8,8):"T I   A W A R I"
30 DISPLAY AT(12,7):"By R Heisenmoser"
40 S1\$="000000000000000000000000000000001C3E7A7F7A3C1E0C0C1E3F3F3F3F3F3F"
50 S2\$="000000000001020C1C3870E0F030080400006060800000000000000000000000"
60 S3\$="0000000000000000000101030F0F03013F3F3F3F7F7F77E3E3C1C180800080C0"
70 S4\$="020101DEDEDE0080C0C0C0ECFC783020008080E0E0E000000000000000000000"
80 S5\$="000000000000000000000000000000003F3F3F3F3F3F3B3B3371716161E1F1F1"
90 S6\$="0000000000000000010F38FBFF0000000000000000000060E00000C0C0000000"
100 S7\$="000000DEDEDE0080808080808080C0E0000000E0E0E000000000000000000000"
110 CALL CHAR(36,S1\$) :: CALL CHAR(40,S2\$) :: CALL CHAR(44,S3\$) :: CALL CHAR(48,S4\$) :: CALL CHAR(52,S5\$)
120 CALL CHAR(56,S6\$):: CALL CHAR(60,S7\$)
130 DISPLAY AT(20,7):"PRESS BUTTON !"
140 CALL SPRITE(#1,36,5,140,1,0,5):: CALL SPRITE(#2,40,5,140,18,0,5)
150 CALL SPRITE(#3,44,5,156,3,0,S):: CALL SPRITE(#4,48,5,156,19,0,5)
160 CALL MAGNIFY(3)
170 CALL PATTERN(#2,56):: CALL PATTERN(#3,52):: CALL PATTERN(#4,60)
180 CALL SOUND(100,-7,10)
190 CALL PATTERN(#2,40):: CALL PATTERN(#3,44):: CALL PATTERN(#4,48)
200 FOR DELAY=1 TO 40 :: NEXT DELAY
210 CALL KEY(S,KE,STA):: IF STA=0 THEN 170
220 CALL DELSPRITE(#1):: CALL DELSPRITE(#2)::CALL DELSPRITE(#3):: CALL DELSPRITE(#4)
230 CALL CHARSET
240 DIM S\$(13)
250 CALL COLOR(9,7,16):: CALL COLOR(10,7,16)::CALL COLOR(11,7,16)
260 CALL SCREEN(16)
270 S\$(1)="kgggggggggggggggggggggggggl" :: S\$(2)="ggggocchcchcchcchcchcc`gggg"
280 S\$(3)="ggggf  j  j  j  j  j  dgggg" :: S\$(4)="ggggaeeieeieeieeieeieebgggg"
290 S\$(5)="gggggg6gg5gg4gg3gg2gg1ggggg" :: S\$(6)="occc`gggggggggggggggggoccc`"
300 S\$(7)="f   dggggTIggAWARIggggf   d" :: S\$(8)="aeeebgggggggggggggggggaeeeb"
310 S\$(13)="mgggggggggggggggggggggggggn"
320 S\$(9)="gggggg1gg2gg3gg4gg5gg6ggggg"
330 S\$(10)=S\$(2) :: S\$(11)=S\$(3) :: S\$(12)=S\$(4)
340 CALL CLEAR
350 CALL CHAR(107,"071F3F7F7FFFFFFF") :: CALL CHAR(108,"E0F8FCFEFEFFFFFF") :: CALL CHAR(109,"FFFFFF7F7F3F1F07")
360 CALL CHAR(110,"FFFFFFFEFEFCF8E0") :: CALL CHAR(111,"FFFFFEFCF8F8F8F8") :: CALL CHAR(96,"FFFF7F3F1F1F1F1F")
370 CALL CHAR(97,"F8F8F8F8FCFEFFFF") :: CALL CHAR(98,"1F1F1F1F3F7FFFFF") :: CALL CHAR(99,"FFFF")
375 CALL CHAR(100,"1F1F1F1F1F1F1F1F")
380 CALL CHAR(101,"000000000000FFFF") :: CALL CHAR(102,"F8F8F8F8F8F8F8F8") :: CALL CHAR(103,"FFFFFFFFFFFFFFFF")
390 CALL CHAR(104,"FFFF7E3C18181818") :: CALL CHAR(105,"181818183C7EFFFF") :: CALL CHAR(106,"1818181818181818")
400 FOR I=1 TO 13 :: DISPLAY AT(5+I,1):S\$(I)::NEXT I
410 DISPLAY AT(1,6):"COMPUTER" :: DISPLAY AT(1,20):"YOU"
420 DATA 0
430 DIM B(13),G(13),F(50) :: READ N :: COM=0 ::DU=0
440 E=0 :: DISPLAY AT(3,8):COM :: DISPLAY AT(3,19):DU
450 FOR I=0 TO 12 :: B(I)=3 :: NEXT I
460 C=0 :: F(N)=0 :: B(13)=0 :: B(6)=0
470 GOSUB 750
480 IF Z1=1 THEN Z1=0 :: GOTO 530
490 DISPLAY AT(21,1):"YOUR TRAIN" :: GOSUB 620
500 IF E=0 THEN 570
510 IF M=H THEN GOSUB 610
520 IF E=0 THEN 570
530 DISPLAY AT(23,1):"MY TRAIN IS" :: SS=15 :: GOSUB 920
540 IF E=0 THEN 570
550 IF M=H THEN DISPLAY AT(23,16):"," :: SS=17:: GOSUB 920
560 IF E>0 THEN 470
570 DISPLAY AT(21,1)SIZE(80)BEEP:"GAME IS OVER"
580 D=B(6)-B(13) :: IF D<0 THEN DISPLAY AT(23,1):"I WIN WITH";-D;"POINTS" :: COM=COM-D :: GOTO 1110
590 N=N+1 :: IF D=0 THEN DISPLAY AT(23,1):"DRAW" :: GOTO 1110
600 DISPLAY AT(23,1):"YOU WIN WITH";D;"POINTS" :: DU=DU+D :: GOTO 1110
610 DISPLAY AT(21,1):"ONCE AGAIN"
620 ACCEPT AT(21,15)VALIDATE(DIGIT)BEEP SIZE(10):M::IF M<7 THEN IF M>0 THEN M=M-1::CALL HCHAR(24,1,32,20)::GOTO 640
630 DISPLAY AT(24,1):"FORBIDDEN TRAIN" :: GOTO 610
640 IF B(M)=0 THEN 630
650 H=6 :: GOSUB 670
660 GOTO 750
670 K=M :: GOSUB 860
680 E=0 :: IF K>6 THEN K=K-7
690 C=C+1 :: IF C<9 THEN F(N)=F(N)*6+K
700 FOR I=0 TO 5 :: IF B(I)<>0 THEN 730
710 NEXT I
720 RETURN
730 FOR I=7 TO 12 :: IF B(I)<>0 THEN E=1 :: RETURN
740 NEXT I :: RETURN
750 REM
760 CALL COLOR(3,13,16,4,13,16)
770 Z=8 :: DIS=3 :: FOR I=12 TO 7 STEP -1 :: GOSUB 840
780 NEXT I
790 DISPLAY AT(12,24)SIZE(3):B(6)
800 DISPLAY AT(12,2)SIZE(3):B(13)
810 Z=16 :: DIS=3 :: FOR I=0 TO 5 :: GOSUB 840
820 NEXT I
830 RETURN
840 REM
850 DISPLAY AT(Z,3+DIS)SIZE(2):B(I):: DIS=DIS+3 :: RETURN
860 P=B(M):: B(M)=0
870 FOR P=P TO 1 STEP -1 :: M=M+1 :: IF M>13 THEN M=M-14
880 B(M)=B(M)+1 :: NEXT P
890 IF B(M)=1 THEN IF M<>6 THEN IF M<>13 THEN IF B(12-M)<>0 THEN 910
900 RETURN
910 B(H)=B(H)+B(12-M)+1 :: B(M)=0 :: B(12-M)=0 :: RETURN
920 D=-99 :: H=13
930 FOR I=0 TO 13 :: G(I)=B(I):: NEXT I
940 FOR J=7 TO 12 :: IF B(J)=0 THEN 1080
950 GG=0 :: M=J :: GOSUB 860
960 FOR I=0 TO 5 :: IF B(I)=0 THEN 1010
970 L=B(I)+I :: R=0
980 IF L>13 THEN L=L-14 :: R=1 :: GOTO 980
990 IF B(L)=0 THEN IF L<>16 THEN IF L<>13 THEN R=B(12-L)+R
1000 IF R>Q THEN Q=R
1010 NEXT I
1020 Q=B(13)-B(6)-Q :: IF C>8 THEN 1060
1030 K=J :: IF K>6 THEN K=K-7
1040 FOR I=0 TO N-1 :: IF F(N)*6+K=INT(F(I)/6^(7-C)+.1) THEN Q=Q-2
1050 NEXT I
1060 FOR I=0 TO 13 :: B(I)=G(I):: NEXT I
1070 IF Q>=D THEN A=J :: D=Q
1080 NEXT J
1090 M=A :: DISPLAY AT(23,SS)SIZE(10)BEEP:CHR\$(42+M):: GOTO 670
1100 FOR I=0 TO N-1 :: PRINT B(I):: NEXT I
1110 IF ZAEHLER=0 THEN ZAEHLER=1 ELSE ZAEHLER=0
1120 Z1=ZAEHLER
1130 CALL KEY(5,RET,STATUS):: IF STATUS<>0 THEN CALL HCHAR(21,1,32,120):: GOTO 440
1140 DISPLAY AT(24,1):"PRESS BUTTON !" :: GOTO 1130```

Edited by oddemann

#### Share this post

##### Share on other sites

Same book again... Think it is clean ("no bugs")
Improvements... Make it slower and then faster and faster as leveling up. Some screen distortion, I think. And not so accurate (hitting and being hit)

7.3 Space Krieg (Ext. BASIC)

This game is like so many games in space. You are in command of a spaceship (of course only with the joystick). An enemy spaceship that changes position from time to time will make your life difficult by shooting at you. Your goal should be to avoid getting hit and to hit the opponent often. That earns points.

Collisions with the meteorite (monster) also caused by the Space buzzes and the opponent's spaceship is to be avoided, as this inevitably leads to the loss of your own ship.

From 200 points the opponent's shape changes.

If the meteorite hits 300 points or more, it becomes a monster. For a certain number of points you will receive a brand new spaceship as a .Bonus.

```10 A=30 :: B=-20
20 CALL CLEAR
30 REM CHARACTER DEFINITION*************
40 S3\$="01042000684402010102446800244000C0460084808CAEC6C0A6908194044010"
50 S4\$="000000070F0F0F1F3F3F7F1F1D111000000040F0F0FCFCFEFEFFFFFCFCF07000"
60 S5\$="0303070E0C0CFEFEFEFE0C0C0E070303F8F8F8787C7C3F1F1F3F7C7C78F8F8F8"
70 S6\$="0000000000007FFFFF7F0000000000000000183870F0F6FEFEF6F07038180000"
80 S7\$="07070F19313F3F7CF8C8C4E270301800E0E0F0988CFCFC3E1F1323470E0C1800"
90 S2\$="0000FF00000000000000000000FF00000000E000000000000000000000E00000"
100 S1\$="0007070F1F1FD1FBFBDB1F1F0F0707000000FC0080E07E7F7F7EE08000FC0000"
110 S8\$="000000FF00000FFFFF0F0000FF0000001C3C7CFC7CFDEFCFCFEFFD7CFC7C3C1C"
120 S9\$="000000000020518B9E2F43448B0C00000000000000048AD169F4C22211300000"
130 CALL CHAR(60,S3\$) :: CALL CHAR(104,S8\$) :: CALL CHAR(100,S4\$) :: CALL CHAR(108,S5\$) :: CALL CHAR(112,S6\$) :: CALL CHAR(116,S7\$)
140 CALL CHAR(120,S9\$)
150 CALL CHAR(96,S2\$)
160 CALL CHAR(92,S1\$)
170 CALL SPRITE(#4,100,2,170,25,10,-25)
190 CALL COLOR(Z,11,1)
190 CALL MAGNIFY(3)
200 REM INTRODUCTION**********
210 CALL CLEAR :: CALL SCREEN(10)
220 DISPLAY AT(1,6):"*****************" :: DISPLAY AT(2,6):"*TI SPACE SATTLE*" :: DISPLAY AT(3,6):"*****************"
230 DISPLAY AT(4,7):"BY R.HEIGENMOSER"
240 DISPLAY AT(6,2):"SCORE:"
250 DISPLAY AT(8,2):"hj" :: DISPLAY AT(9,2):"ik       100 POINTS"
260 DISPLAY AT(11,2):"ln" :: DISPLAY AT(12,2):"mo       150 POINTS"
270 DISPLAY AT(14,2):"df" :: DISPLAY AT(15,2):"es        10 POINTS"
280 DISPLAY AT(17,2):"tv" :: DISPLAY AT(18,2):"uw        50 POINTS"
290 DISPLAY AT(20,2):"xz" :: DISPLAY AT(21,2):"y{       100 POINTS"
300 DISPLAY AT(24,2):"PRESS BUTTON" :: CALL KEY(0,KEY,STA):: IF STA=0 THEN 300
310 CALL CHAR(92,S1\$)
320 REM CREATE ENVIRONMENT************
330 CALL SCREEN(6) :: CALL CLEAR :: DISPLAY AT(1,7):"SCORE:" :: DISPLAY AT(1,14):SCORE
340 FOR I=1 TO 30 :: DISPLAY AT(RND*24+1,RND*28+1)SIZE(1):"." :: NEXT I
350 HIGH=500 :: PA=104 :: PA1=96 :: CO1=11 :: CO2=15 :: SC1=100 :: SC2=10
360 CALL PATTERN(#4,100):: CALL COLOR(#4,2)
370 REM MAIN PROGRAM********
380 DISPLAY AT(23,1):"\^\^\^\^" :: DISPLAY AT(24,1):"]_]_]_]_" :: FOR K=0 TO 3
390 DISPLAY AT(23,2*K+1)SIZE(2):"  " :: DISPLAY AT(24,2*K+1)SIZE(2):"  "
400 ZAE=0 :: A=-30+INT(RND*60):: B=-20+INT(RND*40):: CALL SPRITE(#1,92,16,70,30,0,0)
410 CALL SPRITE(#8,PA,CO1,1,230)
420 CALL JOYST(1,XPOS,YPOS)
430 CALL MOTION(#1,-YPOS*15,XPOS*10)
440 REM MOVEMENT ENEMY********
450 CALL MOTION(#8,A,B)
460 REM SHOT INQUIRY*********
470 CALL KEY(1,TAS,STATUS):: IF TAS=18 THEN 480 ELSE 540
480 REM SHOT********
490 CALL SOUND(150,-7,0)
500 CALL POSITION(#1,X,Y):: CALL SPRITE(#2,96,2,X,Y,0,127)
510 CALL POSITION(#2,X1,X2)
520 IF X2<200 THEN 530 ELSE CALL DELSPRITE(#2) :: GOTO 540
530 CALL COINC(#2,#8,25,CO):: CALL COINC(#2,#4,20,C24):: IF CO=0 AND C24=0 THEN 510 ELSE 770
540 CALL JOYST(1,XPOS,YPOS):: CALL MOTION(#1,-YPOS*15,XPOS*10)
550 REM MOVEMENT METEORITE*******
560 CALL MOTION(#4,-30+INT(RND*60),-20+INT(RND*40))
570 REM COLLISION SCHIFF-GEGNER?*************
580 CALL COINC(#1,#8,20,C18):: IF C18=-1 THEN 730
590 REM COLL.SCHIFF-METE.?*********
600 CALL COINC(#1,#4,20,C14):: IF C14=-1 THEN 730
610 A=0 :: B=0
620 REM MOVING ENEMIES********
630 IF ZAE=2 THEN A=-50+INT(RND*100) :: B=-40+INT(RND*80) :: ZAE=0 :: GOTO 420
640 CALL JOYST(1,XPOS,YPOS):: CALL MOTION(#1,-YPOS*15,XPOS*10)
650 IF INT(RND*2)=1 THEN 670 ELSE 420
660 REM SHOT ENEMY******
670 CALL POSITION(#8,X8,Y8):: CALL SPRITE(#9,PA1,CO2,X8,Y8,0,-127)
680 CALL SOUND(150,-5,0)
690 CALL POSITION(#9,X9,Y9):: IF Y9>55 THEN 700 ELSE CALL DELSPRITE(#9):: ZAE=ZAE+1 :: GOTO 420
700 CALL COINC(#1,#9,25,CO):: IF CO=-1 THEN 730
710 CALL JOYST(1,XPOS,YPOS):: CALL MOTION(#1,-YPOS*15,XPOS*10):: GOTO 690
720 REM SHIP MEET*************
730 CALL DELSPRITE(#9):: CALL PATTERN(#1,60) :: IF C18=0 THEN 740 ELSE CALL PATTERN(#8,60)
740 CALL MOTION(#1,0,0):: CALL MOTION(#8,0,0) :: FOR I=0 TO 30 :: CALL SOUND(50,-6,I):: NEXT I
750 NEXT K :: GOTO 900
760 REM ENEMY MEET*******
770 CALL DELSPRITE(#2):: IF C24=-1 THEN 830 ELSE CALL PATTERN(#8,60)
780 CALL MOTION(#1,0,0):: CALL MOTION(#8,0,0) :: FOR I=0 TO 30 :: CALL SOUND(100,-7,I):: NEXT I :: SCORE=SCORE+SC1
790 IF SCORE>=HIGH THEN GOSUB 970
800 DISPLAY AT(1,14):SCORE :: IF SCORE<200 THEN PA=104 ELSE PA=108 :: PA1=112 :: CO1=10 :: CO2=7 :: SC1=150
810 GOTO 400
820 REM METEORITE MEET*********
830 CALL PATTERN(#4,60):: FOR I=0 TO 30 :: CALL SOUND(50,-3,I) :: NEXT I :: SCORE =SCORE+SC2 :: CALL PATTERN(#4,100) :: DISPLAY AT(1,14):SCORE
840 IF SCORE>=HIGH THEN GOSUB 970
850 IF SCORE>600 AND SC2=50 THEN CALL PATTERN(#4,120):: SC2=100 :: CALL COLOR(#4,120):: GOTO 420
860 IF SCORE>300 THEN CALL PATTERN(#4,116):: SC2=50 :: CALL COLOR(#4,8)
870 GOTO 420
880 GOTO 420
890 REM END*******
900 CALL CLEAR :: CALL SCREEN(11)
910 DISPLAY AT(10,8):"NOCHMAL J ODER N"
920 HSC=MAX(HSC,SCORE):: DISPLAY AT(15,6):"HIGHSCORE:";HSC :: SCORE=0
930 CALL KEY(0,KEY,STA):: IF STA=0 THEN 930
940 IF KEY=106 THEN 330 ELSE END
950 END
960 REM BONUS*********
970 DISPLAY AT(23,2*K+1)SIZE(2):"\^" DISPLAY AT(24,2*K+1)SIZE(2):"]_" :: K=K-1 :: HIGH=HIGH+2000 :: RETURN```

#### Share this post

##### Share on other sites

Holt's on line 600...

How Graph Works

Line(s)

100 DIMension arrays.

110-120 Clear the screen and display message.

130-140 Set up character patterns. BL\$ is used to blank out the characters used by the program. A\$, B\$, C\$, and D\$ are used to insert the X and Y axes in the display area.

150 Load four-digit bit strings into BITS\$.

160-170 Blank out the ASCII characters used in the display area.

180-230 Insert the X and Y axis lines in the display area.

240 Display the X and Y axis values.

250-320 Load the A array with the ASCII character codes in the display area. This is used later to determine which ASCII character code to change.

330 Erase STAND BY message.

340-380 Display the 64 characters on the screen 8 characters at a time. This builds the 8 x 8 display area.

390-400 Initiate the routine to plot the points for the positive values of X.

410-420 Initiate the routine to plot the points for the negative values of X.

430-450 End of program.

460 This is the equation which controls where the points are plotted on the graph. Figure 2-9 shows possible alternatives.

470-490 Determine the actual location of the point in the 64 x 64 pbcel matrix. The program plots both positive and negative values, but negatives in the actual matrix aren't possible, hence the +32.

500-520 Determine the location of the pixel in the 8 x 8 character matrix. This must be done since the pixel cannot be accessed directly.

530 Get the hex pattern of the character that contains the pixel. The A array contains the ASCII codes of the characters used. The pattern is placed in W\$.

540-560 Determine which byte in the pattern contains the pixel.

570-620 Convert the one-byte hex pattern which contains the pixel into an eight-digit bit pattern (for example, 00100110).

630-660 CI contains the column position of the pixel within the 8x8 character grid. If the bit in this position is not on, it is turned on. If it is on, it stays as is. 670-690 Convert the bit pattern, with the updated pixel, back into a hex pattern.

700-730 Combine the new one-byte hex pattern with the other seven bytes in the pattern.

740 Change the pattern of the ASCII character code which effectively plots the point on the screen.

750 Return from plot subroutine.

760-770 Hex pattern binary equivalents.

Program 2-7. Graph

```100 DIM A(8,8),BITS\$(15)
110 CALL CLEAR
120 DISPLAY AT(4,6):"PLEASE STAND BY"
130 BL\$="0000000000000000" :: HEX\$="01234567O9ABCDEF"
140 A\$="0101010101010101" :: B\$="8080808080808080" :: C\$="00000000000000FF" :: D\$= "FF0000000000000000"
150 FOR L=0 TO 15 :: READ BITS\$(L) :: NEXT L
160 FOR L=33 TO 44 :: CALL CHAR(L,BL\$) :: NEXT L
170 FOR L=91 TO 143 :: CALL CHAR(L,BL\$) :: NEXT L
180 CALL CHAR(36,A\$,44,A\$,98,A\$,122,A\$,130,A\$,138,A\$)
190 CALL CHAR(37,B\$,91,B\$,99,B\$,123,B\$,131,B\$,139,B\$)
200 CALL CHAR(103,C\$,104,C\$,105,C\$,108,C\$,109,C\$,110,C\$)
210 CALL CHAR(111,D\$,112,D\$,113,D\$,116,D\$,117,D\$,118,D\$)
220 CALL CHAR(106,"01010101010101FF") :: CALL CHAR(107,"80808080808080FF")
230 CALL CHAR(114,"FF01010101010101") :: CALL CHAR(115,"FF80808080808080")
240 DISPLAY AT(6,13):"32" :: DISPLAY AT(11,19 ):"32" :: DISPLAY AT(11,7):"-32"; :: DISPLAY AT(17,12):"-32"
250 X=33
260 FOR L=1 TO 8
270 FOR L2=1 TO 8
280 IF X=45 THEN X=91
290 A(L,L2)=X
300 X=X+1
310 NEXT L2
320 NEXT L
330 DISPLAY AT(4,1):" "
340 FOR L=1 TO 8
350 L\$=""
360 FOR X=1 TO 8 :: L\$=L\$&CHR\$(A(L,X)) :: NEXT X
370 DISPLAY AT(7+L,10):L\$;
380 NEXT L
390 FOR X=0 TO 32 STEP .3
400 GOSUB 460 :: NEXT X
410 FOR X=0 TO -32 STEP -.3
420 GOSUB 460 :: NEXT X
430 DISPLAY AT(22,8):"PRESS ANY KEY"
440 CALL KEY(3,K,S):: IF S=0 THEN 440
450 CALL CLEAR :: STOP
460 Y=X
470 XX=INT(X+32) :: YY=INT(Y+32)
480 IF XX>64 OR XX<=0 THEN 750
490 IF YY>64 OR YY<=0 THEN 750
500 R=64-YY+1
510 CC=INT((XX-1)/8)+1
520 RR=INT((R-1)/8)+1
530 CALL CHARPAT(A(RR,CC),W\$)
540 C1=XX-((CC-1)*8)
550 R1=INT((64-YY)-((RR-1)*8)+1)
560 BYTE\$=SEG\$(W\$,R1*2-1,2)
570 EXPAND\$=""
580 FOR L3=1 TO 2
590 H0LD\$=SEG\$(BYTE\$,L3,1)
600 IF HOLD\$>"9" THEN POINT=ASC(HOLD\$)-55 ELSE POINT=VAL(HOLD\$)
610 EXPAND\$=EXPAND\$&BITS\$(POINT)
620 NEXT L3
630 NEWPAT\$=""
640 FOR L2=1 TO 8
650 IF C1<>L2 THEN NEWPAT\$=NEWPAT\$&SEG\$(EXPAND\$,L2,1) ELSE NEWPAT\$=NEWPAT\$&"1"
660 NEXT L2
670 HIGH\$=SEG\$(HEX\$,8*VAL(SEG\$(NEWPAT\$,1,1))+4*VAL(SEG\$(NEWPAT\$,2,1))+2*VAL(SEG\$(NEWPAT\$,3,1))+VAL(SEG\$(NEWPAT\$,4,1))+1,1)
680 LOW\$=SEG\$(HEX\$,8*VAL(SEG\$(NEWPAT\$,5,1))+4*VAL(SEG\$(NEWPAT\$,6,1))+2*VAL(SEG\$(NEWPAT\$,7,1))+VAL(SEG\$(NEWPAT\$,8,1))+1,1)
690 BYTE\$=HIGH\$&LOW\$
700 NEWCHAR\$=""
710 FOR L2=1 TO 16
720 IF L2<>R1*2-1 THEN NEWCHAR\$=NEWCHAR\$&SEG\$(V7\$,L2,1) ELSE NEWCHAR\$=NEWCAR\$&BYTE\$ :: L2=L2+1
730 NEXT L2
740 CALL CHAR(A(RR,CC),NEWCHAR\$)
750 RETURN
760 DATA "0000","0001","0010","0011","0100","0101","0110","0111","1000"
770 DATA "1001","1010","1011","1100","1101","1110","1111"```

Edited by oddemann
Error mesg.

#### Share this post

##### Share on other sites

Program 7-4. Banzai Bunny
It will not show score... Why?

```Program 7-4. Banzai Bunny
100 CALL CLEAR :: RANDOMIZE
110 CALL CHAR(40,"FFFFFFFFFFFFFFFF")
120 CALL CHAR(96,"000000030709030303030301000000000000000040C0808080C0C0C000000000")
130 CALL CHAR(100,"000000000000070F0F0E000000000000000000002010D8F8E030000000000000")
140 CALL CHAR(104,"0000000004081B1F070C000000000000000000000000E0F0F070000000000000")
150 CALL CHAR(108,"000000030709030303030301000000000000404040808080808080C040400000")
160 CALL CHAR(112,"000000000000070F0F38000000000000000000002010D8F8E01C000000000000")
170 CALL CHAR(116,"0000000004081B1F073C000000000000000000000000E0F0F01C000000000000")
180 CALL CHAR(120,"00000000000102043F7FFFFF381000000000000000F04844FEFFFFFF1C080000")
190 CALL CHAR(124,"00000000000F12227FFFFFFF381000000000000000804020FCFEFFFF1C080000")
200 CALL CHAR(128,"0000070F3F3F7FFFFF7F3F3F0F0700000000E0F0FCFCFEFFFFFEFCFCF0E00000")
210 CALL CHAR (132,"FFFFFFFFFFFFFFFF"):: CALL CHAR(136,"000000000000000F")
220 CALL CHAR(140,"80C06070303008060303030607181800010203071C30708080C0607030100100")
230 CALL COLOR(2,5,1,13,4,1,14,2,1)
240 DISPLAY AT(4,1): "NUMBER OF PLAYERS? _"
250 ACCEPT AT(4,20)VALIDATE(NUMERIC)SIZE(-1)BEEP:NP
260 CALL CLEAR
270 CALL HCHAR(23,1,132,32):: CALL HCHAR(24,1,132,32)
280 CALL HCHAR(10,1,132,32):: CALL HCHAR(9,1,132,32)
290 CALL HCHAR(1,1,132,32):: CALL HCHAR(2,1,132,32)
300 FOR L=12 TO 21 STEP 2
310 CALL HCHAR(L,1,136,32)
320 NEXT L
330 FOR L=3 TO 8
340 CALL HCHAR(L,1,40,32)
350 NEXT L
360 CALL MAGNIFY(3)
370 CALL SPRITE(#2,124,2,160,70,0,9,#3,124,9,160,150,0,9,#4,124,14,160,230,0,9)
380 CALL SPRITE(#5,124,15,144,10,0,12,#6,124,5,144,100,0,12,#24,124,13,144,190,0,12)
390 CALL SPRITE(#7,124,2,128,70,0,10,#8,124,9,128,150,0,10,#9,124,11,128,230,0,10)
400 CALL SPRITE(#10,120,9,112,70,0,-10,#11,120,14,112,150,0,-10,#12,120,16,112,230,0,-10)
410 CALL SPRITE(#13,120,11,96,10,0,-12,#14,120,5,96,100,0,-12,#25,120,14,96,190,0,-12)
420 CALL SPRITE(#15,120,2,80,70,0,-9,#16,120,10,60,150,0,-9,#17,120,15,80,230,0,-9):: GOTO 460
430 CALL SPRITE(#19,128,2,48,10,0,4)
440 CALL SPRITE(#21,128,2,32,10,0,-3)
450 CALL SPRITE(#22,128,2,16,10,0,5):: RETURN
460 FOR PL=1 TO NP
470 BUNNY=5 :: FOR D=1 TO 5 :: CALL SOUND(300,500,0):: CALL SOUND(300,300,0):: NEXT D
480 DISPLAY AT(24,1):USING "###### #":"PLAYER",PL; :: DISPLAY AT(24,20):USING "####### #":"BUNNIES",BUNNY
490 DISPLAY AT(1,10):"SCORE:    ";
500 GOSUB 530
510 NEXT PL
520 GOTO 890
530 GOSUB 430 :: CALL SPRITE(#18, 96,16,176,125):: R=176 :: C=125
540 CALL KEY(3,K,S)
550 IF R<64 THEN 610
560 CALL COINC(ALL,CO) :: IF CO<>0 THEN 780
570 IF K=69 THEN GOSUB 640 :: IF R<64 THEN 700 ELSE 540
580 IF K=83 THEN GOSUB 660 :: GOTO 540
590 IF K=68 THEN GOSUB 680 :: GOTO 540
600 GOTO 540
610 CALL COINC(ALL,CO):: IF CO=0 THEN 780 ELSE 570
620 CALL SOUND(70,500,5,-6,0):: CALL SOUND(30,300,5,-4,0):: RETURN
630 RETURN
640 CALL PATTERN(#18,108) :: R=R-16 :: SW=1 :: IF R<1 THEN R=1
650 CALL LOCATE(#18,R,C) :: CALL PATTERN(#18,96) :: GOSUB 620 :: RETURN
660 CALL PATTERN(#18,116) :: C=C-16 :: SW=1 :: IF C<1 THEN C=1
670 CALL LOCATE(#18,R,C) :: CALL PATTERN(#18,104) :: GOSUB 620 :: RETURN
680 CALL PATTERN(#18,112) :: C=C+16 :: SW=1 :: IF C>240 THEN C=240
690 CALL LOCATE(#18,R,C) :: CALL PATTERN(#18,100) :: GOSUB 620 :: RETURN
700 CALL KEY(3,K,S)
710 IF S<>0 THEN IF K=69 THEN GOSUB 640 ELSE IF K=83 THEN GOSUB 660 ELSE IF K=68 THEN GOSUB 680
720 CALL POSITION(#18,R,C) :: IF R=1 THEN CALL MOTION(#18,0,0) :: GOTO 850
730 IF C<7 OR C>236 THEN 780
740 IF R<=48 AND R>32 THEN CALL MOTION(#18,0,4) ELSE IF R<=32 AND R>16 THEN CALL MOTION(#18,0, -3) ELSE CALL MOTION(#18,0,5)
750 IF SW=1 THEN CALL COINC(ALL,CO) :: IF CO=0 THEN 780 ELSE SW=0
770 GOTO 700
780 CALL SOUND(300,3500,0,5000,5) :: CALL SOUND(-200,200,5,-6,0)
790 CALL PATTERN(#18,140) :: CALL COLOR(#18,11)
800 FOR D=1 TO 25 :: NEXT D
810 CALL DELSPRITE(#18)
820 BUNNY=BUNNY-1 :: IF BUNNY<1 THEN 630
830 DISPLAY AT(24,27):USING "##":BUNNY
840 GOTO 530
850 CALL SOUND(1500,400,5,1000,0) :: FOR D=1 TO 500 :: NEXT D
860 SC(PL)=SC(PL)+15
870 DISPLAY AT(1,17):USING "###":SC(PL);
880 GOTO 530
890 CALL DELSPRITE(ALL) :: CALL CLEAR
900 DISPLAY AT(2,7):"** SCORE **"
910 FOR L=1 TO NP
920 DISPLAY AT(4+L*2,4):USING "###### #   # ##": "PLAYER",L,SC(L)
930 NEXT L
940 GOTO 940```

#### Share this post

##### Share on other sites
On 9/15/2020 at 8:21 PM, oddemann said:

Holt's on line 600...

How Graph Works

Line(s)

100 DIMension arrays.

110-120 Clear the screen and display message.

130-140 Set up character patterns. BL\$ is used to blank out the characters used by the program. A\$, B\$, C\$, and D\$ are used to insert the X and Y axes in the display area.

150 Load four-digit bit strings into BITS\$.

160-170 Blank out the ASCII characters used in the display area.

180-230 Insert the X and Y axis lines in the display area.

240 Display the X and Y axis values.

250-320 Load the A array with the ASCII character codes in the display area. This is used later to determine which ASCII character code to change.

330 Erase STAND BY message.

340-380 Display the 64 characters on the screen 8 characters at a time. This builds the 8 x 8 display area.

390-400 Initiate the routine to plot the points for the positive values of X.

410-420 Initiate the routine to plot the points for the negative values of X.

430-450 End of program.

460 This is the equation which controls where the points are plotted on the graph. Figure 2-9 shows possible alternatives.

470-490 Determine the actual location of the point in the 64 x 64 pbcel matrix. The program plots both positive and negative values, but negatives in the actual matrix aren't possible, hence the +32.

500-520 Determine the location of the pixel in the 8 x 8 character matrix. This must be done since the pixel cannot be accessed directly.

530 Get the hex pattern of the character that contains the pixel. The A array contains the ASCII codes of the characters used. The pattern is placed in W\$.

540-560 Determine which byte in the pattern contains the pixel.

570-620 Convert the one-byte hex pattern which contains the pixel into an eight-digit bit pattern (for example, 00100110).

630-660 CI contains the column position of the pixel within the 8x8 character grid. If the bit in this position is not on, it is turned on. If it is on, it stays as is. 670-690 Convert the bit pattern, with the updated pixel, back into a hex pattern.

700-730 Combine the new one-byte hex pattern with the other seven bytes in the pattern.

740 Change the pattern of the ASCII character code which effectively plots the point on the screen.

750 Return from plot subroutine.

760-770 Hex pattern binary equivalents.

Program 2-7. Graph

FIX - 590 HOLD\$=SEG\$(BYTE\$,L3,1) (There was a 0 in H0LD\$)
But new bug... Bad value 740...

#### Share this post

##### Share on other sites

This works great...

BUT, I want to make the fish move more. I have other things I want to do where i want a sprite to "move" not a static ONE sprite. I want to make the ONE Sprite shift from 1 to 2 or even 3 or 4 different pictures.

So I found this Aquarium program and it is nice. I want to make the individual fishes move as if they are moving there tale.

BUT... How do I do this. I tried different things, and I am not even close.

Can you help?

I want ONE sprite to move back and forth from A\$ and B\$. Working on a animation, have two now, but if I can make more life into the fish I will try to add more animation.

```140 ! REQUIRES EXTENDED BASIC.
150 CALL SCREEN(2)
160 CALL CLEAR
170 FOR I=1 TO 14 :: CALL COLOR(I,15,1):: NEXT I
180 PRINT "TI AQUARIUM": : : :
190 PRINT "This program allows you to"
200 PRINT "use your TI-99 to enjoy the"
210 PRINT "relaxing sight of fish"
220 PRINT "swimming by, without the"
230 PRINT "expense and bother of a"
240 PRINT "real aquarium."
250 PRINT : :"To end the program, press"
260 PRINT "any key while the fish are"
270 PRINT "being displayed."
280FOR D=1 TO 1500 :: NEXT D
290 CALL CLEAR
300 RANDOMIZE
310 A\$="0000000081C3E7FFFFE7C3810000000000000000F0F8FCFEFEFCF8F000000000"
320 CALL CHAR(120,A\$)
330 CALL MAGNIFY(3)
340 DATA 9,6,4,7,8,10,11,12,14,0
350 CALL SCREEN(2)
360 !
370 ! Put fish on the screen., with sprite numbers and
380 ! colors based on the DATA statement
390 !
400 READ Q
410 IF Q=0 THEN 540
420 CALL SPRITE(#Q,120,1,90+30*(RND-0.5),1,4*RND-3,5*RND+1)
430 CALL COLOR(#Q,Q)
440 GOSUB 610
450 GOSUB 610
460 GOSUB 610
470 FOR D=l TO 300 :: NEXT D
480 GOTO 400
490 !
500 ! Now that all the fish are on the screen, make
510 ! random changes in their motion and check for
520 ! a key being pressed.
530 !
540 GOSUB 610
550 CALL KEY(5,CODE,STATUS)
560 IF STATUS<>0 THEN CALL CLEAR :: STOP
570 GOTO 540
580 !
590 ! Subroutine: Change the motion of a
600 ! randomly chosen sprite
605 !
610 CALL MOTION(#INT(11*RND)+3,4*RND-2,5*RND+2)
620 RETURN

Alternativ
Better fish
310 A\$="0000000083C76F7F7F6FC78300000000000000F0F8FCF6FFFFFEFCF8F0000000"

Tale flopp
315 B\$="0000000043476F7F7F6F474300000000000000F0F8FCF6FFFFFEFCF8F0000000"```

#### Share this post

##### Share on other sites

Try this for some ideas.  I removed CALL KEY because it slows down the loop.  BREAK is the only way out.

Spoiler
```
100 ! REQUIRES EXTENDED BASIC.
110 CALL SCREEN(2)
120 CALL CLEAR
130 FOR I=1 TO 14 :: CALL COLOR(I,15,1):: NEXT I
140 PRINT "TI AQUARIUM": : : :
150 PRINT "This program allows you to"
160 PRINT "use your TI-99 to enjoy the"
170 PRINT "relaxing sight of fish"
180 PRINT "swimming by, without the"
190 PRINT "expense and bother of a"
200 PRINT "real aquarium."
210 PRINT : :"To end the program, press"
220 PRINT "any key while the fish are"
230 PRINT "being displayed."
240 FOR D=1 TO 500 :: NEXT D
250 CALL CLEAR
260 RANDOMIZE
270 A\$="0000000043476F7F7F6F474300000000004020F0F8DCB6BFBFDEFCF820400000"
280 B\$="0000010003272F3F3F2F270300010000000000F0F8DCB6BFBFDEFCF8F0000000"
290 CALL CHAR(120,A\$)
300 CALL CHAR(124,B\$)
310 CALL MAGNIFY(3)
320 CALL SCREEN(2)
330 !
340 ! Put 10 fish on the screen,
350 ! colors are sequential
360 !
370 FOR Q=1 TO 10
380 CALL SPRITE(#Q,120,1,90+30*(RND-0.5),1,4*RND-3,5*RND+1)
390 CALL COLOR(#Q,Q+2)
400 NEXT Q
410 !
420 ! Now that all the fish are on the screen
430 ! make random changes in their motion
440 !
450 FISH=INT(10*RND)+1
460 CALL MOTION(#FISH,4*RND-2,8*RND-4)
470 FOR X=1 TO 20
480 CALL PATTERN(#FISH,124)!  wiggle
490 CALL SOUND(RND*100+20,-6,30)! DELAY
500 CALL PATTERN(#FISH,120)
510 NEXT X
520 GOTO 450
530 END```

#### Share this post

##### Share on other sites
26 minutes ago, TheBF said:

Try this for some ideas.  I removed CALL KEY because it slows down the loop.  BREAK is the only way out.

Nice.   Only took 20 minutes to check out in Classic99 on virtualbox - could have typed into MAME quicker 😕

Shame Classic99 doesn't have a Linux port.....         Well, on the upshot, PasteXB now functions under WINE   (and I'll be honest, that is one highly useful function 👍)

Edited by WhataKowinkydink

#### Share this post

##### Share on other sites

Anyway, I'll get off the soapbox.  I really like this aquarium.  Great find @oddemann -  nice work, too @TheBF .   I might just have to save it for late use on the real iron

## Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

• ### Recently Browsing   0 members

No registered users viewing this page.

×
×
• Create New...