/** * Shared default zoo grid layout: row 1 building cells and 3 starter couples (row 2). * Used by state.js (defaultState) and prestige.js (doPrestige). */ import { LootTables } from "./loot-tables.js"; import { fillAnimalBlock } from "./placement.js"; /** Row 1 layout: (col, kind). Columns 1–6. */ const ROW1_LAYOUT = [ [1, "research"], [2, "billeterie"], [3, "nursery"], [4, "reception"], [5, "food"], [6, "school"], ]; /** * Build default cells for row 1 (research, billeterie, nursery, reception, food, school). * @returns {Record} */ export function buildDefaultRow1Cells() { const cells = {}; for (const [col, kind] of ROW1_LAYOUT) { cells[`${col}_1`] = { kind, level: 1 }; } return cells; } /** Default animal ids for the 3 starter couples (one per biome: Meadow, Ocean, Mountain). */ export const STARTER_ANIMAL_IDS_BY_BIOME = ["c0_r0", "c5_r0", "c10_r0"]; /** Positions for the 6 starter animals (row 2, columns 1–6). */ export const STARTER_ANIMAL_POSITIONS = [[1, 2], [2, 2], [3, 2], [4, 2], [5, 2], [6, 2]]; /** * Place 3 breeding couples (6 animals) on the grid. Mutates state.grid.cells. * @param {import("./types.js").GameState} state */ export function addStarterAnimals(state) { const now = Math.floor(Date.now() / 1000); let idx = 0; for (const animalId of STARTER_ANIMAL_IDS_BY_BIOME) { const def = LootTables.Animals[animalId]; if (def !== null && def !== undefined) { const w = def.cellsWide ?? 1; const h = def.cellsHigh ?? 1; for (let pair = 0; pair < 2 && idx < STARTER_ANIMAL_POSITIONS.length; pair++, idx++) { const [x, y] = STARTER_ANIMAL_POSITIONS[idx]; fillAnimalBlock(state, x, y, { kind: "animal", id: animalId, mutation: "none", level: 1, placedAt: now, lastVisitedAt: now, lastFedAt: now, cellsWide: w, cellsHigh: h, fromOtherZoo: false, }); } } } }