mirror of
https://github.com/JezuzLizard/BO2-Reimagined.git
synced 2025-06-10 23:27:57 -05:00
Die Rise: Quest changes
This commit is contained in:
@ -526,6 +526,14 @@
|
||||
* Moved weapon locker to the downstairs fridge
|
||||
* Zombies no longer spawn in the Upper Blue Highrise zone when in the Trample Steam zone
|
||||
* Zombies no longer spawn in the zone next to the AN94 when in the AN94 zone while the debris is closed
|
||||
* Quest: elevator symbols can be activated without players on every symbol
|
||||
* Quest: elevator symbols stay active after activating once
|
||||
* Quest: floor symbols can be activated in any order
|
||||
* Quest: Trample Steam step only requires one Trample Steam to be placed in the correct position
|
||||
* Quest: tower legs can be punched in any order
|
||||
* Quest (Maxis): no longer have to shoot the upgraded Ballistic Knife after collecting the corpses
|
||||
* Quest (Maxis): ball no longer requires a Trample Steam on the other side
|
||||
* Quest (Richtofen): decreased number of Sliquifier shots required for each ball from 20 to 10
|
||||
|
||||
### Mob of the Dead
|
||||
* 1 afterlife max in solo
|
||||
|
@ -43,7 +43,7 @@ springpadthink( weapon, electricradius, armed )
|
||||
|
||||
if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 )
|
||||
{
|
||||
weapon notify( "fling", 1 );
|
||||
weapon notify( "fling", weapon.zombies_only );
|
||||
weapon.is_armed = 0;
|
||||
weapon.zombies_only = 1;
|
||||
|
||||
@ -118,4 +118,63 @@ wait_for_targets( weapon )
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
#using_animtree("zombie_springpad");
|
||||
|
||||
springpad_animate( weapon, armed )
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
self endon( "equip_springpad_zm_taken" );
|
||||
weapon endon( "death" );
|
||||
weapon useanimtree( #animtree );
|
||||
f_animlength = getanimlength( %o_zombie_buildable_tramplesteam_reset_zombie );
|
||||
r_animlength = getanimlength( %o_zombie_buildable_tramplesteam_reset );
|
||||
l_animlength = getanimlength( %o_zombie_buildable_tramplesteam_launch );
|
||||
weapon thread springpad_audio();
|
||||
prearmed = 0;
|
||||
|
||||
if ( isdefined( armed ) && armed )
|
||||
prearmed = 1;
|
||||
|
||||
fast_reset = 0;
|
||||
|
||||
while ( isdefined( weapon ) )
|
||||
{
|
||||
if ( !prearmed )
|
||||
{
|
||||
if ( fast_reset )
|
||||
{
|
||||
weapon setanim( %o_zombie_buildable_tramplesteam_reset_zombie );
|
||||
weapon thread playspringpadresetaudio( f_animlength );
|
||||
wait( f_animlength );
|
||||
}
|
||||
else
|
||||
{
|
||||
weapon setanim( %o_zombie_buildable_tramplesteam_reset );
|
||||
weapon thread playspringpadresetaudio( r_animlength );
|
||||
wait( r_animlength );
|
||||
}
|
||||
}
|
||||
else
|
||||
wait 0.05;
|
||||
|
||||
prearmed = 0;
|
||||
weapon notify( "armed" );
|
||||
fast_reset = 1;
|
||||
|
||||
if ( isdefined( weapon ) )
|
||||
{
|
||||
weapon setanim( %o_zombie_buildable_tramplesteam_compressed_idle );
|
||||
|
||||
weapon waittill( "fling", fast );
|
||||
}
|
||||
|
||||
if ( isdefined( weapon ) )
|
||||
{
|
||||
weapon setanim( %o_zombie_buildable_tramplesteam_launch );
|
||||
wait( l_animlength );
|
||||
}
|
||||
}
|
||||
}
|
@ -88,4 +88,135 @@ sidequest_logic()
|
||||
update_sidequest_stats( "sq_highrise_rich_complete" );
|
||||
else if ( flag( "sq_max_tower_complete" ) )
|
||||
update_sidequest_stats( "sq_highrise_maxis_complete" );
|
||||
}
|
||||
|
||||
tower_punch_watcher()
|
||||
{
|
||||
level thread playtoweraudio();
|
||||
a_leg_trigs = [];
|
||||
|
||||
foreach ( str_wind in level.a_wind_order )
|
||||
a_leg_trigs[a_leg_trigs.size] = "sq_tower_" + str_wind;
|
||||
|
||||
level.n_cur_leg = 0;
|
||||
level.sq_leg_punches = 0;
|
||||
|
||||
foreach ( str_leg in a_leg_trigs )
|
||||
{
|
||||
t_leg = getent( str_leg, "script_noteworthy" );
|
||||
t_leg thread tower_punch_watch_leg( a_leg_trigs );
|
||||
}
|
||||
|
||||
flag_wait( "sq_tower_active" );
|
||||
|
||||
if ( flag( "sq_ric_tower_complete" ) )
|
||||
{
|
||||
exploder_stop( 1002 );
|
||||
exploder_stop( 903 );
|
||||
exploder( 1003 );
|
||||
}
|
||||
else
|
||||
{
|
||||
exploder_stop( 902 );
|
||||
exploder_stop( 1003 );
|
||||
exploder( 903 );
|
||||
}
|
||||
|
||||
wait 1;
|
||||
level thread tower_in_sync_lightning();
|
||||
wait 1;
|
||||
level thread sq_give_all_perks();
|
||||
}
|
||||
|
||||
tower_punch_watch_leg( a_leg_trigs )
|
||||
{
|
||||
level.legs_hit = [];
|
||||
|
||||
while ( !flag( "sq_tower_active" ) )
|
||||
{
|
||||
self waittill( "trigger", who );
|
||||
|
||||
if ( !isinarray( level.legs_hit, self.script_noteworthy ) && isplayer( who ) && ( who.current_melee_weapon == "tazer_knuckles_zm" || who.current_melee_weapon == "tazer_knuckles_upgraded_zm" ) )
|
||||
{
|
||||
level.legs_hit[level.legs_hit.size] = self.script_noteworthy;
|
||||
self playsound( "zmb_sq_leg_powerup_" + level.legs_hit.size );
|
||||
|
||||
if ( level.legs_hit.size == 4 )
|
||||
flag_set( "sq_tower_active" );
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sq_give_all_perks()
|
||||
{
|
||||
vending_triggers = getentarray( "zombie_vending", "targetname" );
|
||||
perks = [];
|
||||
|
||||
for ( i = 0; i < vending_triggers.size; i++ )
|
||||
{
|
||||
perk = vending_triggers[i].script_noteworthy;
|
||||
|
||||
if ( perk == "specialty_weapupgrade" )
|
||||
continue;
|
||||
|
||||
perks[perks.size] = perk;
|
||||
}
|
||||
|
||||
if ( flag( "sq_ric_tower_complete" ) )
|
||||
{
|
||||
v_fireball_start_loc = ( 1946, 608, 3338 );
|
||||
n_fireball_exploder = 1001;
|
||||
}
|
||||
else
|
||||
{
|
||||
v_fireball_start_loc = ( 1068, -1362, 3340.5 );
|
||||
n_fireball_exploder = 901;
|
||||
}
|
||||
|
||||
players = getplayers();
|
||||
|
||||
foreach ( player in players )
|
||||
{
|
||||
player thread sq_give_player_perks( perks, v_fireball_start_loc, n_fireball_exploder );
|
||||
|
||||
level waittill( "sq_fireball_hit_player" );
|
||||
}
|
||||
}
|
||||
|
||||
sq_give_player_perks( perks, v_fireball_start_loc, n_fireball_exploder )
|
||||
{
|
||||
exploder( n_fireball_exploder );
|
||||
m_fireball = spawn( "script_model", v_fireball_start_loc );
|
||||
m_fireball setmodel( "tag_origin" );
|
||||
playfxontag( level._effect["sidequest_dragon_fireball_max"], m_fireball, "tag_origin" );
|
||||
|
||||
do
|
||||
{
|
||||
wait_network_frame();
|
||||
v_to_player = vectornormalize( self gettagorigin( "J_SpineLower" ) - m_fireball.origin );
|
||||
v_move_spot = m_fireball.origin + v_to_player * 48;
|
||||
m_fireball.origin = v_move_spot;
|
||||
}
|
||||
while ( distancesquared( m_fireball.origin, self gettagorigin( "J_SpineLower" ) ) > 2304 );
|
||||
|
||||
m_fireball.origin = self gettagorigin( "J_SpineLower" );
|
||||
m_fireball linkto( self, "J_SpineLower" );
|
||||
wait 1.5;
|
||||
playfx( level._effect["sidequest_flash"], m_fireball.origin );
|
||||
m_fireball delete();
|
||||
level notify( "sq_fireball_hit_player" );
|
||||
|
||||
foreach ( perk in perks )
|
||||
{
|
||||
if ( isdefined( self.perk_purchased ) && self.perk_purchased == perk )
|
||||
continue;
|
||||
|
||||
if ( self hasperk( perk ) || self maps\mp\zombies\_zm_perks::has_perk_paused( perk ) )
|
||||
continue;
|
||||
|
||||
self maps\mp\zombies\_zm_perks::give_perk( perk, 0 );
|
||||
wait 0.25;
|
||||
}
|
||||
}
|
118
scripts/zm/replaced/zm_highrise_sq_atd.gsc
Normal file
118
scripts/zm/replaced/zm_highrise_sq_atd.gsc
Normal file
@ -0,0 +1,118 @@
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
#include maps\mp\zombies\_zm_utility;
|
||||
#include maps\mp\zombies\_zm_sidequests;
|
||||
#include maps\mp\zm_highrise_sq;
|
||||
#include maps\mp\zm_highrise_sq_atd;
|
||||
|
||||
init()
|
||||
{
|
||||
flag_init( "sq_atd_elevator0" );
|
||||
flag_init( "sq_atd_elevator1" );
|
||||
flag_init( "sq_atd_elevator2" );
|
||||
flag_init( "sq_atd_elevator3" );
|
||||
flag_init( "sq_atd_elevator_activated" );
|
||||
flag_init( "sq_atd_drg_puzzle_1st_error" );
|
||||
flag_init( "sq_atd_drg_puzzle_complete" );
|
||||
declare_sidequest_stage( "sq", "atd", ::init_stage, ::stage_logic, ::exit_stage_1 );
|
||||
sq_atd_dragon_icon_setup();
|
||||
}
|
||||
|
||||
stage_logic()
|
||||
{
|
||||
sq_atd_elevators();
|
||||
sq_atd_drg_puzzle();
|
||||
stage_completed( "sq", level._cur_stage_name );
|
||||
}
|
||||
|
||||
sq_atd_elevators()
|
||||
{
|
||||
a_elevators = array( "elevator_bldg1b_trigger", "elevator_bldg1d_trigger", "elevator_bldg3b_trigger", "elevator_bldg3c_trigger" );
|
||||
a_elevator_flags = array( "sq_atd_elevator0", "sq_atd_elevator1", "sq_atd_elevator2", "sq_atd_elevator3" );
|
||||
|
||||
for ( i = 0; i < a_elevators.size; i++ )
|
||||
{
|
||||
trig_elevator = getent( a_elevators[i], "targetname" );
|
||||
trig_elevator thread sq_atd_watch_elevator( a_elevator_flags[i] );
|
||||
}
|
||||
|
||||
while ( !flag( "sq_atd_elevator0" ) || !flag( "sq_atd_elevator1" ) || !flag( "sq_atd_elevator2" ) || !flag( "sq_atd_elevator3" ) )
|
||||
{
|
||||
flag_wait_any_array( a_elevator_flags );
|
||||
wait 0.5;
|
||||
}
|
||||
|
||||
flag_set( "sq_atd_elevator_activated" );
|
||||
vo_richtofen_atd_elevators();
|
||||
level thread vo_maxis_atd_elevators();
|
||||
}
|
||||
|
||||
sq_atd_watch_elevator( str_flag )
|
||||
{
|
||||
level endon( "sq_atd_elevator_activated" );
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "trigger", e_who );
|
||||
|
||||
if ( !isplayer( e_who ) )
|
||||
{
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
|
||||
a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" );
|
||||
foreach ( m_icon in a_dragon_icons )
|
||||
{
|
||||
if ( issubstr( self.targetname, m_icon.script_noteworthy ) )
|
||||
{
|
||||
v_off_pos = m_icon.m_lit_icon.origin;
|
||||
m_icon.m_lit_icon unlink();
|
||||
m_icon unlink();
|
||||
m_icon.m_lit_icon.origin = m_icon.origin;
|
||||
m_icon.origin = v_off_pos;
|
||||
m_icon.m_lit_icon linkto( m_icon.m_elevator );
|
||||
m_icon linkto( m_icon.m_elevator );
|
||||
m_icon playsound( "zmb_sq_symbol_light" );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
flag_set( str_flag );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
sq_atd_drg_puzzle()
|
||||
{
|
||||
level.sq_atd_cur_drg = 0;
|
||||
a_puzzle_trigs = getentarray( "trig_atd_drg_puzzle", "targetname" );
|
||||
a_puzzle_trigs = array_randomize( a_puzzle_trigs );
|
||||
|
||||
for ( i = 0; i < a_puzzle_trigs.size; i++ )
|
||||
a_puzzle_trigs[i] thread drg_puzzle_trig_think( i );
|
||||
|
||||
while ( level.sq_atd_cur_drg < 4 )
|
||||
wait 1;
|
||||
|
||||
flag_set( "sq_atd_drg_puzzle_complete" );
|
||||
level thread vo_maxis_atd_order_complete();
|
||||
}
|
||||
|
||||
drg_puzzle_trig_think( n_order_id )
|
||||
{
|
||||
self.drg_active = 0;
|
||||
m_unlit = getent( self.target, "targetname" );
|
||||
m_lit = m_unlit.lit_icon;
|
||||
v_top = m_unlit.origin;
|
||||
v_hidden = m_lit.origin;
|
||||
|
||||
self waittill( "trigger", e_who );
|
||||
|
||||
m_lit.origin = v_top;
|
||||
m_unlit.origin = v_hidden;
|
||||
m_lit playsound( "zmb_sq_symbol_light" );
|
||||
self.drg_active = 1;
|
||||
level thread vo_richtofen_atd_order( level.sq_atd_cur_drg );
|
||||
level.sq_atd_cur_drg++;
|
||||
}
|
360
scripts/zm/replaced/zm_highrise_sq_pts.gsc
Normal file
360
scripts/zm/replaced/zm_highrise_sq_pts.gsc
Normal file
@ -0,0 +1,360 @@
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
#include maps\mp\zombies\_zm_utility;
|
||||
#include maps\mp\zombies\_zm_sidequests;
|
||||
#include maps\mp\zm_highrise_sq;
|
||||
#include maps\mp\zombies\_zm_unitrigger;
|
||||
#include maps\mp\zm_highrise_sq_pts;
|
||||
|
||||
init_1()
|
||||
{
|
||||
flag_init( "pts_1_springpads_placed" );
|
||||
declare_sidequest_stage( "sq_1", "pts_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 );
|
||||
}
|
||||
|
||||
init_2()
|
||||
{
|
||||
flag_init( "pts_2_springpads_placed" );
|
||||
flag_init( "pts_2_generator_1_started" );
|
||||
flag_init( "pts_2_generator_2_started" );
|
||||
declare_sidequest_stage( "sq_2", "pts_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 );
|
||||
}
|
||||
|
||||
stage_logic_1()
|
||||
{
|
||||
watch_player_springpads( 0 );
|
||||
flag_set( "pts_1_springpads_placed" );
|
||||
maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 1 );
|
||||
wait_for_zombies_launched();
|
||||
maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 2 );
|
||||
stage_completed( "sq_1", "pts_1" );
|
||||
}
|
||||
|
||||
stage_logic_2()
|
||||
{
|
||||
watch_player_springpads( 1 );
|
||||
level thread wait_for_balls_launched();
|
||||
flag_wait( "pts_2_generator_1_started" );
|
||||
maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 2 );
|
||||
flag_wait( "pts_2_generator_2_started" );
|
||||
maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 2 );
|
||||
level thread maxis_balls_placed();
|
||||
stage_completed( "sq_2", "pts_2" );
|
||||
}
|
||||
|
||||
watch_player_springpads( is_generator )
|
||||
{
|
||||
level thread springpad_count_watcher( is_generator );
|
||||
a_players = get_players();
|
||||
|
||||
foreach ( player in a_players )
|
||||
player thread pts_watch_springpad_use( is_generator );
|
||||
}
|
||||
|
||||
springpad_count_watcher( is_generator )
|
||||
{
|
||||
level endon( "sq_pts_springad_count4" );
|
||||
str_which_spots = "pts_ghoul";
|
||||
|
||||
if ( is_generator )
|
||||
str_which_spots = "pts_lion";
|
||||
|
||||
a_spots = getstructarray( str_which_spots, "targetname" );
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "sq_pts_springpad_in_place" );
|
||||
|
||||
n_count = 0;
|
||||
|
||||
foreach ( s_spot in a_spots )
|
||||
{
|
||||
if ( isdefined( s_spot.springpad ) )
|
||||
n_count++;
|
||||
}
|
||||
|
||||
level notify( "sq_pts_springad_count" + n_count );
|
||||
}
|
||||
}
|
||||
|
||||
pts_watch_springpad_use( is_generator )
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
|
||||
while ( !flag( "sq_branch_complete" ) )
|
||||
{
|
||||
self waittill( "equipment_placed", weapon, weapname );
|
||||
|
||||
if ( weapname == level.springpad_name )
|
||||
self thread is_springpad_in_place( weapon, is_generator );
|
||||
}
|
||||
}
|
||||
|
||||
is_springpad_in_place( m_springpad, is_generator )
|
||||
{
|
||||
m_springpad endon( "death" );
|
||||
|
||||
m_springpad waittill( "armed" );
|
||||
|
||||
a_lion_spots = getstructarray( "pts_lion", "targetname" );
|
||||
a_ghoul_spots = getstructarray( "pts_ghoul", "targetname" );
|
||||
a_spots = arraycombine( a_lion_spots, a_ghoul_spots, 0, 0 );
|
||||
|
||||
foreach ( s_spot in a_spots )
|
||||
{
|
||||
n_dist = distance2dsquared( m_springpad.origin, s_spot.origin );
|
||||
|
||||
if ( n_dist < 1024 )
|
||||
{
|
||||
v_spot_forward = vectornormalize( anglestoforward( s_spot.angles ) );
|
||||
v_pad_forward = vectornormalize( anglestoforward( m_springpad.angles ) );
|
||||
n_dot = vectordot( v_spot_forward, v_pad_forward );
|
||||
|
||||
if ( n_dot > 0.98 )
|
||||
{
|
||||
level notify( "sq_pts_springpad_in_place" );
|
||||
s_spot.springpad = m_springpad;
|
||||
self thread pts_springpad_removed_watcher( m_springpad, s_spot );
|
||||
|
||||
if ( is_generator )
|
||||
{
|
||||
wait 0.1;
|
||||
if ( pts_should_springpad_create_trigs( s_spot ) )
|
||||
{
|
||||
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_springpad.fling_scaler = 2;
|
||||
m_springpad thread watch_zombie_flings();
|
||||
}
|
||||
|
||||
if ( isdefined( s_spot.script_float ) )
|
||||
{
|
||||
s_target = getstruct( "sq_zombie_launch_target", "targetname" );
|
||||
v_override_dir = vectornormalize( s_target.origin - m_springpad.origin );
|
||||
v_override_dir = vectorscale( v_override_dir, 1024 );
|
||||
m_springpad.direction_vec_override = v_override_dir;
|
||||
m_springpad.fling_scaler = s_spot.script_float;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
wait_for_zombies_launched()
|
||||
{
|
||||
level thread richtofen_zombies_launched();
|
||||
t_tower = getent( "pts_tower_trig", "targetname" );
|
||||
s_tower_top = getstruct( "sq_zombie_launch_target", "targetname" );
|
||||
|
||||
while ( level.n_launched_zombies < 15 )
|
||||
wait 0.5;
|
||||
}
|
||||
|
||||
watch_zombie_flings()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
self endon( "equip_springpad_zm_taken" );
|
||||
self endon( "equip_springpad_zm_pickup" );
|
||||
|
||||
while ( level.n_launched_zombies < 15 )
|
||||
{
|
||||
self waittill( "fling", zombies_only );
|
||||
|
||||
if ( zombies_only )
|
||||
{
|
||||
level.n_launched_zombies++;
|
||||
|
||||
if ( level.n_launched_zombies == 1 || level.n_launched_zombies == 5 || level.n_launched_zombies == 10 )
|
||||
level notify( "pts1_say_next_line" );
|
||||
}
|
||||
|
||||
wait 0.1;
|
||||
}
|
||||
}
|
||||
|
||||
wait_for_balls_launched()
|
||||
{
|
||||
level.current_generator = 1;
|
||||
a_lion_spots = getstructarray( "pts_lion", "targetname" );
|
||||
|
||||
foreach ( s_lion_spot in a_lion_spots )
|
||||
{
|
||||
s_lion_spot.a_place_ball_trigs = [];
|
||||
}
|
||||
|
||||
a_players = getplayers();
|
||||
|
||||
foreach ( player in a_players )
|
||||
{
|
||||
player.a_place_ball_trigs = [];
|
||||
|
||||
if ( isdefined( player.zm_sq_has_ball ) )
|
||||
player thread player_set_down_ball_watcher();
|
||||
}
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "zm_ball_picked_up", player );
|
||||
|
||||
player thread player_set_down_ball_watcher();
|
||||
}
|
||||
}
|
||||
|
||||
player_set_down_ball_watcher()
|
||||
{
|
||||
self waittill_any( "zm_sq_ball_putdown", "zm_sq_ball_used" );
|
||||
pts_putdown_trigs_remove_for_player( self );
|
||||
}
|
||||
|
||||
pts_should_player_create_trigs( player )
|
||||
{
|
||||
a_lion_spots = getstructarray( "pts_lion", "targetname" );
|
||||
|
||||
foreach ( s_lion_spot in a_lion_spots )
|
||||
{
|
||||
if ( isdefined( s_lion_spot.springpad ) && !isdefined( s_lion_spot.which_ball ) )
|
||||
{
|
||||
pts_putdown_trigs_create_for_spot( s_lion_spot, player );
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
pts_should_springpad_create_trigs( s_lion_spot )
|
||||
{
|
||||
if ( isdefined( s_lion_spot.springpad ) && !isdefined( s_lion_spot.which_ball ) )
|
||||
{
|
||||
a_players = getplayers();
|
||||
|
||||
foreach ( player in a_players )
|
||||
{
|
||||
if ( isdefined( player.zm_sq_has_ball ) && player.zm_sq_has_ball )
|
||||
{
|
||||
pts_putdown_trigs_create_for_spot( s_lion_spot, player );
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
pts_putdown_trigs_create_for_spot( s_lion_spot, player )
|
||||
{
|
||||
t_place_ball = sq_pts_create_use_trigger( s_lion_spot.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" );
|
||||
player clientclaimtrigger( t_place_ball );
|
||||
t_place_ball.owner = player;
|
||||
player thread place_ball_think( t_place_ball, s_lion_spot );
|
||||
|
||||
if ( !isdefined( s_lion_spot.pts_putdown_trigs ) )
|
||||
s_lion_spot.pts_putdown_trigs = [];
|
||||
|
||||
s_lion_spot.pts_putdown_trigs[player.characterindex] = t_place_ball;
|
||||
level thread pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot );
|
||||
}
|
||||
|
||||
sq_pts_create_use_trigger( v_origin, radius, height, str_hint_string )
|
||||
{
|
||||
t_pickup = spawn( "trigger_radius_use", v_origin, 0, radius, height );
|
||||
t_pickup setcursorhint( "HINT_NOICON" );
|
||||
t_pickup sethintstring( str_hint_string );
|
||||
t_pickup.targetname = "ball_place_trig";
|
||||
t_pickup triggerignoreteam();
|
||||
return t_pickup;
|
||||
}
|
||||
|
||||
pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot )
|
||||
{
|
||||
player pts_springpad_waittill_removed( s_lion_spot.springpad );
|
||||
pts_putdown_trigs_remove_for_spot( s_lion_spot );
|
||||
}
|
||||
|
||||
place_ball_think( t_place_ball, s_lion_spot )
|
||||
{
|
||||
t_place_ball endon( "delete" );
|
||||
|
||||
|
||||
while (1)
|
||||
{
|
||||
t_place_ball waittill( "trigger" );
|
||||
|
||||
if (!is_true( self.zm_sq_has_ball ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
pts_putdown_trigs_remove_for_spot( s_lion_spot );
|
||||
self.zm_sq_has_ball = undefined;
|
||||
s_lion_spot.which_ball = self.which_ball;
|
||||
self notify( "zm_sq_ball_used" );
|
||||
s_lion_spot.zm_pts_animating = 1;
|
||||
flag_set( "pts_2_generator_" + level.current_generator + "_started" );
|
||||
s_lion_spot.which_generator = level.current_generator;
|
||||
level.current_generator++;
|
||||
|
||||
s_lion_spot.springpad thread pts_springpad_fling( s_lion_spot.script_noteworthy );
|
||||
thread maps\mp\zombies\_zm_unitrigger::register_unitrigger( self.buildablespringpad.stub );
|
||||
self.t_putdown_ball delete();
|
||||
}
|
||||
}
|
||||
|
||||
#using_animtree("fxanim_props");
|
||||
|
||||
pts_springpad_fling( str_spot_name )
|
||||
{
|
||||
str_anim1 = undefined;
|
||||
n_anim_length1 = undefined;
|
||||
str_anim2 = undefined;
|
||||
n_anim_length2 = undefined;
|
||||
|
||||
switch ( str_spot_name )
|
||||
{
|
||||
case "lion_pair_1":
|
||||
str_anim1 = "dc";
|
||||
str_anim2 = "cd";
|
||||
break;
|
||||
case "lion_pair_2":
|
||||
str_anim1 = "ab";
|
||||
str_anim2 = "ba";
|
||||
break;
|
||||
case "lion_pair_3":
|
||||
str_anim1 = "cd";
|
||||
str_anim2 = "dc";
|
||||
break;
|
||||
case "lion_pair_4":
|
||||
str_anim1 = "ba";
|
||||
str_anim2 = "ab";
|
||||
break;
|
||||
}
|
||||
|
||||
m_anim = spawn( "script_model", ( 2090, 675, 3542 ) );
|
||||
m_anim.angles = ( 0, 0, 0 );
|
||||
m_anim setmodel( "fxanim_zom_highrise_trample_gen_mod" );
|
||||
m_anim useanimtree( #animtree );
|
||||
m_anim.targetname = "trample_gen_" + str_spot_name;
|
||||
pts_springpad_anim_ball( m_anim, str_anim1, str_anim2 );
|
||||
}
|
||||
|
||||
pts_springpad_anim_ball( m_anim, str_anim1, str_anim2 )
|
||||
{
|
||||
m_anim endon( "delete" );
|
||||
self endon( "delete" );
|
||||
n_anim_length1 = getanimlength( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim1] );
|
||||
n_anim_length2 = getanimlength( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim2] );
|
||||
|
||||
self notify( "fling", 1 );
|
||||
|
||||
if ( isdefined( m_anim ) )
|
||||
m_anim setanim( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim1] );
|
||||
|
||||
wait( n_anim_length1 );
|
||||
}
|
103
scripts/zm/replaced/zm_highrise_sq_ssp.gsc
Normal file
103
scripts/zm/replaced/zm_highrise_sq_ssp.gsc
Normal file
@ -0,0 +1,103 @@
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
#include maps\mp\zombies\_zm_utility;
|
||||
#include maps\mp\zombies\_zm_sidequests;
|
||||
#include maps\mp\zombies\_zm_spawner;
|
||||
#include maps\mp\zm_highrise_sq;
|
||||
#include maps\mp\zm_highrise_sq_ssp;
|
||||
|
||||
ssp1_watch_ball( str_complete_flag )
|
||||
{
|
||||
self watch_model_sliquification( 10, str_complete_flag );
|
||||
self thread ssp1_rotate_ball();
|
||||
self playloopsound( "zmb_sq_ball_rotate_loop", 0.25 );
|
||||
}
|
||||
|
||||
watch_model_sliquification( n_end_limit, str_complete_flag )
|
||||
{
|
||||
n_count = 0;
|
||||
self setcandamage( 1 );
|
||||
|
||||
while ( !flag( str_complete_flag ) )
|
||||
{
|
||||
self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname );
|
||||
|
||||
if ( issubstr( weaponname, "slipgun" ) && !flag( "sq_ball_picked_up" ) )
|
||||
{
|
||||
n_count++;
|
||||
|
||||
if ( n_count >= n_end_limit )
|
||||
{
|
||||
self notify( "sq_sliquified" );
|
||||
|
||||
if ( isdefined( self.t_pickup ) )
|
||||
self.t_pickup delete();
|
||||
|
||||
flag_set( str_complete_flag );
|
||||
}
|
||||
else if ( n_count == 1 )
|
||||
level notify( "ssp1_ball_first_sliquified" );
|
||||
else if ( n_count == 5 )
|
||||
level notify( "ssp1_ball_sliquified_2" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
init_2()
|
||||
{
|
||||
flag_init( "ssp2_maxis_keep_going_said" );
|
||||
flag_init( "ssp2_maxis_reincarnate_said" );
|
||||
flag_init( "ssp2_corpses_in_place" );
|
||||
flag_init( "ssp2_resurrection_done" );
|
||||
flag_init( "ssp2_statue_complete" );
|
||||
maps\mp\zombies\_zm_spawner::add_custom_zombie_spawn_logic( ::ssp_2_zombie_death_check );
|
||||
declare_sidequest_stage( "sq_2", "ssp_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 );
|
||||
}
|
||||
|
||||
stage_logic_2()
|
||||
{
|
||||
level thread ssp2_advance_dragon();
|
||||
corpse_room_watcher();
|
||||
stage_completed( "sq_2", "ssp_2" );
|
||||
}
|
||||
|
||||
ssp_2_zombie_death_check()
|
||||
{
|
||||
self waittill( "death" );
|
||||
|
||||
if ( !isdefined( self ) )
|
||||
return;
|
||||
|
||||
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
|
||||
|
||||
if ( self istouching( t_corpse_room ) )
|
||||
level notify( "ssp2_corpse_made", 1 );
|
||||
}
|
||||
|
||||
corpse_room_watcher()
|
||||
{
|
||||
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
|
||||
n_count = 0;
|
||||
|
||||
while ( !flag( "ssp2_resurrection_done" ) )
|
||||
{
|
||||
level waittill( "ssp2_corpse_made", is_in_room );
|
||||
|
||||
if ( is_in_room )
|
||||
n_count++;
|
||||
else
|
||||
n_count = 0;
|
||||
|
||||
if ( n_count == 1 && !flag( "ssp2_maxis_keep_going_said" ) )
|
||||
{
|
||||
flag_set( "ssp2_maxis_keep_going_said" );
|
||||
level thread maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_0" );
|
||||
}
|
||||
else if ( n_count >= 15 )
|
||||
{
|
||||
flag_set( "ssp2_corpses_in_place" );
|
||||
vo_maxis_ssp_complete();
|
||||
flag_set( "ssp2_resurrection_done" );
|
||||
}
|
||||
}
|
||||
}
|
@ -10,11 +10,20 @@
|
||||
#include scripts\zm\replaced\_zm_banking;
|
||||
#include scripts\zm\replaced\_zm_weapon_locker;
|
||||
#include scripts\zm\replaced\_zm_sq;
|
||||
#include scripts\zm\replaced\_zm_sq_atd;
|
||||
#include scripts\zm\replaced\_zm_sq_ssp;
|
||||
#include scripts\zm\replaced\_zm_sq_pts;
|
||||
|
||||
main()
|
||||
{
|
||||
replaceFunc(maps\mp\zm_highrise_sq::navcomputer_waitfor_navcard, scripts\zm\replaced\_zm_sq::navcomputer_waitfor_navcard);
|
||||
replaceFunc(maps\mp\zm_highrise_sq::init, scripts\zm\replaced\zm_highrise_sq::init);
|
||||
replaceFunc(maps\mp\zm_highrise_sq_atd::init, scripts\zm\replaced\zm_highrise_sq_atd::init);
|
||||
replaceFunc(maps\mp\zm_highrise_sq_ssp::ssp1_watch_ball, scripts\zm\replaced\zm_highrise_sq_ssp::ssp1_watch_ball);
|
||||
replaceFunc(maps\mp\zm_highrise_sq_ssp::init_2, scripts\zm\replaced\zm_highrise_sq_ssp::init_2);
|
||||
replaceFunc(maps\mp\zm_highrise_sq_pts::init_1, scripts\zm\replaced\zm_highrise_sq_pts::init_1);
|
||||
replaceFunc(maps\mp\zm_highrise_sq_pts::init_2, scripts\zm\replaced\zm_highrise_sq_pts::init_2);
|
||||
replaceFunc(maps\mp\zm_highrise_sq_pts::pts_should_player_create_trigs, scripts\zm\replaced\zm_highrise_sq_pts::pts_should_player_create_trigs);
|
||||
replaceFunc(maps\mp\zm_highrise_gamemodes::init, scripts\zm\replaced\zm_highrise_gamemodes::init);
|
||||
replaceFunc(maps\mp\zm_highrise_classic::insta_kill_player, scripts\zm\replaced\zm_highrise_classic::insta_kill_player);
|
||||
replaceFunc(maps\mp\zombies\_zm_chugabud::chugabud_bleed_timeout, scripts\zm\replaced\_zm_chugabud::chugabud_bleed_timeout);
|
||||
|
Reference in New Issue
Block a user