mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-23 20:43:15 +00:00
69d4d36429
- allow switch/case with names. - fixed break jump target handling for switch/case. This only worked when the break was in the outermost compound statement, those in inner ones were missed.
92 lines
1.8 KiB
Text
92 lines
1.8 KiB
Text
|
|
// Healing Radius Artifact --------------------------------------------------
|
|
|
|
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)
|
|
{
|
|
PlayerPawn mo = players[i].mo;
|
|
if (playeringame[i] && 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 = 50 + (random[HealRadius]() % 50);
|
|
|
|
if (mo.GiveAmmo ("Mana1", amount) ||
|
|
mo.GiveAmmo ("Mana2", amount))
|
|
{
|
|
gotsome = true;
|
|
}
|
|
break;
|
|
}
|
|
|
|
default:
|
|
//case NAME_Health:
|
|
gotsome = mo.GiveBody (50 + (random[HealRadius]() % 50));
|
|
break;
|
|
}
|
|
if (gotsome)
|
|
{
|
|
mo.A_PlaySound ("MysticIncant", CHAN_AUTO);
|
|
effective=true;
|
|
}
|
|
}
|
|
}
|
|
return effective;
|
|
|
|
}
|
|
|
|
}
|
|
|