@datamoc/mw_games 0.6.0 → 0.7.1
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/README.md +66 -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 +22 -19
- package/dist/mwl/actors.d.ts +16 -0
- package/dist/mwl/actors.d.ts.map +1 -0
- package/dist/mwl/actors.js +33 -0
- package/dist/mwl/actors.js.map +1 -0
- package/dist/mwl/catalog.d.ts +13 -0
- package/dist/mwl/catalog.d.ts.map +1 -0
- package/dist/mwl/catalog.js +67 -0
- package/dist/mwl/catalog.js.map +1 -0
- package/dist/mwl/compiler.d.ts +51 -0
- package/dist/mwl/compiler.d.ts.map +1 -0
- package/dist/mwl/compiler.js +119 -0
- package/dist/mwl/compiler.js.map +1 -0
- package/dist/mwl/content.d.ts +90 -0
- package/dist/mwl/content.d.ts.map +1 -0
- package/dist/mwl/content.js +146 -0
- package/dist/mwl/content.js.map +1 -0
- package/dist/mwl/expression.d.ts +21 -0
- package/dist/mwl/expression.d.ts.map +1 -0
- package/dist/mwl/expression.js +110 -0
- package/dist/mwl/expression.js.map +1 -0
- package/dist/mwl/grammar.d.ts +39 -0
- package/dist/mwl/grammar.d.ts.map +1 -0
- package/dist/mwl/grammar.js +204 -0
- package/dist/mwl/grammar.js.map +1 -0
- package/dist/mwl/hooks.d.ts +81 -0
- package/dist/mwl/hooks.d.ts.map +1 -0
- package/dist/mwl/hooks.js +78 -0
- package/dist/mwl/hooks.js.map +1 -0
- package/dist/mwl/index.d.ts +21 -0
- package/dist/mwl/index.d.ts.map +1 -0
- package/dist/mwl/index.js +11 -0
- package/dist/mwl/index.js.map +1 -0
- package/dist/mwl/persistence.d.ts +15 -0
- package/dist/mwl/persistence.d.ts.map +1 -0
- package/dist/mwl/persistence.js +41 -0
- package/dist/mwl/persistence.js.map +1 -0
- package/dist/mwl/runtime.d.ts +196 -0
- package/dist/mwl/runtime.d.ts.map +1 -0
- package/dist/mwl/runtime.js +587 -0
- package/dist/mwl/runtime.js.map +1 -0
- package/dist/mwl/schema.d.ts +20 -0
- package/dist/mwl/schema.d.ts.map +1 -0
- package/dist/mwl/schema.js +379 -0
- package/dist/mwl/schema.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +15 -4
- package/tools/extract-html.d.mts +18 -0
- package/tools/extract-html.mjs +235 -0
- package/tools/mwl.mjs +197 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export function encodeSave(world, options) {
|
|
2
|
+
if (!Number.isInteger(options.version) || options.version < 1)
|
|
3
|
+
throw new Error('MWL save version must be a positive integer');
|
|
4
|
+
return JSON.stringify({ format: 'mwl-save', version: options.version, world });
|
|
5
|
+
}
|
|
6
|
+
export function decodeSave(snapshot, options) {
|
|
7
|
+
const value = JSON.parse(snapshot);
|
|
8
|
+
const envelope = isEnvelope(value) ? value : { format: 'mwl-save', version: 1, world: value };
|
|
9
|
+
if (envelope.version > options.version)
|
|
10
|
+
throw new Error(`MWL save version ${envelope.version} is newer than supported version ${options.version}`);
|
|
11
|
+
let world = validateWorld(envelope.world);
|
|
12
|
+
for (let version = envelope.version; version < options.version; version++) {
|
|
13
|
+
const migration = options.migrations?.[version + 1];
|
|
14
|
+
if (!migration)
|
|
15
|
+
throw new Error(`missing MWL save migration to version ${version + 1}`);
|
|
16
|
+
world = validateWorld(migration(world));
|
|
17
|
+
}
|
|
18
|
+
return world;
|
|
19
|
+
}
|
|
20
|
+
export function validateWorld(value) {
|
|
21
|
+
if (!value || typeof value !== 'object')
|
|
22
|
+
throw new Error('invalid MWL saved world');
|
|
23
|
+
const world = value;
|
|
24
|
+
if (!Number.isInteger(world.turn) ||
|
|
25
|
+
!world.variables ||
|
|
26
|
+
typeof world.variables !== 'object' ||
|
|
27
|
+
!world.units ||
|
|
28
|
+
typeof world.units !== 'object')
|
|
29
|
+
throw new Error('invalid MWL saved world: turn, variables, and units are required');
|
|
30
|
+
if (world.status !== undefined && !['playing', 'won', 'lost'].includes(world.status))
|
|
31
|
+
throw new Error('invalid MWL saved world status');
|
|
32
|
+
return structuredClone(world);
|
|
33
|
+
}
|
|
34
|
+
function isEnvelope(value) {
|
|
35
|
+
return (!!value &&
|
|
36
|
+
typeof value === 'object' &&
|
|
37
|
+
value.format === 'mwl-save' &&
|
|
38
|
+
typeof value.version === 'number' &&
|
|
39
|
+
'world' in value);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/mwl/persistence.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,UAAU,CAAC,KAAe,EAAE,OAA8B;IACzE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAA4B,CAAC,CAAC;AAC1G,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,OAA8B;IAC1E,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAmB,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAiB,EAAE,CAAC;IACnH,IAAI,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO;QACrC,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,CAAC,OAAO,oCAAoC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5G,IAAI,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1C,KAAK,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;QAC3E,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC;QACxF,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC3C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,KAA0B,CAAC;IACzC,IACC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;QAC7B,CAAC,KAAK,CAAC,SAAS;QAChB,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QACnC,CAAC,KAAK,CAAC,KAAK;QACZ,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAE/B,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACrF,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QACnF,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACnD,OAAO,eAAe,CAAC,KAAiB,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IACjC,OAAO,CACN,CAAC,CAAC,KAAK;QACP,OAAO,KAAK,KAAK,QAAQ;QACxB,KAA8B,CAAC,MAAM,KAAK,UAAU;QACrD,OAAQ,KAA+B,CAAC,OAAO,KAAK,QAAQ;QAC5D,OAAO,IAAI,KAAK,CAChB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import type { MwlCompiledGame } from './compiler.ts';
|
|
2
|
+
import type { AiHook, CommandHook, GeneratorHook, MigrationHook, ModifierHook, PredicateHook } from './hooks.ts';
|
|
3
|
+
import { type MwlPersistenceOptions } from './persistence.ts';
|
|
4
|
+
export interface MwlMapStart {
|
|
5
|
+
readonly x: number;
|
|
6
|
+
readonly y: number;
|
|
7
|
+
}
|
|
8
|
+
export interface MwlMap {
|
|
9
|
+
readonly id: string;
|
|
10
|
+
readonly width: number;
|
|
11
|
+
readonly height: number;
|
|
12
|
+
/** row-major terrain codes, keep markers stripped */
|
|
13
|
+
readonly codes: readonly string[];
|
|
14
|
+
/** side number -> keep/start positions */
|
|
15
|
+
readonly starts: Readonly<Record<number, readonly MwlMapStart[]>>;
|
|
16
|
+
}
|
|
17
|
+
export interface MwlWorld {
|
|
18
|
+
readonly variables: Record<string, string | number | boolean>;
|
|
19
|
+
readonly units: Record<string, {
|
|
20
|
+
hp: number;
|
|
21
|
+
x: number;
|
|
22
|
+
y: number;
|
|
23
|
+
alive: boolean;
|
|
24
|
+
type?: string;
|
|
25
|
+
side?: number;
|
|
26
|
+
moves?: number;
|
|
27
|
+
}>;
|
|
28
|
+
readonly sides: Record<string, {
|
|
29
|
+
gold: number;
|
|
30
|
+
income: number;
|
|
31
|
+
leader?: string;
|
|
32
|
+
controller?: string;
|
|
33
|
+
recruit?: string;
|
|
34
|
+
}>;
|
|
35
|
+
readonly maps: Record<string, {
|
|
36
|
+
terrain: string;
|
|
37
|
+
file?: string;
|
|
38
|
+
}>;
|
|
39
|
+
gold: Record<string, number>;
|
|
40
|
+
turn: number;
|
|
41
|
+
status: 'playing' | 'won' | 'lost';
|
|
42
|
+
/** the primary map, when the content declares one */
|
|
43
|
+
map?: MwlMap | null;
|
|
44
|
+
/** the current schedule entry, by id */
|
|
45
|
+
timeOfDay?: string;
|
|
46
|
+
scheduleIndex?: number;
|
|
47
|
+
/** ids of one-shot events that already fired, so a restore keeps them spent */
|
|
48
|
+
firedEvents?: string[];
|
|
49
|
+
}
|
|
50
|
+
/** One `[message]`: the text plus whatever a game needs to show it. */
|
|
51
|
+
export interface MwlMessage {
|
|
52
|
+
readonly text: string;
|
|
53
|
+
readonly speaker?: string;
|
|
54
|
+
readonly portrait?: string;
|
|
55
|
+
readonly side?: number;
|
|
56
|
+
}
|
|
57
|
+
/** The hook implementations a game provides to the runtime. */
|
|
58
|
+
export interface MwlHookRegistry {
|
|
59
|
+
readonly predicate?: Readonly<Record<string, PredicateHook>>;
|
|
60
|
+
readonly modifier?: Readonly<Record<string, ModifierHook>>;
|
|
61
|
+
readonly generator?: Readonly<Record<string, GeneratorHook>>;
|
|
62
|
+
readonly command?: Readonly<Record<string, CommandHook>>;
|
|
63
|
+
readonly ai?: Readonly<Record<string, AiHook>>;
|
|
64
|
+
readonly migration?: Readonly<Record<string, MigrationHook>>;
|
|
65
|
+
}
|
|
66
|
+
export interface MwlRuntimeOptions {
|
|
67
|
+
readonly world?: MwlWorld;
|
|
68
|
+
/** called for every `[message]` command, with its speaker and portrait */
|
|
69
|
+
readonly onMessage?: (message: MwlMessage) => void;
|
|
70
|
+
/** resolve a `[map] file=` reference to its text */
|
|
71
|
+
readonly resolveMap?: (file: string) => string;
|
|
72
|
+
readonly hooks?: MwlHookRegistry;
|
|
73
|
+
/** schema version and migrations used by save/restore; defaults to version 1 */
|
|
74
|
+
readonly persistence?: MwlPersistenceOptions;
|
|
75
|
+
}
|
|
76
|
+
export type MwlCommand = {
|
|
77
|
+
readonly name: 'set_variable';
|
|
78
|
+
readonly target: string;
|
|
79
|
+
readonly value: string | number | boolean;
|
|
80
|
+
} | {
|
|
81
|
+
readonly name: 'modify_gold';
|
|
82
|
+
readonly target: string;
|
|
83
|
+
readonly amount: number;
|
|
84
|
+
} | {
|
|
85
|
+
readonly name: 'move';
|
|
86
|
+
readonly target: string;
|
|
87
|
+
readonly x: number;
|
|
88
|
+
readonly y: number;
|
|
89
|
+
} | {
|
|
90
|
+
readonly name: 'spawn';
|
|
91
|
+
readonly target: string;
|
|
92
|
+
readonly x: number;
|
|
93
|
+
readonly y: number;
|
|
94
|
+
readonly hp: number;
|
|
95
|
+
} | {
|
|
96
|
+
readonly name: 'kill';
|
|
97
|
+
readonly target: string;
|
|
98
|
+
} | {
|
|
99
|
+
readonly name: 'attack';
|
|
100
|
+
readonly target: string;
|
|
101
|
+
readonly amount: number;
|
|
102
|
+
} | {
|
|
103
|
+
readonly name: 'end_turn';
|
|
104
|
+
} | {
|
|
105
|
+
readonly name: 'win';
|
|
106
|
+
} | {
|
|
107
|
+
readonly name: 'lose';
|
|
108
|
+
};
|
|
109
|
+
export declare function createWorld(): MwlWorld;
|
|
110
|
+
/**
|
|
111
|
+
* Parse map text: one row per line, comma-separated codes. A token may be
|
|
112
|
+
* `<side> <code>` to mark that side's keep/start, which is how a leader knows
|
|
113
|
+
* where to appear.
|
|
114
|
+
*/
|
|
115
|
+
export declare function parseTerrain(text: string): {
|
|
116
|
+
width: number;
|
|
117
|
+
height: number;
|
|
118
|
+
codes: string[];
|
|
119
|
+
starts: Record<number, {
|
|
120
|
+
x: number;
|
|
121
|
+
y: number;
|
|
122
|
+
}[]>;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Runtime for compiled MWL content. It never parses source text during play.
|
|
126
|
+
*
|
|
127
|
+
* The framework runtime owns what is game-agnostic: maps, sides, units, turn
|
|
128
|
+
* order, the schedule, objectives, events, and save/load. Game rules that need
|
|
129
|
+
* real data (pathfinding costs, combat formulas) stay in the engine adapter;
|
|
130
|
+
* this runtime's `move` is a bounds and occupancy check, and `attack` applies
|
|
131
|
+
* the amount the content asks for.
|
|
132
|
+
*/
|
|
133
|
+
export declare class MwlRuntime {
|
|
134
|
+
readonly game: MwlCompiledGame;
|
|
135
|
+
readonly world: MwlWorld;
|
|
136
|
+
private readonly onMessage?;
|
|
137
|
+
private readonly resolveMap?;
|
|
138
|
+
private readonly hooks?;
|
|
139
|
+
private readonly persistence;
|
|
140
|
+
private readonly unitTypes;
|
|
141
|
+
private schedule;
|
|
142
|
+
constructor(game: MwlCompiledGame, options?: MwlRuntimeOptions);
|
|
143
|
+
run(trigger: string): void;
|
|
144
|
+
/**
|
|
145
|
+
* Fire the `on=moveto` events for a unit that has just arrived somewhere.
|
|
146
|
+
* The runtime's own `[move]` command calls this, and so does a game whose
|
|
147
|
+
* engine moved the unit: write the new position into `world.units` first,
|
|
148
|
+
* then call this with the unit id.
|
|
149
|
+
*
|
|
150
|
+
* An event matches when `x`/`y` (when given) are the unit's position, and
|
|
151
|
+
* `unit`/`side` (when given) are the unit's. A moveto event fires once by
|
|
152
|
+
* default; pass `once=false` on the event to let it fire every time.
|
|
153
|
+
*/
|
|
154
|
+
fireMoveto(id: string): void;
|
|
155
|
+
/** A `moveto` event is a story beat: it fires once unless told otherwise. */
|
|
156
|
+
private claimEvent;
|
|
157
|
+
private eventFiltersMatch;
|
|
158
|
+
private executeEvent;
|
|
159
|
+
/**
|
|
160
|
+
* Evaluate `[objectives]` now and return the resulting status. A game whose
|
|
161
|
+
* own engine resolved the actions (real movement, combat) calls this after
|
|
162
|
+
* writing the results into `world`; `run` already calls it itself.
|
|
163
|
+
*/
|
|
164
|
+
evaluate(): MwlWorld['status'];
|
|
165
|
+
save(): string;
|
|
166
|
+
snapshot(): string;
|
|
167
|
+
restore(snapshot: string): void;
|
|
168
|
+
private loadUnitTypes;
|
|
169
|
+
private loadSchedule;
|
|
170
|
+
private loadInitialContent;
|
|
171
|
+
private buildMap;
|
|
172
|
+
private loadInitialUnits;
|
|
173
|
+
private loadLeaders;
|
|
174
|
+
private unitAt;
|
|
175
|
+
private executeNode;
|
|
176
|
+
private runHook;
|
|
177
|
+
private applyMove;
|
|
178
|
+
/** Deliver a `[message]` to the game, with speaker and portrait when given. */
|
|
179
|
+
private showMessage;
|
|
180
|
+
private spawnUnit;
|
|
181
|
+
private killUnit;
|
|
182
|
+
private addGold;
|
|
183
|
+
private endTurn;
|
|
184
|
+
private advanceSchedule;
|
|
185
|
+
private resetMoves;
|
|
186
|
+
private filterMatches;
|
|
187
|
+
private conditionMatches;
|
|
188
|
+
private conditionMet;
|
|
189
|
+
private checkObjectives;
|
|
190
|
+
private worldView;
|
|
191
|
+
private emit;
|
|
192
|
+
private attack;
|
|
193
|
+
private nodes;
|
|
194
|
+
}
|
|
195
|
+
export declare function execute(world: MwlWorld, command: MwlCommand): void;
|
|
196
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/mwl/runtime.ts"],"names":[],"mappings":"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"}
|