@idosgames/game-kit 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +3 -3
- package/dist/index.d.cts +197 -6
- package/dist/index.d.ts +197 -6
- package/dist/index.js +2 -2
- package/package.json +70 -70
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { W as World, A as ArtLook, E as Entity, a as ActorAct, F as FxEvent, b as ActorPose, c as ComponentType
|
|
1
|
+
import { W as World, C as CastDef, A as ArtLook, E as Entity, a as ActorAct, F as FxEvent, b as ActorPose, c as ComponentType } from './view-CS-ixOId.cjs';
|
|
2
2
|
export { D as DEFAULT_CAST, d as DEFAULT_LOOK, e as DEFAULT_PALETTE, f as EventHandler, g as FX_TOPIC, I as INPUT_TOPIC, h as InputEvent, R as Rng, S as System, i as Transform, T as TransformData, j as VIEW_RESIZED_TOPIC, k as Visual, V as VisualData, l as WorldOptions, m as WorldVar, n as createFixedStepper, o as createRng, p as defineComponent, q as mergePalette, r as resolveColor } from './view-CS-ixOId.cjs';
|
|
3
3
|
|
|
4
4
|
/** Every entry has a stable id and a version (bumped on an incompatible change of the entry). */
|
|
@@ -181,6 +181,14 @@ interface ModeSpec {
|
|
|
181
181
|
readonly blockParams?: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
|
|
182
182
|
/** Rules of this mode, after the preset's own. */
|
|
183
183
|
readonly rules?: readonly RuleDef[];
|
|
184
|
+
/**
|
|
185
|
+
* Which rows of the genre's own lists this game leaves out (tuning knobs, 08.11.2026): `{ "powers":
|
|
186
|
+
* { "without": ["flight"] } }`. The kinds are the genre's (runner: powers, obstacles; survivors:
|
|
187
|
+
* foes). A block never ends up with nothing: leaving out every row of a kind keeps them all.
|
|
188
|
+
*/
|
|
189
|
+
readonly content?: Readonly<Record<string, Readonly<{
|
|
190
|
+
without?: readonly string[];
|
|
191
|
+
}>>>;
|
|
184
192
|
}
|
|
185
193
|
interface ResourceSpec {
|
|
186
194
|
/** Snake-case id, readable in formulas as `res.<id>`. */
|
|
@@ -233,6 +241,8 @@ interface GameSpec {
|
|
|
233
241
|
readonly palette?: Readonly<Record<string, string>>;
|
|
234
242
|
/** Text key → language → text: `{ "title": { "en": "Lava Run", "ru": "Лавовый забег" } }`. */
|
|
235
243
|
readonly texts?: Readonly<Record<string, Readonly<Record<string, string>>>>;
|
|
244
|
+
/** Who the actors are, over the asset pack's cast, role by role: `{ "hero": { "preset": "viking", "races": ["dwarf"] } }`. */
|
|
245
|
+
readonly cast?: Readonly<Record<string, Partial<CastDef>>>;
|
|
236
246
|
readonly rewards?: RewardsSpec;
|
|
237
247
|
readonly multiplayer?: "none" | "async" | "coop" | "pvp";
|
|
238
248
|
/** Unknown fields are kept. */
|
|
@@ -247,7 +257,14 @@ interface ResolvedMode {
|
|
|
247
257
|
readonly blockParams: Readonly<Record<string, Readonly<Record<string, ParamValue>>>>;
|
|
248
258
|
/** Preset rules, then the mode's own. */
|
|
249
259
|
readonly rules: readonly RuleDef[];
|
|
260
|
+
/** Kind → the row ids this game leaves out (see ModeSpec.content); read through `contentOf`. */
|
|
261
|
+
readonly content: Readonly<Record<string, readonly string[]>>;
|
|
250
262
|
}
|
|
263
|
+
/**
|
|
264
|
+
* The rows of a genre list this mode plays with: `all` without the ones the spec leaves out. Never
|
|
265
|
+
* empty: a spec that leaves out every row keeps them all (a game must stay playable).
|
|
266
|
+
*/
|
|
267
|
+
declare function contentOf<T extends string>(mode: Pick<ResolvedMode, "content"> | undefined, kind: string, all: readonly T[]): readonly T[];
|
|
251
268
|
interface ResolvedSpec {
|
|
252
269
|
readonly spec: GameSpec;
|
|
253
270
|
readonly engine: Engine;
|
|
@@ -318,7 +335,7 @@ interface PresetDef extends RegistryEntry {
|
|
|
318
335
|
readonly name?: string;
|
|
319
336
|
/** Block ids in setup order. */
|
|
320
337
|
readonly blocks: readonly string[];
|
|
321
|
-
/** The preset's own parameters (what
|
|
338
|
+
/** The preset's own parameters (what the decision model's score questions and the config agent set). */
|
|
322
339
|
readonly params?: ParamDefs;
|
|
323
340
|
/**
|
|
324
341
|
* Values the preset gives its blocks' parameters: `{ "waves": { "count": 10 } }`. For a number or
|
|
@@ -1137,9 +1154,12 @@ interface TdLevel {
|
|
|
1137
1154
|
readonly enemies: readonly string[];
|
|
1138
1155
|
readonly firstClearGold: number;
|
|
1139
1156
|
}
|
|
1140
|
-
/**
|
|
1141
|
-
|
|
1142
|
-
|
|
1157
|
+
/**
|
|
1158
|
+
* The waves of a level: a budget a wave, spent on the foes open by then; the new foe shows itself early.
|
|
1159
|
+
* `foes`: the wave foes this game plays with (GameSpec content), every one when omitted.
|
|
1160
|
+
*/
|
|
1161
|
+
declare function wavesOf(level: number, entries: number, foes?: readonly string[]): WaveDef[];
|
|
1162
|
+
declare function levelOf$3(level: number, difficulty?: number, foes?: readonly string[]): TdLevel;
|
|
1143
1163
|
/** Stars needed to play a level (its world's gate). */
|
|
1144
1164
|
declare const tdStarsToEnter: (level: number) => number;
|
|
1145
1165
|
/** The stars a cleared level gives by the lives kept: all of them nearly — three. */
|
|
@@ -1838,4 +1858,175 @@ declare function specForPreset(presetId: string, options?: {
|
|
|
1838
1858
|
coinRef?: string;
|
|
1839
1859
|
}): GameSpec;
|
|
1840
1860
|
|
|
1841
|
-
|
|
1861
|
+
/** Which part of the title a knob changes (the dashboard groups its cards by it). */
|
|
1862
|
+
type KnobGroup = "look" | "feel" | "economy" | "liveops" | "texts";
|
|
1863
|
+
/** When the decision model answers it: on creation (the one request that creates the title), on a later tune, or both. */
|
|
1864
|
+
type KnobStage = "create" | "tune";
|
|
1865
|
+
/** A text shown to the creator. English is required, other languages fall back to it. */
|
|
1866
|
+
type KnobText = Readonly<{
|
|
1867
|
+
en: string;
|
|
1868
|
+
ru?: string;
|
|
1869
|
+
} & Record<string, string | undefined>>;
|
|
1870
|
+
/**
|
|
1871
|
+
* One change of one config section.
|
|
1872
|
+
*
|
|
1873
|
+
* `path` is a dot path inside the section; a segment `name[field=value]` picks the element of the
|
|
1874
|
+
* array `name` whose `field` equals `value` (`modes[role=core].params.difficulty`); a key with a dot in
|
|
1875
|
+
* it is quoted (`texts.'res.coins'.en`). Plain segments
|
|
1876
|
+
* that are missing are created as objects; a missing array element is not created (the patch is
|
|
1877
|
+
* skipped). An empty path is the section itself.
|
|
1878
|
+
*
|
|
1879
|
+
* The `GameSpec` section is a JSON string in the config: patches address the parsed object, the
|
|
1880
|
+
* applier parses and serializes it.
|
|
1881
|
+
*/
|
|
1882
|
+
interface KnobPatch {
|
|
1883
|
+
/** Config section: a property of the title's public configuration ("Look", "GameSpec", "Reward"…). */
|
|
1884
|
+
readonly section: string;
|
|
1885
|
+
/**
|
|
1886
|
+
* set: put `value` (a level's value for a score knob); merge: deep-merge the object `value` (objects
|
|
1887
|
+
* merge key by key, everything else is replaced); unset: remove; add / remove: put into / take out
|
|
1888
|
+
* of the array at `path` each item of the array `value` (equal items once).
|
|
1889
|
+
*/
|
|
1890
|
+
readonly op: "set" | "merge" | "unset" | "add" | "remove";
|
|
1891
|
+
readonly path?: string;
|
|
1892
|
+
readonly value?: unknown;
|
|
1893
|
+
/**
|
|
1894
|
+
* Score knobs only: the value from the answered level (0 = the first level, 1 = the last):
|
|
1895
|
+
* `min + level × (max − min)`, rounded when `integer`, to `digits` places otherwise (default 2).
|
|
1896
|
+
*/
|
|
1897
|
+
readonly range?: Readonly<{
|
|
1898
|
+
min: number;
|
|
1899
|
+
max: number;
|
|
1900
|
+
integer?: boolean;
|
|
1901
|
+
digits?: number;
|
|
1902
|
+
}>;
|
|
1903
|
+
/**
|
|
1904
|
+
* Change only what the title already has: the patch is skipped when a key on its path (the last one
|
|
1905
|
+
* too) is missing. Without it `set` / `merge` / `add` create the plain objects on the way, which is
|
|
1906
|
+
* right for Look and GameSpec and wrong for content a seed brought (a quest, an event, a currency):
|
|
1907
|
+
* a title without it would get a broken stub. The catalog sets it on every such section by itself.
|
|
1908
|
+
*/
|
|
1909
|
+
readonly ifExists?: boolean;
|
|
1910
|
+
}
|
|
1911
|
+
/** An answer of a choice knob: what the decision model reads about it, what the creator sees, what it writes. */
|
|
1912
|
+
interface KnobOption {
|
|
1913
|
+
/** Snake/kebab-case id, unique in its knob or list. */
|
|
1914
|
+
readonly id: string;
|
|
1915
|
+
readonly title: KnobText;
|
|
1916
|
+
/** For the decision model: what this option is. */
|
|
1917
|
+
readonly what: string;
|
|
1918
|
+
/** For the decision model: what it is NOT for (keeps near options apart). */
|
|
1919
|
+
readonly notFor?: string;
|
|
1920
|
+
/** For the decision model: ideas it fits. */
|
|
1921
|
+
readonly examples?: readonly string[];
|
|
1922
|
+
/** Colour swatches or a preview hint for the dashboard card (#rrggbb). */
|
|
1923
|
+
readonly swatch?: readonly string[];
|
|
1924
|
+
readonly patches: readonly KnobPatch[];
|
|
1925
|
+
/**
|
|
1926
|
+
* Translations of the texts the patches write (`{ "ru": { "Gold": "Золото" } }`): the server puts them
|
|
1927
|
+
* into the title's translation tables (only missing keys), like a seed's `$localization`.
|
|
1928
|
+
*/
|
|
1929
|
+
readonly translations?: Readonly<Record<string, Readonly<Record<string, string>>>>;
|
|
1930
|
+
}
|
|
1931
|
+
/** Which titles a knob is for. Omitted = every title. */
|
|
1932
|
+
interface KnobScope {
|
|
1933
|
+
/** Any of these modules is in the title (a base or a system: "kit-game", "quests", "premium"). */
|
|
1934
|
+
readonly modules?: readonly string[];
|
|
1935
|
+
/** The title's constructor genre (the GameSpec core mode's preset): "runner", "tycoon"… */
|
|
1936
|
+
readonly presets?: readonly string[];
|
|
1937
|
+
/** Every one of these config sections has something in it (a knob of the daily calendar needs `Reward`). */
|
|
1938
|
+
readonly sections?: readonly string[];
|
|
1939
|
+
}
|
|
1940
|
+
interface KnobBase {
|
|
1941
|
+
/** Dotted id, unique in the catalog: "look.theme", "feel.runner.lanes". */
|
|
1942
|
+
readonly id: string;
|
|
1943
|
+
readonly group: KnobGroup;
|
|
1944
|
+
readonly title: KnobText;
|
|
1945
|
+
/** One line for the creator: what turning it changes. */
|
|
1946
|
+
readonly hint?: KnobText;
|
|
1947
|
+
readonly for?: KnobScope;
|
|
1948
|
+
/** Omitted = both. */
|
|
1949
|
+
readonly stages?: readonly KnobStage[];
|
|
1950
|
+
/** The question for the decision model, in English. */
|
|
1951
|
+
readonly question: string;
|
|
1952
|
+
}
|
|
1953
|
+
interface ChoiceKnob extends KnobBase {
|
|
1954
|
+
readonly kind: "choice";
|
|
1955
|
+
/** The options, or `list` (then the options are that list's items: a shared list, extendable in PlatformAdmin). */
|
|
1956
|
+
readonly options?: readonly KnobOption[];
|
|
1957
|
+
readonly list?: string;
|
|
1958
|
+
}
|
|
1959
|
+
interface ScoreKnob extends KnobBase {
|
|
1960
|
+
readonly kind: "score";
|
|
1961
|
+
/** 2..10 levels, from the first to the last; the decision model answers a fractional level. */
|
|
1962
|
+
readonly levels: readonly string[];
|
|
1963
|
+
/** What the creator sees on each level (short, per language), as many as `levels`: those are for the model. */
|
|
1964
|
+
readonly levelTitles?: readonly KnobText[];
|
|
1965
|
+
/** Applied with the answered level (their `range` gives the value). */
|
|
1966
|
+
readonly patches: readonly KnobPatch[];
|
|
1967
|
+
}
|
|
1968
|
+
interface NoulKnob extends KnobBase {
|
|
1969
|
+
readonly kind: "noul";
|
|
1970
|
+
/** What "yes" and "no" mean, for the decision model. */
|
|
1971
|
+
readonly yes: string;
|
|
1972
|
+
readonly no: string;
|
|
1973
|
+
readonly onYes: readonly KnobPatch[];
|
|
1974
|
+
readonly onNo?: readonly KnobPatch[];
|
|
1975
|
+
}
|
|
1976
|
+
type KnobDef = ChoiceKnob | ScoreKnob | NoulKnob;
|
|
1977
|
+
/** The exported catalog: every knob, and the shared lists choice knobs point at. */
|
|
1978
|
+
interface KnobCatalog {
|
|
1979
|
+
readonly version: number;
|
|
1980
|
+
readonly knobs: readonly KnobDef[];
|
|
1981
|
+
readonly lists: Readonly<Record<string, readonly KnobOption[]>>;
|
|
1982
|
+
}
|
|
1983
|
+
/** The decision model's limits (TypeSafe System One): options of a choice, levels of a score. */
|
|
1984
|
+
declare const DECISION_MAX_OPTIONS = 255;
|
|
1985
|
+
declare const DECISION_MAX_LEVELS = 10;
|
|
1986
|
+
|
|
1987
|
+
/** One path segment: a key, or `key[field=value]` (an array element picked by a field). */
|
|
1988
|
+
interface Segment {
|
|
1989
|
+
readonly key: string;
|
|
1990
|
+
readonly match?: {
|
|
1991
|
+
field: string;
|
|
1992
|
+
value: string;
|
|
1993
|
+
};
|
|
1994
|
+
}
|
|
1995
|
+
/** `modes[role=core].params.difficulty` → segments; `null` when a segment is malformed. */
|
|
1996
|
+
declare function parseKnobPath(path: string | undefined): Segment[] | null;
|
|
1997
|
+
/** A score answer (0..1) → the patch's value by its range; the patch's own value otherwise. */
|
|
1998
|
+
declare function patchValue(patch: KnobPatch, level?: number): unknown;
|
|
1999
|
+
/**
|
|
2000
|
+
* Applies the patches in order to a section's value (a parsed object; `undefined` = the section is empty).
|
|
2001
|
+
* Returns the new value and the indexes of the patches that could not be applied (a bad path, an array
|
|
2002
|
+
* element that is not there, `add` to something that is not an array): they are skipped, the rest
|
|
2003
|
+
* still applies. Never mutates the input.
|
|
2004
|
+
*/
|
|
2005
|
+
declare function applyPatches(section: unknown, patches: readonly KnobPatch[], level?: number): {
|
|
2006
|
+
value: unknown;
|
|
2007
|
+
skipped: number[];
|
|
2008
|
+
};
|
|
2009
|
+
/** Every (section, path) a list of patches writes: what a knob owns (pinning compares against it). */
|
|
2010
|
+
declare function patchTargets(patches: readonly KnobPatch[]): string[];
|
|
2011
|
+
|
|
2012
|
+
declare const KNOB_CATALOG_VERSION = 1;
|
|
2013
|
+
declare const KNOBS: readonly KnobDef[];
|
|
2014
|
+
declare const KNOB_CATALOG: KnobCatalog;
|
|
2015
|
+
|
|
2016
|
+
declare const UI_THEMES: readonly KnobOption[];
|
|
2017
|
+
declare const KIT_PALETTES: readonly KnobOption[];
|
|
2018
|
+
declare const HERO_LOOK_OPTIONS: readonly KnobOption[];
|
|
2019
|
+
declare const BACKGROUND_OPTIONS: readonly KnobOption[];
|
|
2020
|
+
declare const SOUND_SET_OPTIONS: readonly KnobOption[];
|
|
2021
|
+
/** Ids the UI kit must know how to draw / play (its own tests check them against these lists). */
|
|
2022
|
+
declare const LOOK_RUNTIME_IDS: {
|
|
2023
|
+
readonly backgrounds: string[];
|
|
2024
|
+
readonly soundSets: string[];
|
|
2025
|
+
};
|
|
2026
|
+
/** All shared lists by id. */
|
|
2027
|
+
declare const KNOB_LISTS: Readonly<Record<string, readonly KnobOption[]>>;
|
|
2028
|
+
|
|
2029
|
+
/** Errors of a catalog; empty = good. */
|
|
2030
|
+
declare function validateKnobCatalog(catalog: KnobCatalog): string[];
|
|
2031
|
+
|
|
2032
|
+
export { ABILITIES, ART, ASSET_PACKS, type AbilityId, ActorAct, ActorPose, type ArtContext, type ArtDef, ArtLook, type AssetPackDef, BACKGROUND_OPTIONS, BLOCKS, BOSS_DEFEATED, BOSS_SPAWNED, BRANCH_LEVEL, type BlockContext, type BlockDef, type Board, Body, Bullet, CHAPTERS, CORE_EFFECTS, CastDef, type ChoiceKnob, ComponentType, type Controls, DECISION_MAX_LEVELS, DECISION_MAX_OPTIONS, DEFAULT_REWARDS, DEMO_SPEC, type DamageType, type DefineOptions, Drop, EFFECTS, ENEMIES$1 as ENEMIES, ENGINES, ENTRY_ID_RE, type EffectContext, type EffectDef, type EffectSpec, type EnemyDef$1 as EnemyDef, type Engine, Entity, type Expr, ExprError, type ExprScope, type ExprValue, FOES, FUNCTIONS, type FlowSpec, Foe, type FoeKind, FxEvent, GIVE_UP, type GameSpec, Gem, HEROES, HERO_LOOK_OPTIONS, type HeroDef, type Issue, Jumper, KIT_PALETTES, KNOBS, KNOB_CATALOG, KNOB_CATALOG_VERSION, KNOB_LISTS, KNOWN_SYSTEMS, type KindGrid, type KnobCatalog, type KnobDef, type KnobGroup, type KnobOption, type KnobPatch, type KnobScope, type KnobStage, type KnobText, LEVELS_PER_WORLD, LEVEL_CLEARED, LEVEL_MAPS, LEVEL_UP, LINKS, LOOK_RUNTIME_IDS, type LinkDef, type EnemyDef as M3EnemyDef, type GoalDef$1 as M3GoalDef, type M3HeroDef, type M3Level, type LevelDef$2 as M3LevelDef, type SkillDef$2 as M3SkillDef, M3_CHARACTER, ELEMENTS as M3_ELEMENTS, ENEMIES as M3_ENEMIES, M3_HEROES, M3_LEVELS, M3_LEVELS_PER_WORLD, LEVELS$2 as M3_LEVEL_DEFS, M3_META, M3_META_STATS, OBSTACLES$1 as M3_OBSTACLES, PIECES as M3_PIECES, SKILLS$2 as M3_SKILLS, SPECIALS as M3_SPECIALS, M3_WORLDS, M3_WORLD_STARS, MAPS, MAP_COLS, MAP_ROWS, MAX_LEVEL, MAX_PASSIVES, MAX_WEAPONS, META_CHARACTER, META_STATS, BOARDS as MG_BOARDS, CHAINS as MG_CHAINS, MG_CHARACTER, MG_COLS, MG_HEROES, MG_LEVELS, MG_LEVELS_PER_WORLD, LEVELS$1 as MG_LEVEL_DEFS, MG_META, MG_META_STATS, OBSTACLES as MG_OBSTACLES, MG_REVIVE_ENERGY, MG_ROWS, SKILLS$1 as MG_SKILLS, SPECIAL_ITEMS as MG_SPECIAL_ITEMS, MG_WORLDS, MG_WORLD_STARS, type MapDef, type MergeHeroDef, MergeItem, type MergeLevel, type MetaGameDef, type MetaHeroDef, type MetaStatDef, type ChainDef as MgChainDef, type LevelDef$1 as MgLevelDef, type ObstacleDef as MgObstacleDef, type OrderDef as MgOrderDef, type SkillDef$1 as MgSkillDef, type SpecialItemDef as MgSpecialItemDef, type WantDef as MgWantDef, Missile, type ModeSpec, type NoulKnob, type NumberOrFormula, OBSTACLE_KINDS, type ObstacleKind, Order, PASSIVES, PASSIVE_IDS, PIECE_COLORS, PLATFORMER_CHARACTER, PLATFORMER_HEROES, PLATFORMER_LEVELS, PLATFORMER_META, PLATFORMER_META_STATS, PLATFORM_LINKS, PLATFORM_PACKS, PLATFORM_PRESETS, POWERS, POWER_IDS, PRESETS, type ParamDef, type ParamDefs, type ParamValue, type PassiveDef, type PassiveId, type PlatformerHeroDef, type PlatformerLevel, type PlatformerPerk, type PowerDef, type PowerId, type PresetDef, REROLL_GEMS, REVIVE, REVIVE_GEMS, REVIVE_OFFER, ROOMS, ROOM_ROWS, ROUND_ENDED, ROUND_OVER, ROUND_STARTED, RUNNER_CHARACTER, RUNNER_HEROES, RUNNER_LEVELS, RUNNER_META, RUNNER_META_STATS, Raider, type Registry, type RegistryEntry, type RegistryKind, type ResolvedMode, type ResolvedSpec, type ResourceSpec, type RewardedPlacementDef, type RewardsSpec, RoadItem, type RoomDef, type RoomFeature, type RoundState, type RuleDef, Runner, type RunnerHeroDef, type RunnerLevel, type RunnerPerk, type RunningMode, SELL_SHARE, SHOW_START, SOUND_SET_OPTIONS, SPEC_VERSION, SPELLS, START_ROUND, SURVIVORS_META, type ScoreKnob, Shot, Soldier, type SpecResult, type SpellDef, Spot, type StartModeOptions, Survivor, type SurvivorsBuild, TD_CHARACTER, TD_HEROES, TD_LEVELS, TD_LEVELS_PER_WORLD, TD_LIVES, TD_META, TD_META_STATS, REVIVE_LIVES as TD_REVIVE_LIVES, TD_WORLDS, TD_WORLD_STARS, TOWERS, BUSINESSES as TY_BUSINESSES, TY_CHARACTER, EVENTS as TY_EVENTS, TY_HEROES, TY_LEVELS, TY_LEVELS_PER_WORLD, LEVELS as TY_LEVEL_DEFS, TY_META, TY_META_STATS, MILESTONES as TY_MILESTONES, TY_REVIVE_SECONDS, SKILLS as TY_SKILLS, UPGRADES as TY_UPGRADES, TY_WORLDS, TY_WORLD_STARS, type TdHeroDef, type TdLevel, type TdPerk, Thing, Tower, type TowerBranchDef, type TowerDef, type TowerStats, type TowerTierDef, type TracedMap, type BusinessDef as TyBusinessDef, type EventDef as TyEventDef, type GoalDef as TyGoalDef, type LevelDef as TyLevelDef, Manager as TyManager, type SkillDef as TySkillDef, type UpgradeDef as TyUpgradeDef, type TycoonHeroDef, type TycoonLevel, UI_THEMES, UPGRADE_PICK, UPGRADE_PICKED, UPGRADE_REROLL, type UpgradeOption, type ViewSize, WAVE_STARTED, WEAPONS, WEAPON_IDS, WORLDS, WORLD_STARS, type WaveDef, type WaveGroup, type WeaponDef, type WeaponId, World, abilitiesFor, act, applyLink, applyPatches, artAspect, artDocument, attachRules, boardOf, buildFromVar, buildToVar, cellAt, cellCenter, chapterOf, checkEconomy, checkExpr, checkRules, compileExpr, contentOf, cozyPack, createKitRegistry, createRegistry, defenseBoostsLink, defineKind, enemyOf$1 as enemyOf, evalNumber, fantasyPack, findMatches, fx, hasArt, hasErrors, hasMove, heroCharacterOf, heroUpgradeLink, laneRunnerBlock, levelOf$5 as levelOf, enemyOf as m3EnemyOf, levelOf$2 as m3LevelOf, skillOf$2 as m3SkillOf, m3StarsToEnter, match3Block, match3Preset, mergeBlock, mergePreset, metersOf, chainOf as mgChainOf, levelOf$1 as mgLevelOf, skillOf$1 as mgSkillOf, specialOf as mgSpecialOf, mgStarsFor, mgStarsToEnter, migrateSpec, mirrored, offerFromVar, offerToVar, packName, parseKnobPath, patchTargets, patchValue, placeBackdrop, platformerBlock, levelOf$4 as platformerLevelOf, platformerPreset, postApocalypsePack, puzzleCityLink, registerCoreEffects, registerPlatformKit, resolveParams, roundBlock, runnerCollectionLink, runnerPreset, sciFiPack, scrollBackdrop, setPose, shortCash, specForPreset, starsToEnter, startMode, survivorsBlock, survivorsPreset, levelOf$3 as tdLevelOf, starsFor as tdStarsFor, tdStarsToEnter, wavesOf as tdWavesOf, towerArt, towerDefenseBlock, towerDefensePreset, towerOf, towerSpent, towerStats, traceMap, trackControls, botTimeOf as tyBotTimeOf, businessOf as tyBusinessOf, eventOf as tyEventOf, levelOf as tyLevelOf, skillOf as tySkillOf, tyStarsFor, tyStarsToEnter, tycoonBlock, tycoonPreset, tycoonStateOf, validateKnobCatalog, validateSpec, viewOf };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { W as World, A as ArtLook, E as Entity, a as ActorAct, F as FxEvent, b as ActorPose, c as ComponentType
|
|
1
|
+
import { W as World, C as CastDef, A as ArtLook, E as Entity, a as ActorAct, F as FxEvent, b as ActorPose, c as ComponentType } from './view-CS-ixOId.js';
|
|
2
2
|
export { D as DEFAULT_CAST, d as DEFAULT_LOOK, e as DEFAULT_PALETTE, f as EventHandler, g as FX_TOPIC, I as INPUT_TOPIC, h as InputEvent, R as Rng, S as System, i as Transform, T as TransformData, j as VIEW_RESIZED_TOPIC, k as Visual, V as VisualData, l as WorldOptions, m as WorldVar, n as createFixedStepper, o as createRng, p as defineComponent, q as mergePalette, r as resolveColor } from './view-CS-ixOId.js';
|
|
3
3
|
|
|
4
4
|
/** Every entry has a stable id and a version (bumped on an incompatible change of the entry). */
|
|
@@ -181,6 +181,14 @@ interface ModeSpec {
|
|
|
181
181
|
readonly blockParams?: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
|
|
182
182
|
/** Rules of this mode, after the preset's own. */
|
|
183
183
|
readonly rules?: readonly RuleDef[];
|
|
184
|
+
/**
|
|
185
|
+
* Which rows of the genre's own lists this game leaves out (tuning knobs, 08.11.2026): `{ "powers":
|
|
186
|
+
* { "without": ["flight"] } }`. The kinds are the genre's (runner: powers, obstacles; survivors:
|
|
187
|
+
* foes). A block never ends up with nothing: leaving out every row of a kind keeps them all.
|
|
188
|
+
*/
|
|
189
|
+
readonly content?: Readonly<Record<string, Readonly<{
|
|
190
|
+
without?: readonly string[];
|
|
191
|
+
}>>>;
|
|
184
192
|
}
|
|
185
193
|
interface ResourceSpec {
|
|
186
194
|
/** Snake-case id, readable in formulas as `res.<id>`. */
|
|
@@ -233,6 +241,8 @@ interface GameSpec {
|
|
|
233
241
|
readonly palette?: Readonly<Record<string, string>>;
|
|
234
242
|
/** Text key → language → text: `{ "title": { "en": "Lava Run", "ru": "Лавовый забег" } }`. */
|
|
235
243
|
readonly texts?: Readonly<Record<string, Readonly<Record<string, string>>>>;
|
|
244
|
+
/** Who the actors are, over the asset pack's cast, role by role: `{ "hero": { "preset": "viking", "races": ["dwarf"] } }`. */
|
|
245
|
+
readonly cast?: Readonly<Record<string, Partial<CastDef>>>;
|
|
236
246
|
readonly rewards?: RewardsSpec;
|
|
237
247
|
readonly multiplayer?: "none" | "async" | "coop" | "pvp";
|
|
238
248
|
/** Unknown fields are kept. */
|
|
@@ -247,7 +257,14 @@ interface ResolvedMode {
|
|
|
247
257
|
readonly blockParams: Readonly<Record<string, Readonly<Record<string, ParamValue>>>>;
|
|
248
258
|
/** Preset rules, then the mode's own. */
|
|
249
259
|
readonly rules: readonly RuleDef[];
|
|
260
|
+
/** Kind → the row ids this game leaves out (see ModeSpec.content); read through `contentOf`. */
|
|
261
|
+
readonly content: Readonly<Record<string, readonly string[]>>;
|
|
250
262
|
}
|
|
263
|
+
/**
|
|
264
|
+
* The rows of a genre list this mode plays with: `all` without the ones the spec leaves out. Never
|
|
265
|
+
* empty: a spec that leaves out every row keeps them all (a game must stay playable).
|
|
266
|
+
*/
|
|
267
|
+
declare function contentOf<T extends string>(mode: Pick<ResolvedMode, "content"> | undefined, kind: string, all: readonly T[]): readonly T[];
|
|
251
268
|
interface ResolvedSpec {
|
|
252
269
|
readonly spec: GameSpec;
|
|
253
270
|
readonly engine: Engine;
|
|
@@ -318,7 +335,7 @@ interface PresetDef extends RegistryEntry {
|
|
|
318
335
|
readonly name?: string;
|
|
319
336
|
/** Block ids in setup order. */
|
|
320
337
|
readonly blocks: readonly string[];
|
|
321
|
-
/** The preset's own parameters (what
|
|
338
|
+
/** The preset's own parameters (what the decision model's score questions and the config agent set). */
|
|
322
339
|
readonly params?: ParamDefs;
|
|
323
340
|
/**
|
|
324
341
|
* Values the preset gives its blocks' parameters: `{ "waves": { "count": 10 } }`. For a number or
|
|
@@ -1137,9 +1154,12 @@ interface TdLevel {
|
|
|
1137
1154
|
readonly enemies: readonly string[];
|
|
1138
1155
|
readonly firstClearGold: number;
|
|
1139
1156
|
}
|
|
1140
|
-
/**
|
|
1141
|
-
|
|
1142
|
-
|
|
1157
|
+
/**
|
|
1158
|
+
* The waves of a level: a budget a wave, spent on the foes open by then; the new foe shows itself early.
|
|
1159
|
+
* `foes`: the wave foes this game plays with (GameSpec content), every one when omitted.
|
|
1160
|
+
*/
|
|
1161
|
+
declare function wavesOf(level: number, entries: number, foes?: readonly string[]): WaveDef[];
|
|
1162
|
+
declare function levelOf$3(level: number, difficulty?: number, foes?: readonly string[]): TdLevel;
|
|
1143
1163
|
/** Stars needed to play a level (its world's gate). */
|
|
1144
1164
|
declare const tdStarsToEnter: (level: number) => number;
|
|
1145
1165
|
/** The stars a cleared level gives by the lives kept: all of them nearly — three. */
|
|
@@ -1838,4 +1858,175 @@ declare function specForPreset(presetId: string, options?: {
|
|
|
1838
1858
|
coinRef?: string;
|
|
1839
1859
|
}): GameSpec;
|
|
1840
1860
|
|
|
1841
|
-
|
|
1861
|
+
/** Which part of the title a knob changes (the dashboard groups its cards by it). */
|
|
1862
|
+
type KnobGroup = "look" | "feel" | "economy" | "liveops" | "texts";
|
|
1863
|
+
/** When the decision model answers it: on creation (the one request that creates the title), on a later tune, or both. */
|
|
1864
|
+
type KnobStage = "create" | "tune";
|
|
1865
|
+
/** A text shown to the creator. English is required, other languages fall back to it. */
|
|
1866
|
+
type KnobText = Readonly<{
|
|
1867
|
+
en: string;
|
|
1868
|
+
ru?: string;
|
|
1869
|
+
} & Record<string, string | undefined>>;
|
|
1870
|
+
/**
|
|
1871
|
+
* One change of one config section.
|
|
1872
|
+
*
|
|
1873
|
+
* `path` is a dot path inside the section; a segment `name[field=value]` picks the element of the
|
|
1874
|
+
* array `name` whose `field` equals `value` (`modes[role=core].params.difficulty`); a key with a dot in
|
|
1875
|
+
* it is quoted (`texts.'res.coins'.en`). Plain segments
|
|
1876
|
+
* that are missing are created as objects; a missing array element is not created (the patch is
|
|
1877
|
+
* skipped). An empty path is the section itself.
|
|
1878
|
+
*
|
|
1879
|
+
* The `GameSpec` section is a JSON string in the config: patches address the parsed object, the
|
|
1880
|
+
* applier parses and serializes it.
|
|
1881
|
+
*/
|
|
1882
|
+
interface KnobPatch {
|
|
1883
|
+
/** Config section: a property of the title's public configuration ("Look", "GameSpec", "Reward"…). */
|
|
1884
|
+
readonly section: string;
|
|
1885
|
+
/**
|
|
1886
|
+
* set: put `value` (a level's value for a score knob); merge: deep-merge the object `value` (objects
|
|
1887
|
+
* merge key by key, everything else is replaced); unset: remove; add / remove: put into / take out
|
|
1888
|
+
* of the array at `path` each item of the array `value` (equal items once).
|
|
1889
|
+
*/
|
|
1890
|
+
readonly op: "set" | "merge" | "unset" | "add" | "remove";
|
|
1891
|
+
readonly path?: string;
|
|
1892
|
+
readonly value?: unknown;
|
|
1893
|
+
/**
|
|
1894
|
+
* Score knobs only: the value from the answered level (0 = the first level, 1 = the last):
|
|
1895
|
+
* `min + level × (max − min)`, rounded when `integer`, to `digits` places otherwise (default 2).
|
|
1896
|
+
*/
|
|
1897
|
+
readonly range?: Readonly<{
|
|
1898
|
+
min: number;
|
|
1899
|
+
max: number;
|
|
1900
|
+
integer?: boolean;
|
|
1901
|
+
digits?: number;
|
|
1902
|
+
}>;
|
|
1903
|
+
/**
|
|
1904
|
+
* Change only what the title already has: the patch is skipped when a key on its path (the last one
|
|
1905
|
+
* too) is missing. Without it `set` / `merge` / `add` create the plain objects on the way, which is
|
|
1906
|
+
* right for Look and GameSpec and wrong for content a seed brought (a quest, an event, a currency):
|
|
1907
|
+
* a title without it would get a broken stub. The catalog sets it on every such section by itself.
|
|
1908
|
+
*/
|
|
1909
|
+
readonly ifExists?: boolean;
|
|
1910
|
+
}
|
|
1911
|
+
/** An answer of a choice knob: what the decision model reads about it, what the creator sees, what it writes. */
|
|
1912
|
+
interface KnobOption {
|
|
1913
|
+
/** Snake/kebab-case id, unique in its knob or list. */
|
|
1914
|
+
readonly id: string;
|
|
1915
|
+
readonly title: KnobText;
|
|
1916
|
+
/** For the decision model: what this option is. */
|
|
1917
|
+
readonly what: string;
|
|
1918
|
+
/** For the decision model: what it is NOT for (keeps near options apart). */
|
|
1919
|
+
readonly notFor?: string;
|
|
1920
|
+
/** For the decision model: ideas it fits. */
|
|
1921
|
+
readonly examples?: readonly string[];
|
|
1922
|
+
/** Colour swatches or a preview hint for the dashboard card (#rrggbb). */
|
|
1923
|
+
readonly swatch?: readonly string[];
|
|
1924
|
+
readonly patches: readonly KnobPatch[];
|
|
1925
|
+
/**
|
|
1926
|
+
* Translations of the texts the patches write (`{ "ru": { "Gold": "Золото" } }`): the server puts them
|
|
1927
|
+
* into the title's translation tables (only missing keys), like a seed's `$localization`.
|
|
1928
|
+
*/
|
|
1929
|
+
readonly translations?: Readonly<Record<string, Readonly<Record<string, string>>>>;
|
|
1930
|
+
}
|
|
1931
|
+
/** Which titles a knob is for. Omitted = every title. */
|
|
1932
|
+
interface KnobScope {
|
|
1933
|
+
/** Any of these modules is in the title (a base or a system: "kit-game", "quests", "premium"). */
|
|
1934
|
+
readonly modules?: readonly string[];
|
|
1935
|
+
/** The title's constructor genre (the GameSpec core mode's preset): "runner", "tycoon"… */
|
|
1936
|
+
readonly presets?: readonly string[];
|
|
1937
|
+
/** Every one of these config sections has something in it (a knob of the daily calendar needs `Reward`). */
|
|
1938
|
+
readonly sections?: readonly string[];
|
|
1939
|
+
}
|
|
1940
|
+
interface KnobBase {
|
|
1941
|
+
/** Dotted id, unique in the catalog: "look.theme", "feel.runner.lanes". */
|
|
1942
|
+
readonly id: string;
|
|
1943
|
+
readonly group: KnobGroup;
|
|
1944
|
+
readonly title: KnobText;
|
|
1945
|
+
/** One line for the creator: what turning it changes. */
|
|
1946
|
+
readonly hint?: KnobText;
|
|
1947
|
+
readonly for?: KnobScope;
|
|
1948
|
+
/** Omitted = both. */
|
|
1949
|
+
readonly stages?: readonly KnobStage[];
|
|
1950
|
+
/** The question for the decision model, in English. */
|
|
1951
|
+
readonly question: string;
|
|
1952
|
+
}
|
|
1953
|
+
interface ChoiceKnob extends KnobBase {
|
|
1954
|
+
readonly kind: "choice";
|
|
1955
|
+
/** The options, or `list` (then the options are that list's items: a shared list, extendable in PlatformAdmin). */
|
|
1956
|
+
readonly options?: readonly KnobOption[];
|
|
1957
|
+
readonly list?: string;
|
|
1958
|
+
}
|
|
1959
|
+
interface ScoreKnob extends KnobBase {
|
|
1960
|
+
readonly kind: "score";
|
|
1961
|
+
/** 2..10 levels, from the first to the last; the decision model answers a fractional level. */
|
|
1962
|
+
readonly levels: readonly string[];
|
|
1963
|
+
/** What the creator sees on each level (short, per language), as many as `levels`: those are for the model. */
|
|
1964
|
+
readonly levelTitles?: readonly KnobText[];
|
|
1965
|
+
/** Applied with the answered level (their `range` gives the value). */
|
|
1966
|
+
readonly patches: readonly KnobPatch[];
|
|
1967
|
+
}
|
|
1968
|
+
interface NoulKnob extends KnobBase {
|
|
1969
|
+
readonly kind: "noul";
|
|
1970
|
+
/** What "yes" and "no" mean, for the decision model. */
|
|
1971
|
+
readonly yes: string;
|
|
1972
|
+
readonly no: string;
|
|
1973
|
+
readonly onYes: readonly KnobPatch[];
|
|
1974
|
+
readonly onNo?: readonly KnobPatch[];
|
|
1975
|
+
}
|
|
1976
|
+
type KnobDef = ChoiceKnob | ScoreKnob | NoulKnob;
|
|
1977
|
+
/** The exported catalog: every knob, and the shared lists choice knobs point at. */
|
|
1978
|
+
interface KnobCatalog {
|
|
1979
|
+
readonly version: number;
|
|
1980
|
+
readonly knobs: readonly KnobDef[];
|
|
1981
|
+
readonly lists: Readonly<Record<string, readonly KnobOption[]>>;
|
|
1982
|
+
}
|
|
1983
|
+
/** The decision model's limits (TypeSafe System One): options of a choice, levels of a score. */
|
|
1984
|
+
declare const DECISION_MAX_OPTIONS = 255;
|
|
1985
|
+
declare const DECISION_MAX_LEVELS = 10;
|
|
1986
|
+
|
|
1987
|
+
/** One path segment: a key, or `key[field=value]` (an array element picked by a field). */
|
|
1988
|
+
interface Segment {
|
|
1989
|
+
readonly key: string;
|
|
1990
|
+
readonly match?: {
|
|
1991
|
+
field: string;
|
|
1992
|
+
value: string;
|
|
1993
|
+
};
|
|
1994
|
+
}
|
|
1995
|
+
/** `modes[role=core].params.difficulty` → segments; `null` when a segment is malformed. */
|
|
1996
|
+
declare function parseKnobPath(path: string | undefined): Segment[] | null;
|
|
1997
|
+
/** A score answer (0..1) → the patch's value by its range; the patch's own value otherwise. */
|
|
1998
|
+
declare function patchValue(patch: KnobPatch, level?: number): unknown;
|
|
1999
|
+
/**
|
|
2000
|
+
* Applies the patches in order to a section's value (a parsed object; `undefined` = the section is empty).
|
|
2001
|
+
* Returns the new value and the indexes of the patches that could not be applied (a bad path, an array
|
|
2002
|
+
* element that is not there, `add` to something that is not an array): they are skipped, the rest
|
|
2003
|
+
* still applies. Never mutates the input.
|
|
2004
|
+
*/
|
|
2005
|
+
declare function applyPatches(section: unknown, patches: readonly KnobPatch[], level?: number): {
|
|
2006
|
+
value: unknown;
|
|
2007
|
+
skipped: number[];
|
|
2008
|
+
};
|
|
2009
|
+
/** Every (section, path) a list of patches writes: what a knob owns (pinning compares against it). */
|
|
2010
|
+
declare function patchTargets(patches: readonly KnobPatch[]): string[];
|
|
2011
|
+
|
|
2012
|
+
declare const KNOB_CATALOG_VERSION = 1;
|
|
2013
|
+
declare const KNOBS: readonly KnobDef[];
|
|
2014
|
+
declare const KNOB_CATALOG: KnobCatalog;
|
|
2015
|
+
|
|
2016
|
+
declare const UI_THEMES: readonly KnobOption[];
|
|
2017
|
+
declare const KIT_PALETTES: readonly KnobOption[];
|
|
2018
|
+
declare const HERO_LOOK_OPTIONS: readonly KnobOption[];
|
|
2019
|
+
declare const BACKGROUND_OPTIONS: readonly KnobOption[];
|
|
2020
|
+
declare const SOUND_SET_OPTIONS: readonly KnobOption[];
|
|
2021
|
+
/** Ids the UI kit must know how to draw / play (its own tests check them against these lists). */
|
|
2022
|
+
declare const LOOK_RUNTIME_IDS: {
|
|
2023
|
+
readonly backgrounds: string[];
|
|
2024
|
+
readonly soundSets: string[];
|
|
2025
|
+
};
|
|
2026
|
+
/** All shared lists by id. */
|
|
2027
|
+
declare const KNOB_LISTS: Readonly<Record<string, readonly KnobOption[]>>;
|
|
2028
|
+
|
|
2029
|
+
/** Errors of a catalog; empty = good. */
|
|
2030
|
+
declare function validateKnobCatalog(catalog: KnobCatalog): string[];
|
|
2031
|
+
|
|
2032
|
+
export { ABILITIES, ART, ASSET_PACKS, type AbilityId, ActorAct, ActorPose, type ArtContext, type ArtDef, ArtLook, type AssetPackDef, BACKGROUND_OPTIONS, BLOCKS, BOSS_DEFEATED, BOSS_SPAWNED, BRANCH_LEVEL, type BlockContext, type BlockDef, type Board, Body, Bullet, CHAPTERS, CORE_EFFECTS, CastDef, type ChoiceKnob, ComponentType, type Controls, DECISION_MAX_LEVELS, DECISION_MAX_OPTIONS, DEFAULT_REWARDS, DEMO_SPEC, type DamageType, type DefineOptions, Drop, EFFECTS, ENEMIES$1 as ENEMIES, ENGINES, ENTRY_ID_RE, type EffectContext, type EffectDef, type EffectSpec, type EnemyDef$1 as EnemyDef, type Engine, Entity, type Expr, ExprError, type ExprScope, type ExprValue, FOES, FUNCTIONS, type FlowSpec, Foe, type FoeKind, FxEvent, GIVE_UP, type GameSpec, Gem, HEROES, HERO_LOOK_OPTIONS, type HeroDef, type Issue, Jumper, KIT_PALETTES, KNOBS, KNOB_CATALOG, KNOB_CATALOG_VERSION, KNOB_LISTS, KNOWN_SYSTEMS, type KindGrid, type KnobCatalog, type KnobDef, type KnobGroup, type KnobOption, type KnobPatch, type KnobScope, type KnobStage, type KnobText, LEVELS_PER_WORLD, LEVEL_CLEARED, LEVEL_MAPS, LEVEL_UP, LINKS, LOOK_RUNTIME_IDS, type LinkDef, type EnemyDef as M3EnemyDef, type GoalDef$1 as M3GoalDef, type M3HeroDef, type M3Level, type LevelDef$2 as M3LevelDef, type SkillDef$2 as M3SkillDef, M3_CHARACTER, ELEMENTS as M3_ELEMENTS, ENEMIES as M3_ENEMIES, M3_HEROES, M3_LEVELS, M3_LEVELS_PER_WORLD, LEVELS$2 as M3_LEVEL_DEFS, M3_META, M3_META_STATS, OBSTACLES$1 as M3_OBSTACLES, PIECES as M3_PIECES, SKILLS$2 as M3_SKILLS, SPECIALS as M3_SPECIALS, M3_WORLDS, M3_WORLD_STARS, MAPS, MAP_COLS, MAP_ROWS, MAX_LEVEL, MAX_PASSIVES, MAX_WEAPONS, META_CHARACTER, META_STATS, BOARDS as MG_BOARDS, CHAINS as MG_CHAINS, MG_CHARACTER, MG_COLS, MG_HEROES, MG_LEVELS, MG_LEVELS_PER_WORLD, LEVELS$1 as MG_LEVEL_DEFS, MG_META, MG_META_STATS, OBSTACLES as MG_OBSTACLES, MG_REVIVE_ENERGY, MG_ROWS, SKILLS$1 as MG_SKILLS, SPECIAL_ITEMS as MG_SPECIAL_ITEMS, MG_WORLDS, MG_WORLD_STARS, type MapDef, type MergeHeroDef, MergeItem, type MergeLevel, type MetaGameDef, type MetaHeroDef, type MetaStatDef, type ChainDef as MgChainDef, type LevelDef$1 as MgLevelDef, type ObstacleDef as MgObstacleDef, type OrderDef as MgOrderDef, type SkillDef$1 as MgSkillDef, type SpecialItemDef as MgSpecialItemDef, type WantDef as MgWantDef, Missile, type ModeSpec, type NoulKnob, type NumberOrFormula, OBSTACLE_KINDS, type ObstacleKind, Order, PASSIVES, PASSIVE_IDS, PIECE_COLORS, PLATFORMER_CHARACTER, PLATFORMER_HEROES, PLATFORMER_LEVELS, PLATFORMER_META, PLATFORMER_META_STATS, PLATFORM_LINKS, PLATFORM_PACKS, PLATFORM_PRESETS, POWERS, POWER_IDS, PRESETS, type ParamDef, type ParamDefs, type ParamValue, type PassiveDef, type PassiveId, type PlatformerHeroDef, type PlatformerLevel, type PlatformerPerk, type PowerDef, type PowerId, type PresetDef, REROLL_GEMS, REVIVE, REVIVE_GEMS, REVIVE_OFFER, ROOMS, ROOM_ROWS, ROUND_ENDED, ROUND_OVER, ROUND_STARTED, RUNNER_CHARACTER, RUNNER_HEROES, RUNNER_LEVELS, RUNNER_META, RUNNER_META_STATS, Raider, type Registry, type RegistryEntry, type RegistryKind, type ResolvedMode, type ResolvedSpec, type ResourceSpec, type RewardedPlacementDef, type RewardsSpec, RoadItem, type RoomDef, type RoomFeature, type RoundState, type RuleDef, Runner, type RunnerHeroDef, type RunnerLevel, type RunnerPerk, type RunningMode, SELL_SHARE, SHOW_START, SOUND_SET_OPTIONS, SPEC_VERSION, SPELLS, START_ROUND, SURVIVORS_META, type ScoreKnob, Shot, Soldier, type SpecResult, type SpellDef, Spot, type StartModeOptions, Survivor, type SurvivorsBuild, TD_CHARACTER, TD_HEROES, TD_LEVELS, TD_LEVELS_PER_WORLD, TD_LIVES, TD_META, TD_META_STATS, REVIVE_LIVES as TD_REVIVE_LIVES, TD_WORLDS, TD_WORLD_STARS, TOWERS, BUSINESSES as TY_BUSINESSES, TY_CHARACTER, EVENTS as TY_EVENTS, TY_HEROES, TY_LEVELS, TY_LEVELS_PER_WORLD, LEVELS as TY_LEVEL_DEFS, TY_META, TY_META_STATS, MILESTONES as TY_MILESTONES, TY_REVIVE_SECONDS, SKILLS as TY_SKILLS, UPGRADES as TY_UPGRADES, TY_WORLDS, TY_WORLD_STARS, type TdHeroDef, type TdLevel, type TdPerk, Thing, Tower, type TowerBranchDef, type TowerDef, type TowerStats, type TowerTierDef, type TracedMap, type BusinessDef as TyBusinessDef, type EventDef as TyEventDef, type GoalDef as TyGoalDef, type LevelDef as TyLevelDef, Manager as TyManager, type SkillDef as TySkillDef, type UpgradeDef as TyUpgradeDef, type TycoonHeroDef, type TycoonLevel, UI_THEMES, UPGRADE_PICK, UPGRADE_PICKED, UPGRADE_REROLL, type UpgradeOption, type ViewSize, WAVE_STARTED, WEAPONS, WEAPON_IDS, WORLDS, WORLD_STARS, type WaveDef, type WaveGroup, type WeaponDef, type WeaponId, World, abilitiesFor, act, applyLink, applyPatches, artAspect, artDocument, attachRules, boardOf, buildFromVar, buildToVar, cellAt, cellCenter, chapterOf, checkEconomy, checkExpr, checkRules, compileExpr, contentOf, cozyPack, createKitRegistry, createRegistry, defenseBoostsLink, defineKind, enemyOf$1 as enemyOf, evalNumber, fantasyPack, findMatches, fx, hasArt, hasErrors, hasMove, heroCharacterOf, heroUpgradeLink, laneRunnerBlock, levelOf$5 as levelOf, enemyOf as m3EnemyOf, levelOf$2 as m3LevelOf, skillOf$2 as m3SkillOf, m3StarsToEnter, match3Block, match3Preset, mergeBlock, mergePreset, metersOf, chainOf as mgChainOf, levelOf$1 as mgLevelOf, skillOf$1 as mgSkillOf, specialOf as mgSpecialOf, mgStarsFor, mgStarsToEnter, migrateSpec, mirrored, offerFromVar, offerToVar, packName, parseKnobPath, patchTargets, patchValue, placeBackdrop, platformerBlock, levelOf$4 as platformerLevelOf, platformerPreset, postApocalypsePack, puzzleCityLink, registerCoreEffects, registerPlatformKit, resolveParams, roundBlock, runnerCollectionLink, runnerPreset, sciFiPack, scrollBackdrop, setPose, shortCash, specForPreset, starsToEnter, startMode, survivorsBlock, survivorsPreset, levelOf$3 as tdLevelOf, starsFor as tdStarsFor, tdStarsToEnter, wavesOf as tdWavesOf, towerArt, towerDefenseBlock, towerDefensePreset, towerOf, towerSpent, towerStats, traceMap, trackControls, botTimeOf as tyBotTimeOf, businessOf as tyBusinessOf, eventOf as tyEventOf, levelOf as tyLevelOf, skillOf as tySkillOf, tyStarsFor, tyStarsToEnter, tycoonBlock, tycoonPreset, tycoonStateOf, validateKnobCatalog, validateSpec, viewOf };
|