'INFORMATION-------------------- 'PROJECT > SHUTTLE 'VERSION > 0.2 'AUTHOR > THELIVINGBLOOPER 'SPRITE-MAP--------------------- 'TITLE ' 0 > PLAYER SHUTTLE (1) ' 1-2 > ARROWS (2) 'GAME ' 0 > PLAYER SHUTTLE (1) ' 1-8 > KNIGHTS (8) ' 9-16 > PROBES (8) ' 18-19 > BOSS (2) ' 20-31 > PROJECTILES (12) ' 32-37 > EXPLOSIONS (6) ' 38-39 > POWER-UPS (2) ' 40-41 > ORBS (2) 'DEATH ' 0 > PLAYER SHUTTLE (1) 'MEMORY-MAP--------------------- '#1:PALETTES ' 0 > UI ' 1 > SPACE ' 2 > ENTITY (BLUE) ' 3 > ENTITY (ORANGE) ' 4 > ENTITY (RED) ' 5 > ENTITY (DAMAGED) ' 6 > FLAME ' 7 > INVISIBLE '#2:CHARACTERS (SECTIONS) ' 0 > UI ' 1 > UI/SPACE/ENTITIES ' 2 > ENTITIES ' 3 > EXPLOSION FRAMES '#3:CHARACTER CLUSTERS (ROWS) ' 0 > "SAVE THE SHUTTLE FORGE!" ' 1 > "PRESS [A] TO START" ' 2 > "SCARAB" ' 3 > "VIPER" ' 4 > "VERMIS" ' 5 > "STRIKE" ' 6 > "FORGE BEAST" ' 7 > "SCORPIUS" ' 8 > "VULCAN" ' 9 > "SHUTTLE" (TOP) ' 10 > "SHUTTLE" (BOTTOM) '#4:AUDIO (SOUNDS) ' 0 > INSTRUMENT (PULSE) ' 1 > INSTRUMENT (SAW) ' 2 > INSTRUMENT (DRUM) ' 3 > INSTRUMENT (BEAT) ' 4 > ENTITY (HIT) ' 5 > ENTITY (SHOOT) ' 6 > ENTITY (CANNON) ' 7 > EXPLOSION '#4:AUDIO (PATTERNS) ' 0 > MUSIC (DEFAULT) ' 10 > MUSIC (VULCAN) 'DATA--------------------------- LEVEL=PEEK($E001) SELECTSHUTTLE=0 SELECTBOSS=-1 TICK=0 WAVEPROGRESS=0 KNIGHT=0 POWERUP=0 PROBE=0 PROJECTILE=0 EXPLOSION=0 GLOBAL LEVEL GLOBAL SELECTSHUTTLE,SELECTBOSS,TICK,WAVEPROGRESS GLOBAL KNIGHT,POWERUP,PROBE,PROJECTILE,EXPLOSION DIM GLOBAL PLAYERDATA(7) ' 0 > MAX HEALTH ' 1 > HEALTH ' 2 > MAX COOLDOWN ' 3 > COOLDOWN ' 4 > X VECTOR ' 5 > Y VECTOR ' 6 > PALETTE ' 7 > HIT FRAME DIM GLOBAL KNIGHTDATA(7,5) ' ?,0 > MAX HEALTH ' ?,1 > HEALTH ' ?,2 > MOVEMENT SEED ' ?,3 > PALETTE ' ?,4 > HIT FRAME ' ?,5 > AVAILABLE DIM GLOBAL PROBEDATA(7,4) ' ?,0 > MAX HEALTH ' ?,1 > HEALTH ' ?,2 > PALETTE ' ?,3 > HIT FRAME ' ?,4 > AVAILABLE DIM GLOBAL BOSSDATA(6) ' 0 > MAX HEALTH ' 1 > HEALTH ' 2 > ATTACK ' 3 > MAX COOLDOWN ' 4 > COOLDOWN ' 5 > PALETTE ' 6 > HIT FRAME DIM GLOBAL POWERUPDATA(1) ' ? > AVAILABLE DIM GLOBAL PROJECTILEDATA(11,6) ' 0 > X VECTOR ' 1 > Y VECTOR ' 2 > DAMAGE ' 3 > COOLDOWN ' 4 > PLAYER ' 5 > PIERCING ' 6 > AVAILABLE DIM GLOBAL EXPLOSIONDATA(5,1) ' ?,0 > FRAME ' ?,1 > AVAILABLE 'OPENING------------------------ OPENING: RANDOMIZE TIMER GAMEPAD 1 PAUSE OFF SOUND SOURCE ROM(4) IF PEEK($E000)=0 THEN TRACK 12,0 BG COPY 0,0,12,1 TO 0,7 WAIT 210 BG FILL 0,7 TO 11,7 CHAR 0 STOP POKE $E000,1 END IF 'TITLE-------------------------- MUSIC TITLE: SELECTSHUTTLE=0 WAVEPROGRESS=0 CALL KILL_SPACE CALL KILL_UI SPRITE OFF STOP 2 STOP 3 ON RASTER CALL ANIM_SPACE CALL INIT_SELECTSHUTTLE CALL INIT_SPACE CALL INIT_TITLE DO CALL UPDA_SELECTSHUTTLE CALL UPDA_SHUTTLENAME CALL UPDA_SPACE CALL UPDA_TITLEMESSAGE CALL UPDA_TITLEUI IF BUTTON(0,0) THEN GOTO GAME INC TICK WAIT VBL LOOP 'GAME--------------------------- GAME: FOR I=0 TO 7 KNIGHTDATA(I,5)=1 PROBEDATA(I,4)=1 NEXT I POWERUPDATA(0)=1 POWERUPDATA(1)=1 FOR I=0 TO 11 PROJECTILEDATA(I,6)=1 NEXT I FOR I=0 TO 5 EXPLOSIONDATA(I,1)=1 NEXT I CALL KILL_SELECTSHUTTLE CALL KILL_UI CALL INIT_PLAYER SELECTBOSS=-1 WAVEPROGRESS=0 DO IF PAUSE THEN IF SELECTBOSS=5 OR SELECTBOSS=6 THEN MUSIC GOTO TITLE END IF CALL UPDA_EXPLOSIONS IF SELECTSHUTTLE=4 THEN CALL UPDA_ORBS CALL UPDA_HEALTHBAR CALL UPDA_KNIGHTS CALL UPDA_PLAYER CALL UPDA_POWERUPS CALL UPDA_PROBES CALL UPDA_PROJECTILES CALL UPDA_SHOTINDICATOR CALL UPDA_SPACE IF SELECTBOSS=-1 THEN IF RND(360)<=1 THEN CALL INIT_KNIGHT(RND(160),-8,RND(1.5)) IF RND(720)<=1 THEN CALL INIT_PROBE(RND(160),-8,0) IF WAVEPROGRESS>=15 AND LEVEL=0 THEN CALL INIT_SCARAB SELECTBOSS=0 WAVEPROGRESS=0 ELSE IF WAVEPROGRESS>=20 AND LEVEL=1 THEN CALL INIT_VIPER SELECTBOSS=1 WAVEPROGRESS=0 ELSE IF WAVEPROGRESS>=25 AND LEVEL=2 THEN CALL INIT_VERMIS SELECTBOSS=2 WAVEPROGRESS=0 ELSE IF WAVEPROGRESS>=30 AND LEVEL=3 THEN CALL INIT_STRIKE SELECTBOSS=3 WAVEPROGRESS=0 ELSE IF WAVEPROGRESS>=35 AND LEVEL=4 THEN CALL INIT_FORGEBEAST SELECTBOSS=4 WAVEPROGRESS=0 ELSE IF WAVEPROGRESS>=20 AND LEVEL=5 THEN STOP 0 STOP 1 MUSIC 10 CALL INIT_VULCAN SELECTBOSS=5 WAVEPROGRESS=0 END IF ELSE IF SELECTBOSS=0 THEN CALL UPDA_BOSSBAR(0) CALL UPDA_SCARAB IF BOSSDATA(1)<=0 AND BOSSDATA(2)=1 THEN CALL INIT_EXPLOSION(SPRITE.X(18)-4+RND(8),SPRITE.Y(18)-4+RND(8),RND(4)) CALL INIT_EXPLOSION(SPRITE.X(18)-4+RND(8),SPRITE.Y(18)-4+RND(8),RND(4)) CALL INIT_EXPLOSION(SPRITE.X(18)-4+RND(8),SPRITE.Y(18)-4+RND(8),RND(4)) SPRITE OFF 18 CALL KILL_BOSSBAR SELECTBOSS=-1 PLAYERDATA(1)=PLAYERDATA(0) INC LEVEL POKE $E001,LEVEL END IF ELSE IF SELECTBOSS=1 THEN CALL UPDA_BOSSBAR(1) CALL UPDA_VIPER IF BOSSDATA(1)<=0 AND BOSSDATA(2)=1 THEN CALL INIT_EXPLOSION(SPRITE.X(18)-4+RND(8),SPRITE.Y(18)-4+RND(8),RND(4)) CALL INIT_EXPLOSION(SPRITE.X(18)-4+RND(8),SPRITE.Y(18)-4+RND(8),RND(4)) CALL INIT_EXPLOSION(SPRITE.X(18)-4+RND(8),SPRITE.Y(18)-4+RND(8),RND(4)) CALL INIT_POWERUP(SPRITE.X(18)+4,SPRITE.Y(18)+4,1) SPRITE OFF 18 CALL KILL_BOSSBAR SELECTBOSS=-1 PLAYERDATA(1)=PLAYERDATA(0) END IF ELSE IF SELECTBOSS=2 THEN CALL UPDA_BOSSBAR(2) CALL UPDA_VERMIS IF BOSSDATA(1)<=0 AND BOSSDATA(2)=1 THEN CALL INIT_EXPLOSION(SPRITE.X(18)-4+RND(8),SPRITE.Y(18)-4+RND(8),RND(4)) CALL INIT_EXPLOSION(SPRITE.X(18)-4+RND(8),SPRITE.Y(18)-4+RND(8),RND(4)) CALL INIT_EXPLOSION(SPRITE.X(18)-4+RND(8),SPRITE.Y(18)-4+RND(8),RND(4)) CALL INIT_POWERUP(SPRITE.X(18)+4,SPRITE.Y(18)+4,1) SPRITE OFF 18 CALL KILL_BOSSBAR SELECTBOSS=-1 PLAYERDATA(1)=PLAYERDATA(0) END IF ELSE IF SELECTBOSS=3 THEN CALL UPDA_BOSSBAR(3) CALL UPDA_STRIKE IF BOSSDATA(1)<=0 AND BOSSDATA(2)=1 THEN CALL INIT_EXPLOSION(SPRITE.X(18)-4+RND(8),SPRITE.Y(18)-4+RND(8),RND(4)) CALL INIT_EXPLOSION(SPRITE.X(18)-4+RND(8),SPRITE.Y(18)-4+RND(8),RND(4)) CALL INIT_EXPLOSION(SPRITE.X(18)-4+RND(8),SPRITE.Y(18)-4+RND(8),RND(4)) CALL INIT_POWERUP(SPRITE.X(18)+4,SPRITE.Y(18)+4,1) SPRITE OFF 18 CALL KILL_BOSSBAR SELECTBOSS=-1 PLAYERDATA(1)=PLAYERDATA(0) END IF ELSE IF SELECTBOSS=4 THEN CALL UPDA_BOSSBAR(4) CALL UPDA_FORGEBEAST IF BOSSDATA(1)<=0 AND BOSSDATA(2)=1 THEN CALL INIT_EXPLOSION(SPRITE.X(18)-4+RND(8),SPRITE.Y(18)-4+RND(8),RND(4)) CALL INIT_EXPLOSION(SPRITE.X(18)-4+RND(8),SPRITE.Y(18)-4+RND(8),RND(4)) CALL INIT_EXPLOSION(SPRITE.X(18)-4+RND(8),SPRITE.Y(18)-4+RND(8),RND(4)) CALL INIT_POWERUP(SPRITE.X(18)+4,SPRITE.Y(18)+4,1) SPRITE OFF 18 CALL KILL_BOSSBAR SELECTBOSS=-1 PLAYERDATA(1)=PLAYERDATA(0) END IF ELSE IF SELECTBOSS=5 THEN CALL UPDA_BOSSBAR(5) CALL UPDA_VULCAN IF BOSSDATA(1)<=0 AND BOSSDATA(2)=2 THEN SPRITE OFF 18 TO 19 CALL INIT_VULCAN SELECTBOSS=6 END IF ELSE IF SELECTBOSS=6 THEN CALL UPDA_BOSSBAR(5) CALL UPDA_DAMAGEDVULCAN IF BOSSDATA(1)<=0 AND BOSSDATA(2)=2 THEN CALL INIT_POWERUP(76,SPRITE.X(18)+16,1) SPRITE OFF 18 TO 19 CALL KILL_BOSSBAR SELECTBOSS=-2 STOP 0 STOP 1 MUSIC END IF END IF IF PLAYERDATA(1)<=0 THEN GOTO DEATH INC TICK WAIT VBL LOOP 'DEATH-------------------------- DEATH: ON RASTER OFF CALL KILL_SPACE CALL KILL_UI STOP IF SELECTBOSS=-2 THEN TRACK 12,0 ELSE TRACK 13,0 END IF SPRITE OFF WAIT 192 STOP IF SELECTBOSS=-2 THEN END ELSE MUSIC GOTO TITLE END IF 'SUBS--------------------------- SUB ANIM_SPACE SCROLL 1,COS(RASTER/24)*2,SCROLL.Y(1) END SUB SUB INIT_EXPLOSION(X,Y,DELAY) ADD EXPLOSION,1,0 TO 5 IF EXPLOSIONDATA(EXPLOSION,1)=1 THEN EXPLOSIONDATA(EXPLOSION,0)=-DELAY EXPLOSIONDATA(EXPLOSION,1)=0 SPRITE EXPLOSION+32,X,Y,192 SPRITE EXPLOSION+32 PAL 6 SIZE 1 PLAY 3,29+RND(10) SOUND 7 END IF END SUB SUB INIT_KNIGHT(X,Y,TYPE) ADD KNIGHT,1,0 TO 7 IF KNIGHTDATA(KNIGHT,5)=1 THEN IF TYPE=0 THEN KNIGHTDATA(KNIGHT,0)=2 KNIGHTDATA(KNIGHT,1)=2 KNIGHTDATA(KNIGHT,2)=X KNIGHTDATA(KNIGHT,3)=2+RND(1.2) KNIGHTDATA(KNIGHT,4)=-1 KNIGHTDATA(KNIGHT,5)=0 SPRITE KNIGHT+1,X,Y,96 SPRITE KNIGHT+1 PAL KNIGHTDATA(KNIGHT,3) FLIP 0,0 ELSE IF TYPE=1 THEN KNIGHTDATA(KNIGHT,0)=3 KNIGHTDATA(KNIGHT,1)=3 KNIGHTDATA(KNIGHT,2)=X KNIGHTDATA(KNIGHT,3)=2+RND(1.4) KNIGHTDATA(KNIGHT,4)=-1 KNIGHTDATA(KNIGHT,5)=0 SPRITE KNIGHT+1,X,Y,98 SPRITE KNIGHT+1 PAL KNIGHTDATA(KNIGHT,3) FLIP 0,0 END IF END IF END SUB SUB INIT_ORBS SPRITE 40,0,0,175 SPRITE 40 PAL 4 SPRITE 41,0,0,175 SPRITE 41 PAL 4 END SUB SUB INIT_PLAYER IF SELECTSHUTTLE=0 THEN PLAYERDATA(0)=8 PLAYERDATA(1)=8 PLAYERDATA(2)=20 PLAYERDATA(3)=0 PLAYERDATA(4)=1 PLAYERDATA(5)=1 PLAYERDATA(6)=2 PLAYERDATA(7)=-1 ELSE IF SELECTSHUTTLE=1 THEN PLAYERDATA(0)=6 PLAYERDATA(1)=6 PLAYERDATA(2)=15 PLAYERDATA(3)=0 PLAYERDATA(4)=2 PLAYERDATA(5)=2 PLAYERDATA(6)=3 PLAYERDATA(7)=-1 ELSE IF SELECTSHUTTLE=2 THEN PLAYERDATA(0)=10 PLAYERDATA(1)=10 PLAYERDATA(2)=30 PLAYERDATA(3)=0 PLAYERDATA(4)=1 PLAYERDATA(5)=1 PLAYERDATA(6)=2 PLAYERDATA(7)=-1 ELSE IF SELECTSHUTTLE=3 THEN PLAYERDATA(0)=12 PLAYERDATA(1)=12 PLAYERDATA(2)=60 PLAYERDATA(3)=0 PLAYERDATA(4)=1 PLAYERDATA(5)=1 PLAYERDATA(6)=2 PLAYERDATA(7)=-1 ELSE IF SELECTSHUTTLE=4 THEN PLAYERDATA(0)=16 PLAYERDATA(1)=16 PLAYERDATA(2)=20 PLAYERDATA(3)=0 PLAYERDATA(4)=1 PLAYERDATA(5)=1 PLAYERDATA(6)=4 PLAYERDATA(7)=-1 CALL INIT_ORBS END IF SPRITE 0,72,88, END SUB SUB INIT_POWERUP(X,Y,TYPE) ADD POWERUP,1,0 TO 1 IF POWERUPDATA(POWERUP)=1 THEN SPRITE 38+POWERUP,X,Y,190+TYPE POWERUPDATA(POWERUP)=0 END IF END SUB SUB INIT_PROBE(X,Y,TYPE) ADD PROBE,1,0 TO 7 IF PROBEDATA(PROBE,4)=1 THEN IF TYPE=0 THEN PROBEDATA(PROBE,0)=1 PROBEDATA(PROBE,1)=1 PROBEDATA(PROBE,2)=3 PROBEDATA(PROBE,3)=-1 PROBEDATA(PROBE,4)=0 SPRITE PROBE+9,X,Y,112 SPRITE PROBE+9 PAL 3 ELSE IF TYPE=1 THEN PROBEDATA(PROBE,0)=2 PROBEDATA(PROBE,1)=2 PROBEDATA(PROBE,2)=6 PROBEDATA(PROBE,3)=-1 PROBEDATA(PROBE,4)=0 SPRITE PROBE+9,X,Y,113 SPRITE PROBE+9 PAL 3 ELSE IF TYPE=2 THEN PROBEDATA(PROBE,0)=3 PROBEDATA(PROBE,1)=3 PROBEDATA(PROBE,2)=4 PROBEDATA(PROBE,3)=-1 PROBEDATA(PROBE,4)=0 SPRITE PROBE+9,X,Y,114 SPRITE PROBE+9 PAL 3 END IF END IF END SUB SUB INIT_PROJECTILE(X,Y,X_VECTOR,Y_VECTOR,TYPE,PLAYER) ADD PROJECTILE,1,0 TO 11 IF PROJECTILEDATA(PROJECTILE,6)=1 THEN IF TYPE=0 OR TYPE=1 THEN PROJECTILEDATA(PROJECTILE,0)=X_VECTOR PROJECTILEDATA(PROJECTILE,1)=Y_VECTOR PROJECTILEDATA(PROJECTILE,2)=1 PROJECTILEDATA(PROJECTILE,3)=0 PROJECTILEDATA(PROJECTILE,4)=PLAYER PROJECTILEDATA(PROJECTILE,5)=0 PROJECTILEDATA(PROJECTILE,6)=0 SPRITE PROJECTILE+20,X,Y,142-(TYPE=1) SPRITE PROJECTILE+20 PAL 6 FLIP 0,Y_VECTOR>0 PLAY 2,39+RND(2) SOUND 5 ELSE IF TYPE=2 THEN PROJECTILEDATA(PROJECTILE,0)=X_VECTOR PROJECTILEDATA(PROJECTILE,1)=Y_VECTOR PROJECTILEDATA(PROJECTILE,2)=2 PROJECTILEDATA(PROJECTILE,3)=3 PROJECTILEDATA(PROJECTILE,4)=PLAYER PROJECTILEDATA(PROJECTILE,5)=1 PROJECTILEDATA(PROJECTILE,6)=0 SPRITE PROJECTILE+20,X,Y,158 SPRITE PROJECTILE+20 PAL 6 FLIP 0,Y_VECTOR>0 PLAY 2,39+RND(2) SOUND 5 ELSE IF TYPE=3 THEN PROJECTILEDATA(PROJECTILE,0)=X_VECTOR PROJECTILEDATA(PROJECTILE,1)=Y_VECTOR PROJECTILEDATA(PROJECTILE,2)=6 PROJECTILEDATA(PROJECTILE,3)=3 PROJECTILEDATA(PROJECTILE,4)=PLAYER PROJECTILEDATA(PROJECTILE,5)=1 PROJECTILEDATA(PROJECTILE,6)=0 SPRITE PROJECTILE+20,X,Y,159 SPRITE PROJECTILE+20 PAL 6 FLIP 0,Y_VECTOR>0 PLAY 2,49+RND(2) SOUND 6 ELSE IF TYPE=4 THEN PROJECTILEDATA(PROJECTILE,0)=X_VECTOR PROJECTILEDATA(PROJECTILE,1)=Y_VECTOR PROJECTILEDATA(PROJECTILE,2)=2 PROJECTILEDATA(PROJECTILE,3)=0 PROJECTILEDATA(PROJECTILE,4)=PLAYER PROJECTILEDATA(PROJECTILE,5)=0 PROJECTILEDATA(PROJECTILE,6)=0 SPRITE PROJECTILE+20,X,Y,174 SPRITE PROJECTILE+20 PAL 6 FLIP 0,Y_VECTOR>0 PLAY 2,39+RND(2) SOUND 5 END IF END IF END SUB SUB INIT_SELECTSHUTTLE SPRITE 0,72,56,100 SPRITE 0 PAL 2 SIZE 1 SPRITE 1,66,60,87 SPRITE 1 PAL 0 SPRITE 2,86,60,87 SPRITE 2 PAL 0 FLIP 1,0 END SUB SUB INIT_SPACE BG 1 PAL 1 PRIO 0 FOR Y=0 TO 31 FOR X=0 TO 19 IF RND<=0.8 THEN CELL X,Y,0 ELSE FLIP RND(1.5),RND(1.5) CELL X,Y,88+RND(7) END IF NEXT X NEXT Y END SUB SUB INIT_TITLE BG 0 PRIO 1 BG COPY 0,9,14,2 TO 3,2 END SUB SUB INIT_SCARAB BOSSDATA(0)=16 BOSSDATA(1)=0 BOSSDATA(2)=0 BOSSDATA(3)=20 BOSSDATA(4)=0 BOSSDATA(5)=2 BOSSDATA(6)=-1 END SUB SUB INIT_VIPER BOSSDATA(0)=16 BOSSDATA(1)=0 BOSSDATA(2)=0 BOSSDATA(3)=20 BOSSDATA(4)=0 BOSSDATA(5)=3 BOSSDATA(6)=-1 END SUB SUB INIT_VERMIS BOSSDATA(0)=24 BOSSDATA(1)=0 BOSSDATA(2)=0 BOSSDATA(3)=30 BOSSDATA(4)=0 BOSSDATA(5)=2 BOSSDATA(6)=-1 END SUB SUB INIT_STRIKE BOSSDATA(0)=32 BOSSDATA(1)=0 BOSSDATA(2)=0 BOSSDATA(3)=60 BOSSDATA(4)=0 BOSSDATA(5)=2 BOSSDATA(6)=-1 END SUB SUB INIT_FORGEBEAST BOSSDATA(0)=48 BOSSDATA(1)=0 BOSSDATA(2)=0 BOSSDATA(3)=10 BOSSDATA(4)=0 BOSSDATA(5)=3 BOSSDATA(6)=-1 END SUB SUB INIT_VULCAN BOSSDATA(0)=72 BOSSDATA(1)=0 BOSSDATA(2)=0 BOSSDATA(3)=60 BOSSDATA(4)=0 BOSSDATA(5)=4 BOSSDATA(6)=-1 END SUB SUB KILL_BOSSBAR BG 0 BG FILL 0,0 TO 19,1 CHAR 0 END SUB SUB KILL_SELECTSHUTTLE SPRITE OFF 1 TO 2 END SUB SUB KILL_SPACE CLS 1 END SUB SUB KILL_UI CLS 0 SCROLL 0,0,0 END SUB SUB UPDA_BOSSBAR(TYPE) BG 0 PAL 0 PRIO 1 FOR X=0 TO BOSSDATA(0)\8-2 IF BOSSDATA(1)\8>X THEN FLIP 0,0 CELL 9-X,0,77 FLIP 1,0 CELL 10+X,0,77 ELSE IF BOSSDATA(1)\8=X THEN FLIP 0,0 CELL 9-X,0,69+(BOSSDATA(1) MOD 8) FLIP 1,0 CELL 10+X,0,69+(BOSSDATA(1) MOD 8) ELSE FLIP 0,0 CELL 9-X,0,69 FLIP 1,0 CELL 10+X,0,69 END IF NEXT X IF BOSSDATA(1)\8>BOSSDATA(0)\8-1 THEN FLIP 0,0 CELL 10-BOSSDATA(0)\8,0,86 FLIP 1,0 CELL 9+BOSSDATA(0)\8,0,86 ELSE IF BOSSDATA(1)\8=BOSSDATA(0)\8-1 THEN FLIP 0,0 CELL 10-BOSSDATA(0)\8,0,78+(BOSSDATA(1) MOD 8) FLIP 1,0 CELL 9+BOSSDATA(0)\8,0,78+(BOSSDATA(1) MOD 8) ELSE FLIP 0,0 CELL 10-BOSSDATA(0)\8,0,78 FLIP 1,0 CELL 9+BOSSDATA(0)\8,0,78 END IF IF TYPE=0 THEN BG COPY 0,2,4,1 TO 8,1 ELSE IF TYPE=1 THEN BG COPY 0,3,4,1 TO 8,1 ELSE IF TYPE=2 THEN BG COPY 0,4,4,1 TO 8,1 ELSE IF TYPE=3 THEN BG COPY 0,5,4,1 TO 8,1 ELSE IF TYPE=4 THEN BG COPY 0,6,6,1 TO 7,1 ELSE IF TYPE=5 THEN BG COPY 0,8,4,1 TO 8,1 END IF END SUB SUB UPDA_EXPLOSIONS FOR I=0 TO 5 IF EXPLOSIONDATA(I,1)=0 THEN IF TICK MOD 4=0 THEN INC EXPLOSIONDATA(I,0) IF EXPLOSIONDATA(I,0)>4 THEN SPRITE OFF I+32 EXPLOSIONDATA(I,1)=1 ELSE IF EXPLOSIONDATA(I,0)>=0 THEN SPRITE I+32,,,192+EXPLOSIONDATA(I,0)*2 END IF END IF NEXT I END SUB SUB UPDA_ORBS SPRITE 40,SPRITE.X(0)+4+COS(TICK/30)*16,SPRITE.Y(0)+4+SIN(TICK/30)*16, SPRITE 41,SPRITE.X(0)+4-COS(TICK/30)*16,SPRITE.Y(0)+4-SIN(TICK/30)*16, IF BUTTON(0,1) AND PLAYERDATA(3)<=0 THEN CALL INIT_PROJECTILE(SPRITE.X(40),SPRITE.Y(40),COS(TICK/30)*3,SIN(TICK/30)*3,4,1) CALL INIT_PROJECTILE(SPRITE.X(41),SPRITE.Y(41),COS(TICK/30)*-3,SIN(TICK/30)*-3,4,1) PLAYERDATA(3)=12 END IF END SUB SUB UPDA_HEALTHBAR BG 0 PAL 0 PRIO 1 FOR X=0 TO PLAYERDATA(0)\2-2 IF PLAYERDATA(1)\2>X THEN FLIP 0,0 CELL X,15,63 FLIP 1,0 CELL 19-X,15,63 ELSE IF PLAYERDATA(1)\2=X THEN FLIP 0,0 CELL X,15,61+(PLAYERDATA(1) MOD 2) FLIP 1,0 CELL 19-X,15,61+(PLAYERDATA(1) MOD 2) ELSE FLIP 0,0 CELL X,15,61 FLIP 1,0 CELL 19-X,15,61 END IF NEXT X IF PLAYERDATA(1)\2>PLAYERDATA(0)\2-1 THEN FLIP 0,0 CELL PLAYERDATA(0)\2-1,15,66 FLIP 1,0 CELL 20-PLAYERDATA(0)\2,15,66 ELSE IF PLAYERDATA(1)\2=PLAYERDATA(0)\2-1 THEN FLIP 0,0 CELL PLAYERDATA(0)\2-1,15,64+(PLAYERDATA(1) MOD 2) FLIP 1,0 CELL 20-PLAYERDATA(0)\2,15,64+(PLAYERDATA(1) MOD 2) ELSE FLIP 0,0 CELL PLAYERDATA(0)\2-1,15,64 FLIP 1,0 CELL 20-PLAYERDATA(0)\2,15,64 END IF END SUB SUB UPDA_KNIGHTS FOR I=0 TO 7 IF KNIGHTDATA(I,5)=0 THEN IF KNIGHTDATA(I,4)>=0 THEN ADD KNIGHTDATA(I,4),1,-1 TO 2 IF KNIGHTDATA(I,4) MOD 2=0 OR KNIGHTDATA(I,4)<0 THEN SPRITE I+1 PAL KNIGHTDATA(I,3) ELSE SPRITE I+1 PAL 5 END IF IF TICK MOD 90<=45 THEN IF SPRITE.C(I+1)=96 THEN SPRITE I+1,,,97 IF SPRITE.C(I+1)=98 THEN SPRITE I+1,,,99 ELSE IF SPRITE.C(I+1)=97 THEN SPRITE I+1,,,96 IF SPRITE.C(I+1)=99 THEN SPRITE I+1,,,98 END IF IF KNIGHTDATA(I,2)+COS(TICK/60)*((KNIGHTDATA(I,2)-76)/2)SPRITE.X(I+1)+1 THEN SPRITE I+1,SPRITE.X(I+1)+1,, END IF SPRITE I+1,,SPRITE.Y(I+1)+SIN(TICK/60)+RND(1.1), IF RND(480)<=1 AND PLAYERDATA(6)<>7 THEN CALL INIT_PROJECTILE(SPRITE.X(I+1),SPRITE.Y(I+1),0,2,0,0) IF SPRITE HIT(I+1,0) AND PLAYERDATA(6)<>7 THEN CALL INIT_EXPLOSION(SPRITE.X(I+1)-4,SPRITE.Y(I+1)-4,0) SPRITE OFF I+1 KNIGHTDATA(I,5)=1 DEC PLAYERDATA(1) PLAYERDATA(7)=0 IF SELECTBOSS=-1 THEN INC WAVEPROGRESS ELSE IF KNIGHTDATA(I,1)<=0 THEN CALL INIT_EXPLOSION(SPRITE.X(I+1)-4,SPRITE.Y(I+1)-4,0) IF RND(40)<=1 THEN CALL INIT_POWERUP(SPRITE.X(I+1),SPRITE.Y(I+1),0) SPRITE OFF I+1 KNIGHTDATA(I,5)=1 IF SELECTBOSS=-1 THEN INC WAVEPROGRESS ELSE IF SPRITE.Y(I+1)>128 THEN SPRITE OFF I+1 KNIGHTDATA(I,5)=1 END IF END IF NEXT I END SUB SUB UPDA_PLAYER DEC PLAYERDATA(3) IF PLAYERDATA(7)>=0 THEN ADD PLAYERDATA(7),1,-1 TO 2 IF SELECTSHUTTLE=4 THEN IF TICK MOD 90<=45 THEN SPRITE 0,,,160 ELSE SPRITE 0,,,128 END IF END IF IF PLAYERDATA(7) MOD 2=0 OR PLAYERDATA(7)<0 THEN SPRITE 0 PAL PLAYERDATA(6) ELSE SPRITE 0 PAL 5 END IF IF LEFT(0) AND SPRITE.X(0)>-2 THEN SPRITE 0,SPRITE.X(0)-PLAYERDATA(4),, END IF IF RIGHT(0) AND SPRITE.X(0)<146 THEN SPRITE 0,SPRITE.X(0)+PLAYERDATA(4),, END IF IF UP(0) AND SPRITE.Y(0)>0 THEN SPRITE 0,,SPRITE.Y(0)-PLAYERDATA(5), END IF IF DOWN(0) AND SPRITE.Y(0)<112 THEN SPRITE 0,,SPRITE.Y(0)+PLAYERDATA(5), END IF IF BUTTON(0,0) AND PLAYERDATA(3)<=0 AND PLAYERDATA(6)<>7 THEN PLAYERDATA(3)=PLAYERDATA(2) IF SELECTSHUTTLE=0 OR SELECTSHUTTLE=1 THEN CALL INIT_PROJECTILE(SPRITE.X(0)+4,SPRITE.Y(0),0,-3,1,1) ELSE IF SELECTSHUTTLE=2 THEN CALL INIT_PROJECTILE(SPRITE.X(0)+4,SPRITE.Y(0),0,-3,2,1) ELSE IF SELECTSHUTTLE=3 THEN CALL INIT_PROJECTILE(SPRITE.X(0)+4,SPRITE.Y(0),0,-3,3,1) ELSE IF SELECTSHUTTLE=4 THEN CALL INIT_PROJECTILE(SPRITE.X(0)+4,SPRITE.Y(0),0,-3,4,1) END IF END IF IF BUTTON TAP(0,1) AND SELECTSHUTTLE=3 THEN IF PLAYERDATA(6)=2 THEN PLAYERDATA(6)=7 SPRITE 0 PAL 7 ELSE IF PLAYERDATA(6)=7 THEN PLAYERDATA(6)=2 SPRITE 0 PAL 2 END IF END IF END SUB SUB UPDA_POWERUPS FOR I=0 TO 1 IF POWERUPDATA(I)=0 THEN IF SELECTBOSS=-2 AND SPRITE.C(I+38)=191 THEN IF SPRITE.Y(I+38)<32 THEN SPRITE I+38,,SPRITE.Y(I+38)+RND(1.5), ELSE SPRITE I+38,SPRITE.X(I+38)+(SPRITE.X(0)+4-SPRITE.X(I+38))/16,SPRITE.Y(I+38)+(SPRITE.Y(0)+4-SPRITE.Y(I+38))/16, IF SPRITE.X(0)+4SPRITE.X(I+38) THEN SPRITE I+38,SPRITE.X(I+38)+RND(1.5),, END IF IF SPRITE.Y(0)+4SPRITE.Y(I+38) THEN SPRITE I+38,,SPRITE.Y(I+38)+RND(1.5), END IF END IF IF SPRITE HIT(I+38,0) THEN SPRITE OFF I+38 POWERUPDATA(I)=1 IF SPRITE.C(I+38)=190 THEN IF PLAYERDATA(1)+2>PLAYERDATA(0) THEN PLAYERDATA(1)=PLAYERDATA(0) ELSE ADD PLAYERDATA(1),2 END IF ELSE IF SPRITE.C(I+38)=191 THEN IF SELECTBOSS=-2 THEN GOTO DEATH ELSE INC LEVEL POKE $E001,LEVEL TRACK 12,3 END IF END IF END IF END IF NEXT I END SUB SUB UPDA_PROBES FOR I=0 TO 7 IF PROBEDATA(I,4)=0 THEN IF PROBEDATA(I,3)>=0 THEN ADD PROBEDATA(I,3),1,-1 TO 2 IF PROBEDATA(I,3) MOD 2=0 OR PROBEDATA(I,3)<0 THEN SPRITE I+9 PAL PROBEDATA(I,2) ELSE SPRITE I+9 PAL 5 END IF IF PLAYERDATA(6)<>7 THEN IF SPRITE.X(0)+4SPRITE.X(I+9) THEN SPRITE I+9,SPRITE.X(I+9)+RND(1.5),, IF SPRITE.C(I+9)=114 OR SPRITE.C(I+9)=115 THEN SPRITE I+9,,,114 SPRITE I+9 FLIP 1,0 END IF END IF IF SPRITE.Y(0)+4SPRITE.Y(I+9) THEN SPRITE I+9,,SPRITE.Y(I+9)+RND(1.5), IF SPRITE.C(I+9)=114 OR SPRITE.C(I+9)=115 THEN SPRITE I+9,,,115 SPRITE I+9 FLIP 0,1 END IF END IF END IF IF SPRITE HIT(I+9,0) AND PLAYERDATA(6)<>7 THEN CALL INIT_EXPLOSION(SPRITE.X(I+9)-4,SPRITE.Y(I+9)-4,0) SPRITE OFF I+9 PROBEDATA(I,4)=1 IF SELECTSHUTTLE=3 THEN ADD PLAYERDATA(1),-1 ELSE ADD PLAYERDATA(1),-2 END IF PLAYERDATA(7)=0 PLAY 3,29+RND(2) SOUND 4 ELSE IF PROBEDATA(I,1)<=0 THEN CALL INIT_EXPLOSION(SPRITE.X(I+9)-4,SPRITE.Y(I+9)-4,0) SPRITE OFF I+9 PROBEDATA(I,4)=1 IF SELECTBOSS=-1 THEN INC WAVEPROGRESS END IF END IF NEXT I END SUB SUB UPDA_PROJECTILES FOR I=0 TO 11 IF PROJECTILEDATA(I,6)=0 THEN DEC PROJECTILEDATA(I,3) SPRITE I+20,SPRITE.X(I+20)+PROJECTILEDATA(I,0),SPRITE.Y(I+20)+PROJECTILEDATA(I,1), IF ((SPRITE HIT(I+20,0) AND PROJECTILEDATA(I,4)=0 AND PLAYERDATA(6)<>7) OR (SPRITE HIT(I+20,1 TO 17) AND PROJECTILEDATA(I,4)=1) OR (SPRITE HIT(I+20,18) AND PROJECTILEDATA(I,4)=1 AND BOSSDATA(5)<>7)) AND PROJECTILEDATA(I,3)<=0 THEN IF PROJECTILEDATA(I,5)=1 THEN PROJECTILEDATA(I,3)=12 ELSE SPRITE OFF I+20 PROJECTILEDATA(I,6)=1 END IF IF HIT=0 AND PLAYERDATA(6)<>7 THEN ADD PLAYERDATA(1),-PROJECTILEDATA(I,2) PLAYERDATA(7)=0 ELSE IF HIT>=1 AND HIT<=8 THEN ADD KNIGHTDATA(HIT-1,1),-PROJECTILEDATA(I,2) KNIGHTDATA(HIT-1,4)=0 ELSE IF HIT>=9 AND HIT<=16 THEN ADD PROBEDATA(HIT-9,1),-PROJECTILEDATA(I,2) PROBEDATA(HIT-9,4)=0 ELSE IF BOSSDATA(5)<>7 THEN ADD BOSSDATA(1),-PROJECTILEDATA(I,2) BOSSDATA(6)=0 END IF PLAY 3,29+RND(2) SOUND 4 ELSE IF SPRITE.X(I+20)<-7 OR SPRITE.X(I+20)>160 OR SPRITE.Y(I+20)<-4 OR SPRITE.Y(I+20)>128 THEN SPRITE OFF I+20 PROJECTILEDATA(I,6)=1 END IF END IF NEXT I END SUB SUB UPDA_SELECTSHUTTLE IF LEFT TAP(0) THEN IF LEVEL=0 THEN SELECTSHUTTLE=0 ELSE ADD SELECTSHUTTLE,-1,0 TO LEVEL-1 END IF IF SELECTSHUTTLE=1 THEN SPRITE 0,71,55,102 SPRITE 0 PAL 3 ELSE IF SELECTSHUTTLE=4 THEN SPRITE 0,71,55,128 SPRITE 0 PAL 4 ELSE SPRITE 0,71,55,100+SELECTSHUTTLE*2 SPRITE 0 PAL 2 END IF SPRITE 1,64,60+SIN(TICK/24)*1.5, SPRITE 2,86,60+SIN(TICK/24)*1.5, ELSE IF RIGHT TAP(0) THEN IF LEVEL=0 THEN SELECTSHUTTLE=0 ELSE ADD SELECTSHUTTLE,1,0 TO LEVEL-1 END IF IF SELECTSHUTTLE=1 THEN SPRITE 0,73,55,102 SPRITE 0 PAL 3 ELSE IF SELECTSHUTTLE=4 THEN SPRITE 0,73,55,128 SPRITE 0 PAL 4 ELSE SPRITE 0,73,55,100+SELECTSHUTTLE*2 SPRITE 0 PAL 2 END IF SPRITE 1,66,60+SIN(TICK/24)*1.5, SPRITE 2,88,60+SIN(TICK/24)*1.5, ELSE SPRITE 0,72,56, SPRITE 1,66,60+SIN(TICK/24)*1.5, SPRITE 2,86,60+SIN(TICK/24)*1.5, END IF END SUB SUB UPDA_SHOTINDICATOR IF PLAYERDATA(3)<=0 THEN BG COPY 0,11,2,1 TO 9,15 ELSE BG COPY 0,12,2,1 TO 9,15 END IF END SUB SUB UPDA_SHUTTLENAME BG FILL 8,10 TO 12,10 CHAR 0 IF SELECTSHUTTLE=0 THEN BG COPY 0,2,4,1 TO 8,10 ELSE IF SELECTSHUTTLE=1 THEN BG COPY 0,3,4,1 TO 8,10 ELSE IF SELECTSHUTTLE=2 THEN BG COPY 0,4,4,1 TO 8,10 ELSE IF SELECTSHUTTLE=3 THEN BG COPY 0,5,4,1 TO 8,10 ELSE IF SELECTSHUTTLE=4 THEN BG COPY 0,7,4,1 TO 8,10 END IF END SUB SUB UPDA_SPACE SCROLL 1,SCROLL.X(1),SCROLL.Y(1)-1 END SUB SUB UPDA_TITLEMESSAGE IF TICK MOD 90<=45 THEN BG COPY 0,1,8,1 TO 6,13 ELSE BG FILL 6,13 TO 13,13 CHAR 0 END IF END SUB SUB UPDA_TITLEUI SCROLL 0,0,SIN(TICK/24)*4 END SUB SUB UPDA_SCARAB IF BOSSDATA(2)=0 THEN IF BOSSDATA(1)=0 THEN ADD BOSSDATA(6),1,-1 TO 2 IF BOSSDATA(6) MOD 2=0 OR BOSSDATA(6)<0 THEN SPRITE 18 PAL BOSSDATA(5) ELSE SPRITE 18 PAL 5 END IF IF BOSSDATA(1)<8 THEN IF (SPRITE.X(0)=SPRITE.X(18) AND SPRITE.X(18)>-2 THEN SPRITE 18,SPRITE.X(18)-RND(1.5),, END IF SPRITE 18,,SPRITE.Y(0)/4-16, IF RND(90)<=1 AND BOSSDATA(4)<=0 AND SPRITE.X(0)SPRITE.X(18)-6 THEN CALL INIT_PROJECTILE(SPRITE.X(18)+4,SPRITE.Y(18)+4,0,3,1,0) BOSSDATA(4)=BOSSDATA(3) END IF ELSE IF SPRITE.X(0)SPRITE.X(18) THEN SPRITE 18,SPRITE.X(18)+RND(1.5),, END IF SPRITE 18,,SPRITE.Y(0)/4-16, IF RND(90)<=1 AND BOSSDATA(4)<=0 THEN CALL INIT_PROJECTILE(SPRITE.X(18)+4,SPRITE.Y(18)+4,0,3,1,0) BOSSDATA(4)=BOSSDATA(3) END IF END IF END IF END SUB SUB UPDA_VIPER IF BOSSDATA(2)=0 THEN IF BOSSDATA(1)=0 THEN ADD BOSSDATA(6),1,-1 TO 2 IF BOSSDATA(6) MOD 2=0 OR BOSSDATA(6)<0 THEN SPRITE 18 PAL BOSSDATA(5) ELSE SPRITE 18 PAL 5 END IF IF BOSSDATA(1)<8 THEN IF (SPRITE.X(0)=SPRITE.X(18) AND SPRITE.X(18)>-2 THEN SPRITE 18,SPRITE.X(18)-1,, END IF SPRITE 18,,SPRITE.Y(0)/4-16, IF RND(90)<=1 AND BOSSDATA(4)<=0 AND SPRITE.X(0)SPRITE.X(18)-6 THEN CALL INIT_PROJECTILE(SPRITE.X(18)+4,SPRITE.Y(18)+4,0,3,1,0) BOSSDATA(4)=BOSSDATA(3) END IF ELSE IF SPRITE.X(0)SPRITE.X(18) THEN SPRITE 18,SPRITE.X(18)+1,, END IF SPRITE 18,,SPRITE.Y(0)/4-16, IF RND(120)<=1 AND BOSSDATA(4)<=0 THEN CALL INIT_PROJECTILE(SPRITE.X(18)+4,SPRITE.Y(18)+4,0,3,1,0) BOSSDATA(4)=BOSSDATA(3) END IF END IF END IF END SUB SUB UPDA_VERMIS IF BOSSDATA(2)=0 THEN IF BOSSDATA(1)=0 THEN ADD BOSSDATA(6),1,-1 TO 2 IF BOSSDATA(6) MOD 2=0 OR BOSSDATA(6)<0 THEN SPRITE 18 PAL BOSSDATA(5) ELSE SPRITE 18 PAL 5 END IF IF BOSSDATA(1)<5 THEN IF SPRITE.X(0)<=SPRITE.X(18) AND SPRITE.X(18)<146 THEN SPRITE 18,SPRITE.X(18)+RND(1.5),, ELSE IF (SPRITE.X(0)>SPRITE.X(18) AND SPRITE.X(18)>-2) OR (SPRITE.X(18)=146 AND SPRITE.X(0)=146) THEN SPRITE 18,SPRITE.X(18)-RND(1.5),, END IF SPRITE 18,,SPRITE.Y(0)/3-16, IF RND(90)<=1 AND BOSSDATA(4)<=0 AND SPRITE.X(0)SPRITE.X(18)-6 THEN CALL INIT_PROJECTILE(SPRITE.X(18)+4,SPRITE.Y(18)+4,0,3,2,0) BOSSDATA(4)=BOSSDATA(3) END IF ELSE IF SPRITE.X(0)SPRITE.X(18) THEN SPRITE 18,SPRITE.X(18)+RND(1.5),, END IF SPRITE 18,,SPRITE.Y(0)/3-16, IF RND(90)<=1 AND BOSSDATA(4)<=0 THEN CALL INIT_PROJECTILE(SPRITE.X(18)+4,SPRITE.Y(18)+4,0,3,2,0) BOSSDATA(4)=BOSSDATA(3) END IF END IF END IF END SUB SUB UPDA_STRIKE IF BOSSDATA(2)=0 THEN IF BOSSDATA(1)=0 THEN ADD BOSSDATA(6),1,-1 TO 2 IF BOSSDATA(6) MOD 2=0 OR BOSSDATA(6)<0 THEN SPRITE 18 PAL BOSSDATA(5) ELSE SPRITE 18 PAL 5 END IF IF BOSSDATA(1)<16 THEN IF (SPRITE.X(0)=SPRITE.X(18) AND SPRITE.X(18)>-2 THEN SPRITE 18,SPRITE.X(18)-RND(1.5),, END IF SPRITE 18,,SPRITE.Y(0)/4-16, IF SPRITE.X(0)SPRITE.X(18)-68 AND NOT (SPRITE.X(0)SPRITE.X(18)-4) THEN BOSSDATA(5)=7 SPRITE 18 PAL 7 ELSE BOSSDATA(5)=2 SPRITE 18 PAL 2 END IF IF RND(90)<=1 AND BOSSDATA(4)<=0 AND SPRITE.X(0)SPRITE.X(18)-3 AND BOSSDATA(5)<>7 THEN CALL INIT_PROJECTILE(SPRITE.X(18)+4,SPRITE.Y(18)+4,0,3,3,0) BOSSDATA(4)=BOSSDATA(3) END IF ELSE IF SPRITE.X(0)SPRITE.X(18) THEN SPRITE 18,SPRITE.X(18)+RND(1.5),, END IF SPRITE 18,,SPRITE.Y(0)/4-16, IF RND(120)<=1 AND BOSSDATA(4)<=0 AND BOSSDATA(5)<>7 THEN CALL INIT_PROJECTILE(SPRITE.X(18)+4,SPRITE.Y(18)+4,0,3,3,0) BOSSDATA(4)=BOSSDATA(3) END IF END IF END IF END SUB SUB UPDA_FORGEBEAST IF BOSSDATA(2)=0 THEN IF BOSSDATA(1)=0 THEN ADD BOSSDATA(6),1,-1 TO 2 IF BOSSDATA(6) MOD 2=0 OR BOSSDATA(6)<0 THEN SPRITE 18 PAL BOSSDATA(5) ELSE SPRITE 18 PAL 5 END IF IF TICK MOD 90<=45 THEN SPRITE 18,,,108 ELSE SPRITE 18,,,110 END IF IF 72+COS(TICK/60)*(512/(BOSSDATA(1)+8))SPRITE.X(18)+1 THEN SPRITE 18,SPRITE.X(18)+1,, END IF SPRITE 18,,(SPRITE.Y(0)/4)*SIN(TICK/60)+24, IF RND(90)<=1 AND BOSSDATA(4)<=0 THEN IF RND(24)<=1 THEN CALL INIT_KNIGHT(SPRITE.X(18)+4,SPRITE.Y(18)+8,1) ELSE IF RND(4)<=1 THEN CALL INIT_PROBE(SPRITE.X(18)+4,SPRITE.Y(18)+8,1) BOSSDATA(4)=BOSSDATA(3) END IF END IF END IF END SUB SUB UPDA_VULCAN IF BOSSDATA(2)=0 THEN IF BOSSDATA(1)0 THEN DEC BOSSDATA(4) IF BOSSDATA(6)>=0 THEN ADD BOSSDATA(6),1,-1 TO 2 IF BOSSDATA(6) MOD 2=0 OR BOSSDATA(6)<0 THEN SPRITE 18 PAL BOSSDATA(5) SPRITE 19 PAL BOSSDATA(5) ELSE SPRITE 18 PAL 5 SPRITE 19 PAL 5 END IF IF 64+COS(TICK/60)*64SPRITE.X(18)+1 THEN SPRITE 18,SPRITE.X(18)+1,, END IF IF 16+SIN(TICK/60)*8SPRITE.Y(18)+1 THEN SPRITE 18,,SPRITE.Y(18)+1, END IF SPRITE 19,SPRITE.X(18),SPRITE.Y(18)-32, IF RND(60)<=1 AND BOSSDATA(4)<=0 THEN CALL INIT_PROJECTILE(SPRITE.X(18)+12,SPRITE.Y(18)+26,0,3,0,0) BOSSDATA(4)=8 ELSE IF RND(600)<=1 AND BOSSDATA(4)<=0 THEN IF RND(4)<=1 THEN CALL INIT_PROBE(SPRITE.X(18)+3,SPRITE.Y(18)+7,2) IF RND(4)<=1 THEN CALL INIT_PROBE(SPRITE.X(18)+21,SPRITE.Y(18)+7,2) IF RND(4)<=1 THEN CALL INIT_PROBE(SPRITE.X(18)+6,SPRITE.Y(18)+16,2) IF RND(4)<=1 THEN CALL INIT_PROBE(SPRITE.X(18)+18,SPRITE.Y(18)+16,2) BOSSDATA(4)=BOSSDATA(3) END IF IF SPRITE HIT(18,0) OR SPRITE HIT(19,0) THEN PLAYERDATA(1)=0 ELSE CALL INIT_EXPLOSION(SPRITE.X(18)+RND(24),SPRITE.Y(18)+RND(24),RND(8)) CALL INIT_EXPLOSION(SPRITE.X(18)+RND(24),SPRITE.Y(18)+RND(24),RND(8)) CALL INIT_EXPLOSION(SPRITE.X(18)+RND(24),SPRITE.Y(18)+RND(24),RND(8)) CALL INIT_EXPLOSION(SPRITE.X(18)+RND(24),SPRITE.Y(18)+RND(24)-32,RND(8)) CALL INIT_EXPLOSION(SPRITE.X(18)+RND(24),SPRITE.Y(18)+RND(24)-32,RND(8)) CALL INIT_EXPLOSION(SPRITE.X(18)+RND(24),SPRITE.Y(18)+RND(24)-32,RND(8)) IF SPRITE.Y(18)>-32 THEN SPRITE 18,,SPRITE.Y(18)-1, SPRITE 19,,SPRITE.Y(19)-1, ELSE BOSSDATA(2)=2 END IF END IF END SUB SUB UPDA_DAMAGEDVULCAN IF BOSSDATA(2)=0 THEN IF BOSSDATA(1)0 THEN DEC BOSSDATA(4) IF BOSSDATA(6)>=0 THEN ADD BOSSDATA(6),1,-1 TO 2 IF BOSSDATA(6) MOD 2=0 OR BOSSDATA(6)<0 THEN SPRITE 18 PAL BOSSDATA(5) SPRITE 19 PAL BOSSDATA(5) ELSE SPRITE 18 PAL 5 SPRITE 19 PAL 5 END IF IF 64+COS(TICK/45)*64SPRITE.X(18)+1 THEN SPRITE 18,SPRITE.X(18)+1,, END IF IF 16+SIN(TICK/45)*8SPRITE.Y(18)+1 THEN SPRITE 18,,SPRITE.Y(18)+1, END IF SPRITE 19,SPRITE.X(18),SPRITE.Y(18)-32, IF RND(30)<=1 AND BOSSDATA(4)<=0 THEN CALL INIT_PROJECTILE(SPRITE.X(18)+12,SPRITE.Y(18)+26,0,3,0,0) BOSSDATA(4)=8 ELSE IF RND(2400)<=1 AND BOSSDATA(4)<=0 THEN IF RND(4)<=1 THEN CALL INIT_PROBE(SPRITE.X(18)+3,SPRITE.Y(18)+7,2) IF RND(4)<=1 THEN CALL INIT_PROBE(SPRITE.X(18)+21,SPRITE.Y(18)+7,2) IF RND(4)<=1 THEN CALL INIT_PROBE(SPRITE.X(18)+6,SPRITE.Y(18)+16,2) IF RND(4)<=1 THEN CALL INIT_PROBE(SPRITE.X(18)+18,SPRITE.Y(18)+16,2) BOSSDATA(4)=BOSSDATA(3) END IF IF SPRITE HIT(18,0) OR SPRITE HIT(19,0) THEN PLAYERDATA(1)=0 ELSE CALL INIT_EXPLOSION(SPRITE.X(18)+RND(24),SPRITE.Y(18)+RND(24),RND(8)) CALL INIT_EXPLOSION(SPRITE.X(18)+RND(24),SPRITE.Y(18)+RND(24),RND(8)) CALL INIT_EXPLOSION(SPRITE.X(18)+RND(24),SPRITE.Y(18)+RND(24),RND(8)) CALL INIT_EXPLOSION(SPRITE.X(18)+RND(24),SPRITE.Y(18)+RND(24)-32,RND(8)) CALL INIT_EXPLOSION(SPRITE.X(18)+RND(24),SPRITE.Y(18)+RND(24)-32,RND(8)) CALL INIT_EXPLOSION(SPRITE.X(18)+RND(24),SPRITE.Y(18)+RND(24)-32,RND(8)) IF SPRITE.Y(18)>-32 THEN SPRITE 18,,SPRITE.Y(18)-1, SPRITE 19,,SPRITE.Y(19)-1, ELSE BOSSDATA(2)=2 END IF END IF END SUB 'ROM---------------------------- #1:PALETTES 003F301100300C03003F0A16003C3924 003D1520003F3F3F003E341200100000 #2:CHARACTERS 00000000000000000000000000000000 007745177500FF000000000000000000 005756542700FF000000000000000000 000E04040400FF000000000000000000 00AEACE8AE00FF000000000000000000 000E08020E00FF000000000000000000 00AAAAEAAE00FF000000000000000000 00EE44444400FF000000000000000000 008E8C88EE00FF000000000000000000 000E080E0800FF000000000000000000 00EEAAACEA00FF000000000000000000 00EE8CA8EE00FF000000000000000000 008080008000C0000000000000000000 0000EEAAEC8A00000000000000000000 0000EEC882EE00000000000000000000 0001E38222E201000000000000000000 00E030D010D0E0000000000000000000 0000EE4A4A4E00000000000000000000 00000E08020E00000000000000000000 0000EE4A4E4A00000000000000000000 0000EEA4C4A400000000000000000000 0E08020E000000000000000000000000 EE8A8EEA000000000000000000000000 EEAACEAA000000000000000000000000 80E0A0E0000000000000000000000000 02020201000000000000000000000000 BB92933A000000000000000000000000 BBB2A33A000000000000000000000000 80800080000000000000000000000000 0A0A0A04000000000000000000000000 EECA8CEA000000000000000000000000 EEE4A4AE000000000000000000000000 E08020E0000000000000000000000000 0E08020E000000000000000000000000 EE4A4C4A000000000000000000000000 EA4C4AEA000000000000000000000000 E0C080E0000000000000000000000000 3B223A23000000000000000000000000 BBAAB2AB000000000000000000000000 B830A0B8000000000000000000000000 233B2A3B000000000000000000000000 BB2A38AB000000000000000000000000 B8109090000000000000000000000000 EE8828EE000000000000000000000000 EEAAACEA000000000000000000000000 EEA4E48E000000000000000000000000 AEA8A2EE000000000000000000000000 00000000000000000A0A0A0400000000 0000000000000000A8A8A8EE00000000 0000000000000000EE8A8EEA00000000 0000000000000000E0A0A0A000000000 1F3F70606060703F0000000000000000 F8FC0E06000000F80000000000000000 183870606060607F0000000000000000 18387060606060600000000000000000 6060606060703F1F0000000000000000 1F3F7161010101010000000000000000 01010101010101010000000000000000 00000000060EFCF80000000000000000 1F3F70606060607F0000000000000000 F8FC0E06000000FE0000000000000000 000000FFFFFFFF00000000FFFFFFFF00 000000FFFFFFFF000000000F0F0F0F00 000000FFFFFFFF000000000000000000 000000FFFEFCF800000000FFFEFCF800 000000FFFEFCF8000000000F0E0C0800 000000FFFEFCF8000000000000000000 000000193367CF00000000193367CF00 000000193367CF000000000000000000 00FFFF000000000000FFFF0000000000 00FEFE000000000000FFFF0000000000 00FCFC000000000000FFFF0000000000 00F8F8000000000000FFFF0000000000 00F0F0000000000000FFFF0000000000 00E0E0000000000000FFFF0000000000 00C0C0000000000000FFFF0000000000 008080000000000000FFFF0000000000 000000000000000000FFFF0000000000 00FF7F000000000000FF7F0000000000 00FE7E000000000000FF7F0000000000 00FC7C000000000000FF7F0000000000 00F878000000000000FF7F0000000000 00F070000000000000FF7F0000000000 00E060000000000000FF7F0000000000 00C040000000000000FF7F0000000000 008000000000000000FF7F0000000000 000000000000000000FF7F0000000000 040C1C3C1C0C04000000000000000000 00100000000040000000000002004000 00040000000000000000000002000000 00000000000840000000002000084000 00200000020800000000000040000000 00000010000000000000000000000000 00000000000000000000000240002000 00002000000004000000200000000400 00000000400800000000020040080000 18243C7EBD5A5A3C183C245ADB666624 18245ABDBD5A5A3C183C66C3DB7E6624 1824A5DBBDBD5A3C183CBDE7DBDB6600 3C424299BDBDDBBD3C7E7EE7DBDBE781 03060C0913272E15010303071E3D3B1F C0603090C8E474A880C0C0E078BCDCF8 02070E0E0C08040C0203070B070F070F 40E070703010203040C0E0D0E0F0E0F0 01070E1E1E16121A01030313131B1F1F 80E070787868485880C0C0C8C8D8F8F8 01030303020202020000020303030303 80C0C0C040404040000040C0C0C0C0C0 0102040C182428140103070F1F3F3F1F 804020301824142880C0E0F0F8FCFCF8 03060C142824281403070F1F3F3F3F1F C060302814241428C0E0F0F8FCFCFCF8 3C42A58181A5423C003C664242663C00 00182C5E7E3C18000000000000000000 00387C7E7E7C38000004033030030400 003C7E7E7E3C18000000181800422424 121508081414131C1F1F0F0F1F1F1F00 48A810102828C838F8F8F0F0F8F8F800 1A0C1A0C1A0C0B0E1F0F1F0F1F0F0F00 583058305830D070F8F0F8F0F8F0F000 1C1A1C1A1C0A0B0E1F1F1F1F1F0F0F00 385838583850D070F8F8F8F8F8F0F000 02050A14121E030303070F1F1F1F0300 40A050284878C0C0C0E0F0F8F8F8C000 0C102733190907040F1F393D1E0E0404 3008E4CC9890E020F0F89CBC78702020 0817331B0A060C000F193D1C0C040800 10E8CCD850603000F098BC3830201000 00030F1F38100B1C030C10173F1F0F1F 00C0F0F81C08D038C03008E8FCF8F0F8 2E5E4E4E464220110F6F7F7F7F7F3F1F 6F575B5B6B777F7FFFEFE7E7F7FFFFFF F6EADADAD6EEFEFEFFF7E7E7EFFFFFFF 747A727262420488F0F6FEFEFEFEFCF8 224242462E1E3F5F0363737F3F1F3F7F 7F706F5F6F371A8DFFFFF0E0D0E8F5FF FE0EF6FAF6EC58B1FFFF0F070B17AFFF 444242627478FCFAC0C6CEFEFCF8FCFE 020202462E1E3F5F0303337F3F1F3F7F 7F706F576F371A8DFFFFF0E8D0E8F5FF FE0FF7FBD6AC58B1FFFF0F072F5FBFFF 4442C2627478FCFAC0C6CEFEFCF8FCFE 00000018180000000000000000000000 00004242424200000000000000000000 08050E04030602010F070F0703070301 10A07020C0604080F0E0F0E0C0E0C080 0B0E2E2E5E4E4E460F0F0F0F6F7F7F7F FFFF7F6F575B5B6BFFFFFFFFEFE7E7F7 FFFFFEF6EADADAD6FFFFFFFFF7E7E7EF D07074747A727262F0F0F0F0F6FEFEFE 9F9F9F9F9F9F9781F8F0F0F3FBFCFFFF C6E2F6EAF6EAF6CAFF7F3F3F3F7FFFFF 63476F576F576F53FFFEFCFCFCFEFFFF F9F9F9F9F9F9E9811F0F0FCFDF3FFFFF 9F9F9F5F5F5F5721F8F0F0737B7C7F3F C6E2F6EAF6EFFFCAFF7F3F3F3F7FFFFF 63476E566F576F53FFFEFCFCFCFEFFFF F9F9F9993979E9811F6F6F0F0F2F7F7F 00C3C3C3C3C381000000000000000000 18181818181818180000000000000000 00030F1F38100B1C030C10171F1F0F0F 00C0F0F81C08D038C03008E8F8F8F0F0 4220110B0E2E2E5E7F3F1F0F0F0F0F6F 777F7FFFFF7F6F57FFFFFFFFFFFFFFEF EEFEFEFFFFFEF6EAFFFFFFFFFFFFFFF7 420488D07074747AFEFCF8F0F0F0F0F6 8353331313131108FF7F3E1E1E1F1F0F F6FAFCFEFEFEFCF8FF1F0F0767678FFF 6F5F3F7F7F7F3F1FFFF8F0E0E6E6F1FF C1CACCC8C8C88810FFFE7C7878F8F8F0 13333313131311081F3F3E1E1E1F1F0F F6FAFCFEFEFEFCF8FF1F0F0767670FBF 6F5F3FFFFFFF3F1FFFF8F0E0E6E6F1FF C1CACCC8C8C88810FFFE7C7878F8F8F0 00183C66663C18000000000000000000 245AA55A5AA55A243C66DBBDBDDB663C 08050E04030602010F07070703030301 10A07020C0604080F0E0E0E0C0C0C080 4E4E464220110B067F7F7F7F3F1F0F07 5B5B6B777F7FFFFFE7E7F7FFFFFFFFFF DADAD6EEFEFEFFFFE7E7EFFFFFFFFFFF 727262420488D060FEFEFEFEFCF8F0E0 040A090804000000070F0F0C00000000 7F706FDF6F371A0DFFFFF0E05028150F FE0EF6FBF6EC58B0FFFF0F070A14A8F0 2050901020000000E0F0F03000000000 040A090804000000070F0F0C00000000 7F706FDF6F371A0DFFFFF0E05028150F FE0EF6FB56AC58B0FFFF0F07AA54A8F0 2060A00000000000E0E0A00000000000 003C7E7E7E3C18000000000000000000 0018187E7E1818000000000000000000 0000000409040217000000040D070318 0000000080D0E0880000008000506078 000000040D070B190000040B12081C27 0000008080F0A078000080407028D844 0000010F1C3914100000041023270C28 000000E01818181800008020E8200004 00070A150628303000070D1B3E383030 000040B068140C0C0000C0F0781C0C0C 000708000000000000070C0800000000 00804000080400000080400008040000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 05010B010100000006020F0101000000 F0E09000000000001060108000000000 06070F0101000000190C100E02010000 D0E090A000000000E810687080000000 10040E0301000000281C120C02010000 14081000000000000C14289080000000 380808120C0100003818181E0F010000 080C0800800000000C0C080080000000 00002020100800000000202010080000 00000000004000000000000000400000 #3:CHARACTER CLUSTERS 00001410012002200320042005200620 0720082009200A200B200C2000000000 0000000000000000000000000D200E20 0F201020112012201320142000000000 00000000000000000000000000000000 00000000152016201720182000000000 00000000000000000000000000000000 00000000000000000000000019201A20 1B201C20000000000000000000000000 00000000000000000000000000000000 000000001D201E201F20202000000000 00000000000000000000000000000000 00000000000000000000000021202220 23202420000000000000000000000000 00000000000000000000000000000000 00000000252026202720282029202A20 00000000000000000000000000000000 0000000000000000000000002B202C20 2D202E20000000000000000000000000 00000000000000000000000000000000 000000002F2030203120322000000000 00000000000000000000000000000000 00000000000000000000000033203420 35203528362036283820382838203828 362000003B203C200000000000000000 00000000343833383530353837203728 392039283920392837203A203B303C30 00000000000000000000000043204328 00000000000000000000000000000000 00000000000000000000000000000000 00000000442044280000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000 #4:AUDIO 280060001C0A000008006066003A0000 7801007F0CFFF0001800303F19FE0000 380020001CFFFF007808602C14FFF000 2400800014FF0000380070000366F200 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 80404040004040400103404001034040 01034040020440400103404001034040 0105404002864040C00B4040070B4040 080B4040090B40400A0B4040408B4040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 190F0300000000000000000000000000 0000190F000000000000000000000000 000000001A0F00000000000000000000 190F0000000000000000000000000000 0000190F000000000000000000000000 000000001D0F000000001D0F00000000 190F0300000000000000000000000000 0000190F000000000000000000000000 000000001A0F01000000000000000000 190F0200000000000000000000000000 00001E0F030000001A0C000000001909 000000001A06001D0300000000000000 190F0300000000000000000000000000 0000190F000000000000000000000000 000000001A0F00000000000000000000 190F0000000000000000000000000000 0000190F00000000000000000000190F 000000001A0F000000001C0F00000000 191F03FF000000000000000000000000 0000191F000000001A1F001A1F00FF00 00000000000000000000000000000000 00000000000000000000000000000000 00001E1F000000001A1F00000000191F 000000001A1F001D1F00000000000000 1D1F0300000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 0000000000000000000000000000192F 000000001A2F000000001C2F00000000 191F03FF000000000000000000000000 0000191F000000001A1F001A1F00FF00 00000000000000000000000000000000 00000000000000000000000000000000 00001E1F000000001A1F000000001E1F 00000000211F00201F00000000000000 201F0300000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 0000000000000000000000000000192F 000000001A2F000000001C2F00000000 252F03000000000000000000262F0000 0000000000000000272F000000000000 00000000282F00000000252F00000000 000000000000262F0000000000000000 0000282F00000000000000000000292F 00000000252F00000000000000000000 262F03000000000000000000272F0000 0000000000000000282F00000000282F 00000000000000000000272F00000000 000000000000262F0000000000000000 0000242F00000000252F000000000000 00000000262F00000000000000000000 282F03000000000000000000292F0000 0000252F00000000000000000000272F 00000000000000000000282F00000000 000000000000292F00000000242F0000 0000000000000000252F000000000000 00000000272F00000000000000000000 252F03000000252F0000000000000000 0000252F00000000000000000000242F 00000000000000000000242F00000000 232F00000000000000000000232F0000 0000000000000000232F000000000000 00000000232F00000000222F00000000 193F030000000000000000001A3F0000 00000000000000001B3F000000000000 000000001C3F00000000000000000000 193F000000000000000000001A3F0000 00000000000000001B3F000000000000 000000001C3F00000000000000000000 1E0F030000001F0F00000000190F0000 00001D0F00000000310F000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 1E0F030000001A0F00000000190F0000 00001D0F000000001A0F00000000180F 00000000190F00000000000000000000 0000000000000D0F0000000000000000 00000000000000000000000000000000 00000000000000000000000000000000