- Fixed: P_RailAttack() passed the wrong angle variable to P_TraceBleed().

SVN r1490 (trunk)
This commit is contained in:
Randy Heit 2009-03-20 01:40:28 +00:00
parent 18b4577bbd
commit 7a06d3a71a
2 changed files with 32 additions and 27 deletions

View file

@ -1,4 +1,7 @@
March 18, 2009 (Changes by Graf Zahl) March 19, 2009
- Fixed: P_RailAttack() passed the wrong angle variable to P_TraceBleed().
March 18, 2009 (Changes by Graf Zahl)
- Fixed: S_StopSound may not assume that after stopping a sound channel - Fixed: S_StopSound may not assume that after stopping a sound channel
its link to the next item in the list is still valid. its link to the next item in the list is still valid.
- Fixed typo in src/CMakeLists.txt. - Fixed typo in src/CMakeLists.txt.

View file

@ -3466,6 +3466,33 @@ void P_RailAttack (AActor *source, int damage, int offset, int color1, int color
8192*FRACUNIT, MF_SHOOTABLE, ML_BLOCKEVERYTHING, source, trace, 8192*FRACUNIT, MF_SHOOTABLE, ML_BLOCKEVERYTHING, source, trace,
TRACE_PCross|TRACE_Impact, ProcessRailHit); TRACE_PCross|TRACE_Impact, ProcessRailHit);
// Hurt anything the trace hit
unsigned int i;
AActor *puffDefaults = puffclass == NULL? NULL : GetDefaultByType (puffclass);
FName damagetype = (puffDefaults == NULL || puffDefaults->DamageType == NAME_None) ? FName(NAME_Railgun) : puffDefaults->DamageType;
for (i = 0; i < RailHits.Size (); i++)
{
fixed_t x, y, z;
x = x1 + FixedMul (RailHits[i].Distance, vx);
y = y1 + FixedMul (RailHits[i].Distance, vy);
z = shootz + FixedMul (RailHits[i].Distance, vz);
if ((RailHits[i].HitActor->flags & MF_NOBLOOD) ||
(RailHits[i].HitActor->flags2 & (MF2_DORMANT|MF2_INVULNERABLE)))
{
if (puffclass != NULL) P_SpawnPuff (source, puffclass, x, y, z, source->angle - ANG90, 1, PF_HITTHING);
}
else
{
P_SpawnBlood (x, y, z, source->angle - ANG180, damage, RailHits[i].HitActor);
P_TraceBleed (damage, x, y, z, RailHits[i].HitActor, source->angle, pitch);
}
P_DamageMobj (RailHits[i].HitActor, source, source, damage, damagetype);
}
// Spawn a decal or puff at the point where the trace ended.
if (trace.HitType == TRACE_HitWall) if (trace.HitType == TRACE_HitWall)
{ {
SpawnShootDecal (source, trace); SpawnShootDecal (source, trace);
@ -3491,32 +3518,7 @@ void P_RailAttack (AActor *source, int damage, int offset, int color1, int color
} }
} }
// Now hurt anything the trace hit // Draw the slug's trail.
unsigned int i;
AActor *puffDefaults = puffclass == NULL? NULL : GetDefaultByType (puffclass);
FName damagetype = (puffDefaults == NULL || puffDefaults->DamageType == NAME_None) ? FName(NAME_Railgun) : puffDefaults->DamageType;
for (i = 0; i < RailHits.Size (); i++)
{
fixed_t x, y, z;
x = x1 + FixedMul (RailHits[i].Distance, vx);
y = y1 + FixedMul (RailHits[i].Distance, vy);
z = shootz + FixedMul (RailHits[i].Distance, vz);
if ((RailHits[i].HitActor->flags & MF_NOBLOOD) ||
(RailHits[i].HitActor->flags2 & (MF2_DORMANT|MF2_INVULNERABLE)))
{
if (puffclass != NULL) P_SpawnPuff (source, puffclass, x, y, z, source->angle - ANG180, 1, PF_HITTHING);
}
else
{
P_SpawnBlood (x, y, z, source->angle - ANG180, damage, RailHits[i].HitActor);
}
P_DamageMobj (RailHits[i].HitActor, source, source, damage, damagetype);
P_TraceBleed (damage, x, y, z, RailHits[i].HitActor, angle, pitch);
}
end.X = FIXED2FLOAT(trace.X); end.X = FIXED2FLOAT(trace.X);
end.Y = FIXED2FLOAT(trace.Y); end.Y = FIXED2FLOAT(trace.Y);
end.Z = FIXED2FLOAT(trace.Z); end.Z = FIXED2FLOAT(trace.Z);