[noae]
#include maps\_utility;
#include common_scripts\utility;
#include maps\_zombiemode_utility;
init()
{
PrecacheShader( "specialty_doublepoints_zombies" );
PrecacheShader( "specialty_instakill_zombies" );
PrecacheShader( "black" );
// powerup Vars
set_zombie_var( "zombie_insta_kill", 0 );
set_zombie_var( "zombie_point_scalar", 1 );
set_zombie_var( "zombie_drop_item", 0 );
set_zombie_var( "zombie_timer_offset", 350 ); // hud offsets
set_zombie_var( "zombie_timer_offset_interval", 30 );
set_zombie_var( "zombie_powerup_insta_kill_on", false );
set_zombie_var( "zombie_powerup_point_doubler_on", false );
set_zombie_var( "zombie_powerup_point_doubler_time", 30 ); // length of point doubler
set_zombie_var( "zombie_powerup_insta_kill_time", 30 ); // length of insta kill
set_zombie_var( "zombie_powerup_drop_increment", 2000 ); // lower this to make drop happen more often
set_zombie_var( "zombie_powerup_drop_max_per_round", 4 ); // lower this to make drop happen more often
// powerups
level._effect["powerup_on"] = loadfx( "misc/fx_zombie_powerup_on" );
level._effect["powerup_grabbed"] = loadfx( "misc/fx_zombie_powerup_grab" );
level._effect["powerup_grabbed_wave"] = loadfx( "misc/fx_zombie_powerup_wave" );
init_powerups();
thread watch_for_drop();
}
init_powerups()
{
if( !IsDefined( level.zombie_powerup_array ) )
{
level.zombie_powerup_array = [];
}
if ( !IsDefined( level.zombie_special_drop_array ) )
{
level.zombie_special_drop_array = [];
}
// Random Drops
add_zombie_powerup( "nuke", "zombie_bomb", &"ZOMBIE_POWERUP_NUKE", "misc/fx_zombie_mini_nuke" );
// add_zombie_powerup( "nuke", "zombie_bomb", &"ZOMBIE_POWERUP_NUKE", "misc/fx_zombie_mini_nuke_hotness" );
add_zombie_powerup( "insta_kill", "zombie_skull", &"ZOMBIE_POWERUP_INSTA_KILL" );
add_zombie_powerup( "double_points","zombie_x2_icon", &"ZOMBIE_POWERUP_DOUBLE_POINTS" );
add_zombie_powerup( "full_ammo", "zombie_ammocan", &"ZOMBIE_POWERUP_MAX_AMMO");
add_zombie_powerup( "carpenter", "zombie_carpenter", &"ZOMBIE_POWERUP_MAX_AMMO");
add_zombie_powerup( "teddy", "zombie_teddybear", &"ZOMBIE_POWERUP_teddy");
// add_zombie_special_powerup( "monkey" );
// additional special "drops"
// add_zombie_special_drop( "nothing" );
add_zombie_special_drop( "dog" );
// Randomize the order
randomize_powerups();
level.zombie_powerup_index = 0;
randomize_powerups();
level thread powerup_hud_overlay();
}
powerup_hud_overlay()
{
level.powerup_hud_array = [];
level.powerup_hud_array[0] = true;
level.powerup_hud_array[1] = true;
level.powerup_hud = [];
level.powerup_hud_cover = [];
level endon ("disconnect");
for(i = 0; i < 2; i++)
{
level.powerup_hud[i] = create_simple_hud();
level.powerup_hud[i].foreground = true;
level.powerup_hud[i].sort = 2;
level.powerup_hud[i].hidewheninmenu = false;
level.powerup_hud[i].alignX = "center";
level.powerup_hud[i].alignY = "bottom";
level.powerup_hud[i].horzAlign = "center";
level.powerup_hud[i].vertAlign = "bottom";
level.powerup_hud[i].x = -32 + (i * 15);
level.powerup_hud[i].y = level.powerup_hud[i].y - 35;
level.powerup_hud[i].alpha = 0.8;
//hud SetShader( shader_inst, 24, 24 );
}
shader_2x = "specialty_doublepoints_zombies";
shader_insta = "specialty_instakill_zombies";
// shader_white = "black";
//for(i = 0; i < 2; i++)
//{
// level.powerup_hud_cover[i] = create_simple_hud();
// level.powerup_hud_cover[i].foreground = true;
// level.powerup_hud_cover[i].sort = 1;
// level.powerup_hud_cover[i].hidewheninmenu = false;
// level.powerup_hud_cover[i].alignX = "center";
// level.powerup_hud_cover[i].alignY = "bottom";
// level.powerup_hud_cover[i].horzAlign = "center";
// level.powerup_hud_cover[i].vertAlign = "bottom";
// level.powerup_hud_cover[i].x = -32 + (i * 34);
// level.powerup_hud_cover[i].y = level.powerup_hud_cover[i].y - 30;
// level.powerup_hud_cover[i].alpha = 1;
// //hud SetShader( shader_inst, 24, 24 );
//}
//increment = 0;
while(true)
{
if(level.zombie_vars["zombie_powerup_insta_kill_time"] < 5)
{
wait(0.1);
level.powerup_hud[1].alpha = 0;
wait(0.1);
}
else if(level.zombie_vars["zombie_powerup_insta_kill_time"] < 10)
{
wait(0.2);
level.powerup_hud[1].alpha = 0;
wait(0.18);
}
if(level.zombie_vars["zombie_powerup_point_doubler_time"] < 5)
{
wait(0.1);
level.powerup_hud[0].alpha = 0;
wait(0.1);
}
else if(level.zombie_vars["zombie_powerup_point_doubler_time"] < 10)
{
wait(0.2);
level.powerup_hud[0].alpha = 0;
wait(0.18);
}
//if(level.zombie_vars["zombie_powerup_insta_kill_time"] != 0)
// iprintlnbold(level.zombie_vars["zombie_powerup_insta_kill_time"]);
//if(level.zombie_vars["zombie_powerup_point_doubler_time"] != 0)
// iprintlnbold(level.zombie_vars["zombie_powerup_point_doubler_time"]);
//wait(0.01);
if(level.zombie_vars["zombie_powerup_point_doubler_on"] == true && level.zombie_vars["zombie_powerup_insta_kill_on"] == true)
{
level.powerup_hud[0].x = -24;
level.powerup_hud[1].x = 24;
level.powerup_hud[0].alpha = 1;
level.powerup_hud[1].alpha = 1;
level.powerup_hud[0] setshader(shader_2x, 32, 32);
level.powerup_hud[1] setshader(shader_insta, 32, 32);
/*level.powerup_hud_cover[0].x = -36;
level.powerup_hud_cover[1].x = 36;
level.powerup_hud_cover[0] setshader(shader_white, 32, i);
level.powerup_hud_cover[1] setshader(shader_white, 32, j);
level.powerup_hud_cover[0].alpha = 1;
level.powerup_hud_cover[1].alpha = 1;*/
}
else if(level.zombie_vars["zombie_powerup_point_doubler_on"] == true && level.zombie_vars["zombie_powerup_insta_kill_on"] == false)
{
level.powerup_hud[0].x = 0;
//level.powerup_hud[0].y = level.powerup_hud[0].y - 70;
level.powerup_hud[0] setshader(shader_2x, 32, 32);
level.powerup_hud[1].alpha = 0;
level.powerup_hud[0].alpha = 1;
}
else if(level.zombie_vars["zombie_powerup_insta_kill_on"] == true && level.zombie_vars["zombie_powerup_point_doubler_on"] == false)
{
level.powerup_hud[1].x = 0;
//level.powerup_hud[1].y = level.powerup_hud[1].y - 70;
level.powerup_hud[1] setshader(shader_insta, 32, 32);
level.powerup_hud[0].alpha = 0;
level.powerup_hud[1].alpha = 1;
}
else
{
level.powerup_hud[1].alpha = 0;
level.powerup_hud[0].alpha = 0;
}
wait(0.01);
//increment += 1;
//if(increment >= 20)
//{
// level.powerup_hud[0].alpha = 0;
// level.powerup_hud[1].alpha = 0;
//// level.powerup_hud_cover[0].alpha = 0;
//// level.powerup_hud_cover[1].alpha = 0;
//}
//
//if(increment == 30)
//{
// level.powerup_hud_array[1] = false;
// level.powerup_hud_array[0] = false;
//}
//wait(0.5);
/* if(randomint(100) > 50)
level.powerup_hud_array[0] = false;
else
level.powerup_hud_array[0] = true;
if(randomint(100) > 50)
level.powerup_hud_array[1] = false;
else
level.powerup_hud_array[1] = true;*/
}
//for(i = 0; i < 2; i++)
//{
// level.powerup_hud_cover[i] = create_simple_hud();
// level.powerup_hud_cover[i].foreground = true;
// level.powerup_hud_cover[i].sort = 1;
// level.powerup_hud_cover[i].hidewheninmenu = false;
// level.powerup_hud_cover[i].alignX = "center";
// level.powerup_hud_cover[i].alignY = "bottom";
// level.powerup_hud_cover[i].horzAlign = "center";
// level.powerup_hud_cover[i].vertAlign = "bottom";
// level.powerup_hud_cover[i].x = -32 + (i * 34);
// level.powerup_hud_cover[i].y = level.powerup_hud_cover[i].y - 79;
// level.powerup_hud_cover[i].alpha = 0.5;
// //hud SetShader( shader_inst, 24, 24 );
//}
//while(true)
//{
// /* for(i = 0; i < 2; i++)
// {
// level.powerup_hud[i].y = level.powerup_hud[i].y - 5;
// }*/
// wait(1);
//}
}
randomize_powerups()
{
level.zombie_powerup_array = array_randomize( level.zombie_powerup_array );
}
get_next_powerup()
{
if( level.zombie_powerup_index >= level.zombie_powerup_array.size )
{
level.zombie_powerup_index = 0;
randomize_powerups();
}
powerup = level.zombie_powerup_array[level.zombie_powerup_index];
/#
if( isdefined( level.zombie_devgui_power ) && level.zombie_devgui_power == 1 )
return powerup;
#/
//level.windows_destroyed = get_num_window_destroyed();
while( powerup == "carpenter" && get_num_window_destroyed() < 5)
{
if( level.zombie_powerup_index >= level.zombie_powerup_array.size )
{
level.zombie_powerup_index = 0;
randomize_powerups();
}
powerup = level.zombie_powerup_array[level.zombie_powerup_index];
level.zombie_powerup_index++;
if( powerup != "carpenter" )
return powerup;
wait(0.05);
}
level.zombie_powerup_index++;
return powerup;
}
get_num_window_destroyed()
{
num = 0;
for( i = 0; i < level.exterior_goals.size; i++ )
{
/*targets = getentarray(level.exterior_goals[i].target, "targetname");
barrier_chunks = [];
for( j = 0; j < targets.size; j++ )
{
if( IsDefined( targets[j].script_noteworthy ) )
{
if( targets[j].script_noteworthy == "clip" )
{
continue;
}
}
barrier_chunks[barrier_chunks.size] = targets[j];
}*/
if( all_chunks_destroyed( level.exterior_goals[i].barrier_chunks ) )
{
num += 1;
}
}
return num;
}
watch_for_drop()
{
players = get_players();
score_to_drop = ( players.size * level.zombie_vars["zombie_score_start"] ) + level.zombie_vars["zombie_powerup_drop_increment"];
while (1)
{
players = get_players();
curr_total_score = 0;
for (i = 0; i < players.size; i++)
{
curr_total_score += players[i].score_total;
}
if (curr_total_score > score_to_drop )
{
level.zombie_vars["zombie_powerup_drop_increment"] *= 1.14;
score_to_drop = curr_total_score + level.zombie_vars["zombie_powerup_drop_increment"];
level.zombie_vars["zombie_drop_item"] = 1;
}
wait( 0.5 );
}
}
add_zombie_powerup( powerup_name, model_name, hint, fx )
{
if( IsDefined( level.zombie_include_powerups ) && !IsDefined( level.zombie_include_powerups[powerup_name] ) )
{
return;
}
PrecacheModel( model_name );
PrecacheString( hint );
struct = SpawnStruct();
if( !IsDefined( level.zombie_powerups ) )
{
level.zombie_powerups = [];
}
struct.powerup_name = powerup_name;
struct.model_name = model_name;
struct.weapon_classname = "script_model";
struct.hint = hint;
if( IsDefined( fx ) )
{
struct.fx = LoadFx( fx );
}
level.zombie_powerups[powerup_name] = struct;
level.zombie_powerup_array[level.zombie_powerup_array.size] = powerup_name;
add_zombie_special_drop( powerup_name );
}
// special powerup list for the teleporter drop
add_zombie_special_drop( powerup_name )
{
level.zombie_special_drop_array[ level.zombie_special_drop_array.size ] = powerup_name;
}
include_zombie_powerup( powerup_name )
{
if( !IsDefined( level.zombie_include_powerups ) )
{
level.zombie_include_powerups = [];
}
level.zombie_include_powerups[powerup_name] = true;
}
powerup_round_start()
{
level.powerup_drop_count = 0;
}
powerup_drop(drop_point)
{
rand_drop = randomint(100);
if( level.powerup_drop_count >= level.zombie_vars["zombie_powerup_drop_max_per_round"] )
{
println( "^3POWERUP DROP EXCEEDED THE MAX PER ROUND!" );
return;
}
if( !isDefined(level.zombie_include_powerups) || level.zombie_include_powerups.size == 0 )
{
return;
}
// some guys randomly drop, but most of the time they check for the drop flag
if (rand_drop > 2)
{
if (!level.zombie_vars["zombie_drop_item"])
{
return;
}
debug = "score";
}
else
{
debug = "random";
}
// never drop unless in the playable area
playable_area = getentarray("playable_area","targetname");
powerup = maps\_zombiemode_net::network_safe_spawn( "powerup", 1, "script_model", drop_point + (0,0,40));
//chris_p - fixed bug where you could not have more than 1 playable area trigger for the whole map
valid_drop = false;
for (i = 0; i < playable_area.size; i++)
{
if (powerup istouching(playable_area[i]))
{
valid_drop = true;
}
}
if(!valid_drop)
{
powerup delete();
return;
}
powerup powerup_setup();
level.powerup_drop_count++;
print_powerup_drop( powerup.powerup_name, debug );
powerup thread powerup_timeout();
powerup thread powerup_wobble();
powerup thread powerup_grab();
level.zombie_vars["zombie_drop_item"] = 0;
//powerup = powerup_setup();
// if is !is touching trig
// return
// spawn the model, do a ground trace and place above
// start the movement logic, spawn the fx
// start the time out logic
// start the grab logic
}
//
// Special power up drop - done outside of the powerup system.
special_powerup_drop(drop_point)
{
// if( level.powerup_drop_count == level.zombie_vars["zombie_powerup_drop_max_per_round"] )
// {
// println( "^3POWERUP DROP EXCEEDED THE MAX PER ROUND!" );
// return;
// }
if( !isDefined(level.zombie_include_powerups) || level.zombie_include_powerups.size == 0 )
{
return;
}
powerup = spawn ("script_model", drop_point + (0,0,40));
// never drop unless in the playable area
playable_area = getentarray("playable_area","targetname");
//chris_p - fixed bug where you could not have more than 1 playable area trigger for the whole map
valid_drop = false;
for (i = 0; i < playable_area.size; i++)
{
if (powerup istouching(playable_area[i]))
{
valid_drop = true;
break;
}
}
if(!valid_drop)
{
powerup Delete();
return;
}
powerup special_drop_setup();
}
//
// Pick the next powerup in the list
powerup_setup()
{
powerup = get_next_powerup();
struct = level.zombie_powerups[powerup];
self SetModel( struct.model_name );
//TUEY Spawn Powerup
playsoundatposition("spawn_powerup", self.origin);
self.powerup_name = struct.powerup_name;
self.hint = struct.hint;
if( IsDefined( struct.fx ) )
{
self.fx = struct.fx;
}
self PlayLoopSound("spawn_powerup_loop");
}
//
// Get the special teleporter drop
special_drop_setup()
{
powerup = undefined;
is_powerup = true;
// Always give something at lower rounds or if a player is in last stand mode.
if ( level.round_number <= 10 || maps\_laststand::player_num_in_laststand() )
{
powerup = get_next_powerup();
}
// Gets harder now
else
{
powerup = level.zombie_special_drop_array[ RandomInt(level.zombie_special_drop_array.size) ];
if ( level.round_number > 15 &&
( RandomInt(100) < (level.round_number - 15)*5 ) )
{
powerup = "nothing";
}
}
//MM test Change this if you want the same thing to keep spawning
// powerup = "dog";
switch ( powerup )
{
// Don't need to do anything special
case "nuke":
case "insta_kill":
case "double_points":
case "carpenter":
break;
// Limit max ammo drops because it's too powerful
case "full_ammo":
if ( level.round_number > 10 &&
( RandomInt(100) < (level.round_number - 10)*5 ) )
{
// Randomly pick another one
powerup = level.zombie_powerup_array[ RandomInt(level.zombie_powerup_array.size) ];
}
break;
case "dog":
if ( level.round_number >= 15 )
{
is_powerup = false;
dog_spawners = GetEntArray( "special_dog_spawner", "targetname" );
maps\_zombiemode_dogs::special_dog_spawn( dog_spawners, 1 );
//iprintlnbold( "Samantha Sez: No Powerup For You!" );
thread play_sound_2d( "sam_nospawn" );
}
else
{
powerup = get_next_powerup();
}
break;
// Nothing drops!!
default: // "nothing"
is_powerup = false;
Playfx( level._effect["lightning_dog_spawn"], self.origin );
playsoundatposition( "pre_spawn", self.origin );
wait( 1.5 );
playsoundatposition( "bolt", self.origin );
Earthquake( 0.5, 0.75, self.origin, 1000);
PlayRumbleOnPosition("explosion_generic", self.origin);
playsoundatposition( "spawn", self.origin );
wait( 1.0 );
//iprintlnbold( "Samantha Sez: No Powerup For You!" );
thread play_sound_2d( "sam_nospawn" );
self Delete();
}
if ( is_powerup )
{
Playfx( level._effect["lightning_dog_spawn"], self.origin );
playsoundatposition( "pre_spawn", self.origin );
wait( 1.5 );
playsoundatposition( "bolt", self.origin );
Earthquake( 0.5, 0.75, self.origin, 1000);
PlayRumbleOnPosition("explosion_generic", self.origin);
playsoundatposition( "spawn", self.origin );
// wait( 0.5 );
struct = level.zombie_powerups[powerup];
self SetModel( struct.model_name );
//TUEY Spawn Powerup
playsoundatposition("spawn_powerup", self.origin);
self.powerup_name = struct.powerup_name;
self.hint = struct.hint;
if( IsDefined( struct.fx ) )
{
self.fx = struct.fx;
}
self PlayLoopSound("spawn_powerup_loop");
self thread powerup_timeout();
self thread powerup_wobble();
self thread powerup_grab();
}
}
powerup_grab()
{
self endon ("powerup_timedout");
self endon ("powerup_grabbed");
while (isdefined(self))
{
players = get_players();
for (i = 0; i < players.size; i++)
{
if (distance (players[i].origin, self.origin) < 64)
{
playfx (level._effect["powerup_grabbed"], self.origin);
playfx (level._effect["powerup_grabbed_wave"], self.origin);
if( IsDefined( level.zombie_powerup_grab_func ) )
{
level thread [[level.zombie_powerup_grab_func]]();
}
else
{
switch (self.powerup_name)
{
case "nuke":
level thread nuke_powerup( self );
//chrisp - adding powerup VO sounds
players[i] thread powerup_vo("nuke");
zombies = getaiarray("axis");
players[i].zombie_nuked = get_array_of_closest( self.origin, zombies );
players[i] notify("nuke_triggered");
break;
case "full_ammo":
level thread full_ammo_powerup( self );
players[i] thread powerup_vo("full_ammo");
break;
case "double_points":
level thread double_points_powerup( self );
players[i] thread powerup_vo("double_points");
break;
case "insta_kill":
level thread insta_kill_powerup( self );
players[i] thread powerup_vo("insta_kill");
break;
case "carpenter":
level thread start_carpenter( self.origin );
players[i] thread powerup_vo("carpenter");
break;
case "teddy":
level thread teddy_powerup( self );
break;
default:
println ("Unrecognized poweup.");
break;
}
}
wait( 0.1 );
playsoundatposition("powerup_grabbed", self.origin);
self stoploopsound();
self delete();
self notify ("powerup_grabbed");
}
}
wait 0.1;
}
}
start_carpenter( origin )
{
level thread play_devil_dialog("carp_vox");
window_boards = getstructarray( "exterior_goal", "targetname" );
total = level.exterior_goals.size;
//COLLIN
carp_ent = spawn("script_origin", (0,0,0));
carp_ent playloopsound( "carp_loop" );
while(true)
{
windows = get_closest_window_repair(window_boards, origin);
if( !IsDefined( windows ) )
{
carp_ent stoploopsound( 1 );
carp_ent playsound( "carp_end", "sound_done" );
carp_ent waittill( "sound_done" );
break;
}
else
window_boards = array_remove(window_boards, windows);
while(1)
{
if( all_chunks_intact( windows.barrier_chunks ) )
{
break;
}
chunk = get_random_destroyed_chunk( windows.barrier_chunks );
if( !IsDefined( chunk ) )
break;
windows thread maps\_zombiemode_blockers_new::replace_chunk( chunk, false, true );
windows.clip enable_trigger();
windows.clip DisconnectPaths();
wait_network_frame();
wait(0.05);
}
wait_network_frame();
}
players = get_players();
for(i = 0; i < players.size; i++)
{
players[i].score += 200;
players[i].score_total += 200;
players[i] maps\_zombiemode_score::set_player_score_hud();
}
carp_ent delete();
}
get_closest_window_repair( windows, origin )
{
current_window = undefined;
shortest_distance = undefined;
for( i = 0; i < windows.size; i++ )
{
if( all_chunks_intact(windows[i].barrier_chunks ) )
continue;
if( !IsDefined( current_window ) )
{
current_window = windows[i];
shortest_distance = DistanceSquared( current_window.origin, origin );
}
else
{
if( DistanceSquared(windows[i].origin, origin) < shortest_distance )
{
current_window = windows[i];
shortest_distance = DistanceSquared( windows[i].origin, origin );
}
}
}
return current_window;
}
powerup_vo(type)
{
self endon("death");
self endon("disconnect");
index = maps\_zombiemode_weapons::get_player_index(self);
sound = undefined;
rand = randomintrange(0,3);
vox_rand = randomintrange(1,100); //RARE: This is to setup the Rare devil response lines
percentage = 1; //What percent chance the rare devil response line has to play
if(!isdefined (level.player_is_speaking))
{
level.player_is_speaking = 0;
}
wait(randomfloatrange(1,2));
switch(type)
{
case "nuke":
if( vox_rand <= percentage )
{
//sound = "plr_" + index + "_vox_resp_dev_rare_" + rand;
//iprintlnbold( "Whoopdedoo, rare Devil Response line" );
}
else
{
sound = "plr_" + index + "_vox_powerup_nuke_" + rand;
}
break;
case "insta_kill":
if( vox_rand <= percentage )
{
//sound = "plr_" + index + "_vox_resp_dev_rare_" + rand;
//iprintlnbold( "Whoopdedoo, rare Devil Response line" );
}
else
{
sound = "plr_" + index + "_vox_powerup_insta_" + rand;
}
break;
case "full_ammo":
if( vox_rand <= percentage )
{
//sound = "plr_" + index + "_vox_resp_dev_rare_" + rand;
//iprintlnbold( "Whoopdedoo, rare Devil Response line" );
}
else
{
sound = "plr_" + index + "_vox_powerup_ammo_" + rand;
}
break;
case "double_points":
if( vox_rand <= percentage )
{
//sound = "plr_" + index + "_vox_resp_dev_rare_" + rand;
//iprintlnbold( "Whoopdedoo, rare Devil Response line" );
}
else
{
sound = "plr_" + index + "_vox_powerup_double_" + rand;
}
break;
case "carpenter":
if( vox_rand <= percentage )
{
//sound = "plr_" + index + "_vox_resp_dev_rare_" + rand;
//iprintlnbold( "Whoopdedoo, rare Devil Response line" );
}
else
{
sound = "plr_" + index + "_vox_powerup_carp_" + rand;
}
break;
}
//This keeps multiple voice overs from playing on the same player (both killstreaks and headshots).
if (level.player_is_speaking != 1 && isDefined(sound))
{
level.player_is_speaking = 1;
self playsound(sound, "sound_done");
self waittill("sound_done");
level.player_is_speaking = 0;
}
}
powerup_wobble()
{
self endon ("powerup_grabbed");
self endon ("powerup_timedout");
if (isdefined(self))
{
playfxontag (level._effect["powerup_on"], self, "tag_origin");
}
while (isdefined(self))
{
waittime = randomfloatrange(2.5, 5);
yaw = RandomInt( 360 );
if( yaw > 300 )
{
yaw = 300;
}
else if( yaw < 60 )
{
yaw = 60;
}
yaw = self.angles[1] + yaw;
self rotateto ((-60 + randomint(120), yaw, -45 + randomint(90)), waittime, waittime * 0.5, waittime * 0.5);
wait randomfloat (waittime - 0.1);
}
}
powerup_timeout()
{
self endon ("powerup_grabbed");
wait 15;
for (i = 0; i < 40; i++)
{
// hide and show
if (i % 2)
{
self hide();
}
else
{
self show();
}
if (i < 15)
{
wait 0.5;
}
else if (i < 25)
{
wait 0.25;
}
else
{
wait 0.1;
}
}
self notify ("powerup_timedout");
self delete();
}
// kill them all!
nuke_powerup( drop_item )
{
zombies = getaispeciesarray("axis");
PlayFx( drop_item.fx, drop_item.origin );
// players = get_players();
// array_thread (players, ::nuke_flash);
level thread nuke_flash();
zombies = get_array_of_closest( drop_item.origin, zombies );
for (i = 0; i < zombies.size; i++)
{
wait (randomfloatrange(0.1, 0.7));
if( !IsDefined( zombies[i] ) )
{
continue;
}
if( zombies[i].animname == "boss_zombie" )
{
continue;
}
if( is_magic_bullet_shield_enabled( zombies[i] ) )
{
continue;
}
if( i < 5 && !( zombies[i] enemy_is_dog() ) )
{
zombies[i] thread animscripts\death::flame_death_fx();
}
if( !( zombies[i] enemy_is_dog() ) )
{
zombies[i] maps\_zombiemode_spawner::zombie_head_gib();
}
zombies[i] dodamage( zombies[i].health + 666, zombies[i].origin );
playsoundatposition( "nuked", zombies[i].origin );
}
players = get_players();
for(i = 0; i < players.size; i++)
{
players[i].score += 400;
players[i].score_total += 400;
players[i] maps\_zombiemode_score::set_player_score_hud();
}
}
teddy_powerup( drop_item )
{
PlayFx( drop_item.fx, drop_item.origin );
players = get_players();
for (i = 0; i < players.size; i++)
self iPrintLnBold("^2You move twice as fast, have fun");
self setmovespeedscale(2.0);
// use this method if your map is time based
wait(60); // how long you want this powerup to last
// use this method if you map is round based
// level waittill("between_round_over"); use this method if you map is round based
self iPrintLnBold("^1You have returned to normal speed");
self setmovespeedscale(1.0);
}
nuke_flash()
{
players = getplayers();
for(i=0; i<players.size; i ++)
{
players[i] play_sound_2d("nuke_flash");
}
level thread devil_dialog_delay();
fadetowhite = newhudelem();
fadetowhite.x = 0;
fadetowhite.y = 0;
fadetowhite.alpha = 0;
fadetowhite.horzAlign = "fullscreen";
fadetowhite.vertAlign = "fullscreen";
fadetowhite.foreground = true;
fadetowhite SetShader( "white", 640, 480 );
// Fade into white
fadetowhite FadeOverTime( 0.2 );
fadetowhite.alpha = 0.8;
wait 0.5;
fadetowhite FadeOverTime( 1.0 );
fadetowhite.alpha = 0;
wait 1.1;
fadetowhite destroy();
}
// double the points
double_points_powerup( drop_item )
{
level notify ("powerup points scaled");
level endon ("powerup points scaled");
// players = get_players();
// array_thread(level,::point_doubler_on_hud, drop_item);
level thread point_doubler_on_hud( drop_item );
level.zombie_vars["zombie_point_scalar"] = 2;
wait 30;
level.zombie_vars["zombie_point_scalar"] = 1;
}
full_ammo_powerup( drop_item )
{
players = get_players();
for (i = 0; i < players.size; i++)
{
primaryWeapons = players[i] GetWeaponsList();
for( x = 0; x < primaryWeapons.size; x++ )
{
players[i] GiveMaxAmmo( primaryWeapons[x] );
}
}
// array_thread (players, ::full_ammo_on_hud, drop_item);
level thread full_ammo_on_hud( drop_item );
}
insta_kill_powerup( drop_item )
{
level notify( "powerup instakill" );
level endon( "powerup instakill" );
// array_thread (players, ::insta_kill_on_hud, drop_item);
level thread insta_kill_on_hud( drop_item );
level.zombie_vars["zombie_insta_kill"] = 1;
wait( 30 );
level.zombie_vars["zombie_insta_kill"] = 0;
players = get_players();
for(i = 0; i < players.size; i++)
{
players[i] notify("insta_kill_over");
}
}
check_for_instakill( player )
{
if( IsDefined( player ) && IsAlive( player ) && level.zombie_vars["zombie_insta_kill"])
{
if( is_magic_bullet_shield_enabled( self ) )
{
return;
}
if( self.animname == "boss_zombie" )
{
return;
}
if(player.use_weapon_type == "MOD_MELEE")
{
player.last_kill_method = "MOD_MELEE";
}
else
{
player.last_kill_method = "MOD_UNKNOWN";
}
if( flag( "dog_round" ) )
{
self DoDamage( self.health + 666, self.origin, player );
player notify("zombie_killed");
}
else
{
self maps\_zombiemode_spawner::zombie_head_gib();
self DoDamage( self.health + 666, self.origin, player );
player notify("zombie_killed");
}
}
}
insta_kill_on_hud( drop_item )
{
self endon ("disconnect");
// check to see if this is on or not
if ( level.zombie_vars["zombie_powerup_insta_kill_on"] )
{
// reset the time and keep going
level.zombie_vars["zombie_powerup_insta_kill_time"] = 30;
return;
}
level.zombie_vars["zombie_powerup_insta_kill_on"] = true;
// set up the hudelem
//hudelem = maps\_hud_util::createFontString( "objective", 2 );
//hudelem maps\_hud_util::setPoint( "TOP", undefined, 0, level.zombie_vars["zombie_timer_offset"] + level.zombie_vars["zombie_timer_offset_interval"]);
//hudelem.sort = 0.5;
//hudelem.alpha = 0;
//hudelem fadeovertime(0.5);
//hudelem.alpha = 1;
//hudelem.label = drop_item.hint;
// set time remaining for insta kill
level thread time_remaning_on_insta_kill_powerup();
// offset in case we get another powerup
//level.zombie_timer_offset -= level.zombie_timer_offset_interval;
}
time_remaning_on_insta_kill_powerup()
{
//self setvalue( level.zombie_vars["zombie_powerup_insta_kill_time"] );
level thread play_devil_dialog("insta_vox");
temp_enta = spawn("script_origin", (0,0,0));
temp_enta playloopsound("insta_kill_loop");
/*
players = get_players();
for (i = 0; i < players.size; i++)
{
players[i] playloopsound ("insta_kill_loop");
}
*/
// time it down!
while ( level.zombie_vars["zombie_powerup_insta_kill_time"] >= 0)
{
wait 0.1;
level.zombie_vars["zombie_powerup_insta_kill_time"] = level.zombie_vars["zombie_powerup_insta_kill_time"] - 0.1;
// self setvalue( level.zombie_vars["zombie_powerup_insta_kill_time"] );
}
players = get_players();
for (i = 0; i < players.size; i++)
{
//players[i] stoploopsound (2);
players[i] playsound("insta_kill");
}
temp_enta stoploopsound(2);
// turn off the timer
level.zombie_vars["zombie_powerup_insta_kill_on"] = false;
// remove the offset to make room for new powerups, reset timer for next time
level.zombie_vars["zombie_powerup_insta_kill_time"] = 30;
//level.zombie_timer_offset += level.zombie_timer_offset_interval;
//self destroy();
temp_enta delete();
}
point_doubler_on_hud( drop_item )
{
self endon ("disconnect");
// check to see if this is on or not
if ( level.zombie_vars["zombie_powerup_point_doubler_on"] )
{
// reset the time and keep going
level.zombie_vars["zombie_powerup_point_doubler_time"] = 30;
return;
}
level.zombie_vars["zombie_powerup_point_doubler_on"] = true;
//level.powerup_hud_array[0] = true;
// set up the hudelem
//hudelem = maps\_hud_util::createFontString( "objective", 2 );
//hudelem maps\_hud_util::setPoint( "TOP", undefined, 0, level.zombie_vars["zombie_timer_offset"] );
//hudelem.sort = 0.5;
//hudelem.alpha = 0;
//hudelem fadeovertime( 0.5 );
//hudelem.alpha = 1;
//hudelem.label = drop_item.hint;
// set time remaining for point doubler
level thread time_remaining_on_point_doubler_powerup();
// offset in case we get another powerup
//level.zombie_timer_offset -= level.zombie_timer_offset_interval;
}
play_devil_dialog(sound_to_play)
{
if(!IsDefined(level.devil_is_speaking))
{
level.devil_is_speaking = 0;
}
if(level.devil_is_speaking == 0)
{
level.devil_is_speaking = 1;
play_sound_2D( sound_to_play );
wait 2.0;
level.devil_is_speaking =0;
}
}
time_remaining_on_point_doubler_powerup()
{
//self setvalue( level.zombie_vars["zombie_powerup_point_doubler_time"] );
temp_ent = spawn("script_origin", (0,0,0));
temp_ent playloopsound ("double_point_loop");
level thread play_devil_dialog("dp_vox");
// time it down!
while ( level.zombie_vars["zombie_powerup_point_doubler_time"] >= 0)
{
wait 0.1;
level.zombie_vars["zombie_powerup_point_doubler_time"] = level.zombie_vars["zombie_powerup_point_doubler_time"] - 0.1;
//self setvalue( level.zombie_vars["zombie_powerup_point_doubler_time"] );
}
// turn off the timer
level.zombie_vars["zombie_powerup_point_doubler_on"] = false;
players = get_players();
for (i = 0; i < players.size; i++)
{
//players[i] stoploopsound("double_point_loop", 2);
players[i] playsound("points_loop_off");
}
temp_ent stoploopsound(2);
// remove the offset to make room for new powerups, reset timer for next time
level.zombie_vars["zombie_powerup_point_doubler_time"] = 30;
//level.zombie_timer_offset += level.zombie_timer_offset_interval;
//self destroy();
temp_ent delete();
}
devil_dialog_delay()
{
wait(1.8);
level thread play_devil_dialog("nuke_vox");
}
full_ammo_on_hud( drop_item )
{
self endon ("disconnect");
// set up the hudelem
hudelem = maps\_hud_util::createFontString( "objective", 2 );
hudelem maps\_hud_util::setPoint( "TOP", undefined, 0, level.zombie_vars["zombie_timer_offset"] - (level.zombie_vars["zombie_timer_offset_interval"] * 2));
hudelem.sort = 0.5;
hudelem.alpha = 0;
hudelem fadeovertime(0.5);
hudelem.alpha = 1;
hudelem.label = drop_item.hint;
// set time remaining for insta kill
hudelem thread full_ammo_move_hud();
// offset in case we get another powerup
//level.zombie_timer_offset -= level.zombie_timer_offset_interval;
}
full_ammo_move_hud()
{
players = get_players();
level thread play_devil_dialog("ma_vox");
for (i = 0; i < players.size; i++)
{
players[i] playsound ("full_ammo");
}
wait 0.5;
move_fade_time = 1.5;
self FadeOverTime( move_fade_time );
self MoveOverTime( move_fade_time );
self.y = 270;
self.alpha = 0;
wait move_fade_time;
self destroy();
}
//
// DEBUG
//
print_powerup_drop( powerup, type )
{
/#
if( !IsDefined( level.powerup_drop_time ) )
{
level.powerup_drop_time = 0;
level.powerup_random_count = 0;
level.powerup_score_count = 0;
}
time = ( GetTime() - level.powerup_drop_time ) * 0.001;
level.powerup_drop_time = GetTime();
if( type == "random" )
{
level.powerup_random_count++;
}
else
{
level.powerup_score_count++;
}
println( "========== POWER UP DROPPED ==========" );
println( "DROPPED: " + powerup );
println( "HOW IT DROPPED: " + type );
println( "--------------------" );
println( "Drop Time: " + time );
println( "Random Powerup Count: " + level.powerup_random_count );
println( "Random Powerup Count: " + level.powerup_score_count );
println( "======================================" );
#/
}
the powerup name its teddy