| 
;
;
         IF      L.GBLN = OFF     ;-------------------------------------------
         LIST    -L               ;--  GOBLIN  -------------------------------
         ENDIF                    ;-------------------------------------------
;
;
;
;
;  HANDLE GOBLIN GAME LOGIC
;  ========================
;
         SETDP   $D0
;        =====   ===
;
GOBLIN   LDU     #BRGTBL          ;  SET-UP TO SCAN GOBLIN TABLE
         LDA     #BRGCNT          ;  .    SET GOBLIN COUNT
         STA     TEMP1            ;  .    .
         CLR     GBLACT           ;  .    CLEAR GOBLIN ACTIVE FLAG
;
GBLN1    LDB     BRGFLG,U         ;  IS BRIGAND VISIBLE ?
         LBPL    GBLN7            ;  .
;
         LDA     GBLACT           ;  SET GOBLIN VISIBLE FLAG
         ORA     #$01             ;  .
         STA     GBLACT           ;  .
;
         LDY     BRGPTR,U         ;  FETCH BRIGAND PARAMETERS
;
         PSHS    Y,U,DP           ;  SET 'DP' = RAM
         LDA     #$C8             ;  .
         TFR     A,DP             ;  .
         SETDP   $C8              ;  .
;
         LDA     FRAM3            ;  MODERATE ANIMATION RATE
         BNE     GBLN5            ;  .
;
         INC     BRGTMR,U         ;  INCREMENT FRAME TIMER
;
         BITB    #$40             ;  RELEASE FLAMOID ?
         BNE     GBLN5            ;  .    HAS FLAMOID ALREADY BEEN RELEASED
;
         LDX     #BTHRW           ;  RELEASE FLAMOID ?
         LDA     BRGTMR,U         ;  .    TEST RELEASE TABLE
         LDA     A,X              ;  .    .
         BEQ     GBLN5            ;  .    .
;
         ORB     #$40             ;  RELEASE FLAMOID
         STB     BRGFLG,U         ;  .    SET FLAG
;
         JSR     RANDOM           ;  .    RANDOM FIRE OR DIRECTED ?
         BITA    #$70             ;  .    .
         BNE     GBLN3            ;  .    .
;
         ANDA    #$87             ;  .    RANDOM BRIGAND THROW
         BPL     GBLN2            ;  .    .
         ORA     #$F9             ;  .    .
GBLN2    ADDA    #$20             ;  .    .
         BRA     GBLN4            ;  .    .
;
GBLN3    LDA     BRGYT,Y          ;  .    DIRECTED BRIGAND THROW
         SUBA    WARYW            ;  .    .    CALCULATE DELTA 'Y'
         LDB     BRGXT,Y          ;  .    .    CALCULATE DELTA 'X'
         SUBB    WARXW            ;  .    .    .
         JSR     CMPASS           ;  .    .    CALCULATE ANGLE TO WARRIOR
         ADDA    #$10             ;  .    .    .    FUDGE ANGLE
;
GBLN4    LDX     BRGXT,Y          ;  .    SET-UP RELEASED FLAMOID
         LDB     BRGZT,Y          ;  .    .
         LDY     BRGYT,Y          ;  .    .
         JSR     SETFLM           ;  .    .
;
GBLN5    PULS    Y,U,DP           ;  SET 'DP' = I/O
         SETDP   $D0              ;  .
;
         LDA     BRGTMR,U         ;  FORM ANIMATION POINTER
         ASLA                     ;  .
         STA     TEMP2            ;  .
;
         LDA     BRGDRW,Y         ;  SET DRAWING FLAG
         STA     RFLAG            ;  .
;
         LDX     #TBRGN1          ;  DRAW FIRST PORTION OF BRIGAND
         LDA     TEMP2            ;  .    FETCH ANIMATION ADDRESS
         LDX     A,X              ;  .    .
         CMPX    #$FFFF           ;  .    .    SKIP THIS FRAME OF ANIMATION ?
         BEQ     GBLN7            ;  .    .    .
         CMPX    #$0000           ;  .    .    RESET BRIGAND ANIMATION ?
         BEQ     GBLN6            ;  .    .    .
;
         LDA     #$60             ;  .    SET INTENSITY
         LDB     BRGSIZ,Y         ;  .    SET SIZE
         STD     ETMP1            ;  .    .
         LEAY    BRGYW,Y          ;  .    SET ABSOLUTE POSITION
         STY     ETMP3            ;  .    .
         JSR     WDIFFY           ;  .    DRAW BRIGAND
;
         LDX     #TBRGN2          ;  DRAW SECOND PORTION OF BRIGAND
         LDA     TEMP2            ;  .    FETCH ANIMATION ADDRESS
         LDX     A,X              ;  .    .
         CMPX    #$FFFF           ;  .    .    SKIP THIS FRAME OF ANIMATION ?
         BEQ     GBLN7            ;  .    .    .
;
         LDD     ETMP1            ;  .    SET INTENSITY AND SIZE
         LDY     ETMP3            ;  .    SET ABSOLUTE POSITION
         JSR     WDIFFY           ;  .    DRAW BRIGAND
         BRA     GBLN7            ;  .
;
;
GBLN6    LDA     #$01             ;  RESET ANIMATION FOR THIS BRIGAND
         STA     BRGFLG,U         ;  .
         CLR     BRGTMR,U         ;  .    RESET ANIMATION TIMER
;
GBLN7    LEAU    BRGLEN,U         ;  BUMP TO NEXT ENTRY
         DEC     TEMP1            ;  .
         LBNE    GBLN1            ;  .
;
         RTS                      ;  RETURN TO CALLER
;
         IF      L.GBLN = OFF     ;-------------------------------------------
         LIST    *                ;-------------------------------------------
         ENDIF                    ;-------------------------------------------
 |