Classes:LoreShot

From ZDoom Wiki
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:
  1. This actor is already defined in GZDoom, there's no reason to define it again.
  2. In fact, trying to define an actor with the same name will cause an error (because it already exists).
  3. If you want to make your own version of this actor, use inheritance.
  4. Definitions for existing actors are put on the wiki for reference purpose only.
Loremaster grappling hook
Actor type Explosive Game MiniStrifeLogoIcon.png (Strife)
DoomEd Number None Class Name LoreShot
Conversation ID 97 Puzzle Item ID N/A


Classes: LoreShot
This is the projectile fired by the Loremaster. It pulls the actor that is hit toward the actor that fired it. It also calls A_LoremasterChain to spawns several LoreShot2 actors to create a "chain".

Note, in ZScript it's no longer necessary to create a projectile based on this class just to implement its dragging functionality. Instead, you can just copy the contents of its DoSpecialDamage override (and modify them, if necessary).

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 LoreShot : Actor
{
	Default
	{
		Speed 20;
		Height 14;
		Radius 10;
		Projectile;
		+STRIFEDAMAGE
		Damage 2;
		MaxStepHeight 4;
		SeeSound "loremaster/chain";
		ActiveSound "loremaster/swish";
	}

	States
	{
	Spawn:
		OCLW A 2 A_LoremasterChain;
		Loop;
	Death:
		OCLW A 6;
		Stop;
	}
	
	override int DoSpecialDamage (Actor victim, int damage, Name damagetype)
	{
		
		if (victim != NULL && target != NULL && !victim.bDontThrust)
		{
			Vector3 thrust = victim.Vec3To(target);
			victim.Vel += thrust.Unit() * (255. * 50 / max(victim.Mass, 1));
		}
		return damage;
	}

	void A_LoremasterChain ()
	{
		A_StartSound ("loremaster/active", CHAN_BODY);
		Spawn("LoreShot2", Pos, ALLOW_REPLACE);
		Spawn("LoreShot2", Vec3Offset(-Vel.x/2., -Vel.y/2., -Vel.z/2.), ALLOW_REPLACE);
		Spawn("LoreShot2", Vec3Offset(-Vel.x, -Vel.y, -Vel.z), ALLOW_REPLACE);
	}
	
}

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 LoreShot native
{
  Speed 20
  Height 14
  Radius 10
  Projectile
  +STRIFEDAMAGE
  Damage 2
  MaxStepHeight 4
  SeeSound "loremaster/chain"
  ActiveSound "loremaster/swish"

  action native A_LoremasterChain();

  States
  {
  Spawn:
    OCLW A 2 A_LoremasterChain
    Loop
  Death:
    OCLW A 6
    Stop
  }
}