rpgmaker-mz-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +425 -0
- package/dist/events/commandBuilders.d.ts +405 -0
- package/dist/events/commandBuilders.d.ts.map +1 -0
- package/dist/events/commandBuilders.js +554 -0
- package/dist/events/commandBuilders.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +105 -0
- package/dist/index.js.map +1 -0
- package/dist/registry.d.ts +81 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +49 -0
- package/dist/registry.js.map +1 -0
- package/dist/tiles/autotile.d.ts +65 -0
- package/dist/tiles/autotile.d.ts.map +1 -0
- package/dist/tiles/autotile.js +201 -0
- package/dist/tiles/autotile.js.map +1 -0
- package/dist/tiles/catalog/dungeon.d.ts +16 -0
- package/dist/tiles/catalog/dungeon.d.ts.map +1 -0
- package/dist/tiles/catalog/dungeon.js +765 -0
- package/dist/tiles/catalog/dungeon.js.map +1 -0
- package/dist/tiles/catalog/index.d.ts +78 -0
- package/dist/tiles/catalog/index.d.ts.map +1 -0
- package/dist/tiles/catalog/index.js +115 -0
- package/dist/tiles/catalog/index.js.map +1 -0
- package/dist/tiles/catalog/inside.d.ts +16 -0
- package/dist/tiles/catalog/inside.d.ts.map +1 -0
- package/dist/tiles/catalog/inside.js +765 -0
- package/dist/tiles/catalog/inside.js.map +1 -0
- package/dist/tiles/catalog/outside.d.ts +16 -0
- package/dist/tiles/catalog/outside.d.ts.map +1 -0
- package/dist/tiles/catalog/outside.js +799 -0
- package/dist/tiles/catalog/outside.js.map +1 -0
- package/dist/tiles/catalog/overworld.d.ts +16 -0
- package/dist/tiles/catalog/overworld.d.ts.map +1 -0
- package/dist/tiles/catalog/overworld.js +585 -0
- package/dist/tiles/catalog/overworld.js.map +1 -0
- package/dist/tiles/catalog/sf.d.ts +16 -0
- package/dist/tiles/catalog/sf.d.ts.map +1 -0
- package/dist/tiles/catalog/sf.js +1313 -0
- package/dist/tiles/catalog/sf.js.map +1 -0
- package/dist/tiles/paint.d.ts +20 -0
- package/dist/tiles/paint.d.ts.map +1 -0
- package/dist/tiles/paint.js +65 -0
- package/dist/tiles/paint.js.map +1 -0
- package/dist/tiles/png.d.ts +11 -0
- package/dist/tiles/png.d.ts.map +1 -0
- package/dist/tiles/png.js +180 -0
- package/dist/tiles/png.js.map +1 -0
- package/dist/tiles/tileCodec.d.ts +95 -0
- package/dist/tiles/tileCodec.d.ts.map +1 -0
- package/dist/tiles/tileCodec.js +186 -0
- package/dist/tiles/tileCodec.js.map +1 -0
- package/dist/tiles/tileFlags.d.ts +98 -0
- package/dist/tiles/tileFlags.d.ts.map +1 -0
- package/dist/tiles/tileFlags.js +129 -0
- package/dist/tiles/tileFlags.js.map +1 -0
- package/dist/tiles/tilegeom.d.ts +29 -0
- package/dist/tiles/tilegeom.d.ts.map +1 -0
- package/dist/tiles/tilegeom.js +111 -0
- package/dist/tiles/tilegeom.js.map +1 -0
- package/dist/tiles/transparency.d.ts +22 -0
- package/dist/tiles/transparency.d.ts.map +1 -0
- package/dist/tiles/transparency.js +59 -0
- package/dist/tiles/transparency.js.map +1 -0
- package/dist/tools/actorTools.d.ts +48 -0
- package/dist/tools/actorTools.d.ts.map +1 -0
- package/dist/tools/actorTools.js +154 -0
- package/dist/tools/actorTools.js.map +1 -0
- package/dist/tools/allTools.d.ts +8 -0
- package/dist/tools/allTools.d.ts.map +1 -0
- package/dist/tools/allTools.js +56 -0
- package/dist/tools/allTools.js.map +1 -0
- package/dist/tools/assetTools.d.ts +113 -0
- package/dist/tools/assetTools.d.ts.map +1 -0
- package/dist/tools/assetTools.js +97 -0
- package/dist/tools/assetTools.js.map +1 -0
- package/dist/tools/batchTools.d.ts +3 -0
- package/dist/tools/batchTools.d.ts.map +1 -0
- package/dist/tools/batchTools.js +138 -0
- package/dist/tools/batchTools.js.map +1 -0
- package/dist/tools/battleTools.d.ts +72 -0
- package/dist/tools/battleTools.d.ts.map +1 -0
- package/dist/tools/battleTools.js +322 -0
- package/dist/tools/battleTools.js.map +1 -0
- package/dist/tools/catalogTools.d.ts +3 -0
- package/dist/tools/catalogTools.d.ts.map +1 -0
- package/dist/tools/catalogTools.js +134 -0
- package/dist/tools/catalogTools.js.map +1 -0
- package/dist/tools/classTools.d.ts +85 -0
- package/dist/tools/classTools.d.ts.map +1 -0
- package/dist/tools/classTools.js +279 -0
- package/dist/tools/classTools.js.map +1 -0
- package/dist/tools/commonEventTools.d.ts +32 -0
- package/dist/tools/commonEventTools.d.ts.map +1 -0
- package/dist/tools/commonEventTools.js +150 -0
- package/dist/tools/commonEventTools.js.map +1 -0
- package/dist/tools/eventCommandTools.d.ts +37 -0
- package/dist/tools/eventCommandTools.d.ts.map +1 -0
- package/dist/tools/eventCommandTools.js +893 -0
- package/dist/tools/eventCommandTools.js.map +1 -0
- package/dist/tools/eventPageTools.d.ts +112 -0
- package/dist/tools/eventPageTools.d.ts.map +1 -0
- package/dist/tools/eventPageTools.js +597 -0
- package/dist/tools/eventPageTools.js.map +1 -0
- package/dist/tools/itemTools.d.ts +82 -0
- package/dist/tools/itemTools.d.ts.map +1 -0
- package/dist/tools/itemTools.js +380 -0
- package/dist/tools/itemTools.js.map +1 -0
- package/dist/tools/listTools.d.ts +58 -0
- package/dist/tools/listTools.d.ts.map +1 -0
- package/dist/tools/listTools.js +99 -0
- package/dist/tools/listTools.js.map +1 -0
- package/dist/tools/mapTools.d.ts +270 -0
- package/dist/tools/mapTools.d.ts.map +1 -0
- package/dist/tools/mapTools.js +1066 -0
- package/dist/tools/mapTools.js.map +1 -0
- package/dist/tools/moveTools.d.ts +43 -0
- package/dist/tools/moveTools.d.ts.map +1 -0
- package/dist/tools/moveTools.js +240 -0
- package/dist/tools/moveTools.js.map +1 -0
- package/dist/tools/objectTools.d.ts +12 -0
- package/dist/tools/objectTools.d.ts.map +1 -0
- package/dist/tools/objectTools.js +221 -0
- package/dist/tools/objectTools.js.map +1 -0
- package/dist/tools/paintTools.d.ts +3 -0
- package/dist/tools/paintTools.d.ts.map +1 -0
- package/dist/tools/paintTools.js +134 -0
- package/dist/tools/paintTools.js.map +1 -0
- package/dist/tools/pluginScanTools.d.ts +22 -0
- package/dist/tools/pluginScanTools.d.ts.map +1 -0
- package/dist/tools/pluginScanTools.js +119 -0
- package/dist/tools/pluginScanTools.js.map +1 -0
- package/dist/tools/pluginTools.d.ts +11 -0
- package/dist/tools/pluginTools.d.ts.map +1 -0
- package/dist/tools/pluginTools.js +63 -0
- package/dist/tools/pluginTools.js.map +1 -0
- package/dist/tools/projectTools.d.ts +11 -0
- package/dist/tools/projectTools.d.ts.map +1 -0
- package/dist/tools/projectTools.js +74 -0
- package/dist/tools/projectTools.js.map +1 -0
- package/dist/tools/skillTools.d.ts +83 -0
- package/dist/tools/skillTools.d.ts.map +1 -0
- package/dist/tools/skillTools.js +369 -0
- package/dist/tools/skillTools.js.map +1 -0
- package/dist/tools/stateTools.d.ts +28 -0
- package/dist/tools/stateTools.d.ts.map +1 -0
- package/dist/tools/stateTools.js +161 -0
- package/dist/tools/stateTools.js.map +1 -0
- package/dist/tools/systemTools.d.ts +86 -0
- package/dist/tools/systemTools.d.ts.map +1 -0
- package/dist/tools/systemTools.js +342 -0
- package/dist/tools/systemTools.js.map +1 -0
- package/dist/tools/tileTools.d.ts +9 -0
- package/dist/tools/tileTools.d.ts.map +1 -0
- package/dist/tools/tileTools.js +34 -0
- package/dist/tools/tileTools.js.map +1 -0
- package/dist/tools/tileTransparency.d.ts +40 -0
- package/dist/tools/tileTransparency.d.ts.map +1 -0
- package/dist/tools/tileTransparency.js +156 -0
- package/dist/tools/tileTransparency.js.map +1 -0
- package/dist/tools/tilesetTools.d.ts +23 -0
- package/dist/tools/tilesetTools.d.ts.map +1 -0
- package/dist/tools/tilesetTools.js +209 -0
- package/dist/tools/tilesetTools.js.map +1 -0
- package/dist/tools/validationTools.d.ts +50 -0
- package/dist/tools/validationTools.d.ts.map +1 -0
- package/dist/tools/validationTools.js +229 -0
- package/dist/tools/validationTools.js.map +1 -0
- package/dist/utils/commit.d.ts +62 -0
- package/dist/utils/commit.d.ts.map +1 -0
- package/dist/utils/commit.js +119 -0
- package/dist/utils/commit.js.map +1 -0
- package/dist/utils/fileHandler.d.ts +49 -0
- package/dist/utils/fileHandler.d.ts.map +1 -0
- package/dist/utils/fileHandler.js +137 -0
- package/dist/utils/fileHandler.js.map +1 -0
- package/dist/utils/records.d.ts +8 -0
- package/dist/utils/records.d.ts.map +1 -0
- package/dist/utils/records.js +10 -0
- package/dist/utils/records.js.map +1 -0
- package/dist/utils/types.d.ts +465 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +5 -0
- package/dist/utils/types.js.map +1 -0
- package/dist/validation/assets.d.ts +53 -0
- package/dist/validation/assets.d.ts.map +1 -0
- package/dist/validation/assets.js +198 -0
- package/dist/validation/assets.js.map +1 -0
- package/dist/validation/createRefs.d.ts +37 -0
- package/dist/validation/createRefs.d.ts.map +1 -0
- package/dist/validation/createRefs.js +89 -0
- package/dist/validation/createRefs.js.map +1 -0
- package/dist/validation/eventCommands.d.ts +70 -0
- package/dist/validation/eventCommands.d.ts.map +1 -0
- package/dist/validation/eventCommands.js +273 -0
- package/dist/validation/eventCommands.js.map +1 -0
- package/dist/validation/gate.d.ts +56 -0
- package/dist/validation/gate.d.ts.map +1 -0
- package/dist/validation/gate.js +50 -0
- package/dist/validation/gate.js.map +1 -0
- package/dist/validation/moveCommands.d.ts +31 -0
- package/dist/validation/moveCommands.d.ts.map +1 -0
- package/dist/validation/moveCommands.js +123 -0
- package/dist/validation/moveCommands.js.map +1 -0
- package/dist/validation/pluginCommands.d.ts +83 -0
- package/dist/validation/pluginCommands.d.ts.map +1 -0
- package/dist/validation/pluginCommands.js +134 -0
- package/dist/validation/pluginCommands.js.map +1 -0
- package/dist/validation/pluginManifest.d.ts +67 -0
- package/dist/validation/pluginManifest.d.ts.map +1 -0
- package/dist/validation/pluginManifest.js +199 -0
- package/dist/validation/pluginManifest.js.map +1 -0
- package/dist/validation/references.d.ts +57 -0
- package/dist/validation/references.d.ts.map +1 -0
- package/dist/validation/references.js +314 -0
- package/dist/validation/references.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/** Folder each asset type lives in, for a legible warning message. */
|
|
2
|
+
const ASSET_FOLDER = {
|
|
3
|
+
characters: 'img/characters',
|
|
4
|
+
faces: 'img/faces',
|
|
5
|
+
sv_actors: 'img/sv_actors',
|
|
6
|
+
enemies: 'img/enemies',
|
|
7
|
+
tilesets: 'img/tilesets',
|
|
8
|
+
titles1: 'img/titles1',
|
|
9
|
+
titles2: 'img/titles2',
|
|
10
|
+
battlebacks1: 'img/battlebacks1',
|
|
11
|
+
battlebacks2: 'img/battlebacks2',
|
|
12
|
+
parallaxes: 'img/parallaxes',
|
|
13
|
+
pictures: 'img/pictures',
|
|
14
|
+
bgm: 'audio/bgm',
|
|
15
|
+
bgs: 'audio/bgs',
|
|
16
|
+
me: 'audio/me',
|
|
17
|
+
se: 'audio/se',
|
|
18
|
+
};
|
|
19
|
+
// Event command codes that carry an asset-filename reference.
|
|
20
|
+
const CMD_SHOW_TEXT = 101; // parameters[0] = faceName
|
|
21
|
+
const CMD_SHOW_PICTURE = 231; // parameters[1] = picture name
|
|
22
|
+
const CMD_PLAY_BGM = 241;
|
|
23
|
+
const CMD_PLAY_BGS = 245;
|
|
24
|
+
const CMD_PLAY_ME = 249;
|
|
25
|
+
const CMD_PLAY_SE = 250;
|
|
26
|
+
const CMD_CHANGE_ACTOR_IMAGES = 322; // [actorId, charName, charIdx, faceName, faceIdx, battlerName]
|
|
27
|
+
/**
|
|
28
|
+
* Record one asset reference to verify. A blank name (no asset set — the common
|
|
29
|
+
* "none" case) or an unverifiable type (its directory is empty/missing) is
|
|
30
|
+
* skipped, so only a genuinely dangling filename is flagged.
|
|
31
|
+
*/
|
|
32
|
+
function checkAsset(assets, type, name, category, path, warnings) {
|
|
33
|
+
if (typeof name !== 'string' || name === '')
|
|
34
|
+
return;
|
|
35
|
+
const available = assets[type];
|
|
36
|
+
if (!available || available.size === 0)
|
|
37
|
+
return; // can't verify -> don't flag
|
|
38
|
+
if (!available.has(name)) {
|
|
39
|
+
warnings.push({
|
|
40
|
+
category,
|
|
41
|
+
path,
|
|
42
|
+
message: `references "${name}", which is missing from ${ASSET_FOLDER[type] ?? type}`,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Scan one event command list for asset-filename references. */
|
|
47
|
+
function checkCommandList(list, path, assets, warnings) {
|
|
48
|
+
if (!Array.isArray(list))
|
|
49
|
+
return;
|
|
50
|
+
list.forEach((cmd, i) => {
|
|
51
|
+
if (!cmd || !Array.isArray(cmd.parameters))
|
|
52
|
+
return;
|
|
53
|
+
const at = `${path} / command ${i}`;
|
|
54
|
+
const p = cmd.parameters;
|
|
55
|
+
switch (cmd.code) {
|
|
56
|
+
case CMD_SHOW_TEXT:
|
|
57
|
+
checkAsset(assets, 'faces', p[0], 'event-command', `${at} (Show Text face)`, warnings);
|
|
58
|
+
break;
|
|
59
|
+
case CMD_SHOW_PICTURE:
|
|
60
|
+
checkAsset(assets, 'pictures', p[1], 'event-command', `${at} (Show Picture)`, warnings);
|
|
61
|
+
break;
|
|
62
|
+
case CMD_PLAY_BGM:
|
|
63
|
+
checkAsset(assets, 'bgm', p[0]?.name, 'event-command', `${at} (Play BGM)`, warnings); // prettier-ignore
|
|
64
|
+
break;
|
|
65
|
+
case CMD_PLAY_BGS:
|
|
66
|
+
checkAsset(assets, 'bgs', p[0]?.name, 'event-command', `${at} (Play BGS)`, warnings); // prettier-ignore
|
|
67
|
+
break;
|
|
68
|
+
case CMD_PLAY_ME:
|
|
69
|
+
checkAsset(assets, 'me', p[0]?.name, 'event-command', `${at} (Play ME)`, warnings); // prettier-ignore
|
|
70
|
+
break;
|
|
71
|
+
case CMD_PLAY_SE:
|
|
72
|
+
checkAsset(assets, 'se', p[0]?.name, 'event-command', `${at} (Play SE)`, warnings); // prettier-ignore
|
|
73
|
+
break;
|
|
74
|
+
case CMD_CHANGE_ACTOR_IMAGES:
|
|
75
|
+
checkAsset(assets, 'characters', p[1], 'event-command', `${at} (Change Actor Images: character)`, warnings); // prettier-ignore
|
|
76
|
+
checkAsset(assets, 'faces', p[3], 'event-command', `${at} (Change Actor Images: face)`, warnings); // prettier-ignore
|
|
77
|
+
checkAsset(assets, 'sv_actors', p[5], 'event-command', `${at} (Change Actor Images: battler)`, warnings); // prettier-ignore
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/** Actor sprite/face/side-view-battler filenames. */
|
|
83
|
+
function checkActors(data, assets, warnings) {
|
|
84
|
+
data.actors.forEach((actor) => {
|
|
85
|
+
if (!actor)
|
|
86
|
+
return;
|
|
87
|
+
checkAsset(assets, 'characters', actor.characterName, 'actor', `actor ${actor.id} / characterName`, warnings); // prettier-ignore
|
|
88
|
+
checkAsset(assets, 'faces', actor.faceName, 'actor', `actor ${actor.id} / faceName`, warnings);
|
|
89
|
+
checkAsset(assets, 'sv_actors', actor.battlerName, 'actor', `actor ${actor.id} / battlerName`, warnings); // prettier-ignore
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
/** Enemy battler filenames (the Mudcrab case). */
|
|
93
|
+
function checkEnemies(data, assets, warnings) {
|
|
94
|
+
data.enemies.forEach((enemy) => {
|
|
95
|
+
if (!enemy)
|
|
96
|
+
return;
|
|
97
|
+
checkAsset(assets, 'enemies', enemy.battlerName, 'enemy', `enemy ${enemy.id} / battlerName`, warnings); // prettier-ignore
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/** Tileset image sheet filenames (the 9 tilesetNames slots). */
|
|
101
|
+
function checkTilesets(data, assets, warnings) {
|
|
102
|
+
data.tilesets.forEach((tileset) => {
|
|
103
|
+
if (!tileset || !Array.isArray(tileset.tilesetNames))
|
|
104
|
+
return;
|
|
105
|
+
tileset.tilesetNames.forEach((name, slot) => {
|
|
106
|
+
checkAsset(assets, 'tilesets', name, 'tileset', `tileset ${tileset.id} / tilesetNames[${slot}]`, warnings); // prettier-ignore
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/** Map-level audio/images plus every event page graphic and command list. */
|
|
111
|
+
function checkMaps(data, assets, warnings) {
|
|
112
|
+
for (const { id, map } of data.maps) {
|
|
113
|
+
const base = `map ${id}`;
|
|
114
|
+
checkAsset(assets, 'bgm', map.bgm?.name, 'map', `${base} / bgm`, warnings);
|
|
115
|
+
checkAsset(assets, 'bgs', map.bgs?.name, 'map', `${base} / bgs`, warnings);
|
|
116
|
+
checkAsset(assets, 'parallaxes', map.parallaxName, 'map', `${base} / parallaxName`, warnings);
|
|
117
|
+
checkAsset(assets, 'battlebacks1', map.battleback1Name, 'map', `${base} / battleback1Name`, warnings); // prettier-ignore
|
|
118
|
+
checkAsset(assets, 'battlebacks2', map.battleback2Name, 'map', `${base} / battleback2Name`, warnings); // prettier-ignore
|
|
119
|
+
map.events?.forEach((event) => {
|
|
120
|
+
if (!event || !Array.isArray(event.pages))
|
|
121
|
+
return;
|
|
122
|
+
event.pages.forEach((page, pi) => {
|
|
123
|
+
const at = `${base} / event ${event.id} / page ${pi}`;
|
|
124
|
+
checkAsset(assets, 'characters', page?.image?.characterName, 'event', `${at} / image`, warnings); // prettier-ignore
|
|
125
|
+
checkCommandList(page?.list, at, assets, warnings);
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/** Common-event and troop battle-event command lists. */
|
|
131
|
+
function checkEventLists(data, assets, warnings) {
|
|
132
|
+
data.commonEvents.forEach((ce) => {
|
|
133
|
+
if (ce)
|
|
134
|
+
checkCommandList(ce.list, `common event ${ce.id}`, assets, warnings);
|
|
135
|
+
});
|
|
136
|
+
data.troops.forEach((troop) => {
|
|
137
|
+
if (!troop || !Array.isArray(troop.pages))
|
|
138
|
+
return;
|
|
139
|
+
troop.pages.forEach((page, pi) => checkCommandList(page?.list, `troop ${troop.id} / page ${pi}`, assets, warnings));
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/** System title/battleback images, default battle audio, and vehicle graphics/bgm. */
|
|
143
|
+
function checkSystem(data, assets, warnings) {
|
|
144
|
+
const s = data.system;
|
|
145
|
+
if (!s)
|
|
146
|
+
return;
|
|
147
|
+
checkAsset(assets, 'titles1', s.title1Name, 'system', 'System.title1Name', warnings);
|
|
148
|
+
checkAsset(assets, 'titles2', s.title2Name, 'system', 'System.title2Name', warnings);
|
|
149
|
+
checkAsset(assets, 'battlebacks1', s.battleback1Name, 'system', 'System.battleback1Name', warnings);
|
|
150
|
+
checkAsset(assets, 'battlebacks2', s.battleback2Name, 'system', 'System.battleback2Name', warnings);
|
|
151
|
+
const audio = [
|
|
152
|
+
['titleBgm', 'bgm', 'System.titleBgm'],
|
|
153
|
+
['battleBgm', 'bgm', 'System.battleBgm'],
|
|
154
|
+
['victoryMe', 'me', 'System.victoryMe'],
|
|
155
|
+
['defeatMe', 'me', 'System.defeatMe'],
|
|
156
|
+
['gameoverMe', 'me', 'System.gameoverMe'],
|
|
157
|
+
];
|
|
158
|
+
for (const [field, type, path] of audio) {
|
|
159
|
+
checkAsset(assets, type, s[field]?.name, 'system', path, warnings);
|
|
160
|
+
}
|
|
161
|
+
if (Array.isArray(s.sounds)) {
|
|
162
|
+
s.sounds.forEach((se, i) => {
|
|
163
|
+
checkAsset(assets, 'se', se?.name, 'system', `System.sounds[${i}]`, warnings);
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
const vehicles = [
|
|
167
|
+
['boat', 'System.boat'],
|
|
168
|
+
['ship', 'System.ship'],
|
|
169
|
+
['airship', 'System.airship'],
|
|
170
|
+
];
|
|
171
|
+
for (const [field, path] of vehicles) {
|
|
172
|
+
const v = s[field];
|
|
173
|
+
if (!v)
|
|
174
|
+
continue;
|
|
175
|
+
checkAsset(assets, 'characters', v.characterName, 'system', `${path}.characterName`, warnings);
|
|
176
|
+
checkAsset(assets, 'bgm', v.bgm?.name, 'system', `${path}.bgm`, warnings);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Audit every asset-*filename* reference across the project against the files
|
|
181
|
+
* actually present (see {@link AvailableAssets}). Pure and warn-by-default:
|
|
182
|
+
* returns a list of dangling filename references (a `battlerName`/`characterName`/
|
|
183
|
+
* `faceName`, a map bgm/bgs/parallax/battleback, a tileset sheet, an event Play
|
|
184
|
+
* Audio / Show Picture / Show Text face, a system title/battleback/sound, …) that
|
|
185
|
+
* point at a missing file — empty when everything resolves. The *id*-integrity
|
|
186
|
+
* sibling is {@link checkReferences}.
|
|
187
|
+
*/
|
|
188
|
+
export function checkAssets(data, assets) {
|
|
189
|
+
const warnings = [];
|
|
190
|
+
checkActors(data, assets, warnings);
|
|
191
|
+
checkEnemies(data, assets, warnings);
|
|
192
|
+
checkTilesets(data, assets, warnings);
|
|
193
|
+
checkMaps(data, assets, warnings);
|
|
194
|
+
checkEventLists(data, assets, warnings);
|
|
195
|
+
checkSystem(data, assets, warnings);
|
|
196
|
+
return warnings;
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/validation/assets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Effect } from '../utils/types.js';
|
|
2
|
+
/** The db arrays a skill/item effect can reference. */
|
|
3
|
+
export interface EffectRefTargets {
|
|
4
|
+
states: readonly (unknown | null)[];
|
|
5
|
+
skills: readonly (unknown | null)[];
|
|
6
|
+
commonEvents: readonly (unknown | null)[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* First skill/item effect whose dataId points at a missing db record → an error
|
|
10
|
+
* message; `null` if every effect resolves. Add/Remove State (21/22) → state
|
|
11
|
+
* (skips dataId 0, the "normal attack states" sentinel), Learn Skill (43) →
|
|
12
|
+
* skill, Common Event (44) → common event. Buff/Debuff codes (31/32) carry a
|
|
13
|
+
* param index rather than a db id, so they're intentionally not checked.
|
|
14
|
+
*/
|
|
15
|
+
export declare function firstMissingEffectRef(effects: Effect[] | undefined, targets: EffectRefTargets): string | null;
|
|
16
|
+
/** The db arrays an enemy's actions/drops can reference. */
|
|
17
|
+
export interface EnemyRefTargets {
|
|
18
|
+
skills: readonly (unknown | null)[];
|
|
19
|
+
items: readonly (unknown | null)[];
|
|
20
|
+
weapons: readonly (unknown | null)[];
|
|
21
|
+
armors: readonly (unknown | null)[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* First enemy reference that points at a missing db record → an error message;
|
|
25
|
+
* `null` if everything resolves. `actions[].skillId` → skill; `dropItems[].dataId`
|
|
26
|
+
* → item/weapon/armor by `kind` (1/2/3; kind 0 = no drop, skipped).
|
|
27
|
+
*/
|
|
28
|
+
export declare function firstMissingEnemyRef(enemy: {
|
|
29
|
+
actions?: Array<{
|
|
30
|
+
skillId: number;
|
|
31
|
+
} | null>;
|
|
32
|
+
dropItems?: Array<{
|
|
33
|
+
kind: number;
|
|
34
|
+
dataId: number;
|
|
35
|
+
} | null>;
|
|
36
|
+
}, targets: EnemyRefTargets): string | null;
|
|
37
|
+
//# sourceMappingURL=createRefs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createRefs.d.ts","sourceRoot":"","sources":["../../src/validation/createRefs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAuB3C,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;IACpC,MAAM,EAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;IACpC,YAAY,EAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;CAC3C;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,EAC7B,OAAO,EAAE,gBAAgB,GACxB,MAAM,GAAG,IAAI,CA8Bf;AAED,4DAA4D;AAC5D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;IACpC,KAAK,EAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;IACnC,OAAO,EAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;IACrC,MAAM,EAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;CACrC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE;IACL,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC5C,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CAC5D,EACD,OAAO,EAAE,eAAe,GACvB,MAAM,GAAG,IAAI,CA4Bf"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { refExists } from './references.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create-time reference guards (Phase 7 P2-3). Where {@link checkReferences} is a
|
|
4
|
+
* read-only warn-by-default *audit* run after the fact, these are the **throw**
|
|
5
|
+
* side: the `create_*` tools call them so a skill/item/enemy that points at a
|
|
6
|
+
* non-existent db record fails at author time — matching the existing throwing
|
|
7
|
+
* checks (`add_class_learning` skillId, `create_troop` member.enemyId,
|
|
8
|
+
* `call_common_event` commonEventId) so reference validation is consistent across
|
|
9
|
+
* every create tool. Pure (no I/O): each returns the first offending reference as
|
|
10
|
+
* an error message, or `null` when everything resolves, so the caller throws.
|
|
11
|
+
*
|
|
12
|
+
* A target array that's empty (its file was absent / failed to load) is treated
|
|
13
|
+
* as "can't verify" and skipped, so a minimal project or test fixture can't
|
|
14
|
+
* produce a false throw — the same false-positive guard `checkReferences` uses.
|
|
15
|
+
*/
|
|
16
|
+
// Game_Action effect codes carrying a data-id reference (mirrors references.ts).
|
|
17
|
+
const EFFECT_ADD_STATE = 21;
|
|
18
|
+
const EFFECT_REMOVE_STATE = 22;
|
|
19
|
+
const EFFECT_LEARN_SKILL = 43;
|
|
20
|
+
const EFFECT_COMMON_EVENT = 44;
|
|
21
|
+
/**
|
|
22
|
+
* First skill/item effect whose dataId points at a missing db record → an error
|
|
23
|
+
* message; `null` if every effect resolves. Add/Remove State (21/22) → state
|
|
24
|
+
* (skips dataId 0, the "normal attack states" sentinel), Learn Skill (43) →
|
|
25
|
+
* skill, Common Event (44) → common event. Buff/Debuff codes (31/32) carry a
|
|
26
|
+
* param index rather than a db id, so they're intentionally not checked.
|
|
27
|
+
*/
|
|
28
|
+
export function firstMissingEffectRef(effects, targets) {
|
|
29
|
+
if (!Array.isArray(effects))
|
|
30
|
+
return null;
|
|
31
|
+
for (let i = 0; i < effects.length; i++) {
|
|
32
|
+
const e = effects[i];
|
|
33
|
+
if (!e)
|
|
34
|
+
continue;
|
|
35
|
+
if ((e.code === EFFECT_ADD_STATE || e.code === EFFECT_REMOVE_STATE) &&
|
|
36
|
+
e.dataId !== 0 &&
|
|
37
|
+
targets.states.length > 0 &&
|
|
38
|
+
!refExists(targets.states, e.dataId)) {
|
|
39
|
+
const verb = e.code === EFFECT_ADD_STATE ? 'adds' : 'removes';
|
|
40
|
+
return `effect ${i} ${verb} state ${e.dataId}, which does not exist`;
|
|
41
|
+
}
|
|
42
|
+
if (e.code === EFFECT_LEARN_SKILL &&
|
|
43
|
+
targets.skills.length > 0 &&
|
|
44
|
+
!refExists(targets.skills, e.dataId)) {
|
|
45
|
+
return `effect ${i} (Learn Skill) references skill ${e.dataId}, which does not exist`;
|
|
46
|
+
}
|
|
47
|
+
if (e.code === EFFECT_COMMON_EVENT &&
|
|
48
|
+
targets.commonEvents.length > 0 &&
|
|
49
|
+
!refExists(targets.commonEvents, e.dataId)) {
|
|
50
|
+
return `effect ${i} (Common Event) references common event ${e.dataId}, which does not exist`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* First enemy reference that points at a missing db record → an error message;
|
|
57
|
+
* `null` if everything resolves. `actions[].skillId` → skill; `dropItems[].dataId`
|
|
58
|
+
* → item/weapon/armor by `kind` (1/2/3; kind 0 = no drop, skipped).
|
|
59
|
+
*/
|
|
60
|
+
export function firstMissingEnemyRef(enemy, targets) {
|
|
61
|
+
if (Array.isArray(enemy.actions) && targets.skills.length > 0) {
|
|
62
|
+
for (let i = 0; i < enemy.actions.length; i++) {
|
|
63
|
+
const a = enemy.actions[i];
|
|
64
|
+
if (a && !refExists(targets.skills, a.skillId)) {
|
|
65
|
+
return `action ${i} uses skill ${a.skillId}, which does not exist`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (Array.isArray(enemy.dropItems)) {
|
|
70
|
+
for (let i = 0; i < enemy.dropItems.length; i++) {
|
|
71
|
+
const d = enemy.dropItems[i];
|
|
72
|
+
if (!d)
|
|
73
|
+
continue;
|
|
74
|
+
const target = d.kind === 1
|
|
75
|
+
? targets.items
|
|
76
|
+
: d.kind === 2
|
|
77
|
+
? targets.weapons
|
|
78
|
+
: d.kind === 3
|
|
79
|
+
? targets.armors
|
|
80
|
+
: null;
|
|
81
|
+
if (target && target.length > 0 && !refExists(target, d.dataId)) {
|
|
82
|
+
const label = d.kind === 1 ? 'item' : d.kind === 2 ? 'weapon' : 'armor';
|
|
83
|
+
return `dropItems[${i}] drops ${label} ${d.dataId}, which does not exist`;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=createRefs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createRefs.js","sourceRoot":"","sources":["../../src/validation/createRefs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { EventCommand, MapEvent } from '../utils/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* How seriously a finding should be taken.
|
|
4
|
+
*
|
|
5
|
+
* - `'error'` — **structural**: the data is malformed in a way that is almost
|
|
6
|
+
* always a bug (wrong parameter arity, an unterminated command list, a
|
|
7
|
+
* non-array `parameters`). Mutating tools refuse to write these by default;
|
|
8
|
+
* see `assertWritable` in `./gate.js`.
|
|
9
|
+
* - `'warning'` — **advisory**: something looks off but is legitimately possible
|
|
10
|
+
* (an unrecognized command code may be a plugin command; an over-long text
|
|
11
|
+
* line is ugly, not broken). Never blocks a write.
|
|
12
|
+
*
|
|
13
|
+
* An absent `severity` means advisory — so a finding from a validator that
|
|
14
|
+
* doesn't classify (asset names, references, transparency) can never block.
|
|
15
|
+
*/
|
|
16
|
+
export type Severity = 'error' | 'warning';
|
|
17
|
+
/**
|
|
18
|
+
* A single validation finding. `severity` decides whether it blocks a write:
|
|
19
|
+
* structural findings ('error') refuse the write unless the caller passes
|
|
20
|
+
* `force: true`; everything else is advisory and merely reported.
|
|
21
|
+
*/
|
|
22
|
+
export interface ValidationWarning {
|
|
23
|
+
path: string;
|
|
24
|
+
code?: number;
|
|
25
|
+
message: string;
|
|
26
|
+
severity?: Severity;
|
|
27
|
+
}
|
|
28
|
+
export interface ValidationReport {
|
|
29
|
+
ok: boolean;
|
|
30
|
+
warnings: ValidationWarning[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Specification for a known RPG Maker MZ event command. `check` returns a warning
|
|
34
|
+
* message when the parameters look wrong, or `null` when they're fine. Commands
|
|
35
|
+
* with no `check` are recognized (so they don't trip the unknown-code warning)
|
|
36
|
+
* but their parameters aren't inspected.
|
|
37
|
+
*/
|
|
38
|
+
interface CommandSpec {
|
|
39
|
+
name: string;
|
|
40
|
+
check?: (params: unknown[]) => string | null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Curated table of core RPG Maker MZ event command codes. Not exhaustive — it
|
|
44
|
+
* covers the commands this server is most likely to read or write, plus enough
|
|
45
|
+
* of the common set that an unrecognized code is a meaningful signal. Codes not
|
|
46
|
+
* listed here produce a soft "unrecognized" warning rather than an error, since
|
|
47
|
+
* plugins are free to introduce their own.
|
|
48
|
+
*/
|
|
49
|
+
export declare const KNOWN_COMMANDS: Record<number, CommandSpec>;
|
|
50
|
+
/** Validate a single event command. */
|
|
51
|
+
export declare function validateCommand(command: EventCommand, path: string): ValidationWarning[];
|
|
52
|
+
/**
|
|
53
|
+
* Warn (never block) on Show Text lines (401) too wide for the message window —
|
|
54
|
+
* RPG Maker MZ does **not** word-wrap, an over-long line is silently cut off at
|
|
55
|
+
* the window edge. Face-aware: a 101 setup with a face image shrinks the budget
|
|
56
|
+
* for the 401 lines that follow it. Exported so the read-only text builders can
|
|
57
|
+
* surface the same warning at build time (on fragments without a terminator).
|
|
58
|
+
*/
|
|
59
|
+
export declare function textLineWidthWarnings(list: EventCommand[], path: string): ValidationWarning[];
|
|
60
|
+
/**
|
|
61
|
+
* Validate an event command list (an event page's `list`). Checks that it is a
|
|
62
|
+
* proper array terminated by the code-0 end marker, then validates each command.
|
|
63
|
+
*/
|
|
64
|
+
export declare function validateCommandList(list: unknown, path: string): ValidationWarning[];
|
|
65
|
+
/** Validate every page of an event. */
|
|
66
|
+
export declare function validateEvent(event: MapEvent, path?: string): ValidationReport;
|
|
67
|
+
/** Validate every (non-null) event in a map's `events` array. */
|
|
68
|
+
export declare function validateEvents(events: (MapEvent | null)[]): ValidationReport;
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=eventCommands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventCommands.d.ts","sourceRoot":"","sources":["../../src/validation/eventCommands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAE3C;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED;;;;;GAKG;AACH,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,MAAM,GAAG,IAAI,CAAC;CAC9C;AAYD;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA0ItD,CAAC;AAEF,uCAAuC;AACvC,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,CA0CxF;AAYD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAyB7F;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAuBpF;AAED,uCAAuC;AACvC,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,SAAuB,GAAG,gBAAgB,CAa5F;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,MAAM,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,gBAAgB,CAU5E"}
|