Class UnrealArmor : UTArmor { Default { -INVENTORY.ALWAYSPICKUP; } } Class UArmor : UnrealArmor { Default { Tag "$T_UARMOR"; Inventory.Amount 100; Inventory.MaxAmount 100; Inventory.InterHubAmount 100; UTArmor.ArmorAbsorption 90; UTArmor.AbsorptionPriority 7; Inventory.PickupMessage "$I_UARMOR"; Inventory.PickupSound "misc/u1armor"; Inventory.Icon "I_Armor"; } States { Spawn: UARM A -1; Stop; } } Class AsbestosSuit : UnrealArmor { Default { Tag "$T_ASBSUIT"; Inventory.Amount 50; Inventory.MaxAmount 50; Inventory.InterHubAmount 50; UTArmor.ArmorAbsorption 50; UTArmor.AbsorptionPriority 6; Inventory.PickupMessage "$I_ASBSUIT"; Inventory.PickupSound "misc/suit"; Inventory.Icon "I_Suit"; } override void ModifyDamage( int damage, Name damageType, out int newdamage, bool passive, Actor inflictor, Actor source, int flags ) { if ( passive && (Amount > 0) && ((damageType == 'Fire') || (damageType == 'Ice')) ) newdamage = 0; } override void AttachToOwner( Actor other ) { Super.AttachToOwner(other); if ( sting_allsuits ) return; // remove other suits Inventory i = other.FindInventory("ToxinSuit"); if ( i ) other.RemoveInventory(i); i = other.FindInventory("KevlarSuit"); if ( i ) other.RemoveInventory(i); } States { Spawn: ASBS A -1; Stop; } } Class ToxinSuit : UnrealArmor { Default { Tag "$T_TOXSUIT"; Inventory.Amount 50; Inventory.MaxAmount 50; Inventory.InterHubAmount 50; UTArmor.ArmorAbsorption 50; UTArmor.AbsorptionPriority 6; Inventory.PickupMessage "$I_TOXSUIT"; Inventory.PickupSound "misc/suit"; Inventory.Icon "I_TSuit"; } override void ModifyDamage( int damage, Name damageType, out int newdamage, bool passive, Actor inflictor, Actor source, int flags ) { if ( passive && (Amount > 0) && ((damageType == 'Slime') || (damageType == 'Poison')) ) newdamage = 0; } override void AttachToOwner( Actor other ) { Super.AttachToOwner(other); if ( sting_allsuits ) return; // remove other suits Inventory i = other.FindInventory("AsbestosSuit"); if ( i ) other.RemoveInventory(i); i = other.FindInventory("KevlarSuit"); if ( i ) other.RemoveInventory(i); } States { Spawn: TOXS A -1; Stop; } } Class KevlarSuit : UnrealArmor { Default { Tag "$T_KEVSUIT"; Inventory.Amount 100; Inventory.MaxAmount 100; Inventory.InterHubAmount 100; UTArmor.ArmorAbsorption 80; UTArmor.AbsorptionPriority 6; Inventory.PickupMessage "$I_KEVSUIT"; Inventory.PickupSound "misc/suit"; Inventory.Icon "I_Kevlar"; } override void AttachToOwner( Actor other ) { Super.AttachToOwner(other); if ( sting_allsuits ) return; // remove other suits Inventory i = other.FindInventory("AsbestosSuit"); if ( i ) other.RemoveInventory(i); i = other.FindInventory("ToxinSuit"); if ( i ) other.RemoveInventory(i); } States { Spawn: KEVS A -1; Stop; } } Class ShieldBelt : UnrealArmor { override void AbsorbDamage( int damage, Name damageType, out int newdamage ) { if ( (damage > 0) && (amount > 0) && !DamageTypeDefinition.IgnoreArmor(damageType) ) { Owner.A_StartSound("belt/absorb",CHAN_POWERUP4); UTMainHandler.DoFlash(Owner,Color(80,255,224,0),5); } Super.AbsorbDamage(damage,damageType,newdamage); } override void DepleteOrDestroy() { if ( (amount <= 0) && Owner.CheckLocalView() ) Console.Printf(StringTable.Localize("$D_SHIELDBELT")); Super.DepleteOrDestroy(); } Default { Tag "$T_SHIELDBELT"; +COUNTITEM; +INVENTORY.BIGPOWERUP; +INVENTORY.ALWAYSPICKUP; Inventory.Amount 100; Inventory.MaxAmount 100; Inventory.InterHubAmount 100; UTArmor.ArmorAbsorption 100; UTArmor.AbsorptionPriority 10; Inventory.PickupMessage "$I_SHIELDBELT"; Inventory.PickupSound "belt/pickup"; Inventory.RespawnTics 2100; Inventory.Icon "I_Shield"; } States { Spawn: BELT A -1; Stop; } } Class PowerShield : UnrealArmor { bool gothit; int draintimer; override void AbsorbDamage( int damage, Name damageType, out int newdamage ) { if ( (damage > 0) && (amount > 0) && !DamageTypeDefinition.IgnoreArmor(damageType) ) { Owner.A_StartSound("belt/absorb",CHAN_POWERUP4); UTMainHandler.DoFlash(Owner,Color(80,224,0,255),5); if ( !sting_pshield ) { gothit = true; damage = 0; newdamage = 0; } } if ( sting_pshield ) { Super.AbsorbDamage(damage,damageType,newdamage); return; } if ( damage > 0 ) newdamage = ApplyDamageFactors(GetClass(),damageType,damage,damage); } override void DepleteOrDestroy() { if ( (amount <= 0) && Owner.CheckLocalView() ) Console.Printf(StringTable.Localize("$D_POWERSHIELD")); Super.DepleteOrDestroy(); } override void Tick() { Super.Tick(); if ( sting_pshield && sting_pshield2 ) return; if ( !Owner || !Owner.player || (amount <= 0) ) return; if ( gothit ) { amount--; gothit = false; } draintimer++; if ( draintimer > 35 ) { amount--; draintimer = 0; } if ( amount <= 0 ) DepleteOrDestroy(); } Default { Tag "$T_POWERSHIELD"; +COUNTITEM; +INVENTORY.BIGPOWERUP; +INVENTORY.ALWAYSPICKUP; Inventory.Amount 200; Inventory.MaxAmount 200; Inventory.InterHubAmount 200; UTArmor.ArmorAbsorption 100; UTArmor.AbsorptionPriority 11; // wow dude Inventory.PickupMessage "$I_POWERSHIELD"; Inventory.PickupSound "sbelt/pickup"; Inventory.RespawnTics 3500; Inventory.Icon "I_PBelt"; } States { Spawn: BELT A -1; Stop; } } Class UArmorBonus : UArmor { override bool TryPickup( in out Actor toucher ) { if ( !sting_abonus ) return false; // not allowed return Super.TryPickup(toucher); } override void Tick() { Super.Tick(); if ( sting_abonus ) return; if ( !Owner ) { let r = Spawn("ArmorBonus",pos,ALLOW_REPLACE); r.spawnangle = spawnangle; r.spawnpoint = spawnpoint; r.angle = angle; r.pitch = pitch; r.roll = roll; r.special = special; r.args[0] = args[0]; r.args[1] = args[1]; r.args[2] = args[2]; r.args[3] = args[3]; r.args[4] = args[4]; r.ChangeTid(tid); r.SpawnFlags = SpawnFlags&~MTF_SECRET; r.HandleSpawnFlags(); r.SpawnFlags = SpawnFlags; r.bCountSecret = SpawnFlags&MTF_SECRET; r.vel = vel; r.master = master; r.target = target; r.tracer = tracer; r.bDropped = bDropped; Destroy(); } else { Owner.RemoveInventory(self); Destroy(); } } override void AbsorbDamage( int damage, Name damageType, out int newdamage ) { absorb = Clamp(Amount-50,25,100); Super.AbsorbDamage(damage,damageType,newdamage); } Default { Tag "$T_ARMORBONUS"; +COUNTITEM; +INVENTORY.ALWAYSPICKUP; Inventory.Amount 5; Inventory.MaxAmount 200; Inventory.InterHubAmount 200; UTArmor.ArmorAbsorption 25; UTArmor.AbsorptionPriority 1; Inventory.PickupMessage "$I_ARMORBONUS"; Inventory.PickupSound "misc/u1armor"; Inventory.Icon "I_Bonus"; } States { Spawn: XANH A -1; Stop; } }