1
0
This commit is contained in:
2021-12-09 19:33:06 +03:00
parent b56d5b0c62
commit 0fe0ac1920
89 changed files with 3362 additions and 245 deletions

View File

@ -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

View 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'
}

View 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'
}

View 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'
}

View 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'
}

View File

@ -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'
}

View File

@ -21,5 +21,5 @@ defaultproperties
MeleeHitPower=100
WeaponDef=class'KFWeapDef_G18'
ModifierPerkList(0)=class'KFPerk_Swat'
ModifierPerkList(1)=class'KFPerk_Swat'
}

View File

@ -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'
}

View File

@ -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'
}

View 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'
}

View File

@ -14,6 +14,6 @@ DefaultProperties
StumblePower=200
MeleeHitPower=100
ModifierPerkList(0)=class'KFPerk_FieldMedic'
ModifierPerkList(1)=class'KFPerk_FieldMedic'
WeaponDef=class'KFWeapDef_HRG_Vampire'
}

View 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'
}

View File

@ -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

View File

@ -107,6 +107,9 @@ function StartMatch()
function PlayWaveStartDialog()
{
if (OutbreakEvent != none && OutbreakEvent.ActiveEvent.bBossRushMode)
return;
`DialogManager.PlayWaveStartDialog(MyKFGRI.IsBossWave());
if (WaveNum == 1)
{

View File

@ -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;

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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 )

View File

@ -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

View 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
}

View 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
}

View 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
}

View File

@ -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

View File

@ -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

View 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
}

View File

@ -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;
}
}
}

View 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
{
}

View 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
}

View 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
}

View File

@ -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

View File

@ -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

View File

@ -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