95 lines
4.3 KiB
Ucode
95 lines
4.3 KiB
Ucode
|
//=============================================================================
|
||
|
// KFGameConductorVersus
|
||
|
//=============================================================================
|
||
|
// Game conductor which dynamically manages the difficulty and fun of the game
|
||
|
// Versus version
|
||
|
//=============================================================================
|
||
|
// Killing Floor 2
|
||
|
// Copyright (C) 2016 Tripwire Interactive LLC
|
||
|
// John "Ramm-Jaeger" Gibson
|
||
|
//=============================================================================
|
||
|
class KFGameConductorVersus extends KFGameConductor
|
||
|
config(Game);
|
||
|
|
||
|
/** How much to scale the zed's health based on the human team players average perk rank */
|
||
|
var() InterpCurveFloat HumanRankZedHealthScaleCurve;
|
||
|
|
||
|
/** How much to scale the zed's health based on the human team players average perk rank */
|
||
|
var() InterpCurveFloat HumanRankZedDamageScaleCurve;
|
||
|
|
||
|
/** Called once per second to evaluate changes to gameplay */
|
||
|
function TimerUpdate()
|
||
|
{
|
||
|
UpdatePlayerAccuracyStats();
|
||
|
UpdateZedLifespanStats();
|
||
|
UpdatePlayersStatus();
|
||
|
UpdatePlayersAggregateSkill();
|
||
|
|
||
|
UpdateOverallStatus();
|
||
|
}
|
||
|
|
||
|
/** Calculate the overall status of the player's rank and performance */
|
||
|
function UpdateOverallStatus()
|
||
|
{
|
||
|
local int i;
|
||
|
|
||
|
UpdateAveragePerkRank();
|
||
|
|
||
|
// Adjust the zed damage and health to balance out player perk rank
|
||
|
if( !bBypassGameConductor )
|
||
|
{
|
||
|
CurrentVersusZedHealthMod = EvalInterpCurveFloat(HumanRankZedHealthScaleCurve, AveragePlayerPerkRank);
|
||
|
CurrentVersusZedDamageMod = EvalInterpCurveFloat(HumanRankZedDamageScaleCurve, AveragePlayerPerkRank);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
CurrentVersusZedHealthMod = default.CurrentVersusZedHealthMod;
|
||
|
CurrentVersusZedDamageMod = default.CurrentVersusZedDamageMod;
|
||
|
}
|
||
|
|
||
|
MyKFGRI.VersusZedHealthMod = CurrentVersusZedHealthMod;
|
||
|
MyKFGRI.VersusZedDamageMod = CurrentVersusZedDamageMod;
|
||
|
|
||
|
`log("CurrentVersusZedHealthMod = "$CurrentVersusZedHealthMod$" CurrentVersusZedDamageMod = "$CurrentVersusZedDamageMod, bLogGameConductor);
|
||
|
|
||
|
// Take us out of a forced lull if the time is up
|
||
|
if( GameConductorStatus == GCS_ForceLull && `TimeSince(PlayerDeathForceLullTime) > PlayerDeathForceLullLength )
|
||
|
{
|
||
|
GameConductorStatus = GCS_Normal;
|
||
|
`log("Forced lull completed", bLogGameConductor);
|
||
|
}
|
||
|
|
||
|
MyKFGRI.CurrentGameConductorStatus = GameConductorStatus;
|
||
|
MyKFGRI.CurrentParZedLifeSpan = GetParZedLifeSpan();
|
||
|
|
||
|
for( i = 0; i < (ArrayCount(MyKFGRI.OverallRankAndSkillModifierTracker) - 1); i++ )
|
||
|
{
|
||
|
MyKFGRI.OverallRankAndSkillModifierTracker[i] = MyKFGRI.OverallRankAndSkillModifierTracker[i+1];
|
||
|
}
|
||
|
|
||
|
// Bypassing making game conductor adjustments
|
||
|
OverallRankAndSkillModifier = 0.5;
|
||
|
`log("Bypassing GameConductor adjustment OverallRankAndSkillModifier = "$OverallRankAndSkillModifier, bLogGameConductor);
|
||
|
MyKFGRI.OverallRankAndSkillModifierTracker[ArrayCount(MyKFGRI.OverallRankAndSkillModifierTracker) -1] = OverallRankAndSkillModifier;
|
||
|
return;
|
||
|
|
||
|
//`log("OverallRankAndSkillModifier= "$OverallRankAndSkillModifier$" GetParZedLifeSpan() = "$GetParZedLifeSpan(), bLogGameConductor);
|
||
|
}
|
||
|
|
||
|
|
||
|
defaultproperties
|
||
|
{
|
||
|
TargetPerkRankRange(0)=(X=0,Y=25) // Normal, should result in a CurrentTargetPerkRank of 12.5, right in the middle
|
||
|
|
||
|
HumanRankZedHealthScaleCurve=(Points=((InVal=0.f,OutVal=0.85),(InVal=12.f, OutVal=1.425), (InVal=24.f, OutVal=2.0))) //1.48
|
||
|
HumanRankZedDamageScaleCurve=(Points=((InVal=0.f,OutVal=0.70),(InVal=12.f, OutVal=0.9155),(InVal=24.f, OutVal=1.131))) //0.8 //0.87
|
||
|
|
||
|
//HumanRankZedHealthScaleCurve=(Points=((InVal=0.f,OutVal=0.85),(InVal=6.f,OutVal=0.90),(InVal=12.f, OutVal=1.0),(InVal=24.f, OutVal=1.85))) //1.48
|
||
|
//HumanRankZedDamageScaleCurve=(Points=((InVal=0.f,OutVal=0.70),(InVal=6.f,OutVal=0.85),(InVal=12.f, OutVal=1.0),(InVal=24.f, OutVal=0.957))) //0.8 //0.87
|
||
|
|
||
|
//HumanRankZedHealthScaleCurve=(Points=((InVal=0.f,OutVal=0.75),(InVal=6.f,OutVal=0.90),(InVal=12.f, OutVal=1.0),(InVal=24.f, OutVal=1.45)))
|
||
|
//HumanRankZedDamageScaleCurve=(Points=((InVal=0.f,OutVal=0.75),(InVal=6.f,OutVal=0.85),(InVal=12.f, OutVal=1.0),(InVal=24.f, OutVal=1.1)))
|
||
|
|
||
|
CurrentSpawnRateModification=1.3 // Slow down all spawning in versus globally
|
||
|
}
|