@datamoc/mw_games 0.7.0 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +964 -0
- package/README.md +43 -3
- package/dist/actors/Affix.d.ts +7 -1
- package/dist/actors/Affix.d.ts.map +1 -1
- package/dist/actors/Affix.js +4 -2
- package/dist/actors/Affix.js.map +1 -1
- package/dist/actors/StatBlock.d.ts +20 -0
- package/dist/actors/StatBlock.d.ts.map +1 -1
- package/dist/actors/StatBlock.js +14 -3
- package/dist/actors/StatBlock.js.map +1 -1
- package/dist/actors/index.d.ts +2 -2
- package/dist/actors/index.d.ts.map +1 -1
- package/dist/actors/index.js +1 -1
- package/dist/actors/index.js.map +1 -1
- package/dist/ai/index.d.ts +118 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +203 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/lua.d.ts +47 -0
- package/dist/ai/lua.d.ts.map +1 -0
- package/dist/ai/lua.js +195 -0
- package/dist/ai/lua.js.map +1 -0
- package/dist/ai/search.d.ts +59 -0
- package/dist/ai/search.d.ts.map +1 -0
- package/dist/ai/search.js +100 -0
- package/dist/ai/search.js.map +1 -0
- package/dist/board/Engine.d.ts +14 -0
- package/dist/board/Engine.d.ts.map +1 -1
- package/dist/board/Engine.js +33 -45
- package/dist/board/Engine.js.map +1 -1
- package/dist/board/index.d.ts +1 -1
- package/dist/board/index.d.ts.map +1 -1
- package/dist/board/index.js +1 -1
- package/dist/board/index.js.map +1 -1
- package/dist/core/Csv.d.ts +10 -0
- package/dist/core/Csv.d.ts.map +1 -1
- package/dist/core/Csv.js +34 -3
- package/dist/core/Csv.js.map +1 -1
- package/dist/core/Entity.d.ts +2 -2
- package/dist/core/Entity.d.ts.map +1 -1
- package/dist/core/Entity.js +18 -4
- package/dist/core/Entity.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mw_games.global.js +97 -97
- package/dist/mwl/actors.d.ts +3 -1
- package/dist/mwl/actors.d.ts.map +1 -1
- package/dist/mwl/actors.js +15 -2
- package/dist/mwl/actors.js.map +1 -1
- package/dist/mwl/catalog.d.ts.map +1 -1
- package/dist/mwl/catalog.js +16 -9
- package/dist/mwl/catalog.js.map +1 -1
- package/dist/mwl/compiler.d.ts +20 -0
- package/dist/mwl/compiler.d.ts.map +1 -1
- package/dist/mwl/compiler.js +76 -3
- package/dist/mwl/compiler.js.map +1 -1
- package/dist/mwl/conditions.d.ts +9 -0
- package/dist/mwl/conditions.d.ts.map +1 -0
- package/dist/mwl/conditions.js +162 -0
- package/dist/mwl/conditions.js.map +1 -0
- package/dist/mwl/content.d.ts +61 -0
- package/dist/mwl/content.d.ts.map +1 -1
- package/dist/mwl/content.js +95 -34
- package/dist/mwl/content.js.map +1 -1
- package/dist/mwl/expression.d.ts.map +1 -1
- package/dist/mwl/expression.js +16 -6
- package/dist/mwl/expression.js.map +1 -1
- package/dist/mwl/fengari.d.ts +8 -0
- package/dist/mwl/fengari.d.ts.map +1 -0
- package/dist/mwl/fengari.js +136 -0
- package/dist/mwl/fengari.js.map +1 -0
- package/dist/mwl/hooks.d.ts +1 -1
- package/dist/mwl/hooks.d.ts.map +1 -1
- package/dist/mwl/hooks.js.map +1 -1
- package/dist/mwl/index.d.ts +16 -7
- package/dist/mwl/index.d.ts.map +1 -1
- package/dist/mwl/index.js +7 -3
- package/dist/mwl/index.js.map +1 -1
- package/dist/mwl/persistence.d.ts.map +1 -1
- package/dist/mwl/persistence.js +10 -2
- package/dist/mwl/persistence.js.map +1 -1
- package/dist/mwl/readers.d.ts +18 -0
- package/dist/mwl/readers.d.ts.map +1 -0
- package/dist/mwl/readers.js +58 -0
- package/dist/mwl/readers.js.map +1 -0
- package/dist/mwl/report.d.ts +9 -0
- package/dist/mwl/report.d.ts.map +1 -0
- package/dist/mwl/report.js +36 -0
- package/dist/mwl/report.js.map +1 -0
- package/dist/mwl/runtime.d.ts +65 -2
- package/dist/mwl/runtime.d.ts.map +1 -1
- package/dist/mwl/runtime.js +245 -26
- package/dist/mwl/runtime.js.map +1 -1
- package/dist/mwl/schema.d.ts +13 -1
- package/dist/mwl/schema.d.ts.map +1 -1
- package/dist/mwl/schema.js +222 -7
- package/dist/mwl/schema.js.map +1 -1
- package/dist/mwl/scripts.d.ts +15 -0
- package/dist/mwl/scripts.d.ts.map +1 -0
- package/dist/mwl/scripts.js +23 -0
- package/dist/mwl/scripts.js.map +1 -0
- package/dist/mwl/utils.d.ts +8 -0
- package/dist/mwl/utils.d.ts.map +1 -0
- package/dist/mwl/utils.js +37 -0
- package/dist/mwl/utils.js.map +1 -0
- package/dist/two-d/render/Types2D.d.ts +19 -4
- package/dist/two-d/render/Types2D.d.ts.map +1 -1
- package/dist/two-d/render/Types2D.js +25 -0
- package/dist/two-d/render/Types2D.js.map +1 -1
- package/dist/two-d/render/index.d.ts +2 -2
- package/dist/two-d/render/index.d.ts.map +1 -1
- package/dist/two-d/render/index.js +1 -1
- package/dist/two-d/render/index.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +27 -6
- package/tools/extract-html.d.mts +18 -0
- package/tools/extract-html.mjs +235 -0
- package/tools/mwl.mjs +86 -16
package/dist/mwl/actors.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { EquipmentSlots } from '../actors/Equipment.ts';
|
|
2
2
|
import type { InventoryItem, ItemDefinition } from '../actors/Inventory.ts';
|
|
3
|
-
import type
|
|
3
|
+
import { type Modifier } from '../actors/StatBlock.ts';
|
|
4
4
|
import type { MwlEffectDefinition, MwlItemDefinition } from './content.ts';
|
|
5
5
|
import { type MwlExpressionContext } from './expression.ts';
|
|
6
6
|
export interface MwlActorItem extends ItemDefinition {
|
|
@@ -11,6 +11,8 @@ export interface MwlActorItem extends ItemDefinition {
|
|
|
11
11
|
/** Converts MWL's data shape into the actor layer without importing game rules. */
|
|
12
12
|
export declare function itemDefinition(item: MwlItemDefinition, context?: MwlExpressionContext): MwlActorItem;
|
|
13
13
|
export declare function inventoryItem(item: MwlActorItem, quantity?: number): InventoryItem;
|
|
14
|
+
/** Resolve a declarative MWL effect list using the same rule as StatBlock. */
|
|
15
|
+
export declare function composeEffects(base: number, effects: readonly MwlEffectDefinition[], context?: MwlExpressionContext): number;
|
|
14
16
|
export declare function effectToModifier(effect: MwlEffectDefinition, context?: MwlExpressionContext): Modifier;
|
|
15
17
|
export type MwlEquipment<Slot extends string> = EquipmentSlots<Slot, MwlActorItem>;
|
|
16
18
|
//# sourceMappingURL=actors.d.ts.map
|
package/dist/mwl/actors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actors.d.ts","sourceRoot":"","sources":["../../src/mwl/actors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"actors.d.ts","sourceRoot":"","sources":["../../src/mwl/actors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAsB,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEhF,MAAM,WAAW,YAAa,SAAQ,cAAc;IACnD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;CAChC;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,GAAE,oBAAyB,GAAG,YAAY,CAQxG;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,SAAI,GAAG,aAAa,CAE7E;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,mBAAmB,EAAE,EACvC,OAAO,GAAE,oBAAyB,GAChC,MAAM,CAKR;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,GAAE,oBAAyB,GAAG,QAAQ,CAkB1G;AAED,MAAM,MAAM,YAAY,CAAC,IAAI,SAAS,MAAM,IAAI,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC"}
|
package/dist/mwl/actors.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { composeModifiers } from '../actors/StatBlock.js';
|
|
1
2
|
import { evaluateExpression } from './expression.js';
|
|
2
3
|
/** Converts MWL's data shape into the actor layer without importing game rules. */
|
|
3
4
|
export function itemDefinition(item, context = {}) {
|
|
@@ -12,14 +13,26 @@ export function itemDefinition(item, context = {}) {
|
|
|
12
13
|
export function inventoryItem(item, quantity = 1) {
|
|
13
14
|
return { id: item.id, quantity, stackable: item.stackable, weight: item.weight };
|
|
14
15
|
}
|
|
16
|
+
/** Resolve a declarative MWL effect list using the same rule as StatBlock. */
|
|
17
|
+
export function composeEffects(base, effects, context = {}) {
|
|
18
|
+
return composeModifiers(base, effects.map((effect) => effectToModifier(effect, context)));
|
|
19
|
+
}
|
|
15
20
|
export function effectToModifier(effect, context = {}) {
|
|
16
21
|
const operation = effect.operation;
|
|
17
|
-
if (operation !== 'add' &&
|
|
22
|
+
if (operation !== 'add' &&
|
|
23
|
+
operation !== 'sub' &&
|
|
24
|
+
operation !== 'multiply' &&
|
|
25
|
+
operation !== 'divide' &&
|
|
26
|
+
operation !== 'set')
|
|
18
27
|
throw new Error(`MWL effect operation "${operation ?? ''}" is not a StatBlock modifier`);
|
|
19
28
|
const raw = effect.value;
|
|
20
29
|
if (raw === undefined)
|
|
21
30
|
throw new Error('MWL effect has no value');
|
|
22
31
|
const value = evaluateExpression(raw, context);
|
|
23
|
-
return {
|
|
32
|
+
return {
|
|
33
|
+
stat: effect.applyTo,
|
|
34
|
+
op: operation === 'sub' ? 'add' : operation === 'divide' ? 'multiply' : operation,
|
|
35
|
+
value: operation === 'sub' ? -value : operation === 'divide' ? 1 / value : value,
|
|
36
|
+
};
|
|
24
37
|
}
|
|
25
38
|
//# sourceMappingURL=actors.js.map
|
package/dist/mwl/actors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actors.js","sourceRoot":"","sources":["../../src/mwl/actors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"actors.js","sourceRoot":"","sources":["../../src/mwl/actors.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAiB,MAAM,wBAAwB,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAA6B,MAAM,iBAAiB,CAAC;AAQhF,mFAAmF;AACnF,MAAM,UAAU,cAAc,CAAC,IAAuB,EAAE,OAAO,GAAyB,EAAE;IACzF,OAAO;QACN,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC1E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAkB,EAAE,QAAQ,GAAG,CAAC;IAC7D,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAClF,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,cAAc,CAC7B,IAAY,EACZ,OAAuC,EACvC,OAAO,GAAyB,EAAE;IAElC,OAAO,gBAAgB,CACtB,IAAI,EACJ,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAC1D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAA2B,EAAE,OAAO,GAAyB,EAAE;IAC/F,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACnC,IACC,SAAS,KAAK,KAAK;QACnB,SAAS,KAAK,KAAK;QACnB,SAAS,KAAK,UAAU;QACxB,SAAS,KAAK,QAAQ;QACtB,SAAS,KAAK,KAAK;QAEnB,MAAM,IAAI,KAAK,CAAC,yBAAyB,SAAS,IAAI,EAAE,+BAA+B,CAAC,CAAC;IAC1F,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;IACzB,IAAI,GAAG,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC/C,OAAO;QACN,IAAI,EAAE,MAAM,CAAC,OAAO;QACpB,EAAE,EAAE,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QACjF,KAAK,EAAE,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK;KAChF,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/mwl/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,eAAe,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAe,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/mwl/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,eAAe,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAe,OAAO,EAAE,MAAM,cAAc,CAAC;AAIxE,MAAM,WAAW,oBAAoB;IACpC,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,+CAA+C;IAC/C,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,GAAE,oBAAyB,GAAG,aAAa,EAAE,CAmE1G;AAMD,kFAAkF;AAClF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,EAAE,OAAO,GAAE,oBAAyB,GAAG,aAAa,EAAE,CAGnH"}
|
package/dist/mwl/catalog.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { collectHookReferences, parseHookReference } from './hooks.js';
|
|
2
|
+
import { flattenNodes } from './utils.js';
|
|
2
3
|
/** Semantic checks shared by all games. Domain rules remain in the game adapter. */
|
|
3
4
|
export function validateCatalog(game, options = {}) {
|
|
4
5
|
const diagnostics = [];
|
|
5
6
|
const ids = new Map();
|
|
6
|
-
const nodes =
|
|
7
|
+
const nodes = flattenNodes(game.roots);
|
|
7
8
|
for (const node of nodes) {
|
|
8
9
|
const id = node.attributes.id;
|
|
9
10
|
if (id) {
|
|
@@ -14,10 +15,22 @@ export function validateCatalog(game, options = {}) {
|
|
|
14
15
|
else
|
|
15
16
|
ids.set(key, node);
|
|
16
17
|
}
|
|
17
|
-
if (node.tag === 'item' &&
|
|
18
|
+
if (node.tag === 'item' &&
|
|
19
|
+
options.slots &&
|
|
20
|
+
node.attributes.slot &&
|
|
21
|
+
!options.slots.includes(node.attributes.slot))
|
|
18
22
|
diagnostics.push(diagnostic('MWL_UNKNOWN_SLOT', `unknown equipment slot "${node.attributes.slot}"`, node.location));
|
|
19
23
|
if (node.tag === 'effect') {
|
|
20
|
-
const operations = [
|
|
24
|
+
const operations = [
|
|
25
|
+
'add',
|
|
26
|
+
'sub',
|
|
27
|
+
'multiply',
|
|
28
|
+
'divide',
|
|
29
|
+
'set',
|
|
30
|
+
'increase',
|
|
31
|
+
'increase_total',
|
|
32
|
+
'increase_damage',
|
|
33
|
+
].filter((key) => node.attributes[key] !== undefined);
|
|
21
34
|
if (!node.attributes.apply_to || operations.length !== 1)
|
|
22
35
|
diagnostics.push(diagnostic('MWL_INCOMPLETE_EFFECT', 'an effect needs apply_to and exactly one operation', node.location));
|
|
23
36
|
}
|
|
@@ -35,12 +48,6 @@ export function validateCatalog(game, options = {}) {
|
|
|
35
48
|
diagnostics.push(diagnostic('MWL_UNKNOWN_HOOK', `hook ${reference.type}:${reference.name} is not declared by the game`, reference.location));
|
|
36
49
|
return diagnostics;
|
|
37
50
|
}
|
|
38
|
-
function flatten(roots) {
|
|
39
|
-
const result = [];
|
|
40
|
-
const visit = (node) => { result.push(node); node.children.forEach(visit); };
|
|
41
|
-
roots.forEach(visit);
|
|
42
|
-
return result;
|
|
43
|
-
}
|
|
44
51
|
function diagnostic(code, message, location) {
|
|
45
52
|
return { code, message, location: location ?? { file: '<mwl>', line: 1, column: 1 } };
|
|
46
53
|
}
|
package/dist/mwl/catalog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/mwl/catalog.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/mwl/catalog.ts"],"names":[],"mappings":"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"}
|
package/dist/mwl/compiler.d.ts
CHANGED
|
@@ -18,7 +18,23 @@ export interface MwlCompiledGame {
|
|
|
18
18
|
export interface MwlCompileOptions extends MwlPreprocessOptions {
|
|
19
19
|
readonly schemas?: Readonly<Record<string, MwlTagSchema>>;
|
|
20
20
|
}
|
|
21
|
+
export interface MwlArtifact {
|
|
22
|
+
readonly name: string;
|
|
23
|
+
readonly content: string;
|
|
24
|
+
}
|
|
25
|
+
export interface MwlEmitOptions {
|
|
26
|
+
readonly variable?: string;
|
|
27
|
+
/** additional game-owned generated files, kept in the same deterministic artifact set */
|
|
28
|
+
readonly artifacts?: Readonly<Record<string, string>>;
|
|
29
|
+
readonly onEmit?: (artifact: MwlArtifact) => void;
|
|
30
|
+
}
|
|
21
31
|
export declare function compile(source: string, options?: MwlCompileOptions): MwlCompiledGame;
|
|
32
|
+
export interface MwlSourceFile {
|
|
33
|
+
readonly file: string;
|
|
34
|
+
readonly source: string;
|
|
35
|
+
}
|
|
36
|
+
/** Compiles a deterministic set of content files as one catalog. */
|
|
37
|
+
export declare function compileSources(files: readonly MwlSourceFile[], options?: MwlCompileOptions): MwlCompiledGame;
|
|
22
38
|
/**
|
|
23
39
|
* Compile an already-parsed MWL node tree. A game that builds its nodes from
|
|
24
40
|
* another format (the Wesnoth port converts its own parsed nodes this way) can
|
|
@@ -42,4 +58,8 @@ export interface MwlCatalog {
|
|
|
42
58
|
*/
|
|
43
59
|
export declare function extractCatalog(game: MwlCompiledGame, options?: MwlCatalogOptions): MwlCatalog;
|
|
44
60
|
export declare function emitModule(game: MwlCompiledGame, variable?: string): string;
|
|
61
|
+
/** Emits the standard MWL outputs plus game-owned artifacts in stable name order. */
|
|
62
|
+
export declare function emitArtifacts(game: MwlCompiledGame, options?: MwlEmitOptions): readonly MwlArtifact[];
|
|
63
|
+
/** Compiles the same source set twice and fails if any generated artifact differs. */
|
|
64
|
+
export declare function compileAndEmitSources(files: readonly MwlSourceFile[], options?: MwlCompileOptions, emitOptions?: Omit<MwlEmitOptions, 'onEmit'>): readonly MwlArtifact[];
|
|
45
65
|
//# sourceMappingURL=compiler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/mwl/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC5G,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IAC9C,uFAAuF;IACvF,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;IAChC,oFAAoF;IACpF,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,iBAAkB,SAAQ,oBAAoB;IAC9D,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;CAC1D;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,eAAe,CAGxF;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,EAAE,OAAO,GAAE,iBAAsB,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/mwl/compiler.ts"],"names":[],"mappings":"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"}
|
package/dist/mwl/compiler.js
CHANGED
|
@@ -4,6 +4,15 @@ export function compile(source, options = {}) {
|
|
|
4
4
|
const expanded = preprocess(source, options);
|
|
5
5
|
return compileNodes(parse(expanded, options.file), options);
|
|
6
6
|
}
|
|
7
|
+
/** Compiles a deterministic set of content files as one catalog. */
|
|
8
|
+
export function compileSources(files, options = {}) {
|
|
9
|
+
const nodes = [];
|
|
10
|
+
for (const file of [...files].sort((a, b) => (a.file < b.file ? -1 : a.file > b.file ? 1 : 0))) {
|
|
11
|
+
const expanded = preprocess(file.source, { ...options, file: file.file });
|
|
12
|
+
nodes.push(...parse(expanded, file.file));
|
|
13
|
+
}
|
|
14
|
+
return compileNodes(nodes, options);
|
|
15
|
+
}
|
|
7
16
|
/**
|
|
8
17
|
* Compile an already-parsed MWL node tree. A game that builds its nodes from
|
|
9
18
|
* another format (the Wesnoth port converts its own parsed nodes this way) can
|
|
@@ -20,8 +29,10 @@ export function compileNodes(nodes, options = {}) {
|
|
|
20
29
|
const convert = (node) => {
|
|
21
30
|
for (const [key, value] of Object.entries(node.attributes)) {
|
|
22
31
|
if (isAssetAttribute(key)) {
|
|
23
|
-
for (const asset of value
|
|
24
|
-
|
|
32
|
+
for (const asset of splitAssetReferences(value)
|
|
33
|
+
.map((part) => part.trim())
|
|
34
|
+
.filter(isAssetReference))
|
|
35
|
+
assets.add(stripAssetTransform(asset));
|
|
25
36
|
}
|
|
26
37
|
}
|
|
27
38
|
// Text-parsed nodes carry the exact set of gettext-marked attributes, so
|
|
@@ -50,7 +61,46 @@ export function compileNodes(nodes, options = {}) {
|
|
|
50
61
|
}
|
|
51
62
|
/** Common WML asset attributes, including the sound/image aliases used by CFG macros. */
|
|
52
63
|
function isAssetAttribute(name) {
|
|
53
|
-
return name === 'file' ||
|
|
64
|
+
return (name === 'file' ||
|
|
65
|
+
name === 'image' ||
|
|
66
|
+
name === 'image_icon' ||
|
|
67
|
+
name === 'icon' ||
|
|
68
|
+
name === 'profile' ||
|
|
69
|
+
name === 'sound' ||
|
|
70
|
+
name.endsWith('_sound') ||
|
|
71
|
+
name.endsWith('_image'));
|
|
72
|
+
}
|
|
73
|
+
function isAssetReference(value) {
|
|
74
|
+
return (value.includes('/') ||
|
|
75
|
+
/\.(?:png|jpg|jpeg|gif|svg|webp|wav|ogg|mp3|flac|glb|gltf|vox|map|cfg)$/i.test(value) ||
|
|
76
|
+
value.startsWith('data:'));
|
|
77
|
+
}
|
|
78
|
+
function splitAssetReferences(value) {
|
|
79
|
+
const parts = [];
|
|
80
|
+
let start = 0;
|
|
81
|
+
let parenDepth = 0;
|
|
82
|
+
let bracketDepth = 0;
|
|
83
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
84
|
+
if (value[index] === '(')
|
|
85
|
+
parenDepth += 1;
|
|
86
|
+
else if (value[index] === ')' && parenDepth > 0)
|
|
87
|
+
parenDepth -= 1;
|
|
88
|
+
else if (value[index] === '[')
|
|
89
|
+
bracketDepth += 1;
|
|
90
|
+
else if (value[index] === ']' && bracketDepth > 0)
|
|
91
|
+
bracketDepth -= 1;
|
|
92
|
+
else if (value[index] === ',' && parenDepth === 0 && bracketDepth === 0) {
|
|
93
|
+
parts.push(value.slice(start, index));
|
|
94
|
+
start = index + 1;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
parts.push(value.slice(start));
|
|
98
|
+
return parts;
|
|
99
|
+
}
|
|
100
|
+
/** Remove a renderer transform, but keep Wesnoth sound ranges such as [1~4]. */
|
|
101
|
+
function stripAssetTransform(value) {
|
|
102
|
+
const match = value.match(/~[A-Za-z][A-Za-z0-9_-]*(?:\(|$)/);
|
|
103
|
+
return match ? value.slice(0, match.index).trim() : value;
|
|
54
104
|
}
|
|
55
105
|
/**
|
|
56
106
|
* Extract a translation catalog compatible with `mwg/i18n` from a compiled
|
|
@@ -66,4 +116,27 @@ export function extractCatalog(game, options = {}) {
|
|
|
66
116
|
export function emitModule(game, variable = 'gameData') {
|
|
67
117
|
return `export const ${variable} = ${JSON.stringify(game, null, '\t')} as const;\n`;
|
|
68
118
|
}
|
|
119
|
+
/** Emits the standard MWL outputs plus game-owned artifacts in stable name order. */
|
|
120
|
+
export function emitArtifacts(game, options = {}) {
|
|
121
|
+
const artifacts = [
|
|
122
|
+
{ name: 'game-data.ts', content: emitModule(game, options.variable ?? 'gameData') },
|
|
123
|
+
{ name: 'i18n.json', content: `${JSON.stringify(extractCatalog(game), null, '\t')}\n` },
|
|
124
|
+
{ name: 'assets.json', content: `${JSON.stringify({ assets: game.assets }, null, '\t')}\n` },
|
|
125
|
+
...Object.entries(options.artifacts ?? {})
|
|
126
|
+
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
|
|
127
|
+
.map(([name, content]) => ({ name, content })),
|
|
128
|
+
];
|
|
129
|
+
for (const artifact of artifacts)
|
|
130
|
+
options.onEmit?.(artifact);
|
|
131
|
+
return artifacts;
|
|
132
|
+
}
|
|
133
|
+
/** Compiles the same source set twice and fails if any generated artifact differs. */
|
|
134
|
+
export function compileAndEmitSources(files, options = {}, emitOptions = {}) {
|
|
135
|
+
const first = emitArtifacts(compileSources(files, options), emitOptions);
|
|
136
|
+
const second = emitArtifacts(compileSources(files, options), emitOptions);
|
|
137
|
+
if (first.length !== second.length ||
|
|
138
|
+
first.some((artifact, index) => artifact.name !== second[index]?.name || artifact.content !== second[index]?.content))
|
|
139
|
+
throw new Error('MWL generated artifacts are not deterministic');
|
|
140
|
+
return first;
|
|
141
|
+
}
|
|
69
142
|
//# sourceMappingURL=compiler.js.map
|
package/dist/mwl/compiler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/mwl/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAA6D,MAAM,cAAc,CAAC;AAC5G,OAAO,EAAE,QAAQ,EAAqB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/mwl/compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type MwlConditionValue = string | number | boolean;
|
|
2
|
+
export type MwlConditionContext = Readonly<Record<string, MwlConditionValue>>;
|
|
3
|
+
export type MwlConditionHelper = (...args: readonly MwlConditionValue[]) => MwlConditionValue;
|
|
4
|
+
export interface MwlConditionOptions {
|
|
5
|
+
readonly helpers?: Readonly<Record<string, MwlConditionHelper>>;
|
|
6
|
+
}
|
|
7
|
+
/** Evaluate the side-effect-free condition subset allowed in MWL content. */
|
|
8
|
+
export declare function evaluateCondition(source: string, context: MwlConditionContext, options?: MwlConditionOptions): boolean;
|
|
9
|
+
//# sourceMappingURL=conditions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditions.d.ts","sourceRoot":"","sources":["../../src/mwl/conditions.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAC1D,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAC9E,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,EAAE,SAAS,iBAAiB,EAAE,KAAK,iBAAiB,CAAC;AAE9F,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;CAChE;AAED,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,mBAAwB,GAC/B,OAAO,CAoBT"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/** Evaluate the side-effect-free condition subset allowed in MWL content. */
|
|
2
|
+
export function evaluateCondition(source, context, options = {}) {
|
|
3
|
+
const whereIndex = source.search(/\s+where\s+/);
|
|
4
|
+
const expression = whereIndex < 0 ? source : source.slice(0, whereIndex);
|
|
5
|
+
const values = { ...context };
|
|
6
|
+
if (whereIndex >= 0) {
|
|
7
|
+
for (const binding of source
|
|
8
|
+
.slice(whereIndex)
|
|
9
|
+
.replace(/^\s+where\s+/, '')
|
|
10
|
+
.split(',')) {
|
|
11
|
+
const match = /^\s*([A-Za-z_][A-Za-z0-9_.-]*)\s*=\s*(.+)\s*$/.exec(binding);
|
|
12
|
+
if (!match)
|
|
13
|
+
throw new Error(`invalid MWL where binding: ${binding}`);
|
|
14
|
+
const bindingParser = new ConditionParser(match[2], values, options.helpers ?? {});
|
|
15
|
+
values[match[1]] = bindingParser.parseOr();
|
|
16
|
+
if (!bindingParser.atEnd())
|
|
17
|
+
throw new Error(`invalid MWL where binding: ${binding}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const parser = new ConditionParser(expression, values, options.helpers ?? {});
|
|
21
|
+
const result = parser.parseOr();
|
|
22
|
+
if (!parser.atEnd())
|
|
23
|
+
throw new Error(`unexpected token in MWL condition: ${parser.peek()}`);
|
|
24
|
+
return asBoolean(result);
|
|
25
|
+
}
|
|
26
|
+
class ConditionParser {
|
|
27
|
+
constructor(source, context, helpers) {
|
|
28
|
+
this.index = 0;
|
|
29
|
+
this.tokens = tokenize(source);
|
|
30
|
+
this.context = context;
|
|
31
|
+
this.helpers = helpers;
|
|
32
|
+
}
|
|
33
|
+
parseOr() {
|
|
34
|
+
let value = this.parseAnd();
|
|
35
|
+
while (this.take('or'))
|
|
36
|
+
value = asBoolean(value) || asBoolean(this.parseAnd());
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
parseAnd() {
|
|
40
|
+
let value = this.parseNot();
|
|
41
|
+
while (this.take('and'))
|
|
42
|
+
value = asBoolean(value) && asBoolean(this.parseNot());
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
parseNot() {
|
|
46
|
+
if (this.take('not'))
|
|
47
|
+
return !asBoolean(this.parseNot());
|
|
48
|
+
return this.parseComparison();
|
|
49
|
+
}
|
|
50
|
+
parseComparison() {
|
|
51
|
+
const left = this.parseAdditive();
|
|
52
|
+
const op = this.peek();
|
|
53
|
+
if (!['==', '~=', '<', '<=', '>', '>='].includes(op))
|
|
54
|
+
return left;
|
|
55
|
+
this.index++;
|
|
56
|
+
const right = this.parseAdditive();
|
|
57
|
+
if (op === '==')
|
|
58
|
+
return left === right;
|
|
59
|
+
if (op === '~=')
|
|
60
|
+
return left !== right;
|
|
61
|
+
if (typeof left !== 'number' || typeof right !== 'number')
|
|
62
|
+
throw new Error(`${op} requires numeric operands`);
|
|
63
|
+
if (op === '<')
|
|
64
|
+
return left < right;
|
|
65
|
+
if (op === '<=')
|
|
66
|
+
return left <= right;
|
|
67
|
+
if (op === '>')
|
|
68
|
+
return left > right;
|
|
69
|
+
return left >= right;
|
|
70
|
+
}
|
|
71
|
+
parseAdditive() {
|
|
72
|
+
let value = this.parseMultiplicative();
|
|
73
|
+
while (this.peek() === '+' || this.peek() === '-') {
|
|
74
|
+
const op = this.tokens[this.index++];
|
|
75
|
+
const right = this.parseMultiplicative();
|
|
76
|
+
if (typeof value !== 'number' || typeof right !== 'number')
|
|
77
|
+
throw new Error(`${op} requires numeric operands`);
|
|
78
|
+
value = op === '+' ? value + right : value - right;
|
|
79
|
+
}
|
|
80
|
+
return value;
|
|
81
|
+
}
|
|
82
|
+
parseMultiplicative() {
|
|
83
|
+
let value = this.parsePrimary();
|
|
84
|
+
while (this.peek() === '*' || this.peek() === '/') {
|
|
85
|
+
const op = this.tokens[this.index++];
|
|
86
|
+
const right = this.parsePrimary();
|
|
87
|
+
if (typeof value !== 'number' || typeof right !== 'number')
|
|
88
|
+
throw new Error(`${op} requires numeric operands`);
|
|
89
|
+
if (op === '/' && right === 0)
|
|
90
|
+
throw new Error('division by zero in MWL condition');
|
|
91
|
+
value = op === '*' ? value * right : value / right;
|
|
92
|
+
}
|
|
93
|
+
return value;
|
|
94
|
+
}
|
|
95
|
+
parsePrimary() {
|
|
96
|
+
if (this.take('(')) {
|
|
97
|
+
const value = this.parseOr();
|
|
98
|
+
this.expect(')');
|
|
99
|
+
return value;
|
|
100
|
+
}
|
|
101
|
+
const token = this.tokens[this.index++];
|
|
102
|
+
if (token === undefined)
|
|
103
|
+
throw new Error('incomplete MWL condition');
|
|
104
|
+
if (/^-?(?:\d+(?:\.\d*)?|\.\d+)$/.test(token))
|
|
105
|
+
return Number(token);
|
|
106
|
+
if (token === 'true' || token === 'yes')
|
|
107
|
+
return true;
|
|
108
|
+
if (token === 'false' || token === 'no')
|
|
109
|
+
return false;
|
|
110
|
+
if (token.startsWith('"') || token.startsWith("'"))
|
|
111
|
+
return token.slice(1, -1);
|
|
112
|
+
const helper = this.helpers[token];
|
|
113
|
+
if (helper && this.take('(')) {
|
|
114
|
+
const args = [];
|
|
115
|
+
if (!this.take(')')) {
|
|
116
|
+
do
|
|
117
|
+
args.push(this.parseOr());
|
|
118
|
+
while (this.take(','));
|
|
119
|
+
this.expect(')');
|
|
120
|
+
}
|
|
121
|
+
return helper(...args);
|
|
122
|
+
}
|
|
123
|
+
const value = this.context[token];
|
|
124
|
+
if (value === undefined)
|
|
125
|
+
throw new Error(`missing MWL condition variable "${token}"`);
|
|
126
|
+
return value;
|
|
127
|
+
}
|
|
128
|
+
take(token) {
|
|
129
|
+
if (this.peek() !== token)
|
|
130
|
+
return false;
|
|
131
|
+
this.index++;
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
expect(token) {
|
|
135
|
+
if (!this.take(token))
|
|
136
|
+
throw new Error(`expected "${token}" in MWL condition`);
|
|
137
|
+
}
|
|
138
|
+
peek() {
|
|
139
|
+
return this.tokens[this.index] ?? '<end>';
|
|
140
|
+
}
|
|
141
|
+
atEnd() {
|
|
142
|
+
return this.index >= this.tokens.length;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function tokenize(source) {
|
|
146
|
+
const tokens = [];
|
|
147
|
+
const pattern = /\s*(?:("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|([A-Za-z_][A-Za-z0-9_.-]*)|(-?(?:\d+(?:\.\d*)?|\.\d+))|(==|~=|<=|>=|[()+*/,<>-]))/y;
|
|
148
|
+
let index = 0;
|
|
149
|
+
while (index < source.length) {
|
|
150
|
+
pattern.lastIndex = index;
|
|
151
|
+
const match = pattern.exec(source);
|
|
152
|
+
if (!match)
|
|
153
|
+
throw new Error(`invalid MWL condition near "${source.slice(index)}"`);
|
|
154
|
+
tokens.push(match[1] ?? match[2] ?? match[3] ?? match[4]);
|
|
155
|
+
index = pattern.lastIndex;
|
|
156
|
+
}
|
|
157
|
+
return tokens;
|
|
158
|
+
}
|
|
159
|
+
function asBoolean(value) {
|
|
160
|
+
return value !== false && value !== 0 && value !== '';
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=conditions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditions.js","sourceRoot":"","sources":["../../src/mwl/conditions.ts"],"names":[],"mappings":"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"}
|
package/dist/mwl/content.d.ts
CHANGED
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
import type { MwlCompiledGame } from './compiler.ts';
|
|
2
|
+
import { type MwlTableColumn } from './schema.ts';
|
|
2
3
|
export interface MwlEffectDefinition {
|
|
3
4
|
readonly applyTo: string;
|
|
4
5
|
readonly operation?: string;
|
|
5
6
|
readonly value?: string;
|
|
6
7
|
readonly range?: string;
|
|
7
8
|
}
|
|
9
|
+
export interface MwlTableDefinition {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly columns: readonly MwlTableColumn[];
|
|
12
|
+
readonly rows: readonly Readonly<Record<string, unknown>>[];
|
|
13
|
+
}
|
|
14
|
+
export interface MwlCampaignDefinition {
|
|
15
|
+
readonly id: string;
|
|
16
|
+
readonly name?: string;
|
|
17
|
+
readonly title?: string;
|
|
18
|
+
readonly description?: string;
|
|
19
|
+
readonly startScene?: string;
|
|
20
|
+
}
|
|
8
21
|
export interface MwlItemDefinition {
|
|
9
22
|
readonly id: string;
|
|
10
23
|
readonly name: string;
|
|
@@ -24,6 +37,25 @@ export interface MwlMonsterDefinition {
|
|
|
24
37
|
readonly experience?: number;
|
|
25
38
|
readonly maxLevel?: number;
|
|
26
39
|
readonly image?: string;
|
|
40
|
+
readonly types?: readonly string[];
|
|
41
|
+
readonly baseStats?: Readonly<Record<string, number>>;
|
|
42
|
+
}
|
|
43
|
+
export interface MwlMoveDefinition {
|
|
44
|
+
readonly id: string;
|
|
45
|
+
readonly type: string;
|
|
46
|
+
readonly target: string;
|
|
47
|
+
readonly power?: number;
|
|
48
|
+
readonly cost?: number;
|
|
49
|
+
}
|
|
50
|
+
export interface MwlTypeMatchupDefinition {
|
|
51
|
+
readonly attacker: string;
|
|
52
|
+
readonly defender: string;
|
|
53
|
+
readonly multiplier: number;
|
|
54
|
+
}
|
|
55
|
+
export interface MwlEvolutionDefinition {
|
|
56
|
+
readonly from: string;
|
|
57
|
+
readonly into: string;
|
|
58
|
+
readonly level: number;
|
|
27
59
|
}
|
|
28
60
|
export interface MwlStatusDefinition {
|
|
29
61
|
readonly id: string;
|
|
@@ -43,12 +75,41 @@ export interface MwlTurnClockDefinition {
|
|
|
43
75
|
readonly tick?: number;
|
|
44
76
|
readonly hunger?: number;
|
|
45
77
|
}
|
|
78
|
+
export interface MwlBehaviorDefinition {
|
|
79
|
+
readonly id: string;
|
|
80
|
+
readonly when?: string;
|
|
81
|
+
readonly action?: string;
|
|
82
|
+
readonly hook?: string;
|
|
83
|
+
}
|
|
84
|
+
export interface MwlAiDefinition {
|
|
85
|
+
readonly id: string;
|
|
86
|
+
readonly strategy?: string;
|
|
87
|
+
readonly target?: string;
|
|
88
|
+
readonly difficulty?: number;
|
|
89
|
+
readonly scope?: 'actor' | 'controller';
|
|
90
|
+
readonly provider?: 'javascript' | 'lua';
|
|
91
|
+
readonly algorithm?: 'rules' | 'alpha_beta';
|
|
92
|
+
readonly depth?: number;
|
|
93
|
+
readonly maxNodes?: number;
|
|
94
|
+
readonly player?: string;
|
|
95
|
+
readonly moves?: string;
|
|
96
|
+
readonly apply?: string;
|
|
97
|
+
readonly terminal?: string;
|
|
98
|
+
readonly evaluate?: string;
|
|
99
|
+
readonly behaviors: readonly MwlBehaviorDefinition[];
|
|
100
|
+
}
|
|
46
101
|
export interface MwlContentCatalog {
|
|
102
|
+
readonly campaigns: readonly MwlCampaignDefinition[];
|
|
47
103
|
readonly items: readonly MwlItemDefinition[];
|
|
48
104
|
readonly monsters: readonly MwlMonsterDefinition[];
|
|
49
105
|
readonly statuses: readonly MwlStatusDefinition[];
|
|
50
106
|
readonly loot: readonly MwlLootDefinition[];
|
|
51
107
|
readonly turnClocks: readonly MwlTurnClockDefinition[];
|
|
108
|
+
readonly ai: readonly MwlAiDefinition[];
|
|
109
|
+
readonly moves: readonly MwlMoveDefinition[];
|
|
110
|
+
readonly typeMatchups: readonly MwlTypeMatchupDefinition[];
|
|
111
|
+
readonly evolutions: readonly MwlEvolutionDefinition[];
|
|
112
|
+
readonly tables: readonly MwlTableDefinition[];
|
|
52
113
|
}
|
|
53
114
|
export declare function contentCatalog(game: MwlCompiledGame): MwlContentCatalog;
|
|
54
115
|
//# sourceMappingURL=content.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/mwl/content.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/mwl/content.ts"],"names":[],"mappings":"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"}
|