mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-10 10:27:55 -05:00
923 lines
25 KiB
Plaintext
923 lines
25 KiB
Plaintext
#include clientscripts\_music;
|
||
#include clientscripts\_utility;
|
||
main()
|
||
{
|
||
level.zombiemode = true;
|
||
level.swimmingFeature = false;
|
||
clientscripts\_load::main();
|
||
clientscripts\_footsteps::SetAIFootstepPrepend( "fly_step_zombie_");
|
||
thread clientscripts\_audio::audio_init(0);
|
||
level._zombieCBFunc = clientscripts\_zombietron::on_zombie_spawn;
|
||
level._playerCBFunc = clientscripts\_zombietron::on_player_spawn;
|
||
init_client_flags();
|
||
init_client_flag_callbacks();
|
||
OnPlayerConnect_Callback( ::on_player_connect );
|
||
level._customVehicleCBFunc = ::vehicle_spawned_callback;
|
||
level.bomb_model = "zombie_bomb";
|
||
level.head_model = "char_ger_ansel_head";
|
||
level._ZOMBIE_GIB_PIECE_INDEX_ALL = 0;
|
||
level._ZOMBIE_GIB_PIECE_INDEX_RIGHT_ARM = 1;
|
||
level._ZOMBIE_GIB_PIECE_INDEX_LEFT_ARM = 2;
|
||
level._ZOMBIE_GIB_PIECE_INDEX_RIGHT_LEG = 3;
|
||
level._ZOMBIE_GIB_PIECE_INDEX_LEFT_LEG = 4;
|
||
level._ZOMBIE_GIB_PIECE_INDEX_HEAD = 5;
|
||
level._ZOMBIE_GIB_PIECE_INDEX_GUTS = 6;
|
||
level._gib_overload_func = ::gib_handler;
|
||
level._gibEventCBFunc = ::on_gib_event;
|
||
}
|
||
vehicle_spawned_callback( localClientNum )
|
||
{
|
||
if( self.vehicletype == "tank_t55_mini" )
|
||
{
|
||
self thread collisionHandler( localClientNum );
|
||
self thread jump_landing_thread( localClientNum );
|
||
}
|
||
}
|
||
collisionHandler( localClientNum )
|
||
{
|
||
self endon( "entityshutdown" );
|
||
while( 1 )
|
||
{
|
||
self waittill( "veh_collision", hip, hitn, hit_intensity );
|
||
driver_local_client = self GetLocalClientDriver();
|
||
if( IsDefined( driver_local_client ) )
|
||
{
|
||
player = getlocalplayer( driver_local_client );
|
||
if( IsDefined( player ) )
|
||
{
|
||
if( hit_intensity > 15 )
|
||
{
|
||
player PlayRumbleOnEntity( driver_local_client, "damage_heavy" );
|
||
}
|
||
else
|
||
{
|
||
player PlayRumbleOnEntity( driver_local_client, "damage_light" );
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
jump_landing_thread( localClientNum )
|
||
{
|
||
self endon( "entityshutdown" );
|
||
while( 1 )
|
||
{
|
||
self waittill( "veh_landed" );
|
||
driver_local_client = self GetLocalClientDriver();
|
||
if( IsDefined( driver_local_client ) )
|
||
{
|
||
player = getlocalplayer( driver_local_client );
|
||
if( IsDefined( player ) )
|
||
{
|
||
player PlayRumbleOnEntity( driver_local_client, "damage_heavy" );
|
||
}
|
||
}
|
||
}
|
||
}
|
||
lightning_flash( intensity_low, intensity_high, lightningdir )
|
||
{
|
||
lightningintensity = RandomFloatRange( intensity_low, intensity_high );
|
||
lightningexposure = 2;
|
||
SetSavedDvar( "r_lightTweakSunLight", lightningintensity );
|
||
SetSavedDvar( "r_lightTweakSunDirection", lightningdir );
|
||
SetDvar( "r_exposureValue", lightningexposure );
|
||
}
|
||
lighting_flash_cycle( intensity_low, intensity_high, min_flash_time, max_flash_time, flash_wait_time_min, flash_wait_time_max )
|
||
{
|
||
flash_time = RandomFloatRange(min_flash_time, max_flash_time);
|
||
oldlight = GetDvarFloat( "r_lightTweakSunLight" );
|
||
oldsundir = GetDvarVector( "r_lightTweakSunDirection" );
|
||
oldexposure = GetDvarFloat( "r_exposureValue" );
|
||
lightningdir = ( RandomFloatRange(-60, -20), RandomFloatRange(0, 360) , 0 );
|
||
while( flash_time > 0.0 )
|
||
{
|
||
lightning_flash(intensity_low, intensity_high, lightningdir);
|
||
PlaySound( 0, "amb_thunder_clap", (0,0,0) );
|
||
flash_wait_time = RandomFloatRange(flash_wait_time_min, flash_wait_time_max);
|
||
wait( flash_wait_time );
|
||
SetSavedDvar( "r_lightTweakSunLight", oldlight );
|
||
SetSavedDvar( "r_lightTweakSunDirection", oldsundir );
|
||
SetDvar( "r_exposureValue", oldexposure );
|
||
flash_time = flash_time - flash_wait_time;
|
||
}
|
||
}
|
||
lightning(localClientNum, set, newEnt)
|
||
{
|
||
if(localClientNum != 0)
|
||
{
|
||
return;
|
||
}
|
||
if( set )
|
||
{
|
||
intensity_low = 10;
|
||
intensity_high = 30;
|
||
min_flash_time = 0.3;
|
||
max_flash_time = 0.7;
|
||
flash_wait_time_min = 0.05;
|
||
flash_wait_time_max = 0.1;
|
||
level thread lighting_flash_cycle( intensity_low,
|
||
intensity_high,
|
||
min_flash_time,
|
||
max_flash_time,
|
||
flash_wait_time_min,
|
||
flash_wait_time_max );
|
||
}
|
||
}
|
||
show_scores(localClientNum, set, newEnt)
|
||
{
|
||
if( localClientNum != 0 )
|
||
{
|
||
return;
|
||
}
|
||
if (isPC())
|
||
{
|
||
return;
|
||
}
|
||
if( set )
|
||
{
|
||
ShowScores(localClientNum);
|
||
}
|
||
else
|
||
{
|
||
HideScores(localClientNum);
|
||
}
|
||
}
|
||
zombie_helicopter_kill(localClientNum, set, newEnt)
|
||
{
|
||
if(localClientNum != 0)
|
||
{
|
||
return;
|
||
}
|
||
if(set)
|
||
{
|
||
temp = (0,0,270);
|
||
if(IsDefined(level._heli_pilot_ent))
|
||
{
|
||
temp = self.origin - level._heli_pilot_ent.origin;
|
||
}
|
||
temp = VectorNormalize( temp );
|
||
launch_dir = VectorCross( temp, (0,0,1) );
|
||
launch_dir = VectorNormalize( launch_dir );
|
||
launch_dir *= 100;
|
||
self LaunchRagdoll( launch_dir );
|
||
PlaySound( 0, "zmb_ragdoll_launched", self.origin );
|
||
origin = self GetTagOrigin( "j_head" );
|
||
angles = self GetTagAngles( "j_head" );
|
||
forcex = RandomFloatRange( -200, 200 );
|
||
forcey = RandomFloatRange( -200, 200 );
|
||
forcez = RandomFloatRange( 1300, 3100 );
|
||
camera_angles = GetDvarVector( "player_TopDownCamAngles" );
|
||
launchDir = AnglesToForward( camera_angles );
|
||
launchDir = launchDir * forcez * -1;
|
||
launchDir += ( forcex, forcey, 0 );
|
||
contactPoint = origin + ( RandomFloatRange( -1, 1 ), RandomFloatRange( -1, 1 ), RandomFloatRange( -1, 1 ) ) * 5;
|
||
CreateDynEntAndLaunch( 0, level.head_model, origin, angles, contactPoint, launchDir, level._effect["animscript_gibtrail_fx"] );
|
||
}
|
||
}
|
||
heli_pilot(localClientNum, set, newEnt)
|
||
{
|
||
if(localClientNum != 0)
|
||
{
|
||
return;
|
||
}
|
||
if(set)
|
||
{
|
||
level._heli_pilot_ent = self;
|
||
}
|
||
else
|
||
{
|
||
level._heli_pilot_ent = undefined;
|
||
}
|
||
}
|
||
init_client_flag_callbacks()
|
||
{
|
||
register_clientflag_callback("actor", level._ZT_ACTOR_CF_GIB_DEATH_P1, ::gib_death_1);
|
||
register_clientflag_callback("actor", level._ZT_ACTOR_CF_GIB_DEATH_P2, ::gib_death_2);
|
||
register_clientflag_callback("actor", level._ZT_ACTOR_CF_GIB_DEATH_P3, ::gib_death_3);
|
||
register_clientflag_callback("actor", level._ZT_ACTOR_CF_GIB_DEATH_P4, ::gib_death_4);
|
||
register_clientflag_callback("actor", level._ZT_ACTOR_CF_BLOOD, ::zombie_blood);
|
||
register_clientflag_callback("actor", level._ZT_ACTOR_CF_LAUNCH_AND_BURN, ::zombie_launch_and_burn);
|
||
register_clientflag_callback("actor", level._ZT_ACTOR_CF_KILLED_BY_HELI, ::zombie_helicopter_kill);
|
||
register_clientflag_callback("scriptmover", level._ZT_SCRIPTMOVER_CF_SACRED_COW, ::sacred_cow);
|
||
register_clientflag_callback("scriptmover", level._ZT_SCRIPTMOVER_CF_POWERUP, ::powerup);
|
||
register_clientflag_callback("scriptmover", level._ZT_SCRIPTMOVER_CF_ELEC_TRAP, ::electrap_handler);
|
||
register_clientflag_callback("player", level._ZT_PLAYER_CF_UPDATEPROFILE, ::update_player_profile);
|
||
register_clientflag_callback("player", level._ZT_PLAYER_CF_HELI_PILOT, ::heli_pilot);
|
||
register_clientflag_callback("player", level._ZT_PLAYER_CF_START_SMART_BOMB, ::smartbomb_handler);
|
||
register_clientflag_callback("player", level._ZT_PLAYER_CF_LIGHTNING, ::lightning);
|
||
register_clientflag_callback("player", level._ZT_PLAYER_CF_SHOW_SCORES, ::show_scores);
|
||
}
|
||
update_player_profile(localClientNum, set, newEnt)
|
||
{
|
||
PrintLn("*** Update player profile. ***");
|
||
UpdateGamerProfile(localClientNum);
|
||
}
|
||
randomize_array( array )
|
||
{
|
||
for( i = 0; i < array.size; i++ )
|
||
{
|
||
j = RandomInt( array.size );
|
||
temp = array[i];
|
||
array[i] = array[j];
|
||
array[j] = temp;
|
||
}
|
||
return array;
|
||
}
|
||
flame_death_fx()
|
||
{
|
||
self endon( "entityshutdown" );
|
||
if (IsDefined(self.is_on_fire) && self.is_on_fire )
|
||
{
|
||
return;
|
||
}
|
||
self.is_on_fire = true;
|
||
if( IsDefined( level._effect ) && IsDefined( level._effect["character_fire_death_torso"] ) )
|
||
{
|
||
PlayFxOnTag(0, level._effect["character_fire_death_torso"], self, "J_SpineLower" );
|
||
}
|
||
if( IsDefined( level._effect ) && IsDefined( level._effect["character_fire_death_sm"] ) )
|
||
{
|
||
wait 1;
|
||
tagArray = [];
|
||
tagArray[0] = "J_Elbow_LE";
|
||
tagArray[1] = "J_Elbow_RI";
|
||
tagArray[2] = "J_Knee_RI";
|
||
tagArray[3] = "J_Knee_LE";
|
||
tagArray = randomize_array( tagArray );
|
||
PlayFxOnTag( 0, level._effect["character_fire_death_sm"], self, tagArray[0] );
|
||
wait 1;
|
||
tagArray[0] = "J_Wrist_RI";
|
||
tagArray[1] = "J_Wrist_LE";
|
||
tagArray[2] = "J_Ankle_RI";
|
||
tagArray[3] = "J_Ankle_LE";
|
||
tagArray = randomize_array( tagArray );
|
||
PlayFxOnTag( 0, level._effect["character_fire_death_sm"], self, tagArray[0] );
|
||
PlayFxOnTag( 0, level._effect["character_fire_death_sm"], self, tagArray[1] );
|
||
}
|
||
}
|
||
zombie_launch_and_burn(localClientNum, set, newEnt)
|
||
{
|
||
if(localClientNum != 0)
|
||
{
|
||
return;
|
||
}
|
||
if(!set)
|
||
{
|
||
return;
|
||
}
|
||
if(!IsDefined(level._nukepoint))
|
||
{
|
||
return;
|
||
}
|
||
dist_squared = DistanceSquared( self.origin, level._nukepoint );
|
||
if( dist_squared < 130 * 130 )
|
||
{
|
||
self LaunchRagdoll( (0,0,270) );
|
||
}
|
||
else if( dist_squared < 360 * 360 )
|
||
{
|
||
dir = VectorNormalize( self.origin - level._nukepoint );
|
||
dir = dir * 100;
|
||
dir = dir + (0,0,120);
|
||
self LaunchRagdoll( dir );
|
||
}
|
||
self thread flame_death_fx();
|
||
}
|
||
smartbomb_handler(localClientNum, set, newEnt)
|
||
{
|
||
if(localClientNum != 0)
|
||
{
|
||
return;
|
||
}
|
||
if(!set)
|
||
{
|
||
return;
|
||
}
|
||
if (IsDefined( self.tank ))
|
||
{
|
||
level._nukepoint = self.tank.origin;
|
||
}
|
||
else
|
||
{
|
||
level._nukepoint = self.origin;
|
||
}
|
||
origin = self.origin + (20,0,800);
|
||
bomb = Spawn( 0, origin, "script_model" );
|
||
bomb SetModel( level.bomb_model );
|
||
bomb.angles = (90, 0, 0);
|
||
bomb MoveTo( self.origin, 0.3, 0, 0 );
|
||
PlaySound( 0, "zmb_nuke_incoming", self.origin );
|
||
bomb waittill("movedone");
|
||
PlaySound( 0, "zmb_nuke_impact", self.origin );
|
||
PlayFX( 0, level._effect["bomb"], self.origin );
|
||
bomb Delete();
|
||
players = getlocalplayers();
|
||
for(i = 0; i < players.size; i ++)
|
||
{
|
||
players[i] EarthQuake( 1.0, 0.8, self.origin, 1000 );
|
||
}
|
||
}
|
||
trap_tear_down_monitor(parent)
|
||
{
|
||
self endon("done");
|
||
parent waittill("entityshutdown");
|
||
self notify("torn_down");
|
||
self Delete();
|
||
}
|
||
fx_tear_down_monitor()
|
||
{
|
||
self waittill("entityshutdown");
|
||
if(IsDefined(self.fx))
|
||
{
|
||
self.fx Delete();
|
||
self.fx = undefined;
|
||
}
|
||
if(IsDefined(self.fx2))
|
||
{
|
||
self.fx2 Delete();
|
||
self.fx2 = undefined;
|
||
}
|
||
}
|
||
electrap_loop_sound(parent)
|
||
{
|
||
self endon("torn_down");
|
||
self PlayLoopSound( "zmb_hazard_loop", .5 );
|
||
self waittill("deactivate");
|
||
self notify("done");
|
||
self stoploopsound(0.5);
|
||
if(IsDefined(self.fx))
|
||
{
|
||
self.fx Delete();
|
||
self.fx = undefined;
|
||
}
|
||
if(IsDefined(self.fx2))
|
||
{
|
||
self.fx2 Delete();
|
||
self.fx2 = undefined;
|
||
}
|
||
self Delete();
|
||
}
|
||
get_camera_launch_direction()
|
||
{
|
||
pos = GetDvarVector( "player_topDownCamCenterPos" ) + GetDvarVector( "player_topDownCamOffset" );
|
||
return VectorNormalize( pos - self.origin );
|
||
}
|
||
gib_handler(type, locations)
|
||
{
|
||
if(type == "up")
|
||
{
|
||
up = get_camera_launch_direction();
|
||
self._gib_vel = up * RandomIntRange( 1400, 3500 );
|
||
}
|
||
return false;
|
||
}
|
||
electrap_handler(localClientNum, set, newEnt)
|
||
{
|
||
if(localClientNum != 0)
|
||
{
|
||
return;
|
||
}
|
||
self endon("entityshutdown");
|
||
if ( !isDefined(self.first_tickle) )
|
||
{
|
||
self.first_tickle = 1;
|
||
self thread fx_tear_down_monitor();
|
||
return;
|
||
}
|
||
if(set)
|
||
{
|
||
if ( isDefined(self.fx2) )
|
||
{
|
||
self.fx2 Delete();
|
||
self.fx2 = SpawnFx( 0, level._effect["trap_red"], self.origin, 0,(1,0,0),(0,0,1) );
|
||
if ( isDefined(self.fx2) )
|
||
{
|
||
triggerFx( self.fx2 );
|
||
}
|
||
}
|
||
wait 1;
|
||
self.fx = SpawnFx( 0, level._effect["electric_trap"], self.origin + (0,0,100), 0 );
|
||
if ( isDefined(self.fx) )
|
||
{
|
||
triggerFx( self.fx );
|
||
self.soundent = spawn(0, self.origin, "script_origin");
|
||
self.soundent thread electrap_loop_sound(self);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if ( isDefined(self.fx) )
|
||
{
|
||
self.fx Delete();
|
||
self.soundent notify("deactivate");
|
||
}
|
||
if ( isDefined(self.fx2) )
|
||
{
|
||
self.fx2 Delete();
|
||
}
|
||
self.fx2 = SpawnFx( 0, level._effect["trap_green"], self.origin, 0,(1,0,0),(0,0,1) );
|
||
if ( isDefined(self.fx2) )
|
||
{
|
||
triggerFx( self.fx2 );
|
||
}
|
||
}
|
||
}
|
||
get_pickup_type_from_model(model)
|
||
{
|
||
ret = "NA";
|
||
switch(model)
|
||
{
|
||
case "zombietron_gold_brick":
|
||
case "zombietron_gold_bricks":
|
||
case "zombietron_gold_coin":
|
||
case "zombietron_silver_brick":
|
||
case "zombietron_silver_bricks":
|
||
case "zombietron_silver_coin":
|
||
case "zombie_z_money_icon":
|
||
case "zombietron_ruby":
|
||
case "zombietron_sapphire":
|
||
case "zombietron_diamond":
|
||
ret = "money";
|
||
break;
|
||
case "c_usa_blackops_body1_fb":
|
||
ret = "extra_life";
|
||
break;
|
||
case "t5_veh_tank_t55_mini_static":
|
||
ret = "tank";
|
||
break;
|
||
case "t5_veh_helo_hind_mini":
|
||
ret = "heli";
|
||
break;
|
||
case "p_glo_barrel_metal_blue":
|
||
ret = "spinning_blockers";
|
||
break;
|
||
case "zombietron_electric_ball":
|
||
ret = "tesla_blockers";
|
||
break;
|
||
case "zombie_teddybear":
|
||
ret = "stun_blockers";
|
||
break;
|
||
case "anim_chicken":
|
||
ret = "double_shot";
|
||
break;
|
||
case "zombie_bomb":
|
||
ret = "bomb";
|
||
break;
|
||
case "zombietron_lightning_bolt":
|
||
ret = "booster";
|
||
break;
|
||
case "p_rus_boots":
|
||
ret = "speed";
|
||
break;
|
||
case "m2_flamethrower_zt":
|
||
case "ray_gun_zt":
|
||
case "weapon_usa_ray_gun":
|
||
case "weapon_usa_flamethrower":
|
||
case "m60_zt":
|
||
case "minigun_zt":
|
||
case "t5_weapon_carry_minigun_world":
|
||
case "spas_zt":
|
||
case "t5_weapon_spas_world":
|
||
case "china_lake_zt":
|
||
case "t5_weapon_ex41_world":
|
||
case "rpg_zt":
|
||
case "weapon_rpg7":
|
||
ret = "weapon";
|
||
break;
|
||
case "zombie_auto_turret":
|
||
ret = "mini_turret";
|
||
break;
|
||
case "weapon_zombie_monkey_bomb":
|
||
case "weapon_zombie_monkey_bomb_zt":
|
||
ret = "monkey";
|
||
break;
|
||
}
|
||
return(ret);
|
||
}
|
||
pickup_tear_down_monitor(parent)
|
||
{
|
||
self endon("done");
|
||
parent waittill("entityshutdown");
|
||
self notify("torn_down");
|
||
self stoploopsound(0.5);
|
||
self Delete();
|
||
}
|
||
pickup_loop_sound(parent, sound)
|
||
{
|
||
self endon("torn_down");
|
||
self thread pickup_tear_down_monitor(parent);
|
||
self PlayLoopSound( sound, .5 );
|
||
self waittill("picked_up");
|
||
self notify("done");
|
||
self stoploopsound(0.5);
|
||
self Delete();
|
||
}
|
||
powerup(localClientNum, set, newEnt)
|
||
{
|
||
if(localClientNum != 0)
|
||
{
|
||
return;
|
||
}
|
||
if(set)
|
||
{
|
||
play_sound = true;
|
||
loop_sound = "";
|
||
switch(get_pickup_type_from_model(self.model))
|
||
{
|
||
case "extra_life":
|
||
case "extra_life_directed":
|
||
loop_sound = "zmb_pickup_life_shimmer";
|
||
playfxontag (localClientNum, level._effect["powerup_on"], self, "tag_origin");
|
||
break;
|
||
case "money":
|
||
loop_sound = "zmb_pickup_money_shimmer";
|
||
model = self.model;
|
||
if ( model == "zombietron_ruby" )
|
||
{
|
||
PlayFxOnTag(localClientNum, level._effect["red_gem"], self, "tag_origin" );
|
||
}
|
||
else if ( model == "zombietron_sapphire" )
|
||
{
|
||
PlayFxOnTag(localClientNum, level._effect["blue_gem"], self, "tag_origin" );
|
||
}
|
||
else if ( model == "zombietron_diamond" )
|
||
{
|
||
PlayFxOnTag(localClientNum, level._effect["white_gem"], self, "tag_origin" );
|
||
}
|
||
else if ( issubstr(self.model,"silver" ) )
|
||
{
|
||
playfxontag (localClientNum, level._effect["powerup_on_silver"], self, "tag_origin");
|
||
}
|
||
else
|
||
{
|
||
playfxontag (localClientNum, level._effect["powerup_on"], self, "tag_origin");
|
||
}
|
||
break;
|
||
case "speed":
|
||
case "spinning_blockers":
|
||
case "tesla_blockers":
|
||
case "stun_blockers":
|
||
case "bomb":
|
||
case "booster":
|
||
case "mini_turret":
|
||
case "monkey":
|
||
loop_sound = "zmb_pickup_powerup_shimmer";
|
||
break;
|
||
case "double_shot":
|
||
PlaySound(localClientNum, "zmb_dblshot_spawn", self.origin);
|
||
loop_sound = "zmb_pickup_powerup_shimmer";
|
||
break;
|
||
case "weapon":
|
||
loop_sound = "zmb_pickup_weapon_shimmer";
|
||
break;
|
||
case "tank":
|
||
case "heli":
|
||
loop_sound = "zmb_pickup_vehicle_shimmer";
|
||
break;
|
||
default:
|
||
PrintLn("Spawned " + self.model);
|
||
play_sound = false;
|
||
break;
|
||
}
|
||
if(play_sound)
|
||
{
|
||
PlaySound( localClientNum, "zmb_pickup_spawn", self.origin );
|
||
}
|
||
if(loop_sound != "")
|
||
{
|
||
self.loopsound = spawn(0, self.origin, "script_origin");
|
||
self.loopsound thread pickup_loop_sound(self, loop_sound);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if(IsDefined(self.loopsound))
|
||
{
|
||
self.loopsound notify("picked_up");
|
||
}
|
||
PlayFx( 0, level._effect["powerup_grabbed"], self.origin, AnglesToForward(self.angles) );
|
||
switch(get_pickup_type_from_model(self.model))
|
||
{
|
||
case "extra_life":
|
||
case "extra_life_directed":
|
||
PlaySound( localClientNum, "zmb_pickup_life", self.origin );
|
||
break;
|
||
case "money":
|
||
PlaySound( localClientNum, "zmb_pickup_money", self.origin );
|
||
break;
|
||
case "tank":
|
||
case "heli":
|
||
PlaySound( localClientNum, "zmb_pickup_vehicle", self.origin );
|
||
break;
|
||
case "spinning_blockers":
|
||
case "tesla_blockers":
|
||
case "stun_blockers":
|
||
case "double_shot":
|
||
case "bomb":
|
||
case "booster":
|
||
case "speed":
|
||
PlaySound( localClientNum, "zmb_pickup_powerup", self.origin );
|
||
break;
|
||
case "weapon":
|
||
case "mini_turret":
|
||
case "monkey":
|
||
PlaySound( localClientNum, "zmb_pickup_weapon", self.origin );
|
||
break;
|
||
default:
|
||
PrintLn("Grabbed " + self.model);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
sacred_cow(localClientNum, set, newEnt)
|
||
{
|
||
if(localClientNum != 0)
|
||
{
|
||
return;
|
||
}
|
||
self PlayLoopSound( "zmb_pickup_money_shimmer" );
|
||
playfxontag (localClientNum,level._effect["powerup_on"], self, "J_Ankle_LE");
|
||
playfxontag (localClientNum,level._effect["powerup_on"], self, "J_Ankle_RI");
|
||
playfxontag (localClientNum,level._effect["powerup_on"], self, "J_Wrist_LE");
|
||
playfxontag (localClientNum,level._effect["powerup_on"], self, "J_Wrist_RI");
|
||
playfxontag (localClientNum,level._effect["torch_light"], self, "J_Tail2");
|
||
}
|
||
zombie_blood(localClientNum, set, newEnt)
|
||
{
|
||
if(localClientNum != 0)
|
||
{
|
||
return;
|
||
}
|
||
if(set)
|
||
{
|
||
if(is_mature())
|
||
{
|
||
PlayFX(localClientNum, level._effect["big_blood"], self.origin, AnglesToForward(self.angles) * -1);
|
||
}
|
||
}
|
||
}
|
||
gib_death(localClientNum, set, newEnt, player)
|
||
{
|
||
if(set)
|
||
{
|
||
if(is_mature())
|
||
{
|
||
PlayFX( localClientNum, level._effect["gib_death"], self.origin, AnglesToForward(self.angles) );
|
||
}
|
||
}
|
||
}
|
||
gib_death_1(localClientNum, set, newEnt)
|
||
{
|
||
if(localClientNum != 0)
|
||
{
|
||
return;
|
||
}
|
||
gib_death(localClientNum, set, newEnt, 1);
|
||
}
|
||
gib_death_2(localClientNum, set, newEnt)
|
||
{
|
||
if(localClientNum != 0)
|
||
{
|
||
return;
|
||
}
|
||
gib_death(localClientNum, set, newEnt, 2);
|
||
}
|
||
gib_death_3(localClientNum, set, newEnt)
|
||
{
|
||
if(localClientNum != 0)
|
||
{
|
||
return;
|
||
}
|
||
gib_death(localClientNum, set, newEnt, 3);
|
||
}
|
||
gib_death_4(localClientNum, set, newEnt)
|
||
{
|
||
if(localClientNum != 0)
|
||
{
|
||
return;
|
||
}
|
||
gib_death(localClientNum, set, newEnt, 4);
|
||
}
|
||
init_client_flags()
|
||
{
|
||
level._ZT_ACTOR_CF_GIB_DEATH_P1 = 2;
|
||
level._ZT_ACTOR_CF_GIB_DEATH_P2 = 3;
|
||
level._ZT_ACTOR_CF_GIB_DEATH_P3 = 4;
|
||
level._ZT_ACTOR_CF_GIB_DEATH_P4 = 5;
|
||
level._ZT_ACTOR_CF_BLOOD = 6;
|
||
level._ZT_ACTOR_CF_LAUNCH_AND_BURN = 7;
|
||
level._ZT_ACTOR_CF_KILLED_BY_HELI = 8;
|
||
level._ZT_SCRIPTMOVER_CF_SACRED_COW = 0;
|
||
level._ZT_SCRIPTMOVER_CF_POWERUP = 1;
|
||
level._ZT_SCRIPTMOVER_CF_ELEC_TRAP = 2;
|
||
level._ZT_PLAYER_CF_UPDATEPROFILE = 10;
|
||
level._ZT_PLAYER_CF_HELI_PILOT = 11;
|
||
level._ZT_PLAYER_CF_LIGHTNING = 12;
|
||
level._ZT_PLAYER_CF_SHOW_SCORES = 13;
|
||
level._ZT_PLAYER_CF_START_SMART_BOMB = 14;
|
||
}
|
||
createZombieEyes(localClientNum)
|
||
{
|
||
if(isdefined(self._eyeArray))
|
||
{
|
||
if(!isdefined(self._eyeArray[localClientNum]))
|
||
{
|
||
linkTag = "J_Eyeball_LE";
|
||
self._eyeArray[localClientNum] = PlayFxOnTag( localClientNum, level._effect["eye_glow"], self, linkTag );
|
||
}
|
||
}
|
||
}
|
||
deleteZombieEyes(localClientNum)
|
||
{
|
||
if(isdefined(self._eyeArray))
|
||
{
|
||
if(isdefined(self._eyeArray[localClientNum]))
|
||
{
|
||
DeleteFx( localClientNum, self._eyeArray[localClientNum] , true );
|
||
self._eyeArray[localClientNum] = undefined;
|
||
}
|
||
}
|
||
}
|
||
on_player_connect(localClientNum)
|
||
{
|
||
ForceGameModeMappings( localClientNum, "zombietron" );
|
||
}
|
||
on_player_spawn(localClientNum)
|
||
{
|
||
ForceGameModeMappings( localClientNum, "zombietron" );
|
||
self mapshaderconstant( localClientNum, 0, "scriptVector0", 1.0, -1.0, 0.0, 0.0 );
|
||
}
|
||
on_zombie_spawn(localClientNum)
|
||
{
|
||
if(!isdefined(self._eyeArray))
|
||
{
|
||
self._eyeArray = [];
|
||
}
|
||
wait( 0.05 );
|
||
if( isDefined(self) && self haseyes())
|
||
{
|
||
self createZombieEyes(localClientNum);
|
||
}
|
||
if ( isDefined(self) )
|
||
self mapshaderconstant( localClientNum, 0, "scriptVector0", -4.0, -1.0, 0.0, -1.0 );
|
||
}
|
||
zombie_eye_callback(localClientNum, hasEyes)
|
||
{
|
||
players = GetLocalPlayers();
|
||
for ( i = 0; i < players.size; i++ )
|
||
{
|
||
if ( hasEyes )
|
||
{
|
||
self createZombieEyes( i );
|
||
}
|
||
else
|
||
{
|
||
self deleteZombieEyes( i );
|
||
}
|
||
}
|
||
}
|
||
mark_piece_gibbed( piece_index )
|
||
{
|
||
if ( !isdefined( self.gibbed_pieces ) )
|
||
{
|
||
self.gibbed_pieces = [];
|
||
}
|
||
self.gibbed_pieces[self.gibbed_pieces.size] = piece_index;
|
||
}
|
||
has_gibbed_piece( piece_index )
|
||
{
|
||
if ( !isdefined( self.gibbed_pieces ) )
|
||
{
|
||
return false;
|
||
}
|
||
for ( i = 0; i < self.gibbed_pieces.size; i++ )
|
||
{
|
||
if ( self.gibbed_pieces[i] == piece_index )
|
||
{
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
do_gib_fx( tag )
|
||
{
|
||
players = getlocalplayers();
|
||
for ( i = 0; i < players.size; i++ )
|
||
{
|
||
PlayFxOnTag( i, level._effect["animscript_gib_fx"], self, tag );
|
||
}
|
||
PlaySound( 0, "zmb_death_gibs", self gettagorigin( tag ) );
|
||
}
|
||
do_gib( model, tag )
|
||
{
|
||
start_pos = self gettagorigin( tag );
|
||
wait( 0.03 );
|
||
end_pos = self gettagorigin( tag );
|
||
if ( IsDefined( self._gib_vel ) )
|
||
{
|
||
forward = self._gib_vel;
|
||
self._gib_vel = undefined;
|
||
}
|
||
else
|
||
{
|
||
forward = VectorNormalize( end_pos - start_pos );
|
||
forward *= RandomIntRange( 600, 1000 );
|
||
forward += (0, 0, RandomIntRange( 400, 700 ));
|
||
}
|
||
CreateDynEntAndLaunch( 0, model, end_pos, self gettagangles(tag), start_pos, forward, level._effect["animscript_gibtrail_fx"], 1 );
|
||
self do_gib_fx( tag );
|
||
}
|
||
on_gib_event( localClientNum, type, locations )
|
||
{
|
||
if ( localClientNum != 0 )
|
||
{
|
||
return;
|
||
}
|
||
if( !is_mature() )
|
||
{
|
||
return;
|
||
}
|
||
if ( self._gib_def == -1 )
|
||
{
|
||
return;
|
||
}
|
||
if ( IsDefined( level._gib_overload_func ) )
|
||
{
|
||
PrintLn( "type " + type );
|
||
PrintLn( "loc size " + locations.size );
|
||
if ( self [[level._gib_overload_func]]( type, locations ) )
|
||
{
|
||
return;
|
||
}
|
||
}
|
||
for ( i = 0; i < locations.size; i++ )
|
||
{
|
||
if ( IsDefined( self.gibbed ) && level._ZOMBIE_GIB_PIECE_INDEX_HEAD != locations[i] )
|
||
{
|
||
continue;
|
||
}
|
||
switch( locations[i] )
|
||
{
|
||
case 0:
|
||
if ( IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawn1 ) && IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawnTag1 ) )
|
||
{
|
||
self thread do_gib( level._gibbing_actor_models[self._gib_def].gibSpawn1, level._gibbing_actor_models[self._gib_def].gibSpawnTag1 );
|
||
}
|
||
if ( IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawn2 ) && IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawnTag2 ) )
|
||
{
|
||
self thread do_gib( level._gibbing_actor_models[self._gib_def].gibSpawn2, level._gibbing_actor_models[self._gib_def].gibSpawnTag2 );
|
||
}
|
||
if ( IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawn3 ) && IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawnTag3 ) )
|
||
{
|
||
self thread do_gib( level._gibbing_actor_models[self._gib_def].gibSpawn3, level._gibbing_actor_models[self._gib_def].gibSpawnTag3 );
|
||
}
|
||
if ( IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawn4 ) && IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawnTag4 ) )
|
||
{
|
||
self thread do_gib( level._gibbing_actor_models[self._gib_def].gibSpawn4, level._gibbing_actor_models[self._gib_def].gibSpawnTag4 );
|
||
}
|
||
self thread do_gib_fx( "J_SpineLower" );
|
||
mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_RIGHT_ARM );
|
||
mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_LEFT_ARM );
|
||
mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_RIGHT_LEG );
|
||
mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_LEFT_LEG );
|
||
mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_HEAD );
|
||
break;
|
||
case 1:
|
||
if ( IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawn1 ) && IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawnTag1 ) )
|
||
{
|
||
self thread do_gib( level._gibbing_actor_models[self._gib_def].gibSpawn1, level._gibbing_actor_models[self._gib_def].gibSpawnTag1 );
|
||
}
|
||
mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_RIGHT_ARM );
|
||
break;
|
||
case 2:
|
||
if ( IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawn2 ) && IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawnTag2 ) )
|
||
{
|
||
self thread do_gib( level._gibbing_actor_models[self._gib_def].gibSpawn2, level._gibbing_actor_models[self._gib_def].gibSpawnTag2 );
|
||
}
|
||
mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_LEFT_ARM );
|
||
break;
|
||
case 3:
|
||
if ( IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawn3 ) && IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawnTag3 ) )
|
||
{
|
||
self thread do_gib( level._gibbing_actor_models[self._gib_def].gibSpawn3, level._gibbing_actor_models[self._gib_def].gibSpawnTag3 );
|
||
}
|
||
mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_RIGHT_LEG );
|
||
break;
|
||
case 4:
|
||
if ( IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawn4 ) && IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawnTag4 ) )
|
||
{
|
||
self thread do_gib( level._gibbing_actor_models[self._gib_def].gibSpawn4, level._gibbing_actor_models[self._gib_def].gibSpawnTag4 );
|
||
}
|
||
mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_LEFT_LEG );
|
||
break;
|
||
case 5:
|
||
mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_HEAD );
|
||
break;
|
||
case 6:
|
||
self thread do_gib_fx( "J_SpineLower" );
|
||
break;
|
||
}
|
||
}
|
||
self.gibbed = true;
|
||
}
|
||
|
||
|