total-carnage/BAKGND.ASM

2295 lines
44 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

**************************************************************
*
* Software: Todd Allen and MARK TURMELL
* Initiated: 1988?
*
* Modified: Shawn Liptak, 9/16/91 -Minor improvements
* Shawn Liptak, 11/15/91 -CREATE0
*
* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC.
*
*.Last mod - 12/19/91 22:35
**************************************************************
.FILE 'BAKGND.ASM'
.TITLE "BACKGROUND HANDLERS"
.OPTION B,D,L
.MNOLIST
.INCLUDE "MPROC.EQU" ;MPROC EQUATES
.INCLUDE "DISP.EQU" ;DISPLAY PROCESSOR EQUATES
.INCLUDE "\VIDEO\SYS\GSP.INC" ;GSP ASSEMBLER EQUATES
.INCLUDE "\VIDEO\SYS\SYS.INC" ;ZUNIT SYSTEM EQUATES
.INCLUDE "\VIDEO\SYS\MACROS.HDR" ;MACROS, YEAH!
.INCLUDE "BGNDTBL.GLO" ;BACKGROUND EQUATES
.INCLUDE "GAME.EQU"
.INCLUDE "IMGTBL.GLO"
.INCLUDE "HBASE.TBL"
;*BACKGROUND SYSTEM STUFF
.GLOBAL BAKBITS,BAKMODS,BAKLST,BGND_UD1,DISP_DEL
*GLOBALS IN THIS FILE
*RAM EQUATES
.GLOBL GETBPAL
.REF OBJOFF,DO_ALL_STUFF,STRT_S,STATSND,RANGRAND,GAMSTATE
.REF TAUNTOUT,DELAYALL,STRT_MISLS,KP_TAUNT
.REF FRANIMQ
.REF STRT_EGG,OBJON
.REF ANI_FLAG,ARWOFF,PCNT,DROPBMB,TARGET_NUM,ANI_HSTG,RANDPER
.REF CRATEMAN,SEND_GROUP,BLOW_RCTR,SPATH,INTRO,AFTR_WRP
.REF ANI_STEEL,CRT1,BRRL2,MINE_FLG,STRT_ALAY,M1,ELECT_MINE,ELECT1
.REF STRT_AJET,LOCK_NUM
.REF SOLDR,SOLDRD,SOLDRDL,STRT_WRP,POND,STRT_FND,WAVE,TNT_TYPE
.REF STRT_GPIT,STRT_AJP
.DEF ISTATE
.DEF KPLARM,STATIC_COVER,STATSNDS,ANI_STAT
.BSS KPLARM,32 ;GI WALKIE TALKIE ARM
.BSS BGNDPALTBL,32,1
.BSS MOD_POS,32,1
.BSS BAKBITS,10000
.BSS ISTATE,16
.BSS BAKMODS,32
.TEXT
*BACKGROUND UPDATER EQUATES
BLSTSTRT .EQU >8000
BLSTEND .EQU >8001
************* LOCAL CONSTANTS FOR UPD **************
DISP_PAD .SET >00200020 ; Y:X
DISP_PAD2 .SET >00800020 ; Y:X
;DISP_PAD .SET >00000000 ; Y:X
WIDEST_BLOCK .SET 250
* MUST KEEP THE SIZE OF THESE STRUCTURES A MULTIPLE OF 16
MAP_ZFLAGSPAL .SET 0
MAP_PAL .SET 0 ;SIZE 4 - PALETTE SELECT
MAP_FLAGS .SET 4 ;SIZE 4 - BIT 0 HFLIP, BIT 1 YFLIP
MAP_Z .SET 8 ;SIZE 8
MAP_X .SET 16 ;SIZE 16
MAP_Y .SET 32 ;SIZE 16
MAP_HDR .SET 48 ;SIZE 16 - OFFSET IN LONG WORDS FROM BLOCK_HDR_TBL
; BITS 12-15 ARE BITS 4-7 OF PAL
; MAP_HDR SET TO >FFFF IF BLOCK IS NOT ALLOCATED
BLOCK_SIZE .SET 64 ;* IF CHANGED MUST GET RID OF SHIFTS BY 6
* Offsets for a BLOCK HDR structure
MAP_SIZE .SET 0
MAP_W .SET 0 ;SIZE 16 ; THESE FIELDS CAN'T BE CHANGED
MAP_H .SET 16 ;SIZE 16 ; BECAUSE THEY ARE USED AS THE
MAP_DATAPTR .SET 32 ;SIZE 32 ;
BLOCK_HDR_SIZE .SET 64
* OFFSETS FOR A BLOCK HDR STRUCTURE
;MAP_SIZE .SET 0
;MAP_W .SET 0 ;SIZE 16 ; THESE FIELDS CAN'T BE CHANGED
;MAP_H .SET 16 ;SIZE 16 ; BECAUSE THEY ARE USED AS THE
;MAP_ANIMOFF .SET 32 ;SIZE 32 ; OIMG BLOCK HEADER
;MAP_DATAPTR .SET 64 ;SIZE 32 ;
;BLOCK_HDR_SIZE .SET 96
************************************************************************
* SCAN A MODULE LIST TO FIND OUT WHICH MODULE CONTAINS BLOCKS
* WHICH NEED TO BE CHECKED
*PARMS A0 - XPOS FOR WHICH HEIGHT OF BACKGROUND NEEDS TO BE DETERMINED
*RETURNS A0 -
* MINIMUM YPOS (MAX HEIGHT) OF PRIMARY BACKGROUND WHICH OVERLAPS
* SPECIFIED XPOS
* A0 = 0 IF XPOS IS INVALID
BGNDHGHT
MMTM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11
MOVE A0,A1
CLR A10 ;INIT PACKED Y:X STARTING POSITION
CLR A11
MOVE @BAKMODS,A0,L ;* A0- PTR TO THE MODULE LIST
MODLP0 MOVE *A0+,A8,L ;LOAD MODULE PTR
CMPI -1,A8
JRZ MODX0 ;END OF THE MODULE TBL
MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE
MOVE *A0+,A3,W ;X START POSITION
ZEXT A3,W
CMPI BLSTSTRT,A3
JRNZ NOTLSTSTRTX
MOVE A11,A3
SUBXY A9,A3
JRUC GOTNEWX0
NOTLSTSTRTX
CMPI BLSTEND,A3
JRNZ GOTNEWX0
MOVE A11,A3
GOTNEWX0
MOVE *A0+,A4 ;Y START POSITION
ZEXT A4
CMPI BLSTSTRT,A4
JRNZ NOTLSTSTRTY
MOVE A11,A4
SUBXY A9,A4
JRUC GOTNEWY0
NOTLSTSTRTY
CMPI BLSTEND,A4
JRNZ NOTLSTENDY
MOVE A11,A4
JRUC GOTNEWY0
NOTLSTENDY
SLL 16,A4
GOTNEWY0
MOVY A4,A3
MOVE A3,A10
; CMPXY A10,A1
; JRV MODX0 ;JUMP TO EXIT LOOP IF MOD START X > X SOUGHT
;IF MOD END X < X SOUGHT KEEP SEARCHING MOD LIST
MOVE A10,A11
ADDXY A9,A11 ;A11 IS MODULE Y:X END
MOVE *A8+,A9 ;LOAD # OF BLOCKS
ADD A9,A7 ;A7 IS NEW BAKBITS PTR
CMPXY A11,A1
JRNV MODLP0 ;SKIP IF AX < BX
MOVE A10,A0
SRL 16,A0
JRUC GOTHGHT
MODX0 CLR A0
GOTHGHT MMFM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11
RETS
**************************** BSRCH1STXB ********************************
* PARMS
* A0 - X COORDINATE OF A BLOCK
* A1 - START OF BACKGROUND BLOCK TABLE
* A2 - END OF BLOCK TABLE
* RETURNS:
* A0 - ADDRESS OF FIRST BLOCK WITH X COORDINATE >= PARM
* IF NEW X IS HIGHEST RETURNS NEXT EMPTY BLOCK
* IF NO BLOCKS WITH >= X, RETURN 0
* A0 = X VAL BEING SEARCHED FOR
* A1 = BLOCK TABLE BASE + OFFSET TO X VAL
* A14 - THRESHHOLD FOR SWITCHING FROM BINARY TO LINEAR SEARCH
* A9 = LOW # -- # GREATEST BACKGROUND BLOCK
* A10 = MID # -- (HIGH + LOW) >> 1
* A2 = HIGH # -- # OF LOWEST BACKGROUND BLOCK
BSRCH1STXB
MMTM SP,A1,A2,A8,A9,A10
CLR A9 ;* SET LOW = 0
SUB A1,A2
SRL 6,A2 ;* DIV BY SIZE OF BLOCK (64)
ADDI MAP_X,A1 ;* BLOCK TBL BASE + X OFFSET
MOVK 5,A14 ;* THRESHHOLD FOR SWITCHING FROM BINARY TO LINEAR SEARCH
BSRCH MOVE A2,A10
SUB A9,A10 ;* IF (HIGH - LOW) <= 5 FINISH WITH LINEAR SEARCH
CMP A14,A10
JRLE LSRCH
SRL 1,A10
ADD A9,A10
;* GET MID->X
MOVE A10,A8
SLL 6,A8 ;* MULTIPLY BY BLOCK SIZE (64)
ADD A1,A8
MOVE *A8,A8,W ;* GET X COOR OF THE BLOCK
CMP A0,A8
JRLT BLOW
MOVE A10,A2 ;* HIGH = MID
JRUC BSRCH
BLOW MOVE A10,A9 ;* LOW = MID
JRUC BSRCH
LSRCH
;* FINISH WITH A LINEAR SEARCH OF BLOCK TABLE FROM LOW TO HIGH
;* ENDING WITH FIRST BLOCK X COOR THAT IS >= A0
;* A0 = X VAL BEING SEARCHED FOR
;* A9 = LOW ADDRESS -- PTS TO X OFFSET OF BLOCK
;* A2 = HIGH ADDRESS -- PTS TO X OFFSET OF BLOCK
SLL 6,A9 ;LOW BLOCK # TO LOW BLOCK OFFSET
SLL 6,A2 ;HIGH BLOCK # TO HIGH BLOCK OFFSET
ADD A1,A9
ADD A1,A2
MOVI BLOCK_SIZE,A8
LSRCHLP
MOVE *A9,A10 ;X COOR
CMP A0,A10
JRGE GOTB ;IF LOW->X >= A0 GOTO FOUND
ADD A8,A9
CMP A2,A9
JRLE LSRCHLP
CLR A0 ;BLOCK NOT FOUND, RETURN 0
JRUC BSRCHDONE
GOTB
MOVE A9,A0 ;RETURN A PTR TO THE BLOCK
SUBI MAP_X,A0
BSRCHDONE
MMFM SP,A1,A2,A8,A9,A10
RETS
*********************** BAK END *******************************
;* SCAN A MODULE LIST AND RETURN THE PACKED Y:X END POINT
;PARMS
;A0 - MODULE LIST
;RETURNS
;A0 - PACKED Y:X END OF WAVE
;BAK_END:
; MMTM SP,A3,A4,A8,A9,A10,A11
;
; CLR A10 ;CLR PACKED Y:X STARTING POSITION
; CLR A11
;
;
;WEMODLP:
; MOVE *A0+,A8,L ;LOAD MODULE PTR
; CMPI >FFFFFFFF,A8
; JRZ WEMODX ;END OF THE MODULE TBL
; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE
;
; MOVE *A0+,A3,W ;X START POSITION
; ZEXT A3,W
; CMPI BLSTSTRT,A3
; JRNZ WENOTLASTSTARTX
; MOVE A11,A3
; SUBXY A9,A3
; JRUC WEGOTNEWX
;WENOTLASTSTARTX:
; CMPI BLSTEND,A3
; JRNZ WEGOTNEWX
; MOVE A11,A3
;WEGOTNEWX:
; MOVE *A0+,A4,W ;Y START POSITION
; ZEXT A4,W
; CMPI BLSTSTRT,A4
; JRNZ WENOTLASTSTARTY
; MOVE A11,A4
; SUBXY A9,A4
; JRUC WEGOTNEWY
;WENOTLASTSTARTY:
; CMPI BLSTEND,A4
; JRNZ WENOTLASTENDY
; MOVE A11,A4
; JRUC WEGOTNEWY
;WENOTLASTENDY:
; SLL 16,A4
;WEGOTNEWY:
; MOVY A4,A3
; MOVE A3,A10
;
; MOVE A10,A11
; ADDXY A9,A11 ;A11 IS MODULE Y:X END
;
; JRUC WEMODLP
;
;WEMODX:
; MOVE A11,A0
; MMFM SP,A3,A4,A8,A9,A10,A11
; RETS
***********************************************************************
*********************** BAK START *******************************
* SCAN A MODULE LIST AND RETURN THE PACKED Y:X STARTING POINT
*PARMS
*A0 - MODULE LIST
*RETURNS
*A0 - PACKED Y:X START OF WAVE
;BAK_STRT:
; MMTM SP,A3,A4,A8,A9,A11
;
; CLR A11
; MOVE *A0+,A8,L ;LOAD MODULE PTR
; CMPI >FFFFFFFF,A8
; JRZ WSMODX ;END OF THE MODULE TBL
; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE
;
; MOVE *A0+,A3,W ;X START POSITION
; ZEXT A3,W
; CMPI BLSTSTRT,A3
; JRNZ WSNOTLASTSTARTX
; MOVE A11,A3
; SUBXY A9,A3
; JRUC WSGOTNEWX
;WSNOTLASTSTARTX:
; CMPI BLSTEND,A3
; JRNZ WSGOTNEWX
; MOVE A11,A3
;WSGOTNEWX:
; MOVE *A0+,A4,W ;Y START POSITION
; ZEXT A4,W
; CMPI BLSTSTRT,A4
; JRNZ WSNOTLASTSTARTY
; MOVE A11,A4
; SUBXY A9,A4
; JRUC WSGOTNEWY
;WSNOTLASTSTARTY:
; CMPI BLSTEND,A4
; JRNZ WSNOTLASTENDY
; MOVE A11,A4
; JRUC WSGOTNEWY
;WSNOTLASTENDY:
; SLL 16,A4
;WSGOTNEWY:
; MOVY A4,A3
; MOVE A3,A0
;
;WSMODX:
; MMFM SP,A3,A4,A8,A9,A11
; RETS
***********************************************************************
**************** U P D A T E D I S P L I S T **********************
* DELETES ALL DISPLAY OBJECTS WHICH ARE NOT ON THE SCREEN
* INSURES ALL BACKGROUND BLOCKS ON SCREEN ARE ON THE DISP LIST
* CALL TO UPDATE MAIN BACKGROUND
* INPUT, WORLDTL, SCRNTL, SCRNLR, BAKLST, BAKBITS, BAKMODS
* THIS PROTECTS DISP_MOD AND DISP_DEL TOO!
BGND_UD1
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14
MMTM SP,B0
MOVE @WORLDTL,A3,1 ;GET COORS OF AREA TO BE PUT ON DISPLAY LIST
MOVE A3,A4
MOVE @SCRNTL,A0,1
ADDXY A0,A3
MOVE @SCRNLR,A0,1
ADDXY A0,A4
MOVI DISP_PAD,A0
MOVE @WAVE,A8
SUBK 24,A8 ;24=AIRPORT AIRPLANE TARMACK AREA
jreq sub0
subk 27-24,a8 ;Tarmack area in lockdown
jreq sub0
subk 40-27,a8
jrne sub1 ;!Pleasure domes?
sub0 movi DISP_PAD2,a0
sub1
SUBXY A0,A3 ;A3 - DISP_TL
ADDXY A0,A4 ;A4 - DISP_LR
MOVI BAKLST,A8 ;A8 - BAKGROUND LIST
CALLR DISP_DEL
;DETERMINE WHICH MODULE
MOVE @BAKMODS,A0,L ;A0- PTR TO THE MODULE LIST
MOVI INSBOBJ,B0 ;B0 - WHICH INSERT ROUTINE
MOVI BAKBITS,A7 ;A7 - BIT TABLE FOR BLOCK BEING ON DISP LIST
CALLR DISP_MOD
MMFM SP,B0
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14
RETS
;BGND_UD2: ;* CALL TO UPDATE SECONDARY BACKGROUND
;* INPUT, BAK2TLX, BAK2TLY, SCRNTL, SCRNLR, BAK2LST, BAK2BITS, BAK2MODS
; MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14
; MMTM SP,B0
; ;* GET COORS OF AREA TO BE PUT ON DISPLAY LIST.
; MOVE @BAK2TLX+16,A3,W
; MOVE @BAK2TLY+16,A0,W
; SLL 16,A0
; MOVY A0,A3
; MOVE A3,A4
; MOVE @SCRNTL,A0,L
; ADDXY A0,A3
; MOVE @SCRNLR,A0,L
; ADDXY A0,A4
; MOVI DISP_PAD,A0
; SUBXY A0,A3 ;A3 = DISP_TL
; ADDXY A0,A4 ;A4 = DISP_LR
; MOVI BAK2LST,A8 ;A8 - BAKGROUND LIST
; CALLR DISP_DEL
; MOVI INSB2OBJ,B0 ;B0 - WHICH INSERT ROUTINE
; MOVE @BAK2MODS,A0,L ;* A0- PTR TO THE MODULE LIST
; MOVI BAK2BITS,A7
; CALLR DISP_MOD
; MMFM SP,B0
; MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14
; RETS
***********************************************************************
*********************** D I S P M O D *******************************
;* SCAN A MODULE LIST TO FIND OUT WHICH MODULES CONTAIN BLOCKS
;* WHICH NEED TO BE CHECKED FOR ADDITION TO THE DISPLAY LIST.
; B0 - WHICH INSERT ROUTINE
; A0 - MODULE LIST
; A3 - DISP_TL
; A4 - DISP_LR
; A7 - BAKBITS ;A7 - BIT TABLE FOR BLOCK BEING ON DISP LIST
;PARMS FOR DISP_ADD
; A1 - BACKGROUND BLOCK TABLE
; A2 - END OF BACKGROUND BLOCK TABLE
; A5 - BACKGROUND HDR TABLE
; A9 - MODULE START POSITION Y:X
; A10 - PTR TO PALETTE TABLE FOR NEW BLOCK
; ;PASSED FROM ABOVE
; A3 - DISP_TL
; A4 - DISP_LR
; A6 - WHICH BAKGROUND INSERT ROUTINE PRIMARY|SECONDARY
; A7 - BIT TABLE FOR BLOCK BEING ON DISP LIST
;* CALLER IS RESPONSIBLE FOR PUSHING AND POPPING ALL A-REGISTERS
;MODLP
;SKDADD
; MOVI BAK2BITS,A7
; JRUC elp1
;
DISP_MOD
CLR A9 ;INIT Y:X STARTING POSITION
CLR A11 ;ENDING Y:X POS
MOVE A7,A6 ;A6 WILL POINT TO BAKBITS AFTER MOD
MODLP
SKDADD
;elp1
MOVE A6,A7
MOVE *A0+,A8,L ;LOAD MODULE PTR
cmpi -1,a8
JRZ MODX ;END OF THE MODULE TBL
MOVE *A8+,A10,L ;LOAD Y:X SIZE
MOVE *A0+,A14 ;X START POSITION
; ZEXT A14
; CMPI BLSTSTRT,A14
; JRNZ NOTLASTSTARTX
; MOVE A11,A14
; SUBXY A10,A14
; JRUC GOTNEWX
;NOTLASTSTARTX:
; CMPI BLSTEND,A14
; JRNZ GOTNEWX
; MOVE A11,A14
;GOTNEWX:
MOVE *A0+,A5 ;Y START POSITION
; ZEXT A5
; CMPI BLSTSTRT,A5
; JRNZ NOTLASTSTARTY
; MOVE A11,A5
; SUBXY A10,A5
; JRUC GOTNEWY
;NOTLASTSTARTY:
; CMPI BLSTEND,A5
; JRNZ NOTLASTENDY
; MOVE A11,A5
; JRUC GOTNEWY
;NOTLASTENDY
SLL 16,A5
;GOTNEWY
MOVY A5,A14
MOVE A14,A9
MOVE A9,A11
ADDXY A10,A11 ;A11 IS MODULE Y:X END
MOVE *A8+,A10 ;LOAD # OF BLOCKS
ADD A10,A6 ;A6 IS NEW BAKBITS PTR
;FOR SECRET PATH TO RIGHT!
CMPXY A9,A4
JRXLE MODX ;JUMP TO EXIT LOOP IF MOD START X > SCREEN END X
CMPXY A3,A11
JRXLT SKDADD ;SKIP IF MOD X END < TL X
JRYLT SKDADD ;SKIP IF MOD Y END < TL Y
CMPXY A9,A4
JRXLT SKDADD ;USE THIS IF MODULES AREN'T SORTED LFT TO RGT
;JUMP TO IF MOD START X > SCREEN END X
JRYLT SKDADD ;SKIP IF MOD Y START > BR Y
MOVE *A8+,A1,L ;A1-BLOCK TABLE
MOVE A10,A2
SLL 6,A2 ;EACH BLOCK IS 4 WORDS LONG
ADD A1,A2 ;A2-BLOCK TABLE END
MOVE *A8+,A5,L ;A5-HDRS
MOVE *A8+,A10,L ;A10-PAL TBL
SUBXY A9,A3
SUBXY A9,A4
CALLR DISP_ADD
ADDXY A9,A3
ADDXY A9,A4
JRUC MODLP
MODX RETS
*********************** D I S P A D D *******************************
* THIS FUNCTION ADDS ALL MODULE BLOCKS IN THE GIVEN RANGE OF MODULE
* RELATIVE COORS TO THE DISPLAY LIST.
* THE BOUNDRIES ARE INCLUDED IN THE GROUP TO ADD.
;*** PARMS:
; B0 - WHICH BAKGROUND INSERT ROUTINE PRIMARY|SECONDARY
; A5 - BACKGROUND HDR TABLE
; A7 - BIT TABLE FOR BLOCK BEING ON DISP LIST
; A9 - MODULE START POSITION Y:X
; A10 - PTR TO PALETTE TABLE FOR NEW BLOCK
; A1 - BACKGROUND BLOCK TABLE
; A2 - END OF BACKGROUND BLOCK TABLE
; A3 - DISP_TL - RELATIVE TO THE MODULE START POS
; A4 - DISP_LR - "
;*** RETURNS NOTHING
;THRASHES A1,A8,A14
DISP_ADD
MMTM SP,A0,A6,A7,A11
MOVX A3,A0 ;FIND 1st UNIVERSE BLOCK WITH X >= A9
SEXT A0
SUBI WIDEST_BLOCK,A0 ;A0=X COORDINATE OF A BLOCK
CALLR BSRCH1STXB
JRZ DADONE ;NO BLOCKS WITH GTR XCOOR
;A0 IS NOW THE ADDRESS OF A BLOCK
MOVI BLOCK_SIZE,A6
MOVE A0,A8
SUB A1,A8 ;SUBTRACT OFF START OF TABLE
SRL 6,A8 ;DIVIDE BY BLOCK SIZE (64)
ADD A7,A8 ;A8=PTR TO BIT WHICH INDICATES BLOCK ON LIST
SUBK 8,A8 ;AFTER INC A8, USE MOVB *A8 TO LOAD SIGN BIT
SUB A6,A0 ;SUBTRACT BLOCK SIZE
BSCANLP0
INC A8
ADD A6,A0 ;GET NEXT BLOCK
CMP A2,A0 ;CHECK IF THERE ARE NO MORE BGND BLOCKS
JRGE DADONE
MOVB *A8,A11 ;IF BLOCK ALREADY ON DISPLAY LIST TRY AGAIN
JRN BSCANLP0
MOVE *A0(MAP_X),A11
CMPXY A3,A11
JRXGE BSCAN1 ;JUMP IF BLOCKX >= TL X
MOVE *A0(MAP_HDR),A14 ;* LOAD MAP HEADER
SLL 20,A14 ;ONLY WANT BOTTOM 12 BITS, TOP 4 ARE PAL BITS
SRL 15,A14 ;LEAVES B9 << 5 == LONG WORD OFFSET
ADD A5,A14 ;A14 NOW PTS TO BLOCK HDR
MOVE *A14,A1 ;A1 IS NOW THE WIDTH OF THE BLOCK
ADD A11,A1
CMPXY A3,A1 ;RIGHT END OF BLOCK DOESN'T HANG ON TO SCREEN
JRXLT BSCANLP0 ;JUMP IF BLOCK X+W < TL X
MOVE *A0(MAP_Y),A1
SLL 16,A1
CMPXY A1,A4
JRYLT BSCANLP0 ;JUMP IF BLOCK Y > BR Y
MOVE *A14(MAP_H),A11
SLL 16,A11
ADD A11,A1
CMPXY A3,A1
JRYLT BSCANLP0 ;JUMP IF BLOCK Y+H < TL Y
MOVE A0,A7
CALLR ADDBLOCK ;THRASHES A1,A14
JRNC BSCANLP0
JRUC DADONE ;WAS UNABLE TO ADD BLOCK - NO BLOCKS LEFT
BSCAN1 DEC A8 ;BIT PTR FOR BLOCK ON DISP LIST
SUB A6,A0 ;SUBTRACT OFF BLOCK SIZE
BSCANLP1
INC A8
ADD A6,A0 ;GET NEXT BLOCK
CMP A2,A0 ;CHECK IF THERE ARE NO MORE BGND BLOCKS
JRGE DADONE
MOVB *A8,A11 ;IF BLOCK ALREADY ON DISPLAY LIST TRY AGAIN
JRN BSCANLP1
MOVE *A0(MAP_Y),A1
SLL 16,A1
CMPXY A1,A4
JRYLT BSCANLP1 ;JUMP IF BLOCK Y > BR Y
MOVE *A0(MAP_HDR),A14 ;* IF YCOOR+HEIGHT TO SMALL TRY AGAIN
SLL 20,A14 ;ONLY WANT BOTTOM 12 BITS, TOP 4 ARE PAL BITS
SRL 15,A14 ;LEAVES B9 << 5 == LONG WORD OFFSET
ADD A5,A14 ;B9 NOW PTS TO BLOCK HDR
MOVE *A14(MAP_H),A11
SLL 16,A11
ADD A11,A1
CMPXY A3,A1
JRYLT BSCANLP1 ;JUMP IF BLOCK Y+H < TL Y
MOVE *A0(MAP_X),A1
CMPXY A1,A4
JRXLT DADONE ;JUMP IF BLOCK X > BR X
MOVE A0,A7
CALLR ADDBLOCK
JRNC BSCANLP1
DADONE MMFM SP,A0,A6,A7,A11
RETS
***********************************************************************
* PARMS
; B0 - WHICH INS ROUTINE
; A5 - BASE OF BACKGROUND BLOCK HDR
; A7 - PTR TO BACKGROUND BLOCK
; A8 - PTR TO BIT MAP FOR BLOCK ON DISP LIST
; A9 - MODULE START POSITION Y:X
; A10 - PTR TO PALETTE TABLE FOR NEW BLOCK
;* RETURNS CARRY SET IF GETOBJ FAILS...
;* ALSO DESTROYS A1,A14 BUT THEY ARE USED AS TEMPS IN DISP_ADD
ADDBLOCK
MMTM SP,A0,A2,A3,A4
CALLA GETOBJ
JRZ ADDX
MOVB *A8,A14 ;SET BIT IN BITMAP FOR BLOCK ON LIST
ORI >80,A14
MOVB A14,*A8
MOVE A8,*A0(OPLINK),L ;SET OPLINK TO BE A PTR TO THE DISP LIST BIT
clr a1
move a1,*a0(OID)
MOVE *A7(MAP_X),A1,L ;A1 YPOS:XPOS OF BLOCK FROM MOD BASE
ADDXY A9,A1 ;ADD IN MODULE BASE POSITION
MOVE A1,*A0(OXPOS)
SRL 16,A1
MOVE A1,*A0(OYPOS)
MOVE *A7,A4 ;A4 - MAP_Z,8:MAP_FLAGS,4:MAP_PAL,4
MOVE A4,A3
ZEXT A3
SRL 8,A3
** SLL 24,A3
** SRL 8,A3
MOVE A3,*A0(OZPOS)
MOVE *A7(MAP_HDR),A1
MOVX A1,A14
SLL 16,A14
SRL 28,A14
SLL 4,A14 ;* BITS 12-15 ARE BITS 4-7 OF PAL INDEX
SLL 20,A1 ;* BITS 0-11 ARE HDR PTR;
SRL 15,A1 ;* A1-LONG WORD OFFSET INTO BLOCK HDR TBL
ADD A5,A1 ;* A1 - PTR TO OIMG HDR - INPUT TO GSAGOF
MOVE A4,A3 ;A4 - MAP_Z,8:MAP_FLAGS,4:MAP_PAL,4
SLL 28,A4 ;* LAST FOUR BITS FOR PAL
SRL 28,A4
ADD A14,A4
SLL 5,A4 ;* A4 IS LWORD PTR FROM PAL TBL
ADD A10,A4 ;* ADD IN PAL TBL
MOVE A0,A2 ;SAVE A0
MOVE *A4,A0,L ;* GET PALETTE
CALLA GETBPAL
JRNZ BSETPAL
CLR A0
BSETPAL ZEXT A0
MOVE A0,*A2(OPAL),L
MOVE A2,A0 ;RESTORE A0
MOVI >8002,A4 ;A4=Flags (>8000 DMA GO, 2)
SRL 4,A3 ;REMOVE PALETTE BITS
SLL 30,A3
JRC SKIP0 ;CARRY BIT IS THE TRANSPARENCY BIT
ADDK 1,A4
SKIP0 SRL 26,A3 ;LINE UP FLIP H,V BITS
ADD A3,A4 ;A4 - FLAGS FOR GSAGOF
MOVE A1,*A0(OIMG),L ;A1=DATA BLOCK POINTER
calla BKGSAGOF ;USES ISAG->20 FOR ISAG
; CALLA GSAGOF
*A2=RETURNED WITH NEW OSIZE
*A3=RETURNED WITH NEW SAG
*A4=RETURNED WITH NEW OFFSET:OFLAGS
MOVE A0,A1
ADDI OSIZE+>20,A1
MMTM A1,A2,A3,A4 ;STUFF OSIZE,OSAG,OFFSET,OFLAGS
MOVE *A0(OZPOS),A4
CMPI 80,A4
JRC REGA
SUBI 80,A4
SLL 5,A4
ADDI ZLIST,A4
MOVE *A4,A4,L
CALL A4
CALLA INSOBJ ;PLACE THIS OBJECT ONTO OBJLST!
CLRC
MMFM SP,A0,A2,A3,A4
RETS
REGA CALL B0 ;INSERT ONTO BAKLST
CLRC
MMFM SP,A0,A2,A3,A4
RETS
ADDX SETC ;FAILURE TO GET OBJECT
MMFM SP,A0,A2,A3,A4
RETS
*****************************************************************************
;80
ZLIST
.LONG CASH,GPOOL,AFND,ALECT,ALAY,AJP,AJET,ANEGG,MGUN,WARPX
;90
.LONG GPIT,STEEL,PITWAL,JDWN,STRTRN,JDWNL,SOON,BARL,RCTR,WALKIE
.LONG CRATE,HSTGD,HSTGC,LMINE,ADOOR,AWALL,TRUNK,UPTOP,FLAG,STAT
.LONG HSTGA,HSTGB,AFLAG2,PEOPLE,TYPARM,GENLARM,GENRARM,GENHD,PROF
.LONG PROFI,PROFM
SOON LOCKUP
RETS
MGUN
;OVERHEAD PART OF MISSILE LAUNCHER
MMTM SP,A0,A1,A8,A7,A11
CALLR VELFLG
;TYPE TRUNK, BUT COLLIDE OFF!
MOVI CLSDEAD,A4
MOVE A4,*A0(OID),W
MOVI 158,A4 ;240
MOVE A4,*A0(OZPOS),W
MOVE A0,A8
CREATE shawnpid,STRT_MISLS
MMFM SP,A0,A1,A8,A7,A11
RETS
ANEGG
CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
MMTM SP,A0,A1,A8,A7,A11
MOVE A0,A8
movi 72,a4
MOVE A4,*A0(OZPOS)
movi CLSNEUT+TYPICON+SUBSEGG,a4
MOVE A4,*A0(OID),W
CREATE shawnpid,STRT_EGG
MMFM SP,A0,A1,A8,A7,A11
RETS
AJET
CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
MMTM SP,A0,A1,A8,A7,A11
MOVE A0,A8
CREATE JETPID,STRT_AJET
MMFM SP,A0,A1,A8,A7,A11
RETS
AJP
CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
MMTM SP,A0,A1,A8,A7,A11
MOVE *A0(OSIZEY),A4
CMPI 29,A4 ;FREE MAN ICON?
JRNZ NOTMAN
MOVE A0,A8
MOVE @AFTR_WRP,A4
JRZ PS2
CREATE0 DELOBJDIE
JRUC ADI2Z
PS2
MOVI PLAYER,A4
MOVE A4,*A0(OIMG),L
MOVI CLSDEAD,A4
MOVE A4,*A0(OID),W
CREATE JEEPID,FIX_FREE
ADI2Z MMFM SP,A0,A1,A8,A7,A11
RETS
FIX_FREE
SLEEP 60
MOVI CLSNEUT|TYPICON|SUBCSH,A4
MOVE A4,*A8(OID),W
MOVI 70,A4
MOVE A4,*A8(OZPOS),W
CLR A4
MOVE A4,*A8(OPLINK),L
DIE
NOTMAN
CMPI 39,A4
JRNZ RAJP
;REALLY AN AMERICAN FLAG CHECKPOINT
MOVE A0,A8
MOVI CLSNEUT|TYPFLAG,A4
MOVE A4,*A0(OID),W
MOVI 159,A4 ;SAME AS BULLETS
MOVE A4,*A0(OZPOS),W
CREATE FLGPID,STRT_USFLG
MMFM SP,A0,A1,A8,A7,A11
RETS
RAJP
MOVE A0,A8
CREATE JEEPID,STRT_AJP
MMFM SP,A0,A1,A8,A7,A11
RETS
ALAY
CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
MMTM SP,A0,A1,A8,A7,A11
MOVE A0,A8
CREATE LAYPID,STRT_ALAY
MMFM SP,A0,A1,A8,A7,A11
RETS
AFND CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
MMTM SP,A0,A1,A8,A7,A11
MOVE A0,A8
CREATE FNDPID,STRT_FND
MMFM SP,A0,A1,A8,A7,A11
RETS
CASH
;PIECE OF CASH
MOVI CLSNEUT|TYPICON|SUBCSH,A4
MOVE A4,*A0(OID),W
MOVI 70,A4
MOVE A4,*A0(OZPOS),W
CLR A4
MOVE A4,*A0(OPLINK),L
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
MOVE *A0(OSIZEX),A4
SUBK 12,A4
JRNZ CS1
;A BOMB ICON!
MOVI DET1,A4
MOVE A4,*A0(OIMG),L
RETS
CS1
SUBK 32-12,A4
JRNZ CRET
;KEY
MOVI KEY,A4
MOVE A4,*A0(OIMG),L
CRET RETS
GPOOL
;POOL OF GREEN GOO THAT GOOB WILL GENERATE FROM
MMTM SP,A0,A1,A8,A7,A11
MOVE A0,A8
CREATE PONDPID,POND
MMFM SP,A0,A1,A8,A7,A11
CLR A4
MOVE A4,*A0(OID) ;SHAWN TO STUFF OID, ETC.
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
RETS
GPIT
;SAND BAGS
;COULD BE GUNPIT,VGUNPIT, OR GUNPIT FLIPPED, OR VGUNPIT FLIPPED
MOVE *A0(OFLAGS),A4
ORI M_PIXSCAN,A4
MOVE A4,*A0(OFLAGS)
MOVI CLSNEUT|TYPGATE|SUBLAY,A4 ;WILL BOUNCE OFF OF
MOVE A4,*A0(OID),W
MOVI 69,A4 ;STAND IS AT 70
MOVE A4,*A0(OZPOS),W
CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
MMTM SP,A0,A1,A8,A7,A11
MOVE A0,A8
CREATE0 STRT_GPIT
MMFM SP,A0,A1,A8,A7,A11
RETS
STEEL
;STEEL DOOR OVER PITS
MOVI 68,A4 ;69
MOVE A4,*A0(OZPOS),W
MOVE *A0(OFLAGS),A4
ORI M_NOCOLL,A4
MOVE A4,*A0(OFLAGS)
MOVI CLSDEAD,A4 ;WILL KILL MYSELF
MOVE A4,*A0(OID),W
CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
MMTM SP,A0,A1,A8,A7,A11
MOVE A0,A8
CREATE FUTUREPID,ANI_STEEL
MMFM SP,A0,A1,A8,A7,A11
RETS
PITWAL
;SIDES OF PIT
MOVE *A0(OFLAGS),A4
ORI M_NOCOLL,A4
MOVE A4,*A0(OFLAGS)
;TYPE TRUNK, BUT COLLIDE OFF! SO IT GETS DELETED WHEN OFF SCRN
MOVI CLSNEUT|TYPTRUNK,A4
MOVE A4,*A0(OID),W
MOVI 35,A4
MOVE A4,*A0(OZPOS),W
CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
RETS
STRTRN
;START THIS STATIONARY SOLDIER RUNNING DOWN SCREEN
MMTM SP,A0,A1,A7,A8,A9,A11
MOVI CLSENMY|TYPHULK,A4
MOVE A4,*A0(OID),W
CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
MOVI 159,A4
MOVE A4,*A0(OZPOS),W
MOVE A0,A8
CREATE HULKPID,SOLDR
MMFM SP,A0,A1,A7,A8,A9,A11
RETS
JDWN
;STRAIGHT DOWN
MMTM SP,A0,A1,A7,A8,A9,A11
CALLR JLP
CREATE HULKPID,SOLDRD
MMFM SP,A0,A1,A7,A8,A9,A11
RETS
JDWNL
;JUMP DOWN TO LEFT
MMTM SP,A0,A1,A7,A8,A9,A11
CALLR JLP
CREATE HULKPID,SOLDRDL
MMFM SP,A0,A1,A7,A8,A9,A11
RETS
JLP
MOVI CLSDEAD,A4 ;ENMY|TYPHULK,A4
MOVE A4,*A0(OID),W
CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
MOVI 300,A4 ;159
MOVE A4,*A0(OZPOS),W
MOVE A0,A8
RETS
WARPX
;START THIS WARP DISC SPINNING
MMTM SP,A0,A1,A8,A7,A11
MOVE A0,A8
MOVE @LOCK_NUM,A1
CMPI 6,A1
JRZ ADI
MOVE @AFTR_WRP,A1
JRZ ADI ;BR=COMING BACK FROM A WARP!
CREATE0 DELOBJDIE
JRUC ADI2
ADI
CREATE WARPPID,STRT_WRP
ADI2 MMFM SP,A0,A1,A8,A7,A11
CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
RETS
;T72
;;TANK APPEARS
; MMTM SP,A0,A1,A8,A7,A11
; MOVE A0,A8
; CREATE T72PID,TANKON
; MOVE A0,*A8(OPLINK),L
; MMFM SP,A0,A1,A8,A7,A11
; MOVI CLSENMY|TYPT72,A4
; MOVE A4,*A0(OID),W
; CLR A4
; MOVE A4,*A0(OXVEL),L
; MOVE A4,*A0(OYVEL),L
; MOVI 159,A4 ;SAME AS BULLETS
; MOVE A4,*A0(OZPOS),W
; RETS
WALKIE
;GI WALKIE TALKIE
CALLR VELFLG
MOVI 268,A4 ;238
MOVE A4,*A0(OZPOS),W
MOVE A0,@KPLARM,L
RETS
PROFI
;RIGHT SIDE GUN FOR GI
CALLR VELFLG
MOVI 268,A4 ;238
MOVE A4,*A0(OZPOS),W
MMTM SP,A0,A1,A7,A8,A11
MOVE A0,A8
CREATE INTROPID,ANI_EYES
MMFM SP,A0,A1,A7,A8,A11
RETS
PROFM
;GI MOUTH
CALLR VELFLG
MOVI 268,A4 ;238
MOVE A4,*A0(OZPOS),W
MMTM SP,A0,A1,A7,A8,A11
MOVE A0,A8
CREATE INTROPID,ANI_MTH
MMFM SP,A0,A1,A7,A8,A11
RETS
PROF
;PROFESSOR
;GI
CALLR VELFLG
MOVE *A0(OSIZEY),A4
CMPI 1,A4
JRNZ PF1
;LINE FOR BNN REPORTING LIVE TEXT
MOVI 269,A4 ;238
JRUC PF2
PF1 MOVI 268,A4 ;238
PF2 MOVE A4,*A0(OZPOS),W
MOVE @INTRO,A4
JRZ RTY
;GI INTRO
MOVI GIPID,A4
MOVE A4,*A0(OID)
RTY RETS
VELFLG
CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
MOVE *A0(OFLAGS),A4
ORI M_NOCOLL,A4
MOVE A4,*A0(OFLAGS)
MOVI CLSNEUT|TYPNEUT,A4
MOVE A4,*A0(OID),W
RETS
TYPARM
CALLR VELFLG
MOVI 20000-101,A4 ;07FD2H,A4
MOVE A4,*A0(OZPOS),W
MMTM SP,A0,A1,A7,A8,A11
MOVE A0,A8
CREATE INTROPID,ANI_TYP
MMFM SP,A0,A1,A7,A8,A11
RETS
GENLARM
CALLR VELFLG
MOVI 20000-101,A4 ;07FD2H,A4
MOVE A4,*A0(OZPOS),W
MOVE @TNT_TYPE,A4
CMPI 1,A4
JRNZ TAG00
MOVE *A0(OXPOS),A4
ADDI 14H,A4
MOVE A4,*A0(OXPOS)
TAG00 MMTM SP,A0,A1,A7,A8,A11
MOVE A0,A8
CREATE INTROPID,ANI_LARM
MMFM SP,A0,A1,A7,A8,A11
RETS
GENRARM
CALLR VELFLG
MOVI 20000-101,A4 ;07FD2H,A4
MOVE A4,*A0(OZPOS),W
MOVE @TNT_TYPE,A4
CMPI 1,A4
JRNZ TAG01
MOVE *A0(OXPOS),A4
ADDI 14H,A4
MOVE A4,*A0(OXPOS)
TAG01 MMTM SP,A0,A1,A7,A8,A11
MOVE A0,A8
CREATE INTROPID,ANI_RARM
MMFM SP,A0,A1,A7,A8,A11
RETS
GENHD
CALLR VELFLG
MOVI 20000-101,A4 ;07FD2H,A4
MOVE A4,*A0(OZPOS),W
MOVE @TNT_TYPE,A4
CMPI 1,A4
JRNZ TAG02
MOVE *A0(OXPOS),A4
ADDI 14H,A4
MOVE A4,*A0(OXPOS)
TAG02 MMTM SP,A0,A1,A7,A8,A11
MOVE A0,A8
CREATE INTROPID,ANI_HD
MMFM SP,A0,A1,A7,A8,A11
RETS
PEOPLE
;OVERHEAD PEOPLE TORSO TYPE STUFF
CALLR VELFLG
MOVI 20000-101,A4 ;07FD2H,A4
MOVE A4,*A0(OZPOS),W
MOVE *A0(OXPOS),A4
CMPI 032FH,A4
JRNZ PEPL
MOVE @TNT_TYPE,A4
CMPI 1,A4
JRNZ PEPL
MOVE *A0(OXPOS),A4
ADDI 14H,A4
MOVE A4,*A0(OXPOS)
PEPL RETS
HSTGA:
;TYPE HSTG!
MMTM SP,A0,A1,A8,A7,A9,A11
CLR A9 ;HOSTAGE NUMBER FOR ANI
; MOVI CLSNEUT|TYPHSTG|SUBGUYA,A4
INHSTG
MOVI CLSNEUT|TYPHSTG,A4
PUSH A0
MOVI 250,A0 ;350
CALLA RANDPER
PULL A0
JRNC OKHSTG
;KILL ME OFF!
MOVE A0,A8
CREATE0 DELOBJDIE
MMFM SP,A0,A1,A8,A7,A9,A11
RETS
OKHSTG
MOVE A4,*A0(OID),W
CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
MOVI 159,A4 ;140
MOVE A4,*A0(OZPOS),W
MOVE *A0(OYPOS),A4
SUBI 13,A4
MOVE A4,*A0(OYPOS)
MOVE *A0(OXPOS),A4
ADDI 5,A4
MOVE A4,*A0(OXPOS)
MOVE A0,A8
CREATE HSTGPID,ANI_HSTG
MMFM SP,A0,A1,A8,A7,A9,A11
RETS
HSTGB:
MMTM SP,A0,A1,A8,A7,A9,A11
MOVK 1,A9
; MOVI CLSNEUT|TYPHSTG|SUBGUYB,A4
JRUC INHSTG
HSTGC:
MMTM SP,A0,A1,A8,A7,A9,A11
MOVK 2,A9
; MOVI CLSNEUT|TYPHSTG|SUBGUYC,A4
JRUC INHSTG
HSTGD:
MMTM SP,A0,A1,A8,A7,A9,A11
MOVK 3,A9
; MOVI CLSNEUT|TYPHSTG|SUBGUYD,A4
JRUC INHSTG
LMINE:
MOVE @MINE_FLG,A4
JRNZ OKMINE
PUSH A0
MOVI 800,A0
CALLA RANDPER
PULL A0
JRC OKMINE
;KILL OFF THIS MINE 20% OF TIME!
MMTM SP,A0,A1,A7,A8,A11
MOVE A0,A8
CREATE0 DELOBJDIE
MMFM SP,A0,A1,A7,A8,A11
RETS
;FAKEIMG ;USE DELOBJDIE!!
; MOVE A8,A0
; CALLA DELOBJ
; DIE
OKMINE MOVI CLSNEUT|TYPMINE,A4
MOVE A4,*A0(OID),W
MOVI 69,A4 ;SAME AS BULLETS
MOVE A4,*A0(OZPOS),W
CLR A4
MOVE A4,*A0(OPLINK),L
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
MOVI M1,A4
MOVE A4,*A0(OIMG),L
RETS
ALECT:
MOVI CLSNEUT|TYPMINE,A4
MOVE A4,*A0(OID),W
MOVI 69,A4 ;SAME AS BULLETS
MOVE A4,*A0(OZPOS),W
CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
MOVI ELECT1,A4
MOVE A4,*A0(OIMG),L
MMTM SP,A0,A1,A7,A8,A11
MOVE A0,A8
CREATE FUTUREPID,ELECT_MINE
MMFM SP,A0,A1,A7,A8,A11
RETS
STAT:
;STATIC FOR VWSCRN
;TYPE TRUNK, BUT COLLIDE OFF!
MOVI CLSENMY|TYPGATE,A4 ;STATIC
MOVE A4,*A0(OID),W
MOVI 279,A4 ;239
MOVE A4,*A0(OZPOS),W
CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
MMTM SP,A0,A1,A7,A8,A11
MOVE A0,A8
CREATE INTROPID,ANI_STAT
MMFM SP,A0,A1,A7,A8,A11
RETS
ADOOR:
;DOOR/GATE IMAGES
;TYPE TRUNK, BUT COLLIDE OFF!
MOVI CLSENMY|TYPGATE,A4
MOVE A4,*A0(OID),W
MOVI 140,A4
MOVE A4,*A0(OZPOS),W
CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
MOVE @TARGET_NUM,A4
JRNZ RETNO
;PLACE DROP BOMB HERE MESSAGE DOWN!
MMTM SP,A0,A1,A8,A7,A11
MOVE A0,A8
MOVI DROPPID,A0
CLR A1
NOT A1
CALLA EXISTP
JRNZ RETY
CREATE DROPPID,DROPBMB
MOVI BABY,A0
CALLA ONESND
RETY MMFM SP,A0,A1,A8,A7,A11
RETNO
RETS
BABY .WORD >F9F7,>50,>814D,0 ;BABY MILK
AWALL:
;OVERHEAD IMAGES LOWER THAN MAX (VWSCRN STUFF)
MOVE *A0(OFLAGS),A4
ORI M_NOCOLL,A4
MOVE A4,*A0(OFLAGS)
;TYPE TRUNK, BUT COLLIDE OFF!
MOVI CLSNEUT|TYPTRUNK,A4
MOVE A4,*A0(OID),W
MOVI 237,A4
MOVE A4,*A0(OZPOS),W
CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
RETS
AFLAG2
MOVI 237,A4 ;FOR UNDER STATIC 238
JRUC FAG2
FLAG:
MMTM SP,A0,A1
MOVE @WAVE,A0
CMPI 1,A0
JRNZ FLB
CREATE0 SEND_1ST
FLB MMFM SP,A0,A1
MOVI 282,A4
FAG2 MOVE A4,*A0(OZPOS),W
CALLR VELFLG
MMTM SP,A0,A1,A8,A7,A11
MOVE A0,A8
movk 4,a0
MOVE A0,@ARWOFF ;BLINK ARROW X MORE TIMES THEN KILL!
CREATE FLGPID,ANI_FLAG
MMFM SP,A0,A1,A8,A7,A11
RETS
SEND_1ST:
;SEND GROUP OF HULKS UP AT PLAYER NEAR GATE
MOVK 4,A8
SEND1
SLEEP >40
MOVE @WORLDTLY,A0,L
ADDI [275,0],A0
MOVE @WORLDTLX,A9,L
SRL 16,A9
ADDI 170,A9
MOVY A0,A9
MOVK 1,A10 ;GO UP
PUSH A8
CALLA SEND_GROUP
PULL A8
DSJ A8,SEND1
DIE
BARL:
MOVI BRRL2,A4 ;CHANGE OIMG TO BE WIMP TYPE
MOVE A4,*A0(OIMG),L
MOVI CLSNEUT|TYPCRTE|SUBBRL,A4
JRUC C2
CRATE:
MOVI CRT1,A4 ;CHANGE OIMG TO BE WIMP TYPE
MOVE A4,*A0(OIMG),L
MOVI CLSNEUT|TYPCRTE|SUBCRT,A4
C2 MMTM SP,A0,A1,A8,A7,A11
MOVE A0,A8
CREATE CMAN,CRATEMAN
MOVE A0,*A8(OPLINK),L
MMFM SP,A0,A1,A8,A7,A11
MOVE A4,*A0(OID),W
CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
MOVI 159,A4 ;SAME AS BULLETS
MOVE A4,*A0(OZPOS),W
RETS
TRUNK:
;TREE TRUNKS, ITEMS TO COLLIDE WITH
CLR A4
MOVE A4,*A0(OXVEL),L
MOVE A4,*A0(OYVEL),L
MOVI CLSNEUT|TYPTRUNK,A4
MOVE A4,*A0(OID),W
MOVI 159,A4 ;SAME AS BULLETS
MOVE A4,*A0(OZPOS),W
RETS
RCTR
;98
;OR TEXT IN PLEASURE DOME
;REACTOR!
MMTM SP,A0,A1,A8,A7,A11
MOVE @WAVE,A1
CMPI 40,A1 ;PLEASURE DOME!
JRZ PDM
MOVE @GAMSTATE,A1
CMPI INAMODE,A1
JRZ PDM
MOVE A0,A8
CREATE BLOWPID,BLOW_RCTR
;OPEN SECRET PATH
CREATE DROPPID,SPATH
MMFM SP,A0,A1,A8,A7,A11
JRUC AWALL
PDM
CALLR VELFLG
;TYPE TRUNK, BUT COLLIDE OFF!
MOVI CLSNEUT|TYPTRUNK,A4
MOVE A4,*A0(OID),W
MOVI 282,A4 ;PLEASURE DOME TEXT
MOVE A4,*A0(OZPOS),W
MMFM SP,A0,A1,A8,A7,A11
RETS
UPTOP:
;OVERHEAD IMAGES
CALLR VELFLG
;TYPE TRUNK, BUT COLLIDE OFF!
MOVI CLSNEUT|TYPTRUNK,A4
MOVE A4,*A0(OID),W
MOVI 281,A4 ;240
MOVE A4,*A0(OZPOS),W
RETS
************************ D I S P D E L *****************************
* THIS FUNCTION DELETES ALL OBJS OUTSIDE THE GIVEN RANGE
* OF COORS FROM THE DISPLAY LIST.
* THE BOUNDRIES ARE NOT INCLUDED IN THE GROUP TO DELETE.
* PARMS:
* A8 - BAK LIST
* A3 - DISP_TL
* A4 - DISP_LR
* RETURNS NOTHING
*THRASHES A0,A6,A7,A8,A9 ALL OF WHICH ARE PUSHED BY CALLER
DISP_DEL
dd10 MOVE A8,A9 ;PTR TO PREV IN A9
MOVE *A9,A8,L ;PTR TO NEXT IN A8
JRZ DEL_DONE ;QUIT IF AT END OF LIST
dd20 MOVE *A8(OXPOS),A7
CMPXY A7,A4
JRXLT DEL_IT ;JUMP IF BR X < BLOCK X
MOVE *A8(OYPOS),A0
SLL 16,A0
CMPXY A0,A4
JRYLT DEL_IT ;JUMP IF BR Y < BLOCK Y
MOVE *A8(OIMG),A1,L
MOVE *A1,A6 ;A6 BLOCK WIDTH
ADD A6,A7
CMPXY A3,A7
JRXLT DEL_IT ;JUMP IF TL X > BLOCK X+W
MOVE *A1(MAP_H),A7 ;A7 BLOCK HEIGHT
SLL 16,A7
ADD A7,A0
CMPXY A3,A0
JRYGE dd10 ;JUMP IF TL Y <= BLOCK Y+H
DEL_IT
; MOVE *A8(OPAL),A0 ;DELETE THE OBJ
; JRZ NOFREEP
; CALLA FREEPAL ;FREE THE PALETTE (Need????)
NOFREEP
MOVE *A8(OPLINK),A0,L ;UNSET THE ON DISPLAY LIST BIT
MOVB *A0,A7
sll 32-7,a7
srl 32-7,a7
MOVB A7,*A0
MOVE *A8,*A9,L ;PUT NEXT LINK IN PREV OBJ
MOVE @OFREE,A0,L
MOVE A0,*A8,L
MOVE A8,@OFREE,L ;RETURN DELETED BLOCK TO FREE STACK
move *a9,a8,L ;A8=*Next obj
jrnz dd20 ;More?
DEL_DONE
RETS
ANI_STAT:
;A8=STATIC IMAGE FROM BACKGROUND UPDATER
SLEEPK 1
MOVE @DELAYALL,A0
JRNZ ANI_STAT
MOVE @TAUNTOUT,A0
JRNZ ANS
SLEEPK 1CH ;1C FOR REPORTER, 6C FOR MONSTER
MOVE @INTRO,A0
JRZ ANS
;PURPLE MONSTER AND FOR RACKUP
SLEEP 50H
ANS
MOVI STATLST,A9
jauc FRQDELDIE
STATLST .LONG STAT2
.WORD 7
.LONG STAT3
.WORD 7
.LONG STAT4
.WORD 5
.LONG STAT5
.WORD 5
.LONG STAT6
.WORD 4
.LONG 0
ANI_TYP:
;A8=TYPIST ARM IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
SLEEP 4*60
MOVE *A8(OYPOS),A0
SUBI 46H,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
SUBK 1DH,A0
MOVE A0,*A8(OXPOS)
ANI_TYP2:
MOVI TYPLST,A9
JSRP FRANIMQ
JRUC ANI_TYP2
TYPLST .LONG TARM1
.WORD 30
.LONG TARM2
.WORD 5
.LONG TARM3
.WORD 3
.LONG TARM2
.WORD 3
.LONG TARM3
.WORD 6
.LONG TARM2
.WORD 3
.LONG TARM3
.WORD 3
.LONG TARM2
.WORD 3
.LONG TARM3
.WORD 20
.LONG TARM2
.WORD 4
.LONG TARM3
.WORD 3
.LONG TARM2
.WORD 4
.LONG TARM1
.WORD 5
.LONG 0
ANI_HD:
;A8=GENERAL HEAD IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
MOVE *A8(OYPOS),A0
SUBK 4,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
ADDK 11H,A0
MOVE A0,*A8(OXPOS)
MOVE @KP_TAUNT,A0
JRZ IM0
;TAUNT, SPEEK BRIEFLY
MOVI HDLST3_T,A9
JSRP FRANIMQ
MOVK 2,A10
JRUC IMP0
;FOR IRAQ MAP
IM0 MOVI HDLST3,A9
JSRP FRANIMQ
MOVK 5,A10
IMP0 MOVI HDLST3A,A9
JSRP FRANIMQ
DSJS A10,IMP0
SLEEP 0C0H
MOVK 15,A10
IMP MOVI HDLST,A9
JSRP FRANIMQ
DSJS A10,IMP
DIE
;FOR PURPLE MONSTER
; MOVK 2,A10
;ANI_HD2:
; MOVI HDLST,A9
; JSRP FRANIMQ
; DSJS A10,ANI_HD2
; SLEEPK 20
; MOVI HDLST2,A9
; JSRP FRANIMQ
; MOVK 10,A10
; JRUC ANI_HD2
HDLST3
.LONG GH2
.WORD 5
.LONG GH1
.WORD 03EH
.LONG GH2
.WORD 5
.LONG GH3
.WORD 10
.LONG GH2
.WORD 5
.LONG GH1
.WORD 30
.LONG GH2
.WORD 5
.LONG 0
HDLST3_T ;TAUNT
.LONG GH2
.WORD 5
.LONG GH1
.WORD 5H
.LONG GH2
.WORD 5
.LONG GH3
.WORD 5
.LONG GH2
.WORD 5
.LONG GH1
.WORD 5
.LONG GH2
.WORD 5
.LONG 0
HDLST3A
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 10
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 8
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 5
.LONG 0
;HDLST2 .LONG GH3A
; .WORD 5
; .LONG GH3
; .WORD 5
; .LONG GH3A
; .WORD 5
; .LONG GH3
; .WORD 10
; .LONG GH3A
; .WORD 5
; .LONG GH3
; .WORD 5
; .LONG GH3A
; .WORD 5
; .LONG GH3
; .WORD 8
; .LONG GH3A
; .WORD 5
; .LONG GH3
; .WORD 5
; .LONG GH3A
; .WORD 5
; .LONG GH3
; .WORD 10
; .LONG GH3A
; .WORD 5
; .LONG GH3
; .WORD 5
; .LONG GH3A
; .WORD 5
; .LONG GH3
; .WORD 10
; .LONG GH3A
; .WORD 5
; .LONG GH3
; .WORD 10
; .LONG GH3A
; .WORD 5
; .LONG GH3
; .WORD 120
; .LONG 0
HDLST
.LONG GH2
.WORD 5
.LONG GH1
.WORD 30
.LONG GH2
.WORD 5
.LONG GH3
.WORD 50
.LONG GH2
.WORD 5
.LONG GH1
.WORD 0D0H
.LONG GH2
.WORD 5
.LONG GH3
.WORD 58H
.LONG 0
ANI_LARM:
;A8=GENERAL LARM IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
SLEEPK 1
MOVE @DELAYALL,A0
JRNZ ANI_LARM
MOVE *A8(OYPOS),A0
SUBI 3AH,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
ADDI 23H,A0
MOVE A0,*A8(OXPOS)
CREATE INTROPID,UPR
ANI_LARM2:
MOVI LARMLST,A9
JSRP FRANIMQ
JRUC ANI_LARM2
UPR SLEEP 120
MOVI 20000-10,A0 ;7FD3H,A0
MOVE A0,*A8(OZPOS)
DIE
LARMLST
.LONG GLARM1
.WORD 40
.LONG GLARM2
.WORD 5
.LONG GLARM3
.WORD 60
.LONG GLARM2
.WORD 5
.LONG GLARM1
.WORD 60*3
.LONG GLARM2
.WORD 5
.LONG GLARM3
.WORD 098H
.LONG GLARM2
.WORD 5
.LONG GLARM1
.WORD 108H ;60*6
.LONG GLARM2
.WORD 5
.LONG GLARM3
.WORD 60
.LONG GLARM4
.WORD 5
.LONG GLARM5
.WORD 5
.LONG GLARM6
.WORD 08FH
.LONG GLARM5
.WORD 5
.LONG GLARM4
.WORD 5
.LONG GLARM3
.WORD 30
.LONG GLARM2
.WORD 5
.LONG GLARM1
.WORD 60*3
.LONG 0
RARMLST
.LONG GRARM1
.WORD 40
.LONG GRARM2
.WORD 5
.LONG GRARM3
.WORD 60
.LONG GRARM2
.WORD 5
.LONG GRARM1
.WORD 60*3
.LONG GRARM2
.WORD 5
.LONG GRARM3
.WORD 098H
.LONG GRARM2
.WORD 5
.LONG GRARM1
.WORD 108H ;60*6
.LONG GRARM2
.WORD 5
.LONG GRARM3
.WORD 60
.LONG GRARM4
.WORD 5
.LONG GRARM5
.WORD 5
.LONG GRARM6
.WORD 08FH
.LONG GRARM5
.WORD 5
.LONG GRARM4
.WORD 5
.LONG GRARM3
.WORD 30
.LONG GRARM2
.WORD 5
.LONG GRARM1
.WORD 60*3
.LONG 0
ANI_RARM:
;A8=GENERAL RARM IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
SLEEPK 1
MOVE @DELAYALL,A0
JRNZ ANI_RARM
MOVE *A8(OYPOS),A0
SUBI 39H,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
SUBK 1EH,A0
MOVE A0,*A8(OXPOS)
ANI_RARM2:
MOVI RARMLST,A9
JSRP FRANIMQ
JRUC ANI_RARM2
ANI_MTH:
MOVE @INTRO,A0
JRZ AM2
;GI MOUTH
SLEEP 7AH
MOVI T0G,A9
AM1 MOVE *A9+,A0,W
JRZ OUY
CALLA PRCSLP
MOVE A8,A0
CALLA OBJOFF
MOVE *A9+,A0,W
CALLA PRCSLP
MOVE A8,A0
CALLA OBJON
JRUC AM1
OUY
CALLA DELOBJA8
MOVK 1,A0
MOVE A0,@ISTATE
;TRIGGER INTO MOUTH
;TURN ON SOLDIER TILT IMAGE
;DELETE SOLDIER HALVES - GIPID OID!
MOVI SOLD,A14
CALLA DO_ALL_STUFF
MOVI GIPID,A0 ;TWO SOLDIER HALVES
CLR A1
NOT A1
CALLA KILOBJ
SLEEPK 5
MOVI SOLDR3,A1
MOVE *A8(OFLAGS),A4
CALLA ANI
MOVI 087H+20,A0
MOVE A0,*A8(OXPOS)
MOVI 042H,A0
MOVE A0,*A8(OYPOS)
MOVE A8,A0
CALLA ADJSTWTL
SLEEPK 5
CREATE INTROPID,KIP
DIE
SOLD:
.LONG [09FH+20+491H,0],[038FH+5B7H,0],SOLDR1
.WORD 103H,DMAWNZ|M_NOCOLL,CLSNEUT|TYPNEUT ;109
.LONG 0,0
T0G .WORD 20,3,10,4,40,5,5,5,20,2,15,5,10,50,5,5,5,20,2,15,5,10
.WORD 2,15,5,10,0
AM2
;A8=PROF MOUTH IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
SLEEP 0C0H
MOVE *A8(OYPOS),A0
SUBI 56H,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
ADDK 0CH,A0
MOVE A0,*A8(OXPOS)
MOVI MTHLST0,A9
JSRP FRANIMQ
MOVK 8,A10 ;8
ANI_MTH2:
MOVI MTHLST,A9
JSRP FRANIMQ
DSJS A10,ANI_MTH2
SLEEPK 8
MOVI PMTH4,A1
MOVE *A8(OFLAGS),A4
CALLA ANI
DIE
MTHLST0 .LONG PMTH2
.WORD 4
.LONG PMTH1
.WORD 4
.LONG PMTH2
.WORD 4
.LONG PMTH3
.WORD 10H+28 ;30H
.LONG 0
MTHLST .LONG PMTH3
.WORD 4
.LONG PMTH2
.WORD 4
.LONG PMTH1
.WORD 5
.LONG PMTH2
.WORD 4
.LONG PMTH3
.WORD 18
.LONG PMTH2
.WORD 4
.LONG PMTH1
.WORD 11
.LONG PMTH2
.WORD 4
.LONG 0
ANI_EYES:
MOVE @INTRO,A0
JRZ AE2
SLEEP 120
;INTRO WITH GI
FT SLEEPK 1
MOVE @ISTATE,A0
JRZ FT
;ABOUT TO SLIDE INTO MOUTH
MOVE A8,A0
CALLA OBJOFF
MOVE @KPLARM,A0,L
CALLA OBJOFF
SLEEPK 5
;TURN ON A LEG AT NEW LOCATION
MOVI SOLDR4,A1
MOVE *A8(OFLAGS),A4
ORI M_FLIPH,A4
CALLA ANI
MOVE A8,A0
CALLA OBJON
MOVI 087H+23+20,A0 ;+491H,A0
MOVE A0,*A8(OXPOS)
MOVI 042H+29,A0 ;+5B7H,A0
MOVE A0,*A8(OYPOS)
MOVE A8,A0
CALLA ADJSTWTL
PUSH A8
MOVE @KPLARM,A8,L
MOVI SOLDR4,A1
MOVE *A8(OFLAGS),A4
CALLA ANI
MOVE A8,A0
CALLA OBJON
MOVI 087H-25+20,A0 ;+491H,A0
MOVE A0,*A8(OXPOS)
MOVI 042H+29,A0 ;+5B7H,A0
MOVE A0,*A8(OYPOS)
MOVE A8,A0
CALLA ADJSTWTL
CREATE INTROPID,KIP
PULL A8
CREATE INTROPID,KIP
DIE
KIP
;MOVE IT AROUND AND KPLARM AROUND
;DELETE IT
MOVK 12,A10 ;6
LP9 MOVK 10,A9
LPS MOVE A9,A0
CALLR DOXY
SLEEPK 3
DSJS A9,LPS
; CMPI 8,A10
; JRNZ LKI2
; MOVE *A8(OIMG),A0,L
; CMPI SOLDR3,A0
; JRNZ LKI
; MOVE *A8(OYPOS),A0
; SUBK 0FH,A0
; MOVE A0,*A8(OYPOS)
; CREATE INTROPID,OOUP2
;LKI2
CMPI 3,A10
JRNZ LKI
MOVE *A8(OYPOS),A0
SUBK 0FH,A0
MOVE A0,*A8(OYPOS)
CREATE INTROPID,OOUP
LKI DSJ A10,LP9
SLEEPK 10
jauc DELOBJDIE
OOUP
MOVE *A8(OIMG),A0,L
CMPI SOLDR3,A0
JRZ OP2
SLEEP 034H
MOVI 100H,A0
MOVE A0,*A8(OZPOS)
MOVE A8,A0
CALLA PULLOBJ
CALLA INSOBJ
DIE
OP2 MOVI 1200,A0
MOVE A0,*A8(OZPOS)
MOVE A8,A0
CALLA PULLOBJ
CALLA INSOBJ
SLEEPK 20
MOVK 10H,A0
MOVE A0,*A8(OZPOS)
MOVE A8,A0
CALLA PULLOBJ
CALLA INSOBJ
DIE
;fpain4 .word >f160,20,>80f9,0 ;^
;OOUP2
; MOVI fpain4,a0
; calla ONESND
; MOVI 1200,A0
; MOVE A0,*A8(OZPOS)
; MOVE A8,A0
; CALLA PULLOBJ
; CALLA INSOBJ
; SLEEPK 20
; MOVK 10H,A0
; MOVE A0,*A8(OZPOS)
; MOVE A8,A0
; CALLA PULLOBJ
; CALLA INSOBJ
; MOVE *A8(OYPOS),A0
; ADDK 0FH,A0
; MOVE A0,*A8(OYPOS)
; DIE
DOXY
SLL 3,A0
MOVI SHKX,A1
ADD A0,A1
MOVB *A1,A1
ADDI SHKY,A0
MOVB *A0,A0
MOVE *A8(OXPOS),A2,W
ADD A1,A2
MOVE A2,*A8(OXPOS),W
MOVE *A8(OYPOS),A2,W
ADD A0,A2
MOVE A2,*A8(OYPOS),W
RETS
SHKX .BYTE 0,-7,0,7,-7,0,7,-4,-4,7,0
SHKY .BYTE 0,0,7,-4,4,-7,7,-4,0,-7,4
.EVEN
AE2
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
MOVE *A8(OYPOS),A0
SUBI 30H,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
ADDI 1DH,A0
MOVE A0,*A8(OXPOS)
MOVK 2,A10
ANI_EYES2:
MOVI EYELST,A9
JSRP FRANIMQ
DSJS A10,ANI_EYES2
SLEEPK 1+20
MOVI EYELST2,A9
JSRP FRANIMQ
SLEEPK 30
CLR A11 ;0=OVER REPORTER,1=RACKUP
CREATE0 STATIC_COVER
DIE
STATSNDS
;A9=LOOPS
MOVI STATSND,A0
; MOVI STATIC1,A0
CALLA ONESND
; SLEEPK 15
; MOVI STATIC2,A0
; CALLA ONESND
; SLEEP 15
; DSJ A9,STATSNDS
DIE
STATIC1 .WORD >F5F0,>E,>811D,0 ;STATIC
STATIC2 .WORD >F4F0,>E,>811A,0 ;STATIC
STATIC_COVER
;A11=0=OVER REPORTER,1=RACKUP
;TURN ON STATIC TO COVER REPORTER
PUSH A11
CALLA STRT_S
PULL A11
MOVK 6,A10
MOVI [10,0],A1
MOVE A1,*A13(PDATA+32),L
XSLP0 MOVI [15,0],A0
MOVE A0,*A13(PDATA),L
MOVK 6,A9
XSLP
MOVE *A13(PDATA),A0,L
MOVE *A13(PDATA+32),A1,L
MOVI STAT6,A2
MOVI 279,A3
MOVI DMAWNZ,A4
MOVI CLSENMY|TYPGATE,A5 ;STATIC
CLR A6
CLR A7
CALLA BEGINOBJ
MOVE A11,A11
JRNZ XL1
PUSH A9
MOVK 2,A9
CREATE0 STATSNDS
PULL A9
CREATE INTROPID,ANI_S2 ;INTROPID,ANI_S2
JRUC XL2
XL1
PUSH A9
MOVK 1,A9
CREATE0 STATSNDS
PULL A9
CREATE INTROPID,ANI_S3 ;INTROPID,ANI_S3 ;FOR RACKUP
XL2 MOVE *A13(PDATA),A0,L
ADDI [03CH,0],A0
MOVE A0,*A13(PDATA),L
DSJ A9,XSLP
MOVE *A13(PDATA+32),A0,L
ADDI [31,0],A0
MOVE A0,*A13(PDATA+32),L
DSJ A10,XSLP0
DIE
ANI_S2
;A8=STATIC IMAGE FROM BACKGROUND UPDATER
MOVI STATLST2,A9
JSRP FRANIMQ
;REPORTER HAS SCROLLED OFF SCREEN TO LEFT
SLEEP 0190H
jauc DELOBJDIE
ANI_S3
;A8=STATIC IMAGE FROM BACKGROUND UPDATER
MOVI STATLST3,A9
jauc FRQDELDIE
STATLST2
.LONG STAT6
.WORD 2
.LONG STAT5
.WORD 4
.LONG STAT4
.WORD 4
.LONG STAT3
.WORD 4
.LONG STAT2
.WORD 4
.LONG STAT1
.WORD 5
.LONG 0
STATLST3
.LONG STAT6
.WORD 2
.LONG STAT5
.WORD 4
.LONG STAT4
.WORD 4
.LONG STAT3
.WORD 4
.LONG STAT2
.WORD 4
.LONG STAT1
.WORD 20
.LONG STAT2
.WORD 4
.LONG STAT3
.WORD 4
.LONG STAT4
.WORD 4
.LONG STAT5
.WORD 4
.LONG 0
EYELST2
.LONG PEYE4
.WORD 02CH+50
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 3
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 3
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 3
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 3
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 3
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 3
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 3
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 3
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 3
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 10
.LONG 0
EYELST
.LONG PEYE1
.WORD 5
.LONG PEYE2
.WORD 5
.LONG PEYE3
.WORD 9
.LONG PEYE2
.WORD 5
.LONG PEYE1
.WORD 1*60
.LONG PEYE2
.WORD 4
.LONG PEYE3
.WORD 4
.LONG PEYE2
.WORD 4
.LONG PEYE1
.WORD 30
.LONG PEYE2
.WORD 4
.LONG PEYE3
.WORD 4
.LONG PEYE2
.WORD 4
.LONG PEYE1
.WORD 2*60-50
.LONG PEYE2
.WORD 5
.LONG PEYE3
.WORD 20
.LONG PEYE2
.WORD 5
.LONG PEYE1
.WORD 1*60
.LONG 0
STRT_USFLG:
;A8=FLAG IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
MOVI 50,A10
ANIF1 MOVI FLGLST,A9
JSRP FRANIMQ
DSJ A10,ANIF1
MOVK 8,A10
CALLA SCRTST
JRZ ANIF1
CALLA DELOBJA8
DIE
FLGLST .LONG FLG1
.WORD 5
.LONG FLG2
.WORD 5
.LONG FLG3
.WORD 5
.LONG FLG4
.WORD 5
.LONG FLG5
.WORD 5
.LONG 0
.END