koishipro-core.js 1.0.2

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 (51) hide show
  1. package/.eslintignore +6 -0
  2. package/.eslintrc.js +25 -0
  3. package/.prettierrc +4 -0
  4. package/LICENSE +22 -0
  5. package/README.md +108 -0
  6. package/dist/index.cjs +2445 -0
  7. package/dist/index.cjs.map +7 -0
  8. package/dist/index.d.ts +11 -0
  9. package/dist/index.mjs +2384 -0
  10. package/dist/index.mjs.map +7 -0
  11. package/dist/src/adapters/index.d.ts +3 -0
  12. package/dist/src/adapters/ocgcore-parsers.d.ts +7 -0
  13. package/dist/src/adapters/script-readers.d.ts +3 -0
  14. package/dist/src/adapters/start-duel.d.ts +2 -0
  15. package/dist/src/constants/index.d.ts +1 -0
  16. package/dist/src/constants/ocgcore.d.ts +6 -0
  17. package/dist/src/create-ocgcore-wrapper.d.ts +8 -0
  18. package/dist/src/load-ocgcore-factory.cjs.d.ts +2 -0
  19. package/dist/src/load-ocgcore-factory.d.ts +1 -0
  20. package/dist/src/load-ocgcore-factory.esm.d.ts +2 -0
  21. package/dist/src/ocgcore-duel.d.ts +31 -0
  22. package/dist/src/ocgcore-wrapper-utils.d.ts +2 -0
  23. package/dist/src/ocgcore-wrapper.d.ts +48 -0
  24. package/dist/src/play-yrp.d.ts +3 -0
  25. package/dist/src/sqljs-card-reader.d.ts +3 -0
  26. package/dist/src/structs/card-data.d.ts +14 -0
  27. package/dist/src/structs/index.d.ts +1 -0
  28. package/dist/src/types/card-data.d.ts +18 -0
  29. package/dist/src/types/index.d.ts +5 -0
  30. package/dist/src/types/ocgcore-enums.d.ts +21 -0
  31. package/dist/src/types/ocgcore-params.d.ts +42 -0
  32. package/dist/src/types/ocgcore-readers.d.ts +1 -0
  33. package/dist/src/types/ocgcore-results.d.ts +101 -0
  34. package/dist/src/utility/binary.d.ts +4 -0
  35. package/dist/src/utility/index.d.ts +2 -0
  36. package/dist/src/utility/utf8.d.ts +2 -0
  37. package/dist/src/vendor/index.d.ts +2 -0
  38. package/dist/src/vendor/ocgcore-constants.d.ts +360 -0
  39. package/dist/src/vendor/script-constants.d.ts +836 -0
  40. package/dist/vendor/libocgcore.shared.d.ts +42 -0
  41. package/dist/vendor/wasm_cjs/libocgcore.cjs +5557 -0
  42. package/dist/vendor/wasm_cjs/libocgcore.cjs.d.ts +4 -0
  43. package/dist/vendor/wasm_cjs/libocgcore.wasm +0 -0
  44. package/dist/vendor/wasm_esm/libocgcore.mjs +5557 -0
  45. package/dist/vendor/wasm_esm/libocgcore.mjs.d.ts +4 -0
  46. package/dist/vendor/wasm_esm/libocgcore.wasm +0 -0
  47. package/index.ts +17 -0
  48. package/package.json +80 -0
  49. package/scripts/download-vendor.js +41 -0
  50. package/scripts/gen-constants.js +156 -0
  51. package/tsconfig.json +20 -0
package/dist/index.cjs ADDED
@@ -0,0 +1,2445 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // index.ts
30
+ var index_exports = {};
31
+ __export(index_exports, {
32
+ CardDataStruct: () => CardDataStruct,
33
+ LEN_EMPTY: () => LEN_EMPTY,
34
+ LEN_FAIL: () => LEN_FAIL,
35
+ LEN_HEADER: () => LEN_HEADER,
36
+ MESSAGE_BUFFER_SIZE: () => MESSAGE_BUFFER_SIZE,
37
+ MapReader: () => MapReader,
38
+ OcgcoreCommonConstants: () => OcgcoreCommonConstants,
39
+ OcgcoreDuel: () => OcgcoreDuel,
40
+ OcgcoreDuelOptionFlag: () => OcgcoreDuelOptionFlag,
41
+ OcgcoreDuelRule: () => OcgcoreDuelRule,
42
+ OcgcoreMessageType: () => OcgcoreMessageType,
43
+ OcgcoreScriptConstants: () => OcgcoreScriptConstants,
44
+ OcgcoreWrapper: () => OcgcoreWrapper,
45
+ QUERY_BUFFER_SIZE: () => QUERY_BUFFER_SIZE,
46
+ REGISTRY_BUFFER_SIZE: () => REGISTRY_BUFFER_SIZE,
47
+ ZipReader: () => ZipReader,
48
+ createOcgcoreWrapper: () => createOcgcoreWrapper,
49
+ createSqljsCardReader: () => createSqljsCardReader,
50
+ encodeUtf8: () => encodeUtf8,
51
+ normalizeStartDuelOptions: () => normalizeStartDuelOptions,
52
+ parseCardQuery: () => parseCardQuery,
53
+ parseFieldCardQuery: () => parseFieldCardQuery,
54
+ parseFieldInfo: () => parseFieldInfo,
55
+ parseRegistryDump: () => parseRegistryDump,
56
+ parseRegistryKeys: () => parseRegistryKeys,
57
+ playYrp: () => playYrp,
58
+ readI32: () => readI32,
59
+ readU16: () => readU16,
60
+ readU32: () => readU32,
61
+ readU8: () => readU8
62
+ });
63
+ module.exports = __toCommonJS(index_exports);
64
+ var import_buffer = require("buffer");
65
+
66
+ // src/vendor/ocgcore-constants.ts
67
+ var OcgcoreCommonConstants = {
68
+ ACTIVITY_ATTACK: 5,
69
+ ACTIVITY_BATTLE_PHASE: 6,
70
+ ACTIVITY_CHAIN: 7,
71
+ ACTIVITY_FLIPSUMMON: 4,
72
+ ACTIVITY_NORMALSUMMON: 2,
73
+ ACTIVITY_SPSUMMON: 3,
74
+ ACTIVITY_SUMMON: 1,
75
+ ATTRIBUTES_COUNT: 7,
76
+ ATTRIBUTE_ALL: 127,
77
+ ATTRIBUTE_DARK: 32,
78
+ ATTRIBUTE_DEVINE: 64,
79
+ ATTRIBUTE_EARTH: 1,
80
+ ATTRIBUTE_FIRE: 4,
81
+ ATTRIBUTE_LIGHT: 16,
82
+ ATTRIBUTE_WATER: 2,
83
+ ATTRIBUTE_WIND: 8,
84
+ CARDDATA_ALIAS: 2,
85
+ CARDDATA_ATTACK: 8,
86
+ CARDDATA_ATTRIBUTE: 6,
87
+ CARDDATA_CODE: 1,
88
+ CARDDATA_DEFENSE: 9,
89
+ CARDDATA_LEVEL: 5,
90
+ CARDDATA_LINK_MARKER: 12,
91
+ CARDDATA_LSCALE: 10,
92
+ CARDDATA_RACE: 7,
93
+ CARDDATA_RSCALE: 11,
94
+ CARDDATA_SETCODE: 3,
95
+ CARDDATA_TYPE: 4,
96
+ CHINT_ATTRIBUTE: 4,
97
+ CHINT_CARD: 2,
98
+ CHINT_DESC_ADD: 6,
99
+ CHINT_DESC_REMOVE: 7,
100
+ CHINT_NUMBER: 5,
101
+ CHINT_RACE: 3,
102
+ CHINT_TURN: 1,
103
+ CURRENT_RULE: 5,
104
+ DUEL_ATTACK_FIRST_TURN: 2,
105
+ DUEL_OBSOLETE_RULING: 8,
106
+ DUEL_PSEUDO_SHUFFLE: 16,
107
+ DUEL_RETURN_DECK_TOP: 128,
108
+ DUEL_REVEAL_DECK_SEQ: 256,
109
+ DUEL_SIMPLE_AI: 64,
110
+ DUEL_TAG_MODE: 32,
111
+ DUEL_TEST_MODE: 1,
112
+ EDESC_OPERATION: 1,
113
+ EDESC_RESET: 2,
114
+ FALSE: 0,
115
+ GETEFFECT_ALL: 15,
116
+ GETEFFECT_COPY: 4,
117
+ GETEFFECT_GAIN: 2,
118
+ GETEFFECT_GRANT: 8,
119
+ GETEFFECT_INITIAL: 1,
120
+ HINT_ATTRIB: 7,
121
+ HINT_CARD: 10,
122
+ HINT_CODE: 8,
123
+ HINT_EFFECT: 5,
124
+ HINT_EVENT: 1,
125
+ HINT_MESSAGE: 2,
126
+ HINT_MUSIC: 21,
127
+ HINT_MUSIC_OGG: 23,
128
+ HINT_NUMBER: 9,
129
+ HINT_OPSELECTED: 4,
130
+ HINT_RACE: 6,
131
+ HINT_SELECTMSG: 3,
132
+ HINT_SOUND: 22,
133
+ HINT_ZONE: 11,
134
+ LINK_MARKER_BOTTOM: 2,
135
+ LINK_MARKER_BOTTOM_LEFT: 1,
136
+ LINK_MARKER_BOTTOM_RIGHT: 4,
137
+ LINK_MARKER_LEFT: 8,
138
+ LINK_MARKER_RIGHT: 32,
139
+ LINK_MARKER_TOP: 128,
140
+ LINK_MARKER_TOP_LEFT: 64,
141
+ LINK_MARKER_TOP_RIGHT: 256,
142
+ LOCATION_DECKBOT: 65537,
143
+ LOCATION_DECKSHF: 131073,
144
+ MASTER_RULE3: 3,
145
+ MASTER_RULE_2020: 5,
146
+ MSG_ADD_COUNTER: 101,
147
+ MSG_AI_NAME: 163,
148
+ MSG_ANNOUNCE_ATTRIB: 141,
149
+ MSG_ANNOUNCE_CARD: 142,
150
+ MSG_ANNOUNCE_NUMBER: 143,
151
+ MSG_ANNOUNCE_RACE: 140,
152
+ MSG_ATTACK: 110,
153
+ MSG_ATTACK_DISABLED: 112,
154
+ MSG_BATTLE: 111,
155
+ MSG_BECOME_TARGET: 83,
156
+ MSG_CANCEL_TARGET: 97,
157
+ MSG_CARD_HINT: 160,
158
+ MSG_CARD_TARGET: 96,
159
+ MSG_CHAINED: 71,
160
+ MSG_CHAINING: 70,
161
+ MSG_CHAIN_DISABLED: 76,
162
+ MSG_CHAIN_END: 74,
163
+ MSG_CHAIN_NEGATED: 75,
164
+ MSG_CHAIN_SOLVED: 73,
165
+ MSG_CHAIN_SOLVING: 72,
166
+ MSG_CONFIRM_CARDS: 31,
167
+ MSG_CONFIRM_DECKTOP: 30,
168
+ MSG_CONFIRM_EXTRATOP: 42,
169
+ MSG_CUSTOM_MSG: 180,
170
+ MSG_DAMAGE: 91,
171
+ MSG_DAMAGE_STEP_END: 114,
172
+ MSG_DAMAGE_STEP_START: 113,
173
+ MSG_DECK_TOP: 38,
174
+ MSG_DRAW: 90,
175
+ MSG_EQUIP: 93,
176
+ MSG_FIELD_DISABLED: 56,
177
+ MSG_FLIPSUMMONED: 65,
178
+ MSG_FLIPSUMMONING: 64,
179
+ MSG_HAND_RES: 133,
180
+ MSG_HINT: 2,
181
+ MSG_LPUPDATE: 94,
182
+ MSG_MATCH_KILL: 170,
183
+ MSG_MISSED_EFFECT: 120,
184
+ MSG_MOVE: 50,
185
+ MSG_NEW_PHASE: 41,
186
+ MSG_NEW_TURN: 40,
187
+ MSG_PAY_LPCOST: 100,
188
+ MSG_PLAYER_HINT: 165,
189
+ MSG_POS_CHANGE: 53,
190
+ MSG_RANDOM_SELECTED: 81,
191
+ MSG_RECOVER: 92,
192
+ MSG_RELOAD_FIELD: 162,
193
+ MSG_REMOVE_COUNTER: 102,
194
+ MSG_RESET_TIME: 221,
195
+ MSG_RETRY: 1,
196
+ MSG_REVERSE_DECK: 37,
197
+ MSG_ROCK_PAPER_SCISSORS: 132,
198
+ MSG_SELECT_BATTLECMD: 10,
199
+ MSG_SELECT_CARD: 15,
200
+ MSG_SELECT_CHAIN: 16,
201
+ MSG_SELECT_COUNTER: 22,
202
+ MSG_SELECT_DISFIELD: 24,
203
+ MSG_SELECT_EFFECTYN: 12,
204
+ MSG_SELECT_IDLECMD: 11,
205
+ MSG_SELECT_OPTION: 14,
206
+ MSG_SELECT_PLACE: 18,
207
+ MSG_SELECT_POSITION: 19,
208
+ MSG_SELECT_SUM: 23,
209
+ MSG_SELECT_TRIBUTE: 20,
210
+ MSG_SELECT_UNSELECT_CARD: 26,
211
+ MSG_SELECT_YESNO: 13,
212
+ MSG_SET: 54,
213
+ MSG_SHOW_HINT: 164,
214
+ MSG_SHUFFLE_DECK: 32,
215
+ MSG_SHUFFLE_EXTRA: 39,
216
+ MSG_SHUFFLE_HAND: 33,
217
+ MSG_SHUFFLE_SET_CARD: 36,
218
+ MSG_SORT_CARD: 25,
219
+ MSG_SPSUMMONED: 63,
220
+ MSG_SPSUMMONING: 62,
221
+ MSG_SUMMONED: 61,
222
+ MSG_SUMMONING: 60,
223
+ MSG_SWAP: 55,
224
+ MSG_SWAP_GRAVE_DECK: 35,
225
+ MSG_TAG_SWAP: 161,
226
+ MSG_TOSS_COIN: 130,
227
+ MSG_TOSS_DICE: 131,
228
+ MSG_UPDATE_CARD: 7,
229
+ MSG_WIN: 5,
230
+ NEW_MASTER_RULE: 4,
231
+ NO_FLIP_EFFECT: 65536,
232
+ OPCODE_ADD: 1073741824,
233
+ OPCODE_AND: 1073741828,
234
+ OPCODE_DIV: 1073741827,
235
+ OPCODE_ISATTRIBUTE: 1073742084,
236
+ OPCODE_ISCODE: 1073742080,
237
+ OPCODE_ISRACE: 1073742083,
238
+ OPCODE_ISSETCARD: 1073742081,
239
+ OPCODE_ISTYPE: 1073742082,
240
+ OPCODE_MUL: 1073741826,
241
+ OPCODE_NEG: 1073741830,
242
+ OPCODE_NOT: 1073741831,
243
+ OPCODE_OR: 1073741829,
244
+ OPCODE_SUB: 1073741825,
245
+ OPERATION_CANCELED: -1,
246
+ OPERATION_FAIL: 0,
247
+ OPERATION_SUCCESS: 1,
248
+ PHASE_BATTLE: 128,
249
+ PHASE_BATTLE_START: 8,
250
+ PHASE_BATTLE_STEP: 16,
251
+ PHASE_DAMAGE: 32,
252
+ PHASE_DAMAGE_CAL: 64,
253
+ PHASE_DRAW: 1,
254
+ PHASE_END: 512,
255
+ PHASE_MAIN1: 4,
256
+ PHASE_MAIN2: 256,
257
+ PHASE_STANDBY: 2,
258
+ PHINT_DESC_ADD: 6,
259
+ PHINT_DESC_REMOVE: 7,
260
+ PLAYER_ALL: 3,
261
+ PLAYER_NONE: 2,
262
+ PLAYER_SELFDES: 5,
263
+ POS_ATTACK: 3,
264
+ POS_DEFENSE: 12,
265
+ POS_FACEDOWN: 10,
266
+ POS_FACEDOWN_ATTACK: 2,
267
+ POS_FACEDOWN_DEFENSE: 8,
268
+ POS_FACEUP: 5,
269
+ POS_FACEUP_ATTACK: 1,
270
+ POS_FACEUP_DEFENSE: 4,
271
+ PROCESSOR_BUFFER_LEN: 268435455,
272
+ PROCESSOR_END: 536870912,
273
+ PROCESSOR_FLAG: 4026531840,
274
+ PROCESSOR_NONE: 0,
275
+ PROCESSOR_WAITING: 268435456,
276
+ QUERY_ALIAS: 4,
277
+ QUERY_ATTACK: 256,
278
+ QUERY_ATTRIBUTE: 64,
279
+ QUERY_BASE_ATTACK: 1024,
280
+ QUERY_BASE_DEFENSE: 2048,
281
+ QUERY_CODE: 1,
282
+ QUERY_COUNTERS: 131072,
283
+ QUERY_DEFENSE: 512,
284
+ QUERY_EQUIP_CARD: 16384,
285
+ QUERY_LEVEL: 16,
286
+ QUERY_LINK: 8388608,
287
+ QUERY_LSCALE: 2097152,
288
+ QUERY_OVERLAY_CARD: 65536,
289
+ QUERY_OWNER: 262144,
290
+ QUERY_POSITION: 2,
291
+ QUERY_RACE: 128,
292
+ QUERY_RANK: 32,
293
+ QUERY_REASON: 4096,
294
+ QUERY_REASON_CARD: 8192,
295
+ QUERY_RSCALE: 4194304,
296
+ QUERY_STATUS: 524288,
297
+ QUERY_TARGET_CARD: 32768,
298
+ QUERY_TYPE: 8,
299
+ RACES_COUNT: 26,
300
+ RACE_ALL: 67108863,
301
+ RACE_AQUA: 64,
302
+ RACE_BEAST: 16384,
303
+ RACE_BEASTWARRIOR: 32768,
304
+ RACE_CREATORGOD: 4194304,
305
+ RACE_CYBERSE: 16777216,
306
+ RACE_DEVINE: 2097152,
307
+ RACE_DINOSAUR: 65536,
308
+ RACE_DRAGON: 8192,
309
+ RACE_FAIRY: 4,
310
+ RACE_FIEND: 8,
311
+ RACE_FISH: 131072,
312
+ RACE_ILLUSION: 33554432,
313
+ RACE_INSECT: 2048,
314
+ RACE_MACHINE: 32,
315
+ RACE_PLANT: 1024,
316
+ RACE_PSYCHO: 1048576,
317
+ RACE_PYRO: 128,
318
+ RACE_REPTILE: 524288,
319
+ RACE_ROCK: 256,
320
+ RACE_SEASERPENT: 262144,
321
+ RACE_SPELLCASTER: 2,
322
+ RACE_THUNDER: 4096,
323
+ RACE_WARRIOR: 1,
324
+ RACE_WINDBEAST: 512,
325
+ RACE_WYRM: 8388608,
326
+ RACE_ZOMBIE: 16,
327
+ REASONS_PROCEDURE: 271056896,
328
+ REASON_ACTION: 2147483648,
329
+ REASON_ADJUST: 256,
330
+ REASON_BATTLE: 32,
331
+ REASON_COST: 128,
332
+ REASON_DESTROY: 1,
333
+ REASON_DISCARD: 16384,
334
+ REASON_DISSUMMON: 4096,
335
+ REASON_DRAW: 33554432,
336
+ REASON_EFFECT: 64,
337
+ REASON_FLIP: 8192,
338
+ REASON_FUSION: 262144,
339
+ REASON_LINK: 268435456,
340
+ REASON_LOST_OVERLAY: 536870912,
341
+ REASON_LOST_TARGET: 512,
342
+ REASON_MAINTENANCE: 1073741824,
343
+ REASON_MATERIAL: 8,
344
+ REASON_RDAMAGE: 32768,
345
+ REASON_REDIRECT: 67108864,
346
+ REASON_RELEASE: 2,
347
+ REASON_REPLACE: 16777216,
348
+ REASON_RETURN: 131072,
349
+ REASON_REVEAL: 134217728,
350
+ REASON_RITUAL: 1048576,
351
+ REASON_RRECOVER: 65536,
352
+ REASON_RULE: 1024,
353
+ REASON_SPSUMMON: 2048,
354
+ REASON_SUMMON: 16,
355
+ REASON_SYNCHRO: 524288,
356
+ REASON_TEMPORARY: 4,
357
+ REASON_XYZ: 2097152,
358
+ RETURN_TEMP_REMOVE_TO_FIELD: 1,
359
+ RETURN_TRAP_MONSTER_TO_SZONE: 2,
360
+ SEQ_DECKBOTTOM: 1,
361
+ SEQ_DECKSHUFFLE: 2,
362
+ SEQ_DECKTOP: 0,
363
+ SIZE_AI_NAME: 128,
364
+ SIZE_HINT_MSG: 1024,
365
+ SIZE_MESSAGE_BUFFER: 8192,
366
+ SIZE_RETURN_VALUE: 512,
367
+ STATUS_ACTIVATE_DISABLED: 262144,
368
+ STATUS_ACT_FROM_HAND: 134217728,
369
+ STATUS_ATTACK_CANCELED: 2097152,
370
+ STATUS_BATTLE_DESTROYED: 16384,
371
+ STATUS_BATTLE_RESULT: 64,
372
+ STATUS_CANNOT_CHANGE_FORM: 256,
373
+ STATUS_CHAINING: 65536,
374
+ STATUS_CONTINUOUS_POS: 33554432,
375
+ STATUS_COPYING_EFFECT: 32768,
376
+ STATUS_DESTROY_CONFIRMED: 4096,
377
+ STATUS_DISABLED: 1,
378
+ STATUS_EFFECT_ENABLED: 1024,
379
+ STATUS_EFFECT_REPLACED: 524288,
380
+ STATUS_FLIP_SUMMONING: 1048576,
381
+ STATUS_FLIP_SUMMON_DISABLED: 2147483648,
382
+ STATUS_FLIP_SUMMON_TURN: 536870912,
383
+ STATUS_FORBIDDEN: 67108864,
384
+ STATUS_INITIALIZING: 4194304,
385
+ STATUS_JUST_POS: 16777216,
386
+ STATUS_LEAVE_CONFIRMED: 8192,
387
+ STATUS_NO_LEVEL: 32,
388
+ STATUS_OPPO_BATTLE: 268435456,
389
+ STATUS_PROC_COMPLETE: 8,
390
+ STATUS_SET_TURN: 16,
391
+ STATUS_SPSUMMON_STEP: 128,
392
+ STATUS_SPSUMMON_TURN: 1073741824,
393
+ STATUS_SUMMONING: 512,
394
+ STATUS_SUMMON_DISABLED: 131072,
395
+ STATUS_SUMMON_TURN: 2048,
396
+ STATUS_TO_DISABLE: 4,
397
+ STATUS_TO_ENABLE: 2,
398
+ STATUS_TO_HAND_WITHOUT_CONFIRM: 8388608,
399
+ TRUE: 1,
400
+ TYPES_EXTRA_DECK: 75505728,
401
+ TYPE_CONTINUOUS: 131072,
402
+ TYPE_COUNTER: 1048576,
403
+ TYPE_DUAL: 2048,
404
+ TYPE_EFFECT: 32,
405
+ TYPE_EQUIP: 262144,
406
+ TYPE_FIELD: 524288,
407
+ TYPE_FLIP: 2097152,
408
+ TYPE_FUSION: 64,
409
+ TYPE_LINK: 67108864,
410
+ TYPE_MONSTER: 1,
411
+ TYPE_NORMAL: 16,
412
+ TYPE_PENDULUM: 16777216,
413
+ TYPE_QUICKPLAY: 65536,
414
+ TYPE_RITUAL: 128,
415
+ TYPE_SPELL: 2,
416
+ TYPE_SPIRIT: 512,
417
+ TYPE_SPSUMMON: 33554432,
418
+ TYPE_SYNCHRO: 8192,
419
+ TYPE_TOKEN: 16384,
420
+ TYPE_TOON: 4194304,
421
+ TYPE_TRAP: 4,
422
+ TYPE_TRAPMONSTER: 256,
423
+ TYPE_TUNER: 4096,
424
+ TYPE_UNION: 1024,
425
+ TYPE_XYZ: 8388608
426
+ };
427
+
428
+ // src/constants/ocgcore.ts
429
+ var MESSAGE_BUFFER_SIZE = OcgcoreCommonConstants.SIZE_MESSAGE_BUFFER;
430
+ var QUERY_BUFFER_SIZE = 16384;
431
+ var REGISTRY_BUFFER_SIZE = 8192;
432
+ var LEN_FAIL = 0;
433
+ var LEN_EMPTY = 4;
434
+ var LEN_HEADER = 8;
435
+
436
+ // src/utility/binary.ts
437
+ function readU8(buf, offset) {
438
+ return buf[offset] ?? 0;
439
+ }
440
+ function readU16(buf, offset) {
441
+ return new DataView(buf.buffer, buf.byteOffset, buf.byteLength).getUint16(
442
+ offset,
443
+ true
444
+ );
445
+ }
446
+ function readI32(buf, offset) {
447
+ return new DataView(buf.buffer, buf.byteOffset, buf.byteLength).getInt32(
448
+ offset,
449
+ true
450
+ );
451
+ }
452
+ function readU32(buf, offset) {
453
+ return new DataView(buf.buffer, buf.byteOffset, buf.byteLength).getUint32(
454
+ offset,
455
+ true
456
+ );
457
+ }
458
+
459
+ // src/adapters/ocgcore-parsers.ts
460
+ var decoder = new TextDecoder("utf-8");
461
+ function decodeUtf8(value) {
462
+ return decoder.decode(value);
463
+ }
464
+ function parseCardInfo(payload) {
465
+ let offset = 0;
466
+ const flags = readI32(payload, offset) >>> 0;
467
+ offset += 4;
468
+ const info = { flags, empty: flags === 0 };
469
+ if (flags === 0) {
470
+ return info;
471
+ }
472
+ if (flags & OcgcoreCommonConstants.QUERY_CODE) {
473
+ info.code = readI32(payload, offset);
474
+ offset += 4;
475
+ }
476
+ if (flags & OcgcoreCommonConstants.QUERY_POSITION) {
477
+ const pdata = readI32(payload, offset);
478
+ offset += 4;
479
+ info.position = (pdata >>> 24 & 255) >>> 0;
480
+ }
481
+ if (flags & OcgcoreCommonConstants.QUERY_ALIAS) {
482
+ info.alias = readI32(payload, offset);
483
+ offset += 4;
484
+ }
485
+ if (flags & OcgcoreCommonConstants.QUERY_TYPE) {
486
+ info.type = readI32(payload, offset);
487
+ offset += 4;
488
+ }
489
+ if (flags & OcgcoreCommonConstants.QUERY_LEVEL) {
490
+ info.level = readI32(payload, offset);
491
+ offset += 4;
492
+ }
493
+ if (flags & OcgcoreCommonConstants.QUERY_RANK) {
494
+ info.rank = readI32(payload, offset);
495
+ offset += 4;
496
+ }
497
+ if (flags & OcgcoreCommonConstants.QUERY_ATTRIBUTE) {
498
+ info.attribute = readI32(payload, offset);
499
+ offset += 4;
500
+ }
501
+ if (flags & OcgcoreCommonConstants.QUERY_RACE) {
502
+ info.race = readI32(payload, offset);
503
+ offset += 4;
504
+ }
505
+ if (flags & OcgcoreCommonConstants.QUERY_ATTACK) {
506
+ info.attack = readI32(payload, offset);
507
+ offset += 4;
508
+ }
509
+ if (flags & OcgcoreCommonConstants.QUERY_DEFENSE) {
510
+ info.defense = readI32(payload, offset);
511
+ offset += 4;
512
+ }
513
+ if (flags & OcgcoreCommonConstants.QUERY_BASE_ATTACK) {
514
+ info.baseAttack = readI32(payload, offset);
515
+ offset += 4;
516
+ }
517
+ if (flags & OcgcoreCommonConstants.QUERY_BASE_DEFENSE) {
518
+ info.baseDefense = readI32(payload, offset);
519
+ offset += 4;
520
+ }
521
+ if (flags & OcgcoreCommonConstants.QUERY_REASON) {
522
+ info.reason = readI32(payload, offset);
523
+ offset += 4;
524
+ }
525
+ if (flags & OcgcoreCommonConstants.QUERY_REASON_CARD) {
526
+ offset += 4;
527
+ }
528
+ if (flags & OcgcoreCommonConstants.QUERY_EQUIP_CARD) {
529
+ const controller = readU8(payload, offset) >>> 0;
530
+ const location = readU8(payload, offset + 1) >>> 0;
531
+ const sequence = readU8(payload, offset + 2) >>> 0;
532
+ info.equipCard = { controller, location, sequence };
533
+ offset += 4;
534
+ }
535
+ if (flags & OcgcoreCommonConstants.QUERY_TARGET_CARD) {
536
+ const count = readI32(payload, offset);
537
+ offset += 4;
538
+ const targets = [];
539
+ for (let i = 0; i < count; i++) {
540
+ const controller = readU8(payload, offset) >>> 0;
541
+ const location = readU8(payload, offset + 1) >>> 0;
542
+ const sequence = readU8(payload, offset + 2) >>> 0;
543
+ targets.push({ controller, location, sequence });
544
+ offset += 4;
545
+ }
546
+ info.targetCards = targets;
547
+ }
548
+ if (flags & OcgcoreCommonConstants.QUERY_OVERLAY_CARD) {
549
+ const count = readI32(payload, offset);
550
+ offset += 4;
551
+ const overlay = [];
552
+ for (let i = 0; i < count; i++) {
553
+ overlay.push(readI32(payload, offset));
554
+ offset += 4;
555
+ }
556
+ info.overlayCards = overlay;
557
+ }
558
+ if (flags & OcgcoreCommonConstants.QUERY_COUNTERS) {
559
+ const count = readI32(payload, offset);
560
+ offset += 4;
561
+ const counters = [];
562
+ for (let i = 0; i < count; i++) {
563
+ const type = readU16(payload, offset) >>> 0;
564
+ const ccount = readU16(payload, offset + 2) >>> 0;
565
+ counters.push({ type, count: ccount });
566
+ offset += 4;
567
+ }
568
+ info.counters = counters;
569
+ }
570
+ if (flags & OcgcoreCommonConstants.QUERY_OWNER) {
571
+ info.owner = readI32(payload, offset);
572
+ offset += 4;
573
+ }
574
+ if (flags & OcgcoreCommonConstants.QUERY_STATUS) {
575
+ info.status = readI32(payload, offset);
576
+ offset += 4;
577
+ }
578
+ if (flags & OcgcoreCommonConstants.QUERY_LSCALE) {
579
+ info.lscale = readI32(payload, offset);
580
+ offset += 4;
581
+ }
582
+ if (flags & OcgcoreCommonConstants.QUERY_RSCALE) {
583
+ info.rscale = readI32(payload, offset);
584
+ offset += 4;
585
+ }
586
+ if (flags & OcgcoreCommonConstants.QUERY_LINK) {
587
+ info.link = readI32(payload, offset);
588
+ offset += 4;
589
+ info.linkMarker = readI32(payload, offset);
590
+ offset += 4;
591
+ }
592
+ return info;
593
+ }
594
+ function parseCardQuery(raw, length) {
595
+ if (length <= LEN_HEADER) {
596
+ return null;
597
+ }
598
+ const payload = raw.subarray(4, length);
599
+ return parseCardInfo(payload);
600
+ }
601
+ function parseFieldCardQuery(raw, length) {
602
+ const cards = [];
603
+ let offset = 0;
604
+ while (offset + 4 <= length) {
605
+ const chunkLen = readI32(raw, offset);
606
+ if (chunkLen <= 0) {
607
+ break;
608
+ }
609
+ const end = Math.min(length, offset + chunkLen);
610
+ if (chunkLen <= LEN_HEADER) {
611
+ cards.push({ flags: 0, empty: true });
612
+ } else {
613
+ const payload = raw.subarray(offset + 4, end);
614
+ cards.push(parseCardInfo(payload));
615
+ }
616
+ offset += chunkLen;
617
+ }
618
+ return cards;
619
+ }
620
+ function parseFieldInfo(raw) {
621
+ let offset = 0;
622
+ const message = readU8(raw, offset++) >>> 0;
623
+ const duelRule = readU8(raw, offset++) >>> 0;
624
+ const players = [];
625
+ for (let i = 0; i < 2; i++) {
626
+ const lp = readI32(raw, offset) >>> 0;
627
+ offset += 4;
628
+ const mzone = [];
629
+ for (let seq = 0; seq < 7; seq++) {
630
+ const occupied = readU8(raw, offset++) >>> 0 !== 0;
631
+ if (occupied) {
632
+ const position = readU8(raw, offset++) >>> 0;
633
+ const xyzCount = readU8(raw, offset++) >>> 0;
634
+ mzone.push({ occupied, position, xyzCount });
635
+ } else {
636
+ mzone.push({ occupied });
637
+ }
638
+ }
639
+ const szone = [];
640
+ for (let seq = 0; seq < 8; seq++) {
641
+ const occupied = readU8(raw, offset++) >>> 0 !== 0;
642
+ if (occupied) {
643
+ const position = readU8(raw, offset++) >>> 0;
644
+ szone.push({ occupied, position });
645
+ } else {
646
+ szone.push({ occupied });
647
+ }
648
+ }
649
+ const deckCount = readU8(raw, offset++) >>> 0;
650
+ const handCount = readU8(raw, offset++) >>> 0;
651
+ const graveCount = readU8(raw, offset++) >>> 0;
652
+ const removedCount = readU8(raw, offset++) >>> 0;
653
+ const extraCount = readU8(raw, offset++) >>> 0;
654
+ const extraPCount = readU8(raw, offset++) >>> 0;
655
+ players[i] = {
656
+ lp,
657
+ mzone,
658
+ szone,
659
+ deckCount,
660
+ handCount,
661
+ graveCount,
662
+ removedCount,
663
+ extraCount,
664
+ extraPCount
665
+ };
666
+ }
667
+ const chainCount = readU8(raw, offset++) >>> 0;
668
+ const chains = [];
669
+ for (let i = 0; i < chainCount; i++) {
670
+ const code = readU32(raw, offset) >>> 0;
671
+ offset += 4;
672
+ const infoLocation = readU32(raw, offset) >>> 0;
673
+ offset += 4;
674
+ const chainCard = {
675
+ controller: (infoLocation & 255) >>> 0,
676
+ location: (infoLocation >>> 8 & 255) >>> 0,
677
+ sequence: (infoLocation >>> 16 & 255) >>> 0,
678
+ subSequence: (infoLocation >>> 24 & 255) >>> 0
679
+ };
680
+ const trigger = {
681
+ controller: readU8(raw, offset++) >>> 0,
682
+ location: readU8(raw, offset++) >>> 0,
683
+ sequence: readU8(raw, offset++) >>> 0
684
+ };
685
+ const description = readU32(raw, offset) >>> 0;
686
+ offset += 4;
687
+ chains.push({ code, chainCard, trigger, description });
688
+ }
689
+ return { message, duelRule, players, chains };
690
+ }
691
+ function parseRegistryKeys(raw) {
692
+ const keys = [];
693
+ let offset = 0;
694
+ while (offset + 2 <= raw.length) {
695
+ const len = readU16(raw, offset);
696
+ offset += 2;
697
+ if (offset + len > raw.length) {
698
+ break;
699
+ }
700
+ const keyBytes = raw.subarray(offset, offset + len);
701
+ offset += len;
702
+ keys.push(decodeUtf8(keyBytes));
703
+ }
704
+ return keys;
705
+ }
706
+ function parseRegistryDump(raw) {
707
+ const entries = [];
708
+ let offset = 0;
709
+ while (offset + 4 <= raw.length) {
710
+ const keyLen = readU16(raw, offset);
711
+ const valLen = readU16(raw, offset + 2);
712
+ offset += 4;
713
+ if (offset + keyLen + valLen > raw.length) {
714
+ break;
715
+ }
716
+ const keyBytes = raw.subarray(offset, offset + keyLen);
717
+ offset += keyLen;
718
+ const valueBytes = raw.subarray(offset, offset + valLen);
719
+ offset += valLen;
720
+ const entry = {
721
+ key: decodeUtf8(keyBytes),
722
+ value: valueBytes
723
+ };
724
+ entry.valueText = decodeUtf8(valueBytes);
725
+ entries.push(entry);
726
+ }
727
+ return entries;
728
+ }
729
+
730
+ // src/adapters/start-duel.ts
731
+ function normalizeStartDuelOptions(options) {
732
+ if (typeof options === "number") {
733
+ return options;
734
+ }
735
+ const duelRule = options.rule ?? 0;
736
+ let duelOptions = options.options ?? 0;
737
+ if (options.flags?.length) {
738
+ for (const flag of options.flags) {
739
+ duelOptions = (duelOptions | flag) >>> 0;
740
+ }
741
+ }
742
+ return ((duelRule & 65535) << 16 | duelOptions & 65535) >>> 0;
743
+ }
744
+
745
+ // src/utility/utf8.ts
746
+ var encoder = new TextEncoder();
747
+ var decoder2 = new TextDecoder("utf-8");
748
+ function encodeUtf8(value) {
749
+ return encoder.encode(value);
750
+ }
751
+
752
+ // src/ocgcore-duel.ts
753
+ var OcgcoreDuel = class {
754
+ constructor(ocgcoreWrapper, duelPtr) {
755
+ this.ocgcoreWrapper = ocgcoreWrapper;
756
+ this.duelPtr = duelPtr;
757
+ this.returnPtr = 0;
758
+ this.returnSize = 512;
759
+ }
760
+ startDuel(options) {
761
+ if (!this.returnPtr) {
762
+ this.returnPtr = this.ocgcoreWrapper.malloc(this.returnSize);
763
+ }
764
+ const optionValue = normalizeStartDuelOptions(options);
765
+ this.ocgcoreWrapper.ocgcoreModule._start_duel(this.duelPtr, optionValue);
766
+ }
767
+ endDuel() {
768
+ this.ocgcoreWrapper.ocgcoreModule._end_duel(this.duelPtr);
769
+ if (this.returnPtr) {
770
+ this.ocgcoreWrapper.free(this.returnPtr);
771
+ this.returnPtr = 0;
772
+ }
773
+ this.ocgcoreWrapper.forgetDuel(this.duelPtr);
774
+ }
775
+ setPlayerInfo(info) {
776
+ this.ocgcoreWrapper.ocgcoreModule._set_player_info(
777
+ this.duelPtr,
778
+ info.playerId,
779
+ info.lp,
780
+ info.startCount,
781
+ info.drawCount
782
+ );
783
+ }
784
+ _getLogMessage(bufPtr) {
785
+ return this.ocgcoreWrapper.ocgcoreModule._get_log_message(
786
+ this.duelPtr,
787
+ bufPtr
788
+ );
789
+ }
790
+ getMessage(length) {
791
+ const ptr = this.ocgcoreWrapper.malloc(MESSAGE_BUFFER_SIZE);
792
+ this.ocgcoreWrapper.ocgcoreModule._get_message(this.duelPtr, ptr);
793
+ const raw = this.ocgcoreWrapper.copyHeap(ptr, length);
794
+ this.ocgcoreWrapper.free(ptr);
795
+ return { length, raw };
796
+ }
797
+ process() {
798
+ const result = this.ocgcoreWrapper.ocgcoreModule._process(this.duelPtr);
799
+ const length = (result & 268435455) >>> 0;
800
+ const status = (result >>> 28 & 15) >>> 0;
801
+ const message = this.getMessage(length);
802
+ return { length: message.length, raw: message.raw, status };
803
+ }
804
+ newCard(card) {
805
+ this.ocgcoreWrapper.ocgcoreModule._new_card(
806
+ this.duelPtr,
807
+ card.code,
808
+ card.owner,
809
+ card.playerId,
810
+ card.location,
811
+ card.sequence,
812
+ card.position
813
+ );
814
+ }
815
+ newTagCard(card) {
816
+ this.ocgcoreWrapper.ocgcoreModule._new_tag_card(
817
+ this.duelPtr,
818
+ card.code,
819
+ card.owner,
820
+ card.location
821
+ );
822
+ }
823
+ queryCard(query) {
824
+ const ptr = this.ocgcoreWrapper.malloc(QUERY_BUFFER_SIZE);
825
+ const length = this.ocgcoreWrapper.ocgcoreModule._query_card(
826
+ this.duelPtr,
827
+ query.playerId,
828
+ query.location,
829
+ query.sequence,
830
+ query.queryFlag,
831
+ ptr,
832
+ query.useCache ?? 0
833
+ );
834
+ const raw = this.ocgcoreWrapper.copyHeap(ptr, length);
835
+ this.ocgcoreWrapper.free(ptr);
836
+ const card = length <= LEN_HEADER ? null : parseCardQuery(raw, length);
837
+ return { length, raw, card };
838
+ }
839
+ queryFieldCount(query) {
840
+ return this.ocgcoreWrapper.ocgcoreModule._query_field_count(
841
+ this.duelPtr,
842
+ query.playerId,
843
+ query.location
844
+ );
845
+ }
846
+ queryFieldCard(query) {
847
+ const ptr = this.ocgcoreWrapper.malloc(QUERY_BUFFER_SIZE);
848
+ const length = this.ocgcoreWrapper.ocgcoreModule._query_field_card(
849
+ this.duelPtr,
850
+ query.playerId,
851
+ query.location,
852
+ query.queryFlag,
853
+ ptr,
854
+ query.useCache ?? 0
855
+ );
856
+ const raw = this.ocgcoreWrapper.copyHeap(ptr, length);
857
+ this.ocgcoreWrapper.free(ptr);
858
+ const cards = parseFieldCardQuery(raw, length);
859
+ return { length, raw, cards };
860
+ }
861
+ queryFieldInfo() {
862
+ const ptr = this.ocgcoreWrapper.malloc(QUERY_BUFFER_SIZE);
863
+ const length = this.ocgcoreWrapper.ocgcoreModule._query_field_info(
864
+ this.duelPtr,
865
+ ptr
866
+ );
867
+ const raw = this.ocgcoreWrapper.copyHeap(ptr, length);
868
+ this.ocgcoreWrapper.free(ptr);
869
+ const field = parseFieldInfo(raw);
870
+ return { length, raw, field };
871
+ }
872
+ setResponseInt(value) {
873
+ this.ocgcoreWrapper.ocgcoreModule._set_responsei(this.duelPtr, value);
874
+ }
875
+ setResponse(response) {
876
+ if (response.length > this.returnSize) {
877
+ this.ocgcoreWrapper.free(this.returnPtr);
878
+ this.returnPtr = this.ocgcoreWrapper.malloc(response.length);
879
+ this.returnSize = response.length;
880
+ }
881
+ this.ocgcoreWrapper.setHeap(this.returnPtr, response);
882
+ this.ocgcoreWrapper.ocgcoreModule._set_responseb(
883
+ this.duelPtr,
884
+ this.returnPtr
885
+ );
886
+ }
887
+ preloadScript(scriptPath) {
888
+ this.ocgcoreWrapper.useTmpData(
889
+ (ptr) => this.ocgcoreWrapper.ocgcoreModule._preload_script(this.duelPtr, ptr),
890
+ scriptPath
891
+ );
892
+ }
893
+ getRegistryValue(key) {
894
+ const keyBytes = encodeUtf8(key);
895
+ const outPtr = this.ocgcoreWrapper.malloc(REGISTRY_BUFFER_SIZE);
896
+ const length = this.ocgcoreWrapper.useTmpData(
897
+ (keyPtr) => this.ocgcoreWrapper.ocgcoreModule._get_registry_value(
898
+ this.duelPtr,
899
+ keyPtr,
900
+ keyBytes.length,
901
+ outPtr
902
+ ),
903
+ key
904
+ );
905
+ const raw = this.ocgcoreWrapper.copyHeap(outPtr, Math.max(0, length));
906
+ this.ocgcoreWrapper.free(outPtr);
907
+ const value = raw;
908
+ const text = length >= 0 ? decodeUtf8(raw) : void 0;
909
+ return { length, raw, value, text };
910
+ }
911
+ setRegistryValue(key, value) {
912
+ const keyBytes = encodeUtf8(key);
913
+ const valueBytes = encodeUtf8(value);
914
+ this.ocgcoreWrapper.useTmpData(
915
+ (keyPtr, valuePtr) => this.ocgcoreWrapper.ocgcoreModule._set_registry_value(
916
+ this.duelPtr,
917
+ keyPtr,
918
+ keyBytes.length,
919
+ valuePtr,
920
+ valueBytes.length
921
+ ),
922
+ key,
923
+ value
924
+ );
925
+ }
926
+ getRegistryKeys() {
927
+ const outPtr = this.ocgcoreWrapper.malloc(REGISTRY_BUFFER_SIZE);
928
+ const length = this.ocgcoreWrapper.ocgcoreModule._get_registry_keys(
929
+ this.duelPtr,
930
+ outPtr
931
+ );
932
+ const raw = this.ocgcoreWrapper.copyHeap(outPtr, Math.max(0, length));
933
+ this.ocgcoreWrapper.free(outPtr);
934
+ const keys = length >= 0 ? parseRegistryKeys(raw) : [];
935
+ return { length, raw, keys };
936
+ }
937
+ clearRegistry() {
938
+ this.ocgcoreWrapper.ocgcoreModule._clear_registry(this.duelPtr);
939
+ }
940
+ dumpRegistry() {
941
+ const outPtr = this.ocgcoreWrapper.malloc(REGISTRY_BUFFER_SIZE);
942
+ const length = this.ocgcoreWrapper.ocgcoreModule._dump_registry(
943
+ this.duelPtr,
944
+ outPtr
945
+ );
946
+ const raw = this.ocgcoreWrapper.copyHeap(outPtr, Math.max(0, length));
947
+ this.ocgcoreWrapper.free(outPtr);
948
+ const entries = length >= 0 ? parseRegistryDump(raw) : [];
949
+ return { length, raw, entries };
950
+ }
951
+ loadRegistry(input) {
952
+ this.ocgcoreWrapper.useTmpData(
953
+ (ptr) => this.ocgcoreWrapper.ocgcoreModule._load_registry(
954
+ this.duelPtr,
955
+ ptr,
956
+ input.length
957
+ ),
958
+ input
959
+ );
960
+ }
961
+ };
962
+
963
+ // src/structs/card-data.ts
964
+ var import_typed_struct = __toESM(require("typed-struct"));
965
+ var CardDataStruct = new import_typed_struct.default().UInt32LE("code").UInt32LE("alias").UInt16Array("setcode", 16).UInt32LE("type").UInt32LE("level").UInt32LE("attribute").UInt32LE("race").Int32LE("attack").Int32LE("defense").UInt32LE("lscale").UInt32LE("rscale").UInt32LE("linkMarker").compile();
966
+
967
+ // src/types/ocgcore-enums.ts
968
+ var OcgcoreMessageType = /* @__PURE__ */ ((OcgcoreMessageType2) => {
969
+ OcgcoreMessageType2["ScriptError"] = "ScriptError";
970
+ OcgcoreMessageType2["DebugMessage"] = "DebugMessage";
971
+ return OcgcoreMessageType2;
972
+ })(OcgcoreMessageType || {});
973
+ var OcgcoreDuelRule = /* @__PURE__ */ ((OcgcoreDuelRule2) => {
974
+ OcgcoreDuelRule2[OcgcoreDuelRule2["Rule1"] = 1] = "Rule1";
975
+ OcgcoreDuelRule2[OcgcoreDuelRule2["Rule2"] = 2] = "Rule2";
976
+ OcgcoreDuelRule2[OcgcoreDuelRule2["MasterRule3"] = 3] = "MasterRule3";
977
+ OcgcoreDuelRule2[OcgcoreDuelRule2["NewMasterRule"] = 4] = "NewMasterRule";
978
+ OcgcoreDuelRule2[OcgcoreDuelRule2["MasterRule2020"] = 5] = "MasterRule2020";
979
+ return OcgcoreDuelRule2;
980
+ })(OcgcoreDuelRule || {});
981
+ var OcgcoreDuelOptionFlag = /* @__PURE__ */ ((OcgcoreDuelOptionFlag2) => {
982
+ OcgcoreDuelOptionFlag2[OcgcoreDuelOptionFlag2["TestMode"] = 1] = "TestMode";
983
+ OcgcoreDuelOptionFlag2[OcgcoreDuelOptionFlag2["AttackFirstTurn"] = 2] = "AttackFirstTurn";
984
+ OcgcoreDuelOptionFlag2[OcgcoreDuelOptionFlag2["ObsoleteRuling"] = 8] = "ObsoleteRuling";
985
+ OcgcoreDuelOptionFlag2[OcgcoreDuelOptionFlag2["PseudoShuffle"] = 16] = "PseudoShuffle";
986
+ OcgcoreDuelOptionFlag2[OcgcoreDuelOptionFlag2["TagMode"] = 32] = "TagMode";
987
+ OcgcoreDuelOptionFlag2[OcgcoreDuelOptionFlag2["SimpleAI"] = 64] = "SimpleAI";
988
+ OcgcoreDuelOptionFlag2[OcgcoreDuelOptionFlag2["ReturnDeckTop"] = 128] = "ReturnDeckTop";
989
+ OcgcoreDuelOptionFlag2[OcgcoreDuelOptionFlag2["RevealDeckSeq"] = 256] = "RevealDeckSeq";
990
+ return OcgcoreDuelOptionFlag2;
991
+ })(OcgcoreDuelOptionFlag || {});
992
+
993
+ // src/ocgcore-wrapper.ts
994
+ var OcgcoreWrapper = class {
995
+ constructor(ocgcoreModule, options) {
996
+ this.ocgcoreModule = ocgcoreModule;
997
+ this.scriptBufferPtr = 0;
998
+ this.scriptBufferSize = 0;
999
+ this.logBufferPtr = 0;
1000
+ this.logBufferSize = 0;
1001
+ this.tmpStringBufferPtr = 0;
1002
+ this.tmpStringBufferSize = 0;
1003
+ this.scriptReaderFunc = 0;
1004
+ this.cardReaderFunc = 0;
1005
+ this.messageHandlerFunc = 0;
1006
+ this.encoder = new TextEncoder();
1007
+ this.decoder = new TextDecoder("utf-8");
1008
+ this.duels = /* @__PURE__ */ new Map();
1009
+ this.heapU8 = ocgcoreModule.HEAPU8;
1010
+ this.heapView = new DataView(this.heapU8.buffer);
1011
+ this.scriptBufferSize = options?.scriptBufferSize ?? 1048576;
1012
+ this.logBufferSize = options?.logBufferSize ?? 1024;
1013
+ }
1014
+ getUTF8String(ptr) {
1015
+ let length = 0;
1016
+ while (this.heapU8[ptr + length] !== 0) {
1017
+ length++;
1018
+ }
1019
+ return this.decoder.decode(this.heapU8.subarray(ptr, ptr + length));
1020
+ }
1021
+ setHeap(ptr, data) {
1022
+ this.heapU8.set(data, ptr);
1023
+ }
1024
+ copyHeap(ptr, length) {
1025
+ return this.heapU8.slice(ptr, ptr + length);
1026
+ }
1027
+ useTmpData(cb, ...args) {
1028
+ const encoded = args.map(
1029
+ (item) => typeof item === "string" ? this.encoder.encode(item) : item
1030
+ );
1031
+ const totalLength = encoded.reduce((acc, bytes) => acc + bytes.length + 1, 0);
1032
+ if (totalLength > this.tmpStringBufferSize) {
1033
+ if (this.tmpStringBufferPtr) {
1034
+ this.ocgcoreModule._free(this.tmpStringBufferPtr);
1035
+ }
1036
+ this.tmpStringBufferPtr = this.ocgcoreModule._malloc(totalLength);
1037
+ this.tmpStringBufferSize = totalLength;
1038
+ }
1039
+ let offset = 0;
1040
+ const ptrs = encoded.map((bytes) => {
1041
+ const ptr = this.tmpStringBufferPtr + offset;
1042
+ this.heapU8.set(bytes, ptr);
1043
+ this.heapU8[ptr + bytes.length] = 0;
1044
+ offset += bytes.length + 1;
1045
+ return ptr;
1046
+ });
1047
+ return cb(...ptrs);
1048
+ }
1049
+ createFunction(fn, signature) {
1050
+ return this.ocgcoreModule.addFunction(fn, signature);
1051
+ }
1052
+ addFunction(fn, signature) {
1053
+ return this.ocgcoreModule.addFunction(fn, signature);
1054
+ }
1055
+ removeFunction(index) {
1056
+ this.ocgcoreModule.removeFunction(index);
1057
+ }
1058
+ createDuel(seed) {
1059
+ const duelPtr = this.ocgcoreModule._create_duel(seed);
1060
+ return this.getOrCreateDuel(duelPtr);
1061
+ }
1062
+ createDuelV2(seedSequence) {
1063
+ const count = seedSequence.length;
1064
+ const byteLength = count * 4;
1065
+ const ptr = this.ocgcoreModule._malloc(byteLength);
1066
+ const view = new Uint32Array(this.heapU8.buffer, ptr, count);
1067
+ for (let i = 0; i < count; i++) {
1068
+ view[i] = seedSequence[i] >>> 0;
1069
+ }
1070
+ const duelPtr = this.ocgcoreModule._create_duel_v2(ptr);
1071
+ this.ocgcoreModule._free(ptr);
1072
+ return this.getOrCreateDuel(duelPtr);
1073
+ }
1074
+ defaultScriptReader(namePtr, dataPtr) {
1075
+ return this.ocgcoreModule._default_script_reader(namePtr, dataPtr);
1076
+ }
1077
+ malloc(size) {
1078
+ return this.ocgcoreModule._malloc(size);
1079
+ }
1080
+ free(ptr) {
1081
+ this.ocgcoreModule._free(ptr);
1082
+ }
1083
+ _setScriptReader(funcPtr) {
1084
+ this.ocgcoreModule._set_script_reader(funcPtr);
1085
+ }
1086
+ _setCardReader(funcPtr) {
1087
+ this.ocgcoreModule._set_card_reader(funcPtr);
1088
+ }
1089
+ _setMessageHandler(funcPtr) {
1090
+ this.ocgcoreModule._set_message_handler(funcPtr);
1091
+ }
1092
+ stdioExit() {
1093
+ this.ocgcoreModule.___stdio_exit();
1094
+ }
1095
+ setScriptReader(reader) {
1096
+ if (this.scriptReaderFunc) {
1097
+ this.ocgcoreModule.removeFunction(this.scriptReaderFunc);
1098
+ }
1099
+ if (!this.scriptBufferPtr) {
1100
+ this.scriptBufferPtr = this.ocgcoreModule._malloc(this.scriptBufferSize);
1101
+ }
1102
+ this.scriptReaderFunc = this.createFunction((scriptPtr, lenPtr) => {
1103
+ const scriptPath = this.getUTF8String(scriptPtr);
1104
+ const content = reader(scriptPath);
1105
+ if (content == null) {
1106
+ return 0;
1107
+ }
1108
+ const bytes = typeof content === "string" ? this.encoder.encode(content) : content;
1109
+ if (bytes.length > this.scriptBufferSize) {
1110
+ this.ocgcoreModule._free(this.scriptBufferPtr);
1111
+ this.scriptBufferPtr = this.ocgcoreModule._malloc(bytes.length);
1112
+ this.scriptBufferSize = bytes.length;
1113
+ }
1114
+ this.heapU8.set(bytes, this.scriptBufferPtr);
1115
+ this.heapView.setInt32(lenPtr, bytes.length, true);
1116
+ return this.scriptBufferPtr;
1117
+ }, "iii");
1118
+ this._setScriptReader(this.scriptReaderFunc);
1119
+ }
1120
+ setCardReader(reader) {
1121
+ if (this.cardReaderFunc) {
1122
+ this.ocgcoreModule.removeFunction(this.cardReaderFunc);
1123
+ }
1124
+ this.cardReaderFunc = this.createFunction((cardId, cardDataPtr) => {
1125
+ const data = reader(cardId);
1126
+ if (!data) {
1127
+ return 0;
1128
+ }
1129
+ const CardDataCtor = CardDataStruct;
1130
+ let buf;
1131
+ if (data instanceof CardDataCtor) {
1132
+ buf = CardDataStruct.raw(data);
1133
+ } else {
1134
+ const cardData = new CardDataCtor();
1135
+ cardData.code = data.code;
1136
+ cardData.alias = data.alias;
1137
+ const targetSetcode = cardData.setcode;
1138
+ targetSetcode.fill(0);
1139
+ if (data.setcode instanceof Uint16Array && data.setcode.length === 16) {
1140
+ targetSetcode.set(data.setcode);
1141
+ } else {
1142
+ for (let i = 0; i < 16 && i < data.setcode.length; i++) {
1143
+ targetSetcode[i] = data.setcode[i];
1144
+ }
1145
+ }
1146
+ cardData.type = data.type;
1147
+ cardData.level = data.level;
1148
+ cardData.attribute = data.attribute;
1149
+ cardData.race = data.race;
1150
+ cardData.attack = data.attack;
1151
+ cardData.defense = data.defense;
1152
+ cardData.lscale = data.lscale;
1153
+ cardData.rscale = data.rscale;
1154
+ cardData.linkMarker = data.linkMarker;
1155
+ buf = CardDataStruct.raw(cardData);
1156
+ }
1157
+ this.heapU8.set(buf, cardDataPtr);
1158
+ return 0;
1159
+ }, "iii");
1160
+ this._setCardReader(this.cardReaderFunc);
1161
+ }
1162
+ setMessageHandler(handler) {
1163
+ if (!this.logBufferPtr) {
1164
+ this.logBufferPtr = this.ocgcoreModule._malloc(this.logBufferSize);
1165
+ }
1166
+ if (this.messageHandlerFunc) {
1167
+ this.ocgcoreModule.removeFunction(this.messageHandlerFunc);
1168
+ }
1169
+ this.messageHandlerFunc = this.createFunction((duelPtr, messageType) => {
1170
+ this.ocgcoreModule._get_log_message(duelPtr, this.logBufferPtr);
1171
+ const message = this.getUTF8String(this.logBufferPtr);
1172
+ const type = messageType === 1 ? "ScriptError" /* ScriptError */ : messageType === 2 ? "DebugMessage" /* DebugMessage */ : messageType;
1173
+ handler(this.getOrCreateDuel(duelPtr), message, type);
1174
+ }, "iii");
1175
+ this._setMessageHandler(this.messageHandlerFunc);
1176
+ }
1177
+ getOrCreateDuel(duelPtr) {
1178
+ const existing = this.duels.get(duelPtr);
1179
+ if (existing) {
1180
+ return existing;
1181
+ }
1182
+ const duel = new OcgcoreDuel(this, duelPtr);
1183
+ this.duels.set(duelPtr, duel);
1184
+ return duel;
1185
+ }
1186
+ forgetDuel(duelPtr) {
1187
+ this.duels.delete(duelPtr);
1188
+ }
1189
+ finalize() {
1190
+ if (this.scriptReaderFunc) {
1191
+ this.ocgcoreModule.removeFunction(this.scriptReaderFunc);
1192
+ this.scriptReaderFunc = 0;
1193
+ }
1194
+ if (this.cardReaderFunc) {
1195
+ this.ocgcoreModule.removeFunction(this.cardReaderFunc);
1196
+ this.cardReaderFunc = 0;
1197
+ }
1198
+ if (this.messageHandlerFunc) {
1199
+ this.ocgcoreModule.removeFunction(this.messageHandlerFunc);
1200
+ this.messageHandlerFunc = 0;
1201
+ }
1202
+ if (this.scriptBufferPtr) {
1203
+ this.ocgcoreModule._free(this.scriptBufferPtr);
1204
+ this.scriptBufferPtr = 0;
1205
+ this.scriptBufferSize = 0;
1206
+ }
1207
+ if (this.logBufferPtr) {
1208
+ this.ocgcoreModule._free(this.logBufferPtr);
1209
+ this.logBufferPtr = 0;
1210
+ this.logBufferSize = 0;
1211
+ }
1212
+ if (this.tmpStringBufferPtr) {
1213
+ this.ocgcoreModule._free(this.tmpStringBufferPtr);
1214
+ this.tmpStringBufferPtr = 0;
1215
+ this.tmpStringBufferSize = 0;
1216
+ }
1217
+ }
1218
+ };
1219
+
1220
+ // src/ocgcore-wrapper-utils.ts
1221
+ function normalizeOcgcoreFactory(mod) {
1222
+ const typed = mod;
1223
+ if (typeof typed === "function") {
1224
+ return typed;
1225
+ }
1226
+ if (typed && typeof typed.default === "function") {
1227
+ return typed.default;
1228
+ }
1229
+ throw new Error("Invalid ocgcore factory module");
1230
+ }
1231
+
1232
+ // src/load-ocgcore-factory.cjs.ts
1233
+ async function loadOcgcoreFactory() {
1234
+ const mod = require("./vendor/wasm_cjs/libocgcore.cjs");
1235
+ return normalizeOcgcoreFactory(mod);
1236
+ }
1237
+
1238
+ // src/create-ocgcore-wrapper.ts
1239
+ async function createOcgcoreWrapper(options = {}) {
1240
+ const factory = await loadOcgcoreFactory();
1241
+ const overrides = {
1242
+ ...options.moduleOverrides
1243
+ };
1244
+ if (options.wasmBinary) {
1245
+ overrides.wasmBinary = options.wasmBinary;
1246
+ }
1247
+ if (options.locateFile) {
1248
+ overrides.locateFile = options.locateFile;
1249
+ }
1250
+ const moduleInstance = await factory(overrides);
1251
+ return new OcgcoreWrapper(moduleInstance);
1252
+ }
1253
+
1254
+ // src/adapters/script-readers.ts
1255
+ var import_jszip = __toESM(require("jszip"));
1256
+ var SCRIPT_PREFIX = "./script/";
1257
+ function normalizePath(input) {
1258
+ let path = input.replace(/\\/g, "/");
1259
+ if (path.startsWith(SCRIPT_PREFIX)) {
1260
+ path = path.slice(SCRIPT_PREFIX.length);
1261
+ }
1262
+ return path;
1263
+ }
1264
+ function buildCandidates(filename) {
1265
+ const entries = [
1266
+ filename,
1267
+ `specials/${filename}`,
1268
+ `expansions/script/${filename}`,
1269
+ `script/${filename}`
1270
+ ];
1271
+ const candidates = [];
1272
+ for (const entry of entries) {
1273
+ candidates.push(entry);
1274
+ if (!entry.startsWith("./")) {
1275
+ const dotEntry = entry.startsWith("/") ? `./${entry.slice(1)}` : `./${entry}`;
1276
+ candidates.push(dotEntry);
1277
+ }
1278
+ }
1279
+ return candidates;
1280
+ }
1281
+ function MapReader(map) {
1282
+ return (path) => {
1283
+ const filename = normalizePath(path);
1284
+ const candidates = buildCandidates(filename);
1285
+ for (const candidate of candidates) {
1286
+ if (map.has(candidate)) {
1287
+ return map.get(candidate) ?? null;
1288
+ }
1289
+ }
1290
+ return null;
1291
+ };
1292
+ }
1293
+ function normalizeZipEntryName(name) {
1294
+ const normalized = name.replace(/\\/g, "/").replace(/^\.?\//, "");
1295
+ const names = /* @__PURE__ */ new Set();
1296
+ names.add(normalized);
1297
+ if (normalized.startsWith("script/")) {
1298
+ names.add(normalized.slice("script/".length));
1299
+ }
1300
+ return Array.from(names);
1301
+ }
1302
+ async function ZipReader(data) {
1303
+ const zip = await import_jszip.default.loadAsync(data);
1304
+ const map = /* @__PURE__ */ new Map();
1305
+ const entries = Object.values(zip.files);
1306
+ await Promise.all(
1307
+ entries.map(async (entry) => {
1308
+ if (entry.dir) {
1309
+ return;
1310
+ }
1311
+ if (!entry.name.toLowerCase().endsWith(".lua")) {
1312
+ return;
1313
+ }
1314
+ const content = await entry.async("uint8array");
1315
+ for (const name of normalizeZipEntryName(entry.name)) {
1316
+ map.set(name, content);
1317
+ }
1318
+ })
1319
+ );
1320
+ return MapReader(map);
1321
+ }
1322
+
1323
+ // src/vendor/script-constants.ts
1324
+ var OcgcoreScriptConstants = {
1325
+ ACTIVITY_ATTACK: 5,
1326
+ ACTIVITY_BATTLE_PHASE: 6,
1327
+ ACTIVITY_CHAIN: 7,
1328
+ ACTIVITY_FLIPSUMMON: 4,
1329
+ ACTIVITY_NORMALSUMMON: 2,
1330
+ ACTIVITY_SPSUMMON: 3,
1331
+ ACTIVITY_SUMMON: 1,
1332
+ ASSUME_ATTACK: 7,
1333
+ ASSUME_ATTRIBUTE: 5,
1334
+ ASSUME_CODE: 1,
1335
+ ASSUME_DEFENSE: 8,
1336
+ ASSUME_LEVEL: 3,
1337
+ ASSUME_RACE: 6,
1338
+ ASSUME_RANK: 4,
1339
+ ASSUME_TYPE: 2,
1340
+ ATTRIBUTE_ALL: 127,
1341
+ ATTRIBUTE_DARK: 32,
1342
+ ATTRIBUTE_DIVINE: 64,
1343
+ ATTRIBUTE_EARTH: 1,
1344
+ ATTRIBUTE_FIRE: 4,
1345
+ ATTRIBUTE_LIGHT: 16,
1346
+ ATTRIBUTE_WATER: 2,
1347
+ ATTRIBUTE_WIND: 8,
1348
+ CARD_MARINE_DOLPHIN: 78734254,
1349
+ CARD_QUESTION: 38723936,
1350
+ CARD_TWINKLE_MOSS: 13857930,
1351
+ CATEGORY_ANNOUNCE: 536870912,
1352
+ CATEGORY_ATKCHANGE: 2097152,
1353
+ CATEGORY_COIN: 16777216,
1354
+ CATEGORY_CONTROL: 8192,
1355
+ CATEGORY_COUNTER: 8388608,
1356
+ CATEGORY_DAMAGE: 524288,
1357
+ CATEGORY_DECKDES: 64,
1358
+ CATEGORY_DEFCHANGE: 4194304,
1359
+ CATEGORY_DESTROY: 1,
1360
+ CATEGORY_DICE: 33554432,
1361
+ CATEGORY_DISABLE: 16384,
1362
+ CATEGORY_DISABLE_SUMMON: 32768,
1363
+ CATEGORY_DRAW: 65536,
1364
+ CATEGORY_EQUIP: 262144,
1365
+ CATEGORY_FUSION_SUMMON: 1073741824,
1366
+ CATEGORY_GRAVE_ACTION: 2048,
1367
+ CATEGORY_GRAVE_SPSUMMON: 134217728,
1368
+ CATEGORY_HANDES: 128,
1369
+ CATEGORY_LEAVE_GRAVE: 67108864,
1370
+ CATEGORY_NEGATE: 268435456,
1371
+ CATEGORY_POSITION: 4096,
1372
+ CATEGORY_RECOVER: 1048576,
1373
+ CATEGORY_RELEASE: 2,
1374
+ CATEGORY_REMOVE: 4,
1375
+ CATEGORY_SEARCH: 131072,
1376
+ CATEGORY_SPECIAL_SUMMON: 512,
1377
+ CATEGORY_SUMMON: 256,
1378
+ CATEGORY_TODECK: 16,
1379
+ CATEGORY_TOEXTRA: 2147483648,
1380
+ CATEGORY_TOGRAVE: 32,
1381
+ CATEGORY_TOHAND: 8,
1382
+ CATEGORY_TOKEN: 1024,
1383
+ CHAININFO_CHAIN_COUNT: 1,
1384
+ CHAININFO_CHAIN_ID: 2048,
1385
+ CHAININFO_DISABLE_PLAYER: 1024,
1386
+ CHAININFO_DISABLE_REASON: 512,
1387
+ CHAININFO_EXTTYPE: 8192,
1388
+ CHAININFO_TARGET_CARDS: 64,
1389
+ CHAININFO_TARGET_PARAM: 256,
1390
+ CHAININFO_TARGET_PLAYER: 128,
1391
+ CHAININFO_TRIGGERING_ATTACK: 4194304,
1392
+ CHAININFO_TRIGGERING_ATTRIBUTE: 1048576,
1393
+ CHAININFO_TRIGGERING_CODE: 32768,
1394
+ CHAININFO_TRIGGERING_CODE2: 65536,
1395
+ CHAININFO_TRIGGERING_CONTROLER: 8,
1396
+ CHAININFO_TRIGGERING_DEFENSE: 8388608,
1397
+ CHAININFO_TRIGGERING_EFFECT: 2,
1398
+ CHAININFO_TRIGGERING_LEVEL: 262144,
1399
+ CHAININFO_TRIGGERING_LOCATION: 16,
1400
+ CHAININFO_TRIGGERING_PLAYER: 4,
1401
+ CHAININFO_TRIGGERING_POSITION: 16384,
1402
+ CHAININFO_TRIGGERING_RACE: 2097152,
1403
+ CHAININFO_TRIGGERING_RANK: 524288,
1404
+ CHAININFO_TRIGGERING_SEQUENCE: 32,
1405
+ CHAININFO_TYPE: 4096,
1406
+ CHINT_ATTRIBUTE: 4,
1407
+ CHINT_CARD: 2,
1408
+ CHINT_DESC: 6,
1409
+ CHINT_NUMBER: 5,
1410
+ CHINT_RACE: 3,
1411
+ CHINT_TURN: 1,
1412
+ COUNTER_NEED_ENABLE: 8192,
1413
+ COUNTER_WITHOUT_PERMIT: 4096,
1414
+ DUEL_ATTACK_FIRST_TURN: 2,
1415
+ DUEL_OBSOLETE_RULING: 8,
1416
+ DUEL_OLD_REPLAY: 4,
1417
+ DUEL_PSEUDO_SHUFFLE: 16,
1418
+ DUEL_RETURN_DECK_TOP: 128,
1419
+ DUEL_REVEAL_DECK_SEQ: 256,
1420
+ DUEL_SIMPLE_AI: 64,
1421
+ DUEL_TAG_MODE: 32,
1422
+ DUEL_TEST_MODE: 1,
1423
+ EFFECT_ACTIVATE_COST: 90,
1424
+ EFFECT_ACTIVATION_COUNT_LIMIT: 367,
1425
+ EFFECT_ADD_ATTRIBUTE: 125,
1426
+ EFFECT_ADD_CODE: 113,
1427
+ EFFECT_ADD_EXTRA_TRIBUTE: 157,
1428
+ EFFECT_ADD_FUSION_ATTRIBUTE: 349,
1429
+ EFFECT_ADD_FUSION_CODE: 340,
1430
+ EFFECT_ADD_FUSION_SETCODE: 341,
1431
+ EFFECT_ADD_LINK_ATTRIBUTE: 356,
1432
+ EFFECT_ADD_LINK_CODE: 354,
1433
+ EFFECT_ADD_LINK_RACE: 357,
1434
+ EFFECT_ADD_LINK_SETCODE: 355,
1435
+ EFFECT_ADD_RACE: 120,
1436
+ EFFECT_ADD_SETCODE: 334,
1437
+ EFFECT_ADD_TYPE: 115,
1438
+ EFFECT_ALSO_BATTLE_DAMAGE: 207,
1439
+ EFFECT_ATTACK_ALL: 193,
1440
+ EFFECT_ATTACK_COST: 96,
1441
+ EFFECT_ATTACK_DISABLED: 197,
1442
+ EFFECT_AVOID_BATTLE_DAMAGE: 201,
1443
+ EFFECT_BATTLE_DAMAGE_TO_EFFECT: 205,
1444
+ EFFECT_BATTLE_DESTROY_REDIRECT: 204,
1445
+ EFFECT_BOTH_BATTLE_DAMAGE: 206,
1446
+ EFFECT_BP_TWICE: 296,
1447
+ EFFECT_CANNOT_ACTIVATE: 6,
1448
+ EFFECT_CANNOT_ATTACK: 85,
1449
+ EFFECT_CANNOT_ATTACK_ANNOUNCE: 86,
1450
+ EFFECT_CANNOT_BE_BATTLE_TARGET: 70,
1451
+ EFFECT_CANNOT_BE_EFFECT_TARGET: 71,
1452
+ EFFECT_CANNOT_BP: 185,
1453
+ EFFECT_CANNOT_CHANGE_CONTROL: 5,
1454
+ EFFECT_CANNOT_CHANGE_POSITION: 14,
1455
+ EFFECT_CANNOT_CHANGE_POS_E: 87,
1456
+ EFFECT_CANNOT_DIRECT_ATTACK: 73,
1457
+ EFFECT_CANNOT_DISABLE: 3,
1458
+ EFFECT_CANNOT_DISABLE_FLIP_SUMMON: 39,
1459
+ EFFECT_CANNOT_DISABLE_SPSUMMON: 27,
1460
+ EFFECT_CANNOT_DISABLE_SUMMON: 26,
1461
+ EFFECT_CANNOT_DISCARD_DECK: 56,
1462
+ EFFECT_CANNOT_DISCARD_HAND: 55,
1463
+ EFFECT_CANNOT_DISEFFECT: 13,
1464
+ EFFECT_CANNOT_DRAW: 25,
1465
+ EFFECT_CANNOT_EP: 187,
1466
+ EFFECT_CANNOT_FLIP_SUMMON: 21,
1467
+ EFFECT_CANNOT_INACTIVATE: 12,
1468
+ EFFECT_CANNOT_M2: 186,
1469
+ EFFECT_CANNOT_MSET: 23,
1470
+ EFFECT_CANNOT_PLACE_COUNTER: 58,
1471
+ EFFECT_CANNOT_RELEASE: 46,
1472
+ EFFECT_CANNOT_REMOVE: 67,
1473
+ EFFECT_CANNOT_SELECT_BATTLE_TARGET: 332,
1474
+ EFFECT_CANNOT_SELECT_EFFECT_TARGET: 333,
1475
+ EFFECT_CANNOT_SPECIAL_SUMMON: 22,
1476
+ EFFECT_CANNOT_SSET: 24,
1477
+ EFFECT_CANNOT_SUMMON: 20,
1478
+ EFFECT_CANNOT_TO_DECK: 66,
1479
+ EFFECT_CANNOT_TO_GRAVE: 68,
1480
+ EFFECT_CANNOT_TO_GRAVE_AS_COST: 59,
1481
+ EFFECT_CANNOT_TO_HAND: 65,
1482
+ EFFECT_CANNOT_TRIGGER: 7,
1483
+ EFFECT_CANNOT_TURN_SET: 69,
1484
+ EFFECT_CANNOT_USE_AS_COST: 57,
1485
+ EFFECT_CHAIN_MATERIAL: 231,
1486
+ EFFECT_CHANGE_ATTRIBUTE: 127,
1487
+ EFFECT_CHANGE_BATTLE_DAMAGE: 208,
1488
+ EFFECT_CHANGE_CODE: 114,
1489
+ EFFECT_CHANGE_DAMAGE: 82,
1490
+ EFFECT_CHANGE_ENVIRONMENT: 290,
1491
+ EFFECT_CHANGE_FUSION_ATTRIBUTE: 351,
1492
+ EFFECT_CHANGE_GRAVE_ATTRIBUTE: 365,
1493
+ EFFECT_CHANGE_GRAVE_RACE: 366,
1494
+ EFFECT_CHANGE_INVOLVING_BATTLE_DAMAGE: 314,
1495
+ EFFECT_CHANGE_LEVEL: 131,
1496
+ EFFECT_CHANGE_LSCALE: 135,
1497
+ EFFECT_CHANGE_RACE: 122,
1498
+ EFFECT_CHANGE_RANK: 133,
1499
+ EFFECT_CHANGE_RANK_FINAL: 315,
1500
+ EFFECT_CHANGE_RSCALE: 137,
1501
+ EFFECT_CHANGE_TYPE: 117,
1502
+ EFFECT_COUNT_CODE_CHAIN: 1073741824,
1503
+ EFFECT_COUNT_CODE_DUEL: 536870912,
1504
+ EFFECT_COUNT_CODE_OATH: 268435456,
1505
+ EFFECT_COUNT_CODE_SINGLE: 1,
1506
+ EFFECT_DECREASE_TRIBUTE: 151,
1507
+ EFFECT_DECREASE_TRIBUTE_SET: 152,
1508
+ EFFECT_DEFENSE_ATTACK: 190,
1509
+ EFFECT_DESTROY_REPLACE: 50,
1510
+ EFFECT_DESTROY_SUBSTITUTE: 45,
1511
+ EFFECT_DIRECT_ATTACK: 74,
1512
+ EFFECT_DISABLE: 2,
1513
+ EFFECT_DISABLE_CHAIN: 9,
1514
+ EFFECT_DISABLE_CHAIN_FIELD: 337,
1515
+ EFFECT_DISABLE_EFFECT: 8,
1516
+ EFFECT_DISABLE_FIELD: 260,
1517
+ EFFECT_DISABLE_TRAPMONSTER: 10,
1518
+ EFFECT_DISCARD_COST_CHANGE: 338,
1519
+ EFFECT_DIVINE_LIGHT: 38,
1520
+ EFFECT_DOUBLE_TRIBUTE: 150,
1521
+ EFFECT_DOUBLE_XMATERIAL: 375,
1522
+ EFFECT_DRAW_COUNT: 271,
1523
+ EFFECT_DUAL_STATUS: 75,
1524
+ EFFECT_DUAL_SUMMONABLE: 77,
1525
+ EFFECT_EQUIP_LIMIT: 76,
1526
+ EFFECT_EXTRA_ATTACK: 194,
1527
+ EFFECT_EXTRA_ATTACK_MONSTER: 346,
1528
+ EFFECT_EXTRA_FUSION_MATERIAL: 352,
1529
+ EFFECT_EXTRA_LINK_MATERIAL: 358,
1530
+ EFFECT_EXTRA_PENDULUM_SUMMON: 360,
1531
+ EFFECT_EXTRA_RELEASE: 153,
1532
+ EFFECT_EXTRA_RELEASE_NONSUM: 158,
1533
+ EFFECT_EXTRA_RELEASE_SUM: 155,
1534
+ EFFECT_EXTRA_SET_COUNT: 35,
1535
+ EFFECT_EXTRA_SUMMON_COUNT: 29,
1536
+ EFFECT_EXTRA_SYNCHRO_MATERIAL: 232,
1537
+ EFFECT_FIRST_ATTACK: 192,
1538
+ EFFECT_FLAG2_COF: 2,
1539
+ EFFECT_FLAG2_OPTION: 8,
1540
+ EFFECT_FLAG2_REPEAT_UPDATE: 1,
1541
+ EFFECT_FLAG2_WICKED: 4,
1542
+ EFFECT_FLAG_ABSOLUTE_TARGET: 64,
1543
+ EFFECT_FLAG_ACTIVATE_CONDITION: 536870912,
1544
+ EFFECT_FLAG_BOTH_SIDE: 4096,
1545
+ EFFECT_FLAG_CANNOT_DISABLE: 1024,
1546
+ EFFECT_FLAG_CANNOT_INACTIVATE: 33554432,
1547
+ EFFECT_FLAG_CAN_FORBIDDEN: 512,
1548
+ EFFECT_FLAG_CARD_TARGET: 16,
1549
+ EFFECT_FLAG_CLIENT_HINT: 67108864,
1550
+ EFFECT_FLAG_COIN: 4294967296,
1551
+ EFFECT_FLAG_CONTINUOUS_TARGET: 134217728,
1552
+ EFFECT_FLAG_COPY: 8192,
1553
+ EFFECT_FLAG_COUNT_LIMIT: 4,
1554
+ EFFECT_FLAG_CVAL_CHECK: 1073741824,
1555
+ EFFECT_FLAG_DAMAGE_CAL: 32768,
1556
+ EFFECT_FLAG_DAMAGE_STEP: 16384,
1557
+ EFFECT_FLAG_DELAY: 65536,
1558
+ EFFECT_FLAG_DICE: 8589934592,
1559
+ EFFECT_FLAG_EFFECT: 536870912,
1560
+ EFFECT_FLAG_EVENT_PLAYER: 8388608,
1561
+ EFFECT_FLAG_FIELD_ONLY: 8,
1562
+ EFFECT_FLAG_FUNC_VALUE: 2,
1563
+ EFFECT_FLAG_FUSION_SUMMON: 17179869184,
1564
+ EFFECT_FLAG_IGNORE_IMMUNE: 128,
1565
+ EFFECT_FLAG_IGNORE_RANGE: 32,
1566
+ EFFECT_FLAG_IMMEDIATELY_APPLY: 2147483648,
1567
+ EFFECT_FLAG_INITIAL: 1,
1568
+ EFFECT_FLAG_LIMIT_ZONE: 268435456,
1569
+ EFFECT_FLAG_NO_TURN_RESET: 4194304,
1570
+ EFFECT_FLAG_OATH: 524288,
1571
+ EFFECT_FLAG_OWNER_RELATE: 16777216,
1572
+ EFFECT_FLAG_PLAYER_TARGET: 2048,
1573
+ EFFECT_FLAG_REPEAT: 2097152,
1574
+ EFFECT_FLAG_SET_AVAILABLE: 256,
1575
+ EFFECT_FLAG_SINGLE_RANGE: 131072,
1576
+ EFFECT_FLAG_SPSUM_PARAM: 1048576,
1577
+ EFFECT_FLAG_UNCOPYABLE: 262144,
1578
+ EFFECT_FLIPSUMMON_COST: 93,
1579
+ EFFECT_FORBIDDEN: 292,
1580
+ EFFECT_FUSION_MATERIAL: 230,
1581
+ EFFECT_FUSION_SUBSTITUTE: 234,
1582
+ EFFECT_HAND_LIMIT: 270,
1583
+ EFFECT_HAND_SYNCHRO: 339,
1584
+ EFFECT_IGNORE_BATTLE_TARGET: 72,
1585
+ EFFECT_IMMUNE_EFFECT: 1,
1586
+ EFFECT_INDESTRUCTABLE: 40,
1587
+ EFFECT_INDESTRUCTABLE_BATTLE: 42,
1588
+ EFFECT_INDESTRUCTABLE_COUNT: 47,
1589
+ EFFECT_INDESTRUCTABLE_EFFECT: 41,
1590
+ EFFECT_KAISER_COLOSSEUM: 370,
1591
+ EFFECT_LEAVE_FIELD_REDIRECT: 60,
1592
+ EFFECT_LEFT_SPSUMMON_COUNT: 331,
1593
+ EFFECT_LIMIT_SET_PROC: 37,
1594
+ EFFECT_LIMIT_SPECIAL_SUMMON_POSITION: 368,
1595
+ EFFECT_LIMIT_SUMMON_PROC: 33,
1596
+ EFFECT_LPCOST_CHANGE: 170,
1597
+ EFFECT_LPCOST_REPLACE: 171,
1598
+ EFFECT_MATCH_KILL: 300,
1599
+ EFFECT_MATERIAL_CHECK: 251,
1600
+ EFFECT_MATERIAL_LIMIT: 361,
1601
+ EFFECT_MAX_MZONE: 263,
1602
+ EFFECT_MAX_SZONE: 264,
1603
+ EFFECT_MONSTER_SSET: 18,
1604
+ EFFECT_MSET_COST: 94,
1605
+ EFFECT_MUST_ATTACK: 191,
1606
+ EFFECT_MUST_ATTACK_MONSTER: 344,
1607
+ EFFECT_MUST_BE_ATTACKED: 195,
1608
+ EFFECT_MUST_BE_FMATERIAL: 316,
1609
+ EFFECT_MUST_BE_LMATERIAL: 318,
1610
+ EFFECT_MUST_BE_SMATERIAL: 312,
1611
+ EFFECT_MUST_BE_XMATERIAL: 317,
1612
+ EFFECT_MUST_USE_MZONE: 265,
1613
+ EFFECT_NECRO_VALLEY: 291,
1614
+ EFFECT_NECRO_VALLEY_IM: 293,
1615
+ EFFECT_NO_BATTLE_DAMAGE: 200,
1616
+ EFFECT_NO_EFFECT_DAMAGE: 335,
1617
+ EFFECT_OLDUNION_STATUS: 348,
1618
+ EFFECT_ONLY_ATTACK_MONSTER: 343,
1619
+ EFFECT_ONLY_BE_ATTACKED: 196,
1620
+ EFFECT_OVERLAY_RITUAL_MATERIAL: 364,
1621
+ EFFECT_PATRICIAN_OF_DARKNESS: 345,
1622
+ EFFECT_PIERCE: 203,
1623
+ EFFECT_PRE_MONSTER: 250,
1624
+ EFFECT_PUBLIC: 160,
1625
+ EFFECT_QP_ACT_IN_NTPHAND: 311,
1626
+ EFFECT_QP_ACT_IN_SET_TURN: 359,
1627
+ EFFECT_REFLECT_BATTLE_DAMAGE: 202,
1628
+ EFFECT_REFLECT_DAMAGE: 83,
1629
+ EFFECT_RELEASE_REPLACE: 51,
1630
+ EFFECT_REMAIN_FIELD: 17,
1631
+ EFFECT_REMOVE_ATTRIBUTE: 126,
1632
+ EFFECT_REMOVE_BRAINWASHING: 295,
1633
+ EFFECT_REMOVE_FUSION_ATTRIBUTE: 350,
1634
+ EFFECT_REMOVE_RACE: 121,
1635
+ EFFECT_REMOVE_REDIRECT: 64,
1636
+ EFFECT_REMOVE_TYPE: 116,
1637
+ EFFECT_REPLACE_DAMAGE: 371,
1638
+ EFFECT_REVERSE_DAMAGE: 80,
1639
+ EFFECT_REVERSE_DECK: 294,
1640
+ EFFECT_REVERSE_RECOVER: 81,
1641
+ EFFECT_REVERSE_UPDATE: 108,
1642
+ EFFECT_REVIVE_LIMIT: 31,
1643
+ EFFECT_RISE_TO_FULL_HEIGHT: 342,
1644
+ EFFECT_RITUAL_LEVEL_EX: 374,
1645
+ EFFECT_SELF_DESTROY: 141,
1646
+ EFFECT_SELF_TOGRAVE: 142,
1647
+ EFFECT_SEND_REPLACE: 52,
1648
+ EFFECT_SET_ATTACK: 101,
1649
+ EFFECT_SET_ATTACK_FINAL: 102,
1650
+ EFFECT_SET_BASE_ATTACK: 103,
1651
+ EFFECT_SET_BASE_ATTACK_FINAL: 111,
1652
+ EFFECT_SET_BASE_DEFENSE: 107,
1653
+ EFFECT_SET_BASE_DEFENSE_FINAL: 112,
1654
+ EFFECT_SET_BATTLE_ATTACK: 362,
1655
+ EFFECT_SET_BATTLE_DEFENSE: 363,
1656
+ EFFECT_SET_CONTROL: 4,
1657
+ EFFECT_SET_DEFENSE: 105,
1658
+ EFFECT_SET_DEFENSE_FINAL: 106,
1659
+ EFFECT_SET_POSITION: 140,
1660
+ EFFECT_SET_PROC: 36,
1661
+ EFFECT_SET_SUMMON_COUNT_LIMIT: 28,
1662
+ EFFECT_SKIP_BP: 183,
1663
+ EFFECT_SKIP_DP: 180,
1664
+ EFFECT_SKIP_M1: 182,
1665
+ EFFECT_SKIP_M2: 184,
1666
+ EFFECT_SKIP_SP: 181,
1667
+ EFFECT_SKIP_TURN: 188,
1668
+ EFFECT_SPIRIT_DONOT_RETURN: 280,
1669
+ EFFECT_SPIRIT_MAYNOT_RETURN: 281,
1670
+ EFFECT_SPSUMMON_CONDITION: 30,
1671
+ EFFECT_SPSUMMON_COST: 92,
1672
+ EFFECT_SPSUMMON_COUNT_LIMIT: 330,
1673
+ EFFECT_SPSUMMON_PROC: 34,
1674
+ EFFECT_SPSUMMON_PROC_G: 320,
1675
+ EFFECT_SSET_COST: 95,
1676
+ EFFECT_SUMMON_COST: 91,
1677
+ EFFECT_SUMMON_PROC: 32,
1678
+ EFFECT_SWAP_AD: 109,
1679
+ EFFECT_SWAP_BASE_AD: 110,
1680
+ EFFECT_SYNCHRO_CHECK: 310,
1681
+ EFFECT_SYNCHRO_LEVEL_EX: 373,
1682
+ EFFECT_TOSS_COIN_REPLACE: 220,
1683
+ EFFECT_TOSS_DICE_REPLACE: 221,
1684
+ EFFECT_TO_DECK_REDIRECT: 62,
1685
+ EFFECT_TO_GRAVE_REDIRECT: 63,
1686
+ EFFECT_TO_GRAVE_REDIRECT_CB: 313,
1687
+ EFFECT_TO_HAND_REDIRECT: 61,
1688
+ EFFECT_TRAP_ACT_IN_HAND: 15,
1689
+ EFFECT_TRAP_ACT_IN_SET_TURN: 16,
1690
+ EFFECT_TRIBUTE_LIMIT: 154,
1691
+ EFFECT_TRIPLE_TRIBUTE: 156,
1692
+ EFFECT_TUNER: 369,
1693
+ EFFECT_TUNER_MATERIAL_LIMIT: 353,
1694
+ EFFECT_TYPE_ACTIONS: 8,
1695
+ EFFECT_TYPE_ACTIVATE: 16,
1696
+ EFFECT_TYPE_CONTINUOUS: 2048,
1697
+ EFFECT_TYPE_EQUIP: 4,
1698
+ EFFECT_TYPE_FIELD: 2,
1699
+ EFFECT_TYPE_FLIP: 32,
1700
+ EFFECT_TYPE_GRANT: 8192,
1701
+ EFFECT_TYPE_IGNITION: 64,
1702
+ EFFECT_TYPE_QUICK_F: 1024,
1703
+ EFFECT_TYPE_QUICK_O: 256,
1704
+ EFFECT_TYPE_SINGLE: 1,
1705
+ EFFECT_TYPE_TARGET: 16384,
1706
+ EFFECT_TYPE_TRIGGER_F: 512,
1707
+ EFFECT_TYPE_TRIGGER_O: 128,
1708
+ EFFECT_TYPE_XMATERIAL: 4096,
1709
+ EFFECT_UNION_LIMIT: 78,
1710
+ EFFECT_UNION_STATUS: 347,
1711
+ EFFECT_UNIQUE_CHECK: 297,
1712
+ EFFECT_UNRELEASABLE_EFFECT: 48,
1713
+ EFFECT_UNRELEASABLE_NONSUM: 44,
1714
+ EFFECT_UNRELEASABLE_SUM: 43,
1715
+ EFFECT_UNSUMMONABLE_CARD: 336,
1716
+ EFFECT_UPDATE_ATTACK: 100,
1717
+ EFFECT_UPDATE_DEFENSE: 104,
1718
+ EFFECT_UPDATE_LEVEL: 130,
1719
+ EFFECT_UPDATE_LSCALE: 134,
1720
+ EFFECT_UPDATE_RANK: 132,
1721
+ EFFECT_UPDATE_RSCALE: 136,
1722
+ EFFECT_USE_EXTRA_MZONE: 261,
1723
+ EFFECT_USE_EXTRA_SZONE: 262,
1724
+ EFFECT_XYZ_MATERIAL: 233,
1725
+ EFFECT_XYZ_MIN_COUNT: 372,
1726
+ EVENT_ADD_COUNTER: 65536,
1727
+ EVENT_ADJUST: 1040,
1728
+ EVENT_ATTACK_ANNOUNCE: 1130,
1729
+ EVENT_ATTACK_DISABLED: 1142,
1730
+ EVENT_BATTLED: 1138,
1731
+ EVENT_BATTLE_CONFIRM: 1133,
1732
+ EVENT_BATTLE_DAMAGE: 1143,
1733
+ EVENT_BATTLE_DESTROYED: 1140,
1734
+ EVENT_BATTLE_DESTROYING: 1139,
1735
+ EVENT_BATTLE_END: 1137,
1736
+ EVENT_BATTLE_START: 1132,
1737
+ EVENT_BECOME_TARGET: 1028,
1738
+ EVENT_BE_BATTLE_TARGET: 1131,
1739
+ EVENT_BE_MATERIAL: 1108,
1740
+ EVENT_BE_PRE_MATERIAL: 1109,
1741
+ EVENT_BREAK_EFFECT: 1050,
1742
+ EVENT_CHAINING: 1027,
1743
+ EVENT_CHAIN_ACTIVATED: 1023,
1744
+ EVENT_CHAIN_ACTIVATING: 1021,
1745
+ EVENT_CHAIN_DISABLED: 1025,
1746
+ EVENT_CHAIN_END: 1026,
1747
+ EVENT_CHAIN_NEGATED: 1024,
1748
+ EVENT_CHAIN_SOLVED: 1022,
1749
+ EVENT_CHAIN_SOLVING: 1020,
1750
+ EVENT_CHANGE_POS: 1016,
1751
+ EVENT_CONTROL_CHANGED: 1120,
1752
+ EVENT_CUSTOM: 268435456,
1753
+ EVENT_DAMAGE: 1111,
1754
+ EVENT_DAMAGE_CALCULATING: 1135,
1755
+ EVENT_DAMAGE_STEP_END: 1141,
1756
+ EVENT_DESTROY: 1010,
1757
+ EVENT_DESTROYED: 1029,
1758
+ EVENT_DETACH_MATERIAL: 1202,
1759
+ EVENT_DISCARD: 1018,
1760
+ EVENT_DRAW: 1110,
1761
+ EVENT_EQUIP: 1121,
1762
+ EVENT_FLIP: 1001,
1763
+ EVENT_FLIP_SUMMON: 1104,
1764
+ EVENT_FLIP_SUMMON_NEGATED: 1115,
1765
+ EVENT_FLIP_SUMMON_SUCCESS: 1101,
1766
+ EVENT_FREE_CHAIN: 1002,
1767
+ EVENT_LEAVE_DECK: 1032,
1768
+ EVENT_LEAVE_FIELD: 1015,
1769
+ EVENT_LEAVE_FIELD_P: 1019,
1770
+ EVENT_LEAVE_GRAVE: 1031,
1771
+ EVENT_LEVEL_UP: 1200,
1772
+ EVENT_MOVE: 1030,
1773
+ EVENT_MSET: 1106,
1774
+ EVENT_PAY_LPCOST: 1201,
1775
+ EVENT_PHASE: 4096,
1776
+ EVENT_PHASE_START: 8192,
1777
+ EVENT_PREDRAW: 1113,
1778
+ EVENT_PRE_BATTLE_DAMAGE: 1136,
1779
+ EVENT_PRE_DAMAGE_CALCULATE: 1134,
1780
+ EVENT_RECOVER: 1112,
1781
+ EVENT_RELEASE: 1017,
1782
+ EVENT_REMOVE: 1011,
1783
+ EVENT_REMOVE_COUNTER: 131072,
1784
+ EVENT_RETURN_TO_GRAVE: 1203,
1785
+ EVENT_SPSUMMON: 1105,
1786
+ EVENT_SPSUMMON_NEGATED: 1116,
1787
+ EVENT_SPSUMMON_SUCCESS: 1102,
1788
+ EVENT_SPSUMMON_SUCCESS_G_P: 1117,
1789
+ EVENT_SSET: 1107,
1790
+ EVENT_STARTUP: 1e3,
1791
+ EVENT_SUMMON: 1103,
1792
+ EVENT_SUMMON_NEGATED: 1114,
1793
+ EVENT_SUMMON_SUCCESS: 1100,
1794
+ EVENT_TOSS_COIN: 1151,
1795
+ EVENT_TOSS_COIN_NEGATE: 1152,
1796
+ EVENT_TOSS_DICE: 1150,
1797
+ EVENT_TOSS_DICE_NEGATE: 1153,
1798
+ EVENT_TO_DECK: 1013,
1799
+ EVENT_TO_GRAVE: 1014,
1800
+ EVENT_TO_HAND: 1012,
1801
+ EVENT_TURN_END: 1210,
1802
+ FLAG_ID_ALLURE_QUEEN: 4,
1803
+ FLAG_ID_ARCANA_COIN: 5,
1804
+ FLAG_ID_CHAINING: 1,
1805
+ FLAG_ID_NO_NORMAL_DRAW: 3,
1806
+ FLAG_ID_REVERSAL_OF_FATE: 36690018,
1807
+ FLAG_ID_UNION: 2,
1808
+ GLOBALFLAG_BRAINWASHING_CHECK: 2,
1809
+ GLOBALFLAG_DECK_REVERSE_CHECK: 1,
1810
+ GLOBALFLAG_DELAYED_QUICKEFFECT: 8,
1811
+ GLOBALFLAG_DETACH_EVENT: 16,
1812
+ GLOBALFLAG_MUST_BE_SMATERIAL: 32,
1813
+ GLOBALFLAG_SCRAP_CHIMERA: 4,
1814
+ GLOBALFLAG_SELF_TOGRAVE: 256,
1815
+ GLOBALFLAG_SPSUMMON_COUNT: 64,
1816
+ GLOBALFLAG_SPSUMMON_ONCE: 512,
1817
+ GLOBALFLAG_TUNE_MAGICIAN: 1024,
1818
+ GLOBALFLAG_XMAT_COUNT_LIMIT: 128,
1819
+ HINGMSG_LVRANK: 567,
1820
+ HINGMSG_NUMBER: 565,
1821
+ HINTMSG_ATOHAND: 506,
1822
+ HINTMSG_ATTACK: 516,
1823
+ HINTMSG_ATTACKTARGET: 549,
1824
+ HINTMSG_ATTRIBUTE: 562,
1825
+ HINTMSG_CARDTYPE: 554,
1826
+ HINTMSG_CODE: 564,
1827
+ HINTMSG_COIN: 552,
1828
+ HINTMSG_CONFIRM: 526,
1829
+ HINTMSG_CONTROL: 520,
1830
+ HINTMSG_COUNTER: 572,
1831
+ HINTMSG_DEATTACHFROM: 532,
1832
+ HINTMSG_DEFENSE: 517,
1833
+ HINTMSG_DESREPLACE: 521,
1834
+ HINTMSG_DESTROY: 502,
1835
+ HINTMSG_DICE: 553,
1836
+ HINTMSG_DISABLE: 573,
1837
+ HINTMSG_DISABLEZONE: 570,
1838
+ HINTMSG_DISCARD: 501,
1839
+ HINTMSG_EFFECT: 550,
1840
+ HINTMSG_EQUIP: 518,
1841
+ HINTMSG_FACEDOWN: 515,
1842
+ HINTMSG_FACEDOWNATTACK: 524,
1843
+ HINTMSG_FACEDOWNDEFENSE: 525,
1844
+ HINTMSG_FACEUP: 514,
1845
+ HINTMSG_FACEUPATTACK: 522,
1846
+ HINTMSG_FACEUPDEFENSE: 523,
1847
+ HINTMSG_FIELD_FIRST: 575,
1848
+ HINTMSG_FMATERIAL: 511,
1849
+ HINTMSG_LMATERIAL: 533,
1850
+ HINTMSG_OPERATECARD: 574,
1851
+ HINTMSG_OPPO: 530,
1852
+ HINTMSG_OPTION: 555,
1853
+ HINTMSG_POSCHANGE: 528,
1854
+ HINTMSG_POSITION: 561,
1855
+ HINTMSG_RACE: 563,
1856
+ HINTMSG_RELEASE: 500,
1857
+ HINTMSG_REMOVE: 503,
1858
+ HINTMSG_REMOVEXYZ: 519,
1859
+ HINTMSG_RESOLVECARD: 568,
1860
+ HINTMSG_RESOLVEEFFECT: 556,
1861
+ HINTMSG_RTOHAND: 505,
1862
+ HINTMSG_SELECT: 560,
1863
+ HINTMSG_SELF: 529,
1864
+ HINTMSG_SET: 510,
1865
+ HINTMSG_SMATERIAL: 512,
1866
+ HINTMSG_SPSUMMON: 509,
1867
+ HINTMSG_SUMMON: 508,
1868
+ HINTMSG_TARGET: 551,
1869
+ HINTMSG_TODECK: 507,
1870
+ HINTMSG_TOFIELD: 527,
1871
+ HINTMSG_TOGRAVE: 504,
1872
+ HINTMSG_TOZONE: 571,
1873
+ HINTMSG_TRIBUTE: 531,
1874
+ HINTMSG_XMATERIAL: 513,
1875
+ HINTMSG_ZONE: 569,
1876
+ HINT_ATTRIB: 7,
1877
+ HINT_CARD: 10,
1878
+ HINT_CODE: 8,
1879
+ HINT_EFFECT: 5,
1880
+ HINT_EVENT: 1,
1881
+ HINT_MESSAGE: 2,
1882
+ HINT_NUMBER: 9,
1883
+ HINT_OPSELECTED: 4,
1884
+ HINT_RACE: 6,
1885
+ HINT_SELECTMSG: 3,
1886
+ HINT_ZONE: 11,
1887
+ LINK_MARKER_BOTTOM: 2,
1888
+ LINK_MARKER_BOTTOM_LEFT: 1,
1889
+ LINK_MARKER_BOTTOM_RIGHT: 4,
1890
+ LINK_MARKER_LEFT: 8,
1891
+ LINK_MARKER_RIGHT: 32,
1892
+ LINK_MARKER_TOP: 128,
1893
+ LINK_MARKER_TOP_LEFT: 64,
1894
+ LINK_MARKER_TOP_RIGHT: 256,
1895
+ LOCATION_DECK: 1,
1896
+ LOCATION_DECKBOT: 65537,
1897
+ LOCATION_DECKSHF: 131073,
1898
+ LOCATION_EXTRA: 64,
1899
+ LOCATION_FZONE: 256,
1900
+ LOCATION_GRAVE: 16,
1901
+ LOCATION_HAND: 2,
1902
+ LOCATION_MZONE: 4,
1903
+ LOCATION_ONFIELD: 12,
1904
+ LOCATION_OVERLAY: 128,
1905
+ LOCATION_PZONE: 512,
1906
+ LOCATION_REASON_CONTROL: 2,
1907
+ LOCATION_REASON_TOFIELD: 1,
1908
+ LOCATION_REMOVED: 32,
1909
+ LOCATION_SZONE: 8,
1910
+ MASTER_RULE3: 3,
1911
+ MASTER_RULE_2020: 5,
1912
+ MAX_COUNTER: 65535,
1913
+ MAX_ID: 268435455,
1914
+ MAX_PARAMETER: 65535,
1915
+ MAX_XYZ_LEVEL: 4095,
1916
+ MIN_ID: 128,
1917
+ NEW_MASTER_RULE: 4,
1918
+ OPCODE_ADD: 1073741824,
1919
+ OPCODE_AND: 1073741828,
1920
+ OPCODE_DIV: 1073741827,
1921
+ OPCODE_ISATTRIBUTE: 1073742084,
1922
+ OPCODE_ISCODE: 1073742080,
1923
+ OPCODE_ISRACE: 1073742083,
1924
+ OPCODE_ISSETCARD: 1073742081,
1925
+ OPCODE_ISTYPE: 1073742082,
1926
+ OPCODE_MUL: 1073741826,
1927
+ OPCODE_NEG: 1073741830,
1928
+ OPCODE_NOT: 1073741831,
1929
+ OPCODE_OR: 1073741829,
1930
+ OPCODE_SUB: 1073741825,
1931
+ PHASE_BATTLE: 128,
1932
+ PHASE_BATTLE_START: 8,
1933
+ PHASE_BATTLE_STEP: 16,
1934
+ PHASE_DAMAGE: 32,
1935
+ PHASE_DAMAGE_CAL: 64,
1936
+ PHASE_DRAW: 1,
1937
+ PHASE_END: 512,
1938
+ PHASE_MAIN1: 4,
1939
+ PHASE_MAIN2: 256,
1940
+ PHASE_STANDBY: 2,
1941
+ PLAYER_ALL: 3,
1942
+ PLAYER_NONE: 2,
1943
+ POS_ATTACK: 3,
1944
+ POS_DEFENSE: 12,
1945
+ POS_FACEDOWN: 10,
1946
+ POS_FACEDOWN_ATTACK: 2,
1947
+ POS_FACEDOWN_DEFENSE: 8,
1948
+ POS_FACEUP: 5,
1949
+ POS_FACEUP_ATTACK: 1,
1950
+ POS_FACEUP_DEFENSE: 4,
1951
+ RACE_ALL: 67108863,
1952
+ RACE_AQUA: 64,
1953
+ RACE_BEAST: 16384,
1954
+ RACE_BEASTWARRIOR: 32768,
1955
+ RACE_CREATORGOD: 4194304,
1956
+ RACE_CYBERSE: 16777216,
1957
+ RACE_DINOSAUR: 65536,
1958
+ RACE_DIVINE: 2097152,
1959
+ RACE_DRAGON: 8192,
1960
+ RACE_FAIRY: 4,
1961
+ RACE_FIEND: 8,
1962
+ RACE_FISH: 131072,
1963
+ RACE_ILLUSION: 33554432,
1964
+ RACE_INSECT: 2048,
1965
+ RACE_MACHINE: 32,
1966
+ RACE_PLANT: 1024,
1967
+ RACE_PSYCHO: 1048576,
1968
+ RACE_PYRO: 128,
1969
+ RACE_REPTILE: 524288,
1970
+ RACE_ROCK: 256,
1971
+ RACE_SEASERPENT: 262144,
1972
+ RACE_SPELLCASTER: 2,
1973
+ RACE_THUNDER: 4096,
1974
+ RACE_WARRIOR: 1,
1975
+ RACE_WINDBEAST: 512,
1976
+ RACE_WYRM: 8388608,
1977
+ RACE_ZOMBIE: 16,
1978
+ REASON_ACTION: 2147483648,
1979
+ REASON_ADJUST: 256,
1980
+ REASON_BATTLE: 32,
1981
+ REASON_COST: 128,
1982
+ REASON_DESTROY: 1,
1983
+ REASON_DISCARD: 16384,
1984
+ REASON_DISSUMMON: 4096,
1985
+ REASON_DRAW: 33554432,
1986
+ REASON_EFFECT: 64,
1987
+ REASON_FLIP: 8192,
1988
+ REASON_FUSION: 262144,
1989
+ REASON_LINK: 268435456,
1990
+ REASON_LOST_OVERLAY: 536870912,
1991
+ REASON_LOST_TARGET: 512,
1992
+ REASON_MAINTENANCE: 1073741824,
1993
+ REASON_MATERIAL: 8,
1994
+ REASON_RDAMAGE: 32768,
1995
+ REASON_REDIRECT: 67108864,
1996
+ REASON_RELEASE: 2,
1997
+ REASON_REPLACE: 16777216,
1998
+ REASON_RETURN: 131072,
1999
+ REASON_REVEAL: 134217728,
2000
+ REASON_RITUAL: 1048576,
2001
+ REASON_RRECOVER: 65536,
2002
+ REASON_RULE: 1024,
2003
+ REASON_SPSUMMON: 2048,
2004
+ REASON_SUMMON: 16,
2005
+ REASON_SYNCHRO: 524288,
2006
+ REASON_TEMPORARY: 4,
2007
+ REASON_XYZ: 2097152,
2008
+ RESETS_REDIRECT: 209584128,
2009
+ RESETS_STANDARD: 33423360,
2010
+ RESETS_WITHOUT_TEMP_REMOVE: 91095040,
2011
+ RESET_CARD: 8192,
2012
+ RESET_CHAIN: 2147483648,
2013
+ RESET_CODE: 16384,
2014
+ RESET_CONTROL: 33554432,
2015
+ RESET_COPY: 32768,
2016
+ RESET_DISABLE: 65536,
2017
+ RESET_EVENT: 4096,
2018
+ RESET_LEAVE: 8388608,
2019
+ RESET_MSCHANGE: 134217728,
2020
+ RESET_OPPO_TURN: 536870912,
2021
+ RESET_OVERLAY: 67108864,
2022
+ RESET_PHASE: 1073741824,
2023
+ RESET_REMOVE: 524288,
2024
+ RESET_SELF_TURN: 268435456,
2025
+ RESET_TEMP_REMOVE: 1048576,
2026
+ RESET_TODECK: 4194304,
2027
+ RESET_TOFIELD: 16777216,
2028
+ RESET_TOGRAVE: 262144,
2029
+ RESET_TOHAND: 2097152,
2030
+ RESET_TURN_SET: 131072,
2031
+ SELECT_HEADS: 60,
2032
+ SELECT_TAILS: 61,
2033
+ SEQ_DECKBOTTOM: 1,
2034
+ SEQ_DECKSHUFFLE: 2,
2035
+ SEQ_DECKTOP: 0,
2036
+ STATUS_ACTIVATE_DISABLED: 262144,
2037
+ STATUS_ACT_FROM_HAND: 134217728,
2038
+ STATUS_ATTACK_CANCELED: 2097152,
2039
+ STATUS_BATTLE_DESTROYED: 16384,
2040
+ STATUS_BATTLE_RESULT: 64,
2041
+ STATUS_CANNOT_CHANGE_FORM: 256,
2042
+ STATUS_CHAINING: 65536,
2043
+ STATUS_CONTINUOUS_POS: 33554432,
2044
+ STATUS_COPYING_EFFECT: 32768,
2045
+ STATUS_DESTROY_CONFIRMED: 4096,
2046
+ STATUS_DISABLED: 1,
2047
+ STATUS_EFFECT_ENABLED: 1024,
2048
+ STATUS_EFFECT_REPLACED: 524288,
2049
+ STATUS_FLIP_SUMMONING: 1048576,
2050
+ STATUS_FLIP_SUMMON_DISABLED: 2147483648,
2051
+ STATUS_FLIP_SUMMON_TURN: 536870912,
2052
+ STATUS_FORBIDDEN: 67108864,
2053
+ STATUS_INITIALIZING: 4194304,
2054
+ STATUS_JUST_POS: 16777216,
2055
+ STATUS_LEAVE_CONFIRMED: 8192,
2056
+ STATUS_NO_LEVEL: 32,
2057
+ STATUS_OPPO_BATTLE: 268435456,
2058
+ STATUS_PROC_COMPLETE: 8,
2059
+ STATUS_SET_TURN: 16,
2060
+ STATUS_SPSUMMON_STEP: 128,
2061
+ STATUS_SPSUMMON_TURN: 1073741824,
2062
+ STATUS_SUMMONING: 512,
2063
+ STATUS_SUMMON_DISABLED: 131072,
2064
+ STATUS_SUMMON_TURN: 2048,
2065
+ STATUS_TO_DISABLE: 4,
2066
+ STATUS_TO_ENABLE: 2,
2067
+ STATUS_TO_HAND_WITHOUT_CONFIRM: 8388608,
2068
+ SUMMON_INFO_ATTACK: 128,
2069
+ SUMMON_INFO_ATTRIBUTE: 32,
2070
+ SUMMON_INFO_CODE: 1,
2071
+ SUMMON_INFO_CODE2: 2,
2072
+ SUMMON_INFO_DEFENSE: 256,
2073
+ SUMMON_INFO_LEVEL: 8,
2074
+ SUMMON_INFO_RACE: 64,
2075
+ SUMMON_INFO_RANK: 16,
2076
+ SUMMON_INFO_REASON_EFFECT: 512,
2077
+ SUMMON_INFO_REASON_PLAYER: 1024,
2078
+ SUMMON_INFO_TYPE: 4,
2079
+ SUMMON_TYPE_ADVANCE: 285212672,
2080
+ SUMMON_TYPE_DUAL: 301989888,
2081
+ SUMMON_TYPE_FLIP: 536870912,
2082
+ SUMMON_TYPE_FUSION: 1124073472,
2083
+ SUMMON_TYPE_LINK: 1275068416,
2084
+ SUMMON_TYPE_NORMAL: 268435456,
2085
+ SUMMON_TYPE_PENDULUM: 1241513984,
2086
+ SUMMON_TYPE_RITUAL: 1157627904,
2087
+ SUMMON_TYPE_SPECIAL: 1073741824,
2088
+ SUMMON_TYPE_SYNCHRO: 1174405120,
2089
+ SUMMON_TYPE_XYZ: 1224736768,
2090
+ SUMMON_VALUE_ASSAULT_MODE: 21,
2091
+ SUMMON_VALUE_DARK_FUSION: 1124073494,
2092
+ SUMMON_VALUE_DARK_SANCTUARY: 18,
2093
+ SUMMON_VALUE_EVOLTILE: 16384,
2094
+ SUMMON_VALUE_FOSSIL_FUSION: 1124073495,
2095
+ SUMMON_VALUE_FUTURE_FUSION: 1124073496,
2096
+ SUMMON_VALUE_GLADIATOR: 8192,
2097
+ SUMMON_VALUE_LV: 4096,
2098
+ SUMMON_VALUE_MASK_CHANGE: 20,
2099
+ SUMMON_VALUE_MONSTER_REBORN: 19,
2100
+ SUMMON_VALUE_SELF: 1,
2101
+ SUMMON_VALUE_SYNCHRO_MATERIAL: 17,
2102
+ TIMINGS_CHECK_MONSTER: 448,
2103
+ TIMING_ATTACK: 4096,
2104
+ TIMING_BATTLED: 134217728,
2105
+ TIMING_BATTLE_END: 16,
2106
+ TIMING_BATTLE_PHASE: 16777216,
2107
+ TIMING_BATTLE_START: 8,
2108
+ TIMING_BATTLE_STEP_END: 67108864,
2109
+ TIMING_CHAIN_END: 32768,
2110
+ TIMING_DAMAGE: 131072,
2111
+ TIMING_DAMAGE_CAL: 16384,
2112
+ TIMING_DAMAGE_STEP: 8192,
2113
+ TIMING_DESTROY: 524288,
2114
+ TIMING_DRAW: 65536,
2115
+ TIMING_DRAW_PHASE: 1,
2116
+ TIMING_END_PHASE: 32,
2117
+ TIMING_EQUIP: 33554432,
2118
+ TIMING_FLIPSUMMON: 256,
2119
+ TIMING_MAIN_END: 4,
2120
+ TIMING_MSET: 512,
2121
+ TIMING_POS_CHANGE: 2048,
2122
+ TIMING_RECOVER: 262144,
2123
+ TIMING_REMOVE: 1048576,
2124
+ TIMING_SPSUMMON: 128,
2125
+ TIMING_SSET: 1024,
2126
+ TIMING_STANDBY_PHASE: 2,
2127
+ TIMING_SUMMON: 64,
2128
+ TIMING_TODECK: 4194304,
2129
+ TIMING_TOGRAVE: 8388608,
2130
+ TIMING_TOHAND: 2097152,
2131
+ TYPES_EFFECT_TRAP_MONSTER: 289,
2132
+ TYPES_NORMAL_TRAP_MONSTER: 273,
2133
+ TYPES_TOKEN_MONSTER: 16401,
2134
+ TYPE_CONTINUOUS: 131072,
2135
+ TYPE_COUNTER: 1048576,
2136
+ TYPE_DUAL: 2048,
2137
+ TYPE_EFFECT: 32,
2138
+ TYPE_EQUIP: 262144,
2139
+ TYPE_FIELD: 524288,
2140
+ TYPE_FLIP: 2097152,
2141
+ TYPE_FUSION: 64,
2142
+ TYPE_LINK: 67108864,
2143
+ TYPE_MONSTER: 1,
2144
+ TYPE_NORMAL: 16,
2145
+ TYPE_PENDULUM: 16777216,
2146
+ TYPE_QUICKPLAY: 65536,
2147
+ TYPE_RITUAL: 128,
2148
+ TYPE_SPELL: 2,
2149
+ TYPE_SPIRIT: 512,
2150
+ TYPE_SPSUMMON: 33554432,
2151
+ TYPE_SYNCHRO: 8192,
2152
+ TYPE_TOKEN: 16384,
2153
+ TYPE_TOON: 4194304,
2154
+ TYPE_TRAP: 4,
2155
+ TYPE_TRAPMONSTER: 256,
2156
+ TYPE_TUNER: 4096,
2157
+ TYPE_UNION: 1024,
2158
+ TYPE_XYZ: 8388608
2159
+ };
2160
+
2161
+ // src/sqljs-card-reader.ts
2162
+ function toUint16ArrayFromSetcode(value) {
2163
+ let raw = typeof value === "bigint" ? value : BigInt(value >>> 0);
2164
+ const list = new Uint16Array(16);
2165
+ let idx = 0;
2166
+ while (raw !== 0n && idx < 16) {
2167
+ const chunk = raw & 0xffffn;
2168
+ if (chunk !== 0n) {
2169
+ list[idx] = Number(chunk);
2170
+ idx++;
2171
+ }
2172
+ raw >>= 16n;
2173
+ }
2174
+ return list;
2175
+ }
2176
+ function mapRowToCardData(row) {
2177
+ const type = (row.type ?? 0) >>> 0;
2178
+ let attack = row.atk ?? 0;
2179
+ let defense = row.def ?? 0;
2180
+ let linkMarker = 0;
2181
+ if ((type & OcgcoreCommonConstants.TYPE_LINK) >>> 0 !== 0) {
2182
+ linkMarker = defense;
2183
+ defense = 0;
2184
+ }
2185
+ const levelRaw = (row.level ?? 0) >>> 0;
2186
+ const level = (levelRaw & 255) >>> 0;
2187
+ const lscale = (levelRaw >>> 24 & 255) >>> 0;
2188
+ const rscale = (levelRaw >>> 16 & 255) >>> 0;
2189
+ return {
2190
+ code: row.id,
2191
+ alias: row.alias ?? 0,
2192
+ setcode: toUint16ArrayFromSetcode(row.setcode ?? 0),
2193
+ type,
2194
+ level,
2195
+ attribute: (row.attribute ?? 0) >>> 0,
2196
+ race: (row.race ?? 0) >>> 0,
2197
+ attack,
2198
+ defense,
2199
+ lscale,
2200
+ rscale,
2201
+ linkMarker
2202
+ };
2203
+ }
2204
+ function queryOne(db, cardId) {
2205
+ if (typeof db.prepare === "function") {
2206
+ const stmt = db.prepare(
2207
+ "SELECT id, alias, setcode, type, atk, def, level, race, attribute FROM datas WHERE id = ?"
2208
+ );
2209
+ try {
2210
+ stmt.bind([cardId]);
2211
+ if (!stmt.step()) {
2212
+ return null;
2213
+ }
2214
+ const row2 = stmt.getAsObject();
2215
+ if (!row2 || row2.id == null) {
2216
+ return null;
2217
+ }
2218
+ return mapRowToCardData(row2);
2219
+ } finally {
2220
+ stmt.free();
2221
+ }
2222
+ }
2223
+ const res = db.exec(
2224
+ `SELECT id, alias, setcode, type, atk, def, level, race, attribute FROM datas WHERE id = ${cardId}`
2225
+ );
2226
+ if (!res || res.length === 0 || !res[0].values || res[0].values.length === 0) {
2227
+ return null;
2228
+ }
2229
+ const row = res[0].values[0];
2230
+ return mapRowToCardData({
2231
+ id: row[0],
2232
+ alias: row[1],
2233
+ setcode: row[2],
2234
+ type: row[3],
2235
+ atk: row[4],
2236
+ def: row[5],
2237
+ level: row[6],
2238
+ race: row[7],
2239
+ attribute: row[8]
2240
+ });
2241
+ }
2242
+ function createSqljsCardReader(...dbs) {
2243
+ return (cardId) => {
2244
+ for (const db of dbs) {
2245
+ const data = queryOne(db, cardId);
2246
+ if (data) {
2247
+ return data;
2248
+ }
2249
+ }
2250
+ return null;
2251
+ };
2252
+ }
2253
+
2254
+ // src/play-yrp.ts
2255
+ var import_ygopro_yrp_encode = require("ygopro-yrp-encode");
2256
+ var { LOCATION_DECK, LOCATION_EXTRA, POS_FACEDOWN_DEFENSE } = OcgcoreScriptConstants;
2257
+ function normalizeYrp(input) {
2258
+ if (input instanceof import_ygopro_yrp_encode.YGOProYrp) {
2259
+ return input;
2260
+ }
2261
+ return new import_ygopro_yrp_encode.YGOProYrp().fromYrp(input);
2262
+ }
2263
+ function createReplayDuel(wrapper, yrp) {
2264
+ const header = yrp.header;
2265
+ const seedSequence = header?.seedSequence ?? [];
2266
+ if (seedSequence.length > 0) {
2267
+ return wrapper.createDuelV2(seedSequence);
2268
+ }
2269
+ return wrapper.createDuel(header?.seed ?? 0);
2270
+ }
2271
+ function loadDeck(duel, deck, owner, playerId) {
2272
+ if (!deck) return;
2273
+ for (const code of deck.main ?? []) {
2274
+ duel.newCard({
2275
+ code,
2276
+ owner,
2277
+ playerId,
2278
+ location: LOCATION_DECK,
2279
+ sequence: 0,
2280
+ position: POS_FACEDOWN_DEFENSE
2281
+ });
2282
+ }
2283
+ for (const code of deck.extra ?? []) {
2284
+ duel.newCard({
2285
+ code,
2286
+ owner,
2287
+ playerId,
2288
+ location: LOCATION_EXTRA,
2289
+ sequence: 0,
2290
+ position: POS_FACEDOWN_DEFENSE
2291
+ });
2292
+ }
2293
+ }
2294
+ function loadTagDeck(duel, deck, owner) {
2295
+ if (!deck) return;
2296
+ for (const code of deck.main ?? []) {
2297
+ duel.newTagCard({
2298
+ code,
2299
+ owner,
2300
+ location: LOCATION_DECK
2301
+ });
2302
+ }
2303
+ for (const code of deck.extra ?? []) {
2304
+ duel.newTagCard({
2305
+ code,
2306
+ owner,
2307
+ location: LOCATION_EXTRA
2308
+ });
2309
+ }
2310
+ }
2311
+ function setRegistryValue(duel, key, value) {
2312
+ duel.setRegistryValue(key, value);
2313
+ }
2314
+ var playYrp = (ocgcoreWrapper, yrpInput) => {
2315
+ const yrp = normalizeYrp(yrpInput);
2316
+ const messages = [];
2317
+ const responses = yrp.responses.slice();
2318
+ const duel = createReplayDuel(ocgcoreWrapper, yrp);
2319
+ let ended = false;
2320
+ const endDuel = () => {
2321
+ if (ended) return;
2322
+ duel.endDuel();
2323
+ ended = true;
2324
+ };
2325
+ try {
2326
+ setRegistryValue(duel, "duel_mode", yrp.isTag ? "tag" : "single");
2327
+ setRegistryValue(duel, "start_lp", String(yrp.startLp));
2328
+ setRegistryValue(duel, "start_hand", String(yrp.startHand));
2329
+ setRegistryValue(duel, "draw_count", String(yrp.drawCount));
2330
+ const playerNames = yrp.isTag ? [
2331
+ yrp.hostName,
2332
+ yrp.tagHostName ?? "",
2333
+ yrp.tagClientName ?? "",
2334
+ yrp.clientName
2335
+ ] : [yrp.hostName, yrp.clientName];
2336
+ for (let i = 0; i < playerNames.length; i++) {
2337
+ setRegistryValue(duel, `player_name_${i}`, playerNames[i] ?? "");
2338
+ }
2339
+ setRegistryValue(duel, "player_type_0", "0");
2340
+ setRegistryValue(duel, "player_type_1", "1");
2341
+ duel.setPlayerInfo({
2342
+ playerId: 0,
2343
+ lp: yrp.startLp,
2344
+ startCount: yrp.startHand,
2345
+ drawCount: yrp.drawCount
2346
+ });
2347
+ duel.setPlayerInfo({
2348
+ playerId: 1,
2349
+ lp: yrp.startLp,
2350
+ startCount: yrp.startHand,
2351
+ drawCount: yrp.drawCount
2352
+ });
2353
+ duel.preloadScript("./script/patches/entry.lua");
2354
+ duel.preloadScript("./script/special.lua");
2355
+ duel.preloadScript("./script/init.lua");
2356
+ if (yrp.isSingleMode && yrp.singleScript) {
2357
+ duel.preloadScript(`./single/${yrp.singleScript}`);
2358
+ } else if (yrp.isTag) {
2359
+ loadDeck(duel, yrp.hostDeck, 0, 0);
2360
+ loadTagDeck(duel, yrp.tagHostDeck, 0);
2361
+ loadDeck(duel, yrp.clientDeck, 1, 1);
2362
+ loadTagDeck(duel, yrp.tagClientDeck, 1);
2363
+ } else {
2364
+ loadDeck(duel, yrp.hostDeck, 0, 0);
2365
+ loadDeck(duel, yrp.clientDeck, 1, 1);
2366
+ }
2367
+ duel.startDuel(yrp.opt >>> 0);
2368
+ while (true) {
2369
+ const { raw, status } = duel.process();
2370
+ console.log(
2371
+ "Duel process status:",
2372
+ status,
2373
+ "Message length:",
2374
+ raw.length,
2375
+ "Message:",
2376
+ raw[0],
2377
+ "Message string:",
2378
+ Object.entries(OcgcoreCommonConstants).find(
2379
+ ([k, v]) => v === raw[0] && k.startsWith("MSG_")
2380
+ )?.[0] ?? "Unknown"
2381
+ );
2382
+ messages.push(raw);
2383
+ if (raw.length > 0 && raw[0] === OcgcoreCommonConstants.MSG_RETRY) {
2384
+ throw new Error("Got MSG_RETRY");
2385
+ }
2386
+ if (status === 0) {
2387
+ continue;
2388
+ }
2389
+ if (status === 1) {
2390
+ if (raw.length === 0) {
2391
+ continue;
2392
+ }
2393
+ const response = responses.shift();
2394
+ if (!response) {
2395
+ break;
2396
+ }
2397
+ duel.setResponse(response);
2398
+ continue;
2399
+ }
2400
+ break;
2401
+ }
2402
+ } finally {
2403
+ endDuel();
2404
+ }
2405
+ return messages;
2406
+ };
2407
+
2408
+ // index.ts
2409
+ if (typeof globalThis !== "undefined" && !globalThis.Buffer) {
2410
+ globalThis.Buffer = import_buffer.Buffer;
2411
+ }
2412
+ // Annotate the CommonJS export names for ESM import in node:
2413
+ 0 && (module.exports = {
2414
+ CardDataStruct,
2415
+ LEN_EMPTY,
2416
+ LEN_FAIL,
2417
+ LEN_HEADER,
2418
+ MESSAGE_BUFFER_SIZE,
2419
+ MapReader,
2420
+ OcgcoreCommonConstants,
2421
+ OcgcoreDuel,
2422
+ OcgcoreDuelOptionFlag,
2423
+ OcgcoreDuelRule,
2424
+ OcgcoreMessageType,
2425
+ OcgcoreScriptConstants,
2426
+ OcgcoreWrapper,
2427
+ QUERY_BUFFER_SIZE,
2428
+ REGISTRY_BUFFER_SIZE,
2429
+ ZipReader,
2430
+ createOcgcoreWrapper,
2431
+ createSqljsCardReader,
2432
+ encodeUtf8,
2433
+ normalizeStartDuelOptions,
2434
+ parseCardQuery,
2435
+ parseFieldCardQuery,
2436
+ parseFieldInfo,
2437
+ parseRegistryDump,
2438
+ parseRegistryKeys,
2439
+ playYrp,
2440
+ readI32,
2441
+ readU16,
2442
+ readU32,
2443
+ readU8
2444
+ });
2445
+ //# sourceMappingURL=index.cjs.map