ZedternalReborn Zeds
This commit is contained in:
parent
1ce9c41aa4
commit
2572ae30a7
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[submodule "tools"]
|
||||||
|
path = tools
|
||||||
|
url = https://github.com/GenZmeY/KF2-BuildTools
|
@ -0,0 +1,50 @@
|
|||||||
|
class WMAICommand_HuskOmegaFireBallBarrageAttack extends AICommand_RangedAttack
|
||||||
|
within WMAIController_ZedHusk_Omega;
|
||||||
|
|
||||||
|
/** Simple constructor that pushes a new instance of the command for the AI */
|
||||||
|
static function bool FireBallBarrageAttack(WMAIController_ZedHusk_Omega AI)
|
||||||
|
{
|
||||||
|
local WMAICommand_HuskOmegaFireBallBarrageAttack Cmd;
|
||||||
|
|
||||||
|
if (AI != None)
|
||||||
|
{
|
||||||
|
Cmd = new(AI) default.class;
|
||||||
|
if (Cmd != None)
|
||||||
|
{
|
||||||
|
AI.PushCommand(Cmd);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
state Command_SpecialMove
|
||||||
|
{
|
||||||
|
function ESpecialMove GetSpecialMove()
|
||||||
|
{
|
||||||
|
return SM_Custom1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function Pushed()
|
||||||
|
{
|
||||||
|
Super.Pushed();
|
||||||
|
|
||||||
|
`AILog("Beginning fireball barrage" $ Enemy, 'Command_FireBall_Barrage');
|
||||||
|
AIActionStatus = "Starting fireball barrage AICommand";
|
||||||
|
}
|
||||||
|
|
||||||
|
function Popped()
|
||||||
|
{
|
||||||
|
AIActionStatus = "Finished fireball barrage AICommand";
|
||||||
|
LastFireBallBarrageTime = WorldInfo.TimeSeconds;
|
||||||
|
Super.Popped();
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
SpecialMoveClass=class'CustomZeds.WMSM_Husk_Omega_FireBallBarrageAttack'
|
||||||
|
|
||||||
|
Name="Default__WMAICommand_HuskOmegaFireBallBarrageAttack"
|
||||||
|
}
|
19
CustomZeds/Classes/WMAIController_ZedFleshpound_Predator.uc
Normal file
19
CustomZeds/Classes/WMAIController_ZedFleshpound_Predator.uc
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
class WMAIController_ZedFleshpound_Predator extends KFAIController_ZedFleshpound;
|
||||||
|
|
||||||
|
function InitPlayerReplicationInfo()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated event byte ScriptGetTeamNum()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
bAllowScriptTeamCheck=True
|
||||||
|
TeleportCooldown=4.0f
|
||||||
|
EvadeGrenadeChance=1.0f
|
||||||
|
|
||||||
|
Name="Default__WMAIController_ZedFleshpound_Predator"
|
||||||
|
}
|
14
CustomZeds/Classes/WMAIController_ZedGorefast_Omega.uc
Normal file
14
CustomZeds/Classes/WMAIController_ZedGorefast_Omega.uc
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
class WMAIController_ZedGorefast_Omega extends KFAIController_ZedGorefast;
|
||||||
|
|
||||||
|
function bool ShouldSprint()
|
||||||
|
{
|
||||||
|
bForceFrustration = True;
|
||||||
|
return super.ShouldSprint();
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
EvadeGrenadeChance=1.0f
|
||||||
|
|
||||||
|
Name="Default__WMAIController_ZedGorefast_Omega"
|
||||||
|
}
|
272
CustomZeds/Classes/WMAIController_ZedHusk_Omega.uc
Normal file
272
CustomZeds/Classes/WMAIController_ZedHusk_Omega.uc
Normal file
@ -0,0 +1,272 @@
|
|||||||
|
class WMAIController_ZedHusk_Omega extends KFAIController_ZedHusk;
|
||||||
|
|
||||||
|
var float LastFireBallBarrageTime;
|
||||||
|
var float BaseTimeBetweenFireBallBarrages;
|
||||||
|
var float TimeBetweenFireBallBarrages;
|
||||||
|
var float FireballBarrageRandomizedValue;
|
||||||
|
var int MinDistanceForFireBallBarrage;
|
||||||
|
var int MaxDistanceForFireBallBarrage;
|
||||||
|
|
||||||
|
var float BaseHealthPercentForSprint;
|
||||||
|
|
||||||
|
var const float FireballBarrageFireIntervalNormal;
|
||||||
|
var const float FireballBarrageFireIntervalHard;
|
||||||
|
var const float FireballBarrageFireIntervalSuicidal;
|
||||||
|
var const float FireballBarrageFireIntervalHellOnEarth;
|
||||||
|
|
||||||
|
var const float RequiredHealthPercentForSprintNormal;
|
||||||
|
var const float RequiredHealthPercentForSprintHard;
|
||||||
|
var const float RequiredHealthPercentForSprintSuicidal;
|
||||||
|
var const float RequiredHealthPercentForSprintHellOnEarth;
|
||||||
|
|
||||||
|
event PostBeginPlay()
|
||||||
|
{
|
||||||
|
super.PostBeginPlay();
|
||||||
|
|
||||||
|
if (Skill == class'KFGameDifficultyInfo'.static.GetDifficultyValue(0)) // Normal
|
||||||
|
{
|
||||||
|
BaseTimeBetweenFireBallBarrages = FireballBarrageFireIntervalNormal;
|
||||||
|
BaseHealthPercentForSprint = RequiredHealthPercentForSprintNormal;
|
||||||
|
}
|
||||||
|
else if (Skill <= class'KFGameDifficultyInfo'.static.GetDifficultyValue(1)) // Hard
|
||||||
|
{
|
||||||
|
BaseTimeBetweenFireBallBarrages = FireballBarrageFireIntervalHard;
|
||||||
|
BaseHealthPercentForSprint = RequiredHealthPercentForSprintHard;
|
||||||
|
}
|
||||||
|
else if (Skill <= class'KFGameDifficultyInfo'.static.GetDifficultyValue(2)) // Suicidal
|
||||||
|
{
|
||||||
|
BaseTimeBetweenFireBallBarrages = FireballBarrageFireIntervalSuicidal;
|
||||||
|
BaseHealthPercentForSprint = RequiredHealthPercentForSprintSuicidal;
|
||||||
|
}
|
||||||
|
else // Hell on Earth
|
||||||
|
{
|
||||||
|
BaseTimeBetweenFireBallBarrages = FireballBarrageFireIntervalHellOnEarth;
|
||||||
|
BaseHealthPercentForSprint = RequiredHealthPercentForSprintHellOnEarth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function Tick(float DeltaTime)
|
||||||
|
{
|
||||||
|
local float DistToTargetSq;
|
||||||
|
|
||||||
|
if (Role == ROLE_Authority && Enemy != None && MyKFPawn != None)
|
||||||
|
{
|
||||||
|
if (`TimeSince(LastCheckSpecialMoveTime) >= CheckSpecialMoveTime && !MyKFPawn.IsDoingSpecialMove())
|
||||||
|
{
|
||||||
|
if (GetActiveCommand() != None && !GetActiveCommand().IsA('AICommand_SpecialMove'))
|
||||||
|
{
|
||||||
|
if (WorldInfo.FastTrace(Enemy.Location, Pawn.Location, , True))
|
||||||
|
{
|
||||||
|
DistToTargetSq = VSizeSq(Enemy.Location - Pawn.Location);
|
||||||
|
if (!IsSuicidal() && CanDoFireballBarrage(DistToTargetSq))
|
||||||
|
{
|
||||||
|
if (KFGameInfo(WorldInfo.Game) != None && KFGameInfo(WorldInfo.Game).GameConductor != None)
|
||||||
|
{
|
||||||
|
KFGameInfo(WorldInfo.Game).GameConductor.UpdateOverallAttackCoolDowns(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
class'WMAICommand_HuskOmegaFireBallBarrageAttack'.static.FireBallBarrageAttack(self);
|
||||||
|
TimeBetweenFireBallBarrages = BaseTimeBetweenFireBallBarrages + RandRange(-FireballBarrageRandomizedValue, FireballBarrageRandomizedValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
super.Tick(DeltaTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
function bool CanDoFireballBarrage(float DistToTargetSq)
|
||||||
|
{
|
||||||
|
if(!CheckOverallCooldownTimer())
|
||||||
|
return False;
|
||||||
|
|
||||||
|
return ((LastFireBallBarrageTime == 0 || (`TimeSince(LastFireBallBarrageTime) > TimeBetweenFireBallBarrages))
|
||||||
|
&& DistToTargetSq >= Square(MinDistanceForFireBallBarrage)
|
||||||
|
&& DistToTargetSq <= Square(MaxDistanceForFireBallBarrage)
|
||||||
|
&& MyKFPawn.CanDoSpecialMove(SM_Custom1))
|
||||||
|
&& IsCeilingClear();
|
||||||
|
}
|
||||||
|
|
||||||
|
function bool IsCeilingClear()
|
||||||
|
{
|
||||||
|
local vector TraceStart, TraceEnd, Extent;
|
||||||
|
|
||||||
|
if (MyKFPawn == None)
|
||||||
|
{
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
|
||||||
|
TraceStart = MyKFPawn.Location + vect(0,0,1) * MyKFPawn.GetCollisionHeight();
|
||||||
|
TraceEnd = TraceStart + vect(0,0,1) * 175.0f;
|
||||||
|
Extent.X = MyKFPawn.GetCollisionRadius() * 2.0f;
|
||||||
|
Extent.Y = Extent.X;
|
||||||
|
Extent.Z = 1.0f;
|
||||||
|
|
||||||
|
return MyKFPawn.FastTrace(TraceEnd, TraceStart, Extent, True);
|
||||||
|
}
|
||||||
|
|
||||||
|
function bool ShouldSprint()
|
||||||
|
{
|
||||||
|
if (GetHealthPercentage() <= BaseHealthPercentForSprint)
|
||||||
|
return True;
|
||||||
|
else
|
||||||
|
return super.ShouldSprint();
|
||||||
|
}
|
||||||
|
|
||||||
|
function ShootRandomFireball(class<KFProj_Husk_Fireball> FireballClass)
|
||||||
|
{
|
||||||
|
local vector SocketLocation, DirToEnemy;
|
||||||
|
local KFProj_Husk_Fireball MyFireball;
|
||||||
|
local vector randVectorDraw;
|
||||||
|
local KFPawn_ZedHusk MyHuskPawn;
|
||||||
|
|
||||||
|
if (MyKFPawn == None)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SocketLocation = MyKFPawn.GetPawnViewLocation();
|
||||||
|
if (Role == ROLE_Authority)
|
||||||
|
{
|
||||||
|
randVectorDraw.X = FRand() * 2.0f - 1.0f;
|
||||||
|
randVectorDraw.Y = FRand() * 2.0f - 1.0f;
|
||||||
|
randVectorDraw.Z = FRand() + 0.1f;
|
||||||
|
DirToEnemy = normal(randVectorDraw);
|
||||||
|
|
||||||
|
MyHuskPawn = KFPawn_ZedHusk(MyKFPawn);
|
||||||
|
|
||||||
|
// Shoot the fireball
|
||||||
|
MyFireball = Spawn(FireballClass, MyKFPawn, , SocketLocation, Rotator(DirToEnemy));
|
||||||
|
MyFireball.Instigator = MyKFPawn;
|
||||||
|
MyFireball.InstigatorController = self;
|
||||||
|
|
||||||
|
// Set our difficulty setings
|
||||||
|
MyFireball.ExplosionTemplate.MomentumTransferScale = MyHuskPawn.FireballSettings.ExplosionMomentum * 0.5f;
|
||||||
|
MyFireball.bSpawnGroundFire = False;
|
||||||
|
|
||||||
|
// Fire
|
||||||
|
MyFireball.Init(DirToEnemy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function ShootFireballBarrage(class<KFProj_Husk_Fireball> FireballClass, vector FireballOffset)
|
||||||
|
{
|
||||||
|
local vector SocketLocation, DirToEnemy;
|
||||||
|
local KFProj_Husk_Fireball MyFireball;
|
||||||
|
local Vector AimLocation, GroundAimLocation;
|
||||||
|
local float SplashAimChance;
|
||||||
|
local vector randVectorDraw;
|
||||||
|
local float randDraw;
|
||||||
|
local KFPawn_ZedHusk MyHuskPawn;
|
||||||
|
|
||||||
|
if (MyKFPawn == None)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SocketLocation = MyKFPawn.GetPawnViewLocation() + (FireballOffset >> Pawn.GetViewRotation());
|
||||||
|
if (MyKFPawn.Health > 0.0f && Role == ROLE_Authority)
|
||||||
|
{
|
||||||
|
AimLocation = Enemy.Location;
|
||||||
|
|
||||||
|
SplashAimChance = 0.6f;
|
||||||
|
|
||||||
|
randDraw = FRand();
|
||||||
|
|
||||||
|
if (randDraw < SplashAimChance)
|
||||||
|
{
|
||||||
|
// Simple pass at making the Husk try and do splash damage when it shoots at a player rather than just shoot directly at them (and most likely miss)
|
||||||
|
GroundAimLocation = Enemy.Location - (vect(0,0,1) * Enemy.GetCollisionHeight());
|
||||||
|
|
||||||
|
if (GroundAimLocation.Z < SocketLocation.Z)
|
||||||
|
{
|
||||||
|
AimLocation = GroundAimLocation;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
randVectorDraw = VRand();
|
||||||
|
DirToEnemy = normal(AimLocation - SocketLocation) + randVectorDraw * FireballAimError;
|
||||||
|
|
||||||
|
DirToEnemy.Z = 1.1f + FRand() * 0.3f;
|
||||||
|
DirToEnemy.X += FRand() * 0.2f - 0.1f;
|
||||||
|
DirToEnemy.Y += FRand() * 0.2f - 0.1f;
|
||||||
|
DirToEnemy = normal(DirToEnemy);
|
||||||
|
|
||||||
|
MyHuskPawn = KFPawn_ZedHusk(MyKFPawn);
|
||||||
|
|
||||||
|
// Shoot the fireball
|
||||||
|
MyFireball = Spawn(FireballClass, MyKFPawn,, SocketLocation, Rotator(DirToEnemy));
|
||||||
|
MyFireball.Instigator = MyKFPawn;
|
||||||
|
MyFireball.InstigatorController = self;
|
||||||
|
|
||||||
|
// Set our difficulty setings
|
||||||
|
MyFireball.ExplosionTemplate.MomentumTransferScale = MyHuskPawn.FireballSettings.ExplosionMomentum;
|
||||||
|
MyFireball.bSpawnGroundFire = MyHuskPawn.FireballSettings.bSpawnGroundFire;
|
||||||
|
|
||||||
|
// Fire
|
||||||
|
MyFireball.Init(DirToEnemy);
|
||||||
|
|
||||||
|
LastFireBallBarrageTime = WorldInfo.TimeSeconds;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
bUseDesiredRotationForMelee=False
|
||||||
|
bCanTeleportCloser=False
|
||||||
|
|
||||||
|
// Behaviors
|
||||||
|
EvadeGrenadeChance=0.8f
|
||||||
|
CheckSpecialMoveTime=0.25f
|
||||||
|
|
||||||
|
// Fireball
|
||||||
|
MinDistanceForFireBall=300
|
||||||
|
MaxDistanceForFireBall=3000
|
||||||
|
|
||||||
|
FireballFireIntervalNormal=4.0f
|
||||||
|
FireballFireIntervalHard=3.3f
|
||||||
|
FireballFireIntervalSuicidal=2.8f
|
||||||
|
FireballFireIntervalHellOnEarth=2.2f
|
||||||
|
|
||||||
|
FireballRandomizedValue=2.5f
|
||||||
|
|
||||||
|
SplashAimChanceNormal=0.25f
|
||||||
|
SplashAimChanceHard=0.35f
|
||||||
|
SplashAimChanceSuicidal=0.5f
|
||||||
|
SplashAimChanceHellOnEarth=0.75f
|
||||||
|
|
||||||
|
FireballSpeed=4100.0f
|
||||||
|
FireballAimError=0.03f
|
||||||
|
FireballLeadTargetAimError=0.03f
|
||||||
|
bDebugAimError=False
|
||||||
|
bCanLeadTarget=False
|
||||||
|
|
||||||
|
// Fireball Barrage
|
||||||
|
MinDistanceForFireBallBarrage=600
|
||||||
|
MaxDistanceForFireBallBarrage=750
|
||||||
|
|
||||||
|
FireballBarrageFireIntervalNormal=3.5f
|
||||||
|
FireballBarrageFireIntervalHard=3.0f
|
||||||
|
FireballBarrageFireIntervalSuicidal=2.5f
|
||||||
|
FireballBarrageFireIntervalHellOnEarth=2.0f
|
||||||
|
|
||||||
|
FireballBarrageRandomizedValue=2.0f
|
||||||
|
|
||||||
|
// Sprint
|
||||||
|
RequiredHealthPercentForSprintNormal=0.7f
|
||||||
|
RequiredHealthPercentForSprintHard=0.8f
|
||||||
|
RequiredHealthPercentForSprintSuicidal=0.87f
|
||||||
|
RequiredHealthPercentForSprintHellOnEarth=0.95f
|
||||||
|
|
||||||
|
// FlameThrower
|
||||||
|
TimeBetweenFlameThrower=8.0f
|
||||||
|
MaxDistanceForFlameThrower=450
|
||||||
|
LowIntensityAttackScaleOfFireballInterval=1.25f
|
||||||
|
|
||||||
|
// Suicide
|
||||||
|
MinDistanceToSuicide=425
|
||||||
|
RequiredHealthPercentForSuicide=0.2f
|
||||||
|
|
||||||
|
Name="Default__WMAIController_ZedHusk_Omega"
|
||||||
|
}
|
12
CustomZeds/Classes/WMDifficulty_Crawler_Big.uc
Normal file
12
CustomZeds/Classes/WMDifficulty_Crawler_Big.uc
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
class WMDifficulty_Crawler_Big extends KFDifficulty_Crawler
|
||||||
|
abstract;
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
Normal=(EvadeOnDamageSettings=(Chance=0.0f))
|
||||||
|
Hard=(EvadeOnDamageSettings=(Chance=0.0f))
|
||||||
|
Suicidal=(MovementSpeedMod=1.1f, EvadeOnDamageSettings=(Chance=0.0f))
|
||||||
|
HellOnEarth=(MovementSpeedMod=1.15f, EvadeOnDamageSettings=(Chance=0.0f))
|
||||||
|
|
||||||
|
Name="Default__WMDifficulty_Crawler_Big"
|
||||||
|
}
|
12
CustomZeds/Classes/WMDifficulty_Gorefast_Omega.uc
Normal file
12
CustomZeds/Classes/WMDifficulty_Gorefast_Omega.uc
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
class WMDifficulty_Gorefast_Omega extends KFDifficulty_Gorefast
|
||||||
|
abstract;
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
Normal=(HealthMod=0.85f, HeadHealthMod=0.85f, BlockSettings=(Chance=0.75f))
|
||||||
|
Hard=(BlockSettings=(Chance=0.80f), RallySettings=(bCanRally=True))
|
||||||
|
Suicidal=(BlockSettings=(Chance=0.85f))
|
||||||
|
HellOnEarth=(BlockSettings=(Chance=0.9f))
|
||||||
|
|
||||||
|
Name="Default__WMDifficulty_Gorefast_Omega"
|
||||||
|
}
|
17
CustomZeds/Classes/WMDifficulty_Husk_Omega.uc
Normal file
17
CustomZeds/Classes/WMDifficulty_Husk_Omega.uc
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
class WMDifficulty_Husk_Omega extends KFDifficulty_Husk
|
||||||
|
dependsOn(WMPawn_ZedHusk_Omega)
|
||||||
|
abstract;
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
Normal=(HealthMod=0.85f,HeadHealthMod=0.85f)
|
||||||
|
Hard=(DamagedSprintChance=0.35f)
|
||||||
|
Suicidal=(DamagedSprintChance=0.5f)
|
||||||
|
HellOnEarth=(HealthMod=1.1f,SprintChance=0.65f)
|
||||||
|
|
||||||
|
FireballSettings(`DIFFICULTY_Normal)=(bSpawnGroundFire=True)
|
||||||
|
FireballSettings(`DIFFICULTY_Hard)=(bSpawnGroundFire=True)
|
||||||
|
FireballSettings_Versus=(bSpawnGroundFire=True)
|
||||||
|
|
||||||
|
Name="Default__WMDifficulty_Husk_Omega"
|
||||||
|
}
|
18
CustomZeds/Classes/WMDifficulty_Scrake_Emperor.uc
Normal file
18
CustomZeds/Classes/WMDifficulty_Scrake_Emperor.uc
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
class WMDifficulty_Scrake_Emperor extends KFDifficulty_Scrake
|
||||||
|
abstract;
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
Normal=(BlockSettings=(Duration=3.0f))
|
||||||
|
Hard=(BlockSettings=(Duration=3.0f))
|
||||||
|
Suicidal=(BlockSettings=(Duration=3.0f))
|
||||||
|
HellOnEarth=(BlockSettings=(Duration=3.0f))
|
||||||
|
|
||||||
|
NumPlayersScale_BodyHealth=0.195f
|
||||||
|
NumPlayersScale_HeadHealth=0.14f
|
||||||
|
|
||||||
|
NumPlayersScale_BodyHealth_Versus=0.195f
|
||||||
|
NumPlayersScale_HeadHealth_Versus=0.14f
|
||||||
|
|
||||||
|
Name="Default__WMDifficulty_Scrake_Emperor"
|
||||||
|
}
|
12
CustomZeds/Classes/WMDifficulty_Siren_Omega.uc
Normal file
12
CustomZeds/Classes/WMDifficulty_Siren_Omega.uc
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
class WMDifficulty_Siren_Omega extends KFDifficulty_Siren
|
||||||
|
abstract;
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
Normal=(DamagedSprintChance=0.5f)
|
||||||
|
Hard=(DamagedSprintChance=0.65f)
|
||||||
|
Suicidal=(DamagedSprintChance=0.8f)
|
||||||
|
HellOnEarth=(DamagedSprintChance=0.9f)
|
||||||
|
|
||||||
|
Name="Default__WMDifficulty_Siren_Omega"
|
||||||
|
}
|
12
CustomZeds/Classes/WMDifficulty_Stalker_Omega.uc
Normal file
12
CustomZeds/Classes/WMDifficulty_Stalker_Omega.uc
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
class WMDifficulty_Stalker_Omega extends KFDifficulty_Stalker
|
||||||
|
abstract;
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
Normal=(DamagedSprintChance=0.2f, EvadeOnDamageSettings=(Chance=0.5f))
|
||||||
|
Hard=(DamagedSprintChance=0.4f, EvadeOnDamageSettings=(Chance=0.6f))
|
||||||
|
Suicidal=(EvadeOnDamageSettings=(Chance=0.7f))
|
||||||
|
HellOnEarth=(EvadeOnDamageSettings=(Chance=0.8f))
|
||||||
|
|
||||||
|
Name="Default__WMDifficulty_Stalker_Omega"
|
||||||
|
}
|
38
CustomZeds/Classes/WMExplosion_TinyHusk.uc
Normal file
38
CustomZeds/Classes/WMExplosion_TinyHusk.uc
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
class WMExplosion_TinyHusk extends KFGameExplosion;
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
Begin Object Class=PointLightComponent Name=ExplosionPointLight
|
||||||
|
LightColor=(R=245, G=190, B=140, A=255)
|
||||||
|
bCastPerObjectShadows=false
|
||||||
|
End Object
|
||||||
|
|
||||||
|
Damage=35.0
|
||||||
|
DamageRadius=360.0
|
||||||
|
DamageFalloffExponent=2.0
|
||||||
|
DamageDelay=0.0
|
||||||
|
bFullDamageToAttachee=true
|
||||||
|
|
||||||
|
// Damage Effects
|
||||||
|
MyDamageType=class'KFDT_Explosive_HuskSuicide'
|
||||||
|
FractureMeshRadius=200.0
|
||||||
|
FracturePartVel=500.0
|
||||||
|
ExplosionEffects=KFImpactEffectInfo'FX_Impacts_ARCH.Explosions.HuskSuicide_Explosion'
|
||||||
|
ExplosionSound=AkEvent'WW_WEP_Husk_Cannon.Play_WEP_Husk_Cannon_3P_Fire'
|
||||||
|
KnockDownStrength=0.0
|
||||||
|
MomentumTransferScale=1.0
|
||||||
|
|
||||||
|
// Dynamic Light
|
||||||
|
ExploLight=ExplosionPointLight
|
||||||
|
ExploLightStartFadeOutTime=0.0
|
||||||
|
ExploLightFadeOutTime=0.5
|
||||||
|
|
||||||
|
// Camera Shake
|
||||||
|
CamShake=CameraShake'FX_CameraShake_Arch.Misc_Explosions.Seeker6'
|
||||||
|
CamShakeInnerRadius=180.0
|
||||||
|
CamShakeOuterRadius=500.0
|
||||||
|
CamShakeFalloff=1.5
|
||||||
|
bOrientCameraShakeTowardsEpicenter=true
|
||||||
|
|
||||||
|
Name="Default__WMExplosion_TinyHusk"
|
||||||
|
}
|
10
CustomZeds/Classes/WMPawn_OmegaConstants.uc
Normal file
10
CustomZeds/Classes/WMPawn_OmegaConstants.uc
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
class WMPawn_OmegaConstants extends Object;
|
||||||
|
|
||||||
|
var const linearColor OmegaColor;
|
||||||
|
var const linearColor OmegaFresnelColor;
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
OmegaColor=(R=0.5f,G=0.25f,B=1.0f)
|
||||||
|
OmegaFresnelColor=(R=0.4f,G=0.25f,B=0.7f)
|
||||||
|
}
|
46
CustomZeds/Classes/WMPawn_ZedBloatKing.uc
Normal file
46
CustomZeds/Classes/WMPawn_ZedBloatKing.uc
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
class WMPawn_ZedBloatKing extends KFPawn_ZedBloatKing;
|
||||||
|
|
||||||
|
var AkEvent EntranceSound;
|
||||||
|
|
||||||
|
simulated event PostBeginPlay()
|
||||||
|
{
|
||||||
|
// add entrance sound
|
||||||
|
SoundGroupArch.EntranceSound = default.EntranceSound;
|
||||||
|
|
||||||
|
Super.PostBeginPlay();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Summon some children */
|
||||||
|
function SummonChildren()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Play music for this boss (overridden for each boss) */
|
||||||
|
function PlayBossMusic()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static simulated event bool IsABoss()
|
||||||
|
{
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
|
||||||
|
function bool CanBeGrabbed(KFPawn GrabbingPawn, optional bool bIgnoreFalling, optional bool bAllowSameTeamGrab)
|
||||||
|
{
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
EntranceSound=AkEvent'WW_ZED_Abomination.Play_Abomination_Intro_Land'
|
||||||
|
MinSpawnSquadSizeType=EST_Large
|
||||||
|
bLargeZed=True
|
||||||
|
DoshValue=300
|
||||||
|
|
||||||
|
XPValues(0)=150
|
||||||
|
XPValues(1)=150
|
||||||
|
XPValues(2)=150
|
||||||
|
XPValues(3)=150
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedBloatKing"
|
||||||
|
}
|
127
CustomZeds/Classes/WMPawn_ZedClot_Slasher_Omega.uc
Normal file
127
CustomZeds/Classes/WMPawn_ZedClot_Slasher_Omega.uc
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
class WMPawn_ZedClot_Slasher_Omega extends KFPawn_ZedClot_Slasher;
|
||||||
|
|
||||||
|
var const AnimSet SlasherOmegaAnimSet;
|
||||||
|
var const KFPawnAnimInfo SlasherOmegaAnimInfo;
|
||||||
|
|
||||||
|
var transient ParticleSystemComponent SpecialFXPSCs[2];
|
||||||
|
var const float ExtraAfflictionResistance, ExtraDamageResistance;
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Slasher Omega";
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PostBeginPlay()
|
||||||
|
{
|
||||||
|
IntendedBodyScale = 1.125f;
|
||||||
|
bVersusZed = True;
|
||||||
|
|
||||||
|
Mesh.AnimSets.AddItem(default.SlasherOmegaAnimSet);
|
||||||
|
PawnAnimInfo = default.SlasherOmegaAnimInfo;
|
||||||
|
|
||||||
|
super.PostBeginPlay();
|
||||||
|
|
||||||
|
UpdateGameplayMICParams();
|
||||||
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
ApplySpecialFX();
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PlayDying(class<DamageType> DamageType, vector HitLoc)
|
||||||
|
{
|
||||||
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
EndSpecialFX();
|
||||||
|
|
||||||
|
super.PlayDying(DamageType, HitLoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function ApplySpecialFX()
|
||||||
|
{
|
||||||
|
local Name SocketBoneName;
|
||||||
|
|
||||||
|
SocketBoneName = Mesh.GetSocketBoneName('FX_EYE_L');
|
||||||
|
if (SocketBoneName != '' && SocketBoneName != 'None')
|
||||||
|
SpecialFXPSCs[0] = WorldInfo.MyEmitterPool.SpawnEmitterMeshAttachment(ParticleSystem'ZedternalReborn_Zeds.FX_Omega', Mesh, 'FX_EYE_L', True, vect(0,0,0));
|
||||||
|
|
||||||
|
SocketBoneName = Mesh.GetSocketBoneName('FX_EYE_R');
|
||||||
|
if (SocketBoneName != '' && SocketBoneName != 'None')
|
||||||
|
SpecialFXPSCs[1] = WorldInfo.MyEmitterPool.SpawnEmitterMeshAttachment(ParticleSystem'ZedternalReborn_Zeds.FX_Omega', Mesh, 'FX_EYE_R', True, vect(0,0,0));
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function EndSpecialFX()
|
||||||
|
{
|
||||||
|
if (SpecialFXPSCs[0] != None && SpecialFXPSCs[0].bIsActive)
|
||||||
|
{
|
||||||
|
SpecialFXPSCs[0].DeactivateSystem();
|
||||||
|
}
|
||||||
|
if (SpecialFXPSCs[1] != None && SpecialFXPSCs[1].bIsActive)
|
||||||
|
{
|
||||||
|
SpecialFXPSCs[1].DeactivateSystem();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function UpdateGameplayMICParams()
|
||||||
|
{
|
||||||
|
local byte i;
|
||||||
|
|
||||||
|
super.UpdateGameplayMICParams();
|
||||||
|
|
||||||
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
{
|
||||||
|
for (i = 0; i < CharacterMICs.length; ++i)
|
||||||
|
{
|
||||||
|
CharacterMICs[i].SetVectorParameterValue('Vector_GlowColor', class'WMPawn_OmegaConstants'.default.OmegaColor);
|
||||||
|
CharacterMICs[i].SetVectorParameterValue('Vector_FresnelGlowColor', class'WMPawn_OmegaConstants'.default.OmegaFresnelColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function float GetDamageTypeModifier(class<DamageType> DT)
|
||||||
|
{
|
||||||
|
local float CurrentMod;
|
||||||
|
|
||||||
|
// Omega ZEDs have extra resistance against all damage type
|
||||||
|
CurrentMod = super.GetDamageTypeModifier(DT);
|
||||||
|
return FMax(0.025f, CurrentMod - ExtraDamageResistance);
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function AdjustAffliction(out float AfflictionPower)
|
||||||
|
{
|
||||||
|
super.AdjustAffliction(AfflictionPower);
|
||||||
|
AfflictionPower *= 1.0f - ExtraAfflictionResistance;
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated event bool UsePlayerControlledZedSkin()
|
||||||
|
{
|
||||||
|
return True;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
SlasherOmegaAnimSet=AnimSet'ZedternalReborn_Zeds.Slasher.Slasher_Clot_Omega_AnimSet'
|
||||||
|
SlasherOmegaAnimInfo=KFPawnAnimInfo'ZedternalReborn_Zeds.Slasher.Slasher_Clot_Omega_AnimGroup'
|
||||||
|
LocalizationKey="WMPawn_ZedSlasher_Omega"
|
||||||
|
|
||||||
|
bVersusZed=False
|
||||||
|
DoshValue=15
|
||||||
|
Health=250
|
||||||
|
GroundSpeed=340.0f
|
||||||
|
SprintSpeed=580.0f
|
||||||
|
ParryResistance=1
|
||||||
|
ExtraAfflictionResistance=0.15f
|
||||||
|
ExtraDamageResistance=0.15f
|
||||||
|
GrabAttackFrequency=0.6f
|
||||||
|
|
||||||
|
Begin Object Name=MeleeHelper_0
|
||||||
|
BaseDamage=10.0f
|
||||||
|
MaxHitRange=180.0f
|
||||||
|
End Object
|
||||||
|
|
||||||
|
XPValues(0)=16
|
||||||
|
XPValues(1)=22
|
||||||
|
XPValues(2)=22
|
||||||
|
XPValues(3)=22
|
||||||
|
|
||||||
|
HitZones(0)=(GoreHealth=150)
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedClot_Slasher_Omega"
|
||||||
|
}
|
45
CustomZeds/Classes/WMPawn_ZedCrawler_Big.uc
Normal file
45
CustomZeds/Classes/WMPawn_ZedCrawler_Big.uc
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
class WMPawn_ZedCrawler_Big extends WMPawn_ZedCrawler_NoElite;
|
||||||
|
|
||||||
|
var const float ExtraDamageResistance;
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Big Crawler";
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PostBeginPlay()
|
||||||
|
{
|
||||||
|
IntendedBodyScale = 1.2f;
|
||||||
|
|
||||||
|
super.PostBeginPlay();
|
||||||
|
}
|
||||||
|
|
||||||
|
function float GetDamageTypeModifier(class<DamageType> DT)
|
||||||
|
{
|
||||||
|
local float CurrentMod;
|
||||||
|
|
||||||
|
CurrentMod = super.GetDamageTypeModifier(DT);
|
||||||
|
return FMax(0.025f, CurrentMod - ExtraDamageResistance);
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
DifficultySettings=Class'CustomZeds.WMDifficulty_Crawler_Big'
|
||||||
|
|
||||||
|
bKnockdownWhenJumpedOn=False
|
||||||
|
DoshValue=12
|
||||||
|
Health=145
|
||||||
|
Mass=150.0f
|
||||||
|
GroundSpeed=485.0f
|
||||||
|
SprintSpeed=590.0f
|
||||||
|
ExtraDamageResistance=0.35f
|
||||||
|
|
||||||
|
XPValues(0)=12
|
||||||
|
XPValues(1)=15
|
||||||
|
XPValues(2)=15
|
||||||
|
XPValues(3)=15
|
||||||
|
|
||||||
|
HitZones(0)=(GoreHealth=125)
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedCrawler_Big"
|
||||||
|
}
|
45
CustomZeds/Classes/WMPawn_ZedCrawler_Huge.uc
Normal file
45
CustomZeds/Classes/WMPawn_ZedCrawler_Huge.uc
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
class WMPawn_ZedCrawler_Huge extends WMPawn_ZedCrawler_NoElite;
|
||||||
|
|
||||||
|
var const float ExtraDamageResistance;
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Huge Crawler";
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PostBeginPlay()
|
||||||
|
{
|
||||||
|
IntendedBodyScale = 1.55f;
|
||||||
|
|
||||||
|
super.PostBeginPlay();
|
||||||
|
}
|
||||||
|
|
||||||
|
function float GetDamageTypeModifier(class<DamageType> DT)
|
||||||
|
{
|
||||||
|
local float CurrentMod;
|
||||||
|
|
||||||
|
CurrentMod = super.GetDamageTypeModifier(DT);
|
||||||
|
return FMax(0.025f, CurrentMod - ExtraDamageResistance);
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
DifficultySettings=Class'CustomZeds.WMDifficulty_Crawler_Big'
|
||||||
|
|
||||||
|
bKnockdownWhenJumpedOn=False
|
||||||
|
DoshValue=24
|
||||||
|
Health=375
|
||||||
|
Mass=300.0f
|
||||||
|
GroundSpeed=340.0f
|
||||||
|
SprintSpeed=420.0f
|
||||||
|
ExtraDamageResistance=0.55f
|
||||||
|
|
||||||
|
XPValues(0)=16
|
||||||
|
XPValues(1)=20
|
||||||
|
XPValues(2)=20
|
||||||
|
XPValues(3)=20
|
||||||
|
|
||||||
|
HitZones(0)=(GoreHealth=200)
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedCrawler_Huge"
|
||||||
|
}
|
18
CustomZeds/Classes/WMPawn_ZedCrawler_Medium.uc
Normal file
18
CustomZeds/Classes/WMPawn_ZedCrawler_Medium.uc
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
class WMPawn_ZedCrawler_Medium extends WMPawn_ZedCrawler_NoElite;
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Medium Crawler";
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PostBeginPlay()
|
||||||
|
{
|
||||||
|
IntendedBodyScale = 1.15f;
|
||||||
|
|
||||||
|
super.PostBeginPlay();
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
Name="Default__WMPawn_ZedCrawler_Medium"
|
||||||
|
}
|
29
CustomZeds/Classes/WMPawn_ZedCrawler_Mini.uc
Normal file
29
CustomZeds/Classes/WMPawn_ZedCrawler_Mini.uc
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
class WMPawn_ZedCrawler_Mini extends WMPawn_ZedCrawler_NoElite;
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Baby Crawler";
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PostBeginPlay()
|
||||||
|
{
|
||||||
|
IntendedBodyScale = 0.65f;
|
||||||
|
|
||||||
|
super.PostBeginPlay();
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
DoshValue=6
|
||||||
|
Health=45
|
||||||
|
Mass=30.0f
|
||||||
|
GroundSpeed=575.0f
|
||||||
|
SprintSpeed=675.0f
|
||||||
|
|
||||||
|
XPValues(0)=6
|
||||||
|
XPValues(1)=8
|
||||||
|
XPValues(2)=8
|
||||||
|
XPValues(3)=8
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedCrawler_Mini"
|
||||||
|
}
|
11
CustomZeds/Classes/WMPawn_ZedCrawler_NoElite.uc
Normal file
11
CustomZeds/Classes/WMPawn_ZedCrawler_NoElite.uc
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
class WMPawn_ZedCrawler_NoElite extends KFPawn_ZedCrawler;
|
||||||
|
|
||||||
|
static event class<KFPawn_Monster> GetAIPawnClassToSpawn()
|
||||||
|
{
|
||||||
|
return default.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
Name="Default__WMPawn_ZedCrawler_NoElite"
|
||||||
|
}
|
45
CustomZeds/Classes/WMPawn_ZedCrawler_Ultra.uc
Normal file
45
CustomZeds/Classes/WMPawn_ZedCrawler_Ultra.uc
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
class WMPawn_ZedCrawler_Ultra extends WMPawn_ZedCrawler_NoElite;
|
||||||
|
|
||||||
|
var const float ExtraDamageResistance;
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Ultra Crawler";
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PostBeginPlay()
|
||||||
|
{
|
||||||
|
IntendedBodyScale = 2.0f;
|
||||||
|
|
||||||
|
super.PostBeginPlay();
|
||||||
|
}
|
||||||
|
|
||||||
|
function float GetDamageTypeModifier(class<DamageType> DT)
|
||||||
|
{
|
||||||
|
local float CurrentMod;
|
||||||
|
|
||||||
|
CurrentMod = super.GetDamageTypeModifier(DT);
|
||||||
|
return FMax(0.025f, CurrentMod - ExtraDamageResistance);
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
DifficultySettings=Class'CustomZeds.WMDifficulty_Crawler_Big'
|
||||||
|
|
||||||
|
bKnockdownWhenJumpedOn=False
|
||||||
|
DoshValue=48
|
||||||
|
Health=530
|
||||||
|
Mass=450.0f
|
||||||
|
GroundSpeed=270.0f
|
||||||
|
SprintSpeed=325.0f
|
||||||
|
ExtraDamageResistance=0.65f
|
||||||
|
|
||||||
|
XPValues(0)=20
|
||||||
|
XPValues(1)=25
|
||||||
|
XPValues(2)=25
|
||||||
|
XPValues(3)=25
|
||||||
|
|
||||||
|
HitZones(0)=(GoreHealth=300)
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedCrawler_Ultra"
|
||||||
|
}
|
BIN
CustomZeds/Classes/WMPawn_ZedFleshpoundKing.uc
Normal file
BIN
CustomZeds/Classes/WMPawn_ZedFleshpoundKing.uc
Normal file
Binary file not shown.
209
CustomZeds/Classes/WMPawn_ZedFleshpound_Omega.uc
Normal file
209
CustomZeds/Classes/WMPawn_ZedFleshpound_Omega.uc
Normal file
@ -0,0 +1,209 @@
|
|||||||
|
class WMPawn_ZedFleshpound_Omega extends KFPawn_ZedFleshpound;
|
||||||
|
|
||||||
|
var const AnimSet FleshpoundOmegaAnimSet;
|
||||||
|
var const KFPawnAnimInfo FleshpoundOmegaAnimInfo;
|
||||||
|
var const KFGameExplosion OmegaExplosionTemplate;
|
||||||
|
|
||||||
|
var const float RallyRadius;
|
||||||
|
var const ParticleSystem RallyEffect, AltRallyEffect;
|
||||||
|
var const name RallyEffectBoneName;
|
||||||
|
var const name AltRallyEffectBoneNames[2];
|
||||||
|
var const vector RallyEffectOffset, AltRallyEffectOffset;
|
||||||
|
|
||||||
|
var transient ParticleSystemComponent SpecialFXPSCs[2];
|
||||||
|
var const float ExtraAfflictionResistance, ExtraDamageResistance;
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Fleshpound Omega";
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PostBeginPlay()
|
||||||
|
{
|
||||||
|
IntendedBodyScale = 1.15f;
|
||||||
|
bVersusZed = True;
|
||||||
|
|
||||||
|
Mesh.AnimSets.AddItem(FleshpoundOmegaAnimSet);
|
||||||
|
PawnAnimInfo = FleshpoundOmegaAnimInfo;
|
||||||
|
|
||||||
|
super.PostBeginPlay();
|
||||||
|
|
||||||
|
UpdateGameplayMICParams();
|
||||||
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
ApplySpecialFX();
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PlayDying(class<DamageType> DamageType, vector HitLoc)
|
||||||
|
{
|
||||||
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
EndSpecialFX();
|
||||||
|
|
||||||
|
super.PlayDying(DamageType, HitLoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function ApplySpecialFX()
|
||||||
|
{
|
||||||
|
local Name SocketBoneName;
|
||||||
|
|
||||||
|
SocketBoneName = Mesh.GetSocketBoneName('FX_EYE_L');
|
||||||
|
if (SocketBoneName != '' && SocketBoneName != 'None')
|
||||||
|
SpecialFXPSCs[0] = WorldInfo.MyEmitterPool.SpawnEmitterMeshAttachment(ParticleSystem'ZedternalReborn_Zeds.FX_Omega', Mesh, 'FX_EYE_L', True, vect(0,0,0));
|
||||||
|
|
||||||
|
SocketBoneName = Mesh.GetSocketBoneName('FX_EYE_R');
|
||||||
|
if (SocketBoneName != '' && SocketBoneName != 'None')
|
||||||
|
SpecialFXPSCs[1] = WorldInfo.MyEmitterPool.SpawnEmitterMeshAttachment(ParticleSystem'ZedternalReborn_Zeds.FX_Omega', Mesh, 'FX_EYE_R', True, vect(0,0,0));
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function EndSpecialFX()
|
||||||
|
{
|
||||||
|
if (SpecialFXPSCs[0] != None && SpecialFXPSCs[0].bIsActive)
|
||||||
|
{
|
||||||
|
SpecialFXPSCs[0].DeactivateSystem();
|
||||||
|
}
|
||||||
|
if (SpecialFXPSCs[1] != None && SpecialFXPSCs[1].bIsActive)
|
||||||
|
{
|
||||||
|
SpecialFXPSCs[1].DeactivateSystem();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function UpdateGameplayMICParams()
|
||||||
|
{
|
||||||
|
local byte i;
|
||||||
|
|
||||||
|
super.UpdateGameplayMICParams();
|
||||||
|
|
||||||
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
{
|
||||||
|
for (i = 0; i < CharacterMICs.length; ++i)
|
||||||
|
{
|
||||||
|
CharacterMICs[i].SetVectorParameterValue('Vector_GlowColor', class'WMPawn_OmegaConstants'.default.OmegaColor);
|
||||||
|
CharacterMICs[i].SetVectorParameterValue('Vector_FresnelGlowColor', class'WMPawn_OmegaConstants'.default.OmegaFresnelColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function float GetDamageTypeModifier(class<DamageType> DT)
|
||||||
|
{
|
||||||
|
local float CurrentMod;
|
||||||
|
|
||||||
|
// Omega ZEDs have extra resistance against all damage type
|
||||||
|
CurrentMod = super.GetDamageTypeModifier(DT);
|
||||||
|
return FMax(0.025f, CurrentMod - ExtraDamageResistance);
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function AdjustAffliction(out float AfflictionPower)
|
||||||
|
{
|
||||||
|
super.AdjustAffliction(AfflictionPower);
|
||||||
|
AfflictionPower *= 1.0f - ExtraAfflictionResistance;
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function ANIMNOTIFY_OmegaKick()
|
||||||
|
{
|
||||||
|
local vector ExploLocation;
|
||||||
|
|
||||||
|
Mesh.GetSocketWorldLocationAndRotation('RightMG3_socket', ExploLocation);
|
||||||
|
TriggerOmegaExplosion(ExploLocation);
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function TriggerOmegaExplosion(vector ExploLocation)
|
||||||
|
{
|
||||||
|
local KFExplosionActor ExploActor;
|
||||||
|
|
||||||
|
// Boom
|
||||||
|
ExploActor = Spawn(class'KFExplosionActor', self, , ExploLocation);
|
||||||
|
ExploActor.InstigatorController = Controller;
|
||||||
|
ExploActor.Instigator = self;
|
||||||
|
ExploActor.Explode(OmegaExplosionTemplate, vect(0,0,1));
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function bool SetEnraged(bool bNewEnraged)
|
||||||
|
{
|
||||||
|
// Fleshpound Omega will rally nearby zeds (and self) while enraging
|
||||||
|
if (!bIsEnraged)
|
||||||
|
RallyZeds();
|
||||||
|
|
||||||
|
return super.SetEnraged(bNewEnraged);
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function RallyZeds()
|
||||||
|
{
|
||||||
|
local KFPawn_Monster KFPM;
|
||||||
|
local sRallyInfo NewRallyInfo;
|
||||||
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
|
||||||
|
// Rally nearby zeds
|
||||||
|
foreach WorldInfo.GRI.VisibleCollidingActors(class'KFPawn_Monster', KFPM, RallyRadius, Location)
|
||||||
|
{
|
||||||
|
if (KFPM.IsHeadless() || !KFPM.IsAliveAndWell() || WMPawn_ZedFleshpound_Omega(KFPM) != None)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//Force this ZEDs to sprint
|
||||||
|
// Set Rally setting
|
||||||
|
KFGRI = KFGameReplicationInfo(class'WorldInfo'.static.GetWorldInfo().GRI);
|
||||||
|
if (KFGRI != None)
|
||||||
|
{
|
||||||
|
NewRallyInfo = KFPM.DifficultySettings.static.GetRallySettings(KFPM, KFGRI);
|
||||||
|
NewRallyInfo.bCanRally = True;
|
||||||
|
NewRallyInfo.bCauseSprint = True;
|
||||||
|
KFPM.SetRallySettings(NewRallyInfo);
|
||||||
|
}
|
||||||
|
// Activate buffs and effects
|
||||||
|
KFPM.Rally(self,
|
||||||
|
RallyEffect,
|
||||||
|
RallyEffectBoneName,
|
||||||
|
RallyEffectOffset,
|
||||||
|
AltRallyEffect,
|
||||||
|
AltRallyEffectBoneNames,
|
||||||
|
AltRallyEffectOffset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated event bool UsePlayerControlledZedSkin()
|
||||||
|
{
|
||||||
|
return True;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
FleshpoundOmegaAnimSet=AnimSet'ZedternalReborn_Zeds.Fleshpound.Fleshpound_Omega_AnimSet'
|
||||||
|
FleshpoundOmegaAnimInfo=KFPawnAnimInfo'ZedternalReborn_Zeds.Fleshpound.Fleshpound_Omega_AnimGroup'
|
||||||
|
OmegaExplosionTemplate=KFGameExplosion'KFGameContent.Default__KFPawn_ZedFleshpoundKing:ExploTemplate1'
|
||||||
|
RallyRadius=1750.0f
|
||||||
|
RallyEffect=ParticleSystem'ZedternalReborn_Zeds.Fleshpound.FX_Fleshpound_Rage_01'
|
||||||
|
AltRallyEffect=ParticleSystem'ZedternalReborn_Zeds.Fleshpound.FX_Fleshpound_Buff_01'
|
||||||
|
RallyEffectBoneName="Root"
|
||||||
|
AltRallyEffectBoneNames(0)="FX_EYE_L"
|
||||||
|
AltRallyEffectBoneNames(1)="FX_EYE_R"
|
||||||
|
RallyEffectOffset=(X=0.0f,Y=0.0f,Z=0.0f)
|
||||||
|
AltRallyEffectOffset=(X=0.0f,Y=0.0f,Z=0.0f)
|
||||||
|
LocalizationKey="WMPawn_ZedFleshpound_Omega"
|
||||||
|
|
||||||
|
DefaultGlowColor=(G=0.25f)
|
||||||
|
FootstepCameraShakeInnerRadius=230.0f
|
||||||
|
FootstepCameraShakeOuterRadius=1035.0f
|
||||||
|
|
||||||
|
bVersusZed=False
|
||||||
|
DoshValue=400
|
||||||
|
Health=4000
|
||||||
|
Mass=220.0f
|
||||||
|
GroundSpeed=460.0f
|
||||||
|
SprintSpeed=615.0f
|
||||||
|
ExtraAfflictionResistance=0.35f
|
||||||
|
ExtraDamageResistance=0.2f
|
||||||
|
|
||||||
|
Begin Object Name=MeleeHelper_0
|
||||||
|
BaseDamage=30.0f
|
||||||
|
MaxHitRange=260.0f
|
||||||
|
MomentumTransfer=65000.0f
|
||||||
|
End Object
|
||||||
|
|
||||||
|
XPValues(0)=70
|
||||||
|
XPValues(1)=94
|
||||||
|
XPValues(2)=126
|
||||||
|
XPValues(3)=144
|
||||||
|
|
||||||
|
HitZones(0)=(GoreHealth=1950)
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedFleshpound_Omega"
|
||||||
|
}
|
70
CustomZeds/Classes/WMPawn_ZedFleshpound_Predator.uc
Normal file
70
CustomZeds/Classes/WMPawn_ZedFleshpound_Predator.uc
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
class WMPawn_ZedFleshpound_Predator extends KFPawn_ZedFleshpound;
|
||||||
|
|
||||||
|
var linearColor PredatorColor;
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Fleshpound Predator";
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PostBeginPlay()
|
||||||
|
{
|
||||||
|
IntendedBodyScale = 1.3f;
|
||||||
|
bVersusZed = True;
|
||||||
|
|
||||||
|
super.PostBeginPlay();
|
||||||
|
|
||||||
|
UpdateGameplayMICParams();
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function UpdateGameplayMICParams()
|
||||||
|
{
|
||||||
|
local byte i;
|
||||||
|
|
||||||
|
super.UpdateGameplayMICParams();
|
||||||
|
|
||||||
|
if(IsAliveAndWell() && WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
{
|
||||||
|
for (i = 0; i < CharacterMICs.length; ++i)
|
||||||
|
{
|
||||||
|
CharacterMICs[i].SetVectorParameterValue('Vector_GlowColor', PredatorColor);
|
||||||
|
CharacterMICs[i].SetVectorParameterValue('Vector_FresnelGlowColor', PredatorColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function bool CanBeGrabbed(KFPawn GrabbingPawn, optional bool bIgnoreFalling, optional bool bAllowSameTeamGrab)
|
||||||
|
{
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated event bool UsePlayerControlledZedSkin()
|
||||||
|
{
|
||||||
|
return True;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
ControllerClass=Class'CustomZeds.WMAIController_ZedFleshpound_Predator'
|
||||||
|
|
||||||
|
DefaultGlowColor=(G=0.25f)
|
||||||
|
PredatorColor=(R=0.2f,G=1.0f,B=0.1f,A=1.0f)
|
||||||
|
FootstepCameraShakeInnerRadius=230.0f
|
||||||
|
FootstepCameraShakeOuterRadius=1035.0f
|
||||||
|
|
||||||
|
bVersusZed=False
|
||||||
|
DoshValue=0
|
||||||
|
Health=9999
|
||||||
|
Mass=250.0f
|
||||||
|
GroundSpeed=500.0f
|
||||||
|
SprintSpeed=660.0f
|
||||||
|
|
||||||
|
XPValues(0)=20
|
||||||
|
XPValues(1)=25
|
||||||
|
XPValues(2)=25
|
||||||
|
XPValues(3)=30
|
||||||
|
|
||||||
|
HitZones(0)=(GoreHealth=9999)
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedFleshpound_Predator"
|
||||||
|
}
|
11
CustomZeds/Classes/WMPawn_ZedGorefast_NoDualBlade.uc
Normal file
11
CustomZeds/Classes/WMPawn_ZedGorefast_NoDualBlade.uc
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
class WMPawn_ZedGorefast_NoDualBlade extends KFPawn_ZedGorefast;
|
||||||
|
|
||||||
|
static event class<KFPawn_Monster> GetAIPawnClassToSpawn()
|
||||||
|
{
|
||||||
|
return default.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
Name="WMPawn_ZedGorefast_NoDualBlade"
|
||||||
|
}
|
182
CustomZeds/Classes/WMPawn_ZedGorefast_Omega.uc
Normal file
182
CustomZeds/Classes/WMPawn_ZedGorefast_Omega.uc
Normal file
@ -0,0 +1,182 @@
|
|||||||
|
class WMPawn_ZedGorefast_Omega extends WMPawn_ZedGorefast_NoDualBlade;
|
||||||
|
|
||||||
|
var const AnimSet GorefastOmegaAnimSet;
|
||||||
|
var const KFPawnAnimInfo GorefastOmegaAnimInfo;
|
||||||
|
var const KFSkinTypeEffects ShieldImpactEffects;
|
||||||
|
|
||||||
|
var transient ParticleSystemComponent SpecialFXPSCs[2];
|
||||||
|
var const float ExtraAfflictionResistance, ExtraDamageResistance;
|
||||||
|
var bool bShieldOn;
|
||||||
|
|
||||||
|
replication
|
||||||
|
{
|
||||||
|
if (Role == ROLE_Authority)
|
||||||
|
bShieldOn;
|
||||||
|
}
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Gorefast Omega";
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PostBeginPlay()
|
||||||
|
{
|
||||||
|
IntendedBodyScale = 1.14f;
|
||||||
|
bVersusZed = True;
|
||||||
|
|
||||||
|
Mesh.AnimSets.AddItem(GorefastOmegaAnimSet);
|
||||||
|
PawnAnimInfo = GorefastOmegaAnimInfo;
|
||||||
|
|
||||||
|
super.PostBeginPlay();
|
||||||
|
|
||||||
|
UpdateGameplayMICParams();
|
||||||
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
ApplySpecialFX();
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PlayDying(class<DamageType> DamageType, vector HitLoc)
|
||||||
|
{
|
||||||
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
EndSpecialFX();
|
||||||
|
|
||||||
|
super.PlayDying(DamageType, HitLoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function ApplySpecialFX()
|
||||||
|
{
|
||||||
|
local Name SocketBoneName;
|
||||||
|
|
||||||
|
SocketBoneName = Mesh.GetSocketBoneName('FX_EYE_L');
|
||||||
|
if (SocketBoneName != '' && SocketBoneName != 'None')
|
||||||
|
SpecialFXPSCs[0] = WorldInfo.MyEmitterPool.SpawnEmitterMeshAttachment(ParticleSystem'ZedternalReborn_Zeds.FX_Omega', Mesh, 'FX_EYE_L', True, vect(0,0,0));
|
||||||
|
|
||||||
|
SocketBoneName = Mesh.GetSocketBoneName('FX_EYE_R');
|
||||||
|
if (SocketBoneName != '' && SocketBoneName != 'None')
|
||||||
|
SpecialFXPSCs[1] = WorldInfo.MyEmitterPool.SpawnEmitterMeshAttachment(ParticleSystem'ZedternalReborn_Zeds.FX_Omega', Mesh, 'FX_EYE_R', True, vect(0,0,0));
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function EndSpecialFX()
|
||||||
|
{
|
||||||
|
if (SpecialFXPSCs[0] != None && SpecialFXPSCs[0].bIsActive)
|
||||||
|
{
|
||||||
|
SpecialFXPSCs[0].DeactivateSystem();
|
||||||
|
}
|
||||||
|
if (SpecialFXPSCs[1] != None && SpecialFXPSCs[1].bIsActive)
|
||||||
|
{
|
||||||
|
SpecialFXPSCs[1].DeactivateSystem();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function UpdateGameplayMICParams()
|
||||||
|
{
|
||||||
|
local byte i;
|
||||||
|
|
||||||
|
super.UpdateGameplayMICParams();
|
||||||
|
|
||||||
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
{
|
||||||
|
for (i = 0; i < CharacterMICs.length; ++i)
|
||||||
|
{
|
||||||
|
CharacterMICs[i].SetVectorParameterValue('Vector_GlowColor', class'WMPawn_OmegaConstants'.default.OmegaColor);
|
||||||
|
CharacterMICs[i].SetVectorParameterValue('Vector_FresnelGlowColor', class'WMPawn_OmegaConstants'.default.OmegaFresnelColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function float GetDamageTypeModifier(class<DamageType> DT)
|
||||||
|
{
|
||||||
|
local float CurrentMod;
|
||||||
|
|
||||||
|
// Omega ZEDs have extra resistance against all damage type
|
||||||
|
CurrentMod = super.GetDamageTypeModifier(DT);
|
||||||
|
return FMax(0.025f, CurrentMod - ExtraDamageResistance);
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function AdjustAffliction(out float AfflictionPower)
|
||||||
|
{
|
||||||
|
super.AdjustAffliction(AfflictionPower);
|
||||||
|
AfflictionPower *= 1.0f - ExtraAfflictionResistance;
|
||||||
|
}
|
||||||
|
|
||||||
|
event TakeDamage(int Damage, Controller InstigatedBy, vector HitLocation, vector Momentum, class<DamageType> DamageType, optional TraceHitInfo HitInfo, optional Actor DamageCauser)
|
||||||
|
{
|
||||||
|
local int HitZoneIdx;
|
||||||
|
|
||||||
|
HitZoneIdx = HitZones.Find('ZoneName', HitInfo.BoneName);
|
||||||
|
|
||||||
|
if (bShieldOn && IsIncapacitated())
|
||||||
|
bShieldOn = False;
|
||||||
|
|
||||||
|
if (bShieldOn && HitZoneIdx < 9)
|
||||||
|
{
|
||||||
|
Damage = Max(0, int(float(Damage) * 0.25f));
|
||||||
|
Momentum.X *= 0.15f;
|
||||||
|
Momentum.Y *= 0.15f;
|
||||||
|
Momentum.Z *= 0.15f;
|
||||||
|
}
|
||||||
|
|
||||||
|
super.TakeDamage(Damage, InstigatedBy, HitLocation, Momentum, DamageType, HitInfo, DamageCauser);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** AnimNotify which turns on half-shield */
|
||||||
|
simulated function ANIMNOTIFY_TurnShieldOn()
|
||||||
|
{
|
||||||
|
bShieldOn = True;
|
||||||
|
SetTimer(1.4f, False, nameof(EndShield));
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function EndShield()
|
||||||
|
{
|
||||||
|
bShieldOn = False;
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function KFSkinTypeEffects GetHitZoneSkinTypeEffects(int HitZoneIdx)
|
||||||
|
{
|
||||||
|
if (bShieldOn && HitZoneIdx < 9)
|
||||||
|
{
|
||||||
|
return ShieldImpactEffects;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return super.GetHitZoneSkinTypeEffects(HitZoneIdx);
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function ApplyBloodDecals(int HitZoneIndex, vector HitLocation, vector HitDirection, name HitZoneName, name HitBoneName, class<KFDamageType> DmgType, bool bIsDismemberingHit, bool bWasObliterated)
|
||||||
|
{
|
||||||
|
if (!bShieldOn || HitZoneIndex >= 9)
|
||||||
|
super.ApplyBloodDecals(HitZoneIndex, HitLocation, HitDirection, HitZoneName, HitBoneName, DmgType, bIsDismemberingHit, bWasObliterated);
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated event bool UsePlayerControlledZedSkin()
|
||||||
|
{
|
||||||
|
return True;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
GorefastOmegaAnimSet=AnimSet'ZedternalReborn_Zeds.Gorefast.Gorefast_Omega_AnimSet'
|
||||||
|
GorefastOmegaAnimInfo=KFPawnAnimInfo'ZedternalReborn_Zeds.Gorefast.Gorefast_Omega_AnimGroup'
|
||||||
|
ShieldImpactEffects=KFSkinTypeEffects_InvulnerabilityShield'KFGameContent.Default__KFPawn_ZedHans:ShieldEffects'
|
||||||
|
ControllerClass=class'CustomZeds.WMAIController_ZedGorefast_Omega'
|
||||||
|
DifficultySettings=class'CustomZeds.WMDifficulty_Gorefast_Omega'
|
||||||
|
LocalizationKey="WMPawn_ZedGorefast_Omega"
|
||||||
|
|
||||||
|
bShieldOn=False
|
||||||
|
bVersusZed=False
|
||||||
|
DoshValue=24
|
||||||
|
Health=600
|
||||||
|
GroundSpeed=285.0f
|
||||||
|
SprintSpeed=435.0f
|
||||||
|
ParryResistance=3
|
||||||
|
PenetrationResistance=2.25f
|
||||||
|
ExtraAfflictionResistance=0.25f
|
||||||
|
ExtraDamageResistance=0.2f
|
||||||
|
|
||||||
|
XPValues(0)=22
|
||||||
|
XPValues(1)=28
|
||||||
|
XPValues(2)=28
|
||||||
|
XPValues(3)=28
|
||||||
|
|
||||||
|
HitZones(0)=(GoreHealth=400)
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedGorefast_Omega"
|
||||||
|
}
|
46
CustomZeds/Classes/WMPawn_ZedHans.uc
Normal file
46
CustomZeds/Classes/WMPawn_ZedHans.uc
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
class WMPawn_ZedHans extends KFPawn_ZedHans;
|
||||||
|
|
||||||
|
var AkEvent EntranceSound;
|
||||||
|
|
||||||
|
simulated event PostBeginPlay()
|
||||||
|
{
|
||||||
|
// add entrance sound
|
||||||
|
SoundGroupArch.EntranceSound = default.EntranceSound;
|
||||||
|
|
||||||
|
Super.PostBeginPlay();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Summon some children */
|
||||||
|
function SummonChildren()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Play music for this boss (overridden for each boss) */
|
||||||
|
function PlayBossMusic()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static simulated event bool IsABoss()
|
||||||
|
{
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
|
||||||
|
function bool CanBeGrabbed(KFPawn GrabbingPawn, optional bool bIgnoreFalling, optional bool bAllowSameTeamGrab)
|
||||||
|
{
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
EntranceSound=AkEvent'WW_ZED_Hans.Play_Hans_Intro_Land'
|
||||||
|
MinSpawnSquadSizeType=EST_Large
|
||||||
|
bLargeZed=True
|
||||||
|
DoshValue=500
|
||||||
|
|
||||||
|
XPValues(0)=250
|
||||||
|
XPValues(1)=250
|
||||||
|
XPValues(2)=250
|
||||||
|
XPValues(3)=250
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedHans"
|
||||||
|
}
|
11
CustomZeds/Classes/WMPawn_ZedHusk_NoDAR.uc
Normal file
11
CustomZeds/Classes/WMPawn_ZedHusk_NoDAR.uc
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
class WMPawn_ZedHusk_NoDAR extends KFPawn_ZedHusk;
|
||||||
|
|
||||||
|
static event class<KFPawn_Monster> GetAIPawnClassToSpawn()
|
||||||
|
{
|
||||||
|
return default.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
Name="Default__WMPawn_ZedHusk_NoDAR"
|
||||||
|
}
|
228
CustomZeds/Classes/WMPawn_ZedHusk_Omega.uc
Normal file
228
CustomZeds/Classes/WMPawn_ZedHusk_Omega.uc
Normal file
@ -0,0 +1,228 @@
|
|||||||
|
class WMPawn_ZedHusk_Omega extends WMPawn_ZedHusk_NoDAR;
|
||||||
|
|
||||||
|
var const AnimSet HuskOmegaAnimSet;
|
||||||
|
var const class<KFProj_Husk_Fireball> SuicideFireballClass;
|
||||||
|
var const int ProjSuicideAmount;
|
||||||
|
|
||||||
|
var transient ParticleSystemComponent SpecialFXPSCs[2];
|
||||||
|
var const float ExtraAfflictionResistance, ExtraDamageResistance;
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Husk Omega";
|
||||||
|
}
|
||||||
|
|
||||||
|
function PossessedBy(Controller C, bool bVehicleTransition)
|
||||||
|
{
|
||||||
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
|
||||||
|
super(KFPawn_Monster).PossessedBy(C, bVehicleTransition);
|
||||||
|
|
||||||
|
// Set our difficulty-based settings
|
||||||
|
KFGRI = KFGameReplicationInfo(WorldInfo.GRI);
|
||||||
|
if(KFGRI != None)
|
||||||
|
{
|
||||||
|
FireballSettings = class<KFDifficulty_Husk>(DifficultySettings).static.GetFireballSettings(self, KFGRI);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PostBeginPlay()
|
||||||
|
{
|
||||||
|
IntendedBodyScale = 1.14f;
|
||||||
|
bVersusZed = True;
|
||||||
|
Mesh.AnimSets.AddItem(HuskOmegaAnimSet);
|
||||||
|
|
||||||
|
super.PostBeginPlay();
|
||||||
|
|
||||||
|
UpdateGameplayMICParams();
|
||||||
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
ApplySpecialFX();
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PlayDying(class<DamageType> DamageType, vector HitLoc)
|
||||||
|
{
|
||||||
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
EndSpecialFX();
|
||||||
|
|
||||||
|
super.PlayDying(DamageType, HitLoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function ApplySpecialFX()
|
||||||
|
{
|
||||||
|
local Name SocketBoneName;
|
||||||
|
|
||||||
|
SocketBoneName = Mesh.GetSocketBoneName('FX_EYE_L');
|
||||||
|
if (SocketBoneName != '' && SocketBoneName != 'None')
|
||||||
|
SpecialFXPSCs[0] = WorldInfo.MyEmitterPool.SpawnEmitterMeshAttachment(ParticleSystem'ZedternalReborn_Zeds.FX_Omega', Mesh, 'FX_EYE_L', True, vect(0,0,0));
|
||||||
|
|
||||||
|
SocketBoneName = Mesh.GetSocketBoneName('FX_EYE_R');
|
||||||
|
if (SocketBoneName != '' && SocketBoneName != 'None')
|
||||||
|
SpecialFXPSCs[1] = WorldInfo.MyEmitterPool.SpawnEmitterMeshAttachment(ParticleSystem'ZedternalReborn_Zeds.FX_Omega', Mesh, 'FX_EYE_R', True, vect(0,0,0));
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function EndSpecialFX()
|
||||||
|
{
|
||||||
|
if (SpecialFXPSCs[0] != None && SpecialFXPSCs[0].bIsActive)
|
||||||
|
{
|
||||||
|
SpecialFXPSCs[0].DeactivateSystem();
|
||||||
|
}
|
||||||
|
if (SpecialFXPSCs[1] != None && SpecialFXPSCs[1].bIsActive)
|
||||||
|
{
|
||||||
|
SpecialFXPSCs[1].DeactivateSystem();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function UpdateGameplayMICParams()
|
||||||
|
{
|
||||||
|
local byte i;
|
||||||
|
|
||||||
|
super.UpdateGameplayMICParams();
|
||||||
|
|
||||||
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
{
|
||||||
|
for (i = 0; i < CharacterMICs.length; ++i)
|
||||||
|
{
|
||||||
|
CharacterMICs[i].SetVectorParameterValue('Vector_GlowColor', class'WMPawn_OmegaConstants'.default.OmegaColor);
|
||||||
|
CharacterMICs[i].SetVectorParameterValue('Vector_FresnelGlowColor', class'WMPawn_OmegaConstants'.default.OmegaFresnelColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function float GetDamageTypeModifier(class<DamageType> DT)
|
||||||
|
{
|
||||||
|
local float CurrentMod;
|
||||||
|
|
||||||
|
// Omega ZEDs have extra resistance against all damage type
|
||||||
|
CurrentMod = super.GetDamageTypeModifier(DT);
|
||||||
|
return FMax(0.025f, CurrentMod - ExtraDamageResistance);
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function AdjustAffliction(out float AfflictionPower)
|
||||||
|
{
|
||||||
|
super.AdjustAffliction(AfflictionPower);
|
||||||
|
AfflictionPower *= 1.0f - ExtraAfflictionResistance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** AnimNotify which launches the fireball projectile */
|
||||||
|
function ANIMNOTIFY_HuskRandomFireballAttack()
|
||||||
|
{
|
||||||
|
local WMAIController_ZedHusk_Omega HuskAIC;
|
||||||
|
local WMSM_Husk_Omega_FireBallBarrageAttack FireballBarrageSM;
|
||||||
|
|
||||||
|
if (MyKFAIC != None)
|
||||||
|
{
|
||||||
|
HuskAIC = WMAIController_ZedHusk_Omega(MyKFAIC);
|
||||||
|
if (HuskAIC != None)
|
||||||
|
{
|
||||||
|
FireballBarrageSM = WMSM_Husk_Omega_FireBallBarrageAttack(SpecialMoves[SpecialMove]);
|
||||||
|
HuskAIC.ShootFireballBarrage(default.SuicideFireballClass, FireballBarrageSM.GetFireOffset());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Called when husk backpack is exploded or when husk suicides */
|
||||||
|
function TriggerExplosion(optional bool bIgnoreHumans)
|
||||||
|
{
|
||||||
|
local KFExplosionActorReplicated ExploActor;
|
||||||
|
local Controller DamageInstigator, OldController;
|
||||||
|
local bool bExplodeOnDeath;
|
||||||
|
local WMAIController_ZedHusk_Omega HuskAIC;
|
||||||
|
local byte i;
|
||||||
|
|
||||||
|
bExplodeOnDeath = WorldInfo.TimeSeconds == TimeOfDeath;
|
||||||
|
|
||||||
|
// Only living husks can explode... and only once
|
||||||
|
if (!bHasExploded && (!bPlayedDeath || bExplodeOnDeath))
|
||||||
|
{
|
||||||
|
OldController = Controller;
|
||||||
|
bHasExploded = True;
|
||||||
|
bHasSuicideExploded = !bIgnoreHumans;
|
||||||
|
|
||||||
|
if (Role == ROLE_Authority)
|
||||||
|
{
|
||||||
|
// explode using the given template
|
||||||
|
ExploActor = Spawn(class'KFExplosionActorReplicated', self);
|
||||||
|
if (ExploActor != None)
|
||||||
|
{
|
||||||
|
DamageInstigator = (bIgnoreHumans && LastHitBy != None && KFPlayerController(LastHitBy) != None) ? LastHitBy : MyKFAIC;
|
||||||
|
ExploActor.InstigatorController = DamageInstigator;
|
||||||
|
ExploActor.Instigator = self;
|
||||||
|
|
||||||
|
// Force ourselves to get hit. These settings are not replicated,
|
||||||
|
// but they only really make a difference on the server anyway.
|
||||||
|
ExploActor.Attachee = self;
|
||||||
|
if (bIgnoreHumans)
|
||||||
|
{
|
||||||
|
ExplosionTemplate.ActorClassToIgnoreForDamage = class'KFPawn_Human';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ExplosionTemplate.ActorClassToIgnoreForDamage = None;
|
||||||
|
}
|
||||||
|
|
||||||
|
ExploActor.Explode(ExplosionTemplate, vect(0,0,1));
|
||||||
|
}
|
||||||
|
|
||||||
|
HuskAIC = WMAIController_ZedHusk_Omega(MyKFAIC);
|
||||||
|
if (!bIgnoreHumans && MyKFAIC != None && HuskAIC != None)
|
||||||
|
{
|
||||||
|
for (i = 0; i < ProjSuicideAmount; ++i)
|
||||||
|
{
|
||||||
|
HuskAIC.ShootRandomFireball(default.SuicideFireballClass);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure we're dead!
|
||||||
|
if (!bPlayedDeath || bExplodeOnDeath)
|
||||||
|
{
|
||||||
|
TakeRadiusDamage(DamageInstigator, 10000, ExplosionTemplate.DamageRadius, ExplosionTemplate.MyDamageType, ExplosionTemplate.MomentumTransferScale, Location, True, self);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OnExploded(OldController);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated event bool UsePlayerControlledZedSkin()
|
||||||
|
{
|
||||||
|
return True;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
HuskOmegaAnimSet=AnimSet'ZedternalReborn_Zeds.Husk.Husk_Omega_AnimSet'
|
||||||
|
SuicideFireballClass=class'CustomZeds.WMProj_Husk_Fireball_Suicide'
|
||||||
|
ControllerClass=class'CustomZeds.WMAIController_ZedHusk_Omega'
|
||||||
|
DifficultySettings=class'CustomZeds.WMDifficulty_Husk_Omega'
|
||||||
|
LocalizationKey="WMPawn_ZedHusk_Omega"
|
||||||
|
|
||||||
|
bVersusZed=False
|
||||||
|
DoshValue=34
|
||||||
|
Health=820
|
||||||
|
GroundSpeed=230.0f
|
||||||
|
SprintSpeed=580.0f
|
||||||
|
ParryResistance=3
|
||||||
|
PenetrationResistance=3.0f
|
||||||
|
ExtraAfflictionResistance=0.3f
|
||||||
|
ExtraDamageResistance=0.2f
|
||||||
|
ProjSuicideAmount=12
|
||||||
|
|
||||||
|
Begin Object Name=MeleeHelper_0
|
||||||
|
BaseDamage=20.0f
|
||||||
|
MomentumTransfer=30000.0f
|
||||||
|
End Object
|
||||||
|
|
||||||
|
Begin Object Name=SpecialMoveHandler_0
|
||||||
|
SpecialMoveClasses(SM_Custom1) = class'CustomZeds.WMSM_Husk_Omega_FireBallBarrageAttack'
|
||||||
|
End Object
|
||||||
|
|
||||||
|
XPValues(0)=30
|
||||||
|
XPValues(1)=40
|
||||||
|
XPValues(2)=54
|
||||||
|
XPValues(3)=62
|
||||||
|
|
||||||
|
HitZones(0)=(GoreHealth=430)
|
||||||
|
HitZones(3)=(GoreHealth=180)
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedHusk_Omega"
|
||||||
|
}
|
55
CustomZeds/Classes/WMPawn_ZedHusk_Tiny.uc
Normal file
55
CustomZeds/Classes/WMPawn_ZedHusk_Tiny.uc
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
class WMPawn_ZedHusk_Tiny extends WMPawn_ZedHusk_NoDAR;
|
||||||
|
|
||||||
|
var linearColor glowColor;
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Tiny Husk";
|
||||||
|
}
|
||||||
|
|
||||||
|
function PossessedBy(Controller C, bool bVehicleTransition)
|
||||||
|
{
|
||||||
|
super.PossessedBy(C, bVehicleTransition);
|
||||||
|
|
||||||
|
if (KFAIController_ZedHusk(C) != None)
|
||||||
|
KFAIController_ZedHusk(C).RequiredHealthPercentForSuicide = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PostBeginPlay()
|
||||||
|
{
|
||||||
|
IntendedBodyScale = 0.7f;
|
||||||
|
|
||||||
|
super.PostBeginPlay();
|
||||||
|
|
||||||
|
UpdateGameplayMICParams();
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function UpdateGameplayMICParams()
|
||||||
|
{
|
||||||
|
local byte i;
|
||||||
|
|
||||||
|
super.UpdateGameplayMICParams();
|
||||||
|
|
||||||
|
if(WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
{
|
||||||
|
for (i = 0; i < CharacterMICs.length; ++i)
|
||||||
|
{
|
||||||
|
CharacterMICs[i].SetVectorParameterValue('Vector_GlowColor', default.glowColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
glowColor=(R=1.0f, G=1.0f, B=1.0f)
|
||||||
|
|
||||||
|
Health=225
|
||||||
|
GroundSpeed=480.0f
|
||||||
|
SprintSpeed=480.0f
|
||||||
|
|
||||||
|
Begin Object Class=WMExplosion_TinyHusk Name=TinyExploTemplate0
|
||||||
|
End Object
|
||||||
|
ExplosionTemplate=TinyExploTemplate0
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedHusk_Tiny"
|
||||||
|
}
|
23
CustomZeds/Classes/WMPawn_ZedHusk_Tiny_Blue.uc
Normal file
23
CustomZeds/Classes/WMPawn_ZedHusk_Tiny_Blue.uc
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
class WMPawn_ZedHusk_Tiny_Blue extends WMPawn_ZedHusk_Tiny;
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Blue Tiny Husk";
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
glowColor=(R=0.6f, G=2.5f, B=5.0f)
|
||||||
|
|
||||||
|
Begin Object Class=PointLightComponent Name=ExplosionPointLightBlue
|
||||||
|
LightColor=(R=31, G=128, B=255, A=255)
|
||||||
|
bCastPerObjectShadows=False
|
||||||
|
End Object
|
||||||
|
|
||||||
|
Begin Object Name=TinyExploTemplate0
|
||||||
|
ExplosionEffects=KFImpactEffectInfo'ZedternalReborn_Zeds.Husk.FX_Husk_Tiny_Explosion_Blue'
|
||||||
|
ExploLight=ExplosionPointLightBlue
|
||||||
|
End Object
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedHusk_Tiny_Blue"
|
||||||
|
}
|
23
CustomZeds/Classes/WMPawn_ZedHusk_Tiny_Green.uc
Normal file
23
CustomZeds/Classes/WMPawn_ZedHusk_Tiny_Green.uc
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
class WMPawn_ZedHusk_Tiny_Green extends WMPawn_ZedHusk_Tiny;
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Green Tiny Husk";
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
glowColor=(R=0.6f, G=5.0f, B=0.6f)
|
||||||
|
|
||||||
|
Begin Object Class=PointLightComponent Name=ExplosionPointLightGreen
|
||||||
|
LightColor=(R=31, G=255, B=31, A=255)
|
||||||
|
bCastPerObjectShadows=False
|
||||||
|
End Object
|
||||||
|
|
||||||
|
Begin Object Name=TinyExploTemplate0
|
||||||
|
ExplosionEffects=KFImpactEffectInfo'ZedternalReborn_Zeds.Husk.FX_Husk_Tiny_Explosion_Green'
|
||||||
|
ExploLight=ExplosionPointLightGreen
|
||||||
|
End Object
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedHusk_Tiny_Green"
|
||||||
|
}
|
23
CustomZeds/Classes/WMPawn_ZedHusk_Tiny_Pink.uc
Normal file
23
CustomZeds/Classes/WMPawn_ZedHusk_Tiny_Pink.uc
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
class WMPawn_ZedHusk_Tiny_Pink extends WMPawn_ZedHusk_Tiny;
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Pink Tiny Husk";
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
glowColor=(R=5.0f, G=0.6f, B=1.8f)
|
||||||
|
|
||||||
|
Begin Object Class=PointLightComponent Name=ExplosionPointLightPink
|
||||||
|
LightColor=(R=255, G=31, B=92, A=255)
|
||||||
|
bCastPerObjectShadows=False
|
||||||
|
End Object
|
||||||
|
|
||||||
|
Begin Object Name=TinyExploTemplate0
|
||||||
|
ExplosionEffects=KFImpactEffectInfo'ZedternalReborn_Zeds.Husk.FX_Husk_Tiny_Explosion_Pink'
|
||||||
|
ExploLight=ExplosionPointLightPink
|
||||||
|
End Object
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedHusk_Tiny_Pink"
|
||||||
|
}
|
46
CustomZeds/Classes/WMPawn_ZedMatriarch.uc
Normal file
46
CustomZeds/Classes/WMPawn_ZedMatriarch.uc
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
class WMPawn_ZedMatriarch extends KFPawn_ZedMatriarch;
|
||||||
|
|
||||||
|
var AkEvent EntranceSound;
|
||||||
|
|
||||||
|
simulated event PostBeginPlay()
|
||||||
|
{
|
||||||
|
// add entrance sound
|
||||||
|
SoundGroupArch.EntranceSound = default.EntranceSound;
|
||||||
|
|
||||||
|
Super.PostBeginPlay();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Summon some children */
|
||||||
|
function SummonChildren()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Play music for this boss (overridden for each boss) */
|
||||||
|
function PlayBossMusic()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static simulated event bool IsABoss()
|
||||||
|
{
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
|
||||||
|
function bool CanBeGrabbed(KFPawn GrabbingPawn, optional bool bIgnoreFalling, optional bool bAllowSameTeamGrab)
|
||||||
|
{
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
EntranceSound=AkEvent'WW_ZED_Matriarch.Play_Matriarch_Jump_Land_01'
|
||||||
|
MinSpawnSquadSizeType=EST_Large
|
||||||
|
bLargeZed=True
|
||||||
|
DoshValue=500
|
||||||
|
|
||||||
|
XPValues(0)=250
|
||||||
|
XPValues(1)=250
|
||||||
|
XPValues(2)=250
|
||||||
|
XPValues(3)=250
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedMatriarch"
|
||||||
|
}
|
46
CustomZeds/Classes/WMPawn_ZedPatriarch.uc
Normal file
46
CustomZeds/Classes/WMPawn_ZedPatriarch.uc
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
class WMPawn_ZedPatriarch extends KFPawn_ZedPatriarch;
|
||||||
|
|
||||||
|
var AkEvent EntranceSound;
|
||||||
|
|
||||||
|
simulated event PostBeginPlay()
|
||||||
|
{
|
||||||
|
// add entrance sound
|
||||||
|
SoundGroupArch.EntranceSound = default.EntranceSound;
|
||||||
|
|
||||||
|
Super.PostBeginPlay();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Summon some children */
|
||||||
|
function SummonChildren()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Play music for this boss (overridden for each boss) */
|
||||||
|
function PlayBossMusic()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static simulated event bool IsABoss()
|
||||||
|
{
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
|
||||||
|
function bool CanBeGrabbed(KFPawn GrabbingPawn, optional bool bIgnoreFalling, optional bool bAllowSameTeamGrab)
|
||||||
|
{
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
EntranceSound=AkEvent'WW_ZED_Patriarch.Play_Pat_Intro_Roar'
|
||||||
|
MinSpawnSquadSizeType=EST_Large
|
||||||
|
bLargeZed=True
|
||||||
|
DoshValue=500
|
||||||
|
|
||||||
|
XPValues(0)=250
|
||||||
|
XPValues(1)=250
|
||||||
|
XPValues(2)=250
|
||||||
|
XPValues(3)=250
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedPatriarch"
|
||||||
|
}
|
60
CustomZeds/Classes/WMPawn_ZedScrake_Emperor.uc
Normal file
60
CustomZeds/Classes/WMPawn_ZedScrake_Emperor.uc
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
class WMPawn_ZedScrake_Emperor extends KFPawn_ZedScrake;
|
||||||
|
|
||||||
|
var const AnimSet ScrakeOmegaAnimSet;
|
||||||
|
var const KFPawnAnimInfo ScrakeOmegaAnimInfo;
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Scrake Emperor";
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PostBeginPlay()
|
||||||
|
{
|
||||||
|
IntendedBodyScale = 1.4f;
|
||||||
|
bVersusZed = True;
|
||||||
|
|
||||||
|
Mesh.AnimSets.AddItem(ScrakeOmegaAnimSet);
|
||||||
|
PawnAnimInfo = ScrakeOmegaAnimInfo;
|
||||||
|
|
||||||
|
super.PostBeginPlay();
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated event bool UsePlayerControlledZedSkin()
|
||||||
|
{
|
||||||
|
return True;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
ScrakeOmegaAnimSet=AnimSet'ZedternalReborn_Zeds.Scrake.Scrake_Omega_AnimSet'
|
||||||
|
ScrakeOmegaAnimInfo=KFPawnAnimInfo'ZedternalReborn_Zeds.Scrake.Scrake_Omega_AnimGroup'
|
||||||
|
DifficultySettings=class'CustomZeds.WMDifficulty_Scrake_Emperor'
|
||||||
|
LocalizationKey="WMPawn_ZedScrake_Emperor"
|
||||||
|
|
||||||
|
RageHealthThresholdNormal=0.2f
|
||||||
|
RageHealthThresholdHard=0.225f
|
||||||
|
RageHealthThresholdSuicidal=0.25f
|
||||||
|
RageHealthThresholdHellOnEarth=0.275f
|
||||||
|
|
||||||
|
bVersusZed=False
|
||||||
|
DoshValue=400
|
||||||
|
Health=4000
|
||||||
|
Mass=225.0f
|
||||||
|
GroundSpeed=180.0f
|
||||||
|
SprintSpeed=640.0f
|
||||||
|
|
||||||
|
Begin Object Name=MeleeHelper_0
|
||||||
|
BaseDamage=20.0f
|
||||||
|
MomentumTransfer=60000.0f
|
||||||
|
End Object
|
||||||
|
|
||||||
|
XPValues(0)=75
|
||||||
|
XPValues(1)=100
|
||||||
|
XPValues(2)=135
|
||||||
|
XPValues(3)=150
|
||||||
|
|
||||||
|
HitZones(0)=(GoreHealth=3000)
|
||||||
|
HitZones(8)=(GoreHealth=75, DmgScale=0.1f)
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedScrake_Emperor"
|
||||||
|
}
|
173
CustomZeds/Classes/WMPawn_ZedScrake_Omega.uc
Normal file
173
CustomZeds/Classes/WMPawn_ZedScrake_Omega.uc
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
class WMPawn_ZedScrake_Omega extends KFPawn_ZedScrake;
|
||||||
|
|
||||||
|
var const AnimSet ScrakeOmegaAnimSet;
|
||||||
|
var const KFPawnAnimInfo ScrakeOmegaAnimInfo;
|
||||||
|
|
||||||
|
var transient ParticleSystemComponent SpecialFXPSCs[2];
|
||||||
|
var const float ExtraAfflictionResistance, ExtraDamageResistance;
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Scrake Omega";
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PostBeginPlay()
|
||||||
|
{
|
||||||
|
IntendedBodyScale = 1.16f;
|
||||||
|
bVersusZed = True;
|
||||||
|
|
||||||
|
Mesh.AnimSets.AddItem(ScrakeOmegaAnimSet);
|
||||||
|
PawnAnimInfo = ScrakeOmegaAnimInfo;
|
||||||
|
|
||||||
|
super.PostBeginPlay();
|
||||||
|
|
||||||
|
UpdateGameplayMICParams();
|
||||||
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
ApplySpecialFX();
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PlayDying(class<DamageType> DamageType, vector HitLoc)
|
||||||
|
{
|
||||||
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
EndSpecialFX();
|
||||||
|
|
||||||
|
super.PlayDying(DamageType, HitLoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function ApplySpecialFX()
|
||||||
|
{
|
||||||
|
local Name SocketBoneName;
|
||||||
|
|
||||||
|
SocketBoneName = Mesh.GetSocketBoneName('FX_EYE_L');
|
||||||
|
if (SocketBoneName != '' && SocketBoneName != 'None')
|
||||||
|
SpecialFXPSCs[0] = WorldInfo.MyEmitterPool.SpawnEmitterMeshAttachment(ParticleSystem'ZedternalReborn_Zeds.FX_Omega', Mesh, 'FX_EYE_L', True, vect(0,0,0));
|
||||||
|
|
||||||
|
SocketBoneName = Mesh.GetSocketBoneName('FX_EYE_R');
|
||||||
|
if (SocketBoneName != '' && SocketBoneName != 'None')
|
||||||
|
SpecialFXPSCs[1] = WorldInfo.MyEmitterPool.SpawnEmitterMeshAttachment(ParticleSystem'ZedternalReborn_Zeds.FX_Omega', Mesh, 'FX_EYE_R', True, vect(0,0,0));
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function EndSpecialFX()
|
||||||
|
{
|
||||||
|
if (SpecialFXPSCs[0] != None && SpecialFXPSCs[0].bIsActive)
|
||||||
|
{
|
||||||
|
SpecialFXPSCs[0].DeactivateSystem();
|
||||||
|
}
|
||||||
|
if (SpecialFXPSCs[1] != None && SpecialFXPSCs[1].bIsActive)
|
||||||
|
{
|
||||||
|
SpecialFXPSCs[1].DeactivateSystem();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function UpdateGameplayMICParams()
|
||||||
|
{
|
||||||
|
local byte i;
|
||||||
|
|
||||||
|
super.UpdateGameplayMICParams();
|
||||||
|
|
||||||
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
{
|
||||||
|
for (i = 0; i < CharacterMICs.length; ++i)
|
||||||
|
{
|
||||||
|
CharacterMICs[i].SetVectorParameterValue('Vector_GlowColor', class'WMPawn_OmegaConstants'.default.OmegaColor);
|
||||||
|
CharacterMICs[i].SetVectorParameterValue('Vector_FresnelGlowColor', class'WMPawn_OmegaConstants'.default.OmegaFresnelColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function float GetDamageTypeModifier(class<DamageType> DT)
|
||||||
|
{
|
||||||
|
local float CurrentMod;
|
||||||
|
|
||||||
|
// Omega ZEDs have extra resistance against all damage type
|
||||||
|
CurrentMod = super.GetDamageTypeModifier(DT);
|
||||||
|
return FMax(0.025f, CurrentMod - ExtraDamageResistance);
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function AdjustAffliction(out float AfflictionPower)
|
||||||
|
{
|
||||||
|
super.AdjustAffliction(AfflictionPower);
|
||||||
|
AfflictionPower *= 1.0f - ExtraAfflictionResistance;
|
||||||
|
}
|
||||||
|
|
||||||
|
function CauseHeadTrauma(float BleedOutTime = 5.0f)
|
||||||
|
{
|
||||||
|
if (!bIsHeadless && !bPlayedDeath && !bDisableHeadless)
|
||||||
|
{
|
||||||
|
if (MyKFAIC != None && KFGameInfo(WorldInfo.Game) != None && MyKFAIC.TimeFirstSawPlayer >= 0)
|
||||||
|
{
|
||||||
|
KFGameInfo(WorldInfo.Game).GameConductor.HandleZedKill(FMax(`TimeSince(MyKFAIC.TimeFirstSawPlayer), 0.0f));
|
||||||
|
MyKFAIC.TimeFirstSawPlayer = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bPlayShambling = True;
|
||||||
|
bIsHeadless = True;
|
||||||
|
|
||||||
|
if (MyKFAIC != None)
|
||||||
|
{
|
||||||
|
MyKFAIC.SetSprintingDisabled(True);
|
||||||
|
}
|
||||||
|
|
||||||
|
bCanBeAdheredTo = False;
|
||||||
|
bCanBeFrictionedTo = False;
|
||||||
|
|
||||||
|
StopAkEventsOnBone('head');
|
||||||
|
|
||||||
|
if (IsDoingSpecialMove() && Mesh.RootMotionMode == RMM_Accel)
|
||||||
|
{
|
||||||
|
Died(LastHitBy, class'DamageType', Location);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsAliveAndWell() && MyKFAIC != None)
|
||||||
|
{
|
||||||
|
if (SpecialMove == SM_None || !SpecialMoves[SpecialMove].bCanOnlyWanderAtEnd)
|
||||||
|
{
|
||||||
|
MyKFAIC.DoHeadlessWander();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BleedOutTime > 0)
|
||||||
|
{
|
||||||
|
SetTimer(FMax(7.0f, BleedOutTime), False, nameof(BleedOutTimer));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated event bool UsePlayerControlledZedSkin()
|
||||||
|
{
|
||||||
|
return True;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
ScrakeOmegaAnimSet=AnimSet'ZedternalReborn_Zeds.Scrake.Scrake_Omega_AnimSet'
|
||||||
|
ScrakeOmegaAnimInfo=KFPawnAnimInfo'ZedternalReborn_Zeds.Scrake.Scrake_Omega_AnimGroup'
|
||||||
|
LocalizationKey="WMPawn_ZedScrake_Omega"
|
||||||
|
|
||||||
|
RageHealthThresholdNormal=0.6f
|
||||||
|
RageHealthThresholdHard=0.7f
|
||||||
|
RageHealthThresholdSuicidal=0.75f
|
||||||
|
RageHealthThresholdHellOnEarth=0.8f
|
||||||
|
|
||||||
|
bVersusZed=False
|
||||||
|
DoshValue=150
|
||||||
|
Health=3800
|
||||||
|
Mass=150.0f
|
||||||
|
GroundSpeed=215.0f
|
||||||
|
SprintSpeed=700.0f
|
||||||
|
ExtraAfflictionResistance=0.4f
|
||||||
|
ExtraDamageResistance=0.3f
|
||||||
|
|
||||||
|
Begin Object Name=MeleeHelper_0
|
||||||
|
BaseDamage=50.0f
|
||||||
|
End Object
|
||||||
|
|
||||||
|
XPValues(0)=68
|
||||||
|
XPValues(1)=90
|
||||||
|
XPValues(2)=120
|
||||||
|
XPValues(3)=138
|
||||||
|
|
||||||
|
HitZones(0)=(GoreHealth=1800)
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedScrake_Omega"
|
||||||
|
}
|
101
CustomZeds/Classes/WMPawn_ZedScrake_Tiny.uc
Normal file
101
CustomZeds/Classes/WMPawn_ZedScrake_Tiny.uc
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
class WMPawn_ZedScrake_Tiny extends KFPawn_ZedScrake;
|
||||||
|
|
||||||
|
var const AnimSet ScrakeTinyAnimSet;
|
||||||
|
var const AnimSet ScrakeOmegaAnimSet;
|
||||||
|
var const KFPawnAnimInfo ScrakeTinyAnimInfo;
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Tiny Scrake";
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PostBeginPlay()
|
||||||
|
{
|
||||||
|
IntendedBodyScale = 0.75f;
|
||||||
|
|
||||||
|
Mesh.AnimSets.AddItem(ScrakeTinyAnimSet);
|
||||||
|
Mesh.AnimSets.AddItem(ScrakeOmegaAnimSet);
|
||||||
|
PawnAnimInfo = ScrakeTinyAnimInfo;
|
||||||
|
|
||||||
|
super.PostBeginPlay();
|
||||||
|
|
||||||
|
SetEnraged(True);
|
||||||
|
}
|
||||||
|
|
||||||
|
function CauseHeadTrauma(float BleedOutTime = 5.0f)
|
||||||
|
{
|
||||||
|
if (!bIsHeadless && !bPlayedDeath && !bDisableHeadless)
|
||||||
|
{
|
||||||
|
if (MyKFAIC != None && KFGameInfo(WorldInfo.Game) != None && MyKFAIC.TimeFirstSawPlayer >= 0)
|
||||||
|
{
|
||||||
|
KFGameInfo(WorldInfo.Game).GameConductor.HandleZedKill(FMax(`TimeSince(MyKFAIC.TimeFirstSawPlayer), 0.0f));
|
||||||
|
MyKFAIC.TimeFirstSawPlayer = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bPlayShambling = True;
|
||||||
|
bIsHeadless = True;
|
||||||
|
|
||||||
|
if (MyKFAIC != None)
|
||||||
|
{
|
||||||
|
MyKFAIC.SetSprintingDisabled(True);
|
||||||
|
}
|
||||||
|
|
||||||
|
bCanBeAdheredTo = False;
|
||||||
|
bCanBeFrictionedTo = False;
|
||||||
|
|
||||||
|
StopAkEventsOnBone('head');
|
||||||
|
|
||||||
|
if (IsDoingSpecialMove() && Mesh.RootMotionMode == RMM_Accel)
|
||||||
|
{
|
||||||
|
Died(LastHitBy, class'DamageType', Location);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsAliveAndWell() && MyKFAIC != None)
|
||||||
|
{
|
||||||
|
if (SpecialMove == SM_None || !SpecialMoves[SpecialMove].bCanOnlyWanderAtEnd)
|
||||||
|
{
|
||||||
|
MyKFAIC.DoHeadlessWander();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BleedOutTime > 0)
|
||||||
|
{
|
||||||
|
SetTimer(FMax(7.0f, BleedOutTime), False, nameof(BleedOutTimer));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
ScrakeTinyAnimSet=AnimSet'ZedternalReborn_Zeds.Scrake.Tiny_Scrake_AnimSet'
|
||||||
|
ScrakeOmegaAnimSet=AnimSet'ZedternalReborn_Zeds.Scrake.Scrake_Omega_AnimSet'
|
||||||
|
ScrakeTinyAnimInfo=KFPawnAnimInfo'ZedternalReborn_Zeds.Scrake.Tiny_Scrake_AnimGroup'
|
||||||
|
LocalizationKey="WMPawn_ZedScrake_Omega"
|
||||||
|
|
||||||
|
RageHealthThresholdNormal=0.99f
|
||||||
|
RageHealthThresholdHard=0.99f
|
||||||
|
RageHealthThresholdSuicidal=0.99f
|
||||||
|
RageHealthThresholdHellOnEarth=0.99f
|
||||||
|
|
||||||
|
DoshValue=55
|
||||||
|
Health=600
|
||||||
|
Mass=150.0f
|
||||||
|
GroundSpeed=540.0f
|
||||||
|
SprintSpeed=680.0f
|
||||||
|
|
||||||
|
Begin Object Name=MeleeHelper_0
|
||||||
|
BaseDamage=15.0f
|
||||||
|
MaxHitRange=180.0f
|
||||||
|
MomentumTransfer=30000.0f
|
||||||
|
End Object
|
||||||
|
|
||||||
|
XPValues(0)=35
|
||||||
|
XPValues(1)=42
|
||||||
|
XPValues(2)=45
|
||||||
|
XPValues(3)=52
|
||||||
|
|
||||||
|
HitZones(0)=(GoreHealth=400)
|
||||||
|
HitZones(8)=(GoreHealth=25)
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedScrake_Tiny"
|
||||||
|
}
|
125
CustomZeds/Classes/WMPawn_ZedSiren_Omega.uc
Normal file
125
CustomZeds/Classes/WMPawn_ZedSiren_Omega.uc
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
class WMPawn_ZedSiren_Omega extends KFPawn_ZedSiren;
|
||||||
|
|
||||||
|
var transient ParticleSystemComponent SpecialFXPSCs[2];
|
||||||
|
var const float ExtraAfflictionResistance, ExtraDamageResistance;
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Siren Omega";
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PostBeginPlay()
|
||||||
|
{
|
||||||
|
IntendedBodyScale = 0.92f;
|
||||||
|
bVersusZed = True;
|
||||||
|
|
||||||
|
super.PostBeginPlay();
|
||||||
|
|
||||||
|
UpdateGameplayMICParams();
|
||||||
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
ApplySpecialFX();
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PlayDying(class<DamageType> DamageType, vector HitLoc)
|
||||||
|
{
|
||||||
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
EndSpecialFX();
|
||||||
|
|
||||||
|
super.PlayDying(DamageType, HitLoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function ApplySpecialFX()
|
||||||
|
{
|
||||||
|
local Name SocketBoneName;
|
||||||
|
|
||||||
|
SocketBoneName = Mesh.GetSocketBoneName('FX_EYE_L');
|
||||||
|
if (SocketBoneName != '' && SocketBoneName != 'None')
|
||||||
|
SpecialFXPSCs[0] = WorldInfo.MyEmitterPool.SpawnEmitterMeshAttachment(ParticleSystem'ZedternalReborn_Zeds.FX_Omega', Mesh, 'FX_EYE_L', True, vect(0,0,0));
|
||||||
|
|
||||||
|
SocketBoneName = Mesh.GetSocketBoneName('FX_EYE_R');
|
||||||
|
if (SocketBoneName != '' && SocketBoneName != 'None')
|
||||||
|
SpecialFXPSCs[1] = WorldInfo.MyEmitterPool.SpawnEmitterMeshAttachment(ParticleSystem'ZedternalReborn_Zeds.FX_Omega', Mesh, 'FX_EYE_R', True, vect(0,0,0));
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function EndSpecialFX()
|
||||||
|
{
|
||||||
|
if (SpecialFXPSCs[0] != None && SpecialFXPSCs[0].bIsActive)
|
||||||
|
{
|
||||||
|
SpecialFXPSCs[0].DeactivateSystem();
|
||||||
|
}
|
||||||
|
if (SpecialFXPSCs[1] != None && SpecialFXPSCs[1].bIsActive)
|
||||||
|
{
|
||||||
|
SpecialFXPSCs[1].DeactivateSystem();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function SetSprinting(bool bNewSprintStatus)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (Health == HealthMax)
|
||||||
|
super.SetSprinting(False);
|
||||||
|
else
|
||||||
|
super.SetSprinting(bNewSprintStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function UpdateGameplayMICParams()
|
||||||
|
{
|
||||||
|
local byte i;
|
||||||
|
|
||||||
|
super.UpdateGameplayMICParams();
|
||||||
|
|
||||||
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
{
|
||||||
|
for (i = 0; i < CharacterMICs.length; ++i)
|
||||||
|
{
|
||||||
|
CharacterMICs[i].SetVectorParameterValue('Vector_GlowColor', class'WMPawn_OmegaConstants'.default.OmegaColor);
|
||||||
|
CharacterMICs[i].SetVectorParameterValue('Vector_FresnelGlowColor', class'WMPawn_OmegaConstants'.default.OmegaFresnelColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function float GetDamageTypeModifier(class<DamageType> DT)
|
||||||
|
{
|
||||||
|
local float CurrentMod;
|
||||||
|
|
||||||
|
// Omega ZEDs have extra resistance against all damage type
|
||||||
|
CurrentMod = super.GetDamageTypeModifier(DT);
|
||||||
|
return FMax(0.025f, CurrentMod - ExtraDamageResistance);
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function AdjustAffliction(out float AfflictionPower)
|
||||||
|
{
|
||||||
|
super.AdjustAffliction(AfflictionPower);
|
||||||
|
AfflictionPower *= 1.0f - ExtraAfflictionResistance;
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated event bool UsePlayerControlledZedSkin()
|
||||||
|
{
|
||||||
|
return True;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
DifficultySettings=Class'CustomZeds.WMDifficulty_Siren_Omega'
|
||||||
|
|
||||||
|
bVersusZed=False
|
||||||
|
DoshValue=50
|
||||||
|
Health=275
|
||||||
|
GroundSpeed=180.0f
|
||||||
|
SprintSpeed=245.0f
|
||||||
|
ExtraAfflictionResistance=0.2f
|
||||||
|
ExtraDamageResistance=0.1f
|
||||||
|
|
||||||
|
Begin Object Name=NeckLightComponent0
|
||||||
|
LightColor=(R=255,G=64,B=128,A=255)
|
||||||
|
End Object
|
||||||
|
|
||||||
|
XPValues(0)=22
|
||||||
|
XPValues(1)=30
|
||||||
|
XPValues(2)=30
|
||||||
|
XPValues(3)=30
|
||||||
|
|
||||||
|
HitZones(0)=(GoreHealth=180)
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedSiren_Omega"
|
||||||
|
}
|
11
CustomZeds/Classes/WMPawn_ZedStalker_NoDAR.uc
Normal file
11
CustomZeds/Classes/WMPawn_ZedStalker_NoDAR.uc
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
class WMPawn_ZedStalker_NoDAR extends KFPawn_ZedStalker;
|
||||||
|
|
||||||
|
static event class<KFPawn_Monster> GetAIPawnClassToSpawn()
|
||||||
|
{
|
||||||
|
return default.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
Name="Default__WMPawn_ZedStalker_NoDAR"
|
||||||
|
}
|
84
CustomZeds/Classes/WMPawn_ZedStalker_Omega.uc
Normal file
84
CustomZeds/Classes/WMPawn_ZedStalker_Omega.uc
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
class WMPawn_ZedStalker_Omega extends WMPawn_ZedStalker_NoDAR;
|
||||||
|
|
||||||
|
var const AnimSet StalkerOmegaAnimSet;
|
||||||
|
var const float ExtraAfflictionResistance, ExtraDamageResistance;
|
||||||
|
|
||||||
|
static function string GetLocalizedName()
|
||||||
|
{
|
||||||
|
return "Stalker Omega";
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function PostBeginPlay()
|
||||||
|
{
|
||||||
|
bVersusZed = True;
|
||||||
|
|
||||||
|
//Replace the master AnimSet with the omega master AnimSet
|
||||||
|
Mesh.AnimSets[0] = StalkerOmegaAnimSet;
|
||||||
|
|
||||||
|
super.PostBeginPlay();
|
||||||
|
|
||||||
|
UpdateGameplayMICParams();
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function UpdateGameplayMICParams()
|
||||||
|
{
|
||||||
|
local byte i;
|
||||||
|
|
||||||
|
super.UpdateGameplayMICParams();
|
||||||
|
|
||||||
|
if ((!bIsCloaking || bIsGoreMesh) && WorldInfo.NetMode != NM_DedicatedServer)
|
||||||
|
{
|
||||||
|
for (i = 0; i < CharacterMICs.length; ++i)
|
||||||
|
{
|
||||||
|
CharacterMICs[i].SetVectorParameterValue('Emissive Color', class'WMPawn_OmegaConstants'.default.OmegaColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated event bool UsePlayerControlledZedSkin()
|
||||||
|
{
|
||||||
|
if (class'KFGameEngine'.static.GetSeasonalEventID() % 10 == SEI_Fall)
|
||||||
|
return False;
|
||||||
|
|
||||||
|
return True;
|
||||||
|
}
|
||||||
|
|
||||||
|
function float GetDamageTypeModifier(class<DamageType> DT)
|
||||||
|
{
|
||||||
|
local float CurrentMod;
|
||||||
|
|
||||||
|
// Omega ZEDs have extra resistance against all damage type
|
||||||
|
CurrentMod = super.GetDamageTypeModifier(DT);
|
||||||
|
return FMax(0.025f, CurrentMod - ExtraDamageResistance);
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function AdjustAffliction(out float AfflictionPower)
|
||||||
|
{
|
||||||
|
super.AdjustAffliction(AfflictionPower);
|
||||||
|
AfflictionPower *= 1.0f - ExtraAfflictionResistance;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
StalkerOmegaAnimSet=AnimSet'ZedternalReborn_Zeds.Stalker.Stalker_Omega_AnimSet'
|
||||||
|
DifficultySettings=class'CustomZeds.WMDifficulty_Stalker_Omega'
|
||||||
|
|
||||||
|
bVersusZed=False
|
||||||
|
DoshValue=22
|
||||||
|
Health=250
|
||||||
|
Mass=55.0f
|
||||||
|
GroundSpeed=425.0f
|
||||||
|
SprintSpeed=565.0f
|
||||||
|
PenetrationResistance=0.8f
|
||||||
|
ExtraAfflictionResistance=0.1f
|
||||||
|
ExtraDamageResistance=0.05f
|
||||||
|
|
||||||
|
XPValues(0)=12
|
||||||
|
XPValues(1)=15
|
||||||
|
XPValues(2)=15
|
||||||
|
XPValues(3)=15
|
||||||
|
|
||||||
|
HitZones(0)=(GoreHealth=100)
|
||||||
|
|
||||||
|
Name="Default__WMPawn_ZedStalker_Omega"
|
||||||
|
}
|
24
CustomZeds/Classes/WMProj_Husk_Fireball_Suicide.uc
Normal file
24
CustomZeds/Classes/WMProj_Husk_Fireball_Suicide.uc
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
class WMProj_Husk_Fireball_Suicide extends KFProj_Husk_Fireball;
|
||||||
|
|
||||||
|
simulated function Tick(float Delta)
|
||||||
|
{
|
||||||
|
SetRotation(rotator(Velocity));
|
||||||
|
super.Tick(Delta);
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
Physics=PHYS_Falling
|
||||||
|
Speed=1200.0f
|
||||||
|
MaxSpeed=1200.0f
|
||||||
|
|
||||||
|
BurnDuration=2.0f
|
||||||
|
BurnDamageInterval=0.5f
|
||||||
|
|
||||||
|
Begin Object Name=ExploTemplate0
|
||||||
|
Damage=13.0f
|
||||||
|
DamageRadius=250.0f
|
||||||
|
End Object
|
||||||
|
|
||||||
|
Name="Default__WMProj_Husk_Fireball_Suicide"
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
class WMSM_Husk_Omega_FireBallBarrageAttack extends KFSM_Husk_FireBallAttack;
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
Handle=WMSM_Husk_Omega_FireBallBarrageAttack
|
||||||
|
AnimNames=(Atk_Random_Shoot_V1)
|
||||||
|
|
||||||
|
Name="Default__WMSM_Husk_Omega_FireBallBarrageAttack"
|
||||||
|
}
|
0
CustomZeds/Globals.uci
Normal file
0
CustomZeds/Globals.uci
Normal file
BIN
CustomZeds/ZedternalReborn_Zeds.upk
Normal file
BIN
CustomZeds/ZedternalReborn_Zeds.upk
Normal file
Binary file not shown.
52
builder.cfg
Normal file
52
builder.cfg
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
### Build parameters ###
|
||||||
|
|
||||||
|
# If True - compresses the mutator when compiling
|
||||||
|
# Scripts will be stored in binary form
|
||||||
|
# (reduces the size of the output file)
|
||||||
|
StripSource="True"
|
||||||
|
|
||||||
|
# Mutators to be compiled
|
||||||
|
# Specify them with a space as a separator,
|
||||||
|
# Mutators will be compiled in the specified order
|
||||||
|
PackageBuildOrder="CustomZeds"
|
||||||
|
|
||||||
|
|
||||||
|
### Steam Workshop upload parameters ###
|
||||||
|
|
||||||
|
# Mutators that will be uploaded to the workshop
|
||||||
|
# Specify them with a space as a separator,
|
||||||
|
# The order doesn't matter
|
||||||
|
PackageUpload="CustomZeds"
|
||||||
|
|
||||||
|
|
||||||
|
### Test parameters ###
|
||||||
|
|
||||||
|
# Map:
|
||||||
|
Map="KF-Nuked"
|
||||||
|
|
||||||
|
# Game:
|
||||||
|
# Survival: KFGameContent.KFGameInfo_Survival
|
||||||
|
# WeeklyOutbreak: KFGameContent.KFGameInfo_WeeklySurvival
|
||||||
|
# Endless: KFGameContent.KFGameInfo_Endless
|
||||||
|
# Objective: KFGameContent.KFGameInfo_Objective
|
||||||
|
# Versus: KFGameContent.KFGameInfo_VersusSurvival
|
||||||
|
Game="KFGameContent.KFGameInfo_Survival"
|
||||||
|
|
||||||
|
# Difficulty:
|
||||||
|
# Normal: 0
|
||||||
|
# Hard: 1
|
||||||
|
# Suicide: 2
|
||||||
|
# Hell: 3
|
||||||
|
Difficulty="0"
|
||||||
|
|
||||||
|
# GameLength:
|
||||||
|
# 4 waves: 0
|
||||||
|
# 7 waves: 1
|
||||||
|
# 10 waves: 2
|
||||||
|
GameLength="0"
|
||||||
|
|
||||||
|
# Mutators
|
||||||
|
Mutators=""
|
||||||
|
|
||||||
|
# Additional parameters
|
||||||
|
Args=""
|
1
tools
Submodule
1
tools
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 49fcaf67a29c5b478dc10f1f0ae08ed43017cd36
|
Loading…
x
Reference in New Issue
Block a user