mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-27 22:33:17 +00:00
7385cd70c0
Interesting tidbit: The damage calculation in P_MinotaurSlam had been incorrect for the Heretic version since the friendly Hexen Dark Servant was added, but nobody ever noticed in 14 years...
133 lines
2.5 KiB
Text
133 lines
2.5 KiB
Text
|
|
// Dark Servant Artifact ----------------------------------------------------
|
|
|
|
class ArtiDarkServant : Inventory
|
|
{
|
|
Default
|
|
{
|
|
+COUNTITEM
|
|
+FLOATBOB
|
|
Inventory.RespawnTics 4230;
|
|
Inventory.DefMaxAmount;
|
|
Inventory.PickupFlash "PickupFlash";
|
|
+INVENTORY.INVBAR
|
|
+INVENTORY.FANCYPICKUPSOUND
|
|
Inventory.Icon "ARTISUMN";
|
|
Inventory.PickupSound "misc/p_pkup";
|
|
Inventory.PickupMessage "$TXT_ARTISUMMON";
|
|
Tag "$TAG_ARTISUMMON";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
SUMN A 350;
|
|
Loop;
|
|
}
|
|
|
|
//============================================================================
|
|
//
|
|
// Activate the summoning artifact
|
|
//
|
|
//============================================================================
|
|
|
|
override bool Use (bool pickup)
|
|
{
|
|
Actor mo = Owner.SpawnPlayerMissile ("SummoningDoll");
|
|
if (mo)
|
|
{
|
|
mo.target = Owner;
|
|
mo.tracer = Owner;
|
|
mo.Vel.Z = 5;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
// Summoning Doll -----------------------------------------------------------
|
|
|
|
class SummoningDoll : Actor
|
|
{
|
|
Default
|
|
{
|
|
Speed 20;
|
|
+NOBLOCKMAP +DROPOFF +MISSILE
|
|
+NOTELEPORT
|
|
}
|
|
|
|
States
|
|
{
|
|
Spawn:
|
|
SUMN A 4;
|
|
Loop;
|
|
Death:
|
|
SUMN AA 4;
|
|
SUMN A 4 A_Summon;
|
|
Stop;
|
|
}
|
|
|
|
//============================================================================
|
|
//
|
|
// A_Summon
|
|
//
|
|
//============================================================================
|
|
|
|
void A_Summon()
|
|
{
|
|
Actor mo = Spawn("MinotaurFriend", pos, ALLOW_REPLACE);
|
|
if (mo)
|
|
{
|
|
if (mo.TestMobjLocation() == false || !tracer)
|
|
{ // Didn't fit - change back to artifact
|
|
mo.Destroy();
|
|
Actor arti = Spawn("ArtiDarkServant", Pos, ALLOW_REPLACE);
|
|
if (arti) arti.bDropped = true;
|
|
return;
|
|
}
|
|
|
|
// Careful! The Minotaur might have been replaced
|
|
// so only set the time if we got a genuine one.
|
|
MinotaurFriend m = MinotaurFriend(mo);
|
|
if (m) m.StartTime = level.maptime;
|
|
|
|
if (tracer.bCorpse)
|
|
{ // Master dead
|
|
mo.tracer = null; // No master
|
|
}
|
|
else
|
|
{
|
|
mo.tracer = tracer; // Pointer to master
|
|
Inventory power = Inventory(Spawn("PowerMinotaur"));
|
|
power.CallTryPickup(tracer);
|
|
mo.SetFriendPlayer(tracer.player);
|
|
}
|
|
|
|
// Make smoke puff
|
|
Spawn("MinotaurSmoke", Pos, ALLOW_REPLACE);
|
|
A_PlaySound(mo.ActiveSound, CHAN_VOICE);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// Minotaur Smoke -----------------------------------------------------------
|
|
|
|
class MinotaurSmoke : Actor
|
|
{
|
|
Default
|
|
{
|
|
+NOBLOCKMAP +NOGRAVITY
|
|
+NOTELEPORT
|
|
RenderStyle "Translucent";
|
|
Alpha 0.6;
|
|
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
MNSM ABCDEFGHIJKLMNOPQ 3;
|
|
Stop;
|
|
}
|
|
}
|
|
|