Steamworks.NET integration foundation + launch date May 26
== Launch date pushed: May 19 -> May 26, 2026 ==
== Launch date pushed: May 19 -> May 26, 2026 ==
Store page review went into a longer-than-expected queue and we want more wishlist runway. New target: Tuesday May 26, 8:00 ET. Date swept across the full doc/code surface:
- ROADMAP.md, KNOWN_ISSUES.md
- tools/write_launch_kit_docs.py (regen produces new dates)
- tools/write_steam_upload_doc.py
- websites/aiapocgame: LaunchCountdown.astro, index.astro, press.astro, privacypolicy.astro, stats.astro, welcome blog post (separate commit)
- ~/.claude/wiki: ai-apocalypse.md, project-ai-apocalypse.md (separate)
- Cadence dates shifted +7d to match (T-21 / T-14 / T-7 / etc.)
== Steamworks.NET integration: Route B foundation ==
User chose Route B (full SDK integration) over Route A (dashboard- only stubs). Land the foundation now so the wiring across the codebase can happen incrementally before May 26.
Pieces shipped:
-
Packages/manifest.json: added OpenUPM scoped registry +
com.rlabrecque.steamworks.net21.1.0 dependency. Unity will resolve on next refresh. (Package Manager → Refresh if stalled.) -
steam_appid.txt at project root: contains “4652030”. Required only for editor-time SteamAPI.Init — Steam-launched builds get the AppID from the launcher.
-
Assets/Scripts/Core/SteamManager.cs (new): bootstraps SteamAPI via RuntimeInitializeOnLoadMethod, runs callbacks each frame, handles RestartAppIfNecessary so direct-exe launches bounce through Steam. Wrapped in #if !DISABLESTEAMWORKS so the project still compiles if the package fails to resolve (define DISABLESTEAMWORKS in Scripting Define Symbols as a kill switch).
-
Assets/Scripts/Core/SteamAchievements.cs (new): façade with 29 named convenience methods (OnAct1BossDefeated, OnRunCompleteHell, OnFirstToken, etc.) mapped to the 25 achievement IDs in the spec doc + 4 path-progression. Safe to call before SteamManager finishes init — pending unlocks queue and replay when UserStatsReceived fires. Idempotent — re-unlocks are no-ops.
-
PostCombatHandler wiring (first batch of triggers):
- Act 1 boss kill -> OnAct1BossDefeated
- Full-run completion -> per-difficulty unlock (Normal/Nightmare/ Hell) + Trinity check (all 3 classes Normal-cleared)
- Run defeat -> OnFirstToken (when meta.tokens 0 -> >0) and OnDieAct1 (act 1, <=3 floors cleared)
Remaining wiring queued for follow-ups:
- Build-mastery achievements (need build-path detection at run end)
- Combat feats (no-damage clears, big-hit thresholds, triple-status)
- Meta unlocks count thresholds (10/30/all)
- Quirky/hidden (shop empty, last-card kill, zero-shield clear)
== User action items after pull ==
-
Open Unity → Package Manager → Refresh. Verify “com.rlabrecque.steamworks.net” 21.1.0 appears under Project + imports cleanly. If not: Window → Package Manager → ”+ Add package from name” → “com.rlabrecque.steamworks.net” → 21.1.0.
-
Configure achievements in Steamworks dashboard: App 4652030 → Stats & Achievements → New Achievement (x25). IDs match what’s in SteamAchievements.cs. Display names + icons from AI_Apocalypse_Achievement_Spec.docx.
-
Configure Steam Cloud (Auto-Cloud): App 4652030 → Cloud → Auto-Cloud rule: Path: %USERPROFILE%\AppData\LocalLow\Scuffed Studios\AI Apocalypse\saves
Pattern: *.json -
Configure Steam Input default keyboard layout: App 4652030 → Steam Input API Configuration → use the “default keyboard configuration” template.
Co-Authored-By: Claude Opus 4.7 (1M context) [email protected]
Commit 1b8b411 by astafford8488.