Weekly Development Report: Duriano
Date: July 1, 2026
Reporting Period: June 24 – July 1, 2026
1. Cloud Save Overhaul — Cross-Device, Multi-Account & Real-Money-Safe
- Field-Merge Resolver: Replaced the kills-proxy conflict heuristic (which discarded the losing save) with a no-progress-lost resolver — monotonic subsystems max/union, the fertilizer purchase ledger unions by order id, soft accumulators max, prefs/run use recency, and consent OR-merges.
- Real-Money-Safe Fertilizer Ledger:
CurrencyData now keeps an order-id PurchaseLedger (union-merged, idempotent) with received/spent accumulators; balance is reconstructable. Perma/unlock spends are derived from merged state so divergent offline spends can no longer under-count into free currency, and pre-ledger saves are seeded exactly once.
- Per-Account Local Saves: Each signed-in account now gets its own local save file (
PlayerSave_<accountId>) keyed by platform account id (GPGS player id on Android; iCloud auto-scoped on iOS). BindToAccount reconciles on auth — returning accounts switch to their slot, established accounts are authoritative, and brand-new accounts adopt the guest/legacy save then delete the default slot so it can't be inherited.
- Merge Hardening: Cross-device winner is chosen by wall-clock
LastSavedUtcTicks (with SaveCounter only as a skew tiebreak), merge only reconstructs the live balance when spend derivation is complete (keeps the newer balance + warns otherwise), and balances are floored at 0 so a negative can never be persisted. Pure FertilizerMath was extracted to an engine-free asmdef with EditMode tests.
2. Monetization — Subscriptions & Redeem Codes
- Google Play Subscriptions: Implemented the subscription feature with an upgrade path for players who already purchased the full game, plus instant character unlocks and an end-round fertilizer bonus for subscribers.
- Redeem Code System (client): Built the in-game redeem code system UI and flow.
3. LiveOps, Force-Update & Crash Reporting
- Force-Update Gate: Added a minimum-required-version check driven by Firebase Remote Config — below the remote minimum, the main-menu info panel shows a blocking popup whose only action opens the store page. Fails open when offline/Remote Config never readies so players are never soft-locked.
- Sentry Unity SDK: Integrated Sentry Unity (
io.sentry.unity 4.6.0).
- Firebase Crashlytics: Added Crashlytics with a crash-context helper (build bumped to
1.1.3).
4. Multiplayer Foundation — Phase 0 + Phase 1a
- Phase 0 (Network Bootstrap): Installed NGO + UGS Relay/Lobby, merged the co-op design, built the
MP_Spike scene + networked player prefab, migrated to the unified Multiplayer Services SDK, extracted an ISessionService seam for swappable connectivity, and fixed Input System movement with a unique auth profile per instance.
- Phase 1a (Enemy Targeting): Added a
PlayerRegistry + nearest-player enemy targeting — StateController and boss/special subclasses now target the nearest live player. Co-op gaps were logged and Phase 1a marked done.
5. Stability & Device Fixes
- Mali GPU Soft Particles (Poco X7 Pro): Fixed VFX/soft particles vanishing on Mali GPUs with an adaptive
SoftParticleGuard backstop sweep, catching particles on all VFX spawn paths with instant soft-particle spawn hooks (scoped to Poco X7 Pro).
- Gameplay Fixes: Prevented the Slow status effect from affecting the boss buff, fixed the
W011A5 damage value, and fixed the debug subscription UI position.
6. CI/CD, Build & Analytics
- Android AAB Lane: Added an upload lane for Android AAB with Unity IL2CPP symbols to Google Play, and enhanced the Google Play release stage with AAB + symbols validation.
- Analytics: Fixed Game Analytics headers/parameters and Firebase Analytics event calls (plus a Firebase error on other platforms).
- Versioning: Hotfix bumps to
1.1.2 and 1.1.3.
7. Backend / API (Duriano API)
- Redeem Code System: Added
redeemCodeFunction (claims a code inside a Firestore transaction with one-time-use + per-player validation; reward type/amount read from Firestore, never trusted from the client) and an addRedeemCodeFunction admin endpoint (code normalization + duplicate guard). Includes a backend & admin operations guide.
- Ranking Anti-Cheat: Server-side validation in
addRanking/updateLeaderboardStats — raw caps plus run-length-independent ratio caps (gold/kill, gold/sec, dmg/sec, kills/sec) derived from the real player distribution; endlessTime is the capped ranked metric. Rejected attempts are recorded to a blockedRankings collection, with ops scripts for cheater cleanup + archival.
Takeaway Note: A cloud-save-and-liveops milestone week for Duriano — cross-device multi-account saves with a real-money-safe merge resolver go live, subscriptions + redeem codes land, a Remote Config force-update gate and Sentry/Crashlytics crash reporting ship, multiplayer clears Phase 0 and Phase 1a, and the Mali soft-particle regression is squashed — while the API adds the redeem code backend and server-side ranking anti-cheat.
Generated by opencode