100 REM ************ 110 REM * MELTDOWN * 120 REM ************ 130 REM 140 REM BY STEVE LANGGUTH 150 REM HOME COMPUTOR MAGAZINE 160 REM VERSION 4.1.1 170 REM TI EXTENDED BASIC 180 REM 190 REM**TITLE SCREEN** 200 REM 210 CALL CLEAR :: DISPLAY AT(11,11):"MELTDOWN" 220 REM *DEFINE CHARACTERS* 230 CALL CHAR(43,"0000FF8181FF0000",37,"007E7E42427E7E00") 240 CALL CHAR(96,"03060603013F3435343703030303030FC06060C080FC2CAC2CE0606060780000") 250 CALL CHAR(100,"03060603013F343534070606061E0000C06060C080FC2CAC2CECC0C0C0C0C0F0") 260 CALL CHAR(104,"00000000000038EE030000000000000000000000000038EE8300000000000000") 270 CALL CHAR(108,"0103060C193366CCCC6633190C06030180C0603098CC66333366CC983060C080") 280 CALL CHAR(132,"66",116,"66",124,"66") 290 CALL CHAR(112,"001F2040404E5B51515B4E4040201F0000F80402020202324A12227A0204F800") 300 CALL CHAR(120,"0000103B12021E10101E02123B100000000008DC4840780808784048DC080000") 310 CALL CHAR(140,"C1E171381C0E07E3E3070E1C3871E1C183878E1C3870E0C7C7E070381C8E8783") 320 CALL CHAR(128,"012110080204011BC30904112140000000000284882090C3D880204010088480") 330 CALL CHAR(136,"00001212123F7FD5D57F3F12121200000000484848FCFEABABFEFC4848480000") 340 REM **INITIALIZATION** 350 RESTORE :: OPTION BASE 1 :: DIM ROW(12):: DIM COL(12):: DIM VEL(12):: DIM MP(12):: DIM PPR(6):: DIM PPC(6) 360 FOR X=1 TO 12 :: READ ROW(X),COL(X),VEL(X):: NEXT X 370 FOR X=1 TO 12 :: READ MP(X):: NEXT X 380 FOR X=1 TO 6 :: READ PPR(X),PPC(X):: NEXT X 390 REM **KEYS OR JOYST** 400 CALL CLEAR :: DISPLAY AT(7,6):"DO YOU WISH TO USE" :: DISPLAY AT(9,10):"1 JOYSTICK " 410 DISPLAY AT(11,3):"-NOTE-RELEASE ALPHA LOCK-" 420 DISPLAY AT(14,10):"2 KEYBOARD ?" :: DISPLAY AT(16,6):"PRESS 1 OR 2" 430 CALL KEY(0,K,S):: IF K<>49 AND K<>50 THEN 430 440 IF K=49 THEN K1=1 ELSE K1=0 450 REM **DRAW PLAY FIELD** 460 CALL COLOR(1,2,2,2,2,2,11,2,2,12,2,2,13,2,2) 470 CALL CLEAR :: CALL SCREEN(2):: CALL MAGNIFY(3) 480 FOR T=1 TO 4 :: READ R1,C1 :: CALL HCHAR(R1,C1,37,14):: NEXT T 490 FOR T=1 TO 10 :: READ R2,C2 :: CALL HCHAR(R2,C2,43,14):: NEXT T 500 FOR T=1 TO 4 :: READ R3,C3 :: CALL VCHAR(R3,C3,37,2):: NEXT T 510 FOR T=1 TO 6 :: READ R4,C4,CH4 :: CALL HCHAR(R4,C4,CH4,15):: NEXT T 520 FOR T=1 TO 6 :: READ R5,C5 :: CALL SPRITE(#(T+5),140,2,R5,C5):: NEXT T 530 CALL COLOR(1,5,2,2,5,2) 540 FOR X=3 TO 8 :: CALL COLOR(X,16,2):: NEXT X 550 ARMOR=5 :: OXYGEN=100 :: SCORE=0 :: LEVEL=1 :: PN=0 :: OF=0 :: AM=0 560 DISPLAY AT(23,19)SIZE(5):"SCORE" :: DISPLAY AT(22,1)SIZE(6):"OXYGEN" 570 DISPLAY AT(24,2)SIZE(5):"ARMOR" 580 DISPLAY AT(22,7)SIZE(4):OXYGEN :: DISPLAY AT(24,8)SIZE(3):ARMOR 590 DISPLAY AT(12,14)SIZE(2):LEVEL :: CALL SOUND(100,(330*LEVEL),2,(392*LEVEL),2,(523*LEVEL),2) 600 GOSUB 1950 610 CALL SOUND(25,262,30):: CALL SOUND(500,(330*LEVEL),2,(392*LEVEL),2,(523*LEVEL),2) 620 FOR T=1 TO 250 :: NEXT T 630 DISPLAY AT(12,14)SIZE(2):" " 640 REM **CREATE HERO** 650 CALL SPRITE(#1,96,3,165,121):: S=0 :: SH=0 660 PN=PN+1 :: IF PN>(15*LEVEL)THEN 1620 670 REM **CREATE OXYGEN** 680 IF OF=1 THEN 730 690 RANDOMIZE :: Q=INT(RND*3)+1 :: P=INT(RND*6)+1 700 IF Q<>2 THEN 730 710 CALL SPRITE(#4,112,12,PPR(P),PPC(P)):: OF=1 :: CALL SOUND(50,3000,3,4000,5) 720 REM **GAMMA RAYS** 730 RANDOMIZE :: X=INT(RND*2)+1 :: IF X<>2 THEN 910 740 RANDOMIZE :: Y=INT(RND*3)+1 :: ON Y GOTO 750,800,850 750 CALL COLOR(#6,16):: CALL SOUND(200,2500,2):: CALL COLOR(#7,16):: CALL SOUND(200,2600,2) 760 GOSUB 1770 770 CALL COLOR(11,16,2):: CALL SOUND(100,1000,2,1200,4):: CALL POSITION(#1,DR,DC) 780 IF (DR<20)+(DR>30)=0 OR(DR<92)+(DR>102)=0 THEN CALL COLOR(11,2,2):: CALL COLOR(#6,2,#7,2):: GOTO 1340 790 CALL COLOR(11,2,2):: CALL COLOR(#6,2,#7,2):: GOTO 910 800 CALL COLOR(#8,16):: CALL SOUND(200,2700,2):: CALL COLOR(#9,16):: CALL SOUND(200,2800,2) 810 GOSUB 1770 820 CALL COLOR(12,16,2):: CALL SOUND(100,1000,2,1200,4):: CALL POSITION(#1,DR,DC) 830 IF (DR<44)+(DR>54)=0 OR(DR<116)+(DR>126)=0 THEN CALL COLOR(12,2,2):: CALL COLOR(#8,2,#9,2):: GOTO 1340 840 CALL COLOR(12,2,2):: CALL COLOR(#8,2,#9,2):: GOTO 910 850 CALL COLOR(#10,16):: CALL SOUND(200,2900,2):: CALL COLOR(#11,16):: CALL SOUND(200,3000,2) 860 GOSUB 1770 870 CALL COLOR(13,16,2):: CALL SOUND(100,1000,2,1200,4):: CALL POSITION(#1,DR,DC) 880 IF (DR<68)+(DR>78)=0 OR(DR<140)+(DR>150)=0 THEN CALL COLOR(13,2,2):: CALL COLOR(#10,2,#11,2):: GOTO 1340 890 CALL COLOR(13,2,2):: CALL COLOR(#10,2,#11,2):: GOTO 910 900 REM**ANTIMATTER** 910 IF LEVEL<2 THEN 970 920 RANDOMIZE :: X=INT(RND*2)+1 :: Y=INT(RND*(8-LEVEL))+1 :: Z=INT(RND*6)+1 930 IF AM<>1 THEN 950 940 IF X=2 THEN CALL DELSPRITE(#5):: CALL SOUND(50,3333,2,4444,3):: AM=0 :: GOTO 970 950 IF Y=1 THEN CALL SPRITE(#5,120,6,PPR(Z),PPC(Z)):: AM=1 :: CALL SOUND(50,2222,2,3333,3) 960 REM **PARTICAL CHOOSE** 970 RANDOMIZE :: X=INT(RND*(LEVEL*2))+1 :: ON X GOTO 980,980,980,990,980,990,990,990,990 980 CN=108 :: GOTO 1010 990 CN=136 :: GOTO 1010 1000 REM **MAIN GAME LOOP** 1010 GOSUB 1770 1020 RANDOMIZE :: X=INT(RND*12)+1 :: Y=INT(RND*13)+3 :: CALL SPRITE(#3,CN,Y,ROW(X),COL(X),0,VEL(X)*(5+LEVEL)) 1030 IF CN=108 THEN 1040 ELSE 1050 1040 FOR A=0 TO 30 STEP 15 :: CALL SOUND(-99,250+Y*10,A,1512+Y*10,A):: NEXT A :: GOTO 1060 1050 FOR T=1 TO 3 :: CALL SOUND(25,5000,2,5555,3,6000,2):: NEXT T 1060 IF SH<>0 THEN CALL COINC(#2,#3,15+LEVEL,HIT1):: IF HIT1=-1 THEN 1250 1070 GOSUB 1850 1080 IF OF<>1 THEN 1090 ELSE CALL COINC(#1,#4,15,HIT3):: IF HIT3=-1 THEN 1410 1090 IF AM<>1 THEN 1100 ELSE CALL COINC(#1,#5,10,HIT5):: IF HIT5=-1 THEN AM=0 :: GOTO 1440 1100 GOSUB 1770 1110 CALL COINC(#1,#3,15,HIT2):: IF HIT2=-1 THEN 1340 1120 IF SH<>0 THEN CALL COINC(#2,#3,15+LEVEL,HIT1):: IF HIT1=-1 THEN 1250 1130 GOSUB 1850 1140 CALL POSITION(#2,DR2,DC2):: IF DC2>40 AND DC2<210 THEN 1160 1150 CALL DELSPRITE(#2):: SH=0 1160 GOSUB 1770 1170 CALL POSITION(#3,DR3,DC3):: IF DC3>25 AND DC3<225 THEN 1220 1180 CALL DELSPRITE(#3):: IF SCORE<5 THEN SCORE=0 ELSE SCORE=SCORE-5 1190 OXYGEN=OXYGEN-1 :: DISPLAY AT(23,24):SCORE 1200 DISPLAY AT(22,7)SIZE(4):OXYGEN :: RH=0 1210 IF OXYGEN<1 THEN 1440 ELSE 660 1220 OXYGEN=OXYGEN-1 :: DISPLAY AT(22,7)SIZE(4):OXYGEN :: IF OXYGEN<1 THEN 1440 1230 CALL SOUND(40-(LEVEL*3),1000+(LEVEL*200),2,500+(LEVEL*150),2) 1240 CALL SOUND(40-(LEVEL*3),500+(LEVEL*200),2,250+(LEVEL*150),2):: GOTO 1060 1250 IF CN=108 THEN 1280 1260 IF RH=1 THEN 1280 ELSE CALL DELSPRITE(#2):: RH=1 :: SCORE=SCORE+10 :: CALL COLOR(#3,16) 1270 CALL MOTION(#3,0,VEL(X)*(7+LEVEL)):: GOTO 1060 1280 REM **DESTROY PARTICAL* 1290 CALL DELSPRITE(#2):: CALL MOTION(#3,0,0,#1,0,0):: RH=0 1300 FOR T=1 TO 5 :: CALL COLOR(#3,2):: CALL SOUND(-25,1111,2) 1310 CALL COLOR(#3,10):: CALL SOUND(-25,1122,4):: NEXT T 1320 CALL PATTERN(#3,128):: FOR T=1 TO 5 :: CALL SOUND(-99,500*T,2+T):: NEXT T 1330 CALL SOUND(50,4000,2):: CALL DELSPRITE(#3):: SH=0 :: SCORE=SCORE+10 :: DISPLAY AT(23,24):SCORE :: GOTO 660 1340 REM**DESTROY HERO** 1350 CALL DELSPRITE(#3):: CALL MOTION(#1,0,0) 1360 FOR T=1 TO 5 :: CALL COLOR(#1,2):: CALL SOUND(-99,750,2) 1370 CALL COLOR(#1,16):: CALL SOUND(-99,775,4):: NEXT T 1380 CALL PATTERN(#1,128):: FOR T=5 TO 1 STEP -1 :: CALL SOUND(-99,450*T,1+T):: NEXT T 1390 CALL DELSPRITE(#1):: ARMOR=ARMOR-1 :: DISPLAY AT(24,8)SIZE(3):ARMOR :: IF ARMOR<1 THEN 1440 ELSE 650 1400 REM **OBTAIN OXYGEN** 1410 CALL DELSPRITE(#4):: CALL SOUND(100,200,3,300,4):: OF=0 :: OXYGEN=OXYGEN+10 1420 DISPLAY AT(22,7)SIZE(4):OXYGEN :: GOTO 1060 1430 REM **END GAME** 1440 CALL DELSPRITE(ALL) 1450 FOR T=10 TO 2 STEP -1 1460 CALL SOUND(-1000,-7,T):: CALL SCREEN(12):: CALL COLOR(1,12,12,2,12,12,11,12,12,12,12,12,13,12,12) 1470 CALL SOUND(-1000,-7,T-1):: CALL SCREEN(9):: CALL COLOR(1,9,9,2,9,9,11,9,9,12,9,9,13,9,9) 1480 NEXT T 1490 CALL SCREEN(2):: CALL COLOR(1,2,2,2,2,2,11,2,2,12,2,2,13,2,2) 1500 FOR T=1 TO 5 :: CALL SOUND(-1000,1000+(200*T),T):: NEXT T 1510 CALL SOUND(100,125,1) 1520 IF OXYGEN<1 THEN DISPLAY AT(8,10)ERASE ALL:"OUT OF OXYGEN" 1530 IF ARMOR<1 THEN DISPLAY AT(8,10)ERASE ALL:"OUT OF ARMOR" 1540 IF HIT5=-1 THEN DISPLAY AT(8,10)ERASE ALL:"ANTIMATTER HIT!" 1550 DISPLAY AT(12,10)SIZE(5):"SCORE" :: DISPLAY AT(12,17):SCORE 1560 IF SCORE>HIGH THEN HIGH=SCORE 1570 DISPLAY AT(14,10)SIZE(4):"HIGH" :: DISPLAY AT(14,17):HIGH 1580 DISPLAY AT(19,10):"GAME OVER" 1590 DISPLAY AT(21,5):"PLAY AGAIN? Y OR N" 1600 CALL KEY(0,K,S):: IF K=89 OR K=121 THEN CALL CLEAR :: GOTO 350 1610 IF K=78 OR K=110 THEN 1750 ELSE 1600 1620 LEVEL=LEVEL+1 :: PN=0 :: IF LEVEL>5 THEN 1630 ELSE 590 1630 CALL CLEAR :: CALL SCREEN(2):: CALL DELSPRITE(ALL) 1640 CALL SOUND(200,262,4):: CALL SOUND(200,330,4):: CALL SOUND(200,392,4):: CALL SOUND(100,523,3) 1650 CALL SOUND(150,523,30):: CALL SOUND(200,302,3):: CALL SOUND(500,330,2,392,2,523,2) 1660 CALL SOUND(200,131,2,165,2,196,2) 1670 DISPLAY AT(8,7):"CONGRATULATIONS !" :: DISPLAY AT(11,6):"YOU HAVE JUST SAVED" 1680 DISPLAY AT(12,6):"THE REACTOR AND THE" :: DISPLAY AT(13,7):"ENTIRE WOLRD FROM" 1690 DISPLAY AT(14,6):"COMPLETE DESTRUCTION." 1700 DISPLAY AT(16,6):"YOUR MOTHER WOULD BE" :: DISPLAY AT(17,11):"PROUD !!!" :: DISPLAY AT(20,3):"PLAY AGAIN?" 1710 DISPLAY AT(21,4):"PRESS Y OR N" 1720 DISPLAY AT(5,3):"SCORE ";SCORE 1730 CALL KEY(0,K,S):: IF K=89 THEN CALL CLEAR :: GOTO 350 1740 IF K=78 THEN 1750 ELSE 1730 1750 END 1760 REM **HERO MOVE SUB** 1770 IF K1<>1 THEN 1800 1780 CALL JOYST(1,XR,YR):: IF XR=0 AND YR<>0 THEN CALL MOTION(#1,-YR*4,0):: GOTO 1820 1790 CALL MOTION(#1,0,0):: RETURN 1800 CALL KEY(0,K,S):: IF K=69 THEN CALL MOTION(#1,-16,0):: GOTO 1820 1810 IF K=88 THEN CALL MOTION(#1,16,0):: GOTO 1820 ELSE CALL MOTION(#1,0,0):: RETURN 1820 IF HP=0 THEN CALL PATTERN(#1,100):: CALL SOUND(3,-3,2):: CALL SOUND(20,-7,10):: HP=1 :: RETURN 1830 CALL PATTERN(#1,96):: CALL SOUND(3,-3,2):: CALL SOUND(20,-6,10):: HP=0 :: RETURN 1840 REM **SHOOT SUB** 1850 IF SH=1 THEN RETURN 1860 IF K1<>1 THEN 1880 1870 CALL JOYST(1,XR,YR):: IF XR=0 THEN RETURN ELSE 1890 1880 CALL KEY(O,K,S):: IF K<>68 AND K<>83 THEN RETURN 1890 CALL POSITION(#1,DR,DC):: Z=INT(((DR-1)/12)-.05):: IF Z<1 OR Z>12 THEN RETURN 1900 IF K1<>1 THEN 1920 1910 IF XR=4 THEN 1930 ELSE 1940 1920 IF K=83 THEN 1940 1930 CALL SPRITE(#2,104,16,MP(Z),122,0,16):: CALL SOUND(100,500,2):: SH=1 :: RETURN 1940 CALL SPRITE(#2,104,16,MP(Z),107,0,-16):: CALL SOUND(100,500,2):: SH=1 :: RETURN 1950 REM *CALL SCREEN GOSUB* 1960 ON LEVEL GOTO 1970,1980,1990,2000,2010 1970 RETURN 1980 CALL SCREEN(13):: RETURN 1990 CALL SCREEN(5):: RETURN 2000 CALL SCREEN(14):: RETURN 2010 CALL SCREEN(10);;RETURN 2020 REM **DATA** 2030 DATA 25,14,1,49,14,1,73,14,1,97,14,1,121,14,1,145,14,1 2040 DATA 25,237,-1,49,237,-1,73,237,-1,97,237,-1,121,237,-1,145,237,-1 2050 DATA 25,25,49,49,73,73,97,97,121,121,145,145 2060 DATA 25,120,49,120,73,120,97,120,121,120,145,120 2070 DATA 3,1,3,19,21,1,21,19 2080 DATA 6,1,6,19,9,1,9,19,12,1,12,19,15,1,15,19,18,1,18,19 2090 DATA 1,14,1,19,22,14,22,19 2100 DATA 5,3,116,14,16,116,8,16,124,17,3,124,11,3,132,20,16,132 2110 DATA 25,14,97,237,49,237,121,14,73,14,145,237