Shock Rifle and Pulsegun beams can also do this now. Depleted armors remove themselves from inventory.
194 lines
4.2 KiB
Text
194 lines
4.2 KiB
Text
Class UTArmor : Armor
|
|
{
|
|
int absorb;
|
|
|
|
Property ArmorAbsorption : absorb;
|
|
|
|
Default
|
|
{
|
|
+INVENTORY.AUTOACTIVATE;
|
|
+INVENTORY.UNTOSSABLE;
|
|
-INVENTORY.KEEPDEPLETED;
|
|
+INVENTORY.ALWAYSPICKUP;
|
|
}
|
|
override void AbsorbDamage( int damage, Name damageType, out int newdamage )
|
|
{
|
|
int saved;
|
|
if ( (amount > 0) && !DamageTypeDefinition.IgnoreArmor(damageType) )
|
|
{
|
|
saved = int(damage*absorb/100.);
|
|
if ( amount <= saved ) saved = amount;
|
|
newdamage -= saved;
|
|
amount -= saved;
|
|
damage = newdamage;
|
|
if ( (amount <= 0) ) DepleteOrDestroy();
|
|
}
|
|
if ( damage > 0 ) newdamage = ApplyDamageFactors(GetClass(),damageType,damage,damage);
|
|
}
|
|
}
|
|
|
|
Class UTArmorBonus : UTArmor
|
|
{
|
|
override void AbsorbDamage( int damage, Name damageType, out int newdamage )
|
|
{
|
|
absorb = Clamp(amount*2,25,75);
|
|
Super.AbsorbDamage(damage,damageType,newdamage);
|
|
}
|
|
|
|
Default
|
|
{
|
|
Tag "$T_ARMORBONUS";
|
|
+COUNTITEM;
|
|
Inventory.Amount 1;
|
|
Inventory.MaxAmount 50;
|
|
Inventory.InterHubAmount 50;
|
|
UTArmor.ArmorAbsorption 25;
|
|
Inventory.PickupMessage "$I_ARMORBONUS";
|
|
Inventory.PickupSound "misc/ut_shard";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
XANH A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
Class UTThighPads : UTArmor
|
|
{
|
|
override bool HandlePickup( Inventory item )
|
|
{
|
|
if ( item is 'UTThighPads' )
|
|
{
|
|
let s = Owner.FindInventory("UTShieldBelt");
|
|
if ( s )
|
|
{
|
|
// sum up current amounts
|
|
let a = Owner.FindInventory("UTBodyArmor");
|
|
int samount = s.amount;
|
|
if ( a ) samount += a.amount;
|
|
if ( amount < item.amount ) amount = item.amount;
|
|
amount = min(s.maxamount-samount,amount);
|
|
item.bPickupGood = true;
|
|
return true;
|
|
}
|
|
}
|
|
return Super.HandlePickup(item);
|
|
}
|
|
Default
|
|
{
|
|
Tag "$T_THIGHPADS";
|
|
Inventory.Amount 50;
|
|
Inventory.MaxAmount 50;
|
|
Inventory.InterHubAmount 50;
|
|
UTArmor.ArmorAbsorption 50;
|
|
Inventory.PickupMessage "$I_THIGHPADS";
|
|
Inventory.PickupSound "misc/ut_armor";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
THIG A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
Class UTBodyArmor : UTArmor
|
|
{
|
|
override bool HandlePickup( Inventory item )
|
|
{
|
|
if ( item is 'UTBodyArmor' )
|
|
{
|
|
let s = Owner.FindInventory("UTShieldBelt");
|
|
if ( s )
|
|
{
|
|
// sum up current amounts
|
|
let p = Owner.FindInventory("UTThighPads");
|
|
int samount = s.amount;
|
|
if ( p ) samount += p.amount;
|
|
if ( amount < item.amount ) amount = item.amount;
|
|
amount = min(s.maxamount-samount,amount);
|
|
item.bPickupGood = true;
|
|
return true;
|
|
}
|
|
}
|
|
return Super.HandlePickup(item);
|
|
}
|
|
Default
|
|
{
|
|
Tag "$T_BODYARMOR";
|
|
Inventory.Amount 100;
|
|
Inventory.MaxAmount 100;
|
|
Inventory.InterHubAmount 100;
|
|
UTArmor.ArmorAbsorption 75;
|
|
Inventory.PickupMessage "$I_BODYARMOR";
|
|
Inventory.PickupSound "misc/ut_armor";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
UARM A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
Class UTShieldBelt : UTArmor
|
|
{
|
|
override void AbsorbDamage( int damage, Name damageType, out int newdamage )
|
|
{
|
|
if ( (amount > 0) && !DamageTypeDefinition.IgnoreArmor(damageType) )
|
|
{
|
|
Owner.A_PlaySound("belt/absorb",CHAN_7);
|
|
UTMainHandler.DoFlash(Owner,Color(80,255,224,0),5);
|
|
}
|
|
int oldamt = amount;
|
|
Super.AbsorbDamage(damage,damageType,newdamage);
|
|
if ( (oldamt > 0) && (amount <= 0) && Owner.CheckLocalView() ) Console.Printf(StringTable.Localize("$D_SHIELDBELT"));
|
|
}
|
|
override bool HandlePickup( Inventory item )
|
|
{
|
|
if ( (item is 'UTBodyArmor') || (item is 'UTThighPads') )
|
|
{
|
|
// sum up current amounts
|
|
let a = Owner.FindInventory("UTBodyArmor");
|
|
let p = Owner.FindInventory("UTThighPads");
|
|
int samount = amount;
|
|
if ( a ) samount += a.amount;
|
|
if ( p ) samount += p.amount;
|
|
item.amount = min(item.amount,maxamount-samount);
|
|
if ( item.amount <= 0 )
|
|
{
|
|
item.amount = 1;
|
|
amount -= 1;
|
|
}
|
|
}
|
|
if ( item is 'UTShieldBelt' ) Use(true);
|
|
return Super.HandlePickup(item);
|
|
}
|
|
override bool Use( bool pickup )
|
|
{
|
|
// removes thigh pads and body armor like in UT
|
|
Owner.TakeInventory("UTThighPads",50);
|
|
Owner.TakeInventory("UTBodyArmor",150);
|
|
return false;
|
|
}
|
|
Default
|
|
{
|
|
Tag "$T_SHIELDBELT";
|
|
+COUNTITEM;
|
|
+INVENTORY.BIGPOWERUP;
|
|
Inventory.Amount 150;
|
|
Inventory.MaxAmount 150;
|
|
Inventory.InterHubAmount 150;
|
|
UTArmor.ArmorAbsorption 100;
|
|
Inventory.PickupMessage "$I_SHIELDBELT";
|
|
Inventory.PickupSound "belt/pickup";
|
|
Inventory.RespawnTics 2100;
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
BELT A -1;
|
|
Stop;
|
|
}
|
|
}
|