{
 "version": "0.3",
 "notes": "Single source of truth for all tunable numbers. Read by the three.js build and the Horizon TypeScript. Times in seconds, distances in meters, money in coins. v0.2 = tuned against the simulator in economy/sim (run: python3 economy/sim/run.py). Plain-English explanation: economy/ECONOMY.md.",
 "_changelog_v0_2": {
  "new_fields": [
   "player.speed_log_coeff / speed_log_divisor (numeric form of the run-speed formula)",
   "chase_model (simulator-only human factors + target escape at gate)",
   "biomes[].guardian.wake_delay_s / sleep_distance_m / catch_radius_m; chase_give_up_s and chase_give_up_distance_m may be [min,max] ranges (rolled per chase)",
   "biomes[].extra_eggs_per_extra_player (nest supply scales with server population)",
   "guardian_rage_by_rarity (guardian runs faster when you carry a rarer egg)",
   "bad_luck_protection (pity timer for Legendary/Mythic nest spawns)",
   "hatch_surprise (hidden roll at hatch so the reveal still surprises)",
   "egg_storage (queue for stolen eggs while incubators are busy)",
   "treadmill.tiers[].soft_cap_speed + treadmill.soft_cap_gain_mult (each treadmill trains you up to a soft cap)",
   "fuse.coin_cost_seconds_of_result_income",
   "index.biome_complete_bonus",
   "offline_earnings.egg_growth_mult",
   "delivery_bonus (cash pop for every egg you bring home from your top biome)",
   "daily_rewards (7-day login calendar; the audio already has daily_reward)",
   "social.friend_boost (the design doc's +10%)",
   "thieves.grace_period_s / min_interval_s / ambush_chance_by_rarity / run_speed_mps_by_biome",
   "pvp_steal.newbie_shield_minutes / max_speed_ratio",
   "monetization: fx/mult/duration fields on SKUs, instant_hatch.price_by_rarity, rescue_egg SKU, lucky_mult",
   "pacing_targets.lake_runway_days_engaged / lake_runway_days_by_archetype / min_session_event_frac"
  ],
  "removed_fields": [
   "thieves.spawn_interval_s (replaced by ambush_chance_by_rarity + min_interval_s)",
   "thieves.run_speed_mps (now per biome)"
  ]
 },
 "currency": {
  "name": "Coins",
  "start_coins": 0,
  "number_format": "short (1.2K, 3.4M, 5.6B)"
 },
 "player": {
  "base_run_speed_mps": 7.0,
  "speed_to_mps": "run_mps = base_run_speed_mps + speed_log_coeff * log10(1 + speed / speed_log_divisor), capped at max_run_speed_mps",
  "speed_log_coeff": 2.8,
  "speed_log_divisor": 50,
  "max_run_speed_mps": 24.0,
  "start_speed": 0,
  "onboarding_gift_speed": 200,
  "onboarding_gift_note": "Granted after the tutorial's first hatch (stand-in for Roblox's like/favorite gift). With the forest chicken it turns a ~63% escape into ~99%: the first minute should feel powerful."
 },
 "carry": {
  "one_egg_at_a_time": true,
  "speed_penalty_by_size": {
   "normal": 0.92,
   "big": 0.87,
   "huge": 0.81,
   "giant": 0.74,
   "colossal": 0.66
  },
  "drop_on_caught": true,
  "dropped_egg_returns_to_nest_after_s": 20
 },
 "chase_model": {
  "player_reaction_s": [
   0.25,
   0.7
  ],
  "steering_efficiency": [
   0.82,
   1.0
  ],
  "target_escape_at_gate_normal": 0.65,
  "note": "Simulator-only human factors (reaction time after grabbing; how straight a thumb-stick run is). Use economy/sim/calibrate_chase.py to pick a new biome's guardian chase_speed_mps."
 },
 "guardian_rage_by_rarity": {
  "common": 1.0,
  "uncommon": 1.0,
  "rare": 1.02,
  "epic": 1.05,
  "legendary": 1.1,
  "mythic": 1.15
 },
 "biomes": [
  {
   "id": "forest",
   "order": 1,
   "speed_required": 0,
   "distance_base_to_nests_m": [
    30,
    60
   ],
   "nests": 6,
   "eggs_per_nest": [
    1,
    3
   ],
   "extra_eggs_per_extra_player": 4,
   "nest_reset_s": 300,
   "guardian": {
    "species": "chicken",
    "scale": 3.5,
    "wake_on_grab": true,
    "wake_radius_m": 4,
    "wake_delay_s": 1.2,
    "sleep_distance_m": [
     2.0,
     7.0
    ],
    "catch_radius_m": 1.2,
    "chase_speed_mps": 7.2,
    "chase_give_up_s": [
     5,
     10
    ],
    "chase_give_up_distance_m": [
     25,
     40
    ],
    "stun_on_catch_s": 1.5
   },
   "egg_table": [
    {
     "species": "chicken",
     "rarity": "common",
     "weight": 32
    },
    {
     "species": "puppy",
     "rarity": "common",
     "weight": 26
    },
    {
     "species": "bunny",
     "rarity": "uncommon",
     "weight": 20
    },
    {
     "species": "owl",
     "rarity": "rare",
     "weight": 10
    },
    {
     "species": "raccoon",
     "rarity": "rare",
     "weight": 7
    },
    {
     "species": "fox",
     "rarity": "epic",
     "weight": 2.5
    },
    {
     "species": "bear",
     "rarity": "epic",
     "weight": 1.5
    },
    {
     "species": "mossback_stag",
     "rarity": "legendary",
     "weight": 0.25
    }
   ]
  },
  {
   "id": "lake",
   "order": 2,
   "speed_required": 4000,
   "distance_base_to_nests_m": [
    80,
    120
   ],
   "nests": 6,
   "eggs_per_nest": [
    1,
    2
   ],
   "extra_eggs_per_extra_player": 3,
   "nest_reset_s": 300,
   "guardian": {
    "species": "swan",
    "scale": 3.0,
    "wake_on_grab": true,
    "wake_radius_m": 5,
    "wake_delay_s": 1.0,
    "sleep_distance_m": [
     2.0,
     7.0
    ],
    "catch_radius_m": 1.2,
    "chase_speed_mps": 11.4,
    "chase_give_up_s": [
     6,
     11
    ],
    "chase_give_up_distance_m": [
     30,
     50
    ],
    "stun_on_catch_s": 1.5
   },
   "egg_table": [
    {
     "species": "frog",
     "rarity": "common",
     "weight": 32
    },
    {
     "species": "duckling",
     "rarity": "common",
     "weight": 27
    },
    {
     "species": "turtle",
     "rarity": "uncommon",
     "weight": 21
    },
    {
     "species": "catfish",
     "rarity": "rare",
     "weight": 13
    },
    {
     "species": "beaver",
     "rarity": "epic",
     "weight": 4
    },
    {
     "species": "swan",
     "rarity": "epic",
     "weight": 2.6
    },
    {
     "species": "axolotl",
     "rarity": "legendary",
     "weight": 0.33
    },
    {
     "species": "lake_serpent",
     "rarity": "mythic",
     "weight": 0.07
    }
   ]
  }
 ],
 "nest_note": "Every nest_reset_s (aligned to UTC so all servers match) every nest rerolls its eggs. Species, size and mutation are visible on the shell. Server announces Legendary+ spawns.",
 "future_biome_speed_gates": {
  "desert": 100000,
  "snow": 500000,
  "volcano": 2500000,
  "note": "Each new biome is 5x the previous gate. Desert needs the Gold treadmill (soft cap 150K); Snow needs Cosmic (soft cap 750K); Volcano needs a new 6th treadmill tier (~300/step, soft cap 3.75M). Recommended guardian chase speeds from calibrate_chase.py: desert 17.2, snow 19.7, volcano 22.4 m/s."
 },
 "pets": {
  "chicken": {
   "biome": "forest",
   "rarity": "common",
   "income_per_s": 1
  },
  "puppy": {
   "biome": "forest",
   "rarity": "common",
   "income_per_s": 2
  },
  "bunny": {
   "biome": "forest",
   "rarity": "uncommon",
   "income_per_s": 4
  },
  "owl": {
   "biome": "forest",
   "rarity": "rare",
   "income_per_s": 8
  },
  "raccoon": {
   "biome": "forest",
   "rarity": "rare",
   "income_per_s": 12
  },
  "fox": {
   "biome": "forest",
   "rarity": "epic",
   "income_per_s": 30
  },
  "bear": {
   "biome": "forest",
   "rarity": "epic",
   "income_per_s": 45
  },
  "mossback_stag": {
   "biome": "forest",
   "rarity": "legendary",
   "income_per_s": 200
  },
  "frog": {
   "biome": "lake",
   "rarity": "common",
   "income_per_s": 60
  },
  "duckling": {
   "biome": "lake",
   "rarity": "common",
   "income_per_s": 80
  },
  "turtle": {
   "biome": "lake",
   "rarity": "uncommon",
   "income_per_s": 150
  },
  "catfish": {
   "biome": "lake",
   "rarity": "rare",
   "income_per_s": 350
  },
  "beaver": {
   "biome": "lake",
   "rarity": "epic",
   "income_per_s": 900
  },
  "swan": {
   "biome": "lake",
   "rarity": "epic",
   "income_per_s": 1300
  },
  "axolotl": {
   "biome": "lake",
   "rarity": "legendary",
   "income_per_s": 5000
  },
  "lake_serpent": {
   "biome": "lake",
   "rarity": "mythic",
   "income_per_s": 25000
  }
 },
 "hatch_time_s": {
  "forest": {
   "common": 12,
   "uncommon": 25,
   "rare": 45,
   "epic": 90,
   "legendary": 300
  },
  "lake": {
   "common": 60,
   "uncommon": 150,
   "rare": 480,
   "epic": 1500,
   "legendary": 4800,
   "mythic": 14400
  }
 },
 "night": {
  "cycle_s": 480,
  "night_duration_s": 45,
  "growth_multiplier": 15,
  "note": "Every 8 minutes (UTC-aligned, identical on every server so server-hopping can't chain nights) it is night for 45 s and incubating eggs grow 15x: ~2.3x average speed-up while online. Offline growth is 1x."
 },
 "size_roll": [
  {
   "id": "normal",
   "chance": 0.7,
   "income_mult": 1.0,
   "visual_scale": 1.0
  },
  {
   "id": "big",
   "chance": 0.2,
   "income_mult": 1.5,
   "visual_scale": 1.3
  },
  {
   "id": "huge",
   "chance": 0.08,
   "income_mult": 2.5,
   "visual_scale": 1.7
  },
  {
   "id": "giant",
   "chance": 0.018,
   "income_mult": 5.0,
   "visual_scale": 2.2
  },
  {
   "id": "colossal",
   "chance": 0.002,
   "income_mult": 12.0,
   "visual_scale": 3.0
  }
 ],
 "size_note": "Egg size is rolled when the egg spawns in the nest and is VISIBLE (bigger egg). Bigger = slower carry = risk/reward.",
 "mutation_roll": [
  {
   "id": "none",
   "chance": 0.9,
   "income_mult": 1.0
  },
  {
   "id": "silver",
   "chance": 0.07,
   "income_mult": 1.5
  },
  {
   "id": "gold",
   "chance": 0.025,
   "income_mult": 2.5
  },
  {
   "id": "rainbow",
   "chance": 0.005,
   "income_mult": 4.0
  }
 ],
 "mutation_note": "Rolled at egg spawn; visible on the shell (silver/gold/rainbow egg).",
 "hatch_surprise": {
  "size_up_chance": 0.08,
  "mutation_chance": 0.03,
  "note": "Hidden roll at hatch so the reveal still has a surprise: 8% the pet comes out one size bigger than its egg, 3% an un-mutated egg hatches Silver. Play size_huge / mutation_silver stingers."
 },
 "bad_luck_protection": {
  "hours_by_rarity": {
   "legendary": 3,
   "mythic": 14
  },
  "note": "If a player has played this many hours in their top biome without a nest reset showing that rarity, the next reset spawns one (server-announced). Resets when one is seen. Hours are play time, not wall time."
 },
 "pen": {
  "start_slots": 4,
  "max_display_slots": 8,
  "slot_costs": [
   150,
   2500,
   60000,
   200000000
  ],
  "storage_slots": 50,
  "equip_best_button": true,
  "note": "Only equipped pets (on pads) earn. Display cap of 8 is a Horizon world-vertex budget constraint."
 },
 "incubators": {
  "start_slots": 2,
  "max_slots": 5,
  "slot_costs": [
   600,
   20000,
   1500000000
  ],
  "note": "max_slots counts coin slots; the extra_incubator durable adds a 6th."
 },
 "egg_storage": {
  "slots": 6,
  "sell_value_mult_of_income": 10,
  "note": "Unhatched eggs wait here when all incubators are busy, so stealing never stops. Overflow sells for 10 s of the pet's income."
 },
 "treadmill": {
  "steps_per_s": 2.0,
  "soft_cap_gain_mult": 0.03,
  "soft_cap_note": "Each tier trains at full rate up to its soft_cap_speed, then at 3% ('Treadmill mastered! Upgrade for full gains'). This makes the next biome gate a coin goal, not just an AFK-time goal.",
  "tiers": [
   {
    "id": "basic",
    "speed_per_step": 1,
    "soft_cap_speed": 1000,
    "cost": 0
   },
   {
    "id": "scifi",
    "speed_per_step": 3,
    "soft_cap_speed": 6000,
    "cost": 15000
   },
   {
    "id": "flame",
    "speed_per_step": 10,
    "soft_cap_speed": 20000,
    "cost": 400000
   },
   {
    "id": "gold",
    "speed_per_step": 30,
    "soft_cap_speed": 150000,
    "cost": 9000000000
   },
   {
    "id": "cosmic",
    "speed_per_step": 100,
    "soft_cap_speed": 750000,
    "cost": 60000000000
   }
  ],
  "trails": [
   {
    "id": "grey",
    "mult": 1.5,
    "cost": 100
   },
   {
    "id": "green",
    "mult": 2.0,
    "cost": 5000
   },
   {
    "id": "blue",
    "mult": 3.0,
    "cost": 500000000
   },
   {
    "id": "purple",
    "mult": 4.0,
    "cost": 3000000000
   },
   {
    "id": "gold",
    "mult": 5.0,
    "cost": 5000000000
   }
  ],
  "rhythm_minigame": {
   "enabled": true,
   "note": "Optional tap-rhythm on the treadmill: beat markers scroll toward a hit zone in time with the music; hits build a combo that multiplies speed gain. Idle (no taps) = normal auto-steps, so it's never required.",
   "beat_interval_s": 0.5,
   "hit_window_s": {
    "perfect": 0.07,
    "good": 0.14
   },
   "combo_mult_steps": [
    [
     0,
     1.0
    ],
    [
     5,
     1.25
    ],
    [
     15,
     1.5
    ],
    [
     30,
     2.0
    ],
    [
     60,
     2.5
    ]
   ],
   "miss_resets_combo": true,
   "perfect_bonus_steps": 1
  }
 },
 "delivery_bonus": {
  "seconds_of_income_by_rarity": {
   "common": 10,
   "uncommon": 15,
   "rare": 30,
   "epic": 60,
   "legendary": 180,
   "mythic": 600
  },
  "min_coins": 5,
  "only_top_biome": true,
  "note": "Bringing an egg home pays an instant '+$' pop worth N seconds of your current income (cash_collect sfx). Only for eggs from your highest unlocked biome, so lake players can't farm easy forest eggs. Pays once per egg (re-stolen or returned eggs don't pay again)."
 },
 "sell": {
  "value_multiplier_of_income_per_s": 30
 },
 "fuse": {
  "inputs": 3,
  "same_species_required": true,
  "coin_cost_seconds_of_result_income": 60,
  "result": "same species, next size tier up (cap colossal); mutation kept only if all 3 share it"
 },
 "index": {
  "reward_per_new_species": {
   "coins_seconds_of_income": 30,
   "speed": 30
  },
  "biome_complete_bonus": {
   "coins_seconds_of_income": 1800,
   "speed": 1000
  }
 },
 "offline_earnings": {
  "rate": 0.2,
  "cap_hours": 8,
  "egg_growth_mult": 1.0,
  "note": "Paid on join from a server-side lastSeen timestamp, using base income (no temporary boosts). Incubating eggs keep growing at 1x while away."
 },
 "daily_rewards": {
  "resets_on_miss": false,
  "first_claim_after_tutorial": true,
  "min_income_per_s": 5,
  "ladder": [
   {
    "day": 1,
    "coins_seconds_of_income": 120
   },
   {
    "day": 2,
    "speed_x2_10m": 1
   },
   {
    "day": 3,
    "coins_seconds_of_income": 1800
   },
   {
    "day": 4,
    "instant_hatch": 1
   },
   {
    "day": 5,
    "lucky_15m": 1
   },
   {
    "day": 6,
    "coins_seconds_of_income": 3600
   },
   {
    "day": 7,
    "coins_seconds_of_income": 7200,
    "lucky_15m": 1
   }
  ],
  "note": "7-day calendar that advances on each day you log in (missing a day pauses it, never resets it), then loops."
 },
 "social": {
  "friend_boost": 0.1
 },
 "thieves": {
  "enabled": true,
  "max_active_per_player": 1,
  "grace_period_s": 600,
  "min_interval_s": 90,
  "ambush_chance_by_rarity": {
   "common": 0.0,
   "uncommon": 0.04,
   "rare": 0.1,
   "epic": 0.18,
   "legendary": 0.25,
   "mythic": 0.3
  },
  "run_speed_mps_by_biome": {
   "forest": 6.5,
   "lake": 10.0
  },
  "targets": "a player carrying an Uncommon+ egg outside the safe zone; pops out of a bush ahead of you, telegraphed 1.5 s early by thief_giggle",
  "steal_on_touch": true,
  "trap_holds_s": 7,
  "bonk_to_scare": "tap the thief within 3 m to make it flee (3 s cooldown)",
  "stolen_egg_behavior": "thief runs off; tag it to get the egg back, else the egg drops back at its nest after 20 s"
 },
 "pvp_steal": {
  "enabled": true,
  "rule": "Touch a player who is carrying an egg (outside any safe zone) and press STEAL: the egg transfers to you. 5 s cooldown per victim. Victim gets a 2 s speed boost.",
  "safe_zones": "each base footprint + spawn plaza",
  "newbie_shield_minutes": 30,
  "max_speed_ratio": 5,
  "anti_grief_note": "Players can't be PvP-stolen from during their first 30 min of play, and you can't steal from someone whose speed is less than 1/5 of yours (stops end-game players farming newbies in tiny servers)."
 },
 "bear_traps": {
  "max_active_per_player": 1,
  "hold_s": 7,
  "placeable_only_while_carrying": true,
  "not_in_safe_zone": true,
  "traps_thieves": true,
  "guardians_immune": true,
  "budget_note": "Max 1 (not Roblox's 3) to stay inside the Horizon world vertex budget. Guardians must be immune or a trap at the nest trivialises the chase."
 },
 "monetization_meta_credits": {
  "note": "Meta Credits \u2248 $0.01 each to the player; min price 25. Creator receives ~$0.0032/credit. Bonus program historically rewarded >15 credits spent per monthly visitor. Show odds on anything random.",
  "lucky_mult": 2.0,
  "durables": [
   {
    "sku": "starter_pack",
    "price": 99,
    "effect": "one-time: green trail + 3 Instant Hatch + 1 Lucky 15 min + 20K coins",
    "show_after_s": 600,
    "fx": {
     "coins": 20000,
     "trail_to": 2,
     "instant_hatch_tokens": 3,
     "lucky_tokens": 1
    }
   },
   {
    "sku": "2x_money",
    "price": 399,
    "effect": "permanent x2 coin income",
    "income_mult": 2.0
   },
   {
    "sku": "2x_hatch",
    "price": 349,
    "effect": "permanent x2 egg growth speed",
    "hatch_mult": 2.0
   },
   {
    "sku": "extra_incubator",
    "price": 199,
    "effect": "+1 incubator slot (beyond coin slots)"
   },
   {
    "sku": "vip",
    "price": 299,
    "effect": "permanent x1.25 income, gold name tag, offline cap 12 h",
    "income_mult": 1.25,
    "offline_cap_hours": 12
   }
  ],
  "consumables": [
   {
    "sku": "instant_hatch",
    "price": 25,
    "price_by_rarity": {
     "common": 25,
     "uncommon": 25,
     "rare": 25,
     "epic": 25,
     "legendary": 49,
     "mythic": 79
    },
    "effect": "finish one incubating egg now"
   },
   {
    "sku": "grow_all",
    "price": 79,
    "effect": "finish all incubating eggs now"
   },
   {
    "sku": "speed_x2_10m",
    "price": 25,
    "effect": "x2 treadmill speed gain for 10 min (pop-up shop on the treadmill)",
    "mult": 2,
    "duration_s": 600
   },
   {
    "sku": "speed_x5_30m",
    "price": 99,
    "effect": "x5 treadmill speed gain for 30 min",
    "mult": 5,
    "duration_s": 1800
   },
   {
    "sku": "lucky_15m",
    "price": 49,
    "effect": "SERVER-WIDE x2 mutation + size-up chances on nest spawns for 15 min; the buyer is announced and thanked. Does not stack: a second purchase extends the timer.",
    "duration_s": 900
   },
   {
    "sku": "coins_small",
    "price": 49,
    "effect": "coins = 2 h of current income (min 5K)"
   },
   {
    "sku": "coins_large",
    "price": 199,
    "effect": "coins = 12 h of current income (min 50K)"
   },
   {
    "sku": "rescue_egg",
    "price": 25,
    "effect": "When a guardian catches you carrying an Epic+ egg: keep it and get a 3 s head start. Once per trip.",
    "max_per_day": 3,
    "min_rarity": "epic"
   }
  ]
 },
 "pacing_targets": {
  "first_egg_stolen_s": 30,
  "first_hatch_s": 60,
  "first_pen_upgrade_s": 300,
  "lake_unlocked_min": [
   8,
   20
  ],
  "first_epic_min": [
   4,
   20
  ],
  "first_legendary_hours": [
   1.5,
   4
  ],
  "first_mythic_hours": [
   6,
   14
  ],
  "content_runway_days_before_next_biome": 14,
  "lake_runway_days_engaged": [
   12,
   17
  ],
  "lake_runway_days_by_archetype": {
   "casual": [
    21,
    60
   ],
   "grinder": [
    4,
    9
   ]
  },
  "min_session_event_frac": 0.8,
  "session_length_min": [
   10,
   25
  ],
  "targets_note": "v0.2 changes: Lake unlock moved earlier (8-20 min) so even a 12-min casual first session sees the second biome (D1 hook); first Epic earlier (4-20 min) because the Forest is the tutorial biome; first Mythic tightened to 6-14 play-hours (~day 6-11 for engaged) so the Mythic lands inside the 14-day Lake window; added runway targets per archetype (play-day the Desert speed gate is reached)."
 },
 "_changelog_v0_3": {
  "decisions": [
   "Mystery Egg removed at launch (loot-box concern for minors); day-7 daily reward now 2h coins + Lucky 15m",
   "Rescue Egg kept (watch: >5% of catches rescued = chase too hard)",
   "Treadmill tap-rhythm minigame added (treadmill.rhythm_minigame)",
   "Lake swan chase_speed_mps 12.5 -> 11.4: in-game calibration (bridge bend lets the swan cut corners) so escape at the 4K gate lands at the 65% design target (QA_SYSTEMS.md)"
  ]
 }
}