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,273 @@
1
+ const expectLength = (n) => (params) => params.length === n ? null : `expected ${n} parameter(s), got ${params.length}`;
2
+ const expectAtLeast = (n) => (params) => params.length >= n ? null : `expected at least ${n} parameter(s), got ${params.length}`;
3
+ /**
4
+ * Curated table of core RPG Maker MZ event command codes. Not exhaustive — it
5
+ * covers the commands this server is most likely to read or write, plus enough
6
+ * of the common set that an unrecognized code is a meaningful signal. Codes not
7
+ * listed here produce a soft "unrecognized" warning rather than an error, since
8
+ * plugins are free to introduce their own.
9
+ */
10
+ export const KNOWN_COMMANDS = {
11
+ 0: { name: 'End of list' },
12
+ // Messages
13
+ 101: {
14
+ name: 'Show Text (setup)',
15
+ check: (p) => p.length === 4 || p.length === 5
16
+ ? null
17
+ : `Show Text expects 4 or 5 parameters, got ${p.length}`,
18
+ },
19
+ 102: { name: 'Show Choices', check: expectAtLeast(2) },
20
+ 103: { name: 'Input Number', check: expectLength(2) },
21
+ 104: { name: 'Select Item', check: expectLength(2) },
22
+ 105: { name: 'Show Scrolling Text', check: expectAtLeast(1) },
23
+ 108: { name: 'Comment', check: expectAtLeast(1) },
24
+ // Flow control
25
+ 111: { name: 'Conditional Branch', check: expectAtLeast(1) },
26
+ 112: { name: 'Loop' },
27
+ 113: { name: 'Break Loop' },
28
+ 115: { name: 'Exit Event Processing' },
29
+ 117: { name: 'Common Event', check: expectLength(1) },
30
+ 118: { name: 'Label', check: expectLength(1) },
31
+ 119: { name: 'Jump to Label', check: expectLength(1) },
32
+ // Game progression
33
+ 121: { name: 'Control Switches', check: expectLength(3) },
34
+ 122: { name: 'Control Variables', check: expectAtLeast(4) },
35
+ 123: { name: 'Control Self Switch', check: expectLength(2) },
36
+ 124: { name: 'Control Timer', check: expectAtLeast(1) },
37
+ 125: { name: 'Change Gold', check: expectLength(3) },
38
+ 126: { name: 'Change Items', check: expectLength(4) },
39
+ 127: { name: 'Change Weapons', check: expectLength(5) },
40
+ 128: { name: 'Change Armors', check: expectLength(5) },
41
+ 129: { name: 'Change Party Member', check: expectLength(3) },
42
+ // System settings (name-only; params not inspected)
43
+ 132: { name: 'Change Battle BGM' },
44
+ 133: { name: 'Change Victory ME' },
45
+ 134: { name: 'Change Save Access' },
46
+ 135: { name: 'Change Menu Access' },
47
+ 136: { name: 'Change Encounter Disable' },
48
+ 137: { name: 'Change Formation Access' },
49
+ 138: { name: 'Change Window Color' },
50
+ 139: { name: 'Change Defeat ME' },
51
+ 140: { name: 'Change Vehicle BGM' },
52
+ // Movement / character
53
+ 201: { name: 'Transfer Player', check: expectLength(6) },
54
+ 202: { name: 'Set Vehicle Location' },
55
+ 203: { name: 'Set Event Location' },
56
+ 204: { name: 'Scroll Map' },
57
+ 205: { name: 'Set Movement Route', check: expectAtLeast(2) },
58
+ 206: { name: 'Get on/off Vehicle' },
59
+ 211: { name: 'Change Transparency' },
60
+ 212: { name: 'Show Animation', check: expectLength(3) },
61
+ 213: { name: 'Show Balloon Icon', check: expectLength(3) },
62
+ 214: { name: 'Erase Event' },
63
+ 216: { name: 'Change Player Followers' },
64
+ 217: { name: 'Gather Followers' },
65
+ // Screen / audio / timing
66
+ 221: { name: 'Fadeout Screen', check: expectLength(0) },
67
+ 222: { name: 'Fadein Screen', check: expectLength(0) },
68
+ 223: { name: 'Tint Screen', check: expectLength(3) },
69
+ 224: { name: 'Flash Screen', check: expectLength(3) },
70
+ 225: { name: 'Shake Screen', check: expectLength(4) },
71
+ 230: { name: 'Wait', check: expectLength(1) },
72
+ 231: { name: 'Show Picture', check: expectLength(10) },
73
+ 232: { name: 'Move Picture' },
74
+ 233: { name: 'Rotate Picture' },
75
+ 234: { name: 'Tint Picture' },
76
+ 235: { name: 'Erase Picture', check: expectLength(1) },
77
+ 236: { name: 'Set Weather Effect' },
78
+ 241: { name: 'Play BGM', check: expectLength(1) },
79
+ 242: { name: 'Fadeout BGM' },
80
+ 243: { name: 'Save BGM' },
81
+ 244: { name: 'Replay BGM' },
82
+ 245: { name: 'Play BGS', check: expectLength(1) },
83
+ 246: { name: 'Fadeout BGS' },
84
+ 249: { name: 'Play ME', check: expectLength(1) },
85
+ 250: { name: 'Play SE', check: expectLength(1) },
86
+ 251: { name: 'Stop SE' },
87
+ 261: { name: 'Play Movie' },
88
+ // Map / scene settings
89
+ 281: { name: 'Change Map Name Display' },
90
+ 282: { name: 'Change Tileset' },
91
+ 283: { name: 'Change Battle Background' },
92
+ 284: { name: 'Change Parallax' },
93
+ 285: { name: 'Get Location Info' },
94
+ // Actor / party
95
+ 301: { name: 'Battle Processing', check: expectLength(4) },
96
+ 302: { name: 'Shop Processing', check: expectLength(5) },
97
+ 303: { name: 'Name Input Processing', check: expectLength(2) },
98
+ 311: { name: 'Change HP', check: expectLength(6) },
99
+ 312: { name: 'Change MP', check: expectLength(5) },
100
+ 313: { name: 'Change State', check: expectLength(4) },
101
+ 314: { name: 'Recover All', check: expectLength(2) },
102
+ 315: { name: 'Change EXP', check: expectLength(6) },
103
+ 316: { name: 'Change Level', check: expectLength(6) },
104
+ // Actor attributes (name-only; params not inspected)
105
+ 317: { name: 'Change Parameter' },
106
+ 318: { name: 'Change Skill' },
107
+ 319: { name: 'Change Equipment' },
108
+ 320: { name: 'Change Name' },
109
+ 321: { name: 'Change Class' },
110
+ 322: { name: 'Change Actor Images' },
111
+ 323: { name: 'Change Vehicle Image' },
112
+ 324: { name: 'Change Nickname' },
113
+ 325: { name: 'Change Profile' },
114
+ // Enemy (in-battle; name-only)
115
+ 331: { name: 'Change Enemy HP' },
116
+ 332: { name: 'Change Enemy MP' },
117
+ 333: { name: 'Change Enemy TP' },
118
+ 334: { name: 'Change Enemy State' },
119
+ 335: { name: 'Enemy Recover All' },
120
+ 336: { name: 'Enemy Appear' },
121
+ 337: { name: 'Enemy Transform' },
122
+ 338: { name: 'Show Battle Animation' },
123
+ 339: { name: 'Force Action' },
124
+ 340: { name: 'Abort Battle' },
125
+ // Scene control (all parameterless)
126
+ 351: { name: 'Open Menu Screen', check: expectLength(0) },
127
+ 352: { name: 'Open Save Screen', check: expectLength(0) },
128
+ 353: { name: 'Game Over', check: expectLength(0) },
129
+ 354: { name: 'Return to Title Screen', check: expectLength(0) },
130
+ // Advanced
131
+ 355: { name: 'Script', check: expectAtLeast(1) },
132
+ 356: { name: 'Plugin Command (MV)', check: expectAtLeast(1) },
133
+ 357: { name: 'Plugin Command (MZ)', check: expectAtLeast(4) },
134
+ // Continuation codes (data rows for the setup command above them)
135
+ 401: { name: 'Show Text line', check: expectLength(1) },
136
+ 402: { name: 'When [choice]', check: expectLength(2) },
137
+ 403: { name: 'When Cancel' },
138
+ 404: { name: 'End Choices' },
139
+ 405: { name: 'Scrolling Text line', check: expectLength(1) },
140
+ 408: { name: 'Comment line', check: expectAtLeast(1) },
141
+ 505: { name: 'Move Route step', check: expectLength(1) },
142
+ 605: { name: 'Shop goods', check: expectLength(4) },
143
+ 411: { name: 'Else' },
144
+ 412: { name: 'End Conditional Branch' },
145
+ 413: { name: 'Repeat Above' },
146
+ 655: { name: 'Script line', check: expectAtLeast(1) },
147
+ };
148
+ /** Validate a single event command. */
149
+ export function validateCommand(command, path) {
150
+ const warnings = [];
151
+ if (typeof command?.code !== 'number') {
152
+ warnings.push({ path, message: 'command is missing a numeric `code`', severity: 'error' });
153
+ return warnings;
154
+ }
155
+ if (!Array.isArray(command.parameters)) {
156
+ warnings.push({
157
+ path,
158
+ code: command.code,
159
+ message: '`parameters` is not an array',
160
+ severity: 'error',
161
+ });
162
+ return warnings;
163
+ }
164
+ const spec = KNOWN_COMMANDS[command.code];
165
+ if (!spec) {
166
+ // Advisory: KNOWN_COMMANDS is curated, not exhaustive, and plugins are free
167
+ // to introduce their own codes — blocking here would fail valid writes.
168
+ warnings.push({
169
+ path,
170
+ code: command.code,
171
+ message: `unrecognized command code ${command.code} (may be a plugin command)`,
172
+ severity: 'warning',
173
+ });
174
+ return warnings;
175
+ }
176
+ const problem = spec.check?.(command.parameters);
177
+ if (problem) {
178
+ warnings.push({
179
+ path,
180
+ code: command.code,
181
+ message: `${spec.name}: ${problem}`,
182
+ severity: 'error',
183
+ });
184
+ }
185
+ return warnings;
186
+ }
187
+ /** Message-window line budget in characters (default 816px window, 26px font). */
188
+ const TEXT_LINE_LIMIT = 55;
189
+ /** Same budget when a face graphic is shown — the face eats a third of the window. */
190
+ const TEXT_LINE_LIMIT_WITH_FACE = 38;
191
+ /** Display width of a message line: escape codes (\C[3], \N[1], \G, \\, …) cost nothing. */
192
+ function visibleTextLength(line) {
193
+ return line.replace(/\\[A-Z]+\[[^\]]*\]/gi, '').replace(/\\./g, '').length;
194
+ }
195
+ /**
196
+ * Warn (never block) on Show Text lines (401) too wide for the message window —
197
+ * RPG Maker MZ does **not** word-wrap, an over-long line is silently cut off at
198
+ * the window edge. Face-aware: a 101 setup with a face image shrinks the budget
199
+ * for the 401 lines that follow it. Exported so the read-only text builders can
200
+ * surface the same warning at build time (on fragments without a terminator).
201
+ */
202
+ export function textLineWidthWarnings(list, path) {
203
+ const warnings = [];
204
+ let faceShown = false;
205
+ list.forEach((command, i) => {
206
+ if (!command || !Array.isArray(command.parameters))
207
+ return;
208
+ if (command.code === 101) {
209
+ faceShown = typeof command.parameters[0] === 'string' && command.parameters[0] !== '';
210
+ }
211
+ else if (command.code === 401 && typeof command.parameters[0] === 'string') {
212
+ const limit = faceShown ? TEXT_LINE_LIMIT_WITH_FACE : TEXT_LINE_LIMIT;
213
+ const length = visibleTextLength(command.parameters[0]);
214
+ if (length > limit) {
215
+ warnings.push({
216
+ path: `${path} / command ${i}`,
217
+ code: 401,
218
+ // Advisory: the line budget is an estimate (fonts and window widths are
219
+ // configurable), and an over-long line still runs.
220
+ severity: 'warning',
221
+ message: `Show Text line is ${length} visible chars but the message window fits ~${limit}${faceShown ? ' with a face shown' : ''} — MZ does not word-wrap, the end will be cut off; split it into shorter 401 lines`,
222
+ });
223
+ }
224
+ }
225
+ });
226
+ return warnings;
227
+ }
228
+ /**
229
+ * Validate an event command list (an event page's `list`). Checks that it is a
230
+ * proper array terminated by the code-0 end marker, then validates each command.
231
+ */
232
+ export function validateCommandList(list, path) {
233
+ const warnings = [];
234
+ if (!Array.isArray(list)) {
235
+ warnings.push({ path, message: 'command list is not an array', severity: 'error' });
236
+ return warnings;
237
+ }
238
+ if (list.length === 0 || list[list.length - 1]?.code !== 0) {
239
+ warnings.push({
240
+ path,
241
+ message: 'command list should end with an end-of-list command (code 0)',
242
+ severity: 'error',
243
+ });
244
+ }
245
+ list.forEach((command, i) => {
246
+ warnings.push(...validateCommand(command, `${path} / command ${i}`));
247
+ });
248
+ warnings.push(...textLineWidthWarnings(list, path));
249
+ return warnings;
250
+ }
251
+ /** Validate every page of an event. */
252
+ export function validateEvent(event, path = `event ${event?.id}`) {
253
+ const warnings = [];
254
+ if (!event || !Array.isArray(event.pages)) {
255
+ warnings.push({ path, message: 'event has no `pages` array', severity: 'error' });
256
+ return { ok: warnings.length === 0, warnings };
257
+ }
258
+ event.pages.forEach((page, i) => {
259
+ warnings.push(...validateCommandList(page?.list, `${path} / page ${i}`));
260
+ });
261
+ return { ok: warnings.length === 0, warnings };
262
+ }
263
+ /** Validate every (non-null) event in a map's `events` array. */
264
+ export function validateEvents(events) {
265
+ const warnings = [];
266
+ events.forEach((event) => {
267
+ if (event) {
268
+ warnings.push(...validateEvent(event).warnings);
269
+ }
270
+ });
271
+ return { ok: warnings.length === 0, warnings };
272
+ }
273
+ //# sourceMappingURL=eventCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventCommands.js","sourceRoot":"","sources":["../../src/validation/eventCommands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { ValidationWarning } from './eventCommands.js';
2
+ /**
3
+ * Throw-by-default write gating.
4
+ *
5
+ * Validation used to be warn-by-default everywhere: a tool wrote the file, then
6
+ * validated what it had written and returned the findings. A malformed event
7
+ * therefore **landed on disk**, and the warning was easy for an LLM client to
8
+ * skim past — the caller had to notice the problem and undo it. Now a
9
+ * structural finding (`severity: 'error'` — see {@link ValidationWarning})
10
+ * aborts the write *before* it happens, and the caller must opt back in with
11
+ * `force: true`.
12
+ *
13
+ * The two tiers matter: only findings that are almost always bugs block. A
14
+ * finding that is legitimately possible (an unrecognized command code may be a
15
+ * plugin command, an over-long text line still runs) stays advisory and is
16
+ * reported exactly as before, so this can't manufacture false failures.
17
+ */
18
+ /**
19
+ * A hook run with the fully-built value immediately **before** it is committed.
20
+ * Throwing aborts the write — nothing reaches disk, and in dry-run nothing is
21
+ * reported as `wouldChange`, so a preview of a bad write fails the same way the
22
+ * real write would.
23
+ */
24
+ export type PreCommit<T> = (value: T) => void | Promise<void>;
25
+ /** The findings that refuse a write: structural problems, not advice. */
26
+ export declare function blockingWarnings(warnings: ValidationWarning[]): ValidationWarning[];
27
+ /**
28
+ * Refuse a write whose result is structurally malformed, unless the caller has
29
+ * explicitly forced it. The message lists every blocking finding (an LLM caller
30
+ * usually wants to fix them all in one go) and names the escape hatch.
31
+ */
32
+ export declare function assertWritable(warnings: ValidationWarning[], force: boolean | undefined, subject: string): void;
33
+ /**
34
+ * Build a {@link PreCommit} hook that validates the would-be result, refuses the
35
+ * write when anything blocks, and keeps the findings for the tool's response.
36
+ *
37
+ * The returned `warnings` array is filled in when the hook runs (i.e. once the
38
+ * mutating function has built its result), so a handler reads it *after* the
39
+ * call:
40
+ *
41
+ * ```ts
42
+ * const gate = writeGate<MapEvent>(args.force, `event on map ${mapId}`, (event) =>
43
+ * validateEvent(event).warnings,
44
+ * );
45
+ * const event = await createMapEvent(projectPath, mapId, data, gate.precommit);
46
+ * return gate.respond({ event });
47
+ * ```
48
+ */
49
+ export declare function writeGate<T>(force: boolean | undefined, subject: string, compute: (value: T) => ValidationWarning[] | Promise<ValidationWarning[]>): {
50
+ precommit: PreCommit<T>;
51
+ warnings: ValidationWarning[];
52
+ respond: <R extends object>(result: R) => R & {
53
+ warnings?: ValidationWarning[];
54
+ };
55
+ };
56
+ //# sourceMappingURL=gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../../src/validation/gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;;;;;;;;;;;GAeG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9D,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,EAAE,CAEnF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,KAAK,EAAE,OAAO,GAAG,SAAS,EAC1B,OAAO,EAAE,MAAM,GACd,IAAI,CAYN;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,CAAC,EACzB,KAAK,EAAE,OAAO,GAAG,SAAS,EAC1B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,iBAAiB,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,GACxE;IACD,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACxB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG;QAAE,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAA;KAAE,CAAC;CAClF,CAaA"}
@@ -0,0 +1,50 @@
1
+ /** The findings that refuse a write: structural problems, not advice. */
2
+ export function blockingWarnings(warnings) {
3
+ return warnings.filter((warning) => warning.severity === 'error');
4
+ }
5
+ /**
6
+ * Refuse a write whose result is structurally malformed, unless the caller has
7
+ * explicitly forced it. The message lists every blocking finding (an LLM caller
8
+ * usually wants to fix them all in one go) and names the escape hatch.
9
+ */
10
+ export function assertWritable(warnings, force, subject) {
11
+ if (force)
12
+ return;
13
+ const blocking = blockingWarnings(warnings);
14
+ if (blocking.length === 0)
15
+ return;
16
+ const detail = blocking.map((w) => ` - ${w.path}: ${w.message}`).join('\n');
17
+ throw new Error(`Refusing to write ${subject}: the result would be structurally invalid, so nothing was written.\n` +
18
+ `${detail}\n` +
19
+ `Fix the problem(s) above, or pass force: true to write anyway.`);
20
+ }
21
+ /**
22
+ * Build a {@link PreCommit} hook that validates the would-be result, refuses the
23
+ * write when anything blocks, and keeps the findings for the tool's response.
24
+ *
25
+ * The returned `warnings` array is filled in when the hook runs (i.e. once the
26
+ * mutating function has built its result), so a handler reads it *after* the
27
+ * call:
28
+ *
29
+ * ```ts
30
+ * const gate = writeGate<MapEvent>(args.force, `event on map ${mapId}`, (event) =>
31
+ * validateEvent(event).warnings,
32
+ * );
33
+ * const event = await createMapEvent(projectPath, mapId, data, gate.precommit);
34
+ * return gate.respond({ event });
35
+ * ```
36
+ */
37
+ export function writeGate(force, subject, compute) {
38
+ const warnings = [];
39
+ return {
40
+ warnings,
41
+ precommit: async (value) => {
42
+ warnings.push(...(await compute(value)));
43
+ assertWritable(warnings, force, subject);
44
+ },
45
+ // Advisory findings still ride along on a successful write; a clean write
46
+ // keeps the tidy no-`warnings` response shape it has always had.
47
+ respond: (result) => (warnings.length > 0 ? { ...result, warnings } : result),
48
+ };
49
+ }
50
+ //# sourceMappingURL=gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate.js","sourceRoot":"","sources":["../../src/validation/gate.ts"],"names":[],"mappings":"AA2BA,yEAAyE;AACzE,MAAM,UAAU,gBAAgB,CAAC,QAA6B;IAC5D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,QAA6B,EAC7B,KAA0B,EAC1B,OAAe;IAEf,IAAI,KAAK;QAAE,OAAO;IAElB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAElC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7E,MAAM,IAAI,KAAK,CACb,qBAAqB,OAAO,uEAAuE;QACjG,GAAG,MAAM,IAAI;QACb,gEAAgE,CACnE,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,SAAS,CACvB,KAA0B,EAC1B,OAAe,EACf,OAAyE;IAMzE,MAAM,QAAQ,GAAwB,EAAE,CAAC;IAEzC,OAAO;QACL,QAAQ;QACR,SAAS,EAAE,KAAK,EAAE,KAAQ,EAAE,EAAE;YAC5B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;QACD,0EAA0E;QAC1E,iEAAiE;QACjE,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;KAC9E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { MoveCommand } from '../utils/types.js';
2
+ import { ValidationWarning } from './eventCommands.js';
3
+ /**
4
+ * Specification for a known RPG Maker MZ move-route command. `params` is the
5
+ * exact number of parameters the command expects (default 0 for the many
6
+ * parameterless move commands). Mirrors the CommandSpec shape in
7
+ * `eventCommands.ts`, but move commands are a separate, smaller code table.
8
+ */
9
+ interface MoveCommandSpec {
10
+ name: string;
11
+ params?: number;
12
+ }
13
+ /**
14
+ * The RPG Maker MZ move-route command table (Game_Character `ROUTE_*` constants).
15
+ * A move route's `list` uses these codes — a different, self-contained table from
16
+ * the event-command codes in `eventCommands.ts`. Codes not listed here produce a
17
+ * soft "unrecognized" warning (warn-by-default), since plugins can add their own.
18
+ */
19
+ export declare const KNOWN_MOVE_COMMANDS: Record<number, MoveCommandSpec>;
20
+ /** Validate a single move-route command. */
21
+ export declare function validateMoveCommand(command: MoveCommand, path: string): ValidationWarning[];
22
+ /**
23
+ * Validate a move route (the object command 205 carries, or an event page's
24
+ * autonomous `moveRoute`). Checks that `list` is an array terminated by the
25
+ * Route-End marker (code 0), then validates each move command. Never throws —
26
+ * findings are returned and classified by `severity`; it's the mutating tools
27
+ * that decide to refuse a write (see `validation/gate.ts`).
28
+ */
29
+ export declare function validateMoveRoute(route: unknown, path?: string): ValidationWarning[];
30
+ export {};
31
+ //# sourceMappingURL=moveCommands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moveCommands.d.ts","sourceRoot":"","sources":["../../src/validation/moveCommands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAa,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;GAKG;AACH,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAmD/D,CAAC;AAEF,4CAA4C;AAC5C,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAyC3F;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,SAAe,GAAG,iBAAiB,EAAE,CAsB1F"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * The RPG Maker MZ move-route command table (Game_Character `ROUTE_*` constants).
3
+ * A move route's `list` uses these codes — a different, self-contained table from
4
+ * the event-command codes in `eventCommands.ts`. Codes not listed here produce a
5
+ * soft "unrecognized" warning (warn-by-default), since plugins can add their own.
6
+ */
7
+ export const KNOWN_MOVE_COMMANDS = {
8
+ 0: { name: 'Route End' },
9
+ // Directional movement
10
+ 1: { name: 'Move Down' },
11
+ 2: { name: 'Move Left' },
12
+ 3: { name: 'Move Right' },
13
+ 4: { name: 'Move Up' },
14
+ 5: { name: 'Move Lower Left' },
15
+ 6: { name: 'Move Lower Right' },
16
+ 7: { name: 'Move Upper Left' },
17
+ 8: { name: 'Move Upper Right' },
18
+ 9: { name: 'Move at Random' },
19
+ 10: { name: 'Move toward Player' },
20
+ 11: { name: 'Move away from Player' },
21
+ 12: { name: '1 Step Forward' },
22
+ 13: { name: '1 Step Backward' },
23
+ 14: { name: 'Jump', params: 2 },
24
+ 15: { name: 'Wait', params: 1 },
25
+ // Turning
26
+ 16: { name: 'Turn Down' },
27
+ 17: { name: 'Turn Left' },
28
+ 18: { name: 'Turn Right' },
29
+ 19: { name: 'Turn Up' },
30
+ 20: { name: 'Turn 90° Right' },
31
+ 21: { name: 'Turn 90° Left' },
32
+ 22: { name: 'Turn 180°' },
33
+ 23: { name: 'Turn 90° Right or Left' },
34
+ 24: { name: 'Turn at Random' },
35
+ 25: { name: 'Turn toward Player' },
36
+ 26: { name: 'Turn away from Player' },
37
+ // Switches / movement attributes
38
+ 27: { name: 'Switch ON', params: 1 },
39
+ 28: { name: 'Switch OFF', params: 1 },
40
+ 29: { name: 'Change Speed', params: 1 },
41
+ 30: { name: 'Change Frequency', params: 1 },
42
+ 31: { name: 'Walking Animation ON' },
43
+ 32: { name: 'Walking Animation OFF' },
44
+ 33: { name: 'Stepping Animation ON' },
45
+ 34: { name: 'Stepping Animation OFF' },
46
+ 35: { name: 'Direction Fix ON' },
47
+ 36: { name: 'Direction Fix OFF' },
48
+ 37: { name: 'Through ON' },
49
+ 38: { name: 'Through OFF' },
50
+ 39: { name: 'Transparent ON' },
51
+ 40: { name: 'Transparent OFF' },
52
+ // Appearance / audio / script
53
+ 41: { name: 'Change Image', params: 2 },
54
+ 42: { name: 'Change Opacity', params: 1 },
55
+ 43: { name: 'Change Blend Mode', params: 1 },
56
+ 44: { name: 'Play SE', params: 1 },
57
+ 45: { name: 'Script', params: 1 },
58
+ };
59
+ /** Validate a single move-route command. */
60
+ export function validateMoveCommand(command, path) {
61
+ const warnings = [];
62
+ if (typeof command?.code !== 'number') {
63
+ warnings.push({ path, message: 'move command is missing a numeric `code`', severity: 'error' });
64
+ return warnings;
65
+ }
66
+ if (!Array.isArray(command.parameters)) {
67
+ warnings.push({
68
+ path,
69
+ code: command.code,
70
+ message: '`parameters` is not an array',
71
+ severity: 'error',
72
+ });
73
+ return warnings;
74
+ }
75
+ const spec = KNOWN_MOVE_COMMANDS[command.code];
76
+ if (!spec) {
77
+ // Advisory, for the same reason as an unrecognized event command code.
78
+ warnings.push({
79
+ path,
80
+ code: command.code,
81
+ message: `unrecognized move command code ${command.code} (may be a plugin move command)`,
82
+ severity: 'warning',
83
+ });
84
+ return warnings;
85
+ }
86
+ const expected = spec.params ?? 0;
87
+ if (command.parameters.length !== expected) {
88
+ warnings.push({
89
+ path,
90
+ code: command.code,
91
+ message: `${spec.name}: expected ${expected} parameter(s), got ${command.parameters.length}`,
92
+ severity: 'error',
93
+ });
94
+ }
95
+ return warnings;
96
+ }
97
+ /**
98
+ * Validate a move route (the object command 205 carries, or an event page's
99
+ * autonomous `moveRoute`). Checks that `list` is an array terminated by the
100
+ * Route-End marker (code 0), then validates each move command. Never throws —
101
+ * findings are returned and classified by `severity`; it's the mutating tools
102
+ * that decide to refuse a write (see `validation/gate.ts`).
103
+ */
104
+ export function validateMoveRoute(route, path = 'move route') {
105
+ const warnings = [];
106
+ if (!route || typeof route !== 'object' || !Array.isArray(route.list)) {
107
+ warnings.push({ path, message: 'move route has no `list` array', severity: 'error' });
108
+ return warnings;
109
+ }
110
+ const list = route.list;
111
+ if (list.length === 0 || list[list.length - 1]?.code !== 0) {
112
+ warnings.push({
113
+ path,
114
+ message: 'move route should end with a Route-End command (code 0)',
115
+ severity: 'error',
116
+ });
117
+ }
118
+ list.forEach((command, i) => {
119
+ warnings.push(...validateMoveCommand(command, `${path} / command ${i}`));
120
+ });
121
+ return warnings;
122
+ }
123
+ //# sourceMappingURL=moveCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moveCommands.js","sourceRoot":"","sources":["../../src/validation/moveCommands.ts"],"names":[],"mappings":"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"}