revolution-x/GXUNIJP2.ASM

4554 lines
122 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

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

.MLIB "GXMACS.LIB"
.FILE "GXUNIJP2.ASM"
.TITLE " <<< GENERATION X -- JAPAN UNIVERSE PT.II >>>"
.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 "IMGTBL.GLO"
.include "UNIVTBL.GLO"
.INCLUDE "GXSCRL.H"
.INCLUDE "GXNONBOY.H"
.INCLUDE "GXAUDN.H"
***** Symbols in this file
.DEF JAP_BOXA_SCROLL, JAP_WARE_VECT_TABLE, DELETE_UNIV_OBJ
.DEF JAP_BOXB_SCROLL, S_ADJUST_YHALF, S_ADJUST_YWORLD
.DEF METAL_GUNVECT, WARE_CRATE_CVECT, CRATE_GUNVECT
.DEF ENT_CRATE_CVECT, ENT_CRATE_GUNVECT
.DEF ALIGHT_CVECT, ALIGHT_GUNVECT, CRATE_FRAGS, WHAREA
.DEF ROW_PARMS_TABLE, SND_GATE_EXPLODE
.DEF MARS_CVECT, MARS_GUNVECT, SND_METAL_HIT
***** from GXSCROL2.ASM
.REF SND_DIR_CHOSEN
***** from GXRAM.ASM
.REF GUNS_OFF, WAVE_IPLANE, WAVE_UNIV, OBJENEMIES, IN_MAKE_DECISION
.REF SOCRATES
***** from GXAFUNC.ASM
.REF SetAnim_AFARG, A_RAND_REL_BYTE, A_PreFrag_Center, A_Anim_DSJ
.REF A_Set_AnimLoop, A_SET_OXVEL, A_Set_Rel_Long, A_AnimGo
.REF A_SET_OYVEL, A_SOUND
***** from GXD.ASM
.REF XBASE, YBASE, ZBASE, XSCROLL, YSCROLL, ZSCROLL, YWORLD
.REF XSACCEL, YSACCEL, ZSACCEL, EXIST_OBJ_ALL, RESUME_EXIST_OBJ_ALL
.REF ZFAR, GETSUPP_FROM_OID
***** from GXUNIJAP.ASM
.REF DEAD_GUNVECT, FIND_MY_MATCH, JAP_FACTORY_SCROLL
.REF JAP_FACTORY_VECT_TABLE, BRICK_GRY_GUNVECT, SND_CHEST_HIT
.REF SND_CHEST_EXPLODE, SIGN_CVECT, SIGN_GUNVECT
***** from GXDESK.ASM
.REF DGV_FRAG_SPARK
***** from GXMONDR2.ASM
.REF PART_EXPLOSION, F_EXPLOSION_OUT
***** from GXJUNGLE.ASM
.REF VIDCAM_CVECT, VIDCAM_GUNVECT, VIDCAM_Z, VIDCAM_HOLDTIME
.REF PLYR_SEEN, S_DELETE_ENEMY_OID
***** from GXUNIV.ASM
.REF UNIV_DAMAGE_HANDLER, WXBUFFER, WYBUFFER, INIT_UCHECK_TBL
.REF UEP_Z
***** from GXUNIV1.ASM
.REF UNIV_ROCKET_COLL, UNIV_COLL_CHECK, FRAG_U5, FRAG_U20
.REF FRAG_U10_X2, FRAG_U20_X2
.REF FRAG_U10_MIX, FRAG_U20_MIX
.REF FLOAT_ZFAR
***** from GXUNILNK.ASM
.REF BG_TO_FG
***** from GXSCROLL.ASM
.REF PORTAL_GUNVECT, ZREL_OFF, SCROLLKILL
***** from GXMISC.ASM
.REF CYCLE16
***** from GXSND.ASM
.REF ONESND_Z, ONESND
***** from GXLA1.ASM
.REF DUMPSTER_COLLVECT, DUMPSTER_GUNVECT
***** from GXBGDATA.ASM
.REF JFACTR_BGND
***** from GXENEMY.ASM
.REF PROC_SND
***** from GXPOWER.ASM
.REF THROW_PROCK, REVEAL_PROCK, REVEAL_CD, REVEAL_SBOMB
.REF REVEAL_SUPERGUN
***** from GXNINJA.ASM
.REF PROC_NINJA_JUMPIN
* FROM GXNONBOY.ASM
; .REF CREATE_DROP_SHOOTING_WORLDBOY
.REF CREATE_JUMPON_NONBOY
.REF NONBOY_SHOOT_CHANCE
***** from GXFORK.ASM
.REF PROC_SIDE_FORKLIFT, PROC_BRAD_FORKLIFT, PROC_FRONT_FORKLIFT
***** from GXAERO.ASM
.REF WHITFORD_FLAG
*
*RAMma jamma japanese mother fucker! Part 2
*
.BSS GATES_BLOWN,32*8 ;Array of gate blown flags
.BSS BUSTOUT_COUNTS,8*8 ;Array of counters for bustouts
.BSS BUSTOUTS,8*8 ;Array of bustout flags
.BSS END_GATE_FLAGS,0 ;End marker for gate flags
.BSS CRATES_DESTROYED,16 ;# of crates destroyed
.BSS ARK_CRATE_BUSTED,16 ;The ark crate has already been busted
.BSS ARK_CRATE_READY,16 ;Ark is ready to appear
.BSS ENEMY_YBASE,32 ;Base Y for enemy creation
.BSS ENEMY_ZBASE,32 ;Base Z for enemy creation
.BSS WHAREA,16 ;WAREHOUSE AREA
.BSS CRATE_WAIT,16 ;Var for waiting on crate bustouts
.BSS UNUSED_WORD,16 ;For alignment purposes
FIRST_GATE_ID .EQU 8 ;ID of first gate
NUM_CRATES_FOR_ARK .EQU 255 ;Number of crates to destroy for ark
**************************************************************************
* *
* Special routines for the Japan universe *
* *
**************************************************************************
.text
**************************************************************************
* *
* Japan Scroll funcs *
* *
**************************************************************************
**************************************************************************
* *
* S_CLR_GATE_FLAGS *
* *
* Scroll func to clear the gate and bustout flags for *
* this warehouse section. *
* *
**************************************************************************
S_CLR_GATE_FLAGS
CLR A14
MOVE A14,@CRATES_DESTROYED,W ;Clear out our counters
MOVE A14,@ARK_CRATE_BUSTED,W
MOVE A14,@WHITFORD_FLAG,W
MOVKM 1,@SOCRATES,W ;We are in the Crate section
MOVI GATES_BLOWN,A1 ;Get the start of our array
MOVI END_GATE_FLAGS,A2 ;And the end.
CALLA CLRBLOCK
JAUC SCRL_DISPATCHER
**************************************************************************
* *
* S_ADJUST_YHALF *
* *
* Scroll func to set-up adjustment of YHALF *
* based on the value stored in the UNIV table. *
* *
* *A11+,W = Rate at which to change YHALF *
* *
**************************************************************************
S_ADJUST_YHALF
MOVE *A11+,A10,W
PUSHP A11
MOVE @WAVE_UNIV,A0,L
MOVE *A0(10H),A11,W
CREATE PID_IND,ADJUST_YHALF_R
PULLP A11
JAUC SCRL_DISPATCHER
**************************************************************************
* *
* S_ADJUST_YWORLD *
* *
* Scroll func to adjustment of YWORLD *
* based on the value stored in the UNIV table. *
* *
* *A11+,L = Ptr to universe ROM table *
* *
**************************************************************************
S_ADJUST_YWORLD
MOVE *A11+,A0,L
MOVE *A0(60H),A14,L
MOVE A14,@YWORLD,L
JAUC SCRL_DISPATCHER
**************************************************************************
* *
* S_CHANGE_PORTAL_GUNVECT *
* *
* Scroll func to change all objects with PORTAL_GUNVECT for *
* gun vector to the given. *
* *
* *A11+,L = Replacement Gun Vector *
* *A11+,L = Replacement Collision Vector *
* *
**************************************************************************
S_CHANGE_PORTAL_GUNVECT
MOVE *A11+,A5,L ;Get our replacement Gun Vector
MOVE *A11+,A6,L ;Get our replacement Collision Vector
MOVI FGLIST,A8
MOVI PORTAL_GUNVECT,A2 ;This is how we'll find the rascals
MOVE A8,A0
JRUC SCPG_TST
SCPG_LP
MOVE *A0(OGUNVECT),A14,L
CMP A2,A14 ;Match?
JRNE SCPG_TST ;BR = No
MOVE A5,*A0(OGUNVECT),L
MOVE A6,*A0(OCVECT),L
SCPG_TST
MOVE *A0,A0,L ;Get the next object
CMP A0,A8 ;Is that all?
JRNE SCPG_LP ;BR = No, get next
JAUC SCRL_DISPATCHER
**************************************************************************
* *
* S_SET_WHAREA *
* *
* SET WAREHOUSE AREA *
* *
* *A11+,W = AREA *
* *
**************************************************************************
S_SET_WHAREA
MOVE *A11+,A14,W
MOVE A14,@WHAREA,W
JAUC SCRL_DISPATCHER
**************************************************************************
* *
* S_BUSTOUT5_CK *
* *
* Special case check to see if we've waited at Bustout 5 for *
* too long. Uses global CRATE_WAIT as a counter. *
* *
**************************************************************************
S_BUSTOUT5_CK
MOVE @CRATE_WAIT,A14,W
JRZ S_B5_BLOWIT ;BR = Already done
DEC A14
MOVE A14,@CRATE_WAIT,W
JRZ S_B5_BLOWIT
JAUC SCRL_DISPATCHER
S_B5_BLOWIT
MOVB @BUSTOUTS+(4*8),A14
JANZ SCRL_DISPATCHER ;Somebody busted them already
MOVI BUSTOUT5_TAB_ENTRY,A4
MOVE *A4+,A3,L ;Get proper ZVAL
ADDK 10H,A4
MOVK 4 << 3, A6
MOVI (OID_UNIV|ID_31),A5 ;This is Bustout's I.D.
MOVE A5,A14
CALLA GETSUPP_FROM_OID
MOVE A14,A8
CALLR BLOW_CRATE_ENTRY
MOVI JAPA_BUSTOUT5_CONTINUE,A11
JAUC SCRL_DISPATCHER ;Jump out of this thing
**************************************************************************
* *
* JAPAN WAVE SCROLL TABLES *
* *
**************************************************************************
CRATE_ZVEL .EQU 0A0H
CRATE_XVEL .EQU 10000H
ROW0_Z .EQU -41F0H
ROW1_Z .EQU 4EF0H
ROW2_Z1 .EQU 0E3C0H
ROW2_Z2 .EQU 12D90H
ROW3_Z .EQU 19198H
ROW4_Z .EQU 27800H
ROW5_Z .EQU 3002CH
ROW6_Z .EQU 38A00H
ROW7_Z .EQU 44000H
;AREA FLAGS
AROW0 EQU 0
AROW1 EQU 1
AROW2A EQU 2
AROW2B EQU 3
AROW3 EQU 4
AROW4 EQU 5
AROW5 EQU 6
AROW6L EQU 7
AROW6R EQU 8
AROW7 EQU 9
ROW_PARMS_TABLE
;.WORD LEFT UNIVERSE X >> 16, RIGHT UNIVERSE X >> 16
;.LONG UNIVERSE Z CLOSEST, UNIVERSE Z FARTHEST
WWLL -0F6H, 0F9H, ROW0_Z+05A40H, ROW0_Z+08910H ;AROW0
WWLL -0F6H, 0F9H, ROW1_Z+05A40H, ROW1_Z+08910H ;AROW1
WWLL -0248H, -02FH, ROW2_Z1+04000H, ROW2_Z1+08400H ;AROW2A
WWLL 0F9H, 02A9H, ROW2_Z2+04000H, ROW2_Z2+07D00H ;AROW2B
ROW3_PARMS
WWLL -0248H, 02A9H, ROW3_Z+04000H, ROW3_Z+07E00H ;AROW3
WWLL -097H, 02A9H, ROW4_Z+04000H, ROW4_Z+07000H ;AROW4
WWLL -08EH, 02A9H, ROW5_Z+04000H, ROW5_Z+07800H ;AROW5
WWLL -03H, 015DH, ROW6_Z+04000H, ROW6_Z+07E00H ;AROW6L
WWLL 0208H, 02A9H, ROW6_Z+04000H, ROW6_Z+07E00H ;AROW6R
WWLL -03H, 02A9H, ROW7_Z+04000H, ROW7_Z+06B00H ;AROW7
.LONG 0 ;The terminator
**************************************************************************
* *
* Warehouse area A scroll *
* *
**************************************************************************
JAP_BOXA_SCROLL
.LONG S_CLR_GATE_FLAGS ;Clear our gate flags
.LONG S_SET_LONG, WXBUFFER, 0380000H ;Open univ block buffer
.LONG S_SET_LONG, WYBUFFER, 0540000H
LW S_AUDIT, AUDJACRATE
.LONG S_LOCKOUT_PORTALS
.LONG S_CHANGE_ZFAR,10F00H ;Set the correct ZFAR
LW S_WAIT_HERE,30
.LONG S_CREATE_PROCR ;Start the damage color stuff
.WORD PID_DAMCC
.LONG 10,57,63,P_NBOXDM,CYCLE16 ;Crate damage
.WORD 0
LW S_WAIT_HERE,1
.LONG S_CREATE_PROCR ;Start the damage color stuff
.WORD PID_DAMCC
.LONG 10,57,63,P_NBXDM2,CYCLE16 ;Crate damage
.WORD 0
LW S_WAIT_HERE,1
.LONG S_CREATE_PROCR ;Start the damage color stuff
.WORD PID_DAMCC
.LONG 10,57,63,P_NBOXDM2,CYCLE16 ;Crate damage
.WORD 0
LW S_WAIT_HERE,1
.LONG S_CREATE_PROCR ;Start the damage color stuff
.WORD PID_DAMCC
.LONG 10,57,63,P_NBOXDM3,CYCLE16 ;Crate damage
.WORD 0
LW S_WAIT_HERE,1
.LONG S_CREATE_PROCR ;Start the damage color stuff
.WORD PID_DAMCC
.LONG 10,57,63,P_NBOXDM4,CYCLE16 ;Crate damage
.WORD 0
LW S_WAIT_HERE,1
.LONG S_CREATE_PROCR ;Start the damage color stuff
.WORD PID_DAMCC
.LONG 10,56,63,P_SECDAM,CYCLE16 ;Gate damage
.WORD 0
.LONG S_SET_LONG, UEP_Z, 10F00H ;Set enemy gen
LLW S_SET_WORD, SCROLLKILL, 0 ;KILL FLOAT_ZFAR WHEN=1
.LONG S_SET_LONG, VIDCAM_Z, 8000H ;Set vidcam activation Z
LLW S_SET_WORD, VIDCAM_HOLDTIME, 15 ;Set vidcam delay
LLW S_SET_WORD, PLYR_SEEN, 0 ;Set vidcam spot flag
.LONG S_SET_LONG, ENEMY_YBASE, 1E0000H ;Set enemy offset Y
.LONG S_SET_LONG, ENEMY_ZBASE, ROW0_Z ;Set enemy offset Z
LLW S_SET_WORD, NONBOY_SHOOT_CHANCE, 1024
LWL S_X_ACCEL_LIMIT,-1000H,-CRATE_XVEL ;Reveal the crates
LLW S_SET_WORD,OBJENEMIES,M_DUMPSTER|M_BW ;Activate enemy gens
LLLW S_WAIT_FOR_COORD,XBASE,000H,1 ;Scroll past opening gate
; .LONG S_JUMP_IF_TRUE, JAPA_FIRST_CAM_GOT_EM, PLYR_SEEN
LW S_SET_WHAREA, AROW0 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0 ;Dispatch slow
; .LONG JAPA_ROW0_LEFT_CK+M_JUMP
;
;JAPA_FIRST_CAM_GOT_EM
; LLW S_DISPATCH_HERE,FAST_ROW0_DISPATCH+M_WAIT,0 ;Dispatch fast
JAPA_ROW0_LEFT_CK
LWL S_X_DECEL_LIMIT,200H,CRATE_XVEL ;Bounce off end
LLLW S_WAIT_FOR_COORD,XBASE,0D0000H,1 ;Scroll back to opening
LW S_DECEL_TO_STOP,5
.LONG S_WAIT_UNTIL_TRUE, GATES_BLOWN+(0*8) ;Wait for the first gate
LWL S_Z_ACCEL_LIMIT,8H,CRATE_ZVEL ;Head for first gate
LW S_SET_WHAREA, AROW1 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
JAPA_GATE1_PASS
; LWL S_CREATE_PROC, PID_NINJA, PROC_BIG_NINJA
LLW S_WAIT_FOR_ZREL,600H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW1_Z,1
LW S_DECEL_TO_STOP,4
LWWWLW S_ACCEL_TO_POINT,-25,1AH,0,ROW1_Z,0 ;Pull back so we are lined up
.LONG S_STOP_SCROLL
LW S_WAIT_HERE,10
JAP_BOXA_DECISION_1
.LONG S_MAKE_DECISION ;FUNCTION
LW JAP_BOXA_0_LEFT,0FFFFH ;-X, Count
LW JAP_BOXA_0_RIGHT,0FFFFH ;+X, Count
LW 0,0 ;-Y, Count
LW 0,0 ;+Y, Count
LW 0,0 ;-Z, Count
LW 0,0 ;+Z, Count
.long 0
*Box area A - First decision (left)
JAP_BOXA_0_LEFT
LWL S_X_ACCEL_LIMIT,-1000H,-CRATE_XVEL ;Move left down aisle
JAPA_GATE2_WAIT
LLLW S_WAIT_FOR_COORD,XBASE,-0CD0000H,1
.LONG S_JUMP_IF_FALSE,JAPA_GATE2_INTACT,GATES_BLOWN+(1*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE2_ZAP, 5, 80
JAPA_GATE2_INTACT
LLLW S_WAIT_FOR_COORD,XBASE,-0DD0000H,1
LWL S_X_DECEL_LIMIT,800H,CRATE_XVEL ;Start to head back the other way
.LONG JAPA_GATE3_WAIT+M_JUMP ;Jump to wait for Gate 3
*Box area A - First decision (right)
JAP_BOXA_0_RIGHT
LWL S_X_ACCEL_LIMIT,1000H,CRATE_XVEL ;Move right down aisle
JAPA_GATE3_WAIT
LLLW S_WAIT_FOR_COORD,XBASE,0D00000H,1
.LONG S_JUMP_IF_FALSE,JAPA_GATE3_INTACT,GATES_BLOWN+(2*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE3_ZAP, 5, 80
JAPA_GATE3_INTACT
LLLW S_WAIT_FOR_COORD,XBASE,0E00000H,1
LWL S_X_DECEL_LIMIT,-800H,-CRATE_XVEL ;Start to head back the other way
.LONG JAPA_GATE2_WAIT+M_JUMP ;Jump to wait for Gate 3
JAPA_GATE3_PASS
; .LONG S_SET_LONG, ENEMY_ZBASE, ROW2_Z2 ;Set enemy offset Z
LLW S_WAIT_FOR_ZREL,9730H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW2_Z2-0A90H,1 ;Get to the corner
.LONG S_JUMP_IF_FALSE,JAPA_BUSTOUT1_INTACT,BUSTOUTS+(0*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_ROW2_2_ZAP, 1, 80
JAPA_BUSTOUT1_PASS
LLW S_WAIT_FOR_ZREL,ROW3_Z,1 ;Get to back row
LW S_DECEL_TO_STOP,4
LWWWLW S_ACCEL_TO_POINT,-25,0F9H,0,ROW3_Z,0 ;Pull back so we are lined up
.LONG S_STOP_SCROLL
LW S_WAIT_HERE,10
.LONG S_JUMP_IF_TRUE,JAPA_BUSTOUT1_DEC2,GATES_BLOWN+(8*8)
.LONG S_MAKE_DECISION ;FUNCTION
LW JAPA_GATE9_LEFT,0FFFFH ;-X, Count
LW JAPA_GATE9_RIGHT,0FFFFH ;+X, Count
LW 0,0 ;-Y, Count
LW 0,0 ;+Y, Count
LW 0,0 ;-Z, Count
LW 0,0 ;+Z, Count
JAPA_BUSTOUT1_DEC2
.LONG S_MAKE_DECISION ;FUNCTION
LW JAPA_GATE9_LEFT,0FFFFH ;-X, Count
LW JAPA_GATE9_RIGHT,0FFFFH ;+X, Count
LW 0,0 ;-Y, Count
LW 0,0 ;+Y, Count
LW 0,0 ;-Z, Count
LW JAPA_GATE9_FROM_STOP,0FFFFH ;+Z, Count
JAPA_BUSTOUT1_INTACT
.LONG S_DOZER_ACCEL ;Round corner and go right
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW2_Z2 ;Z Position target
.LONG CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
JAPA_ROW2_RIGHT_CK_GATE6
LLLW S_WAIT_FOR_COORD,XBASE,01490000H,1
.LONG S_CREATE_PROCR
.WORD PID_FORKLIFT
.LONG ROW3_PARMS,0,0,0,PROC_FORK_ROW ;Make a Fork lift cruise by
.WORD 0
.LONG S_JUMP_IF_FALSE,JAPA_GATE6_RIGHT_INTACT,GATES_BLOWN+(5*8)
LLLW S_WAIT_FOR_COORD,XBASE,01AC0000H,1
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE6_ZAP, 5, 80
JAPA_GATE6_RIGHT_INTACT
LLLW S_WAIT_FOR_COORD,XBASE,2840000H,1
.LONG S_JUMP_IF_FALSE,JAPA_GATE7_INTACT,GATES_BLOWN+(6*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE7_ZAP, 5, 80
JAPA_GATE7_INTACT
LLLW S_WAIT_FOR_COORD,XBASE,02940000H,1
LWL S_X_DECEL_LIMIT,-800H,-CRATE_XVEL ;Start to head back the other way
.LONG JAPA_BUSTOUT1_REV_WAIT+M_JUMP ;Jump to wait Bustout 1 corner
*Box area A - Second decision (left)
JAP_BOXA_1_LEFT
LWL S_X_ACCEL_LIMIT,-1000H,-CRATE_XVEL ;Move left around square
JAPA_GATE4_WAIT
LLLW S_WAIT_FOR_COORD,XBASE,-021F0000H,1
.LONG S_JUMP_IF_FALSE,JAPA_GATE4_INTACT,GATES_BLOWN+(3*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE4_ZAP, 5, 80
JAPA_GATE4_INTACT
LLLW S_WAIT_FOR_COORD,XBASE,-022F0000H,1
LWL S_X_DECEL_LIMIT,800H,CRATE_XVEL ;Start to head back the other way
.LONG JAPA_ROW2_RIGHT_CK_GATE2+M_JUMP ;Jump to wait for Gate 2
*Box area A - Second decision (right)
JAP_BOXA_1_RIGHT
LWL S_X_ACCEL_LIMIT,1000H,CRATE_XVEL ;Move right around square
JAPA_GATE5_WAIT
LLLW S_WAIT_FOR_COORD,XBASE,-0580000H,1
.LONG S_JUMP_IF_FALSE,JAPA_GATE5_INTACT,GATES_BLOWN+(4*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE5_ZAP, 5, 80
JAPA_GATE5_INTACT
LLLW S_WAIT_FOR_COORD,XBASE,-0480000H,1
LWL S_X_DECEL_LIMIT,-800H,-CRATE_XVEL ;Start to head back the other way
.LONG JAPA_ROW2_LEFT_CK_GATE2+M_JUMP ;Jump to wait for Gate 4
*
* Cruising along ROW 3, check gates
*
JAPA_ROW3_LEFT_CK_GATE6
.LONG S_JUMP_IF_FALSE,JAPA_ROW3_LEFT_CK_GATE9,GATES_BLOWN+(5*8)
LLLW S_WAIT_FOR_COORD,XBASE,22E0000H,1
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE6_REV_ZAP, 4, 80
JAPA_ROW3_LEFT_CK_GATE9
LLLW S_WAIT_FOR_COORD,XBASE,1270000H,1
.LONG S_JUMP_IF_FALSE,JAPA_ROW3_LEFT_CK_BUSTOUT1,GATES_BLOWN+(8*8)
.LONG S_JUMP_IF_FALSE,JAPA_ROW3_LEFT_GATE9_SOLO,BUSTOUTS+(0*8)
.LONG S_MAKE_DUAL_BUTTONS
LWW JAPA_GATE9_ZAP, 5, 80
LWW JAPA_BUSTOUT1_REV_ZAP, 4, 80
.LONG JAPA_ROW3_LEFT_CK_GATE5+M_JUMP
JAPA_ROW3_LEFT_GATE9_SOLO
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE9_ZAP, 5, 80
.LONG JAPA_ROW3_LEFT_CK_GATE5+M_JUMP
JAPA_ROW3_LEFT_CK_BUSTOUT1
.LONG S_JUMP_IF_FALSE,JAPA_ROW3_LEFT_CK_GATE5,BUSTOUTS+(0*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_BUSTOUT1_REV_ZAP, 4, 80
JAPA_ROW3_LEFT_CK_GATE5
.LONG S_JUMP_IF_FALSE,JAPA_ROW3_LEFT_CK_GATE8,GATES_BLOWN+(4*8)
LLLW S_WAIT_FOR_COORD,XBASE,180000H,1
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE5_REV_ZAP, 4, 80
JAPA_ROW3_LEFT_CK_GATE8
.LONG S_JUMP_IF_FALSE,JAPA_ROW3_LEFT_CK_GATE4,GATES_BLOWN+(7*8)
LLLW S_WAIT_FOR_COORD,XBASE,-07E0000H,1
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE8_ZAP, 5, 80
JAPA_ROW3_LEFT_CK_GATE4
LLLW S_WAIT_FOR_COORD,XBASE,-021F0000H,1
.LONG S_JUMP_IF_FALSE,JAPA_GATE4_REV_INTACT,GATES_BLOWN+(3*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE4_REV_ZAP, 4, 80
JAPA_GATE4_REV_INTACT
LWL S_X_DECEL_LIMIT,800H,CRATE_XVEL ;Start to head back the other way
.LONG JAPA_ROW3_RIGHT_CK_GATE8+M_JUMP ;Jump wait for back right end
JAPA_GATE4_REV_ZAP
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 1000H,-248H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 175B0H,-3H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Round corner and go backwards
.WORD 60 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG -2480000H ;X Position target
.LONG 0 ;X Velocity target
.LONG -CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
LLW S_WAIT_FOR_ZREL,15200H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW2_Z1,1 ;Get to the corner
.LONG S_DOZER_ACCEL ;Round corner and go left
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW2_Z1 ;Z Position target
.LONG CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
LW S_SET_WHAREA, AROW2A ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
JAPA_ROW2_RIGHT_CK_GATE2
.LONG S_JUMP_IF_FALSE,JAPA_GATE5_WAIT,GATES_BLOWN+(1*8)
LLLW S_WAIT_FOR_COORD,XBASE,-1460000H,1
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE2_REV_ZAP, 4, 80
.LONG JAPA_GATE5_WAIT+M_JUMP ;Jump to wait for Gate 5
JAPA_GATE2_REV_ZAP
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 1000H,-0F6H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL ROW2_Z1,-3H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Round corner and go backwards
.WORD 60 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG -0F60000H ;X Position target
.LONG 0 ;X Velocity target
.LONG -CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
LLW S_WAIT_FOR_ZREL,0C200H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW1_Z,1 ;Get to the corner
.LONG S_DOZER_ACCEL ;Round corner and go left
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW2_Z1 ;Z Position target
.LONG CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
LW S_SET_WHAREA, AROW1 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
.long JAPA_GATE3_WAIT+M_JUMP ;Jump to exit line up
*
* Move right along back row (row 3)
*
JAPA_ROW3_RIGHT_CK_GATE8
.LONG S_JUMP_IF_FALSE,JAPA_ROW3_RIGHT_CK_GATE5,GATES_BLOWN+(7*8)
LLLW S_WAIT_FOR_COORD,XBASE,-0C40000H,1
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE8_ZAP, 5, 80
JAPA_ROW3_RIGHT_CK_GATE5
.LONG S_JUMP_IF_FALSE,JAPA_ROW3_RIGHT_CK_GATE9,GATES_BLOWN+(4*8)
LLLW S_WAIT_FOR_COORD,XBASE,-440000H,1
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE5_REV_ZAP, 4, 80
JAPA_ROW3_RIGHT_CK_GATE9
LLLW S_WAIT_FOR_COORD,XBASE,0B60000H,1
.LONG S_JUMP_IF_FALSE,JAPA_ROW3_RIGHT_CK_BUSTOUT1,GATES_BLOWN+(8*8)
.LONG S_JUMP_IF_FALSE,JAPA_ROW3_RIGHT_GATE9_SOLO,BUSTOUTS+(0*8)
.LONG S_MAKE_DUAL_BUTTONS
LWW JAPA_GATE9_ZAP, 5, 80
LWW JAPA_BUSTOUT1_REV_ZAP, 4, 80
.LONG JAPA_ROW3_RIGHT_CK_GATE6+M_JUMP
JAPA_ROW3_RIGHT_GATE9_SOLO
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE9_ZAP, 5, 80
.LONG JAPA_ROW3_RIGHT_CK_GATE6+M_JUMP
JAPA_ROW3_RIGHT_CK_BUSTOUT1
.LONG S_JUMP_IF_FALSE,JAPA_ROW3_RIGHT_CK_GATE6,BUSTOUTS+(0*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_BUSTOUT1_REV_ZAP, 4, 80
JAPA_ROW3_RIGHT_CK_GATE6
.LONG S_JUMP_IF_FALSE,JAPA_ROW3_RIGHT_GATE6_INTACT,GATES_BLOWN+(5*8)
LLLW S_WAIT_FOR_COORD,XBASE,1AC0000H,1
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE6_REV_ZAP, 4, 80
JAPA_ROW3_RIGHT_GATE6_INTACT
LLLW S_WAIT_FOR_COORD,XBASE,02780000H,1
* We will try to go backwards if the gate is blown behind us
.LONG S_JUMP_IF_FALSE,JAPA_ROW3_RIGHT_GATE7_INTACT,GATES_BLOWN+(6*8)
.LONG S_JUMP_IF_FALSE,JAPA_ROW3_RIGHT_GATE7_SOLO,GATES_BLOWN+(9*8)
* Both gates are blown, let's drop two buttons
.LONG S_MAKE_DUAL_BUTTONS
LWW JAPA_GATE10_ZAP, 5, 80
LWW JAPA_GATE7_REV_ZAP, 4, 80
.LONG JAPA_ROW3_RIGHT_REV+M_JUMP ;Jump to reverse direction
JAPA_ROW3_RIGHT_GATE7_SOLO
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE7_REV_ZAP, 4, 80
.LONG JAPA_ROW3_RIGHT_REV+M_JUMP ;Jump to reverse direction
*We've hit right side and gate 7 is still there, let's see if gate 10 is gone
JAPA_ROW3_RIGHT_GATE7_INTACT
.LONG S_JUMP_IF_FALSE,JAPA_ROW3_RIGHT_REV,GATES_BLOWN+(9*8)
*Throw up a solo zoom in to gate 10 button here
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE10_ZAP, 5, 80
JAPA_ROW3_RIGHT_REV
LLLW S_WAIT_FOR_COORD,XBASE,02880000H,1
LWL S_X_DECEL_LIMIT,-800H,-CRATE_XVEL ;Start to head back the other way
.long JAPA_ROW3_LEFT_CK_GATE6+M_JUMP ;Jump to exit line up
*
* Cruising along Row 4
*
JAPA_ROW4_RIGHT_CK_GATE12
LLLW S_WAIT_FOR_COORD,XBASE,0E80000H,1
.LONG S_JUMP_IF_FALSE,JAPA_ROW4_RIGHT_CK_GATE13,GATES_BLOWN+(11*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE12_ZAP, 5, 80
JAPA_ROW4_RIGHT_CK_GATE13
LLLW S_WAIT_FOR_COORD,XBASE,2840000H,1
.LONG S_JUMP_IF_FALSE,JAPA_GATE13_INTACT,GATES_BLOWN+(12*8)
.LONG S_JUMP_IF_FALSE,JAPA_GATE13_SOLO,BUSTOUTS+(2*8)
.LONG S_MAKE_DUAL_BUTTONS
LWW JAPA_GATE13_ZAP, 5, 80
LWW JAPA_GATE10_REV_ZAP, 4, 80
.LONG JAPA_BUSTOUT3_REV_INTACT+M_JUMP
JAPA_GATE13_SOLO
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE13_ZAP, 5, 80
.LONG JAPA_BUSTOUT3_REV_INTACT+M_JUMP
JAPA_GATE13_INTACT
.LONG S_JUMP_IF_FALSE,JAPA_BUSTOUT3_REV_INTACT,BUSTOUTS+(2*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE10_REV_ZAP, 4, 80
JAPA_BUSTOUT3_REV_INTACT
LLLW S_WAIT_FOR_COORD,XBASE,02940000H,1
LWL S_X_DECEL_LIMIT,-800H,-CRATE_XVEL ;Start to head back the other way
.LONG JAPA_ROW4_LEFT_CK_GATE12+M_JUMP
JAPA_ROW4_LEFT_CK_GATE12
LLLW S_WAIT_FOR_COORD,XBASE,15C0000H,1
.LONG S_JUMP_IF_FALSE,JAPA_ROW4_LEFT_CK_GATE11,GATES_BLOWN+(11*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE12_ZAP, 5, 80
JAPA_ROW4_LEFT_CK_GATE11
LLLW S_WAIT_FOR_COORD,XBASE,-690000H,1
.LONG S_JUMP_IF_FALSE,JAPA_ROW4_LEFT_GATE11_INTACT,GATES_BLOWN+(10*8)
.LONG S_JUMP_IF_FALSE,JAPA_GATE11_SOLO,GATES_BLOWN+(7*8)
.LONG S_MAKE_DUAL_BUTTONS
LWW JAPA_GATE11_ZAP, 5, 80
LWW JAPA_GATE8_REV_ZAP, 4, 80
.LONG JAPA_ROW4_LEFT_GATE8_INTACT+M_JUMP
JAPA_GATE11_SOLO
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE11_ZAP, 5, 80
.LONG JAPA_ROW4_LEFT_GATE8_INTACT+M_JUMP
JAPA_ROW4_LEFT_GATE11_INTACT
.LONG S_JUMP_IF_FALSE,JAPA_ROW4_LEFT_GATE8_INTACT,GATES_BLOWN+(7*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE8_REV_ZAP, 4, 80
JAPA_ROW4_LEFT_GATE8_INTACT
LLLW S_WAIT_FOR_COORD,XBASE,-790000H,1
LWL S_X_DECEL_LIMIT,800H,CRATE_XVEL ;Start to head back the other way
.LONG JAPA_ROW4_RIGHT_CK_GATE12+M_JUMP
*
* Cruising along Row 5
*
JAPA_ROW5_RIGHT_CK_GATE14
LLLW S_WAIT_FOR_COORD,XBASE,980000H,1
.LONG S_JUMP_IF_FALSE,JAPA_ROW5_RIGHT_CK_GATE12,GATES_BLOWN+(13*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE14_ZAP, 5, 80
JAPA_ROW5_RIGHT_CK_GATE12
LLLW S_WAIT_FOR_COORD,XBASE,10D0000H,1
.LONG S_JUMP_IF_FALSE,JAPA_ROW5_RIGHT_CK_GATE15,GATES_BLOWN+(11*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE12_REV_ZAP, 4, 80
JAPA_ROW5_RIGHT_CK_GATE15
LLLW S_WAIT_FOR_COORD,XBASE,1AD0000H,1
.LONG S_JUMP_IF_FALSE,JAPA_ROW5_RIGHT_CK_GATE16,GATES_BLOWN+(14*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE15_ZAP, 5, 80
JAPA_ROW5_RIGHT_CK_GATE16
LLLW S_WAIT_FOR_COORD,XBASE,2840000H,1
.LONG S_JUMP_IF_FALSE,JAPA_GATE16_INTACT,GATES_BLOWN+(15*8)
.LONG S_JUMP_IF_FALSE,JAPA_GATE16_SOLO,GATES_BLOWN+(12*8)
.LONG S_MAKE_DUAL_BUTTONS
LWW JAPA_GATE16_ZAP, 5, 80
LWW JAPA_GATE13_REV_ZAP, 4, 80
.LONG JAPA_GATE13_REV_INTACT+M_JUMP
JAPA_GATE16_SOLO
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE16_ZAP, 5, 80
.LONG JAPA_GATE13_REV_INTACT+M_JUMP
JAPA_GATE16_INTACT
.LONG S_JUMP_IF_FALSE,JAPA_GATE13_REV_INTACT,GATES_BLOWN+(12*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE13_REV_ZAP, 4, 80
JAPA_GATE13_REV_INTACT
LLLW S_WAIT_FOR_COORD,XBASE,02940000H,1
LWL S_X_DECEL_LIMIT,-800H,-CRATE_XVEL ;Start to head back the other way
.LONG JAPA_ROW5_LEFT_CK_GATE15+M_JUMP
JAPA_ROW5_LEFT_CK_GATE15
LLLW S_WAIT_FOR_COORD,XBASE,2210000H,1
.LONG S_JUMP_IF_FALSE,JAPA_ROW5_LEFT_CK_GATE12,GATES_BLOWN+(14*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE15_ZAP, 5, 80
JAPA_ROW5_LEFT_CK_GATE12
LLLW S_WAIT_FOR_COORD,XBASE,1690000H,1
.LONG S_JUMP_IF_FALSE,JAPA_ROW5_LEFT_CK_GATE14,GATES_BLOWN+(11*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE12_REV_ZAP, 4, 80
JAPA_ROW5_LEFT_CK_GATE14
LLLW S_WAIT_FOR_COORD,XBASE,0DE0000H,1
.LONG S_JUMP_IF_FALSE,JAPA_ROW5_LEFT_CK_GATE11,GATES_BLOWN+(13*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE14_ZAP, 5, 80
JAPA_ROW5_LEFT_CK_GATE11
LLLW S_WAIT_FOR_COORD,XBASE,-690000H,1
.LONG S_JUMP_IF_FALSE,JAPA_ROW5_LEFT_GATE11_INTACT,GATES_BLOWN+(10*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE11_REV_ZAP, 4, 80
JAPA_ROW5_LEFT_GATE11_INTACT
LLLW S_WAIT_FOR_COORD,XBASE,-790000H,1
LWL S_X_DECEL_LIMIT,800H,CRATE_XVEL ;Start to head back the other way
.LONG JAPA_ROW5_RIGHT_CK_GATE14+M_JUMP
*
* Cruising down row 6
*
JAPA_ROW6_LEFT_CK_GATE15
LLLW S_WAIT_FOR_COORD,XBASE,20C0000H,1
.LONG S_JUMP_IF_FALSE,JAPA_ROW6_LEFT_GATE15_INTACT,GATES_BLOWN+(14*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE15_REV_ZAP, 4, 80
JAPA_ROW6_LEFT_GATE15_INTACT
LLLW S_WAIT_FOR_COORD,XBASE,1FC0000H,1
LWL S_X_DECEL_LIMIT,800H,CRATE_XVEL ;Start to head back the other way
.LONG JAPA_ROW6_RIGHT_CK_GATE19+M_JUMP
JAPA_ROW6_LEFT_CK_GATE18
LLLW S_WAIT_FOR_COORD,XBASE,1480000H,1
.LONG S_JUMP_IF_FALSE,JAPA_ROW6_LEFT_CK_GATE14,GATES_BLOWN+(17*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE18_ZAP, 5, 60
JAPA_ROW6_LEFT_CK_GATE14
LLLW S_WAIT_FOR_COORD,XBASE,0F30000H,1
.LONG S_JUMP_IF_FALSE,JAPA_ROW6_LEFT_CK_GATE17,GATES_BLOWN+(13*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE14_REV_ZAP, 4, 80
JAPA_ROW6_LEFT_CK_GATE17
LLLW S_WAIT_FOR_COORD,XBASE,220000H,1
.LONG S_JUMP_IF_FALSE,JAPA_ROW6_LEFT_GATE17_INTACT,GATES_BLOWN+(16*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE17_ZAP, 5, 80
JAPA_ROW6_LEFT_GATE17_INTACT
LLLW S_WAIT_FOR_COORD,XBASE,120000H,1
LWL S_X_DECEL_LIMIT,800H,CRATE_XVEL ;Start to head back the other way
.LONG JAPA_ROW6_RIGHT_CK_GATE14+M_JUMP
JAPA_ROW6_RIGHT_CK_GATE14
LLLW S_WAIT_FOR_COORD,XBASE,670000H,1
.LONG S_JUMP_IF_FALSE,JAPA_ROW6_RIGHT_CK_GATE18,GATES_BLOWN+(13*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE14_REV_ZAP, 4, 80
JAPA_ROW6_RIGHT_CK_GATE18
LLLW S_WAIT_FOR_COORD,XBASE,0E40000H,1
.LONG S_JUMP_IF_FALSE,JAPA_ROW6_RIGHT_GATE18_INTACT,GATES_BLOWN+(17*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE18_ZAP, 5, 80
JAPA_ROW6_RIGHT_GATE18_INTACT
LLLW S_WAIT_FOR_COORD,XBASE,14B0000H,1
LWL S_X_DECEL_LIMIT,-800H,-CRATE_XVEL ;Start to head back the other way
.LONG JAPA_ROW6_LEFT_CK_GATE18+M_JUMP
JAPA_ROW6_RIGHT_CK_GATE19
LLLW S_WAIT_FOR_COORD,XBASE,2840000H,1
.LONG S_JUMP_IF_FALSE,JAPA_GATE19_INTACT,GATES_BLOWN+(18*8)
.LONG S_JUMP_IF_FALSE,JAPA_GATE19_SOLO,GATES_BLOWN+(15*8)
.LONG S_MAKE_DUAL_BUTTONS
LWW JAPA_GATE19_ZAP, 5, 80
LWW JAPA_GATE16_REV_ZAP, 4, 80
.LONG JAPA_GATE16_REV_INTACT+M_JUMP ;Jump to reverse direction
JAPA_GATE19_SOLO
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE19_ZAP, 5, 80
.LONG JAPA_GATE16_REV_INTACT+M_JUMP
JAPA_GATE19_INTACT
.LONG S_JUMP_IF_FALSE,JAPA_GATE16_REV_INTACT,GATES_BLOWN+(15*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE16_REV_ZAP, 4, 80
JAPA_GATE16_REV_INTACT
LLLW S_WAIT_FOR_COORD,XBASE,02940000H,1
LWL S_X_DECEL_LIMIT,-800H,-CRATE_XVEL ;Start to head back the other way
.LONG JAPA_ROW6_LEFT_CK_GATE15+M_JUMP
*
* Now we're in the exit area
*
JAPA_ROW7_RIGHT_CK_EXIT
LLLW S_WAIT_FOR_COORD,XBASE,0360000H,1
.LONG JAPA_ROW7_CENTER+M_JUMP
JAPA_ROW7_LEFT_CK_EXIT
LLLW S_WAIT_FOR_COORD,XBASE,2560000H,1
JAPA_ROW7_CENTER
.LONG S_DOZER_ACCEL ;Round corner and go backwards
.WORD 80 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 1460000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
LWWWLW S_ACCEL_TO_POINT,-240,146H,0,46000H,0 ;Line up last crates
LW S_DECEL_TO_STOP,4
LWWWLW S_ACCEL_TO_POINT,-10,146H,0,45800H,0 ;Line up last crates
.LONG S_STOP_SCROLL
LLW S_SET_WORD,CRATE_WAIT,45*60
JAPA_BUSTOUT5_INTACT
LW S_WAIT_HERE,1
.LONG S_BUSTOUT5_CK
.LONG S_JUMP_IF_FALSE,JAPA_BUSTOUT5_INTACT,BUSTOUTS+(4*8)
JAPA_BUSTOUT5_CONTINUE
.LONG S_CHANGE_PORTAL_GUNVECT, METAL_GUNVECT, DUMCOLL
LW S_DELETE_ENEMY_OID, OID_NONBOY
LW S_DELETE_ENEMY_OID, OID_NINJA
LLW S_DISPATCH_HERE,DUMMY_DISPATCH+M_WAIT,0 ;Dispatch end
LW S_WAIT_HERE,60
LWWWLW S_ACCEL_TO_POINT,-240,146H,0,4C090H,0 ;Line up last crates
LW S_DECEL_TO_STOP,4
* This is where we will portal through to the Vogel background
JAPA_PORTAL
.LONG S_SET_VECTOR_TABLE, JAP_FACTORY_VECT_TABLE
.LONG S_CREATE_PROCR
.WORD PID_IND
.LONG SND_BIG_DOOR,22,0,0,PROC_SND ;Delay start of big door
.WORD 0
LWL S_CREATE_PROC,PID_IND,PROC_FACTORY_XFADE
LLW S_SET_WORD,OBJENEMIES,0 ;Kill enemy gens
LLW S_SET_WORD,SOCRATES,0 ;No longer in the crates
.LONG S_SET_LONG, WAVE_IPLANE, JFACTR_BGND
.LONG S_ADJUST_YWORLD, GXTOWER1
.LONG S_LEAVE_UNIV ; Set up and enter new universe
.word 22 ; ticks until portal anim starts
.long GXTOWER1 ; name of universe
; .long -0C643H,0280000h,0D80000h ; Z, X, Y offsets
.long -0C643H,0160000h,0D80000h ; Z, X, Y offsets
.WORD 0
LW S_WAIT_HERE,80
.LONG S_SET_LONG, WYBUFFER, 0A80000H
LWL S_Z_ACCEL_LIMIT,8H,CRATE_ZVEL ;Head for first gate
LW S_WAIT_HERE,60
LW S_ADJUST_YHALF,6 ;Adjust YHALF
; LWWWLW S_ACCEL_TO_POINT,-140,28H,0D8H,-0D200H,0;Pull back so we are lined up
LWWWLW S_ACCEL_TO_POINT,-140,16H,0D8H,-0D200H,0;Pull back so we are lined up
LW S_DECEL_TO_STOP,4
; LWWWLW S_ACCEL_TO_POINT,-25,28H,0D8H,-0D000H,0 ;Pull back so we are lined up
LWWWLW S_ACCEL_TO_POINT,-25,16H,0D8H,-0D000H,0 ;Pull back so we are lined up
.LONG S_STOP_SCROLL
.LONG S_CALL, INIT_UCHECK_TBL
.LONG JAP_FACTORY_SCROLL+M_JUMP
.LONG 0
JAPA_GATE7_REV_ZAP
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 1000H,2A9H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 19000H,-3H,CRATE_ZVEL
.WORD M_Z
JAPA_GATE7_REV_GO
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
.LONG S_DOZER_ACCEL ;Round corner and go backwards
.WORD 60 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 2A90000H ;X Position target
.LONG 0 ;X Velocity target
.LONG -CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
LLW S_WAIT_FOR_ZREL,ROW2_Z2,1 ;Get to the corner
.LONG S_DOZER_ACCEL ;Round corner and go left
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW2_Z2 ;Z Position target
.LONG -CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
LW S_SET_WHAREA, AROW2B ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
JAPA_BUSTOUT1_REV_WAIT
.LONG S_JUMP_IF_FALSE,JAPA_GATE6_LEFT_INTACT,GATES_BLOWN+(5*8)
LLLW S_WAIT_FOR_COORD,XBASE,022E0000H,1
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE6_ZAP, 5, 80
JAPA_GATE6_LEFT_INTACT
LLLW S_WAIT_FOR_COORD,XBASE,01220000H,1
.LONG S_JUMP_IF_FALSE,JAPA_BUSTOUT1_INTACT2,BUSTOUTS+(0*8)
.LONG S_MAKE_DUAL_BUTTONS
LWW JAPA_BUSTOUT1_ZAP, 5, 80
LWW JAPA_GATE3_REV_ZAP, 4, 80
.LONG JAPA_ROW2_2_LEFT_REV+M_JUMP
JAPA_BUSTOUT1_INTACT2
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE3_REV_ZAP, 4, 80
JAPA_ROW2_2_LEFT_REV
LLLW S_WAIT_FOR_COORD,XBASE,01120000H,1
LWL S_X_DECEL_LIMIT,800H,CRATE_XVEL ;Start to head back the other way
.LONG JAPA_ROW2_RIGHT_CK_GATE6+M_JUMP ;Jump wait for next gate
JAPA_GATE3_REV_ZAP
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 1000H,0F9H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL ROW2_Z2,-3H,CRATE_ZVEL
.WORD M_Z
JAPA_GATE3_REV_GO
.LONG S_DOZER_ACCEL ;Round corner and go backwards
.WORD 60 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 0F90000H ;X Position target
.LONG 0 ;X Velocity target
.LONG -CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
LLW S_WAIT_FOR_ZREL, 0C200H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,5980H,1 ;Get to the corner
.LONG S_DOZER_ACCEL ;Round corner and go left
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW1_Z ;Z Position target
.LONG -CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
LW S_SET_WHAREA, AROW1 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
.long JAPA_GATE2_WAIT+M_JUMP ;Jump to first decision point
*Come here to zap us right through the first gate
JAPA_GATE1_ZAP
; .LONG S_SET_LONG, ENEMY_ZBASE, ROW1_Z ;Set enemy offset Z
LW S_SET_WHAREA, AROW1 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_FORK_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,1AH,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL -1000H,-2H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 01A0000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
.long JAPA_GATE1_PASS+M_JUMP ;Jump to Gate 1 pass through
*Come here to zap us right through Gate 2
JAPA_GATE2_ZAP
LW S_SET_WHAREA, AROW2A ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,-0F6H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 8130H,-2H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG -0F60000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
; .LONG S_SET_LONG, ENEMY_ZBASE, ROW2_Z1 ;Set enemy offset Z
LLW S_WAIT_FOR_ZREL,9730H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW2_Z1,1 ;Get to inner square
LW S_DECEL_TO_STOP,4
LWWWLW S_ACCEL_TO_POINT,-25,-0F6H,0,ROW2_Z1,0 ;Pull back so we are lined up
.LONG S_STOP_SCROLL
LW S_WAIT_HERE,10
.LONG S_MAKE_DECISION ;FUNCTION
LW JAP_BOXA_1_LEFT,0ffffh ;-X, Count
LW JAP_BOXA_1_RIGHT,0ffffh ;+X, Count
LW 0,0 ;-Y, Count
LW 0,0 ;+Y, Count
LW 0,0 ;-Z, Count
LW 0,0 ;+Z, Count
.long 0
*Come here to zap us right through Gate 3
JAPA_GATE3_ZAP
LW S_SET_WHAREA, AROW2B ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,0F9H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 8130H,-2H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 0F90000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
.long JAPA_GATE3_PASS+M_JUMP ;Jump to gate pass through
*Come here to zap us right through Gate 4
JAPA_GATE4_ZAP
LW S_SET_WHAREA, AROW3 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,-248H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 11131H,-2H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG -2480000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
; .LONG S_SET_LONG, ENEMY_ZBASE, ROW3_Z ;Set enemy offset Z
LLW S_WAIT_FOR_ZREL,12731H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,18608H,1 ;Get to the corner
.LONG S_DOZER_ACCEL ;Round corner and go right
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW3_Z ;Z Position target
.LONG CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
.LONG JAPA_ROW3_RIGHT_CK_GATE8+M_JUMP ;Jump wait for right end
*Come here to zap us right through Gate 5
JAPA_GATE5_ZAP
LW S_SET_WHAREA, AROW3 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_FORK_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,-2FH,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 11131H,-2H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG -2F0000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
; .LONG S_SET_LONG, ENEMY_ZBASE, ROW3_Z ;Set enemy offset Z
LLW S_WAIT_FOR_ZREL,12731H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW3_Z,1 ;Get to back row
LW S_DECEL_TO_STOP,4
LWWWLW S_ACCEL_TO_POINT,-25,-02FH,0,ROW3_Z,0 ;Pull back so we are lined up
.LONG S_STOP_SCROLL
LW S_WAIT_HERE,10
.LONG S_MAKE_DECISION ;FUNCTION
LW JAPA_GATE5_LEFT,0ffffh ;-X, Count
LW JAPA_GATE5_RIGHT,0ffffh ;+X, Count
LW 0,0 ;-Y, Count
LW 0,0 ;+Y, Count
LW 0,0 ;-Z, Count
LW 0,0 ;+Z, Count
JAPA_GATE5_LEFT
LWL S_X_ACCEL_LIMIT,-1000H,-CRATE_XVEL ;Move left from gate 5
.long JAPA_ROW3_LEFT_CK_GATE8+M_JUMP ;Wait for next gate
JAPA_GATE5_RIGHT
LWL S_X_ACCEL_LIMIT,1000H,CRATE_XVEL ;Move right from gate 5
.long JAPA_ROW3_RIGHT_CK_GATE9+M_JUMP ;Wait for next gate
JAPA_GATE5_REV_ZAP
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 1000H,-2FH,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 175B0H,-3H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Round corner and go backwards
.WORD 60 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG -2F0000H ;X Position target
.LONG 0 ;X Velocity target
.LONG -CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
LLW S_WAIT_FOR_ZREL,15200H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW2_Z1,1 ;Get to the corner
.LONG S_DOZER_ACCEL ;Round corner and go left
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW2_Z1 ;Z Position target
.LONG -CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
LW S_SET_WHAREA, AROW2A ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
JAPA_ROW2_LEFT_CK_GATE2
.LONG S_JUMP_IF_FALSE,JAPA_GATE4_WAIT,GATES_BLOWN+(1*8)
LLLW S_WAIT_FOR_COORD,XBASE,-0B60000H,1
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE2_REV_ZAP, 4, 80
.LONG JAPA_GATE4_WAIT+M_JUMP ;Jump to wait for Gate 5
*Come here to zap us right through Gate 6
JAPA_GATE6_ZAP
LW S_SET_WHAREA, AROW3 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,1EAH,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 153A0H,-2H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 1EA0000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_WAIT_FOR_ZREL,169A0H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW3_Z,1 ;Get to back row
LW S_DECEL_TO_STOP,4
LWWWLW S_ACCEL_TO_POINT,-25,1EAH,0,ROW3_Z,0 ;Pull back so we are lined up
.LONG S_STOP_SCROLL
LW S_WAIT_HERE,10
.LONG S_MAKE_DECISION ;FUNCTION
LW JAPA_GATE6_LEFT,0FFFFH ;-X, Count
LW JAPA_GATE6_RIGHT,0FFFFH ;+X, Count
LW 0,0 ;-Y, Count
LW 0,0 ;+Y, Count
LW 0,0 ;-Z, Count
LW 0,0 ;+Z, Count
JAPA_GATE6_LEFT
LWL S_X_ACCEL_LIMIT,-1000H,-CRATE_XVEL ;Move left from gate 6
.long JAPA_ROW3_LEFT_CK_GATE9+M_JUMP ;Wait for next gate
JAPA_GATE6_RIGHT
LWL S_X_ACCEL_LIMIT,1000H,CRATE_XVEL ;Move right from gate 6
.long JAPA_ROW3_RIGHT_GATE6_INTACT+M_JUMP ;Wait for next gate
*Come here to zap us backwards through Gate 6
JAPA_GATE6_REV_ZAP
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 1000H,1EAH,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 19000H,-3H,CRATE_ZVEL
.WORD M_Z
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
.LONG S_DOZER_ACCEL ;Round corner and go backwards
.WORD 60 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 1EA0000H ;X Position target
.LONG 0 ;X Velocity target
.LONG -CRATE_ZVEL << ZFRAC ;Z Velocity target
LW S_WAIT_HERE,6
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW2_Z2,1 ;Get to the corner
LW S_DECEL_TO_STOP,4
LWWWLW S_ACCEL_TO_POINT,-25,1EAH,0,ROW2_Z2,0 ;Pull up so we are lined up
.LONG S_STOP_SCROLL
LW S_WAIT_HERE,10
LW S_SET_WHAREA, AROW2B ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
.LONG S_MAKE_DECISION ;FUNCTION
LW JAPA_GATE6_REV_LEFT,0FFFFH ;-X, Count
LW JAPA_GATE6_REV_RIGHT,0FFFFH ;+X, Count
LW 0,0 ;-Y, Count
LW 0,0 ;+Y, Count
LW 0,0 ;-Z, Count
LW 0,0 ;+Z, Count
JAPA_GATE6_REV_LEFT
LWL S_X_ACCEL_LIMIT,-1000H,-CRATE_XVEL ;Move left from gate 6
.long JAPA_GATE6_LEFT_INTACT+M_JUMP ;Jump to gate pass through
JAPA_GATE6_REV_RIGHT
LWL S_X_ACCEL_LIMIT,1000H,CRATE_XVEL ;Move right from gate 6
.long JAPA_GATE6_RIGHT_INTACT+M_JUMP ;Jump to gate pass through
*Come here to zap us right through Gate 7
JAPA_GATE7_ZAP
LW S_SET_WHAREA, AROW3 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,2A9H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 153A0H,-2H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 2A90000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_WAIT_FOR_ZREL,17030H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,18608H,1 ;Get to the corner
.LONG S_DOZER_ACCEL ;Round corner and go left
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW3_Z ;Z Position target
.LONG -CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
.LONG S_JUMP_IF_FALSE,JAPA_ROW3_LEFT_CK_GATE6,GATES_BLOWN+(9*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE10_ZAP, 5, 60
.long JAPA_ROW3_LEFT_CK_GATE6+M_JUMP ;Jump to exit line up
*Come here to zap us right through Gate 8
JAPA_GATE8_ZAP
LW S_SET_WHAREA, AROW4 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,-97H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 1B930H,-2H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG -970000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_WAIT_FOR_ZREL,1CF30H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW4_Z-3000H,1 ;Get to the corner
.LONG S_JUMP_IF_FALSE,JAPA_GATE8_ZAP_ROUND,GATES_BLOWN+(10*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE11_GO, 5, 60
JAPA_GATE8_ZAP_ROUND
LLW S_WAIT_FOR_ZREL,ROW4_Z-0A90H,1 ;Get to the corner
.LONG S_DOZER_ACCEL ;Round corner and go right
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW4_Z ;Z Position target
.LONG CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
.LONG JAPA_ROW4_RIGHT_CK_GATE12+M_JUMP
JAPA_GATE8_REV_ZAP
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 1000H,-97H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL ROW4_Z,-3H,CRATE_ZVEL
.WORD M_Z
JAPA_GATE8_REV_GO
.LONG S_DOZER_ACCEL ;Round corner and go backwards
.WORD 60 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG -970000H ;X Position target
.LONG 0 ;X Velocity target
.LONG -CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
LLW S_WAIT_FOR_ZREL,1F9FFH,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW3_Z,1 ;Get to the corner
LWWWLW S_ACCEL_TO_POINT,-5,-97H,0,ROW3_Z,0 ;Pull back so we are lined up
.LONG S_STOP_SCROLL
LW S_WAIT_HERE,10
LW S_SET_WHAREA, AROW3 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
.LONG S_MAKE_DECISION ;FUNCTION
LW JAPA_GATE8_LEFT,0ffffh ;-X, Count
LW JAPA_GATE8_RIGHT,0ffffh ;+X, Count
LW 0,0 ;-Y, Count
LW 0,0 ;+Y, Count
LW 0,0 ;-Z, Count
LW 0,0 ;+Z, Count
JAPA_GATE8_LEFT
LWL S_X_ACCEL_LIMIT,-1000H,-CRATE_XVEL ;Move left from gate 6
.long JAPA_ROW3_LEFT_CK_GATE4+M_JUMP ;Jump to next gate check
JAPA_GATE8_RIGHT
LWL S_X_ACCEL_LIMIT,1000H,CRATE_XVEL ;Move right from gate 6
.long JAPA_ROW3_RIGHT_CK_GATE5+M_JUMP ;Jump to next gate check
*Come here to zap us right through Gate 9
JAPA_GATE9_FROM_STOP
LWWWLW S_ACCEL_TO_POINT,-60,0F0H,0,1B930H,0
.LONG JAPA_GATE9_GO+M_JUMP
JAPA_GATE9_ZAP
LLW S_DISPATCH_HERE,DUMMY_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,0F0H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 1B930H,-2H,CRATE_ZVEL
.WORD M_Z
JAPA_GATE9_GO
.LONG S_CREATE_PROCR
.word PID_IND
.long 0,0,0,02712EH,FLOAT_ZFAR
.word 0
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 0F00000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_WAIT_FOR_ZREL,1C600H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,1F200H,1 ;Get to the end
LW S_DECEL_TO_STOP,4
.LONG S_STOP_SCROLL
LLW S_DISPATCH_HERE,DEADEND_DISPATCH+M_WAIT,0
LW S_WAIT_HERE,60
.LONG S_JUMP_IF_FALSE,JAPA_GATE9_NOMAP,BUSTOUTS+(1*8)
LLW S_DISPATCH_HERE,DUMMY_DISPATCH+M_WAIT,0
LW S_WAIT_HERE,300
JAPA_GATE9_NOMAP
LWWWLW S_ACCEL_TO_POINT,-25,0F0H,0,1F000H,0
LLW S_DISPATCH_HERE,DUMMY_DISPATCH+M_WAIT,0
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,1B800H,1
LLW S_SET_WORD, SCROLLKILL, 1 ;STOP FLOATING ZFAR
.LONG S_JUMP_IF_TRUE,JAPA_GATE9_DEC2,BUSTOUTS+(0*8)
LLW S_WAIT_FOR_ZREL,1A198H,1 ;Get to the row
LW S_DECEL_TO_STOP,4
LWWWLW S_ACCEL_TO_POINT,-5,0F0H,0,ROW3_Z,0 ;Pull back so we are lined up
.LONG S_STOP_SCROLL
LW S_WAIT_HERE,10
LW S_SET_WHAREA, AROW3 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
.LONG S_MAKE_DECISION ;FUNCTION
LW JAPA_GATE9_LEFT,0ffffh ;-X, Count
LW JAPA_GATE9_RIGHT,0ffffh ;+X, Count
LW 0,0 ;-Y, Count
LW 0,0 ;+Y, Count
LW 0,0 ;-Z, Count
LW 0,0 ;+Z, Count
JAPA_GATE9_DEC2
.LONG S_MAKE_DUAL_BUTTONS
LWW JAPA_ROW3_GATE9_LEFT_ZAP, 0, 60
LWW JAPA_ROW3_GATE9_RIGHT_ZAP, 1, 60
.LONG JAPA_BUSTOUT1_REV_GO+M_JUMP
JAPA_GATE9_LEFT
LWL S_X_ACCEL_LIMIT,-1000H,-CRATE_XVEL ;Move left from gate
.long JAPA_ROW3_LEFT_CK_GATE5+M_JUMP ;Jump to next gate check
JAPA_GATE9_RIGHT
LWL S_X_ACCEL_LIMIT,1000H,CRATE_XVEL ;Move right from gate
.long JAPA_ROW3_RIGHT_CK_GATE6+M_JUMP ;Jump to next gate check
*Come here to zap us right through Gate 10
JAPA_GATE10_ZAP
.LONG S_JUMP_IF_TRUE,JAPA_BUSTOUT3_NO_FLOAT_ZFAR,BUSTOUTS+(2*8)
.LONG S_CREATE_PROCR
.word PID_IND
.long 0,0,0,029FBCH,FLOAT_ZFAR
.word 0
JAPA_BUSTOUT3_NO_FLOAT_ZFAR
.LONG S_SET_LONG, YSCROLL, 0H ;Clear for safety
LLW S_DISPATCH_HERE,DUMMY_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,2A9H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 1B930H,-2H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 2A90000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_WAIT_FOR_ZREL,1CF30H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
.LONG S_JUMP_IF_FALSE,JAPA_BUSTOUT3_INTACT,BUSTOUTS+(2*8)
LLW S_SET_WORD, SCROLLKILL, 1 ;STOP FLOATING ZFAR
JAPA_BUSTOUT3_PASS
LW S_SET_WHAREA, AROW4 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
LLW S_WAIT_FOR_ZREL,ROW4_Z-3000H,1 ;Get to the corner
.LONG S_JUMP_IF_FALSE,JAPA_GATE10_ZAP_ROUND,GATES_BLOWN+(12*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE13_GO, 5, 60
JAPA_GATE10_ZAP_ROUND
LLW S_WAIT_FOR_ZREL,ROW4_Z-0A90H,1 ;Get to the corner
.LONG S_DOZER_ACCEL ;Round corner and go right
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW4_Z ;Z Position target
.LONG -CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
.LONG JAPA_ROW4_LEFT_CK_GATE12+M_JUMP
JAPA_BUSTOUT3_INTACT
LLW S_WAIT_FOR_ZREL,23000H,1 ;Get to the end
.LONG S_JUMP_IF_TRUE,JAPA_BUSTOUT3_LAST_CHANCE,BUSTOUTS+(2*8)
LW S_DECEL_TO_STOP,5
.LONG S_JUMP_IF_TRUE,JAPA_BUSTOUT3_LAST_CHANCE,BUSTOUTS+(2*8)
LLW S_DISPATCH_HERE,DEADEND_DISPATCH+M_WAIT,0
LWWWLW S_ACCEL_TO_POINT,-80,2A9H,0,1FAD0H,0
LLW S_DISPATCH_HERE,DUMMY_DISPATCH+M_WAIT,0
JAPA_GATE10_REV_JUMP
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,1B930H,1 ;Hit the ground running
LLW S_SET_WORD, SCROLLKILL, 1 ;STOP FLOATING ZFAR
LW S_SET_WHAREA, AROW3 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
.LONG S_JUMP_IF_FALSE,JAPA_GATE10_REV_WAIT_ROUND,GATES_BLOWN+(6*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_ROW3_LEFT_ZAP, 0, 60
.long JAPA_GATE7_REV_ZAP+M_JUMP ;Continue reversing through gate
JAPA_GATE10_REV_WAIT_ROUND
LLW S_WAIT_FOR_ZREL,ROW3_Z+0A90H,1 ;Get to the corner
; .LONG S_JUMP_IF_TRUE,JAPA_GATE10_PULL_CHOICE,GATES_BLOWN+(6*8)
JAPA_GATE10_REV_ROUND
.LONG S_SET_LONG, YSCROLL, 0H ;Clear for safety
.LONG S_DOZER_ACCEL ;Round corner and go left
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW3_Z ;Z Position target
.LONG -CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
.LONG JAPA_ROW3_LEFT_CK_GATE6+M_JUMP ;Jump to wait for left side of backrow
JAPA_BUSTOUT3_LAST_CHANCE
LLW S_SET_WORD, SCROLLKILL, 1 ;STOP FLOATING ZFAR
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 60 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 2A90000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
.LONG JAPA_BUSTOUT3_PASS+M_JUMP ;Jump, wait for right side of ROW 4
JAPA_GATE10_REV_ZAP
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 1000H,2A9H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL ROW4_Z,-3H,CRATE_ZVEL
.WORD M_Z
JAPA_GATE10_REV_GO
.LONG S_DOZER_ACCEL ;Round corner and go backwards
.WORD 60 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 2A90000H ;X Position target
.LONG 0 ;X Velocity target
.LONG -CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
LLW S_WAIT_FOR_ZREL,1F000H,1
.LONG JAPA_GATE10_REV_JUMP+M_JUMP
;JAPA_GATE10_PULL_CHOICE
; LW S_DECEL_TO_STOP,4
; LWWWLW S_ACCEL_TO_POINT,15,2A9H,0,ROW3_Z,0 ;Pull back so we are lined up
; .LONG S_STOP_SCROLL
; LW S_WAIT_HERE,10
; .LONG S_MAKE_DECISION ;FUNCTION
; LW JAPA_GATE10_PULL_LEFT,0ffffh ;-X, Count
; LW 0,0 ;+X, Count
; LW 0,0 ;-Y, Count
; LW 0,0 ;+Y, Count
; LW JAPA_GATE7_REV_GO,0FFFFH ;-Z, Count
; LW 0,0 ;+Z, Count
;JAPA_GATE10_PULL_LEFT
; LWL S_X_ACCEL_LIMIT,-1000H,-CRATE_XVEL ;Move left from gate 10
; .long JAPA_ROW3_LEFT_CK_GATE6+M_JUMP ;Jump to next gate check
*Come here to zap us right through Gate 11
JAPA_GATE11_ZAP
LW S_SET_WHAREA, AROW5 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,-8EH,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 29D9DH,-2H,CRATE_ZVEL
.WORD M_Z
JAPA_GATE11_GO
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG -8E0000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_WAIT_FOR_ZREL,2B38DH,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW5_Z-0A90H,1 ;Get to the corner
.LONG S_DOZER_ACCEL ;Round corner and go right
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW5_Z ;Z Position target
.LONG CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
.LONG JAPA_ROW5_RIGHT_CK_GATE14+M_JUMP
JAPA_GATE11_REV_ZAP
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 1000H,-8EH,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL ROW5_Z,-3H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Pull straight back now
.WORD 60 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG -8E0000H ;X Position target
.LONG 0 ;X Velocity target
.LONG -CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
LLW S_WAIT_FOR_ZREL,2D200H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW4_Z+0A90H,1 ;Get to the corner
.LONG S_JUMP_IF_FALSE,JAPA_GATE11_REV_ROUND,GATES_BLOWN+(7*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_ROW4_RIGHT_ZAP, 1, 80
LWWWLW S_ACCEL_TO_POINT,-20,-97H,0,ROW4_Z,0
LW S_SET_WHAREA, AROW4 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
.long JAPA_GATE8_REV_GO+M_JUMP ;Jump to Rev 8
JAPA_GATE11_REV_ROUND
.LONG S_DOZER_ACCEL ;Round corner and go right
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW4_Z ;Z Position target
.LONG CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
.LONG JAPA_ROW4_RIGHT_CK_GATE12+M_JUMP
*Come here to zap us right through Gate 12
JAPA_GATE12_ZAP
LW S_SET_WHAREA, AROW5 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_FORK_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,122H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 29D8DH,-2H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 1220000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_WAIT_FOR_ZREL,2B38DH,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW5_Z,1 ;Get to the next row
LW S_DECEL_TO_STOP,4
LWWWLW S_ACCEL_TO_POINT,-25,122H,0,ROW5_Z,0 ;Pull back so we are lined up
.LONG S_STOP_SCROLL
LW S_WAIT_HERE,10
.LONG S_MAKE_DECISION ;FUNCTION
LW JAPA_GATE12_LEFT,0ffffh ;-X, Count
LW JAPA_GATE12_RIGHT,0ffffh ;+X, Count
LW 0,0 ;-Y, Count
LW 0,0 ;+Y, Count
LW 0,0 ;-Z, Count
LW 0,0 ;+Z, Count
JAPA_GATE12_LEFT
LWL S_X_ACCEL_LIMIT,-1000H,-CRATE_XVEL ;Move left from gate
.long JAPA_ROW5_LEFT_CK_GATE14+M_JUMP ;Wait for next gate
JAPA_GATE12_RIGHT
LWL S_X_ACCEL_LIMIT,1000H,CRATE_XVEL ;Move right from gate
.long JAPA_ROW5_RIGHT_CK_GATE15+M_JUMP ;Wait for next gate
JAPA_GATE12_REV_ZAP
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,122H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL ROW5_Z,-2H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Pull straight back now
.WORD 60 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 1220000H ;X Position target
.LONG 0 ;X Velocity target
.LONG -CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
LLW S_WAIT_FOR_ZREL,2D200H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW4_Z,1 ;Get to the corner
LW S_DECEL_TO_STOP,4
LWWWLW S_ACCEL_TO_POINT,-25,122H,0,ROW4_Z,0 ;Pull back so we are lined up
.LONG S_STOP_SCROLL
LW S_WAIT_HERE,10
LW S_SET_WHAREA, AROW4 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
.LONG S_MAKE_DECISION ;FUNCTION
LW JAPA_GATE12_REV_LEFT,0ffffh ;-X, Count
LW JAPA_GATE12_REV_RIGHT,0ffffh ;+X, Count
LW 0,0 ;-Y, Count
LW 0,0 ;+Y, Count
LW 0,0 ;-Z, Count
LW 0,0 ;+Z, Count
JAPA_GATE12_REV_LEFT
LWL S_X_ACCEL_LIMIT,-1000H,-CRATE_XVEL ;Move left from gate
.long JAPA_ROW4_LEFT_CK_GATE11+M_JUMP ;Wait for next gate
JAPA_GATE12_REV_RIGHT
LWL S_X_ACCEL_LIMIT,1000H,CRATE_XVEL ;Move right from gate
.long JAPA_ROW4_RIGHT_CK_GATE13+M_JUMP ;Wait for next gate
*Come here to zap us right through Gate 13
JAPA_GATE13_ZAP
LW S_SET_WHAREA, AROW5 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,2A9H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 29D8DH,-2H,CRATE_ZVEL
.WORD M_Z
JAPA_GATE13_GO
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 2A90000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_WAIT_FOR_ZREL,2B38DH,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW5_Z-3000H,1 ;Get to the corner
.LONG S_JUMP_IF_FALSE,JAPA_GATE13_ZAP_ROUND,GATES_BLOWN+(15*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE16_GO, 5, 60
JAPA_GATE13_ZAP_ROUND
LLW S_WAIT_FOR_ZREL,ROW5_Z-0A90H,1 ;Get to the corner
.LONG S_DOZER_ACCEL ;Round corner and go right
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW5_Z ;Z Position target
.LONG -CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
.LONG JAPA_ROW5_LEFT_CK_GATE15+M_JUMP
JAPA_GATE13_REV_ZAP
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 1000H,2A9H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL ROW5_Z,-3H,CRATE_ZVEL
.WORD M_Z
JAPA_GATE13_REV_GO
.LONG S_DOZER_ACCEL ;Pull straight back now
.WORD 60 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 2A90000H ;X Position target
.LONG 0 ;X Velocity target
.LONG -CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
LLW S_WAIT_FOR_ZREL,2D200H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW4_Z+0A90H,1 ;Get to the corner
LW S_SET_WHAREA, AROW4 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
.LONG S_JUMP_IF_FALSE,JAPA_GATE13_REV_ROUND,BUSTOUTS+(2*8)
.LONG S_JUMP_IF_FALSE,JAPA_GATE13_REV_ROUND,GATES_BLOWN+(9*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_ROW4_LEFT_ZAP, 0, 60
.long JAPA_GATE10_REV_GO+M_JUMP ;Continue reversing
JAPA_GATE13_REV_ROUND
.LONG S_DOZER_ACCEL ;Round corner and go right
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW4_Z ;Z Position target
.LONG -CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
.LONG JAPA_ROW4_LEFT_CK_GATE12+M_JUMP
*Come here to zap us right through Gate 14
JAPA_GATE14_ZAP
LW S_SET_WHAREA, AROW6L ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,0C5H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 32D9DH,-2H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 1220000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_WAIT_FOR_ZREL,3439DH,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW6_Z,1 ;Get to the next row
LW S_DECEL_TO_STOP,4
LWWWLW S_ACCEL_TO_POINT,-25,0C5H,0,ROW6_Z,0 ;Pull back so we are lined up
.LONG S_STOP_SCROLL
LW S_WAIT_HERE,10
.LONG S_MAKE_DECISION ;FUNCTION
LW JAPA_GATE14_LEFT,0ffffh ;-X, Count
LW JAPA_GATE14_RIGHT,0ffffh ;+X, Count
LW 0,0 ;-Y, Count
LW 0,0 ;+Y, Count
LW 0,0 ;-Z, Count
LW 0,0 ;+Z, Count
JAPA_GATE14_LEFT
LWL S_X_ACCEL_LIMIT,-1000H,-CRATE_XVEL ;Move left from gate
.long JAPA_ROW6_LEFT_CK_GATE17+M_JUMP ;Wait for next gate
JAPA_GATE14_RIGHT
LWL S_X_ACCEL_LIMIT,1000H,CRATE_XVEL ;Move right from gate
.long JAPA_ROW6_RIGHT_CK_GATE18+M_JUMP ;Wait for next gate
JAPA_GATE14_REV_ZAP
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,0C5H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL ROW6_Z,-2H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Pull straight back now
.WORD 60 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 0C50000H ;X Position target
.LONG 0 ;X Velocity target
.LONG -CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
LLW S_WAIT_FOR_ZREL,36200H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW5_Z,1 ;Get to the corner
LW S_DECEL_TO_STOP,4
LWWWLW S_ACCEL_TO_POINT,-25,0C5H,0,ROW5_Z,0 ;Pull back so we are lined up
.LONG S_STOP_SCROLL
LW S_WAIT_HERE,10
LW S_SET_WHAREA, AROW5 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
.LONG S_MAKE_DECISION ;FUNCTION
LW JAPA_GATE14_REV_LEFT,0ffffh ;-X, Count
LW JAPA_GATE14_REV_RIGHT,0ffffh ;+X, Count
LW 0,0 ;-Y, Count
LW 0,0 ;+Y, Count
LW 0,0 ;-Z, Count
LW 0,0 ;+Z, Count
JAPA_GATE14_REV_LEFT
LWL S_X_ACCEL_LIMIT,-1000H,-CRATE_XVEL ;Move left from gate
.long JAPA_ROW5_LEFT_CK_GATE11+M_JUMP ;Wait for next gate
JAPA_GATE14_REV_RIGHT
LWL S_X_ACCEL_LIMIT,1000H,CRATE_XVEL ;Move right from gate
.long JAPA_ROW5_RIGHT_CK_GATE12+M_JUMP ;Wait for next gate
*Come here to zap us right through Gate 15
JAPA_GATE15_ZAP
LW S_SET_WHAREA, AROW6R ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,1E7H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 32D9DH,-2H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 1E70000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_WAIT_FOR_ZREL,3439DH,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW6_Z-0A90H,1 ;Get to the next row
.LONG S_DOZER_ACCEL ;Round corner and go right
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW6_Z ;Z Position target
.LONG CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
.LONG JAPA_ROW6_RIGHT_CK_GATE19+M_JUMP
JAPA_GATE15_REV_ZAP
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,1E7H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL ROW6_Z,-2H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Pull straight back now
.WORD 60 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 1E70000H ;X Position target
.LONG 0 ;X Velocity target
.LONG -CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
LLW S_WAIT_FOR_ZREL,36200H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW5_Z,1 ;Get to the corner
LW S_DECEL_TO_STOP,4
LWWWLW S_ACCEL_TO_POINT,-25,1E7H,0,ROW5_Z,0 ;Pull back so we are lined up
.LONG S_STOP_SCROLL
LW S_WAIT_HERE,10
LW S_SET_WHAREA, AROW5 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
.LONG S_MAKE_DECISION ;FUNCTION
LW JAPA_GATE15_REV_LEFT,0ffffh ;-X, Count
LW JAPA_GATE15_REV_RIGHT,0ffffh ;+X, Count
LW 0,0 ;-Y, Count
LW 0,0 ;+Y, Count
LW 0,0 ;-Z, Count
LW 0,0 ;+Z, Count
JAPA_GATE15_REV_LEFT
LWL S_X_ACCEL_LIMIT,-1000H,-CRATE_XVEL ;Move left from gate
.long JAPA_ROW5_LEFT_CK_GATE14+M_JUMP ;Wait for next gate
JAPA_GATE15_REV_RIGHT
LWL S_X_ACCEL_LIMIT,1000H,CRATE_XVEL ;Move right from gate
.long JAPA_ROW5_RIGHT_CK_GATE16+M_JUMP ;Wait for next gate
*Come here to zap us right through Gate 16
JAPA_GATE16_ZAP
LW S_SET_WHAREA, AROW6R ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,2A9H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 32D9DH,-2H,CRATE_ZVEL
.WORD M_Z
JAPA_GATE16_GO
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 2A90000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_WAIT_FOR_ZREL,3439DH,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW6_Z-3000H,1 ;Get to the corner
.LONG S_JUMP_IF_FALSE,JAPA_GATE16_ZAP_ROUND,GATES_BLOWN+(18*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_GATE19_GO, 5, 60
JAPA_GATE16_ZAP_ROUND
LLW S_WAIT_FOR_ZREL,ROW6_Z-0A90H,1 ;Get to the corner
.LONG S_DOZER_ACCEL ;Round corner and go right
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW6_Z ;Z Position target
.LONG -CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
.LONG JAPA_ROW6_LEFT_CK_GATE15+M_JUMP
JAPA_GATE16_REV_ZAP
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 1000H,2A9H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL ROW6_Z,-3H,CRATE_ZVEL
.WORD M_Z
JAPA_GATE16_REV_GO
.LONG S_DOZER_ACCEL ;Pull straight back now
.WORD 60 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 2A90000H ;X Position target
.LONG 0 ;X Velocity target
.LONG -CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
LLW S_WAIT_FOR_ZREL,36200H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW5_Z+0A90H,1 ;Get to the corner
LW S_SET_WHAREA, AROW5 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
.LONG S_JUMP_IF_FALSE,JAPA_GATE16_REV_ROUND,GATES_BLOWN+(12*8)
LLWW S_MAKE_SOLO_BUTTON, JAPA_ROW5_LEFT_ZAP, 0, 60
.long JAPA_GATE13_REV_GO+M_JUMP ;Continue reversing
JAPA_GATE16_REV_ROUND
.LONG S_DOZER_ACCEL ;Round corner and go right
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW5_Z ;Z Position target
.LONG -CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
.LONG JAPA_ROW5_LEFT_CK_GATE15+M_JUMP
*Come here to zap us right through Gate 17
JAPA_GATE17_ZAP
.LONG S_CREATE_PROCR
.word PID_IND
.long 0,0,0,04692FH,FLOAT_ZFAR
.word 0
LLW S_DISPATCH_HERE,DUMMY_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,-3H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 3A835H,-2H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG -30000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_WAIT_FOR_ZREL,3C800H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,40000H,1 ;Get to the end
.LONG S_JUMP_IF_FALSE,JAPA_BUSTOUT4_INTACT,BUSTOUTS+(3*8)
LLW S_SET_WORD, SCROLLKILL, 1 ;STOP FLOATING ZFAR
JAPA_BUSTOUT4_PASS
LW S_SET_WHAREA, AROW7 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
LLW S_WAIT_FOR_ZREL,ROW7_Z-0A90H,1 ;Get to the corner
.LONG S_DOZER_ACCEL ;Round corner and go right
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW7_Z ;Z Position target
.LONG CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
.LONG JAPA_ROW7_RIGHT_CK_EXIT+M_JUMP
JAPA_BUSTOUT4_INTACT
LW S_DECEL_TO_STOP,5
.LONG S_JUMP_IF_TRUE,JAPA_BUSTOUT4_LAST_CHANCE,BUSTOUTS+(3*8)
LLW S_DISPATCH_HERE,DEADEND_DISPATCH+M_WAIT,0
LWWWLW S_ACCEL_TO_POINT,-60,-3H,0,3F000H,0
LLW S_DISPATCH_HERE,DUMMY_DISPATCH+M_WAIT,0
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW6_Z+0A90H,1 ;Get to the corner
.LONG S_DOZER_ACCEL ;Round corner and go left
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW6_Z ;Z Position target
.LONG CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
LLW S_SET_WORD, SCROLLKILL, 1 ;STOP FLOATING ZFAR
LW S_SET_WHAREA, AROW6L ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
.LONG JAPA_ROW6_RIGHT_CK_GATE14+M_JUMP ;Jump to wait for left side of backrow
JAPA_BUSTOUT4_LAST_CHANCE
LLW S_SET_WORD, SCROLLKILL, 1 ;STOP FLOATING ZFAR
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 60 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG -30000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
.LONG JAPA_BUSTOUT4_PASS+M_JUMP ;Jump to wait for left side of backrow
*Come here to zap us right through Gate 18
JAPA_GATE18_ZAP
.LONG S_CREATE_PROCR
.word PID_IND
.long 0,0,0,0478B5H,FLOAT_ZFAR
.word 0
LLW S_DISPATCH_HERE,DUMMY_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,120H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 3A835H,-2H,CRATE_ZVEL
.WORD M_Z
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 1200000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_WAIT_FOR_ZREL,3C800H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,40000H,1 ;Get to the end
LW S_DECEL_TO_STOP,5
LLW S_DISPATCH_HERE,DEADEND_DISPATCH+M_WAIT,0
LWWWLW S_ACCEL_TO_POINT,-60,120H,0,3F000H,0
LLW S_DISPATCH_HERE,DUMMY_DISPATCH+M_WAIT,0
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW6_Z+0A90H,1 ;Get to the corner
.LONG S_DOZER_ACCEL ;Round corner and go left
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW6_Z ;Z Position target
.LONG -CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
LLW S_SET_WORD, SCROLLKILL, 1 ;STOP FLOATING ZFAR
LW S_SET_WHAREA, AROW6L ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
.LONG JAPA_ROW6_LEFT_CK_GATE14+M_JUMP ;Jump to wait for left side of backrow
*Come here to zap us right through Gate 19
JAPA_GATE19_ZAP
LW S_SET_WHAREA, AROW7 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_FORK_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,2A9H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 3A835H,-2H,CRATE_ZVEL
.WORD M_Z
JAPA_GATE19_GO
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 2A90000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_WAIT_FOR_ZREL,3C800H,1
.LONG S_SET_LONG, YSCROLL, 020000H ;Set to jump gate opening
.LONG S_SET_LONG, YSACCEL, -01000H
LW S_WAIT_HERE, 66
.LONG S_CLR_YMOTION
LLW S_WAIT_FOR_ZREL,ROW7_Z-0A90H,1 ;Get to the corner
.LONG S_DOZER_ACCEL ;Round corner and go right
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW7_Z ;Z Position target
.LONG -CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
.LONG JAPA_ROW7_LEFT_CK_EXIT+M_JUMP
JAPA_BUSTOUT1_ZAP
LW S_SET_WHAREA, AROW3 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 800H,0F9H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 153A0H,-2H,CRATE_ZVEL
.WORD M_Z
JAPA_BUSTOUT1_GO
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 10 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 0F90000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
.LONG JAPA_BUSTOUT1_PASS+M_JUMP
JAPA_BUSTOUT1_REV_FROM_STOP
LWWWLW S_ACCEL_TO_POINT,-30,0F9H,0,175B0H,0
.LONG JAPA_BUSTOUT1_REV_GO+M_JUMP
JAPA_BUSTOUT1_REV_ZAP
.LONG S_ACCEL_LIMIT_TO_POINT
.WORD 1000H,0F9H,CRATE_XVEL >> 16
.WORD 1000H,0,1H
LWL 175B0H,-3H,CRATE_ZVEL
.WORD M_Z
JAPA_BUSTOUT1_REV_GO
.LONG S_DOZER_ACCEL ;Round corner and go backwards
.WORD 60 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 0F90000H ;X Position target
.LONG 0 ;X Velocity target
.LONG -CRATE_ZVEL << ZFRAC ;Z Velocity target
LLW S_DISPATCH_HERE,AISLE_DISPATCH+M_WAIT,0
LLW S_WAIT_FOR_ZREL,16800H,1 ;Get to Row 2 pt. 2
LW S_SET_WHAREA, AROW2B ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
LLWW S_MAKE_SOLO_BUTTON, JAPA_ROW2_2_ZAP, 1, 60
.LONG JAPA_GATE3_REV_GO+M_JUMP
JAPA_ROW2_2_ZAP
LWWWLW S_ACCEL_TO_POINT,-120,100H,0,ROW2_Z2,0 ;Get on line and go
.long JAPA_BUSTOUT1_INTACT+M_JUMP ;Wait for next gate
JAPA_ROW3_LEFT_ZAP
.LONG S_SET_LONG, YSCROLL, 0H ;Clear for safety
LWWWLW S_ACCEL_TO_POINT,-80,2A9H,0,ROW3_Z,0 ;Get on line and go
.long JAPA_GATE10_REV_ROUND+M_JUMP ;Wait for next gate
JAPA_ROW3_GATE9_LEFT_ZAP
.LONG S_SET_LONG, YSCROLL, 0H ;Clear for safety
LWWWLW S_ACCEL_TO_POINT,-80,0E9H,0,ROW3_Z,0 ;Get on line and go
.LONG S_DOZER_ACCEL ;Round corner and go right
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW3_Z ;Z Position target
.LONG -CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
.long JAPA_ROW3_LEFT_CK_GATE5+M_JUMP ;Jump to next gate check
JAPA_ROW3_GATE9_RIGHT_ZAP
.LONG S_SET_LONG, YSCROLL, 0H ;Clear for safety
LWWWLW S_ACCEL_TO_POINT,-80,0E9H,0,ROW3_Z,0 ;Get on line and go
.LONG S_DOZER_ACCEL ;Round corner and go right
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW3_Z ;Z Position target
.LONG CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
.long JAPA_ROW3_RIGHT_CK_GATE6+M_JUMP ;Jump to next gate check
JAPA_ROW4_RIGHT_ZAP
LWWWLW S_ACCEL_TO_POINT,-80,-8EH,0,ROW4_Z,0 ;Get on line and go
.long JAPA_GATE11_REV_ROUND+M_JUMP ;Wait for next gate
JAPA_ROW4_LEFT_ZAP
LWWWLW S_ACCEL_TO_POINT,-80,2A9H,0,ROW4_Z,0 ;Get on line and go
.long JAPA_GATE13_REV_ROUND+M_JUMP ;Wait for next gate
JAPA_ROW5_LEFT_ZAP
LWWWLW S_ACCEL_TO_POINT,-80,2A9H,0,ROW5_Z,0 ;Get on line and go
.long JAPA_GATE16_REV_ROUND+M_JUMP ;Wait for next gate
*Come here to zap us to Forklift alley
JAPA_WHIT_ZAP
LWWWLW S_ACCEL_TO_POINT,-120,2D0H,0,ROW2_Z2,0
.LONG S_DOZER_ACCEL ;Continue towards the alley
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW2_Z2 ;Z Position target
.LONG CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
.LONG S_CHANGE_ZFAR,18000H ;Make it so we can see way down
LLW S_DISPATCH_HERE,ALLEY_DISPATCH+M_WAIT,0
LLLW S_WAIT_FOR_COORD,XBASE,3D00000H,1 ;Scroll past opening gate
.LONG S_DOZER_ACCEL ;Round corner and go in
.WORD 60 << 8 + M_X << 3 + M_Z + M_X + M_ZREL
.LONG 3EE0000H ;X Position target
.LONG 0 ;X Velocity target
.LONG CRATE_ZVEL << ZFRAC ;Z Velocity target
.LONG S_CREATE_PROCR ;Start the damage color stuff
.WORD PID_FORKLIFT
.LONG 4A71CH,198000H,3F20000H,0,PROC_BRAD_FORKLIFT ;Take him there
.WORD 0
LLW S_WAIT_FOR_ZREL,42600H,1 ;Get to the corner
LW S_DECEL_TO_STOP,4
LLW S_SET_WORD, WHITFORD_FLAG, 1
LW S_WAIT_HERE,80
; LLW S_WAIT_FOR_ZREL,ROW7_Z-0A90H,1 ;Get to the corner
.LONG S_DOZER_ACCEL ;Round corner and go right
.WORD 60 << 8 + M_Z << 3 + M_Z + M_X + M_ZREL
.LONG ROW7_Z ;Z Position target
.LONG -CRATE_XVEL ;X Velocity target
.LONG 0 ;Z Velocity target
.LONG S_CHANGE_ZFAR,10F00H ;Set the correct ZFAR
LW S_SET_WHAREA, AROW7 ;WAREHOUSE AREA
LLW S_DISPATCH_HERE,ROW_DISPATCH+M_WAIT,0
.LONG JAPA_ROW7_LEFT_CK_EXIT+M_JUMP
*
* Special entry to just setup at the exit
*
JAP_BOXB_SCROLL
.LONG S_CLR_GATE_FLAGS ;Clear our gate flags
.LONG S_SET_LONG, WXBUFFER, 0380000H ;Open univ block buffer
.LONG S_SET_LONG, WYBUFFER, 0540000H
.LONG S_CHANGE_ZFAR,10F00H ;Set the correct ZFAR
.LONG S_LOCKOUT_PORTALS
.LONG JAPA_PORTAL+M_JUMP
**************************************************************************
* *
* Associated warehouse processes *
* *
**************************************************************************
**************************************************************************
* *
* PROC_FACTORY_XFADE *
* *
* Process to start the factory XFADE sound. *
* *
**************************************************************************
PROC_FACTORY_XFADE
SLEEP 22
; SOUND1 SND_XFADE_HOLD
SOUND1 SND_FACTORY
DIE
**************************************************************************
* *
* PROC_NONBOY_CRATE_RUN *
* *
* Process to create a running NON-BOY. Uses the variable *
* ENEMY_ZBASE to add to the given ZPOSs. *
* *
* A8 = Universe Y *
* A9 = [FLAGS,X offscreen screen offset] *
* A10 = Closest possible Z (relative to ENEMY_ZBASE) *
* A11 = Farthest possible Z (relative to ENEMY_ZBASE) *
* *
* Note: See GXNONBOY.H for explanation of FLAGS *
* *
**************************************************************************
PROC_NONBOY_CRATE_RUN
MOVE @ENEMY_ZBASE,A1,L
MOVE @ZREL_OFF,A14,L
SRA ZFRAC,A14
ADD A14,A1
ADD A1,A10 ;Offset close Z
ADD A1,A11 ;Offset far Z
MOVE @ENEMY_YBASE,A1,L
ADD A1,A8 ;Offset Y
JAUC CREATE_SIDERUN_NONBOY0
PROC_NONBOY_CRATE_RUN2
MOVE @WHAREA,A1,W
; DEC A1
MOVE A1,A14
SLL 5,A1
SLL 6,A14
ADD A1,A14
ADDI ROW_PARMS_TABLE,A14
MMFM A14,A1,A2,A4 ;A4 = [RIGHT UNIVERSE X >> 16,
; LEFT UNIVERSE X >> 16]
;A2 = UNIVERSE Z CLOSEST
;A1 = UNIVERSE Z FARTHEST
MOVE @ZREL_OFF,A14,L
SRA ZFRAC,A14
ADD A14,A2
ADD A14,A1
ADD A2,A10 ;Offset close Z
ADD A1,A11 ;Offset far Z
MOVE @ZBASE,A5,L
MOVE @ZFAR,A14,L
ADD A14,A5
CMP A5,A10
; JAGT SUCIDE
JRLE PNCR2_CHECK_FAR
JAUC SUCIDE
PNCR2_CHECK_FAR
CMP A5,A11
JRLT PNCR2_OFFY
MOVE A5,A11
PNCR2_OFFY
MOVE @ENEMY_YBASE,A14,L
ADD A14,A8 ;Offset Y
MOVE @XBASE,A5,L
MOVE A4,A3
ADDI 049H,A3
SLL 16,A3 ;LEFT UNIVERSE X
CMP A3,A5
JRGT PNCR2_CHECK_RIGHT
ORI M_NON_RIGHT << 16,A9
JRUC PNCR2_GO
PNCR2_CHECK_RIGHT
SRA 16,A4
SUBI 049H,A4
SLL 16,A4 ;RIGHT UNIVERSE X
CMP A4,A5
JRLT PNCR2_GO
ORI M_NON_LEFT << 16,A9
PNCR2_GO
JAUC CREATE_SIDERUN_NONBOY0
**************************************************************************
* *
* PROC_NINJA_CRATE_JUMPIN *
* *
* Process to create a jump in Ninja in the crates. *
* Uses the global crate info *
* *
**************************************************************************
PROC_NINJA_CRATE_JUMPIN
MOVE @WHAREA,A1,W
; DEC A1
MOVE A1,A14
SLL 5,A1
SLL 6,A14
ADD A1,A14
ADDI ROW_PARMS_TABLE,A14
MMFM A14,A1,A2,A9 ;A4 = [RIGHT UNIVERSE X >> 16,
; LEFT UNIVERSE X >> 16]
;A2 = UNIVERSE Z CLOSEST
;A1 = UNIVERSE Z FARTHEST
SRA 8,A2
MOVE A2,A10
SLL 8,A1
MOVY A1,A10
MOVE @ENEMY_YBASE,A11,L
SUBI [7,0],A11
JAUC PROC_NINJA_JUMPIN
**************************************************************************
* *
* PROC_FORK_ROW *
* *
* Create a fork lift in a given row. *
* *
* A11 = Row parameter table entry *
* *
**************************************************************************
PROC_FORK_ROW
MOVE A11,A14
JRUC FORK_ROW_LOAD
**************************************************************************
* *
* PROC_SIDE_FORKLIFT_CRATE *
* *
* Process to create a side roving forklift. *
* Uses global crate info. *
* *
**************************************************************************
PROC_SIDE_FORKLIFT_CRATE
MOVE @WHAREA,A1,W
MOVE A1,A14
SLL 5,A1
SLL 6,A14
ADD A1,A14
ADDI ROW_PARMS_TABLE,A14
FORK_ROW_LOAD
MMFM A14,A1,A2,A9 ;A4 = [RIGHT UNIVERSE X >> 16,
; LEFT UNIVERSE X >> 16]
;A2 = UNIVERSE Z CLOSEST
;A1 = UNIVERSE Z FARTHEST
MOVE A1,A11
MOVE @ENEMY_YBASE,A10,L
; SUBI [7,0],A11
JAUC PROC_SIDE_FORKLIFT
**************************************************************************
* *
* PROC_FRONT_FORK_ALLEY *
* *
* Create a front fork lift that comes down fork lift *
* alley. *
* *
**************************************************************************
PROC_FRONT_FORK_ALLEY
MOVE @ZBASE,A0,L
MOVE @ZREL_OFF,A14,L
SRA ZFRAC,A14
SUB A14,A0
CMPI 3B29FH,A0
JAGT SUCIDE ;BR = No more fork lifts
; MOVE @XBASE,A9,L
MOVI 3EDFDB0H,A9
MOVK 25,A0
CALLA SRAND
SLL 16,A0
ADD A0,A9
MOVE @ENEMY_YBASE,A10,L
; MOVE @ZBASE,A11,L
; MOVE @ZFAR,A0,L
; ADD A0,A11
MOVI 4A000H,A11
JAUC PROC_FRONT_FORKLIFT
**************************************************************************
* *
* Warehouse damage handlers *
* *
**************************************************************************
O_BOOTY .EQU OU_ODATA ;UHL Routine to call to give up loot
OCRATE_BUSTOUT .EQU OU_ODATA+20H ;UHW If 1 then this is a bustout crate
**************************************************************************
* *
* WCRATE_GUNVECT *
* *
* Gun vector for the Warehouse crate that holds the secret *
* to finding Brad Whitford. *
* *
* A2 = Ptr to player shooting *
* A8 = Ptr to crate *
* *
**************************************************************************
WCRATE_GUNVECT
CLRM *A8(OCRATE_BUSTOUT),W ;This is not a bust
MOVIM WHITFORD_SIGN,*A8(O_BOOTY),L ;Dis da loot
JRUC CRATE_GUN_G
WCRATE_CVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,WCRATE_EXPLOSION_CVECT
WL 0,DUMCRETS
**************************************************************************
* *
* WCRATE_EXPLOSION_CVECT *
* *
* Collision service vector for the Warehouse crate that *
* really holds the key to finding Brad Whitford. *
* *
* A0 = Ptr to explosion object *
* A8 = Ptr to Crate *
* *
**************************************************************************
WCRATE_EXPLOSION_CVECT
CLRM *A8(OCRATE_BUSTOUT),W ;This is not a bust
MOVIM WHITFORD_SIGN,*A8(O_BOOTY),L ;Dis da loot
JRUC CRATE_EXP_CVECT_G
**************************************************************************
* *
* ACRATE_GUNVECT *
* *
* Gun vector for the Warehouse crate that holds the ARK. *
* *
* A2 = Ptr to player shooting *
* A8 = Ptr to crate *
* *
**************************************************************************
ACRATE_GUNVECT
CLRM *A8(OCRATE_BUSTOUT),W ;This is not a bust
MOVIM ARK_REVEAL,*A8(O_BOOTY),L ;Dis da loot
JRUC CRATE_GUN_G
ACRATE_CVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,ACRATE_EXPLOSION_CVECT
WL 0,DUMCRETS
**************************************************************************
* *
* ACRATE_EXPLOSION_CVECT *
* *
* Collision service vector for the Warehouse crate that *
* holds the ARK. *
* *
* A0 = Ptr to explosion object *
* A8 = Ptr to Crate *
* *
**************************************************************************
ACRATE_EXPLOSION_CVECT
CLRM *A8(OCRATE_BUSTOUT),W ;This is not a bust
MOVIM ARK_REVEAL,*A8(O_BOOTY),L ;Dis da loot
JRUC CRATE_EXP_CVECT_G
*
* Table of Bust throughs
* LWL ZVAL(round16), # of crates, Function to call
*
TAB_BUSTOUTS
LWL 1ABA0H,6,BUSTOUT1_SUPRISE ;Bust through #1
LWL 25930H,6,0 ;Bust through #2
LWL 29FB0H,6,BUSTOUT3_SUPRISE ;Bust through #3
LWL 46920H,6,0 ;Bust through #4
BUSTOUT5_TAB_ENTRY
LWL 4D080H,9,BUSTOUT5_SUPRISE ;Bust through #5
.LONG 0
**************************************************************************
* *
* BUSTOUT_GUNVECT *
* *
* Gun vector for the Warehouse crate that is a secret bustout. *
* *
* A2 = Ptr to player shooting *
* A8 = Ptr to crate *
* *
**************************************************************************
BUSTOUT_GUNVECT
MOVKM 1,*A8(OCRATE_BUSTOUT),W ;This is a bustout crate
CLRM *A8(O_BOOTY),L ;Don't give it up
JRUC CRATE_GUN_G
BUSTOUT_CVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,BUSTOUT_EXPLOSION_CVECT
WL 0,DUMCRETS
**************************************************************************
* *
* BUSTOUT_EXPLOSION_CVECT *
* *
* Collision service vector for the Warehouse crate that is *
* really a secret bustout crate. *
* *
* A0 = Ptr to explosion object *
* A8 = Ptr to Crate *
* *
**************************************************************************
BUSTOUT_EXPLOSION_CVECT
MOVKM 1,*A8(OCRATE_BUSTOUT),W ;This is a bustout crate
CLRM *A8(O_BOOTY),L ;Don't give it up
JRUC CRATE_EXP_CVECT_G
**************************************************************************
* *
* ENT_CRATE_GUNVECT *
* *
* Gun vector for the entrance crates *
* *
* A2 = Ptr to player shooting *
* A8 = Ptr to crate *
* *
**************************************************************************
ENT_CRATE_GUNVECT
CLRM *A8(OCRATE_BUSTOUT),W ;This is not a bustout crate
MOVIM ENTRANCE_CRATES,*A8(O_BOOTY),L ;Dis da loot
JRUC CRATE_GUN_G
ENT_CRATE_CVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,ENT_CRATE_EXPLOSION_CVECT
WL 0,DUMCRETS
**************************************************************************
* *
* ENT_CRATE_EXPLOSION_CVECT *
* *
* Collision service vector for the entrance crates. *
* *
* A0 = Ptr to explosion object *
* A8 = Ptr to Crate *
* *
**************************************************************************
ENT_CRATE_EXPLOSION_CVECT
CLRM *A8(OCRATE_BUSTOUT),W ;This is not a bustout crate
MOVIM ENTRANCE_CRATES,*A8(O_BOOTY),L ;Dis da loot
JRUC CRATE_EXP_CVECT_G
**************************************************************************
* *
* SIDE_CRATE_GUNVECT *
* *
* Gun vector for the Warehouse crate that has a side perspective. *
* *
* A2 = Ptr to player shooting *
* A8 = Ptr to crate *
* *
**************************************************************************
SIDE_CRATE_GUNVECT
CLRM *A8(OCRATE_BUSTOUT),W ;This is not a bustout crate
CLRM *A8(O_BOOTY),L ;Don't give it up
JRUC CRATE_GUN_G
SIDE_CRATE_CVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,SIDE_CRATE_EXPLOSION_CVECT
WL 0,DUMCRETS
**************************************************************************
* *
* SIDE_CRATE_EXPLOSION_CVECT *
* *
* Collision service vector for the Warehouse crate that has *
* a side perspective. *
* *
* A0 = Ptr to explosion object *
* A8 = Ptr to Crate *
* *
**************************************************************************
SIDE_CRATE_EXPLOSION_CVECT
CLRM *A8(OCRATE_BUSTOUT),W ;This is not a bustout crate
CLRM *A8(O_BOOTY),L ;Don't give it up
JRUC CRATE_EXP_CVECT_G
**************************************************************************
* *
* CRATE_GUNVECT *
* *
* Gun vector for the Warehouse crate. *
* *
* A2 = Ptr to player shooting *
* A8 = Ptr to chest *
* *
**************************************************************************
CRATE_GUNVECT
CLRM *A8(OCRATE_BUSTOUT),W ;This is not a bustout crate
MOVIM CRATE_POWERUP,*A8(O_BOOTY),L ;Dis da loot
CRATE_GUN_G
MOVI 500,A5 ;Points for killing this
MOVK M_FLASHOBJ,A7 ;Flash if we hit it
CLR A9 ;Offset for printed score
CALLA UNIV_DAMAGE_HANDLER ;Call the handler
JRC CRATE_EXPLODE ;BR = Time to destroy
SOUNDZ SND_CHEST_HIT ;Give a little sound to ack
RETS
*
*Crate
*
WARE_CRATE_CVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,CRATE_EXPLOSION_CVECT
WL 0,DUMCRETS
**************************************************************************
* *
* CRATE_EXPLOSION_CVECT *
* *
* Collision service vector for the Warehouse crate. *
* *
* A0 = Ptr to explosion object *
* A8 = Ptr to Crate *
* *
**************************************************************************
CRATE_EXPLOSION_CVECT
CLRM *A8(OCRATE_BUSTOUT),W ;This is not a bustout crate
MOVIM CRATE_POWERUP,*A8(O_BOOTY),L ;Dis da loot
CRATE_EXP_CVECT_G
CALLA UNIV_COLL_CHECK ;See if this was a valid collision
JRNZ CRATE_DONE ;BR = No
MOVE *A0(OID),A0,W
CALLA POID_TO_PDATA ;Get player's data area
MOVI 500,A5 ;Points for killing this thing
MOVK M_LASTFRM|M_FLASHOBJ,A7 ;Last frame and flash
CLR A9 ;Offset for printed score
CALLA UNIV_DAMAGE_HANDLER ;Do the patented damage shit
JRNC CRATE_DEAD ;BR = Damage already done
*
*Here we explode the Crate
*A8 = Ptr to Crate
*
CRATE_EXPLODE
SOUNDZ SND_CHEST_EXPLODE
MOVIM DEAD_GUNVECT,*A8(OGUNVECT),L
MOVIM DUMCOLL,*A8(OCVECT),L
CALLR CRATE_FRAGS
MOVE *A8(O_BOOTY),A14,L ;Is there a loot func?
JRZ CRATE_CK_BUSTER ;BR = No
CALL A14 ;Call loot func
CRATE_CK_BUSTER
MOVE *A8(OCRATE_BUSTOUT),A14,W ;Is this a bustout crate?
JRZ CRATE_DONE ;BR = No
MOVE *A8(OZVAL),A3,L ;We can tell by the Z
MOVE @ZREL_OFF,A14,L
SRA ZFRAC,A14
SUB A14,A3 ;Convert to this world
SRL 4,A3
SLL 4,A3
MOVI TAB_BUSTOUTS-48,A4 ;Get the table of Z's to match
CLR A6 ;This will be an index for later
DEC A6
CRATE_BUSTOUT_SEARCH
INC A6 ;Index next
ADDI 48,A4 ;And get next entry
MOVE *A4+,A14,L ;Get Z from table
JRZ CRATE_DONE ;BR = No matches found
CMP A14,A3 ;Is this our guy?
JRNE CRATE_BUSTOUT_SEARCH ;BR = No
* We've found the bustout group that this crate belongs to
SLL 3,A6
MOVE A6,A14
ADDI BUSTOUT_COUNTS,A14
MOVB *A14,A1 ;Get the # blown from this group
INC A1 ;And add 1
MOVB A1,*A14 ;Save again for later
MOVE *A4+,A14,W ;How many does it take to blow
CMP A14,A1 ;Do we have enough to blow?
JRLO CRATE_DONE ;BR = No
MOVKM 1,@SCROLLKILL,W ;Show us the world beyond
CALLA GET_SUPP ;Get our supplemental
JRZ CRATE_DONE
MOVE *A8(OID),A5,W
MOVE A0,A8 ;Save for a rainy day
*
* Entrypoint to blow crates manually.
* A4 = Ptr to special func of bustout table entry
* A5 = OID to search for
* A6 = (Bustout # - 1) << 3
* A8 = Ptr to supplemental list
*
BLOW_CRATE_ENTRY
ADDI BUSTOUTS,A6
MOVKB 1,*A6 ;Set the bustout flag
CALLA DELAYED_PRAISE
MOVE *A4+,A0,L
JRZ BUSTOUT_NO_FUNC
CALL A0 ;Call the bustout function
BUSTOUT_NO_FUNC
MOVI ANIM_DESTROY_CRATE,A1
MOVE @ZREL_OFF,A4,L
SRA ZFRAC,A4
MMTM SP,B0,B1
JRUC BUSTOUT_SEARCH_NEXT
BUSTOUT_SEARCH
MOVE *A8(OID),A14,W ;Get this one's I.D.
CMP A14,A5 ;Is it a bustout?
JRNE BUSTOUT_SEARCH_NEXT ;BR = No
MOVE *A8(OZVAL),A14,L
SUB A4,A14 ;Make it proper
SRL 4,A14
SLL 4,A14
CMP A14,A3 ;Is it the correct bustout?
JRNE BUSTOUT_SEARCH_NEXT ;BR = No
CALLA BG_TO_FG ;Get this out of the background A0,B0,B1 trashed
CALLA COLLS_OFF ;Safety valve
CALLA STRT_ANIM ;And do the destruction
BUSTOUT_SEARCH_NEXT
MOVE *A8(OSLINK),A8,L
JRNZ BUSTOUT_SEARCH
MMFM SP,B0,B1
CRATE_DONE
RETS
* Ensure that the crate is dead
CRATE_DEAD
MOVIM DEAD_GUNVECT,*A8(OGUNVECT),L
MOVIM DUMCOLL,*A8(OCVECT),L
RETS
**************************************************************************
* *
* BUSTOUT3_SUPRISE *
* *
* Suprise forklift at bustout. *
* *
**************************************************************************
BUSTOUT3_SUPRISE
MMTM SP,A0,A1,A7,A9,A10,A11
MOVI 2A90000H,A9
MOVI 31FB0H,A11
JRUC BUSTOUT_SUP_G
**************************************************************************
* *
* BUSTOUT1_SUPRISE *
* *
* Suprise forklift at bustout. *
* *
**************************************************************************
BUSTOUT1_SUPRISE
MMTM SP,A0,A1,A7,A9,A10,A11
MOVI 0F90000H,A9
MOVI 22BA0H,A11
*
* Entrypoint: Creates a forklift if the conditions are right
* A11 = Z
*
BUSTOUT_SUP_G
MOVE @ZSCROLL,A14,L
JRN BSG_X
JRZ BSG_X
MOVE @ZSACCEL,A14,L
JRN BSG_X
MOVE @ENEMY_YBASE,A10,L
CREATE PID_FORKLIFT,PROC_FRONT_FORKLIFT
MOVI SND_LOOK_OUT,A11
MOVI 60,A10
CREATE PID_IND,PROC_SND
BSG_X
MMFM SP,A0,A1,A7,A9,A10,A11
RETS
**************************************************************************
* *
* BUSTOUT5_SUPRISE *
* *
* Suprise forklift at big bustout. *
* *
**************************************************************************
BUSTOUT5_SUPRISE
MMTM SP,A0,A1,A7,A9,A10,A11
MOVI 54880H,A11
MOVE @ENEMY_YBASE,A10,L
MOVI 1260000H,A9
CREATE PID_FORKLIFT,PROC_FRONT_FORKLIFT
MOVI 1660000H,A9
CREATE PID_FORKLIFT,PROC_FRONT_FORKLIFT
MOVI SND_LOOK_OUT,A11
MOVI 60,A10
CREATE PID_IND,PROC_SND
MMFM SP,A0,A1,A7,A9,A10,A11
RETS
**************************************************************************
* *
* CRATE_FRAGS *
* *
* Create the fragments for a crate blowing up *
* *
* A8 = Crate about which fragments emerge *
* *
* Note: Trashes A0,A3 *
* *
**************************************************************************
CRATE_FRAGS
MMTM SP,B1,B2,B4,B5,B6,B8,B9,B10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Box
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -10H,B10 ;MAX Z VEL
MOVI FRAG_U10_MIX,B14 ;Use this fragment script
CALLA Fragger
MOVI p_newbxx,A14
MOVE A14,*A0(FPDATA),L ;Set Palette
MMFM SP,B1,B2,B4,B5,B6,B8,B9,B10
RETS
**************************************************************************
* *
* CRATE_POWERUP *
* *
* Routine to disburse a powerup from a front facing crate, *
* if necessary. *
* *
* A8 = Ptr to crate *
* *
**************************************************************************
CRATE_POWERUP
PUSH A6
MOVE @CRATES_DESTROYED,A6,W
INC A6
MOVE A6,@CRATES_DESTROYED,W
CMPI NUM_CRATES_FOR_ARK,A6 ;Has he wasted all of the crates
JRLO CP_NO_ARK_YET ;BR = Yes, give the ark
MOVE @ARK_CRATE_READY,A14,W ;Have we done this yet?
JRNZ CP_NO_ARK_YET ;BR = Yes
MOVKM 1,@ARK_CRATE_READY,W
SOUND1 SND_ARK_READY
CP_NO_ARK_YET
SLL 27,A6 ;Give smart bomb every 32
JRZ CP_GIVE_SMART ;BR = And this makes it
SLL 4,A6 ;Give other shit every 2
JRNZ CP_X ;BR = This ain't it
PUSH A0
MOVK NUM_CRATE_POWERUPS,A0
CALLA RAND0
SLL 5,A0
ADDI TAB_CRATE_POWERUPS,A0
MOVE *A0,A0,L
CALL A0
PULLQ A0
JRUC CP_X
CP_GIVE_SMART
MMTM SP,A0,A1,A7,A10,A11
MOVI [-46,0],A10
MOVK 1,A11
CREATE PID_IND,REVEAL_SBOMB
MMFM SP,A0,A1,A7,A10,A11
CP_X
PULLQ A6
RETS
NUM_CRATE_POWERUPS .EQU 2
* Table of routines to give powerups in the crates
TAB_CRATE_POWERUPS
.LONG CRATE_ROCKETS
.LONG CRATE_CDS
**************************************************************************
* *
* ENTRANCE_CRATES *
* *
* Routine to disperse powerup in entrance crates *
* *
* A8 = Ptr to crate *
* *
**************************************************************************
ENTRANCE_CRATES
PUSH A6
MOVE @CRATES_DESTROYED,A6,W
INC A6
MOVE A6,@CRATES_DESTROYED,W
SRL 1,A6 ;Give other shit every 2
JRC EC_X ;BR = This ain't it
MMTM SP,A0,A1,A7,A10,A11
MOVK 1,A11
MOVI [-46,0],A10
CREATE PID_IND,REVEAL_SUPERGUN
MMFM SP,A0,A1,A7,A10,A11
EC_X
PULLQ A6
RETS
**************************************************************************
* *
* CRATE_ROCKETS *
* *
* Routine to award rockets in a crate. *
* *
* A8 = Ptr to crate *
* *
**************************************************************************
CRATE_ROCKETS
MMTM SP,A0,A1,A6,A7,A10,A11
MOVK 1,A11
MOVI PID_IND,A1
MOVI REVEAL_PROCK,A7
MOVK 6,A0
CALLA RANDU
MOVE A0,A6
MOVI [-26,-13],A10
CALLA GETPRC
DEC A6
JRZ CR_X
MOVI [-26,11],A10
CALLA GETPRC
DEC A6
JRZ CR_X
MOVI [-47,-13],A10
CALLA GETPRC
DEC A6
JRZ CR_X
MOVI [-47,11],A10
CALLA GETPRC
DEC A6
JRZ CR_X
MOVI [-67,-13],A10
CALLA GETPRC
DEC A6
JRZ CR_X
MOVI [-67,11],A10
CALLA GETPRC
CR_X
MMFM SP,A0,A1,A6,A7,A10,A11
RETS
**************************************************************************
* *
* CRATE_CDS *
* *
* Routine to award CD in a crate. *
* *
* A8 = Ptr to crate *
* *
**************************************************************************
CRATE_CDS
MMTM SP,A0,A1,A7,A10,A11
MOVK 1,A11
MOVI [-46,0],A10
CREATE PID_IND,REVEAL_CD
MMFM SP,A0,A1,A7,A10,A11
RETS
*
* Gate
*
WARE_GATE_CVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,GATE_EXPLOSION_CVECT
WL 0,DUMCRETS
**************************************************************************
* *
* GATE_EXPLOSION_CVECT *
* *
* Collision service vector for the Warehouse Gate. *
* *
* A0 = Ptr to explosion object *
* A8 = Ptr to Gate *
* *
**************************************************************************
GATE_EXPLOSION_CVECT
CALLA UNIV_COLL_CHECK ;See if this was a valid collision
JRNZ GATE_DONE ;BR = No
MOVE @IN_MAKE_DECISION,A14,W
JRNZ GATE_DONE ;BR = No gate banging in decision
MOVB *A8(OFLAGS),A14 ;Is this half off-screen?
JRN GATE_DONE ;BR = Yes, just a cool snd
MOVE *A8(OZVAL),A1,L
MOVE @ZBASE,A2,L
SUB A2,A1 ;Universe to World Z
CMPI 09000H,A1 ;Are we too far out?
JRGT GATE_DONE ;BR = Yes, just make cool snd
MOVE *A0(OID),A0,W
CALLA POID_TO_PDATA ;Get player's data area
MOVK M_LASTFRM|M_FLASHOBJ,A7 ;Last frame and flash
CLR A5 ;No points for match
CLR A9 ;Printed score offset
CALLA FIND_MY_MATCH ;Find matching object
JRZ GATE_NO_MATCH ;BR = There isn't one
MOVB *A0(OFLAGS),A14 ;Is this half off-screen?
JRN GATE_DONE ;BR = Yes, just a cool snd
PUSH A8 ;Store this half
MOVE A0,A8
CALLA UNIV_DAMAGE_HANDLER ;Call damage on match
JRNC GATE_MATCH_NOT_LAST ;BR = Match still has some left
MOVIM DUMCOLL,*A8(OCVECT),L
ANDNIM M_NOPIXSCAN,*A8(OFLAGS),W ;Clear pixscan when done
MOVE *A8(OULINK),A5,L
ANDNIM M_BF_NOPXSCN,*A5(MAP_FLAGS),W ;Clear background link copy
GATE_MATCH_NOT_LAST
PULLQ A8 ;Get us back our half
GATE_NO_MATCH
MOVI 1000,A5 ;Points for killing gate
CALLA UNIV_DAMAGE_HANDLER ;Call damage on this gate
JRNC GATE_DONE ;BR = We haven't hit the last frame
MMTM SP,B1,B2,B4,B5,B6,B8,B9,B10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Box
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -10H,B10 ;MAX Z VEL
MOVI FRAG_U20_MIX,B14 ;Use this fragment script
CALLA Fragger
MOVI p_secudor,A14
MOVE A14,*A0(FPDATA),L ;Set Palette
MMFM SP,B1,B2,B4,B5,B6,B8,B9,B10
MOVE *A8(OID),A6,W ;Get our Object I.D.
ANDI MASK_ID,A6 ;Isolate the I.D. of the block
SRL BIT_ID,A6
SUBK FIRST_GATE_ID,A6
MOVE A6,A1
SLL 3,A1
ADDI GATES_BLOWN,A1
INCB *A1 ;Flag the gate as blown
SLL 5,A6
ADDI TAB_GATE_SCROLL_CHANGE,A6
MOVE *A6,A0,L ;Get the new scroll vector
JRZ GATE_NO_SCROLL_CHANGE
; MOVE @ZSCROLL,A14,L ;Are we already moving forward
; JRP GATE_NO_SCROLL_CHANGE ;BR = Yes, no changing now
CALLA CHNG_SCRL_TBL ;Change the direction of scroll
CALLA DELAYED_PRAISE
GATE_NO_SCROLL_CHANGE
SOUNDZ SND_GATE_EXPLODE
ANDNIM M_NOPIXSCAN,*A8(OFLAGS),W ;Clear pixscan when done
MOVIM DUMCOLL,*A8(OCVECT),L
MOVE *A8(OULINK),A5,L
ANDNIM M_BF_NOPXSCN,*A5(MAP_FLAGS),W ;Clear background link copy
GATE_DONE
RETS
*
*Table of new scroll vectors for when we blow a gate (0 = no change)
*
TAB_GATE_SCROLL_CHANGE
.LONG JAPA_GATE1_ZAP ;Gate 1
.LONG JAPA_GATE2_ZAP ;Gate 2
.LONG JAPA_GATE3_ZAP ;Gate 3
.LONG JAPA_GATE4_ZAP ;Gate 4
.LONG JAPA_GATE5_ZAP ;Gate 5
.LONG JAPA_GATE6_ZAP ;Gate 6
.LONG JAPA_GATE7_ZAP ;Gate 7
.LONG JAPA_GATE8_ZAP ;Gate 8
.LONG JAPA_GATE9_ZAP ;Gate 9
.LONG JAPA_GATE10_ZAP ;Gate 10
.LONG JAPA_GATE11_ZAP ;Gate 11
.LONG JAPA_GATE12_ZAP ;Gate 12
.LONG JAPA_GATE13_ZAP ;Gate 13
.LONG JAPA_GATE14_ZAP ;Gate 14
.LONG JAPA_GATE15_ZAP ;Gate 15
.LONG JAPA_GATE16_ZAP ;Gate 16
.LONG JAPA_GATE17_ZAP ;Gate 17
.LONG JAPA_GATE18_ZAP ;Gate 18
.LONG JAPA_GATE19_ZAP ;Gate 19
**************************************************************************
* *
* GATE_GUNVECT *
* *
* Gun vector for the Warehouse Gate. *
* *
* A2 = Ptr to player shooting *
* A8 = Ptr to gate *
* *
**************************************************************************
GATE_GUNVECT
CALLA DGV_FRAG_SPARK
SOUNDZ SND_GATE_HIT ;Give a little sound to ack
RETS
**************************************************************************
* *
* METAL_GUNVECT *
* *
* Gun vector for the warehouse gate metal tracks. *
* *
* A2 = Ptr to player shooting *
* A8 = Ptr to metal stuff *
* *
**************************************************************************
METAL_GUNVECT
CALLA DGV_FRAG_SPARK
SOUNDZ SND_METAL_HIT ;Give a little sound to ack
RETS
**************************************************************************
* *
* MARS_GUNVECT *
* *
* Gun vector for the Mars light. *
* *
* A2 = Ptr to player shooting *
* A8 = Ptr to light *
* *
**************************************************************************
MARS_GUNVECT
CLRM *A8(O_BOOTY),L ;No loot here
LIGHT_GV_G
MOVI 500,A5 ;Points for killing this
MOVK M_FLASHOBJ,A7 ;Flash if we hit it
CLR A9 ;Offset for printed score
CALLA UNIV_DAMAGE_HANDLER ;Call the handler
JRC MARS_EXPLODE ;BR = Time to destroy
RETS
*
* Mars light collision
*
MARS_CVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,MARS_EXPLOSION_CVECT
WL 0,DUMCRETS
**************************************************************************
* *
* MARS_EXPLOSION_CVECT *
* *
* Collision service vector for the Mars light. *
* *
* A0 = Ptr to explosion object *
* A8 = Ptr to Mars light *
* *
**************************************************************************
MARS_EXPLOSION_CVECT
CLRM *A8(O_BOOTY),L ;No loot here
LIGHT_EXP_G
CALLA UNIV_COLL_CHECK ;See if this was a valid collision
JRNZ MARS_DONE ;BR = No
MOVE *A0(OID),A0,W
CALLA POID_TO_PDATA ;Get player's data area
MOVI 500,A5 ;Points for killing this thing
MOVK M_LASTFRM|M_FLASHOBJ,A7 ;Last frame and flash
CLR A9 ;Offset for printed score
CALLA UNIV_DAMAGE_HANDLER ;Do the patented damage shit
JRNC MARS_DONE ;BR = Damage already done
*
*Here we explode the Mars light
*A8 = Ptr to Mars light
*
MARS_EXPLODE
SOUNDZ SND_MARS_EXPLODE
MOVIM DEAD_GUNVECT,*A8(OGUNVECT),L
MOVIM DUMCOLL,*A8(OCVECT),L
MOVE *A8(O_BOOTY),A14,L ;Is there a loot func?
JRZ MARS_DO_FRAGS ;BR = No
CALL A14 ;Call loot func
* Aisle light ground hit animation uses this
MARS_DO_FRAGS
MMTM SP,B1,B2,B4,B5,B6,B8,B9,B10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Center
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -10H,B10 ;MAX Z VEL
MOVI FRAG_U5,B14 ;Use this fragment script
CALLA Fragger
MOVE *A8(OIMG),A1,L
MOVE *A1(ICMAP),*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,B10
MARS_DONE
RETS
**************************************************************************
* *
* ALIGHT_GUNVECT *
* *
* Gun vector for the light hanging above aisles. *
* *
* A2 = Ptr to player shooting *
* A8 = Ptr to light *
* *
**************************************************************************
ALIGHT_GUNVECT
MOVIM ALIGHT_BOOTY,*A8(O_BOOTY),L
JRUC LIGHT_GV_G
*
* Aisle light collision
*
ALIGHT_CVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,ALIGHT_EXPLOSION_CVECT
WL 0,DUMCRETS
ALIGHT_CVECT2
WWL OID_GRND,0FFFFH,LIGHT_GROUND_CVECT
WL 0,DUMCRETS
**************************************************************************
* *
* LIGHT_GROUND_CVECT *
* *
* Collision service for light hitting the ground *
* *
* A8 = Ptr to light *
* *
**************************************************************************
LIGHT_GROUND_CVECT
CALLA STOPOBJ
CALLA COLLS_OFF
SOUNDZ SND_LIGHT_CRASH
MOVI ANIM_ALIGHT_EXP,A1
JAUC STRT_ANIM
**************************************************************************
* *
* ALIGHT_EXPLOSION_CVECT *
* *
* Collision service vector for the Aisle light. *
* *
* A0 = Ptr to explosion object *
* A8 = Ptr to light *
* *
**************************************************************************
ALIGHT_EXPLOSION_CVECT
MOVIM ALIGHT_BOOTY,*A8(O_BOOTY),L
JRUC LIGHT_EXP_G
**************************************************************************
* *
* ALIGHT_BOOTY *
* *
* Get some of that Ali booty. *
* *
* A8 = Ptr to aisle light *
* *
**************************************************************************
ALIGHT_BOOTY
MMTM SP,B0,B1
CALLA BG_TO_FG ;Move object out of universe
MOVIM ALIGHT_CVECT2,*A8(OCVECT),L
CLRM *A8(OGUNVECT),L
ORIM M_GCOLL,*A8(OFLAGS),W
MOVIM 3000H,*A8(OYACCEL),W
MMFM SP,B0,B1
RETS
**************************************************************************
* *
* ARK_REVEAL *
* *
* Reveal the ark. *
* *
* A8 = Ptr to object that holds the ark *
* *
**************************************************************************
ARK_REVEAL
PUSH A0
SOUND1 SND_ARK_AWARD
PULLQ A0
RETS
**************************************************************************
* *
* WHITFORD_SIGN *
* *
* Place the sign to get you to Brad Whitford. *
* *
* A8 = Ptr to object this sign is in. *
* *
**************************************************************************
WHITFORD_SIGN
MMTM SP,A1,A10,A11
PUSH B0
MOVI [-40,0],A10
MOVK 1,A11
MOVI RIGHT_SIGN_INIT,B0
CALLR REVEAL_OBJECT
JRZ WS_X
MOVI ANIM_WHITSIGN,A1
CALLA STRT_ANIM
WS_X
PULL B0
MMFM SP,A1,A10,A11
RETS
**************************************************************************
* *
* WHITSIGN_GUNVECT *
* *
* Gun vector for the sign that takes us to Brad Whitford. *
* *
* A2 = Ptr to player *
* A8 = Ptr to sign object *
* *
**************************************************************************
WHITSIGN_GUNVECT
MOVI JAPA_WHIT_ZAP,A0 ;This is how we go
CALLA CHNG_SCRL_TBL ;Change the direction of scroll
SOUND1 SND_DIR_CHOSEN ;Make some noise
CLRM *A8(OGUNVECT),L ;No more shooty
CALLA DELAYED_PRAISE
MOVI ANIM_FLASH_DEL,A1 ;Flash and trash
JAUC STRT_ANIM
*
* Sign that says, go right
*
RIGHT_SIGN_INIT
.byte 1, 0, 1, 0 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
.long BRDICON ;PAL LIST
.word OID_JUNK, OM_DUMCOLL
LWWWW BRDICON, DMAWNZ, M_NOPIXSCAN, 0, OM_ANIM
.LONG ANIM_OFFSCREEN_CK
**************************************************************************
* *
* REVEAL_OBJECT *
* *
* Make an object and place it in reference to another. *
* (i.e. Blow open a crate and voila, something is there.) *
* *
* A8 = Object this is coming from *
* A10 = [Y,X] Screen offset from aboves animation pnt. *
* A11 = Amount to add to OZVAL of new object *
* *
* B0 = Create table for new object *
* *
* Returns: *
* *
* Z = No object *
* NZ = Got object, A8 = ptr *
* *
**************************************************************************
REVEAL_OBJECT
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7
MMTM SP,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
PUSH A8
CALLA MULTIMAKE ;Make the object
MOVE A8,A0
PULL A8 ;PULL MUST PRESERVE STATUS, DON'T USE PULLQ
JRZ RO_X
MOVE *A8(OXVAL),A1,L ;GET X POSITION
MOVE A10,A14
SEXT A14,W
SLL 15,A14 ;TRANSLATE OFFSET TO WORLD
ADD A14,A1 ;NEW X POSITION
MOVE *A8(OYVAL),A2,L ;GET Y POSITION
SRA 16,A10
SLL 15,A10 ;TRANSLATE OFFSET TO WORLD
ADD A10,A2 ;NEW Y POSITION
MOVE A0,A3
RO_PART_LUPE
MOVE A1,*A3(OXVAL),L
MOVE A2,*A3(OYVAL),L
MOVE *A3(OPARTS),A3,L
JRNZ RO_PART_LUPE
MOVE *A8(OZVAL),A1,L
SUB A11,A1 ;ADD Z OFFSET
MOVE A0,A8
CALLA STORE_ZVAL
CALLA INSERT_OBJ
MOVE A8,A8
RO_X
MMFM SP,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7
RETS
**************************************************************************
* *
* Animations for the Warehouse *
* *
**************************************************************************
*
* Destroy a crate
*
ANIM_DESTROY_CRATE
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,1,15
LW 1,0
LWLLLL 1,10|AFunc,A_PreFrag_Center+6,FRAG_CRATE_EXPLOSION,0800h,30000h
LWL 1,1|AFunc,CRATE_FRAGS
LWL 1,1|AFunc,DELETE_OBJ
*
* Initiate the Whitford sign
*
ANIM_WHITSIGN
LW 1,20
LWLL 1,8|AFunc,A_SET_OYVEL+2,30000H
LWLL 1,1|AFunc,A_SET_OYVEL+2,0
LWLL 1,1|AFunc,A_SOUND+2,SND_SIGN_HERE
LWLWL 1,1|AFunc,A_Set_Rel_Long+3,OGUNVECT,WHITSIGN_GUNVECT
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_OFFSCREEN_CK
*
* Animation to check if an object is offscreen, then delete.
*
ANIM_OFFSCREEN_CK
LWLL 1,10|AFunc,A_ONSCREEN+2,ANIM_OFFSCREEN_CK
LWL 1,1|AFunc,DELETE_OBJ
*
* Animation to flash an object off and on then delete
*
ANIM_FLASH_DEL
LWLW 1,1|AFunc,A_Set_AnimLoop+1,6
ANIM_FD_LOOP
LWL 1,4|AFunc,OBJ_OFF
LWL 1,3|AFunc,OBJ_ON
LWLL 1,1|AFunc,A_Anim_DSJ+2,ANIM_FD_LOOP
LWL 1,1|AFunc,DELETE_OBJ
*
* Aisle light hitting the ground
*
ANIM_ALIGHT_EXP
LWL 1,1|AFunc,OBJ_CONST
LWL 1,3|AFunc,MARS_DO_FRAGS
LWL 1,1|AFunc,DELETE_OBJ
**************************************************************************
* *
* DELETE_UNIV_OBJ *
* *
* Delete a Universe object from the universe list and the *
* object list. *
* *
* A8 = Ptr to object *
* *
**************************************************************************
DELETE_UNIV_OBJ
MMTM SP,B0,B1 ;'Cause of Warren's shit
CALLA BG_TO_FG ;Take it out of the universe
MMFM SP,B0,B1
JAUC DELETE_OBJ ;And delete it
**************************************************************************
* *
* A_ADD_XPOS *
* *
* Anim func to add a given constant to the objects *
* OXPOS. Value is negated if object is flipped. *
* *
* A8 = Ptr to object *
* AARG+,W = value to add *
* *
**************************************************************************
A_ADD_XPOS
CALLA GETAFARG_WORD
MOVE *A8(OCTRL),A14,W
BTST B_FLIPH,A14
JRZ AAX_ADD
NEG A0
AAX_ADD
ADDRM A0,*A8(OXPOS),W
RETS
**************************************************************************
* *
* Fragment scripts and funcs for the Warehouse *
* *
**************************************************************************
FRAG_CRATE_EXPLOSION
.long PART_EXPLOSION,F_EXPLOSION_OUT
.word OID_JUNK,3*800H+10*40H+FRGPAL+FRGNOFLY
.long PART_EXPLOSION,F_EXPLOSION_OUT
.word OID_JUNK,3*800H+1*40H+FRGPAL+FRGNOFLY
.LONG 0
**************************************************************************
* *
* Dispatch Tables for Crates *
* *
**************************************************************************
*
* Initial dispatch
*
SLOW_ROW0_DISPATCH
.LONG SLOW_ROW0_DSP,0
.WORD 0, 0, 0, 0, 0, 0, 0, 0
.WORD 0, 0, 0, 0, 0, 0, 0, 1
SLOW_ROW0_DSP
.WORD 0 ;END OF INITIAL DISPATCH TABLE
.WORD 6*60,PID_NONBOY
.LONG 08910H,05A40H,[0,50],0H,PROC_NONBOY_CRATE_RUN
.WORD 0FFFEH
.LONG ROW0_SIDE_GUYS
*
* Dispatch for ROW 1
*
FAST_ROW0_DISPATCH
.LONG FAST_ROW0_DSP,0
.WORD 0, 0, 0, 0, 0, 0, 0, 0
.WORD 0, 0, 0, 0, 0, 0, 0, 1
FAST_ROW0_DSP
.WORD 0 ;END OF INITIAL DISPATCH TABLE
.WORD 1,PID_NONBOY
.LONG 06910H,06910H,[M_AISLE_CHECK,50],0H,PROC_NONBOY_CRATE_RUN
.WORD 5,PID_NONBOY
.LONG 08910H,05A40H,[0,50],0H,PROC_NONBOY_CRATE_RUN
.WORD 10,PID_NONBOY
.LONG 06910H,06910H,[M_AISLE_CHECK,50],0H,PROC_NONBOY_CRATE_RUN
.WORD 20,PID_NONBOY
.LONG 08910H,05A40H,[0,50],0H,PROC_NONBOY_CRATE_RUN
.WORD 30,PID_NONBOY
.LONG 08910H,05A40H,[0,50],0H,PROC_NONBOY_CRATE_RUN
.WORD 40,PID_NONBOY
.LONG 08910H,05A40H,[0,50],0H,PROC_NONBOY_CRATE_RUN
.WORD 50,PID_NONBOY
.LONG 06910H,06910H,[M_AISLE_CHECK,50],0H,PROC_NONBOY_CRATE_RUN
.WORD 60,PID_NONBOY
.LONG 08910H,05A40H,[0,50],0H,PROC_NONBOY_CRATE_RUN
.WORD 80,PID_NONBOY
.LONG 06910H,06910H,[M_AISLE_CHECK,50],0H,PROC_NONBOY_CRATE_RUN
.WORD 120,PID_NONBOY
.LONG 06910H,06910H,[M_AISLE_CHECK,50],0H,PROC_NONBOY_CRATE_RUN
.WORD 180,PID_NONBOY
.LONG 06910H,06910H,[M_AISLE_CHECK,50],0H,PROC_NONBOY_CRATE_RUN
.WORD 0FFFEH
.LONG ROW0_SIDE_GUYS
ROW0_SIDE_GUYS
.WORD 30,PID_NONBOY
.LONG 08910H,05A40H,[0,50],0H,PROC_NONBOY_CRATE_RUN
.WORD 0FFFEH
.LONG ROW0_SIDE_GUYS
*
* Dispatch for AN ROW
*
ROW_DISPATCH
.LONG ROW_DSP,0
.WORD 0, 0, 0, 0, 0, 0, 0, 0
.WORD 0, 0, 0, 0, 0, 0, 0, 1
ROW_DSP
.WORD 0 ;END OF INITIAL DISPATCH TABLE
ROW_SIDE_GUYS
.WORD 30,PID_NONBOY
.LONG 0,0,[0,45],0H,PROC_NONBOY_CRATE_RUN2
.WORD 60,PID_NINJA
.LONG 0,0,0,0H,PROC_NINJA_CRATE_JUMPIN
.WORD 0
AISLE_FORK_DISPATCH
.LONG DSPTAB_AISLE_FORK,0
.WORD 0, 0, 0, 0, 0, 0, 0, 0
.WORD 0, 0, 0, 0, 0, 0, 0, 1
DSPTAB_AISLE_FORK
.WORD PID_FORKLIFT
.LONG 0,0,0,0,PROC_SIDE_FORKLIFT_CRATE
.WORD 0 ;END OF INITIAL DISPATCH TABLE
.WORD 180,PID_JUNK
.LONG 0,0,0,0,DUMDIE
.WORD 0FFFEH
.LONG ROW_SIDE_GUYS
.WORD -1
*
* Dispatch for AN AISLE
*
AISLE_DISPATCH
.LONG AISLE_DSP,0
.WORD 0, 0, 0, 0, 0, 0, 0, 0
.WORD 0, 0, 0, 0, 0, 0, 0, 1
AISLE_DSP
.WORD 0 ;END OF INITIAL DISPATCH TABLE
.WORD 1,PID_NONBOY
; .LONG -02000H,0ED0H,[M_AISLE_CHECK,45],0H,PROC_NONBOY_CRATE_RUN2
.LONG 0,0,[M_AISLE_CHECK,45],0H,PROC_NONBOY_CRATE_RUN2
.WORD 5,PID_NONBOY
.LONG 0,0,[0,45],0H,PROC_NONBOY_CRATE_RUN2
.WORD 10,PID_NONBOY
.LONG 0,0,[M_AISLE_CHECK,45],0H,PROC_NONBOY_CRATE_RUN2
.WORD 20,PID_NONBOY
.LONG 0,0,[0,45],0H,PROC_NONBOY_CRATE_RUN2
.WORD 30,PID_NONBOY
.LONG 0,0,[0,45],0H,PROC_NONBOY_CRATE_RUN2
.WORD 40,PID_NONBOY
.LONG 0,0,[0,45],0H,PROC_NONBOY_CRATE_RUN2
.WORD 50,PID_NONBOY
.LONG 0,0,[M_AISLE_CHECK,45],0H,PROC_NONBOY_CRATE_RUN2
.WORD 60,PID_NONBOY
.LONG 0,0,[0,45],0H,PROC_NONBOY_CRATE_RUN2
.WORD 80,PID_NONBOY
.LONG 0,0,[M_AISLE_CHECK,45],0H,PROC_NONBOY_CRATE_RUN2
.WORD 120,PID_NONBOY
.LONG 0,0,[M_AISLE_CHECK,45],0H,PROC_NONBOY_CRATE_RUN2
.WORD 180,PID_NONBOY
.LONG 0,0,[M_AISLE_CHECK,45],0H,PROC_NONBOY_CRATE_RUN2
.WORD 0FFFEH
.LONG ROW_SIDE_GUYS
*
* Dispatch table for fork lift alley
*
ALLEY_DISPATCH
.LONG ALLEY_DSP,0
.WORD 0, 0, 0, 0, 0, 0, 0, 0
.WORD 0, 0, 0, 0, 0, 0, 0, 1
ALLEY_DSP
.WORD PID_FORKLIFT
.LONG 0,0,0,0,PROC_FRONT_FORK_ALLEY
.WORD 0 ;END OF INITIAL DISPATCH TABLE
.WORD 90,PID_FORKLIFT
.LONG 0,0,0,0,PROC_FRONT_FORK_ALLEY
.WORD 0
DUMMY_DISPATCH
.LONG DUMMY_DSP,0
.WORD 0, 0, 0, 0, 0, 0, 0, 0
.WORD 0, 0, 0, 0, 0, 0, 0, 1
*
* Dispatch for AN DEADEND
*
DEADEND_DISPATCH
.LONG DEADEND_DSP,0
.WORD 0, 0, 0, 0, 0, 0, 0, 0
.WORD 0, 0, 0, 0, 0, 0, 0, 1
DEADEND_DSP
; .WORD PID_NONBOY
; .LONG 07C770H,0138000H,-06A0000H,0280000H,CREATE_DROP_SHOOTING_WORLDBOY
.WORD 0 ;END OF INITIAL DISPATCH TABLE
.WORD 10,PID_NONBOY
.LONG [0200H,0100H],[-04H,-04H],[0100H,-0100H],0,CREATE_JUMPON_NONBOY
.WORD 0
DUMMY_DSP
.WORD 0 ;END OF INITIAL DISPATCH TABLE
.WORD -1
**************************************************************************
* *
* Sounds for Japan office damage *
* *
**************************************************************************
SND_METAL_HIT
.WORD 0F308H,24,0A1E3H,0 ;Metal being hit
SND_GATE_HIT
.WORD 0F308H,38,0A402H,0 ;Gate being hit by bullet
SND_GATE_EXPLODE
.WORD 0F340H,72,0A405H,0 ;Gate being blown out
SND_MARS_EXPLODE
.WORD 0F340H,53,0A3C5H,0
SND_BIG_DOOR
.WORD 0F380H,273,08360H,0
;SND_XFADE_HOLD
; .WORD 0F1FDH,2*60,0801CH,0 ;X-fade hold track
SND_FACTORY
; .WORD 0F0FDH,1,0801BH,0 ;Japanese main factory
.WORD 0F0FDH,1,0800EH,0 ;Japanese main factory
SND_LIGHT_CRASH
.WORD 0F340H,64,0A32EH,0
SND_ARK_READY
.WORD 0E350H,150,08060,0 ;Ark is ready to be received
SND_ARK_AWARD
.WORD 0E351H,293,08061,0 ;Ark award
SND_SIGN_HERE
.WORD 0F342H,23,084F4H,0 ;Whitford sign just arrived
SND_LOOK_OUT
.WORD 0F3D1H,22,08806H,0 ;"Look Out!"
**************************************************************************
* *
* Collision vector tables for Japan universe. *
* *
* Each Table is made up of 32 entries, one for *
* each allowable background ID. *
* *
* Each entry: *
* *
* .LONG Collision_Vector, Gun_Vector *
* *
**************************************************************************
JAP_WARE_VECT_TABLE
;1, 2
.LONG 0, 0, WARE_CRATE_CVECT, CRATE_GUNVECT
;3, 4
.LONG DUMCOLL, METAL_GUNVECT, DUMCOLL, BRICK_GRY_GUNVECT
;5, 6
.LONG MARS_CVECT, MARS_GUNVECT, VIDCAM_CVECT, VIDCAM_GUNVECT
;7, 8
.LONG ACRATE_CVECT, ACRATE_GUNVECT, SIGN_CVECT, SIGN_GUNVECT
;9, 10
.LONG WARE_GATE_CVECT, GATE_GUNVECT, WARE_GATE_CVECT, GATE_GUNVECT
;11, 12
.LONG WARE_GATE_CVECT, GATE_GUNVECT, WARE_GATE_CVECT, GATE_GUNVECT
;13, 14
.LONG WARE_GATE_CVECT, GATE_GUNVECT, WARE_GATE_CVECT, GATE_GUNVECT
;15, 16
.LONG WARE_GATE_CVECT, GATE_GUNVECT, WARE_GATE_CVECT, GATE_GUNVECT
;17, 18
.LONG WARE_GATE_CVECT, GATE_GUNVECT, WARE_GATE_CVECT, GATE_GUNVECT
;19, 20
.LONG WARE_GATE_CVECT, GATE_GUNVECT, WARE_GATE_CVECT, GATE_GUNVECT
;21, 22
.LONG WARE_GATE_CVECT, GATE_GUNVECT, WARE_GATE_CVECT, GATE_GUNVECT
;23, 24
.LONG WARE_GATE_CVECT, GATE_GUNVECT, WARE_GATE_CVECT, GATE_GUNVECT
;25, 26
.LONG WARE_GATE_CVECT, GATE_GUNVECT, WARE_GATE_CVECT, GATE_GUNVECT
;27, 28
.LONG WARE_GATE_CVECT, GATE_GUNVECT, WCRATE_CVECT, WCRATE_GUNVECT
;29, 30
.LONG DUMPSTER_COLLVECT, DUMPSTER_GUNVECT, SIDE_CRATE_CVECT, SIDE_CRATE_GUNVECT
;31, 32
.LONG ALIGHT_CVECT, ALIGHT_GUNVECT, BUSTOUT_CVECT, BUSTOUT_GUNVECT
.END