# # 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_field_0x35e_0x35f 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_field0x332_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_field_0x35e_0x35f 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_field_0x35e_0x35f 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_field_0x35e_0x35f 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_field_0x35e_0x35f 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_field_0x35e_0x35f 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_field_0x35e_0x35f 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_field_0x35e_0x35f 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