/** @type {{ DataStoreName: string, StateVersion: number, IncomeTickMs: number, SaveIntervalMs: number, Plot: object, Conveyor: object, Mutation: object, Events: object, Visitor: object, Time: object, Weather: object, Quests: object, Prestige: object }} */ export const GameConfig = { DataStoreName: "BuildAZooWeb_v1", StateVersion: 2, /** Game loop interval (ms). Minimum 5000 to limit DB/API load. */ IncomeTickMs: 5000, /** Save to localStorage/API at most every this many ms. */ SaveIntervalMs: 5000, Plot: { BaseWidth: 6, BaseHeight: 6, MaxLevel: 8, ExpandByLevel: 2, BaseUpgradeCost: 300, UpgradeGrowth: 1.7, }, Conveyor: { MaxLevel: 8, BaseUpgradeCost: 250, UpgradeGrowth: 1.65, OfferCount: 3, /** Min seconds between conveyor offer refresh. >= 5 to limit load. */ RefreshSeconds: 8, }, WorldMap: { Zoos: [ { id: "player", name: "Mon zoo", x: 25, y: 50, animalWeights: { Basic: 1, Ocean: 0, Mountain: 0 } }, { id: "zoo_nord", name: "Zoo du Nord", x: 75, y: 15, animalWeights: { Basic: 2, Ocean: 1, Mountain: 1 } }, { id: "zoo_est", name: "Zoo de l'Est", x: 85, y: 55, animalWeights: { Basic: 1, Ocean: 2, Mountain: 0 } }, { id: "zoo_sud", name: "Zoo du Sud", x: 50, y: 85, animalWeights: { Basic: 1, Ocean: 1, Mountain: 2 } }, { id: "zoo_ouest", name: "Zoo de l'Ouest", x: 15, y: 25, animalWeights: { Basic: 2, Ocean: 0, Mountain: 1 } }, ], Cities: [ { id: "ville_nord", name: "Ville du Nord", x: 80, y: 10, maxVisitorsTowardZoos: 80 }, { id: "ville_sud", name: "Ville du Sud", x: 45, y: 90, maxVisitorsTowardZoos: 80 }, { id: "ville_centre", name: "Ville centrale", x: 50, y: 50, maxVisitorsTowardZoos: 100 }, ], Laboratory: { x: 50, y: 20, name: "Laboratoire" }, TruckAnimationMs: 2500, NpcTruckIntervalMs: 8000, MapUpgrade: { MaxLevel: 5, BaseUpgradeCost: 350, UpgradeGrowth: 1.5, /** Cost in research points per level (agrandissement carte). */ BaseResearchCost: 15, ResearchUpgradeGrowth: 1.6, }, }, Bots: { /** Max distance (in map %) to consider a zoo as neighbor for color weights. */ NeighborMaxDistance: 35, /** Min seconds between two decision ticks per bot. */ TickIntervalMinSeconds: 8, TickIntervalMaxSeconds: 25, /** Initial coins range for new bots. */ InitialCoinsMin: 150, InitialCoinsMax: 450, }, Truck: { MaxLevel: 7, BaseUpgradeCost: 400, UpgradeGrowth: 1.5, }, School: { MaxLevel: 8, BaseUpgradeCost: 250, UpgradeGrowth: 1.65, }, /** Centre de recherche (Rappel grandes règles): 7 niveaux, unités de recherche pour agrandir la carte, 10 zoos/unité. */ Research: { MaxLevel: 7, ZoosPerUnit: 10, BuildCost: 300, BaseUpgradeCost: 320, UpgradeGrowth: 1.6, PointsPerTickPerLevel: 0.1, }, /** Billeterie: 7 niveaux, 20 visiteurs/unité en simultané. */ Billeterie: { MaxLevel: 7, VisitorsPerUnit: 20, BuildCost: 280, BaseUpgradeCost: 280, UpgradeGrowth: 1.55, }, /** Nourriture: 7 niveaux, 5 animaux/unité. */ Food: { MaxLevel: 7, AnimalsPerUnit: 5, BuildCost: 260, BaseUpgradeCost: 260, UpgradeGrowth: 1.5, /** Seconds without being fed before the animal dies. */ MaxSecondsWithoutFood: 120, }, /** Accueil nouveaux animaux: 7 niveaux, 1 animal/unité. */ Reception: { MaxLevel: 7, AnimalsPerUnit: 1, BuildCost: 240, BaseUpgradeCost: 240, UpgradeGrowth: 1.55, AcclimatationSecondsBase: 45, /** Seconds a ready animal can wait without being placed before dying. */ MaxSecondsReadyNotPlaced: 90, }, /** Changement de milieu (couleur): 7 niveaux, payant. */ BiomeChangeColor: { MaxLevel: 7, BuildCost: 340, BaseUpgradeCost: 350, UpgradeGrowth: 1.6, }, /** Changement de milieu (température): 7 niveaux, payant. */ BiomeChangeTemp: { MaxLevel: 7, BuildCost: 340, BaseUpgradeCost: 350, UpgradeGrowth: 1.6, }, Mutation: { BaseChance: 0.06, }, Events: [], Visitor: { BasePaymentPerVisitor: 0.15, VisitorsPerAnimal: 1.2, PlotLevelBonus: 0.1, StagnationDecayAfterSeconds: 60, StagnationDecayPerMinute: 0.05, CityAttractionScale: 0.002, AnimalValueScale: 0.00015, /** Seconds without any visitor on the cell before the animal disappears. */ MaxSecondsWithoutVisit: 300, /** Multiplier bonus per souvenir shop level applied to payment per visitor (e.g. 0.2 = +20% per shop). */ SouvenirShopBonusPerShop: 0.2, /** Chance per visitor to be a luxury guest (0–1). */ LuxuryGuestChance: 0.08, /** Entry payment multiplier for luxury guests. */ LuxuryEntryMultiplier: 3, /** Extra shop spending multiplier for luxury guests (applied on top of normal shop bonus). */ LuxuryShopMultiplier: 2.5, /** Attractivity: penalty per recent death (subtracted from score). */ AttractivityDeathPenalty: 0.5, /** Attractivity: bonus per birth (added to score). */ AttractivityBirthBonus: 0.2, /** Extra stay time per souvenir shop level (e.g. 0.15 = +15% per level). Uses Time.DayLengthSeconds for base 1 day. */ StayMultiplierPerShopLevel: 0.15, /** Extra stay time per distinct animal species (e.g. 0.02 = +2% per species). */ StayMultiplierPerSpecies: 0.02, /** Incident (soif, poubelle, banc, animal loin, photo): base chance per visitor per tick when not in wait phase. */ IncidentChanceBase: 0.002, /** Multiplier to incident chance when in wait phase (truck, sale pending, etc.). */ IncidentChanceWaitMultiplier: 4, /** Seconds before unresolved incident: visitor leaves and attractivity penalty applied. */ IncidentTimeoutSeconds: 45, /** Attractivity bonus when player resolves an incident. */ IncidentResolveAttractivityBonus: 0.15, /** Coin bonus when player resolves an incident. */ IncidentResolveCoinBonus: 8, /** Attractivity penalty when incident times out unresolved. */ IncidentUnresolvedAttractivityPenalty: 0.2, }, Nursery: { BuildCost: 200, MaxLevel: 7, BaseUpgradeCost: 180, UpgradeGrowth: 1.5, /** Seconds for a baby to become mature (divided by nursery level). */ GrowthSecondsBase: 40, /** Seconds a mature baby can wait without being placed before dying. */ MaxSecondsMatureNotPlaced: 90, }, /** Reproduction: delay between pair detection and baby birth; reduced by zoo score and biome/temp fit. */ Reproduction: { /** Base seconds until baby is born for an eligible pair. */ BaseSeconds: 60, /** Max Manhattan distance between blocks to count as adjacent (1 = edge-adjacent only). */ MaxDistance: 1, }, SouvenirShop: { BuildCost: 250, MaxLevel: 7, BaseUpgradeCost: 220, UpgradeGrowth: 1.55, }, Time: { DayLengthSeconds: 120, PhaseShift: 0, }, Weather: { ChangeIntervalSeconds: 45, RainChance: 0.25, CloudyChance: 0.35, }, Quests: { CountPerDay: 3, RewardBase: 50, RewardPerLevel: 20, }, Prestige: { IncomeBonusPerLevel: 0.15, MinCoinsToReset: 5000, }, /** Phase 10: sale listings (baby/animal on truck → world map). Bébé invendu meurt après ce délai. */ Sale: { /** Seconds until a listing expires if not sold. After expiry, baby dies (deathCountRecent). */ ListingDurationSeconds: 3600, /** Default asking price for a baby or animal put on sale. */ DefaultPrice: 50, }, };