Split player and utility code.
This commit is contained in:
parent
1fe50b5c32
commit
44f39d1024
26 changed files with 6908 additions and 6619 deletions
132
zscript/player/swwm_player_items.zsc
Normal file
132
zscript/player/swwm_player_items.zsc
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
// player-specific item stuff
|
||||
|
||||
// tokens for custom maps
|
||||
Class SWWMStoreDisabler : Inventory
|
||||
{
|
||||
Default
|
||||
{
|
||||
+INVENTORY.UNCLEARABLE;
|
||||
+INVENTORY.UNDROPPABLE;
|
||||
+INVENTORY.UNTOSSABLE;
|
||||
}
|
||||
}
|
||||
Class SWWMReviveDisabler : Inventory
|
||||
{
|
||||
Default
|
||||
{
|
||||
+INVENTORY.UNCLEARABLE;
|
||||
+INVENTORY.UNDROPPABLE;
|
||||
+INVENTORY.UNTOSSABLE;
|
||||
}
|
||||
}
|
||||
|
||||
// lucky collar
|
||||
// made by Ashley Knox, given to you and Ibuki by Saya
|
||||
Class SayaCollar : SWWMArmor
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 1;
|
||||
Inventory.InterHubAmount 1;
|
||||
SWWMArmor.ArmorPriority 1;
|
||||
+INVENTORY.UNCLEARABLE;
|
||||
// SWWMArmor flags are not needed as this overrides AbsorbDamage directly
|
||||
}
|
||||
override void AbsorbDamage( int damage, Name damageType, out int newdamage, Actor inflictor, Actor source, int flags )
|
||||
{
|
||||
if ( (damage <= 0) || (flags&(DMG_FORCED|DMG_NO_ARMOR)) ) return;
|
||||
newdamage = damage;
|
||||
// oopsies are halved
|
||||
if ( source == Owner ) newdamage = max(1,newdamage/2);
|
||||
// in danger? reduce to a quarter
|
||||
if ( (Owner.Health-newdamage < 25) )
|
||||
{
|
||||
int splitdmg[2];
|
||||
splitdmg[0] = max(0,Owner.Health-25); // non-reduced part (>=25% health)
|
||||
splitdmg[1] = max(1,(newdamage-splitdmg[0])/4); // reduced part (<25% health)
|
||||
newdamage = splitdmg[0]+splitdmg[1];
|
||||
}
|
||||
}
|
||||
|
||||
// for friendly fire handling, jammed into here
|
||||
override void ModifyDamage( int damage, Name damageType, out int newdamage, bool passive, Actor inflictor, Actor source, int flags )
|
||||
{
|
||||
int ff = swwm_friendlyfire;
|
||||
if ( !source || (source == Owner) || (source.player == Owner.player) || !source.IsFriend(Owner) || !ff ) return;
|
||||
// 1: block incoming friendly damage
|
||||
// 2: also block outgoing friendly damage
|
||||
if ( (passive && ff) || (!passive && (ff == 2)) )
|
||||
newdamage = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// high-resonant almasteel plating
|
||||
// EXTRA THICC as Saya requested
|
||||
Class AlmasteelPlating : SWWMArmor
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 1;
|
||||
Inventory.InterHubAmount 1;
|
||||
Inventory.RestrictedTo "Demolitionist";
|
||||
SWWMArmor.ArmorPriority 2;
|
||||
+INVENTORY.UNCLEARABLE;
|
||||
+SWWMARMOR.NOHITFLASH;
|
||||
+SWWMARMOR.NOHITSOUND;
|
||||
+SWWMARMOR.NODRAIN;
|
||||
}
|
||||
override int HandleDamage( int damage, Name damageType, int flags )
|
||||
{
|
||||
// 80% reduction for explosions
|
||||
double factor = (flags&DMG_EXPLOSION)?.2:1.;
|
||||
// 50% reduction for crushing
|
||||
if ( damageType == 'Crush' ) factor /= 2.;
|
||||
return damage-int(damage*factor);
|
||||
}
|
||||
override bool HandlePickup( Inventory item )
|
||||
{
|
||||
// disallow vanilla armors
|
||||
if ( (item is 'BasicArmor') || (item is 'BasicArmorBonus') || (item is 'BasicArmorPickup') || (item is 'HexenArmor') )
|
||||
{
|
||||
item.bPickupGood = true; // but act as if we picked them up
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Class ReviveCooldown : Powerup
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Icon "graphics/HUD/Icons/I_Revive.png";
|
||||
Powerup.Duration -60;
|
||||
}
|
||||
|
||||
override void Tick()
|
||||
{
|
||||
if ( !Owner ) Destroy();
|
||||
if ( Owner.Health <= 0 ) return; // timer does not go down when dead
|
||||
if ( (EffectTics == 0) || ((EffectTics > 0) && (--EffectTics == 0)) )
|
||||
Destroy ();
|
||||
}
|
||||
override void InitEffect()
|
||||
{
|
||||
Super.InitEffect();
|
||||
// adjust the duration
|
||||
EffectTics = max(0,swwm_revivecooldown)*GameTicRate;
|
||||
}
|
||||
override void EndEffect()
|
||||
{
|
||||
Super.EndEffect();
|
||||
if ( !Owner ) return;
|
||||
Owner.A_StartSound("demolitionist/revive",CHAN_ITEMEXTRA);
|
||||
if ( (EffectTics <= 0) && Owner && Owner.CheckLocalView() ) Console.Printf(StringTable.Localize("$D_REFAIL"));
|
||||
}
|
||||
override void OwnerDied()
|
||||
{
|
||||
// do nothing, this "powerup" is preserved on death
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue