upload
This commit is contained in:
@ -280,9 +280,9 @@ DefaultProperties
|
||||
MaxChestBeamHeightOffset=64.f
|
||||
|
||||
PhaseThresholds[0]=1
|
||||
PhaseThresholds[1]=0.65 //0.75
|
||||
PhaseThresholds[2]=0.5
|
||||
PhaseThresholds[3]=0.2 //0.25 //0.1
|
||||
PhaseThresholds[1]=0.75 //0.65 //0.75
|
||||
PhaseThresholds[2]=0.6 //0.5
|
||||
PhaseThresholds[3]=0.3 //0.2 //0.25 //0.1
|
||||
|
||||
ChestBeamMinPhase=2
|
||||
|
||||
|
51
KFGameContent/Classes/KFDT_Ballistic_HRG_Stunner.uc
Normal file
51
KFGameContent/Classes/KFDT_Ballistic_HRG_Stunner.uc
Normal file
@ -0,0 +1,51 @@
|
||||
//=============================================================================
|
||||
// KFDT_Ballistic_HRG_Stunner
|
||||
//=============================================================================
|
||||
// Damage type class for the HRG Stunner
|
||||
//=============================================================================
|
||||
// Killing Floor 2
|
||||
// Copyright (C) 2021 Tripwire Interactive LLC
|
||||
//=============================================================================
|
||||
|
||||
class KFDT_Ballistic_HRG_Stunner extends KFDT_Ballistic_Submachinegun
|
||||
abstract
|
||||
hidedropdown;
|
||||
|
||||
/** Allows the damage type to customize exactly which hit zones it can dismember */
|
||||
static simulated function bool CanDismemberHitZone( name InHitZoneName )
|
||||
{
|
||||
if( super.CanDismemberHitZone( InHitZoneName ) )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
switch ( InHitZoneName )
|
||||
{
|
||||
case 'lupperarm':
|
||||
case 'rupperarm':
|
||||
case 'chest':
|
||||
case 'heart':
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
BloodSpread=0.4
|
||||
BloodScale=0.6
|
||||
|
||||
KDamageImpulse=1500 //900
|
||||
KDeathUpKick=-1000 //-500
|
||||
KDeathVel=600 //350
|
||||
GibImpulseScale=1.0
|
||||
|
||||
StumblePower=35
|
||||
KnockdownPower=25
|
||||
GunHitPower=25
|
||||
|
||||
//Perk
|
||||
ModifierPerkList(0)=class'KFPerk_SWAT'
|
||||
WeaponDef=class'KFWeapDef_HRG_Stunner'
|
||||
}
|
49
KFGameContent/Classes/KFDT_Ballistic_HRG_Stunner_Alt.uc
Normal file
49
KFGameContent/Classes/KFDT_Ballistic_HRG_Stunner_Alt.uc
Normal file
@ -0,0 +1,49 @@
|
||||
//=============================================================================
|
||||
// KFDT_Ballistic_HRG_Stunner_Alt
|
||||
//=============================================================================
|
||||
// Damage type class for the HRG Stunner alt fire
|
||||
//=============================================================================
|
||||
// Killing Floor 2
|
||||
// Copyright (C) 2021 Tripwire Interactive LLC
|
||||
//=============================================================================
|
||||
|
||||
class KFDT_Ballistic_HRG_Stunner_Alt extends KFDT_Ballistic_Submachinegun
|
||||
abstract
|
||||
hidedropdown;
|
||||
|
||||
/** Allows the damage type to customize exactly which hit zones it can dismember */
|
||||
static simulated function bool CanDismemberHitZone( name InHitZoneName )
|
||||
{
|
||||
if( super.CanDismemberHitZone( InHitZoneName ) )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
switch ( InHitZoneName )
|
||||
{
|
||||
case 'lupperarm':
|
||||
case 'rupperarm':
|
||||
case 'chest':
|
||||
case 'heart':
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
BloodSpread=0.4
|
||||
BloodScale=0.6
|
||||
|
||||
KDamageImpulse=900
|
||||
KDeathUpKick=-500
|
||||
KDeathVel=350
|
||||
|
||||
StumblePower=0 //200
|
||||
GunHitPower=0 //150
|
||||
|
||||
//Perk
|
||||
ModifierPerkList(0)=class'KFPerk_SWAT'
|
||||
WeaponDef=class'KFWeapDef_HRG_Stunner'
|
||||
}
|
16
KFGameContent/Classes/KFDT_Bludgeon_Doshinegun.uc
Normal file
16
KFGameContent/Classes/KFDT_Bludgeon_Doshinegun.uc
Normal file
@ -0,0 +1,16 @@
|
||||
//=============================================================================
|
||||
// KFDT_Bludgeon_Doshinegun
|
||||
//=============================================================================
|
||||
// Killing Floor 2
|
||||
// Copyright (C) 2021 Tripwire Interactive LLC
|
||||
//=============================================================================
|
||||
|
||||
class KFDT_Bludgeon_Doshinegun extends KFDT_Bludgeon_RifleButt
|
||||
abstract
|
||||
hidedropdown;
|
||||
|
||||
DefaultProperties
|
||||
{
|
||||
//defaults
|
||||
WeaponDef=class'KFWeapDef_Doshinegun'
|
||||
}
|
25
KFGameContent/Classes/KFDT_Bludgeon_Doshinegun_Shot.uc
Normal file
25
KFGameContent/Classes/KFDT_Bludgeon_Doshinegun_Shot.uc
Normal file
@ -0,0 +1,25 @@
|
||||
//=============================================================================
|
||||
// KFDT_Bludgeon_Doshinegun_Shot
|
||||
//=============================================================================
|
||||
// Bills hit hard
|
||||
//=============================================================================
|
||||
// Killing Floor 2
|
||||
// Copyright (C) 2021 Tripwire Interactive LLC
|
||||
//=============================================================================
|
||||
|
||||
class KFDT_Bludgeon_Doshinegun_Shot extends KFDT_Bludgeon
|
||||
abstract
|
||||
hidedropdown;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
KDamageImpulse=900
|
||||
KDeathUpKick=-300
|
||||
KDeathVel=100
|
||||
|
||||
StumblePower=120
|
||||
StunPower=40
|
||||
GunHitPower=150
|
||||
|
||||
WeaponDef=class'KFWeapDef_Doshinegun'
|
||||
}
|
@ -12,6 +12,6 @@ class KFDT_Bludgeon_FlareGun extends KFDT_Bludgeon_RifleButt
|
||||
DefaultProperties
|
||||
{
|
||||
WeaponDef=class'KFWeapDef_FlareGun'
|
||||
ModifierPerkList(0)=class'KFPerk_Gunslinger'
|
||||
ModifierPerkList(1)=class'KFPerk_Sharpshooter'
|
||||
ModifierPerkList(1)=class'KFPerk_Gunslinger'
|
||||
ModifierPerkList(2)=class'KFPerk_Sharpshooter'
|
||||
}
|
@ -21,5 +21,5 @@ defaultproperties
|
||||
MeleeHitPower=100
|
||||
|
||||
WeaponDef=class'KFWeapDef_G18'
|
||||
ModifierPerkList(0)=class'KFPerk_Swat'
|
||||
ModifierPerkList(1)=class'KFPerk_Swat'
|
||||
}
|
@ -12,6 +12,6 @@ class KFDT_Bludgeon_HRGWinterbite extends KFDT_Bludgeon_RifleButt
|
||||
DefaultProperties
|
||||
{
|
||||
WeaponDef=class'KFWeapDef_HRGWinterbite'
|
||||
ModifierPerkList(0)=class'KFPerk_Gunslinger'
|
||||
ModifierPerkList(1)=class'KFPerk_Sharpshooter'
|
||||
ModifierPerkList(1)=class'KFPerk_Gunslinger'
|
||||
ModifierPerkList(2)=class'KFPerk_Sharpshooter'
|
||||
}
|
@ -10,7 +10,7 @@ class KFDT_Bludgeon_HRG_SonicGun extends KFDT_Bludgeon_RifleButt
|
||||
|
||||
DefaultProperties
|
||||
{
|
||||
ModifierPerkList(0)=class'KFPerk_Survivalist'
|
||||
ModifierPerkList(1)=class'KFPerk_Survivalist'
|
||||
//defaults
|
||||
WeaponDef=class'KFWeapDef_HRG_SonicGun'
|
||||
}
|
16
KFGameContent/Classes/KFDT_Bludgeon_HRG_Stunner.uc
Normal file
16
KFGameContent/Classes/KFDT_Bludgeon_HRG_Stunner.uc
Normal file
@ -0,0 +1,16 @@
|
||||
//=============================================================================
|
||||
// KFDT_Bludgeon_HRG_Stunner
|
||||
//=============================================================================
|
||||
// Killing Floor 2
|
||||
// Copyright (C) 2021 Tripwire Interactive LLC
|
||||
//=============================================================================
|
||||
|
||||
class KFDT_Bludgeon_HRG_Stunner extends KFDT_Bludgeon_RifleButt
|
||||
abstract
|
||||
hidedropdown;
|
||||
|
||||
DefaultProperties
|
||||
{
|
||||
//defaults
|
||||
WeaponDef=class'KFWeapDef_HRG_Stunner'
|
||||
}
|
@ -14,6 +14,6 @@ DefaultProperties
|
||||
StumblePower=200
|
||||
MeleeHitPower=100
|
||||
|
||||
ModifierPerkList(0)=class'KFPerk_FieldMedic'
|
||||
ModifierPerkList(1)=class'KFPerk_FieldMedic'
|
||||
WeaponDef=class'KFWeapDef_HRG_Vampire'
|
||||
}
|
29
KFGameContent/Classes/KFDT_Explosive_HRG_Stunner.uc
Normal file
29
KFGameContent/Classes/KFDT_Explosive_HRG_Stunner.uc
Normal file
@ -0,0 +1,29 @@
|
||||
//=============================================================================
|
||||
// KFDT_Explosive_HRG_Stunner
|
||||
//=============================================================================
|
||||
//=============================================================================
|
||||
// Killing Floor 2
|
||||
// Copyright (C) 2021 Tripwire Interactive LLC
|
||||
//=============================================================================
|
||||
|
||||
class KFDT_Explosive_HRG_Stunner extends KFDT_Explosive
|
||||
abstract
|
||||
hidedropdown;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
bShouldSpawnPersistentBlood=true
|
||||
|
||||
// physics impact
|
||||
RadialDamageImpulse=3000 //5000 //20000
|
||||
GibImpulseScale=0.15
|
||||
KDeathUpKick=1000
|
||||
KDeathVel=300
|
||||
|
||||
StunPower=160
|
||||
StumblePower=40
|
||||
|
||||
//Perk
|
||||
ModifierPerkList(0)=class'KFPerk_SWAT'
|
||||
WeaponDef=class'KFWeapDef_HRG_Stunner'
|
||||
}
|
@ -666,6 +666,17 @@ function SetMonsterDefaults(KFPawn_Monster P)
|
||||
super.SetMonsterDefaults(P);
|
||||
}
|
||||
|
||||
// Save player's stats on leave
|
||||
function UnregisterPlayer(PlayerController PC)
|
||||
{
|
||||
super.UnregisterPlayer(PC);
|
||||
|
||||
if (GetNumPlayers() == 0 && MyKFGRI.bIsEndlessPaused)
|
||||
{
|
||||
ResumeEndlessGame();
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
bIsEndlessGame = true
|
||||
|
@ -107,6 +107,9 @@ function StartMatch()
|
||||
|
||||
function PlayWaveStartDialog()
|
||||
{
|
||||
if (OutbreakEvent != none && OutbreakEvent.ActiveEvent.bBossRushMode)
|
||||
return;
|
||||
|
||||
`DialogManager.PlayWaveStartDialog(MyKFGRI.IsBossWave());
|
||||
if (WaveNum == 1)
|
||||
{
|
||||
|
@ -66,9 +66,13 @@ event PreBeginPlay()
|
||||
|
||||
OutbreakEvent.UpdateGRI();
|
||||
|
||||
if (Role == Role_Authority && MyKFGRI != none && OutbreakEvent.ActiveEvent.bUnlimitedWeaponPickups)
|
||||
if (Role == Role_Authority && MyKFGRI != none)
|
||||
{
|
||||
MyKFGRI.NotifyBrokenTrader();
|
||||
MyKFGRI.NotifyWeeklyEventIndex(ActiveEventIdx);
|
||||
if ( OutbreakEvent.ActiveEvent.bUnlimitedWeaponPickups)
|
||||
{
|
||||
MyKFGRI.NotifyBrokenTrader();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -226,7 +230,19 @@ function ResetPermanentZed()
|
||||
|
||||
function float GetAdjustedAIDoshValue( class<KFPawn_Monster> MonsterClass )
|
||||
{
|
||||
return super.GetAdjustedAIDoshValue(MonsterClass) * OutbreakEvent.ActiveEvent.DoshOnKillGlobalModifier;
|
||||
if (!OutbreakEvent.ActiveEvent.bBossRushMode)
|
||||
{
|
||||
return super.GetAdjustedAIDoshValue(MonsterClass) * OutbreakEvent.ActiveEvent.DoshOnKillGlobalModifier;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((WaveNum-1) < OutbreakEvent.ActiveEvent.BossRushOverrideParams.PerWaves.length)
|
||||
{
|
||||
return super.GetAdjustedAIDoshValue(MonsterClass) * OutbreakEvent.ActiveEvent.BossRushOverrideParams.PerWaves[WaveNum-1].DoshOnKillGlobalModifier;
|
||||
}
|
||||
}
|
||||
|
||||
return super.GetAdjustedAIDoshValue(MonsterClass);
|
||||
}
|
||||
|
||||
protected function ScoreMonsterKill( Controller Killer, Controller Monster, KFPawn_Monster MonsterPawn )
|
||||
@ -385,24 +401,37 @@ function SetBossIndex()
|
||||
{
|
||||
local BossSpawnReplacement Replacement;
|
||||
local int ReplaceIdx;
|
||||
local int i;
|
||||
|
||||
BossIndex = Rand(default.AIBossClassList.Length);
|
||||
// Ignore normal events.
|
||||
if (OutbreakEvent.ActiveEvent.bBossRushMode)
|
||||
{
|
||||
if (BossRushEnemies.length == 0)
|
||||
{
|
||||
for(i=0; i < default.AIBossClassList.length; ++i)
|
||||
{
|
||||
BossRushEnemies.AddItem(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Search in the replacement list for the one that the game type wanted to use
|
||||
// If we find it, grab the appropriate index into the original AI class list
|
||||
// so we can properly cache it.
|
||||
foreach OutbreakEvent.ActiveEvent.BossSpawnReplacementList(Replacement)
|
||||
{
|
||||
if (Replacement.SpawnEntry == BossIndex)
|
||||
{
|
||||
ReplaceIdx = AIBossClassList.Find(Replacement.NewClass);
|
||||
if (ReplaceIdx != INDEX_NONE)
|
||||
{
|
||||
BossIndex = ReplaceIdx;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
BossIndex = Rand(default.AIBossClassList.Length);
|
||||
|
||||
//Search in the replacement list for the one that the game type wanted to use
|
||||
// If we find it, grab the appropriate index into the original AI class list
|
||||
// so we can properly cache it.
|
||||
foreach OutbreakEvent.ActiveEvent.BossSpawnReplacementList(Replacement)
|
||||
{
|
||||
if (Replacement.SpawnEntry == BossIndex)
|
||||
{
|
||||
ReplaceIdx = AIBossClassList.Find(Replacement.NewClass);
|
||||
if (ReplaceIdx != INDEX_NONE)
|
||||
{
|
||||
BossIndex = ReplaceIdx;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MyKFGRI.CacheSelectedBoss(BossIndex);
|
||||
}
|
||||
@ -439,6 +468,10 @@ function TickZedTime( float DeltaTime )
|
||||
function WaveEnded(EWaveEndCondition WinCondition)
|
||||
{
|
||||
local KFPawn_Human Pawn;
|
||||
local bool bWasFirstTime;
|
||||
|
||||
// This function is called multiple times in a row. Only apply it once.
|
||||
bWasFirstTime = bWaveStarted;
|
||||
|
||||
super.WaveEnded(WinCondition);
|
||||
|
||||
@ -456,9 +489,30 @@ function WaveEnded(EWaveEndCondition WinCondition)
|
||||
}
|
||||
}
|
||||
|
||||
if (WinCondition == WEC_WaveWon && bWasFirstTime)
|
||||
{
|
||||
GrantExtraDoshOnWaveWon();
|
||||
}
|
||||
|
||||
DisableGlobalDamage();
|
||||
}
|
||||
|
||||
/** Grant dosh to every player even no matter it's state when a wave is won. */
|
||||
function GrantExtraDoshOnWaveWon()
|
||||
{
|
||||
local KFPlayerController KFPC;
|
||||
local int ExtraDosh;
|
||||
//
|
||||
if (OutbreakEvent.ActiveEvent.bBossRushMode && (WaveNum-1) < OutbreakEvent.ActiveEvent.BossRushOverrideParams.PerWaves.length)
|
||||
{
|
||||
ExtraDosh = OutbreakEvent.ActiveEvent.BossRushOverrideParams.PerWaves[WaveNum-1].ExtraDoshGrantedonWaveWon;
|
||||
foreach WorldInfo.AllControllers(class'KFPlayerController', KFPC)
|
||||
{
|
||||
KFPlayerReplicationInfo(KFPC.PlayerReplicationInfo).AddDosh(ExtraDosh, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function ClearZedTimePCTimers()
|
||||
{
|
||||
local KFPlayerController_WeeklySurvival KFPC;
|
||||
|
@ -10,24 +10,42 @@ class KFOutbreakEvent_Weekly extends KFOutbreakEvent;
|
||||
|
||||
function OnScoreKill(Pawn KilledPawn)
|
||||
{
|
||||
local StatAdjustments ToAdjust;
|
||||
local int WaveNum;
|
||||
|
||||
foreach ActiveEvent.ZedsToAdjust(ToAdjust)
|
||||
{
|
||||
if (ClassIsChildOf(KilledPawn.class, ToAdjust.ClassToAdjust))
|
||||
{
|
||||
if (ToAdjust.bExplosiveDeath && ToAdjust.ExplosionTemplate != none)
|
||||
{
|
||||
//Skip if we shouldn't do the normal death explosion
|
||||
if (KFPawn(KilledPawn) != none && !KFPawn(KilledPawn).WeeklyShouldExplodeOnDeath())
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!ActiveEvent.bBossRushMode)
|
||||
{
|
||||
AdjustScoreKill(KilledPawn, ActiveEvent.ZedsToAdjust);
|
||||
}
|
||||
else
|
||||
{
|
||||
WaveNum = KFGameInfo_WeeklySurvival(Outer).WaveNum - 1;
|
||||
if ( WaveNum < ActiveEvent.BossRushOverrideParams.PerWaves.length )
|
||||
{
|
||||
AdjustScoreKill(KilledPawn, ActiveEvent.BossRushOverrideParams.PerWaves[WaveNum].ZedsToAdjust);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
KFGameInfo_WeeklySurvival(Outer).DoDeathExplosion(KilledPawn, ToAdjust.ExplosionTemplate, ToAdjust.ExplosionIgnoreClass);
|
||||
}
|
||||
}
|
||||
}
|
||||
function AdjustScoreKill(Pawn KilledPawn, array <StatAdjustments> Adjustments)
|
||||
{
|
||||
local StatAdjustments ToAdjust;
|
||||
|
||||
foreach Adjustments(ToAdjust)
|
||||
{
|
||||
if (ClassIsChildOf(KilledPawn.class, ToAdjust.ClassToAdjust))
|
||||
{
|
||||
if (ToAdjust.bExplosiveDeath && ToAdjust.ExplosionTemplate != none)
|
||||
{
|
||||
//Skip if we shouldn't do the normal death explosion
|
||||
if (KFPawn(KilledPawn) != none && !KFPawn(KilledPawn).WeeklyShouldExplodeOnDeath())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
KFGameInfo_WeeklySurvival(Outer).DoDeathExplosion(KilledPawn, ToAdjust.ExplosionTemplate, ToAdjust.ExplosionIgnoreClass);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function AdjustScoreDamage(Controller InstigatedBy, Pawn DamagedPawn, class<DamageType> damageType)
|
||||
@ -626,10 +644,270 @@ defaultproperties
|
||||
(SpawnEntry=AT_GoreFast,NewClass=(class'KFGameContent.KFPawn_ZedGorefastDualBlade'),PercentChance=0.15),
|
||||
(SpawnEntry=AT_Crawler,NewClass=(class'KFGameContent.KFPawn_ZedCrawlerKing'),PercentChance=0.15),
|
||||
(SpawnEntry=AT_Bloat,NewClass=(class'KFGameContent.KFPawn_ZedScrake'),PercentChance=0.05),
|
||||
(SpawnEntry=AT_FleshpoundMini,NewClass=(class'KFGameContent.KFPawn_ZedFleshpound'),PercentChance=0.2)
|
||||
(SpawnEntry=AT_FleshpoundMini,NewClass=(class'KFGameContent.KFPawn_ZedFleshpound'),PercentChance=0.2)
|
||||
)}
|
||||
)}
|
||||
|
||||
// Boss Rush
|
||||
SetEvents[14]={(
|
||||
EventDifficulty=2,
|
||||
GameLength=GL_Short,
|
||||
SpawnRateMultiplier=0,
|
||||
bBossRushMode=true,
|
||||
OverrideAmmoPickupModifier=1,
|
||||
WaveAmmoPickupModifiers={(
|
||||
0.99, 0.99, 0.99, 0.99, 0.99, 0.99
|
||||
)},
|
||||
BossRushOverrideParams={(PerWaves={(
|
||||
// WAVE 1
|
||||
(ZedsToAdjust={(
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedMatriarch', HealthScale=0.22,DamageDealtScale=0.7, InitialGroundSpeedModifierScale=0.75,ShieldScale=0.22),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedPatriarch', HealthScale=0.22,DamageDealtScale=0.7, InitialGroundSpeedModifierScale=0.75),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedHans', HealthScale=0.22,DamageDealtScale=0.7, InitialGroundSpeedModifierScale=0.75,ShieldScale=0.22),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedFleshpoundKing', HealthScale=0.22,DamageDealtScale=0.7, InitialGroundSpeedModifierScale=0.75,ShieldScale=0.22),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedBloatKing', HealthScale=0.22,DamageDealtScale=0.7, InitialGroundSpeedModifierScale=0.75,ShieldScale=0.22),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedDAR_EMP', HealthScale=0.6,DamageDealtScale=0.5, InitialGroundSpeedModifierScale=0.7),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedDAR_Laser', HealthScale=0.6,DamageDealtScale=0.5, InitialGroundSpeedModifierScale=0.7),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedDAR_Rocket', HealthScale=0.6,DamageDealtScale=0.5, InitialGroundSpeedModifierScale=0.7),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedFleshpoundMini', HealthScale=0.6,DamageDealtScale=0.5, InitialGroundSpeedModifierScale=0.7),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedBloat', HealthScale=0.6,DamageDealtScale=0.5, InitialGroundSpeedModifierScale=0.7),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedHusk', HealthScale=0.6,DamageDealtScale=0.5, InitialGroundSpeedModifierScale=0.7),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedClot_AlphaKing', HealthScale=0.6,DamageDealtScale=0.5, InitialGroundSpeedModifierScale=0.7),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedGorefastDualBlade',HealthScale=0.6,DamageDealtScale=0.5, InitialGroundSpeedModifierScale=0.7),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedBloatKingSubspawn',HealthScale=0.6,DamageDealtScale=0.3, InitialGroundSpeedModifierScale=0.6)
|
||||
)},
|
||||
/*SpawnReplacementList={(
|
||||
(SpawnEntry=AT_Clot,NewClass=(class'KFGameContent.KFPawn_ZedClot_Alpha'),PercentChance=0.15),
|
||||
(SpawnEntry=AT_AlphaClot,NewClass=(class'KFGameContent.KFPawn_ZedClot_AlphaKing'),PercentChance=0.15),
|
||||
(SpawnEntry=AT_GoreFast,NewClass=(class'KFGameContent.KFPawn_ZedGorefastDualBlade'),PercentChance=0.15),
|
||||
(SpawnEntry=AT_Crawler,NewClass=(class'KFGameContent.KFPawn_ZedCrawlerKing'),PercentChance=0.15),
|
||||
(SpawnEntry=AT_Bloat,NewClass=(class'KFGameContent.KFPawn_ZedScrake'),PercentChance=0.05),
|
||||
(SpawnEntry=AT_FleshpoundMini,NewClass=(class'KFGameContent.KFPawn_ZedFleshpound'),PercentChance=0.05)
|
||||
)},*/
|
||||
DoshOnKillGlobalModifier=0.0f,
|
||||
ExtraDoshGrantedonWaveWon=1700),
|
||||
// WAVE 2
|
||||
(ZedsToAdjust={(
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedMatriarch', HealthScale=0.9,DamageDealtScale=0.9, InitialGroundSpeedModifierScale=1.0,ShieldScale=0.9),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedPatriarch', HealthScale=0.9,DamageDealtScale=0.9, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedHans', HealthScale=0.9,DamageDealtScale=0.9, InitialGroundSpeedModifierScale=1.0,ShieldScale=0.9),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedFleshpoundKing', HealthScale=0.9,DamageDealtScale=0.9, InitialGroundSpeedModifierScale=1.0,ShieldScale=0.9),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedBloatKing', HealthScale=0.9,DamageDealtScale=0.9, InitialGroundSpeedModifierScale=1.0,ShieldScale=0.9),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedDAR_EMP', HealthScale=0.9,DamageDealtScale=0.9, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedDAR_Laser', HealthScale=0.9,DamageDealtScale=0.9, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedDAR_Rocket', HealthScale=0.9,DamageDealtScale=0.9, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedFleshpoundMini', HealthScale=0.9,DamageDealtScale=0.9, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedBloat', HealthScale=0.9,DamageDealtScale=0.9, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedHusk', HealthScale=0.9,DamageDealtScale=0.9, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedClot_AlphaKing', HealthScale=0.9,DamageDealtScale=0.9, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedGorefastDualBlade',HealthScale=0.9,DamageDealtScale=0.9, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedBloatKingSubspawn',HealthScale=0.9,DamageDealtScale=0.9, InitialGroundSpeedModifierScale=1.0)
|
||||
)},
|
||||
/*SpawnReplacementList={(
|
||||
(SpawnEntry=AT_Clot,NewClass=(class'KFGameContent.KFPawn_ZedClot_Alpha'),PercentChance=0.15)
|
||||
)},*/
|
||||
DoshOnKillGlobalModifier=0.0f,
|
||||
ExtraDoshGrantedonWaveWon=2000),
|
||||
// WAVE 3
|
||||
(ZedsToAdjust={(
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedMatriarch', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0,ShieldScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedPatriarch', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedHans', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0,ShieldScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedFleshpoundKing', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0,ShieldScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedBloatKing', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0,ShieldScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedDAR_EMP', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedDAR_Laser', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedDAR_Rocket', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedFleshpoundMini', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedBloat', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedHusk', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedClot_AlphaKing', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedGorefastDualBlade',HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedBloatKingSubspawn',HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0)
|
||||
)},
|
||||
/*SpawnReplacementList={(
|
||||
(SpawnEntry=AT_Clot,NewClass=(class'KFGameContent.KFPawn_ZedClot_Alpha'),PercentChance=0.15)
|
||||
)},*/
|
||||
DoshOnKillGlobalModifier=0.0f,
|
||||
ExtraDoshGrantedonWaveWon=2300),
|
||||
// WAVE 4
|
||||
(ZedsToAdjust={(
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedMatriarch', HealthScale=1.1,DamageDealtScale=1.1, InitialGroundSpeedModifierScale=1.0,ShieldScale=1.1),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedPatriarch', HealthScale=1.1,DamageDealtScale=1.1, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedHans', HealthScale=1.1,DamageDealtScale=1.1, InitialGroundSpeedModifierScale=1.0,ShieldScale=1.1),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedFleshpoundKing', HealthScale=1.1,DamageDealtScale=1.1, InitialGroundSpeedModifierScale=1.0,ShieldScale=1.1),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedBloatKing', HealthScale=1.1,DamageDealtScale=1.1, InitialGroundSpeedModifierScale=1.0,ShieldScale=1.1),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedDAR_EMP', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedDAR_Laser', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedDAR_Rocket', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedFleshpoundMini', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedBloat', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedHusk', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedClot_AlphaKing', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedGorefastDualBlade',HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedBloatKingSubspawn',HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0)
|
||||
)},
|
||||
/*SpawnReplacementList={(
|
||||
(SpawnEntry=AT_Clot,NewClass=(class'KFGameContent.KFPawn_ZedClot_Alpha'),PercentChance=0.15)
|
||||
)},*/
|
||||
DoshOnKillGlobalModifier=0.0f,
|
||||
ExtraDoshGrantedonWaveWon=3000),
|
||||
// WAVE 5
|
||||
(ZedsToAdjust={(
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedMatriarch', HealthScale=1.4,DamageDealtScale=1.2, InitialGroundSpeedModifierScale=1.2,ShieldScale=1.4),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedPatriarch', HealthScale=1.4,DamageDealtScale=1.2, InitialGroundSpeedModifierScale=1.2),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedHans', HealthScale=1.4,DamageDealtScale=1.2, InitialGroundSpeedModifierScale=1.2,ShieldScale=1.4),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedFleshpoundKing', HealthScale=1.4,DamageDealtScale=1.2, InitialGroundSpeedModifierScale=1.2,ShieldScale=1.4),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedBloatKing', HealthScale=1.4,DamageDealtScale=1.2, InitialGroundSpeedModifierScale=1.2,ShieldScale=1.4),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedDAR_EMP', HealthScale=1.0,DamageDealtScale=1.2, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedDAR_Laser', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedDAR_Rocket', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedFleshpoundMini', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedBloat', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedHusk', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedClot_AlphaKing', HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedGorefastDualBlade',HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedBloatKingSubspawn',HealthScale=1.0,DamageDealtScale=1.0, InitialGroundSpeedModifierScale=1.0)
|
||||
)},
|
||||
/*SpawnReplacementList={(
|
||||
(SpawnEntry=AT_Clot,NewClass=(class'KFGameContent.KFPawn_ZedClot_Alpha'),PercentChance=0.15)
|
||||
)},*/
|
||||
DoshOnKillGlobalModifier=0.0f,
|
||||
ExtraDoshGrantedonWaveWon=0)
|
||||
)}
|
||||
)}
|
||||
)}
|
||||
|
||||
//Tiny head
|
||||
SetEvents[15]={(
|
||||
EventDifficulty=2,
|
||||
GameLength=GL_Normal,
|
||||
ZedSpawnHeadScale=0.3,
|
||||
PlayerSpawnHeadScale=0.2,
|
||||
bDisableHeadless=true,
|
||||
SpawnRateMultiplier=1.5,
|
||||
WaveAICountScale=(0.8, 0.8, 0.8, 0.8, 0.8, 0.8),
|
||||
DoshOnKillGlobalModifier=1.2,
|
||||
//GlobalAmmoCostScale = 0.5,
|
||||
bInvulnerableHeads = true,
|
||||
BossSpawnReplacementList={(
|
||||
(SpawnEntry=BAT_Matriarch,NewClass=class'KFGameContent.KFPawn_ZedHans')
|
||||
)},
|
||||
SpawnReplacementList={(
|
||||
(SpawnEntry=AT_Clot,NewClass=(class'KFGameContent.KFPawn_ZedClot_AlphaKing'),PercentChance=0.2),
|
||||
(SpawnEntry=AT_AlphaClot,NewClass=(class'KFGameContent.KFPawn_ZedClot_AlphaKing'),PercentChance=0.2),
|
||||
(SpawnEntry=AT_SlasherClot,NewClass=(class'KFGameContent.KFPawn_ZedClot_AlphaKing'),PercentChance=0.2),
|
||||
//(SpawnEntry=AT_Crawler,NewClass=(class'KFGameContent.KFPawn_ZedGorefastDualBlade'),PercentChance=0.4),
|
||||
(SpawnEntry=AT_Stalker,NewClass=(class'KFGameContent.KFPawn_ZedGorefastDualBlade'),PercentChance=1.0),
|
||||
(SpawnEntry=AT_Bloat,NewClass=(class'KFGameContent.KFPawn_ZedBloat'),PercentChance=1.0),
|
||||
(SpawnEntry=AT_Siren,NewClass=(class'KFGameContent.KFPawn_ZedSiren'),PercentChance=1.0),
|
||||
(SpawnEntry=AT_Husk,NewClass=(class'KFGameContent.KFPawn_ZedHusk'),PercentChance=1.0),
|
||||
(SpawnEntry=AT_GoreFast,NewClass=(class'KFGameContent.KFPawn_ZedGorefastDualBlade'),PercentChance=1.0),
|
||||
(SpawnEntry=AT_FleshPound,NewClass=(class'KFGameContent.KFPawn_ZedScrake'),PercentChance=0.3),
|
||||
(SpawnEntry=AT_FleshpoundMini,NewClass=(class'KFGameContent.KFPawn_ZedScrake'),PercentChance=0.3),
|
||||
//(SpawnEntry=AT_EliteClot,NewClass=(class'KFGameContent.KFPawn_ZedCrawler'),PercentChance=0.6),
|
||||
//(SpawnEntry=AT_EliteGoreFast,NewClass=(class'KFGameContent.KFPawn_ZedCrawler'),PercentChance=0.6),
|
||||
(SpawnEntry=AT_EDAR_EMP,NewClass=(class'KFGameContent.KFPawn_ZedBloat'),PercentChance=1.0),
|
||||
(SpawnEntry=AT_EDAR_Laser,NewClass=(class'KFGameContent.KFPawn_ZedBloat'),PercentChance=1.0),
|
||||
(SpawnEntry=AT_EDAR_Rocket,NewClass=(class'KFGameContent.KFPawn_ZedBloat'),PercentChance=1.0)
|
||||
|
||||
)},
|
||||
ZedsToAdjust={(
|
||||
//bosses
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedHans', HealthScale=1.2,DamageDealtScale=1.0, HitZonesOverride = {(
|
||||
(ZoneName=armor, GoreHealth=MaxInt, DmgScale=1.3, MaxGoreHealth=MaxInt)
|
||||
)}, WeakPoints = {(
|
||||
(BoneName = Spine2, Offset=(X=-5,Y=45,Z=10))
|
||||
)}),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedPatriarch', HealthScale=1.2,DamageDealtScale=1.0, HitZonesOverride = {(
|
||||
(ZoneName=rfoot, GoreHealth=MaxInt, DmgScale=1.3, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=rcalf, GoreHealth=MaxInt, DmgScale=1.3, MaxGoreHealth=MaxInt)
|
||||
)}, WeakPoints = {(
|
||||
(BoneName = RightLeg)
|
||||
)}),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedFleshpoundKing', HealthScale=1.2,DamageDealtScale=1.0, HitZonesOverride = {(
|
||||
(ZoneName=heart, GoreHealth=MaxInt, DmgScale=1.3, MaxGoreHealth=MaxInt)
|
||||
)}, WeakPoints = {(
|
||||
(BoneName = Spine2, Offset=(X=30,Y=-30,Z=10))
|
||||
)}),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedBloatKing', HealthScale=1.4,DamageDealtScale=1.0, HitZonesOverride = {(
|
||||
(ZoneName=rupperarm, GoreHealth=MaxInt, DmgScale=1.5, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=rforearm, GoreHealth=MaxInt, DmgScale=1.5, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=rhand, GoreHealth=MaxInt, DmgScale=1.5, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=lupperarm, GoreHealth=MaxInt, DmgScale=1.5, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=lforearm, GoreHealth=MaxInt, DmgScale=1.5, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=lhand, GoreHealth=MaxInt, DmgScale=1.5, MaxGoreHealth=MaxInt)
|
||||
)}, WeakPoints = {(
|
||||
(BoneName = RightForearm, Offset=(X=15,Y=0,Z=5)),
|
||||
(BoneName = LeftForearm, Offset=(X=25,Y=15,Z=15))
|
||||
)}),
|
||||
|
||||
//arms
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedHusk',HealthScale=1.0,DamageDealtScale=1.0, HitZonesOverride = {(
|
||||
(ZoneName=rforearm, GoreHealth=MaxInt, DmgScale=3, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=rupperarm, GoreHealth=MaxInt, DmgScale=3, MaxGoreHealth=MaxInt)
|
||||
)}, WeakPoints = {(
|
||||
(BoneName = RightForearm, Offset=(X=20,Y=0,Z=5))
|
||||
)}),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedScrake',HealthScale=1.0,DamageDealtScale=1.0, HitZonesOverride = {(
|
||||
(ZoneName=rforearm, GoreHealth=MaxInt, DmgScale=3, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=rupperarm, GoreHealth=MaxInt, DmgScale=3, MaxGoreHealth=MaxInt)
|
||||
)}, WeakPoints = {(
|
||||
(BoneName=RightForearm, Offset=(X=20,Y=0,Z=10))
|
||||
)}),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedBloat',HealthScale=1.0,DamageDealtScale=1.0, HitZonesOverride = {(
|
||||
(ZoneName=rupperarm, GoreHealth=MaxInt, DmgScale=4, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=rforearm, GoreHealth=MaxInt, DmgScale=4, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=rhand, GoreHealth=MaxInt, DmgScale=4, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=lupperarm, GoreHealth=MaxInt, DmgScale=4, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=lforearm, GoreHealth=MaxInt, DmgScale=4, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=lhand, GoreHealth=MaxInt, DmgScale=4, MaxGoreHealth=MaxInt)
|
||||
)}, WeakPoints = {(
|
||||
(BoneName = RightForearm, Offset=(X=20,Y=0,Z=5)),
|
||||
(BoneName = LeftForearm, Offset=(X=20,Y=7,Z=5))
|
||||
)}),
|
||||
|
||||
//legs
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedSiren',HealthScale=1.0,DamageDealtScale=1.0, HitZonesOverride = {(
|
||||
(ZoneName=rfoot, GoreHealth=MaxInt, DmgScale=3, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=lfoot, GoreHealth=MaxInt, DmgScale=3, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=rcalf, GoreHealth=MaxInt, DmgScale=3, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=lcalf, GoreHealth=MaxInt, DmgScale=3, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=rthigh, GoreHealth=MaxInt, DmgScale=3, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=lthigh, GoreHealth=MaxInt, DmgScale=3, MaxGoreHealth=MaxInt)
|
||||
)}, WeakPoints = {(
|
||||
(BoneName = RightLeg, Offset=(X=0,Y=0,Z=10)),
|
||||
(BoneName = LeftLeg, Offset=(X=50,Y=0,Z=10))
|
||||
)}),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedClot_AlphaKing',HealthScale=1.5,DamageDealtScale=1.0, HitZonesOverride = {(
|
||||
(ZoneName=rfoot, GoreHealth=MaxInt, DmgScale=3, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=rcalf, GoreHealth=MaxInt, DmgScale=3, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=rthigh, GoreHealth=MaxInt, DmgScale=3, MaxGoreHealth=MaxInt)
|
||||
)}, WeakPoints = {(
|
||||
(BoneName = RightLeg, Offset=(X=0,Y=0,Z=15))
|
||||
)}),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedGorefastDualBlade',HealthScale=1.3,DamageDealtScale=1.0, HitZonesOverride = {(
|
||||
(ZoneName=lfoot, GoreHealth=MaxInt, DmgScale=3, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=lcalf, GoreHealth=MaxInt, DmgScale=3, MaxGoreHealth=MaxInt),
|
||||
(ZoneName=lthigh, GoreHealth=MaxInt, DmgScale=3, MaxGoreHealth=MaxInt)
|
||||
)}, WeakPoints = {(
|
||||
(BoneName = LeftLeg, Offset=(X=50,Y=0,Z=10))
|
||||
)}),
|
||||
|
||||
//heart
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedFleshpoundMini',HealthScale=1.0,DamageDealtScale=1.0, HitZonesOverride = {(
|
||||
(ZoneName=heart, GoreHealth=MaxInt, DmgScale=3, MaxGoreHealth=MaxInt)
|
||||
)}, WeakPoints = {(
|
||||
(BoneName = Spine2, Offset=(X=25,Y=-25,Z=10))
|
||||
)}),
|
||||
(ClassToAdjust=class'KFGameContent.KFPawn_ZedFleshpound',HealthScale=1.0,DamageDealtScale=1.0, HitZonesOverride = {(
|
||||
(ZoneName=heart, GoreHealth=MaxInt, DmgScale=3, MaxGoreHealth=MaxInt)
|
||||
)}, WeakPoints = {(
|
||||
(BoneName = Spine2, Offset=(X=30,Y=-30,Z=10))
|
||||
)})
|
||||
)}
|
||||
)}
|
||||
|
||||
//Test events from here down. These don't end up in the regular rotation.
|
||||
// The override ID starts from one higher than the last SetEvents entry above.
|
||||
// Ex: Big head = 7, Horde = 8
|
||||
|
@ -595,25 +595,25 @@ defaultproperties
|
||||
|
||||
//Fart is base timer +/- some random amount of the variance, giving you a range of say 25-35 seconds with a base of 30 and variance of 5
|
||||
// These values are X = 0 health, Y = 100% health
|
||||
DifficultyFartAttackTimers(0)=(X=5.0,Y=9.0) // Normal
|
||||
DifficultyFartAttackTimers(1)=(X=4.5,Y=8.5) // Hard
|
||||
DifficultyFartAttackTimers(2)=(X=4.0,Y=8.0) // Suicidal
|
||||
DifficultyFartAttackTimers(3)=(X=4.0,Y=7.0) // Hell On Earth
|
||||
DifficultyFartAttackTimers(0)=(X=4.0,Y=7.0) // Normal //(X=5.0,Y=9.0)
|
||||
DifficultyFartAttackTimers(1)=(X=3.5,Y=6.0) // Hard //(X=4.5,Y=8.5)
|
||||
DifficultyFartAttackTimers(2)=(X=3.0,Y=5.5) // Suicidal //(X=4.0,Y=8.0)
|
||||
DifficultyFartAttackTimers(3)=(X=3.0,Y=5.0) // Hell On Earth //(X=4.0,Y=7.0)
|
||||
|
||||
DifficultyVarianceFartTimers(0)=(X=3.0,Y=4.0) // Normal
|
||||
DifficultyVarianceFartTimers(1)=(X=2.5,Y=3.5) // Hard
|
||||
DifficultyVarianceFartTimers(2)=(X=2.0,Y=3.0) // Suicidal
|
||||
DifficultyVarianceFartTimers(3)=(X=2.0,Y=3.0) // Hell On Earth
|
||||
DifficultyVarianceFartTimers(0)=(X=2.5,Y=3.5) // Normal //(X=3.0,Y=4.0)
|
||||
DifficultyVarianceFartTimers(1)=(X=2.0,Y=3.0) // Hard //(X=2.5,Y=3.5)
|
||||
DifficultyVarianceFartTimers(2)=(X=1.5,Y=2.5) // Suicidal //(X=2.0,Y=3.0)
|
||||
DifficultyVarianceFartTimers(3)=(X=1.5,Y=2.5) // Hell On Earth //(X=2.0,Y=3.0)
|
||||
|
||||
DifficultyRageFartTimers(0)=(X=1.75,Y=2.5) // Normal
|
||||
DifficultyRageFartTimers(1)=(X=1.25,Y=2.0) // Hard
|
||||
DifficultyRageFartTimers(2)=(X=0.75,Y=1.5) // Suicidal
|
||||
DifficultyRageFartTimers(3)=(X=0.75,Y=1.5) // Hell On Earth
|
||||
DifficultyRageFartTimers(0)=(X=1.5,Y=2.25) // Normal //(X=1.75,Y=2.5)
|
||||
DifficultyRageFartTimers(1)=(X=1.0,Y=1.75) // Hard //(X=1.25,Y=2.0)
|
||||
DifficultyRageFartTimers(2)=(X=0.5,Y=1.25) // Suicidal //(X=0.75,Y=1.5)
|
||||
DifficultyRageFartTimers(3)=(X=0.5,Y=1.25) // Hell On Earth //(X=0.75,Y=1.5)
|
||||
|
||||
DifficultyVarianceRageFartTimers(0)=(X=1.65,Y=2.1) // Normal
|
||||
DifficultyVarianceRageFartTimers(1)=(X=1.15,Y=1.6) // Hard
|
||||
DifficultyVarianceRageFartTimers(2)=(X=0.65,Y=1.1) // Suicidal
|
||||
DifficultyVarianceRageFartTimers(3)=(X=0.65,Y=1.1) // Hell On Earth
|
||||
DifficultyVarianceRageFartTimers(0)=(X=1.65,Y=2.1) // Normal //(X=1.65,Y=2.1)
|
||||
DifficultyVarianceRageFartTimers(1)=(X=1.15,Y=1.6) // Hard //(X=1.15,Y=1.6)
|
||||
DifficultyVarianceRageFartTimers(2)=(X=0.65,Y=1.1) // Suicidal //(X=0.65,Y=1.1)
|
||||
DifficultyVarianceRageFartTimers(3)=(X=0.65,Y=1.1) // Hell On Earth //(X=0.65,Y=1.1)
|
||||
|
||||
//Offset from center of the BK to spawn the poop monster
|
||||
PoopMonsterOffset=-100
|
||||
@ -622,7 +622,7 @@ defaultproperties
|
||||
PoopMonsterFXSocket=Poop_Attach
|
||||
|
||||
//Amount of time between spawns
|
||||
PoopMonsterSpawnDelay=2.f
|
||||
PoopMonsterSpawnDelay=1.5 //2.f
|
||||
|
||||
// Used for special crawler gas AOE attack "explosion" template FART ATTACK
|
||||
Begin Object Class=KFGameExplosion Name=ExploTemplate0
|
||||
@ -708,9 +708,9 @@ defaultproperties
|
||||
RotationRate=(Pitch=50000,Yaw=20000,Roll=50000)
|
||||
GroundSpeed=450.0f //160 //210 //231 //255
|
||||
SprintSpeed=450.0f //260 //210 410 //315 //330 //345 //380
|
||||
RageSprintSpeedMultiplier=1.3f //1.25 1.45 //1.55
|
||||
RageSprintSpeedMultiplier=1.5f //1.3f //1.25 1.45 //1.55
|
||||
|
||||
VomitRange=400.f
|
||||
VomitRange=440.f //400.f
|
||||
VomitDamage=20
|
||||
|
||||
ArmorInfoClass=class'KFZedArmorInfo_BloatKing'
|
||||
@ -734,7 +734,7 @@ defaultproperties
|
||||
IncapSettings(AF_Microwave)=(Vulnerability=(0.08), Cooldown=10.0, Duration=3.0)
|
||||
IncapSettings(AF_FirePanic)=(Vulnerability=(0.65), Cooldown=15.0, Duration=1.2)
|
||||
IncapSettings(AF_EMP)= (Vulnerability=(0.5), Cooldown=10.0, Duration=2.2)
|
||||
IncapSettings(AF_Freeze)= (Vulnerability=(0.5), Cooldown=10.0, Duration=1.0)
|
||||
IncapSettings(AF_Freeze)= (Vulnerability=(0.3), Cooldown=15.0, Duration=1.0)
|
||||
IncapSettings(AF_Snare)= (Vulnerability=(1.0, 2.0, 1.0, 1.0, 2.0), Cooldown=10.5, Duration=3.0)
|
||||
IncapSettings(AF_Bleed)= (Vulnerability=(0.15), Cooldown=10.0)
|
||||
|
||||
|
@ -116,7 +116,7 @@ defaultproperties
|
||||
|
||||
// Used for special crawler gas AOE attack "explosion" template
|
||||
Begin Object Class=KFGameExplosion Name=ExploTemplate0
|
||||
Damage=15 //50 //12 //16
|
||||
Damage=12 //15 //50 //12 //16
|
||||
DamageRadius=350 //600 //450 //400 //425
|
||||
DamageFalloffExponent=0.f
|
||||
DamageDelay=0.f
|
||||
@ -179,7 +179,7 @@ defaultproperties
|
||||
MyDamageType=class'KFDT_Slashing_ZedWeak'
|
||||
End Object
|
||||
|
||||
Health=250 //55 //450 //700 //900 //810
|
||||
Health=150 //250 //55 //450 //700 //900 //810
|
||||
DoshValue=10
|
||||
Mass=50.f
|
||||
bKnockdownWhenJumpedOn=true
|
||||
|
@ -645,7 +645,7 @@ DefaultProperties
|
||||
ShieldHealthMaxDefaults[1]=2700 //3000
|
||||
ShieldHealthMaxDefaults[2]=4000//2000 //3000
|
||||
ShieldHealthMaxDefaults[3]=5000
|
||||
ShieldHealthScale=1.f
|
||||
ShieldHealthScale=1.1f //1.f
|
||||
|
||||
// Penetration
|
||||
PenetrationResistance=5.0
|
||||
@ -686,7 +686,7 @@ DefaultProperties
|
||||
DamageTypeModifiers.Add((DamageType=class'KFDT_Bleeding_HRG_Vampire_BloodSuck', DamageScale=(0.7)))
|
||||
|
||||
Begin Object Class=KFGameExplosion Name=ExploTemplate0
|
||||
Damage=40 //20
|
||||
Damage=44 //40 //20
|
||||
DamageRadius=900 //600 //700
|
||||
DamageFalloffExponent=2.f
|
||||
DamageDelay=0.f
|
||||
@ -714,7 +714,7 @@ DefaultProperties
|
||||
RagePoundExplosionTemplate=ExploTemplate0
|
||||
|
||||
Begin Object Class=KFGameExplosion Name=ExploTemplate1
|
||||
Damage=50 //30
|
||||
Damage=55 //50 //30
|
||||
DamageRadius=900 //600 //700
|
||||
DamageFalloffExponent=2.f
|
||||
DamageDelay=0.f
|
||||
@ -760,8 +760,8 @@ DefaultProperties
|
||||
CollisionRadius=+0055.000000
|
||||
End Object
|
||||
|
||||
GroundSpeed=300.f //260
|
||||
SprintSpeed=700.f //600
|
||||
GroundSpeed=345.f //300.f //260
|
||||
SprintSpeed=805.f //700.f //600
|
||||
ReachedEnemyThresholdScale=1.f
|
||||
PhysRagdollImpulseScale=1.5f
|
||||
KnockdownImpulseScale=2.0f
|
||||
|
@ -42,6 +42,13 @@ simulated event SetInitialState()
|
||||
function GiveTo( Pawn P )
|
||||
{
|
||||
local KFInventoryManager KFIM;
|
||||
local KFGameReplicationInfo KFGRI;
|
||||
|
||||
KFGRI = KFGameReplicationInfo(WorldInfo.GRI);
|
||||
if(KFGRI != none && KFGRI.bIsEndlessPaused)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
KFIM = KFInventoryManager(P.InvManager);
|
||||
if ( KFIM != None )
|
||||
|
@ -532,8 +532,8 @@ defaultproperties
|
||||
LifeSpan=0
|
||||
FuseDuration=300
|
||||
PostExplosionLifetime=1
|
||||
Speed=1000 //500
|
||||
MaxSpeed=1000 //500
|
||||
Speed=1500 //1000 //500
|
||||
MaxSpeed=1500 //1000 //500
|
||||
Physics=PHYS_Falling
|
||||
bBounce=true
|
||||
bNetTemporary=false
|
||||
|
48
KFGameContent/Classes/KFProj_Bullet_HRG_Stunner.uc
Normal file
48
KFGameContent/Classes/KFProj_Bullet_HRG_Stunner.uc
Normal file
@ -0,0 +1,48 @@
|
||||
//=============================================================================
|
||||
// KFProj_Bullet_Pellet
|
||||
//=============================================================================
|
||||
// Shotgun pellet class
|
||||
//=============================================================================
|
||||
// Killing Floor 2
|
||||
// Copyright (C) 2015 Tripwire Interactive LLC
|
||||
//=============================================================================
|
||||
|
||||
class KFProj_Bullet_HRG_Stunner extends KFProj_Bullet
|
||||
hidedropdown;
|
||||
|
||||
/** Cached reference to owner weapon */
|
||||
var protected KFWeapon OwnerWeapon;
|
||||
|
||||
/** Initialize the projectile */
|
||||
function Init( vector Direction )
|
||||
{
|
||||
super.Init( Direction );
|
||||
|
||||
OwnerWeapon = KFWeapon( Owner );
|
||||
if( OwnerWeapon != none )
|
||||
{
|
||||
OwnerWeapon.LastPelletFireTime = WorldInfo.TimeSeconds;
|
||||
}
|
||||
}
|
||||
|
||||
/** Don't allow more than one pellet projectile to perform this check in a single frame */
|
||||
function bool ShouldWarnAIWhenFired()
|
||||
{
|
||||
return super.ShouldWarnAIWhenFired() && OwnerWeapon != none && OwnerWeapon.LastPelletFireTime < WorldInfo.TimeSeconds;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MaxSpeed=7000.0
|
||||
Speed=7000.0
|
||||
|
||||
bWarnAIWhenFired=true
|
||||
|
||||
DamageRadius=0
|
||||
|
||||
ProjFlightTemplate=ParticleSystem'WEP_HRG_Stunner_EMIT.FX_HRG_Stunner_Tracer'
|
||||
ProjFlightTemplateZedTime=ParticleSystem'WEP_HRG_Stunner_EMIT.FX_HRG_Stunner_Tracer_ZEDTime'
|
||||
|
||||
AmbientSoundPlayEvent=none
|
||||
AmbientSoundStopEvent=none
|
||||
}
|
107
KFGameContent/Classes/KFProj_Bullet_HRG_Stunner_Alt.uc
Normal file
107
KFGameContent/Classes/KFProj_Bullet_HRG_Stunner_Alt.uc
Normal file
@ -0,0 +1,107 @@
|
||||
//=============================================================================
|
||||
// KFProj_Bullet_HRG_Boomy
|
||||
//=============================================================================
|
||||
// Class Description
|
||||
//=============================================================================
|
||||
// Killing Floor 2
|
||||
// Copyright (C) 2021 Tripwire Interactive LLC
|
||||
//=============================================================================
|
||||
|
||||
class KFProj_Bullet_HRG_Stunner_Alt extends KFProj_BallisticExplosive
|
||||
hidedropdown;
|
||||
|
||||
var protected KFWeapon OwnerWeapon;
|
||||
|
||||
/** Initialize the projectile */
|
||||
function Init( vector Direction )
|
||||
{
|
||||
super.Init( Direction );
|
||||
|
||||
OwnerWeapon = KFWeapon( Owner );
|
||||
if( OwnerWeapon != none )
|
||||
{
|
||||
OwnerWeapon.LastPelletFireTime = WorldInfo.TimeSeconds;
|
||||
}
|
||||
}
|
||||
|
||||
/** Don't allow more than one pellet projectile to perform this check in a single frame */
|
||||
function bool ShouldWarnAIWhenFired()
|
||||
{
|
||||
return super.ShouldWarnAIWhenFired() && OwnerWeapon != none && OwnerWeapon.LastPelletFireTime < WorldInfo.TimeSeconds;
|
||||
}
|
||||
|
||||
simulated protected function PrepareExplosionTemplate()
|
||||
{
|
||||
super.PrepareExplosionTemplate();
|
||||
|
||||
/** Since bIgnoreInstigator is transient, its value must be defined here */
|
||||
ExplosionTemplate.bIgnoreInstigator = true;
|
||||
}
|
||||
|
||||
simulated function AdjustCanDisintigrate() {}
|
||||
|
||||
/** Can be overridden in subclasses to exclude specific projectiles from nuking */
|
||||
simulated function bool AllowNuke()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MaxSpeed=22500.0
|
||||
Speed=22500.0
|
||||
|
||||
DamageRadius=0
|
||||
|
||||
ProjDisintegrateTemplate=ParticleSystem'ZED_Siren_EMIT.FX_Siren_grenade_disable_01'
|
||||
ProjFlightTemplate=ParticleSystem'WEP_HRG_Stunner_EMIT.FX_HRG_Stunner_ALT_Tracer_ZEDTime'
|
||||
ProjFlightTemplateZedTime=ParticleSystem'WEP_HRG_Stunner_EMIT.FX_HRG_Stunner_ALT_Tracer_ZEDTime'
|
||||
|
||||
// Grenade explosion light
|
||||
Begin Object Class=PointLightComponent Name=ExplosionPointLight
|
||||
LightColor=(R=252,G=218,B=171,A=255)
|
||||
Brightness=0.5f
|
||||
Radius=400.f
|
||||
FalloffExponent=10.f
|
||||
CastShadows=False
|
||||
CastStaticShadows=FALSE
|
||||
CastDynamicShadows=False
|
||||
bCastPerObjectShadows=false
|
||||
bEnabled=FALSE
|
||||
LightingChannels=(Indoor=TRUE,Outdoor=TRUE,bInitialized=TRUE)
|
||||
End Object
|
||||
|
||||
// explosion
|
||||
Begin Object Class=KFGameExplosion Name=ExploTemplate0
|
||||
Damage=40 //50
|
||||
DamageRadius=300 //250 //150
|
||||
DamageFalloffExponent=2.f
|
||||
DamageDelay=0.f
|
||||
MomentumTransferScale=10000
|
||||
|
||||
// Damage Effects
|
||||
MyDamageType=class'KFDT_Explosive_HRG_Stunner'
|
||||
KnockDownStrength=150
|
||||
FractureMeshRadius=200.0
|
||||
FracturePartVel=500.0
|
||||
|
||||
ExplosionSound=AkEvent'WW_WEP_HRG_Stunner.Play_WEP_HRG_Stunner_Alt_Fire_Explosion'
|
||||
ExplosionEffects=KFImpactEffectInfo'WEP_HRG_Stunner_ARCH.WEB_HRG_Stunner_Impacts'
|
||||
|
||||
// Dynamic Light
|
||||
ExploLight=ExplosionPointLight
|
||||
ExploLightStartFadeOutTime=0.0
|
||||
ExploLightFadeOutTime=0.3
|
||||
|
||||
bIgnoreInstigator=true
|
||||
|
||||
// Camera Shake
|
||||
CamShake=CameraShake'FX_CameraShake_Arch.Misc_Explosions.Light_Explosion_Rumble'
|
||||
CamShakeInnerRadius=0
|
||||
CamShakeOuterRadius=300
|
||||
CamShakeFalloff=1.5f
|
||||
bOrientCameraShakeTowardsEpicenter=true
|
||||
End Object
|
||||
ExplosionTemplate=ExploTemplate0
|
||||
}
|
||||
|
240
KFGameContent/Classes/KFProj_Dosh.uc
Normal file
240
KFGameContent/Classes/KFProj_Dosh.uc
Normal file
@ -0,0 +1,240 @@
|
||||
//=============================================================================
|
||||
// KFProj_Dosh
|
||||
//=============================================================================
|
||||
// Projectile for the doshinegun
|
||||
//=============================================================================
|
||||
// Killing Floor 2
|
||||
// Copyright (C) 2021 Tripwire Interactive LLC
|
||||
//=============================================================================
|
||||
|
||||
class KFProj_Dosh extends KFProj_RicochetBullet
|
||||
hidedropdown;
|
||||
|
||||
`define KFPROJ_DOSH_CACHED_LOCATION 20
|
||||
|
||||
var PrimitiveComponent DroppedPickupMesh;
|
||||
|
||||
/** Dampen amount for every bounce */
|
||||
var() float DampenFactor;
|
||||
|
||||
/** Dampen amount for parallel angle to velocity */
|
||||
var() float DampenFactorParallel;
|
||||
|
||||
var transient Vector PreviousLocations [`KFPROJ_DOSH_CACHED_LOCATION];
|
||||
var transient rotator PreviousRotations [`KFPROJ_DOSH_CACHED_LOCATION];
|
||||
|
||||
// Make sure that last location always exists.
|
||||
simulated event PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
}
|
||||
|
||||
event Tick( float DeltaTime )
|
||||
{
|
||||
local int i;
|
||||
for (i = `KFPROJ_DOSH_CACHED_LOCATION - 1; i > 0; --i)
|
||||
{
|
||||
PreviousLocations[i] = PreviousLocations[i-1];
|
||||
PreviousRotations[i] = PreviousRotations[i-1];
|
||||
}
|
||||
|
||||
if (`KFPROJ_DOSH_CACHED_LOCATION > 0)
|
||||
{
|
||||
PreviousLocations[0] = Location;
|
||||
PreviousRotations[0] = Rotation;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Give a little bounce
|
||||
*/
|
||||
simulated event HitWall(vector HitNormal, Actor Wall, PrimitiveComponent WallComp)
|
||||
{
|
||||
local TraceHitInfo HitInfo;
|
||||
|
||||
// check to make sure we didn't hit a pawn
|
||||
if( Pawn(Wall) == none )
|
||||
{
|
||||
if (!Wall.bStatic && Wall.bCanBeDamaged && (DamageRadius == 0 || bDamageDestructiblesOnTouch) && !CheckRepeatingTouch(Wall) )
|
||||
{
|
||||
HitInfo.HitComponent = WallComp;
|
||||
HitInfo.Item = INDEX_None;
|
||||
Wall.TakeDamage( Damage, InstigatorController, Location, MomentumTransfer * Normal(Velocity), MyDamageType, HitInfo, self);
|
||||
}
|
||||
}
|
||||
|
||||
Bounce( HitNormal, Wall );
|
||||
}
|
||||
|
||||
/** Adjusts movement/physics of projectile.
|
||||
* Returns true if projectile actually bounced / was allowed to bounce */
|
||||
simulated function bool Bounce( vector HitNormal, Actor BouncedOff)
|
||||
{
|
||||
Velocity = DampingFactor * (Velocity - 2.0*HitNormal*(Velocity dot HitNormal));
|
||||
if( WorldInfo.NetMode != NM_DedicatedServer )
|
||||
{
|
||||
// do the impact effects
|
||||
`ImpactEffectManager.PlayImpactEffects(Location, Instigator, HitNormal, ImpactEffects );
|
||||
}
|
||||
|
||||
// also done from ProcessDestructibleTouchOnBounce. update LastBounced to solve problem with bouncing rapidly between world/non-world geometry
|
||||
LastBounced.Actor = BouncedOff;
|
||||
LastBounced.Time = WorldInfo.TimeSeconds;
|
||||
|
||||
SpawnDosh(BouncedOff);
|
||||
Destroy();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function SpawnDosh(Actor BouncedOff)
|
||||
{
|
||||
local KFDroppedPickup_Cash P;
|
||||
local int i;
|
||||
|
||||
if ( WorldInfo.NetMode == NM_Client )
|
||||
return;
|
||||
|
||||
if (Pawn(BouncedOff) == none)
|
||||
{
|
||||
P = Spawn(class'KFDroppedPickup_Cash',,, Location, Rotation,, false);
|
||||
|
||||
if (P == none)
|
||||
{
|
||||
for (i = 0; i < `KFPROJ_DOSH_CACHED_LOCATION; ++i)
|
||||
{
|
||||
P = Spawn(class'KFDroppedPickup_Cash',,, PreviousLocations[i], PreviousRotations[i],, false);
|
||||
if (P != none)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
P = Spawn(class'KFDroppedPickup_Cash',,, Location, Rotation,, true);
|
||||
}
|
||||
|
||||
if( P == None )
|
||||
{
|
||||
Destroy();
|
||||
}
|
||||
else
|
||||
{
|
||||
P.SetPhysics(PHYS_Falling);
|
||||
P.InventoryClass = class'KFInventory_Money';
|
||||
P.Inventory = Instigator.CreateInventory(P.InventoryClass);
|
||||
P.Velocity = Velocity;
|
||||
P.Instigator = Instigator;
|
||||
P.SetPickupMesh(DroppedPickupMesh);
|
||||
P.SetPickupParticles(none);
|
||||
P.CashAmount = class'KFWeap_AssaultRifle_Doshinegun'.default.DoshCost;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//==============
|
||||
// Touching
|
||||
// Overridden to get bouncing off of destructible meshes
|
||||
simulated function ProcessTouch(Actor Other, Vector HitLocation, Vector HitNormal)
|
||||
{
|
||||
local KFPawn KFP;
|
||||
local KFPawn_Human KFPH;
|
||||
local KFPlayerReplicationInfo KFPRI;
|
||||
|
||||
KFPH = KFPawn_Human(Other);
|
||||
if ( KFPH != none && KFPH != Instigator)
|
||||
{
|
||||
KFPRI = KFPlayerReplicationInfo(KFPH.PlayerReplicationInfo);
|
||||
if (KFPRI != none)
|
||||
{
|
||||
KFPRI.AddDosh(class'KFWeap_AssaultRifle_Doshinegun'.default.DoshCost);
|
||||
Destroy();
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if ( Other != Instigator && Other.bCanBeDamaged && (!Other.bWorldGeometry || !Other.bStatic) )
|
||||
{
|
||||
KFP = KFPawn( Other );
|
||||
if ( KFP != None )
|
||||
{
|
||||
// check/ignore repeat touch events
|
||||
if( CheckRepeatingTouch(Other) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ProcessBulletTouch(Other, HitLocation, HitNormal);
|
||||
|
||||
Bounce(HitNormal, Other);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
ProcessDestructibleTouchOnBounce( Other, HitLocation, HitNormal );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
super.ProcessTouch(Other, HitLocation, HitNormal);
|
||||
}
|
||||
|
||||
simulated function SyncOriginalLocation()
|
||||
{
|
||||
local Actor HitActor;
|
||||
local vector HitLocation, HitNormal;
|
||||
local TraceHitInfo HitInfo;
|
||||
|
||||
if (Role < ROLE_Authority && Instigator != none && Instigator.IsLocallyControlled())
|
||||
{
|
||||
HitActor = Trace(HitLocation, HitNormal, OriginalLocation, Location,,, HitInfo, TRACEFLAG_Bullet);
|
||||
if (HitActor != none)
|
||||
{
|
||||
Bounce(HitNormal, HitActor);
|
||||
}
|
||||
}
|
||||
|
||||
Super.SyncOriginalLocation();
|
||||
}
|
||||
|
||||
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MaxSpeed=7500.0 //5000.0
|
||||
Speed=7500.0 //5000.0
|
||||
GravityScale=0.57 //0.4
|
||||
|
||||
Physics=PHYS_Falling
|
||||
TossZ=100 //150
|
||||
MomentumTransfer=50000.0
|
||||
|
||||
DamageRadius=0
|
||||
|
||||
bWarnAIWhenFired=true
|
||||
|
||||
BouncesLeft=1
|
||||
DampingFactor=0.1
|
||||
|
||||
DampenFactor=0.250000
|
||||
DampenFactorParallel=0.400000
|
||||
LifeSpan=120 //8
|
||||
|
||||
bNetTemporary=False
|
||||
NetPriority=5
|
||||
NetUpdateFrequency=200
|
||||
|
||||
ProjFlightTemplate=ParticleSystem'WEP_Doshinegun_EMIT.PS_Trail'
|
||||
ProjFlightTemplateZedTime=ParticleSystem'WEP_Doshinegun_EMIT.PS_Trail'
|
||||
|
||||
ImpactEffects=KFImpactEffectInfo'WEP_Doshinegun_ARCH.Dosh_Impact'
|
||||
|
||||
Begin Object Class=SkeletalMeshComponent Name=PickupMesh0
|
||||
SkeletalMesh=SkeletalMesh'GP_Mesh.dosh_SM'
|
||||
PhysicsAsset=PhysicsAsset'GP_Mesh.dosh_SM_Physics'
|
||||
BlockNonZeroExtent=false
|
||||
CastShadow=false
|
||||
End Object
|
||||
DroppedPickupMesh=PickupMesh0
|
||||
}
|
@ -122,8 +122,8 @@ simulated function Landed( Vector HitNormal, actor FloorActor )
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MaxSpeed=14000.0
|
||||
Speed=14000.0
|
||||
MaxSpeed=17500.0 //14000.0
|
||||
Speed=17500.0 //14000.0
|
||||
|
||||
bWarnAIWhenFired=true
|
||||
|
||||
|
@ -349,9 +349,9 @@ DefaultProperties
|
||||
// KFSM_FleshpoundKing_ChestBeam
|
||||
BeamDamageType=class'KFDT_FleshpoundKing_ChestBeam'
|
||||
BeamExtent=(X=15.0f, Y=15.0f, Z=15.0f)
|
||||
MaxBeamLength=2500.0f //1300
|
||||
MaxBeamLength=3000.0f //2500.0f //1300
|
||||
DamageInterval=0.1f
|
||||
DamagePerTick=10 //15 //7
|
||||
DamagePerTick=12 //10 //15 //7
|
||||
DamageMomentumImpulse=100.0f
|
||||
TimeUntilTargetChange=0.75f
|
||||
|
||||
|
135
KFGameContent/Classes/KFSeasonalEventStats_Xmas2021.uc
Normal file
135
KFGameContent/Classes/KFSeasonalEventStats_Xmas2021.uc
Normal file
@ -0,0 +1,135 @@
|
||||
//=============================================================================
|
||||
// KFSeasonalEventStats_Xmas2021
|
||||
//=============================================================================
|
||||
// Tracks event-specific challenges/accomplishments for Xmas 2020
|
||||
//=============================================================================
|
||||
// Killing Floor 2
|
||||
// Copyright (C) 2021 Tripwire Interactive LLC
|
||||
//=============================================================================
|
||||
class KFSeasonalEventStats_Xmas2021 extends KFSeasonalEventStats;
|
||||
|
||||
var private int WeaponRequiredPrice;
|
||||
var transient private const int DecapitationsRequired, DoshRequired, WeaponsRequired, EndlessWaveRequired;
|
||||
|
||||
private event Initialize(string MapName)
|
||||
{
|
||||
local string CapsMapName;
|
||||
CapsMapName = Caps(MapName);
|
||||
|
||||
bObjectiveIsValidForMap[0] = 1; // Decapitate 1000 Zeds on any map or mode
|
||||
bObjectiveIsValidForMap[1] = 0; // Complete the Weekly on Carillon Hamlet
|
||||
bObjectiveIsValidForMap[2] = 0; // Earn 75,000 Dosh through kills, rewards and healing on Carillon Hamlet
|
||||
bObjectiveIsValidForMap[3] = 0; // Use the trader to purchase a total of 20 weapons that cost 1500 Dosh or more on Carrion Hamlet.
|
||||
bObjectiveIsValidForMap[4] = 0; // Complete wave 15 on Endless Hard or higher difficulty on Carillon Hamlet
|
||||
|
||||
if (CapsMapName == "KF-CARILLONHAMLET")
|
||||
{
|
||||
bObjectiveIsValidForMap[1] = 1;
|
||||
bObjectiveIsValidForMap[2] = 1;
|
||||
bObjectiveIsValidForMap[3] = 1;
|
||||
bObjectiveIsValidForMap[4] = 1;
|
||||
}
|
||||
|
||||
SetSeasonalEventStatsMax(DecapitationsRequired, 0, DoshRequired, WeaponsRequired, 0);
|
||||
}
|
||||
|
||||
private event GrantEventItems()
|
||||
{
|
||||
if (Outer.IsEventObjectiveComplete(0) &&
|
||||
Outer.IsEventObjectiveComplete(1) &&
|
||||
Outer.IsEventObjectiveComplete(2) &&
|
||||
Outer.IsEventObjectiveComplete(3) &&
|
||||
Outer.IsEventObjectiveComplete(4))
|
||||
{
|
||||
//@TODO: Update me
|
||||
GrantEventItem(9177);
|
||||
}
|
||||
}
|
||||
|
||||
simulated function OnZedKilledByHeadshot(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT)
|
||||
{
|
||||
local int ObjIdx;
|
||||
|
||||
// Hellmark Station decapitate 600 zeds
|
||||
ObjIdx = 0;
|
||||
if (bObjectiveIsValidForMap[ObjIdx] != 0)
|
||||
{
|
||||
IncrementSeasonalEventStat(ObjIdx, 1);
|
||||
if (Outer.GetSeasonalEventStatValue(ObjIdx) >= DecapitationsRequired)
|
||||
{
|
||||
FinishedObjective(SEI_Winter, ObjIdx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
simulated event OnGameWon(class<GameInfo> GameClass, int Difficulty, int GameLength, bool bCoOp)
|
||||
{
|
||||
local int ObjIdx;
|
||||
ObjIdx = 1;
|
||||
|
||||
// Carillon weekly
|
||||
if (bObjectiveIsValidForMap[ObjIdx] != 0)
|
||||
{
|
||||
if (GameClass == class'KFGameInfo_WeeklySurvival')
|
||||
{
|
||||
FinishedObjective(SEI_Winter, ObjIdx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
simulated event OnWeaponPurchased(class<KFWeaponDefinition> WeaponDef, int Price)
|
||||
{
|
||||
local int ObjIdx;
|
||||
|
||||
// Purchase weapons with a price >= 1500
|
||||
ObjIdx = 3;
|
||||
if (bObjectiveIsValidForMap[ObjIdx] != 0 && Price >= WeaponRequiredPrice)
|
||||
{
|
||||
IncrementSeasonalEventStat(ObjIdx, 1);
|
||||
if (Outer.GetSeasonalEventStatValue(ObjIdx) >= WeaponsRequired)
|
||||
{
|
||||
FinishedObjective(SEI_Winter, ObjIdx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
simulated event OnWaveCompleted(class<GameInfo> GameClass, int Difficulty, int WaveNum)
|
||||
{
|
||||
local int ObjIdx;
|
||||
local int TotalDoshEarned;
|
||||
|
||||
// Earn 75,000 Dosh through kills, rewards and healing on Carillon Hamlet
|
||||
ObjIdx = 2;
|
||||
if (bObjectiveIsValidForMap[ObjIdx] != 0)
|
||||
{
|
||||
TotalDoshEarned = Outer.MyKFPC.MatchStats.TotalDoshEarned + Outer.MyKFPC.MatchStats.GetDoshEarnedInWave();
|
||||
if(TotalDoshEarned > 0)
|
||||
{
|
||||
IncrementSeasonalEventStat(ObjIdx, TotalDoshEarned);
|
||||
if (Outer.GetSeasonalEventStatValue(ObjIdx) >= DoshRequired)
|
||||
{
|
||||
FinishedObjective(SEI_Winter, ObjIdx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Complete wave 15 on Endless Hard or higher difficulty on Carillon
|
||||
ObjIdx = 4;
|
||||
if (bObjectiveIsValidForMap[ObjIdx] != 0)
|
||||
{
|
||||
if (WaveNum >= EndlessWaveRequired && GameClass == class'KFGameInfo_Endless' && Difficulty >= `DIFFICULTY_HARD)
|
||||
{
|
||||
FinishedObjective(SEI_Winter, ObjIdx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
DecapitationsRequired=1000
|
||||
DoshRequired=75000
|
||||
WeaponsRequired=20
|
||||
EndlessWaveRequired=15
|
||||
|
||||
WeaponRequiredPrice=1500
|
||||
}
|
@ -20,12 +20,10 @@ function Activated()
|
||||
if (KFGI.MyKFGRI != none && KFGI.MyKFGRI.bIsWeeklyMode && class'KFGameEngine'.static.GetWeeklyEventIndexMod() == WeeklyIndex)
|
||||
{
|
||||
OutputLinks[0].bHasImpulse = true;
|
||||
OutputLinks[0].bHasImpulse = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
OutputLinks[0].bHasImpulse = false;
|
||||
OutputLinks[0].bHasImpulse = true;
|
||||
OutputLinks[1].bHasImpulse = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
34
KFGameContent/Classes/KFWeapAttach_Doshinegun.uc
Normal file
34
KFGameContent/Classes/KFWeapAttach_Doshinegun.uc
Normal file
@ -0,0 +1,34 @@
|
||||
//=============================================================================
|
||||
// KFWeapAttach_Doshinegun
|
||||
//=============================================================================
|
||||
//
|
||||
//=============================================================================
|
||||
// Killing Floor 2
|
||||
// Copyright (C) 2021 Tripwire Interactive LLC
|
||||
//=============================================================================
|
||||
|
||||
class KFWeapAttach_Doshinegun extends KFWeaponAttachment;
|
||||
|
||||
/** Play a melee attack animation */
|
||||
simulated function float PlayMeleeAtkAnim(EWeaponState NewWeaponState, KFPawn P)
|
||||
{
|
||||
local name AnimName;
|
||||
|
||||
if( P.IsFirstPerson() )
|
||||
{
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
if (NewWeaponState == WEP_MeleeBasic)
|
||||
{
|
||||
AnimName = P.bIsCrouched ? CH_MeleeBasic : MeleeBasic;
|
||||
return PlayCharacterMeshAnim(P, AnimName, true);
|
||||
}
|
||||
|
||||
return super.PlayMeleeAtkAnim(NewWeaponState, P);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
|
||||
}
|
249
KFGameContent/Classes/KFWeap_AssaultRifle_Doshinegun.uc
Normal file
249
KFGameContent/Classes/KFWeap_AssaultRifle_Doshinegun.uc
Normal file
@ -0,0 +1,249 @@
|
||||
//=============================================================================
|
||||
// KFWeap_AssaultRifle_Doshinegun
|
||||
//=============================================================================
|
||||
// Like if we were rich...
|
||||
//=============================================================================
|
||||
// Killing Floor 2
|
||||
// Copyright (C) 2021 Tripwire Interactive LLC
|
||||
//=============================================================================
|
||||
|
||||
class KFWeap_AssaultRifle_Doshinegun extends KFWeap_RifleBase;
|
||||
|
||||
var int DoshCost;
|
||||
var transient KFPlayerReplicationInfo KFPRI;
|
||||
var transient bool bIsBeingDropped;
|
||||
|
||||
simulated function Activate()
|
||||
{
|
||||
local KFPawn KFP;
|
||||
|
||||
super.Activate();
|
||||
|
||||
if (KFPRI == none)
|
||||
{
|
||||
KFP = KFPawn(Instigator);
|
||||
if (KFP != none)
|
||||
{
|
||||
KFPRI = KFPlayerReplicationInfo(KFP.PlayerReplicationInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
simulated function bool HasAnyAmmo()
|
||||
{
|
||||
return bIsBeingDropped ? AmmoCount[0] > 0 : (AmmoCount[0] > 0 || KFPRI.Score >= DoshCost);
|
||||
}
|
||||
|
||||
/** Returns true if weapon can potentially be reloaded */
|
||||
simulated function bool CanReload(optional byte FireModeNum)
|
||||
{
|
||||
return KFPRI.Score >= DoshCost && AmmoCount[FireModeNum] < MagazineCapacity[FireModeNum];
|
||||
}
|
||||
|
||||
/** Performs actual ammo reloading */
|
||||
simulated function PerformReload(optional byte FireModeNum)
|
||||
{
|
||||
local int ReloadAmount;
|
||||
local int AmmoType;
|
||||
|
||||
AmmoType = GetAmmoType(FireModeNum);
|
||||
|
||||
if ( bInfiniteSpareAmmo )
|
||||
{
|
||||
AmmoCount[AmmoType] = MagazineCapacity[AmmoType];
|
||||
ReloadAmountLeft = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if ( (Role == ROLE_Authority && !bAllowClientAmmoTracking) || (Instigator.IsLocallyControlled() && bAllowClientAmmoTracking) )
|
||||
{
|
||||
ReloadAmount = Min(MagazineCapacity[0] - AmmoCount[0], KFPRI.Score / DoshCost);
|
||||
AmmoCount[AmmoType] = Min(AmmoCount[AmmoType] + ReloadAmount, MagazineCapacity[AmmoType]);
|
||||
KFPRI.AddDosh(-ReloadAmount * DoshCost);
|
||||
}
|
||||
|
||||
ReloadAmountLeft = 0;
|
||||
ShotsHit = 0;
|
||||
}
|
||||
|
||||
function int AddAmmo(int Amount)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
simulated function bool CanBuyAmmo()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static simulated event bool UsesAmmo()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// Overriden to deactivate low ammo dialogue
|
||||
simulated state Reloading
|
||||
{
|
||||
simulated function EndState(Name NextStateName)
|
||||
{
|
||||
local int ActualReloadAmount;
|
||||
ClearZedTimeResist();
|
||||
ClearTimer(nameof(ReloadStatusTimer));
|
||||
ClearTimer(nameof(ReloadAmmoTimer));
|
||||
ClearPendingFire(RELOAD_FIREMODE);
|
||||
|
||||
if ( bAllowClientAmmoTracking && Role < ROLE_Authority )
|
||||
{
|
||||
// Get how much total ammo was reloaded on the client side over the entire course of the reload.
|
||||
ActualReloadAmount = InitialReloadAmount - ReloadAmountLeft;
|
||||
// Sync spare ammo counts using initial spare ammo, and how much ammo has been reloaded since reload began.
|
||||
ServerSyncReload(InitialReloadSpareAmmo - ActualReloadAmount);
|
||||
}
|
||||
|
||||
CheckBoltLockPostReload();
|
||||
NotifyEndState();
|
||||
|
||||
CurrentFireMode = DEFAULT_FIREMODE;
|
||||
|
||||
ReloadStatus = RS_None;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Drop this item out in to the world
|
||||
*/
|
||||
function DropFrom(vector StartLocation, vector StartVelocity)
|
||||
{
|
||||
bIsBeingDropped=true;
|
||||
super.DropFrom(StartLocation, StartVelocity);
|
||||
}
|
||||
|
||||
function SetOriginalValuesFromPickup( KFWeapon PickedUpWeapon )
|
||||
{
|
||||
local KFPawn KFP;
|
||||
|
||||
bIsBeingDropped=false;
|
||||
// Reset the replication info
|
||||
KFP = KFPawn(Instigator);
|
||||
if (KFP != none)
|
||||
{
|
||||
KFPRI = KFPlayerReplicationInfo(KFP.PlayerReplicationInfo);
|
||||
}
|
||||
super.SetOriginalValuesFromPickup(PickedUpWeapon);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
// FOV
|
||||
MeshFOV=65
|
||||
MeshIronSightFOV=45 //52
|
||||
PlayerIronSightFOV=70
|
||||
|
||||
// Depth of field
|
||||
DOF_FG_FocalRadius=150 //85
|
||||
DOF_FG_MaxNearBlurSize=1 //2.5
|
||||
|
||||
// Content
|
||||
PackageKey="Doshinegun"
|
||||
FirstPersonMeshName="WEP_1P_Doshinegun_MESH.Wep_1stP_Doshinegun_Rig"
|
||||
FirstPersonAnimSetNames(0)="WEP_1P_Doshinegun_ANIM.Wep_1st_Doshinegun_Anim"
|
||||
PickupMeshName="WEP_3P_Doshinegun_MESH.Wep_Doshinegun_Pickup"
|
||||
AttachmentArchetypeName="WEP_Doshinegun_ARCH.Wep_Doshinegun_3P"
|
||||
MuzzleFlashTemplateName="WEP_Doshinegun_ARCH.Wep_Doshinegun_MuzzleFlash"
|
||||
|
||||
// Zooming/Position
|
||||
PlayerViewOffset=(X=1.0,Y=8.5,Z=-3)
|
||||
IronSightPosition=(X=5.0,Y=0.05,Z=-1.2)
|
||||
|
||||
// Ammo
|
||||
MagazineCapacity[0]=20
|
||||
SpareAmmoCapacity[0]=0
|
||||
InitialSpareMags[0]=0
|
||||
AmmoPickupScale[0]=0.0
|
||||
bCanBeReloaded=true
|
||||
bReloadFromMagazine=true
|
||||
|
||||
// Recoil
|
||||
maxRecoilPitch=250 //150
|
||||
minRecoilPitch=200 //115
|
||||
maxRecoilYaw=115
|
||||
minRecoilYaw=-115
|
||||
RecoilRate=0.085
|
||||
RecoilMaxYawLimit=500
|
||||
RecoilMinYawLimit=65035
|
||||
RecoilMaxPitchLimit=900
|
||||
RecoilMinPitchLimit=65035
|
||||
RecoilISMaxYawLimit=75
|
||||
RecoilISMinYawLimit=65460
|
||||
RecoilISMaxPitchLimit=375
|
||||
RecoilISMinPitchLimit=65460
|
||||
RecoilViewRotationScale=0.25
|
||||
IronSightMeshFOVCompensationScale=1.5
|
||||
HippedRecoilModifier=1.5
|
||||
|
||||
// Inventory / Grouping
|
||||
InventorySize=4 //6
|
||||
GroupPriority=50
|
||||
WeaponSelectTexture=Texture2D'WEP_UI_Doshinegun_TEX.UI_Weapon_Select_Doshinegun'
|
||||
//AssociatedPerkClasses(0)=class'KFPerk_Survivalist'
|
||||
AssociatedPerkClasses(0)=none
|
||||
|
||||
// DEFAULT_FIREMODE
|
||||
FireModeIconPaths(DEFAULT_FIREMODE)=Texture2D'ui_firemodes_tex.UI_FireModeSelect_BulletAuto'
|
||||
FiringStatesArray(DEFAULT_FIREMODE)=WeaponFiring
|
||||
WeaponFireTypes(DEFAULT_FIREMODE)=EWFT_Projectile
|
||||
WeaponProjectiles(DEFAULT_FIREMODE)=class'KFProj_Dosh'
|
||||
InstantHitDamageTypes(DEFAULT_FIREMODE)=class'KFDT_Bludgeon_Doshinegun_Shot'
|
||||
FireInterval(DEFAULT_FIREMODE)=+0.2
|
||||
Spread(DEFAULT_FIREMODE)=0.015
|
||||
InstantHitDamage(DEFAULT_FIREMODE)=60.0 //55.0 //60.0
|
||||
FireOffset=(X=30,Y=4.5,Z=-5)
|
||||
|
||||
// ALT_FIREMODE
|
||||
FireModeIconPaths(ALTFIRE_FIREMODE)=Texture2D'ui_firemodes_tex.UI_FireModeSelect_BulletSingle'
|
||||
FiringStatesArray(ALTFIRE_FIREMODE)=WeaponSingleFiring
|
||||
WeaponFireTypes(ALTFIRE_FIREMODE)=EWFT_Projectile
|
||||
WeaponProjectiles(ALTFIRE_FIREMODE)=class'KFProj_Dosh'
|
||||
InstantHitDamageTypes(ALTFIRE_FIREMODE)=class'KFDT_Bludgeon_Doshinegun_Shot'
|
||||
FireInterval(ALTFIRE_FIREMODE)=+0.2
|
||||
InstantHitDamage(ALTFIRE_FIREMODE)=60.0 //55.0 //60.0
|
||||
Spread(ALTFIRE_FIREMODE)=0.015
|
||||
|
||||
// BASH_FIREMODE
|
||||
InstantHitDamageTypes(BASH_FIREMODE)=class'KFDT_Bludgeon_Doshinegun'
|
||||
InstantHitDamage(BASH_FIREMODE)=26
|
||||
|
||||
// Fire Effects
|
||||
WeaponFireSnd(DEFAULT_FIREMODE)=(DefaultCue=AkEvent'WW_WEP_Doshinegun.Play_WEP_Doshinegun_Shoot_Fire_3P_Loop', FirstPersonCue=AkEvent'WW_WEP_Doshinegun.Play_WEP_Doshinegun_Shoot_Fire_1P_Loop')
|
||||
WeaponFireSnd(ALTFIRE_FIREMODE)=(DefaultCue=AkEvent'WW_WEP_Doshinegun.Play_WEP_Doshinegun_Fire_3P', FirstPersonCue=AkEvent'WW_WEP_Doshinegun.Play_WEP_Doshinegun_Fire_1P')
|
||||
WeaponFireLoopEndSnd(DEFAULT_FIREMODE)=(DefaultCue=AkEvent'WW_WEP_Doshinegun.Play_WEP_Doshinegun_Shoot_Fire_3P_EndLoop', FirstPersonCue=AkEvent'WW_WEP_Doshinegun.Play_WEP_Doshinegun_Shoot_Fire_1P_EndLoop')
|
||||
|
||||
WeaponDryFireSnd(DEFAULT_FIREMODE)=AkEvent'WW_WEP_Doshinegun.Play_WEP_Doshinegun_Dry_Fire'
|
||||
WeaponDryFireSnd(ALTFIRE_FIREMODE)=AkEvent'WW_WEP_Doshinegun.Play_WEP_Doshinegun_Dry_Fire'
|
||||
|
||||
// Advanced (High RPM) Fire Effects
|
||||
bLoopingFireAnim(DEFAULT_FIREMODE)=true
|
||||
bLoopingFireSnd(DEFAULT_FIREMODE)=true
|
||||
SingleFireSoundIndex=ALTFIRE_FIREMODE
|
||||
|
||||
// Attachments
|
||||
bHasIronSights=true
|
||||
bHasFlashlight=false
|
||||
|
||||
// Weapon Upgrade stat boosts
|
||||
//WeaponUpgrades[1]=(IncrementDamage=1.3f,IncrementWeight=1)
|
||||
//WeaponUpgrades[2]=(IncrementDamage=1.65f,IncrementWeight=2)
|
||||
//WeaponUpgrades[3]=(IncrementDamage=1.85f,IncrementWeight=3)
|
||||
|
||||
WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.23f), (Stat=EWUS_Damage1, Scale=1.2f), (Stat=EWUS_Weight, Add=1)))
|
||||
WeaponUpgrades[2]=(Stats=((Stat=EWUS_Damage0, Scale=1.47f), (Stat=EWUS_Damage1, Scale=1.4f), (Stat=EWUS_Weight, Add=2)))
|
||||
WeaponUpgrades[3]=(Stats=((Stat=EWUS_Damage0, Scale=1.70f), (Stat=EWUS_Damage1, Scale=1.6f), (Stat=EWUS_Weight, Add=3)))
|
||||
|
||||
DoshCost = 20; //25;
|
||||
bUsesSecondaryAmmoAltHUD=true
|
||||
bAllowClientAmmoTracking=false
|
||||
bIsBeingDropped=false
|
||||
}
|
||||
|
||||
|
||||
|
183
KFGameContent/Classes/KFWeap_HRG_Stunner.uc
Normal file
183
KFGameContent/Classes/KFWeap_HRG_Stunner.uc
Normal file
@ -0,0 +1,183 @@
|
||||
//=============================================================================
|
||||
// KFWeap_HRG_Stunner
|
||||
//=============================================================================
|
||||
// HRG Stunner Weapon Class
|
||||
//=============================================================================
|
||||
// Killing Floor 2
|
||||
// Copyright (C) 2021 Tripwire Interactive LLC
|
||||
//=============================================================================
|
||||
|
||||
class KFWeap_HRG_Stunner extends KFWeap_ShotgunBase;
|
||||
|
||||
const SecondaryFireAnim = 'Shoot_Secondary';
|
||||
const SecondaryFireIronAnim = 'Shoot_Secondary_Iron';
|
||||
|
||||
/** How much recoil the altfire should do */
|
||||
var protected const float AltFireRecoilScale;
|
||||
|
||||
simulated function ModifyRecoil( out float CurrentRecoilModifier )
|
||||
{
|
||||
if( CurrentFireMode == ALTFIRE_FIREMODE )
|
||||
{
|
||||
CurrentRecoilModifier *= AltFireRecoilScale;
|
||||
}
|
||||
|
||||
super.ModifyRecoil( CurrentRecoilModifier );
|
||||
}
|
||||
|
||||
simulated function StartFire(byte FireModeNum)
|
||||
{
|
||||
if (FireModeNum == DEFAULT_FIREMODE && bUseAltFireMode)
|
||||
{
|
||||
if (AmmoCount[FireModeNum] < AmmoCost[ALTFIRE_FIREMODE] && SpareAmmoCount[FireModeNum] > 0)
|
||||
{
|
||||
BeginFire(RELOAD_FIREMODE);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
super.StartFire(FireModeNum);
|
||||
}
|
||||
|
||||
simulated function AltFireMode()
|
||||
{
|
||||
StartFire(ALTFIRE_FIREMODE);
|
||||
}
|
||||
|
||||
simulated function NotifyAltFireUsage()
|
||||
{
|
||||
local KFPawn_Human KFPH;
|
||||
|
||||
// Notify 3P to change material.
|
||||
KFPH = KFPawn_Human(Instigator);
|
||||
if (KFPH != none)
|
||||
{
|
||||
KFPH.SetUsingAltFireMode(bUseAltFireMode, true);
|
||||
KFPH.bNetDirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
simulated function name GetWeaponFireAnim(byte FireModeNum)
|
||||
{
|
||||
if (FireModeNum == ALTFIRE_FIREMODE)
|
||||
{
|
||||
return bUsingSights ? SecondaryFireIronAnim : SecondaryFireAnim;
|
||||
}
|
||||
return super.GetWeaponFireAnim(FireModeNum);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
// Inventory
|
||||
InventorySize=7 //6
|
||||
GroupPriority=100
|
||||
WeaponSelectTexture=Texture2D'wep_ui_hrg_stunner_tex.UI_Weapon_Select_HRG_Stunner'
|
||||
|
||||
// Shooting Animations
|
||||
FireSightedAnims[0]=Shoot_Iron
|
||||
FireSightedAnims[1]=Shoot_Iron2
|
||||
FireSightedAnims[2]=Shoot_Iron3
|
||||
|
||||
// FOV
|
||||
MeshFOV=86
|
||||
MeshIronSightFOV=52
|
||||
PlayerIronSightFOV=70
|
||||
|
||||
// Depth of field
|
||||
DOF_FG_FocalRadius=85
|
||||
DOF_FG_MaxNearBlurSize=3.5
|
||||
|
||||
// Zooming/Position
|
||||
PlayerViewOffset=(X=15.0,Y=8.5,Z=0.0)
|
||||
IronSightPosition=(X=8,Y=0,Z=0)
|
||||
|
||||
// Content
|
||||
PackageKey="HRG_Stunner"
|
||||
FirstPersonMeshName="Wep_1P_HRG_Stunner_MESH.Wep_1stP_HRG_Stunner_Rig"
|
||||
FirstPersonAnimSetNames(0)="Wep_1P_HRG_Stunner_ANIM.Wep_1stP_HRG_Stunner_Anim"
|
||||
PickupMeshName="WEP_3P_HRG_Stunner_MESH.Wep_HRG_Stunner_Pickup"
|
||||
AttachmentArchetypeName="WEP_HRG_Stunner_ARCH.Wep_AA12_3P"
|
||||
MuzzleFlashTemplateName="WEP_HRG_Stunner_ARCH.Wep_AA12_MuzzleFlash"
|
||||
|
||||
// DEFAULT_FIREMODE
|
||||
FireModeIconPaths(DEFAULT_FIREMODE)=Texture2D'ui_firemodes_tex.UI_FireModeSelect_ShotgunAuto'
|
||||
FiringStatesArray(DEFAULT_FIREMODE)=WeaponFiring
|
||||
WeaponFireTypes(DEFAULT_FIREMODE)=EWFT_Projectile
|
||||
WeaponProjectiles(DEFAULT_FIREMODE)=class'KFProj_Bullet_HRG_Stunner'
|
||||
InstantHitDamage(DEFAULT_FIREMODE)=60.0 //65.0
|
||||
InstantHitDamageTypes(DEFAULT_FIREMODE)=class'KFDT_Ballistic_HRG_Stunner'
|
||||
PenetrationPower(DEFAULT_FIREMODE)=2.0
|
||||
FireInterval(DEFAULT_FIREMODE)=0.15
|
||||
Spread(DEFAULT_FIREMODE)=0.005
|
||||
FireOffset=(X=30,Y=5,Z=-4)
|
||||
// Shotgun
|
||||
NumPellets(DEFAULT_FIREMODE)=1
|
||||
|
||||
// ALT_FIREMODE
|
||||
FireModeIconPaths(ALTFIRE_FIREMODE)=Texture2D'ui_firemodes_tex.UI_FireModeSelect_ShotgunSingle'
|
||||
FiringStatesArray(ALTFIRE_FIREMODE)=WeaponSingleFiring
|
||||
WeaponFireTypes(ALTFIRE_FIREMODE)=EWFT_Projectile
|
||||
WeaponProjectiles(ALTFIRE_FIREMODE)=class'KFProj_Bullet_HRG_Stunner_Alt'
|
||||
InstantHitDamage(ALTFIRE_FIREMODE)=20.0 //50.0
|
||||
InstantHitDamageTypes(ALTFIRE_FIREMODE)=class'KFDT_Ballistic_HRG_Stunner_Alt'
|
||||
PenetrationPower(ALTFIRE_FIREMODE)=0
|
||||
FireInterval(ALTFIRE_FIREMODE)=0.5
|
||||
Spread(ALTFIRE_FIREMODE)=0.025
|
||||
AmmoCost(ALTFIRE_FIREMODE)=5 //3
|
||||
|
||||
// Shotgun
|
||||
NumPellets(ALTFIRE_FIREMODE)=1
|
||||
|
||||
// BASH_FIREMODE
|
||||
InstantHitDamageTypes(BASH_FIREMODE)=class'KFDT_Bludgeon_HRG_Stunner'
|
||||
InstantHitDamage(BASH_FIREMODE)=26
|
||||
|
||||
// Fire Effects
|
||||
WeaponFireSnd(DEFAULT_FIREMODE)=(DefaultCue=AkEvent'WW_WEP_HRG_Stunner.Play_WEP_HRG_Stunner_Fire_3P', FirstPersonCue=AkEvent'WW_WEP_HRG_Stunner.Play_WEP_HRG_Stunner_Fire_1P')
|
||||
WeaponFireSnd(ALTFIRE_FIREMODE)=(DefaultCue=AkEvent'WW_WEP_HRG_Stunner.Play_WEP_HRG_Stunner_Alt_Fire_3P', FirstPersonCue=AkEvent'WW_WEP_HRG_Stunner.Play_WEP_HRG_Stunner_Alt_Fire_1P')
|
||||
|
||||
WeaponDryFireSnd(DEFAULT_FIREMODE)=AkEvent'WW_WEP_HRG_Stunner.Play_WEP_HRG_Stunner_Dry_Fire'
|
||||
WeaponDryFireSnd(ALTFIRE_FIREMODE)=AkEvent'WW_WEP_HRG_Stunner.Play_WEP_HRG_Stunner_Dry_Fire'
|
||||
|
||||
// Attachments
|
||||
bHasIronSights=true
|
||||
bHasFlashlight=false
|
||||
|
||||
// Ammo
|
||||
MagazineCapacity[0]=25
|
||||
SpareAmmoCapacity[0]=225 //250
|
||||
InitialSpareMags[0]=1
|
||||
bCanBeReloaded=true
|
||||
bReloadFromMagazine=true
|
||||
bHasFireLastAnims=false
|
||||
|
||||
// Recoil
|
||||
maxRecoilPitch=150
|
||||
minRecoilPitch=125
|
||||
maxRecoilYaw=75
|
||||
minRecoilYaw=-75
|
||||
RecoilRate=0.075
|
||||
RecoilBlendOutRatio=0.25
|
||||
RecoilMaxYawLimit=500
|
||||
RecoilMinYawLimit=65035
|
||||
RecoilMaxPitchLimit=900
|
||||
RecoilMinPitchLimit=64785
|
||||
RecoilISMaxYawLimit=75
|
||||
RecoilISMinYawLimit=65460
|
||||
RecoilISMaxPitchLimit=375
|
||||
RecoilISMinPitchLimit=65460
|
||||
RecoilViewRotationScale=0.7
|
||||
FallingRecoilModifier=1.5
|
||||
HippedRecoilModifier=1.75
|
||||
|
||||
AssociatedPerkClasses(0)=class'KFPerk_SWAT'
|
||||
|
||||
WeaponFireWaveForm=ForceFeedbackWaveform'FX_ForceFeedback_ARCH.Gunfire.Heavy_Recoil'
|
||||
|
||||
// Weapon Upgrade stat boosts
|
||||
//WeaponUpgrades[1]=(IncrementDamage=1.15f,IncrementWeight=1)
|
||||
|
||||
WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.15f), (Stat=EWUS_Damage1, Scale=1.15f), (Stat=EWUS_Weight, Add=1)))
|
||||
|
||||
AltFireRecoilScale=3.0f //2.0f
|
||||
}
|
@ -71,7 +71,7 @@ simulated function StartFire(byte FireModeNum)
|
||||
}
|
||||
}
|
||||
|
||||
super.StartFire(FireModeNum);
|
||||
super(KFWeapon).StartFire(FireModeNum);
|
||||
}
|
||||
|
||||
/*********************************************************************************************
|
||||
@ -94,6 +94,13 @@ simulated function ProcessInstantHitEx(byte FiringMode, ImpactInfo Impact, optio
|
||||
super.ProcessInstantHitEx( FiringMode, Impact, NumHits, out_PenetrationVal, ImpactNum );
|
||||
}
|
||||
|
||||
/** process local player impact for clientside hit detection */
|
||||
event RecieveClientImpact(byte FiringMode, const out ImpactInfo Impact, optional out float PenetrationValue, optional int ImpactNum)
|
||||
{
|
||||
// skip KFWeap_MeleeBase because it does melee stuff
|
||||
super(KFWeapon).RecieveClientImpact(FiringMode, Impact, PenetrationValue, ImpactNum);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
// MeleeBase
|
||||
|
@ -334,7 +334,7 @@ defaultproperties
|
||||
// Zooming/Position
|
||||
PlayerViewOffset=(X=3.0,Y=8,Z=-1.8)
|
||||
//IronSightPosition=(X=0,Y=-0.07,Z=1.03)
|
||||
IronSightPosition=(X=0,Y=-0.115,Z=1.0425)
|
||||
IronSightPosition=(X=0,Y=-0.09,Z=1.042)
|
||||
|
||||
// AI warning system
|
||||
bWarnAIWhenAiming=true
|
||||
|
@ -150,7 +150,7 @@ defaultproperties
|
||||
WeaponProjectiles(ALTFIRE_FIREMODE)=class'KFProj_Nail_Nailgun'
|
||||
InstantHitDamage(ALTFIRE_FIREMODE)=35
|
||||
InstantHitDamageTypes(ALTFIRE_FIREMODE)=class'KFDT_Ballistic_NailShotgun'
|
||||
Spread(ALTFIRE_FIREMODE)=0.02
|
||||
Spread(ALTFIRE_FIREMODE)=0.01 //0.02
|
||||
PenetrationPower(ALTFIRE_FIREMODE)=3.0
|
||||
FireInterval(ALTFIRE_FIREMODE)=0.2 // 300 RPM
|
||||
AltFireRecoilModifier=0.5
|
||||
@ -174,7 +174,7 @@ defaultproperties
|
||||
|
||||
// Ammo
|
||||
MagazineCapacity[0]=42
|
||||
SpareAmmoCapacity[0]=336
|
||||
SpareAmmoCapacity[0]=378 //336
|
||||
InitialSpareMags[0]=3
|
||||
bCanBeReloaded=true
|
||||
bReloadFromMagazine=true
|
||||
|
Reference in New Issue
Block a user