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.
Files changed (219) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +425 -0
  3. package/dist/events/commandBuilders.d.ts +405 -0
  4. package/dist/events/commandBuilders.d.ts.map +1 -0
  5. package/dist/events/commandBuilders.js +554 -0
  6. package/dist/events/commandBuilders.js.map +1 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +105 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/registry.d.ts +81 -0
  12. package/dist/registry.d.ts.map +1 -0
  13. package/dist/registry.js +49 -0
  14. package/dist/registry.js.map +1 -0
  15. package/dist/tiles/autotile.d.ts +65 -0
  16. package/dist/tiles/autotile.d.ts.map +1 -0
  17. package/dist/tiles/autotile.js +201 -0
  18. package/dist/tiles/autotile.js.map +1 -0
  19. package/dist/tiles/catalog/dungeon.d.ts +16 -0
  20. package/dist/tiles/catalog/dungeon.d.ts.map +1 -0
  21. package/dist/tiles/catalog/dungeon.js +765 -0
  22. package/dist/tiles/catalog/dungeon.js.map +1 -0
  23. package/dist/tiles/catalog/index.d.ts +78 -0
  24. package/dist/tiles/catalog/index.d.ts.map +1 -0
  25. package/dist/tiles/catalog/index.js +115 -0
  26. package/dist/tiles/catalog/index.js.map +1 -0
  27. package/dist/tiles/catalog/inside.d.ts +16 -0
  28. package/dist/tiles/catalog/inside.d.ts.map +1 -0
  29. package/dist/tiles/catalog/inside.js +765 -0
  30. package/dist/tiles/catalog/inside.js.map +1 -0
  31. package/dist/tiles/catalog/outside.d.ts +16 -0
  32. package/dist/tiles/catalog/outside.d.ts.map +1 -0
  33. package/dist/tiles/catalog/outside.js +799 -0
  34. package/dist/tiles/catalog/outside.js.map +1 -0
  35. package/dist/tiles/catalog/overworld.d.ts +16 -0
  36. package/dist/tiles/catalog/overworld.d.ts.map +1 -0
  37. package/dist/tiles/catalog/overworld.js +585 -0
  38. package/dist/tiles/catalog/overworld.js.map +1 -0
  39. package/dist/tiles/catalog/sf.d.ts +16 -0
  40. package/dist/tiles/catalog/sf.d.ts.map +1 -0
  41. package/dist/tiles/catalog/sf.js +1313 -0
  42. package/dist/tiles/catalog/sf.js.map +1 -0
  43. package/dist/tiles/paint.d.ts +20 -0
  44. package/dist/tiles/paint.d.ts.map +1 -0
  45. package/dist/tiles/paint.js +65 -0
  46. package/dist/tiles/paint.js.map +1 -0
  47. package/dist/tiles/png.d.ts +11 -0
  48. package/dist/tiles/png.d.ts.map +1 -0
  49. package/dist/tiles/png.js +180 -0
  50. package/dist/tiles/png.js.map +1 -0
  51. package/dist/tiles/tileCodec.d.ts +95 -0
  52. package/dist/tiles/tileCodec.d.ts.map +1 -0
  53. package/dist/tiles/tileCodec.js +186 -0
  54. package/dist/tiles/tileCodec.js.map +1 -0
  55. package/dist/tiles/tileFlags.d.ts +98 -0
  56. package/dist/tiles/tileFlags.d.ts.map +1 -0
  57. package/dist/tiles/tileFlags.js +129 -0
  58. package/dist/tiles/tileFlags.js.map +1 -0
  59. package/dist/tiles/tilegeom.d.ts +29 -0
  60. package/dist/tiles/tilegeom.d.ts.map +1 -0
  61. package/dist/tiles/tilegeom.js +111 -0
  62. package/dist/tiles/tilegeom.js.map +1 -0
  63. package/dist/tiles/transparency.d.ts +22 -0
  64. package/dist/tiles/transparency.d.ts.map +1 -0
  65. package/dist/tiles/transparency.js +59 -0
  66. package/dist/tiles/transparency.js.map +1 -0
  67. package/dist/tools/actorTools.d.ts +48 -0
  68. package/dist/tools/actorTools.d.ts.map +1 -0
  69. package/dist/tools/actorTools.js +154 -0
  70. package/dist/tools/actorTools.js.map +1 -0
  71. package/dist/tools/allTools.d.ts +8 -0
  72. package/dist/tools/allTools.d.ts.map +1 -0
  73. package/dist/tools/allTools.js +56 -0
  74. package/dist/tools/allTools.js.map +1 -0
  75. package/dist/tools/assetTools.d.ts +113 -0
  76. package/dist/tools/assetTools.d.ts.map +1 -0
  77. package/dist/tools/assetTools.js +97 -0
  78. package/dist/tools/assetTools.js.map +1 -0
  79. package/dist/tools/batchTools.d.ts +3 -0
  80. package/dist/tools/batchTools.d.ts.map +1 -0
  81. package/dist/tools/batchTools.js +138 -0
  82. package/dist/tools/batchTools.js.map +1 -0
  83. package/dist/tools/battleTools.d.ts +72 -0
  84. package/dist/tools/battleTools.d.ts.map +1 -0
  85. package/dist/tools/battleTools.js +322 -0
  86. package/dist/tools/battleTools.js.map +1 -0
  87. package/dist/tools/catalogTools.d.ts +3 -0
  88. package/dist/tools/catalogTools.d.ts.map +1 -0
  89. package/dist/tools/catalogTools.js +134 -0
  90. package/dist/tools/catalogTools.js.map +1 -0
  91. package/dist/tools/classTools.d.ts +85 -0
  92. package/dist/tools/classTools.d.ts.map +1 -0
  93. package/dist/tools/classTools.js +279 -0
  94. package/dist/tools/classTools.js.map +1 -0
  95. package/dist/tools/commonEventTools.d.ts +32 -0
  96. package/dist/tools/commonEventTools.d.ts.map +1 -0
  97. package/dist/tools/commonEventTools.js +150 -0
  98. package/dist/tools/commonEventTools.js.map +1 -0
  99. package/dist/tools/eventCommandTools.d.ts +37 -0
  100. package/dist/tools/eventCommandTools.d.ts.map +1 -0
  101. package/dist/tools/eventCommandTools.js +893 -0
  102. package/dist/tools/eventCommandTools.js.map +1 -0
  103. package/dist/tools/eventPageTools.d.ts +112 -0
  104. package/dist/tools/eventPageTools.d.ts.map +1 -0
  105. package/dist/tools/eventPageTools.js +597 -0
  106. package/dist/tools/eventPageTools.js.map +1 -0
  107. package/dist/tools/itemTools.d.ts +82 -0
  108. package/dist/tools/itemTools.d.ts.map +1 -0
  109. package/dist/tools/itemTools.js +380 -0
  110. package/dist/tools/itemTools.js.map +1 -0
  111. package/dist/tools/listTools.d.ts +58 -0
  112. package/dist/tools/listTools.d.ts.map +1 -0
  113. package/dist/tools/listTools.js +99 -0
  114. package/dist/tools/listTools.js.map +1 -0
  115. package/dist/tools/mapTools.d.ts +270 -0
  116. package/dist/tools/mapTools.d.ts.map +1 -0
  117. package/dist/tools/mapTools.js +1066 -0
  118. package/dist/tools/mapTools.js.map +1 -0
  119. package/dist/tools/moveTools.d.ts +43 -0
  120. package/dist/tools/moveTools.d.ts.map +1 -0
  121. package/dist/tools/moveTools.js +240 -0
  122. package/dist/tools/moveTools.js.map +1 -0
  123. package/dist/tools/objectTools.d.ts +12 -0
  124. package/dist/tools/objectTools.d.ts.map +1 -0
  125. package/dist/tools/objectTools.js +221 -0
  126. package/dist/tools/objectTools.js.map +1 -0
  127. package/dist/tools/paintTools.d.ts +3 -0
  128. package/dist/tools/paintTools.d.ts.map +1 -0
  129. package/dist/tools/paintTools.js +134 -0
  130. package/dist/tools/paintTools.js.map +1 -0
  131. package/dist/tools/pluginScanTools.d.ts +22 -0
  132. package/dist/tools/pluginScanTools.d.ts.map +1 -0
  133. package/dist/tools/pluginScanTools.js +119 -0
  134. package/dist/tools/pluginScanTools.js.map +1 -0
  135. package/dist/tools/pluginTools.d.ts +11 -0
  136. package/dist/tools/pluginTools.d.ts.map +1 -0
  137. package/dist/tools/pluginTools.js +63 -0
  138. package/dist/tools/pluginTools.js.map +1 -0
  139. package/dist/tools/projectTools.d.ts +11 -0
  140. package/dist/tools/projectTools.d.ts.map +1 -0
  141. package/dist/tools/projectTools.js +74 -0
  142. package/dist/tools/projectTools.js.map +1 -0
  143. package/dist/tools/skillTools.d.ts +83 -0
  144. package/dist/tools/skillTools.d.ts.map +1 -0
  145. package/dist/tools/skillTools.js +369 -0
  146. package/dist/tools/skillTools.js.map +1 -0
  147. package/dist/tools/stateTools.d.ts +28 -0
  148. package/dist/tools/stateTools.d.ts.map +1 -0
  149. package/dist/tools/stateTools.js +161 -0
  150. package/dist/tools/stateTools.js.map +1 -0
  151. package/dist/tools/systemTools.d.ts +86 -0
  152. package/dist/tools/systemTools.d.ts.map +1 -0
  153. package/dist/tools/systemTools.js +342 -0
  154. package/dist/tools/systemTools.js.map +1 -0
  155. package/dist/tools/tileTools.d.ts +9 -0
  156. package/dist/tools/tileTools.d.ts.map +1 -0
  157. package/dist/tools/tileTools.js +34 -0
  158. package/dist/tools/tileTools.js.map +1 -0
  159. package/dist/tools/tileTransparency.d.ts +40 -0
  160. package/dist/tools/tileTransparency.d.ts.map +1 -0
  161. package/dist/tools/tileTransparency.js +156 -0
  162. package/dist/tools/tileTransparency.js.map +1 -0
  163. package/dist/tools/tilesetTools.d.ts +23 -0
  164. package/dist/tools/tilesetTools.d.ts.map +1 -0
  165. package/dist/tools/tilesetTools.js +209 -0
  166. package/dist/tools/tilesetTools.js.map +1 -0
  167. package/dist/tools/validationTools.d.ts +50 -0
  168. package/dist/tools/validationTools.d.ts.map +1 -0
  169. package/dist/tools/validationTools.js +229 -0
  170. package/dist/tools/validationTools.js.map +1 -0
  171. package/dist/utils/commit.d.ts +62 -0
  172. package/dist/utils/commit.d.ts.map +1 -0
  173. package/dist/utils/commit.js +119 -0
  174. package/dist/utils/commit.js.map +1 -0
  175. package/dist/utils/fileHandler.d.ts +49 -0
  176. package/dist/utils/fileHandler.d.ts.map +1 -0
  177. package/dist/utils/fileHandler.js +137 -0
  178. package/dist/utils/fileHandler.js.map +1 -0
  179. package/dist/utils/records.d.ts +8 -0
  180. package/dist/utils/records.d.ts.map +1 -0
  181. package/dist/utils/records.js +10 -0
  182. package/dist/utils/records.js.map +1 -0
  183. package/dist/utils/types.d.ts +465 -0
  184. package/dist/utils/types.d.ts.map +1 -0
  185. package/dist/utils/types.js +5 -0
  186. package/dist/utils/types.js.map +1 -0
  187. package/dist/validation/assets.d.ts +53 -0
  188. package/dist/validation/assets.d.ts.map +1 -0
  189. package/dist/validation/assets.js +198 -0
  190. package/dist/validation/assets.js.map +1 -0
  191. package/dist/validation/createRefs.d.ts +37 -0
  192. package/dist/validation/createRefs.d.ts.map +1 -0
  193. package/dist/validation/createRefs.js +89 -0
  194. package/dist/validation/createRefs.js.map +1 -0
  195. package/dist/validation/eventCommands.d.ts +70 -0
  196. package/dist/validation/eventCommands.d.ts.map +1 -0
  197. package/dist/validation/eventCommands.js +273 -0
  198. package/dist/validation/eventCommands.js.map +1 -0
  199. package/dist/validation/gate.d.ts +56 -0
  200. package/dist/validation/gate.d.ts.map +1 -0
  201. package/dist/validation/gate.js +50 -0
  202. package/dist/validation/gate.js.map +1 -0
  203. package/dist/validation/moveCommands.d.ts +31 -0
  204. package/dist/validation/moveCommands.d.ts.map +1 -0
  205. package/dist/validation/moveCommands.js +123 -0
  206. package/dist/validation/moveCommands.js.map +1 -0
  207. package/dist/validation/pluginCommands.d.ts +83 -0
  208. package/dist/validation/pluginCommands.d.ts.map +1 -0
  209. package/dist/validation/pluginCommands.js +134 -0
  210. package/dist/validation/pluginCommands.js.map +1 -0
  211. package/dist/validation/pluginManifest.d.ts +67 -0
  212. package/dist/validation/pluginManifest.d.ts.map +1 -0
  213. package/dist/validation/pluginManifest.js +199 -0
  214. package/dist/validation/pluginManifest.js.map +1 -0
  215. package/dist/validation/references.d.ts +57 -0
  216. package/dist/validation/references.d.ts.map +1 -0
  217. package/dist/validation/references.js +314 -0
  218. package/dist/validation/references.js.map +1 -0
  219. 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"}