Nuke Mine E1M2 teleport hell

Bugs that have been investigated and resolved somehow.

Moderator: GZDoom Developers

Forum rules
Please don't bump threads here if you have a problem - it will often be forgotten about if you do. Instead, make a new thread here.
Post Reply
Gez
 
 
Posts: 17946
Joined: Fri Jul 06, 2007 3:22 pm

Nuke Mine E1M2 teleport hell

Post by Gez »

In Nuke Mine, which already has some compatibility issues with ZDoom, in E1M2 there is a teleporter pad that, once crossed, sends to a little platform standing in a pool of nukage, fenced by BRNBIGC borders. This platform is crossed by two linedefs (1107 and 1108) which are of the WR Teleport kind, and the teleport destination is right at their intersection point.
Image
In ZDoom, you always trigger them as soon as you move, so you get stuck at this point. You can shoot some zombies (and get shot by them), but not finish the level without no-clipping out that place. In vanilla and other ports, this isn't a problem.
Last edited by Gez on Thu Sep 13, 2012 3:59 am, edited 1 time in total.
User avatar
randi
Site Admin
Posts: 7749
Joined: Wed Jul 09, 2003 10:30 pm
Contact:

Re: Nuke Mine E1M2 teleport hell

Post by randi »

Well, that's a dumb layout. Should I just disable the teleporter actions on those lines, since you can still get back to that room without teleporting?
User avatar
Graf Zahl
Lead GZDoom+Raze Developer
Lead GZDoom+Raze Developer
Posts: 49252
Joined: Sat Jul 19, 2003 10:19 am
Location: Germany

Re: Nuke Mine E1M2 teleport hell

Post by Graf Zahl »

I think it's probably best to do so.
Gez
 
 
Posts: 17946
Joined: Fri Jul 06, 2007 3:22 pm

Re: Nuke Mine E1M2 teleport hell

Post by Gez »

I've just found out that if I change the P_PointOnLineSide comparison from a > 0 to a >= 0, the teleport lines work like vanilla again. So (I assume there's a reason it's not >= that's used to begin with), maybe there could be a compatibility option kicking in at P_TryMove(), something along those lines:

Old:

Code: Select all

			// see if the line was crossed
			side = P_PointOnLineSide (thing->x, thing->y, ld);
			oldside = P_PointOnLineSide (oldx, oldy, ld);
New:

Code: Select all

			// see if the line was crossed
			if (insert new compat option here)
			{
				side = P_PointOnLineSide2 (thing->x, thing->y, ld);
				oldside = P_PointOnLineSide2 (oldx, oldy, ld);
			}
			else
			{
				side = P_PointOnLineSide (thing->x, thing->y, ld);
				oldside = P_PointOnLineSide (oldx, oldy, ld);
			}
User avatar
randi
Site Admin
Posts: 7749
Joined: Wed Jul 09, 2003 10:30 pm
Contact:

Re: Nuke Mine E1M2 teleport hell

Post by randi »

The comparision uses > 0 so that points on the line count as in front of it. This is mostly the same behavior as Doom, except they goofed up their "optimized" code and certain angles count being on the line as behind it. (I think that's only for cardinal directions, though, not diagonal lines). Most likely, it's just differences in precision between ZDoom's routine and Doom's, where Doom thinks you're behind some of the lines instead of on them.

So, yes, your fix fixes it by moving points that are on top of lines so that they are behind lines. But that was never correct, even in Doom. Since it's just a dumb layout all around, I'd rather not do any kludges to make it work.

(FWIW, in ZDoom, you can strafe directly right after the teleport without reteleporting yourself.)
Gez
 
 
Posts: 17946
Joined: Fri Jul 06, 2007 3:22 pm

Re: Nuke Mine E1M2 teleport hell

Post by Gez »

randi wrote:But that was never correct, even in Doom.
compat_anybossdeath, compat_limitpain, and compat_notossdrops are arguably the only compatibility options for which the same thing couldn't be said. :wink:
User avatar
randi
Site Admin
Posts: 7749
Joined: Wed Jul 09, 2003 10:30 pm
Contact:

Re: Nuke Mine E1M2 teleport hell

Post by randi »

Fixed in r3871 by removing the specials from those lines.
Post Reply

Return to “Closed Bugs [GZDoom]”