SPB Git forge

spb/spinza

Public
8commits 1branches 0releases
1.6 MBsize
maindefault branch
16 days agolast push
TypeScript 97.6% SQL 1.4% JavaScript 0.5%
1.5 KB · 34 lines typescript
Raw Blame History
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";32export { CRASH_GAMES, CRASH_BY_SLUG } from "./crash";33export { ARCADE_GAMES, ARCADE_BY_SLUG, RAW_ARCADE_GAMES } from "./arcade";34