flak_m/zscript/armoritems.zsc
Marisa Kirisame a3449b5c5b This branch is a staging area for changes that will make it to devel once they are fully implemented.
Everything in here is highly unstable and may not work.
Current commit contains various new features for the HUD, some cleanup, and additional changes for compatibility with Doomreal as it is developed.
The diff is kinda fucky on the font restructure due to flaky rename detection.
2019-08-31 03:12:46 +02:00

193 lines
4.1 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 ( 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;
}
}