@datamoc/mw_games 0.20.0 → 0.22.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.
Files changed (115) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/dist/audio/Channels.d.ts +19 -0
  3. package/dist/audio/Channels.d.ts.map +1 -1
  4. package/dist/audio/Channels.js +33 -4
  5. package/dist/audio/Channels.js.map +1 -1
  6. package/dist/audio/LoopTags.d.ts +37 -0
  7. package/dist/audio/LoopTags.d.ts.map +1 -0
  8. package/dist/audio/LoopTags.js +116 -0
  9. package/dist/audio/LoopTags.js.map +1 -0
  10. package/dist/audio/Midi.d.ts +5 -0
  11. package/dist/audio/Midi.d.ts.map +1 -1
  12. package/dist/audio/Midi.js +9 -1
  13. package/dist/audio/Midi.js.map +1 -1
  14. package/dist/audio/MidiRender.d.ts +3 -2
  15. package/dist/audio/MidiRender.d.ts.map +1 -1
  16. package/dist/audio/MidiRender.js +2 -2
  17. package/dist/audio/MidiRender.js.map +1 -1
  18. package/dist/audio/index.d.ts +3 -1
  19. package/dist/audio/index.d.ts.map +1 -1
  20. package/dist/audio/index.js +1 -0
  21. package/dist/audio/index.js.map +1 -1
  22. package/dist/board/bitboard.d.ts +132 -0
  23. package/dist/board/bitboard.d.ts.map +1 -0
  24. package/dist/board/bitboard.js +495 -0
  25. package/dist/board/bitboard.js.map +1 -0
  26. package/dist/board/chess.d.ts +16 -0
  27. package/dist/board/chess.d.ts.map +1 -1
  28. package/dist/board/chess.js +43 -0
  29. package/dist/board/chess.js.map +1 -1
  30. package/dist/board/index.d.ts +9 -1
  31. package/dist/board/index.d.ts.map +1 -1
  32. package/dist/board/index.js +5 -1
  33. package/dist/board/index.js.map +1 -1
  34. package/dist/board/openings.d.ts +58 -0
  35. package/dist/board/openings.d.ts.map +1 -0
  36. package/dist/board/openings.js +45 -0
  37. package/dist/board/openings.js.map +1 -0
  38. package/dist/board/tablebase.d.ts +118 -0
  39. package/dist/board/tablebase.d.ts.map +1 -0
  40. package/dist/board/tablebase.js +414 -0
  41. package/dist/board/tablebase.js.map +1 -0
  42. package/dist/board/tourney.d.ts +90 -0
  43. package/dist/board/tourney.d.ts.map +1 -0
  44. package/dist/board/tourney.js +1013 -0
  45. package/dist/board/tourney.js.map +1 -0
  46. package/dist/core/JavaRandom.d.ts +55 -0
  47. package/dist/core/JavaRandom.d.ts.map +1 -0
  48. package/dist/core/JavaRandom.js +81 -0
  49. package/dist/core/JavaRandom.js.map +1 -0
  50. package/dist/core/index.d.ts +2 -0
  51. package/dist/core/index.d.ts.map +1 -1
  52. package/dist/core/index.js +1 -0
  53. package/dist/core/index.js.map +1 -1
  54. package/dist/mw_games.global.js +123 -116
  55. package/dist/rpg/EventRunner.d.ts +7 -0
  56. package/dist/rpg/EventRunner.d.ts.map +1 -1
  57. package/dist/rpg/EventRunner.js +6 -0
  58. package/dist/rpg/EventRunner.js.map +1 -1
  59. package/dist/two-d/render/FogLayer.d.ts +68 -0
  60. package/dist/two-d/render/FogLayer.d.ts.map +1 -0
  61. package/dist/two-d/render/FogLayer.js +83 -0
  62. package/dist/two-d/render/FogLayer.js.map +1 -0
  63. package/dist/two-d/render/LiquidLayer.d.ts +62 -0
  64. package/dist/two-d/render/LiquidLayer.d.ts.map +1 -0
  65. package/dist/two-d/render/LiquidLayer.js +102 -0
  66. package/dist/two-d/render/LiquidLayer.js.map +1 -0
  67. package/dist/two-d/render/RpgmAutotile.d.ts +5 -0
  68. package/dist/two-d/render/RpgmAutotile.d.ts.map +1 -1
  69. package/dist/two-d/render/RpgmAutotile.js +4 -3
  70. package/dist/two-d/render/RpgmAutotile.js.map +1 -1
  71. package/dist/two-d/render/TileMap.d.ts +14 -2
  72. package/dist/two-d/render/TileMap.d.ts.map +1 -1
  73. package/dist/two-d/render/TileMap.js +32 -2
  74. package/dist/two-d/render/TileMap.js.map +1 -1
  75. package/dist/two-d/render/index.d.ts +4 -0
  76. package/dist/two-d/render/index.d.ts.map +1 -1
  77. package/dist/two-d/render/index.js +2 -0
  78. package/dist/two-d/render/index.js.map +1 -1
  79. package/dist/two-d/ui/Label.d.ts.map +1 -1
  80. package/dist/two-d/ui/Label.js +11 -2
  81. package/dist/two-d/ui/Label.js.map +1 -1
  82. package/dist/two-d/ui/ListView.d.ts +24 -0
  83. package/dist/two-d/ui/ListView.d.ts.map +1 -1
  84. package/dist/two-d/ui/ListView.js +97 -4
  85. package/dist/two-d/ui/ListView.js.map +1 -1
  86. package/dist/two-d/ui/MessageLog.d.ts +62 -0
  87. package/dist/two-d/ui/MessageLog.d.ts.map +1 -0
  88. package/dist/two-d/ui/MessageLog.js +114 -0
  89. package/dist/two-d/ui/MessageLog.js.map +1 -0
  90. package/dist/two-d/ui/RadioGroup.d.ts +68 -0
  91. package/dist/two-d/ui/RadioGroup.d.ts.map +1 -0
  92. package/dist/two-d/ui/RadioGroup.js +177 -0
  93. package/dist/two-d/ui/RadioGroup.js.map +1 -0
  94. package/dist/two-d/ui/TextModel.d.ts +26 -1
  95. package/dist/two-d/ui/TextModel.d.ts.map +1 -1
  96. package/dist/two-d/ui/TextModel.js +56 -7
  97. package/dist/two-d/ui/TextModel.js.map +1 -1
  98. package/dist/two-d/ui/TextSharpness.d.ts +33 -0
  99. package/dist/two-d/ui/TextSharpness.d.ts.map +1 -0
  100. package/dist/two-d/ui/TextSharpness.js +56 -0
  101. package/dist/two-d/ui/TextSharpness.js.map +1 -0
  102. package/dist/two-d/ui/index.d.ts +5 -0
  103. package/dist/two-d/ui/index.d.ts.map +1 -1
  104. package/dist/two-d/ui/index.js +3 -0
  105. package/dist/two-d/ui/index.js.map +1 -1
  106. package/dist/version.d.ts +1 -1
  107. package/dist/version.js +1 -1
  108. package/package.json +14 -2
  109. package/sbom.cdx.json +6 -6
  110. package/tools/build-tablebases.d.mts +22 -0
  111. package/tools/build-tablebases.mjs +549 -0
  112. package/tools/compile-openings.d.mts +20 -0
  113. package/tools/compile-openings.mjs +130 -0
  114. package/tools/play-uci.d.mts +26 -0
  115. package/tools/play-uci.mjs +194 -0
@@ -19,7 +19,9 @@
19
19
  */
20
20
  export class TextModel {
21
21
  constructor(options = {}) {
22
- this.text = options.value ?? '';
22
+ this.goalColumn = null;
23
+ this.multiline = options.multiline ?? false;
24
+ this.text = this.limit(this.shape(options.value ?? ''));
23
25
  this.maxLength = options.maxLength;
24
26
  this.mask = options.mask ?? false;
25
27
  this.maskCharacter = options.maskCharacter ?? '\u2022';
@@ -29,9 +31,17 @@ export class TextModel {
29
31
  get value() {
30
32
  return this.text;
31
33
  }
32
- /** what to draw for a password field: every character replaced by the mask */
34
+ /**
35
+ * what to draw for a password field: every character replaced by the mask, except
36
+ * newlines, which stay newlines so a masked multiline value keeps its rows
37
+ */
33
38
  get maskedValue() {
34
- return this.mask ? this.maskCharacter.repeat(this.text.length) : this.text;
39
+ if (!this.mask)
40
+ return this.text;
41
+ return this.text
42
+ .split('')
43
+ .map((char) => (char === '\n' ? '\n' : this.maskCharacter))
44
+ .join('');
35
45
  }
36
46
  get length() {
37
47
  return this.text.length;
@@ -53,12 +63,14 @@ export class TextModel {
53
63
  }
54
64
  /** replaces everything; the caret goes to the end and a new string is never longer than `maxLength` */
55
65
  setValue(value) {
56
- this.text = this.limit(value);
66
+ this.text = this.limit(this.shape(value));
57
67
  this.caretIndex = this.text.length;
58
68
  this.anchor = this.caretIndex;
69
+ this.goalColumn = null;
59
70
  }
60
71
  setCaret(index, extend = false) {
61
72
  this.caretIndex = Math.max(0, Math.min(this.text.length, index));
73
+ this.goalColumn = null;
62
74
  if (!extend)
63
75
  this.anchor = this.caretIndex;
64
76
  }
@@ -103,6 +115,7 @@ export class TextModel {
103
115
  selectAll() {
104
116
  this.anchor = 0;
105
117
  this.caretIndex = this.text.length;
118
+ this.goalColumn = null;
106
119
  }
107
120
  clearSelection() {
108
121
  this.anchor = this.caretIndex;
@@ -112,13 +125,49 @@ export class TextModel {
112
125
  const start = this.selectionStart;
113
126
  const end = this.selectionEnd;
114
127
  const base = this.text.slice(0, start) + this.text.slice(end);
128
+ const shaped = this.shape(text);
115
129
  //a paste into a field with little room left stops at the cap rather than being rejected whole
116
- const inserted = this.maxLength !== undefined && base.length + text.length > this.maxLength
117
- ? text.slice(0, Math.max(0, this.maxLength - base.length))
118
- : text;
130
+ const inserted = this.maxLength !== undefined && base.length + shaped.length > this.maxLength
131
+ ? shaped.slice(0, Math.max(0, this.maxLength - base.length))
132
+ : shaped;
119
133
  this.text = this.text.slice(0, start) + inserted + this.text.slice(end);
120
134
  this.setCaret(start + inserted.length);
121
135
  }
136
+ /** newlines as the field keeps them: rows in a multiline field, stripped away otherwise */
137
+ shape(text) {
138
+ return text.replace(/\r\n|\r|\n/g, this.multiline ? '\n' : '');
139
+ }
140
+ /** rows in a multiline field; always 1 for a single-line one, even when empty */
141
+ get lineCount() {
142
+ if (!this.multiline)
143
+ return 1;
144
+ return this.text.split('\n').length;
145
+ }
146
+ /** the 0-based row the caret sits on */
147
+ get caretLine() {
148
+ return this.text.slice(0, this.caretIndex).split('\n').length - 1;
149
+ }
150
+ /** [start, end) of a row, the end stopping before its newline; out-of-range rows clamp */
151
+ lineRange(line) {
152
+ const clamped = Math.max(0, Math.min(this.lineCount - 1, line));
153
+ let start = 0;
154
+ for (let i = 0; i < clamped; i++)
155
+ start = this.text.indexOf('\n', start) + 1;
156
+ const end = this.text.indexOf('\n', start);
157
+ return [start, end === -1 ? this.text.length : end];
158
+ }
159
+ /**
160
+ * Up/down between rows, holding the column: the caret lands as far along the new
161
+ * row as it goes, the way a `<textarea>` moves. Rows here are newline-delimited,
162
+ * since only the renderer knows where a long row wraps on screen.
163
+ */
164
+ moveCaretLine(delta, extend = false) {
165
+ const [start] = this.lineRange(this.caretLine);
166
+ const column = this.goalColumn ?? this.caretIndex - start;
167
+ const [nextStart, nextEnd] = this.lineRange(this.caretLine + delta);
168
+ this.setCaret(nextStart + Math.min(column, nextEnd - nextStart), extend);
169
+ this.goalColumn = column;
170
+ }
122
171
  limit(value) {
123
172
  return this.maxLength !== undefined && value.length > this.maxLength ? value.slice(0, this.maxLength) : value;
124
173
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TextModel.js","sourceRoot":"","sources":["../../../src/two-d/ui/TextModel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TextModel.js","sourceRoot":"","sources":["../../../src/two-d/ui/TextModel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type Container } from 'pixi.js';
2
+ /**
3
+ * The zoom a window stack should run at: `base`, stepped down a whole number at a time
4
+ * until `contentHeight` (unzoomed) fits `viewportHeight`, and never below 1. A tall window
5
+ * on a short screen would otherwise be clipped at both ends.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { fitWindowZoom } from '@datamoc/mw_games/two-d/ui';
10
+ *
11
+ * console.log(fitWindowZoom(3, 300, 700)); // 2 - 300 x 3 is too tall, 300 x 2 fits
12
+ * ```
13
+ */
14
+ export declare function fitWindowZoom(base: number, contentHeight: number, viewportHeight: number): number;
15
+ /**
16
+ * Re-rasterises every `Text` under `root` at `devicePixelRatio` times its own on-screen
17
+ * scale, rounded to a whole number. Pixi draws text at the renderer's resolution and knows
18
+ * nothing of a parent's zoom, so text inside a scaled container is otherwise 1x text
19
+ * magnified, and blurry. Call it after a layout or zoom change, not every frame; a text
20
+ * already at the right resolution is left untouched.
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * import { Container } from 'pixi.js';
25
+ * import { sharpenText } from '@datamoc/mw_games/two-d/ui';
26
+ *
27
+ * const panel = new Container();
28
+ * panel.scale.set(3);
29
+ * sharpenText(panel, 2); // every Text inside now rasterises at 6x
30
+ * ```
31
+ */
32
+ export declare function sharpenText(root: Container, devicePixelRatio: number): void;
33
+ //# sourceMappingURL=TextSharpness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextSharpness.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/TextSharpness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAE/C;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAIjG;AASD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAS3E"}
@@ -0,0 +1,56 @@
1
+ import { Text } from 'pixi.js';
2
+ /**
3
+ * The zoom a window stack should run at: `base`, stepped down a whole number at a time
4
+ * until `contentHeight` (unzoomed) fits `viewportHeight`, and never below 1. A tall window
5
+ * on a short screen would otherwise be clipped at both ends.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { fitWindowZoom } from '@datamoc/mw_games/two-d/ui';
10
+ *
11
+ * console.log(fitWindowZoom(3, 300, 700)); // 2 - 300 x 3 is too tall, 300 x 2 fits
12
+ * ```
13
+ */
14
+ export function fitWindowZoom(base, contentHeight, viewportHeight) {
15
+ let zoom = Math.max(1, Math.floor(base));
16
+ while (zoom > 1 && contentHeight * zoom > viewportHeight)
17
+ zoom--;
18
+ return zoom;
19
+ }
20
+ /** the product of every scale from `node` up to the stage */
21
+ function cumulativeScale(node) {
22
+ let scale = 1;
23
+ for (let at = node; at; at = at.parent)
24
+ scale *= Math.abs(at.scale.x);
25
+ return scale;
26
+ }
27
+ /**
28
+ * Re-rasterises every `Text` under `root` at `devicePixelRatio` times its own on-screen
29
+ * scale, rounded to a whole number. Pixi draws text at the renderer's resolution and knows
30
+ * nothing of a parent's zoom, so text inside a scaled container is otherwise 1x text
31
+ * magnified, and blurry. Call it after a layout or zoom change, not every frame; a text
32
+ * already at the right resolution is left untouched.
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * import { Container } from 'pixi.js';
37
+ * import { sharpenText } from '@datamoc/mw_games/two-d/ui';
38
+ *
39
+ * const panel = new Container();
40
+ * panel.scale.set(3);
41
+ * sharpenText(panel, 2); // every Text inside now rasterises at 6x
42
+ * ```
43
+ */
44
+ export function sharpenText(root, devicePixelRatio) {
45
+ const walk = (node, scale) => {
46
+ if (node instanceof Text) {
47
+ const resolution = devicePixelRatio * Math.max(1, Math.round(scale));
48
+ if (node.resolution !== resolution)
49
+ node.resolution = resolution;
50
+ }
51
+ for (const child of node.children)
52
+ walk(child, scale * Math.abs(child.scale.x));
53
+ };
54
+ walk(root, cumulativeScale(root));
55
+ }
56
+ //# sourceMappingURL=TextSharpness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextSharpness.js","sourceRoot":"","sources":["../../../src/two-d/ui/TextSharpness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAkB,MAAM,SAAS,CAAC;AAE/C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,aAAqB,EAAE,cAAsB;IACxF,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,OAAO,IAAI,GAAG,CAAC,IAAI,aAAa,GAAG,IAAI,GAAG,cAAc;QAAE,IAAI,EAAE,CAAC;IACjE,OAAO,IAAI,CAAC;AACb,CAAC;AAED,6DAA6D;AAC7D,SAAS,eAAe,CAAC,IAAsB;IAC9C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM;QAAE,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtE,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,WAAW,CAAC,IAAe,EAAE,gBAAwB;IACpE,MAAM,IAAI,GAAG,CAAC,IAAe,EAAE,KAAa,EAAQ,EAAE;QACrD,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YACrE,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU;gBAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAClE,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,KAAkB,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAE,KAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7G,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,CAAC"}
@@ -2,6 +2,9 @@ export { theme, setTheme, defaultTheme, highContrastTheme, themeChanged } from '
2
2
  export type { Theme } from './theme.ts';
3
3
  export { Label } from './Label.ts';
4
4
  export type { LabelOptions } from './Label.ts';
5
+ export { MessageLog, linesToDrop } from './MessageLog.ts';
6
+ export type { MessageLevel, MessageLogOptions } from './MessageLog.ts';
7
+ export { fitWindowZoom, sharpenText } from './TextSharpness.ts';
5
8
  export { RichLabel } from './RichLabel.ts';
6
9
  export type { RichLabelOptions } from './RichLabel.ts';
7
10
  export { MarkupText } from './MarkupText.ts';
@@ -32,7 +35,9 @@ export type { VerticalLabelOptions, VerticalLayoutOptions, GlyphLayout } from '.
32
35
  export { Slider, sliderFraction, sliderValueAt } from './Slider.ts';
33
36
  export type { SliderOptions } from './Slider.ts';
34
37
  export { Checkbox } from './Checkbox.ts';
38
+ export { RadioGroup } from './RadioGroup.ts';
35
39
  export type { CheckboxOptions } from './Checkbox.ts';
40
+ export type { RadioGroupOptions, RadioOption } from './RadioGroup.ts';
36
41
  export { Spinner, spinValue } from './Spinner.ts';
37
42
  export type { SpinnerOptions } from './Spinner.ts';
38
43
  export { Dropdown } from './Dropdown.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  export { theme, setTheme, defaultTheme, highContrastTheme, themeChanged } from './theme.js';
2
2
  export { Label } from './Label.js';
3
+ export { MessageLog, linesToDrop } from './MessageLog.js';
4
+ export { fitWindowZoom, sharpenText } from './TextSharpness.js';
3
5
  export { RichLabel } from './RichLabel.js';
4
6
  export { MarkupText } from './MarkupText.js';
5
7
  export { parseMarkdown, stripMarkdown, sliceSpans } from './markdown.js';
@@ -16,6 +18,7 @@ export { MessageBox } from './MessageBox.js';
16
18
  export { VerticalLabel, layoutVertical } from './VerticalLabel.js';
17
19
  export { Slider, sliderFraction, sliderValueAt } from './Slider.js';
18
20
  export { Checkbox } from './Checkbox.js';
21
+ export { RadioGroup } from './RadioGroup.js';
19
22
  export { Spinner, spinValue } from './Spinner.js';
20
23
  export { Dropdown } from './Dropdown.js';
21
24
  export { TextModel } from './TextModel.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/two-d/ui/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/two-d/ui/index.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -9,5 +9,5 @@
9
9
  * this from `package.json` automatically, chosen because this project's own build already
10
10
  * has no step before `tsc`/`vite` that this would need to run ahead of.
11
11
  */
12
- export declare const version = "0.20.0";
12
+ export declare const version = "0.22.0";
13
13
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -9,5 +9,5 @@
9
9
  * this from `package.json` automatically, chosen because this project's own build already
10
10
  * has no step before `tsc`/`vite` that this would need to run ahead of.
11
11
  */
12
- export const version = '0.20.0';
12
+ export const version = '0.22.0';
13
13
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datamoc/mw_games",
3
- "version": "0.20.0",
3
+ "version": "0.22.0",
4
4
  "description": "A local-file game framework: renderer-free game logic, drawn through PixiJS in 2D or Babylon.js in 3D, with mobile and desktop packaging.",
5
5
  "license": "MPL-2.0",
6
6
  "repository": {
@@ -40,10 +40,13 @@
40
40
  "mwg-i18n": "tools/i18n-edit.mjs",
41
41
  "mwg-lockstep-server": "tools/multiplayer-server.mjs",
42
42
  "mwg-mwl": "tools/mwl.mjs",
43
+ "mwg-openings": "tools/compile-openings.mjs",
43
44
  "mwg-placeholder-assets": "tools/make-example-assets.mjs",
44
45
  "mwg-sbom": "tools/sbom.mjs",
45
46
  "mwg-size": "tools/bundle-size.mjs",
46
- "mwg-smoke": "tools/browser-smoke.mjs"
47
+ "mwg-smoke": "tools/browser-smoke.mjs",
48
+ "mwg-tablebases": "tools/build-tablebases.mjs",
49
+ "mwg-uci": "tools/play-uci.mjs"
47
50
  },
48
51
  "publishConfig": {
49
52
  "access": "public"
@@ -58,6 +61,12 @@
58
61
  "tools/extract-html.d.mts",
59
62
  "tools/compress-dist.mjs",
60
63
  "tools/compress-dist.d.mts",
64
+ "tools/compile-openings.mjs",
65
+ "tools/compile-openings.d.mts",
66
+ "tools/build-tablebases.mjs",
67
+ "tools/build-tablebases.d.mts",
68
+ "tools/play-uci.mjs",
69
+ "tools/play-uci.d.mts",
61
70
  "tools/classic-html.mjs",
62
71
  "tools/classic-html.d.mts",
63
72
  "tools/sbom.mjs",
@@ -188,6 +197,9 @@
188
197
  "./tools/bundle-size": "./tools/bundle-size.mjs",
189
198
  "./tools/classic-html": "./tools/classic-html.mjs",
190
199
  "./tools/compile-resources": "./tools/compile-resources.mjs",
200
+ "./tools/compile-openings": "./tools/compile-openings.mjs",
201
+ "./tools/build-tablebases": "./tools/build-tablebases.mjs",
202
+ "./tools/play-uci": "./tools/play-uci.mjs",
191
203
  "./tools/compress-dist": "./tools/compress-dist.mjs",
192
204
  "./tools/csp": "./tools/csp.mjs",
193
205
  "./tools/emit-page": "./tools/emit-page.mjs",
package/sbom.cdx.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "bomFormat": "CycloneDX",
3
3
  "specVersion": "1.6",
4
- "serialNumber": "urn:uuid:224ae83a-9a61-53bd-ab61-d8f83739153f",
4
+ "serialNumber": "urn:uuid:c469a256-ecb3-5c57-af21-4a4fa43cfef7",
5
5
  "version": 1,
6
6
  "metadata": {
7
7
  "tools": {
@@ -10,16 +10,16 @@
10
10
  "type": "application",
11
11
  "group": "datamoc",
12
12
  "name": "tools/sbom.mjs",
13
- "version": "0.20.0"
13
+ "version": "0.22.0"
14
14
  }
15
15
  ]
16
16
  },
17
17
  "component": {
18
18
  "type": "library",
19
- "bom-ref": "pkg:npm/%40datamoc/mw_games@0.20.0",
19
+ "bom-ref": "pkg:npm/%40datamoc/mw_games@0.22.0",
20
20
  "name": "@datamoc/mw_games",
21
- "version": "0.20.0",
22
- "purl": "pkg:npm/%40datamoc/mw_games@0.20.0",
21
+ "version": "0.22.0",
22
+ "purl": "pkg:npm/%40datamoc/mw_games@0.22.0",
23
23
  "description": "A local-file game framework: renderer-free game logic, drawn through PixiJS in 2D or Babylon.js in 3D, with mobile and desktop packaging.",
24
24
  "licenses": [
25
25
  {
@@ -4474,7 +4474,7 @@
4474
4474
  ]
4475
4475
  },
4476
4476
  {
4477
- "ref": "pkg:npm/%40datamoc/mw_games@0.20.0",
4477
+ "ref": "pkg:npm/%40datamoc/mw_games@0.22.0",
4478
4478
  "dependsOn": [
4479
4479
  "pkg:npm/%40babylonjs/core@9.27.1",
4480
4480
  "pkg:npm/%40babylonjs/loaders@9.27.1",
@@ -0,0 +1,22 @@
1
+ export interface TablebaseSpec {
2
+ white: Array<'queen' | 'rook' | 'bishop' | 'knight'>;
3
+ }
4
+
5
+ export interface TablebaseSolution {
6
+ wdl: number[];
7
+ dtm: number[];
8
+ positions: number;
9
+ }
10
+
11
+ /**
12
+ * Solves one white-extras-against-lone-king ending by retrograde analysis.
13
+ * Self-contained for `threads.spawn`: everything it touches is nested inside.
14
+ * `lower` carries the smaller tables captures convert into, null for 3-piece.
15
+ */
16
+ export function tablebaseTask(
17
+ spec: TablebaseSpec,
18
+ lower: Record<string, { wdl: number[]; dtm: number[] }> | null,
19
+ ): TablebaseSolution;
20
+
21
+ /** `KQBK` from an ending id's letters, throwing on anything unshaped. */
22
+ export function specOf(id: string): TablebaseSpec;