qzdoom-gpl/wadsrc/static/zscript/heretic/hereticartifacts.txt
Christoph Oelckers 3d61d2c1f4 - reviewd script code for spawn calls that did not check their results.
Nothing should ever assume that spawning an actor is unconditionally successful. There can always be some edge cases where this is not the case.
2016-12-31 15:40:51 +01: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;
}
bool Use (bool pickup)
{
Playerinfo p = Owner.player;
if (p && p.morphTics && (p.MorphStyle & MRF_UNDOBYTOMEOFPOWER))
{ // Attempt to undo chicken
if (!p.UndoPlayerMorph (p, MRF_UNDOBYTOMEOFPOWER))
{ // Failed
if (!(p.MorphStyle & MRF_FAILNOTELEFRAG))
{
Owner.DamageMobj (null, null, TELEFRAG_DAMAGE, 'Telefrag');
}
}
else
{ // Succeeded
Owner.A_PlaySound ("*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;
}
}