@bitmagic/cli 0.1.83-dev.1 → 0.1.83-dev.3
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/README.md +69 -0
- package/assets/skills/publishing-to-steam/SKILL.md +218 -0
- package/dist/assets/vxl-summary.d.ts +6 -20
- package/dist/assets/vxl-summary.js +9 -100
- package/dist/assets/vxl-summary.js.map +1 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/check.js +5 -0
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/forge.js +1 -1
- package/dist/commands/forge.js.map +1 -1
- package/dist/commands/ios.js +88 -136
- package/dist/commands/ios.js.map +1 -1
- package/dist/commands/steam-build.d.ts +67 -0
- package/dist/commands/steam-build.js +286 -0
- package/dist/commands/steam-build.js.map +1 -0
- package/dist/commands/steam-portal.d.ts +1 -0
- package/dist/commands/steam-portal.js +319 -0
- package/dist/commands/steam-portal.js.map +1 -0
- package/dist/commands/steam-upload.d.ts +37 -0
- package/dist/commands/steam-upload.js +174 -0
- package/dist/commands/steam-upload.js.map +1 -0
- package/dist/commands/steam.d.ts +1 -0
- package/dist/commands/steam.js +504 -0
- package/dist/commands/steam.js.map +1 -0
- package/dist/commands/verify.js +6 -0
- package/dist/commands/verify.js.map +1 -1
- package/dist/editor/asset-viewer.js +5 -4
- package/dist/editor/asset-viewer.js.map +1 -1
- package/dist/editor/server.js +1 -1
- package/dist/editor/server.js.map +1 -1
- package/dist/editor/shell-page.js +3 -3
- package/dist/forge/browser-host.d.ts +1 -1
- package/dist/forge/browser-host.js +1 -1
- package/dist/forge/browser-host.js.map +1 -1
- package/dist/ios/native-overrides.d.ts +27 -0
- package/dist/ios/native-overrides.js +87 -0
- package/dist/ios/native-overrides.js.map +1 -0
- package/dist/ios/record-validate.d.ts +1 -33
- package/dist/ios/record-validate.js +2 -100
- package/dist/ios/record-validate.js.map +1 -1
- package/dist/ios/store-bridge.d.ts +26 -0
- package/dist/ios/store-bridge.js +224 -0
- package/dist/ios/store-bridge.js.map +1 -0
- package/dist/ios/storekit-config.d.ts +15 -0
- package/dist/ios/storekit-config.js +106 -0
- package/dist/ios/storekit-config.js.map +1 -0
- package/dist/ios/xcode-template.d.ts +12 -3
- package/dist/ios/xcode-template.js +158 -27
- package/dist/ios/xcode-template.js.map +1 -1
- package/dist/package/collect-urls.d.ts +1 -1
- package/dist/package/collect-urls.js +10 -2
- package/dist/package/collect-urls.js.map +1 -1
- package/dist/package/offline-payload.d.ts +35 -0
- package/dist/package/offline-payload.js +142 -0
- package/dist/package/offline-payload.js.map +1 -0
- package/dist/package/packaged-check.d.ts +39 -0
- package/dist/package/packaged-check.js +104 -0
- package/dist/package/packaged-check.js.map +1 -0
- package/dist/package/transform.d.ts +4 -4
- package/dist/package/transform.js +3 -3
- package/dist/project/published-three.d.ts +14 -0
- package/dist/project/published-three.js +91 -0
- package/dist/project/published-three.js.map +1 -0
- package/dist/publish/bundle.js +6 -0
- package/dist/publish/bundle.js.map +1 -1
- package/dist/scaffold/project-files.js +7 -4
- package/dist/scaffold/project-files.js.map +1 -1
- package/dist/scaffold/project.js +2 -0
- package/dist/scaffold/project.js.map +1 -1
- package/dist/scaffold/skill-files.js +3 -1
- package/dist/scaffold/skill-files.js.map +1 -1
- package/dist/scaffold/steam-skill-files.d.ts +2 -0
- package/dist/scaffold/steam-skill-files.js +7 -0
- package/dist/scaffold/steam-skill-files.js.map +1 -0
- package/dist/steam/art-generate.d.ts +55 -0
- package/dist/steam/art-generate.js +174 -0
- package/dist/steam/art-generate.js.map +1 -0
- package/dist/steam/art-render.d.ts +25 -0
- package/dist/steam/art-render.js +157 -0
- package/dist/steam/art-render.js.map +1 -0
- package/dist/steam/art-use.d.ts +20 -0
- package/dist/steam/art-use.js +84 -0
- package/dist/steam/art-use.js.map +1 -0
- package/dist/steam/art.d.ts +98 -0
- package/dist/steam/art.js +243 -0
- package/dist/steam/art.js.map +1 -0
- package/dist/steam/check.d.ts +21 -0
- package/dist/steam/check.js +113 -0
- package/dist/steam/check.js.map +1 -0
- package/dist/steam/config.d.ts +57 -0
- package/dist/steam/config.js +145 -0
- package/dist/steam/config.js.map +1 -0
- package/dist/steam/electron-cache.d.ts +11 -0
- package/dist/steam/electron-cache.js +105 -0
- package/dist/steam/electron-cache.js.map +1 -0
- package/dist/steam/fuses.d.ts +16 -0
- package/dist/steam/fuses.js +75 -0
- package/dist/steam/fuses.js.map +1 -0
- package/dist/steam/icon-files.d.ts +16 -0
- package/dist/steam/icon-files.js +70 -0
- package/dist/steam/icon-files.js.map +1 -0
- package/dist/steam/image-info.d.ts +16 -0
- package/dist/steam/image-info.js +89 -0
- package/dist/steam/image-info.js.map +1 -0
- package/dist/steam/launch-check.d.ts +12 -0
- package/dist/steam/launch-check.js +101 -0
- package/dist/steam/launch-check.js.map +1 -0
- package/dist/steam/media.d.ts +48 -0
- package/dist/steam/media.js +155 -0
- package/dist/steam/media.js.map +1 -0
- package/dist/steam/package-macos.d.ts +52 -0
- package/dist/steam/package-macos.js +268 -0
- package/dist/steam/package-macos.js.map +1 -0
- package/dist/steam/package-windows.d.ts +23 -0
- package/dist/steam/package-windows.js +83 -0
- package/dist/steam/package-windows.js.map +1 -0
- package/dist/steam/paths.d.ts +35 -0
- package/dist/steam/paths.js +44 -0
- package/dist/steam/paths.js.map +1 -0
- package/dist/steam/playtest-shots.d.ts +18 -0
- package/dist/steam/playtest-shots.js +83 -0
- package/dist/steam/playtest-shots.js.map +1 -0
- package/dist/steam/portal-recipes.d.ts +25 -0
- package/dist/steam/portal-recipes.js +61 -0
- package/dist/steam/portal-recipes.js.map +1 -0
- package/dist/steam/portal.d.ts +58 -0
- package/dist/steam/portal.js +340 -0
- package/dist/steam/portal.js.map +1 -0
- package/dist/steam/raster.d.ts +58 -0
- package/dist/steam/raster.js +285 -0
- package/dist/steam/raster.js.map +1 -0
- package/dist/steam/shell-files.d.ts +17 -0
- package/dist/steam/shell-files.js +268 -0
- package/dist/steam/shell-files.js.map +1 -0
- package/dist/steam/specs.d.ts +61 -0
- package/dist/steam/specs.js +103 -0
- package/dist/steam/specs.js.map +1 -0
- package/dist/steam/steampipe.d.ts +46 -0
- package/dist/steam/steampipe.js +170 -0
- package/dist/steam/steampipe.js.map +1 -0
- package/dist/steam/store-copy.d.ts +88 -0
- package/dist/steam/store-copy.js +214 -0
- package/dist/steam/store-copy.js.map +1 -0
- package/dist/steam/tags.d.ts +9 -0
- package/dist/steam/tags.js +52 -0
- package/dist/steam/tags.js.map +1 -0
- package/dist/steam/trailer.d.ts +34 -0
- package/dist/steam/trailer.js +141 -0
- package/dist/steam/trailer.js.map +1 -0
- package/dist/theme/kernel.d.ts +14 -0
- package/dist/theme/kernel.js +15 -0
- package/dist/theme/kernel.js.map +1 -0
- package/dist/theme/theme-io.js +11 -16
- package/dist/theme/theme-io.js.map +1 -1
- package/dist/vendor/hud-theme/catalog.js +71 -0
- package/dist/vendor/hud-theme/engine/hud/ThemeTokens.js +115 -0
- package/dist/{theme/theme-color-math.js → vendor/hud-theme/engine/hud/colorMath.js} +13 -14
- package/dist/vendor/hud-theme/engine/hud/decorations.js +179 -0
- package/dist/vendor/hud-theme/engine/hud/fonts.js +147 -0
- package/dist/vendor/hud-theme/engine/hud/presets.js +80 -0
- package/dist/vendor/hud-theme/engine/hud/resolveWorldTheme.js +66 -0
- package/dist/vendor/hud-theme/engine/hud/themes/bitmagic.js +29 -0
- package/dist/vendor/hud-theme/engine/hud/themes/nexus.js +69 -0
- package/dist/vendor/hud-theme/engine/hud/themes/racing.js +57 -0
- package/dist/vendor/hud-theme/engine/hud/themes/rift-raider.js +63 -0
- package/dist/vendor/hud-theme/engine/hud/themes/simulator.js +55 -0
- package/dist/vendor/hud-theme/engine/hud/themes/village-keep.js +108 -0
- package/dist/vendor/hud-theme/engine/hud/validateTheme.js +535 -0
- package/dist/vendor/hud-theme/index.js +26 -0
- package/dist/{theme/theme-merge.js → vendor/hud-theme/merge.js} +0 -1
- package/dist/{theme/theme-report.js → vendor/hud-theme/report.js} +8 -9
- package/dist/{theme/theme-stored.js → vendor/hud-theme/stored.js} +6 -9
- package/dist/{theme/theme-validate.js → vendor/hud-theme/validate-strict.js} +102 -164
- package/dist/verify/browser.d.ts +11 -0
- package/dist/verify/browser.js +222 -155
- package/dist/verify/browser.js.map +1 -1
- package/dist/verify/categories.d.ts +1 -1
- package/dist/verify/categories.js +1 -0
- package/dist/verify/categories.js.map +1 -1
- package/dist/verify/classify.d.ts +14 -2
- package/dist/verify/classify.js +23 -4
- package/dist/verify/classify.js.map +1 -1
- package/dist/verify/hud-theme.d.ts +19 -14
- package/dist/verify/hud-theme.js +23 -17
- package/dist/verify/hud-theme.js.map +1 -1
- package/dist/verify/mobile-parity.d.ts +1 -1
- package/dist/verify/mobile-parity.js +1 -1
- package/dist/verify/start.d.ts +3 -2
- package/dist/verify/start.js +1 -1
- package/dist/verify/start.js.map +1 -1
- package/package.json +8 -6
- package/dist/theme/hud-theme-catalog.d.ts +0 -235
- package/dist/theme/hud-theme-catalog.js +0 -389
- package/dist/theme/hud-theme-catalog.js.map +0 -1
- package/dist/theme/theme-color-math.d.ts +0 -21
- package/dist/theme/theme-color-math.js.map +0 -1
- package/dist/theme/theme-merge.d.ts +0 -36
- package/dist/theme/theme-merge.js.map +0 -1
- package/dist/theme/theme-report.d.ts +0 -28
- package/dist/theme/theme-report.js.map +0 -1
- package/dist/theme/theme-stored.d.ts +0 -21
- package/dist/theme/theme-stored.js.map +0 -1
- package/dist/theme/theme-validate.d.ts +0 -41
- package/dist/theme/theme-validate.js.map +0 -1
package/dist/verify/classify.js
CHANGED
|
@@ -94,14 +94,26 @@ const BLACK_FRAME_MAX_LIT_FRACTION = 0.005;
|
|
|
94
94
|
* measures in the thousands.
|
|
95
95
|
*/
|
|
96
96
|
const MIN_DISTINCT_COLORS = 3;
|
|
97
|
+
const RESPAWN_LINE_PATTERN = /Fell below -?\d/;
|
|
97
98
|
/**
|
|
98
|
-
* The engine's line when the player has fallen out of the world and is being put back
|
|
99
|
+
* The engine's line when the player has fallen out of the world and is being put back
|
|
100
|
+
* ("Fell below -100, respawning..."), whatever the kill plane's height: a game may move it
|
|
101
|
+
* (`fallRescue.killPlaneY`) and the engine prints its own. "Vehicle fell below" (a vehicle put
|
|
102
|
+
* back, the player still in it) is a different line.
|
|
99
103
|
*
|
|
100
104
|
* A game the player cannot stand up in is not verified, however cleanly it renders. This was not
|
|
101
105
|
* theoretical: a forged level whose terrain never loaded rendered a perfect frame, threw nothing,
|
|
102
106
|
* and reported PASSED, while the player fell and respawned 14 times in a 45s settle.
|
|
103
107
|
*/
|
|
104
|
-
export
|
|
108
|
+
export function isRespawnLine(line) {
|
|
109
|
+
return RESPAWN_LINE_PATTERN.test(line);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The event the engine's fall rescue logs for each respawn — the same signal as the line, but
|
|
113
|
+
* readable without matching console text. Engines that predate it only print the line, so the
|
|
114
|
+
* count is the larger of the two and a respawn seen both ways is still one.
|
|
115
|
+
*/
|
|
116
|
+
export const PLAYER_RESPAWN_EVENT = 'player-respawn';
|
|
105
117
|
/**
|
|
106
118
|
* One or two falls can be the spawn beating the chunk colliders — the controller says as much
|
|
107
119
|
* ("waiting for colliders…") and recovers, so those warn. Three is no longer a settle; it is a
|
|
@@ -118,7 +130,7 @@ const CORS_BLOCK = 'has been blocked by CORS policy';
|
|
|
118
130
|
/**
|
|
119
131
|
* A player below this and still falling when the run ends is out of the world, not exploring a
|
|
120
132
|
* deep cave: the engine's own kill plane respawns at -100, so a sustained fall past -50 means
|
|
121
|
-
* the respawn keeps landing on nothing. Complements the
|
|
133
|
+
* the respawn keeps landing on nothing. Complements the respawn count — this one fires
|
|
122
134
|
* even when a game's custom controller never prints that line.
|
|
123
135
|
*/
|
|
124
136
|
const FREEFALL_FAILURE_Y = -50;
|
|
@@ -163,6 +175,13 @@ export function classifyVerifyRun(observations, context = {}) {
|
|
|
163
175
|
+ `${start.selectionsPicked === 1 ? '' : 's'} but the Play button never appeared and no `
|
|
164
176
|
+ 'game start was detected — the picked level or option most likely never finished loading.');
|
|
165
177
|
}
|
|
178
|
+
else if (start.customStartScreen) {
|
|
179
|
+
// The commonest way a custom start screen fails verify: it renders its own Play control
|
|
180
|
+
// that verify has no way to recognise, so a healthy game reads as one that never started.
|
|
181
|
+
failures.push('The game installs its own start screen (setUIComponent(\'start\', …)) but never '
|
|
182
|
+
+ 'started — no element marked data-bitmagic-play appeared to press, and no game start '
|
|
183
|
+
+ 'was detected. Add the data-bitmagic-play attribute to the custom Play button.');
|
|
184
|
+
}
|
|
166
185
|
else {
|
|
167
186
|
failures.push('The game never started — no Play button appeared and no game start was detected.');
|
|
168
187
|
}
|
|
@@ -297,7 +316,7 @@ export function classifyVerifyRun(observations, context = {}) {
|
|
|
297
316
|
if (blocked.length > 0) {
|
|
298
317
|
failures.push(`A game asset could not be fetched — the browser blocked it as cross-origin: ${blocked[0]}`);
|
|
299
318
|
}
|
|
300
|
-
const respawns = observations.consoleLines.filter(
|
|
319
|
+
const respawns = Math.max(observations.consoleLines.filter(isRespawnLine).length, observations.events?.totalByType[PLAYER_RESPAWN_EVENT] ?? 0);
|
|
301
320
|
if (respawns > MAX_TOLERATED_RESPAWNS) {
|
|
302
321
|
failures.push(`The player fell out of the world ${respawns} times and was still falling when the run ended `
|
|
303
322
|
+ '— the level renders but cannot be stood on. Its terrain most likely never loaded.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classify.js","sourceRoot":"","sources":["../../src/verify/classify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAA0B,MAAM,aAAa,CAAC;AAE3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"classify.js","sourceRoot":"","sources":["../../src/verify/classify.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,25 +9,30 @@
|
|
|
9
9
|
* it survives for as long as nobody diffs the intended look against the shipped one.
|
|
10
10
|
*
|
|
11
11
|
* The hosted agent is protected from this by `write-hud-theme`, which validates before it writes
|
|
12
|
-
* and answers with a closest-match suggestion. `bitmagic theme set|patch`
|
|
13
|
-
* same write-time guard
|
|
14
|
-
* THROUGH it. A hand edit to world.json, a vendored engine older than the CLI's
|
|
15
|
-
* that validates yet still fails in the browser all land here, which is why this
|
|
16
|
-
* the only one that reads what the engine itself said.
|
|
12
|
+
* and answers with a closest-match suggestion. `bitmagic theme set|patch` gives the CLI lane the
|
|
13
|
+
* same write-time guard with the same validator (the bundled `@bitmagic/hud-theme` kernel) — but
|
|
14
|
+
* only for edits made THROUGH it. A hand edit to world.json, a vendored engine older than the CLI's
|
|
15
|
+
* kernel, or a theme that validates yet still fails in the browser all land here, which is why this
|
|
16
|
+
* check stays: it is the only one that reads what the engine itself said.
|
|
17
17
|
*
|
|
18
|
-
* WHY PARSE THE CONSOLE rather than validate statically here. The
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* resolve only through the browser import map
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* and the live list of known presets, neither of which a mirror would have.
|
|
18
|
+
* WHY PARSE THE CONSOLE rather than validate statically here. The CLI's bundled kernel is the
|
|
19
|
+
* validator of the engine the CLI was BUILT with, while the project runs the engine it VENDORED —
|
|
20
|
+
* the project's own `engine/` cannot be imported from Node (its specifiers are path-mapped
|
|
21
|
+
* `engine/...` aliases that resolve only through the browser import map). Parsing what the
|
|
22
|
+
* project's engine actually said needs no assumption about which version that is, and inherits the
|
|
23
|
+
* engine's own error text — including the field paths from an invalid inline theme and the live
|
|
24
|
+
* list of known presets.
|
|
26
25
|
*
|
|
27
26
|
* The cost is honest and worth naming: this only sees a theme on a game that actually booted. A
|
|
28
27
|
* project whose game fails to load has bigger findings in the same run.
|
|
29
28
|
*/
|
|
30
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* The engine's marker on every theme-resolution warning. Also what a reader greps for.
|
|
31
|
+
*
|
|
32
|
+
* The marker and the two phrases below are the engine's own constants (`resolveWorldTheme`),
|
|
33
|
+
* taken from the bundled theme kernel, so the parser and the emitter cannot drift. They are frozen
|
|
34
|
+
* engine-side because this parser reads warnings from engines of every vendored version.
|
|
35
|
+
*/
|
|
31
36
|
export declare const HUD_THEME_MARKER = "[HUD]";
|
|
32
37
|
export interface HudThemeProblem {
|
|
33
38
|
/**
|
package/dist/verify/hud-theme.js
CHANGED
|
@@ -9,30 +9,36 @@
|
|
|
9
9
|
* it survives for as long as nobody diffs the intended look against the shipped one.
|
|
10
10
|
*
|
|
11
11
|
* The hosted agent is protected from this by `write-hud-theme`, which validates before it writes
|
|
12
|
-
* and answers with a closest-match suggestion. `bitmagic theme set|patch`
|
|
13
|
-
* same write-time guard
|
|
14
|
-
* THROUGH it. A hand edit to world.json, a vendored engine older than the CLI's
|
|
15
|
-
* that validates yet still fails in the browser all land here, which is why this
|
|
16
|
-
* the only one that reads what the engine itself said.
|
|
12
|
+
* and answers with a closest-match suggestion. `bitmagic theme set|patch` gives the CLI lane the
|
|
13
|
+
* same write-time guard with the same validator (the bundled `@bitmagic/hud-theme` kernel) — but
|
|
14
|
+
* only for edits made THROUGH it. A hand edit to world.json, a vendored engine older than the CLI's
|
|
15
|
+
* kernel, or a theme that validates yet still fails in the browser all land here, which is why this
|
|
16
|
+
* check stays: it is the only one that reads what the engine itself said.
|
|
17
17
|
*
|
|
18
|
-
* WHY PARSE THE CONSOLE rather than validate statically here. The
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* resolve only through the browser import map
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* and the live list of known presets, neither of which a mirror would have.
|
|
18
|
+
* WHY PARSE THE CONSOLE rather than validate statically here. The CLI's bundled kernel is the
|
|
19
|
+
* validator of the engine the CLI was BUILT with, while the project runs the engine it VENDORED —
|
|
20
|
+
* the project's own `engine/` cannot be imported from Node (its specifiers are path-mapped
|
|
21
|
+
* `engine/...` aliases that resolve only through the browser import map). Parsing what the
|
|
22
|
+
* project's engine actually said needs no assumption about which version that is, and inherits the
|
|
23
|
+
* engine's own error text — including the field paths from an invalid inline theme and the live
|
|
24
|
+
* list of known presets.
|
|
26
25
|
*
|
|
27
26
|
* The cost is honest and worth naming: this only sees a theme on a game that actually booted. A
|
|
28
27
|
* project whose game fails to load has bigger findings in the same run.
|
|
29
28
|
*/
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
import { HUD_INVALID_THEME_PHRASE, HUD_THEME_LOG_MARKER, HUD_UNKNOWN_PRESET_PHRASE, } from '../theme/kernel.js';
|
|
30
|
+
/**
|
|
31
|
+
* The engine's marker on every theme-resolution warning. Also what a reader greps for.
|
|
32
|
+
*
|
|
33
|
+
* The marker and the two phrases below are the engine's own constants (`resolveWorldTheme`),
|
|
34
|
+
* taken from the bundled theme kernel, so the parser and the emitter cannot drift. They are frozen
|
|
35
|
+
* engine-side because this parser reads warnings from engines of every vendored version.
|
|
36
|
+
*/
|
|
37
|
+
export const HUD_THEME_MARKER = HUD_THEME_LOG_MARKER;
|
|
32
38
|
/** `resolveWorldTheme`'s wording when `hud.theme` is a string that names no preset. */
|
|
33
|
-
const UNKNOWN_PRESET =
|
|
39
|
+
const UNKNOWN_PRESET = HUD_UNKNOWN_PRESET_PHRASE;
|
|
34
40
|
/** …and when it is an object the validator rejected. */
|
|
35
|
-
const INVALID_THEME =
|
|
41
|
+
const INVALID_THEME = HUD_INVALID_THEME_PHRASE;
|
|
36
42
|
/**
|
|
37
43
|
* The theme problem the engine reported during this run, or null when it reported none.
|
|
38
44
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hud-theme.js","sourceRoot":"","sources":["../../src/verify/hud-theme.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hud-theme.js","sourceRoot":"","sources":["../../src/verify/hud-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAE5B;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAErD,uFAAuF;AACvF,MAAM,cAAc,GAAG,yBAAyB,CAAC;AAEjD,wDAAwD;AACxD,MAAM,aAAa,GAAG,wBAAwB,CAAC;AAgB/C;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,YAAsB;IACzD,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9C,IAAI,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/B,mFAAmF;IACnF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACnE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACvE,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEtE,6FAA6F;IAC7F,0FAA0F;IAC1F,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* `game/agent-docs/control-system.md`). Nothing consumed it, so a game with actions no phone can
|
|
8
8
|
* reach passed verify silently.
|
|
9
9
|
*
|
|
10
|
-
* Parsing that line rather than listening for the `
|
|
10
|
+
* Parsing that line rather than listening for the `MOBILE_PARITY_GAP` postMessage the
|
|
11
11
|
* same check also fires is deliberate on two counts: the console is already captured, so this
|
|
12
12
|
* needs no new browser plumbing; and only the console line carries the `(source)` annotation
|
|
13
13
|
* naming which system registered an orphan key, which is the difference between "KeyF is
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* `game/agent-docs/control-system.md`). Nothing consumed it, so a game with actions no phone can
|
|
8
8
|
* reach passed verify silently.
|
|
9
9
|
*
|
|
10
|
-
* Parsing that line rather than listening for the `
|
|
10
|
+
* Parsing that line rather than listening for the `MOBILE_PARITY_GAP` postMessage the
|
|
11
11
|
* same check also fires is deliberate on two counts: the console is already captured, so this
|
|
12
12
|
* needs no new browser plumbing; and only the console line carries the `(source)` annotation
|
|
13
13
|
* naming which system registered an orphan key, which is the difference between "KeyF is
|
package/dist/verify/start.d.ts
CHANGED
|
@@ -16,8 +16,9 @@
|
|
|
16
16
|
* not meaningfully begun; `loadingGraceMs` bounds how long that credit can last.
|
|
17
17
|
*/
|
|
18
18
|
export interface StartInteractionOptions {
|
|
19
|
-
/** Selector for the
|
|
20
|
-
*
|
|
19
|
+
/** Selector for the Play button: the engine's own, or the control a custom start screen
|
|
20
|
+
* (`engine.setUIComponent('start', …)`) marks with `data-bitmagic-play`. Its label is
|
|
21
|
+
* localizable and per-game overridable, so never match by text. */
|
|
21
22
|
playButtonSelector: string;
|
|
22
23
|
/**
|
|
23
24
|
* Selector for one option of a pre-play selection step (level chooser, difficulty, …), as
|
package/dist/verify/start.js
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* not meaningfully begun; `loadingGraceMs` bounds how long that credit can last.
|
|
17
17
|
*/
|
|
18
18
|
export const DEFAULT_START_INTERACTION = {
|
|
19
|
-
playButtonSelector: '#play-button, .hud-play-button',
|
|
19
|
+
playButtonSelector: '#play-button, .hud-play-button, [data-bitmagic-play]',
|
|
20
20
|
selectionOptionSelector: '.start-screen-selection__option',
|
|
21
21
|
startedConsoleMarker: '🎮 Starting game...',
|
|
22
22
|
buttonTimeoutMs: 30_000,
|
package/dist/verify/start.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/verify/start.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/verify/start.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAqCH,MAAM,CAAC,MAAM,yBAAyB,GAA4B;IAChE,kBAAkB,EAAE,sDAAsD;IAC1E,uBAAuB,EAAE,iCAAiC;IAC1D,oBAAoB,EAAE,qBAAqB;IAC3C,eAAe,EAAE,MAAM;IACvB,cAAc,EAAE,OAAO;IACvB,uBAAuB,EAAE,MAAM;IAC/B,iBAAiB,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAEjC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC,MAAM,UAAU,cAAc,CAAC,YAAsB,EAAE,MAAc;IACnE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC;AAwBD;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAuB,EACvB,OAAgC;IAEhC,IAAI,MAAM,CAAC,eAAe;QAAE,OAAO,SAAS,CAAC;IAC7C,IAAI,MAAM,CAAC,sBAAsB,IAAI,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAClF,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,IAAI,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,gBAAgB,IAAI,kBAAkB,EAAE,CAAC;QAC9E,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QACpE,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitmagic/cli",
|
|
3
|
-
"version": "0.1.83-dev.
|
|
3
|
+
"version": "0.1.83-dev.3",
|
|
4
4
|
"description": "Build Bitmagic games from your own agent tool",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"author": "Bitmagic Oy",
|
|
@@ -23,11 +23,12 @@
|
|
|
23
23
|
"citty": "^0.2.2",
|
|
24
24
|
"fflate": "^0.8.2",
|
|
25
25
|
"playwright-core": "^1.59.1",
|
|
26
|
+
"resedit": "3.0.2",
|
|
26
27
|
"tar": "^7.4.3",
|
|
27
28
|
"ws": "^8.21.3",
|
|
28
|
-
"@bitmagic/animation-forger": "0.1.38-dev.
|
|
29
|
-
"@bitmagic/
|
|
30
|
-
"@bitmagic/
|
|
29
|
+
"@bitmagic/animation-forger": "0.1.38-dev.3",
|
|
30
|
+
"@bitmagic/asset-core": "0.2.38-dev.3",
|
|
31
|
+
"@bitmagic/world-forger": "0.1.43-dev.3"
|
|
31
32
|
},
|
|
32
33
|
"devDependencies": {
|
|
33
34
|
"@eslint/js": "^9.38.0",
|
|
@@ -43,7 +44,8 @@
|
|
|
43
44
|
"eslint-plugin-import": "^2.32.0",
|
|
44
45
|
"jest": "^29.7.0",
|
|
45
46
|
"ts-jest": "^29.4.12",
|
|
46
|
-
"typescript": "^6.0.3"
|
|
47
|
+
"typescript": "^6.0.3",
|
|
48
|
+
"@bitmagic/hud-theme": "0.1.0"
|
|
47
49
|
},
|
|
48
50
|
"jest": {
|
|
49
51
|
"preset": "ts-jest/presets/default-esm",
|
|
@@ -76,7 +78,7 @@
|
|
|
76
78
|
]
|
|
77
79
|
},
|
|
78
80
|
"scripts": {
|
|
79
|
-
"build": "tsc",
|
|
81
|
+
"build": "tsc && node scripts/bundle-hud-theme.mjs",
|
|
80
82
|
"check": "pnpm run lint && pnpm run build && pnpm run check:lab",
|
|
81
83
|
"check:lab": "tsc -p tsconfig.lab.json --noEmit",
|
|
82
84
|
"lint": "eslint src lab",
|
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
export declare const HUD_PRESETS: readonly ["rift-raider", "village-keep", "nexus", "simulator", "racing"];
|
|
2
|
-
export type HudPresetName = (typeof HUD_PRESETS)[number];
|
|
3
|
-
/**
|
|
4
|
-
* The five presets' ACTUAL token values, mirrored from `game/src/engine/hud/themes/*.ts`.
|
|
5
|
-
*
|
|
6
|
-
* This exists because the promoted customization flow — "preset X but with
|
|
7
|
-
* orange accents" — was unimplementable without it. `read-hud-theme` returns a
|
|
8
|
-
* preset's NAME, `write-hud-theme` does a full replace rather than a merge, and
|
|
9
|
-
* the engine source that holds the values is not readable from the hosted agent.
|
|
10
|
-
* So an agent asked to tweak an active preset had nothing to patch and had to
|
|
11
|
-
* invent a whole theme "in that preset's spirit", which is how a tweak request
|
|
12
|
-
* silently became a redesign.
|
|
13
|
-
*
|
|
14
|
-
* Each entry is the RAW preset data, which is the same shape as an inline theme
|
|
15
|
-
* — so it can be spread, edited and written straight back through
|
|
16
|
-
* `write-hud-theme`. Use `presetTheme(name)` rather than reading this directly:
|
|
17
|
-
* it strips `evokes`, which is authoring metadata and not a theme token.
|
|
18
|
-
*
|
|
19
|
-
* Hand-mirrored and drift-checked by `scripts/check-hud-catalog.ts`, which deep
|
|
20
|
-
* compares every value against the engine modules.
|
|
21
|
-
*/
|
|
22
|
-
export declare const HUD_PRESET_THEMES: Readonly<Record<HudPresetName, Readonly<Record<string, unknown>>>>;
|
|
23
|
-
/**
|
|
24
|
-
* A preset's tokens as a writable inline theme — the mirror entry minus the
|
|
25
|
-
* `evokes` label, which describes the style rather than rendering it.
|
|
26
|
-
*
|
|
27
|
-
* The intended patch flow: `const base = presetTheme('nexus')`, apply the user's
|
|
28
|
-
* change, then `write-hud-theme` the result.
|
|
29
|
-
*/
|
|
30
|
-
export declare function presetTheme(name: HudPresetName): Record<string, unknown>;
|
|
31
|
-
/**
|
|
32
|
-
* The one-line mood label per preset, DERIVED from the mirrored preset data
|
|
33
|
-
* above rather than kept as a second hand-written list.
|
|
34
|
-
*
|
|
35
|
-
* It used to be an independent map explicitly excluded from the drift gate, on
|
|
36
|
-
* the grounds that the engine had no counterpart. It then rotted: three of five
|
|
37
|
-
* labels described styles that had since been retuned, and this is the field an
|
|
38
|
-
* agent picks a preset BY. The engine presets carry `evokes` beside their tokens
|
|
39
|
-
* now, so the description and the style are one edit and one check.
|
|
40
|
-
*/
|
|
41
|
-
export declare const HUD_PRESET_INFO: Readonly<Record<HudPresetName, {
|
|
42
|
-
evokes: string;
|
|
43
|
-
}>>;
|
|
44
|
-
export declare const HUD_FONTS: {
|
|
45
|
-
readonly 'red-hat-display': {
|
|
46
|
-
readonly family: "Red Hat Display";
|
|
47
|
-
readonly weights: readonly [300, 400, 500, 700];
|
|
48
|
-
readonly suitsCase: readonly ["upper", "normal"];
|
|
49
|
-
readonly evokes: "Default Bitmagic — warm, technical, modern sans";
|
|
50
|
-
};
|
|
51
|
-
readonly 'chakra-petch': {
|
|
52
|
-
readonly family: "Chakra Petch";
|
|
53
|
-
readonly weights: readonly [300, 400, 500, 600, 700];
|
|
54
|
-
readonly suitsCase: readonly ["upper", "normal"];
|
|
55
|
-
readonly evokes: "Chamfered techno sans — holographic HUD, sci-fi console, cut corners";
|
|
56
|
-
};
|
|
57
|
-
readonly 'ibm-plex-sans': {
|
|
58
|
-
readonly family: "IBM Plex Sans";
|
|
59
|
-
readonly weights: readonly [300, 400, 500, 600, 700];
|
|
60
|
-
readonly suitsCase: readonly ["upper", "normal"];
|
|
61
|
-
readonly evokes: "Engineered humanist sans — instrument panel, operator console, tabular data";
|
|
62
|
-
};
|
|
63
|
-
readonly 'archivo-narrow': {
|
|
64
|
-
readonly family: "Archivo Narrow";
|
|
65
|
-
readonly weights: readonly [400, 500, 600, 700];
|
|
66
|
-
readonly suitsCase: readonly ["upper", "normal"];
|
|
67
|
-
readonly evokes: "Narrow gothic that keeps its ink — motorsport telemetry, broadcast overlay";
|
|
68
|
-
};
|
|
69
|
-
readonly 'bebas-neue': {
|
|
70
|
-
readonly family: "Bebas Neue";
|
|
71
|
-
readonly weights: readonly [400];
|
|
72
|
-
readonly suitsCase: readonly ["upper", "normal"];
|
|
73
|
-
readonly evokes: "Tall, bold display — sports, action, news ticker";
|
|
74
|
-
};
|
|
75
|
-
readonly 'press-start-2p': {
|
|
76
|
-
readonly family: "Press Start 2P";
|
|
77
|
-
readonly weights: readonly [400];
|
|
78
|
-
readonly suitsCase: readonly ["upper", "normal"];
|
|
79
|
-
readonly evokes: "Retro arcade pixel — 8-bit, NES, chiptune";
|
|
80
|
-
};
|
|
81
|
-
readonly creepster: {
|
|
82
|
-
readonly family: "Creepster";
|
|
83
|
-
readonly weights: readonly [400];
|
|
84
|
-
readonly suitsCase: readonly ["normal"];
|
|
85
|
-
readonly evokes: "Horror, halloween, dripping — already display-styled";
|
|
86
|
-
};
|
|
87
|
-
readonly pacifico: {
|
|
88
|
-
readonly family: "Pacifico";
|
|
89
|
-
readonly weights: readonly [400];
|
|
90
|
-
readonly suitsCase: readonly ["normal"];
|
|
91
|
-
readonly evokes: "Handwritten cursive — tropical, beachy, casual";
|
|
92
|
-
};
|
|
93
|
-
readonly 'space-grotesk': {
|
|
94
|
-
readonly family: "Space Grotesk";
|
|
95
|
-
readonly weights: readonly [400, 500, 700];
|
|
96
|
-
readonly suitsCase: readonly ["upper", "normal"];
|
|
97
|
-
readonly evokes: "Geometric sans — sci-fi, technical, modern";
|
|
98
|
-
};
|
|
99
|
-
readonly 'rubik-mono-one': {
|
|
100
|
-
readonly family: "Rubik Mono One";
|
|
101
|
-
readonly weights: readonly [400];
|
|
102
|
-
readonly suitsCase: readonly ["upper", "normal"];
|
|
103
|
-
readonly evokes: "Heavy, slabby display — bold, blocky, attention-grabbing";
|
|
104
|
-
};
|
|
105
|
-
readonly vt323: {
|
|
106
|
-
readonly family: "VT323";
|
|
107
|
-
readonly weights: readonly [400];
|
|
108
|
-
readonly suitsCase: readonly ["upper", "normal"];
|
|
109
|
-
readonly evokes: "CRT terminal monospace — retro computer, hacker, glitch";
|
|
110
|
-
};
|
|
111
|
-
readonly orbitron: {
|
|
112
|
-
readonly family: "Orbitron";
|
|
113
|
-
readonly weights: readonly [400, 500, 700, 900];
|
|
114
|
-
readonly suitsCase: readonly ["upper", "normal"];
|
|
115
|
-
readonly evokes: "Futuristic geometric — sci-fi, cyber, racing HUD";
|
|
116
|
-
};
|
|
117
|
-
readonly shrikhand: {
|
|
118
|
-
readonly family: "Shrikhand";
|
|
119
|
-
readonly weights: readonly [400];
|
|
120
|
-
readonly suitsCase: readonly ["normal"];
|
|
121
|
-
readonly evokes: "Italic display — celebratory, party, energetic";
|
|
122
|
-
};
|
|
123
|
-
readonly 'baloo-2': {
|
|
124
|
-
readonly family: "Baloo 2";
|
|
125
|
-
readonly weights: readonly [400, 500, 600, 700, 800];
|
|
126
|
-
readonly suitsCase: readonly ["upper", "normal"];
|
|
127
|
-
readonly evokes: "Rounded chunky sans with a real weight range — mobile action-RPG chrome";
|
|
128
|
-
};
|
|
129
|
-
readonly 'lilita-one': {
|
|
130
|
-
readonly family: "Lilita One";
|
|
131
|
-
readonly weights: readonly [400];
|
|
132
|
-
readonly suitsCase: readonly ["upper", "normal"];
|
|
133
|
-
readonly evokes: "Chunky rounded comic display — cartoon battler, toon town";
|
|
134
|
-
};
|
|
135
|
-
readonly fredoka: {
|
|
136
|
-
readonly family: "Fredoka";
|
|
137
|
-
readonly weights: readonly [300, 400, 500, 700];
|
|
138
|
-
readonly suitsCase: readonly ["upper", "normal"];
|
|
139
|
-
readonly evokes: "Soft rounded bubble sans — candy, casual mobile, sweet";
|
|
140
|
-
};
|
|
141
|
-
readonly 'grenze-gotisch': {
|
|
142
|
-
readonly family: "Grenze Gotisch";
|
|
143
|
-
readonly weights: readonly [400, 500, 700, 900];
|
|
144
|
-
readonly suitsCase: readonly ["normal"];
|
|
145
|
-
readonly evokes: "Readable blackletter — dark fantasy, gothic dungeon";
|
|
146
|
-
};
|
|
147
|
-
readonly cinzel: {
|
|
148
|
-
readonly family: "Cinzel";
|
|
149
|
-
readonly weights: readonly [400, 500, 700, 900];
|
|
150
|
-
readonly suitsCase: readonly ["upper", "normal"];
|
|
151
|
-
readonly evokes: "Carved Roman caps — epic fantasy, ancient temple";
|
|
152
|
-
};
|
|
153
|
-
};
|
|
154
|
-
export declare const HUD_DECORATIONS: {
|
|
155
|
-
readonly 'drip-border': {
|
|
156
|
-
readonly suitsSlots: readonly ["borderImage", "decorationAfter"];
|
|
157
|
-
readonly evokes: "Horror drips on edges";
|
|
158
|
-
};
|
|
159
|
-
readonly 'pixel-corners': {
|
|
160
|
-
readonly suitsSlots: readonly ["borderImage"];
|
|
161
|
-
readonly evokes: "8-bit pixel corner brackets";
|
|
162
|
-
};
|
|
163
|
-
readonly scanline: {
|
|
164
|
-
readonly suitsSlots: readonly ["backdrop"];
|
|
165
|
-
readonly evokes: "CRT scanlines tiled across the surface";
|
|
166
|
-
};
|
|
167
|
-
readonly 'vine-corner': {
|
|
168
|
-
readonly suitsSlots: readonly ["borderImage", "decorationBefore"];
|
|
169
|
-
readonly evokes: "Tropical vines / leaves in corners";
|
|
170
|
-
};
|
|
171
|
-
readonly 'glow-aura': {
|
|
172
|
-
readonly suitsSlots: readonly ["backdrop", "decorationBefore", "decorationAfter"];
|
|
173
|
-
readonly evokes: "Soft radial glow halo behind the element";
|
|
174
|
-
};
|
|
175
|
-
readonly 'bracket-frame': {
|
|
176
|
-
readonly suitsSlots: readonly ["borderImage"];
|
|
177
|
-
readonly evokes: "Sci-fi targeting brackets on each corner";
|
|
178
|
-
};
|
|
179
|
-
readonly 'ribbon-edge': {
|
|
180
|
-
readonly suitsSlots: readonly ["decorationAfter", "decorationBefore"];
|
|
181
|
-
readonly evokes: "Bunting / banner saw-tooth edge";
|
|
182
|
-
};
|
|
183
|
-
readonly 'circuit-trace': {
|
|
184
|
-
readonly suitsSlots: readonly ["backdrop"];
|
|
185
|
-
readonly evokes: "PCB / circuit board trace pattern";
|
|
186
|
-
};
|
|
187
|
-
readonly 'candy-gloss': {
|
|
188
|
-
readonly suitsSlots: readonly ["backdrop", "decorationBefore"];
|
|
189
|
-
readonly evokes: "Glossy sugar highlight across the top — candy button shine";
|
|
190
|
-
};
|
|
191
|
-
readonly 'ornate-corner': {
|
|
192
|
-
readonly suitsSlots: readonly ["borderImage"];
|
|
193
|
-
readonly evokes: "Gothic filigree corner frame — dark fantasy, dungeon";
|
|
194
|
-
};
|
|
195
|
-
readonly 'royal-frame': {
|
|
196
|
-
readonly suitsSlots: readonly ["borderImage"];
|
|
197
|
-
readonly evokes: "Double gold-trim picture frame with corner studs — epic fantasy";
|
|
198
|
-
};
|
|
199
|
-
readonly 'hazard-stripes': {
|
|
200
|
-
readonly suitsSlots: readonly ["backdrop"];
|
|
201
|
-
readonly evokes: "Faint diagonal caution stripes — military / sci-fi warning panel";
|
|
202
|
-
};
|
|
203
|
-
readonly 'pixel-frame': {
|
|
204
|
-
readonly suitsSlots: readonly ["borderImage"];
|
|
205
|
-
readonly evokes: "NES dialog double-ring pixel border";
|
|
206
|
-
};
|
|
207
|
-
readonly 'grain-texture': {
|
|
208
|
-
readonly suitsSlots: readonly ["backdrop"];
|
|
209
|
-
readonly evokes: "Subtle parchment / leather grain tooth";
|
|
210
|
-
};
|
|
211
|
-
};
|
|
212
|
-
export declare const DEFAULT_THEME_TOKENS: Readonly<Record<string, unknown>>;
|
|
213
|
-
export declare const HUD_DECORATION_SVGS: Readonly<Record<string, string>>;
|
|
214
|
-
export declare const HUD_GLOW_KEYS: readonly ["aqua", "pink", "warm", "horror-red", "gold", "cyan", "none"];
|
|
215
|
-
export declare const HUD_ELEMENT_CLASSES: readonly ["progressBar", "healthBar", "counter", "iconText", "timer", "toast", "controls", "reticle", "mobileControls"];
|
|
216
|
-
export declare const HUD_SHAPE_TOKENS: readonly ["radiusPill", "radiusCard", "glow", "imageRendering", "borderWidth", "bevel", "gloss", "glowColor"];
|
|
217
|
-
export declare const HUD_COLOR_TOKENS: readonly ["primary", "danger", "warning", "success", "background", "surface", "text", "textMuted", "outline"];
|
|
218
|
-
export declare const HUD_REQUIRED_COLORS: readonly ["primary", "danger", "background", "surface", "text"];
|
|
219
|
-
export declare const HUD_DECORATION_SLOTS: readonly ["borderImage", "backdrop", "decorationBefore", "decorationAfter"];
|
|
220
|
-
export declare const HUD_ICON_SLOTS: readonly [{
|
|
221
|
-
readonly key: "heart";
|
|
222
|
-
readonly description: "Health label icon (shown next to \"HP\" on the player health bar). Default: filled heart.";
|
|
223
|
-
}, {
|
|
224
|
-
readonly key: "mouse";
|
|
225
|
-
readonly description: "Pointer-lock overlay icon (\"Click to play\" screen). Default: outlined mouse.";
|
|
226
|
-
}, {
|
|
227
|
-
readonly key: "arrow";
|
|
228
|
-
readonly description: "Movement-key arrow used in the controls overlay. ONE SVG — CSS rotates it for down/left/right. Default: thin chevron pointing up.";
|
|
229
|
-
}];
|
|
230
|
-
export declare const HUD_ICON_KEYS: ReadonlyArray<(typeof HUD_ICON_SLOTS)[number]["key"]>;
|
|
231
|
-
export interface CatalogValidationIssue {
|
|
232
|
-
path: string;
|
|
233
|
-
message: string;
|
|
234
|
-
suggestion?: string;
|
|
235
|
-
}
|