REM ICE & FIRE BY CCLX33 v1.1 GLOBAL MAN,DIRX,fall,FIRE,LICE,MICE,RICE,ICE,BICE,FIRES DIM GLOBAL MAP(10,10), LVL$(90) REM CONST FIRE=1 MAN=2 BOTTLE=3 WALL=4 LICE=5 MICE=6 RICE=7 ICE=8 BICE=9 FBOTTLE=10 VTUBE=11 HTUBE=12 LUTUBE=13 LDTUBE=14 RUTUBE=15 RDTUBE=16 MAPH=9 MAPW=9 GAMEPAD 1 PAUSE OFF INTRO: TEXT 0,13,"BTN :MAKE/BREAK ICE" TEXT 0,14,"PAUSE:SELECT LEVEL" TEXT 0,15,"INPUT A,N OR NUMBER" GOSUB READLEVEL LEVEL=1 RESTART: IF LEVEL<1 THEN LEVEL=1 IF LEVEL>MAXLEVEL THEN LEVEL=MAXLEVEL GOSUB DRAWLEVEL WAIT 10 DO IF PAUSE THEN GOTO SELECTLVL IF BUTTON TAP(0,1) THEN XA=1 DIRX=XA CALL DRAW(MANX,MANY,MAN) GOSUB CHANGE ELSE IF BUTTON TAP(0,0) THEN XA=-1 DIRX=XA CALL DRAW(MANX,MANY,MAN) GOSUB CHANGE END IF IF LEFT TAP(0) THEN XA=-1 DIRX=XA GOSUB WALK ELSE IF RIGHT TAP(0) THEN XA=1 DIRX=XA GOSUB WALK ELSE IF UP TAP(0) THEN TUBEDIR=1 GOSUB UPTUBE ELSE IF DOWN TAP(0) THEN TUBEDIR=3 GOSUB DOWNTUBE END IF IF FALL=1 THEN GOSUB FALL IF FIRES=0 THEN GOTO WIN IF DEAD=1 THEN GOTO DEAD WAIT 1 LOOP LEVELUP: LEVEL=LEVEL+1 GOTO RESTART SELECTLVL: PAUSE OFF LOCATE 9,0 INPUT A$ KEYBOARD OFF IF A$="A" OR A$="" THEN GOTO RESTART IF A$="N" or a$=" " THEN GOTO LEVELUP LEVEL=VAL(A$) GOTO RESTART CHANGE: X=MANX+XA Y=MANY+1 V1=MAP(x,y) IF V1=0 THEN GOTO MAKEICE ' cut ice if link IF V1>=LICE AND V1<=ICE THEN call sep(x,y) RETURN MAKEICE: ' make ice at (x,y) ' on firejar can't make ice IF MAP(X,Y+1)=FBOTTLE THEN RETURN VL=MAP(X-1,Y) VR=MAP(X+1,Y) ' decide ice shape PIC=MICE+(VR>2)-(VL>2) CALL DRAW(X,Y,PIC) ' change left right ice shape IF VL=RICE THEN CALL DRAW(X-1,Y,MICE) IF VL=ICE THEN CALL DRAW(X-1,Y,LICE) IF VR=LICE THEN CALL DRAW(X+1,Y,MICE) IF VR=ICE THEN CALL DRAW(X+1,Y,RICE) RETURN sub sep(x,y) CALL DRAW(X,Y,0) VL=MAP(X-1,Y) VR=MAP(X+1,Y) ' change left right ice shape IF VL=MICE THEN CALL DRAW(X-1,Y,RICE) IF VL=LICE THEN CALL DRAW(X-1,Y,ICE) IF VR=MICE THEN CALL DRAW(X+1,Y,LICE) IF VR=RICE THEN CALL DRAW(X+1,Y,ICE) FALL=1 end sub FALL: FALL=0 FOR YD=MAPH-1 TO 1 STEP -1 FOR XD=1 TO MAPW V=MAP(XD,YD) IF V>0 THEN X=XD Y=YD IF V=FIRE THEN GOSUB FIREFALL IF V=ICE THEN GOSUB ICEFALL IF V=BICE THEN GOSUB BLACKFALL IF V=LICE THEN GOSUB BLOCKSFALL IF V=MAN THEN GOSUB MANFALL END IF NEXT XD NEXT YD IF FALL=1 THEN GOTO FALL RETURN FIREFALL: DO BELOW=MAP(X,Y+1) IF BELOW=BOTTLE THEN CALL DRAW(X,Y+1,FBOTTLE) RETURN END IF IF BELOW>0 THEN RETURN CALL DRAW(X,Y,0) Y=Y+1 CALL DRAW(X,Y,FIRE) WAIT 3 LOOP BLACKFALL: VR=MAP(XD+1,YD) ' if link IF VR=MICE OR VR=RICE THEN GOTO BLOCKSFALL ICEFALL: BELOW=MAP(X,Y+1) IF BELOW=FBOTTLE AND V=ICE THEN CALL DRAW(X,Y,0) RETURN END IF IF BELOW>FIRE THEN RETURN CALL DRAW(X,Y,0) Y=Y+1 IF BELOW=FIRE THEN call FLASHF(x,y) IF V=ICE THEN RETURN END IF CALL DRAW(X,Y,V) WAIT 3 GOTO ICEFALL sub flashf(x,y) FIRES=FIRES-1 FOR F=1 TO 2 CALL DRAW(X,Y,FIRE) WAIT 2 CALL DRAW(X,Y,ICE) WAIT 2 NEXT F CALL DRAW(X,Y,0) end sub BLOCKSFALL: ' conut length N=1 REPEAT VN=MAP(XD+N,YD) if vn=RICE then goto ending if vn<>Mice AND vn<>bice then return if vn=bice then VN1=MAP(XD+N+1,YD) if vn1<>RICE AND VN1<>MICE then GOTO ENDING end if N=N+1 UNTIL XD+N>MAPW XD=MAPW RETURN ENDING: FOR I=0 TO N IF MAP(XD+I,YD+1)=FBOTTLE AND MAP(XD+I,YD)<>BICE THEN call sep(xd+i,yd) NEXT I for i=0 to n IF MAP(XD+I,YD+1)>FIRE THEN XD=XD+N RETURN END IF next i FALL=1 FOR I=0 TO N IF MAP(XD+I,YD+1)=FIRE THEN IF MAP(XD+I,YD)<>BICE THEN call sep(xd+i,yd) call FLASHF(XD+I,YD+1) END IF NEXT I FOR I=0 TO N X=XD+I VI=MAP(X,YD) IF VI<>0 THEN CALL DRAW(X,YD,0) CALL DRAW(X,YD+1,VI) END IF NEXT I XD=XD+N WAIT 3 RETURN DEAD: LOCATE 6,8 PRINT "DEAD" WAIT 60 GOTO RESTART WALK: V1=MAP(MANX+XA,MANY) VU=MAP(MANX,MANY-1) U1=MAP(MANX+XA,MANY-1) IF V1=0 THEN GOTO MOVE IF V1=HTUBE THEN GOTO TUBE IF XA=1 AND (V1=LUTUBE OR V1=LDTUBE) THEN GOTO TUBE IF XA=-1 AND (V1=RUTUBE OR V1=RDTUBE) THEN GOTO TUBE 'IF V1=HTUBE or V1=LUTUBE+1-XA OR V1=LDTUBE+1-XA THEN GOTO TUBE IF V1=ICE OR V1=BICE THEN V2=MAP(MANX+XA+XA,MANY) IF V2=0 OR V2=FIRE THEN GOTO PUSH END IF IF V1=FIRE THEN RETURN 'IF VU=0 AND (u1=HTUBE or u1=LUTUBE+1-XA OR u1=LDTUBE+1-XA) THEN IF VU=0 AND (u1=HTUBE or u1=LUTUBE+1-XA) THEN CALL DRAW(MANX,MANY,0) X=MANX+XA IF XA=1 THEN TUBEDIR=2 ELSE TUBEDIR=4 y=many-1 v1=u1 GOTO TUBE1 end if IF VU=0 AND U1=0 and V1<>FBOTTLE THEN GOTO UP1 RETURN UP1: CALL DRAW(MANX,MANY,0) MANX=MANX+XA MANY=MANY-1 CALL DRAW(MANX,MANY,MAN) ' IF U1=FIRE OR V1=FBOTTLE THEN DEAD=1 ' IF V1=FBOTTLE THEN DEAD=1 RETURN MOVE: CALL DRAW(MANX,MANY,0) MANX=MANX+XA CALL DRAW(MANX,MANY,MAN) THRUEND: VD=MAP(MANX,MANY+1) IF V1=FIRE OR VD=FBOTTLE or vd=fire THEN DEAD=1 IF VD=0 THEN GOSUB MANFALL IF (VU>=LICE AND VU<=BICE) or vu=fire THEN FALL=1 RETURN PUSH: CALL DRAW(MANX,MANY,MAN) FALL=1 X=MANX+XA Y=MANY DO IF V2>FIRE THEN CALL DRAW(X,Y,V1) RETURN END IF CALL DRAW(X,Y,0) X=X+XA IF V2=FIRE THEN call FLASHF(x,y) IF V1=ICE THEN RETURN END IF CALL DRAW(X,Y,V1) WAIT 3 D1=MAP(X,Y+1) IF D1=0 OR D1=FIRE or D1=FBOTTLE THEN RETURN IF V1=BICE AND (D1ICE) THEN RETURN ' IF D1=FBOTTLE AND V1=ICE THEN ' CALL DRAW(X,Y,0) ' RETURN ' END IF V2=MAP(X+XA,Y) LOOP MANFALL: VD=MAP(MANX,MANY+1) IF VD=FIRE OR VD=FBOTTLE THEN DEAD=1 IF VD>FIRE THEN RETURN CALL DRAW(MANX,MANY,0) MANY=MANY+1 CALL DRAW(MANX,MANY,MAN) wait 4 GOTO MANFALL WIN: TEXT 6,8," GOOD " WAIT 60 GOTO LEVELUP UPTUBE: VU=MAP(MANX,MANY-1) IF VU=VTUBE OR VU=LDTUBE OR VU=RDTUBE THEN GOTO MOVEV RETURN DOWNTUBE: VD=MAP(MANX,MANY+1) IF VD=VTUBE OR VD=LUTUBE OR VD=RUTUBE THEN GOTO MOVEV RETURN MOVEV: CALL DRAW(MANX,MANY,0) X=MANX Y=MANY+(TUBEDIR-2) V1=MAP(X,Y) GOTO TUBE1 TUBE: CALL DRAW(MANX,MANY,0) Y=MANY X=MANX+XA IF XA=1 THEN TUBEDIR=2 ELSE TUBEDIR=4 TUBE1: IF V1=0 THEN ' out tube MANX=X MANY=Y CALL DRAW(MANX,MANY,MAN) GOTO THRUEND END IF ' tube end IF V10 then IF VU=0 AND U1=0 THEN GOTO UP1 end if RETURN END IF V1=MAP(X,Y) IF TUBEDIR=2 THEN TUBEDIR=-(V1=LUTUBE)-(V1=HTUBE)*2-(V1=LDTUBE)*3 ELSE IF TUBEDIR=3 THEN TUBEDIR=-(V1=VTUBE)*3-(V1=LUTUBE)*4-(V1=RUTUBE)*2 ELSE IF TUBEDIR=4 THEN TUBEDIR=-(V1=HTUBE)*4-(V1=RUTUBE)-(V1=RDTUBE)*3 ELSE TUBEDIR=-(V1=VTUBE)-(V1=LDTUBE)*4-(V1=RDTUBE)*2 END IF IF TUBEDIR=0 THEN V1=SGN(V1) ELSE X=X+(TUBEDIR=4)-(TUBEDIR=2) Y=Y+(TUBEDIR=1)-(TUBEDIR=3) END IF GOTO TUBE1 DRAWLEVEL: 'CLS LOCATE 3,0 PRINT "LEVEL=";LEVEL FIRES=0 WIN=0 DEAD=0 FALL=1 DIRX=1 XA=1 L$=LVL$(LEVEL) I=1 FOR Y=1 TO MAPH FOR X=1 TO MAPW B$=MID$(L$,I,1) V=INSTR("123456789ABCDEFG",B$) MAP(X,Y)=V IF V=FIRE THEN FIRES=FIRES+1 IF Y>0 THEN CALL DRAW(X,Y,V) IF V=MAN THEN MANX=X MANY=Y MAP(X,Y)=0 END IF IF B$<>"\" AND B$<>"#" THEN I=I+1 NEXT X IF B$<>"#" THEN I=I+1 NEXT Y BORDER: FOR Y=1 TO MAPH CALL DRAW(0,Y,WALL) CALL DRAW(MAPW+1,Y,WALL) NEXT Y FOR X=0 TO MAPW+1 CALL DRAW(X,0,WALL) CALL DRAW(X,MAPH+1,WALL) NEXT X RETURN SUB DRAW(X,Y,A) MAP(X,Y)=A C=VAL(MID$("03431000003222222",A+1,1)) IF A=MAN AND DIRX=-1 THEN ATTR(,1) ATTR(C,) CELL X+3,Y+1,A ATTR(0,0) END SUB READLEVEL: MAXLEVEL=90 FOR I=1 TO 90 READ LVL$(I) IF LVL$(I)="" THEN MAXLEVEL=I-1 I=90 END IF NEXT I RETURN ' test 'data "\0008\0d0g\24440081\444444444#" 'data "\10008\b000b\fc20d\44444\\18\#" 'data "\00008\b0c0b\fc20d\44444\\18\#" 'data "\\\0092819\4a4444a\44#" 'data "\\\0082818\4a4444a\44#" 'data "\\\2818\444a#" 'data "\\b000b\f020d\44444\\18\#" 'data "\\b000b\d020f\44444\\18\#" 'data "\\\g020e\b444b\\18\#" 'data "\\\d020f\44444\\18\#" 'DATA "\2566678\7000004\4\00010011\40040044\#" 'DATA "\2569678\7000004\4\00010011\40040044\#" 'DATA "\2566678\7000004\4\004A0011\40040044\#" 'DATA "\2569678\7000004\4\000A0011\40040044\#" DATA "\\0010802\044444444\\08\0801\0801\444441\" DATA "\\\\\2\467\\001\" DATA "\\\\\000445667\00004081\20404081\444000811\" DATA "\0118\05664\000040044\111044\4444444\090000004\28110004\66670814\" DATA "\\\\00000GC\0000CD666\4400014\204004\8000041\" DATA "\\\\00004\00004\00041\0046702\0000004\" REM -----LEVEL 6------- DATA "\\\\0208\0447044\08001\44644\0414\" DATA "\\\\\2\4644\00040044\18040001\" DATA "\\\\\\2004\4404\0014\" DATA "\\\\\004\204\4\40111\" DATA "0004\8204\440100044\4404004\440004\440004\44444\0\0\" REM -----LEVEL 11------- DATA "0\0\0\0\0\0\402414\0040804\00008\" DATA "0\0\0\0\0\04244\008004444\444704\4441081\" DATA "0\0\0\0\028\054\7\044040444\08001\" DATA "0\0\0\0\0\0\0402444\00081\00144\" DATA "0\0\0\0\0\204\4\4104\4414\" REM -----LEVEL 16------- DATA "0\0\0\0\0028\0044004\B40000104\FC04004B\004110CD\" DATA "0\0\0\0\0\0\0\42404\1808\" DATA "0\0\4024\00564\B4004\B00104\B666B\B100B\FC0CD\" DATA "0\0\0\0\0\004204\0108004\04440444\000001\" DATA "0\0\0004\00041\20005B\44000B\40040B\0040004\0000004\" REM -----LEVEL 21------- DATA "0\0\0\0\0\0\04002441\0040C667\08144\" DATA "0\0\0\00001\21047\47\0\03043\003\" DATA "0\000001\000057\00057\00081\105667\5672\05671\005671\" DATA "0\0\0\0121\0547\0\0\0\0343\" DATA "0\0\0\0\0\021\B470A\B008004\003644\" REM -----LEVEL 26------- DATA "0\0\0\20A57\B4667\0\44\0000A\00AA01\" DATA "0\0\0\GCCCCCCCE\B0000000B\B01004A1\204400054\4\4444444A\" DATA "0\0\0\0\211\B666B\B\B630B\FCCCD\" DATA "0\0\0\0\0004\000024A\00044\0\A44411\" DATA "0\0\0\0\0\4\44201\444048444\0010081\" REM -----LEVEL 31------- DATA "0\0\0\0\0012\04664B\04004B\05667B\0444\" DATA "0\0\0\0\0\402\004404\000004\144104\" DATA "0\0\0\0\092\054004\10004\40014\0A44\" DATA "0\0\1001\5667\1021\5667\1881\5667\1881\" DATA "0\0\0\0\0\0\200440444\6964\41418\" REM -----LEVEL 36------- DATA "0\0\0\0\0\0002A\0047\1000901\4400444\" DATA "0\0\0\29154\4664\1\400A\0A\00A\" DATA "0\0\0\0\0\4440001\0004004\7090192\4666666AA\" DATA "0\0\0\0\0\42\4666664\019101\144A44\" DATA "0\0\0\4402\1004\A0014\400A\414\0A\" REM -----LEVEL 41------- DATA "0\0\0\0\0\00404\4666672\4004444\4104\" DATA "0\0\0\0\0\0\0\20444404\40570571\" DATA "0\0\0\0\0\420444\04100014\0041014\000414\" DATA "0\0\0\0\440004\440024005\4104647\410004005\41040004\" DATA "0\0\0\0\2\6666664\0111904\66AA44\1\" REM -----LEVEL 46------- DATA "0\009\009\009\029\46644004\0004004\040004\000001\" DATA "0\0\1004\440124\0405B\0400B\1400B\110004\44434\" DATA "0\0\0\0\0004\2054\7\664440404\00141\" DATA "0\0\000024\05664\0004\4014\404\1004\404\" DATA "0\0\0\111204\66664\0004\0004\404\1004\" DATA "" #1:MAIN PALETTES 053F2F000038340000280C00003C3830 003D0301003F2A15003F2A15003F2A15 #2:MAIN CHARACTERS 00000000000000000000000000000000 12483E2A7F5D633E00083E3663637F3E 3C7E7E5E2030003600000A205E4E7E36 000000000000000081428181818181FF FF6060FFFF0606FF20BFBFFF02FBFBFF 003F6F5F7F7F3F007FC090A08080C07F 00FFEFDFFFFFFF00FF001020000000FF 00FCEEDEFEFEFC00FE031121010103FE 003C6E5E7E7E3C007EC391A18181C37E 003C6E5E7E7E3C007EFFFFFFFFFFFF7E 1428183C3C241800814A99A5A5BD99FF C3C3C3C3C3C3C3C3BDBDBDBDBDBDBDBD FFFF00000000FFFFFF00FFFFFFFF00FF C3C30307071FFFFEBD3DFDFDFDF903FE FEFF1F070703C3C3FE03F9FDFDFD3DBD C3C3C0E0E0F8FF7FBDBCBFBFBF9FC07F 7FFFF8E0E0C0C3C37FC09FBFBFBFBCBD