Quake 2 Oop Conversion Project - Source Diff 3.05 vs 3.14 - g_weapon.c
diff -s -r q2_305/g_weapon.c q2_314/g_weapon.c
Left File < - 3.05/g_weapon.c
Right File > - 3.14/g_weapon.c
Back to Index
92c92
< T_Damage (tr.ent, self, self, dir, point, vec3_origin, damage, kick/2, DAMAGE_NO_KNOCKBACK);
---
> T_Damage (tr.ent, self, self, dir, point, vec3_origin, damage, kick/2, DAMAGE_NO_KNOCKBACK, MOD_HIT);
115c115
< static void fire_lead (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int te_impact, int hspread, int vspread)
---
> static void fire_lead (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int te_impact, int hspread, int vspread, int mod)
206c206
< T_Damage (tr.ent, self, self, aimdir, tr.endpos, tr.plane.normal, damage, kick, DAMAGE_BULLET);
---
> T_Damage (tr.ent, self, self, aimdir, tr.endpos, tr.plane.normal, damage, kick, DAMAGE_BULLET, mod);
258c258
< void fire_bullet (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread)
---
> void fire_bullet (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int mod)
260c260
< fire_lead (self, start, aimdir, damage, kick, TE_GUNSHOT, hspread, vspread);
---
> fire_lead (self, start, aimdir, damage, kick, TE_GUNSHOT, hspread, vspread, mod);
271c271
< void fire_shotgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count)
---
> void fire_shotgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int mod)
276c276
< fire_lead (self, start, aimdir, damage, kick, TE_SHOTGUN, hspread, vspread);
---
> fire_lead (self, start, aimdir, damage, kick, TE_SHOTGUN, hspread, vspread, mod);
288a289,290
> int mod;
>
302c304,310
< T_Damage (other, self, self->owner, self->velocity, self->s.origin, plane->normal, self->dmg, 1, DAMAGE_ENERGY);
---
> {
> if (self->spawnflags & 1)
> mod = MOD_HYPERBLASTER;
> else
> mod = MOD_BLASTER;
> T_Damage (other, self, self->owner, self->velocity, self->s.origin, plane->normal, self->dmg, 1, DAMAGE_ENERGY, mod);
> }
318c326
< void fire_blaster (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int effect)
---
> void fire_blaster (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int effect, qboolean hyper)
342a351,353
> bolt->classname = "bolt";
> if (hyper)
> bolt->spawnflags = 1;
364a376
> int mod;
370c382,406
< T_RadiusDamage(ent, ent->owner, ent->dmg, NULL, ent->dmg_radius);
---
> if (ent->enemy)
> {
> float points;
> vec3_t v;
> vec3_t dir;
>
> VectorAdd (ent->enemy->mins, ent->enemy->maxs, v);
> VectorMA (ent->enemy->s.origin, 0.5, v, v);
> VectorSubtract (ent->s.origin, v, v);
> points = ent->dmg - 0.5 * VectorLength (v);
> VectorSubtract (ent->enemy->s.origin, ent->s.origin, dir);
> if (ent->spawnflags & 1)
> mod = MOD_HANDGRENADE;
> else
> mod = MOD_GRENADE;
> T_Damage (ent->enemy, ent, ent->owner, dir, ent->s.origin, vec3_origin, (int)points, (int)points, DAMAGE_RADIUS, mod);
> }
>
> if (ent->spawnflags & 2)
> mod = MOD_HELD_GRENADE;
> else if (ent->spawnflags & 1)
> mod = MOD_HG_SPLASH;
> else
> mod = MOD_G_SPLASH;
> T_RadiusDamage(ent, ent->owner, ent->dmg, ent->enemy, ent->dmg_radius, mod);
389c425
< gi.multicast (ent->s.origin, MULTICAST_PVS);
---
> gi.multicast (ent->s.origin, MULTICAST_PHS);
420a457
> ent->enemy = other;
457c494
< void fire_grenade2 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius)
---
> void fire_grenade2 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius, qboolean held)
485,486c522,526
< grenade->classname = "grenade";
< grenade->spawnflags = 1;
---
> grenade->classname = "hgrenade";
> if (held)
> grenade->spawnflags = 3;
> else
> grenade->spawnflags = 1;
526c566
< T_Damage (other, ent, ent->owner, ent->velocity, ent->s.origin, plane->normal, ent->dmg, 0, 0);
---
> T_Damage (other, ent, ent->owner, ent->velocity, ent->s.origin, plane->normal, ent->dmg, 0, 0, MOD_ROCKET);
531c571
< if (!deathmatch->value)
---
> if (!deathmatch->value && !coop->value)
542c582
< T_RadiusDamage(ent, ent->owner, ent->radius_dmg, other, ent->dmg_radius);
---
> T_RadiusDamage(ent, ent->owner, ent->radius_dmg, other, ent->dmg_radius, MOD_R_SPLASH);
550c590
< gi.multicast (ent->s.origin, MULTICAST_PVS);
---
> gi.multicast (ent->s.origin, MULTICAST_PHS);
578a619
> rocket->classname = "rocket";
623c664
< T_Damage (tr.ent, self, self, aimdir, tr.endpos, tr.plane.normal, damage, kick, 0);
---
> T_Damage (tr.ent, self, self, aimdir, tr.endpos, tr.plane.normal, damage, kick, 0, MOD_RAILGUN);
688,689c729,730
< gi.multicast (ent->s.origin, MULTICAST_PVS);
< T_Damage (ent, self, self->owner, self->velocity, ent->s.origin, vec3_origin, (int)points, 0, DAMAGE_ENERGY);
---
> gi.multicast (ent->s.origin, MULTICAST_PHS);
> T_Damage (ent, self, self->owner, self->velocity, ent->s.origin, vec3_origin, (int)points, 0, DAMAGE_ENERGY, MOD_BFG_EFFECT);
701,703d741
< edict_t *ent;
< edict_t *next;
<
707,713d744
< // clean up laser entities
< for (ent = self->teamchain; ent; ent = next)
< {
< next = ent->teamchain;
< G_FreeEdict (ent);
< }
<
725,726c756,757
< T_Damage (other, self, self->owner, self->velocity, self->s.origin, plane->normal, 200, 0, 0);
< T_RadiusDamage(self, self->owner, 200, other, 100);
---
> T_Damage (other, self, self->owner, self->velocity, self->s.origin, plane->normal, 200, 0, 0, MOD_BFG_BLAST);
> T_RadiusDamage(self, self->owner, 200, other, 100, MOD_BFG_BLAST);
748,749d778
< extern void target_laser_start (edict_t *self);
<
753,777c782,788
< edict_t *next;
< edict_t *check;
< edict_t *beam;
< vec3_t v;
< float distance;
<
< ent = self->teamchain;
< self->teamchain = NULL;
<
< // go through the old list; re-add good ones and free one the have gone out of range
< while (ent)
< {
< next = ent->teamchain;
<
< VectorSubtract(ent->enemy->s.origin, self->s.origin, v);
< distance = VectorLength(v);
< if (distance <= 256)
< {
< ent->teamchain = self->teamchain;
< self->teamchain = ent;
< }
< else
< {
< G_FreeEdict (ent);
< }
---
> edict_t *ignore;
> vec3_t point;
> vec3_t dir;
> vec3_t start;
> vec3_t end;
> int dmg;
> trace_t tr;
779,780c790,793
< ent = next;
< }
---
> if (deathmatch->value)
> dmg = 5;
> else
> dmg = 10;
781a795
> ent = NULL;
796,798c810,822
< // see if this is already on the list
< for (check = self->teamchain; check; check = check->teamchain)
< if (check->enemy == ent)
---
> VectorMA (ent->absmin, 0.5, ent->size, point);
>
> VectorSubtract (point, self->s.origin, dir);
> VectorNormalize (dir);
>
> ignore = self;
> VectorCopy (self->s.origin, start);
> VectorMA (start, 2048, dir, end);
> while(1)
> {
> tr = gi.trace (start, NULL, NULL, end, ignore, CONTENTS_SOLID|CONTENTS_MONSTER|CONTENTS_DEADMONSTER);
>
> if (!tr.ent)
800,801d823
< if (check)
< continue;
803,819c825,850
< // create a new laser
< beam = G_Spawn();
< beam->flags |= FL_TEAMSLAVE;
< beam->teamchain = self->teamchain;
< beam->teammaster = self;
< self->teamchain = beam;
< beam->owner = self->owner;
< beam->spawnflags = 1 | 4;
< beam->enemy = ent;
< if (deathmatch->value)
< beam->dmg = 5;
< else
< beam->dmg = 10;
< beam->classname = "bfg laser";
< target_laser_start (beam);
< beam->movetype = MOVETYPE_FLYMISSILE;
< gi.linkentity (beam);
---
> // hurt it if we can
> if ((tr.ent->takedamage) && !(tr.ent->flags & FL_IMMUNE_LASER) && (tr.ent != self->owner))
> T_Damage (tr.ent, self, self->owner, dir, tr.endpos, vec3_origin, dmg, 1, DAMAGE_ENERGY, MOD_BFG_LASER);
>
> // if we hit something that's not a monster or player we're done
> if (!(tr.ent->svflags & SVF_MONSTER) && (!tr.ent->client))
> {
> gi.WriteByte (svc_temp_entity);
> gi.WriteByte (TE_LASER_SPARKS);
> gi.WriteByte (4);
> gi.WritePosition (tr.endpos);
> gi.WriteDir (tr.plane.normal);
> gi.WriteByte (self->s.skinnum);
> gi.multicast (tr.endpos, MULTICAST_PVS);
> break;
> }
>
> ignore = tr.ent;
> VectorCopy (tr.endpos, start);
> }
>
> gi.WriteByte (svc_temp_entity);
> gi.WriteByte (TE_BFG_LASER);
> gi.WritePosition (self->s.origin);
> gi.WritePosition (tr.endpos);
> gi.multicast (self->s.origin, MULTICAST_PHS);