@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.
- package/CHANGELOG.md +977 -0
- package/README.md +27 -2
- 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 +96 -96
- package/dist/mwl/actors.d.ts +3 -1
- package/dist/mwl/actors.d.ts.map +1 -1
- package/dist/mwl/actors.js +5 -0
- package/dist/mwl/actors.js.map +1 -1
- package/dist/mwl/catalog.d.ts.map +1 -1
- package/dist/mwl/catalog.js +2 -10
- package/dist/mwl/catalog.js.map +1 -1
- package/dist/mwl/compiler.d.ts +14 -0
- package/dist/mwl/compiler.d.ts.map +1 -1
- package/dist/mwl/compiler.js +23 -0
- 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 +25 -0
- package/dist/mwl/content.d.ts.map +1 -1
- package/dist/mwl/content.js +46 -34
- package/dist/mwl/content.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/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/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 +37 -1
- package/dist/mwl/runtime.d.ts.map +1 -1
- package/dist/mwl/runtime.js +170 -19
- 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 +195 -8
- 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/roguelike/MultiTurnBeam.d.ts +70 -0
- package/dist/roguelike/MultiTurnBeam.d.ts.map +1 -0
- package/dist/roguelike/MultiTurnBeam.js +117 -0
- package/dist/roguelike/MultiTurnBeam.js.map +1 -0
- package/dist/roguelike/Targeting.d.ts +21 -0
- package/dist/roguelike/Targeting.d.ts.map +1 -1
- package/dist/roguelike/Targeting.js +50 -2
- package/dist/roguelike/Targeting.js.map +1 -1
- package/dist/roguelike/index.d.ts +3 -1
- package/dist/roguelike/index.d.ts.map +1 -1
- package/dist/roguelike/index.js +2 -1
- package/dist/roguelike/index.js.map +1 -1
- package/dist/rpg/automap.d.ts +4 -0
- package/dist/rpg/automap.d.ts.map +1 -1
- package/dist/rpg/automap.js +5 -2
- package/dist/rpg/automap.js.map +1 -1
- package/dist/two-d/render/Minimap.d.ts +16 -0
- package/dist/two-d/render/Minimap.d.ts.map +1 -1
- package/dist/two-d/render/Minimap.js +40 -7
- package/dist/two-d/render/Minimap.js.map +1 -1
- 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 +3 -3
- package/dist/two-d/render/index.d.ts.map +1 -1
- package/dist/two-d/render/index.js +2 -2
- 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 +21 -3
- package/tools/mwl.mjs +32 -6
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// Fengari 0.1 intentionally ships JavaScript without TypeScript declarations.
|
|
2
|
+
// The checked subset is documented in fengari.d.ts.
|
|
3
|
+
// @ts-expect-error Fengari has no declarations in its npm package.
|
|
4
|
+
import { lauxlib, lua, lualib, to_luastring } from 'fengari';
|
|
5
|
+
const DEFAULT_INSTRUCTION_LIMIT = 100_000;
|
|
6
|
+
/** Optional Lua 5.3 host. Fengari is loaded only by this subpath, never by `mwg/mwl`. */
|
|
7
|
+
export function createFengariScriptHost(options = {}) {
|
|
8
|
+
const state = lauxlib.luaL_newstate();
|
|
9
|
+
lualib.luaL_openlibs(state);
|
|
10
|
+
const limit = options.instructionLimit ?? DEFAULT_INSTRUCTION_LIMIT;
|
|
11
|
+
if (!Number.isInteger(limit) || limit < 1)
|
|
12
|
+
throw new RangeError('instructionLimit must be a positive integer');
|
|
13
|
+
let randomState = (options.seed ?? 0x6d7767) >>> 0;
|
|
14
|
+
let emit;
|
|
15
|
+
const push = (value) => {
|
|
16
|
+
if (value === null)
|
|
17
|
+
return lua.lua_pushnil(state);
|
|
18
|
+
if (typeof value === 'boolean')
|
|
19
|
+
return lua.lua_pushboolean(state, value);
|
|
20
|
+
if (typeof value === 'number')
|
|
21
|
+
return lua.lua_pushnumber(state, value);
|
|
22
|
+
if (typeof value === 'string')
|
|
23
|
+
return lua.lua_pushstring(state, to_luastring(value));
|
|
24
|
+
lua.lua_createtable(state, Array.isArray(value) ? value.length : 0, Array.isArray(value) ? 0 : Object.keys(value).length);
|
|
25
|
+
if (Array.isArray(value)) {
|
|
26
|
+
value.forEach((entry, index) => {
|
|
27
|
+
push(entry);
|
|
28
|
+
lua.lua_seti(state, -2, index + 1);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
for (const [key, entry] of Object.entries(value)) {
|
|
33
|
+
push(entry);
|
|
34
|
+
lua.lua_setfield(state, -2, to_luastring(key));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const read = (index, depth = 0) => {
|
|
39
|
+
const type = lua.lua_type(state, index);
|
|
40
|
+
if (type === lua.LUA_TNIL)
|
|
41
|
+
return null;
|
|
42
|
+
if (type === lua.LUA_TBOOLEAN)
|
|
43
|
+
return lua.lua_toboolean(state, index);
|
|
44
|
+
if (type === lua.LUA_TNUMBER)
|
|
45
|
+
return lua.lua_tonumber(state, index);
|
|
46
|
+
if (type === lua.LUA_TSTRING)
|
|
47
|
+
return lua.lua_tojsstring(state, index) ?? '';
|
|
48
|
+
if (type !== lua.LUA_TTABLE)
|
|
49
|
+
throw new Error('Lua result must be a JSON-compatible value');
|
|
50
|
+
if (depth > 20)
|
|
51
|
+
throw new Error('Lua result is nested too deeply');
|
|
52
|
+
const result = {};
|
|
53
|
+
const tableIndex = index < 0 ? lua.lua_gettop(state) + index + 1 : index;
|
|
54
|
+
lua.lua_pushnil(state);
|
|
55
|
+
while (lua.lua_next(state, tableIndex) !== 0) {
|
|
56
|
+
const key = lua.lua_isinteger(state, -2)
|
|
57
|
+
? String(lua.lua_tointeger(state, -2))
|
|
58
|
+
: lua.lua_tojsstring(state, -2);
|
|
59
|
+
if (key === null)
|
|
60
|
+
throw new Error('Lua table keys must be strings or integers');
|
|
61
|
+
result[key] = read(-1, depth + 1);
|
|
62
|
+
lua.lua_settop(state, -2);
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
};
|
|
66
|
+
const setContext = (context = {}) => {
|
|
67
|
+
for (const [key, value] of Object.entries(context)) {
|
|
68
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key))
|
|
69
|
+
continue;
|
|
70
|
+
push(value);
|
|
71
|
+
lua.lua_setglobal(state, to_luastring(key));
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const protectedCall = (args, results) => {
|
|
75
|
+
let remaining = limit;
|
|
76
|
+
lua.lua_sethook(state, () => {
|
|
77
|
+
remaining -= limit > 1000 ? 1000 : 1;
|
|
78
|
+
if (remaining <= 0) {
|
|
79
|
+
lua.lua_pushstring(state, to_luastring('Lua instruction limit exceeded'));
|
|
80
|
+
lua.lua_error(state);
|
|
81
|
+
}
|
|
82
|
+
}, lua.LUA_MASKCOUNT, limit > 1000 ? 1000 : 1);
|
|
83
|
+
const status = lua.lua_pcall(state, args, results, 0);
|
|
84
|
+
lua.lua_sethook(state, null, 0, 0);
|
|
85
|
+
if (status !== lua.LUA_OK)
|
|
86
|
+
throw new Error(lua.lua_tojsstring(state, -1) ?? 'Lua execution error');
|
|
87
|
+
return results === 0 ? null : read(-1);
|
|
88
|
+
};
|
|
89
|
+
const run = (source, results) => {
|
|
90
|
+
lua.lua_settop(state, 0);
|
|
91
|
+
const loadStatus = lauxlib.luaL_loadstring(state, to_luastring(source));
|
|
92
|
+
if (loadStatus !== lua.LUA_OK)
|
|
93
|
+
throw new Error(lua.lua_tojsstring(state, -1) ?? 'Lua syntax error');
|
|
94
|
+
return protectedCall(0, results);
|
|
95
|
+
};
|
|
96
|
+
const install = (context, callback) => {
|
|
97
|
+
emit = callback;
|
|
98
|
+
setContext(context);
|
|
99
|
+
lua.lua_pushjsfunction(state, (currentState) => {
|
|
100
|
+
const name = lua.lua_tojsstring(currentState, 1) ?? '';
|
|
101
|
+
const payload = lua.lua_gettop(currentState) > 1 ? read(2) : undefined;
|
|
102
|
+
emit?.(name, payload);
|
|
103
|
+
return 0;
|
|
104
|
+
});
|
|
105
|
+
lua.lua_setglobal(state, to_luastring('mwg_emit'));
|
|
106
|
+
lua.lua_pushjsfunction(state, (currentState) => {
|
|
107
|
+
randomState = (Math.imul(randomState, 1664525) + 1013904223) >>> 0;
|
|
108
|
+
lua.lua_pushnumber(currentState, randomState / 0x1_0000_0000);
|
|
109
|
+
return 1;
|
|
110
|
+
});
|
|
111
|
+
lua.lua_setglobal(state, to_luastring('__mwg_random'));
|
|
112
|
+
const sandbox = 'os=nil; io=nil; debug=nil; package=nil; require=nil; dofile=nil; loadfile=nil; load=nil; math.random=__mwg_random; math.randomseed=function() end';
|
|
113
|
+
run(sandbox, 0);
|
|
114
|
+
};
|
|
115
|
+
return {
|
|
116
|
+
evaluate(source, context = {}) {
|
|
117
|
+
install(context);
|
|
118
|
+
return run(`return (${source})`, 1);
|
|
119
|
+
},
|
|
120
|
+
execute(source, context = {}, callback) {
|
|
121
|
+
install(context, callback);
|
|
122
|
+
run(source, 0);
|
|
123
|
+
},
|
|
124
|
+
call(name, args = [], context = {}, callback) {
|
|
125
|
+
install(context, callback);
|
|
126
|
+
lua.lua_settop(state, 0);
|
|
127
|
+
lua.lua_getglobal(state, to_luastring(name));
|
|
128
|
+
args.forEach(push);
|
|
129
|
+
return protectedCall(args.length, 1);
|
|
130
|
+
},
|
|
131
|
+
dispose() {
|
|
132
|
+
lua.lua_close(state);
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=fengari.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fengari.js","sourceRoot":"","sources":["../../src/mwl/fengari.ts"],"names":[],"mappings":"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"}
|
package/dist/mwl/hooks.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { MwlCompiledGame } from './compiler.ts';
|
|
2
2
|
import type { MwlDiagnostic, MwlLocation } from './grammar.ts';
|
|
3
3
|
/**
|
|
4
|
-
* The hook boundary described in
|
|
4
|
+
* The hook boundary described in the MWG architecture documentation. Hooks are the only
|
|
5
5
|
* place JavaScript appears in MWL content. They are referenced by
|
|
6
6
|
* `type:name`, resolved by the tooling, and bundled ahead of time; the runtime
|
|
7
7
|
* never evaluates JavaScript from content.
|
package/dist/mwl/index.d.ts
CHANGED
|
@@ -1,21 +1,30 @@
|
|
|
1
1
|
export { MwlSyntaxError, isGettext, parse, parseValue, preprocess } from './grammar.ts';
|
|
2
2
|
export type { MwlDiagnostic, MwlLocation, MwlNode, MwlPreprocessOptions } from './grammar.ts';
|
|
3
|
-
export { schema01, validate } from './schema.ts';
|
|
4
|
-
export type { MwlTagSchema, MwlValueType } from './schema.ts';
|
|
5
|
-
export { compile, compileNodes, compileSources, emitModule, extractCatalog } from './compiler.ts';
|
|
6
|
-
export type { MwlCatalog, MwlCatalogOptions, MwlCompileOptions, MwlCompiledGame, MwlCompiledNode, MwlSourceFile, } from './compiler.ts';
|
|
3
|
+
export { coerceTableValue, parseTableColumns, schema01, validate } from './schema.ts';
|
|
4
|
+
export type { MwlTableColumn, MwlTagSchema, MwlValueType } from './schema.ts';
|
|
5
|
+
export { compile, compileAndEmitSources, compileNodes, compileSources, emitArtifacts, emitModule, extractCatalog, } from './compiler.ts';
|
|
6
|
+
export type { MwlArtifact, MwlCatalog, MwlCatalogOptions, MwlCompileOptions, MwlCompiledGame, MwlCompiledNode, MwlEmitOptions, MwlSourceFile, } from './compiler.ts';
|
|
7
7
|
export { collectHookReferences, emitHooksDeclaration, hookTypes, parseHookReference, validateHookReferences, } from './hooks.ts';
|
|
8
8
|
export type { AiHook, CommandHook, Emit, GeneratorHook, HookContext, HookReference, HookType, HookTypeMap, HookWorld, MigrationHook, ModifierHook, PredicateHook, } from './hooks.ts';
|
|
9
9
|
export { createWorld, execute, MwlRuntime, parseTerrain } from './runtime.ts';
|
|
10
|
-
export type { MwlCommand, MwlHookRegistry, MwlMap, MwlMapStart, MwlMessage, MwlRuntimeOptions, MwlWorld, } from './runtime.ts';
|
|
10
|
+
export type { MwlCommand, MwlDialogueChoice, MwlHookRegistry, MwlMap, MwlMapStart, MwlMessage, MwlRuntimeOptions, MwlWorld, } from './runtime.ts';
|
|
11
11
|
export { contentCatalog } from './content.ts';
|
|
12
|
-
export type {
|
|
12
|
+
export type { MwlCampaignDefinition } from './content.ts';
|
|
13
|
+
export type { MwlContentCatalog, MwlEffectDefinition, MwlAiDefinition, MwlBehaviorDefinition, MwlItemDefinition, MwlLootDefinition, MwlMonsterDefinition, MwlStatusDefinition, MwlTableDefinition, MwlTurnClockDefinition, } from './content.ts';
|
|
13
14
|
export { evaluateExpression, parseExpression } from './expression.ts';
|
|
14
15
|
export type { MwlExpression, MwlExpressionContext } from './expression.ts';
|
|
15
|
-
export { effectToModifier, inventoryItem, itemDefinition } from './actors.ts';
|
|
16
|
+
export { composeEffects, effectToModifier, inventoryItem, itemDefinition } from './actors.ts';
|
|
16
17
|
export type { MwlActorItem, MwlEquipment } from './actors.ts';
|
|
17
18
|
export { validateCatalog, validateCatalogNodes } from './catalog.ts';
|
|
18
19
|
export type { MwlValidationOptions } from './catalog.ts';
|
|
19
20
|
export { decodeSave, encodeSave, validateWorld } from './persistence.ts';
|
|
20
21
|
export type { MwlMigration, MwlPersistenceOptions, MwlSaveEnvelope } from './persistence.ts';
|
|
22
|
+
export { contentReport } from './report.ts';
|
|
23
|
+
export type { MwlContentReport } from './report.ts';
|
|
24
|
+
export { readAttributes, readChildren } from './readers.ts';
|
|
25
|
+
export type { MwlFieldSpec, MwlReadResult, MwlReaderType } from './readers.ts';
|
|
26
|
+
export { createExpressionScriptHost } from './scripts.ts';
|
|
27
|
+
export type { ScriptContext, ScriptEmit, ScriptHost, ScriptValue } from './scripts.ts';
|
|
28
|
+
export { evaluateCondition } from './conditions.ts';
|
|
29
|
+
export type { MwlConditionContext, MwlConditionHelper, MwlConditionOptions, MwlConditionValue } from './conditions.ts';
|
|
21
30
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/mwl/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mwl/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACxF,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC9F,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mwl/index.ts"],"names":[],"mappings":"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"}
|
package/dist/mwl/index.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
export { MwlSyntaxError, isGettext, parse, parseValue, preprocess } from './grammar.js';
|
|
2
|
-
export { schema01, validate } from './schema.js';
|
|
3
|
-
export { compile, compileNodes, compileSources, emitModule, extractCatalog } from './compiler.js';
|
|
2
|
+
export { coerceTableValue, parseTableColumns, schema01, validate } from './schema.js';
|
|
3
|
+
export { compile, compileAndEmitSources, compileNodes, compileSources, emitArtifacts, emitModule, extractCatalog, } from './compiler.js';
|
|
4
4
|
export { collectHookReferences, emitHooksDeclaration, hookTypes, parseHookReference, validateHookReferences, } from './hooks.js';
|
|
5
5
|
export { createWorld, execute, MwlRuntime, parseTerrain } from './runtime.js';
|
|
6
6
|
export { contentCatalog } from './content.js';
|
|
7
7
|
export { evaluateExpression, parseExpression } from './expression.js';
|
|
8
|
-
export { effectToModifier, inventoryItem, itemDefinition } from './actors.js';
|
|
8
|
+
export { composeEffects, effectToModifier, inventoryItem, itemDefinition } from './actors.js';
|
|
9
9
|
export { validateCatalog, validateCatalogNodes } from './catalog.js';
|
|
10
10
|
export { decodeSave, encodeSave, validateWorld } from './persistence.js';
|
|
11
|
+
export { contentReport } from './report.js';
|
|
12
|
+
export { readAttributes, readChildren } from './readers.js';
|
|
13
|
+
export { createExpressionScriptHost } from './scripts.js';
|
|
14
|
+
export { evaluateCondition } from './conditions.js';
|
|
11
15
|
//# sourceMappingURL=index.js.map
|
package/dist/mwl/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mwl/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAExF,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mwl/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAExF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEtF,OAAO,EACN,OAAO,EACP,qBAAqB,EACrB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,UAAU,EACV,cAAc,GACd,MAAM,eAAe,CAAC;AAWvB,OAAO,EACN,qBAAqB,EACrB,oBAAoB,EACpB,SAAS,EACT,kBAAkB,EAClB,sBAAsB,GACtB,MAAM,YAAY,CAAC;AAepB,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAW9E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAc9C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE9F,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { MwlCompiledNode } from './compiler.ts';
|
|
2
|
+
import type { MwlDiagnostic } from './grammar.ts';
|
|
3
|
+
export type MwlReaderType = 'string' | 'id' | 'number' | 'integer' | 'boolean' | 'id-list' | 'number-list';
|
|
4
|
+
export interface MwlFieldSpec {
|
|
5
|
+
readonly type: MwlReaderType;
|
|
6
|
+
readonly source?: string;
|
|
7
|
+
readonly required?: boolean;
|
|
8
|
+
readonly default?: unknown;
|
|
9
|
+
}
|
|
10
|
+
export interface MwlReadResult<T> {
|
|
11
|
+
readonly value: T;
|
|
12
|
+
readonly diagnostics: readonly MwlDiagnostic[];
|
|
13
|
+
}
|
|
14
|
+
/** Read a compiled node with one shared coercion and diagnostic policy. */
|
|
15
|
+
export declare function readAttributes<T extends Record<string, unknown>>(node: MwlCompiledNode, fields: Readonly<Record<keyof T & string, MwlFieldSpec>>): MwlReadResult<T>;
|
|
16
|
+
/** Collect children without making every game adapter repeat this filter. */
|
|
17
|
+
export declare function readChildren<T>(node: MwlCompiledNode, tag: string, read: (child: MwlCompiledNode) => MwlReadResult<T>): MwlReadResult<readonly T[]>;
|
|
18
|
+
//# sourceMappingURL=readers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readers.d.ts","sourceRoot":"","sources":["../../src/mwl/readers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;AAE3G,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,WAAW,EAAE,SAAS,aAAa,EAAE,CAAC;CAC/C;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/D,IAAI,EAAE,eAAe,EACrB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,YAAY,CAAC,CAAC,GACtD,aAAa,CAAC,CAAC,CAAC,CAoBlB;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,CAAC,EAC7B,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,aAAa,CAAC,CAAC,CAAC,GAChD,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,CAU7B"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/** Read a compiled node with one shared coercion and diagnostic policy. */
|
|
2
|
+
export function readAttributes(node, fields) {
|
|
3
|
+
const value = {};
|
|
4
|
+
const diagnostics = [];
|
|
5
|
+
for (const [name, spec] of Object.entries(fields)) {
|
|
6
|
+
const source = spec.source ?? name;
|
|
7
|
+
const raw = node.attributes[source];
|
|
8
|
+
if (raw === undefined) {
|
|
9
|
+
if (spec.required)
|
|
10
|
+
diagnostics.push(diagnostic('MWL_REQUIRED_FIELD', `missing required attribute "${source}"`, node));
|
|
11
|
+
else if (spec.default !== undefined)
|
|
12
|
+
value[name] = spec.default;
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
const converted = coerce(raw, spec.type);
|
|
16
|
+
if (converted === undefined)
|
|
17
|
+
diagnostics.push(diagnostic('MWL_FIELD_TYPE', `invalid ${spec.type} attribute "${source}": "${raw}"`, node));
|
|
18
|
+
else
|
|
19
|
+
value[name] = converted;
|
|
20
|
+
}
|
|
21
|
+
return { value: value, diagnostics };
|
|
22
|
+
}
|
|
23
|
+
/** Collect children without making every game adapter repeat this filter. */
|
|
24
|
+
export function readChildren(node, tag, read) {
|
|
25
|
+
const values = [];
|
|
26
|
+
const diagnostics = [];
|
|
27
|
+
for (const child of node.children) {
|
|
28
|
+
if (child.tag !== tag)
|
|
29
|
+
continue;
|
|
30
|
+
const result = read(child);
|
|
31
|
+
values.push(result.value);
|
|
32
|
+
diagnostics.push(...result.diagnostics);
|
|
33
|
+
}
|
|
34
|
+
return { value: values, diagnostics };
|
|
35
|
+
}
|
|
36
|
+
function coerce(raw, type) {
|
|
37
|
+
if (type === 'string')
|
|
38
|
+
return raw;
|
|
39
|
+
if (type === 'id')
|
|
40
|
+
return /^[A-Za-z_][\w.-]*$/.test(raw) ? raw : undefined;
|
|
41
|
+
if (type === 'number')
|
|
42
|
+
return Number.isFinite(Number(raw)) ? Number(raw) : undefined;
|
|
43
|
+
if (type === 'integer')
|
|
44
|
+
return /^-?\d+$/.test(raw) ? Number(raw) : undefined;
|
|
45
|
+
if (type === 'boolean')
|
|
46
|
+
return raw === 'true' || raw === 'yes' ? true : raw === 'false' || raw === 'no' ? false : undefined;
|
|
47
|
+
const parts = raw
|
|
48
|
+
.split(',')
|
|
49
|
+
.map((part) => part.trim())
|
|
50
|
+
.filter(Boolean);
|
|
51
|
+
if (type === 'id-list')
|
|
52
|
+
return parts.every((part) => /^[A-Za-z_][\w.-]*$/.test(part)) ? parts : undefined;
|
|
53
|
+
return parts.every((part) => Number.isFinite(Number(part))) ? parts.map(Number) : undefined;
|
|
54
|
+
}
|
|
55
|
+
function diagnostic(code, message, node) {
|
|
56
|
+
return { code, message, location: node.location ?? { file: '<mwl>', line: 1, column: 1 } };
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=readers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readers.js","sourceRoot":"","sources":["../../src/mwl/readers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MwlCompiledGame } from './compiler.ts';
|
|
2
|
+
export interface MwlContentReport {
|
|
3
|
+
readonly tags: Readonly<Record<string, number>>;
|
|
4
|
+
readonly opaqueTags: readonly string[];
|
|
5
|
+
readonly danglingReferences: readonly string[];
|
|
6
|
+
}
|
|
7
|
+
/** Summarise a compiled catalog for parity checks and CI output. */
|
|
8
|
+
export declare function contentReport(game: MwlCompiledGame): MwlContentReport;
|
|
9
|
+
//# sourceMappingURL=report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/mwl/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAIrD,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/C;AAED,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,gBAAgB,CA8BrE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { schema01 } from './schema.js';
|
|
2
|
+
import { flattenNodes } from './utils.js';
|
|
3
|
+
/** Summarise a compiled catalog for parity checks and CI output. */
|
|
4
|
+
export function contentReport(game) {
|
|
5
|
+
const nodes = flattenNodes(game.roots);
|
|
6
|
+
const tags = {};
|
|
7
|
+
const ids = new Set();
|
|
8
|
+
for (const node of nodes) {
|
|
9
|
+
tags[node.tag] = (tags[node.tag] ?? 0) + 1;
|
|
10
|
+
if (node.attributes.id)
|
|
11
|
+
ids.add(node.attributes.id);
|
|
12
|
+
}
|
|
13
|
+
const knownTags = new Set(Object.keys(schema01));
|
|
14
|
+
const opaqueTags = nodes
|
|
15
|
+
.filter((node) => !knownTags.has(node.tag))
|
|
16
|
+
.map((node) => node.tag)
|
|
17
|
+
.filter((tag, index, all) => all.indexOf(tag) === index)
|
|
18
|
+
.sort();
|
|
19
|
+
const references = new Set();
|
|
20
|
+
for (const node of nodes) {
|
|
21
|
+
for (const [key, value] of Object.entries(node.attributes)) {
|
|
22
|
+
if (/^(?:ability|item|terrain|unit|unit_type|weapon)(?:_id)?$/.test(key))
|
|
23
|
+
for (const reference of value
|
|
24
|
+
.split(',')
|
|
25
|
+
.map((part) => part.trim())
|
|
26
|
+
.filter(Boolean))
|
|
27
|
+
references.add(reference);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
tags: Object.fromEntries(Object.entries(tags).sort(([a], [b]) => a.localeCompare(b))),
|
|
32
|
+
opaqueTags,
|
|
33
|
+
danglingReferences: [...references].filter((reference) => !ids.has(reference)).sort(),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/mwl/report.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQ1C,oEAAoE;AACpE,MAAM,UAAU,aAAa,CAAC,IAAqB;IAClD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE;YAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,KAAK;SACtB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC1C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;SACvB,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;SACvD,IAAI,EAAE,CAAC;IACT,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5D,IAAI,0DAA0D,CAAC,IAAI,CAAC,GAAG,CAAC;gBACvE,KAAK,MAAM,SAAS,IAAI,KAAK;qBAC3B,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;qBAC1B,MAAM,CAAC,OAAO,CAAC;oBAChB,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC;IACD,OAAO;QACN,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,UAAU;QACV,kBAAkB,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE;KACrF,CAAC;AACH,CAAC"}
|
package/dist/mwl/runtime.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MwlCompiledGame } from './compiler.ts';
|
|
1
|
+
import type { MwlCompiledGame, MwlCompiledNode } from './compiler.ts';
|
|
2
2
|
import type { AiHook, CommandHook, GeneratorHook, MigrationHook, ModifierHook, PredicateHook } from './hooks.ts';
|
|
3
3
|
import { type MwlPersistenceOptions } from './persistence.ts';
|
|
4
4
|
export interface MwlMapStart {
|
|
@@ -46,6 +46,10 @@ export interface MwlWorld {
|
|
|
46
46
|
scheduleIndex?: number;
|
|
47
47
|
/** ids of one-shot events that already fired, so a restore keeps them spent */
|
|
48
48
|
firedEvents?: string[];
|
|
49
|
+
pendingDialogue?: {
|
|
50
|
+
id: string;
|
|
51
|
+
choices: readonly MwlDialogueChoice[];
|
|
52
|
+
};
|
|
49
53
|
}
|
|
50
54
|
/** One `[message]`: the text plus whatever a game needs to show it. */
|
|
51
55
|
export interface MwlMessage {
|
|
@@ -53,6 +57,17 @@ export interface MwlMessage {
|
|
|
53
57
|
readonly speaker?: string;
|
|
54
58
|
readonly portrait?: string;
|
|
55
59
|
readonly side?: number;
|
|
60
|
+
/** choices waiting on the player; answer with `answerDialogue` */
|
|
61
|
+
readonly choices?: readonly MwlDialogueChoice[];
|
|
62
|
+
/** identifies the pending dialogue this message's choices belong to */
|
|
63
|
+
readonly dialogueId?: string;
|
|
64
|
+
}
|
|
65
|
+
/** One offered choice inside a `dialogue`: its label and the event answering runs. */
|
|
66
|
+
export interface MwlDialogueChoice {
|
|
67
|
+
readonly text: string;
|
|
68
|
+
readonly event?: string;
|
|
69
|
+
/** inline branch commands, used when a choice does not name a separate event */
|
|
70
|
+
readonly branch?: readonly MwlCompiledNode[];
|
|
56
71
|
}
|
|
57
72
|
/** The hook implementations a game provides to the runtime. */
|
|
58
73
|
export interface MwlHookRegistry {
|
|
@@ -139,8 +154,12 @@ export declare class MwlRuntime {
|
|
|
139
154
|
private readonly persistence;
|
|
140
155
|
private readonly unitTypes;
|
|
141
156
|
private schedule;
|
|
157
|
+
private pendingDialogue;
|
|
158
|
+
private dialogueCounter;
|
|
142
159
|
constructor(game: MwlCompiledGame, options?: MwlRuntimeOptions);
|
|
143
160
|
run(trigger: string): void;
|
|
161
|
+
/** Fire one named event through the same filter, claim, and execution path as a trigger. */
|
|
162
|
+
fireEvent(id: string): boolean;
|
|
144
163
|
/**
|
|
145
164
|
* Fire the `on=moveto` events for a unit that has just arrived somewhere.
|
|
146
165
|
* The runtime's own `[move]` command calls this, and so does a game whose
|
|
@@ -156,6 +175,22 @@ export declare class MwlRuntime {
|
|
|
156
175
|
private claimEvent;
|
|
157
176
|
private eventFiltersMatch;
|
|
158
177
|
private executeEvent;
|
|
178
|
+
/**
|
|
179
|
+
* Deliver a `dialogue`: its `message`/`say` lines first, then one message
|
|
180
|
+
* carrying the offered `choice`s. A choice names the event answering runs;
|
|
181
|
+
* the game answers later with `answerDialogue`, so content keeps any
|
|
182
|
+
* follow-up commands inside the referenced events rather than after the
|
|
183
|
+
* dialogue. Choices gated by `variable`/`equals` are skipped unless the
|
|
184
|
+
* world variable matches.
|
|
185
|
+
*/
|
|
186
|
+
private showDialogue;
|
|
187
|
+
private showSay;
|
|
188
|
+
/**
|
|
189
|
+
* Answer a pending dialogue: run the chosen choice's event and clear the
|
|
190
|
+
* pending state. Returns false when there is no such pending dialogue or
|
|
191
|
+
* choice; throws when the referenced event does not exist (content error).
|
|
192
|
+
*/
|
|
193
|
+
answerDialogue(dialogueId: string, choiceIndex: number): boolean;
|
|
159
194
|
/**
|
|
160
195
|
* Evaluate `[objectives]` now and return the resulting status. A game whose
|
|
161
196
|
* own engine resolved the actions (real movement, combat) calls this after
|
|
@@ -177,6 +212,7 @@ export declare class MwlRuntime {
|
|
|
177
212
|
private applyMove;
|
|
178
213
|
/** Deliver a `[message]` to the game, with speaker and portrait when given. */
|
|
179
214
|
private showMessage;
|
|
215
|
+
private setVariable;
|
|
180
216
|
private spawnUnit;
|
|
181
217
|
private killUnit;
|
|
182
218
|
private addGold;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/mwl/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/mwl/runtime.ts"],"names":[],"mappings":"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"}
|