Headless particle templates + Aurora DieOnDetonate desyncs - #6
Open
Okladnoj wants to merge 4 commits into
Open
Conversation
The headless dummy manager skipped particle template loading with retail compatibility disabled. Game logic branches on template pointers - the Spectre Gunship gattling aim position is only advanced when its strafe FX template exists - so a headless client silently diverged in logic CRC from a regular client, shifting the logic random stream and going out of sync. Keep init and reset intact so templates are always loaded; particle updating, rendering and serialization stay disabled as before.
…ile dies Two clients that disagree on MissileCallsOnDie for the same weapon diverge at the frame its projectile detonates: one runs the die modules right away, the other a frame later in doKillSelfState. Nothing in the CRC dump pointed at the flag, so the divergence surfaced only as extra debris and a shifted object id. Record the flag in the CRC dump when a projectile detonates, and log the forced value at load time. Use the no-counter CRC log so a client that lacks the fix does not shift every ordinal in the frame.
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
Owner
Author
|
There part of TheSuperHackers#2670 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two logic-CRC desyncs found by playing a recorded replay back headless and comparing per-frame CRC across machines (Windows x86 ↔ macOS ARM64). Neither is floating-point related.
Fixes
Headless dummy manager skipped particle templates (
ParticleSys.h)With retail compatibility off,
ParticleSystemManagerDummyno-op'dinit()/reset(), so templates never loaded. Logic branches on template pointers — e.g. the Spectre Gunship gattling aim inSpectreGunshipUpdate— so a headless client's logic CRC drifted from a regular client's. Templates now always load; only update/render/serialization stay disabled.Aurora fuel bomb ran its die modules a frame late (
Weapon.cpp)Clients that disagree on
dieOnDetonatesplit at the detonation frame: die modules run indetonate()for one, a frame later indoKillSelfStatefor the other.SupW_AuroraFuelBombWeaponomitsMissileCallsOnDiein INI, so the flag was false anddetonate()skipped the die path. Forcedm_dieOnDetonate = TRUEfor that weapon as a stopgap — revert once INI can carryMissileCallsOnDie = yes.Diagnostics
CRCDEBUG_LOG_NOCOUNTER/addCRCDebugLineNoCounter: logs a CRC line without bumping the per-frame counter, so a client missing a fix doesn't shift every following ordinal.MissileAIUpdate::detonate()records object, weapon anddieOnDetonate.