gzdoom/wadsrc/static/zscript/actors/hexen/summon.zs

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_StartSound(mo.ActiveSound, CHAN_VOICE);
}
}
}
// Minotaur Smoke -----------------------------------------------------------
class MinotaurSmoke : Actor
{
Default
{
+NOBLOCKMAP +NOGRAVITY
+NOTELEPORT
RenderStyle "Translucent";
Alpha 0.6;
}
States
{
Spawn:
MNSM ABCDEFGHIJKLMNOPQ 3;
Stop;
}
}