export type GameStatus = "in-development" | "released" | "coming-soon"; export type Screenshot = { src: string; /** Short caption. Also used as the image alt text. */ caption: string; }; /** * A gameplay pillar: what the player actually *does*. * * Copy rules, borrowed from the EmberWild site so both properties describe the * game the same way: * 1. No story. No lore, no factions, no twists. A visitor should arrive * knowing what they will do, not what they will find out. * 2. The title is one word. The body is one sentence. * 3. If the screenshot already says it, do not write it. */ export type Pillar = { title: string; body: string; /** The capture that illustrates it. */ shot: string; }; export type Game = { slug: string; title: string; status: GameStatus; /** One readable line. Shown under the title on cards and on the game page. */ tagline: string; /** Full pitch. Shown in the "About" block of the game page. */ description: string; genres: string[]; releaseWindow?: string; steamUrl?: string; /** Player count, e.g. "1-6". Drives the co-op block on the game page. */ players?: string; platform?: string; /** What the player does, one band each on the game page. */ pillars: Pillar[]; /** * Illustrated key art / cover (portrait or square-ish artwork). * Rendered on its own panel — never used as a background behind text, * because the artwork is light and text would become unreadable. */ keyArt?: string; /** * Wide in-game capture used as the page banner. Prefer a 16:9 screenshot. * Text is never laid over it either; the title block sits underneath. */ banner?: string; /** * Gallery. This is the ONLY place screenshots are declared: the game page * shows them all, the home page shows the first few of the featured game. * Drop new files in /public/image/Games// and add them here. */ screenshots: Screenshot[]; }; export const STATUS_LABEL: Record = { "in-development": "IN DEVELOPMENT", released: "RELEASED", "coming-soon": "COMING SOON", }; export const games: Game[] = [ { slug: "emberwild", title: "Emberwild", status: "in-development", tagline: "Co-op survival in a world gone wild.", description: "Emberwild is a 1-6 player co-op survival craft game. Drive the blight out of a handcrafted world, farm and build on the ground you take back, and watch the colour return with you. Five regions, nothing generated, nothing repeated.", genres: ["Survival", "Crafting", "Co-op", "Exploration"], releaseWindow: "TBA", players: "1-6", platform: "PC", keyArt: "/image/Games/Emberwild/Cover.png", banner: "/image/Games/Emberwild/Capture_1.png", // Only three captures exist so far, so "Build" borrows the key art. Swap // it for a real in-game shot of a base as soon as there is one. pillars: [ { title: "Restore", body: "Drive the blight out and the colour comes back with it. What you clear stays clear.", shot: "/image/Games/Emberwild/Capture_1.png", }, { title: "Survive", body: "Farm, cook, fish, hunt. Clean ground grows more and sleeps quieter.", shot: "/image/Games/Emberwild/Capture_2.png", }, { title: "Explore", body: "One handcrafted world, five regions. Nothing generated, nothing repeated.", shot: "/image/Games/Emberwild/Capture_3.png", }, { title: "Build", body: "Raise a home. Push outposts into everything you take back.", shot: "/image/Games/Emberwild/Cover.png", }, ], screenshots: [ { src: "/image/Games/Emberwild/Capture_1.png", caption: "First light over the clearing", }, { src: "/image/Games/Emberwild/Capture_2.png", caption: "Autumn treeline", }, { src: "/image/Games/Emberwild/Capture_3.png", caption: "The path through the meadow", }, ], }, ]; /** The game showcased on the home page. */ export const featuredGame: Game | undefined = games[0]; export function getGame(slug: string): Game | undefined { return games.find((g) => g.slug === slug); }