Classes:ArtiHealingRadius
Jump to navigation
Jump to search
Note: Wait! Stop! You do not need to copy this actor's code into your project! Here's why:
|
Mystic ambit incant | |||
---|---|---|---|
Actor type | Artifact | Game | (Hexen) |
DoomEd Number | 10120 | Class Name | ArtiHealingRadius |
Classes: Inventory→ArtiHealingRadius
The Mystic Ambit Incant is used in Hexen cooperative to have different effects on fellow players, based on the class of the person who picks it up and uses it. All players within 255 map units of the user (including the user themselves) will be affected by the Incant.
The result depends on the value of the user's HealRadiusType property:
- Health restores each affected player's health by 50-90 points.
- Armor gives each affected player 1 point of Armor Class.
- Mana restores each affected player's Blue Mana and Green Mana by 50-99 points. (Each mana type recieves the same amount per Incant.)
ZScript definition
Note: The ZScript definition below is for reference and may be different in the current version of GZDoom.The most up-to-date version of this code can be found on GZDoom GitHub. |
class ArtiHealingRadius : Inventory
{
const HEAL_RADIUS_DIST = 255.;
Default
{
+COUNTITEM
+FLOATBOB
Inventory.DefMaxAmount;
+INVENTORY.INVBAR
+INVENTORY.FANCYPICKUPSOUND
Inventory.PickupFlash "PickupFlash";
Inventory.Icon "ARTIHRAD";
Inventory.PickupSound "misc/p_pkup";
Inventory.PickupMessage "$TXT_ARTIHEALINGRADIUS";
Tag "$TAG_ARTIHEALINGRADIUS";
}
States
{
Spawn:
HRAD ABCDEFGHIJKLMNOP 4 Bright;
Loop;
}
override bool Use (bool pickup)
{
bool effective = false;
Name mode = 'Health';
PlayerPawn pp = PlayerPawn(Owner);
if (pp) mode = pp.HealingRadiusType;
for (int i = 0; i < MAXPLAYERS; ++i)
{
if (!playeringame[i])
{
continue;
}
PlayerPawn mo = players[i].mo;
if (mo != null && mo.health > 0 && mo.Distance2D (Owner) <= HEAL_RADIUS_DIST)
{
// Q: Is it worth it to make this selectable as a player property?
// A: Probably not - but it sure doesn't hurt.
bool gotsome=false;
switch (mode)
{
case 'Armor':
for (int j = 0; j < 4; ++j)
{
HexenArmor armor = HexenArmor(Spawn("HexenArmor"));
armor.health = j;
armor.Amount = 1;
if (!armor.CallTryPickup (mo))
{
armor.Destroy ();
}
else
{
gotsome = true;
}
}
break;
case 'Mana':
{
int amount = random[HealRadius](50, 99);
if (mo.GiveAmmo ("Mana1", amount) ||
mo.GiveAmmo ("Mana2", amount))
{
gotsome = true;
}
break;
}
default:
//case NAME_Health:
gotsome = mo.GiveBody (random[HealRadius](50, 99));
break;
}
if (gotsome)
{
mo.A_StartSound ("MysticIncant", CHAN_AUTO);
effective=true;
}
}
}
return effective;
}
}
DECORATE definition
Note: This is legacy code, kept for archival purposes only. DECORATE is deprecated in GZDoom and is completely superseded by ZScript. GZDoom internally uses the ZScript definition above. |
ACTOR ArtiHealingRadius : Inventory native { +COUNTITEM +FLOATBOB Inventory.DefMaxAmount +INVENTORY.INVBAR +INVENTORY.PICKUPFLASH +INVENTORY.FANCYPICKUPSOUND Inventory.Icon "ARTIHRAD" Inventory.PickupSound "misc/p_pkup" Inventory.PickupMessage "$TXT_ARTIHEALINGRADIUS" // "MYSTIC AMBIT INCANT" Tag "$TAG_ARTIHEALINGRADIUS" States { Spawn: HRAD ABCDEFGHIJKLMNOP 4 Bright Loop } }