SPB Git

spb/spinza

Public
1.4 KB · 32 lines typescript
1/**2 * Spinza original game library. Each folder is one game: a declarative3 * definition consumed by the shared engine. `calibration.json` holds the RTP4 * tuning factor produced by `pnpm sim calibrate` — never edit pays of a5 * published game without bumping its version.6 */7import type { GameDefinition } from "@spinza/game-core";8import calibration from "./calibration.json";9import { RAW } from "./registry";1011type Calibration = Record<string, { payScale: number; version: string }>;1213function applyCalibration(def: GameDefinition): GameDefinition {14  const c = (calibration as Calibration)[def.slug];15  if (c && c.version === def.version) return { ...def, payScale: c.payScale };16  return def;17}1819export const GAMES: GameDefinition[] = RAW.map(applyCalibration);20export const GAMES_BY_SLUG: Map<string, GameDefinition> = new Map(GAMES.map((g) => [g.slug, g]));21/** Uncalibrated definitions (payScale = 1) for the calibration tool. */22export const RAW_GAMES: GameDefinition[] = RAW;2324export function getGame(slug: string): GameDefinition | undefined {25  return GAMES_BY_SLUG.get(slug);26}2728/** Order in which games are displayed by default (flagship first). */29export const FEATURED_ORDER = ["spinza-original", "neon-vault", "cosmic-collapse", "obsidian", "diamond-heist", "quantum-jackpot"];30export const FIRST_GAME_RECOMMENDATIONS = ["neon-vault", "cosmic-collapse", "spinza-original"];31export { RAW } from "./registry";32
Files · 3b4179a710ab1cd5f12ca7cfd253b81674f1521e
Menu

Theme