@datamoc/mw_games 0.11.0 → 0.13.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 (63) hide show
  1. package/CHANGELOG.md +84 -0
  2. package/dist/audio/Playable.d.ts +2 -0
  3. package/dist/audio/Playable.d.ts.map +1 -1
  4. package/dist/audio/Playable.js.map +1 -1
  5. package/dist/audio/Sound.d.ts +7 -1
  6. package/dist/audio/Sound.d.ts.map +1 -1
  7. package/dist/audio/Sound.js +8 -1
  8. package/dist/audio/Sound.js.map +1 -1
  9. package/dist/core/DialogueText.d.ts +47 -0
  10. package/dist/core/DialogueText.d.ts.map +1 -0
  11. package/dist/core/DialogueText.js +43 -0
  12. package/dist/core/DialogueText.js.map +1 -0
  13. package/dist/core/Twee.d.ts +67 -0
  14. package/dist/core/Twee.d.ts.map +1 -0
  15. package/dist/core/Twee.js +140 -0
  16. package/dist/core/Twee.js.map +1 -0
  17. package/dist/core/index.d.ts +4 -0
  18. package/dist/core/index.d.ts.map +1 -1
  19. package/dist/core/index.js +2 -0
  20. package/dist/core/index.js.map +1 -1
  21. package/dist/mw_games.global.js +116 -115
  22. package/dist/rpg/EventRunner.d.ts +24 -0
  23. package/dist/rpg/EventRunner.d.ts.map +1 -1
  24. package/dist/rpg/EventRunner.js +56 -15
  25. package/dist/rpg/EventRunner.js.map +1 -1
  26. package/dist/rpg/GridMover.d.ts +6 -0
  27. package/dist/rpg/GridMover.d.ts.map +1 -1
  28. package/dist/rpg/GridMover.js +17 -0
  29. package/dist/rpg/GridMover.js.map +1 -1
  30. package/dist/rpg/MoveRoute.d.ts +87 -0
  31. package/dist/rpg/MoveRoute.d.ts.map +1 -0
  32. package/dist/rpg/MoveRoute.js +110 -0
  33. package/dist/rpg/MoveRoute.js.map +1 -0
  34. package/dist/rpg/dialogue-text.d.ts +81 -0
  35. package/dist/rpg/dialogue-text.d.ts.map +1 -0
  36. package/dist/rpg/dialogue-text.js +88 -0
  37. package/dist/rpg/dialogue-text.js.map +1 -0
  38. package/dist/rpg/index.d.ts +6 -1
  39. package/dist/rpg/index.d.ts.map +1 -1
  40. package/dist/rpg/index.js +3 -0
  41. package/dist/rpg/index.js.map +1 -1
  42. package/dist/rpg/twee-events.d.ts +48 -0
  43. package/dist/rpg/twee-events.d.ts.map +1 -0
  44. package/dist/rpg/twee-events.js +35 -0
  45. package/dist/rpg/twee-events.js.map +1 -0
  46. package/dist/two-d/stage/dialogue-text.d.ts +81 -0
  47. package/dist/two-d/stage/dialogue-text.d.ts.map +1 -0
  48. package/dist/two-d/stage/dialogue-text.js +95 -0
  49. package/dist/two-d/stage/dialogue-text.js.map +1 -0
  50. package/dist/two-d/stage/index.d.ts +1 -0
  51. package/dist/two-d/stage/index.d.ts.map +1 -1
  52. package/dist/two-d/stage/index.js +1 -0
  53. package/dist/two-d/stage/index.js.map +1 -1
  54. package/dist/two-d/stage/twee.d.ts +7 -25
  55. package/dist/two-d/stage/twee.d.ts.map +1 -1
  56. package/dist/two-d/stage/twee.js +10 -162
  57. package/dist/two-d/stage/twee.js.map +1 -1
  58. package/dist/two-d/ui/EventDialogue.d.ts.map +1 -1
  59. package/dist/two-d/ui/EventDialogue.js +7 -1
  60. package/dist/two-d/ui/EventDialogue.js.map +1 -1
  61. package/dist/version.d.ts +1 -1
  62. package/dist/version.js +1 -1
  63. package/package.json +2 -2
@@ -1,31 +1,14 @@
1
+ import { parseTwee } from '../../core/Twee.js';
1
2
  /**
2
3
  * Reads a `.twee` file into a `StoryScript`.
3
4
  *
4
- * Twee was chosen over Twine's `<tw-passagedata>` HTML export on purpose: it is
5
- * plain text, so this stays a pure string parser with no DOM - testable under
6
- * `node --test` and loadable through `mwg/assets` like any other text asset.
7
- *
8
- * Only structure is imported, and that answers the format question the roadmap
9
- * left open: each passage's text lines become `say` commands and its
10
- * `[[links]]` become one closing `ask` whose choices jump (`[[text]]`,
11
- * `[[text->target]]` and `[[target<-text]]`) - the last text line doubles as
12
- * the question, since a choice box needs a prompt and repeating it works.
13
- * No story-format macro language
14
- * (Harlowe, SugarCube, Chapbook) is interpreted - body text reaches the stage
15
- * untouched, and a link carrying a setter throws instead of silently dropping
16
- * the behaviour the setter described.
17
- *
18
- * ```twee
19
- * :: Start
20
- * You stand at a crossroads.
21
- *
22
- * [[Take the left path->Left]]
23
- * [[Take the right path->Right]]
24
- *
25
- * :: Left
26
- * The path ends at a wall.
27
- * [[Go back->Start]]
28
- * ```
5
+ * The actual parsing (passages, `[[links]]`, `StoryData`/`StoryTitle`) lives once in
6
+ * `core.parseTwee` - `rpg.importTwee` is the same wrapper around the same engine, targeting
7
+ * `EventStoryScript` instead, declared separately for the same reason `EventChoice` already
8
+ * duplicates `two-d/ui`'s `Choice`: a text-only RPG should not have to depend on `two-d` just
9
+ * to import a branching Twee story, and a Pixi-based visual novel that never touches map
10
+ * events should not have to depend on `rpg` either. `core.parseTwee`'s own doc comment covers
11
+ * the notation itself (passages, links, what a macro-carrying link does).
29
12
  *
30
13
  * @example
31
14
  * ```ts
@@ -39,142 +22,7 @@
39
22
  * ```
40
23
  */
41
24
  export function importTwee(source) {
42
- const passages = splitPassages(source);
43
- if (passages.length === 0)
44
- throw new Error('this twee source has no passages - passages start with ":: Name"');
45
- const story = {};
46
- let title;
47
- let start;
48
- for (const passage of passages) {
49
- if (passage.name === 'StoryTitle') {
50
- title = passage.body.trim() || undefined;
51
- continue;
52
- }
53
- if (passage.name === 'StoryData') {
54
- start = readStart(passage.body);
55
- continue;
56
- }
57
- if (Object.prototype.hasOwnProperty.call(story, passage.name)) {
58
- throw new Error(`this twee source defines "${passage.name}" twice`);
59
- }
60
- story[passage.name] = passageCommands(passage.name, passage.body);
61
- }
62
- const names = Object.keys(story);
63
- if (names.length === 0)
64
- throw new Error('this twee source has no story passages, only StoryTitle/StoryData');
65
- if (start !== undefined && !Object.prototype.hasOwnProperty.call(story, start)) {
66
- throw new Error(`StoryData starts at "${start}", which is not a passage in this file`);
67
- }
68
- for (const [name, commands] of Object.entries(story)) {
69
- for (const command of commands) {
70
- if ('ask' in command) {
71
- for (const choice of command.choices) {
72
- if (choice.goto !== undefined && !Object.prototype.hasOwnProperty.call(story, choice.goto)) {
73
- throw new Error(`passage "${name}" links to "${choice.goto}", which is not a passage in this file`);
74
- }
75
- }
76
- }
77
- }
78
- }
79
- return { story, start: start ?? names[0], title };
80
- }
81
- /** cuts the source at every line starting with `::`, parsing headers into names */
82
- function splitPassages(source) {
83
- const out = [];
84
- let name = null;
85
- let body = [];
86
- const flush = () => {
87
- if (name !== null)
88
- out.push({ name, body: body.join('\n') });
89
- };
90
- for (const line of source.split('\n')) {
91
- if (line.startsWith('::')) {
92
- flush();
93
- name = parseHeader(line);
94
- body = [];
95
- }
96
- else if (name !== null) {
97
- body.push(line);
98
- }
99
- }
100
- flush();
101
- return out;
102
- }
103
- /** `:: Name [tags] {"meta": true}` - only the name survives; tags and position are editor concerns */
104
- function parseHeader(line) {
105
- const rest = line.slice(2).trim();
106
- const tagAt = rest.search(/[[{]/);
107
- const name = (tagAt === -1 ? rest : rest.slice(0, tagAt)).trim();
108
- if (!name)
109
- throw new Error(`a twee passage header needs a name, got "${line}"`);
110
- return name;
111
- }
112
- /** StoryData is JSON; only `start` matters to the runner, the rest is player furniture */
113
- function readStart(body) {
114
- let data;
115
- try {
116
- data = JSON.parse(body.trim());
117
- }
118
- catch {
119
- throw new Error('StoryData must be JSON - check the braces');
120
- }
121
- if (typeof data !== 'object' || data === null || Array.isArray(data)) {
122
- throw new Error('StoryData must be a JSON object');
123
- }
124
- const start = data.start;
125
- if (start !== undefined && typeof start !== 'string') {
126
- throw new Error('StoryData "start" must be a passage name');
127
- }
128
- return start;
129
- }
130
- /** text lines speak in order; the last one doubles as the prompt when links follow it */
131
- function passageCommands(passage, body) {
132
- const lines = [];
133
- const choices = [];
134
- for (const line of body.split('\n')) {
135
- const text = extractLinks(line, choices, passage).replace(/\s+/g, ' ').trim();
136
- if (text !== '')
137
- lines.push(text);
138
- }
139
- if (choices.length === 0)
140
- return lines.map((say) => ({ say }));
141
- const prompt = lines.pop() ?? '';
142
- return [...lines.map((say) => ({ say })), { ask: prompt, choices }];
143
- }
144
- /**
145
- * Pulls `[[links]]` out of a line, leaving the surrounding text behind.
146
- * Returns the line with the links removed.
147
- */
148
- function extractLinks(line, choices, passage) {
149
- let out = '';
150
- let rest = line;
151
- for (;;) {
152
- const open = rest.indexOf('[[');
153
- if (open === -1)
154
- return out + rest;
155
- const close = rest.indexOf(']]', open);
156
- if (close === -1) {
157
- throw new Error(`passage "${passage}" has a "[[" with no closing "]]" in "${line.trim()}"`);
158
- }
159
- out += rest.slice(0, open);
160
- choices.push(parseLink(rest.slice(open + 2, close), passage));
161
- rest = rest.slice(close + 2);
162
- }
163
- }
164
- function parseLink(inner, passage) {
165
- if (inner.includes('[') || inner.includes(']')) {
166
- throw new Error(`passage "${passage}" links with a setter ("${inner.trim()}") - ` +
167
- 'story-format macros are not imported, so the link is refused rather than half-read');
168
- }
169
- const forward = inner.indexOf('->');
170
- if (forward !== -1) {
171
- return { text: inner.slice(0, forward).trim(), goto: inner.slice(forward + 2).trim() };
172
- }
173
- const backward = inner.indexOf('<-');
174
- if (backward !== -1) {
175
- return { text: inner.slice(backward + 2).trim(), goto: inner.slice(0, backward).trim() };
176
- }
177
- const target = inner.trim();
178
- return { text: target, goto: target };
25
+ const { story, start, title } = parseTwee(source);
26
+ return title === undefined ? { story, start } : { story, start, title };
179
27
  }
180
28
  //# sourceMappingURL=twee.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"twee.js","sourceRoot":"","sources":["../../../src/two-d/stage/twee.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"twee.js","sourceRoot":"","sources":["../../../src/two-d/stage/twee.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAc/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc;IACxC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACzE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"EventDialogue.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/EventDialogue.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,WAAW,0BAA0B;IAC1C,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;CACrC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,0BAA+B,GAAG,iBAAiB,CAerH"}
1
+ {"version":3,"file":"EventDialogue.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/EventDialogue.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,MAAM,WAAW,0BAA0B;IAC1C,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;CACrC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,0BAA+B,GAAG,iBAAiB,CAqBrH"}
@@ -17,7 +17,13 @@ export function messageBoxPresenter(windows, options = {}) {
17
17
  width: options.width ?? 480,
18
18
  height: options.height ?? 120,
19
19
  speed: options.speed ?? 45,
20
- pages: [{ text: request.text, speaker: request.speaker }],
20
+ pages: [
21
+ {
22
+ text: request.text,
23
+ speaker: request.speaker,
24
+ portrait: request.portrait,
25
+ },
26
+ ],
21
27
  choices: request.choices,
22
28
  anchor: options.anchor ?? 'bottom',
23
29
  onDone: (chosen) => resolve(chosen),
@@ -1 +1 @@
1
- {"version":3,"file":"EventDialogue.js","sourceRoot":"","sources":["../../../src/two-d/ui/EventDialogue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAY7C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAoB,EAAE,OAAO,GAA+B,EAAE;IACjG,OAAO,CAAC,OAAO,EAAE,EAAE,CAClB,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACvB,OAAO,CAAC,IAAI,CACX,IAAI,UAAU,CAAC;YACd,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG;YAC3B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,GAAG;YAC7B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;YAC1B,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;YACzD,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,QAAQ;YAClC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;SACnC,CAAC,CACF,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"EventDialogue.js","sourceRoot":"","sources":["../../../src/two-d/ui/EventDialogue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAa7C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAoB,EAAE,OAAO,GAA+B,EAAE;IACjG,OAAO,CAAC,OAAO,EAAE,EAAE,CAClB,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACvB,OAAO,CAAC,IAAI,CACX,IAAI,UAAU,CAAC;YACd,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG;YAC3B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,GAAG;YAC7B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;YAC1B,KAAK,EAAE;gBACN;oBACC,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,QAAQ,EAAE,OAAO,CAAC,QAAiC;iBACnD;aACD;YACD,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,QAAQ;YAClC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;SACnC,CAAC,CACF,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
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.11.0";
12
+ export declare const version = "0.13.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.11.0';
12
+ export const version = '0.13.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.11.0",
3
+ "version": "0.13.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": {
@@ -247,7 +247,7 @@
247
247
  "webpage:examples": "node tools/build-webpage-examples.mjs",
248
248
  "webpage:docs": "node tools/build-webpage-docs.mjs",
249
249
  "webpage:diagrams": "node tools/make-example-diagrams.mjs && node tools/make-architecture-diagrams.mjs",
250
- "mobile:build": "npm run example:tower-defense:build",
250
+ "mobile:build": "vite build --config examples/tower-defense/vite.config.ts && node tools/emit-page.mjs examples/tower-defense --no-compress",
251
251
  "cap:cli": "node --require ./tools/capacitor-node-workaround.cjs ./node_modules/@capacitor/cli/bin/capacitor",
252
252
  "cap:add:android": "npm run mobile:build && npm run cap:cli -- add android",
253
253
  "cap:add:ios": "npm run mobile:build && npm run cap:cli -- add ios",