
Flare Grenades
Light This Up!
All we're doing here is
turning your grenades into flares, very simple and probably useless, but they
do look cool.
Everything we're going to modify is right in g_weapon.c, so open it up and
scroll down to the fire_grenade2 function (that's for handgrenades).
Take out the lines that are pink and add in the lines that are blue.
void fire_grenade2
(edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float
timer, float damage_radius, qboolean held)
{
edict_t *grenade;
vec3_t dir;
vec3_t forward, right, up;
vectoangles (aimdir, dir);
AngleVectors (dir, forward, right, up);
grenade = G_Spawn();
VectorCopy (start, grenade->s.origin);
VectorScale (aimdir, speed, grenade->velocity);
VectorMA (grenade->velocity, 200 + crandom() *
10.0, up, grenade->velocity);
VectorMA (grenade->velocity, crandom() * 10.0,
right, grenade->velocity);
VectorSet (grenade->avelocity, 300, 300, 300);
grenade->movetype = MOVETYPE_BOUNCE;
grenade->clipmask = MASK_SHOT;
grenade->solid = SOLID_BBOX;
grenade->s.effects
|= EF_GRENADE;
grenade->s.effects |= EF_BLASTER;
VectorClear (grenade->mins);
VectorClear (grenade->maxs);
grenade->s.modelindex = gi.modelindex ("models/objects/grenade2/tris.md2");
grenade->owner = self;
grenade->touch = Grenade_Touch;
grenade->nextthink = level.time + timer;
grenade->think = Grenade_Explode;
grenade->dmg = damage;
grenade->dmg_radius = damage_radius;
grenade->classname = "hgrenade";
grenade->s.effects |=
EF_COLOR_SHELL;
grenade->s.renderfx |= RF_SHELL_GREEN;
grenade->s.effects |= EF_BFG|EF_TELEPORTER;
if (held)
grenade->spawnflags = 3;
else
grenade->spawnflags = 1;
grenade->s.sound =
gi.soundindex("weapons/hgrenc1b.wav");
if (timer <= 0.0)
Grenade_Explode (grenade);
else
{
gi.sound (self, CHAN_WEAPON,
gi.soundindex ("weapons/hgrent1a.wav"), 1, ATTN_NORM, 0);
gi.linkentity (grenade);
}
}
All we did was add in a color shell effect, that also emits green light, and we gave the grenade a teleporter particle stream. Fin.
Tutorial by Willi
Back to Quake Style - Tutorials