mirror of
https://github.com/JezuzLizard/BO2-Reimagined.git
synced 2025-06-10 07:08:06 -05:00
214 lines
6.5 KiB
Plaintext
214 lines
6.5 KiB
Plaintext
#include maps\mp\zm_buried_sq_tpo;
|
|
#include common_scripts\utility;
|
|
#include maps\mp\_utility;
|
|
#include maps\mp\zombies\_zm_utility;
|
|
#include maps\mp\zombies\_zm_sidequests;
|
|
#include maps\mp\_visionset_mgr;
|
|
#include maps\mp\gametypes_zm\_hud_util;
|
|
#include maps\mp\zombies\_zm_buildables;
|
|
#include maps\mp\zombies\_zm;
|
|
#include maps\mp\zm_buried_sq;
|
|
#include maps\mp\zombies\_zm_weap_time_bomb;
|
|
#include maps\mp\zombies\_zm_unitrigger;
|
|
#include maps\mp\zm_buried_buildables;
|
|
|
|
init()
|
|
{
|
|
declare_sidequest_stage( "sq", "tpo", ::init_stage, ::stage_logic, ::exit_stage );
|
|
flag_init( "sq_tpo_time_bomb_in_valid_location" );
|
|
flag_init( "sq_tpo_players_in_position_for_time_warp" );
|
|
flag_init( "sq_tpo_special_round_active" );
|
|
flag_init( "sq_tpo_found_item" );
|
|
flag_init( "sq_tpo_generator_powered" );
|
|
flag_init( "sq_wisp_saved_with_time_bomb" );
|
|
flag_init( "sq_tpo_stage_started" );
|
|
maps\mp\zombies\_zm_weap_time_bomb::time_bomb_add_custom_func_global_save( ::time_bomb_saves_wisp_state );
|
|
maps\mp\zombies\_zm_weap_time_bomb::time_bomb_add_custom_func_global_restore( ::time_bomb_restores_wisp_state );
|
|
|
|
level._effect["sq_tpo_time_bomb_fx"] = loadfx( "maps/zombie_buried/fx_buried_ghost_drain" );
|
|
level.sq_tpo = spawnstruct();
|
|
level thread setup_buildable_switch();
|
|
}
|
|
|
|
stage_logic()
|
|
{
|
|
flag_set( "sq_tpo_stage_started" );
|
|
|
|
if ( flag( "sq_is_ric_tower_built" ) )
|
|
stage_logic_richtofen();
|
|
else
|
|
stage_logic_maxis();
|
|
|
|
stage_completed( "sq", level._cur_stage_name );
|
|
}
|
|
|
|
stage_logic_maxis()
|
|
{
|
|
flag_clear( "sq_wisp_success" );
|
|
flag_clear( "sq_wisp_failed" );
|
|
|
|
while ( !flag( "sq_wisp_success" ) )
|
|
{
|
|
stage_start( "sq", "ts" );
|
|
|
|
level waittill( "sq_ts_over" );
|
|
|
|
stage_start( "sq", "ctw" );
|
|
|
|
level waittill( "sq_ctw_over" );
|
|
}
|
|
|
|
level._cur_stage_name = "tpo";
|
|
}
|
|
|
|
stage_logic_richtofen()
|
|
{
|
|
level endon( "sq_tpo_generator_powered" );
|
|
|
|
e_time_bomb_volume = getent( "sq_tpo_timebomb_volume", "targetname" );
|
|
|
|
do
|
|
{
|
|
flag_clear( "sq_tpo_time_bomb_in_valid_location" );
|
|
|
|
b_time_bomb_in_valid_location = 0;
|
|
while (1)
|
|
{
|
|
if ( isdefined( level.time_bomb_save_data ) && isdefined( level.time_bomb_save_data.time_bomb_model ) )
|
|
{
|
|
b_time_bomb_in_valid_location = level.time_bomb_save_data.time_bomb_model istouching( e_time_bomb_volume );
|
|
level.time_bomb_save_data.time_bomb_model.sq_location_valid = b_time_bomb_in_valid_location;
|
|
}
|
|
|
|
if ( b_time_bomb_in_valid_location )
|
|
{
|
|
break;
|
|
}
|
|
|
|
level waittill( "new_time_bomb_set" );
|
|
}
|
|
|
|
playfxontag( level._effect["sq_tpo_time_bomb_fx"], level.time_bomb_save_data.time_bomb_model, "tag_origin" );
|
|
flag_set( "sq_tpo_time_bomb_in_valid_location" );
|
|
flag_set( "sq_tpo_players_in_position_for_time_warp" );
|
|
wait_for_time_bomb_to_be_detonated_or_thrown_again();
|
|
level notify( "sq_tpo_stop_checking_time_bomb_volume" );
|
|
|
|
if ( flag( "time_bomb_restore_active" ) )
|
|
{
|
|
if ( flag( "sq_tpo_players_in_position_for_time_warp" ) )
|
|
{
|
|
special_round_start();
|
|
level notify( "sq_tpo_special_round_started" );
|
|
start_item_hunt_with_timeout( 60 );
|
|
special_round_end();
|
|
level notify( "sq_tpo_special_round_ended" );
|
|
}
|
|
}
|
|
|
|
wait_network_frame();
|
|
}
|
|
while ( !flag( "sq_tpo_generator_powered" ) );
|
|
}
|
|
|
|
special_round_start()
|
|
{
|
|
flag_set( "sq_tpo_special_round_active" );
|
|
level.sq_tpo.times_searched = 0;
|
|
flag_clear( "time_bomb_detonation_enabled" );
|
|
level thread sndsidequestnoirmusic();
|
|
make_super_zombies( 1 );
|
|
a_players = get_players();
|
|
|
|
foreach ( player in a_players )
|
|
vsmgr_activate( "visionset", "cheat_bw", player );
|
|
|
|
level setclientfield( "sq_tpo_special_round_active", 1 );
|
|
}
|
|
|
|
special_round_end()
|
|
{
|
|
level setclientfield( "sq_tpo_special_round_active", 0 );
|
|
level notify( "sndEndNoirMusic" );
|
|
make_super_zombies( 0 );
|
|
level._time_bomb.functionality_override = 0;
|
|
flag_set( "time_bomb_detonation_enabled" );
|
|
scripts\zm\replaced\_zm_weap_time_bomb::time_bomb_detonation();
|
|
|
|
a_players = get_players();
|
|
foreach ( player in a_players )
|
|
{
|
|
vsmgr_deactivate( "visionset", "cheat_bw", player );
|
|
player notify( "search_done" );
|
|
}
|
|
|
|
clean_up_special_round();
|
|
flag_clear( "sq_tpo_special_round_active" );
|
|
}
|
|
|
|
promote_to_corpse_model( str_model )
|
|
{
|
|
v_spawn_point = groundtrace( self.origin + vectorscale( ( 0, 0, 1 ), 10.0 ), self.origin + vectorscale( ( 0, 0, -1 ), 300.0 ), 0, undefined )["position"];
|
|
self.corpse_model = spawn( "script_model", v_spawn_point );
|
|
self.corpse_model.angles = self.angles;
|
|
self.corpse_model setmodel( str_model );
|
|
self.corpse_model.targetname = "sq_tpo_corpse_model";
|
|
self _pose_corpse();
|
|
self.corpse_model.unitrigger = setup_unitrigger( &"ZM_BURIED_SQ_SCH", ::unitrigger_think );
|
|
}
|
|
|
|
unitrigger_think()
|
|
{
|
|
self endon( "kill_trigger" );
|
|
self thread unitrigger_killed();
|
|
b_trigger_used = 0;
|
|
|
|
while ( !b_trigger_used )
|
|
{
|
|
self waittill( "trigger", player );
|
|
|
|
b_progress_bar_done = 0;
|
|
n_frame_count = 0;
|
|
|
|
while ( player usebuttonpressed() && !b_progress_bar_done )
|
|
{
|
|
if ( !isdefined( self.progress_bar ) )
|
|
{
|
|
self.progress_bar = player createprimaryprogressbar();
|
|
self.progress_bar updatebar( 0.01, 1 / 1.5 );
|
|
self.progress_bar_text = player createprimaryprogressbartext();
|
|
self.progress_bar_text settext( &"ZM_BURIED_SQ_SEARCHING" );
|
|
self thread _kill_progress_bar();
|
|
}
|
|
|
|
n_progress_amount = n_frame_count / 30.0;
|
|
n_frame_count++;
|
|
|
|
if ( n_progress_amount == 1 )
|
|
b_progress_bar_done = 1;
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
self _delete_progress_bar();
|
|
|
|
if ( b_progress_bar_done )
|
|
b_trigger_used = 1;
|
|
}
|
|
|
|
if ( b_progress_bar_done )
|
|
{
|
|
self.stub.hint_string = "";
|
|
self sethintstring( self.stub.hint_string );
|
|
|
|
if ( item_is_on_corpse() )
|
|
{
|
|
iprintlnbold( &"ZM_BURIED_SQ_FND" );
|
|
player give_player_sq_tpo_switch();
|
|
}
|
|
else
|
|
iprintlnbold( &"ZM_BURIED_SQ_NFND" );
|
|
|
|
self thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub );
|
|
}
|
|
} |