mirror of
https://github.com/yquake2/xatrix.git
synced 2024-11-10 06:42:22 +00:00
T_Damage no longer modifies dir parameter
This commit is contained in:
parent
ae8a86dd71
commit
e1aaa64b67
3 changed files with 37 additions and 45 deletions
|
@ -481,6 +481,24 @@ M_ReactToDamage(edict_t *targ, edict_t *attacker)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
apply_knockback(edict_t *targ, vec3_t dir, float knockback, float scale)
|
||||
{
|
||||
vec3_t kvel;
|
||||
float mass;
|
||||
|
||||
if (!knockback)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
mass = (targ->mass < 50) ? 50.0f : (float)targ->mass;
|
||||
|
||||
VectorNormalize2(dir, kvel);
|
||||
VectorScale(kvel, scale * (knockback / mass), kvel);
|
||||
VectorAdd(targ->velocity, kvel, targ->velocity);
|
||||
}
|
||||
|
||||
void
|
||||
T_Damage(edict_t *targ, edict_t *inflictor, edict_t *attacker, vec3_t dir,
|
||||
vec3_t point, vec3_t normal, int damage, int knockback, int dflags,
|
||||
|
@ -547,8 +565,6 @@ T_Damage(edict_t *targ, edict_t *inflictor, edict_t *attacker, vec3_t dir,
|
|||
te_sparks = TE_SPARKS;
|
||||
}
|
||||
|
||||
VectorNormalize(dir);
|
||||
|
||||
/* bonus damage for suprising a monster */
|
||||
if (!(dflags & DAMAGE_RADIUS) && (targ->svflags & SVF_MONSTER) &&
|
||||
(attacker->client) && (!targ->enemy) && (targ->health > 0))
|
||||
|
@ -562,36 +578,14 @@ T_Damage(edict_t *targ, edict_t *inflictor, edict_t *attacker, vec3_t dir,
|
|||
}
|
||||
|
||||
/* figure momentum add */
|
||||
if (!(dflags & DAMAGE_NO_KNOCKBACK))
|
||||
if (!(dflags & DAMAGE_NO_KNOCKBACK) &&
|
||||
(targ->movetype != MOVETYPE_NONE) &&
|
||||
(targ->movetype != MOVETYPE_BOUNCE) &&
|
||||
(targ->movetype != MOVETYPE_PUSH) &&
|
||||
(targ->movetype != MOVETYPE_STOP))
|
||||
{
|
||||
if ((knockback) && (targ->movetype != MOVETYPE_NONE) &&
|
||||
(targ->movetype != MOVETYPE_BOUNCE) &&
|
||||
(targ->movetype != MOVETYPE_PUSH) &&
|
||||
(targ->movetype != MOVETYPE_STOP))
|
||||
{
|
||||
vec3_t kvel;
|
||||
float mass;
|
||||
|
||||
if (targ->mass < 50)
|
||||
{
|
||||
mass = 50;
|
||||
}
|
||||
else
|
||||
{
|
||||
mass = targ->mass;
|
||||
}
|
||||
|
||||
if (targ->client && (attacker == targ))
|
||||
{
|
||||
VectorScale(dir, 1600.0 * (float)knockback / mass, kvel); /* the rocket jump hack... */
|
||||
}
|
||||
else
|
||||
{
|
||||
VectorScale(dir, 500.0 * (float)knockback / mass, kvel);
|
||||
}
|
||||
|
||||
VectorAdd(targ->velocity, kvel, targ->velocity);
|
||||
}
|
||||
apply_knockback (targ, dir, knockback,
|
||||
((client && attacker == targ) ? 1600.0f : 500.0f));
|
||||
}
|
||||
|
||||
take = damage;
|
||||
|
|
|
@ -1061,7 +1061,14 @@ bfg_touch(edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf)
|
|||
gi.sound(self, CHAN_VOICE, gi.soundindex("weapons/bfg__x1b.wav"), 1, ATTN_NORM, 0);
|
||||
self->solid = SOLID_NOT;
|
||||
self->touch = NULL;
|
||||
VectorMA(self->s.origin, -1 * FRAMETIME, self->velocity, self->s.origin);
|
||||
|
||||
/* move it back a bit from walls so the effects aren't cut off */
|
||||
if (!other->takedamage)
|
||||
{
|
||||
VectorNormalize(self->velocity);
|
||||
VectorMA(self->s.origin, -40.0f, self->velocity, self->s.origin);
|
||||
}
|
||||
|
||||
VectorClear(self->velocity);
|
||||
self->s.modelindex = gi.modelindex("sprites/s_bfg3.sp2");
|
||||
self->s.frame = 0;
|
||||
|
@ -1071,6 +1078,8 @@ bfg_touch(edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf)
|
|||
self->nextthink = level.time + FRAMETIME;
|
||||
self->enemy = other;
|
||||
|
||||
gi.linkentity(self);
|
||||
|
||||
gi.WriteByte(svc_temp_entity);
|
||||
gi.WriteByte(TE_BFG_BIGEXPLOSION);
|
||||
gi.WritePosition(self->s.origin);
|
||||
|
|
|
@ -503,20 +503,9 @@ VectorNormalize(vec3_t v)
|
|||
vec_t
|
||||
VectorNormalize2(vec3_t v, vec3_t out)
|
||||
{
|
||||
float length, ilength;
|
||||
VectorCopy(v, out);
|
||||
|
||||
length = v[0] * v[0] + v[1] * v[1] + v[2] * v[2];
|
||||
length = (float)sqrt(length);
|
||||
|
||||
if (length)
|
||||
{
|
||||
ilength = 1 / length;
|
||||
out[0] = v[0] * ilength;
|
||||
out[1] = v[1] * ilength;
|
||||
out[2] = v[2] * ilength;
|
||||
}
|
||||
|
||||
return length;
|
||||
return VectorNormalize(out);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Reference in a new issue