Skip to content

fix(avatar): preserve fallback portrait pose and workbench animation - #358

Merged
ifBars merged 2 commits into
betafrom
fix/beta-il2cpp-reload-portraits
Oct 9, 2026
Merged

ifBars merged 2 commits into
betafrom
fix/beta-il2cpp-reload-portraits

Conversation

@ifBars

@ifBars ifBars commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner

IL2CPP custom NPC portraits can disappear after returning to Menu and reloading. The fallback rig is cloned from a live avatar: its native Awake caches a transient hip position, and native Update restores that position after the clone has been rebound upright. A larger probe reproduced completely blank captures, with the head dropping from about 1.62 m to 0.80 m during the capture wait.

Keep gameplay animation initialization disabled on the owned fallback clone, rebind and freeze its Animator, then record the rebound hip position in the native saved-hip field. Native Update now retains the upright pose. Keep serialized capture and the Update/end-of-frame wait intact; no per-capture rebind is added. The separate workbench preview re-enables its own cloned animators so pose controls still work.

Fixes #356.

Validation

  • SteamCMD-validated beta 0.4.7f11: IL2CPP build 25770926 and Mono Alternate build 25770882; MelonLoader 0.7.3.
  • Final source combined with fix(npc): prepare IL2CPP client customer and dealer prefabs #359, perf: index scene objects instead of scanning for every custom NPC #354 and perf: keep derived-type scans until an assembly loads #355: 32 custom NPC types across two same-process loads in each runtime. All 64 captures per runtime are nonblank, all icons remain present, and each NPC has one native NPC component. Captured and saved hip positions agree to four decimal places in every capture. Reload images were inspected.
  • Separate controlled appearance checks on both runtimes: eight captures per runtime across two loads, alternating gender 0/1 and weight 0.36/0.9. Native face blend-shape weights remain 0/100 and 36/90 respectively; portraits remain nonblank.
  • Reproduced the original fix's workbench regression: disabled preview animators leave stand/sit/crouch at the same rendered head position. Final preview animators are enabled; stand, sit, crouch and return-to-stand paths were exercised on both loads and runtimes. Crouch visibly lowers the head and returning to stand restores it. Preview images were inspected.
  • Final local suites: this PR passes 775 MonoMelon and 749 Il2CppMelon contract tests; combined integration passes 792 Mono and 766 IL2CPP. Builds have no warnings/errors; automatic deployment is disabled.
  • Independent Claude Code Opus 5.5 review traced the native saved-hip lifecycle and identified the preview regression. Compared capture invariants with known-good commit 410b552; its authored non-gameplay rig avoided cloning transient gameplay state.
  • The final stress and appearance checks use an isolated copy of a completed save originally created on 0.4.6f8 Alternate. An earlier fresh f11 Mono two-load check passed, but it predates this follow-up. Fresh IL2CPP co-op reload/rejoin remains inconclusive: the client did not reach the harness gameplay-readiness gate before the host peer timeout. Real Steam transport is untested. Client initialization is addressed separately in fix(npc): prepare IL2CPP client customer and dealer prefabs #359; baseline native NPC.get_ID Contacts warnings remain.
  • These checks do not establish a repeatable loading-time improvement or a blanket absence of regressions. Disposable probes and game-derived files are excluded from the commit. Game runs stop after results and have an external timeout.

Compatibility

No public/protected symbols, parameter names, NPC IDs, save formats, or network payloads change. Native scene rigs and gameplay avatars are untouched. Explicit icons, generator selection, queue ownership, capture timing, appearance application, and spawn/finalization order are preserved. The saved-hip correction is limited to the owned fallback rig; animator re-enabling is limited to the separate workbench preview clone.

@ifBars ifBars added bug Something isn't working beta A game update on the beta & alternate-beta steam branches labels Oct 8, 2026
@coderabbitai

coderabbitai Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: f89aec20-7fa2-423f-bf89-d165aeb0e74c

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@ifBars ifBars changed the title fix(avatar): preserve fallback mugshot pose after reload fix(avatar): preserve fallback portrait pose and workbench animation Oct 8, 2026
@ifBars
ifBars merged commit 6663f8f into beta Oct 9, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

beta A game update on the beta & alternate-beta steam branches bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant