.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