@energy8platform/game-engine 0.24.0 → 0.26.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reel-panel-client.esm.js","sources":["../src/slot/devtools/fieldSchema.ts","../src/slot/devtools/controlPanel.ts","../src/slot/config/ReelSystemConfig.ts","../src/slot/devtools/configDiff.ts","../src/slot/devtools/protocol.ts","../src/slot/devtools/panelClient.ts"],"sourcesContent":[null,null,null,null,null,null],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@energy8platform/game-engine",
3
- "version": "0.24.0",
3
+ "version": "0.26.0",
4
4
  "description": "Universal casino game engine built on PixiJS v8 and @energy8platform/game-sdk",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs.js",
@@ -66,6 +66,16 @@
66
66
  "import": "./dist/slot.esm.js",
67
67
  "require": "./dist/slot.cjs.js",
68
68
  "types": "./dist/slot.d.ts"
69
+ },
70
+ "./devtools": {
71
+ "import": "./dist/devtools.esm.js",
72
+ "require": "./dist/devtools.cjs.js",
73
+ "types": "./dist/devtools.d.ts"
74
+ },
75
+ "./harness": {
76
+ "import": "./dist/harness.esm.js",
77
+ "require": "./dist/harness.cjs.js",
78
+ "types": "./dist/harness.d.ts"
69
79
  }
70
80
  },
71
81
  "files": [
@@ -89,9 +99,13 @@
89
99
  "peerDependencies": {
90
100
  "@energy8platform/game-sdk": "^2.8.0",
91
101
  "@energy8platform/stake-bridge": ">=0.2.1",
102
+ "@energy8platform/harness": "*",
92
103
  "pixi.js": "^8.16.0"
93
104
  },
94
105
  "peerDependenciesMeta": {
106
+ "@energy8platform/harness": {
107
+ "optional": true
108
+ },
95
109
  "@energy8platform/stake-bridge": {
96
110
  "optional": true
97
111
  },
@@ -104,6 +118,7 @@
104
118
  },
105
119
  "devDependencies": {
106
120
  "@energy8platform/game-sdk": "^2.8.0",
121
+ "@energy8platform/harness": "*",
107
122
  "@energy8platform/stake-bridge": "*",
108
123
  "@esotericsoftware/spine-pixi-v8": "~4.2.0",
109
124
  "@pixi/sound": "^6.0.0",
@@ -0,0 +1,43 @@
1
+ /**
2
+ * `@energy8platform/game-engine/harness` — node-only entry.
3
+ *
4
+ * Contributes the reel-config **panel** to `@energy8platform/harness`: a docked
5
+ * right sidebar that tunes a running game's ReelSystem live. Pair it with
6
+ * `mountReelDevBridge` (from `@energy8platform/game-engine/devtools`) in the game.
7
+ *
8
+ * Usage in a game's vite.config:
9
+ * import { createHarness } from '@energy8platform/harness';
10
+ * import { reelDevtoolsPlugin } from '@energy8platform/game-engine/harness';
11
+ * createHarness({ plugins: [ reelDevtoolsPlugin({ sections: { geometry: false } }) ] });
12
+ *
13
+ * Node-only: resolves the built, self-contained panel-client ESM the harness serves.
14
+ */
15
+
16
+ import { fileURLToPath } from 'node:url';
17
+
18
+ import type { HarnessPanel, HarnessPlugin } from '@energy8platform/harness';
19
+ import type { SectionKey } from '../slot/devtools';
20
+
21
+ export interface ReelDevtoolsPluginOptions {
22
+ /** Sidebar header / tab label. Default 'Reels'. */
23
+ title?: string;
24
+ /**
25
+ * Toggle whole sections of the reel panel. A missing key is shown; set a key to
26
+ * `false` to hide (and lock) that section — e.g. `{ geometry: false }` to disable
27
+ * live geometry editing. Sections: geometry · motion · anticipation · cascade · win · features.
28
+ */
29
+ sections?: Partial<Record<SectionKey, boolean>>;
30
+ }
31
+
32
+ export function reelDevtoolsPlugin(opts: ReelDevtoolsPluginOptions = {}): HarnessPlugin {
33
+ // The self-contained panel client sits next to this module in dist/.
34
+ const clientEntry = fileURLToPath(new URL('./reel-panel-client.esm.js', import.meta.url));
35
+ const panel: HarnessPanel = {
36
+ id: 'reels',
37
+ title: opts.title ?? 'Reels',
38
+ placement: 'sidebar',
39
+ clientEntry,
40
+ config: opts.sections ? { sections: opts.sections } : undefined,
41
+ };
42
+ return { panel };
43
+ }
@@ -0,0 +1,41 @@
1
+ // packages/game-engine/src/slot/devtools/configDiff.ts
2
+ //
3
+ // Compute the minimal override diff of a reel config against the defaults, and emit a
4
+ // paste-ready `resolveReelConfig({...})` TypeScript snippet. Pure — no pixi, no DOM.
5
+
6
+ import { resolveReelConfig, type ReelSystemConfig } from '../config/ReelSystemConfig';
7
+
8
+ /* eslint-disable @typescript-eslint/no-explicit-any */
9
+ /** Deep diff `obj` against `base`: arrays compared whole, objects recursed, scalars by !==. */
10
+ export function configDiff(base: any, obj: any): any {
11
+ const out: any = {};
12
+ for (const k of Object.keys(obj ?? {})) {
13
+ const a = base?.[k];
14
+ const b = obj[k];
15
+ if (Array.isArray(b)) {
16
+ if (JSON.stringify(a) !== JSON.stringify(b)) out[k] = b;
17
+ } else if (b && typeof b === 'object') {
18
+ const d = configDiff(a ?? {}, b);
19
+ if (Object.keys(d).length) out[k] = d;
20
+ } else if (a !== b) {
21
+ out[k] = b;
22
+ }
23
+ }
24
+ return out;
25
+ }
26
+ /* eslint-enable @typescript-eslint/no-explicit-any */
27
+
28
+ /** Diff a working config against DEFAULT_REEL_CONFIG (via resolveReelConfig()). */
29
+ export function diffFromDefaults(config: ReelSystemConfig): Partial<ReelSystemConfig> {
30
+ return configDiff(resolveReelConfig(), config) as Partial<ReelSystemConfig>;
31
+ }
32
+
33
+ /** Emit a paste-ready TS module exporting the reel config as overrides-only. */
34
+ export function emitReelConfigTs(config: ReelSystemConfig): string {
35
+ const diff = diffFromDefaults(config);
36
+ return (
37
+ `import { resolveReelConfig } from '@energy8platform/game-engine/slot';\n\n` +
38
+ `// Only the overrides vs DEFAULT_REEL_CONFIG.\n` +
39
+ `export const reelConfig = resolveReelConfig(${JSON.stringify(diff, null, 2)} as const);\n`
40
+ );
41
+ }
@@ -0,0 +1,151 @@
1
+ // packages/game-engine/src/slot/devtools/controlPanel.ts
2
+ //
3
+ // Renders the reel-config field schema into a DOM panel and binds each control to a
4
+ // live config object. Pure DOM — no pixi. Shared by the harness reel sidebar and the
5
+ // reel-lab playground.
6
+
7
+ import { REEL_FIELD_SCHEMA, type Control, type Section } from './fieldSchema';
8
+
9
+ /* eslint-disable @typescript-eslint/no-explicit-any */
10
+ export function getPath(obj: any, path: string): any {
11
+ return path.split('.').reduce((o, k) => (o == null ? o : o[k]), obj);
12
+ }
13
+ export function setPath(obj: any, path: string, value: any): void {
14
+ const keys = path.split('.');
15
+ const last = keys.pop() as string;
16
+ const target = keys.reduce((o, k) => (o[k] ??= {}), obj);
17
+ target[last] = value;
18
+ }
19
+ /* eslint-enable @typescript-eslint/no-explicit-any */
20
+
21
+ export interface ControlPanelOptions {
22
+ /** The live config object the controls read from and mutate. */
23
+ config: unknown;
24
+ /** Called with the changed dot-path after each edit. */
25
+ onChange: (path: string) => void;
26
+ /** Schema to render. Defaults to REEL_FIELD_SCHEMA. */
27
+ schema?: Section[];
28
+ }
29
+
30
+ /** Build the control panel into `root`. Returns a `refresh()` that re-syncs inputs from config. */
31
+ export function buildControlPanel(
32
+ root: HTMLElement,
33
+ opts: ControlPanelOptions,
34
+ ): { refresh: () => void } {
35
+ const schema = opts.schema ?? REEL_FIELD_SCHEMA;
36
+ const updaters: (() => void)[] = [];
37
+ root.innerHTML = '';
38
+ for (const section of schema) root.appendChild(renderSection(section, opts, updaters));
39
+ return { refresh: () => updaters.forEach((u) => u()) };
40
+ }
41
+
42
+ function renderSection(
43
+ section: Section,
44
+ opts: ControlPanelOptions,
45
+ updaters: (() => void)[],
46
+ ): HTMLElement {
47
+ const wrap = document.createElement('section');
48
+ wrap.className = 'panel-section';
49
+ const head = document.createElement('button');
50
+ head.className = 'section-head';
51
+ head.textContent = section.title;
52
+ const body = document.createElement('div');
53
+ body.className = 'section-body';
54
+ if (section.collapsed) body.style.display = 'none';
55
+ head.addEventListener('click', () => {
56
+ body.style.display = body.style.display === 'none' ? '' : 'none';
57
+ });
58
+ wrap.appendChild(head);
59
+ wrap.appendChild(body);
60
+ for (const c of section.controls) body.appendChild(renderControl(c, opts, updaters));
61
+ return wrap;
62
+ }
63
+
64
+ function renderControl(c: Control, opts: ControlPanelOptions, updaters: (() => void)[]): HTMLElement {
65
+ const row = document.createElement('label');
66
+ row.className = 'control';
67
+ const name = document.createElement('span');
68
+ name.className = 'control-label';
69
+ name.textContent = c.label;
70
+ row.appendChild(name);
71
+
72
+ const emit = (): void => opts.onChange(c.path);
73
+
74
+ if (c.kind === 'toggle') {
75
+ const input = document.createElement('input');
76
+ input.type = 'checkbox';
77
+ const sync = (): void => {
78
+ input.checked = !!getPath(opts.config, c.path);
79
+ };
80
+ sync();
81
+ input.addEventListener('change', () => {
82
+ setPath(opts.config, c.path, input.checked);
83
+ emit();
84
+ });
85
+ row.classList.add('control-toggle');
86
+ row.appendChild(input);
87
+ updaters.push(sync);
88
+ } else if (c.kind === 'select') {
89
+ const sel = document.createElement('select');
90
+ for (const o of c.options) {
91
+ const opt = document.createElement('option');
92
+ opt.value = o;
93
+ opt.textContent = o;
94
+ sel.appendChild(opt);
95
+ }
96
+ const sync = (): void => {
97
+ sel.value = String(getPath(opts.config, c.path));
98
+ };
99
+ sync();
100
+ sel.addEventListener('change', () => {
101
+ setPath(opts.config, c.path, sel.value);
102
+ emit();
103
+ });
104
+ row.appendChild(sel);
105
+ updaters.push(sync);
106
+ } else if (c.kind === 'range') {
107
+ const input = document.createElement('input');
108
+ input.type = 'range';
109
+ input.min = String(c.min);
110
+ input.max = String(c.max);
111
+ input.step = String(c.step);
112
+ const val = document.createElement('output');
113
+ val.className = 'control-value';
114
+ const sync = (): void => {
115
+ let raw = getPath(opts.config, c.path);
116
+ if ((raw == null || typeof raw !== 'number') && c.fallback != null)
117
+ raw = getPath(opts.config, c.fallback);
118
+ const v = Number(raw);
119
+ input.value = String(v);
120
+ val.textContent = String(v);
121
+ };
122
+ sync();
123
+ input.addEventListener('input', () => {
124
+ const v = Number(input.value);
125
+ setPath(opts.config, c.path, v);
126
+ val.textContent = String(v);
127
+ emit();
128
+ });
129
+ row.appendChild(input);
130
+ row.appendChild(val);
131
+ updaters.push(sync);
132
+ } else {
133
+ const input = document.createElement('input');
134
+ input.type = 'color';
135
+ const sync = (): void => {
136
+ input.value =
137
+ '#' +
138
+ Number(getPath(opts.config, c.path) ?? 0)
139
+ .toString(16)
140
+ .padStart(6, '0');
141
+ };
142
+ sync();
143
+ input.addEventListener('input', () => {
144
+ setPath(opts.config, c.path, parseInt(input.value.slice(1), 16));
145
+ emit();
146
+ });
147
+ row.appendChild(input);
148
+ updaters.push(sync);
149
+ }
150
+ return row;
151
+ }
@@ -0,0 +1,211 @@
1
+ // packages/game-engine/src/slot/devtools/fieldSchema.ts
2
+ //
3
+ // Declarative description of the reel-config control panel. Each control binds to a
4
+ // dot-path in the ReelSystemConfig. Pure data — no pixi, no DOM — so it bundles into
5
+ // the self-contained panel client served by the harness.
6
+ //
7
+ // NOTE: board shape (grid.cols / grid.rows / rowsPerReel) is intentionally OMITTED.
8
+ // The board shape is math-tied (paylines / ways / book geometry) and must not be
9
+ // tuned live from the harness. Everything else — cosmetic geometry, motion,
10
+ // anticipation, cascade, win presentation and features — is tunable.
11
+
12
+ export type Control =
13
+ | { kind: 'select'; path: string; label: string; options: string[] }
14
+ | {
15
+ kind: 'range';
16
+ path: string;
17
+ label: string;
18
+ min: number;
19
+ max: number;
20
+ step: number;
21
+ /** When the bound value is unset (undefined / non-scalar), show this path's value instead. */
22
+ fallback?: string;
23
+ }
24
+ | { kind: 'toggle'; path: string; label: string }
25
+ | { kind: 'color'; path: string; label: string };
26
+
27
+ /** Stable section identifiers — used to toggle whole sections on/off from the plugin. */
28
+ export type SectionKey = 'geometry' | 'motion' | 'anticipation' | 'cascade' | 'win' | 'features';
29
+
30
+ /** All section keys, in panel order. */
31
+ export const REEL_SECTION_KEYS: SectionKey[] = [
32
+ 'geometry',
33
+ 'motion',
34
+ 'anticipation',
35
+ 'cascade',
36
+ 'win',
37
+ 'features',
38
+ ];
39
+
40
+ export interface Section {
41
+ /** Stable key for enabling/disabling the whole section (optional for ad-hoc schemas). */
42
+ key?: SectionKey;
43
+ title: string;
44
+ controls: Control[];
45
+ collapsed?: boolean;
46
+ }
47
+
48
+ const EASINGS = [
49
+ 'linear',
50
+ 'easeOutQuad',
51
+ 'easeOutCubic',
52
+ 'easeOutBack',
53
+ 'easeOutBounce',
54
+ 'easeInBack',
55
+ 'easeOutElastic',
56
+ 'easeInOutSine',
57
+ 'easeInOutQuad',
58
+ ];
59
+
60
+ /** The editable reel-config fields, grouped into collapsible sections. */
61
+ export const REEL_FIELD_SCHEMA: Section[] = [
62
+ {
63
+ key: 'geometry',
64
+ title: 'Cell geometry',
65
+ controls: [
66
+ { kind: 'range', path: 'grid.cellSize', label: 'Cell size', min: 40, max: 120, step: 1 },
67
+ { kind: 'range', path: 'grid.gap', label: 'Gap', min: 0, max: 16, step: 1 },
68
+ {
69
+ kind: 'select',
70
+ path: 'grid.evaluation',
71
+ label: 'Evaluation',
72
+ options: ['lines', 'ways', 'anywhere', 'cluster', 'megaways', 'infinity'],
73
+ },
74
+ { kind: 'toggle', path: 'grid.mask', label: 'Mask reels' },
75
+ {
76
+ kind: 'range',
77
+ path: 'grid.cellWidth',
78
+ label: 'Cell width',
79
+ min: 40,
80
+ max: 160,
81
+ step: 1,
82
+ fallback: 'grid.cellSize',
83
+ },
84
+ {
85
+ kind: 'range',
86
+ path: 'grid.cellHeight',
87
+ label: 'Cell height',
88
+ min: 40,
89
+ max: 160,
90
+ step: 1,
91
+ fallback: 'grid.cellSize',
92
+ },
93
+ {
94
+ kind: 'range',
95
+ path: 'grid.colGap',
96
+ label: 'Column gap',
97
+ min: 0,
98
+ max: 40,
99
+ step: 1,
100
+ fallback: 'grid.gap',
101
+ },
102
+ {
103
+ kind: 'range',
104
+ path: 'grid.rowGap',
105
+ label: 'Row gap',
106
+ min: 0,
107
+ max: 40,
108
+ step: 1,
109
+ fallback: 'grid.gap',
110
+ },
111
+ ],
112
+ },
113
+ {
114
+ key: 'motion',
115
+ title: 'Motion',
116
+ controls: [
117
+ { kind: 'select', path: 'motion.style', label: 'Style', options: ['swap', 'strip', 'cascade-drop'] },
118
+ { kind: 'range', path: 'motion.spinUp', label: 'Spin-up (ms)', min: 100, max: 2500, step: 10 },
119
+ { kind: 'range', path: 'motion.hold', label: 'Hold (ms)', min: 0, max: 800, step: 10 },
120
+ { kind: 'range', path: 'motion.stopStagger', label: 'Stop stagger (ms)', min: 0, max: 400, step: 5 },
121
+ { kind: 'select', path: 'motion.stopMode', label: 'Stop mode', options: ['sequential', 'sync', 'random'] },
122
+ { kind: 'select', path: 'motion.stopOrder', label: 'Stop order', options: ['ltr', 'rtl'] },
123
+ { kind: 'range', path: 'motion.settle.amp', label: 'Settle amp (px)', min: 0, max: 24, step: 1 },
124
+ { kind: 'range', path: 'motion.settle.ms', label: 'Settle (ms)', min: 60, max: 500, step: 10 },
125
+ { kind: 'select', path: 'motion.settle.easing', label: 'Settle easing', options: EASINGS },
126
+ { kind: 'toggle', path: 'motion.squash.enabled', label: 'Squash on land' },
127
+ { kind: 'range', path: 'motion.squash.scaleX', label: 'Squash X', min: 1, max: 1.5, step: 0.01 },
128
+ { kind: 'range', path: 'motion.squash.scaleY', label: 'Squash Y', min: 0.5, max: 1, step: 0.01 },
129
+ { kind: 'toggle', path: 'motion.blur.enabled', label: 'Motion blur' },
130
+ { kind: 'range', path: 'motion.blur.alpha', label: 'Blur alpha', min: 0.3, max: 1, step: 0.01 },
131
+ { kind: 'range', path: 'motion.blur.strength', label: 'Blur strength', min: 0, max: 16, step: 1 },
132
+ { kind: 'toggle', path: 'motion.blur.streaks', label: 'Blur streaks' },
133
+ { kind: 'range', path: 'motion.turboFactor', label: 'Turbo factor', min: 0.2, max: 1, step: 0.05 },
134
+ { kind: 'select', path: 'motion.intensity', label: 'Intensity', options: ['full', 'reduced', 'minimal'] },
135
+ { kind: 'toggle', path: 'motion.slamStop', label: 'Slam stop' },
136
+ { kind: 'range', path: 'motion.symbolsPerReel', label: 'Tape length', min: 3, max: 24, step: 1 },
137
+ ],
138
+ },
139
+ {
140
+ key: 'anticipation',
141
+ title: 'Anticipation',
142
+ controls: [
143
+ { kind: 'toggle', path: 'anticipation.enabled', label: 'Enabled' },
144
+ { kind: 'range', path: 'anticipation.threshold', label: 'Threshold (N−1)', min: 1, max: 6, step: 1 },
145
+ { kind: 'range', path: 'anticipation.slowdownFactor', label: 'Slowdown', min: 0.1, max: 1, step: 0.05 },
146
+ { kind: 'range', path: 'anticipation.holdMs', label: 'Hold (ms)', min: 0, max: 1200, step: 50 },
147
+ { kind: 'toggle', path: 'anticipation.zoom.enabled', label: 'Reel zoom' },
148
+ { kind: 'range', path: 'anticipation.zoom.scale', label: 'Zoom scale', min: 1, max: 1.6, step: 0.05 },
149
+ { kind: 'range', path: 'anticipation.zoom.ms', label: 'Zoom (ms)', min: 200, max: 1200, step: 50 },
150
+ ],
151
+ },
152
+ {
153
+ key: 'cascade',
154
+ title: 'Cascade / Tumble',
155
+ controls: [
156
+ { kind: 'toggle', path: 'cascade.enabled', label: 'Enabled' },
157
+ { kind: 'toggle', path: 'cascade.gravity', label: 'Gravity (survivors slide)' },
158
+ { kind: 'toggle', path: 'cascade.dimNonWinners', label: 'Dim non-winners' },
159
+ { kind: 'range', path: 'cascade.dimAlpha', label: 'Dim alpha', min: 0.1, max: 1, step: 0.05 },
160
+ { kind: 'range', path: 'cascade.perStepDecel', label: 'Per-step decel', min: 0, max: 0.4, step: 0.01 },
161
+ { kind: 'range', path: 'cascade.perStepDecelCap', label: 'Decel cap', min: 1, max: 3, step: 0.1 },
162
+ { kind: 'range', path: 'cascade.timings.remove', label: 'Remove (ms)', min: 80, max: 600, step: 10 },
163
+ { kind: 'range', path: 'cascade.timings.drop', label: 'Drop (ms)', min: 80, max: 600, step: 10 },
164
+ { kind: 'select', path: 'cascade.easings.drop', label: 'Drop easing', options: EASINGS },
165
+ { kind: 'toggle', path: 'cascade.multiplier.enabled', label: 'Win multiplier' },
166
+ { kind: 'select', path: 'cascade.multiplier.mode', label: 'Multiplier mode', options: ['add', 'mul'] },
167
+ { kind: 'range', path: 'cascade.multiplier.step', label: 'Multiplier step', min: 1, max: 5, step: 1 },
168
+ ],
169
+ },
170
+ {
171
+ key: 'win',
172
+ title: 'Win presentation',
173
+ controls: [
174
+ { kind: 'range', path: 'win.highlightScale', label: 'Highlight scale', min: 1, max: 1.4, step: 0.01 },
175
+ { kind: 'toggle', path: 'win.glow', label: 'Glow' },
176
+ { kind: 'toggle', path: 'win.frameShake.enabled', label: 'Frame shake' },
177
+ { kind: 'range', path: 'win.frameShake.amp', label: 'Shake amp', min: 0, max: 10, step: 0.5 },
178
+ ],
179
+ },
180
+ {
181
+ key: 'features',
182
+ title: 'Features',
183
+ controls: [
184
+ { kind: 'toggle', path: 'features.expandingWild.enabled', label: 'Expanding wild' },
185
+ { kind: 'toggle', path: 'features.expandingWild.toFullReel', label: '· to full reel' },
186
+ { kind: 'toggle', path: 'features.sticky.enabled', label: 'Sticky symbols' },
187
+ { kind: 'range', path: 'features.sticky.durationSpins', label: '· duration spins', min: 0, max: 6, step: 1 },
188
+ { kind: 'toggle', path: 'features.walkingWild.enabled', label: 'Walking wild' },
189
+ { kind: 'select', path: 'features.walkingWild.direction', label: '· direction', options: ['left', 'right'] },
190
+ { kind: 'toggle', path: 'features.randomWild.enabled', label: 'Random wild inject' },
191
+ { kind: 'toggle', path: 'features.randomWild.sticky', label: '· sticky' },
192
+ { kind: 'toggle', path: 'features.mystery.enabled', label: 'Mystery symbols' },
193
+ { kind: 'toggle', path: 'features.transform.enabled', label: 'Transform / upgrade' },
194
+ { kind: 'toggle', path: 'features.transform.upgradeOnly', label: '· upgrade only' },
195
+ { kind: 'toggle', path: 'features.giant.enabled', label: 'Giant symbol' },
196
+ { kind: 'range', path: 'features.giant.width', label: '· width', min: 1, max: 5, step: 1 },
197
+ { kind: 'range', path: 'features.giant.height', label: '· height', min: 1, max: 5, step: 1 },
198
+ { kind: 'toggle', path: 'features.split.enabled', label: 'Split (xSplit)' },
199
+ { kind: 'range', path: 'features.split.factor', label: '· factor', min: 2, max: 4, step: 1 },
200
+ { kind: 'toggle', path: 'features.stacked.enabled', label: 'Stacked symbols' },
201
+ { kind: 'range', path: 'features.stacked.height', label: '· stack height', min: 2, max: 7, step: 1 },
202
+ { kind: 'toggle', path: 'features.nudge.enabled', label: 'Nudge / xNudge' },
203
+ { kind: 'toggle', path: 'features.nudge.toFullReel', label: '· xNudge fill' },
204
+ { kind: 'toggle', path: 'features.multiplier.enabled', label: 'Multiplier symbols' },
205
+ { kind: 'select', path: 'features.multiplier.combine', label: '· combine', options: ['additive', 'multiplicative'] },
206
+ { kind: 'toggle', path: 'features.holdAndSpin.enabled', label: 'Hold & Spin' },
207
+ { kind: 'range', path: 'features.holdAndSpin.respinsAwarded', label: '· respins', min: 1, max: 5, step: 1 },
208
+ { kind: 'toggle', path: 'features.reelModifier.enabled', label: 'Reel modifier' },
209
+ ],
210
+ },
211
+ ];
@@ -0,0 +1,31 @@
1
+ // packages/game-engine/src/slot/devtools/index.ts
2
+ //
3
+ // Browser-facing reel devtools: the game-side bridge plus the shared control-panel /
4
+ // diff builders (reused by the reel-lab playground). Pixi-free.
5
+
6
+ export { mountReelDevBridge } from './reelDevBridge';
7
+ export type {
8
+ ReelDevBridge,
9
+ ReelDevBridgeOptions,
10
+ ReelDevBridgeTarget,
11
+ } from './reelDevBridge';
12
+
13
+ export { buildControlPanel, getPath, setPath } from './controlPanel';
14
+ export type { ControlPanelOptions } from './controlPanel';
15
+
16
+ export { REEL_FIELD_SCHEMA, REEL_SECTION_KEYS } from './fieldSchema';
17
+ export type { Control, Section, SectionKey } from './fieldSchema';
18
+
19
+ export { configDiff, diffFromDefaults, emitReelConfigTs } from './configDiff';
20
+
21
+ export {
22
+ REEL_READY,
23
+ REEL_APPLY,
24
+ REEL_REQUEST,
25
+ } from './protocol';
26
+ export type {
27
+ ReelDevMessage,
28
+ ReelReadyMessage,
29
+ ReelApplyMessage,
30
+ ReelRequestMessage,
31
+ } from './protocol';