coelckers / prboom-plus

This is a cleaned up copy of the PrBoom+ SVN repository as a courtesy for those interested in forking that port
293 stars 117 forks source link

[UMAPINFO bossaction] Conventional W* specials don't execute #422

Open ioan-chera opened 2 years ago

ioan-chera commented 2 years ago

Contrary to expectations, the conventional (regular and extended) W1 and WR specials fail to execute from UMAPINFO bossaction. This is because, just like in A_LineEffect (which suffers the same problem, but there you can't do anything about it, due to backward compatibility), P_UseSpecialLine is checked first, then P_CrossSpecialLine. Unfortunately, apart from some intermediary (but important checks), the function ends up returning true even if the special is not a valid S number, but either a W number or an invalid non-generalized number. Generalized W* specials do however lead to returning false, so those may just work (didn't test)! Same thing if other checks fail, such as zero-tag protection.

Here's a UMAPINFO to test with (same wad is also attached):

map E3M8
{
    bossaction = clear
    bossaction = BaronOfHell, 63, 4         // SROpenDoorWaitClose
    bossaction = SpiderMastermind, 90, 4    // WROpenDoorWaitClose
}

Use doom.wad, select skill 4 and go to E3M8. Cheat yourself some weapons and god mode, do NOT open the central building, and kill the baron. The central doors will open. Wait for them to close, then kill the spiderdemon. The central doors will fail opening! If however you give it the same special of 63, they will open.

I don't know which is better, to either fix it or to document it as a limitation… bossaction.wad.zip

JadingTsunami commented 2 years ago

See: #176

This has been known for a long time. But it requires a new complevel (which no one wants to do) or a UMAPINFO spec version (which has no clear consensus).