Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Patch for UndercaveMapComponent (pit gate) (#470)
Info on `UndercaveMapComponent:MapComponentTick` and why it needs patching: - RNG calls after current map/visible camera area checks - Majority of the RNG calls are visual/audio effects only - `TriggerCollapseFX` does have an effect on simulation by spawning collapsed mountain roof - The collapsing rocks have minimal impact on the game, as they avoid player pawns Fixing RNG is easy by just pushing/popping the state. Fixing the collapsed mountain roof is more complex. Possible solutions: - Disable rock collapse completely - Disable current map checks (suboptimal for performance) - Disable the existing calls to `TriggerCollapseFX` and call it in a deterministic way (used in this PR) Information about the patch: - The transpiler will make the call to `Rand.MTBEventOccurs` always fail, making so `TriggerCollapseFX` is never called - This could be further improved by removing the RNG call and the current map check altogether to improve performance, but would be more complex - The prefix and postfix push/pop RNG state, making sure the ticking code doesn't mess with the RNG state - The postfix re-implements the call to `TriggerCollapseFX` in a deterministic way - If the current player is not looking at the current map, it will be called with `0` as both arguments to prevent additional effects from triggering - The call to the method is surrounded by RNG push/pop state, as the amount of RNG calls will differ if the player is not looking at the map - It's safe as the simulation-affecting RNG calls happen first - The call is currently unseeded, but could be easily seeded with `Gen.HashCombineInt(Find.TickManager.TicksGame, __instance.map.uniqueID)` if we care about having a seed here Remaining issues with `UndercaveMapComponent`/Pit Gate: - The rock collapse has additional check to not drop rocks on player faction pawns. However, I assume this won't work properly with Multifaction, which could end up crushing pawns of some players.
- Loading branch information