diff --git a/docs/rh-log.txt b/docs/rh-log.txt index 5bb9a335f..c370b35e2 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,4 +1,6 @@ March 4, 2009 +- Fixed: When using BOOM-style sector flags and specials together, the + special was ignored unless it was "secret". - Fixed: One byte is too short for DUMB_IT_SIGRENDERER to store song tempo. Changed it to a word. - Went back to using RDTSC for timing on Win32. Ironically, diff --git a/src/p_xlat.cpp b/src/p_xlat.cpp index b553350d0..da5695ece 100644 --- a/src/p_xlat.cpp +++ b/src/p_xlat.cpp @@ -343,17 +343,22 @@ int P_TranslateSectorSpecial (int special) if (newmask) { special &= ~newmask; - if (SectorMasks[i].op == 1) newmask <<= SectorMasks[i].shift; - else if (SectorMasks[i].op == -1) newmask >>= SectorMasks[i].shift; - else if (SectorMasks[i].op == 0 && SectorMasks[i].shift ==1) newmask = 0; + if (SectorMasks[i].op == 1) + newmask <<= SectorMasks[i].shift; + else if (SectorMasks[i].op == -1) + newmask >>= SectorMasks[i].shift; + else if (SectorMasks[i].op == 0 && SectorMasks[i].shift == 1) + newmask = 0; mask |= newmask; } } if ((unsigned)special < SectorTranslations.Size()) { - if (SectorTranslations[special].bitmask_allowed && mask) special = 0; - else special = SectorTranslations[special].newtype; + if (!SectorTranslations[special].bitmask_allowed && mask) + special = 0; + else + special = SectorTranslations[special].newtype; } return special | mask; }