3639 lines
74 KiB
NASM
3639 lines
74 KiB
NASM
.MLIB "GXMACS.LIB"
|
||
.FILE "GXBUG.ASM"
|
||
.TITLE " <<< GENERATION X -- JUNGLE BOSS BUG ROUTINES >>>"
|
||
.WIDTH 132
|
||
.OPTION B,D,L,T
|
||
.MNOLIST
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPYRIGHT (C) 1992 MIDWAY MANUFACTURING COMPANY. *
|
||
* ALL RIGHTS RESERVED. *
|
||
* *
|
||
**************************************************************************
|
||
|
||
* GET THE SYSTEM STUFF
|
||
.INCLUDE "GXENEMY.INC"
|
||
.INCLUDE "GXCONTRL.H"
|
||
.INCLUDE "IMGTBL.GLO"
|
||
.INCLUDE "UNIVTBL.GLO"
|
||
.INCLUDE "GXBUG.TBL"
|
||
|
||
NUM_NECK_SEGS EQU 7 ;NUMBER OF NECK SEGMENTS
|
||
|
||
.BSS BUG_HEAD_OBJ,32
|
||
.BSS BUG_NECK_OBJS,32*NUM_NECK_SEGS
|
||
.BSS BUG_BODY_OBJ,32
|
||
|
||
.bss ATTACK_WAIT,16 ; replaces MIN_TIME_BETWEEN_ATTACKS
|
||
.bss MAX_BUG_VEL,16 ; replaces constant
|
||
.bss ZCLOSEST_WORLD,32 ; replaces constant
|
||
;;;;;; .BSS HUCKLEBERRY_HOUND,16 ;FOR LONG ALIGNMENT
|
||
|
||
* SYMBOLS IN HERE
|
||
.DEF BLOW_COVER_PROC, START_BUG_PROC, SET_OCONST, SORT_OBJ
|
||
|
||
* SYMBOLS FROM GXD.ASM
|
||
.REF XBASE, YBASE, ZBASE, XSCROLL, ZSCROLL
|
||
.REF SET_ANIPZU, SET_ANIPU, A_SET_OYVEL, STRTANIM_OFF
|
||
|
||
* SYMBOLS FROM GXUNILNK.ASM
|
||
.REF REMOVE_AND_FREE_LINK
|
||
|
||
* SYMBOLS FROM GXD.ASM
|
||
.REF REPOS_OBJ, SET_SCALE_WARREN, SET_ODAG, GET_SHAD, GET_SHAD_MULTI
|
||
|
||
* SYMBOLS FROM GXPLAYER.ASM
|
||
.REF PLAYER_HIT, GET_PLAYER_WORLDX_EXTENTS
|
||
|
||
* SYMBOLS FROM GXSCROLL.ASM
|
||
.REF SCROLL_FLAG, ZREL_OFF
|
||
|
||
* SYMBOLS FROM GXSND.ASM
|
||
.REF ONESND, SND_CHAN3_OFF, SND_MUSICOFF
|
||
|
||
* SYMBOLS FROM GXUNIV.ASM
|
||
.REF UNIV_FLASH
|
||
|
||
* SYMBOLS FROM GXRAM.ASM
|
||
.REF WAVEIRQS, WAVE_UNIV, CURPLYRS
|
||
|
||
* SYMBOLS FROM GXUTIL.ASM
|
||
.REF SLINEVEL_3D, SLINEVEL_LOAD_3D
|
||
|
||
* SYMBOLS FROM GXAFUNC.ASM
|
||
.REF A_SOUND, A_AnimFrm_DSJ
|
||
|
||
* SYMBOLS FROM GXCOG.ASM
|
||
.REF HIT_ENEMY
|
||
|
||
* SYMBOLS FROM GXBEEK2.ASM
|
||
.REF CURPLYR_ADJ,BRIDGE_STATE
|
||
|
||
.TEXT
|
||
.EVEN
|
||
|
||
HEAD_ZOFF EQU 040H
|
||
NECK_ZOFF EQU 010H
|
||
LEGS_2ND_ZOFF EQU 01000H
|
||
BUTT_ZOFF EQU 02000H
|
||
|
||
;MAX_BUG_VEL EQU -0190H ;MAXIMUM FORWARD VELOCITY
|
||
BUG_CHARGE_VEL EQU 0eH ;FORWARD VELOCITY CHANGE
|
||
BUG_RECOVER_VEL EQU 018H ;FORWARD RECOVER VELOCITY CHANGE
|
||
ROCKET_HIT_VEL EQU 03c1H ;ROCKET HIT VELOCITY CHANGE
|
||
GUN_HIT_VEL EQU BUG_CHARGE_VEL*3 ;GUN HIT VELOCITY CHANGE
|
||
MAX_REVERSE_BUG_VEL EQU 03c0H ;MAXIMUM REVERSE VELOCITY
|
||
;MAX_BUG_VEL EQU -0120H ;MAXIMUM FORWARD VELOCITY
|
||
;BUG_CHARGE_VEL EQU 0aH ;FORWARD VELOCITY CHANGE
|
||
;BUG_RECOVER_VEL EQU 012H ;FORWARD RECOVER VELOCITY CHANGE
|
||
;ROCKET_HIT_VEL EQU 0301H ;ROCKET HIT VELOCITY CHANGE
|
||
;GUN_HIT_VEL EQU BUG_CHARGE_VEL*3 ;GUN HIT VELOCITY CHANGE
|
||
;MAX_REVERSE_BUG_VEL EQU 0300H ;MAXIMUM REVERSE VELOCITY
|
||
|
||
BODY_ZMIN_ATTACK EQU 05200H ;MINIMUM ATTACK Z
|
||
BODY_ZMAX_ATTACK EQU 015200H ;MAXIMUM ATTACK Z
|
||
|
||
;ZCLOSEST_WORLD EQU 04e00H ;CLOSEST Z ALLOWED
|
||
|
||
PULL_HEAD_HITS EQU 5 ;PULL BACK HEAD AFTER GUN HITS
|
||
MIN_HEAD_HIT_TIME EQU 30 ;MININUM TIME BETWEEN HEAD HITS
|
||
|
||
MIN_TIME_BETWEEN_ATTACKS EQU 40 ;MININUM TIME BETWEEN HEATBUTTS
|
||
;MIN_TIME_BETWEEN_ATTACKS EQU 60 ;MININUM TIME BETWEEN HEATBUTTS
|
||
|
||
BJ_YVEL equ -40000h
|
||
BJ_YACCEL equ 2800h
|
||
|
||
;OPARTIDs
|
||
|
||
NECK_SEG EQU 1
|
||
SMALL_SEG_R EQU 2
|
||
SMALL_SEG_L EQU 3
|
||
BIG_SEG_R EQU 4
|
||
BIG_SEG_L EQU 5
|
||
LEG_PARTS EQU 6
|
||
|
||
;EVERYBODY'S ODATA
|
||
|
||
OATE_ROCKET EQU ODATA ;UHL ROCKET OBJECT
|
||
|
||
;BODY ODATA
|
||
|
||
OBFLAGS EQU ODATA+020H ;UHW BODY FLAGS
|
||
;ONOTUSED EQU ODATA+030H ;UHW
|
||
OLASTZSCROLL EQU ODATA+040H ;UHL ZSCROLL FROM LAST TICK
|
||
OZFARTHEST EQU ODATA+060H ;UHL FARTHEST PUSH Z
|
||
OCHARGEVEL EQU ODATA+080H ;UHW CHARGING FORWARD VELOCITY
|
||
ORECOVERVEL EQU ODATA+090H ;UHW RECOVERING FORWARD VELOCITY
|
||
|
||
;HEAD ODATA
|
||
|
||
OHFLAGS EQU ODATA+020H ;UHW HEAD FLAGS
|
||
;ONOTUSED EQU ODATA+030H ;UHW
|
||
OHEADXACCEL EQU ODATA+040H ;UHL HEAD X ACCELERATION
|
||
OHEADYACCEL EQU ODATA+060H ;UHL HEAD Y ACCELERATION
|
||
OATTACKTIME EQU ODATA+080H ;UHL TIME SINCE LAST ATTACK
|
||
OHITS EQU ODATA+0A0H ;UHL GUN HITS ON HEAD PER PLAYER
|
||
OLASTHITTIME EQU ODATA+0C0H ;UHL TIME AT LAST GUN HIT
|
||
OAMINDELAY EQU ODATA+0E0H ;UHW MINIMUM ATTACK DELAY
|
||
;OAMAXDELAY EQU ODATA+0F0H ;UHW MAXIMUM ATTACK DELAY
|
||
|
||
;NECK ODATA
|
||
|
||
OUPDATETIME EQU ODATA+020H ;UHW UPDATE TIME FOR NECK PIECE
|
||
OUPDATECOUNT EQU ODATA+030H ;UHW CURRENT UPDATE TIME COUNT
|
||
ONECKY0 EQU ODATA+040H ;UHL FAR (IN Z) Y POSITION
|
||
ONECKY1 EQU ODATA+060H ;UHL CLOSE (IN Z) Y POSITION
|
||
ONECKX0 EQU ODATA+080H ;UHL FAR (IN Z) X POSITION
|
||
ONECKX1 EQU ODATA+0A0H ;UHL CLOSE (IN Z) X POSITION
|
||
|
||
;BODY FLAGS
|
||
|
||
M_STOPLEGS EQU 1 ;STOP LEG ANIMATIONS
|
||
M_NOMOVEZ EQU 2 ;DON'T MOVE FORWARD
|
||
M_NOPUSH EQU 4 ;DISABLE PUSHING BACK
|
||
M_NOBITE EQU 8 ;DISABLE BITING
|
||
|
||
B_STOPLEGS EQU 0
|
||
B_NOMOVEZ EQU 1
|
||
B_NOPUSH EQU 2
|
||
B_NOBITE EQU 3
|
||
|
||
;HEAD FLAGS
|
||
|
||
M_HOME EQU 001H ;SAFE AT HOME
|
||
M_GOHOME EQU 002H ;GO HOME
|
||
M_RANDOM EQU 004H ;RANDOM MOTION
|
||
M_HIT EQU 008H ;HITING DA PLAYERS
|
||
M_ATTACK EQU 010H ;ATTACKING
|
||
M_DAMAGE EQU 020H ;TOOK PLAYER DAMAGE
|
||
M_BITE EQU 040H ;BITING DA PLAYERS
|
||
M_PULL EQU 080H ;PULLED FROM OBJECT LIST
|
||
M_SORTED EQU 0100H ;HEAD WAS SORTED
|
||
|
||
B_HOME EQU 0
|
||
B_GOHOME EQU 1
|
||
B_RANDOM EQU 2
|
||
B_HIT EQU 3
|
||
B_ATTACK EQU 4
|
||
B_DAMAGE EQU 5
|
||
B_BITE EQU 6
|
||
B_PULL EQU 7
|
||
B_SORTED EQU 8
|
||
|
||
SND_COVER_BLOWN
|
||
.WORD 0F380H,89,0A390H,0
|
||
|
||
SND_GUN_HIT
|
||
.WORD 0F310H,9,0A483H,0
|
||
|
||
SND_ROCKET_HIT
|
||
; .WORD 0F320H,31,0A486H,0
|
||
.WORD 0F342H,31,0A302H,0
|
||
|
||
SND_NECK_STRETCH_ATTACK
|
||
.WORD 0F280H,87,08178H,0
|
||
|
||
SND_NECK_STRETCH_ATTACK_HIT
|
||
.WORD 0F281H,17,08451H,0
|
||
|
||
SND_GREETING_SCREAM
|
||
.WORD 0F283H,59,0844CH,0
|
||
|
||
SND_SCREAM_0
|
||
.WORD 0F282H,62,08446H,0
|
||
SND_SCREAM_1
|
||
.WORD 0F282H,62,08447H,0
|
||
SND_SCREAM_2
|
||
.WORD 0F282H,83,08448H,0
|
||
SND_SCREAM_3
|
||
.WORD 0F282H,35,08449H,0
|
||
SND_SCREAM_4
|
||
.WORD 0F282H,36,0844AH,0
|
||
SND_SCREAM_5
|
||
.WORD 0F282H,41,0845BH,0
|
||
|
||
SND_BITE
|
||
.WORD 0F283H,65,08456H,0
|
||
|
||
SND_POOL_SPLASH
|
||
.WORD 0F2F0H,109,08440H,0
|
||
|
||
SND_POOL_WALK
|
||
.WORD 0F3F1H,60*60*5,0843FH,0
|
||
|
||
SND_POOL_JUMP
|
||
.WORD 0F3F0H,101,0844DH,0
|
||
|
||
SND_JUMP
|
||
.WORD 0F3F0H,25,0844EH,0
|
||
|
||
SND_LAND
|
||
.WORD 0F3F0H,28,0844FH,0
|
||
|
||
SND_WALK
|
||
.WORD 0F3F0H,60*60*5,08441H,0
|
||
|
||
SND_LEG_1
|
||
.WORD 0F3F0H,13,08442H,0
|
||
SND_LEG_2
|
||
.WORD 0F3F0H,13,08443H,0
|
||
SND_LEG_3
|
||
.WORD 0F3F0H,13,08444H,0
|
||
SND_LEG_4
|
||
.WORD 0F3F0H,13,08445H,0
|
||
|
||
SND_TYLER_NO
|
||
.word 0f3f2h,67,08803h,0
|
||
|
||
|
||
LEGSND_TABLE
|
||
.LONG SND_LEG_1, SND_LEG_2, SND_LEG_3, SND_LEG_4
|
||
|
||
SCREAM_TABLE
|
||
.LONG SND_SCREAM_0, SND_SCREAM_1, SND_SCREAM_2, SND_SCREAM_3
|
||
.LONG SND_SCREAM_4, SND_SCREAM_5
|
||
|
||
SND_BUG_FINALE
|
||
.word 0f1f0h,162,8556h,0
|
||
|
||
SND_DEATH_SCREAM
|
||
.word 0f2f0h,187,859bh,0
|
||
|
||
**************************************************************************
|
||
* SORT_OBJ
|
||
* PLACES OBJECT IN SORTED LIST POSITION
|
||
* IF HEAD OF MULTI-PARTER, ENTIRE MULTI-PARTER SORTED
|
||
* IF SUB-PART OF MULTI-PARTER, JUST SUB-PART SORTED
|
||
*
|
||
* A8 = OBJ to be SORTED, DUMMY
|
||
* RETS nothing
|
||
SORT_OBJ:
|
||
MMTM SP,A0,A1,A2,A3,A4,A5
|
||
move *A8(OPART1),A0,L
|
||
jrz SO_SkMulti
|
||
cmp A0,A8 ;Is Part Head Obj
|
||
jrne SO_SkMulti
|
||
|
||
SO_Multi ;* TO PULL A HEAD OBJECT, PULL ANY SUBPARTS FIRST
|
||
move *A0(OPARTS),A0,L
|
||
jrz SO_SkMulti
|
||
|
||
CALLR SORTOBJECT
|
||
|
||
jruc SO_Multi
|
||
SO_SkMulti
|
||
move A8,A0
|
||
|
||
CALLR SORTOBJECT
|
||
|
||
MMFM SP,A0,A1,A2,A3,A4,A5
|
||
rets
|
||
|
||
SORTOBJECT
|
||
;ERROR CHECKS
|
||
calla IsAnObj
|
||
|
||
move *A0(OLINK),A14,L ;IS OBJ INSERTED?
|
||
jrz SO_SkPULLOBJ
|
||
PUSHST
|
||
DINT ;Interrupts off now
|
||
move *A0(OBLINK),A1,L ;A1 - Prev Obj
|
||
move *A0,A14,L ;A14 - Next Obj
|
||
move A14,*A1,L ;LINK FORWARD AROUND OBJ A0
|
||
move A1,*A14(OBLINK),L ;LINK BACKWARD AROUND OBJ A0
|
||
clr A14
|
||
move A14,*A0(OLINK),L ;OBJ NOT INSERTED
|
||
POPST
|
||
|
||
; move *A0,A4,L
|
||
; jrnz SO_INSOBJX ;obj is already inserted
|
||
|
||
movi FGLIST,A3
|
||
SO_InsGotPln
|
||
move A3,A4
|
||
move *A0(OZVAL),A1,L ; GET Z POSITION
|
||
SO_ins_zloop:
|
||
move *A3,A3,L
|
||
cmp A3,A4
|
||
jreq SO_do_ins ; bra if at end of list
|
||
|
||
MOVE *A3(ONOT_SORTED),A2,W
|
||
JRNZ SO_ins_zloop ;BR = Don't base off un-sorted object
|
||
|
||
move *A3(OZVAL),A2,L ; ZPOS in A3
|
||
cmp A2,A1
|
||
jrgt SO_ins_zloop
|
||
jrlt SO_do_ins
|
||
|
||
move *A0(OYVAL),A5,L ; GET Y POSITION
|
||
jruc SO_ins_ytest
|
||
SO_ins_yloop
|
||
move *A3,A3,L
|
||
cmp A3,A4
|
||
jreq SO_do_ins ; bra if at end of list
|
||
move *A3(OZVAL),A2,L ; ZPOS in A3
|
||
cmp A2,A1
|
||
jrlt SO_do_ins
|
||
SO_ins_ytest
|
||
move *A3(OYVAL),A2,L ;TEST Y POSITION
|
||
cmp A2,A5
|
||
jrlt SO_ins_yloop
|
||
SO_do_ins
|
||
PUSHST
|
||
DINT
|
||
move *A3(OBLINK),A2,L ; get ptr to previous
|
||
|
||
move A3,*A0,L ;IF BACK LINKS USED FROM INTERRUPT
|
||
move A0,*A2,L ; THIS WILL NEED TO BE DINT
|
||
move A0,*A3(OBLINK),L ;
|
||
move A2,*A0(OBLINK),L ;
|
||
POPST
|
||
;SO_INSOBJX
|
||
SO_SkPULLOBJ
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BLOW_COVER_PROC *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COVER_CVECT
|
||
WWL OID_GRND,0FFFFH,DELETE_OBJ
|
||
WL 0,DUMCRETS
|
||
|
||
BLOW_COVER_PROC
|
||
MOVIM 4e00h,@ZCLOSEST_WORLD,L
|
||
MOVIM MIN_TIME_BETWEEN_ATTACKS,@ATTACK_WAIT,W
|
||
MOVI FGLIST,A7
|
||
MOVE A7,A8
|
||
MOVI DRAIN,A1
|
||
MOVI -0100H,A2 ;Z VELOCITY
|
||
MOVI -048000H,A3 ;Y VELOCITY
|
||
MOVI 03800H,A4 ;Y ACCELERATION
|
||
MOVI COVER_CVECT,A5
|
||
MOVI -67 << 15,A6
|
||
MOVI 010000H,A9
|
||
BCP_FIND_LUPE
|
||
MOVE *A8(OIMG),A14,L
|
||
CMP A1,A14
|
||
JRNE BCP_FIND_NEXT ;BR=NOT DRAIN PIECE
|
||
|
||
MOVE *A8(OULINK),A0,L
|
||
CLR A14
|
||
MOVE A14,*A8(OULINK),L
|
||
CALLA REMOVE_AND_FREE_LINK
|
||
|
||
MOVE A2,*A8(OZVEL),L
|
||
MOVE A3,*A8(OYVEL),L
|
||
MOVE A4,*A8(OYACCEL),L
|
||
|
||
ABS A9
|
||
MOVE *A8(OCTRL),A14,W
|
||
BTST B_FLIPH,A14
|
||
JRZ BCP_SET_XVEL ;BR=RIGHT HALF
|
||
NEG A9
|
||
BCP_SET_XVEL
|
||
MOVE A9,*A8(OXVEL),L
|
||
|
||
MOVE *A8(OFLAGS),A14,W
|
||
ORI M_GCOLL,A14
|
||
MOVE A14,*A8(OFLAGS),W
|
||
|
||
MOVE A6,*A8(OGRNDOFF),L
|
||
|
||
MOVE A5,*A8(OCVECT),L
|
||
|
||
BCP_FIND_NEXT
|
||
MOVE *A8,A8,L
|
||
CMP A7,A8
|
||
JRNE BCP_FIND_LUPE ;BR=NOT END OF LIST
|
||
|
||
SOUND1 SND_COVER_BLOWN
|
||
|
||
SLEEP 60
|
||
|
||
MOVE @BUG_BODY_OBJ,A8,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
CREATE PID_BOSSBUG,BUG_BODY_PROC ;START BUG MOTION
|
||
MOVE A0,*A8(OPLINK),L
|
||
|
||
sleep 20
|
||
|
||
SOUND1 SND_TYLER_NO
|
||
|
||
sleep 15
|
||
|
||
SOUND1 SND_MUSICOFF
|
||
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* START_BUG_PROC - START DA BUG *
|
||
* *
|
||
**************************************************************************
|
||
|
||
START_BUG_PROC
|
||
MOVE @ZREL_OFF,A14,L
|
||
SRA ZFRAC,A14
|
||
|
||
MOVI 031D0000H,A1
|
||
MOVI -0340000H,A2
|
||
MOVI 014C9EH-NECK_ZOFF,A3
|
||
ADD A14,A3
|
||
|
||
MOVI 0101H,A4
|
||
|
||
MOVK NUM_NECK_SEGS,A9 ;DO THE NECK
|
||
MOVI BUG_NECK_OBJS,A10
|
||
MOVI BUG_NECK_UPDATE_TIME_TABLE,A11
|
||
SBP_NECK_LUPE
|
||
MOVI BUG_NECK_INIT,B0
|
||
CALLA MULTIMAKE
|
||
LOCKON Z
|
||
|
||
MOVE A4,*A8(OCONST),W
|
||
|
||
CALLA SET_ANIPU
|
||
|
||
CALLA INSERT_OBJ
|
||
|
||
MOVE A8,*A10+,L
|
||
|
||
CALLA CLR_ODATA
|
||
|
||
MOVE *A11+,A14,W ;SET UPDATE TIME
|
||
MOVE A14,*A8(OUPDATETIME),W
|
||
|
||
DSJ A9,SBP_NECK_LUPE
|
||
|
||
CREATEP PID_BOSSBUG,BUG_NECK_PROC ;NECK CONTROL
|
||
|
||
MOVI BUG_HEAD_INIT,B0 ;DO THE HEAD
|
||
CALLA MULTIMAKE
|
||
LOCKON Z
|
||
|
||
CALLR SET_OCONST
|
||
|
||
MOVI 031D0000H,A1
|
||
SUBI HEAD_ZOFF-NECK_ZOFF,A3
|
||
CALLA SET_ANIPU
|
||
|
||
CALLA INSERT_OBJ
|
||
|
||
; MOVI 0800H,A14
|
||
; MOVE A14,*A8(OZFRNT),W
|
||
|
||
CALLA CLR_ODATA
|
||
|
||
MOVK M_HOME,A14 ;WE'RE AT HOME
|
||
MOVE A14,*A8(OHFLAGS),W
|
||
|
||
MOVK 6,A14
|
||
MOVE A14,*A8(OAMINDELAY),W
|
||
; MOVI 30,A14
|
||
; MOVE A14,*A8(OAMAXDELAY),W
|
||
|
||
CREATEP PID_BOSSBUG,BUG_HEAD_PROC ;HEAD CONTROL
|
||
MOVE A0,*A8(OPLINK),L
|
||
|
||
MOVE A8,@BUG_HEAD_OBJ,L
|
||
|
||
MOVI BUG_BODY_INIT,B0 ;DO THE BODY
|
||
CALLA MULTIMAKE
|
||
LOCKON Z
|
||
|
||
CALLR SET_OCONST
|
||
|
||
MOVE A3,A1
|
||
ADDI HEAD_ZOFF,A1
|
||
MOVI 031D0000H,A3
|
||
CALLA REPOS_OBJ
|
||
|
||
CALLA INSERT_OBJ
|
||
|
||
CALLA CLR_ODATA
|
||
|
||
; MOVE @ZSCROLL,A14,L
|
||
; MOVE A14,*A8(OZVEL),L
|
||
; MOVE A14,*A8(OLASTZSCROLL),L
|
||
|
||
MOVK M_NOPUSH,A14
|
||
MOVE A14,*A8(OBFLAGS),W
|
||
|
||
MOVI BUG_CHARGE_VEL,A14
|
||
MOVE A14,*A8(OCHARGEVEL),W
|
||
MOVI BUG_RECOVER_VEL,A14
|
||
MOVE A14,*A8(ORECOVERVEL),W
|
||
|
||
MOVI (54-15) << 15,A0
|
||
MOVE A0,*A8(OGRNDOFF),L
|
||
|
||
MOVE A8,@BUG_BODY_OBJ,L
|
||
|
||
; CREATEP PID_BOSSBUG,BUG_BODY_PROC ;BODY CONTROL
|
||
; MOVE A0,*A8(OPLINK),L
|
||
|
||
DIE
|
||
|
||
BUG_NECK_UPDATE_TIME_TABLE
|
||
.WORD 2,3,4,5,6,7,8
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SET_OCONST - SET OCONST FIELD. IF HEAD, THEN SET ALL PARTS ELSE *
|
||
* JUST SET THE ONE OBJECT *
|
||
* *
|
||
* PASS: *
|
||
* A4 = CONSTANT (i.e. 0101H FOR COLOR #1) *
|
||
* A8 = HEAD OR PART *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
SET_OCONST
|
||
PUSH A0
|
||
MOVE A4,*A8(OCONST),W
|
||
MOVE *A8(OPART1),A0,L
|
||
CMP A8,A0
|
||
JRNE SO_DONE ;BR=NOT DA HEAD
|
||
SO_LUPE
|
||
MOVE *A0(OPARTS),A0,L
|
||
JRZ SO_DONE ;BR=NO MORE PARTS
|
||
MOVE *A0(OFLAGS),A14,W
|
||
BTST B_SHAD,A14
|
||
JRNZ SO_LUPE ;BR=NO CONSTANT ON NO SHADOW
|
||
MOVE A4,*A0(OCONST),W
|
||
JRUC SO_LUPE
|
||
SO_DONE
|
||
PULLQ A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PULL_BUG - PULL THE BUG OBJECTS FROM THE OBJECT LIST *
|
||
* *
|
||
* PASS: *
|
||
* NUTIN' *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PULL_BUG
|
||
move @ATTACK_WAIT,a14 ; lower ticks to wait between attacks
|
||
subk 8,a14 ; adjust each time bug goes off
|
||
jrn PB0
|
||
move a14,@ATTACK_WAIT
|
||
PB0:
|
||
|
||
MMTM SP,A1,A2,A8
|
||
|
||
MOVK NUM_NECK_SEGS,A1 ;DO THE NECK
|
||
MOVI BUG_NECK_OBJS,A2
|
||
PB_NECK_LUPE
|
||
MOVE *A2+,A8,L
|
||
|
||
CALLA PULL_OBJ
|
||
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_ANIM,A14
|
||
JRZ PB_NL_NEXT ;BR=NO NECK ANIM
|
||
CALLA PULL_ANIM
|
||
PB_NL_NEXT
|
||
DSJ A1,PB_NECK_LUPE
|
||
|
||
MOVE @BUG_HEAD_OBJ,A8,L ;DO THE HEAD
|
||
|
||
MOVI M_PULL,A14
|
||
MOVE A14,*A8(OHFLAGS),W
|
||
|
||
CALLA PULL_OBJ
|
||
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_ANIM,A14
|
||
JRZ PB_BODY ;BR=NO HEAD ANIM
|
||
CALLA PULL_ANIM
|
||
PB_BODY
|
||
MOVE @BUG_BODY_OBJ,A8,L ;DO THE BODY
|
||
|
||
CLR A14 ;STOP DA BODY
|
||
MOVE A14,*A8(OXVEL),L
|
||
MOVE A14,*A8(OYVEL),L
|
||
MOVE A14,*A8(OZVEL),L
|
||
MOVE A14,*A8(OYACCEL),W
|
||
|
||
CALLA PULL_OBJ
|
||
|
||
CALLA PULL_ANIM_ALL
|
||
PB_DONE
|
||
MMFM SP,A1,A2,A8
|
||
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SET_BUG_POSITION - POSITION THE BUG IN THE UNIVERSE *
|
||
* *
|
||
* PASS: *
|
||
* A1 = UNIVERSE X *
|
||
* A2 = UNIVERSE Y *
|
||
* A3 = UNIVERSE Z (rel to local univ) *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
SET_BUG_POSITION
|
||
MMTM SP,A1,A3,A4,A8,A9,A10
|
||
|
||
MOVE @ZREL_OFF,A14,L
|
||
SRA ZFRAC,A14
|
||
ADD A14,A3
|
||
|
||
SUBK NECK_ZOFF,A3 ;Z OFFSET FOR NECKS
|
||
|
||
MOVK NUM_NECK_SEGS,A9 ;DO THE NECK
|
||
MOVI BUG_NECK_OBJS,A10
|
||
SBPO_NECK_LUPE
|
||
MOVE *A10+,A8,L
|
||
|
||
CALLA SET_ANIPU
|
||
|
||
MOVE A8,A0
|
||
SBPO_NECK_OFF_LUPE
|
||
MOVE *A0(OFLAGS),A14,W
|
||
ORI M_OFSCRN,A14
|
||
MOVE A14,*A0(OFLAGS),W
|
||
MOVE *A0(OPARTS),A0,L
|
||
JRNZ SBPO_NECK_OFF_LUPE ;BR=PARTS IS PARTS
|
||
|
||
CALLA INSERT_OBJ
|
||
|
||
DSJ A9,SBPO_NECK_LUPE
|
||
|
||
SUBI HEAD_ZOFF-NECK_ZOFF,A3 ;Z OFFSET FOR THE HEAD
|
||
|
||
MOVE @BUG_HEAD_OBJ,A8,L ;DO THE HEAD
|
||
|
||
; CLR A14
|
||
MOVK M_HOME,A14
|
||
MOVE A14,*A8(OHFLAGS),W ;RESET HEAD FLAGS
|
||
|
||
CALLA SET_ANIPU
|
||
|
||
CALLA INSERT_OBJ
|
||
|
||
MOVE A1,A9
|
||
MOVI BITE1,A1 ;RESET HEAD
|
||
SBPO_HEAD_LUPE
|
||
MOVE *A8(OFLAGS),A14,W
|
||
ORI M_OFSCRN,A14
|
||
MOVE A14,*A8(OFLAGS),W
|
||
BTST B_SHAD,A14
|
||
JRNZ SBPO_HEAD_NEXT ;BR=DON'T ANI A SHADOW
|
||
|
||
MOVE *A8(OCTRL),A4,W
|
||
ANDI M_FLIPH,A4
|
||
ORI DMAWNZ,A4
|
||
CALLA ANI
|
||
; CALLA SET_SCALE_WARREN ;SCALE THE MOTHER
|
||
; CALLA SET_ODAG ;COMPUTE ODAG AGAIN
|
||
SBPO_HEAD_NEXT
|
||
MOVE *A8(OPARTS),A8,L
|
||
JRNZ SBPO_HEAD_LUPE ;BR=PARTS IS PARTS
|
||
|
||
ADDI HEAD_ZOFF,A3 ;CLEAR OFFSET FOR BODY
|
||
MOVE A3,A1
|
||
MOVE A9,A3
|
||
|
||
MOVE @BUG_BODY_OBJ,A8,L ;DO THE BODY
|
||
|
||
CALLA REPOS_OBJ
|
||
|
||
CALLA INSERT_OBJ
|
||
|
||
SBPO_BODY_LUPE
|
||
MOVE *A8(OFLAGS),A14,W
|
||
ORI M_OFSCRN,A14
|
||
MOVE A14,*A8(OFLAGS),W
|
||
MOVE *A8(OPARTS),A8,L
|
||
JRNZ SBPO_BODY_LUPE ;BR=PARTS IS PARTS
|
||
|
||
MMFM SP,A1,A3,A4,A8,A9,A10
|
||
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUG_BODY_PROC *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BUG_BODY_PROC
|
||
MOVK LEG_PARTS,A1
|
||
CALLA FINDPART
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVIM -1c0h,@MAX_BUG_VEL,W
|
||
|
||
MOVI BUG_LEGS_SPRING_ANIM,A1 ;BOING!
|
||
CALLA STRTANIM
|
||
|
||
BBP_DRAIN_SPRING_WAIT
|
||
SLEEP 1
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_GCOLL,A14
|
||
JRZ BBP_DRAIN_SPRING_WAIT ;BR=NOT CLEARED YET
|
||
|
||
SOUND1 SND_JUMP
|
||
|
||
MOVI -0100H,A14 ;JUMP OUT OF DRAIN
|
||
MOVE A14,*A8(OZVEL),L
|
||
|
||
MOVI BJ_YVEL,A14
|
||
MOVE A14,*A8(OYVEL),L
|
||
|
||
MOVI BJ_YACCEL,A14
|
||
MOVE A14,*A8(OYACCEL),W
|
||
|
||
BBP_DRAIN_LEAP_WAIT
|
||
SLEEP 1
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_GCOLL,A14
|
||
JRNZ BBP_DRAIN_LEAP_WAIT ;BR=NOT OUT OF DRAIN
|
||
|
||
MOVK LEG_PARTS,A1
|
||
CALLA FINDPART
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVE A0,A9
|
||
|
||
MOVI BUG_LEGS_SPRING_ANIM,A1 ;BOING!
|
||
CALLA STRTANIM
|
||
|
||
SOUND1 SND_POOL_SPLASH
|
||
|
||
BBP_DRAIN_LAND_WAIT
|
||
SLEEP 1
|
||
MOVE *A9(OFLAGS),A14,W
|
||
BTST B_ANIM,A14
|
||
JRNZ BBP_DRAIN_LAND_WAIT ;BR=NOT ON DA GROUND
|
||
|
||
SOUND1 SND_POOL_WALK
|
||
|
||
CREATE PID_BOSSBUG,BUG_START_WALK_PROC ;START MOVIN'
|
||
|
||
MOVI NECK_ANIM,A1
|
||
CALLA STRT_ANIM
|
||
|
||
MOVE @BUG_HEAD_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVK M_RANDOM,A14
|
||
MOVE A14,*A0(OHFLAGS),W
|
||
|
||
BBP_WALK_WAIT
|
||
SLEEP 1
|
||
MOVE *A8(OZVAL),A1,L
|
||
MOVE @ZBASE,A14,L
|
||
SUB A14,A1
|
||
CMPI 08000H,A1
|
||
JRGT BBP_WALK_WAIT ;BR=NOT AT EDGE
|
||
|
||
SOUND1 SND_CHAN3_OFF
|
||
|
||
MOVIM -120h,@MAX_BUG_VEL,W
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OZVEL),L ;STOP MOVIN'
|
||
|
||
CALLA PULL_ANIM
|
||
|
||
MOVE *A8(OBFLAGS),A14,W
|
||
ORI M_STOPLEGS,A14
|
||
MOVE A14,*A8(OBFLAGS),W
|
||
|
||
; CREATE PID_BOSSBUG,BUG_HEAD_INTRO_PROC ;INTRODUCE DA HEAD
|
||
|
||
MOVE @BUG_HEAD_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVI HEAD_GREETING_ANIM,A1
|
||
MOVI HEAD_SCREAM_GO_ANIM,A14
|
||
CALLA STRTANIM_OFF
|
||
|
||
SLEEP 40
|
||
|
||
MOVE @BUG_HEAD_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVK M_GOHOME,A14
|
||
MOVE A14,*A0(OHFLAGS),W
|
||
|
||
BBP_HEAD_HOME_WAIT
|
||
SLEEP 1
|
||
|
||
MOVE @BUG_HEAD_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVE *A0(OHFLAGS),A14,W
|
||
BTST B_HOME,A14
|
||
JRZ BBP_HEAD_HOME_WAIT ;BR=NOT READY TO JUMP
|
||
|
||
MOVK LEG_PARTS,A1
|
||
CALLA FINDPART
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVI BUG_LEGS_SPRING_ANIM,A1 ;BOING!
|
||
CALLA STRTANIM
|
||
|
||
BBP_POOL_SPRING_WAIT
|
||
SLEEP 1
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_GCOLL,A14
|
||
JRZ BBP_POOL_SPRING_WAIT ;BR=NOT CLEARED YET
|
||
|
||
SOUND1 SND_POOL_JUMP
|
||
|
||
MOVK 1,A14
|
||
MOVE A14,@SCROLL_FLAG,L
|
||
|
||
MOVI -0100H,A14 ;JUMP OUT OF POOL
|
||
MOVE A14,*A8(OZVEL),L
|
||
MOVI -038000H,A14
|
||
MOVE A14,*A8(OYVEL),L
|
||
|
||
MOVI 02800H,A14
|
||
MOVE A14,*A8(OYACCEL),W
|
||
|
||
CALLA GET_SHAD_MULTI
|
||
|
||
MOVE A8,A1
|
||
|
||
MOVE @BUG_HEAD_OBJ,A8,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
CALLA GET_SHAD_MULTI
|
||
|
||
MOVK NUM_NECK_SEGS,A2
|
||
MOVI BUG_NECK_OBJS,A3
|
||
BBP_SHADOW_NECK_LUPE
|
||
MOVE *A3+,A8,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
CALLA GET_SHAD
|
||
|
||
DSJ A2,BBP_SHADOW_NECK_LUPE
|
||
|
||
MOVE A1,A8
|
||
|
||
BBP_POOL_LEAP_WAIT
|
||
SLEEP 1
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_GCOLL,A14
|
||
JRNZ BBP_POOL_LEAP_WAIT ;BR=NOT OUT OF POOL
|
||
|
||
MOVK LEG_PARTS,A1
|
||
CALLA FINDPART
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVI BUG_LEGS_SPRING_ANIM,A1 ;BOING!
|
||
CALLA STRTANIM
|
||
|
||
MOVE A0,A9
|
||
|
||
SOUND1 SND_LAND
|
||
|
||
BBP_POOL_LAND_WAIT
|
||
SLEEP 1
|
||
MOVE *A9(OFLAGS),A14,W
|
||
BTST B_ANIM,A14
|
||
JRNZ BBP_POOL_LAND_WAIT ;BR=NOT ON DA GROUND
|
||
|
||
; SOUND1 SND_WALK
|
||
|
||
MOVI NECK_ANIM,A1
|
||
CALLA STRT_ANIM
|
||
|
||
MOVI -04000H-BUTT_ZOFF-0100H,A1
|
||
MOVE @ZREL_OFF,A14,L
|
||
SRA ZFRAC,A14
|
||
ADD A14,A1
|
||
MOVE A1,*A8(OZFARTHEST),L ;SET PUSH LIMIT
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OBFLAGS),W
|
||
|
||
CREATE PID_BOSSBUG,BUG_START_WALK_PROC
|
||
|
||
MOVE @BUG_HEAD_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVK M_RANDOM,A14
|
||
MOVE A14,*A0(OHFLAGS),W
|
||
|
||
MOVI -05010H,A9
|
||
MOVI -01B52FH,A10
|
||
CREATE PID_BOSSBUG,BUG_HEAD_ATTACK_PROC
|
||
|
||
MOVE @XBASE,A9,L
|
||
BBP_FIRST_TURN_WAIT
|
||
SLEEP 1
|
||
MOVE @XSCROLL,A14,L
|
||
JRZ BBP_FIRST_TURN_WAIT ;BR=NOT AT FIRST TURN
|
||
|
||
MOVK M_NOBITE,A14
|
||
MOVE A14,*A8(OBFLAGS),W
|
||
|
||
BBP_FIRST_OFFSCREEN_WAIT
|
||
SLEEP 1
|
||
MOVE @XBASE,A14,L
|
||
SUB A9,A14
|
||
ABS A14
|
||
CMPI 0E0C552H,A14
|
||
JRLT BBP_FIRST_OFFSCREEN_WAIT ;BR=NOT OFFSCREEN
|
||
|
||
CALLR PULL_BUG
|
||
|
||
BBP_FIRST_PORTAL_WAIT
|
||
SLEEP 1
|
||
MOVE @WAVE_UNIV,A14,L
|
||
CMPI GXHALL3M,A14
|
||
JRNE BBP_FIRST_PORTAL_WAIT ;BR=NOT THROUGH PORTAL
|
||
|
||
MOVE @XBASE,A1,L
|
||
MOVE *A8(OYVAL),A2,L
|
||
MOVI 022001H,A3 ; Z Relative to GXHALL3M (was 21001)
|
||
CALLR SET_BUG_POSITION
|
||
|
||
sleep 30 ; wait for doors to open
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OBFLAGS),W
|
||
|
||
MOVI 020000H-BUTT_ZOFF-0100H,A1
|
||
MOVE @ZREL_OFF,A14,L
|
||
SRA ZFRAC,A14
|
||
ADD A14,A1
|
||
MOVE A1,*A8(OZFARTHEST),L ;SET PUSH LIMIT
|
||
|
||
MOVI 01FFF0H,A9
|
||
MOVI -0F00H,A10
|
||
CREATE PID_BOSSBUG,BUG_HEAD_ATTACK_PROC
|
||
|
||
MOVE @BUG_HEAD_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
MOVK M_HOME,A14
|
||
MOVE A14,*A0(OHFLAGS),W
|
||
|
||
MOVI NECK_ANIM,A1
|
||
CALLA STRT_ANIM
|
||
|
||
CREATE PID_BOSSBUG,BUG_START_WALK_PROC
|
||
|
||
BBP_SECOND_TURN_WAIT
|
||
SLEEP 1
|
||
MOVE @XSCROLL,A14,L
|
||
JRZ BBP_SECOND_TURN_WAIT ;BR=NOT AT SECOND TURN
|
||
|
||
MOVK M_NOBITE,A14
|
||
MOVE A14,*A8(OBFLAGS),W
|
||
|
||
MOVE @XBASE,A9,L
|
||
BBP_SECOND_OFFSCREEN_WAIT
|
||
SLEEP 1
|
||
MOVE @XBASE,A14,L
|
||
SUB A9,A14
|
||
ABS A14
|
||
CMPI 0BEF581H,A14
|
||
JRLT BBP_SECOND_OFFSCREEN_WAIT ;BR=NOT OFFSCREEN
|
||
|
||
CALLR PULL_BUG
|
||
|
||
MOVE @XSCROLL,A11,L ;SAVE DIRECTION
|
||
|
||
BBP_ELEVATOR_TURN_WAIT
|
||
SLEEP 1
|
||
MOVE @SCROLL_FLAG,A14,L
|
||
JRZ BBP_ELEVATOR_TURN_WAIT ;BR=NOT AT ELEVATOR
|
||
|
||
MOVI 08000H-BUTT_ZOFF-0100H,A1
|
||
MOVE @ZREL_OFF,A14,L
|
||
SRA ZFRAC,A14
|
||
ADD A14,A1
|
||
MOVE A1,*A8(OZFARTHEST),L ;SET PUSH LIMIT
|
||
|
||
MOVI 01000000H,A14 ;LEFT X OFFSET
|
||
MOVI -040000H,A9 ;LEFT X VELOCITY
|
||
MOVE A11,A11
|
||
JRN BBP_SET_OFF_ELEVATOR ;BR=COMIN' FROM DA RIGHT
|
||
NEG A14 ;RIGHT X OFFSET
|
||
NEG A9 ;RIGHT X VELOCITY
|
||
BBP_SET_OFF_ELEVATOR
|
||
MOVE @XBASE,A1,L
|
||
ADD A14,A1
|
||
MOVE *A8(OYVAL),A2,L
|
||
MOVI 08001H-BUTT_ZOFF-010H,A3
|
||
CALLR SET_BUG_POSITION
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OBFLAGS),W
|
||
|
||
MOVE @BUG_HEAD_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
MOVK M_HOME,A14
|
||
MOVE A14,*A0(OHFLAGS),W
|
||
|
||
MOVI NECK_ANIM,A1
|
||
CALLA STRT_ANIM
|
||
|
||
CREATE PID_BOSSBUG,BUG_START_WALK_PROC
|
||
|
||
CLR A14 ;NO Z MOVEMENT
|
||
MOVE A14,*A8(OZVEL),L
|
||
|
||
MOVK M_NOMOVEZ|M_NOPUSH,A14
|
||
MOVE A14,*A8(OBFLAGS),W
|
||
|
||
MOVE A9,*A8(OXVEL),L ;X SLIDE VELOCITY
|
||
ABS A9
|
||
GETST A10
|
||
BBP_ELEVATOR_WAIT
|
||
SLEEP 1
|
||
MOVE @XBASE,A1,L
|
||
MOVE *A8(OXVAL),A2,L
|
||
SUB A2,A1
|
||
GETST A14
|
||
XOR A10,A14
|
||
MOVE A14,A14
|
||
JRNN BBP_ELEVATOR_PAST ;BR=PAST DA MIDPOINT
|
||
ABS A1
|
||
CMP A9,A1
|
||
JRGT BBP_ELEVATOR_WAIT ;BR=NOT THERE YET
|
||
BBP_ELEVATOR_PAST
|
||
|
||
; MOVI 0105000H,A1
|
||
; MOVE *A8(OYVAL),A2,L
|
||
; MOVI 06E433H,A3
|
||
; CALLR SET_BUG_POSITION
|
||
|
||
; MOVI 0105000H,A14
|
||
; MOVE A9,*A8(OXVAL),L
|
||
|
||
; MOVE A9,A1
|
||
;; CALLA SET_ANIPXU
|
||
; CALLA REPOS_OBJ
|
||
|
||
MOVIM -0f0h,@MAX_BUG_VEL,W
|
||
|
||
CLR A14 ;STOP X MOVEMENT
|
||
MOVE A14,*A8(OXVEL),L
|
||
MOVE A14,*A8(OBFLAGS),W
|
||
|
||
MOVI 08001H-BUTT_ZOFF-010H-010H,A9
|
||
MOVI -013801H,A10
|
||
CREATE PID_BOSSBUG,BUG_HEAD_ATTACK_PROC
|
||
|
||
CLR A9
|
||
|
||
MOVI -012001H,A10 ;Z REL AT PUSH BACK
|
||
; MOVI -0F001H,A10
|
||
MOVE @ZREL_OFF,A14,L
|
||
SRA ZFRAC,A14
|
||
ADD A14,A10
|
||
MOVI 0100H,A11
|
||
BBP_LOBBY_WAIT
|
||
SLEEP 1
|
||
MOVE @WAVE_UNIV,A14,L
|
||
CMPI GXEVLOB3,A14
|
||
JREQ BBP_LOBBY ;BR=WE'RE IN DA LOBBY
|
||
; MOVE A9,A9
|
||
; JRNZ BBP_LOBBY_WAIT ;BR=WE ALREADY SLOWED
|
||
MOVE *A8(OZVAL),A14,L
|
||
CMP A10,A14
|
||
JRGT BBP_LOBBY_WAIT ;BR=NOT CLOSE ENOUGH
|
||
MOVE *A8(OBFLAGS),a14,W
|
||
ori M_NOBITE,a14
|
||
move a14,*a8(OBFLAGS) ; too close, stop biting
|
||
MOVE *A8(OZVEL),A14,L
|
||
CMP A11,A14
|
||
JRGE BBP_LOBBY_WAIT ; already moving back
|
||
; MOVK 1,A9 ;TOO CLOSE. SLOW DOWN
|
||
MOVE A11,*A8(OZVEL),L ; move back now!
|
||
JRUC BBP_LOBBY_WAIT
|
||
BBP_LOBBY
|
||
; CALLR PULL_BUG
|
||
; JRUC BBP_TEST
|
||
|
||
CLR A14 ;NO Z MOVEMENT
|
||
MOVE A14,*A8(OZVEL),L
|
||
|
||
MOVIM -120h,@MAX_BUG_VEL,W
|
||
|
||
MOVE @ZREL_OFF,A4,L
|
||
SRA ZFRAC,A4
|
||
|
||
MOVE @XBASE,A3,L
|
||
MOVE *A8(OYVAL),A2,L
|
||
MOVI 0a801H,A1 ; was 9801
|
||
ADD A4,A1
|
||
CALLA REPOS_OBJ ;SET IN NEW UNIVERSE
|
||
|
||
sleep 60 ; wait for doors to open
|
||
|
||
MOVI 08000H-BUTT_ZOFF-0100H,A1
|
||
MOVE @ZREL_OFF,A14,L
|
||
SRA ZFRAC,A14
|
||
ADD A14,A1
|
||
MOVE A1,*A8(OZFARTHEST),L ;SET PUSH LIMIT
|
||
|
||
MOVI 08001H-BUTT_ZOFF-010H-010H,A9
|
||
MOVI -013000H,A10
|
||
CREATE PID_BOSSBUG,BUG_HEAD_ATTACK_PROC
|
||
|
||
MOVK M_NOBITE,A14
|
||
MOVE A14,*A8(OBFLAGS),W
|
||
|
||
CLR A14 ;NO Z MOVEMENT
|
||
MOVE A14,*A8(OZVEL),L
|
||
|
||
MOVE @ZREL_OFF,A4,L
|
||
SRA ZFRAC,A4
|
||
MOVI -012000H,A9
|
||
ADD A4,A9
|
||
BBP_DESK_WAIT
|
||
SLEEP 1
|
||
MOVE *A8(OZVAL),A14,L
|
||
CMP A9,A14
|
||
JRGT BBP_DESK_WAIT ;BR=NOT READY TO JUMP
|
||
|
||
MOVK M_STOPLEGS,A14
|
||
MOVE A14,*A8(OBFLAGS),W
|
||
|
||
CALLA PULL_ANIM
|
||
|
||
MOVK M_NOPUSH|M_NOBITE|M_STOPLEGS,A14
|
||
MOVE A14,*A8(OBFLAGS),W
|
||
|
||
SOUND1 SND_JUMP
|
||
|
||
MOVI -0d0H,A14 ; was -100h ;JUMP THE DESK
|
||
MOVE A14,*A8(OZVEL),L
|
||
MOVI -50000h,A14
|
||
MOVE A14,*A8(OYVEL),L
|
||
|
||
MOVI BJ_YACCEL,A14
|
||
MOVE A14,*A8(OYACCEL),W
|
||
|
||
MOVE *A8(OFLAGS),A14,W
|
||
ORI M_GCOLL,A14
|
||
MOVE A14,*A8(OFLAGS),W
|
||
|
||
BBP_DESK_LEAP_WAIT
|
||
SLEEP 1
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_GCOLL,A14
|
||
JRNZ BBP_DESK_LEAP_WAIT ;BR=NOT OVER DESK
|
||
|
||
MOVK LEG_PARTS,A1
|
||
CALLA FINDPART
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVI BUG_LEGS_SPRING_ANIM,A1 ;BOING!
|
||
CALLA STRTANIM
|
||
|
||
SOUND1 SND_LAND
|
||
|
||
MOVE @BUG_HEAD_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVK M_RANDOM,A14
|
||
MOVE A14,*A0(OHFLAGS),W
|
||
|
||
SLEEP 30
|
||
|
||
MOVE @BUG_HEAD_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVI HEAD_GREETING_ANIM,A1
|
||
MOVI HEAD_SCREAM_GO_ANIM,A14
|
||
CALLA STRTANIM_OFF
|
||
|
||
sleep 15
|
||
|
||
MOVK 1,A14
|
||
MOVE A14,@SCROLL_FLAG,L
|
||
|
||
SLEEP 45
|
||
|
||
MOVE @BUG_HEAD_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
MOVK M_GOHOME,A14
|
||
MOVE A14,*A0(OHFLAGS),W
|
||
|
||
BBP_JUNGLE_WAIT
|
||
SLEEP 1
|
||
MOVE @WAVE_UNIV,A14,L
|
||
CMPI GXJUNG3,A14
|
||
JRNE BBP_JUNGLE_WAIT ;BR=NOT IN JUNGLE YET
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OBFLAGS),W
|
||
|
||
MOVE @ZREL_OFF,A4,L
|
||
SRA ZFRAC,A4
|
||
|
||
MOVE @XBASE,A3,L
|
||
MOVE *A8(OYVAL),A2,L
|
||
; MOVI 0F0000H,A2
|
||
MOVI 03F801H,A1 ; was 3e801
|
||
ADD A4,A1
|
||
CALLA REPOS_OBJ ;SET IN NEW UNIVERSE
|
||
|
||
MOVI 03C801H-BUTT_ZOFF-0100H,A1
|
||
MOVE @ZREL_OFF,A14,L
|
||
SRA ZFRAC,A14
|
||
ADD A14,A1
|
||
MOVE A1,*A8(OZFARTHEST),L ;SET PUSH LIMIT
|
||
|
||
sleep 30
|
||
|
||
MOVI 03C801H-BUTT_ZOFF-010H-010H,A9
|
||
MOVI 025931H,A10
|
||
CREATE PID_BOSSBUG,BUG_HEAD_ATTACK_PROC
|
||
|
||
MOVI NECK_ANIM,A1
|
||
CALLA STRT_ANIM
|
||
|
||
CREATE PID_BOSSBUG,BUG_START_WALK_PROC
|
||
|
||
BBP_WALL_OFFSCREEN_WAIT
|
||
SLEEP 1
|
||
MOVE @YBASE,A14,L
|
||
CMPI 0910000H,A14
|
||
JRLT BBP_WALL_OFFSCREEN_WAIT ;BR=NOT OFFSCREEN YET
|
||
|
||
CALLR PULL_BUG
|
||
|
||
BBP_WALL_LAND_WAIT
|
||
SLEEP 1
|
||
MOVE @YBASE,A14,L
|
||
JRNZ BBP_WALL_LAND_WAIT ;BR=NOT ON GROUND YET
|
||
|
||
MOVE @XBASE,A1,L
|
||
MOVI -01000000H,A2
|
||
MOVI 024000H-BUTT_ZOFF-0100H,A3
|
||
CALLR SET_BUG_POSITION
|
||
|
||
MOVI 024000H-BUTT_ZOFF-0100H,A1
|
||
MOVE @ZREL_OFF,A14,L
|
||
SRA ZFRAC,A14
|
||
ADD A14,A1
|
||
MOVE A1,*A8(OZFARTHEST),L ;SET PUSH LIMIT
|
||
|
||
MOVI 021000H,A9
|
||
MOVI -0CCD9H,A10
|
||
CREATE PID_BOSSBUG,BUG_HEAD_ATTACK_PROC
|
||
|
||
MOVE @BUG_HEAD_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVK M_HOME,A14
|
||
MOVE A14,*A0(OHFLAGS),W
|
||
|
||
MOVK M_NOBITE|M_NOPUSH|M_STOPLEGS,A14
|
||
MOVE A14,*A8(OBFLAGS),W
|
||
|
||
CREATE PID_BOSSBUG,BUG_START_WALK_PROC
|
||
|
||
MOVI BJ_YACCEL,A14
|
||
MOVE A14,*A8(OYACCEL),W
|
||
|
||
MOVE *A8(OFLAGS),A14,W
|
||
ORI M_GCOLL,A14
|
||
MOVE A14,*A8(OFLAGS),W
|
||
|
||
BBP_WALL_FALL_WAIT
|
||
SLEEP 1
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_GCOLL,A14
|
||
JRNZ BBP_WALL_FALL_WAIT ;BR=NOT OVER DESK
|
||
|
||
MOVK LEG_PARTS,A1
|
||
CALLA FINDPART
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVI BUG_LEGS_SPRING_ANIM,A1 ;BOING!
|
||
CALLA STRTANIM
|
||
|
||
SOUND1 SND_LAND
|
||
|
||
SLEEP 30
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OBFLAGS),W
|
||
|
||
CREATE PID_BOSSBUG,BUG_START_WALK_PROC
|
||
|
||
MOVI NECK_ANIM,A1
|
||
CALLA STRT_ANIM
|
||
|
||
MOVE @XBASE,A9,L
|
||
BBP_JUNGLE_OFFSCREEN_WAIT
|
||
SLEEP 1
|
||
MOVE @XBASE,A14,L
|
||
SUB A9,A14
|
||
CMPI -0177BA83H,A14
|
||
JRGT BBP_JUNGLE_OFFSCREEN_WAIT ;BR=NOT OFFSCREEN YET
|
||
|
||
CALLR PULL_BUG
|
||
|
||
BBP_BRIDGE_WAIT
|
||
SLEEP 1
|
||
MOVE @SCROLL_FLAG,A14,L
|
||
JRZ BBP_BRIDGE_WAIT ;BR=NOT AT BRIDGE YET
|
||
|
||
move @ATTACK_WAIT,a14
|
||
addk 20,a14
|
||
move a14,@ATTACK_WAIT
|
||
|
||
MOVE @XBASE,A1,L
|
||
MOVI -01000000H,A2
|
||
MOVI -019000H-BUTT_ZOFF-0100H,A3
|
||
CALLR SET_BUG_POSITION
|
||
|
||
MOVI -019000H-BUTT_ZOFF-0100H,A1
|
||
MOVE @ZREL_OFF,A14,L
|
||
SRA ZFRAC,A14
|
||
ADD A14,A1
|
||
MOVE A1,*A8(OZFARTHEST),L ;SET PUSH LIMIT
|
||
|
||
MOVI -01C000H,A9
|
||
MOVI -0100000H,A10
|
||
CREATE PID_BOSSBUG,BUG_HEAD_ATTACK_PROC
|
||
move a0,a9 ; for killing later
|
||
|
||
MOVE @BUG_HEAD_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVK M_HOME,A14
|
||
MOVE A14,*A0(OHFLAGS),W
|
||
|
||
MOVK M_NOBITE|M_NOPUSH|M_STOPLEGS,A14
|
||
MOVE A14,*A8(OBFLAGS),W
|
||
|
||
CREATE PID_BOSSBUG,BUG_START_WALK_PROC
|
||
|
||
MOVI BJ_YACCEL,A14
|
||
MOVE A14,*A8(OYACCEL),W
|
||
|
||
MOVE *A8(OFLAGS),A14,W
|
||
ORI M_GCOLL,A14
|
||
MOVE A14,*A8(OFLAGS),W
|
||
|
||
MOVIM -080h,@MAX_BUG_VEL,W
|
||
|
||
BBP_DOOR_FALL_WAIT
|
||
SLEEP 1
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_GCOLL,A14
|
||
JRNZ BBP_DOOR_FALL_WAIT ;BR=NOT OVER DESK
|
||
|
||
MOVK LEG_PARTS,A1
|
||
CALLA FINDPART
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVI BUG_LEGS_SPRING_ANIM,A1 ;BOING!
|
||
CALLA STRTANIM
|
||
|
||
SOUND1 SND_LAND
|
||
|
||
SLEEP 30
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OBFLAGS),W
|
||
|
||
CREATE PID_BOSSBUG,BUG_START_WALK_PROC
|
||
|
||
MOVI NECK_ANIM,A1
|
||
CALLA STRT_ANIM
|
||
|
||
|
||
BBP_TEST
|
||
move @ZBASE,a14,L ; slide OZFARTHEST forward if
|
||
addi 15000h,a14 ; necessary
|
||
move *a8(OZFARTHEST),a0,L
|
||
cmp a0,a14
|
||
jrgt BBP_nochg
|
||
move a14,*a8(OZFARTHEST),L
|
||
BBP_nochg:
|
||
move @BRIDGE_STATE,a14
|
||
jrn BBP_BRIDGE_GONE
|
||
|
||
move @ZSCROLL,a14,L
|
||
jrnz BBP_moving
|
||
|
||
MOVIM 7000h,@ZCLOSEST_WORLD,L
|
||
MOVE *A8(OBFLAGS),a14,W
|
||
ori M_NOBITE,a14
|
||
move a14,*a8(OBFLAGS)
|
||
|
||
BBP_moving:
|
||
SLoop 3,BBP_TEST
|
||
|
||
BBP_BRIDGE_GONE:
|
||
|
||
MOVIM BHAP_HOME,*a9(PWAKE),L
|
||
MOVKM 1,*a9(PTIME),W
|
||
|
||
calla DELETE_SHADOW ; remove body shadow
|
||
|
||
CALLA PULL_ANIM ;PULL BODY "HEAD" ANIMATION
|
||
|
||
MOVIM -38000h,*a8(OYVEL),L ; get body plummeting
|
||
movim 1500h,*a8(OYACCEL),W
|
||
|
||
CLRM *a8(OZVEL),L
|
||
move a8,a9 ; body obj in a9
|
||
|
||
movi BUG_NECK_OBJS,a3
|
||
movk NUM_NECK_SEGS,a6
|
||
movk 2,a4
|
||
BBP_nkshad:
|
||
move *a3+,a8,L
|
||
calla DELETE_SHADOW ; remove neck shadows
|
||
move a4,*a8(OUPDATETIME) ; reset update time
|
||
dsjs a6,BBP_nkshad
|
||
|
||
move @BUG_HEAD_OBJ,a8,L
|
||
calla DELETE_SHADOW ; remove head shadow
|
||
|
||
|
||
move *a8(OPLINK),a0,L ; BUG HEAD PROC
|
||
MOVIM BHP_GOHOME,*a0(PWAKE),L ; wake up to go home
|
||
MOVKM 1,*a0(PTIME),W
|
||
MOVKM M_GOHOME,*a8(OHFLAGS),W ; tell head to go home
|
||
|
||
BBP_nohomyet:
|
||
sleep 1
|
||
move *a8(OHFLAGS),a14 ; wait til head is home
|
||
btst B_GOHOME,a14
|
||
jrnz BBP_nohomyet
|
||
|
||
CLRM *a8(OHFLAGS),W
|
||
BBP_nohiyet:
|
||
move *a9(OYVEL),a14,L ; wait til body reaches peak height
|
||
jrnn BBP_peak
|
||
sloop 1,BBP_nohiyet
|
||
|
||
BBP_peak:
|
||
move *a8(OPLINK),a0,L ; BUG HEAD PROC
|
||
CLRM *a8(OPLINK),L
|
||
calla KILL ; KILL HEAD PROC
|
||
|
||
SETF 4,0,0 ;FIELD 0 IS 4 BITS
|
||
move *a8(OPARTS),a0,L
|
||
MOVK M_WRNONZ,A14 ;DMAWNZ
|
||
MOVE A14,*A8(OCTRL),0
|
||
MOVE A14,*A0(OCTRL),0
|
||
SETF 16,1,0 ;WORD SIGN EXTEND
|
||
|
||
MOVI LONG_SCREAM_ANIM,A1
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_ANIM,A14
|
||
JRNZ BBP_scrm2
|
||
CALLA STRT_ANIM ; if not currently animating
|
||
jruc BBP_scrm1
|
||
BBP_scrm2:
|
||
move a1,*a8(AnimScr),L ; interrupt current anim
|
||
move a1,*a8(AnimFrm),L
|
||
MOVKB 1,*a8(AnimSlp)
|
||
|
||
BBP_scrm1:
|
||
calla PSTOP ; STOP HEAD
|
||
|
||
sleep 120
|
||
|
||
SOUND1 SND_DEATH_SCREAM
|
||
movim 2400h,*a8(OYACCEL),W ; start head falling
|
||
|
||
sleep 120
|
||
|
||
SOUND1 SND_BUG_FINALE
|
||
|
||
sleep 150
|
||
|
||
CLRM @SCROLL_FLAG,L ; signal scroller to end wave
|
||
|
||
|
||
BBP_endless: ; wave end will kill process
|
||
sloop 80,BBP_endless
|
||
|
||
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUG_HEAD_INTRO_PROC - INTRODUCE DA HEAD *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BUG_HEAD_INTRO_PROC
|
||
MOVE @BUG_HEAD_OBJ,A8,L
|
||
JAZ SUCIDE
|
||
|
||
MOVK M_RANDOM,A14
|
||
MOVE A14,*A8(OHFLAGS),W
|
||
|
||
SLEEP 240
|
||
|
||
MOVK M_GOHOME,A14
|
||
MOVE A14,*A8(OHFLAGS),W
|
||
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUG_HEAD_ATTACK_PROC - MAKE HEAD ATTACK WITHIN A Z RANGE *
|
||
* *
|
||
* PASS: *
|
||
* A9 = RELATIVE UNIVERSE Z WHEN ATTACK STARTS *
|
||
* A10 = RELATIVE ZBASE WHEN ATTACK STOPS *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BUG_HEAD_ATTACK_PROC
|
||
MOVE @ZREL_OFF,A14,L
|
||
SRA ZFRAC,A14
|
||
ADD A14,A9
|
||
ADD A14,A10
|
||
|
||
BHAP_START_WAIT
|
||
SLEEP 1
|
||
MOVE @BUG_HEAD_OBJ,A8,L
|
||
JAZ SUCIDE
|
||
|
||
MOVE *A8(OZVAL),A14,L
|
||
CMP A9,A14
|
||
JRGT BHAP_START_WAIT ;BR=NOT READY TO START
|
||
|
||
; JRUC BHAP_RANDOM
|
||
BHAP_LUPE
|
||
MOVE @BUG_HEAD_OBJ,A8,L
|
||
JAZ SUCIDE
|
||
|
||
MOVE *A8(OHFLAGS),A14,W
|
||
BTST B_BITE,A14
|
||
JRNZ BHAP_BITE_WAIT ;BR=BITING
|
||
BTST B_DAMAGE,A14
|
||
JRNZ BHAP_DAM_WAIT ;BR=HEAD DAMAGE
|
||
|
||
MOVK M_ATTACK,A14 ;ATTACK
|
||
MOVE A14,*A8(OHFLAGS),W
|
||
|
||
MOVK B_ATTACK,A9 ;WAIT FOR ATTACK DONE
|
||
JSRP WAIT_HFLAGS
|
||
JRZ BHAP_HOME ;BR=END THE ATTACK
|
||
|
||
MOVE *A8(OHFLAGS),A14,W
|
||
BTST B_BITE,A14
|
||
JRNZ BHAP_BITE_WAIT ;BR=BITING
|
||
BTST B_DAMAGE,A14
|
||
JRNZ BHAP_DAM_WAIT ;BR=HEAD DAMAGE
|
||
|
||
MOVK B_GOHOME,A9 ;WAIT FOR GO HOME
|
||
JSRP WAIT_HFLAGS
|
||
JRZ BHAP_HOME ;BR=END THE ATTACK
|
||
|
||
MOVE *A8(OHFLAGS),A14,W
|
||
BTST B_BITE,A14
|
||
JRNZ BHAP_BITE_WAIT ;BR=BITING
|
||
; BTST B_DAMAGE,A14
|
||
; JRNZ BHAP_DAM_WAIT ;BR=HEAD DAMAGE
|
||
BHAP_RANDOM
|
||
MOVK M_RANDOM,A14 ;MOVE RANDOMLY
|
||
MOVE A14,*A8(OHFLAGS),W
|
||
MOVE *A8(OAMINDELAY),A1,W
|
||
MOVE @ATTACK_WAIT,a0,W
|
||
inc a0
|
||
cmp a0,a1 ; if VAR is less than min,
|
||
jrge BHAP_norand ; just save min in a11
|
||
CALLA RANGERND
|
||
BHAP_norand:
|
||
MOVE A0,A11
|
||
BHAP_NAP
|
||
SLEEP 1
|
||
MOVE @BUG_HEAD_OBJ,A8,L
|
||
JAZ SUCIDE
|
||
|
||
MOVE @ZBASE,A14,L
|
||
CMP A10,A14
|
||
JRLT BHAP_HOME ;BR=END THE ATTACK
|
||
|
||
MOVE *A8(OHFLAGS),A14,W
|
||
BTST B_BITE,A14
|
||
JRNZ BHAP_BITE_WAIT ;BR=BITING
|
||
|
||
DEC A11
|
||
JRNZ BHAP_NAP ;BR=STILL MOVE RANDOM
|
||
|
||
JRUC BHAP_LUPE
|
||
BHAP_DAM_WAIT
|
||
MOVK B_DAMAGE,A9 ;WAIT FOR DAMAGE OVER
|
||
JSRP WAIT_HFLAGS
|
||
JRZ BHAP_HOME ;BR=END THE ATTACK
|
||
|
||
MOVK B_GOHOME,A9 ;WAIT FOR GO HOME
|
||
JSRP WAIT_HFLAGS
|
||
JRZ BHAP_HOME ;BR=END THE ATTACK
|
||
|
||
MOVI 60,A11 ;SLEEP TIME FOR RANDOM
|
||
|
||
JRUC BHAP_NAP
|
||
BHAP_BITE_WAIT
|
||
MOVK B_BITE,A9 ;WAIT FOR BITE OVER
|
||
JSRP WAIT_HFLAGS
|
||
JRZ BHAP_HOME ;BR=END THE ATTACK
|
||
|
||
MOVK B_GOHOME,A9 ;WAIT FOR GO HOME
|
||
JSRP WAIT_HFLAGS
|
||
JRZ BHAP_HOME ;BR=END THE ATTACK
|
||
|
||
MOVI 90,A11 ;SLEEP TIME FOR RANDOM
|
||
|
||
JRUC BHAP_NAP
|
||
BHAP_HOME
|
||
MOVE *A8(OHFLAGS),A14,W
|
||
ANDI M_HOME|M_GOHOME|M_HIT|M_BITE,A14
|
||
JRNZ BHAP_DONE ;BR=WE'RE HOME OR GOIN'
|
||
MOVK M_GOHOME,A14 ;NOW WE'RE GOING HOME
|
||
MOVE A14,*A8(OHFLAGS),W
|
||
BHAP_DONE
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUG_START_WALK_PROC - START LEG ANIMATIONS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BUG_START_WALK_PROC
|
||
MOVK LEG_PARTS,A2
|
||
; MOVI WALK_START_DELAY_TABLE,A3
|
||
MOVI WALK_START_OFFSET_TABLE,A3
|
||
BSWP_LUPE
|
||
MOVE A2,A1
|
||
CALLA FINDPART
|
||
|
||
; MOVI BUG_LEG_ANIM,A1
|
||
; CALLA STRTANIM
|
||
;
|
||
; MOVE *A3+,A14,W
|
||
; MOVB A14,*A0(AnimSlp)
|
||
|
||
MOVE *A3+,A1,L ;GET STARTING FRAME
|
||
SRL 1,A1 ;SHIFT OUT FLAG
|
||
GETST A4 ;SAVE CARRY
|
||
SLL 1,A1
|
||
MOVI BUG_LEG_ANIM,A14
|
||
CALLA STRTANIM_OFF
|
||
|
||
BTST 30,A4 ;CARRY
|
||
JRZ BSWP_NEXT ;BR=LEAVE LEG ALONE
|
||
MOVE A2,A1
|
||
INC A1 ;2ND LEG HALF
|
||
CALLA FINDPART
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
CALLA OBJOFF ;TURN 2ND LEG HALF OFF
|
||
BSWP_NEXT
|
||
ADDK 2,A2
|
||
CMPK 16,A2
|
||
JRLE BSWP_LUPE ;BR=STILL MORE LEGS
|
||
|
||
DIE
|
||
|
||
WALK_START_DELAY_TABLE
|
||
.WORD 0,30,30,0,15,45
|
||
|
||
WALK_START_OFFSET_TABLE
|
||
.LONG BUG_LEG_ANIM, BUG_LEG_UP_100+1, BUG_LEG_UP_100+1, BUG_LEG_ANIM
|
||
.LONG BUG_LEG_UP_50+1, BUG_LEG_DOWN_50
|
||
|
||
**************************************************************************
|
||
* *
|
||
* WAIT_HFLAGS_Z - FOR A HFLAG TO CHANGE OR ZBASE EXCEEDED *
|
||
* *
|
||
* PASS: *
|
||
* A9 = FLAG TO WAIT FOR *
|
||
* A10 = ZBASE TO CHECK *
|
||
* RETURN: *
|
||
* Z SET IF ZBASE EXCEEDED, CLR OTHERWISE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
WAIT_HFLAGS
|
||
MOVE *A8(OHFLAGS),A11,W
|
||
WH_WAIT
|
||
SLEEP 1
|
||
|
||
MOVE @BUG_HEAD_OBJ,A8,L
|
||
JAZ SUCIDE
|
||
|
||
MOVE @ZBASE,A14,L
|
||
CMP A10,A14
|
||
JRGT WH_CHECK_FLAG ;BR=ZBASE OKAY
|
||
CLR A14 ;FLAG ZBASE EXCEEDED
|
||
RETP
|
||
WH_CHECK_FLAG
|
||
MOVE *A8(OHFLAGS),A14,W
|
||
XOR A11,A14
|
||
BTST A9,A14
|
||
JRZ WH_WAIT ;BR=NO FLAG CHANGE
|
||
RETP
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUG_ON - TURN BUG ON EXCEPT SHADOWS *
|
||
* *
|
||
* PASS: *
|
||
* A8 = HEAD OBJECT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BUG_ON
|
||
PUSH A8
|
||
BO_LUPE
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_SHAD,A14
|
||
JRNZ BO_NEXT ;BR=NO SHADOWS ALLOWED
|
||
CALLA OBJ_ON_WNZ
|
||
BO_NEXT
|
||
MOVE *A8(OPARTS),A8,L
|
||
JRNZ BO_LUPE
|
||
PULLQ A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUG_CONST - TURN BUG CONSTANT EXCEPT SHADOWS *
|
||
* *
|
||
* PASS: *
|
||
* A8 = HEAD OBJECT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BUG_CONST
|
||
PUSH A8
|
||
BC_LUPE
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_SHAD,A14
|
||
JRNZ BC_NEXT ;BR=NO SHADOWS ALLOWED
|
||
CALLA OBJ_CONST
|
||
BC_NEXT
|
||
MOVE *A8(OPARTS),A8,L
|
||
JRNZ BC_LUPE
|
||
PULLQ A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUG_HEAD_PROC - CONTROL DA HEAD *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BUG_HEAD_PROC
|
||
MOVE @BUG_BODY_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVE *A8(OHFLAGS),A11,W
|
||
BTST B_PULL,A11
|
||
JRNZ BHP_NAP ;BR=HEAD PULLED
|
||
|
||
BTST B_BITE,A11
|
||
JRZ BHP_NEXT ;BR=NOT BITING
|
||
MOVE *A8(OZVAL),A14,L
|
||
MOVE *A0(OZVAL),A1,L
|
||
SUBI HEAD_ZOFF,A1
|
||
CMP A14,A1
|
||
JRGE BHP_ZVEL ;BR=HEAD IN FRONT OF BODY
|
||
CALLA SET_ANIPZU
|
||
CALLA SORT_OBJ
|
||
ORI M_SORTED,A11
|
||
MOVE A11,*A8(OHFLAGS),W ;FLAG SORT FOR NECK
|
||
JRUC BHP_ZVEL
|
||
BHP_NEXT
|
||
BTST B_HOME,A11
|
||
JRZ BHP_NEXT0 ;BR=DON'T GO HOME
|
||
|
||
.if DEBUG
|
||
BTST B_DAMAGE,A11
|
||
JRNZ $
|
||
.endif
|
||
|
||
BHP_HOME
|
||
|
||
.if DEBUG
|
||
MOVE *A8(OHFLAGS),A11,W
|
||
BTST B_DAMAGE,A11
|
||
JRNZ $
|
||
.endif
|
||
|
||
MOVE *A0(OXVAL),A1,L ;SET HOME
|
||
MOVE *A0(OYVAL),A2,L
|
||
MOVE *A0(OZVAL),A3,L
|
||
SUBI HEAD_ZOFF,A3
|
||
CALLA SET_ANIPU
|
||
|
||
JRUC BHP_ZVEL
|
||
|
||
BHP_NEXT0
|
||
BTST B_GOHOME,A11
|
||
JRZ BHP_NEXT1 ;BR=DON'T GO HOME
|
||
|
||
.if DEBUG
|
||
BTST B_DAMAGE,A11
|
||
JRNZ $
|
||
.endif
|
||
|
||
BHP_GOHOME
|
||
|
||
.if DEBUG
|
||
MOVE *A8(OHFLAGS),A11,W
|
||
BTST B_DAMAGE,A11
|
||
JRNZ $
|
||
.endif
|
||
|
||
MOVI 15,A9 ;GO IN THIS TIME
|
||
BHP_GOHOME_LUPE
|
||
MOVE *A8(OHFLAGS),A14,W
|
||
BTST B_BITE,A14
|
||
; JRNZ BHP_GH_BITE ;BR=WE BITE
|
||
JRNZ BHP_BITE_NAP ;BR=WE BITE
|
||
|
||
.if DEBUG
|
||
MOVE *A8(OHFLAGS),A11,W
|
||
BTST B_DAMAGE,A11
|
||
JRNZ $
|
||
.endif
|
||
|
||
MOVE @BUG_BODY_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVE *A0(OXVAL),A1,L ;DESTINATION
|
||
MOVE *A0(OYVAL),A3,L
|
||
MOVE *A0(OZVAL),A5,L
|
||
SUBI HEAD_ZOFF+0100H,A5
|
||
MOVE A5,A10
|
||
|
||
MOVE *A8(OXVAL),A2,L ;CURRENT POSITION
|
||
MOVE *A8(OYVAL),A4,L
|
||
MOVE *A8(OZVAL),A6,L
|
||
|
||
* A1 = PNT. B X POSITION (32 BITS) *
|
||
* A2 = PNT. A X POSITION (32 BITS) *
|
||
* A3 = PNT. B Y POSITION (32 BITS) *
|
||
* A4 = PNT. A Y POSITION (32 BITS) *
|
||
* A5 = PNT. B Z POSITION (32 BITS) *
|
||
* A6 = PNT. A Z POSITION (32 BITS) *
|
||
* A7 = DURATION(# OF TICKS TO GET FROM A TO B) *
|
||
|
||
MOVE A9,A7
|
||
; CALLA SLINEVEL_LOAD_3D
|
||
CALLA SLINEVEL_3D
|
||
|
||
* A1 = X VEL (32 BITS) *
|
||
* A3 = Y VEL (32 BITS) *
|
||
* A5 = Z VEL (32 BITS) *
|
||
|
||
MOVE A1,*A8(OXVEL),L
|
||
MOVE A3,*A8(OYVEL),L
|
||
|
||
MOVE *A0(OZVEL),A1,L
|
||
ADD A1,A10
|
||
ADD A5,A6
|
||
CMP A10,A6
|
||
JRLT BHP_GH_NAP ;BR=NO PAST BODY
|
||
MOVE A1,A5
|
||
BHP_GH_NAP
|
||
MOVE A5,*A8(OZVEL),L
|
||
SLEEP 1
|
||
DEC A9
|
||
JRNZ BHP_GOHOME_LUPE
|
||
|
||
; MOVE @WAVEIRQS,A10,L
|
||
; SLEEP 1
|
||
; MOVE @WAVEIRQS,A14,L
|
||
; SUB A10,A14
|
||
;
|
||
; SUB A14,A9
|
||
; CMPI 0,A9
|
||
; JRGT BHP_GOHOME_LUPE ;BR=NOT DONE YET
|
||
|
||
CLR A14 ;STOP EVERYTHING
|
||
MOVE A14,*A8(OXVEL),L
|
||
MOVE A14,*A8(OYVEL),L
|
||
MOVE A14,*A8(OZVEL),L
|
||
MOVE A14,*A8(OHEADXACCEL),L
|
||
MOVE A14,*A8(OHEADYACCEL),L
|
||
|
||
MOVE *A8(OHFLAGS),A14,W ;SET FLAGS
|
||
ANDNI M_GOHOME,A14
|
||
ORI M_HOME,A14
|
||
MOVE A14,*A8(OHFLAGS),W
|
||
|
||
MOVE @BUG_BODY_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
JRUC BHP_HOME
|
||
|
||
BHP_NEXT1
|
||
BTST B_RANDOM,A11
|
||
JRZ BHP_NEXT2 ;BR=DON'T MOVE RANDOMLY
|
||
|
||
BHP_RANDOM
|
||
MOVE *A8(OHEADXACCEL),A14,L
|
||
JRZ BHP_RESTART ;BR=RESTART RANDOM
|
||
|
||
CALLA RANDOM_HEAD_MOVE ;DO THE RANDOM THING
|
||
JRUC BHP_UPDATEZ
|
||
BHP_RESTART
|
||
MOVI -010000H,A14 ;MOVE HEAD UP
|
||
MOVE A14,*A8(OYVEL),L
|
||
|
||
MOVE *A0(OYVAL),A14,L
|
||
MOVE *A8(OYVAL),A1,L
|
||
SUB A1,A14
|
||
CMPI 0150000H,A14
|
||
JRLT BHP_UPDATEZ ;BR=NOT FAR ENOUGH UP
|
||
|
||
PUSH A0
|
||
CALLA RANDOM_HEAD_MOVE_INIT
|
||
PULLQ A0
|
||
|
||
JRUC BHP_UPDATEZ
|
||
|
||
BHP_NEXT2
|
||
BTST B_ATTACK,A11
|
||
JRZ BHP_NEXT3 ;BR=DON'T ATTACK
|
||
|
||
MOVE *A0(OZVAL),A1,L
|
||
MOVE A1,A2
|
||
MOVE @ZBASE,A14,L
|
||
SUB A14,A2
|
||
CMPI BODY_ZMIN_ATTACK,A2
|
||
JRLT BHP_RANDOM ;BR=TOO CLOSE
|
||
CMPI BODY_ZMAX_ATTACK,A2
|
||
JRGT BHP_RANDOM ;BR=TOO FAR
|
||
|
||
; MOVE *A8(OATTACKTIME),A2,L
|
||
; MOVE @WAVEIRQS,A14,L
|
||
; SUB A2,A14
|
||
; move @ATTACK_WAIT,a2
|
||
; CMP a2,A14
|
||
; JRLE BHP_RANDOM ;BR=TOO EARLY
|
||
|
||
MOVE *A8(OHFLAGS),A14,W
|
||
BTST B_DAMAGE,A14
|
||
JRNZ BHP_DAMAGE ;BR=WE HAVE DAMAGE
|
||
BTST B_GOHOME,A14
|
||
JRNZ BHP_A_GOHOME ;BR=I WANT TO GO HOME
|
||
|
||
; MOVE *A0(OZVAL),A1,L ;DO Z FOR THE HELL OF IT
|
||
SUBI HEAD_ZOFF,A1
|
||
CALLA SET_ANIPZU
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OXVEL),L
|
||
MOVE A14,*A8(OYVEL),L
|
||
MOVE A14,*A8(OZVEL),L
|
||
|
||
MOVI 30,A9 ;ATTACK IN THIS TIME
|
||
|
||
CALLA GET_PLAYER_WORLDX_EXTENTS ;FIND ATTACK X RANGE
|
||
CALLA RANGERND
|
||
MOVE A0,A10 ;WORLD X ATTACK
|
||
|
||
MOVI -0100000H,A11 ;UNIVERSE Y ATTACK
|
||
|
||
SOUND1 SND_NECK_STRETCH_ATTACK
|
||
|
||
BHP_HIT_LUPE
|
||
MOVE @BUG_BODY_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVE @XBASE,A1,L
|
||
ADD A10,A1 ;X DESTINATION
|
||
|
||
MOVE A11,A3 ;Y DESTINATION
|
||
|
||
MOVI ZMAX_REAL,A5
|
||
MOVE @ZBASE,A14,L
|
||
ADD A14,A5 ;Z DESTINATION
|
||
|
||
MOVE *A8(OXVAL),A2,L ;CURRENT POSITION
|
||
MOVE *A8(OYVAL),A4,L
|
||
MOVE *A8(OZVAL),A6,L
|
||
|
||
* A1 = PNT. B X POSITION (32 BITS) *
|
||
* A2 = PNT. A X POSITION (32 BITS) *
|
||
* A3 = PNT. B Y POSITION (32 BITS) *
|
||
* A4 = PNT. A Y POSITION (32 BITS) *
|
||
* A5 = PNT. B Z POSITION (32 BITS) *
|
||
* A6 = PNT. A Z POSITION (32 BITS) *
|
||
* A7 = DURATION(# OF TICKS TO GET FROM A TO B) *
|
||
|
||
MOVE A9,A7
|
||
; CALLA SLINEVEL_LOAD_3D
|
||
CALLA SLINEVEL_3D
|
||
|
||
* A1 = X VEL (32 BITS) *
|
||
* A3 = Y VEL (32 BITS) *
|
||
* A5 = Z VEL (32 BITS) *
|
||
|
||
MOVE A1,*A8(OXVEL),L
|
||
MOVE A3,*A8(OYVEL),L
|
||
MOVE *A0(OZVEL),A14,L
|
||
JRP BHP_SET_ZVEL ;BR=NOT GOING FORWARD
|
||
CMP A14,A5
|
||
JRLE BHP_SET_ZVEL ;BR=GOIN' FAST ENOUGH
|
||
MOVE A14,A5
|
||
BHP_SET_ZVEL
|
||
MOVE A5,*A8(OZVEL),L
|
||
|
||
SLEEP 1
|
||
|
||
MOVE *A8(OHFLAGS),A14,W
|
||
BTST B_BITE,A14
|
||
; JRNZ BHP_A_BITE ;BR=WE BITE
|
||
JRNZ BHP_BITE_NAP ;BR=WE BITE
|
||
BTST B_DAMAGE,A14
|
||
JRNZ BHP_DAMAGE ;BR=WE HAVE DAMAGE
|
||
BTST B_GOHOME,A14
|
||
JRNZ BHP_A_GOHOME ;BR=I WANT TO GO HOME
|
||
|
||
move *a8(OFLAGS),a14 ; no hit if he's offscreen
|
||
btst B_OFSCRN,a14
|
||
jrnz BHP_A_GOHOME
|
||
|
||
DEC A9
|
||
JRNZ BHP_HIT_LUPE ;BR=NOT DONE YET
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OXVEL),L
|
||
MOVE A14,*A8(OYVEL),L
|
||
MOVE A14,*A8(OZVEL),L
|
||
|
||
; MOVE *A8(OFLAGS),A14,W
|
||
; BTST B_ANIM,A14
|
||
; JRNZ BHP_A_NAP
|
||
;
|
||
; MOVI HEAD_BITE_ANIM,A1
|
||
; CALLA STRT_ANIM
|
||
|
||
MOVI [2,0],A5
|
||
ALLPLYR PLAYER_HIT ;HIT 'EM ALL
|
||
|
||
move @ATTACK_WAIT,a14 ; lower ticks to wait between attacks
|
||
subk 2,a14 ; adjust each time bug butts plyr
|
||
jrn BHP0
|
||
move a14,@ATTACK_WAIT
|
||
BHP0:
|
||
|
||
;BHP_A_NAP
|
||
MOVE *A8(OHFLAGS),A14,W
|
||
ORI M_HIT,A14
|
||
MOVE A14,*A8(OHFLAGS),W
|
||
|
||
SOUND1 SND_NECK_STRETCH_ATTACK_HIT
|
||
|
||
MOVI 07979H,A4
|
||
CALLR SET_OCONST
|
||
|
||
MOVK 3,A9
|
||
BHP_HIT_FLASH_LUPE
|
||
CALLR BUG_CONST
|
||
|
||
SLEEP 1
|
||
|
||
MOVE *A8(OHFLAGS),A14,W
|
||
BTST B_BITE,A14
|
||
JRNZ BHP_BITE_NAP ;BR=WE BITE
|
||
|
||
SLEEP 1
|
||
|
||
MOVE *A8(OHFLAGS),A14,W
|
||
BTST B_BITE,A14
|
||
JRNZ BHP_BITE_NAP ;BR=WE BITE
|
||
|
||
SLEEP 1
|
||
|
||
CALLR BUG_ON
|
||
|
||
MOVE *A8(OHFLAGS),A14,W
|
||
BTST B_BITE,A14
|
||
JRNZ BHP_BITE_NAP ;BR=WE BITE
|
||
|
||
SLEEP 1
|
||
|
||
MOVE *A8(OHFLAGS),A14,W
|
||
BTST B_BITE,A14
|
||
JRNZ BHP_BITE_NAP ;BR=WE BITE
|
||
|
||
SLEEP 1
|
||
|
||
MOVE *A8(OHFLAGS),A14,W
|
||
BTST B_BITE,A14
|
||
JRNZ BHP_BITE_NAP ;BR=WE BITE
|
||
|
||
DSJ A9,BHP_HIT_FLASH_LUPE
|
||
|
||
MOVI 0101H,A4
|
||
CALLR SET_OCONST
|
||
|
||
BHP_A_GOHOME
|
||
MOVE *A8(OHFLAGS),A14,W ;SET FLAGS
|
||
ANDNI M_ATTACK|M_HIT,A14
|
||
ORI M_GOHOME,A14
|
||
MOVE A14,*A8(OHFLAGS),W
|
||
|
||
JRUC BHP_GOHOME
|
||
BHP_A_BITE
|
||
MOVE *A8(OHFLAGS),A14,W ;SET FLAGS
|
||
ANDNI M_ATTACK|M_HIT,A14
|
||
MOVE A14,*A8(OHFLAGS),W
|
||
|
||
JRUC BHP_BITE_NAP
|
||
|
||
BHP_NEXT3
|
||
BTST B_DAMAGE,A11
|
||
JRZ BHP_NEXT4 ;BR=DON'T DAMAGE
|
||
BHP_DAMAGE
|
||
CLR A14 ;STOP!
|
||
MOVE A14,*A8(OXVEL),L
|
||
MOVE A14,*A8(OYVEL),L
|
||
MOVE A14,*A8(OZVEL),L
|
||
|
||
|
||
MOVE *A8(OHFLAGS),A14,W ;SET FLAGS
|
||
ANDNI M_DAMAGE,A14
|
||
ORI M_GOHOME,A14
|
||
MOVE A14,*A8(OHFLAGS),W
|
||
|
||
JRUC BHP_GOHOME
|
||
|
||
|
||
MOVI 15,A9 ;DAMAGE IN THIS TIME
|
||
|
||
BHP_DAMAGE_LUPE
|
||
|
||
MOVE @BUG_BODY_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVE *A0(OZVAL),A5,L
|
||
SUBI HEAD_ZOFF+0100H,A5 ;Z DESTINATION
|
||
|
||
MOVE *A8(OXVAL),A2,L ;CURRENT POSITION
|
||
MOVE A2,A1
|
||
MOVE *A8(OYVAL),A4,L
|
||
MOVE A4,A3
|
||
MOVE *A8(OZVAL),A6,L
|
||
|
||
* A1 = PNT. B X POSITION (32 BITS) *
|
||
* A2 = PNT. A X POSITION (32 BITS) *
|
||
* A3 = PNT. B Y POSITION (32 BITS) *
|
||
* A4 = PNT. A Y POSITION (32 BITS) *
|
||
* A5 = PNT. B Z POSITION (32 BITS) *
|
||
* A6 = PNT. A Z POSITION (32 BITS) *
|
||
* A7 = DURATION(# OF TICKS TO GET FROM A TO B) *
|
||
|
||
MOVE A9,A7
|
||
CALLA SLINEVEL_LOAD_3D
|
||
|
||
; MOVE *A0(OZVEL),A1,L
|
||
; MOVE *A8(OZVEL),A14,L
|
||
; CMP A1,A14
|
||
; JRLE BHP_D_NAP
|
||
; MOVE A1,*A8(OZVEL),L
|
||
;BHP_D_NAP
|
||
SLEEP 1
|
||
|
||
DEC A9
|
||
JRNZ BHP_DAMAGE_LUPE ;BR=NOT DONE YET
|
||
|
||
MOVE *A8(OHFLAGS),A14,W ;SET FLAGS
|
||
ANDNI M_DAMAGE,A14
|
||
ORI M_GOHOME,A14
|
||
MOVE A14,*A8(OHFLAGS),W
|
||
|
||
JRUC BHP_GOHOME
|
||
|
||
BHP_NEXT4
|
||
JRUC BHP_NAP
|
||
|
||
BHP_BITE_NAP
|
||
MOVE @BUG_BODY_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVE *A0(OZVEL),*A8(OZVEL),L ;USE SAME VELOCITY
|
||
JRUC BHP_NAP
|
||
BHP_UPDATEZ
|
||
MOVE *A0(OZVAL),A1,L ;SET Z
|
||
SUBI HEAD_ZOFF,A1
|
||
; MOVE A1,*A8(OZVAL),L
|
||
CALLA SET_ANIPZU
|
||
BHP_ZVEL
|
||
MOVE *A0(OZVEL),*A8(OZVEL),L ;USE SAME VELOCITY
|
||
BHP_NAP
|
||
SLEEP 1
|
||
|
||
JRUC BUG_HEAD_PROC
|
||
|
||
**************************************************************************
|
||
* *
|
||
* RANDOM_HEAD_MOVE_INIT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
RANDOM_HEAD_MOVE_INIT
|
||
MOVI 0800H,A1
|
||
MOVI -014000H,A2
|
||
MOVI 512,A0
|
||
CALLA RANDPER
|
||
JRC RHMI_SET_X
|
||
NEG A1
|
||
NEG A2
|
||
RHMI_SET_X
|
||
MOVE A1,*A8(OHEADXACCEL),L
|
||
MOVE A2,*A8(OXVEL),L
|
||
|
||
MOVI 0800H,A1
|
||
MOVI -010000H,A2
|
||
MOVI 512,A0
|
||
CALLA RANDPER
|
||
JRC RHMI_SET_Y
|
||
NEG A1
|
||
NEG A2
|
||
RHMI_SET_Y
|
||
MOVE A1,*A8(OHEADYACCEL),L
|
||
MOVE A2,*A8(OYVEL),L
|
||
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* RANDOM_HEAD_MOVE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
RANDOM_HEAD_MOVE
|
||
move *A8(OHEADXACCEL),A14,W
|
||
JRZ RHM_DO_Y ;BR=DON'T HOVER IN X
|
||
move *A8(OXVEL),A3,L
|
||
add A14,A3
|
||
move A3,*A8(OXVEL),L
|
||
abs A3
|
||
CMPI 014000H,A3
|
||
jrlt RHM_DO_Y ;BR=UNDER THE LIMIT
|
||
NEGM *A8(OHEADXACCEL),W ;CHANGE DIRECTION
|
||
RHM_DO_Y
|
||
move *A8(OHEADYACCEL),A14,W
|
||
JRZ RHM_DONE ;BR=DON'T HOVER IN Y
|
||
move *A8(OYVEL),A3,L
|
||
add A14,A3
|
||
move A3,*A8(OYVEL),L
|
||
abs A3
|
||
CMPI 010000H,A3
|
||
jrlt RHM_DONE ;BR=UNDER THE LIMIT
|
||
NEGM *A8(OHEADYACCEL),W ;CHANGE DIRECTION
|
||
RHM_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUG_NECK_PROC *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BUG_NECK_PROC
|
||
MOVE @BUG_HEAD_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
MOVE *A0(OHFLAGS),A6,W
|
||
BTST B_PULL,A6
|
||
JRNZ BNP_NAP
|
||
|
||
MOVK NUM_NECK_SEGS,A7
|
||
|
||
MOVE @BUG_BODY_OBJ,A10,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVI BUG_NECK_OBJ_TABLE,A11
|
||
BNP_LUPE
|
||
MOVE *A11+,A9,L
|
||
MOVE *A9,A8,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVK 020H,A14
|
||
CMPK NUM_NECK_SEGS/2+1,A7
|
||
JRLE BNP_GET
|
||
|
||
MOVE A9,A14
|
||
CMPI BUG_NECK_OBJS+((NUM_NECK_SEGS/2) << 5),A9
|
||
JRLE BNP_FIRST_HALF
|
||
SUBI BUG_NECK_OBJS+((NUM_NECK_SEGS/2) << 5),A14
|
||
JRUC BNP_GET
|
||
BNP_FIRST_HALF
|
||
SUBI BUG_HEAD_OBJ,A14
|
||
BNP_GET
|
||
MOVE A9,A0
|
||
SUB A14,A0
|
||
MOVE *A0,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVE A9,A2
|
||
ADD A14,A2
|
||
MOVE *A2,A2,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVE *A0(OZVAL),A1,L
|
||
MOVE *A2(OZVAL),A3,L
|
||
SUB A1,A3
|
||
SRA 1,A3
|
||
ADD A3,A1
|
||
; MOVE A1,*A8(OZVAL),L
|
||
CALLA SET_ANIPZU
|
||
|
||
MOVE *A10(OZVEL),*A8(OZVEL),L
|
||
|
||
BTST B_SORTED,A6
|
||
JRZ BNP_DSJ ;BR=DON'T SORT
|
||
CALLA SORT_OBJ
|
||
BNP_DSJ
|
||
DSJ A7,BNP_LUPE
|
||
|
||
MOVK NUM_NECK_SEGS,A7
|
||
|
||
MOVI BUG_NECK_OBJS,A9
|
||
|
||
CLR B0
|
||
MOVE @BUG_HEAD_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
MOVE *A0(OHFLAGS),A14,W
|
||
BTST B_HOME,A14
|
||
JRZ BNP_LUPE2
|
||
MOVK 1,B0
|
||
MOVE @BUG_BODY_OBJ,A14,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
MOVE *A14(OXVAL),A10,L
|
||
MOVE *A14(OYVAL),A11,L
|
||
BNP_LUPE2
|
||
MOVE *A9,A8,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVE A9,A0
|
||
SUBK 020H,A0
|
||
|
||
MOVE *A0,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVE A9,A1
|
||
ADDK 020H,A1
|
||
MOVE *A1,A1,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
ADDK 020H,A9
|
||
|
||
MOVE B0,B0
|
||
JRZ BNP_GET_TIME
|
||
|
||
; MOVE A10,*A8(OXVAL),L
|
||
; MOVE A11,*A8(OYVAL),L
|
||
MOVE A10,A1
|
||
MOVE A11,A2
|
||
MOVE *A8(OZVAL),A3,L
|
||
CALLA SET_ANIPU
|
||
CLR A2
|
||
JRUC BNP_NEXT
|
||
|
||
BNP_GET_TIME
|
||
MOVE *A8(OUPDATETIME),A2,L
|
||
MOVE A2,A3
|
||
SEXT A3,W
|
||
SRA 16,A2
|
||
JRNZ BNP_COUNT
|
||
|
||
MOVE A3,B14
|
||
|
||
MOVE *A0(OYVAL),A2,L
|
||
MOVE *A1(OYVAL),A3,L
|
||
MOVE *A0(OXVAL),A5,L
|
||
MOVE *A1(OXVAL),A6,L
|
||
|
||
MOVE A8,A14
|
||
ADDI ONECKX1+020H,A14
|
||
MMTM A14,A2,A3,A5,A6
|
||
|
||
MOVE B14,A3
|
||
CLR A2
|
||
|
||
BNP_COUNT
|
||
INC A2
|
||
CMP A3,A2
|
||
JRLT BNP_NEXT
|
||
|
||
MOVE A8,A14
|
||
ADDI ONECKY0,A14
|
||
MMFM A14,A2,A3,A5,A6
|
||
BNP_UPDATE_XY
|
||
SUB A2,A3
|
||
SRA 1,A3
|
||
ADD A3,A2
|
||
; MOVE A2,*A8(OYVAL),L
|
||
|
||
SUB A5,A6
|
||
SRA 1,A6
|
||
ADD A6,A5
|
||
; MOVE A5,*A8(OXVAL),L
|
||
|
||
MOVE A5,A1
|
||
MOVE *A8(OZVAL),A3,L
|
||
CALLA SET_ANIPU
|
||
|
||
CLR A2
|
||
BNP_NEXT
|
||
MOVE A2,*A8(OUPDATECOUNT),W
|
||
DSJ A7,BNP_LUPE2
|
||
BNP_NAP
|
||
SLEEP 1
|
||
|
||
JRUC BUG_NECK_PROC
|
||
|
||
BUG_NECK_OBJ_TABLE
|
||
.LONG BUG_NECK_OBJS+060H,BUG_NECK_OBJS+020H,BUG_NECK_OBJS+0A0H
|
||
.LONG BUG_NECK_OBJS,BUG_NECK_OBJS+040H,BUG_NECK_OBJS+080H
|
||
.LONG BUG_NECK_OBJS+0C0H
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_NECK *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_NECK
|
||
; CALLA SORT_OBJ
|
||
|
||
MOVE *A8(OBFLAGS),A9,W
|
||
BTST B_NOMOVEZ,A9
|
||
JRNZ AN_DONE ;BR=DON'T MOVE IN Z
|
||
|
||
MOVE @BUG_HEAD_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVE *A0(OHFLAGS),A14,W
|
||
BTST B_BITE,A14
|
||
JRZ AN_GO ;BR=WE'RE BITING
|
||
AN_BITE
|
||
MOVE @ZSCROLL,A14,L
|
||
SRA ZFRAC,A14 ;TO LO-RES
|
||
MOVE A14,*A8(OLASTZSCROLL),L
|
||
MOVE A14,*A8(OZVEL),L
|
||
RETS
|
||
AN_GO
|
||
|
||
; MOVE @XSCROLL,A14,L
|
||
; MOVE A14,*A8(OXVEL),L
|
||
|
||
MOVE *A8(OLASTZSCROLL),A2,L
|
||
MOVE *A8(OZVEL),A0,L
|
||
SUB A2,A0
|
||
MOVE @MAX_BUG_VEL,A14
|
||
CMP A14,A0
|
||
JRGT AN_ACCEL ;BR=ACCELERATE FORWARD
|
||
; JREQ AN_CHECK
|
||
MOVE A14,A0 ;MAXIMUM FORWARD VELOCITY
|
||
AN_CHECK
|
||
MOVE *A8(OZVAL),A1,L
|
||
|
||
MOVE *A8(OZFARTHEST),A14,L
|
||
CMP A14,A1
|
||
JRLT AN_CHECK_HIT ;BR=NOT AT FARTHEST Z
|
||
MOVE A0,A0
|
||
JRN AN_SET ;BR=GOING FORWARD
|
||
CLR A0 ;STOP GOING BACKWARD
|
||
JRUC AN_SET
|
||
AN_CHECK_HIT
|
||
MOVE @ZBASE,A14,L
|
||
SUB A14,A1
|
||
|
||
move @ZCLOSEST_WORLD,a14,L
|
||
CMP a14,A1
|
||
JRGT AN_SET ;BR=NOT CLOSE ENOUGH YET
|
||
|
||
MOVE A0,A0
|
||
JRP AN_DONE ;BR=GOING BACKWARD
|
||
|
||
BTST B_NOBITE,A9
|
||
JRZ AN_START_BITE ;BR=WE BITE
|
||
|
||
ADDI ROCKET_HIT_VEL,A0 ;PUSH BACK ALOT
|
||
JRUC AN_SET
|
||
AN_START_BITE
|
||
MOVE @BUG_HEAD_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
; MOVE *A0(OBFLAGS),A14,W
|
||
; BTST B_HIT,A14
|
||
; JRNZ $
|
||
|
||
MOVI M_BITE,A14
|
||
MOVE A14,*A0(OHFLAGS),W
|
||
|
||
CLR A14
|
||
MOVE A14,*A0(OXVEL),L
|
||
MOVE A14,*A0(OYVEL),L
|
||
MOVE A14,*A0(OZVEL),L
|
||
|
||
MOVI HEAD_BITE_ANIM,A1
|
||
CALLA STRTANIM
|
||
|
||
JRUC AN_BITE
|
||
|
||
; MOVI [1,0],A5
|
||
; ALLPLYR PLAYER_HIT ;HIT 'EM ALL
|
||
;
|
||
; ADDI ROCKET_HIT_VEL*2,A0
|
||
AN_SET
|
||
MOVE @ZSCROLL,A2,L
|
||
SRA ZFRAC,A2 ;TO LO-RES
|
||
MOVE A2,*A8(OLASTZSCROLL),L
|
||
ADD A2,A0 ;TRANSLATE TO UNIVERSE
|
||
MOVE A0,*A8(OZVEL),L
|
||
AN_DONE
|
||
RETS
|
||
AN_ACCEL
|
||
MOVE A0,A0
|
||
JRNN AN_CHARGE ;BR=NOT RECOVERING FROM A PUSH
|
||
MOVE *A8(ORECOVERVEL),A14,W
|
||
SUB A14,A0 ;ACCELERATE FORWARD
|
||
JRUC AN_CHECK
|
||
AN_CHARGE
|
||
MOVE *A8(OCHARGEVEL),A14,W
|
||
SUB A14,A0 ;ACCELERATE FORWARD
|
||
JRUC AN_CHECK
|
||
|
||
;**************************************************************************
|
||
;* *
|
||
;* A_SET_LEGS_SLEEP *
|
||
;* *
|
||
;**************************************************************************
|
||
;
|
||
;A_SET_LEGS_SLEEP
|
||
;
|
||
; RETS
|
||
;
|
||
; CALLA GET_HEAD_PART_A0
|
||
; MOVE *A0(OZVEL),A3,L
|
||
; ABS A3
|
||
; SRL 4,A3
|
||
;; CMPK 48,A3
|
||
; CMPK 26,A3
|
||
; JRLT ASLS_GO
|
||
; MOVK 1,A3
|
||
; JRUC ASLS_SET
|
||
;ASLS_GO
|
||
; SLL 3,A3
|
||
; ADDI LEGS_SLEEP_TABLE,A3
|
||
; MOVB *A3,A3
|
||
;ASLS_SET
|
||
; MOVI LEG_PARTS,A1
|
||
; CALLA FINDPART
|
||
; MOVB A3,*A0(AnimSlp)
|
||
; RETS
|
||
;
|
||
;A_SET_LEGS_SLEEP_R
|
||
; CALLR A_SET_LEGS_SLEEP
|
||
; CALLA GETAFARG_LONG
|
||
; JUMP A0
|
||
;
|
||
;LEGS_SLEEP_TABLE
|
||
; .BYTE 10,10,9,9
|
||
; .BYTE 9,9,9,8
|
||
; .BYTE 8,8,8,7
|
||
; .BYTE 7,7,6,6
|
||
;
|
||
; .BYTE 5,4,4,3
|
||
; .BYTE 3,3,2,2
|
||
; .BYTE 2,2,1,1
|
||
; .BYTE 1,1,1,1
|
||
;
|
||
; .BYTE 1,1,1,1
|
||
; .BYTE 1,1,1,1
|
||
; .BYTE 1,1,1,1
|
||
; .BYTE 1,1,1,1
|
||
;
|
||
; .LONG 1
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_LEGS_STOP - CHECK IF LEG SHOULD STOP MOVING *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_CHECK_LEGS_STOP
|
||
CALLA GET_HEAD_PART_A0
|
||
MOVE *A0(OBFLAGS),A14,W
|
||
BTST B_STOPLEGS,A14
|
||
JANZ PULL_ANIM ;BR=STOP DA LEG
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_LEG_SOUND - MAKE A RANDOM LEG SOUND *
|
||
* *
|
||
* PASS: *
|
||
* NUTIN' *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_LEG_SOUND
|
||
RANDENT LEGSND_TABLE,4,5,L
|
||
CALLA ONESND
|
||
; SOUND1 SND_LEG_1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUG_SCREAM - RELEASE A BUG SCREAM *
|
||
* *
|
||
* PASS: *
|
||
* NUTIN' *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BUG_SCREAM
|
||
RANDENT SCREAM_TABLE,6,5,L
|
||
CALLA ONESND
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PUSH_BUG - PUSH BUG BACK *
|
||
* *
|
||
* PASS: *
|
||
* A1 = PUSH VELOCITY TABLE *
|
||
* RETURN: *
|
||
* Z SET IF PUSH ALLOWED, ELSE Z CLR IF NOT ALLOWED *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PUSH_BUG
|
||
MOVE @CURPLYRS,A14,W ;GET NUMBER OF CURRENT PLAYERS
|
||
DEC A14
|
||
JRNN PUB_GET
|
||
CLR A14
|
||
PUB_GET
|
||
SLL 4,A14 ;TRANSLATE TO TABLE OFFSET
|
||
ADD A1,A14 ;OFFSET TABLE
|
||
MOVE *A14,A1,W ;GET PUSH VELOCITY
|
||
|
||
MOVE @BUG_BODY_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVE *A0(OBFLAGS),A14,W
|
||
BTST B_NOPUSH,A14
|
||
JRNZ PUB_NOPUSH ;BR=NO PUSHING ALLOWED
|
||
|
||
MOVE *A0(OZVAL),A3,L
|
||
MOVE *A0(OZFARTHEST),A14,L
|
||
CMP A14,A3
|
||
JRGE PUB_DONE ;BR=NOT AT FARTHEST Z
|
||
|
||
MOVE *A0(OZVEL),A14,L
|
||
MOVE @ZSCROLL,A4,L
|
||
SRA ZFRAC,A4 ;TO LO-RES
|
||
SUB A4,A14 ;TRANSLATE TO WORLD
|
||
|
||
ADD A1,A14
|
||
MOVI MAX_REVERSE_BUG_VEL,A3
|
||
CMP A3,A14
|
||
JRLE PUB_SET ;BR=NOT AT MAXIMUM REVERSE
|
||
MOVE A3,A14 ;MAXIMUM REVERSE
|
||
PUB_SET
|
||
ADD A4,A14 ;TRANSLATE TO UNIVERSE
|
||
MOVE A14,*A0(OZVEL),L
|
||
PUB_DONE
|
||
SETZ
|
||
PUB_NOPUSH
|
||
RETS
|
||
|
||
GUN_HIT_VEL_TABLE
|
||
.WORD GUN_HIT_VEL, GUN_HIT_VEL/2, GUN_HIT_VEL/3
|
||
|
||
ROCKET_HIT_VEL_TABLE
|
||
.WORD ROCKET_HIT_VEL, ROCKET_HIT_VEL/2, ROCKET_HIT_VEL/3
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUG HEAD COLLISION VECTORS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BUG_HEAD_CVECT
|
||
WWL OID_PROCKET,~MASK_PLAYER,BUG_ROCKET_COLL
|
||
WWL OID_PEXPLOSION,~MASK_PLAYER,BUG_HEAD_EXPLOSION_COLL
|
||
WL 0,DUMCRETS
|
||
|
||
BUG_HEAD_EXPLOSION_COLL
|
||
MOVE *A8(OATE_ROCKET),A14,L
|
||
JRZ BEC_DONE ;BR=NO ROCKET COLLISION
|
||
CMP A0,A14
|
||
JRNE BEC_DONE ;BR=DIFFERENT EXPLOSION
|
||
|
||
MOVE *A0(RL_INTENDED_OBJ),A14,L ;DO WE HAVE THE RIGHT TARGET?
|
||
CMP A8,A14
|
||
JRNE BEC_DONE ;BR=NOPE. NOT THE RIGHT TARGET.
|
||
|
||
CLRM *A8(OATE_ROCKET),L ;HIT! READY FOR ANOTHER!
|
||
|
||
SOUND1 SND_ROCKET_HIT
|
||
|
||
CALLA GET_HEAD_PART
|
||
|
||
MOVE *A8(OHFLAGS),A14,W
|
||
BTST B_HIT,A14
|
||
JRNZ BHEC_DONE ;BR=WE'RE HITING DA PLAYERS
|
||
BTST B_BITE,A14
|
||
JRNZ BHEC_DONE ;BR=WE'RE BITING DA PLAYERS
|
||
BTST B_ATTACK,A14
|
||
JRZ BHEC_PUSH ;BR=NOT ATTACKING
|
||
BHEC_DAMAGE
|
||
MOVK M_DAMAGE,A14
|
||
MOVE A14,*A8(OHFLAGS),W ;FLAG HEAD DAMAGE
|
||
JRUC BHEC_SCREAM
|
||
BHEC_PUSH
|
||
move @ATTACK_WAIT,a14 ; delay attacks a bit
|
||
addk 8,a14
|
||
move a14,@ATTACK_WAIT
|
||
|
||
MOVI ROCKET_HIT_VEL_TABLE,A1
|
||
CALLR PUSH_BUG
|
||
JRNZ BHG_FLASH ;BR=NO PUSHING ALLOWED
|
||
BHEC_SCREAM
|
||
; MOVE *A8(OHFLAGS),A14,W
|
||
; BTST B_ATTACK,A14
|
||
; JRNZ BHEC_FLASH
|
||
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_ANIM,A14
|
||
JRNZ BHEC_FLASH ;BR=WE'RE ALREADY ANIMATING
|
||
MOVI HEAD_SCREAM_ANIM,A1
|
||
CALLA STRT_ANIM
|
||
BHEC_FLASH
|
||
JRUC BHG_FLASH
|
||
BHEC_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUG HEAD GUN VECTORS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BUG_HEAD_GUNVECT
|
||
SOUND1 SND_GUN_HIT
|
||
|
||
CALLA GET_HEAD_PART
|
||
|
||
MOVE *A8(OHFLAGS),A14,W
|
||
BTST B_HIT,A14
|
||
JRNZ BHG_DONE ;BR=WE'RE HITING DA PLAYERS
|
||
BTST B_BITE,A14
|
||
JRNZ BHG_DONE ;BR=WE'RE BITING DA PLAYERS
|
||
BTST B_ATTACK,A14
|
||
JRZ BHG_PUSH ;BR=NOT ATTACKING
|
||
|
||
MOVE *A8(OLASTHITTIME),A1,L
|
||
MOVE @WAVEIRQS,A14,L
|
||
MOVE A14,*A8(OLASTHITTIME),L
|
||
SUB A1,A14
|
||
CMPI MIN_HEAD_HIT_TIME,A14
|
||
JRLT BHG_GO ;BR=UNDER MINIMUM TIME
|
||
CLR A14
|
||
MOVE A14,*A8(OHITS),L
|
||
JRUC BHG_FLASH
|
||
BHG_GO
|
||
MOVK PULL_HEAD_HITS,A0
|
||
calla CURPLYR_ADJ
|
||
move a0,a1
|
||
MOVI OHITS,A3
|
||
CALLA HIT_ENEMY
|
||
JRLT BHG_FLASH ;BR=DON'T PULL BACK DA HEAD
|
||
JRUC BHEC_DAMAGE ;PULL BACK DA HEAD
|
||
BHG_PUSH
|
||
MOVI GUN_HIT_VEL_TABLE,A1
|
||
CALLR PUSH_BUG
|
||
BHG_FLASH
|
||
CALLA UNIV_FLASH ;FLASH RIGHT HALF
|
||
MOVE *A8(OPARTS),A8,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
CALLA UNIV_FLASH ;FLASH LEFT HALF
|
||
BHG_DONE
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUG BODY COLLISION VECTORS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BUG_CVECT
|
||
WWL OID_PROCKET,~MASK_PLAYER,BUG_ROCKET_COLL
|
||
WWL OID_PEXPLOSION,~MASK_PLAYER,BUG_EXPLOSION_COLL
|
||
WWL OID_GRND,0FFFFH,BUG_GROUND_COLL
|
||
WL 0,DUMCRETS
|
||
|
||
BUG_GROUND_COLL
|
||
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
|
||
|
||
BUG_ROCKET_COLL
|
||
MOVE A0,*A8(OATE_ROCKET),L ;SAVE ROCKET OBJECT
|
||
RETS
|
||
|
||
BUG_EXPLOSION_COLL
|
||
MOVE *A8(OATE_ROCKET),A14,L
|
||
JRZ BEC_DONE ;BR=NO ROCKET COLLISION
|
||
CMP A0,A14
|
||
JRNE BEC_DONE ;BR=DIFFERENT EXPLOSION
|
||
|
||
MOVE *A0(RL_INTENDED_OBJ),A14,L ;DO WE HAVE THE RIGHT TARGET?
|
||
CMP A8,A14
|
||
JRNE BEC_DONE ;BR=NOPE. NOT THE RIGHT TARGET.
|
||
|
||
CLRM *A8(OATE_ROCKET),L ;HIT! READY FOR ANOTHER!
|
||
|
||
SOUND1 SND_ROCKET_HIT
|
||
|
||
CALLA GET_HEAD_PART_A0
|
||
|
||
MOVI ROCKET_HIT_VEL_TABLE,A1
|
||
CALLR PUSH_BUG
|
||
|
||
JRUC FLASH_BUG_PART
|
||
|
||
BEC_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUG GUN VECTORS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BUG_GUNVECT
|
||
SOUND1 SND_GUN_HIT
|
||
MOVI GUN_HIT_VEL_TABLE,A1
|
||
CALLR PUSH_BUG
|
||
JRUC FLASH_BUG_PART
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FLASH_BUG_PART *
|
||
* *
|
||
**************************************************************************
|
||
|
||
FLASH_BUG_PART
|
||
CALLA UNIV_FLASH
|
||
|
||
MOVB *A8(OPARTID),A1
|
||
CMPK NECK_SEG,A1
|
||
JREQ FBP_DONE ;BR=DON'T FLASH NO OTHER HALF
|
||
|
||
ADDK 1,A1
|
||
BTST 0,A1
|
||
JRNZ FBP_GO ;FLASH 2ND HALF
|
||
SUBK 2,A1 ;FLASH 1ST HALF
|
||
FBP_GO
|
||
CALLA FINDPART
|
||
MOVE A0,A8
|
||
CALLA UNIV_FLASH
|
||
FBP_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SPRING_BODY - MOVE BUG BODY FOR LEAP *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* AARG+,W = SPRING Y OFFSET IN PIXELS *
|
||
* *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_SPRING_BODY
|
||
CALLA GETAFARG_WORD
|
||
SLL 15,A0 ;TRANSLATE TO WORLD
|
||
|
||
MOVE @BUG_BODY_OBJ,A8,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVE *A8(OZVAL),A1,L
|
||
MOVE *A8(OYVAL),A2,L
|
||
ADD A0,A2 ;OFFSET Y POSITION
|
||
MOVE *A8(OXVAL),A3,L
|
||
CALLA REPOS_OBJ
|
||
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_FLAG_LEAP - TELL BUG BODY WE CAN TAKE OFF NOW *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_FLAG_LEAP
|
||
MOVE @BUG_BODY_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVE *A0(OFLAGS),A14,W
|
||
ORI M_GCOLL,A14 ;FLAG
|
||
MOVE A14,*A0(OFLAGS),W
|
||
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_END_BITE - END BITE SEQUENCE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_END_BITE
|
||
MOVI 0101H,A4
|
||
CALLR SET_OCONST
|
||
|
||
; MOVE *A8(OHFLAGS),A14,W
|
||
; ANDNI M_BITE,A14
|
||
MOVK M_GOHOME,A14 ;GO HOME
|
||
MOVE A14,*A8(OHFLAGS),W
|
||
|
||
MOVE @BUG_BODY_OBJ,A0,L
|
||
.if DEBUG
|
||
JRZ $
|
||
.endif
|
||
|
||
MOVE *A0(OZVEL),A14,L
|
||
ADDI ROCKET_HIT_VEL,A14 ;PUSH BACK ALOT
|
||
MOVE A14,*A0(OZVEL),L
|
||
|
||
JAUC PULL_ANIM
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_ALLPLYR_HIT - HIT ALL DA PLAYERS *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* AARG+,L = [INT,FRAC] ENERGY POINTS TO SUBTRACT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
;A_ALLPLYR_HIT
|
||
; CALLA GETAFARG_LONG
|
||
; MOVE A0,A5
|
||
; ALLPLYR PLAYER_HIT ;HIT 'EM ALL
|
||
; RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_BITE - DO THE BITE THANG *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_BITE
|
||
MOVI 07979H,A4
|
||
CALLR SET_OCONST
|
||
|
||
MOVK 6,A14 ;NUMBER OF FLASH CYCLES
|
||
MOVB A14,*A8(AnimLoop)
|
||
|
||
move *a8(OFLAGS),a14 ; no hit if he's offscreen
|
||
btst B_OFSCRN,a14
|
||
jrnz AB1
|
||
|
||
ADJUST ADJENERGY ;GET AMOUNT OF ENERGY FROM CMOS
|
||
SLL 16-2,A0
|
||
MOVE A0,A5
|
||
ALLPLYR PLAYER_HIT ;HIT 'EM ALL
|
||
|
||
move @ATTACK_WAIT,a14 ; lower ticks to wait between attacks
|
||
subk 2,a14 ; adjust each time bug goes off
|
||
jrn AB0
|
||
move a14,@ATTACK_WAIT
|
||
AB0:
|
||
|
||
SOUND1 SND_BITE
|
||
AB1:
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* C_PAL_AND_OFFSET_Z *
|
||
* *
|
||
* CHANGE PALETTE OFFSET Z POSITION. *
|
||
* *
|
||
* REQUIRES: *
|
||
* *
|
||
* .LONG PALETTE *
|
||
* .LONG Z WORLD OFFSET *
|
||
* *
|
||
**************************************************************************
|
||
|
||
C_PAL_AND_OFFSET_Z
|
||
MOVE A0,A1
|
||
|
||
MOVE A0,A8
|
||
MOVE *B0+,B14,L
|
||
MOVE B14,A0
|
||
CALLA CHANGE_PAL
|
||
|
||
MOVE A1,A0
|
||
|
||
JRUC C_OFFSET_Z
|
||
|
||
**************************************************************************
|
||
* *
|
||
* C_OFFSET_Z *
|
||
* *
|
||
* OFFSET Z POSITION. *
|
||
* *
|
||
* REQUIRES: *
|
||
* *
|
||
* .LONG Z WORLD OFFSET *
|
||
* *
|
||
**************************************************************************
|
||
|
||
C_OFFSET_Z
|
||
MOVE *B0+,B14,L
|
||
MOVE B14,A14
|
||
MOVE *A0(OZVAL),A1,L
|
||
ADD A14,A1
|
||
MOVE A1,*A0(OZVAL),L
|
||
RETS
|
||
|
||
BUG_HEAD_INIT
|
||
.byte 2, 0, 0, 1 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long P_BUGHEAD ;IMGPAL
|
||
|
||
.word OID_BOSSBUG, OM_COLL ;OID, GLOBAL_OPTIONS
|
||
.LONG BUG_HEAD_CVECT
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF
|
||
* .word OPTIONS
|
||
LWWWW BITE1, DMAWNZ, 0, 0, OM_GUNV
|
||
.long BUG_HEAD_GUNVECT
|
||
LWWWW BITE1, DMAWNZ|M_FLIPH, 0, 1, OM_GUNV
|
||
.long BUG_HEAD_GUNVECT
|
||
|
||
BUG_NECK_INIT
|
||
.byte 1, 0, 0, 1 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long P_NECK ;IMGPAL
|
||
|
||
.word OID_BOSSBUG, OM_COLL ;OID, GLOBAL_OPTIONS
|
||
.LONG BUG_CVECT
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF
|
||
* .word OPTIONS
|
||
LWWWW NECK1, DMAWNZ, 0, 0, OM_GUNV
|
||
.long BUG_GUNVECT
|
||
|
||
BUG_BODY_INIT
|
||
.byte 17, 0, 0, 4 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long P_NECK ;IMGPAL
|
||
.long P_MIDBOD ;IMGPAL
|
||
.long P_BUTT ;IMGPAL
|
||
.long P_FRNTWLK ;IMGPAL
|
||
|
||
.word OID_BOSSBUG, OM_DUMCOLL ;OID, GLOBAL_OPTIONS
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF
|
||
* .word OPTIONS
|
||
LWWWW NECK1, DMAWNZ, 0, 0, OM_OPARTS|OM_COLL|OM_GUNV ;|OM_ANIM
|
||
.LONG [15,0]
|
||
.LONG BUG_CVECT
|
||
.LONG BUG_GUNVECT
|
||
; .LONG NECK_ANIM
|
||
LWWWW BUTT1, DMAWNZ, 0, 0, OM_OPARTS|OM_COLL|OM_PRVGUNV|OM_CFUNC
|
||
.LONG [0,0]
|
||
.LONG BUG_CVECT
|
||
.LONG C_OFFSET_Z
|
||
.LONG BUTT_ZOFF
|
||
LWWWW BUTT1, DMAWNZ|M_FLIPH, 0, 0, OM_OPARTS|OM_COLL|OM_PRVGUNV|OM_CFUNC
|
||
.LONG [0,1]
|
||
.LONG BUG_CVECT
|
||
.LONG C_OFFSET_Z
|
||
.LONG BUTT_ZOFF
|
||
LWWWW MIDBOD1, DMAWNZ, 0, 1, OM_OPARTS|OM_COLL|OM_PRVGUNV
|
||
.LONG [0,0]
|
||
.LONG BUG_CVECT
|
||
LWWWW MIDBOD1, DMAWNZ|M_FLIPH, 0, 1, OM_OPARTS|OM_COLL|OM_PRVGUNV
|
||
.LONG [0,1]
|
||
.LONG BUG_CVECT
|
||
|
||
; LWWWW FRONTWK1, DMAWNZ, 0, 1, OM_GUNV
|
||
; .LONG DUMRETS
|
||
LWWWW FRONTWK1, DMAWNZ, 0, 1, OM_PRVGUNV
|
||
LWWWW FRONTWK1A, DMAWNZ, 0, 1, OM_PRVGUNV
|
||
|
||
LWWWW FRONTWK1, DMAWNZ|M_FLIPH, 0, 1, OM_PRVGUNV
|
||
LWWWW FRONTWK1A, DMAWNZ|M_FLIPH, 0, 1, OM_PRVGUNV
|
||
|
||
LWWWW FRONTWK1, DMAWNZ, 0, 0, OM_PRVGUNV|OM_CFUNC
|
||
.LONG C_PAL_AND_OFFSET_Z
|
||
.LONG DARK_LEG
|
||
.LONG LEGS_2ND_ZOFF
|
||
LWWWW FRONTWK1A, DMAWNZ, 0, 0, OM_PRVGUNV|OM_CFUNC
|
||
.LONG C_PAL_AND_OFFSET_Z
|
||
.LONG DARK_LEG
|
||
.LONG LEGS_2ND_ZOFF
|
||
|
||
LWWWW FRONTWK1, DMAWNZ|M_FLIPH, 0, 0, OM_PRVGUNV|OM_CFUNC
|
||
.LONG C_PAL_AND_OFFSET_Z
|
||
.LONG DARK_LEG
|
||
.LONG LEGS_2ND_ZOFF
|
||
LWWWW FRONTWK1A, DMAWNZ|M_FLIPH, 0, 0, OM_PRVGUNV|OM_CFUNC
|
||
.LONG C_PAL_AND_OFFSET_Z
|
||
.LONG DARK_LEG
|
||
.LONG LEGS_2ND_ZOFF
|
||
|
||
LWWWW FRONTWK1, DMAWNZ, 0, 0, OM_PRVGUNV|OM_CFUNC
|
||
.LONG C_PAL_AND_OFFSET_Z
|
||
.LONG DARKER_LEG
|
||
.LONG BUTT_ZOFF+1
|
||
LWWWW FRONTWK1A, DMAWNZ, 0, 0, OM_PRVGUNV|OM_CFUNC
|
||
.LONG C_PAL_AND_OFFSET_Z
|
||
.LONG DARKER_LEG
|
||
.LONG BUTT_ZOFF+1
|
||
|
||
LWWWW FRONTWK1, DMAWNZ|M_FLIPH, 0, 0, OM_PRVGUNV|OM_CFUNC
|
||
.LONG C_PAL_AND_OFFSET_Z
|
||
.LONG DARKER_LEG
|
||
.LONG BUTT_ZOFF+1
|
||
LWWWW FRONTWK1A, DMAWNZ|M_FLIPH, 0, 0, OM_PRVGUNV|OM_CFUNC
|
||
.LONG C_PAL_AND_OFFSET_Z
|
||
.LONG DARKER_LEG
|
||
.LONG BUTT_ZOFF+1
|
||
|
||
DARK_LEG
|
||
.word 64
|
||
.word 00000h,0739ch,00000h,00400h,00c00h,00000h,00800h,01020h
|
||
.word 01440h,00800h,02020h,02440h,02040h,01c00h,030a0h,034c0h
|
||
.word 038e0h,04520h,03d00h,02c80h,01820h,02860h,03060h,02c40h
|
||
.word 01000h,01400h,01400h,04100h,00c00h,01800h,038a0h,04920h
|
||
.word 02460h,03cc0h,040e0h,04500h,04d40h,05160h,055a2h,059a0h
|
||
.word 05580h,03480h,05560h,05dc0h,05180h,05da0h,024a0h,01c80h
|
||
.word 020a0h,04120h,03102h,01420h,04963h,01860h,06603h,028c0h
|
||
.word 065e0h,059a0h,059a0h,034e0h,06ef0h,05580h,055e7h,05e4bh
|
||
|
||
DARKER_LEG
|
||
.word 64
|
||
.word 00000h,06b5ah,00000h,00000h,00400h,00000h,00000h,00800h
|
||
.word 00c00h,00000h,01800h,01c00h,01800h,01400h,02860h,02c80h
|
||
.word 030a0h,03ce0h,034c0h,02440h,01000h,02020h,02820h,02400h
|
||
.word 00800h,00c00h,00c00h,038c0h,00400h,01000h,03060h,040e0h
|
||
.word 01c20h,03480h,038a0h,03cc0h,04500h,04920h,04d60h,05160h
|
||
.word 04d40h,02c40h,04d20h,05580h,04940h,05560h,01c60h,01440h
|
||
.word 01860h,038e0h,028c0h,00c00h,04121h,01020h,05dc1h,02080h
|
||
.word 05da0h,05160h,05160h,02ca0h,066aeh,04d40h,04da5h,05609h
|
||
|
||
BUG_HEAD_ANIM
|
||
LWLL 1,60|AFunc,A_AnimScr+2,BUG_HEAD_LUPE
|
||
; LW 1,60
|
||
; LW 1,60
|
||
; LW 1,60
|
||
; LW 1,60
|
||
; LW 1,60
|
||
; LW 1,60
|
||
LWLL 1,30|AFunc,A_SET_OYVEL+2,-010000H
|
||
LWLL 1,60|AFunc,A_SET_OYVEL+2,0
|
||
LWLL 1,15|AFunc,A_SET_OYVEL+2,010000H
|
||
LWLL 1,1|AFunc,A_SET_OYVEL+2,0
|
||
; LW 1,60
|
||
; LW 1,60
|
||
; LWLL 1,30|AFunc,A_SET_OXVEL+2,-010000H
|
||
LWL 1,1|AFunc,RANDOM_HEAD_MOVE_INIT
|
||
BUG_HEAD_LUPE
|
||
LWL 1,1|AFunc,RANDOM_HEAD_MOVE
|
||
.long 0
|
||
|
||
; LWLL 1,60|AFunc,A_SET_OXVEL+2,010000H
|
||
; LWLL 1,60|AFunc,A_SET_OXVEL+2,-010000H
|
||
; .long 0
|
||
|
||
|
||
HEAD_GREETING_ANIM
|
||
LWLL BITE2,1|AMulti|AFunc,A_SOUND+2,SND_GREETING_SCREAM
|
||
LW BITE2,5
|
||
.long 0
|
||
HEAD_SCREAM_ANIM
|
||
LWL BITE2,1|AMulti|AFunc,BUG_SCREAM
|
||
LW BITE2,5
|
||
HEAD_SCREAM_GO_ANIM
|
||
LW BITE3,1|AMulti
|
||
LW BITE3,5
|
||
|
||
LW BITE4,1|AMulti
|
||
LW BITE4,15
|
||
|
||
LW BITE3,1|AMulti
|
||
LW BITE3,5
|
||
|
||
LW BITE2,1|AMulti
|
||
LW BITE2,5
|
||
|
||
LWL BITE1,1|AMulti|AFunc,PULL_ANIM
|
||
LW BITE1,1
|
||
|
||
HEAD_BITE_ANIM
|
||
LWL BITE4,1|AMulti|AFunc,A_BITE
|
||
LW BITE4,1
|
||
HBA_FLASH_LUPE
|
||
LWL 1,3|AFunc,BUG_CONST
|
||
LWL 1,1|AFunc,BUG_ON
|
||
LWLL 1,1|AFunc,A_AnimFrm_DSJ+2,HBA_FLASH_LUPE
|
||
|
||
LW BITE3,1|AMulti
|
||
LW BITE3,5
|
||
|
||
LW BITE2,1|AMulti
|
||
LW BITE2,5
|
||
|
||
LWL BITE1,1|AMulti|AFunc,A_END_BITE
|
||
LW BITE1,1
|
||
|
||
NECK_ANIM
|
||
LWL 1,1|AFunc,A_NECK
|
||
.long 0
|
||
|
||
|
||
BUG_LEG_ANIM
|
||
; LW FRONTWK1,1|AMulti
|
||
LWL FRONTWK1,1|AMulti|AFunc,A_LEG_SOUND
|
||
; LWLL FRONTWK1A,5|AFunc,A_SET_LEGS_SLEEP_R+2,OBJ_ON_WNZ
|
||
LWL FRONTWK1A,5|AFunc,OBJ_ON_WNZ
|
||
|
||
LW FRONTWK2,1|AMulti
|
||
; LWLL 1,5|AFunc,A_SET_LEGS_SLEEP_R+2,OBJ_OFF
|
||
LWL 1,5|AFunc,OBJ_OFF
|
||
BUG_LEG_UP_50
|
||
; LWL FRONTWK3,5|AFunc,A_SET_LEGS_SLEEP
|
||
LW FRONTWK3,5
|
||
|
||
; LWL FRONTWK4,5|AFunc,A_SET_LEGS_SLEEP
|
||
LW FRONTWK4,5
|
||
BUG_LEG_UP_100
|
||
; LWL FRONTWK5,5|AFunc,A_SET_LEGS_SLEEP
|
||
LW FRONTWK5,5
|
||
|
||
; LWL FRONTWK6,5|AFunc,A_SET_LEGS_SLEEP
|
||
LW FRONTWK6,5
|
||
BUG_LEG_DOWN_50
|
||
LW FRONTWK7,1|AMulti
|
||
; LWLL FRONTWK7A,5|AFunc,A_SET_LEGS_SLEEP_R+2,OBJ_ON_WNZ
|
||
LWL FRONTWK7A,5|AFunc,OBJ_ON_WNZ
|
||
|
||
LWL FRONTWK8,1|AMulti|AFunc,A_CHECK_LEGS_STOP
|
||
; LWL FRONTWK8A,5|AFunc,A_SET_LEGS_SLEEP
|
||
LW FRONTWK8A,5
|
||
|
||
.long 0
|
||
|
||
BUG_LEGS_SPRING_ANIM
|
||
LW FRONTWK1,1|AMulti
|
||
LWL FRONTWK1A,1|AMulti|AFunc,OBJ_ON_WNZ
|
||
LW FRONTWK1,1|AMulti
|
||
LWL FRONTWK1A,1|AMulti|AFunc,OBJ_ON_WNZ
|
||
LW FRONTWK1,1|AMulti
|
||
LWL FRONTWK1A,1|AMulti|AFunc,OBJ_ON_WNZ
|
||
LW FRONTWK1,1|AMulti
|
||
LWL FRONTWK1A,1|AMulti|AFunc,OBJ_ON_WNZ
|
||
LW FRONTWK1,1|AMulti
|
||
LWL FRONTWK1A,1|AMulti|AFunc,OBJ_ON_WNZ
|
||
LW FRONTWK1,1|AMulti
|
||
LWL FRONTWK1A,5|AFunc,OBJ_ON_WNZ
|
||
|
||
LWLW FRONTWK2,1|AMulti|AFunc,A_SPRING_BODY+1,3
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LW FRONTWK2,1|AMulti
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LW FRONTWK2,1|AMulti
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LW FRONTWK2,1|AMulti
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LW FRONTWK2,1|AMulti
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LW FRONTWK2,1|AMulti
|
||
LWL 1,5|AFunc,OBJ_OFF
|
||
|
||
LWLW FRONTWK3,1|AMulti|AFunc,A_SPRING_BODY+1,4
|
||
LW 1,1|AMulti
|
||
LW FRONTWK3,1|AMulti
|
||
LW 1,1|AMulti
|
||
LW FRONTWK3,1|AMulti
|
||
LW 1,1|AMulti
|
||
LW FRONTWK3,1|AMulti
|
||
LW 1,1|AMulti
|
||
LW FRONTWK3,1|AMulti
|
||
LW 1,1|AMulti
|
||
LW FRONTWK3,7
|
||
|
||
LWLW FRONTWK2,1|AMulti|AFunc,A_SPRING_BODY+1,-3
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LW FRONTWK2,1|AMulti
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LW FRONTWK2,1|AMulti
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LW FRONTWK2,1|AMulti
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LW FRONTWK2,1|AMulti
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LW FRONTWK2,1|AMulti
|
||
LWL 1,5|AFunc,OBJ_OFF
|
||
|
||
LWL FRONTWK1,1|AMulti|AFunc,PULL_ANIM
|
||
LWL FRONTWK1A,1|AMulti|AFunc,OBJ_ON_WNZ
|
||
LWL FRONTWK1,1|AMulti|AFunc,A_FLAG_LEAP
|
||
LWL FRONTWK1A,1|AMulti|AFunc,OBJ_ON_WNZ
|
||
LW FRONTWK1,1|AMulti
|
||
LWL FRONTWK1A,1|AMulti|AFunc,OBJ_ON_WNZ
|
||
LW FRONTWK1,1|AMulti
|
||
LWL FRONTWK1A,1|AMulti|AFunc,OBJ_ON_WNZ
|
||
LW FRONTWK1,1|AMulti
|
||
LWL FRONTWK1A,1|AMulti|AFunc,OBJ_ON_WNZ
|
||
LW FRONTWK1,1|AMulti
|
||
LWL FRONTWK1A,5|AFunc,OBJ_ON_WNZ
|
||
|
||
|
||
LONG_SCREAM_ANIM:
|
||
LWL BITE2,1|AMulti|AFunc,BUG_SCREAM
|
||
LW BITE2,5
|
||
|
||
LW BITE3,1|AMulti
|
||
LW BITE3,5
|
||
|
||
LW BITE4,1|AMulti
|
||
LW BITE4,15
|
||
|
||
LW BITE3,1|AMulti
|
||
LW BITE3,5
|
||
|
||
LW BITE2,1|AMulti
|
||
LW BITE2,5
|
||
|
||
LWL BITE1,1|AMulti|AFunc,A_PULL_ANIM_OFF
|
||
LW BITE1,1
|
||
|
||
.long 0
|
||
|
||
A_PULL_ANIM_OFF:
|
||
move *a8(OFLAGS),a14
|
||
btst B_OFSCRN,a14
|
||
jrz APAO_on
|
||
calla PULL_ANIM
|
||
APAO_on:
|
||
rets
|
||
|
||
|
||
.END
|
||
|
||
;BUG_LEGS_START_ANIM
|
||
; LW 1,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW FRONTWK2,1|AMulti
|
||
; LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
; LW FRONTWK2,1|AMulti
|
||
; LWL 1,10|AFunc,OBJ_OFF
|
||
;
|
||
; LW 1,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW FRONTWK3,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW FRONTWK3,10
|
||
;
|
||
; LWLL 1,1|AMulti|AFunc,A_AnimScr+2,BUG_LEGS_ANIM
|
||
; LW 1,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW FRONTWK4,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW FRONTWK4,10
|
||
;
|
||
;BUG_LEGS_ANIM
|
||
; LW FRONTWK1,1|AMulti
|
||
; LWL 1,1|AMulti|AFunc,OBJ_ON_WNZ
|
||
; LW FRONTWK1,1|AMulti
|
||
; LWL 1,1|AMulti|AFunc,OBJ_ON_WNZ
|
||
; LW FRONTWK5,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LWL FRONTWK5,1|AFunc,A_SET_LEGS_SLEEP
|
||
;
|
||
; LW FRONTWK2,1|AMulti
|
||
; LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
; LW FRONTWK2,1|AMulti
|
||
; LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
; LW FRONTWK4,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LWL FRONTWK4,1|AFunc,A_SET_LEGS_SLEEP
|
||
;
|
||
; LW FRONTWK3,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW FRONTWK3,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW FRONTWK3,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LWL FRONTWK3,1|AFunc,A_SET_LEGS_SLEEP
|
||
;
|
||
; LW FRONTWK4,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW FRONTWK4,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW FRONTWK2,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LWL FRONTWK2,1|AFunc,A_SET_LEGS_SLEEP
|
||
;
|
||
; LW FRONTWK5,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW FRONTWK5,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW FRONTWK1,1|AMulti
|
||
; LWL 1,1|AMulti|AFunc,OBJ_ON_WNZ
|
||
; LW FRONTWK1,1|AMulti
|
||
; LWLL 1,1|AFunc,A_SET_LEGS_SLEEP_R+2,OBJ_ON_WNZ
|
||
;
|
||
; LW FRONTWK4,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW FRONTWK4,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW FRONTWK2,1|AMulti
|
||
; LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
; LW FRONTWK2,1|AMulti
|
||
; LWLL 1,1|AFunc,A_SET_LEGS_SLEEP_R+2,OBJ_OFF
|
||
;
|
||
; LW FRONTWK3,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW FRONTWK3,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW FRONTWK3,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LWL FRONTWK3,1|AFunc,A_SET_LEGS_SLEEP
|
||
;
|
||
; LW FRONTWK2,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW FRONTWK2,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LW FRONTWK4,1|AMulti
|
||
; LW 1,1|AMulti
|
||
; LWL FRONTWK4,1|AFunc,A_SET_LEGS_SLEEP
|
||
|
||
|