perfect_dark/asm/setup/setuppete.s

3230 lines
117 KiB
ArmAsm

#
# Chicago
#
.set HEADERLEN, 0x20
.include "asm/include/setup.inc"
// Characters
.set CHR_TOPSTAIRS, 0x07
.set CHR_SEALER1, 0x0d
.set CHR_SEALER2, 0x0e
.set CHR_SEALER3, 0x0f
.set CHR_SEALER4, 0x10
.set CHR_FBI1, 0x17
.set CHR_FBI2, 0x18
.set CHR_FBI3, 0x19
.set CHR_CIA1, 0x1a
.set CHR_CIA2, 0x1b // bug spotter
.set CHR_CIA3, 0x1c
.set CHR_CIA4, 0x1d
.set CHR_HIDDENGUY, 0x1e // positioned just behind Jo's starting place, never unhidden, and used for distance checks and something related to the robot
.set CHR_ROBOT, 0x1f
// Objects
.set OBJ_CAR1, 0x00
.set OBJ_CAR2, 0x01
.set OBJ_CAR3, 0x02
.set OBJ_CAR4, 0x03
.set OBJ_CAR5, 0x05
.set OBJ_BRIEFCASE1, 0x06
.set OBJ_BRIEFCASE2, 0x07
.set OBJ_FIREDOORTOP, 0x08
.set OBJ_FIREDOORBOTTOM, 0x09
.set OBJ_TAXI, 0x0a
.set OBJ_LIMO, 0x0c
.set OBJ_SWITCH, 0x0e
.set OBJ_BRIEFCASE3, 0x0f
.set OBJ_MINE1, 0x12
.set OBJ_MINE2, 0x13
.set OBJ_BRIEFCASE4, 0x1b
.set OBJ_BRIEFCASE5, 0x1d
.set OBJ_BRIEFCASE6, 0x1e
.set OBJ_WIREFENCE, 0x21
.set OBJ_FALCON2, 0x22
.set OBJ_DUMPSTER, 0x25
// Stage flags
.set STAGEFLAG_ALARM_GROUP1_DEAD, 0x00000001
.set STAGEFLAG_ALARM_GROUP2_DEAD, 0x00000002
.set STAGEFLAG_ALARM_GROUP3_DEAD, 0x00000004
.set STAGEFLAG_TRACERBUG_SPOTTED, 0x00000008
.set STAGEFLAG_CRASH_FINISHED, 0x00000010
.set STAGEFLAG_TRIGGER_CRASH, 0x00000020
.set STAGEFLAG_ROBOT_NEAR_CORNER, 0x00000040
.set STAGEFLAG_TRACERBUG_SAFE, 0x00000080
.set STAGEFLAG_ONE_BUG_REMAINING, 0x00000100
.set STAGEFLAG_MINE_PLACED, 0x00000200
.set STAGEFLAG_MINE_WASTED, 0x00000400
.set STAGEFLAG_TAXI_REPROGRAMMED, 0x00000800
.set STAGEFLAG_TRACERBUG_PLACED, 0x00001000
.set STAGEFLAG_TRACERBUG_WASTED, 0x00002000
.set STAGEFLAG_LIMO_DESTROYED, 0x00004000
.set STAGEFLAG_TAXI_DESTROYED, 0x00008000
.set STAGEFLAG_ROBOT_DESTROYED, 0x00010000
.set STAGEFLAG_IN_ELEVATOR, 0x00020000
.set STAGEFLAG_LIMO_READY_TO_LEAVE, 0x00040000
.set STAGEFLAG_LIMO_READY_15SEC_AGO, 0x00080000
.set STAGEFLAG_TRIGGER_TAXI_LEAVE, 0x00100000
.set STAGEFLAG_TAXI_ALMOST_READY_TO_CRASH, 0x00200000
.set STAGEFLAG_ALARM_SOUNDED, 0x00400000
.set STAGEFLAG_ROBOT_NEAR_HOME, 0x00800000
.set STAGEFLAG_ROBOT_ON_DRAIN_STREET, 0x01000000
.set STAGEFLAG_TRIGGER_INTRO, 0x02000000
.set STAGEFLAG_LIMO_ESCAPED, 0x04000000
.set STAGEFLAG_CIVILIAN_DEAD, 0x08000000
.set STAGEFLAG_ELEVATOR_SEALED, 0x10000000
.set STAGEFLAG_INTRO_FINISHED, 0x20000000
.set STAGEFLAG_DIVERSION_CREATED, 0x40000000
.set STAGEFLAG_TAXI_READY_TO_CRASH, 0x80000000
// Functions
.set FUNC_OUTRO, 0x040b
.set FUNC_CIA, 0x0412
.set FUNC_BUGSPOTTER, 0x0413
.set FUNC_INIT_CIA1, 0x0419
.set FUNC_ROBOT, 0x041a
.set FUNC_INIT_ROBOT, 0x041b
.set FUNC_HIDDENGUY, 0x041c
.set FUNC_FBI, 0x041d
.set FUNC_SEALER1, 0x041e
.set FUNC_ALARM_RESPONDER, 0x041f
.set FUNC_JOG_TO_ACCIDENT, 0x0420
// Other
.set GROUP_ALARM_RESPONDER, 0x09
props:
briefing 0, 0x3201
briefing 1, 0x3200
briefing 2, 0x3202
briefing 3, 0x3203
beginobjective 0, 0x3209, DIFFBIT_A | DIFFBIT_SA | DIFFBIT_PA | DIFFBIT_PD // "Retrieve drop point equipment"
require_object_collected OBJ_BRIEFCASE1
require_object_collected OBJ_BRIEFCASE2
endobjective
beginobjective 1, 0x320a, DIFFBIT_PA | DIFFBIT_PD // "Attach tracer to limousine"
complete_flags STAGEFLAG_TRACERBUG_PLACED
fail_flags STAGEFLAG_TRACERBUG_WASTED
fail_flags STAGEFLAG_LIMO_DESTROYED
fail_flags STAGEFLAG_LIMO_ESCAPED
fail_flags STAGEFLAG_TRACERBUG_SPOTTED
endobjective
beginobjective 2, 0x320b, DIFFBIT_SA | DIFFBIT_PA | DIFFBIT_PD // "Prepare escape route"
complete_flags STAGEFLAG_MINE_PLACED
fail_flags STAGEFLAG_MINE_WASTED
endobjective
beginobjective 3, 0x320d, DIFFBIT_A | DIFFBIT_SA | DIFFBIT_PA | DIFFBIT_PD // "Create vehicular diversion"
complete_flags STAGEFLAG_DIVERSION_CREATED
fail_flags STAGEFLAG_TAXI_DESTROYED
fail_flags STAGEFLAG_ROBOT_DESTROYED
endobjective
beginobjective 4, 0x320e, DIFFBIT_A | DIFFBIT_SA | DIFFBIT_PA | DIFFBIT_PD // "Gain entry to G5 building"
complete_flags STAGEFLAG_IN_ELEVATOR
fail_flags STAGEFLAG_CIVILIAN_DEAD
fail_flags STAGEFLAG_ELEVATOR_SEALED
endobjective
chr 0x00010c00, 0x1a, 0x00a9, BODY_CIAGUY, HEAD_RANDOM, FUNC_INIT_CIA1, -1, -1, 1000, 6, 0x80004000, 0x00000000, 0x20, 0x00, -1, 0, 0x00000000
chr 0x00000200, 0x00, 0x00aa, BODY_G5_GUARD, HEAD_RANDOM, 0x0414, -1, -1, 1000, 10, 0xa0004408, 0x00000000, 0x20, 0x00, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x0000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x000000c0, 0x17, 0x00ab, BODY_FBIGUY, HEAD_RANDOM, 0x0411, -1, -1, 800, 30, 0x8000a000, 0x00000000, 0x20, 0x00, -1, 0, 0x00000000
chr 0x00000200, 0x01, 0x00ac, BODY_G5_GUARD, HEAD_RANDOM, 0x0415, -1, -1, 1000, 10, 0xa0004408, 0x00000000, 0x20, 0x01, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x0001, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000080, 0x18, 0x00af, BODY_FBIGUY, HEAD_RANDOM, 0x0411, -1, -1, 500, 30, 0x8000e008, 0x00000000, 0x20, 0x01, -1, 0, 0x01000000
chr 0x00000200, 0x02, 0x00ad, BODY_G5_GUARD, HEAD_RANDOM, 0x0416, -1, -1, 1000, 10, 0xa0004008, 0x00000000, 0x20, 0x02, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x0002, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000200, 0x03, 0x00ae, BODY_G5_GUARD, HEAD_RANDOM, 0x040e, -1, -1, 1000, 50, 0xc0004008, 0x00000000, 0x20, 0x03, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x0003, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000200, 0x04, 0x00b0, BODY_G5_GUARD, HEAD_RANDOM, 0x040e, -1, -1, 1000, 50, 0xc0004008, 0x00000000, 0x20, 0x03, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x0004, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000200, 0x05, 0x00b1, BODY_G5_GUARD, HEAD_RANDOM, 0x0417, -1, -1, 1000, 50, 0xa0004008, 0x00000000, 0x20, 0x03, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x0005, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000000, 0x19, 0x00b3, BODY_FBIGUY, HEAD_RANDOM, 0x0411, -1, -1, 500, 20, 0xc000a000, 0x00000000, 0x20, 0x04, -1, 0, 0x02000000
chr 0x00000200, 0x06, 0x00b4, BODY_G5_GUARD, HEAD_RANDOM, 0x040f, -1, -1, 1000, 10, 0xc0004008, 0x00000000, 0x20, 0x04, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x0006, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000300, 0x0a, 0x00b6, BODY_G5_GUARD, HEAD_RANDOM, 0x040f, -1, -1, 1000, 10, 0xd0002008, 0x00000000, 0x20, 0x04, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x000a, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000200, 0x07, 0x00b5, BODY_G5_GUARD, HEAD_RANDOM, 0x040f, -1, -1, 1000, 10, 0xd0002008, 0x00001000, 0x20, 0x04, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x0007, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000200, 0x0b, 0x00b7, BODY_G5_GUARD, HEAD_RANDOM, 0x040f, -1, -1, 1000, 10, 0xc0004008, 0x00000000, 0x20, 0x04, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x000b, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000240, 0x08, 0x00cb, BODY_G5_GUARD, HEAD_RANDOM, 0x040f, -1, -1, 1000, 10, 0xd0002008, 0x00000000, 0x20, 0x04, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x0009, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000280, 0x09, 0x00cc, BODY_G5_GUARD, HEAD_RANDOM, 0x040f, -1, -1, 1000, 10, 0xd0002008, 0x00000000, 0x20, 0x04, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x0009, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000200, 0x0c, 0x00b8, BODY_G5_GUARD, HEAD_RANDOM, 0x0418, -1, -1, 500, 10, 0xc0004008, 0x00000000, 0x20, 0x05, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x000c, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00010c00, 0x1c, 0x00b9, BODY_CIAGUY, HEAD_RANDOM, FUNC_CIA, -1, -1, 1000, 6, 0x80000008, 0x00000000, 0x20, 0x05, -1, 0, 0x01000000
chr 0x00010c00, 0x1d, 0x0042, BODY_CIAGUY, HEAD_RANDOM, FUNC_CIA, -1, -1, 1000, 6, 0x80002000, 0x00000000, 0x20, 0x05, -1, 0, 0x02000000
chr 0x00000400, 0x0d, 0x00bf, BODY_G5_GUARD, HEAD_RANDOM, FUNC_SEALER1, -1, -1, 1000, 15, 0xc0004008, 0x00000000, 0x20, 0x01, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x000d, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000600, 0x0e, 0x00bc, BODY_G5_GUARD, HEAD_RANDOM, 0x040e, 0x00c5, -1, 1000, 15, 0xc0084008, 0x00000000, 0x20, 0x01, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x000e, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000600, 0x0f, 0x00bd, BODY_G5_GUARD, HEAD_RANDOM, 0x040e, 0x00c6, -1, 1000, 15, 0xc0084008, 0x00000000, 0x20, 0x01, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x000f, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000600, 0x10, 0x00be, BODY_G5_GUARD, HEAD_RANDOM, 0x040e, 0x00c7, -1, 1000, 15, 0xc0084008, 0x00000000, 0x20, 0x01, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x0010, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00010c00, 0x1b, 0x00b2, BODY_CIAGUY, HEAD_RANDOM, FUNC_BUGSPOTTER, -1, -1, 1000, 6, 0x80000000, 0x00000000, 0x20, 0x01, -1, 0, 0x00000000
chr 0x00000000, 0x11, 0x00c9, BODY_G5_GUARD, HEAD_RANDOM, GFUNC_IDLE, 0x00c9, -1, 1000, 30, 0xc1086008, 0x00000000, 0x20, 0x07, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x0011, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000000, 0x12, 0x00ca, BODY_G5_GUARD, HEAD_RANDOM, GFUNC_IDLE, 0x00ca, -1, 1000, 30, 0xc1086008, 0x00000000, 0x20, 0x07, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x0012, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000400, 0x1f, 0x0020, BODY_CHICROB, 0x00, FUNC_INIT_ROBOT, -1, -1, 1000, 15, 0x00000000, 0x00000000, 0x20, 0x00, -1, 0, 0x00000000
chr 0x00000000, 0x1e, 0x0063, BODY_G5_GUARD, HEAD_RANDOM, FUNC_HIDDENGUY, 0x00c8, -1, 1000, 15, 0x40084008, 0x00000000, 0x20, 0x01, -1, 0, 0x00000000
chr 0x00000200, 0x13, 0x00cd, BODY_G5_GUARD, HEAD_RANDOM, 0x040e, -1, -1, 500, 10, 0xc0004208, 0x00000000, 0x20, 0x08, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x0013, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000200, 0x14, 0x00ce, BODY_G5_GUARD, HEAD_RANDOM, 0x040e, -1, -1, 500, 10, 0xc0004208, 0x00000000, 0x20, 0x08, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x0014, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000200, 0x15, 0x00cf, BODY_G5_GUARD, HEAD_RANDOM, 0x040e, -1, -1, 500, 10, 0xc0004208, 0x00000000, 0x20, 0x08, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x0015, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
chr 0x00000200, 0x16, 0x00d1, BODY_G5_GUARD, HEAD_RANDOM, 0x040e, -1, -1, 1, 10, 0xc0004008, 0x00000000, 0x20, 0x08, -1, 0, 0x00000000
weapon 0x0100, MODEL_CHRCMP150, 0x0016, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CMP150, 0x00ffffff, 0x00000000
tag 0x00, 1
object 0x0100, MODEL_TAXICAB, 0xffff, 0x00021501, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
tag 0x01, 1
object 0x0100, MODEL_TAXICAB, 0xffff, 0x00021501, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
tag 0x02, 1
object 0x0100, MODEL_TAXICAB, 0xffff, 0x00021501, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
tag 0x03, 1
object 0x0100, MODEL_POLICECAR, 0xffff, 0x00021501, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
tag 0x05, 1
object 0x0100, MODEL_POLICECAR, 0xffff, 0x00021501, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
tag 0x06, 1
weapon 0x0180, MODEL_CHRBRIEFCASE, 0x00a6, 0x00422001, 0x00000001, 0x20400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_REMOTEMINE, 0x00ffffff, 0x00000000
rename_object -1, 0x22, 0x3226, 0x3227, 0x3228, 0x3229, 0x322a, 0x0000, 0x0000 // "Obtain Remote Mine."
tag 0x0f, 1
weapon 0x0180, MODEL_CHRBRIEFCASE, 0xffff, 0x00000001, 0x00000001, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_TRACERBUG, 0x00ffffff, 0x00000000
rename_object -1, 0x3e, 0x322b, 0x322c, 0x322d, 0x322e, 0x322f, 0x0000, 0x0000 // "Obtain Tracer Bug."
tag 0x1d, 1
weapon 0x0180, MODEL_CHRBRIEFCASE, 0xffff, 0x00000001, 0x00000001, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_TRACERBUG, 0x00ffffff, 0x00000000
rename_object -1, 0x3e, 0x322b, 0x322c, 0x322d, 0x322e, 0x322f, 0x0000, 0x0000 // "Obtain Tracer Bug."
tag 0x0e, 1
singlemonitor 0x0019, MODEL_G5_LASER_SWITCH, 0x00eb, 0x00000002, 0x00002301, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffff13
tag 0x07, 1
weapon 0x0180, MODEL_CHRBRIEFCASE, 0x00a6, 0x00462001, 0x00000001, 0x20400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_DATAUPLINK, 0x00ffffff, 0x00000000
rename_object -1, 0x36, 0x3231, 0x3232, 0x3233, 0x3234, 0x3235, 0x0000, 0x0000 // "Obtain Reprogrammer."
tag 0x1b, 1
weapon 0x0180, MODEL_CHRBRIEFCASE, 0x001c, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_FALCON2_SCOPE, 0x00ffffff, 0x00000000
rename_object -1, 0x04, 0x3237, 0x3238, 0x3239, 0x323a, 0x323b, 0x0000, 0x0000 // "Obtain Remote Mine."
tag 0x1e, 1
weapon 0x0180, MODEL_CHRBRIEFCASE, 0x001c, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_FALCON2_SCOPE, 0x00ffffff, 0x00000000
rename_object -1, 0x04, 0x3237, 0x3238, 0x3239, 0x323a, 0x323b, 0x0000, 0x0000 // "Obtain Remote Mine."
tag 0x1f, 1
object 0x0100, MODEL_CHRBRIEFCASE, 0x009c, 0x012004e1, 0x00086000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
tag 0x0a, 1
hover_vehicle 0x0100, MODEL_TAXICAB, 0x00a3, 0x20000108, 0x00000001, 0x10010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000002bc, 0x00000000, 0x00000000, 0x0fff0000, 0x0000040c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
tag 0x0c, 1
hover_vehicle 0x00cc, MODEL_LIMO, 0x00a4, 0x20000108, 0x00000001, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000002bc, 0x00000000, 0x00000000, 0x0fff0000, 0x0000040d, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
tag 0x21, 1
object 0x0100, MODEL_WIREFENCE, 0xffff, 0x00021501, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
tag 0x08, 1
door 0x0100, MODEL_G5_ESCDOORUP, 0x00fb, 0x13520d00, 0x20304300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x00000000, 0x00010000, 0x03e80000, 0x03e80000, 0x00010000, 0x00000000, 0x00000080, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
tag 0x09, 1
door 0x0100, MODEL_G5_ESCDOORDOWN, 0x00fc, 0x13520d00, 0x20304300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x00000000, 0x00010000, 0x03e80000, 0x03e80000, 0x00010000, 0x00000000, 0x00000080, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
tag 0x10, 2
tag 0x11, 2
door 0x0100, MODEL_G5CARLIFTDOOR, 0x00ec, 0x10000000, 0x00000000, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x0000e666, 0x00010000, 0x00003333, 0x00014000, 0x00001333, 0x00000000, 0x00000000, 0x00000384, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00001800, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
door 0x0100, MODEL_G5CARLIFTDOOR, 0x00ed, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x0000e666, 0x00010000, 0x00003333, 0x00014000, 0x00001333, 0x00080000, 0x00000000, 0x00000384, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
tag 0x14, 1
door 0x0100, MODEL_CH_SHUTTER1, 0x00ee, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x0000f5c2, 0x0000f333, 0x00003333, 0x00014000, 0x00001333, 0x00040004, 0x00000004, 0x00000384, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000a00, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
tag 0x1a, 1
door 0x0100, MODEL_CH_SHUTTER1, 0x00ef, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x0000f5c2, 0x0000f333, 0x00003333, 0x00014000, 0x00001333, 0x00040004, 0x00000000, 0x00000708, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
door 0x0100, MODEL_CH_SHUTTER1, 0x00f0, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x0000f5c2, 0x0000f333, 0x00003333, 0x00014000, 0x00001333, 0x00040004, 0x00000000, 0x00000384, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000a00, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
door 0x0100, MODEL_CH_SHUTTER1, 0x00f1, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x0000f5c2, 0x0000f333, 0x00003333, 0x00014000, 0x00001333, 0x00040004, 0x00000000, 0x00000384, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000a00, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
tag 0x15, 2
tag 0x16, 2
door 0x0100, MODEL_CH_SHUTTER1, 0x00f2, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x0000f5c2, 0x0000f333, 0x00003333, 0x00014000, 0x00001333, 0x000c0004, 0x00000004, 0x00000384, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000a00, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
door 0x0100, MODEL_CH_SHUTTER1, 0x00f3, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x0000f5c2, 0x0000f333, 0x00003333, 0x00014000, 0x00001333, 0x000c0004, 0x00000004, 0x00000384, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000a00, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
tag 0x19, 1
door 0x0100, MODEL_CH_SHUTTER1, 0x00f4, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x0000f5c2, 0x0000f333, 0x00003333, 0x00014000, 0x00001333, 0x000c0004, 0x00000004, 0x00000384, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000a00, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
tag 0x17, 2
tag 0x18, 2
door 0x0100, MODEL_CH_SHUTTER1, 0x00f5, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x0000f5c2, 0x0000f333, 0x00003333, 0x00014000, 0x00001333, 0x000c0004, 0x00000004, 0x00000384, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000a00, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
door 0x0100, MODEL_CH_SHUTTER1, 0x00f6, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x0000f5c2, 0x0000f333, 0x00003333, 0x00014000, 0x00001333, 0x000c0004, 0x00000004, 0x00000384, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000a00, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
door 0x0100, MODEL_CH_SHUTTER1, 0x00f7, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x0000f5c2, 0x0000f333, 0x00003333, 0x00014000, 0x00001333, 0x000c0004, 0x00000000, 0x00000384, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000a00, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
tag 0x12, 1
object 0x0100, MODEL_CHRREMOTEMINE, 0x0067, 0x012004e1, 0x00086001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
tag 0x13, 1
object 0x0100, MODEL_CHRREMOTEMINE, 0x0067, 0x012004e1, 0x00086001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
door 0x0100, MODEL_DOOR2A_G5, 0x00fd, 0x10000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x0000e666, 0x00010000, 0x00003333, 0x00014000, 0x00001333, 0x00040000, 0x00000000, 0x00000384, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000300, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
door 0x0100, MODEL_DOOR2A_G5, 0x00fe, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x0000e666, 0x00010000, 0x00003333, 0x00014000, 0x00001333, 0x00040000, 0x00000000, 0x00000384, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000300, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
door 0x0100, MODEL_DD_OFFICEDOOR, 0x0104, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x005a0000, 0x03e80000, 0x00640000, 0x00640000, 0x00010000, 0x00000005, 0x00000001, 0x000005dc, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000800, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
door 0x0100, MODEL_DD_OFFICEDOOR, 0x0105, 0x20000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x005a0000, 0x03e80000, 0x00640000, 0x00640000, 0x00010000, 0x00000005, 0x00000001, 0x000005dc, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
tag 0x25, 1
object 0x0100, MODEL_DUMPSTER, 0x011e, 0x004001e1, 0x00004000, 0x00000801, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
weapon 0x0100, MODEL_CHRBRIEFCASE, 0xffff, 0x40008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_CAMSPY, 0x00ffffff, 0x00000000
tag 0x24, -1
object 0x0100, MODEL_BARREL, 0x010b, 0x000001e1, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_BARREL, 0x010c, 0x000001e1, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_BARREL, 0x010e, 0x000001e1, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_BARREL, 0x010f, 0x000001e1, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_BARREL, 0x0110, 0x000001e1, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_BARREL, 0x0111, 0x000001e1, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_BARREL, 0x0112, 0x000001e1, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_BARREL, 0x0113, 0x000001e1, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_BARREL, 0x0114, 0x000001e1, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_BARREL, 0x0115, 0x000001e1, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_BARREL, 0x0116, 0x000001e1, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_BARREL, 0x0117, 0x000001e8, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_BARREL, 0x0119, 0x000000e8, 0x00080001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_BARREL, 0x011d, 0x000000e8, 0x00080001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_BARREL, 0x011c, 0x000000e8, 0x00080001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_BARREL, 0x011b, 0x000000e8, 0x00080001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_BARREL, 0x0118, 0x000000e8, 0x00080001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_BARREL, 0x011a, 0x000000e8, 0x00080001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_DUMPSTER, 0x0106, 0x000201e1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_DUMPSTER, 0x0107, 0x000201e1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_DUMPSTER, 0x0108, 0x000201e1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_DUMPSTER, 0x0109, 0x000201e1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
object 0x0100, MODEL_DUMPSTER, 0x010a, 0x000201e1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000
door 0x0100, MODEL_DD_GRATE, 0x00f8, 0x10000400, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x0000fd70, 0x00010000, 0x00003333, 0x00014000, 0x00001333, 0x08000000, 0x00000000, 0x00000384, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000300, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
door 0x0100, MODEL_DD_GRATE, 0x00f9, 0x10000400, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x0000fd70, 0x00010000, 0x00003333, 0x00014000, 0x00001333, 0x08000000, 0x00000000, 0x00000384, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000300, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
door 0x0100, MODEL_DD_GRATE, 0x00fa, 0x10000400, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x0000fd70, 0x00010000, 0x00003333, 0x00014000, 0x00001333, 0x08000000, 0x00000000, 0x00000384, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000300, 0x00000000, 0xff000000, 0x00000000, 0x00000000, 0x00000000
tag 0x22, 2
tag 0x23, 2
weapon 0x0100, MODEL_CHRFALCON2, 0x011f, 0x00420001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_FALCON2_SCOPE, 0x00ffffff, 0x00000000
weapon 0x0100, MODEL_CHRFALCON2, 0x011f, 0x00420001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, WEAPON_FALCON2_SCOPE, 0x00ffffff, 0x00000000
link_collectibles -1, -2
tag 0x1c, 1
shield 0x0100, MODEL_CHRSHIELD, 0x0121, 0x00000001, 0x000000e0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x00010000, 0x00000000, 0x00000000
tag 0x20, 1
shield 0x0100, MODEL_CHRSHIELD, 0x0122, 0x00000001, 0x000000c0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x00010000, 0x00000000, 0x00000000
tinted_glass 0x0100, MODEL_DD_WINDOW, 0x0123, 0x14000b62, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x04b007d0, 0x0000ffff, 0x00000000
tinted_glass 0x0100, MODEL_DD_WINDOW, 0x0124, 0x14000b62, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x04b007d0, 0x0000ffff, 0x00000000
tinted_glass 0x0100, MODEL_DD_WINDOW, 0x0125, 0x14000b62, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x04b007d0, 0x0000ffff, 0x00000000
pad_effect PADEFFECT_SPLASH, 0x009b
pad_effect PADEFFECT_SPLASH, 0x009c
pad_effect PADEFFECT_SPLASH, 0x009d
pad_effect PADEFFECT_SPLASH, 0x009e
endprops
intro:
ammo AMMOTYPE_PISTOL, 50
outfit OUTFIT_TRENCH
spawn 0x0063
endintro
path00:
pad 0x00d3
pad 0x00d4
pad 0x00d9
pad 0x00d6
pad 0x00d7
pad 0x0036
pad 0x00d7
pad 0x00d6
pad 0x00d9
pad 0x00d4
pad 0x00d3
endpath
path01:
pad 0x00da
pad 0x00d7
pad 0x00d7
pad 0x00d6
pad 0x00d9
pad 0x00d5
pad 0x00d4
pad 0x00db
pad 0x00de
pad 0x00d3
endpath
path02:
pad 0x00a4
pad 0x00a4
pad 0x00a4
pad 0x00a4
pad 0x00a4
endpath
path03:
pad 0x00e3
endpath
path04:
pad 0x00a3
pad 0x00a3
pad 0x00a3
pad 0x00a3
pad 0x00a3
endpath
path05:
pad 0x00e8
endpath
path06:
pad 0x00ea
pad 0x00ea
pad 0x00ea
pad 0x00e8
endpath
path07:
pad 0x0061
pad 0x0060
pad 0x0065
pad 0x005f
pad 0x005e
pad 0x005d
pad 0x005e
pad 0x005f
pad 0x0065
pad 0x0060
endpath
path08:
pad 0x0038
pad 0x002e
pad 0x000c
pad 0x002e
pad 0x0038
pad 0x0037
endpath
path09:
pad 0x0033
pad 0x0035
pad 0x0034
pad 0x002d
pad 0x0028
pad 0x002a
pad 0x001d
pad 0x002a
pad 0x0028
pad 0x002d
pad 0x0034
pad 0x0035
endpath
path10:
pad 0x0047
pad 0x0046
pad 0x0047
endpath
path11:
pad 0x0034
pad 0x0043
pad 0x0041
pad 0x0051
pad 0x0041
pad 0x0043
pad 0x0034
endpath
path12:
pad 0x0061
pad 0x0060
pad 0x0066
pad 0x0062
pad 0x0063
pad 0x0064
pad 0x0063
pad 0x0062
pad 0x0066
pad 0x0060
endpath
path13:
pad 0x00da
pad 0x00d7
pad 0x00d7
pad 0x00d6
pad 0x00d9
pad 0x00d5
pad 0x00d4
pad 0x00db
pad 0x00de
pad 0x00d3
endpath
.macro chicago_car_do_animation object animation
show_object \object
set_object_flag_bank1 \object, OBJECTFLAG1_04000000
set_object_flag_bank2 \object, OBJECTFLAG2_00000010
object_do_animation \animation, \object, 0x04ff, 0xff
.endm
.macro chicago_wait_for_camera
beginloop 0x05
if_camera_animating /*goto*/ 0x03
goto_next 0x04
label 0x03
if_controller_button_pressed /*goto*/ 0x04
goto_first 0x05
label 0x04
.endm
func0401_3ae8:
set_stage_flag STAGEFLAG_TRIGGER_INTRO
if_controller_button_pressed /*goto*/ 0x00
camera_movement 0x00cf
set_music_track MUSIC_CHICAGO_INTRO
set_chr_flag_bank3 CHR_JOANNA, CHRFLAG3_HIDDEN
chicago_car_do_animation OBJ_CAR1, 0x00d6
chicago_car_do_animation OBJ_CAR2, 0x00d7
chicago_car_do_animation OBJ_CAR3, 0x00d8
chicago_car_do_animation OBJ_CAR4, 0x00d5
set_chr_flag_bank3 CHR_CIA1, CHRFLAG3_HIDDEN
fade_to_color 0x000000ff, 0
fade_to_color 0x00000000, 90
chicago_wait_for_camera
unset_chr_flag_bank3 CHR_JOANNA, CHRFLAG3_HIDDEN
hide_object OBJ_CAR1
hide_object OBJ_CAR2
hide_object OBJ_CAR3
hide_object OBJ_CAR4
unset_chr_flag_bank3 CHR_CIA1, CHRFLAG3_HIDDEN
label 0x00
return
endfunction
func0402_3bb4:
set_chr_flag_bank3 CHR_VELVET, CHRFLAG3_HIDDEN
set_chr_flag_bank3 CHR_COUNTEROP, CHRFLAG3_HIDDEN
if_controller_button_pressed /*goto*/ 0x00
camera_movement 0x00d0
set_chr_flag_bank3 CHR_JOANNA, CHRFLAG3_HIDDEN
chicago_car_do_animation OBJ_CAR1, 0x00dc
chicago_car_do_animation OBJ_CAR2, 0x00dd
chicago_car_do_animation OBJ_CAR4, 0x00d9
chicago_car_do_animation OBJ_CAR5, 0x00db
set_chr_flag_bank3 CHR_CIA1, CHRFLAG3_HIDDEN
chicago_wait_for_camera
unset_chr_flag_bank3 CHR_JOANNA, CHRFLAG3_HIDDEN
hide_object OBJ_CAR1
hide_object OBJ_CAR2
hide_object OBJ_CAR4
hide_object OBJ_CAR5
unset_chr_flag_bank3 CHR_CIA1, CHRFLAG3_HIDDEN
label 0x00
return
endfunction
func0403_3c74:
if_controller_button_pressed /*goto*/ 0x00
camera_movement 0x00d1
set_chr_flag_bank3 CHR_JOANNA, CHRFLAG3_HIDDEN
show_object OBJ_CAR4
set_object_flag_bank1 OBJ_CAR4, OBJECTFLAG1_04000000
set_object_flag_bank2 OBJ_CAR4, OBJECTFLAG2_00000010
object_do_animation 0x00de, OBJ_CAR4, 0x04ff, 0xff
set_chr_flag_bank3 CHR_CIA1, CHRFLAG3_HIDDEN
set_cutscene_weapon CHR_JOANNA, WEAPON_NONE, WEAPON_NONE
yield
set_cutscene_weapon CHR_JOANNA, WEAPON_FALCON2_SCOPE, WEAPON_NONE
chicago_wait_for_camera
unset_chr_flag_bank3 CHR_JOANNA, CHRFLAG3_HIDDEN
hide_object OBJ_CAR4
unset_chr_flag_bank3 CHR_CIA1, CHRFLAG3_HIDDEN
label 0x00
return
endfunction
func0404_3ce0:
show_object OBJ_WIREFENCE
set_object_flag_bank1 OBJ_WIREFENCE, OBJECTFLAG1_04000000
set_object_flag_bank2 OBJ_WIREFENCE, OBJECTFLAG2_00000010
object_do_animation 0x0470, OBJ_WIREFENCE, 0x01ff, 0xff
if_controller_button_pressed /*goto*/ 0x00
camera_movement 0x00e0
set_chr_flag_bank3 CHR_JOANNA, CHRFLAG3_UNPLAYABLE
set_chr_flag_bank2 CHR_JOANNA, CHRFLAG2_00020000
animation 0x00e1, -1, -1, 0x0600, CHR_JOANNA, 4
set_chr_flag_bank3 CHR_CIA1, CHRFLAG3_HIDDEN
chicago_wait_for_camera
unset_chr_flag_bank3 CHR_CIA1, CHRFLAG3_HIDDEN
unset_chr_flag_bank3 CHR_JOANNA, CHRFLAG3_UNPLAYABLE
label 0x00
return
endfunction
func0405_3d50:
camera_movement 0x00d2
cmd0175 60
if_controller_button_pressed /*goto*/ 0x00
set_chr_flag_bank3 CHR_JOANNA, CHRFLAG3_UNPLAYABLE
set_chr_flag_bank2 CHR_JOANNA, CHRFLAG2_00020000
animation 0x00df, -1, -1, 0x0600, CHR_JOANNA, 4
set_chr_flag_bank3 CHR_CIA1, CHRFLAG3_HIDDEN
restart_timer
beginloop 0x2d
if_controller_button_pressed /*goto*/ 0x2f
if_timer_gt 480, /*goto*/ 0x04
endloop 0x2d
label 0x04
set_cutscene_weapon CHR_JOANNA, WEAPON_NONE, WEAPON_NONE
yield
set_cutscene_weapon CHR_JOANNA, WEAPON_NONE, WEAPON_NONE
beginloop 0x2f
if_controller_button_pressed /*goto*/ 0x04
if_timer_gt 910, /*goto*/ 0x04
endloop 0x2f
label 0x04
chicago_wait_for_camera
label 0x00
unset_chr_flag_bank3 CHR_VELVET, CHRFLAG3_HIDDEN
unset_chr_flag_bank3 CHR_COUNTEROP, CHRFLAG3_HIDDEN
mute_channel CHANNEL_7
unset_chr_flag_bank3 CHR_CIA1, CHRFLAG3_HIDDEN
unset_chr_flag_bank3 CHR_JOANNA, CHRFLAG3_UNPLAYABLE
set_chr_flag_bank2 CHR_JOANNA, CHRFLAG2_00020000
animation 0x00df, -2, -1, 0x0600, CHR_JOANNA, 2
restart_default_music
reset_ambience
set_stage_flag STAGEFLAG_INTRO_FINISHED
enter_firstperson
set_function CHR_SELF, GFUNC_IDLE
endfunction
unregistered_function1:
set_return_function CHR_SELF, GFUNC_END_CINEMA
set_function CHR_SELF, 0x0401
endfunction
unregistered_function2:
set_return_function CHR_SELF, GFUNC_END_CINEMA
set_function CHR_SELF, 0x0402
endfunction
unregistered_function3:
set_return_function CHR_SELF, GFUNC_END_CINEMA
set_function CHR_SELF, 0x0403
endfunction
unregistered_function4:
set_return_function CHR_SELF, GFUNC_END_CINEMA
set_function CHR_SELF, 0x0404
endfunction
unregistered_function5:
set_function CHR_SELF, 0x0405
endfunction
func040a_intro:
set_return_function CHR_SELF, 0x0406
set_function CHR_SELF, 0x0401
endfunction
func0406_3e54:
set_return_function CHR_SELF, 0x0407
set_function CHR_SELF, 0x0402
endfunction
func0407_3e60:
set_return_function CHR_SELF, 0x0408
set_function CHR_SELF, 0x0403
endfunction
func0408_3e6c:
set_return_function CHR_SELF, 0x0409
set_function CHR_SELF, 0x0404
endfunction
func0409_3e78:
set_function CHR_SELF, 0x0405
endfunction
func100f_check_mine:
if_difficulty_lt DIFF_SA, /*goto*/ 0x0a
// SA and PA
yield
beginloop 0x08
consider_coop_for_p1p2_chr CHR_SELF
if_chr_has_object CHR_P1P2, OBJ_BRIEFCASE1, /*goto*/ 0x03
reloop 0x08
label 0x03
set_target_chr CHR_P1P2
beginloop 0x11
dprint "MAIN\n"
if_chr_death_animation_finished TARGET_CHR, /*goto*/ 0x29
if_chr_dying TARGET_CHR, /*goto*/ 0x29
if_chr_unloaded TARGET_CHR, /*goto*/ 0x29
if_ammo_quantity_lt TARGET_CHR, AMMOTYPE_REMOTE_MINE, 1, /*goto*/ 0x03
endloop 0x11
label 0x29
label 0x54
yield
dprint "DEAD\n"
if_chr_death_animation_finished TARGET_CHR, /*goto*/ 0x28
if_chr_dying TARGET_CHR, /*goto*/ 0x28
if_chr_unloaded TARGET_CHR, /*goto*/ 0x28
yield
dprint "NOTDEAD\n"
if_ammo_quantity_lt CHR_JOANNA, AMMOTYPE_REMOTE_MINE, 1, /*goto*/ 0x29
reloop 0x08
label 0x29
if_ammo_quantity_lt CHR_VELVET, AMMOTYPE_REMOTE_MINE, 1, /*goto*/ 0x29
endloop 0x08
label 0x29
dprint "NOAMMO\n"
label 0x28
dprint "STILLDEAD\n"
goto_first 0x54
label 0x03
dprint "FAIL\n"
yield
yield
yield
yield
yield
if_weapon_thrown WEAPON_REMOTEMINE, /*goto*/ 0x04
goto_first 0x11
label 0x04
restart_timer
beginloop 0x05
if_weapon_thrown_on_object WEAPON_REMOTEMINE, OBJ_FIREDOORTOP, /*goto*/ 0x06
if_weapon_thrown_on_object WEAPON_REMOTEMINE, OBJ_FIREDOORBOTTOM, /*goto*/ 0x08
if_timer_gt 120, /*goto*/ 0x07
endloop 0x05
label 0x08
unset_eeprom_flag EEPROMFLAG_G5_MINE
goto_next 0x03
label 0x06
set_eeprom_flag EEPROMFLAG_G5_MINE
label 0x03
set_stage_flag STAGEFLAG_MINE_PLACED
message CHR_P1P2, 0x320f // "Mine placed correctly."
// Check that the player hasn't detonated the mine
beginloop 0x2d
if_weapon_thrown_on_object WEAPON_REMOTEMINE, OBJ_FIREDOORTOP, /*goto*/ 0x03
if_weapon_thrown_on_object WEAPON_REMOTEMINE, OBJ_FIREDOORBOTTOM, /*goto*/ 0x03
goto_next 0x04
label 0x03
endloop 0x2d
label 0x04
set_stage_flag STAGEFLAG_MINE_WASTED
message CHR_P1P2, 0x3248 // "Remote Mine has been wasted."
set_function CHR_SELF, GFUNC_IDLE
label 0x07
set_stage_flag STAGEFLAG_MINE_WASTED
message CHR_P1P2, 0x3210 // "Mine placed incorrectly."
label 0x0a
set_function CHR_SELF, GFUNC_IDLE
endfunction
func1026_uplink:
beginloop 0x10
consider_coop_for_p1p2_chr CHR_SELF
if_chr_activated_object CHR_P1P2, OBJ_TAXI, /*goto*/ 0x03
reloop 0x10
label 0x03
if_stage_flag_eq STAGEFLAG_TAXI_REPROGRAMMED, FALSE, /*goto*/ 0x04
message CHR_P1P2, 0x3211 // "Virus already downloaded into NavComp."
reloop 0x10
label 0x04
if_chr_weapon_equipped CHR_P1P2, WEAPON_DATAUPLINK, /*goto*/ 0x03
message CHR_P1P2, 0x3212 // "Hovcab is unresponsive - need Reprogrammer."
reloop 0x10
// Uplinking
label 0x03
message CHR_P1P2, 0x3213 // "Accessing hovercab navigation systems."
assign_sound 0x0456, CHANNEL_7
control_sound_from_object CHANNEL_7, OBJ_TAXI, TRUE
restart_timer
beginloop 0x05
if_timer_gt 300, /*goto*/ 0x04
if_chr_distance_to_pad_gt CHR_P1P2, 350, 0x00a3, /*goto*/ 0x06
endloop 0x05
label 0x04
message CHR_P1P2, 0x3214 // "Virus downloaded successfully."
yield
message CHR_P1P2, 0x3215 // "Hovercab navigation systems reprogrammed."
mute_channel CHANNEL_7
assign_sound 0x01c1, CHANNEL_7
control_sound_from_object CHANNEL_7, OBJ_TAXI, TRUE
yield
set_stage_flag STAGEFLAG_TAXI_REPROGRAMMED
set_function CHR_SELF, GFUNC_IDLE
// Moved away while uplinking
label 0x06
message CHR_P1P2, 0x3216 // "Connection to hovercab broken."
mute_channel CHANNEL_7
yield
yield
yield
assign_sound 0x0457, CHANNEL_4
play_sound_from_object CHANNEL_4, OBJ_TAXI, 0x012c, 0x0190
restart_timer
beginloop 0x1d
if_timer_gt 120, /*goto*/ 0x04
endloop 0x1d
label 0x04
mute_channel CHANNEL_4
endloop 0x10
endfunction
func040d_limo:
begin_hovercar_path 0x02
set_vehicle_speed SPEED_WALK, 0
if_difficulty_lt DIFF_SA, /*goto*/ 0x03
// SA and PA
set_chr_health CHR_SELF, 34464
goto_next 0x04
// A
label 0x03
set_chr_health CHR_SELF, 65456
// All difficulties
label 0x04
// Wait for flag set, provided limo not destroyed
beginloop 0x05
if_object_in_good_condition OBJ_LIMO, /*goto*/ 0x03
set_function CHR_SELF, GFUNC_IDLE
label 0x03
if_stage_flag_eq STAGEFLAG_LIMO_READY_TO_LEAVE, TRUE, /*goto*/ 0x04
endloop 0x05
label 0x04
// Wait until not in room
beginloop 0x2d
consider_coop_for_p1p2_chr CHR_SELF
if_chr_in_room CHR_P1P2, 0x00, 0x0002, /*goto*/ 0x03
if_chr_in_room CHR_P1P2, 0x00, 0x0010, /*goto*/ 0x03
if_chr_in_room CHR_P1P2, 0x00, 0x0012, /*goto*/ 0x03
goto_next 0x04
label 0x03
endloop 0x2d
label 0x04
set_object_flag_bank1 OBJ_LIMO, OBJECTFLAG1_04000000
set_object_flag_bank2 OBJ_LIMO, OBJECTFLAG2_00000010
object_do_animation 0x02d6, OBJ_LIMO, 0x04ff, 0xff
assign_sound 0x01b4, CHANNEL_1
play_sound_from_object CHANNEL_1, OBJ_LIMO, 0x0960, 0x0c80
if_stage_flag_eq STAGEFLAG_TRACERBUG_PLACED, TRUE, /*goto*/ 0x03
if_difficulty_lt DIFF_PA, /*goto*/ 0x03
set_stage_flag STAGEFLAG_LIMO_ESCAPED
message CHR_JOANNA, 0x321c // "DataDyne limo has escaped."
label 0x03
set_function CHR_SELF, GFUNC_IDLE
endfunction
func040c_taxi:
if_difficulty_lt DIFF_SA, /*goto*/ 0x03
// SA and PA
set_chr_health CHR_SELF, 34464
goto_next 0x04
// A
label 0x03
set_chr_health CHR_SELF, 65456
begin_hovercar_path 0x04
set_vehicle_speed SPEED_WALK, 0
// All difficulties
label 0x04
beginloop 0x05
if_stage_flag_eq STAGEFLAG_TRIGGER_TAXI_LEAVE, TRUE, /*goto*/ 0x04
label 0x03
endloop 0x05
// Check taxi healthy
label 0x04
if_object_in_good_condition OBJ_TAXI, /*goto*/ 0x03
set_function CHR_SELF, GFUNC_IDLE
// Take off
label 0x03
assign_sound 0x8000, CHANNEL_0
play_sound_from_object CHANNEL_0, OBJ_TAXI, 0x0960, 0x0c80
object_do_animation 0x0168, OBJ_TAXI, 0x04ff, 0xff
set_object_flag_bank1 OBJ_TAXI, OBJECTFLAG1_04000000
// Wait for flag
beginloop 0x06
if_stage_flag_eq STAGEFLAG_TAXI_ALMOST_READY_TO_CRASH, TRUE, /*goto*/ 0x04
endloop 0x06
// Check taxi healthy
label 0x04
if_object_in_good_condition OBJ_TAXI, /*goto*/ 0x03
set_function CHR_SELF, GFUNC_IDLE
label 0x03
set_stage_flag STAGEFLAG_TAXI_READY_TO_CRASH
// Wait for another flag
beginloop 0x07
if_stage_flag_eq STAGEFLAG_ROBOT_NEAR_CORNER, TRUE, /*goto*/ 0x04
endloop 0x07
label 0x04
label 0x38
dprint "GO FOR CRASH\n"
set_stage_flag STAGEFLAG_TRIGGER_CRASH
yield
mute_channel CHANNEL_0
object_do_animation 0x0169, OBJ_TAXI, 0x04ff, 0xff
label 0x0a
set_function CHR_SELF, GFUNC_IDLE
endfunction
.macro tracerbug_logic chr chr2
set_follow_chr \chr
if_difficulty_lt DIFF_PA, /*goto*/ 0x54
goto_next 0x04
// A or SA
label 0x54
set_function CHR_SELF, GFUNC_IDLE
// PA
label 0x04
yield
beginloop 0x11
dprint "BUG C1\n"
set_target_chr \chr2
if_chr_death_animation_finished \chr, /*goto*/ 0x2f
if_chr_dying \chr, /*goto*/ 0x2f
if_chr_unloaded \chr, /*goto*/ 0x2f
if_ammo_quantity_lt \chr, AMMOTYPE_BUG, 1, /*goto*/ 0x03
label 0x04
endloop 0x11
// Dead - not sure why it checks this a second time
beginloop 0x2f
dprint "BUG DO\n"
set_target_chr \chr2
if_chr_death_animation_finished \chr, /*goto*/ 0x30
if_chr_dying \chr, /*goto*/ 0x30
if_chr_unloaded \chr, /*goto*/ 0x30
label 0x31
yield
yield
yield
yield
yield
goto_first 0x11
label 0x30
endloop 0x2f
// Alive but has no bug
label 0x03
dprint "BUG C2\n"
yield
if_weapon_thrown WEAPON_TRACERBUG, /*goto*/ 0x04
goto_first 0x03
// Check limo healthy
label 0x04
if_object_in_good_condition OBJ_LIMO, /*goto*/ 0x04
set_function CHR_SELF, GFUNC_IDLE
label 0x04
restart_timer
beginloop 0x05
dprint "BUG C3\n"
if_weapon_thrown_on_object WEAPON_TRACERBUG, OBJ_LIMO, /*goto*/ 0x06
if_timer_gt 120, /*goto*/ 0x07
endloop 0x05
label 0x06
set_stage_flag STAGEFLAG_TRACERBUG_PLACED
unset_stage_flag STAGEFLAG_TRACERBUG_WASTED
message \chr, 0x3217 // "Tracer Bug placed correctly."
restart_timer
beginloop 0x08
dprint "BUG C4\n"
if_timer_gt 300, /*goto*/ 0x04
goto_first 0x08
label 0x04
set_stage_flag STAGEFLAG_TRACERBUG_SAFE
set_function CHR_SELF, GFUNC_IDLE
// Bug wasted
label 0x07
dprint "WRONG1\n"
if_stage_flag_eq STAGEFLAG_ONE_BUG_REMAINING, TRUE, /*goto*/ 0x03
dprint "WRONG2\n"
set_stage_flag STAGEFLAG_ONE_BUG_REMAINING
set_function CHR_SELF, GFUNC_IDLE
label 0x03
dprint "WRONG3\n"
set_stage_flag STAGEFLAG_TRACERBUG_WASTED
message \chr, 0x3218 // "Tracer Bug placed incorrectly."
set_function CHR_SELF, GFUNC_IDLE
.endm
func1004_tracerbug_joanna:
tracerbug_logic CHR_JOANNA, CHR_JOANNA
endfunction
func1011_trackerbug_velvet:
yield
if_chr_death_animation_finished CHR_VELVET, /*goto*/ 0x03
goto_next 0x04
label 0x03
set_stage_flag STAGEFLAG_ONE_BUG_REMAINING
set_function CHR_SELF, GFUNC_IDLE
label 0x04
tracerbug_logic CHR_VELVET, FOLLOW_CHR
endfunction
func1005_check_things_destroyed:
beginloop 0x10
// Check limo
if_stage_flag_eq STAGEFLAG_LIMO_DESTROYED, TRUE, /*goto*/ 0x03
if_object_in_good_condition OBJ_LIMO, /*goto*/ 0x03
set_stage_flag STAGEFLAG_LIMO_DESTROYED
mute_channel CHANNEL_1
if_difficulty_lt DIFF_SA, /*goto*/ 0x03
message CHR_JOANNA, 0x3219 // "Mission critical vehicle destroyed."
// Check taxi
label 0x03
if_stage_flag_eq STAGEFLAG_DIVERSION_CREATED, TRUE, /*goto*/ 0x03
if_stage_flag_eq STAGEFLAG_TAXI_DESTROYED, TRUE, /*goto*/ 0x03
if_object_in_good_condition OBJ_TAXI, /*goto*/ 0x03
mute_channel CHANNEL_0
set_stage_flag STAGEFLAG_TAXI_DESTROYED
message CHR_JOANNA, 0x3219 // "Mission critical vehicle destroyed."
// Check robot
label 0x03
if_stage_flag_eq STAGEFLAG_DIVERSION_CREATED, TRUE, /*goto*/ 0x03
if_stage_flag_eq STAGEFLAG_ROBOT_DESTROYED, TRUE, /*goto*/ 0x03
if_chr_dying CHR_ROBOT, /*goto*/ 0x04
goto_next 0x03
label 0x04
restart_timer
beginloop 0x05
if_timer_gt 120, /*goto*/ 0x04
endloop 0x05
label 0x04
set_stage_flag STAGEFLAG_ROBOT_DESTROYED
message CHR_JOANNA, 0x3219 // "Mission critical vehicle destroyed."
label 0x03
endloop 0x10
endfunction
func1006_check_for_end:
beginloop 0x05
consider_coop_for_p1p2_chr CHR_SELF
if_objective_complete 0, /*goto*/ 0x03
reloop 0x05
label 0x03
if_objective_complete 3, /*goto*/ 0x03
reloop 0x05
label 0x03
if_difficulty_lt DIFF_SA, /*goto*/ 0x0a
if_objective_complete 2, /*goto*/ 0x03
reloop 0x05
label 0x03
if_difficulty_lt DIFF_PA, /*goto*/ 0x0a
if_objective_complete 1, /*goto*/ 0x0a
reloop 0x05
label 0x0a
dprint "PAD CHECK\n"
if_chr_distance_to_pad_lt CHR_P1P2, 350, 0x00a7, /*goto*/ 0x04
endloop 0x05
label 0x04
set_stage_flag STAGEFLAG_IN_ELEVATOR
dprint "IN THE ELEVATOR\n"
yield
yield
set_invincible CHR_JOANNA
revoke_control CHR_JOANNA, 4
// But there is no countdown timer...
hide_countdown_timer
stop_countdown_timer
if_all_objectives_complete /*goto*/ 0x05
// Objectives failed
message CHR_P1P2, 0x321a // "MISSION FAILED"
label 0x03
restart_timer
beginloop 0x13
if_timer_gt 280, /*goto*/ 0x12
endloop 0x13
label 0x12
end_level
set_function CHR_SELF, GFUNC_IDLE
// Objectives complete
label 0x05
if_chr_death_animation_finished CHR_JOANNA, /*goto*/ 0x03
if_chr_dying CHR_JOANNA, /*goto*/ 0x03
if_chr_unloaded CHR_JOANNA, /*goto*/ 0x03
goto_next 0x04
label 0x03
if_chr_death_animation_finished CHR_VELVET, /*goto*/ 0x03
if_chr_dying CHR_VELVET, /*goto*/ 0x03
if_chr_unloaded CHR_VELVET, /*goto*/ 0x03
goto_next 0x04
label 0x03
end_level
set_function CHR_SELF, GFUNC_IDLE
label 0x04
set_function CHR_SELF, FUNC_OUTRO
set_function CHR_SELF, GFUNC_IDLE
endfunction
func040d_limo_timing:
// Wait for any of the following:
// - Taxi reprogrammed
// - Tracer bug placed and robot on drain street
// - 2 minutes elapsed and robot on drain street (3 mins on Agent)
restart_timer
beginloop 0x05
if_stage_flag_eq STAGEFLAG_TAXI_REPROGRAMMED, TRUE, /*goto*/ 0x04
if_stage_flag_eq STAGEFLAG_ROBOT_ON_DRAIN_STREET, TRUE, /*goto*/ 0x03
reloop 0x05
label 0x03
if_stage_flag_eq STAGEFLAG_TRACERBUG_PLACED, TRUE, /*goto*/ 0x04
if_difficulty_gt DIFF_SA, /*goto*/ 0x07
if_difficulty_gt DIFF_A, /*goto*/ 0x06
// A - 3 minute timer
if_timer_gt 10800, /*goto*/ 0x04
reloop 0x05
// SA - 2 minute timer
label 0x06
if_timer_gt 7200, /*goto*/ 0x04
reloop 0x05
// PA - 2 minute timer
label 0x07
if_timer_gt 7200, /*goto*/ 0x04
endloop 0x05
// Ready to leave
label 0x04
set_stage_flag STAGEFLAG_LIMO_READY_TO_LEAVE
dprint "LIMO READY TO GO\n"
restart_timer
// Wait 15 seconds
beginloop 0x0a
if_timer_gt 900, /*goto*/ 0x04
endloop 0x0a
label 0x04
set_stage_flag STAGEFLAG_LIMO_READY_15SEC_AGO
set_function CHR_SELF, GFUNC_IDLE
endfunction
func040c_taxi_timing:
// Wait for both conditions
beginloop 0x07
if_stage_flag_eq STAGEFLAG_ROBOT_ON_DRAIN_STREET, TRUE, /*goto*/ 0x03
reloop 0x07
label 0x03
if_stage_flag_eq STAGEFLAG_TAXI_REPROGRAMMED, TRUE, /*goto*/ 0x03
endloop 0x07
// Wait 3.3 seconds
label 0x03
restart_timer
beginloop 0x05
if_timer_gt 200, /*goto*/ 0x04
endloop 0x05
label 0x04
set_stage_flag STAGEFLAG_TRIGGER_TAXI_LEAVE
restart_timer
// Wait 10 seconds
beginloop 0x06
if_timer_gt 600, /*goto*/ 0x04
endloop 0x06
label 0x04
set_stage_flag STAGEFLAG_TAXI_ALMOST_READY_TO_CRASH
unset_object_flag_bank1 OBJ_TAXI, OBJECTFLAG1_04000000
set_function CHR_SELF, GFUNC_IDLE
endfunction
func0412_cia:
set_return_function CHR_SELF, FUNC_CIA
set_onshot_function FUNC_CIA
if_chr_dying CHR_SELF, /*goto*/ 0x04
if_chr_death_animation_finished CHR_SELF, /*goto*/ 0x04
if_chr_unloaded CHR_SELF, /*goto*/ 0x04
goto_next 0x03
label 0x04
set_function CHR_SELF, GFUNC_IDLE
label 0x03
if_chr_idle /*goto*/ 0x43
if_num_times_shot_lt 1, /*goto*/ 0x10
// Has been shot
beginloop 0x0d
if_chr_stopped /*goto*/ 0x04
endloop 0x0d
label 0x04
goto_next 0x0c
// Unreachable
restart_timer
// Chr is idle
beginloop 0x43
if_saw_death 0x00, /*goto*/ 0x1d
if_shot_near_chr 0x00, /*goto*/ 0x1e
dprint "DURINGTALK\n"
if_timer_gt 180, /*goto*/ 0x04
endloop 0x43
// Idle + 3 seconds
label 0x04
if_self_flag_bankx_eq CHRFLAG0_00004000, TRUE, BANK_0, /*goto*/ 0x54
dprint "NOT A PATROLLER\n"
stop_chr
goto_next 0x10
// Patroller
label 0x54
dprint "PAT RET\n"
start_path
// Not shot, not a patroller, or patroller who has started his path
label 0x10
yield
consider_coop_for_p1p2_chr CHR_SELF
set_target_chr CHR_P1P2
if_self_flag_bankx_eq CHRFLAG0_00004000, TRUE, BANK_0, /*goto*/ 0x37
call_rng
if_rand_gt 128, /*goto*/ 0x37
label 0x2d
restart_timer
label 0x08
stop_chr
if_self_flag_bankx_eq CHRFLAG1_DONE_SEARCH_ANIM, TRUE, BANK_1, /*goto*/ 0x03
call_rng
if_rand_gt 128, /*goto*/ 0x03
call_rng
if_rand_lt 64, /*goto*/ 0x50
if_rand_lt 128, /*goto*/ 0x51
if_rand_lt 196, /*goto*/ 0x52
set_self_flag_bankx CHRFLAG1_DONE_SEARCH_ANIM, BANK_1
animation ANIM_SMOKE_CIGARETTE, 0, -1, 0x100a, CHR_SELF, 2
goto_next 0x36
label 0x50
animation ANIM_SCRATCH_HEAD, 0, -1, 0x100a, CHR_SELF, 2
goto_next 0x36
label 0x51
animation ANIM_YAWN, 0, -1, 0x100a, CHR_SELF, 2
goto_next 0x36
label 0x52
animation ANIM_GRAB_CROTCH, 0, -1, 0x100a, CHR_SELF, 2
goto_next 0x36
label 0x53
animation ANIM_TWO_GUN_HOLD, 0, 100, 0x100a, CHR_SELF, 2
goto_next 0x36
label 0x03
unset_self_flag_bankx CHRFLAG1_DONE_SEARCH_ANIM, BANK_1
cmd0049 0x003e, /*goto*/ 0x04
set_target_pad 0x00ba
goto_next 0x03
label 0x04
call_rng
if_rand_lt 64, /*goto*/ 0x50
if_rand_lt 128, /*goto*/ 0x51
if_rand_lt 196, /*goto*/ 0x52
try_set_target_pad_to_something 0x08, /*goto*/ 0x03
label 0x50
try_set_target_pad_to_something 0x02, /*goto*/ 0x03
label 0x51
try_set_target_pad_to_something 0x04, /*goto*/ 0x03
label 0x52
try_set_target_pad_to_something 0x08, /*goto*/ 0x03
goto_next 0x36
label 0x03
go_to_target_pad SPEED_WALK
beginloop 0x36
consider_coop_for_p1p2_chr CHR_SELF
set_target_chr CHR_P1P2
if_saw_death 0x00, /*goto*/ 0x1d
if_shot_near_chr 0x00, /*goto*/ 0x1e
if_target_chr_in_sight /*goto*/ 0x04
if_chr_stopped /*goto*/ 0x35
endloop 0x36
label 0x35
goto_first 0x10
label 0x37
if_saw_death 0x00, /*goto*/ 0x1d
if_shot_near_chr 0x00, /*goto*/ 0x1e
if_target_chr_in_sight /*goto*/ 0x04
goto_first 0x10
label 0x04
restart_timer
label 0x05
yield
if_saw_death 0x00, /*goto*/ 0x1d
if_shot_near_chr 0x00, /*goto*/ 0x1e
if_chr_weapon_equipped CHR_P1P2, WEAPON_UNARMED, /*goto*/ 0x03
goto_next 0x04
label 0x03
if_self_flag_bankx_eq CHRFLAG0_00002000, TRUE, BANK_0, /*goto*/ 0x03
if_chr_distance_gt 450, /*goto*/ 0x03
set_self_flag_bankx CHRFLAG0_00002000, BANK_0
set_return_function CHR_SELF, FUNC_CIA
set_function CHR_SELF, GFUNC_CIVILIAN_SAY_COMMENT
label 0x03
if_timer_lt 600, /*goto*/ 0x03
unset_self_flag_bankx CHRFLAG0_00002000, BANK_0
label 0x03
dprint "LIMO READY TO GO\n"
goto_first 0x10
label 0x1e
restart_timer
try_face_entity 0x0200, 0x0000, /*goto*/ 0x09
beginloop 0x09
if_angle_to_target_chr_lt 10, /*goto*/ 0x04
if_timer_gt 40, /*goto*/ 0x04
endloop 0x09
// Saw a death
label 0x1d
restart_timer
animation ANIM_LOOK_AROUND_FRANTIC, 0, 193, 0x1010, CHR_SELF, 2
// Shot near chr, or follow through from above
beginloop 0x1e
if_timer_gt 90, /*goto*/ 0x0c
endloop 0x1e
label 0x04
set_group_alertness 100
beginloop 0x38
if_any_chr_doing_action ACTION_COWER, /*goto*/ 0x04
goto_next 0x03
// A civilian is cowering
label 0x04
restart_timer
beginloop 0x3a
if_timer_gt 120, /*goto*/ 0x04
endloop 0x3a
label 0x04
set_self_flag_bankx CHRFLAG0_00000080, BANK_0
set_group 0x03
endloop 0x38
label 0x03
cmd0145_rebuild_groups
cmd0146_rebuild_groups
set_action ACTION_COWER, FALSE
say_quip CHR_JOANNA, 0x18, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00
animation ANIM_SURRENDER_002E, 0, 193, 0x1010, CHR_SELF, 2
beginloop 0x0a
if_timer_gt 120, /*goto*/ 0x0c
endloop 0x0a
// Alerted
label 0x0c
set_action ACTION_SCAN, FALSE
if_self_flag_bankx_eq CHRFLAG0_00000080, FALSE, BANK_0, /*goto*/ 0x03
set_group 0x04
cmd0145_rebuild_groups
cmd0146_rebuild_groups
label 0x03
set_chr_alliance CHR_SELF, ALLIANCE_ALLY
cmd0145_rebuild_groups
cmd0146_rebuild_groups
try_target_chr_in_same_group /*goto*/ 0x04
goto_next 0x0b
label 0x03
goto_first 0x05
label 0x04
set_chr_alliance CHR_SELF, 0x80
cmd0145_rebuild_groups
cmd0146_rebuild_groups
try_run_to_chr FOLLOW_CHR, /*goto*/ 0x06
beginloop 0x06
if_self_distance_to_chr_lt 2520, CHR_HIDDENGUY, /*goto*/ 0x03
reloop 0x06
label 0x03
if_detected_chr FOLLOW_CHR, /*goto*/ 0x04
endloop 0x06
label 0x04
set_group_alertness 100
say_quip CHR_JOANNA, 0x19, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00
label 0x0b
set_chr_alliance CHR_SELF, 0x80
cmd0145_rebuild_groups
cmd0146_rebuild_groups
if_self_flag_bankx_eq CHRFLAG0_00002000, TRUE, BANK_0, /*goto*/ 0x2d
if_self_flag_bankx_eq CHRFLAG0_00004000, TRUE, BANK_0, /*goto*/ 0x2f
run_to_pad 0x00c8
goto_next 0x07
label 0x2d
run_to_pad 0x005a
goto_next 0x07
label 0x2f
run_to_pad 0x0026
label 0x07
yield
if_chr_stopped /*goto*/ 0x04
label 0x03
goto_first 0x07
label 0x04
label 0x0e
animation ANIM_COWER_0229, -1, -1, 0x100a, CHR_SELF, 2
beginloop 0x0f
if_chr_stopped /*goto*/ 0x03
endloop 0x0f
label 0x03
goto_first 0x0e
endfunction
func0413_bugspotter:
.set LABEL_RUN_AWAY, 0x0d
set_alertness 255
set_onshot_function FUNC_BUGSPOTTER
if_chr_dying CHR_SELF, /*goto*/ 0x04
if_chr_death_animation_finished CHR_SELF, /*goto*/ 0x04
if_chr_unloaded CHR_SELF, /*goto*/ 0x04
goto_next 0x03
label 0x04
set_function CHR_SELF, GFUNC_IDLE
label 0x03
// Wait until player in sight (mainly)
beginloop 0x10
consider_coop_for_p1p2_chr CHR_SELF
set_target_chr CHR_P1P2
if_target_chr_in_sight /*goto*/ 0x04
if_stage_flag_eq STAGEFLAG_LIMO_READY_TO_LEAVE, TRUE, /*goto*/ LABEL_RUN_AWAY
if_stage_flag_eq STAGEFLAG_TRACERBUG_PLACED, TRUE, /*goto*/ LABEL_RUN_AWAY
if_stage_flag_eq STAGEFLAG_TAXI_READY_TO_CRASH, TRUE, /*goto*/ LABEL_RUN_AWAY
if_object_in_good_condition OBJ_LIMO, /*goto*/ 0x03
goto_next LABEL_RUN_AWAY
label 0x03
endloop 0x10
// Player in sight - face them
label 0x04
restart_timer
try_face_entity 0x0200, 0x0000, /*goto*/ 0x04
beginloop 0x09
if_angle_to_target_chr_lt 10, /*goto*/ 0x04
if_timer_gt 40, /*goto*/ 0x04
endloop 0x09
// Make a comment
label 0x04
if_chr_weapon_equipped CHR_P1P2, WEAPON_UNARMED, /*goto*/ 0x03
if_chr_weapon_equipped CHR_P1P2, WEAPON_NONE, /*goto*/ 0x03
say_quip CHR_JOANNA, 0x1a, 0xff, 0x0a, 0xff, 0x81, 0x00, 0x00
goto_next 0x04
label 0x03
say_quip CHR_JOANNA, 0x17, 0xff, 0x0a, 0xff, 0x81, 0x00, 0x00
label 0x04
animation ANIM_TALKING_00A3, 0, -1, 0x0010, CHR_SELF, 2
// Looks like he spots if the tracer bug if he sees Jo within 8.3 seconds of
// the bug landing on the limo.
beginloop 0x08
if_stage_flag_eq STAGEFLAG_LIMO_READY_TO_LEAVE, TRUE, /*goto*/ LABEL_RUN_AWAY
if_stage_flag_eq STAGEFLAG_TAXI_READY_TO_CRASH, TRUE, /*goto*/ LABEL_RUN_AWAY
if_object_in_good_condition OBJ_LIMO, /*goto*/ 0x03
goto_next LABEL_RUN_AWAY
label 0x03
consider_coop_for_p1p2_chr CHR_SELF
set_target_chr CHR_P1P2
if_target_chr_in_sight /*goto*/ 0x03
consider_coop_for_p1p2_chr CHR_SELF
set_target_chr CHR_P1P2
if_target_chr_in_sight /*goto*/ 0x03
goto_next 0x0a
label 0x03
if_stage_flag_eq STAGEFLAG_TRACERBUG_SAFE, TRUE, /*goto*/ 0x0a
if_stage_flag_eq STAGEFLAG_TRACERBUG_PLACED, TRUE, /*goto*/ 0x04
label 0x0a
if_timer_gt 500, /*goto*/ 0x03
endloop 0x08
label 0x03
if_stage_flag_eq STAGEFLAG_TRACERBUG_PLACED, TRUE, /*goto*/ LABEL_RUN_AWAY
goto_first 0x10
// Bug was thrown recently
label 0x04
animation ANIM_TALKING_00A3, 0, -1, 0x0010, CHR_SELF, 2
assign_sound 0x044a, CHANNEL_6
play_sound_from_entity CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01
set_stage_flag STAGEFLAG_TRACERBUG_SPOTTED
message CHR_JOANNA, 0x3243 // "Tracer Bug has been spotted."
// Wait for talking animation to finish
beginloop 0x05
if_stage_flag_eq STAGEFLAG_LIMO_READY_TO_LEAVE, TRUE, /*goto*/ LABEL_RUN_AWAY
if_stage_flag_eq STAGEFLAG_TAXI_READY_TO_CRASH, TRUE, /*goto*/ LABEL_RUN_AWAY
if_object_in_good_condition OBJ_LIMO, /*goto*/ 0x03
goto_next LABEL_RUN_AWAY
label 0x03
if_chr_stopped /*goto*/ 0x04
endloop 0x05
// Find another guard and run to them
label 0x04
try_target_chr_in_same_group /*goto*/ 0x04
goto_next 0x0b
label 0x04
try_run_to_chr FOLLOW_CHR, /*goto*/ 0x06
// Wait until detected target guard
beginloop 0x06
if_stage_flag_eq STAGEFLAG_LIMO_READY_TO_LEAVE, TRUE, /*goto*/ LABEL_RUN_AWAY
if_stage_flag_eq STAGEFLAG_TAXI_READY_TO_CRASH, TRUE, /*goto*/ LABEL_RUN_AWAY
if_object_in_good_condition OBJ_LIMO, /*goto*/ 0x03
goto_next LABEL_RUN_AWAY
label 0x03
if_detected_chr FOLLOW_CHR, /*goto*/ 0x04
endloop 0x06
// Alert everyone in group
label 0x04
set_group_alertness 100
assign_sound 0x0467, CHANNEL_6
play_sound_from_entity CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01
// No other guard to run to
label 0x0b
retreat 0x02, 0x02
beginloop 0x07
if_stage_flag_eq STAGEFLAG_LIMO_READY_TO_LEAVE, TRUE, /*goto*/ LABEL_RUN_AWAY
if_stage_flag_eq STAGEFLAG_TAXI_READY_TO_CRASH, TRUE, /*goto*/ LABEL_RUN_AWAY
if_object_in_good_condition OBJ_LIMO, /*goto*/ 0x03
goto_next LABEL_RUN_AWAY
label 0x03
consider_coop_for_p1p2_chr CHR_SELF
set_target_chr CHR_P1P2
if_within_units_of_sight 30, /*goto*/ 0x03
consider_coop_for_p1p2_chr CHR_SELF
set_target_chr CHR_P1P2
if_within_units_of_sight 30, /*goto*/ 0x03
goto_next 0x04
label 0x03
goto_first 0x07
label 0x04
restart_timer
beginloop 0x0e
if_timer_gt 10, /*goto*/ 0x03
endloop 0x0e
label 0x03
consider_coop_for_p1p2_chr CHR_SELF
set_target_chr CHR_P1P2
if_within_units_of_sight 30, /*goto*/ 0x03
goto_next 0x04
label 0x03
goto_first 0x07
label 0x04
unset_self_flag_bank3 CHRFLAG3_KILLCOUNTABLE
set_self_flag_bankx CHRFLAG0_00002000, BANK_0
yield
drop_gun_and_fade_out
set_function CHR_SELF, GFUNC_IDLE
label LABEL_RUN_AWAY
jog_to_pad 0x004f
beginloop 0x0e
if_chr_stopped /*goto*/ 0x04
endloop 0x0e
label 0x04
stop_chr
set_function CHR_SELF, GFUNC_IDLE
endfunction
.macro init_patroller pathid
set_chr_dodge_rating 2, 0x0a
set_accuracy 4
set_reaction_speed 30
set_chr_health CHR_SELF, 40
set_armor 0
set_recovery_speed 0
set_shield 0
assign_path \pathid
start_path
set_function CHR_SELF, GFUNC_UNALERTED
beginloop 0x04
endloop 0x04
.endm
func0414_start_path07:
init_patroller 0x07
endfunction
func0415_start_path08:
init_patroller 0x08
endfunction
func0416_start_path09:
init_patroller 0x09
endfunction
func0417_start_path10:
init_patroller 0x0a
endfunction
func0418_start_path11:
init_patroller 0x0b
endfunction
/**
* This chr waits 2 seconds before starting his path.
*/
func0419_init_cia1:
restart_timer
beginloop 0x05
if_timer_gt 120, /*goto*/ 0x04
endloop 0x05
label 0x04
assign_path 12
start_path
set_function CHR_SELF, FUNC_CIA
beginloop 0x04
endloop 0x04
endfunction
func041d_fbi:
set_onshot_function FUNC_FBI
if_chr_dying CHR_SELF, /*goto*/ 0x04
if_chr_death_animation_finished CHR_SELF, /*goto*/ 0x04
if_chr_unloaded CHR_SELF, /*goto*/ 0x04
goto_next 0x03
label 0x04
set_function CHR_SELF, GFUNC_IDLE
label 0x03
if_num_times_shot_lt 1, /*goto*/ 0x19
// Shot - wait for animation to finish
beginloop 0x05
if_chr_stopped /*goto*/ 0x04
endloop 0x05
label 0x04
goto_next 0x17
// Unreachable
label 0x04
say_quip CHR_JOANNA, 0x1b, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00
set_group_alertness 100
goto_next 0x16
// Not shot
label 0x19
set_action ACTION_SCAN, TRUE
yield
consider_coop_for_p1p2_chr CHR_SELF
set_target_chr CHR_P1P2
if_alertness 100, OPERATOR_LESS_THAN, /*goto*/ 0x04
goto_next 0x16
label 0x04
if_target_chr_in_sight /*goto*/ 0x18
if_near_miss /*goto*/ 0x18
if_num_times_shot_gt 0, /*goto*/ 0x18
if_hears_gunfire /*goto*/ 0x16
if_shot_near_chr 0x00, /*goto*/ 0x16
if_saw_death 0x00, /*goto*/ 0x16
if_dying /*goto*/ 0x16
endloop 0x19
label 0x16
if_stage_flag_eq STAGEFLAG_ALARM_SOUNDED, FALSE, /*goto*/ 0x04
// Draw magnum and go after player
label 0x17
try_draw_weapon MODEL_CHRDY357, WEAPON_DY357MAGNUM, 0x10000000, /*goto*/ 0x03
label 0x03
set_function CHR_SELF, GFUNC_ALERTED
label 0x04
dprint "TRACK PLAYER\n"
try_run_to_target_chr_with_hand_up /*goto*/ 0x06
beginloop 0x06
if_chr_distance_lt 500, /*goto*/ 0x18
if_target_chr_in_sight /*goto*/ 0x18
consider_coop_for_p1p2_chr CHR_SELF
set_target_chr CHR_P1P2
if_target_chr_in_sight /*goto*/ 0x18
consider_coop_for_p1p2_chr CHR_SELF
set_target_chr CHR_P1P2
endloop 0x06
label 0x18
if_stage_flag_eq STAGEFLAG_ALARM_SOUNDED, FALSE, /*goto*/ 0x04
try_draw_weapon MODEL_CHRDY357, WEAPON_DY357MAGNUM, 0x10000000, /*goto*/ 0x03
label 0x03
set_function CHR_SELF, GFUNC_ALERTED
label 0x04
restart_timer
try_face_entity 0x0200, 0x0000, /*goto*/ 0x0d
beginloop 0x0d
if_angle_to_target_chr_lt 10, /*goto*/ 0x04
if_timer_gt 40, /*goto*/ 0x04
endloop 0x0d
label 0x04
say_quip CHR_JOANNA, 0x1b, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00
animation 0x0266, 0, 193, 0x0010, CHR_SELF, 2
beginloop 0x0e
if_difficulty_lt DIFF_SA, /*goto*/ 0x03
if_chr_propsoundcount_zero CHR_SELF, /*goto*/ 0x04
label 0x03
if_chr_stopped /*goto*/ 0x04
endloop 0x0e
label 0x04
dprint "CREATED WEAP\n"
try_draw_weapon MODEL_CHRDY357, WEAPON_DY357MAGNUM, 0x10000000, /*goto*/ 0x04
label 0x04
yield
set_stage_flag STAGEFLAG_ALARM_SOUNDED
activate_alarm
dprint "CREATED WEAP\n"
set_function CHR_SELF, GFUNC_ALERTED
endfunction
.macro check_cia_dead chr
beginloop 0x10
if_chr_dying \chr, /*goto*/ 0x05
endloop 0x10
// Unreachable
label 0x03
set_function CHR_SELF, GFUNC_IDLE
label 0x05
set_stage_flag STAGEFLAG_CIVILIAN_DEAD
message CHR_JOANNA, 0x321d // "Mission failed - unacceptable civilian casualties."
set_function CHR_SELF, GFUNC_IDLE
.endm
func1009_check_cia1_dead:
check_cia_dead CHR_CIA1
endfunction
/**
* This guy is allowed to be killed once he has a certain flag.
*/
func100a_check_cia2_dead:
beginloop 0x10
if_chr_flag_bankx CHR_CIA2, CHRFLAG0_00002000, BANK_0, /*goto*/ 0x03
if_chr_dying CHR_CIA2, /*goto*/ 0x05
endloop 0x10
// Stop checking this chr
label 0x03
set_function CHR_SELF, GFUNC_IDLE
label 0x05
set_stage_flag STAGEFLAG_CIVILIAN_DEAD
message CHR_JOANNA, 0x321d // "Mission failed - unacceptable civilian casualties."
set_function CHR_SELF, GFUNC_IDLE
endfunction
func100b_check_cia3_dead:
check_cia_dead CHR_CIA3
endfunction
func100c_check_cia4_dead:
check_cia_dead CHR_CIA4
endfunction
func041b_init_robot:
set_accuracy 40
set_shield 100
set_chr_flag_bank2 CHR_SELF, CHRFLAG2_10000000
set_function CHR_SELF, FUNC_ROBOT
endfunction
func041a_robot:
set_self_flag_bank3 CHRFLAG3_00040000
set_chr_health CHR_SELF, 1
if_chr_dying CHR_SELF, /*goto*/ 0x0c
assign_path 0
start_path
beginloop 0x02
set_target_chr CHR_HIDDENGUY
if_something_chicago_robot /*goto*/ 0x03
unset_stage_flag STAGEFLAG_ROBOT_NEAR_HOME
goto_next 0x04
label 0x03
set_stage_flag STAGEFLAG_ROBOT_NEAR_HOME
label 0x04
consider_coop_for_p1p2_chr CHR_SELF
set_target_chr CHR_P1P2
if_stage_flag_eq STAGEFLAG_TRIGGER_CRASH, TRUE, /*goto*/ 0x01
if_target_chr_in_sight /*goto*/ 0x08
call_rng
if_rand_gt 5, /*goto*/ 0x03
if_sound_finished CHANNEL_5, /*goto*/ 0x04
goto_next 0x03
label 0x04
call_rng
if_rand_lt 86, /*goto*/ 0x06
if_rand_lt 172, /*goto*/ 0x07
assign_sound 0x046a, CHANNEL_5
play_sound_from_entity CHANNEL_5, CHR_SELF, 0x0bb8, 0x1770, 0x01
goto_next 0x03
label 0x06
assign_sound 0x046b, CHANNEL_5
play_sound_from_entity CHANNEL_5, CHR_SELF, 0x0bb8, 0x1770, 0x01
goto_next 0x03
label 0x07
assign_sound 0x046c, CHANNEL_5
play_sound_from_entity CHANNEL_5, CHR_SELF, 0x0bb8, 0x1770, 0x01
label 0x03
if_path_started /*goto*/ 0x03
start_path
label 0x03
reloop 0x02
label 0x08
restart_timer
stop_chr
if_self_flag_bankx_eq CHRFLAG0_00002000, TRUE, BANK_0, /*goto*/ 0x05
play_sound 0x1aeb, -1
set_self_flag_bankx CHRFLAG0_00002000, BANK_0
label 0x05
try_unset_chr_flag_bank3_02000000 CHR_SELF, /*goto*/ 0x03
goto_next 0x05
label 0x03
if_self_flag_bankx_eq CHRFLAG0_00004000, TRUE, BANK_0, /*goto*/ 0x05
play_sound 0x1aec, -1
set_self_flag_bankx CHRFLAG0_00004000, BANK_0
beginloop 0x05
set_target_chr CHR_HIDDENGUY
if_something_chicago_robot /*goto*/ 0x03
unset_stage_flag STAGEFLAG_ROBOT_NEAR_HOME
goto_next 0x04
label 0x03
set_stage_flag STAGEFLAG_ROBOT_NEAR_HOME
label 0x04
set_target_chr CHR_P1P2
if_stage_flag_eq STAGEFLAG_TRIGGER_CRASH, TRUE, /*goto*/ 0x01
if_timer_gt 120, /*goto*/ 0x04
if_self_flag_bankx_eq CHRFLAG0_00002000, FALSE, BANK_0, /*goto*/ 0x2a
if_target_chr_in_sight /*goto*/ 0x03
label 0x2a
endloop 0x05
label 0x03
set_target_chr CHR_P1P2
restart_timer
try_aim_and_shoot_thing1 0x0200, 0x0000, /*goto*/ 0x09
reloop 0x02
beginloop 0x09
unset_stage_flag STAGEFLAG_ROBOT_NEAR_HOME
set_target_chr CHR_P1P2
if_stage_flag_eq STAGEFLAG_TRIGGER_CRASH, TRUE, /*goto*/ 0x01
if_timer_gt 60, /*goto*/ 0x04
if_chr_stopped /*goto*/ 0x04
endloop 0x09
label 0x04
set_self_flag_bankx CHRFLAG0_00002000, BANK_0
start_path
endloop 0x02
label 0x0c
assign_sound 0x1aec, CHANNEL_6
play_sound_from_entity CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01
set_function CHR_SELF, GFUNC_IDLE
label 0x01
label 0x04
label 0x38
set_chr_flag_bank3 CHR_ROBOT, CHRFLAG3_UNPLAYABLE
unset_chr_flag_bank3 CHR_ROBOT, CHRFLAG3_HIDDEN
set_chr_flag_bank2 CHR_ROBOT, CHRFLAG2_00020000
set_self_flag_bank3 CHRFLAG3_INVINCIBLE_TO_GUNFIRE
unset_chr_flag_bank2 CHR_SELF, CHRFLAG2_10000000
set_function CHR_ROBOT, GFUNC_IDLE
set_shield 0
animation 0x016a, 0, -1, 0x0600, CHR_SELF, 4
beginloop 0x2d
dprint "PART 4\n"
if_chr_stopped /*goto*/ 0x04
goto_first 0x2d
label 0x04
set_function CHR_SELF, GFUNC_IDLE
endfunction
func041e_sealer1:
.set LABEL_ALERTED, 0x18
set_chr_dodge_rating 2, 0x0a
set_accuracy 4
set_reaction_speed 30
set_chr_health CHR_SELF, 40
set_armor 0
set_recovery_speed 0
set_shield 0
set_onshot_function GFUNC_IDLE
beginloop 0x19
consider_coop_for_p1p2_chr CHR_SELF
set_target_chr CHR_P1P2
if_stage_flag_eq STAGEFLAG_CRASH_FINISHED, TRUE, /*goto*/ 0x03
if_alertness 100, OPERATOR_LESS_THAN, /*goto*/ 0x04
goto_next LABEL_ALERTED
label 0x04
if_target_chr_in_sight /*goto*/ LABEL_ALERTED
if_near_miss /*goto*/ LABEL_ALERTED
if_num_times_shot_gt 0, /*goto*/ LABEL_ALERTED
if_hears_gunfire /*goto*/ LABEL_ALERTED
if_shot_near_chr 0x00, /*goto*/ LABEL_ALERTED
if_saw_death 0x00, /*goto*/ LABEL_ALERTED
if_dying /*goto*/ LABEL_ALERTED
endloop 0x19
// Crash happened
label 0x03
unset_chr_flag_bank2 CHR_SELF, CHRFLAG2_00000400
jog_to_pad 0x00c4
set_function CHR_SEALER2, FUNC_JOG_TO_ACCIDENT
set_function CHR_SEALER3, FUNC_JOG_TO_ACCIDENT
set_function CHR_SEALER4, FUNC_JOG_TO_ACCIDENT
beginloop 0x0d
if_alertness 99, OPERATOR_GREATER_THAN, /*goto*/ 0x03
if_chr_stopped /*goto*/ 0x04
endloop 0x0d
// At crash site
label 0x04
restart_timer
beginloop 0x0c
if_alertness 99, OPERATOR_GREATER_THAN, /*goto*/ 0x03
if_timer_gt 120, /*goto*/ 0x04
endloop 0x0c
label 0x03
set_function CHR_SELF, GFUNC_UNALERTED
// Conversation
label 0x04
assign_sound 0x814b, CHANNEL_6
play_sound_from_entity CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01
animation ANIM_TALKING_0098, -1, -1, 0x0200, CHR_SELF, 2
restart_timer
beginloop 0x07
if_alertness 99, OPERATOR_GREATER_THAN, /*goto*/ 0x04
if_timer_gt 120, /*goto*/ 0x03
endloop 0x07
label 0x03
assign_sound 0x044f, CHANNEL_6
play_sound_from_entity CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01
animation ANIM_TALKING_0231, -1, -1, 0x0200, CHR_SEALER1, 2
animation ANIM_TWO_GUN_HOLD, -1, -1, 0x0200, CHR_SELF, 2
beginloop 0x08
if_alertness 99, OPERATOR_GREATER_THAN, /*goto*/ 0x04
if_sound_finished CHANNEL_6, /*goto*/ 0x03
goto_first 0x08
label 0x03
assign_sound 0x0450, CHANNEL_6
play_sound_from_entity CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01
animation ANIM_TALKING_0233, -1, -1, 0x0200, CHR_SEALER3, 2
animation ANIM_TWO_GUN_HOLD, -1, -1, 0x0200, CHR_SEALER1, 2
restart_timer
beginloop 0x09
if_alertness 99, OPERATOR_GREATER_THAN, /*goto*/ 0x04
if_timer_gt 180, /*goto*/ 0x03
goto_first 0x09
label 0x03
assign_sound 0x0451, CHANNEL_6
play_sound_from_entity CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01
animation ANIM_TALKING_0232, -1, -1, 0x0200, CHR_SEALER1, 2
animation ANIM_TWO_GUN_HOLD, -1, -1, 0x0200, CHR_SEALER3, 2
restart_timer
beginloop 0x0a
if_alertness 99, OPERATOR_GREATER_THAN, /*goto*/ 0x04
if_timer_gt 120, /*goto*/ 0x03
goto_first 0x0a
label 0x03
assign_sound 0x0452, CHANNEL_6
play_sound_from_entity CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01
animation ANIM_TALKING_0234, -1, -1, 0x0200, CHR_SEALER3, 2
animation ANIM_TWO_GUN_HOLD, -1, -1, 0x0200, CHR_SEALER1, 2
beginloop 0x0b
if_alertness 99, OPERATOR_GREATER_THAN, /*goto*/ 0x04
if_shot_near_chr 0x00, /*goto*/ 0x04
if_sound_finished CHANNEL_6, /*goto*/ 0x04
endloop 0x0b
label 0x04
set_function CHR_SELF, GFUNC_UNALERTED
// Alerted - seal elevator
label LABEL_ALERTED
label 0x04
close_door 0x10
close_door 0x11
lock_door 0x10, 0x02
lock_door 0x11, 0x02
set_stage_flag STAGEFLAG_ELEVATOR_SEALED
assign_sound 0x0469, CHANNEL_6
play_sound_from_entity CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01
message CHR_JOANNA, 0x3221 // "Elevator access sealed."
animation ANIM_STANDING_TYPE_ONE_HAND, 0, 193, 0x1010, CHR_SELF, 2
beginloop 0x06
if_chr_stopped /*goto*/ 0x04
goto_first 0x06
label 0x04
set_function CHR_SELF, GFUNC_ALERTED
endfunction
func100d_spawn_alarm_responders:
restart_timer
beginloop 0x05
if_stage_flag_eq STAGEFLAG_ALARM_SOUNDED, TRUE, /*goto*/ 0x03
endloop 0x05
label 0x03
restart_timer
play_sound 0x7af0, -1 // "Attention all personnel"
beginloop 0x1d
if_timer_gt 200, /*goto*/ 0x03
endloop 0x1d
label 0x03
restart_timer
play_sound 0x7af1, -1 // "Locate and apprehend fugitive"
beginloop 0x1e
if_timer_gt 120, /*goto*/ 0x03
endloop 0x1e
label 0x03
play_x_music CHANNEL_10, 60
goto_next 0x04
// When the alarm sounds, there are 4 groups of people who respond.
// Each group has 4 guards, and the entire group must be dead before the
// next group is spawned. There is a 15 second delay between groups.
// Each group spawns at a different location.
.macro spawn_group pad
try_spawn_chr BODY_G5_SWAT_GUARD, HEAD_RANDOM, \pad, FUNC_ALARM_RESPONDER, 0x00000200, /*goto*/ 0x04
label 0x04
yield
yield
yield
yield
yield
try_spawn_chr BODY_G5_SWAT_GUARD, HEAD_RANDOM, \pad, FUNC_ALARM_RESPONDER, 0x00000200, /*goto*/ 0x04
label 0x04
yield
yield
yield
yield
yield
try_spawn_chr BODY_G5_SWAT_GUARD, HEAD_RANDOM, \pad, FUNC_ALARM_RESPONDER, 0x00000200, /*goto*/ 0x04
label 0x04
yield
yield
yield
yield
yield
try_spawn_chr BODY_G5_SWAT_GUARD, HEAD_RANDOM, \pad, FUNC_ALARM_RESPONDER, 0x00000200, /*goto*/ 0x04
label 0x04
.endm
label 0x07
unlock_door 0x14, 0x04
restart_timer
if_stage_flag_eq STAGEFLAG_ALARM_GROUP1_DEAD, TRUE, /*goto*/ 0x08
// Spawn group 1
spawn_group 0x0067
goto_next 0x06
// Group 1 is already done
label 0x08
unlock_door 0x15, 0x04
unlock_door 0x16, 0x04
if_stage_flag_eq STAGEFLAG_ALARM_GROUP2_DEAD, TRUE, /*goto*/ 0x09
// Spawn group 2
spawn_group 0x00c2
goto_next 0x06
// Groups 1 and 2 are done
label 0x09
unlock_door 0x17, 0x04
unlock_door 0x18, 0x04
if_stage_flag_eq STAGEFLAG_ALARM_GROUP3_DEAD, TRUE, /*goto*/ 0x0a
// Spawn group 3
spawn_group 0x00c3
goto_next 0x06
// Groups 1, 2 and 3 are done
// Spawn group 3
label 0x0a
unlock_door 0x19, 0x04
spawn_group 0x00c1
goto_next 0x06
// Wait until group is dead
beginloop 0x06
if_all_chrs_in_group_are_dead GROUP_ALARM_RESPONDER, /*goto*/ 0x04
endloop 0x06
// Set this group as dead
label 0x04
if_stage_flag_eq STAGEFLAG_ALARM_GROUP1_DEAD, TRUE, /*goto*/ 0x04
set_stage_flag STAGEFLAG_ALARM_GROUP1_DEAD
goto_next 0x03
label 0x04
if_stage_flag_eq STAGEFLAG_ALARM_GROUP2_DEAD, TRUE, /*goto*/ 0x04
set_stage_flag STAGEFLAG_ALARM_GROUP2_DEAD
goto_next 0x03
label 0x04
if_stage_flag_eq STAGEFLAG_ALARM_GROUP3_DEAD, TRUE, /*goto*/ 0x04
set_stage_flag STAGEFLAG_ALARM_GROUP3_DEAD
goto_next 0x03
label 0x04
set_function CHR_SELF, GFUNC_IDLE
// Wait 15 seconds
label 0x03
restart_timer
beginloop 0x2d
if_timer_gt 900, /*goto*/ 0x04
endloop 0x2d
// Loop again to trigger next group
label 0x04
goto_first 0x07
endfunction
func041f_alarm_responder:
set_self_flag_bankx CHRFLAG1_00080000, BANK_1
set_self_flag_bankx CHRFLAG0_80000000, BANK_0
set_chr_dodge_rating 2, 0x0a
set_accuracy 14
set_reaction_speed 20
set_chr_health CHR_SELF, 40
set_armor 0
set_recovery_speed 0
set_shield 0
try_draw_weapon MODEL_CHRDY357, WEAPON_DY357MAGNUM, 0x00000000, /*goto*/ 0x04
label 0x04
set_chr_alliance CHR_SELF, 0x20
set_group GROUP_ALARM_RESPONDER
set_self_flag_bankx CHRFLAG0_00002000, BANK_0
set_self_flag_bankx CHRFLAG0_00008000, BANK_0
set_alertness 90
set_self_flag_bank3 CHRFLAG3_00000200
cmd0145_rebuild_groups
cmd0146_rebuild_groups
set_function CHR_SELF, GFUNC_SEARCH_FOR_PLAYER
endfunction
func0420_jog_to_accident:
unset_chr_flag_bank2 CHR_SELF, CHRFLAG2_00000400
label 0x03
go_to_target_pad SPEED_JOG
// This is a bit weird. I'm pretty sure the set_function causes this
// function to stop. But because the guard has been issued the
// go_to_target_pad command, he'll continue to do so while running the
// unalerted function.
label 0x0d
set_function CHR_SELF, GFUNC_UNALERTED
yield
if_chr_stopped /*goto*/ 0x04
goto_first 0x0d
label 0x04
endfunction
func040a_intro_from_gameplay:
set_function CHR_SELF, 0x040a
set_function CHR_SELF, GFUNC_IDLE
endfunction
func101f_setup_robot_noise:
play_sound_from_object2 CHANNEL_2, CHR_ROBOT, 0x80b9, 0x00, 0x02
set_function CHR_SELF, GFUNC_IDLE
endfunction
/**
* Not sure why it would give briefcases to the players.
* Note this is a coop/counterop only function.
*/
func1400_give_briefcases:
yield
set_chr_alliance CHR_COUNTEROP, 0x20
set_chr_flag_bank3 CHR_TOPSTAIRS, CHRFLAG3_HAS_SPECIAL_DEATH_ANIMATION
set_chr_flag_bank3 CHR_TOPSTAIRS, CHRFLAG3_00000020
set_chr_flag_bank3 0x0a, CHRFLAG3_00000020
if_difficulty_lt DIFF_PA, /*goto*/ 0x03
// PA
give_object_to_chr OBJ_BRIEFCASE3, CHR_JOANNA
// All difficulties
label 0x03
give_object_to_chr OBJ_BRIEFCASE4, CHR_JOANNA
if_chr_death_animation_finished CHR_VELVET, /*goto*/ 0x03
if_difficulty_lt DIFF_PA, /*goto*/ 0x04
// PA
give_object_to_chr OBJ_BRIEFCASE5, CHR_VELVET
// All difficulties
label 0x04
give_object_to_chr OBJ_BRIEFCASE6, CHR_VELVET
set_function CHR_SELF, GFUNC_REBUILD_GROUPS
// Velvet doesn't exist
label 0x03
hide_object OBJ_BRIEFCASE3
hide_object OBJ_BRIEFCASE5
hide_object OBJ_BRIEFCASE6
set_function CHR_SELF, GFUNC_REBUILD_GROUPS
endfunction
func1002_rebuild_groups:
set_function CHR_SELF, GFUNC_REBUILD_GROUPS
endfunction
func1010_elevator_switch:
yield
open_door 0x10
open_door 0x11
yield
beginloop 0x10
consider_coop_for_p1p2_chr CHR_SELF
if_chr_activated_object CHR_P1P2, OBJ_SWITCH, /*goto*/ 0x03
if_stage_flag_eq STAGEFLAG_ELEVATOR_SEALED, TRUE, /*goto*/ 0x04
label 0x04
endloop 0x10
label 0x03
close_door 0x10
close_door 0x11
lock_door 0x10, 0x02
lock_door 0x11, 0x02
if_stage_flag_eq STAGEFLAG_ELEVATOR_SEALED, TRUE, /*goto*/ 0x04
message CHR_P1P2, 0x3221 // "Elevator access sealed."
set_stage_flag STAGEFLAG_ELEVATOR_SEALED
goto_first 0x10
label 0x04
message CHR_P1P2, 0x3230 // "Elevator door cannot be reopened."
goto_first 0x10
endfunction
func1001_objectives_failed_msg:
yield
set_chr_flag_bank3 CHR_CIA1, CHRFLAG3_04000000
set_chr_flag_bank3 CHR_CIA2, CHRFLAG3_04000000
set_chr_flag_bank3 CHR_CIA3, CHRFLAG3_04000000
set_chr_flag_bank3 CHR_CIA4, CHRFLAG3_04000000
set_function CHR_SELF, GFUNC_SHOW_OBJ_FAILED_MSG
endfunction
func1014_crash:
beginloop 0x02
if_stage_flag_eq STAGEFLAG_TRIGGER_CRASH, TRUE, /*goto*/ 0x04
endloop 0x02
label 0x04
restart_timer
beginloop 0x09
if_timer_gt 230, /*goto*/ 0x04
endloop 0x09
label 0x04
move_object_to_pad OBJ_MINE1, 0x0029
destroy_object OBJ_MINE1
set_stage_flag STAGEFLAG_DIVERSION_CREATED
message CHR_JOANNA, 0x3236 // "Diversion has been created."
destroy_object OBJ_TAXI
restart_timer
beginloop 0x0a
if_timer_gt 180, /*goto*/ 0x04
endloop 0x0a
label 0x04
move_object_to_pad OBJ_MINE2, 0x001c
destroy_object OBJ_MINE2
set_stage_flag STAGEFLAG_CRASH_FINISHED
set_function CHR_SELF, GFUNC_IDLE
endfunction
func040a_intro_sfx:
// This flag is used to trigger the intro. Note that the entire function
// loops, so Rare could have tested the intro by setting the flag again.
label 0x2b
if_stage_flag_eq STAGEFLAG_TRIGGER_INTRO, TRUE, /*goto*/ 0x2c
yield
goto_first 0x2b
label 0x2c
unset_stage_flag STAGEFLAG_TRIGGER_INTRO
label 0x10
yield
dprint "CUTSCENE STARTED\n"
label 0x03
restart_timer
dprint "CUTSCENE STARTED\n"
.macro wait_until time loopid
beginloop \loopid
if_stage_flag_eq STAGEFLAG_INTRO_FINISHED, TRUE, /*goto*/ 0x2e
if_timer_gt \time, /*goto*/ 0x04
endloop \loopid
label 0x04
.endm
wait_until 30, 0x55
speak CHR_JOANNA, 0x3244, 0x7408, CHANNEL_7, COLOR_05_GREEN // "We suspect the G5 Corporation is just a front for ..."
wait_until 1060, 0x56
speak CHR_JOANNA, 0x3245, 0x7409, CHANNEL_7, COLOR_09_BLUE // "Just who is this help you keep referring to?"
wait_until 1260, 0x57
speak CHR_JOANNA, 0x3246, 0x740a, CHANNEL_7, COLOR_05_GREEN // "Not now, Joanna. Time for radio silence. Good luck..."
wait_until 1488, 0x58
speak CHR_JOANNA, 0x3247, 0x740b, CHANNEL_7, COLOR_09_BLUE // "Thanks a lot."
label 0x2d
yield
label 0x03
if_stage_flag_eq STAGEFLAG_INTRO_FINISHED, TRUE, /*goto*/ 0x2e
if_timer_gt 1468, /*goto*/ 0x04
goto_first 0x2d
label 0x04
play_sound 0x0161, CHANNEL_3
wait_until 1519, 0x2f
play_sound 0x0162, CHANNEL_3
wait_until 1566, 0x30
play_sound 0x046d, CHANNEL_4
wait_until 1649, 0x31
play_sound 0x046d, CHANNEL_3
label 0x33
wait_until 1758, 0x34
play_sound 0x0164, CHANNEL_4
wait_until 1784, 0x35
play_sound 0x0163, CHANNEL_3
wait_until 1814, 0x36
play_sound 0x0162, CHANNEL_3
wait_until 1855, 0x37
play_sound 0x0161, CHANNEL_3
wait_until 1897, 0x38
play_sound 0x0470, CHANNEL_3
wait_until 2017, 0x3a
play_sound 0x0165, CHANNEL_3
wait_until 2028, 0x3b
play_sound 0x046e, CHANNEL_4
wait_until 2050, 0x3c
play_sound 0x0472, CHANNEL_3
wait_until 2175, 0x3d
play_sound 0x0473, CHANNEL_4
wait_until 2239, 0x3e
play_sound 0x0474, CHANNEL_3
wait_until 2269, 0x3f
play_sound 0x0475, CHANNEL_4
wait_until 2278, 0x41
play_sound 0x0166, CHANNEL_3
wait_until 2280, 0x40
play_sound 0x046f, CHANNEL_4
wait_until 2323, 0x42
play_sound 0x0165, CHANNEL_3
wait_until 2339, 0x43
play_sound 0x0166, CHANNEL_3
wait_until 2356, 0x44
play_sound 0x0167, CHANNEL_3
wait_until 2373, 0x45
play_sound 0x0168, CHANNEL_3
wait_until 2386, 0x46
play_sound 0x0165, CHANNEL_3
wait_until 2388, 0x47
wait_until 2402, 0x48
mute_channel CHANNEL_4
play_sound 0x0166, CHANNEL_3
wait_until 2404, 0x4a
play_sound 0x0080, CHANNEL_4
wait_until 2424, 0x49
play_sound 0x0167, CHANNEL_3
wait_until 2434, 0x4c
play_sound 0x0476, CHANNEL_3
wait_until 2584, 0x4b
play_sound 0x0161, CHANNEL_5
wait_until 2622, 0x4d
mute_channel CHANNEL_5
play_sound 0x0162, CHANNEL_4
wait_until 2660, 0x4e
mute_channel CHANNEL_5
play_sound 0x0163, CHANNEL_6
label 0x2e
mute_channel CHANNEL_5
mute_channel CHANNEL_7
goto_first 0x2b
endfunction
func040b_outro:
camera_movement 0x0178
set_music_track MUSIC_CHICAGO_OUTRO
set_chr_flag_bank3 CHR_COUNTEROP, CHRFLAG3_HIDDEN
set_chr_flag_bank3 0xf1, CHRFLAG3_HIDDEN
set_function CHR_P1P2, GFUNC_IDLE
open_door2 0x10
open_door2 0x11
hide_object OBJ_TAXI
hide_object OBJ_LIMO
hide_chr CHR_SEALER1
hide_chr CHR_SEALER2
hide_chr CHR_SEALER3
hide_chr CHR_SEALER4
set_chr_flag_bank3 CHR_P1P2, CHRFLAG3_UNPLAYABLE
unset_chr_flag_bank3 CHR_P1P2, CHRFLAG3_HIDDEN
set_chr_flag_bank2 CHR_P1P2, CHRFLAG2_00020000
animation 0x0179, -1, -1, 0x0600, CHR_P1P2, 4
restart_timer
set_cutscene_weapon CHR_P1P2, -1, -1
yield
set_cutscene_weapon CHR_P1P2, -1, 0x02
show_nonessential_chrs FALSE
.macro func0c01_wait_until time loopid
beginloop \loopid
if_controller_button_pressed /*goto*/ 0x2e
if_timer_gt \time, /*goto*/ 0x04
endloop \loopid
label 0x04
.endm
func0c01_wait_until 30, 0x2d
play_sound 0x0161, CHANNEL_7
func0c01_wait_until 70, 0x2f
play_sound 0x0162, CHANNEL_7
func0c01_wait_until 120, 0x30
play_sound 0x0163, CHANNEL_7
func0c01_wait_until 174, 0x31
play_sound 0x0164, CHANNEL_7
func0c01_wait_until 208, 0x32
play_sound 0x046d, CHANNEL_6
func0c01_wait_until 210, 0x33
play_sound 0x0161, CHANNEL_7
func0c01_wait_until 238, 0x34
play_sound 0x0162, CHANNEL_7
func0c01_wait_until 280, 0x35
play_sound 0x0171, CHANNEL_7
func0c01_wait_until 350, 0x36
play_sound 0x0173, CHANNEL_7
func0c01_wait_until 458, 0x37
play_sound 0x0172, CHANNEL_7
func0c01_wait_until 506, 0x38
play_sound 0x0171, CHANNEL_7
func0c01_wait_until 540, 0x39
close_door 0x10
close_door 0x11
func0c01_wait_until 545, 0x3a
play_sound 0x0171, CHANNEL_7
func0c01_wait_until 588, 0x3b
play_sound 0x0172, CHANNEL_7
beginloop 0x05
if_camera_animating /*goto*/ 0x03
goto_next 0x2e
label 0x03
if_controller_button_pressed /*goto*/ 0x2e
label 0x03
endloop 0x05
label 0x2e
mute_channel CHANNEL_7
mute_channel CHANNEL_10
label 0x04
end_level
set_function CHR_SELF, GFUNC_IDLE
endfunction
func1012_update_robot_position_flags:
// pad 0x00d4 = corner
// pad 0x00d9 = next to limo
beginloop 0x02
// Update ROBOT_NEAR_CORNER flag
if_stage_flag_eq STAGEFLAG_ROBOT_NEAR_HOME, FALSE, /*goto*/ 0x03
if_chr_distance_to_pad_lt CHR_ROBOT, 200, 0x00d4, /*goto*/ 0x04
label 0x03
unset_stage_flag STAGEFLAG_ROBOT_NEAR_CORNER
goto_next 0x03
label 0x04
set_stage_flag STAGEFLAG_ROBOT_NEAR_CORNER
// Update ROBOT_ON_DRAIN_STREET flag
label 0x03
if_chr_distance_to_pad_gt CHR_ROBOT, 1800, 0x00d9, /*goto*/ 0x04
unset_stage_flag STAGEFLAG_ROBOT_ON_DRAIN_STREET
goto_next 0x03
label 0x04
set_stage_flag STAGEFLAG_ROBOT_ON_DRAIN_STREET
label 0x03
endloop 0x02
endfunction
func1416_setup_rain:
yield
yield
yield
enable_rain 2
label 0x05
// Wait 1 second
restart_timer
beginloop 0x06
if_timer_gt 60, /*goto*/ 0x03
endloop 0x06
// 12 in 256 chance of changing rain effect
label 0x03
call_rng
if_rand_lt 12, /*goto*/ 0x03
goto_first 0x05
label 0x03
call_rng
if_rand_gt 192, /*goto*/ 0x0a
if_rand_gt 128, /*goto*/ 0x09
if_rand_gt 64, /*goto*/ 0x08
enable_rain 2
goto_first 0x05
label 0x08
enable_rain 1
goto_first 0x05
label 0x09
enable_rain 2
goto_first 0x05
label 0x0a
enable_rain 3
goto_first 0x05
endfunction
func041c_hiddenguy:
set_chr_flag_bank3 CHR_HIDDENGUY, CHRFLAG3_HIDDEN
set_chr_flag_bank3 CHR_HIDDENGUY, CHRFLAG3_INVINCIBLE_TO_GUNFIRE
set_function CHR_SELF, GFUNC_IDLE
endfunction
/**
* This function makes two guards unhide and persue Jo after she picks up the
* drain briefcase.
*/
func1017_drain_guards:
set_chr_flag_bank3 0x11, CHRFLAG3_HIDDEN
set_chr_flag_bank3 0x12, CHRFLAG3_HIDDEN
// Wait until drain briefcase collected
beginloop 0x05
if_objective_complete 0, /*goto*/ 0x03
endloop 0x05
label 0x03
unset_chr_flag_bank3 0x11, CHRFLAG3_HIDDEN
unset_chr_flag_bank3 0x12, CHRFLAG3_HIDDEN
set_chr_flag_bank2 0x11, CHRFLAG2_00400000
set_chr_flag_bank2 0x12, CHRFLAG2_00400000
set_function 0x11, GFUNC_ALERTED
set_function 0x12, GFUNC_ALERTED
set_function CHR_SELF, GFUNC_IDLE
endfunction
func1018_keep_door_open:
beginloop 0x10
if_door_state 0x1a, DOORSTATE_CLOSED | DOORSTATE_CLOSING, /*goto*/ 0x03
reloop 0x10
label 0x03
open_door 0x1a
endloop 0x10
endfunction
func1019_setup_topstairs_death_animation:
set_chr_special_death_animation CHR_TOPSTAIRS, 0x05
set_function CHR_SELF, GFUNC_IDLE
endfunction
func040e_6064:
set_chr_dodge_rating 2, 0x0a
set_accuracy 4
set_reaction_speed 30
set_chr_health CHR_SELF, 40
set_armor 0
set_recovery_speed 0
set_shield 0
set_function CHR_SELF, GFUNC_UNALERTED
endfunction
func040f_6088:
if_difficulty_lt DIFF_SA, /*goto*/ 0x03
set_chr_dodge_rating 2, 0x0a
set_accuracy 20
set_reaction_speed 30
set_chr_health CHR_SELF, 40
set_armor 0
set_recovery_speed 0
set_shield 0
set_function CHR_SELF, GFUNC_UNALERTED
label 0x03
set_chr_dodge_rating 2, 0x0a
set_accuracy 4
set_reaction_speed 30
set_chr_health CHR_SELF, 40
set_armor 0
set_recovery_speed 0
set_shield 0
set_function CHR_SELF, GFUNC_UNALERTED
endfunction
func0410_60d0:
set_chr_dodge_rating 2, 0x0a
set_accuracy 14
set_reaction_speed 20
set_chr_health CHR_SELF, 40
set_armor 0
set_recovery_speed 0
set_shield 0
set_function CHR_SELF, GFUNC_UNALERTED
endfunction
func0411_60f4:
set_self_flag_bank3 CHRFLAG3_00020000
set_chr_dodge_rating 2, 0x0a
set_accuracy 14
set_reaction_speed 20
set_chr_health CHR_SELF, 40
set_armor 0
set_recovery_speed 40
set_shield 0
set_function CHR_SELF, FUNC_FBI
endfunction
func101a_msg_onlyplace:
beginloop 0x10
consider_coop_for_p1p2_chr CHR_SELF
if_chr_in_room CHR_P1P2, 0x00, 0x0014, /*goto*/ 0x03
if_chr_in_room CHR_P1P2, 0x00, 0x0026, /*goto*/ 0x03
endloop 0x10
label 0x03
speak CHR_P1P2, 0x323c, 0x8179, CHANNEL_6, COLOR_09_BLUE // "The only place we could secure the equipment was a..."
set_function CHR_SELF, GFUNC_IDLE
endfunction
func101b_msg_blockedupdoors:
if_difficulty_lt DIFF_SA, /*goto*/ 0x0a
restart_timer
// Wait for drain briefcase collected
beginloop 0x10
if_objective_complete 0, /*goto*/ 0x05
endloop 0x10
beginloop 0x05
consider_coop_for_p1p2_chr CHR_SELF
if_chr_in_room CHR_P1P2, 0x00, 0x003a, /*goto*/ 0x03
endloop 0x05
label 0x03
speak CHR_P1P2, 0x323d, 0x73b1, CHANNEL_6, COLOR_09_BLUE // "Either of those blocked-up doors will do as an esc..."
label 0x0a
set_function CHR_SELF, GFUNC_IDLE
endfunction
func101c_msg_reprogramthattaxi:
// Wait for drain briefcase collected
beginloop 0x10
if_objective_complete 0, /*goto*/ 0x05
endloop 0x10
beginloop 0x05
if_object_in_good_condition OBJ_TAXI, /*goto*/ 0x03
reloop 0x05
label 0x03
if_stage_flag_eq STAGEFLAG_TAXI_REPROGRAMMED, TRUE, /*goto*/ 0x0a
consider_coop_for_p1p2_chr CHR_SELF
if_chr_in_room CHR_P1P2, 0x00, 0x004a, /*goto*/ 0x03
endloop 0x05
label 0x03
speak CHR_P1P2, 0x323e, 0x817a, CHANNEL_6, COLOR_09_BLUE // "Reprogram that taxi - it's a Mark 2 and should be ..."
label 0x0a
set_function CHR_SELF, GFUNC_IDLE
endfunction
func101d_msg_pointofingress:
beginloop 0x10
consider_coop_for_p1p2_chr CHR_SELF
if_chr_in_room CHR_P1P2, 0x00, 0x0059, /*goto*/ 0x03
endloop 0x10
label 0x03
speak CHR_P1P2, 0x323f, 0x817b, CHANNEL_6, COLOR_09_BLUE // "That car park lift is your only point of ingress."
set_function CHR_SELF, GFUNC_IDLE
endfunction
func101e_check_sealer_guards_dead:
beginloop 0x10
if_stage_flag_eq STAGEFLAG_ELEVATOR_SEALED, TRUE, /*goto*/ 0x06
if_chr_dying CHR_SEALER1, /*goto*/ 0x03
if_chr_death_animation_finished CHR_SEALER1, /*goto*/ 0x03
endloop 0x10
label 0x03
if_chr_dying CHR_SEALER2, /*goto*/ 0x03
if_chr_death_animation_finished CHR_SEALER2, /*goto*/ 0x03
goto_first 0x10
label 0x03
if_chr_dying CHR_SEALER3, /*goto*/ 0x03
if_chr_death_animation_finished CHR_SEALER3, /*goto*/ 0x03
goto_first 0x10
label 0x03
if_chr_dying CHR_SEALER4, /*goto*/ 0x03
if_chr_death_animation_finished CHR_SEALER4, /*goto*/ 0x03
goto_first 0x10
label 0x03
if_stage_flag_eq STAGEFLAG_DIVERSION_CREATED, TRUE, /*goto*/ 0x03
message CHR_JOANNA, 0x3242 // "An alternative diversion has been created!"
unset_stage_flag STAGEFLAG_TAXI_DESTROYED
unset_stage_flag STAGEFLAG_ROBOT_DESTROYED
set_stage_flag STAGEFLAG_DIVERSION_CREATED
label 0x03
label 0x06
set_function CHR_SELF, GFUNC_IDLE
endfunction
func1020_elevator_doors:
beginloop 0x10
if_stage_flag_eq STAGEFLAG_ELEVATOR_SEALED, TRUE, /*goto*/ 0x03
if_door_state 0x10, DOORSTATE_CLOSED | DOORSTATE_CLOSING, /*goto*/ 0x04
reloop 0x10
label 0x04
open_door 0x10
open_door 0x11
endloop 0x10
label 0x03
close_door 0x10
close_door 0x11
set_function CHR_SELF, GFUNC_IDLE
endfunction
/**
* Guard at top stairs: Turn off special death animation if he's moved away from
* his pad or if Jo has climbed the staircase.
*/
func1021_check_topstairs_guy:
beginloop 0x10
consider_coop_for_p1p2_chr CHR_SELF
if_chr_y CHR_P1P2, 500, OPERATOR_LESS_THAN, /*goto*/ 0x03
goto_next 0x04
label 0x03
if_chr_distance_to_pad_gt CHR_TOPSTAIRS, 250, 0x00b5, /*goto*/ 0x04
endloop 0x10
label 0x04
set_chr_special_death_animation CHR_TOPSTAIRS, NULL
unset_chr_flag_bank3 CHR_TOPSTAIRS, CHRFLAG3_HAS_SPECIAL_DEATH_ANIMATION
unset_chr_flag_bankx CHR_TOPSTAIRS, CHRFLAG1_00001000, BANK_1
set_function CHR_SELF, GFUNC_IDLE
endfunction
func040d_limo_flags:
// Wait until limo ready
beginloop 0x10
if_stage_flag_eq STAGEFLAG_LIMO_READY_TO_LEAVE, TRUE, /*goto*/ 0x2f
endloop 0x10
// Wait until player not in certain rooms
beginloop 0x2f
consider_coop_for_p1p2_chr CHR_SELF
if_chr_in_room CHR_P1P2, 0x00, 0x0002, /*goto*/ 0x03
if_chr_in_room CHR_P1P2, 0x00, 0x0010, /*goto*/ 0x03
if_chr_in_room CHR_P1P2, 0x00, 0x0012, /*goto*/ 0x03
goto_next 0x04
label 0x03
endloop 0x2f
// Wait almost 10 seconds - provided limo not destroyed
label 0x04
restart_timer
beginloop 0x2d
if_object_in_good_condition OBJ_LIMO, /*goto*/ 0x03
set_function CHR_SELF, GFUNC_IDLE
label 0x03
if_timer_gt 596, /*goto*/ 0x03
endloop 0x2d
label 0x03
hide_object OBJ_LIMO
set_object_flag_bank0 OBJ_LIMO, OBJECTFLAG0_INVINCIBLE
set_object_flag_bank1 OBJ_LIMO, OBJECTFLAG1_INVISIBLE
set_function CHR_SELF, GFUNC_IDLE
endfunction
func1423_setup_lighting:
yield
set_lighting 0x0000, 0x00, 0x00
set_lighting 0x0000, 0x01, 0x00
set_lighting 0x0000, 0x02, 0x00
set_lighting 0x0000, 0x03, 0x00
set_lighting 0x0000, 0x04, 0x00
set_lighting 0x0002, 0x05, 0x01
set_lighting 0x0003, 0x05, 0x01
set_lighting 0x000f, 0x05, 0x01
set_lighting 0x0010, 0x05, 0x01
set_lighting 0x0011, 0x05, 0x01
set_lighting 0x0012, 0x05, 0x01
set_lighting 0x0013, 0x05, 0x01
set_lighting 0x0014, 0x05, 0x01
set_lighting 0x0015, 0x05, 0x01
set_lighting 0x0017, 0x05, 0x01
set_lighting 0x0018, 0x05, 0x01
set_lighting 0x0019, 0x05, 0x01
set_lighting 0x001a, 0x05, 0x01
set_lighting 0x001c, 0x05, 0x01
set_lighting 0x001d, 0x05, 0x01
set_lighting 0x001f, 0x05, 0x01
set_lighting 0x0021, 0x05, 0x01
set_lighting 0x0022, 0x05, 0x01
set_lighting 0x0025, 0x05, 0x01
set_lighting 0x0026, 0x05, 0x01
set_lighting 0x0027, 0x05, 0x01
set_lighting 0x0028, 0x05, 0x01
set_lighting 0x002c, 0x05, 0x01
set_lighting 0x002d, 0x05, 0x01
set_lighting 0x002e, 0x05, 0x01
set_lighting 0x0031, 0x05, 0x01
set_lighting 0x0032, 0x05, 0x01
set_lighting 0x0037, 0x05, 0x01
set_lighting 0x0038, 0x05, 0x01
set_lighting 0x0039, 0x05, 0x01
set_lighting 0x003a, 0x05, 0x01
set_lighting 0x003d, 0x05, 0x01
set_lighting 0x003e, 0x05, 0x01
set_lighting 0x003f, 0x05, 0x01
set_lighting 0x0043, 0x05, 0x01
set_lighting 0x0044, 0x05, 0x01
set_lighting 0x0045, 0x05, 0x01
set_lighting 0x004a, 0x05, 0x01
set_lighting 0x004b, 0x05, 0x01
set_lighting 0x004c, 0x05, 0x01
set_lighting 0x004e, 0x05, 0x01
set_lighting 0x0050, 0x05, 0x01
set_lighting 0x0051, 0x05, 0x01
set_lighting 0x0052, 0x05, 0x01
set_lighting 0x0059, 0x05, 0x01
set_lighting 0x005a, 0x05, 0x01
set_lighting 0x005b, 0x05, 0x01
set_lighting 0x005c, 0x05, 0x01
set_lighting 0x005d, 0x05, 0x01
set_lighting 0x005f, 0x05, 0x01
set_lighting 0x0060, 0x05, 0x01
set_lighting 0x0061, 0x05, 0x01
set_lighting 0x0062, 0x05, 0x01
set_lighting 0x0064, 0x05, 0x01
set_lighting 0x0066, 0x05, 0x01
set_lighting 0x0067, 0x05, 0x01
set_lighting 0x0068, 0x05, 0x01
set_function CHR_SELF, GFUNC_IDLE
endfunction
func0412_cia_invincibility:
beginloop 0x10
if_stage_flag_eq STAGEFLAG_TRIGGER_TAXI_LEAVE, TRUE, /*goto*/ 0x03
endloop 0x10
label 0x03
set_chr_flag_bank3 CHR_CIA1, CHRFLAG3_INVINCIBLE_TO_GUNFIRE
set_chr_flag_bank3 CHR_CIA2, CHRFLAG3_INVINCIBLE_TO_GUNFIRE
set_chr_flag_bank3 CHR_CIA3, CHRFLAG3_INVINCIBLE_TO_GUNFIRE
set_chr_flag_bank3 CHR_CIA4, CHRFLAG3_INVINCIBLE_TO_GUNFIRE
beginloop 0x2d
if_stage_flag_eq STAGEFLAG_DIVERSION_CREATED, TRUE, /*goto*/ 0x03
endloop 0x2d
label 0x03
restart_timer
beginloop 0x2f
if_timer_gt 300, /*goto*/ 0x03
endloop 0x2f
label 0x03
unset_chr_flag_bank3 CHR_CIA1, CHRFLAG3_INVINCIBLE_TO_GUNFIRE
unset_chr_flag_bank3 CHR_CIA2, CHRFLAG3_INVINCIBLE_TO_GUNFIRE
unset_chr_flag_bank3 CHR_CIA3, CHRFLAG3_INVINCIBLE_TO_GUNFIRE
unset_chr_flag_bank3 CHR_CIA4, CHRFLAG3_INVINCIBLE_TO_GUNFIRE
set_function CHR_SELF, GFUNC_IDLE
endfunction
func1025_rtracker:
yield
set_object_flag_bank2 OBJ_FALCON2, OBJECTFLAG2_RTRACKED_BLUE
set_function CHR_SELF, GFUNC_IDLE
endfunction
func1027_untrack_dumpster:
yield
beginloop 0x10
if_object_in_good_condition OBJ_DUMPSTER, /*goto*/ 0x04
goto_next 0x03
label 0x04
endloop 0x10
label 0x03
unset_object_flag_bank2 OBJ_DUMPSTER, OBJECTFLAG2_RTRACKED_BLUE
set_function CHR_SELF, GFUNC_IDLE
endfunction
functions:
register_function func0401_3ae8 0x0401
register_function func0402_3bb4 0x0402
register_function func0403_3c74 0x0403
register_function func0404_3ce0 0x0404
register_function func0405_3d50 0x0405
register_function func0406_3e54 0x0406
register_function func0407_3e60 0x0407
register_function func0408_3e6c 0x0408
register_function func0409_3e78 0x0409
register_function func040a_intro 0x040a
register_function func040b_outro 0x040b
register_function func040c_taxi 0x040c
register_function func040d_limo 0x040d
register_function func040e_6064 0x040e
register_function func040f_6088 0x040f
register_function func0410_60d0 0x0410
register_function func0411_60f4 0x0411
register_function func0412_cia 0x0412
register_function func0413_bugspotter 0x0413
register_function func0414_start_path07 0x0414
register_function func0415_start_path08 0x0415
register_function func0416_start_path09 0x0416
register_function func0417_start_path10 0x0417
register_function func0418_start_path11 0x0418
register_function func0419_init_cia1 0x0419
register_function func041d_fbi 0x041d
register_function func041c_hiddenguy 0x041c
register_function func041e_sealer1 0x041e
register_function func041f_alarm_responder 0x041f
register_function func0420_jog_to_accident 0x0420
register_function func041a_robot 0x041a
register_function func041b_init_robot 0x041b
register_function func040a_intro 0x0c00
register_function func040b_outro 0x0c01
register_function func1400_give_briefcases 0x1400
register_function func1001_objectives_failed_msg 0x1001
register_function func1002_rebuild_groups 0x1002
register_function func040a_intro_from_gameplay 0x1003
register_function func1004_tracerbug_joanna 0x1004
register_function func1005_check_things_destroyed 0x1005
register_function func1006_check_for_end 0x1006
register_function func040d_limo_timing 0x1007
register_function func040c_taxi_timing 0x1008
register_function func1009_check_cia1_dead 0x1009
register_function func100a_check_cia2_dead 0x100a
register_function func100b_check_cia3_dead 0x100b
register_function func100c_check_cia4_dead 0x100c
register_function func100d_spawn_alarm_responders 0x100d
register_function func100f_check_mine 0x100f
register_function func1010_elevator_switch 0x1010
register_function func1011_trackerbug_velvet 0x1011
register_function func1012_update_robot_position_flags 0x1012
register_function func1014_crash 0x1014
register_function func040a_intro_sfx 0x1415
register_function func1416_setup_rain 0x1416
register_function func1017_drain_guards 0x1017
register_function func1018_keep_door_open 0x1018
register_function func1019_setup_topstairs_death_animation 0x1019
register_function func101a_msg_onlyplace 0x101a
register_function func101b_msg_blockedupdoors 0x101b
register_function func101c_msg_reprogramthattaxi 0x101c
register_function func101d_msg_pointofingress 0x101d
register_function func101e_check_sealer_guards_dead 0x101e
register_function func101f_setup_robot_noise 0x101f
register_function func1020_elevator_doors 0x1020
register_function func1021_check_topstairs_guy 0x1021
register_function func040d_limo_flags 0x1022
register_function func1423_setup_lighting 0x1423
register_function func0412_cia_invincibility 0x1024
register_function func1025_rtracker 0x1025
register_function func1026_uplink 0x1026
register_function func1027_untrack_dumpster 0x1027
endfunctions
paths:
register_path path00, 0, 0
register_path path01, 1, 0
register_path path02, 2, 0
register_path path03, 3, 0
register_path path04, 4, 0
register_path path05, 5, 0
register_path path06, 6, 0
register_path path07, 7, 0
register_path path08, 8, 0
register_path path09, 9, 0
register_path path10, 10, 0
register_path path11, 11, 0
register_path path12, 12, 0
register_path path13, 13, 0
endpaths
.align 4