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