perfect_dark/src/files/setup/setuppete.c

3342 lines
120 KiB
C

//
// Chicago
//
#include "stagesetup.h"
// Characters
#define CHR_TOPSTAIRS 0x07
#define CHR_SEALER1 0x0d
#define CHR_SEALER2 0x0e
#define CHR_SEALER3 0x0f
#define CHR_SEALER4 0x10
#define CHR_FBI1 0x17
#define CHR_FBI2 0x18
#define CHR_FBI3 0x19
#define CHR_CIA1 0x1a
#define CHR_CIA2 0x1b // bug spotter
#define CHR_CIA3 0x1c
#define CHR_CIA4 0x1d
#define CHR_HIDDENGUY 0x1e // positioned just behind Jo's starting place, never unhidden, and used for distance checks and something related to the robot
#define CHR_ROBOT 0x1f
// Objects
#define OBJ_CAR1 0x00
#define OBJ_CAR2 0x01
#define OBJ_CAR3 0x02
#define OBJ_CAR4 0x03
#define OBJ_CAR5 0x05
#define OBJ_BRIEFCASE1 0x06
#define OBJ_BRIEFCASE2 0x07
#define OBJ_FIREDOORTOP 0x08
#define OBJ_FIREDOORBOTTOM 0x09
#define OBJ_TAXI 0x0a
#define OBJ_LIMO 0x0c
#define OBJ_SWITCH 0x0e
#define OBJ_BRIEFCASE3 0x0f
#define OBJ_MINE1 0x12
#define OBJ_MINE2 0x13
#define OBJ_BRIEFCASE4 0x1b
#define OBJ_BRIEFCASE5 0x1d
#define OBJ_BRIEFCASE6 0x1e
#define OBJ_WIREFENCE 0x21
#define OBJ_FALCON2 0x22
#define OBJ_DUMPSTER 0x25
// Stage flags
#define STAGEFLAG_ALARM_GROUP1_DEAD 0x00000001
#define STAGEFLAG_ALARM_GROUP2_DEAD 0x00000002
#define STAGEFLAG_ALARM_GROUP3_DEAD 0x00000004
#define STAGEFLAG_TRACERBUG_SPOTTED 0x00000008
#define STAGEFLAG_CRASH_FINISHED 0x00000010
#define STAGEFLAG_TRIGGER_CRASH 0x00000020
#define STAGEFLAG_ROBOT_NEAR_CORNER 0x00000040
#define STAGEFLAG_TRACERBUG_SAFE 0x00000080
#define STAGEFLAG_ONE_BUG_REMAINING 0x00000100
#define STAGEFLAG_MINE_PLACED 0x00000200
#define STAGEFLAG_MINE_WASTED 0x00000400
#define STAGEFLAG_TAXI_REPROGRAMMED 0x00000800
#define STAGEFLAG_TRACERBUG_PLACED 0x00001000
#define STAGEFLAG_TRACERBUG_WASTED 0x00002000
#define STAGEFLAG_LIMO_DESTROYED 0x00004000
#define STAGEFLAG_TAXI_DESTROYED 0x00008000
#define STAGEFLAG_ROBOT_DESTROYED 0x00010000
#define STAGEFLAG_IN_ELEVATOR 0x00020000
#define STAGEFLAG_LIMO_READY_TO_LEAVE 0x00040000
#define STAGEFLAG_LIMO_READY_15SEC_AGO 0x00080000
#define STAGEFLAG_TRIGGER_TAXI_LEAVE 0x00100000
#define STAGEFLAG_TAXI_ALMOST_READY_TO_CRASH 0x00200000
#define STAGEFLAG_ALARM_SOUNDED 0x00400000
#define STAGEFLAG_ROBOT_NEAR_HOME 0x00800000
#define STAGEFLAG_ROBOT_ON_DRAIN_STREET 0x01000000
#define STAGEFLAG_TRIGGER_INTRO 0x02000000
#define STAGEFLAG_LIMO_ESCAPED 0x04000000
#define STAGEFLAG_CIVILIAN_DEAD 0x08000000
#define STAGEFLAG_ELEVATOR_SEALED 0x10000000
#define STAGEFLAG_INTRO_FINISHED 0x20000000
#define STAGEFLAG_DIVERSION_CREATED 0x40000000
#define STAGEFLAG_TAXI_READY_TO_CRASH 0x80000000
// Functions
#define FUNC_OUTRO 0x040b
#define FUNC_CIA 0x0412
#define FUNC_BUGSPOTTER 0x0413
#define FUNC_INIT_CIA1 0x0419
#define FUNC_ROBOT 0x041a
#define FUNC_INIT_ROBOT 0x041b
#define FUNC_HIDDENGUY 0x041c
#define FUNC_FBI 0x041d
#define FUNC_SEALER1 0x041e
#define FUNC_ALARM_RESPONDER 0x041f
#define FUNC_JOG_TO_ACCIDENT 0x0420
// Other
#define GROUP_ALARM_RESPONDER 0x09
u8 intro[];
u8 props[];
struct aipaths paths[];
struct ailists functions[];
void *setup[] = {
NULL,
NULL,
NULL,
intro,
props,
paths,
functions,
NULL,
};
u8 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, TEAM_20, SQUADRON_00, -1, 0, 0x00000000)
chr(0x00000200, 0x00, 0x00aa, BODY_G5_GUARD, HEAD_RANDOM, 0x0414, -1, -1, 1000, 10, 0xa0004408, 0x00000000, TEAM_20, SQUADRON_00, -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, TEAM_20, SQUADRON_00, -1, 0, 0x00000000)
chr(0x00000200, 0x01, 0x00ac, BODY_G5_GUARD, HEAD_RANDOM, 0x0415, -1, -1, 1000, 10, 0xa0004408, 0x00000000, TEAM_20, SQUADRON_01, -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, TEAM_20, SQUADRON_01, -1, 0, 0x01000000)
chr(0x00000200, 0x02, 0x00ad, BODY_G5_GUARD, HEAD_RANDOM, 0x0416, -1, -1, 1000, 10, 0xa0004008, 0x00000000, TEAM_20, SQUADRON_02, -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, TEAM_20, SQUADRON_03, -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, TEAM_20, SQUADRON_03, -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, TEAM_20, SQUADRON_03, -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, TEAM_20, SQUADRON_04, -1, 0, 0x02000000)
chr(0x00000200, 0x06, 0x00b4, BODY_G5_GUARD, HEAD_RANDOM, 0x040f, -1, -1, 1000, 10, 0xc0004008, 0x00000000, TEAM_20, SQUADRON_04, -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, TEAM_20, SQUADRON_04, -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, TEAM_20, SQUADRON_04, -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, TEAM_20, SQUADRON_04, -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, TEAM_20, SQUADRON_04, -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, TEAM_20, SQUADRON_04, -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, TEAM_20, SQUADRON_05, -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, TEAM_20, SQUADRON_05, -1, 0, 0x01000000)
chr(0x00010c00, 0x1d, 0x0042, BODY_CIAGUY, HEAD_RANDOM, FUNC_CIA, -1, -1, 1000, 6, 0x80002000, 0x00000000, TEAM_20, SQUADRON_05, -1, 0, 0x02000000)
chr(0x00000400, 0x0d, 0x00bf, BODY_G5_GUARD, HEAD_RANDOM, FUNC_SEALER1, -1, -1, 1000, 15, 0xc0004008, 0x00000000, TEAM_20, SQUADRON_01, -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, TEAM_20, SQUADRON_01, -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, TEAM_20, SQUADRON_01, -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, TEAM_20, SQUADRON_01, -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, TEAM_20, SQUADRON_01, -1, 0, 0x00000000)
chr(0x00000000, 0x11, 0x00c9, BODY_G5_GUARD, HEAD_RANDOM, GFUNC_IDLE, 0x00c9, -1, 1000, 30, 0xc1086008, 0x00000000, TEAM_20, SQUADRON_07, -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, TEAM_20, SQUADRON_07, -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, TEAM_20, SQUADRON_00, -1, 0, 0x00000000)
chr(0x00000000, 0x1e, 0x0063, BODY_G5_GUARD, HEAD_RANDOM, FUNC_HIDDENGUY, 0x00c8, -1, 1000, 15, 0x40084008, 0x00000000, TEAM_20, SQUADRON_01, -1, 0, 0x00000000)
chr(0x00000200, 0x13, 0x00cd, BODY_G5_GUARD, HEAD_RANDOM, 0x040e, -1, -1, 500, 10, 0xc0004208, 0x00000000, TEAM_20, SQUADRON_08, -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, TEAM_20, SQUADRON_08, -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, TEAM_20, SQUADRON_08, -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, TEAM_20, SQUADRON_08, -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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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)
stdobject(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
};
u8 intro[] = {
ammo(AMMOTYPE_PISTOL, 50)
outfit(OUTFIT_TRENCH)
spawn(0x0063)
endintro
};
s32 path00[] = {
0x00d3,
0x00d4,
0x00d9,
0x00d6,
0x00d7,
0x0036,
0x00d7,
0x00d6,
0x00d9,
0x00d4,
0x00d3,
-1,
};
s32 path01[] = {
0x00da,
0x00d7,
0x00d7,
0x00d6,
0x00d9,
0x00d5,
0x00d4,
0x00db,
0x00de,
0x00d3,
-1,
};
s32 path02[] = {
0x00a4,
0x00a4,
0x00a4,
0x00a4,
0x00a4,
-1,
};
s32 path03[] = {
0x00e3,
-1,
};
s32 path04[] = {
0x00a3,
0x00a3,
0x00a3,
0x00a3,
0x00a3,
-1,
};
s32 path05[] = {
0x00e8,
-1,
};
s32 path06[] = {
0x00ea,
0x00ea,
0x00ea,
0x00e8,
-1,
};
s32 path07[] = {
0x0061,
0x0060,
0x0065,
0x005f,
0x005e,
0x005d,
0x005e,
0x005f,
0x0065,
0x0060,
-1,
};
s32 path08[] = {
0x0038,
0x002e,
0x000c,
0x002e,
0x0038,
0x0037,
-1,
};
s32 path09[] = {
0x0033,
0x0035,
0x0034,
0x002d,
0x0028,
0x002a,
0x001d,
0x002a,
0x0028,
0x002d,
0x0034,
0x0035,
-1,
};
s32 path10[] = {
0x0047,
0x0046,
0x0047,
-1,
};
s32 path11[] = {
0x0034,
0x0043,
0x0041,
0x0051,
0x0041,
0x0043,
0x0034,
-1,
};
s32 path12[] = {
0x0061,
0x0060,
0x0066,
0x0062,
0x0063,
0x0064,
0x0063,
0x0062,
0x0066,
0x0060,
-1,
};
s32 path13[] = {
0x00da,
0x00d7,
0x00d7,
0x00d6,
0x00d9,
0x00d5,
0x00d4,
0x00db,
0x00de,
0x00d3,
-1,
};
#define 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)
#define 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)
u8 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_BOND, 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_BOND, 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
};
u8 func0402_3bb4[] = {
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
if_controller_button_pressed(/*goto*/ 0x00)
camera_movement(0x00d0)
set_chr_flag_bank3(CHR_BOND, 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_BOND, 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
};
u8 func0403_3c74[] = {
if_controller_button_pressed(/*goto*/ 0x00)
camera_movement(0x00d1)
set_chr_flag_bank3(CHR_BOND, 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_BOND, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_BOND, WEAPON_FALCON2_SCOPE, WEAPON_NONE)
chicago_wait_for_camera
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
hide_object(OBJ_CAR4)
unset_chr_flag_bank3(CHR_CIA1, CHRFLAG3_HIDDEN)
label(0x00)
return
endfunction
};
u8 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_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x00e1, -1, -1, 0x0600, CHR_BOND, 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_BOND, CHRFLAG3_UNPLAYABLE)
label(0x00)
return
endfunction
};
u8 func0405_3d50[] = {
camera_movement(0x00d2)
cmd0175(60)
if_controller_button_pressed(/*goto*/ 0x00)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x00df, -1, -1, 0x0600, CHR_BOND, 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_BOND, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_BOND, 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_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
mute_channel(CHANNEL_7)
unset_chr_flag_bank3(CHR_CIA1, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x00df, -2, -1, 0x0600, CHR_BOND, 2)
restart_default_music
reset_ambience
set_stage_flag(STAGEFLAG_INTRO_FINISHED)
enter_firstperson
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
u8 unregistered_function1[] = {
set_return_function(CHR_SELF, GFUNC_END_CINEMA)
set_function(CHR_SELF, 0x0401)
endfunction
};
u8 unregistered_function2[] = {
set_return_function(CHR_SELF, GFUNC_END_CINEMA)
set_function(CHR_SELF, 0x0402)
endfunction
};
u8 unregistered_function3[] = {
set_return_function(CHR_SELF, GFUNC_END_CINEMA)
set_function(CHR_SELF, 0x0403)
endfunction
};
u8 unregistered_function4[] = {
set_return_function(CHR_SELF, GFUNC_END_CINEMA)
set_function(CHR_SELF, 0x0404)
endfunction
};
u8 unregistered_function5[] = {
set_function(CHR_SELF, 0x0405)
endfunction
};
u8 func040a_intro[] = {
set_return_function(CHR_SELF, 0x0406)
set_function(CHR_SELF, 0x0401)
endfunction
};
u8 func0406_3e54[] = {
set_return_function(CHR_SELF, 0x0407)
set_function(CHR_SELF, 0x0402)
endfunction
};
u8 func0407_3e60[] = {
set_return_function(CHR_SELF, 0x0408)
set_function(CHR_SELF, 0x0403)
endfunction
};
u8 func0408_3e6c[] = {
set_return_function(CHR_SELF, 0x0409)
set_function(CHR_SELF, 0x0404)
endfunction
};
u8 func0409_3e78[] = {
set_function(CHR_SELF, 0x0405)
endfunction
};
u8 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 'M','A','I','N','\n',0,
if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x29)
if_chr_dying(CHR_TARGET, /*goto*/ 0x29)
if_chr_unloaded(CHR_TARGET, /*goto*/ 0x29)
if_ammo_quantity_lt(CHR_TARGET, AMMOTYPE_REMOTE_MINE, 1, /*goto*/ 0x03)
endloop(0x11)
label(0x29)
label(0x54)
yield
dprint 'D','E','A','D','\n',0,
if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x28)
if_chr_dying(CHR_TARGET, /*goto*/ 0x28)
if_chr_unloaded(CHR_TARGET, /*goto*/ 0x28)
yield
dprint 'N','O','T','D','E','A','D','\n',0,
if_ammo_quantity_lt(CHR_BOND, AMMOTYPE_REMOTE_MINE, 1, /*goto*/ 0x29)
reloop(0x08)
label(0x29)
if_ammo_quantity_lt(CHR_COOP, AMMOTYPE_REMOTE_MINE, 1, /*goto*/ 0x29)
endloop(0x08)
label(0x29)
dprint 'N','O','A','M','M','O','\n',0,
label(0x28)
dprint 'S','T','I','L','L','D','E','A','D','\n',0,
goto_first(0x54)
label(0x03)
dprint 'F','A','I','L','\n',0,
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
};
u8 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
};
u8 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_BOND, 0x321c) // "DataDyne limo has escaped."
label(0x03)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
u8 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 'G','O',' ','F','O','R',' ','C','R','A','S','H','\n',0,
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
};
#define 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 'B','U','G',' ','C','1','\n',0, \
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 'B','U','G',' ','D','O','\n',0, \
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 'B','U','G',' ','C','2','\n',0, \
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 'B','U','G',' ','C','3','\n',0, \
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 'B','U','G',' ','C','4','\n',0, \
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 'W','R','O','N','G','1','\n',0, \
if_stage_flag_eq(STAGEFLAG_ONE_BUG_REMAINING, TRUE, /*goto*/ 0x03) \
dprint 'W','R','O','N','G','2','\n',0, \
set_stage_flag(STAGEFLAG_ONE_BUG_REMAINING) \
set_function(CHR_SELF, GFUNC_IDLE) \
\
label(0x03) \
dprint 'W','R','O','N','G','3','\n',0, \
set_stage_flag(STAGEFLAG_TRACERBUG_WASTED) \
message(chr, 0x3218) /* "Tracer Bug placed incorrectly." */ \
set_function(CHR_SELF, GFUNC_IDLE)
u8 func1004_tracerbug_bond[] = {
tracerbug_logic(CHR_BOND, CHR_BOND)
endfunction
};
u8 func1011_trackerbug_coop[] = {
yield
if_chr_death_animation_finished(CHR_COOP, /*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_COOP, CHR_PRESET)
endfunction
};
u8 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_BOND, 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_BOND, 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_BOND, 0x3219) // "Mission critical vehicle destroyed."
label(0x03)
endloop(0x10)
endfunction
};
u8 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 'P','A','D',' ','C','H','E','C','K','\n',0,
if_chr_distance_to_pad_lt(CHR_P1P2, 350, 0x00a7, /*goto*/ 0x04)
endloop(0x05)
label(0x04)
set_stage_flag(STAGEFLAG_IN_ELEVATOR)
dprint 'I','N',' ','T','H','E',' ','E','L','E','V','A','T','O','R','\n',0,
yield
yield
set_invincible(CHR_BOND)
revoke_control(CHR_BOND, 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_BOND, /*goto*/ 0x03)
if_chr_dying(CHR_BOND, /*goto*/ 0x03)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x03)
goto_next(0x04)
label(0x03)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x03)
if_chr_dying(CHR_COOP, /*goto*/ 0x03)
if_chr_unloaded(CHR_COOP, /*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
};
u8 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 'L','I','M','O',' ','R','E','A','D','Y',' ','T','O',' ','G','O','\n',0,
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
};
u8 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
};
u8 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 'D','U','R','I','N','G','T','A','L','K','\n',0,
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 'N','O','T',' ','A',' ','P','A','T','R','O','L','L','E','R','\n',0,
stop_chr
goto_next(0x10)
// Patroller
label(0x54)
dprint 'P','A','T',' ','R','E','T','\n',0,
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 'L','I','M','O',' ','R','E','A','D','Y',' ','T','O',' ','G','O','\n',0,
goto_first(0x10)
label(0x1e)
restart_timer
try_face_entity(0x0200, 0x0000, /*goto*/ 0x09)
beginloop(0x09)
if_jo_ccw_direction_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_squadron_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_squadron(SQUADRON_03)
endloop(0x38)
label(0x03)
rebuild_teams
rebuild_squadrons
set_action(ACTION_COWER, FALSE)
say_quip(CHR_BOND, 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_squadron(SQUADRON_04)
rebuild_teams
rebuild_squadrons
label(0x03)
set_chr_team(CHR_SELF, TEAM_ALLY)
rebuild_teams
rebuild_squadrons
try_set_target_chr_to_teammate(/*goto*/ 0x04)
goto_next(0x0b)
label(0x03)
goto_first(0x05)
label(0x04)
set_chr_team(CHR_SELF, TEAM_NONCOMBAT)
rebuild_teams
rebuild_squadrons
try_run_to_chr(CHR_PRESET, /*goto*/ 0x06)
beginloop(0x06)
if_self_distance_to_chr_lt(2520, CHR_HIDDENGUY, /*goto*/ 0x03)
reloop(0x06)
label(0x03)
if_detected_chr(CHR_PRESET, /*goto*/ 0x04)
endloop(0x06)
label(0x04)
set_squadron_alertness(100)
say_quip(CHR_BOND, 0x19, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00)
label(0x0b)
set_chr_team(CHR_SELF, TEAM_NONCOMBAT)
rebuild_teams
rebuild_squadrons
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
};
u8 func0413_bugspotter[] = {
#define 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_jo_ccw_direction_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_BOND, 0x1a, 0xff, 0x0a, 0xff, 0x81, 0x00, 0x00)
goto_next(0x04)
label(0x03)
say_quip(CHR_BOND, 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_BOND, 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_set_target_chr_to_teammate(/*goto*/ 0x04)
goto_next(0x0b)
label(0x04)
try_run_to_chr(CHR_PRESET, /*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(CHR_PRESET, /*goto*/ 0x04)
endloop(0x06)
// Alert everyone in group
label(0x04)
set_squadron_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
};
#define init_patroller(pathid) \
set_chr_dodge_rating(2, 0x0a) \
set_accuracy(4) \
set_reaction_speed(30) \
set_chr_health(CHR_SELF, 40) \
set_armor(0) \
set_recovery_speed(0) \
set_shield(0) \
assign_path(pathid) \
start_path \
set_function(CHR_SELF, GFUNC_UNALERTED) \
\
beginloop(0x04) \
endloop(0x04)
u8 func0414_start_path07[] = {
init_patroller(0x07)
endfunction
};
u8 func0415_start_path08[] = {
init_patroller(0x08)
endfunction
};
u8 func0416_start_path09[] = {
init_patroller(0x09)
endfunction
};
u8 func0417_start_path10[] = {
init_patroller(0x0a)
endfunction
};
u8 func0418_start_path11[] = {
init_patroller(0x0b)
endfunction
};
/**
* This chr waits 2 seconds before starting his path.
*/
u8 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
};
u8 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_BOND, 0x1b, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00)
set_squadron_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 'T','R','A','C','K',' ','P','L','A','Y','E','R','\n',0,
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_jo_ccw_direction_lt(10, /*goto*/ 0x04)
if_timer_gt(40, /*goto*/ 0x04)
endloop(0x0d)
label(0x04)
say_quip(CHR_BOND, 0x1b, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00)
animation(0x0266, 0, 193, 0x0010, CHR_SELF, 2)
beginloop(0x0e)
if_difficulty_lt(DIFF_SA, /*goto*/ 0x03)
if_chr_propsoundcount_zero(CHR_SELF, /*goto*/ 0x04)
label(0x03)
if_chr_stopped(/*goto*/ 0x04)
endloop(0x0e)
label(0x04)
dprint 'C','R','E','A','T','E','D',' ','W','E','A','P','\n',0,
try_draw_weapon(MODEL_CHRDY357, WEAPON_DY357MAGNUM, 0x10000000, /*goto*/ 0x04)
label(0x04)
yield
set_stage_flag(STAGEFLAG_ALARM_SOUNDED)
activate_alarm
dprint 'C','R','E','A','T','E','D',' ','W','E','A','P','\n',0,
set_function(CHR_SELF, GFUNC_ALERTED)
endfunction
};
#define 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_BOND, 0x321d) /* "Mission failed - unacceptable civilian casualties." */ \
set_function(CHR_SELF, GFUNC_IDLE)
u8 func1009_check_cia1_dead[] = {
check_cia_dead(CHR_CIA1)
endfunction
};
/**
* This guy is allowed to be killed once he has a certain flag.
*/
u8 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_BOND, 0x321d) // "Mission failed - unacceptable civilian casualties."
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
u8 func100b_check_cia3_dead[] = {
check_cia_dead(CHR_CIA3)
endfunction
};
u8 func100c_check_cia4_dead[] = {
check_cia_dead(CHR_CIA4)
endfunction
};
u8 func041b_init_robot[] = {
set_accuracy(40)
set_shield(100)
set_chr_flag_bank2(CHR_SELF, CHRFLAG2_10000000)
set_function(CHR_SELF, FUNC_ROBOT)
endfunction
};
u8 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 'P','A','R','T',' ','4','\n',0,
if_chr_stopped(/*goto*/ 0x04)
goto_first(0x2d)
label(0x04)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
u8 func041e_sealer1[] = {
#define LABEL_ALERTED 0x18
set_chr_dodge_rating(2, 0x0a)
set_accuracy(4)
set_reaction_speed(30)
set_chr_health(CHR_SELF, 40)
set_armor(0)
set_recovery_speed(0)
set_shield(0)
set_onshot_function(GFUNC_IDLE)
beginloop(0x19)
consider_coop_for_p1p2_chr(CHR_SELF)
set_target_chr(CHR_P1P2)
if_stage_flag_eq(STAGEFLAG_CRASH_FINISHED, TRUE, /*goto*/ 0x03)
if_alertness(100, OPERATOR_LESS_THAN, /*goto*/ 0x04)
goto_next(LABEL_ALERTED)
label(0x04)
if_target_chr_in_sight(/*goto*/ LABEL_ALERTED)
if_near_miss(/*goto*/ LABEL_ALERTED)
if_num_times_shot_gt(0, /*goto*/ LABEL_ALERTED)
if_hears_gunfire(/*goto*/ LABEL_ALERTED)
if_shot_near_chr(0x00, /*goto*/ LABEL_ALERTED)
if_saw_death(0x00, /*goto*/ LABEL_ALERTED)
if_dying(/*goto*/ LABEL_ALERTED)
endloop(0x19)
// Crash happened
label(0x03)
unset_chr_flag_bank2(CHR_SELF, CHRFLAG2_00000400)
jog_to_pad(0x00c4)
set_function(CHR_SEALER2, FUNC_JOG_TO_ACCIDENT)
set_function(CHR_SEALER3, FUNC_JOG_TO_ACCIDENT)
set_function(CHR_SEALER4, FUNC_JOG_TO_ACCIDENT)
beginloop(0x0d)
if_alertness(99, OPERATOR_GREATER_THAN, /*goto*/ 0x03)
if_chr_stopped(/*goto*/ 0x04)
endloop(0x0d)
// At crash site
label(0x04)
restart_timer
beginloop(0x0c)
if_alertness(99, OPERATOR_GREATER_THAN, /*goto*/ 0x03)
if_timer_gt(120, /*goto*/ 0x04)
endloop(0x0c)
label(0x03)
set_function(CHR_SELF, GFUNC_UNALERTED)
// Conversation
label(0x04)
assign_sound(0x814b, CHANNEL_6)
play_sound_from_entity(CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01)
animation(ANIM_TALKING_0098, -1, -1, 0x0200, CHR_SELF, 2)
restart_timer
beginloop(0x07)
if_alertness(99, OPERATOR_GREATER_THAN, /*goto*/ 0x04)
if_timer_gt(120, /*goto*/ 0x03)
endloop(0x07)
label(0x03)
assign_sound(0x044f, CHANNEL_6)
play_sound_from_entity(CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01)
animation(ANIM_TALKING_0231, -1, -1, 0x0200, CHR_SEALER1, 2)
animation(ANIM_TWO_GUN_HOLD, -1, -1, 0x0200, CHR_SELF, 2)
beginloop(0x08)
if_alertness(99, OPERATOR_GREATER_THAN, /*goto*/ 0x04)
if_sound_finished(CHANNEL_6, /*goto*/ 0x03)
goto_first(0x08)
label(0x03)
assign_sound(0x0450, CHANNEL_6)
play_sound_from_entity(CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01)
animation(ANIM_TALKING_0233, -1, -1, 0x0200, CHR_SEALER3, 2)
animation(ANIM_TWO_GUN_HOLD, -1, -1, 0x0200, CHR_SEALER1, 2)
restart_timer
beginloop(0x09)
if_alertness(99, OPERATOR_GREATER_THAN, /*goto*/ 0x04)
if_timer_gt(180, /*goto*/ 0x03)
goto_first(0x09)
label(0x03)
assign_sound(0x0451, CHANNEL_6)
play_sound_from_entity(CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01)
animation(ANIM_TALKING_0232, -1, -1, 0x0200, CHR_SEALER1, 2)
animation(ANIM_TWO_GUN_HOLD, -1, -1, 0x0200, CHR_SEALER3, 2)
restart_timer
beginloop(0x0a)
if_alertness(99, OPERATOR_GREATER_THAN, /*goto*/ 0x04)
if_timer_gt(120, /*goto*/ 0x03)
goto_first(0x0a)
label(0x03)
assign_sound(0x0452, CHANNEL_6)
play_sound_from_entity(CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01)
animation(ANIM_TALKING_0234, -1, -1, 0x0200, CHR_SEALER3, 2)
animation(ANIM_TWO_GUN_HOLD, -1, -1, 0x0200, CHR_SEALER1, 2)
beginloop(0x0b)
if_alertness(99, OPERATOR_GREATER_THAN, /*goto*/ 0x04)
if_shot_near_chr(0x00, /*goto*/ 0x04)
if_sound_finished(CHANNEL_6, /*goto*/ 0x04)
endloop(0x0b)
label(0x04)
set_function(CHR_SELF, GFUNC_UNALERTED)
// Alerted - seal elevator
label(LABEL_ALERTED)
label(0x04)
close_door(0x10)
close_door(0x11)
lock_door(0x10, 0x02)
lock_door(0x11, 0x02)
set_stage_flag(STAGEFLAG_ELEVATOR_SEALED)
assign_sound(0x0469, CHANNEL_6)
play_sound_from_entity(CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01)
message(CHR_BOND, 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
};
u8 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.
#define 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)
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_squadron_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
};
u8 func041f_alarm_responder[] = {
set_self_flag_bankx(CHRFLAG1_00080000, BANK_1)
set_self_flag_bankx(CHRFLAG0_80000000, BANK_0)
set_chr_dodge_rating(2, 0x0a)
set_accuracy(14)
set_reaction_speed(20)
set_chr_health(CHR_SELF, 40)
set_armor(0)
set_recovery_speed(0)
set_shield(0)
try_draw_weapon(MODEL_CHRDY357, WEAPON_DY357MAGNUM, 0x00000000, /*goto*/ 0x04)
label(0x04)
set_chr_team(CHR_SELF, TEAM_20)
set_squadron(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)
rebuild_teams
rebuild_squadrons
set_function(CHR_SELF, GFUNC_SEARCH_FOR_PLAYER)
endfunction
};
u8 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
};
u8 func040a_intro_from_gameplay[] = {
set_function(CHR_SELF, 0x040a)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
u8 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.
*/
u8 func1400_give_briefcases[] = {
yield
set_chr_team(CHR_ANTI, TEAM_20)
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_BOND)
// All difficulties
label(0x03)
give_object_to_chr(OBJ_BRIEFCASE4, CHR_BOND)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x03)
if_difficulty_lt(DIFF_PA, /*goto*/ 0x04)
// PA
give_object_to_chr(OBJ_BRIEFCASE5, CHR_COOP)
// All difficulties
label(0x04)
give_object_to_chr(OBJ_BRIEFCASE6, CHR_COOP)
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
};
u8 func1002_rebuild_groups[] = {
set_function(CHR_SELF, GFUNC_REBUILD_GROUPS)
endfunction
};
u8 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
};
u8 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
};
u8 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_BOND, 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
};
u8 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 'C','U','T','S','C','E','N','E',' ','S','T','A','R','T','E','D','\n',0,
label(0x03)
restart_timer
dprint 'C','U','T','S','C','E','N','E',' ','S','T','A','R','T','E','D','\n',0,
#define 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)
wait_until(30, 0x55)
speak(CHR_BOND, 0x3244, 0x7408, CHANNEL_7, COLOR_05_GREEN) // "We suspect the G5 Corporation is just a front for ..."
wait_until(1060, 0x56)
speak(CHR_BOND, 0x3245, 0x7409, CHANNEL_7, COLOR_09_BLUE) // "Just who is this help you keep referring to?"
wait_until(1260, 0x57)
speak(CHR_BOND, 0x3246, 0x740a, CHANNEL_7, COLOR_05_GREEN) // "Not now, Joanna. Time for radio silence. Good luck..."
wait_until(1488, 0x58)
speak(CHR_BOND, 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
};
u8 func040b_outro[] = {
camera_movement(0x0178)
set_music_track(MUSIC_CHICAGO_OUTRO)
set_chr_flag_bank3(CHR_ANTI, 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)
#define func0c01_wait_until(time, loopid) \
beginloop(loopid) \
if_controller_button_pressed(/*goto*/ 0x2e) \
if_timer_gt(time, /*goto*/ 0x04) \
endloop(loopid) \
label(0x04)
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
};
u8 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
};
u8 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
};
u8 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.
*/
u8 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
};
u8 func1018_keep_door_open[] = {
beginloop(0x10)
if_door_state(0x1a, (DOORSTATEBIT_CLOSED | DOORSTATEBIT_CLOSING), /*goto*/ 0x03)
reloop(0x10)
label(0x03)
open_door(0x1a)
endloop(0x10)
endfunction
};
u8 func1019_setup_topstairs_death_animation[] = {
set_chr_special_death_animation(CHR_TOPSTAIRS, 0x05)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
u8 func040e_6064[] = {
set_chr_dodge_rating(2, 0x0a)
set_accuracy(4)
set_reaction_speed(30)
set_chr_health(CHR_SELF, 40)
set_armor(0)
set_recovery_speed(0)
set_shield(0)
set_function(CHR_SELF, GFUNC_UNALERTED)
endfunction
};
u8 func040f_6088[] = {
if_difficulty_lt(DIFF_SA, /*goto*/ 0x03)
set_chr_dodge_rating(2, 0x0a)
set_accuracy(20)
set_reaction_speed(30)
set_chr_health(CHR_SELF, 40)
set_armor(0)
set_recovery_speed(0)
set_shield(0)
set_function(CHR_SELF, GFUNC_UNALERTED)
label(0x03)
set_chr_dodge_rating(2, 0x0a)
set_accuracy(4)
set_reaction_speed(30)
set_chr_health(CHR_SELF, 40)
set_armor(0)
set_recovery_speed(0)
set_shield(0)
set_function(CHR_SELF, GFUNC_UNALERTED)
endfunction
};
u8 func0410_60d0[] = {
set_chr_dodge_rating(2, 0x0a)
set_accuracy(14)
set_reaction_speed(20)
set_chr_health(CHR_SELF, 40)
set_armor(0)
set_recovery_speed(0)
set_shield(0)
set_function(CHR_SELF, GFUNC_UNALERTED)
endfunction
};
u8 func0411_60f4[] = {
set_self_flag_bank3(CHRFLAG3_00020000)
set_chr_dodge_rating(2, 0x0a)
set_accuracy(14)
set_reaction_speed(20)
set_chr_health(CHR_SELF, 40)
set_armor(0)
set_recovery_speed(40)
set_shield(0)
set_function(CHR_SELF, FUNC_FBI)
endfunction
};
u8 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
};
u8 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
};
u8 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
};
u8 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
};
u8 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_BOND, 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
};
u8 func1020_elevator_doors[] = {
beginloop(0x10)
if_stage_flag_eq(STAGEFLAG_ELEVATOR_SEALED, TRUE, /*goto*/ 0x03)
if_door_state(0x10, (DOORSTATEBIT_CLOSED | DOORSTATEBIT_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.
*/
u8 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, 0)
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
};
u8 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
};
u8 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
};
u8 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
};
u8 func1025_rtracker[] = {
yield
set_object_flag_bank2(OBJ_FALCON2, OBJECTFLAG2_RTRACKED_BLUE)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
u8 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
};
struct ailists functions[] = {
{ func0401_3ae8, 0x0401 },
{ func0402_3bb4, 0x0402 },
{ func0403_3c74, 0x0403 },
{ func0404_3ce0, 0x0404 },
{ func0405_3d50, 0x0405 },
{ func0406_3e54, 0x0406 },
{ func0407_3e60, 0x0407 },
{ func0408_3e6c, 0x0408 },
{ func0409_3e78, 0x0409 },
{ func040a_intro, 0x040a },
{ func040b_outro, 0x040b },
{ func040c_taxi, 0x040c },
{ func040d_limo, 0x040d },
{ func040e_6064, 0x040e },
{ func040f_6088, 0x040f },
{ func0410_60d0, 0x0410 },
{ func0411_60f4, 0x0411 },
{ func0412_cia, 0x0412 },
{ func0413_bugspotter, 0x0413 },
{ func0414_start_path07, 0x0414 },
{ func0415_start_path08, 0x0415 },
{ func0416_start_path09, 0x0416 },
{ func0417_start_path10, 0x0417 },
{ func0418_start_path11, 0x0418 },
{ func0419_init_cia1, 0x0419 },
{ func041d_fbi, 0x041d },
{ func041c_hiddenguy, 0x041c },
{ func041e_sealer1, 0x041e },
{ func041f_alarm_responder, 0x041f },
{ func0420_jog_to_accident, 0x0420 },
{ func041a_robot, 0x041a },
{ func041b_init_robot, 0x041b },
{ func040a_intro, 0x0c00 },
{ func040b_outro, 0x0c01 },
{ func1400_give_briefcases, 0x1400 },
{ func1001_objectives_failed_msg, 0x1001 },
{ func1002_rebuild_groups, 0x1002 },
{ func040a_intro_from_gameplay, 0x1003 },
{ func1004_tracerbug_bond, 0x1004 },
{ func1005_check_things_destroyed, 0x1005 },
{ func1006_check_for_end, 0x1006 },
{ func040d_limo_timing, 0x1007 },
{ func040c_taxi_timing, 0x1008 },
{ func1009_check_cia1_dead, 0x1009 },
{ func100a_check_cia2_dead, 0x100a },
{ func100b_check_cia3_dead, 0x100b },
{ func100c_check_cia4_dead, 0x100c },
{ func100d_spawn_alarm_responders, 0x100d },
{ func100f_check_mine, 0x100f },
{ func1010_elevator_switch, 0x1010 },
{ func1011_trackerbug_coop, 0x1011 },
{ func1012_update_robot_position_flags, 0x1012 },
{ func1014_crash, 0x1014 },
{ func040a_intro_sfx, 0x1415 },
{ func1416_setup_rain, 0x1416 },
{ func1017_drain_guards, 0x1017 },
{ func1018_keep_door_open, 0x1018 },
{ func1019_setup_topstairs_death_animation, 0x1019 },
{ func101a_msg_onlyplace, 0x101a },
{ func101b_msg_blockedupdoors, 0x101b },
{ func101c_msg_reprogramthattaxi, 0x101c },
{ func101d_msg_pointofingress, 0x101d },
{ func101e_check_sealer_guards_dead, 0x101e },
{ func101f_setup_robot_noise, 0x101f },
{ func1020_elevator_doors, 0x1020 },
{ func1021_check_topstairs_guy, 0x1021 },
{ func040d_limo_flags, 0x1022 },
{ func1423_setup_lighting, 0x1423 },
{ func0412_cia_invincibility, 0x1024 },
{ func1025_rtracker, 0x1025 },
{ func1026_uplink, 0x1026 },
{ func1027_untrack_dumpster, 0x1027 },
{ NULL, 0 },
};
struct aipaths paths[] = {
{ path00, 0, 0 },
{ path01, 1, 0 },
{ path02, 2, 0 },
{ path03, 3, 0 },
{ path04, 4, 0 },
{ path05, 5, 0 },
{ path06, 6, 0 },
{ path07, 7, 0 },
{ path08, 8, 0 },
{ path09, 9, 0 },
{ path10, 10, 0 },
{ path11, 11, 0 },
{ path12, 12, 0 },
{ path13, 13, 0 },
{ NULL, 0, 0 },
};