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
}
