6231 lines
151 KiB
NASM
6231 lines
151 KiB
NASM
.MLIB "GXMACS.LIB"
|
||
.FILE "GXNONBOY.ASM"
|
||
.TITLE "<<< GENERATION X -- NONBOY ROUTINES >>>"
|
||
.WIDTH 132
|
||
.OPTION B,D,L,T
|
||
.MNOLIST
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPYRIGHT (C) 1992 MIDWAY MANUFACTURING COMPANY. *
|
||
* ALL RIGHTS RESERVED. *
|
||
* *
|
||
**************************************************************************
|
||
|
||
* GET THE SYSTEM STUFF
|
||
; .INCLUDE "GX.INC"
|
||
.INCLUDE "GXENEMY.INC"
|
||
.INCLUDE "GXGLO.H"
|
||
.INCLUDE "IMGTBL.GLO"
|
||
.INCLUDE "GXCONTRL.H"
|
||
.INCLUDE "GXNONBOY.TBL"
|
||
.INCLUDE "GXNONBOY.H"
|
||
|
||
.BSS BIG_LIST,16*3 ;BIGBOY PICK LIST
|
||
.BSS BIGBOYS,16 ;BIG NONBOY COUNT
|
||
.BSS NONBOY_SHOOT_CHANCE,16 ;CHANCE OF NONBOY SHOOTIN'
|
||
.BSS YOGI,16 ;ALIGNMENT
|
||
|
||
* SYMBOLS IN HERE
|
||
.DEF N_CHUNK,NONBOY_SBOMB
|
||
.DEF NONBOY_HEADON_SHOOT_ANIM
|
||
.DEF AU_CREATE_HEADOUTBOY
|
||
.DEF NONBOY_ROCKET_COLL,OUTCLUB_GUNVECT,OUTCLUB_CVECT
|
||
.DEF FALLING_DEATH_ANIM, WINBOY_DEATH_ANIM
|
||
.DEF CREATE_JUMPON_NONBOY
|
||
.DEF P_NONBOYO,P_NONBOYR
|
||
.DEF BIGBOY_WATCH_PROC, NONBOY_SHOOT_CHANCE, BIGBOYS
|
||
; .DEF A_TOGGLE_DIR
|
||
.DEF SND_BODY_THUD
|
||
.def BUSPOP_DEATH,BUSPOP_INIT,NONTHR_CVECT
|
||
.def NONTHR_DEATH,NONBOY_GUNVECT,A_ALL_FIRE_FNC
|
||
.DEF CREATE_SIDERUN_NONBOYF
|
||
|
||
|
||
* SYMBOLS FROM ?
|
||
.REF A_CLR_OZVEL,EGUN_FLASH_MULTI,CK_PLAYER_HIT
|
||
.REF ENEMY_QUOTA,DOWN_THE_HATCH,A_OZVAL_DELTA
|
||
.ref CURPLYR_ADJ,MAX_ALLOWED,A_CAN_I_POPUP
|
||
|
||
* SYMBOLS FROM GXLA1.ASM
|
||
.REF BREAK_WINDOW
|
||
|
||
* SYMBOLS FROM GXRAM.ASM
|
||
.REF ENEMY_HITALL, HOLD_ENEMY_DISPATCH, BASE_HIT
|
||
|
||
* SYMBOLS FROM GXUNIV.ASM
|
||
.REF GET_TOPY_OFFSCRN
|
||
|
||
* SYMBOLS FROM GXD.ASM
|
||
.REF OBJ_CONST_MULTI, OBJ_ON_WNZ_MULTI, WORLD_GRNDOFF
|
||
|
||
* SYMBOLS FROM GXBUG.ASM
|
||
.REF SET_OCONST, SORT_OBJ
|
||
|
||
* SYMBOLS FROM GXENEMY.ASM
|
||
.REF EF1AST08, EFLASH_ANIM, GUN_FLASH_MULTI
|
||
|
||
***** from GXBLOOD.ASM
|
||
.REF BLOODY_BULLET_HIT_OFFSET, A_BLOOD_SPLORCH, A_SBOMB_BLOOD
|
||
.REF BIGBOY_ROCKET_BLOOD
|
||
|
||
.TEXT
|
||
|
||
SND_NONBOY_FIRE
|
||
.WORD 0E303H,10,0A10BH,0 ;NONBOY fire at close Z
|
||
|
||
GRUNT_HIT_TBL
|
||
.LONG SND_NB_HIT1,SND_NB_HIT2
|
||
.LONG SND_NB_HIT3,SND_NB_HIT4
|
||
.LONG SND_NB_HIT5,SND_NB_HIT6
|
||
|
||
;THIS IS NOW IN GXEQU.H ---> NUM_GRUNT_SNDS .EQU 6
|
||
|
||
SND_NB_HIT1
|
||
.WORD 0F220H,33,0A201H,0 ;NON-BOY takes a hit #1
|
||
SND_NB_HIT2
|
||
.WORD 0F220H,16,0A204H,0 ;NON-BOY takes a hit #2
|
||
SND_NB_HIT3
|
||
.WORD 0F220H,32,0A211H,0 ;NON-BOY takes a hit #3
|
||
SND_NB_HIT4
|
||
.WORD 0F220H,17,0A217H,0 ;NON-BOY takes a hit #4
|
||
SND_NB_HIT5
|
||
.WORD 0F220H,24,0A226H,0 ;NON-BOY takes a hit #5
|
||
SND_NB_HIT6
|
||
.WORD 0F220H,16,0A229H,0 ;NON-BOY takes a hit #6
|
||
|
||
SND_BODY_THUD
|
||
.WORD 0F120H,26,0A1CFH,0 ;NON-BOY Thud for getting shot
|
||
|
||
SND_NB_LONG_FALL
|
||
.WORD 0E320H,60,0A21BH,0 ;NONBOY Falling from upon high
|
||
|
||
SHORT_FALL_TBL
|
||
.LONG SND_NB_SFALL1,SND_NB_SFALL2
|
||
.LONG SND_NB_SFALL3,SND_NB_SFALL4
|
||
.LONG SND_NB_SFALL5
|
||
|
||
NUM_SFALL_SNDS .EQU 5
|
||
|
||
SND_NB_SFALL1
|
||
.WORD 0E220H,51,0A21DH,0 ;NON-BOY Short fall #1
|
||
SND_NB_SFALL2
|
||
.WORD 0E220H,77,0A220H,0 ;NON-BOY Short fall #2
|
||
SND_NB_SFALL3
|
||
.WORD 0E220H,62,0A223H,0 ;NON-BOY Short fall #3
|
||
SND_NB_SFALL4
|
||
.WORD 0E220H,25,0A22CH,0 ;NON-BOY Short fall #4
|
||
SND_NB_SFALL5
|
||
.WORD 0E220H,27,0A22FH,0 ;NON-BOY Short fall #5
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BIGBOY_WATCH_PROC - CREATE BIG POPUP NONBOYS WHEN BIGBOYS VAR IS NOT 0 *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BIGBOY_Z EQU ZMAX_KLUDGE+0100H
|
||
|
||
BIG_POS_TABLE
|
||
.LONG BIGBOY_Z*(SCRWIDTH*1/6-HALFX),BIGBOY_Z*(SCRWIDTH*3/6-HALFX)
|
||
.LONG BIGBOY_Z*(SCRWIDTH*5/6-HALFX)
|
||
|
||
BIGBOY_WATCH_PROC
|
||
CLR A9 ;CLEAR BIGBOY POSITION FLAGS
|
||
MOVE A9,@BIGBOYS,W ;CLEAR BIGBOY COUNT
|
||
BWP_LUPE
|
||
MOVK 10,A1
|
||
MOVI 60,A0
|
||
CALLA RANGERND
|
||
CALLA PRCSLP ;RANDOM SLEEP
|
||
|
||
MOVE @BIGBOYS,A10,W
|
||
JRZ BWP_CHECK_QUOTA ;BR=NONE READY
|
||
|
||
MOVE @HOLD_ENEMY_DISPATCH,A14,W
|
||
JRNZ BWP_CHECK_QUOTA ;BR=HOLD ON THERE
|
||
|
||
CMPK 0111B,A9
|
||
JREQ BWP_CHECK_QUOTA ;BR=ALL POSITIONS FILLED
|
||
|
||
MOVI BIGBOY_INIT,B0 ;ALLOCATE OBJECT
|
||
CALLA CREATE_ENEMY
|
||
JRZ BWP_CHECK_QUOTA ;BR=CAN'T DO IT
|
||
|
||
MOVE A13,*A8(OPLINK),L
|
||
|
||
CLR A0
|
||
MOVK 3,A1
|
||
MOVI BIG_LIST,A2
|
||
BWP_MAKE_LIST
|
||
DEC A1
|
||
JRN BWP_PICK ;BR=DONE PICKIN'
|
||
BTST A1,A9
|
||
JRNZ BWP_MAKE_LIST ;BR=NOT OPEN
|
||
INC A0 ;COUNT ENTRY
|
||
MOVE A1,*A2+,W ;ENTER IN LIST
|
||
JRUC BWP_MAKE_LIST
|
||
BWP_PICK
|
||
CALLA RAND0 ;PICK INDEX
|
||
SLL 4,A0 ;TRANSLATE TO OFFSET
|
||
ADDI BIG_LIST,A0
|
||
MOVE *A0,A0,W ;GET POSITION FROM LIST
|
||
MOVK 1,A14
|
||
SLL A0,A14
|
||
OR A14,A9 ;FLAG POSITION PICKED
|
||
MOVE A14,*A8(OBIGPOS),W ;POSITION PICKED
|
||
|
||
SLL 5,A0 ;TRANSLATE TO OFFSET
|
||
ADDI BIG_POS_TABLE,A0
|
||
MOVE *A0,A1,L ;GET WORLD X POSITION
|
||
|
||
MOVE @XBASE,A14,L
|
||
ADD A14,A1
|
||
|
||
MOVI BIGBOY_Z,A3
|
||
MOVI 256+150,A5
|
||
STOWY A3,A5
|
||
MOVE A5,A2
|
||
MOVE A2,*A8(OBIGYOFF),L ;OFF SCREEN WORLD Y
|
||
|
||
MOVI 256,A7
|
||
STOWY A3,A7
|
||
MOVE A7,*A8(OBIGYON),L ;ON SCREEN WORLD Y
|
||
|
||
SUB A5,A7
|
||
MOVK 15,A14
|
||
DIVS A14,A7
|
||
MOVE A7,*A8(OYVEL),L
|
||
MOVE A7,*A8(OBIGYVEL),L ;UPWARD Y VELOCITY
|
||
|
||
MOVE @YBASE,A14,L
|
||
SUB A14,A2
|
||
|
||
MOVE @ZBASE,A14,L
|
||
ADD A14,A3
|
||
|
||
CALLA SET_ANIPU ;SET POSITION
|
||
|
||
MOVE @RAND,A0,W ;LEFTY OR RIGHTY?
|
||
ANDI M_FLIPH,A0
|
||
CALLA SET_FLPS
|
||
|
||
MOVI 0404H,A4 ;SET FLASH COLOR
|
||
CALLA SET_OCONST
|
||
|
||
MOVI BIGBOY_POPUP_ANIM,A1 ;POP UP ANIMATION
|
||
CALLA STRT_ANIM
|
||
|
||
CALLA INSERT_ENEMY
|
||
|
||
DEC A10
|
||
MOVE A10,@BIGBOYS,W
|
||
BWP_CHECK_QUOTA
|
||
MOVE @ENEMY_QUOTA,A14,W
|
||
JRZ BWP_LUPE ;BR=NO QUOTA YET
|
||
BWP_BIGBOY_WAIT
|
||
SLEEP 1
|
||
MOVE A9,A9
|
||
JRNZ BWP_BIGBOY_WAIT ;BR=SOME BIGBOYS STILL ACTIVE
|
||
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BIGBOY VECTORS *
|
||
* *
|
||
* PASS: *
|
||
* A0 = PTR TO ROCKET OBJECT (ONLY FOR COLLISION VECTORS) *
|
||
* A2 = PTR TO PLAYER (ONLY FOR GUN VECTOR) *
|
||
* A8 = PTR TO OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BIGBOY_CVECT
|
||
WWL OID_PROCKET,~MASK_PLAYER,NONBOY_ROCKET_COLL
|
||
WWL OID_PEXPLOSION,~MASK_PLAYER,BIGBOY_EXPLOSION_COLLVECT
|
||
WWL OID_BLOWUP,0FFFFH,BIGBOY_SBOMB_COLLVECT
|
||
WL 0,DUMCRETS
|
||
|
||
BIGBOY_SBOMB_COLLVECT
|
||
; CLR A2 ;LET SBOMB AWARD POINTS
|
||
CALLA GET_HEAD_PART
|
||
MOVE *A8(OFLAGS),A9,W ;IS THIS OBJECT DEAD?
|
||
BTST B_DEAD,A9
|
||
JRNZ BBV_DONE ;BR = YES
|
||
MOVE A2,*A8(OPLAYER),L
|
||
JRUC BIGBOY_SBOMB
|
||
BIGBOY_EXPLOSION_COLLVECT
|
||
CALLA GET_HEAD_PART
|
||
|
||
MOVE *A8(ONATEROCKET),A14,L
|
||
JRZ BBV_DONE ;BR=NO ROCKET COLLISION
|
||
CMP A0,A14
|
||
JRNE BBV_DONE ;BR=DIFFERENT EXPLOSION
|
||
|
||
MOVE *A8(OFLAGS),A9,W ;IS THIS OBJECT DEAD?
|
||
BTST B_DEAD,A9
|
||
JRNZ BBV_DONE ;BR = YES
|
||
|
||
MOVE *A8(OYVEL),A14,L
|
||
JRN BBV_DONE ;BR=GOIN' UP
|
||
|
||
MOVE A0,A5
|
||
|
||
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
|
||
CALLA POID_TO_PDATA ;GET PDATA IN A2
|
||
|
||
MOVE A2,*A8(OPLAYER),L
|
||
|
||
SWAP A5,A8
|
||
CALLA GET_HEAD_PART
|
||
CALLA OBJ_OFF_MULTI
|
||
SWAP A5,A8
|
||
BIGBOY_SBOMB
|
||
CLR A1
|
||
CALLA FINDPART ;FIND GUN FLASH
|
||
JRZ BBV_ROCKET_BLOOD ;BR=NO GUN FLASH
|
||
CALLA PULLPART ;PULL FROM MULTIPARTER
|
||
CALLA DELOBJ ;DELETE GUN FLASH
|
||
BBV_ROCKET_BLOOD
|
||
MOVI BIGBOY_DEATH_ANIM,A1 ;TIME TO DIE
|
||
CALLA STRT_ANIM
|
||
|
||
MOVK 6,A14
|
||
MOVB A14,*A8(AnimSLP) ;HOLD TIME
|
||
|
||
CALLA OBJ_CONST_MULTI ;FLASH WHITE
|
||
|
||
MOVE A2,A3
|
||
MOVI BIGBOY_GUNVECT,A1
|
||
MOVI DUMCOLL,A2 ;TURN COLLISIONS OFF
|
||
CALLA SET_VECTORS
|
||
MOVE A3,A2
|
||
|
||
CALLA BIGBOY_ROCKET_BLOOD
|
||
|
||
JRUC BIGBOY_GO
|
||
BIGBOY_GUNVECT
|
||
SOUND1 SND_BODY_THUD
|
||
|
||
CALLA GET_HEAD_PART
|
||
MOVE *A8(OFLAGS),A9,W ;IS THIS OBJECT DEAD?
|
||
BTST B_DEAD,A9
|
||
JANZ BLOODY_BULLET_HIT_OFFSET ;BR=YES, JUST MAKE BLOOD
|
||
|
||
CLR A1
|
||
CALLA FINDPART ;FIND GUN FLASH
|
||
JRZ BG_BLOOD ;BR=NO GUN FLASH
|
||
CALLA PULLPART ;PULL FROM MULTIPARTER
|
||
CALLA DELOBJ ;DELETE GUN FLASH
|
||
BG_BLOOD
|
||
MOVE A2,*A8(OPLAYER),L
|
||
|
||
MOVI 1000,A1
|
||
CALLA SCORE
|
||
|
||
MOVI BIGBOY_DEATH_ANIM,A1 ;TIME TO DIE
|
||
CALLA STRT_ANIM
|
||
|
||
MOVK 3,A14
|
||
MOVB A14,*A8(AnimSLP) ;HOLD TIME
|
||
|
||
CALLA OBJ_CONST_MULTI ;FLASH WHITE
|
||
|
||
MOVE A2,A3
|
||
MOVI BIGBOY_GUNVECT,A1
|
||
MOVI DUMCOLL,A2 ;TURN COLLISIONS OFF
|
||
CALLA SET_VECTORS
|
||
MOVE A3,A2
|
||
|
||
CALLA BLOODY_BULLET_HIT_OFFSET
|
||
BIGBOY_GO
|
||
ORI M_DEAD,A9 ;MAKE DEAD
|
||
MOVE A9,*A8(OFLAGS),W
|
||
|
||
SOUND1 SND_BODY_THUD
|
||
MOVK NUM_GRUNT_SNDS,A0 ;GRUNT LIKE A PIG!
|
||
CALLA RAND0
|
||
SLL 5,A0
|
||
ADDI GRUNT_HIT_TBL,A0
|
||
MOVE *A0,A0,L
|
||
CALLA ONESND
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OYVEL),L ;STOP Y MOTION
|
||
|
||
MOVE *A8(OBIGYVEL),A14,L
|
||
SRA 1,A14
|
||
MOVE A14,*A8(OBIGYVEL),L ;SLOW DOWN DOWNWARD Y VELOCITY
|
||
|
||
MOVI BIGBOY_Z,A3
|
||
MOVI 256+198,A5
|
||
STOWY A3,A5
|
||
MOVE A5,*A8(OBIGYOFF),L ;DEATH OFF SCREEN WORLD Y
|
||
BBV_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_BIGUP - CHECK IF BIGBOY DONE COMIN' ON SCREEN *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_CHECK_BIGUP
|
||
MOVE *A8(OYVAL),A0,L ;CURRENT Y
|
||
MOVE *A8(OBIGYON),A1,L ;ON SCREEN Y DESTINATION
|
||
MOVE @YBASE,A14,L
|
||
ADD A14,A1 ;TRANSLATE TO UNIVERSE
|
||
CMP A1,A0
|
||
JRGT ACBU_DONE ;BR=NOT UP YET
|
||
CLR A14
|
||
MOVE A14,*A8(OYVEL),L ;STOP Y MOTION
|
||
CALLA SET_ANIPYU ;SET Y POSITION TO DESTINATION
|
||
|
||
MOVI BIGBOY_GUNVECT,A1 ;ENABLE VECTORS
|
||
MOVI BIGBOY_CVECT,A2
|
||
CALLA SET_VECTORS
|
||
|
||
MOVI 30,A14 ;INITIAL SLEEP BEFORE ATTACK
|
||
MOVB A14,*A8(AnimSlp)
|
||
MOVI BIGBOY_FIRE_ANIM,A1 ;SHOOTIN' ANIMATION
|
||
MOVE A1,*A8(AnimFrm),L
|
||
MOVE A1,*A8(AnimScr),L
|
||
ACBU_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_BIGBOY_POPDOWN - START BIGBOY GOIN' OFF SCREEN *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_BIGBOY_POPDOWN
|
||
MOVE *A8(OBIGYVEL),A14,L ;SET DOWNWARD Y MOTION
|
||
NEG A14 ;OPPOSITE DIRECTION
|
||
SLL 1,A14 ;FASTER BY TIMES 2
|
||
MOVE A14,*A8(OYVEL),L
|
||
|
||
MOVI BIGBOY_POPDOWN_ANIM,A1 ;GOIN' DOWN ANIMATION
|
||
MOVE A1,*A8(AnimFrm),L
|
||
MOVE A1,*A8(AnimScr),L
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_BIGDOWN - CHECK IF BIGBOY DONE GOIN' OFF SCREEN *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_CHECK_BIGDOWN
|
||
MOVE *A8(OYVAL),A0,L ;CURRENT Y
|
||
MOVE *A8(OBIGYOFF),A1,L ;OFF SCREEN Y DESTINATION
|
||
MOVE @YBASE,A14,L
|
||
ADD A14,A1 ;TRANSLATE TO UNIVERSE
|
||
CMP A1,A0
|
||
JRLT ACBD_DONE ;BR=NOT DOWN YET
|
||
|
||
MOVE *A8(OPLINK),A0,L ;GET STARTING PROCESS
|
||
MOVE *A8(OBIGPOS),A14,W ;GET POSITION FLAG
|
||
MOVE *A0(PA9),A9,W ;GET CURRENT POSITION FLAGS
|
||
ANDN A14,A9 ;TURN OFF POSITION
|
||
MOVE A9,*A0(PA9),W ;SET POSITION FLAGS
|
||
CLR A14
|
||
MOVE A14,*A8(OPLINK),L ;CLEAR STARTING PROCESS
|
||
MOVE *A8(OPLAYER),A14,L
|
||
JAZ DEL_ENEMY_NOAUD ;BR=NOT KILLED BY PLAYER
|
||
JAUC DELETE_ENEMY
|
||
ACBD_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_BIGPART_FIRE_FNC - ANIM FUNC, FOR BIGBOY ENEMY GUN PART FIRE. *
|
||
* *
|
||
* PASS: *
|
||
* A8 = PTR TO ARM PART DOING THE FIRING. *
|
||
* *
|
||
**************************************************************************
|
||
A_BIGPART_FIRE_FNC
|
||
MOVE *A8(OFLAGS),A14,W ;IS THIS OBJECT DEAD?
|
||
BTST B_DEAD,A14
|
||
JRNZ BPFF_X ;BR = YES
|
||
|
||
MOVI [(-72*BIGBOY_Z/08000H),(-42*BIGBOY_Z/08000H)],A3 ;FIRING OFFSET
|
||
MOVI BIGFLASH_INIT,B0
|
||
CALLA GUN_FLASH_MULTI ;MAKE A GUN FLASH
|
||
|
||
MOVE @BASE_HIT,A5,W
|
||
ADDI 800H,A5
|
||
SLL 4,A5
|
||
; MOVI [2,0],A5
|
||
|
||
CLR A1
|
||
CALLA CK_PLAYER_HIT
|
||
JRC BPFF_X ;He did'nt hit because he was not visible
|
||
SOUNDZ SND_NONBOY_FIRE
|
||
BPFF_X
|
||
RETS
|
||
|
||
BIGFLASH_INIT
|
||
.LONG EF1AST08
|
||
.WORD DMAWNZ,M_DEAD|M_NOPARTANI|M_OPARTSXY|M_MANSCALE|M_NOSCALE
|
||
.WORD OM_ANIM|OM_CFUNC
|
||
.LONG EFLASH_ANIM
|
||
.LONG C_SET_BIGFLASH_SCALE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* C_SET_BIGFLASH_SCALE - SET SCALE FOR BIGFLASH *
|
||
* *
|
||
* PASS: *
|
||
* A0 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
C_SET_BIGFLASH_SCALE
|
||
MOVI 0800080H,A14
|
||
MOVE A14,*A0(ONuManScl),L
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BIGBOY STUFF *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BIGBOY_INIT
|
||
.byte 4, 0, 0, 1 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long GASBOY ;IMGPAL
|
||
.word OID_NONBOY, OM_COLL ;OID, GLOBAL_OPTIONS
|
||
.LONG BIGBOY_CVECT
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF
|
||
* .word OPTIONS
|
||
LWWWW G_HCUSHTA1, DMAWNZ, M_NOSCALE|M_NOPIXSCAN, 0, OM_GUNV
|
||
.LONG DUMRETS
|
||
LWWWW G_TCUSHTA1, DMAWNZ, M_NOSCALE|M_NOPIXSCAN, 1, OM_PRVGUNV
|
||
LWWWW G_ACUSHTA1, DMAWNZ, M_NOSCALE|M_NOPIXSCAN, 0, OM_PRVGUNV
|
||
LWWWW G_ZCUSHTA1, DMAWNZ, M_NOSCALE|M_NOPIXSCAN, 0, OM_PRVGUNV
|
||
|
||
BIGBOY_POPUP_ANIM
|
||
LWL 1,1|AFunc,A_CHECK_BIGUP
|
||
.long 0
|
||
|
||
BIGBOY_FIRE_ANIM
|
||
LWL G_HCUSHTA2,1|AMulti|AFunc,A_BIGPART_FIRE_FNC
|
||
LW G_TCUSHTA2,1|AMulti
|
||
LW G_ACUSHTA2,1|AMulti
|
||
LW G_ZCUSHTA2,5
|
||
LW G_HCUSHTA1,1|AMulti
|
||
LW G_TCUSHTA1,1|AMulti
|
||
LW G_ACUSHTA1,1|AMulti
|
||
LW G_ZCUSHTA1,6
|
||
LWLLW 1,1|AFunc,A_GOTO+3,BIGBOY_FIRE_ANIM,768
|
||
LWL 1,1|AFunc,A_BIGBOY_POPDOWN
|
||
|
||
BIGBOY_POPDOWN_ANIM
|
||
LWL 1,1|AFunc,A_CHECK_BIGDOWN
|
||
.long 0
|
||
|
||
BIGBOY_DEATH_ANIM
|
||
LW G_HCUDEDA4,3|AMulti
|
||
LW G_TCUDEDA4,1|AMulti
|
||
LW G_ACUDEDA4,1|AMulti
|
||
LW G_ZCUDEDA4,1
|
||
LWL 1,0|AFunc,OBJ_ON_WNZ_MULTI
|
||
LWL 1,1|AFunc,A_BIGBOY_POPDOWN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CREATE_JUMPON_NONBOY - JUMP ON SCREEN FROM BEHIND THE PLAYERS *
|
||
* IF X VELOCITIES SUPPLIED, THEN X POSITIONS ARE OFF SCREEN *
|
||
* *
|
||
* PASS: *
|
||
* A8 = [MAXIMUM OXVEL >> 16, MINIMUM OXVEL >> 16] FROM THE LEFT *
|
||
* A9 = [MAXIMUM X WORLD >> 12,MINIMUM X WORLD >> 12] *
|
||
* A10 = [MAXIMUM INITIAL OYVEL >> 16, MINIMUM INITIAL OYVEL >> 16] *
|
||
* A11 = [MAXIMUM OZVEL, MINIMUM OZVEL] *
|
||
* *
|
||
**************************************************************************
|
||
|
||
LAND_CVECT
|
||
WWL OID_PROCKET,~MASK_PLAYER,NONBOY_ROCKET_COLL
|
||
WWL OID_PEXPLOSION,~MASK_PLAYER,NONBOY_EXPLOSION_COLL
|
||
; WWL OID_BLOWUP,0FFFFH,NONBOY_SBOMB_COLLVECT
|
||
WWL OID_BLOWUP,0FFFFH,NONBOY_SBOMB_CARNAGE
|
||
WWL OID_GRND,0FFFFH,LAND_GRND_COLLVECT
|
||
WL 0,DUMCRETS
|
||
|
||
LAND_GRND_COLLVECT
|
||
CLR A14
|
||
MOVE A14,*A8(OXVEL),L ;STOP IT!
|
||
MOVE A14,*A8(OYVEL),L
|
||
MOVE A14,*A8(OZVEL),L
|
||
MOVE A14,*A8(OYACCEL),W
|
||
MOVE *A8(OFLAGS),A14,W
|
||
ANDNI M_GCOLL,A14 ;TURN OFF COLLISION CHECK
|
||
MOVE A14,*A8(OFLAGS),W
|
||
|
||
MOVI NONBOY_GUNVECT,A14
|
||
MOVE A14,*A8(OGUNVECT),L
|
||
MOVI NONBOY_CVECT,A14
|
||
MOVE A14,*A8(OCVECT),L
|
||
|
||
JAUC SET_ONGRND
|
||
|
||
CREATE_JUMPON_NONBOY
|
||
MOVE @ENEMY_QUOTA,A14,W
|
||
JANZ SUCIDE ;BR=REACHED QUOTA
|
||
|
||
MOVI OID_NONBOY,A0
|
||
CALLA GET_ENEMY_COUNT
|
||
CMPK 10,A0
|
||
JAHS SUCIDE
|
||
|
||
MOVE A8,A5
|
||
MOVI NONBOY_DROP_INIT,B0 ;ALLOCATE OBJECT
|
||
CALLA CREATE_ENEMY
|
||
JRZ CJN_ABORT ;BR = ABORT! ABORT!
|
||
|
||
; MOVI DUMRETS,A14
|
||
; MOVE A14,*A8(OGUNVECT),L
|
||
; MOVI JUMPON_CVECT,A14
|
||
; MOVE A14,*A8(OCVECT),L
|
||
|
||
MOVE A8,A0
|
||
MOVI NONBOY_DROP_SHOOT_ANIM,A1
|
||
MOVI NONBOY_SHOOT_LUPE,A14
|
||
CALLA STRTANIM_OFF ;START ANIMATION
|
||
|
||
MOVE @RAND,A6,W ;LEFTY OR RIGHTY?
|
||
|
||
MOVE A5,A5
|
||
JRZ CJN_DOX ;BR=NO X VELOCITIES
|
||
|
||
MOVE A5,A1
|
||
SLL 16,A1 ;MINIMUM X VELOCITY
|
||
MOVE A5,A0
|
||
SRA 16,A0
|
||
SLL 16,A0 ;MAXIMUM X VELOCITY
|
||
CALLA RANGRAND
|
||
MOVE A0,A1
|
||
MOVI (0-HALFX)*ZMAX_REAL - (33 << 15),A0 ;WORLD X OFF SCREEN
|
||
BTST 1,A6
|
||
JRZ CJN_SET_X ;BR=STAY ON LEFT SIDE
|
||
NEG A0
|
||
NEG A1
|
||
CJN_SET_X
|
||
MOVE A1,*A8(OXVEL),L
|
||
JRUC CJN_XTRANS
|
||
CJN_DOX
|
||
MOVE A9,A1
|
||
SEXT A1,W
|
||
SLL 12,A1 ;MINIMUM X WORLD
|
||
MOVE A9,A0
|
||
SRA 16,A0
|
||
SLL 12,A0 ;MAXIMUM X WORLD
|
||
CALLA RANGRAND
|
||
CJN_XTRANS
|
||
MOVE @XBASE,A14,L
|
||
ADD A14,A0
|
||
MOVE A0,A1
|
||
|
||
MOVE @YWORLD,A2,L
|
||
MOVE @YBASE,A4,L
|
||
ADD A4,A2
|
||
MOVI ZMAX_REAL,A3
|
||
MOVE @ZBASE,A14,L
|
||
ADD A14,A3
|
||
CALLA SET_ANIPU
|
||
|
||
NEG A4
|
||
MOVE A4,*A8(OGRNDOFF),L
|
||
|
||
MOVK 1,A14
|
||
MOVB A14,*A8(OHITS) ;NUMBER OF ALLOWED HITS
|
||
|
||
MOVK 1,A14
|
||
MOVB A14,*A8(OSCRNOFFCNT) ;TIMES ALLOWED OFF SCREEN
|
||
|
||
MOVK M_FLIPH,A0
|
||
AND A6,A0
|
||
CALLA SET_FLPS
|
||
|
||
MOVI 07000H,A14
|
||
MOVE A14,*A8(OYACCEL),W ;SET GRAVITY
|
||
|
||
MOVE A10,A1
|
||
SLL 16,A1 ;MINIMUM INITIAL Y VELOCITY
|
||
MOVE A10,A0
|
||
SRA 16,A0
|
||
SLL 16,A0 ;MAXIMUM INITIAL Y VELOCITY
|
||
CALLA RANGRAND
|
||
MOVE A0,*A8(OYVEL),L
|
||
|
||
MOVE A11,A1
|
||
SEXT A1,W ;MINIMUM Z VELOCITY
|
||
MOVE A11,A0
|
||
SRA 16,A0 ;MAXIMUM Z VELOCITY
|
||
CALLA RANGRAND
|
||
MOVE A0,*A8(OZVEL),L
|
||
|
||
CALLA INSERT_ENEMY ;INSERT AND COUNT ENEMY
|
||
|
||
CALLA GET_SHAD_MULTI
|
||
CJN_ABORT
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* AU_CREATE_HEADOUTBOY - CREATE THE ENEMY TO RUN OUT OF THE DOOR WITH A *
|
||
* X DRIFT VELOCITY AND Y VELOCITY *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* AARG+,W = MINIMUM X DRIFT VELOCITY >> 8 *
|
||
* AARG+,W = MAXIMUM X DRIFT VELOCITY >> 8 *
|
||
* AARG+,W = Y VELOCITY >> 8 *
|
||
* AARG+,W = Z OFFSET BEHIND GENERATOR *
|
||
* *
|
||
**************************************************************************
|
||
|
||
HEADOUT_CVECT
|
||
WWL OID_PROCKET,~MASK_PLAYER,NONBOY_ROCKET_COLL
|
||
WWL OID_PEXPLOSION,~MASK_PLAYER,NONBOY_EXPLOSION_COLL
|
||
WWL OID_BLOWUP,0FFFFH,NONBOY_SBOMB_CARNAGE
|
||
WWL OID_GRND,0FFFFH,HEADOUT_GRND_COLLVECT
|
||
WL 0,DUMCRETS
|
||
|
||
HEADOUT_GRND_COLLVECT
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_DEAD,A14
|
||
JRNZ NONBOY_GRND_COLLVECT
|
||
|
||
MOVE *A8(OFLAGS),A14,W
|
||
ANDNI M_GCOLL,A14 ;TURN OFF COLLISION CHECK
|
||
MOVE A14,*A8(OFLAGS),W
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OYVEL),L ;STOP Y VELOCITY
|
||
|
||
MOVE *A8(OXDRIFTVEL),*A8(OXVEL),L ;SET X DRIFT VELOCITY
|
||
|
||
MOVI NONBOY_CVECT,A14
|
||
MOVE A14,*A8(OCVECT),L
|
||
|
||
JAUC SET_ONGRND
|
||
|
||
AU_CREATE_HEADOUTBOY
|
||
; MOVE @OBJENEMIES,A14,W
|
||
; BTST B_DOOR,A14
|
||
; JRZ AU_CH_ABORT ;BR=NOT ALLOWED
|
||
|
||
|
||
MOVE @ENEMY_QUOTA,A14,W
|
||
JRNZ AU_CH_ABORT ;BR=QUOTA REACHED
|
||
|
||
MOVE @HOLD_ENEMY_DISPATCH,A14,W
|
||
JRNZ AU_CH_ABORT ;BR=HOLD ON THERE
|
||
|
||
;DON'T TRASH A0
|
||
; MOVI OID_NONBOY,A0
|
||
; CALLA GET_ENEMY_COUNT
|
||
; CMPI 10,A0
|
||
; JRHS AU_CH_ABORT ;BR=REACHED MAX NUMBER OF ENEMIES
|
||
|
||
MOVE A8,A9
|
||
|
||
MOVI NONBOY_HEADON_INIT,B0 ;ALLOCATE OBJECT
|
||
CALLA CREATE_ENEMY
|
||
JRZ AU_CH_ERROR ;BR = ERROR! ERROR!
|
||
|
||
MOVE @RAND,A0,W ;LEFTY OR RIGHTY?
|
||
ANDI M_FLIPH,A0
|
||
CALLA SET_FLPS
|
||
|
||
MOVE A8,A1 ;NONBOY OBJECT POINTER
|
||
MOVE A9,A8 ;GENERATOR OBJECT POINTER
|
||
|
||
CLR A11 ;CLEAR SET X DRIFT ON GROUND COLL FLAG
|
||
|
||
CALLA GETAFARG_LONG
|
||
MOVE A0,A10
|
||
CALLA GETAFARG_WORD
|
||
SLL 8,A0
|
||
MOVE A0,*A1(OYVEL),L
|
||
DEC A0
|
||
JRN AU_CH_OFFZ ;NO GOING DOWN
|
||
|
||
MOVK 1,A11 ;SET SET X DRIFT ON GROUND COLL FLAG
|
||
|
||
MOVE *A1(OFLAGS),A14,W ;ENABLE GROUND CHECK
|
||
ORI M_GCOLL,A14
|
||
MOVE A14,*A1(OFLAGS),W
|
||
|
||
MOVI HEADOUT_CVECT,A14
|
||
MOVE A14,*A1(OCVECT),L
|
||
AU_CH_OFFZ
|
||
CALLA GETAFARG_WORD
|
||
|
||
MOVE *A9(OYVAL),A2,L
|
||
; MOVE @YWORLD,A2,L
|
||
MOVE *A9(OZVAL),A3,L
|
||
ADD A0,A3 ;OFFSET Z IN BACK OF DOOR
|
||
MOVE A1,A8 ;RESTORE NONBOY OBJECT POINTER
|
||
MOVE *A9(OXVAL),A1,L
|
||
CALLA SET_ANIPU
|
||
|
||
; MOVI RUNOUTBOY_CHECK,A14
|
||
; MOVE A14,*A8(OANIMCHK),L
|
||
|
||
MOVI NB_SRUNVEL_MAX,A0 ;GET RANDOM SIDE RUNNING SPEED
|
||
MOVI NB_SRUNVEL_MIN,A1
|
||
CALLA RANGRAND
|
||
MOVE A0,*A8(OSRUNVEL),L
|
||
|
||
MOVI NB_HRUNVEL,A14
|
||
MOVE A14,*A8(OHRUNVEL),L ;SET HEADON RUNNING SPEED
|
||
MOVE A14,*A8(OZVEL),L
|
||
|
||
MOVE A10,A1
|
||
SEXT A1,W
|
||
SLL 8,A1 ;UNCOMPRESSED MIN X DRIFT
|
||
MOVE A10,A0
|
||
SRA 16,A0
|
||
SLL 8,A0 ;UNCOMPRESSED MAX X DRIFT
|
||
MOVE *A9(OCTRL),A14,W
|
||
BTST B_FLIPH,A14
|
||
JRNZ AU_CH_XVEL
|
||
NEG A0
|
||
NEG A1
|
||
AU_CH_XVEL
|
||
CALLA RANGERND
|
||
MOVE A11,A11
|
||
JRZ AU_CH_SET_XVEL ;SET VELOCITY NOW!
|
||
MOVE A0,*A8(OXDRIFTVEL),L ;SET IT LATER
|
||
JRUC AU_CH_ANIM
|
||
AU_CH_SET_XVEL
|
||
MOVE A0,*A8(OXVEL),L
|
||
AU_CH_ANIM
|
||
MOVI NONBOY_HEADON_RUN_ANIM,A1
|
||
CALLA STRT_ANIM ;START ANIMATION
|
||
|
||
MOVK 1,A14
|
||
MOVB A14,*A8(OHITS) ;NUMBER OF ALLOWED HITS
|
||
|
||
; MOVE *A9(OCTRL),A0,W ;INVERT DOOR FLIP
|
||
; NOT A0
|
||
; ANDI M_FLIPH,A0
|
||
; MOVE *A8(OCTRL),A14,W
|
||
; OR A0,A14
|
||
; MOVE A14,*A8(OCTRL),W
|
||
|
||
MOVI 0FFH,A14
|
||
MOVB A14,*A8(OSCRNOFFCNT) ;TIMES ALLOWED OFF SCREEN
|
||
|
||
MOVK 3,A1
|
||
MOVK 10,A0
|
||
CALLA RANGRAND
|
||
; MOVI 080H,A0
|
||
MOVB A0,*A8(OSHOOTCNT) ;DISABLE SHOOTING
|
||
|
||
CALLA INSERT_ENEMY ;INSERT AND COUNT ENEMY
|
||
|
||
CALLA GET_SHAD_MULTI ;ME AND MY SHADOW
|
||
RETS
|
||
AU_CH_ERROR
|
||
AU_CH_ABORT
|
||
AU_CH_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CREATE_SIDERUN_NONBOY0 - CREATE SIDE RUNNING NONBOY *
|
||
* *
|
||
* PASS: *
|
||
* A8 = UNIVERSE Y *
|
||
* A9 = FLAGS|X (OFF-)SCREEN OFFSET AT FULL SIZE *
|
||
* A10 = CLOSEST UNIVERSE Z *
|
||
* A11 = FARTHEST UNIVERSE Z *
|
||
* *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CREATE_SIDERUN_NONBOYF
|
||
MOVE @ENEMY_QUOTA,A14,W
|
||
JANZ SUCIDE ;BR=REACHED QUOTA
|
||
|
||
MOVI OID_NONBOY,A0
|
||
CALLA GET_ENEMY_COUNT
|
||
CMPK 3,A0
|
||
JAHS SUCIDE
|
||
|
||
PUSH A8
|
||
MOVI NONBOY_SIDE_INIT,B0 ;ALLOCATE OBJECT
|
||
CALLA CREATE_ENEMY
|
||
PULL A2 ;A2=UNIVERSE Y
|
||
MOVE A8,A8
|
||
JRZ CSN0_ABORT ;BR = ABORT! ABORT!
|
||
|
||
JRUC CSN0_GO
|
||
|
||
CREATE_SIDERUN_NONBOY0
|
||
MOVE @ENEMY_QUOTA,A14,W
|
||
JANZ SUCIDE ;BR=REACHED QUOTA
|
||
|
||
MOVI OID_NONBOY,A0
|
||
CALLA GET_ENEMY_COUNT
|
||
CMPK 10,A0
|
||
JAHS SUCIDE
|
||
|
||
PUSH A8
|
||
MOVI NONBOY_SIDE_INIT,B0 ;ALLOCATE OBJECT
|
||
CALLA CREATE_ENEMY
|
||
PULL A2 ;A2=UNIVERSE Y
|
||
MOVE A8,A8
|
||
JRZ CSN0_ABORT ;BR = ABORT! ABORT!
|
||
|
||
CSN0_GO
|
||
CALLA GET_SHAD_MULTI
|
||
|
||
MOVI NB_SRUNVEL_MAX,A0 ;GET RANDOM SIDE RUNNING SPEED
|
||
MOVI NB_SRUNVEL_MIN,A1
|
||
CALLA RANGRAND
|
||
MOVE A0,*A8(OSRUNVEL),L
|
||
|
||
MOVI NB_HRUNVEL,A14
|
||
MOVE A14,*A8(OHRUNVEL),L ;SET HEADON RUNNING SPEED
|
||
|
||
MOVE A9,A7
|
||
SEXT A9,W ;CLEAR OUT FLAGS
|
||
SLL 15,A9 ;TRANSLATE TO WORLD OFFSET
|
||
|
||
;CHANGE THIS POSITIONING TO WORK WITH WORLD NOT SCREEN!
|
||
|
||
MOVK M_FLIPH,A6 ;DEFAULT TO COMING ON DA RIGHT
|
||
NEG A0
|
||
MOVI SCRRGT,A3
|
||
|
||
BTST B_NON_RIGHT+16,A7
|
||
JRNZ CSN0_SETX ;BR=COME ON FROM THE RIGHT
|
||
|
||
BTST B_NON_LEFT+16,A7
|
||
JRNZ CSN0_NEGX ;BR=COME ON FROM THE LEFT
|
||
|
||
MOVE @XSCROLL,A14,L
|
||
JRNZ CSN0_NORAND ;BR = WE ARE SCROLLING
|
||
MOVE @RAND,A14,W ;LEFTY OR RIGHTY?
|
||
SRA 2,A14
|
||
JRC CSN0_SETX
|
||
JRUC CSN0_NEGX
|
||
CSN0_NORAND
|
||
JRNN CSN0_SETX ;BR = SCROLLING RIGHT
|
||
CSN0_NEGX
|
||
NEG A9 ;BR = SCROLLING LEFT, SO COME ON DA LEFT
|
||
CLR A3
|
||
CLR A6
|
||
NEG A0
|
||
CSN0_SETX
|
||
MOVE A0,*A8(OXVEL),L ;RUN MOTHERFUCKER!
|
||
|
||
MOVE A11,A0 ;GET RANDOM UNIVERSE Z
|
||
MOVE A10,A1
|
||
CMP A0,A1
|
||
JREQ CSN0_SAME ;BR=THEY'RE DA SAME
|
||
CALLA RANGERND
|
||
CSN0_SAME
|
||
STOUX A0,A3 ;TRANSLATE SCREEN TO UNIVERSE
|
||
ADD A9,A3 ;ADD WORLD OFFSET
|
||
|
||
MOVE A3,A1
|
||
MOVE A0,A3
|
||
CALLA SET_ANIPU ;A2=UNIVERSE Y
|
||
|
||
MOVI NONBOY_SIDE_RUN_ANIM,A1
|
||
CALLA STRT_ANIM ;START ANIMATION
|
||
|
||
MOVK 1,A14
|
||
MOVB A14,*A8(OHITS) ;NUMBER OF ALLOWED HITS
|
||
|
||
MOVK 4,A14
|
||
MOVB A14,*A8(OSCRNOFFCNT) ;TIMES ALLOWED OFF SCREEN
|
||
|
||
MOVI 080H,A0 ;DEFAULT -> SHOOTING OFF
|
||
BTST B_DONT_SHOOT+16,A7
|
||
JRNZ CSN0_DONT_SHOOT ;BR=DO NOT ENABLE SHOOTING
|
||
MOVK 3,A1
|
||
MOVK 10,A0
|
||
CALLA RANGRAND
|
||
CSN0_DONT_SHOOT
|
||
MOVB A0,*A8(OSHOOTCNT) ;RANDOM SHOOTING CHECK COUNT
|
||
|
||
MOVI M_SIDE,A0
|
||
MOVE A0,*A8(OEFLAGS),W ;SET ENEMY STATE FLAG
|
||
|
||
MOVE A6,A0
|
||
CALLA SET_FLPS
|
||
|
||
SRL 28,A7 ;HIGH 4 BITS HOLD INDEX
|
||
SLL 5,A7
|
||
ADDI CSN0_ANIMCHK_TABLE,A7
|
||
MOVE *A7,A14,L ;GET ROUTINE ADDRESS
|
||
MOVE A14,*A8(OANIMCHK),L
|
||
|
||
CALLA INSERT_ENEMY ;INSERT AND COUNT ENEMY
|
||
CSN0_ABORT
|
||
DIE
|
||
|
||
CSN0_ANIMCHK_TABLE
|
||
.LONG 0, NONBOY_HOLE_CHECK0, NONBOY_CONCERT_AISLE_CHECK
|
||
.LONG NONBOY_CRATE_AISLE, NONBOY_SCAFFOLD_CHECK
|
||
|
||
**************************************************************************
|
||
* *
|
||
* NONBOY_CONCERT_AISLE_CHECK - MAKE NONBOY RUN UP THE AISLE IN THE *
|
||
* CONCERT HALL *
|
||
* PASS: *
|
||
* A8 = NONBOY OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
NONBOY_CONCERT_AISLE_CHECK
|
||
MOVE @XSCROLL,A14,L
|
||
JRNZ NCAC_ABORT ;BR=ABORT IF X SCROLLING
|
||
|
||
MOVE *A8(OXVAL),A0,L
|
||
MOVE @XBASE,A14,L
|
||
SUB A14,A0
|
||
GETST A14
|
||
|
||
ABS A0
|
||
CMPI 0100000H,A0
|
||
JRLT NCAC_TURN ;BR=GO UP AISLE
|
||
|
||
MOVE *A8(OXVEL),A0,L
|
||
GETST A0
|
||
XOR A14,A0
|
||
MOVE A0,A0
|
||
JANN DEL_ENEMY_NOAUD ;BR=RUNNING AWAY FROM CENTER
|
||
RETS
|
||
NCAC_TURN
|
||
MOVI -04000H,A14
|
||
MOVE A14,*A8(OYVEL),L ;UP THE AISLE STAIRS VELOCITY
|
||
|
||
; MOVK 3,A1
|
||
; MOVK 10,A0
|
||
; CALLA RANGRAND
|
||
; MOVB A0,*A8(OSHOOTCNT) ;RANDOM SHOOTING CHECK COUNT
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OANIMCHK),L
|
||
; MOVB A14,*A8(OSHOOTCNT) ;SHOOT ASAP
|
||
MOVE A14,*A8(OXVEL),L ;STOP
|
||
MOVE *A8(OEFLAGS),A14,W
|
||
XORI M_SIDE,A14
|
||
MOVE A14,*A8(OEFLAGS),W
|
||
MOVE A8,A0
|
||
MOVI NONBOY_SIDE_TO_HEAD_ANIM,A1
|
||
MOVI NONBOY_HEADON_RUN_ANIM,A14
|
||
CALLA STRTANIM_OFF
|
||
NCAC_ABORT
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* NONBOY_SCAFFOLD_CHECK - MAKE NONBOY ON THE SCAFFOLD *
|
||
* *
|
||
* PASS: *
|
||
* A8 = NONBOY OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
NONBOY_SCAFFOLD_CHECK
|
||
MOVE *A8(OXVAL),A0,L
|
||
MOVE @XBASE,A14,L
|
||
SUB A14,A0
|
||
GETST A14
|
||
|
||
ABS A0
|
||
CMPI 0100000H,A0
|
||
JRLT NSC_TURN ;BR=GO ON SCAFFOLD
|
||
|
||
MOVE *A8(OXVEL),A0,L
|
||
GETST A0
|
||
XOR A14,A0
|
||
MOVE A0,A0
|
||
JANN DEL_ENEMY_NOAUD ;BR=RUNNING AWAY FROM CENTER
|
||
RETS
|
||
NSC_TURN
|
||
CLR A14
|
||
MOVE A14,*A8(OANIMCHK),L
|
||
MOVB A14,*A8(OSHOOTCNT) ;SHOOT ASAP
|
||
MOVE A14,*A8(OXVEL),L ;STOP
|
||
MOVE *A8(OEFLAGS),A14,W
|
||
XORI M_SIDE,A14
|
||
MOVE A14,*A8(OEFLAGS),W
|
||
MOVE A8,A0
|
||
MOVI NONBOY_SIDE_TO_HEAD_ANIM,A1
|
||
MOVI NONBOY_HEADON_RUN_ANIM,A14
|
||
CALLA STRTANIM_OFF
|
||
RETS
|
||
|
||
;**************************************************************************
|
||
;* *
|
||
;* NONBOY_BAR_CHECK - CHECK IF HE CAN RUN AROUND THE BAR *
|
||
;* *
|
||
;* PASS: *
|
||
;* A8 = OBJECT *
|
||
;* *
|
||
;**************************************************************************
|
||
;
|
||
;NONBOY_BAR_CHECK
|
||
; MOVE *A8(OXVAL),A0,L
|
||
; MOVE *A8(OCTRL),A14,W
|
||
; BTST B_FLIPH,A14
|
||
; JRZ NBC_RIGHT_CHECK
|
||
; CMPI 030F0000H,A0
|
||
; JRLT NBC_GO
|
||
; CMPI 034F0000H,A0
|
||
; JRGT NBC_DONE
|
||
; MOVI 256,A0
|
||
; CALLA RANDPER
|
||
; JRC NBC_GO
|
||
;NBC_DONE
|
||
; RETS
|
||
;NBC_RIGHT_CHECK
|
||
; CMPI 04B40000H,A0
|
||
; JRGT NBC_GO
|
||
; CMPI 04640000H,A0
|
||
; JRLT NBC_DONE
|
||
; MOVI 256,A0
|
||
; CALLA RANDPER
|
||
; JRNC NBC_DONE
|
||
;NBC_GO
|
||
; CLR A14
|
||
; MOVE A14,*A8(OANIMCHK),L
|
||
; MOVE A14,*A8(OXVEL),L ;STOP
|
||
; MOVE *A8(OEFLAGS),A14,W
|
||
; XORI M_SIDE,A14
|
||
; MOVE A14,*A8(OEFLAGS),W
|
||
; MOVE A8,A0
|
||
; MOVI NONBOY_SIDE_TO_HEAD_ANIM,A1
|
||
; MOVI NONBOY_HEADON_RUN_ANIM,A14
|
||
; JAUC STRTANIM_OFF
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* NONBOY_CRATE_AISLE *
|
||
* *
|
||
* Anim func to have the NON-BOY figure when you're on a crate *
|
||
* aisle and start running foward. *
|
||
* *
|
||
* A8 = Ptr to NON-BOY object *
|
||
* *
|
||
**************************************************************************
|
||
NONBOY_CRATE_AISLE
|
||
MOVE @XSCROLL,A14,L ;Are we moving in X?
|
||
JRNZ NCA_X ;BR = Yes, then we are not centered
|
||
MOVE @ZSCROLL,A14,L ;Are we moving in or out?
|
||
JRZ NCA_X ;BR = No, then we're not in an aisle
|
||
|
||
MOVE *A8(OAISLE_X_OFFSET),A0,W
|
||
JRNZ NCA_GOT_TOFF
|
||
MOVK 10,A0
|
||
CALLA SRAND
|
||
MOVE A0,*A8(OAISLE_X_OFFSET),W
|
||
NCA_GOT_TOFF
|
||
SLL 16,A0
|
||
MOVE @XBASE,A1,L ;Get the position of the universe
|
||
ADD A0,A1 ;Randomize the lockon, slightly
|
||
|
||
MOVE *A8(OXVAL),A0,L ;Get our position
|
||
|
||
MOVE *A8(OCTRL),A14,W
|
||
BTST B_FLIPH,A14
|
||
JRZ NCA_RIGHT_CK
|
||
|
||
CMP A1,A0 ;Have we crossed to the left?
|
||
JRLT NCA_GO ;BR = Yes, then get goin' forward
|
||
NCA_X
|
||
RETS
|
||
|
||
NCA_RIGHT_CK
|
||
CMP A1,A0 ;Have we crossed to the right?
|
||
JRLE NCA_X ;BR = No, let us bail now
|
||
|
||
NCA_GO
|
||
CLR A14
|
||
MOVE A14,*A8(OAISLE_X_OFFSET),W
|
||
MOVE A14,*A8(OANIMCHK),L
|
||
MOVE A14,*A8(OXVEL),L ;Stop this madness
|
||
|
||
MOVE *A8(OEFLAGS),A14,W
|
||
ANDNI M_SIDE,A14 ;We no longer run sideways
|
||
MOVE A14,*A8(OEFLAGS),W
|
||
|
||
MOVE A8,A0
|
||
MOVI NONBOY_SIDE_TO_HEAD_ANIM,A1
|
||
MOVI NONBOY_HEADON_RUN_ANIM,A14
|
||
JAUC STRTANIM_OFF
|
||
|
||
**************************************************************************
|
||
* *
|
||
* NONBOY_HOLE_CHECK0 - CHECK IF HE CAN GO THROUGH THE HOLE IN THE WALL *
|
||
* NONBOY_HOLE_CHECK1 - CHECK IF HE IS DONE GOING THROUGH THE HOLE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
NONBOY_HOLE_CHECK0
|
||
MOVE *A8(OXVAL),A14,L
|
||
SUBI 03E08000H,A14 ;GET X DIFF FROM HOLE
|
||
ABS A14
|
||
CMPI NB_SRUNVEL_MAX*SIDERUN_TIME,A14
|
||
JRGT NHC0_DONE ;BR=TO FAR AWAY
|
||
|
||
MOVI 03E08000H,A1
|
||
CALLA SET_ANIPXU ;CENTER HIM IN THE HOLE
|
||
|
||
MOVI NONBOY_SIDE_TO_HEAD_ANIM,A1 ;NEW ANIM
|
||
MOVE A1,*A8(AnimFrm),L
|
||
MOVI NONBOY_HEADON_RUN_ANIM,A1 ;NEW LOOP ANIM
|
||
MOVE A1,*A8(AnimScr),L
|
||
CLR A14 ;NO SLEEP TIL'
|
||
MOVB A14,*A8(AnimSlp)
|
||
MOVE A14,*A8(OXVEL),L ;STOP
|
||
MOVI NONBOY_HOLE_CHECK1,A14
|
||
MOVE A14,*A8(OANIMCHK),L ;NEW ANIM CHECK
|
||
NHC0_DONE
|
||
RETS
|
||
|
||
NONBOY_HOLE_CHECK1
|
||
MOVE *A8(OZVAL),A14,L
|
||
CMPI -011000H,A14
|
||
JRGT NHC1_DONE ;BR=NOT AT Z YET
|
||
|
||
MOVI NONBOY_HEAD_TO_SIDE_ANIM,A1 ;NEW ANIM
|
||
MOVE A1,*A8(AnimFrm),L
|
||
MOVI NONBOY_SIDE_RUN_ANIM,A1 ;NEW LOOP ANIM
|
||
MOVE A1,*A8(AnimScr),L
|
||
CLR A14
|
||
MOVB A14,*A8(AnimSlp) ;NO SLEEP TIL'
|
||
MOVE A14,*A8(OZVEL),L ;STOP
|
||
MOVE A14,*A8(OANIMCHK),L ;NO ANIM CHECK
|
||
MOVB A14,*A8(OSHOOTCNT) ;SHOOT ASAP
|
||
|
||
MOVI -011000H,A1 ;SET Z POSITION AND SORT
|
||
CALLA SET_ANIPZU
|
||
JRUC RESORT_OBJ
|
||
NHC1_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CREATE_HELIDROP_NONBOY0 - CREATE HELICOPTER DROPPING NONBOY *
|
||
* CREATE_DROP_SHOOTING_NONBOY - CREATE DROPPING NONBOY THAT ONLY SHOOTS *
|
||
* *
|
||
* PASS: *
|
||
* A8 = UNIVERSE X *
|
||
* A9 = UNIVERSE Y OF CREATION (HELICOPTER) *
|
||
* A10 = UNIVERSE Y OF DESTINATION (GROUND OR TOP OF BUILDING) *
|
||
* A11 = UNIVERSE Z *
|
||
* *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CREATE_HELIDROP_NONBOY0
|
||
MOVE @ENEMY_QUOTA,A14,W
|
||
JANZ SUCIDE ;BR=REACHED QUOTA
|
||
|
||
; MOVI OID_NONBOY,A0
|
||
; CALLA GET_ENEMY_COUNT
|
||
; MOVK 7,A1
|
||
; MOVE @XSCROLL,A14,L
|
||
; JRZ CHN0_NOFUDGE
|
||
; MOVK 5,A1
|
||
;CHN0_NOFUDGE
|
||
; CMP A1,A0
|
||
; JAHS SUCIDE
|
||
|
||
PUSH A8
|
||
MOVI NONBOY_DROP_INIT,B0 ;ALLOCATE OBJECT
|
||
CALLA CREATE_ENEMY
|
||
PULL A4 ;A4=UNIVERSE X
|
||
MOVE A8,A8
|
||
JRZ CHN0_ABORT ;BR = ABORT! ABORT!
|
||
|
||
MOVI NONBOY_HELIDROP_ANIM,A1
|
||
CALLA STRT_ANIM ;START ANIMATION
|
||
|
||
MOVI ROOF_LEFT_BOUNDARY,A14
|
||
MOVE A14,*A8(OROOFXLEFT),L ;SET LEFT ROOF BOUNDARY
|
||
MOVI ROOF_RIGHT_BOUNDARY,A14
|
||
MOVE A14,*A8(OROOFXRGHT),L ;SET RIGHT ROOF BOUNDARY
|
||
|
||
MOVI NONBOY_ROOF_CHECK0,A14
|
||
MOVE A14,*A8(OANIMCHK),L
|
||
|
||
MOVK 3,A1
|
||
MOVK 10,A0
|
||
CALLA RANGRAND
|
||
MOVB A0,*A8(OSHOOTCNT) ;RANDOM SHOOTING CHECK COUNT
|
||
|
||
JRUC CHN0_GO
|
||
|
||
CREATE_DROP_SHOOTING_NONBOY
|
||
|
||
MOVE @ENEMY_QUOTA,A14,W
|
||
JANZ SUCIDE ;BR=REACHED QUOTA
|
||
|
||
; MOVI OID_NONBOY,A0
|
||
; CALLA GET_ENEMY_COUNT
|
||
; MOVK 7,A1
|
||
; MOVE @XSCROLL,A14,L
|
||
; JRZ CHN0_NOFUDGE
|
||
; MOVK 5,A1
|
||
;CHN0_NOFUDGE
|
||
; CMP A1,A0
|
||
; JAHS SUCIDE
|
||
|
||
PUSH A8
|
||
MOVI NONBOY_DROP_INIT,B0 ;ALLOCATE OBJECT
|
||
CALLA CREATE_ENEMY
|
||
PULL A4 ;A4=UNIVERSE X
|
||
MOVE A8,A8
|
||
JRZ CHN0_ABORT ;BR = ABORT! ABORT!
|
||
|
||
MOVE A8,A0
|
||
MOVI NONBOY_DROP_SHOOT_ANIM,A1
|
||
MOVI NONBOY_SHOOT_LUPE,A14
|
||
CALLA STRTANIM_OFF ;START ANIMATION
|
||
|
||
MOVE @BLACKOUT,A14,W
|
||
JRZ CHN0_GO ;BR=NO BLACKOUT
|
||
CALLA OBJ_OFF_MULTI
|
||
CHN0_GO
|
||
MOVE A11,A3
|
||
MOVE A4,A1
|
||
MOVE A9,A2
|
||
JRNZ CHN0_SET
|
||
CALLA GET_TOPY_OFFSCRN
|
||
CHN0_SET
|
||
CALLA SET_ANIPU
|
||
|
||
MOVE @YWORLD,A0,L
|
||
SUB A10,A0
|
||
MOVE A0,*A8(OGRNDOFF),L
|
||
|
||
MOVI NB_SRUNVEL_MAX,A0 ;GET RANDOM RUNNING SPEED
|
||
MOVI NB_SRUNVEL_MIN,A1
|
||
CALLA RANGRAND
|
||
MOVE A0,*A8(OSRUNVEL),L
|
||
|
||
MOVK 1,A14
|
||
MOVB A14,*A8(OHITS) ;NUMBER OF ALLOWED HITS
|
||
|
||
MOVK 2,A14
|
||
MOVB A14,*A8(OSCRNOFFCNT) ;TIMES ALLOWED OFF SCREEN
|
||
|
||
MOVE @RAND,A0,W ;LEFTY OR RIGHTY?
|
||
ANDI M_FLIPH,A0
|
||
CALLA SET_FLPS
|
||
|
||
MOVI 07000H,A14
|
||
MOVE A14,*A8(OYACCEL),W ;SET GRAVITY
|
||
|
||
CALLA INSERT_ENEMY ;INSERT AND COUNT ENEMY
|
||
|
||
CHN0_ABORT
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_NONBOY_BLACKOUT - IF BLACKOUT <> 0, THEN BLACKEN NONBOY *
|
||
* *
|
||
* A8 = NONBOY OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_CHECK_NONBOY_BLACKOUT
|
||
MOVE @BLACKOUT,A14,W
|
||
JAZ A_CHECK_DUDE
|
||
CALLA OBJ_OFF
|
||
JRUC A_CHECK_DUDE
|
||
|
||
; JRZ A_CNB_DONE
|
||
;
|
||
; MOVE *A8(OCTRL),A14,W
|
||
; SRL 4,A14
|
||
; SLL 4,A14
|
||
; ORI DMACNZ & 0FH,A14
|
||
; MOVE A14,*A8(OCTRL),W
|
||
;
|
||
;A_CNB_DONE
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* MAKE_SECRET_BAR_NONBOYS - MAKE 2 NONBOYS FALL IN THE SECRET ROOM *
|
||
* *
|
||
**************************************************************************
|
||
|
||
MAKE_SECRET_BAR_NONBOYS
|
||
MOVI 02EC19H,A11 ;Z
|
||
MOVI 0138000H,A10 ;Y DESTINATION
|
||
MOVI -02E4000H,A9 ;Y CREATION
|
||
|
||
MOVE @RAND,A14,W
|
||
BTST 1,A14
|
||
JRZ MSBN_OTHER
|
||
|
||
MOVI -0370000H,A8 ;X
|
||
CREATE PID_IND,CREATE_DROP_SHOOTING_NONBOY ;LEFT GUY
|
||
|
||
MOVK 30,A0
|
||
CALLA RANDU
|
||
SLEEPR A0
|
||
|
||
MOVI -0E0000H,A8 ;X
|
||
CREATE PID_IND,CREATE_DROP_SHOOTING_NONBOY ;RIGHT GUY
|
||
|
||
DIE
|
||
|
||
MSBN_OTHER
|
||
MOVI -0E0000H,A8 ;X
|
||
CREATE PID_IND,CREATE_DROP_SHOOTING_NONBOY ;RIGHT GUY
|
||
|
||
MOVK 30,A0
|
||
CALLA RANDU
|
||
SLEEPR A0
|
||
|
||
MOVI -0370000H,A8 ;X
|
||
CREATE PID_IND,CREATE_DROP_SHOOTING_NONBOY ;LEFT GUY
|
||
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CREATE_SHOOTING_NONBOY - AND THAT'S ALL HE DOES *
|
||
* *
|
||
* PASS: *
|
||
* A9 = UNIVERSE X *
|
||
* A10 = UNIVERSE Y *
|
||
* A11 = UNIVERSE Z *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CREATE_SHOOTING_NONBOY
|
||
|
||
MOVE @ENEMY_QUOTA,A14,W
|
||
JANZ SUCIDE ;BR=REACHED QUOTA
|
||
|
||
; MOVI OID_NONBOY,A0
|
||
; CALLA GET_ENEMY_COUNT
|
||
; MOVK 7,A1
|
||
; MOVE @XSCROLL,A14,L
|
||
; JRZ CSN_NOFUDGE
|
||
; MOVK 5,A1
|
||
;CSN_NOFUDGE
|
||
; CMP A1,A0
|
||
; JAHS SUCIDE
|
||
|
||
MOVI NONBOY_SHOOTER_INIT,B0 ;ALLOCATE OBJECT
|
||
CALLA CREATE_ENEMY
|
||
JRZ CSN_ABORT ;BR = ABORT! ABORT!
|
||
|
||
MOVI NONBOY_SHOOTER_ANIM,A1
|
||
CALLA STRT_ANIM ;START ANIMATION
|
||
|
||
MOVE A9,A1 ;X
|
||
MOVE A10,A2 ;Y
|
||
MOVE A11,A3 ;Z
|
||
CALLA SET_ANIPU
|
||
|
||
MOVE @YWORLD,A0,L
|
||
SUB A10,A0
|
||
MOVE A0,*A8(OGRNDOFF),L
|
||
|
||
MOVK 1,A14
|
||
MOVB A14,*A8(OHITS) ;NUMBER OF ALLOWED HITS
|
||
|
||
MOVI 0FFH,A14
|
||
MOVB A14,*A8(OSCRNOFFCNT) ;TIMES ALLOWED OFF SCREEN
|
||
|
||
MOVK 2,A0
|
||
CALLA RAND0
|
||
SLL 4,A0
|
||
MOVE *A8(OCTRL),A14,W
|
||
OR A0,A14
|
||
MOVE A14,*A8(OCTRL),W
|
||
|
||
CALLA INSERT_ENEMY ;INSERT AND COUNT ENEMY
|
||
CSN_ABORT
|
||
DIE
|
||
|
||
;**************************************************************************
|
||
;* *
|
||
;* CREATE_SHOOTING_HALFBOY - AND THAT'S ALL HE DOES (HE'S ONLY HALF A MAN)*
|
||
;* *
|
||
;* PASS: *
|
||
;* A9 = UNIVERSE X *
|
||
;* A10 = UNIVERSE Y *
|
||
;* A11 = UNIVERSE Z *
|
||
;* *
|
||
;**************************************************************************
|
||
;
|
||
;CREATE_SHOOTING_HALFBOY
|
||
;
|
||
; MOVE @ENEMY_QUOTA,A14,W
|
||
; JANZ SUCIDE ;BR=REACHED QUOTA
|
||
;
|
||
;; MOVI OID_NONBOY,A0
|
||
;; CALLA GET_ENEMY_COUNT
|
||
;; MOVK 7,A1
|
||
;; MOVE @XSCROLL,A14,L
|
||
;; JRZ CSN_NOFUDGE
|
||
;; MOVK 5,A1
|
||
;;CSN_NOFUDGE
|
||
;; CMP A1,A0
|
||
;; JAHS SUCIDE
|
||
;
|
||
; MOVI NONBOY_SHOOTER2_INIT,B0 ;ALLOCATE OBJECT
|
||
; CALLA CREATE_ENEMY
|
||
; JRZ CSH_ABORT ;BR = ABORT! ABORT!
|
||
;
|
||
;; MOVI NONBOY_SHOOTER2_FALL_ANIM,A14
|
||
;; MOVE A14,*A8(OEDEATH),L
|
||
;
|
||
; MOVI NONBOY_SHOOTER2_ANIM,A1
|
||
; CALLA STRT_ANIM ;START ANIMATION
|
||
;
|
||
; MOVE A9,A1 ;X
|
||
; MOVE A10,A2 ;Y
|
||
; MOVE A11,A3 ;Z
|
||
; CALLA SET_ANIPU
|
||
;
|
||
; MOVE @YWORLD,A0,L
|
||
; SUB A10,A0
|
||
; MOVE A0,*A8(OGRNDOFF),L
|
||
;
|
||
; MOVK 1,A14
|
||
; MOVB A14,*A8(OHITS) ;NUMBER OF ALLOWED HITS
|
||
;
|
||
; MOVI -10,A14
|
||
; MOVB A14,*A8(OSCRNOFFCNT) ;TIMES ALLOWED OFF SCREEN
|
||
;
|
||
; MOVK 2,A0
|
||
; CALLA RAND0
|
||
; SLL 4,A0
|
||
; MOVE *A8(OCTRL),A14,W
|
||
; OR A0,A14
|
||
; MOVE A14,*A8(OCTRL),W
|
||
;
|
||
; CALLA INSERT_ENEMY ;INSERT AND COUNT ENEMY
|
||
;
|
||
;CSH_ABORT
|
||
; DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CREATE_STALLBOY - CREATE A NONBOY WAITING IN THE STALL *
|
||
* *
|
||
* PASS: *
|
||
* A9 = UNIVERSE X *
|
||
* A10 = UNIVERSE Y *
|
||
* A11 = UNIVERSE Z *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CREATE_STALLBOY
|
||
MOVE @ENEMY_QUOTA,A14,W
|
||
JANZ SUCIDE ;BR=REACHED QUOTA
|
||
|
||
MOVI NONBOY_SHOOTER_INIT,B0 ;ALLOCATE OBJECT
|
||
CALLA CREATE_ENEMY
|
||
JRZ CS_ABORT ;BR = ABORT! ABORT!
|
||
|
||
MOVI NONBOY_STALL_ANIM,A1
|
||
CALLA STRT_ANIM ;START ANIMATION
|
||
|
||
MOVE A9,A1 ;X
|
||
MOVE A10,A2 ;Y
|
||
MOVE A11,A3 ;Z
|
||
CALLA SET_ANIPU
|
||
|
||
MOVE @YWORLD,A0,L
|
||
SUB A10,A0
|
||
MOVE A0,*A8(OGRNDOFF),L
|
||
|
||
MOVK 1,A14
|
||
MOVB A14,*A8(OHITS) ;NUMBER OF ALLOWED HITS
|
||
|
||
MOVK 2,A0
|
||
CALLA RAND0
|
||
SLL 4,A0
|
||
MOVE *A8(OCTRL),A14,W
|
||
OR A0,A14
|
||
MOVE A14,*A8(OCTRL),W
|
||
|
||
CALLA INSERT_ENEMY ;INSERT AND COUNT ENEMY
|
||
|
||
CALLA GET_SHAD_MULTI
|
||
|
||
CS_ABORT
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_STALLBOY - WHEN ENEMY_QUOTA IS TRUE, DIE! *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_CHECK_STALLBOY
|
||
MOVE @SCROLL_FLAG,A14,W
|
||
JANZ DEL_ENEMY_NOAUD ;BR=BANG YOUR DEAD!
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* NONBOY_ROOF_CHECK0 - LOOK FOR THE BEGINNING OF THE STAIRWAY *
|
||
* NONBOY_ROOF_CHECK1 - LOOK FOR THE END OF THE STAIRWAY *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *A8(OROOFXLEFT) = ROOF LEFT BOUNDARY *
|
||
* *A8(OROOFXRGHT) = ROOF RIGHT BOUNDARY *
|
||
* *
|
||
**************************************************************************
|
||
|
||
NONBOY_ROOF_CHECK0
|
||
MOVE *A8(OEFLAGS),A14,W
|
||
BTST B_SIDE,A14
|
||
JRZ NRF_DONE ;BR=HE'S SHOOTING! ABORT!
|
||
MOVE *A8(OXVAL),A0,L
|
||
MOVE *A8(OCTRL),A14,W
|
||
BTST B_FLIPH,A14
|
||
JRZ NRF_NOFLIP
|
||
MOVE *A8(OROOFXLEFT),A14,L
|
||
ADDI 0200000H,A14
|
||
CMP A14,A0
|
||
JRLT NRF_GOING_DOWN ;BR=NOT AT LEFT STAIRWAY
|
||
JRUC NRF_DONE
|
||
NRF_NOFLIP
|
||
MOVE *A8(OROOFXRGHT),A14,L
|
||
SUBI 0200000H,A14
|
||
CMP A14,A0
|
||
JRLT NRF_DONE ;BR=NOT AT RIGHT STAIRWAY
|
||
NRF_GOING_DOWN
|
||
MOVI NONBOY_ROOF_CHECK1,A14 ;FOUND A STAIRWAY!
|
||
MOVE A14,*A8(OANIMCHK),L
|
||
MOVI 030000H,A14
|
||
MOVE A14,*A8(OYVEL),L ;GOING DOWN!
|
||
MOVI 080H,A0
|
||
MOVB A0,*A8(OSHOOTCNT) ;DISABLE SHOOTING
|
||
NRF_DONE
|
||
RETS
|
||
|
||
NONBOY_ROOF_CHECK1
|
||
MOVE *A8(OXVAL),A0,L
|
||
MOVE *A8(OROOFXLEFT),A1,L
|
||
CMP A1,A0
|
||
JALT DEL_ENEMY_NOAUD ;BR=END OF THE STAIRS
|
||
MOVE *A8(OROOFXRGHT),A1,L
|
||
CMP A1,A0
|
||
JAGT DEL_ENEMY_NOAUD ;BR=END OF THE STAIRS
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CREATE_HEADONRUN_NONBOY0 *
|
||
* *
|
||
* Process to create a head-on running NON-BOY. He runs *
|
||
* until he gets off of the screen. *
|
||
* *
|
||
* A9 = Starting position universe Z *
|
||
* A10 = Starting position universe Y *
|
||
* A11 = Starting position universe X *
|
||
* *
|
||
**************************************************************************
|
||
CREATE_HEADONRUN_NONBOY0
|
||
MOVE @ENEMY_QUOTA,A14,W
|
||
JANZ SUCIDE ;BR=REACHED QUOTA
|
||
|
||
MOVI OID_NONBOY,A0
|
||
CALLA GET_ENEMY_COUNT
|
||
MOVK 7,A1
|
||
; MOVE @XSCROLL,A14,L
|
||
; JRZ CHNB0_NOFUDGE
|
||
; MOVK 5,A1
|
||
;CHNB0_NOFUDGE
|
||
CMP A1,A0
|
||
JAHS SUCIDE
|
||
|
||
MOVI NONBOY_HEADON_INIT,B0 ;ALLOCATE OBJECT
|
||
CALLA CREATE_ENEMY
|
||
JRZ CHNB0_ABORT ;BR = ABORT! ABORT!
|
||
|
||
; MOVI NB_SRUNVEL_MAX,A0 ;GET RANDOM RUNNING SPEED
|
||
; MOVI NB_SRUNVEL_MIN,A1
|
||
; CALLA RANGRAND
|
||
; MOVE A0,*A8(OSRUNVEL),L
|
||
|
||
MOVIM NB_HRUNVEL,*A8(OZVEL),L ;Set speed
|
||
|
||
; MOVK M_FLIPH,A6 ;DEFAULT TO COMING ON DA RIGHT
|
||
; NEG A0
|
||
; MOVI SCRRGT,A3
|
||
|
||
; MOVE @XSCROLL,A14,L
|
||
; JRNZ CHNB0_NORAND ;BR = WE ARE SCROLLING
|
||
; MOVE @RAND,A14,W ;LEFTY OR RIGHTY?
|
||
; SRA 2,A14
|
||
; JRC CHNB0_SETX
|
||
; JRUC CHNB0_NEGX
|
||
;CHNB0_NORAND
|
||
; JRNN CHNB0_SETX ;BR = SCROLLING RIGHT
|
||
;CHNB0_NEGX
|
||
; NEG A9 ;BR = SCROLLING LEFT, SO COME ON DA LEFT
|
||
; CLR A3
|
||
; CLR A6
|
||
; NEG A0
|
||
;CHNB0_SETX
|
||
; MOVE A0,*A8(OXVEL),L ;RUN MOTHERFUCKER!
|
||
; ADD A9,A3
|
||
|
||
; MOVE A11,A0 ;GET RANDOM UNIVERSE Z
|
||
; MOVE A10,A1
|
||
; CMP A0,A1
|
||
; JREQ CHNB0_SAME ;BR=THEY'RE DA SAME
|
||
; CALLA RANGERND
|
||
;CHNB0_SAME
|
||
; MOVE A0,*A8(OZVAL),L
|
||
; STOUX A0,A3 ;TRANSLATE SCREEN TO UNIVERSE
|
||
; MOVE A3,*A8(OXVAL),L
|
||
|
||
; MOVE A9,*A8(OZVAL),L
|
||
; MOVE A11,*A8(OXVAL),L
|
||
; MOVE A10,*A8(OYVAL),L
|
||
|
||
MOVE A11,A1
|
||
MOVE A10,A2
|
||
MOVE A9,A3
|
||
CALLA SET_ANIPU
|
||
|
||
MOVI NONBOY_HEADON_RUN_ANIM,A1
|
||
CALLA STRT_ANIM ;START ANIMATION
|
||
|
||
MOVK 1,A14
|
||
MOVB A14,*A8(OHITS) ;NUMBER OF ALLOWED HITS
|
||
|
||
MOVK 2,A14
|
||
MOVB A14,*A8(OSCRNOFFCNT) ;TIMES ALLOWED OFF SCREEN
|
||
|
||
MOVK 3,A1
|
||
MOVK 10,A0
|
||
CALLA RANGRAND
|
||
MOVB A0,*A8(OSHOOTCNT) ;RANDOM SHOOTING CHECK COUNT
|
||
|
||
; CLR A0
|
||
; MOVE A0,*A8(OEFLAGS),W ;SET ENEMY STATE FLAG
|
||
|
||
; MOVE *A8(OCTRL),A14,W
|
||
; OR A6,A14
|
||
; MOVE A14,*A8(OCTRL),W
|
||
|
||
CALLA INSERT_ENEMY ;INSERT AND COUNT ENEMY
|
||
|
||
CHNB0_ABORT
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* NONBOY_CVECT - NONBOY COLLISION TABLE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
NONBOY_CVECT
|
||
WWL OID_PROCKET,~MASK_PLAYER,NONBOY_ROCKET_COLL
|
||
WWL OID_PEXPLOSION,~MASK_PLAYER,NONBOY_EXPLOSION_COLL
|
||
; WWL OID_BLOWUP,0FFFFH,NONBOY_SBOMB_COLLVECT
|
||
WWL OID_BLOWUP,0FFFFH,NONBOY_SBOMB_CARNAGE
|
||
WWL OID_GRND,0FFFFH,NONBOY_GRND_COLLVECT
|
||
WL 0,DUMCRETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* NONBOY_GUNVECT - NONBOY GUN VECTOR *
|
||
* *
|
||
* PASS: *
|
||
* A2 = PTR TO PLAYER *
|
||
* A8 = PTR TO OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
NONBOY_SBOMB_COLLVECT
|
||
; CLR A2 ;LET SBOMB AWARD POINTS
|
||
JRUC NONBOY_SBOMB
|
||
NONBOY_GRND_COLLVECT
|
||
CLR A14
|
||
MOVE A14,*A8(OXVEL),L ;STOP IT!
|
||
MOVE A14,*A8(OYVEL),L
|
||
MOVE A14,*A8(OZVEL),L
|
||
MOVE A14,*A8(OYACCEL),W
|
||
MOVE *A8(OFLAGS),A14,W
|
||
ANDNI M_GCOLL,A14 ;TURN OFF COLLISION CHECK
|
||
MOVE A14,*A8(OFLAGS),W
|
||
JAUC SET_ONGRND
|
||
NONBOY_COLLVECT
|
||
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
|
||
CALLA POID_TO_PDATA ;GET PDATA IN A2
|
||
JRUC NG_NO_BLOOD
|
||
NONBOY_GUNVECT
|
||
SOUND1 SND_BODY_THUD
|
||
CALLA BLOODY_BULLET_HIT_OFFSET
|
||
NG_NO_BLOOD
|
||
NONBOY_SBOMB
|
||
CALLA GET_HEAD_PART
|
||
MOVE A2,*A8(OPLAYER),L
|
||
;NONBOY_SBOMB
|
||
MOVE *A8(OFLAGS),A9,W ;IS THIS OBJECT DEAD?
|
||
BTST B_DEAD,A9
|
||
JRNZ NG_DEAD ;BR = YES
|
||
|
||
MOVE *A8(OEFLAGS),A6,W
|
||
|
||
MOVB *A8(OHITS),A14
|
||
DEC A14
|
||
JRP NG_STILL_ALIVE ;BR = NONBOY STILL ALIVE
|
||
|
||
MOVI OID_JUNK,A1
|
||
CALLA DEL_OID_PART ;GET RID OF GUN FLASH
|
||
|
||
ORI M_DEAD,A9
|
||
MOVE A9,*A8(OFLAGS),W ;DEAD AS A DOOR KNOB
|
||
|
||
; MOVI DUMRETS,A14
|
||
; MOVE A14,*A8(OGUNVECT),L
|
||
|
||
MOVE A2,A2
|
||
JRZ NG_NOSCORE ;BR = NO SCORE
|
||
|
||
; MOVK 10,A0 ;AWARD RANDOM SCORE
|
||
; CALLA RANDU
|
||
; MOVE A0,A1
|
||
; MOVI 1000,A0
|
||
; MPYU A0,A1
|
||
;; CALLA SCORE
|
||
; INC A1 ;FLAG UP MOTION
|
||
|
||
MOVI 1000,A1
|
||
CALLA SCORE
|
||
|
||
CALLA COUNT_PLAYER_KILL
|
||
|
||
; MOVI 1001,A1
|
||
; CLR A9 ;NO OFFSET
|
||
; CALLA PRINT_SCORE
|
||
|
||
*A8 = PTR TO OBJECT BEING KILLED
|
||
NG_NOSCORE
|
||
; SOUND1 SND_BODY_THUD
|
||
MOVK NUM_GRUNT_SNDS,A0 ;GRUNT LIKE A PIG!
|
||
CALLA RAND0
|
||
SLL 5,A0
|
||
ADDI GRUNT_HIT_TBL,A0
|
||
MOVE *A0,A0,L
|
||
CALLA ONESND
|
||
; CALLA ONESND_Z
|
||
|
||
CLR A14 ;STOP IT!
|
||
MOVE A14,*A8(OXVEL),L
|
||
MOVE A14,*A8(OYVEL),L
|
||
MOVE A14,*A8(OZVEL),L
|
||
;NOTE: DO NOT CLEAR OYACCEL!
|
||
|
||
MOVE *A8(ODEATHCALL),A14,L
|
||
JrZ SKP_DTHCALL2
|
||
MMTM SP,A6,A8
|
||
CALL A14
|
||
MMFM SP,A6,A8
|
||
SKP_DTHCALL2:
|
||
|
||
MOVE *A8(OEDEATH),A14,L
|
||
JRZ NG_ANIM ;BR=NO SPECIAL DEATH
|
||
JUMP A14
|
||
NG_ANIM
|
||
MOVI NONBOY_SIDE_RUN_DEATH_ANIM,A1 ;DEFAULT SIDEWAYS DEATH ANIM
|
||
BTST B_SIDE,A6
|
||
JANZ STRT_ANIM ;BR=HE'S NOT FACING YOU
|
||
MOVI NONBOY_HEADON_DEATH_ANIM,A1 ;OTHER DEATH ANIM
|
||
JAUC STRT_ANIM
|
||
NG_DEAD
|
||
RETS
|
||
NG_STILL_ALIVE
|
||
MOVB A14,*A8(OHITS) ;NUMBER OF HITS LEFT
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_HEADON_DEATH_SETUP *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_HEADON_DEATH_SETUP
|
||
MOVK 3,A1 ;TURN OFF 3 PARTS MAXIMUM
|
||
AHDS_LUPE
|
||
MOVE *A8(OPARTS),A8,L
|
||
JRZ AHDS_DONE ;BR=NO MORE PARTS
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_SHAD,A14
|
||
JRNZ AHDS_DONE ;BR=DON'T DO NO SHADOWS
|
||
CALLA OBJ_OFF
|
||
DEC A1
|
||
JRZ AHDS_DONE ;BR=NO MORE PARTS
|
||
JRUC AHDS_LUPE
|
||
AHDS_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* NONBOY_ROCKET_COLL - Collision vector for Player rocket bomb. *
|
||
* A0 = Ptr to rocket object *
|
||
* A8 = Ptr to NON-BOY object *
|
||
* *
|
||
**************************************************************************
|
||
NONBOY_ROCKET_COLL
|
||
MOVE *A0(RL_INTENDED_OBJ),A14,L
|
||
CMP A14,A8 ;Is this the object we are after?
|
||
JRNE NRC_X ;BR = No
|
||
|
||
NONTHR_ROCKET_COLL:
|
||
CALLA GET_HEAD_PART
|
||
ORIM M_ATEROCKET,*A8(OEFLAGS),W ;Flag the rocket touch
|
||
MOVE A0,*A8(ONATEROCKET),L ;SAVE ROCKET OBJECT
|
||
NRC_X
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* NONBOY_EXPLOSION_COLL - Collision vector for Player explosion. *
|
||
* A0 = Ptr to explosion object *
|
||
* A8 = Ptr to NON-BOY object *
|
||
* *
|
||
**************************************************************************
|
||
NONBOY_EXPLOSION_COLL
|
||
CALLA GET_HEAD_PART
|
||
MOVE *A8(OEFLAGS),A14,W
|
||
BTST B_ATEROCKET,A14 ;Did he get hit by a rocket?
|
||
JRZ NONBOY_COLLVECT ;BR = No, just do generic for now.
|
||
|
||
NONTHR_COLLVECT:
|
||
CALLA ALL_COLLS_OFF ;Turn all collisions off now!
|
||
|
||
MOVE A0,A5
|
||
|
||
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
|
||
CALLA POID_TO_PDATA ;GET PDATA IN A2
|
||
|
||
SWAP A5,A8
|
||
CALLA GET_HEAD_PART
|
||
CALLA OBJ_OFF_MULTI
|
||
SWAP A5,A8
|
||
|
||
MOVI NONBOY_EXPLODE_ANIM,A1 ;Die like a brave
|
||
JRUC NEC_ANIM
|
||
|
||
NONBOY_SBOMB_CARNAGE
|
||
MOVI ANIM_NON_SBOMB_EXPLODE,A1
|
||
NEC_ANIM
|
||
CALLA STRT_ANIM
|
||
MOVE A2,*A8(OPLAYER),L ;Hang on to this address
|
||
|
||
MOVI 1000,A1
|
||
CALLA SCORE ;Explosions are always good for points
|
||
|
||
JAUC COUNT_PLAYER_KILL
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_DUDE - CHECK UP ON ENEMY AND MAKE SURE HE'S ON SCREEN *
|
||
* *
|
||
* PASS: *
|
||
* A8 = PTR TO OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_CHECK_DUDE
|
||
MOVE *A8(OZVAL),A2,L
|
||
move @ZBASE,a14,L
|
||
sub a14,a2
|
||
; CMPI ZMAX_KLUDGE,A2
|
||
; JALT DEL_ENEMY_NOAUD ;BR = ENEMY IS BEHIND OF PLAYERS
|
||
CMPI ZMAX_REAL,A2
|
||
JAGE ACD_CHECK_FAR ;BR = ENEMY IN FRONT OF PLAYERS
|
||
MOVE *A8(OEFLAGS),A14,W
|
||
BTST B_SIDE,A14
|
||
JANZ DEL_ENEMY_NOAUD ;BR=HE'S SIDEWAYS!
|
||
MOVE @BIGBOYS,A14,W ;FLAG WE PASSED A HEADON NONBOY
|
||
INC A14
|
||
MOVE A14,@BIGBOYS,W
|
||
JAUC DEL_ENEMY_NOAUD
|
||
ACD_CHECK_FAR
|
||
MOVE @ZFAR,A14,L
|
||
CMP A14,A2
|
||
JAGT DEL_ENEMY_NOAUD ;BR = ENEMY IS FAR AWAY
|
||
|
||
CALLA SCRTST
|
||
JREQ ACD_OI ;BR = ON DA SCREEN
|
||
|
||
MOVB *A8(OSCRNOFFCNT),A0
|
||
; JRN ACD_CHECK_ON ;BR = NOT ON SCREEN YET
|
||
;
|
||
;ACD_CONT
|
||
; MOVB *A8(OFLAGS),A14 ;THIS ONLY CHECKS X
|
||
; JRN ACD_OFF ;BR = OFSCRN IS SET
|
||
;ACD_CHECK_ON
|
||
; CALLA SCRTST
|
||
; JREQ ACD_OI ;BR = ON DA SCREEN
|
||
;ACD_OFF
|
||
; MOVE A0,A0
|
||
JRN ACD_DONE ;BR = NOT ON SCREEN YET
|
||
DEC A0
|
||
JAZ DEL_ENEMY_NOAUD ;BR = OFF JUST ONCE TO MANY
|
||
JRUC ACD_SET
|
||
ACD_OI
|
||
MOVE A0,A0
|
||
JRNN ACD_DONE ;BR = BEEN ON SCREEN MORE THAN ONCE
|
||
NEG A0
|
||
ACD_SET
|
||
MOVB A0,*A8(OSCRNOFFCNT)
|
||
ACD_DONE
|
||
MOVE *A8(OANIMCHK),A14,L
|
||
JRZ ACD_NOCHK ;BR = NO SPECIAL CHECK
|
||
JUMP A14
|
||
ACD_NOCHK
|
||
SETZ ;FOR A_CHECK_DUDE_FIRE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_DUDE_FIRE - CHECK UP ON ENEMY AND MAKE SURE HE'S ON SCREEN *
|
||
* AND THEN CHECK IF HE CAN FIRE HIS GUN *
|
||
* *
|
||
* PASS: *
|
||
* A8 = PTR TO OBJECT *
|
||
* *
|
||
* RETURN: *
|
||
* Z IS SET IF HE DIDN'T FIRE HIS GUN *
|
||
* Z IS CLEAR IF HE DID *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_CHECK_DUDE_FIRE
|
||
; MOVE *A8(OZVAL),A2,L
|
||
; move @ZBASE,a14,L
|
||
; sub a14,a2
|
||
; CMPI ZMAX_REAL,A2
|
||
; JALT DEL_ENEMY_NOAUD ;BR = ENEMY IS BEHIND OF PLAYERS
|
||
; MOVE @ZFAR,A14,L
|
||
; CMP A14,A2
|
||
; JAGT DEL_ENEMY_NOAUD ;BR = ENEMY IS FAR AWAY
|
||
|
||
MOVI [-80,-24],A3 ;FIRING OFFSET
|
||
CLR A5
|
||
MOVB *A8(OSHOOTCNT),A1
|
||
JRN ACDF_ABORT ;BR = NO SHOOTING ALLOWED
|
||
|
||
DEC A1
|
||
JRP ACDF_ABORT ;BR = CAN'T SHOOT YET
|
||
|
||
; JRNN ACDF_NORM ;BR = NORMAL ATTACK
|
||
; CALLA CK_PLAYER_HIT
|
||
; JRZ A_CHECK_DUDE ;BR = NO HIT ON PLAYERS
|
||
;; CALLR CHECK_OVERLAP
|
||
;; JRNZ A_CHECK_DUDE ;BR = OVERLAP ON ENEMIES
|
||
; CLR A0
|
||
; JRUC ACDF_SET
|
||
;ACDF_NORM
|
||
CALLA CK_PLAYER_HIT
|
||
; JRNZ ACDF_SHOOT ;BR=HIT ON PLAYER
|
||
JRC ACDF_NEW_COUNT ;BR=HE'S OFF SCREEN OR BLOCKED
|
||
|
||
MOVE @NONBOY_SHOOT_CHANCE,A0,W
|
||
NEG A0
|
||
ADDI 1024,A0
|
||
CALLA RANDPER
|
||
JRC ACDF_NEW_COUNT ;BR=DON'T SHOOT
|
||
|
||
; JRZ ACDF_NEW_COUNT ;BR = NO HIT ON PLAYERS
|
||
;; CALLR CHECK_OVERLAP
|
||
;; JRNZ ACDF_NEW_COUNT ;BR = OVERLAP ON ENEMIES
|
||
ACDF_SHOOT
|
||
MOVK 10,A1
|
||
MOVI 100,A0
|
||
CALLA RANGRAND
|
||
ACDF_SET
|
||
MOVB A0,*A8(OSHOOTCNT) ;SET RANDOM MAX FIRE CYCLES
|
||
CLR A1
|
||
MOVE A1,*A8(OXVEL),L ;STOP
|
||
MOVE A1,*A8(OYVEL),L ;STOP
|
||
MOVE A1,*A8(OZVEL),L ;STOP
|
||
|
||
MOVB A1,*A8(AnimSlp)
|
||
MOVI NONBOY_SIDE_TO_HEADON_SHOOT_ANIM,A1
|
||
MOVE *A8(OEFLAGS),A14,W
|
||
BTST B_SIDE,A14
|
||
JRNZ ACDF_SIDE ;BR=HE'S SIDEWAYS!
|
||
MOVI NONBOY_HEADON_SHOOT_ANIM,A1
|
||
ACDF_SIDE
|
||
MOVE A1,*A8(AnimFrm),L ;START SHOOT ANIMATION
|
||
RETS ;Z IS CLEAR
|
||
|
||
ACDF_NEW_COUNT
|
||
MOVK 3,A1 ;GET RANDOM SHOOT CHECK COUNT
|
||
MOVK 10,A0
|
||
CALLA RANGRAND
|
||
MOVE A0,A1
|
||
ACDF_ABORT
|
||
MOVB A1,*A8(OSHOOTCNT) ;SAVE SHOOT COUNT
|
||
JRUC A_CHECK_DUDE ;CHECK IF HE'S OFF SCREEN
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CHECK_OVERLAP - CHECK FOR OVERLAPPING ENEMIES *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
* RETURN: *
|
||
* Z IS CLEAR IF OVERLAP *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CHECK_OVERLAP
|
||
MMTM SP,A0,A1,A2,A3,A4,A7
|
||
|
||
MOVE *A8(ODAG),A0,L
|
||
MOVE *A8(OANIOFF),A14,L
|
||
ADDXY A14,A0 ;ANIP IN SCREEN COORDS
|
||
|
||
MOVE *A8(OZVAL),A7,L
|
||
MOVE @ZBASE,A14,L
|
||
SUB A14,A7
|
||
SRA Z2SCALE,A7
|
||
MOVI (33-10) << 8,A3 ;X ANIOFF
|
||
DIVU A7,A3
|
||
SUBXY A3,A0
|
||
MOVI 110 << 8,A3 ;Y ANIOFF
|
||
DIVU A7,A3
|
||
SLL 16,A3
|
||
SUBXY A3,A0 ;UPPER LEFT
|
||
|
||
MOVE A0,A1
|
||
|
||
MOVE A3,A14
|
||
ADDXY A3,A1 ;ADD Y SIZE
|
||
|
||
MOVI (56-10) << 8,A3 ;X SIZE
|
||
DIVU A7,A3
|
||
ADDXY A3,A1 ;BOTTOM RIGHT
|
||
MOVX A3,A14
|
||
; MOVI 110 << 8,A3 ;Y SIZE
|
||
; DIVU A7,A3
|
||
; SLL 16,A3
|
||
; ADDXY A3,A1 ;BOTTOM RIGHT
|
||
|
||
MOVE @SCRNTL,A3,L ;GET SCREEN UPPER LEFT
|
||
CMPXY A3,A0 ;IS THE UPPER LEFT INSIDE?
|
||
JRYLT CE_FAIL ;BR=NO
|
||
JRXLT CE_FAIL ;BR=NO
|
||
|
||
MOVE @SCRNBR,A2,L ;GET SCREEN BOTTOM RIGHT
|
||
CMPXY A2,A1 ;IS THE BOTTOM RIGHT INSIDE?
|
||
JRYGT CE_FAIL ;BR=NO
|
||
JRXGT CE_FAIL ;BR=NO
|
||
|
||
MOVB *A8(OSHOOTCNT),A7
|
||
JRZ CE_FULL ;BR=USE FULL SIZE
|
||
|
||
SRL 1,A14 ;USE QUARTER OF FULL ON SHOOTING SIDE
|
||
ANDNI 08000H,A14 ;DIVIDE [Y,X] BY 2
|
||
MOVE *A8(OCTRL),A7,W
|
||
BTST B_FLIPH,A7
|
||
JRZ CE_NOFLIP ;BR=NO FLIP
|
||
CLR A7
|
||
MOVX A14,A7
|
||
ADDXY A7,A0 ;ADD HALF X SIZE FOR NEW UPPER LEFT
|
||
CE_NOFLIP
|
||
MOVE A0,A1
|
||
ADDXY A14,A1 ;NEW BOTTOM RIGHT
|
||
CE_FULL
|
||
MOVE *A8(OZVAL),A3,L ;SORT BY Z AND WE DON'T HAVE TO DO THIS!
|
||
|
||
MOVI (SUPP_2 >> (SR_SUPP-5)) + SUPPLSTS - OSLINK,A7
|
||
CE_LUPE
|
||
MOVE *A7(OSLINK),A7,L
|
||
JRZ CE_DONE ;BR=END OF SUPP LIST
|
||
CMP A8,A7
|
||
JREQ CE_LUPE ;BR=THIS IS THE OBJECT WE'RE TESTING
|
||
|
||
MOVE *A7(ODAG),A2,L
|
||
|
||
; MOVE *A7(OSIZE),A14,L
|
||
;
|
||
; MOVB *A8(OSHOOTCNT),A4
|
||
; JRZ CE_NOFLIPH
|
||
;
|
||
; SRL 1,A14
|
||
; ANDNI 08000H,A14
|
||
; MOVE *A7(OCTRL),A4,W
|
||
; BTST B_FLIPH,A4
|
||
; JRZ CE_NOFLIPH
|
||
; CLR A4
|
||
; MOVX A14,A4
|
||
; ADDXY A4,A2
|
||
;CE_NOFLIPH
|
||
|
||
CMPXY A1,A2 ;IS UPPER LEFT >= BOTTOM RIGHT?
|
||
JRYGE CE_LUPE ;BR=YES FOR Y
|
||
JRXGE CE_LUPE ;BR=YES FOR X
|
||
|
||
MOVE *A7(OSIZE),A14,L
|
||
ADDXY A2,A14 ;GET BOTTOM RIGHT OF OBJECT
|
||
CMPXY A0,A14 ;IS BOTTOM RIGHT <= UPPER LEFT?
|
||
JRYLE CE_LUPE ;BR=YES FOR Y
|
||
JRXLE CE_LUPE ;BR=YES FOR X
|
||
|
||
MOVE *A7(OZVAL),A14,L
|
||
CMP A3,A14
|
||
JRGT CE_LUPE ;BR=IT'S BEHIND THE TEST OBJECT
|
||
CE_FAIL
|
||
CLRZ ;WE'VE FAILED!
|
||
CE_DONE
|
||
MMFM SP,A0,A1,A2,A3,A4,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_PART_FIRE_FNC - ANIM FUNC, FOR ENEMY GUN PART FIRE. *
|
||
* *
|
||
* PASS: *
|
||
* A8 = PTR TO ARM PART DOING THE FIRING. *
|
||
* AARG+,L = [Y,X] FIRING OFFSET. *
|
||
* *
|
||
**************************************************************************
|
||
A_PART_FIRE_FNC
|
||
MOVE *A8(OFLAGS),A14,W ;IS THIS OBJECT DEAD?
|
||
BTST B_DEAD,A14
|
||
JRNZ PFF_X ;BR = YES
|
||
|
||
CALLA GETAFARG_LONG ;GET THE FIRING OFFSET
|
||
MOVE A0,A3
|
||
CALLA EGUN_FLASH_MULTI ;MAKE A GUN FLASH
|
||
|
||
MOVE @BASE_HIT,A5,W
|
||
SLL 4,A5
|
||
; MOVI [1,8000H],A5
|
||
|
||
MOVE @ENEMY_HITALL,A14,W
|
||
JRZ PFF_GO ;BR=CHECK PLAYERS
|
||
DEC A14
|
||
JRZ AFF_HIT ;BR=HIT EVERYBODY
|
||
CLR A5 ;NO DAMAGE
|
||
PFF_GO
|
||
CLR A1
|
||
CALLA CK_PLAYER_HIT
|
||
JRC PFF_NOHIT_No_Sound ;He did'nt hit because he was not visible
|
||
; JRNZ PFF_HIT ;BR = Successful hit on Player(s)
|
||
; JRNC PFF_NOHIT ;BR = No hit, but he was visible
|
||
; jruc PFF_NOHIT_No_Sound ;He did'nt hit because he was not visible
|
||
PFF_HIT
|
||
MOVI M_ATTACK,A1
|
||
PFF_NOHIT
|
||
SOUNDZ SND_NONBOY_FIRE
|
||
PFF_NOHIT_No_Sound
|
||
MOVE *A8(OEFLAGS),A14,W ;SET RESULT OF ATTACK
|
||
ANDNI M_ATTACK,A14
|
||
OR A1,A14
|
||
MOVE A14,*A8(OEFLAGS),W
|
||
PFF_X
|
||
RETS
|
||
|
||
|
||
A_ALL_FIRE_FNC
|
||
MOVE *A8(OFLAGS),A14,W ;IS THIS OBJECT DEAD?
|
||
BTST B_DEAD,A14
|
||
JRNZ PFF_X ;BR = YES
|
||
|
||
CALLA GETAFARG_LONG ;GET THE FIRING OFFSET
|
||
MOVE A0,A3
|
||
CALLA EGUN_FLASH_MULTI ;MAKE A GUN FLASH
|
||
AFF_HIT
|
||
MOVE @BASE_HIT,A5,W
|
||
SLL 4,A5
|
||
; MOVI [1,8000H],A5
|
||
|
||
ALLPLYR PLAYER_HIT ;HIT 'EM ALL
|
||
|
||
jruc PFF_HIT
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_REPEAT_FIRE - DETERMINES IF ENEMY FIRES AGAIN *
|
||
* *
|
||
* PASS: *
|
||
* A8 = PTR TO OBJECT *
|
||
* AARG+,L = BEGINNING OF FIRE FRAMES *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_REPEAT_FIRE
|
||
MOVE *A8(OEFLAGS),A1,W
|
||
|
||
MOVB *A8(OSHOOTCNT),A2
|
||
DEC A2
|
||
JRZ ARF_NOFIRE ;BR = MAX FIRE TIME ELAPSED
|
||
|
||
; JRUC ARF_STORE ;IGNORE LAST ATTACK
|
||
|
||
MOVE A2,A2
|
||
JRNN ARF_NORM
|
||
BTST B_ATTACK,A1
|
||
JRNZ ARF_ATTACK ;BR = LAST ATTACK SUCCEEDED
|
||
CLR A0
|
||
JRUC ARF_SET
|
||
ARF_NORM
|
||
BTST B_ATTACK,A1
|
||
JRZ ARF_DONE ;BR = LAST ATTACK FAILED
|
||
ARF_STORE
|
||
MOVB A2,*A8(OSHOOTCNT)
|
||
ARF_ATTACK
|
||
CALLA GETAFARG_LONG ;BR = GET FIRST FIRE FRAME
|
||
MOVE A0,*A8(AnimFrm),L
|
||
JRUC A_CHECK_DUDE ;CHECK IF HE'S ON SCREEN
|
||
ARF_NOFIRE
|
||
ANDNI M_ATTACK,A1
|
||
MOVE A1,*A8(OEFLAGS),W ;CLEAR ATTACK
|
||
ARF_DONE
|
||
MOVK 3,A1
|
||
MOVK 10,A0
|
||
CALLA RANGRAND
|
||
ARF_SET
|
||
MOVB A0,*A8(OSHOOTCNT) ;RANDOM SHOOTING CHECK COUNT
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SET_HRUNVEL - SET ENEMY'S ZVEL *
|
||
* *
|
||
* PASS: *
|
||
* A8 = PTR TO OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_SET_HRUNVEL
|
||
CLR A14
|
||
MOVE A14,*A8(OXVEL),L
|
||
MOVE *A8(OHRUNVEL),*A8(OZVEL),L
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SET_SRUNVEL - SET ENEMY'S OXVEL *
|
||
* *
|
||
* PASS: *
|
||
* A8 = PTR TO OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_SET_SRUNVEL
|
||
CLR A14
|
||
MOVE A14,*A8(OZVEL),L
|
||
MOVE *A8(OSRUNVEL),A0,L
|
||
MOVE *A8(OCTRL),A14,W
|
||
BTST B_FLIPH,A14
|
||
JRZ ASS_OK ;BR = NO FLIP
|
||
NEG A0
|
||
ASS_OK
|
||
MOVE A0,*A8(OXVEL),L
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_LAUNCH_ENEMY - SEND ENEMY UP INTO THE AIR *
|
||
* *
|
||
* PASS: *
|
||
* A8 = PTR TO OBJECT *
|
||
* AARG+,W = GRAVITY (OYACCEL) *
|
||
* AARG+,L = INITIAL OYVEL *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_LAUNCH_ENEMY
|
||
MOVE *A8(OYACCEL),A14,W
|
||
JRZ ALE_NO_DROP ;BR=NOT A DROPPING GUY
|
||
|
||
.if DEBUG
|
||
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_GCOLL,A14
|
||
LOCKON Z
|
||
|
||
.endif
|
||
|
||
MOVE *A8(OGRNDOFF),A0,L
|
||
ADDI -26 << 15,A0 ;OFFSET HIM INTO THE GROUND A LITTLE
|
||
MOVE A0,*A8(OGRNDOFF),L
|
||
RETS
|
||
ALE_NO_DROP
|
||
MOVE *A8(OFLAGS),A14,W
|
||
ORI M_GCOLL,A14 ;SET FOR GROUND COLLISION
|
||
MOVE A14,*A8(OFLAGS),W
|
||
|
||
MOVE @YWORLD,A0,L
|
||
MOVE *A8(OYVAL),A14,L
|
||
SUB A14,A0 ;COMPUTE HIS GROUND OFFSET
|
||
|
||
MOVE @WORLD_GRNDOFF,A14,L
|
||
JRZ ALE_GO
|
||
CLR A0 ;USE THIS GROUND OFFSET
|
||
ALE_GO
|
||
|
||
ADDI -26 << 15,A0 ;OFFSET HIM INTO THE GROUND A LITTLE
|
||
MOVE A0,*A8(OGRNDOFF),L
|
||
CALLA GETAFARG_WORD ;GET OYACCEL
|
||
MOVE A0,*A8(OYACCEL),W
|
||
CALLA GETAFARG_LONG ;GET OYVEL
|
||
MOVE A0,*A8(OYVEL),L
|
||
ALE_ABORT
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_GROUND - CHECK IF AN ENEMY HIT THE GROUND *
|
||
* *
|
||
* PASS: *
|
||
* A8 = PTR TO OBJECT *
|
||
* AARG+,L = ADDRESS TO JUMP IF NO IMPACT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_CHECK_GROUND
|
||
MOVE *A8(OFLAGS),A14,W ;NO MORE GROUND COLLISION
|
||
BTST B_GCOLL,A14
|
||
JRZ ACG_DONE
|
||
|
||
CALLA GETAFARG_LONG ;JUMP HERE!
|
||
; JRZ ACG_ABORT
|
||
MOVE A0,*A8(AnimFrm),L
|
||
RETS
|
||
ACG_DONE
|
||
MOVE *A8(OFLAGS),A14,W ;IS THIS OBJECT DEAD?
|
||
BTST B_DEAD,A14
|
||
JRNZ ACG_ABORT ;BR = YES
|
||
|
||
MOVE @YWORLD,A0,L ;NEW GROUND OFFSET
|
||
MOVE *A8(OYVAL),A14,L
|
||
SUB A14,A0
|
||
MOVE A0,*A8(OGRNDOFF),L
|
||
ACG_ABORT
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_TOGGLE_OEFLAGS - TOGGLE BITS IN OEFLAGS *
|
||
* *
|
||
* PASS: *
|
||
* A8 = PTR TO OBJECT *
|
||
* AARG+,W = BITS TO TOGGLE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_TOGGLE_OEFLAGS
|
||
CALLA GETAFARG_WORD
|
||
MOVE *A8(OEFLAGS),A1,W
|
||
XOR A0,A1
|
||
MOVE A1,*A8(OEFLAGS),W
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SET_OEFLAGS - JUST SET OEFLAGS *
|
||
* *
|
||
* PASS: *
|
||
* A8 = PTR TO OBJECT *
|
||
* AARG+,W = BITS TO SET *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_SET_OEFLAGS
|
||
CALLA GETAFARG_WORD
|
||
MOVE A0,*A8(OEFLAGS),W
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_DEL_NONBOY - DELETE A NONBOY *
|
||
* *
|
||
* PASS: *
|
||
* A8 = PTR TO OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_DEL_NONBOY
|
||
MOVE *A8(OPLINK),A0,L
|
||
JRZ ADN_NOPROC
|
||
CLR A14
|
||
MOVE A14,*A8(OPLINK),L
|
||
CALLA KILL
|
||
ADN_NOPROC
|
||
MOVE *A8(OPLAYER),A2,L
|
||
JAZ DEL_ENEMY_NOAUD
|
||
JAUC DELETE_ENEMY
|
||
|
||
**************************************************************************
|
||
**************************************************************************
|
||
**************************************************************************
|
||
**************************************************************************
|
||
|
||
NONBOY_SIDE_INIT
|
||
.byte 4, 0, 0, 1 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long P_NONBOYY ;IMGPAL
|
||
.word OID_NONBOY, OM_COLL ;OID, GLOBAL_OPTIONS
|
||
.LONG NONBOY_CVECT
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF
|
||
* .word OPTIONS
|
||
LWWWW G_H3RUN__C1, DMAWNZ, 0, 0, OM_GUNV
|
||
.LONG NONBOY_GUNVECT
|
||
LWWWW G_T3RUN__C1, DMAWNZ, 0, 0, OM_PRVGUNV
|
||
LWWWW G_L3RUN__C1, DMAWNZ, 0, 0, OM_PRVGUNV
|
||
LWWWW G_Z3RUN__C1, DMAWNZ, 0, 0, OM_PRVGUNV
|
||
|
||
NONBOY_DROP_INIT
|
||
.byte 4, 0, 0, 1 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long P_NONBOYY ;IMGPAL
|
||
.word OID_NONBOY, OM_COLL ;OID, GLOBAL_OPTIONS
|
||
.LONG LAND_CVECT
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF
|
||
* .word OPTIONS
|
||
LWWWW G_H1JUMP_A4, DMAWNZ, M_GCOLL, 0, OM_GUNV
|
||
.LONG DUMRETS
|
||
LWWWW G_T1JUMP_A4, DMAWNZ, 0, 0, OM_PRVGUNV
|
||
LWWWW G_L1JUMP_A4, DMAWNZ, 0, 0, OM_PRVGUNV
|
||
LWWWW G_L1JUMP_A4, DMAWNZ, M_NODISP, 0, OM_PRVGUNV
|
||
|
||
NONBOY_HEADON_INIT
|
||
.byte 4, 0, 0, 1 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long P_NONBOYY ;IMGPAL
|
||
.word OID_NONBOY, OM_COLL ;OID, GLOBAL_OPTIONS
|
||
.LONG NONBOY_CVECT
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF
|
||
* .word OPTIONS
|
||
LWWWW G_H1RUN__A1, DMAWNZ, 0, 0, OM_GUNV
|
||
.LONG NONBOY_GUNVECT
|
||
LWWWW G_T1RUN__A1, DMAWNZ, 0, 0, OM_PRVGUNV
|
||
LWWWW G_L1RUN__A1, DMAWNZ, 0, 0, OM_PRVGUNV
|
||
LWWWW G_L1RUN__A1, DMAWNZ, M_NODISP, 0, OM_PRVGUNV
|
||
|
||
NONBOY_SHOOTER_INIT
|
||
.byte 1, 0, 0, 1 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long P_NONBOYY ;IMGPAL
|
||
.word OID_NONBOY, OM_COLL ;OID, GLOBAL_OPTIONS
|
||
.LONG NONBOY_CVECT
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF
|
||
* .word OPTIONS
|
||
LWWWW G_B1SHOOTA1, DMAWNZ, 0, 0, OM_GUNV
|
||
.LONG NONBOY_GUNVECT
|
||
|
||
;NONBOY_SHOOTER2_INIT
|
||
; .byte 1, 0, 0, 1 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
; .long P_NONBOYY ;IMGPAL
|
||
; .word OID_NONBOY, OM_COLL ;OID, GLOBAL_OPTIONS
|
||
; .LONG NONBOY_CVECT
|
||
;* .long IMG
|
||
;* .word OCTRL, OFLAGS, OZOFF
|
||
;* .word OPTIONS
|
||
; LWWWW G_B1SHTCOP1, DMAWNZ, 0, 0, OM_GUNV
|
||
; .LONG NONBOY_GUNVECT
|
||
|
||
|
||
;DIAG_PBOY_INIT
|
||
; .byte 1, 0, 0, 1 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
; .long P_NONBOYY ;IMGPAL
|
||
; .word OID_NONBOY, OM_COLL ;OID, GLOBAL_OPTIONS
|
||
; .LONG NONBOY_CVECT
|
||
;* .long IMG
|
||
;* .word OCTRL, OFLAGS, OZOFF
|
||
;* .word OPTIONS
|
||
; LWWWW G_B2RUN__B1, DMAWNZ, 0, 0, OM_GUNV
|
||
; .LONG NONBOY_GUNVECT
|
||
|
||
|
||
NONBOY_SIDE_TO_HEAD_ANIM
|
||
LW G_H2RUN__B5,1|AMulti
|
||
LW G_T2RUN__B5,1|AMulti
|
||
LW G_L2RUN__B5,1|AMulti
|
||
LWL G_Z2RUN__B5,4|AFunc,OBJ_ON
|
||
|
||
LW G_H2RUN__B4,1|AMulti
|
||
LW G_T2RUN__B4,1|AMulti
|
||
LW G_L2RUN__B4,1|AMulti
|
||
LW G_A2RUN__B4,4
|
||
|
||
LWL G_H1RUN__A1,1|AMulti|AFunc,A_SET_HRUNVEL
|
||
LW G_T1RUN__A1,1|AMulti
|
||
LW G_L1RUN__A1,1|AMulti
|
||
LWL 1,1|AFunc,OBJ_OFF
|
||
|
||
NONBOY_HEADON_RUN_ANIM
|
||
LWL G_H1RUN__A1,1|AMulti|AFunc,A_CHECK_DUDE
|
||
LW G_T1RUN__A1,1|AMulti
|
||
LW G_L1RUN__A1,HEADON_TIME
|
||
|
||
LWL G_H1RUN__A2,1|AMulti|AFunc,A_CHECK_DUDE_FIRE
|
||
LW G_T1RUN__A2,1|AMulti
|
||
LW G_L1RUN__A2,HEADON_TIME
|
||
|
||
LWL G_H1RUN__A3,1|AMulti|AFunc,A_CHECK_DUDE
|
||
LW G_T1RUN__A3,1|AMulti
|
||
LW G_L1RUN__A3,HEADON_TIME
|
||
|
||
LWL G_H1RUN__A4,1|AMulti|AFunc,A_CHECK_DUDE_FIRE
|
||
LW G_T1RUN__A4,1|AMulti
|
||
LW G_L1RUN__A4,HEADON_TIME
|
||
|
||
LWL G_H1RUN__A5,1|AMulti|AFunc,A_CHECK_DUDE
|
||
LW G_T1RUN__A5,1|AMulti
|
||
LW G_L1RUN__A5,HEADON_TIME
|
||
|
||
LWL G_H1RUN__A6,1|AMulti|AFunc,A_CHECK_DUDE_FIRE
|
||
LW G_T1RUN__A6,1|AMulti
|
||
LW G_L1RUN__A6,HEADON_TIME
|
||
|
||
LWL G_H1RUN__A7,1|AMulti|AFunc,A_CHECK_DUDE
|
||
LW G_T1RUN__A7,1|AMulti
|
||
LW G_L1RUN__A7,HEADON_TIME
|
||
|
||
.long 0
|
||
|
||
NONBOY_HEAD_TO_SIDE_ANIM
|
||
LW G_H2RUN__B4,1|AMulti
|
||
LW G_T2RUN__B4,1|AMulti
|
||
LW G_L2RUN__B4,1|AMulti
|
||
LWL G_A2RUN__B4,4|AFunc,OBJ_ON
|
||
|
||
LW G_H2RUN__B5,1|AMulti
|
||
LW G_T2RUN__B5,1|AMulti
|
||
LW G_L2RUN__B5,1|AMulti
|
||
LW G_Z2RUN__B5,3
|
||
|
||
LWL 1,1|AFunc,A_SET_SRUNVEL
|
||
|
||
NONBOY_SIDE_RUN_ANIM
|
||
LWL G_H3RUN__C1,1|AMulti|AFunc,A_CHECK_DUDE
|
||
LW G_T3RUN__C1,1|AMulti
|
||
LW G_L3RUN__C1,1|AMulti
|
||
LW G_Z3RUN__C1,SIDERUN_TIME
|
||
|
||
LWL G_H3RUN__C2,1|AMulti|AFunc,A_CHECK_DUDE_FIRE
|
||
LW G_T3RUN__C2,1|AMulti
|
||
LW G_L3RUN__C2,1|AMulti
|
||
LW G_Z3RUN__C2,SIDERUN_TIME
|
||
|
||
LWL G_H3RUN__C3,1|AMulti|AFunc,A_CHECK_DUDE
|
||
LW G_T3RUN__C3,1|AMulti
|
||
LW G_L3RUN__C3,1|AMulti
|
||
LW G_Z3RUN__C3,SIDERUN_TIME
|
||
|
||
LWL G_H3RUN__C4,1|AMulti|AFunc,A_CHECK_DUDE_FIRE
|
||
LW G_T3RUN__C4,1|AMulti
|
||
LW G_L3RUN__C4,1|AMulti
|
||
LW G_Z3RUN__C4,SIDERUN_TIME
|
||
|
||
LWL G_H3RUN__C5,1|AMulti|AFunc,A_CHECK_DUDE
|
||
LW G_T3RUN__C5,1|AMulti
|
||
LW G_L3RUN__C5,1|AMulti
|
||
LW G_Z3RUN__C5,SIDERUN_TIME
|
||
|
||
LWL G_H3RUN__C6,1|AMulti|AFunc,A_CHECK_DUDE_FIRE
|
||
LW G_T3RUN__C6,1|AMulti
|
||
LW G_L3RUN__C6,1|AMulti
|
||
LW G_Z3RUN__C6,SIDERUN_TIME
|
||
|
||
LWL G_H3RUN__C7,1|AMulti|AFunc,A_CHECK_DUDE
|
||
LW G_T3RUN__C7,1|AMulti
|
||
LW G_L3RUN__C7,1|AMulti
|
||
LW G_Z3RUN__C7,SIDERUN_TIME
|
||
|
||
LWL G_H3RUN__C8,1|AMulti|AFunc,A_CHECK_DUDE_FIRE
|
||
LW G_T3RUN__C8,1|AMulti
|
||
LW G_L3RUN__C8,1|AMulti
|
||
LW G_Z3RUN__C8,SIDERUN_TIME
|
||
|
||
.long 0
|
||
|
||
|
||
NONBOY_SIDE_TO_HEADON_SHOOT_ANIM
|
||
|
||
LW G_H2RUN__B5,1|AMulti
|
||
LW G_T2RUN__B5,1|AMulti
|
||
LW G_L2RUN__B5,1|AMulti
|
||
LWL G_Z2RUN__B5,3|AFunc,OBJ_ON
|
||
|
||
LW G_H2RUN__B4,1|AMulti
|
||
LW G_T2RUN__B4,1|AMulti
|
||
LW G_L2RUN__B4,1|AMulti
|
||
LW G_A2RUN__B4,3
|
||
|
||
LW G_H1RxSH_A2,1|AMulti
|
||
LW G_T1RxSH_A2,1|AMulti
|
||
LW G_L1RxSH_A2,1|AMulti
|
||
LW G_A1RxSH_A2,3
|
||
|
||
LWLW G_H1RxSH_A3,1|AMulti|AFunc,A_TOGGLE_OEFLAGS+1,M_SIDE
|
||
LW G_T1RxSH_A3,1|AMulti
|
||
LW G_L1RxSH_A3,1|AMulti
|
||
LW G_Z1RxSH_A3,2
|
||
|
||
LWLW 1,1|AFunc,A_OFFSETZ+1,-1
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,5,20
|
||
LW 1,0
|
||
|
||
LW G_B1SHOOTA1,1|AMulti
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LWL 1,1|AFunc,OBJ_OFF
|
||
|
||
NONBOY_SIDE_FIRE_ANIM
|
||
LW G_B1SHOOTA1,1
|
||
LWLWW 1,5|AFunc,A_PART_FIRE_FNC+2,-25,-83
|
||
LW G_B1SHOOTA2,6
|
||
LWLL 1,1|AFunc,A_REPEAT_FIRE+2,NONBOY_SIDE_FIRE_ANIM
|
||
|
||
LWLW 1,1|AFunc,A_OFFSETZ+1,1
|
||
|
||
LWLW G_H1RxSH_A3,1|AMulti|AFunc,A_TOGGLE_OEFLAGS+1,M_SIDE
|
||
LWL G_T1RxSH_A3,1|AMulti|AFunc,OBJ_ON
|
||
LWL G_L1RxSH_A3,1|AMulti|AFunc,OBJ_ON
|
||
LWL G_Z1RxSH_A3,3|AFunc,OBJ_ON
|
||
|
||
LW G_H1RxSH_A2,1|AMulti
|
||
LW G_T1RxSH_A2,1|AMulti
|
||
LW G_L1RxSH_A2,1|AMulti
|
||
LW G_A1RxSH_A2,3
|
||
|
||
LW G_H2RUN__B4,1|AMulti
|
||
LW G_T2RUN__B4,1|AMulti
|
||
LW G_L2RUN__B4,1|AMulti
|
||
LW G_A2RUN__B4,3
|
||
|
||
LW G_H2RUN__B5,1|AMulti
|
||
LW G_T2RUN__B5,1|AMulti
|
||
LW G_L2RUN__B5,1|AMulti
|
||
LW G_Z2RUN__B5,2
|
||
|
||
LWL 1,1|AFunc,A_SET_SRUNVEL
|
||
.long 0
|
||
|
||
NONBOY_HEADON_SHOOT_ANIM
|
||
LW G_H1RxSH_A2,1|AMulti
|
||
LW G_T1RxSH_A2,1|AMulti
|
||
LW G_L1RxSH_A2,1|AMulti
|
||
LWL G_A1RxSH_A2,3|AFunc,OBJ_ON
|
||
|
||
LW G_H1RxSH_A3,1|AMulti
|
||
LW G_T1RxSH_A3,1|AMulti
|
||
LW G_L1RxSH_A3,1|AMulti
|
||
LW G_Z1RxSH_A3,2
|
||
|
||
LWLW 1,1|AFunc,A_OFFSETZ+1,-1
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,5,20
|
||
LW 1,0
|
||
|
||
LW G_B1SHOOTA1,1|AMulti
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LWL 1,1|AFunc,OBJ_OFF
|
||
|
||
NONBOY_HEADON_FIRE_ANIM
|
||
LW G_B1SHOOTA1,1
|
||
LWLWW 1,5|AFunc,A_PART_FIRE_FNC+2,-25,-83
|
||
LW G_B1SHOOTA2,6
|
||
LWLL 1,1|AFunc,A_REPEAT_FIRE+2,NONBOY_HEADON_FIRE_ANIM
|
||
|
||
LWLW 1,1|AFunc,A_OFFSETZ+1,1
|
||
|
||
LW G_H1RxSH_A3,1|AMulti
|
||
LWL G_T1RxSH_A3,1|AMulti|AFunc,OBJ_ON
|
||
LWL G_L1RxSH_A3,1|AMulti|AFunc,OBJ_ON
|
||
LWL G_Z1RxSH_A3,3|AFunc,OBJ_ON
|
||
|
||
LW G_H1RxSH_A2,1|AMulti
|
||
LW G_T1RxSH_A2,1|AMulti
|
||
LW G_L1RxSH_A2,1|AMulti
|
||
LW G_A1RxSH_A2,3
|
||
|
||
LWL G_H1RUN__A1,1|AMulti|AFunc,A_SET_HRUNVEL
|
||
LW G_T1RUN__A1,1|AMulti
|
||
LW G_L1RUN__A1,1|AMulti
|
||
LWL 1,1|AFunc,OBJ_OFF
|
||
|
||
.long 0
|
||
|
||
NONBOY_HEADON_DEATH_ANIM
|
||
; LW G_B1DEATHE1,4+HEADON_TIME_FUDGE
|
||
; LW G_B1DEATHE2,1+HEADON_TIME_FUDGE
|
||
; LWLWL 1,1|AFunc,A_LAUNCH_ENEMY+3,04000H,-020000H
|
||
|
||
LWL G_B1DEATHE2,1|AFunc,A_HEADON_DEATH_SETUP
|
||
LWLWL 1,HEADON_TIME_FUDGE+AFunc,A_LAUNCH_ENEMY+3,03000H,-028000H
|
||
LW G_B1DEATHE4,2+HEADON_TIME_FUDGE
|
||
LW G_B1DEATHE5,2+HEADON_TIME_FUDGE
|
||
|
||
NONBOY_HEADON_UP
|
||
LWLL 1,1|AFunc,A_CHECK_DOWN+2,NONBOY_HEADON_UP
|
||
|
||
LWL G_B1DEATHE6,1+HEADON_TIME_FUDGE+AFunc,DELETE_SHADOW
|
||
|
||
NONBOY_HEADON_HANGTIME
|
||
LWLL 1,2|AFunc,A_CHECK_GROUND+2,NONBOY_HEADON_HANGTIME
|
||
|
||
LW G_B1DEATHE8,4+HEADON_TIME_FUDGE
|
||
;NONBOY_HEADON_HANGTIME
|
||
; LWLL 1,2|AFunc,A_CHECK_GROUND+2,NONBOY_HEADON_HANGTIME
|
||
LW 1,60
|
||
LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
NONBOY_SIDE_RUN_DEATH_ANIM
|
||
LWLWL G_A3DEATHE4,1|AMulti|AFunc,A_LAUNCH_ENEMY+3,03000H,-028000H
|
||
LWL G_T3DEATHE4,1|AMulti|AFunc,OBJ_ON
|
||
LWL G_L3DEATHE4,1|AMulti|AFunc,OBJ_ON
|
||
LWL G_Z3DEATHE4,1+SIDE_TIME_FUDGE|AFunc,OBJ_ON
|
||
|
||
LW G_T3DEATHE5,1|AMulti
|
||
LW G_A3DEATHE5,1|AMulti
|
||
LW G_L3DEATHE5,1|AMulti
|
||
LWL 1,2+SIDE_TIME_FUDGE+AFunc,OBJ_OFF
|
||
|
||
LW G_T3DEATHE6,1|AMulti
|
||
LW G_A3DEATHE6,1|AMulti
|
||
LW G_L3DEATHE6,1|AMulti
|
||
LWL 1,2+SIDE_TIME_FUDGE+AFunc,OBJ_OFF
|
||
|
||
NONBOY_SIDE_UP
|
||
LWLL 1,1|AFunc,A_CHECK_DOWN+2,NONBOY_SIDE_UP
|
||
|
||
LWL 1,1|AFunc,DELETE_SHADOW
|
||
|
||
NONBOY_SIDE_HANGTIME
|
||
LWLL 1,1|AFunc,A_CHECK_GROUND+2,NONBOY_SIDE_HANGTIME
|
||
|
||
LW G_H3DEATHE10,1|AMulti
|
||
LW G_T3DEATHE10,1|AMulti
|
||
LW G_A3DEATHE10,1|AMulti
|
||
LWL G_L3DEATHE10,4+SIDE_TIME_FUDGE+AFunc,OBJ_ON
|
||
|
||
LW 1,60
|
||
LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
NONBOY_HELIDROP_ANIM
|
||
LWLL 1,2|AFunc,A_CHECK_GROUND+2,NONBOY_HELIDROP_ANIM
|
||
|
||
LW G_H1JUMP_A3,1|AMulti
|
||
LW G_T1JUMP_A3,1|AMulti
|
||
LW G_L1JUMP_A3,3
|
||
|
||
LW G_H1JUMP_A2,1|AMulti
|
||
LW G_T1JUMP_A2,1|AMulti
|
||
LW G_L1JUMP_A2,3
|
||
|
||
LW G_H1JUMP_A1,1|AMulti
|
||
LW G_T1JUMP_A1,1|AMulti
|
||
LW G_L1JUMP_A1,2
|
||
|
||
LW G_H1JUMP_A2,1|AMulti
|
||
LW G_T1JUMP_A2,1|AMulti
|
||
LW G_L1JUMP_A2,3
|
||
|
||
LW G_H1JUMP_A3,1|AMulti
|
||
LW G_T1JUMP_A3,1|AMulti
|
||
LW G_L1JUMP_A3,3
|
||
|
||
LWLW G_H2RUN__B4,1|AMulti|AFunc,A_TOGGLE_OEFLAGS+1,M_SIDE
|
||
LW G_T2RUN__B4,1|AMulti
|
||
LW G_L2RUN__B4,1|AMulti
|
||
LWL G_A2RUN__B4,2|AFunc,OBJ_ON
|
||
|
||
LW G_H2RUN__B5,1|AMulti
|
||
LW G_T2RUN__B5,1|AMulti
|
||
LW G_L2RUN__B5,1|AMulti
|
||
LW G_Z2RUN__B5,1
|
||
|
||
LWL 1,1|AFunc,A_SET_SRUNVEL
|
||
LWLL 1,1|AFunc,A_AnimGo+2,NONBOY_SIDE_RUN_ANIM
|
||
|
||
NONBOY_DROP_SHOOT_ANIM
|
||
LWLL 1,2|AFunc,A_CHECK_GROUND+2,NONBOY_DROP_SHOOT_ANIM
|
||
|
||
LW G_H1JUMP_A3,1|AMulti
|
||
LW G_T1JUMP_A3,1|AMulti
|
||
LW G_L1JUMP_A3,3
|
||
|
||
LW G_H1JUMP_A2,1|AMulti
|
||
LW G_T1JUMP_A2,1|AMulti
|
||
LW G_L1JUMP_A2,3
|
||
|
||
LW G_H1JUMP_A1,1|AMulti
|
||
LW G_T1JUMP_A1,1|AMulti
|
||
LW G_L1JUMP_A1,2
|
||
|
||
LW G_H1JUMP_A2,1|AMulti
|
||
LW G_T1JUMP_A2,1|AMulti
|
||
LW G_L1JUMP_A2,3
|
||
|
||
LW G_H1JUMP_A3,1|AMulti
|
||
LW G_T1JUMP_A3,1|AMulti
|
||
LW G_L1JUMP_A3,3
|
||
|
||
LW G_B1SHOOTA1,1|AMulti
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LWL 1,1|AFunc,OBJ_OFF
|
||
|
||
NONBOY_SHOOT_LUPE
|
||
LWL G_B1SHOOTA1,1|AFunc,A_CHECK_NONBOY_BLACKOUT
|
||
LWLWW 1,5|AFunc,A_PART_FIRE_FNC+2,-25,-83
|
||
LWL G_B1SHOOTA2,6|AFunc,OBJ_ON_WNZ
|
||
.long 0
|
||
|
||
NONBOY_SHOOTER_ANIM
|
||
LWL G_B1SHOOTA1,1|AFunc,A_CHECK_DUDE
|
||
LWLWW 1,5|AFunc,A_PART_FIRE_FNC+2,-25,-83
|
||
LW G_B1SHOOTA2,6
|
||
.long 0
|
||
|
||
;NONBOY_SHOOTER2_ANIM
|
||
; LW G_B1SHTCOP1,1
|
||
; LWLWW 1,5|AFunc,A_PART_FIRE_FNC+2,-25,-83
|
||
; LW G_B1SHTCOP2,6
|
||
; .long 0
|
||
|
||
NONBOY_STALL_ANIM
|
||
LWL 1,2|AFunc,A_CHECK_STALLBOY
|
||
.long 0
|
||
|
||
NONBOY_STALL_SHOOT_ANIM
|
||
LWL G_B1SHOOTA1,1|AFunc,A_CHECK_STALLBOY
|
||
LWLWW 1,5|AFunc,A_PART_FIRE_FNC+2,-25,-83
|
||
LW G_B1SHOOTA2,6
|
||
.long 0
|
||
|
||
|
||
|
||
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* RANDOM_NONPAL - SELECT RANDOM NONBOY PALETTE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
RANDOM_NONPAL
|
||
RETS
|
||
|
||
PUSH A0
|
||
; MOVK 4,A0
|
||
MOVK 3,A0
|
||
CALLA RAND0
|
||
SLL 5,A0
|
||
ADDI NONBOY_PALS,A0
|
||
MOVE *A0,A0,L
|
||
CALLA CHANGE_PAL
|
||
PULLQ A0
|
||
RETS
|
||
|
||
NONBOY_PALS
|
||
; .LONG gasgreen,gasblue,gasred,GASBOYlsb
|
||
.LONG P_NONBOYY,P_NONBOYO,P_NONBOYR
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_OETIME - CHECK IF IT'S TIME TO BACK OFF *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* AARG+,L = JUMP TO THIS LABEL IF THERE IS STILL TIME *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_CHECK_OETIME
|
||
MOVE *A8(OETIME),A14,W
|
||
SUBK 12,A14 ;SHOOT TIME
|
||
JRP ACOET_JUMP ;BR=KEEP ON FIRING
|
||
RETS
|
||
ACOET_JUMP
|
||
MOVE A14,*A8(OETIME),W ;SAVE TIME LEFT
|
||
CALLA GETAFARG_LONG
|
||
MOVE A0,*A8(AnimFrm),L ;JUMP
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* AU_RANDOM_NAP - STAY AT SAME FRAME UPON RANDOM CHANCE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* AARG+,W = CHANCE TO SLEEP AGAIN *
|
||
* AARG+,L = IF SLEEPING JUMP HERE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
AU_RANDOM_NAP
|
||
CALLA GETAFARG_WORD
|
||
CALLA RANDPER
|
||
JRNC AU_RN_WAKEUP ;BR=IT DIDN'T HAPPEN MOVE ON
|
||
CALLA GETAFARG_LONG
|
||
MOVE A0,*A8(AnimFrm),L ;STAY AT SAME FRAME
|
||
RETS
|
||
AU_RN_WAKEUP
|
||
CLR A14 ;MOVE ON AND CLEAR CURRENT SLEEP
|
||
MOVB A14,*A8(AnimSlp)
|
||
MOVE *A8(AnimFrm),A14,L
|
||
JRNZ AU_RN_DONE ;BR=NOT END OF SCRIPT
|
||
MOVE *A8(AnimScr),*A8(AnimFrm),L
|
||
AU_RN_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CHECK_HOST_ANIM - CHECK IF ENEMY GENERATOR IS STILL ON SCREEN, *
|
||
* IF NOT PULL GENERATORS ANIMATION *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CHECK_HOST_ANIM
|
||
move *a8(OFLAGS),a14 ; delete anim if enemy generator
|
||
btst B_OFSCRN,a14 ; is offscreen.
|
||
jrnz CHA_DEL_ANIM
|
||
|
||
CLRC
|
||
RETS
|
||
|
||
CHA_DEL_ANIM
|
||
MOVE *A8(OID),A14,W
|
||
ANDI MASK_TYPE,A14
|
||
CMPI TYPE_UNIV & MASK_TYPE,A14
|
||
JRNE CHA_NOT_UNIV ;BR=NOT A UNIVERSE OBJECT
|
||
MOVE *A8(OULINK),A1,L
|
||
MOVE *A1(MAP_IMG),A14,L ;TURN ON DANIM FLAG
|
||
ORI M_IF_DANIM,A14
|
||
MOVE A14,*A1(MAP_IMG),L
|
||
|
||
MOVE @ENEMYDATA,A14,L
|
||
MOVE A8,*A14+,L ;STUFF ADDRESS
|
||
MOVE A14,@ENEMYDATA,L ;SAVE FOR NEXT GUY
|
||
CALLA PULL_ANIM
|
||
CHA_NOT_UNIV
|
||
SETC
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* AU_CREATE_DOORBOY - CREATE THE ENEMY IN THE DOORWAY *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* AARG+,L = GENERATOR ANIMATION JUMP HERE UPON FAILURE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
AU_CREATE_DOORBOY
|
||
MOVE @OBJENEMIES,A14,W
|
||
BTST B_DOOR,A14
|
||
JRZ AU_CD_ABORT ;BR=NOT ALLOWED
|
||
|
||
CALLR CHECK_HOST_ANIM
|
||
JRC AU_CD_DONE ;BR=HOST ANIM OFF SCREEN
|
||
|
||
MOVE @ENEMY_QUOTA,A14,W
|
||
JRNZ AU_CD_ABORT ;BR=QUOTA REACHED
|
||
|
||
; MOVI OID_NONBOY,A0
|
||
; CALLA GET_ENEMY_COUNT
|
||
; CMPI 10,A0
|
||
; JRHS AU_CD_ABORT ;BR=REACHED MAX NUMBER OF ENEMIES
|
||
|
||
AU_CD_DOORBOY
|
||
MOVE A8,A9
|
||
MOVI DOORBOY_INIT,B0 ;ALLOCATE DOOR GUY OBJECT
|
||
CALLA CREATE_ENEMY
|
||
JRZ AU_CD_ERROR ;BR = ERROR! ERROR!
|
||
|
||
CALLR RANDOM_NONPAL ;GET RANDOM PALETTE
|
||
|
||
MOVI DOORBOY_ANIM,A1
|
||
CALLA STRT_ANIM ;START ANIMATION
|
||
|
||
MOVE *A9(OXVAL),A1,L
|
||
MOVE *A9(OYVAL),A2,L
|
||
MOVE *A9(OZVAL),A3,L
|
||
ADDK 5,A3 ;OFFSET Z IN BACK OF DOOR
|
||
CALLA SET_ANIPU
|
||
|
||
MOVK 1,A14
|
||
MOVB A14,*A8(OHITS) ;NUMBER OF ALLOWED HITS
|
||
|
||
MOVK M_DOOR,A14
|
||
MOVE A14,*A8(OEFLAGS),W ;ENEMY TYPE
|
||
|
||
MOVE *A9(OCTRL),A0,W ;COPY DOOR FLIP
|
||
ANDI M_FLIPH,A0
|
||
CALLA SET_FLPS
|
||
|
||
MOVK 20,A0 ;RANDOM DELAY BEFORE SHOOTING UP
|
||
MOVK 5,A1
|
||
CALLA RANGRAND
|
||
MOVE A0,A1
|
||
ADDK 6,A0
|
||
MOVB A0,*A8(AnimSLP)
|
||
|
||
MOVI 127,A14
|
||
MOVB A14,*A9(AnimSLP)
|
||
|
||
MOVI 127+10,A14
|
||
SUB A1,A14
|
||
MOVE A14,*A8(OETIME),W
|
||
|
||
; MOVI 127-20,A0 ;RANDOM LIFE TIME
|
||
; MOVI 60,A1
|
||
; CALLA RANGRAND
|
||
; ADD A3,A0 ;EXTRA DELAY BEFORE SHOOTING UP
|
||
; MOVB A0,*A9(AnimSLP)
|
||
; ADDK 14,A0 ;ADD DOOR OPEN AND CLOSE TIME
|
||
;
|
||
; MOVE A0,A2
|
||
; MOVI 59+5-12,A0 ;RANDOM INITIAL SLEEP TIME
|
||
; MOVK 30,A1
|
||
; CALLA RANGRAND
|
||
; MOVB A0,*A8(AnimSlp)
|
||
; SUB A0,A2
|
||
; MOVE A2,*A8(OETIME),W
|
||
|
||
CALLA INSERT_ENEMY ;INSERT AND COUNT ENEMY
|
||
RETS
|
||
AU_CD_ERROR
|
||
MOVE A9,A8
|
||
AU_CD_ABORT
|
||
CALLA GETAFARG_LONG ;COULDN'T MAKE BADGUY
|
||
MOVE A0,*A8(AnimFrm),L ;OOPS!
|
||
AU_CD_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* AU_CREATE_LADDERBOY - CREATE THE ENEMY TO RUN OUT OF THE DOORWAY *
|
||
* AND HEAD TOWARD THE LADDER *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* AARG+,W = PERCENT CHANCE OF EXITING ENEMY *
|
||
* AARG+,L = GENERATOR ANIMATION JUMP HERE UPON FAILURE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
AU_CREATE_LADDERBOY
|
||
CALLA GETAFARG_WORD
|
||
|
||
MOVE @OBJENEMIES,A14,W
|
||
BTST B_DOOR,A14
|
||
JRZ AU_CL_ABORT ;BR=NOT ALLOWED
|
||
|
||
CALLR CHECK_HOST_ANIM
|
||
JRC AU_CL_DONE ;BR=HOST ANIM OFF SCREEN
|
||
|
||
MOVE @ENEMY_QUOTA,A14,W
|
||
JRNZ AU_CL_ABORT ;BR=QUOTA REACHED
|
||
|
||
;DON'T TRASH A0
|
||
; MOVI OID_NONBOY,A0
|
||
; CALLA GET_ENEMY_COUNT
|
||
; CMPI 10,A0
|
||
; JRHS AU_CL_ABORT ;BR=REACHED MAX NUMBER OF ENEMIES
|
||
|
||
CALLA RANDPER
|
||
JRNC AU_CD_DOORBOY ;BR=MAKE DOORBOY
|
||
|
||
MOVE A8,A9
|
||
MOVI LADDERBOY_INIT,B0 ;ALLOCATE OBJECT
|
||
CALLA CREATE_ENEMY
|
||
JRZ AU_CL_ERROR ;BR = ERROR! ERROR!
|
||
|
||
CALLR RANDOM_NONPAL ;GET RANDOM PALETTE
|
||
|
||
MOVE *A9(OXVAL),A1,L
|
||
MOVE *A9(OYVAL),A2,L
|
||
MOVE A2,*A8(OYSTART),L
|
||
MOVE *A9(OZVAL),A3,L
|
||
ADDK 5,A3 ;OFFSET Z IN BACK OF DOOR
|
||
CALLA SET_ANIPU
|
||
|
||
MOVI NB_SRUNVEL_MAX,A0 ;GET RANDOM SIDE RUNNING SPEED
|
||
MOVI NB_SRUNVEL_MIN,A1
|
||
CALLA RANGRAND
|
||
MOVE A0,*A8(OSRUNVEL),L
|
||
|
||
MOVI LADDERBOY_ANIM,A1
|
||
CALLA STRT_ANIM ;START ANIMATION
|
||
MOVI LADDERBOY_SIDERUN_ANIM,A14 ;LOOP ON SIDERUN
|
||
MOVE A14,*A8(AnimScr),L
|
||
|
||
MOVK 1,A14
|
||
MOVB A14,*A8(OHITS) ;NUMBER OF ALLOWED HITS
|
||
|
||
MOVK M_DOOR,A14
|
||
MOVE A14,*A8(OEFLAGS),W ;ENEMY TYPE
|
||
|
||
MOVE *A9(OCTRL),A0,W ;INVERT DOOR FLIP
|
||
NOT A0
|
||
ANDI M_FLIPH,A0
|
||
CALLA SET_FLPS
|
||
|
||
; MOVI 127,A0 ;RANDOM LIFE TIME
|
||
; MOVI 60,A1
|
||
; CALLA RANGRAND
|
||
|
||
MOVK HEADON_TIME*3+8+1,A0
|
||
MOVB A0,*A9(AnimSLP)
|
||
|
||
; ADDK 14,A0 ;ADD DOOR OPEN AND CLOSE TIME
|
||
|
||
; MOVE A0,A2
|
||
;; MOVI 59+10-12,A0 ;RANDOM INITIAL SLEEP TIME
|
||
;; MOVK 30,A1
|
||
;; CALLA RANGRAND
|
||
;; MOVB A0,*A8(AnimSlp)
|
||
;; SUB A0,A2
|
||
; MOVE A2,*A8(OETIME),W
|
||
|
||
MOVI (TYPE_UNIV & MASK_TYPE) | ID_7, A1 ;OID OF LADDER
|
||
CALLR SET_ODESTX ;FIND LADDER
|
||
|
||
MOVI LADDERBOY_TURN_ANIM,A14
|
||
MOVE A14,*A8(OANIM0),L ;ANIM BRANCH #0
|
||
MOVI LADDERBOY_UP_LADDER_ANIM,A14
|
||
MOVE A14,*A8(OANIM1),L ;ANIM BRANCH #1
|
||
|
||
MOVK 4,A14
|
||
MOVB A14,*A8(OSCRNOFFCNT) ;TIMES ALLOWED OFF SCREEN
|
||
CLR A14
|
||
MOVB A14,*A8(OSHOOTCNT) ;SHOOT ASAP
|
||
|
||
MOVI ROOF_LEFT_BOUNDARY+(20 << 15),A14
|
||
MOVE A14,*A8(OROOFXLEFT),L ;SET LEFT ROOF BOUNDARY
|
||
MOVI ROOF_RIGHT_BOUNDARY-(20 << 15),A14
|
||
MOVE A14,*A8(OROOFXRGHT),L ;SET RIGHT ROOF BOUNDARY
|
||
|
||
CALLA INSERT_ENEMY ;INSERT AND COUNT ENEMY
|
||
RETS
|
||
AU_CL_ERROR
|
||
MOVE A9,A8
|
||
AU_CL_ABORT
|
||
CALLA GETAFARG_LONG ;COULDN'T MAKE BADGUY
|
||
MOVE A0,*A8(AnimFrm),L ;OOPS!
|
||
AU_CL_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* AU_CREATE_POPTOP - CREATE POPUP ENEMY *
|
||
* AU_CREATE_WINBOY - CREATE POPUP ENEMY IN WINDOW *
|
||
* AU_CREATE_DUMPBOY - CREATE POPUP ENEMY IN DUMPSTER *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* AARG+,L = X PIXEL OFFSET << 4 OR TABLE ADDRESS (LOWEST BIT FLAGS TABLE)*
|
||
* NOTE: YOU MUST PASS A REVERSE TABLE FOR A FLIPPED GENERATOR * *
|
||
* AARG+,L = [PIXEL Y, Z] OFFSET FROM GENERATOR *
|
||
* AARG+,L = GENERATOR ANIMATION JUMP HERE UPON FAILURE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
AU_CREATE_BOXOFF
|
||
MOVE @OBJENEMIES,A14,W
|
||
BTST B_POPTOP,A14
|
||
JRZ AU_CW_ABORT ;BR=NOT ALLOWED
|
||
|
||
MOVK M_POPTOP,A11 ;SET TYPE
|
||
MOVI BREAK_WINDOW,A10
|
||
JRUC AU_CW_CONT
|
||
AU_CREATE_POPTOP
|
||
MOVE @OBJENEMIES,A14,W
|
||
BTST B_POPTOP,A14
|
||
JRZ AU_CW_ABORT ;BR=NOT ALLOWED
|
||
|
||
MOVK M_POPTOP,A11 ;SET TYPE
|
||
CLR A10
|
||
JRUC AU_CW_CONT
|
||
AU_CREATE_DUMPBOY
|
||
MOVE @OBJENEMIES,A14,W
|
||
BTST B_DUMPSTER,A14
|
||
JRZ AU_CW_ABORT ;BR=NOT ALLOWED
|
||
|
||
MOVI M_DUMPSTER,A11 ;SET TYPE
|
||
CLR A10
|
||
JRUC AU_CW_CONT
|
||
AU_CREATE_WINBOY
|
||
MOVE @OBJENEMIES,A14,W
|
||
BTST B_WINDOW,A14
|
||
JRZ AU_CW_ABORT ;BR=NOT ALLOWED
|
||
|
||
MOVK M_WINDOW,A11 ;SET TYPE
|
||
CLR A10
|
||
AU_CW_CONT
|
||
MOVE @HOLD_ENEMY_DISPATCH,A14,W
|
||
JRNZ AU_CW_ABORT ;BR=HOLD ON THERE
|
||
|
||
CALLR CHECK_HOST_ANIM
|
||
JRC AU_CW_DONE ;BR=HOST ANIM OFF SCREEN
|
||
|
||
MOVE @ENEMY_QUOTA,A14,W
|
||
JRNZ AU_CW_ABORT ;BR=QUOTA REACHED
|
||
|
||
; MOVI OID_NONBOY,A0
|
||
; CALLA GET_ENEMY_COUNT
|
||
; CMPI 10,A0
|
||
; JRHS AU_CW_ABORT ;BR=REACHED MAX NUMBER OF ENEMIES
|
||
|
||
MOVE A8,A9
|
||
MOVI WINBOY_INIT,B0 ;ALLOCATE OBJECT
|
||
CALLA CREATE_ENEMY
|
||
JRZ AU_CW_ERROR ;BR = ERROR! ERROR!
|
||
|
||
MOVE A10,*A8(ODEATHCALL),L
|
||
|
||
CALLR RANDOM_NONPAL ;GET RANDOM PALETTE
|
||
|
||
MOVE A11,*A8(OEFLAGS),W ;SAVE TYPE
|
||
|
||
MOVE @RAND,A0,W ;LEFTY OR RIGHTY?
|
||
ANDI M_FLIPH,A0
|
||
MOVE A0,A10
|
||
CALLA SET_FLPS
|
||
|
||
MOVE A8,A1
|
||
MOVE A9,A8
|
||
CALLA GETAFARG_LONG ;GET X OFFSET OR TABLE ADDRESS
|
||
MOVE A0,A2
|
||
BTST 0,A2
|
||
JRNZ AU_CW_TBL ;BR=TABLE
|
||
SLL 11,A2 ;CONVERT TO WORLD OFFSET
|
||
AU_CW_CHECK_FLIPH
|
||
MOVE *A9(OCTRL),A14,W ;Let's get flip of the host object
|
||
BTST B_FLIPH,A14 ;Is it flipped?
|
||
JRZ AU_CW_CENTER ;BR = No horiz flip to worry about
|
||
NEG A2
|
||
AU_CW_CENTER
|
||
;WE MAY WANT TO USE THE HIGH WORD IN THE FIRST LONG
|
||
;TO CONTAIN BOTH X OBJECT OFFSET AND X CENTER OFFSET!
|
||
ADDI 10 << 15,A2
|
||
BTST B_FLIPH,A10
|
||
JRZ AU_CW_NOROM
|
||
SUBI (10+10) << 15,A2
|
||
JRUC AU_CW_NOROM
|
||
AU_CW_TBL
|
||
SRL 1,A2 ;CLEAR FLAG BIT
|
||
SLL 1,A2
|
||
MOVE A2,A0
|
||
|
||
MOVE *A8(ODAGX),A3,W
|
||
MOVE *A8(OANIOFFX),A14,W
|
||
ADD A14,A3 ;SCREEN X ANIMP
|
||
SUBK 20,A3 ;LEFT SIDE FUDGE
|
||
MOVE *A8(OSCALEX),A4,W
|
||
AU_CW_START_LUPE
|
||
MOVE *A0+,A5,W
|
||
JRZ AU_CW_GET_OFFSET ;BR=END OF TABLE
|
||
SLL 8,A5
|
||
DIVS A4,A5 ;SCALE OFFSET
|
||
ADD A3,A5 ;ADD TO GENERATOR X ANIMP
|
||
JRN AU_CW_START_LUPE ;BR=THIS IS OFF SCREEN
|
||
SUBK 010H,A0 ;FIRST ON SCREEN TABLE ADJUST
|
||
MOVE A0,A2
|
||
SUBI 400-20-20,A3 ;RIGHT SIDE FUDGE
|
||
AU_CW_END_LUPE
|
||
MOVE *A0+,A5,W
|
||
JRZ AU_CW_END_DONE ;END OF TABLE
|
||
SLL 8,A5
|
||
DIVS A4,A5 ;SCALE OFFSET
|
||
ADD A3,A5 ;ADD TO GENERATOR X ANIMP
|
||
JRN AU_CW_END_LUPE ;BR=THIS IS OFF SCREEN
|
||
AU_CW_END_DONE
|
||
SUBK 010H,A0 ;LAST ON SCREEN TABLE ADJUST
|
||
|
||
CMP A0,A2
|
||
JREQ AU_CW_GET_OFFSET ;BR=THE FIRST IS THE LAST
|
||
|
||
SUB A2,A0 ;PICK OFFSET BETWEEN
|
||
SRL 4,A0
|
||
CALLA RAND0
|
||
SLL 4,A0
|
||
ADD A0,A2
|
||
|
||
AU_CW_GET_OFFSET
|
||
MOVE *A2,A2,W ;GET OFFSET
|
||
SLL 15,A2 ;CONVERT TO WORLD OFFSET
|
||
; JRUC AU_CW_CHECK_FLIPH ;CHECK FOR FLIPH
|
||
|
||
AU_CW_NOROM
|
||
CALLA GETAFARG_LONG ;GET [PIXEL Y, Z] OFFSET
|
||
MOVE A1,A8
|
||
|
||
MOVE *A9(OXVAL),A1,L
|
||
ADD A2,A1 ;OFFSET X
|
||
MOVE *A9(OYVAL),A2,L
|
||
MOVE A0,A14 ;GET PIXEL Y OFFSET
|
||
SRA 16,A14
|
||
SLL 15,A14 ;CONVERT TO WORLD OFFSET
|
||
ADD A14,A2 ;ADD TO Y OF GENERATOR
|
||
MOVE A2,*A8(OYSTART),L
|
||
MOVE *A9(OZVAL),A3,L
|
||
SEXT A0,W
|
||
ADD A0,A3 ;OFFSET Z FROM GENERATOR
|
||
CALLA SET_ANIPU
|
||
|
||
MOVI WINBOY_ANIM,A1
|
||
CALLA STRT_ANIM ;START ANIMATION
|
||
|
||
MOVI -20 << 15,A14
|
||
MOVE A14,*A8(OGRNDOFF),L ;GROUND OFFSET UPON FALL
|
||
|
||
MOVK 1,A14
|
||
MOVB A14,*A8(OHITS) ;NUMBER OF ALLOWED HITS
|
||
|
||
MOVI -02B333H,A14
|
||
MOVE A14,*A8(OYVEL),L ;SEND HIM UP
|
||
|
||
MOVK 20,A0 ;RANDOM DELAY BEFORE SHOOTING UP
|
||
MOVK 5,A1
|
||
CALLA RANGRAND
|
||
MOVB A0,*A8(AnimSLP)
|
||
MOVE A0,A3
|
||
|
||
MOVI 127-20,A0 ;RANDOM LIFE TIME
|
||
MOVK 30,A1
|
||
CALLA RANGRAND
|
||
ADD A3,A0 ;EXTRA DELAY BEFORE SHOOTING UP
|
||
MOVB A0,*A9(AnimSLP)
|
||
SUBK 21,A0 ;POPUP AND POPDOWN TIME
|
||
MOVE A0,*A8(OETIME),W
|
||
|
||
CALLA INSERT_ENEMY ;INSERT AND COUNT ENEMY
|
||
RETS
|
||
AU_CW_ERROR
|
||
MOVE A9,A8
|
||
AU_CW_ABORT
|
||
CALLA GETAFARG_LONG ;THROW OUT FIRST LONG
|
||
CALLA GETAFARG_LONG ;THROW OUT SECOND LONG
|
||
CALLA GETAFARG_LONG ;COULDN'T MAKE BADGUY
|
||
MOVE A0,*A8(AnimFrm),L ;OOPS!
|
||
AU_CW_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* AU_CREATE_BWBOY - CREATE BEHIND THE WALL ENEMY WITH RESPECT TO FLIP *
|
||
* OF GENERATOR *
|
||
* AU_CREATE_BWBOY2 - CREATE BEHIND AN OPEN OBJECT ENEMY *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* AARG+,L = [Y,X] PIXEL OFFSET FROM GENERATOR *
|
||
* AARG+,L = DEATH ROUTINE *
|
||
* AARG+,L = GENERATOR ANIMATION JUMP HERE UPON FAILURE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
AU_CREATE_BWBOY2
|
||
MOVK 1,A11 ;FLAG BWBOY2
|
||
JRUC AU_CB_GO
|
||
AU_CREATE_BWBOY
|
||
CLR A11
|
||
AU_CB_GO
|
||
CALLA GETAFARG_LONG ;GET [Y,X] PIXEL OFFSET
|
||
MOVE A0,A10
|
||
CALLA GETAFARG_LONG ;GET DEATH ROUTINE
|
||
|
||
MOVE @HOLD_ENEMY_DISPATCH,A14,W
|
||
JRNZ AU_CB_ABORT ;BR=HOLD ON THERE
|
||
|
||
MOVE @OBJENEMIES,A14,W
|
||
BTST B_BW,A14
|
||
JRZ AU_CB_ABORT ;BR=NOT ALLOWED
|
||
|
||
CALLR CHECK_HOST_ANIM
|
||
JRC AU_CB_DONE ;BR=HOST ANIM OFF SCREEN
|
||
|
||
MOVE @ENEMY_QUOTA,A14,W
|
||
JRNZ AU_CB_ABORT ;BR=QUOTA REACHED
|
||
|
||
; MOVI OID_NONBOY,A0
|
||
; CALLA GET_ENEMY_COUNT
|
||
; CMPI 10,A0
|
||
; JRHS AU_CB_ABORT ;BR=REACHED MAX NUMBER OF ENEMIES
|
||
|
||
MOVE A8,A9
|
||
; MOVE A0,A10
|
||
MOVI BWBOY_INIT,B0 ;ALLOCATE OBJECT
|
||
PUSH A0
|
||
CALLA CREATE_ENEMY
|
||
PULL A0
|
||
MOVE A8,A8
|
||
JRZ AU_CB_ERROR ;BR = ERROR! ERROR!
|
||
|
||
MOVE A0,*A8(OEDEATH),L
|
||
|
||
CALLR RANDOM_NONPAL ;GET RANDOM PALETTE
|
||
|
||
MOVI BWBOY_ANIM,A1
|
||
CALLA STRT_ANIM ;START ANIMATION
|
||
|
||
MOVK 1,A14
|
||
MOVB A14,*A8(OHITS) ;NUMBER OF ALLOWED HITS
|
||
|
||
MOVI M_BW|M_SIDE,A14
|
||
MOVE A14,*A8(OEFLAGS),W ;SET TYPE
|
||
|
||
MOVE A11,A11
|
||
JRZ AU_CB_GETFLIP ;BR=GET FLIP FROM GENERATOR
|
||
CLR A0 ;DEFAULT TO NO FLIP
|
||
MOVE *A9(ODAGX),A14,W
|
||
CMPI 200,A14
|
||
JRGT AU_CB_FLIPSET ;BR=ON THE RIGHT HALF OF THE SCREEN
|
||
MOVK M_FLIPH,A0 ;FLIP OUT ON THE LEFT HALF
|
||
JRUC AU_CB_FLIPSET
|
||
AU_CB_GETFLIP
|
||
MOVE *A9(OCTRL),A0,W ;COPY DOOR FLIP
|
||
AU_CB_FLIPSET
|
||
MOVX A10,A1 ;Grab the passed X offset
|
||
SEXT A1
|
||
SLL 15,A1 ;Convert
|
||
; MOVI 65*08000H,A1
|
||
ADDI -65*08000H,A1
|
||
BTST B_FLIPH,A0
|
||
; JRNZ AU_CB_SETX ;BR=NOT FLIPPED
|
||
JRZ AU_CB_SETX ;BR=NOT FLIPPED
|
||
NEG A1
|
||
AU_CB_SETX
|
||
MOVE *A9(OXVAL),A14,L
|
||
ADD A14,A1 ;OFFSET X
|
||
MOVE *A9(OYVAL),A2,L
|
||
SRA 16,A10 ;Clear out the X part
|
||
SLL 15,A10
|
||
ADD A10,A2 ;OFFSET Y
|
||
MOVE *A9(OZVAL),A3,L
|
||
INC A3 ;OFFSET Z
|
||
CALLA SET_ANIPU
|
||
|
||
NOT A0 ;INVERT DOOR FLIP
|
||
ANDI M_FLIPH,A0
|
||
CALLA SET_FLPS
|
||
|
||
MOVI 127,A0 ;RANDOM LIFE TIME
|
||
MOVK 30,A1
|
||
CALLA RANGRAND
|
||
MOVB A0,*A9(AnimSLP)
|
||
SUBK 24,A0 ;MOVE OUT AND PULL BACK TIME
|
||
MOVE A0,*A8(OETIME),W
|
||
|
||
MOVI -20 << 15,A14
|
||
MOVE A14,*A8(OGRNDOFF),L ;SET GROUND OFFSET FOR FALL
|
||
|
||
MOVE A11,A11
|
||
JAZ INSERT_ENEMY ;BR=NO SHADOW JUST INSERT AND COUNT
|
||
|
||
CALLA INSERT_ENEMY ;INSERT AND COUNT ENEMY
|
||
CALLA GET_SHAD_MULTI
|
||
RETS
|
||
AU_CB_ERROR
|
||
MOVE A9,A8
|
||
AU_CB_ABORT
|
||
CALLA GETAFARG_LONG ;COULDN'T MAKE BADGUY
|
||
MOVE A0,*A8(AnimFrm),L ;OOPS!
|
||
AU_CB_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* LAVA_GUY_DEATH *
|
||
* *
|
||
* A1 = OEFLAGS *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
LAVA_GUY_DEATH
|
||
CLR A14
|
||
MOVE A14,*A8(OGRNDOFF),L
|
||
; MOVE A1,A3
|
||
MOVI NONBOY_HEADON_DEATH_ANIM,A1 ;DEFAULT TO FALLING BACKWARDS
|
||
BTST B_SIDE,A3
|
||
JAZ STRT_ANIM ;BR=NOT SIDEWAYS
|
||
; MOVI NONBOY_SIDE_RUN_DEATH_ANIM,A1 ;SIDE TO FRONT TRANSITION DEATH
|
||
; MOVE *A8(OIMG),A14,L
|
||
; CMPI G_B5SPxSHA6,A14 ;CHECK FOR LAST SIDE FRAME
|
||
; JAEQ STRT_ANIM ;BR=DON'T OFFSET X
|
||
MOVE *A8(OIMG),A14,L
|
||
MOVI 20 << 15,A3
|
||
CMPI G_B5SPxSHA6,A14
|
||
JREQ LGD_CHKFLIP ;BR=CHECK FOR FLIP
|
||
MOVI 30 << 15,A3
|
||
CMPI G_B5SPxSHA5,A14
|
||
JREQ LGD_CHKFLIP ;BR=CHECK FOR FLIP
|
||
MOVI 40 << 15,A3
|
||
LGD_CHKFLIP
|
||
MOVE *A8(OCTRL),A14,W
|
||
BTST B_FLIPH,A14
|
||
JRZ LGD_NOFLIPH ;BR=NO H FLIP
|
||
NEG A3
|
||
LGD_NOFLIPH
|
||
MOVE *A8(OXVAL),A14,L
|
||
SUB A3,A14
|
||
MOVE A14,*A8(OXVAL),L
|
||
JAUC STRT_ANIM
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DEL_OID_PART - DELETE ALL PARTS OF GIVEN OID *
|
||
* NOTE: IGNORES SINGLE OBJECTS *
|
||
* *
|
||
* PASS: *
|
||
* A1 = OID *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
DEL_OID_PART
|
||
PUSH A8
|
||
MOVE *A8(OPARTS),A14,L
|
||
JRZ DOP_DONE ;BR=IGNORE SINGLE OBJECTS
|
||
JRUC DOP_START
|
||
DOP_LUPE
|
||
MOVE *A8(OPARTS),A8,L
|
||
JRZ DOP_DONE ;BR=NO MORE OBJECTS
|
||
DOP_START
|
||
MOVE *A8(OID),A14,W
|
||
CMP A1,A14
|
||
JRNE DOP_LUPE ;BR=NO MATCH ON OID
|
||
CALLA DELETE_OBJ ;KILL IT!
|
||
JRUC DOP_LUPE
|
||
DOP_DONE
|
||
PULLQ A8
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* OUTCLUB_CVECT - COLLISION TABLE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
OUTCLUB_CVECT
|
||
WWL OID_PROCKET,~MASK_PLAYER,NONBOY_ROCKET_COLL
|
||
WWL OID_PEXPLOSION,~MASK_PLAYER,OUTCLUB_EXPLOSION_COLL
|
||
|
||
WWL OID_BLOWUP,0FFFFH,OUTCLUB_SBOMB_CARNAGE
|
||
|
||
WWL OID_GRND,0FFFFH,OUTCLUB_GRND_COLLVECT
|
||
|
||
WL 0,DUMCRETS
|
||
|
||
OUTCLUB_CVECT_PART
|
||
WWL OID_PROCKET,~MASK_PLAYER,NONBOY_ROCKET_COLL
|
||
WWL OID_PEXPLOSION,~MASK_PLAYER,OUTCLUB_EXPLOSION_COLL
|
||
|
||
WWL OID_BLOWUP,0FFFFH,OUTCLUB_SBOMB_CARNAGE
|
||
|
||
WWL OID_GRND,0FFFFH,OUTCLUB_GRND_COLLVECT
|
||
|
||
WL 0,DUMCRETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* OUTCLUB_EXPLOSION_COLL - Collision vector for Player explosion. *
|
||
* A0 = Ptr to explosion object *
|
||
* A8 = Ptr to NON-BOY object *
|
||
* *
|
||
**************************************************************************
|
||
OUTCLUB_EXPLOSION_COLL
|
||
CALLA GET_HEAD_PART
|
||
MOVE A0,*A8(ONATEEXPLO),L ;SAVE EXPLOSION OBJECT
|
||
MOVE *A8(OEFLAGS),A14,W
|
||
BTST B_ATEROCKET,A14 ;Did he get hit by a rocket?
|
||
JRZ OUTCLUB_COLLVECT ;BR = No, just do generic for now.
|
||
|
||
CALLA ALL_COLLS_OFF ;Turn all collisions off now!
|
||
|
||
MOVE A0,A5
|
||
|
||
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
|
||
CALLA POID_TO_PDATA ;GET PDATA IN A2
|
||
|
||
SWAP A5,A8
|
||
CALLA GET_HEAD_PART
|
||
CALLA OBJ_OFF_MULTI
|
||
SWAP A5,A8
|
||
|
||
MOVI NONBOY_EXPLODE_ANIM,A1 ;Die like a brave
|
||
JRUC OEC_ANIM
|
||
|
||
;the rest of this is the same as NONBOY_SBOMB_CARNAGE
|
||
OUTCLUB_SBOMB_CARNAGE
|
||
MOVI ANIM_NON_SBOMB_EXPLODE,A1
|
||
OEC_ANIM
|
||
CALLA STRT_ANIM
|
||
MOVE A2,*A8(OPLAYER),L ;Hang on to this address
|
||
|
||
MOVI 1000,A1
|
||
CALLA SCORE ;Explosions are always good for points
|
||
|
||
JAUC COUNT_PLAYER_KILL
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* OUTCLUB_GUNVECT - GUN VECTOR *
|
||
* *
|
||
* PASS: *
|
||
* A2 = PTR TO PLAYER *
|
||
* A8 = PTR TO OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
OUTCLUB_SBOMB_COLLVECT
|
||
; CLR A2
|
||
CALLA GET_HEAD_PART
|
||
JRUC OUTCLUB_SBOMB ;LET SBOMB CODE AWARD POINTS
|
||
OUTCLUB_GRND_COLLVECT
|
||
CLR A14 ;STOP IT!
|
||
MOVE A14,*A8(OXVEL),L
|
||
MOVE A14,*A8(OYVEL),L
|
||
MOVE A14,*A8(OZVEL),L
|
||
MOVE A14,*A8(OYACCEL),W
|
||
MOVE *A8(OFLAGS),A14,W
|
||
ANDNI M_GCOLL,A14 ;CLEAR GROUND COLL FLAG
|
||
MOVE A14,*A8(OFLAGS),W
|
||
JAUC SET_ONGRND
|
||
OUTCLUB_COLLVECT_PART
|
||
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
|
||
CMPI OID_GRND,A0
|
||
JREQ OUTCLUB_GRND_COLLVECT ;BR=GROUND COLLISION
|
||
CALLA POID_TO_PDATA ;GET PDATA IN A2
|
||
; JRUC OUTCLUB_GUNVECT_PART ;IT'S A PART!
|
||
JRUC OG_NO_BLOOD ;IT'S A PART!
|
||
OUTCLUB_COLLVECT
|
||
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
|
||
CALLA POID_TO_PDATA ;GET PDATA IN A2
|
||
CALLA GET_HEAD_PART
|
||
JRUC OG_NO_BLOOD
|
||
OUTCLUB_GUNVECT
|
||
CALLA GET_HEAD_PART
|
||
OUTCLUB_GUNVECT_PART
|
||
SOUND1 SND_BODY_THUD
|
||
CALLA BLOODY_BULLET_HIT_OFFSET
|
||
OG_NO_BLOOD
|
||
OUTCLUB_SBOMB
|
||
MOVE A2,*A8(OPLAYER),L
|
||
;OUTCLUB_SBOMB
|
||
MOVE *A8(OFLAGS),A9,W ;IS THIS OBJECT DEAD?
|
||
BTST B_DEAD,A9
|
||
JRNZ OG_DEAD ;BR = YES
|
||
|
||
MOVB *A8(OHITS),A14
|
||
DEC A14
|
||
JRP OG_STILL_ALIVE ;BR = NONBOY STILL ALIVE
|
||
|
||
MOVI OID_JUNK,A1
|
||
CALLA DEL_OID_PART ;GET RID OF GUN FLASH
|
||
|
||
ORI M_DEAD,A9 ;HE'S DEAD NOW
|
||
MOVE A9,*A8(OFLAGS),W
|
||
|
||
; MOVI DUMRETS,A14
|
||
; MOVE A14,*A8(OGUNVECT),L
|
||
|
||
MOVE A2,A2
|
||
JRZ OG_NOSCORE ;BR = NO SCORE
|
||
|
||
; MOVK 10,A0 ;AWARD RANDOM SCORE
|
||
; CALLA RANDU
|
||
; MOVE A0,A1
|
||
; MOVI 1000,A0
|
||
; MPYU A0,A1
|
||
;; CALLA SCORE
|
||
; INC A1 ;FLAG UP MOTION
|
||
|
||
MOVI 1000,A1
|
||
CALLA SCORE
|
||
|
||
CALLA COUNT_PLAYER_KILL
|
||
|
||
; MOVI 1001,A1
|
||
; CLR A9 ;NO OFFSET
|
||
; CALLA PRINT_SCORE
|
||
|
||
*A8 = PTR TO OBJECT BEING KILLED
|
||
OG_NOSCORE
|
||
; SOUND1 SND_BODY_THUD
|
||
|
||
MOVK NUM_GRUNT_SNDS,A0 ;RANDOM GRUNT SOUND
|
||
CALLA RAND0
|
||
SLL 5,A0
|
||
ADDI GRUNT_HIT_TBL,A0
|
||
MOVE *A0,A0,L
|
||
CALLA ONESND ;Do the SOUND
|
||
|
||
MOVE *A8(OEFLAGS),A14,W ;GET ENEMY TYPE
|
||
MOVE A14,A1 ;SAVE FLAGS
|
||
|
||
MOVE *A8(OEDEATH),A0,L
|
||
JRZ OG_NO_EDEATH ;BR=NO DEATH ROUTINE
|
||
JUMP A0
|
||
OG_NO_EDEATH
|
||
CLR A0
|
||
MOVE A0,*A8(OXVEL),L
|
||
MOVE *A8(OYVEL),A3,W ;USE TO TEST WINDOW DUDE
|
||
MOVE A0,*A8(OYVEL),L
|
||
MOVE A0,*A8(OZVEL),L
|
||
|
||
SLL 16+4,A14 ;SHIFT OUT FLAGS
|
||
SRL 16+4,A14
|
||
JRZ OG_SIDE_DEATH ;BR=HE'S SIDEWAYS!
|
||
LMO A14,A14
|
||
SUBK 31,A14
|
||
NEG A14
|
||
SLL 5,A14 ;GET TABLE OFFSET
|
||
ADDI OUTCLUB_GUNVECT_TBL,A14
|
||
MOVE *A14,A14,L
|
||
|
||
JUMP A14 ;HEY HO! LETS GO!
|
||
OG_STILL_ALIVE
|
||
MOVB A14,*A8(OHITS) ;NUMBER OF HITS LEFT
|
||
OG_DEAD
|
||
RETS
|
||
OG_SIDE_DEATH
|
||
MOVE A1,A14
|
||
MOVI NONBOY_SIDE_RUN_DEATH_ANIM,A1
|
||
BTST B_SIDE,A14
|
||
JANZ STRT_ANIM ;BR=SIDEWAYS
|
||
MOVI FALLDOWN_DEATH_ANIM,A1
|
||
JAUC STRT_ANIM
|
||
|
||
; MOVE *A8(OGRNDOFF),A14,L
|
||
; JAZ STRT_ANIM
|
||
;
|
||
; MOVI -03000H,A14
|
||
; MOVE A14,*A8(OYACCEL),W ;FALL DOWN
|
||
; MOVE *A8(OFLAGS),A14,W
|
||
; ORI M_GCOLL,A14 ;READY FOR GROUND COLLISION
|
||
; MOVE A14,*A8(OFLAGS),W
|
||
; JAUC STRT_ANIM
|
||
|
||
OUTCLUB_GUNVECT_TBL
|
||
.LONG OG_WINDOW_GUNVECT, OG_DOOR_GUNVECT
|
||
.LONG OG_BW_GUNVECT, OG_POPTOP_GUNVECT
|
||
; .LONG OG_HELI_GUNVECT, OG_LEDGE_GUNVECT
|
||
.LONG DUMRETS, OG_LEDGE_GUNVECT
|
||
.LONG OG_LADDER_GUNVECT, OG_DUMPSTER_GUNVECT
|
||
|
||
**************************************************************************
|
||
OG_LADDER_GUNVECT
|
||
* NEEDS OEFLAGS IN A1
|
||
**************************************************************************
|
||
|
||
BTST B_SIDE,A1
|
||
JRZ OG_ON_LADDER ;BR=NO SPECIAL DEATH
|
||
MOVE *A8(OGRNDOFF),A14,L ;SPECIAL TOP OF BUILDING DEATH
|
||
ADDI -60 << 15,A14 ;OFFSET BELOW LEDGE
|
||
MOVE A14,*A8(OGRNDOFF),L
|
||
MOVI LADDER_FALL_DEATH_ANIM3,A1
|
||
JAUC STRT_ANIM
|
||
OG_ON_LADDER
|
||
MOVI -15 << 15,A14 ;OFFSET INTO GROUND
|
||
MOVE A14,*A8(OGRNDOFF),L
|
||
MOVI LADDER_FALL_DEATH_ANIM,A1
|
||
|
||
MOVE *A8(OYVAL),A3,L
|
||
MOVE *A8(OYSTART),A4,L
|
||
SUB A3,A4
|
||
CMPI 0240000H,A4
|
||
JAGT STRT_ANIM ;BR=HE'S ABOVE THE RAILING
|
||
|
||
MOVE @YWORLD,A0,L
|
||
ADD A3,A4
|
||
SUB A4,A0 ;COMPUTE HIS GROUND OFFSET
|
||
ADDI -5 << 15,A0 ;OFFSET HIM INTO THE FLOOR A LITTLE
|
||
MOVE A0,*A8(OGRNDOFF),L
|
||
MOVI LADDER_FALL_DEATH_ANIM2,A1 ;BELOW THE RAILING DEATH
|
||
JAUC STRT_ANIM
|
||
|
||
**************************************************************************
|
||
OG_DOOR_GUNVECT
|
||
**************************************************************************
|
||
|
||
MOVI FALLDOWN_DEATH_ANIM,A1
|
||
JAUC STRT_ANIM
|
||
|
||
;**************************************************************************
|
||
;OG_HELI_GUNVECT
|
||
;**************************************************************************
|
||
;
|
||
; MOVI FALLDOWN_DEATH_ANIM,A1 ;DEFAULT TO FALLING BACKWARDS
|
||
; MOVI NONBOY_LEGS_INIT,A5
|
||
; CALLA CREATE_OBJ
|
||
; JAZ STRT_ANIM ;BR=OOPS! JUST FALL BACKWARDS
|
||
;
|
||
; MOVE *A0(OFLAGS),A14,L
|
||
; ORI M_OPARTSXY,A14
|
||
; MOVE A14,*A0(OFLAGS),L
|
||
;
|
||
; MOVE *A8(OPARTSXY),*A0(OPARTSXY),L
|
||
;
|
||
; MOVI FALLING_DEATH_LEGS_ANIM5,A1
|
||
; CALLA STRTANIM
|
||
;
|
||
; MOVI FALLING_DEATH_ANIM5,A9
|
||
; JRUC OG_BW_LEGS
|
||
|
||
**************************************************************************
|
||
OG_LEDGE_GUNVECT
|
||
* NEEDS OEFLAGS IN A1
|
||
**************************************************************************
|
||
|
||
BTST B_SIDE,A1
|
||
JRNZ OG_BW_FALL_OK ;BR=SIDEWAYS ON THE LEDGE DEATH
|
||
|
||
MOVI NONBOY_HEADON_DEATH_ANIM,A1 ;DEFAULT TO FALLING BACKWARDS
|
||
MOVI NONBOY_LEGS_INIT,A5
|
||
CALLA CREATE_OBJ
|
||
JAZ STRT_ANIM ;BR=OOPS! JUST FALL BACKWARDS
|
||
|
||
MOVI -20 << 15,A14
|
||
MOVE A14,*A8(OGRNDOFF),L ;SET GROUND OFFSET FOR FALL
|
||
|
||
MOVI 04000H,A14 ;INITIAL BOOST
|
||
MOVE A14,*A8(OYACCEL),W
|
||
MOVI -040000H,A14
|
||
MOVE A14,*A8(OYVEL),L
|
||
MOVI FALLING_DEATH_ANIM3,A9
|
||
JRUC OG_BW_LEGS
|
||
|
||
**************************************************************************
|
||
OG_BW_GUNVECT
|
||
* NEEDS OEFLAGS IN A1
|
||
**************************************************************************
|
||
|
||
BTST B_SIDE,A1
|
||
JRZ OG_BW_NO_SIDE ;BR=NOT SIDEWAYS
|
||
MOVE *A8(OIMG),A14,L
|
||
; CMPI G_B5SPxSHA6,A14 ;CHECK FOR LAST SIDE FRAME
|
||
; JREQ OG_BW_FALL_OK ;BR=DON'T OFFSET X
|
||
MOVI 20 << 15,A1
|
||
CMPI G_B5SPxSHA6,A14
|
||
JREQ OG_BW_CHKFLIP ;BR=CHECK FOR FLIP
|
||
MOVI 30 << 15,A1
|
||
CMPI G_B5SPxSHA5,A14
|
||
JREQ OG_BW_CHKFLIP ;BR=CHECK FOR FLIP
|
||
MOVI 40 << 15,A1
|
||
OG_BW_CHKFLIP
|
||
MOVE *A8(OCTRL),A14,W
|
||
BTST B_FLIPH,A14
|
||
JRZ OG_BW_NOFLIPH ;BR=NO H FLIP
|
||
NEG A1
|
||
OG_BW_NOFLIPH
|
||
MOVE *A8(OXVAL),A14,L
|
||
SUB A1,A14
|
||
MOVE A14,*A8(OXVAL),L
|
||
OG_BW_FALL_OK
|
||
; MOVI SIDEWAYS_FALLDOWN_DEATH_ANIM,A1 ;SIDE TO FRONT TRANSITION DEATH
|
||
; MOVI NONBOY_SIDE_RUN_DEATH_ANIM,A1
|
||
MOVI NONBOY_HEADON_DEATH_ANIM,A1
|
||
JAUC STRT_ANIM
|
||
OG_BW_NO_SIDE
|
||
; MOVI FALLDOWN_DEATH_ANIM2,A1 ;DEFAULT TO FALLING BACKWARDS
|
||
MOVI NONBOY_HEADON_DEATH_ANIM,A1
|
||
|
||
MOVI 512,A0
|
||
CALLA RANDPER
|
||
JAC STRT_ANIM ;BR=FALL BACKWARDS
|
||
|
||
MOVI FALLING_DEATH_ANIM2,A9
|
||
ND_hk:
|
||
MOVI NONBOY_LEGS_INIT,A5
|
||
CALLA CREATE_OBJ
|
||
JAZ STRT_ANIM ;BR=OOPS! JUST FALL BACKWARDS
|
||
OG_BW_LEGS
|
||
MOVE *A8(OXVAL),*A0(OXVAL),L ;SET POSITION OF LEGS
|
||
MOVE *A8(OYVAL),*A0(OYVAL),L
|
||
|
||
MOVE *A8(OZVAL),*A0(OZVAL),L
|
||
|
||
; MOVE *A8(OZVAL),A14,L
|
||
; MOVE A14,*A0(OZVAL),L
|
||
; SUBK 3,A14 ;OFFSET Z OF TORSO
|
||
; MOVE A14,*A8(OZVAL),L
|
||
;
|
||
; MOVB *A8(OZOFF),A14
|
||
; MOVB A14,*A0(OZOFF)
|
||
; SUBK 3,A14 ;OFFSET Z OF TORSO
|
||
; MOVB A14,*A8(OZOFF)
|
||
|
||
MOVE *A8(OCTRL),A14,W ;SET FLIP OF LEGS
|
||
ANDI M_FLIPH,A14
|
||
MOVE *A0(OCTRL),A1,W
|
||
OR A14,A1
|
||
MOVE A1,*A0(OCTRL),W
|
||
|
||
MOVI DUMRETS,A14
|
||
MOVE A14,*A0(OGUNVECT),L
|
||
|
||
CALLA INSPART
|
||
CALLA INSOBJ
|
||
|
||
CALLR RESORT_OBJ ;MAKE SURE IT IS SORTED
|
||
|
||
MOVE A9,A1
|
||
JAUC STRT_ANIM ;MAKE HIM FALL
|
||
|
||
NONTHR_DEATH:
|
||
MOVI NONTHR_DEATH_ANIM,A9
|
||
jruc ND_hk
|
||
|
||
**************************************************************************
|
||
OG_WINDOW_GUNVECT
|
||
* NEEDS OYVEL IN A3
|
||
**************************************************************************
|
||
MOVE *A8(ODEATHCALL),A14,L
|
||
JrZ SKP_DTHCALL
|
||
MMTM SP,A3,A8
|
||
CALL A14
|
||
MMFM SP,A3,A8
|
||
SKP_DTHCALL:
|
||
|
||
MOVI WINBOY_DEATH_ANIM,A1 ;DEFAULT FALL BACK ANIMATION
|
||
|
||
MOVE A3,A3
|
||
JANZ STRT_ANIM ;BR=IN TRANSITION
|
||
|
||
; MOVI 512,A0
|
||
; CALLA RANDPER
|
||
; JAC STRT_ANIM ;BR=LETS FALL BACK
|
||
|
||
MOVE *A8(OZVAL),A1,L
|
||
SUBK 6,A1 ;OFFSET Z
|
||
CALLA SET_ANIPZU
|
||
|
||
CALLR RESORT_OBJ ;MAKE SURE IT IS SORTED
|
||
|
||
MOVI FALLING_DEATH_ANIM,A1
|
||
JAUC STRT_ANIM ;FALL FORWARD ANIMATION
|
||
|
||
**************************************************************************
|
||
OG_POPTOP_GUNVECT
|
||
* NEEDS OYVEL IN A3
|
||
**************************************************************************
|
||
|
||
MOVI WINBOY_DEATH_ANIM,A1 ;DEFAULT FALL BACK ANIMATION
|
||
|
||
MOVE A3,A3
|
||
JANZ STRT_ANIM ;BR=IN TRANSITION
|
||
|
||
MOVI FALLING_DEATH_ANIM,A1
|
||
|
||
MOVE *A8(ODEATHCALL),A14,L
|
||
JAZ STRT_ANIM
|
||
CALL A14
|
||
JAUC STRT_ANIM ;FALL FORWARD ANIMATION
|
||
|
||
**************************************************************************
|
||
OG_DUMPSTER_GUNVECT
|
||
* NEEDS OYVEL IN A3
|
||
**************************************************************************
|
||
|
||
MOVI WINBOY_DEATH_ANIM,A1 ;DEFAULT FALL BACK ANIMATION
|
||
|
||
MOVE A3,A3
|
||
JANZ STRT_ANIM ;BR=IN TRANSITION
|
||
|
||
MOVI FALLING_DEATH_ANIM4,A1
|
||
JAUC STRT_ANIM ;FALL FORWARD ANIMATION
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_OFFSETYZ - OFFSET Y AND EXECUTE A_OFFSETZ *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* AARG+,W = Y PIXEL OFFSET *
|
||
* AARG+,W = Z WORLD OFFSET *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_OFFSETYZ
|
||
CALLA GET_HEAD_PART
|
||
CALLA GETAFARG_WORD
|
||
; MOVE *A8(OFLAGS),A14,L
|
||
; BTST B_OPARTSXY,A14
|
||
; JRZ AOYZ_NOPARTSXY
|
||
; SLL 16,A0
|
||
; MOVE *A8(OPARTSXY),A14,L
|
||
; ADDXY A0,A14
|
||
; MOVE A14,*A8(OPARTSXY),L
|
||
; SRA 16,A0
|
||
;AOYZ_NOPARTSXY
|
||
SLL 15,A0
|
||
|
||
; MOVE *A8(OYVAL),A14,L
|
||
; ADD A0,A14 ;ADD OFFSET TO Y
|
||
; MOVE A14,*A8(OYVAL),L
|
||
|
||
MOVE *A8(OXVAL),A1,L
|
||
MOVE *A8(OYVAL),A2,L
|
||
ADD A0,A2
|
||
MOVE *A8(OZVAL),A3,L
|
||
CALLA GETAFARG_WORD
|
||
ADD A0,A3 ;ADD OFFSET TO Z
|
||
CALLA SET_ANIPU
|
||
CALLR RESORT_OBJ ;MAKE SURE IT IS SORTED
|
||
RETS
|
||
**************************************************************************
|
||
* *
|
||
* A_OFFSETZ *
|
||
* OFFSETZ - OFFSET Z *
|
||
* *
|
||
* PASS: *
|
||
* A0 = Z OFFSET FOR OFFSETZ *
|
||
* A8 = OBJECT *
|
||
* AARG+,W = Z WORLD OFFSET FOR A_OFFSETZ *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_OFFSETZ
|
||
CALLA GETAFARG_WORD
|
||
OFFSETZ
|
||
CALLA GET_HEAD_PART
|
||
|
||
; MOVB *A8(OZOFF),A14
|
||
; MOVE *A8(OZVAL),A1,L
|
||
; ADD A0,A14
|
||
; ADD A0,A1
|
||
; MOVE A1,*A8(OZVAL),L
|
||
; MOVB A14,*A8(OZOFF)
|
||
|
||
MOVE *A8(OZVAL),A1,L
|
||
ADD A0,A1 ;ADD OFFSET TO Z
|
||
CALLA SET_ANIPZU
|
||
CALLR RESORT_OBJ ;MAKE SURE IT IS SORTED
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SET_FALL *
|
||
* SET_FALL - PREPARE GUY TO FALL FORWARD *
|
||
* *
|
||
* PASS: *
|
||
* A0 = OZVEL FOR SET_FALL *
|
||
* A1 = OYACCEL FOR SET_FALL *
|
||
* A8 = OBJECT *
|
||
* AARG+,W = Y ACCELERATION FOR A_SET_FALL *
|
||
* AARG+,W = Z VELOCITY FOR A_SET_FALL *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_SET_FALL
|
||
CALLA GETAFARG_WORD
|
||
MOVE A0,A1
|
||
CALLA GETAFARG_WORD
|
||
SET_FALL
|
||
MOVE A1,*A8(OYACCEL),W
|
||
MOVE A0,*A8(OZVEL),L
|
||
MOVE *A8(OFLAGS),A14,W
|
||
ORI M_GCOLL,A14 ;READY FOR GROUND COLLISION
|
||
MOVE A14,*A8(OFLAGS),W
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SET_JUMP *
|
||
* SET_JUMP - PREPARE GUY TO JUMP FORWARD *
|
||
* *
|
||
* PASS: *
|
||
* A0 = OZVEL FOR SET_JUMP *
|
||
* A1 = OYACCEL FOR SET_JUMP *
|
||
* A2 = OYVEL FOR SET_JUMP *
|
||
* A8 = OBJECT *
|
||
* AARG+,W = Y ACCELERATION FOR A_SET_JUMP *
|
||
* AARG+,L = Y VELOCITY FOR A_SET_JUMP *
|
||
* AARG+,W = Z VELOCITY FOR A_SET_JUMP *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_SET_JUMP
|
||
CALLA GETAFARG_WORD
|
||
MOVE A0,A1
|
||
CALLA GETAFARG_LONG
|
||
MOVE A0,A2
|
||
CALLA GETAFARG_WORD
|
||
SET_JUMP
|
||
MOVE A2,*A8(OYVEL),L
|
||
MOVE A1,*A8(OYACCEL),W
|
||
MOVE A0,*A8(OZVEL),L
|
||
MOVE *A8(OFLAGS),A14,W
|
||
ORI M_GCOLL,A14 ;READY FOR GROUND COLLISION
|
||
MOVE A14,*A8(OFLAGS),W
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* RESORT_OBJ - PLACE AN OBJECT IN ITS CORRECT POSITION IN THE LIST *
|
||
* NOTE: USE THIS WHEN OZVAL IS CHANGED MANUALLY *
|
||
* *
|
||
* PASS: *
|
||
* A8 = DA OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
RESORT_OBJ
|
||
JAUC SORT_OBJ
|
||
|
||
; PUSH A2
|
||
;; MMTM SP,A0,A1,A2,A4,A5,A7,A10
|
||
; MOVE @ZSCROLL,A7,L ;TIMER CHECK DEPENDS ON Z SCROLL
|
||
;
|
||
; MOVI FGLIST,A10
|
||
;
|
||
; MOVE *A8(OZVAL),A1,L ;GET OBJECT'S POSITION
|
||
; MOVE *A8(OYVAL),A2,L
|
||
;
|
||
; MOVE *A8(OBLINK),A0,L ;DEFAULT TO REVERSE CHECK
|
||
; CMP A10,A0
|
||
; JREQ RO_FORWARD_CHECK ;BR=CAN'T DO REVERSE CHECK
|
||
;
|
||
; MOVE *A0(OZVAL),A3,L
|
||
; CMP A1,A3
|
||
; JRLT RO_FORWARD_CHECK ;BR=FORWARD CHECK
|
||
;
|
||
; JRUC RO_REVERSE_NEXT ;LETS GO UP THE LIST
|
||
;
|
||
;RO_REVERSE_LUPE
|
||
; CMP A1,A3
|
||
; JRLT RO_MOVE_IT ;BR=FOUND NEW POSITION
|
||
; JRNE RO_REVERSE_NEXT ;BR=SKIP Y CHECK
|
||
;
|
||
; MOVE *A0(OYVAL),A4,L
|
||
; CMP A2,A4
|
||
; JRGE RO_MOVE_IT ;BR=FOUND NEW POSITION
|
||
;RO_REVERSE_NEXT
|
||
; MOVE *A0(OBLINK),A14,L ;GET NEXT OBJECT
|
||
; CMP A10,A14
|
||
; JREQ RO_MOVE_IT ;BR=AT END OF LIST
|
||
; MOVE A14,A0
|
||
; MOVE *A0(OZVAL),A3,L
|
||
; JRUC RO_REVERSE_LUPE
|
||
;RO_FORWARD_CHECK
|
||
; MOVE *A8,A0,L ;FORWARD CHECK
|
||
; CMP A10,A0
|
||
; JREQ RO_DONE ;BR=CAN'T DO FORWARD CHECK
|
||
;
|
||
; MOVE *A0(OZVAL),A3,L ;LETS GO DOWN THE LIST
|
||
; CMP A1,A3
|
||
; JRGE RO_DONE ;BR=NO SORT NECESSARY
|
||
;
|
||
; JRUC RO_FORWARD_NEXT
|
||
;
|
||
;RO_FORWARD_LUPE
|
||
; CMP A1,A3
|
||
; JRGT RO_MOVE_IT_ONE_OVER ;BR=FOUND NEW POSITION
|
||
; JRNE RO_FORWARD_NEXT ;BR=SKIP Y CHECK
|
||
;
|
||
; MOVE *A0(OYVAL),A4,L
|
||
; CMP A2,A4
|
||
; JRLE RO_MOVE_IT ;BR=FOUND NEW POSITION
|
||
;RO_FORWARD_NEXT
|
||
; MOVE A0,A5 ;SAVE FOR LATER
|
||
; MOVE *A0,A0,L ;GET NEXT OBJECT
|
||
; CMP A10,A0
|
||
; JREQ RO_MOVE_IT_ONE_OVER ;BR=AT END OF LIST
|
||
; MOVE *A0(OZVAL),A3,L
|
||
; JRUC RO_FORWARD_LUPE
|
||
;RO_MOVE_IT_ONE_OVER
|
||
; MOVE A5,A0 ;HEY WAIT A MINUTE! BACKUP ONE
|
||
;RO_MOVE_IT
|
||
; PUSHST
|
||
; DINT
|
||
;
|
||
; MOVE A7,A7
|
||
; JRZ RO_NOTIMER_CHECK ;BR=NOT SCROLLING IN Z
|
||
;
|
||
; MOVE @TIMER,A14,W
|
||
; JRNZ RO_ABORT ;BR=VELADD MAY HAVE SCREWED US
|
||
;RO_NOTIMER_CHECK
|
||
; MOVE *A8(OBLINK),A1,L ;UNLINK A8
|
||
; MOVE *A8,A2,L
|
||
; MOVE A2,*A1,L
|
||
; MOVE A1,*A2(OBLINK),L
|
||
;
|
||
; MOVE *A0,A1,L ;LINK A8 AFTER A0
|
||
; MOVE A8,*A0,L
|
||
; MOVE A1,*A8,L
|
||
; MOVE A0,*A8(OBLINK),L
|
||
; MOVE A8,*A1(OBLINK),L
|
||
;RO_ABORT
|
||
; POPST
|
||
;RO_DONE
|
||
;; MMFM SP,A0,A1,A2,A4,A5,A7,A10
|
||
; PULL A2
|
||
; RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_TOGGLE_DIR - TOGGLE DIRECTION, SIDEWAYS <=> FORWARD *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_TOGGLE_DIR
|
||
MOVE *A8(OEFLAGS),A14,W
|
||
XORI M_SIDE,A14
|
||
MOVE A14,*A8(OEFLAGS),W
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_WINBOY - CHECK POPUP'S Y POSITION *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* AARG+,L = JUMP HERE IF NOT DONE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_CHECK_WINBOY
|
||
MOVE *A8(OYSTART),A1,L
|
||
MOVE *A8(OYVAL),A14,L
|
||
SUB A1,A14
|
||
CMPI -02B333H*10,A14
|
||
JRLE ACW_DONE ;BR=POSITION NOT REACHED
|
||
CALLA GETAFARG_LONG
|
||
MOVE A0,*A8(AnimFrm),L ;LETS GO HERE
|
||
RETS
|
||
ACW_DONE
|
||
SUBI 02B333H*10,A1
|
||
CALLA SET_ANIPYU ;CORRECT Y POSITION
|
||
CLR A14
|
||
MOVE A14,*A8(OYVEL),L ;STOP 'EM
|
||
RETS
|
||
|
||
|
||
|
||
A_CHECK_WINBOY_UP
|
||
move *a8(OYVAL),a14,L
|
||
subi 2b333h,a14
|
||
ACW_hk:
|
||
move a14,*a8(OYVAL),L
|
||
|
||
movb *A8(AnimLoop),A14
|
||
dec A14
|
||
movb A14,*A8(AnimLoop)
|
||
jrz ACWU_X
|
||
move *a8(AnimFrm),a14,L ; STAY HERE until all loops exhausted
|
||
subi 50h,a14
|
||
move a14,*a8(AnimFrm),L
|
||
ACWU_X:
|
||
rets
|
||
|
||
A_CHECK_WINBOY_DN:
|
||
move *a8(OYVAL),a14,L
|
||
addi 2b333h,a14
|
||
jruc ACW_hk
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FIND_NEARESTX_OID - FIND NEAREST OBJECT IN X OF A GIVEN OID THAT THE *
|
||
* GIVEN OBJECT IS FACING *
|
||
* *
|
||
* PASS: *
|
||
* A1 = OID TO FIND *
|
||
* A8 = OBJECT *
|
||
* *
|
||
* RETURN: *
|
||
* A0 = OBJECT FOUND (Z SET AND A0=0 IF NONE FOUND) *
|
||
* *
|
||
**************************************************************************
|
||
|
||
FIND_NEARESTX_OID
|
||
MMTM SP,A2,A4,A5,A6,A7
|
||
CLR A0 ;DEFAULT TO NO OBJECT FOUND
|
||
MOVE *A8(OXVAL),A2,L ;GET POSITION
|
||
MOVE *A8(OCTRL),A14,W ;NEED FOR FLIP TEST
|
||
MOVI 07FFFFFFFH,A5 ;SET FARTHEST DISTANCE
|
||
MOVI FGLIST,A6
|
||
MOVE A6,A7
|
||
FNOX_LUPE
|
||
MOVE *A7,A7,L
|
||
CMP A6,A7
|
||
JREQ FNOX_DONE ;BR=END OF LIST
|
||
|
||
MOVE *A7(OID),A4,W
|
||
CMP A1,A4
|
||
JRNE FNOX_LUPE ;BR=NO OID MATCH
|
||
|
||
MOVE *A7(OXVAL),A4,L ;GET POSITION
|
||
|
||
BTST B_FLIPH,A14
|
||
JRNZ FNOX_FLIP_TEST ;BR=FLIPPED
|
||
SUB A2,A4
|
||
JRN FNOX_LUPE ;BR=NOT FACING THE OBJECT
|
||
JRUC FNOX_CHECK_DIST
|
||
FNOX_FLIP_TEST
|
||
SUB A2,A4
|
||
NEG A4
|
||
JRN FNOX_LUPE ;BR=NOT FACING THE OBJECT
|
||
FNOX_CHECK_DIST
|
||
CMP A5,A4
|
||
JRGE FNOX_LUPE ;BR=NOT CLOSER
|
||
MOVE A4,A5 ;NEW CLOSEST DISTANCE
|
||
MOVE A7,A0 ;SAVE OBJECT ADDRESS
|
||
JRUC FNOX_LUPE
|
||
FNOX_DONE
|
||
MOVE A0,A0 ;REPORT STATUS OF A0
|
||
MMFM SP,A2,A4,A5,A6,A7
|
||
RETS
|
||
|
||
;**************************************************************************
|
||
;* *
|
||
;* FIND_NEARESTY_OID - FIND NEAREST OBJECT IN Y OF A GIVEN OID THAT *
|
||
;* THE GIVEN OBJECT IS HEADING TOWARDS *
|
||
;* *
|
||
;* PASS: *
|
||
;* A1 = OID TO FIND *
|
||
;* A8 = OBJECT *
|
||
;* *
|
||
;* RETURN: *
|
||
;* A0 = OBJECT FOUND (Z SET AND A0=0 IF NONE FOUND) *
|
||
;* *
|
||
;**************************************************************************
|
||
;
|
||
;FIND_NEARESTY_OID
|
||
; MMTM SP,A2,A3,A4,A5,A6,A7
|
||
; CLR A0 ;DEFAULT TO NO OBJECT FOUND
|
||
; MOVE *A8(OYVAL),A2,L ;GET POSITION
|
||
; MOVE *A8(OXVAL),A3,L
|
||
; MOVE *A8(OYVEL),A14,L ;GET DIRECTION
|
||
; JRZ FNOY_DONE ;BR=NO DIRECTION ABORT
|
||
; MOVI 07FFFFFFFH,A5 ;SET FARTHEST DISTANCE
|
||
; MOVI FGLIST,A6
|
||
; MOVE A6,A7
|
||
;FNOY_LUPE
|
||
; MOVE *A7,A7,L
|
||
; CMP A6,A7
|
||
; JREQ FNOY_DONE ;BR=END OF LIST
|
||
;
|
||
; MOVE *A7(OID),A4,W
|
||
; CMP A1,A4
|
||
; JRNE FNOY_LUPE ;BR=NO OID MATCH
|
||
;
|
||
; MOVE *A7(OXVAL),A4,L ;GET X POSITION
|
||
; SUB A3,A4
|
||
; ABS A4
|
||
; CMPI 010000H,A4
|
||
; JRGT FNOY_LUPE ;BR=OUT OF X ERROR RANGE
|
||
;
|
||
; MOVE *A7(OYVAL),A4,L ;GET Y POSITION
|
||
;
|
||
; MOVE A14,A14
|
||
; JRN FNOY_UP_TEST ;BR=GOING UP
|
||
; SUB A2,A4
|
||
; JRN FNOY_LUPE ;BR=WRONG DIRECTION, IT'S ABOVE
|
||
; JRUC FNOY_CHECK_DIST
|
||
;FNOY_UP_TEST
|
||
; SUB A2,A4
|
||
; NEG A4
|
||
; JRN FNOY_LUPE ;BR=WRONG DIRECTION, IT'S BELOW
|
||
;FNOY_CHECK_DIST
|
||
; CMP A5,A4
|
||
; JRGE FNOY_LUPE ;BR=NOT CLOSER
|
||
; MOVE A4,A5 ;NEW CLOSEST DISTANCE
|
||
; MOVE A7,A0 ;SAVE OBJECT ADDRESS
|
||
; JRUC FNOY_LUPE
|
||
;FNOY_DONE
|
||
; MOVE A0,A0 ;REPORT STATUS OF A0
|
||
; MMFM SP,A2,A3,A4,A5,A6,A7
|
||
; RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SET_ODESTX *
|
||
* SET_ODESTX - SET ODEST TO THE NEAREST OBJECT OF A GIVEN OID *
|
||
* *
|
||
* PASS: *
|
||
* A1 = OID FOR SET_ODESTX *
|
||
* A8 = OBJECT *
|
||
* AARG+,W = OID TO FIND FOR A_SET_ODESTX *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_SET_ODESTX
|
||
CALLA GETAFARG_WORD
|
||
MOVE A0,A1
|
||
SET_ODESTX
|
||
CALLA FIND_NEARESTX_OID
|
||
MOVE *A0(OXVAL),*A8(ODEST),L
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_ODESTX - CHECK IF WE REACHED ODEST IN X *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_CHECK_ODESTX
|
||
MOVE *A8(OXVAL),A0,L ;GET POSITIONS
|
||
MOVE *A8(ODEST),A3,L
|
||
MOVE A3,A1
|
||
MOVE *A8(OCTRL),A14,W
|
||
BTST B_FLIPH,A14
|
||
JRZ ACOX_OK ;BR=NO FLIP, NO SWAP
|
||
XOR A0,A3 ;DO THE SWAP!
|
||
XOR A3,A0
|
||
XOR A0,A3
|
||
ACOX_OK
|
||
SUB A0,A3 ;ARE WE THERE YET?
|
||
NEG A3
|
||
JRN ACOX_DONE ;BR=NOT YET
|
||
CALLA SET_ANIPXU ;SET POSITION
|
||
MOVE *A8(OANIM0),*A8(AnimFrm),L ;SET ANIMATIONS
|
||
MOVE *A8(OANIM1),*A8(AnimScr),L
|
||
CLR A14
|
||
MOVB A14,*A8(AnimSlp)
|
||
MOVE A14,*A8(OXVEL),L ;STOP!
|
||
ACOX_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_LADDERBOY_SHOOT - CHECK IF LADDERBOY WANTS TO SHOOT *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* AARG+,W = PERCENT CHANCE TO SHOOT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_LADDERBOY_SHOOT
|
||
CALLA GETAFARG_WORD
|
||
CALLA RANDPER
|
||
JRNC AU_RS_NOPE ;BR=IT DIDN'T HAPPEN
|
||
CALLR A_CHECK_DUDE_FIRE
|
||
JRZ AU_RS_NOPE ;BR=NO HIT
|
||
MOVE *A8(OEFLAGS),A1,W
|
||
ORI M_LEDGE,A1 ;USE LEDGE DEATH
|
||
MOVE A1,*A8(OEFLAGS),W
|
||
AU_RS_NOPE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_GO_OUTSIDE - JUST GO OUTSIDE AND SHUT UP! *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* AARG+,W = NEW OEFLAGS *
|
||
* AARG+,W = Z WORLD OFFSET *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_GO_OUTSIDE
|
||
CALLA GETAFARG_WORD
|
||
MOVE A0,*A8(OEFLAGS),W ;NEW STATE
|
||
JRUC A_OFFSETZ
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SET_OGRNDOFF *
|
||
* SET_OGRNDOFF - SET OGRNDOFF SO IT'S "GROUND PLANE" IS IT'S OYVAL *
|
||
* *
|
||
* PASS: *
|
||
* A1 = EXTRA Y PIXEL OFFSET FOR SET_OGRNDOFF *
|
||
* A8 = OBJECT *
|
||
* AARG+,W = EXTRA Y PIXEL OFFSET FOR A_SET_OGRNDOFF *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_SET_OGRNDOFF
|
||
CALLA GETAFARG_WORD
|
||
MOVE A0,A1
|
||
SET_OGRNDOFF
|
||
MMTM SP,A0,A1
|
||
MOVE @YWORLD,A0,L
|
||
MOVE *A8(OYVAL),A14,L
|
||
SUB A14,A0 ;COMPUTE IT'S GROUND OFFSET
|
||
SLL 15,A1 ;CONVERT OFFSET TO WORLD
|
||
ADD A1,A0 ;ADD WORLD OFFSET
|
||
MOVE A0,*A8(OGRNDOFF),L
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CLR_OGRNDOFF - ZERO OGRNDOFF *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_CLR_OGRNDOFF
|
||
CLR A14
|
||
MOVE A14,*A8(OGRNDOFF),L
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_GO_UP_LADDER - SET LADDERBOY TO GO UP LADDER *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_GO_UP_LADDER
|
||
MOVI M_LADDER,A14 ;USE LADDER DEATH
|
||
MOVE A14,*A8(OEFLAGS),W
|
||
MOVI -0A000H,A14 ;GOING UP!
|
||
MOVE A14,*A8(OYVEL),L
|
||
|
||
; MOVI (TYPE_UNIV & MASK_TYPE) | ID_6, A1 ;OID OF TOP LADDER
|
||
; CALLA FIND_NEARESTY_OID
|
||
; MOVE *A0(OYVAL),*A8(ODEST),L ;SET DESTINATION
|
||
MOVI -02280000H,A14
|
||
MOVE A14,*A8(ODEST),L ;SET DESTINATION
|
||
|
||
MOVI LADDERBOY_ONTOP_TURN_ANIM,A14 ;SET ANIMATIONS
|
||
MOVE A14,*A8(OANIM0),L
|
||
MOVI NONBOY_SIDE_RUN_ANIM,A14
|
||
MOVE A14,*A8(OANIM1),L
|
||
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_ODESTY - CHECK IF WE REACHED ODEST IN Y *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_CHECK_ODESTY
|
||
MOVE *A8(OYVAL),A0,L ;GET POSITIONS
|
||
MOVE *A8(ODEST),A3,L
|
||
MOVE A3,A1
|
||
MOVE *A8(OYVEL),A14,L
|
||
JRZ ACOY_DONE ;BR=NOT MOVIN'
|
||
JRNN ACOY_OK ;BR=NO DOWN, NO SWAP
|
||
XOR A0,A3 ;DO THE SWAP!
|
||
XOR A3,A0
|
||
XOR A0,A3
|
||
ACOY_OK
|
||
SUB A0,A3 ;ARE WE THERE YET?
|
||
NEG A3
|
||
JRN ACOY_DONE ;BR=NOT YET
|
||
CALLA SET_ANIPYU ;SET POSITION
|
||
MOVE *A8(OANIM0),*A8(AnimFrm),L ;SET ANIMATIONS
|
||
MOVE *A8(OANIM1),*A8(AnimScr),L
|
||
CLR A14
|
||
MOVB A14,*A8(AnimSlp)
|
||
MOVE A14,*A8(OYVEL),L ;STOP!
|
||
|
||
MOVE @RAND,A0,W ;DO THE RANDOM FLIP!
|
||
ANDI M_FLIPH,A0
|
||
CALLA TOGGLE_FLPS
|
||
ACOY_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SET_ONTOP - SET LADDERBOY ON TOP OF THE LEDGE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_SET_ONTOP
|
||
MOVI LADDERBOY_LEDGE_CHECK,A14 ;USE LEDGE CHECK
|
||
MOVE A14,*A8(OANIMCHK),L
|
||
|
||
MOVK 3,A1
|
||
MOVK 10,A0
|
||
CALLA RANGRAND
|
||
MOVB A0,*A8(OSHOOTCNT) ;RANDOM SHOOTING CHECK COUNT
|
||
|
||
MOVI M_SIDE,A0 ;USE SIDE DEATH
|
||
MOVE @RAND,A14,W ;CHOOSE RANDOM OTHER DEATH
|
||
BTST 1,A14
|
||
JRZ ASO_UNDERDOG ;BR=DIE THE OTHER WAY
|
||
ORI M_LEDGE,A0 ;USE LEDGE DEATH
|
||
JRUC ASO_SET
|
||
ASO_UNDERDOG
|
||
ORI M_BW,A0 ;USE BEHIND WALL DEATH
|
||
ASO_SET
|
||
MOVE A0,*A8(OEFLAGS),W
|
||
JAUC A_SET_SRUNVEL ;ON YOUR MARK, GET SET, GO!
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* LADDERBOY_LEDGE_CHECK - LOOK FOR THE END OF THE LEDGE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *A8(OROOFXLEFT) = ROOF LEFT BOUNDARY *
|
||
* *A8(OROOFXRGHT) = ROOF RIGHT BOUNDARY *
|
||
* *
|
||
**************************************************************************
|
||
|
||
LADDERBOY_LEDGE_CHECK
|
||
MOVE *A8(OXVAL),A0,L
|
||
MOVE *A8(OROOFXLEFT),A14,L
|
||
CMP A14,A0
|
||
JRLT RLC_GOING_DOWN ;BR=NOT AT LEFT STAIRWAY
|
||
MOVE *A8(OROOFXRGHT),A14,L
|
||
CMP A14,A0
|
||
JRLT RLC_DONE ;BR=NOT AT RIGHT STAIRWAY
|
||
RLC_GOING_DOWN
|
||
|
||
MOVE *A8(OFLAGS),A14,W
|
||
ORI M_GCOLL,A14 ;SET FOR GROUND COLLISION
|
||
MOVE A14,*A8(OFLAGS),W
|
||
|
||
MOVE @YWORLD,A0,L
|
||
MOVI -02180000H,A14
|
||
SUB A14,A0 ;COMPUTE IT'S GROUND OFFSET
|
||
MOVE A0,*A8(OGRNDOFF),L
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OXVEL),L ;STOP!
|
||
|
||
MOVI 04000H,A14 ;INITIAL BOOST
|
||
MOVE A14,*A8(OYACCEL),W
|
||
|
||
MOVI NONBOY_ROOF_CHECK0,A14 ;USE ROOF GUY CHECK
|
||
MOVE A14,*A8(OANIMCHK),L
|
||
|
||
MOVI LADDERBOY_JUMP_ANIM,A1 ;JUMP OFF LEDGE ANIM
|
||
CALLA STRT_ANIM
|
||
|
||
MOVK 12,A0
|
||
CALLR OFFSETZ ;PUT BEHIND LEDGE
|
||
RLC_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SET_ONROOF - SET LADDERBOY ON DA ROOF STUFF *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_SET_ONROOF
|
||
MOVI NONBOY_CVECT,A14 ;NEW VECTORS
|
||
MOVE A14,*A8(OCVECT),L
|
||
MOVI NONBOY_GUNVECT,A14
|
||
MOVE A14,*A8(OGUNVECT),L
|
||
MOVI M_SIDE,A14 ;SIDE STATE
|
||
MOVE A14,*A8(OEFLAGS),W
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_RAND_BRANCH - BRANCH ON RANDOM PERCENTAGE DECISION *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* AARG+,W = PERCENTAGE OF BRANCH *
|
||
* AARG+,L = BRANCH ADDRESS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_RAND_BRANCH
|
||
CALLA GETAFARG_WORD
|
||
CALLA RANDPER
|
||
JRNC ARB_NOPE ;BR=DIDN'T HAPPEN
|
||
CALLA GETAFARG_LONG
|
||
MOVE A0,*A8(AnimFrm),L
|
||
ARB_NOPE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_DOWN - BRANCH IF NOT TRAVELING TOWARDS THE GROUND (DOWNWARD) *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* AARG+,L = BRANCH ADDRESS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_CHECK_DOWN
|
||
.if DEBUG
|
||
|
||
; MOVE *A8(OFLAGS),A14,W
|
||
; BTST B_GCOLL,A14
|
||
; LOCKON Z
|
||
|
||
.endif
|
||
|
||
MOVE *A8(OYVEL),A14,L
|
||
|
||
;I DON'T NEED THIS CAUSE I GOIN TO FIX THE M_GCOLL NOT BEING SET BUG!
|
||
JRZ ACDN_DONE
|
||
|
||
JRP ACDN_DONE ;BR = Going down
|
||
|
||
|
||
CALLA GETAFARG_LONG
|
||
MOVE A0,*A8(AnimFrm),L
|
||
ACDN_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SET_NONBOY_VECTORS - USE NONBOY GUN AND COLLISION VECTORS *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_SET_NONBOY_VECTORS
|
||
CLR A14
|
||
MOVE A14,*A8(OEFLAGS),W
|
||
MOVI NONBOY_CVECT,A14 ;NEW VECTORS
|
||
MOVE A14,*A8(OCVECT),L
|
||
MOVI NONBOY_GUNVECT,A14
|
||
MOVE A14,*A8(OGUNVECT),L
|
||
RETS
|
||
|
||
;**************************************************************************
|
||
;* *
|
||
;* A_SET_JUMPBOY0 - SET JUMPBOY STATE 0, ABOVE THE RAILING IN THE AIR *
|
||
;* *
|
||
;* PASS: *
|
||
;* A8 = OBJECT *
|
||
;* *
|
||
;**************************************************************************
|
||
;
|
||
;A_SET_JUMPBOY0
|
||
; CLR A14
|
||
; MOVE A14,*A8(OGRNDOFF),L
|
||
; MOVI -0400H,A14
|
||
; MOVE A14,*A8(OZVEL),L
|
||
; RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_NB_FALL_SOUND - Make the sound for the NON-BOY falling to the *
|
||
* ground. *
|
||
* A8 = Ptr to NON-BOY object *
|
||
* *
|
||
**************************************************************************
|
||
A_NB_FALL_SOUND
|
||
calla GET_HEAD_PART
|
||
calla DIST_FROM_GROUND
|
||
sra 16,A1
|
||
cmpi 80H,A1
|
||
jrle ANFS_Short_Sound
|
||
movi SND_NB_LONG_FALL,A0
|
||
jauc ONESND_Z ;Make the righteous falling sound
|
||
ANFS_Short_Sound
|
||
movk NUM_SFALL_SNDS,A0 ;Pick from 3
|
||
calla RAND0 ;Randomly
|
||
sll 5,A0
|
||
addi SHORT_FALL_TBL,A0
|
||
move *A0,A0,L
|
||
jauc ONESND ;Make a short fall sound
|
||
; jauc ONESND_Z ;Make a short fall sound with volume
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SEPERATE_NONBOY - SEPERATE NONBOY FROM HEAD OBJECT *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_SEPERATE_NONBOY
|
||
MOVE *A8(OPART1),A14,L
|
||
CMP A8,A14
|
||
JREQ ASN_DONE ;BR=THIS IS THE HEAD OBJECT!
|
||
CALLA PULL_PART
|
||
MOVE *A8(OFLAGS),A14,L
|
||
ANDNI M_OPARTSXY,A14
|
||
MOVE A14,*A8(OFLAGS),L
|
||
CLR A14
|
||
MOVE A14,*A8(OPARTSXY),L
|
||
ASN_DONE
|
||
JAUC A_SET_FALL
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_START_X_DECEL - START THE DECELERATE IN X PROCESS *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_START_X_DECEL
|
||
MOVE *A8(OXVEL),A9,L
|
||
JRZ ASXD_ABORT
|
||
CREATE PID_IND,X_DECEL_PROC
|
||
MOVE A0,*A8(OPLINK),L
|
||
ASXD_ABORT
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* X_DECEL_PROC - THE DECELARATION PROCESS *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* A9 = INITIAL VELOCITY *
|
||
* *
|
||
**************************************************************************
|
||
|
||
X_DECEL_PROC
|
||
SRA 1,A9
|
||
MOVE A9,*A8(OXVEL),L
|
||
JRZ XDP_DONE
|
||
SLEEP 1
|
||
JRUC X_DECEL_PROC
|
||
XDP_DONE
|
||
CLR A14
|
||
MOVE A14,*A8(OPLINK),L
|
||
DIE
|
||
|
||
|
||
**************************************************************************
|
||
**************************************************************************
|
||
|
||
LADDERBOY_INIT
|
||
.byte 4, 0, 0, 1 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long P_NONBOYY ;IMGPAL
|
||
.word OID_NONBOY, OM_COLL ;OID, GLOBAL_OPTIONS
|
||
.LONG OUTCLUB_CVECT
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF
|
||
* .word OPTIONS
|
||
LWWWW G_H1RUN__A1, DMAWNZ, 0, 0, OM_GUNV
|
||
.LONG OUTCLUB_GUNVECT
|
||
LWWWW G_T1RUN__A1, DMAWNZ, 0, 0, OM_PRVGUNV
|
||
LWWWW G_L1RUN__A1, DMAWNZ, 0, 0, OM_PRVGUNV
|
||
LWWWW G_L1RUN__A1, DMAWNZ, M_NODISP, 0, OM_PRVGUNV
|
||
|
||
DOORBOY_INIT
|
||
.byte 1, 0, 0, 1 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long P_NONBOYY ;IMGPAL
|
||
.word OID_NONBOY, OM_COLL ;OID, GLOBAL_OPTIONS
|
||
.LONG OUTCLUB_CVECT
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF
|
||
* .word OPTIONS
|
||
LWWWW G_B1SHOOTA1, DMAWNZ, 0, 0, OM_GUNV
|
||
.LONG OUTCLUB_GUNVECT
|
||
|
||
WINBOY_INIT
|
||
.byte 1, 0, 0, 1 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long P_NONBOYY ;IMGPAL
|
||
.word OID_NONBOY, OM_COLL ;OID, GLOBAL_OPTIONS
|
||
.LONG OUTCLUB_CVECT
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF
|
||
* .word OPTIONS
|
||
LWWWW G_B1POPCOP3, DMAWNZ, M_NOPARTANI, 0, OM_GUNV
|
||
.LONG OUTCLUB_GUNVECT
|
||
|
||
BUSPOP_INIT
|
||
.byte 1, 0, 0, 1 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long P_NONBOYY ;IMGPAL
|
||
.word OID_NONBOY, 0 ;OID, GLOBAL_OPTIONS
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF
|
||
* .word OPTIONS
|
||
LWWWW G_B1POPCOP3, DMAWNZ|M_FLIPH, M_NOPARTANI, 0, OM_GUNV | OM_ANIM
|
||
.LONG NONBOY_GUNVECT
|
||
.long WINBOY_ANIM
|
||
|
||
|
||
NONTHR_CVECT
|
||
WWL OID_PROCKET,~MASK_PLAYER,NONTHR_ROCKET_COLL
|
||
WWL OID_PEXPLOSION,~MASK_PLAYER,NONTHR_EXPLOSION_COLL
|
||
|
||
WWL OID_BLOWUP,0FFFFH,OUTCLUB_SBOMB_CARNAGE
|
||
|
||
WWL OID_GRND,0FFFFH,OUTCLUB_GRND_COLLVECT
|
||
|
||
WL 0,DUMCRETS
|
||
|
||
NONTHR_EXPLOSION_COLL
|
||
CALLA GET_HEAD_PART
|
||
MOVE *A8(OEFLAGS),A14,W
|
||
BTST B_ATEROCKET,A14 ;Did he get hit by a rocket?
|
||
JRNZ NONTHR_COLLVECT ;BR = No, just do generic for now.
|
||
rets
|
||
|
||
BUSPOP_DEATH_ANIM
|
||
LW G_B1DEATHE2,6
|
||
LW G_B1DEATHE4,6
|
||
LW G_B1DEATHE5,6
|
||
LW G_B1DEATHE6,6
|
||
LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
BUSPOP_DEATH:
|
||
movi BUSPOP_DEATH_ANIM,a1
|
||
jauc STRT_ANIM
|
||
|
||
BWBOY_INIT
|
||
.byte 1, 0, 0, 1 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long P_NONBOYY ;IMGPAL
|
||
.word OID_NONBOY, OM_COLL ;OID, GLOBAL_OPTIONS
|
||
.LONG OUTCLUB_CVECT
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF
|
||
* .word OPTIONS
|
||
LWWWW G_B5SPxSHA4, DMAWNZ, 0, 0, OM_GUNV
|
||
.LONG OUTCLUB_GUNVECT
|
||
|
||
NONBOY_LEGS_INIT
|
||
.LONG G_BOTFAL, DUMCOLL
|
||
.WORD OID_NONBOY, DMAWNZ, 0, 3
|
||
.LONG 0
|
||
|
||
;RUNOUTBOY_ANIM
|
||
; LW 1,HEADON_TIME
|
||
;
|
||
; LW G_H1RUN__A2,1|AMulti
|
||
; LW G_T1RUN__A2,1|AMulti
|
||
; LW G_L1RUN__A2,HEADON_TIME
|
||
;
|
||
; LW G_H1RUN__A3,1|AMulti
|
||
; LW G_T1RUN__A3,1|AMulti
|
||
; LW G_L1RUN__A3,HEADON_TIME
|
||
;
|
||
; LWL 1,1|AFunc,A_SET_RUNOUTBOY
|
||
|
||
;JUMPBOY_ANIM
|
||
; LW 1,HEADON_TIME
|
||
;
|
||
; LW G_H1RUN__A2,1|AMulti
|
||
; LW G_T1RUN__A2,1|AMulti
|
||
; LW G_L1RUN__A2,HEADON_TIME
|
||
;
|
||
; LW G_H1RUN__A3,1|AMulti
|
||
; LW G_T1RUN__A3,1|AMulti
|
||
; LW G_L1RUN__A3,HEADON_TIME
|
||
;
|
||
; LWLWW 1,1|AFunc,A_GO_OUTSIDE+2,M_LEDGE,-010H
|
||
;
|
||
; LWLWL 1,1|AFunc,A_RAND_BRANCH+3,512,NONBOY_HEADON_SHOOT_ANIM
|
||
;JUMPBOY_JUMP_ANIM
|
||
; LW G_H1JUMP_A3,1|AMulti
|
||
; LW G_T1JUMP_A3,1|AMulti
|
||
; LW G_L1JUMP_A3,1|AMulti
|
||
; LWL 1,3|AFunc,OBJ_OFF
|
||
;
|
||
; LW G_H1JUMP_A2,1|AMulti
|
||
; LW G_T1JUMP_A2,1|AMulti
|
||
; LW G_L1JUMP_A2,3
|
||
;
|
||
; LW G_H1JUMP_A1,1|AMulti
|
||
; LW G_T1JUMP_A1,1|AMulti
|
||
; LW G_L1JUMP_A1,2
|
||
;
|
||
; LW G_H1JUMP_A2,1|AMulti
|
||
; LW G_T1JUMP_A2,1|AMulti
|
||
; LW G_L1JUMP_A2,3
|
||
;
|
||
; LW G_H1JUMP_A3,1|AMulti
|
||
; LW G_T1JUMP_A3,1|AMulti
|
||
; LW G_L1JUMP_A3,3
|
||
;
|
||
; LWLWLW G_H1JUMP_A4,1|AMulti|AFunc,A_SET_JUMP+4,04000H,-040000H,0
|
||
; LW G_T1JUMP_A4,1|AMulti
|
||
; LW G_L1JUMP_A4,1
|
||
;
|
||
; LWL 1,1|AFunc,A_SET_NONBOY_VECTORS
|
||
;; LWLW 1,1|AFunc,A_SET_OGRNDOFF+1,-10
|
||
;JUMPBOY_JUMP_UPTIME
|
||
; LWLL 1,2|AFunc,A_CHECK_DOWN+2,JUMPBOY_JUMP_UPTIME
|
||
; LWL 1,1|AFunc,A_SET_JUMPBOY0
|
||
;JUMPBOY_JUMP_HANGTIME
|
||
; LWLL 1,2|AFunc,A_CHECK_GROUND+2,JUMPBOY_JUMP_HANGTIME
|
||
;
|
||
; LW G_H1JUMP_A3,1|AMulti
|
||
; LW G_T1JUMP_A3,1|AMulti
|
||
; LW G_L1JUMP_A3,3
|
||
;
|
||
; LW G_H1JUMP_A2,1|AMulti
|
||
; LW G_T1JUMP_A2,1|AMulti
|
||
; LW G_L1JUMP_A2,3
|
||
;
|
||
; LW G_H1JUMP_A1,1|AMulti
|
||
; LW G_T1JUMP_A1,1|AMulti
|
||
; LW G_L1JUMP_A1,2
|
||
;
|
||
; LW G_H1JUMP_A2,1|AMulti
|
||
; LW G_T1JUMP_A2,1|AMulti
|
||
; LW G_L1JUMP_A2,3
|
||
;
|
||
; LW G_H1JUMP_A3,1|AMulti
|
||
; LW G_T1JUMP_A3,1|AMulti
|
||
; LW G_L1JUMP_A3,3
|
||
;
|
||
; LWLW G_H2RUN__B4,1|AMulti|AFunc,A_TOGGLE_OEFLAGS+1,M_SIDE
|
||
; LW G_T2RUN__B4,1|AMulti
|
||
; LW G_L2RUN__B4,1|AMulti
|
||
; LWL G_A2RUN__B4,2|AFunc,OBJ_ON
|
||
;
|
||
; LW G_H2RUN__B5,1|AMulti
|
||
; LW G_T2RUN__B5,1|AMulti
|
||
; LW G_L2RUN__B5,1|AMulti
|
||
; LW G_Z2RUN__B5,1
|
||
;
|
||
; LWL 1,1|AFunc,A_SET_SRUNVEL
|
||
; LWLL 1,1|AFunc,A_AnimGo+2,NONBOY_SIDE_RUN_ANIM
|
||
|
||
LADDERBOY_ANIM
|
||
LW 1,HEADON_TIME
|
||
|
||
LW G_H1RUN__A2,1|AMulti
|
||
LW G_T1RUN__A2,1|AMulti
|
||
LW G_L1RUN__A2,HEADON_TIME
|
||
|
||
LW G_H1RUN__A3,1|AMulti
|
||
LW G_T1RUN__A3,1|AMulti
|
||
LW G_L1RUN__A3,HEADON_TIME
|
||
|
||
LWLWW G_H2RUN__B4,1|AMulti|AFunc,A_GO_OUTSIDE+2,M_SIDE,-030H
|
||
LW G_T2RUN__B4,1|AMulti
|
||
LW G_L2RUN__B4,1|AMulti
|
||
LWL G_A2RUN__B4,4|AFunc,OBJ_ON
|
||
|
||
LW G_H2RUN__B5,1|AMulti
|
||
LW G_T2RUN__B5,1|AMulti
|
||
LW G_L2RUN__B5,1|AMulti
|
||
LW G_Z2RUN__B5,3
|
||
|
||
LWL 1,1|AFunc,A_SET_SRUNVEL
|
||
|
||
LADDERBOY_SIDERUN_ANIM
|
||
LWL G_H3RUN__C1,1|AMulti|AFunc,A_CHECK_ODESTX
|
||
LW G_T3RUN__C1,1|AMulti
|
||
LW G_L3RUN__C1,1|AMulti
|
||
LW G_Z3RUN__C1,SIDERUN_TIME
|
||
|
||
LWL G_H3RUN__C2,1|AMulti|AFunc,A_CHECK_ODESTX
|
||
LW G_T3RUN__C2,1|AMulti
|
||
LW G_L3RUN__C2,1|AMulti
|
||
LW G_Z3RUN__C2,SIDERUN_TIME
|
||
|
||
LWL G_H3RUN__C3,1|AMulti|AFunc,A_CHECK_ODESTX
|
||
LW G_T3RUN__C3,1|AMulti
|
||
LW G_L3RUN__C3,1|AMulti
|
||
LW G_Z3RUN__C3,SIDERUN_TIME
|
||
|
||
LWL G_H3RUN__C4,1|AMulti|AFunc,A_CHECK_ODESTX
|
||
LW G_T3RUN__C4,1|AMulti
|
||
LW G_L3RUN__C4,1|AMulti
|
||
LW G_Z3RUN__C4,SIDERUN_TIME
|
||
|
||
LWL G_H3RUN__C5,1|AMulti|AFunc,A_CHECK_ODESTX
|
||
LW G_T3RUN__C5,1|AMulti
|
||
LW G_L3RUN__C5,1|AMulti
|
||
LW G_Z3RUN__C5,SIDERUN_TIME
|
||
|
||
LWL G_H3RUN__C6,1|AMulti|AFunc,A_CHECK_ODESTX
|
||
LW G_T3RUN__C6,1|AMulti
|
||
LW G_L3RUN__C6,1|AMulti
|
||
LW G_Z3RUN__C6,SIDERUN_TIME
|
||
|
||
LWL G_H3RUN__C7,1|AMulti|AFunc,A_CHECK_ODESTX
|
||
LW G_T3RUN__C7,1|AMulti
|
||
LW G_L3RUN__C7,1|AMulti
|
||
LW G_Z3RUN__C7,SIDERUN_TIME
|
||
|
||
LWL G_H3RUN__C8,1|AMulti|AFunc,A_CHECK_ODESTX
|
||
LW G_T3RUN__C8,1|AMulti
|
||
LW G_L3RUN__C8,1|AMulti
|
||
LW G_Z3RUN__C8,SIDERUN_TIME-1
|
||
|
||
LWL 1,1|AFunc,A_LADDERBOY_SHOOT+1,1024/2
|
||
.long 0
|
||
|
||
LADDERBOY_TURN_ANIM
|
||
LW G_HDRNxLDE1,1|AMulti
|
||
LW G_TDRNxLDE1,1|AMulti
|
||
LW G_LDRNxLDE1,1|AMulti
|
||
LW G_ADRNxLDE1,4
|
||
|
||
LWL 1,1|AMulti|AFunc,A_GO_UP_LADDER
|
||
|
||
LADDERBOY_UP_LADDER_ANIM
|
||
LWL G_H5LADDRE1,1|AMulti|AFunc,A_CHECK_ODESTY
|
||
LW G_T5LADDRE1,1|AMulti
|
||
LW G_L5LADDRE1,1|AMulti
|
||
LWL G_Z5LADDRE1,LADDER_TIME|AFunc,OBJ_ON
|
||
|
||
LWL G_H5LADDRE2,1|AMulti|AFunc,A_CHECK_ODESTY
|
||
LW G_T5LADDRE2,1|AMulti
|
||
LW G_L5LADDRE2,1|AMulti
|
||
LW G_Z5LADDRE2,LADDER_TIME
|
||
|
||
LWL G_H5LADDRE3,1|AMulti|AFunc,A_CHECK_ODESTY
|
||
LW G_T5LADDRE3,1|AMulti
|
||
LW G_L5LADDRE3,1|AMulti
|
||
LWL 1,LADDER_TIME|AFunc,OBJ_OFF
|
||
|
||
LWL G_H5LADDRE4,1|AMulti|AFunc,A_CHECK_ODESTY
|
||
LW G_T5LADDRE4,1|AMulti
|
||
LW G_L5LADDRE4,1|AMulti
|
||
LWL G_Z5LADDRE4,LADDER_TIME|AFunc,OBJ_ON
|
||
|
||
LWL G_H5LADDRE5,1|AMulti|AFunc,A_CHECK_ODESTY
|
||
LW G_T5LADDRE5,1|AMulti
|
||
LW G_L5LADDRE5,1|AMulti
|
||
LW G_Z5LADDRE5,LADDER_TIME
|
||
|
||
LWL G_H5LADDRE6,1|AMulti|AFunc,A_CHECK_ODESTY
|
||
LW G_T5LADDRE6,1|AMulti
|
||
LW G_L5LADDRE6,1|AMulti
|
||
LWL 1,LADDER_TIME|AFunc,OBJ_OFF
|
||
|
||
.long 0
|
||
|
||
LADDERBOY_ONTOP_TURN_ANIM
|
||
LWLW 1,1|AFunc,A_SET_OEFLAGS+1,M_SIDE
|
||
LWLW 1,1|AFunc,A_OFFSETZ+1,02BH
|
||
LW G_HDRNxLDE1,1|AMulti
|
||
LW G_TDRNxLDE1,1|AMulti
|
||
LW G_LDRNxLDE1,1|AMulti
|
||
LWL G_ADRNxLDE1,4|AFunc,OBJ_ON
|
||
|
||
LWL 1,1|AFunc,A_SET_ONTOP
|
||
.long 0
|
||
|
||
LADDERBOY_JUMP_ANIM
|
||
LW G_HDRNxLDE1,1|AMulti
|
||
LW G_TDRNxLDE1,1|AMulti
|
||
LW G_LDRNxLDE1,1|AMulti
|
||
LW G_ADRNxLDE1,1
|
||
|
||
LWLW 1,3|AFunc,A_SET_OEFLAGS+1,M_SIDE|M_LADDER
|
||
|
||
LWLW G_H5LADDRE3,1|AMulti|AFunc,A_TOGGLE_FLPS+1,M_FLIPH
|
||
LW G_T5LADDRE3,1|AMulti
|
||
LW G_L5LADDRE3,1|AMulti
|
||
LWL 1,LADDER_TIME|AFunc,OBJ_OFF
|
||
|
||
LADDERBOY_JUMP_HANGTIME
|
||
LWLL 1,2|AFunc,A_CHECK_GROUND+2,LADDERBOY_JUMP_HANGTIME
|
||
|
||
LWL G_HDRNxLDE1,1|AMulti|AFunc,A_SET_ONROOF
|
||
LW G_TDRNxLDE1,1|AMulti
|
||
LW G_LDRNxLDE1,1|AMulti
|
||
LW G_ADRNxLDE1,4
|
||
|
||
LWL 1,1|AFunc,A_SET_SRUNVEL
|
||
LWLL 1,1|AFunc,A_AnimGo+2,NONBOY_SIDE_RUN_ANIM
|
||
|
||
DOORBOY_ANIM
|
||
LW G_B1SHOOTA1,1
|
||
; LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,5,20
|
||
LW 1,0
|
||
DOORBOY_ANIM_LUPE
|
||
LW G_B1SHOOTA2,1
|
||
LWLWW 1,5|AFunc,A_PART_FIRE_FNC+2,-25,-83
|
||
LW G_B1SHOOTA1,6
|
||
LWLL 1,1|AFunc,A_CHECK_OETIME+2,DOORBOY_ANIM_LUPE
|
||
LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
|
||
HATCHBOY_ANIM
|
||
LWL 1,1|AFunc,A_CHECK_WINBOY_UP
|
||
; LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,5,20
|
||
LWLW 1,0|AFunc,A_OZVAL_DELTA+1,-2
|
||
HATCHBOY_SHOOT_ANIM
|
||
LW G_B1SHTCOP1,1
|
||
LWLWW 1,5|AFunc,A_ALL_FIRE_FNC+2,-25,-83
|
||
LW G_B1SHTCOP2,6
|
||
LWLL 1,1|AFunc,A_CHECK_OETIME+2,HATCHBOY_SHOOT_ANIM
|
||
LWL 1,3|AFunc,DOWN_THE_HATCH
|
||
LWLW G_B1POPCOP3,1|AFunc,A_Set_AnimLoop+1,10
|
||
LWL 1,1|AFunc,A_CHECK_WINBOY_DN
|
||
LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
WINBOY_ANIM
|
||
LWLL 1,1|AFunc,A_CHECK_WINBOY+2,WINBOY_ANIM
|
||
; LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,5,20
|
||
LW 1,0
|
||
WINBOY_SHOOT_ANIM
|
||
LW G_B1SHTCOP1,1
|
||
LWLWW 1,5|AFunc,A_PART_FIRE_FNC+2,-25,-83
|
||
LW G_B1SHTCOP2,6
|
||
LWLL 1,1|AFunc,A_CHECK_OETIME+2,WINBOY_SHOOT_ANIM
|
||
LW 1,3
|
||
LWLL G_B1POPCOP3,11|AFunc,A_SET_OYVEL+2,02B333H
|
||
LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
BWBOY_ANIM
|
||
LW G_B5SPxSHA4,3
|
||
LW G_B5SPxSHA5,3
|
||
LWL G_B5SPxSHA6,3|AFunc,A_TOGGLE_DIR
|
||
LWLWW G_B1SHOOTA1,1|AFunc,A_RAND_AnimSLP+2,5,20
|
||
; LWL G_B5SPxSHA7,3|AFunc,A_TOGGLE_DIR
|
||
; LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,5,20
|
||
LW 1,0
|
||
BWBOY_SHOOT_ANIM
|
||
LW G_B1SHOOTA1,1
|
||
LWLWW 1,5|AFunc,A_PART_FIRE_FNC+2,-24,-80
|
||
LW G_B1SHOOTA2,6
|
||
LWLL 1,1|AFunc,A_CHECK_OETIME+2,BWBOY_SHOOT_ANIM
|
||
; LW G_B5SPxSHA7,3
|
||
LWL G_B5SPxSHA6,3|AFunc,A_TOGGLE_DIR
|
||
LW G_B5SPxSHA5,3
|
||
LW G_B5SPxSHA4,3
|
||
LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
FALLDOWN_DEATH_ANIM
|
||
; LW G_B1DEATHE1,6
|
||
LWL G_B1DEATHE2,6|AFunc,A_HEADON_DEATH_SETUP
|
||
LW G_B1DEATHE4,4
|
||
LW G_B1DEATHE5,4
|
||
LW G_B1DEATHE6,5
|
||
LW G_B1DEATHE8,6+30
|
||
LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
|
||
PILLAR_DEATH_ANIM
|
||
; LW G_B1DEATHE1,6
|
||
LW G_B1DEATHE2,6
|
||
LW G_B1DEATHE4,4
|
||
LW G_B1DEATHE5,4
|
||
LW G_B1DEATHE6,5
|
||
LW G_B1DEATHE8,40
|
||
LWL 1,1|AFunc,A_RESTART_PILLBOY
|
||
.long 0
|
||
|
||
|
||
;FALLDOWN_DEATH_ANIM2
|
||
;; LW G_B1DEATHE1,6
|
||
; LW G_B1DEATHE2,6
|
||
; LW G_B1DEATHE4,4
|
||
; LW G_B1DEATHE5,4
|
||
; LW G_B1DEATHE6,5
|
||
; LW G_B1DEATHE8,6+20
|
||
; LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
WINBOY_DEATH_ANIM
|
||
; LW G_B1DEATHE1,6
|
||
LW G_B1DEATHE2,6
|
||
LW G_B1DEATHE4,4
|
||
LW G_B1DEATHE5,4
|
||
LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
FALLING_DEATH_ANIM
|
||
LW G_T1WINFAA2,4
|
||
LW G_T1WINFAA3,4
|
||
LW G_T1WINFAA4,2
|
||
LWLW 1,1|AFunc,A_OFFSETZ+1,-060H
|
||
LW G_T1WINFAA5,4
|
||
LW G_T1WINFAA7,4
|
||
LW G_T1WINFAA11,4
|
||
LWLWW G_T1WINFAA12,5|AFunc,A_SET_FALL+2,04000H,-02A0H
|
||
LWL G_T1WINFAA13,5|AFunc,A_NB_FALL_SOUND
|
||
LW G_T1WINFAA15,5
|
||
LW G_T1WINFAA16,5
|
||
LWL G_T1WINFAA18,5+60|AFunc,A_CLR_OZVEL
|
||
LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
FALLING_DEATH_ANIM2
|
||
LWLW G_T1WINFAA2,4|AFunc,A_OFFSETZ+1,-3
|
||
LW G_T1WINFAA3,4
|
||
LW G_T1WINFAA4,4
|
||
LW G_T1WINFAA5,4
|
||
LW G_T1WINFAA7,1|AMulti
|
||
LW G_T1BOTFAA7,3
|
||
LWLWW 1,1|AFunc,A_OFFSETYZ+2,10,-05DH
|
||
LW G_T1WINFAA11,1|AMulti
|
||
LWL 1,1|AFunc,DELETE_LEGS
|
||
LWLWW 1,3|AFunc,A_SET_FALL+2,04000H,0
|
||
LW G_T1WINFAA12,5
|
||
LWL G_T1WINFAA13,5|AFunc,A_NB_FALL_SOUND
|
||
LW G_T1WINFAA15,5
|
||
LW G_T1WINFAA16,5
|
||
LWL G_T1WINFAA18,5+60|AFunc,A_CLR_OZVEL
|
||
LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
|
||
NONTHR_DEATH_ANIM
|
||
LWLWL G_T1WINFAA2,4|AFunc,A_CREATEP+3,PID_IND,MOVE_NONTHR_FWD
|
||
LW G_T1WINFAA3,4
|
||
LW G_T1WINFAA4,4
|
||
LW G_T1WINFAA5,4
|
||
LW G_T1WINFAA7,1|AMulti
|
||
LW G_T1BOTFAA7,4
|
||
LWL G_T1WINFAA11,1|AFunc,DELETE_LEGS
|
||
LWLWW 1,5|AFunc,A_SET_FALL+2,04000H,0
|
||
LW G_T1WINFAA12,6
|
||
LWL G_T1WINFAA13,6|AFunc,A_NB_FALL_SOUND
|
||
LW G_T1WINFAA15,6
|
||
LW G_T1WINFAA16,6
|
||
LWL G_T1WINFAA18,127|AFunc,OBJPROC_KILL
|
||
LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
MOVE_NONTHR_FWD:
|
||
move *a8(ODATA+100h),a0 ; adjust offset from bus doors
|
||
subk 4,a0
|
||
move a0,*a8(ODATA+100h)
|
||
cmpi -100,a0
|
||
jale SUCIDE
|
||
sloop 1,MOVE_NONTHR_FWD
|
||
|
||
DELETE_LEGS:
|
||
move *a8(OPARTS),a8,L
|
||
jrz DLdun
|
||
move *a8(OID),a1
|
||
cmpi OID_NONBOY,a1
|
||
jrne DELETE_LEGS
|
||
calla DELETE_OBJ
|
||
DLdun:
|
||
rets
|
||
|
||
|
||
|
||
FALLING_DEATH_ANIM3
|
||
LWLW G_T1WINFAA2,4|AFunc,A_OFFSETZ+1,-3
|
||
LW G_T1WINFAA3,4
|
||
LW G_T1WINFAA4,4
|
||
LW G_T1WINFAA5,4
|
||
LW G_T1WINFAA7,1|AMulti
|
||
LW G_T1BOTFAA7,3
|
||
LWLWW 1,1|AFunc,A_OFFSETYZ+2,10,-05DH
|
||
LW G_T1WINFAA11,1|AMulti
|
||
LWL 1,4|AFunc,DELETE_OBJ
|
||
LWLWW G_T1WINFAA12,5|AFunc,A_SET_FALL+2,04000H,-02A0H
|
||
LWL G_T1WINFAA13,5|AFunc,A_NB_FALL_SOUND
|
||
LW G_T1WINFAA15,5
|
||
LW G_T1WINFAA16,5
|
||
LWL G_T1WINFAA18,5+60|AFunc,A_CLR_OZVEL
|
||
LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
FALLING_DEATH_ANIM4
|
||
LW G_T1WINFAA2,4
|
||
LW G_T1WINFAA3,4
|
||
LW G_T1WINFAA4,4
|
||
LW G_T1WINFAA5,2
|
||
LWLW 1,1|AFunc,A_OFFSETZ+1,-10
|
||
LWLWLW G_T1WINFAA7,4|AFunc,A_SET_JUMP+4,04000H,-060000H,-02A0H
|
||
LW G_T1WINFAA11,4
|
||
LW G_T1WINFAA12,5
|
||
LWL G_T1WINFAA13,5|AFunc,A_NB_FALL_SOUND
|
||
LW G_T1WINFAA15,5
|
||
LW G_T1WINFAA16,5
|
||
LWL G_T1WINFAA18,5+60|AFunc,A_CLR_OZVEL
|
||
LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
FALLING_DEATH_ANIM5
|
||
LWLW G_T1WINFAA2,4|AFunc,A_OFFSETZ+1,-3
|
||
LW G_T1WINFAA3,4
|
||
LW G_T1WINFAA4,4
|
||
LW G_T1WINFAA5,4
|
||
LW G_T1WINFAA7,3
|
||
LWLWW 1,1|AFunc,A_OFFSETYZ+2,10,-05DH
|
||
LW G_T1WINFAA11,1
|
||
LWLWW 1,1|AFunc,A_SEPERATE_NONBOY+2,04000H,-0300H
|
||
LWL 1,2|AFunc,A_START_X_DECEL
|
||
LW G_T1WINFAA12,5
|
||
LWL G_T1WINFAA13,5|AFunc,A_NB_FALL_SOUND
|
||
LW G_T1WINFAA15,5
|
||
LW G_T1WINFAA16,5
|
||
LWL G_T1WINFAA18,5+60|AFunc,A_CLR_OZVEL
|
||
LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
FALLING_DEATH_LEGS_ANIM5
|
||
LW 1,4
|
||
LW 1,4
|
||
LW 1,4
|
||
LW 1,4
|
||
LW G_T1BOTFAA7,3
|
||
LW 1,1
|
||
LWL 1,1|AFunc,DELETE_OBJ
|
||
|
||
LADDER_FALL_DEATH_ANIM
|
||
LW G_H5LADFALA4,1|AMulti
|
||
LW G_T5LADFALA4,1|AMulti
|
||
LW G_A5LADFALA4,1|AMulti
|
||
LWL G_Z5LADFALA4,8|AFunc,OBJ_ON
|
||
|
||
LWL G_H5LADFALA5,1|AMulti|AFunc,A_NB_FALL_SOUND
|
||
LW G_T5LADFALA5,1|AMulti
|
||
LW G_A5LADFALA5,1|AMulti
|
||
LW G_Z5LADFALA5,7
|
||
|
||
LWLWW G_H5LADFALA6,1|AMulti|AFunc,A_SET_FALL+2,04000H,-02A0H
|
||
LW G_T5LADFALA6,1|AMulti
|
||
LW G_A5LADFALA6,1|AMulti
|
||
LW G_Z5LADFALA6,20
|
||
|
||
LWL 1,1|AFunc,A_CLR_OZVEL
|
||
LADDER_FALL_DEATH_HANGTIME
|
||
LWLL 1,2|AFunc,A_CHECK_GROUND+2,LADDER_FALL_DEATH_HANGTIME
|
||
|
||
LW G_L5LADFALA8,1|AMulti
|
||
LW G_T5LADFALA8,1|AMulti
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LWL 1,60|AFunc,OBJ_OFF
|
||
|
||
LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
LADDER_FALL_DEATH_ANIM2
|
||
LW G_H5LADFALA4,1|AMulti
|
||
LW G_T5LADFALA4,1|AMulti
|
||
LW G_A5LADFALA4,1|AMulti
|
||
LWL G_Z5LADFALA4,7|AFunc,OBJ_ON
|
||
|
||
LWL G_H5LADFALA5,1|AMulti|AFunc,A_NB_FALL_SOUND
|
||
LW G_T5LADFALA5,1|AMulti
|
||
LW G_A5LADFALA5,1|AMulti
|
||
LW G_Z5LADFALA5,6
|
||
|
||
LWLWW G_H5LADFALA6,1|AMulti|AFunc,A_SET_FALL+2,04000H,0
|
||
LW G_T5LADFALA6,1|AMulti
|
||
LW G_A5LADFALA6,1|AMulti
|
||
LW G_Z5LADFALA6,1
|
||
|
||
LWLL 1,1|AFunc,A_AnimGo+2,LADDER_FALL_DEATH_HANGTIME
|
||
|
||
LADDER_FALL_DEATH_ANIM3
|
||
LW G_H5LADFALA4,1|AMulti
|
||
LW G_T5LADFALA4,1|AMulti
|
||
LW G_A5LADFALA4,1|AMulti
|
||
LWL G_Z5LADFALA4,7|AFunc,OBJ_ON
|
||
|
||
LWL G_H5LADFALA5,1|AMulti|AFunc,A_NB_FALL_SOUND
|
||
LW G_T5LADFALA5,1|AMulti
|
||
LW G_A5LADFALA5,1|AMulti
|
||
LW G_Z5LADFALA5,6
|
||
|
||
LWLWW G_H5LADFALA6,1|AMulti|AFunc,A_SET_FALL+2,04000H,0
|
||
LW G_T5LADFALA6,1|AMulti
|
||
LW G_A5LADFALA6,1|AMulti
|
||
LW G_Z5LADFALA6,1
|
||
LADDER_FALL_DEATH_HANGTIME3
|
||
LWLL 1,2|AFunc,A_CHECK_GROUND+2,LADDER_FALL_DEATH_HANGTIME3
|
||
LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
.IF AUSTRALIA
|
||
|
||
ANIM_NON_SBOMB_EXPLODE
|
||
LWLLL 1,1|AFunc,A_SBOMB_BLOOD+4,0,40000H
|
||
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_NON_EXP_NOBLOOD
|
||
NONBOY_EXPLODE_ANIM
|
||
LWLLL 1,1|AFunc,A_BLOOD_SPLORCH+4,0,0
|
||
LWL 1,3|AFunc,CLR_VEL
|
||
ANIM_NON_EXP_NOBLOOD
|
||
LWL 1,1|AFunc,DELETE_ENEMY
|
||
|
||
.ELSE
|
||
|
||
ANIM_NON_SBOMB_EXPLODE
|
||
LWLLL 1,1|AFunc,A_SBOMB_BLOOD+4,0,40000H
|
||
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_NON_EXP_NOBLOOD
|
||
NONBOY_EXPLODE_ANIM
|
||
LWLLL 1,1|AFunc,A_BLOOD_SPLORCH+4,0,0
|
||
LWL 1,3|AFunc,CLR_VEL
|
||
ANIM_NON_EXP_NOBLOOD
|
||
LWLLLL 1,1|AFunc,A_PreFrag_Center+6,NONBOY_PARTS_1,80h,60000h
|
||
LWLLLL 1,1|AFunc,A_PreFrag_Center+6,NONBOY_PARTS_2,500h,50000h
|
||
LWL 1,1|AFunc,DELETE_ENEMY
|
||
|
||
.ENDIF
|
||
|
||
**************************************************************************
|
||
* *
|
||
* Fragger Scripts *
|
||
* *
|
||
**************************************************************************
|
||
|
||
*
|
||
*NON-BOY blows up a little bit
|
||
*
|
||
NONBOY_PARTS_1
|
||
.long ARM_SPIN,N_CHUNK
|
||
.word OID_JUNK,1*800H+1*40H+FRGPAL+FRGGCOL
|
||
|
||
.long LEG_SPIN,N_CHUNK
|
||
.word OID_JUNK,1*800H+1*40H+FRGPAL+FRGGCOL
|
||
|
||
.long 0
|
||
|
||
*
|
||
*NON-BOY blows up some more
|
||
*
|
||
NONBOY_PARTS_2
|
||
.long ARM_SPIN,N_CHUNK
|
||
.word OID_JUNK,1*800H+1*40H+FRGPAL+FRGGCOL
|
||
|
||
.long HEAD_SPIN,N_CHUNK
|
||
.word OID_JUNK,1*800H+1*40H+FRGPAL+FRGGCOL
|
||
|
||
.long CHEST_SPIN,N_CHUNK
|
||
.word OID_JUNK,1*800H+1*40H+FRGPAL+FRGGCOL
|
||
|
||
.long LEG_SPIN,N_CHUNK
|
||
.word OID_JUNK,1*800H+1*40H+FRGPAL+FRGGCOL
|
||
|
||
.long 0
|
||
|
||
|
||
NONBOY_PARTS_TEST
|
||
.long ARM_SPIN,N_CHUNK
|
||
.word OID_JUNK,1*800H+1*40H+FRGPAL+FRGGCOL
|
||
|
||
.long 0
|
||
|
||
**************************************************************************
|
||
* *
|
||
* N_CHUNK - Frag Func for NON-Boy chunk. *
|
||
* A0 = Ptr to un-inserted object. *
|
||
* *
|
||
* Note: Frag funcs must preserve A8-A11 and all B-File regs. *
|
||
* *
|
||
**************************************************************************
|
||
N_CHUNK
|
||
SUBIM 28000H,*A0(OYVEL),L
|
||
MOVIM CHUNK_COLL,*A0(OCVECT),L ;Set up chunk with Vectors
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CHUNK Collision Vector Table *
|
||
* *
|
||
* **** NOTE *** MANY OTHER CHUNKS WILL USE THIS TOO. *
|
||
* *
|
||
**************************************************************************
|
||
CHUNK_COLL
|
||
WWL OID_GRND,0FFFFH,CHUNK_GROUND_COLL
|
||
WL 0,DUMCRETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CHUNK_GROUND_COLL - Collision routine for CHUNK. *
|
||
* A8 = Ptr Chunk Object *
|
||
* *
|
||
**************************************************************************
|
||
CHUNK_GROUND_COLL
|
||
MOVB *A8(OFLAGS),A14 ;Are we out of Range?
|
||
JRN CGC_DEL ;BR = Yes
|
||
|
||
MOVE *A8(OYVEL),A14,L
|
||
MOVE A14,A1
|
||
SRA 2,A14 ;Knock off 25% for the bounce.
|
||
SUB A14,A1
|
||
CMPI 14000H,A1 ;Have we hit the minimum?
|
||
JRLE CGC_DEL ;BR = Yes, delete the object.
|
||
CMPI 24000H,A1 ;Will it bounce too high?
|
||
JRLE CGC_BOUNCE ;BR = No, let it bounce.
|
||
MOVI 24000H,A1 ;Cap the rebound velocity
|
||
CGC_BOUNCE
|
||
NEG A1 ;Turn it up
|
||
MOVE A1,*A8(OYVEL),L
|
||
RETS
|
||
CGC_DEL
|
||
JAUC DELETE_OBJ
|
||
|
||
**************************************************************************
|
||
* *
|
||
* Fragment Animation Scripts - These are used by the Fragger Scripts *
|
||
* *
|
||
**************************************************************************
|
||
|
||
*
|
||
*NON-BOY arm spin animation
|
||
*
|
||
ARM_SPIN
|
||
LWLW VARM1,1|AFunc,A_INIT_AnimSLP+1,1
|
||
ARM_SPIN_LOOP
|
||
LW VARM2,0
|
||
LW VARM3,0
|
||
LW VARM4,0
|
||
LW VARM5,0
|
||
LW VARM6,0
|
||
LW VARM7,0
|
||
LW VARM8,0
|
||
LW VARM9,0
|
||
LW VARM10,0
|
||
LW VARM1,0
|
||
|
||
LW VARM2,0
|
||
LW VARM3,0
|
||
LW VARM4,0
|
||
LW VARM5,0
|
||
LW VARM6,0
|
||
LW VARM7,0
|
||
LW VARM8,0
|
||
LW VARM9,0
|
||
LWLW VARM10,0|AFunc,A_INC_AnimSLP+1,4
|
||
LWLL VARM1,0|AFunc,A_AnimFrm+2,ARM_SPIN_LOOP
|
||
|
||
*
|
||
*NON-BOY leg spin animation
|
||
*
|
||
LEG_SPIN
|
||
LWLW LEG1,1|AFunc,A_INIT_AnimSLP+1,3
|
||
LEG_SPIN_LOOP
|
||
LW LEG2,0
|
||
LW LEG3,0
|
||
LW LEG4,0
|
||
LW LEG5,0
|
||
LW LEG6,0
|
||
LW LEG7,0
|
||
LW LEG8,0
|
||
LW LEG1,0
|
||
|
||
LW LEG2,0
|
||
LW LEG3,0
|
||
LW LEG4,0
|
||
LW LEG5,0
|
||
LW LEG6,0
|
||
LW LEG7,0
|
||
LWLW LEG8,0|AFunc,A_INC_AnimSLP+1,8
|
||
LWLL LEG1,0|AFunc,A_AnimFrm+2,LEG_SPIN_LOOP
|
||
|
||
*
|
||
*NON-BOY head spin animation
|
||
*
|
||
HEAD_SPIN
|
||
LWLW NHEADL1,1|AFunc,A_INIT_AnimSLP+1,1
|
||
HEAD_SPIN_LOOP
|
||
LW NHEADL2,0
|
||
LW NHEADL3,0
|
||
LW NHEADL4,0
|
||
LW NHEADL5,0
|
||
LW NHEADL1,0
|
||
LW NHEADL2,0
|
||
LW NHEADL3,0
|
||
LW NHEADL4,0
|
||
LW NHEADL5,0
|
||
LW NHEADL1,0
|
||
|
||
LW NHEADL2,0
|
||
LW NHEADL3,0
|
||
LW NHEADL4,0
|
||
LWLW NHEADL5,0|AFunc,A_INC_AnimSLP+1,5
|
||
LWLL NHEADL1,0|AFunc,A_AnimFrm+2,HEAD_SPIN_LOOP
|
||
|
||
*
|
||
*NON-BOY chest spin animation
|
||
*
|
||
CHEST_SPIN
|
||
LWLW CREST1,1|AFunc,A_INIT_AnimSLP+1,1
|
||
CHEST_SPIN_LOOP
|
||
LW CREST2,0
|
||
LW CREST3,0
|
||
LW CREST4,0
|
||
LW CREST5,0
|
||
LW CREST1,0
|
||
|
||
LW CREST2,0
|
||
LW CREST3,0
|
||
LW CREST4,0
|
||
LWLW CREST5,0|AFunc,A_INC_AnimSLP+1,5
|
||
LWLL CREST1,0|AFunc,A_AnimFrm+2,CHEST_SPIN_LOOP
|
||
|
||
|
||
;DIAG_PBOY_ANIM:
|
||
; LW G_B2RUN__B1,3
|
||
; LW G_B2RUN__B2,3
|
||
; LW G_B2RUN__B3,3
|
||
; LW G_B2RUN__B4,3
|
||
; LW G_B2RUN__B5,3
|
||
; LW G_B2RUN__B6,3
|
||
; LW G_B2RUN__B7,3
|
||
; LW G_B2RUN__B8,3
|
||
; .long 0
|
||
|
||
|
||
WINJUN_ANIM
|
||
LWL G_B1POPCOP3,15|AFunc,A_CAN_I_POPUP
|
||
WINJUN_a:
|
||
LWLL 1,1|AFunc,A_CHECK_WINBOY+2,WINJUN_a
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,5,20
|
||
LW 1,0
|
||
WINJUN_SHOOT_ANIM
|
||
LW G_B1SHTCOP1,1
|
||
LWLWW 1,5|AFunc,A_PART_FIRE_FNC+2,-25,-83
|
||
LW G_B1SHTCOP2,6
|
||
LWLL 1,1|AFunc,A_CHECK_OETIME+2,WINJUN_SHOOT_ANIM
|
||
LW 1,3
|
||
LWLL G_B1POPCOP3,11|AFunc,A_SET_OYVEL+2,02B000H
|
||
LWL 1,90|AFunc,A_RESET_WINJUN
|
||
.long 0
|
||
|
||
|
||
*
|
||
* On my way down.
|
||
*
|
||
A_RESET_WINJUN:
|
||
MOVE *A8(OYSTART),A1,L
|
||
CALLA SET_ANIPYU ;CORRECT Y POSITION
|
||
CLR A14
|
||
MOVE A14,*A8(OYVEL),L ;STOP 'EM
|
||
move @NUM_OUT_THERE,a0
|
||
dec a0
|
||
move a0,@NUM_OUT_THERE
|
||
|
||
move *a8(OZVAL),a14,L
|
||
move @ZBASE,a0,L
|
||
sub a0,a14 ; world Z
|
||
cmpi ZMAX_REAL,a14
|
||
jalt DELETE_OBJ
|
||
|
||
rets
|
||
|
||
|
||
P_NONBOYO:
|
||
.word 64
|
||
.word 00100h,0737bh,07775h,06f5ah,06718h,066f3h,05ed6h,05692h
|
||
.word 0566fh,04e52h,04e2fh,045efh,045eeh,039adh,07e00h,07e00h
|
||
.word 07920h,07520h,06522h,06520h,07d00h,07de0h,075c5h,075c1h
|
||
.word 07dc0h,06981h,06980h,07d60h,07e44h,07e40h,06520h,074e0h
|
||
.word 070c0h,060c0h,054c0h,068a0h,054a0h,054a0h,05880h,06040h
|
||
.word 05440h,04040h,04440h,05820h,04020h,04420h,04800h,0356ah
|
||
.word 0316bh,04120h,02928h,02d24h,02902h,034e0h,030e0h,024e6h
|
||
.word 020e7h,020c5h,024a0h,01883h,01c60h,01063h,01041h,00400h
|
||
|
||
|
||
P_NONBOYR:
|
||
.word 64
|
||
.word 02000h,06f7ch,06ebdh,06b5bh,06319h,05e79h,05ad7h,05255h
|
||
.word 04df5h,04a53h,045f3h,03df1h,03dd1h,035aeh,06c06h,06c06h
|
||
.word 05006h,05006h,05004h,05004h,04c06h,06806h,06466h,06406h
|
||
.word 06406h,05c04h,05c04h,05806h,07446h,07406h,05004h,04806h
|
||
.word 04405h,04404h,04402h,04004h,04002h,04002h,03c03h,03404h
|
||
.word 03402h,03400h,03401h,03003h,03000h,03001h,02c01h,02d4dh
|
||
.word 02d6ch,04009h,0250ah,03004h,02803h,03402h,03002h,01cc9h
|
||
.word 01ce8h,020a6h,02400h,01800h,01c00h,00c64h,00824h,00001h
|
||
|
||
;**************************************************************************
|
||
;* *
|
||
;* AU_CREATE_JUMPBOY - CREATE THE ENEMY TO RUN OUT OF THE DOORWAY *
|
||
;* AND JUMP TO THE GROUND *
|
||
;* *
|
||
;* PASS: *
|
||
;* A8 = OBJECT *
|
||
;* AARG+,W = PERCENT CHANCE OF EXITING ENEMY *
|
||
;* AARG+,L = GENERATOR ANIMATION JUMP HERE UPON FAILURE *
|
||
;* *
|
||
;**************************************************************************
|
||
;
|
||
;AU_CREATE_JUMPBOY
|
||
; CALLA GETAFARG_WORD
|
||
;
|
||
; MOVE @OBJENEMIES,A14,W
|
||
; BTST B_DOOR,A14
|
||
; JRZ AU_CJ_ABORT ;BR=NOT ALLOWED
|
||
;
|
||
; CALLR CHECK_HOST_ANIM
|
||
; JRC AU_CJ_DONE ;BR=HOST ANIM OFF SCREEN
|
||
;
|
||
; MOVE @ENEMY_QUOTA,A14,W
|
||
; JRNZ AU_CJ_ABORT ;BR=QUOTA REACHED
|
||
;
|
||
;;DON'T TRASH A0
|
||
;; MOVI OID_NONBOY,A0
|
||
;; CALLA GET_ENEMY_COUNT
|
||
;; CMPI 10,A0
|
||
;; JRHS AU_CJ_ABORT ;BR=REACHED MAX NUMBER OF ENEMIES
|
||
;
|
||
; CALLA RANDPER
|
||
; JRNC AU_CD_DOORBOY ;BR=MAKE DOORBOY
|
||
;
|
||
; MOVE A8,A9
|
||
; MOVI LADDERBOY_INIT,B0 ;ALLOCATE OBJECT
|
||
; CALLA CREATE_ENEMY
|
||
; JRZ AU_CJ_ERROR ;BR = ERROR! ERROR!
|
||
;
|
||
; MOVE *A9(OXVAL),A1,L
|
||
; MOVE *A9(OYVAL),A2,L
|
||
; MOVE *A9(OZVAL),A3,L
|
||
; ADDK 5,A3 ;OFFSET Z IN BACK OF DOOR
|
||
; CALLA SET_ANIPU
|
||
;
|
||
; MOVI NB_SRUNVEL_MAX,A0 ;GET RANDOM SIDE RUNNING SPEED
|
||
; MOVI NB_SRUNVEL_MIN,A1
|
||
; CALLA RANGRAND
|
||
; MOVE A0,*A8(OSRUNVEL),L
|
||
;
|
||
; MOVI JUMPBOY_ANIM,A1
|
||
; CALLA STRT_ANIM ;START ANIMATION
|
||
; MOVI JUMPBOY_JUMP_ANIM,A14 ;LOOP ON SIDERUN
|
||
; MOVE A14,*A8(AnimScr),L
|
||
;
|
||
; MOVK 1,A14
|
||
; MOVB A14,*A8(OHITS) ;NUMBER OF ALLOWED HITS
|
||
;
|
||
; MOVK M_DOOR,A14
|
||
; MOVE A14,*A8(OEFLAGS),W ;ENEMY TYPE
|
||
;
|
||
; MOVE *A9(OCTRL),A0,W ;INVERT DOOR FLIP
|
||
; NOT A0
|
||
; ANDI M_FLIPH,A0
|
||
; CALLA SET_FLPS
|
||
;
|
||
; MOVI 127,A0 ;RANDOM LIFE TIME
|
||
; MOVI 60,A1
|
||
; CALLA RANGRAND
|
||
; MOVB A0,*A9(AnimSLP)
|
||
; ADDK 14,A0 ;ADD DOOR OPEN AND CLOSE TIME
|
||
;
|
||
; MOVE A0,A2
|
||
;; MOVI 59+10-12,A0 ;RANDOM INITIAL SLEEP TIME
|
||
;; MOVK 30,A1
|
||
;; CALLA RANGRAND
|
||
;; MOVB A0,*A8(AnimSlp)
|
||
;; SUB A0,A2
|
||
; MOVE A2,*A8(OETIME),W
|
||
;
|
||
; MOVK 4,A14
|
||
; MOVB A14,*A8(OSCRNOFFCNT) ;TIMES ALLOWED OFF SCREEN
|
||
; MOVK 3,A1
|
||
; MOVK 10,A0
|
||
; CALLA RANGRAND
|
||
; MOVB A0,*A8(OSHOOTCNT) ;RANDOM SHOOT COUNT
|
||
;
|
||
; MOVI -20,A1
|
||
; CALLR SET_OGRNDOFF ;SET FOR FIRE ESCAPE
|
||
;
|
||
; CALLA INSERT_ENEMY ;INSERT AND COUNT ENEMY
|
||
; RETS
|
||
;AU_CJ_ERROR
|
||
; MOVE A9,A8
|
||
;AU_CJ_ABORT
|
||
; CALLA GETAFARG_LONG ;COULDN'T MAKE BADGUY
|
||
; MOVE A0,*A8(AnimFrm),L ;OOPS!
|
||
;AU_CJ_DONE
|
||
; RETS
|
||
|
||
;**************************************************************************
|
||
;* *
|
||
;* AU_CREATE_RUNOUTBOY - CREATE THE ENEMY TO RUN OUT OF THE DOORWAY *
|
||
;* ONTO THE GROUND *
|
||
;* *
|
||
;* PASS: *
|
||
;* A8 = OBJECT *
|
||
;* AARG+,W = PERCENT CHANCE OF EXITING ENEMY *
|
||
;* AARG+,L = GENERATOR ANIMATION JUMP HERE UPON FAILURE *
|
||
;* *
|
||
;**************************************************************************
|
||
;
|
||
;AU_CREATE_RUNOUTBOY
|
||
; CALLA GETAFARG_WORD
|
||
;
|
||
; MOVE @OBJENEMIES,A14,W
|
||
; BTST B_DOOR,A14
|
||
; JRZ AU_CR_ABORT ;BR=NOT ALLOWED
|
||
;
|
||
; CALLR CHECK_HOST_ANIM
|
||
; JRC AU_CR_DONE ;BR=HOST ANIM OFF SCREEN
|
||
;
|
||
; MOVE @ENEMY_QUOTA,A14,W
|
||
; JRNZ AU_CR_ABORT ;BR=QUOTA REACHED
|
||
;
|
||
; MOVE @HOLD_ENEMY_DISPATCH,A14,W
|
||
; JRNZ AU_CR_ABORT ;BR=HOLD ON THERE
|
||
;
|
||
;;DON'T TRASH A0
|
||
;; MOVI OID_NONBOY,A0
|
||
;; CALLA GET_ENEMY_COUNT
|
||
;; CMPI 10,A0
|
||
;; JRHS AU_CR_ABORT ;BR=REACHED MAX NUMBER OF ENEMIES
|
||
;
|
||
; CALLA RANDPER
|
||
; JRNC AU_CD_DOORBOY ;BR=MAKE DOORBOY
|
||
;
|
||
; MOVE A8,A9
|
||
; MOVI LADDERBOY_INIT,B0 ;ALLOCATE OBJECT
|
||
; CALLA CREATE_ENEMY
|
||
; JRZ AU_CR_ERROR ;BR = ERROR! ERROR!
|
||
;
|
||
; MOVE *A9(OXVAL),A1,L
|
||
; MOVE *A9(OYVAL),A2,L
|
||
; MOVE *A9(OZVAL),A3,L
|
||
; ADDK 5,A3 ;OFFSET Z IN BACK OF DOOR
|
||
; CALLA SET_ANIPU
|
||
;
|
||
; MOVI RUNOUTBOY_CHECK,A14
|
||
; MOVE A14,*A8(OANIMCHK),L
|
||
;
|
||
; MOVI NB_SRUNVEL_MAX,A0 ;GET RANDOM SIDE RUNNING SPEED
|
||
; MOVI NB_SRUNVEL_MIN,A1
|
||
; CALLA RANGRAND
|
||
; MOVE A0,*A8(OSRUNVEL),L
|
||
;
|
||
; MOVI RUNOUTBOY_ANIM,A1
|
||
; CALLA STRT_ANIM ;START ANIMATION
|
||
;
|
||
; MOVK 1,A14
|
||
; MOVB A14,*A8(OHITS) ;NUMBER OF ALLOWED HITS
|
||
;
|
||
; MOVK M_DOOR,A14
|
||
; MOVE A14,*A8(OEFLAGS),W ;ENEMY TYPE
|
||
;
|
||
; MOVE *A9(OCTRL),A0,W ;INVERT DOOR FLIP
|
||
; NOT A0
|
||
; ANDI M_FLIPH,A0
|
||
; CALLA SET_FLPS
|
||
;
|
||
; MOVI 127,A0 ;RANDOM LIFE TIME
|
||
; MOVI 60,A1
|
||
; CALLA RANGRAND
|
||
; MOVB A0,*A9(AnimSLP)
|
||
; ADDK 14,A0 ;ADD DOOR OPEN AND CLOSE TIME
|
||
;
|
||
; MOVE A0,A2
|
||
;; MOVI 59+10-12,A0 ;RANDOM INITIAL SLEEP TIME
|
||
;; MOVK 30,A1
|
||
;; CALLA RANGRAND
|
||
;; MOVB A0,*A8(AnimSlp)
|
||
;; SUB A0,A2
|
||
; MOVE A2,*A8(OETIME),W
|
||
;
|
||
; MOVK 4,A14
|
||
; MOVB A14,*A8(OSCRNOFFCNT) ;TIMES ALLOWED OFF SCREEN
|
||
; MOVI 080H,A14
|
||
; MOVB A14,*A8(OSHOOTCNT) ;DISABLE SHOOTING
|
||
;
|
||
; CALLA INSERT_ENEMY ;INSERT AND COUNT ENEMY
|
||
;
|
||
; RETS
|
||
;AU_CR_ERROR
|
||
; MOVE A9,A8
|
||
;AU_CR_ABORT
|
||
; CALLA GETAFARG_LONG ;COULDN'T MAKE BADGUY
|
||
; MOVE A0,*A8(AnimFrm),L ;OOPS!
|
||
;AU_CR_DONE
|
||
; RETS
|
||
|
||
;**************************************************************************
|
||
;* *
|
||
;* RUNOUTBOY_CHECK - CHECK IF RUNOUTBOY IS ON THE GROUND *
|
||
;* *
|
||
;* PASS: *
|
||
;* A8 = OBJECT *
|
||
;* *
|
||
;**************************************************************************
|
||
;
|
||
;RUNOUTBOY_CHECK
|
||
; MOVE *A8(OFLAGS),A14,W
|
||
; BTST B_GCOLL,A14
|
||
; JRNZ RC_DONE ;BR=NOT THE GROUND YET
|
||
; MOVK 3,A1
|
||
; MOVK 10,A0
|
||
; CALLA RANGRAND
|
||
; MOVB A0,*A8(OSHOOTCNT) ;RANDOM SHOOT COUNT
|
||
; MOVI NONBOY_HEAD_TO_SIDE_ANIM,A14 ;SET ANIMATIONS
|
||
; MOVE A14,*A8(AnimFrm),L
|
||
; MOVI NONBOY_SIDE_RUN_ANIM,A14
|
||
; MOVE A14,*A8(AnimScr),L
|
||
; CLR A14
|
||
; MOVB A14,*A8(AnimSlp) ;NO SLEEP TIL'
|
||
; MOVE A14,*A8(OANIMCHK),L ;NO CHECK TIL'
|
||
; MOVI M_SIDE,A14
|
||
; MOVE A14,*A8(OEFLAGS),W ;GO SIDEWAYS
|
||
;RC_DONE
|
||
; RETS
|
||
|
||
;**************************************************************************
|
||
;* *
|
||
;* A_SET_RUNOUTBOY - SET SUM RUNOUTBOY STUFF *
|
||
;* *
|
||
;* PASS: *
|
||
;* A8 = OBJECT *
|
||
;* *
|
||
;**************************************************************************
|
||
;
|
||
;A_SET_RUNOUTBOY
|
||
; MOVI NONBOY_CVECT,A14 ;NEW VECTORS
|
||
; MOVE A14,*A8(OCVECT),L
|
||
; MOVI NONBOY_GUNVECT,A14
|
||
; MOVE A14,*A8(OGUNVECT),L
|
||
;
|
||
; MOVI 010000H,A14 ;GOING DOWN
|
||
; MOVE A14,*A8(OYVEL),L
|
||
;
|
||
; MOVE *A8(OFLAGS),A14,W ;ENABLE GROUND CHECK
|
||
; ORI M_GCOLL,A14
|
||
; MOVE A14,*A8(OFLAGS),W
|
||
;
|
||
; MOVI NONBOY_HEADON_RUN_ANIM,A1 ;NICE HEAD!
|
||
; CALLA STRT_ANIM
|
||
;
|
||
; MOVI -010H,A0 ;OFFSET OUTSIDE THE DOOR
|
||
; JRUC OFFSETZ
|
||
|
||
|
||
;**************************************************************************
|
||
;* *
|
||
;* A_CREATE_HELIBOY - CREATE THE ENEMY IN THE HELICOPTER *
|
||
;* *
|
||
;* PASS: *
|
||
;* A8 = OBJECT *
|
||
;* AARG+,L = GENERATOR ANIMATION JUMP HERE UPON FAILURE *
|
||
;* *
|
||
;**************************************************************************
|
||
;
|
||
;A_CREATE_HELIBOY
|
||
; CALLR CHECK_HOST_ANIM
|
||
; JRC A_CH_ABORT ;BR=HOST ANIM OFF SCREEN
|
||
;
|
||
; MOVE @ENEMY_QUOTA,A14,W
|
||
; JRNZ A_CH_ABORT ;BR=QUOTA REACHED
|
||
;
|
||
;; MOVI OID_NONBOY,A0
|
||
;; CALLA GET_ENEMY_COUNT
|
||
;; CMPI 10,A0
|
||
;; JRHS A_CH_ABORT ;BR=REACHED MAX NUMBER OF ENEMIES
|
||
;
|
||
; MOVE A8,A9
|
||
; MOVI DOORBOY_INIT,B0 ;ALLOCATE OBJECT
|
||
; CALLA CREATE_ENEMY
|
||
; JRZ A_CH_ERROR ;BR = ERROR! ERROR!
|
||
;
|
||
; MOVI OUTCLUB_CVECT_PART,A14 ;RESET COLLISION VECTOR
|
||
; MOVE A14,*A8(OCVECT),L
|
||
; MOVI OUTCLUB_GUNVECT_PART,A14 ;RESET GUN VECTOR
|
||
; MOVE A14,*A8(OGUNVECT),L
|
||
;
|
||
; MOVI DOORBOY_ANIM,A1
|
||
; CALLA STRT_ANIM ;START ANIMATION
|
||
;
|
||
; MOVK 1,A14
|
||
; MOVB A14,*A8(OHITS) ;NUMBER OF ALLOWED HITS
|
||
;
|
||
; MOVK M_HELI,A14 ;HE WILL FALL OUT OF THE HELICOPTER
|
||
; MOVE A14,*A8(OEFLAGS),W ;ENEMY TYPE
|
||
;
|
||
; MOVE *A9(OCTRL),A0,W ;INVERT DOOR FLIP
|
||
; NOT A0
|
||
; ANDI M_FLIPH,A0
|
||
; MOVE *A8(OCTRL),A14,W
|
||
; OR A0,A14
|
||
; MOVE A14,*A8(OCTRL),W
|
||
;
|
||
; MOVE *A8(OFLAGS),A14,L ;SET OPARTSXY
|
||
; ORI M_OPARTSXY,A14
|
||
; MOVE A14,*A8(OFLAGS),L
|
||
;
|
||
; MOVI (67+10),A14
|
||
; BTST B_FLIPH,A0
|
||
; JRZ A_CH_NOFLIPH ;BR=WE'RE FLIPPING OUT!
|
||
; NEG A14
|
||
;A_CH_NOFLIPH
|
||
;
|
||
; ADDI (57+5) << 16,A14
|
||
; MOVE A14,*A8(OPARTSXY),L
|
||
; MOVK 2,A14
|
||
; MOVB A14,*A8(OZOFF)
|
||
;
|
||
; MOVE *A9(OXVAL),A1,L ;HELI'S X
|
||
; MOVE *A9(OYVAL),A2,L
|
||
; MOVE *A9(OZVAL),A3,L
|
||
; CALLA SET_ANIPU
|
||
;
|
||
; MOVI 127,A0 ;RANDOM LIFE TIME
|
||
; MOVI 60,A1
|
||
; CALLA RANGRAND
|
||
; MOVB A0,*A9(AnimSLP)
|
||
; ADDI 48,A0 ;ADD DOOR OPEN AND CLOSE TIME
|
||
;
|
||
; MOVE A0,A2
|
||
; MOVI 59+48-12,A0 ;RANDOM INITIAL SLEEP TIME
|
||
; MOVK 30,A1
|
||
; CALLA RANGRAND
|
||
; MOVB A0,*A8(AnimSlp)
|
||
; SUB A0,A2
|
||
; MOVE A2,*A8(OETIME),W
|
||
;
|
||
; MOVI -20 << 15,A14
|
||
; MOVE A14,*A8(OGRNDOFF),L ;SET GROUND OFFSET FOR FALL
|
||
;
|
||
; MOVE A8,A0
|
||
; MOVE A9,A8
|
||
; CALLA INSPART
|
||
; MOVE A0,A8
|
||
; CALLA INSERT_ENEMY ;INSERT AND COUNT ENEMY
|
||
;
|
||
; RETS
|
||
;A_CH_ERROR
|
||
; MOVE A9,A8
|
||
;A_CH_ABORT
|
||
; CALLA GETAFARG_LONG ;COULDN'T MAKE BADGUY
|
||
; MOVE A0,*A8(AnimFrm),L ;OOPS!
|
||
;A_CH_DONE
|
||
; RETS
|
||
|
||
|
||
.END
|
||
|