'TITLE: DASH ARENA
'MADE BY NOUSERNAME010

'SPRITE NOTES
'0 - PLAYER
'1-16 - ENEMIES
'17-32 - BULLETS
'33-36 - EXPLOSIONS
'37-42 - MINES
'43-63 - UNUSED

'SOUND NOTES:
'
'ROM 14 IS MUSIC
'ROM 15 IS SFX
'
'0 - GAME OVER SFX
'1 - PICKUP SFX
'14 - MINE SFX
'
'VOICES 0-2 ARE STRICTLY MUSIC.
'VOICE 3 IS PURELY SFX
'
'SFX HEIRARCHY (TOP IS PLAYED INSTEAD)
'GAME OVER SFX
'PICKUP SFX
'MINE EXPLOSION SFX
'MINE PLACEMENT SFX
'DASH END SFX
'LOW TIMER SFX

'PERSISTENT RAM NOTES
'$E000 TO $E003 - HIGH SCORE
'$E004 - IF SHAKE IS OFF
'$E005 - IF MUSIC IS OFF
'$E006 - IF TITLE EFFECT IS OFF

GAMEPAD 1
RANDOMIZE TIMER

INIT:
'ENEMY VARS
'0 - STATUS
'1 - TYPE
'2 - XPOS
'3 - YPOS
'4 - HEALTH
'5 - DAMAGE
'6 - CHAR
'7 - DEATH CHAR
'8 - COOLDOWN TIMER
'9 - SHOOT COOLDOWN TIMER
'10 - MOVEMENT STATE

'ENEMY STATUS INFO
'0=INACTIVE
'1=SPAWNING
'2=ACTIVE
'3=DEAD

GLOBAL MAXENEMIES,ETYPECOUNT,EATTRCOUNT
MAXENEMIES=16
ETYPECOUNT=6
EATTRCOUNT=10

DIM GLOBAL ENEMIES(MAXENEMIES-1,10)

'BULLET VARS
'0-STATE
'1-ALIGNMENT (0=ENEMY, 1=PLAYER(JUST IN CASE))
'2-XPOS
'3-YPOS
'4-DIRECTION
'5-MOVEMENT COOLDOWN

'MINE VARS
'0-STATE (1-ACTIVE, 0-INACTIVE)
'1-XPOS
'2-YPOS

GLOBAL MAXMINES
MAXMINES=6

DIM GLOBAL MINES(MAXMINES-1,2)

GLOBAL MAXBULLETS
MAXBULLETS=16

DIM GLOBAL BULLETS(MAXBULLETS-1,5)

'PICKUP VARS
'0-STATUS (0-INACTIVE, 1-ACTIVE)
'1-PICKUP TYPE
'2-XPOS
'3-YPOS
'4-CHAR
GLOBAL MAXPICKUPS,PTYPECOUNT
MAXPICKUPS=8
PTYPECOUNT=5

DIM GLOBAL PICKUPS(MAXPICKUPS-1,4)

'EXPLOSION VARS
'0-STATUS
'1-CURRENT CHAR
'2-XPOS
'3-YPOS
'4=COOLDOWN

GLOBAL MAXEXPL
MAXEXPL=4

DIM GLOBAL EXPL(MAXEXPL-1,4)

'PLAYER VARS
'PLAYER STATUS INFO
'0 = STANDING
'1 = DASHING
'2 = DEAD
GLOBAL PX,PY,PDX,PDY,PHEALTH,PMAXHEALTH,PCHAR,PDCHAR,PSTATUS,PATKS,PMAXATKS,PDMGCD,PPACTIVATED,PMINES
PCHAR=1
PDCHAR=2

'TILE VARS
GLOBAL WCHAR,SCHAR,ETILECOUNT,PWCHAR
WCHAR=128
PWCHAR=129
SCHAR=64

BG SOURCE ROM(3)
ETILECOUNT=0
FOR TX=0 TO 19
  FOR TY=0 TO 13
    IF MCELL.C(TX,TY)=0 THEN ADD ETILECOUNT,1
  NEXT TY
NEXT TX

'EMPTY TILE INFO:
'0=XPOS
'1=YPOS
DIM GLOBAL ETILES(ETILECOUNT-1,1)

CURETILE=0
FOR TX=0 TO 19
  FOR TY=0 TO 13
    IF MCELL.C(TX,TY)=0 THEN
      ETILES(CURETILE,0)=TX
      ETILES(CURETILE,1)=TY
      ADD CURETILE,1
    END IF
  NEXT TY
NEXT TX

'GLOBAL VARS
GLOBAL SCORE,HSCORE,ENEMYCD,PICKUPCD,GTIME

'OPTION VARS
GLOBAL SHAKEOFF,MUSICOFF,TROFF
SHAKEOFF=PEEK($E004)
MUSICOFF=PEEK($E005)
TROFF=PEEK($E006)

'MISC VARS
GLOBAL SHAKEC

'SFX CONTROL VARS
GLOBAL PSFXCD,MPSFXCD,EXPLSFXCD

'TITLE SCREEN
MENU:
WAIT VBL
SOUND SOURCE ROM(14)
IF MUSICOFF=0 THEN TRACK 0,1
HSCORE=PEEKL($E000)
IF TROFF=0 THEN ON RASTER CALL TR
DO
  CLS
  PAL 0
  
  BG 1
  BG SOURCE ROM(3)
  BG COPY 0,14,8,2 TO 6,1
  
  BG 0
  CALL CTEXT("PRESS A TO PLAY",6)
  CALL CTEXT("PRESS B FOR OPT",7)
  
  CALL CTEXT("HIGH SCORE:",12)
  CALL CTEXT(STR$(HSCORE),13)
  
  WAIT VBL
  
  IF BUTTON TAP(0,0) THEN GOTO GAMESET
  IF BUTTON TAP(0,1) THEN GOTO GAMEOPTIONS
LOOP

'OPTION SCREEN
GAMEOPTIONS:
STOP
WAIT VBL
ON RASTER OFF
TTROFF=TROFF
TMUSICOFF=MUSICOFF
TSHAKEOFF=SHAKEOFF
DO
  CLS
  
  BG 0
  R$=""
  
  CALL CTEXT("OPTIONS",0)
  
  CALL OPTIONTEXT(TTROFF,R$)
  TEXT 0,3,"UP - TITLE RAST:"+R$
  
  CALL OPTIONTEXT(TMUSICOFF,R$)
  TEXT 0,5,"LEFT - MUSIC:"+R$
  
  CALL OPTIONTEXT(TSHAKEOFF,R$)
  TEXT 0,7,"RIGHT - SHAKE:"+R$
  
  TEXT 0,9,"DOWN - DELETE HSCORE"
  
  TEXT 0,13,"A - APPLY"
  TEXT 0,14,"B - BACK"
  
  WAIT VBL
  
  IF UP TAP(0) THEN TTROFF=(TTROFF+1) MOD 2
  IF LEFT TAP(0) THEN TMUSICOFF=(TMUSICOFF+1) MOD 2
  IF RIGHT TAP(0) THEN TSHAKEOFF=(TSHAKEOFF+1) MOD 2
  IF DOWN TAP(0) THEN GOTO DELHSPROMPT
  
  IF BUTTON TAP (0,0) THEN
    SHAKEOFF=TSHAKEOFF
    MUSICOFF=TMUSICOFF
    TROFF=TTROFF
    POKE $E004, SHAKEOFF
    POKE $E005, MUSICOFF
    POKE $E006, TROFF
    GOTO MENU
  END IF
  IF BUTTON TAP (0,1) THEN GOTO MENU
LOOP

'HELL
DELHSPROMPT:
DO
  CLS
  ON RASTER CALL SHAKE
  BG 1
  CALL CTEXT("ARE YOU REALLY SURE?",4)
  
  CALL CTEXT("A - YES",7)
  CALL CTEXT("B - NO",8)
  
  WAIT VBL
  
  IF BUTTON TAP(0,0) THEN POKEL $E000,0
  IF BUTTON TAP(0) THEN GOTO GAMEOPTIONS
LOOP

'GAME SETUP
GAMESET:
STOP 1
CALL CTEXT("LOADING",7)
ENEMYCD=0
PICKUPCD=300
CALL SECTOTICK(10,GTIME)

'MISC SETUP
SHAKEC=0

'SFX SETUP
PSFXCD=0
MPSFXCD=0
EXPLSFXCD=0

'PLAYER SETUP
PSTATE=0
PMAXHEALTH=3
PHEALTH=PMAXHEALTH
STILE = RND(ETILECOUNT-1)
PX=ETILES(STILE,0)
PY=ETILES(STILE,1)
PDX=PX
PDY=PY
PMAXATKS=1
PATKS=PMAXATKS
PDMGCD=0
PPACTIVATED=0
PMINES=2

'ENEMY SETUP
FOR E=0 TO MAXENEMIES-1
  FOR ER=0 TO EATTRCOUNT-1
    ENEMIES(E,ER)=0
  NEXT ER
  SPRITE OFF E+1
NEXT E

'PICKUP SETUP
FOR P=0 TO MAXPICKUPS-1
  FOR PR=0 TO 4
    PICKUPS(P,PR)=0
  NEXT PR
NEXT P

'BULLET SETUP
FOR B=0 TO MAXBULLETS-1
  FOR BR=0 TO 5
    BULLETS(B,BR)=0
  NEXT BR
NEXT B

'EXPLOSION SETUP
FOR EX=0 TO MAXEXPL-1
  FOR EXR=0 TO 4
    EXPL(EX,EXR)=0
  NEXT EXR
NEXT EX

'MINE SETUP
FOR M=0 TO MAXMINES-1
  FOR MR=0 TO 2
    MINES(M,MR)=0
  NEXT MR
NEXT M

'SCORE SETUP
SCORE=0

GAME:
WAIT VBL
BG SOURCE ROM(3)
GAMEOK=1
CLS
SOUND SOURCE ROM(14)
IF MUSICOFF=0 THEN MUSIC
ON RASTER OFF
WHILE GAMEOK
  CLS
  BG 1
  BG COPY 0,0,20,14 TO 0,0  
  
  'INTERFACE
  BG 0
  PAL 1
  TEXT 0,14,"HP:"+STR$(PHEALTH)+"/"+STR$(PMAXHEALTH) 
  TEXT 0,15,"SC:"+STR$(SCORE)
  CALL CTEXT(STR$(PATKS)+"/"+STR$(PMAXATKS),14)
  SECLEFT=0
  CALL TICKTOSEC(GTIME,SECLEFT)
  CALL CTEXT(STR$(INT(SECLEFT)),15)
  MT$="M:"+STR$(PMINES)
  TEXT 20-LEN(MT$),14,MT$
  
  'PLAYER UPDATE
  IF PDMGCD>0 AND PSTATE=0 THEN ADD PDMGCD,-1
  
  'INPUT
  M=0
  
  IF UP(0) THEN M=1
  IF DOWN(0) THEN M=2
  IF LEFT(0) THEN M=3
  IF RIGHT(0) THEN M=4
  
  IF M>0 AND PSTATE=0 THEN
    IF M<5 THEN CALL PDASH(M-1)
  END IF
  
  IF BUTTON TAP(0) AND PMINES>0 THEN
    CALL PLACEMINE(PX,PY)
  END IF
  
  'PLAYER MOVEMENT
  IF PDX<>PX OR PDY<>PY THEN
    PSTATE=1
    IF PX>PDX THEN 
      ADD PX,-1
      SPRITE 0 FLIP 0,0
    END IF
    IF PX<PDX THEN
      ADD PX,1
      SPRITE 0 FLIP 1,0
    END IF
    IF PY>PDY THEN ADD PY,-1
    IF PY<PDY THEN ADD PY,1 
  ELSE IF PSTATE=1 THEN
    PSTATE=0
    PATKS=PMAXATKS
    SHAKEC=3
    
    IF PSFXCD<=0 AND MPSFXCD<=0 THEN
      SOUND SOURCE ROM(15)
      PLAY 3,25 SOUND 4
    END IF
  END IF
  
  'CHECK FOR PICKUPS
  IF PSTATE=1 THEN
    FOR PU=0 TO MAXPICKUPS-1
      IF PICKUPS(PU,0)<>0 AND PICKUPS(PU,2)=PX AND PICKUPS(PU,3)=PY THEN
        PICKUPS(PU,0)=0
        CALL ACTIVATEPICKUP(PICKUPS(PU,1))
        PU=MAXPICKUPS-1
      END IF
    NEXT PU
  END IF
  
  IF PSTATE=1 THEN SPRITE 0,PX*8,PY*8,PCHAR+2 ELSE SPRITE 0,PX*8,PY*8,PCHAR
  IF PDMGCD>0 THEN SPRITE 0 PAL 3 ELSE SPRITE 0 PAL 0
  
  'PLAYER ATTACK
  IF SPRITE HIT(0,1 TO 16) THEN
    IF PATKS>0 AND PSTATE=1 THEN
      CALL PATTACK(HIT)
    ELSE IF PDMGCD<=0 THEN
      IF PSTATE=1 THEN
        CALL PDMG(1,"NO ATTACKS")
      ELSE
        CALL PDMG(1,"ENEMY HIT")
      END IF
    END IF
  END IF
  
  CALL HANDLEENEMIES
  CALL HANDLEBULLETS
  CALL HANDLEMINES
  CALL HANDLEGCD
  
  CALL HANDLEPU
  
  CALL DRAWENEMIES
  CALL DRAWBULLETS
  CALL DRAWMINES
  CALL RASTEFF
  CALL HANDLEEXPL
  
  'CHECK IF PLAYER IS DEAD
  IF GTIME<=0 THEN CALL PDMG(PMAXHEALTH,"OUT OF TIME")
  IF PHEALTH<=0 THEN GAMEOK=0
  
  WAIT VBL
WEND

GAMEEND:
STOP
ON RASTER OFF
SPRITE 0 PAL 4
BG 1
FOR X=0 TO 19
 FOR Y=0 TO 2
   CELL X,Y+6,0
 NEXT Y
NEXT X
BG 0
FOR X=0 TO 19
  FOR Y=0 TO 1
    CELL X,Y+14,0
  NEXT Y
NEXT X
PAL 1
CALL CTEXT("GAME OVER",7)
CALL CTEXT("SCORE:"+STR$(SCORE),8)
IF GTIME<=0 THEN
  CALL CTEXT("OUT OF TIME",6)
ELSE IF PHEALTH<=0 THEN
  CALL CTEXT("PLAYER DEAD",6)
END IF
PAL 4
SPRITE 0,PX*8,PY*8,PDCHAR
SPRITE OFF 1 TO 63
SOUND SOURCE ROM(15)
PLAY 3,49 SOUND 0
IF SCORE>HSCORE THEN POKEL $E000,SCORE
WAIT 300
SPRITE OFF 0
GOTO MENU

'GAME SUBS
SUB HANDLEGCD
  'TIMER
  ADD GTIME,-1
  
  'ENETITY COOLDOWNS
  IF ENEMYCD<=0 THEN
    CALL MAKEENEMY
    ENEMYCD=80
  ELSE
    ADD ENEMYCD,-1
  END IF
  
  IF PICKUPCD<=0 THEN
    CALL MAKEPU
    PICKUPCD=600
  ELSE
    ADD PICKUPCD,-1
  END IF
  
  'SFX COOLDOWNS
  IF PSFXCD>0 THEN ADD PSFXCD,-1
  IF MPSFXCD>0 THEN ADD MPSFXCD,-1
  IF EXPLSFXCD>0 THEN ADD EXPLSFXCD,-1
END SUB

SUB TICKTOSEC(T,R)
  R=(T/60)
END SUB

SUB SECTOTICK(S,R)
  R=(S*60)
END SUB

'BULLET SUBS
SUB MAKEBULLET(X,Y,A,D)
  FOR B=0 TO MAXBULLETS-1
    IF BULLETS(B,0)=0 THEN
      BULLETS(B,1)=A
      BULLETS(B,2)=X
      BULLETS(B,3)=Y
      BULLETS(B,4)=D
      BULLETS(B,5)=10
      
      BULLETS(B,0)=1
      B=MAXBULLETS-1
    END IF
  NEXT B
END SUB

SUB HANDLEBULLETS
  FOR B=0 TO MAXBULLETS-1
    IF BULLETS(B,0)=1 THEN
      'DIRECTION INFO:
      '0 - UP
      '1 - DOWN
      '2 - LEFT
      '3 - RIGHT
      
      BOK=1
      BG 1
      
      IF BULLETS(B,5)>0 THEN
        ADD BULLETS(B,5),-1
        BOK=0
      ELSE
        BULLETS(B,5)=10
      END IF
      
      IF BOK=1 THEN
        MD=1
        IF (BULLETS(B,4) MOD 2)=0 THEN MD=MD*-1
        IF BULLETS(B,4)<2 THEN ADD BULLETS(B,3),MD ELSE ADD BULLETS(B,2),MD
      END IF
      
      IF CELL.C(BULLETS(B,2),BULLETS(B,3))=WCHAR OR CELL.C(BULLETS(B,2),BULLETS(B,3))=PWCHAR THEN
        BULLETS(B,0)=0
        BOK=0
      END IF
      
      IF BULLETS(B,2)=PX AND BULLETS(B,3)=PY THEN
        CALL PDMG(1,"BULLET HIT")
        
        BULLETS(B,0)=0
      END IF
    END IF
  NEXT B
END SUB

SUB DRAWBULLETS
  FOR B=0 TO MAXBULLETS-1
    IF BULLETS(B,0)=1 THEN
      SPRITE B+17 PAL 0
      SPRITE B+17,BULLETS(B,2)*8,BULLETS(B,3)*8,80
    ELSE
      SPRITE OFF B+17
    END IF
  NEXT B
END SUB

'EXPLOSION SUBS
SUB MAKEEXPL(X,Y)
  FOR EX=0 TO MAXEXPL-1
    IF EXPL(EX,0)=0 THEN
      EXPL(EX,0)=1
      EXPL(EX,1)=113
      EXPL(EX,2)=X
      EXPL(EX,3)=Y
      EXPL(EX,4)=2
      EX=MAXEXPL-1
    END IF
  NEXT EX
END SUB

SUB HANDLEEXPL
  FOR EX=0 TO MAXEXPL-1
    IF EXPL(EX,0)=1 THEN
      ADD EXPL(EX,4),-1
      IF EXPL(EX,4)<=0 THEN
        SPRITE EX+33 PAL 0
        SPRITE EX+33,(EXPL(EX,2)*8)+(RND(2)-1),(EXPL(EX,3)*8)+(RND(2)-1),EXPL(EX,1)
        
        ADD EXPL(EX,1),1
        IF EXPL(EX,1)>117 THEN
          EXPL(EX,0)=0
          SPRITE OFF EX+33
        ELSE
          EXPL(EX,4)=2
        END IF
      END IF
    END IF
  NEXT EX
END SUB

'PICKUP SUBS
SUB MAKEPU
  FOR PU=0 TO MAXPICKUPS-1
    IF PICKUPS(PU,0)=0 THEN
      STILE=RND(ETILECOUNT-1)
      PICKUPS(PU,0)=1
      PICKUPS(PU,1)=RND(PTYPECOUNT-1)
      PICKUPS(PU,2)=ETILES(STILE,0)
      PICKUPS(PU,3)=ETILES(STILE,1)
      
      RESTORE PTYPEDATA
      FOR I=0 TO PICKUPS(PU,1)
        READ PICKUPS(PU,4)
      NEXT I
      
      PU=MAXPICKUPS-1
    END IF
  NEXT PU
END SUB

SUB HANDLEPU
  FOR PU=0 TO MAXPICKUPS-1
    IF PICKUPS(PU,0)=1 THEN
      PAL 2
      BG 0
      CELL PICKUPS(PU,2),PICKUPS(PU,3),PICKUPS(PU,4)
    END IF
  NEXT PU
END SUB

SUB ACTIVATEPICKUP(PT)
  PUOK=1
  IF PT=0 THEN
    ADD PHEALTH,1
    IF PHEALTH>PMAXHEALTH THEN
      PHEALTH=PMAXHEALTH
      PUOK=0
    END IF
  ELSE IF PT=1 THEN
    ADD PMAXHEALTH,1
    IF PMAXHEALTH>9 THEN
      PMAXHEALTH=9
      PUOK=0
    END IF
  ELSE IF PT=2 THEN
    ADD PMAXATKS,1
    IF PMAXATKS>4 THEN
      PMAXATKS=4
      PUOK=0
    END IF
  ELSE IF PT=3 THEN
    SECADD=5
    CALL SECTOTICK(SECADD,SECADD)
    ADD GTIME,SECADD
  ELSE IF PT=4 THEN
    ADD PMINES,2
  END IF
  PSFXCD=60
  IF PUOK=0 THEN ADD SCORE,100
  SOUND SOURCE ROM(15)
  PLAY 3,49 SOUND 1
END SUB

'PLAYER SUBS
SUB PDASH(DIR)
  PDX=PX
  PDY=PY
  TM=1
  
  '0=UP
  '1=DOWN
  '2=LEFT
  '3=RIGHT
  
  IF (DIR MOD 2)=0 THEN TM=TM*-1
  BG 1
  
  HITWALL=0
  WHILE HITWALL=0
    IF DIR<2 THEN PDY=PDY+TM ELSE PDX=PDX+TM
    IF CELL.C(PDX,PDY)=WCHAR OR CELL.C(PDX,PDY)=PWCHAR THEN
      IF DIR<2 THEN PDY=PDY-TM ELSE PDX=PDX-TM
      HITWALL=1
    END IF
  WEND
END SUB

SUB PATTACK(EHIT)
  FOR E=0 TO MAXENEMIES-1
    EDEAD=0
    IF E=EHIT-1 AND ENEMIES(E,0)=2 THEN
      ADD ENEMIES(E,4),-1
      ADD PATKS,-1
      IF PSFXCD<=0 THEN
        SOUND SOURCE ROM(15)
        PLAY 3,28 SOUND 3
      END IF
      IF ENEMIES(E,4)<=0 THEN
        CALL KILLENEMY(EHIT)
        EDEAD=1
      END IF
      CALL MAKEEXPL(PX,PY)
      SG=20
      IF EDEAD=1 THEN SG=SG*3
      ADD SCORE,SG
      E=MAXENEMIES-1
    END IF
  NEXT E
END SUB

SUB PDMG(D,MSG$)
  IF PDMGCD<=0 THEN
    ADD PHEALTH,-ABS(D)
    PDMGCD=120
    
    BG 0
    FOR X=0 TO 19
      FOR Y=0 TO 1
        CELL X,Y+14,0
      NEXT Y
    NEXT X
    PAL 1
    CALL CTEXT(MSG$,14)
    
    BG 1
    IF SHAKEOFF=0 THEN ON RASTER CALL SHAKE
    BG TINT 0,0 TO 20,16 PAL 5
    WAIT 20
    BG TINT 0,0 TO 20,16 PAL 0
    ON RASTER OFF
  END IF
END SUB

'MINE SUBS
SUB PLACEMINE(X,Y)
  FOR M=0 TO MAXMINES-1
    IF MINES(M,0)=0 THEN
      ADD PMINES,-1
      MINES(M,0)=0
      MINES(M,1)=X
      MINES(M,2)=Y
      
      MINES(M,0)=1
      M=MAXMINES-1
    END IF
  NEXT M
  SOUND SOURCE ROM(15)
  PLAY 3,46 SOUND 14
  MPSFXCD=20
END SUB

SUB HANDLEMINES
  FOR M=0 TO MAXMINES-1
    IF MINES(M,0)=1 THEN
      IF SPRITE HIT(M+37,1 TO 16) THEN
        CALL MAKEEXPL(MINES(M,1),MINES(M,2))
        CALL KILLENEMY(HIT)
        MINES(M,0)=0
        SPRITE OFF M+37
        ADD SCORE,200
      END IF
    END IF
  NEXT M
END SUB

SUB DRAWMINES
  FOR M=0 TO MAXMINES-1
    IF MINES(M,0)=1 THEN SPRITE M+37,MINES(M,1)*8,MINES(M,2)*8,96
  NEXT M
END SUB

'ENEMY SUBS
SUB MAKEENEMY
  ENEMYMADE=0
  FOR E=0 TO MAXENEMIES-1
    IF ENEMIES(E,0)=0 AND ENEMYMADE=0 THEN
      STILE=RND(ETILECOUNT-1)
      ENEMIES(E,1)=RND(ETYPECOUNT-1)
      ENEMIES(E,2)=ETILES(STILE,0)
      ENEMIES(E,3)=ETILES(STILE,1)
      
      RESTORE ETYPEDATA
      FOR T=0 TO ENEMIES(E,1)
        READ ENEMIES(E,4)
        READ ENEMIES(E,5)
        READ ENEMIES(E,6)
        READ ENEMIES(E,7)
      NEXT T
      
      'SPAWN COOLDOWN
      ENEMIES(E,8)=60
      
      'SHOOT COOLDOWN
      ENEMIES(E,9)=120
      
      SPRITE E+1 PAL 0
      
      ENEMIES(E,0)=1
      ENEMYMADE=1
    END IF
  NEXT E
END SUB

SUB DRAWENEMIES
  FOR E=0 TO MAXENEMIES-1
    IF ENEMIES(E,0)<>0 THEN
      IF ENEMIES(E,0)=1 THEN
        PAL 0
        CELL ENEMIES(E,2),ENEMIES(E,3),SCHAR
      ELSE IF ENEMIES(E,0)=2 THEN
        SPRITE E+1 PAL 0
        IF (ENEMIES(E,1) MOD 2)=0 THEN SPRITE E+1 FLIP ENEMIES(E,10),0 ELSE SPRITE E+1 FLIP 0,ENEMIES(E,10)
        SPRITE E+1,ENEMIES(E,2)*8,ENEMIES(E,3)*8,ENEMIES(E,6)
      ELSE IF ENEMIES(E,0)=3 THEN
        SPRITE OFF E+1
        PAL 4
        CELL ENEMIES(E,2),ENEMIES(E,3),ENEMIES(E,7)
      END IF
    END IF
  NEXT E
END SUB

SUB HANDLEENEMIES
  FOR E=0 TO MAXENEMIES-1
    IF ENEMIES(E,0)<>0 THEN
      IF ENEMIES(E,0)=1 THEN
        ADD ENEMIES(E,8),-1
        IF ENEMIES(E,8)<=0 THEN
          ENEMIES(E,0)=2
          'MOVEMENT COOLDOWN
          ENEMIES(E,8)=30
        END IF
      ELSE IF ENEMIES(E,0)=2 THEN
        ADD ENEMIES(E,8),-1
        IF ENEMIES(E,8)<=0 THEN
          BG 1
          NEX=ENEMIES(E,2)
          NEY=ENEMIES(E,3)
          MD=1
          IF ENEMIES(E,10)<>0 THEN MD=MD*-1
          IF (ENEMIES(E,1) MOD 2)=0 THEN ADD NEX,MD ELSE ADD NEY,MD
          COL=0
          IF CELL.C(NEX,NEY)=WCHAR THEN COL=1
          IF COL=0 THEN
            FOR EC=0 TO MAXENEMIES-1
              IF ENEMIES(EC,0)=2 AND ENEMIES(EC,2)=NEX AND ENEMIES(EC,3)=NEY THEN
                EC=MAXENEMIES-1
                COL=1
              END IF
            NEXT EC
          END IF
          IF COL=1 THEN
            ENEMIES(E,10)=(ENEMIES(E,10)+1) MOD 2
          ELSE
            ENEMIES(E,2)=NEX
            ENEMIES(E,3)=NEY
          END IF
          ENEMIES(E,8)=30
        END IF
        
        'SHOOTING
        IF ENEMIES(E,1)>3 THEN
          ADD ENEMIES(E,9),-1
          IF ENEMIES(E,9)<=0 THEN
            NBD=0
            IF (ENEMIES(E,1) MOD 2)=0 THEN
              IF ENEMIES(E,10)=0 THEN NBD=3 ELSE NBD=2
            ELSE
              IF ENEMIES(E,10)=0 THEN NBD=1 ELSE NBD=0
            END IF
            CALL MAKEBULLET(ENEMIES(E,2),ENEMIES(E,3),0,NBD)
            ENEMIES(E,9)=120
          END IF
        END IF
      ELSE IF ENEMIES(E,0)=3 THEN
        ADD ENEMIES(E,8),-1
        IF ENEMIES(E,8)<=0 THEN
          ENEMIES(E,0)=0
        END IF
      END IF
    END IF
  NEXT E
END SUB

SUB KILLENEMY(S)
  FOR E=0 TO MAXENEMIES-1
    IF E=S-1 THEN
      IF ENEMIES(E,0)=2 THEN
        ENEMIES(E,0)=3
        ENEMIES(E,8)=20
        E=MAXENEMIES-1
        
        SPRITE OFF S
        
        SECADD=2
        CALL SECTOTICK(SECADD,SECADD)
        ADD GTIME,SECADD
      END IF
      E=MAXENEMIES-1
    END IF
  NEXT E
END SUB

'INTERFACE SUBS
SUB CTEXT(T$,Y)
  TEXT 10-LEN(T$)/2,Y,T$
END SUB

SUB RASTEFF
  EFFDONE=0
  IF SHAKEC>0 THEN
    IF SHAKEOFF=0 THEN ON RASTER CALL SHAKE
    ADD SHAKEC,-1
    EFFDONE=1
  END IF
  IF EFFDONE=0 THEN
    ON RASTER OFF
  END IF
END SUB

SUB OPTIONTEXT(OPT,R$)
  IF OPT=0 THEN R$="ON" ELSE R$="OFF"
END SUB

'RASTER SUBS
SUB TR
  OFFSET=TIMER-RASTER
  OFFSET=(OFFSET/180)*PI
  OFFSET=1*TAN(OFFSET*0.75)
  SCROLL 1,-OFFSET,0
  SCROLL 0,0,SIN(((TIMER/180)*PI)*5)*5
END SUB

SUB SHAKE
  OFFSET = RND(1)
  IF RND(1)=0 THEN OFFSET=OFFSET*-1
  SCROLL 1,OFFSET,0
END SUB

'DATA
'ENEMY TYPE DATA
'0 - HEALTH
'1 - DAMAGE
'2 - CHAR
'3 - ECHAR
ETYPEDATA:
DATA 1,1,65,81
DATA 1,1,66,82
DATA 2,1,67,83
DATA 2,1,68,84
DATA 1,1,69,85
DATA 1,1,70,86

'POWER UP DATA
'EACH ROW REPRESENTS CHAR FOR NOW
'TYPE 0 = INC HEALTH
'TYPE 1 = INC MAX HEALTH
PTYPEDATA:
DATA 97
DATA 98
DATA 99
DATA 100
DATA 101

#1:MAIN PALETTES
003F300B003F1530003F0C30003C0C30
003F2A15003F0030003F2A15003F2A15

#2:MAIN CHARACTERS
00000000000000000000000000000000
00383838083C18240000320202020000
000004081020040000000408103E7E00
00701070103C18140000640402020000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
FF80BFA0ACAAAAAAFFFFC0C0C0C0C0C0
FF00FF004DA9A9E9FFFF000000000000
FF00FF00444A4ACEFFFF000000000000
FF00FF00EDA9A9A9FFFF000000000000
FF00FF00C8545C54FFFF000000000000
FF00FF00005B005BFFFF0000005B005B
FF00FF0000F101E1FFFF000004F408E8
FF01FD0505C505C5FFFF03030303C303
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
AAAAAAACA0BF80FFC0C0C0C0C0C0FFFF
A5A5A5AD00FF00FF000000000000FFFF
4A4A4A4A00FF00FF000000000000FFFF
CDA9A9AD00FF00FF000000000000FFFF
5454545400FF00FF000000000000FFFF
005B005B00FF00FF005B005B0000FFFF
07E303E500FF00FF08E000E00000FFFF
0585050505FD01FF030303030303FFFF
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
0000000000000000DB991818180099DB
000000003E007600000000787E7E0000
00420000185A42000024243C3C3C1800
0030282828246C00000C1C1E1E1E0000
3C424281243C3C00003C3C7E7E7E3C00
00001E0000000066007E7E7E30187E00
004242101052520000103C38383C3C00
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
000000181800000000003C24243C0000
00000000004E00000000000078700000
00000042005A0000000000423C660000
00007E025C60000000007E3E627F0000
0000402600003C00000040263C7E0000
000000000C0000C200000078704C20FE
000000004012520000000064383C3C00
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00001000005E7E000010281020207E00
003C664242663C000000183C3C180000
0000183C3C180000003C7E7E7E7E3C00
070F7F5E6C547C0000060E3C18280000
007C7C7622363C00000038181C180000
001C3C2C6E427E0000000810103C0000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000018180000000000000000000000
0000183C3C1800000000000000000000
00183C66663C18000000182424180000
183C42C3C3423C18003C424242423C00
18000081810000181800008181000018
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
FF81BDA5A5BD81FFFFFFC3DBDBC3FFFF
FFFFC3C3C3C3FFFFFF818181818181FF
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00181C1C1C0C180C00000404040C000C
006C7E36120000000000121212000000
00247E3F367E3F120000001B12001B12
00083E3F1E3F1F040000000710011704
0062753A142E57230000113204081123
001C3E3A7E773A1D00000A021013001D
00181C3C180000000000040C18000000
000C1E3C38180C060000060C08000006
0030180C0E1E3C180000000002060C18
0000241A7E3F2C120000000200270812
0000181C7E3F1C0C000000040027040C
00000000181C3C180000000000040C18
000000007E3F000000000000003F0000
0000000000181C0C000000000000040C
00060F1E3C787020000003060C183020
003C7E7F777F3F1E000018110119031E
00183C1C1C1C7E3F000004040404003F
003C7E3F1E3C7E3F00001833060C003F
003C7E3F06673F1E000018330001031E
0066777F3F0707030000110139010103
007E7F7C3E077F3E00001F003801033E
001C3E7C7E773F1E00000E001811031E
007E3F0F1E3C381800003903060C0818
003C7E3F7E773F1E000018031811031E
003C7E3F1F673F1E000018011901031E
000000180C180C00000000000C000C00
000000180C183C18000000000C000C18
00000C1E3C180C06000000060C000006
0000007E3F7E3F00000000003F003F00
000030180C1E3C180000000000060C18
003C7E3F1E0C180C00001833060C000C
003C7E7F7F773C1E000018111117001E
00183C7E7F7F77330000001801191133
007C7E7F7E777F3E000018031811033E
003C7E7370763F1E000018131010031E
00787C76777F7E3C000010101113063C
007E7F787C707E3F00001F001C10003F
007E7F787C70703000001F001C101030
003C7E7E77773F1E00001E101111031E
0066777F7F7777330000110119111133
003C1E1C1C1C3C1E000006040404001E
001E0F0707673F1E000009010101031E
00667F7E7C7C76330000130604101033
0060707070707E3F000010101010003F
0042677F7F7F77330000010101191133
0066777F7F7777330000010111111133
003C7E7777773F1E000018111111031E
007C7E7F7E707030000018031E101030
003C7E777B7D3E1F000018111111001F
007C7E7F7E7C76330000180306101033
003E7F3C1E077F3E00001F001801033E
007E3F1C1C1C1C0C000027040404040C
0066777777773F1E000011111111031E
00667777773F1E0C000011111103060C
0066777F7F7F73210000110101193121
00663F1E3C7E77330000030600181133
0066773F1E1C1C0C000011030604040C
007E3F1E3C787E3F000033060C18003F
003C3E3838383C1E00000E080808001E
006030180C0603010000000000000101
003C1E0E0E0E3E1E000012020202021E
00183C7E330000000000001833000000
0000000000007E3F000000000000003F

#3:MAIN BG
00001410800080008000800080008000
80008000800080008000800080008000
80008000800080008000800080000000
00000000812000000000000000000000
80000000000000000000812000000000
00008000800000000000000000000000
00008000000000000000000080000000
00000000000000000000800080000000
00008120000000000000000000000000
00000000000000000000000081200000
00008000800081200000000000000000
00000000000000000000800000000000
00000000000000008120800080000000
00000000000000000000000000008000
00000000000000000000000000000000
00008000800000000000000080000000
80000000000000000000000000008000
00000000000080000000800080000000
80000000000000008000000000000000
00000000000080000000800000000000
00008000800000000000000000000000
00000000000000008000000000000000
00000000000000000000800080008120
00000000000000000000000080000000
00000000000000000000000000000000
81208000800000000000812000000000
00000000000000000000000000000000
00000000812000000000800080000000
00000000000000000000800000000000
00000000800000000000000000000000
00008000800000000000000081200000
00000000000080000000000000000000
00008120000000000000800080008000
80008000800080008000800080008000
80008000800080008000800080008000
80008000100011001200130014001500
16001700000000000000000000000000
00000000000000000000000020002100
22002300240025002600270000000000
00000000000000000000000000000000
00000000

#14:MUSIC
1F008040066F00001800846C003A0000
0F006160000000002800303019FE0000
38002020000000003800505000000000
0800000F000000000800000F00000000
0800000F000000000800000F00000000
0800000F000000000800000F00000000
0800000F000000000800000F00000000
0800000F000000000800000F00000000
80404040034002400001024003040240
000502400306024007084040090A4040
07080B40098C0B404040404040404040
40404040404040404040404040404040
40404040404040404040404040404040
40404040404040404040404040404040
40404040404040404040404040404040
40404040404040404040404040404040
40404040404040404040404040404040
40404040404040404040404040404040
40404040404040404040404040404040
40404040404040404040404040404040
40404040404040404040404040404040
40404040404040404040404040404040
40404040404040404040404040404040
40404040404040404040404040404040
350F00000000380F000000003A0F0000
0000380F00350F00000000370F00380F
000000003A0F000000003C0F00000000
330F00000000370F000000003A0F0000
0000370F00330F00000000370F00380F
000000003A0F00000000380F00000000
352F00000000352F000000003C2F0000
00003A2F003C2F000000000000000000
000000003C2F000000003C2F00000000
332F00000000332F000000003A2F0000
0000372F003A2F000000000000000000
000000003A2F00000000382F00000000
314F00314F00315F00000000314F0031
5F00000000315F00000000314F00315F
00000000315F00314F00314F00000000
314F00314F00315F00000000314F0031
5F00000000315F00000000314F00315F
00000000315F00314F00314F00000000
310F00000000370F00000000380F0000
0000330F00310F00000000330F00370F
00000000380F00000000380F00000000
370F00380F003A0F003C0F003F0F003D
0F003C0F003A0F003C0F003A0F00380F
00370F00380F00370F00350F00340F00
312F00000000312F00000000382F0000
0000372F00382F000000000000000000
00000000382F00000000382F00000000
332F00000000332F00000000372F0000
0000352F00372F000000000000000000
00000000372F003A2F00372F00332F00
352F00000000352F000000003C2F0000
00003A2F003C2F000000000000000000
000000003A2F003C2F003D2F00000000
3F2F000000003F2F000000003D2F0000
00003D2F003C2F000000000000000000
000000003D2F003C2F003A2F00000000
3C2F000000003C2F000000003A2F0000
00003A2F00382F000000000000000000
000000003A2F00382F00372F00000000
3A2F000000003A2F00000000382F0000
0000382F00372F000000000000000000
00000000342F00352F00372F00382F00
350F00000000350F00000000350F0000
0000350F00000000350F00000000350F
00000000350F00000000350F00000000
330F00000000330F00000000330F0000
0000330F00000000330F00000000330F
00000000330F00000000330F00000000
352F00000000382F000000003A2F0000
00003C2F00000000332F00000000382F
00000000382F00372F00382F00000000
352F00000000382F000000003A2F0000
0000382F00000000372F00000000382F
00000000382F003C2F003C2F00000000
380F00000000380F00000000380F0000
0000380F00000000380F00000000380F
00000000380F00000000380F00000000
350F00000000350F00000000350F0000
0000350F00000000350F00000000350F
00000000350F00000000350F00000000
3F2F000000003D2F000000003C2F0000
00003A2F000000003D2F000000003C2F
00000000382F00382F003A2F00000000
3D2F003C2F000000000000003C2F003A
2F000000000000003A2F00382F000000
00000000372F00382F00000000000000
314F00000000000000000000315F0000
0000000000000000314F00000000314F
00000000315F00000000000000000000
314F00000000000000000000315F0000
0000000000000000314F00000000315F
00000000315F00000000000000000000
3F2F003D2F000000000000003F2F0044
2F000000000000003F2F003D2F000000
000000003F2F00442F00000000000000
432F00442F00000000000000462F0048
2F00000000000000432F00442F00432F
00442F00462F00482F00432F00412F00

#15:SFX
680100C800FFF0006F01F08F10F50000
08006060000000002800303019FE0000
38002020000000003800505000000000
0800000F000000000800000F00000000
0800000F000000000800000F00000000
0800000F000000000800000F00000000
0800000F000000000800000F00000000
6814000F008F00006801008F02BA0F00

