' 25 APR 2020 ===  PUBLIC DEMO 3 ===
'known issue: bottom of planet missing past halfway point
'known issue: damage animations need work
'known issue: player ship collects scrap on title screen
'known issue: missing frame on title screen between animations

'OPTION _EXPLICIT ' - finds undeclared variables
'               - player can resize screen as needed!
$RESIZE:SMOOTH

_TITLE "Loading . . ."

RESTART:
CONST FALSE = 0, TRUE = NOT FALSE '     - used to see if player shots are active
CONST maxshots = 15 ' 10                - sets maximum number of player shots
CONST lettersum = 9 '                   - number of letters in "SCRAPSHIP"
CONST maxrotation = 40 '                - allows for up to 40 frames of planet rotation
CONST endblast = 5 '                    - sets number of explosion frames
CONST shieldoff = 5 '                   - sets number of shield frames for the fighter
CONST deflectcount = 3 '5 '             - sets number of deflect frames for the shield
CONST switchcount = 10 '                - sets number of switch frames for icons
CONST fighterdrop = 25 '                - sets number of fighter drop frames

TYPE PLAYER
    PIC AS LONG
    HEIGHT AS INTEGER
    WIDTH AS INTEGER
    MIDX AS SINGLE
    MIDY AS SINGLE
    XKILLBOX AS SINGLE
    YKILLBOX AS SINGLE
    X AS INTEGER
    Y AS INTEGER
    HEALTH AS INTEGER
    SPEED AS INTEGER
    KILLED AS INTEGER
END TYPE

TYPE LETTERSCRAP
    PIC AS LONG
    HEIGHT AS INTEGER
    WIDTH AS INTEGER
    X AS INTEGER
    Y AS INTEGER
    SPEED AS INTEGER
    COUNT AS INTEGER
    COLLECTED AS INTEGER
END TYPE

TYPE SCRAP
    PIC AS LONG
    HEIGHT AS INTEGER
    WIDTH AS INTEGER
    X AS INTEGER
    Y AS INTEGER
    SPEED AS INTEGER
    COUNT AS INTEGER
    COLLECTED AS INTEGER
END TYPE

TYPE BACKGROUNDSCRAP
    PIC AS LONG
    HEIGHT AS INTEGER
    WIDTH AS INTEGER
    X AS INTEGER
    Y AS INTEGER
    SPEED AS INTEGER
END TYPE

TYPE SINGLESHOT
    HEIGHT AS INTEGER
    WIDTH AS INTEGER
    X AS INTEGER
    Y AS INTEGER
    MIDX AS SINGLE
    SPEED AS INTEGER
    RANGE AS INTEGER
    DAMAGE AS INTEGER
    ACTIVE AS _BYTE
END TYPE

TYPE SINGLESHOT2
    HEIGHT AS INTEGER
    WIDTH AS INTEGER
    X AS INTEGER
    Y AS INTEGER
    MIDX AS SINGLE
    SPEED AS INTEGER
    RANGE AS INTEGER
    ACTIVE AS _BYTE
END TYPE

TYPE SINGLESHOT3
    HEIGHT AS INTEGER
    WIDTH AS INTEGER
    X AS INTEGER
    Y AS INTEGER
    MIDX AS SINGLE
    SPEED AS INTEGER
    RANGE AS INTEGER
    ACTIVE AS _BYTE
END TYPE

TYPE MULTISHOT
    HEIGHT AS INTEGER
    WIDTH AS INTEGER
    MIDX AS SINGLE
    X AS INTEGER
    Y AS INTEGER
    SPEED AS INTEGER
    DAMAGE AS INTEGER
    ACTIVE AS _BYTE
END TYPE

TYPE SCRAPSHOT
    HEIGHT AS INTEGER
    WIDTH AS INTEGER
    MIDX AS SINGLE
    X AS INTEGER
    Y AS INTEGER
    SPEED AS INTEGER
    DAMAGE AS INTEGER
    RANGE AS INTEGER
    ACTIVE AS _BYTE
END TYPE

TYPE FIGHTERSHOT
    HEIGHT AS INTEGER
    WIDTH AS INTEGER
    X AS SINGLE
    Y AS SINGLE
    SPEED AS INTEGER
    DAMAGE AS INTEGER
END TYPE

TYPE BOMBERSHOT
    HEIGHT AS INTEGER
    WIDTH AS INTEGER
    X AS INTEGER
    Y AS INTEGER
    MIDX AS INTEGER
    MIDY AS INTEGER
    SPEED AS INTEGER
    DAMAGE AS INTEGER
    RANGE AS INTEGER
END TYPE

TYPE CRUISERSHOT
    HEIGHT AS INTEGER
    WIDTH AS INTEGER
    X AS SINGLE
    Y AS SINGLE
    SPEED AS INTEGER
    DAMAGE AS INTEGER
END TYPE

TYPE FIGHTERS
    HEIGHT AS INTEGER
    WIDTH AS INTEGER
    X AS INTEGER
    Y AS INTEGER
    MIDX AS INTEGER
    MIDY AS INTEGER
    XKILLBOX AS INTEGER
    YKILLBOX AS INTEGER
    RANDOMY AS INTEGER
    HEALTH AS INTEGER
    FIGHTERSPEED AS INTEGER
    KILLHIT AS INTEGER
    GRAZEHIT AS INTEGER
    SHOTX AS INTEGER
    SHOTY AS INTEGER
    KILLED AS INTEGER
    BLASTNUM AS INTEGER
    ACTIVE AS INTEGER
    SHIELDHEALTH AS INTEGER
    SHIELDON AS INTEGER
    ICONPICKEDUP AS INTEGER
    RANDOMICON AS INTEGER
    TIMESTART AS INTEGER
    GLOBALTIMER AS INTEGER
END TYPE

TYPE BOMBERS
    HEIGHT AS INTEGER
    WIDTH AS INTEGER
    X AS INTEGER
    Y AS INTEGER
    MIDX AS INTEGER
    MIDY AS INTEGER
    XKILLBOX AS INTEGER
    YKILLBOX AS INTEGER
    RANDOMY AS INTEGER
    HEALTH AS INTEGER
    BOMBERSPEED AS INTEGER
    KILLED AS INTEGER
    ICONPICKEDUP AS INTEGER
    RANDOMICON AS INTEGER
    TIMESTART AS INTEGER
    GLOBALTIMER AS INTEGER
    ARBPIC AS INTEGER
    COUNTINGDOWN AS INTEGER
END TYPE

TYPE CRUISERS
    HEIGHT AS INTEGER
    WIDTH AS INTEGER
    X AS INTEGER
    Y AS INTEGER
    MIDX AS SINGLE
    MIDY AS SINGLE
    XKILLBOX AS INTEGER
    YKILLBOX AS INTEGER
    RANDOMY AS INTEGER
    HEALTH AS INTEGER
    CRUISERSPEED AS INTEGER
    VISIBLE AS INTEGER
    KILLED AS INTEGER
    CRUISER AS INTEGER
    STOPPINGY AS INTEGER
    STOPPED AS INTEGER
    ACTIVE AS INTEGER
    DISTANCEX AS SINGLE
    DISTANCEY AS SINGLE
    ODDSOFACTIVE AS INTEGER
    PLAYERPOSITION AS INTEGER
    PLAYERABOVE AS INTEGER
    ICONPICKEDUP AS INTEGER
    RANDOMICON AS INTEGER
    TIMESTART AS INTEGER
    GLOBALTIMER AS INTEGER
END TYPE

TYPE BATTLESHIPS
    HEIGHT AS INTEGER
    WIDTH AS INTEGER
    X AS INTEGER
    Y AS INTEGER
    HEALTH1 AS INTEGER
    HEALTH2 AS INTEGER
    BATTLESHIPSPEED AS INTEGER
    VISIBLE AS INTEGER
    KILLED AS INTEGER
    STOPPINGY AS INTEGER
    ACTIVE AS INTEGER
END TYPE

TYPE CARRIERS
    HEIGHT AS INTEGER
    WIDTH AS INTEGER
    X AS INTEGER
    Y AS INTEGER
    HEALTH AS INTEGER
    HEALTHTOTAL AS INTEGER
    CARRIERSPEED AS INTEGER
    VISIBLE AS INTEGER
    KILLED AS INTEGER
    STOPPINGY AS INTEGER
    ACTIVE AS INTEGER
END TYPE

TYPE SELECTOR
    X AS INTEGER
    Y AS INTEGER
END TYPE

TYPE WINDOW
    WIDTH AS INTEGER
    HEIGHT AS INTEGER
    COLORS AS INTEGER
    X AS INTEGER
    Y AS INTEGER
    MIDX AS INTEGER
    MIDY AS INTEGER
    TOP AS INTEGER
    BOTTOM AS INTEGER
    RIGHT AS INTEGER
    LEFT AS INTEGER
END TYPE

'================================================SCRIPT BOOLEANS
DIM SHARED lasershotscriptran AS INTEGER
DIM SHARED multishotscriptran AS INTEGER
DIM SHARED scrapshotscriptran AS INTEGER
DIM SHARED foregroundscrapscriptran AS INTEGER
DIM SHARED boss1scriptran AS INTEGER
DIM SHARED backgroundscrapscriptran AS INTEGER
DIM SHARED setlettersscriptran AS INTEGER
DIM SHARED rotationscript AS INTEGER
DIM SHARED healthscriptran AS INTEGER
DIM SHARED animation1ran AS INTEGER
DIM SHARED animation2ran AS INTEGER

'===============================================REGULAR BOOLEANS
DIM SHARED playermovingcase AS INTEGER ' 1 = moving left, 2 = stationary, 3 = moving right
DIM SHARED issoundon AS INTEGER
DIM SHARED isaudioon AS INTEGER
DIM SHARED sounddelay AS INTEGER
DIM SHARED endcredits AS INTEGER
DIM SHARED gamepaused AS INTEGER
DIM SHARED audioplayed AS INTEGER

'=================================================RANDOM VARIABLES
RANDOMIZE TIMER
DIM SHARED numscrap AS INTEGER
numscrap = INT(RND * 20) + 12 'generates between 12 and 32 pieces of scrap  * 20 + 12

DIM SHARED bscrap AS INTEGER
bscrap = INT(RND * 20) + 40 'generates between 40 and 60 backgroundscrap

DIM SHARED numfighters AS INTEGER '*3 + 5
numfighters = INT(RND * 3) + 7

DIM SHARED numbombers AS INTEGER ' * 3 + 2
numbombers = INT(RND * 3) + 3

DIM SHARED numcruisers AS INTEGER '*5 + 2
numcruisers = 4 'INT(RND * 2) + 1

DIM SHARED numbships AS INTEGER
numbships = 2

DIM SHARED numcarriers AS INTEGER
numcarriers = 1

DIM SHARED numall AS INTEGER
numall = numfighters + numbombers + numcruisers

'==========================================================ARRAYS AND ARRAY TYPES
DIM SHARED lscrap(lettersum) AS LETTERSCRAP
DIM SHARED scrap(numscrap) AS SCRAP
DIM SHARED bgscrap(bscrap) AS BACKGROUNDSCRAP
DIM SHARED xshot(maxshots) AS MULTISHOT
DIM SHARED sshot(maxshots) AS SCRAPSHOT
DIM SHARED fighters(numfighters) AS FIGHTERS
DIM SHARED bombers(numbombers) AS BOMBERS
DIM SHARED cruisers(numcruisers) AS CRUISERS
DIM SHARED bships(numbships) AS BATTLESHIPS
DIM SHARED carriers(numcarriers) AS CARRIERS
DIM SHARED fshot(numfighters) AS FIGHTERSHOT
DIM SHARED bshot(numbombers) AS BOMBERSHOT
DIM SHARED cshot(numcruisers) AS CRUISERSHOT
DIM SHARED planetrotation(maxrotation) AS LONG
DIM SHARED dropfighter(fighterdrop) AS LONG
DIM SHARED blastgif(endblast) AS LONG
DIM SHARED shieldgif(shieldoff) AS LONG
DIM SHARED deflectgif(deflectcount) AS LONG
DIM SHARED switchgif(switchcount) AS LONG

'==========================================================IN-GAME COUNTERS
DIM SHARED scrapcollected AS INTEGER
scrap(numscrap).COUNT = numscrap
DIM SHARED rotationcount AS INTEGER

'==========================================================NON-ARRAY TYPES
DIM SHARED player AS PLAYER
DIM SHARED win AS WINDOW
DIM SHARED oneshot AS SINGLESHOT
DIM SHARED oneshot2 AS SINGLESHOT2
DIM SHARED oneshot3 AS SINGLESHOT3
DIM SHARED selector AS SELECTOR

'=======================================================STANDALONE VARIABLES
DIM SHARED rapidkeydelay AS INTEGER
DIM SHARED scrapkeydelay
DIM SHARED loadlevel AS INTEGER
DIM SHARED levelinit AS INTEGER
DIM SHARED irotation AS INTEGER
DIM SHARED iterations AS INTEGER
DIM SHARED fighterframes AS INTEGER
DIM SHARED yiterations AS INTEGER
DIM SHARED soundlevel AS SINGLE
DIM SHARED audiolevel AS SINGLE
DIM SHARED soundtimer AS SINGLE
DIM SHARED soundlength AS SINGLE
DIM SHARED singlelaserupgrade AS INTEGER
DIM SHARED rapidlaserupgrade AS INTEGER
DIM SHARED scrapcannonupgrade AS INTEGER
DIM SHARED fighterlaserupgrade AS INTEGER
DIM SHARED blastnum AS INTEGER
DIM SHARED gamefps AS INTEGER
DIM SHARED dropy AS INTEGER ' - y coordinate for dropping the fighter

'--------------SHOTDOWN
DIM SHARED shotdown AS INTEGER
DIM SHARED fightersdown AS INTEGER
DIM SHARED bombersdown AS INTEGER
DIM SHARED cruisersdown AS INTEGER

'--------------SOUNDS
DIM SHARED playerdiedsound AS LONG
DIM SHARED singlelasersound AS LONG
DIM SHARED multilasersound AS LONG
DIM SHARED scrapcannonsound AS LONG
DIM SHARED scrapcollectedsound AS LONG
DIM SHARED levelsound AS LONG
DIM SHARED enemylasersound AS LONG

'--------------AUDIO
DIM SHARED singlelaseraudio AS LONG
DIM SHARED rapidlaseraudio AS LONG
DIM SHARED healthcriticalaudio AS LONG
DIM SHARED collectscrapaudio AS LONG
DIM SHARED enemyincomingaudio AS LONG
DIM SHARED greatpilotingaudio AS LONG
DIM SHARED notbadaudio AS LONG

'--------------PICS
DIM SHARED gameovertext AS LONG
DIM SHARED incomingtext AS LONG
DIM SHARED playerbankleft AS LONG
DIM SHARED playerbankright AS LONG
DIM SHARED playerdmg1 AS LONG
DIM SHARED playerdmg2 AS LONG
DIM SHARED playerdmg3 AS LONG
DIM SHARED playerdmg4 AS LONG
DIM SHARED playerdmg5 AS LONG
DIM SHARED fightershotpic AS LONG
DIM SHARED fightershotpic2 AS LONG
DIM SHARED bombershotpic1 AS LONG
DIM SHARED bombershotpic2 AS LONG
DIM SHARED bombershotpic3 AS LONG
DIM SHARED cruisershotpic AS LONG
DIM SHARED fighterunit AS LONG
DIM SHARED fighterdmg1 AS LONG
DIM SHARED fighterdmg2 AS LONG
DIM SHARED fighterdmg3 AS LONG
DIM SHARED bomberunit AS LONG
DIM SHARED bomberdmg1 AS LONG
DIM SHARED bomberdmg2 AS LONG
DIM SHARED bomberdmg3 AS LONG
DIM SHARED bshipunit AS LONG ' - battleship
DIM SHARED cruiserunit AS LONG
DIM SHARED cruiserdmg1 AS LONG
DIM SHARED cruiserdmg2 AS LONG
DIM SHARED cruiserdmg3 AS LONG
DIM SHARED carrierunit AS LONG
DIM SHARED ssunit AS LONG ' - space station
DIM SHARED carriersideunit AS LONG
DIM SHARED titleunit AS LONG
DIM SHARED testunit AS LONG

DIM SHARED selectorpic AS LONG
DIM SHARED creditsinsta AS LONG

DIM SHARED singlelaserpic AS LONG
DIM SHARED singlelaser2pic AS LONG
DIM SHARED singlelaser3pic AS LONG

DIM SHARED rapidlaserpic AS LONG
DIM SHARED rapidlaser2pic AS LONG
DIM SHARED rapidlaser3pic AS LONG

DIM SHARED sshotpic AS LONG

'-------------FONTS
DIM SHARED gamefontlrg AS LONG
DIM SHARED gamefontmed AS LONG
DIM SHARED medfontint AS INTEGER

DIM SHARED menucase AS INTEGER
DIM SHARED weapontype AS INTEGER

'------------OTHER
DIM SHARED k AS INTEGER ' for key strokes

'-------------TEST

'--------------UNSHARED VARIABLES
DIM rw AS INTEGER ' - for resize
DIM rh AS INTEGER ' - for resize
DIM rwide AS STRING ' - for resize
DIM rhigh AS STRING ' - for resize

'=====================================================================================================================
'=====================================================================================================================
'                                               === PRIMARY GAME LOOP ===
'
'
newscreen___SETUP '
controls___MISC '                                      - loads the control instructions
basicsettings___SETUP '                                 - loads the basic settings for all variables
'overlapchecks___SETUP '                                 - makes sure ships are not overlapping
loadallgameassets___SETUP '                             - loads sounds and graphics
'IF issoundon = 1 THEN
'_SNDVOL levelsound, soundlevel
'IF levelsound THEN _SNDPLAYCOPY levelsound
'END IF
NEWGAMEPLUS:
DO
    rw = _RESIZEWIDTH
    rh = _RESIZEHEIGHT
    rwide = STR$(rw)
    rhigh = STR$(rh)
    _TITLE "Scrapship " + rwide + " x " + rhigh + "              resize window by dragging corners"

    k = _KEYHIT '                               - variable to hold _keyhit values in main loop
    soundtimer = TIMER

    _LIMIT gamefps '                                 - limits Frames Per Second to 60 control game speed.  45 works well on single
    PCOPY _DISPLAY, 1
    ' -----------------------------   GAME LEVELS WHILE PLAYER ALIVE   -------------------------------
    IF player.HEALTH > 0 THEN '                 - if player alive

        SELECT CASE loadlevel '                 - determine what level to load
            CASE 0
                titlescreen___SETUP '                   - load titlescreen and tutorial
            CASE 1
                level1 '                        - load level 1
            CASE 2
                level2 '                        - load level 2
            CASE 3
                level3 '                        - load level 3
        END SELECT

        collisioncheck___PLAYER
        overlapchecks___SETUP
        debugtools___MISC

        IF player.HEALTH < 30 AND isaudioon = 1 AND healthscriptran = 0 THEN
            _SNDVOL healthcriticalaudio, audiolevel
            _SNDPLAYCOPY healthcriticalaudio
            healthscriptran = 1
        END IF

        '      --------------------------------   PLAYER SURVIVES   -------------------------------------------------

        FOR i = 1 TO numcarriers

            IF carriers(numcarriers).Y = carriers(numcarriers).STOPPINGY THEN
                _SNDVOL greatingpilotingaudio, audiolevel
                _SNDPLAYCOPY greatpilotingaudio
            END IF

            IF carriers(i).Y = carriers(i).STOPPINGY THEN

                _FONT gamefontlrg

                DO
                    k2 = _KEYHIT

                    A$ = "YOU SURVIVED!"
                    LOCATE 8, 380: PRINT A$

                    B$ = "SCRAP COLLECTED: "
                    LOCATE 12, 340: PRINT B$; scrapcollected

                    FDOWN$ = "FIGHTERS DESTROYED: "
                    LOCATE 13, 340: PRINT FDOWN$; fightersdown

                    BDOWN$ = "BOMBERS DESTROYED: "
                    LOCATE 14, 340: PRINT BDOWN$; bombersdown

                    CDOWN$ = "CRUISERS DESTROYED: "
                    LOCATE 15, 340: PRINT CDOWN$; cruisersdown

                    C$ = "PLAY AGAIN?"
                    c = LEN(C$)
                    CX = (win.RIGHT / 2) - (c * c) 'lrgfontint)
                    LOCATE 17, CX: PRINT C$

                    D$ = "y / n"
                    d = LEN(D$)
                    DX = (win.RIGHT / 2) - (d * d) - 30 'lrgfontint)
                    LOCATE 18, DX: PRINT D$

                    IF k2 = 78 OR k2 = 110 THEN SYSTEM 'N

                    IF k2 = 89 OR k2 = 121 THEN 'Y
                        basicsettings___SETUP
                        setletters___MISC
                        GOTO OUTSIDELOOP: 'NEWGAMEPLUS:
                    END IF

                    _DISPLAY

                LOOP UNTIL (k2 = 78 OR k2 = 110) OR (k2 = 89 OR k2 = 121)

            END IF

        NEXT

    END IF

    ' --------------------------------------  PLAYER DIES   ----------------------------------

    IF player.HEALTH <= 0 OR player.KILLED = 1 THEN '       - if player killed
        player.KILLED = 1
        IF issoundon = 1 THEN
            _SNDVOL playerdiedsound, soundlevel
            IF playerdiedsound THEN _SNDPLAYCOPY playerdiedsound
        END IF

        RANDOMIZE TIMER

        DIM SHARED clr AS INTEGER
        DIM SHARED rndm AS INTEGER

        TYPE ftype
            vx AS SINGLE
            vy AS SINGLE
        END TYPE
        DIM frag(500) AS ftype 'fragments

        DIM pi AS SINGLE
        pi = 3.141593

        DIM x AS SINGLE, y AS SINGLE
        DIM time AS SINGLE, pow AS SINGLE 'grav as single
        time = 0
        pow = 5 'explosion power '15

        FOR i = 0 TO UBOUND(frag)
            frag(i).vx = RND * TAN(2 * pi * RND)
            frag(i).vy = RND * TAN(2 * pi * RND)
        NEXT

        x = win.WIDTH * RND
        y = win.HEIGHT * RND

        FOR time = 0 TO 25 STEP 0.2
            movebackgroundscrap___MISC '       - keeps background intact along with explosion
            movescrap___MISC
            scraphitdetect___PLAYER
            movefighters___ENEMY
            fightershots___ENEMY
            movecruisers___ENEMY
            cruisershots___ENEMY

            _DISPLAY
            PCOPY 1, _DISPLAY
            _PUTIMAGE (win.X, win.Y), planetrotation(irotation) ' - keeps planet behind the explosion

            FOR i = 0 TO UBOUND(frag)
                rndm = INT(RND * 4) + 1
                randomcolors___MISC
                PSET (player.XKILLBOX + time * pow * frag(i).vx, player.YKILLBOX + time * pow * frag(i).vy), clr
                randomcolors___MISC
                PSET (player.XKILLBOX + time * pow * frag(i).vx, player.YKILLBOX + rndm + time * pow * frag(i).vy), clr
                randomcolors___MISC
                PSET (player.XKILLBOX + rndm + time * pow * frag(i).vx, player.YKILLBOX + time * pow * frag(i).vy), clr
                randomcolors___MISC
                PSET (player.XKILLBOX + rndm + time * pow * frag(i).vx, player.YKILLBOX + rndm + time * pow * frag(i).vy), clr
                randomcolors___MISC
                PSET (player.XKILLBOX + rndm + time * pow * frag(i).vx, player.YKILLBOX + time * pow * frag(i).vy), clr
                randomcolors___MISC
                PSET (player.XKILLBOX + rndm + time * pow * frag(i).vx, player.YKILLBOX + rndm + time * pow * frag(i).vy), clr

            NEXT
            _LIMIT 60
        NEXT

        player.X = -500 ' - remove fighter from screen so it doesn't collect scrap
        player.Y = -500
        '_SNDVOL notbadaudio, audiolevel
        '_SNDPLAYCOPY notbadaudio

        DO
            movebackgroundscrap___MISC '       - keeps background intact along with explosion
            _PUTIMAGE (win.X, win.Y), planetrotation(irotation)
            movescrap___MISC
            scraphitdetect___PLAYER
            movefighters___ENEMY
            fightershots___ENEMY
            movecruisers___ENEMY
            cruisershots___ENEMY

            k3 = _KEYHIT

            _PUTIMAGE (0, 0), gameovertext

            IF k3 = 78 OR k3 = 110 THEN 'N
                SYSTEM
            END IF

            IF k3 = 89 OR k3 = 121 THEN 'Y
                freeimages___SETUP
                GOTO OUTSIDELOOP:
            END IF

            _DISPLAY
            PCOPY 1, _DISPLAY
            _LIMIT 30
        LOOP UNTIL (k3 = 78 OR k3 = 110) OR (k3 = 89 OR k3 = 121)

    END IF
    ' --------------------------------------------------   END PLAYER DIES   -----------------------------

    '---------------------- PAUSE GAME

    'IF (k = 80 OR k = 112) AND gamepaused = 1 THEN
    '    gamefps = 60
    '    gamepaused = 0
    '    GOTO skippause:
    'END IF

    IF (k = 80 OR k = 112) AND gamepaused = 0 THEN SLEEP
    'gamefps = 1
    'gamepaused = 1

    'skippause:
    escapekey___MISC

    _DISPLAY
    PCOPY 1, _DISPLAY

LOOP
OUTSIDELOOP:
CLEAR
GOTO RESTART:
'-------------------------------------------- ^^^ PRIMARY GAME LOOP ^^^ -----------------------------------------------
'=======================================================================================================================
'========================================   SUBS START HERE   ==========================================================
'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

'                                               !!! LEVEL subroutines !!!

'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB level1 '====================================================================================SUB LEVEL 1

    movebackgroundscrap___MISC

    moveplayer___PLAYER

    movescrap___MISC

    IF animation1ran = 0 THEN
        _PUTIMAGE (175, dropy), titleunit
    END IF

    'IF scrapcollected < 2 THEN
    '    LOCATE 1, 400
    '    PRINT "COLLECT SCRAP"
    'END IF

    scraphitdetect___PLAYER

    IF weapontype = 1 THEN singlelaser___PLAYER

    IF weapontype = 2 THEN rapidlaser___PLAYER

    IF weapontype = 3 THEN scrapcannon___PLAYER

    shothitdetection___PLAYER

    IF animation1ran = 0 THEN
        _PUTIMAGE (175, dropy), titleunit
        dropy = dropy - 2
        IF dropy <= 455 THEN
            dropy = 455
            animation1ran = 1
        END IF
    END IF

    IF animation1ran = 1 AND animation2ran = 0 THEN
        _LIMIT 45
        _PUTIMAGE (175, dropy), dropfighter(fighterframes) '440
        fighterframes = fighterframes + 1
        IF fighterframes >= 25 THEN
            animation2ran = 1
            _LIMIT 60
        END IF
    END IF

    IF audioplayed = 0 AND animation2ran = 1 THEN
        _SNDVOL collectscrapaudio, audiolevel
        _SNDPLAYCOPY collectscrapaudio
        audioplayed = 1
    END IF

    IF scrapcollected >= 8 OR _KEYDOWN(50) THEN '4
        loadlevel = 2
        levelinit = 2
        audioplayed = 0
    END IF

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB level2 '=======================================================================================SUB LEVEL 2

    IF audioplayed = 0 THEN
        _SNDVOL enemyincomingaudio, audiolevel
        _SNDPLAYCOPY enemyincomingaudio
        audioplayed = 1
    END IF
    explosions___MISC ' - if placed here, no screen glitch but shots are under the fighters
    movebackgroundscrap___MISC

    moveplayer___PLAYER

    movescrap___MISC

    scraphitdetect___PLAYER

    IF weapontype = 1 THEN singlelaser___PLAYER

    IF weapontype = 2 THEN rapidlaser___PLAYER

    IF weapontype = 3 THEN scrapcannon___PLAYER

    IF fightersdown = numfighters OR bombersdown = numbombers THEN
        FOR i = 1 TO numcruisers
            IF cruisers(i).ACTIVE = 0 THEN
                resetcruisers___ENEMY
            END IF
        NEXT
        movecruisers___ENEMY
        cruisershots___ENEMY
    END IF

    FOR i = 1 TO numbombers
        IF bshot(i).RANGE = 0 THEN
            resetbombers___ENEMY
        END IF
    NEXT
    movebombers___ENEMY
    bombershots___ENEMY

    FOR inf = 1 TO numfighters
        IF fighters(inf).ACTIVE = 0 THEN
            resetfighters___ENEMY
        END IF
    NEXT
    movefighters___ENEMY
    fightershots___ENEMY

    shothitdetection___PLAYER

    IF shotdown = numall OR scrapcollected = numscrap THEN
        audioplayed = 0
        loadlevel = 3
        levelinit = 3
        resetfighters___ENEMY
        resetbombers___ENEMY
        resetcruisers___ENEMY
    END IF

    '_PUTIMAGE (25, 100), testunit 'TEST

    'IF (cruisers(1).Y < cruisers(1).STOPPINGY) AND cruisers(1).Y <> -500 THEN
    '    _PUTIMAGE (0, 0), incomingtext
    'END IF

END SUB

SUB level3 '=====================================================================SUB LEVEL3
    'IF audioplayed = 0 THEN            ' - mute for demo
    '    _SNDVOL enemyincomingaudio, audiolevel
    '    _SNDPLAYCOPY enemyincomingaudio
    '    audioplayed = 1
    'END IF

    movebackgroundscrap___MISC

    moveplayer___PLAYER

    movescrap___MISC

    scraphitdetect___PLAYER

    IF weapontype = 1 THEN singlelaser___PLAYER

    IF weapontype = 2 THEN rapidlaser___PLAYER

    IF weapontype = 3 THEN scrapcannon___PLAYER

    movecarriers___ENEMY

    shothitdetection___PLAYER

END SUB

'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

'                                               !!!  SETUP subroutines !!!

'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB titlescreen___SETUP '=======================================================SUB TITLE SCREEN SETUP

    movebackgroundscrap___MISC

    moveplayer___PLAYER ' - moveplayer sub modified for the title screen

    movescrap___MISC

    _PUTIMAGE (175, dropy), titleunit 'TEST  y600

    IF setlettersscriptran = 0 THEN setletters___MISC

    FOR i = 1 TO lettersum
        _PUTIMAGE (lscrap(i).X, lscrap(i).Y), lscrap(i).PIC
    NEXT

    _FONT gamefontlrg
    LOCATE 4, 300: PRINT "40wattstudio presents"
    _FONT gamefontmed
    LOCATE 20, 350: PRINT "Use Arrow Keys to Select"
    LOCATE 21, 350: PRINT " Press ENTER to confirm"
    _FONT gamefontlrg
    SELECT CASE menucase
        CASE 1 '                          - text to be displayed no matter what
            LOCATE 15, 380: PRINT "START GAME"

            IF soundlevel <= 0 THEN LOCATE 16, 380: PRINT "sound level: <-- OFF -->" '                           - sound menu item

            IF soundlevel >= 10 THEN LOCATE 16, 380: PRINT "sound level: <-- max -->"

            IF soundlevel >= 1 AND soundlevel < 10 THEN LOCATE 16, 380: PRINT "sound level: <-- "; soundlevel; " -->" ' multiplied by 10. divide by 10 before playing sound

            IF audiolevel <= 0 THEN LOCATE 17, 380: PRINT "audio level: <-- OFF -->" '                           - audio menu item

            IF audiolevel >= 10 THEN LOCATE 17, 380: PRINT "audio level: <-- max -->"

            IF audiolevel >= 1 AND audiolevel < 10 THEN LOCATE 17, 380: PRINT "audio level: <-- "; audiolevel; " -->" ' multiplied by 10. divide by 10 before playing sound

            LOCATE 18, 380: PRINT "CREDITS"
        CASE 3
            CLS
            clearletters___MISC
            credits___MISC
            menucase = 1
            setletters___MISC
    END SELECT

    IF menucase = 1 THEN
        _PUTIMAGE (selector.X, selector.Y), selectorpic

        k3 = _KEYHIT '                     - MOVE UP
        IF k3 = 18432 THEN
            selector.Y = selector.Y - 30
            IF selector.Y <= 450 THEN
                selector.Y = 450
            END IF
        END IF

        IF k3 = 20480 THEN '               - MOVE DOWN
            selector.Y = selector.Y + 30
            IF selector.Y >= 540 THEN '605
                selector.Y = 540
            END IF
        END IF

        IF (selector.Y = 450 AND _KEYDOWN(13)) OR _KEYDOWN(49) THEN 'start game if ENTER or 1
            clearletters___MISC
            loadlevel = 1
            levelinit = 1
            soundlevel = soundlevel / 10 ' - allows sound to play at proper volume level
        END IF
        ' ------------- ADJUST SOUND
        IF selector.Y = 480 AND k3 = 19200 THEN '          - left for volume down
            soundlevel = soundlevel - 1
            IF soundlevel <= 0 THEN soundlevel = 0
            IF issoundon = 1 THEN
                _SNDVOL singlelasersound, soundlevel / 10
                _SNDPLAYCOPY singlelasersound
            END IF
        END IF

        IF selector.Y = 480 AND k3 = 19712 THEN '          - right for volume up
            soundlevel = soundlevel + 1
            IF soundlevel >= 10 THEN soundlevel = 10
            IF issoundon = 1 THEN
                _SNDVOL singlelasersound, soundlevel / 10
                _SNDPLAYCOPY singlelasersound
            END IF
        END IF
        ' ------------- ADJUST AUDIO
        IF selector.Y = 510 AND k3 = 19200 THEN '          - left for volume down
            audiolevel = audiolevel - 1
            IF audiolevel <= 0 THEN audiolevel = 0
            IF issoundon = 1 THEN
                _SNDVOL singlelaseraudio, audiolevel / 10
                _SNDPLAYCOPY singlelaseraudio
            END IF
        END IF

        IF selector.Y = 510 AND k3 = 19712 THEN '          - right for volume up
            audiolevel = audiolevel + 1
            IF audiolevel >= 10 THEN audiolevel = 10
            IF issoundon = 1 THEN
                _SNDVOL singlelaseraudio, audiolevel / 10
                _SNDPLAYCOPY singlelaseraudio
            END IF
        END IF

        IF selector.Y = 540 AND _KEYDOWN(13) THEN menucase = 3 ' - go to credits screen if ENTER  '605

    END IF

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB freeimages___SETUP '===========================================================SUB FREE IMAGES SETUP

    'IF levelpic1 < -1 THEN _FREEIMAGE levelpic1
    IF player.PIC < -1 THEN _FREEIMAGE player.PIC
    IF playerdmg1 < -1 THEN _FREEIMAGE playerdmg1
    IF playerdmg2 < -1 THEN _FREEIMAGE playerdmg2
    IF playerdmg3 < -1 THEN _FREEIMAGE playerdmg3
    IF playerdmg4 < -1 THEN _FREEIMAGE playerdmg4
    IF playerdmg5 < -1 THEN _FREEIMAGE playerdmg5
    IF boss1.PIC < -1 THEN _FREEIMAGE boss1.PIC
    IF fightershotpic < -1 THEN _FREEIMAGE fightershotpic
    IF cruisershotpic < -1 THEN _FREEIMAGE cruisershotpic
    IF cruiserunit < -1 THEN _FREEIMAGE cruiserunit
    IF rapidlaserpic < -1 THEN _FREEIMAGE rapidlaserpic

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB loadallgameassets___SETUP '================================================SUB LOAD ALL GAME ASSETS SETUP

    ' ---------------------- load sounds

    playerdiedsound = _SNDOPEN("SCRAPSHIP\x\sfx\playerexplosion.mp3")
    singlelasersound = _SNDOPEN("SCRAPSHIP\x\sfx\singlelaser.mp3")
    multilasersound = _SNDOPEN("SCRAPSHIP\x\sfx\rapidlasersingle.mp3")
    scrapcannonsound = _SNDOPEN("SCRAPSHIP\x\sfx\scrapcannonsingle.mp3")
    scrapcollectedsound = _SNDOPEN("SCRAPSHIP\x\sfx\collectingscrap.mp3")
    levelsound = _SNDOPEN("SCRAPSHIP\x\sfx\musicdemomatthewpablo.wav", "sync,vol")
    enemylasersound = _SNDOPEN("SCRAPSHIP\x\sfx\shot.wav")
    singlelaseraudio = _SNDOPEN("SCRAPSHIP\x\sfx\singlelaseraudio.mp3")
    rapidlaseraudio = _SNDOPEN("SCRAPSHIP\x\sfx\rapidlaseraudio.mp3")
    healthcriticalaudio = _SNDOPEN("SCRAPSHIP\x\sfx\healthcriticalaudio.mp3")
    collectscrapaudio = _SNDOPEN("SCRAPSHIP\x\sfx\collectscrapaudio.mp3")
    enemyincomingaudio = _SNDOPEN("SCRAPSHIP\x\sfx\enemyincomingaudio.mp3")
    greatpilotingaudio = _SNDOPEN("SCRAPSHIP\x\sfx\greatpilotingaudio.mp3")
    notbadaudio = _SNDOPEN("SCRAPSHIP\x\sfx\notbadaudio.mp3")

    soundlength = _SNDLEN(multilasersound)

    ' -------------------- load graphics

    testunit = _LOADIMAGE("SCRAPSHIP\x\gfx\test.png")
    titleunit = _LOADIMAGE("SCRAPSHIP\x\gfx\titleship.png")
    selectorpic = _LOADIMAGE("SCRAPSHIP\x\gfx\LucaPlayersmall.png")
    'levelpic1 = _LOADIMAGE("SCRAPSHIP\x\gfx\eevee\0.png")
    player.PIC = _LOADIMAGE("SCRAPSHIP\x\gfx\LucaPlayer2.png")
    playerbankleft = _LOADIMAGE("SCRAPSHIP\x\gfx\PlayerBankLeft.png")
    playerbankright = _LOADIMAGE("SCRAPSHIP\x\gfx\PlayerBankRight.png")
    playerdmg1 = _LOADIMAGE("SCRAPSHIP\x\gfx\Shooterdmg1.png")
    playerdmg2 = _LOADIMAGE("SCRAPSHIP\x\gfx\Shooterdmg2.png")
    playerdmg3 = _LOADIMAGE("SCRAPSHIP\x\gfx\Shooterdmg3.png")
    playerdmg4 = _LOADIMAGE("SCRAPSHIP\x\gfx\Shooterdmg4.png")
    playerdmg5 = _LOADIMAGE("SCRAPSHIP\x\gfx\Shooterdmg5.png")
    boss1.PIC = _LOADIMAGE("SCRAPSHIP\x\gfx\bossTEST.png")
    fightershotpic = _LOADIMAGE("SCRAPSHIP\x\gfx\eshot10x20.png")
    fightershotpic2 = _LOADIMAGE("SCRAPSHIP\x\gfx\eshot20x40.png")
    cruisershotpic = _LOADIMAGE("SCRAPSHIP\x\gfx\emultishot_15x25.png")
    bombershotpic1 = _LOADIMAGE("SCRAPSHIP\x\gfx\bomb40x401.png")
    bombershotpic2 = _LOADIMAGE("SCRAPSHIP\x\gfx\bomb40x402.png")
    bombershotpic3 = _LOADIMAGE("SCRAPSHIP\x\gfx\bomb40x403.png")
    fighterunit = _LOADIMAGE("SCRAPSHIP\x\gfx\LucaFighter.png")
    fighterdmg1 = _LOADIMAGE("SCRAPSHIP\x\gfx\fighterdmg1.png")
    fighterdmg2 = _LOADIMAGE("SCRAPSHIP\x\gfx\fighterdmg2.png")
    fighterdmg3 = _LOADIMAGE("SCRAPSHIP\x\gfx\fighterdmg3.png")
    bomberunit = _LOADIMAGE("SCRAPSHIP\x\gfx\LucaBomber118x98.png") 'LucaBomber120x80.png")
    bomberdmg1 = _LOADIMAGE("SCRAPSHIP\x\gfx\bomberdmg1.png")
    bomberdmg2 = _LOADIMAGE("SCRAPSHIP\x\gfx\bomberdmg2.png")
    bomberdmg3 = _LOADIMAGE("SCRAPSHIP\x\gfx\bomberdmg3.png")
    cruiserunit = _LOADIMAGE("SCRAPSHIP\x\gfx\LucaCruiser1.png")
    cruiserdmg1 = _LOADIMAGE("SCRAPSHIP\x\gfx\LucaCruiser2.png")
    cruiserdmg2 = _LOADIMAGE("SCRAPSHIP\x\gfx\LucaCruiser3.png")
    cruiserdmg3 = _LOADIMAGE("SCRAPSHIP\x\gfx\LucaCruiser4.png")
    'carrierunit = _LOADIMAGE("SCRAPSHIP\x\gfx\LucaCarrier.png") 'LucaCarrierglowing.png")
    carrierunit = _LOADIMAGE("SCRAPSHIP\x\gfx\LucaBship.png")
    ssunit = _LOADIMAGE("SCRAPSHIP\x\gfx\spacetop.png")
    carriersideunit = _LOADIMAGE("SCRAPSHIP\x\gfx\LucaCarriersideview.png")
    bshipunit = _LOADIMAGE("SCRAPSHIP\x\gfx\LucaBship.png")
    rapidlaserpic = _LOADIMAGE("SCRAPSHIP\x\gfx\multishot1.png")
    rapidlaser2pic = _LOADIMAGE("SCRAPSHIP\x\gfx\multishot2.png")
    rapidlaser3pic = _LOADIMAGE("SCRAPSHIP\x\gfx\multishot3.png")
    singlelaserpic = _LOADIMAGE("SCRAPSHIP\x\gfx\shot1.png")
    singlelaser2pic = _LOADIMAGE("SCRAPSHIP\x\gfx\shot2.png")
    singlelaser3pic = _LOADIMAGE("SCRAPSHIP\x\gfx\shot3.png")
    sshotpic = _LOADIMAGE("SCRAPSHIP\x\gfx\30x30scrap1r3.png")
    incomingtext = _LOADIMAGE("SCRAPSHIP\x\gfx\incoming.png")
    gameovertext = _LOADIMAGE("SCRAPSHIP\x\gfx\gameover.png")
    creditsinsta = _LOADIMAGE("SCRAPSHIP\x\gfx\credits.png")

    FOR i = 1 TO bscrap ' ----- load background scrap
        RANDOMIZE TIMER
        SELECT CASE i ' - cycle through all the background scrap and assign imaeges
            CASE IS <= 20
                bgscrap(i).PIC = _LOADIMAGE("SCRAPSHIP\x\gfx\5x5bscrap1.png")
                bgscrap(i).X = INT(RND * 1500) + 1
                bgscrap(i).Y = INT(RND * 200) + 500
            CASE 20 TO 30
                bgscrap(i).PIC = _LOADIMAGE("SCRAPSHIP\x\gfx\7x7bscrap1.png")
                bgscrap(i).X = INT(RND * 1500) + 1
                bgscrap(i).Y = INT(RND * 250) + 500
            CASE IS > 30
                bgscrap(i).PIC = _LOADIMAGE("SCRAPSHIP\x\gfx\10x10bscrap1.png")
                bgscrap(i).X = INT(RND * 1500) + 1
                bgscrap(i).Y = INT(RND * 225) + 500
        END SELECT
    NEXT

    FOR i = 1 TO numscrap ' ---- load foreground scrap
        RANDOMIZE TIMER
        randrotate = INT(RND * 3) + 1
        SELECT CASE i ' - cycle through 12 - 32 foreground scrap and assign images
            CASE IS <= 4
                IF randrotate = 4 THEN scrap(i).PIC = _LOADIMAGE("SCRAPSHIP\x\gfx\30x30scrap1.png")
                IF randrotate = 3 THEN scrap(i).PIC = _LOADIMAGE("SCRAPSHIP\x\gfx\30x30scrap1r1.png")
                IF randrotate = 2 THEN scrap(i).PIC = _LOADIMAGE("SCRAPSHIP\x\gfx\30x30scrap1r2.png")
                IF randrotate = 1 THEN scrap(i).PIC = _LOADIMAGE("SCRAPSHIP\x\gfx\30x30scrap1r3.png")
                scrap(i).WIDTH = 30
                scrap(i).HEIGHT = 30
                scrap(i).X = INT(RND * win.WIDTH) + 1
                scrap(i).Y = INT(RND * win.HEIGHT) + scrap(i).HEIGHT
                scrap(i).COLLECTED = 0
            CASE 5 TO 8
                IF randrotate = 4 THEN scrap(i).PIC = _LOADIMAGE("SCRAPSHIP\x\gfx\45x45scrap1.png")
                IF randrotate = 3 THEN scrap(i).PIC = _LOADIMAGE("SCRAPSHIP\x\gfx\45x45scrap1r1.png")
                IF randrotate = 2 THEN scrap(i).PIC = _LOADIMAGE("SCRAPSHIP\x\gfx\45x45scrap1r2.png")
                IF randrotate = 1 THEN scrap(i).PIC = _LOADIMAGE("SCRAPSHIP\x\gfx\45x45scrap1r2.png")
                scrap(i).WIDTH = 45
                scrap(i).HEIGHT = 45
                scrap(i).X = INT(RND * win.WIDTH) + 1
                scrap(i).Y = INT(RND * win.HEIGHT) + scrap(i).HEIGHT
                scrap(i).COLLECTED = 0
            CASE IS > 8
                IF randrotate = 4 THEN scrap(i).PIC = _LOADIMAGE("SCRAPSHIP\x\gfx\55x55scrap1.png")
                IF randrotate = 3 THEN scrap(i).PIC = _LOADIMAGE("SCRAPSHIP\x\gfx\55x55scrap1r1.png")
                IF randrotate = 2 THEN scrap(i).PIC = _LOADIMAGE("SCRAPSHIP\x\gfx\55x55scrap1r2.png")
                IF randrotate = 1 THEN scrap(i).PIC = _LOADIMAGE("SCRAPSHIP\x\gfx\55x55scrap1r3.png")
                scrap(i).WIDTH = 55
                scrap(i).HEIGHT = 55
                scrap(i).X = INT(RND * win.WIDTH) + 1
                scrap(i).Y = INT(RND * win.HEIGHT) + scrap(i).HEIGHT
                scrap(i).COLLECTED = 0
        END SELECT
    NEXT

    fd = 1
    DO WHILE fd < fighterdrop
        fdrop$ = "SCRAPSHIP\x\gfx\fightertest\" + LTRIM$(STR$(fd)) + ".png"
        dropfighter(fd) = _LOADIMAGE(fdrop$)
        fd = fd + 1
    LOOP

    i = 1
    DO WHILE i < maxrotation '          - load planet rotation graphics
        winpath$ = "SCRAPSHIP\x\gfx\eevee\" + LTRIM$(STR$(i)) + ".png"
        planetrotation(i) = _LOADIMAGE(winpath$) '
        i = i + 1 'x for faster testing  3 for normal
    LOOP

    b = 1
    DO WHILE b < endblast '              - load explosion graphics
        blast$ = "SCRAPSHIP\x\gfx\exp" + LTRIM$(STR$(b)) + ".png"
        blastgif(b) = _LOADIMAGE(blast$)
        b = b + 1
    LOOP

    sh = 1
    DO WHILE sh <= shieldoff
        shield$ = "SCRAPSHIP\x\gfx\LucaFightershield" + LTRIM$(STR$(sh)) + ".png"
        shieldgif(sh) = _LOADIMAGE(shield$)
        sh = sh + 1
        IF sh = 5 THEN sh = 5
    LOOP

    de = 1
    DO WHILE de <= deflectcount
        deflect$ = "SCRAPSHIP\x\gfx\shieldhit" + LTRIM$(STR$(de)) + ".png"
        deflectgif(de) = _LOADIMAGE(deflect$)
        de = de + 1
        IF de = 3 THEN de = 3
    LOOP

    sw = 1
    DO WHILE sw <= switchcount
        switch$ = "SCRAPSHIP\x\gfx\switch" + LTRIM$(STR$(sw)) + ".png"
        switchgif(sw) = _LOADIMAGE(switch$)
        sw = sw + 1
    LOOP

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB basicsettings___SETUP '==========================================================SUB BASIC SETTINGS SETUP

    CLS '                        - gets rid of printed text
    RANDOMIZE TIMER

    win.X = -95
    win.Y = 100
    win.MIDX = win.WIDTH / 2
    win.MIDY = win.HEIGHT / 2
    win.TOP = 0
    win.BOTTOM = win.HEIGHT
    win.LEFT = 0
    win.RIGHT = win.WIDTH

    selector.X = 340
    selector.Y = 450

    menucase = 1

    player.WIDTH = 60 '55     'not sure why these got changed
    player.HEIGHT = 60 '52
    player.MIDX = player.WIDTH / 2
    player.MIDY = player.HEIGHT / 2
    player.X = win.MIDX - player.MIDX
    player.Y = (win.BOTTOM + win.MIDY) / 2 ' win.MIDY - player.MIDY
    player.HEALTH = 100
    player.SPEED = 5 '2 raise higher if game starts to LAG
    player.KILLED = 0

    '--------------------------------------ARRAYED TYPE DATA

    FOR i = 1 TO numcarriers
        carriers(i).WIDTH = 400
        carriers(i).HEIGHT = 772
        carriers(i).X = INT(RND * (win.WIDTH - carriers(i).WIDTH))
        carriers(i).Y = -700 'INT(RND * win.HEIGHT - carriers(i).HEIGHT) * -1
        carriers(i).STOPPINGY = -100 '300
    NEXT

    FOR i = 1 TO numcruisers
        cruisers(i).WIDTH = 140
        cruisers(i).HEIGHT = 200
        cruisers(i).MIDX = cruisers(i).WIDTH / 2
        cruisers(i).MIDY = cruisers(i).HEIGHT / 2
        cruisers(i).X = INT(RND * (win.WIDTH - cruisers(i).WIDTH))
        cruisers(i).Y = (INT(RND * win.MIDY) * -1) - (cruisers(i).HEIGHT + 10)
        cruisers(i).HEALTH = 1500
        cruisers(i).KILLED = 0
        cruisers(i).VISIBLE = 0
        cruisers(i).STOPPED = 0
        cruisers(i).STOPPINGY = INT(RND * 100) 'cruisers(i).HEIGHT)
        cruisers(i).CRUISERSPEED = 30 ' - high value allows cruisers to "warp" in
        cruisers(i).ACTIVE = 0
        cruisers(i).DISTANCEX = 0
        cruisers(i).ODDSOFACTIVE = 0
        cruisers(i).PLAYERPOSITION = 3
        cruisers(i).PLAYERABOVE = 3
        cruisers(i).ICONPICKEDUP = 1
        cruisers(i).RANDOMICON = 0
    NEXT

    FOR i = 1 TO numbombers
        bombers(i).WIDTH = 118
        bombers(i).HEIGHT = 98
        bombers(i).MIDX = bombers(i).WIDTH / 2
        bombers(i).MIDY = bombers(i).HEIGHT / 2
        bombers(i).X = (win.RIGHT + (bombers(i).WIDTH * i)) ' + bombers(i).WIDTH)
        bombers(i).Y = INT(RND * 200) * -1 '100
        bombers(i).XKILLBOX = bombers(i).X + bombers(i).MIDX
        bombers(i).YKILLBOX = bombers(i).Y - bombers(i).MIDY
        bombers(i).HEALTH = 600
        bombers(i).KILLED = 0
        bombers(i).BOMBERSPEED = INT(RND * 2) + 2 ' - max speed of 3  ' 4
        bombers(i).ICONPICKEDUP = 1
        bombers(i).RANDOMICON = 0
        bombers(i).ARBPIC = 0
        bshot(i).RANGE = 0
    NEXT

    FOR inf = 1 TO numfighters
        fighters(inf).WIDTH = 100
        fighters(inf).HEIGHT = 80
        fighters(inf).MIDX = fighters(inf).WIDTH / 2
        fighters(inf).MIDY = fighters(inf).HEIGHT / 2
        fighters(inf).X = INT(RND * win.WIDTH - fighters(inf).WIDTH) + fighters(inf).WIDTH
        fighters(inf).Y = INT(RND * (win.HEIGHT - fighters(inf).HEIGHT) + 1) * -1
        fighters(inf).HEALTH = 300
        fighters(inf).KILLHIT = 0
        fighters(inf).GRAZEHIT = 0
        fighters(inf).SHOTX = 0
        fighters(inf).SHOTY = 0
        fighters(inf).KILLED = 0
        fighters(inf).BLASTNUM = 1
        fighters(inf).FIGHTERSPEED = INT(RND * 2) + 2 ' - max speed of 4
        fighters(inf).ACTIVE = 0
        fighters(inf).SHIELDHEALTH = 200
        fighters(inf).SHIELDON = 0
        fighters(inf).RANDOMICON = 0
        fighters(inf).ICONPICKEDUP = 1
    NEXT

    FOR i = 0 TO maxshots ' KEEP - this part prevents the fighter shields from getting destroyed off-screen
        xshot(i).X = -500
        xshot(i).Y = -500
        xshot(i).ACTIVE = FALSE
    NEXT

    FOR i = 0 TO maxshots
        sshot(i).X = -500
        sshot(i).Y = -500
    NEXT

    oneshot.X = -500 'KEEP
    oneshot.Y = -500
    oneshot2.X = -500
    oneshot2.Y = -500
    oneshot3.X = -500
    oneshot3.Y = -500

    '-------------------------------------SCRIPT DATA

    foregroundscrapscriptran = 0
    backgroundscrapscriptran = 0
    lasershotscriptran = 0
    multishotscriptran = 0
    scrapshotscriptran = 0
    cruiserstopscriptran = 0
    rotationscript = 0
    setletterscriptran = 0
    healthscriptran = 0
    animation1ran = 0
    animation2ran = 0

    '-------------------------------------SHOTDOWN DATA
    shotdown = 0
    fightersdown = 0
    bombersdown = 0
    cruisersdown = 0

    '-------------------------------------OTHER DATA
    soundlevel = 0.3 '0.5
    soundlevel = soundlevel * 10
    audiolevel = 0.5 '0.5
    audiolevel = audiolevel * 10
    sounddelay = 0
    scrapcollected = 0
    loadlevel = 0
    issoundon = 1
    isaudioon = 1
    playermovingcase = 2
    iterations = 0
    weapontype = 1 ' single laser
    singlelaserupgrade = 1
    fighterlaserupgrade = 1
    rapidlaserupgrade = 0 'needs to start at 0 so first case gets selected
    scrapcannonupgrade = 0
    endcredits = 0
    gamepaused = 0
    gamefps = 60
    audioplayed = 0

    rotationcount = 0 'TEST
    yiterations = 0
    dropy = 600
    blastnum = 1 ' - has to be 1 for explosions to work

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB overlapchecks___SETUP '========================================================================SUB CRUISER OVERLAP SETUP

    FOR i = 1 TO numcruisers
        IF (cruisers(i).X >= cruisers(i - 1).X) AND (cruisers(i).X + cruisers(i).WIDTH <= cruisers(i - 1).X + cruisers(i - 1).WIDTH) THEN
            DO
                cruisers(i).X = cruisers(i).X - 1
            LOOP UNTIL (cruisers(i).X < cruisers(i - 1).X) AND (cruisers(i).X + cruisers(i).WIDTH <= cruisers(i - 1).X + cruisers(i - 1).WIDTH)
        END IF
    NEXT

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB newscreen___SETUP '=====================================================================SUB NEW SCREEN SETUP

    CLS
    win.WIDTH = 1000
    win.HEIGHT = 1000
    win.COLORS = 32
    SCREEN _NEWIMAGE(win.WIDTH, win.HEIGHT, win.COLORS)

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

'                                               !!!  PLAYER subroutines !!!

'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB moveplayer___PLAYER '===============================================================================SUB MOVE PLAYER

    IF rotationscript = 0 THEN '             - let planet rotate first
        irotation = 1
        rotationscript = 1
    END IF

    IF loadlevel < 3 THEN
        yiterations = yiterations + 1
        IF yiterations >= 25 THEN '100
            win.Y = win.Y + 1
            IF yiterations > 25 THEN yiterations = 0
        END IF
        IF iterations = 300 THEN ' 200
            irotation = irotation + 1 '20 for faster testing   2 for normal
            rotationcount = rotationcount + 1
            IF irotation >= maxrotation THEN irotation = 1
            iterations = 0
        END IF
        _PUTIMAGE (win.X, win.Y), planetrotation(irotation)
        iterations = iterations + 1
    END IF

    player.XKILLBOX = player.X + player.MIDX
    player.YKILLBOX = player.Y + player.MIDY

    IF loadlevel > 0 THEN

        playermovingcase = 2 '     - used to determine if player is 1 banking left / 2 level / 3 banking right

        IF _KEYDOWN(CVI(CHR$(0) + "K")) AND player.X > win.LEFT THEN '    - MOVE LEFT
            player.X = player.X - player.SPEED
            playermovingcase = 1
            win.X = win.X + 1
        END IF

        IF _KEYDOWN(CVI(CHR$(0) + "M")) AND player.X + player.WIDTH < win.RIGHT THEN '  - MOVE RIGHT
            player.X = player.X + player.SPEED
            win.X = win.X - 1
            playermovingcase = 3
        END IF

        IF _KEYDOWN(CVI(CHR$(0) + "H")) AND player.Y > win.TOP THEN '  - MOVE UP
            player.Y = player.Y - player.SPEED
            win.Y = win.Y + 1 '-
        END IF

        IF _KEYDOWN(CVI(CHR$(0) + "P")) AND player.Y + player.HEIGHT < win.BOTTOM THEN '   - MOVE DOWN
            player.Y = player.Y + player.SPEED
            win.Y = win.Y - 1 '+
        END IF

    END IF

    IF player.X <= win.LEFT THEN player.X = win.LEFT '                                 - set left boundary
    IF player.X + player.WIDTH >= win.RIGHT THEN player.X = win.RIGHT - player.WIDTH ' - set right boundary
    IF player.Y <= win.TOP THEN player.Y = win.TOP '                                   - set top boundary
    IF player.Y >= win.BOTTOM THEN player.Y = win.BOTTOM - player.HEIGHT '             - set bottom boundary

    IF loadlevel > 0 AND animation1ran = 1 AND animation2ran = 1 THEN '                    - player ship banks and stays in front of planet

        SELECT CASE playermovingcase
            CASE 1
                player.WIDTH = 50
                player.HEIGHT = 58
                _PUTIMAGE (player.X, player.Y), playerbankleft
            CASE 3
                player.WIDTH = 50
                player.HEIGHT = 58
                _PUTIMAGE (player.X, player.Y), playerbankright
            CASE ELSE
                player.WIDTH = 60
                player.HEIGHT = 60
                _PUTIMAGE (player.X, player.Y), player.PIC
        END SELECT

    END IF

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB shothitdetection___PLAYER '==================================================== SUB SHOT HIT DETECTION PLAYER

    '----------------------------   SCRAP SHOT HIT DETECTION   ---------------------
    numshots = 0

    DO
        IF sshot(numshots).ACTIVE THEN
            sshot(numshots).SPEED = 10
            sshot(numshots).HEIGHT = 30
            sshot(numshots).WIDTH = 30
            sshot(numshots).MIDX = sshot(numshots).WIDTH / 2
            sshot(numshots).Y = sshot(numshots).Y - sshot(numshots).SPEED '-5
            sshot(numshots).DAMAGE = 160
            IF sshot(numshots).Y <= 0 THEN
                sshot(numshots).ACTIVE = FALSE
                sshot(numshots).X = -500 'KEEP
                sshot(numshots).Y = -500 'KEEP
            ELSE
                _PUTIMAGE (sshot(numshots).X, sshot(numshots).Y), sshotpic
            END IF
        END IF

        '--------------------------------------------FIGHTERS

        FOR inf = 1 TO numfighters
            RANDOMIZE TIMER
            fighters(inf).RANDOMY = INT(RND * fighters(inf).HEIGHT)

            fighters(inf).XKILLBOX = fighters(inf).X + fighters(inf).MIDX
            fighters(inf).YKILLBOX = fighters(inf).Y + fighters(inf).MIDY

            ' if player shot hits shield anywhere

            IF (fighters(inf).KILLED = 0) AND (fighters(inf).SHIELDON = 1) AND (sshot(numshots).X + sshot(numshots).WIDTH >= fighters(inf).X) AND (sshot(numshots).X <= fighters(inf).X + fighters(inf).WIDTH) AND (sshot(numshots).Y <= fighters(inf).Y + fighters(inf).HEIGHT) AND (sshot(numshots).Y + sshot(numshots).HEIGHT >= fighters(inf).Y) THEN
                fighters(inf).SHIELDHEALTH = fighters(inf).SHIELDHEALTH - sshot(numshots).DAMAGE
                blastnum = 1
                DO WHILE blastnum < deflectcount ' - deflection animation
                    _PUTIMAGE ((fighters(inf).X + INT(RND * fighters(inf).WIDTH)), fighters(inf).Y + fighters(inf).HEIGHT), deflectgif(blastnum) ' - best so far, but random placement on x
                    blastnum = blastnum + 1
                LOOP
                sshot(numshots).X = -500 'KEEP
                sshot(numshots).Y = -500 'KEEP
                sshot(numshots).ACTIVE = FALSE
                IF fighters(inf).SHIELDHEALTH <= 0 THEN
                    fighters(inf).SHIELDON = 0
                    fighters(inf).HEIGHT = 60
                END IF
            END IF

            IF fighters(inf).SHIELDON = 0 THEN
                ' - if player shot hits killbox

                IF (fighters(inf).KILLED) = 0 AND (sshot(numshots).X + sshot(numshots).WIDTH >= fighters(inf).XKILLBOX) AND (sshot(numshots).X <= fighters(inf).XKILLBOX) AND (sshot(numshots).Y <= fighters(inf).YKILLBOX) AND (sshot(numshots).Y + sshot(numshots).HEIGHT >= fighters(inf).Y) THEN
                    fighters(inf).HEALTH = fighters(inf).HEALTH - (sshot(numshots).DAMAGE + 40)
                    blastnum = 1
                    DO WHILE blastnum < endblast
                        _PUTIMAGE (fighters(inf).XKILLBOX, fighters(inf).YKILLBOX), blastgif(blastnum) ' - place killbox blast on the fighter
                        blastnum = blastnum + 1
                    LOOP
                    sshot(numshots).X = -500 'KEEP
                    sshot(numshots).Y = -500 'KEEP
                    sshot(numshots).ACTIVE = FALSE
                END IF

                ' - if player shot hits grey box

                IF (fighters(inf).KILLED) = 0 AND (sshot(numshots).X + sshot(numshots).WIDTH >= fighters(inf).X) AND (sshot(numshots).X <= fighters(inf).X + fighters(inf).WIDTH) AND (sshot(numshots).Y <= fighters(inf).YKILLBOX) AND (sshot(numshots).Y + sshot(numshots).HEIGHT >= fighters(inf).Y) THEN
                    fighters(inf).HEALTH = fighters(inf).HEALTH - sshot(numshots).DAMAGE
                    blastnum = 1
                    DO WHILE blastnum < endblast
                        _PUTIMAGE (sshot(numshots).X, fighters(inf).Y + fighters(inf).RANDOMY), blastgif(blastnum)
                        blastnum = blastnum + 1
                    LOOP
                    sshot(numshots).X = -500 'KEEP
                    sshot(numshots).Y = -500 'KEEP
                    sshot(numshots).ACTIVE = FALSE
                END IF

            END IF

        NEXT

        '--------------------------------------------BOMBERS

        FOR i = 1 TO numbombers
            RANDOMIZE TIMER
            bombers(i).RANDOMY = INT(RND * bombers(i).HEIGHT)

            bombers(i).XKILLBOX = bombers(i).X + bombers(i).MIDX
            bombers(i).YKILLBOX = bombers(i).Y + bombers(i).MIDY

            ' - if player shot hits killbox

            IF (bombers(i).KILLED) = 0 AND (sshot(numshots).X + sshot(numshots).WIDTH >= bombers(i).XKILLBOX) AND (sshot(numshots).X <= bombers(i).XKILLBOX) AND (sshot(numshots).Y <= bombers(i).YKILLBOX) AND (sshot(numshots).Y + sshot(numshots).HEIGHT >= bombers(i).Y) THEN
                bombers(i).HEALTH = bombers(i).HEALTH - (sshot(numshots).DAMAGE + 40)
                blastnum = 1
                DO WHILE blastnum < endblast
                    _PUTIMAGE (INT(RND * bombers(i).WIDTH) + bombers(i).X, INT(RND * bombers(i).HEIGHT) + bombers(i).Y), blastgif(blastnum) ' - place killbox blast on the bomber
                    blastnum = blastnum + 1
                LOOP
                sshot(numshots).X = -500 'KEEP
                sshot(numshots).Y = -500 'KEEP
                sshot(numshots).ACTIVE = FALSE
            END IF

            ' - if player shot hits grazebox

            IF (bombers(i).KILLED) = 0 AND (sshot(numshots).X + sshot(numshots).WIDTH >= bombers(i).X) AND (sshot(numshots).X <= bombers(i).X + bombers(i).WIDTH) AND (sshot(numshots).Y <= bombers(i).YKILLBOX) AND (sshot(numshots).Y + sshot(numshots).HEIGHT >= bombers(i).Y) THEN
                bombers(i).HEALTH = bombers(i).HEALTH - sshot(numshots).DAMAGE
                blastnum = 1
                DO WHILE blastnum < endblast
                    _PUTIMAGE (sshot(numshots).X, (bombers(i).Y + INT(RND * bombers(i).HEIGHT))), blastgif(blastnum) ' - place precise blasts on the bomber
                    blastnum = blastnum + 1
                LOOP
                sshot(numshots).X = -500 'KEEP
                sshot(numshots).Y = -500 'KEEP
                sshot(numshots).ACTIVE = FALSE
            END IF

        NEXT

        '---------------------------------------------CRUISERS

        FOR i = 1 TO numcruisers
            RANDOMIZE TIMER

            cruisers(i).XKILLBOX = cruisers(i).X + cruisers(i).MIDX
            cruisers(i).YKILLBOX = cruisers(i).Y + cruisers(i).MIDY
            cruisers(i).RANDOMY = INT(RND * cruisers(i).YKILLBOX)

            ' - if player shot hits killbox

            IF (cruisers(i).VISIBLE = 1) AND (cruisers(i).KILLED) = 0 AND (sshot(numshots).X + sshot(numshots).WIDTH >= cruisers(i).XKILLBOX) AND (sshot(numshots).X <= cruisers(i).XKILLBOX) AND (sshot(numshots).Y <= cruisers(i).YKILLBOX) AND (sshot(numshots).Y + sshot(numshots).HEIGHT >= cruisers(i).Y) THEN
                cruisers(i).HEALTH = cruisers(i).HEALTH - (sshot(numshots).DAMAGE + 40)
                blastnum = 1
                DO WHILE blastnum < endblast
                    _PUTIMAGE (INT(RND * cruisers(i).WIDTH) + cruisers(i).X, INT(RND * cruisers(i).HEIGHT) + cruisers(i).Y), blastgif(blastnum) ' - place killbox blast on the cruiser
                    blastnum = blastnum + 1
                LOOP
                sshot(numshots).X = -500 'KEEP
                sshot(numshots).Y = -500 'KEEP
                sshot(numshots).ACTIVE = FALSE
            END IF

            ' - if player shot hits grazebox

            IF (cruisers(i).VISIBLE = 1) AND (cruisers(i).KILLED) = 0 AND (sshot(numshots).X + sshot(numshots).WIDTH >= cruisers(i).X) AND (sshot(numshots).X <= cruisers(i).X + cruisers(i).WIDTH) AND (sshot(numshots).Y <= cruisers(i).YKILLBOX) AND (sshot(numshots).Y + sshot(numshots).HEIGHT >= cruisers(i).Y) THEN
                cruisers(i).HEALTH = cruisers(i).HEALTH - sshot(numshots).DAMAGE
                blastnum = 1
                DO WHILE blastnum < endblast
                    _PUTIMAGE (sshot(numshots).X, cruisers(i).Y + cruisers(i).RANDOMY), blastgif(blastnum)
                    blastnum = blastnum + 1
                LOOP
                sshot(numshots).X = -500 'KEEP TEST
                sshot(numshots).Y = -500 'KEEP
                sshot(numshots).ACTIVE = FALSE
            END IF

        NEXT

        ' - check for destroyed ships

        FOR inf = 1 TO numfighters
            RANDOMIZE TIMER
            arbicon = INT(RND * 4)
            IF fighters(inf).HEALTH <= 0 AND fighters(inf).KILLED = 0 THEN
                fighters(inf).KILLED = 1
                shotdown = shotdown + 1
                fightersdown = fightersdown + 1
                IF arbicon = 1 THEN
                    fighters(inf).RANDOMICON = 1
                    fighters(inf).TIMESTART = TIMER
                END IF
            END IF
        NEXT

        FOR i = 1 TO numbombers
            RANDOMIZE TIMER
            arbicon = INT(RND * 4)
            IF bombers(i).HEALTH <= 0 AND bombers(i).KILLED = 0 THEN
                bombers(i).KILLED = 1
                shotdown = shotdown + 1
                bombersdown = bombersdown + 1
                IF arbicon = 1 THEN
                    bombers(i).RANDOMICON = 1
                    bombers(i).TIMESTART = TIMER
                END IF
            END IF
        NEXT

        FOR i = 1 TO numcruisers
            RANDOMIZE TIMER
            arbicon = INT(RND * 4)
            IF cruisers(i).HEALTH <= 0 AND cruisers(i).KILLED = 0 THEN
                cruisers(i).KILLED = 1
                shotdown = shotdown + 1
                cruisersdown = cruisersdown + 1
                IF arbicon = 1 THEN
                    cruisers(i).RANDOMICON = 1
                    cruisers(i).TIMESTART = TIMER
                END IF
            END IF
        NEXT

        numshots = numshots + 1
    LOOP UNTIL numshots = maxshots

    scrapshotscriptran = 0

    '-------------------------   MULTI SHOT HIT DETECTION   ---------------------
    numshots = 0
    DO
        IF xshot(numshots).ACTIVE THEN
            xshot(numshots).SPEED = 10
            xshot(numshots).HEIGHT = 20
            xshot(numshots).WIDTH = 10
            xshot(numshots).MIDX = xshot(numshots).WIDTH / 2
            xshot(numshots).Y = xshot(numshots).Y - xshot(numshots).SPEED '-5
            xshot(numshots).DAMAGE = 40
            IF xshot(numshots).Y <= 0 THEN
                xshot(numshots).ACTIVE = FALSE
                xshot(numshots).X = -500 'KEEP
                xshot(numshots).Y = -500 'KEEP
            ELSE
                _PUTIMAGE (xshot(numshots).X, xshot(numshots).Y), rapidlaserpic
            END IF
        END IF

        '--------------------------------------------FIGHTERS

        FOR inf = 1 TO numfighters
            RANDOMIZE TIMER
            fighters(inf).RANDOMY = INT(RND * fighters(inf).HEIGHT)

            fighters(inf).XKILLBOX = fighters(inf).X + fighters(inf).MIDX
            fighters(inf).YKILLBOX = fighters(inf).Y + fighters(inf).MIDY

            ' if player shot hits shield anywhere

            IF (fighters(inf).KILLED = 0) AND (fighters(inf).SHIELDON = 1) AND (xshot(numshots).X + xshot(numshots).WIDTH >= fighters(inf).X) AND (xshot(numshots).X <= fighters(inf).X + fighters(inf).WIDTH) AND (xshot(numshots).Y <= fighters(inf).Y + fighters(inf).HEIGHT) AND (xshot(numshots).Y + xshot(numshots).HEIGHT >= fighters(inf).Y) THEN
                fighters(inf).SHIELDHEALTH = fighters(inf).SHIELDHEALTH - xshot(numshots).DAMAGE
                blastnum = 1
                DO WHILE blastnum < deflectcount ' - deflection animation
                    _PUTIMAGE ((fighters(inf).X + INT(RND * fighters(inf).WIDTH)), fighters(inf).Y + fighters(inf).HEIGHT), deflectgif(blastnum) ' - best so far, but random placement on x
                    blastnum = blastnum + 1
                LOOP
                xshot(numshots).X = -500 'KEEP
                xshot(numshots).Y = -500 'KEEP
                xshot(numshots).ACTIVE = FALSE
                IF fighters(inf).SHIELDHEALTH <= 0 THEN
                    fighters(inf).SHIELDON = 0
                    fighters(inf).HEIGHT = 60
                END IF

            END IF

            IF fighters(inf).SHIELDON = 0 THEN
                ' - if player shot hits killbox

                IF (fighters(inf).KILLED) = 0 AND (xshot(numshots).X + xshot(numshots).WIDTH >= fighters(inf).XKILLBOX) AND (xshot(numshots).X <= fighters(inf).XKILLBOX) AND (xshot(numshots).Y <= fighters(inf).YKILLBOX) AND (xshot(numshots).Y + xshot(numshots).HEIGHT >= fighters(inf).Y) THEN
                    fighters(inf).HEALTH = fighters(inf).HEALTH - xshot(numshots).DAMAGE
                    blastnum = 1
                    DO WHILE blastnum < endblast
                        _PUTIMAGE (fighters(inf).XKILLBOX, fighters(inf).YKILLBOX), blastgif(blastnum) ' - place killbox blast on the fighter
                        blastnum = blastnum + 1
                    LOOP
                    xshot(numshots).X = -500 'KEEP
                    xshot(numshots).Y = -500 'KEEP
                    xshot(numshots).ACTIVE = FALSE
                END IF

                ' - if player shot hits grey box

                IF (fighters(inf).KILLED) = 0 AND (xshot(numshots).X + xshot(numshots).WIDTH >= fighters(inf).X) AND (xshot(numshots).X <= fighters(inf).X + fighters(inf).WIDTH) AND (xshot(numshots).Y <= fighters(inf).YKILLBOX) AND (xshot(numshots).Y + xshot(numshots).HEIGHT >= fighters(inf).Y) THEN
                    fighters(inf).HEALTH = fighters(inf).HEALTH - (INT(RND * 20) + 20)
                    blastnum = 1
                    DO WHILE blastnum < endblast
                        _PUTIMAGE (xshot(numshots).X, fighters(inf).Y + fighters(inf).RANDOMY), blastgif(blastnum)
                        blastnum = blastnum + 1
                    LOOP
                    xshot(numshots).X = -500 'KEEP
                    xshot(numshots).Y = -500 'KEEP
                    xshot(numshots).ACTIVE = FALSE
                END IF

            END IF

        NEXT

        '--------------------------------------------BOMBERS

        FOR i = 1 TO numbombers
            RANDOMIZE TIMER
            bombers(i).RANDOMY = INT(RND * bombers(i).HEIGHT)

            bombers(i).XKILLBOX = bombers(i).X + bombers(i).MIDX
            bombers(i).YKILLBOX = bombers(i).Y + bombers(i).MIDY

            ' - if player shot hits killbox

            IF (bombers(i).KILLED) = 0 AND (xshot(numshots).X + xshot(numshots).WIDTH >= bombers(i).XKILLBOX) AND (xshot(numshots).X <= bombers(i).XKILLBOX) AND (xshot(numshots).Y <= bombers(i).YKILLBOX) AND (xshot(numshots).Y + xshot(numshots).HEIGHT >= bombers(i).Y) THEN
                bombers(i).HEALTH = bombers(i).HEALTH - xshot(numshots).DAMAGE
                blastnum = 1
                DO WHILE blastnum < endblast
                    _PUTIMAGE (bombers(i).XKILLBOX, bombers(i).YKILLBOX), blastgif(blastnum) ' - place killbox blast on the bomber
                    blastnum = blastnum + 1
                LOOP
                xshot(numshots).X = -500 'KEEP
                xshot(numshots).Y = -500 'KEEP
                xshot(numshots).ACTIVE = FALSE
            END IF

            ' - if player shot hits grazebox

            IF (bombers(i).KILLED) = 0 AND (xshot(numshots).X + xshot(numshots).WIDTH >= bombers(i).X) AND (xshot(numshots).X <= bombers(i).X + bombers(i).WIDTH) AND (xshot(numshots).Y <= bombers(i).YKILLBOX) AND (xshot(numshots).Y + xshot(numshots).HEIGHT >= bombers(i).Y) THEN
                bombers(i).HEALTH = bombers(i).HEALTH - (INT(RND * 20) + 20)
                blastnum = 1
                DO WHILE blastnum < endblast
                    _PUTIMAGE (xshot(numshots).X, bombers(i).Y + bombers(i).RANDOMY), blastgif(blastnum)
                    blastnum = blastnum + 1
                LOOP
                xshot(numshots).X = -500 'KEEP
                xshot(numshots).Y = -500 'KEEP
                xshot(numshots).ACTIVE = FALSE
            END IF

        NEXT

        '---------------------------------------------CRUISERS

        FOR i = 1 TO numcruisers
            RANDOMIZE TIMER

            cruisers(i).XKILLBOX = cruisers(i).X + cruisers(i).MIDX
            cruisers(i).YKILLBOX = cruisers(i).Y + cruisers(i).MIDY
            cruisers(i).RANDOMY = INT(RND * cruisers(i).YKILLBOX)

            ' - if player shot hits killbox

            IF (cruisers(i).VISIBLE = 1) AND (cruisers(i).KILLED) = 0 AND (xshot(numshots).X + xshot(numshots).WIDTH >= cruisers(i).XKILLBOX) AND (xshot(numshots).X <= cruisers(i).XKILLBOX) AND (xshot(numshots).Y <= cruisers(i).YKILLBOX) AND (xshot(numshots).Y + xshot(numshots).HEIGHT >= cruisers(i).Y) THEN
                cruisers(i).HEALTH = cruisers(i).HEALTH - xshot(numshots).DAMAGE
                blastnum = 1
                DO WHILE blastnum < endblast
                    _PUTIMAGE (INT(RND * cruisers(i).WIDTH) + cruisers(i).X, cruisers(i).Y + cruisers(i).RANDOMY), blastgif(blastnum) ' - place killbox blast on the cruiser
                    blastnum = blastnum + 1
                LOOP
                xshot(numshots).X = -500 'KEEP
                xshot(numshots).Y = -500 'KEEP
                xshot(numshots).ACTIVE = FALSE
            END IF

            ' - if player shot hits grazebox

            IF (cruisers(i).VISIBLE = 1) AND (cruisers(i).KILLED) = 0 AND (xshot(numshots).X + xshot(numshots).WIDTH >= cruisers(i).X) AND (xshot(numshots).X <= cruisers(i).X + cruisers(i).WIDTH) AND (xshot(numshots).Y <= cruisers(i).YKILLBOX) AND (xshot(numshots).Y + xshot(numshots).HEIGHT >= cruisers(i).Y) THEN
                cruisers(i).HEALTH = cruisers(i).HEALTH - (INT(RND * 20) + 20)
                blastnum = 1
                DO WHILE blastnum < endblast
                    _PUTIMAGE (xshot(numshots).X, cruisers(i).Y + cruisers(i).RANDOMY), blastgif(blastnum)
                    blastnum = blastnum + 1
                LOOP
                xshot(numshots).X = -500 'KEEP TEST
                xshot(numshots).Y = -500 'KEEP
                xshot(numshots).ACTIVE = FALSE
            END IF

        NEXT

        ' - check for destroyed ships

        FOR inf = 1 TO numfighters
            RANDOMIZE TIMER
            arbicon = INT(RND * 4)
            IF fighters(inf).HEALTH <= 0 AND fighters(inf).KILLED = 0 THEN
                fighters(inf).KILLED = 1
                shotdown = shotdown + 1
                fightersdown = fightersdown + 1
                IF arbicon = 1 THEN
                    fighters(inf).ICONPICKEDUP = 0
                    fighters(inf).RANDOMICON = 1
                    fighters(inf).TIMESTART = TIMER
                END IF
            END IF
        NEXT

        FOR i = 1 TO numbombers
            RANDOMIZE TIMER
            arbicon = INT(RND * 4)
            IF bombers(i).HEALTH <= 0 AND bombers(i).KILLED = 0 THEN
                bombers(i).KILLED = 1
                shotdown = shotdown + 1
                bombersdown = bombersdown + 1
                IF arbicon = 1 THEN
                    bombers(i).ICONPICKEDUP = 0
                    bombers(i).RANDOMICON = 1
                    bombers(i).TIMESTART = TIMER
                END IF
            END IF
        NEXT

        FOR i = 1 TO numcruisers
            RANDOMIZE TIMER
            arbicon = INT(RND * 4)
            IF cruisers(i).HEALTH <= 0 AND cruisers(i).KILLED = 0 THEN
                cruisers(i).KILLED = 1
                shotdown = shotdown + 1
                cruisersdown = cruisersdown + 1
                IF arbicon = 1 THEN
                    cruisers(i).ICONPICKEDUP = 0
                    cruisers(i).RANDOMICON = 1
                    cruisers(i).TIMESTART = TIMER
                END IF
            END IF
        NEXT

        numshots = numshots + 1
    LOOP UNTIL numshots = maxshots

    multishotscriptran = 0

    '----------------------------------------------------------------------------------------SINGLE SHOT HIT DETECTION
    '----------------------------------------------------------FIGHTERS

    FOR inf = 1 TO numfighters
        RANDOMIZE TIMER
        fighters(inf).RANDOMY = INT(RND * fighters(inf).HEIGHT)

        fighters(inf).XKILLBOX = fighters(inf).X + fighters(inf).MIDX
        fighters(inf).YKILLBOX = fighters(inf).Y + fighters(inf).MIDY

        '-------------------------------------- SHIELD ON AND SINGLE LASER = 1
        ' if player shot hits shield anywhere
        IF (fighters(inf).KILLED = 0) AND (fighters(inf).SHIELDON = 1) AND (oneshot.X + oneshot.WIDTH >= fighters(inf).X) AND (oneshot.X <= fighters(inf).X + fighters(inf).WIDTH) AND (oneshot.Y <= fighters(inf).Y + fighters(inf).HEIGHT) AND (oneshot.Y + oneshot.HEIGHT >= fighters(inf).Y) THEN
            fighters(inf).SHIELDHEALTH = fighters(inf).SHIELDHEALTH - oneshot.DAMAGE
            blastnum = 1
            DO WHILE blastnum < deflectcount ' - deflection animation
                _PUTIMAGE ((fighters(inf).X + INT(RND * fighters(inf).WIDTH)), fighters(inf).Y + fighters(inf).HEIGHT), deflectgif(blastnum) ' - best so far, but random placement on x
                blastnum = blastnum + 1
            LOOP
            lasershotscriptran = 0 'TEST resets the shot because it hit
            oneshot.X = -500 'TEST because shots were going past shields
            oneshot.Y = -500
            IF fighters(inf).SHIELDHEALTH <= 0 THEN
                fighters(inf).SHIELDON = 0
                fighters(inf).HEIGHT = 60
            END IF

        END IF
        '-----------------------------------------------------SHIELD OFF AND SINGLE LASER = 1
        IF fighters(inf).SHIELDON = 0 THEN

            ' - if player hits killbox
            IF (fighters(inf).KILLED) = 0 AND (oneshot.X + oneshot.WIDTH >= fighters(inf).XKILLBOX) AND (oneshot.X <= fighters(inf).XKILLBOX) AND (oneshot.Y <= fighters(inf).YKILLBOX) AND (oneshot.Y + oneshot.HEIGHT >= fighters(inf).Y) THEN
                fighters(inf).HEALTH = fighters(inf).HEALTH - (oneshot.DAMAGE + 20)
                fighters(inf).KILLHIT = 1
                fighters(inf).SHOTX = oneshot.X ' copies the shot value because original is about to be reset.
                fighters(inf).SHOTY = oneshot.Y
                'lasershotscriptran = 0 'resets the shot because it hit
                oneshot.X = -500
                oneshot.Y = -500
            END IF

            ' - if player hits grazebox
            IF (fighters(inf).KILLED) = 0 AND (oneshot.X + oneshot.WIDTH >= fighters(inf).X) AND (oneshot.X <= fighters(inf).X + fighters(inf).WIDTH) AND (oneshot.Y <= fighters(inf).YKILLBOX) AND (oneshot.Y + oneshot.HEIGHT >= fighters(inf).Y) THEN
                fighters(inf).HEALTH = fighters(inf).HEALTH - oneshot.DAMAGE
                fighters(inf).GRAZEHIT = 1
                fighters(inf).SHOTX = oneshot.X ' copies the shot value because original is about to be reset.
                fighters(inf).SHOTY = oneshot.Y
                'lasershotscriptran = 0 'resets the shot because it hit  TEST
                oneshot.X = -500
                oneshot.Y = -500
            END IF

        END IF

        '----------------------------------- SHIELD ON AND SINGLE LASER = 2 or 3
        '----------------if left player shot hits shield anywhere
        IF singlelaserupgrade = 2 OR singlelaserupgrade = 3 THEN
            IF (fighters(inf).KILLED = 0) AND (fighters(inf).SHIELDON = 1) AND (oneshot2.X + oneshot2.WIDTH >= fighters(inf).X) AND (oneshot2.X <= fighters(inf).X + fighters(inf).WIDTH) AND (oneshot2.Y <= fighters(inf).Y + fighters(inf).HEIGHT) AND (oneshot2.Y + oneshot2.HEIGHT >= fighters(inf).Y) THEN
                fighters(inf).SHIELDHEALTH = fighters(inf).SHIELDHEALTH - oneshot.DAMAGE
                blastnum = 1
                DO WHILE blastnum < deflectcount ' - deflection animation
                    _PUTIMAGE ((fighters(inf).X + INT(RND * fighters(inf).WIDTH)), fighters(inf).Y + fighters(inf).HEIGHT), deflectgif(blastnum) ' - best so far, but random placement on x
                    blastnum = blastnum + 1
                LOOP
                lasershotscriptran = 0 'TEST resets the shot because it hit
                oneshot2.X = -500 'TEST because shots were going past shields
                oneshot2.Y = -500
                oneshot3.X = -500 'TEST because shots were going past shields
                oneshot3.Y = -500
                IF fighters(inf).SHIELDHEALTH <= 0 THEN
                    fighters(inf).SHIELDON = 0
                    fighters(inf).HEIGHT = 60
                END IF
            END IF
            '----------if right player shot hits shield anywhere
            IF (fighters(inf).KILLED = 0) AND (fighters(inf).SHIELDON = 1) AND (oneshot3.X + oneshot3.WIDTH >= fighters(inf).X) AND (oneshot3.X <= fighters(inf).X + fighters(inf).WIDTH) AND (oneshot3.Y <= fighters(inf).Y + fighters(inf).HEIGHT) AND (oneshot3.Y + oneshot3.HEIGHT >= fighters(inf).Y) THEN
                fighters(inf).SHIELDHEALTH = fighters(inf).SHIELDHEALTH - oneshot.DAMAGE
                blastnum = 1
                DO WHILE blastnum < deflectcount ' - deflection animation
                    _PUTIMAGE ((fighters(inf).X + INT(RND * fighters(inf).WIDTH)), fighters(inf).Y + fighters(inf).HEIGHT), deflectgif(blastnum) ' - best so far, but random placement on x
                    blastnum = blastnum + 1
                LOOP
                lasershotscriptran = 0 'TEST resets the shot because it hit
                oneshot2.X = -500 'TEST because shots were going past shields
                oneshot2.Y = -500
                oneshot3.X = -500 'TEST because shots were going past shields
                oneshot3.Y = -500
                IF fighters(inf).SHIELDHEALTH <= 0 THEN
                    fighters(inf).SHIELDON = 0
                    fighters(inf).HEIGHT = 60
                END IF
            END IF

            '--------------------------------------SHIELD OFF AND SINGLE LASER = 2 OR 3
            IF fighters(inf).SHIELDON = 0 THEN
                ' - if left player shot hits killbox
                IF (fighters(inf).KILLED) = 0 AND (oneshot2.X + oneshot2.WIDTH >= fighters(inf).XKILLBOX) AND (oneshot2.X <= fighters(inf).XKILLBOX) AND (oneshot2.Y <= fighters(inf).YKILLBOX) AND (oneshot2.Y + oneshot2.HEIGHT >= fighters(inf).Y) THEN
                    fighters(inf).HEALTH = fighters(inf).HEALTH - (oneshot.DAMAGE + 20)
                    blastnum = 1
                    DO WHILE blastnum < endblast
                        _PUTIMAGE (INT(RND * fighters(inf).WIDTH) + fighters(inf).X, INT(RND * fighters(inf).HEIGHT) + fighters(inf).Y), blastgif(blastnum) ' - place random blasts on the cruiser
                        blastnum = blastnum + 1
                    LOOP
                    lasershotscriptran = 0 'resets the shot because it hit
                    oneshot2.X = -500 'TEST because shots were going past shields
                    oneshot2.Y = -500
                    oneshot3.X = -500 'TEST because shots were going past shields
                    oneshot3.Y = -500
                END IF
                ' - if right player shot hits killbox
                IF (fighters(inf).KILLED) = 0 AND (oneshot3.X + oneshot3.WIDTH >= fighters(inf).XKILLBOX) AND (oneshot3.X <= fighters(inf).XKILLBOX) AND (oneshot3.Y <= fighters(inf).YKILLBOX) AND (oneshot3.Y + oneshot3.HEIGHT >= fighters(inf).Y) THEN
                    fighters(inf).HEALTH = fighters(inf).HEALTH - (oneshot.DAMAGE + 20)
                    blastnum = 1
                    DO WHILE blastnum < endblast
                        _PUTIMAGE (INT(RND * fighters(inf).WIDTH) + fighters(inf).X, INT(RND * fighters(inf).HEIGHT) + fighters(inf).Y), blastgif(blastnum) ' - place random blasts on the cruiser
                        blastnum = blastnum + 1
                    LOOP
                    lasershotscriptran = 0 'resets the shot because it hit
                    oneshot2.X = -500 'TEST because shots were going past shields
                    oneshot2.Y = -500
                    oneshot3.X = -500 'TEST because shots were going past shields
                    oneshot3.Y = -500
                END IF

                ' - if left shot hits grazebox
                IF (fighters(inf).KILLED) = 0 AND (oneshot2.X + oneshot2.WIDTH >= fighters(inf).X) AND (oneshot2.X <= fighters(inf).X + fighters(inf).WIDTH) AND (oneshot2.Y <= fighters(inf).YKILLBOX) AND (oneshot2.Y + oneshot2.HEIGHT >= fighters(inf).Y) THEN
                    fighters(inf).HEALTH = fighters(inf).HEALTH - oneshot.DAMAGE
                    blastnum = 1
                    DO WHILE blastnum < endblast
                        _PUTIMAGE (oneshot2.X, (fighters(inf).Y + INT(RND * fighters(inf).HEIGHT))), blastgif(blastnum) ' - place precise blasts on the fighter
                        blastnum = blastnum + 1
                    LOOP
                END IF
                ' - if right shot hits grazebox
                IF (fighters(inf).KILLED) = 0 AND (oneshot3.X + oneshot3.WIDTH >= fighters(inf).X) AND (oneshot3.X <= fighters(inf).X + fighters(inf).WIDTH) AND (oneshot3.Y <= fighters(inf).YKILLBOX) AND (oneshot3.Y + oneshot3.HEIGHT >= fighters(inf).Y) THEN
                    fighters(inf).HEALTH = fighters(inf).HEALTH - oneshot.DAMAGE
                    blastnum = 1
                    DO WHILE blastnum < endblast
                        _PUTIMAGE (oneshot3.X, (fighters(inf).Y + INT(RND * fighters(inf).HEIGHT))), blastgif(blastnum) ' - place precise blasts on the fighter
                        blastnum = blastnum + 1
                    LOOP
                END IF

            END IF

        END IF

        IF fighters(inf).HEALTH <= 0 AND fighters(inf).KILLED = 0 THEN
            RANDOMIZE TIMER
            arbicon = INT(RND * 4)
            fighters(inf).KILLED = 1
            shotdown = shotdown + 1
            fightersdown = fightersdown + 1
            IF arbicon = 1 THEN
                fighters(inf).ICONPICKEDUP = 0
                fighters(inf).RANDOMICON = 1
                fighters(inf).TIMESTART = TIMER
            END IF
        END IF

    NEXT

    '----------------------------------------------------------BOMBERS

    FOR i = 1 TO numbombers
        RANDOMIZE TIMER
        bombers(i).RANDOMY = INT(RND * bombers(i).HEIGHT)

        bombers(i).XKILLBOX = bombers(i).X + bombers(i).MIDX
        bombers(i).YKILLBOX = bombers(i).Y + bombers(i).MIDY

        '------------------------------------SINGLE LASER = 1
        ' - if player hits killbox
        IF (bombers(i).KILLED) = 0 AND (oneshot.X + oneshot.WIDTH >= bombers(i).XKILLBOX) AND (oneshot.X <= bombers(i).XKILLBOX) AND (oneshot.Y <= bombers(i).YKILLBOX) AND (oneshot.Y + oneshot.HEIGHT >= bombers(i).Y) THEN
            bombers(i).HEALTH = bombers(i).HEALTH - (oneshot.DAMAGE + 20)
            blastnum = 1
            DO WHILE blastnum < endblast
                _PUTIMAGE (INT(RND * bombers(i).WIDTH) + bombers(i).X, INT(RND * bombers(i).HEIGHT) + bombers(i).Y), blastgif(blastnum) ' - place random blasts on the cruiser
                blastnum = blastnum + 1
            LOOP
            lasershotscriptran = 0 'resets the shot because it hit
            oneshot.X = -500
            oneshot.Y = -500
        END IF

        ' - if player hits grazebox
        IF (bombers(i).KILLED) = 0 AND (oneshot.X + oneshot.WIDTH >= bombers(i).X) AND (oneshot.X <= bombers(i).X + bombers(i).WIDTH) AND (oneshot.Y <= bombers(i).YKILLBOX) AND (oneshot.Y + oneshot.HEIGHT >= bombers(i).Y) THEN
            bombers(i).HEALTH = bombers(i).HEALTH - oneshot.DAMAGE
            blastnum = 1
            DO WHILE blastnum < endblast
                _PUTIMAGE (oneshot.X, bombers(i).Y + bombers(i).RANDOMY), blastgif(blastnum)
                blastnum = blastnum + 1
            LOOP
            lasershotscriptran = 0 'resets the shot because it hit
            oneshot.X = -500
            oneshot.Y = -500
        END IF

        '----------------------------------------------SINGLE LASER = 2 OR 3
        ' - if left laser hits killbox
        IF singlelaserupgrade = 2 OR singlelaserupgrade = 3 THEN
            IF (bombers(i).KILLED) = 0 AND (oneshot2.X + oneshot2.WIDTH >= bombers(i).XKILLBOX) AND (oneshot2.X <= bombers(i).XKILLBOX) AND (oneshot2.Y <= bombers(i).YKILLBOX) AND (oneshot2.Y + oneshot2.HEIGHT >= bombers(i).Y) THEN
                bombers(i).HEALTH = bombers(i).HEALTH - (oneshot.DAMAGE + 20)
                blastnum = 1
                DO WHILE blastnum < endblast
                    _PUTIMAGE (INT(RND * bombers(i).WIDTH) + bombers(i).X, INT(RND * bombers(i).HEIGHT) + bombers(i).Y), blastgif(blastnum) ' - place random blasts on the cruiser
                    blastnum = blastnum + 1
                LOOP
                lasershotscriptran = 0 'resets the shot because it hit
                oneshot2.X = -500 'TEST because shots were going past shields
                oneshot2.Y = -500
                oneshot3.X = -500 'TEST because shots were going past shields
                oneshot3.Y = -500
            END IF

            ' - if right laser hits killbox
            IF (bombers(i).KILLED) = 0 AND (oneshot3.X + oneshot3.WIDTH >= bombers(i).XKILLBOX) AND (oneshot3.X <= bombers(i).XKILLBOX) AND (oneshot3.Y <= bombers(i).YKILLBOX) AND (oneshot3.Y + oneshot3.HEIGHT >= bombers(i).Y) THEN
                bombers(i).HEALTH = bombers(i).HEALTH - (oneshot.DAMAGE + 20)
                blastnum = 1
                DO WHILE blastnum < endblast
                    _PUTIMAGE (INT(RND * bombers(i).WIDTH) + bombers(i).X, INT(RND * bombers(i).HEIGHT) + bombers(i).Y), blastgif(blastnum) ' - place random blasts on the cruiser
                    blastnum = blastnum + 1
                LOOP
                lasershotscriptran = 0 'resets the shot because it hit
                oneshot2.X = -500 'TEST because shots were going past shields
                oneshot2.Y = -500
                oneshot3.X = -500 'TEST because shots were going past shields
                oneshot3.Y = -500
            END IF

            ' - if left laser hits grazebox
            IF (bombers(i).KILLED) = 0 AND (oneshot2.X + oneshot2.WIDTH >= bombers(i).X) AND (oneshot2.X <= bombers(i).X + bombers(i).WIDTH) AND (oneshot2.Y <= bombers(i).YKILLBOX) AND (oneshot2.Y + oneshot2.HEIGHT >= bombers(i).Y) THEN
                bombers(i).HEALTH = bombers(i).HEALTH - oneshot.DAMAGE
                blastnum = 1
                DO WHILE blastnum < endblast
                    _PUTIMAGE (oneshot2.X, bombers(i).Y + bombers(i).RANDOMY), blastgif(blastnum)
                    blastnum = blastnum + 1
                LOOP
                lasershotscriptran = 0 'resets the shot because it hit
                oneshot2.X = -500 'TEST because shots were going past shields
                oneshot2.Y = -500
                oneshot3.X = -500 'TEST because shots were going past shields
                oneshot3.Y = -500
            END IF
            ' - if right laser hits grazebox
            IF (bombers(i).KILLED) = 0 AND (oneshot3.X + oneshot3.WIDTH >= bombers(i).X) AND (oneshot3.X <= bombers(i).X + bombers(i).WIDTH) AND (oneshot3.Y <= bombers(i).YKILLBOX) AND (oneshot3.Y + oneshot3.HEIGHT >= bombers(i).Y) THEN
                bombers(i).HEALTH = bombers(i).HEALTH - oneshot.DAMAGE
                blastnum = 1
                DO WHILE blastnum < endblast
                    _PUTIMAGE (oneshot3.X, bombers(i).Y + bombers(i).RANDOMY), blastgif(blastnum)
                    blastnum = blastnum + 1
                LOOP
                lasershotscriptran = 0 'resets the shot because it hit
                oneshot2.X = -500 'TEST because shots were going past shields
                oneshot2.Y = -500
                oneshot3.X = -500 'TEST because shots were going past shields
                oneshot3.Y = -500
            END IF
        END IF

        IF bombers(i).HEALTH <= 0 AND bombers(i).KILLED = 0 THEN
            RANDOMIZE TIMER
            arbicon = INT(RND * 4)
            bombers(i).KILLED = 1
            shotdown = shotdown + 1
            bombersdown = bombersdown + 1
            IF arbicon = 1 THEN
                bombers(i).ICONPICKEDUP = 0
                bombers(i).RANDOMICON = 1 'INT(RND * 3) + 1
                bombers(i).TIMESTART = TIMER
            END IF
        END IF

    NEXT

    '----------------------------------------------------------CRUISERS

    FOR i = 1 TO numcruisers
        RANDOMIZE TIMER

        cruisers(i).XKILLBOX = cruisers(i).X + cruisers(i).MIDX
        cruisers(i).YKILLBOX = cruisers(i).Y + cruisers(i).MIDY
        cruisers(i).RANDOMY = INT(RND * cruisers(i).YKILLBOX)

        ' - player hits killbox
        IF (cruisers(i).VISIBLE = 1) AND (cruisers(i).KILLED) = 0 AND (oneshot.X + oneshot.WIDTH >= cruisers(i).XKILLBOX) AND (oneshot.X <= cruisers(i).XKILLBOX) AND (oneshot.Y <= cruisers(i).YKILLBOX) AND (oneshot.Y + oneshot.HEIGHT >= cruisers(i).Y) THEN
            cruisers(i).HEALTH = cruisers(i).HEALTH - (oneshot.DAMAGE + 20)
            blastnum = 1
            DO WHILE blastnum < endblast
                _PUTIMAGE (INT(RND * cruisers(i).WIDTH) + cruisers(i).X, cruisers(i).Y + cruisers(i).RANDOMY), blastgif(blastnum)
                blastnum = blastnum + 1
            LOOP
            lasershotscriptran = 0 'resets the shot because it hit
            oneshot.X = -500
            oneshot.Y = -500
        END IF

        ' - player hits graze box
        IF (cruisers(i).VISIBLE = 1) AND (cruisers(i).KILLED) = 0 AND (oneshot.X + oneshot.WIDTH >= cruisers(i).X) AND (oneshot.X <= cruisers(i).X + cruisers(i).WIDTH) AND (oneshot.Y <= cruisers(i).YKILLBOX) AND (oneshot.Y + oneshot.HEIGHT >= cruisers(i).Y) THEN
            cruisers(i).HEALTH = cruisers(i).HEALTH - oneshot.DAMAGE
            blastnum = 1
            DO WHILE blastnum < endblast
                _PUTIMAGE (oneshot.X, cruisers(i).Y + cruisers(i).RANDOMY), blastgif(blastnum)
                blastnum = blastnum + 1
            LOOP
            lasershotscriptran = 0 'resets the shot because it hit
            oneshot.X = -500
            oneshot.Y = -500
        END IF

        IF singlelaserupgrade = 2 OR singlelaserupgrade = 3 THEN
            ' - player hits killbox
            IF (cruisers(i).VISIBLE = 1) AND (cruisers(i).KILLED) = 0 AND (oneshot2.X + oneshot2.WIDTH >= cruisers(i).XKILLBOX) AND (oneshot2.X <= cruisers(i).XKILLBOX) AND (oneshot2.Y <= cruisers(i).YKILLBOX) AND (oneshot2.Y + oneshot2.HEIGHT >= cruisers(i).Y) THEN
                cruisers(i).HEALTH = cruisers(i).HEALTH - (oneshot.DAMAGE + 20)
                blastnum = 1
                DO WHILE blastnum < endblast
                    _PUTIMAGE (INT(RND * cruisers(i).WIDTH) + cruisers(i).X, cruisers(i).Y + cruisers(i).RANDOMY), blastgif(blastnum) ' - place random blasts on the cruiser
                    blastnum = blastnum + 1
                LOOP
                lasershotscriptran = 0 'resets the shot because it hit
                oneshot2.X = -500 'TEST because shots were going past shields
                oneshot2.Y = -500
                oneshot3.X = -500 'TEST because shots were going past shields
                oneshot3.Y = -500
            END IF

            IF (cruisers(i).VISIBLE = 1) AND (cruisers(i).KILLED) = 0 AND (oneshot3.X + oneshot3.WIDTH >= cruisers(i).XKILLBOX) AND (oneshot3.X <= cruisers(i).XKILLBOX) AND (oneshot3.Y <= cruisers(i).YKILLBOX) AND (oneshot3.Y + oneshot3.HEIGHT >= cruisers(i).Y) THEN
                cruisers(i).HEALTH = cruisers(i).HEALTH - (oneshot.DAMAGE + 20)
                blastnum = 1
                DO WHILE blastnum < endblast
                    _PUTIMAGE (INT(RND * cruisers(i).WIDTH) + cruisers(i).X, cruisers(i).Y + cruisers(i).RANDOMY), blastgif(blastnum) ' - place random blasts on the cruiser
                    blastnum = blastnum + 1
                LOOP
                lasershotscriptran = 0 'resets the shot because it hit
                oneshot2.X = -500 'TEST because shots were going past shields
                oneshot2.Y = -500
                oneshot3.X = -500 'TEST because shots were going past shields
                oneshot3.Y = -500
            END IF

            ' - player hits graze box
            IF (cruisers(i).VISIBLE = 1) AND (cruisers(i).KILLED) = 0 AND (oneshot2.X + oneshot2.WIDTH >= cruisers(i).X) AND (oneshot2.X <= cruisers(i).X + cruisers(i).WIDTH) AND (oneshot2.Y <= cruisers(i).YKILLBOX) AND (oneshot2.Y + oneshot2.HEIGHT >= cruisers(i).Y) THEN
                cruisers(i).HEALTH = cruisers(i).HEALTH - oneshot.DAMAGE
                blastnum = 1
                DO WHILE blastnum < endblast
                    _PUTIMAGE (oneshot2.X, cruisers(i).Y + cruisers(i).RANDOMY), blastgif(blastnum)
                    blastnum = blastnum + 1
                LOOP
                lasershotscriptran = 0 'resets the shot because it hit
                oneshot2.X = -500 'TEST because shots were going past shields
                oneshot2.Y = -500
                oneshot3.X = -500 'TEST because shots were going past shields
                oneshot3.Y = -500
            END IF

            IF (cruisers(i).VISIBLE = 1) AND (cruisers(i).KILLED) = 0 AND (oneshot3.X + oneshot3.WIDTH >= cruisers(i).X) AND (oneshot3.X <= cruisers(i).X + cruisers(i).WIDTH) AND (oneshot3.Y <= cruisers(i).YKILLBOX) AND (oneshot3.Y + oneshot3.HEIGHT >= cruisers(i).Y) THEN
                cruisers(i).HEALTH = cruisers(i).HEALTH - oneshot.DAMAGE
                blastnum = 1
                DO WHILE blastnum < endblast
                    _PUTIMAGE (oneshot3.X, cruisers(i).Y + cruisers(i).RANDOMY), blastgif(blastnum)
                    blastnum = blastnum + 1
                LOOP
                lasershotscriptran = 0 'resets the shot because it hit
                oneshot2.X = -500 'TEST because shots were going past shields
                oneshot2.Y = -500
                oneshot3.X = -500 'TEST because shots were going past shields
                oneshot3.Y = -500
            END IF

        END IF

        FOR inf = 1 TO numfighters ' - wounded fighters activate shields
            IF fighters(inf).HEALTH > 140 AND fighters(inf).HEALTH < 160 AND fighters(inf).SHIELDHEALTH > 0 THEN
                fighters(inf).SHIELDON = 1
            END IF
        NEXT

        IF cruisers(i).HEALTH <= 0 AND cruisers(i).KILLED = 0 THEN
            RANDOMIZE TIMER
            arbicon = INT(RND * 4)
            cruisers(i).KILLED = 1
            shotdown = shotdown + 1
            cruisersdown = cruisersdown + 1
            IF arbicon = 1 THEN
                cruisers(i).ICONPICKEDUP = 0
                cruisers(i).RANDOMICON = 1
                cruisers(i).TIMESTART = TIMER
            END IF
        END IF

    NEXT

    '------------------------------------IF PLAYER LASERS FIRING . . .

    IF lasershotscriptran = 1 THEN

        SELECT CASE singlelaserupgrade
            CASE 1
                oneshot.Y = (oneshot.Y - oneshot.SPEED)

                IF (oneshot.Y + oneshot.HEIGHT) <= oneshot.RANGE THEN 'shot has range of half screen height
                    lasershotscriptran = 0 'allows reset for another shot
                    oneshot.X = -500
                    oneshot.Y = -500
                END IF

                _PUTIMAGE (oneshot.X, oneshot.Y), singlelaserpic

            CASE 2
                oneshot2.Y = (oneshot2.Y - oneshot2.SPEED)
                oneshot3.Y = (oneshot3.Y - oneshot3.SPEED)

                IF (oneshot2.Y + oneshot2.HEIGHT) <= oneshot2.RANGE THEN
                    lasershotscriptran = 0
                    oneshot2.X = -500
                    oneshot2.Y = -500
                END IF

                IF (oneshot3.Y + oneshot3.HEIGHT) <= oneshot3.RANGE THEN
                    lasershotscriptran = 0
                    oneshot3.X = -500
                    oneshot3.Y = -500
                END IF

                _PUTIMAGE (oneshot2.X, oneshot2.Y), singlelaserpic
                _PUTIMAGE (oneshot3.X, oneshot3.Y), singlelaserpic

            CASE 3
                oneshot.Y = (oneshot.Y - oneshot.SPEED)
                oneshot2.Y = (oneshot2.Y - oneshot2.SPEED)
                oneshot3.Y = (oneshot3.Y - oneshot3.SPEED)

                oneshot2.X = oneshot2.X - 1
                oneshot3.X = oneshot3.X + 1

                IF (oneshot.Y + oneshot.HEIGHT) <= oneshot.RANGE THEN 'shot has range of half screen height
                    lasershotscriptran = 0 'allows reset for another shot
                    oneshot.X = -500
                    oneshot.Y = -500
                END IF

                IF (oneshot2.Y + oneshot2.HEIGHT) <= oneshot2.RANGE THEN
                    lasershotscriptran = 0
                    oneshot2.X = -500
                    oneshot2.Y = -500
                END IF

                IF (oneshot3.Y + oneshot3.HEIGHT) <= oneshot3.RANGE THEN
                    lasershotscriptran = 0
                    oneshot3.X = -500
                    oneshot3.Y = -500
                END IF

                _PUTIMAGE (oneshot.X, oneshot.Y), singlelaserpic
                _PUTIMAGE (oneshot2.X, oneshot2.Y), singlelaserpic
                _PUTIMAGE (oneshot3.X, oneshot3.Y), singlelaserpic
        END SELECT

    END IF

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB rapidlaser___PLAYER '====================================================================SUB RAPID LASER PLAYER

    IF _KEYDOWN(32) AND rapidkeydelay = 0 AND sounddelay <= 0 THEN
        RANDOMIZE TIMER
        IF issoundon = 1 AND TIMER + soundlength > soundtimer THEN 'slow sounding. has pauses between bursts
            soundtimer = TIMER + soundlength
            _SNDVOL multilasersound, soundlevel
            _SNDPLAYCOPY multilasersound
            sounddelay = 3 '2 ok but 3 better

        END IF

        SELECT CASE rapidlaserupgrade
            CASE 1
                rapidkeydelay = 12
            CASE 2
                rapidkeydelay = 8
            CASE 3
                rapidkeydelay = 5
        END SELECT

        numshots = 0
        DO
            IF NOT xshot(numshots).ACTIVE THEN ' if no shots are active???
                xshot(numshots).ACTIVE = TRUE
                xshot(numshots).X = player.X + player.MIDX - xshot(numshots).MIDX
                xshot(numshots).Y = player.Y
                EXIT DO
            END IF
            numshots = numshots + 1

        LOOP UNTIL numshots = maxshots

    END IF
    IF rapidkeydelay THEN rapidkeydelay = rapidkeydelay - 1
    multishotscriptran = 1 'KEEP THIS ONE HERE
    IF sounddelay THEN
        sounddelay = sounddelay - 1
    END IF

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB scrapcannon___PLAYER '=========================================================== SUB SCRAP CANNON PLAYER
    IF _KEYDOWN(32) AND scrapkeydelay = 0 AND sounddelay <= 0 THEN
        RANDOMIZE TIMER
        IF issoundon = 1 AND TIMER + soundlength > soundtimer THEN 'slow sounding. has pauses between bursts
            soundtimer = TIMER + soundlength
            _SNDVOL scrapcannonsound, soundlevel
            _SNDPLAYCOPY scrapcannonsound
            sounddelay = 3 '2 ok but 3 better

        END IF

        SELECT CASE scrapcannonupgrade
            CASE 1
                scrapkeydelay = 20
            CASE 2
                scrapkeydelay = 15
            CASE 3
                scrapkeydelay = 10
        END SELECT

        numshots = 0
        DO
            IF NOT sshot(numshots).ACTIVE THEN ' if no shots are active???
                sshot(numshots).ACTIVE = TRUE
                sshot(numshots).WIDTH = 30 ' - width and midx help make sure player shot is centered.
                sshot(numshots).MIDX = sshot(numshots).WIDTH / 2
                sshot(numshots).X = (player.X + player.MIDX) - sshot(numshots).MIDX
                sshot(numshots).Y = player.Y
                EXIT DO
            END IF
            numshots = numshots + 1

        LOOP UNTIL numshots = maxshots

    END IF
    IF scrapkeydelay THEN scrapkeydelay = scrapkeydelay - 1
    scrapshotscriptran = 1 'KEEP THIS ONE HERE
    IF sounddelay THEN
        sounddelay = sounddelay - 1
    END IF
END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB singlelaser___PLAYER '====================================================================SUB SINGLE LASER PLAYER

    IF _KEYDOWN(32) AND lasershotscriptran = 0 THEN
        IF issoundon = 1 THEN
            _SNDVOL singlelasersound, soundlevel
            IF singlelasersound THEN _SNDPLAYCOPY singlelasersound
        END IF

        SELECT CASE singlelaserupgrade
            CASE 1
                oneshot.SPEED = 10 '10
                oneshot.HEIGHT = 20
                oneshot.WIDTH = 10
                oneshot.MIDX = oneshot.WIDTH / 2
                oneshot.X = player.XKILLBOX - oneshot.MIDX
                oneshot.Y = player.YKILLBOX - oneshot.HEIGHT
                oneshot.DAMAGE = 100 ' 50
                oneshot.RANGE = oneshot.Y - win.MIDY 'range relative to player position - half window length  ' - WIN.BOTTOM FOR FULL LENGTH SHOT

            CASE 2
                oneshot2.SPEED = 16 '10
                oneshot2.HEIGHT = 20
                oneshot2.WIDTH = 10
                oneshot2.MIDX = oneshot2.WIDTH / 2
                oneshot2.X = player.X
                oneshot2.Y = player.YKILLBOX - oneshot2.HEIGHT 'TEST
                oneshot2.RANGE = oneshot2.Y - win.MIDY 'range relative to player position - half window length  ' - WIN.BOTTOM FOR FULL LENGTH SHOT

                '-------------RIGHT LASER
                oneshot3.SPEED = 16 '10
                oneshot3.HEIGHT = 20
                oneshot3.WIDTH = 10
                oneshot3.MIDX = oneshot3.WIDTH / 2
                oneshot3.X = (player.X + player.WIDTH) - oneshot3.WIDTH
                oneshot3.Y = player.YKILLBOX - oneshot3.HEIGHT 'TEST
                oneshot3.RANGE = oneshot3.Y - win.MIDY 'range relative to player position - half window length  ' - WIN.BOTTOM FOR FULL LENGTH SHOT

            CASE 3
                oneshot.SPEED = 22 '10
                oneshot.MIDX = oneshot.WIDTH / 2
                oneshot.X = player.XKILLBOX - oneshot.MIDX
                oneshot.Y = player.YKILLBOX - oneshot.HEIGHT 'TEST
                oneshot.RANGE = oneshot.Y - win.MIDY 'range relative to player position - half window length  '
                '--------LEFT LASER
                oneshot2.SPEED = 22 '10
                oneshot2.X = player.X
                oneshot2.Y = player.YKILLBOX - oneshot2.HEIGHT 'TEST
                oneshot2.RANGE = oneshot2.Y - win.MIDY 'range relative to player position - half window length  ' - WIN.BOTTOM FOR FULL LENGTH SHOT
                '--------RIGHT LASER
                oneshot3.SPEED = 22 '10
                oneshot3.X = (player.X + player.WIDTH) - oneshot3.WIDTH
                oneshot3.Y = player.YKILLBOX - oneshot3.HEIGHT
                oneshot3.RANGE = oneshot3.Y - win.MIDY 'range relative to player position - half window length  ' - WIN.BOTTOM FOR FULL LENGTH SHOT

        END SELECT

        lasershotscriptran = 1

    END IF

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB scraphitdetect___PLAYER '=================================================================SUB SCRAP HIT DETECT PLAYER

    FOR i = 1 TO numscrap
        IF (player.X + player.WIDTH >= scrap(i).X) AND (player.X <= scrap(i).X + scrap(i).WIDTH) AND (player.Y <= scrap(i).Y + scrap(i).HEIGHT) AND (player.Y + player.HEIGHT >= scrap(i).Y) THEN
            IF issoundon = 1 THEN
                _SNDVOL scrapcollectedsound, soundlevel
                IF scrapcollectedsound THEN _SNDPLAYCOPY scrapcollectedsound
            END IF
            scrap(i).COLLECTED = 1
            scrap(i).WIDTH = 0
            scrap(i).HEIGHT = 0
            scrap(i).X = -2000 '  - make sure x and y are completely off screen so scrap not triggered.
            scrap(i).Y = -2000
            scrapcollected = scrapcollected + 1
        END IF

    NEXT

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB collisioncheck___PLAYER '======================================================= SUB COLLISION CHECK PLAYER

    '--------------------------FIGHTERS

    FOR inf = 1 TO numfighters
        RANDOMIZE TIMER
        ' - player killbox collides with intact fighter
        IF fighters(inf).KILLED = 0 AND (player.XKILLBOX >= fighters(inf).X) AND (player.XKILLBOX <= fighters(inf).X + fighters(inf).WIDTH) AND (player.YKILLBOX <= fighters(inf).Y + fighters(inf).HEIGHT) AND (player.YKILLBOX >= fighters(inf).Y) THEN
            player.KILLED = 1
        END IF

        '   - player collides with destroyed fighter
        IF fighters(inf).KILLED = 1 AND fighters(inf).ICONPICKEDUP = 0 AND (player.X + player.WIDTH >= fighters(inf).XKILLBOX) AND (player.X <= fighters(inf).XKILLBOX + fighters(inf).WIDTH) AND (player.Y <= fighters(inf).YKILLBOX + fighters(inf).HEIGHT) AND (player.Y + player.HEIGHT >= fighters(inf).YKILLBOX) THEN
            IF issoundon = 1 THEN
                _SNDVOL scrapcollectedsound, soundlevel
                IF scrapcollectedsound THEN _SNDPLAYCOPY scrapcollectedsound
            END IF
            SELECT CASE fighters(inf).RANDOMICON
                CASE 1
                    weapontype = 1
                    singlelaserupgrade = singlelaserupgrade + 1
                    IF singlelaserupgrade > 3 THEN singlelaserupgrade = 3
                CASE 2
                    weapontype = 2
                    rapidlaserupgrade = rapidlaserupgrade + 1
                    IF rapidlaserupgrade > 3 THEN rapidlaserupgrade = 3
                CASE 3
                    weapontype = 3
                    scrapcannonupgrade = scrapcannonupgrade + 1
                    IF scrapcannonupgrade > 3 THEN scrapcannonupgrade = 3
            END SELECT

            fighters(inf).ICONPICKEDUP = 1
        END IF

    NEXT

    '--------------------------BOMBERS
    FOR i = 1 TO numbombers
        RANDOMIZE TIMER
        ' - player killbox collides with intact bomber
        IF bombers(i).KILLED = 0 AND (player.XKILLBOX >= bombers(i).X) AND (player.XKILLBOX <= bombers(i).X + bombers(i).WIDTH) AND (player.YKILLBOX <= bombers(i).Y + bombers(i).HEIGHT) AND (player.YKILLBOX >= bombers(i).Y) THEN
            player.KILLED = 1
        END IF

        '   - player collides with destroyed bomber
        IF bombers(i).KILLED = 1 AND bombers(i).ICONPICKEDUP = 0 AND (player.X + player.WIDTH >= bombers(i).XKILLBOX) AND (player.X <= bombers(i).XKILLBOX + bombers(i).WIDTH) AND (player.Y <= bombers(i).YKILLBOX + bombers(i).HEIGHT) AND (player.Y + player.HEIGHT >= bombers(i).YKILLBOX) THEN
            IF issoundon = 1 THEN
                _SNDVOL scrapcollectedsound, soundlevel
                IF scrapcollectedsound THEN _SNDPLAYCOPY scrapcollectedsound
            END IF
            SELECT CASE bombers(i).RANDOMICON
                CASE 1
                    weapontype = 1
                    singlelaserupgrade = singlelaserupgrade + 1
                    IF singlelaserupgrade > 3 THEN singlelaserupgrade = 3
                CASE 2
                    weapontype = 2
                    rapidlaserupgrade = rapidlaserupgrade + 1
                    IF rapidlaserupgrade > 3 THEN rapidlaserupgrade = 3
                CASE 3
                    weapontype = 3
                    scrapcannonupgrade = scrapcannonupgrade + 1
                    IF scrapcannonupgrade > 3 THEN scrapcannonupgrade = 3
            END SELECT
            bombers(i).ICONPICKEDUP = 1
        END IF

    NEXT

    '------------------------CRUISERS
    FOR i = 1 TO numcruisers
        RANDOMIZE TIMER
        '   - player collides with intact cruiser
        IF cruisers(i).KILLED = 0 AND (player.XKILLBOX >= cruisers(i).X) AND (player.XKILLBOX <= cruisers(i).X + cruisers(i).WIDTH) AND (player.YKILLBOX <= cruisers(i).Y + cruisers(i).HEIGHT) AND (player.YKILLBOX >= cruisers(i).Y) THEN ' TEST added cruisers(i).killed
            player.KILLED = 1
        END IF

        '   - player collides with destroyed cruiser
        IF cruisers(i).KILLED = 1 AND cruisers(i).ICONPICKEDUP = 0 AND (player.X + player.WIDTH >= cruisers(i).XKILLBOX) AND (player.X <= cruisers(i).XKILLBOX + cruisers(i).WIDTH) AND (player.Y <= cruisers(i).YKILLBOX + cruisers(i).HEIGHT) AND (player.Y + player.HEIGHT >= cruisers(i).YKILLBOX) THEN ' TEST added cruisers(i).killed
            IF issoundon = 1 THEN
                _SNDVOL scrapcollectedsound, soundlevel
                IF scrapcollectedsound THEN _SNDPLAYCOPY scrapcollectedsound
            END IF
            SELECT CASE cruisers(i).RANDOMICON
                CASE 1
                    weapontype = 1
                    singlelaserupgrade = singlelaserupgrade + 1
                    IF singlelaserupgrade > 3 THEN singlelaserupgrade = 3
                CASE 2
                    weapontype = 2
                    rapidlaserupgrade = rapidlaserupgrade + 1
                    IF rapidlaserupgrade > 3 THEN rapidlaserupgrade = 3
                CASE 3
                    weapontype = 3
                    scrapcannonupgrade = scrapcannonupgrade + 1
                    IF scrapcannonupgrade > 3 THEN scrapcannonupgrade = 3
            END SELECT

            cruisers(i).ICONPICKEDUP = 1
        END IF

    NEXT

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

'                                               !!!  ENEMY subroutines !!!

'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB resetbombers___ENEMY '========================================================SUB RESET BOMBERS ENEMY

    FOR i = 1 TO numbombers

        IF bombers(i).KILLED = 0 AND bshot(i).RANGE = 0 THEN
            RANDOMIZE TIMER
            bshot(i).HEIGHT = 40
            bshot(i).WIDTH = 40
            bshot(i).MIDX = bshot(i).WIDTH / 2
            bshot(i).MIDY = bshot(i).HEIGHT / 2
            bshot(i).X = bombers(i).XKILLBOX - bshot(i).MIDX 'shot origin
            bshot(i).Y = bombers(i).Y + bombers(i).HEIGHT 'bombers(i).YKILLBOX - bshot(i).MIDY 'shot origin
            bshot(i).DAMAGE = 50
        END IF
    NEXT

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB resetcruisers___ENEMY '====================================================SUB RESET CRUISERS ENEMY

    FOR i = 1 TO numcruisers

        IF cruisers(i).KILLED = 0 AND cruisers(i).ACTIVE = 0 THEN 'cruisers(i).ACTIVE = 0 AND cruisers(i).KILLED1 = 0 THEN 'KILLED1 ESSENTIAL
            RANDOMIZE TIMER
            cshot(i).SPEED = INT(RND * 2) + cruisers(i).CRUISERSPEED + 2
            cshot(i).HEIGHT = 30
            cshot(i).WIDTH = 30
            cshot(i).X = cruisers(i).XKILLBOX - (cshot(i).WIDTH / 2) 'shot origin
            cshot(i).Y = cruisers(i).YKILLBOX - (cshot(i).HEIGHT / 2) 'shot origin
            cshot(i).DAMAGE = 35
            cruisers(i).DISTANCEX = 0
            cruisers(i).DISTANCEY = 0
            cruisers(i).ODDSOFACTIVE = 0
            cruisers(i).PLAYERPOSITION = 3
            cruisers(i).PLAYERABOVE = 3
        END IF
    NEXT

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB resetfighters___ENEMY '===============================================SUB RESET FIGHTERS ENEMY

    FOR inf = 1 TO numfighters

        IF fighters(inf).ACTIVE = 0 AND fighters(inf).KILLED = 0 AND fighterlaserupgrade = 1 THEN ' TEST  fighterlaserupgrade
            RANDOMIZE TIMER
            fshot(inf).SPEED = INT(RND * 2) + fighters(inf).FIGHTERSPEED + 2
            fshot(inf).WIDTH = 10
            fshot(inf).HEIGHT = 20
            fshot(inf).X = fighters(inf).XKILLBOX - (fshot(inf).WIDTH / 2)
            fshot(inf).Y = fighters(inf).Y + fighters(inf).HEIGHT
            fshot(inf).DAMAGE = 20
        END IF

        IF fighters(inf).ACTIVE = 0 AND fighters(inf).KILLED = 0 AND fighterlaserupgrade = 2 THEN ' TEST  fighterlaserupgrade
            RANDOMIZE TIMER
            fshot(inf).SPEED = INT(RND * 2) + fighters(inf).FIGHTERSPEED + 3
            fshot(inf).WIDTH = 20
            fshot(inf).HEIGHT = 40
            fshot(inf).X = fighters(inf).XKILLBOX - (fshot(inf).WIDTH / 2)
            fshot(inf).Y = fighters(inf).Y + fighters(inf).HEIGHT
            'fshot(inf).DAMAGE = 20
        END IF

    NEXT

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB bombershots___ENEMY

    FOR i = 1 TO numbombers

        IF bombers(i).KILLED = 0 THEN ' added and bombers(i).killed = 0 because bombers were firing after being shot down
            RANDOMIZE TIMER

            IF bombers(i).XKILLBOX <= player.XKILLBOX AND bshot(i).RANGE < 500 THEN ' - if bomber left of player and shots not fired or still firing

                IF bshot(i).Y + bshot(i).MIDY < player.YKILLBOX THEN bshot(i).Y = bshot(i).Y + 1
                IF bshot(i).Y + bshot(i).MIDY > player.YKILLBOX THEN bshot(i).Y = bshot(i).Y - 1
                IF bshot(i).X + bshot(i).MIDX < player.XKILLBOX THEN bshot(i).X = bshot(i).X + 1
                IF bshot(i).X + bshot(i).MIDX > player.XKILLBOX THEN bshot(i).X = bshot(i).X - 1

                bshot(i).RANGE = bshot(i).RANGE + 1

            END IF

            IF bshot(i).RANGE >= 500 THEN
                bshot(i).RANGE = 0
                bombers(i).X = (win.RIGHT + (bombers(i).WIDTH * i)) ' + bombers(i).WIDTH)
                bombers(i).Y = INT(RND * 100) * -1
            END IF

            ' - shot hits killbox. 50 damage
            IF (player.XKILLBOX >= bshot(i).X) AND (player.XKILLBOX <= bshot(i).X + bshot(i).WIDTH) AND (player.YKILLBOX <= bshot(i).Y + bshot(i).HEIGHT) AND (player.YKILLBOX >= bshot(i).Y) THEN

                player.HEALTH = player.HEALTH - bshot(i).DAMAGE
                blastnum = 1
                DO WHILE blastnum < endblast
                    _PUTIMAGE (INT(RND * player.WIDTH) + player.X, player.Y + INT(RND * player.HEIGHT)), blastgif(blastnum) ' - place random blasts on the player
                    blastnum = blastnum + 1
                LOOP
                bshot(i).RANGE = 0
                bombers(i).X = (win.RIGHT + (bombers(i).WIDTH * i))
                bombers(i).Y = INT(RND * 100) * -1
            END IF

            ' - shot hits grey zone. 30-40 damage
            IF (player.X + player.WIDTH >= bshot(i).X) AND (player.X <= bshot(i).X + bshot(i).WIDTH) AND (player.Y <= bshot(i).Y + bshot(i).HEIGHT) AND (player.Y + player.HEIGHT >= bshot(i).Y) THEN
                player.HEALTH = player.HEALTH - (INT(RND * 10) + 30)
                blastnum = 1
                DO WHILE blastnum < endblast
                    FOR arb = 1 TO 10
                        _PUTIMAGE (INT(RND * player.WIDTH) + player.X, player.Y + INT(RND * player.HEIGHT)), blastgif(blastnum) ' - place random blasts on the player
                    NEXT arb
                    blastnum = blastnum + 1
                LOOP
                bshot(i).RANGE = 0
                bombers(i).X = (win.RIGHT + (bombers(i).WIDTH * i))
                bombers(i).Y = INT(RND * 100) * -1
            END IF

            IF bshot(i).RANGE <= 500 AND bshot(i).RANGE >= 1 AND bombers(i).KILLED = 0 THEN

                IF bombers(i).COUNTINGDOWN = 0 THEN
                    SELECT CASE bombers(i).ARBPIC
                        CASE IS < 3
                            _PUTIMAGE (bshot(i).X, bshot(i).Y), bombershotpic1 ' - if you comment this out, shots will stay centered on the bombers.
                        CASE 3 TO 5
                            _PUTIMAGE (bshot(i).X, bshot(i).Y), bombershotpic2
                        CASE IS > 5
                            _PUTIMAGE (bshot(i).X, bshot(i).Y), bombershotpic3
                            IF bombers(i).ARBPIC = 9 THEN bombers(i).COUNTINGDOWN = 1
                    END SELECT
                    bombers(i).ARBPIC = bombers(i).ARBPIC + 1
                END IF

                IF bombers(i).COUNTINGDOWN = 1 THEN
                    bombers(i).ARBPIC = bombers(i).ARBPIC - 1
                    SELECT CASE bombers(i).ARBPIC
                        CASE 6 TO 8
                            _PUTIMAGE (bshot(i).X, bshot(i).Y), bombershotpic2
                        CASE IS < 6
                            _PUTIMAGE (bshot(i).X, bshot(i).Y), bombershotpic1
                            IF bombers(i).ARBPIC = 3 THEN bombers(i).COUNTINGDOWN = 0
                    END SELECT
                END IF

            END IF
        END IF

    NEXT

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB cruisershots___ENEMY '=======================================================SUB CRUISER SHOTS ENEMY

    FOR i = 1 TO numcruisers

        IF cruisers(i).ACTIVE = 0 AND cruisers(i).VISIBLE = 1 THEN ' - if cruisers not active but visible
            RANDOMIZE TIMER

            cruisers(i).DISTANCEX = cruisers(i).XKILLBOX - player.XKILLBOX ' - calculate distance to player on x

            IF cruisers(i).DISTANCEX < 0 THEN cruisers(i).DISTANCEX = cruisers(i).DISTANCEX * -1 ' - make x distance positive

            cruisers(i).DISTANCEY = cruisers(i).YKILLBOX - player.YKILLBOX '  - calculate distance to player on y

            IF cruisers(i).DISTANCEY < 0 THEN cruisers(i).DISTANCEY = cruisers(i).DISTANCEY * -1 ' - make y distance positive

            IF cruisers(i).YKILLBOX < player.YKILLBOX THEN cruisers(i).PLAYERABOVE = 1 ' - if middle of cruiser is above player

            IF cruisers(i).YKILLBOX >= player.YKILLBOX THEN cruisers(i).PLAYERABOVE = 0 ' - if middle of cruiser is below player

            cruisers(i).ODDSOFACTIVE = INT(RND * cruisers(i).DISTANCEX) + 1 ' - pick random number based on x distance WHAT ABOUT Y?

            IF cruisers(i).XKILLBOX < player.XKILLBOX THEN 'if player is idle right of cruiser  'TEST
                IF cruisers(i).ODDSOFACTIVE < 20 THEN
                    cruisers(i).ACTIVE = 1
                    cruisers(i).PLAYERPOSITION = 1
                END IF
            END IF

            IF cruisers(i).XKILLBOX >= player.XKILLBOX THEN 'if player is idle left of cruiser  'TEST
                IF cruisers(i).ODDSOFACTIVE < 20 THEN
                    cruisers(i).ACTIVE = 1
                    cruisers(i).PLAYERPOSITION = 2
                END IF
            END IF

            IF cruisers(i).DISTANCEX >= 100 THEN
                cruisers(i).DISTANCEX = cruisers(i).DISTANCEX / 100
            ELSE
                cruisers(i).DISTANCEX = cruisers(i).DISTANCEX / 10
            END IF

            IF cruisers(i).DISTANCEY >= 100 THEN
                cruisers(i).DISTANCEY = cruisers(i).DISTANCEY / 100
            ELSE
                cruisers(i).DISTANCEY = cruisers(i).DISTANCEY / 10
            END IF

            cruisers(i).DISTANCEY = _ROUND(cruisers(i).DISTANCEY)
            cruisers(i).DISTANCEX = _ROUND(cruisers(i).DISTANCEX)

        END IF
    NEXT

    '----------------------------CRUISERS

    FOR i = 1 TO numcruisers

        IF cruisers(i).ACTIVE = 1 AND cruisers(i).VISIBLE THEN
            RANDOMIZE TIMER

            IF cruisers(i).PLAYERABOVE = 0 THEN cshot(i).Y = (cshot(i).Y - cruisers(i).DISTANCEY) ' TEST if player is above cruiser????

            IF cruisers(i).PLAYERABOVE = 1 THEN cshot(i).Y = (cshot(i).Y + cruisers(i).DISTANCEY)

            IF cruisers(i).PLAYERPOSITION = 1 THEN cshot(i).X = (cshot(i).X + cruisers(i).DISTANCEX)

            IF cruisers(i).PLAYERPOSITION = 2 THEN cshot(i).X = (cshot(i).X - cruisers(i).DISTANCEX)

            IF cshot(i).X < win.LEFT OR cshot(i).X > win.RIGHT OR cshot(i).Y < win.TOP OR cshot(i).Y > win.BOTTOM THEN
                cruisers(i).ACTIVE = 0
                cshot(i).X = -500
                cshot(i).Y = -500
            END IF

            ' - shot hits killbox. 35 damage
            IF (player.XKILLBOX >= cshot(i).X) AND (player.XKILLBOX <= cshot(i).X + cshot(i).WIDTH) AND (player.YKILLBOX <= cshot(i).Y + cshot(i).HEIGHT) AND (player.YKILLBOX >= cshot(i).Y) THEN

                player.HEALTH = player.HEALTH - cshot(i).DAMAGE
                blastnum = 1
                DO WHILE blastnum < endblast
                    FOR arb = 1 TO 10
                        _PUTIMAGE (INT(RND * player.WIDTH) + player.X, player.Y + INT(RND * player.HEIGHT)), blastgif(blastnum) ' - place random blasts on the player
                    NEXT arb
                    blastnum = blastnum + 1
                LOOP
                cruisers(i).ACTIVE = 0
                cshot(i).X = -500
                cshot(i).Y = -500
            END IF

            ' - shot hits grey zone. 15-20 damage
            IF (player.X + player.WIDTH >= cshot(i).X) AND (player.X <= cshot(i).X + cshot(i).WIDTH) AND (player.Y <= cshot(i).Y + cshot(i).HEIGHT) AND (player.Y + player.HEIGHT >= cshot(i).Y) THEN
                player.HEALTH = player.HEALTH - (INT(RND * 5) + 15)
                blastnum = 1
                DO WHILE blastnum < endblast
                    FOR arb = 1 TO 10
                        _PUTIMAGE (INT(RND * player.WIDTH) + player.X, player.Y + INT(RND * player.HEIGHT)), blastgif(blastnum) ' - place random blasts on the player
                    NEXT arb
                    blastnum = blastnum + 1
                LOOP
                cruisers(i).ACTIVE = 0
                cshot(i).X = -500
                cshot(i).Y = -500
            END IF

            IF cruisers(i).ACTIVE = 1 THEN _PUTIMAGE (cshot(i).X, cshot(i).Y), cruisershotpic ' - if you comment this out, shots will stay centered on the cruisers.

        END IF

    NEXT

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB fightershots___ENEMY '======================================================= SUB FIGHTER SHOTS ENEMY

    '--------------------------------------------FIGHTERS
    FOR inf = 1 TO numfighters

        IF fighters(inf).ACTIVE = 0 THEN

            IF (fighters(inf).KILLED = 0) AND (fighters(inf).XKILLBOX <= player.X + player.WIDTH) AND (fighters(inf).XKILLBOX >= player.X) AND (fighters(inf).Y + fighters(inf).HEIGHT < player.Y) THEN
                fighters(inf).ACTIVE = 1
            END IF

        END IF

    NEXT

    '---------------------------------FIGHTERS

    FOR inf = 1 TO numfighters
        RANDOMIZE TIMER

        IF fighters(inf).ACTIVE = 1 AND fighters(inf).KILLED = 0 THEN 'if fighter is active and not shot down

            fshot(inf).Y = fshot(inf).Y + fshot(inf).SPEED '             - calculate shot speed

            ' - shot hits killbox. 20 damage
            IF (player.XKILLBOX >= fshot(inf).X) AND (player.XKILLBOX <= fshot(inf).X + fshot(inf).WIDTH) AND (player.YKILLBOX <= fshot(inf).Y + fshot(inf).HEIGHT) AND (player.YKILLBOX >= fshot(inf).Y) THEN

                player.HEALTH = player.HEALTH - fshot(inf).DAMAGE '  - calculate new player health
                blastnum = 1
                DO WHILE blastnum < endblast
                    FOR arb = 1 TO 5
                        _PUTIMAGE (fshot(inf).X + fshot(inf).HEIGHT, player.Y + INT(RND * player.HEIGHT)), blastgif(blastnum) ' - place random blasts on the player
                    NEXT arb
                    blastnum = blastnum + 1
                LOOP
                fshot(inf).X = -500
                fshot(inf).Y = -500
                fighters(inf).ACTIVE = 0 '                           - deactivate shot
            END IF

            ' - shot hits grey zone. 10-15 damage
            IF (player.X >= fshot(inf).X) AND (player.X <= fshot(inf).X + fshot(inf).WIDTH) AND (player.Y <= fshot(inf).Y + fshot(inf).HEIGHT) AND (player.Y + player.HEIGHT >= fshot(inf).Y) THEN
                player.HEALTH = player.HEALTH - (INT(RND * 5) + 10) '  - calculate new player health
                blastnum = 1
                DO WHILE blastnum < endblast
                    FOR arb = 1 TO 5
                        _PUTIMAGE (fshot(inf).X + fshot(inf).HEIGHT, player.Y + INT(RND * player.HEIGHT)), blastgif(blastnum) ' - place random blasts on the player
                    NEXT arb
                    blastnum = blastnum + 1
                LOOP
                fshot(inf).X = -500
                fshot(inf).Y = -500
                fighters(inf).ACTIVE = 0 '                           - deactivate shot
            END IF

            IF fshot(inf).Y > win.BOTTOM THEN
                fshot(inf).X = -500
                fshot(inf).Y = -500
                fighters(inf).ACTIVE = 0
            END IF

            IF fighters(inf).ACTIVE = 1 AND fighterlaserupgrade = 1 THEN _PUTIMAGE (fshot(inf).X, fshot(inf).Y), fightershotpic ' - if shot is active draw shot pic
            IF fighters(inf).ACTIVE = 1 AND fighterlaserupgrade = 2 THEN _PUTIMAGE (fshot(inf).X, fshot(inf).Y), fightershotpic2

        END IF

    NEXT

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB movecarriers___ENEMY '==============================================================SUB MOVE CARRIERS ENEMY
    FOR i = 1 TO numcarriers
        carriers(i).Y = carriers(i).Y + 1
        IF carriers(i).Y = carriers(i).STOPPINGY THEN carriers(i).Y = -100
        _PUTIMAGE (carriers(i).X, carriers(i).Y), carrierunit
    NEXT
END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB movebombers___ENEMY '=================================================================SUB MOVE BOMBERS ENEMY

    FOR i = 1 TO numbombers
        RANDOMIZE TIMER

        IF bombers(i).KILLED = 0 THEN
            bombers(i).Y = bombers(i).Y + 1
            bombers(i).X = bombers(i).X - bombers(i).BOMBERSPEED

            SELECT CASE bombers(i).HEALTH
                CASE 600
                    _PUTIMAGE (bombers(i).X, bombers(i).Y), bomberunit
                CASE 400 TO 599
                    _PUTIMAGE (bombers(i).X, bombers(i).Y), bomberdmg1
                    bombers(i).WIDTH = 117
                    bombers(i).HEIGHT = 92
                CASE 200 TO 399
                    bombers(i).WIDTH = 116
                    bombers(i).HEIGHT = 87
                    _PUTIMAGE (bombers(i).X, bombers(i).Y), bomberdmg2
                CASE 1 TO 199
                    bombers(i).WIDTH = 115
                    bombers(i).HEIGHT = 87
                    _PUTIMAGE (bombers(i).X, bombers(i).Y), bomberdmg3
            END SELECT

        END IF

        IF bombers(i).KILLED = 1 AND bombers(i).ICONPICKEDUP = 0 THEN ' if bomber destroyed but icon not picked up
            bombers(i).HEIGHT = 50
            bombers(i).WIDTH = 50
            bombers(i).GLOBALTIMER = TIMER

            IF bombers(i).GLOBALTIMER <= bombers(i).TIMESTART + 1 THEN
                switchnum = 1
                _PUTIMAGE (bombers(i).XKILLBOX, bombers(i).YKILLBOX), switchgif(switchnum)
                bombers(i).RANDOMICON = 1
            END IF

            IF bombers(i).GLOBALTIMER = bombers(i).TIMESTART + 2 THEN
                switchnum = 2
                _PUTIMAGE (bombers(i).XKILLBOX, bombers(i).YKILLBOX), switchgif(switchnum)
                bombers(i).RANDOMICON = 1
            END IF

            IF bombers(i).GLOBALTIMER = bombers(i).TIMESTART + 3 THEN
                switchnum = 3
                _PUTIMAGE (bombers(i).XKILLBOX, bombers(i).YKILLBOX), switchgif(switchnum)
                bombers(i).RANDOMICON = 1
            END IF

            IF bombers(i).GLOBALTIMER = bombers(i).TIMESTART + 4 THEN
                switchnum = 4
                _PUTIMAGE (bombers(i).XKILLBOX, bombers(i).YKILLBOX), switchgif(switchnum)
                bombers(i).RANDOMICON = 1
            END IF

            IF bombers(i).GLOBALTIMER = bombers(i).TIMESTART + 5 THEN
                switchnum = 5
                _PUTIMAGE (bombers(i).XKILLBOX, bombers(i).YKILLBOX), switchgif(switchnum)
                bombers(i).RANDOMICON = 1
            END IF

            IF bombers(i).GLOBALTIMER = bombers(i).TIMESTART + 6 THEN
                switchnum = 6
                _PUTIMAGE (bombers(i).XKILLBOX, bombers(i).YKILLBOX), switchgif(switchnum)
                bombers(i).RANDOMICON = 2
            END IF

            IF bombers(i).GLOBALTIMER = bombers(i).TIMESTART + 7 THEN
                switchnum = 7
                _PUTIMAGE (bombers(i).XKILLBOX, bombers(i).YKILLBOX), switchgif(switchnum)
                bombers(i).RANDOMICON = 2
            END IF

            IF bombers(i).GLOBALTIMER = bombers(i).TIMESTART + 8 THEN
                switchnum = 8
                _PUTIMAGE (bombers(i).XKILLBOX, bombers(i).YKILLBOX), switchgif(switchnum)
                bombers(i).RANDOMICON = 2
            END IF

            IF bombers(i).GLOBALTIMER = bombers(i).TIMESTART + 9 THEN
                switchnum = 9
                _PUTIMAGE (bombers(i).XKILLBOX, bombers(i).YKILLBOX), switchgif(switchnum)
                bombers(i).RANDOMICON = 3
            END IF

            IF bombers(i).GLOBALTIMER = bombers(i).TIMESTART + 10 THEN
                switchnum = 10
                _PUTIMAGE (bombers(i).XKILLBOX, bombers(i).YKILLBOX), switchgif(switchnum)
                bombers(i).RANDOMICON = 3
            END IF

            IF bombers(i).GLOBALTIMER > bombers(i).TIMESTART + 10 THEN
                bombers(i).ICONPICKEDUP = 1
                bombers(i).X = -500
                bombers(i).Y = -500
            END IF
        END IF

    NEXT

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB movecruisers___ENEMY '===============================================================SUB MOVE CRUISERS ENEMY

    FOR i = 1 TO numcruisers
        RANDOMIZE TIMER

        IF cruisers(i).KILLED = 0 AND cruisers(i).STOPPED = 0 THEN ' - if cruiser not shot down and hasn't stopped

            ' - cruisers warp onto the screen!
            cruisers(i).CRUISERSPEED = cruisers(i).CRUISERSPEED - 1 ' - decrease cruiser speed gradually
            IF cruisers(i).CRUISERSPEED <= 1 THEN cruisers(i).CRUISERSPEED = 1 ' - minimum speed of 1
            cruisers(i).Y = cruisers(i).Y + cruisers(i).CRUISERSPEED

            IF cruisers(i).Y + cruisers(i).MIDY >= 0 THEN ' - if half of cruiser is visible
                cruisers(i).VISIBLE = 1
            END IF

            IF cruisers(i).Y >= cruisers(i).STOPPINGY THEN ' - if cruiser reaches stopping point
                cruisers(i).STOPPED = 1
            END IF
        END IF

        IF cruisers(i).KILLED = 0 AND cruisers(i).STOPPED = 1 THEN
            IF cruisers(i).HEALTH <= 750 THEN cruisers(i).Y = cruisers(i).Y + 1
            IF cruisers(i).Y > win.BOTTOM THEN cruisers(i).Y = win.MIDY - cruisers(i).HEIGHT * 3 'TEST
        END IF

        IF cruisers(i).KILLED = 0 THEN
            SELECT CASE cruisers(i).HEALTH
                CASE 1500
                    _PUTIMAGE (cruisers(i).X, cruisers(i).Y), cruiserunit
                CASE 1000 TO 1499
                    cruisers(i).WIDTH = 138
                    _PUTIMAGE (cruisers(i).X, cruisers(i).Y), cruiserdmg1
                CASE 500 TO 999
                    cruisers(i).WIDTH = 125
                    cruisers(i).HEIGHT = 186
                    _PUTIMAGE (cruisers(i).X, cruisers(i).Y), cruiserdmg2
                CASE 1 TO 499
                    cruisers(i).WIDTH = 118
                    cruisers(i).HEIGHT = 175
                    _PUTIMAGE (cruisers(i).X, cruisers(i).Y), cruiserdmg3
            END SELECT
        END IF

        IF cruisers(i).KILLED = 1 AND cruisers(i).ICONPICKEDUP = 0 THEN ' if cruiser destroyed but icon not picked up
            cruisers(i).HEIGHT = 50
            cruisers(i).WIDTH = 50
            cruisers(i).GLOBALTIMER = TIMER

            IF cruisers(i).GLOBALTIMER <= cruisers(i).TIMESTART + 1 THEN
                switchnum = 1
                _PUTIMAGE (cruisers(i).XKILLBOX, cruisers(i).YKILLBOX), switchgif(switchnum)
                cruisers(i).RANDOMICON = 1
            END IF

            IF cruisers(i).GLOBALTIMER = cruisers(i).TIMESTART + 2 THEN
                switchnum = 2
                _PUTIMAGE (cruisers(i).XKILLBOX, cruisers(i).YKILLBOX), switchgif(switchnum)
                cruisers(i).RANDOMICON = 1
            END IF

            IF cruisers(i).GLOBALTIMER = cruisers(i).TIMESTART + 3 THEN
                switchnum = 3
                _PUTIMAGE (cruisers(i).XKILLBOX, cruisers(i).YKILLBOX), switchgif(switchnum)
                cruisers(i).RANDOMICON = 1
            END IF

            IF cruisers(i).GLOBALTIMER = cruisers(i).TIMESTART + 4 THEN
                switchnum = 4
                _PUTIMAGE (cruisers(i).XKILLBOX, cruisers(i).YKILLBOX), switchgif(switchnum)
                cruisers(i).RANDOMICON = 1
            END IF

            IF cruisers(i).GLOBALTIMER = cruisers(i).TIMESTART + 5 THEN
                switchnum = 5
                _PUTIMAGE (cruisers(i).XKILLBOX, cruisers(i).YKILLBOX), switchgif(switchnum)
                cruisers(i).RANDOMICON = 1
            END IF

            IF cruisers(i).GLOBALTIMER = cruisers(i).TIMESTART + 6 THEN
                switchnum = 6
                _PUTIMAGE (cruisers(i).XKILLBOX, cruisers(i).YKILLBOX), switchgif(switchnum)
                cruisers(i).RANDOMICON = 2
            END IF

            IF cruisers(i).GLOBALTIMER = cruisers(i).TIMESTART + 7 THEN
                switchnum = 7
                _PUTIMAGE (cruisers(i).XKILLBOX, cruisers(i).YKILLBOX), switchgif(switchnum)
                cruisers(i).RANDOMICON = 2
            END IF

            IF cruisers(i).GLOBALTIMER = cruisers(i).TIMESTART + 8 THEN
                switchnum = 8
                _PUTIMAGE (cruisers(i).XKILLBOX, cruisers(i).YKILLBOX), switchgif(switchnum)
                cruisers(i).RANDOMICON = 2
            END IF

            IF cruisers(i).GLOBALTIMER = cruisers(i).TIMESTART + 9 THEN
                switchnum = 9
                _PUTIMAGE (cruisers(i).XKILLBOX, cruisers(i).YKILLBOX), switchgif(switchnum)
                cruisers(i).RANDOMICON = 3
            END IF

            IF cruisers(i).GLOBALTIMER = cruisers(i).TIMESTART + 10 THEN
                switchnum = 10
                _PUTIMAGE (cruisers(i).XKILLBOX, cruisers(i).YKILLBOX), switchgif(switchnum)
                cruisers(i).RANDOMICON = 3
            END IF

            IF cruisers(i).GLOBALTIMER > cruisers(i).TIMESTART + 10 THEN
                cruisers(i).ICONPICKEDUP = 1
                cruisers(i).X = -500
                cruisers(i).Y = -500
            END IF

        END IF

    NEXT

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB movefighters___ENEMY '==============================================================SUB MOVE FIGHTERS ENEMY

    FOR inf = 1 TO numfighters
        RANDOMIZE TIMER

        IF fighters(inf).KILLED = 0 AND fighters(inf).SHIELDON = 0 THEN '       - if fighter alive and unshielded

            fighters(inf).Y = fighters(inf).Y + fighters(inf).FIGHTERSPEED '      - calculate fighter movement on y

            IF fighters(inf).X + fighters(inf).WIDTH >= win.RIGHT THEN fighters(inf).X = win.RIGHT - (fighters(inf).WIDTH) '- keep fighter from going off screen on x ...

            IF fighters(inf).X <= win.LEFT THEN fighters(inf).X = win.LEFT '                      - keeps fighter from going off screen on x ...

            IF fighters(inf).Y >= win.BOTTOM THEN '     - if fighter survives to screen bottom
                fighters(inf).X = INT(RND * win.WIDTH - fighters(inf).WIDTH)
                fighters(inf).Y = INT(RND * win.HEIGHT - 50) * -1
            END IF

            SELECT CASE fighters(inf).HEALTH
                CASE IS = 300
                    _PUTIMAGE (fighters(inf).X, fighters(inf).Y), fighterunit
                CASE 200 TO 299
                    fighters(inf).WIDTH = 98
                    fighters(inf).HEIGHT = 56
                    _PUTIMAGE (fighters(inf).X, fighters(inf).Y), fighterdmg1
                CASE 100 TO 199
                    fighters(inf).WIDTH = 96
                    fighters(inf).HEIGHT = 56
                    _PUTIMAGE (fighters(inf).X, fighters(inf).Y), fighterdmg2
                CASE 1 TO 99
                    fighters(inf).WIDTH = 94
                    fighters(inf).HEIGHT = 56
                    _PUTIMAGE (fighters(inf).X, fighters(inf).Y), fighterdmg3
            END SELECT

        END IF

        IF fighters(inf).KILLED = 0 AND fighters(inf).SHIELDON = 1 THEN '          - if fighter alive and shielded

            IF fighters(inf).XKILLBOX < player.XKILLBOX THEN fighters(inf).X = fighters(inf).X + 1
            IF fighters(inf).XKILLBOX > player.XKILLBOX THEN fighters(inf).X = fighters(inf).X - 1
            fighters(inf).Y = fighters(inf).Y + 3

            IF fighters(inf).Y >= win.BOTTOM THEN '     - if fighter survives to screen bottom
                fighters(inf).X = INT(RND * win.WIDTH - fighters(inf).WIDTH)
                fighters(inf).Y = INT(RND * win.HEIGHT - 50) * -1
            END IF

            SELECT CASE fighters(inf).SHIELDHEALTH
                CASE 200
                    _PUTIMAGE (fighters(inf).X, fighters(inf).Y), shieldgif(1)
                CASE 150 TO 199
                    fighters(inf).HEIGHT = 76
                    _PUTIMAGE (fighters(inf).X, fighters(inf).Y), shieldgif(2)
                CASE 100 TO 149
                    fighters(inf).HEIGHT = 72
                    _PUTIMAGE (fighters(inf).X, fighters(inf).Y), shieldgif(3)
                CASE 50 TO 99
                    fighters(inf).HEIGHT = 68
                    _PUTIMAGE (fighters(inf).X, fighters(inf).Y), shieldgif(4)
                CASE IS <= 49
                    fighters(inf).HEIGHT = 64
                    _PUTIMAGE (fighters(inf).X, fighters(inf).Y), shieldgif(5)
            END SELECT

        END IF
        '--------------------------------------------if fighter is now an icon
        IF fighters(inf).KILLED = 1 AND fighters(inf).ICONPICKEDUP = 0 THEN ' if fighter destroyed but icon not picked up
            fighters(inf).HEIGHT = 50
            fighters(inf).WIDTH = 50
            fighters(inf).GLOBALTIMER = TIMER

            IF fighters(inf).GLOBALTIMER <= fighters(inf).TIMESTART + 1 THEN
                switchnum = 1
                _PUTIMAGE (fighters(inf).XKILLBOX, fighters(inf).YKILLBOX), switchgif(switchnum)
                fighters(inf).RANDOMICON = 1
            END IF

            IF fighters(inf).GLOBALTIMER = fighters(inf).TIMESTART + 2 THEN
                switchnum = 2
                _PUTIMAGE (fighters(inf).XKILLBOX, fighters(inf).YKILLBOX), switchgif(switchnum)
                fighters(inf).RANDOMICON = 1
            END IF

            IF fighters(inf).GLOBALTIMER = fighters(inf).TIMESTART + 3 THEN
                switchnum = 3
                _PUTIMAGE (fighters(inf).XKILLBOX, fighters(inf).YKILLBOX), switchgif(switchnum)
                fighters(inf).RANDOMICON = 1
            END IF

            IF fighters(inf).GLOBALTIMER = fighters(inf).TIMESTART + 4 THEN
                switchnum = 4
                _PUTIMAGE (fighters(inf).XKILLBOX, fighters(inf).YKILLBOX), switchgif(switchnum)
                fighters(inf).RANDOMICON = 1
            END IF

            IF fighters(inf).GLOBALTIMER = fighters(inf).TIMESTART + 5 THEN
                switchnum = 5
                _PUTIMAGE (fighters(inf).XKILLBOX, fighters(inf).YKILLBOX), switchgif(switchnum)
                fighters(inf).RANDOMICON = 1
            END IF

            IF fighters(inf).GLOBALTIMER = fighters(inf).TIMESTART + 6 THEN
                switchnum = 6
                _PUTIMAGE (fighters(inf).XKILLBOX, fighters(inf).YKILLBOX), switchgif(switchnum)
                fighters(inf).RANDOMICON = 2
            END IF

            IF fighters(inf).GLOBALTIMER = fighters(inf).TIMESTART + 7 THEN
                switchnum = 7
                _PUTIMAGE (fighters(inf).XKILLBOX, fighters(inf).YKILLBOX), switchgif(switchnum)
                fighters(inf).RANDOMICON = 2
            END IF

            IF fighters(inf).GLOBALTIMER = fighters(inf).TIMESTART + 8 THEN
                switchnum = 8
                _PUTIMAGE (fighters(inf).XKILLBOX, fighters(inf).YKILLBOX), switchgif(switchnum)
                fighters(inf).RANDOMICON = 2
            END IF

            IF fighters(inf).GLOBALTIMER = fighters(inf).TIMESTART + 9 THEN
                switchnum = 9
                _PUTIMAGE (fighters(inf).XKILLBOX, fighters(inf).YKILLBOX), switchgif(switchnum)
                fighters(inf).RANDOMICON = 3
            END IF

            IF fighters(inf).GLOBALTIMER = fighters(inf).TIMESTART + 10 THEN
                switchnum = 10
                _PUTIMAGE (fighters(inf).XKILLBOX, fighters(inf).YKILLBOX), switchgif(switchnum)
                fighters(inf).RANDOMICON = 3
            END IF

            IF fighters(inf).GLOBALTIMER > fighters(inf).TIMESTART + 10 THEN
                fighters(inf).ICONPICKEDUP = 1
                fighters(inf).X = -500
                fighters(inf).Y = -500
            END IF

        END IF

    NEXT

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

'                                               !!!  BOSS subroutines !!!

'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB moveboss1___BOSS '==========================================================SUB MOVE BOSS 1

    RANDOMIZE TIMER
    move = INT(RND * 100) + 1
    IF move < 25 THEN
        boss1.Y = boss1.Y + 3
        IF boss1.Y >= 540 THEN boss1.Y = 540
    END IF

    IF move < 10 THEN boss1.X = boss1.X - 1

    _PUTIMAGE (boss1.X, boss1.Y), boss1.PIC

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB randomboss1___BOSS '==============================================================SUB RANDOM BOSS 1

    RANDOMIZE TIMER
    boss1.X = INT(RND * 270) + 540
    boss1.Y = INT(RND * 1080) * -1
    boss1.WIDTH = 300
    boss1.HEIGHT = 500
    boss1scriptran = 1

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB boss1hitdetect___BOSS '====================================================SUB BOSS 1 HIT DETECT BOSS

    IF (player.X + player.WIDTH >= boss1.X) AND (player.X <= boss1.X + boss1.WIDTH) AND (player.Y <= boss1.Y + boss1.HEIGHT) AND (player.Y + player.HEIGHT >= boss1.Y) THEN
        player.KILLED = 1
        CLS
        LOCATE 1, 1: PRINT "GAME OVER MAN, GAME OVER!"
        END
    END IF

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

'                                               !!!  MISC subroutines !!!

'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB movescrap___MISC '=====================================================================SUB MOVE SCRAP MISC

    FOR i = 1 TO numscrap

        IF scrap(i).COLLECTED = 0 THEN
            RANDOMIZE TIMER
            move = INT(RND * RND * 100) + 1
            IF move < 10 THEN scrap(i).X = scrap(i).X + 1 '                            - move scrap right
            IF move < 5 AND scrap(i).X < win.MIDX THEN scrap(i).Y = scrap(i).Y + 1 '   - move scrap down on left side of screen
            IF move < 5 AND scrap(i).X > win.MIDX THEN scrap(i).Y = scrap(i).Y - 1 '   - move scrap up on right side of screen
            IF scrap(i).X >= win.RIGHT THEN scrap(i).X = INT(RND * win.WIDTH) * -1 '   - loop scrap back around
            _PUTIMAGE (scrap(i).X, scrap(i).Y), scrap(i).PIC
        END IF
    NEXT

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB explosions___MISC '======================================================SUB EXPLOSIONS MISC
    'FOR inf = 1 TO numfighters
    '    IF fighters(inf).KILLHIT = 1 THEN
    '        IF fighters(inf).BLASTNUM < 6 THEN
    '            _PUTIMAGE (fighters(inf).SHOTX, fighters(inf).SHOTY), blastgif(fighters(inf).BLASTNUM) 'blastgif(blastnum)
    '            fighters(inf).BLASTNUM = fighters(inf).BLASTNUM + 1
    '        END IF

    '    END IF

    '    IF fighters(inf).GRAZEHIT = 1 THEN
    '        IF fighters(inf).BLASTNUM < 6 THEN
    '            _PUTIMAGE (fighters(inf).SHOTX, fighters(inf).SHOTY), blastgif(fighters(inf).BLASTNUM)
    '            fighters(inf).BLASTNUM = fighters(inf).BLASTNUM + 1
    '        END IF

    '    END IF

    '    IF fighters(inf).BLASTNUM >= 6 THEN
    '        fighters(inf).BLASTNUM = 1
    '        fighters(inf).KILLHIT = 0
    '        fighters(inf).GRAZEHIT = 0
    '        fighters(inf).SHOTX = -500
    '        fighters(inf).SHOTY = -500
    '    END IF
    'NEXT


    FOR inf = 1 TO numfighters
        IF fighters(inf).KILLHIT = 1 THEN
            IF blastnum < 6 THEN
                _PUTIMAGE (fighters(inf).SHOTX, fighters(inf).SHOTY), blastgif(blastnum) 'blastgif(blastnum)
                blastnum = blastnum + 1
            END IF

        END IF

        IF fighters(inf).GRAZEHIT = 1 THEN
            IF blastnum < 6 THEN
                _PUTIMAGE (fighters(inf).SHOTX, fighters(inf).SHOTY), blastgif(blastnum)
                blastnum = blastnum + 1
            END IF

        END IF

        IF blastnum >= 6 THEN
            blastnum = 1
            fighters(inf).KILLHIT = 0
            fighters(inf).GRAZEHIT = 0
            fighters(inf).SHOTX = -500
            fighters(inf).SHOTY = -500
        END IF

    NEXT

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB movebackgroundscrap___MISC '=============================================SUB MOVE BACKGROUND SCRAP MISC

    FOR i = 1 TO bscrap
        RANDOMIZE TIMER
        move = INT(RND * 100) + 1
        IF move < 7 THEN bgscrap(i).X = bgscrap(i).X - 1
        IF move < 5 AND bgscrap(i).X > win.LEFT THEN bgscrap(i).Y = bgscrap(i).Y + 1
        IF bgscrap(i).X < win.LEFT THEN bgscrap(i).X = INT(RND * 100) + win.RIGHT
        _PUTIMAGE (bgscrap(i).X, bgscrap(i).Y), bgscrap(i).PIC
    NEXT

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB controls___MISC '==================================================================SUB CONTROLS MISC

    '-----------------------------------------FONTS
    largefontint = 32
    medfontint = 20
    gamefontlrg = _LOADFONT("SCRAPSHIP\x\fonts\23XX.otf", 32)
    IF gamefontlrg THEN _FONT gamefontlrg
    largefontint = _ROUND(32 / 2)
    gamefontmed = _LOADFONT("SCRAPSHIP\x\fonts\23XX.otf", 20)
    IF gamefontmed THEN _FONT gamefontmed
    medfontint = _ROUND(20 / 2)

    _FONT gamefontlrg
    LOCATE 4, 350: PRINT "basic controls"
    LOCATE 12, 300: PRINT "arrow keys": LOCATE 12, 550: PRINT "move"
    LOCATE 13, 300: PRINT "space bar": LOCATE 13, 550: PRINT "fire weapon"
    LOCATE 14, 300: PRINT "p": LOCATE 14, 550: PRINT "pause game"
    LOCATE 15, 300: PRINT "esc": LOCATE 15, 550: PRINT "exit game"
    _FONT gamefontmed
    LOCATE 30, 150: PRINT "screen size can be adjusted by grabbing the window corners"
    _DISPLAY

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB randomcolors___MISC '===================================================SUB RANDOM COLORS MISC

    clr = INT(RND * 4) + 1

    SELECT CASE clr
        CASE 1
            clr = _RGB(255, 0, 0) 'red
        CASE 2
            clr = _RGB(255, 255, 0) 'yellow
        CASE 3
            clr = _RGB(255, 128, 0) 'orange
        CASE 4
            clr = _RGB(255, 255, 255) 'white
    END SELECT

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB setletters___MISC '=====================================================SUB SET LETTERS MISC

    FOR i = 1 TO lettersum
        RANDOMIZE TIMER
        path$ = "SCRAPSHIP\x\gfx\" + LTRIM$(STR$(i)) + ".png"
        lscrap(i).PIC = _LOADIMAGE(path$)
        lscrap(i).WIDTH = 80
        lscrap(i).HEIGHT = 80
        IF i = 1 THEN lscrap(i).X = 800 '0
        IF i <> 1 THEN lscrap(i).X = lscrap(i - 1).X - lscrap(i).WIDTH
        lscrap(i).Y = INT(RND * 50) + 150
    NEXT
    setlettersscriptran = 1

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB clearletters___MISC '============================================================SUB CLEAR LETTERS MISC

    FOR i = 1 TO lettersum
        lscrap(i).X = -500
        lscrap(i).Y = -500
    NEXT

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB escapekey___MISC '===============================================================SUB ESCAPE KEY TO EXIT MISC

    IF k = 27 THEN SYSTEM 'ESC KEY

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB credits___MISC '============================================================SUB CREDITS MISC

    _FONT gamefontlrg
    LOCATE 1, 460: PRINT "credits": LOCATE 8, 350: PRINT "23xx font created by": LOCATE 12, 420: PRINT "Tevinbloise"
    _DISPLAY
    SLEEP 3

    PCOPY 1, _DISPLAY
    PCOPY _DISPLAY, 1
    _FONT gamefontlrg
    LOCATE 1, 460: PRINT "credits": LOCATE 8, 160: PRINT "spaceship models created in blender by": LOCATE 12, 320: PRINT "another_blender_user"
    _PUTIMAGE (400, 400), cruiserunit
    _PUTIMAGE (600, 500), player.PIC
    _PUTIMAGE (100, 600), carriersideunit
    _DISPLAY
    SLEEP 3

    'PCOPY 1, _DISPLAY
    'PCOPY _DISPLAY, 1
    '_FONT gamefontlrg
    'LOCATE 1, 460: PRINT "credits": LOCATE 8, 460: PRINT "music by": LOCATE 12, 420: PRINT "Tyson Cazier"
    '_DISPLAY
    'SLEEP 3

    PCOPY 1, _DISPLAY
    PCOPY _DISPLAY, 1
    _FONT gamefontlrg
    LOCATE 1, 460: PRINT "credits": LOCATE 8, 320: PRINT "sound effects created by": LOCATE 12, 420: PRINT "mariosello1"
    _DISPLAY
    SLEEP 3

    PCOPY 1, _DISPLAY
    PCOPY _DISPLAY, 1
    _FONT gamefontlrg
    LOCATE 1, 460: PRINT "credits"
    _FONT gamefontmed
    LOCATE 4, 460: PRINT "Itch.io": LOCATE 7, 460: PRINT "Time Stop Dev": LOCATE 8, 460: PRINT "TheSneak": LOCATE 9, 460: PRINT "Malerouille"
    _DISPLAY
    SLEEP 3

    PCOPY 1, _DISPLAY
    PCOPY _DISPLAY, 1
    _FONT gamefontlrg
    LOCATE 1, 460: PRINT "credits"
    _FONT gamefontmed
    LOCATE 4, 460: PRINT "qb64 forums": LOCATE 7, 460: PRINT "FillippeHeitor": LOCATE 8, 460: PRINT "bplus": LOCATE 9, 460: PRINT "Petr"
    LOCATE 10, 460: PRINT "TerryRitchie": LOCATE 11, 460: PRINT "MasterGy": LOCATE 12, 460: PRINT "SMcNeill": LOCATE 13, 460: PRINT "STxAxTIC"
    LOCATE 14, 460: PRINT "OldMoses": LOCATE 15, 460: PRINT "TempodiBasic"
    _DISPLAY
    SLEEP 4

    PCOPY 1, _DISPLAY
    PCOPY _DISPLAY, 1
    _FONT gamefontlrg
    LOCATE 1, 460: PRINT "credits"
    _FONT gamefontmed
    LOCATE 4, 360: PRINT "first 100 instagram followers"
    _PUTIMAGE (0, 100), creditsinsta
    _DISPLAY
    SLEEP 5

    PCOPY 1, _DISPLAY
    PCOPY _DISPLAY, 1
    _FONT gamefontlrg
    LOCATE 1, 460: PRINT "credits"
    _FONT gamefontmed
    LOCATE 4, 420: PRINT "last, but not least . . .": LOCATE 7, 420: PRINT "God, family, friends . . ."
    _DISPLAY
    SLEEP 3

    PCOPY 1, _DISPLAY
    PCOPY _DISPLAY, 1
    _FONT gamefontlrg
    LOCATE 1, 460: PRINT "credits"
    _FONT gamefontlrg
    LOCATE 10, 430: PRINT ". . . and you!"
    _DISPLAY
    SLEEP 3
    menucase = 1
    selector.X = 340
    selector.Y = 540

END SUB
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
SUB debugtools___MISC '=========================================================SUB PLACEMENT TOOLS MISC

    IF animation2ran = 1 THEN
        SELECT EVERYCASE loadlevel '        - determine what debug tools to load based on level
            CASE IS >= 1
                _FONT gamefontmed
                LOCATE 1, 1: PRINT "HEALTH: "; player.HEALTH
                PRINT "Scrap: "; scrapcollected; " /"; numscrap
            CASE IS >= 2
                LOCATE 3, 1: PRINT "Shotdown: "; shotdown; " /"; numall
        END SELECT
    END IF

END SUB
