Boom Floor Secret Transfer Bug In GZDoom: A Deep Dive
Hey guys! Today, we're diving deep into a peculiar issue in GZDoom that affects Boom-format maps – specifically, the failure to transfer the secret sector property when using floor-changing specials. This can be super frustrating for both mappers and players, especially when it comes to maxing out maps with secret areas. Let's break down the problem, explore the technical details, and see why this bug is a real pain in the digital behind.
Understanding the Issue: Secret Sector Transfers in Boom
The heart of the issue lies in how GZDoom handles Boom's action 189, which is designed to transfer sector properties between different floor levels. In Boom-compatible maps, mappers often use this action to dynamically reveal secret areas by changing floor heights. The intended behavior is that when a floor is lowered (or raised), the secret property should transfer along with it, allowing players to trigger the secret sector by simply stepping onto the newly revealed area.
However, in GZDoom, this transfer often fails. While textures and other visual aspects might change correctly, the secret property itself doesn't always move. This means that even if you visually identify a secret area, you might not be able to trigger it, making the map uncompletable in terms of secrets found. This is a major bummer for completionists and can lead to a lot of head-scratching and frustration.
The issue was initially brought to light by Ravendesk on the DSDA-Doom Discord server, who provided a test map (secret_transfer.zip) that perfectly demonstrates the problem. This map utilizes a lowered floor for a secret that should be triggered when the floor is lowered. A switch is used to activate action 189, which is supposed to transfer the secret property to the main floor. However, GZDoom simply doesn't transfer the secret property, although the texture might change as expected. This discrepancy means that players can see the secret area but can't actually register it as found, making the map unmaxable.
Technical Deep Dive: Why the Transfer Fails
To understand why this is happening, we need to delve a bit into the technical side of things. The Eternity Engine, another Doom source port, has a separate code path for handling sector property transfers (Eternity Code). This separate handling might be the key to its success in correctly transferring the secret property. By examining Eternity's approach, we can gain insights into how GZDoom might be falling short.
The core problem likely lies in how GZDoom's code handles the transfer of sector properties during floor changes. The engine might be correctly transferring visual properties like textures, but it's failing to properly propagate the secret flag. This could be due to a missed step in the transfer logic, a misinterpretation of the Boom specification, or a simple oversight in the implementation.
Without diving into the GZDoom source code ourselves (which is a task for the engine developers), it's challenging to pinpoint the exact cause. However, the fact that Eternity handles this correctly suggests that there's a viable solution out there. Comparing the two implementations could be a fruitful avenue for identifying the bug in GZDoom.
The Frustration Factor: Why This Bug Matters
For mappers, this bug is a significant roadblock. Boom's floor-changing specials are a powerful tool for creating dynamic and engaging secret areas. The inability to reliably transfer the secret property limits the creativity of map designers and forces them to find workarounds, which may not always be feasible or elegant.
For players, especially those who enjoy hunting for secrets and achieving 100% completion, this bug is incredibly frustrating. Imagine meticulously exploring a map, discovering a hidden area, and then realizing that you can't actually trigger the secret. It's a deflating experience that can detract from the overall enjoyment of the game.
The fact that this bug makes maps with secret transfers unmaxable in GZDoom is a serious issue for the community. Completionists strive for that perfect playthrough, and a bug that prevents them from achieving this goal is a major letdown.
Replicating the Issue: How to See It for Yourself
If you want to see this bug in action, it's pretty straightforward to replicate. All you need is GZDoom and the test map provided by Ravendesk (secret_transfer.zip).
- Download the secret_transfer.zip file.
 - Extract the ZIP archive to a folder.
 - Launch GZDoom.
 - Load the secret_transfer.wad map.
 - Play through the map until you reach the area with the switch.
 - Activate the switch, which lowers the floor revealing the "secret".
 - Try to trigger the secret sector by stepping onto the lowered floor.
 
If the bug is present, you'll notice that the secret sector doesn't trigger, even though you can clearly see the secret area. This demonstrates the issue firsthand and highlights the problem with secret property transfers in GZDoom.
Possible Solutions and Workarounds
While a proper fix requires intervention from the GZDoom developers, there might be some workarounds that mappers can employ to mitigate the issue. These workarounds might not be perfect, but they can help to make maps more playable and secrets more discoverable.
- Redundant Secret Triggers: Mappers could include multiple triggers for the secret sector. For example, in addition to relying on the floor change, they could add a Line_SetSecret action to a nearby line or a hidden switch. This ensures that the secret can be triggered even if the floor transfer fails.
 - Scripting Solutions: ZDoom's scripting language, ZScript, offers powerful tools for manipulating game behavior. Mappers could use ZScript to manually transfer the secret property when the floor changes. This approach is more complex but offers greater control and reliability.
 - Alternative Level Design: In some cases, mappers might be able to redesign the level to avoid relying on floor-changing specials for secrets. This could involve using different mechanisms to reveal secret areas, such as hidden doors or teleporters.
 
However, these workarounds are just that – workarounds. They add complexity to the mapping process and might not be suitable for all situations. A proper fix in GZDoom's core code is the ideal solution.
The Path Forward: Getting This Bug Fixed
The first step in getting this bug fixed is to raise awareness and ensure that the GZDoom developers are aware of the issue. Bug reports like this one are crucial for bringing these problems to their attention.
The next step is for the developers to investigate the issue and identify the root cause. This might involve examining the GZDoom source code, comparing it to Eternity's implementation, and potentially debugging the engine while running the test map.
Once the bug is identified, a fix can be implemented. This might involve modifying the code that handles sector property transfers to ensure that the secret flag is correctly propagated during floor changes.
Finally, the fix needs to be tested to ensure that it resolves the issue without introducing any new problems. This testing process might involve community members and dedicated testers who can verify that the bug is no longer present.
In Conclusion: A Call to Action
The Boom floor changing bug, which prevents the transfer of the secret sector property in GZDoom, is a significant issue that affects both mappers and players. It limits the creativity of level design and can lead to frustrating gameplay experiences. While workarounds exist, a proper fix in GZDoom's core code is essential.
By raising awareness, providing detailed bug reports, and engaging with the GZDoom community, we can help to ensure that this bug is addressed. Let's work together to make GZDoom the best possible engine for playing Boom-format maps. Happy dooming, guys!