From 0c5a47ac9035bf7968bcd6cf112ef97df0a3f771 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 2 Jun 2018 12:10:06 +0200 Subject: [PATCH] - 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. --- src/p_mobj.cpp | 69 ++++++++++++++++++++++++-------------------------- 1 file changed, 33 insertions(+), 36 deletions(-) diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index a00cb7f10b..2f8b89a843 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -6504,9 +6504,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; @@ -6595,48 +6592,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; @@ -6676,9 +6676,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)