mirror of
https://gitlab.com/ryandwyer/perfect-dark
synced 2026-07-09 05:23:15 -04:00
Rename CHR constants
This commit is contained in:
+366
-366
File diff suppressed because it is too large
Load Diff
+135
-135
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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)
|
||||
|
||||
+299
-299
File diff suppressed because it is too large
Load Diff
+254
-254
File diff suppressed because it is too large
Load Diff
+69
-69
@@ -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
@@ -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
@@ -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
File diff suppressed because it is too large
Load Diff
+69
-69
@@ -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 },
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
+79
-79
@@ -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
File diff suppressed because it is too large
Load Diff
+52
-52
@@ -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
File diff suppressed because it is too large
Load Diff
+54
-54
@@ -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
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
@@ -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
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user