- fixed: MF3_DONTSPLASH disabled all terrain effects, not just the splash.

Untested for now because the report came without any example to check it with.

(cherry picked from commit 0c5a47ac90)
This commit is contained in:
Christoph Oelckers 2018-06-02 12:10:06 +02:00 committed by drfrag666
parent 5eebbe0b1a
commit b18d198cf6

View file

@ -6518,9 +6518,6 @@ DEFINE_ACTION_FUNCTION(AActor, GetFloorTerrain)
bool P_HitWater (AActor * thing, sector_t * sec, const DVector3 &pos, bool checkabove, bool alert, bool force)
{
if (thing->flags3 & MF3_DONTSPLASH)
return false;
if (thing->player && (thing->player->cheats & CF_PREDICTING))
return false;
@ -6609,48 +6606,51 @@ foundone:
if (thing->Mass < 10)
smallsplash = true;
if (smallsplash && splash->SmallSplash)
if (!(thing->flags3 & MF3_DONTSPLASH))
{
mo = Spawn (splash->SmallSplash, pos, ALLOW_REPLACE);
if (mo) mo->Floorclip += splash->SmallSplashClip;
}
else
{
if (splash->SplashChunk)
if (smallsplash && splash->SmallSplash)
{
mo = Spawn (splash->SplashChunk, pos, ALLOW_REPLACE);
mo->target = thing;
if (splash->ChunkXVelShift != 255)
mo = Spawn(splash->SmallSplash, pos, ALLOW_REPLACE);
if (mo) mo->Floorclip += splash->SmallSplashClip;
}
else
{
if (splash->SplashChunk)
{
mo->Vel.X = (pr_chunk.Random2() << splash->ChunkXVelShift) / 65536.;
mo = Spawn(splash->SplashChunk, pos, ALLOW_REPLACE);
mo->target = thing;
if (splash->ChunkXVelShift != 255)
{
mo->Vel.X = (pr_chunk.Random2() << splash->ChunkXVelShift) / 65536.;
}
if (splash->ChunkYVelShift != 255)
{
mo->Vel.Y = (pr_chunk.Random2() << splash->ChunkYVelShift) / 65536.;
}
mo->Vel.Z = splash->ChunkBaseZVel + (pr_chunk() << splash->ChunkZVelShift) / 65536.;
}
if (splash->ChunkYVelShift != 255)
if (splash->SplashBase)
{
mo->Vel.Y = (pr_chunk.Random2() << splash->ChunkYVelShift) / 65536.;
mo = Spawn(splash->SplashBase, pos, ALLOW_REPLACE);
}
if (thing->player && !splash->NoAlert && alert)
{
P_NoiseAlert(thing, thing, true);
}
mo->Vel.Z = splash->ChunkBaseZVel + (pr_chunk() << splash->ChunkZVelShift) / 65536.;
}
if (splash->SplashBase)
if (mo)
{
mo = Spawn (splash->SplashBase, pos, ALLOW_REPLACE);
S_Sound(mo, CHAN_ITEM, smallsplash ?
splash->SmallSplashSound : splash->NormalSplashSound,
1, ATTN_IDLE);
}
if (thing->player && !splash->NoAlert && alert)
else
{
P_NoiseAlert (thing, thing, true);
S_Sound(pos, CHAN_ITEM, smallsplash ?
splash->SmallSplashSound : splash->NormalSplashSound,
1, ATTN_IDLE);
}
}
if (mo)
{
S_Sound (mo, CHAN_ITEM, smallsplash ?
splash->SmallSplashSound : splash->NormalSplashSound,
1, ATTN_IDLE);
}
else
{
S_Sound (pos, CHAN_ITEM, smallsplash ?
splash->SmallSplashSound : splash->NormalSplashSound,
1, ATTN_IDLE);
}
// Don't let deep water eat missiles
return plane == &sec->floorplane ? Terrains[terrainnum].IsLiquid : false;
@ -6690,9 +6690,6 @@ bool P_HitFloor (AActor *thing)
return false;
}
if (thing->flags3 & MF3_DONTSPLASH)
return false;
// don't splash if landing on the edge above water/lava/etc....
DVector3 pos;
for (m = thing->touching_sectorlist; m; m = m->m_tnext)