Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Mattfrie1

Linedef Deletion Glitch on other ports

Recommended Posts

I haven’t seen much info floating around online about the Linedef Deletion bug in the other console ports of Doom outside of the Doom Wiki, so I figured to put together a video showcasing the glitch in the various other ports. To best test the glitch I picked Map 10: Containment Area which has the orphaned secret chainsaw room. Sending the Lost Souls from that room out into the void has roughly the same conditions for setting the bug off in the PSX and Saturn ports.

 

 

The Jaguar and GBA ports behave very similarly. The first thing that gets corrupted in these ports are sidedef textures and flats. The Jaguar version always defaults to ASH01 upon corruption. The GBA version does as well but can also render corrupted textures and flats as either full black, a completely unrelated texture or as a garbage pattern similar to the Medusa effect. I’ve also seen textures scroll vertically upwards as a result of corruption in the GBA port. Perhaps the most dramatic corruption of the whole video happens with the Jaguar version as well (starting at 6:30), when the point that all the linedefs converge at suddenly starts moving north on the automap at a quick rate before crashing.

 

Despite numerous testing, I have yet to see linedef corruption occur in the 32X version. I’m assuming that it is still possible in this version, but the game will always crash before any corruption gets to occur. Very rarely textures and flats will get corrupted, but most of the time the 32X will simply crash of a CPU Bus Error once the lost souls are out in the void. The only behavior unique to the bug in this port is sound effects corruption, which will replace random sound effects with ear-splitting static.

 

It is impossible to trigger the bug in the 3DO version as a quick check of the released source code shows the removed code that triggers the bug was retained (Line 329 in maputl.c). Going far out of bounds still has adverse effects in the 3DO version however. The game will slow to a crawl if too many things are traveling around outside the map and can still crash the game prompting the system to reset automatically. If the game doesn’t crash when out of bounds, linedefs and flats will display in a very weird fashion which is similar looking to the bug but has no adverse reaction on the map.

Share this post


Link to post

Some more findings on this in another thread which might be of interest: 


Basically I tried applying the fix to 'P_UnsetThingPosition' but still ran into corruption when going out of bounds. There are probably more places than that in the PSX engine where bounds checking is required.

 

Edit: nvm, that may be incorrect. Just had the realization that inlining at work here too (P_UnsetThingPosition is duplicated in a few places in the PSX EXE), so I need to reverse all the places where the function is inlined as well, and un-inline. Hopefully that should be enough to fix the issue...

Edited by intacowetrust

Share this post


Link to post

Looks like it wasn't inlining after all... There are 3 slightly different variants of the 'UnsetThingPosition' function in the PSX code and applying the bounds check fix to all of them appears to fix the problem for me. I was unable to reproduce linedef deletion after I made all 3 fixes.

 

I've marked the places where I fixed the code in the following commit, if you're curious:

https://github.com/BodbDearg/StationDoom/commit/b34c232fd833d5df23d652c6da6353424d62dc23#diff-670a319cfbc1e44e6bf73073a0886427

 

Share this post


Link to post
On 1/10/2020 at 2:56 AM, intacowetrust said:

Looks like it wasn't inlining after all... There are 3 slightly different variants of the 'UnsetThingPosition' function in the PSX code and applying the bounds check fix to all of them appears to fix the problem for me. I was unable to reproduce linedef deletion after I made all 3 fixes.

 

Those duplicated functions across the different modules are actually a legacy left over from the Jaguar port's architecture. The modules that were translated by Carmack into GAS for the Jerry DSP had to be self-contained, as they are loaded dynamically into the DSP's memory and cannot call out to other modules or to main memory (a system limitation of the Jag). So this entailed duplication of several utility functions into PM_ variants etc. Understanding these kinds of leftovers is a big help to knowing why some things seem so illogical/screwy in the console ports. :)

Share this post


Link to post
On 1/12/2020 at 8:22 PM, Quasar said:

 

Those duplicated functions across the different modules are actually a legacy left over from the Jaguar port's architecture. The modules that were translated by Carmack into GAS for the Jerry DSP had to be self-contained, as they are loaded dynamically into the DSP's memory and cannot call out to other modules or to main memory (a system limitation of the Jag). So this entailed duplication of several utility functions into PM_ variants etc. Understanding these kinds of leftovers is a big help to knowing why some things seem so illogical/screwy in the console ports. :)

 

Ah... I had initially assumed maybe it was an attempt at specializing the code for certain situations to try and save a few cycles but that also seemed like it wouldn't have yielded enough gains to be worth the effort. This on the other hand makes total sense - thank you for the insight!

Share this post


Link to post

There are 2 deletions that have become advantageous for speedrunning in the GBA port, one of them recently discovered. There is also a linedef deletion that happens in the current route, that isn't particularly useful.. but happens because the route is the shortest route to the exit (just allows pinkies to exit the map pretty much).


Map 11 and 12

 


Map 11's deletion isn't useful, but happens out of convenience. Getting out of the map near the rocket ammo in the room to the right, near the spawn, running to the exit on this side, deletes walls near the exit switch. Pinkies will attempt to run at you, leaving the level. You also enter level 11 on world record route with so little health, that being hit just a single time ends an entire attempt at a new record.

Map 12's deletion turns a level that generally takes 44 seconds IGT, and makes it 24 seconds for average pace. Keeping a correct distance from the level after exiting, and turning with the red room (where the yellow key is located), causes a wall to disappear where the yellow door is. This strategy was developed by myself, but there is a possibility of walking into an incorrect section, and causing the platform you teleport to from the plasma gun secret to mess up.. the platform you teleport to, if you walk in the wrong section, has the linedef for opening the door to the next area after you walk off the platform with the health orb, deleted entirely (Sometimes just from 1 or 2 sides).

 

 So pretty much an 85% success rate for me currently, but sometimes it can throw a whole run with the first wall not deleting, or the trigger you teleport to becoming useless.

 

 

The most recently discovered deletion was found back in December of 2019, and isn't the fastest route for the level or even the speedrun. But leads to a consistent sub 30 seconds IGT in level 9.

 

The route I currently use in speedruns involves going out of bounds behind the blue key door, and running at the wall behind the door in attempt to return into the level via an oversight in the engine.

The recent discovery involves a set up found by myself, and gathering the health orb near the bruiser brothers in the previous level. Performing a set up, allows you to walk straight to the final room in the level. You can see how it works below.

 


If you find anymore that might be useful, let me know. Level 13 linedef deletion for a time below 28 seconds would be a "Holy grail" of the speedrun, so to speak. Level 20, unholy cathedral, could also have potential to have something found, with the lowest time possible currently at 8 seconds with 'Swag cathedral' strat... but an average run taking 12 seconds by using a deathwarp. Finding a linedef deletion in the section where the swag cathedral strategy is preformed, even achieving a 10 or 9 second IGT run, would be a nice time save.

 

Swag cathedral strat: The fastest possible way to finish this level thus far, but involves passing through 3-4 walls while out of bounds. Easily a 1 in 20 sort of trick, right near the end of a run. Would be helpful to find linedefs to delete, near the area you exit from. Can be done in 8 seconds at fastest completion for any%.



Normal death warp strat: The currently used strat, which soon will be to slow for any% times to crawl any lower. Can be done in 11 seconds.

 

 

 

Level 7 could have possible linedef deletions also for consistent times to achieve sub 50 IGT, but more science will be needed, and I don't see it becoming faster then the current strategy.

Edited by Alexo

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

×