PortCommodore.com (site map) - (random page)
MAIN - CLASSIC COMPUTING - Flash Attack -

FLASH ATTACK
Source Listings

Flash Attack (interpreted/commented) source...

This is the re-typed printout of the original flash source. It does not include the ML yet. Most of the code I could make out is commented except the random routine is not clear to me yet (nor what values are in 221-223). Though you can get a good grasp on the entire game logic from this:
//COMMODORE PET BASIC HERRE:
//NOT SURE OF THE BASIC CODE FUNCTION, MAY BE PART OF THE FOCO COMPILER OR BASIC ROUTINES FOR FOCO.

3 L=9500: D=256:IF L <>  PEEK(135) * D +  PEEK(134) THEN G=136: W=L: GOSUB800: RUN
5 N=2656: N=-1: DIM S$(80), V(80)
10 B = D *  PEEK(125)+ PEEK(124)-4: F = 89: G=F+1: T=6764 : P=T
20 DEF FNK(X) = X < 128 AND ( X < 65 OR X > 90 ) OR X > 169 AND X< I75 OR X > 176 AND X < 180

100 GOSUB 900:IF S>0 THEN 140
120 IF TI$="" THEM  PRINT " BC "CHR$(34)CHR$(X);:GOTO130
125 B=B-LEN(T$)+1 : PRINT " UR "CHR$(34)T$;
130  PRINT CHR$(34)",";: E=1: GOTO 100
140 IF S<228 THEN GOSUB 700: GOTO 100
150 ON S-227 GOSUB 170, 180, 165, 250, 280, 300 ,120 ,350, 400: GOTO 100

165 S=226: GOSUB 700: H=T: T=T-2: RETURN

170 IF G>F THEN  PRINT " IWE,";: E=1: RETURN
175 GOSUB 700: R=D* PEEK(G+1)+ PEEK(G): G=G+2: GOT0 400

180 B=B-1: X= PEEK(B): IF X<>34 AND X>0 THEN R=R+1: GOTO 180
200 IF R>0 THEN FOR I=1 TO R: S= PEEK(I+B):GOSUB 700: NEXT
210 S=229: GOSUB 700: GOTO 400

250 IF G>F THEN  PRINT " 1WE,";: E=1: RETURN
260 S=226: GOSUB 175: W=T+3: GOTO 800

280 W=T: GOTO 800

300 B=B-1: X=FEEK(B): GOSUB 925: IF T$=~"" THEN 330
320 GOSUB 750: N=N+1: S$(N)=T$: V(N)=T: B=B-LEN(T$)+LEN(X$)-(X$=""): RETURN
330 IF S<236 THEN B=B+1: T=Q: RETURN 
340 Q=T: T=R: RETURN

350 GOSUB 900: IF S=236 THEN Z=R: GOSUB 650: GOTO 350
360 IF S=234 THEN RETURN
370 IF S<>203 THEN 120
380 GOSUB 900: IF S<236 THEN 120
390 IF R>1 THEN GOSUB 650: R=R-1: GOTO 390
395 GOTO 350

400 IF R<128 THEN S=R: GOTO 700
410 IF R<16384 THEN X=INT(R/D): S=R-D*X GOSUB 700: S=X+128: GOTO 700
420 X=INT(R/D): S=P-D*X: GOSUB 700: S=X: GOSUB 700: S=230: GOTO 700

650 S=INT(Z/D): GOSUB 700: S~Z-S*D: GOTO 700

700 T=T-1:  POKE T+(9000 AND (T)M),S: RETURN

750 IF H>0 THEN R=T: T=H: GOSUB 400: T=R: H=0
760 RETURN

800 G=G-1: Y=INT(W/D):  POKE G,Y: G=G-1:  POKE G,W-D*Y: RETURN

900 B=B-1: X= PEEK(B): IF X=32 OR X=44 THEN 900
905 IF X>16 THEN 925
910 Y=X+D+ PEEK(B-l):IF E THEN PP1NT "{C-LT} IN LINE"Y: E=0
912 IF Y>1000 THEN B=B-4: GOTO 900
915 IF G"" THEN 940
950 FOR I=M TO M+43: IF X= PEEK(I) THEN S=I-M+192: RETURN
955 NEXT: W=1: IF X<48 OR X>57 THEN S=0: RETURN
960 R=R+(X-48)*W: X= PEEK(B-1): IF X>47 AND X<58 THEN B=B-1: W=W*10: GOTO 960
965 iF X=171 THEN R=65536-R:B=B-1
970 RETURN

// NOW WE GO INTO FOCO...

    999 STOPSTR$CHR$ PRINT PEEK POKE@!GET+-*/\>=
                IF
                    -RH POKE
                    1%-
                THEN
                    +RH POKE
                    1+
                END
                THEN
                    1 RV PEEK
                    #10 RND\ >
                    IF
                        -RV POKE
                        40%-
                    THEN
                        +RV POKE
                        40+
                    END
                END
                #BD>
                IF
                    _BD
                END
                #BT<
                IF
                    _BT
                END
                102; POKE
        NEXT
        _
    NEXT
// TOP WALL OF MAP BOARD
    BD 39+ BD
    FOR
        102{PI} POKE
    NEXT
// BOTTOM WALL OF MAP BOARD
    BT 39 BT-
    FOR
        102{PI}P0KE
    NEXT
// LEFT AND RIGHT WALLS OF MAP BOARD
    40 BD BT-/ 1
    FOR
        102{PI}40* BD+ 1;-,102% POKE
         POKE
    NEXT
// INTIAL LOCATION OF TANK 1
    RNX&
    #TX POKE
    RNY&
    #TY POKE
LOOP:
// INITIAL LOCATION OF TANK 2
    RNX&
    RNY&
    ;;5^-#*%6^-#*+ 101>
    IF
        __.
    END
    TY 2+ POKE
    TX 2+ POKE
    __1,0
// CALCULATE BASE POSITION LOCATIONS FROM TANK COORDINATES
    FOR
        {PI*2}+ #TY+ PEEK
        40*;TX+ PEEK
        ~BD+ 123%-%FORTPOS+ !
    NEXT
    1,0
    FOR
        {PI*2}+ FORTPOS+ @ 123+ 90; PDKE
        224,40, 3^- POKE
        224,1, 3^- POKE
        224; 1+ POKE
        224; 40+ POKE
        _
    NEXT
// SEND CONTENTS OF LOCS. 221-223 (?)
    223,221
    FOR
        {PI} PEEK
        SND&
    NEXT
// SEND GAME MAP BOARD
    BT BD
    FOR
        {PI} PEEK
        SND&
    NEXT
// END BASE AND TANK POSITIONS
    FORTPOS#2+ PEEK
    SND&
    #3+ PEEK
    SND&
    # PEEK
    SND&
    1+ PEEK
    SND&
    TX2+ PEEK
    SND&
    TY2+ PEEK
    SND&
    TX PEEK
    SND&
    TY PEEK
    SND&
// TANK 1 IS FIRST PROCESS, GO TO GAME START
    0 USR POKE
    EXIT GOTO
// NO WIRE ON THIS SIDE WE GET MAP BOARD FROM OTHER COMPUTER
NOGEN:
// GET LOCATION 221-223 (FOR ?)
    223,221
    FOR
        RCV&
        {PI} POKE
    NEXT
// GET MAP BOARD
    BT,BD
    FOR
        RCV&
        {PI} POKE
    NEXT
// SET BASE LOCATIONS
    FORTPOS 3+ FORTPOS
    FOR
        RCV&
        {PI} POKE
    NEXT
// GET TANK LOCATIONS
    TX 3+ TX%
    FOR
        RCV&
        {PI} POKE
    NEXT
// FIRST TANK TO PROCESS IS TANK 2
    2 USR  POKE
// GAME START
EXIT:
// GENERATE DISPLAY SCREEN
// FIRST, ALL THE BOXES
    "{CLR}" PRINT
    UB, WHBX!               // CHANGE TO THICK WHITE BORDER
    7,7,32815 DRBOX&        // DRAW BASE WINDOW BORDER
    7,7,32832 DRBOX&        // DRAW TANK WINDOW BORDER
    BX, WHBX!               // BACK TO THIN BORDER
    1,5,33175 DRBOX&        // TANKS
    2,1,33180 DRBOX&        // BASE X
    2,1,33300 DRBOX&        // BASE Y
    3,1,33454 DRBOX&        // ICBM ANGLE
    3,1,33614 DRBOX&        // ICBM RANGE
    1,3,33501 DRBOX&        // ICBMS
    1,8,33350 DRBOX&        // MINES
    2,9,33354 DRBOX&        // SHELLS
    5,2,33520 DRBOX&        // WALLS
    3,1,33361 DRBOX&        // GAS
    2,1,33203 DRBOX&        // TANK Y
    2,1,33083 DRBOX&        // TANK X
// THEN ALL THE TEXT
    17,2 POSCUR&
    "{C-UP}MACH 2{C-DN*2,C-LT*6}F{C-DN,LT}L{C-DN,LT]ATTACK{C-DN,CLT*6}S{C-DN,LT}V1.O" PRINT
    15FF POKE
    6,11 POSCUR&
    "{C-UP}T{C-DN,LT}A{C-DN,LT}N{C-DN,LT}K{C-DN,LT}S" PRINT
    11,11 POSCUR&
    "{C-UP}X{C-DN*3,C-LT}Y" PRINT
    6,20 POSCUR&
    "{C-UP}ANGLE" PRINT
    6,24 POSCUR&
    "{C-UP}RANGE" PRINT
    12,18 POSCUR&
    "{C-UP}I{C-DN,LT}C{C-DN,LT}B{C-DN,LT}M{C-DN,LT}S" PRINT
    24,13 POSCUR&
    "{C-UP}CONDITION"PR1NT
    25,16 POSCUR&
    "{C-UP}M{C-DN,LT}I{C-DN,LT}N{C-DN,LT}E{C-DN,LT}S" PRINT
    30,16 POSCUR&
    "{C-UP}S{C-DN,LT}H{C-DN,LT}E{C-DN,LT}L{C-DN,LT}L{C-DN,LT}S" PRINT
    33,22 POSCUR&
    "{C-UP}WALLS" PRINT
    34,17 POSCUR&
    "{C-UP}GAS" PRINT
    35,4 POSCUR&
    "{C-UP}F"FRINT
    4,4 POSCUR&
    "{C-UP}F" PRINT
    34 8 POSCUR&
    "{C-UP}X{C-DN*3+LT}Y"  PRINT
    1,5,33216 POBOX&        //FILL TANKS  WITH DOTS
    1,3,33542 POBOX&        //FILL ICBMS WITH DOTS
    ,0 ANG;;2+ !!0 RNG
    ;;2+ !! DISPA&          //DISPLAY ANGLE
    DISPR&                  //DISPLAY RANGE
    8,11 POSCUR&
    "{C-UP,CIRCLE}" PRINT   //REMOVE ONE TANK FROM TANKS
    TX PEEK
    # STR$
    2,13,11 RJP&            //DISPLAY TANK X
    FX POKE
    TY PEEK
    #STR$
    2, 13, 14 RJP&          //DISPLAY TANK Y
    FY POKE
    3 MSL;;2+ !!5 TCT       //RESET TANK AND ICBM COUNT
    ;;2+ !!0 RENEW&         //REFRESH TANK (DISPLAY TANK STATS)
    2 RENEW&                //REFRESH TANK 2
    6 CTA POKE
    3 DC POKE
    34,6849 POKE
// MAIN GAME LOOP, RUNS TWICE PER TURN ONE FOR LOCAL TANK
// AND AGAIN FOR OPPONENT TANK, (BALANCES LOAD TIMING)
RUN:
    CLAR SYS                //DISP WINDOWS?
    USR PEEK                //WHICH TANK ARE WE PROCESSING? (USR)
    IF
        RCV&                //THIERS: GET THIER KEY STROKE (IF ANY)
    THEN
        GET#                //OURS: GET KEY STROKE (IF ANY)
        SND&                //SEND TO OPPONENT
    END
// KEY STROKE PROCESSOR
    #
    IF
        #" "_=                                      //"[SPACE]" TANK GUN
        IF
            1 FSET&
        THEN
            #"]"_=                                  //"]" BASE GUN
            IF
                2 FSET&
            THEN
                #"M"_=                              //"M" LAY A MINE (43 FOR US, 96 FOR THEM)
                IF
                    0 FSET&
                    ML USR  PEEK
                    +#@
                    IF
                            USR  PEEK
                        IF
                            96
                        THEN
                            43
                        END
                        RST USR PEEK
                        + POKE
                        1;@-%!
                    THEN
                        _
                    END
                    DISPML&
                THEN
                    #"W"_=                          //"W" LAY A PHONY WALL (#160)
                    IF
                        0 FSET&
                        ML USR  PEEK
                        +#@
                        IF
                            160 RST USR  PEEK
                            + POKE
                            1;@-%
                        THEN
                            _
                        END
                        DISPWL&
                    THEN
                        #47<;58> AND                //NUMERIC, COULD BE DIRECTION OR # ENTRY
                        IF
                            FF USR  PEEK
                            + PEEK
                            #3 AND 3^48< AND
                            IF                      //GUN ARMED, FIRE
                                2 AND
                                IF
                                    0
                                THEN
                                    4
                                END
                                #TB POKE
                                IF
                                    SHL USR  PEEK
                                    +#@ COND U5R PEEK
                                    +@0< AND TANKPOS USR  PEEK
                                    +@ FORTPOS USR  PEEK
                                    +@= NOT AND
                                    IF
                                        1;@-%!DC POKE
                                        FIRE&
                                        3 DC POKE
                                        DISPSH&
                                    THEN
                                        _
                                    END
                                THEN
                                    FIRE&
                                END
                                0 FSET&
                            THEN
                                12 AND
                                IF                  //NUMERIC ENTRY
                                    DG&
                                THEN                //MOVE TANK
                                    #48<
                                    IF
                                        MOVE&
                                        DISPXYF&
                                    END
                                END
                            END
                        THEN                        //"[HOME]" REFRESH TANK (IF IN RIGHT BASE)
                            #"{C-HOME}"_=TANKPOS USR  PEEK
                            +@ FORTPOS USR  PEEK
                            +@= AND
                            IF
                                    USR  PEEK
                                RENEW& 
                            THEN
                                #"_"_=              //"<-" ABORT GAME
                                IF
                                    "{C-UP}STOPPED" PB GOTO
                                THEN
                                    #"A"_=          //ACTIVATE ANGLE ENTRY
                                    IF
                                        4 FSET&
                                        0 ANG USR  PEEK
                                        +! DISPA& 
                                    THEN
                                        #"R"_=      //ACTIVATE RANGE ENTRY
                                        IF
                                            8 FSET&
                                            0RNG USR  PEEK
                                            +! DISPR&
                                        THEN
                                            #"I"_=  //LAUNCH AN ICBM (IF ANY)
                                            IF
                                                0 FSET&
                                                MSL USR  PEEK
                                                +#@
                                                IF
                                                    1;@-%! MIS&
                                                    DISPMS&
                                                THEN
                                                    _
                                                END
                                            THEN
                                                #"{REV-OFF}"_=      //JUMP TANK TO DISPLAY SCREEN
                                                IF
                                                    32644 TANKPOS USR  PEEK
                                                    +32;@ 123+ POKE
                                                    !
                                                THEN
                                                    0 FSET&
                                                END
                                            END
                                        END
                                    END
                                END
                            END
                        END
                    END
                END
            END
        END
    END
    _ USR  PEEK
    IF                              // SWITCH PROCESS TO OTHER TANK
        0
    THEN
        2
    END
    USR  POKE
    TCT @0=                         // CHECK TANK COUNT
    IF
        TCT 2+ @0=
        IF
            MSL @0= MSL 2+ @0= AND
            IF                      //IF NO TANKS AND ? MISSILES, SET STATUS TO "ALIVE"
                "{C-UP} ALIVE " PB GOTO
            END
        END
    END
    COND PEEK
    2>
    IF                          // CHECK TANK/GAME CONDITION
        514 PEEK
        64 AND #TM PEEK
        = NOT
        IF                      //DISPLAY CONDITION
            #TM POKE
            42,6849 POKE
            DISPCD&
            34,6849 POKE
        END
        _
    END.
CLAR:                           //SYS TABLES FOR???
    [43112 41576 39678 38984 24648]
//FIRING AN ICBM!
MIS:
// TURN IN SOUND
    16,59467 POKE
    17,59466 POKE
    80
REPT:
//BOMB DROP WHISTLE
    64;/#1
    FOR
        3,3^/59464 POKE
        #50/ 1
        FOR
            #_
        NEXT
        %1+ %
    NEXT
    %#700>
    IF
        %_.
    END
    __0,59467 POKE
//CALCULATE WHERE ICBM HIT
    ANG USR PEEK
    +@#270<
    IF
        360;-% 270-
    THEN
        #180<
        IF
            #180-% 270-
        THEN
            #90<
            IF
                # 180- % 90%
            THEN
                90;-
            END
        END
    END
    DIST&
    40* % DIST&
    +FORTPOS  USR  PEEK
    +&123++#BD40+ >;40 BT- < OR
    IF
        _RETURN
    END
// BLOW UP 3X3 SECTION (ICBM IMPACT)
    8,0
    FOR
        BT {PI*2}++@;+ RND CTA POKE
        POW&    //DO BLAST PROCESS
    NEXT
    _6 CTA POKE
    SHOW GOTO
//DISTANCE AND SIN CALCULATIONS
DIST:
    SIN&
    5% / RNG USR  PEEK
    +@* 200% / RETURN
SIN:
    157* 9% /# 10% /##* 150% /;* 40% / 10; / 3^ *250 %/3$* 80% / 31+-
    RETURN
//DIGIT ENTRY/DISPLAY ROUTINE
DG:
    # 48% - FF USR  PEEK
    + PEEK
    4 AND
    IF
        RNG USR  PEEK
        +@ 10* +# 35<
        IF
            0 FSET&
        END
        ANG USR  PEEK
        +!
        DISPA&
    THEN
        RNG USR  PEEK
        +@ 10* + # 14<
        IF
            0 FSET&
        END
        RNG USR  PEEK
        +! DISPR&
    END
    RETURN
//FIRE GUN
FIRE:
    DIR&
    FORTPOS TB PEEK
    + USR  PEEK
    +@ 123+ TB PEEK
    0=
    IF
        XOFF @0=
        YOFF @0=OR
        IF
            ;+
        END
    END
    3,1                         //GUN RANGE =3
    FOR
        ;+# PEEK
        #32= ;43= OR %96= OR    //BULLET GOES OVER MINES AND EMPTY, 
        IF
            NEXT                //KEEP MOVING
        THEN
            CLR                 //HIT SOMETHING STOP THE LOOP
        END
        BANG&                   //EXPLODE SHELL
    RETURN
//MOVE TANK
MOVE:
    FL USR  PEEK                //CHECK GAS
    +@COND USR  PEEK            //CHECK CONDITION
    +@O
    IF                  //LOST A TANK
        1; TCT+ @-# 3^
        TCT+ !0<
        IF
            # RENEW&
            90
        THEN            //CONDITION LOUSY, OUT OF TANKS
            0; ACTTAB 4+ +!
            7,7,32873 POBOX&    //FILL TANK WINDOW WITH DOTS
            32
        END
    THEN
        90
    END
    ;TANKPOS+ @ 123+ POKE
    __
    THEN
        224=            //HIT A REAL BASE WALL, WHICH ONE??
        IF
            FORTPOS@ 123+ -#- 40=;- 1= OR; 1= OR ; 40= OR
            IF          //YOURS
                "{C-UP}DEFUNCT"
            THEN        //OR THIERS
                "{C-UP}SUPREME"
            END
            PB GOTO
        END
    END
    _
    RETURN
EXCH:           //EXPLOSION EFFECT
    8,0
    FOR
        #BTABA      //GET A POSITION RELATIVE TO EXPLOSION
        {PI*2}++@+# PEEK    //STORE WHAT IS THERE
        BTABB               //READ IN EXPLOSION PART SYMBOL
        {PI*2}++@4^ POKE    //PLACE ON MAP
        POKE
        _
        CTR PEEK
        #59464 POKE
        CTA PEEK
        +CTR POKE
    NEXT
    RETURN
BTABA:                      //3X3 LOCATIONS AROUND A SPECIFIC POINT 
    [0 1 -1 40 -40 39 -39 41 -41]
BTABB:                      //GRAPHICS REPRESENTING EXPLOSION
    [42 64 64 93 93 78 78 77 77]
RENEW:                      //REFRESH TANK (WHEN DOCKED AT BASE)
    18; SHL+;!8; ML+ !10; WL+ !200; FL+ !3; COND+ !32; RST+ POKE
    FORTPOS; +@; TANKPOS+ !
    #0=
    IF
        FX PEEK         //ALSO SET INITIAL TANK COORDINATES IF START OF GAME
        TX POKE
        FY PEEK
        TY POKE
        1,8,33391 POBOX&
        2,9,33395 POBOX&
        5,2,33561 POBOX&
        USR  PEEK
        0
        USR  POKE
        0 FSET&
        USR  POKE
        DISPCD&
        DISPXYF&
    END
    0;FF+!_
    RETURN
POBOX:          //CREATE DOTTED SQUARE
    ;1
    FOR
        #4^ 1
        FOR
            81; POKE
            1+
        NEXT
        _40+
    NEXT
    ___
    RETURN
DISPXYF:        //DISPLAY TANK X, Y AND GAS
    34,15 POSCUR&
    TX PEEK
    STR$
    2 RJ&
    _"{C-UP*3,C-LT*2}"_TY PEEK
    STR$
    2 RJ&
    _"{C-UP*4,C-LT}"_FL PEEK
    STR$
    3 RJ&
    _145,18,42,6849 POKE
    PRINT
    34,6849 POKE
    RETURN
DISPWL:         //DISPLAY WALL
    USR  PEEK
    IF
        RETURN
    END
    WL PEEK
    # 4<
    IF
        42- ,19
    THEN
        37- ,20
    END
    KILL GOTO
DISPSH:         //USE SHELL
    SHL PEEK
    # 18= USR  PEEK
    OR
    IF
        _
        RETURN
    END
    # 8<
    IF
        27% 32-
    THEN
        28% 23-
    END
    KILLGOTO
DISPML:     //LAY MINE
    USR  PEEK
    IF
        RETURN
    END
    23 ML PEEK
    22-
    KILL GOTO
DISPMS:         //FIRE MISSILE
    USR  PEEK
    IF
        RETURN
    END
    14, MSL PEEK
    21- KILL GOTO
D1SPT:      //TANK
    8, TCT PEEK
    # 0= 0- + 16-
KILL:           //PLACE EMPTY CIRCLE
     POSCUR&
    "{C-UP,CIRCLE}" PRINT
    RETURN
DISPA:          //DISPLAY ANGLE
    ANG@ STR$
    3,7,18 RJP GOTO
DISPR:          //DISPLAY RANGE
    RNG@ STR$
    3,7,22 RJP GOTO
FSET:           
    USR PEEK
    #
    IF
        FF+ POKE
    THEN
        FF+ PEEK
        ;;; OR 3$ 3$ AND NOT AND 1,3,0
        FOR
            ;;AND
            IF
                {PI*2}+
                TABC+#
                 PEEK
                %1+  PEEK
                 POSCUR&
                3^ ;AND
                IF
                    "{C-UP,FILL-CIRCLE}"
                THEN
                    "{C-UP,CIRCLE}"
                END
                PRINT
            END
            #+
        NEXT
        __FF
        POKE
    END
    RETURN
    
TABC:
    [1315 1284 4613 5637]
RJP:
    POSCUR&
    RJ&
    1+ 145% PRINT
    RETURN
RJ:
    ;%-# O<
    IF
        1
        FOR
            32% 1+
        NEXT
    THEN
        _
    END
    RETURN
MOVTK:
    RST USR  PEEK
    + PEEK
    TANKPOS USR  PEEK
    +@ 123+ POKE
    TRNKPOS USR  PEEK
    +@;+# TANKPOS USR  PEEK
    +! 123+ # PEEK
    RST USR  PEEK
    + POKE
    90% POKE
    TX USR  PEEK
    +# PEEK
    XOFF@ +% POKE
    TY USR  PEEK
    +# PEEK
    YOFF@ +% POKE
    RETURN
DIR:
    0YOFF! 0FOFF!# 54<
    IF
        -1 YOFF- 40 FOFF!
    THEN
        # 52>
        IF
            1 YOFF! 40 FOFF!
        END
    END
    3% \#
    IF
        - 2+
    THEN
        _1
    END
    # XOFF! FOFF@ +
    RETURN
XOFF:
    ##
YOFF:
    ##
FOFF:
    ##
//DISPLAY PLAYING BOARD
PB:
    7025SYS
    42,6849 POKE
    3 COND POKE
    DISPCD&
    25,11 POSCUR&
    PRINT
    0,22 POSCUR&            //MOVE CURSOR TO BOTTOM OF SCREEN
    "{C-DN}" PRINT          //WAIT FOR INPUT BEFORE DISPLAYING MAP
    INPUT 40 BD BT-/0
    FOR                     //DISPLAY MAP POKE A LINE ON BOTTOM, THEN PRINT A LINE FEED.
        BD {PI} 40* + 39, 0
        FOR
            # {PI}+ PEEK
            # 96=
            IF              //MAKE ENEMY MINES SHOW UP AS *S
                _42
            END
            {PI} 33728+ POKE
        NEXT
        _
        GET
        IF
//OPTIONAL PAUSE WHILE DISPLAYING MAP
PAUSE:
            GET
            0=
            IF
                .
            END
        END
        {C-DN}" PRINT
        NEXT
//END OF GAME "PLAY AGAIN" QUESTION
QA:
    13,1 PRINT
    "PLRY AGAIN? " PRINT
    INPUT _#"Y"_=
    IF
        3525,7038 SYS
    THEN
        "N"_=
        IF
            STOP
        END
    END
//DISPLAY PLAYER CONDITION
DISPCD:
    24,10 POSCUR&
    COND @#1< 514 PEEK
    64 AND OR
    IF
        "{C-UP,SH-0,SH-@*7,SH-.,C-DN,C-LT,SH-],CLT*8,SH-]} " PRINT
        #1>
        IF
            _"LOUSY"
        THEN
            #1=
            IF
                _" RED "
            THEN
                2=
                IF
                    "AMBER"
                THEN
                    "GREEN"
                END
            END
        END
         PRINT
        " {C-DN,C-LT*8,SH--,SH-@*7,SH-=}"
        THEN
            "{C-UP,SH-,,SH-"*7,SH-;,C-DN,C-LT,SH-!,CLT*8,RVS-ON,SH-!} " PRINT
            1=
            IF
                " RED "
            THEN
                "LOUSY"
        END
         PRINT" {C-DN,C-LT*8,RVS-OFF,SH-<,RVS-ON,SH-"*7,RVS-OFF,SH->}"
    END
     PRINT
    RETURN
//POSITION CURSOR ON SCREEN NOTE: NEED TO DO A PRINT AFTER POKES TO GET IT TO 'JUMP'
POSCUR:
    1+ 245 POKE
    226 POKE
    RETURN
//SEND BYTE OVER CABLE
SND:
    180 POKE
    6764 SYS
    RETURN
//RECEIVE BYTE FROM CABLE
RCV:
    6802 SYS
    180 PEEK
    RETURN
//RANDOM X COORDINATE ON MAP
RNX:
    36 RND\ 2+
    PETURN
//RANDOM Y COORDINATE ON MAP
RNY:
    3,40 BD BT-/-RND\ 2+
    RETURN
//DRAW A BOX ON SCREEN
 DRBOX:
    0 BC&
    ; POKE
    #4^1
    FOR
        1+ 2 BC&
        ; POKE
    NEXT
    1+ 4 BC&
    ; POKE
    3^ 1
    FOR
        40~ 6 BC&
    ; POKE
    NEXT
    _
    ;
    1
    FOR
        40+ 8 BC&
        ; POKE
    NEXT
    40+ 10 BC&
    ; POKE
    3^ 1
    FOR
        1+ 12 BC&
        ; POKE
    NEXT
    1+ 14 BC&
    % POKE
    __
    RETURN
//BOX PART SELECTOR (DEPENDING ON PART NUMBER AND BOX TYPE
BC:
    WHBX@ +@
    REIURN
//THICK LINE BOX PARTS
UB:
    [236 226 251 225 97 252 98 254]
//THIN LINE BOX PARTS
BX:
    [112 64 110 93 93 109 64 125]
:
ACTTAB:
    34
::
FORTPOS:
    50
:
TANKPOS:
    54
::
RH:
    #
RV:
    #
FF:
    ####
TB:
    ##
MSL:
    ###
ANG:
    ####
RNG:
    ####
SHL:
    ####
ML:
    ####
WL:
    ####
FL:
    ####
COND:
    ####
TCT:
    ####
RST:
    ####
TX:
    #
TY:
    ###
 USR :
    #
FX:
    #
FY:
    #
CTR:
    #
CTA:
    #
DC:
    #
WHBX:
    ##
TM:
    #697
::
BD:
    738
::
BT:
    3057
: