'ZOMBIE SHOOTER 'USE BACKGROUND SCROLLING TO SHOW 'MANY ENEMIES AT ONCE 'FREES UP MANY SPRITES, WHICH CAN 'BE USED FOR EFFECTS/BULLETS 'PLAYER AT ONE SIDE CAN MOVE UP 'UP AND DOWN LEFT SIDE OF SCREEN 'ZOMBIES MOVE RIGHT TO LEFT IN 'ROWS 'PLAYER LINES UP WITH A ROW AND 'SHOOTS TO STOP ZOMBIES 'PLAYER CAN THROW BOMBS AND LAY 'TRAPS 'SPRITES '0-2 PLAYER HEAD/LEGS/GUN '?-? BLOOD '? MUZZLE FLASH '?-? BULLETS '?-? SHELLS '? BOMB '?-? FIRE '?-? PICKUPS '?-? TRAPS 'PALETTES '0 PLAYER '1 MUZZLE FLASH/FIRE/BULLETS/SHELL '2 BLOOD '3-7 ZOMBIES/PICKUPS GLOBAL TIME,T,BULS,BI,EQ,GUNS,SHELLS,SI,SR,ZH,ZS,BLOODS,BLI,TXT$,TS,BOMBI,FIRES,FI,PCKPS,PII,TRAPS,TI,BH,JOKE,GMOVR,GOZOMS,GZI,MFI 'EQUIPPED, NUMBER OF GUNS EQ=0 GUNS=5 N=3 'BLOOD SPRITES, SPRITE INDEX BLOODS=8 BLI=N ADD N,BLOODS+1 'MUZZLE FLASH SPRITE MFI=N ADD N,1 'BULLETS, BULLET SPRITE INDEX BULS=10 BI=N ADD N,BULS+1 'SHELLS, SHELL SPRITE INDEX SHELLS=10 SI=N ADD N,SHELLS+1 'BOMB SPRITE INDEX BOMBI=N ADD N,1 'FIRE SPRITES, SPRITE INDEX FIRES=8 FI=N ADD N,FIRES+1 'PICKUPS, SPRITE INDEX PCKPS=5 PII=N ADD N,PCKPS+1 'TRAPS, SPRITE INDEX TRAPS=10 TI=N ADD N,TRAPS+1 '7+3+10+10+8+8+5+10+1 '=63 'GAME OVER ZOMBIES,GO Z INDEX GOZOMS=20 GZI=BLOODS+BLI+1 DIM GLOBAL DIREC(8) 'WAVE,KILLS TOTAL,KILLS LAST, 'ZOMBIES,ZOM AVG DIST,WAVE TIME, 'POINTS,AMMO NEXT,MAX ZOMBIE DIST DIM GLOBAL GSP(GUNS) 'ACTIVATE AMMO SPAWNING FOR EACH DIM GLOBAL PLAYER(6) 'Y,YS,LEGS ANIM,GUN ANIM,SHOOT T,ACTION,TRAP SET 'ACTION 0=IDLE/SHOOTING '1=RELOADING '2=PLACING TRAP DIM GLOBAL EQUIP(GUNS,6) 'FIRE RATE,MAG SIZE,RELOAD TIME, 'TYPE,SHOTS,SOUND,SPRITE INDEX 'TYPES '0= STD AUTOMATIC '1= SPREAD '2= THROWN '3= FLAME DIM GLOBAL AMMO(GUNS,1) 'NUMBER OF RELOADS,CURRENT MAG DIM GLOBAL BUL(BULS,2) 'X,Y,YS DIM GLOBAL SHEL(SHELLS,5) 'X,Y,Z,XS,ZS,T DIM GLOBAL BOM(5) 'X,Y,Z,XS,ZS,T DIM GLOBAL FIR(8,4) 'X,Y,XS,YS,T DIM GLOBAL MFLA(2) 'X,Y,T DIM GLOBAL BLO(BLOODS,4) 'X,Y,XS,YS,T DIM GLOBAL PCKP(PCKPS,2) 'X,Y,TYPE DIM GLOBAL TRAP(TRAPS,3) 'X,Y,TYPE,TTL 'TYPE 0=SLOW '1=DAMAGE '2=ATTRACT DIM GLOBAL ZOM(31,14) 'ZOMBIE HP DIM GLOBAL GOZOM(GOZOMS,1) 'GAME OVER ZOMBIE Y,SPRITE DIM GLOBAL ROW(14) 'SCROLLX OF EACH ROW DIM GLOBAL BIO(14) 'BIOME OF EACH ROW '4=GRASS, NORMAL '36=MUD, MAKES ZOMBIES SLOWER '21=BURIAL GROUND, SPAWNS MORE 'RIFLE EQUIP(0,0)=15 EQUIP(0,1)=20 EQUIP(0,2)=60 EQUIP(0,3)=0 EQUIP(0,4)=0 EQUIP(0,6)=64 'SHOTGUN EQUIP(1,0)=60 EQUIP(1,1)=8 EQUIP(1,2)=120 EQUIP(1,3)=1 EQUIP(1,4)=4 EQUIP(1,6)=96 'SMG EQUIP(2,0)=6 EQUIP(2,1)=30 EQUIP(2,2)=120 EQUIP(2,3)=1 EQUIP(2,4)=0 EQUIP(2,6)=80 'GRENADE EQUIP(3,0)=1 EQUIP(3,1)=1 EQUIP(3,2)=60 EQUIP(3,3)=2 EQUIP(3,4)=0 EQUIP(3,6)=70 'FLAMETHROWER EQUIP(4,0)=3 EQUIP(4,1)=99 EQUIP(4,2)=180 EQUIP(4,3)=3 EQUIP(4,4)=0 EQUIP(4,6)=102 'MINIGUN EQUIP(5,0)=6 EQUIP(5,1)=30 EQUIP(5,2)=120 EQUIP(5,3)=1 EQUIP(5,4)=0 EQUIP(5,6)=86 ON RASTER CALL RAST GAMEPAD 1 MUSIC START: FOR I=0 TO 63 SPRITE I FLIP 0,0 SPRITE OFF I NEXT I BG 0 BG FILL 0,0 TO 31,17 CHAR 0 BG 1 BG FILL 0,0 TO 31,17 CHAR 0 FOR I=0 TO 8 DIREC(I)=0 NEXT I FOR I=0 TO 6 PLAYER(I)=0 NEXT I FOR I=0 TO GUNS AMMO(I,0)=0 AMMO(I,1)=0 NEXT I EQ=0 GMOVR=0 RANDOMIZE TIMER 'BUTTON HOLD TIME BH=TIMER 'SPAWN RATE SR=-1 'ZOMBIE HP ZH=1 'ZOMBIE SPEED ZS=0 'HEADS UP TEXT, TEXT SCROLL TXT$="" TS=0 'JOKE... PLAY AND FIND OUT XD JOKE=0 SPRITE 0 PAL 0 SPRITE 1 PAL 0 SPRITE 2 PAL 0 SPRITE MFI PAL 1 FOR I=BI TO BI+BULS SPRITE I PAL 1 NEXT I FOR I=SI TO SI+SHELLS SPRITE I PAL 1 NEXT I FOR I=FI TO FI+FIRES SPRITE I PAL 1 NEXT I FOR I=BLI TO BLI+BLOODS SPRITE I PAL 2 NEXT I FOR I=0 TO 14 ROW(I)=RND(8) NEXT I 'FOG, MIGHT NOT USE BG 1 PAL 1 BG FILL 0,17 TO 31,17 CHAR 25 FOR I=0 TO 31 TINT I,17 FLIP RND(1),1 NEXT I FOR I=0 TO 14 N=RND(7) IF N=0 THEN BIO(I)=36 ELSE IF N=1 THEN BIO(I)=21 ELSE BIO(I)=4 END IF NEXT I FOR I=0 TO PCKPS PCKP(I,2)=-1 NEXT I FOR I=0 TO TRAPS TRAP(I,3)=-1 NEXT I TIME=0 T=TIMER PLAYER(0)=60 AMMO(EQ,1)=EQUIP(EQ,1) AMMO(EQ,0)=5 SPRITE 0 PAL 3+EQ DIREC(7)=0 ZS=1 '.................... MAIN: IF GMOVR=0 THEN CALL CONTROL CALL UPDATE ELSE CALL GAMEOVER END IF 'MOVE ZOMBIES I=TIMER MOD 15 A=2 FOR N=0 TO TRAPS IF TRAP(N,3)>0 THEN IF TRAP(N,2)=0 AND TRAP(N,1)=I+1 THEN A=A*4 END IF NEXT N IF BIO(I)=36 THEN A=A*3 IF RND(A)=0 OR JOKE<>0 THEN CALL MOVE(I) END IF 'IF JOKE<>0 THEN CALL MOVE(I) 'SPAWN ZOMBIES IF SR>=0 THEN I=TIMER MOD 15 FOR N=0 TO TRAPS IF TRAP(N,3)>0 THEN IF TRAP(N,2)=1 AND RND(2)=0 THEN I=TRAP(N,1)-1 END IF NEXT N IF JOKE<>0 THEN CALL SPAWN(I) IF BIO(I)<>21 AND RND(SR)=0 AND JOKE=0 THEN CALL SPAWN(I) END IF IF BIO(I)=21 AND RND(SR/3)=0 AND JOKE=0 THEN CALL SPAWN(I) END IF END IF 'AMMO/KILLS DISPLAY IF GMOVR=0 THEN BG 1 N=3+EQ IF N>7 THEN N=7 PAL N NUMBER 0,16,AMMO(EQ,1),2 TEXT 2,16,"/" NUMBER 3,16,EQUIP(EQ,1),2 TEXT 5,16,"-" NUMBER 6,16,AMMO(EQ,0),2 PAL 2 NUMBER 9,16,DIREC(1),3 PAL 1 NUMBER 13,16,DIREC(6),3 NUMBER 16,16,0,1 END IF IF TXT$<>"" THEN BG 1 PAL 0 TEXT 20,16,TXT$ INC TS IF TS>=256 THEN TS=0 TXT$="" BG FILL 20,16 TO 31,16 CHAR 0 END IF END IF IF TIMER-T>=60 THEN INC TIME T=TIMER IF TIME MOD 5 =0 THEN CALL DIRECTOR END IF FOR I=0 TO 14 N=INT(ROW(I)/8) IF CELL.C(N,I)<>0 THEN 'ZOMBIE GOT PAST IF GMOVR=0 THEN GMOVR=TIME SPRITE 63,4,PLAYER(0)-8,1 SPRITE 63 PAL 0 SPRITE 62,4,PLAYER(0),2 SPRITE 62 PAL 0 SPRITE 61,6,PLAYER(0)-4,EQUIP(EQ,6) SPRITE 61 PAL 0 SPRITE.A 61,SPRITE.A(0) BG 1 BG FILL 0,16 TO 31,16 CHAR 0 SPRITE 0 PAL 2 SPRITE 1 PAL 2 SPRITE 2 PAL 2 SPRITE 3 PAL 2 SPRITE OFF 0 SPRITE OFF 1 SPRITE OFF 2 SPRITE OFF 3 END IF CALL MKGOZOM(I*8,INT(CELL.C(N,I)/2)*2,CELL.A(N,I) MOD 8) BG 0 CELL N,I,0 BG 1 CELL N,I,0 END IF NEXT I IF TIME=JOKE THEN JOKE=0 BG 0 BG FILL 0,0 TO 31,14 CHAR 0 BG 1 BG FILL 0,0 TO 31,14 CHAR 0 TXT$="JK LOL" END IF END IF WAIT VBL GOTO MAIN '.................... SUB DIRECTOR 'HOW MANY ZOMBIES ARE ACTIVE? 'HOW FAR AWAY ARE THEY? N=0 I=0 A=0 B=0 BG 1 FOR X=0 TO 31 FOR Y=0 TO 14 IF CELL.C(X,Y)<>0 THEN INC N 'AVG ZOMBIE DIST B=((X+(ROW(Y)/8)) MOD 32)-16 ADD I,B 'MAX ZOMBIE DIST IF ABS(B)>ABS(A) THEN A=B END IF NEXT Y NEXT X 'ACTIVE ZOMBIES DIREC(3)=N 'AVG ZOMBIE DISTANCE DIREC(4)=I 'MAX ZOMBIE DIST DIREC(8)=A IF DIREC(3)=0 THEN 'NEW WAVE INC DIREC(0) 'SET ROUND GUNS FOR I=0 TO GUNS GSP(I)=0 NEXT I IF DIREC(0)<2 THEN GSP(0)=1 ELSE FOR I=0 TO DIREC(0)-1 A=RND(DIREC(0)-1) GSP(A MOD GUNS)=1 NEXT I END IF TXT$="WAVE "+STR$(DIREC(0)) INC ZH ADD ZS,0.2 'WAVE TIMER DIREC(5)=TIME 'RANDOMIZE ROW SHIFT FOR I=0 TO 14 ROW(I)=RND(8) NEXT I CALL SPAWN(RND(14)) IF RND(100)=0 THEN 'XD JOKE=TIME+8 END IF 'RESET BIOMES FOR X=0 TO 14 Y=RND(7) IF Y=0 THEN BIO(X)=36 ELSE IF Y=1 THEN BIO(X)=21 ELSE BIO(X)=4 END IF NEXT X END IF 'ACTIVE ZOMBIES N=DIREC(3) 'MAX ZONBIE DIST A=DIREC(8) IF A=0 THEN A=1 IF N=0 THEN N=1 'RATIO OF ZOMBIE DISTANCE 'AND ACTIVE ZOMBIES A=(((DIREC(4)/N)/ABS(A))+1)*60 'HOW MANY KILLS DID PLAYER GET? 'KILLS TOTAL - KILLS LAST N=DIREC(1)-DIREC(2) DIREC(2)=DIREC(1) IF N=0 THEN N=1 'AVG KILLS PER FRAME? B=300/N 'ZOMBIE SPAWN RATE TODO: IF N<=5 THEN SR=60 ELSE SR=A+B+(DIREC(0)*-10) IF SR<0 THEN SR=0 END IF IF TIME-DIREC(5)>=60 THEN SR=-1 END IF END SUB SUB GAMEOVER 'BLOOD FOR I=0 TO BLOODS IF BLO(I,4)>0 THEN ADD BLO(I,0),BLO(I,2) ADD BLO(I,1),BLO(I,3) DEC BLO(I,4) SPRITE BLI+I,BLO(I,0),BLO(I,1),15-INT(BLO(I,4)/7) ELSE SPRITE OFF BLI+I END IF NEXT I 'GAME OVER ZOMBIES FOR I=0 TO GOZOMS IF GOZOM(I,0)>0 THEN IF GOZOM(I,0)>PLAYER(0)+2 THEN ADD GOZOM(I,0),-0.2 ELSE IF GOZOM(I,0)3 THEN N=TIMER MOD 2 IF N=0 THEN 'GAME SPRITE 0,64,52,76 SPRITE 1,72,52,77 SPRITE 2,80,52,78 SPRITE 3,88,52,79 ELSE IF N=1 THEN 'OVER SPRITE 0,64,60,92 SPRITE 1,72,60,93 SPRITE 2,80,60,94 SPRITE 3,88,60,95 END IF TXT$="HOLD B TO RESTART" IF BUTTON TAP(0,1) THEN BH=TIMER IF BUTTON(0,1) AND TIMER-BH=15 THEN GOTO START END IF END SUB SUB UPDATE 'PLAYER ADD PLAYER(0),PLAYER(1) IF PLAYER(0)<4 THEN PLAYER(0)=4 IF PLAYER(0)>124 THEN PLAYER(0)=124 IF PLAYER(4)>0 THEN DEC PLAYER(4) IF PLAYER(3)>0 THEN 'RELOADING/SWAPPING WEAPON IF PLAYER(4)<=0 THEN PLAYER(3)=0 PLAY 0,91+RND(2),1 SOUND 1 IF PLAYER(5)=1 THEN AMMO(EQ,1)=EQUIP(EQ,1) ADD AMMO(EQ,0),-1 PLAYER(5)=0 END IF ELSE IF PLAYER(4)<12 THEN PLAYER(3)=PLAYER(4)/2 ELSE IF EQUIP(EQ,2)-PLAYER(4)<12 THEN PLAYER(3)=(EQUIP(EQ,2)-PLAYER(4))/2 ELSE PLAYER(3)=5 END IF END IF END IF SPRITE 2,4,PLAYER(0)-8,1 SPRITE 1,4,PLAYER(0),2+PLAYER(2) SPRITE 0,6,PLAYER(0)-4,EQUIP(EQ,6)+PLAYER(3) 'BULLETS FOR I=0 TO BULS IF BUL(I,0)>0 THEN ADD BUL(I,0),3 ADD BUL(I,1),BUL(I,2) BG 1 Y=INT((BUL(I,1)-8)/8) IF Y<0 THEN Y=0 IF Y>14 THEN Y=14 X=INT((BUL(I,0)+ROW(Y))/8) MOD 32 IF CELL.C(X,Y)<>0 THEN 'HIT ZOMBIE DEC ZOM(X,Y) PLAY 1,13+RND(4),2 SOUND 2 IF BUL(I,0)<64 THEN DEC ZOM(X,Y) INC DIREC(6) CALL MKBLO(BUL(I,0),BUL(I,1)) IF ZOM(X,Y)<=0 THEN INC DIREC(1) BG 0 IF CELL.C(X,Y)>=46 THEN CALL MKPCKP(X,Y) END IF CELL X,Y,0 BG 1 CELL X,Y,0 END IF BUL(I,0)=0 SPRITE OFF BI+I ELSE IF BUL(I,0)>160 THEN BUL(I,0)=0 SPRITE OFF BI+I 'MAY CHANGE ELSE SPRITE BI+I,BUL(I,0),BUL(I,1),18 END IF END IF NEXT I 'MUZZLE FLASH IF MFLA(2)>0 AND EQUIP(EQ,3)<>2 THEN DEC MFLA(2) SPRITE MFI,MFLA(0),MFLA(1),11-INT(MFLA(2)/5) ELSE SPRITE OFF MFI END IF 'SHELLS FOR I=0 TO SHELLS IF SHEL(I,5)>0 THEN ADD SHEL(I,0),SHEL(I,3) ADD SHEL(I,4),-0.1 ADD SHEL(I,2),SHEL(I,4) IF SHEL(I,2)<=0 THEN SHEL(I,2)=0 SHEL(I,4)=SHEL(I,4)*-0.5 END IF DEC SHEL(I,5) SPRITE SI+I,SHEL(I,0)-4,SHEL(I,1)-SHEL(I,2)-4,17 SPRITE SI+I FLIP INT((TIMER MOD 12)/6),INT((TIMER MOD 16)/8) ELSE SPRITE OFF SI+I END IF NEXT I 'BLOOD FOR I=0 TO BLOODS IF BLO(I,4)>0 THEN ADD BLO(I,0),BLO(I,2) ADD BLO(I,1),BLO(I,3) DEC BLO(I,4) SPRITE BLI+I,BLO(I,0),BLO(I,1),15-INT(BLO(I,4)/7) ELSE SPRITE OFF BLI+I END IF NEXT I 'BOMB IF BOM(5)>0 THEN DEC BOM(5) IF BOM(5)=0 THEN CALL MKEXP(BOM(0),BOM(1)) END IF ADD BOM(0),BOM(3) ADD BOM(4),-0.02 ADD BOM(2),BOM(4) IF BOM(2)<=0 THEN BOM(4)=BOM(4)*-0.5 IF ABS(BOM(4))<0.2 THEN BOM(2)=0 BOM(3)=0 BOM(4)=0 END IF END IF SPRITE BOMBI,BOM(0)-4,BOM(1)-BOM(2)-4,16 IF BOM(3)<>0 THEN N=INT((TIMER MOD 10)/5) ELSE N=0 END IF SPRITE BOMBI FLIP N,0 ELSE SPRITE OFF BOMBI END IF 'FIRE FOR I=0 TO FIRES IF FIR(I,4)>0 THEN ADD FIR(I,0),FIR(I,2) ADD FIR(I,1),FIR(I,3) DEC FIR(I,4) SPRITE FI+I,FIR(I,0)-4,FIR(I,1)-4,15-INT(FIR(I,4)/7) Y=INT((FIR(I,1)-8)/8) IF Y<0 THEN Y=0 IF Y>14 THEN Y=14 X=(INT((FIR(I,0)+ROW(Y))/8)) MOD 32 BG 1 IF CELL.C(X,Y)<>0 THEN INC DIREC(1) INC DIREC(6) CELL X,Y,0 BG 0 IF CELL.C(X,Y)>=46 THEN CALL MKPCKP(X,Y) END IF CELL X,Y,0 CALL MKBLO(FIR(I,0),FIR(I,1)) END IF ELSE SPRITE OFF FI+I END IF NEXT I 'PICKUPS FOR I=0 TO PCKPS IF PCKP(I,2)>=0 THEN IF PCKP(I,0)>4 THEN ADD PCKP(I,0),-0.5 ELSE IF ABS(PLAYER(0)-PCKP(I,1))<8 THEN 'PICKUP ITEM INC AMMO(PCKP(I,2),0) PCKP(I,2)=-1 PLAY 0,79+RND(2),1 SOUND 1 END IF N=19+PCKP(I,2) SPRITE PII+I,PCKP(I,0),PCKP(I,1),N N=3+PCKP(I,2) IF N>7 THEN N=7 SPRITE PII+I PAL N ELSE SPRITE OFF PII+I END IF NEXT I 'TRAPS FOR I=0 TO TRAPS IF TRAP(I,3)>=TIME THEN SPRITE TI+I,TRAP(I,0),TRAP(I,1)*8,26+((TIMER MOD 6)/3)+(TRAP(I,2)*2) IF TRAP(I,2)=2 THEN BG 0 IF CELL.C(3+INT(ROW(TRAP(I,1)-1)/8),TRAP(I,1)-1)<>0 THEN CALL MKEXP(TRAP(I,0),TRAP(I,1)*8) TRAP(I,3)=0 END IF END IF ELSE SPRITE OFF TI+I END IF NEXT I IF PLAYER(5)=2 AND (TIMER MOD 6)/3=0 THEN SPRITE TI+TRAPS+1,24,INT(PLAYER(0)/8)*8,26+(PLAYER(6)*2) ELSE SPRITE OFF TI+TRAPS+1 END IF END SUB SUB CONTROL 'MOVEMENT IF UP(0) THEN IF PLAYER(0)>4 AND PLAYER(1)>-0.5 THEN ADD PLAYER(1),-0.02 END IF ADD PLAYER(2),0.1 IF PLAYER(2)>=7 THEN PLAYER(2)=0 ELSE IF DOWN(0) THEN IF PLAYER(0)<124 AND PLAYER(1)<0.5 THEN ADD PLAYER(1),0.02 END IF ADD PLAYER(2),0.1 IF PLAYER(2)>=7 THEN PLAYER(2)=0 ELSE PLAYER(2)=0 ADD PLAYER(1),SGN(PLAYER(1))*-0.025 IF ABS(PLAYER(1))<0.2 THEN PLAYER(1)=0 END IF 'SHOOTING IF BUTTON(0,0) AND PLAYER(4)<=0 AND AMMO(EQ,1)>0 THEN PLAYER(4)=EQUIP(EQ,0) ADD AMMO(EQ,1),-1 FOR N=0 TO EQUIP(EQ,4) IF EQUIP(EQ,3)<2 THEN 'CREATE BULLETS PLAY 0,61+RND(2),5 SOUND 0 FOR I=0 TO BULS IF BUL(I,0)<=0 THEN BUL(I,0)=12 BUL(I,1)=PLAYER(0)-RND(4) IF EQUIP(EQ,3)=0 THEN BUL(I,2)=0 ELSE IF EQUIP(EQ,3)=1 THEN BUL(I,2)=(RND(10)-5)/15 END IF MFLA(2)=15 MFLA(0)=14 MFLA(1)=PLAYER(0)-5 GOTO SKIP END IF NEXT I ELSE IF EQUIP(EQ,3)=2 AND BOM(5)<=0 THEN 'THROW BOMB BOM(0)=12 BOM(1)=PLAYER(0) BOM(2)=12 BOM(3)=0.5 BOM(4)=0.5 BOM(5)=300 ELSE IF EQUIP(EQ,3)=3 THEN 'FLAMETHROWER PLAY 0,61+(RND(2)*12),10 SOUND 0 CALL MKFIR(14,PLAYER(0),2,(RND(4)-2)/8) END IF SKIP: NEXT N IF EQUIP(EQ,3)<2 THEN CALL MKSHEL(PLAYER(0)) END IF IF BUTTON TAP(0,1) THEN IF TIMER-BH<15 THEN 'DOUBLE TAP 'PLACE TRAPS IF PLAYER(5)=0 THEN PLAYER(5)=2 ELSE IF PLAYER(5)=2 THEN IF DIREC(6)>=15 THEN FOR I=0 TO TRAPS IF TRAP(I,3)<=0 THEN TRAP(I,0)=24 TRAP(I,1)=INT(PLAYER(0)/8) TRAP(I,2)=PLAYER(6) IF PLAYER(6)=2 THEN TRAP(I,3)=TIME+300 ELSE TRAP(I,3)=TIME+30 END IF ADD DIREC(6),-15 GOTO SKIP5 END IF NEXT I ELSE TXT$="!COSTS 150!" END IF SKIP5: PLAYER(5)=0 END IF END IF BH=TIMER END IF IF BUTTON(0,1) AND PLAYER(4)<=0 AND AMMO(EQ,0)>0 AND PLAYER(5)=0 AND TIMER-BH>=15 THEN 'RELOAD PLAYER(4)=EQUIP(EQ,2) PLAYER(3)=1 PLAYER(5)=1 PLAY 0,91+RND(2),1 SOUND 1 END IF IF PLAYER(4)<=0 THEN IF PLAYER(5)=0 THEN 'SWITCH WEAPONS N=EQ IF LEFT TAP(0) OR RIGHT TAP(0) THEN BH=TIMER END IF IF LEFT(0) AND TIMER-BH=15 THEN REPEAT INC EQ IF EQ>GUNS THEN EQ=0 UNTIL AMMO(EQ,0)>0 OR AMMO(EQ,1)>0 OR EQ=N PLAYER(4)=EQUIP(EQ,2) PLAYER(3)=1 N=3+EQ IF N>7 THEN N=7 SPRITE 0 PAL N PLAY 0,91+RND(2),1 SOUND 1 ELSE IF RIGHT(0) AND TIMER-BH=15 THEN REPEAT DEC EQ IF EQ<0 THEN EQ=GUNS UNTIL AMMO(EQ,0)>0 OR AMMO(EQ,1)>0 OR EQ=N PLAYER(4)=EQUIP(EQ,2) PLAYER(3)=1 N=3+EQ IF N>7 THEN N=7 SPRITE 0 PAL N PLAY 0,91+RND(2),1 SOUND 1 END IF ELSE 'SELECT TRAPS IF LEFT TAP(0) THEN DEC PLAYER(6) IF PLAYER(6)<0 THEN PLAYER(6)=2 END IF IF RIGHT TAP(0) THEN INC PLAYER(6) IF PLAYER(6)>2 THEN PLAYER(6)=0 END IF END IF END IF END SUB SUB MKGOZOM(Y,S,P) 'Y,SPRITE,PALETTE BG 1 FOR I=0 TO GOZOMS IF GOZOM(I,0)=0 THEN GOZOM(I,0)=Y GOZOM(I,1)=S-16 SPRITE GZI+(I*2) PAL P FLIP 1,0 SPRITE GZI+(I*2),4,Y,S-16 SPRITE GZI+(I*2)+1 PAL P FLIP 1,0 SPRITE GZI+(I*2)+1,4,Y,S GOTO SKIP6 END IF NEXT I SKIP6: END SUB SUB MKPCKP(X,Y) FOR I=0 TO PCKPS IF PCKP(I,2)<0 THEN 'CREATE PICKUP N=((X*8)-ROW(Y)) MOD 160 WHILE N<0 ADD N,160 WEND PCKP(I,0)=N PCKP(I,1)=(Y*8)+8 PCKP(I,2)=DIREC(7) 'DETERMINE NEXT PICKUP N=DIREC(7) REPEAT INC N IF N>GUNS THEN N=0 IF GSP(N)=1 THEN DIREC(7)=N GOTO SKIP4 TXT$="DID IT!" END IF UNTIL N=DIREC(7) GOTO SKIP4 END IF NEXT I SKIP4: END SUB SUB MKEXP(X,Y) 'MAKE FIRE PLAY 1,14 SOUND 5 CALL MKFIR(X,Y,0.5,0) CALL MKFIR(X,Y,0.5,0.5) CALL MKFIR(X,Y,0,0.5) CALL MKFIR(X,Y,-0.5,0.5) CALL MKFIR(X,Y,-0.5,0) CALL MKFIR(X,Y,-0.5,-0.5) CALL MKFIR(X,Y,0,-0.5) CALL MKFIR(X,Y,0.5,-0.5) END SUB SUB MKFIR(X,Y,XS,YS) FOR I=0 TO FIRES IF FIR(I,4)<=0 THEN FIR(I,0)=X FIR(I,1)=Y FIR(I,2)=XS FIR(I,3)=YS FIR(I,4)=30 GOTO SKIP3 END IF NEXT I SKIP3: END SUB SUB MKBLO(X,Y) FOR I=0 TO BLOODS IF BLO(I,4)<=0 THEN BLO(I,0)=X-4 BLO(I,1)=Y-4 BLO(I,2)=RND(5)/10 BLO(I,3)=(RND(4)-2)/20 BLO(I,4)=30 GOTO SKIP2 END IF NEXT I SKIP2: END SUB SUB MKSHEL(Y) FOR I=0 TO SHELLS IF SHEL(I,5)<=0 THEN SHEL(I,0)=12 SHEL(I,1)=Y+8 SHEL(I,2)=12 SHEL(I,3)=(RND(10)-5)/5 SHEL(I,4)=RND(5)/5 SHEL(I,5)=120 GOTO SKIP1 END IF NEXT I SKIP1: END SUB SUB SPAWN(N) X=INT(ROW(N)/8)+20 X=X MOD 32 B=0 FOR I=0 TO GUNS ADD B,AMMO(I,0) NEXT I A=RND(15) IF B>10 THEN A=RND(13) ELSE IF B<5 THEN IF RND(2)=0 THEN A=14+RND(1) END IF BG 0 PAL 3+RND(4) CELL X,N,32+A BG 1 CELL X,N,48+A ZOM(X,N)=ZH END SUB SUB MOVE(N) IF JOKE=0 THEN ADD ROW(N),ZS+1 ELSE ADD ROW(N),4 END IF IF ROW(N)>256 THEN ADD ROW(N),-256 FOR I=0 TO 31 BG 0 PAL CELL.A(I,N) MOD 8 A=CELL.C(I,N) IF A<>0 THEN IF A MOD 2 =0 THEN CELL I,N,A+1 BG 1 CELL I,N,A+17 ELSE CELL I,N,A-1 BG 1 CELL I,N,A+15 END IF END IF NEXT I END SUB SUB RAST N=INT(RASTER/8) IF N<15 THEN SCROLL 0,ROW(N),0 IF N=0 THEN SCROLL 1,TS,128 ELSE IF N>0 THEN SCROLL 1,ROW(N-1),-8 END IF IF RASTER>12 THEN N=INT((RASTER-12)/8) PALETTE 0,BIO(N),,, ELSE PALETTE 0,4,,, END IF END SUB #1:MAIN PALETTES 051A3E19003D341000352010002E3919 0022382100033A01003C3814000F3A05 #2:MAIN CHARACTERS 00000000000000000000000000000000 182458542000207800183C387E383078 783800343E6666777838383C3E666600 78380060CCCCCCEE78383868CCCCCC08 783800306CD8F81C783838386CD81800 783800303070F0FC783838383070F010 7838006C787078707838386C78706000 7838046CD8D8DCE078383C6CD8D8C000 7838047666CCCEE078383C7666CCC000 00000080000000000000804080000000 0040A040A040000000C0602060C00000 C0A0403040A0C000C06020102060C000 00000010000000000000102810000000 0010106C101000000010284428100000 00145006600A280000346E224C762C00 0049364422422D48086D266240663548 001028542A1408000010186C36180800 00000010080000000000000008000000 80000000000000000000000000000000 7E81FFB9A9958F7E7EFFFFC7D7EBF17E 7E81FF899DA9917E7EFFFFF7E3D7EF7E 7E81FF8DE187997E7EFFFFF39FF9E77E 7E81FF91AD8F857E7EFFFFEFD3F1FB7E 7E81FF9195AD997E7EFFFFEFEBD3E77E 7E81FF95A995A97E7EFFFFEBD7EBD77E 2051AA55AA55AA552051AA55AA55AA55 00201610081840300010081E10087C38 000408341A184030000034081C187C38 F0FAB5FDB5FDB57AF0F8CC84CC84CC78 F0F8B4FEB6FEB478F0F8C884CC84C878 103810000014FB00000000103C7EFB00 001000000014FB00001010103C7EFB00 00E0A4841830040C00185C7CFC7C04FC 00E0A48418300C0400185C7CFC7C1CE4 0E202C0108061B07101F133F1E467B07 1630060012061B07080F393F1E067B47 0008180820040206000606363E3E021E 0008180820040207000606363E3E020F 000601280218090300081E777D3E0F03 000601280218090300081E777D3E0F03 000600111212000C0000363615150F0C 000600111212000C0000363615150F0C 0060902204E00030001C6EDEFCF02030 0060902204E00030001C6EDEFCF02030 00382010642C100400041C6C7C3C103C 00382010642C100800041C6C7C3C1078 3C6E1602003307030010687C0E7C1904 3C6E1602003307030010687C0E7C1904 060E060E1E326200067E460000000062 0E06061E1B1B31001E66460000000031 070F06061E363600071F302000000033 070F031E3E766600077F430000000063 070F03030E1F3333070F1B2300000033 07070303030F0D0D172F0B0B0000000D 03060E0C3C76660003070F0D00000063 030D1D193C7C6C00030C1C1800000066 3C3818181C3667003C3C5C4000000063 385818181C3636003C5C585800000033 30301818386CC6003070D898000000C3 303018183C766C00307058580000006C 0C0C1E061E3E36000C0C7E0600000066 0C0C3C0C1C3633000C0C0C0C00000033 1F3F1E1E1E366600183E3B791D000063 1F3D1D1D1F3C6600183E5ADA1C0000C6 000000227E1C00003C10FFE4781C0000 0000C2223C1800003C13FCE4FC180000 0000C2861C1800001936DCE0FC580000 000082E40E0C00001224DCFA3E7C2000 0000C6A22E0C00000424E8FC3E3C3030 0006C2C6140000000828ECFE3C0C0C0C 000004C4CB6C7C38000004CACD667038 000000C6EE7C3000000000C0EC7C3000 000006CEFC300000000000CCFC300000 031FFCE000000000001EFCE000000000 000406CCFC300000000000CCFC300000 000000C4EE783000000000C0E8783000 3C7AC0C0DECE3478003C46404056CC78 102040409D7D4141081C260263FFC3C3 22444449C5894141003333371F4BC3C3 3F4F577FA0AFBFC0003F383F60707F40 000000C0C4381800000000FFE8741800 000000C0C0287C18000000FFE0647A18 000000C0D0C0783C000106F8E0E0743A 00000020D0E07830020C3040E0E07428 00000020D0E0E0C0020C3040E0E090A0 00000020D0C0C0C0020C3040E0C00000 0000FCF8C0D02E500000F0F4087EFF7E 0000FCF8C0C05E200000F0F4080EFF7E 0018F0F000C244080000E8FD071EBE7C 3060E0C204E8C4080050EBCF1E9EBC18 0000F0E202C4F2700002C7DF07CEEE6E 0000E4C40482F4FA00048EBE0E8EEEE6 3E6C516363640A3C001F33212122663C 664646060E0C2C3C002222626234343C 7EBF800F1F00070F007F60707F60383F 7C7C661F3E204143023F21637EECC7C3 0000002E7C1800000000FFE87C180000 0000C22E3C1800000003FCE8FC180000 0000C28E1C1800000106DCE8FC580000 0000C2E60E0C00000204CCF83E7C2000 0000C4F62E0C00000404C8FA3E3C3030 0004C6F6340000000808CAFE3C0C0C0C 00000026640000000000FFE87C181800 0000C226301000000003FCE8FC1C0600 0000C286101800000106DCE8FC5E0200 0000C2E6080C00000204CCF83E7F2100 0000C4F6280C00000404C8FA3E3F3030 0004C6F0340000000808CAFF3F0C0C0C #15:MAIN SOUND 3800303A000000007801102C003A0000 68028020000000003800303019F00000 0800F06302FFF0003800505000000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 40400040C04000014040000140400001 40400001404000024040000240400002 40C00002404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 2F38000000000000000000002F38002E 38000000000000002F38000000000000 000000002F38002E3800000000000000 2F38000000000000000000002F38002E 38000000000000002F38000000000000 000000002F38002E3800000000000000 1A480000000000000000000000000000 0000214800FF00001D48000000000000 00000000000000000000214800FF0000 1A480000000000000000000000000000 0000000000FF00001A48000000000000 00000000000000000000000000FF0000 1B480000000000000000000000000000 0000224800FF00001E48000000000000 00000000000000000000224800FF0000 1B480000000000000000000000000000 0000000000FF00001B48000000000000 00000000000000000000000000FF0000