mirror of
https://github.com/id-Software/quake2-rerelease-dll.git
synced 2026-03-19 16:39:46 +01:00
143 lines
3.2 KiB
C++
143 lines
3.2 KiB
C++
// Copyright (c) ZeniMax Media Inc.
|
|
// Licensed under the GNU General Public License 2.0.
|
|
|
|
#include "../g_local.h"
|
|
|
|
/*QUAKED misc_crashviper (1 .5 0) (-176 -120 -24) (176 120 72)
|
|
This is a large viper about to crash
|
|
*/
|
|
void SP_misc_crashviper(edict_t *ent)
|
|
{
|
|
if (!ent->target)
|
|
{
|
|
gi.Com_PrintFmt("{}: no target\n", *ent);
|
|
G_FreeEdict(ent);
|
|
return;
|
|
}
|
|
|
|
if (!ent->speed)
|
|
ent->speed = 300;
|
|
|
|
ent->movetype = MOVETYPE_PUSH;
|
|
ent->solid = SOLID_NOT;
|
|
ent->s.modelindex = gi.modelindex("models/ships/bigviper/tris.md2");
|
|
ent->mins = { -16, -16, 0 };
|
|
ent->maxs = { 16, 16, 32 };
|
|
|
|
ent->think = func_train_find;
|
|
ent->nextthink = level.time + 10_hz;
|
|
ent->use = misc_viper_use;
|
|
ent->svflags |= SVF_NOCLIENT;
|
|
ent->moveinfo.accel = ent->moveinfo.decel = ent->moveinfo.speed = ent->speed;
|
|
|
|
gi.linkentity(ent);
|
|
}
|
|
|
|
// RAFAEL
|
|
/*QUAKED misc_viper_missile (1 0 0) (-8 -8 -8) (8 8 8)
|
|
"dmg" how much boom should the bomb make? the default value is 250
|
|
*/
|
|
|
|
USE(misc_viper_missile_use) (edict_t *self, edict_t *other, edict_t *activator) -> void
|
|
{
|
|
vec3_t forward, right, up;
|
|
vec3_t start, dir;
|
|
vec3_t vec;
|
|
|
|
AngleVectors(self->s.angles, forward, right, up);
|
|
|
|
self->enemy = G_FindByString<&edict_t::targetname>(nullptr, self->target);
|
|
|
|
vec = self->enemy->s.origin;
|
|
|
|
start = self->s.origin;
|
|
dir = vec - start;
|
|
dir.normalize();
|
|
|
|
monster_fire_rocket(self, start, dir, self->dmg, 500, MZ2_CHICK_ROCKET_1);
|
|
|
|
self->nextthink = level.time + 10_hz;
|
|
self->think = G_FreeEdict;
|
|
}
|
|
|
|
void SP_misc_viper_missile(edict_t *self)
|
|
{
|
|
self->movetype = MOVETYPE_NONE;
|
|
self->solid = SOLID_NOT;
|
|
self->mins = { -8, -8, -8 };
|
|
self->maxs = { 8, 8, 8 };
|
|
|
|
if (!self->dmg)
|
|
self->dmg = 250;
|
|
|
|
self->s.modelindex = gi.modelindex("models/objects/bomb/tris.md2");
|
|
|
|
self->use = misc_viper_missile_use;
|
|
self->svflags |= SVF_NOCLIENT;
|
|
|
|
gi.linkentity(self);
|
|
}
|
|
|
|
// RAFAEL 17-APR-98
|
|
/*QUAKED misc_transport (1 0 0) (-8 -8 -8) (8 8 8)
|
|
Maxx's transport at end of game
|
|
*/
|
|
void SP_misc_transport(edict_t *ent)
|
|
{
|
|
if (!ent->target)
|
|
{
|
|
gi.Com_PrintFmt("{}: no target\n", *ent);
|
|
G_FreeEdict(ent);
|
|
return;
|
|
}
|
|
|
|
if (!ent->speed)
|
|
ent->speed = 300;
|
|
|
|
ent->movetype = MOVETYPE_PUSH;
|
|
ent->solid = SOLID_NOT;
|
|
ent->s.modelindex = gi.modelindex("models/objects/ship/tris.md2");
|
|
|
|
ent->mins = { -16, -16, 0 };
|
|
ent->maxs = { 16, 16, 32 };
|
|
|
|
ent->think = func_train_find;
|
|
ent->nextthink = level.time + 10_hz;
|
|
ent->use = misc_strogg_ship_use;
|
|
ent->svflags |= SVF_NOCLIENT;
|
|
ent->moveinfo.accel = ent->moveinfo.decel = ent->moveinfo.speed = ent->speed;
|
|
|
|
if (!(ent->spawnflags & SPAWNFLAG_TRAIN_START_ON))
|
|
ent->spawnflags |= SPAWNFLAG_TRAIN_START_ON;
|
|
|
|
gi.linkentity(ent);
|
|
}
|
|
// END 17-APR-98
|
|
|
|
/*QUAKED misc_amb4 (1 0 0) (-16 -16 -16) (16 16 16)
|
|
Mal's amb4 loop entity
|
|
*/
|
|
static cached_soundindex amb4sound;
|
|
|
|
THINK(amb4_think) (edict_t *ent) -> void
|
|
{
|
|
ent->nextthink = level.time + 2.7_sec;
|
|
gi.sound(ent, CHAN_VOICE, amb4sound, 1, ATTN_NONE, 0);
|
|
}
|
|
|
|
void SP_misc_amb4(edict_t *ent)
|
|
{
|
|
ent->think = amb4_think;
|
|
ent->nextthink = level.time + 1_sec;
|
|
amb4sound.assign("world/amb4.wav");
|
|
gi.linkentity(ent);
|
|
}
|
|
|
|
/*QUAKED misc_nuke (1 0 0) (-16 -16 -16) (16 16 16)
|
|
*/
|
|
extern void target_killplayers_use(edict_t *self, edict_t *other, edict_t *activator);
|
|
|
|
void SP_misc_nuke(edict_t *ent)
|
|
{
|
|
ent->use = target_killplayers_use;
|
|
} |