3342 lines
120 KiB
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 },
|
|
};
|
|
|