Classes:LoreShot

From ZDoom Wiki
Jump to navigation Jump to search
Note: Wait! Stop! Before you copy this actor's definition into your mod, remember the following things:
  1. You do NOT need to copy that actor, since it is already defined.
  2. In fact, it's not just useless, it will cause problems.
  3. If you want to modify it, or use a modified version, using inheritance is the way to go.
  4. The actor definitions here are put on the wiki for reference purpose only. Learn from them, don't copy them.
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
  }
}