Weekly Development Report: Duriano
Date: July 8, 2026
Reporting Period: July 1 – July 8, 2026
1. Cloud Save & Cross-Device Sync Hardening
- Conflict Merge Instead of Discard: When two devices play the same account, a cloud push no longer overwrites the other device's progress — Android GPGS conflicts now field-merge both cloud versions plus the pending local save (
GameDataMerger) instead of the old longest-playtime heuristic that silently dropped one side; iOS field-merges with the current iCloud KVS value before writing (iCloud KVS has no conflict detection). Added a CloudSaveJsonMerger JSON wrapper that skips unparseable payloads.
- Identity & Rename Safety: A default/unset player name or flag can no longer beat a real one during merge (fixes fresh installs winning with "Unknown Viking"), and
LastNameChangeUtcTicks is max-merged so a merge can't reopen a spent rename cooldown.
- Run Winner Fix: A finished/empty run can no longer beat an unfinished one in the merge ordering.
- Guest & First-Sign-In: Declining the Google sign-in prompt now switches the session to the guest slot (forgetting the remembered account) with a localized information-panel warning, and first account sign-in adopts the legacy/guest default save. Ranked rename cooldown is now stored per-account instead of in PlayerPrefs.
2. Crash & ANR Fixes
- Pause ANR (FMOD): Fixed the app-pause ANR (
surfaceDestroyed watchdog) by pre-warming FMOD's core mixerSuspend/mixerResume P/Invoke bindings during load — a net no-op that moves the dlopen/dlsym + plugin init out of the surface-teardown critical section.
- God & Fate Panel: Prevented an infinite-recursion crash when opening the God & Fate info panel.
- RockTrap / Debris Physics: Re-cached stale crack rigidbodies before reactivating a pooled
RockTrap (avoids writing constraints on a dangling native object), added a null check, and restored pooled debris colliders on deactivation (OnDisable) instead of a timed window that the coroutine could miss.
- Pooling: Cleared pooled button events when fetched from the pool and stopped skipping slots when returning container children to the pool.
3. Gameplay & Balance
- Endless Re-Balance: Re-balanced enemy endless mode.
- PC011 Stats: Stats now calculate against a max level of 50.
- Scene Load Timeout: Excluded background time from the scene-load timeout.
4. Analytics & UI
- Game Analytics Expansion: Added more analytics events, grouped/batched data by event name before sending, removed the
screen_view event, and fixed IAP analytics params.
- UI Fixes: Fixed a text-scaling null ref and missing script on the purchase-fertilizer UI.
- Localization: Pointed the Google Sheets localization sync at a dedicated devtools OAuth client; added update-info-panel localization data and moved the update check to scene init (cached result).
5. Build, Tooling & CI/CD
- Engine Bump: Upgraded Unity to
6000.3.19f1 (resolves the RockTrap reactivation crash — Unity issue UUM-143658).
- Versioning: Hotfix bumps from
1.1.4 through 1.1.8.
- Android: Enabled resizable activity (Google Play Console recommendation); changed the Sentry package install method.
- Addressables Build Pipeline Overhaul: Reworked the CI
Builder.cs and Jenkinsfile to stabilize the addressables/player build — enabled build-target-group switching and added the -buildTarget StandaloneWindows64 flag, disabled/locked the automatic Addressables build state during the player build to prevent pipeline conflicts (restoring it afterward), and removed the now-redundant manual state management.
- iOS / Jenkinsfile: Ensured the iOS module installs even when the Unity Editor already exists, commented out the Unity module-install logic in the iOS Jenkinsfile, and increased the Git clone timeout.
Takeaway Note: A stabilization-and-release week for Duriano — cross-device cloud-save conflicts now merge instead of overwriting, a batch of crash/ANR fixes (notably the FMOD pause ANR and RockTrap/debris physics crashes) lands alongside a Unity 6000.3.19f1 engine bump, endless mode is re-balanced, analytics get expanded and batched, and the CI Addressables build pipeline is overhauled to stop build-state conflicts — carrying the build from 1.1.4 to 1.1.8.
Generated by opencode