Rename CHR constants

This commit is contained in:
Ryan Dwyer
2019-10-20 18:55:15 +10:00
parent 69a50279fd
commit ac2ce4d510
27 changed files with 3645 additions and 3646 deletions
+366 -366
View File
File diff suppressed because it is too large Load Diff
+135 -135
View File
@@ -541,11 +541,11 @@ u8 func0401_drcaroll_following[] = {
set_onshot_function(FUNC_DRCAROLL_FOLLOWING)
set_self_flag_bank3(CHRFLAG3_00040000)
stop_chr
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
try_run_to_target_chr_with_hand_up(/*goto*/ 0x00)
label(0x00)
yield
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
if_chr_dying(CHR_SELF, /*goto*/ 0x00)
if_chr_death_animation_finished(CHR_SELF, /*goto*/ 0x00)
if_chr_unloaded(CHR_SELF, /*goto*/ 0x00)
@@ -560,10 +560,10 @@ u8 func0401_drcaroll_following[] = {
endloop(0x0b)
label(0x00)
say_quip(TARGET_CHR, 0x06, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_TARGET, 0x06, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
set_onshot_function(GFUNC_IDLE)
set_function(CHR_SELF, GFUNC_IDLE)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
set_shield(100)
set_chr_health(CHR_SELF, 100)
label(0x20)
@@ -573,7 +573,7 @@ u8 func0401_drcaroll_following[] = {
label(0x00)
restart_timer
say_quip(TARGET_CHR, 0x04, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_TARGET, 0x04, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
beginloop(0x0d)
if_num_times_shot_lt(1, /*goto*/ 0x00)
@@ -587,7 +587,7 @@ u8 func0401_drcaroll_following[] = {
restart_timer
beginloop(0x03)
if_chr_y(TARGET_CHR, -1910, OPERATOR_LESS_THAN, /*goto*/ 0x20)
if_chr_y(CHR_TARGET, -1910, OPERATOR_LESS_THAN, /*goto*/ 0x20)
label(0x20)
dprint 't','a','r','g','e','t','\n',0,
if_chr_sees_player(/*goto*/ 0x00)
@@ -601,15 +601,15 @@ u8 func0401_drcaroll_following[] = {
label(0x20)
call_rng
if_rand_lt(64, /*goto*/ 0x20)
say_quip(TARGET_CHR, 0x02, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_TARGET, 0x02, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
goto_first(0x02)
label(0x20)
say_quip(TARGET_CHR, 0x03, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_TARGET, 0x03, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
goto_first(0x02)
label(0x00)
say_quip(TARGET_CHR, 0x07, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_TARGET, 0x07, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
goto_first(0x02)
label(0x04)
@@ -623,7 +623,7 @@ u8 func0401_drcaroll_following[] = {
try_run_to_target_chr_with_hand_up(/*goto*/ 0x05)
beginloop(0x05)
if_chr_in_room(TARGET_CHR, 0x00, 0x0094, /*goto*/ 0x00)
if_chr_in_room(CHR_TARGET, 0x00, 0x0094, /*goto*/ 0x00)
goto_next(0x20)
label(0x00)
@@ -635,11 +635,11 @@ u8 func0401_drcaroll_following[] = {
endloop(0x05)
label(0x20)
say_quip(TARGET_CHR, 0x03, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_TARGET, 0x03, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
goto_first(0x04)
label(0x00)
say_quip(TARGET_CHR, 0x07, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_TARGET, 0x07, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
goto_first(0x04)
label(0x06)
@@ -837,7 +837,7 @@ u8 func040f_top_guard[] = {
if_chr_distance_lt(200, /*goto*/ 0x20)
if_stage_flag_eq(STAGEFLAG_CASS_SHIELD_DAMAGED, TRUE, /*goto*/ 0x00)
if_stage_flag_eq(STAGEFLAG_TOP_GUARDS_ATTACKING, TRUE, /*goto*/ 0x00)
set_target_chr(FOLLOW_CHR)
set_target_chr(CHR_PRESET)
endloop(0x1f)
label(0x00)
@@ -860,7 +860,7 @@ u8 func0411_top_guard_blinded[] = {
label(0x00)
animation(ANIM_BLINDED, 0, -1, 0x1010, CHR_SELF, 2)
say_quip(CHR_JOANNA, 0x11, 0x64, 0x02, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_BOND, 0x11, 0x64, 0x02, 0xff, BANK_1, 0x00, 0x00)
beginloop(0x1f)
if_chr_stopped(/*goto*/ 0x00)
@@ -897,7 +897,7 @@ u8 func0406_general_combat[] = {
endloop(0x0b)
label(0x00)
say_quip(CHR_JOANNA, 0x19, 0xff, 0x03, 0xff, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x19, 0xff, 0x03, 0xff, BANK_0, 0x00, 0x00)
set_onshot_function(GFUNC_IDLE)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -908,15 +908,15 @@ u8 func0406_general_combat[] = {
// Just got injured
label(0x00)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_PSYCHOSISED)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_PSYCHOSISED)
restart_timer
beginloop(0x0c)
if_self_flag_bankx_eq(CHRFLAG0_SAID_INJURY_QUIP, TRUE, BANK_0, /*goto*/ 0x00)
if_num_times_shot_lt(1, /*goto*/ 0x00)
if_timer_lt(20, /*goto*/ 0x00)
say_quip(CHR_JOANNA, 0x0d, 0x28, 0x03, 0x00, BANK_0, 0x00, 0x00)
say_quip(CHR_JOANNA, 0x0e, 0x28, 0x03, 0x01, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x0d, 0x28, 0x03, 0x00, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x0e, 0x28, 0x03, 0x01, BANK_0, 0x00, 0x00)
set_self_flag_bankx(CHRFLAG0_SAID_INJURY_QUIP, BANK_0)
label(0x00)
if_chr_stopped(/*goto*/ 0x21)
@@ -987,17 +987,17 @@ u8 func0406_general_combat[] = {
endloop(0x10)
label(0x15)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_PSYCHOSISED)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_PSYCHOSISED)
if_self_flag_bankx_eq(CHRFLAG1_00000001, TRUE, BANK_1, /*goto*/ 0x2a)
if_chr_distance_lt(250, /*goto*/ 0x29)
if_self_flag_bankx_eq(CHRFLAG0_00000004, TRUE, BANK_0, /*goto*/ 0x20)
set_self_flag_bankx(CHRFLAG0_00000004, BANK_0)
if_stage_flag_eq(STAGEFLAG_FOYER_LIGHTS_RESTORED, TRUE, /*goto*/ 0x00)
say_quip(CHR_JOANNA, 0x1b, 0xff, 0x02, 0xff, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x1b, 0xff, 0x02, 0xff, BANK_0, 0x00, 0x00)
goto_next(0x20)
label(0x00)
say_quip(CHR_JOANNA, 0x0b, 0xff, 0x02, 0xff, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x0b, 0xff, 0x02, 0xff, BANK_0, 0x00, 0x00)
label(0x20)
if_self_flag_bankx_eq(CHRFLAG0_00002000, TRUE, BANK_0, /*goto*/ 0x17)
try_aim_and_shoot_thing2(0x0200, 0x0000, /*goto*/ 0x12)
@@ -1009,13 +1009,13 @@ u8 func0406_general_combat[] = {
label(0x13)
if_chr_injured_target(CHR_SELF, /*goto*/ 0x20)
say_quip(CHR_JOANNA, 0x16, 0x19, 0x03, 0x00, BANK_0, 0x00, 0x00)
say_quip(CHR_JOANNA, 0x17, 0x19, 0x03, 0x01, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x16, 0x19, 0x03, 0x00, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x17, 0x19, 0x03, 0x01, BANK_0, 0x00, 0x00)
goto_next(0x00)
label(0x20)
say_quip(CHR_JOANNA, 0x15, 0x19, 0x02, 0x00, BANK_0, 0x00, 0x00)
say_quip(CHR_JOANNA, 0x15, 0x19, 0x03, 0x01, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x15, 0x19, 0x02, 0x00, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x15, 0x19, 0x03, 0x01, BANK_0, 0x00, 0x00)
label(0x00)
goto_first(0x14)
@@ -1024,7 +1024,7 @@ u8 func0406_general_combat[] = {
if_self_flag_bankx_eq(CHRFLAG0_00000004, TRUE, BANK_0, /*goto*/ 0x1c)
set_self_flag_bankx(CHRFLAG0_00000004, BANK_0)
if_stage_flag_eq(STAGEFLAG_FOYER_LIGHTS_RESTORED, TRUE, /*goto*/ 0x1c)
say_quip(CHR_JOANNA, 0x12, 0xff, 0x03, 0xff, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x12, 0xff, 0x03, 0xff, BANK_0, 0x00, 0x00)
beginloop(0x1c)
consider_coop_for_p1p2_chr(CHR_SELF)
@@ -1061,7 +1061,7 @@ u8 func0406_general_combat[] = {
label(0x17)
try_aim_and_shoot_thing1(0x0220, 0x0000, /*goto*/ 0x16)
label(0x16)
say_quip(CHR_JOANNA, 0x00, 0x19, 0x02, 0x01, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x00, 0x19, 0x02, 0x01, BANK_0, 0x00, 0x00)
try_aim_and_shoot_thing2(0x0200, 0x0000, /*goto*/ 0x00)
goto_next(0x20)
label(0x00)
@@ -1080,9 +1080,9 @@ u8 func0406_general_combat[] = {
label(0x2a)
label(0x20)
if_chr_lost_track_of_target_maybe(/*goto*/ 0x20)
set_onshot_function(GFUNC_COMBAT_WITH_TARGET_CHR)
set_return_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_onshot_function(GFUNC_COMBAT_WITH_TARGET)
set_return_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
label(0x20)
set_onshot_function(GFUNC_ALERTED)
set_return_function(CHR_SELF, GFUNC_ALERTED)
@@ -1091,7 +1091,7 @@ u8 func0406_general_combat[] = {
};
u8 func0408_hovercopter[] = {
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
cmd0143
move_object_to_pad(OBJ_HOVERCOPTER, 0x0199)
begin_hovercar_path(0x02)
@@ -1104,8 +1104,8 @@ u8 func0408_hovercopter[] = {
label(0x42)
yield
if_chr_y(TARGET_CHR, -1850, OPERATOR_LESS_THAN, /*goto*/ 0x52)
if_chr_y(TARGET_CHR, -1200, OPERATOR_LESS_THAN, /*goto*/ 0x53)
if_chr_y(CHR_TARGET, -1850, OPERATOR_LESS_THAN, /*goto*/ 0x52)
if_chr_y(CHR_TARGET, -1200, OPERATOR_LESS_THAN, /*goto*/ 0x53)
goto_next(0x54)
// Low combat (lowest floor)
@@ -1114,18 +1114,18 @@ u8 func0408_hovercopter[] = {
beginloop(0x22)
dprint 'L','O','W','\n',0,
if_chr_y(TARGET_CHR, -1850, OPERATOR_LESS_THAN, /*goto*/ 0x00)
if_chr_y(TARGET_CHR, -1200, OPERATOR_LESS_THAN, /*goto*/ 0x53)
if_chr_y(CHR_TARGET, -1850, OPERATOR_LESS_THAN, /*goto*/ 0x00)
if_chr_y(CHR_TARGET, -1200, OPERATOR_LESS_THAN, /*goto*/ 0x53)
if_stage_flag_eq(STAGEFLAG_CHOPPER_GO_TO_ROOF, FALSE, /*goto*/ 0x00)
goto_next(0x54)
label(0x00)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
if_chr_sees_player(/*goto*/ 0x43)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x20)
set_target_chr(CHR_VELVET)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x20)
set_target_chr(CHR_COOP)
if_chr_sees_player(/*goto*/ 0x43)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
label(0x20)
endloop(0x22)
@@ -1135,9 +1135,9 @@ u8 func0408_hovercopter[] = {
beginloop(0x24)
dprint 'M','I','D','\n',0,
if_chr_y(TARGET_CHR, -1850, OPERATOR_LESS_THAN, /*goto*/ 0x52)
if_chr_y(CHR_TARGET, -1850, OPERATOR_LESS_THAN, /*goto*/ 0x52)
dprint 'M','I','D','0','\n',0,
if_chr_y(TARGET_CHR, -1200, OPERATOR_LESS_THAN, /*goto*/ 0x00)
if_chr_y(CHR_TARGET, -1200, OPERATOR_LESS_THAN, /*goto*/ 0x00)
dprint 'M','I','D','1','\n',0,
if_stage_flag_eq(STAGEFLAG_CHOPPER_GO_TO_ROOF, FALSE, /*goto*/ 0x00)
dprint 'M','I','D','2','\n',0,
@@ -1145,18 +1145,18 @@ u8 func0408_hovercopter[] = {
label(0x00)
dprint 'M','I','D','3','\n',0,
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
if_chr_sees_player(/*goto*/ 0x48)
dprint 'N','O','T','V','I','S','\n',0,
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x20)
set_target_chr(CHR_VELVET)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x20)
set_target_chr(CHR_COOP)
// @bug: This should go to 0x48. Instead it goes to the low code path,
// which doesn't appear to have any side effects except that the
// hovercopter will say the low line ("surrender or die") on the mid
// level if Velvet is the first player it sees.
if_chr_sees_player(/*goto*/ 0x43)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
label(0x20)
endloop(0x24)
@@ -1165,17 +1165,17 @@ u8 func0408_hovercopter[] = {
begin_hovercar_path(0x02)
beginloop(0x26)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
dprint 'T','O','P','\n',0,
if_chr_y(TARGET_CHR, -1850, OPERATOR_LESS_THAN, /*goto*/ 0x52)
if_chr_y(TARGET_CHR, -1200, OPERATOR_LESS_THAN, /*goto*/ 0x53)
set_target_chr(CHR_JOANNA)
if_chr_y(CHR_TARGET, -1850, OPERATOR_LESS_THAN, /*goto*/ 0x52)
if_chr_y(CHR_TARGET, -1200, OPERATOR_LESS_THAN, /*goto*/ 0x53)
set_target_chr(CHR_BOND)
if_chr_sees_player(/*goto*/ 0x4d)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x20)
set_target_chr(CHR_VELVET)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x20)
set_target_chr(CHR_COOP)
if_chr_sees_player(/*goto*/ 0x4d)
label(0x20)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
label(0x00)
endloop(0x26)
@@ -1320,14 +1320,14 @@ u8 func1002_check_accessed_foyer_elevator[] = {
beginloop(0x21)
consider_coop_for_p1p2_chr(CHR_SELF)
set_target_chr(CHR_P1P2)
if_chr_y(TARGET_CHR, -8155, OPERATOR_LESS_THAN, /*goto*/ 0x20)
if_chr_distance_to_pad_lt(TARGET_CHR, 300, 0x021a, /*goto*/ 0x00)
if_chr_y(CHR_TARGET, -8155, OPERATOR_LESS_THAN, /*goto*/ 0x20)
if_chr_distance_to_pad_lt(CHR_TARGET, 300, 0x021a, /*goto*/ 0x00)
label(0x20)
goto_first(0x21)
label(0x00)
set_stage_flag(STAGEFLAG_ACCESSED_FOYER_ELEVATOR)
message(TARGET_CHR, 0x0621) // "Foyer elevator accessed."
message(CHR_TARGET, 0x0621) // "Foyer elevator accessed."
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
@@ -1352,15 +1352,15 @@ u8 func1003_check_end_level[] = {
endloop(0x21)
label(0x20)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x20)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x20)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x20)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x20)
if_chr_dying(CHR_BOND, /*goto*/ 0x20)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x20)
goto_next(0x00)
label(0x20)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x20)
if_chr_dying(CHR_VELVET, /*goto*/ 0x20)
if_chr_unloaded(CHR_VELVET, /*goto*/ 0x20)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x20)
if_chr_dying(CHR_COOP, /*goto*/ 0x20)
if_chr_unloaded(CHR_COOP, /*goto*/ 0x20)
goto_next(0x00)
label(0x20)
@@ -1368,7 +1368,7 @@ u8 func1003_check_end_level[] = {
set_function(CHR_SELF, GFUNC_IDLE)
label(0x00)
set_invincible(CHR_JOANNA)
set_invincible(CHR_BOND)
set_function(CHR_SELF, FUNC_OUTRO)
endfunction
};
@@ -1383,7 +1383,7 @@ u8 func1004_elevator_unlocking[] = {
beginloop(0x1f)
consider_coop_for_p1p2_chr(CHR_SELF)
set_target_chr(CHR_P1P2)
if_chr_activated_object(TARGET_CHR, 0x01, /*goto*/ 0x20)
if_chr_activated_object(CHR_TARGET, 0x01, /*goto*/ 0x20)
if_object_in_good_condition(0x01, /*goto*/ 0x00)
goto_next(0x28)
label(0x00)
@@ -1393,13 +1393,13 @@ u8 func1004_elevator_unlocking[] = {
label(0x28)
if_stage_flag_eq(STAGEFLAG_ELEVATOR_UNLOCKED, TRUE, /*goto*/ 0x00)
set_stage_flag(STAGEFLAG_ELEVATOR_PC_DESTROYED)
message(CHR_JOANNA, 0x062d) // "Critical mission object destroyed."
message(CHR_BOND, 0x062d) // "Critical mission object destroyed."
label(0x00)
set_function(CHR_SELF, GFUNC_IDLE)
// Computer activated
label(0x20)
message(TARGET_CHR, 0x060e) // "Accessing elevator controls..."
message(CHR_TARGET, 0x060e) // "Accessing elevator controls..."
assign_sound(0x8116, CHANNEL_6)
control_sound_from_object(CHANNEL_6, 0x01, TRUE)
restart_timer
@@ -1438,7 +1438,7 @@ u8 func1004_elevator_unlocking[] = {
play_sound(0x81b0, -1)
unlock_door(0x02, 0x01)
unlock_door(0x03, 0x01)
message(TARGET_CHR, 0x0622) // "Office elevator door has been unlocked."
message(CHR_TARGET, 0x0622) // "Office elevator door has been unlocked."
set_stage_flag(STAGEFLAG_ELEVATOR_UNLOCKED)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -1482,7 +1482,7 @@ u8 func1005_check_bodyguards_dead[] = {
label(0x20)
label(0x26)
message(CHR_JOANNA, 0x0624) // "Cassandra's bodyguards have been defeated."
message(CHR_BOND, 0x0624) // "Cassandra's bodyguards have been defeated."
set_stage_flag(STAGEFLAG_OBJECTIVE_BODYGUARDS_DEAD)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -1493,7 +1493,7 @@ u8 func1006_check_hovercopter_destroyed[] = {
beginloop(0x1f)
if_object_in_good_condition(OBJ_HOVERCOPTER, /*goto*/ 0x00)
message(CHR_JOANNA, 0x0623) // "DataDyne Hovercopter eliminated."
message(CHR_BOND, 0x0623) // "DataDyne Hovercopter eliminated."
set_stage_flag(STAGEFLAG_HOVERCOPTER_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
label(0x00)
@@ -1526,18 +1526,18 @@ u8 func100e_drcaroll_warnings[] = {
// Dead
label(0x21)
label(0x00)
message(CHR_JOANNA, 0x0610) // "Dr. Caroll has been killed!"
message(CHR_BOND, 0x0610) // "Dr. Caroll has been killed!"
set_stage_flag(STAGEFLAG_DRCAROLL_DEAD)
set_function(CHR_SELF, GFUNC_IDLE)
// Shield under 100
label(0x30)
message(CHR_JOANNA, 0x0611) // "Dr. Caroll is under attack!"
message(CHR_BOND, 0x0611) // "Dr. Caroll is under attack!"
set_stage_flag(STAGEFLAG_DRCAROLL_ATTACKED)
reloop(0x1f)
label(0x31)
message(CHR_JOANNA, 0x0612) // "Dr. Caroll has been damaged!"
message(CHR_BOND, 0x0612) // "Dr. Caroll has been damaged!"
set_stage_flag(STAGEFLAG_DRCAROLL_DAMAGED)
endloop(0x1f)
@@ -1632,7 +1632,7 @@ u8 func0409_tech_conversation[] = {
beginloop(0x01)
consider_coop_for_p1p2_chr(CHR_SELF)
set_target_chr(CHR_P1P2)
if_chr_activated_object(TARGET_CHR, 0x11, /*goto*/ 0x00)
if_chr_activated_object(CHR_TARGET, 0x11, /*goto*/ 0x00)
if_door_state(0x11, DOORSTATEBIT_OPEN, /*goto*/ 0x00)
if_alertness(99, OPERATOR_GREATER_THAN, /*goto*/ 0x33)
dprint 'T','E','C','H',' ','1',' ','L','O','O','P','\n',0,
@@ -1643,7 +1643,7 @@ u8 func0409_tech_conversation[] = {
// Player activated door or door is fully open
label(0x00)
set_follow_chr(TARGET_CHR)
set_follow_chr(CHR_TARGET)
set_chr_team(CHR_TECH1, TEAM_ENEMY)
set_chr_team(CHR_TECH2, TEAM_ENEMY)
set_chr_team(CHR_RLSHOCK, TEAM_ENEMY)
@@ -1665,7 +1665,7 @@ u8 func0409_tech_conversation[] = {
label(0x20)
dprint 'T','E','C','H',' ','2',' ','L','O','O','P','\n',0,
animation(ANIM_TALKING_00A0, 0, -1, 0x1014, CHR_SELF, 2)
speak(FOLLOW_CHR, 0x0625, 0x811d, CHANNEL_7, COLOR_06_WHITE) // "That's not how it goes."
speak(CHR_PRESET, 0x0625, 0x811d, CHANNEL_7, COLOR_06_WHITE) // "That's not how it goes."
restart_timer
beginloop(0x21)
@@ -1687,7 +1687,7 @@ u8 func0409_tech_conversation[] = {
label(0x20)
animation(ANIM_TWO_GUN_HOLD, 0, -1, 0x1014, CHR_SELF, 2)
animation(ANIM_TALKING_00A0, -1, -1, 0x0214, 0x10, 2)
speak(FOLLOW_CHR, 0x0626, 0x8120, CHANNEL_7, COLOR_08_RED) // "Yes, it is."
speak(CHR_PRESET, 0x0626, 0x8120, CHANNEL_7, COLOR_08_RED) // "Yes, it is."
beginloop(0x22)
if_shot_near_chr(0x00, /*goto*/ 0x33)
@@ -1708,7 +1708,7 @@ u8 func0409_tech_conversation[] = {
label(0x20)
animation(ANIM_TALKING_00A0, 0, -1, 0x1014, CHR_SELF, 2)
animation(0x0205, -1, -1, 0x0214, 0x10, 2)
speak(FOLLOW_CHR, 0x0627, 0x811e, CHANNEL_7, COLOR_06_WHITE) // "Give it to me - you're doing it wrong."
speak(CHR_PRESET, 0x0627, 0x811e, CHANNEL_7, COLOR_06_WHITE) // "Give it to me - you're doing it wrong."
beginloop(0x23)
if_shot_near_chr(0x00, /*goto*/ 0x33)
@@ -1729,7 +1729,7 @@ u8 func0409_tech_conversation[] = {
label(0x20)
animation(ANIM_TWO_GUN_HOLD, 0, -1, 0x1014, CHR_SELF, 2)
animation(ANIM_TALKING_00A0, -1, -1, 0x0214, 0x10, 2)
speak(FOLLOW_CHR, 0x0628, 0x8121, CHANNEL_7, COLOR_08_RED) // "Stop annoying me."
speak(CHR_PRESET, 0x0628, 0x8121, CHANNEL_7, COLOR_08_RED) // "Stop annoying me."
beginloop(0x24)
if_shot_near_chr(0x00, /*goto*/ 0x33)
@@ -1751,7 +1751,7 @@ u8 func0409_tech_conversation[] = {
animation(ANIM_TWO_GUN_HOLD, 0, -1, 0x1014, CHR_SELF, 2)
animation(ANIM_TALKING_00A0, -1, -1, 0x0214, CHR_RLSHOCK, 2)
animation(0x0206, -1, -1, 0x0214, 0x10, 2)
speak(FOLLOW_CHR, 0x0629, 0x8123, CHANNEL_7, COLOR_09_BLUE) // "Will you just hurry up!"
speak(CHR_PRESET, 0x0629, 0x8123, CHANNEL_7, COLOR_09_BLUE) // "Will you just hurry up!"
beginloop(0x25)
if_shot_near_chr(0x00, /*goto*/ 0x33)
@@ -1791,7 +1791,7 @@ u8 func0409_tech_conversation[] = {
set_squadron_alertness(100)
open_door(0x04)
restart_timer
speak(TARGET_CHR, 0x062a, 0x811f, CHANNEL_7, COLOR_06_WHITE) // "Oh, no...too late."
speak(CHR_TARGET, 0x062a, 0x811f, CHANNEL_7, COLOR_06_WHITE) // "Oh, no...too late."
animation(ANIM_SURRENDER_002E, 0, 193, 0x1810, CHR_SELF, 2)
beginloop(0x34)
@@ -1885,7 +1885,7 @@ u8 func040a_tech2[] = {
label(0x20)
animation(ANIM_SURRENDER_002E, 0, -1, 0x180a, CHR_SELF, 2)
speak(TARGET_CHR, 0x062b, 0x8122, CHANNEL_7, COLOR_08_RED) // "She's here..."
speak(CHR_TARGET, 0x062b, 0x8122, CHANNEL_7, COLOR_08_RED) // "She's here..."
beginloop(0x22)
if_sound_finished(CHANNEL_7, /*goto*/ 0x35)
@@ -1935,34 +1935,34 @@ u8 func040d_cass[] = {
label(0x3a)
open_door(OBJ_TOPROOMDOOR)
set_target_chr(FOLLOW_CHR)
set_target_chr(CHR_PRESET)
if_num_human_players_lt(2, /*goto*/ 0x20)
goto_next(0x89)
// 1 player - do force walk (enter room)
label(0x20)
revoke_control(CHR_JOANNA, 0)
force_walk(CHR_JOANNA, 0x0019, 0x2837, 0x002e)
revoke_control(CHR_BOND, 0)
force_walk(CHR_BOND, 0x0019, 0x2837, 0x002e)
beginloop(0x23)
open_door(OBJ_TOPROOMDOOR)
if_force_walk_finished(CHR_JOANNA, /*goto*/ 0x24)
if_force_walk_finished(CHR_BOND, /*goto*/ 0x24)
endloop(0x23)
// Second force walk (turn to face Cass)
label(0x24)
force_walk(CHR_JOANNA, 0x0018, 0x0041, 0x4100)
force_walk(CHR_BOND, 0x0018, 0x0041, 0x4100)
open_door(OBJ_TOPROOMDOOR)
beginloop(0x25)
if_force_walk_finished(CHR_JOANNA, /*goto*/ 0x26)
if_force_walk_finished(CHR_BOND, /*goto*/ 0x26)
endloop(0x25)
label(0x26)
unset_object_flag_bank0(OBJ_TOPROOMDOOR, OBJECTFLAG0_02000000)
grant_control(CHR_JOANNA)
grant_control(CHR_BOND)
close_door(OBJ_TOPROOMDOOR)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0045, /*goto*/ 0x20)
if_chr_in_room(CHR_BOND, 0x00, 0x0045, /*goto*/ 0x20)
lock_door(OBJ_TOPROOMDOOR, 0x02)
// 2 players, or force walk failed
@@ -1985,7 +1985,7 @@ u8 func040d_cass[] = {
label(0x00)
restart_timer
speak(TARGET_CHR, 0x0620, 0x80ff, CHANNEL_6, COLOR_04_ORANGE) // "We meet again, girl!"
speak(CHR_TARGET, 0x0620, 0x80ff, CHANNEL_6, COLOR_04_ORANGE) // "We meet again, girl!"
animation(ANIM_TALKING_00A0, 0, 193, 0x1010, CHR_SELF, 2)
beginloop(0x27)
@@ -1995,7 +1995,7 @@ u8 func040d_cass[] = {
label(0x00)
restart_timer
speak(TARGET_CHR, 0x0614, 0x80fe, CHANNEL_6, COLOR_04_ORANGE) // "You've become quite an annoyance..."
speak(CHR_TARGET, 0x0614, 0x80fe, CHANNEL_6, COLOR_04_ORANGE) // "You've become quite an annoyance..."
animation(ANIM_TALKING_00A3, 0, 193, 0x1014, CHR_SELF, 2)
beginloop(0x28)
@@ -2011,13 +2011,13 @@ u8 func040d_cass[] = {
endloop(0x29)
label(0x20)
speak(TARGET_CHR, 0x062c, 0x8101, CHANNEL_6, COLOR_04_ORANGE) // "Get her!"
speak(CHR_TARGET, 0x062c, 0x8101, CHANNEL_6, COLOR_04_ORANGE) // "Get her!"
animation(ANIM_TALKING_00A3, 0, 193, 0x1010, CHR_SELF, 2)
goto_next(0x20)
label(0x00)
restart_timer
speak(TARGET_CHR, 0x0615, 0x8100, CHANNEL_6, COLOR_04_ORANGE) // "Good night, Ms. Dark."
speak(CHR_TARGET, 0x0615, 0x8100, CHANNEL_6, COLOR_04_ORANGE) // "Good night, Ms. Dark."
animation(ANIM_TALKING_00A0, 0, 193, 0x1010, CHR_SELF, 2)
beginloop(0x2a)
@@ -2080,7 +2080,7 @@ u8 func040d_cass[] = {
consider_coop_for_p1p2_chr(CHR_SELF)
set_target_chr(CHR_P1P2)
if_within_units_of_sight(30, /*goto*/ 0x20)
set_target_chr(CHR_COUNTEROP)
set_target_chr(CHR_ANTI)
if_within_units_of_sight(30, /*goto*/ 0x20)
goto_next(0x2d)
@@ -2289,9 +2289,9 @@ u8 func100c_foyer_lights[] = {
u8 func1400_setup_counterop[] = {
yield
set_chr_team(CHR_COUNTEROP, TEAM_ENEMY)
give_object_to_chr(OBJ_NIGHTVISION, CHR_JOANNA)
give_object_to_chr(OBJ_NIGHTVISION, CHR_VELVET)
set_chr_team(CHR_ANTI, TEAM_ENEMY)
give_object_to_chr(OBJ_NIGHTVISION, CHR_BOND)
give_object_to_chr(OBJ_NIGHTVISION, CHR_COOP)
set_function(CHR_SELF, GFUNC_REBUILD_GROUPS)
endfunction
};
@@ -2300,11 +2300,11 @@ u8 func100d_intro[] = {
set_music_track(MUSIC_EXTRACTION_INTRO)
camera_movement(0x0138)
cmd0175(60)
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x0139, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x0139, -1, -1, 0x0600, CHR_BOND, 4)
set_chr_flag_bank3(0x00, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(0x00, CHRFLAG2_00020000)
animation(0x013d, -1, -1, 0x0600, CHR_DRCAROLL, 4)
@@ -2316,9 +2316,9 @@ u8 func100d_intro[] = {
fade_to_color(0x000000ff, 0)
fade_to_color(0x00000000, 110)
yield
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_JOANNA, WEAPON_FALCON2_SCOPE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_FALCON2_SCOPE, WEAPON_NONE)
if_controller_button_pressed(/*goto*/ 0x00)
#define wait_until(time, loopid) \
@@ -2343,10 +2343,10 @@ u8 func100d_intro[] = {
play_sound(0x0427, -1)
wait_until(540, 0x64)
speak(CHR_JOANNA, 0x063c, 0x7bf3, CHANNEL_7, COLOR_06_WHITE) // "Sound the alarm - she's here!"
speak(CHR_BOND, 0x063c, 0x7bf3, CHANNEL_7, COLOR_06_WHITE) // "Sound the alarm - she's here!"
wait_until(640, 0x65)
speak(CHR_JOANNA, 0x063d, 0x73f4, CHANNEL_7, COLOR_09_BLUE) // "Lights out!"
speak(CHR_BOND, 0x063d, 0x73f4, CHANNEL_7, COLOR_09_BLUE) // "Lights out!"
wait_until(690, 0x66)
play_sound(0x0428, -1)
@@ -2364,7 +2364,7 @@ u8 func100d_intro[] = {
close_door(0x0c)
wait_until(1000, 0x6b)
speak(CHR_JOANNA, 0x063e, 0x73f5, CHANNEL_7, COLOR_09_BLUE) // "What the...?"
speak(CHR_BOND, 0x063e, 0x73f5, CHANNEL_7, COLOR_09_BLUE) // "What the...?"
beginloop(0x21)
if_camera_animating(/*goto*/ 0x20)
@@ -2378,11 +2378,11 @@ u8 func100d_intro[] = {
mute_channel(CHANNEL_10)
mute_channel(CHANNEL_7)
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x0139, -2, -1, 0x0600, CHR_JOANNA, 2)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x0139, -2, -1, 0x0600, CHR_BOND, 2)
unset_chr_flag_bank3(CHR_DRCAROLL, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_DRCAROLL, CHRFLAG2_00020000)
@@ -2413,7 +2413,7 @@ u8 func0412_outro[] = {
set_object_flag_bank1(OBJ_HOVERCOPTER, OBJECTFLAG1_INVISIBLE)
hide_object(OBJ_HOVERCOPTER)
set_function(CHR_P1P2, GFUNC_IDLE)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(0xf1, CHRFLAG3_HIDDEN)
dprint 'c','u','t',' ','s','c','e','n','e',' ','2',0,
set_chr_flag_bank3(CHR_P1P2, CHRFLAG3_INVINCIBLE_TO_GUNFIRE)
@@ -2549,18 +2549,18 @@ u8 func0412_outro[] = {
play_sound(0x8055, CHANNEL_10)
outro_wait_until(1526, 0x70)
set_chr_shooting_in_cutscene(CHR_JOANNA, TRUE)
set_chr_shooting_in_cutscene(CHR_BOND, TRUE)
yield
yield
set_chr_shooting_in_cutscene(CHR_JOANNA, FALSE)
set_chr_shooting_in_cutscene(CHR_BOND, FALSE)
outro_wait_until(1538, 0x84)
set_chr_shooting_in_cutscene(CHR_JOANNA, TRUE)
set_chr_shooting_in_cutscene(CHR_BOND, TRUE)
yield
yield
set_chr_shooting_in_cutscene(CHR_JOANNA, FALSE)
set_chr_shooting_in_cutscene(CHR_BOND, FALSE)
outro_wait_until(1554, 0x71)
play_sound(0x000d, CHANNEL_10)
@@ -2712,11 +2712,11 @@ u8 func0415_init_10hp[] = {
u8 func1012_msg_lockeddown[] = {
beginloop(0x1f)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0023, /*goto*/ 0x20)
if_chr_in_room(CHR_BOND, 0x00, 0x0023, /*goto*/ 0x20)
endloop(0x1f)
label(0x20)
speak(CHR_JOANNA, 0x0633, 0x8176, CHANNEL_6, COLOR_09_BLUE) // "They've locked down the ground floor - get to the ..."
speak(CHR_BOND, 0x0633, 0x8176, CHANNEL_6, COLOR_09_BLUE) // "They've locked down the ground floor - get to the ..."
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
@@ -2736,7 +2736,7 @@ u8 func1013_msg_thatcopter[] = {
endloop(0x21)
label(0x20)
speak(CHR_JOANNA, 0x0634, 0x8177, CHANNEL_6, COLOR_09_BLUE) // "That copter needs to be taken out, or the jumpship..."
speak(CHR_BOND, 0x0634, 0x8177, CHANNEL_6, COLOR_09_BLUE) // "That copter needs to be taken out, or the jumpship..."
label(0x26)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -2749,9 +2749,9 @@ u8 func1014_msg_cantleaveany[] = {
endloop(0x1f)
label(0x20)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x26)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x26)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x26)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x26)
if_chr_dying(CHR_BOND, /*goto*/ 0x26)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x26)
restart_timer
beginloop(0x21)
@@ -2759,20 +2759,20 @@ u8 func1014_msg_cantleaveany[] = {
endloop(0x21)
label(0x20)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x26)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x26)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x26)
speak(CHR_JOANNA, 0x0635, 0x73aa, CHANNEL_6, COLOR_09_BLUE) // "I can't leave any bodyguards standing."
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x26)
if_chr_dying(CHR_BOND, /*goto*/ 0x26)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x26)
speak(CHR_BOND, 0x0635, 0x73aa, CHANNEL_6, COLOR_09_BLUE) // "I can't leave any bodyguards standing."
label(0x26)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x27)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x27)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x27)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x27)
if_chr_dying(CHR_BOND, /*goto*/ 0x27)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x27)
beginloop(0x5f)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x27)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x27)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x27)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x27)
if_chr_dying(CHR_BOND, /*goto*/ 0x27)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x27)
if_sound_finished(CHANNEL_6, /*goto*/ 0x20)
endloop(0x5f)
@@ -2792,11 +2792,11 @@ u8 func1015_msg_jumpshipwaiting[] = {
if_objective_failed(2, /*goto*/ 0x00)
if_objective_failed(3, /*goto*/ 0x00)
if_objective_failed(4, /*goto*/ 0x00)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0002, /*goto*/ 0x20)
if_chr_in_room(CHR_BOND, 0x00, 0x0002, /*goto*/ 0x20)
endloop(0x1f)
label(0x20)
speak(CHR_JOANNA, 0x0636, 0x8178, CHANNEL_6, COLOR_09_BLUE) // "Don't keep the jumpship waiting - get back to the ..."
speak(CHR_BOND, 0x0636, 0x8178, CHANNEL_6, COLOR_09_BLUE) // "Don't keep the jumpship waiting - get back to the ..."
label(0x00)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -2909,7 +2909,7 @@ u8 func1017_remove_special_shock[] = {
u8 func1018_give_magnum[] = {
beginloop(0x1f)
if_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_PSYCHOSISED, /*goto*/ 0x00)
if_chr_flag_bank2(CHR_BOND, CHRFLAG2_PSYCHOSISED, /*goto*/ 0x00)
endloop(0x1f)
// This seems wrong. The magnum is actually given to the special shock...
+39 -39
View File
@@ -84,7 +84,7 @@ struct aipaths paths[] = {
u8 func1000_counterop_setup[] = {
yield
set_chr_team(CHR_COUNTEROP, TEAM_ENEMY)
set_chr_team(CHR_ANTI, TEAM_ENEMY)
set_function(CHR_SELF, GFUNC_REBUILD_GROUPS)
endfunction
};
@@ -96,16 +96,16 @@ u8 func1001_objectives_failed[] = {
};
u8 func1002_first_walk[] = {
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
camera_movement(0x0488)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
display_text(0x00, COLOR_02_WHITE, 0x5e07) // "THE DUEL"
animation(ANIM_RELOAD, -1, -1, 0x0600, CHR_GUARD, 2)
label(0x2d)
message(CHR_JOANNA, 0x5e0c) // "Opponent skill level: AGENT"
message(CHR_BOND, 0x5e0c) // "Opponent skill level: AGENT"
// Wait for camera to stop animating
restart_timer
@@ -119,18 +119,18 @@ u8 func1002_first_walk[] = {
// Start walking
label(0x06)
remove_displayed_text
revoke_control(CHR_JOANNA, 0)
revoke_control(CHR_BOND, 0)
enter_firstperson
force_walk(CHR_JOANNA, 0x0275, 0x2805, 0x0064)
force_walk(CHR_BOND, 0x0275, 0x2805, 0x0064)
chr_move_to_pad(CHR_GUARD, 0x0274, 0x01, /*goto*/ 0x0b)
// Wait for walk to finish
beginloop(0x0b)
if_force_walk_finished(CHR_JOANNA, /*goto*/ 0x0c)
if_force_walk_finished(CHR_BOND, /*goto*/ 0x0c)
endloop(0x0b)
label(0x0c)
grant_control(CHR_JOANNA)
grant_control(CHR_BOND)
set_function(CHR_GUARD, FUNC_GUARD_COMBAT)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -139,8 +139,8 @@ u8 func1002_first_walk[] = {
u8 func1007_second_walk[] = {
// Wait until SA walk trigger
beginloop(0x58)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x2d)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x2d)
if_chr_dying(CHR_BOND, /*goto*/ 0x2d)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x2d)
if_stage_flag_eq(STAGEFLAG_SA_WALK_TRIGGER, TRUE, /*goto*/ 0x06)
endloop(0x58)
@@ -148,7 +148,7 @@ u8 func1007_second_walk[] = {
label(0x2d)
set_function(CHR_SELF, GFUNC_IDLE)
label(0x06)
revoke_control(CHR_JOANNA, 0)
revoke_control(CHR_BOND, 0)
camera_movement(0x0488)
// Place chrs
@@ -163,13 +163,13 @@ u8 func1007_second_walk[] = {
unset_chr_flag_bank3(CHR_JONATHAN, CHRFLAG3_INVINCIBLE_TO_GUNFIRE)
unset_chr_flag_bank3(CHR_JONATHAN, CHRFLAG3_UNEXPLODABLE)
yield
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(ANIM_GRAB_CROTCH, -1, -1, 0x0600, CHR_JONATHAN, 2)
label(0x2d)
message(CHR_JOANNA, 0x5e0d) // "Opponent skill level: SPECIAL AGENT"
message(CHR_BOND, 0x5e0d) // "Opponent skill level: SPECIAL AGENT"
restart_timer
beginloop(0x08)
@@ -182,10 +182,10 @@ u8 func1007_second_walk[] = {
label(0x06)
label(0x2d)
remove_displayed_text
revoke_control(CHR_JOANNA, 0)
revoke_control(CHR_BOND, 0)
enter_firstperson
yield
force_walk(CHR_JOANNA, 0x0275, 0x2805, 0x0064)
force_walk(CHR_BOND, 0x0275, 0x2805, 0x0064)
// Place Jon
call_rng
@@ -196,12 +196,12 @@ u8 func1007_second_walk[] = {
// Wait for force walk to finish
beginloop(0x0b)
if_force_walk_finished(CHR_JOANNA, /*goto*/ 0x0c)
if_force_walk_finished(CHR_BOND, /*goto*/ 0x0c)
endloop(0x0b)
// Give control back to Jo
label(0x0c)
grant_control(CHR_JOANNA)
grant_control(CHR_BOND)
set_function(CHR_JONATHAN, FUNC_JON_COMBAT)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -219,8 +219,8 @@ u8 func0401_move_to_pad[] = {
u8 func1008_third_walk[] = {
// Wait for flag or Jo dying
beginloop(0x58)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x2d)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x2d)
if_chr_dying(CHR_BOND, /*goto*/ 0x2d)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x2d)
if_stage_flag_eq(STAGEFLAG_PA_WALK_TRIGGER, TRUE, /*goto*/ 0x06)
endloop(0x58)
@@ -230,7 +230,7 @@ u8 func1008_third_walk[] = {
// Do cutscene
label(0x06)
revoke_control(CHR_JOANNA, 0)
revoke_control(CHR_BOND, 0)
camera_movement(0x0488)
label(0x8f)
@@ -244,12 +244,12 @@ u8 func1008_third_walk[] = {
unset_chr_flag_bank3(CHR_TRENT, CHRFLAG3_INVINCIBLE_TO_GUNFIRE)
unset_chr_flag_bank3(CHR_TRENT, CHRFLAG3_UNEXPLODABLE)
yield
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(ANIM_HEAD_ROLL, -1, -1, 0x0600, CHR_TRENT, 2)
label(0x2d)
message(CHR_JOANNA, 0x5e0e) // "Opponent skill level: PERFECT AGENT"
message(CHR_BOND, 0x5e0e) // "Opponent skill level: PERFECT AGENT"
// Wait for cutscene to finish
restart_timer
@@ -263,25 +263,25 @@ u8 func1008_third_walk[] = {
// Begin force walk
label(0x06)
remove_displayed_text
revoke_control(CHR_JOANNA, 0)
revoke_control(CHR_BOND, 0)
enter_firstperson
force_walk(CHR_JOANNA, 0x0275, 0x2805, 0x0064)
force_walk(CHR_BOND, 0x0275, 0x2805, 0x0064)
chr_move_to_pad(CHR_TRENT, 0x0272, 0x01, /*goto*/ 0x0b)
beginloop(0x0b)
if_force_walk_finished(CHR_JOANNA, /*goto*/ 0x0c)
if_force_walk_finished(CHR_BOND, /*goto*/ 0x0c)
endloop(0x0b)
label(0x0c)
set_function(CHR_TRENT, FUNC_TRENT_COMBAT)
grant_control(CHR_JOANNA)
grant_control(CHR_BOND)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
u8 func1004_revoke_control[] = {
yield
revoke_control(CHR_JOANNA, 0)
revoke_control(CHR_BOND, 0)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
@@ -295,7 +295,7 @@ u8 func1005_main[] = {
endloop(0x04)
label(0x2d)
message(CHR_JOANNA, 0x5e09) // "Well done! You were too quick for him!"
message(CHR_BOND, 0x5e09) // "Well done! You were too quick for him!"
set_stage_flag(STAGEFLAG_GUARD_DEAD)
restart_timer
@@ -322,7 +322,7 @@ u8 func1005_main[] = {
endloop(0x09)
label(0x2d)
message(CHR_JOANNA, 0x5e0a) // "Well done! You were too quick for him!"
message(CHR_BOND, 0x5e0a) // "Well done! You were too quick for him!"
set_stage_flag(STAGEFLAG_JONATHAN_DEAD)
restart_timer
@@ -349,7 +349,7 @@ u8 func1005_main[] = {
endloop(0x0c)
label(0x2d)
message(CHR_JOANNA, 0x5e0b) // "Well done! You were too quick for him!"
message(CHR_BOND, 0x5e0b) // "Well done! You were too quick for him!"
set_stage_flag(STAGEFLAG_TRENT_DEAD)
restart_timer
@@ -420,7 +420,7 @@ u8 func0402_guard_combat[] = {
// 2 seconds have passed without seeing guard, or guard has been shot
label(0x06)
if_chr_dying(TARGET_CHR, /*goto*/ 0x2e)
if_chr_dying(CHR_TARGET, /*goto*/ 0x2e)
try_aim_and_shoot_thing1(0x0220, 0x0000, /*goto*/ 0x2d)
label(0x2d)
try_aim_and_shoot_thing2(0x0200, 0x0000, /*goto*/ 0x0c)
@@ -502,7 +502,7 @@ u8 func0404_trent_combat[] = {
// Attack
label(0x06)
if_chr_dying(TARGET_CHR, /*goto*/ 0x2e)
if_chr_dying(CHR_TARGET, /*goto*/ 0x2e)
try_aim_and_shoot_thing1(0x0220, 0x0000, /*goto*/ 0x2d)
label(0x2d)
try_aim_and_shoot_thing2(0x0200, 0x0000, /*goto*/ 0x0c)
+90 -90
View File
@@ -389,7 +389,7 @@ u8 func1001_objectives_failed_msg[] = {
u8 func1400_setup_counterop[] = {
yield
set_chr_team(CHR_COUNTEROP, TEAM_ENEMY)
set_chr_team(CHR_ANTI, TEAM_ENEMY)
set_function(CHR_SELF, GFUNC_REBUILD_GROUPS)
endfunction
};
@@ -401,23 +401,23 @@ u8 func1011_setup_snow[] = {
};
u8 func1002_intro[] = {
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_music_track(MUSIC_CRASHSITE_INTRO)
camera_movement(0x01b5)
cmd0175(60)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x01b6, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_hud_visible(CHR_JOANNA, TRUE)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x01b6, -1, -1, 0x0600, CHR_BOND, 4)
set_chr_hud_visible(CHR_BOND, TRUE)
restart_timer
fade_to_color(0x000000ff, 0)
fade_to_color(0x00000000, 300)
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
#define wait_until(time, loopid) \
beginloop(loopid) \
@@ -429,69 +429,69 @@ u8 func1002_intro[] = {
wait_until(724, 0x69)
speak(CHR_JOANNA, 0x0a20, 0x7759, CHANNEL_10, COLOR_09_BLUE) // "Ahhh... uuhhhh..."
speak(CHR_BOND, 0x0a20, 0x7759, CHANNEL_10, COLOR_09_BLUE) // "Ahhh... uuhhhh..."
wait_until(830, 0x6a)
speak(CHR_JOANNA, 0x0a22, 0x7457, CHANNEL_10, COLOR_06_WHITE) // "Agent Dark! Please report!"
speak(CHR_BOND, 0x0a22, 0x7457, CHANNEL_10, COLOR_06_WHITE) // "Agent Dark! Please report!"
wait_until(980, 0x6b)
speak(CHR_JOANNA, 0x0a21, 0x775a, CHANNEL_10, COLOR_09_BLUE) // "Ahhh... uhh... owww..."
speak(CHR_BOND, 0x0a21, 0x775a, CHANNEL_10, COLOR_09_BLUE) // "Ahhh... uhh... owww..."
wait_until(1030, 0x6c)
speak(CHR_JOANNA, 0x0a23, 0x7458, CHANNEL_10, COLOR_06_WHITE) // "Perfect Dark, come in!"
speak(CHR_BOND, 0x0a23, 0x7458, CHANNEL_10, COLOR_06_WHITE) // "Perfect Dark, come in!"
wait_until(1152, 0x6e)
speak(CHR_JOANNA, 0x0a24, 0x7459, CHANNEL_10, COLOR_09_BLUE) // "A-agent Dark reporting in..."
speak(CHR_BOND, 0x0a24, 0x7459, CHANNEL_10, COLOR_09_BLUE) // "A-agent Dark reporting in..."
wait_until(1372, 0x6f)
speak(CHR_JOANNA, 0x0a25, 0x745a, CHANNEL_10, COLOR_06_WHITE) // "Agent Dark! Please reply!"
speak(CHR_BOND, 0x0a25, 0x745a, CHANNEL_10, COLOR_06_WHITE) // "Agent Dark! Please reply!"
wait_until(1610, 0x6d)
speak(CHR_JOANNA, 0x0a26, 0x745b, CHANNEL_10, COLOR_09_BLUE) // "Something's jamming my transmissions... It's comin..."
speak(CHR_BOND, 0x0a26, 0x745b, CHANNEL_10, COLOR_09_BLUE) // "Something's jamming my transmissions... It's comin..."
wait_until(1875, 0x70)
speak(CHR_JOANNA, -1, 0x8189, CHANNEL_10, COLOR_00_GREEN)
speak(CHR_BOND, -1, 0x8189, CHANNEL_10, COLOR_00_GREEN)
wait_until(1900, 0x71)
speak(CHR_JOANNA, -1, 0x818a, CHANNEL_10, COLOR_00_GREEN)
speak(CHR_BOND, -1, 0x818a, CHANNEL_10, COLOR_00_GREEN)
wait_until(1926, 0x72)
speak(CHR_JOANNA, -1, 0x8188, CHANNEL_7, COLOR_00_GREEN)
speak(CHR_BOND, -1, 0x8188, CHANNEL_7, COLOR_00_GREEN)
wait_until(1958, 0x73)
speak(CHR_JOANNA, -1, 0x8189, CHANNEL_10, COLOR_00_GREEN)
speak(CHR_BOND, -1, 0x8189, CHANNEL_10, COLOR_00_GREEN)
wait_until(2000, 0x74)
speak(CHR_JOANNA, 0x0a27, 0x745c, CHANNEL_10, COLOR_09_BLUE) // "I'd better find the jamming device and check that ..."
speak(CHR_BOND, 0x0a27, 0x745c, CHANNEL_10, COLOR_09_BLUE) // "I'd better find the jamming device and check that ..."
wait_until(2116, 0x75)
speak(CHR_JOANNA, -1, 0x8188, CHANNEL_7, COLOR_00_GREEN)
speak(CHR_BOND, -1, 0x8188, CHANNEL_7, COLOR_00_GREEN)
wait_until(2168, 0x76)
speak(CHR_JOANNA, -1, 0x8187, CHANNEL_6, COLOR_00_GREEN)
speak(CHR_BOND, -1, 0x8187, CHANNEL_6, COLOR_00_GREEN)
wait_until(2224, 0x78)
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_JOANNA, WEAPON_FALCON2_SCOPE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_FALCON2_SCOPE, WEAPON_NONE)
wait_until(2305, 0x79)
speak(CHR_JOANNA, -1, 0x01db, CHANNEL_5, COLOR_00_GREEN)
speak(CHR_BOND, -1, 0x01db, CHANNEL_5, COLOR_00_GREEN)
wait_until(2392, 0x7a)
speak(CHR_JOANNA, -1, 0x8189, CHANNEL_7, COLOR_00_GREEN)
speak(CHR_BOND, -1, 0x8189, CHANNEL_7, COLOR_00_GREEN)
wait_until(2412, 0x7b)
speak(CHR_JOANNA, -1, 0x8187, CHANNEL_6, COLOR_00_GREEN)
speak(CHR_BOND, -1, 0x8187, CHANNEL_6, COLOR_00_GREEN)
wait_until(2460, 0x7c)
speak(CHR_JOANNA, -1, 0x8188, CHANNEL_7, COLOR_00_GREEN)
speak(CHR_BOND, -1, 0x8188, CHANNEL_7, COLOR_00_GREEN)
wait_until(2513, 0x7d)
speak(CHR_JOANNA, -1, 0x8189, CHANNEL_6, COLOR_00_GREEN)
speak(CHR_BOND, -1, 0x8189, CHANNEL_6, COLOR_00_GREEN)
wait_until(2685, 0x7e)
speak(CHR_JOANNA, -1, 0x818a, CHANNEL_7, COLOR_00_GREEN)
speak(CHR_BOND, -1, 0x818a, CHANNEL_7, COLOR_00_GREEN)
beginloop(0x0a)
if_camera_animating(/*goto*/ 0x31)
@@ -503,21 +503,21 @@ u8 func1002_intro[] = {
endloop(0x0a)
label(0x65)
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_JOANNA, WEAPON_FALCON2_SCOPE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_FALCON2_SCOPE, WEAPON_NONE)
mute_channel(CHANNEL_7)
mute_channel(CHANNEL_6)
mute_channel(CHANNEL_5)
mute_channel(CHANNEL_10)
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x01b6, -2, -1, 0x0600, CHR_JOANNA, 2)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x01b6, -2, -1, 0x0600, CHR_BOND, 2)
restart_default_music
reset_ambience
set_chr_hud_visible(CHR_JOANNA, FALSE)
set_chr_hud_visible(CHR_BOND, FALSE)
enter_firstperson
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -541,19 +541,19 @@ u8 func0402_outro[] = {
set_stage_flag(STAGEFLAG_OUTRO_STARTED)
hide_object(OBJ_HOVERBIKE)
set_function(CHR_PRESIDENT, GFUNC_IDLE)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x31)
set_target_chr(CHR_JOANNA)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x31)
set_target_chr(CHR_BOND)
goto_next(0x08)
label(0x31)
set_target_chr(CHR_VELVET)
set_target_chr(CHR_COOP)
label(0x08)
camera_movement(0x01d9)
set_music_track(MUSIC_CRASHSITE_OUTRO)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(0xf1, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_P1P2, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(TARGET_CHR, CHRFLAG3_HIDDEN)
set_function(TARGET_CHR, GFUNC_IDLE)
unset_chr_flag_bank3(CHR_TARGET, CHRFLAG3_HIDDEN)
set_function(CHR_TARGET, GFUNC_IDLE)
remove_chr(CHR_ELVIS)
set_function(CHR_ELVIS, GFUNC_IDLE)
@@ -562,10 +562,10 @@ u8 func0402_outro[] = {
set_chr_flag_bank3(CHR_PRESIDENT, CHRFLAG3_INVINCIBLE_TO_GUNFIRE)
set_function(CHR_PRESIDENT, GFUNC_IDLE)
set_chr_flag_bank3(TARGET_CHR, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(TARGET_CHR, CHRFLAG3_HIDDEN)
set_chr_flag_bank2(TARGET_CHR, CHRFLAG2_00020000)
animation(0x01df, -1, -1, 0x0600, TARGET_CHR, 4)
set_chr_flag_bank3(CHR_TARGET, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(CHR_TARGET, CHRFLAG3_HIDDEN)
set_chr_flag_bank2(CHR_TARGET, CHRFLAG2_00020000)
animation(0x01df, -1, -1, 0x0600, CHR_TARGET, 4)
set_chr_flag_bank3(CHR_SKEDAR, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(CHR_SKEDAR, CHRFLAG3_HIDDEN)
@@ -601,9 +601,9 @@ u8 func0402_outro[] = {
set_object_flag_bank2(OBJ_CRATE, OBJECTFLAG2_00000010)
object_do_animation(0x01e0, OBJ_CRATE, 0x04ff, 0xff)
restart_timer
set_cutscene_weapon(TARGET_CHR, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_TARGET, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(TARGET_CHR, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_TARGET, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_ELVIS_OUTRO, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_ELVIS_OUTRO, WEAPON_HAMMER, WEAPON_NONE)
@@ -616,10 +616,10 @@ u8 func0402_outro[] = {
play_sound(0x0595, CHANNEL_6)
wait_until(248, 0x6b)
speak(CHR_JOANNA, 0x0a28, 0x745d, CHANNEL_10, COLOR_09_BLUE) // "How are you feeling, Mr. President?"
speak(CHR_BOND, 0x0a28, 0x745d, CHANNEL_10, COLOR_09_BLUE) // "How are you feeling, Mr. President?"
wait_until(414, 0x6c)
speak(CHR_JOANNA, 0x0a29, 0x745e, CHANNEL_10, COLOR_08_RED) // "Better now, young lady. Today, I think, will take ..."
speak(CHR_BOND, 0x0a29, 0x745e, CHANNEL_10, COLOR_08_RED) // "Better now, young lady. Today, I think, will take ..."
wait_until(490, 0x6e)
play_sound(0x0596, CHANNEL_5)
@@ -637,7 +637,7 @@ u8 func0402_outro[] = {
play_sound(0x0597, CHANNEL_7)
wait_until(1200, 0x70)
speak(CHR_JOANNA, 0x0a2a, 0x745f, CHANNEL_10, COLOR_09_BLUE) // "Just one thing, sir? What is the Pelagic II that T..."
speak(CHR_BOND, 0x0a2a, 0x745f, CHANNEL_10, COLOR_09_BLUE) // "Just one thing, sir? What is the Pelagic II that T..."
wait_until(1474, 0x74)
play_sound(0x0525, CHANNEL_5)
@@ -653,7 +653,7 @@ u8 func0402_outro[] = {
play_sound(0x00f8, CHANNEL_10)
wait_until(1626, 0x73)
speak(CHR_JOANNA, 0x0a2b, 0x7460, CHANNEL_10, COLOR_08_RED) // "It's a U.S. government deep sea research vessel, o..."
speak(CHR_BOND, 0x0a2b, 0x7460, CHANNEL_10, COLOR_08_RED) // "It's a U.S. government deep sea research vessel, o..."
wait_until(1807, 0x79)
play_sound(0x0595, CHANNEL_7)
@@ -683,16 +683,16 @@ u8 func0402_outro[] = {
play_sound(0x8188, CHANNEL_7)
wait_until(2450, 0x7b)
speak(CHR_JOANNA, 0x0a2c, 0x7461, CHANNEL_10, COLOR_09_BLUE) // "Trent has a lot to answer for, but I don't think w..."
speak(CHR_BOND, 0x0a2c, 0x7461, CHANNEL_10, COLOR_09_BLUE) // "Trent has a lot to answer for, but I don't think w..."
wait_until(3150, 0x83)
speak(CHR_JOANNA, 0x0a2d, 0x7462, CHANNEL_10, COLOR_03_RED) // "You have failed, Easton. You are a flawed device, ..."
speak(CHR_BOND, 0x0a2d, 0x7462, CHANNEL_10, COLOR_03_RED) // "You have failed, Easton. You are a flawed device, ..."
wait_until(3380, 0x88)
play_sound(0x818a, CHANNEL_7)
wait_until(3580, 0x87)
speak(CHR_JOANNA, 0x0a2e, 0x7463, CHANNEL_10, COLOR_05_GREEN) // "Just try it, you Scandinavian freak!"
speak(CHR_BOND, 0x0a2e, 0x7463, CHANNEL_10, COLOR_05_GREEN) // "Just try it, you Scandinavian freak!"
wait_until(3747, 0x84)
play_sound(0x8189, CHANNEL_5)
@@ -711,7 +711,7 @@ u8 func0402_outro[] = {
play_sound(0x052a, CHANNEL_10)
wait_until(4200, 0x78)
speak(CHR_JOANNA, 0x0a2f, 0x7464, CHANNEL_10, COLOR_05_GREEN) // "Noooooooo!!!"
speak(CHR_BOND, 0x0a2f, 0x7464, CHANNEL_10, COLOR_05_GREEN) // "Noooooooo!!!"
wait_until(4240, 0x93)
play_sound(0x05c0, CHANNEL_10)
@@ -801,7 +801,7 @@ u8 func1004_msg_maybetheresabeacon[] = {
// Unreachable
label(0x31)
speak(CHR_JOANNA, 0x0a0b, 0x73cd, CHANNEL_6, COLOR_09_BLUE) // "Maybe there's a beacon in there."
speak(CHR_BOND, 0x0a0b, 0x73cd, CHANNEL_6, COLOR_09_BLUE) // "Maybe there's a beacon in there."
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
@@ -1054,7 +1054,7 @@ u8 func1008_escapepod[] = {
// Pod destroyed
mute_channel(CHANNEL_0)
message(CHR_JOANNA, 0x0a0f) // "Critical mission object has been destroyed."
message(CHR_BOND, 0x0a0f) // "Critical mission object has been destroyed."
set_stage_flag(STAGEFLAG_ESCAPEPOD_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -1085,7 +1085,7 @@ u8 func1009_check_shuttle_destroyed[] = {
beginloop(0x06)
if_object_in_good_condition(OBJ_SKEDAR_SHUTTLE, /*goto*/ 0x31)
message(CHR_JOANNA, 0x0a15) // "Jamming device has been shut down."
message(CHR_BOND, 0x0a15) // "Jamming device has been shut down."
set_stage_flag(STAGEFLAG_SKEDAR_SHUTTLE_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
label(0x31)
@@ -1102,7 +1102,7 @@ u8 func100a_check_president_dead[] = {
endloop(0x06)
label(0x31)
message(CHR_JOANNA, 0x0a16) // "President has been killed."
message(CHR_BOND, 0x0a16) // "President has been killed."
set_stage_flag(STAGEFLAG_PRESIDENT_DEAD)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -1116,7 +1116,7 @@ u8 func100b_check_clone_dead[] = {
endloop(0x06)
label(0x31)
message(CHR_JOANNA, 0x0a17) // "Presidential clone has been eliminated."
message(CHR_BOND, 0x0a17) // "Presidential clone has been eliminated."
set_stage_flag(STAGEFLAG_CLONE_DEAD)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -1149,8 +1149,8 @@ u8 func0404_elvis[] = {
start_path
label(0x31)
dprint 'G','O',' ','T','O',' ','P','A','D','\n',0,
set_target_chr(CHR_JOANNA)
set_follow_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
set_follow_chr(CHR_BOND)
if_stage_flag_eq(STAGEFLAG_ELVIS_GAVE_PROXYMINE, TRUE, /*goto*/ 0x31)
if_objective_complete(0, /*goto*/ 0x31)
if_objective_complete(1, /*goto*/ 0x31)
@@ -1158,8 +1158,8 @@ u8 func0404_elvis[] = {
if_objective_complete(3, /*goto*/ 0x31)
if_objective_complete(4, /*goto*/ 0x31)
if_chr_sees_player(/*goto*/ 0xa5)
set_target_chr(CHR_VELVET)
set_follow_chr(CHR_VELVET)
set_target_chr(CHR_COOP)
set_follow_chr(CHR_COOP)
if_chr_sees_player(/*goto*/ 0xa5)
label(0x31)
if_enemy_distance_lt_and_los(2540, /*goto*/ 0x0a)
@@ -1200,11 +1200,11 @@ u8 func0404_elvis[] = {
dprint 'D','E','T','E','C','T','E','D','\n',0,
set_return_function(CHR_SELF, FUNC_INIT_ELVIS)
set_onshot_function(FUNC_INIT_ELVIS)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
// Sees player
label(0xa5)
set_target_chr(FOLLOW_CHR)
set_target_chr(CHR_PRESET)
try_run_to_target_chr(/*goto*/ 0x12)
beginloop(0x12)
@@ -1224,8 +1224,8 @@ u8 func0404_elvis[] = {
// Close to player
label(0x13)
do_special_animation(-1)
speak(TARGET_CHR, 0x0a1f, 0x12e2, CHANNEL_6, COLOR_04_ORANGE) // "Take this; you should find it useful!"
give_object_to_chr(OBJ_PROXYMINE, TARGET_CHR)
speak(CHR_TARGET, 0x0a1f, 0x12e2, CHANNEL_6, COLOR_04_ORANGE) // "Take this; you should find it useful!"
give_object_to_chr(OBJ_PROXYMINE, CHR_TARGET)
beginloop(0x14)
if_sound_finished(CHANNEL_6, /*goto*/ 0x31)
@@ -1315,7 +1315,7 @@ u8 func0418_robot[] = {
label(0x08)
if_self_flag_bankx_eq(CHRFLAG0_00002000, TRUE, BANK_0, /*goto*/ 0x0a)
say_quip(CHR_JOANNA, 0x1f, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_BOND, 0x1f, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
set_self_flag_bankx(CHRFLAG0_00002000, BANK_0)
beginloop(0x0a)
@@ -1638,7 +1638,7 @@ u8 func041d_president_running[] = {
rebuild_teams
rebuild_squadrons
if_stage_flag_eq(STAGEFLAG_PRESIDENT_RESCUED, TRUE, /*goto*/ 0x31)
message(TARGET_CHR, 0x0a19) // "President has been rescued."
message(CHR_TARGET, 0x0a19) // "President has been rescued."
set_stage_flag(STAGEFLAG_PRESIDENT_RESCUED)
label(0x31)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -1748,7 +1748,7 @@ u8 func041f_trent_shooting[] = {
label(0xa8)
try_aim_and_shoot_thing1(0x0220, 0x0000, /*goto*/ 0xa7)
label(0xa7)
say_quip(CHR_JOANNA, 0x00, 0x19, 0x02, 0x01, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x00, 0x19, 0x02, 0x01, BANK_0, 0x00, 0x00)
try_aim_and_shoot_thing2(0x0200, 0x0000, /*goto*/ 0x0a)
goto_next(0x31)
@@ -1761,7 +1761,7 @@ u8 func041f_trent_shooting[] = {
goto_next(0x0b)
// Unreachable
if_chr_dying(TARGET_CHR, /*goto*/ 0x0b)
if_chr_dying(CHR_TARGET, /*goto*/ 0x0b)
goto_first(0x04)
// Shoot failed
@@ -1830,15 +1830,15 @@ u8 func100f_check_end_level[] = {
endloop(0x0b)
label(0x31)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x31)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x31)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x31)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x31)
if_chr_dying(CHR_BOND, /*goto*/ 0x31)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x31)
goto_next(0x08)
label(0x31)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x31)
if_chr_dying(CHR_VELVET, /*goto*/ 0x31)
if_chr_unloaded(CHR_VELVET, /*goto*/ 0x31)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x31)
if_chr_dying(CHR_COOP, /*goto*/ 0x31)
if_chr_unloaded(CHR_COOP, /*goto*/ 0x31)
// Jo or Velvet alive
label(0x08)
@@ -1847,16 +1847,16 @@ u8 func100f_check_end_level[] = {
if_chr_unloaded(CHR_PRESIDENT, /*goto*/ 0x32)
set_function(CHR_PRESIDENT, GFUNC_STOP_AND_IDLE)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x31)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x31)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x31)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x31)
if_chr_dying(CHR_BOND, /*goto*/ 0x31)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x31)
goto_next(0x08)
// Both players dead
label(0x31)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x31)
if_chr_dying(CHR_VELVET, /*goto*/ 0x31)
if_chr_unloaded(CHR_VELVET, /*goto*/ 0x31)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x31)
if_chr_dying(CHR_COOP, /*goto*/ 0x31)
if_chr_unloaded(CHR_COOP, /*goto*/ 0x31)
goto_next(0x08)
label(0x31)
@@ -1865,7 +1865,7 @@ u8 func100f_check_end_level[] = {
// Mission complete
label(0x08)
set_invincible(CHR_JOANNA)
set_invincible(CHR_BOND)
set_function(CHR_SELF, FUNC_OUTRO)
// President dead
@@ -1908,7 +1908,7 @@ u8 func1010_set_cave_lights[] = {
u8 func1012_give_medicalscanner[] = {
yield
if_difficulty_gt(DIFF_A, /*goto*/ 0x31)
give_object_to_chr(OBJ_MEDICALSCANNER, CHR_JOANNA)
give_object_to_chr(OBJ_MEDICALSCANNER, CHR_BOND)
label(0x31)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
+166 -166
View File
@@ -763,7 +763,7 @@ u8 func1000_rebuild_groups[] = {
u8 func1401_setup_counterop[] = {
yield
set_chr_team(CHR_COUNTEROP, TEAM_04)
set_chr_team(CHR_ANTI, TEAM_04)
set_function(CHR_SELF, GFUNC_REBUILD_GROUPS)
endfunction
};
@@ -778,16 +778,16 @@ u8 unregistered_function1[] = {
* @unused
*/
u8 func0401_unused_cutscene[] = {
chr_draw_weapon_in_cutscene(CHR_JOANNA, WEAPON_FALCON2)
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
chr_draw_weapon_in_cutscene(CHR_BOND, WEAPON_FALCON2)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_music_track(MUSIC_AIRBASE_OUTRO_LONG)
camera_movement(0x016b)
cmd0175(60)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x0170, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_hud_visible(CHR_JOANNA, TRUE)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x0170, -1, -1, 0x0600, CHR_BOND, 4)
set_chr_hud_visible(CHR_BOND, TRUE)
set_chr_flag_bank3(0x00, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(0x00, CHRFLAG3_HIDDEN)
set_chr_flag_bank2(0x00, CHRFLAG2_00020000)
@@ -806,9 +806,9 @@ u8 func0401_unused_cutscene[] = {
animation(0x016f, -1, -1, 0x0600, CHR_STEWARDESS, 4)
fade_to_color(0x000000ff, 0)
fade_to_color(0x00000000, 90)
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
beginloop(0x04)
if_camera_animating(/*goto*/ 0x31)
@@ -821,8 +821,8 @@ u8 func0401_unused_cutscene[] = {
label(0x48)
label(0x02)
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_function(0x00, 0x0405)
set_function(0x01, 0x0405)
remove_chr(0x02)
@@ -838,7 +838,7 @@ u8 func0425_outro[] = {
fade_to_color(0x00000000, 110)
camera_movement(0x031a)
set_music_track(MUSIC_AIRBASE_OUTRO)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(0xf1, CHRFLAG3_HIDDEN)
set_function(CHR_P1P2, GFUNC_IDLE)
unset_chr_flag_bank3(CHR_P1P2, CHRFLAG3_HIDDEN)
@@ -904,8 +904,8 @@ u8 func0425_outro[] = {
label(0x48)
mute_channel(CHANNEL_10)
label(0x02)
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
hide_object(OBJ_PLANE)
end_level
set_function(CHR_SELF, GFUNC_IDLE)
@@ -1161,8 +1161,8 @@ u8 func0407_stewardess[] = {
if_self_flag_bankx_eq(CHRFLAG0_SAID_INJURY_QUIP, TRUE, BANK_0, /*goto*/ 0x02)
if_num_times_shot_lt(1, /*goto*/ 0x02)
if_timer_lt(20, /*goto*/ 0x02)
say_quip(CHR_JOANNA, 0x0d, 0x28, 0x03, 0x00, BANK_0, 0x00, 0x00)
say_quip(CHR_JOANNA, 0x0e, 0x28, 0x03, 0x01, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x0d, 0x28, 0x03, 0x00, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x0e, 0x28, 0x03, 0x01, BANK_0, 0x00, 0x00)
set_self_flag_bankx(CHRFLAG0_SAID_INJURY_QUIP, BANK_0)
label(0x02)
if_chr_stopped(/*goto*/ 0x4c)
@@ -1235,7 +1235,7 @@ u8 func0407_stewardess[] = {
endloop(0x05)
label(0x02)
speak(TARGET_CHR, 0x0e19, 0x1adc, CHANNEL_4, COLOR_07_RED) // "Look out - it's an intruder..."
speak(CHR_TARGET, 0x0e19, 0x1adc, CHANNEL_4, COLOR_07_RED) // "Look out - it's an intruder..."
set_squadron_alertness(100)
animation(ANIM_SURRENDER_002E, 0, 193, 0x1010, CHR_SELF, 2)
@@ -1277,7 +1277,7 @@ u8 func0407_stewardess[] = {
goto_first(0x62)
label(0x0f)
try_run_to_chr_with_hand_up(CHR_FRIEND, /*goto*/ 0x49)
try_run_to_chr_with_hand_up(CHR_SEEDIE, /*goto*/ 0x49)
dprint 'W','A','L','K','F','A','I','L','\n',0,
beginloop(0x49)
@@ -1298,7 +1298,7 @@ u8 func0407_stewardess[] = {
label(0x4a)
unset_self_flag_bankx(CHRFLAG0_CAN_EXAMINE_BODY, BANK_0)
speak(TARGET_CHR, 0x0e1b, 0x1add, CHANNEL_4, COLOR_07_RED) // "Is he OK?"
speak(CHR_TARGET, 0x0e1b, 0x1add, CHANNEL_4, COLOR_07_RED) // "Is he OK?"
stop_chr
restart_timer
@@ -1314,7 +1314,7 @@ u8 func0407_stewardess[] = {
endloop(0x4b)
label(0x02)
speak(TARGET_CHR, 0x0e1c, 0x1ade, CHANNEL_4, COLOR_07_RED) // "I'll go and get some help."
speak(CHR_TARGET, 0x0e1c, 0x1ade, CHANNEL_4, COLOR_07_RED) // "I'll go and get some help."
restart_timer
stop_chr
@@ -1349,12 +1349,12 @@ u8 func0406_become_unalerted[] = {
label(0x02)
if_chr_lost_track_of_target_maybe(/*goto*/ 0x02)
if_chr_dying(TARGET_CHR, /*goto*/ 0x02)
if_chr_death_animation_finished(TARGET_CHR, /*goto*/ 0x02)
if_chr_unloaded(TARGET_CHR, /*goto*/ 0x02)
if_chr_dying(CHR_TARGET, /*goto*/ 0x02)
if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x02)
if_chr_unloaded(CHR_TARGET, /*goto*/ 0x02)
set_onshot_function(FUNC_BECOME_UNALERTED)
set_return_function(CHR_SELF, FUNC_BECOME_UNALERTED)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
label(0x02)
set_function(CHR_SELF, GFUNC_UNALERTED)
@@ -1372,7 +1372,7 @@ u8 func1005_check_civilians_killed[] = {
endloop(0x00)
label(0x31)
message(CHR_JOANNA, 0x0e1a) // "Innocent civilians have been killed."
message(CHR_BOND, 0x0e1a) // "Innocent civilians have been killed."
set_stage_flag(STAGEFLAG_CIVILIANS_KILLED)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -1541,7 +1541,7 @@ u8 func0408_secretary[] = {
mute_channel(CHANNEL_4)
yield
label(0x02)
speak(TARGET_CHR, 0x0e20, 0x8162, CHANNEL_4, COLOR_06_WHITE) // "Oh, my God!"
speak(CHR_TARGET, 0x0e20, 0x8162, CHANNEL_4, COLOR_06_WHITE) // "Oh, my God!"
label(0x67)
set_squadron_alertness(100)
@@ -1579,7 +1579,7 @@ u8 func0408_secretary[] = {
// FIRST TALK
//
label(0x32)
speak(TARGET_CHR, 0x0e1d, 0x8161, CHANNEL_4, COLOR_06_WHITE) // "Good afternoon."
speak(CHR_TARGET, 0x0e1d, 0x8161, CHANNEL_4, COLOR_06_WHITE) // "Good afternoon."
animation(ANIM_TALKING_0231, 0, 193, 0x1810, CHR_SELF, 2)
restart_timer
set_morale(2)
@@ -1598,10 +1598,10 @@ u8 func0408_secretary[] = {
// SECOND TALK/WEAPON CHECK
//
label(0x02)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_NONE, /*goto*/ 0x0c)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_UNARMED, /*goto*/ 0x0c)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_HORIZONSCANNER, /*goto*/ 0x0c)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_SUITCASE, /*goto*/ 0x0c)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_NONE, /*goto*/ 0x0c)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_UNARMED, /*goto*/ 0x0c)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_HORIZONSCANNER, /*goto*/ 0x0c)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_SUITCASE, /*goto*/ 0x0c)
if_morale_lt(3, /*goto*/ 0x32)
goto_next(0x02)
@@ -1609,7 +1609,7 @@ u8 func0408_secretary[] = {
// WEAPON TALK 1
//
label(0x32)
speak(TARGET_CHR, 0x0e1f, 0x1273, CHANNEL_4, COLOR_06_WHITE) // "You'll have to check that weapon in here."
speak(CHR_TARGET, 0x0e1f, 0x1273, CHANNEL_4, COLOR_06_WHITE) // "You'll have to check that weapon in here."
restart_timer
animation(ANIM_TALKING_0232, 0, 193, 0x1810, CHR_SELF, 2)
set_morale(3)
@@ -1626,15 +1626,15 @@ u8 func0408_secretary[] = {
// 6.66 seconds since weapon talk
label(0x02)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_NONE, /*goto*/ 0x31)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_UNARMED, /*goto*/ 0x31)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_HORIZONSCANNER, /*goto*/ 0x31)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_SUITCASE, /*goto*/ 0x31)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_NONE, /*goto*/ 0x31)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_UNARMED, /*goto*/ 0x31)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_HORIZONSCANNER, /*goto*/ 0x31)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_SUITCASE, /*goto*/ 0x31)
if_morale_lt(4, /*goto*/ 0x32)
goto_next(0x02)
label(0x32)
speak(TARGET_CHR, 0x0e21, 0x1274, CHANNEL_4, COLOR_06_WHITE) // "Weapons are not allowed in the base."
speak(CHR_TARGET, 0x0e21, 0x1274, CHANNEL_4, COLOR_06_WHITE) // "Weapons are not allowed in the base."
restart_timer
animation(ANIM_TALKING_0233, 0, 193, 0x1810, CHR_SELF, 2)
set_morale(4)
@@ -1658,14 +1658,14 @@ u8 func0408_secretary[] = {
endloop(0x0d)
label(0x31)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_NONE, /*goto*/ 0x31)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_UNARMED, /*goto*/ 0x31)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_HORIZONSCANNER, /*goto*/ 0x31)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_SUITCASE, /*goto*/ 0x31)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_NONE, /*goto*/ 0x31)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_UNARMED, /*goto*/ 0x31)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_HORIZONSCANNER, /*goto*/ 0x31)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_SUITCASE, /*goto*/ 0x31)
// Calling security
label(0x77)
speak(TARGET_CHR, 0x0e22, 0x1276, CHANNEL_4, COLOR_06_WHITE) // "Right, I'm calling security."
speak(CHR_TARGET, 0x0e22, 0x1276, CHANNEL_4, COLOR_06_WHITE) // "Right, I'm calling security."
set_stage_flag(STAGEFLAG_RECEPTIONIST_CALLED_SECURITY)
activate_alarm
restart_timer
@@ -1685,7 +1685,7 @@ u8 func0408_secretary[] = {
// TALK 2
//
label(0x31)
speak(TARGET_CHR, 0x0e1e, 0x1272, CHANNEL_4, COLOR_06_WHITE) // "OK, you know the way from here."
speak(CHR_TARGET, 0x0e1e, 0x1272, CHANNEL_4, COLOR_06_WHITE) // "OK, you know the way from here."
animation(0x0232, 0, 193, 0x1810, CHR_SELF, 2)
unlock_door(0x18, 0x02)
@@ -1756,7 +1756,7 @@ u8 func1007_console_activation[] = {
control_sound_from_object(CHANNEL_1, OBJ_CONSOLE, TRUE)
message(CHR_P1P2, 0x0e24) // "Security systems have been shut down."
set_stage_flag(STAGEFLAG_SECURITY_SHUT_DOWN)
unset_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_DISGUISED)
unset_chr_flag_bank2(CHR_BOND, CHRFLAG2_DISGUISED)
restart_timer
beginloop(0x05)
@@ -1921,23 +1921,23 @@ u8 func1007_console_activation[] = {
u8 func1020_weapon_scanning_joanna[] = {
u8 func1020_weapon_scanning_bond[] = {
yield
weapon_detection_logic(CHR_JOANNA)
weapon_detection_logic(CHR_BOND)
endfunction
};
u8 func1021_weapon_scanning_velvet[] = {
u8 func1021_weapon_scanning_coop[] = {
yield
set_target_chr(CHR_VELVET)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x31)
set_target_chr(CHR_COOP)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x31)
goto_next(0x02)
label(0x31)
set_function(CHR_SELF, GFUNC_IDLE)
label(0x02)
weapon_detection_logic(CHR_VELVET)
weapon_detection_logic(CHR_COOP)
endfunction
};
@@ -1951,10 +1951,10 @@ u8 func1009_carousel_activation[] = {
// Shut down without depositing
label(0x31)
if_difficulty_lt(DIFF_SA, /*goto*/ 0x09)
message(CHR_JOANNA, 0x0e42) // "Hover trolley has been shut down."
message(CHR_BOND, 0x0e42) // "Hover trolley has been shut down."
set_stage_flag(STAGEFLAG_TROLLEY_SHUT_DOWN_WITHOUT_BRIEFCASE)
yield
message(CHR_JOANNA, 0x0e43) // "Equipment cannot be checked in."
message(CHR_BOND, 0x0e43) // "Equipment cannot be checked in."
label(0x09)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -1978,7 +1978,7 @@ u8 func1009_carousel_activation[] = {
endloop(0x05)
label(0x02)
clear_inventory(CHR_JOANNA)
clear_inventory(CHR_BOND)
unset_object_flag_bank0(OBJ_BAGGAGE_CARRIER, OBJECTFLAG0_DEACTIVATED)
open_door(0x23)
restart_timer
@@ -2028,7 +2028,7 @@ u8 func100b_suitcase_scanning[] = {
// Scanned
label(0x02)
message(CHR_JOANNA, 0x0e27) // "Suitcase has been scanned."
message(CHR_BOND, 0x0e27) // "Suitcase has been scanned."
set_stage_flag(STAGEFLAG_SUITCASE_SCANNED)
// Agent
@@ -2083,23 +2083,23 @@ u8 func0409_office1[] = {
if_stage_flag_eq(STAGEFLAG_DISGUISED, FALSE, /*goto*/ 0x07)
// Disguised
if_chr_weapon_equipped(TARGET_CHR, WEAPON_UNARMED, /*goto*/ 0x31)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_HORIZONSCANNER, /*goto*/ 0x31)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_SUITCASE, /*goto*/ 0x31)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_UNARMED, /*goto*/ 0x31)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_HORIZONSCANNER, /*goto*/ 0x31)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_SUITCASE, /*goto*/ 0x31)
goto_next(0x07)
// Disguised and unarmed-ish
label(0x31)
animation(ANIM_SITTING_0265, 0, -1, 0x1410, CHR_SELF, 2)
speak(TARGET_CHR, 0x0e29, 0x1ae6, CHANNEL_4, COLOR_08_RED) // "Are you new around here?"
speak(CHR_TARGET, 0x0e29, 0x1ae6, CHANNEL_4, COLOR_08_RED) // "Are you new around here?"
beginloop(0x09)
if_shot_near_chr(0x00, /*goto*/ LABEL_RUN_TO_FOYER)
if_stage_flag_eq(STAGEFLAG_OFFICE2_DEAD, TRUE, /*goto*/ LABEL_RUN_TO_FOYER)
if_chr_has_object(TARGET_CHR, OBJ_BRIEFCASE1, /*goto*/ 0x02)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_UNARMED, /*goto*/ 0x31)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_HORIZONSCANNER, /*goto*/ 0x31)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_SUITCASE, /*goto*/ 0x31)
if_chr_has_object(CHR_TARGET, OBJ_BRIEFCASE1, /*goto*/ 0x02)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_UNARMED, /*goto*/ 0x31)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_HORIZONSCANNER, /*goto*/ 0x31)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_SUITCASE, /*goto*/ 0x31)
goto_next(0x07)
label(0x31)
@@ -2128,7 +2128,7 @@ u8 func0409_office1[] = {
endloop(0x0b)
label(0x02)
speak(TARGET_CHR, 0x0e2a, 0x1ae7, CHANNEL_4, COLOR_08_RED) // "Hey - give me back my case."
speak(CHR_TARGET, 0x0e2a, 0x1ae7, CHANNEL_4, COLOR_08_RED) // "Hey - give me back my case."
restart_timer
set_squadron_alertness(100)
@@ -2152,7 +2152,7 @@ u8 func0409_office1[] = {
label(0x72)
label(0x02)
speak(TARGET_CHR, 0x0e28, 0x1ae5, CHANNEL_4, COLOR_08_RED) // "Hey, you - this is a restricted area."
speak(CHR_TARGET, 0x0e28, 0x1ae5, CHANNEL_4, COLOR_08_RED) // "Hey, you - this is a restricted area."
set_squadron_alertness(100)
restart_timer
animation(ANIM_WALK_BACKWARDS, -1, -1, 0x1010, CHR_SELF, 2)
@@ -2170,7 +2170,7 @@ u8 func0409_office1[] = {
endloop(0x08)
label(0x02)
speak(TARGET_CHR, 0x0e2c, 0x1ae8, CHANNEL_4, COLOR_08_RED) // "Upstairs...there's an intruder."
speak(CHR_TARGET, 0x0e2c, 0x1ae8, CHANNEL_4, COLOR_08_RED) // "Upstairs...there's an intruder."
set_squadron_alertness(100)
set_stage_flag(STAGEFLAG_DISGUISE_UNCOVERED)
activate_alarm
@@ -2249,7 +2249,7 @@ u8 func040a_office2[] = {
if_chr_dying(CHR_OFFICE1, /*goto*/ 0x02)
if_chr_death_animation_finished(CHR_OFFICE1, /*goto*/ 0x02)
if_chr_unloaded(CHR_OFFICE1, /*goto*/ 0x02)
speak(TARGET_CHR, 0x0e2b, 0x1ae9, CHANNEL_4, COLOR_09_BLUE) // "You get security - I'll deal with her..."
speak(CHR_TARGET, 0x0e2b, 0x1ae9, CHANNEL_4, COLOR_09_BLUE) // "You get security - I'll deal with her..."
set_squadron_alertness(100)
restart_timer
@@ -2297,15 +2297,15 @@ u8 func100c_check_end_level[] = {
label(0x04)
set_stage_flag(STAGEFLAG_BOARDED_PLANE)
unset_eeprom_flag(EEPROMFLAG_AF1_ENTRY)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x31)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x31)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x31)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x31)
if_chr_dying(CHR_BOND, /*goto*/ 0x31)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x31)
goto_next(0x02)
label(0x31)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x31)
if_chr_dying(CHR_VELVET, /*goto*/ 0x31)
if_chr_unloaded(CHR_VELVET, /*goto*/ 0x31)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x31)
if_chr_dying(CHR_COOP, /*goto*/ 0x31)
if_chr_unloaded(CHR_COOP, /*goto*/ 0x31)
goto_next(0x02)
// Both players dead
@@ -2315,22 +2315,22 @@ u8 func100c_check_end_level[] = {
// Mission complete
label(0x02)
set_invincible(CHR_JOANNA)
set_invincible(CHR_BOND)
set_function(CHR_SELF, 0x0425)
// Pad 0x00d5
label(0x05)
set_stage_flag(STAGEFLAG_BOARDED_PLANE)
set_eeprom_flag(EEPROMFLAG_AF1_ENTRY)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x31)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x31)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x31)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x31)
if_chr_dying(CHR_BOND, /*goto*/ 0x31)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x31)
goto_next(0x02)
label(0x31)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x31)
if_chr_dying(CHR_VELVET, /*goto*/ 0x31)
if_chr_unloaded(CHR_VELVET, /*goto*/ 0x31)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x31)
if_chr_dying(CHR_COOP, /*goto*/ 0x31)
if_chr_unloaded(CHR_COOP, /*goto*/ 0x31)
goto_next(0x02)
// Both players dead
@@ -2340,7 +2340,7 @@ u8 func100c_check_end_level[] = {
// Mission complete
label(0x02)
set_invincible(CHR_JOANNA)
set_invincible(CHR_BOND)
set_function(CHR_SELF, 0x0425)
endfunction
};
@@ -2392,7 +2392,7 @@ u8 func100e_check_alaskans_killed[] = {
endloop(0x00)
label(0x31)
message(CHR_JOANNA, 0x0e2f) // "Too many neutral casualties inflicted."
message(CHR_BOND, 0x0e2f) // "Too many neutral casualties inflicted."
set_stage_flag(STAGEFLAG_TOO_MANY_NEUTRALS_KILLED)
label(0x02)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -2438,20 +2438,20 @@ u8 func040f_nsa[] = {
set_target_chr(CHR_P1P2)
if_chr_distance_lt(250, /*goto*/ 0x64)
if_self_flag_bankx_eq(CHRFLAG0_00000080, TRUE, BANK_0, /*goto*/ 0x33)
if_chr_in_room(TARGET_CHR, 0x00, 0x006b, /*goto*/ 0x31)
if_chr_in_room(TARGET_CHR, 0x00, 0x006c, /*goto*/ 0x31)
if_chr_in_room(TARGET_CHR, 0x00, 0x006d, /*goto*/ 0x31)
if_chr_in_room(CHR_TARGET, 0x00, 0x006b, /*goto*/ 0x31)
if_chr_in_room(CHR_TARGET, 0x00, 0x006c, /*goto*/ 0x31)
if_chr_in_room(CHR_TARGET, 0x00, 0x006d, /*goto*/ 0x31)
goto_first(0x00)
label(0x33)
if_chr_in_room(TARGET_CHR, 0x00, 0x003c, /*goto*/ 0x31)
if_chr_in_room(TARGET_CHR, 0x00, 0x003d, /*goto*/ 0x31)
if_chr_in_room(TARGET_CHR, 0x00, 0x003e, /*goto*/ 0x31)
if_chr_y(TARGET_CHR, -257, OPERATOR_LESS_THAN, /*goto*/ 0x6d) // gone down an escalator
if_chr_in_room(CHR_TARGET, 0x00, 0x003c, /*goto*/ 0x31)
if_chr_in_room(CHR_TARGET, 0x00, 0x003d, /*goto*/ 0x31)
if_chr_in_room(CHR_TARGET, 0x00, 0x003e, /*goto*/ 0x31)
if_chr_y(CHR_TARGET, -257, OPERATOR_LESS_THAN, /*goto*/ 0x6d) // gone down an escalator
goto_next(0x76)
label(0x6d)
if_chr_in_room(TARGET_CHR, 0x00, 0x003f, /*goto*/ 0x31)
if_chr_in_room(CHR_TARGET, 0x00, 0x003f, /*goto*/ 0x31)
label(0x76)
goto_first(0x00)
@@ -2475,27 +2475,27 @@ u8 func040f_nsa[] = {
// Seen player
label(0x31)
dprint 'C','H','R','\n',0,
if_chr_y(TARGET_CHR, -330, OPERATOR_LESS_THAN, /*goto*/ 0x02)
if_chr_y(CHR_TARGET, -330, OPERATOR_LESS_THAN, /*goto*/ 0x02)
goto_first(0x00)
// Seen player down escalator
label(0x02)
if_self_flag_bankx_eq(CHRFLAG0_00000080, TRUE, BANK_0, /*goto*/ 0x33)
if_chr_in_room(TARGET_CHR, 0x00, 0x006b, /*goto*/ 0x04)
if_chr_in_room(TARGET_CHR, 0x00, 0x006c, /*goto*/ 0x04)
if_chr_in_room(TARGET_CHR, 0x00, 0x006d, /*goto*/ 0x04)
if_chr_in_room(CHR_TARGET, 0x00, 0x006b, /*goto*/ 0x04)
if_chr_in_room(CHR_TARGET, 0x00, 0x006c, /*goto*/ 0x04)
if_chr_in_room(CHR_TARGET, 0x00, 0x006d, /*goto*/ 0x04)
goto_first(0x00)
label(0x33)
if_chr_in_room(TARGET_CHR, 0x00, 0x003c, /*goto*/ 0x04)
if_chr_in_room(TARGET_CHR, 0x00, 0x003d, /*goto*/ 0x04)
if_chr_in_room(TARGET_CHR, 0x00, 0x003e, /*goto*/ 0x04)
if_chr_y(TARGET_CHR, -257, OPERATOR_LESS_THAN, /*goto*/ 0x6d)
if_chr_in_room(CHR_TARGET, 0x00, 0x003c, /*goto*/ 0x04)
if_chr_in_room(CHR_TARGET, 0x00, 0x003d, /*goto*/ 0x04)
if_chr_in_room(CHR_TARGET, 0x00, 0x003e, /*goto*/ 0x04)
if_chr_y(CHR_TARGET, -257, OPERATOR_LESS_THAN, /*goto*/ 0x6d)
goto_next(0x76)
// Seen player down escalator but not in security hall
label(0x6d)
if_chr_in_room(TARGET_CHR, 0x00, 0x003f, /*goto*/ 0x04) // escalator room
if_chr_in_room(CHR_TARGET, 0x00, 0x003f, /*goto*/ 0x04) // escalator room
label(0x76)
goto_first(0x00)
@@ -2513,7 +2513,7 @@ u8 func040f_nsa[] = {
label(0x02)
animation(ANIM_TALKING_0098, 0, 90, 0x0010, CHR_SELF, 2)
say_quip(CHR_JOANNA, 0x1c, 0xff, 0x02, 0xff, 0x81, 0x00, 0x00)
say_quip(CHR_BOND, 0x1c, 0xff, 0x02, 0xff, 0x81, 0x00, 0x00)
set_self_flag_bankx(CHRFLAG0_00002000, BANK_0)
beginloop(0x0a)
@@ -2533,7 +2533,7 @@ u8 func040f_nsa[] = {
label(0x31)
dprint 'R','U','N',' ','S','T','A','R','T','\n',0,
restart_timer
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
try_run_to_target_chr(/*goto*/ 0x05)
beginloop(0x05)
@@ -2542,21 +2542,21 @@ u8 func040f_nsa[] = {
dprint 'G','O',' ','F','O','R',' ','C','H','R','\n',0,
if_chr_stopped(/*goto*/ 0x32)
if_timer_gt(30, /*goto*/ 0x32)
if_chr_y(TARGET_CHR, -330, OPERATOR_LESS_THAN, /*goto*/ 0x02)
if_chr_y(CHR_TARGET, -330, OPERATOR_LESS_THAN, /*goto*/ 0x02)
goto_next(0x07)
label(0x02)
if_self_flag_bankx_eq(CHRFLAG0_00000080, TRUE, BANK_0, /*goto*/ 0x33)
if_chr_in_room(TARGET_CHR, 0x00, 0x006b, /*goto*/ 0x31)
if_chr_in_room(TARGET_CHR, 0x00, 0x006c, /*goto*/ 0x31)
if_chr_in_room(TARGET_CHR, 0x00, 0x006d, /*goto*/ 0x31)
if_chr_in_room(CHR_TARGET, 0x00, 0x006b, /*goto*/ 0x31)
if_chr_in_room(CHR_TARGET, 0x00, 0x006c, /*goto*/ 0x31)
if_chr_in_room(CHR_TARGET, 0x00, 0x006d, /*goto*/ 0x31)
goto_next(0x07)
label(0x33)
if_chr_in_room(TARGET_CHR, 0x00, 0x003c, /*goto*/ 0x31)
if_chr_in_room(TARGET_CHR, 0x00, 0x003d, /*goto*/ 0x31)
if_chr_in_room(TARGET_CHR, 0x00, 0x003e, /*goto*/ 0x31)
if_chr_in_room(TARGET_CHR, 0x00, 0x003f, /*goto*/ 0x31)
if_chr_in_room(CHR_TARGET, 0x00, 0x003c, /*goto*/ 0x31)
if_chr_in_room(CHR_TARGET, 0x00, 0x003d, /*goto*/ 0x31)
if_chr_in_room(CHR_TARGET, 0x00, 0x003e, /*goto*/ 0x31)
if_chr_in_room(CHR_TARGET, 0x00, 0x003f, /*goto*/ 0x31)
goto_next(0x07)
label(0x31)
@@ -2575,7 +2575,7 @@ u8 func040f_nsa[] = {
label(0x07)
animation(ANIM_TALKING_0098, 0, 90, 0x0010, CHR_SELF, 2)
say_quip(CHR_JOANNA, 0x1d, 0xff, 0x02, 0xff, 0x81, 0x00, 0x00)
say_quip(CHR_BOND, 0x1d, 0xff, 0x02, 0xff, 0x81, 0x00, 0x00)
label(0x08)
yield
if_chr_stopped(/*goto*/ 0x02)
@@ -2647,15 +2647,15 @@ u8 func0411_takeover_lackey[] = {
endloop(0x04)
label(0x02)
speak(TARGET_CHR, 0x0e41, 0x05bf, CHANNEL_6, COLOR_08_RED) // "We're taking over!!"
speak(CHR_TARGET, 0x0e41, 0x05bf, CHANNEL_6, COLOR_08_RED) // "We're taking over!!"
beginloop(0x09)
if_chr_stopped(/*goto*/ 0x02)
endloop(0x09)
label(0x02)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_DISGUISE_UNCOVERED)
set_chr_flag_bank2(CHR_VELVET, CHRFLAG2_DISGUISE_UNCOVERED)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_DISGUISE_UNCOVERED)
set_chr_flag_bank2(CHR_COOP, CHRFLAG2_DISGUISE_UNCOVERED)
set_function(CHR_SELF, GFUNC_ALERTED)
endfunction
};
@@ -2699,7 +2699,7 @@ u8 func0414_officeworker[] = {
label(0x02)
animation(ANIM_SITTING_0265, 0, 120, 0x1410, CHR_SELF, 2)
say_quip(CHR_JOANNA, 0x20, 0xff, 0x0a, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_BOND, 0x20, 0xff, 0x0a, 0xff, BANK_1, 0x00, 0x00)
restart_timer
beginloop(0x09)
@@ -2750,7 +2750,7 @@ u8 func0414_officeworker[] = {
label(0x02)
do_special_animation(7)
speak(TARGET_CHR, 0x0e36, 0x1b38, CHANNEL_4, COLOR_08_RED) // "Stop them - they're breaking into the safe..."
speak(CHR_TARGET, 0x0e36, 0x1b38, CHANNEL_4, COLOR_08_RED) // "Stop them - they're breaking into the safe..."
beginloop(0x05)
if_sound_finished(CHANNEL_4, /*goto*/ 0x79)
@@ -3084,15 +3084,15 @@ u8 func0427_init_posttakeover_guard[] = {
*/
u8 func0428_posttakeover_guard[] = {
beginloop(0x00)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
if_within_units_of_sight(30, /*goto*/ 0x31)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x02)
set_target_chr(CHR_VELVET)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x02)
set_target_chr(CHR_COOP)
if_within_units_of_sight(30, /*goto*/ 0x31)
label(0x02)
if_chr_death_animation_finished(CHR_COUNTEROP, /*goto*/ 0x02)
set_target_chr(CHR_COUNTEROP)
if_chr_death_animation_finished(CHR_ANTI, /*goto*/ 0x02)
set_target_chr(CHR_ANTI)
if_within_units_of_sight(30, /*goto*/ 0x31)
label(0x02)
@@ -3147,7 +3147,7 @@ u8 func042a_foyer_spawner[] = {
consider_coop_for_p1p2_chr(CHR_SELF)
set_target_chr(CHR_P1P2)
if_stage_flag_eq(STAGEFLAG_SECURITY_SHUT_DOWN, TRUE, /*goto*/ 0x02)
if_chr_y(TARGET_CHR, -4800, OPERATOR_LESS_THAN, /*goto*/ 0x09)
if_chr_y(CHR_TARGET, -4800, OPERATOR_LESS_THAN, /*goto*/ 0x09)
reloop(0x00)
// Security shut down
@@ -3395,7 +3395,7 @@ u8 func0419_ba8c[] = {
yield
if_saw_death(0x00, /*goto*/ 0x4f)
if_shot_near_chr(0x00, /*goto*/ 0x0f)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_UNARMED, /*goto*/ 0x31)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_UNARMED, /*goto*/ 0x31)
goto_next(0x02)
label(0x31)
if_self_flag_bankx_eq(CHRFLAG0_00002000, TRUE, BANK_0, /*goto*/ 0x31)
@@ -3428,7 +3428,7 @@ u8 func0419_ba8c[] = {
goto_first(0x0f)
label(0x02)
say_quip(CHR_JOANNA, 0x24, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00)
say_quip(CHR_BOND, 0x24, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00)
animation(0x002e, 0, 193, 0x1010, CHR_SELF, 2)
label(0x09)
yield
@@ -3442,15 +3442,15 @@ u8 func0419_ba8c[] = {
goto_first(0x04)
label(0x02)
try_run_to_chr(FOLLOW_CHR, /*goto*/ 0x05)
try_run_to_chr(CHR_PRESET, /*goto*/ 0x05)
label(0x05)
yield
if_detected_chr(FOLLOW_CHR, /*goto*/ 0x02)
if_detected_chr(CHR_PRESET, /*goto*/ 0x02)
goto_first(0x05)
label(0x02)
set_squadron_alertness(100)
say_quip(CHR_JOANNA, 0x25, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00)
say_quip(CHR_BOND, 0x25, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00)
label(0x0e)
animation(0x0229, -1, -1, 0x1014, CHR_SELF, 2)
label(0x0a)
@@ -3587,15 +3587,15 @@ u8 func101a_check_disguise_used[] = {
u8 func1003_intro[] = {
label(0x31)
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_music_track(MUSIC_AIRBASE_INTRO)
camera_movement(0x01e5)
cmd0175(60)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x01e6, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_hud_visible(CHR_JOANNA, TRUE)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x01e6, -1, -1, 0x0600, CHR_BOND, 4)
set_chr_hud_visible(CHR_BOND, TRUE)
set_chr_flag_bank3(CHR_TRENT, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(CHR_TRENT, CHRFLAG3_HIDDEN)
set_chr_flag_bank2(CHR_TRENT, CHRFLAG2_00020000)
@@ -3631,12 +3631,12 @@ u8 func1003_intro[] = {
restart_timer
fade_to_color(0x000000ff, 0x0000)
fade_to_color(0x00000000, 0x006e)
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
wait_until(30, 0x6d)
speak(CHR_JOANNA, 0x0e37, 0x7447, CHANNEL_7, COLOR_09_BLUE) // "Agent Dark in position. I can see the main entranc..."
speak(CHR_BOND, 0x0e37, 0x7447, CHANNEL_7, COLOR_09_BLUE) // "Agent Dark in position. I can see the main entranc..."
wait_until(312, 0x89)
play_sound(0x0594, CHANNEL_10)
@@ -3645,13 +3645,13 @@ u8 func1003_intro[] = {
play_sound(0x0595, CHANNEL_10)
wait_until(580, 0x76)
speak(CHR_JOANNA, 0x0e38, 0x7448, CHANNEL_10, COLOR_06_WHITE) // "Excellent, Joanna. That cable car is your way in....."
speak(CHR_BOND, 0x0e38, 0x7448, CHANNEL_10, COLOR_06_WHITE) // "Excellent, Joanna. That cable car is your way in....."
wait_until(968, 0x8b)
play_sound(0x0596, CHANNEL_10)
wait_until(1315, 0x77)
speak(CHR_JOANNA, 0x0e39, 0x77db, CHANNEL_10, COLOR_09_BLUE) // "That they're probably innocent of any involvement ..."
speak(CHR_BOND, 0x0e39, 0x77db, CHANNEL_10, COLOR_09_BLUE) // "That they're probably innocent of any involvement ..."
wait_until(1411, 0x8e)
play_sound(0x04af, CHANNEL_0)
@@ -3667,7 +3667,7 @@ u8 func1003_intro[] = {
play_sound(0x04ec, CHANNEL_10)
wait_until(1900, 0x78)
speak(CHR_JOANNA, 0x0e3a, 0x7449, CHANNEL_5, COLOR_06_WHITE) // "I don't know how far the conspiracy has spread thr..."
speak(CHR_BOND, 0x0e3a, 0x7449, CHANNEL_5, COLOR_06_WHITE) // "I don't know how far the conspiracy has spread thr..."
wait_until(1970, 0x8c)
play_sound(0x0171, CHANNEL_10)
@@ -3732,7 +3732,7 @@ u8 func1003_intro[] = {
play_sound(0x0168, CHANNEL_10)
wait_until(2700, 0x79)
speak(CHR_JOANNA, 0x0e3b, 0x744a, CHANNEL_7, COLOR_09_BLUE) // "Yes, and protect him from his abductors. Do you ha..."
speak(CHR_BOND, 0x0e3b, 0x744a, CHANNEL_7, COLOR_09_BLUE) // "Yes, and protect him from his abductors. Do you ha..."
wait_until(2704, 0xa3)
play_sound(0x0161, CHANNEL_10)
@@ -3783,7 +3783,7 @@ u8 func1003_intro[] = {
play_sound(0x0164, CHANNEL_10)
wait_until(3250, 0x7a)
speak(CHR_JOANNA, 0x0e3c, 0x744b, CHANNEL_5, COLOR_06_WHITE) // "Only vague suspicions, and I won't distract you wi..."
speak(CHR_BOND, 0x0e3c, 0x744b, CHANNEL_5, COLOR_06_WHITE) // "Only vague suspicions, and I won't distract you wi..."
wait_until(3387, 0xb3)
play_sound(0x0166, CHANNEL_10)
@@ -3821,8 +3821,8 @@ u8 func1003_intro[] = {
hide_object(0x22)
hide_object(0x2f)
label(0x02)
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_TRENT, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(0x48, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(0x49, CHRFLAG3_UNPLAYABLE)
@@ -3838,10 +3838,10 @@ u8 func1003_intro[] = {
set_chr_flag_bank3(0x49, CHRFLAG3_HIDDEN)
set_chr_flag_bank2(0x49, CHRFLAG2_00020000)
animation(0x01e9, -2, -1, 0x0600, 0x49, 2)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x01e6, -2, -1, 0x0600, CHR_JOANNA, 2)
set_chr_hud_visible(CHR_JOANNA, FALSE)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x01e6, -2, -1, 0x0600, CHR_BOND, 2)
set_chr_hud_visible(CHR_BOND, FALSE)
unset_object_flag_bank1(0x22, OBJECTFLAG1_04000000)
set_object_flag_bank2(0x22, OBJECTFLAG2_00000010)
object_do_animation(0x01ed, 0x22, 0x01ff, 0xfe)
@@ -3861,7 +3861,7 @@ u8 func101c_msg_nowsyourchance[] = {
endloop(0x00)
label(0x31)
speak(CHR_JOANNA, 0x0e32, 0x8182, CHANNEL_6, COLOR_09_BLUE) // "Now's your chance! Grab the stewardess's bag and g..."
speak(CHR_BOND, 0x0e32, 0x8182, CHANNEL_6, COLOR_09_BLUE) // "Now's your chance! Grab the stewardess's bag and g..."
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
@@ -3908,7 +3908,7 @@ u8 func101e_msg_casewillgetstopped[] = {
endloop(0x04)
label(0x31)
speak(CHR_JOANNA, 0x0e34, 0x8184, CHANNEL_6, COLOR_09_BLUE) // "The case will get stopped unless you do something."
speak(CHR_BOND, 0x0e34, 0x8184, CHANNEL_6, COLOR_09_BLUE) // "The case will get stopped unless you do something."
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
@@ -4032,14 +4032,14 @@ u8 func0417_remove_or_unalert[] = {
label(0x00)
yield
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
if_within_units_of_sight(30, /*goto*/ 0x02)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x31)
set_target_chr(CHR_VELVET)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x31)
set_target_chr(CHR_COOP)
if_within_units_of_sight(30, /*goto*/ 0x02)
label(0x31)
if_chr_death_animation_finished(CHR_COUNTEROP, /*goto*/ 0x04)
set_target_chr(CHR_COUNTEROP)
if_chr_death_animation_finished(CHR_ANTI, /*goto*/ 0x04)
set_target_chr(CHR_ANTI)
if_within_units_of_sight(30, /*goto*/ 0x02)
label(0x04)
yield
@@ -4057,14 +4057,14 @@ u8 func0418_remove_or_cower[] = {
set_self_flag_bank3(CHRFLAG3_00040000)
label(0x00)
yield
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
if_within_units_of_sight(30, /*goto*/ 0x02)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x31)
set_target_chr(CHR_VELVET)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x31)
set_target_chr(CHR_COOP)
if_within_units_of_sight(30, /*goto*/ 0x02)
label(0x31)
if_chr_death_animation_finished(CHR_COUNTEROP, /*goto*/ 0x04)
set_target_chr(CHR_COUNTEROP)
if_chr_death_animation_finished(CHR_ANTI, /*goto*/ 0x04)
set_target_chr(CHR_ANTI)
if_within_units_of_sight(30, /*goto*/ 0x02)
label(0x04)
yield
@@ -4196,7 +4196,7 @@ u8 func102b_check_secretary_dead[] = {
set_function(CHR_SELF, GFUNC_IDLE)
label(0x31)
message(CHR_JOANNA, 0x0e3e) // "Critical mission personnel disabled."
message(CHR_BOND, 0x0e3e) // "Critical mission personnel disabled."
set_stage_flag(STAGEFLAG_SECRETARY_DEAD)
label(0x09)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -4227,7 +4227,7 @@ u8 func102d_check_console_destroyed[] = {
mute_channel(CHANNEL_1)
if_stage_flag_eq(STAGEFLAG_SECURITY_SHUT_DOWN, TRUE, /*goto*/ 0x31)
set_stage_flag(STAGEFLAG_CONSOLE_DESTROYED)
message(CHR_JOANNA, 0x0e3f) // "Critical mission object destroyed."
message(CHR_BOND, 0x0e3f) // "Critical mission object destroyed."
label(0x31)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -4240,7 +4240,7 @@ u8 func102e_check_base_entered[] = {
endloop(0x00)
label(0x31)
message(CHR_JOANNA, 0x0e40) // "Entrance to base secured."
message(CHR_BOND, 0x0e40) // "Entrance to base secured."
set_stage_flag(STAGEFLAG_ENTERED_BASE)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -4252,9 +4252,9 @@ u8 func102f_undisguise_on_alarm[] = {
endloop(0x00)
label(0x31)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_DISGUISE_UNCOVERED)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x31)
set_chr_flag_bank2(CHR_VELVET, CHRFLAG2_DISGUISE_UNCOVERED)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_DISGUISE_UNCOVERED)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x31)
set_chr_flag_bank2(CHR_COOP, CHRFLAG2_DISGUISE_UNCOVERED)
label(0x31)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -4381,8 +4381,8 @@ struct ailists functions[] = {
{ func101d_msg_usethatcase, 0x101d },
{ func101e_msg_casewillgetstopped, 0x101e },
{ func101f_msg_smallerthanithought, 0x101f },
{ func1020_weapon_scanning_joanna, 0x1020 },
{ func1021_weapon_scanning_velvet, 0x1021 },
{ func1020_weapon_scanning_bond, 0x1020 },
{ func1021_weapon_scanning_coop, 0x1021 },
{ func1022_check_office1_dead, 0x1022 },
{ func1023_check_office2_dead, 0x1023 },
{ func1024_double_dy357, 0x1024 },
+76 -76
View File
@@ -655,7 +655,7 @@ u8 func1001_objectives_failed_msg[] = {
u8 func1400_setup_counterop[] = {
yield
set_chr_team(CHR_COUNTEROP, TEAM_ENEMY)
set_chr_team(CHR_ANTI, TEAM_ENEMY)
set_function(CHR_SELF, GFUNC_REBUILD_GROUPS)
endfunction
};
@@ -675,13 +675,13 @@ u8 func0408_guard_unalerted[] = {
u8 func1002_intro[] = {
set_music_track(MUSIC_PELAGIC_INTRO)
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
camera_movement(0x02ce)
cmd0175(60)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x02cf, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x02cf, -1, -1, 0x0600, CHR_BOND, 4)
set_chr_flag_bank3(CHR_ELVIS, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(CHR_ELVIS, CHRFLAG3_HIDDEN)
set_chr_flag_bank2(CHR_ELVIS, CHRFLAG2_00020000)
@@ -691,9 +691,9 @@ u8 func1002_intro[] = {
set_chr_flag_bank2(CHR_INTRO_GUARD, CHRFLAG2_00020000)
animation(0x02d1, -1, -1, 0x0600, CHR_INTRO_GUARD, 4)
restart_timer
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_JOANNA, WEAPON_FALCON2_SILENCER, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_FALCON2_SILENCER, WEAPON_NONE)
#define wait_until(time, loopid) \
beginloop(loopid) \
@@ -799,11 +799,11 @@ u8 func1002_intro[] = {
label(0x39)
mute_channel(CHANNEL_10)
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x02cf, -2, -1, 0x0600, CHR_JOANNA, 2)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x02cf, -2, -1, 0x0600, CHR_BOND, 2)
unset_chr_flag_bank3(CHR_ELVIS, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_ELVIS, CHRFLAG2_00020000)
animation(0x02d0, -2, -1, 0x0600, CHR_ELVIS, 2)
@@ -828,7 +828,7 @@ u8 func1002_intro[] = {
u8 func0c01_outro[] = {
camera_movement(0x02e2)
set_music_track(MUSIC_PELAGIC_OUTRO)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(0xf1, CHRFLAG3_HIDDEN)
set_function(CHR_P1P2, GFUNC_IDLE)
set_chr_flag_bank3(CHR_P1P2, CHRFLAG3_UNPLAYABLE)
@@ -879,7 +879,7 @@ u8 func0c01_outro[] = {
play_sound_from_object2(0x0a, OBJ_OUTRO_SUBMARINE, 0x042d, 0x00, 0x00)
wait_until(180, 0x3b)
speak(CHR_JOANNA, 0x1627, 0x7465, CHANNEL_10, COLOR_06_WHITE) // "Right. The diving operation has been disrupted on ..."
speak(CHR_BOND, 0x1627, 0x7465, CHANNEL_10, COLOR_06_WHITE) // "Right. The diving operation has been disrupted on ..."
wait_until(200, 0x48)
play_sound(0x0173, CHANNEL_10)
@@ -905,7 +905,7 @@ u8 func0c01_outro[] = {
play_sound(0x0171, CHANNEL_10)
wait_until(570, 0x4f)
speak(CHR_JOANNA, 0x1628, 0x7466, CHANNEL_10, COLOR_09_BLUE) // "I hope the government don't want to use this ship ..."
speak(CHR_BOND, 0x1628, 0x7466, CHANNEL_10, COLOR_09_BLUE) // "I hope the government don't want to use this ship ..."
wait_until(582, 0x50)
play_sound(0x0171, CHANNEL_10)
@@ -935,7 +935,7 @@ u8 func0c01_outro[] = {
play_sound(0x80a2, CHANNEL_10)
wait_until(950, 0x58)
speak(CHR_JOANNA, 0x1629, 0x7467, CHANNEL_10, COLOR_06_WHITE) // "Do you think we were a little heavy-handed?"
speak(CHR_BOND, 0x1629, 0x7467, CHANNEL_10, COLOR_06_WHITE) // "Do you think we were a little heavy-handed?"
wait_until(1088, 0x59)
play_sound(0x80a3, CHANNEL_10)
@@ -944,7 +944,7 @@ u8 func0c01_outro[] = {
play_sound(0x0176, CHANNEL_10)
wait_until(1190, 0x5b)
speak(CHR_JOANNA, 0x162a, 0x7468, CHANNEL_10, COLOR_09_BLUE) // "Naaahhhh."
speak(CHR_BOND, 0x162a, 0x7468, CHANNEL_10, COLOR_09_BLUE) // "Naaahhhh."
wait_until(1228, 0x5c)
play_sound(0x0174, CHANNEL_10)
@@ -1059,7 +1059,7 @@ u8 unregistered_function2[] = {
endloop(0x00)
label(0x04)
message(CHR_JOANNA, 0x1610) // "Critical mission object has been destroyed."
message(CHR_BOND, 0x1610) // "Critical mission object has been destroyed."
set_stage_flag(STAGEFLAG_00000400)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -1097,7 +1097,7 @@ u8 func100a_reactor_switch[] = {
beginloop(0x00)
consider_coop_for_p1p2_chr(CHR_SELF)
if_object_in_good_condition(OBJ_REACTOR_SWITCH, /*goto*/ 0x07)
message(CHR_JOANNA, 0x1624) // "Critical mission object has been destroyed."
message(CHR_BOND, 0x1624) // "Critical mission object has been destroyed."
set_stage_flag(STAGEFLAG_REACTOR_SWITCH_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -1200,15 +1200,15 @@ u8 func100c_check_end_level[] = {
endloop(0x0b)
label(0x07)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x07)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x07)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x07)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x07)
if_chr_dying(CHR_BOND, /*goto*/ 0x07)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x07)
goto_next(0x08)
label(0x07)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x07)
if_chr_dying(CHR_VELVET, /*goto*/ 0x07)
if_chr_unloaded(CHR_VELVET, /*goto*/ 0x07)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x07)
if_chr_dying(CHR_COOP, /*goto*/ 0x07)
if_chr_unloaded(CHR_COOP, /*goto*/ 0x07)
// Jo or Velvet alive
label(0x08)
@@ -1216,16 +1216,16 @@ u8 func100c_check_end_level[] = {
if_chr_dying(CHR_ELVIS, /*goto*/ 0x08)
if_chr_unloaded(CHR_ELVIS, /*goto*/ 0x08)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x07)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x07)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x07)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x07)
if_chr_dying(CHR_BOND, /*goto*/ 0x07)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x07)
goto_next(0x04)
// Both players dead - this check is redundant
label(0x07)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x07)
if_chr_dying(CHR_VELVET, /*goto*/ 0x07)
if_chr_unloaded(CHR_VELVET, /*goto*/ 0x07)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x07)
if_chr_dying(CHR_COOP, /*goto*/ 0x07)
if_chr_unloaded(CHR_COOP, /*goto*/ 0x07)
goto_next(0x04)
// Both players dead
@@ -1235,7 +1235,7 @@ u8 func100c_check_end_level[] = {
// Mission complete
label(0x04)
set_invincible(CHR_JOANNA)
set_invincible(CHR_BOND)
set_function(CHR_SELF, FUNC_OUTRO)
// Elvis dead
@@ -1257,7 +1257,7 @@ u8 func100e_check_labtech_dead[] = {
endloop(0x00)
label(0x07)
message(CHR_JOANNA, 0x1614) // "Critical mission personnel killed."
message(CHR_BOND, 0x1614) // "Critical mission personnel killed."
set_stage_flag(STAGEFLAG_LABTECH_DEAD)
label(0x0b)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -1266,22 +1266,22 @@ u8 func100e_check_labtech_dead[] = {
u8 func100f_check_researchdata_collected[] = {
beginloop(0x00)
if_chr_has_object(CHR_JOANNA, OBJ_RESEARCHDATA1, /*goto*/ 0x07)
if_chr_has_object(CHR_VELVET, OBJ_RESEARCHDATA1, /*goto*/ 0x07)
if_chr_has_object(CHR_BOND, OBJ_RESEARCHDATA1, /*goto*/ 0x07)
if_chr_has_object(CHR_COOP, OBJ_RESEARCHDATA1, /*goto*/ 0x07)
reloop(0x00)
label(0x07)
if_chr_has_object(CHR_JOANNA, OBJ_RESEARCHDATA2, /*goto*/ 0x07)
if_chr_has_object(CHR_VELVET, OBJ_RESEARCHDATA2, /*goto*/ 0x07)
if_chr_has_object(CHR_BOND, OBJ_RESEARCHDATA2, /*goto*/ 0x07)
if_chr_has_object(CHR_COOP, OBJ_RESEARCHDATA2, /*goto*/ 0x07)
reloop(0x00)
label(0x07)
if_chr_has_object(CHR_JOANNA, OBJ_RESEARCHDATA3, /*goto*/ 0x07)
if_chr_has_object(CHR_VELVET, OBJ_RESEARCHDATA3, /*goto*/ 0x07)
if_chr_has_object(CHR_BOND, OBJ_RESEARCHDATA3, /*goto*/ 0x07)
if_chr_has_object(CHR_COOP, OBJ_RESEARCHDATA3, /*goto*/ 0x07)
endloop(0x00)
label(0x07)
message(CHR_JOANNA, 0x1615) // "Research data has been secured."
message(CHR_BOND, 0x1615) // "Research data has been secured."
set_stage_flag(STAGEFLAG_COLLECTED_RESEARCH_DATA)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -1579,7 +1579,7 @@ u8 func0411_labtech_alerted[] = {
if_alertness(99, OPERATOR_GREATER_THAN, /*goto*/ 0x04)
set_alertness(100)
dprint 'T','A','L','K',' ','1','\n',0,
say_quip(CHR_JOANNA, 0x2a, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_BOND, 0x2a, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
animation(ANIM_SURRENDER_002E, 0, -1, 0x1010, CHR_SELF, 2)
beginloop(0x3e)
@@ -1592,17 +1592,17 @@ u8 func0411_labtech_alerted[] = {
goto_next(0x42)
label(0x3f)
try_run_to_chr(FOLLOW_CHR, /*goto*/ 0x40)
try_run_to_chr(CHR_PRESET, /*goto*/ 0x40)
goto_next(0x42)
beginloop(0x40)
if_detected_chr(FOLLOW_CHR, /*goto*/ 0x41)
if_detected_chr(CHR_PRESET, /*goto*/ 0x41)
if_chr_stopped(/*goto*/ 0x41)
endloop(0x40)
label(0x41)
set_squadron_alertness(100)
say_quip(CHR_JOANNA, 0x10, 0xff, 0x02, 0xff, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x10, 0xff, 0x02, 0xff, BANK_0, 0x00, 0x00)
label(0x42)
go_to_target_pad(SPEED_RUN)
@@ -1893,7 +1893,7 @@ u8 func0401_pilot[] = {
// Seen player
label(0x07)
say_quip(CHR_JOANNA, 0x08, 0xfe, 0x0a, 0xff, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x08, 0xfe, 0x0a, 0xff, BANK_0, 0x00, 0x00)
label(0x04)
set_squadron_alertness(100)
@@ -1934,16 +1934,16 @@ u8 func0401_pilot[] = {
// GPS disabled
label(0x04)
say_quip(CHR_JOANNA, 0x08, 0xfe, 0x0a, 0xff, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x08, 0xfe, 0x0a, 0xff, BANK_0, 0x00, 0x00)
goto_first(0x0b)
label(0x07)
speak(TARGET_CHR, 0x162b, 0x7325, CHANNEL_7, COLOR_09_BLUE) // "Pull the plug on that now."
speak(CHR_TARGET, 0x162b, 0x7325, CHANNEL_7, COLOR_09_BLUE) // "Pull the plug on that now."
set_stage_flag(STAGEFLAG_SAID_PULLTHEPLUG)
goto_next(0x0c)
label(0x08)
speak(TARGET_CHR, 0x162c, 0x7326, CHANNEL_7, COLOR_09_BLUE) // "Switch this thing off."
speak(CHR_TARGET, 0x162c, 0x7326, CHANNEL_7, COLOR_09_BLUE) // "Switch this thing off."
set_stage_flag(STAGEFLAG_SAID_SWITCHTHINGOFF)
goto_next(0x0c)
@@ -1954,11 +1954,11 @@ u8 func0401_pilot[] = {
label(0x07)
set_self_flag_bankx(CHRFLAG0_08000000, BANK_0)
if_stage_flag_eq(STAGEFLAG_SAID_SWITCHTHINGOFF, FALSE, /*goto*/ 0x07)
speak(TARGET_CHR, 0x162d, 0x128e, CHANNEL_6, COLOR_04_ORANGE) // "I'll shut it down."
speak(CHR_TARGET, 0x162d, 0x128e, CHANNEL_6, COLOR_04_ORANGE) // "I'll shut it down."
goto_next(0x08)
label(0x07)
speak(TARGET_CHR, 0x162e, 0x1280, CHANNEL_6, COLOR_04_ORANGE) // "Please don't hurt me."
speak(CHR_TARGET, 0x162e, 0x1280, CHANNEL_6, COLOR_04_ORANGE) // "Please don't hurt me."
label(0x08)
do_special_animation(-1)
@@ -1999,7 +1999,7 @@ u8 func0401_pilot[] = {
label(0x07)
if_stage_flag_eq(STAGEFLAG_AUTOPILOT_DISABLED, TRUE, /*goto*/ 0x07)
message(TARGET_CHR, 0x160e) // "Autopilot system has been deactivated."
message(CHR_TARGET, 0x160e) // "Autopilot system has been deactivated."
set_stage_flag(STAGEFLAG_TRIGGER_ANGRY_PILOT)
yield
yield
@@ -2016,7 +2016,7 @@ u8 func0401_pilot[] = {
goto_first(0x0b)
label(0x07)
message(TARGET_CHR, 0x160f) // "GPS system has been deactivated."
message(CHR_TARGET, 0x160f) // "GPS system has been deactivated."
set_stage_flag(STAGEFLAG_GPS_DISABLED)
surrender
goto_first(0x0b)
@@ -2055,7 +2055,7 @@ u8 func1011_check_pilots_dead[] = {
set_function(CHR_SELF, GFUNC_IDLE)
label(0x07)
message(CHR_JOANNA, 0x161b) // "Critical mission personnel have been killed."
message(CHR_BOND, 0x161b) // "Critical mission personnel have been killed."
set_stage_flag(STAGEFLAG_PILOT_DEAD)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -2111,7 +2111,7 @@ u8 func1012_choose_angry_pilot[] = {
// Killed a pilot
label(0x08)
message(CHR_JOANNA, 0x1623) // "Civilians have been killed."
message(CHR_BOND, 0x1623) // "Civilians have been killed."
set_stage_flag(STAGEFLAG_JO_KILLED_A_PILOT)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -2140,7 +2140,7 @@ u8 func0404_angry_pilot[] = {
// Alive
label(0x04)
set_self_flag_bankx(CHRFLAG0_00000004, BANK_0)
speak(TARGET_CHR, 0x162f, 0x14dd, CHANNEL_7, COLOR_04_ORANGE) // "Die, you traitors."
speak(CHR_TARGET, 0x162f, 0x14dd, CHANNEL_7, COLOR_04_ORANGE) // "Die, you traitors."
animation(ANIM_DRAW_PISTOL_0245, -1, 120, 0x0600, CHR_SELF, 3)
try_draw_weapon(MODEL_CHRDY357, WEAPON_DY357MAGNUM, 0x00000000, /*goto*/ 0x6c)
@@ -2185,11 +2185,11 @@ u8 func0404_angry_pilot[] = {
label(0x04)
call_rng
if_rand_lt(128, /*goto*/ 0x3b)
set_target_chr(CHR_VELVET)
if_chr_death_animation_finished(TARGET_CHR, /*goto*/ 0x3b)
set_target_chr(CHR_COOP)
if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x3b)
goto_next(0x00)
label(0x3b)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
// Got target (other pilot or Jo)
label(0x00)
@@ -2464,7 +2464,7 @@ u8 func0415_elvis_at_start[] = {
label(0x07)
do_special_animation(-1)
speak(TARGET_CHR, 0x1620, 0x14dc, CHANNEL_6, COLOR_06_WHITE) // "You go on ahead, Jo. I'll secure the perimeter. We..."
speak(CHR_TARGET, 0x1620, 0x14dc, CHANNEL_6, COLOR_06_WHITE) // "You go on ahead, Jo. I'll secure the perimeter. We..."
beginloop(0x0c)
if_sound_finished(CHANNEL_6, /*goto*/ 0x07)
@@ -2535,15 +2535,15 @@ u8 func0415_elvis_at_start[] = {
go_to_target_pad(SPEED_WALK)
beginloop(0x4c)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0029, /*goto*/ 0x04)
if_chr_in_room(CHR_JOANNA, 0x00, 0x002a, /*goto*/ 0x04)
if_chr_in_room(CHR_JOANNA, 0x00, 0x002b, /*goto*/ 0x04)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0030, /*goto*/ 0x04)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x07)
if_chr_in_room(CHR_VELVET, 0x00, 0x0029, /*goto*/ 0x04)
if_chr_in_room(CHR_VELVET, 0x00, 0x002a, /*goto*/ 0x04)
if_chr_in_room(CHR_VELVET, 0x00, 0x002b, /*goto*/ 0x04)
if_chr_in_room(CHR_VELVET, 0x00, 0x0030, /*goto*/ 0x04)
if_chr_in_room(CHR_BOND, 0x00, 0x0029, /*goto*/ 0x04)
if_chr_in_room(CHR_BOND, 0x00, 0x002a, /*goto*/ 0x04)
if_chr_in_room(CHR_BOND, 0x00, 0x002b, /*goto*/ 0x04)
if_chr_in_room(CHR_BOND, 0x00, 0x0030, /*goto*/ 0x04)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x07)
if_chr_in_room(CHR_COOP, 0x00, 0x0029, /*goto*/ 0x04)
if_chr_in_room(CHR_COOP, 0x00, 0x002a, /*goto*/ 0x04)
if_chr_in_room(CHR_COOP, 0x00, 0x002b, /*goto*/ 0x04)
if_chr_in_room(CHR_COOP, 0x00, 0x0030, /*goto*/ 0x04)
label(0x07)
goto_next(0x10)
@@ -2601,7 +2601,7 @@ u8 func0416_elvis_leading[] = {
// Injured
label(0x07)
say_quip(CHR_JOANNA, 0x29, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_BOND, 0x29, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
beginloop(0x3a)
if_chr_stopped(/*goto*/ 0x04)
@@ -2643,20 +2643,20 @@ u8 func0416_elvis_leading[] = {
call_rng
if_rand_lt(85, /*goto*/ 0x3b)
if_rand_lt(170, /*goto*/ 0x3c)
say_quip(CHR_JOANNA, 0x26, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_BOND, 0x26, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
goto_next(0x07)
label(0x3b)
say_quip(CHR_JOANNA, 0x27, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_BOND, 0x27, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
goto_next(0x07)
label(0x3c)
say_quip(CHR_JOANNA, 0x28, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_BOND, 0x28, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
label(0x07)
set_onshot_function(FUNC_ELVIS_LEADING)
set_return_function(CHR_SELF, FUNC_ELVIS_LEADING)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
endfunction
};
@@ -2668,7 +2668,7 @@ u8 func101c_check_elvis_dead[] = {
endloop(0x00)
label(0x07)
message(CHR_JOANNA, 0x1621) // "Elvis has been killed."
message(CHR_BOND, 0x1621) // "Elvis has been killed."
set_stage_flag(STAGEFLAG_ELVIS_DEAD)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -2817,7 +2817,7 @@ u8 func101d_alarm_switches[] = {
label(0x07)
deactivate_alarm
message(CHR_JOANNA, 0x1626) // "Alarm has been deactivated."
message(CHR_BOND, 0x1626) // "Alarm has been deactivated."
goto_next(0x0c)
label(0x0c)
+93 -94
View File
@@ -19,45 +19,44 @@
#define CHR_INTRO_VICTIM 0x1d
// Objects
#define OBJ_GENERATOR 0x01
#define OBJ_LASERSWITCH1 0x03
#define OBJ_LASERSWITCH2 0x04
#define OBJ_LASERSWITCH3 0x05
#define OBJ_LASERSWITCH4 0x06
#define OBJ_SAFEDOOR 0x0b
#define OBJ_BACKUPDISK 0x0c
#define OBJ_KEYCARD1 0x0e
#define OBJ_KEYCARD2 0x0f
#define OBJ_DECODER 0x10
#define OBJ_SAFEKEYPAD 0x11
#define OBJ_ALARM1 0x12
#define OBJ_ALARM2 0x13
#define OBJ_ESCAPEDOOR1 0x18
#define OBJ_ESCAPEDOOR2 0x1b
#define OBJ_LASER_1A 0x22
#define OBJ_LASER_1B 0x23
#define OBJ_LASER_1C 0x24
#define OBJ_LASER_1D 0x25
#define OBJ_LASER_2A 0x26
#define OBJ_LASER_2B 0x27
#define OBJ_LASER_2C 0x28
#define OBJ_LASER_2D 0x29
#define OBJ_LASER_3A 0x2a
#define OBJ_LASER_3B 0x2b
#define OBJ_LASER_3C 0x2c
#define OBJ_LASER_3D 0x2d
#define OBJ_LASER_4A 0x2e
#define OBJ_LASER_4B 0x2f
#define OBJ_LASER_4C 0x30
#define OBJ_LASER_4D 0x31
#define OBJ_MINE1 0x38
#define OBJ_MINE2 0x39
#define OBJ_NBOMB_CRATE 0x3c
#define OBJ_LIGHTSWITCH 0x3d
#define OBJ_CROSSBOW 0x3e
#define OBJ_CMP150_JOANNA 0x47
#define OBJ_CMP150_VELVET 0x48
#define OBJ_GENERATOR 0x01
#define OBJ_LASERSWITCH1 0x03
#define OBJ_LASERSWITCH2 0x04
#define OBJ_LASERSWITCH3 0x05
#define OBJ_LASERSWITCH4 0x06
#define OBJ_SAFEDOOR 0x0b
#define OBJ_BACKUPDISK 0x0c
#define OBJ_KEYCARD1 0x0e
#define OBJ_KEYCARD2 0x0f
#define OBJ_DECODER 0x10
#define OBJ_SAFEKEYPAD 0x11
#define OBJ_ALARM1 0x12
#define OBJ_ALARM2 0x13
#define OBJ_ESCAPEDOOR1 0x18
#define OBJ_ESCAPEDOOR2 0x1b
#define OBJ_LASER_1A 0x22
#define OBJ_LASER_1B 0x23
#define OBJ_LASER_1C 0x24
#define OBJ_LASER_1D 0x25
#define OBJ_LASER_2A 0x26
#define OBJ_LASER_2B 0x27
#define OBJ_LASER_2C 0x28
#define OBJ_LASER_2D 0x29
#define OBJ_LASER_3A 0x2a
#define OBJ_LASER_3B 0x2b
#define OBJ_LASER_3C 0x2c
#define OBJ_LASER_3D 0x2d
#define OBJ_LASER_4A 0x2e
#define OBJ_LASER_4B 0x2f
#define OBJ_LASER_4C 0x30
#define OBJ_LASER_4D 0x31
#define OBJ_MINE1 0x38
#define OBJ_MINE2 0x39
#define OBJ_NBOMB_CRATE 0x3c
#define OBJ_LIGHTSWITCH 0x3d
#define OBJ_CROSSBOW 0x3e
#define OBJ_CMP150_BOND 0x47
#define OBJ_CMP150_COOP 0x48
// Stage flags
#define STAGEFLAG_CLOAK1_ONE_REMAINING 0x00000002
#define STAGEFLAG_CLOAK2_ONE_REMAINING 0x00000004
@@ -318,11 +317,11 @@ u8 props[] = {
tag(OBJ_SAFEDOOR, 1)
door(0x0100, MODEL_G5SAFEDOOR, 0x00c2, 0x10000010, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000, 0x005a0000, 0x03e80000, 0x00500000, 0x00500000, 0x00001999, 0x00000005, 0x00000040, 0x00000e10, 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(OBJ_CMP150_JOANNA, 1)
tag(OBJ_CMP150_BOND, 1)
weapon(0x0100, MODEL_CHRCMP150, 0xffff, 0x40000000, 0x00000000, 0x00400000, 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, 0x0022, 0x1842, 0x1843, 0x1844, 0x1845, 0x1846, 0x0000, 0x0000) // ""
tag(OBJ_CMP150_VELVET, 1)
tag(OBJ_CMP150_COOP, 1)
weapon(0x0100, MODEL_CHRCMP150, 0xffff, 0x40000000, 0x00000000, 0x00400000, 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, 0x0022, 0x1842, 0x1843, 0x1844, 0x1845, 0x1846, 0x0000, 0x0000) // ""
@@ -542,7 +541,7 @@ u8 func1008_check_generator[] = {
// Destroyed
mute_channel(CHANNEL_4)
if_difficulty_lt(DIFF_PA, /*goto*/ 0x06)
message(CHR_JOANNA, 0x1818) // "Mission critical object destroyed."
message(CHR_BOND, 0x1818) // "Mission critical object destroyed."
set_stage_flag(STAGEFLAG_GENERATOR_DESTROYED)
label(0x06)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -579,7 +578,7 @@ u8 func1003_laser_switch_1[] = {
if_chr_activated_object(CHR_P1P2, OBJ_LASERSWITCH1, /*goto*/ 0x08)
if_object_in_good_condition(OBJ_LASERSWITCH1, /*goto*/ 0x2c)
if_stage_flag_eq(STAGEFLAG_LASERSET1_DISABLED, TRUE, /*goto*/ 0x2c)
message(CHR_JOANNA, 0x1818) // "Mission critical object destroyed."
message(CHR_BOND, 0x1818) // "Mission critical object destroyed."
set_stage_flag(STAGEFLAG_LASERSWITCH1_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
label(0x2c)
@@ -645,7 +644,7 @@ u8 func1004_laser_switch_2[] = {
if_chr_activated_object(CHR_P1P2, OBJ_LASERSWITCH2, /*goto*/ 0x08)
if_object_in_good_condition(OBJ_LASERSWITCH2, /*goto*/ 0x2c)
if_stage_flag_eq(STAGEFLAG_LASERSET2_DISABLED, TRUE, /*goto*/ 0x2c)
message(CHR_JOANNA, 0x1818) // "Mission critical object destroyed."
message(CHR_BOND, 0x1818) // "Mission critical object destroyed."
set_stage_flag(STAGEFLAG_LASERSWITCH2_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
label(0x2c)
@@ -712,7 +711,7 @@ u8 func1005_laser_switch_3[] = {
if_chr_activated_object(CHR_P1P2, OBJ_LASERSWITCH3, /*goto*/ 0x08)
if_object_in_good_condition(OBJ_LASERSWITCH3, /*goto*/ 0x2c)
if_stage_flag_eq(STAGEFLAG_LASERSET3_DISABLED, TRUE, /*goto*/ 0x2c)
message(CHR_JOANNA, 0x1818) // "Mission critical object destroyed."
message(CHR_BOND, 0x1818) // "Mission critical object destroyed."
set_stage_flag(STAGEFLAG_LASERSWITCH3_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
label(0x2c)
@@ -778,7 +777,7 @@ u8 func1006_laser_switch_4[] = {
if_chr_activated_object(CHR_P1P2, OBJ_LASERSWITCH4, /*goto*/ 0x08)
if_object_in_good_condition(OBJ_LASERSWITCH4, /*goto*/ 0x2c)
if_stage_flag_eq(STAGEFLAG_LASERSET4_DISABLED, TRUE, /*goto*/ 0x2c)
message(CHR_JOANNA, 0x1818) // "Mission critical object destroyed."
message(CHR_BOND, 0x1818) // "Mission critical object destroyed."
set_stage_flag(STAGEFLAG_LASERSWITCH4_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
label(0x2c)
@@ -873,7 +872,7 @@ u8 func1007_init_lasers[] = {
if_stage_flag_eq(STAGEFLAG_LASERSET3_DISABLED, FALSE, /*goto*/ 0x2c)
if_stage_flag_eq(STAGEFLAG_LASERSET4_DISABLED, FALSE, /*goto*/ 0x2c)
if_stage_flag_eq(STAGEFLAG_ALL_LASERS_DISABLED, TRUE, /*goto*/ 0x2c)
message(CHR_JOANNA, 0x181d) // "All laser grid systems shut down."
message(CHR_BOND, 0x181d) // "All laser grid systems shut down."
set_stage_flag(STAGEFLAG_ALL_LASERS_DISABLED)
label(0x2c)
endloop(0x04)
@@ -1155,9 +1154,9 @@ u8 func100a_give_keycards[] = {
// Wait for the chr who holds the keycard to die
beginloop(0x55)
if_chr_unloaded(TARGET_CHR, /*goto*/ 0x08)
if_chr_dying(TARGET_CHR, /*goto*/ 0x2c)
if_chr_death_animation_finished(TARGET_CHR, /*goto*/ 0x2c)
if_chr_unloaded(CHR_TARGET, /*goto*/ 0x08)
if_chr_dying(CHR_TARGET, /*goto*/ 0x2c)
if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x2c)
endloop(0x55)
label(0x2c)
@@ -1230,12 +1229,12 @@ u8 func1002_set_ai[] = {
u8 func1400_setup_counterop[] = {
yield
set_chr_team(CHR_COUNTEROP, TEAM_ENEMY)
set_chr_team(CHR_ANTI, TEAM_ENEMY)
// On counterop SA and PA, give Joanna a CMP150
if_difficulty_lt(DIFF_SA, /*goto*/ 0x06)
give_object_to_chr(OBJ_CMP150_JOANNA, CHR_JOANNA)
give_object_to_chr(OBJ_CMP150_VELVET, CHR_VELVET)
give_object_to_chr(OBJ_CMP150_BOND, CHR_BOND)
give_object_to_chr(OBJ_CMP150_COOP, CHR_COOP)
label(0x06)
set_function(CHR_SELF, GFUNC_REBUILD_GROUPS)
endfunction
@@ -1268,7 +1267,7 @@ u8 func100e_check_conspirators_alerted[] = {
set_function(CHR_CASS, FUNC_RUN_FROM_MEETING)
set_function(0x1c, FUNC_RUN_FROM_MEETING) // chr doesn't exist
set_function(CHR_BLONDE, FUNC_RUN_FROM_MEETING)
message(CHR_JOANNA, 0x1829) // "Conspirators have been alerted."
message(CHR_BOND, 0x1829) // "Conspirators have been alerted."
// Wait until alarm not active
label(0x06)
@@ -1316,7 +1315,7 @@ u8 func1010_safe_cracking[] = {
beginloop(0x04)
consider_coop_for_p1p2_chr(CHR_SELF)
if_object_in_good_condition(OBJ_SAFEKEYPAD, /*goto*/ 0x2c)
message(CHR_JOANNA, 0x1840) // "Mission critical object destroyed."
message(CHR_BOND, 0x1840) // "Mission critical object destroyed."
set_stage_flag(STAGEFLAG_SAFEKEYPAD_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
label(0x2c)
@@ -1342,7 +1341,7 @@ u8 func1010_safe_cracking[] = {
endloop(0x09)
label(0x06)
speak(CHR_JOANNA, 0x1826, 0x7754, CHANNEL_5, COLOR_00_GREEN) // "INTRUDER ALERT - all security to the vault."
speak(CHR_BOND, 0x1826, 0x7754, CHANNEL_5, COLOR_00_GREEN) // "INTRUDER ALERT - all security to the vault."
play_x_music(CHANNEL_10, 180)
yield
set_countdown_timer(60)
@@ -1361,7 +1360,7 @@ u8 func1010_safe_cracking[] = {
beginloop(0x08)
if_object_in_good_condition(OBJ_SAFEKEYPAD, /*goto*/ 0x2c)
message(CHR_JOANNA, 0x1840) // "Mission critical object destroyed."
message(CHR_BOND, 0x1840) // "Mission critical object destroyed."
set_stage_flag(STAGEFLAG_SAFEKEYPAD_DESTROYED)
hide_countdown_timer
set_function(CHR_SELF, GFUNC_IDLE)
@@ -1402,14 +1401,14 @@ u8 func1012_check_for_end[] = {
label(0x06)
set_stage_flag(STAGEFLAG_EXITED_BUILDING)
dprint 'I','N',' ','T','H','E',' ','E','L','E','V','A','T','O','R','\n',0,
set_invincible(CHR_JOANNA)
set_invincible(CHR_BOND)
yield
yield
revoke_control(CHR_JOANNA, 4)
revoke_control(CHR_BOND, 4)
hide_countdown_timer
stop_countdown_timer
if_all_objectives_complete(/*goto*/ 0x53)
message(CHR_JOANNA, 0x1833) // "Objectives incomplete - MISSION FAILED."
message(CHR_BOND, 0x1833) // "Objectives incomplete - MISSION FAILED."
label(0x2c)
restart_timer
@@ -1423,15 +1422,15 @@ u8 func1012_check_for_end[] = {
// Objectives complete
label(0x53)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x2c)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x2c)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x2c)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x2c)
if_chr_dying(CHR_BOND, /*goto*/ 0x2c)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x2c)
goto_next(0x06)
label(0x2c)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x2c)
if_chr_dying(CHR_VELVET, /*goto*/ 0x2c)
if_chr_unloaded(CHR_VELVET, /*goto*/ 0x2c)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2c)
if_chr_dying(CHR_COOP, /*goto*/ 0x2c)
if_chr_unloaded(CHR_COOP, /*goto*/ 0x2c)
goto_next(0x06)
label(0x2c)
@@ -1550,15 +1549,15 @@ u8 func1017_check_lasers_closed[] = {
};
u8 func040d_intro[] = {
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_music_track(MUSIC_G5_INTRO)
camera_movement(0x0165)
cmd0175(60)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x0166, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x0166, -1, -1, 0x0600, CHR_BOND, 4)
set_chr_flag_bank3(CHR_INTRO_VICTIM, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(CHR_INTRO_VICTIM, CHRFLAG3_HIDDEN)
@@ -1566,7 +1565,7 @@ u8 func040d_intro[] = {
animation(0x0167, -1, -1, 0x0600, CHR_INTRO_VICTIM, 4)
restart_timer
set_cutscene_weapon(CHR_JOANNA, WEAPON_FALCON2_SILENCER, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_FALCON2_SILENCER, WEAPON_NONE)
fade_to_color(0x000000ff, 0)
fade_to_color(0x00000000, 110)
@@ -1764,11 +1763,11 @@ u8 func040d_intro[] = {
endloop(0x08)
label(0x54)
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x0166, -2, -1, 0x0600, CHR_JOANNA, 2)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x0166, -2, -1, 0x0600, CHR_BOND, 2)
unset_chr_flag_bank3(CHR_INTRO_VICTIM, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_INTRO_VICTIM, CHRFLAG2_00020000)
@@ -1803,8 +1802,8 @@ u8 func040d_intro[] = {
u8 func040e_meeting_cutscene[] = {
deactivate_alarm
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_music_track(MUSIC_G5_MIDCUTSCENE)
camera_movement(0x0191)
set_stage_flag(STAGEFLAG_MEETING_STARTED)
@@ -1839,13 +1838,13 @@ u8 func040e_meeting_cutscene[] = {
endloop(0x55)
label(0x06)
speak(CHR_JOANNA, 0x1848, 0x740c, CHANNEL_5, COLOR_04_ORANGE) // "We've recovered the sapient from Carrington and al..."
speak(CHR_BOND, 0x1848, 0x740c, CHANNEL_5, COLOR_04_ORANGE) // "We've recovered the sapient from Carrington and al..."
wait_until(752, 0x56)
play_sound(0x0161, CHANNEL_6)
wait_until(760, 0x57)
speak(CHR_JOANNA, 0x1849, 0x740d, CHANNEL_7, COLOR_03_RED) // "This will reduce its efficiency. My team will have..."
speak(CHR_BOND, 0x1849, 0x740d, CHANNEL_7, COLOR_03_RED) // "This will reduce its efficiency. My team will have..."
wait_until(813, 0x58)
play_sound(0x0162, CHANNEL_6)
@@ -1872,7 +1871,7 @@ u8 func040e_meeting_cutscene[] = {
play_sound(0x0593, CHANNEL_6)
wait_until(1684, 0x5d)
speak(CHR_JOANNA, 0x184a, 0x740e, CHANNEL_5, COLOR_04_ORANGE) // "No one could have predicted that! And I resent bei..."
speak(CHR_BOND, 0x184a, 0x740e, CHANNEL_5, COLOR_04_ORANGE) // "No one could have predicted that! And I resent bei..."
wait_until(1780, 0x5e)
play_sound_from_object2(CHANNEL_6, 0x3a, 0x01d5, 0x00, 0x00)
@@ -1897,7 +1896,7 @@ u8 func040e_meeting_cutscene[] = {
play_sound(0x0161, CHANNEL_7)
wait_until(2316, 0x65)
speak(CHR_JOANNA, 0x184b, 0x740f, CHANNEL_7, COLOR_03_RED) // "The President turned down your request for the loa..."
speak(CHR_BOND, 0x184b, 0x740f, CHANNEL_7, COLOR_03_RED) // "The President turned down your request for the loa..."
wait_until(2342, 0x67)
play_sound(0x0162, CHANNEL_6)
@@ -1931,7 +1930,7 @@ u8 func040e_meeting_cutscene[] = {
play_sound(0x0161, CHANNEL_5)
wait_until(2692, 0x6f)
speak(CHR_JOANNA, 0x184c, 0x7410, CHANNEL_7, COLOR_03_RED) // "Could it be you overestimated your influence over ..."
speak(CHR_BOND, 0x184c, 0x7410, CHANNEL_7, COLOR_03_RED) // "Could it be you overestimated your influence over ..."
wait_until(2705, 0x72)
play_sound(0x0161, CHANNEL_6)
@@ -1955,7 +1954,7 @@ u8 func040e_meeting_cutscene[] = {
play_sound(0x0163, CHANNEL_5)
wait_until(3048, 0x79)
speak(CHR_JOANNA, 0x184d, 0x7411, CHANNEL_7, COLOR_05_GREEN) // "No! Perhaps I underestimated his resolve. We have ..."
speak(CHR_BOND, 0x184d, 0x7411, CHANNEL_7, COLOR_05_GREEN) // "No! Perhaps I underestimated his resolve. We have ..."
wait_until(3186, 0x7a)
play_sound(0x0164, CHANNEL_6)
@@ -1982,7 +1981,7 @@ u8 func040e_meeting_cutscene[] = {
play_sound(0x0162, CHANNEL_6)
wait_until(4070, 0x82)
speak(CHR_JOANNA, 0x184e, 0x7412, CHANNEL_7, COLOR_04_ORANGE) // "Ha! Assuming you don't get any interference. If Ca..."
speak(CHR_BOND, 0x184e, 0x7412, CHANNEL_7, COLOR_04_ORANGE) // "Ha! Assuming you don't get any interference. If Ca..."
wait_until(4312, 0x84)
play_sound(0x0163, CHANNEL_6)
@@ -2000,7 +1999,7 @@ u8 func040e_meeting_cutscene[] = {
play_sound(0x0161, CHANNEL_7)
wait_until(4560, 0x83)
speak(CHR_JOANNA, 0x184f, 0x7413, CHANNEL_5, COLOR_05_GREEN) // "There will be no outside help for Mr. Carrington. ..."
speak(CHR_BOND, 0x184f, 0x7413, CHANNEL_5, COLOR_05_GREEN) // "There will be no outside help for Mr. Carrington. ..."
wait_until(4636, 0x89)
play_sound(0x0163, CHANNEL_7)
@@ -2009,7 +2008,7 @@ u8 func040e_meeting_cutscene[] = {
play_sound(0x0164, CHANNEL_7)
wait_until(5272, 0x8b)
speak(CHR_JOANNA, 0x1850, 0x7414, CHANNEL_5, COLOR_03_RED) // "Then the devices we gave you are working correctly..."
speak(CHR_BOND, 0x1850, 0x7414, CHANNEL_5, COLOR_03_RED) // "Then the devices we gave you are working correctly..."
wait_until(5360, 0x8c)
play_sound(0x0163, CHANNEL_6)
@@ -2037,8 +2036,8 @@ u8 func040e_meeting_cutscene[] = {
mute_channel(CHANNEL_7)
mute_channel(CHANNEL_6)
mute_channel(CHANNEL_5)
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
restart_timer
label(0x06)
set_function(CHR_CASS, FUNC_WALK_FROM_MEETING)
@@ -2073,7 +2072,7 @@ u8 func040f_outro_from_menu[] = {
u8 func040f_outro[] = {
camera_movement(0x0196)
set_music_track(MUSIC_G5_OUTRO)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(0xf1, CHRFLAG3_HIDDEN)
set_function(CHR_P1P2, GFUNC_IDLE)
set_chr_flag_bank3(CHR_P1P2, CHRFLAG3_UNPLAYABLE)
@@ -2543,7 +2542,7 @@ u8 func101d_init_mines[] = {
set_object_flag_bank1(OBJ_MINE2, OBJECTFLAG1_INVISIBLE)
unset_object_flag_bank0(OBJ_MINE1, OBJECTFLAG0_00000100)
unset_object_flag_bank0(OBJ_MINE2, OBJECTFLAG0_00000100)
set_chr_team(CHR_COUNTEROP, TEAM_ENEMY)
set_chr_team(CHR_ANTI, TEAM_ENEMY)
label(0x06)
if_eeprom_flag_is_unset(EEPROMFLAG_G5_MINE, /*goto*/ 0x06)
@@ -2885,10 +2884,10 @@ u8 unregistered_function[] = {
u8 func1026_unlock_doors[] = {
// If Velvet and counter op don't exist, return
yield
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x2c)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2c)
goto_next(0x04)
label(0x2c)
if_chr_death_animation_finished(CHR_COUNTEROP, /*goto*/ 0x0a)
if_chr_death_animation_finished(CHR_ANTI, /*goto*/ 0x0a)
// Wait until some door is not closed (so... opening, I guess?)
beginloop(0x04)
File diff suppressed because it is too large Load Diff
+254 -254
View File
File diff suppressed because it is too large Load Diff
+69 -69
View File
@@ -761,7 +761,7 @@ u8 func1001_objectives_failed_msg[] = {
u8 func1400_setup_counterop[] = {
yield
set_chr_team(CHR_COUNTEROP, TEAM_20)
set_chr_team(CHR_ANTI, TEAM_20)
set_function(CHR_SELF, GFUNC_REBUILD_GROUPS)
endfunction
};
@@ -773,15 +773,15 @@ u8 func1002_intro_from_menu[] = {
};
u8 func1002_intro[] = {
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
camera_movement(0x0171)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
if_stage_flag_eq(STAGEFLAG_PLAYING_INTRO_FROM_MENU, TRUE, /*goto*/ 0x2e)
if_difficulty_lt(DIFF_PA, /*goto*/ 0x2d)
label(0x2e)
animation(0x0172, -1, -1, 0x0600, CHR_JOANNA, 4)
animation(0x0172, -1, -1, 0x0600, CHR_BOND, 4)
remove_chr(CHR_NEGOTIATOR)
set_music_track(MUSIC_VILLA_INTRO3)
goto_next(0x06)
@@ -804,9 +804,9 @@ u8 func1002_intro[] = {
restart_timer
fade_to_color(0x000000ff, 0)
fade_to_color(0x00000000, 110)
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
#define wait_until(time, loopid) \
beginloop(loopid) \
@@ -819,7 +819,7 @@ u8 func1002_intro[] = {
wait_until(205, 0xab)
speak(CHR_JOANNA, 0x2027, 0x73ff, CHANNEL_4, COLOR_09_BLUE) // "Agent Dark Mission Log, 1846 hours. Last night we ..."
speak(CHR_BOND, 0x2027, 0x73ff, CHANNEL_4, COLOR_09_BLUE) // "Agent Dark Mission Log, 1846 hours. Last night we ..."
wait_until(680, 0x66)
play_sound(0x0161, CHANNEL_7)
@@ -846,7 +846,7 @@ u8 func1002_intro[] = {
play_sound(0x0161, CHANNEL_7)
wait_until(1100, 0xac)
speak(CHR_JOANNA, 0x2028, 0x7400, CHANNEL_4, COLOR_09_BLUE) // "Unfortunately, we don't have it. Daniel and Dr. Ca..."
speak(CHR_BOND, 0x2028, 0x7400, CHANNEL_4, COLOR_09_BLUE) // "Unfortunately, we don't have it. Daniel and Dr. Ca..."
wait_until(1118, 0x6e)
play_sound(0x0162, CHANNEL_7)
@@ -937,12 +937,12 @@ u8 func1002_intro[] = {
label(0x56)
if_controller_button_pressed(/*goto*/ 0x56)
camera_movement(0x01b7)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
if_stage_flag_eq(STAGEFLAG_PLAYING_INTRO_FROM_MENU, TRUE, /*goto*/ 0x2e)
if_difficulty_lt(DIFF_PA, /*goto*/ 0x2d)
label(0x2e)
animation(0x01b8, -1, -1, 0x0600, CHR_JOANNA, 4)
animation(0x01b8, -1, -1, 0x0600, CHR_BOND, 4)
goto_next(0x06)
label(0x2d)
animation(0x01b8, -1, -1, 0x0600, CHR_NEGOTIATOR, 4)
@@ -961,7 +961,7 @@ u8 func1002_intro[] = {
restart_timer
wait_until(50, 0xaa)
speak(CHR_JOANNA, 0x2029, 0x7401, CHANNEL_4, COLOR_09_BLUE) // "Hopefully our phoney negotiator ploy will give me ..."
speak(CHR_BOND, 0x2029, 0x7401, CHANNEL_4, COLOR_09_BLUE) // "Hopefully our phoney negotiator ploy will give me ..."
restart_timer
wait_until(295, 0x89)
@@ -1044,9 +1044,9 @@ u8 func1002_intro[] = {
unset_chr_flag_bank3(CHR_TAKER2, CHRFLAG3_HIDDEN)
animation(0x0001, -1, -1, 0x0600, CHR_TAKER2, 4)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x01bc, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x01bc, -1, -1, 0x0600, CHR_BOND, 4)
show_object(OBJ_DROPSHIP)
set_object_flag_bank1(OBJ_DROPSHIP, OBJECTFLAG1_04000000)
@@ -1099,9 +1099,9 @@ u8 func1002_intro[] = {
mute_channel(CHANNEL_6)
mute_channel(CHANNEL_7)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x01bc, -2, -1, 0x0600, CHR_JOANNA, 2)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x01bc, -2, -1, 0x0600, CHR_BOND, 2)
unset_chr_flag_bank3(CHR_NEGOTIATOR, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_NEGOTIATOR, CHRFLAG2_00020000)
@@ -1128,17 +1128,17 @@ u8 func1002_intro[] = {
set_function(CHR_TAKER1, FUNC_INIT_TAKER)
set_function(CHR_TAKER2, FUNC_INIT_TAKER)
set_function(CHR_NEGOTIATOR, FUNC_NEGOTIATOR)
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_function(CHR_SELF, GFUNC_IDLE)
label(0x4f)
camera_movement(0x01be)
cmd0175(60)
hide_object(OBJ_DROPSHIP)
if_controller_button_pressed(/*goto*/ 0x56)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x01bf, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x01bf, -1, -1, 0x0600, CHR_BOND, 4)
set_chr_flag_bank3(CHR_TAKER1, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(CHR_TAKER1, CHRFLAG3_HIDDEN)
set_chr_flag_bank2(CHR_TAKER1, CHRFLAG2_00020000)
@@ -1200,9 +1200,9 @@ u8 func1002_intro[] = {
mute_channel(CHANNEL_5)
mute_channel(CHANNEL_6)
mute_channel(CHANNEL_7)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x01bf, -2, -1, 0x0600, CHR_JOANNA, 2)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x01bf, -2, -1, 0x0600, CHR_BOND, 2)
unset_chr_flag_bank3(CHR_TAKER1, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_TAKER1, CHRFLAG2_00020000)
set_chr_flag_bank3(CHR_TAKER1, CHRFLAG3_00000001)
@@ -1219,8 +1219,8 @@ u8 func1002_intro[] = {
yield
set_function(CHR_TAKER1, FUNC_TAKER)
set_function(CHR_TAKER2, FUNC_TAKER)
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
@@ -1234,7 +1234,7 @@ u8 func0c02_outro_from_menu[] = {
u8 func0408_outro[] = {
camera_movement(0x017a)
set_music_track(MUSIC_VILLA_OUTRO)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(0xf1, CHRFLAG3_HIDDEN)
set_function(CHR_P1P2, GFUNC_IDLE)
set_chr_flag_bank3(CHR_CARRINGTON, CHRFLAG3_INVINCIBLE_TO_GUNFIRE)
@@ -1399,24 +1399,24 @@ u8 func1003_give_items[] = {
if_difficulty_lt(DIFF_PA, /*goto*/ 0x06)
// PA
give_object_to_chr(0x01, CHR_JOANNA)
give_object_to_chr(0x89, CHR_VELVET)
chr_draw_weapon(CHR_JOANNA, WEAPON_UNARMED)
chr_draw_weapon(CHR_VELVET, WEAPON_UNARMED)
give_object_to_chr(0x01, CHR_BOND)
give_object_to_chr(0x89, CHR_COOP)
chr_draw_weapon(CHR_BOND, WEAPON_UNARMED)
chr_draw_weapon(CHR_COOP, WEAPON_UNARMED)
hide_object(0x02)
hide_object(0x8a)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x08)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x08)
set_function(CHR_SELF, GFUNC_IDLE)
// A and SA
label(0x06)
give_object_to_chr(0x02, CHR_JOANNA)
give_object_to_chr(0x8a, CHR_VELVET)
chr_draw_weapon(CHR_JOANNA, WEAPON_SNIPERRIFLE)
chr_draw_weapon(CHR_VELVET, WEAPON_SNIPERRIFLE)
give_object_to_chr(0x02, CHR_BOND)
give_object_to_chr(0x8a, CHR_COOP)
chr_draw_weapon(CHR_BOND, WEAPON_SNIPERRIFLE)
chr_draw_weapon(CHR_COOP, WEAPON_SNIPERRIFLE)
hide_object(0x01)
hide_object(0x89)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x08)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x08)
set_function(CHR_SELF, GFUNC_IDLE)
// Velvet doesn't exist
@@ -1438,7 +1438,7 @@ u8 func1004_check_negotiator[] = {
endloop(0x04)
label(0x06)
message(CHR_JOANNA, 0x200b) // "Negotiator has been killed."
message(CHR_BOND, 0x200b) // "Negotiator has been killed."
set_stage_flag(STAGEFLAG_NEGOTIATOR_DEAD)
// PA
@@ -1494,11 +1494,11 @@ u8 func0402_taker[] = {
label(0x60)
if_self_flag_bankx_eq(CHRFLAG0_NOHEAR, TRUE, BANK_0, /*goto*/ 0x06)
set_target_chr(CHR_VELVET)
if_chr_death_animation_finished(TARGET_CHR, /*goto*/ 0x06)
set_target_chr(CHR_COOP)
if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x06)
goto_next(0x03)
label(0x06)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
label(0x03)
try_aim_and_shoot_thing1(0x0220, 0x0000, /*goto*/ 0x05)
@@ -1506,7 +1506,7 @@ u8 func0402_taker[] = {
if_chr_distance_gt(1000, /*goto*/ 0x2e)
if_chr_distance_lt(300, /*goto*/ 0x06)
if_self_flag_bankx_eq(CHRFLAG0_00002000, TRUE, BANK_0, /*goto*/ 0x06)
if_chr_weapon_equipped(CHR_JOANNA, WEAPON_LAPTOPGUN, /*goto*/ 0x0b)
if_chr_weapon_equipped(CHR_BOND, WEAPON_LAPTOPGUN, /*goto*/ 0x0b)
label(0x2d)
if_timer_gt(600, /*goto*/ 0x06)
endloop(0x05)
@@ -1531,7 +1531,7 @@ u8 func0402_taker[] = {
// Laptop gun equipped
label(0x0b)
set_self_flag_bankx(CHRFLAG0_00002000, BANK_0)
say_quip(CHR_JOANNA, 0x12, 0xff, 0x03, 0xff, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x12, 0xff, 0x03, 0xff, BANK_0, 0x00, 0x00)
restart_timer
animation(0x0202, 0, -1, 0x100a, CHR_SELF, 2)
@@ -1680,7 +1680,7 @@ u8 func0403_negotiator[] = {
endloop(0x08)
label(0x06)
message(CHR_JOANNA, 0x200d) // "Negotiator has escaped to safety."
message(CHR_BOND, 0x200d) // "Negotiator has escaped to safety."
set_stage_flag(STAGEFLAG_NEGOTIATOR_ESCAPED)
stop_music_channel(CHANNEL_1)
remove_chr(CHR_SELF)
@@ -1772,7 +1772,7 @@ u8 func1005_toggle_snipers[] = {
u8 func0404_sniper[] = {
stop_chr
set_onshot_function(FUNC_SNIPER)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
if_chr_dying(CHR_SELF, /*goto*/ 0x64)
if_self_flag_bankx_eq(CHRFLAG0_08000000, TRUE, BANK_0, /*goto*/ 0x04)
@@ -1949,7 +1949,7 @@ u8 func1006_check_snipers_dead[] = {
endloop(0x04)
label(0x2d)
message(CHR_JOANNA, 0x200c) // "Snipers have been eliminated."
message(CHR_BOND, 0x200c) // "Snipers have been eliminated."
set_stage_flag(STAGEFLAG_SNIPERS_DEAD)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -2107,21 +2107,21 @@ u8 func100a_check_switches_destroyed[] = {
beginloop(0x04)
if_object_in_good_condition(0x03, /*goto*/ 0x2d)
if_stage_flag_eq(STAGEFLAG_COOLING_ACTIVE, TRUE, /*goto*/ 0x2d)
message(CHR_JOANNA, 0x2015) // "Critical mission object has been destroyed."
message(CHR_BOND, 0x2015) // "Critical mission object has been destroyed."
set_stage_flag(STAGEFLAG_WINDMILL_SWITCH_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
label(0x2d)
if_object_in_good_condition(0x04, /*goto*/ 0x2d)
if_stage_flag_eq(STAGEFLAG_POWER_ACTIVE, TRUE, /*goto*/ 0x2d)
message(CHR_JOANNA, 0x2015) // "Critical mission object has been destroyed."
message(CHR_BOND, 0x2015) // "Critical mission object has been destroyed."
set_stage_flag(STAGEFLAG_WINDMILL_SWITCH_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
label(0x2d)
if_object_in_good_condition(0x05, /*goto*/ 0x2d)
if_stage_flag_eq(STAGEFLAG_WINDMILL_ACTIVATED, TRUE, /*goto*/ 0x2d)
message(CHR_JOANNA, 0x2015) // "Critical mission object has been destroyed."
message(CHR_BOND, 0x2015) // "Critical mission object has been destroyed."
set_stage_flag(STAGEFLAG_WINDMILL_SWITCH_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -2161,7 +2161,7 @@ u8 func100b_invoke_hackers[] = {
endloop(0x08)
label(0x06)
speak(CHR_JOANNA, 0x2016, 0x819f, CHANNEL_4, COLOR_05_GREEN) // "Joanna! It's Grimshaw. We've got hackers at the vi..."
speak(CHR_BOND, 0x2016, 0x819f, CHANNEL_4, COLOR_05_GREEN) // "Joanna! It's Grimshaw. We've got hackers at the vi..."
set_stage_flag(STAGEFLAG_HACKERS_STARTED)
set_object_flag_bank2(0x0b, OBJECTFLAG2_RTRACKED_YELLOW)
set_object_flag_bank2(0x0d, OBJECTFLAG2_RTRACKED_YELLOW)
@@ -2191,7 +2191,7 @@ u8 func100b_invoke_hackers[] = {
// Timer expired
label(0x06)
message(CHR_JOANNA, 0x2017) // "Hackers have uploaded vital data."
message(CHR_BOND, 0x2017) // "Hackers have uploaded vital data."
set_stage_flag(STAGEFLAG_HACKERS_SUCCEEDED)
// Hackers dead
@@ -2275,7 +2275,7 @@ u8 func100c_check_hackers_dead[] = {
label(0x2d)
if_stage_flag_eq(STAGEFLAG_HACKERS_SUCCEEDED, TRUE, /*goto*/ 0x2d)
message(CHR_JOANNA, 0x2018) // "Hackers have been eliminated."
message(CHR_BOND, 0x2018) // "Hackers have been eliminated."
set_stage_flag(STAGEFLAG_HACKERS_DEAD)
// Hackers succeeded
@@ -2300,12 +2300,12 @@ u8 func100e_check_objectives_complete[] = {
set_stage_flag(STAGEFLAG_CARRINGTON_RESCUED)
yield
yield
set_invincible(CHR_JOANNA)
revoke_control(CHR_JOANNA, 4)
set_invincible(CHR_BOND)
revoke_control(CHR_BOND, 4)
hide_countdown_timer
stop_countdown_timer
if_all_objectives_complete(/*goto*/ 0x5c)
message(CHR_JOANNA, 0x201a) // "All objectives not completed - mission failed."
message(CHR_BOND, 0x201a) // "All objectives not completed - mission failed."
// If all objectives aren't complete, the player is shown the message, but
// if the objective completes within the next 4 seconds you pass the level
@@ -2325,14 +2325,14 @@ u8 func100e_check_objectives_complete[] = {
set_function(CHR_SELF, GFUNC_IDLE)
label(0x2d)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x2d)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x2d)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x2d)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x2d)
if_chr_dying(CHR_BOND, /*goto*/ 0x2d)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x2d)
goto_next(0x06)
label(0x2d)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x2d)
if_chr_dying(CHR_VELVET, /*goto*/ 0x2d)
if_chr_unloaded(CHR_VELVET, /*goto*/ 0x2d)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2d)
if_chr_dying(CHR_COOP, /*goto*/ 0x2d)
if_chr_unloaded(CHR_COOP, /*goto*/ 0x2d)
goto_next(0x06)
// Mission failed - players dead
@@ -2393,7 +2393,7 @@ u8 func1013_check_guard_subdued[] = {
// Captured someone
label(0x06)
if_stage_flag_eq(STAGEFLAG_GUARD_CAPTURED, TRUE, /*goto*/ 0x2e)
message(CHR_JOANNA, 0x201d) // "Enemy guard has been subdued."
message(CHR_BOND, 0x201d) // "Enemy guard has been subdued."
label(0x2e)
unset_stage_flag(STAGEFLAG_FORGOT_TO_KO_GUARD)
yield
@@ -2483,7 +2483,7 @@ u8 func1015_check_computers_destroyed[] = {
endloop(0x04)
label(0x08)
message(CHR_JOANNA, 0x2015) // "Critical mission object has been destroyed."
message(CHR_BOND, 0x2015) // "Critical mission object has been destroyed."
set_stage_flag(STAGEFLAG_HACKER_PC_DESTROYED)
label(0x09)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -2561,7 +2561,7 @@ u8 func1017_msg_gottobequick[] = {
endloop(0x08)
label(0x06)
speak(CHR_JOANNA, 0x2024, 0x73ad, CHANNEL_6, COLOR_09_BLUE) // "I've got to be quick, or they'll kill the negotiat..."
speak(CHR_BOND, 0x2024, 0x73ad, CHANNEL_6, COLOR_09_BLUE) // "I've got to be quick, or they'll kill the negotiat..."
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
@@ -2601,7 +2601,7 @@ u8 func1019_msg_hackershavetobestopped[] = {
endloop(0x08)
label(0x2d)
speak(CHR_JOANNA, 0x2026, 0x73af, CHANNEL_6, COLOR_09_BLUE) // "Those hackers have to be stopped before I rescue D..."
speak(CHR_BOND, 0x2026, 0x73af, CHANNEL_6, COLOR_09_BLUE) // "Those hackers have to be stopped before I rescue D..."
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
+184 -184
View File
@@ -40,22 +40,22 @@
#define CHR_JONATHAN 0x38
// Objects
#define OBJ_RCP120 0x05
#define OBJ_AUTOGUN1 0x06
#define OBJ_AUTOGUN2 0x07
#define OBJ_AUTOGUN3 0x08
#define OBJ_SAFEINFO 0x09
#define OBJ_AUTOGUN_SWITCH1 0x0a
#define OBJ_AUTOGUN_SWITCH2 0x0b
#define OBJ_AUTOGUN_SWITCH3 0x0c
#define OBJ_SAFEDOOR 0x39
#define OBJ_SKEDAR_SHUTTLE 0x3c
#define OBJ_RCP120_GLASS 0x3d
#define OBJ_FR_GLASS 0x3e
#define OBJ_DEVASTATOR 0x45
#define OBJ_FR_PC 0x4e
#define OBJ_DATAUPLINK_JOANNA 0x4f
#define OBJ_DATAUPLINK_VELVET 0x50
#define OBJ_RCP120 0x05
#define OBJ_AUTOGUN1 0x06
#define OBJ_AUTOGUN2 0x07
#define OBJ_AUTOGUN3 0x08
#define OBJ_SAFEINFO 0x09
#define OBJ_AUTOGUN_SWITCH1 0x0a
#define OBJ_AUTOGUN_SWITCH2 0x0b
#define OBJ_AUTOGUN_SWITCH3 0x0c
#define OBJ_SAFEDOOR 0x39
#define OBJ_SKEDAR_SHUTTLE 0x3c
#define OBJ_RCP120_GLASS 0x3d
#define OBJ_FR_GLASS 0x3e
#define OBJ_DEVASTATOR 0x45
#define OBJ_FR_PC 0x4e
#define OBJ_DATAUPLINK_BOND 0x4f
#define OBJ_DATAUPLINK_COOP 0x50
// Stage flags
#define STAGEFLAG_00000001 0x00000001 // never set
@@ -548,9 +548,9 @@ s32 path00[] = {
u8 func1001_objectives_failed_msg[] = {
yield
give_object_to_chr(OBJ_DATAUPLINK_JOANNA, CHR_JOANNA)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x2e)
give_object_to_chr(OBJ_DATAUPLINK_VELVET, CHR_VELVET)
give_object_to_chr(OBJ_DATAUPLINK_BOND, CHR_BOND)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2e)
give_object_to_chr(OBJ_DATAUPLINK_COOP, CHR_COOP)
label(0x2e)
set_chr_flag_bank3(CHR_CARRINGTON, CHRFLAG3_04000000)
@@ -574,7 +574,7 @@ u8 func1001_objectives_failed_msg[] = {
u8 func1400_setup_counterop[] = {
yield
set_chr_team(CHR_COUNTEROP, TEAM_ENEMY)
set_chr_team(CHR_ANTI, TEAM_ENEMY)
set_function(CHR_SELF, GFUNC_REBUILD_GROUPS)
endfunction
};
@@ -720,7 +720,7 @@ u8 func0413_defend_pad[] = {
dprint 'D','E','T','E','C','T','E','D','\n',0,
set_onshot_function(FUNC_DEFEND_PAD)
set_return_function(CHR_SELF, FUNC_DEFEND_PAD)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
endfunction
};
@@ -777,7 +777,7 @@ u8 func1004_check_hostages_killed[] = {
label(0x08)
if_stage_flag_eq(STAGEFLAG_ENOUGH_HOSTAGES_SAVED, TRUE, /*goto*/ 0x2e)
set_stage_flag(STAGEFLAG_TOO_MANY_HOSTAGES_KILLED)
message(CHR_JOANNA, 0x2210) // "Too many hostages killed."
message(CHR_BOND, 0x2210) // "Too many hostages killed."
label(0x2e)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -793,7 +793,7 @@ u8 func1005_check_safeinfo_destroyed[] = {
endloop(0x04)
label(0x08)
message(CHR_JOANNA, 0x2212) // "Sensitive information has been destroyed."
message(CHR_BOND, 0x2212) // "Sensitive information has been destroyed."
set_stage_flag(STAGEFLAG_SAFEINFO_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -833,7 +833,7 @@ u8 func1005_check_safeinfo_destroyed[] = {
/* Autogun or switch destroyed */ \
label(0x0b) \
if_difficulty_lt(DIFF_SA, /*goto*/ 0x11) \
message(CHR_JOANNA, 0x2222) /* "Critical mission object has been destroyed." */ \
message(CHR_BOND, 0x2222) /* "Critical mission object has been destroyed." */ \
set_stage_flag(STAGEFLAG_AUTOGUN_SWITCH_DESTROYED)
@@ -863,7 +863,7 @@ u8 func1009_autogun_switch3[] = {
u8 func0c01_outro[] = {
camera_movement(0x01a2)
set_music_track(MUSIC_DEFENSE_OUTRO)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(0xf1, CHRFLAG3_HIDDEN)
set_function(CHR_P1P2, GFUNC_IDLE)
set_chr_flag_bank3(CHR_CARRINGTON, CHRFLAG3_HIDDEN)
@@ -1030,7 +1030,7 @@ u8 func0c01_outro[] = {
play_sound(0x0162, CHANNEL_10)
wait_until(570, 0x71)
speak(CHR_JOANNA, 0x2231, 0x747d, CHANNEL_10, COLOR_09_BLUE) // "Get clear! I'll hold them off... You can come back..."
speak(CHR_BOND, 0x2231, 0x747d, CHANNEL_10, COLOR_09_BLUE) // "Get clear! I'll hold them off... You can come back..."
wait_until(847, 0x87)
play_sound(0x0161, CHANNEL_10)
@@ -1039,35 +1039,35 @@ u8 func0c01_outro[] = {
play_sound(0x0162, CHANNEL_10)
wait_until(865, 0x72)
set_chr_shooting_in_cutscene(CHR_JOANNA, TRUE)
set_chr_shooting_in_cutscene(CHR_BOND, TRUE)
yield
set_chr_shooting_in_cutscene(CHR_JOANNA, TRUE)
set_chr_shooting_in_cutscene(CHR_BOND, TRUE)
yield
set_chr_shooting_in_cutscene(CHR_JOANNA, TRUE)
set_chr_shooting_in_cutscene(CHR_BOND, TRUE)
yield
set_chr_shooting_in_cutscene(CHR_JOANNA, FALSE)
set_chr_shooting_in_cutscene(CHR_BOND, FALSE)
wait_until(870, 0x89)
label(0x8a)
set_chr_shooting_in_cutscene(CHR_JOANNA, TRUE)
set_chr_shooting_in_cutscene(CHR_BOND, TRUE)
yield
if_controller_button_pressed(/*goto*/ 0xb8)
if_timer_gt(960, /*goto*/ 0x08)
goto_first(0x8a)
label(0x08)
set_chr_shooting_in_cutscene(CHR_JOANNA, FALSE)
speak(CHR_JOANNA, 0x2232, 0x747e, CHANNEL_10, COLOR_09_BLUE) // "At least, I hope you can."
set_chr_shooting_in_cutscene(CHR_BOND, FALSE)
speak(CHR_BOND, 0x2232, 0x747e, CHANNEL_10, COLOR_09_BLUE) // "At least, I hope you can."
wait_until(1018, 0x8c)
set_chr_shooting_in_cutscene(CHR_JOANNA, TRUE)
set_chr_shooting_in_cutscene(CHR_BOND, TRUE)
yield
set_chr_shooting_in_cutscene(CHR_JOANNA, TRUE)
set_chr_shooting_in_cutscene(CHR_BOND, TRUE)
yield
set_chr_shooting_in_cutscene(CHR_JOANNA, TRUE)
set_chr_shooting_in_cutscene(CHR_BOND, TRUE)
yield
set_chr_shooting_in_cutscene(CHR_JOANNA, FALSE)
set_chr_shooting_in_cutscene(CHR_BOND, FALSE)
wait_until(1065, 0x94)
play_sound(0x052b, CHANNEL_7)
@@ -1122,13 +1122,13 @@ u8 func0c01_outro[] = {
play_sound(0x00df, CHANNEL_10)
wait_until(1350, 0x9b)
set_chr_shooting_in_cutscene(CHR_JOANNA, TRUE)
set_chr_shooting_in_cutscene(CHR_BOND, TRUE)
yield
set_chr_shooting_in_cutscene(CHR_JOANNA, TRUE)
set_chr_shooting_in_cutscene(CHR_BOND, TRUE)
yield
set_chr_shooting_in_cutscene(CHR_JOANNA, TRUE)
set_chr_shooting_in_cutscene(CHR_BOND, TRUE)
yield
set_chr_shooting_in_cutscene(CHR_JOANNA, FALSE)
set_chr_shooting_in_cutscene(CHR_BOND, FALSE)
play_sound(0x77ba, CHANNEL_10)
play_sound(0x00e4, CHANNEL_10)
@@ -1153,16 +1153,16 @@ u8 func0c01_outro[] = {
u8 func1002_intro[] = {
set_music_track(MUSIC_DEFENSE_INTRO)
camera_movement(0x02bc)
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_function(CHR_CARRINGTON, GFUNC_IDLE)
set_function(0x19, GFUNC_IDLE)
set_function(0x1a, GFUNC_IDLE)
set_chr_flag_bank3(0x16, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_JONATHAN, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x02bd, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x02bd, -1, -1, 0x0600, CHR_BOND, 4)
set_chr_flag_bank3(CHR_CARRINGTON, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(CHR_CARRINGTON, CHRFLAG3_HIDDEN)
set_chr_flag_bank2(CHR_CARRINGTON, CHRFLAG2_00020000)
@@ -1185,7 +1185,7 @@ u8 func1002_intro[] = {
set_cutscene_weapon(0x1a, WEAPON_AR34, WEAPON_NONE)
wait_until(4, 0x71)
speak(CHR_JOANNA, 0x2229, 0x7475, CHANNEL_10, COLOR_06_WHITE) // "All ready, Joanna? We can't keep the Maian delegat..."
speak(CHR_BOND, 0x2229, 0x7475, CHANNEL_10, COLOR_06_WHITE) // "All ready, Joanna? We can't keep the Maian delegat..."
wait_until(72, 0x72)
play_sound(0x0161, CHANNEL_10)
@@ -1194,7 +1194,7 @@ u8 func1002_intro[] = {
play_sound(0x0162, CHANNEL_10)
wait_until(450, 0x74)
speak(CHR_JOANNA, 0x222a, 0x7476, CHANNEL_10, COLOR_09_BLUE) // "Am I ready? What do you mean? I was ready half an ..."
speak(CHR_BOND, 0x222a, 0x7476, CHANNEL_10, COLOR_09_BLUE) // "Am I ready? What do you mean? I was ready half an ..."
wait_until(688, 0x76)
play_sound(0x0163, CHANNEL_10)
@@ -1203,7 +1203,7 @@ u8 func1002_intro[] = {
play_sound(0x0164, CHANNEL_10)
wait_until(800, 0x75)
speak(CHR_JOANNA, 0x222b, 0x7477, CHANNEL_10, COLOR_06_WHITE) // "But you know how it is, Joanna... I had to make su..."
speak(CHR_BOND, 0x222b, 0x7477, CHANNEL_10, COLOR_06_WHITE) // "But you know how it is, Joanna... I had to make su..."
wait_until(822, 0x78)
play_sound(0x0165, CHANNEL_10)
@@ -1245,7 +1245,7 @@ u8 func1002_intro[] = {
play_sound(0x0165, CHANNEL_10)
wait_until(1160, 0x82)
speak(CHR_JOANNA, 0x222c, 0x7478, CHANNEL_10, COLOR_09_BLUE) // "They should keep you away from mirrors. Nervous?"
speak(CHR_BOND, 0x222c, 0x7478, CHANNEL_10, COLOR_09_BLUE) // "They should keep you away from mirrors. Nervous?"
wait_until(1170, 0x86)
play_sound(0x0166, CHANNEL_10)
@@ -1257,7 +1257,7 @@ u8 func1002_intro[] = {
play_sound(0x0168, CHANNEL_10)
wait_until(1440, 0x89)
speak(CHR_JOANNA, 0x222d, 0x7479, CHANNEL_10, COLOR_06_WHITE) // "Very. I've waited for this moment for so many year..."
speak(CHR_BOND, 0x222d, 0x7479, CHANNEL_10, COLOR_06_WHITE) // "Very. I've waited for this moment for so many year..."
wait_until(1442, 0x8a)
play_sound(0x0162, CHANNEL_10)
@@ -1290,7 +1290,7 @@ u8 func1002_intro[] = {
play_sound(0x00b5, CHANNEL_10)
wait_until(2410, 0x94)
speak(CHR_JOANNA, 0x222e, 0x747a, CHANNEL_10, COLOR_06_WHITE) // "Where did that come from?"
speak(CHR_BOND, 0x222e, 0x747a, CHANNEL_10, COLOR_06_WHITE) // "Where did that come from?"
wait_until(2416, 0x95)
play_sound(0x0165, CHANNEL_10)
@@ -1308,7 +1308,7 @@ u8 func1002_intro[] = {
play_sound(0x00b2, CHANNEL_10)
wait_until(2628, 0x9b)
speak(CHR_JOANNA, 0x222f, 0x747b, CHANNEL_10, COLOR_09_BLUE) // "It was up on ground level..."
speak(CHR_BOND, 0x222f, 0x747b, CHANNEL_10, COLOR_09_BLUE) // "It was up on ground level..."
wait_until(2804, 0x9c)
play_sound(0x00b5, CHANNEL_10)
@@ -1316,7 +1316,7 @@ u8 func1002_intro[] = {
wait_until(2910, 0x9e)
play_sound(0x0165, CHANNEL_10)
set_cutscene_weapon(0x1a, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_JOANNA, WEAPON_AR34, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_AR34, WEAPON_NONE)
wait_until(2940, 0x9f)
play_sound(0x03c5, CHANNEL_10)
@@ -1325,7 +1325,7 @@ u8 func1002_intro[] = {
play_sound(0x0168, CHANNEL_10)
wait_until(2970, 0x9d)
speak(CHR_JOANNA, 0x2230, 0x747c, CHANNEL_10, COLOR_09_BLUE) // "Looks like someone doesn't know when to quit. We'v..."
speak(CHR_BOND, 0x2230, 0x747c, CHANNEL_10, COLOR_09_BLUE) // "Looks like someone doesn't know when to quit. We'v..."
wait_until(2984, 0xa1)
play_sound(0x0165, CHANNEL_10)
@@ -1407,9 +1407,9 @@ u8 func1002_intro[] = {
set_chr_flag_bank3(CHR_SKEDAR4, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_SKEDAR4, CHRFLAG2_00020000)
animation(0x02c3, -1, -1, 0x0600, CHR_SKEDAR4, 4)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x02c4, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x02c4, -1, -1, 0x0600, CHR_BOND, 4)
show_object(0x52)
set_object_flag_bank1(0x52, OBJECTFLAG1_04000000)
set_object_flag_bank2(0x52, OBJECTFLAG2_00000010)
@@ -1488,10 +1488,10 @@ u8 func1002_intro[] = {
mute_channel(CHANNEL_6)
mute_channel(CHANNEL_5)
mute_channel(CHANNEL_10)
set_cutscene_weapon(CHR_JOANNA, WEAPON_AR34, WEAPON_NONE)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x02c4, -2, -1, 0x0600, CHR_JOANNA, 2)
set_cutscene_weapon(CHR_BOND, WEAPON_AR34, WEAPON_NONE)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x02c4, -2, -1, 0x0600, CHR_BOND, 2)
unset_chr_flag_bank3(CHR_CARRINGTON, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_CARRINGTON, CHRFLAG2_00020000)
animation(0x02be, -2, -1, 0x0600, CHR_CARRINGTON, 2)
@@ -1520,8 +1520,8 @@ u8 func1002_intro[] = {
set_stage_flag(STAGEFLAG_INTRO_FINISHED)
restart_default_music
reset_ambience
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
remove_chr(0x19)
remove_chr(0x1a)
set_function(0x19, GFUNC_IDLE)
@@ -1567,7 +1567,7 @@ u8 func100c_check_carrington_dead[] = {
endloop(0x04)
label(0x2e)
message(CHR_JOANNA, 0x2213) // "Carrington has been killed."
message(CHR_BOND, 0x2213) // "Carrington has been killed."
set_stage_flag(STAGEFLAG_CARRINGTON_DEAD)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -1633,7 +1633,7 @@ u8 func0414_firingrange_hostage[] = {
dprint 'D','E','T','E','C','T','E','D','\n',0,
set_return_function(CHR_SELF, FUNC_FIRINGRANGE_HOSTAGE)
set_onshot_function(FUNC_FIRINGRANGE_HOSTAGE)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
set_function(CHR_SELF, GFUNC_IDLE)
// Enemy not detected
@@ -1744,9 +1744,9 @@ u8 func041a_hostage_holo[] = {
// Wait until player in sight, or 2 seconds
beginloop(0x0a)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
if_chr_sees_player(/*goto*/ 0x08)
set_target_chr(CHR_VELVET)
set_target_chr(CHR_COOP)
if_chr_sees_player(/*goto*/ 0x08)
if_timer_gt(120, /*goto*/ 0x08)
endloop(0x0a)
@@ -1881,9 +1881,9 @@ u8 func041f_holoclone[] = {
animation(ANIM_SURPRISED_0202, 0, -1, 0x0010, CHR_SELF, 2) \
\
beginloop(0xba) \
set_target_chr(CHR_JOANNA) \
set_target_chr(CHR_BOND) \
if_chr_sees_player(/*goto*/ 0xbb) \
set_target_chr(CHR_VELVET) \
set_target_chr(CHR_COOP) \
if_chr_sees_player(/*goto*/ 0xbb) \
if_timer_gt(60, /*goto*/ 0xbb) \
endloop(0xba) \
@@ -1896,7 +1896,7 @@ u8 func041f_holoclone[] = {
yield \
try_aim_and_shoot_thing1(0x0220, 0x0000, /*goto*/ 0xb9) \
label(0xb9) \
say_quip(CHR_JOANNA, 0x00, 0x19, 0x02, 0x01, BANK_0, 0x00, 0x00) \
say_quip(CHR_BOND, 0x00, 0x19, 0x02, 0x01, BANK_0, 0x00, 0x00) \
try_aim_and_shoot_thing2(0x0200, 0x0000, /*goto*/ 0x0a) \
\
beginloop(0x0a) \
@@ -1906,7 +1906,7 @@ u8 func041f_holoclone[] = {
label(0x08) \
set_onshot_function(GFUNC_UNALERTED) \
set_return_function(CHR_SELF, GFUNC_UNALERTED) \
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
@@ -1972,13 +1972,13 @@ u8 func0425_hostage_thank_and_run[] = {
set_function(CHR_SELF, GFUNC_IDLE)
label(0x03)
set_target_chr(CHR_VELVET)
set_target_chr(CHR_COOP)
if_chr_sees_player(/*goto*/ 0x2e)
set_follow_chr(CHR_JOANNA)
set_follow_chr(CHR_BOND)
goto_next(0x08)
label(0x2e)
set_follow_chr(CHR_VELVET)
set_follow_chr(CHR_COOP)
label(0x08)
restart_timer
@@ -2012,14 +2012,14 @@ u8 func0425_hostage_thank_and_run[] = {
endloop(0x11)
// Unreachable
set_target_chr(FOLLOW_CHR)
set_target_chr(CHR_PRESET)
beginloop(0x10)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
if_chr_sees_player(/*goto*/ 0x2e)
set_target_chr(CHR_COUNTEROP)
set_target_chr(CHR_ANTI)
if_chr_sees_player(/*goto*/ 0x2e)
set_target_chr(CHR_VELVET)
set_target_chr(CHR_COOP)
if_chr_sees_player(/*goto*/ 0x2e)
if_chr_distance_gt(500, /*goto*/ 0x08)
label(0x2e)
@@ -2064,13 +2064,13 @@ u8 func0427_drop_devastator[] = {
set_function(CHR_SELF, GFUNC_IDLE)
label(0x03)
set_target_chr(CHR_VELVET)
set_target_chr(CHR_COOP)
if_chr_sees_player(/*goto*/ 0x2e)
set_follow_chr(CHR_JOANNA)
set_follow_chr(CHR_BOND)
goto_next(0x08)
label(0x2e)
set_follow_chr(CHR_VELVET)
set_follow_chr(CHR_COOP)
label(0x08)
restart_timer
@@ -2101,7 +2101,7 @@ u8 func0427_drop_devastator[] = {
endloop(0x11)
// Unreachable
set_target_chr(FOLLOW_CHR)
set_target_chr(CHR_PRESET)
beginloop(0x10)
if_chr_sees_player(/*goto*/ 0x2e)
@@ -2204,9 +2204,9 @@ u8 func042b_deviceroom_hostage[] = {
set_function(CHR_SELF, GFUNC_IDLE)
label(0x12)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
if_chr_sees_player(/*goto*/ 0x2e)
set_target_chr(CHR_VELVET)
set_target_chr(CHR_COOP)
if_chr_sees_player(/*goto*/ 0x2e)
stop_chr
goto_next(0x10)
@@ -2363,7 +2363,7 @@ u8 func0432_taker_attack[] = {
yield
try_aim_and_shoot_thing1(0x0220, 0x0000, /*goto*/ 0xb9)
label(0xb9)
say_quip(CHR_JOANNA, 0x00, 0x19, 0x02, 0x01, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x00, 0x19, 0x02, 0x01, BANK_0, 0x00, 0x00)
try_aim_and_shoot_thing2(0x0200, 0x0000, /*goto*/ 0x0a)
beginloop(0x0a)
@@ -2374,7 +2374,7 @@ u8 func0432_taker_attack[] = {
label(0x0f)
set_onshot_function(GFUNC_UNALERTED)
set_return_function(CHR_SELF, GFUNC_UNALERTED)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
endfunction
};
@@ -2445,7 +2445,7 @@ u8 func0433_inforoom_hostage[] = {
unset_self_flag_bankx(CHRFLAG0_00000004, BANK_0)
set_onshot_function(FUNC_INFOROOM_HOSTAGE)
set_return_function(CHR_SELF, FUNC_INFOROOM_HOSTAGE)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
label(0x0d)
if_kill_count_gt(1, /*goto*/ 0x2e)
@@ -2631,7 +2631,7 @@ u8 func1013_check_hostages_saved[] = {
// All rooms done
label(0x2e)
if_stage_flag_eq(STAGEFLAG_TOO_MANY_HOSTAGES_KILLED, TRUE, /*goto*/ 0x2e)
message(CHR_JOANNA, 0x2211) // "Hostages have been saved."
message(CHR_BOND, 0x2211) // "Hostages have been saved."
set_stage_flag(STAGEFLAG_ENOUGH_HOSTAGES_SAVED)
label(0x2e)
@@ -2649,11 +2649,11 @@ u8 func1014_carrington_messages[] = {
#define carrington_sanity_checks \
if_chr_dying(CHR_CARRINGTON, /*goto*/ 0xd9) \
if_chr_dying(CHR_JOANNA, /*goto*/ 0x05) \
if_chr_dying(CHR_BOND, /*goto*/ 0x05) \
goto_next(0x06) \
\
label(0x05) \
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0xd9) \
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0xd9) \
label(0x06)
@@ -2672,7 +2672,7 @@ u8 func1014_carrington_messages[] = {
label(0x08)
restart_timer
if_difficulty_lt(DIFF_SA, /*goto*/ 0x0d)
speak(CHR_JOANNA, 0x2214, 0x8193, CHANNEL_6, COLOR_06_WHITE) // "Joanna - we're under attack."
speak(CHR_BOND, 0x2214, 0x8193, CHANNEL_6, COLOR_06_WHITE) // "Joanna - we're under attack."
beginloop(0x0b)
carrington_sanity_checks
@@ -2680,7 +2680,7 @@ u8 func1014_carrington_messages[] = {
endloop(0x0b)
label(0x08)
speak(CHR_JOANNA, 0x2215, 0x8194, CHANNEL_6, COLOR_06_WHITE) // "Get the guns back on line - hurry."
speak(CHR_BOND, 0x2215, 0x8194, CHANNEL_6, COLOR_06_WHITE) // "Get the guns back on line - hurry."
beginloop(0x0c)
carrington_sanity_checks
@@ -2708,7 +2708,7 @@ u8 func1014_carrington_messages[] = {
label(0xda)
restart_timer
speak(CHR_JOANNA, 0x2216, 0x8195, CHANNEL_6, COLOR_06_WHITE) // "The Skedar have taken hostages."
speak(CHR_BOND, 0x2216, 0x8195, CHANNEL_6, COLOR_06_WHITE) // "The Skedar have taken hostages."
beginloop(0x0e)
carrington_sanity_checks
@@ -2717,7 +2717,7 @@ u8 func1014_carrington_messages[] = {
label(0x08)
restart_timer
speak(CHR_JOANNA, 0x2217, 0x8196, CHANNEL_6, COLOR_06_WHITE) // "Get up to the offices and save them."
speak(CHR_BOND, 0x2217, 0x8196, CHANNEL_6, COLOR_06_WHITE) // "Get up to the offices and save them."
beginloop(0x0f)
carrington_sanity_checks
@@ -2745,7 +2745,7 @@ u8 func1014_carrington_messages[] = {
label(0x08)
restart_timer
speak(CHR_JOANNA, 0x2218, 0x8197, CHANNEL_6, COLOR_06_WHITE) // "They're using a new form of shield technology."
speak(CHR_BOND, 0x2218, 0x8197, CHANNEL_6, COLOR_06_WHITE) // "They're using a new form of shield technology."
beginloop(0x11)
carrington_sanity_checks
@@ -2754,7 +2754,7 @@ u8 func1014_carrington_messages[] = {
label(0x08)
restart_timer
speak(CHR_JOANNA, 0x2219, 0x8198, CHANNEL_6, COLOR_06_WHITE) // "Foster was working on a new weapon which may be us..."
speak(CHR_BOND, 0x2219, 0x8198, CHANNEL_6, COLOR_06_WHITE) // "Foster was working on a new weapon which may be us..."
beginloop(0x12)
carrington_sanity_checks
@@ -2777,7 +2777,7 @@ u8 func1014_carrington_messages[] = {
label(0x08)
restart_timer
speak(CHR_JOANNA, 0x221a, 0x8199, CHANNEL_6, COLOR_06_WHITE) // "Damn it. My office... If they get access..."
speak(CHR_BOND, 0x221a, 0x8199, CHANNEL_6, COLOR_06_WHITE) // "Damn it. My office... If they get access..."
beginloop(0xc1)
carrington_sanity_checks
@@ -2786,7 +2786,7 @@ u8 func1014_carrington_messages[] = {
label(0x08)
restart_timer
speak(CHR_JOANNA, 0x221b, 0x819a, CHANNEL_6, COLOR_06_WHITE) // "Get there first, Jo, and destroy the files."
speak(CHR_BOND, 0x221b, 0x819a, CHANNEL_6, COLOR_06_WHITE) // "Get there first, Jo, and destroy the files."
beginloop(0xc2)
carrington_sanity_checks
@@ -2803,24 +2803,24 @@ u8 func1014_carrington_messages[] = {
// Wait until no one in skedar shuttle area
beginloop(0x71)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0045, /*goto*/ 0x2e)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0047, /*goto*/ 0x2e)
if_chr_in_room(CHR_JOANNA, 0x00, 0x004d, /*goto*/ 0x2e)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0055, /*goto*/ 0x2e)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0046, /*goto*/ 0x2e)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0xe5)
if_chr_in_room(CHR_VELVET, 0x00, 0x0045, /*goto*/ 0x2e)
if_chr_in_room(CHR_VELVET, 0x00, 0x0047, /*goto*/ 0x2e)
if_chr_in_room(CHR_VELVET, 0x00, 0x004d, /*goto*/ 0x2e)
if_chr_in_room(CHR_VELVET, 0x00, 0x0055, /*goto*/ 0x2e)
if_chr_in_room(CHR_VELVET, 0x00, 0x0046, /*goto*/ 0x2e)
if_chr_in_room(CHR_BOND, 0x00, 0x0045, /*goto*/ 0x2e)
if_chr_in_room(CHR_BOND, 0x00, 0x0047, /*goto*/ 0x2e)
if_chr_in_room(CHR_BOND, 0x00, 0x004d, /*goto*/ 0x2e)
if_chr_in_room(CHR_BOND, 0x00, 0x0055, /*goto*/ 0x2e)
if_chr_in_room(CHR_BOND, 0x00, 0x0046, /*goto*/ 0x2e)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0xe5)
if_chr_in_room(CHR_COOP, 0x00, 0x0045, /*goto*/ 0x2e)
if_chr_in_room(CHR_COOP, 0x00, 0x0047, /*goto*/ 0x2e)
if_chr_in_room(CHR_COOP, 0x00, 0x004d, /*goto*/ 0x2e)
if_chr_in_room(CHR_COOP, 0x00, 0x0055, /*goto*/ 0x2e)
if_chr_in_room(CHR_COOP, 0x00, 0x0046, /*goto*/ 0x2e)
label(0xe5)
if_chr_death_animation_finished(CHR_COUNTEROP, /*goto*/ 0xe5)
if_chr_in_room(CHR_COUNTEROP, 0x00, 0x0045, /*goto*/ 0x2e)
if_chr_in_room(CHR_COUNTEROP, 0x00, 0x0047, /*goto*/ 0x2e)
if_chr_in_room(CHR_COUNTEROP, 0x00, 0x004d, /*goto*/ 0x2e)
if_chr_in_room(CHR_COUNTEROP, 0x00, 0x0055, /*goto*/ 0x2e)
if_chr_in_room(CHR_COUNTEROP, 0x00, 0x0046, /*goto*/ 0x2e)
if_chr_death_animation_finished(CHR_ANTI, /*goto*/ 0xe5)
if_chr_in_room(CHR_ANTI, 0x00, 0x0045, /*goto*/ 0x2e)
if_chr_in_room(CHR_ANTI, 0x00, 0x0047, /*goto*/ 0x2e)
if_chr_in_room(CHR_ANTI, 0x00, 0x004d, /*goto*/ 0x2e)
if_chr_in_room(CHR_ANTI, 0x00, 0x0055, /*goto*/ 0x2e)
if_chr_in_room(CHR_ANTI, 0x00, 0x0046, /*goto*/ 0x2e)
label(0xe5)
goto_next(0x08)
@@ -2837,7 +2837,7 @@ u8 func1014_carrington_messages[] = {
label(0x08)
restart_timer
speak(CHR_JOANNA, 0x221c, 0x819b, CHANNEL_6, COLOR_06_WHITE) // "Things are desperate. They've planted a bomb."
speak(CHR_BOND, 0x221c, 0x819b, CHANNEL_6, COLOR_06_WHITE) // "Things are desperate. They've planted a bomb."
beginloop(0xc5)
carrington_sanity_checks
@@ -2846,7 +2846,7 @@ u8 func1014_carrington_messages[] = {
label(0x08)
restart_timer
speak(CHR_JOANNA, 0x221d, 0x819c, CHANNEL_6, COLOR_06_WHITE) // "Find it and get it out of the building."
speak(CHR_BOND, 0x221d, 0x819c, CHANNEL_6, COLOR_06_WHITE) // "Find it and get it out of the building."
beginloop(0xc6)
carrington_sanity_checks
@@ -2877,7 +2877,7 @@ u8 func1014_carrington_messages[] = {
label(0x2e)
carrington_sanity_checks
restart_timer
speak(CHR_JOANNA, 0x2220, 0x819d, CHANNEL_6, COLOR_06_WHITE) // "Well done, Joanna. We're nearly clear..."
speak(CHR_BOND, 0x2220, 0x819d, CHANNEL_6, COLOR_06_WHITE) // "Well done, Joanna. We're nearly clear..."
beginloop(0xc9)
if_timer_gt(180, /*goto*/ 0x08)
@@ -2885,7 +2885,7 @@ u8 func1014_carrington_messages[] = {
label(0x08)
carrington_sanity_checks
speak(CHR_JOANNA, 0x2221, 0x819e, CHANNEL_6, COLOR_06_WHITE) // "The last dropship is waiting for you. Hurry."
speak(CHR_BOND, 0x2221, 0x819e, CHANNEL_6, COLOR_06_WHITE) // "The last dropship is waiting for you. Hurry."
beginloop(0xca)
if_timer_gt(180, /*goto*/ 0xcb)
@@ -2902,15 +2902,15 @@ u8 func1014_carrington_messages[] = {
endloop(0xcb)
label(0x2e)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x2e)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x2e)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x2e)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x2e)
if_chr_dying(CHR_BOND, /*goto*/ 0x2e)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x2e)
goto_next(0x08)
label(0x2e)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x2e)
if_chr_dying(CHR_VELVET, /*goto*/ 0x2e)
if_chr_unloaded(CHR_VELVET, /*goto*/ 0x2e)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2e)
if_chr_dying(CHR_COOP, /*goto*/ 0x2e)
if_chr_unloaded(CHR_COOP, /*goto*/ 0x2e)
goto_next(0x08)
label(0x2e)
@@ -2918,7 +2918,7 @@ u8 func1014_carrington_messages[] = {
set_function(CHR_SELF, GFUNC_IDLE)
label(0x08)
set_invincible(CHR_JOANNA)
set_invincible(CHR_BOND)
set_function(CHR_SELF, 0x0418)
label(0xd9)
@@ -2937,7 +2937,7 @@ u8 func1015_firingrange_pc[] = {
reloop(0x0a)
label(0x2f)
message(CHR_JOANNA, 0x2222) // "Critical mission object has been destroyed."
message(CHR_BOND, 0x2222) // "Critical mission object has been destroyed."
set_stage_flag(STAGEFLAG_FR_PC_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -3027,7 +3027,7 @@ u8 func040c_init_clone4[] = {
};
u8 func040b_clone4[] = {
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
try_run_to_target_chr(/*goto*/ 0x2e)
label(0x2e)
set_function(CHR_SELF, GFUNC_ALERTED)
@@ -3146,7 +3146,7 @@ u8 func0412_init_clone6[] = {
};
u8 func0411_clone6[] = {
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
try_run_to_target_chr(/*goto*/ 0x2e)
label(0x2e)
set_function(CHR_SELF, GFUNC_ALERTED)
@@ -3166,24 +3166,24 @@ u8 func1022_skedar_shuttle[] = {
label(0x08)
beginloop(0x71)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0045, /*goto*/ 0x2e)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0047, /*goto*/ 0x2e)
if_chr_in_room(CHR_JOANNA, 0x00, 0x004d, /*goto*/ 0x2e)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0055, /*goto*/ 0x2e)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0046, /*goto*/ 0x2e)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0xe5)
if_chr_in_room(CHR_VELVET, 0x00, 0x0045, /*goto*/ 0x2e)
if_chr_in_room(CHR_VELVET, 0x00, 0x0047, /*goto*/ 0x2e)
if_chr_in_room(CHR_VELVET, 0x00, 0x004d, /*goto*/ 0x2e)
if_chr_in_room(CHR_VELVET, 0x00, 0x0055, /*goto*/ 0x2e)
if_chr_in_room(CHR_VELVET, 0x00, 0x0046, /*goto*/ 0x2e)
if_chr_in_room(CHR_BOND, 0x00, 0x0045, /*goto*/ 0x2e)
if_chr_in_room(CHR_BOND, 0x00, 0x0047, /*goto*/ 0x2e)
if_chr_in_room(CHR_BOND, 0x00, 0x004d, /*goto*/ 0x2e)
if_chr_in_room(CHR_BOND, 0x00, 0x0055, /*goto*/ 0x2e)
if_chr_in_room(CHR_BOND, 0x00, 0x0046, /*goto*/ 0x2e)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0xe5)
if_chr_in_room(CHR_COOP, 0x00, 0x0045, /*goto*/ 0x2e)
if_chr_in_room(CHR_COOP, 0x00, 0x0047, /*goto*/ 0x2e)
if_chr_in_room(CHR_COOP, 0x00, 0x004d, /*goto*/ 0x2e)
if_chr_in_room(CHR_COOP, 0x00, 0x0055, /*goto*/ 0x2e)
if_chr_in_room(CHR_COOP, 0x00, 0x0046, /*goto*/ 0x2e)
label(0xe5)
if_chr_death_animation_finished(CHR_COUNTEROP, /*goto*/ 0xe5)
if_chr_in_room(CHR_COUNTEROP, 0x00, 0x0045, /*goto*/ 0x2e)
if_chr_in_room(CHR_COUNTEROP, 0x00, 0x0047, /*goto*/ 0x2e)
if_chr_in_room(CHR_COUNTEROP, 0x00, 0x004d, /*goto*/ 0x2e)
if_chr_in_room(CHR_COUNTEROP, 0x00, 0x0055, /*goto*/ 0x2e)
if_chr_in_room(CHR_COUNTEROP, 0x00, 0x0046, /*goto*/ 0x2e)
if_chr_death_animation_finished(CHR_ANTI, /*goto*/ 0xe5)
if_chr_in_room(CHR_ANTI, 0x00, 0x0045, /*goto*/ 0x2e)
if_chr_in_room(CHR_ANTI, 0x00, 0x0047, /*goto*/ 0x2e)
if_chr_in_room(CHR_ANTI, 0x00, 0x004d, /*goto*/ 0x2e)
if_chr_in_room(CHR_ANTI, 0x00, 0x0055, /*goto*/ 0x2e)
if_chr_in_room(CHR_ANTI, 0x00, 0x0046, /*goto*/ 0x2e)
label(0xe5)
goto_next(0x08)
@@ -3228,7 +3228,7 @@ u8 func1022_skedar_shuttle[] = {
hide_countdown_timer
stop_countdown_timer
destroy_object(OBJ_SKEDAR_SHUTTLE)
explosions_around_chr(CHR_JOANNA)
explosions_around_chr(CHR_BOND)
restart_timer
beginloop(0x72)
@@ -3236,13 +3236,13 @@ u8 func1022_skedar_shuttle[] = {
endloop(0x72)
label(0x2e)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x2f)
explosions_around_chr(CHR_VELVET)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2f)
explosions_around_chr(CHR_COOP)
goto_next(0x41)
label(0x2f)
if_chr_death_animation_finished(CHR_COUNTEROP, /*goto*/ 0x41)
explosions_around_chr(CHR_COUNTEROP)
if_chr_death_animation_finished(CHR_ANTI, /*goto*/ 0x41)
explosions_around_chr(CHR_ANTI)
label(0x41)
restart_timer
@@ -3458,7 +3458,7 @@ u8 func101b_msg_autodefenses[] = {
label(0x2e)
yield
yield
speak(CHR_JOANNA, 0x2223, 0x73d8, CHANNEL_6, COLOR_09_BLUE) // "The autodefenses will really help me out."
speak(CHR_BOND, 0x2223, 0x73d8, CHANNEL_6, COLOR_09_BLUE) // "The autodefenses will really help me out."
label(0x0a)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -3504,7 +3504,7 @@ u8 func101d_msg_countingonme[] = {
endloop(0x0a)
label(0x2e)
speak(CHR_JOANNA, 0x2225, 0x73da, CHANNEL_6, COLOR_09_BLUE) // "I'll have to go carefully... The hostages are coun..."
speak(CHR_BOND, 0x2225, 0x73da, CHANNEL_6, COLOR_09_BLUE) // "I'll have to go carefully... The hostages are coun..."
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
@@ -3517,7 +3517,7 @@ u8 func101e_msg_wontknow[] = {
endloop(0x04)
label(0x2e)
speak(CHR_JOANNA, 0x2226, 0x73db, CHANNEL_6, COLOR_09_BLUE) // "Well, at least I won't know if I'm doing anything ..."
speak(CHR_BOND, 0x2226, 0x73db, CHANNEL_6, COLOR_09_BLUE) // "Well, at least I won't know if I'm doing anything ..."
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
@@ -3609,9 +3609,9 @@ u8 func1023_check_skeder_shuttle_destroyed[] = {
label(0x2e)
if_stage_flag_eq(STAGEFLAG_BOMB_AIRBORNE, TRUE, /*goto*/ 0x0f)
message(CHR_JOANNA, 0x2227) // "The bomb has been detonated..."
message(CHR_BOND, 0x2227) // "The bomb has been detonated..."
set_stage_flag(STAGEFLAG_BOMB_EXPLODING_ON_GROUND)
explosions_around_chr(CHR_JOANNA)
explosions_around_chr(CHR_BOND)
restart_timer
beginloop(0x72)
@@ -3619,13 +3619,13 @@ u8 func1023_check_skeder_shuttle_destroyed[] = {
endloop(0x72)
label(0x2e)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x2f)
explosions_around_chr(CHR_VELVET)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2f)
explosions_around_chr(CHR_COOP)
goto_next(0x41)
label(0x2f)
if_chr_death_animation_finished(CHR_COUNTEROP, /*goto*/ 0x41)
explosions_around_chr(CHR_COUNTEROP)
if_chr_death_animation_finished(CHR_ANTI, /*goto*/ 0x41)
explosions_around_chr(CHR_ANTI)
label(0x41)
restart_timer
@@ -3700,19 +3700,19 @@ u8 func1027_uplink[] = {
label(0x2f)
consider_coop_for_p1p2_chr(CHR_SELF)
set_target_chr(CHR_P1P2)
if_chr_activated_object(TARGET_CHR, OBJ_SKEDAR_SHUTTLE, /*goto*/ 0x2e)
if_chr_activated_object(CHR_TARGET, OBJ_SKEDAR_SHUTTLE, /*goto*/ 0x2e)
reloop(0x04)
// Activated
label(0x08)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_DATAUPLINK, /*goto*/ 0x2e)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_DATAUPLINK, /*goto*/ 0x2e)
play_sound(0x8116, -1)
message(TARGET_CHR, 0x2233) // "You need the Data Uplink."
message(CHR_TARGET, 0x2233) // "You need the Data Uplink."
reloop(0x04)
// Activated with uplink
label(0x2e)
message(TARGET_CHR, 0x2234) // "Connection has been made."
message(CHR_TARGET, 0x2234) // "Connection has been made."
restart_timer
beginloop(0x0a)
@@ -3721,11 +3721,11 @@ u8 func1027_uplink[] = {
label(0x2f)
if_timer_gt(60, /*goto*/ 0x08)
if_chr_in_room(TARGET_CHR, 0x00, 0x0045, /*goto*/ 0x2e)
if_chr_in_room(CHR_TARGET, 0x00, 0x0045, /*goto*/ 0x2e)
goto_next(0x0b)
label(0x2e)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_DATAUPLINK, /*goto*/ 0x2e)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_DATAUPLINK, /*goto*/ 0x2e)
goto_next(0x0b)
label(0x2e)
@@ -3733,7 +3733,7 @@ u8 func1027_uplink[] = {
// 1 second since uplink
label(0x08)
message(TARGET_CHR, 0x2235) // "Bypassing security systems."
message(CHR_TARGET, 0x2235) // "Bypassing security systems."
restart_timer
assign_sound(0x01bf, CHANNEL_5)
control_sound_from_object(CHANNEL_5, OBJ_SKEDAR_SHUTTLE, TRUE)
@@ -3744,11 +3744,11 @@ u8 func1027_uplink[] = {
label(0x2f)
if_timer_gt(400, /*goto*/ 0x08)
if_chr_in_room(TARGET_CHR, 0x00, 0x0045, /*goto*/ 0x2e)
if_chr_in_room(CHR_TARGET, 0x00, 0x0045, /*goto*/ 0x2e)
goto_next(0x0b)
label(0x2e)
if_chr_weapon_equipped(TARGET_CHR, WEAPON_DATAUPLINK, /*goto*/ 0x2e)
if_chr_weapon_equipped(CHR_TARGET, WEAPON_DATAUPLINK, /*goto*/ 0x2e)
goto_next(0x0b)
label(0x2e)
@@ -3759,9 +3759,9 @@ u8 func1027_uplink[] = {
mute_channel(CHANNEL_5)
assign_sound(0x01c1, CHANNEL_6)
control_sound_from_object(CHANNEL_6, OBJ_SKEDAR_SHUTTLE, TRUE)
message(TARGET_CHR, 0x2236) // "Virus has been downloaded successfully."
message(CHR_TARGET, 0x2236) // "Virus has been downloaded successfully."
yield
message(TARGET_CHR, 0x2237) // "Ship's engines have been activated."
message(CHR_TARGET, 0x2237) // "Ship's engines have been activated."
set_stage_flag(STAGEFLAG_TRIGGER_SHUTTLE_TAKEOFF)
beginloop(0x14)
@@ -3774,7 +3774,7 @@ u8 func1027_uplink[] = {
// Connection broken
label(0x0b)
message(TARGET_CHR, 0x2238) // "Connection to ship has been broken."
message(CHR_TARGET, 0x2238) // "Connection to ship has been broken."
mute_channel(CHANNEL_5)
assign_sound(0x01c0, CHANNEL_6)
control_sound_from_object(CHANNEL_6, OBJ_SKEDAR_SHUTTLE, TRUE)
@@ -3846,19 +3846,19 @@ u8 func102b_safedoor_immunity[] = {
set_function(CHR_SELF, GFUNC_IDLE)
label(0x2e)
if_chr_in_room(CHR_JOANNA, 0x00, 0x000c, /*goto*/ 0x2e)
if_chr_in_room(CHR_BOND, 0x00, 0x000c, /*goto*/ 0x2e)
goto_next(0x0b)
label(0x2e)
if_chr_weapon_equipped(CHR_JOANNA, WEAPON_LASER, /*goto*/ 0x0f)
if_chr_weapon_equipped(CHR_BOND, WEAPON_LASER, /*goto*/ 0x0f)
// Jo not in office room or laser not equipped
label(0x0b)
if_chr_in_room(CHR_VELVET, 0x00, 0x000c, /*goto*/ 0x2e)
if_chr_in_room(CHR_COOP, 0x00, 0x000c, /*goto*/ 0x2e)
goto_next(0x0e)
label(0x2e)
if_chr_weapon_equipped(CHR_VELVET, WEAPON_LASER, /*goto*/ 0x0f)
if_chr_weapon_equipped(CHR_COOP, WEAPON_LASER, /*goto*/ 0x0f)
// No one in office room with laser equipped
label(0x0e)
@@ -3878,7 +3878,7 @@ u8 func102b_safedoor_immunity[] = {
u8 func102c_door_flags[] = {
yield
if_chr_death_animation_finished(CHR_COUNTEROP, /*goto*/ 0x0f)
if_chr_death_animation_finished(CHR_ANTI, /*goto*/ 0x0f)
lock_door(0x23, 0x40)
lock_door(0x24, 0x40)
set_object_flag_bank1(0x23, OBJECTFLAG1_00000004)
@@ -3893,12 +3893,12 @@ u8 func102c_door_flags[] = {
set_object_flag_bank1(0x19, OBJECTFLAG1_00000004)
beginloop(0xe4)
if_chr_activated_object(CHR_JOANNA, 0x23, /*goto*/ 0x0a)
if_chr_activated_object(CHR_JOANNA, 0x23, /*goto*/ 0x0a)
if_chr_activated_object(CHR_JOANNA, 0x43, /*goto*/ 0x0b)
if_chr_activated_object(CHR_JOANNA, 0x44, /*goto*/ 0x0b)
if_chr_activated_object(CHR_JOANNA, 0x54, /*goto*/ 0x0c)
if_chr_activated_object(CHR_JOANNA, 0x19, /*goto*/ 0x0d)
if_chr_activated_object(CHR_BOND, 0x23, /*goto*/ 0x0a)
if_chr_activated_object(CHR_BOND, 0x23, /*goto*/ 0x0a)
if_chr_activated_object(CHR_BOND, 0x43, /*goto*/ 0x0b)
if_chr_activated_object(CHR_BOND, 0x44, /*goto*/ 0x0b)
if_chr_activated_object(CHR_BOND, 0x54, /*goto*/ 0x0c)
if_chr_activated_object(CHR_BOND, 0x19, /*goto*/ 0x0d)
reloop(0xe4)
label(0x0a)
+139 -139
View File
@@ -542,7 +542,7 @@ u8 func1400_setup_counterop[] = {
set_object_flag_bank0(OBJ_HANGARLIFT_ELVIS, OBJECTFLAG0_DEACTIVATED)
set_object_flag_bank0(OBJ_HANGARLIFT_JO, OBJECTFLAG0_DEACTIVATED)
yield
set_chr_team(CHR_COUNTEROP, TEAM_ENEMY)
set_chr_team(CHR_ANTI, TEAM_ENEMY)
set_function(CHR_SELF, GFUNC_REBUILD_GROUPS)
endfunction
};
@@ -552,17 +552,17 @@ u8 func1019_check_shields_lowered[] = {
if_object_in_good_condition(OBJ_SHIELDCONSOLE1, /*goto*/ 0x06)
if_object_in_good_condition(OBJ_SHIELDCONSOLE2, /*goto*/ 0x06)
if_object_in_good_condition(OBJ_SHIELDCONSOLE3, /*goto*/ 0x06)
message(CHR_JOANNA, 0x260a) // "Ship's shields have been lowered."
message(CHR_BOND, 0x260a) // "Ship's shields have been lowered."
set_stage_flag(STAGEFLAG_SHIELDS_DISABLED)
if_difficulty_lt(DIFF_PA, /*goto*/ 0x09)
restart_timer
beginloop(0x08)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0002, /*goto*/ 0x2c)
if_chr_in_room(CHR_BOND, 0x00, 0x0002, /*goto*/ 0x2c)
endloop(0x08)
label(0x2c)
speak(CHR_JOANNA, 0x2611, 0x81a1, CHANNEL_6, COLOR_04_ORANGE) // "You've got to open the hangar doors so we can dock..."
speak(CHR_BOND, 0x2611, 0x81a1, CHANNEL_6, COLOR_04_ORANGE) // "You've got to open the hangar doors so we can dock..."
set_function(CHR_SELF, GFUNC_IDLE)
label(0x06)
@@ -587,7 +587,7 @@ u8 func1004_check_hangar_doors_opened[] = {
if_object_in_good_condition(OBJ_HANGARDOORCONSOLE, /*goto*/ 0x2d)
// Console destroyed
message(CHR_JOANNA, 0x2630) // "Critical mission object destroyed."
message(CHR_BOND, 0x2630) // "Critical mission object destroyed."
set_stage_flag(STAGEFLAG_HANGAR_DOOR_CONSOLE_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -603,7 +603,7 @@ u8 func1004_check_hangar_doors_opened[] = {
// Console activated
label(0x06)
if_stage_flag_eq(STAGEFLAG_SHIELDS_DISABLED, TRUE, /*goto*/ 0x2c)
message(CHR_JOANNA, 0x262f) // "Hangar doors locked - shields still active."
message(CHR_BOND, 0x262f) // "Hangar doors locked - shields still active."
restart_timer
beginloop(0x65)
@@ -673,11 +673,11 @@ u8 func040d_elvis_wait_for_hangar_entry[] = {
label(0x06)
beginloop(0x65)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
if_chr_sees_player(/*goto*/ 0x2c)
set_target_chr(CHR_VELVET)
set_target_chr(CHR_COOP)
if_chr_sees_player(/*goto*/ 0x2c)
set_target_chr(CHR_COUNTEROP)
set_target_chr(CHR_ANTI)
if_chr_sees_player(/*goto*/ 0x2c)
goto_next(0x06)
@@ -729,7 +729,7 @@ u8 func040e_elvis_give_ar34[] = {
try_run_to_target_chr(/*goto*/ 0x09)
beginloop(0x09)
set_target_chr(FOLLOW_CHR)
set_target_chr(CHR_PRESET)
if_timer_gt(60, /*goto*/ 0x2c)
if_chr_distance_lt(200, /*goto*/ 0x06)
reloop(0x09)
@@ -756,8 +756,8 @@ u8 func040e_elvis_give_ar34[] = {
label(0x06)
speak(CHR_P1P2, 0x2614, 0x12e2, CHANNEL_6, COLOR_04_ORANGE) // "Take this - you should find it useful..."
give_object_to_chr(OBJ_AR34, FOLLOW_CHR)
message(FOLLOW_CHR, 0x2615) // "Received AR34 assault rifle."
give_object_to_chr(OBJ_AR34, CHR_PRESET)
message(CHR_PRESET, 0x2615) // "Received AR34 assault rifle."
restart_timer
beginloop(0x0d)
@@ -806,7 +806,7 @@ u8 func0409_elvis_follow[] = {
// Injured
label(0x2c)
restart_timer
say_quip(CHR_JOANNA, 0x29, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_BOND, 0x29, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
dprint 'I','N','J','U','R','E','D','\n',0,
beginloop(0xc1)
@@ -818,11 +818,11 @@ u8 func0409_elvis_follow[] = {
label(0x06)
dprint 'I','N','J','U','R','E','D','F','I','N','\n',0,
if_enemy_distance_lt_and_los(2540, /*goto*/ 0x08)
set_target_chr(FOLLOW_CHR)
set_target_chr(CHR_PRESET)
if_chr_distance_lt(200, /*goto*/ 0x06)
label(0x03)
set_target_chr(FOLLOW_CHR)
set_target_chr(CHR_PRESET)
restart_timer
if_chr_distance_gt(500, /*goto*/ 0x06)
try_run_to_target_chr_with_hand_up(/*goto*/ 0x04)
@@ -840,7 +840,7 @@ u8 func0409_elvis_follow[] = {
label(0x2c)
dprint 'G','O',' ','T','O',' ','P','A','D','\n',0,
if_enemy_distance_lt_and_los(2540, /*goto*/ 0x08)
set_target_chr(FOLLOW_CHR)
set_target_chr(CHR_PRESET)
if_chr_distance_lt(200, /*goto*/ 0x06)
if_timer_gt(60, /*goto*/ 0x2c)
endloop(0x04)
@@ -862,7 +862,7 @@ u8 func0409_elvis_follow[] = {
label(0x2c)
dprint 'A','T',' ','P','A','D','\n',0,
if_enemy_distance_lt_and_los(2540, /*goto*/ 0x08)
set_target_chr(FOLLOW_CHR)
set_target_chr(CHR_PRESET)
if_chr_distance_gt(300, /*goto*/ 0x06)
endloop(0x09)
@@ -872,9 +872,9 @@ u8 func0409_elvis_follow[] = {
// Enemy detected
label(0x08)
if_chr_death_animation_finished(TARGET_CHR, /*goto*/ 0x2c)
if_chr_dying(TARGET_CHR, /*goto*/ 0x2c)
if_chr_unloaded(TARGET_CHR, /*goto*/ 0x2c)
if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x2c)
if_chr_dying(CHR_TARGET, /*goto*/ 0x2c)
if_chr_unloaded(CHR_TARGET, /*goto*/ 0x2c)
if_target_chrs_target_is_different(/*goto*/ 0x06)
label(0x2c)
goto_first(0x03)
@@ -884,17 +884,17 @@ u8 func0409_elvis_follow[] = {
call_rng
if_rand_lt(85, /*goto*/ 0x65)
if_rand_lt(170, /*goto*/ 0x66)
say_quip(CHR_JOANNA, 0x26, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_BOND, 0x26, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
goto_next(0x2c)
label(0x65)
say_quip(CHR_JOANNA, 0x27, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_BOND, 0x27, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
goto_next(0x2c)
label(0x66)
say_quip(CHR_JOANNA, 0x28, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
say_quip(CHR_BOND, 0x28, 0xff, 0x03, 0xff, BANK_1, 0x00, 0x00)
label(0x2c)
set_return_function(CHR_SELF, FUNC_ELVIS_FOLLOW)
set_onshot_function(FUNC_ELVIS_FOLLOW)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
// Elvis in nav room
label(0xb5)
@@ -914,8 +914,8 @@ u8 func0409_elvis_follow[] = {
label(0x06)
do_special_animation(-1)
message(CHR_JOANNA, 0x260d) // "Navigational information has been retrieved."
speak(FOLLOW_CHR, 0x261f, 0x12e4, CHANNEL_6, COLOR_04_ORANGE) // "Time to head upwards..."
message(CHR_BOND, 0x260d) // "Navigational information has been retrieved."
speak(CHR_PRESET, 0x261f, 0x12e4, CHANNEL_6, COLOR_04_ORANGE) // "Time to head upwards..."
restart_timer
set_stage_flag(STAGEFLAG_NAVIGATION_ROOM_DONE)
@@ -954,10 +954,10 @@ u8 func041c_elvis_outside_prebridgelift[] = {
// Alive
label(0x06)
stop_chr
set_target_chr(FOLLOW_CHR)
set_target_chr(CHR_PRESET)
set_stage_flag(STAGEFLAG_SAID_GO_ON_AHEAD)
if_stage_flag_eq(STAGEFLAG_ENTERED_BRIDGELIFT, TRUE, /*goto*/ 0x2c)
speak(FOLLOW_CHR, 0x261a, 0x14dc, CHANNEL_6, COLOR_04_ORANGE) // "You go on ahead, Jo. I'll secure the perimeter. We..."
speak(CHR_PRESET, 0x261a, 0x14dc, CHANNEL_6, COLOR_04_ORANGE) // "You go on ahead, Jo. I'll secure the perimeter. We..."
label(0x2c)
run_to_pad(0x0063)
@@ -976,7 +976,7 @@ u8 func041c_elvis_outside_prebridgelift[] = {
dprint 'D','E','T','E','C','T','E','D','\n',0,
set_onshot_function(FUNC_ELVIS_OUTSIDE_PREBRIDGELIFT)
set_return_function(CHR_SELF, FUNC_ELVIS_OUTSIDE_PREBRIDGELIFT)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
endfunction
};
@@ -995,7 +995,7 @@ u8 func040a_elvis_go_to_hangar_lift[] = {
label(0x06)
label(0x03)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
restart_timer
if_morale_lt(50, /*goto*/ 0x06)
goto_next(0xc3)
@@ -1013,7 +1013,7 @@ u8 func040a_elvis_go_to_hangar_lift[] = {
// At player
label(0x06)
speak(CHR_JOANNA, 0x2616, 0x12e4, CHANNEL_6, COLOR_04_ORANGE) // "Time to head upwards. I'll take this lift; you tak..."
speak(CHR_BOND, 0x2616, 0x12e4, CHANNEL_6, COLOR_04_ORANGE) // "Time to head upwards. I'll take this lift; you tak..."
animation(ANIM_TALKING_0231, 0, -1, 0x1010, CHR_SELF, 2)
set_morale(50)
@@ -1075,7 +1075,7 @@ u8 func041b_elvis_at_bridge[] = {
reloop(0x09)
label(0x2c)
speak(TARGET_CHR, 0x2618, 0x12e3, CHANNEL_6, COLOR_04_ORANGE) // "Look out, Joanna! I think we've made them angry..."
speak(CHR_TARGET, 0x2618, 0x12e3, CHANNEL_6, COLOR_04_ORANGE) // "Look out, Joanna! I think we've made them angry..."
set_stage_flag(STAGEFLAG_SAID_LOOKOUT)
endloop(0x09)
@@ -1091,7 +1091,7 @@ u8 func041b_elvis_at_bridge[] = {
dprint 'D','E','T','E','C','T','E','D','\n',0,
set_onshot_function(FUNC_ELVIS_AT_BRIDGE)
set_return_function(CHR_SELF, FUNC_ELVIS_AT_BRIDGE)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
endfunction
};
@@ -1103,7 +1103,7 @@ u8 func1005_check_elvis_dead[] = {
endloop(0x04)
label(0x2c)
message(CHR_JOANNA, 0x260c) // "Elvis has been killed."
message(CHR_BOND, 0x260c) // "Elvis has been killed."
set_stage_flag(STAGEFLAG_ELVIS_DEAD)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -1146,7 +1146,7 @@ u8 func0410_wake_suspendedanim_skedar[] = {
set_armor(190)
set_recovery_speed(0)
set_shield(0)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
try_walk_to_target_chr(/*goto*/ 0x2c)
label(0x2c)
@@ -1234,19 +1234,19 @@ u8 func1006_wake_slayer_skedar[] = {
u8 func1007_check_entered_slayer_area[] = {
beginloop(0x08)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x2c)
if_chr_in_room(CHR_JOANNA, 0x00, 0x003a, /*goto*/ 0x2c)
if_chr_in_room(CHR_JOANNA, 0x00, 0x003b, /*goto*/ 0x2c)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x2c)
if_chr_in_room(CHR_BOND, 0x00, 0x003a, /*goto*/ 0x2c)
if_chr_in_room(CHR_BOND, 0x00, 0x003b, /*goto*/ 0x2c)
reloop(0x08)
label(0x2c)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x2d)
if_chr_in_room(CHR_VELVET, 0x00, 0x003a, /*goto*/ 0x06)
if_chr_in_room(CHR_VELVET, 0x00, 0x003b, /*goto*/ 0x06)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2d)
if_chr_in_room(CHR_COOP, 0x00, 0x003a, /*goto*/ 0x06)
if_chr_in_room(CHR_COOP, 0x00, 0x003b, /*goto*/ 0x06)
endloop(0x08)
label(0x2d)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x0d)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x0d)
label(0x06)
set_stage_flag(STAGEFLAG_ENTERED_SLAYER_AREA)
label(0x0d)
@@ -1298,8 +1298,8 @@ u8 func1008_hangar_lifts[] = {
beginloop(0x67)
dprint 'T','R','\n',0,
consider_coop_for_p1p2_chr(CHR_SELF)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x2c)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0018, /*goto*/ 0x2c)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x2c)
if_chr_in_room(CHR_BOND, 0x00, 0x0018, /*goto*/ 0x2c)
if_door_state(0x39, (DOORSTATEBIT_CLOSED | DOORSTATEBIT_CLOSING), /*goto*/ 0x2d)
if_door_state(0x3a, (DOORSTATEBIT_CLOSED | DOORSTATEBIT_CLOSING), /*goto*/ 0x2d)
endloop(0x67)
@@ -1311,15 +1311,15 @@ u8 func1008_hangar_lifts[] = {
// Jo has entered the lift, or Jo dead in co-op
label(0x2c)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x2c)
if_chr_in_room(CHR_VELVET, 0x00, 0x0018, /*goto*/ 0x2c)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2c)
if_chr_in_room(CHR_COOP, 0x00, 0x0018, /*goto*/ 0x2c)
goto_first(0x67)
// Jo or Velvet is in the lift - activate it
// Note the lift naturally waits 5 seconds at each stop,
// hence the 5 second wait if entered as soon as the door opens.
label(0x2c)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_TRIGGER_BUDDY_WARP)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_TRIGGER_BUDDY_WARP)
unset_object_flag_bank0(0x39, OBJECTFLAG0_40000000)
unset_object_flag_bank0(0x3a, OBJECTFLAG0_40000000)
unset_object_flag_bank0(OBJ_HANGARLIFT_JO, OBJECTFLAG0_DEACTIVATED)
@@ -1387,7 +1387,7 @@ u8 func1008_hangar_lifts[] = {
set_object_flag_bank0(OBJ_HANGARLIFT_ELVIS, OBJECTFLAG0_DEACTIVATED)
unset_object_flag_bank0(0x3b, OBJECTFLAG0_02000000)
unset_object_flag_bank0(0x3c, OBJECTFLAG0_02000000)
unset_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_TRIGGER_BUDDY_WARP)
unset_chr_flag_bank2(CHR_BOND, CHRFLAG2_TRIGGER_BUDDY_WARP)
if_chr_y(CHR_ELVIS, 400, OPERATOR_LESS_THAN, /*goto*/ 0x06)
goto_next(0x68)
@@ -1410,8 +1410,8 @@ u8 func1008_hangar_lifts[] = {
consider_coop_for_p1p2_chr(CHR_SELF)
if_chr_activated_object(CHR_P1P2, 0x3b, /*goto*/ 0x2c)
if_chr_activated_object(CHR_P1P2, 0x3c, /*goto*/ 0x2c)
if_chr_activated_object(CHR_COUNTEROP, 0x3b, /*goto*/ 0x2c)
if_chr_activated_object(CHR_COUNTEROP, 0x3c, /*goto*/ 0x2c)
if_chr_activated_object(CHR_ANTI, 0x3b, /*goto*/ 0x2c)
if_chr_activated_object(CHR_ANTI, 0x3c, /*goto*/ 0x2c)
endloop(0x68)
// Bring Elvis's lift down
@@ -1718,7 +1718,7 @@ u8 func0414_hangarclone[] = {
label(0x2c)
set_onshot_function(FUNC_HANGARCLONE)
set_return_function(CHR_SELF, FUNC_HANGARCLONE)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
endfunction
};
@@ -1782,7 +1782,7 @@ u8 func0419_hangar_maian[] = {
dprint 'D','E','T','E','C','T','E','D','\n',0,
set_return_function(CHR_SELF, FUNC_HANGAR_MAIAN)
set_onshot_function(FUNC_HANGAR_MAIAN)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
// Everything below here is unreachable
label(0xb5)
@@ -1801,7 +1801,7 @@ u8 func0419_hangar_maian[] = {
endloop(0x10)
label(0x06)
message(CHR_JOANNA, 0x260d) // "Navigational information has been retrieved."
message(CHR_BOND, 0x260d) // "Navigational information has been retrieved."
set_stage_flag(STAGEFLAG_NAVIGATION_ROOM_DONE)
goto_first(0x03)
@@ -1885,7 +1885,7 @@ u8 func100b_msg_getshieldsdown[] = {
endloop(0xc2)
label(0x06)
speak(CHR_JOANNA, 0x2610, 0x81a0, CHANNEL_6, COLOR_04_ORANGE) // "Outside, Joanna. Get the shields down and we can h..."
speak(CHR_BOND, 0x2610, 0x81a0, CHANNEL_6, COLOR_04_ORANGE) // "Outside, Joanna. Get the shields down and we can h..."
set_stage_flag(STAGEFLAG_SAID_GETSHIELDSDOWN)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -1909,7 +1909,7 @@ u8 func100c_engineroom[] = {
if_chr_unloaded(CHR_ELVIS, /*goto*/ 0x2c)
set_function(CHR_ELVIS, FUNC_ELVIS_RUN_FROM_ENGINEROOM)
play_x_music(CHANNEL_10, 10)
speak(CHR_JOANNA, 0x262e, 0x73d7, CHANNEL_6, COLOR_04_ORANGE) // "We have to get out of here!"
speak(CHR_BOND, 0x262e, 0x73d7, CHANNEL_6, COLOR_04_ORANGE) // "We have to get out of here!"
label(0x2c)
set_countdown_timer(10)
show_countdown_timer
@@ -1943,7 +1943,7 @@ u8 func100c_engineroom[] = {
destroy_object(0x1e)
destroy_object(0x1f)
destroy_object(0x20)
message(CHR_JOANNA, 0x2617) // "Engines have been disabled."
message(CHR_BOND, 0x2617) // "Engines have been disabled."
set_stage_flag(STAGEFLAG_ENGINES_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -1982,8 +1982,8 @@ u8 func100d_prebridgelift[] = {
consider_coop_for_p1p2_chr(CHR_SELF)
if_chr_activated_object(CHR_P1P2, 0x3d, /*goto*/ 0x2c)
if_chr_activated_object(CHR_P1P2, 0x3e, /*goto*/ 0x2c)
if_chr_activated_object(CHR_COUNTEROP, 0x3d, /*goto*/ 0x2c)
if_chr_activated_object(CHR_COUNTEROP, 0x3e, /*goto*/ 0x2c)
if_chr_activated_object(CHR_ANTI, 0x3d, /*goto*/ 0x2c)
if_chr_activated_object(CHR_ANTI, 0x3e, /*goto*/ 0x2c)
endloop(0x68)
// Activate lift
@@ -2064,8 +2064,8 @@ u8 func100e_bridgelift[] = {
consider_coop_for_p1p2_chr(CHR_SELF)
if_chr_activated_object(CHR_P1P2, 0x2f, /*goto*/ 0x2c)
if_chr_activated_object(CHR_P1P2, 0x30, /*goto*/ 0x2c)
if_chr_activated_object(CHR_COUNTEROP, 0x2f, /*goto*/ 0x2c)
if_chr_activated_object(CHR_COUNTEROP, 0x30, /*goto*/ 0x2c)
if_chr_activated_object(CHR_ANTI, 0x2f, /*goto*/ 0x2c)
if_chr_activated_object(CHR_ANTI, 0x30, /*goto*/ 0x2c)
endloop(0x68)
// Activate lift
@@ -2270,18 +2270,18 @@ u8 func041a_bridgeclone[] = {
label(0x2c)
call_rng
if_rand_gt(128, /*goto*/ 0x2c)
set_target_chr(CHR_VELVET)
if_chr_dying(CHR_VELVET, /*goto*/ 0x2c)
set_target_chr(CHR_COOP)
if_chr_dying(CHR_COOP, /*goto*/ 0x2c)
goto_next(0xc2)
label(0x2c)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
label(0x03)
beginloop(0xc2)
if_chr_death_animation_finished(TARGET_CHR, /*goto*/ 0x2c)
if_chr_dying(TARGET_CHR, /*goto*/ 0x2c)
if_chr_unloaded(TARGET_CHR, /*goto*/ 0x2c)
if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x2c)
if_chr_dying(CHR_TARGET, /*goto*/ 0x2c)
if_chr_unloaded(CHR_TARGET, /*goto*/ 0x2c)
goto_next(0x06)
label(0x2c)
@@ -2297,9 +2297,9 @@ u8 func041a_bridgeclone[] = {
beginloop(0x08)
if_chr_dying(CHR_SELF, /*goto*/ 0xb8)
if_chr_death_animation_finished(TARGET_CHR, /*goto*/ 0x10)
if_chr_dying(TARGET_CHR, /*goto*/ 0x10)
if_chr_unloaded(TARGET_CHR, /*goto*/ 0x10)
if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x10)
if_chr_dying(CHR_TARGET, /*goto*/ 0x10)
if_chr_unloaded(CHR_TARGET, /*goto*/ 0x10)
if_timer_gt(120, /*goto*/ 0x09)
endloop(0x08)
@@ -2310,9 +2310,9 @@ u8 func041a_bridgeclone[] = {
// Start running
beginloop(0x0a)
if_chr_dying(CHR_SELF, /*goto*/ 0xb8)
if_chr_death_animation_finished(TARGET_CHR, /*goto*/ 0x10)
if_chr_dying(TARGET_CHR, /*goto*/ 0x10)
if_chr_unloaded(TARGET_CHR, /*goto*/ 0x10)
if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x10)
if_chr_dying(CHR_TARGET, /*goto*/ 0x10)
if_chr_unloaded(CHR_TARGET, /*goto*/ 0x10)
if_distance_to_home_gt_50_maybe(/*goto*/ 0x2c)
if_chr_distance_lt(150, /*goto*/ 0x2e)
label(0x2c)
@@ -2334,9 +2334,9 @@ u8 func041a_bridgeclone[] = {
beginloop(0x0b)
if_chr_dying(CHR_SELF, /*goto*/ 0xb8)
if_chr_death_animation_finished(TARGET_CHR, /*goto*/ 0x10)
if_chr_dying(TARGET_CHR, /*goto*/ 0x10)
if_chr_unloaded(TARGET_CHR, /*goto*/ 0x10)
if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x10)
if_chr_dying(CHR_TARGET, /*goto*/ 0x10)
if_chr_unloaded(CHR_TARGET, /*goto*/ 0x10)
if_jo_ccw_direction_lt(10, /*goto*/ 0x06)
if_jo_ccw_direction_gt(246, /*goto*/ 0x06)
if_timer_gt(15, /*goto*/ 0x06)
@@ -2349,9 +2349,9 @@ u8 func041a_bridgeclone[] = {
beginloop(0x2f)
if_chr_dying(CHR_SELF, /*goto*/ 0xb8)
if_chr_death_animation_finished(TARGET_CHR, /*goto*/ 0x10)
if_chr_dying(TARGET_CHR, /*goto*/ 0x10)
if_chr_unloaded(TARGET_CHR, /*goto*/ 0x10)
if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x10)
if_chr_dying(CHR_TARGET, /*goto*/ 0x10)
if_chr_unloaded(CHR_TARGET, /*goto*/ 0x10)
if_chr_stopped(/*goto*/ 0x06)
endloop(0x2f)
@@ -2469,7 +2469,7 @@ u8 func1010_check_bridge_captured[] = {
goto_first(0x09)
label(0x2c)
message(CHR_JOANNA, 0x2619) // "Bridge has been captured."
message(CHR_BOND, 0x2619) // "Bridge has been captured."
set_stage_flag(STAGEFLAG_BRIDGE_CAPTURED)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -2488,15 +2488,15 @@ u8 func1011_check_end_level[] = {
endloop(0x08)
label(0x06)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x2c)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x2c)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x2c)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x2c)
if_chr_dying(CHR_BOND, /*goto*/ 0x2c)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x2c)
goto_next(0x06)
label(0x2c)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x2c)
if_chr_dying(CHR_VELVET, /*goto*/ 0x2c)
if_chr_unloaded(CHR_VELVET, /*goto*/ 0x2c)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2c)
if_chr_dying(CHR_COOP, /*goto*/ 0x2c)
if_chr_unloaded(CHR_COOP, /*goto*/ 0x2c)
goto_next(0x06)
// Both players dead
@@ -2511,7 +2511,7 @@ u8 func1011_check_end_level[] = {
if_chr_unloaded(CHR_ELVIS, /*goto*/ 0x2c)
// Mission complete
set_invincible(CHR_JOANNA)
set_invincible(CHR_BOND)
set_function(CHR_SELF, FUNC_OUTRO)
// Elvis dead
@@ -2521,15 +2521,15 @@ u8 func1011_check_end_level[] = {
};
u8 func1003_intro[] = {
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_music_track(MUSIC_ATTACKSHIP_INTRO)
camera_movement(0x01c2)
cmd0175(60)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x01c3, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x01c3, -1, -1, 0x0600, CHR_BOND, 4)
set_chr_flag_bank3(CHR_CASS, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(CHR_CASS, CHRFLAG3_HIDDEN)
@@ -2542,9 +2542,9 @@ u8 func1003_intro[] = {
animation(0x01c5, -1, -1, 0x0600, CHR_INTRO_SKEDAR, 4)
restart_timer
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
#define wait_until(time, loopid) \
beginloop(loopid) \
@@ -2571,16 +2571,16 @@ u8 func1003_intro[] = {
play_sound(0x0174, CHANNEL_10)
wait_until(320, 0x9e)
speak(CHR_JOANNA, 0x2620, 0x747f, CHANNEL_10, COLOR_09_BLUE) // "Oohhh... I'd better not be where I think I am."
speak(CHR_BOND, 0x2620, 0x747f, CHANNEL_10, COLOR_09_BLUE) // "Oohhh... I'd better not be where I think I am."
wait_until(505, 0x9f)
play_sound(0x0427, CHANNEL_10)
wait_until(600, 0xa0)
speak(CHR_JOANNA, 0x2621, 0x7480, CHANNEL_10, COLOR_04_ORANGE) // "And it's worse than that, my dear. Just look who y..."
speak(CHR_BOND, 0x2621, 0x7480, CHANNEL_10, COLOR_04_ORANGE) // "And it's worse than that, my dear. Just look who y..."
wait_until(1000, 0xa1)
speak(CHR_JOANNA, 0x2622, 0x7481, CHANNEL_10, COLOR_09_BLUE) // "You! I thought you'd managed to escape. We found n..."
speak(CHR_BOND, 0x2622, 0x7481, CHANNEL_10, COLOR_09_BLUE) // "You! I thought you'd managed to escape. We found n..."
wait_until(1018, 0xa2)
play_sound(0x0175, CHANNEL_10)
@@ -2607,7 +2607,7 @@ u8 func1003_intro[] = {
play_sound(0x0172, CHANNEL_10)
wait_until(1400, 0xa8)
speak(CHR_JOANNA, 0x2623, 0x7482, CHANNEL_10, COLOR_04_ORANGE) // "You couldn't find me. But there was no hiding from..."
speak(CHR_BOND, 0x2623, 0x7482, CHANNEL_10, COLOR_04_ORANGE) // "You couldn't find me. But there was no hiding from..."
wait_until(1520, 0x67)
play_sound(0x0176, CHANNEL_10)
@@ -2636,7 +2636,7 @@ u8 func1003_intro[] = {
play_sound(0x0530, CHANNEL_10)
wait_until(1870, 0x6f)
speak(CHR_JOANNA, 0x2624, 0x7483, CHANNEL_10, COLOR_04_ORANGE) // "This is it. Wait there! I'll make a distraction; i..."
speak(CHR_BOND, 0x2624, 0x7483, CHANNEL_10, COLOR_04_ORANGE) // "This is it. Wait there! I'll make a distraction; i..."
wait_until(1874, 0x70)
play_sound(0x0174, CHANNEL_10)
@@ -2683,7 +2683,7 @@ u8 func1003_intro[] = {
play_sound(0x0177, CHANNEL_10)
wait_until(2581, 0x7e)
speak(CHR_JOANNA, 0x2625, 0x7484, CHANNEL_10, COLOR_09_BLUE) // "Why are you doing this, Cassandra?"
speak(CHR_BOND, 0x2625, 0x7484, CHANNEL_10, COLOR_09_BLUE) // "Why are you doing this, Cassandra?"
wait_until(2614, 0x7f)
play_sound(0x0171, CHANNEL_10)
@@ -2704,7 +2704,7 @@ u8 func1003_intro[] = {
play_sound(0x0175, CHANNEL_10)
wait_until(2790, 0x85)
speak(CHR_JOANNA, 0x2626, 0x7485, CHANNEL_10, COLOR_04_ORANGE) // "The Skedar used me, Joanna. You are my best chance..."
speak(CHR_BOND, 0x2626, 0x7485, CHANNEL_10, COLOR_04_ORANGE) // "The Skedar used me, Joanna. You are my best chance..."
wait_until(2792, 0x86)
play_sound(0x0172, CHANNEL_10)
@@ -2734,7 +2734,7 @@ u8 func1003_intro[] = {
wait_until(3313, 0x8d)
play_sound(0x052a, CHANNEL_10)
speak(CHR_JOANNA, 0x2627, 0x7c86, CHANNEL_10, COLOR_04_ORANGE) // "Eeeeaaarrrrggghhh!!!"
speak(CHR_BOND, 0x2627, 0x7c86, CHANNEL_10, COLOR_04_ORANGE) // "Eeeeaaarrrrggghhh!!!"
beginloop(0x08)
if_camera_animating(/*goto*/ 0x2c)
@@ -2750,11 +2750,11 @@ u8 func1003_intro[] = {
set_stage_flag(STAGEFLAG_INTRO_FINISHED)
open_door(0x17)
mute_channel(CHANNEL_10)
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x01c3, -2, -1, 0x0600, CHR_JOANNA, 2)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x01c3, -2, -1, 0x0600, CHR_BOND, 2)
unset_chr_flag_bank3(CHR_CASS, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_CASS, CHRFLAG2_00020000)
@@ -2780,24 +2780,24 @@ u8 func1003_intro[] = {
};
u8 func0c01_outro[] = {
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x2c)
set_target_chr(CHR_JOANNA)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x2c)
set_target_chr(CHR_BOND)
goto_next(0x06)
label(0x2c)
set_target_chr(CHR_VELVET)
set_target_chr(CHR_COOP)
label(0x06)
hide_object(0x2c)
camera_movement(0x01e1)
set_music_track(MUSIC_ATTACKSHIP_OUTRO)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(0xf1, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_P1P2, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(TARGET_CHR, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(TARGET_CHR, CHRFLAG3_HIDDEN)
set_chr_flag_bank2(TARGET_CHR, CHRFLAG2_00020000)
animation(0x01e2, -1, -1, 0x0600, TARGET_CHR, 4)
set_chr_flag_bank3(CHR_TARGET, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(CHR_TARGET, CHRFLAG3_HIDDEN)
set_chr_flag_bank2(CHR_TARGET, CHRFLAG2_00020000)
animation(0x01e2, -1, -1, 0x0600, CHR_TARGET, 4)
set_chr_flag_bank3(CHR_ELVIS, CHRFLAG3_INVINCIBLE_TO_GUNFIRE)
set_function(CHR_ELVIS, GFUNC_IDLE)
@@ -2814,9 +2814,9 @@ u8 func0c01_outro[] = {
show_nonessential_chrs(FALSE)
restart_timer
set_cutscene_weapon(TARGET_CHR, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_TARGET, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(TARGET_CHR, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_TARGET, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_ELVIS, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_ELVIS, WEAPON_NONE, WEAPON_NONE)
@@ -2828,7 +2828,7 @@ u8 func0c01_outro[] = {
play_sound(0x00fd, CHANNEL_10)
wait_until(150, 0xa9)
speak(CHR_JOANNA, 0x2628, 0x7487, CHANNEL_10, COLOR_09_BLUE) // "Wow. That's the first time I've seen another plane..."
speak(CHR_BOND, 0x2628, 0x7487, CHANNEL_10, COLOR_09_BLUE) // "Wow. That's the first time I've seen another plane..."
wait_until(368, 0x67)
play_sound(0x00fa, CHANNEL_10)
@@ -2845,10 +2845,10 @@ u8 func0c01_outro[] = {
play_sound(0x00fb, CHANNEL_10)
wait_until(690, 0x6e)
speak(CHR_JOANNA, 0x2629, 0x7488, CHANNEL_10, COLOR_04_ORANGE) // "Hmmmm?"
speak(CHR_BOND, 0x2629, 0x7488, CHANNEL_10, COLOR_04_ORANGE) // "Hmmmm?"
wait_until(850, 0x6f)
speak(CHR_JOANNA, 0x262a, 0x7489, CHANNEL_10, COLOR_04_ORANGE) // "I don't... I don't believe it!"
speak(CHR_BOND, 0x262a, 0x7489, CHANNEL_10, COLOR_04_ORANGE) // "I don't... I don't believe it!"
wait_until(963, 0x70)
play_sound(0x80d4, CHANNEL_10)
@@ -2860,7 +2860,7 @@ u8 func0c01_outro[] = {
play_sound(0x80db, CHANNEL_10)
wait_until(1000, 0x72)
speak(CHR_JOANNA, 0x262b, 0x748a, CHANNEL_10, COLOR_09_BLUE) // "Elvis? What is it?"
speak(CHR_BOND, 0x262b, 0x748a, CHANNEL_10, COLOR_09_BLUE) // "Elvis? What is it?"
wait_until(1030, 0x73)
play_sound(0x80da, CHANNEL_10)
@@ -2875,7 +2875,7 @@ u8 func0c01_outro[] = {
play_sound(0x80da, CHANNEL_10)
wait_until(1200, 0x77)
speak(CHR_JOANNA, 0x262c, 0x748b, CHANNEL_10, COLOR_09_BLUE) // "Where are you going?"
speak(CHR_BOND, 0x262c, 0x748b, CHANNEL_10, COLOR_09_BLUE) // "Where are you going?"
wait_until(1237, 0x78)
play_sound(0x80db, CHANNEL_10)
@@ -2890,7 +2890,7 @@ u8 func0c01_outro[] = {
play_sound(0x80da, CHANNEL_10)
wait_until(1301, 0x62)
speak(CHR_JOANNA, 0x262d, 0x748c, CHANNEL_10, COLOR_04_ORANGE) // "We have to get down to the surface! Follow me!"
speak(CHR_BOND, 0x262d, 0x748c, CHANNEL_10, COLOR_04_ORANGE) // "We have to get down to the surface! Follow me!"
open_door(OBJ_HANGARDOOR1)
open_door(OBJ_HANGARDOOR2)
open_door(OBJ_HANGARDOOR3)
@@ -2962,7 +2962,7 @@ u8 func0421_bridge_skedar[] = {
endloop(0x53)
label(0x06)
say_quip(CHR_JOANNA, 0x19, 0xff, 0x03, 0xff, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x19, 0xff, 0x03, 0xff, BANK_0, 0x00, 0x00)
set_onshot_function(GFUNC_IDLE)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -2980,7 +2980,7 @@ u8 func0421_bridge_skedar[] = {
set_self_flag_bank3(CHRFLAG3_00000040)
label(0xc6)
if_self_flag_bankx_eq(CHRFLAG0_00002000, TRUE, BANK_0, /*goto*/ 0x06)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
try_chr_kneel_and_shoot_thing(0x0220, 0x0000, /*goto*/ 0xc7)
label(0x06)
kneel
@@ -3002,14 +3002,14 @@ u8 func0421_bridge_skedar[] = {
if_player_looking_at_something_maybe(0x00, 0x00, 0x01, /*goto*/ 0x2c)
if_target_chr_in_sight(/*goto*/ 0xc8)
label(0x2c)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
endloop(0xc7)
label(0xc8)
set_view_distance(100)
if_self_flag_bankx_eq(CHRFLAG0_00000004, TRUE, BANK_0, /*goto*/ 0x2c)
set_self_flag_bankx(CHRFLAG0_00000004, BANK_0)
say_quip(CHR_JOANNA, 0x0b, 0xff, 0x02, 0xff, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x0b, 0xff, 0x02, 0xff, BANK_0, 0x00, 0x00)
label(0x2c)
goto_next(0xca)
@@ -3078,7 +3078,7 @@ u8 func0421_bridge_skedar[] = {
if_self_flag_bankx_eq(CHRFLAG0_00002000, FALSE, BANK_0, /*goto*/ 0x60)
try_aim_and_shoot_thing1(0x0220, 0x0000, /*goto*/ 0xb1)
label(0xb1)
say_quip(CHR_JOANNA, 0x00, 0x19, 0x02, 0x01, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x00, 0x19, 0x02, 0x01, BANK_0, 0x00, 0x00)
try_aim_and_shoot_thing2(0x0200, 0x0000, /*goto*/ 0x06)
goto_next(0x2c)
@@ -3107,7 +3107,7 @@ u8 func1013_msg_gottogetshieldsdown[] = {
endloop(0x08)
label(0x2c)
speak(CHR_JOANNA, 0x261b, 0x73dc, CHANNEL_6, COLOR_09_BLUE) // "I've got to get those shields down to let Elvis in..."
speak(CHR_BOND, 0x261b, 0x73dc, CHANNEL_6, COLOR_09_BLUE) // "I've got to get those shields down to let Elvis in..."
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
@@ -3128,7 +3128,7 @@ u8 func1014_msg_hangarbaydoors[] = {
endloop(0x08)
label(0x2c)
speak(CHR_JOANNA, 0x261c, 0x73dd, CHANNEL_6, COLOR_09_BLUE) // "Now only the hangar bay doors are in the way."
speak(CHR_BOND, 0x261c, 0x73dd, CHANNEL_6, COLOR_09_BLUE) // "Now only the hangar bay doors are in the way."
label(0x09)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -3256,11 +3256,11 @@ u8 func0423_shy_skedar[] = {
// Set target chr based on who it can see
label(0x2d)
stop_chr
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
if_chr_sees_player(/*goto*/ 0x2c)
set_target_chr(CHR_VELVET)
set_target_chr(CHR_COOP)
if_chr_sees_player(/*goto*/ 0x2c)
set_target_chr(CHR_COUNTEROP)
set_target_chr(CHR_ANTI)
if_chr_sees_player(/*goto*/ 0x2c)
label(0x2c)
@@ -3322,8 +3322,8 @@ u8 func1017_pa_skedar_alertness[] = {
u8 func1012_update_elvis_target_chr[] = {
beginloop(0x04)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x09)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x08)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x09)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x08)
goto_next(0x09)
// Unreachable
@@ -3331,12 +3331,12 @@ u8 func1012_update_elvis_target_chr[] = {
// Jo dead
label(0x08)
set_chr_target_chr(CHR_ELVIS, CHR_VELVET)
set_chr_target_chr(CHR_ELVIS, CHR_COOP)
reloop(0x04)
// Velvet dead or both alive
label(0x09)
set_chr_target_chr(CHR_ELVIS, CHR_JOANNA)
set_chr_target_chr(CHR_ELVIS, CHR_BOND)
endloop(0x04)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -3455,7 +3455,7 @@ u8 func101d_unlock_doors[] = {
u8 func101e_bridge_music[] = {
beginloop(0x04)
consider_coop_for_p1p2_chr(CHR_SELF)
if_chr_in_room(CHR_JOANNA, 0x00, 0x006e, /*goto*/ 0x2c)
if_chr_in_room(CHR_BOND, 0x00, 0x006e, /*goto*/ 0x2c)
endloop(0x04)
label(0x2c)
@@ -3547,7 +3547,7 @@ u8 func1021_check_ammo_wasted[] = {
// Ammo wasted
label(0x2c)
set_stage_flag(STAGEFLAG_AMMO_WASTED)
message(CHR_JOANNA, 0x2631) // "Ammo depleted - consoles can't be destroyed."
message(CHR_BOND, 0x2631) // "Ammo depleted - consoles can't be destroyed."
beginloop(0x66)
if_stage_flag_eq(STAGEFLAG_SHIELDS_DISABLED, TRUE, /*goto*/ 0x2c)
@@ -3599,7 +3599,7 @@ u8 unregistered_function1[] = {
endloop(0x04)
label(0x2c)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_TRIGGER_BUDDY_WARP)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_TRIGGER_BUDDY_WARP)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
+227 -227
View File
File diff suppressed because it is too large Load Diff
+69 -69
View File
@@ -16,7 +16,7 @@
#define OBJ_INTERCEPTOR3 0x04
#define OBJ_MAINGATE_SWITCH 0x05
#define OBJ_ANTENNA 0x07
#define OBJ_BUG1_JOANNA 0x08
#define OBJ_BUG1_BOND 0x08
#define OBJ_ANTENNA_SWITCH 0x09
#define OBJ_KEYCARD 0x0a
#define OBJ_LIFT1_SWITCH 0x0b
@@ -30,10 +30,10 @@
#define OBJ_MINE4 0x1b
#define OBJ_MINE5 0x1c
#define OBJ_MINE6 0x1d
#define OBJ_BUG2_JOANNA 0x2e
#define OBJ_BUG2_BOND 0x2e
#define OBJ_AUTOGUN_AT_START 0x35
#define OBJ_BUG1_VELVET 0x36
#define OBJ_BUG2_VELVET 0x37
#define OBJ_BUG1_COOP 0x36
#define OBJ_BUG2_COOP 0x37
#define OBJ_ROCKETLAUNCHER 0x53
#define OBJ_EXPLOSIVE_BRICK 0x54
#define OBJ_HOVERBIKE 0x55
@@ -935,25 +935,25 @@ u8 func140e_check_interceptors_destroyed[] = {
if_object_in_good_condition(OBJ_INTERCEPTOR1, /*goto*/ 0x2e)
if_stage_flag_eq(STAGEFLAG_INTERCEPTOR1_DESTROYED, TRUE, /*goto*/ 0x2e)
set_stage_flag(STAGEFLAG_INTERCEPTOR1_DESTROYED)
message(CHR_JOANNA, 0x2c13) // "Robot interceptor disabled."
message(CHR_BOND, 0x2c13) // "Robot interceptor disabled."
label(0x2e)
if_object_in_good_condition(OBJ_INTERCEPTOR2, /*goto*/ 0x2e)
if_stage_flag_eq(STAGEFLAG_INTERCEPTOR2_DESTROYED, TRUE, /*goto*/ 0x2e)
set_stage_flag(STAGEFLAG_INTERCEPTOR2_DESTROYED)
message(CHR_JOANNA, 0x2c13) // "Robot interceptor disabled."
message(CHR_BOND, 0x2c13) // "Robot interceptor disabled."
label(0x2e)
if_object_in_good_condition(OBJ_INTERCEPTOR3, /*goto*/ 0x2e)
if_stage_flag_eq(STAGEFLAG_INTERCEPTOR3_DESTROYED, TRUE, /*goto*/ 0x2e)
set_stage_flag(STAGEFLAG_INTERCEPTOR3_DESTROYED)
message(CHR_JOANNA, 0x2c13) // "Robot interceptor disabled."
message(CHR_BOND, 0x2c13) // "Robot interceptor disabled."
label(0x2e)
if_stage_flag_eq(STAGEFLAG_INTERCEPTOR1_DESTROYED, FALSE, /*goto*/ 0x2e)
if_stage_flag_eq(STAGEFLAG_INTERCEPTOR2_DESTROYED, FALSE, /*goto*/ 0x2e)
if_stage_flag_eq(STAGEFLAG_INTERCEPTOR3_DESTROYED, FALSE, /*goto*/ 0x2e)
message(CHR_JOANNA, 0x2c14) // "All robot interceptors disabled."
message(CHR_BOND, 0x2c14) // "All robot interceptors disabled."
set_function(CHR_SELF, GFUNC_IDLE)
label(0x2e)
@@ -1012,16 +1012,16 @@ u8 func100c_maingate_switch[] = {
u8 func1400_give_bugs[] = {
yield
set_chr_team(CHR_COUNTEROP, TEAM_ENEMY)
set_chr_team(CHR_ANTI, TEAM_ENEMY)
if_difficulty_lt(DIFF_SA, /*goto*/ 0x2e)
give_object_to_chr(OBJ_BUG1_JOANNA, CHR_JOANNA)
give_object_to_chr(OBJ_BUG1_BOND, CHR_BOND)
label(0x2e)
give_object_to_chr(OBJ_BUG2_JOANNA, CHR_JOANNA)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x2e)
give_object_to_chr(OBJ_BUG2_BOND, CHR_BOND)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2e)
if_difficulty_lt(DIFF_SA, /*goto*/ 0x2e)
give_object_to_chr(OBJ_BUG1_VELVET, CHR_VELVET)
give_object_to_chr(OBJ_BUG1_COOP, CHR_COOP)
label(0x2e)
give_object_to_chr(OBJ_BUG2_VELVET, CHR_VELVET)
give_object_to_chr(OBJ_BUG2_COOP, CHR_COOP)
set_function(CHR_SELF, GFUNC_REBUILD_GROUPS)
label(0x2e)
set_function(CHR_SELF, GFUNC_REBUILD_GROUPS)
@@ -1067,19 +1067,19 @@ u8 func1400_give_bugs[] = {
* @unused
*/
u8 func0422_check_bug_wasted_target[] = {
check_bug_wasted(TARGET_CHR)
check_bug_wasted(CHR_TARGET)
endfunction
};
u8 func1003_check_bug_wasted_joanna[] = {
set_target_chr(CHR_JOANNA)
check_bug_wasted(CHR_JOANNA)
u8 func1003_check_bug_wasted_bond[] = {
set_target_chr(CHR_BOND)
check_bug_wasted(CHR_BOND)
endfunction
};
u8 func1023_check_bug_wasted_velvet[] = {
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x2e)
set_target_chr(CHR_VELVET)
u8 func1023_check_bug_wasted_coop[] = {
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2e)
set_target_chr(CHR_COOP)
goto_next(0x06)
label(0x2e)
@@ -1087,14 +1087,14 @@ u8 func1023_check_bug_wasted_velvet[] = {
set_function(CHR_SELF, GFUNC_IDLE)
label(0x06)
check_bug_wasted(CHR_VELVET)
check_bug_wasted(CHR_COOP)
endfunction
};
u8 func1004_check_antenna_destroyed[] = {
beginloop(0x04)
if_object_in_good_condition(OBJ_ANTENNA, /*goto*/ 0x2e)
message(CHR_JOANNA, 0x2c1c) // "Antenna has been destroyed."
message(CHR_BOND, 0x2c1c) // "Antenna has been destroyed."
set_stage_flag(STAGEFLAG_ANTENNA_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
label(0x2e)
@@ -1193,7 +1193,7 @@ u8 func1006_lift_switches[] = {
label(0x0a)
assign_sound(0x043f, CHANNEL_7)
play_sound_from_entity(CHANNEL_7, OBJ_LIFT2_SWITCH, 0x012c, 0x0190, 0x00)
if_chr_has_object(CHR_JOANNA, OBJ_KEYCARD, /*goto*/ 0x2e)
if_chr_has_object(CHR_BOND, OBJ_KEYCARD, /*goto*/ 0x2e)
message(CHR_P1P2, 0x2c24) // "Lift access denied - key card needed."
goto_next(0x0b)
@@ -1257,15 +1257,15 @@ u8 func1008_check_end_level[] = {
set_stage_flag(STAGEFLAG_MET_JON)
yield
yield
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x2e)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x2e)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x2e)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x2e)
if_chr_dying(CHR_BOND, /*goto*/ 0x2e)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x2e)
goto_next(0x06)
label(0x2e)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x2e)
if_chr_dying(CHR_VELVET, /*goto*/ 0x2e)
if_chr_unloaded(CHR_VELVET, /*goto*/ 0x2e)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2e)
if_chr_dying(CHR_COOP, /*goto*/ 0x2e)
if_chr_unloaded(CHR_COOP, /*goto*/ 0x2e)
goto_next(0x06)
label(0x2e)
@@ -1273,7 +1273,7 @@ u8 func1008_check_end_level[] = {
set_function(CHR_SELF, GFUNC_IDLE)
label(0x06)
set_invincible(CHR_JOANNA)
set_invincible(CHR_BOND)
set_function(CHR_SELF, FUNC_OUTRO)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -1287,7 +1287,7 @@ u8 func1009_check_radar_shut_down[] = {
endloop(0x04)
label(0x2e)
message(CHR_JOANNA, 0x2c29) // "Air intercept radar shut down."
message(CHR_BOND, 0x2c29) // "Air intercept radar shut down."
mute_channel(CHANNEL_0)
set_stage_flag(STAGEFLAG_RADAR_SHUT_DOWN)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -1450,7 +1450,7 @@ u8 func0414_init_hangar_guard4[] = {
label(0x06)
jog_to_pad(0x041d)
yield
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
set_function(CHR_SELF, FUNC_ALERT_WHEN_STOPPED)
endfunction
};
@@ -1749,7 +1749,7 @@ u8 func040e_outro[] = {
hide_object(OBJ_HOVERBIKE)
camera_movement(0x017d)
set_music_track(MUSIC_INFILTRATION_OUTRO)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(0xf1, CHRFLAG3_HIDDEN)
set_function(CHR_P1P2, GFUNC_IDLE)
set_chr_flag_bank3(CHR_JONATHAN, CHRFLAG3_INVINCIBLE_TO_GUNFIRE)
@@ -1889,8 +1889,8 @@ u8 func040e_outro[] = {
};
u8 func0410_intro[] = {
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
if_controller_button_pressed(/*goto*/ 0x54)
set_music_track(MUSIC_INFILTRATION_INTRO)
camera_movement(0x0181)
@@ -1900,27 +1900,27 @@ u8 func0410_intro[] = {
unset_chr_flag_bank3(0x32, CHRFLAG3_HIDDEN)
set_chr_flag_bank2(0x32, CHRFLAG2_00020000)
animation(0x0182, -1, -1, 0x0600, 0x32, 4)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
restart_timer
fade_to_color(0x000000ff, 0)
fade_to_color(0x00000000, 90)
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_JOANNA, WEAPON_FALCON2, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_FALCON2, WEAPON_NONE)
wait_until(26, 0x60)
speak(CHR_JOANNA, 0x2c3a, 0x7418, CHANNEL_7, COLOR_06_WHITE) // "Okay, Joanna, take a look at this. Our operative i..."
speak(CHR_BOND, 0x2c3a, 0x7418, CHANNEL_7, COLOR_06_WHITE) // "Okay, Joanna, take a look at this. Our operative i..."
wait_until(500, 0x61)
speak(CHR_JOANNA, 0x2c3b, 0x7419, CHANNEL_7, COLOR_06_WHITE) // "This is your entry point... A deserted helipad on ..."
speak(CHR_BOND, 0x2c3b, 0x7419, CHANNEL_7, COLOR_06_WHITE) // "This is your entry point... A deserted helipad on ..."
wait_until(800, 0x62)
speak(CHR_JOANNA, 0x2c3c, 0x741a, CHANNEL_7, COLOR_06_WHITE) // "The lift down to the hangars and the rendezvous po..."
speak(CHR_BOND, 0x2c3c, 0x741a, CHANNEL_7, COLOR_06_WHITE) // "The lift down to the hangars and the rendezvous po..."
wait_until(1200, 0x63)
wait_until(1236, 0x64)
speak(CHR_JOANNA, 0x2c3d, 0x741b, CHANNEL_7, COLOR_06_WHITE) // "Here is the communications antenna. Attach a comms..."
speak(CHR_BOND, 0x2c3d, 0x741b, CHANNEL_7, COLOR_06_WHITE) // "Here is the communications antenna. Attach a comms..."
beginloop(0x09)
if_camera_animating(/*goto*/ 0x2e)
@@ -1934,11 +1934,11 @@ u8 func0410_intro[] = {
label(0x06)
label(0x55)
unset_chr_flag_bank3(0x32, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
label(0x54)
if_controller_button_pressed(/*goto*/ 0x54)
camera_movement(0x0183)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(0x29, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(0x29, CHRFLAG3_HIDDEN)
@@ -1961,10 +1961,10 @@ u8 func0410_intro[] = {
restart_timer
wait_until(186, 0x65)
speak(CHR_JOANNA, 0x2c3e, 0x81b9, CHANNEL_7, COLOR_09_BLUE) // "Oh, my God!"
speak(CHR_BOND, 0x2c3e, 0x81b9, CHANNEL_7, COLOR_09_BLUE) // "Oh, my God!"
wait_until(380, 0x66)
speak(CHR_JOANNA, 0x2c3f, 0x741d, CHANNEL_7, COLOR_06_WHITE) // "Here is our friend. He appears to be physically un..."
speak(CHR_BOND, 0x2c3f, 0x741d, CHANNEL_7, COLOR_06_WHITE) // "Here is our friend. He appears to be physically un..."
beginloop(0x0a)
if_camera_animating(/*goto*/ 0x2e)
@@ -1976,7 +1976,7 @@ u8 func0410_intro[] = {
endloop(0x0a)
label(0x06)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(0x29, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(0x2a, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(0x2b, CHRFLAG3_UNPLAYABLE)
@@ -1984,7 +1984,7 @@ u8 func0410_intro[] = {
label(0x54)
if_controller_button_pressed(/*goto*/ 0x54)
camera_movement(0x0188)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(0x2a, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(0x2a, CHRFLAG3_HIDDEN)
@@ -2002,10 +2002,10 @@ u8 func0410_intro[] = {
restart_timer
wait_until(416, 0x67)
speak(CHR_JOANNA, 0x2c40, 0x741e, CHANNEL_7, COLOR_09_BLUE) // "But who was...?"
speak(CHR_BOND, 0x2c40, 0x741e, CHANNEL_7, COLOR_09_BLUE) // "But who was...?"
wait_until(485, 0x68)
speak(CHR_JOANNA, 0x2c41, 0x741f, CHANNEL_7, COLOR_06_WHITE) // "Any questions? No. Good. Away you go to the hangar..."
speak(CHR_BOND, 0x2c41, 0x741f, CHANNEL_7, COLOR_06_WHITE) // "Any questions? No. Good. Away you go to the hangar..."
beginloop(0x0b)
if_camera_animating(/*goto*/ 0x2e)
@@ -2017,7 +2017,7 @@ u8 func0410_intro[] = {
endloop(0x0b)
label(0x06)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(0x2a, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(0x2b, CHRFLAG3_UNPLAYABLE)
unset_object_flag_bank1(0x2f, OBJECTFLAG1_04000000)
@@ -2025,16 +2025,16 @@ u8 func0410_intro[] = {
camera_movement(0x00f0)
cmd0175(60)
if_controller_button_pressed(/*goto*/ 0x54)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x00f1, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x00f1, -1, -1, 0x0600, CHR_BOND, 4)
set_chr_flag_bank3(0x03, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(0x03, CHRFLAG2_00020000)
unset_chr_flag_bank3(0x03, CHRFLAG3_HIDDEN)
restart_timer
wait_until(1, 0x69)
speak(CHR_JOANNA, 0x2c42, 0x7420, CHANNEL_10, COLOR_09_BLUE) // "Agent Dark Mission Log, 1028 hours. Against my bet..."
speak(CHR_BOND, 0x2c42, 0x7420, CHANNEL_10, COLOR_09_BLUE) // "Agent Dark Mission Log, 1028 hours. Against my bet..."
wait_until(340, 0x6a)
play_sound(0x80d5, CHANNEL_10)
@@ -2083,8 +2083,8 @@ u8 func0410_intro[] = {
label(0x54)
mute_channel(CHANNEL_10)
mute_channel(CHANNEL_7)
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(0x0c, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(0x0d, CHRFLAG3_HIDDEN)
remove_chr(0x32)
@@ -2092,10 +2092,10 @@ u8 func0410_intro[] = {
remove_chr(0x2a)
remove_chr(0x2b)
hide_object(0x2f)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x00f1, -2, -1, 0x0600, CHR_JOANNA, 2)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x00f1, -2, -1, 0x0600, CHR_BOND, 2)
unset_chr_flag_bank3(0x03, CHRFLAG3_UNPLAYABLE)
set_function(0x02, 0x0426)
set_function(0x03, 0x0426)
@@ -2126,7 +2126,7 @@ u8 func0418_walk_to_pad[] = {
u8 func1010_bunker_lighting[] = {
yield
set_chr_team(CHR_COUNTEROP, TEAM_ENEMY)
set_chr_team(CHR_ANTI, TEAM_ENEMY)
restart_timer
beginloop(0x09)
@@ -2920,7 +2920,7 @@ u8 func0421_activate_autogun[] = {
set_function(CHR_SELF, GFUNC_ALERTED)
label(0x0e)
say_quip(CHR_JOANNA, 0x12, 0xff, 0x03, 0xff, BANK_0, 0x00, 0x00)
say_quip(CHR_BOND, 0x12, 0xff, 0x03, 0xff, BANK_0, 0x00, 0x00)
restart_timer
animation(ANIM_SURPRISED_0202, 0, -1, 0x0010, CHR_SELF, 2)
@@ -2969,7 +2969,7 @@ u8 func1022_check_lift_switches_destroyed[] = {
if_stage_flag_eq(STAGEFLAG_LIFT2_CALLED, TRUE, /*goto*/ 0x06)
if_object_in_good_condition(OBJ_LIFT1_SWITCH, /*goto*/ 0x2e)
if_object_in_good_condition(OBJ_LIFT2_SWITCH, /*goto*/ 0x2e)
message(CHR_JOANNA, 0x2c39) // "Lift access terminals destroyed."
message(CHR_BOND, 0x2c39) // "Lift access terminals destroyed."
set_stage_flag(STAGEFLAG_LIFT_SWITCHES_DESTROYED)
goto_next(0x06)
@@ -3164,7 +3164,7 @@ u8 func0424_activate_lasers[] = {
if_stage_flag_eq(STAGEFLAG_ANY_LASER_DESTROYED, TRUE, /*goto*/ 0x2e)
set_stage_flag(STAGEFLAG_ANY_LASER_DESTROYED)
if_stage_flag_eq(STAGEFLAG_EXPLOSIVES_PLACED, TRUE, /*goto*/ 0x2e)
message(CHR_JOANNA, 0x2c2f) // "Intruder detected - security system online."
message(CHR_BOND, 0x2c2f) // "Intruder detected - security system online."
// A and SA
label(0x2e)
@@ -3205,7 +3205,7 @@ u8 func102d_check_antenna_switch_destroyed[] = {
label(0x2e)
if_stage_flag_eq(STAGEFLAG_ANTENNA_LOWERED, TRUE, /*goto*/ 0x2e)
message(CHR_JOANNA, 0x2c2a) // "Critical mission object destroyed."
message(CHR_BOND, 0x2c2a) // "Critical mission object destroyed."
set_stage_flag(STAGEFLAG_ANTENNA_DESTROYED)
label(0x2e)
label(0x0e)
@@ -3314,7 +3314,7 @@ struct ailists functions[] = {
{ func1400_give_bugs, 0x1400 },
{ func1001_objectives_failed_msg, 0x1001 },
{ func0c00_init_intro, 0x1002 },
{ func1003_check_bug_wasted_joanna, 0x1003 },
{ func1003_check_bug_wasted_bond, 0x1003 },
{ func1004_check_antenna_destroyed, 0x1004 },
{ func1405_antenna_switch, 0x1405 },
{ func1006_lift_switches, 0x1006 },
@@ -3343,7 +3343,7 @@ struct ailists functions[] = {
{ func1020_choose_autogun_guard, 0x1020 },
{ func1021_damage_rl_guard, 0x1021 },
{ func1022_check_lift_switches_destroyed, 0x1022 },
{ func1023_check_bug_wasted_velvet, 0x1023 },
{ func1023_check_bug_wasted_coop, 0x1023 },
{ func1024_lift_door_sounds, 0x1024 },
{ func1025_spawn_bunker_guards, 0x1025 },
{ func1026_check_laser1_broken, 0x1026 },
+6 -6
View File
@@ -85,8 +85,8 @@ u8 func0401_init_enemy[] = {
label(0x01)
assign_path(0)
start_path
set_return_function(CHR_SELF, GFUNC_CHOOSE_TARGET_CHR)
set_function(CHR_SELF, GFUNC_CHOOSE_TARGET_CHR)
set_return_function(CHR_SELF, GFUNC_CHOOSE_TARGET)
set_function(CHR_SELF, GFUNC_CHOOSE_TARGET)
endfunction
};
@@ -126,8 +126,8 @@ u8 func0402_init_maian[] = {
label(0x01)
assign_path(0)
start_path
set_return_function(CHR_SELF, GFUNC_CHOOSE_TARGET_CHR)
set_function(CHR_SELF, GFUNC_CHOOSE_TARGET_CHR)
set_return_function(CHR_SELF, GFUNC_CHOOSE_TARGET)
set_function(CHR_SELF, GFUNC_CHOOSE_TARGET)
endfunction
};
@@ -144,7 +144,7 @@ u8 unregistered_function1[] = {
// The object doesn't exist in the props code though, so was likely removed.
label(0x04)
yield
if_chr_looking_at_object(CHR_JOANNA, 0x00, /*goto*/ 0x01)
if_chr_looking_at_object(CHR_BOND, 0x00, /*goto*/ 0x01)
goto_first(0x04)
label(0x01)
@@ -198,7 +198,7 @@ u8 func0407_defend_pad[] = {
label(0xa5)
dprint 'D','E','T','E','C','T','E','D','\n',0,
set_return_function(CHR_SELF, 0x0407)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
endfunction
};
+4 -4
View File
@@ -44,8 +44,8 @@ struct aipaths paths[] = {
* to the next camera animation rather than ending the cutscene.
*/
u8 func0c00_017c[] = {
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_music_track(MUSIC_G5_INTRO)
camera_movement(0x045d)
cmd01c8(2)
@@ -147,8 +147,8 @@ u8 func0c00_017c[] = {
endloop(0x0e)
label(0x59)
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
cmd01c8(5)
beginloop(0x15)
+324 -324
View File
File diff suppressed because it is too large Load Diff
+79 -79
View File
@@ -502,7 +502,7 @@ u8 func0401_3ae8[] = {
if_controller_button_pressed(/*goto*/ 0x00)
camera_movement(0x00cf)
set_music_track(MUSIC_CHICAGO_INTRO)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
chicago_car_do_animation(OBJ_CAR1, 0x00d6)
chicago_car_do_animation(OBJ_CAR2, 0x00d7)
@@ -515,7 +515,7 @@ u8 func0401_3ae8[] = {
chicago_wait_for_camera
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
hide_object(OBJ_CAR1)
hide_object(OBJ_CAR2)
hide_object(OBJ_CAR3)
@@ -527,11 +527,11 @@ u8 func0401_3ae8[] = {
};
u8 func0402_3bb4[] = {
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
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_JOANNA, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
chicago_car_do_animation(OBJ_CAR1, 0x00dc)
chicago_car_do_animation(OBJ_CAR2, 0x00dd)
@@ -542,7 +542,7 @@ u8 func0402_3bb4[] = {
chicago_wait_for_camera
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
hide_object(OBJ_CAR1)
hide_object(OBJ_CAR2)
hide_object(OBJ_CAR4)
@@ -556,20 +556,20 @@ u8 func0402_3bb4[] = {
u8 func0403_3c74[] = {
if_controller_button_pressed(/*goto*/ 0x00)
camera_movement(0x00d1)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
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_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_JOANNA, WEAPON_FALCON2_SCOPE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_FALCON2_SCOPE, WEAPON_NONE)
chicago_wait_for_camera
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
hide_object(OBJ_CAR4)
unset_chr_flag_bank3(CHR_CIA1, CHRFLAG3_HIDDEN)
label(0x00)
@@ -585,15 +585,15 @@ u8 func0404_3ce0[] = {
if_controller_button_pressed(/*goto*/ 0x00)
camera_movement(0x00e0)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x00e1, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_flag_bank3(CHR_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_JOANNA, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
label(0x00)
return
endfunction
@@ -603,9 +603,9 @@ u8 func0405_3d50[] = {
camera_movement(0x00d2)
cmd0175(60)
if_controller_button_pressed(/*goto*/ 0x00)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x00df, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_flag_bank3(CHR_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
@@ -616,9 +616,9 @@ u8 func0405_3d50[] = {
endloop(0x2d)
label(0x04)
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
beginloop(0x2f)
if_controller_button_pressed(/*goto*/ 0x04)
@@ -629,14 +629,14 @@ u8 func0405_3d50[] = {
chicago_wait_for_camera
label(0x00)
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
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_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x00df, -2, -1, 0x0600, CHR_JOANNA, 2)
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
@@ -719,26 +719,26 @@ u8 func100f_check_mine[] = {
beginloop(0x11)
dprint 'M','A','I','N','\n',0,
if_chr_death_animation_finished(TARGET_CHR, /*goto*/ 0x29)
if_chr_dying(TARGET_CHR, /*goto*/ 0x29)
if_chr_unloaded(TARGET_CHR, /*goto*/ 0x29)
if_ammo_quantity_lt(TARGET_CHR, AMMOTYPE_REMOTE_MINE, 1, /*goto*/ 0x03)
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(TARGET_CHR, /*goto*/ 0x28)
if_chr_dying(TARGET_CHR, /*goto*/ 0x28)
if_chr_unloaded(TARGET_CHR, /*goto*/ 0x28)
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_JOANNA, AMMOTYPE_REMOTE_MINE, 1, /*goto*/ 0x29)
if_ammo_quantity_lt(CHR_BOND, AMMOTYPE_REMOTE_MINE, 1, /*goto*/ 0x29)
reloop(0x08)
label(0x29)
if_ammo_quantity_lt(CHR_VELVET, AMMOTYPE_REMOTE_MINE, 1, /*goto*/ 0x29)
if_ammo_quantity_lt(CHR_COOP, AMMOTYPE_REMOTE_MINE, 1, /*goto*/ 0x29)
endloop(0x08)
label(0x29)
@@ -906,7 +906,7 @@ u8 func040d_limo[] = {
if_stage_flag_eq(STAGEFLAG_TRACERBUG_PLACED, TRUE, /*goto*/ 0x03)
if_difficulty_lt(DIFF_PA, /*goto*/ 0x03)
set_stage_flag(STAGEFLAG_LIMO_ESCAPED)
message(CHR_JOANNA, 0x321c) // "DataDyne limo has escaped."
message(CHR_BOND, 0x321c) // "DataDyne limo has escaped."
label(0x03)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -1068,14 +1068,14 @@ u8 func040c_taxi[] = {
u8 func1004_tracerbug_joanna[] = {
tracerbug_logic(CHR_JOANNA, CHR_JOANNA)
u8 func1004_tracerbug_bond[] = {
tracerbug_logic(CHR_BOND, CHR_BOND)
endfunction
};
u8 func1011_trackerbug_velvet[] = {
u8 func1011_trackerbug_coop[] = {
yield
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x03)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x03)
goto_next(0x04)
label(0x03)
@@ -1083,7 +1083,7 @@ u8 func1011_trackerbug_velvet[] = {
set_function(CHR_SELF, GFUNC_IDLE)
label(0x04)
tracerbug_logic(CHR_VELVET, FOLLOW_CHR)
tracerbug_logic(CHR_COOP, CHR_PRESET)
endfunction
};
@@ -1095,7 +1095,7 @@ u8 func1005_check_things_destroyed[] = {
set_stage_flag(STAGEFLAG_LIMO_DESTROYED)
mute_channel(CHANNEL_1)
if_difficulty_lt(DIFF_SA, /*goto*/ 0x03)
message(CHR_JOANNA, 0x3219) // "Mission critical vehicle destroyed."
message(CHR_BOND, 0x3219) // "Mission critical vehicle destroyed."
// Check taxi
label(0x03)
@@ -1104,7 +1104,7 @@ u8 func1005_check_things_destroyed[] = {
if_object_in_good_condition(OBJ_TAXI, /*goto*/ 0x03)
mute_channel(CHANNEL_0)
set_stage_flag(STAGEFLAG_TAXI_DESTROYED)
message(CHR_JOANNA, 0x3219) // "Mission critical vehicle destroyed."
message(CHR_BOND, 0x3219) // "Mission critical vehicle destroyed."
// Check robot
label(0x03)
@@ -1122,7 +1122,7 @@ u8 func1005_check_things_destroyed[] = {
label(0x04)
set_stage_flag(STAGEFLAG_ROBOT_DESTROYED)
message(CHR_JOANNA, 0x3219) // "Mission critical vehicle destroyed."
message(CHR_BOND, 0x3219) // "Mission critical vehicle destroyed."
label(0x03)
endloop(0x10)
@@ -1159,8 +1159,8 @@ u8 func1006_check_for_end[] = {
dprint 'I','N',' ','T','H','E',' ','E','L','E','V','A','T','O','R','\n',0,
yield
yield
set_invincible(CHR_JOANNA)
revoke_control(CHR_JOANNA, 4)
set_invincible(CHR_BOND)
revoke_control(CHR_BOND, 4)
// But there is no countdown timer...
hide_countdown_timer
@@ -1183,15 +1183,15 @@ u8 func1006_check_for_end[] = {
// Objectives complete
label(0x05)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x03)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x03)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x03)
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_VELVET, /*goto*/ 0x03)
if_chr_dying(CHR_VELVET, /*goto*/ 0x03)
if_chr_unloaded(CHR_VELVET, /*goto*/ 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)
@@ -1478,7 +1478,7 @@ u8 func0412_cia[] = {
rebuild_teams
rebuild_squadrons
set_action(ACTION_COWER, FALSE)
say_quip(CHR_JOANNA, 0x18, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00)
say_quip(CHR_BOND, 0x18, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00)
animation(ANIM_SURRENDER_002E, 0, 193, 0x1010, CHR_SELF, 2)
beginloop(0x0a)
@@ -1506,19 +1506,19 @@ u8 func0412_cia[] = {
set_chr_team(CHR_SELF, TEAM_NONCOMBAT)
rebuild_teams
rebuild_squadrons
try_run_to_chr(FOLLOW_CHR, /*goto*/ 0x06)
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(FOLLOW_CHR, /*goto*/ 0x04)
if_detected_chr(CHR_PRESET, /*goto*/ 0x04)
endloop(0x06)
label(0x04)
set_squadron_alertness(100)
say_quip(CHR_JOANNA, 0x19, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00)
say_quip(CHR_BOND, 0x19, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00)
label(0x0b)
set_chr_team(CHR_SELF, TEAM_NONCOMBAT)
rebuild_teams
@@ -1597,10 +1597,10 @@ u8 func0413_bugspotter[] = {
label(0x04)
if_chr_weapon_equipped(CHR_P1P2, WEAPON_UNARMED, /*goto*/ 0x03)
if_chr_weapon_equipped(CHR_P1P2, WEAPON_NONE, /*goto*/ 0x03)
say_quip(CHR_JOANNA, 0x1a, 0xff, 0x0a, 0xff, 0x81, 0x00, 0x00)
say_quip(CHR_BOND, 0x1a, 0xff, 0x0a, 0xff, 0x81, 0x00, 0x00)
goto_next(0x04)
label(0x03)
say_quip(CHR_JOANNA, 0x17, 0xff, 0x0a, 0xff, 0x81, 0x00, 0x00)
say_quip(CHR_BOND, 0x17, 0xff, 0x0a, 0xff, 0x81, 0x00, 0x00)
label(0x04)
animation(ANIM_TALKING_00A3, 0, -1, 0x0010, CHR_SELF, 2)
@@ -1637,7 +1637,7 @@ u8 func0413_bugspotter[] = {
assign_sound(0x044a, CHANNEL_6)
play_sound_from_entity(CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01)
set_stage_flag(STAGEFLAG_TRACERBUG_SPOTTED)
message(CHR_JOANNA, 0x3243) // "Tracer Bug has been spotted."
message(CHR_BOND, 0x3243) // "Tracer Bug has been spotted."
// Wait for talking animation to finish
beginloop(0x05)
@@ -1655,7 +1655,7 @@ u8 func0413_bugspotter[] = {
goto_next(0x0b)
label(0x04)
try_run_to_chr(FOLLOW_CHR, /*goto*/ 0x06)
try_run_to_chr(CHR_PRESET, /*goto*/ 0x06)
// Wait until detected target guard
beginloop(0x06)
@@ -1664,7 +1664,7 @@ u8 func0413_bugspotter[] = {
if_object_in_good_condition(OBJ_LIMO, /*goto*/ 0x03)
goto_next(LABEL_RUN_AWAY)
label(0x03)
if_detected_chr(FOLLOW_CHR, /*goto*/ 0x04)
if_detected_chr(CHR_PRESET, /*goto*/ 0x04)
endloop(0x06)
// Alert everyone in group
@@ -1814,7 +1814,7 @@ u8 func041d_fbi[] = {
// Unreachable
label(0x04)
say_quip(CHR_JOANNA, 0x1b, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00)
say_quip(CHR_BOND, 0x1b, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00)
set_squadron_alertness(100)
goto_next(0x16)
@@ -1876,7 +1876,7 @@ u8 func041d_fbi[] = {
endloop(0x0d)
label(0x04)
say_quip(CHR_JOANNA, 0x1b, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00)
say_quip(CHR_BOND, 0x1b, 0xff, 0x00, 0xff, 0x81, 0x00, 0x00)
animation(0x0266, 0, 193, 0x0010, CHR_SELF, 2)
beginloop(0x0e)
@@ -1909,7 +1909,7 @@ u8 func041d_fbi[] = {
\
label(0x05) \
set_stage_flag(STAGEFLAG_CIVILIAN_DEAD) \
message(CHR_JOANNA, 0x321d) /* "Mission failed - unacceptable civilian casualties." */ \
message(CHR_BOND, 0x321d) /* "Mission failed - unacceptable civilian casualties." */ \
set_function(CHR_SELF, GFUNC_IDLE)
@@ -1934,7 +1934,7 @@ u8 func100a_check_cia2_dead[] = {
label(0x05)
set_stage_flag(STAGEFLAG_CIVILIAN_DEAD)
message(CHR_JOANNA, 0x321d) // "Mission failed - unacceptable civilian casualties."
message(CHR_BOND, 0x321d) // "Mission failed - unacceptable civilian casualties."
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
@@ -2209,7 +2209,7 @@ u8 func041e_sealer1[] = {
set_stage_flag(STAGEFLAG_ELEVATOR_SEALED)
assign_sound(0x0469, CHANNEL_6)
play_sound_from_entity(CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01)
message(CHR_JOANNA, 0x3221) // "Elevator access sealed."
message(CHR_BOND, 0x3221) // "Elevator access sealed."
animation(ANIM_STANDING_TYPE_ONE_HAND, 0, 193, 0x1010, CHR_SELF, 2)
beginloop(0x06)
@@ -2415,28 +2415,28 @@ u8 func101f_setup_robot_noise[] = {
*/
u8 func1400_give_briefcases[] = {
yield
set_chr_team(CHR_COUNTEROP, TEAM_20)
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_JOANNA)
give_object_to_chr(OBJ_BRIEFCASE3, CHR_BOND)
// All difficulties
label(0x03)
give_object_to_chr(OBJ_BRIEFCASE4, CHR_JOANNA)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 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_VELVET)
give_object_to_chr(OBJ_BRIEFCASE5, CHR_COOP)
// All difficulties
label(0x04)
give_object_to_chr(OBJ_BRIEFCASE6, CHR_VELVET)
give_object_to_chr(OBJ_BRIEFCASE6, CHR_COOP)
set_function(CHR_SELF, GFUNC_REBUILD_GROUPS)
// Velvet doesn't exist
@@ -2509,7 +2509,7 @@ u8 func1014_crash[] = {
move_object_to_pad(OBJ_MINE1, 0x0029)
destroy_object(OBJ_MINE1)
set_stage_flag(STAGEFLAG_DIVERSION_CREATED)
message(CHR_JOANNA, 0x3236) // "Diversion has been created."
message(CHR_BOND, 0x3236) // "Diversion has been created."
destroy_object(OBJ_TAXI)
restart_timer
@@ -2552,16 +2552,16 @@ u8 func040a_intro_sfx[] = {
wait_until(30, 0x55)
speak(CHR_JOANNA, 0x3244, 0x7408, CHANNEL_7, COLOR_05_GREEN) // "We suspect the G5 Corporation is just a front for ..."
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_JOANNA, 0x3245, 0x7409, CHANNEL_7, COLOR_09_BLUE) // "Just who is this help you keep referring to?"
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_JOANNA, 0x3246, 0x740a, CHANNEL_7, COLOR_05_GREEN) // "Not now, Joanna. Time for radio silence. Good luck..."
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_JOANNA, 0x3247, 0x740b, CHANNEL_7, COLOR_09_BLUE) // "Thanks a lot."
speak(CHR_BOND, 0x3247, 0x740b, CHANNEL_7, COLOR_09_BLUE) // "Thanks a lot."
label(0x2d)
yield
@@ -2675,7 +2675,7 @@ u8 func040a_intro_sfx[] = {
u8 func040b_outro[] = {
camera_movement(0x0178)
set_music_track(MUSIC_CHICAGO_OUTRO)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(0xf1, CHRFLAG3_HIDDEN)
set_function(CHR_P1P2, GFUNC_IDLE)
open_door2(0x10)
@@ -3040,7 +3040,7 @@ u8 func101e_check_sealer_guards_dead[] = {
label(0x03)
if_stage_flag_eq(STAGEFLAG_DIVERSION_CREATED, TRUE, /*goto*/ 0x03)
message(CHR_JOANNA, 0x3242) // "An alternative diversion has been created!"
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)
@@ -3284,7 +3284,7 @@ struct ailists functions[] = {
{ func1001_objectives_failed_msg, 0x1001 },
{ func1002_rebuild_groups, 0x1002 },
{ func040a_intro_from_gameplay, 0x1003 },
{ func1004_tracerbug_joanna, 0x1004 },
{ func1004_tracerbug_bond, 0x1004 },
{ func1005_check_things_destroyed, 0x1005 },
{ func1006_check_for_end, 0x1006 },
{ func040d_limo_timing, 0x1007 },
@@ -3296,7 +3296,7 @@ struct ailists functions[] = {
{ func100d_spawn_alarm_responders, 0x100d },
{ func100f_check_mine, 0x100f },
{ func1010_elevator_switch, 0x1010 },
{ func1011_trackerbug_velvet, 0x1011 },
{ func1011_trackerbug_coop, 0x1011 },
{ func1012_update_robot_position_flags, 0x1012 },
{ func1014_crash, 0x1014 },
{ func040a_intro_sfx, 0x1415 },
+210 -210
View File
File diff suppressed because it is too large Load Diff
+52 -52
View File
@@ -865,11 +865,11 @@ struct aipaths paths[] = {
u8 func1000_setup_counterop[] = {
yield
set_chr_team(CHR_COUNTEROP, TEAM_ENEMY)
set_chr_team(CHR_ANTI, TEAM_ENEMY)
// These objects don't exist...?
give_object_to_chr(0x05, CHR_JOANNA)
give_object_to_chr(0x3a, CHR_VELVET)
give_object_to_chr(0x05, CHR_BOND)
give_object_to_chr(0x3a, CHR_COOP)
set_function(CHR_SELF, GFUNC_REBUILD_GROUPS)
endfunction
@@ -1131,7 +1131,7 @@ u8 func100d_start_lifts[] = {
u8 func1003_check_experiment_destroyed[] = {
beginloop(0x04)
if_object_in_good_condition(OBJ_EXPERIMENT, /*goto*/ 0x2c)
message(CHR_JOANNA, 0x3c07) // "Medical experiment has been sabotaged."
message(CHR_BOND, 0x3c07) // "Medical experiment has been sabotaged."
set_stage_flag(STAGEFLAG_EXPERIMENT_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
label(0x2c)
@@ -1143,7 +1143,7 @@ u8 func1003_check_experiment_destroyed[] = {
u8 func1004_check_saucer_destroyed[] = {
beginloop(0x04)
if_object_in_good_condition(0x3e, /*goto*/ 0x2c)
message(CHR_JOANNA, 0x3c08) // "Captured Maian saucer has been destroyed."
message(CHR_BOND, 0x3c08) // "Captured Maian saucer has been destroyed."
set_stage_flag(STAGEFLAG_SAUCER_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
label(0x2c)
@@ -1256,7 +1256,7 @@ u8 func0410_clone_spawner2[] = {
// Wait until player is in room 0x005e
beginloop(0x0d)
if_chr_in_room(CHR_JOANNA, 0x00, 0x005e, /*goto*/ 0x2c)
if_chr_in_room(CHR_BOND, 0x00, 0x005e, /*goto*/ 0x2c)
endloop(0x0d)
beginloop(0x04)
@@ -1327,13 +1327,13 @@ u8 func1008_check_console[] = {
label(0x2c)
assign_sound(0x8111, CHANNEL_0)
play_sound_from_object(CHANNEL_0, OBJ_CONSOLE, 0x012c, 0x0190)
message(CHR_JOANNA, 0x3c09) // "Distress signal has been sent."
message(CHR_BOND, 0x3c09) // "Distress signal has been sent."
set_stage_flag(STAGEFLAG_CONSOLE_ACTIVATED)
set_function(CHR_SELF, GFUNC_IDLE)
// Console destroyed
label(0x08)
message(CHR_JOANNA, 0x3c0a) // "Critical mission object has been destroyed."
message(CHR_BOND, 0x3c0a) // "Critical mission object has been destroyed."
set_stage_flag(STAGEFLAG_CONSOLE_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -1354,17 +1354,17 @@ u8 func1009_check_for_exit[] = {
endloop(0x08)
label(0x2c)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_INVINCIBLE_TO_GUNFIRE)
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_INVINCIBLE_TO_GUNFIRE)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x2c)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x2c)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x2c)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_INVINCIBLE_TO_GUNFIRE)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_INVINCIBLE_TO_GUNFIRE)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x2c)
if_chr_dying(CHR_BOND, /*goto*/ 0x2c)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x2c)
goto_next(0x06)
label(0x2c)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x2c)
if_chr_dying(CHR_VELVET, /*goto*/ 0x2c)
if_chr_unloaded(CHR_VELVET, /*goto*/ 0x2c)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2c)
if_chr_dying(CHR_COOP, /*goto*/ 0x2c)
if_chr_unloaded(CHR_COOP, /*goto*/ 0x2c)
goto_next(0x06)
// Both players dead
@@ -1407,10 +1407,10 @@ u8 func100a_vertical_door_sounds[] = {
u8 func100b_check_medlab_escapable[] = {
// While player is in the starting area
beginloop(0x04)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0095, /*goto*/ 0x2c)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0096, /*goto*/ 0x2c)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0097, /*goto*/ 0x2c)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0098, /*goto*/ 0x2c)
if_chr_in_room(CHR_BOND, 0x00, 0x0095, /*goto*/ 0x2c)
if_chr_in_room(CHR_BOND, 0x00, 0x0096, /*goto*/ 0x2c)
if_chr_in_room(CHR_BOND, 0x00, 0x0097, /*goto*/ 0x2c)
if_chr_in_room(CHR_BOND, 0x00, 0x0098, /*goto*/ 0x2c)
reloop(0x04)
// If any glass is broken, jump to 0x0d where we'll return
@@ -1433,7 +1433,7 @@ u8 func100b_check_medlab_escapable[] = {
// Wait until we have pistol ammo (ie. Falcon 2), then wait until we don't.
label(0x06)
if_stage_flag_eq(STAGEFLAG_GOT_FALCON2, TRUE, /*goto*/ 0x66)
if_ammo_quantity_lt(CHR_JOANNA, AMMOTYPE_PISTOL, 1, /*goto*/ 0x67)
if_ammo_quantity_lt(CHR_BOND, AMMOTYPE_PISTOL, 1, /*goto*/ 0x67)
set_stage_flag(STAGEFLAG_GOT_FALCON2)
reloop(0x04)
@@ -1441,7 +1441,7 @@ u8 func100b_check_medlab_escapable[] = {
reloop(0x04)
label(0x66)
if_ammo_quantity_lt(CHR_JOANNA, AMMOTYPE_PISTOL, 1, /*goto*/ 0x2c)
if_ammo_quantity_lt(CHR_BOND, AMMOTYPE_PISTOL, 1, /*goto*/ 0x2c)
reloop(0x04)
// Trolley is destroyed. Wait 3 seconds for explosion to break any glass.
@@ -1474,11 +1474,11 @@ u8 func100b_check_medlab_escapable[] = {
if_chr_unloaded(CHR_LABTECH2, /*goto*/ 0x65)
label(0x06)
if_chr_has_object(CHR_JOANNA, OBJ_PSYCHOSISGUN, /*goto*/ 0x2c)
if_chr_has_object(CHR_BOND, OBJ_PSYCHOSISGUN, /*goto*/ 0x2c)
reloop(0x04)
label(0x2c)
if_ammo_quantity_lt(CHR_JOANNA, AMMOTYPE_PSYCHOSIS, 1, /*goto*/ 0x2c)
if_ammo_quantity_lt(CHR_BOND, AMMOTYPE_PSYCHOSIS, 1, /*goto*/ 0x2c)
reloop(0x04)
// Both lab techs dead
@@ -1486,7 +1486,7 @@ u8 func100b_check_medlab_escapable[] = {
// Player has psychosis gun but ammo depleted
label(0x2c)
message(CHR_JOANNA, 0x3c0b) // "Mission failed - cannot escape from medlab."
message(CHR_BOND, 0x3c0b) // "Mission failed - cannot escape from medlab."
set_stage_flag(STAGEFLAG_TRAPPED_AT_START)
goto_next(0x0e)
@@ -1496,16 +1496,16 @@ u8 func100b_check_medlab_escapable[] = {
set_function(CHR_SELF, GFUNC_IDLE)
beginloop(0x0e)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0095, /*goto*/ 0x2c)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0096, /*goto*/ 0x2c)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0097, /*goto*/ 0x2c)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0098, /*goto*/ 0x2c)
if_chr_in_room(CHR_BOND, 0x00, 0x0095, /*goto*/ 0x2c)
if_chr_in_room(CHR_BOND, 0x00, 0x0096, /*goto*/ 0x2c)
if_chr_in_room(CHR_BOND, 0x00, 0x0097, /*goto*/ 0x2c)
if_chr_in_room(CHR_BOND, 0x00, 0x0098, /*goto*/ 0x2c)
goto_next(0x06)
label(0x2c)
endloop(0x0e)
label(0x06)
message(CHR_JOANNA, 0x3c0c) // "Alternative escape route found."
message(CHR_BOND, 0x3c0c) // "Alternative escape route found."
unset_stage_flag(STAGEFLAG_TRAPPED_AT_START)
goto_first(0x04)
@@ -1513,14 +1513,14 @@ u8 func100b_check_medlab_escapable[] = {
};
u8 func1002_intro[] = {
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_music_track(MUSIC_G5_INTRO)
camera_movement(0x0476)
cmd0175(60)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x0477, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x0477, -1, -1, 0x0600, CHR_BOND, 4)
set_object_flag_bank1(OBJ_TROLLEY, OBJECTFLAG1_04000000)
set_object_flag_bank2(OBJ_TROLLEY, OBJECTFLAG2_00000010)
object_do_animation(0x0478, OBJ_TROLLEY, 0x04ff, 0xff)
@@ -1559,12 +1559,12 @@ u8 func1002_intro[] = {
endloop(0x08)
label(0x87)
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x0477, -2, -1, 0x0600, CHR_JOANNA, 2)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x0477, -2, -1, 0x0600, CHR_BOND, 2)
unset_object_flag_bank1(OBJ_TROLLEY, OBJECTFLAG1_04000000)
set_object_flag_bank2(OBJ_TROLLEY, OBJECTFLAG2_00000010)
object_do_animation(0x0478, OBJ_TROLLEY, 0x04ff, 0xfe)
@@ -1576,15 +1576,15 @@ u8 func1002_intro[] = {
};
u8 func041b_outro[] = {
set_invincible(CHR_JOANNA)
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_invincible(CHR_BOND)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_music_track(MUSIC_G5_OUTRO)
camera_movement(0x0479)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x047a, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x047a, -1, -1, 0x0600, CHR_BOND, 4)
unset_chr_flag_bank3(CHR_OUTRO_GUARD, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_OUTRO_GUARD, CHRFLAG3_UNPLAYABLE)
@@ -1881,14 +1881,14 @@ u8 func1010_unload_part1_chrs[] = {
u8 func0414_unload[] = {
label(0x2c)
yield
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
if_within_units_of_sight(30, /*goto*/ 0x06)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x2c)
set_target_chr(CHR_VELVET)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2c)
set_target_chr(CHR_COOP)
if_within_units_of_sight(30, /*goto*/ 0x06)
label(0x2c)
if_chr_death_animation_finished(CHR_COUNTEROP, /*goto*/ 0x08)
set_target_chr(CHR_COUNTEROP)
if_chr_death_animation_finished(CHR_ANTI, /*goto*/ 0x08)
set_target_chr(CHR_ANTI)
if_within_units_of_sight(30, /*goto*/ 0x06)
label(0x08)
yield
+205 -205
View File
File diff suppressed because it is too large Load Diff
+54 -54
View File
@@ -295,7 +295,7 @@ u8 func1001_objectives_failed_msg[] = {
u8 func1000_counterop[] = {
yield
set_chr_team(CHR_COUNTEROP, TEAM_ENEMY)
set_chr_team(CHR_ANTI, TEAM_ENEMY)
set_function(CHR_SELF, GFUNC_REBUILD_GROUPS)
endfunction
};
@@ -390,13 +390,13 @@ u8 func0401_defend[] = {
endloop(0x8f)
label(0x2d)
if_chr_unloaded(TARGET_CHR, /*goto*/ 0x2d)
if_chr_death_animation_finished(TARGET_CHR, /*goto*/ 0x2d)
if_chr_dying(TARGET_CHR, /*goto*/ 0x2d)
if_chr_unloaded(CHR_TARGET, /*goto*/ 0x2d)
if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x2d)
if_chr_dying(CHR_TARGET, /*goto*/ 0x2d)
dprint 'D','E','T','E','C','T','E','D','\n',0,
set_return_function(CHR_SELF, FUNC_DEFEND)
set_onshot_function(FUNC_DEFEND)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
label(0x2d)
goto_first(0x03)
@@ -544,9 +544,9 @@ u8 func0404_maian[] = {
beginloop(0x04)
dprint 'G','O',' ','T','O',' ','P','A','D','\n',0,
if_enemy_distance_lt_and_los(2540, /*goto*/ 0x08)
if_chr_dying(TARGET_CHR, /*goto*/ 0x06)
if_chr_death_animation_finished(TARGET_CHR, /*goto*/ 0x06)
if_chr_unloaded(TARGET_CHR, /*goto*/ 0x06)
if_chr_dying(CHR_TARGET, /*goto*/ 0x06)
if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x06)
if_chr_unloaded(CHR_TARGET, /*goto*/ 0x06)
endloop(0x04)
// King died while running to him
@@ -556,12 +556,12 @@ u8 func0404_maian[] = {
// Maian has line of sight to king
label(0x08)
dprint 'D','E','T','E','C','T','E','D','\n',0,
if_chr_dying(TARGET_CHR, /*goto*/ 0x06)
if_chr_death_animation_finished(TARGET_CHR, /*goto*/ 0x06)
if_chr_unloaded(TARGET_CHR, /*goto*/ 0x06)
if_chr_dying(CHR_TARGET, /*goto*/ 0x06)
if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x06)
if_chr_unloaded(CHR_TARGET, /*goto*/ 0x06)
set_return_function(CHR_SELF, FUNC_MAIAN)
set_onshot_function(FUNC_MAIAN)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
// King died while fighting
label(0x06)
@@ -895,7 +895,7 @@ u8 func0406_skedar[] = {
dprint 'D','E','T','E','C','T','E','D','\n',0,
set_return_function(CHR_SELF, FUNC_SKEDAR)
set_onshot_function(FUNC_SKEDAR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
endfunction
};
@@ -907,7 +907,7 @@ u8 func1005_check_leader_dead[] = {
endloop(0x03)
label(0x2d)
message(CHR_JOANNA, 0x4607) // "Maian leader has been killed."
message(CHR_BOND, 0x4607) // "Maian leader has been killed."
set_stage_flag(STAGEFLAG_LEADER_DEAD)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -923,7 +923,7 @@ u8 func1009_check_king1_dead[] = {
endloop(0x03)
label(0x2d)
message(CHR_JOANNA, 0x4608) // "Skedar King has been killed."
message(CHR_BOND, 0x4608) // "Skedar King has been killed."
set_stage_flag(STAGEFLAG_KING1_DEAD)
unlock_door(0x3e, 0x40)
unlock_door(0x3f, 0x40)
@@ -942,7 +942,7 @@ u8 func100a_check_king2_dead[] = {
endloop(0x03)
label(0x2d)
message(CHR_JOANNA, 0x4608) // "Skedar King has been killed."
message(CHR_BOND, 0x4608) // "Skedar King has been killed."
set_stage_flag(STAGEFLAG_KING2_DEAD)
label(0x0e)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -960,7 +960,7 @@ u8 func100b_check_king3_dead[] = {
endloop(0x03)
label(0x2d)
message(CHR_JOANNA, 0x4608) // "Skedar King has been killed."
message(CHR_BOND, 0x4608) // "Skedar King has been killed."
set_stage_flag(STAGEFLAG_KING3_DEAD)
label(0x0e)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -983,16 +983,16 @@ u8 func1007_check_end_level[] = {
// Check Jo not dead
label(0x2d)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x2d)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x2d)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x2d)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x2d)
if_chr_dying(CHR_BOND, /*goto*/ 0x2d)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x2d)
goto_next(0x06)
// Check Velvet not dead
label(0x2d)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x2d)
if_chr_dying(CHR_VELVET, /*goto*/ 0x2d)
if_chr_unloaded(CHR_VELVET, /*goto*/ 0x2d)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2d)
if_chr_dying(CHR_COOP, /*goto*/ 0x2d)
if_chr_unloaded(CHR_COOP, /*goto*/ 0x2d)
goto_next(0x06)
// Mission failed
@@ -1017,16 +1017,16 @@ u8 func040c_hide[] = {
u8 func100d_king1_invincible[] = {
beginloop(0x03)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0070, /*goto*/ 0x2d)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0071, /*goto*/ 0x2d)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0072, /*goto*/ 0x2d)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0073, /*goto*/ 0x2d)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0074, /*goto*/ 0x2d)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0075, /*goto*/ 0x2d)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0076, /*goto*/ 0x2d)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0077, /*goto*/ 0x2d)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0078, /*goto*/ 0x2d)
if_chr_in_room(CHR_JOANNA, 0x00, 0x0079, /*goto*/ 0x2d)
if_chr_in_room(CHR_BOND, 0x00, 0x0070, /*goto*/ 0x2d)
if_chr_in_room(CHR_BOND, 0x00, 0x0071, /*goto*/ 0x2d)
if_chr_in_room(CHR_BOND, 0x00, 0x0072, /*goto*/ 0x2d)
if_chr_in_room(CHR_BOND, 0x00, 0x0073, /*goto*/ 0x2d)
if_chr_in_room(CHR_BOND, 0x00, 0x0074, /*goto*/ 0x2d)
if_chr_in_room(CHR_BOND, 0x00, 0x0075, /*goto*/ 0x2d)
if_chr_in_room(CHR_BOND, 0x00, 0x0076, /*goto*/ 0x2d)
if_chr_in_room(CHR_BOND, 0x00, 0x0077, /*goto*/ 0x2d)
if_chr_in_room(CHR_BOND, 0x00, 0x0078, /*goto*/ 0x2d)
if_chr_in_room(CHR_BOND, 0x00, 0x0079, /*goto*/ 0x2d)
set_chr_flag_bank3(CHR_KING1, CHRFLAG3_INVINCIBLE_TO_GUNFIRE)
reloop(0x03)
@@ -1056,7 +1056,7 @@ u8 unregistered_function[] = {
// Remove Blonde if counterop doesn't exist
label(0x03)
if_chr_death_animation_finished(CHR_COUNTEROP, /*goto*/ 0x2d)
if_chr_death_animation_finished(CHR_ANTI, /*goto*/ 0x2d)
set_function(CHR_SELF, GFUNC_IDLE)
label(0x2d)
remove_chr(CHR_BLONDE)
@@ -1065,17 +1065,17 @@ u8 unregistered_function[] = {
};
u8 func1002_intro[] = {
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_music_track(MUSIC_G5_INTRO)
set_chr_flag_bank2(CHR_COUNTEROP, CHRFLAG2_00020000)
set_chr_flag_bank2(CHR_ANTI, CHRFLAG2_00020000)
set_chr_flag_bank2(CHR_BLONDE, CHRFLAG2_00020000)
camera_movement(0x047c)
cmd0175(60)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x047d, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x047d, -1, -1, 0x0600, CHR_BOND, 4)
unset_chr_flag_bank3(CHR_MAIAN1, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_MAIAN1, CHRFLAG3_UNPLAYABLE)
@@ -1090,9 +1090,9 @@ u8 func1002_intro[] = {
restart_timer
fade_to_color(0x000000ff, 0)
fade_to_color(0x00000000, 110)
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_JOANNA, WEAPON_PHOENIX, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_PHOENIX, WEAPON_NONE)
// Wait 200 frames (3.3 secs) or until button pressed
beginloop(0x96)
@@ -1116,13 +1116,13 @@ u8 func1002_intro[] = {
// Outro done
label(0x82)
mute_channel(CHANNEL_10)
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank2(CHR_COUNTEROP, CHRFLAG2_00020000)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_chr_flag_bank2(CHR_ANTI, CHRFLAG2_00020000)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x047d, -2, -1, 0x0600, CHR_JOANNA, 2)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x047d, -2, -1, 0x0600, CHR_BOND, 2)
unset_chr_flag_bank3(CHR_MAIAN3, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_MAIAN3, CHRFLAG2_00020000)
@@ -1144,14 +1144,14 @@ u8 func1002_intro[] = {
};
u8 func040b_outro[] = {
set_invincible(CHR_JOANNA)
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_invincible(CHR_BOND)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_music_track(MUSIC_G5_OUTRO)
camera_movement(0x0480)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_MAIAN3, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_MAIAN3, CHRFLAG3_UNPLAYABLE)
+155 -155
View File
@@ -10,14 +10,14 @@
// Objects
#define OBJ_HOVERBED 0x00 // with Elvis on it
#define OBJ_MEDPACK_JOANNA 0x01
#define OBJ_MEDPACK_BOND 0x01
#define OBJ_TERMINAL1 0x03
#define OBJ_TERMINAL2 0x04
#define OBJ_WALLMINE 0x02
#define OBJ_MEDPACK_SWITCH 0x14
#define OBJ_UFO1 0x1f
#define OBJ_UFO2 0x22
#define OBJ_MEDPACK_VELVET 0x20
#define OBJ_MEDPACK_COOP 0x20
#define OBJ_WALLOBJECT 0x21
#define OBJ_MEDPACK_GLASS 0x2a
#define OBJ_HOVERBIKE 0x35
@@ -597,7 +597,7 @@ u8 intro[] = {
u8 func1400_setup_counterop[] = {
yield
set_chr_team(CHR_COUNTEROP, TEAM_ENEMY)
set_chr_team(CHR_ANTI, TEAM_ENEMY)
set_function(CHR_SELF, GFUNC_REBUILD_GROUPS)
endfunction
};
@@ -608,15 +608,15 @@ u8 func1001_objectives_failed_msg[] = {
endfunction
};
u8 func1022_gas_damage_joanna[] = {
set_target_chr(CHR_JOANNA)
u8 func1022_gas_damage_bond[] = {
set_target_chr(CHR_BOND)
set_function(CHR_SELF, FUNC_GAS_DAMAGE)
endfunction
};
u8 func1023_gas_damage_velvet[] = {
set_target_chr(CHR_VELVET)
if_chr_death_animation_finished(TARGET_CHR, /*goto*/ 0x32)
u8 func1023_gas_damage_coop[] = {
set_target_chr(CHR_COOP)
if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x32)
set_function(CHR_SELF, FUNC_GAS_DAMAGE)
label(0x32)
@@ -633,19 +633,19 @@ u8 func0401_gas_damage[] = {
restart_timer
beginloop(0x04)
if_chr_in_room(TARGET_CHR, 0x00, 0x009a, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0099, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x008f, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0090, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0092, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0093, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0094, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0095, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0096, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0097, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0098, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0099, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x009a, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x009a, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0099, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x008f, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0090, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0092, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0093, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0094, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0095, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0096, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0097, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0098, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0099, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x009a, /*goto*/ 0x06)
reloop(0x04)
label(0x06)
@@ -656,25 +656,25 @@ u8 func0401_gas_damage[] = {
yield
call_rng
if_rand_gt(50, /*goto*/ 0x32)
add_motion_blur(CHR_JOANNA, 7, TRUE)
add_motion_blur(CHR_BOND, 7, TRUE)
label(0x32)
if_timer_lt(460, /*goto*/ 0x32)
restart_timer
damage_chr2(TARGET_CHR, 514)
damage_chr2(CHR_TARGET, 514)
label(0x32)
if_chr_in_room(TARGET_CHR, 0x00, 0x009a, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0099, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x008f, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0090, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0092, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0093, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0094, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0095, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0096, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0097, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0098, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x0099, /*goto*/ 0x06)
if_chr_in_room(TARGET_CHR, 0x00, 0x009a, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x009a, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0099, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x008f, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0090, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0092, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0093, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0094, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0095, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0096, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0097, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0098, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x0099, /*goto*/ 0x06)
if_chr_in_room(CHR_TARGET, 0x00, 0x009a, /*goto*/ 0x06)
endloop(0x04)
label(0x06)
@@ -699,7 +699,7 @@ u8 func1004_jon_msgs_gravedanger[] = {
label(0x06)
restart_timer
speak(CHR_JOANNA, 0x480e, 0x814f, CHANNEL_4, COLOR_03_RED) // "Joanna - this is Jonathan. You're in grave danger."
speak(CHR_BOND, 0x480e, 0x814f, CHANNEL_4, COLOR_03_RED) // "Joanna - this is Jonathan. You're in grave danger."
beginloop(0x08)
if_timer_gt(240, /*goto*/ 0x06)
@@ -707,7 +707,7 @@ u8 func1004_jon_msgs_gravedanger[] = {
label(0x06)
restart_timer
speak(CHR_JOANNA, 0x480f, 0x8150, CHANNEL_4, COLOR_03_RED) // "They've flooded the area with nerve gas."
speak(CHR_BOND, 0x480f, 0x8150, CHANNEL_4, COLOR_03_RED) // "They've flooded the area with nerve gas."
beginloop(0x09)
if_timer_gt(240, /*goto*/ 0x06)
@@ -715,7 +715,7 @@ u8 func1004_jon_msgs_gravedanger[] = {
label(0x06)
restart_timer
speak(CHR_JOANNA, 0x4810, 0x8151, CHANNEL_4, COLOR_03_RED) // "Get our friend to the containment lab. There's a h..."
speak(CHR_BOND, 0x4810, 0x8151, CHANNEL_4, COLOR_03_RED) // "Get our friend to the containment lab. There's a h..."
beginloop(0x0a)
if_timer_gt(270, /*goto*/ 0x06)
@@ -723,7 +723,7 @@ u8 func1004_jon_msgs_gravedanger[] = {
label(0x06)
restart_timer
speak(CHR_JOANNA, 0x4811, 0x8152, CHANNEL_4, COLOR_03_RED) // "I'll contact you when you get there - good luck!"
speak(CHR_BOND, 0x4811, 0x8152, CHANNEL_4, COLOR_03_RED) // "I'll contact you when you get there - good luck!"
beginloop(0x0c)
if_timer_gt(240, /*goto*/ 0x06)
@@ -745,12 +745,12 @@ u8 func1005_jon_msgs_meetup[] = {
unset_object_flag_bank1(0x0d, OBJECTFLAG1_08000000)
set_object_flag_bank1(0x0d, OBJECTFLAG1_10000000)
unlock_door(0x0d, 0x20)
release_grabbed_object(CHR_JOANNA)
release_grabbed_object(CHR_BOND)
yield
unset_object_flag_bank2(OBJ_HOVERBED, OBJECTFLAG2_GRABBABLE)
unset_object_flag_bank2(OBJ_HOVERBED, OBJECTFLAG2_PUSHABLE)
restart_timer
speak(CHR_JOANNA, 0x4812, 0x8153, CHANNEL_4, COLOR_03_RED) // "Good work, Jo. We need to meet up. They're getting..."
speak(CHR_BOND, 0x4812, 0x8153, CHANNEL_4, COLOR_03_RED) // "Good work, Jo. We need to meet up. They're getting..."
beginloop(0x08)
if_timer_gt(300, /*goto*/ 0x06)
@@ -758,7 +758,7 @@ u8 func1005_jon_msgs_meetup[] = {
label(0x06)
restart_timer
speak(CHR_JOANNA, 0x4813, 0x8154, CHANNEL_4, COLOR_03_RED) // "Use the maintenance hatch I've opened in one of th..."
speak(CHR_BOND, 0x4813, 0x8154, CHANNEL_4, COLOR_03_RED) // "Use the maintenance hatch I've opened in one of th..."
beginloop(0x09)
if_timer_gt(300, /*goto*/ 0x06)
@@ -772,8 +772,8 @@ u8 func1005_jon_msgs_meetup[] = {
u8 func1007_check_medpack_collected[] = {
beginloop(0x04)
if_chr_has_object(CHR_JOANNA, OBJ_MEDPACK_JOANNA, /*goto*/ 0x06)
if_chr_has_object(CHR_VELVET, OBJ_MEDPACK_JOANNA, /*goto*/ 0x06)
if_chr_has_object(CHR_BOND, OBJ_MEDPACK_BOND, /*goto*/ 0x06)
if_chr_has_object(CHR_COOP, OBJ_MEDPACK_BOND, /*goto*/ 0x06)
endloop(0x04)
label(0x06)
@@ -963,7 +963,7 @@ u8 func0404_jonathan_following_and_mine[] = {
// Saw enemy
label(0x09)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
// In mine room
label(0x0a)
@@ -1079,7 +1079,7 @@ u8 func0413_jonathan_hangar[] = {
// Attack enemy (jumped to from further below)
label(0x09)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
// Alive and well
label(0x63)
@@ -1151,7 +1151,7 @@ u8 func0413_jonathan_hangar[] = {
label(0x06)
restart_timer
speak(CHR_JOANNA, 0x4829, 0x72a7, CHANNEL_5, COLOR_09_BLUE) // "It's the only way out of here."
speak(CHR_BOND, 0x4829, 0x72a7, CHANNEL_5, COLOR_09_BLUE) // "It's the only way out of here."
beginloop(0x15)
if_chr_death_animation_finished(CHR_ELVIS, /*goto*/ 0xc3)
@@ -1182,7 +1182,7 @@ u8 func0413_jonathan_hangar[] = {
label(0x06)
restart_timer
speak(CHR_JOANNA, 0x482a, 0x72a8, CHANNEL_5, COLOR_09_BLUE) // "You're the only one who can fly it, Elvis, so get ..."
speak(CHR_BOND, 0x482a, 0x72a8, CHANNEL_5, COLOR_09_BLUE) // "You're the only one who can fly it, Elvis, so get ..."
beginloop(0x17)
if_chr_death_animation_finished(CHR_ELVIS, /*goto*/ 0xc3)
@@ -1213,7 +1213,7 @@ u8 func0413_jonathan_hangar[] = {
label(0x06)
restart_timer
speak(CHR_JOANNA, 0x482b, 0x72a9, CHANNEL_5, COLOR_09_BLUE) // "But we can't leave you behind."
speak(CHR_BOND, 0x482b, 0x72a9, CHANNEL_5, COLOR_09_BLUE) // "But we can't leave you behind."
beginloop(0x18)
if_chr_death_animation_finished(CHR_ELVIS, /*goto*/ 0xc3)
@@ -1228,7 +1228,7 @@ u8 func0413_jonathan_hangar[] = {
label(0x06)
restart_timer
speak(CHR_JOANNA, 0x482c, 0x72aa, CHANNEL_5, COLOR_09_BLUE) // "There must be a way out of here."
speak(CHR_BOND, 0x482c, 0x72aa, CHANNEL_5, COLOR_09_BLUE) // "There must be a way out of here."
beginloop(0x19)
if_chr_death_animation_finished(CHR_ELVIS, /*goto*/ 0xc3)
@@ -1334,7 +1334,7 @@ u8 func0413_jonathan_hangar[] = {
// Jo taking over
label(0x59)
speak(CHR_JOANNA, 0x482f, 0x72ac, CHANNEL_5, COLOR_09_BLUE) // "Jonathan, go with Elvis. I'll see to the consoles."
speak(CHR_BOND, 0x482f, 0x72ac, CHANNEL_5, COLOR_09_BLUE) // "Jonathan, go with Elvis. I'll see to the consoles."
restart_timer
try_face_entity(0x0200, 0x0000, /*goto*/ 0x46)
@@ -1425,7 +1425,7 @@ u8 func041b_jonathan_after_terminals[] = {
endloop(0x4d)
label(0x09)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET_CHR)
set_function(CHR_SELF, GFUNC_COMBAT_WITH_TARGET)
endfunction
};
@@ -1482,7 +1482,7 @@ u8 func0406_unused_0406[] = {
label(0x06)
set_alertness(100)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
set_function(CHR_SELF, GFUNC_ALERTED)
endfunction
};
@@ -1561,7 +1561,7 @@ u8 func1008_spawngroup1_guard[] = {
run_to_pad(0x013e)
rebuild_teams
rebuild_squadrons
set_function(CHR_SELF, GFUNC_CHOOSE_TARGET_CHR)
set_function(CHR_SELF, GFUNC_CHOOSE_TARGET)
endfunction
};
@@ -1635,7 +1635,7 @@ u8 func1013_spawngroup2_guard[] = {
set_squadron(SPAWNGROUP2)
rebuild_teams
rebuild_squadrons
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
set_function(CHR_SELF, GFUNC_ALERTED)
endfunction
};
@@ -1738,7 +1738,7 @@ u8 func1014_spawngroup3_guard[] = {
set_squadron(SPAWNGROUP3)
rebuild_teams
rebuild_squadrons
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
set_function(CHR_SELF, GFUNC_ALERTED)
endfunction
};
@@ -1821,7 +1821,7 @@ u8 func1015_spawngroup4_guard[] = {
rebuild_teams
rebuild_squadrons
run_to_pad(0x0168)
set_function(CHR_SELF, GFUNC_CHOOSE_TARGET_CHR)
set_function(CHR_SELF, GFUNC_CHOOSE_TARGET)
endfunction
};
@@ -1869,13 +1869,13 @@ u8 func100b_check_jonathan_dead[] = {
// A and SA
label(0x32)
give_object_to_chr(OBJ_MEDPACK_JOANNA, CHR_JOANNA)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x32)
give_object_to_chr(OBJ_MEDPACK_VELVET, CHR_VELVET)
give_object_to_chr(OBJ_MEDPACK_BOND, CHR_BOND)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x32)
give_object_to_chr(OBJ_MEDPACK_COOP, CHR_COOP)
goto_next(0x04)
label(0x32)
hide_object(OBJ_MEDPACK_VELVET)
hide_object(OBJ_MEDPACK_COOP)
// All difficulties
beginloop(0x04)
@@ -1886,7 +1886,7 @@ u8 func100b_check_jonathan_dead[] = {
label(0x06)
if_stage_flag_eq(STAGEFLAG_STARTED_OUTRO, TRUE, /*goto*/ 0x32)
message(CHR_JOANNA, 0x481d) // "Jonathan has been killed."
message(CHR_BOND, 0x481d) // "Jonathan has been killed."
set_stage_flag(STAGEFLAG_JON_DEAD)
label(0x32)
@@ -1946,16 +1946,16 @@ u8 func100c_medpack_activation[] = {
if_chr_death_animation_finished(CHR_JONATHAN, /*goto*/ 0x32)
if_chr_dying(CHR_JONATHAN, /*goto*/ 0x32)
if_chr_unloaded(CHR_JONATHAN, /*goto*/ 0x32)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x33)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x33)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x33)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x33)
if_chr_dying(CHR_BOND, /*goto*/ 0x33)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x33)
goto_next(0x06)
// Joanna is dead
label(0x33)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x32)
if_chr_dying(CHR_VELVET, /*goto*/ 0x32)
if_chr_unloaded(CHR_VELVET, /*goto*/ 0x32)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x32)
if_chr_dying(CHR_COOP, /*goto*/ 0x32)
if_chr_unloaded(CHR_COOP, /*goto*/ 0x32)
goto_next(0x06)
// Everyone is alive
@@ -2108,7 +2108,7 @@ u8 func100d_check_terminals_destroyed[] = {
endloop(0x04)
label(0x08)
message(CHR_JOANNA, 0x4824) // "Mission critical object destroyed."
message(CHR_BOND, 0x4824) // "Mission critical object destroyed."
set_stage_flag(STAGEFLAG_HANGAR_TERMINAL_DESTROYED)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -2124,7 +2124,7 @@ u8 func100e_check_elvis_dead[] = {
label(0x06)
if_stage_flag_eq(STAGEFLAG_STARTED_OUTRO, TRUE, /*goto*/ 0x32)
set_stage_flag(STAGEFLAG_ELVIS_DEAD)
message(CHR_JOANNA, 0x481e) // "Elvis has been killed."
message(CHR_BOND, 0x481e) // "Elvis has been killed."
label(0x32)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -2172,16 +2172,16 @@ u8 func1010_check_end_level[] = {
if_chr_dying(CHR_JONATHAN, /*goto*/ 0x0f)
if_chr_unloaded(CHR_JONATHAN, /*goto*/ 0x0f)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x32)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x32)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x32)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x32)
if_chr_dying(CHR_BOND, /*goto*/ 0x32)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x32)
goto_next(0x06)
// Joanna is dead
label(0x32)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x33)
if_chr_dying(CHR_VELVET, /*goto*/ 0x33)
if_chr_unloaded(CHR_VELVET, /*goto*/ 0x33)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x33)
if_chr_dying(CHR_COOP, /*goto*/ 0x33)
if_chr_unloaded(CHR_COOP, /*goto*/ 0x33)
goto_next(0x06)
// Both Joanna and Velvet are dead
@@ -2195,7 +2195,7 @@ u8 func1010_check_end_level[] = {
set_function(CHR_SELF, FUNC_UFO_EXIT)
label(0x32)
set_invincible(CHR_JOANNA)
set_invincible(CHR_BOND)
set_function(CHR_SELF, FUNC_OUTRO)
// Jonathan and/or Elvis are dead
@@ -2359,7 +2359,7 @@ u8 func1017_check_both_hangar_doors_open[] = {
endloop(0x04)
label(0x32)
message(CHR_JOANNA, 0x4835) // "The hangar doors are now open."
message(CHR_BOND, 0x4835) // "The hangar doors are now open."
set_stage_flag(STAGEFLAG_BOTH_HANGAR_DOORS_OPEN)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -2452,15 +2452,15 @@ u8 func1019_enable_biotechs_after_stash[] = {
};
u8 func1002_intro[] = {
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_music_track(MUSIC_ESCAPE_INTRO)
camera_movement(0x019c)
cmd0175(60)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x019d, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x019d, -1, -1, 0x0600, CHR_BOND, 4)
set_chr_flag_bank3(0x23, CHRFLAG3_INVINCIBLE_TO_GUNFIRE)
set_chr_flag_bank3(0x23, CHRFLAG3_UNPLAYABLE)
@@ -2480,9 +2480,9 @@ u8 func1002_intro[] = {
restart_timer
fade_to_color(0x000000ff, 0)
fade_to_color(0x00000000, 90)
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_JOANNA, WEAPON_FALCON2_SCOPE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_FALCON2_SCOPE, WEAPON_NONE)
#define wait_until(time, loopid) \
beginloop(loopid) \
@@ -2494,7 +2494,7 @@ u8 func1002_intro[] = {
wait_until(2, 0xc5)
speak(CHR_JOANNA, 0x4851, 0x81ba, CHANNEL_7, COLOR_02_WHITE) // "What the hell do you think you're doing? This is s..."
speak(CHR_BOND, 0x4851, 0x81ba, CHANNEL_7, COLOR_02_WHITE) // "What the hell do you think you're doing? This is s..."
wait_until(60, 0x6a)
play_sound(0x0161, CHANNEL_6)
@@ -2529,7 +2529,7 @@ u8 func1002_intro[] = {
play_sound(0x0161, CHANNEL_6)
wait_until(545, 0x8a)
speak(CHR_JOANNA, 0x4854, 0x7758, CHANNEL_7, COLOR_09_BLUE) // "I don't care much for procedures!"
speak(CHR_BOND, 0x4854, 0x7758, CHANNEL_7, COLOR_09_BLUE) // "I don't care much for procedures!"
wait_until(588, 0x74)
play_sound(0x0162, CHANNEL_5)
@@ -2543,7 +2543,7 @@ u8 func1002_intro[] = {
wait_until(706, 0x77)
wait_until(770, 0xc6)
speak(CHR_JOANNA, 0x4852, 0x7436, CHANNEL_7, COLOR_02_WHITE) // "Director Easton will hear about this, young lady."
speak(CHR_BOND, 0x4852, 0x7436, CHANNEL_7, COLOR_02_WHITE) // "Director Easton will hear about this, young lady."
wait_until(810, 0xbe)
close_door(0x0e)
@@ -2556,7 +2556,7 @@ u8 func1002_intro[] = {
play_sound(0x0162, CHANNEL_4)
wait_until(998, 0xc7)
speak(CHR_JOANNA, 0x4853, 0x7437, CHANNEL_7, COLOR_02_WHITE) // "You can't take that! It's government property! Thi..."
speak(CHR_BOND, 0x4853, 0x7437, CHANNEL_7, COLOR_02_WHITE) // "You can't take that! It's government property! Thi..."
wait_until(1032, 0x7b)
play_sound(0x0161, CHANNEL_5)
@@ -2619,7 +2619,7 @@ u8 func1002_intro[] = {
play_sound(0x00fa, CHANNEL_10)
wait_until(1736, 0x96)
speak(CHR_JOANNA, 0x483f, 0x7438, CHANNEL_7, COLOR_02_WHITE) // "Let's see how that overconfident thief deals with ..."
speak(CHR_BOND, 0x483f, 0x7438, CHANNEL_7, COLOR_02_WHITE) // "Let's see how that overconfident thief deals with ..."
set_stage_flag(STAGEFLAG_GAS_ON)
wait_until(1773, 0x9a)
@@ -2650,7 +2650,7 @@ u8 func1002_intro[] = {
play_sound(0x0161, CHANNEL_6)
wait_until(2218, 0xa8)
speak(CHR_JOANNA, 0x4840, 0x7439, CHANNEL_7, COLOR_09_BLUE) // "What's that noise? Can't be... Gas!"
speak(CHR_BOND, 0x4840, 0x7439, CHANNEL_7, COLOR_09_BLUE) // "What's that noise? Can't be... Gas!"
wait_until(2271, 0xa9)
play_sound(0x0162, CHANNEL_6)
@@ -2671,7 +2671,7 @@ u8 func1002_intro[] = {
play_sound(0x0161, CHANNEL_6)
wait_until(2582, 0xaf)
speak(CHR_JOANNA, 0x4841, 0x743a, CHANNEL_7, COLOR_02_WHITE) // "Noooo, that wasn't meant to happen!"
speak(CHR_BOND, 0x4841, 0x743a, CHANNEL_7, COLOR_02_WHITE) // "Noooo, that wasn't meant to happen!"
wait_until(2725, 0xb1)
play_sound(0x0429, CHANNEL_10)
@@ -2723,7 +2723,7 @@ u8 func1002_intro[] = {
play_sound(0x00fa, CHANNEL_10)
wait_until(3894, 0xba)
speak(CHR_JOANNA, 0x4843, 0x743b, CHANNEL_7, COLOR_09_BLUE) // "You idiot! We'd better get out of here."
speak(CHR_BOND, 0x4843, 0x743b, CHANNEL_7, COLOR_09_BLUE) // "You idiot! We'd better get out of here."
wait_until(4146, 0xbb)
play_sound(0x0162, CHANNEL_6)
@@ -2749,11 +2749,11 @@ u8 func1002_intro[] = {
mute_channel(CHANNEL_7)
mute_channel(CHANNEL_6)
mute_channel(CHANNEL_10)
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x019d, -2, -1, 0x0600, CHR_JOANNA, 2)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x019d, -2, -1, 0x0600, CHR_BOND, 2)
unset_chr_flag_bank3(0x23, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(0x23, CHRFLAG2_00020000)
@@ -2772,10 +2772,10 @@ u8 func1002_intro[] = {
restart_default_music
reset_ambience
enter_firstperson
revoke_control(CHR_JOANNA, 0)
revoke_control(CHR_BOND, 0)
yield
grab_object(CHR_JOANNA, OBJ_HOVERBED)
grant_control(CHR_JOANNA)
grab_object(CHR_BOND, OBJ_HOVERBED)
grant_control(CHR_BOND)
yield
kill(0x23)
kill(0x24)
@@ -2784,34 +2784,34 @@ u8 func1002_intro[] = {
};
u8 func0c01_midcutscene[] = {
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_music_track(MUSIC_ESCAPE_MIDCUTSCENE)
camera_movement(0x01cb)
cmd0175(60)
hide_object(OBJ_HOVERBED)
set_target_chr(CHR_JOANNA)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x33)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x33)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x33)
set_target_chr(CHR_BOND)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x33)
if_chr_dying(CHR_BOND, /*goto*/ 0x33)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x33)
goto_next(0x06)
label(0x33)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x06)
if_chr_dying(CHR_VELVET, /*goto*/ 0x06)
if_chr_unloaded(CHR_VELVET, /*goto*/ 0x06)
set_target_chr(CHR_VELVET)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x06)
if_chr_dying(CHR_COOP, /*goto*/ 0x06)
if_chr_unloaded(CHR_COOP, /*goto*/ 0x06)
set_target_chr(CHR_COOP)
label(0x06)
unset_chr_flag_bank3(TARGET_CHR, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_TARGET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ELVIS, CHRFLAG3_INVINCIBLE_TO_GUNFIRE)
set_chr_flag_bank3(CHR_JONATHAN, CHRFLAG3_INVINCIBLE_TO_GUNFIRE)
set_function(CHR_JONATHAN, GFUNC_IDLE)
set_chr_flag_bank3(TARGET_CHR, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(TARGET_CHR, CHRFLAG3_HIDDEN)
set_chr_flag_bank2(TARGET_CHR, CHRFLAG2_00020000)
animation(0x01ce, -1, -1, 0x0600, TARGET_CHR, 4)
set_chr_flag_bank3(CHR_TARGET, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(CHR_TARGET, CHRFLAG3_HIDDEN)
set_chr_flag_bank2(CHR_TARGET, CHRFLAG2_00020000)
animation(0x01ce, -1, -1, 0x0600, CHR_TARGET, 4)
set_chr_flag_bank3(CHR_ELVIS, CHRFLAG3_UNPLAYABLE)
unset_chr_flag_bank3(CHR_ELVIS, CHRFLAG3_HIDDEN)
@@ -2835,12 +2835,12 @@ u8 func0c01_midcutscene[] = {
move_object_to_pad(OBJ_HOVERBIKE, 0x038a)
label(0x32)
restart_timer
set_cutscene_weapon(TARGET_CHR, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_TARGET, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(TARGET_CHR, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_TARGET, WEAPON_NONE, WEAPON_NONE)
wait_until(83, 0x6a)
speak(TARGET_CHR, 0x4845, 0x743c, CHANNEL_7, COLOR_06_WHITE) // "***aahh...! aahaa...! aaaaahhh! aha. ahh.***"
speak(CHR_TARGET, 0x4845, 0x743c, CHANNEL_7, COLOR_06_WHITE) // "***aahh...! aahaa...! aaaaahhh! aha. ahh.***"
wait_until(116, 0x6b)
play_sound(0x80c4, CHANNEL_6)
@@ -2864,22 +2864,22 @@ u8 func0c01_midcutscene[] = {
play_sound(0x80c5, CHANNEL_6)
wait_until(690, 0x72)
speak(TARGET_CHR, 0x4846, 0x743d, CHANNEL_7, COLOR_06_WHITE) // "I'm alive. I thought I'd be chopped up like the ot..."
speak(CHR_TARGET, 0x4846, 0x743d, CHANNEL_7, COLOR_06_WHITE) // "I'm alive. I thought I'd be chopped up like the ot..."
wait_until(1392, 0x73)
speak(TARGET_CHR, 0x4847, 0x743e, CHANNEL_7, COLOR_09_BLUE) // "You... You speak our language?"
speak(CHR_TARGET, 0x4847, 0x743e, CHANNEL_7, COLOR_09_BLUE) // "You... You speak our language?"
wait_until(1400, 0x74)
play_sound(0x80c4, CHANNEL_6)
wait_until(1554, 0x75)
speak(TARGET_CHR, 0x4848, 0x743f, CHANNEL_7, COLOR_03_RED) // "Watch her... she's sharp."
speak(CHR_TARGET, 0x4848, 0x743f, CHANNEL_7, COLOR_03_RED) // "Watch her... she's sharp."
wait_until(1688, 0x76)
speak(TARGET_CHR, 0x4849, 0x7440, CHANNEL_7, COLOR_06_WHITE) // "Earrggghh...eerggh..."
speak(CHR_TARGET, 0x4849, 0x7440, CHANNEL_7, COLOR_06_WHITE) // "Earrggghh...eerggh..."
wait_until(1962, 0x77)
speak(TARGET_CHR, 0x484a, 0x7441, CHANNEL_7, COLOR_09_BLUE) // "What's wrong?"
speak(CHR_TARGET, 0x484a, 0x7441, CHANNEL_7, COLOR_09_BLUE) // "What's wrong?"
wait_until(1988, 0x78)
play_sound(0x80c5, CHANNEL_6)
@@ -2888,10 +2888,10 @@ u8 func0c01_midcutscene[] = {
play_sound(0x80c4, CHANNEL_4)
wait_until(2113, 0x7a)
speak(TARGET_CHR, 0x484b, 0x7442, CHANNEL_7, COLOR_06_WHITE) // "I have a headache. And with a head this big, that'..."
speak(CHR_TARGET, 0x484b, 0x7442, CHANNEL_7, COLOR_06_WHITE) // "I have a headache. And with a head this big, that'..."
wait_until(2470, 0x7b)
speak(TARGET_CHR, 0x484c, 0x7443, CHANNEL_7, COLOR_09_BLUE) // "Can you walk? We must leave before they get organi..."
speak(CHR_TARGET, 0x484c, 0x7443, CHANNEL_7, COLOR_09_BLUE) // "Can you walk? We must leave before they get organi..."
wait_until(2480, 0x7c)
play_sound(0x80c5, CHANNEL_6)
@@ -2924,13 +2924,13 @@ u8 func0c01_midcutscene[] = {
play_sound(0x80c5, CHANNEL_4)
wait_until(2842, 0x86)
speak(TARGET_CHR, 0x484d, 0x7444, CHANNEL_7, COLOR_06_WHITE) // "I think so. What's your name?"
speak(CHR_TARGET, 0x484d, 0x7444, CHANNEL_7, COLOR_06_WHITE) // "I think so. What's your name?"
wait_until(3024, 0x87)
speak(TARGET_CHR, 0x484e, 0x7445, CHANNEL_7, COLOR_09_BLUE) // "I'm Agent Dark. Or Joanna, if you prefer."
speak(CHR_TARGET, 0x484e, 0x7445, CHANNEL_7, COLOR_09_BLUE) // "I'm Agent Dark. Or Joanna, if you prefer."
wait_until(3270, 0x88)
speak(TARGET_CHR, 0x484f, 0x7446, CHANNEL_7, COLOR_06_WHITE) // "Well, Joanna, I'm Protector One. But you can call ..."
speak(CHR_TARGET, 0x484f, 0x7446, CHANNEL_7, COLOR_06_WHITE) // "Well, Joanna, I'm Protector One. But you can call ..."
wait_until(3308, 0x89)
play_sound(0x80c6, CHANNEL_6)
@@ -2949,11 +2949,11 @@ u8 func0c01_midcutscene[] = {
mute_channel(CHANNEL_7)
restart_default_music
reset_ambience
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(TARGET_CHR, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(TARGET_CHR, CHRFLAG2_00020000)
animation(0x01ce, -2, -1, 0x0600, TARGET_CHR, 2)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_TARGET, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_TARGET, CHRFLAG2_00020000)
animation(0x01ce, -2, -1, 0x0600, CHR_TARGET, 2)
unset_chr_flag_bank3(CHR_ELVIS, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_ELVIS, CHRFLAG2_00020000)
@@ -2972,8 +2972,8 @@ u8 func0c01_midcutscene[] = {
unset_chr_flag_bank3(CHR_JONATHAN, CHRFLAG3_INVINCIBLE_TO_GUNFIRE)
set_function(CHR_JONATHAN, FUNC_JONATHAN_HANGAR)
set_function(CHR_ELVIS, FUNC_INIT_ELVIS)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x32)
chr_move_to_pad(CHR_VELVET, 0x0156, 0x01, /*goto*/ 0x32)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x32)
chr_move_to_pad(CHR_COOP, 0x0156, 0x01, /*goto*/ 0x32)
label(0x32)
show_nonessential_chrs(TRUE)
set_function(CHR_SELF, GFUNC_END_CINEMA)
@@ -2999,9 +2999,9 @@ u8 func0c02_outro[] = {
set_object_flag_bank0(0x2c, OBJECTFLAG0_40000000)
set_object_flag_bank0(0x2d, OBJECTFLAG0_40000000)
label(0x32)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_music_track(MUSIC_ESCAPE_OUTRO_LONG)
camera_movement(0x02d2)
label(0x32)
@@ -3073,8 +3073,8 @@ u8 func0c02_outro[] = {
set_stage_flag(STAGEFLAG_ESCAPED)
yield
yield
set_invincible(CHR_JOANNA)
revoke_control(CHR_JOANNA, 4)
set_invincible(CHR_BOND)
revoke_control(CHR_BOND, 4)
hide_countdown_timer
stop_countdown_timer
unset_eeprom_flag(EEPROMFLAG_DEFENSE_JON)
@@ -3141,15 +3141,15 @@ u8 func1021_jo_escaping[] = {
set_stage_flag(STAGEFLAG_ESCAPED)
yield
yield
set_invincible(CHR_JOANNA)
revoke_control(CHR_JOANNA, 4)
set_invincible(CHR_BOND)
revoke_control(CHR_BOND, 4)
hide_countdown_timer
stop_countdown_timer
label(0x62)
set_eeprom_flag(EEPROMFLAG_DEFENSE_JON)
set_music_track(MUSIC_ESCAPE_OUTRO_LONG)
camera_movement(0x02d4)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(0xf1, CHRFLAG3_HIDDEN)
set_function(CHR_P1P2, GFUNC_IDLE)
@@ -3250,12 +3250,12 @@ u8 func0417_init_follower_clone[] = {
u8 func0418_follower_clone[] = {
call_rng
if_rand_lt(128, /*goto*/ 0x32)
set_target_chr(CHR_VELVET)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x32)
set_target_chr(CHR_COOP)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x32)
goto_next(0x06)
label(0x32)
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
label(0x06)
set_function(CHR_SELF, GFUNC_ALERTED)
endfunction
@@ -3292,7 +3292,7 @@ u8 func101a_medpack_switch[] = {
if_object_in_good_condition(OBJ_MEDPACK_SWITCH, /*goto*/ 0x32)
if_difficulty_lt(DIFF_PA, /*goto*/ 0x06)
set_stage_flag(STAGEFLAG_MEDPACK_SWITCH_DESTROYED)
message(CHR_JOANNA, 0x4824) // "Mission critical object destroyed."
message(CHR_BOND, 0x4824) // "Mission critical object destroyed."
label(0x06)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -3336,9 +3336,9 @@ u8 unregistered_function1[] = {
* @unused
*/
u8 func040f_warp_jon_to_catwalk[] = {
set_target_chr(CHR_JOANNA)
set_target_chr(CHR_BOND)
if_chr_sees_player(/*goto*/ 0x06)
set_target_chr(CHR_VELVET)
set_target_chr(CHR_COOP)
if_chr_sees_player(/*goto*/ 0x06)
stop_chr
yield
@@ -3384,7 +3384,7 @@ u8 func101e_msg_hookup[] = {
endloop(0x6a)
label(0x32)
speak(CHR_JOANNA, 0x4838, 0x73c1, CHANNEL_6, COLOR_09_BLUE) // "Time to hook up with Jonathan, before he gets into..."
speak(CHR_BOND, 0x4838, 0x73c1, CHANNEL_6, COLOR_09_BLUE) // "Time to hook up with Jonathan, before he gets into..."
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
@@ -3426,7 +3426,7 @@ u8 func1020_msg_jetbike[] = {
endloop(0x6a)
label(0x32)
speak(CHR_JOANNA, 0x483a, 0x73c3, CHANNEL_6, COLOR_09_BLUE) // "The jetbike should get me out before they lock the..."
speak(CHR_BOND, 0x483a, 0x73c3, CHANNEL_6, COLOR_09_BLUE) // "The jetbike should get me out before they lock the..."
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
};
@@ -3831,8 +3831,8 @@ struct ailists functions[] = {
{ func101f_msg_oil, 0x101f },
{ func1020_msg_jetbike, 0x1020 },
{ func1021_jo_escaping, 0x1021 },
{ func1022_gas_damage_joanna, 0x1022 },
{ func1023_gas_damage_velvet, 0x1023 },
{ func1022_gas_damage_bond, 0x1022 },
{ func1023_gas_damage_coop, 0x1023 },
{ func1024_wall_immune_to_explosives, 0x1024 },
{ func1026_ufo_spinning, 0x1026 },
{ func102e_keep_hangar_doors_open, 0x102e },
+46 -46
View File
@@ -13,8 +13,8 @@
#define OBJ_CHIEF_LIFT 0x4e
#define OBJ_BLONDE_LIFT 0x4f
#define OBJ_SHUTTLE1 0x51
#define OBJ_JOANNA_BOMB 0x52
#define OBJ_VELVET_BOMB 0x53
#define OBJ_BOND_BOMB 0x52
#define OBJ_COOP_BOMB 0x53
#define OBJ_PLANTED_BOMB 0x54
#define OBJ_LOBBYDOOR_LEFT 0x5f
#define OBJ_LOBBYDOOR_RIGHT 0x60
@@ -1206,12 +1206,12 @@ u8 func1001_objectives_failed_msg[] = {
u8 func1000_setup_counterop[] = {
noop016c
yield
set_chr_team(CHR_COUNTEROP, TEAM_ENEMY)
set_chr_team(CHR_ANTI, TEAM_ENEMY)
yield
set_chr_team(CHR_COUNTEROP, TEAM_ENEMY)
give_object_to_chr(OBJ_JOANNA_BOMB, CHR_JOANNA)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x2c)
give_object_to_chr(OBJ_VELVET_BOMB, CHR_VELVET)
set_chr_team(CHR_ANTI, TEAM_ENEMY)
give_object_to_chr(OBJ_BOND_BOMB, CHR_BOND)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2c)
give_object_to_chr(OBJ_COOP_BOMB, CHR_COOP)
label(0x2c)
set_function(CHR_SELF, GFUNC_REBUILD_GROUPS)
endfunction
@@ -1276,7 +1276,7 @@ u8 func0411_cass_in_office[] = {
set_stage_flag(STAGEFLAG_TRIGGER_YWSM)
set_onshot_function(FUNC_CASS_RUNNING)
restart_timer
speak(TARGET_CHR, 0x4a08, 0x0d23, CHANNEL_6, COLOR_06_WHITE) // "Go to the helipad if you want to live."
speak(CHR_TARGET, 0x4a08, 0x0d23, CHANNEL_6, COLOR_06_WHITE) // "Go to the helipad if you want to live."
animation(0x0226, -1, -1, 0x1010, CHR_SELF, 2)
yield
@@ -1325,7 +1325,7 @@ u8 func0411_cass_in_office[] = {
animation(0x0245, 0, -1, 0x1010, CHR_SELF, 2)
try_draw_weapon(MODEL_CHRFALCON2, WEAPON_FALCON2, 0x00000000, /*goto*/ 0x2c)
label(0x2c)
speak(TARGET_CHR, 0x4a07, 0x81a3, CHANNEL_6, COLOR_04_ORANGE) // "Get the hell out of my office..."
speak(CHR_TARGET, 0x4a07, 0x81a3, CHANNEL_6, COLOR_04_ORANGE) // "Get the hell out of my office..."
beginloop(0x58)
if_sound_finished(CHANNEL_6, /*goto*/ 0x2c)
@@ -1427,7 +1427,7 @@ u8 func0413_cass_running[] = {
do_special_animation(-1)
restart_timer
if_stage_flag_eq(STAGEFLAG_CASS_SAID_YWSM, FALSE, /*goto*/ 0x06)
say_quip(TARGET_CHR, 0x2b, 0xff, 0x00, 0xff, BANK_1, 0x0a, 0x04)
say_quip(CHR_TARGET, 0x2b, 0xff, 0x00, 0xff, BANK_1, 0x0a, 0x04)
// And wait 2 seconds for the speech to finish
beginloop(0x0b)
@@ -1464,7 +1464,7 @@ u8 func1004_check_cass_dead[] = {
endloop(0x03)
label(0x2c)
message(CHR_JOANNA, 0x4a0e) // "Cassandra has been immobilized."
message(CHR_BOND, 0x4a0e) // "Cassandra has been immobilized."
set_stage_flag(STAGEFLAG_CASS_DEAD)
set_function(CHR_SELF, GFUNC_IDLE)
endfunction
@@ -1477,7 +1477,7 @@ u8 func1005_check_cass_captured[] = {
if_chr_dying(CHR_CASS, /*goto*/ 0x0d)
if_chr_unloaded(CHR_CASS, /*goto*/ 0x0d)
if_chr_y(CHR_CASS, 0, OPERATOR_LESS_THAN, /*goto*/ 0x2c)
message(CHR_JOANNA, 0x4a0f) // "Cassandra has been captured successfully."
message(CHR_BOND, 0x4a0f) // "Cassandra has been captured successfully."
set_stage_flag(STAGEFLAG_CASS_CAPTURED)
set_function(CHR_SELF, GFUNC_IDLE)
@@ -1520,7 +1520,7 @@ u8 func1006_lift_disabling[] = {
unset_object_flag_bank0(OBJ_CHIEF_LIFT, OBJECTFLAG0_DEACTIVATED)
unset_chr_flag_bank3(CHR_CHIEF, CHRFLAG3_HIDDEN)
set_function(CHR_CHIEF, FUNC_CHIEF)
message(CHR_JOANNA, 0x4a19) // "Lift has been disabled."
message(CHR_BOND, 0x4a19) // "Lift has been disabled."
// Wait until chief dead
beginloop(0x08)
@@ -1530,7 +1530,7 @@ u8 func1006_lift_disabling[] = {
endloop(0x08)
label(0x2c)
message(CHR_JOANNA, 0x4a10) // "Security chief has been eliminated."
message(CHR_BOND, 0x4a10) // "Security chief has been eliminated."
set_stage_flag(STAGEFLAG_CHIEF_DEAD)
restart_timer
@@ -1646,11 +1646,11 @@ u8 func1007_bomb_logic[] = {
// Plant bomb
label(0x2c)
message(CHR_JOANNA, 0x4a16) // "Skedar bomb has been placed successfully."
message(CHR_BOND, 0x4a16) // "Skedar bomb has been placed successfully."
remove_weapon_from_inventory(WEAPON_SKEDARBOMB)
set_stage_flag(STAGEFLAG_BOMB_PLANTED)
hide_object(OBJ_JOANNA_BOMB)
hide_object(OBJ_VELVET_BOMB)
hide_object(OBJ_BOND_BOMB)
hide_object(OBJ_COOP_BOMB)
assign_sound(0x8144, CHANNEL_1)
play_sound_from_object(CHANNEL_1, OBJ_PLANTED_BOMB, 0x0258, 0x04b0)
unset_object_flag_bank1(OBJ_PLANTED_BOMB, OBJECTFLAG1_INVISIBLE)
@@ -1678,7 +1678,7 @@ u8 func1007_bomb_logic[] = {
set_countdown_timer(0)
stop_countdown_timer
set_stage_flag(STAGEFLAG_BOMB_EXPIRED)
message(CHR_JOANNA, 0x4a17) // "Skedar bomb has detonated."
message(CHR_BOND, 0x4a17) // "Skedar bomb has detonated."
// Wait 2 seconds
restart_timer
@@ -1689,7 +1689,7 @@ u8 func1007_bomb_logic[] = {
// Bomb exploding
label(0xb2)
label(0x2c)
explosions_around_chr(CHR_JOANNA)
explosions_around_chr(CHR_BOND)
// Wait 2 seconds for player to die
restart_timer
@@ -1733,15 +1733,15 @@ u8 func1008_check_bomb_unplantable[] = {
yield
consider_coop_for_p1p2_chr(CHR_SELF)
if_stage_flag_eq(STAGEFLAG_BOMB_PLANTED, TRUE, /*goto*/ 0x0d)
if_chr_in_room(CHR_JOANNA, 0x00, 0x002b, /*goto*/ 0x06)
if_chr_in_room(CHR_VELVET, 0x00, 0x002b, /*goto*/ 0x06)
if_chr_in_room(CHR_BOND, 0x00, 0x002b, /*goto*/ 0x06)
if_chr_in_room(CHR_COOP, 0x00, 0x002b, /*goto*/ 0x06)
goto_next(0x2c)
label(0x06)
endloop(0xb1)
// Fail mission
label(0x2c)
message(CHR_JOANNA, 0x4a18) // "Lift doors locked - bomb cannot be placed."
message(CHR_BOND, 0x4a18) // "Lift doors locked - bomb cannot be placed."
set_stage_flag(STAGEFLAG_BOMB_UNPLANTABLE)
// Difficulty is agent or bomb has been planted - return
@@ -1849,15 +1849,15 @@ u8 func100a_check_for_completion[] = {
// If either player is alive
label(0x06)
if_chr_death_animation_finished(CHR_JOANNA, /*goto*/ 0x2c)
if_chr_dying(CHR_JOANNA, /*goto*/ 0x2c)
if_chr_unloaded(CHR_JOANNA, /*goto*/ 0x2c)
if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x2c)
if_chr_dying(CHR_BOND, /*goto*/ 0x2c)
if_chr_unloaded(CHR_BOND, /*goto*/ 0x2c)
goto_next(0x06)
label(0x2c)
if_chr_death_animation_finished(CHR_VELVET, /*goto*/ 0x2c)
if_chr_dying(CHR_VELVET, /*goto*/ 0x2c)
if_chr_unloaded(CHR_VELVET, /*goto*/ 0x2c)
if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2c)
if_chr_dying(CHR_COOP, /*goto*/ 0x2c)
if_chr_unloaded(CHR_COOP, /*goto*/ 0x2c)
goto_next(0x06)
// Both players dead
@@ -1931,20 +1931,20 @@ u8 func0416_intro[] = {
set_object_flag_bank1(0x62, OBJECTFLAG1_INVISIBLE)
unset_object_flag_bank0(0x61, OBJECTFLAG0_00000100)
unset_object_flag_bank0(0x62, OBJECTFLAG0_00000100)
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_music_track(MUSIC_G5_INTRO)
camera_movement(0x0472)
cmd0175(60)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x0473, -1, -1, 0x0600, CHR_JOANNA, 4)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x0473, -1, -1, 0x0600, CHR_BOND, 4)
restart_timer
fade_to_color(0x000000ff, 0)
fade_to_color(0x00000000, 110)
set_cutscene_weapon(CHR_JOANNA, WEAPON_NONE, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
yield
set_cutscene_weapon(CHR_JOANNA, WEAPON_MAULER, WEAPON_NONE)
set_cutscene_weapon(CHR_BOND, WEAPON_MAULER, WEAPON_NONE)
open_door(OBJ_LOBBYDOOR_LEFT)
open_door(OBJ_LOBBYDOOR_RIGHT)
@@ -1995,11 +1995,11 @@ u8 func0416_intro[] = {
set_object_flag_bank0(0x61, OBJECTFLAG0_00000100)
set_object_flag_bank0(0x62, OBJECTFLAG0_00000100)
mute_channel(CHANNEL_10)
unset_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
animation(0x0473, -2, -1, 0x0600, CHR_JOANNA, 2)
unset_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
unset_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
animation(0x0473, -2, -1, 0x0600, CHR_BOND, 2)
restart_default_music
reset_ambience
enter_firstperson
@@ -2008,15 +2008,15 @@ u8 func0416_intro[] = {
};
u8 func0417_outro[] = {
set_invincible(CHR_JOANNA)
set_invincible(CHR_BOND)
hide_object(OBJ_SHUTTLE1)
set_chr_flag_bank3(CHR_VELVET, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COUNTEROP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_COOP, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_ANTI, CHRFLAG3_HIDDEN)
set_music_track(MUSIC_G5_OUTRO)
camera_movement(0x0474)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_JOANNA, CHRFLAG2_00020000)
set_chr_flag_bank3(CHR_JOANNA, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_UNPLAYABLE)
set_chr_flag_bank2(CHR_BOND, CHRFLAG2_00020000)
set_chr_flag_bank3(CHR_BOND, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_CASS, CHRFLAG3_HIDDEN)
set_chr_flag_bank3(CHR_CASS, CHRFLAG3_INVINCIBLE_TO_GUNFIRE)
show_object(OBJ_SHUTTLE2)
+4 -4
View File
@@ -11020,11 +11020,11 @@ bool aiChrSetTeam(void)
bool ai010c(void)
{
u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
struct chrdata *chr = chrFindById(g_Vars.chrdata, FOLLOW_CHR);
struct chrdata *chr = chrFindById(g_Vars.chrdata, CHR_PRESET);
if (!chr || (!chr->unk020 && chr->pos->unk00 != 6)) {
chrSetChrPreset(g_Vars.chrdata, CHR_JOANNA);
chr = chrFindById(g_Vars.chrdata, FOLLOW_CHR);
chrSetChrPreset(g_Vars.chrdata, CHR_BOND);
chr = chrFindById(g_Vars.chrdata, CHR_PRESET);
}
if (func0f04aa8c(chr, g_Vars.chrdata, cmd[2])) {
@@ -16459,7 +16459,7 @@ bool aiSetChrSpecialDeathAnimation(void)
*/
bool aiSetRoomToSearch(void)
{
struct chrdata *target = chrFindById(g_Vars.chrdata, TARGET_CHR);
struct chrdata *target = chrFindById(g_Vars.chrdata, CHR_TARGET);
if (target && target->pos) {
g_Vars.chrdata->bitfielddata.roomtosearch = target->pos->room;
+13 -13
View File
@@ -80,16 +80,16 @@
#define CHANNEL_9 9
#define CHANNEL_10 10
#define CHR_P1P2 0xf2
#define CHR_F3 0xf3
#define CHR_COUNTEROP 0xf4
#define CHR_VELVET 0xf5
#define TARGET_CHR 0xf6
#define CHR_JOANNA 0xf8
#define CHR_CLONE 0xf9
#define CHR_FRIEND 0xfb // when seeing friend die
#define FOLLOW_CHR 0xfc
#define CHR_SELF 0xfd
#define CHR_P1P2 0xf2
#define CHR_F3 0xf3
#define CHR_ANTI 0xf4
#define CHR_COOP 0xf5
#define CHR_TARGET 0xf6
#define CHR_BOND 0xf8
#define CHR_CLONE 0xf9
#define CHR_SEEDIE 0xfb
#define CHR_PRESET 0xfc
#define CHR_SELF 0xfd
// Character flags - bank 0 (chr struct offset 0x114 - chr->flags)
#define CHRFLAG0_CANT_ALERT_GROUP 0x00000001 // Don't set group alertness when becoming aware
@@ -301,8 +301,8 @@
#define GFUNC_WAKEUP 0x0008
#define GFUNC_IDLE_0009 0x0009
#define GFUNC_BUSY 0x000a
#define GFUNC_CHOOSE_TARGET_CHR 0x000b
#define GFUNC_COMBAT_WITH_TARGET_CHR 0x000c
#define GFUNC_CHOOSE_TARGET 0x000b
#define GFUNC_COMBAT_WITH_TARGET 0x000c
#define GFUNC_INIT_COMBAT 0x000d // unused
#define GFUNC_SEE_THEN_ATTACK 0x000e // unused
#define GFUNC_HAND_COMBAT 0x000f
@@ -326,7 +326,7 @@
#define GFUNC_STOP_AND_IDLE 0x0021
#define GFUNC_COMMENT_ON_PLAYER_DEAD 0x0022 // unused
#define GFUNC_DODGE 0x0023
#define GFUNC_FOLLOW_JOANNA 0x0024
#define GFUNC_FOLLOW_BOND 0x0024
#define GFUNC_POINTLESS 0x0025 // unused
#define GFUNC_INIT_PSYCHOSIS 0x0026
#define GFUNC_PSYCHOSISED 0x0027
+287 -287
View File
File diff suppressed because it is too large Load Diff