980 lines
36 KiB
Plaintext
980 lines
36 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
start()
|
|
{
|
|
iprintln( "Refinery" );
|
|
maps\black_ice_util::player_start( "player_start_refinery" );
|
|
var_0 = [ "struct_ally_start_refinery_01", "struct_ally_start_refinery_02" ];
|
|
level._allies maps\black_ice_util::teleport_allies( var_0 );
|
|
thread maps\black_ice_audio::audio_derrick_explode_logic( "start" );
|
|
thread maps\black_ice_flarestack::event_pressure_buildup_start( 0.0 );
|
|
thread maps\black_ice_audio::sfx_exited_flarestack();
|
|
thread maps\black_ice::trains_periph_logic( 0.0, 1 );
|
|
common_scripts\utility::exploder( "flamestack_snow" );
|
|
common_scripts\utility::exploder( "refinery_lights" );
|
|
common_scripts\utility::exploder( "refinery_lights_b" );
|
|
}
|
|
|
|
main()
|
|
{
|
|
common_scripts\utility::array_call( getentarray( "opt_hide_refinery", "script_noteworthy" ), ::show );
|
|
common_scripts\utility::array_call( getentarray( "opt_hide_swim", "script_noteworthy" ), ::hide );
|
|
common_scripts\utility::array_call( getentarray( "opt_hide_camp", "script_noteworthy" ), ::hide );
|
|
thread trigger_wait_flag_set( "trig_refinery_ally_7", "flag_trig_refinery_ally_7" );
|
|
thread maps\black_ice_fx::turn_on_oil_derrick_lightsfx();
|
|
common_scripts\utility::exploder( "refinery_stack_smoke" );
|
|
common_scripts\utility::exploder( "refinery_lights" );
|
|
common_scripts\utility::array_thread( level._allies, maps\_utility::disable_cqbwalk );
|
|
setignoremegroup( "ignore_allies", "allies" );
|
|
thread enemies();
|
|
thread allies();
|
|
thread event_derrick_explode();
|
|
thread dialogue();
|
|
thread event_elevator_door_open();
|
|
thread player_tanks_foreshocks();
|
|
level thread maps\black_ice_util::waittill_notify_flag_set( "notify_refinery_explosion_start", "flag_refinery_explosion_start" );
|
|
thread maps\black_ice_fx::refinery_turn_on_buildup_fx_01();
|
|
maps\_utility::vision_set_fog_changes( "black_ice_refinery", 2.0 );
|
|
setsaveddvar( "r_snowAmbientColor", ( 0.02, 0.02, 0.03 ) );
|
|
common_scripts\utility::flag_wait( "flag_refinery_end" );
|
|
}
|
|
|
|
section_flag_inits()
|
|
{
|
|
common_scripts\utility::flag_init( "flag_refinery_explosion" );
|
|
common_scripts\utility::flag_init( "flag_refinery_engagement_start" );
|
|
common_scripts\utility::flag_init( "flag_refinery_advance_1" );
|
|
common_scripts\utility::flag_init( "flag_refinery_advance_2" );
|
|
common_scripts\utility::flag_init( "flag_refinery_advance_3" );
|
|
common_scripts\utility::flag_init( "flag_refinery_gas_blowout_01" );
|
|
common_scripts\utility::flag_init( "flag_refinery_gas_blowout_02" );
|
|
common_scripts\utility::flag_init( "flag_refinery_gas_blowout_03" );
|
|
common_scripts\utility::flag_init( "flag_retfinery_retreat" );
|
|
common_scripts\utility::flag_init( "flag_refinery_done" );
|
|
common_scripts\utility::flag_init( "flag_derrick_exploded" );
|
|
common_scripts\utility::flag_init( "flag_tanks_catwalk_collapse" );
|
|
common_scripts\utility::flag_init( "flag_ally_cqb" );
|
|
common_scripts\utility::flag_init( "flag_refinery_foreshocks" );
|
|
common_scripts\utility::flag_init( "deathflag_refinery" );
|
|
}
|
|
|
|
section_precache()
|
|
{
|
|
precachestring( &"BLACK_ICE_REFINERY_DEBRIS_DEATH" );
|
|
}
|
|
|
|
section_post_inits()
|
|
{
|
|
level._refinery = spawnstruct();
|
|
level._refinery.destroyed_derrick_models = getentarray( "model_derrick_collapsed", "script_noteworthy" );
|
|
common_scripts\utility::array_call( level._refinery.destroyed_derrick_models, ::hide );
|
|
level._refinery.derrick_struct = common_scripts\utility::getstruct( "struct_derrick", "targetname" );
|
|
level._refinery.enemy_struct = common_scripts\utility::getstruct( "struct_refinery_explosion_scene", "targetname" );
|
|
|
|
if ( isdefined( level._refinery.enemy_struct ) )
|
|
{
|
|
event_derrick_explode_debris_setup();
|
|
common_scripts\utility::array_call( getentarray( "opt_hide_refinery", "script_noteworthy" ), ::hide );
|
|
}
|
|
else
|
|
iprintln( "black_ice_refinery.gsc: Warning - Enemy struct missing (compiled out?)" );
|
|
}
|
|
|
|
dialogue()
|
|
{
|
|
maps\_utility::battlechatter_off( "allies" );
|
|
maps\_utility::battlechatter_off( "axis" );
|
|
level waittill( "notify_baker_hold_dialogue" );
|
|
level._allies[0] maps\_utility::smart_dialogue( "black_ice_bkr_waitforit" );
|
|
level waittill( "notify_derrick_explode_done" );
|
|
level._allies[0] maps\_utility::delaythread( 1, maps\_utility::smart_dialogue, "black_ice_bkr_getdown" );
|
|
level common_scripts\utility::waittill_either( "notify_notetrack_debris_end", "flag_refinery_engagement_start" );
|
|
level._allies[0] maps\_utility::smart_dialogue( "black_ice_bkr_weaponsfreeweaponsfree" );
|
|
maps\_utility::battlechatter_on( "allies" );
|
|
maps\_utility::battlechatter_on( "axis" );
|
|
}
|
|
|
|
dialogue_baker_waitforit()
|
|
{
|
|
common_scripts\utility::flag_wait( "flag_refinery_explosion" );
|
|
thread maps\black_ice_audio::sfx_pa_bursts();
|
|
level notify( "notify_baker_hold_dialogue" );
|
|
}
|
|
|
|
dialogue_ally_pulling_back()
|
|
{
|
|
wait 2;
|
|
level._allies[0] maps\_utility::smart_dialogue( "blackice_bkr_backpushforward" );
|
|
}
|
|
|
|
allies()
|
|
{
|
|
common_scripts\utility::array_thread( level._allies, maps\_utility::disable_pain );
|
|
common_scripts\utility::array_thread( level._allies, maps\black_ice_util::ignore_everything );
|
|
level._allies[0] thread allies_baker_hold();
|
|
level._allies thread maps\black_ice_util_ai::ally_advance_watcher( "trig_refinery_color_start", "refinery_main" );
|
|
level common_scripts\utility::waittill_either( "notify_notetrack_debris_end", "flag_refinery_engagement_start" );
|
|
level._allies[1] maps\black_ice_util::set_forcesuppression( 0 );
|
|
wait 0.05;
|
|
maps\_utility::activate_trigger_with_targetname( "trig_refinery_color_start" );
|
|
level._allies[1] maps\black_ice_util::unignore_everything();
|
|
common_scripts\utility::flag_wait( "flag_refinery_advance_1" );
|
|
thread dialogue_ally_pulling_back();
|
|
common_scripts\utility::flag_wait( "flag_refinery_end" );
|
|
|
|
while ( level._enemies["refinery_main"].size > 0 )
|
|
wait 0.05;
|
|
|
|
common_scripts\utility::array_thread( level._allies, maps\_utility::enable_pain );
|
|
}
|
|
|
|
allies_baker_hold()
|
|
{
|
|
var_0 = common_scripts\utility::getstruct( "struct_refinery_baker_hold", "targetname" );
|
|
maps\_utility::trigger_wait_targetname( "trig_refinery_color_stairs" );
|
|
thread dialogue_baker_waitforit();
|
|
level.player thread util_player_rubber_banding_solo( self );
|
|
self.moveplaybackrate = 1.1;
|
|
thread allies_baker_hold_approach_and_idle( var_0 );
|
|
common_scripts\utility::flag_wait( "flag_refinery_explosion_start" );
|
|
level notify( "notify_stop_rubber_banding" );
|
|
setsaveddvar( "g_speed", 190 );
|
|
self.moveplaybackrate = 1;
|
|
var_0 notify( "stop_loop" );
|
|
var_0 maps\_anim::anim_single_solo( self, "refinery_hold_end" );
|
|
maps\black_ice_util::unignore_everything();
|
|
maps\_utility::disable_pain();
|
|
maps\_utility::enable_ai_color();
|
|
}
|
|
|
|
allies_baker_hold_approach_and_idle( var_0 )
|
|
{
|
|
var_0 maps\_anim::anim_reach_solo( self, "refinery_hold_init" );
|
|
self.moveplaybackrate = 1;
|
|
var_0 maps\_anim::anim_single_solo( self, "refinery_hold_init" );
|
|
|
|
if ( common_scripts\utility::flag( "flag_refinery_explosion_start" ) )
|
|
return;
|
|
|
|
var_0 maps\_anim::anim_loop_solo( self, "refinery_hold_idle" );
|
|
}
|
|
|
|
enemies()
|
|
{
|
|
level.retreat_final = "vol_retreat_refinery_final";
|
|
enemies_setup_explosion_scene_guys();
|
|
maps\_utility::array_spawn_function_targetname( "enemies_refinery_right", ::spawnfunc_enemy_right );
|
|
maps\_utility::array_spawn_function_targetname( "enemies_refinery_left", ::spawnfunc_enemy_generic );
|
|
maps\_utility::array_spawn_function_targetname( "enemies_refinery_left_fence", ::spawnfunc_enemy_generic );
|
|
maps\_utility::array_spawn_function_targetname( "enemies_refinery_back", ::spawnfunc_enemy_generic );
|
|
maps\_utility::array_spawn_function_targetname( "enemies_refinery_flood_1", ::spawnfunc_enemy_generic );
|
|
maps\_utility::array_spawn_function_targetname( "enemies_refinery_rpg", ::spawnfunc_enemy_rpg );
|
|
maps\_utility::array_spawn_function_targetname( "enemies_refinery_elevator", ::spawnfunc_enemy_elevator );
|
|
maps\_utility::array_spawn_function_targetname( "enemies_refinery_plan_b", ::spawnfunc_enemy_plan_b );
|
|
thread maps\black_ice_util_ai::retreat_watcher( "trig_refinery_retreat", "refinery_main", "vol_retreat_refinery_initial", 3 );
|
|
thread enemies_right_door();
|
|
thread enemies_left_side();
|
|
thread encounter_start();
|
|
common_scripts\utility::flag_wait( "flag_refinery_end" );
|
|
var_0 = maps\_utility::remove_dead_from_array( level._enemies["refinery_main"] );
|
|
|
|
if ( var_0.size > 3 )
|
|
maps\_utility::array_spawn_targetname( "enemies_refinery_plan_b" );
|
|
|
|
maps\_utility::trigger_wait_targetname( "trig_refinery_cleanup" );
|
|
|
|
if ( isdefined( level._refinery.foreman ) && isalive( level._refinery.foreman ) )
|
|
{
|
|
if ( isdefined( level._refinery.foreman.magic_bullet_shield ) && level._refinery.foreman.magic_bullet_shield )
|
|
level._refinery.foreman maps\_utility::stop_magic_bullet_shield();
|
|
}
|
|
|
|
maps\_utility::kill_deathflag( "deathflag_refinery", 3 );
|
|
level._enemies["refinery_main"] = [];
|
|
level.retreat_final = undefined;
|
|
}
|
|
|
|
enemies_setup_explosion_scene_guys()
|
|
{
|
|
maps\_utility::array_spawn_function_targetname( "enemies_refinery_02", ::spawnfunc_enemy_scene_scripted, "refinery_initial" );
|
|
var_0 = getentarray( "enemies_refinery_01", "targetname" );
|
|
var_1 = var_0[0];
|
|
var_0 = maps\_utility::array_remove_index( var_0, 0 );
|
|
var_1 maps\_utility::add_spawn_function( ::spawnfunc_enemy_scene_anim_controller );
|
|
var_2 = [ "refinery_guy1", "refinery_guy2", "refinery_guy3", "refinery_guy5", "refinery_guy6" ];
|
|
|
|
for ( var_3 = 0; var_3 < var_0.size; var_3++ )
|
|
var_0[var_3] maps\_utility::add_spawn_function( ::spawnfunc_enemy_scene_anim, "refinery_initial", var_2[var_3] );
|
|
}
|
|
|
|
spawnfunc_enemy_scene_anim( var_0, var_1 )
|
|
{
|
|
maps\black_ice_util_ai::add_to_group( var_0, 0 );
|
|
self setthreatbiasgroup( "ignore_allies" );
|
|
self.animname = var_1;
|
|
self.a.disablelongdeath = 1;
|
|
self.doing_reaction_anim = 0;
|
|
self.v.interrupt_all_notifies = 1;
|
|
|
|
if ( issubstr( self.animname, "1" ) || issubstr( self.animname, "2" ) )
|
|
self forcedeathfall( 1 );
|
|
|
|
if ( issubstr( self.animname, "4" ) )
|
|
thread spawnfunc_enemy_scene_solo_auto_kill();
|
|
|
|
if ( issubstr( self.animname, "5" ) )
|
|
{
|
|
self.maxfaceenemydist = 384;
|
|
thread spawnfunc_enemy_scene_solo_crate_guy();
|
|
}
|
|
|
|
if ( issubstr( self.animname, "6" ) )
|
|
thread spawnfunc_enemy_scene_solo_foreman_smash_end();
|
|
|
|
thread spawnfunc_enemy_scene_solo();
|
|
}
|
|
|
|
spawnfunc_enemy_scene_scripted( var_0 )
|
|
{
|
|
maps\black_ice_util_ai::add_to_group( var_0, 0 );
|
|
self setthreatbiasgroup( "ignore_allies" );
|
|
self.a.disablelongdeath = 1;
|
|
self.maxfaceenemydist = 384;
|
|
self.animname = "generic";
|
|
thread spawnfunc_enemy_scene_scripted_damage_interrupt();
|
|
thread spawnfunc_enemy_scene_scripted_natural_interrupt();
|
|
}
|
|
|
|
spawnfunc_enemy_generic( var_0 )
|
|
{
|
|
maps\black_ice_util_ai::add_to_group( "refinery_main" );
|
|
self setthreatbiasgroup( "axis" );
|
|
self.a.disablelongdeath = 1;
|
|
self.maxfaceenemydist = 384;
|
|
}
|
|
|
|
spawnfunc_enemy_right( var_0 )
|
|
{
|
|
maps\black_ice_util_ai::add_to_group( "refinery_main" );
|
|
self setthreatbiasgroup( "axis" );
|
|
self.a.disablelongdeath = 1;
|
|
self.maxfaceenemydist = 384;
|
|
}
|
|
|
|
spawnfunc_enemy_rpg( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
maps\black_ice_util_ai::add_to_group( "refinery_rpg" );
|
|
self setthreatbiasgroup( "axis" );
|
|
self.a.disablelongdeath = 1;
|
|
self.goalradius = 8;
|
|
self.ignoreall = 1;
|
|
self.maxfaceenemydist = 384;
|
|
self waittill( "goal" );
|
|
self.ignoreall = 0;
|
|
common_scripts\utility::flag_wait( "flag_trig_refinery_ally_7" );
|
|
maps\_utility::kill_deathflag( "deathflag_refinery_rpg" );
|
|
}
|
|
|
|
spawnfunc_enemy_elevator( var_0 )
|
|
{
|
|
maps\black_ice_util_ai::add_to_group( "refinery_main" );
|
|
self setthreatbiasgroup( "ignore_allies" );
|
|
self.a.disablelongdeath = 1;
|
|
self.maxfaceenemydist = 384;
|
|
thread spawnfunc_enemy_elevator_wait();
|
|
}
|
|
|
|
spawnfunc_enemy_plan_b()
|
|
{
|
|
self setthreatbiasgroup( "axis" );
|
|
self.a.disablelongdeath = 1;
|
|
maps\_utility::set_baseaccuracy( 10 );
|
|
thread maps\_utility::player_seek_enable();
|
|
}
|
|
|
|
spawnfunc_enemy_scene_scripted_damage_interrupt()
|
|
{
|
|
level endon( "flag_refinery_engagement_start" );
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
|
|
level notify( "notify_vignette_end", var_1 );
|
|
}
|
|
}
|
|
|
|
spawnfunc_enemy_scene_scripted_natural_interrupt()
|
|
{
|
|
self endon( "death" );
|
|
maps\black_ice_util::ignore_everything();
|
|
common_scripts\utility::flag_wait( "flag_refinery_engagement_start" );
|
|
maps\black_ice_util::unignore_everything();
|
|
}
|
|
|
|
spawnfunc_enemy_scene_anim_controller()
|
|
{
|
|
self hide();
|
|
self setthreatbiasgroup( "ignore_allies" );
|
|
self.animname = "refinery_guy1";
|
|
self.v.invincible = 1;
|
|
self.a.disablelongdeath = 1;
|
|
self.doing_reaction_anim = 0;
|
|
common_scripts\utility::flag_wait( "flag_refinery_explosion" );
|
|
level._refinery.enemy_struct maps\_anim::anim_single_solo( self, "derrick_explode_scene" );
|
|
level notify( "notify_refinery_scene_complete" );
|
|
self delete();
|
|
}
|
|
|
|
spawnfunc_enemy_scene_solo()
|
|
{
|
|
self endon( "death" );
|
|
level._refinery.enemy_struct thread maps\_anim::anim_first_frame_solo( self, "derrick_explode_scene" );
|
|
common_scripts\utility::flag_wait( "flag_refinery_explosion" );
|
|
var_0 = undefined;
|
|
level._refinery.enemy_struct thread maps\black_ice_vignette::vignette_single_solo( self, "derrick_explode_scene" );
|
|
}
|
|
|
|
spawnfunc_enemy_scene_solo_crate_guy()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "msg_vignette_interrupt" );
|
|
level waittill( "notify_traveling_block_impact" );
|
|
maps\black_ice_vignette::vignette_stop_interrupt_scripts( "other" );
|
|
}
|
|
|
|
spawnfunc_enemy_scene_solo_foreman_smash_end()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "msg_vignette_interrupt" );
|
|
level._refinery.foreman = self;
|
|
level waittill( "notify_traveling_block_impact" );
|
|
maps\black_ice_vignette::vignette_stop_interrupt_scripts();
|
|
self.v.ignoreall_on_end = 1;
|
|
self.v.invincible = 1;
|
|
level._enemies["refinery_initial"] = common_scripts\utility::array_remove( level._enemies["refinery_initial"], self );
|
|
self waittill( "msg_vignette_start_anim_done" );
|
|
self.v.anim_node maps\_anim::anim_first_frame_solo( self, "death_pose" );
|
|
maps\_utility::magic_bullet_shield();
|
|
}
|
|
|
|
spawnfunc_enemy_scene_solo_auto_kill()
|
|
{
|
|
self endon( "death" );
|
|
level waittill( "notify_refinery_scene_complete" );
|
|
maps\black_ice_vignette::vignette_kill();
|
|
}
|
|
|
|
spawnfunc_enemy_elevator_wait()
|
|
{
|
|
self endon( "death" );
|
|
thread spawnfunc_enemy_elevator_damage_interrupt();
|
|
level waittill( "notify_elevator_open" );
|
|
self setthreatbiasgroup( "axis" );
|
|
maps\black_ice_util_ai::go_to_goal_vol( level._refinery.current_volumes );
|
|
}
|
|
|
|
spawnfunc_enemy_elevator_damage_interrupt()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "notify_elevator_open" );
|
|
self waittill( "damage" );
|
|
self setthreatbiasgroup( "axis" );
|
|
}
|
|
|
|
encounter_start()
|
|
{
|
|
level.player.ignoreme = 1;
|
|
thread player_interrupt_watcher();
|
|
var_0 = getent( "trig_refinery_flood_1", "script_noteworthy" );
|
|
level common_scripts\utility::waittill_any( "notify_refinery_scene_complete", "flag_refinery_player_started_encounter", "flag_refinery_engagement_start" );
|
|
common_scripts\utility::flag_set( "flag_refinery_engagement_start" );
|
|
maps\_utility::delaythread( 4, ::enemies_flood, var_0 );
|
|
setthreatbias( "allies", "axis", 1000 );
|
|
setthreatbias( "axis", "allies", 1000 );
|
|
level._enemies["refinery_initial"] = maps\_utility::remove_dead_from_array( level._enemies["refinery_initial"] );
|
|
common_scripts\utility::array_thread( level._enemies["refinery_initial"], maps\black_ice_util_ai::add_to_group, "refinery_main", "vol_retreat_refinery_initial" );
|
|
common_scripts\utility::array_call( level._enemies["refinery_initial"], ::setthreatbiasgroup, "axis" );
|
|
level notify( "notify_enemy_retreat_logic_start" );
|
|
|
|
if ( !common_scripts\utility::flag( "flag_refinery_player_started_encounter" ) )
|
|
wait 3;
|
|
|
|
level.player.ignoreme = 0;
|
|
}
|
|
|
|
player_interrupt_watcher()
|
|
{
|
|
level endon( "flag_refinery_engagement_start" );
|
|
level waittill( "msg_vignette_interrupt" );
|
|
common_scripts\utility::flag_set( "flag_refinery_player_started_encounter" );
|
|
}
|
|
|
|
enemies_flood( var_0 )
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
var_0 maps\_utility::activate_trigger();
|
|
}
|
|
|
|
enemies_left_side()
|
|
{
|
|
level common_scripts\utility::waittill_either( "flag_refinery_engagement_start", "flag_refinery_player_started_encounter" );
|
|
maps\_utility::array_spawn_targetname( "enemies_refinery_left" );
|
|
}
|
|
|
|
enemies_right_door()
|
|
{
|
|
level common_scripts\utility::waittill_either( "flag_refinery_engagement_start", "flag_refinery_player_started_encounter" );
|
|
|
|
if ( !common_scripts\utility::flag( "flag_refinery_player_started_encounter" ) )
|
|
wait 3;
|
|
|
|
var_0 = maps\black_ice_util::setup_door( "model_refinery_right_door" );
|
|
var_0 thread maps\black_ice_util::open_door( 90, 0.6, 0.05 );
|
|
maps\_utility::array_spawn_targetname( "enemies_refinery_right" );
|
|
}
|
|
|
|
event_derrick_explode()
|
|
{
|
|
var_0 = getent( "origin_derrick_lookat", "targetname" );
|
|
thread event_derrick_explode_debris_bomb();
|
|
thread event_derrick_explode_setup();
|
|
thread vision_set_refinery_visionsets();
|
|
common_scripts\utility::flag_wait( "flag_refinery_explosion" );
|
|
level waittill( "notify_refinery_explosion_start" );
|
|
|
|
if ( isdefined( level._pipe_deck.boats_struct ) )
|
|
thread event_derrick_explode_stack_setup();
|
|
|
|
thread maps\black_ice_fx::turn_off_refinery_buildup_fx_01();
|
|
common_scripts\utility::flag_set( "flag_fx_screen_bokehdots_rain" );
|
|
wait 2;
|
|
maps\_utility::autosave_by_name( "refinery_2" );
|
|
}
|
|
|
|
event_derrick_explode_stack_setup()
|
|
{
|
|
var_0 = 4;
|
|
var_1 = [ 1.5, 1.5, 2.5, 2.5 ];
|
|
var_2 = [ 4, 4, 3, 3 ];
|
|
|
|
for ( var_3 = 0; var_3 < var_0; var_3++ )
|
|
{
|
|
var_4 = getentarray( "refinery_stack_anim_" + var_3, "targetname" );
|
|
var_5 = getent( "refinery_stack_anim_node_" + var_3, "script_noteworthy" );
|
|
var_6 = var_5 common_scripts\utility::spawn_tag_origin();
|
|
|
|
foreach ( var_8 in var_4 )
|
|
var_8 linkto( var_6 );
|
|
|
|
thread event_derrick_explode_stack_motion( var_6, var_1[var_3], var_2[var_3] );
|
|
}
|
|
}
|
|
|
|
util_refinery_stack_cleanup()
|
|
{
|
|
var_0 = 4;
|
|
|
|
for ( var_1 = 0; var_1 < var_0; var_1++ )
|
|
{
|
|
var_2 = getentarray( "refinery_stack_anim_" + var_1, "targetname" );
|
|
common_scripts\utility::array_call( var_2, ::delete );
|
|
}
|
|
|
|
maps\_utility::stop_exploder( "refinery_stack_smoke" );
|
|
}
|
|
|
|
event_derrick_explode_stack_motion( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = ( 1408, 3968, 0 );
|
|
var_4 = var_0.origin - var_3;
|
|
var_4 = ( var_4[0], var_4[1], 0 );
|
|
var_5 = length( var_4 );
|
|
var_4 = vectornormalize( var_4 );
|
|
var_6 = 3000.0;
|
|
var_7 = 1.0;
|
|
wait( var_5 / var_6 * var_7 );
|
|
var_0 vibrate( var_4, var_1, var_2, var_2 );
|
|
|
|
for ( var_8 = 2; var_1 / var_8 > 0.5; var_8++ )
|
|
{
|
|
wait( var_2 );
|
|
var_0 vibrate( var_4, var_1 / var_8, var_2, var_2 );
|
|
}
|
|
|
|
wait( var_2 );
|
|
var_0 vibrate( var_4, 0.01, var_2, var_2 );
|
|
}
|
|
|
|
event_derrick_explode_debris_bomb()
|
|
{
|
|
var_0 = getentarray( "model_refinery_container", "targetname" );
|
|
var_1 = getentarray( "model_refinery_container_destroyed", "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 hide();
|
|
|
|
var_5 = getent( "origin_refinery_debris_explosion", "targetname" );
|
|
level waittill( "notify_traveling_block_impact" );
|
|
|
|
foreach ( var_7 in var_0 )
|
|
var_7 hide();
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 show();
|
|
|
|
setsaveddvar( "phys_gravity_ragdoll", -400 );
|
|
|
|
foreach ( var_12 in level._enemies["refinery_initial"] )
|
|
{
|
|
if ( isalive( var_12 ) )
|
|
{
|
|
var_13 = common_scripts\utility::spawn_tag_origin();
|
|
var_13.origin = var_12.origin;
|
|
var_13.angles = vectortoangles( var_12.origin - var_5.origin );
|
|
|
|
if ( distance( var_12.origin, var_5.origin ) < 256 )
|
|
{
|
|
var_12 maps\black_ice_vignette::vignette_end( "debris_bomb" );
|
|
var_12 thread event_derrick_explode_debris_bomb_throw_enemy( var_13 );
|
|
}
|
|
}
|
|
}
|
|
|
|
thread event_derrick_explode_debris_bomb_tank_player_quake();
|
|
physicsexplosionsphere( var_5.origin, 1024, 1023, 3 );
|
|
var_15 = getent( "refinery_tank_fire_1", "targetname" );
|
|
var_15 setlightintensity( 2.0 );
|
|
thread maps\black_ice_util::black_ice_geyser_pulse();
|
|
thread maps\black_ice_util::black_ice_geyser2_pulse();
|
|
playfx( common_scripts\utility::getfx( "refinery_debris_explosion" ), var_5.origin );
|
|
maps\_utility::stop_exploder( "refinery_lights_b" );
|
|
wait 0.2;
|
|
common_scripts\utility::flag_set( "flag_fire_damage_on" );
|
|
common_scripts\utility::exploder( "refinery_debris_fire_oiltank" );
|
|
thread maps\black_ice_util::exploder_damage_loop( "refinery_debris_fire_oiltank", level._fire_damage_ent );
|
|
level waittill( "notify_derrick_vignette_done" );
|
|
setsaveddvar( "phys_gravity_ragdoll", -800 );
|
|
}
|
|
|
|
event_derrick_explode_debris_bomb_tank_player_quake()
|
|
{
|
|
wait 0.15;
|
|
earthquake( 0.21, 1.5, level.player.origin, 128 );
|
|
}
|
|
|
|
event_derrick_explode_debris_bomb_throw_enemy( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
maps\_utility::gun_remove();
|
|
var_0 maps\_anim::anim_single_solo( self, "derrick_explode_death" );
|
|
self kill();
|
|
}
|
|
|
|
event_elevator_door_open()
|
|
{
|
|
var_0 = maps\black_ice_util::setup_door( "model_refinery_lift_door_top" );
|
|
var_1 = maps\black_ice_util::setup_door( "model_refinery_lift_door_bottom" );
|
|
var_2 = maps\black_ice_util::setup_door( "model_refinery_lift_gate" );
|
|
maps\_utility::trigger_wait_targetname( "trig_refinery_elevator_enemies" );
|
|
maps\_utility::array_spawn_targetname( "enemies_refinery_elevator" );
|
|
var_0 thread maps\black_ice_util::open_gate( var_0.origin + ( 0, 0, 48 ), 6 );
|
|
var_1 thread maps\black_ice_util::open_gate( var_1.origin - ( 0, 0, 63 ), 6 );
|
|
wait 2;
|
|
var_2 maps\black_ice_util::open_gate( var_2.origin + ( 0, 0, 88 ), 6, 4 );
|
|
level notify( "notify_elevator_open" );
|
|
}
|
|
|
|
util_derrick_destroy_quick()
|
|
{
|
|
if ( isdefined( level.derrick_model ) )
|
|
level.derrick_model delete();
|
|
|
|
util_show_destroyed_derrick();
|
|
}
|
|
|
|
util_show_destroyed_derrick()
|
|
{
|
|
level notify( "notify_remove_derrick_model" );
|
|
|
|
if ( isdefined( level._refinery.derrick_model ) )
|
|
level._refinery.derrick_model delete();
|
|
|
|
var_0 = level._refinery.destroyed_derrick_models;
|
|
maps\_utility::stop_exploder( "oil_geyser_01" );
|
|
common_scripts\utility::exploder( "oil_geyser_02" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 show();
|
|
}
|
|
|
|
event_derrick_explode_setup()
|
|
{
|
|
var_0 = level._refinery.derrick_struct;
|
|
var_1 = level._refinery.derrick_model;
|
|
var_2 = level._refinery.barrel_model_1;
|
|
var_3 = level._refinery.barrel_model_2;
|
|
var_4 = level._refinery.barrel_model_3;
|
|
var_5 = level._refinery.barrel_model_4;
|
|
var_6 = level._refinery.barrel_model_5;
|
|
thread event_derrick_explode_large( var_0 );
|
|
thread event_derrick_explode_impact_rig( var_0 );
|
|
thread event_derrick_explode_debris_oiltank( var_0 );
|
|
thread event_derrick_explode_debris_main( var_0 );
|
|
thread event_derrick_explode_catwalk_break( var_0 );
|
|
thread event_derrick_explode_debris_show_and_damage();
|
|
thread fx_refinery_ceiling_fire();
|
|
level waittill( "notify_refinery_explosion_start" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_2, "barrel_crush_1" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_3, "barrel_crush_2" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_4, "barrel_crush_3" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_5, "barrel_crush_4" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_6, "barrel_crush_5" );
|
|
var_0 maps\_anim::anim_single_solo( var_1, "collapse" );
|
|
level notify( "notify_derrick_vignette_done" );
|
|
level waittill( "notify_remove_derrick_model" );
|
|
var_2 delete();
|
|
var_3 delete();
|
|
var_4 delete();
|
|
var_5 delete();
|
|
var_6 delete();
|
|
}
|
|
|
|
event_derrick_explode_large( var_0 )
|
|
{
|
|
level waittill( "notify_derrick_large_explosion" );
|
|
maps\_utility::stop_exploder( "flamestack_snow" );
|
|
common_scripts\utility::exploder( "derrick_explode_large" );
|
|
common_scripts\utility::exploder( "oil_geyser_01" );
|
|
common_scripts\utility::exploder( "oil_spots_01" );
|
|
thread maps\black_ice_fx::turn_off_oil_derrick_lightsfx();
|
|
thread maps\black_ice_fx::turn_on_bokeh_fieryflash_player_fx();
|
|
thread maps\black_ice_audio::audio_derrick_explode_logic( "stop" );
|
|
wait 0.5;
|
|
common_scripts\utility::exploder( "derrick_shockwave" );
|
|
thread fx_snow_shockwave();
|
|
wait 1.0;
|
|
earthquake( 0.35, 2, level.player.origin, 128 );
|
|
var_1 = vectornormalize( level.player.origin - var_0.origin );
|
|
thread maps\black_ice_util::push_player_impulse( var_1, 21, 0.9 );
|
|
level.player playrumbleonentity( "grenade_rumble" );
|
|
level notify( "notify_derrick_explode_done" );
|
|
}
|
|
|
|
fx_snow_shockwave()
|
|
{
|
|
wait 0.82;
|
|
common_scripts\utility::exploder( "shockwave_snow" );
|
|
}
|
|
|
|
event_derrick_explode_debris_oiltank( var_0 )
|
|
{
|
|
var_1 = [ "oiltank_debris_1_1", "oiltank_debris_1_2", "oiltank_debris_1_3", "oiltank_debris_3" ];
|
|
var_2 = [];
|
|
|
|
foreach ( var_4 in var_1 )
|
|
{
|
|
var_5 = maps\_utility::spawn_anim_model( var_4 );
|
|
var_0 maps\_anim::anim_first_frame_solo( var_5, "derrick_explosion" );
|
|
var_2 = common_scripts\utility::array_add( var_2, var_5 );
|
|
}
|
|
|
|
foreach ( var_8 in level._refinery.scripted )
|
|
var_8 show();
|
|
|
|
level waittill( "notify_refinery_explosion_start" );
|
|
var_10 = common_scripts\utility::array_combine( level._refinery.scripted, var_2 );
|
|
var_10 = common_scripts\utility::array_remove( var_10, level._refinery.scripted["traveling_block"] );
|
|
var_10 = common_scripts\utility::array_remove( var_10, level._refinery.scripted["derrick_chunk"] );
|
|
var_0 thread maps\_anim::anim_single( var_10, "derrick_explosion" );
|
|
level waittill( "notify_notetrack_debris_end" );
|
|
|
|
foreach ( var_8 in level._refinery.scripted )
|
|
{
|
|
foreach ( var_13 in var_8._col )
|
|
var_13 disconnectpaths();
|
|
}
|
|
|
|
level waittill( "notify_remove_derrick_model" );
|
|
|
|
foreach ( var_5 in var_2 )
|
|
var_5 delete();
|
|
}
|
|
|
|
event_derrick_explode_catwalk_break( var_0 )
|
|
{
|
|
var_1 = maps\_utility::spawn_anim_model( "oiltank_catwalk" );
|
|
var_2 = getent( "model_refinery_tank_catwalk", "targetname" );
|
|
level waittill( "notify_derrick_large_explosion" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_1, "oiltank_catwalk" );
|
|
var_1 hide();
|
|
level waittill( "notify_swap_catwalk" );
|
|
var_1 show();
|
|
var_2 hide();
|
|
}
|
|
|
|
event_derrick_explode_impact_rig( var_0 )
|
|
{
|
|
level waittill( "notify_derrick_impact_rig" );
|
|
thread maps\black_ice_audio::sfx_blackice_derrick_exp4_ss();
|
|
wait 0.65;
|
|
earthquake( 0.17, 2, level.player.origin, 128 );
|
|
}
|
|
|
|
event_derrick_explode_debris_main( var_0 )
|
|
{
|
|
var_1 = level._refinery.scripted["derrick_chunk"];
|
|
var_2 = level._refinery.scripted["traveling_block"];
|
|
var_3 = maps\_utility::spawn_anim_model( "derrick_debris_1" );
|
|
var_4 = maps\_utility::spawn_anim_model( "derrick_debris_1" );
|
|
var_5 = maps\_utility::spawn_anim_model( "derrick_debris_2" );
|
|
var_6 = maps\_utility::spawn_anim_model( "derrick_debris_2" );
|
|
var_7 = maps\_utility::spawn_anim_model( "derrick_debris_3" );
|
|
var_8 = maps\_utility::spawn_anim_model( "derrick_debris_3" );
|
|
var_9 = maps\_utility::spawn_anim_model( "derrick_debris_4" );
|
|
var_10 = maps\_utility::spawn_anim_model( "derrick_debris_4" );
|
|
var_11 = maps\_utility::spawn_anim_model( "derrick_debris_5" );
|
|
var_12 = maps\_utility::spawn_anim_model( "derrick_debris_5" );
|
|
var_13 = maps\_utility::spawn_anim_model( "derrick_debris_6" );
|
|
var_14 = maps\_utility::spawn_anim_model( "derrick_debris_6" );
|
|
level waittill( "notify_derrick_large_explosion" );
|
|
var_1 thread event_derrick_explode_debris_main_fx_runner( var_1, "refinery_debris_trail_large", "refinery_debris_smolder_large" );
|
|
var_2 thread event_derrick_explode_debris_main_fx_runner( var_2, "refinery_debris_trail_large", "refinery_debris_smolder_large" );
|
|
thread maps\black_ice_fx::refinery_travelling_block_impact_fx();
|
|
var_15 = [ var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11, var_12, var_13, var_14 ];
|
|
|
|
foreach ( var_17 in var_15 )
|
|
var_17 thread event_derrick_explode_debris_main_fx_runner( var_17, "refinery_debris_trail_small", "refinery_debris_smolder_small" );
|
|
|
|
var_0 thread maps\_anim::anim_single_solo( var_1, "derrick_explosion" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_2, "derrick_explosion" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_3, "derrick_debris_1" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_4, "derrick_debris_2" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_5, "derrick_debris_1" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_6, "derrick_debris_2" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_7, "derrick_debris_1" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_8, "derrick_debris_2" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_9, "derrick_debris_1" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_10, "derrick_debris_2" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_11, "derrick_debris_1" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_12, "derrick_debris_2" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_13, "derrick_debris_1" );
|
|
var_0 thread maps\_anim::anim_single_solo( var_14, "derrick_debris_2" );
|
|
}
|
|
|
|
event_derrick_explode_debris_main_fx_runner( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = common_scripts\utility::spawn_tag_origin();
|
|
var_3.origin = var_0.origin;
|
|
var_3 linkto( var_0 );
|
|
playfxontag( common_scripts\utility::getfx( var_1 ), var_3, "tag_origin" );
|
|
self waittill( "hitground" );
|
|
stopfxontag( common_scripts\utility::getfx( var_1 ), var_3, "tag_origin" );
|
|
playfxontag( common_scripts\utility::getfx( var_2 ), var_3, "tag_origin" );
|
|
}
|
|
|
|
event_derrick_explode_debris_setup()
|
|
{
|
|
var_0 = level._refinery.derrick_struct;
|
|
level._refinery.derrick_model = getent( "model_blackice_derrick", "targetname" );
|
|
level._refinery.derrick_model maps\_utility::assign_animtree( "derrick" );
|
|
var_0 maps\_anim::anim_first_frame_solo( level._refinery.derrick_model, "collapse" );
|
|
level._refinery.barrel_model_1 = maps\_utility::spawn_anim_model( "barrel_crush", var_0.origin );
|
|
var_0 maps\_anim::anim_first_frame_solo( level._refinery.barrel_model_1, "barrel_crush_1" );
|
|
level._refinery.barrel_model_2 = maps\_utility::spawn_anim_model( "barrel_crush", var_0.origin );
|
|
var_0 maps\_anim::anim_first_frame_solo( level._refinery.barrel_model_2, "barrel_crush_2" );
|
|
level._refinery.barrel_model_3 = maps\_utility::spawn_anim_model( "barrel_crush", var_0.origin );
|
|
var_0 maps\_anim::anim_first_frame_solo( level._refinery.barrel_model_3, "barrel_crush_3" );
|
|
level._refinery.barrel_model_4 = maps\_utility::spawn_anim_model( "barrel_crush", var_0.origin );
|
|
var_0 maps\_anim::anim_first_frame_solo( level._refinery.barrel_model_4, "barrel_crush_4" );
|
|
level._refinery.barrel_model_5 = maps\_utility::spawn_anim_model( "barrel_crush", var_0.origin );
|
|
var_0 maps\_anim::anim_first_frame_solo( level._refinery.barrel_model_5, "barrel_crush_5" );
|
|
level._refinery.scripted = [];
|
|
var_1 = getentarray( "models_derrick_explosion", "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
var_3 maps\_utility::assign_animtree( var_3.script_parameters );
|
|
var_3 event_derrick_explode_debris_setup_collision( var_3.script_parameters );
|
|
var_0 maps\_anim::anim_first_frame_solo( var_3, "derrick_explosion" );
|
|
var_3 hide();
|
|
level._refinery.scripted[var_3.script_parameters] = var_3;
|
|
}
|
|
}
|
|
|
|
event_derrick_explode_debris_setup_collision( var_0 )
|
|
{
|
|
self._col = getentarray( self.target, "targetname" );
|
|
|
|
if ( var_0 == "traveling_block" )
|
|
{
|
|
foreach ( var_2 in self._col )
|
|
{
|
|
if ( issubstr( var_2.script_noteworthy, "hook" ) )
|
|
{
|
|
var_2 linkto( self, "tag_hook" );
|
|
continue;
|
|
}
|
|
|
|
if ( issubstr( var_2.script_noteworthy, "block" ) )
|
|
{
|
|
var_2 linkto( self, "tag_base" );
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach ( var_2 in self._col )
|
|
var_2 linkto( self );
|
|
}
|
|
}
|
|
|
|
event_derrick_explode_debris_show_and_damage()
|
|
{
|
|
level waittill( "notify_derrick_large_explosion" );
|
|
|
|
foreach ( var_1 in level._refinery.scripted )
|
|
{
|
|
foreach ( var_3 in var_1._col )
|
|
var_3 thread event_derrick_explode_debris_damage();
|
|
}
|
|
}
|
|
|
|
fx_refinery_ceiling_fire()
|
|
{
|
|
level waittill( "notify_refinery_scene_complete" );
|
|
common_scripts\utility::exploder( "refinery_ceiling_fire" );
|
|
}
|
|
|
|
event_derrick_explode_debris_damage()
|
|
{
|
|
level endon( "notify_notetrack_debris_end" );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = maps\_utility::remove_dead_from_array( level._enemies["refinery_initial"] );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( self istouching( var_2 ) )
|
|
{
|
|
if ( common_scripts\utility::flag( "flag_refinery_player_started_encounter" ) )
|
|
{
|
|
if ( var_2.v.active )
|
|
var_2 maps\black_ice_vignette::vignette_kill();
|
|
else
|
|
var_2 kill();
|
|
|
|
continue;
|
|
}
|
|
|
|
if ( !issubstr( var_2.animname, "1" ) && !issubstr( var_2.animname, "2" ) && !issubstr( var_2.animname, "5" ) && !issubstr( var_2.animname, "6" ) )
|
|
{
|
|
if ( var_2.v.active )
|
|
{
|
|
var_2 maps\black_ice_vignette::vignette_kill();
|
|
continue;
|
|
}
|
|
|
|
var_2 kill();
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( self istouching( level.player ) )
|
|
{
|
|
level.player kill();
|
|
setdvar( "ui_deadquote", &"BLACK_ICE_REFINERY_DEBRIS_DEATH" );
|
|
maps\_utility::missionfailedwrapper();
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
player_tanks_foreshocks()
|
|
{
|
|
common_scripts\utility::flag_wait( "flag_trig_refinery_ally_7" );
|
|
common_scripts\utility::exploder( "tanks_oil_rain" );
|
|
common_scripts\utility::exploder( "tanks_lights" );
|
|
maps\_utility::trigger_wait_targetname( "trig_tanks_foreshock" );
|
|
var_0 = 0.07;
|
|
var_1 = 0.18;
|
|
var_2 = 0.7;
|
|
var_3 = 1.3;
|
|
var_4 = 0.3;
|
|
var_5 = 1.8;
|
|
|
|
for ( var_6 = 6; !common_scripts\utility::flag( "flag_tanks_catwalk_collapse" ) && var_6 > 0; var_6 = var_6 - 1 )
|
|
{
|
|
thread maps\black_ice_audio::sfx_black_ice_tanks_rumble();
|
|
var_7 = randomfloatrange( var_0, var_1 );
|
|
var_8 = randomfloatrange( var_4, var_5 );
|
|
var_9 = randomfloatrange( var_2, var_3 );
|
|
earthquake( var_7, var_9, level.player.origin, 3000 );
|
|
thread maps\black_ice_audio::sfx_screenshake();
|
|
wait( var_8 );
|
|
}
|
|
}
|
|
|
|
util_debris_remove()
|
|
{
|
|
if ( isdefined( level._refinery.scripted ) )
|
|
{
|
|
foreach ( var_1 in level._refinery.scripted )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
foreach ( var_3 in var_1._col )
|
|
var_3 delete();
|
|
|
|
var_1 delete();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
vision_set_refinery_visionsets()
|
|
{
|
|
level waittill( "notify_derrick_large_explosion" );
|
|
maps\_utility::vision_set_changes( "black_ice_refinery_burn", 2.0 );
|
|
maps\_art::sunflare_changes( "refinery", 1.5 );
|
|
}
|
|
|
|
util_player_rubber_banding_solo( var_0 )
|
|
{
|
|
level endon( "notify_stop_rubber_banding" );
|
|
var_1 = 120;
|
|
var_2 = 190;
|
|
var_3 = 64;
|
|
|
|
for (;;)
|
|
{
|
|
var_4 = distance( self.origin, var_0.origin );
|
|
|
|
if ( var_4 > var_3 )
|
|
var_4 = var_3;
|
|
else if ( var_4 < 0 )
|
|
var_4 = 0;
|
|
|
|
var_5 = var_4 / var_3;
|
|
var_6 = var_2 - ( var_2 - var_1 ) * var_5;
|
|
setsaveddvar( "g_speed", var_6 );
|
|
wait 0.05;
|
|
}
|
|
|
|
level notify( "notify_stop_rubber_banding" );
|
|
}
|
|
|
|
trigger_wait_flag_set( var_0, var_1 )
|
|
{
|
|
if ( !common_scripts\utility::flag_exist( var_1 ) )
|
|
common_scripts\utility::flag_init( var_1 );
|
|
|
|
maps\_utility::trigger_wait_targetname( var_0 );
|
|
common_scripts\utility::flag_set( var_1 );
|
|
}
|