129 lines
7.4 KiB
Plaintext
129 lines
7.4 KiB
Plaintext
#using scripts\shared\clientfield_shared;
|
|
#using scripts\shared\ai\systems\gib;
|
|
#using scripts\shared\ai_shared;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#precache( "client_fx", "zombie/fx_val_chest_burst");
|
|
|
|
#precache( "client_fx", "fire/fx_fire_ai_human_arm_left_loop_optim");
|
|
#precache( "client_fx", "fire/fx_fire_ai_human_arm_right_loop_optim");
|
|
#precache( "client_fx", "fire/fx_fire_ai_human_arm_left_loop_optim");
|
|
#precache( "client_fx", "fire/fx_fire_ai_human_arm_right_loop_optim");
|
|
#precache( "client_fx", "fire/fx_fire_ai_human_torso_loop_optim");
|
|
#precache( "client_fx", "fire/fx_fire_ai_human_hip_left_loop_optim");
|
|
#precache( "client_fx", "fire/fx_fire_ai_human_hip_right_loop_optim");
|
|
#precache( "client_fx", "fire/fx_fire_ai_human_leg_left_loop_optim");
|
|
#precache( "client_fx", "fire/fx_fire_ai_human_leg_right_loop_optim");
|
|
#precache( "client_fx", "fire/fx_fire_ai_human_head_loop_optim");
|
|
|
|
function autoexec precache()
|
|
{
|
|
|
|
}
|
|
|
|
function autoexec main()
|
|
{
|
|
level._effect["zombie_special_day_effect"] = "zombie/fx_val_chest_burst";
|
|
|
|
ai::add_archetype_spawn_function( "zombie", &ZombieClientUtils::zombie_override_burn_fx );
|
|
|
|
clientfield::register(
|
|
"actor",
|
|
"zombie",
|
|
1,
|
|
1,
|
|
"int",
|
|
&ZombieClientUtils::zombieHandler,
|
|
!true,
|
|
!true);
|
|
|
|
clientfield::register(
|
|
"actor",
|
|
"zombie_special_day",
|
|
6001,
|
|
1,
|
|
"counter",
|
|
&ZombieClientUtils::zombieSpecialDayEffectsHandler,
|
|
!true,
|
|
!true);
|
|
}
|
|
|
|
#namespace ZombieClientUtils;
|
|
|
|
function zombieHandler( localClientNum, oldValue, newValue, bNewEnt, bInitialSnap, fieldName, wasDemoJump )
|
|
{
|
|
entity = self;
|
|
|
|
if ( IsDefined( entity.archetype ) && entity.archetype != "zombie" )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if ( !IsDefined( entity.initializedGibCallbacks ) || !entity.initializedGibCallbacks )
|
|
{
|
|
entity.initializedGibCallbacks = true;
|
|
|
|
GibClientUtils::AddGibCallback( localClientNum, entity, 8, &_gibCallback );
|
|
GibClientUtils::AddGibCallback( localClientNum, entity, 16, &_gibCallback );
|
|
GibClientUtils::AddGibCallback( localClientNum, entity, 32, &_gibCallback );
|
|
GibClientUtils::AddGibCallback( localClientNum, entity, 128, &_gibCallback );
|
|
GibClientUtils::AddGibCallback( localClientNum, entity, 256, &_gibCallback );
|
|
}
|
|
}
|
|
|
|
function private _gibCallback( localClientNum, entity, gibFlag )
|
|
{
|
|
switch (gibFlag)
|
|
{
|
|
case 8:
|
|
playsound(0, "zmb_zombie_head_gib", self.origin + (0,0,60));
|
|
break;
|
|
case 16:
|
|
case 32:
|
|
case 128:
|
|
case 256:
|
|
playsound(0, "zmb_death_gibs", self.origin + (0,0,30));
|
|
break;
|
|
}
|
|
}
|
|
|
|
function zombieSpecialDayEffectsHandler( localClientNum, oldValue, newValue, bNewEnt, bInitialSnap, fieldName, wasDemoJump )
|
|
{
|
|
entity = self;
|
|
|
|
if ( IsDefined( entity.archetype ) && entity.archetype != "zombie" )
|
|
{
|
|
return;
|
|
}
|
|
|
|
origin = entity GetTagOrigin( "j_spine4" );
|
|
|
|
fx = PlayFX( localClientNum, level._effect["zombie_special_day_effect"], origin );
|
|
SetFXIgnorePause( localClientNum, fx, true );
|
|
}
|
|
|
|
function zombie_override_burn_fx( localClientNum )
|
|
{
|
|
if( SessionModeIsZombiesGame() )
|
|
{
|
|
if( !isdefined( self._effect ))
|
|
{
|
|
self._effect = [];
|
|
}
|
|
level._effect["fire_zombie_j_elbow_le_loop"] = "fire/fx_fire_ai_human_arm_left_loop_optim"; // hand and forearm fires
|
|
level._effect["fire_zombie_j_elbow_ri_loop"] = "fire/fx_fire_ai_human_arm_right_loop_optim";
|
|
level._effect["fire_zombie_j_shoulder_le_loop"] = "fire/fx_fire_ai_human_arm_left_loop_optim"; // upper arm fires
|
|
level._effect["fire_zombie_j_shoulder_ri_loop"] = "fire/fx_fire_ai_human_arm_right_loop_optim";
|
|
level._effect["fire_zombie_j_spine4_loop"] = "fire/fx_fire_ai_human_torso_loop_optim"; // upper torso fires
|
|
level._effect["fire_zombie_j_hip_le_loop"] = "fire/fx_fire_ai_human_hip_left_loop_optim"; // thigh fires
|
|
level._effect["fire_zombie_j_hip_ri_loop"] = "fire/fx_fire_ai_human_hip_right_loop_optim";
|
|
level._effect["fire_zombie_j_knee_le_loop"] = "fire/fx_fire_ai_human_leg_left_loop_optim"; // shin fires
|
|
level._effect["fire_zombie_j_knee_ri_loop"] = "fire/fx_fire_ai_human_leg_right_loop_optim";
|
|
level._effect["fire_zombie_j_head_loop"] = "fire/fx_fire_ai_human_head_loop_optim"; // head fire
|
|
}
|
|
}
|