Example #1
0
DEFINE_ACTION_FUNCTION(AActor, A_SpectralBigBallLightning)
{
	const PClass *cls = PClass::FindClass("SpectralLightningH3");
	if (cls)
	{
		self->angle += ANGLE_90;
		P_SpawnSubMissile (self, cls, self->target);
		self->angle += ANGLE_180;
		P_SpawnSubMissile (self, cls, self->target);
		self->angle += ANGLE_90;
		P_SpawnSubMissile (self, cls, self->target);
	}
}
DEFINE_ACTION_FUNCTION(AActor, A_FireSigil3)
{
	PARAM_ACTION_PROLOGUE;

	AActor *spot;
	player_t *player = self->player;
	int i;

	if (player == NULL || player->ReadyWeapon == NULL)
		return 0;

	P_DamageMobj (self, self, NULL, 3*4, 0, DMG_NO_ARMOR);
	S_Sound (self, CHAN_WEAPON, "weapons/sigilcharge", 1, ATTN_NORM);

	self->Angles.Yaw -= 90.;
	for (i = 0; i < 20; ++i)
	{
		self->Angles.Yaw += 9.;
		spot = P_SpawnSubMissile (self, PClass::FindActor("SpectralLightningBall1"), self);
		if (spot != NULL)
		{
			spot->SetZ(self->Z() + 32);
		}
	}
	self->Angles.Yaw -= 90.;
	return 0;
}
Example #3
0
DEFINE_ACTION_FUNCTION(AActor, A_SpectralBigBallLightning)
{
	PARAM_ACTION_PROLOGUE;

	PClassActor *cls = PClass::FindActor("SpectralLightningH3");
	if (cls)
	{
		self->Angles.Yaw += 90.;
		P_SpawnSubMissile (self, cls, self->target);
		self->Angles.Yaw += 180.;
		P_SpawnSubMissile (self, cls, self->target);
		self->Angles.Yaw -= 270.;
		P_SpawnSubMissile (self, cls, self->target);
	}
	return 0;
}
DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_FireGrenade)
{
	PARAM_ACTION_PROLOGUE;
	PARAM_CLASS(grenadetype, AActor);
	PARAM_ANGLE(angleofs);
	PARAM_STATE(flash)

	player_t *player = self->player;
	AActor *grenade;
	DAngle an;
	AWeapon *weapon;

	if (player == nullptr || grenadetype == nullptr)
		return 0;

	if ((weapon = player->ReadyWeapon) == nullptr)
		return 0;

	if (!weapon->DepleteAmmo (weapon->bAltFire))
		return 0;

	P_SetPsprite (player, PSP_FLASH, flash, true);

	if (grenadetype != nullptr)
	{
		self->AddZ(32);
		grenade = P_SpawnSubMissile (self, grenadetype, self);
		self->AddZ(-32);
		if (grenade == nullptr)
			return 0;

		if (grenade->SeeSound != 0)
		{
			S_Sound (grenade, CHAN_VOICE, grenade->SeeSound, 1, ATTN_NORM);
		}

		grenade->Vel.Z = (-self->Angles.Pitch.TanClamped()) * grenade->Speed + 8;

		DVector2 offset = self->Angles.Yaw.ToVector(self->radius + grenade->radius);
		DAngle an = self->Angles.Yaw + angleofs;
		offset += an.ToVector(15);
		grenade->SetOrigin(grenade->Vec3Offset(offset.X, offset.Y, 0.), false);
	}
	return 0;
}
DEFINE_ACTION_FUNCTION(AActor, A_MaulerTorpedoWave)
{
	AActor *wavedef = GetDefaultByName("MaulerTorpedoWave");
	fixed_t savedz;
	self->angle += ANGLE_180;

	// If the torpedo hit the ceiling, it should still spawn the wave
	savedz = self->Z();
	if (wavedef && self->ceilingz - self->Z() < wavedef->height)
	{
		self->SetZ(self->ceilingz - wavedef->height);
	}

	for (int i = 0; i < 80; ++i)
	{
		self->angle += ANGLE_45/10;
		P_SpawnSubMissile (self, PClass::FindClass("MaulerTorpedoWave"), self->target);
	}
	self->SetZ(savedz);
}
DEFINE_ACTION_FUNCTION(AActor, A_MaulerTorpedoWave)
{
	PARAM_ACTION_PROLOGUE;

	AActor *wavedef = GetDefaultByName("MaulerTorpedoWave");
	double savedz;
	self->Angles.Yaw += 180.;

	// If the torpedo hit the ceiling, it should still spawn the wave
	savedz = self->Z();
	if (wavedef && self->ceilingz < self->Z() + wavedef->Height)
	{
		self->SetZ(self->ceilingz - wavedef->Height);
	}

	for (int i = 0; i < 80; ++i)
	{
		self->Angles.Yaw += 4.5;
		P_SpawnSubMissile (self, PClass::FindActor("MaulerTorpedoWave"), self->target);
	}
	self->SetZ(savedz);
	return 0;
}
Example #7
0
DEFINE_ACTION_FUNCTION(AActor, A_Spectre3Attack)
{
	PARAM_ACTION_PROLOGUE;

	if (self->target == NULL)
		return 0;

	AActor *foo = Spawn("SpectralLightningV2", self->PosPlusZ(32.), ALLOW_REPLACE);

	foo->Vel.Z = -12;
	foo->target = self;
	foo->FriendPlayer = 0;
	foo->tracer = self->target;

	self->Angles.Yaw -= 90.;
	for (int i = 0; i < 20; ++i)
	{
		self->Angles.Yaw += 9.;
		P_SpawnSubMissile (self, PClass::FindActor("SpectralLightningBall2"), self);
	}
	self->Angles.Yaw -= 90.;
	return 0;
}
Example #8
0
DEFINE_ACTION_FUNCTION(AActor, A_Spectre3Attack)
{
	if (self->target == NULL)
		return;

	AActor *foo = Spawn("SpectralLightningV2", self->x, self->y, self->z + 32*FRACUNIT, ALLOW_REPLACE);

	foo->momz = -12*FRACUNIT;
	foo->target = self;
	foo->health = -2;
	foo->tracer = self->target;

	// [CW] Tell clients to spawn the actor.
	if ( NETWORK_GetState( ) == NETSTATE_SERVER )
		SERVERCOMMANDS_SpawnMissile( foo );

	self->angle -= ANGLE_180 / 20 * 10;
	for (int i = 0; i < 20; ++i)
	{
		self->angle += ANGLE_180 / 20;
		P_SpawnSubMissile (self, PClass::FindClass("SpectralLightningBall2"), self);
	}
	self->angle -= ANGLE_180 / 20 * 10;
}