mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-12-12 21:52:12 +00:00
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_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;
|
|
}
|
|
}
|
|
|