@datamoc/mw_games 0.7.1 → 0.7.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.
Files changed (131) hide show
  1. package/CHANGELOG.md +977 -0
  2. package/README.md +27 -2
  3. package/dist/actors/Affix.d.ts +7 -1
  4. package/dist/actors/Affix.d.ts.map +1 -1
  5. package/dist/actors/Affix.js +4 -2
  6. package/dist/actors/Affix.js.map +1 -1
  7. package/dist/actors/StatBlock.d.ts +20 -0
  8. package/dist/actors/StatBlock.d.ts.map +1 -1
  9. package/dist/actors/StatBlock.js +14 -3
  10. package/dist/actors/StatBlock.js.map +1 -1
  11. package/dist/actors/index.d.ts +2 -2
  12. package/dist/actors/index.d.ts.map +1 -1
  13. package/dist/actors/index.js +1 -1
  14. package/dist/actors/index.js.map +1 -1
  15. package/dist/ai/index.d.ts +118 -0
  16. package/dist/ai/index.d.ts.map +1 -0
  17. package/dist/ai/index.js +203 -0
  18. package/dist/ai/index.js.map +1 -0
  19. package/dist/ai/lua.d.ts +47 -0
  20. package/dist/ai/lua.d.ts.map +1 -0
  21. package/dist/ai/lua.js +195 -0
  22. package/dist/ai/lua.js.map +1 -0
  23. package/dist/ai/search.d.ts +59 -0
  24. package/dist/ai/search.d.ts.map +1 -0
  25. package/dist/ai/search.js +100 -0
  26. package/dist/ai/search.js.map +1 -0
  27. package/dist/board/Engine.d.ts +14 -0
  28. package/dist/board/Engine.d.ts.map +1 -1
  29. package/dist/board/Engine.js +33 -45
  30. package/dist/board/Engine.js.map +1 -1
  31. package/dist/board/index.d.ts +1 -1
  32. package/dist/board/index.d.ts.map +1 -1
  33. package/dist/board/index.js +1 -1
  34. package/dist/board/index.js.map +1 -1
  35. package/dist/core/Csv.d.ts +10 -0
  36. package/dist/core/Csv.d.ts.map +1 -1
  37. package/dist/core/Csv.js +34 -3
  38. package/dist/core/Csv.js.map +1 -1
  39. package/dist/core/Entity.d.ts +2 -2
  40. package/dist/core/Entity.d.ts.map +1 -1
  41. package/dist/core/Entity.js +18 -4
  42. package/dist/core/Entity.js.map +1 -1
  43. package/dist/index.d.ts +1 -0
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +1 -0
  46. package/dist/index.js.map +1 -1
  47. package/dist/mw_games.global.js +96 -96
  48. package/dist/mwl/actors.d.ts +3 -1
  49. package/dist/mwl/actors.d.ts.map +1 -1
  50. package/dist/mwl/actors.js +5 -0
  51. package/dist/mwl/actors.js.map +1 -1
  52. package/dist/mwl/catalog.d.ts.map +1 -1
  53. package/dist/mwl/catalog.js +2 -10
  54. package/dist/mwl/catalog.js.map +1 -1
  55. package/dist/mwl/compiler.d.ts +14 -0
  56. package/dist/mwl/compiler.d.ts.map +1 -1
  57. package/dist/mwl/compiler.js +23 -0
  58. package/dist/mwl/compiler.js.map +1 -1
  59. package/dist/mwl/conditions.d.ts +9 -0
  60. package/dist/mwl/conditions.d.ts.map +1 -0
  61. package/dist/mwl/conditions.js +162 -0
  62. package/dist/mwl/conditions.js.map +1 -0
  63. package/dist/mwl/content.d.ts +25 -0
  64. package/dist/mwl/content.d.ts.map +1 -1
  65. package/dist/mwl/content.js +46 -34
  66. package/dist/mwl/content.js.map +1 -1
  67. package/dist/mwl/fengari.d.ts +8 -0
  68. package/dist/mwl/fengari.d.ts.map +1 -0
  69. package/dist/mwl/fengari.js +136 -0
  70. package/dist/mwl/fengari.js.map +1 -0
  71. package/dist/mwl/hooks.d.ts +1 -1
  72. package/dist/mwl/index.d.ts +16 -7
  73. package/dist/mwl/index.d.ts.map +1 -1
  74. package/dist/mwl/index.js +7 -3
  75. package/dist/mwl/index.js.map +1 -1
  76. package/dist/mwl/readers.d.ts +18 -0
  77. package/dist/mwl/readers.d.ts.map +1 -0
  78. package/dist/mwl/readers.js +58 -0
  79. package/dist/mwl/readers.js.map +1 -0
  80. package/dist/mwl/report.d.ts +9 -0
  81. package/dist/mwl/report.d.ts.map +1 -0
  82. package/dist/mwl/report.js +36 -0
  83. package/dist/mwl/report.js.map +1 -0
  84. package/dist/mwl/runtime.d.ts +37 -1
  85. package/dist/mwl/runtime.d.ts.map +1 -1
  86. package/dist/mwl/runtime.js +170 -19
  87. package/dist/mwl/runtime.js.map +1 -1
  88. package/dist/mwl/schema.d.ts +13 -1
  89. package/dist/mwl/schema.d.ts.map +1 -1
  90. package/dist/mwl/schema.js +195 -8
  91. package/dist/mwl/schema.js.map +1 -1
  92. package/dist/mwl/scripts.d.ts +15 -0
  93. package/dist/mwl/scripts.d.ts.map +1 -0
  94. package/dist/mwl/scripts.js +23 -0
  95. package/dist/mwl/scripts.js.map +1 -0
  96. package/dist/mwl/utils.d.ts +8 -0
  97. package/dist/mwl/utils.d.ts.map +1 -0
  98. package/dist/mwl/utils.js +37 -0
  99. package/dist/mwl/utils.js.map +1 -0
  100. package/dist/roguelike/MultiTurnBeam.d.ts +70 -0
  101. package/dist/roguelike/MultiTurnBeam.d.ts.map +1 -0
  102. package/dist/roguelike/MultiTurnBeam.js +117 -0
  103. package/dist/roguelike/MultiTurnBeam.js.map +1 -0
  104. package/dist/roguelike/Targeting.d.ts +21 -0
  105. package/dist/roguelike/Targeting.d.ts.map +1 -1
  106. package/dist/roguelike/Targeting.js +50 -2
  107. package/dist/roguelike/Targeting.js.map +1 -1
  108. package/dist/roguelike/index.d.ts +3 -1
  109. package/dist/roguelike/index.d.ts.map +1 -1
  110. package/dist/roguelike/index.js +2 -1
  111. package/dist/roguelike/index.js.map +1 -1
  112. package/dist/rpg/automap.d.ts +4 -0
  113. package/dist/rpg/automap.d.ts.map +1 -1
  114. package/dist/rpg/automap.js +5 -2
  115. package/dist/rpg/automap.js.map +1 -1
  116. package/dist/two-d/render/Minimap.d.ts +16 -0
  117. package/dist/two-d/render/Minimap.d.ts.map +1 -1
  118. package/dist/two-d/render/Minimap.js +40 -7
  119. package/dist/two-d/render/Minimap.js.map +1 -1
  120. package/dist/two-d/render/Types2D.d.ts +19 -4
  121. package/dist/two-d/render/Types2D.d.ts.map +1 -1
  122. package/dist/two-d/render/Types2D.js +25 -0
  123. package/dist/two-d/render/Types2D.js.map +1 -1
  124. package/dist/two-d/render/index.d.ts +3 -3
  125. package/dist/two-d/render/index.d.ts.map +1 -1
  126. package/dist/two-d/render/index.js +2 -2
  127. package/dist/two-d/render/index.js.map +1 -1
  128. package/dist/version.d.ts +1 -1
  129. package/dist/version.js +1 -1
  130. package/package.json +21 -3
  131. package/tools/mwl.mjs +32 -6
@@ -1,3 +1,25 @@
1
+ import { coerceCsvValue } from '../core/Csv.js';
2
+ /** Parse the compact `name:type|name:type` declaration used by MWL tables. */
3
+ export function parseTableColumns(value) {
4
+ const columns = [];
5
+ for (const part of value.split('|')) {
6
+ const separator = part.indexOf(':');
7
+ if (separator <= 0 || separator === part.length - 1)
8
+ throw new Error(`invalid table column "${part}"`);
9
+ const name = part.slice(0, separator).trim();
10
+ const type = part.slice(separator + 1).trim();
11
+ if (!/^[A-Za-z_][\w.-]*$/.test(name))
12
+ throw new Error(`invalid table column name "${name}"`);
13
+ if (!['string', 'number', 'boolean', 'list', 'map'].includes(type))
14
+ throw new Error(`invalid table column type "${type}"`);
15
+ if (columns.some((column) => column.name === name))
16
+ throw new Error(`duplicate table column "${name}"`);
17
+ columns.push({ name, type });
18
+ }
19
+ if (columns.length === 0)
20
+ throw new Error('table must declare at least one column');
21
+ return columns;
22
+ }
1
23
  export const schema01 = {
2
24
  game: {
3
25
  attributes: {
@@ -9,6 +31,7 @@ export const schema01 = {
9
31
  save_slot: 'string',
10
32
  },
11
33
  children: [
34
+ 'campaign',
12
35
  'terrain_type',
13
36
  'movetype',
14
37
  'unit_type',
@@ -31,8 +54,25 @@ export const schema01 = {
31
54
  'battle_move',
32
55
  'type_matchup',
33
56
  'evolution',
57
+ 'table',
34
58
  ],
35
59
  },
60
+ campaign: {
61
+ attributes: {
62
+ id: 'id',
63
+ name: 'string',
64
+ title: 'string',
65
+ description: 'string',
66
+ start_scene: 'id',
67
+ },
68
+ // Scenario and campaign-extension tags belong to the owning game.
69
+ openChildren: true,
70
+ },
71
+ table: {
72
+ attributes: { id: 'id', columns: 'string', list_delimiter: 'string', map_delimiter: 'string' },
73
+ children: ['row'],
74
+ },
75
+ row: { openAttributes: 'string' },
36
76
  terrain_type: {
37
77
  attributes: {
38
78
  id: 'id',
@@ -127,8 +167,8 @@ export const schema01 = {
127
167
  trigger: 'id',
128
168
  // `on=moveto` filters. All optional: `[event] on=moveto unit=scout` fires
129
169
  // for any hex that unit reaches, `x`/`y` narrow it to one hex.
130
- x: 'integer',
131
- y: 'integer',
170
+ x: 'coordinate',
171
+ y: 'coordinate',
132
172
  side: 'integer',
133
173
  unit: 'string',
134
174
  // Defaults to true for moveto (a story beat fires once) and false for
@@ -195,6 +235,7 @@ export const schema01 = {
195
235
  attributes: {
196
236
  side: 'integer',
197
237
  type: 'string',
238
+ unit: 'string',
198
239
  x: 'integer',
199
240
  y: 'integer',
200
241
  level: 'integer',
@@ -261,8 +302,11 @@ export const schema01 = {
261
302
  lose: { attributes: { side: 'integer' } },
262
303
  say: { attributes: { speaker: 'id', text: 'string' } },
263
304
  dialogue: { attributes: { id: 'id', ref: 'id' }, children: ['say', 'choice', 'branch', 'message'] },
264
- choice: { attributes: { text: 'string', event: 'id' }, children: ['branch'] },
265
- branch: { attributes: { text: 'string' }, children: ['message', 'say', 'command'] },
305
+ choice: { attributes: { text: 'string', event: 'id', variable: 'id', equals: 'string' }, children: ['branch'] },
306
+ branch: {
307
+ attributes: { text: 'string' },
308
+ children: ['message', 'say', 'command', 'set_variable', 'move', 'attack', 'spawn', 'kill', 'gold', 'hook'],
309
+ },
266
310
  trait: { attributes: { id: 'id', name: 'string' }, children: ['effect'] },
267
311
  ability: { attributes: { id: 'id', name: 'string' }, children: ['effect'] },
268
312
  weapon_special: { attributes: { id: 'id', name: 'string' } },
@@ -298,7 +342,25 @@ export const schema01 = {
298
342
  status: { attributes: { id: 'id', name: 'string', duration: 'integer', tick: 'string', modifiers: 'string' } },
299
343
  loot: { attributes: { item: 'id', chance: 'number', quantity: 'integer', weight: 'number' } },
300
344
  turn_clock: { attributes: { id: 'id', tick: 'number', hunger: 'number' } },
301
- ai: { attributes: { id: 'id', strategy: 'id', target: 'id', difficulty: 'number' }, children: ['behavior'] },
345
+ ai: {
346
+ attributes: {
347
+ id: 'id',
348
+ strategy: 'id',
349
+ target: 'id',
350
+ difficulty: 'number',
351
+ scope: 'id',
352
+ provider: 'id',
353
+ algorithm: 'id',
354
+ depth: 'integer',
355
+ max_nodes: 'integer',
356
+ player: 'string',
357
+ moves: 'string',
358
+ apply: 'string',
359
+ terminal: 'string',
360
+ evaluate: 'string',
361
+ },
362
+ children: ['behavior'],
363
+ },
302
364
  behavior: { attributes: { id: 'id', when: 'string', action: 'string', hook: 'string' } },
303
365
  battle_move: { attributes: { id: 'id', type: 'id', target: 'id', power: 'number', cost: 'number' } },
304
366
  type_matchup: { attributes: { attacker: 'id', defender: 'id', multiplier: 'number' } },
@@ -321,9 +383,24 @@ export const schema01 = {
321
383
  };
322
384
  export function validate(nodes, schemas = schema01) {
323
385
  const diagnostics = [];
324
- const visit = (node) => {
386
+ const ids = new Map();
387
+ const collectIds = (node) => {
388
+ const id = node.attributes.id;
389
+ if (id)
390
+ ids.set(id, [...(ids.get(id) ?? []), node]);
391
+ node.children.forEach(collectIds);
392
+ };
393
+ nodes.forEach(collectIds);
394
+ const references = [];
395
+ const visit = (node, openUnknown = false) => {
325
396
  const definition = schemas[node.tag];
326
397
  if (!definition) {
398
+ if (openUnknown) {
399
+ // An open child is a game-owned attribute bag. Keep walking its subtree so
400
+ // nested effect/filter nodes can remain opaque without losing their locations.
401
+ node.children.forEach((child) => visit(child, true));
402
+ return;
403
+ }
327
404
  diagnostics.push({ code: 'MWL_UNKNOWN_TAG', message: `unknown tag ${node.tag}`, location: node.location });
328
405
  return;
329
406
  }
@@ -341,6 +418,26 @@ export function validate(nodes, schemas = schema01) {
341
418
  const value = node.attributes[name];
342
419
  if (value !== undefined && !validType(value, type))
343
420
  diagnostics.push({ code: 'MWL_VALUE', message: `${name} must be ${type}`, location: node.location });
421
+ if (value !== undefined && type === 'ref') {
422
+ const candidates = (ids.get(value) ?? []).filter((target) => {
423
+ const targetTag = definition.refTargets?.[name];
424
+ return !targetTag || targetTag === '*' || target.tag === targetTag;
425
+ });
426
+ if (candidates.length === 0)
427
+ diagnostics.push({
428
+ code: 'MWL_REF_MISSING',
429
+ message: `${name} references missing target ${value}`,
430
+ location: node.location,
431
+ });
432
+ else if (candidates.length > 1)
433
+ diagnostics.push({
434
+ code: 'MWL_REF_DUPLICATE',
435
+ message: `${name} references ambiguous target ${value}`,
436
+ location: node.location,
437
+ });
438
+ else if (definition.acyclicRefs?.includes(name))
439
+ references.push({ from: node, to: candidates[0], name });
440
+ }
344
441
  }
345
442
  if (definition.openAttributes) {
346
443
  for (const [name, value] of Object.entries(node.attributes)) {
@@ -359,12 +456,98 @@ export function validate(nodes, schemas = schema01) {
359
456
  message: `${child.tag} is not allowed inside ${node.tag}`,
360
457
  location: child.location,
361
458
  });
362
- visit(child);
459
+ visit(child, definition.openChildren === true);
363
460
  }
364
461
  };
365
- nodes.forEach(visit);
462
+ nodes.forEach((node) => visit(node));
463
+ validateTables(nodes, diagnostics);
464
+ const visiting = new Set();
465
+ const visited = new Set();
466
+ const walkReference = (node, trail) => {
467
+ if (visiting.has(node)) {
468
+ const repeated = trail.indexOf(node);
469
+ diagnostics.push({
470
+ code: 'MWL_REF_CYCLE',
471
+ message: `reference cycle through ${trail
472
+ .slice(repeated)
473
+ .map((entry) => entry.attributes.id ?? entry.tag)
474
+ .join(' -> ')}`,
475
+ location: node.location,
476
+ });
477
+ return;
478
+ }
479
+ if (visited.has(node))
480
+ return;
481
+ visiting.add(node);
482
+ for (const reference of references.filter((entry) => entry.from === node))
483
+ walkReference(reference.to, [...trail, node]);
484
+ visiting.delete(node);
485
+ visited.add(node);
486
+ };
487
+ for (const reference of references)
488
+ walkReference(reference.from, []);
366
489
  return diagnostics.sort((a, b) => a.location.line - b.location.line || a.location.column - b.location.column);
367
490
  }
491
+ function validateTables(nodes, diagnostics) {
492
+ const visit = (node) => {
493
+ if (node.tag === 'table') {
494
+ let columns;
495
+ try {
496
+ columns = parseTableColumns(node.attributes.columns ?? '');
497
+ }
498
+ catch (error) {
499
+ diagnostics.push({
500
+ code: 'MWL_TABLE',
501
+ message: String(error).replace(/^Error: /, ''),
502
+ location: node.location,
503
+ });
504
+ columns = [];
505
+ }
506
+ const declared = new Map(columns.map((column) => [column.name, column]));
507
+ for (const row of node.children.filter((child) => child.tag === 'row')) {
508
+ for (const name of Object.keys(row.attributes)) {
509
+ if (!declared.has(name))
510
+ diagnostics.push({
511
+ code: 'MWL_TABLE',
512
+ message: `unknown table column ${name}`,
513
+ location: row.location,
514
+ });
515
+ }
516
+ for (const column of columns) {
517
+ const value = row.attributes[column.name];
518
+ if (value === undefined) {
519
+ diagnostics.push({
520
+ code: 'MWL_TABLE',
521
+ message: `missing table column ${column.name}`,
522
+ location: row.location,
523
+ });
524
+ continue;
525
+ }
526
+ try {
527
+ coerceTableValue(value, column.type, column.name, node.attributes.list_delimiter, node.attributes.map_delimiter);
528
+ }
529
+ catch (error) {
530
+ diagnostics.push({
531
+ code: 'MWL_TABLE',
532
+ message: String(error).replace(/^Error: /, ''),
533
+ location: row.location,
534
+ });
535
+ }
536
+ }
537
+ }
538
+ }
539
+ node.children.forEach(visit);
540
+ };
541
+ nodes.forEach(visit);
542
+ }
543
+ export function coerceTableValue(raw, type, column, listDelimiter = ';', mapDelimiter = '=') {
544
+ return coerceCsvValue(raw, type, {
545
+ column,
546
+ listDelimiter,
547
+ mapDelimiter,
548
+ acceptYesNo: true,
549
+ });
550
+ }
368
551
  function validType(value, type) {
369
552
  if (type === 'number')
370
553
  return Number.isFinite(Number(value));
@@ -372,6 +555,10 @@ function validType(value, type) {
372
555
  return /^-?\d+$/.test(value);
373
556
  if (type === 'boolean')
374
557
  return value === 'true' || value === 'false' || value === 'yes' || value === 'no';
558
+ if (type === 'ref')
559
+ return /^[A-Za-z_][\w.-]*$/.test(value);
560
+ if (type === 'coordinate')
561
+ return /^-?\d+(?:\s*,\s*-?\d+|\s*-\s*-?\d+)*$/.test(value);
375
562
  if (type === 'id')
376
563
  return /^[A-Za-z_][\w.-]*$/.test(value);
377
564
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/mwl/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/mwl/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /** A deliberately small boundary for executable game content. */
2
+ export type ScriptValue = null | boolean | number | string | ScriptValue[] | {
3
+ readonly [key: string]: ScriptValue;
4
+ };
5
+ export type ScriptContext = Readonly<Record<string, ScriptValue>>;
6
+ export type ScriptEmit = (name: string, payload?: ScriptValue) => void;
7
+ export interface ScriptHost {
8
+ evaluate(source: string, context?: ScriptContext): ScriptValue;
9
+ execute(source: string, context?: ScriptContext, emit?: ScriptEmit): void;
10
+ call(name: string, args?: readonly ScriptValue[], context?: ScriptContext, emit?: ScriptEmit): ScriptValue;
11
+ dispose(): void;
12
+ }
13
+ /** Default host for MWL formulas. It never executes statements or calls code. */
14
+ export declare function createExpressionScriptHost(): ScriptHost;
15
+ //# sourceMappingURL=scripts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts.d.ts","sourceRoot":"","sources":["../../src/mwl/scripts.ts"],"names":[],"mappings":"AAEA,iEAAiE;AACjE,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,EAAE,GAAG;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;CAAE,CAAC;AAErH,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;AAElE,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;AAEvE,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,WAAW,CAAC;IAC/D,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1E,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IAC3G,OAAO,IAAI,IAAI,CAAC;CAChB;AAED,iFAAiF;AACjF,wBAAgB,0BAA0B,IAAI,UAAU,CAkBvD"}
@@ -0,0 +1,23 @@
1
+ import { evaluateExpression } from './expression.js';
2
+ /** Default host for MWL formulas. It never executes statements or calls code. */
3
+ export function createExpressionScriptHost() {
4
+ return {
5
+ evaluate(source, context = {}) {
6
+ const numbers = {};
7
+ for (const [key, value] of Object.entries(context)) {
8
+ if (typeof value !== 'number')
9
+ throw new Error(`MWL expression context value must be numeric: ${key}`);
10
+ numbers[key] = value;
11
+ }
12
+ return evaluateExpression(source, numbers);
13
+ },
14
+ execute() {
15
+ throw new Error('the expression ScriptHost cannot execute statements');
16
+ },
17
+ call() {
18
+ throw new Error('the expression ScriptHost cannot call functions');
19
+ },
20
+ dispose() { },
21
+ };
22
+ }
23
+ //# sourceMappingURL=scripts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../src/mwl/scripts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAgBrD,iFAAiF;AACjF,MAAM,UAAU,0BAA0B;IACzC,OAAO;QACN,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,EAAE;YAC5B,MAAM,OAAO,GAA2B,EAAE,CAAC;YAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,GAAG,EAAE,CAAC,CAAC;gBACvG,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;YACD,OAAO,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO;YACN,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACxE,CAAC;QACD,IAAI;YACH,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,KAAI,CAAC;KACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { MwlCompiledNode } from './compiler.ts';
2
+ export declare function flattenNodes(roots: readonly MwlCompiledNode[]): MwlCompiledNode[];
3
+ export declare function requiredAttribute(node: MwlCompiledNode, name: string): string;
4
+ export declare function numberAttribute(node: MwlCompiledNode, name: string): number | undefined;
5
+ export declare function integerAttribute(node: MwlCompiledNode, name: string, fallback?: number): number | undefined;
6
+ export declare function booleanAttribute(node: MwlCompiledNode, name: string): boolean | undefined;
7
+ export declare function enumAttribute<T extends string>(value: string | undefined, allowed: readonly T[]): T | undefined;
8
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/mwl/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,GAAG,eAAe,EAAE,CAQjF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI7E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKvF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK3G;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAGzF;AAED,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,SAAS,CAE/G"}
@@ -0,0 +1,37 @@
1
+ export function flattenNodes(roots) {
2
+ const result = [];
3
+ const visit = (node) => {
4
+ result.push(node);
5
+ node.children.forEach(visit);
6
+ };
7
+ roots.forEach(visit);
8
+ return result;
9
+ }
10
+ export function requiredAttribute(node, name) {
11
+ const value = node.attributes[name];
12
+ if (!value)
13
+ throw new Error(`MWL ${node.tag} is missing ${name}`);
14
+ return value;
15
+ }
16
+ export function numberAttribute(node, name) {
17
+ const value = node.attributes[name];
18
+ if (value === undefined)
19
+ return undefined;
20
+ const result = Number(value);
21
+ return Number.isFinite(result) ? result : undefined;
22
+ }
23
+ export function integerAttribute(node, name, fallback) {
24
+ const value = node.attributes[name];
25
+ if (value === undefined)
26
+ return fallback;
27
+ const result = Number.parseInt(value, 10);
28
+ return Number.isFinite(result) ? result : fallback;
29
+ }
30
+ export function booleanAttribute(node, name) {
31
+ const value = node.attributes[name];
32
+ return value === undefined ? undefined : value === 'true' || value === 'yes';
33
+ }
34
+ export function enumAttribute(value, allowed) {
35
+ return value !== undefined && allowed.includes(value) ? value : undefined;
36
+ }
37
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/mwl/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,KAAiC;IAC7D,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,CAAC,IAAqB,EAAQ,EAAE;QAC7C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC;IACF,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAqB,EAAE,IAAY;IACpE,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,GAAG,eAAe,IAAI,EAAE,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAqB,EAAE,IAAY;IAClE,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAqB,EAAE,IAAY,EAAE,QAAiB;IACtF,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAqB,EAAE,IAAY;IACnE,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,aAAa,CAAmB,KAAyB,EAAE,OAAqB;IAC/F,OAAO,KAAK,KAAK,SAAS,IAAK,OAA6B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AACzG,CAAC"}
@@ -0,0 +1,70 @@
1
+ import type { Level } from './Level.ts';
2
+ import type { Step } from './Pathfinder.ts';
3
+ export interface BeamDamageContext {
4
+ cell: Step;
5
+ step: number;
6
+ /** the number of cells remaining after this one */
7
+ remaining: number;
8
+ }
9
+ export interface MultiTurnBeamOptions<T> {
10
+ level: Level;
11
+ from: Step;
12
+ target: Step;
13
+ damage: number | ((target: T, context: BeamDamageContext) => number);
14
+ /** Finds live targets at the cell when that cell is reached. */
15
+ targetsAt?: (cell: Step) => readonly T[];
16
+ /** Applies the resolved damage. The game owns health, resistances and effects. */
17
+ applyDamage?: (target: T, amount: number, context: BeamDamageContext) => void;
18
+ /** A dynamic blocker can stop a beam after it has started. */
19
+ isBlocked?: (cell: Step, context: BeamDamageContext) => boolean;
20
+ /** Whether the beam stops at opaque terrain. Defaults to true. */
21
+ stopAtOpaque?: boolean;
22
+ }
23
+ export interface BeamStep<T> {
24
+ status: 'idle' | 'active' | 'done' | 'blocked' | 'cancelled';
25
+ cell: Step | null;
26
+ step: number;
27
+ remaining: number;
28
+ targets: readonly T[];
29
+ damage: number;
30
+ }
31
+ export interface MultiTurnBeamSave {
32
+ path: Step[];
33
+ index: number;
34
+ state: 'idle' | 'active' | 'done' | 'blocked' | 'cancelled';
35
+ }
36
+ /**
37
+ * Advances a straight beam one cell per turn.
38
+ *
39
+ * The framework owns traversal and timing. A game supplies target lookup and damage
40
+ * application, so this stays useful for hit points, shields, status effects and any other
41
+ * combat model. The path is captured at construction time, while blockers and targets are
42
+ * checked when each cell is reached. `advance` is deterministic when those callbacks are.
43
+ *
44
+ * @example
45
+ * ```ts
46
+ * import { Level, FLOOR, WALL, MultiTurnBeam } from '@datamoc/mw_games/roguelike';
47
+ *
48
+ * const level = new Level(8, 1, [WALL, FLOOR], 1);
49
+ * const beam = new MultiTurnBeam({ level, from: { x: 0, y: 0 }, target: { x: 3, y: 0 }, damage: 4 });
50
+ * beam.start();
51
+ * beam.advance(); // reaches x=1; call again on the next turn
52
+ * ```
53
+ */
54
+ export declare class MultiTurnBeam<T = unknown> {
55
+ private options;
56
+ private path;
57
+ private index;
58
+ private state;
59
+ constructor(options: MultiTurnBeamOptions<T>);
60
+ get active(): boolean;
61
+ get done(): boolean;
62
+ get currentPath(): readonly Step[];
63
+ start(): boolean;
64
+ /** Resolves and applies one beam cell. Call once per game turn. */
65
+ advance(): BeamStep<T>;
66
+ cancel(): void;
67
+ toJSON(): MultiTurnBeamSave;
68
+ static fromJSON<T>(options: Omit<MultiTurnBeamOptions<T>, 'from' | 'target'>, data: MultiTurnBeamSave): MultiTurnBeam<T>;
69
+ }
70
+ //# sourceMappingURL=MultiTurnBeam.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiTurnBeam.d.ts","sourceRoot":"","sources":["../../src/roguelike/MultiTurnBeam.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACtC,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,KAAK,MAAM,CAAC,CAAC;IACrE,gEAAgE;IAChE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;IACzC,kFAAkF;IAClF,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9E,8DAA8D;IAC9D,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC;IAChE,kEAAkE;IAClE,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;IAC7D,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,IAAI,EAAE,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;CAC5D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,aAAa,CAAC,CAAC,GAAG,OAAO;IACrC,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,KAAK,CAAsC;IAEnD,YAAY,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAS3C;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,IAAI,WAAW,IAAI,SAAS,IAAI,EAAE,CAEjC;IAED,KAAK,IAAI,OAAO,CAIf;IAED,mEAAmE;IACnE,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,CAuDrB;IAED,MAAM,IAAI,IAAI,CAEb;IAED,MAAM,IAAI,iBAAiB,CAE1B;IAED,MAAM,CAAC,QAAQ,CAAC,CAAC,EAChB,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,EACzD,IAAI,EAAE,iBAAiB,GACrB,aAAa,CAAC,CAAC,CAAC,CAOlB;CACD"}
@@ -0,0 +1,117 @@
1
+ import { resolveAreaOnLevel } from './Targeting.js';
2
+ /**
3
+ * Advances a straight beam one cell per turn.
4
+ *
5
+ * The framework owns traversal and timing. A game supplies target lookup and damage
6
+ * application, so this stays useful for hit points, shields, status effects and any other
7
+ * combat model. The path is captured at construction time, while blockers and targets are
8
+ * checked when each cell is reached. `advance` is deterministic when those callbacks are.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { Level, FLOOR, WALL, MultiTurnBeam } from '@datamoc/mw_games/roguelike';
13
+ *
14
+ * const level = new Level(8, 1, [WALL, FLOOR], 1);
15
+ * const beam = new MultiTurnBeam({ level, from: { x: 0, y: 0 }, target: { x: 3, y: 0 }, damage: 4 });
16
+ * beam.start();
17
+ * beam.advance(); // reaches x=1; call again on the next turn
18
+ * ```
19
+ */
20
+ export class MultiTurnBeam {
21
+ constructor(options) {
22
+ this.index = 0;
23
+ this.state = 'idle';
24
+ if (typeof options.damage !== 'function' && !Number.isFinite(options.damage)) {
25
+ throw new Error('beam damage must be a finite number or a function');
26
+ }
27
+ if (typeof options.damage === 'number' && options.damage < 0) {
28
+ throw new Error('beam damage must be non-negative');
29
+ }
30
+ this.options = options;
31
+ this.path = resolveAreaOnLevel(options.level, options.from, options.target, { kind: 'line' }).slice(1);
32
+ }
33
+ get active() {
34
+ return this.state === 'active';
35
+ }
36
+ get done() {
37
+ return this.state === 'done' || this.state === 'blocked' || this.state === 'cancelled';
38
+ }
39
+ get currentPath() {
40
+ return this.path;
41
+ }
42
+ start() {
43
+ if (this.state !== 'idle')
44
+ return false;
45
+ this.state = this.path.length === 0 ? 'done' : 'active';
46
+ return true;
47
+ }
48
+ /** Resolves and applies one beam cell. Call once per game turn. */
49
+ advance() {
50
+ if (this.state !== 'active') {
51
+ return {
52
+ status: this.state,
53
+ cell: null,
54
+ step: this.index,
55
+ remaining: Math.max(0, this.path.length - this.index),
56
+ targets: [],
57
+ damage: 0,
58
+ };
59
+ }
60
+ const cell = this.path[this.index];
61
+ const context = {
62
+ cell: { ...cell },
63
+ step: this.index,
64
+ remaining: this.path.length - this.index - 1,
65
+ };
66
+ const blocked = !this.options.level.inside(cell.x, cell.y) ||
67
+ (this.options.stopAtOpaque !== false && !this.options.level.transparent(cell.x, cell.y)) ||
68
+ this.options.isBlocked?.(cell, context) === true;
69
+ if (blocked) {
70
+ this.state = 'blocked';
71
+ return {
72
+ status: 'blocked',
73
+ cell: { ...cell },
74
+ step: this.index,
75
+ remaining: context.remaining,
76
+ targets: [],
77
+ damage: 0,
78
+ };
79
+ }
80
+ const targets = this.options.targetsAt?.(cell) ?? [];
81
+ let damage = 0;
82
+ for (const target of targets) {
83
+ const amount = typeof this.options.damage === 'function' ? this.options.damage(target, context) : this.options.damage;
84
+ if (!Number.isFinite(amount) || amount < 0)
85
+ throw new Error('beam damage callback must return a non-negative finite number');
86
+ damage += amount;
87
+ this.options.applyDamage?.(target, amount, context);
88
+ }
89
+ this.index++;
90
+ if (this.index >= this.path.length)
91
+ this.state = 'done';
92
+ return {
93
+ status: this.state === 'done' ? 'done' : 'active',
94
+ cell: { ...cell },
95
+ step: context.step,
96
+ remaining: context.remaining,
97
+ targets: [...targets],
98
+ damage,
99
+ };
100
+ }
101
+ cancel() {
102
+ if (this.state === 'active' || this.state === 'idle')
103
+ this.state = 'cancelled';
104
+ }
105
+ toJSON() {
106
+ return { path: this.path.map((cell) => ({ ...cell })), index: this.index, state: this.state };
107
+ }
108
+ static fromJSON(options, data) {
109
+ const beam = Object.create(MultiTurnBeam.prototype);
110
+ beam.options = options;
111
+ beam.path = data.path.map((cell) => ({ ...cell }));
112
+ beam.index = data.index;
113
+ beam.state = data.state;
114
+ return beam;
115
+ }
116
+ }
117
+ //# sourceMappingURL=MultiTurnBeam.js.map