gzdoom/wadsrc/static/zscript/actors/heretic/hereticartifacts.zs
Boondorl 2c09a443b4 Reworked Morphing
Removed StaticPointerSubstitution in favor of a much safer function that only changes select pointers. As a result the ability to properly modify morphing has been opened back up to ZScript. Many missing virtual callbacks were amended and MorphedDeath has been reworked to only be called back on an actual morphed death. MorphedMonster is no longer required to morph an Actor. CheckUnmorph virtual added that gets called back on morphed Actors. Fixed numerous bugs related to morph behavior.
2024-03-01 08:35:31 -05:00

156 lines
2.6 KiB
Text

// Super map ----------------------------------------------------------------
Class SuperMap : MapRevealer
{
Default
{
+COUNTITEM
+INVENTORY.ALWAYSPICKUP
+FLOATBOB
Inventory.MaxAmount 0;
Inventory.PickupMessage "$TXT_ITEMSUPERMAP";
}
States
{
Spawn:
SPMP A -1;
Stop;
}
}
// Invisibility -------------------------------------------------------------
Class ArtiInvisibility : PowerupGiver
{
Default
{
+COUNTITEM
+FLOATBOB
Inventory.PickupFlash "PickupFlash";
RenderStyle "Translucent";
Alpha 0.4;
Inventory.RespawnTics 4230;
Inventory.Icon "ARTIINVS";
Powerup.Type "PowerGhost";
Inventory.PickupMessage "$TXT_ARTIINVISIBILITY";
Tag "$TAG_ARTIINVISIBILITY";
}
States
{
Spawn:
INVS A 350 Bright;
Loop;
}
}
// Tome of power ------------------------------------------------------------
Class ArtiTomeOfPower : PowerupGiver
{
Default
{
+COUNTITEM
+FLOATBOB
Inventory.PickupFlash "PickupFlash";
Inventory.Icon "ARTIPWBK";
Powerup.Type "PowerWeaponlevel2";
Inventory.PickupMessage "$TXT_ARTITOMEOFPOWER";
Tag "$TAG_ARTITOMEOFPOWER";
}
States
{
Spawn:
PWBK A 350;
Loop;
}
override bool Use (bool pickup)
{
Playerinfo p = Owner.player;
if (p && p.morphTics && (p.MorphStyle & MRF_UNDOBYTOMEOFPOWER))
{ // Attempt to undo chicken
if (!p.mo.Unmorph (p.mo, MRF_UNDOBYTOMEOFPOWER))
{ // Failed
if (!(p.MorphStyle & MRF_FAILNOTELEFRAG))
{
Owner.DamageMobj (null, null, TELEFRAG_DAMAGE, 'Telefrag');
}
}
else
{ // Succeeded
Owner.A_StartSound ("*evillaugh", CHAN_VOICE);
}
return true;
}
else
{
return Super.Use (pickup);
}
}
}
// Time bomb ----------------------------------------------------------------
Class ActivatedTimeBomb : Actor
{
Default
{
+NOGRAVITY
RenderStyle "Translucent";
Alpha 0.4;
DeathSound "misc/timebomb";
}
States
{
Spawn:
FBMB ABCD 10;
FBMB E 6 A_Scream;
XPL1 A 4 BRIGHT A_Timebomb;
XPL1 BCDEF 4 BRIGHT;
Stop;
}
void A_TimeBomb()
{
AddZ(32, false);
A_SetRenderStyle(1., STYLE_Add);
A_Explode();
}
}
Class ArtiTimeBomb : Inventory
{
Default
{
+COUNTITEM
+FLOATBOB
Inventory.PickupFlash "PickupFlash";
+INVENTORY.INVBAR
+INVENTORY.FANCYPICKUPSOUND
Inventory.Icon "ARTIFBMB";
Inventory.PickupSound "misc/p_pkup";
Inventory.PickupMessage "$TXT_ARTIFIREBOMB";
Tag "$TAG_ARTIFIREBOMB";
Inventory.DefMaxAmount;
}
States
{
Spawn:
FBMB E 350;
Loop;
}
override bool Use (bool pickup)
{
Actor mo = Spawn("ActivatedTimeBomb", Owner.Vec3Angle(24., Owner.angle, - Owner.Floorclip), ALLOW_REPLACE);
if (mo != null) mo.target = Owner;
return true;
}
}