rott/kf_sources/ScrnBalanceSrv/Classes/TSCHUD.uc
2026-07-14 20:27:09 +07:00

995 lines
42 KiB
Ucode

class TSCHUD extends ScrnHUD;
#exec OBJ LOAD FILE=TSC_T.utx
var Texture Boxes[2];
// 0 - red win
// 1 - blue win
// 2 - both survived
// 3 - wiped
var Material EndGameMaterials[4];
var Material WaveGB[4];
var TSCGameReplicationInfo TSCGRI;
var KFShopDirectionPointer BaseDirPointer, EnemyBaseDirPointer, EnemyShopDirPointer;
var localized string strBase;
var localized string strOurBase;
var localized string strGnome;
var localized string strCarrier;
var localized string strEnemyBase;
// TSC hints
var config bool bHideTSCHints;
var transient float CriticalHintBG;
var transient float LastCriticalHintTime;
var localized string titleWelcome;
var localized string titleSuddenDeath;
var localized string titleSetupBase;
var localized string titleBaseLost;
var localized string titlePvP;
var localized string titleStunned;
var localized string hintWelcome;
var localized string hintFirstWave;
var localized string hintPrepareToFight;
var localized string hintSuddenDeath;
var localized string hintSuddenDeathTrader;
var localized string hintGotoBase;
var localized string hintEnemyBase;
var localized string hintShopping;
var localized string hintFollowCarrier;
var localized string hintGetGnome;
var localized string hintSetupBase;
var localized string hintSetupEnemyBase;
var localized string hintBaseLostTrader;
var localized string hintPvP;
var localized string hintStunned;
var() SpriteWidget SpecKillsBG[2];
var() SpriteWidget SpecKillsIcon[2];
var() NumericWidget SpecKillsDigits[2];
var() SpriteWidget SpecWaveKillsBG[2];
var() NumericWidget SpecWaveKillsDigits[2];
var() SpriteWidget SpecMinKillsBG[2];
var() NumericWidget SpecMinKillsDigits[2];
var() SpriteWidget SpecDeathsBG[2];
var() SpriteWidget SpecDeathsIcon[2];
var() NumericWidget SpecDeathsDigits[2];
var() SpriteWidget SpecDoshBG[2];
var() SpriteWidget SpecDoshIcon[2];
var() NumericWidget SpecDoshDigits[2];
var material SpecBarBG;
var config float SpecBarY, SpecBarWidth, SpecBarHeight;
var protected transient int TeamDosh[2], TeamHealth[2];
var protected transient float RedTeamHealthRatio;
var protected transient float NextStatUpdateTime;
var bool bDrawShopDirPointer;
simulated function DestroyDirPointers()
{
if ( ShopDirPointer!=None )
ShopDirPointer.Destroy();
if ( EnemyShopDirPointer!=None )
EnemyShopDirPointer.Destroy();
if ( BaseDirPointer!=None )
BaseDirPointer.Destroy();
if ( EnemyBaseDirPointer!=None )
EnemyBaseDirPointer.Destroy();
}
simulated function Destroyed()
{
DestroyDirPointers();
super.Destroyed();
}
simulated function LinkActors()
{
super.LinkActors();
TSCGRI = TSCGameReplicationInfo(PlayerOwner.GameReplicationInfo);
}
simulated function UpdateHud()
{
TeamColors[0].A = KFHUDAlpha;
TeamColors[1].A = KFHUDAlpha;
TextColors[0].A = KFHUDAlpha;
TextColors[1].A = KFHUDAlpha;
if ( KFPRI != none && KFPRI.Team != none && KFPRI.Team.TeamIndex != TeamIndex )
UpdateTeamHud();
super.UpdateHud();
if ( TeamIndex == 1 ) {
// override hardcoded values in HUDKillingFloor.UpdateHud()
if ( HealthDigits.Tints[0].G <= 64 ) {
HealthDigits.Tints[0] = TeamColors[TeamIndex];
HealthDigits.Tints[1] = TeamColors[TeamIndex];
}
if ( SyringeDigits.Tints[0].R == 255 ) {
SyringeDigits.Tints[0] = TeamColors[TeamIndex];
SyringeDigits.Tints[1] = TeamColors[TeamIndex];
}
if ( QuickSyringeDigits.Tints[0].R == 255 ) {
QuickSyringeDigits.Tints[0] = TeamColors[TeamIndex];
QuickSyringeDigits.Tints[1] = TeamColors[TeamIndex];
}
if ( BulletsInClipDigits.Tints[0].R == 255 ) {
BulletsInClipDigits.Tints[0] = TeamColors[TeamIndex];
BulletsInClipDigits.Tints[1] = TeamColors[TeamIndex];
}
if ( ClipsDigits.Tints[0].R == 255 ) {
ClipsDigits.Tints[0] = TeamColors[TeamIndex];
ClipsDigits.Tints[1] = TeamColors[TeamIndex];
}
}
}
simulated function UpdateTeamHud()
{
TeamIndex = KFPRI.Team.TeamIndex;
HealthDigits.Tints[0] = TeamColors[TeamIndex];
HealthDigits.Tints[1] = TeamColors[TeamIndex];
ArmorDigits.Tints[0] = TeamColors[TeamIndex];
ArmorDigits.Tints[1] = TeamColors[TeamIndex];
WeightDigits.Tints[0] = TeamColors[TeamIndex];
WeightDigits.Tints[1] = TeamColors[TeamIndex];
GrenadeDigits.Tints[0] = TeamColors[TeamIndex];
GrenadeDigits.Tints[1] = TeamColors[TeamIndex];
ClipsDigits.Tints[0] = TeamColors[TeamIndex];
ClipsDigits.Tints[1] = TeamColors[TeamIndex];
SecondaryClipsDigits.Tints[0] = TeamColors[TeamIndex];
SecondaryClipsDigits.Tints[1] = TeamColors[TeamIndex];
BulletsInClipDigits.Tints[0] = TeamColors[TeamIndex];
BulletsInClipDigits.Tints[1] = TeamColors[TeamIndex];
FlashlightDigits.Tints[0] = TeamColors[TeamIndex];
FlashlightDigits.Tints[1] = TeamColors[TeamIndex];
WelderDigits.Tints[0] = TeamColors[TeamIndex];
WelderDigits.Tints[1] = TeamColors[TeamIndex];
SyringeDigits.Tints[0] = TeamColors[TeamIndex];
SyringeDigits.Tints[1] = TeamColors[TeamIndex];
MedicGunDigits.Tints[0] = TeamColors[TeamIndex];
MedicGunDigits.Tints[1] = TeamColors[TeamIndex];
QuickSyringeDigits.Tints[0] = TeamColors[TeamIndex];
QuickSyringeDigits.Tints[1] = TeamColors[TeamIndex];
CashDigits.Tints[0] = TeamColors[TeamIndex];
CashDigits.Tints[1] = TeamColors[TeamIndex];
HealthBG.WidgetTexture = Boxes[TeamIndex];
ArmorBG.WidgetTexture = Boxes[TeamIndex];
WeightBG.WidgetTexture = Boxes[TeamIndex];
GrenadeBG.WidgetTexture = Boxes[TeamIndex];
ClipsBG.WidgetTexture = Boxes[TeamIndex];
SecondaryClipsBG.WidgetTexture = Boxes[TeamIndex];
BulletsInClipBG.WidgetTexture = Boxes[TeamIndex];
FlashlightBG.WidgetTexture = Boxes[TeamIndex];
WelderBG.WidgetTexture = Boxes[TeamIndex];
SyringeBG.WidgetTexture = Boxes[TeamIndex];
MedicGunBG.WidgetTexture = Boxes[TeamIndex];
QuickSyringeBG.WidgetTexture = Boxes[TeamIndex];
DoorWelderBG = Boxes[TeamIndex];
// Cool HUD
CoolHudAmmoColor = TeamColors[TeamIndex];
CoolCashDigits.Tints[0] = TeamColors[TeamIndex];
CoolCashDigits.Tints[1] = TeamColors[TeamIndex];
CoolCashIcon.Tints[0] = TeamColors[TeamIndex];
CoolCashIcon.Tints[1] = TeamColors[TeamIndex];
if ( TeamIndex == 1 ) {
HealthIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Medical_Cross';
ArmorIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Shield';
WeightIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Weight';
GrenadeIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Grenade';
ClipsIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Ammo_Clip';
SecondaryClipsIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_M79';
BulletsInClipIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Bullets';
M79Icon.WidgetTexture=Texture'TSC_T.HUD.Hud_M79';
SingleNadeIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_M79';
PipeBombIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Pipebomb';
LawRocketIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Law_Rocket';
ArrowheadIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Arrowhead';
SingleBulletIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Single_Bullet';
FlameIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Flame';
FlameTankIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Flame_Tank';
HuskAmmoIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Flame';
SawAmmoIcon.WidgetTexture=Texture'TSC_T.HUD.Texture_Hud_Sawblade';
ZEDAmmoIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Lightning_Bolt';
FlashlightIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Flashlight';
FlashlightOffIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Flashlight_Off';
WelderIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Lightning_Bolt';
SyringeIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Syringe';
MedicGunIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Syringe';
QuickSyringeIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Syringe';
CashIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Pound_Symbol';
// Cool HUD
//CoolCashIcon.WidgetTexture=Texture'TSC_T.HUD.Hud_Pound_Symbol';
}
else {
HealthIcon.WidgetTexture = default.HealthIcon.WidgetTexture;
ArmorIcon.WidgetTexture = default.ArmorIcon.WidgetTexture;
WeightIcon.WidgetTexture = default.WeightIcon.WidgetTexture;
GrenadeIcon.WidgetTexture = default.GrenadeIcon.WidgetTexture;
ClipsIcon.WidgetTexture = default.ClipsIcon.WidgetTexture;
SecondaryClipsIcon.WidgetTexture = default.SecondaryClipsIcon.WidgetTexture;
BulletsInClipIcon.WidgetTexture = default.BulletsInClipIcon.WidgetTexture;
M79Icon.WidgetTexture = default.M79Icon.WidgetTexture;
SingleNadeIcon.WidgetTexture = default.SingleNadeIcon.WidgetTexture;
PipeBombIcon.WidgetTexture = default.PipeBombIcon.WidgetTexture;
LawRocketIcon.WidgetTexture = default.LawRocketIcon.WidgetTexture;
ArrowheadIcon.WidgetTexture = default.ArrowheadIcon.WidgetTexture;
SingleBulletIcon.WidgetTexture = default.SingleBulletIcon.WidgetTexture;
FlameIcon.WidgetTexture = default.FlameIcon.WidgetTexture;
FlameTankIcon.WidgetTexture = default.FlameTankIcon.WidgetTexture;
HuskAmmoIcon.WidgetTexture = default.HuskAmmoIcon.WidgetTexture;
SawAmmoIcon.WidgetTexture = default.SawAmmoIcon.WidgetTexture;
ZEDAmmoIcon.WidgetTexture = default.ZEDAmmoIcon.WidgetTexture;
FlashlightIcon.WidgetTexture = default.FlashlightIcon.WidgetTexture;
FlashlightOffIcon.WidgetTexture = default.FlashlightOffIcon.WidgetTexture;
WelderIcon.WidgetTexture = default.WelderIcon.WidgetTexture;
SyringeIcon.WidgetTexture = default.SyringeIcon.WidgetTexture;
MedicGunIcon.WidgetTexture = default.MedicGunIcon.WidgetTexture;
QuickSyringeIcon.WidgetTexture = default.QuickSyringeIcon.WidgetTexture;
CashIcon.WidgetTexture = default.CashIcon.WidgetTexture;
// Cool HUD
//CoolCashIcon.WidgetTexture=Texture'KillingFloorHUD.HUD.Hud_Pound_Symbol';
}
SetHUDAlpha();
}
simulated function DrawKFHUDTextElements(Canvas C)
{
local float XL, YL;
local int NumZombies, Min;
local string S;
local float CircleSize;
local float ResScale;
local ShopVolume shop;
if ( PlayerOwner == none || PlayerOwner.Player == none || PlayerOwner.Player.bShowWindowsMouse
|| KFGRI == none || !KFGRI.bMatchHasBegun )
{
return;
}
ResScale = C.SizeX / 1024.0;
CircleSize = FMin(128 * ResScale,128);
C.FontScaleX = FMin(ResScale,1.f);
C.FontScaleY = FMin(ResScale,1.f);
// Countdown Text
if( !KFGRI.bWaveInProgress || TSCGRI.WaveEndRule == 2 /*RULE_Timeout*/ )
{
C.SetDrawColor(255, 255, 255, 255);
C.SetPos(C.ClipX - CircleSize, 2);
C.DrawTile(WaveGB[TeamIndex], CircleSize, CircleSize, 0, 0, 256, 256);
Min = KFGRI.TimeToNextWave / 60;
NumZombies = KFGRI.TimeToNextWave - (Min * 60);
S = Eval((Min >= 10), string(Min), "0" $ Min) $ ":" $ Eval((NumZombies >= 10), string(NumZombies), "0" $ NumZombies);
C.Font = LoadFont(2);
C.Strlen(S, XL, YL);
C.DrawColor = TextColors[TeamIndex];
C.SetPos(C.ClipX - CircleSize/2 - (XL / 2), CircleSize/2 - YL / 2);
C.DrawText(S, False);
}
else
{
C.SetDrawColor(255, 255, 255, 255);
C.SetPos(C.ClipX - CircleSize, 2);
C.DrawTile(WaveGB[2+TeamIndex], CircleSize, CircleSize, 0, 0, 256, 256);
// TODO: Add support for ScrnGRI.WaveEndRule
S = string(KFGRI.MaxMonsters);
C.Font = LoadFont(1);
C.Strlen(S, XL, YL);
C.DrawColor = TextColors[TeamIndex];
C.SetPos(C.ClipX - CircleSize/2 - (XL / 2), CircleSize/2 - (YL / 1.5));
C.DrawText(S);
}
if ( KFGRI.bWaveInProgress ) {
// Show the number of waves
S = WaveString @ string(KFGRI.WaveNumber + 1) $ "/" $ string(KFGRI.FinalWave);
C.Font = LoadFont(5);
C.Strlen(S, XL, YL);
C.SetPos(C.ClipX - CircleSize/2 - (XL / 2), CircleSize/2 + (YL / 2.5));
C.DrawText(S);
}
C.FontScaleX = 1;
C.FontScaleY = 1;
if ( KFPRI == none || KFPRI.Team == none || KFPRI.bOnlySpectator || PawnOwner == none )
{
return;
}
// Draw the shop pointer
if ( bDrawShopDirPointer )
{
if ( ShopDirPointer == None )
{
ShopDirPointer = Spawn(Class'KFShopDirectionPointer');
//ShopDirPointer.bHidden = bHideHud;
}
// apply team color
if ( TSCGRI != none && TeamIndex == 1) {
shop = TSCGRI.BlueShop;
ShopDirPointer.UV2Texture = ConstantColor'TSC_T.HUD.BlueCol';
}
else {
shop = KFGRI.CurrentShop;
ShopDirPointer.UV2Texture = none;
}
if ( shop != none ) {
C.DrawColor = TextColors[TeamIndex];
DrawDirPointer(C, ShopDirPointer, shop.Location, 0, 0, false, strTrader);
}
else {
ShopDirPointer.bHidden = true;
}
}
if ( TSCGRI != none )
DrawTSCHUDTextElements(C);
}
simulated function DrawTSCHUDTextElements(Canvas C)
{
local TSCTeamBase TeamBase;
local bool bAtOwnBase, bAtEnemyBase;
local int FontSize;
local float XL, YL, BottomY;
local string aHint, aTitle;
local bool bCriticalHint;
local string s;
// enemy base
TeamBase = TSCTeamBase(KFGRI.Teams[1-TeamIndex].HomeBase);
if ( TeamBase != none && TeamBase.bActive ) {
bAtEnemyBase = TSCGRI.AtBase(PawnOwner.Location, TeamBase);
if ( EnemyBaseDirPointer == None ) {
EnemyBaseDirPointer = Spawn(Class'KFShopDirectionPointer');
}
// apply enemy team color
if ( TeamIndex == 0)
EnemyBaseDirPointer.UV2Texture = ConstantColor'TSC_T.HUD.BlueCol';
else
EnemyBaseDirPointer.UV2Texture = none;
if ( bAtEnemyBase )
C.SetDrawColor(196, 206, 0, KFHUDAlpha);
else
C.DrawColor = TextColors[1-TeamIndex];
DrawDirPointer(C, EnemyBaseDirPointer, TeamBase.Location, 2, 0, false, strEnemyBase);
}
// own base
TeamBase = TSCTeamBase(KFPRI.Team.HomeBase);
if ( TeamBase == none )
return; // just in case
if ( !TeamBase.bHidden && !(TeamBase.bHeld && TeamBase.HolderPRI == KFPRI) ) {
if ( BaseDirPointer == None ) {
BaseDirPointer = Spawn(Class'KFShopDirectionPointer');
BaseDirPointer.UV2Texture = ConstantColor'TSC_T.HUD.GreenCol';
}
bAtOwnBase = TSCGRI.AtBase(PawnOwner.Location, TeamBase);
if ( TeamBase.bActive ) {
s = strOurBase;
if ( bAtOwnBase)
C.SetDrawColor(32, 255, 32, KFHUDAlpha);
else
C.SetDrawColor(196, 206, 0, KFHUDAlpha);
}
else if ( TeamBase.bHeld ) {
s = strCarrier;
C.SetDrawColor(196, 206, 0, KFHUDAlpha);
}
else {
s = strGnome;
C.SetDrawColor(200, 0, 0, KFHUDAlpha); // dropped somewhere
}
DrawDirPointer(C, BaseDirPointer, TeamBase.GetLocation(), 1, 0, false, s);
}
// hints
if ( bHideTSCHints || KFGRI.EndGameType > 0 )
return;
if ( TSCGRI.ElapsedTime <= 10 ) {
aTitle = titleWelcome;
aHint = hintWelcome;
bCriticalHint = true;
}
else if ( TSCGRI.bWaveInProgress ) {
if ( TSCGRI.WaveNumber == 0 )
aHint = hintFirstWave;
else if ( bAtEnemyBase ) {
aHint = hintEnemyBase;
bCriticalHint = true;
}
else if ( TSCGRI.bSuddenDeath ) {
aHint = hintSuddenDeath;
aTitle = titleSuddenDeath;
}
else if ( TSCGRI.MaxMonsters >= 10 ) {
if ( !TeamBase.bActive && !TeamBase.bHidden ) {
aTitle = titleStunned;
aHint = hintStunned;
bCriticalHint = true;
}
else if ( !bAtOwnBase && TeamBase.bActive )
aHint = hintGotoBase;
else if ( TSCGRI.HumanDamageMode == 2 || TSCGRI.HumanDamageMode >= 4 ) {
aTitle = titlePvP;
aHint = hintPvP;
}
}
}
else {
if ( TSCGRI.bSuddenDeath ) {
aHint = hintSuddenDeathTrader;
aTitle = titleSuddenDeath;
bCriticalHint = true;
}
else if ( bAtEnemyBase ) {
if ( TeamBase.bHeld && TeamBase.HolderPRI == KFPRI )
aHint = hintSetupEnemyBase;
else
aHint = hintEnemyBase;
bCriticalHint = true;
}
else if ( TeamBase.bActive ) {
if ( TSCGRI.TimeToNextWave < 30 && !bAtOwnBase )
aHint = hintGotoBase;
else if ( TSCGRI.TimeToNextWave < 10 )
aHint = hintPrepareToFight;
else
aHint = hintShopping;
}
else if ( TeamBase.bHeld ) {
if ( TeamBase.HolderPRI == KFPRI ) {
aTitle = titleSetupBase;
aHint = hintSetupBase;
s = PlayerOwner.ConsoleCommand("BINDINGTOKEY SetupBase");
if ( s == "" )
s = PlayerOwner.ConsoleCommand("BINDINGTOKEY AltFire");
ReplaceText(aHint, "%KEY%", s);
}
else if ( TSCGRI.TimeToNextWave < 30 )
aHint = hintFollowCarrier; // enough shopping, time to get to the base
else
aHint = hintShopping; // others can do shopping while somebody sets up the base
}
else if ( TeamBase.bHome ) {
aTitle = titleBaseLost;
if ( TSCGRI.TimeToNextWave < 30 )
aHint = hintBaseLostTrader;
else
aHint = hintShopping;
}
else if ( TSCGRI.TeamCarrier[TeamIndex] == none || TSCGRI.TeamCarrier[TeamIndex] == KFPRI ) {
aTitle = titleSetupBase;
aHint = hintGetGnome;
}
else
aHint = hintShopping;
}
if ( C.ClipX <= 1024 )
FontSize = 7;
else if ( C.ClipX < 1400 )
FontSize = 6;
else
FontSize = 5;
BottomY = C.ClipY;
if ( aHint != "" ) {
C.Font = LoadFont(FontSize);
C.StrLen(aHint, XL, YL);
if ( bCoolHud && !bCoolHudLeftAlign ) {
C.SetPos((c.ClipX-XL)/2, 0); // top center
BottomY = YL;
}
else {
BottomY -= YL;
C.SetPos((c.ClipX-XL)/2, BottomY); // bottom center
}
if ( bCriticalHint ) {
CriticalHintBG -= fmax(1.0, (Level.TimeSeconds - LastCriticalHintTime) * 200.0);
LastCriticalHintTime = Level.TimeSeconds;
if ( CriticalHintBG < 32 )
CriticalHintBG = 232;
C.SetDrawColor(CriticalHintBG, CriticalHintBG, 0, 128);
}
else
C.SetDrawColor(32, 32, 32, 80);
C.DrawTileStretched(WhiteMaterial, XL, YL);
C.DrawColor = TextColors[TeamIndex];
C.DrawText(aHint);
}
if ( aTitle != "" ) {
C.Font = LoadFont(FontSize-1);
C.StrLen(aTitle, XL, YL);
if ( bCoolHud && !bCoolHudLeftAlign )
CowboyTileY = fmax(CowboyTileY, (BottomY + YL) / C.ClipY); // shift down cowboy mode to properly display hints
else
BottomY -= YL;
C.SetPos((c.ClipX-XL)/2, BottomY);
C.SetDrawColor(32, 32, 32, 80);
C.DrawTileStretched(WhiteMaterial, XL, YL);
C.DrawColor = TextColors[TeamIndex];
C.DrawText(aTitle);
}
}
simulated function DrawWeaponName(Canvas C)
{
local string CurWeaponName;
local float XL,YL;
if ( PawnOwner == None || bCoolHudActive )
return;
if ( PawnOwner.Weapon != none )
CurWeaponName = PawnOwner.Weapon.GetHumanReadableName();
else if ( PlayerOwner.Pawn != PawnOwner && ScrnHumanPawn(PawnOwner) != none
&& ScrnHumanPawn(PawnOwner).SpecWeapon != none )
CurWeaponName = ScrnHumanPawn(PawnOwner).SpecWeapon.default.ItemName;
if ( CurWeaponName == "" )
return;
C.Font = GetFontSizeIndex(C, -1);
C.DrawColor = TextColors[TeamIndex];
C.Strlen(CurWeaponName, XL, YL);
// Diet Hud needs to move the weapon name a little bit or it looks weird
if ( !bLightHud )
C.SetPos((C.ClipX * 0.983) - XL, C.ClipY * 0.90);
else
C.SetPos((C.ClipX * 0.97) - XL, C.ClipY * 0.915);
C.DrawText(CurWeaponName);
}
simulated function DrawEndGameHUD(Canvas C, bool bVictory)
{
local float Scalar;
local TeamInfo Team;
DestroyDirPointers();
C.DrawColor.A = 255;
C.DrawColor.R = 255;
C.DrawColor.G = 255;
C.DrawColor.B = 255;
Scalar = FClamp(C.ClipY, 320, 1024);
C.CurX = C.ClipX / 2 - Scalar / 2;
C.CurY = C.ClipY / 2 - Scalar / 2;
C.Style = ERenderStyle.STY_Alpha;
if ( bVictory )
{
Team = TeamInfo(KFGRI.Winner);
if ( Team != none && Team.TeamIndex < 2 )
MyColorMod.Material = EndGameMaterials[Team.TeamIndex];
else if ( !TSCGRI.bSingleTeamGame )
MyColorMod.Material = EndGameMaterials[2]; // both teams win
else
MyColorMod.Material = EndGameMaterials[1]; // in non-team game players are in blue team
}
else if ( TSCGRI.bSingleTeamGame )
MyColorMod.Material = Combiner'DefeatCombiner';
else
MyColorMod.Material = EndGameMaterials[3];
if ( EndGameHUDTime >= 1 )
MyColorMod.Color.A = 255;
else
MyColorMod.Color.A = EndGameHUDTime * 255.f;
C.DrawTile(MyColorMod, Scalar, Scalar, 0, 0, 1024, 1024);
if ( bShowScoreBoard && ScoreBoard != None )
{
ScoreBoard.DrawScoreboard(C);
}
//display end-game achievements
C.Reset();
DisplayLocalMessages(C);
}
simulated function CalsTeamStats()
{
local int i;
local KFPlayerReplicationInfo OtherPRI;
TeamDosh[0] = 0;
TeamDosh[1] = 0;
TeamHealth[0] = 0;
TeamHealth[1] = 0;
for ( i = 0; i < KFGRI.PRIArray.Length; i++) {
OtherPRI = KFPlayerReplicationInfo(KFGRI.PRIArray[i]);
if ( OtherPRI != none && OtherPRI.Team != none && OtherPRI.Team.TeamIndex < 2 ) {
TeamDosh[OtherPRI.Team.TeamIndex] += OtherPRI.Score;
TeamHealth[OtherPRI.Team.TeamIndex] += OtherPRI.PlayerHealth;
}
}
SpecKillsDigits[0].Value = TSCTeam(KFGRI.Teams[0]).ZedKills;
SpecKillsDigits[1].Value = TSCTeam(KFGRI.Teams[1]).ZedKills;
SpecDeathsDigits[0].Value = TSCTeam(KFGRI.Teams[0]).Deaths;
SpecDeathsDigits[1].Value = TSCTeam(KFGRI.Teams[1]).Deaths;
SpecDoshDigits[0].Value = TeamDosh[0] + KFGRI.Teams[0].Score;
SpecDoshDigits[1].Value = TeamDosh[1] + KFGRI.Teams[1].Score;
RedTeamHealthRatio = float(TeamHealth[0]) / (TeamHealth[0]+TeamHealth[1]);
// v2.00
SpecWaveKillsDigits[0].Value = max(TSCTeam(KFGRI.Teams[0]).ZedKills - TSCTeam(KFGRI.Teams[0]).WaveKills, 0);
SpecWaveKillsDigits[1].Value = max(TSCTeam(KFGRI.Teams[1]).ZedKills - TSCTeam(KFGRI.Teams[1]).WaveKills, 0);
SpecMinKillsDigits[0].Value = max(TSCTeam(KFGRI.Teams[0]).ZedKills - TSCTeam(KFGRI.Teams[0]).PrevMinKills, 0);
SpecMinKillsDigits[1].Value = max(TSCTeam(KFGRI.Teams[1]).ZedKills - TSCTeam(KFGRI.Teams[1]).PrevMinKills, 0);
if ( SpecMinKillsDigits[0].Value < 15 ) {
SpecWaveKillsDigits[0].Tints[0].R = 196;
SpecWaveKillsDigits[0].Tints[0].G = 206;
SpecWaveKillsDigits[0].Tints[0].B = 0;
}
else
SpecWaveKillsDigits[0].Tints[0] = default.SpecWaveKillsDigits[0].Tints[0];
if ( SpecMinKillsDigits[1].Value < 15 ) {
SpecWaveKillsDigits[1].Tints[0].R = 196;
SpecWaveKillsDigits[1].Tints[0].G = 206;
SpecWaveKillsDigits[1].Tints[0].B = 0;
}
else
SpecWaveKillsDigits[1].Tints[0] = default.SpecWaveKillsDigits[1].Tints[0];
SpecWaveKillsDigits[0].Tints[1] = SpecWaveKillsDigits[0].Tints[0];
SpecWaveKillsDigits[1].Tints[1] = SpecWaveKillsDigits[1].Tints[0];
SpecKillsBG[0].Tints[0].A = KFHUDAlpha;
SpecKillsBG[0].Tints[1].A = KFHUDAlpha;
SpecKillsIcon[0].Tints[0].A = KFHUDAlpha;
SpecKillsIcon[0].Tints[1].A = KFHUDAlpha;
SpecKillsDigits[0].Tints[0].A = KFHUDAlpha;
SpecKillsDigits[0].Tints[1].A = KFHUDAlpha;
SpecWaveKillsBG[0].Tints[0].A = KFHUDAlpha;
SpecWaveKillsBG[0].Tints[1].A = KFHUDAlpha;
SpecWaveKillsDigits[0].Tints[0].A = KFHUDAlpha;
SpecWaveKillsDigits[0].Tints[1].A = KFHUDAlpha;
SpecMinKillsBG[0].Tints[0].A = KFHUDAlpha;
SpecMinKillsBG[0].Tints[1].A = KFHUDAlpha;
SpecMinKillsDigits[0].Tints[0].A = KFHUDAlpha;
SpecMinKillsDigits[0].Tints[1].A = KFHUDAlpha;
SpecKillsBG[1].Tints[0].A = KFHUDAlpha;
SpecKillsBG[1].Tints[1].A = KFHUDAlpha;
SpecKillsIcon[1].Tints[0].A = KFHUDAlpha;
SpecKillsIcon[1].Tints[1].A = KFHUDAlpha;
SpecKillsDigits[1].Tints[0].A = KFHUDAlpha;
SpecKillsDigits[1].Tints[1].A = KFHUDAlpha;
SpecWaveKillsBG[1].Tints[0].A = KFHUDAlpha;
SpecWaveKillsBG[1].Tints[1].A = KFHUDAlpha;
SpecWaveKillsDigits[1].Tints[0].A = KFHUDAlpha;
SpecWaveKillsDigits[1].Tints[1].A = KFHUDAlpha;
SpecMinKillsBG[1].Tints[0].A = KFHUDAlpha;
SpecMinKillsBG[1].Tints[1].A = KFHUDAlpha;
SpecMinKillsDigits[1].Tints[0].A = KFHUDAlpha;
SpecMinKillsDigits[1].Tints[1].A = KFHUDAlpha;
SpecDeathsBG[0].Tints[0].A = KFHUDAlpha;
SpecDeathsBG[0].Tints[1].A = KFHUDAlpha;
SpecDeathsIcon[0].Tints[0].A = KFHUDAlpha;
SpecDeathsIcon[0].Tints[1].A = KFHUDAlpha;
SpecDeathsDigits[0].Tints[0].A = KFHUDAlpha;
SpecDeathsDigits[0].Tints[1].A = KFHUDAlpha;
SpecDeathsBG[1].Tints[0].A = KFHUDAlpha;
SpecDeathsBG[1].Tints[1].A = KFHUDAlpha;
SpecDeathsIcon[1].Tints[0].A = KFHUDAlpha;
SpecDeathsIcon[1].Tints[1].A = KFHUDAlpha;
SpecDeathsDigits[1].Tints[0].A = KFHUDAlpha;
SpecDeathsDigits[1].Tints[1].A = KFHUDAlpha;
SpecDoshBG[0].Tints[0].A = KFHUDAlpha;
SpecDoshBG[0].Tints[1].A = KFHUDAlpha;
SpecDoshIcon[0].Tints[0].A = KFHUDAlpha;
SpecDoshIcon[0].Tints[1].A = KFHUDAlpha;
SpecDoshDigits[0].Tints[0].A = KFHUDAlpha;
SpecDoshDigits[0].Tints[1].A = KFHUDAlpha;
SpecDoshBG[1].Tints[0].A = KFHUDAlpha;
SpecDoshBG[1].Tints[1].A = KFHUDAlpha;
SpecDoshIcon[1].Tints[0].A = KFHUDAlpha;
SpecDoshIcon[1].Tints[1].A = KFHUDAlpha;
SpecDoshDigits[1].Tints[0].A = KFHUDAlpha;
SpecDoshDigits[1].Tints[1].A = KFHUDAlpha;
}
simulated function DrawSpecialSpectatingHUD(Canvas C)
{
local float x, w;
local string s;
local TSCTeamBase TeamBase;
if ( KFGRI == none || !KFGRI.bMatchHasBegun)
return;
bDrawSpecDeaths = false;
super.DrawSpecialSpectatingHUD(C);
// player stats
if ( Level.TimeSeconds > NextStatUpdateTime ) {
NextStatUpdateTime = Level.TimeSeconds + 0.5;
CalsTeamStats();
}
if ( !bLightHud ) {
DrawSpriteWidget(C, SpecKillsBG[0]);
DrawSpriteWidget(C, SpecWaveKillsBG[0]);
//DrawSpriteWidget(C, SpecMinKillsBG[0]);
DrawSpriteWidget(C, SpecDeathsBG[0]);
DrawSpriteWidget(C, SpecDoshBG[0]);
DrawSpriteWidget(C, SpecKillsBG[1]);
DrawSpriteWidget(C, SpecWaveKillsBG[1]);
//DrawSpriteWidget(C, SpecMinKillsBG[1]);
DrawSpriteWidget(C, SpecDeathsBG[1]);
DrawSpriteWidget(C, SpecDoshBG[1]);
}
DrawSpriteWidget(C, SpecDoshIcon[0]);
DrawNumericWidget(C, SpecDoshDigits[0], DigitsSmall);
DrawSpriteWidget(C, SpecDeathsIcon[0]);
DrawNumericWidget(C, SpecDeathsDigits[0], DigitsSmall);
DrawSpriteWidget(C, SpecKillsIcon[0]);
DrawNumericWidget(C, SpecKillsDigits[0], DigitsSmall);
DrawNumericWidget(C, SpecWaveKillsDigits[0], DigitsSmall);
//DrawNumericWidget(C, SpecMinKillsDigits[0], DigitsSmall);
DrawSpriteWidget(C, SpecDoshIcon[1]);
DrawNumericWidget(C, SpecDoshDigits[1], DigitsSmall);
DrawSpriteWidget(C, SpecDeathsIcon[1]);
DrawNumericWidget(C, SpecDeathsDigits[1], DigitsSmall);
DrawSpriteWidget(C, SpecKillsIcon[1]);
DrawNumericWidget(C, SpecKillsDigits[1], DigitsSmall);
DrawNumericWidget(C, SpecWaveKillsDigits[1], DigitsSmall);
//DrawNumericWidget(C, SpecMinKillsDigits[1], DigitsSmall);
C.DrawColor = WhiteColor;
C.DrawColor.A = KFHUDAlpha;
// manpower
if ( TeamHealth[0]+TeamHealth[1] > 0 ) {
w = SpecBarWidth * fclamp(RedTeamHealthRatio, 0.025, 0.975);
x = (1.0 - SpecBarWidth) * 0.5;
C.SetPos(C.ClipX * x, C.ClipY * SpecBarY);
C.DrawTileStretched(texture'TSC_T.SpecHUD.BarFill_Red', C.ClipX * w, C.ClipY*SpecBarHeight);
C.SetPos(C.ClipX * (x + w), C.ClipY * SpecBarY);
w = SpecBarWidth - w;
C.DrawTileStretched(texture'TSC_T.SpecHUD.BarFill_Blue', C.ClipX*w + 1, C.ClipY*SpecBarHeight);
C.SetPos(C.ClipX * x, C.ClipY * SpecBarY);
C.DrawTileStretched(SpecBarBG, C.ClipX*SpecBarWidth, C.ClipY*SpecBarHeight);
}
// ARROWS
if ( TSCGRI == none || KFGRI.ElapsedTime < 15 )
return;
// Red Base
TeamBase = TSCTeamBase(TSCGRI.Teams[0].HomeBase);
if ( TeamBase != none && !TeamBase.bHidden ) {
if ( BaseDirPointer == None )
BaseDirPointer = Spawn(Class'KFShopDirectionPointer');
BaseDirPointer.UV2Texture = none;
if ( TeamBase.bActive ) {
s = strBase;
C.DrawColor = TextColors[0];
C.DrawColor.A = KFHUDAlpha;
}
else if ( TeamBase.bHeld ) {
s = strCarrier;
C.SetDrawColor(196, 206, 0, KFHUDAlpha);
}
else {
s = strGnome;
C.SetDrawColor(196, 206, 0, KFHUDAlpha);
}
DrawDirPointer(C, BaseDirPointer, TeamBase.GetLocation(), 0, 0, false, s, false);
}
else {
if ( BaseDirPointer != none )
BaseDirPointer.bHidden = true;
}
// Blue Base
TeamBase = TSCTeamBase(TSCGRI.Teams[1].HomeBase);
if ( TeamBase != none && !TeamBase.bHidden ) {
if ( EnemyBaseDirPointer == None )
EnemyBaseDirPointer = Spawn(Class'KFShopDirectionPointer');
EnemyBaseDirPointer.UV2Texture = ConstantColor'TSC_T.HUD.BlueCol';
if ( TeamBase.bActive ) {
s = strBase;
C.DrawColor = TextColors[1];
C.DrawColor.A = KFHUDAlpha;
}
else if ( TeamBase.bHeld ) {
s = strCarrier;
C.SetDrawColor(196, 206, 0, KFHUDAlpha);
}
else {
s = strGnome;
C.SetDrawColor(196, 206, 0, KFHUDAlpha);
}
DrawDirPointer(C, EnemyBaseDirPointer, TeamBase.GetLocation(), 0, 0, false, s, true);
}
else {
if ( EnemyBaseDirPointer != none )
EnemyBaseDirPointer.bHidden = true;
}
// trader arrows should be show only during trader time to prevent exploits, when stream viewers
// tell players location of the next enemy trader
if ( TSCGRI.bWaveInProgress ) {
if ( ShopDirPointer != none )
ShopDirPointer.bHidden = true;
if ( EnemyShopDirPointer != none )
EnemyShopDirPointer.bHidden = true;
}
else {
// red shop
if ( ShopDirPointer == None )
ShopDirPointer = Spawn(Class'KFShopDirectionPointer');
ShopDirPointer.UV2Texture = none;
C.DrawColor = TextColors[0];
DrawDirPointer(C, ShopDirPointer, TSCGRI.CurrentShop.Location, 0, 1, false, strTrader, false);
// blue shop
if ( EnemyShopDirPointer == None )
EnemyShopDirPointer = Spawn(Class'KFShopDirectionPointer');
EnemyShopDirPointer.UV2Texture = ConstantColor'TSC_T.HUD.BlueCol';
C.DrawColor = TextColors[1];
DrawDirPointer(C, EnemyShopDirPointer, TSCGRI.BlueShop.Location, 0, 1, false, strTrader, true);
}
}
exec function SpecHPBarY(float value)
{
SpecBarY = value;
SaveConfig();
}
exec function SpecHPBarW(float value)
{
if ( value < 0 || value > 1) {
PlayerOwner.ClientMessage("Value must be between 0 and 1, where 1 - full screen, 0.5 - half screen etc.");
return;
}
SpecBarWidth = value;
SaveConfig();
}
exec function SpecHPBarH(float value)
{
if ( value < 0 || value > 1) {
PlayerOwner.ClientMessage("Value must be between 0 and 1, where 1 - full screen, 0.5 - half screen etc.");
return;
}
SpecBarHeight = value;
SaveConfig();
}
defaultproperties
{
Boxes(0)=Texture'KillingFloorHUD.HUD.Hud_Box_128x64'
Boxes(1)=Texture'TSC_T.HUD.Hud_Box_128x64'
EndGameMaterials(0)=Texture'TSC_T.End.RedWin'
EndGameMaterials(1)=Texture'TSC_T.End.BlueWin'
EndGameMaterials(2)=Texture'TSC_T.End.Win'
EndGameMaterials(3)=Shader'TSC_T.End.WipedShader'
WaveGB(0)=Texture'KillingFloorHUD.HUD.Hud_Bio_Clock_Circle'
WaveGB(1)=Texture'TSC_T.HUD.Hud_Bio_Clock_Circle'
WaveGB(2)=Texture'KillingFloorHUD.HUD.Hud_Bio_Circle'
WaveGB(3)=Texture'TSC_T.HUD.Hud_Bio_Circle'
strBase="Base: "
strOurBase="Our Base: "
strGnome="Guardian: "
strCarrier="Carrier: "
strEnemyBase="Enemy Base: "
titleWelcome="TEAM SURVIVAL COMPETITION"
titleSuddenDeath="SUDDEN DEATH"
titleSetupBase="SET UP BASE"
titleBaseLost="BASE LOST"
titlePvP="PLAYER-VS-PLAYER"
titleStunned="GUARDIAN STUNNED"
hintWelcome=" Welcome to TSC! Watch this place for useful hints. "
hintFirstWave="You cannot hurt other players during first wave. So focus on zeds!"
hintPrepareToFight="Get ready for ZED invasion!"
hintSuddenDeath="A single death wipes your squad"
hintSuddenDeathTrader="Nobody of your team can die, or you will get wiped"
hintGotoBase="Get to your Base for protection from Friendly Fire"
hintEnemyBase="Get out from Enemy Base before the Gnome kills you!"
hintShopping="You can buy weapons and stuff from the Trader"
hintFollowCarrier="Follow your Gnome Carrier to the new Base"
hintGetGnome="Take the Gnome from your trader to set up a Base"
hintSetupBase="Get to the place where you want to set up a base and press %KEY%"
hintSetupEnemyBase="Can not use Gnome on the Enemy Base!"
hintBaseLostTrader="You left your Gnome alone for too long, and he went away. Now you'll have to survive a wave without a Base"
hintPvP="Enemy team can hurt you even at your Base!"
hintStunned="Base Guardian is stunned and cannot protect you from Human Damage"
SpecKillsBG(0)=(WidgetTexture=Texture'KillingFloorHUD.HUD.Hud_Box_256x64',RenderStyle=STY_Alpha,TextureCoords=(X2=256,Y2=64),TextureScale=0.350000,PosX=-0.040000,PosY=0.935000,ScaleMode=SM_Right,Scale=1.000000,Tints[0]=(B=255,G=255,R=255,A=128),Tints[1]=(B=255,G=255,R=255,A=128))
SpecKillsBG(1)=(WidgetTexture=Texture'TSC_T.HUD.Hud_Box_256x64',RenderStyle=STY_Alpha,TextureCoords=(X2=256,Y2=64),TextureScale=0.350000,PosX=0.895000,PosY=0.935000,ScaleMode=SM_Right,Scale=1.000000,Tints[0]=(B=255,G=255,R=255,A=128),Tints[1]=(B=255,G=255,R=255,A=128))
SpecKillsIcon(0)=(WidgetTexture=Texture'TSC_T.SpecHUD.ClotEmoRed',RenderStyle=STY_Alpha,TextureCoords=(X2=64,Y2=64),TextureScale=0.160000,PosX=0.001000,PosY=0.947000,ScaleMode=SM_Right,Scale=1.000000,Tints[0]=(B=255,G=255,R=255,A=255),Tints[1]=(B=255,G=255,R=255,A=255))
SpecKillsIcon(1)=(WidgetTexture=Texture'TSC_T.SpecHUD.ClotEmoBlue',RenderStyle=STY_Alpha,TextureCoords=(X2=64,Y2=64),TextureScale=0.160000,PosX=0.901000,PosY=0.947000,ScaleMode=SM_Right,Scale=1.000000,Tints[0]=(B=255,G=255,R=255,A=255),Tints[1]=(B=255,G=255,R=255,A=255))
SpecKillsDigits(0)=(RenderStyle=STY_Alpha,TextureScale=0.300000,PosX=0.022500,PosY=0.950000,Tints[0]=(B=64,G=64,R=255,A=255),Tints[1]=(B=64,G=64,R=255,A=255))
SpecKillsDigits(1)=(RenderStyle=STY_Alpha,TextureScale=0.300000,PosX=0.922500,PosY=0.950000,Tints[0]=(B=198,G=153,R=90,A=255),Tints[1]=(B=198,G=153,R=90,A=255))
SpecWaveKillsBG(0)=(WidgetTexture=Texture'KillingFloorHUD.HUD.Hud_Box_128x64',RenderStyle=STY_Alpha,TextureCoords=(X1=32,X2=128,Y2=64),TextureScale=0.350000,PosX=0.100000,PosY=0.935000,ScaleMode=SM_Right,Scale=1.000000,Tints[0]=(B=255,G=255,R=255,A=128),Tints[1]=(B=255,G=255,R=255,A=128))
SpecWaveKillsBG(1)=(WidgetTexture=Texture'TSC_T.HUD.Hud_Box_128x64',RenderStyle=STY_Alpha,TextureCoords=(X2=96,Y2=64),TextureScale=0.350000,PosX=0.842000,PosY=0.935000,ScaleMode=SM_Right,Scale=1.000000,Tints[0]=(B=255,G=255,R=255,A=128),Tints[1]=(B=255,G=255,R=255,A=128))
SpecWaveKillsDigits(0)=(RenderStyle=STY_Alpha,TextureScale=0.300000,PosX=0.105000,PosY=0.950000,Tints[0]=(B=64,G=64,R=255,A=255),Tints[1]=(B=64,G=64,R=255,A=255))
SpecWaveKillsDigits(1)=(RenderStyle=STY_Alpha,TextureScale=0.300000,PosX=0.849000,PosY=0.950000,Tints[0]=(B=198,G=153,R=90,A=255),Tints[1]=(B=198,G=153,R=90,A=255))
SpecMinKillsBG(0)=(WidgetTexture=Texture'KillingFloorHUD.HUD.Hud_Box_128x64',RenderStyle=STY_Alpha,TextureCoords=(X1=32,X2=128,Y2=64),TextureScale=0.350000,PosX=0.152500,PosY=0.935000,ScaleMode=SM_Right,Scale=1.000000,Tints[0]=(B=255,G=255,R=255,A=128),Tints[1]=(B=255,G=255,R=255,A=128))
SpecMinKillsBG(1)=(WidgetTexture=Texture'TSC_T.HUD.Hud_Box_128x64',RenderStyle=STY_Alpha,TextureCoords=(X2=96,Y2=64),TextureScale=0.350000,PosX=0.789000,PosY=0.935000,ScaleMode=SM_Right,Scale=1.000000,Tints[0]=(B=255,G=255,R=255,A=128),Tints[1]=(B=255,G=255,R=255,A=128))
SpecMinKillsDigits(0)=(RenderStyle=STY_Alpha,TextureScale=0.300000,PosX=0.158000,PosY=0.950000,Tints[0]=(B=64,G=64,R=255,A=255),Tints[1]=(B=64,G=64,R=255,A=255))
SpecMinKillsDigits(1)=(RenderStyle=STY_Alpha,TextureScale=0.300000,PosX=0.796000,PosY=0.950000,Tints[0]=(B=198,G=153,R=90,A=255),Tints[1]=(B=198,G=153,R=90,A=255))
SpecDeathsBG(0)=(WidgetTexture=Texture'KillingFloorHUD.HUD.Hud_Box_256x64',RenderStyle=STY_Alpha,TextureCoords=(X2=256,Y2=64),TextureScale=0.350000,PosX=-0.040000,PosY=0.885000,ScaleMode=SM_Right,Scale=1.000000,Tints[0]=(B=255,G=255,R=255,A=128),Tints[1]=(B=255,G=255,R=255,A=128))
SpecDeathsBG(1)=(WidgetTexture=Texture'TSC_T.HUD.Hud_Box_256x64',RenderStyle=STY_Alpha,TextureCoords=(X2=256,Y2=64),TextureScale=0.350000,PosX=0.895000,PosY=0.885000,ScaleMode=SM_Right,Scale=1.000000,Tints[0]=(B=255,G=255,R=255,A=128),Tints[1]=(B=255,G=255,R=255,A=128))
SpecDeathsIcon(0)=(WidgetTexture=Texture'TSC_T.SpecHUD.Skull64',RenderStyle=STY_Alpha,TextureCoords=(X2=64,Y2=64),TextureScale=0.160000,PosX=0.001000,PosY=0.897000,ScaleMode=SM_Right,Scale=1.000000,Tints[0]=(B=64,G=64,R=200,A=255),Tints[1]=(B=64,G=64,R=200,A=255))
SpecDeathsIcon(1)=(WidgetTexture=Texture'TSC_T.SpecHUD.Skull64',RenderStyle=STY_Alpha,TextureCoords=(X2=64,Y2=64),TextureScale=0.160000,PosX=0.901000,PosY=0.897000,ScaleMode=SM_Right,Scale=1.000000,Tints[0]=(B=198,G=153,R=90,A=255),Tints[1]=(B=198,G=153,R=90,A=255))
SpecDeathsDigits(0)=(RenderStyle=STY_Alpha,TextureScale=0.300000,PosX=0.022500,PosY=0.900000,Tints[0]=(B=64,G=64,R=255,A=255),Tints[1]=(B=64,G=64,R=255,A=255))
SpecDeathsDigits(1)=(RenderStyle=STY_Alpha,TextureScale=0.300000,PosX=0.922500,PosY=0.900000,Tints[0]=(B=198,G=153,R=90,A=255),Tints[1]=(B=198,G=153,R=90,A=255))
SpecDoshBG(0)=(WidgetTexture=Texture'KillingFloorHUD.HUD.Hud_Box_256x64',RenderStyle=STY_Alpha,TextureCoords=(X2=256,Y2=64),TextureScale=0.350000,PosX=-0.040000,PosY=0.835000,ScaleMode=SM_Right,Scale=1.000000,Tints[0]=(B=255,G=255,R=255,A=128),Tints[1]=(B=255,G=255,R=255,A=128))
SpecDoshBG(1)=(WidgetTexture=Texture'TSC_T.HUD.Hud_Box_256x64',RenderStyle=STY_Alpha,TextureCoords=(X2=256,Y2=64),TextureScale=0.350000,PosX=0.895000,PosY=0.835000,ScaleMode=SM_Right,Scale=1.000000,Tints[0]=(B=255,G=255,R=255,A=128),Tints[1]=(B=255,G=255,R=255,A=128))
SpecDoshIcon(0)=(WidgetTexture=Texture'KillingFloorHUD.HUD.Hud_Pound_Symbol',RenderStyle=STY_Alpha,TextureCoords=(X2=64,Y2=64),TextureScale=0.160000,PosX=0.001000,PosY=0.847000,ScaleMode=SM_Right,Scale=1.000000,Tints[0]=(B=255,G=255,R=255,A=255),Tints[1]=(B=255,G=255,R=255,A=255))
SpecDoshIcon(1)=(WidgetTexture=Texture'TSC_T.HUD.Hud_Pound_Symbol',RenderStyle=STY_Alpha,TextureCoords=(X2=64,Y2=64),TextureScale=0.160000,PosX=0.901000,PosY=0.847000,ScaleMode=SM_Right,Scale=1.000000,Tints[0]=(B=255,G=255,R=255,A=255),Tints[1]=(B=255,G=255,R=255,A=255))
SpecDoshDigits(0)=(RenderStyle=STY_Alpha,TextureScale=0.300000,PosX=0.022500,PosY=0.850000,Tints[0]=(B=64,G=64,R=255,A=255),Tints[1]=(B=64,G=64,R=255,A=255))
SpecDoshDigits(1)=(RenderStyle=STY_Alpha,TextureScale=0.300000,PosX=0.922500,PosY=0.850000,Tints[0]=(B=198,G=153,R=90,A=255),Tints[1]=(B=198,G=153,R=90,A=255))
SpecBarBG=Texture'TSC_T.SpecHUD.Battery_BG'
SpecBarY=0.080000
SpecBarWidth=0.400000
SpecBarHeight=0.040000
bDrawShopDirPointer=True
bCoolHud=False
bCoolHudTeamColor=True
bDrawSpecDeaths=False
}