Skip to the content

Houseki宝石

Run five native gem and stone engines, play measured challenges and lessons, and save deterministic games.

Houseki (宝石) is Japanese for a gem or precious stone. About the name

Contents

Reference · Gem Swap

GameStatetype

The immutable authoritative native game state, including its board, random state and recording.

Import it

import type { GameState } from "@johnmorrisdotca/houseki/gem-swap";

Definition

interface GameState {
    readonly game: 'gem-swap';
    readonly rules: 'swap-1';
    readonly settings: Settings;
    readonly initialOptions: CreateOptions;
    readonly mode: GameMode;
    readonly dailyDate: string | null;
    readonly challenge: ChallengeRules | null;
    readonly seals: readonly Seal[];
    readonly sealsCleared: number;
    readonly elapsedMs: number;
    readonly outcome: GameOutcome;
    readonly clearedByColour: Readonly<Record<GemColour, number>>;
    readonly bestChain: number;
    readonly history: readonly ReplayOperation[];
    readonly board: readonly (Gem | null)[];
    readonly phase: GamePhase;
    readonly score: number;
    readonly moves: number;
    readonly swapCount: number;
    readonly randomState: number;
    readonly nextId: number;
    readonly usedFallback: boolean;
    readonly wave: number;
    readonly resolutionTick: number;
    readonly pendingCells: readonly number[];
    readonly pendingSpecials: readonly PlannedSpecial[];
    readonly gravityBoard: readonly (Gem | null)[] | null;
    readonly inventory: ToolInventory;
    readonly selectedTool: ToolKind | null;
    readonly toolTarget: number | null;
    readonly toolPreview: readonly number[];
    readonly toolProgress: number;
    readonly toolAwardCursor: number;
    readonly assisted: boolean;
    readonly toolWaveActive: boolean;
    readonly blackHoleCharges: 0 | 1;
    readonly blackHoleProgress: number;
    readonly blackHole: BlackHolePortal | null;
    readonly blackHoleMovePending: boolean;
    readonly blackHoleContactPending: boolean;
    readonly pendingBlackHole: boolean;
}

Members

NameTypeDescription
game"gem-swap"
rules"swap-1"
settingsSettings
initialOptionsCreateOptions
modeGameMode
dailyDatestring | null
challengeChallengeRules | null
sealsreadonly Seal[]
sealsClearednumber
elapsedMsnumber
outcomeGameOutcome
clearedByColourReadonly<Record<GemColour, number>>
bestChainnumber
historyreadonly ReplayOperation[]
boardreadonly (Gem | null)[]

Row-major. Mask gaps and the holes in clear phases contain null.

phaseGamePhase
scorenumber
movesnumber
swapCountnumber
randomStatenumber
nextIdnumber
usedFallbackboolean
wavenumber
resolutionTicknumber
pendingCellsreadonly number[]
pendingSpecialsreadonly PlannedSpecial[]
gravityBoardreadonly (Gem | null)[] | null
inventoryReadonly<Record<OrdinaryToolKind, number>>
selectedToolToolKind | null
toolTargetnumber | null
toolPreviewreadonly number[]
toolProgressnumber
toolAwardCursornumber
assistedboolean
toolWaveActiveboolean

Remains true across cascades originating from one tool use.

blackHoleCharges0 | 1
blackHoleProgressnumber
blackHoleBlackHolePortal | null
blackHoleMovePendingboolean
blackHoleContactPendingboolean
pendingBlackHoleboolean

Examples

import { createGame } from "@johnmorrisdotca/houseki/gem-swap";
import type { GameState } from "@johnmorrisdotca/houseki/gem-swap";

const state=createGame({seed:"docs"});
const value: GameState = state;
console.log(value == null ? value : typeof value === "object" ? Object.keys(value).slice(0,6) : value);
[ 'game', 'rules', 'settings', 'initialOptions', 'mode', 'dailyDate' ]

What it prints (run when this page was built)

View sourceEdit on GitHubMade from the source of @johnmorrisdotca/houseki 0.4.2.