mirror of
https://github.com/id-Software/quake2-rerelease-dll.git
synced 2025-02-25 04:30:45 +00:00
99 lines
2.5 KiB
C++
99 lines
2.5 KiB
C++
// Copyright (c) ZeniMax Media Inc.
|
|
// Licensed under the GNU General Public License 2.0.
|
|
|
|
#include "../g_local.h"
|
|
|
|
/*QUAKED target_mal_laser (1 0 0) (-4 -4 -4) (4 4 4) START_ON RED GREEN BLUE YELLOW ORANGE FAT
|
|
Mal's laser
|
|
*/
|
|
void target_mal_laser_on(edict_t *self)
|
|
{
|
|
if (!self->activator)
|
|
self->activator = self;
|
|
self->spawnflags |= SPAWNFLAG_LASER_ZAP | SPAWNFLAG_LASER_ON;
|
|
self->svflags &= ~SVF_NOCLIENT;
|
|
self->flags |= FL_TRAP;
|
|
// target_laser_think (self);
|
|
self->nextthink = level.time + gtime_t::from_sec(self->wait + self->delay);
|
|
}
|
|
|
|
USE(target_mal_laser_use) (edict_t *self, edict_t *other, edict_t *activator) -> void
|
|
{
|
|
self->activator = activator;
|
|
if (self->spawnflags.has(SPAWNFLAG_LASER_ON))
|
|
target_laser_off(self);
|
|
else
|
|
target_mal_laser_on(self);
|
|
}
|
|
|
|
void mal_laser_think(edict_t *self);
|
|
|
|
THINK(mal_laser_think2) (edict_t *self) -> void
|
|
{
|
|
self->svflags |= SVF_NOCLIENT;
|
|
self->think = mal_laser_think;
|
|
self->nextthink = level.time + gtime_t::from_sec(self->wait);
|
|
self->spawnflags |= SPAWNFLAG_LASER_ZAP;
|
|
}
|
|
|
|
THINK(mal_laser_think) (edict_t *self) -> void
|
|
{
|
|
self->svflags &= ~SVF_NOCLIENT;
|
|
target_laser_think(self);
|
|
self->think = mal_laser_think2;
|
|
self->nextthink = level.time + 100_ms;
|
|
}
|
|
|
|
void SP_target_mal_laser(edict_t *self)
|
|
{
|
|
self->movetype = MOVETYPE_NONE;
|
|
self->solid = SOLID_NOT;
|
|
self->s.renderfx |= RF_BEAM;
|
|
self->s.modelindex = MODELINDEX_WORLD; // must be non-zero
|
|
self->flags |= FL_TRAP_LASER_FIELD;
|
|
|
|
// set the beam diameter
|
|
if (self->spawnflags.has(SPAWNFLAG_LASER_FAT))
|
|
self->s.frame = 16;
|
|
else
|
|
self->s.frame = 4;
|
|
|
|
// set the color
|
|
if (self->spawnflags.has(SPAWNFLAG_LASER_RED))
|
|
self->s.skinnum = 0xf2f2f0f0;
|
|
else if (self->spawnflags.has(SPAWNFLAG_LASER_GREEN))
|
|
self->s.skinnum = 0xd0d1d2d3;
|
|
else if (self->spawnflags.has(SPAWNFLAG_LASER_BLUE))
|
|
self->s.skinnum = 0xf3f3f1f1;
|
|
else if (self->spawnflags.has(SPAWNFLAG_LASER_YELLOW))
|
|
self->s.skinnum = 0xdcdddedf;
|
|
else if (self->spawnflags.has(SPAWNFLAG_LASER_ORANGE))
|
|
self->s.skinnum = 0xe0e1e2e3;
|
|
|
|
G_SetMovedir(self->s.angles, self->movedir);
|
|
|
|
if (!self->delay)
|
|
self->delay = 0.1f;
|
|
|
|
if (!self->wait)
|
|
self->wait = 0.1f;
|
|
|
|
if (!self->dmg)
|
|
self->dmg = 5;
|
|
|
|
self->mins = { -8, -8, -8 };
|
|
self->maxs = { 8, 8, 8 };
|
|
|
|
self->nextthink = level.time + gtime_t::from_sec(self->delay);
|
|
self->think = mal_laser_think;
|
|
|
|
self->use = target_mal_laser_use;
|
|
|
|
gi.linkentity(self);
|
|
|
|
if (self->spawnflags.has(SPAWNFLAG_LASER_ON))
|
|
target_mal_laser_on(self);
|
|
else
|
|
target_laser_off(self);
|
|
}
|
|
// END 15-APR-98
|