More broken BOOMisms

I reported not too long ago on discovering that several classes of BOOM generalized linedefs have odd quirks in the way they do or do not tolerate use of zero tags and other strangeness.

Now I'm here to discuss another problem I've found while working on a new line special system for Eternity. In vanilla DOOM there was a non-working line type, type 40, which was supposed to raise the ceiling and lower the floor of a sector at the same time. Romero must have forgotten that DOOM had a one-thinker-per-sector limit when he wrote this, as it never worked - only the ceiling would ever move.

Along comes BOOM team, and in addition to this broken W1 Raise Ceiling, Lower Floor, they added the following variants of it which are all meant to work:

  • 151 WR Raise Ceiling, Lower Floor
  • 166 S1 Raise Ceiling, Lower Floor
  • 186 SR Raise Ceiling, Lower Floor
The first line type works as expected. The second two, however, share a bizarre quirk: Jim Flynn accidentally coded them in a way that fails due to short-circuiting logic in C:
if(EV_DoCeiling(line, raiseToHighest) ||
   EV_DoFloor(line, lowerFloorToLowest))
What happens is, if the ceiling is not occupied, the ceiling will be raised. The OR operation "||" is then satisfied, so the second condition is never evaluated - meaning the floor won't lower.

Now, if the ceiling is busy already, the OR *will* evaluate the second condition, and only the floor will be lowered.

To compound these mistakes, BOOM team forgot to document these line types at all in boomref.txt, so they're largely unknown!

Share this post


Link to post

Would not want to duplicate that behavior, so the first question is:
did any wads make use of it?
I suspect not, because no one knew of them.

If not, then I would only include them if the behavior was fixed
to something useful.
Are those linedef numbers unused in most of the ports?

Oh, is this a source ports or an editing kind of discussion ??

EDIT: after a late check, it appears that DoomLegacy implements these in exactly the way they appear in Boom.

Share this post


Link to post
Gez said:

I think there are maps that rely on these Boom lines not working since this had to be done in ZDoom way back in 2010.

Here's the original bug report.

Heh, it's always fun to go back and see people finding the same stuff you stumbled over later. I was not really even aware of these types' existence, given the lack of correct documentation (seems they're listed as just ceiling types??). Though of course they've always been in the full list of linedef types for EE, I never had cause to pay them much attention - until now.

Share this post


Link to post
Quasar said:

To compound these mistakes, BOOM team forgot to document these line types at all in boomref.txt, so they're largely unknown!


Actually, they did, under this section ...

Section 3.3 Ceiling linedef types

Which states ...

# Class Trig Dir Spd *Chg *Mdl Mon Crsh Target

186 Ext SR Up Slow None -- No No Highest Neighbor Ceiling
166 Ext S1 Up Slow None -- No No Highest Neighbor Ceiling
151 Ext WR Up Slow None -- No No Highest Neighbor Ceiling

Interestingly, it makes no mention of lowering the floor.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now