Prepare fixtures
This commit is contained in:
parent
797e5ea192
commit
9c94356263
6021 changed files with 722805 additions and 22 deletions
9
kf_sources/KFChar/Classes/BloatZombieController.uc
Normal file
9
kf_sources/KFChar/Classes/BloatZombieController.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class BloatZombieController extends KFMonsterController;
|
||||
// Custom Zombie Thinkerating
|
||||
// By : Alex
|
||||
|
||||
// Randomly plays a different moan sound for the Zombie each time it is called. Gruesome!
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
}
|
||||
99
kf_sources/KFChar/Classes/BossHPNeedle.uc
Normal file
99
kf_sources/KFChar/Classes/BossHPNeedle.uc
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
class BossHPNeedle extends Decoration
|
||||
NotPlaceable;
|
||||
|
||||
#exec obj load file="NewPatchSM.usx"
|
||||
|
||||
simulated function DroppedNow()
|
||||
{
|
||||
SetCollision(True);
|
||||
SetPhysics(PHYS_Falling);
|
||||
bFixedRotationDir = True;
|
||||
RotationRate = RotRand(True);
|
||||
}
|
||||
simulated function HitWall( vector HitNormal, actor HitWall )
|
||||
{
|
||||
local rotator R;
|
||||
|
||||
if( VSize(Velocity)<40 )
|
||||
{
|
||||
SetPhysics(PHYS_None);
|
||||
R.Roll = Rand(65536);
|
||||
R.Yaw = Rand(65536);
|
||||
SetRotation(R);
|
||||
Return;
|
||||
}
|
||||
Velocity = MirrorVectorByNormal(Velocity,HitNormal)*0.75;
|
||||
if( HitWall!=None && HitWall.Physics!=PHYS_None )
|
||||
Velocity+=HitWall.Velocity;
|
||||
}
|
||||
simulated function Landed( vector HitNormal )
|
||||
{
|
||||
HitWall(HitNormal,None);
|
||||
}
|
||||
function TakeDamage( int NDamage, Pawn instigatedBy, Vector hitlocation,
|
||||
Vector momentum, class<DamageType> damageType, optional int HitIndex)
|
||||
{
|
||||
if( Physics==PHYS_None )
|
||||
{
|
||||
SetPhysics(PHYS_Falling);
|
||||
bFixedRotationDir = True;
|
||||
RotationRate = RotRand(True);
|
||||
Velocity = vect(0,0,0);
|
||||
}
|
||||
Velocity+=momentum/10;
|
||||
}
|
||||
simulated function Destroyed();
|
||||
function Bump( actor Other );
|
||||
singular function PhysicsVolumeChange( PhysicsVolume NewVolume );
|
||||
|
||||
// Overriden so it doesn't damage the patriarch when he drops a needle!
|
||||
singular function BaseChange()
|
||||
{
|
||||
if( Velocity.Z < -500 )
|
||||
TakeDamage( (1-Velocity.Z/30),Instigator,Location,vect(0,0,0) , class'Crushed');
|
||||
|
||||
if( base == None )
|
||||
{
|
||||
if ( !bInterpolating && bPushable && (Physics == PHYS_None) )
|
||||
SetPhysics(PHYS_Falling);
|
||||
}
|
||||
else if( Pawn(Base) != None )
|
||||
{
|
||||
//Base.TakeDamage( (1-Velocity.Z/400)* mass/Base.Mass,Instigator,Location,0.5 * Velocity , class'Crushed');
|
||||
Velocity.Z = 100;
|
||||
if (FRand() < 0.5)
|
||||
Velocity.X += 70;
|
||||
else
|
||||
Velocity.Y += 70;
|
||||
SetPhysics(PHYS_Falling);
|
||||
}
|
||||
else if( Decoration(Base)!=None && Velocity.Z<-500 )
|
||||
{
|
||||
Base.TakeDamage((1 - Mass/Base.Mass * Velocity.Z/30), Instigator, Location, 0.2 * Velocity, class'Crushed');
|
||||
Velocity.Z = 100;
|
||||
if (FRand() < 0.5)
|
||||
Velocity.X += 70;
|
||||
else
|
||||
Velocity.Y += 70;
|
||||
SetPhysics(PHYS_Falling);
|
||||
}
|
||||
else
|
||||
instigator = None;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
RemoteRole=ROLE_None
|
||||
Physics=PHYS_None
|
||||
StaticMesh=StaticMesh'BossSyringe'
|
||||
DrawType=DT_StaticMesh
|
||||
bCollideActors=False
|
||||
bProjTarget=True
|
||||
CollisionHeight=4
|
||||
CollisionRadius=4
|
||||
bCollideWorld=True
|
||||
LifeSpan=300
|
||||
bStatic=False
|
||||
bNoDelete=False
|
||||
bBounce=True
|
||||
}
|
||||
64
kf_sources/KFChar/Classes/BossLAWProj.uc
Normal file
64
kf_sources/KFChar/Classes/BossLAWProj.uc
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
class BossLAWProj extends LAWProj;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// PostBeginPlay
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
simulated function PostBeginPlay()
|
||||
{
|
||||
// Difficulty Scaling
|
||||
if (Level.Game != none)
|
||||
{
|
||||
//log(self$" Beginning ground speed "$default.GroundSpeed);
|
||||
|
||||
// If you are playing by yourself, greatly reduce the rocket damage
|
||||
if( Level.Game.NumPlayers == 1 )
|
||||
{
|
||||
if( Level.Game.GameDifficulty < 2.0 )
|
||||
{
|
||||
Damage = default.Damage * 0.25;
|
||||
}
|
||||
else if( Level.Game.GameDifficulty < 4.0 )
|
||||
{
|
||||
Damage = default.Damage * 0.375;
|
||||
}
|
||||
else if( Level.Game.GameDifficulty < 5.0 )
|
||||
{
|
||||
Damage = default.Damage * 1.15;
|
||||
}
|
||||
else // Hardest difficulty
|
||||
{
|
||||
Damage = default.Damage * 1.3;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( Level.Game.GameDifficulty < 2.0 )
|
||||
{
|
||||
Damage = default.Damage * 0.375;
|
||||
}
|
||||
else if( Level.Game.GameDifficulty < 4.0 )
|
||||
{
|
||||
Damage = default.Damage * 1.0;
|
||||
}
|
||||
else if( Level.Game.GameDifficulty < 5.0 )
|
||||
{
|
||||
Damage = default.Damage * 1.15;
|
||||
}
|
||||
else // Hardest difficulty
|
||||
{
|
||||
Damage = default.Damage * 1.3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
super.PostBeginPlay();
|
||||
}
|
||||
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Damage=200
|
||||
MyDamageType=Class'KFMod.DamTypeFrag'
|
||||
ArmDistSquared=0
|
||||
}
|
||||
379
kf_sources/KFChar/Classes/BossZombieController.uc
Normal file
379
kf_sources/KFChar/Classes/BossZombieController.uc
Normal file
|
|
@ -0,0 +1,379 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class BossZombieController extends KFMonsterController;
|
||||
|
||||
var NavigationPoint HidingSpots;
|
||||
|
||||
var float WaitAnimTimeout; // How long until the Anim we are waiting for is completed; Hack so the server doesn't get stuck in idle when its doing the Rage anim
|
||||
var int AnimWaitChannel; // The channel we are waiting to end in WaitForAnim
|
||||
var name AnimWaitingFor; // The animation we are waiting to end in WaitForAnim, mostly used for debugging
|
||||
var bool bAlreadyFoundEnemy; // The Boss has already found an enemy at least once
|
||||
|
||||
function bool CanKillMeYet()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
function TimedFireWeaponAtEnemy()
|
||||
{
|
||||
if ( (Enemy == None) || FireWeaponAt(Enemy) )
|
||||
SetCombatTimer();
|
||||
else
|
||||
SetTimer(0.01, True);
|
||||
}
|
||||
|
||||
// Overridden to support a quick initial attack to get the boss to the players quickly
|
||||
function FightEnemy(bool bCanCharge)
|
||||
{
|
||||
if( KFM.bShotAnim )
|
||||
{
|
||||
GoToState('WaitForAnim');
|
||||
Return;
|
||||
}
|
||||
if (KFM.MeleeRange != KFM.default.MeleeRange)
|
||||
KFM.MeleeRange = KFM.default.MeleeRange;
|
||||
|
||||
if ( Enemy == none || Enemy.Health <= 0 )
|
||||
FindNewEnemy();
|
||||
|
||||
if ( (Enemy == FailedHuntEnemy) && (Level.TimeSeconds == FailedHuntTime) )
|
||||
{
|
||||
// if ( Enemy.Controller.bIsPlayer )
|
||||
// FindNewEnemy();
|
||||
|
||||
if ( Enemy == FailedHuntEnemy )
|
||||
{
|
||||
GoalString = "FAILED HUNT - HANG OUT";
|
||||
if ( EnemyVisible() )
|
||||
bCanCharge = false;
|
||||
}
|
||||
}
|
||||
if ( !EnemyVisible() )
|
||||
{
|
||||
// Added sneakcount hack to try and fix the endless loop crash. Try and track down what was causing this later - Ramm
|
||||
if( bAlreadyFoundEnemy || ZombieBoss(Pawn).SneakCount > 2 )
|
||||
{
|
||||
bAlreadyFoundEnemy = true;
|
||||
GoalString = "Hunt";
|
||||
GotoState('ZombieHunt');
|
||||
}
|
||||
else
|
||||
{
|
||||
// Added sneakcount hack to try and fix the endless loop crash. Try and track down what was causing this later - Ramm
|
||||
ZombieBoss(Pawn).SneakCount++;
|
||||
GoalString = "InitialHunt";
|
||||
GotoState('InitialHunting');
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// see enemy - decide whether to charge it or strafe around/stand and fire
|
||||
Target = Enemy;
|
||||
GoalString = "Charge";
|
||||
PathFindState = 2;
|
||||
DoCharge();
|
||||
}
|
||||
|
||||
|
||||
// Get the boss to the players quickly after initial spawn
|
||||
state InitialHunting extends Hunting
|
||||
{
|
||||
event SeePlayer(Pawn SeenPlayer)
|
||||
{
|
||||
super.SeePlayer(SeenPlayer);
|
||||
bAlreadyFoundEnemy = true;
|
||||
GoalString = "Hunt";
|
||||
GotoState('ZombieHunt');
|
||||
}
|
||||
|
||||
function BeginState()
|
||||
{
|
||||
local float ZDif;
|
||||
|
||||
// Added sneakcount hack to try and fix the endless loop crash. Try and track down what was causing this later - Ramm
|
||||
ZombieBoss(Pawn).SneakCount++;
|
||||
|
||||
if( Pawn.CollisionRadius>27 || Pawn.CollisionHeight>46 )
|
||||
{
|
||||
ZDif = Pawn.CollisionHeight-44;
|
||||
Pawn.SetCollisionSize(24,44);
|
||||
Pawn.MoveSmooth(vect(0,0,-1)*ZDif);
|
||||
}
|
||||
|
||||
super.BeginState();
|
||||
}
|
||||
function EndState()
|
||||
{
|
||||
local float ZDif;
|
||||
|
||||
if( Pawn.CollisionRadius!=Pawn.Default.CollisionRadius || Pawn.CollisionHeight!=Pawn.Default.CollisionHeight )
|
||||
{
|
||||
ZDif = Pawn.Default.CollisionRadius-44;
|
||||
Pawn.MoveSmooth(vect(0,0,1)*ZDif);
|
||||
Pawn.SetCollisionSize(Pawn.Default.CollisionRadius,Pawn.Default.CollisionHeight);
|
||||
}
|
||||
|
||||
super.EndState();
|
||||
}
|
||||
}
|
||||
|
||||
state ZombieCharge
|
||||
{
|
||||
function bool StrafeFromDamage(float Damage, class<DamageType> DamageType, bool bFindDest)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// I suspect this function causes bloats to get confused
|
||||
function bool TryStrafe(vector sideDir)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
function Timer()
|
||||
{
|
||||
Disable('NotifyBump');
|
||||
Target = Enemy;
|
||||
TimedFireWeaponAtEnemy();
|
||||
}
|
||||
|
||||
WaitForAnim:
|
||||
|
||||
if ( Monster(Pawn).bShotAnim )
|
||||
{
|
||||
Goto('Moving');
|
||||
}
|
||||
if ( !FindBestPathToward(Enemy, false,true) )
|
||||
GotoState('ZombieRestFormation');
|
||||
Moving:
|
||||
MoveToward(Enemy);
|
||||
WhatToDoNext(17);
|
||||
if ( bSoaking )
|
||||
SoakStop("STUCK IN CHARGING!");
|
||||
}
|
||||
|
||||
state RunSomewhere
|
||||
{
|
||||
Ignores HearNoise,DamageAttitudeTo,Tick,EnemyChanged,Startle;
|
||||
|
||||
function BeginState()
|
||||
{
|
||||
HidingSpots = None;
|
||||
Enemy = None;
|
||||
SetTimer(0.1,True);
|
||||
}
|
||||
event SeePlayer(Pawn SeenPlayer)
|
||||
{
|
||||
SetEnemy(SeenPlayer);
|
||||
}
|
||||
function Timer()
|
||||
{
|
||||
if( Enemy==None )
|
||||
Return;
|
||||
Target = Enemy;
|
||||
KFM.RangedAttack(Target);
|
||||
}
|
||||
Begin:
|
||||
if( Pawn.Physics==PHYS_Falling )
|
||||
WaitForLanding();
|
||||
While( KFM.bShotAnim )
|
||||
Sleep(0.25);
|
||||
if( HidingSpots==None )
|
||||
HidingSpots = FindRandomDest();
|
||||
if( HidingSpots==None )
|
||||
ZombieBoss(Pawn).BeginHealing();
|
||||
if( ActorReachable(HidingSpots) )
|
||||
{
|
||||
MoveTarget = HidingSpots;
|
||||
HidingSpots = None;
|
||||
}
|
||||
else FindBestPathToward(HidingSpots,True,False);
|
||||
if( MoveTarget==None )
|
||||
ZombieBoss(Pawn).BeginHealing();
|
||||
if( Enemy!=None && VSize(Enemy.Location-Pawn.Location)<100 )
|
||||
MoveToward(MoveTarget,Enemy,,False);
|
||||
else MoveToward(MoveTarget,MoveTarget,,False);
|
||||
if( HidingSpots==None || !PlayerSeesMe() )
|
||||
ZombieBoss(Pawn).BeginHealing();
|
||||
GoTo'Begin';
|
||||
}
|
||||
State SyrRetreat
|
||||
{
|
||||
Ignores HearNoise,DamageAttitudeTo,Tick,EnemyChanged,Startle;
|
||||
|
||||
function BeginState()
|
||||
{
|
||||
HidingSpots = None;
|
||||
Enemy = None;
|
||||
SetTimer(0.1,True);
|
||||
}
|
||||
event SeePlayer(Pawn SeenPlayer)
|
||||
{
|
||||
SetEnemy(SeenPlayer);
|
||||
}
|
||||
function Timer()
|
||||
{
|
||||
if( Enemy==None )
|
||||
Return;
|
||||
Target = Enemy;
|
||||
KFM.RangedAttack(Target);
|
||||
}
|
||||
function FindHideSpot()
|
||||
{
|
||||
local NavigationPoint N,BN;
|
||||
local float Dist,BDist,MDist;
|
||||
local vector EnemyDir;
|
||||
|
||||
if( Enemy==None )
|
||||
{
|
||||
HidingSpots = FindRandomDest();
|
||||
Return;
|
||||
}
|
||||
EnemyDir = Normal(Enemy.Location-Pawn.Location);
|
||||
For( N=Level.NavigationPointList; N!=None; N=N.NextNavigationPoint )
|
||||
{
|
||||
MDist = VSize(N.Location-Pawn.Location);
|
||||
if( MDist<2500 && !FastTrace(N.Location,Enemy.Location) && FindPathToward(N)!=None )
|
||||
{
|
||||
Dist = VSize(N.Location-Enemy.Location)/FMax(MDist/800.f,1.5);
|
||||
if( (EnemyDir Dot Normal(Enemy.Location-N.Location))<0.2 )
|
||||
Dist/=10;
|
||||
if( BN==None || BDist<Dist )
|
||||
{
|
||||
BN = N;
|
||||
BDist = Dist;
|
||||
}
|
||||
}
|
||||
}
|
||||
if( BN==None )
|
||||
HidingSpots = FindRandomDest();
|
||||
else HidingSpots = BN;
|
||||
}
|
||||
Begin:
|
||||
if( Pawn.Physics==PHYS_Falling )
|
||||
WaitForLanding();
|
||||
While( KFM.bShotAnim )
|
||||
Sleep(0.25);
|
||||
if( HidingSpots==None )
|
||||
FindHideSpot();
|
||||
if( HidingSpots==None )
|
||||
ZombieBoss(Pawn).BeginHealing();
|
||||
if( ActorReachable(HidingSpots) )
|
||||
{
|
||||
MoveTarget = HidingSpots;
|
||||
HidingSpots = None;
|
||||
}
|
||||
else FindBestPathToward(HidingSpots,True,False);
|
||||
if( MoveTarget==None )
|
||||
ZombieBoss(Pawn).BeginHealing();
|
||||
if( Enemy!=None && VSize(Enemy.Location-Pawn.Location)<100 )
|
||||
MoveToward(MoveTarget,Enemy,,False);
|
||||
else MoveToward(MoveTarget,MoveTarget,,False);
|
||||
if( HidingSpots==None )
|
||||
ZombieBoss(Pawn).BeginHealing();
|
||||
GoTo'Begin';
|
||||
}
|
||||
function bool PlayerSeesMe()
|
||||
{
|
||||
local Controller C;
|
||||
|
||||
For( C=Level.ControllerList; C!=None; C=C.NextController )
|
||||
{
|
||||
if( C.bIsPlayer && C.Pawn!=None && C.Pawn!=Pawn && LineOfSightTo(C.Pawn) )
|
||||
Return True;
|
||||
}
|
||||
Return False;
|
||||
}
|
||||
|
||||
// Used to set a timeout for the WaitForAnim state. This is a bit of a hack fix
|
||||
// for the Patriach getting stuck in its idle anim on a dedicated server when it
|
||||
// is supposed to doing something. For some reason, on a dedicated server only, it
|
||||
// never gets an animend call for some of the anims, instead the anim gets
|
||||
// interrupted by the idle anim. If we figure that bug out, we can
|
||||
// probably take this out in the future. But for now the fix works - Ramm
|
||||
function SetWaitForAnimTimout(float NewWaitAnimTimeout, name AnimToWaitFor)
|
||||
{
|
||||
WaitAnimTimeout = NewWaitAnimTimeout;
|
||||
AnimWaitingFor = AnimToWaitFor;
|
||||
}
|
||||
|
||||
state WaitForAnim
|
||||
{
|
||||
Ignores SeePlayer,HearNoise,Timer,EnemyNotVisible,NotifyBump,Startle;
|
||||
|
||||
|
||||
// The anim has ended, clear the flags and let the AI do its thing
|
||||
function WaitTimeout()
|
||||
{
|
||||
if( bUseFreezeHack )
|
||||
{
|
||||
if( Pawn!=None )
|
||||
{
|
||||
Pawn.AccelRate = Pawn.Default.AccelRate;
|
||||
Pawn.GroundSpeed = Pawn.Default.GroundSpeed;
|
||||
}
|
||||
bUseFreezeHack = False;
|
||||
}
|
||||
|
||||
AnimEnd(AnimWaitChannel);
|
||||
}
|
||||
|
||||
event AnimEnd(int Channel)
|
||||
{
|
||||
/*local name Sequence;
|
||||
local float Frame, Rate;
|
||||
|
||||
|
||||
Pawn.GetAnimParams( KFMonster(Pawn).ExpectingChannel, Sequence, Frame, Rate );
|
||||
|
||||
log(GetStateName()$" AnimEnd for Exp Chan "$KFMonster(Pawn).ExpectingChannel$" = "$Sequence$" Channel = "$Channel);
|
||||
|
||||
Pawn.GetAnimParams( 0, Sequence, Frame, Rate );
|
||||
log(GetStateName()$" AnimEnd for Chan 0 = "$Sequence);
|
||||
|
||||
Pawn.GetAnimParams( 1, Sequence, Frame, Rate );
|
||||
log(GetStateName()$" AnimEnd for Chan 1 = "$Sequence);
|
||||
|
||||
log(GetStateName()$" AnimEnd bShotAnim = "$Monster(Pawn).bShotAnim); */
|
||||
|
||||
Pawn.AnimEnd(Channel);
|
||||
if ( !Monster(Pawn).bShotAnim )
|
||||
WhatToDoNext(99);
|
||||
}
|
||||
|
||||
function Tick( float Delta )
|
||||
{
|
||||
Global.Tick(Delta);
|
||||
|
||||
if( WaitAnimTimeout > 0 )
|
||||
{
|
||||
WaitAnimTimeout -= Delta;
|
||||
|
||||
if( WaitAnimTimeout <= 0 )
|
||||
{
|
||||
WaitAnimTimeout = 0;
|
||||
WaitTimeout();
|
||||
}
|
||||
}
|
||||
|
||||
if( bUseFreezeHack )
|
||||
{
|
||||
MoveTarget = None;
|
||||
MoveTimer = -1;
|
||||
Pawn.Acceleration = vect(0,0,0);
|
||||
Pawn.GroundSpeed = 1;
|
||||
Pawn.AccelRate = 0;
|
||||
}
|
||||
}
|
||||
function EndState()
|
||||
{
|
||||
super.EndState();
|
||||
|
||||
AnimWaitingFor = '';
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
}
|
||||
15
kf_sources/KFChar/Classes/BrainDeadBloat.uc
Normal file
15
kf_sources/KFChar/Classes/BrainDeadBloat.uc
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
// for debugging
|
||||
class BrainDeadBloat extends ZombieBloat;
|
||||
|
||||
event PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
|
||||
SetMovementPhysics();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ControllerClass=none
|
||||
}
|
||||
|
||||
15
kf_sources/KFChar/Classes/BrainDeadBoss.uc
Normal file
15
kf_sources/KFChar/Classes/BrainDeadBoss.uc
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
// for debugging
|
||||
class BrainDeadBoss extends ZombieBoss;
|
||||
|
||||
event PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
|
||||
SetMovementPhysics();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ControllerClass=none
|
||||
}
|
||||
|
||||
15
kf_sources/KFChar/Classes/BrainDeadClot.uc
Normal file
15
kf_sources/KFChar/Classes/BrainDeadClot.uc
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
// for debugging
|
||||
class BrainDeadClot extends ZombieClot;
|
||||
|
||||
event PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
|
||||
SetMovementPhysics();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ControllerClass=none
|
||||
}
|
||||
|
||||
15
kf_sources/KFChar/Classes/BrainDeadCrawler.uc
Normal file
15
kf_sources/KFChar/Classes/BrainDeadCrawler.uc
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
// for debugging
|
||||
class BrainDeadCrawler extends ZombieCrawler;
|
||||
|
||||
event PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
|
||||
SetMovementPhysics();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ControllerClass=none
|
||||
}
|
||||
|
||||
15
kf_sources/KFChar/Classes/BrainDeadFleshPound.uc
Normal file
15
kf_sources/KFChar/Classes/BrainDeadFleshPound.uc
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
// for debugging
|
||||
class BrainDeadFleshPound extends ZombieFleshPound;
|
||||
|
||||
event PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
|
||||
SetMovementPhysics();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ControllerClass=none
|
||||
}
|
||||
|
||||
15
kf_sources/KFChar/Classes/BrainDeadGorefast.uc
Normal file
15
kf_sources/KFChar/Classes/BrainDeadGorefast.uc
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
// for debugging
|
||||
class BrainDeadGorefast extends ZombieGorefast;
|
||||
|
||||
event PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
|
||||
SetMovementPhysics();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ControllerClass=none
|
||||
}
|
||||
|
||||
15
kf_sources/KFChar/Classes/BrainDeadHusk.uc
Normal file
15
kf_sources/KFChar/Classes/BrainDeadHusk.uc
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
// for debugging
|
||||
class BrainDeadHusk extends ZombieHusk;
|
||||
|
||||
event PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
|
||||
SetMovementPhysics();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ControllerClass=none
|
||||
}
|
||||
|
||||
15
kf_sources/KFChar/Classes/BrainDeadScrake.uc
Normal file
15
kf_sources/KFChar/Classes/BrainDeadScrake.uc
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
// for debugging
|
||||
class BrainDeadScrake extends ZombieScrake;
|
||||
|
||||
event PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
|
||||
SetMovementPhysics();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ControllerClass=none
|
||||
}
|
||||
|
||||
15
kf_sources/KFChar/Classes/BrainDeadSiren.uc
Normal file
15
kf_sources/KFChar/Classes/BrainDeadSiren.uc
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
// for debugging
|
||||
class BrainDeadSiren extends ZombieSiren;
|
||||
|
||||
event PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
|
||||
SetMovementPhysics();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ControllerClass=none
|
||||
}
|
||||
|
||||
15
kf_sources/KFChar/Classes/BrainDeadStalker.uc
Normal file
15
kf_sources/KFChar/Classes/BrainDeadStalker.uc
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
// for debugging
|
||||
class BrainDeadStalker extends ZombieStalker;
|
||||
|
||||
event PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
|
||||
SetMovementPhysics();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ControllerClass=none
|
||||
}
|
||||
|
||||
17
kf_sources/KFChar/Classes/BrainDeadZombie.uc
Normal file
17
kf_sources/KFChar/Classes/BrainDeadZombie.uc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
// for debugging
|
||||
class BrainDeadZombie extends ZombieClot;
|
||||
|
||||
event PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
|
||||
SetMovementPhysics();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
//SoundRadius=10
|
||||
ControllerClass=none
|
||||
}
|
||||
|
||||
|
||||
111
kf_sources/KFChar/Classes/CrawlerController.uc
Normal file
111
kf_sources/KFChar/Classes/CrawlerController.uc
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
class CrawlerController extends KFMonsterController;
|
||||
|
||||
var float LastPounceTime;
|
||||
var bool bDoneSpottedCheck;
|
||||
|
||||
state ZombieHunt
|
||||
{
|
||||
event SeePlayer(Pawn SeenPlayer)
|
||||
{
|
||||
if ( !bDoneSpottedCheck && PlayerController(SeenPlayer.Controller) != none )
|
||||
{
|
||||
// 25% chance of first player to see this Crawler saying something
|
||||
if ( !KFGameType(Level.Game).bDidSpottedCrawlerMessage && FRand() < 0.25 )
|
||||
{
|
||||
PlayerController(SeenPlayer.Controller).Speech('AUTO', 18, "");
|
||||
KFGameType(Level.Game).bDidSpottedCrawlerMessage = true;
|
||||
}
|
||||
|
||||
bDoneSpottedCheck = true;
|
||||
}
|
||||
|
||||
super.SeePlayer(SeenPlayer);
|
||||
}
|
||||
}
|
||||
|
||||
function bool IsInPounceDist(actor PTarget)
|
||||
{
|
||||
local vector DistVec;
|
||||
local float time;
|
||||
|
||||
local float HeightMoved;
|
||||
local float EndHeight;
|
||||
|
||||
//work out time needed to reach target
|
||||
|
||||
DistVec = pawn.location - PTarget.location;
|
||||
DistVec.Z=0;
|
||||
|
||||
time = vsize(DistVec)/ZombieCrawler(pawn).PounceSpeed;
|
||||
|
||||
// vertical change in that time
|
||||
|
||||
//assumes downward grav only
|
||||
HeightMoved = Pawn.JumpZ*time + 0.5*pawn.PhysicsVolume.Gravity.z*time*time;
|
||||
|
||||
EndHeight = pawn.Location.z +HeightMoved;
|
||||
|
||||
//log(Vsize(Pawn.Location - PTarget.Location));
|
||||
|
||||
|
||||
if((abs(EndHeight - PTarget.Location.Z) < Pawn.CollisionHeight + PTarget.CollisionHeight) &&
|
||||
VSize(pawn.Location - PTarget.Location) < KFMonster(pawn).MeleeRange * 5)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
function bool FireWeaponAt(Actor A)
|
||||
{
|
||||
local vector aFacing,aToB;
|
||||
local float RelativeDir;
|
||||
|
||||
if ( A == None )
|
||||
A = Enemy;
|
||||
if ( (A == None) || (Focus != A) )
|
||||
return false;
|
||||
|
||||
if(CanAttack(A))
|
||||
{
|
||||
Target = A;
|
||||
Monster(Pawn).RangedAttack(Target);
|
||||
}
|
||||
else
|
||||
{
|
||||
//TODO - base off land time rather than launch time?
|
||||
if((LastPounceTime + (4.5 - (FRand() * 3.0))) < Level.TimeSeconds )
|
||||
{
|
||||
aFacing=Normal(Vector(Pawn.Rotation));
|
||||
// Get the vector from A to B
|
||||
aToB=A.Location-Pawn.Location;
|
||||
|
||||
RelativeDir = aFacing dot aToB;
|
||||
if ( RelativeDir > 0.85 )
|
||||
{
|
||||
//Facing enemy
|
||||
if(IsInPounceDist(A) )
|
||||
{
|
||||
if(ZombieCrawler(Pawn).DoPounce()==true )
|
||||
LastPounceTime = Level.TimeSeconds;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function bool NotifyLanded(vector HitNormal)
|
||||
{
|
||||
if( zombiecrawler(pawn).bPouncing )
|
||||
{
|
||||
// restart pathfinding from landing location
|
||||
GotoState('hunting');
|
||||
return false;
|
||||
}
|
||||
else
|
||||
return super.NotifyLanded(HitNormal);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
}
|
||||
219
kf_sources/KFChar/Classes/FleshpoundZombieController.uc
Normal file
219
kf_sources/KFChar/Classes/FleshpoundZombieController.uc
Normal file
|
|
@ -0,0 +1,219 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class FleshpoundZombieController extends KFMonsterController;
|
||||
|
||||
var float RageAnimTimeout; // How long until the RageAnim is completed; Hack so the server doesn't get stuck in idle when its doing the Rage anim
|
||||
var bool bDoneSpottedCheck;
|
||||
var float RageFrustrationTimer; // Tracks how long we have been walking toward a visible enemy
|
||||
var float RageFrustrationThreshhold; // Base value for how long the FP should walk torward an enemy without reaching them before getting frustrated and raging
|
||||
|
||||
state ZombieHunt
|
||||
{
|
||||
event SeePlayer(Pawn SeenPlayer)
|
||||
{
|
||||
if ( !bDoneSpottedCheck && PlayerController(SeenPlayer.Controller) != none )
|
||||
{
|
||||
// 25% chance of first player to see this Fleshpound saying something
|
||||
if ( !KFGameType(Level.Game).bDidSpottedFleshpoundMessage && FRand() < 0.25 )
|
||||
{
|
||||
PlayerController(SeenPlayer.Controller).Speech('AUTO', 12, "");
|
||||
KFGameType(Level.Game).bDidSpottedFleshpoundMessage = true;
|
||||
}
|
||||
|
||||
bDoneSpottedCheck = true;
|
||||
}
|
||||
|
||||
super.SeePlayer(SeenPlayer);
|
||||
}
|
||||
}
|
||||
|
||||
function TimedFireWeaponAtEnemy()
|
||||
{
|
||||
if ( (Enemy == None) || FireWeaponAt(Enemy) )
|
||||
SetCombatTimer();
|
||||
else
|
||||
SetTimer(0.01, True);
|
||||
}
|
||||
|
||||
state SpinAttack
|
||||
{
|
||||
ignores EnemyNotVisible;
|
||||
|
||||
// Don't do this in this state
|
||||
function GetOutOfTheWayOfShot(vector ShotDirection, vector ShotOrigin){}
|
||||
|
||||
function DoSpinDamage()
|
||||
{
|
||||
local Actor A;
|
||||
|
||||
//log("FLESHPOUND DOSPINDAMAGE!");
|
||||
foreach CollidingActors(class'actor', A, (ZombieFleshpound(pawn).MeleeRange * 1.5)+pawn.CollisionRadius, pawn.Location)
|
||||
zombiefleshpound(pawn).SpinDamage(A);
|
||||
}
|
||||
|
||||
Begin:
|
||||
|
||||
WaitForAnim:
|
||||
While( KFM.bShotAnim )
|
||||
{
|
||||
Sleep(0.1);
|
||||
DoSpinDamage();
|
||||
}
|
||||
|
||||
WhatToDoNext(152);
|
||||
if ( bSoaking )
|
||||
SoakStop("STUCK IN SPINATTACK!!!");
|
||||
}
|
||||
|
||||
state ZombieCharge
|
||||
{
|
||||
function Tick( float Delta )
|
||||
{
|
||||
local ZombieFleshPound ZFP;
|
||||
Global.Tick(Delta);
|
||||
|
||||
// Make the FP rage if we haven't reached our enemy after a certain amount of time
|
||||
if( RageFrustrationTimer < RageFrustrationThreshhold )
|
||||
{
|
||||
RageFrustrationTimer += Delta;
|
||||
|
||||
if( RageFrustrationTimer >= RageFrustrationThreshhold )
|
||||
{
|
||||
ZFP = ZombieFleshPound(Pawn);
|
||||
|
||||
if( ZFP != none && !ZFP.bChargingPlayer )
|
||||
{
|
||||
ZFP.StartCharging();
|
||||
ZFP.bFrustrated = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function bool StrafeFromDamage(float Damage, class<DamageType> DamageType, bool bFindDest)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// I suspect this function causes bloats to get confused
|
||||
function bool TryStrafe(vector sideDir)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
function Timer()
|
||||
{
|
||||
Disable('NotifyBump');
|
||||
Target = Enemy;
|
||||
TimedFireWeaponAtEnemy();
|
||||
}
|
||||
|
||||
function BeginState()
|
||||
{
|
||||
super.BeginState();
|
||||
|
||||
RageFrustrationThreshhold = default.RageFrustrationThreshhold + (Frand() * 5);
|
||||
RageFrustrationTimer = 0;
|
||||
}
|
||||
|
||||
WaitForAnim:
|
||||
|
||||
if ( Monster(Pawn).bShotAnim )
|
||||
{
|
||||
Goto('Moving');
|
||||
}
|
||||
if ( !FindBestPathToward(Enemy, false,true) )
|
||||
GotoState('ZombieRestFormation');
|
||||
Moving:
|
||||
MoveToward(Enemy);
|
||||
WhatToDoNext(17);
|
||||
if ( bSoaking )
|
||||
SoakStop("STUCK IN CHARGING!");
|
||||
}
|
||||
|
||||
// Used to set a timeout for the WaitForAnim state. This is a bit of a hack fix
|
||||
// for the FleshPound getting stuck in its idle anim on a dedicated server when it
|
||||
// is supposed to be raging. For some reason, on a dedicated server only, it
|
||||
// never gets an animend call for the PoundRage anim, instead the anim gets
|
||||
// interrupted by the PoundIdle anim. If we figure that bug out, we can
|
||||
// probably take this out in the future. But for now the fix works - Ramm
|
||||
function SetPoundRageTimout(float NewRageTimeOut)
|
||||
{
|
||||
RageAnimTimeout = NewRageTimeOut;
|
||||
}
|
||||
|
||||
state WaitForAnim
|
||||
{
|
||||
Ignores SeePlayer,HearNoise,Timer,EnemyNotVisible,NotifyBump;
|
||||
|
||||
// Don't do this in this state
|
||||
function GetOutOfTheWayOfShot(vector ShotDirection, vector ShotOrigin){}
|
||||
|
||||
function BeginState()
|
||||
{
|
||||
bUseFreezeHack = False;
|
||||
}
|
||||
|
||||
// The rage anim has ended, clear the flags and let the AI do its thing
|
||||
function RageTimeout()
|
||||
{
|
||||
if( bUseFreezeHack )
|
||||
{
|
||||
if( Pawn!=None )
|
||||
{
|
||||
Pawn.AccelRate = Pawn.Default.AccelRate;
|
||||
Pawn.GroundSpeed = Pawn.Default.GroundSpeed;
|
||||
}
|
||||
bUseFreezeHack = False;
|
||||
AnimEnd(0);
|
||||
}
|
||||
}
|
||||
|
||||
function Tick( float Delta )
|
||||
{
|
||||
Global.Tick(Delta);
|
||||
|
||||
if( RageAnimTimeout > 0 )
|
||||
{
|
||||
RageAnimTimeout -= Delta;
|
||||
|
||||
if( RageAnimTimeout <= 0 )
|
||||
{
|
||||
RageAnimTimeout = 0;
|
||||
RageTimeout();
|
||||
}
|
||||
}
|
||||
|
||||
if( bUseFreezeHack )
|
||||
{
|
||||
MoveTarget = None;
|
||||
MoveTimer = -1;
|
||||
Pawn.Acceleration = vect(0,0,0);
|
||||
Pawn.GroundSpeed = 1;
|
||||
Pawn.AccelRate = 0;
|
||||
}
|
||||
}
|
||||
function EndState()
|
||||
{
|
||||
if( Pawn!=None )
|
||||
{
|
||||
Pawn.AccelRate = Pawn.Default.AccelRate;
|
||||
Pawn.GroundSpeed = Pawn.Default.GroundSpeed;
|
||||
}
|
||||
bUseFreezeHack = False;
|
||||
}
|
||||
|
||||
Begin:
|
||||
While( KFM.bShotAnim )
|
||||
{
|
||||
Sleep(0.15);
|
||||
}
|
||||
WhatToDoNext(99);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
RageFrustrationThreshhold=10.0
|
||||
}
|
||||
29
kf_sources/KFChar/Classes/GorefastController.uc
Normal file
29
kf_sources/KFChar/Classes/GorefastController.uc
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
// Custom code to make the Gorefast act abit more interesting.
|
||||
class GorefastController extends KFMonsterController;
|
||||
|
||||
var bool bDoneSpottedCheck;
|
||||
|
||||
state ZombieHunt
|
||||
{
|
||||
event SeePlayer(Pawn SeenPlayer)
|
||||
{
|
||||
if ( !bDoneSpottedCheck && PlayerController(SeenPlayer.Controller) != none )
|
||||
{
|
||||
// 25% chance of first player to see this Gorefast saying something
|
||||
if ( !KFGameType(Level.Game).bDidSpottedGorefastMessage && FRand() < 0.25 )
|
||||
{
|
||||
PlayerController(SeenPlayer.Controller).Speech('AUTO', 13, "");
|
||||
KFGameType(Level.Game).bDidSpottedGorefastMessage = true;
|
||||
}
|
||||
|
||||
bDoneSpottedCheck = true;
|
||||
}
|
||||
|
||||
global.SeePlayer(SeenPlayer);
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StrafingAbility=0.500000
|
||||
}
|
||||
339
kf_sources/KFChar/Classes/HuskFireProjectile.uc
Normal file
339
kf_sources/KFChar/Classes/HuskFireProjectile.uc
Normal file
|
|
@ -0,0 +1,339 @@
|
|||
//=============================================================================
|
||||
// HuskFireProjectile
|
||||
//=============================================================================
|
||||
// Fireball projectile for the Husk zombie
|
||||
//=============================================================================
|
||||
// Killing Floor Source
|
||||
// Copyright (C) 2009 Tripwire Interactive LLC
|
||||
// - John "Ramm-Jaeger" Gibson
|
||||
//=============================================================================
|
||||
class HuskFireProjectile extends LAWProj;
|
||||
|
||||
var Emitter FlameTrail;
|
||||
var xEmitter Trail;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// PostBeginPlay
|
||||
//-----------------------------------------------------------------------------
|
||||
simulated function PostBeginPlay()
|
||||
{
|
||||
|
||||
if ( Level.NetMode != NM_DedicatedServer )
|
||||
{
|
||||
if ( !PhysicsVolume.bWaterVolume )
|
||||
{
|
||||
FlameTrail = Spawn(class'FlameThrowerFlameB',self);
|
||||
Trail = Spawn(class'FlameThrowerFlame',self);
|
||||
}
|
||||
}
|
||||
|
||||
// Difficulty Scaling
|
||||
if (Level.Game != none)
|
||||
{
|
||||
if( Level.Game.GameDifficulty < 2.0 )
|
||||
{
|
||||
Damage = default.Damage * 0.75;
|
||||
}
|
||||
else if( Level.Game.GameDifficulty < 4.0 )
|
||||
{
|
||||
Damage = default.Damage * 1.0;
|
||||
}
|
||||
else if( Level.Game.GameDifficulty < 5.0 )
|
||||
{
|
||||
Damage = default.Damage * 1.15;
|
||||
}
|
||||
else // Hardest difficulty
|
||||
{
|
||||
Damage = default.Damage * 1.3;
|
||||
}
|
||||
}
|
||||
|
||||
OrigLoc = Location;
|
||||
|
||||
if( !bDud )
|
||||
{
|
||||
Dir = vector(Rotation);
|
||||
Velocity = speed * Dir;
|
||||
}
|
||||
|
||||
super(ROBallisticProjectile).PostBeginPlay();
|
||||
}
|
||||
|
||||
simulated function Explode(vector HitLocation, vector HitNormal)
|
||||
{
|
||||
local Controller C;
|
||||
local PlayerController LocalPlayer;
|
||||
local float ShakeScale;
|
||||
|
||||
bHasExploded = True;
|
||||
|
||||
// Don't explode if this is a dud
|
||||
if( bDud )
|
||||
{
|
||||
Velocity = vect(0,0,0);
|
||||
LifeSpan=1.0;
|
||||
SetPhysics(PHYS_Falling);
|
||||
}
|
||||
|
||||
PlaySound(ExplosionSound,,2.0);
|
||||
if ( EffectIsRelevant(Location,false) )
|
||||
{
|
||||
Spawn(class'KFMod.FlameImpact',,,HitLocation + HitNormal*20,rotator(HitNormal));
|
||||
Spawn(ExplosionDecal,self,,HitLocation, rotator(-HitNormal));
|
||||
}
|
||||
|
||||
BlowUp(HitLocation);
|
||||
Destroy();
|
||||
|
||||
// Shake nearby players screens
|
||||
LocalPlayer = Level.GetLocalPlayerController();
|
||||
if ( LocalPlayer != none )
|
||||
{
|
||||
ShakeScale = GetShakeScale(Location, LocalPlayer.ViewTarget.Location);
|
||||
if( ShakeScale > 0 )
|
||||
{
|
||||
LocalPlayer.ShakeView(RotMag * ShakeScale, RotRate, RotTime, OffsetMag * ShakeScale, OffsetRate, OffsetTime);
|
||||
}
|
||||
}
|
||||
|
||||
for ( C=Level.ControllerList; C!=None; C=C.NextController )
|
||||
{
|
||||
if ( PlayerController(C) != None && C != LocalPlayer )
|
||||
{
|
||||
ShakeScale = GetShakeScale(Location, PlayerController(C).ViewTarget.Location);
|
||||
if( ShakeScale > 0 )
|
||||
{
|
||||
C.ShakeView(RotMag * ShakeScale, RotRate, RotTime, OffsetMag * ShakeScale, OffsetRate, OffsetTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get the shake amount for when this projectile explodes
|
||||
simulated function float GetShakeScale(vector ViewLocation, vector EventLocation)
|
||||
{
|
||||
local float Dist;
|
||||
local float scale;
|
||||
|
||||
Dist = VSize(ViewLocation - EventLocation);
|
||||
|
||||
if (Dist < DamageRadius * 2.0 )
|
||||
{
|
||||
scale = (DamageRadius*2.0 - Dist) / (DamageRadius*2.0);
|
||||
}
|
||||
|
||||
return scale;
|
||||
}
|
||||
|
||||
/* HurtRadius()
|
||||
Hurt locally authoritative actors within the radius.
|
||||
Overriden so it doesn't attemt to damage the bullet whiz cylinder - TODO: maybe implement the same thing in the superclass - Ramm
|
||||
*/
|
||||
simulated function HurtRadius( float DamageAmount, float DamageRadius, class<DamageType> DamageType, float Momentum, vector HitLocation )
|
||||
{
|
||||
local actor Victims;
|
||||
local float damageScale, dist;
|
||||
local vector dirs;
|
||||
local int NumKilled;
|
||||
local KFMonster KFMonsterVictim;
|
||||
local Pawn P;
|
||||
local KFPawn KFP;
|
||||
local array<Pawn> CheckedPawns;
|
||||
local int i;
|
||||
local bool bAlreadyChecked;
|
||||
|
||||
if ( bHurtEntry )
|
||||
return;
|
||||
|
||||
bHurtEntry = true;
|
||||
|
||||
foreach CollidingActors (class 'Actor', Victims, DamageRadius, HitLocation)
|
||||
{
|
||||
// don't let blast damage affect fluid - VisibleCollisingActors doesn't really work for them - jag
|
||||
if( (Victims != self) && (Victims != Instigator) &&(Hurtwall != Victims)
|
||||
&& (Victims.Role == ROLE_Authority) && !Victims.IsA('FluidSurfaceInfo')
|
||||
&& ExtendedZCollision(Victims)==None && KFBulletWhipAttachment(Victims)==None )
|
||||
{
|
||||
dirs = Victims.Location - HitLocation;
|
||||
dist = FMax(1,VSize(dirs));
|
||||
dirs = dirs/dist;
|
||||
damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius);
|
||||
if ( Instigator == None || Instigator.Controller == None )
|
||||
Victims.SetDelayedDamageInstigatorController( InstigatorController );
|
||||
if ( Victims == LastTouched )
|
||||
LastTouched = None;
|
||||
|
||||
P = Pawn(Victims);
|
||||
|
||||
if( P != none )
|
||||
{
|
||||
for (i = 0; i < CheckedPawns.Length; i++)
|
||||
{
|
||||
if (CheckedPawns[i] == P)
|
||||
{
|
||||
bAlreadyChecked = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( bAlreadyChecked )
|
||||
{
|
||||
bAlreadyChecked = false;
|
||||
P = none;
|
||||
continue;
|
||||
}
|
||||
|
||||
KFMonsterVictim = KFMonster(Victims);
|
||||
|
||||
if( KFMonsterVictim != none && KFMonsterVictim.Health <= 0 )
|
||||
{
|
||||
KFMonsterVictim = none;
|
||||
}
|
||||
|
||||
KFP = KFPawn(Victims);
|
||||
|
||||
if( KFMonsterVictim != none )
|
||||
{
|
||||
damageScale *= KFMonsterVictim.GetExposureTo(HitLocation);
|
||||
}
|
||||
else if( KFP != none )
|
||||
{
|
||||
damageScale *= KFP.GetExposureTo(HitLocation);
|
||||
}
|
||||
|
||||
CheckedPawns[CheckedPawns.Length] = P;
|
||||
|
||||
if ( damageScale <= 0)
|
||||
{
|
||||
P = none;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
P = none;
|
||||
}
|
||||
}
|
||||
|
||||
Victims.TakeDamage
|
||||
(
|
||||
damageScale * DamageAmount,
|
||||
Instigator,
|
||||
Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dirs,
|
||||
(damageScale * Momentum * dirs),
|
||||
DamageType
|
||||
);
|
||||
if (Vehicle(Victims) != None && Vehicle(Victims).Health > 0)
|
||||
Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController, DamageType, Momentum, HitLocation);
|
||||
|
||||
if( Role == ROLE_Authority && KFMonsterVictim != none && KFMonsterVictim.Health <= 0 )
|
||||
{
|
||||
NumKilled++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( (LastTouched != None) && (LastTouched != self) && (LastTouched != Instigator) &&
|
||||
(LastTouched.Role == ROLE_Authority) && !LastTouched.IsA('FluidSurfaceInfo') )
|
||||
{
|
||||
Victims = LastTouched;
|
||||
LastTouched = None;
|
||||
dirs = Victims.Location - HitLocation;
|
||||
dist = FMax(1,VSize(dirs));
|
||||
dirs = dirs/dist;
|
||||
damageScale = FMax(Victims.CollisionRadius/(Victims.CollisionRadius + Victims.CollisionHeight),1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius));
|
||||
if ( Instigator == None || Instigator.Controller == None )
|
||||
Victims.SetDelayedDamageInstigatorController(InstigatorController);
|
||||
|
||||
Victims.TakeDamage
|
||||
(
|
||||
damageScale * DamageAmount,
|
||||
Instigator,
|
||||
Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dirs,
|
||||
(damageScale * Momentum * dirs),
|
||||
DamageType
|
||||
);
|
||||
if (Vehicle(Victims) != None && Vehicle(Victims).Health > 0)
|
||||
Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController, DamageType, Momentum, HitLocation);
|
||||
}
|
||||
|
||||
if( Role == ROLE_Authority )
|
||||
{
|
||||
if( NumKilled >= 4 )
|
||||
{
|
||||
KFGameType(Level.Game).DramaticEvent(0.05);
|
||||
}
|
||||
else if( NumKilled >= 2 )
|
||||
{
|
||||
KFGameType(Level.Game).DramaticEvent(0.03);
|
||||
}
|
||||
}
|
||||
|
||||
bHurtEntry = false;
|
||||
}
|
||||
|
||||
//==============
|
||||
// Touching
|
||||
// Overridden to not touch the bulletwhip attachment
|
||||
simulated singular function Touch(Actor Other)
|
||||
{
|
||||
if ( Other == None || KFBulletWhipAttachment(Other)!=None )
|
||||
return;
|
||||
|
||||
super.Touch(Other);
|
||||
}
|
||||
|
||||
|
||||
// Don't hit Zed extra collision cylinders
|
||||
simulated function ProcessTouch(Actor Other, Vector HitLocation)
|
||||
{
|
||||
if( ExtendedZCollision(Other) != none )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
super.ProcessTouch(Other, HitLocation);
|
||||
}
|
||||
|
||||
simulated function Destroyed()
|
||||
{
|
||||
if ( Trail != none )
|
||||
{
|
||||
Trail.mRegen=False;
|
||||
Trail.SetPhysics(PHYS_None);
|
||||
Trail.GotoState('');
|
||||
}
|
||||
|
||||
if ( FlameTrail != none )
|
||||
{
|
||||
FlameTrail.Kill();
|
||||
FlameTrail.SetPhysics(PHYS_None);
|
||||
}
|
||||
|
||||
Super.Destroyed();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Speed=1800.000000
|
||||
MaxSpeed=2200.000000
|
||||
Damage=25
|
||||
DamageRadius=150.0
|
||||
ArmDistSquared=0
|
||||
StaticMesh=StaticMesh'EffectsSM.Ger_Tracer'// StaticMesh'EffectsSM.Ger_Tracer_Ball'
|
||||
DrawScale=2.0
|
||||
|
||||
MyDamageType=class'DamTypeBurned'
|
||||
ExplosionSound= Sound'KF_EnemiesFinalSnd.Husk.Husk_FireImpact' //Sound'KF_GrenadeSnd.FlameNade_Explode2'
|
||||
AmbientSound=sound'KF_BaseHusk.husk_fireball_loop'
|
||||
ExplosionDecal=class'KFMod.FlameThrowerBurnMark'
|
||||
|
||||
LightType=LT_Steady
|
||||
LightBrightness=90.000000
|
||||
LightRadius=16.000000
|
||||
LightHue=45
|
||||
LightSaturation=169
|
||||
LightCone=16
|
||||
bDynamicLight=True
|
||||
|
||||
bUnlit=True
|
||||
AmbientGlow=254
|
||||
}
|
||||
333
kf_sources/KFChar/Classes/HuskFireProjectile_HALLOWEEN.uc
Normal file
333
kf_sources/KFChar/Classes/HuskFireProjectile_HALLOWEEN.uc
Normal file
|
|
@ -0,0 +1,333 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class HuskFireProjectile_HALLOWEEN extends LAWProj;
|
||||
|
||||
var Emitter FlameTrail;
|
||||
var xEmitter Trail;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// PostBeginPlay
|
||||
//-----------------------------------------------------------------------------
|
||||
simulated function PostBeginPlay()
|
||||
{
|
||||
|
||||
if ( Level.NetMode != NM_DedicatedServer )
|
||||
{
|
||||
if ( !PhysicsVolume.bWaterVolume )
|
||||
{
|
||||
FlameTrail = Spawn(class'FlameThrowerFlameB',self);
|
||||
Trail = Spawn(class'FlameThrowerFlame',self);
|
||||
}
|
||||
}
|
||||
|
||||
// Difficulty Scaling
|
||||
if (Level.Game != none)
|
||||
{
|
||||
if( Level.Game.GameDifficulty < 2.0 )
|
||||
{
|
||||
Damage = default.Damage * 0.75;
|
||||
}
|
||||
else if( Level.Game.GameDifficulty < 4.0 )
|
||||
{
|
||||
Damage = default.Damage * 1.0;
|
||||
}
|
||||
else if( Level.Game.GameDifficulty < 5.0 )
|
||||
{
|
||||
Damage = default.Damage * 1.15;
|
||||
}
|
||||
else // Hardest difficulty
|
||||
{
|
||||
Damage = default.Damage * 1.3;
|
||||
}
|
||||
}
|
||||
|
||||
OrigLoc = Location;
|
||||
|
||||
if( !bDud )
|
||||
{
|
||||
Dir = vector(Rotation);
|
||||
Velocity = speed * Dir;
|
||||
}
|
||||
|
||||
super(ROBallisticProjectile).PostBeginPlay();
|
||||
}
|
||||
|
||||
simulated function Explode(vector HitLocation, vector HitNormal)
|
||||
{
|
||||
local Controller C;
|
||||
local PlayerController LocalPlayer;
|
||||
local float ShakeScale;
|
||||
|
||||
bHasExploded = True;
|
||||
|
||||
// Don't explode if this is a dud
|
||||
if( bDud )
|
||||
{
|
||||
Velocity = vect(0,0,0);
|
||||
LifeSpan=1.0;
|
||||
SetPhysics(PHYS_Falling);
|
||||
}
|
||||
|
||||
PlaySound(ExplosionSound,,2.0);
|
||||
if ( EffectIsRelevant(Location,false) )
|
||||
{
|
||||
Spawn(class'KFMod.FlameImpact_HALLOWEEN',,,HitLocation + HitNormal*20,rotator(HitNormal));
|
||||
Spawn(ExplosionDecal,self,,HitLocation, rotator(-HitNormal));
|
||||
}
|
||||
|
||||
BlowUp(HitLocation);
|
||||
Destroy();
|
||||
|
||||
// Shake nearby players screens
|
||||
LocalPlayer = Level.GetLocalPlayerController();
|
||||
if ( LocalPlayer != none )
|
||||
{
|
||||
ShakeScale = GetShakeScale(Location, LocalPlayer.ViewTarget.Location);
|
||||
if( ShakeScale > 0 )
|
||||
{
|
||||
LocalPlayer.ShakeView(RotMag * ShakeScale, RotRate, RotTime, OffsetMag * ShakeScale, OffsetRate, OffsetTime);
|
||||
}
|
||||
}
|
||||
|
||||
for ( C=Level.ControllerList; C!=None; C=C.NextController )
|
||||
{
|
||||
if ( PlayerController(C) != None && C != LocalPlayer )
|
||||
{
|
||||
ShakeScale = GetShakeScale(Location, PlayerController(C).ViewTarget.Location);
|
||||
if( ShakeScale > 0 )
|
||||
{
|
||||
C.ShakeView(RotMag * ShakeScale, RotRate, RotTime, OffsetMag * ShakeScale, OffsetRate, OffsetTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get the shake amount for when this projectile explodes
|
||||
simulated function float GetShakeScale(vector ViewLocation, vector EventLocation)
|
||||
{
|
||||
local float Dist;
|
||||
local float scale;
|
||||
|
||||
Dist = VSize(ViewLocation - EventLocation);
|
||||
|
||||
if (Dist < DamageRadius * 2.0 )
|
||||
{
|
||||
scale = (DamageRadius*2.0 - Dist) / (DamageRadius*2.0);
|
||||
}
|
||||
|
||||
return scale;
|
||||
}
|
||||
|
||||
/* HurtRadius()
|
||||
Hurt locally authoritative actors within the radius.
|
||||
Overriden so it doesn't attemt to damage the bullet whiz cylinder - TODO: maybe implement the same thing in the superclass - Ramm
|
||||
*/
|
||||
simulated function HurtRadius( float DamageAmount, float DamageRadius, class<DamageType> DamageType, float Momentum, vector HitLocation )
|
||||
{
|
||||
local actor Victims;
|
||||
local float damageScale, dist;
|
||||
local vector dirs;
|
||||
local int NumKilled;
|
||||
local KFMonster KFMonsterVictim;
|
||||
local Pawn P;
|
||||
local KFPawn KFP;
|
||||
local array<Pawn> CheckedPawns;
|
||||
local int i;
|
||||
local bool bAlreadyChecked;
|
||||
|
||||
if ( bHurtEntry )
|
||||
return;
|
||||
|
||||
bHurtEntry = true;
|
||||
|
||||
foreach CollidingActors (class 'Actor', Victims, DamageRadius, HitLocation)
|
||||
{
|
||||
// don't let blast damage affect fluid - VisibleCollisingActors doesn't really work for them - jag
|
||||
if( (Victims != self) && (Victims != Instigator) &&(Hurtwall != Victims)
|
||||
&& (Victims.Role == ROLE_Authority) && !Victims.IsA('FluidSurfaceInfo')
|
||||
&& ExtendedZCollision(Victims)==None && KFBulletWhipAttachment(Victims)==None )
|
||||
{
|
||||
dirs = Victims.Location - HitLocation;
|
||||
dist = FMax(1,VSize(dirs));
|
||||
dirs = dirs/dist;
|
||||
damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius);
|
||||
if ( Instigator == None || Instigator.Controller == None )
|
||||
Victims.SetDelayedDamageInstigatorController( InstigatorController );
|
||||
if ( Victims == LastTouched )
|
||||
LastTouched = None;
|
||||
|
||||
P = Pawn(Victims);
|
||||
|
||||
if( P != none )
|
||||
{
|
||||
for (i = 0; i < CheckedPawns.Length; i++)
|
||||
{
|
||||
if (CheckedPawns[i] == P)
|
||||
{
|
||||
bAlreadyChecked = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( bAlreadyChecked )
|
||||
{
|
||||
bAlreadyChecked = false;
|
||||
P = none;
|
||||
continue;
|
||||
}
|
||||
|
||||
KFMonsterVictim = KFMonster(Victims);
|
||||
|
||||
if( KFMonsterVictim != none && KFMonsterVictim.Health <= 0 )
|
||||
{
|
||||
KFMonsterVictim = none;
|
||||
}
|
||||
|
||||
KFP = KFPawn(Victims);
|
||||
|
||||
if( KFMonsterVictim != none )
|
||||
{
|
||||
damageScale *= KFMonsterVictim.GetExposureTo(HitLocation);
|
||||
}
|
||||
else if( KFP != none )
|
||||
{
|
||||
damageScale *= KFP.GetExposureTo(HitLocation);
|
||||
}
|
||||
|
||||
CheckedPawns[CheckedPawns.Length] = P;
|
||||
|
||||
if ( damageScale <= 0)
|
||||
{
|
||||
P = none;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
P = none;
|
||||
}
|
||||
}
|
||||
|
||||
Victims.TakeDamage
|
||||
(
|
||||
damageScale * DamageAmount,
|
||||
Instigator,
|
||||
Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dirs,
|
||||
(damageScale * Momentum * dirs),
|
||||
DamageType
|
||||
);
|
||||
if (Vehicle(Victims) != None && Vehicle(Victims).Health > 0)
|
||||
Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController, DamageType, Momentum, HitLocation);
|
||||
|
||||
if( Role == ROLE_Authority && KFMonsterVictim != none && KFMonsterVictim.Health <= 0 )
|
||||
{
|
||||
NumKilled++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( (LastTouched != None) && (LastTouched != self) && (LastTouched != Instigator) &&
|
||||
(LastTouched.Role == ROLE_Authority) && !LastTouched.IsA('FluidSurfaceInfo') )
|
||||
{
|
||||
Victims = LastTouched;
|
||||
LastTouched = None;
|
||||
dirs = Victims.Location - HitLocation;
|
||||
dist = FMax(1,VSize(dirs));
|
||||
dirs = dirs/dist;
|
||||
damageScale = FMax(Victims.CollisionRadius/(Victims.CollisionRadius + Victims.CollisionHeight),1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius));
|
||||
if ( Instigator == None || Instigator.Controller == None )
|
||||
Victims.SetDelayedDamageInstigatorController(InstigatorController);
|
||||
|
||||
Victims.TakeDamage
|
||||
(
|
||||
damageScale * DamageAmount,
|
||||
Instigator,
|
||||
Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dirs,
|
||||
(damageScale * Momentum * dirs),
|
||||
DamageType
|
||||
);
|
||||
if (Vehicle(Victims) != None && Vehicle(Victims).Health > 0)
|
||||
Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController, DamageType, Momentum, HitLocation);
|
||||
}
|
||||
|
||||
if( Role == ROLE_Authority )
|
||||
{
|
||||
if( NumKilled >= 4 )
|
||||
{
|
||||
KFGameType(Level.Game).DramaticEvent(0.05);
|
||||
}
|
||||
else if( NumKilled >= 2 )
|
||||
{
|
||||
KFGameType(Level.Game).DramaticEvent(0.03);
|
||||
}
|
||||
}
|
||||
|
||||
bHurtEntry = false;
|
||||
}
|
||||
|
||||
//==============
|
||||
// Touching
|
||||
// Overridden to not touch the bulletwhip attachment
|
||||
simulated singular function Touch(Actor Other)
|
||||
{
|
||||
if ( Other == None || KFBulletWhipAttachment(Other)!=None )
|
||||
return;
|
||||
|
||||
super.Touch(Other);
|
||||
}
|
||||
|
||||
|
||||
// Don't hit Zed extra collision cylinders
|
||||
simulated function ProcessTouch(Actor Other, Vector HitLocation)
|
||||
{
|
||||
if( ExtendedZCollision(Other) != none )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
super.ProcessTouch(Other, HitLocation);
|
||||
}
|
||||
|
||||
simulated function Destroyed()
|
||||
{
|
||||
if ( Trail != none )
|
||||
{
|
||||
Trail.mRegen=False;
|
||||
Trail.SetPhysics(PHYS_None);
|
||||
Trail.GotoState('');
|
||||
}
|
||||
|
||||
if ( FlameTrail != none )
|
||||
{
|
||||
FlameTrail.Kill();
|
||||
FlameTrail.SetPhysics(PHYS_None);
|
||||
}
|
||||
|
||||
Super.Destroyed();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Speed=1800.000000
|
||||
MaxSpeed=2200.000000
|
||||
Damage=25
|
||||
DamageRadius=150.0
|
||||
ArmDistSquared=0
|
||||
StaticMesh=StaticMesh'EffectsSM.Ger_Tracer'// StaticMesh'EffectsSM.Ger_Tracer_Ball'
|
||||
DrawScale=2.0
|
||||
|
||||
MyDamageType=class'DamTypeBurned'
|
||||
ExplosionSound= Sound'KF_EnemiesFinalSnd_HALLOWEEN.Husk.Husk_FireImpact' //Sound'KF_GrenadeSnd.FlameNade_Explode2'
|
||||
AmbientSound=sound'KF_BaseHusk_HALLOWEEN.husk_fireball_loop'
|
||||
ExplosionDecal=class'KFMod.FlameThrowerBurnMark'
|
||||
|
||||
LightType=LT_Steady
|
||||
LightBrightness=90.000000
|
||||
LightRadius=16.000000
|
||||
LightHue=45
|
||||
LightSaturation=169
|
||||
LightCone=16
|
||||
bDynamicLight=True
|
||||
|
||||
bUnlit=True
|
||||
AmbientGlow=254
|
||||
}
|
||||
240
kf_sources/KFChar/Classes/HuskZombieController.uc
Normal file
240
kf_sources/KFChar/Classes/HuskZombieController.uc
Normal file
|
|
@ -0,0 +1,240 @@
|
|||
//=============================================================================
|
||||
// HuskZombieController
|
||||
//=============================================================================
|
||||
// Controller class for the husk zombie
|
||||
//=============================================================================
|
||||
// Killing Floor Source
|
||||
// Copyright (C) 2009 Tripwire Interactive LLC
|
||||
// - John "Ramm-Jaeger" Gibson
|
||||
//=============================================================================
|
||||
class HuskZombieController extends KFMonsterController;
|
||||
|
||||
// Overridden to create a delay between when the husk fires his projectiles
|
||||
function bool FireWeaponAt(Actor A)
|
||||
{
|
||||
if ( A == None )
|
||||
A = Enemy;
|
||||
if ( (A == None) || (Focus != A) )
|
||||
return false;
|
||||
Target = A;
|
||||
|
||||
if( (VSize(A.Location - Pawn.Location) >= ZombieHusk(Pawn).MeleeRange + Pawn.CollisionRadius + Target.CollisionRadius) &&
|
||||
ZombieHusk(Pawn).NextFireProjectileTime - Level.TimeSeconds > 0 )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Monster(Pawn).RangedAttack(Target);
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
AdjustAim()
|
||||
Returns a rotation which is the direction the bot should aim - after introducing the appropriate aiming error
|
||||
Overridden to cause the zed to fire at the feet more often - Ramm
|
||||
*/
|
||||
function rotator AdjustAim(FireProperties FiredAmmunition, vector projStart, int aimerror)
|
||||
{
|
||||
local rotator FireRotation, TargetLook;
|
||||
local float FireDist, TargetDist, ProjSpeed;
|
||||
local actor HitActor;
|
||||
local vector FireSpot, FireDir, TargetVel, HitLocation, HitNormal;
|
||||
local int realYaw;
|
||||
local bool bDefendMelee, bClean, bLeadTargetNow;
|
||||
local bool bWantsToAimAtFeet;
|
||||
|
||||
if ( FiredAmmunition.ProjectileClass != None )
|
||||
projspeed = FiredAmmunition.ProjectileClass.default.speed;
|
||||
|
||||
// make sure bot has a valid target
|
||||
if ( Target == None )
|
||||
{
|
||||
Target = Enemy;
|
||||
if ( Target == None )
|
||||
return Rotation;
|
||||
}
|
||||
FireSpot = Target.Location;
|
||||
TargetDist = VSize(Target.Location - Pawn.Location);
|
||||
|
||||
// perfect aim at stationary objects
|
||||
if ( Pawn(Target) == None )
|
||||
{
|
||||
if ( !FiredAmmunition.bTossed )
|
||||
return rotator(Target.Location - projstart);
|
||||
else
|
||||
{
|
||||
FireDir = AdjustToss(projspeed,ProjStart,Target.Location,true);
|
||||
SetRotation(Rotator(FireDir));
|
||||
return Rotation;
|
||||
}
|
||||
}
|
||||
|
||||
bLeadTargetNow = FiredAmmunition.bLeadTarget && bLeadTarget;
|
||||
bDefendMelee = ( (Target == Enemy) && DefendMelee(TargetDist) );
|
||||
aimerror = AdjustAimError(aimerror,TargetDist,bDefendMelee,FiredAmmunition.bInstantHit, bLeadTargetNow);
|
||||
|
||||
// lead target with non instant hit projectiles
|
||||
if ( bLeadTargetNow )
|
||||
{
|
||||
TargetVel = Target.Velocity;
|
||||
// hack guess at projecting falling velocity of target
|
||||
if ( Target.Physics == PHYS_Falling )
|
||||
{
|
||||
if ( Target.PhysicsVolume.Gravity.Z <= Target.PhysicsVolume.Default.Gravity.Z )
|
||||
TargetVel.Z = FMin(TargetVel.Z + FMax(-400, Target.PhysicsVolume.Gravity.Z * FMin(1,TargetDist/projSpeed)),0);
|
||||
else
|
||||
TargetVel.Z = FMin(0, TargetVel.Z);
|
||||
}
|
||||
// more or less lead target (with some random variation)
|
||||
FireSpot += FMin(1, 0.7 + 0.6 * FRand()) * TargetVel * TargetDist/projSpeed;
|
||||
FireSpot.Z = FMin(Target.Location.Z, FireSpot.Z);
|
||||
|
||||
if ( (Target.Physics != PHYS_Falling) && (FRand() < 0.55) && (VSize(FireSpot - ProjStart) > 1000) )
|
||||
{
|
||||
// don't always lead far away targets, especially if they are moving sideways with respect to the bot
|
||||
TargetLook = Target.Rotation;
|
||||
if ( Target.Physics == PHYS_Walking )
|
||||
TargetLook.Pitch = 0;
|
||||
bClean = ( ((Vector(TargetLook) Dot Normal(Target.Velocity)) >= 0.71) && FastTrace(FireSpot, ProjStart) );
|
||||
}
|
||||
else // make sure that bot isn't leading into a wall
|
||||
bClean = FastTrace(FireSpot, ProjStart);
|
||||
if ( !bClean)
|
||||
{
|
||||
// reduce amount of leading
|
||||
if ( FRand() < 0.3 )
|
||||
FireSpot = Target.Location;
|
||||
else
|
||||
FireSpot = 0.5 * (FireSpot + Target.Location);
|
||||
}
|
||||
}
|
||||
|
||||
bClean = false; //so will fail first check unless shooting at feet
|
||||
|
||||
// Randomly determine if we should try and splash damage with the fire projectile
|
||||
if( FiredAmmunition.bTrySplash )
|
||||
{
|
||||
if( Skill < 2.0 )
|
||||
{
|
||||
if(FRand() > 0.85)
|
||||
{
|
||||
bWantsToAimAtFeet = true;
|
||||
}
|
||||
}
|
||||
else if( Skill < 3.0 )
|
||||
{
|
||||
if(FRand() > 0.5)
|
||||
{
|
||||
bWantsToAimAtFeet = true;
|
||||
}
|
||||
}
|
||||
else if( Skill >= 3.0 )
|
||||
{
|
||||
if(FRand() > 0.25)
|
||||
{
|
||||
bWantsToAimAtFeet = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( FiredAmmunition.bTrySplash && (Pawn(Target) != None) && (((Target.Physics == PHYS_Falling)
|
||||
&& (Pawn.Location.Z + 80 >= Target.Location.Z)) || ((Pawn.Location.Z + 19 >= Target.Location.Z)
|
||||
&& (bDefendMelee || bWantsToAimAtFeet))) )
|
||||
{
|
||||
HitActor = Trace(HitLocation, HitNormal, FireSpot - vect(0,0,1) * (Target.CollisionHeight + 10), FireSpot, false);
|
||||
|
||||
bClean = (HitActor == None);
|
||||
if ( !bClean )
|
||||
{
|
||||
FireSpot = HitLocation + vect(0,0,3);
|
||||
bClean = FastTrace(FireSpot, ProjStart);
|
||||
}
|
||||
else
|
||||
bClean = ( (Target.Physics == PHYS_Falling) && FastTrace(FireSpot, ProjStart) );
|
||||
}
|
||||
|
||||
if ( !bClean )
|
||||
{
|
||||
//try middle
|
||||
FireSpot.Z = Target.Location.Z;
|
||||
bClean = FastTrace(FireSpot, ProjStart);
|
||||
}
|
||||
if ( FiredAmmunition.bTossed && !bClean && bEnemyInfoValid )
|
||||
{
|
||||
FireSpot = LastSeenPos;
|
||||
HitActor = Trace(HitLocation, HitNormal, FireSpot, ProjStart, false);
|
||||
if ( HitActor != None )
|
||||
{
|
||||
bCanFire = false;
|
||||
FireSpot += 2 * Target.CollisionHeight * HitNormal;
|
||||
}
|
||||
bClean = true;
|
||||
}
|
||||
|
||||
if( !bClean )
|
||||
{
|
||||
// try head
|
||||
FireSpot.Z = Target.Location.Z + 0.9 * Target.CollisionHeight;
|
||||
bClean = FastTrace(FireSpot, ProjStart);
|
||||
}
|
||||
if ( !bClean && (Target == Enemy) && bEnemyInfoValid )
|
||||
{
|
||||
FireSpot = LastSeenPos;
|
||||
if ( Pawn.Location.Z >= LastSeenPos.Z )
|
||||
FireSpot.Z -= 0.4 * Enemy.CollisionHeight;
|
||||
HitActor = Trace(HitLocation, HitNormal, FireSpot, ProjStart, false);
|
||||
if ( HitActor != None )
|
||||
{
|
||||
FireSpot = LastSeenPos + 2 * Enemy.CollisionHeight * HitNormal;
|
||||
if ( Monster(Pawn).SplashDamage() && (Skill >= 4) )
|
||||
{
|
||||
HitActor = Trace(HitLocation, HitNormal, FireSpot, ProjStart, false);
|
||||
if ( HitActor != None )
|
||||
FireSpot += 2 * Enemy.CollisionHeight * HitNormal;
|
||||
}
|
||||
bCanFire = false;
|
||||
}
|
||||
}
|
||||
|
||||
// adjust for toss distance
|
||||
if ( FiredAmmunition.bTossed )
|
||||
FireDir = AdjustToss(projspeed,ProjStart,FireSpot,true);
|
||||
else
|
||||
FireDir = FireSpot - ProjStart;
|
||||
|
||||
FireRotation = Rotator(FireDir);
|
||||
realYaw = FireRotation.Yaw;
|
||||
InstantWarnTarget(Target,FiredAmmunition,vector(FireRotation));
|
||||
|
||||
FireRotation.Yaw = SetFireYaw(FireRotation.Yaw + aimerror);
|
||||
FireDir = vector(FireRotation);
|
||||
// avoid shooting into wall
|
||||
FireDist = FMin(VSize(FireSpot-ProjStart), 400);
|
||||
FireSpot = ProjStart + FireDist * FireDir;
|
||||
HitActor = Trace(HitLocation, HitNormal, FireSpot, ProjStart, false);
|
||||
if ( HitActor != None )
|
||||
{
|
||||
if ( HitNormal.Z < 0.7 )
|
||||
{
|
||||
FireRotation.Yaw = SetFireYaw(realYaw - aimerror);
|
||||
FireDir = vector(FireRotation);
|
||||
FireSpot = ProjStart + FireDist * FireDir;
|
||||
HitActor = Trace(HitLocation, HitNormal, FireSpot, ProjStart, false);
|
||||
}
|
||||
if ( HitActor != None )
|
||||
{
|
||||
FireSpot += HitNormal * 2 * Target.CollisionHeight;
|
||||
if ( Skill >= 4 )
|
||||
{
|
||||
HitActor = Trace(HitLocation, HitNormal, FireSpot, ProjStart, false);
|
||||
if ( HitActor != None )
|
||||
FireSpot += Target.CollisionHeight * HitNormal;
|
||||
}
|
||||
FireDir = Normal(FireSpot - ProjStart);
|
||||
FireRotation = rotator(FireDir);
|
||||
}
|
||||
}
|
||||
|
||||
SetRotation(FireRotation);
|
||||
return FireRotation;
|
||||
}
|
||||
94
kf_sources/KFChar/Classes/KFMutCrazy.uc
Normal file
94
kf_sources/KFChar/Classes/KFMutCrazy.uc
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
//-----------------------------------------------------------
|
||||
// Written by Marco
|
||||
//-----------------------------------------------------------
|
||||
class KFMutCrazy extends Mutator;
|
||||
|
||||
var int LastSetWave;
|
||||
|
||||
function PostBeginPlay()
|
||||
{
|
||||
SetTimer(0.1,False);
|
||||
}
|
||||
function Timer()
|
||||
{
|
||||
local KFGameType KF;
|
||||
local int i,j;
|
||||
|
||||
KF = KFGameType(Level.Game);
|
||||
if ( KF!=None )
|
||||
{
|
||||
for( i=0; i<KF.InitSquads.Length; i++ )
|
||||
{
|
||||
for( j=0; j<KF.InitSquads[i].MSquad.Length; j++ )
|
||||
KF.InitSquads[i].MSquad[j] = GetReplaceClass(KF.InitSquads[i].MSquad[j]);
|
||||
}
|
||||
for( i=0; i<KF.MonsterCollection.default.SpecialSquads.Length; i++ )
|
||||
{
|
||||
for( j=0; j<KF.MonsterCollection.default.SpecialSquads[i].ZedClass.Length; j++ )
|
||||
ReplaceMonsterStr(KF.MonsterCollection.default.SpecialSquads[i].ZedClass[j]);
|
||||
}
|
||||
for( i=0; i<KF.MonsterCollection.default.FinalSquads.Length; i++ )
|
||||
{
|
||||
for( j=0; j<KF.MonsterCollection.default.FinalSquads[i].ZedClass.Length; j++ )
|
||||
ReplaceMonsterStr(KF.MonsterCollection.default.FinalSquads[i].ZedClass[j]);
|
||||
}
|
||||
KF.FallbackMonster = GetReplaceClass( Class<KFMonster>(KF.FallbackMonster) );
|
||||
KF.MonsterCollection.default.EndGameBossClass = string(Class'ZombieBossMix');
|
||||
}
|
||||
Destroy();
|
||||
}
|
||||
final function Class<KFMonster> GetReplaceClass( Class<KFMonster> MC )
|
||||
{
|
||||
switch( MC )
|
||||
{
|
||||
case Class'ZombieClot':
|
||||
return Class'ZombieClotMix';
|
||||
case Class'ZombieBloat':
|
||||
return Class'ZombieBloatMix';
|
||||
case Class'ZombieCrawler':
|
||||
return Class'ZombieCrawlerMix';
|
||||
case Class'ZombieStalker':
|
||||
return Class'ZombieStalkerMix';
|
||||
case Class'ZombieSiren':
|
||||
return Class'ZombieSirenMix';
|
||||
case Class'ZombieScrake':
|
||||
return Class'ZombieScrakeMix';
|
||||
case Class'ZombieFleshPound':
|
||||
return Class'ZombieFleshPoundMix';
|
||||
case Class'ZombieGorefast':
|
||||
return Class'ZombieGorefastMix';
|
||||
case Class'ZombieBoss':
|
||||
return Class'ZombieBossMix';
|
||||
default:
|
||||
return MC;
|
||||
}
|
||||
}
|
||||
final function ReplaceMonsterStr( out string MC )
|
||||
{
|
||||
if( MC~="KFChar.ZombieClot" )
|
||||
MC = "KFChar.ZombieClotMix";
|
||||
else if( MC~="KFChar.ZombieBloat" )
|
||||
MC = "KFChar.ZombieBloatMix";
|
||||
else if( MC~="KFChar.ZombieCrawler" )
|
||||
MC = "KFChar.ZombieCrawlerMix";
|
||||
else if( MC~="KFChar.ZombieStalker" )
|
||||
MC = "KFChar.ZombieStalkerMix";
|
||||
else if( MC~="KFChar.ZombieSiren" )
|
||||
MC = "KFChar.ZombieSirenMix";
|
||||
else if( MC~="KFChar.ZombieScrake" )
|
||||
MC = "KFChar.ZombieScrakeMix";
|
||||
else if( MC~="KFChar.ZombieFleshPound" )
|
||||
MC = "KFChar.ZombieFleshPoundMix";
|
||||
else if( MC~="KFChar.ZombieGorefast" )
|
||||
MC = "KFChar.ZombieGorefastMix";
|
||||
else if( MC~="KFChar.ZombieBoss" )
|
||||
MC = "KFChar.ZombieBossMix";
|
||||
}
|
||||
|
||||
DefaultProperties
|
||||
{
|
||||
GroupName="KF-MonsterMut"
|
||||
FriendlyName = "Scramble Mode!"
|
||||
Description = "Give specimen random models"
|
||||
}
|
||||
|
||||
69
kf_sources/KFChar/Classes/SawZombieController.uc
Normal file
69
kf_sources/KFChar/Classes/SawZombieController.uc
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
class SawZombieController extends KFMonsterController;
|
||||
// Custom Zombie Thinkerating
|
||||
// By : Alex
|
||||
|
||||
var bool bDoneSpottedCheck;
|
||||
|
||||
state ZombieHunt
|
||||
{
|
||||
event SeePlayer(Pawn SeenPlayer)
|
||||
{
|
||||
if ( !bDoneSpottedCheck && PlayerController(SeenPlayer.Controller) != none )
|
||||
{
|
||||
// 25% chance of first player to see this Scrake saying something
|
||||
if ( !KFGameType(Level.Game).bDidSpottedScrakeMessage && FRand() < 0.25 )
|
||||
{
|
||||
PlayerController(SeenPlayer.Controller).Speech('AUTO', 14, "");
|
||||
KFGameType(Level.Game).bDidSpottedScrakeMessage = true;
|
||||
}
|
||||
|
||||
bDoneSpottedCheck = true;
|
||||
}
|
||||
|
||||
super.SeePlayer(SeenPlayer);
|
||||
}
|
||||
}
|
||||
|
||||
function TimedFireWeaponAtEnemy()
|
||||
{
|
||||
if ( (Enemy == None) || FireWeaponAt(Enemy) )
|
||||
SetCombatTimer();
|
||||
else SetTimer(0.01, True);
|
||||
}
|
||||
|
||||
state ZombieCharge
|
||||
{
|
||||
// Don't do this in this state
|
||||
function GetOutOfTheWayOfShot(vector ShotDirection, vector ShotOrigin){}
|
||||
|
||||
function bool StrafeFromDamage(float Damage, class<DamageType> DamageType, bool bFindDest)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
function bool TryStrafe(vector sideDir)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
function Timer()
|
||||
{
|
||||
Disable('NotifyBump');
|
||||
Target = Enemy;
|
||||
TimedFireWeaponAtEnemy();
|
||||
}
|
||||
|
||||
WaitForAnim:
|
||||
|
||||
While( Monster(Pawn).bShotAnim )
|
||||
Sleep(0.25);
|
||||
if ( !FindBestPathToward(Enemy, false,true) )
|
||||
GotoState('ZombieRestFormation');
|
||||
Moving:
|
||||
MoveToward(Enemy);
|
||||
WhatToDoNext(17);
|
||||
if ( bSoaking )
|
||||
SoakStop("STUCK IN CHARGING!");
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
}
|
||||
6
kf_sources/KFChar/Classes/SeveredArmBloat.uc
Normal file
6
kf_sources/KFChar/Classes/SeveredArmBloat.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class SeveredArmBloat extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.bloat_arm_resource'
|
||||
}
|
||||
6
kf_sources/KFChar/Classes/SeveredArmBloat_CIRCUS.uc
Normal file
6
kf_sources/KFChar/Classes/SeveredArmBloat_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class SeveredArmBloat_CIRCUS extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.bloat_clown_Arm_Gore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmBloat_HALLOWEEN.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmBloat_HALLOWEEN.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmBloat_HALLOWEEN extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Bloat.Bloat_RedneckZombie_ArmGore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmBloat_XMas.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmBloat_XMas.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmBloat_XMas extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_xmas.limbs.bloat_santa_arm'
|
||||
}
|
||||
8
kf_sources/KFChar/Classes/SeveredArmClot.uc
Normal file
8
kf_sources/KFChar/Classes/SeveredArmClot.uc
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
class SeveredArmClot extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
DrawType=DT_Mesh
|
||||
//StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.Clot_Arm_resource'
|
||||
mesh=SkeletalMesh'KF_Gibbs_Trip.Clot_Arm'
|
||||
}
|
||||
6
kf_sources/KFChar/Classes/SeveredArmClot_CIRCUS.uc
Normal file
6
kf_sources/KFChar/Classes/SeveredArmClot_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class SeveredArmClot_CIRCUS extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.clot_Circus_Arm_Gore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmClot_HALLOWEEN.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmClot_HALLOWEEN.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmClot_HALLOWEEN extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Clot.Clot_RedneckZombie_Gore_Arm'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmClot_XMas.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmClot_XMas.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmClot_XMas extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_xmas.limbs.elf_arm'
|
||||
}
|
||||
6
kf_sources/KFChar/Classes/SeveredArmCrawler.uc
Normal file
6
kf_sources/KFChar/Classes/SeveredArmCrawler.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class SeveredArmCrawler extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.crawler_arm_resource'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmCrawler_CIRCUS.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmCrawler_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmCrawler_CIRCUS extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.crawler_circus_Arm_Gore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmCrawler_HALLOWEEN.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmCrawler_HALLOWEEN.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmCrawler_HALLOWEEN extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Crawler.Crawler_RedneckZombie_Gore_Arm'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmCrawler_XMas.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmCrawler_XMas.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmCrawler_XMas extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_xmas.limbs.reindeer_arm'
|
||||
}
|
||||
6
kf_sources/KFChar/Classes/SeveredArmGorefast.uc
Normal file
6
kf_sources/KFChar/Classes/SeveredArmGorefast.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class SeveredArmGorefast extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.gorefast_arm_resource'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmGorefast_CIRCUS.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmGorefast_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmGorefast_CIRCUS extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.gorefast_circus_Arm_gore'
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmGorefast_HALLOWEEN extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Gorefast.Gorefast_RedneckZombie_Gore_Arm'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmGorefast_XMas.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmGorefast_XMas.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmGorefast_XMas extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_xmas.limbs.cookie_arm'
|
||||
}
|
||||
6
kf_sources/KFChar/Classes/SeveredArmHusk.uc
Normal file
6
kf_sources/KFChar/Classes/SeveredArmHusk.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class SeveredArmHusk extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.husk_arm'
|
||||
}
|
||||
6
kf_sources/KFChar/Classes/SeveredArmHuskGun.uc
Normal file
6
kf_sources/KFChar/Classes/SeveredArmHuskGun.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class SeveredArmHuskGun extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.husk_gun'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmHuskGun_HALLOWEEN.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmHuskGun_HALLOWEEN.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmHuskGun_HALLOWEEN extends SeveredArm;
|
||||
|
||||
DefaultProperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Husk.Husk_RedneckZombie_Gore_Gun'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmHusk_CIRCUS.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmHusk_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmHusk_CIRCUS extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.husk_circus_arm_gore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmHusk_HALLOWEEN.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmHusk_HALLOWEEN.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmHusk_HALLOWEEN extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Husk.Husk_RedneckZombie_Gore_Arm'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmHusk_XMas.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmHusk_XMas.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmHusk_XMas extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_xmas.limbs.snowman_arm'
|
||||
}
|
||||
6
kf_sources/KFChar/Classes/SeveredArmPatriarch.uc
Normal file
6
kf_sources/KFChar/Classes/SeveredArmPatriarch.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class SeveredArmPatriarch extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.patriarch_arm_resource'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmPatriarch_CIRCUS.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmPatriarch_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmPatriarch_CIRCUS extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.Patriarch_CIRCUS_Arm_Gore'
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmPatriarch_HALLOWEEN extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Patriarch.Patriarch_RedneckZombie_ArmGore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmPatriarch_XMas.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmPatriarch_XMas.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmPatriarch_XMas extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_xmas.limbs.robo_santa_arm'
|
||||
}
|
||||
6
kf_sources/KFChar/Classes/SeveredArmPound.uc
Normal file
6
kf_sources/KFChar/Classes/SeveredArmPound.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class SeveredArmPound extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.fleshpound_arm_resource'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmPound_CIRCUS.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmPound_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmPound_CIRCUS extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.fleshpound_CIRCUS_arm_gore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmPound_HALLOWEEN.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmPound_HALLOWEEN.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmPound_HALLOWEEN extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Fleshpound.Fleshpound_RedneckZombie_ArmGore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmPound_XMas.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmPound_XMas.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmPound_XMas extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_xmas.limbs.nutpound_arm'
|
||||
}
|
||||
6
kf_sources/KFChar/Classes/SeveredArmScrake.uc
Normal file
6
kf_sources/KFChar/Classes/SeveredArmScrake.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class SeveredArmScrake extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.scrake_arm_resource'
|
||||
}
|
||||
6
kf_sources/KFChar/Classes/SeveredArmScrakeSaw.uc
Normal file
6
kf_sources/KFChar/Classes/SeveredArmScrakeSaw.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class SeveredArmScrakeSaw extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.scrake_chainsaw_arm_resource'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmScrakeSaw_CIRCUS.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmScrakeSaw_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmScrakeSaw_CIRCUS extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.scrake_chainsaw_arm_resource'
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmScrakeSaw_HALLOWEEN extends SeveredArm;
|
||||
|
||||
DefaultProperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Scrake.Scrake_RedneckZombie_ArmGore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmScrakeSaw_XMas.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmScrakeSaw_XMas.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmScrakeSaw_XMas extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_xmas.limbs.scrake_frost_blade_arm'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmScrake_CIRCUS.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmScrake_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmScrake_CIRCUS extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.scrake_Circus_Arm_Gore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmScrake_HALLOWEEN.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmScrake_HALLOWEEN.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmScrake_HALLOWEEN extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Scrake.Scrake_RedneckZombie_Left_ArmGore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmScrake_XMas.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmScrake_XMas.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmScrake_XMas extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_xmas.limbs.scrake_frost_arm'
|
||||
}
|
||||
6
kf_sources/KFChar/Classes/SeveredArmStalker.uc
Normal file
6
kf_sources/KFChar/Classes/SeveredArmStalker.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class SeveredArmStalker extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.stalker_arm_resource'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmStalker_CIRCUS.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmStalker_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmStalker_CIRCUS extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.stalker_circus_Arm_Gore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmStalker_HALLOWEEN.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmStalker_HALLOWEEN.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmStalker_HALLOWEEN extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Stalker.Stalker_RedneckZombie_Gore_Arm'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredArmStalker_XMas.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredArmStalker_XMas.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredArmStalker_XMas extends SeveredArm;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_xmas.limbs.stalker_misssanta_arm'
|
||||
}
|
||||
16
kf_sources/KFChar/Classes/SeveredHeadBloat.uc
Normal file
16
kf_sources/KFChar/Classes/SeveredHeadBloat.uc
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
//=============================================================================
|
||||
// SeveredHeadBloat
|
||||
//=============================================================================
|
||||
// Detached head gib class for the bloat
|
||||
//=============================================================================
|
||||
// Killing Floor Source
|
||||
// Copyright (C) 2009 Tripwire Interactive LLC
|
||||
// - John "Ramm-Jaeger" Gibson
|
||||
//=============================================================================
|
||||
|
||||
class SeveredHeadBloat extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.heads.bloathead'
|
||||
}
|
||||
16
kf_sources/KFChar/Classes/SeveredHeadBloat_CIRCUS.uc
Normal file
16
kf_sources/KFChar/Classes/SeveredHeadBloat_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
//=============================================================================
|
||||
// SeveredHeadBloat
|
||||
//=============================================================================
|
||||
// Detached head gib class for the bloat
|
||||
//=============================================================================
|
||||
// Killing Floor Source
|
||||
// Copyright (C) 2009 Tripwire Interactive LLC
|
||||
// - John "Ramm-Jaeger" Gibson
|
||||
//=============================================================================
|
||||
|
||||
class SeveredHeadBloat_CIRCUS extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.bloat_clown_Head_Gore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadBloat_HALLOWEEN.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadBloat_HALLOWEEN.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadBloat_HALLOWEEN extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Bloat.Bloat_RedneckZombie_HeadGore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadBloat_XMas.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadBloat_XMas.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadBloat_XMas extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh'kf_gore_trip_sm_xmas.limbs.bloat_santa_head'
|
||||
}
|
||||
16
kf_sources/KFChar/Classes/SeveredHeadClot.uc
Normal file
16
kf_sources/KFChar/Classes/SeveredHeadClot.uc
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
//=============================================================================
|
||||
// SeveredHeadClot
|
||||
//=============================================================================
|
||||
// Detached head gib class for the clot
|
||||
//=============================================================================
|
||||
// Killing Floor Source
|
||||
// Copyright (C) 2009 Tripwire Interactive LLC
|
||||
// - John "Ramm-Jaeger" Gibson
|
||||
//=============================================================================
|
||||
|
||||
class SeveredHeadClot extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.gibbs.clothead'
|
||||
}
|
||||
16
kf_sources/KFChar/Classes/SeveredHeadClot_CIRCUS.uc
Normal file
16
kf_sources/KFChar/Classes/SeveredHeadClot_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
//=============================================================================
|
||||
// SeveredHeadClot
|
||||
//=============================================================================
|
||||
// Detached head gib class for the clot
|
||||
//=============================================================================
|
||||
// Killing Floor Source
|
||||
// Copyright (C) 2009 Tripwire Interactive LLC
|
||||
// - John "Ramm-Jaeger" Gibson
|
||||
//=============================================================================
|
||||
|
||||
class SeveredHeadClot_CIRCUS extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.clot_Circus_Head_Gore'
|
||||
}
|
||||
10
kf_sources/KFChar/Classes/SeveredHeadClot_HALLOWEEN.uc
Normal file
10
kf_sources/KFChar/Classes/SeveredHeadClot_HALLOWEEN.uc
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadClot_HALLOWEEN extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Clot.Clot_RedneckZombie_Gore_head'
|
||||
}
|
||||
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadClot_XMas.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadClot_XMas.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadClot_XMas extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_xmas.limbs.elf_head'
|
||||
}
|
||||
16
kf_sources/KFChar/Classes/SeveredHeadCrawler.uc
Normal file
16
kf_sources/KFChar/Classes/SeveredHeadCrawler.uc
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
//=============================================================================
|
||||
// SeveredHeadCrawler
|
||||
//=============================================================================
|
||||
// Detached head gib class for the crawler
|
||||
//=============================================================================
|
||||
// Killing Floor Source
|
||||
// Copyright (C) 2009 Tripwire Interactive LLC
|
||||
// - John "Ramm-Jaeger" Gibson
|
||||
//=============================================================================
|
||||
|
||||
class SeveredHeadCrawler extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.heads.crawlerhead'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadCrawler_CIRCUS.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadCrawler_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadCrawler_CIRCUS extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.crawler_circus_Head_Gore'
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadCrawler_HALLOWEEN extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Crawler.crawler_RedneckZombie_Gore_Head'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadCrawler_XMas.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadCrawler_XMas.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadCrawler_XMas extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_xmas.limbs.reindeer_head'
|
||||
}
|
||||
16
kf_sources/KFChar/Classes/SeveredHeadGorefast.uc
Normal file
16
kf_sources/KFChar/Classes/SeveredHeadGorefast.uc
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
//=============================================================================
|
||||
// SeveredHeadGorefast
|
||||
//=============================================================================
|
||||
// Detached head gib class for the gorefast
|
||||
//=============================================================================
|
||||
// Killing Floor Source
|
||||
// Copyright (C) 2009 Tripwire Interactive LLC
|
||||
// - John "Ramm-Jaeger" Gibson
|
||||
//=============================================================================
|
||||
|
||||
class SeveredHeadGorefast extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.heads.gorefasthead'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadGorefast_CIRCUS.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadGorefast_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadGorefast_CIRCUS extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.gorefast_circus_Head_gore'
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadGorefast_HALLOWEEN extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Gorefast.gorefast_RedneckZombie_Gore_Head'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadGorefast_XMas.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadGorefast_XMas.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadGorefast_XMas extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_xmas.limbs.cookie_head'
|
||||
}
|
||||
16
kf_sources/KFChar/Classes/SeveredHeadHusk.uc
Normal file
16
kf_sources/KFChar/Classes/SeveredHeadHusk.uc
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
//=============================================================================
|
||||
// SeveredHeadHusk
|
||||
//=============================================================================
|
||||
// Detached head gib class for the Husk
|
||||
//=============================================================================
|
||||
// Killing Floor Source
|
||||
// Copyright (C) 2009 Tripwire Interactive LLC
|
||||
// - John "Ramm-Jaeger" Gibson
|
||||
//=============================================================================
|
||||
|
||||
class SeveredHeadHusk extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.husk_head'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadHusk_CIRCUS.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadHusk_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadHusk_CIRCUS extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.husk_circus_head_gore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadHusk_HALLOWEEN.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadHusk_HALLOWEEN.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadHusk_HALLOWEEN extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Husk.Husk_RedneckZombie_Gore_Head'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadHusk_XMas.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadHusk_XMas.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadHusk_XMas extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_xmas.limbs.snowman_head'
|
||||
}
|
||||
16
kf_sources/KFChar/Classes/SeveredHeadPatriarch.uc
Normal file
16
kf_sources/KFChar/Classes/SeveredHeadPatriarch.uc
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
//=============================================================================
|
||||
// SeveredHeadPatriarch
|
||||
//=============================================================================
|
||||
// Detached head gib class for the Patriarch
|
||||
//=============================================================================
|
||||
// Killing Floor Source
|
||||
// Copyright (C) 2009 Tripwire Interactive LLC
|
||||
// - John "Ramm-Jaeger" Gibson
|
||||
//=============================================================================
|
||||
|
||||
class SeveredHeadPatriarch extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.heads.patriarchhead'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadPatriarch_CIRCUS.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadPatriarch_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadPatriarch_CIRCUS extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.Patriarch_CIRCUS_Head_Gore'
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadPatriarch_HALLOWEEN extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Patriarch.Patriarch_RedneckZombie_HeadGore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadPatriarch_XMas.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadPatriarch_XMas.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadPatriarch_XMas extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_xmas.limbs.robo_santa_head'
|
||||
}
|
||||
16
kf_sources/KFChar/Classes/SeveredHeadPound.uc
Normal file
16
kf_sources/KFChar/Classes/SeveredHeadPound.uc
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
//=============================================================================
|
||||
// SeveredHeadPound
|
||||
//=============================================================================
|
||||
// Detached head gib class for the FleshPound
|
||||
//=============================================================================
|
||||
// Killing Floor Source
|
||||
// Copyright (C) 2009 Tripwire Interactive LLC
|
||||
// - John "Ramm-Jaeger" Gibson
|
||||
//=============================================================================
|
||||
|
||||
class SeveredHeadPound extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.heads.fleshpoundhead'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadPound_CIRCUS.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadPound_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadPound_CIRCUS extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.fleshpound_CIRCUS_head_gore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadPound_HALLOWEEN.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadPound_HALLOWEEN.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadPound_HALLOWEEN extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Fleshpound.Fleshpound_RedneckZombie_HeadGore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadPound_XMas.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadPound_XMas.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadPound_XMas extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_xmas.limbs.nutpound_head'
|
||||
}
|
||||
16
kf_sources/KFChar/Classes/SeveredHeadScrake.uc
Normal file
16
kf_sources/KFChar/Classes/SeveredHeadScrake.uc
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
//=============================================================================
|
||||
// SeveredHeadScrake
|
||||
//=============================================================================
|
||||
// Detached head gib class for the scrake
|
||||
//=============================================================================
|
||||
// Killing Floor Source
|
||||
// Copyright (C) 2009 Tripwire Interactive LLC
|
||||
// - John "Ramm-Jaeger" Gibson
|
||||
//=============================================================================
|
||||
|
||||
class SeveredHeadScrake extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.heads.scrakehead'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadScrake_CIRCUS.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadScrake_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadScrake_CIRCUS extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.scrake_Circus_Head_Gore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadScrake_HALLOWEEN.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadScrake_HALLOWEEN.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadScrake_HALLOWEEN extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Scrake.Scrake_RedneckZombie_HeadGore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadScrake_XMas.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadScrake_XMas.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadScrake_XMas extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_xmas.limbs.scrake_frost_head'
|
||||
}
|
||||
16
kf_sources/KFChar/Classes/SeveredHeadSiren.uc
Normal file
16
kf_sources/KFChar/Classes/SeveredHeadSiren.uc
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
//=============================================================================
|
||||
// SeveredHeadSiren
|
||||
//=============================================================================
|
||||
// Detached head gib class for the Siren
|
||||
//=============================================================================
|
||||
// Killing Floor Source
|
||||
// Copyright (C) 2009 Tripwire Interactive LLC
|
||||
// - John "Ramm-Jaeger" Gibson
|
||||
//=============================================================================
|
||||
|
||||
class SeveredHeadSiren extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.heads.sirenhead'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadSiren_CIRCUS.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadSiren_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//=============================================================================
|
||||
//
|
||||
//=============================================================================
|
||||
class SeveredHeadSiren_CIRCUS extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.siren_CIRCUS_Head_Gore'
|
||||
}
|
||||
9
kf_sources/KFChar/Classes/SeveredHeadSiren_HALLOWEEN.uc
Normal file
9
kf_sources/KFChar/Classes/SeveredHeadSiren_HALLOWEEN.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class SeveredHeadSiren_HALLOWEEN extends SeveredHead;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Siren.Siren_RedneckZombie_HeadGore'
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue