Expansion Model
Status: IN FLIGHT — Direction locked 2026-05-25; gap-audit complete (Round 3); cost-curve + dormant-fidelity LOCKED 2026-05-26 (Phase 0 epic 20356); Phase 1 (voluntary-vs-bankruptcy restart split) SHI
Last updated: October 27, 2026
Zoo Simulator — Expansion Model
Status: IN FLIGHT — Direction locked 2026-05-25; gap-audit complete (Round 3); cost-curve + dormant-fidelity LOCKED 2026-05-26 (Phase 0 epic 20356); Phase 1 (voluntary-vs-bankruptcy restart split) SHIPPED 2026-05-26; Phase 2 ( + destination-economy visit rewards) SHIPPED 2026-05-26
Created: 2026-05-25
Last revision: 2026-05-28 (Phase 2 round-2 fixes, — visit-a-zoo now renders a discoverable PICKER: the bare "visit zoo" prompt lists the top visitable zoos as selectable options so a player can reply with a zoo name OR pick a number, fixing the dead-end where a bare-name reply hit the NLU fallback. Fixed pre-existing broken getLeaderboard query (v_zoo_leaderboard exposes skill_customer_id, not customer_id). Also: voice-rule cleanup of view-map (was an ASCII grid read aloud), view-babies, and build-attraction output; nav options now gated to valid exits; onboarding starter line reframed as a head start, not a false promise to buy a premium animal with 5 tickets. Prior round-2 single-utterance "visit zoo NAME" + bare "visit zoo" misroutes traced to a stale prod NLU cache, not code.)
Supersedes / contextualizes: queue (restart GT-refund human_question, cancelled — all four options missed the underlying assumption that restart is a meaningful progression step)
Sibling docs: grid-layout.md (spatial substrate), economy.md (currencies), animals.md (species/breeding), launch-plan.md
Pivot Statement
Zoo Simulator becomes an infinite-growth sim. The single zoo persists forever — players keep stacking new themed expansions onto it, with growing costs and a meaningful expansion curve, and never reset progress. Restart stops being a progression step at all: it's a "rebuild your layout" button that refunds 100% of spending so you can re-plan placement without losing anything. Seasons are the content engine — every drop adds a new themed expansion that becomes a new region of your zoo (not a replacement), with its own leaderboard against other players growing that same expansion. Other players can teleport into your zoo and walk through it to see your layout, your animals, and especially your paid cosmetics. Borrows the Mystery/DF N/S/E/W grid + zone-transition patterns (already implemented as the spatial substrate — see grid-layout.md).
Design North Star (the player experience we're building)
Two complementary player journeys must both feel rewarding:
| Player type | What "winning" feels like | How this design delivers |
|---|---|---|
| Long-term player (year 1+, score 500+) | Their zoo is a sprawling testament to years of design choices. Visitors marvel at it. They have a row of season trophies. They keep finding new things to optimize and new seasons to chase. | Persistent zoo never resets. Seasons compound forever. Visit walks make their work seen. Per-season trophies are a permanent legacy. New mega-seasons quarterly give them fresh competitive challenges. |
| New player (day 1-30) | Their zoo is small but they're not locked out of competition. They can join this week's mini-season leaderboard with a real chance to place. They can chase past seasons via Heritage Mode at their own pace. They see veteran zoos and have aspirational goals — not insurmountable walls. | Per-season leaderboards reset every 28 days (mini) or 90 days (mega) so there's always a fresh race. Heritage Mode lets them replay every past season. Live-window unlock discount makes joining the current season affordable. Cost-curve is "voluntary, not mandatory" — they can skip Tier 3/4 seasons and still compete in lower-tier ones. |
The three pillars:
- Social reason to play — visit other zoos, get visited, build a destination zoo, see your work seen
- Growth that compounds, never resets — every day of play adds permanent value to your zoo
- Seasons as catchup + urgency — fresh leaderboard windows give new players a fair race; the live-window mechanic gives veterans a "join NOW" reason every drop
If a design decision contradicts any of those three, it's wrong.
Audit Findings & Resolutions (Round 3, 2026-05-25)
After locking the 12 design decisions, an audit of related design docs (economy.md, management.md, isp-conversion-review.md, index.md) surfaced 14 gaps where this doc either conflicted with existing infrastructure or missed a system interaction. Resolutions below are folded inline into the affected sections; remaining gaps are listed at the end under § Known Gaps.
Critical (closed inline, affect Phase 0 or Phase 1)
| # | Gap | Resolution |
|---|---|---|
| A1 | Monthly seasons system ALREADY exists in production. evt_zoo_sim_season_rollover MySQL event + sp_zoo_sim_season_rollover procedure + zoo_simulator.season / season_standings / zone_cosmetic_catalog / zone_cosmetic_grants tables. First live season launches 2026-06-01. Top-3 get 3/2/1 GT + cosmetic skin. NLU ZOO_SIM_SEASON_STATUS wired. Java service sweeps grants every 5 minutes. Source: management.md § Monthly Seasons. My doc treated seasons as net-new. |
Existing monthly seasons = the "mini-season" tier. Reuse all existing infrastructure (tables, procedure, NLU, Java service). The expansion-model adds (a) themed content per mini-season (event mechanic + cosmetics — currently only cosmetic-skin reward exists), (b) the quarterly mega-season tier as a NEW system on top, (c) Heritage Mode, (d) per-tier zone cost curve. No table rename, no migration of existing rows — only ADDITION. First mega-season ships AFTER 2026-06-01 monthly already-shipped — earliest realistic mega target Q3-2026. |
| A2 | Starter capital number conflict. economy.md § Restart Policy says current restart resets ZB to 25,000 (not the 5,000 new-player starter). My doc said "reset to starter (5,000 ZB)." | Voluntary restart restores ZB to 25,000 (matches existing behavior — "welcome back" bonus floor) PLUS refunds 100% of spent ZB. So a player who spent 80,000 ZB on placements gets 80,000 + 25,000 = 105,000 ZB back. The 25,000 is a floor, not a cap. A new player also starts at 25,000 ZB (, the one constant every account-creation path reads). A 5,000 start was tried and reverted: the cheapest zone costs 5,000, so it left a new player at 0 before any habitat or animal, and most of the accounts started on it never bought an animal. 25,000 covers the cheapest zone, a habitat and a first animal with room to spare; pinned by the scenario in . Bankruptcy is separate (see A3). |
| A3 | Bankruptcy auto-restart exploit vector. daysInDebt >= 7 OR debt > 10,000 auto-triggers resetZoo (same code path as voluntary restart). With new "full refund" policy, bankrupt players would get all spent ZB+GT back as a free reset. |
Bankruptcy and voluntary restart now follow DIFFERENT rules. Voluntary restart (player says "restart zoo"): full ZB+GT refund + 25,000 ZB floor. Bankruptcy auto-restart: existing partial-reset behavior preserved — current GT balance preserved (no refund of spent GT), ZB to 25,000 floor only. Voice copy makes the distinction explicit: voluntary restart message says "your spending is refunded"; bankruptcy message says "starting over with current premium currency only." |
| A4 | Subscription 25% revenue bonus stacking with per-tier multipliers and dormancy fidelity. Existing: subscribers get dailyRevenue × 1.25. My doc didn't address stacking. |
Subscription bonus applies last, as a final 1.25x multiplier on whatever revenue the simulation produces. So a subscriber in a Tier 3 zone (1.6x revenue mult) gets base × 1.6 × 1.25 = 2.0x final. A subscriber's dormant zone earns base × 0.30 (dormancy) × 1.25 = 0.375x final. Subscription doesn't compound with tier or dormancy — it's the outermost multiplier. |
| A5 | starterGoldenTicketsGranted flag persistence on restart. Existing: this boolean prevents the one-time 5 GT welcome grant from re-firing. Already persists across current restart. My doc didn't enumerate it. |
Add to persistence list. Restart preserves the flag — voluntary restart does NOT re-grant the starter 5 GT (those are already in balance and stay in balance via refund). The same applies to the trial pack ENTITLEMENT (Amazon-side, already permanent). |
| A6 | Phase 0 validation needs specific player targets, not "a top-player zoo." | Validate against TWO real players: AMAYUZ2L (24 billion ZB — extreme whale outlier; cost curve must not feel mandatory but ALSO not be trivial for them) AND AMAWNE6X (active engaged mid-tier player — representative of healthy growth). Model both. If either feels broken, the curve is wrong. |
| A7 | Existing weekly leaderboard ranks on zoo_bucks balance (ranks 1/2/3 = 5000/2500/2500 ZB). The new per-season-zone growth-score is a DIFFERENT metric. | Three leaderboards coexist: (1) Existing weekly leaderboard by zoo_bucks balance (untouched — keep current rewards). (2) Monthly mini-season leaderboard by event-specific metric (currently ranks by final_zoo_bucks at month-end — extend to use event-themed score once mini-season events ship). (3) Quarterly mega-season leaderboard by new themed zone growth score (NEW). All three persist; players see ranks on each via different commands. |
High-priority (closed inline, affect Phase 2-4)
| # | Gap | Resolution |
|---|---|---|
| B1 | **NPE bug in ** — 31 ISP_PAYOUT_FAILED: events in 7 days (isp-conversion-review.md). Players charged by Amazon, no in-game payout. New season-unlock paid bundles ($4.99/$9.99/$19.99) would ride this same broken path. | RESOLVED 2026-05-13 (commit 4c91d0f4, deploy 912 SHA af1f9d38). Null-guard + fallback shipped in applyCurrencyPayout lines 482-510 + parallel guard in applyCurrencyRefund lines 520-541. JUnit regression coverage: (5 SKU cases: ONE/THREE/FIVE/TEN_DOLLAR_PACK + STARTER_PACK, queue 20021). Post-deploy: ISP_PAYOUT_FAILED count dropped to 0 starting 2026-05-14 (last failure 2026-05-13 20:37); all 3 affected players (Trinity, Kim, yxhRHG) auto-reconciled via post-fix retry sweep with COMPLETED purchase_transactions rows on 2026-05-14/18 — no admin_grant backfill required. Phase 3 unblocked. |
| B2 | ISP contextual trigger gap — Zoo fires upsells from only 2 surfaces (sick_animals, debt) = 3% of BPV. DT fires from 3 surfaces = 21% of BPV. New season system needs upsell hooks too. | Phase 4 must wire contextual triggers for seasons: "season N starts in 3 days" (T-3 anticipation), "season N ends in 7 days" (live-window FOMO on trophies, not content), "you placed in top-10% — claim badge" (positive reinforcement). Also wire animal_death upsell (open gap from isp-conversion-review.md H1) since it's the most peak-frustration emotional trigger Zoo currently misses. |
| B3 | No friend/guild system in zoo simulator. Visit handler needs to address "how does player A find player B's zoo?" | Phase 2 MVP: name-lookup only. "visit zoo NAME" searches by zooName (display name, unique-enforced per existing zoo-naming rules). No friend list yet. Phase 7 adds friends + featured-zoo-of-day. |
| B4 | Visit-walks must render to voice. Per voice-tags.md + the zoo 2026-05-04 UI audit (git history), all output is read aloud — no parens, brackets, slashes, abbreviations. Existing visitwalk spec in grid-layout.md uses some bracketed exit lists. | Phase 2/6 voice-rendering rule: all visit-walk descriptions use natural language only. No "(north)", no "[Habitat 1]", no "HP/XP". Format trophy displays as commas not brackets: "You see Maya's row of trophies, first place in Season 1 and Season 3, plus a Heritage Champion of Season 2." |
| B5 | Rate-zoo concurrency: two visitors rate same owner concurrently. Owner ZB reward (+50 for 5★, +25 for 4★) needs idempotency. | Phase 2: per-(visitor, owner) unique rating row in zoo_visit_ratings — visitor can rate each owner once per 7 days. Concurrent rating writes ride INSERT ... ON DUPLICATE KEY UPDATE keyed by (visitor_customer_id, owner_customer_id, rating_week). Owner reward fires only on first-time-this-week rating (not on update). |
Medium-priority (logged as Known Gaps, addressed at relevant phase)
| # | Gap | Phase to address |
|---|---|---|
| C1 | Visit-during-restart: visitor walking owner's zoo when owner triggers restart — graceful drop-out with friendly message | Phase 2 |
| C2 | Frontend (8 panels, ZooManagementDashboard) needs new panels for: Seasons, Heritage Mode opt-in, Visit-Walk view, Trophy display | Phase 6 |
| C3 | Mini-season event metric is currently final_zoo_bucks (per procedure) — needs extension to event-themed scoring per mini-season |
Phase 4 (when first themed mini-season ships) |
| C4 | Login rewards interaction with seasons: should daily/monthly/holiday GT reward double during a mega-season live window? Currently fixed at 1/4/8 GT | Phase 3 (decide at season-infrastructure ship) |
| C5 | Cross-game promo treatment for season cosmetics (zoo has 5 outbound + 2 inbound cross-game promos) | Phase 4 |
| C6 | Transaction history cap (200) interaction with high-volume season activity — may need increase or per-category caps | Phase 3 |
| C7 | Data catalog (design/data/schemas/zoo-simulator.md) must reflect new tables (zoo_visits, zoo_visit_ratings, zone_activity, season-related additions to existing tables) |
Phase 3 (per data-catalog rule) |
Locked Design Decisions
Round 1: Foundation (2026-05-25, morning)
| # | Decision | Rationale |
|---|---|---|
| 1 | Seasons = new appended themed zone drops. Each season releases a new ZoneTheme (with its own species pack + attractions + cosmetics) that players unlock and append to their zoo. Existing zones never leave. | Matches the "keep building forever" goal, reuses existing zone + grid systems, gives leaderboards a clean scope. |
| 2 | Cost-scaling via zone-count soft caps. Each new season-zone has higher per-square upkeep than the prior, but unlocks species/attractions with a higher revenue ceiling. No exponential treadmill on individual squares. | Per-zone gameplay stays legible. Monetization is at the unlock moment, not the grind. |
| 3 | Restart refunds 100% of spending; world/social state persists. Day count, leaderboard rank, comments received, season unlocks, visit history, achievements all survive restart. Only money (ZB + GT) and structure placements reset to a blank canvas. | Preserves identity + social capital. Removes punishment. Restart becomes "redesign mode" not "factory reset." |
| 4 | ** ships in the first implementation wave.** Visit-other-players is non-negotiable to make cosmetics matter; cool paid items are invisible without it. | Without visiting, there is no incentive to buy showy cosmetics. The whole monetization wing rests on this. |
Round 2: Mechanics (2026-05-25, afternoon)
| # | Decision | Detail |
|---|---|---|
| Q1 | Hybrid cadence: monthly mini-seasons + quarterly mega-seasons. | Mini-season every 28 days (small event in an existing zone, 1-2 cosmetics, mini-leaderboard). Mega-season every 90 days (full new ZoneTheme + four to six new species + 2-3 attractions + 4-8 cosmetics + ongoing event, mega-leaderboard). Two catchup windows so new players never wait long for a fair race. Two monetization beats per quarter. |
| Q2 | Cost curve: shape locked, numbers validated empirically before Phase 3. | Design principle: "+30% revenue ceiling for +20% upkeep per tier." Per-tier multipliers are proposed in the table below but NOT locked until modeled against an actual top-player zoo (score 600+). Validation step is part of Phase 3 prerequisites — never ship the curve untested. |
| Q3 | Unlock = mixed ZB+GT, with live-window discount + paid-bundle skip. | Mini-season unlock: 15 GT or 5,000 ZB. Mega-season unlock: tier-scaled (Tier 2 = 80 GT or 50,000 ZB; Tier 3 = 200 GT or 200,000 ZB; Tier 4 = 500 GT or 1,000,000 ZB). 50% off during the live window (catchup discount). Past-season unlocks remain at full price forever. Paid-bundle ISP skip at $4.99/$9.99/$19.99 bundles unlock + cosmetics + GT. |
| Q4 | Visit reward economy = destination-zoo model. | Visitor earns min(50 + visited_zoo_score / 5, 500) ZB per visit, 5 visits/day cap. Owner gets +5 visitors per real-player visit on next advance-day, capped at +50/day total. Owner gets +50 ZB per 5-star rating received, +25 per 4-star. No GT in the visit loop (avoids inflation). Top-end zoos become destinations; well-rated zoos earn real income. |
| Q5 | Restart: competitive ranks reset naturally; historical achievements persist forever. | Current leaderboards (weekly, mini-season, mega-season) are computed from current zoo state — emptying the zoo drops the player naturally, no special handling needed. highestZooScore, lifetime aggregates, season trophy rows, comments received, day count, achievements all persist. The restart UI surfaces this clearly: "Your reputation, comments, leaderboard ranks, day count, and unlocked seasons all stay." |
| Q6 | No hard cap on zones. Soft cost cap + lazy-active simulation. | Per-zone upkeep gets +2% surcharge per zone past zone 20 (natural economic brake). Only zones visited/modified in past 7 days run full daily-sim fidelity; dormant zones tick at reduced rate but still earn baseline ticket revenue (~30% of full fidelity). Visiting/modifying a dormant zone wakes it. Honors "infinite forever" without breaking Alexa's 8s response budget. |
| Q7 | Season end: event closes, zone stays, Heritage Mode replay + all-time leaderboard. | Live leaderboard archives, top-3 trophies awarded permanently, closed to new entries. Themed zone + cosmetics buyable forever at full price. Heritage Mode lets any player replay the season's event for smaller cosmetic rewards (1 cosmetic instead of 4-8). Heritage runs feed a separate all-time-best leaderboard that anyone can climb forever. Content compounds — year 5 of operation has 60+ replayable seasons. |
| Q8 | 3-tier cosmetic exclusivity. | Tier A (live-window exclusive forever): 4 items per season — 3 top-3 trophies + 1 "Season N Top-10% Live Finisher" badge. Never obtainable again. Tier B (Heritage Mode only): visually distinct smaller version of the Tier A trophies — "Heritage Season N Champion" awarded for #1 on the Heritage all-time leaderboard. Tier C (forever available): themed decorations, habitat skins, species, zone-theme unlock — buyable during live window AND forever after. Only ~4 items per season are truly forever-locked; 95% of content compounds into the permanent library. |
The Persistent Zoo
- A player has one zoo, forever. No "career" reset, no season-rollover wipe.
- Day count, total revenue earned, zoo-score history, conservation/welfare/satisfaction lifetime aggregates all monotonically grow.
- Animals age and die normally per the daily sim (per animals.md) — that's the only "loss" the player ever experiences.
- The zoo can keep adding zones (via seasonal drops) for as long as the player wants — bounded only by the soft cost-cap surcharge (Q6) and the player's monetary runway.
Seasons (Hybrid Cadence)
Mini-Seasons (Monthly)
Every 28 days, a mini-season drops.
| Component | Detail |
|---|---|
| Event mechanic | One themed gameplay modifier applied to existing zoo (e.g., "Lunar Festival: visitors with lunar-lantern decoration spend 1.5x", "Migration Week: 1 free random animal per advance-day", "Conservation Drive: rare-variant breeding chance +20%"). |
| Cosmetics | 1-2 themed decoration items, buyable in ZB or GT. |
| Leaderboard | 28-day window. Score = event-specific (e.g., total lunar-revenue for Lunar Festival, or breeding count for Conservation Drive). |
| Unlock | 15 GT or 5,000 ZB (50% off during live window). |
| Top rewards | Top-3: tier-A trophy (forever exclusive). Top-10%: tier-A "Live Finisher" badge. |
| Heritage Mode | Replayable forever; smaller cosmetic reward + Heritage leaderboard. |
| Content burden per drop | Low — 1 event mechanic + 1-2 cosmetics. Realistic to ship monthly. |
Mega-Seasons (Quarterly)
Every 90 days, a mega-season drops.
| Component | Detail |
|---|---|
| New ZoneTheme | A full new theme (e.g., "Bioluminescent Reef", "Cretaceous Valley", "Aurora Tundra"). Adds a new ZoneTheme to the enum + content catalog. Player unlocks it, then builds zones of that theme. |
| Themed species | 4-6 new species, mix of free (unlock via play) and premium (GT or ISP). |
| Themed attractions | 2-3 new attractions matching the theme. |
| Cosmetics | 4-8 themed decorations + habitat skins + walkway variants. |
| Ongoing event | A 90-day themed gameplay modifier (e.g., "Reef Bloom: aquatic habitats earn +30% visitor revenue during the season"). |
| Leaderboard | 90-day window. Score = growth-score for the new themed zone only (not the whole zoo). New players competing against veterans on equal terms — both are starting that zone from scratch. |
| Unlock | Tier-scaled — Tier 2 = 80 GT or 50,000 ZB. Tier 3 = 200 GT or 200,000 ZB. Tier 4 = 500 GT or 1,000,000 ZB. 50% off during live window. |
| Top rewards | Same tier-A scheme as mini-seasons + bigger Tier C cosmetic library. |
| Heritage Mode | Replayable forever. The themed zone-theme stays unlockable + buildable forever. |
| Content burden per drop | High — full content drop. 4 per year is the marketing tentpole rhythm. |
Per-Season Leaderboard Scoping (critical for catchup)
| Leaderboard | Window | Scope | Why catchup-fair |
|---|---|---|---|
| Weekly (existing) | 7 days | Whole-zoo growth score | Rotates fast; favors active play but not pre-existing scale |
| Mini-season | 28 days | Event-specific metric within the active mini-season | New players can join from day 1 of the season and compete equally — no accumulated history advantage |
| Mega-season | 90 days | Growth score of the season's new themed zone only | All players start that zone from scratch — perfectly fair race |
| Heritage all-time | Forever | Per-season best (each closed season has its own) | New players can grind these on their own pace; veterans have new climbs to chase too |
Cost & Economy Curve
Status: LOCKED 2026-05-26 (Phase 0 validation epic 20356). Numbers below are final for shipment; any future change requires a Phase 0-style re-validation against current live whale + mid-tier zoos.
Per-Tier Multipliers (locked)
Implementation status: NOT YET BUILT — this per-tier curve is design-locked backlog (Phases 3/5). The live upkeep today is the flat model in economy.md § Facility Upkeep (). Reconcile the two to one canonical formula when Phase 3/5 ships.
Each new tier scales upkeep and revenue against a Tier 0 baseline. Two revenue dimensions ride the simulation independently and combine to a composite "total revenue" multiplier:
| Zone Tier | Use case | Upkeep mult | Animal-appeal mult | Visitor-spend mult | Composite revenue mult | Zone-base /day |
|---|---|---|---|---|---|---|
| Tier 0 | 10 base themes | 1.0x | 1.0x | 1.0x | 1.0x | 150 |
| Tier 1 | 12 existing premium zones | 1.5x | 1.15x | 1.22x | ~1.40x | 225 |
| Tier 2 | Mega-Seasons 1-6 | 1.7x | 1.30x | 1.46x | ~1.90x | 255 |
| Tier 3 | Mega-Seasons 7-12 | 1.9x | 1.48x | 1.62x | ~2.40x | 285 |
| Tier 4 | Mega-Seasons 13+ | 2.1x | 1.65x | 1.82x | ~3.00x | 315 |
Implementation decomposes "composite revenue mult" into animal_appeal_mult × visitor_spend_mult, applied to attraction/concession revenue and per-visitor spending respectively. The composite is the single number designers can reason against.
Tier 1 deliberately matches existing premium upkeep (1.5x). The Round-3 audit flagged that the original proposed table reduced Tier 1 upkeep from the current 1.5x to 1.2x — that would have been a silent buff to every player already in a premium zone. Holding Tier 1 upkeep at 1.5x preserves current behavior; the +40% revenue bump at Tier 1 is the net upgrade premium-zone owners receive from the new model.
Application Order (locked)
For any per-zone revenue calculation, multipliers stack in this fixed order — DO NOT vary in implementation:
final_revenue = base_revenue
× tier_revenue_mult (1.0 - 3.0x by tier)
× dormancy_mult (1.0x active, 0.30x dormant — see Performance & Scale)
× subscription_mult (1.25x subscriber, 1.0x non-subscriber — OUTERMOST)
final_upkeep = base_upkeep
× tier_upkeep_mult (1.0 - 2.1x by tier)
× zone_count_surcharge (1.0x for zones 1-20, +2% per zone past 20)
Subscription bonus is the outermost revenue multiplier per audit A4. Tier and dormancy compound; subscription rides on top of the result. Subscription does NOT touch upkeep (kept identical to current behavior in line 187).
Zone-count surcharge (Q6) applies ONLY to that specific zone's facility upkeep. Zone 21 gets ×1.02, zone 22 gets ×1.04, etc. The surcharge does NOT touch staff salaries (which are global), nor habitat/animal upkeep within the zone (the per-zone facility line item is the surcharge target). Compounds with the tier upkeep mult.
Validation Evidence — AMAWNE6X (mid-tier, 1 zone, non-subscriber)
Live state (queried 2026-05-26):
| Metric | Value |
|---|---|
| Zoo Bucks balance | 55,179,641 |
| Golden Tickets | 5,805 |
| Zone count | 1 |
| Daily revenue (observed) | 1,221,308 ZB |
| Daily facility upkeep | 29,060 ZB |
| Daily staff cost | 49,900 ZB |
| Total daily expenses | 78,960 ZB |
| Subscriber | No |
Modeling: she unlocks +1 new zone at each tier, builds it to the same per-zone density as her current Tier 0 zone, no surcharge (zone count ≤20). Per-zone revenue baseline 1,221,308 / per-zone facility upkeep 29,060.
| Adding Tier | New zone upkeep | New zone revenue | Marginal daily margin | Margin vs Tier 0 | ZB-payback for unlock cost |
|---|---|---|---|---|---|
| Tier 0 (baseline) | 29,060 | 1,221,308 | +1,192,248 | — | n/a (free) |
| Tier 1 | 43,590 | 1,709,831 | +1,666,241 | +40% | n/a (auto-unlocked, existing premium) |
| Tier 2 | 49,402 | 2,320,485 | +2,271,083 | +90% | 50,000 ZB / 2.27M margin = 0.02 days |
| Tier 3 | 55,214 | 2,931,139 | +2,875,925 | +141% | 200,000 ZB / 2.88M margin = 0.07 days |
| Tier 4 | 61,026 | 3,663,924 | +3,602,898 | +202% | 1,000,000 ZB / 3.60M margin = 0.28 days |
ZB-payback at every tier is under 7 hours of advance-day cycles. The GT-cost is the meaningful gate for her — 80 / 200 / 500 GT for Tier 2 / 3 / 4 is 1.4% / 3.4% / 8.6% of her 5,805 GT balance. The Tier 4 commitment (~9% of her GT) creates the genuine "is this worth it?" decision point.
Verdict for AMAWNE6X: PASS — voluntary at every tier (net-positive, no tier forces participation), meaningful (Tier 4 GT-spend is non-trivial commitment), gradient-friction prevents a free-stampede to Tier 4.
Validation Evidence — AMAYUZ2L (extreme whale, 17 zones, subscriber)
Live state (queried 2026-05-26):
| Metric | Value |
|---|---|
| Zoo Bucks balance | 50,679,649,695 (~50.7 billion) |
| Golden Tickets | 110 |
| Zone count | 17 |
| Daily revenue (observed, post-1.25x sub bonus) | 80,504,646 ZB |
| Daily revenue (pre-sub) | 64,403,717 ZB |
| Daily facility upkeep | 122,650 ZB |
| Daily staff cost | 85,500 ZB |
| Total daily expenses | 208,150 ZB |
| Subscriber | Yes (ZOO_SIMULATOR_SUBSCRIPTION purchased) |
Per-zone averages: facility upkeep 7,215 ZB / pre-sub revenue 3,788,454 ZB. Modeling +1 zone at each tier, no surcharge (zone 18 is still ≤20).
| Adding Tier | New zone upkeep | New zone pre-sub revenue | New zone post-sub revenue | Marginal post-sub margin | Margin vs Tier 0 | ZB-payback |
|---|---|---|---|---|---|---|
| Tier 0 (baseline) | 7,215 | 3,788,454 | 4,735,567 | +4,728,352 | — | n/a |
| Tier 1 | 10,823 | 5,303,836 | 6,629,795 | +6,618,972 | +40% | n/a |
| Tier 2 | 12,266 | 7,198,063 | 8,997,579 | +8,985,313 | +90% | 50,000 ZB / 8.99M = 0.006 days |
| Tier 3 | 13,709 | 9,092,290 | 11,365,363 | +11,351,654 | +141% | 200,000 ZB / 11.36M = 0.018 days |
| Tier 4 | 15,152 | 11,365,363 | 14,206,703 | +14,191,551 | +202% | 1,000,000 ZB / 14.20M = 0.07 days |
ZB-cost is effectively zero friction for him. The GT-cost is the dominant gate — he holds only 110 GT, so Tier 2 (80 GT) is a 73% commitment of his balance, and Tier 3 / 4 (200 / 500 GT) require him to actually buy more GT via ISP packs. The unlock fee is intentionally a real-money pressure point at his scale.
Subscription stacking verification (audit A4): his 80.5M/day observed revenue ÷ 1.25 = 64.4M/day pre-sub, confirming the 1.25x is the post-pipeline outermost multiplier. The locked application order above honors that — tier_mult × dormancy_mult applies first, sub_mult applies last.
Zone-count surcharge check (Q6, modeled at zone 21+ for future state): at zone 50 his Tier 4 zone-21 upkeep would be 15,152 × 1.02 = 15,455; at zone 50 it would be 15,152 × 1.60 = 24,243. Even at zone 50 surcharge, the surcharged upkeep is 0.17% of his marginal margin — the brake is detectable but never throttling for whales. By design.
Verdict for AMAYUZ2L: PASS — not trivially abusable (GT-gate at T3+ requires ISP purchase even at 50B ZB balance); marginal margins per zone are large but the unlock cost path forces engagement with the monetization funnel; per-tier scoped leaderboards mean he doesn't dominate every season — he competes only against peers who also unlocked Tier 4.
Locked Decisions Summary
- Tier 1 upkeep stays at 1.5x to preserve current premium-zone behavior; the +40% revenue bump is the new-model benefit existing premium owners receive.
- Composite revenue multipliers (1.0 / 1.4 / 1.9 / 2.4 / 3.0) come from compounding
animal_appeal_mult × visitor_spend_multper tier; this is steeper than the original proposed table but the per-tier UNLOCK COST (especially GT-cost) is the throttle, not relative margin. - Per-tier voluntary-not-mandatory is enforced STRUCTURALLY by per-season-scoped leaderboards (Phase 3 § Per-Season Leaderboard Scoping), not by curve flatness.
- Subscription bonus is outermost (1.25x on revenue after tier+dormancy); upkeep unchanged by subscription.
- Zone-count surcharge applies to facility upkeep of the specific zone only (zone 21 gets +2%, not all zones).
Season Unlock Costs (locked per Q3 — unchanged)
| Tier | ZB cost | GT cost | Live-window discount | Paid-bundle skip |
|---|---|---|---|---|
| Mini-season | 5,000 ZB | 15 GT | 50% off (2,500 ZB / 7-8 GT) | (bundled into mega) |
| Tier 2 mega | 50,000 ZB | 80 GT | 50% off | $4.99 ISP |
| Tier 3 mega | 200,000 ZB | 200 GT | 50% off | $9.99 ISP |
| Tier 4 mega | 1,000,000 ZB | 500 GT | 50% off | $19.99 ISP |
Past-season unlocks remain available at full price forever.
Megaprojects, the sink that scales with the zoo
A megaproject is a landmark built in levels, the Zoo Bucks sink for the richest zoos. Fixed prices were a sink only for the first million: five accounts hold over a billion Zoo Bucks, and a weekly prize of five thousand means nothing to them. So a level is priced from the zoo itself.
- Price. A level costs the project's share of the zoo's lifetime revenue, never below the project's
floor, times the level being built, rounded to two significant figures so it is spoken whole. A new
rich zoo pays the floor, hundreds of thousands; a zoo with four trillion in lifetime revenue pays
billions. The shares, floors and per-level draws are
ZooMegaproject, which is the definition. - Draw. Every built level adds its percent to the day's visitors (
ZooMegaproject.withLandmarkVisitors, applied where counts the day's visitors), so a sink is also more visitors, and more visitors is the season race (management.md§ Monthly Seasons). - Completion. The purchase says it is complete and what it now does: "It is complete. From tomorrow it draws ten percent more visitors every day, and every director who tours your zoo sees it." (), so the player hears the sink pay back on the turn they spend.
- Landmark. A director touring the zoo hears its grandest landmark at the entrance: "Above it all, a Safari Monorail glides over the habitats." ().
- Nothing is taken away. A project bought before levels is level one; the next purchase is level two.
Levels are
ZooAccount.megaprojectLevels;ownedMegaprojectsstill lists every project built once, for the goal ladder.
Restart as Cosmetic Re-allocation
Voluntary Restart vs Bankruptcy (audit finding A3)
Two distinct restart paths with different mechanics:
| Path | Trigger | ZB result | GT result |
|---|---|---|---|
| Voluntary restart | Player says "restart zoo" → confirmRestart | The balance held, floored at 25,000 ZB; no Zoo Bucks refund | Full refund of GT spent on premium animals/zones + retain current balance |
| Bankruptcy auto-restart | daysInDebt >= 7 OR debt > 10,000 (existing thresholds) | Reset to 25,000 ZB floor only (no spending refund) | Current balance preserved (no refund of spent GT — existing behavior) |
Bankruptcy is punishment for failed economics; voluntary restart is a redesign tool. Confusing them creates an exploit where a player intentionally bankrupts to force a free GT refund. Voice copy makes the distinction explicit at each entry point.
What Refunds (on Voluntary Restart)
- The Zoo Bucks the player holds stay, floored to 25,000 ZB, so a restart never takes away a Zoo Buck the player was told they had. No Zoo Bucks spending is refunded on top: the balance already holds what every sale returned, so refunding the purchase as well would let buy, sell and restart mint the sale price on every loop, and the day's expenses and staff hires were spent, not placed.
- 100% of GT spent on premium animals / premium zones in the current zoo layout refunds to GT balance. Player's existing unspent GT balance also retained.
- A season unlock refunds nothing, in either currency. Its key persists (§ What Persists), so its spend does too. records it as
SEASON_UNLOCK, which the refund accumulators do not count. While no season carries themed content, no unlock is charged at all (§ Phase 3 status). - All habitats, attractions, decorations, animals, and grid placements are removed.
- Staff are dismissed (no hiring-fee refund — staff are services, not capital).
What Persists (on Voluntary Restart AND Bankruptcy)
| Item | Why |
|---|---|
| Day count | Identity / progression marker |
highestZooScore (lifetime best) |
Earned fact about the past |
| Lifetime aggregates (total visitors, revenue, conservation) | Pride/identity |
| Unlocked season themes | They were unlocks, not purchases |
| Active subscription | Subscription is monthly, not tied to zoo state |
| Inbound comments / ratings from visitors | Social reputation is yours, not your layout's |
| Season leaderboard trophies (top-3 + top-10% badges) | Historical achievements — never reset |
| Visit history (zoos you've visited, who's visited yours) | Social capital |
| Achievements / milestones | Permanent |
| Friend / party relationships | Permanent |
| Heritage Mode rewards earned | Earned facts |
starterGoldenTicketsGranted flag (audit A5) |
One-time-per-customer; never re-grants the welcome 5 GT |
| Trial pack ENTITLEMENT (Amazon-side, ZOO_SIMULATOR_STARTER_PACK) | Permanent per Amazon ISP — survives anything |
| Active monthly mini-season standing (current season_standings row) | Recomputed naturally on next sim run — no special handling, but row itself stays |
What Resets Naturally (no special code)
- Current weekly leaderboard rank — recomputed from empty zoo, drops to bottom.
- Current mini-season leaderboard rank — recomputed from empty season zone, drops naturally.
- Current mega-season leaderboard rank — same.
This is why Q5 needs no special preservation logic: the leaderboard scoreboards are computed, not stored. Emptying the zoo drops the player naturally.
Restart UX Flow
Player: "restart zoo"
→ Confirmation (two-turn, per design/engine/confirmation-options.md):
"Restart will refund all your Zoo Bucks and Golden Tickets spent
on this layout, and clear your zoo so you can rebuild. Your
reputation, comments, season trophies, leaderboard ranks history,
day count, and unlocked seasons all stay. Your current weekly and
season ranks will recompute from your fresh zoo. Say 'confirm restart'
to proceed."
→ Confirm: clear zones (and their grid squares), animals, staff. Refund ZB and GT.
Re-seed default 3x3 grid per Tier 0 zone. Preserve all persistent fields.
→ "Welcome back! Your zoo is a blank canvas — you have N Zoo Bucks
and M Golden Tickets to rebuild. Day count: X. Your trophies and
reputation are intact."
Social / Visit Layer (Destination-Zoo Economy)
Phase 1 Scope (ships in the first wave)
Implement the deferred grid-layout.md § Multiplayer Visit Flow with the destination-economy reward formulas:
| Component | Scope |
|---|---|
visitZoo, leaveVisit, rateZoo methods |
|
| Read-only walk | Visitor N/S/E/W navigates target's zone grid; sees all habitats, attractions, decorations, animals |
| Visit-reward (visitor side) | min(50 + visited_zoo_score / 5, 500) ZB per visit. 5 visits/day cap. No GT. |
| Visit-reward (owner side, passive) | +5 visitors per real-player visit on next advance-day, capped at +50/day from this source |
| Visit-reward (owner side, rated) | +50 ZB per 5-star rating received; +25 per 4-star |
| Rate-zoo | 1-5 star + optional 1-sentence comment |
process_action_handlers |
ZOO_VISIT_ZOO, ZOO_RATE_ZOO, ZOO_LEAVE_VISIT rows |
| NLU synonyms | Per the grid-layout.md spec, ~10 phrase rows |
ZOO_RATE_ZOO enum |
Add to FreeTextDeclarationAction (currently missing — only ZOO_VISIT/LEAVE stubs exist) |
zoo_simulator.zoo_visits table |
Visit log + ratings + comments |
A visit ends when the player leaves the skill
A visit is open from visitZoo until leaveVisit, but most players close the skill instead of saying
leave visit. The next launch ends a visit left open: closes the
zoo_visits row as COMPLETED, walks the player home, and the launch opens with "Your visit to River Bend
is over, and it paid one hundred eighty Zoo Bucks." The reward was paid on arrival, so the line reports
it and pays nothing twice. The visited zoo's name and the reward are kept on the visitor
(visitingZooName, visitRewardZb) from arrival; a visit opened before they were kept names the zoo by
reading it and leaves the amount out.
Cosmetics That Read Visually
For the visit-walk to drive purchases, premium content must be visible from adjacent paths during another player's walk. Concrete examples:
- Premium decorations (dragon statue, golden walkway from existing grid-layout spec) must render in the walk description text: "You see a golden walkway with a dragon statue at the corner."
- Premium animals must surface their rare-variant traits in habitat-view text during visits ("a Chimera Tiger with split coloring is pacing the back").
- Season-exclusive cosmetics tagged with their season name ("a Bioluminescent Reef glowstone fountain, exclusive to Season 3 Live Window — only 247 players own this").
- Tier-A trophies displayed prominently at zone entrances (player's row of season trophies visible as the visitor walks the entrance path).
This is the monetization loop: visit zoos → see things you don't have → want to buy → buy → visiting your zoo now shows that thing.
Phase 2 Scope (later)
- Party-coop visits (multiple party members walking the leader's zoo together — already designed)
- Comments thread on zoos (replies to ratings)
- Friend-list of best zoos to revisit
- Featured-zoo-of-the-day rotation
- "Top destination zoos" auto-discover (zoos with most visitor traffic this week)
Discoverability MVP
A bare "visit zoo" is the way back into a destination. The picker lists, in this order, zoos this visitor recently walked (zoo_visits), zoos this visitor has rated (zoo_visit_ratings), then other zoos from the existing leaderboard. The weekly spotlight is the first leaderboard zoo that is not the visitor, spoken in one sentence before the options. A zoo named as recently walked is not named again as rated. There is no friend list and no separate featured-zoo calendar. Those stay in Phase 7.
A rating still pays the owner once per ISO week. The week key is the composite primary key on zoo_visit_ratings. Saying the rating again updates the stars and does not pay the owner again. On arrival the voice says that once: either that a four or five star rating pays the owner this week, or that an update this week does not pay again.
Visit rewards stay Zoo Bucks only. Golden Tickets are not part of the visit loop (Q4).
The walk stays natural language (B4). No parentheses, brackets, slashes, or an ASCII map. When the zoo being visited has been restarted, or its zones are gone, navigation sends the visitor home and closes the visit as dropped, with one sentence that the owner restarted the zoo (C1).
Performance & Scale (Q6)
Status: Dormant-fidelity parameters LOCKED. selects active vs dormant zones; applies DORMANT_TICKET_MULTIPLIER (0.30) to dormant ticket revenue; ages catch up in markActive on wake. Synthetic 50-zone empirical measurement remains a Phase 5 merge gate (see measurement plan below) and has not been run on this branch.
Zone-Count Bounds (locked)
| Aspect | Behavior |
|---|---|
| Hard cap | None |
| Soft cost cap | +2% upkeep surcharge per zone past zone 20 (applies to that specific zone's facility upkeep) |
| Daily-sim fidelity | Full for active zones (visited or modified within last 7 days); reduced for dormant zones |
| Dormant zone revenue | 0.30x baseline (ticket revenue only; no visitor BFS, no attraction synergy, no event triggers, no breeding compute) |
| Wake-up | Player visits or modifies a dormant zone → flips to active for next 7 days |
| UI signal | Dormant zones show "Dormant — visit to reactivate" marker on zone list |
Dormant-Zone Fidelity (locked)
What runs on a dormant zone per advance-day tick:
| Phase | Active zone | Dormant zone |
|---|---|---|
| Construction completion | Full | Still runs zoo-wide (per-zone skip is not wired) |
| Daily events | Full | Still runs zoo-wide (per-zone skip is not wired) |
| Health check + auto-treat | Full | Skipped (animals frozen in time) |
| Daily aging | Full | Skipped during the dormant window; ages catch up in markActive on wake |
| Subscriber sighting | Full (1/week cap, zoo-wide) | Zoo-wide, not per-zone |
| Breeding | Full | Still runs zoo-wide (per-zone skip is not wired) |
| Training | Full | Still runs zoo-wide (per-zone skip is not wired) |
| Enrichment | Full | Still runs zoo-wide (per-zone skip is not wired) |
| Visitor count calc | Full (drives visitor BFS; active zones only) | Proxy: — same per-asset weights as the active formula with a fixed base of 35 (no 20-50 roll). A cached last-3-active-period average is not stored. |
| Visitor BFS simulation | Full (up to VISITOR_SIM_CAP = 400 total across all active zones) | Skipped entirely |
| Revenue calculation | Full (admission + concession + attraction) | Baseline only: visitorProxyForZone × ticket_price × DORMANT_TICKET_MULTIPLIER (0.30). Named in the advance-day summary. |
| Animal deaths from dormancy | Skipped (animals immortal while dormant) | Skipped |
| Upkeep | Full (incl. tier mult + zone surcharge) | Full (no discount on upkeep — dormancy is a fidelity reduction, not an economic vacation) |
Rationale: dormant zones cost the same to maintain (you still pay zone upkeep) but produce only baseline ticket revenue. This creates a natural incentive to visit/modify zones rather than building a sprawl-then-abandon strategy — a dormant Tier 4 zone is a net economic drain (high upkeep, capped 30% revenue). Wake the zone by visiting OR modifying it.
Wake-Up Semantics (locked)
When a player visits or modifies a dormant zone:
- Zone flips to active immediately. stamps
lastActiveAtto now. - Before that stamp, animal ages catch up: each animal advances by
(now - lastActiveAt).daysmonths (one game day = one animal month, same as the daily health tick). A baby born before dormancy has grown when the zone is woken. - Health, illness, breeding, training and enrichment stay frozen until the next advance-day, which runs the FULL sim path on the now-active zone. Animals past lifespan die on that first full tick — the designed death cluster — not during the dormant skip itself.
- Zone remains active for 7 days from the wake event, sliding window on subsequent visits/modifications.
- Advance day is a visit to every zone. stamps each zone active before the day runs, so a player who tends the whole zoo from one command never leaves a zone dormant. A zone still goes dormant only when the player does not advance the day and does not visit or modify that zone for seven days.
Daily-Sim Budget (locked)
| Constraint | Bound |
|---|---|
| Alexa 8s response ceiling | All advance-day work must complete within ~6s (2s safety margin) |
| Visitor sim cap | VISITOR_SIM_CAP = 400 (already shipped, line 51 — extended visitors get sampled-average spend) |
| Per-zone work (active) | Linear in animals + habitats; bounded |
| Per-zone work (dormant) | O(1) — single multiplication for ticket revenue |
| Realistic active count | 3-8 zones for engaged players; 1-2 for casual |
Estimated 50-Zone Runtime (analytic — Phase 5 must measure empirically)
Empirical baseline: AMAYUZ2L (17 zones, 12,137 daily visitors, full sim every day) runs comfortably within Alexa budget today in prod. The @LogDurationAfter decorator on logs phase timing; no 8s-ceiling overruns observed against his account.
Methodology: The visitor sim cap (400) makes the visitor-BFS phase O(1) regardless of zone count. The per-zone fixed work (health check, breeding, training, enrichment, upkeep, event triggers) scales linearly with zone count. Extrapolating from 17 → 50 zones at constant per-zone cost yields ~2.9x the non-visitor work.
| Scenario | Estimated runtime | Notes |
|---|---|---|
| Full sim, 50 zones, all active | ~6.5–7.5s | Within 8s ceiling; tight against 6s safety budget. Visitor BFS fixed at 400 cap; per-zone work scales linearly from 17-zone baseline. |
| Realistic mix, 5 active + 45 dormant | ~2.0–3.0s | Active-zone work dominates (5 zones full sim); dormant zones add O(45) trivial operations (single revenue multiplication each). Far inside 6s budget. |
| Stress: 20 active + 30 dormant | ~4.0–5.0s | Active-zone work 4x larger than realistic; still within 6s budget. |
| Pathological: 50 active, no dormancy | ~6.5–7.5s | Same as full-sim row. Realistic only if a player force-touches all 50 zones in a 7-day window — uncommon by design. |
If Phase 5 empirical measurement shows full-sim 50-zone exceeds 6s: tighten the dormancy trigger from 7 days to 3 days (faster active-set decay), reducing the realistic worst-case active zone count.
If empirical measurement shows full-sim 50-zone exceeds 8s: surface an active-zone cap in UI ("you have N active zones simulating at full fidelity; older zones are dormant"), document the cap, and ship the cap as a hard limit in .
Phase 5 Measurement Plan (binding on the Phase 5 epic)
The Phase 5 epic MUST include — as a merge-gate — empirical runtime measurement:
- Construct a synthetic 50-zone test
ZooAccount(10 Tier 0 + 12 Tier 1 + 14 Tier 2 + 8 Tier 3 + 6 Tier 4) via direct DB seed +admin_cache_resetto flush. - Set 5 zones to active (
zone_activity.last_active_at = NOW()), 45 to dormant (last_active_at = NOW() - INTERVAL 30 DAY). - Run
play_gameadvance-day against the local backend; capture@LogDurationAfteroutput for . - Repeat 5 times; record median.
- Repeat for "50 active, no dormant" pathological case; record median.
- If both medians ≤6s → ship as-is. If full-sim exceeds 6s → tighten trigger to 3 days. If full-sim exceeds 8s → ship active-zone cap.
- Record measurements in this section before Phase 5 merge.
Season Lifecycle: Heritage Mode (Q7)
Live Window → Closed → Heritage
Day 0: Mini-season "Lunar Festival" starts.
- 50%-off unlock available (live-window discount).
- Event mechanic ACTIVE.
- Live leaderboard open, points accruing.
Day 0-27: Live window. Players unlock, compete, climb leaderboard.
Day 28: Live window ends.
- Top-3 trophies awarded permanently (Tier A).
- Top-10% badge awarded to qualifying players (Tier A).
- Live leaderboard archives. No more entries accepted.
- Event mechanic DISABLES for everyone.
- Themed zone-theme + cosmetics now full-price forever.
Day 29+: Heritage Mode available.
- Any player can opt-in via "replay season N" command.
- Event mechanic RE-ENABLES for that opted-in player only.
- Heritage Mode awards smaller reward pool (1 cosmetic) on completion.
- Heritage all-time leaderboard open for that season — accumulates forever.
- #1 on Heritage all-time gets "Heritage Season N Champion" (Tier B trophy).
Heritage Mode Mechanics
| Aspect | Behavior |
|---|---|
| Opt-in | "replay season N" or "heritage mode season N" command |
| Duration | 28 days for mini, 90 days for mega (same as original live window) |
| Event mechanic | Re-enabled for that player only |
| Concurrent runs | Can run Heritage for multiple past seasons simultaneously |
| Rewards | 1 cosmetic per completion (visually distinct from live-window items) |
| Leaderboard | All-time best — single climb, your best run is your rank |
| Cost to opt-in | Free if season-zone already unlocked; otherwise full-price unlock first |
Content Library Math
| Year | Live mini-seasons shipped | Live mega-seasons shipped | Total replayable seasons |
|---|---|---|---|
| 1 | 12 | 4 | 16 |
| 2 | 24 | 8 | 32 |
| 3 | 36 | 12 | 48 |
| 5 | 60 | 20 | 80 |
A year-3 new player joining the game finds 48 past seasons to chase via Heritage Mode + 1 active mini + 1 active mega. That's a deep library, not "you missed it."
Cosmetic Exclusivity (Q8)
3-Tier System
| Tier | Examples per season | Obtainable | Why |
|---|---|---|---|
| A — Live-window exclusive forever | 3 top-3 trophies + 1 top-10% Live Finisher badge = 4 items | ONLY during the 28-day (mini) or 90-day (mega) live window. Never again, by anyone. | "I was here when it happened" recognition. Veterans are recognized for real-time participation. |
| B — Heritage Mode only | "Heritage Season N Champion" — visually distinct smaller version of the gold trophy | Anyone playing Heritage Mode for that season; awarded to #1 on the Heritage all-time leaderboard | "I caught up" recognition. New players have aspirational climbs forever. |
| C — Forever available | Themed decorations (~6-12 items), habitat skins (~2), walkway variants (~2), themed species (~4-6), zone-theme unlock | Buyable during live window AND forever after at full price | No FOMO on content access. The game's library compounds permanently. |
What This Means for Visit Walks
A veteran's zoo entrance might show: [Season 1 Mini Gold] [Season 2 Mini Silver] [Season 3 Mega Bronze] [Season 4 Live Finisher] [Season 7 Mega Gold] ... — a permanent row of achievements that signal "this player has been here a long time."
A year-3 newcomer's zoo entrance might show: [Heritage Season 2 Champion] [Heritage Season 5 Champion] [Heritage Season 9 Champion] [Season 14 Live Finisher] ... — visually distinct but equally legitimate. They tell a different story: "caught up, competed in current seasons."
Both displays are aspirational. Both are achievable. Both motivate the player they belong to.
Code Impact (Preliminary)
| File | Change |
|---|---|
/ confirmRestart |
Flip refund logic; preserve persistent fields per § Restart |
computeGoldenTicketRefund(ZooAccount) reads the cap-independent Golden Ticket accumulator; appendTransaction increments it on premium purchases |
|
ZooAccount (model) |
Add unlockedSeasons Set<String>, seasonTrophies List<SeasonTrophy>, lifetimeAggregates LifetimeStats, zoneLastActiveDates Map<Integer, LocalDate> |
model/zoosimulator/Season.java (new) |
Season metadata: name, theme, isMega, unlock costs, live window dates, leaderboard scoring spec |
model/zoosimulator/SeasonEvent.java (new) |
Event mechanic active during a season |
model/zoosimulator/SeasonTrophy.java (new) |
Tier A/B trophy records — permanent |
service/zoosimulator/.java (new) |
Season unlock, leaderboard scoring, event lifecycle, live→Heritage transition |
service/zoosimulator/.java (new) |
Heritage opt-in, replay window, all-time leaderboard |
service/zoosimulator/.java (new) |
Visit session state, read-only zone snapshot, reward delivery (destination-economy formulas) |
service/zoosimulator/.java |
Per-zone last-active tracking; activeHabitats / activeZones bound the visitor BFS; visitorProxyForZone + DORMANT_TICKET_MULTIPLIER feed dormant ticket revenue; markActive catch-up ages on wake |
handlers/zoosimulator/.java (new) |
viewSeasons, unlockSeason, viewSeasonLeaderboard, replayHeritageSeason |
handlers/zoosimulator/.java (new — was DEFERRED) |
Implement per grid-layout.md § Multiplayer with Q4 economy |
FreeTextDeclarationAction |
Add ZOO_VIEW_SEASONS, ZOO_UNLOCK_SEASON, ZOO_VIEW_SEASON_LEADERBOARD, ZOO_REPLAY_HERITAGE, ZOO_RATE_ZOO |
Active-zone visitor BFS via activeHabitats / activeZones; dormant zones add visitorProxy × ticketPrice × 0.30 to admission. names the dormant zones and that contribution. |
|
| Apply zone-tier multiplier + zone-count surcharge (Q2/Q6) | |
zoo_simulator.seasons (new table) |
Season catalog |
zoo_simulator.season_leaderboard (new table) |
Per-season ranking (live + Heritage) |
zoo_simulator.season_leaderboard_history (new table) |
Closed-season top-3 + top-10% trophy records |
zoo_simulator.zoo_visits (new table) |
Visit log + ratings + comments |
zoo_simulator.zoo_visit_ratings (new table) |
Star + optional comment rows |
zoo_simulator.zone_activity (new table) |
Per-zone last-active timestamp for Q6 dormancy |
zoo_simulator.ZoneTheme enum |
Extended per new mega-season drop |
data/schemas/zoo_simulator.md |
New tables documented per data-catalog rule |
economy.md |
Update upkeep tables to reflect per-tier soft caps + zone-count surcharge |
grid-layout.md |
Flip Multiplayer section status from DEFERRED to PHASE 1 IN FLIGHT; flip 11x11 status to active |
launch-plan.md |
Add Season 1 launch checklist as a separate sub-launch |
Validation Items (must complete before associated Phase ships)
| Item | Owner | Gates |
|---|---|---|
| Cost-curve validation against AMAYUZ2L (whale, 50B ZB) AND AMAWNE6X (active mid-tier) (Q2, audit A6) — LOCKED 2026-05-26 epic 20356 | Design | DONE |
| Subscription bonus stacking confirmation (1.25x as outermost multiplier, after tier + dormancy — audit A4) — LOCKED in Cost & Economy Curve § Application Order, epic 20356 | Design | DONE |
| .applyCurrencyPayout NPE fix (audit B1) + 2-3 affected-player reconciliation | Engineering | DONE (queue 19098, commit 4c91d0f4, deploy 2026-05-13; retry sweep reconciled all 3 players 2026-05-14/18) |
| ISP contextual trigger wiring (animal_death, season_starts, season_ends, top-10% earned — audit B2) | Design + engineering | Phase 4 |
| Voice-rendering audit of all visit-walk text (no parens, brackets, slashes — audit B4) | Design + UX | Phase 2 |
| Rate-zoo per-(visitor, owner, week) idempotency design (audit B5) | Design | Phase 2 |
| Performance budget validation at 50-zone scale (Q6) — design budget LOCKED 2026-05-26 epic 20356; empirical 50-zone synthetic measurement bound to Phase 5 merge per § Performance & Scale | Design + engineering | Phase 5 merge gate |
| Season-unlock ZB-cost playtest (does 50,000 ZB feel "achievable in a few real-time days" for new players?) | Playtest | Phase 3 |
| Visit-reward formula playtest (does 50-500 ZB scaling create the destination-economy incentive without exploitability?) | Playtest | Phase 2 |
| Restart UX copy review (does the confirmation message clearly communicate what persists?) | Design | Phase 1 |
| Heritage Mode opt-in UX (does it feel like "real catchup" vs "consolation prize"?) | Playtest | Phase 4 |
| Trophy display in visit walks (does the entrance trophy row read as aspirational, not crowded?) | Design + UX | Phase 6 |
Why This Approach Wins
- Aligns with "keep growing forever" — your stated goal verbatim. No reset-as-progression nonsense.
- Solves the live-game cold-start problem — most live games have a brutal new-player wall. Per-season leaderboards (mini + mega) + Heritage Mode means every new player has a fair, current leaderboard race within 4 weeks of joining, plus a deep backlog of past content to chase.
- Reuses ~80% of existing infrastructure — grid + zone-themes + premium-content + weekly-leaderboard + restart all exist; we re-shape and append, not rebuild.
- Monetization is healthier — buying things you'll keep forever feels better than buying things that reset. Season pass + visible cosmetics + impulse premium animals = three independent revenue streams.
- Social is the moat — visiting other zoos turns the cosmetics catalog into a flywheel. Destination-economy rewards make visiting a real income source, not a side activity. No competitor zoo sim has this loop because most are single-player.
- Content compounds, doesn't decay — Heritage Mode means every season we ship adds to the permanent library forever. Year 5 of operation has 80+ replayable seasons. That's a meaningful library that competitors literally cannot match without years of operation.
- Veteran identity is preserved — Tier A trophies + lifetime aggregates + zone-trophy displays give long-term players a permanent legacy that nothing erases.
- Robust + deep — every system has documented mechanics, formulas, soft caps, and validation steps. Nothing untested ships.
Known Gaps (deferred to later phases)
These were surfaced in the Round 3 audit but do not block Phase 0 or Phase 1. They are logged here as known issues; each will be addressed in the phase noted.
| Tag | Gap | Addressed in |
|---|---|---|
| C1 | Visit-during-restart: graceful drop-out for in-progress visitor when owner triggers restart | Phase 2 |
| C2 | Frontend: 8 existing panels need 4+ new ones (Seasons, Heritage opt-in, Visit-Walk, Trophy display) | Phase 6 |
| C3 | Mini-season event metric currently final_zoo_bucks — needs extension to event-themed scoring |
Phase 4 |
| C4 | Login rewards interaction with seasons (double GT during mega-season live window?) | Phase 3 — design decision at season-infra ship |
| C5 | Cross-game promo treatment for season cosmetics (zoo has 5 outbound + 2 inbound promos) | Phase 4 |
| C6 | Transaction history cap (200) may need increase or per-category caps for high-volume season activity | Phase 3 |
| C7 | Data catalog design/data/schemas/zoo-simulator.md must reflect new tables (per data-catalog rule) |
Phase 3 — same session as DB change |
Cross-References
- grid-layout.md — Spatial substrate (grids, walking, placement, BFS visitor pathing, deferred multiplayer spec we now implement)
- economy.md — Currencies, current upkeep formulas (to be extended per Tier table above)
- animals.md — Species, breeding, rare variants (which become season-exclusive content)
- launch-plan.md — Current launch checklist (Season 1 release will piggyback)
- index.md — Zoo Simulator overview (Subsystem Design Docs table needs this row added)
- — Cross-game economy (subscription, GT issuance)
- — Alexa ISP integration (season-pass SKUs)
design/games/darkness-falls/exploration.md,design/games/mystery/investigation.md— Reference grid + multi-zone-transition patterns we're borrowing