djcev.com

//

Git Repos / fte_dogmode / qc / misc / sparks.qc

Last update to this file was on 2024-06-15 at 19:50.

Show sparks.qc

//==============================================================================
// misc_sparks -- selections from Rubicon 2 qc by john fitzgibbons
//==============================================================================

//======================================================================
// constants
//======================================================================

#ifdef SSQC
const float MISC_SPARKS_START_OFF = 1;
const float MISC_SPARKS_BLUE = 2;
const float MISC_SPARKS_PALE = 4;

enum
{
TEMP_SPARK_FADE1, // animation states for temp_spark
TEMP_SPARK_FADE2,
TEMP_SPARK_FADE3,
TEMP_SPARK_FADE4,
TEMP_SPARK_REMOVE
};
#endif

//======================================================================
// forward declarations
//======================================================================

#ifdef SSQC
// temp_spark
void() temp_spark_think;
entity(entity own, vector org, float sflags) spawn_temp_spark;
void(entity e) temp_spark_init;
strip void() temp_spark;
#endif

#ifdef SSQC
// misc_sparks
void() misc_sparks_think_make;
void() misc_sparks_think_turnofflight;
void() misc_sparks_use;
void(entity e) misc_sparks_init;
void() misc_sparks;
#endif

//------------------------------------------------------------------------------

//----------------------------------------------------------------------
// temp_spark - an individual spark - from Rubicon2, refactored by CEV
//----------------------------------------------------------------------
// class temp_spark: base_tempentity
// {
#ifdef SSQC
//--------------------------------------------------------------
void() temp_spark_think =
{
if (self.state == TEMP_SPARK_REMOVE)
{
remove (self);
return;
}

self.alpha -= 0.2;
self.state += 1;
self.nextthink = time + 0.05;
};

//--------------------------------------------------------------
entity(entity own, vector org, float sflags) spawn_temp_spark =
{
local entity e = spawn ();
e.owner = own;
e.origin = org;
e.spawnflags = sflags;
temp_spark_init (e);
return e;
};

//--------------------------------------------------------------
void(entity e) temp_spark_init =
{
e.classname = "spark";
e.classtype = CT_TEMP_SPARK;
// TODO CEV set classgroup directly to save a function call
// base_tempentity_init (e);
e.classgroup |= CG_TEMPENTITY;

e.movetype = MOVETYPE_BOUNCE;
e.solid = SOLID_TRIGGER;
e.alpha = 1.0;
e.gravity = 0.3;
e.velocity_x = -40 + random() * 80;
e.velocity_y = -40 + random() * 80;
e.velocity_z = -40 + random() * 80;
e.avelocity = '3000 3000 3000';

if (random() < 0.33)
e.skin = 0;
else if (random() < 0.5)
e.skin = 1;
else
e.skin = 2;

if (e.spawnflags & MISC_SPARKS_PALE)
e.skin = e.skin + 6;
else if (e.spawnflags & MISC_SPARKS_BLUE)
e.skin = e.skin + 3;

setmodel (e, "progs/spark.mdl");
setorigin (e, e.origin);
setsize (e, '0 0 0', '0 0 0');

e.state = TEMP_SPARK_FADE1;
e.think = temp_spark_think;
e.nextthink = time + 0.5 + 1.5 * random();
};

//--------------------------------------------------------------
strip void() temp_spark =
{
temp_spark_init (self);
};
#endif
// };

/*QUAKED misc_sparks (0 .5 .8) (-8 -8 -8) (8 8 8) MISC_SPARKS_START_OFF MISC_SPARKS_BLUE MISC_SPARKS_PALE X X X X X NOT_ON_EASY NOT_ON_NORMAL NOT_ON_HARD_OR_NIGHTMARE NOT_IN_DEATHMATCH NOT_IN_COOP NOT_IN_SINGLEPLAYER X NOT_ON_HARD_ONLY NOT_ON_NIGHTMARE_ONLY

Produces a burst of yellow sparks at random intervals. If targeted, it will toggle between on or off. If it targets a light, that light will flash allong with each burst of sparks. Note: targeted lights should be set to START_OFF.

SPARKS_BLUE: sparks are blue in color

SPARKS_PALE: sparks are pale yellow in color

Keys:

"wait" is the average delay between bursts (variance is 1/2 wait). Default is 2.

"cnt" is the average number of sparks in a burst (variance is 1/4 cnt). Default is 15.

"sounds"
0) no sound
1) sparks
*/
//----------------------------------------------------------------------
// class misc_sparks: base_mapentity
// {
#ifdef SSQC
//--------------------------------------------------------------
void() misc_sparks_think_make =
{
if (self.spawnflags & MISC_SPARKS_START_OFF)
{
self.think = misc_sparks_think_make;
self.nextthink = time + 0.1;
return;
}

local float i;
i = -0.25 * self.cnt + random() * 0.5 * self.cnt;
while (i < self.cnt)
{
spawn_temp_spark (self, self.origin, self.spawnflags);
i++;
}

if (self.sounds == 1)
if (self.noise != "")
sound (self, CHAN_AUTO, self.noise,
VOL_HIGH, ATTN_STATIC);
else
sound (self, CHAN_AUTO, "enforcer/enfstop.wav",
VOL_HIGH, ATTN_STATIC);

sub_usetargets ();
self.think = misc_sparks_think_turnofflight;
self.nextthink = time + 0.1 + random() * 0.1;
};

//--------------------------------------------------------------
void() misc_sparks_think_turnofflight =
{
sub_usetargets ();
self.think = misc_sparks_think_make;
self.nextthink = time + (random() + 0.5) * self.wait - 0.15;
};

//--------------------------------------------------------------
void() misc_sparks_use =
{

if (self.spawnflags & MISC_SPARKS_START_OFF)
self.spawnflags &= ~MISC_SPARKS_START_OFF;
else
self.spawnflags |= MISC_SPARKS_START_OFF;
};

//--------------------------------------------------------------
void(entity e) misc_sparks_init =
{
e.classname = "misc_sparks";
e.classtype = CT_MISC_SPARKS;
base_mapentity_init (e);

precache_model ("progs/spark.mdl");

if (!e.noise)
precache_sound ("dump/spark.wav");
else
precache_sound (e.noise);

if (!e.movedir)
e.movedir = '0 0 -30';

if (!e.wait)
e.wait = 2;

if (!e.cnt)
e.cnt = 15;

e.use = misc_sparks_use;
e.think = misc_sparks_think_make;
e.nextthink = time + random() * 0.1;
};

//--------------------------------------------------------------
void() misc_sparks =
{
// new spawnflags for all entities -- iw
if (SUB_Inhibit())
return;

misc_sparks_init (self);
};
#endif
// };

Return to the top of this page or return to the overview of this repo.

Log sparks.qc

Date Commit Message Author + -
2024-06-15 Major update, committing as-is, will have bugs cev +12 -2
2024-03-24 2nd pass refactor, rework QC class structure cev +136 -110
2024-01-31 Class based monster refactor & start projectiles cev +2 -2
2024-01-09 Continue OO / Class-based refactor cev +132 -103
2023-12-09 Start OO / class-based refactor, work on items cev +138 -129
2023-11-27 Code reorg, minor movement changes, misc cev +160  

Return to the top of this page or return to the overview of this repo.