bnb2_na.lmp desyncs in vanilla
Brought to you by:
e6y
Demo: http://doomedsda.us/lmps/223/9/bnb-1553.zip
WAD: BNBEYOND.WAD http://doomedsda.us/wad223.html
A skill 3 / -complevel 3 demo recorded with v2.5.0.9. Plays back to the tally screen with all versions of PrB+ I have tested, as far back as v2.2.6.26. Desyncs in vanilla and Choco v1.6.0 shortly after 10:19 (teleporting to the lone Baron on a ledge in the main courtyard). In PrB+ the Baron dies, in vanilla it doesn't.
Just before teleporting to the baron, the player has jumped onto a rising floor, and while fighting a cacodemon, his head bumps on the underside of the slight overhang behind him. At this point:
- in pr+ the floor changes direction and sinks back down to the water level;
- in c-d the floor just stops moving immediately.
This is enough to throw the player slightly out of position and upset the rest of the demo.
--
The difference is the value of plat->low passed to T_MovePlane in the "down" case of T_PlatRaise. In vanilla EV_DoPlat leaves this uninitialised. Boom deliberately sets it to the sector's initial floor height to fix a bug:
//jff 1/26/98 Avoid raise plat bouncing a head off a ceiling and then
//going down forever -- default low to plat height when triggered
plat->low = sec->floorheight;
I verified that adding this line into EV_DoPlat in Chocolate Doom allows it to play the demo back to the intermission screen.
I leave it to entryway to decide what he wants to do here but this strikes me as needing the same kind of fix as the crushing stairs problem; that is doing nothing but printing a big warning about potential desyncs in vanilla, as there's no real way to guess an undefined value and be correct in all cases.
Thank you for looking into it, rjy. It seems that this is not a new issue for e6y:
https://sourceforge.net/tracker/?func=detail&aid=1602503&group_id=148658&atid=772943
r4513: I went ahead and implemented a warning when a raise-and-change plat direction reversal is detected. No attempt to emulate it; no way to know what the real value should be. At least if your demo goes out of sync you know why.