GAMEPAD 1 GLOBAL HASCOLLIDED GAMESTATE = 0 CURRENTLAW = 3 WAVESTATE = 1 SCORE = 0 CASH = 0 REQUIREDTAX = 1 DATA "HPF1",37,"HPF2",44,"HPF3",43,"HPF4",42,"HPF5",41,"HPF6",40,"HPF7",39,"HPF8",38 DATA "WF1",1,"WF2",2 DATA "AF1",33,"AF2",33,"AF3",33,"AF4",33,"AF5",32,"AF6",32,"AF7",32,"AF8",32,"AF9",34,"AF10",34 DATA "PF1",32,"PF2",32,"PF3",36,"PF4",36 DATA "R01",00001,"R02",00011,"R03",00002,"R04",00012,"R05",00023,"R06",00123,"R07",00114,"R08",01122,"R09",01334,"R10",01234 DATA "None ",0,"Sloth ",1,"Tardy ",2,"Coin Waste",3,"Health ",4,"Arrow ",5,"Turn ",6,"PICK UP ",7 DIM HPFRAMES(8) FOR I = 0 TO 7 READ FRAMETYPE$,ANIMFRAME HPFRAMES(I) = ANIMFRAME NEXT I DIM WALKFRAMES(2) FOR I = 0 TO 1 READ FRAMETYPE$,ANIMFRAME WALKFRAMES(I) = ANIMFRAME NEXT I DIM ATTACKFRAMES(10) FOR I = 0 TO 9 READ FRAMETYPE$,ANIMFRAME ATTACKFRAMES(I) = ANIMFRAME NEXT I DIM PICKUPFRAMES(4) FOR I = 0 TO 3 READ FRAMETYPE$,ANIMFRAME PICKUPFRAMES(I) = ANIMFRAME NEXT I DIM ENEMYWAVES(10) FOR I = 0 TO 9 READ FRAMETYPE$,ANIMFRAME ENEMYWAVES(I) = ANIMFRAME NEXT I DIM LAWS$(8) FOR I = 0 TO 7 READ FRAMETYPE$,ANIMFRAME LAWS$(I) = FRAMETYPE$ NEXT I DIM WEBS(5,5) CURRENTWEB = 0 WEBACTIVE = 0 WEBX = 0 WEBY = 0 WEBDX = 0 WEBDY = 0 'ITEMS OPTIONS DIM COINS(5,7) COINTYPE = 0 COINX = 0 COINY = 0 COINDX = 0 COINDY = 0 COINVAL = 0 COINTIMER = 0 DIM ARROWS(2,6) CURRENTARROW = 0 ARROWTYPE = 0 ARROWX = 0 ARROWY = 0 ARROWISLEFT = 0 ARROWSTARTX = 0 ARROWFRAME = 0 ROUND = -1 ENEMIESMAXAMT = 10 DIM ENEMIES(ENEMIESMAXAMT,14) CURRENTENEMY = 0 ENEMYTYPE = 0 ENEMYX=0 ENEMYY=0 ENEMYSTATE=0 ENEMYCBX1 = 0 ENEMYCBX2 = 0 ENEMYCBY1 = 0 ENEMYCBY2 = 0 ENEMYLIFE = 0 ENEMYCOUNTER = 0 ENEMYPAL = 0 ENEMYFLIP = 0 ENEMYFRAME = 0 ENEMYCOINS = 0 GOSUB RESETCHARACTER GOSUB RESETCOLLECTOR GOSUB RESETEXEC FONT 64 DO IF GAMESTATE = 0 THEN GOSUB TITELOOP ELSE IF GAMESTATE = 1 THEN GOSUB GAMELOOP ELSE IF GAMESTATE = 2 THEN GOSUB ENDTITLELOOP END IF LOOP TITELOOP: PAL 1 TEXT 1,7,"TERROR'N TAXES" PAL 0 TEXT 5,9, "PRESS B" IF BUTTON TAP(0,1) THEN CLS BG 1 BG COPY 0,0,32,32 TO 0,0 GAMESTATE = 1 TRACK 2,0 GOSUB DRAWROUND GOSUB DRAWCOINCOUNTER GOSUB DRAWSCORE GOSUB DRAWTAXCOUNTER GOSUB DRAWHP RANDOMIZE TIMER END IF WAIT VBL RETURN GAMELOOP: GOSUB SPAWNWAVE GOSUB PROCESSPLAYER GOSUB PROCESSENEMIES GOSUB PROCESSARROWS GOSUB PROCESSCOINS GOSUB PROCESSWEBS GOSUB PROCESSTAXMAN GOSUB PROCESSEXECUTION GOSUB DRAWLAW WAIT VBL RETURN ENDTITLELOOP: STOP PAL 1 TEXT 4,5,"GAME OVER" PAL 0 TEXT 5,7, "PRESS B" IF BUTTON TAP(0,1) THEN CLS FOR I = 0 TO ENEMIESMAXAMT ENEMIES(I,0) = 0 NEXT I FOR I = 0 TO 1 ARROWS(I,0) = 0 NEXT I FOR I = 0 TO 4 COINS(I,0) = 0 NEXT I WAVESTATE = 1 GOSUB RESETEXEC GOSUB RESETCHARACTER GOSUB RESETCOLLECTOR SPRITE OFF 0 TO 63 GAMESTATE = 0 END IF WAIT VBL RETURN PROCESSTAXMAN: IF TAXSTATE = 0 THEN GOSUB TAXMANIDLESTATE ELSE IF TAXSTATE = 1 THEN GOSUB TAXMANENTRYSTATE ELSE IF TAXSTATE = 2 THEN GOSUB TAXMANPAYMENTSTATE ELSE IF TAXSTATE = 3 THEN GOSUB TAXMANEXITSTATE END IF SPRITE 29,TAXMANX, 64, 11 SPRITE 29 PAL 1 FLIP FROMRIGHT,0 RETURN TAXMANIDLESTATE: ADD TAXFRAMECOUNTER,1 IF TAXFRAMECOUNTER >= 1800 THEN TAXFRAMECOUNTER = 0 TAXSTATE = 1 IF FROMRIGHT THEN TAXMANX = 170 TAXMANTARGX = 130 ELSE TAXMANX = -10 TAXMANTARGX = 30 END IF END IF RETURN TAXMANENTRYSTATE: IF FROMRIGHT THEN ADD TAXMANX,-1 ELSE ADD TAXMANX,1 END IF IF TAXMANX = TAXMANTARGX THEN TAXSTATE = 2 SPRITE 50,TAXMANX, 56,68 SPRITE 50 PAL 3 END IF RETURN TAXMANPAYMENTSTATE: ADD TAXFRAMECOUNTER, 1 SPRITE 50,TAXMANX, 56 + (TIMER/16 MOD 2),68 CALL ISCOLLIDING(PX + 2,PX + 5,PY,PY+8,TAXMANX,TAXMANX + 8,64,64 + 8) IF HASCOLLIDED THEN IF UP(0) THEN ADD PY,3 ELSE IF DOWN(0) THEN ADD PY,-3 END IF IF LEFT(0) THEN ADD PX,3 ELSE IF RIGHT(0) THEN ADD PX,-3 END IF IF CASH AND (UP(0) OR DOWN(0) OR LEFT(0) OR RIGHT(0)) THEN IF REQUIREDTAX <= CASH THEN SPRITE OFF 50 ADD SCORE,CASH * (10 + ROUND) REQUIREDTAX = (CASH + REQUIREDTAX)\2 CASH = 0 TAXFRAMECOUNTER = 0 IF FROMRIGHT THEN TAXMANTARGX = 170 ELSE TAXMANTARGX = -10 STOP TRACK 1,0 ECSTATE = 1 PAIDTAX = 0 IF EX < ABS(160-EX) THEN EXTARGET = -10 ELSE EXTARGET = 170 TAXSTATE = 3 CURRENTLAW = 0 GOSUB DRAWLAW GOSUB DRAWTAXCOUNTER GOSUB DRAWCOINCOUNTER GOSUB DRAWSCORE END IF END IF END IF IF TAXFRAMECOUNTER >= 600 THEN SPRITE OFF 50 TAXFRAMECOUNTER = 0 IF FROMRIGHT THEN TAXMANTARGX = 170 ELSE TAXMANTARGX = -10 IF MUSIC(3) = 0 THEN MUSIC 0 ECSTATE = 0 TAXSTATE = 3 ADD REQUIREDTAX, REQUIREDTAX\5 GOSUB DRAWTAXCOUNTER END IF IF CURRENTLAW = 2 AND TAXSTATE = 2 AND TAXFRAMECOUNTER MOD 60 = 0 THEN ADD REQUIREDTAX,1 GOSUB DRAWTAXCOUNTER END IF RETURN TAXMANEXITSTATE: IF FROMRIGHT THEN ADD TAXMANX,1 ELSE ADD TAXMANX,-1 END IF IF TAXMANX = TAXMANTARGX THEN IF FROMRIGHT THEN FROMRIGHT = 0 ELSE FROMRIGHT = 1 TAXSTATE = 0 CURRENTLAW = RND(7) GOSUB DRAWLAW END IF RETURN PROCESSEXECUTION: IF ECSTATE = 0 THEN FOR A = 0 TO 1 IF ARROWS(A,0) <> 0 THEN CURRENTARROW = A GOSUB AARRTOVAR CALL ISCOLLIDING( ARROWX, ARROWX + 8, ARROWY + 3, ARROWY + 4, EX+4, EX +6,EY,EY + 8 ) IF HASCOLLIDED THEN ECSTATE = 2 ARROWTYPE = 0 END IF GOSUB AVARTOARR END IF NEXT A CALL ISCOLLIDING(PX + 2,PX + 5,PY,PY+8,EX+4, EX +6,EY,EY + 8) IF HASCOLLIDED THEN IF EX > PX THEN ADD PX,-9 ELSE ADD PX,9 PLAY 0,88,0 SOUND 3 ADD PHP,-3 GOSUB DRAWHP ELSE IF PY <> EY THEN IF PY > EY THEN ADD EY,0.5 ELSE ADD EY,-0.5 ELSE IF PX > EX THEN ADD EX,0.5 ELSE ADD EX,-0.5 END IF END IF SPRITE 28 FLIP PX < EX,0 ELSE IF ECSTATE = 1 THEN IF EXTARGET <> EX THEN SPRITE 28 FLIP EXTARGET < EX,0 IF EXTARGET < EX THEN ADD EX,-0.5 ELSE ADD EX,0.5 END IF END IF ELSE IF ECSTATE = 2 THEN ADD STUNFRAMES,-1 SPRITE 28 PAL TIMER/8 MOD 2 IF STUNFRAMES = 0 THEN ADD MAXSTUNFRAMES, -1 STUNFRAMES = MAXSTUNFRAMES SPRITE 28 PAL 1 ECSTATE = 0 END IF END IF IF ECSTATE <> 2 THEN SPRITE 28,EX, EY, 13 + TIMER / 12 MOD 2 RETURN PROCESSARROWS: FOR I = 0 TO 1 IF ARROWS(I,0) <> 0 THEN CURRENTARROW = I GOSUB AARRTOVAR IF (ABS(ARROWSTARTX - ARROWX) > 100) OR (ARROWX < 10) OR (ARROWX > 142) THEN ARROWTYPE = 0 ELSE XOFF = 3 IF ARROWISLEFT = 1 THEN XOFF = -3 ADD ARROWX,XOFF SPRITE 20 + I,ARROWX,ARROWY, 35 SPRITE 20 + I PAL 1 END IF GOSUB AVARTOARR ELSE SPRITE OFF 20 + I END IF NEXT I RETURN PROCESSCOINS: FOR I = 0 TO 4 IF COINS(I,0) <> 0 THEN CURRENTCOIN = I GOSUB COINARRTOVAR ADD COINTIMER, -1 'CHANGE DIR IF ON EDGE OF SCREEN IF COINY <= 58 AND COINDY < 0 THEN COINDY = COINDY * -1 IF COINY >= 120 AND COINDY > 0 THEN COINDY = COINDY * -1 IF COINX <= 10 AND COINDX < 0 THEN COINDX = COINDX * -1 IF COINX >= 142 AND COINDX > 0 THEN COINDX = COINDX * -1 ADD COINX,COINDX ADD COINY,COINDY SPRITE 30 + I,COINX,COINY,TIMER/8 MOD 3 + 7 SPRITE 30 + I PAL 5 FLIP 1,1 IF COINTIMER <= 0 THEN COINTYPE = 0 IF CURRENTLAW = 3 THEN ADD REQUIREDTAX,2 GOSUB DRAWTAXCOUNTER END IF END IF GOSUB COINVARTOARR ELSE SPRITE 30 + I,0,0,0 END IF NEXT I RETURN PROCESSWEBS: FOR I = 0 TO 4 IF WEBS(I,0) <> 0 THEN CURRENTWEB = I GOSUB WEBARRTOVAR CALL ISCOLLIDING(PX + 2,PX + 5,PY,PY+8,WEBX + 1,WEBX + 7,WEBY + 1,WEBY +7) IF HASCOLLIDED THEN WEBACTIVE = 0 PLAY 0,88,0 SOUND 3 IF ENEMYX > PX THEN ADD PX,-9 ELSE ADD PX,9 ADD PHP,-2 GOSUB DRAWHP ELSE ADD WEBX,WEBDX ADD WEBY,WEBDY IF WEBX > 160 OR WEBX < 0 OR WEBY > 120 OR WEBY < 0 THEN WEBACTIVE = 0 END IF SPRITE 40 + I , WEBX,WEBY, 30 + TIMER/12 MOD 2 GOSUB WEBVARTOARR ELSE SPRITE 40 + I , 0,0, 0 END IF NEXT I RETURN PROCESSENEMIES: FOR I = 0 TO ENEMIESMAXAMT IF ENEMIES(I,0) <> 0 THEN CURRENTENEMY = I GOSUB EARRTOVAR IF ENEMYSTATE = 10 THEN GOSUB ENEMYDEATHSTATE GOSUB DRAWENEMY GOSUB EVARTOARR RETURN END IF GOSUB ENEMYPLAYERCOLLISION GOSUB ENEMYARROWSCOLLISION GOSUB ENEMYTYPEPROCESSOR GOSUB DRAWENEMY GOSUB EVARTOARR ELSE SPRITE 10 + I,0,0,0 END IF NEXT I RETURN ENEMYPLAYERCOLLISION: IF IFRAMESLEFT = 0 THEN CALL ISCOLLIDING(PX + 2,PX + 5,PY,PY+8,ENEMYX + ENEMYCBX1,ENEMYX + ENEMYCBX2,ENEMYY + ENEMYCBY1,ENEMYY + ENEMYCBY2) ELSE HASCOLLIDED = 0 END IF IF HASCOLLIDED AND PSTATE <> 4 THEN PLAY 0,88,0 SOUND 3 IF ENEMYX > PX THEN ADD PX,-9 ELSE ADD PX,9 ADD PHP,-1 GOSUB DRAWHP IF ENEMYTYPE = 3 THEN ENEMYFLIP = ABS(ENEMYFLIP-1) IF CURRENTLAW = 4 THEN ADD REQUIREDTAX,5 GOSUB DRAWTAXCOUNTER END IF IFRAMESLEFT = 31 END IF RETURN ENEMYARROWSCOLLISION: FOR A = 0 TO 1 IF ARROWS(A,0) <> 0 THEN CURRENTARROW = A GOSUB AARRTOVAR CALL ISCOLLIDING( ARROWX, ARROWX + 8, ARROWY + 3, ARROWY + 4, ENEMYX + ENEMYCBX1, ENEMYX + ENEMYCBX2,ENEMYY + ENEMYCBY1,ENEMYY + ENEMYCBY2 ) IF HASCOLLIDED THEN ADD ENEMYLIFE,-1 IF ENEMYLIFE <= 0 THEN PLAY 3,25 + RND(11),10 + RND(15) SOUND 5 PLAY 2,25 + RND(11),10 + RND(15) SOUND 5 WAIT 10 GOSUB ADDCOIN ADD SCORE, 100 ENEMYSTATE = 10 ENEMYCOUNTER = 0 ENEMYFRAME = 48 GOSUB DRAWSCORE ELSE ENEMYCOUNTER = 0 ENEMYSTATE = 3 PLAY 3,15,20 SOUND 2 PLAY 2,3,20 SOUND 2 END IF ARROWTYPE = 0 END IF GOSUB AVARTOARR END IF NEXT A RETURN ADDCOIN: ADDED = 0 C =0 WHILE C < 5 AND ADDED < ENEMYCOINS IF COINS(C,0) = 0 THEN CURRENTCOIN = C GOSUB COINARRTOVAR COINTYPE = 1 COINX = ENEMYX + 3 COINY = ENEMYY + 5 COINDX = RND - 0.5 COINDY = RND - 0.5 COINVAL = 10 COINTIMER = 300 + RND(150) GOSUB COINVARTOARR ADD ADDED,1 END IF ADD C,1 WEND RETURN ENEMYDEATHSTATE: ADD ENEMYCOUNTER,1 IF ENEMYCOUNTER = 10 THEN ENEMYTYPE = 0 WAVESTATE = 1 ELSE IF ENEMYCOUNTER MOD 2 = 0 THEN ADD ENEMYFRAME, 1 END IF RETURN ENEMYTYPEPROCESSOR: IF ENEMYLIFE > 0 THEN IF ENEMYTYPE = 1 THEN GOSUB PROCESSZOMBIE ELSE IF ENEMYTYPE = 2 THEN GOSUB PROCESSMAGGOT ELSE IF ENEMYTYPE = 3 THEN GOSUB PROCESSBAT ELSE IF ENEMYTYPE = 4 THEN GOSUB PROCESSSPIDER END IF END IF RETURN PROCESSZOMBIE: 'MOVEMENT IF ENEMYSTATE = 0 THEN ENEMYSTATE = 1 IF ENEMYSTATE = 1 THEN IF TIMER/8 MOD 2 = 0 THEN ENEMYFRAME = 16 IF PY > ENEMYY THEN ADD ENEMYY,0.5 ELSE IF PY < ENEMYY THEN ADD ENEMYY,-0.5 ELSE IF PX > ENEMYX THEN ADD ENEMYX,1 ELSE IF PX < ENEMYX THEN ADD ENEMYX,-1 END IF ELSE ENEMYFRAME = 17 END IF ENEMYPAL = 2 ENEMYFLIP = PX < ENEMYX ELSE IF ENEMYSTATE = 3 THEN IF TIMER/8 MOD 2 = 0 THEN ENEMYPAL = 6 ELSE ENEMYPAL = 2 END IF ADD ENEMYCOUNTER, 1 IF ENEMYCOUNTER >= 30 THEN ENEMYSTATE = 0 END IF RETURN PROCESSMAGGOT: ENEMYPAL = 2 IF ENEMYSTATE = 0 THEN ENEMYSTATE = 1 IF ENEMYSTATE = 1 THEN ENEMYFRAME = 18 + TIMER/12 MOD 3 IF ENEMYFRAME = 18 THEN IF PX > ENEMYX THEN ADD ENEMYX,0.5 ELSE IF PX < ENEMYX THEN ADD ENEMYX,-0.5 ELSE IF PY > ENEMYY THEN ADD ENEMYY,0.5 ELSE IF PY < ENEMYY THEN ADD ENEMYY,-0.5 END IF ENEMYFLIP = PX > ENEMYX END IF ELSE IF ENEMYSTATE = 3 THEN IF TIMER/8 MOD 2 = 0 THEN ENEMYPAL = 6 ELSE ENEMYPAL = 2 END IF ADD ENEMYCOUNTER, 1 IF ENEMYCOUNTER >= 30 THEN ENEMYSTATE = 0 END IF RETURN PROCESSSPIDER: ENEMYFRAME = 28 + TIMER/12 MOD 2 ENEMYPAL = 1 IF ENEMYSTATE = 0 THEN ENEMYSTATE = 1 ENEMYCOUNTER = 10 + RND(130) END IF IF ENEMYSTATE = 1 THEN IF ENEMYCOUNTER < ENEMYX THEN ADD ENEMYX,-0.5 ELSE ADD ENEMYX,0.5 IF ENEMYX = ENEMYCOUNTER THEN ENEMYSTATE = 2 ELSE IF ENEMYSTATE = 2 THEN ADD ENEMYY,0.5 IF ENEMYY = 50 THEN ENEMYSTATE = 4 ENEMYCOUNTER = 0 END IF ELSE IF ENEMYSTATE = 3 THEN ADD ENEMYY,-0.5 IF TIMER/8 MOD 2 = 0 THEN ENEMYPAL = 6 END IF IF ENEMYY = 20 THEN ENEMYPAL = 1 ENEMYCOUNTER = 10 + RND(130) ENEMYSTATE = 1 END IF ELSE IF ENEMYSTATE = 4 THEN ADD ENEMYCOUNTER,1 IF ENEMYCOUNTER = 60 THEN GOSUB SPAWNWEB IF ENEMYCOUNTER = 180 THEN ENEMYSTATE = 5 ELSE IF ENEMYSTATE = 5 THEN ADD ENEMYY,-0.5 IF ENEMYY = 20 THEN ENEMYCOUNTER = 10 + RND(130) ENEMYSTATE = 1 END IF END IF RETURN PROCESSBAT: ENEMYFRAME = 26 + TIMER/8 MOD 2 IF ENEMYSTATE = 0 THEN ADD ENEMYCOUNTER,1 ENEMYPAL = 2 IF ENEMYCOUNTER >= 30 THEN ENEMYSTATE = 1 ENEMYY = PY IF PX > ENEMYX THEN ENEMYFLIP = 1 ELSE ENEMYFLIP = 0 END IF ELSE IF ENEMYSTATE = 1 THEN IF ENEMYFLIP = 1 THEN ADD ENEMYX,1 ELSE ADD ENEMYX,-1 IF ENEMYX <= -10 OR ENEMYX >= 170 THEN ENEMYSTATE = 0 ENEMYCOUNTER = 0 ELSE IF ENEMYSTATE = 3 THEN IF TIMER/8 MOD 2 = 0 THEN ENEMYPAL = 6 ELSE ENEMYPAL = 2 END IF ADD ENEMYCOUNTER, 1 IF ENEMYCOUNTER >= 30 THEN ENEMYSTATE = 1 ENEMYPAL = 2 END IF END IF RETURN DRAWENEMY: SPRITE 10 + CURRENTENEMY, ENEMYX,ENEMYY,ENEMYFRAME SPRITE 10 + CURRENTENEMY PAL ENEMYPAL FLIP ENEMYFLIP,0 RETURN PROCESSPLAYER: IF PHP <= 0 AND PSTATE <> 4 THEN WAIT 30 PSTATE = 4 END IF IF PX < 10 THEN PX = 15 IF PX > 142 THEN PX = 137 IF PSTATE = 0 THEN GOSUB PROCESSIDLESTATE IF PSTATE = 1 THEN GOSUB PROCESSWALKSTATE IF PSTATE = 2 THEN GOSUB PROCESSATTACKSTATE IF PSTATE = 3 THEN GOSUB PROCESSPICKUPSTATE IF PSTATE = 4 THEN GOSUB PROCESSDEATHSTATE IF IFRAMESLEFT > 0 THEN ADD IFRAMESLEFT,-1 IF IFRAMESLEFT MOD 2 <> 0 THEN SPRITE OFF 1 END IF RETURN PROCESSIDLESTATE: PFRAME = 1 IF UP(0) OR DOWN(0) OR LEFT(0) OR RIGHT(0) THEN PSTATE = 1 RETURN END IF IF BUTTON (0,0) THEN PSTATE = 2 RETURN END IF IF BUTTON (0,1) THEN PSTATE = 3 RETURN END IF IF CURRENTLAW = 1 THEN IF TIMER MOD 60 = 0 THEN ADD REQUIREDTAX, 1 GOSUB DRAWTAXCOUNTER END IF END IF SPRITE 1,PX,PY, PFRAME SPRITE 1 FLIP PISFACINGLEFT,0 SPRITE 0,PX ,PY, ATTACKFRAMES(PATTFRAME) SPRITE 0 PAL 1 FLIP PISFACINGLEFT,1 RETURN PROCESSWALKSTATE: PFRAME = WALKFRAMES(TIMER / 12 MOD 2) IF UP(0) AND PY > 50 THEN ADD PY,-1 IF DOWN(0) AND PY < 112 THEN ADD PY,1 IF LEFT(0) AND PX > 10 THEN ADD PX,-1 IF CURRENTLAW = 6 AND PISFACINGLEFT = 0 THEN ADD REQUIREDTAX,1 GOSUB DRAWTAXCOUNTER END IF PISFACINGLEFT = 1 END IF IF RIGHT(0) AND PX < 142 THEN ADD PX,1 IF CURRENTLAW = 6 AND PISFACINGLEFT = 1 THEN ADD REQUIREDTAX,1 GOSUB DRAWTAXCOUNTER END IF PISFACINGLEFT = 0 END IF IF BUTTON (0,0) THEN PSTATE = 2 RETURN END IF IF BUTTON (0,1) THEN PSTATE = 3 RETURN END IF IF NOT (UP(0) OR DOWN(0) OR LEFT(0) OR RIGHT(0)) THEN PSTATE = 0 RETURN END IF SPRITE 1,PX,PY, PFRAME SPRITE 1 FLIP PISFACINGLEFT,0 SPRITE 0,PX ,PY, ATTACKFRAMES(PATTFRAME) SPRITE 0 PAL 1 FLIP PISFACINGLEFT,1 RETURN PROCESSATTACKSTATE: PFRAME = 1 IF PATTFRAME < 10 THEN ADD PATTFRAME,0.25 ELSE PATTFRAME = 0 PSTATE = 0 END IF IF PATTFRAME = 8 THEN GOSUB SPAWNARROW END IF SPRITE 1,PX,PY, PFRAME SPRITE 1 FLIP PISFACINGLEFT,0 SPRITE 0,PX ,PY, ATTACKFRAMES(PATTFRAME) SPRITE 0 PAL 1 FLIP PISFACINGLEFT,1 RETURN PROCESSPICKUPSTATE: PFRAME = 3 SPRITE 1,PX,PY, PFRAME SPRITE 1 FLIP PISFACINGLEFT,0 SPRITE 0,PX ,PY, PICKUPFRAMES(PATTFRAME) SPRITE 0 PAL 1 FLIP PISFACINGLEFT,0 IF PATTFRAME < 3 THEN ADD PATTFRAME,0.25 ELSE IF NOT BUTTON(0,1) THEN PATTFRAME = 0 PSTATE = 0 IF CURRENTLAW = 7 THEN ADD REQUIREDTAX,1 GOSUB DRAWTAXCOUNTER END IF FOR I = 0 TO 4 IF COINS(I,0) <> 0 THEN CURRENTCOIN = I GOSUB COINARRTOVAR CALL ISCOLLIDING(PX + 2,PX + 5,PY,PY+12,COINX,COINX + 8,COINY + 2,COINY + 8) IF HASCOLLIDED THEN COINTYPE = 0 ADD CASH,COINVAL GOSUB DRAWCOINCOUNTER GOSUB COINVARTOARR TRACK 3,3 END IF END IF NEXT I ELSE PATTFRAME = 3 END IF RETURN PROCESSDEATHSTATE: ADD PFRAME,1 SPRITE 1,PX,PY,4 SPRITE OFF 0 IF PFRAME = 60 THEN FOR S = 0 TO 63 SPRITE S,0,0,0 NEXT S GAMESTATE = 2 END IF RETURN 'ENEMY ARRAYS TO VARIABLE EARRTOVAR: ENEMYTYPE = ENEMIES(CURRENTENEMY,0) ENEMYX = ENEMIES(CURRENTENEMY,1) ENEMYY = ENEMIES(CURRENTENEMY,2) ENEMYSTATE = ENEMIES(CURRENTENEMY,3) ENEMYCBX1 = ENEMIES(CURRENTENEMY,4) ENEMYCBX2 = ENEMIES(CURRENTENEMY,5) ENEMYCBY1 = ENEMIES(CURRENTENEMY,6) ENEMYCBY2 = ENEMIES(CURRENTENEMY,7) ENEMYLIFE = ENEMIES(CURRENTENEMY,8) ENEMYCOUNTER = ENEMIES(CURRENTENEMY,9) ENEMYFRAME = ENEMIES(CURRENTENEMY,10) ENEMYPAL = ENEMIES(CURRENTENEMY,11) ENEMYFLIP = ENEMIES(CURRENTENEMY,12) ENEMYCOINS = ENEMIES(CURRENTENEMY,13) RETURN 'ENEMY VARIABLES TO ARRAY EVARTOARR: ENEMIES(CURRENTENEMY,0) = ENEMYTYPE ENEMIES(CURRENTENEMY,1) = ENEMYX ENEMIES(CURRENTENEMY,2) = ENEMYY ENEMIES(CURRENTENEMY,3) = ENEMYSTATE ENEMIES(CURRENTENEMY,4) = ENEMYCBX1 ENEMIES(CURRENTENEMY,5) = ENEMYCBX2 ENEMIES(CURRENTENEMY,6) = ENEMYCBY1 ENEMIES(CURRENTENEMY,7) = ENEMYCBY2 ENEMIES(CURRENTENEMY,8) = ENEMYLIFE ENEMIES(CURRENTENEMY,9) = ENEMYCOUNTER ENEMIES(CURRENTENEMY,10) = ENEMYFRAME ENEMIES(CURRENTENEMY,11) = ENEMYPAL ENEMIES(CURRENTENEMY,12) = ENEMYFLIP ENEMIES(CURRENTENEMY,13) = ENEMYCOINS RETURN 'ARROW ARRAR TO VARIABLES AARRTOVAR: ARROWTYPE = ARROWS(CURRENTARROW,0) ARROWX = ARROWS(CURRENTARROW,1) ARROWY = ARROWS(CURRENTARROW,2) ARROWISLEFT = ARROWS(CURRENTARROW,3) ARROWSTARTX = ARROWS(CURRENTARROW,4) ARROWFRAME = ARROWS(CURRENTARROW,5) RETURN 'ARROW VARIABLES TO ARRAY AVARTOARR: ARROWS(CURRENTARROW,0) = ARROWTYPE ARROWS(CURRENTARROW,1) = ARROWX ARROWS(CURRENTARROW,2) = ARROWY ARROWS(CURRENTARROW,3) = ARROWISLEFT ARROWS(CURRENTARROW,4) = ARROWSTARTX ARROWS(CURRENTARROW,5) = ARROWFRAME RETURN 'COIN ARRAY TO VARIABLES COINARRTOVAR: COINTYPE = COINS(CURRENTCOIN,0) COINX = COINS(CURRENTCOIN,1) COINY = COINS(CURRENTCOIN,2) COINDX = COINS(CURRENTCOIN,3) COINDY = COINS(CURRENTCOIN,4) COINVAL = COINS(CURRENTCOIN,5) COINTIMER = COINS(CURRENTCOIN,6) RETURN 'COIN VARIABLES TO ARRAY COINVARTOARR: COINS(CURRENTCOIN,0) = COINTYPE COINS(CURRENTCOIN,1) = COINX COINS(CURRENTCOIN,2) = COINY COINS(CURRENTCOIN,3) = COINDX COINS(CURRENTCOIN,4) = COINDY COINS(CURRENTCOIN,5) = COINVAL COINS(CURRENTCOIN,6) = COINTIMER RETURN WEBVARTOARR: WEBS(CURRENTWEB,0) = WEBACTIVE WEBS(CURRENTWEB,1) = WEBX WEBS(CURRENTWEB,2) = WEBY WEBS(CURRENTWEB,3) = WEBDX WEBS(CURRENTWEB,4) = WEBDY RETURN WEBARRTOVAR: WEBACTIVE = WEBS(CURRENTWEB,0) WEBX = WEBS(CURRENTWEB,1) WEBY = WEBS(CURRENTWEB,2) WEBDX = WEBS(CURRENTWEB,3) WEBDY = WEBS(CURRENTWEB,4) RETURN SPAWNWAVE: IF WAVESTATE = 1 THEN FOUND = 0 FOR I = 0 TO ENEMIESMAXAMT IF ENEMIES(I,0) <> 0 THEN FOUND = 1 NEXT I IF FOUND = 0 THEN ADD ROUND,1 GOSUB DRAWROUND WAVESTATE = 2 WAVETIMER = 0 END IF ELSE IF WAVESTATE = 2 THEN ADD WAVETIMER, 1 IF WAVETIMER = 60 THEN WAVESTATE = 3 ELSE IF WAVESTATE = 3 THEN DENOMIATOR = 1 NUMERATOR = 10 CURWAVE = 0 IF ROUND < 10 THEN CURWAVE = ENEMYWAVES(ROUND) ELSE FOR I = 0 TO 4 CURWAVE = CURWAVE * 10 + 1+RND(3) NEXT I END IF FOR I = 0 TO 4 ENEMYTYPE = (CURWAVE MOD NUMERATOR)\DENOMIATOR CURRENTENEMY = I DENOMIATOR = NUMERATOR NUMERATOR = NUMERATOR * 10 GOSUB SPAWNENEMY NEXT I WAVESTATE = 0 END IF RETURN SPAWNENEMY: 'TODO CHANGE TYPE X AND Y ENEMYX = 100 ENEMYY = 64 ENEMYSTATE = 0 IF ENEMYTYPE = 1 THEN GOSUB SPAWNZOMBIE ELSE IF ENEMYTYPE = 2 THEN GOSUB SPAWNMAGGOT ELSE IF ENEMYTYPE = 3 THEN GOSUB SPAWNBAT ELSE IF ENEMYTYPE = 4 THEN GOSUB SPAWNSPIDER END IF GOSUB EVARTOARR RETURN SPAWNZOMBIE: ENEMYY = 48 + RND(120-48) IF RND > 0.5 THEN ENEMYX = 0-RND(10) ELSE ENEMYX = 160 + RND(10) ENEMYLIFE = 3 ENEMYCBX1 = 2 ENEMYCBX2 = 6 ENEMYCBY1 = 0 ENEMYCBY2 = 8 ENEMYCOINS = 3 RETURN SPAWNMAGGOT: ENEMYY = 48 + RND(50) IF RND > 0.5 THEN ENEMYX = 0-RND(10) ELSE ENEMYX = 160 + RND(10) ENEMYLIFE = 1 ENEMYCBX1 = 2 ENEMYCBX2 = 6 ENEMYCBY1 = 6 ENEMYCBY2 = 8 ENEMYCOINS = 2 + RND(3) RETURN SPAWNBAT: ENEMYY = 48 + RND(120-48) IF RND > 0.5 THEN ENEMYX = 0-RND(30) ELSE ENEMYX = 160 + RND(30) ENEMYLIFE = 2 ENEMYCBX1 = 0 ENEMYCBX2 = 8 ENEMYCBY1 = 0 ENEMYCBY2 = 8 ENEMYCOINS = 2 RETURN SPAWNSPIDER: ENEMYY = 10 IF RND > 0.5 THEN ENEMYX = 0-RND(10) ELSE ENEMYX = 160 + RND(10) ENEMYLIFE = 2 ENEMYCBX1 = 0 ENEMYCBX2 = 8 ENEMYCBY1 = 0 ENEMYCBY2 = 8 ENEMYCOUNTER = 100 ENEMYCOINS = 2 RETURN SPAWNWEB: ADDED = 0 FOR I = 0 TO 4 IF WEBS(I,0) = 0 AND ADDED = 0 THEN CURRENTWEB = I WEBACTIVE = 1 WEBX = ENEMYX WEBY = ENEMYY WEBDX = PX - WEBX WEBDY = PY - WEBY NORM = SQR(WEBDX * WEBDX + WEBDY * WEBDY) WEBDX = WEBDX/NORM WEBDY = WEBDY/NORM GOSUB WEBVARTOARR ADDED = 1 END IF NEXT I RETURN SPAWNARROW: ADDED = 0 FOR I = 0 TO 1 IF ARROWS(I,0) = 0 AND ADDED = 0 THEN CURRENTARROW = I ARROWTYPE = 1 ARROWX = PX ARROWY = PY ARROWISLEFT = PISFACINGLEFT ARROWSTARTX = PX GOSUB AVARTOARR IF CURRENTLAW = 5 THEN ADD REQUIREDTAX, 1 GOSUB DRAWTAXCOUNTER END IF ADDED = 1 END IF NEXT I RETURN DRAWHP: XPOS = 16 spr = 60 FOR I = 0 TO 1 SPRITE spr,XPOS + I*8,0,46 ADD spr,1 NEXT I spr = 60 SPRITE 59,XPOS - 8 ,0 , 45 SPRITE 63,XPOS + 8 * 2,0,45 SPRITE 63 FLIP 1,0 IF PHP > 0 THEN IF PHP > 8 THEN FOR I = 0 TO PHP\8 - 1 SPRITE spr,XPOS ,0 , HPFRAMES(0) ADD XPOS,8 ADD spr,1 NEXT I END IF SPRITE spr,XPOS,0, HPFRAMES(PHP MOD 8) END IF RETURN DRAWSCORE: TEXT 10,0,"S:" NUMBER 12,0,SCORE,7 RETURN DRAWCOINCOUNTER: TEXT 1,1,"$:" IF CASH < REQUIREDTAX THEN PAL 6 ELSE PAL 4 NUMBER 2,1,CASH,3 PAL 0 RETURN DRAWTAXCOUNTER: TEXT 5,1,"/" NUMBER 6,1,REQUIREDTAX,3 IF CASH < REQUIREDTAX THEN GOSUB DRAWCOINCOUNTER RETURN DRAWROUND: TEXT 16,1,"W:" NUMBER 17,1,ROUND + 1,2 RETURN DRAWLAW: LAWTXT$ = LAWS$(CURRENTLAW) TEXT 1,15,"TAXABLE:" TEXT 9,15,LAWTXT$ RETURN RESETEXEC: ECSTATE = 1 EX = -10 EY = 64 EXTARGET = -10 MAXSTUNFRAMES = 60 STUNFRAMES = MAXSTUNFRAMES SPRITE 28 PAL 1 RETURN RESETCOLLECTOR: SPRITE 29 PAL 1 REQUIREDTAX = 1 PAIDTAX = 0 TAXFRAMECOUNTER = 0 TAXSTATE = 0 TAXMANX = -10 TAXMANTARGX = 0 FROMRIGHT = 0 RETURN RESETCHARACTER: PX = 80 PY = 60 PSTATE = 0 PHP = 15 PWEP = 0 PISFACINGLEFT = 0 PFRAME = 1 PATTFRAME = 0 CURRENTCOIN = 0 CASH = 0 SCORE = 0 IFRAMESLEFT = 0 ROUND = -1 RETURN SUB ISCOLLIDING(C1X1,C1X2,C1Y1,C1Y2,C2X1,C2X2,C2Y1,C2Y2) XCHECK1 = C1X2 >= C2X1 XCHECK2 = C1X1 <= C2X2 YCHECK1 = C1Y1 <= C2Y2 YCHECK2 = C1Y2 >= C2Y1 HASCOLLIDED = XCHECK1 AND XCHECK2 AND YCHECK1 AND YCHECK2 END SUB #1:MAIN PALETTES 053E311A00392A00003C0C00003F3C00 001D2919003F2A1500301500003F2A15 #2:MAIN CHARACTERS 00000000000000000000000000000000 0020181838383828387C606078783800 0020181838383810387C606078783800 000020181838383800387C6060787818 0000003F3E4F0000000040CECEFE7C00 10181018101810182C242C242C242C24 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00000000182C24180000000018343C18 00000000180810180000000018101818 00000000080808080000000008080808 00000000000000000000000000000000 1820787C38307878183860781C3E7870 1820787C3830383C183860781E3C3838 40580800FF023F087878383844383808 4098080FF207382078B8383448383820 00000000000000000000000000000000 001030707C7450507060407010500050 00103070703020207060407040200020 00000000003EFF7F00000000002424A4 00000000003CFE7E00000000002020A0 000000000038FC7C0000000000000080 10181018101852FF2C242C242C246EFF 000502D46AFF7F2A000502944880552A 00050250B5FFFFAA00050250200055AA 000000002200AAFF000000225522AAFF 000000000022AAFF000000000022AAFF 0000C0C7FE78C0400E1C3EB82020C040 0000C0E1F0C0400000003C9E2CCE4000 0000183C3C3C18001824BD6600004281 0000183C3C3C180042423CE700C30000 3C4A89E99791523C00082C781E341000 003C4A6A56523C0000002C381C340000 0004020220020400000000001F000000 00040220020204000000001F00000000 00040222020204000000000000000000 00000000000000000000007E00000000 000004020002220400000000030C1000 00FFFFFFFFFFFF00FF000000000000FF 00FEFEFEFEFEFE00FF000000000000FF 00FCFCFCFCFCFC00FF000000000000FF 00F8F8F8F8F8F800FF000000000000FF 00F0F0F0F0F0F000FF000000000000FF 00E0E0E0E0E0E000FF000000000000FF 00C0C0C0C0C0C000FF000000000000FF 0080808080808000FF000000000000FF 00000000000000000143677F7F674301 0000000000000000FF000000000000FF 00000000000000000000000000000000 00000018180000000000000000000000 00002400002400000000001818000000 00422400002442000000000000000000 00420000000042000000240000240000 00000000000000000042000000004200 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00181818180018000000000000000000 006C6C24000000000000000000000000 00247E24247E24000000000000000000 00083E380E3E08000000000000000000 00626408102646000000000000000000 001C34386E643A000000000000000000 00181830000000000000000000000000 000C183030180C000000000000000000 0030180C0C1830000000000000000000 000024187E1824000000000000000000 000018187E1818000000000000000000 00000000181830000000000000000000 000000007E0000000000000000000000 00000000001818000000000000000000 00060C18306040000000000000000000 003C666E76663C000000000000000000 0018381818187E000000000000000000 003C660C18307E000000000000000000 003C660C06663C000000000000000000 0066667E060606000000000000000000 007E607C06067C000000000000000000 001C307C66663C000000000000000000 007E060C183030000000000000000000 003C663C66663C000000000000000000 003C663E06663C000000000000000000 00000018001800000000000000000000 00000018001830000000000000000000 00000C1830180C000000000000000000 0000007E007E00000000000000000000 000030180C1830000000000000000000 003C660C180018000000000000000000 003C666E6E603C000000000000000000 00183C667E6666000000000000000000 007C667C66667C000000000000000000 003C666060663C000000000000000000 00786C66666C78000000000000000000 007E607860607E000000000000000000 007E6078606060000000000000000000 003C606E66663C000000000000000000 0066667E666666000000000000000000 003C181818183C000000000000000000 001E060606663C000000000000000000 00666C78786C66000000000000000000 0060606060607E000000000000000000 0042667E7E6666000000000000000000 0066767E6E6666000000000000000000 003C666666663C000000000000000000 007C667C606060000000000000000000 003C66666A6C3E000000000000000000 007C667C786C66000000000000000000 003E603C06067C000000000000000000 007E1818181818000000000000000000 0066666666663C000000000000000000 00666666663C18000000000000000000 0066667E7E6642000000000000000000 00663C183C6666000000000000000000 0066663C181818000000000000000000 007E0C1830607E000000000000000000 003C303030303C000000000000000000 006030180C0602000000000000000000 003C0C0C0C0C3C000000000000000000 00183C66000000000000000000000000 0000000000007E000000000000000000 #3:MAIN BG 00001410000800000000000000000000 00000000000000000000000000000000 00000000000000000000000000000004 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000040004000000000000 00000000000000000000000800080000 00000008000800080000000016041704 1704160C160417041704160C16041704 1704160C1604170417041704160C1604 1704160C000005040000000005040504 19041504180415040504000005040000 05041804150405040000050400000504 00041804150405040000000400000000 05041904150418040504190419041504 19040504180415041904190418041504 19041804190419041504190418041904 15041904190419041904150400000004 00000000000000000000000400040004 00000000000000000000000000000000 00000000000000040000000000040004 00000000000000000000000000000000 00000000000000000000000000000000 00000000000400040000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000004000400040004 00000000000000000000000000000000 00000000000000000000000000040004 00040004000400040004000000000000 00000000000000000000000000000000 00000000000000040004000400000000 00000000000000000000000000000000 00000000000000000000000000040004 00040000000000000000000000000000 00000000000000000000000000000000 00000000 #15:MAIN SOUND 2800303A000000001800846C003A0000 08006060000000002800303019FE0000 38002020000000003800505000000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 80C04040010240404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 1B05000000001905000000000000001B 05000000001905000000000000001B05 000000001905000000000000001B0500 0000001905000000000000001B050000 00001905000000000000001B05000000 00190500000000000000FF0000000000 552F00562F00592F0000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 1D2F001C2F001A2F00192F0000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 552F00572F0000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000