143 lines
4.2 KiB
Ucode
143 lines
4.2 KiB
Ucode
// Zombie Soldier for KF Invasion gametype
|
|
// UPDATED : He now fires off a shotgun at ya !
|
|
|
|
class ZombieSoldier extends KFMonster;
|
|
|
|
#exec OBJ LOAD FILE=PlayerSounds.uax
|
|
|
|
function RangedAttack(Actor A)
|
|
{
|
|
//local name Anim;
|
|
//local float frame,rate;
|
|
local int LastFireTime;
|
|
|
|
if ( bShotAnim )
|
|
return;
|
|
|
|
bShotAnim = true;
|
|
LastFireTime = Level.TimeSeconds;
|
|
|
|
if ( Physics == PHYS_Swimming )
|
|
SetAnimAction('Claw');
|
|
else if ( VSize(A.Location - Location) < MeleeRange + CollisionRadius + A.CollisionRadius )
|
|
{
|
|
if ( FRand() < 0.7 )
|
|
{
|
|
SetAnimAction('Claw');
|
|
//PlaySound(sound'Spin1s', SLOT_Interact); KFTODO: Replace this
|
|
Acceleration = AccelRate * Normal(A.Location - Location);
|
|
return;
|
|
}
|
|
SetAnimAction('Claw');
|
|
//PlaySound(sound'Claw2s', SLOT_Interact); KFTODO: Replace this
|
|
Controller.bPreparingMove = true;
|
|
Acceleration = vect(0,0,0);
|
|
}
|
|
else if ( Velocity == vect(0,0,0) )
|
|
{
|
|
SetAnimAction('ZombieFireGun');
|
|
Controller.bPreparingMove = true;
|
|
Acceleration = vect(0,0,0);
|
|
//SpawnTwoShots();
|
|
}
|
|
else if (VSize(A.Location - Location) < 400)
|
|
{
|
|
SetAnimAction('ZombieFireGun');
|
|
Controller.bPreparingMove = true;
|
|
Acceleration = vect(0,0,0);
|
|
}
|
|
|
|
else
|
|
return;
|
|
|
|
}
|
|
|
|
simulated event SetAnimAction(name NewAction)
|
|
{
|
|
if ( !bWaitForAnim || (Level.NetMode == NM_Client) )
|
|
{
|
|
// He's never able to fire the shotgun while moving.
|
|
if(NewAction == 'ZombieFireGun')
|
|
{
|
|
Controller.bPreparingMove = true;
|
|
Acceleration = vect(0,0,0);
|
|
}
|
|
|
|
if(NewAction == 'Claw')
|
|
AnimAction = meleeAnims[Rand(3)];
|
|
else
|
|
AnimAction = NewAction;
|
|
if ( PlayAnim(AnimAction,,0.1) )
|
|
{
|
|
// if (NewAction == 'Claw')
|
|
// ClawDamageTarget();
|
|
if ( Physics != PHYS_None )
|
|
bWaitForAnim = true;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Change these from bright, glowing green balls, to shotgun pellets or somesuch.
|
|
|
|
function SpawnTwoShots()
|
|
{
|
|
local vector X,Y,Z, FireStart;
|
|
local rotator FireRotation;
|
|
|
|
GetAxes(Rotation,X,Y,Z);
|
|
FireStart = GetFireStart(X,Y,Z);
|
|
if ( !SavedFireProperties.bInitialized )
|
|
{
|
|
SavedFireProperties.AmmoClass = MyAmmo.Class;
|
|
SavedFireProperties.ProjectileClass = MyAmmo.ProjectileClass;
|
|
SavedFireProperties.WarnTargetPct = MyAmmo.WarnTargetPct;
|
|
SavedFireProperties.MaxRange = MyAmmo.MaxRange;
|
|
SavedFireProperties.bTossed = MyAmmo.bTossed;
|
|
SavedFireProperties.bTrySplash = MyAmmo.bTrySplash;
|
|
SavedFireProperties.bLeadTarget = MyAmmo.bLeadTarget;
|
|
SavedFireProperties.bInstantHit = MyAmmo.bInstantHit;
|
|
SavedFireProperties.bInitialized = true;
|
|
}
|
|
FireRotation = Controller.AdjustAim(SavedFireProperties,FireStart,600);
|
|
Spawn(MyAmmo.ProjectileClass,,,FireStart,FireRotation);
|
|
|
|
FireStart = FireStart - 1.8 * CollisionRadius * Y;
|
|
FireRotation.Yaw += 400;
|
|
spawn(MyAmmo.ProjectileClass,,,FireStart, FireRotation);
|
|
|
|
FireStart = FireStart - 1.8 * CollisionRadius * Z;
|
|
FireRotation.Pitch += 400;
|
|
spawn(MyAmmo.ProjectileClass,,,FireStart, FireRotation);
|
|
|
|
FireStart = FireStart - 1.8 * CollisionRadius * X;
|
|
FireRotation.Roll += 400;
|
|
spawn(MyAmmo.ProjectileClass,,,FireStart, FireRotation);
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
MeleeAnims(0)="PoundPunch2"
|
|
MeleeAnims(1)="PoundPunch2"
|
|
MeleeAnims(2)="PoundPunch2"
|
|
MeleeDamage=10
|
|
damageForce=5000
|
|
HitSound(0)=Sound'KF_EnemiesFinalSnd.Stalker_Pain'
|
|
AmmunitionClass=Class'KFMod.SZombieAmmo'
|
|
ScoringValue=2
|
|
GroundSpeed=105.000000
|
|
WaterSpeed=100.000000
|
|
Health=300
|
|
ControllerClass=Class'KFChar.SoldierZombieController'
|
|
AmbientSound=Sound'KFPlayerSound.Zombiesbreath'
|
|
//Mesh=SkeletalMesh'KFCharacterModels.InfectedWhiteSoldier'
|
|
Skins(0)=Shader'KFCharacters.Zombie8Shader'
|
|
AmbientGlow=0
|
|
CollisionRadius=26.000000
|
|
Mass=900.000000
|
|
RotationRate=(Yaw=45000,Roll=0)
|
|
MenuName="Infected Soldier"
|
|
}
|