koishipro-core.js 1.1.5 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../index.ts", "../src/vendor/ocgcore-constants.ts", "../src/constants/ocgcore.ts", "../src/utility/binary.ts", "../src/utility/utf8.ts", "../src/adapters/ocgcore-parsers.ts", "../src/adapters/start-duel.ts", "../src/ocgcore-duel.ts", "../src/structs/card-data.ts", "../src/types/ocgcore-enums.ts", "../src/ocgcore-wrapper.ts", "../src/load-ocgcore-factory.esm.ts", "../src/ocgcore-wrapper-utils.ts", "../src/create-ocgcore-wrapper.ts", "../src/vendor/script-constants.ts", "../src/script-reader/script-readers.ts", "../src/utility/load-node-module.ts", "../src/utility/node-fs.ts", "../src/utility/node-path.ts", "../src/utility/search-zips.ts", "../src/script-reader/dir-script-reader-ex.ts", "../src/card-reader/sqljs-card-reader.ts", "../src/card-reader/dir-card-reader.ts", "../src/play-yrp.ts", "../src/test-card.ts"],
4
- "sourcesContent": ["import { Buffer } from 'buffer';\n\nif (\n typeof globalThis !== 'undefined' &&\n !(globalThis as { Buffer?: unknown }).Buffer\n) {\n (globalThis as { Buffer?: unknown }).Buffer = Buffer;\n}\n\nexport * from './src/ocgcore-wrapper';\nexport * from './src/ocgcore-duel';\nexport * from './src/create-ocgcore-wrapper';\nexport * from './src/types';\nexport * from './src/structs';\nexport * from './src/adapters';\nexport * from './src/constants';\n// export * from './src/utility';\nexport * from './src/vendor';\nexport * from './src/script-reader';\nexport * from './src/card-reader';\nexport * from './src/play-yrp';\nexport * from './src/test-card';\n", "// Generated from /home/nanahira/ygo/ygopro/ocgcore/common.h\nexport const OcgcoreCommonConstants = {\n ACTIVITY_ATTACK: 5,\n ACTIVITY_BATTLE_PHASE: 6,\n ACTIVITY_CHAIN: 7,\n ACTIVITY_FLIPSUMMON: 4,\n ACTIVITY_NORMALSUMMON: 2,\n ACTIVITY_SPSUMMON: 3,\n ACTIVITY_SUMMON: 1,\n ATTRIBUTES_COUNT: 7,\n ATTRIBUTE_ALL: 127,\n ATTRIBUTE_DARK: 32,\n ATTRIBUTE_DEVINE: 64,\n ATTRIBUTE_EARTH: 1,\n ATTRIBUTE_FIRE: 4,\n ATTRIBUTE_LIGHT: 16,\n ATTRIBUTE_WATER: 2,\n ATTRIBUTE_WIND: 8,\n CARDDATA_ALIAS: 2,\n CARDDATA_ATTACK: 8,\n CARDDATA_ATTRIBUTE: 6,\n CARDDATA_CODE: 1,\n CARDDATA_DEFENSE: 9,\n CARDDATA_LEVEL: 5,\n CARDDATA_LINK_MARKER: 12,\n CARDDATA_LSCALE: 10,\n CARDDATA_RACE: 7,\n CARDDATA_RSCALE: 11,\n CARDDATA_SETCODE: 3,\n CARDDATA_TYPE: 4,\n CHINT_ATTRIBUTE: 4,\n CHINT_CARD: 2,\n CHINT_DESC_ADD: 6,\n CHINT_DESC_REMOVE: 7,\n CHINT_NUMBER: 5,\n CHINT_RACE: 3,\n CHINT_TURN: 1,\n CURRENT_RULE: 5,\n DUEL_ATTACK_FIRST_TURN: 2,\n DUEL_OBSOLETE_RULING: 8,\n DUEL_PSEUDO_SHUFFLE: 16,\n DUEL_RETURN_DECK_TOP: 128,\n DUEL_REVEAL_DECK_SEQ: 256,\n DUEL_SIMPLE_AI: 64,\n DUEL_TAG_MODE: 32,\n DUEL_TEST_MODE: 1,\n EDESC_OPERATION: 1,\n EDESC_RESET: 2,\n FALSE: 0,\n GETEFFECT_ALL: 15,\n GETEFFECT_COPY: 4,\n GETEFFECT_GAIN: 2,\n GETEFFECT_GRANT: 8,\n GETEFFECT_INITIAL: 1,\n HINT_ATTRIB: 7,\n HINT_CARD: 10,\n HINT_CODE: 8,\n HINT_EFFECT: 5,\n HINT_EVENT: 1,\n HINT_MESSAGE: 2,\n HINT_MUSIC: 21,\n HINT_MUSIC_OGG: 23,\n HINT_NUMBER: 9,\n HINT_OPSELECTED: 4,\n HINT_RACE: 6,\n HINT_SELECTMSG: 3,\n HINT_SOUND: 22,\n HINT_ZONE: 11,\n LINK_MARKER_BOTTOM: 2,\n LINK_MARKER_BOTTOM_LEFT: 1,\n LINK_MARKER_BOTTOM_RIGHT: 4,\n LINK_MARKER_LEFT: 8,\n LINK_MARKER_RIGHT: 32,\n LINK_MARKER_TOP: 128,\n LINK_MARKER_TOP_LEFT: 64,\n LINK_MARKER_TOP_RIGHT: 256,\n LOCATION_DECKBOT: 65537,\n LOCATION_DECKSHF: 131073,\n MASTER_RULE3: 3,\n MASTER_RULE_2020: 5,\n MSG_ADD_COUNTER: 101,\n MSG_AI_NAME: 163,\n MSG_ANNOUNCE_ATTRIB: 141,\n MSG_ANNOUNCE_CARD: 142,\n MSG_ANNOUNCE_NUMBER: 143,\n MSG_ANNOUNCE_RACE: 140,\n MSG_ATTACK: 110,\n MSG_ATTACK_DISABLED: 112,\n MSG_BATTLE: 111,\n MSG_BECOME_TARGET: 83,\n MSG_CANCEL_TARGET: 97,\n MSG_CARD_HINT: 160,\n MSG_CARD_TARGET: 96,\n MSG_CHAINED: 71,\n MSG_CHAINING: 70,\n MSG_CHAIN_DISABLED: 76,\n MSG_CHAIN_END: 74,\n MSG_CHAIN_NEGATED: 75,\n MSG_CHAIN_SOLVED: 73,\n MSG_CHAIN_SOLVING: 72,\n MSG_CONFIRM_CARDS: 31,\n MSG_CONFIRM_DECKTOP: 30,\n MSG_CONFIRM_EXTRATOP: 42,\n MSG_CUSTOM_MSG: 180,\n MSG_DAMAGE: 91,\n MSG_DAMAGE_STEP_END: 114,\n MSG_DAMAGE_STEP_START: 113,\n MSG_DECK_TOP: 38,\n MSG_DRAW: 90,\n MSG_EQUIP: 93,\n MSG_FIELD_DISABLED: 56,\n MSG_FLIPSUMMONED: 65,\n MSG_FLIPSUMMONING: 64,\n MSG_HAND_RES: 133,\n MSG_HINT: 2,\n MSG_LPUPDATE: 94,\n MSG_MATCH_KILL: 170,\n MSG_MISSED_EFFECT: 120,\n MSG_MOVE: 50,\n MSG_NEW_PHASE: 41,\n MSG_NEW_TURN: 40,\n MSG_PAY_LPCOST: 100,\n MSG_PLAYER_HINT: 165,\n MSG_POS_CHANGE: 53,\n MSG_RANDOM_SELECTED: 81,\n MSG_RECOVER: 92,\n MSG_RELOAD_FIELD: 162,\n MSG_REMOVE_COUNTER: 102,\n MSG_RESET_TIME: 221,\n MSG_RETRY: 1,\n MSG_REVERSE_DECK: 37,\n MSG_ROCK_PAPER_SCISSORS: 132,\n MSG_SELECT_BATTLECMD: 10,\n MSG_SELECT_CARD: 15,\n MSG_SELECT_CHAIN: 16,\n MSG_SELECT_COUNTER: 22,\n MSG_SELECT_DISFIELD: 24,\n MSG_SELECT_EFFECTYN: 12,\n MSG_SELECT_IDLECMD: 11,\n MSG_SELECT_OPTION: 14,\n MSG_SELECT_PLACE: 18,\n MSG_SELECT_POSITION: 19,\n MSG_SELECT_SUM: 23,\n MSG_SELECT_TRIBUTE: 20,\n MSG_SELECT_UNSELECT_CARD: 26,\n MSG_SELECT_YESNO: 13,\n MSG_SET: 54,\n MSG_SHOW_HINT: 164,\n MSG_SHUFFLE_DECK: 32,\n MSG_SHUFFLE_EXTRA: 39,\n MSG_SHUFFLE_HAND: 33,\n MSG_SHUFFLE_SET_CARD: 36,\n MSG_SORT_CARD: 25,\n MSG_SPSUMMONED: 63,\n MSG_SPSUMMONING: 62,\n MSG_SUMMONED: 61,\n MSG_SUMMONING: 60,\n MSG_SWAP: 55,\n MSG_SWAP_GRAVE_DECK: 35,\n MSG_TAG_SWAP: 161,\n MSG_TOSS_COIN: 130,\n MSG_TOSS_DICE: 131,\n MSG_UPDATE_CARD: 7,\n MSG_WIN: 5,\n NEW_MASTER_RULE: 4,\n NO_FLIP_EFFECT: 65536,\n OPCODE_ADD: 1073741824,\n OPCODE_AND: 1073741828,\n OPCODE_DIV: 1073741827,\n OPCODE_ISATTRIBUTE: 1073742084,\n OPCODE_ISCODE: 1073742080,\n OPCODE_ISRACE: 1073742083,\n OPCODE_ISSETCARD: 1073742081,\n OPCODE_ISTYPE: 1073742082,\n OPCODE_MUL: 1073741826,\n OPCODE_NEG: 1073741830,\n OPCODE_NOT: 1073741831,\n OPCODE_OR: 1073741829,\n OPCODE_SUB: 1073741825,\n OPERATION_CANCELED: -1,\n OPERATION_FAIL: 0,\n OPERATION_SUCCESS: 1,\n PHASE_BATTLE: 128,\n PHASE_BATTLE_START: 8,\n PHASE_BATTLE_STEP: 16,\n PHASE_DAMAGE: 32,\n PHASE_DAMAGE_CAL: 64,\n PHASE_DRAW: 1,\n PHASE_END: 512,\n PHASE_MAIN1: 4,\n PHASE_MAIN2: 256,\n PHASE_STANDBY: 2,\n PHINT_DESC_ADD: 6,\n PHINT_DESC_REMOVE: 7,\n PLAYER_ALL: 3,\n PLAYER_NONE: 2,\n PLAYER_SELFDES: 5,\n POS_ATTACK: 3,\n POS_DEFENSE: 12,\n POS_FACEDOWN: 10,\n POS_FACEDOWN_ATTACK: 2,\n POS_FACEDOWN_DEFENSE: 8,\n POS_FACEUP: 5,\n POS_FACEUP_ATTACK: 1,\n POS_FACEUP_DEFENSE: 4,\n PROCESSOR_BUFFER_LEN: 268435455,\n PROCESSOR_END: 536870912,\n PROCESSOR_FLAG: 4026531840,\n PROCESSOR_NONE: 0,\n PROCESSOR_WAITING: 268435456,\n QUERY_ALIAS: 4,\n QUERY_ATTACK: 256,\n QUERY_ATTRIBUTE: 64,\n QUERY_BASE_ATTACK: 1024,\n QUERY_BASE_DEFENSE: 2048,\n QUERY_CODE: 1,\n QUERY_COUNTERS: 131072,\n QUERY_DEFENSE: 512,\n QUERY_EQUIP_CARD: 16384,\n QUERY_LEVEL: 16,\n QUERY_LINK: 8388608,\n QUERY_LSCALE: 2097152,\n QUERY_OVERLAY_CARD: 65536,\n QUERY_OWNER: 262144,\n QUERY_POSITION: 2,\n QUERY_RACE: 128,\n QUERY_RANK: 32,\n QUERY_REASON: 4096,\n QUERY_REASON_CARD: 8192,\n QUERY_RSCALE: 4194304,\n QUERY_STATUS: 524288,\n QUERY_TARGET_CARD: 32768,\n QUERY_TYPE: 8,\n RACES_COUNT: 26,\n RACE_ALL: 67108863,\n RACE_AQUA: 64,\n RACE_BEAST: 16384,\n RACE_BEASTWARRIOR: 32768,\n RACE_CREATORGOD: 4194304,\n RACE_CYBERSE: 16777216,\n RACE_DEVINE: 2097152,\n RACE_DINOSAUR: 65536,\n RACE_DRAGON: 8192,\n RACE_FAIRY: 4,\n RACE_FIEND: 8,\n RACE_FISH: 131072,\n RACE_ILLUSION: 33554432,\n RACE_INSECT: 2048,\n RACE_MACHINE: 32,\n RACE_PLANT: 1024,\n RACE_PSYCHO: 1048576,\n RACE_PYRO: 128,\n RACE_REPTILE: 524288,\n RACE_ROCK: 256,\n RACE_SEASERPENT: 262144,\n RACE_SPELLCASTER: 2,\n RACE_THUNDER: 4096,\n RACE_WARRIOR: 1,\n RACE_WINDBEAST: 512,\n RACE_WYRM: 8388608,\n RACE_ZOMBIE: 16,\n REASONS_PROCEDURE: 271056896,\n REASON_ACTION: 2147483648,\n REASON_ADJUST: 256,\n REASON_BATTLE: 32,\n REASON_COST: 128,\n REASON_DESTROY: 1,\n REASON_DISCARD: 16384,\n REASON_DISSUMMON: 4096,\n REASON_DRAW: 33554432,\n REASON_EFFECT: 64,\n REASON_FLIP: 8192,\n REASON_FUSION: 262144,\n REASON_LINK: 268435456,\n REASON_LOST_OVERLAY: 536870912,\n REASON_LOST_TARGET: 512,\n REASON_MAINTENANCE: 1073741824,\n REASON_MATERIAL: 8,\n REASON_RDAMAGE: 32768,\n REASON_REDIRECT: 67108864,\n REASON_RELEASE: 2,\n REASON_REPLACE: 16777216,\n REASON_RETURN: 131072,\n REASON_REVEAL: 134217728,\n REASON_RITUAL: 1048576,\n REASON_RRECOVER: 65536,\n REASON_RULE: 1024,\n REASON_SPSUMMON: 2048,\n REASON_SUMMON: 16,\n REASON_SYNCHRO: 524288,\n REASON_TEMPORARY: 4,\n REASON_XYZ: 2097152,\n RETURN_TEMP_REMOVE_TO_FIELD: 1,\n RETURN_TRAP_MONSTER_TO_SZONE: 2,\n SEQ_DECKBOTTOM: 1,\n SEQ_DECKSHUFFLE: 2,\n SEQ_DECKTOP: 0,\n SIZE_AI_NAME: 128,\n SIZE_HINT_MSG: 1024,\n SIZE_MESSAGE_BUFFER: 8192,\n SIZE_RETURN_VALUE: 512,\n STATUS_ACTIVATE_DISABLED: 262144,\n STATUS_ACT_FROM_HAND: 134217728,\n STATUS_ATTACK_CANCELED: 2097152,\n STATUS_BATTLE_DESTROYED: 16384,\n STATUS_BATTLE_RESULT: 64,\n STATUS_CANNOT_CHANGE_FORM: 256,\n STATUS_CHAINING: 65536,\n STATUS_CONTINUOUS_POS: 33554432,\n STATUS_COPYING_EFFECT: 32768,\n STATUS_DESTROY_CONFIRMED: 4096,\n STATUS_DISABLED: 1,\n STATUS_EFFECT_ENABLED: 1024,\n STATUS_EFFECT_REPLACED: 524288,\n STATUS_FLIP_SUMMONING: 1048576,\n STATUS_FLIP_SUMMON_DISABLED: 2147483648,\n STATUS_FLIP_SUMMON_TURN: 536870912,\n STATUS_FORBIDDEN: 67108864,\n STATUS_INITIALIZING: 4194304,\n STATUS_JUST_POS: 16777216,\n STATUS_LEAVE_CONFIRMED: 8192,\n STATUS_NO_LEVEL: 32,\n STATUS_OPPO_BATTLE: 268435456,\n STATUS_PROC_COMPLETE: 8,\n STATUS_SET_TURN: 16,\n STATUS_SPSUMMON_STEP: 128,\n STATUS_SPSUMMON_TURN: 1073741824,\n STATUS_SUMMONING: 512,\n STATUS_SUMMON_DISABLED: 131072,\n STATUS_SUMMON_TURN: 2048,\n STATUS_TO_DISABLE: 4,\n STATUS_TO_ENABLE: 2,\n STATUS_TO_HAND_WITHOUT_CONFIRM: 8388608,\n TRUE: 1,\n TYPES_EXTRA_DECK: 75505728,\n TYPE_CONTINUOUS: 131072,\n TYPE_COUNTER: 1048576,\n TYPE_DUAL: 2048,\n TYPE_EFFECT: 32,\n TYPE_EQUIP: 262144,\n TYPE_FIELD: 524288,\n TYPE_FLIP: 2097152,\n TYPE_FUSION: 64,\n TYPE_LINK: 67108864,\n TYPE_MONSTER: 1,\n TYPE_NORMAL: 16,\n TYPE_PENDULUM: 16777216,\n TYPE_QUICKPLAY: 65536,\n TYPE_RITUAL: 128,\n TYPE_SPELL: 2,\n TYPE_SPIRIT: 512,\n TYPE_SPSUMMON: 33554432,\n TYPE_SYNCHRO: 8192,\n TYPE_TOKEN: 16384,\n TYPE_TOON: 4194304,\n TYPE_TRAP: 4,\n TYPE_TRAPMONSTER: 256,\n TYPE_TUNER: 4096,\n TYPE_UNION: 1024,\n TYPE_XYZ: 8388608,\n} as const;\n", "import { OcgcoreCommonConstants } from '../vendor/ocgcore-constants';\n\nexport const MESSAGE_BUFFER_SIZE = OcgcoreCommonConstants.SIZE_MESSAGE_BUFFER;\nexport const QUERY_BUFFER_SIZE = 0x4000;\nexport const REGISTRY_BUFFER_SIZE = 0x2000;\n\nexport const LEN_FAIL = 0;\nexport const LEN_EMPTY = 4;\nexport const LEN_HEADER = 8;\n", "export function readU8(buf: Uint8Array, offset: number): number {\n return buf[offset] ?? 0;\n}\n\nexport function readU16(buf: Uint8Array, offset: number): number {\n return new DataView(buf.buffer, buf.byteOffset, buf.byteLength).getUint16(\n offset,\n true,\n );\n}\n\nexport function readI32(buf: Uint8Array, offset: number): number {\n return new DataView(buf.buffer, buf.byteOffset, buf.byteLength).getInt32(\n offset,\n true,\n );\n}\n\nexport function readU32(buf: Uint8Array, offset: number): number {\n return new DataView(buf.buffer, buf.byteOffset, buf.byteLength).getUint32(\n offset,\n true,\n );\n}\n", "const encoder = new TextEncoder();\nconst decoder = new TextDecoder('utf-8');\n\nexport function encodeUtf8(value: string): Uint8Array {\n return encoder.encode(value);\n}\n\nexport function decodeUtf8(value: Uint8Array): string {\n return decoder.decode(value);\n}\n", "import { LEN_HEADER } from '../constants';\nimport { readI32, readU16 } from '../utility/binary';\nimport { decodeUtf8 } from '../utility/utf8';\nimport { CardQuery, YGOProMsgReloadField } from 'ygopro-msg-encode';\n\n// Internal interface for registry parsing\ninterface RegistryDumpEntry {\n key: string;\n value: Uint8Array;\n valueText?: string;\n}\n\nexport function parseCardQuery(\n raw: Uint8Array,\n length: number,\n): CardQuery | null {\n if (length <= LEN_HEADER) {\n return null;\n }\n const payload = raw.subarray(4, length);\n return new CardQuery().fromPayload(payload);\n}\n\nexport function parseFieldCardQuery(\n raw: Uint8Array,\n length: number,\n): CardQuery[] {\n const cards: CardQuery[] = [];\n let offset = 0;\n while (offset + 4 <= length) {\n const chunkLen = readI32(raw, offset);\n if (chunkLen <= 0) {\n break;\n }\n const end = Math.min(length, offset + chunkLen);\n if (chunkLen <= LEN_HEADER) {\n const emptyCard = new CardQuery();\n emptyCard.flags = 0;\n emptyCard.empty = true;\n cards.push(emptyCard);\n } else {\n const payload = raw.subarray(offset + 4, end);\n cards.push(new CardQuery().fromPayload(payload));\n }\n offset += chunkLen;\n }\n return cards;\n}\n\nexport function parseFieldInfo(raw: Uint8Array): YGOProMsgReloadField {\n // query_field_info() in ocgcore returns data that starts with MSG_RELOAD_FIELD (162) byte\n // Format: [MSG_RELOAD_FIELD][duel_rule][player0_data][player1_data][chains]\n // YGOProMsgReloadField.fromPayload() expects the full message including the identifier\n return new YGOProMsgReloadField().fromPayload(raw);\n}\n\nexport function parseRegistryKeys(raw: Uint8Array): string[] {\n const keys: string[] = [];\n let offset = 0;\n while (offset + 2 <= raw.length) {\n const len = readU16(raw, offset);\n offset += 2;\n if (offset + len > raw.length) {\n break;\n }\n const keyBytes = raw.subarray(offset, offset + len);\n offset += len;\n keys.push(decodeUtf8(keyBytes));\n }\n return keys;\n}\n\nexport function parseRegistryDump(raw: Uint8Array): RegistryDumpEntry[] {\n const entries: RegistryDumpEntry[] = [];\n let offset = 0;\n while (offset + 4 <= raw.length) {\n const keyLen = readU16(raw, offset);\n const valLen = readU16(raw, offset + 2);\n offset += 4;\n if (offset + keyLen + valLen > raw.length) {\n break;\n }\n const keyBytes = raw.subarray(offset, offset + keyLen);\n offset += keyLen;\n const valueBytes = raw.subarray(offset, offset + valLen);\n offset += valLen;\n const entry: RegistryDumpEntry = {\n key: decodeUtf8(keyBytes),\n value: valueBytes,\n };\n entry.valueText = decodeUtf8(valueBytes);\n entries.push(entry);\n }\n return entries;\n}\n", "import { OcgcoreStartDuelOptions } from '../types/ocgcore-params';\n\nexport function normalizeStartDuelOptions(\n options: number | OcgcoreStartDuelOptions,\n): number {\n if (typeof options === 'number') {\n return options;\n }\n const duelRule = options.rule ?? 0;\n let duelOptions = options.options ?? 0;\n if (options.flags?.length) {\n for (const flag of options.flags) {\n duelOptions = (duelOptions | flag) >>> 0;\n }\n }\n return (((duelRule & 0xffff) << 16) | (duelOptions & 0xffff)) >>> 0;\n}\n", "import {\n OcgcoreCardQueryResult,\n OcgcoreFieldCardQueryResult,\n OcgcoreFieldInfoResult,\n OcgcoreMessageResult,\n OcgcoreProcessResult,\n OcgcoreRegistryDumpResult,\n OcgcoreRegistryKeysResult,\n OcgcoreRegistryValueResult,\n} from './types/ocgcore-results';\nimport {\n OcgcoreNewCardParams,\n OcgcoreNewTagCardParams,\n OcgcoreQueryCardParams,\n OcgcoreQueryFieldCardParams,\n OcgcoreQueryFieldCountParams,\n OcgcoreSetPlayerInfoParams,\n OcgcoreStartDuelOptions,\n} from './types/ocgcore-params';\nimport {\n MESSAGE_BUFFER_SIZE,\n QUERY_BUFFER_SIZE,\n REGISTRY_BUFFER_SIZE,\n LEN_HEADER,\n} from './constants';\nimport {\n parseCardQuery,\n parseFieldCardQuery,\n parseFieldInfo,\n parseRegistryDump,\n parseRegistryKeys,\n} from './adapters/ocgcore-parsers';\nimport { normalizeStartDuelOptions } from './adapters/start-duel';\nimport { OcgcoreWrapper } from './ocgcore-wrapper';\nimport { decodeUtf8 } from './utility/utf8';\nimport { YGOProMessages, YGOProMsgBase } from 'ygopro-msg-encode';\n\nexport class OcgcoreDuel {\n private returnPtr = 0;\n private returnSize = 512;\n\n constructor(\n public ocgcoreWrapper: OcgcoreWrapper,\n public duelPtr: number,\n ) {}\n\n startDuel(options: number | OcgcoreStartDuelOptions): void {\n if (!this.returnPtr) {\n this.returnPtr = this.ocgcoreWrapper.malloc(this.returnSize);\n }\n const optionValue = normalizeStartDuelOptions(options);\n this.ocgcoreWrapper.ocgcoreModule._start_duel(this.duelPtr, optionValue);\n }\n\n ended = false;\n\n endDuel(): void {\n if (this.ended) return;\n this.ended = true;\n this.ocgcoreWrapper.ocgcoreModule._end_duel(this.duelPtr);\n if (this.returnPtr) {\n this.ocgcoreWrapper.free(this.returnPtr);\n this.returnPtr = 0;\n }\n this.ocgcoreWrapper.forgetDuel(this.duelPtr);\n }\n\n setPlayerInfo(info: OcgcoreSetPlayerInfoParams): void {\n this.ocgcoreWrapper.ocgcoreModule._set_player_info(\n this.duelPtr,\n info.player,\n info.lp,\n info.startHand,\n info.drawCount,\n );\n }\n\n _getLogMessage(bufPtr: number): number {\n return this.ocgcoreWrapper.ocgcoreModule._get_log_message(\n this.duelPtr,\n bufPtr,\n );\n }\n\n private getMessage(length: number): OcgcoreMessageResult {\n const ptr = this.ocgcoreWrapper.malloc(MESSAGE_BUFFER_SIZE);\n this.ocgcoreWrapper.ocgcoreModule._get_message(this.duelPtr, ptr);\n const raw = this.ocgcoreWrapper.copyHeap(ptr, length);\n this.ocgcoreWrapper.free(ptr);\n return { length, raw };\n }\n\n process(): OcgcoreProcessResult {\n const result = this.ocgcoreWrapper.ocgcoreModule._process(this.duelPtr);\n const length = (result & 0x0fffffff) >>> 0;\n const status = ((result >>> 28) & 0x0f) >>> 0;\n const messageData = this.getMessage(length);\n\n // Parse message using YGOProMessages (only one message per process call)\n let parsedMessage: YGOProMsgBase | undefined;\n if (messageData.raw.length > 0) {\n try {\n parsedMessage = YGOProMessages.getInstanceFromPayload(messageData.raw);\n } catch (e) {\n // If parsing fails, parsedMessage remains undefined\n }\n }\n\n return {\n length: messageData.length,\n raw: messageData.raw,\n status,\n message: parsedMessage,\n };\n }\n\n newCard(card: OcgcoreNewCardParams): void {\n this.ocgcoreWrapper.ocgcoreModule._new_card(\n this.duelPtr,\n card.code,\n card.owner,\n card.player,\n card.location,\n card.sequence,\n card.position,\n );\n }\n\n newTagCard(card: OcgcoreNewTagCardParams): void {\n this.ocgcoreWrapper.ocgcoreModule._new_tag_card(\n this.duelPtr,\n card.code,\n card.owner,\n card.location,\n );\n }\n\n queryCard(query: OcgcoreQueryCardParams): OcgcoreCardQueryResult {\n const ptr = this.ocgcoreWrapper.malloc(QUERY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._query_card(\n this.duelPtr,\n query.player,\n query.location,\n query.sequence,\n query.queryFlag,\n ptr,\n query.useCache ?? 0,\n );\n const raw = this.ocgcoreWrapper.copyHeap(ptr, length);\n this.ocgcoreWrapper.free(ptr);\n const card = length <= LEN_HEADER ? null : parseCardQuery(raw, length);\n return { length, raw, card };\n }\n\n queryFieldCount(query: OcgcoreQueryFieldCountParams): number {\n return this.ocgcoreWrapper.ocgcoreModule._query_field_count(\n this.duelPtr,\n query.player,\n query.location,\n );\n }\n\n queryFieldCard(\n query: OcgcoreQueryFieldCardParams,\n ): OcgcoreFieldCardQueryResult {\n const ptr = this.ocgcoreWrapper.malloc(QUERY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._query_field_card(\n this.duelPtr,\n query.player,\n query.location,\n query.queryFlag,\n ptr,\n query.useCache ?? 0,\n );\n const raw = this.ocgcoreWrapper.copyHeap(ptr, length);\n this.ocgcoreWrapper.free(ptr);\n const cards = parseFieldCardQuery(raw, length);\n return { length, raw, cards };\n }\n\n queryFieldInfo(): OcgcoreFieldInfoResult {\n const ptr = this.ocgcoreWrapper.malloc(QUERY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._query_field_info(\n this.duelPtr,\n ptr,\n );\n const raw = this.ocgcoreWrapper.copyHeap(ptr, length);\n this.ocgcoreWrapper.free(ptr);\n const field = parseFieldInfo(raw);\n return { length, raw, field };\n }\n\n setResponseInt(value: number): void {\n this.ocgcoreWrapper.ocgcoreModule._set_responsei(this.duelPtr, value);\n }\n\n setResponse(response: Uint8Array | number): void {\n if (typeof response === 'number') {\n this.setResponseInt(response);\n return;\n }\n if (response.length > this.returnSize) {\n this.ocgcoreWrapper.free(this.returnPtr);\n this.returnPtr = this.ocgcoreWrapper.malloc(response.length);\n this.returnSize = response.length;\n }\n this.ocgcoreWrapper.setHeap(this.returnPtr, response);\n this.ocgcoreWrapper.ocgcoreModule._set_responseb(\n this.duelPtr,\n this.returnPtr,\n );\n }\n\n preloadScript(scriptPath: string): void {\n this.ocgcoreWrapper.useTmpData(\n (ptr) =>\n this.ocgcoreWrapper.ocgcoreModule._preload_script(this.duelPtr, ptr),\n scriptPath,\n );\n }\n\n getRegistryValue(key: string): OcgcoreRegistryValueResult {\n const outPtr = this.ocgcoreWrapper.malloc(REGISTRY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.useTmpData(\n (keyPtr) =>\n this.ocgcoreWrapper.ocgcoreModule._get_registry_value(\n this.duelPtr,\n keyPtr,\n outPtr,\n ),\n key,\n );\n const raw = this.ocgcoreWrapper.copyHeap(outPtr, Math.max(0, length));\n this.ocgcoreWrapper.free(outPtr);\n const value = raw;\n const text = length >= 0 ? decodeUtf8(raw) : undefined;\n return { length, raw, value, text };\n }\n\n setRegistryValue(key: string, value: string): void {\n this.ocgcoreWrapper.useTmpData(\n (keyPtr, valuePtr) =>\n this.ocgcoreWrapper.ocgcoreModule._set_registry_value(\n this.duelPtr,\n keyPtr,\n valuePtr,\n ),\n key,\n value,\n );\n }\n\n getRegistryKeys(): OcgcoreRegistryKeysResult {\n const outPtr = this.ocgcoreWrapper.malloc(REGISTRY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._get_registry_keys(\n this.duelPtr,\n outPtr,\n );\n const raw = this.ocgcoreWrapper.copyHeap(outPtr, Math.max(0, length));\n this.ocgcoreWrapper.free(outPtr);\n const keys = length >= 0 ? parseRegistryKeys(raw) : [];\n return { length, raw, keys };\n }\n\n clearRegistry(): void {\n this.ocgcoreWrapper.ocgcoreModule._clear_registry(this.duelPtr);\n }\n\n dumpRegistry(): OcgcoreRegistryDumpResult {\n const outPtr = this.ocgcoreWrapper.malloc(REGISTRY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._dump_registry(\n this.duelPtr,\n outPtr,\n );\n const raw = this.ocgcoreWrapper.copyHeap(outPtr, Math.max(0, length));\n this.ocgcoreWrapper.free(outPtr);\n\n // Parse directly into dict\n const dict: Record<string, string> = {};\n if (length > 0) {\n const entries = parseRegistryDump(raw);\n for (const entry of entries) {\n if (entry.valueText !== undefined) {\n dict[entry.key] = entry.valueText;\n }\n }\n }\n\n return { length, raw, dict };\n }\n\n loadRegistry(input: Uint8Array | Record<string, string>): void {\n if (input instanceof Uint8Array) {\n // Load from binary format\n this.ocgcoreWrapper.useTmpData(\n (ptr) =>\n this.ocgcoreWrapper.ocgcoreModule._load_registry(\n this.duelPtr,\n ptr,\n input.length,\n ),\n input,\n );\n } else {\n // Load from dict format\n for (const [key, value] of Object.entries(input)) {\n this.setRegistryValue(key, value);\n }\n }\n }\n}\n", "import {\n BinaryField,\n fillBinaryFields,\n toBinaryFields,\n} from 'ygopro-msg-encode';\n\nexport class CardDataStruct {\n @BinaryField('u32', 0)\n code!: number;\n\n @BinaryField('u32', 4)\n alias!: number;\n\n @BinaryField('u16', 8, 16)\n setcode!: Uint16Array;\n\n @BinaryField('u32', 40)\n type!: number;\n\n @BinaryField('u32', 44)\n level!: number;\n\n @BinaryField('u32', 48)\n attribute!: number;\n\n @BinaryField('u32', 52)\n race!: number;\n\n @BinaryField('i32', 56)\n attack!: number;\n\n @BinaryField('i32', 60)\n defense!: number;\n\n @BinaryField('u32', 64)\n lscale!: number;\n\n @BinaryField('u32', 68)\n rscale!: number;\n\n @BinaryField('u32', 72)\n linkMarker!: number;\n\n static fromBytes(data: Uint8Array): CardDataStruct {\n const obj = new CardDataStruct();\n fillBinaryFields(obj, data, CardDataStruct);\n return obj;\n }\n\n toBytes(): Uint8Array {\n return toBinaryFields(this, CardDataStruct);\n }\n}\n", "export enum OcgcoreMessageType {\n ScriptError = 'ScriptError',\n DebugMessage = 'DebugMessage',\n}\n\nexport enum OcgcoreDuelRule {\n Rule1 = 1,\n Rule2 = 2,\n MasterRule3 = 3,\n NewMasterRule = 4,\n MasterRule2020 = 5,\n}\n\nexport enum OcgcoreDuelOptionFlag {\n TestMode = 0x01,\n AttackFirstTurn = 0x02,\n ObsoleteRuling = 0x08,\n PseudoShuffle = 0x10,\n TagMode = 0x20,\n SimpleAI = 0x40,\n ReturnDeckTop = 0x80,\n RevealDeckSeq = 0x100,\n}\n", "import { OcgcoreModule } from './vendor/libocgcore.shared';\nimport { OcgcoreDuel } from './ocgcore-duel';\nimport { CardDataInput } from './types/card-data';\nimport { CardDataStruct } from './structs/card-data';\nimport { OcgcoreMessageType } from './types/ocgcore-enums';\nimport { CardReader, MessageHandler, ScriptReader } from './types/callback';\n\nexport class OcgcoreWrapper {\n private scriptBufferPtr = 0;\n private scriptBufferSize = 0;\n private logBufferPtr = 0;\n private logBufferSize = 0;\n private tmpStringBufferPtr = 0;\n private tmpStringBufferSize = 0;\n\n private scriptReaderFunc = 0;\n private cardReaderFunc = 0;\n private messageHandlerFunc = 0;\n\n private scriptReaders: ScriptReader[] = [];\n private cardReaders: CardReader[] = [];\n private messageHandlers: MessageHandler[] = [];\n\n private heapU8: Uint8Array;\n private heapView: DataView;\n private encoder = new TextEncoder();\n private decoder = new TextDecoder('utf-8');\n private duels = new Map<number, OcgcoreDuel>();\n\n constructor(\n public ocgcoreModule: OcgcoreModule,\n options?: { scriptBufferSize?: number; logBufferSize?: number },\n ) {\n this.heapU8 = ocgcoreModule.HEAPU8 as Uint8Array;\n this.heapView = new DataView(this.heapU8.buffer);\n this.scriptBufferSize = options?.scriptBufferSize ?? 0x100000;\n this.logBufferSize = options?.logBufferSize ?? 1024;\n\n this.scriptReaderFunc = this.createFunction((scriptPtr, lenPtr) => {\n const scriptPath = this.getUTF8String(scriptPtr);\n let content: string | Uint8Array | null | undefined;\n for (const reader of this.scriptReaders) {\n try {\n content = reader(scriptPath);\n } catch {\n content = null;\n }\n if (content != null) {\n break;\n }\n }\n if (content == null) {\n return 0;\n }\n\n if (!this.scriptBufferPtr) {\n this.scriptBufferPtr = this.ocgcoreModule._malloc(\n this.scriptBufferSize,\n );\n }\n\n const bytes =\n typeof content === 'string' ? this.encoder.encode(content) : content;\n if (bytes.length > this.scriptBufferSize) {\n this.ocgcoreModule._free(this.scriptBufferPtr);\n this.scriptBufferPtr = this.ocgcoreModule._malloc(bytes.length);\n this.scriptBufferSize = bytes.length;\n }\n\n this.heapU8.set(bytes, this.scriptBufferPtr);\n this.heapView.setInt32(lenPtr, bytes.length, true);\n return this.scriptBufferPtr;\n }, 'iii');\n this.ocgcoreModule._set_script_reader(this.scriptReaderFunc);\n\n this.cardReaderFunc = this.createFunction((cardId, cardDataPtr) => {\n let data: CardDataInput | null | undefined;\n for (const reader of this.cardReaders) {\n try {\n data = reader(cardId);\n } catch {\n data = null;\n }\n if (data) {\n break;\n }\n }\n if (!data) {\n return 0;\n }\n\n let buf: Uint8Array;\n if (data instanceof CardDataStruct) {\n buf = data.toBytes();\n } else {\n const cardData = new CardDataStruct();\n cardData.code = data.code;\n cardData.alias = data.alias;\n\n // Initialize setcode array\n const targetSetcode = new Uint16Array(16);\n targetSetcode.fill(0);\n if (data.setcode instanceof Uint16Array && data.setcode.length === 16) {\n targetSetcode.set(data.setcode);\n } else {\n for (let i = 0; i < 16 && i < data.setcode.length; i++) {\n targetSetcode[i] = data.setcode[i];\n }\n }\n cardData.setcode = targetSetcode;\n\n cardData.type = data.type;\n cardData.level = data.level;\n cardData.attribute = data.attribute;\n cardData.race = data.race;\n cardData.attack = data.attack;\n cardData.defense = data.defense;\n cardData.lscale = data.lscale;\n cardData.rscale = data.rscale;\n cardData.linkMarker = data.linkMarker;\n buf = cardData.toBytes();\n }\n\n this.heapU8.set(buf, cardDataPtr);\n return 0;\n }, 'iii');\n this.ocgcoreModule._set_card_reader(this.cardReaderFunc);\n\n this.messageHandlerFunc = this.createFunction((duelPtr, messageType) => {\n if (!this.logBufferPtr) {\n this.logBufferPtr = this.ocgcoreModule._malloc(this.logBufferSize);\n }\n this.ocgcoreModule._get_log_message(duelPtr, this.logBufferPtr);\n const message = this.getUTF8String(this.logBufferPtr);\n const type =\n messageType === 2\n ? OcgcoreMessageType.DebugMessage\n : OcgcoreMessageType.ScriptError;\n const duel = this.getOrCreateDuel(duelPtr);\n for (const handler of this.messageHandlers) {\n try {\n handler(duel, message, type);\n } catch {\n // ignore handler errors\n }\n }\n }, 'iii');\n this.ocgcoreModule._set_message_handler(this.messageHandlerFunc);\n }\n\n getUTF8String(ptr: number): string {\n let length = 0;\n while (this.heapU8[ptr + length] !== 0) {\n length++;\n }\n return this.decoder.decode(this.heapU8.subarray(ptr, ptr + length));\n }\n\n setHeap(ptr: number, data: Uint8Array): void {\n this.heapU8.set(data, ptr);\n }\n\n copyHeap(ptr: number, length: number): Uint8Array {\n return this.heapU8.slice(ptr, ptr + length);\n }\n\n useTmpData<R>(\n cb: (...args: number[]) => R,\n ...args: Array<string | Uint8Array>\n ): R {\n const encoded = args.map((item) =>\n typeof item === 'string' ? this.encoder.encode(item) : item,\n );\n const totalLength = encoded.reduce(\n (acc, bytes) => acc + bytes.length + 1,\n 0,\n );\n if (totalLength > this.tmpStringBufferSize) {\n if (this.tmpStringBufferPtr) {\n this.ocgcoreModule._free(this.tmpStringBufferPtr);\n }\n this.tmpStringBufferPtr = this.ocgcoreModule._malloc(totalLength);\n this.tmpStringBufferSize = totalLength;\n }\n\n let offset = 0;\n const ptrs = encoded.map((bytes) => {\n const ptr = this.tmpStringBufferPtr + offset;\n this.heapU8.set(bytes, ptr);\n this.heapU8[ptr + bytes.length] = 0;\n offset += bytes.length + 1;\n return ptr;\n });\n\n return cb(...ptrs);\n }\n\n private createFunction(\n fn: (...args: number[]) => number | void,\n signature: string,\n ): number {\n return this.ocgcoreModule.addFunction(fn, signature);\n }\n\n addFunction(\n fn: (...args: number[]) => number | void,\n signature: string,\n ): number {\n return this.ocgcoreModule.addFunction(fn, signature);\n }\n\n removeFunction(index: number): void {\n this.ocgcoreModule.removeFunction(index);\n }\n\n createDuel(seed: number): OcgcoreDuel {\n const duelPtr = this.ocgcoreModule._create_duel(seed);\n return this.getOrCreateDuel(duelPtr);\n }\n\n createDuelV2(seedSequence: number[]): OcgcoreDuel {\n const count = seedSequence.length;\n const byteLength = count * 4;\n const ptr = this.ocgcoreModule._malloc(byteLength);\n const view = new Uint32Array(this.heapU8.buffer, ptr, count);\n for (let i = 0; i < count; i++) {\n view[i] = seedSequence[i] >>> 0;\n }\n const duelPtr = this.ocgcoreModule._create_duel_v2(ptr);\n this.ocgcoreModule._free(ptr);\n return this.getOrCreateDuel(duelPtr);\n }\n\n _defaultScriptReader(namePtr: number, dataPtr: number): number {\n return this.ocgcoreModule._default_script_reader(namePtr, dataPtr);\n }\n\n malloc(size: number): number {\n return this.ocgcoreModule._malloc(size);\n }\n\n free(ptr: number): void {\n this.ocgcoreModule._free(ptr);\n }\n\n _stdioExit(): void {\n this.ocgcoreModule.___stdio_exit();\n }\n\n setScriptReader(reader: ScriptReader, reset = false): this {\n if (reset) {\n this.scriptReaders = [];\n }\n this.scriptReaders.push(reader);\n return this;\n }\n\n setCardReader(reader: CardReader, reset = false): this {\n if (reset) {\n this.cardReaders = [];\n }\n this.cardReaders.push(reader);\n return this;\n }\n\n setMessageHandler(handler: MessageHandler, reset = false): this {\n if (reset) {\n this.messageHandlers = [];\n }\n this.messageHandlers.push(handler);\n return this;\n }\n\n getOrCreateDuel(duelPtr: number): OcgcoreDuel {\n const existing = this.duels.get(duelPtr);\n if (existing) {\n return existing;\n }\n const duel = new OcgcoreDuel(this, duelPtr);\n this.duels.set(duelPtr, duel);\n return duel;\n }\n\n forgetDuel(duelPtr: number): void {\n this.duels.delete(duelPtr);\n }\n\n finalize(): void {\n if (this.scriptReaderFunc) {\n this.ocgcoreModule.removeFunction(this.scriptReaderFunc);\n this.scriptReaderFunc = 0;\n }\n if (this.cardReaderFunc) {\n this.ocgcoreModule.removeFunction(this.cardReaderFunc);\n this.cardReaderFunc = 0;\n }\n if (this.messageHandlerFunc) {\n this.ocgcoreModule.removeFunction(this.messageHandlerFunc);\n this.messageHandlerFunc = 0;\n }\n\n if (this.scriptBufferPtr) {\n this.ocgcoreModule._free(this.scriptBufferPtr);\n this.scriptBufferPtr = 0;\n this.scriptBufferSize = 0;\n }\n if (this.logBufferPtr) {\n this.ocgcoreModule._free(this.logBufferPtr);\n this.logBufferPtr = 0;\n this.logBufferSize = 0;\n }\n if (this.tmpStringBufferPtr) {\n this.ocgcoreModule._free(this.tmpStringBufferPtr);\n this.tmpStringBufferPtr = 0;\n this.tmpStringBufferSize = 0;\n }\n }\n}\n", "import type { OcgcoreFactory } from './vendor/libocgcore.shared';\nimport createOcgcore from './vendor/wasm_esm/libocgcore.mjs';\nimport { normalizeOcgcoreFactory } from './ocgcore-wrapper-utils';\n\nexport async function loadOcgcoreFactory(): Promise<OcgcoreFactory> {\n return normalizeOcgcoreFactory(createOcgcore as unknown);\n}\n", "import type { OcgcoreFactory } from './vendor/libocgcore.shared';\n\ntype OcgcoreFactoryModule = { default?: OcgcoreFactory } | OcgcoreFactory;\n\nexport function normalizeOcgcoreFactory(mod: unknown): OcgcoreFactory {\n const typed = mod as OcgcoreFactoryModule;\n if (typeof typed === 'function') {\n return typed as OcgcoreFactory;\n }\n if (typed && typeof (typed as { default?: unknown }).default === 'function') {\n return (typed as { default: OcgcoreFactory }).default;\n }\n throw new Error('Invalid ocgcore factory module');\n}\n", "import type { OcgcoreModule } from './vendor/libocgcore.shared';\nimport { OcgcoreWrapper } from './ocgcore-wrapper';\nimport { loadOcgcoreFactory } from './load-ocgcore-factory';\n\nexport interface CreateOcgcoreWrapperOptions {\n moduleOverrides?: Partial<OcgcoreModule>;\n wasmBinary?: Uint8Array;\n locateFile?: (path: string, prefix?: string) => string;\n}\n\nexport async function createOcgcoreWrapper(\n options: CreateOcgcoreWrapperOptions = {},\n): Promise<OcgcoreWrapper> {\n const factory = await loadOcgcoreFactory();\n const overrides: Partial<OcgcoreModule> = {\n ...options.moduleOverrides,\n };\n if (options.wasmBinary) {\n overrides.wasmBinary =\n options.wasmBinary as unknown as OcgcoreModule['wasmBinary'];\n }\n if (options.locateFile) {\n overrides.locateFile =\n options.locateFile as unknown as OcgcoreModule['locateFile'];\n }\n const moduleInstance = await factory(overrides);\n return new OcgcoreWrapper(moduleInstance);\n}\n", "// Generated from /home/nanahira/ygo/ygopro/script/constant.lua\nexport const OcgcoreScriptConstants = {\n ACTIVITY_ATTACK: 5,\n ACTIVITY_BATTLE_PHASE: 6,\n ACTIVITY_CHAIN: 7,\n ACTIVITY_FLIPSUMMON: 4,\n ACTIVITY_NORMALSUMMON: 2,\n ACTIVITY_SPSUMMON: 3,\n ACTIVITY_SUMMON: 1,\n ASSUME_ATTACK: 7,\n ASSUME_ATTRIBUTE: 5,\n ASSUME_CODE: 1,\n ASSUME_DEFENSE: 8,\n ASSUME_LEVEL: 3,\n ASSUME_RACE: 6,\n ASSUME_RANK: 4,\n ASSUME_TYPE: 2,\n ATTRIBUTE_ALL: 127,\n ATTRIBUTE_DARK: 32,\n ATTRIBUTE_DIVINE: 64,\n ATTRIBUTE_EARTH: 1,\n ATTRIBUTE_FIRE: 4,\n ATTRIBUTE_LIGHT: 16,\n ATTRIBUTE_WATER: 2,\n ATTRIBUTE_WIND: 8,\n CARD_MARINE_DOLPHIN: 78734254,\n CARD_QUESTION: 38723936,\n CARD_TWINKLE_MOSS: 13857930,\n CATEGORY_ANNOUNCE: 536870912,\n CATEGORY_ATKCHANGE: 2097152,\n CATEGORY_COIN: 16777216,\n CATEGORY_CONTROL: 8192,\n CATEGORY_COUNTER: 8388608,\n CATEGORY_DAMAGE: 524288,\n CATEGORY_DECKDES: 64,\n CATEGORY_DEFCHANGE: 4194304,\n CATEGORY_DESTROY: 1,\n CATEGORY_DICE: 33554432,\n CATEGORY_DISABLE: 16384,\n CATEGORY_DISABLE_SUMMON: 32768,\n CATEGORY_DRAW: 65536,\n CATEGORY_EQUIP: 262144,\n CATEGORY_FUSION_SUMMON: 1073741824,\n CATEGORY_GRAVE_ACTION: 2048,\n CATEGORY_GRAVE_SPSUMMON: 134217728,\n CATEGORY_HANDES: 128,\n CATEGORY_LEAVE_GRAVE: 67108864,\n CATEGORY_NEGATE: 268435456,\n CATEGORY_POSITION: 4096,\n CATEGORY_RECOVER: 1048576,\n CATEGORY_RELEASE: 2,\n CATEGORY_REMOVE: 4,\n CATEGORY_SEARCH: 131072,\n CATEGORY_SPECIAL_SUMMON: 512,\n CATEGORY_SUMMON: 256,\n CATEGORY_TODECK: 16,\n CATEGORY_TOEXTRA: 2147483648,\n CATEGORY_TOGRAVE: 32,\n CATEGORY_TOHAND: 8,\n CATEGORY_TOKEN: 1024,\n CHAININFO_CHAIN_COUNT: 1,\n CHAININFO_CHAIN_ID: 2048,\n CHAININFO_DISABLE_PLAYER: 1024,\n CHAININFO_DISABLE_REASON: 512,\n CHAININFO_EXTTYPE: 8192,\n CHAININFO_TARGET_CARDS: 64,\n CHAININFO_TARGET_PARAM: 256,\n CHAININFO_TARGET_PLAYER: 128,\n CHAININFO_TRIGGERING_ATTACK: 4194304,\n CHAININFO_TRIGGERING_ATTRIBUTE: 1048576,\n CHAININFO_TRIGGERING_CODE: 32768,\n CHAININFO_TRIGGERING_CODE2: 65536,\n CHAININFO_TRIGGERING_CONTROLER: 8,\n CHAININFO_TRIGGERING_DEFENSE: 8388608,\n CHAININFO_TRIGGERING_EFFECT: 2,\n CHAININFO_TRIGGERING_LEVEL: 262144,\n CHAININFO_TRIGGERING_LOCATION: 16,\n CHAININFO_TRIGGERING_PLAYER: 4,\n CHAININFO_TRIGGERING_POSITION: 16384,\n CHAININFO_TRIGGERING_RACE: 2097152,\n CHAININFO_TRIGGERING_RANK: 524288,\n CHAININFO_TRIGGERING_SEQUENCE: 32,\n CHAININFO_TYPE: 4096,\n CHINT_ATTRIBUTE: 4,\n CHINT_CARD: 2,\n CHINT_DESC: 6,\n CHINT_NUMBER: 5,\n CHINT_RACE: 3,\n CHINT_TURN: 1,\n COUNTER_NEED_ENABLE: 8192,\n COUNTER_WITHOUT_PERMIT: 4096,\n DUEL_ATTACK_FIRST_TURN: 2,\n DUEL_OBSOLETE_RULING: 8,\n DUEL_OLD_REPLAY: 4,\n DUEL_PSEUDO_SHUFFLE: 16,\n DUEL_RETURN_DECK_TOP: 128,\n DUEL_REVEAL_DECK_SEQ: 256,\n DUEL_SIMPLE_AI: 64,\n DUEL_TAG_MODE: 32,\n DUEL_TEST_MODE: 1,\n EFFECT_ACTIVATE_COST: 90,\n EFFECT_ACTIVATION_COUNT_LIMIT: 367,\n EFFECT_ADD_ATTRIBUTE: 125,\n EFFECT_ADD_CODE: 113,\n EFFECT_ADD_EXTRA_TRIBUTE: 157,\n EFFECT_ADD_FUSION_ATTRIBUTE: 349,\n EFFECT_ADD_FUSION_CODE: 340,\n EFFECT_ADD_FUSION_SETCODE: 341,\n EFFECT_ADD_LINK_ATTRIBUTE: 356,\n EFFECT_ADD_LINK_CODE: 354,\n EFFECT_ADD_LINK_RACE: 357,\n EFFECT_ADD_LINK_SETCODE: 355,\n EFFECT_ADD_RACE: 120,\n EFFECT_ADD_SETCODE: 334,\n EFFECT_ADD_TYPE: 115,\n EFFECT_ALSO_BATTLE_DAMAGE: 207,\n EFFECT_ATTACK_ALL: 193,\n EFFECT_ATTACK_COST: 96,\n EFFECT_ATTACK_DISABLED: 197,\n EFFECT_AVOID_BATTLE_DAMAGE: 201,\n EFFECT_BATTLE_DAMAGE_TO_EFFECT: 205,\n EFFECT_BATTLE_DESTROY_REDIRECT: 204,\n EFFECT_BOTH_BATTLE_DAMAGE: 206,\n EFFECT_BP_TWICE: 296,\n EFFECT_CANNOT_ACTIVATE: 6,\n EFFECT_CANNOT_ATTACK: 85,\n EFFECT_CANNOT_ATTACK_ANNOUNCE: 86,\n EFFECT_CANNOT_BE_BATTLE_TARGET: 70,\n EFFECT_CANNOT_BE_EFFECT_TARGET: 71,\n EFFECT_CANNOT_BP: 185,\n EFFECT_CANNOT_CHANGE_CONTROL: 5,\n EFFECT_CANNOT_CHANGE_POSITION: 14,\n EFFECT_CANNOT_CHANGE_POS_E: 87,\n EFFECT_CANNOT_DIRECT_ATTACK: 73,\n EFFECT_CANNOT_DISABLE: 3,\n EFFECT_CANNOT_DISABLE_FLIP_SUMMON: 39,\n EFFECT_CANNOT_DISABLE_SPSUMMON: 27,\n EFFECT_CANNOT_DISABLE_SUMMON: 26,\n EFFECT_CANNOT_DISCARD_DECK: 56,\n EFFECT_CANNOT_DISCARD_HAND: 55,\n EFFECT_CANNOT_DISEFFECT: 13,\n EFFECT_CANNOT_DRAW: 25,\n EFFECT_CANNOT_EP: 187,\n EFFECT_CANNOT_FLIP_SUMMON: 21,\n EFFECT_CANNOT_INACTIVATE: 12,\n EFFECT_CANNOT_M2: 186,\n EFFECT_CANNOT_MSET: 23,\n EFFECT_CANNOT_PLACE_COUNTER: 58,\n EFFECT_CANNOT_RELEASE: 46,\n EFFECT_CANNOT_REMOVE: 67,\n EFFECT_CANNOT_SELECT_BATTLE_TARGET: 332,\n EFFECT_CANNOT_SELECT_EFFECT_TARGET: 333,\n EFFECT_CANNOT_SPECIAL_SUMMON: 22,\n EFFECT_CANNOT_SSET: 24,\n EFFECT_CANNOT_SUMMON: 20,\n EFFECT_CANNOT_TO_DECK: 66,\n EFFECT_CANNOT_TO_GRAVE: 68,\n EFFECT_CANNOT_TO_GRAVE_AS_COST: 59,\n EFFECT_CANNOT_TO_HAND: 65,\n EFFECT_CANNOT_TRIGGER: 7,\n EFFECT_CANNOT_TURN_SET: 69,\n EFFECT_CANNOT_USE_AS_COST: 57,\n EFFECT_CHAIN_MATERIAL: 231,\n EFFECT_CHANGE_ATTRIBUTE: 127,\n EFFECT_CHANGE_BATTLE_DAMAGE: 208,\n EFFECT_CHANGE_CODE: 114,\n EFFECT_CHANGE_DAMAGE: 82,\n EFFECT_CHANGE_ENVIRONMENT: 290,\n EFFECT_CHANGE_FUSION_ATTRIBUTE: 351,\n EFFECT_CHANGE_GRAVE_ATTRIBUTE: 365,\n EFFECT_CHANGE_GRAVE_RACE: 366,\n EFFECT_CHANGE_INVOLVING_BATTLE_DAMAGE: 314,\n EFFECT_CHANGE_LEVEL: 131,\n EFFECT_CHANGE_LSCALE: 135,\n EFFECT_CHANGE_RACE: 122,\n EFFECT_CHANGE_RANK: 133,\n EFFECT_CHANGE_RANK_FINAL: 315,\n EFFECT_CHANGE_RSCALE: 137,\n EFFECT_CHANGE_TYPE: 117,\n EFFECT_COUNT_CODE_CHAIN: 1073741824,\n EFFECT_COUNT_CODE_DUEL: 536870912,\n EFFECT_COUNT_CODE_OATH: 268435456,\n EFFECT_COUNT_CODE_SINGLE: 1,\n EFFECT_DECREASE_TRIBUTE: 151,\n EFFECT_DECREASE_TRIBUTE_SET: 152,\n EFFECT_DEFENSE_ATTACK: 190,\n EFFECT_DESTROY_REPLACE: 50,\n EFFECT_DESTROY_SUBSTITUTE: 45,\n EFFECT_DIRECT_ATTACK: 74,\n EFFECT_DISABLE: 2,\n EFFECT_DISABLE_CHAIN: 9,\n EFFECT_DISABLE_CHAIN_FIELD: 337,\n EFFECT_DISABLE_EFFECT: 8,\n EFFECT_DISABLE_FIELD: 260,\n EFFECT_DISABLE_TRAPMONSTER: 10,\n EFFECT_DISCARD_COST_CHANGE: 338,\n EFFECT_DIVINE_LIGHT: 38,\n EFFECT_DOUBLE_TRIBUTE: 150,\n EFFECT_DOUBLE_XMATERIAL: 375,\n EFFECT_DRAW_COUNT: 271,\n EFFECT_DUAL_STATUS: 75,\n EFFECT_DUAL_SUMMONABLE: 77,\n EFFECT_EQUIP_LIMIT: 76,\n EFFECT_EXTRA_ATTACK: 194,\n EFFECT_EXTRA_ATTACK_MONSTER: 346,\n EFFECT_EXTRA_FUSION_MATERIAL: 352,\n EFFECT_EXTRA_LINK_MATERIAL: 358,\n EFFECT_EXTRA_PENDULUM_SUMMON: 360,\n EFFECT_EXTRA_RELEASE: 153,\n EFFECT_EXTRA_RELEASE_NONSUM: 158,\n EFFECT_EXTRA_RELEASE_SUM: 155,\n EFFECT_EXTRA_SET_COUNT: 35,\n EFFECT_EXTRA_SUMMON_COUNT: 29,\n EFFECT_EXTRA_SYNCHRO_MATERIAL: 232,\n EFFECT_FIRST_ATTACK: 192,\n EFFECT_FLAG2_COF: 2,\n EFFECT_FLAG2_OPTION: 8,\n EFFECT_FLAG2_REPEAT_UPDATE: 1,\n EFFECT_FLAG2_WICKED: 4,\n EFFECT_FLAG_ABSOLUTE_TARGET: 64,\n EFFECT_FLAG_ACTIVATE_CONDITION: 536870912,\n EFFECT_FLAG_BOTH_SIDE: 4096,\n EFFECT_FLAG_CANNOT_DISABLE: 1024,\n EFFECT_FLAG_CANNOT_INACTIVATE: 33554432,\n EFFECT_FLAG_CAN_FORBIDDEN: 512,\n EFFECT_FLAG_CARD_TARGET: 16,\n EFFECT_FLAG_CLIENT_HINT: 67108864,\n EFFECT_FLAG_COIN: 4294967296,\n EFFECT_FLAG_CONTINUOUS_TARGET: 134217728,\n EFFECT_FLAG_COPY: 8192,\n EFFECT_FLAG_COUNT_LIMIT: 4,\n EFFECT_FLAG_CVAL_CHECK: 1073741824,\n EFFECT_FLAG_DAMAGE_CAL: 32768,\n EFFECT_FLAG_DAMAGE_STEP: 16384,\n EFFECT_FLAG_DELAY: 65536,\n EFFECT_FLAG_DICE: 8589934592,\n EFFECT_FLAG_EFFECT: 536870912,\n EFFECT_FLAG_EVENT_PLAYER: 8388608,\n EFFECT_FLAG_FIELD_ONLY: 8,\n EFFECT_FLAG_FUNC_VALUE: 2,\n EFFECT_FLAG_FUSION_SUMMON: 17179869184,\n EFFECT_FLAG_IGNORE_IMMUNE: 128,\n EFFECT_FLAG_IGNORE_RANGE: 32,\n EFFECT_FLAG_IMMEDIATELY_APPLY: 2147483648,\n EFFECT_FLAG_INITIAL: 1,\n EFFECT_FLAG_LIMIT_ZONE: 268435456,\n EFFECT_FLAG_NO_TURN_RESET: 4194304,\n EFFECT_FLAG_OATH: 524288,\n EFFECT_FLAG_OWNER_RELATE: 16777216,\n EFFECT_FLAG_PLAYER_TARGET: 2048,\n EFFECT_FLAG_REPEAT: 2097152,\n EFFECT_FLAG_SET_AVAILABLE: 256,\n EFFECT_FLAG_SINGLE_RANGE: 131072,\n EFFECT_FLAG_SPSUM_PARAM: 1048576,\n EFFECT_FLAG_UNCOPYABLE: 262144,\n EFFECT_FLIPSUMMON_COST: 93,\n EFFECT_FORBIDDEN: 292,\n EFFECT_FUSION_MATERIAL: 230,\n EFFECT_FUSION_SUBSTITUTE: 234,\n EFFECT_HAND_LIMIT: 270,\n EFFECT_HAND_SYNCHRO: 339,\n EFFECT_IGNORE_BATTLE_TARGET: 72,\n EFFECT_IMMUNE_EFFECT: 1,\n EFFECT_INDESTRUCTABLE: 40,\n EFFECT_INDESTRUCTABLE_BATTLE: 42,\n EFFECT_INDESTRUCTABLE_COUNT: 47,\n EFFECT_INDESTRUCTABLE_EFFECT: 41,\n EFFECT_KAISER_COLOSSEUM: 370,\n EFFECT_LEAVE_FIELD_REDIRECT: 60,\n EFFECT_LEFT_SPSUMMON_COUNT: 331,\n EFFECT_LIMIT_SET_PROC: 37,\n EFFECT_LIMIT_SPECIAL_SUMMON_POSITION: 368,\n EFFECT_LIMIT_SUMMON_PROC: 33,\n EFFECT_LPCOST_CHANGE: 170,\n EFFECT_LPCOST_REPLACE: 171,\n EFFECT_MATCH_KILL: 300,\n EFFECT_MATERIAL_CHECK: 251,\n EFFECT_MATERIAL_LIMIT: 361,\n EFFECT_MAX_MZONE: 263,\n EFFECT_MAX_SZONE: 264,\n EFFECT_MONSTER_SSET: 18,\n EFFECT_MSET_COST: 94,\n EFFECT_MUST_ATTACK: 191,\n EFFECT_MUST_ATTACK_MONSTER: 344,\n EFFECT_MUST_BE_ATTACKED: 195,\n EFFECT_MUST_BE_FMATERIAL: 316,\n EFFECT_MUST_BE_LMATERIAL: 318,\n EFFECT_MUST_BE_SMATERIAL: 312,\n EFFECT_MUST_BE_XMATERIAL: 317,\n EFFECT_MUST_USE_MZONE: 265,\n EFFECT_NECRO_VALLEY: 291,\n EFFECT_NECRO_VALLEY_IM: 293,\n EFFECT_NO_BATTLE_DAMAGE: 200,\n EFFECT_NO_EFFECT_DAMAGE: 335,\n EFFECT_OLDUNION_STATUS: 348,\n EFFECT_ONLY_ATTACK_MONSTER: 343,\n EFFECT_ONLY_BE_ATTACKED: 196,\n EFFECT_OVERLAY_RITUAL_MATERIAL: 364,\n EFFECT_PATRICIAN_OF_DARKNESS: 345,\n EFFECT_PIERCE: 203,\n EFFECT_PRE_MONSTER: 250,\n EFFECT_PUBLIC: 160,\n EFFECT_QP_ACT_IN_NTPHAND: 311,\n EFFECT_QP_ACT_IN_SET_TURN: 359,\n EFFECT_REFLECT_BATTLE_DAMAGE: 202,\n EFFECT_REFLECT_DAMAGE: 83,\n EFFECT_RELEASE_REPLACE: 51,\n EFFECT_REMAIN_FIELD: 17,\n EFFECT_REMOVE_ATTRIBUTE: 126,\n EFFECT_REMOVE_BRAINWASHING: 295,\n EFFECT_REMOVE_FUSION_ATTRIBUTE: 350,\n EFFECT_REMOVE_RACE: 121,\n EFFECT_REMOVE_REDIRECT: 64,\n EFFECT_REMOVE_TYPE: 116,\n EFFECT_REPLACE_DAMAGE: 371,\n EFFECT_REVERSE_DAMAGE: 80,\n EFFECT_REVERSE_DECK: 294,\n EFFECT_REVERSE_RECOVER: 81,\n EFFECT_REVERSE_UPDATE: 108,\n EFFECT_REVIVE_LIMIT: 31,\n EFFECT_RISE_TO_FULL_HEIGHT: 342,\n EFFECT_RITUAL_LEVEL_EX: 374,\n EFFECT_SELF_DESTROY: 141,\n EFFECT_SELF_TOGRAVE: 142,\n EFFECT_SEND_REPLACE: 52,\n EFFECT_SET_ATTACK: 101,\n EFFECT_SET_ATTACK_FINAL: 102,\n EFFECT_SET_BASE_ATTACK: 103,\n EFFECT_SET_BASE_ATTACK_FINAL: 111,\n EFFECT_SET_BASE_DEFENSE: 107,\n EFFECT_SET_BASE_DEFENSE_FINAL: 112,\n EFFECT_SET_BATTLE_ATTACK: 362,\n EFFECT_SET_BATTLE_DEFENSE: 363,\n EFFECT_SET_CONTROL: 4,\n EFFECT_SET_DEFENSE: 105,\n EFFECT_SET_DEFENSE_FINAL: 106,\n EFFECT_SET_POSITION: 140,\n EFFECT_SET_PROC: 36,\n EFFECT_SET_SUMMON_COUNT_LIMIT: 28,\n EFFECT_SKIP_BP: 183,\n EFFECT_SKIP_DP: 180,\n EFFECT_SKIP_M1: 182,\n EFFECT_SKIP_M2: 184,\n EFFECT_SKIP_SP: 181,\n EFFECT_SKIP_TURN: 188,\n EFFECT_SPIRIT_DONOT_RETURN: 280,\n EFFECT_SPIRIT_MAYNOT_RETURN: 281,\n EFFECT_SPSUMMON_CONDITION: 30,\n EFFECT_SPSUMMON_COST: 92,\n EFFECT_SPSUMMON_COUNT_LIMIT: 330,\n EFFECT_SPSUMMON_PROC: 34,\n EFFECT_SPSUMMON_PROC_G: 320,\n EFFECT_SSET_COST: 95,\n EFFECT_SUMMON_COST: 91,\n EFFECT_SUMMON_PROC: 32,\n EFFECT_SWAP_AD: 109,\n EFFECT_SWAP_BASE_AD: 110,\n EFFECT_SYNCHRO_CHECK: 310,\n EFFECT_SYNCHRO_LEVEL_EX: 373,\n EFFECT_TOSS_COIN_REPLACE: 220,\n EFFECT_TOSS_DICE_REPLACE: 221,\n EFFECT_TO_DECK_REDIRECT: 62,\n EFFECT_TO_GRAVE_REDIRECT: 63,\n EFFECT_TO_GRAVE_REDIRECT_CB: 313,\n EFFECT_TO_HAND_REDIRECT: 61,\n EFFECT_TRAP_ACT_IN_HAND: 15,\n EFFECT_TRAP_ACT_IN_SET_TURN: 16,\n EFFECT_TRIBUTE_LIMIT: 154,\n EFFECT_TRIPLE_TRIBUTE: 156,\n EFFECT_TUNER: 369,\n EFFECT_TUNER_MATERIAL_LIMIT: 353,\n EFFECT_TYPE_ACTIONS: 8,\n EFFECT_TYPE_ACTIVATE: 16,\n EFFECT_TYPE_CONTINUOUS: 2048,\n EFFECT_TYPE_EQUIP: 4,\n EFFECT_TYPE_FIELD: 2,\n EFFECT_TYPE_FLIP: 32,\n EFFECT_TYPE_GRANT: 8192,\n EFFECT_TYPE_IGNITION: 64,\n EFFECT_TYPE_QUICK_F: 1024,\n EFFECT_TYPE_QUICK_O: 256,\n EFFECT_TYPE_SINGLE: 1,\n EFFECT_TYPE_TARGET: 16384,\n EFFECT_TYPE_TRIGGER_F: 512,\n EFFECT_TYPE_TRIGGER_O: 128,\n EFFECT_TYPE_XMATERIAL: 4096,\n EFFECT_UNION_LIMIT: 78,\n EFFECT_UNION_STATUS: 347,\n EFFECT_UNIQUE_CHECK: 297,\n EFFECT_UNRELEASABLE_EFFECT: 48,\n EFFECT_UNRELEASABLE_NONSUM: 44,\n EFFECT_UNRELEASABLE_SUM: 43,\n EFFECT_UNSUMMONABLE_CARD: 336,\n EFFECT_UPDATE_ATTACK: 100,\n EFFECT_UPDATE_DEFENSE: 104,\n EFFECT_UPDATE_LEVEL: 130,\n EFFECT_UPDATE_LSCALE: 134,\n EFFECT_UPDATE_RANK: 132,\n EFFECT_UPDATE_RSCALE: 136,\n EFFECT_USE_EXTRA_MZONE: 261,\n EFFECT_USE_EXTRA_SZONE: 262,\n EFFECT_XYZ_MATERIAL: 233,\n EFFECT_XYZ_MIN_COUNT: 372,\n EVENT_ADD_COUNTER: 65536,\n EVENT_ADJUST: 1040,\n EVENT_ATTACK_ANNOUNCE: 1130,\n EVENT_ATTACK_DISABLED: 1142,\n EVENT_BATTLED: 1138,\n EVENT_BATTLE_CONFIRM: 1133,\n EVENT_BATTLE_DAMAGE: 1143,\n EVENT_BATTLE_DESTROYED: 1140,\n EVENT_BATTLE_DESTROYING: 1139,\n EVENT_BATTLE_END: 1137,\n EVENT_BATTLE_START: 1132,\n EVENT_BECOME_TARGET: 1028,\n EVENT_BE_BATTLE_TARGET: 1131,\n EVENT_BE_MATERIAL: 1108,\n EVENT_BE_PRE_MATERIAL: 1109,\n EVENT_BREAK_EFFECT: 1050,\n EVENT_CHAINING: 1027,\n EVENT_CHAIN_ACTIVATED: 1023,\n EVENT_CHAIN_ACTIVATING: 1021,\n EVENT_CHAIN_DISABLED: 1025,\n EVENT_CHAIN_END: 1026,\n EVENT_CHAIN_NEGATED: 1024,\n EVENT_CHAIN_SOLVED: 1022,\n EVENT_CHAIN_SOLVING: 1020,\n EVENT_CHANGE_POS: 1016,\n EVENT_CONTROL_CHANGED: 1120,\n EVENT_CUSTOM: 268435456,\n EVENT_DAMAGE: 1111,\n EVENT_DAMAGE_CALCULATING: 1135,\n EVENT_DAMAGE_STEP_END: 1141,\n EVENT_DESTROY: 1010,\n EVENT_DESTROYED: 1029,\n EVENT_DETACH_MATERIAL: 1202,\n EVENT_DISCARD: 1018,\n EVENT_DRAW: 1110,\n EVENT_EQUIP: 1121,\n EVENT_FLIP: 1001,\n EVENT_FLIP_SUMMON: 1104,\n EVENT_FLIP_SUMMON_NEGATED: 1115,\n EVENT_FLIP_SUMMON_SUCCESS: 1101,\n EVENT_FREE_CHAIN: 1002,\n EVENT_LEAVE_DECK: 1032,\n EVENT_LEAVE_FIELD: 1015,\n EVENT_LEAVE_FIELD_P: 1019,\n EVENT_LEAVE_GRAVE: 1031,\n EVENT_LEVEL_UP: 1200,\n EVENT_MOVE: 1030,\n EVENT_MSET: 1106,\n EVENT_PAY_LPCOST: 1201,\n EVENT_PHASE: 4096,\n EVENT_PHASE_START: 8192,\n EVENT_PREDRAW: 1113,\n EVENT_PRE_BATTLE_DAMAGE: 1136,\n EVENT_PRE_DAMAGE_CALCULATE: 1134,\n EVENT_RECOVER: 1112,\n EVENT_RELEASE: 1017,\n EVENT_REMOVE: 1011,\n EVENT_REMOVE_COUNTER: 131072,\n EVENT_RETURN_TO_GRAVE: 1203,\n EVENT_SPSUMMON: 1105,\n EVENT_SPSUMMON_NEGATED: 1116,\n EVENT_SPSUMMON_SUCCESS: 1102,\n EVENT_SPSUMMON_SUCCESS_G_P: 1117,\n EVENT_SSET: 1107,\n EVENT_STARTUP: 1000,\n EVENT_SUMMON: 1103,\n EVENT_SUMMON_NEGATED: 1114,\n EVENT_SUMMON_SUCCESS: 1100,\n EVENT_TOSS_COIN: 1151,\n EVENT_TOSS_COIN_NEGATE: 1152,\n EVENT_TOSS_DICE: 1150,\n EVENT_TOSS_DICE_NEGATE: 1153,\n EVENT_TO_DECK: 1013,\n EVENT_TO_GRAVE: 1014,\n EVENT_TO_HAND: 1012,\n EVENT_TURN_END: 1210,\n FLAG_ID_ALLURE_QUEEN: 4,\n FLAG_ID_ARCANA_COIN: 5,\n FLAG_ID_CHAINING: 1,\n FLAG_ID_NO_NORMAL_DRAW: 3,\n FLAG_ID_REVERSAL_OF_FATE: 36690018,\n FLAG_ID_UNION: 2,\n GLOBALFLAG_BRAINWASHING_CHECK: 2,\n GLOBALFLAG_DECK_REVERSE_CHECK: 1,\n GLOBALFLAG_DELAYED_QUICKEFFECT: 8,\n GLOBALFLAG_DETACH_EVENT: 16,\n GLOBALFLAG_MUST_BE_SMATERIAL: 32,\n GLOBALFLAG_SCRAP_CHIMERA: 4,\n GLOBALFLAG_SELF_TOGRAVE: 256,\n GLOBALFLAG_SPSUMMON_COUNT: 64,\n GLOBALFLAG_SPSUMMON_ONCE: 512,\n GLOBALFLAG_TUNE_MAGICIAN: 1024,\n GLOBALFLAG_XMAT_COUNT_LIMIT: 128,\n HINGMSG_LVRANK: 567,\n HINGMSG_NUMBER: 565,\n HINTMSG_ATOHAND: 506,\n HINTMSG_ATTACK: 516,\n HINTMSG_ATTACKTARGET: 549,\n HINTMSG_ATTRIBUTE: 562,\n HINTMSG_CARDTYPE: 554,\n HINTMSG_CODE: 564,\n HINTMSG_COIN: 552,\n HINTMSG_CONFIRM: 526,\n HINTMSG_CONTROL: 520,\n HINTMSG_COUNTER: 572,\n HINTMSG_DEATTACHFROM: 532,\n HINTMSG_DEFENSE: 517,\n HINTMSG_DESREPLACE: 521,\n HINTMSG_DESTROY: 502,\n HINTMSG_DICE: 553,\n HINTMSG_DISABLE: 573,\n HINTMSG_DISABLEZONE: 570,\n HINTMSG_DISCARD: 501,\n HINTMSG_EFFECT: 550,\n HINTMSG_EQUIP: 518,\n HINTMSG_FACEDOWN: 515,\n HINTMSG_FACEDOWNATTACK: 524,\n HINTMSG_FACEDOWNDEFENSE: 525,\n HINTMSG_FACEUP: 514,\n HINTMSG_FACEUPATTACK: 522,\n HINTMSG_FACEUPDEFENSE: 523,\n HINTMSG_FIELD_FIRST: 575,\n HINTMSG_FMATERIAL: 511,\n HINTMSG_LMATERIAL: 533,\n HINTMSG_OPERATECARD: 574,\n HINTMSG_OPPO: 530,\n HINTMSG_OPTION: 555,\n HINTMSG_POSCHANGE: 528,\n HINTMSG_POSITION: 561,\n HINTMSG_RACE: 563,\n HINTMSG_RELEASE: 500,\n HINTMSG_REMOVE: 503,\n HINTMSG_REMOVEXYZ: 519,\n HINTMSG_RESOLVECARD: 568,\n HINTMSG_RESOLVEEFFECT: 556,\n HINTMSG_RTOHAND: 505,\n HINTMSG_SELECT: 560,\n HINTMSG_SELF: 529,\n HINTMSG_SET: 510,\n HINTMSG_SMATERIAL: 512,\n HINTMSG_SPSUMMON: 509,\n HINTMSG_SUMMON: 508,\n HINTMSG_TARGET: 551,\n HINTMSG_TODECK: 507,\n HINTMSG_TOFIELD: 527,\n HINTMSG_TOGRAVE: 504,\n HINTMSG_TOZONE: 571,\n HINTMSG_TRIBUTE: 531,\n HINTMSG_XMATERIAL: 513,\n HINTMSG_ZONE: 569,\n HINT_ATTRIB: 7,\n HINT_CARD: 10,\n HINT_CODE: 8,\n HINT_EFFECT: 5,\n HINT_EVENT: 1,\n HINT_MESSAGE: 2,\n HINT_NUMBER: 9,\n HINT_OPSELECTED: 4,\n HINT_RACE: 6,\n HINT_SELECTMSG: 3,\n HINT_ZONE: 11,\n LINK_MARKER_BOTTOM: 2,\n LINK_MARKER_BOTTOM_LEFT: 1,\n LINK_MARKER_BOTTOM_RIGHT: 4,\n LINK_MARKER_LEFT: 8,\n LINK_MARKER_RIGHT: 32,\n LINK_MARKER_TOP: 128,\n LINK_MARKER_TOP_LEFT: 64,\n LINK_MARKER_TOP_RIGHT: 256,\n LOCATION_DECK: 1,\n LOCATION_DECKBOT: 65537,\n LOCATION_DECKSHF: 131073,\n LOCATION_EXTRA: 64,\n LOCATION_FZONE: 256,\n LOCATION_GRAVE: 16,\n LOCATION_HAND: 2,\n LOCATION_MZONE: 4,\n LOCATION_ONFIELD: 12,\n LOCATION_OVERLAY: 128,\n LOCATION_PZONE: 512,\n LOCATION_REASON_CONTROL: 2,\n LOCATION_REASON_TOFIELD: 1,\n LOCATION_REMOVED: 32,\n LOCATION_SZONE: 8,\n MASTER_RULE3: 3,\n MASTER_RULE_2020: 5,\n MAX_COUNTER: 65535,\n MAX_ID: 268435455,\n MAX_PARAMETER: 65535,\n MAX_XYZ_LEVEL: 4095,\n MIN_ID: 128,\n NEW_MASTER_RULE: 4,\n OPCODE_ADD: 1073741824,\n OPCODE_AND: 1073741828,\n OPCODE_DIV: 1073741827,\n OPCODE_ISATTRIBUTE: 1073742084,\n OPCODE_ISCODE: 1073742080,\n OPCODE_ISRACE: 1073742083,\n OPCODE_ISSETCARD: 1073742081,\n OPCODE_ISTYPE: 1073742082,\n OPCODE_MUL: 1073741826,\n OPCODE_NEG: 1073741830,\n OPCODE_NOT: 1073741831,\n OPCODE_OR: 1073741829,\n OPCODE_SUB: 1073741825,\n PHASE_BATTLE: 128,\n PHASE_BATTLE_START: 8,\n PHASE_BATTLE_STEP: 16,\n PHASE_DAMAGE: 32,\n PHASE_DAMAGE_CAL: 64,\n PHASE_DRAW: 1,\n PHASE_END: 512,\n PHASE_MAIN1: 4,\n PHASE_MAIN2: 256,\n PHASE_STANDBY: 2,\n PLAYER_ALL: 3,\n PLAYER_NONE: 2,\n POS_ATTACK: 3,\n POS_DEFENSE: 12,\n POS_FACEDOWN: 10,\n POS_FACEDOWN_ATTACK: 2,\n POS_FACEDOWN_DEFENSE: 8,\n POS_FACEUP: 5,\n POS_FACEUP_ATTACK: 1,\n POS_FACEUP_DEFENSE: 4,\n RACE_ALL: 67108863,\n RACE_AQUA: 64,\n RACE_BEAST: 16384,\n RACE_BEASTWARRIOR: 32768,\n RACE_CREATORGOD: 4194304,\n RACE_CYBERSE: 16777216,\n RACE_DINOSAUR: 65536,\n RACE_DIVINE: 2097152,\n RACE_DRAGON: 8192,\n RACE_FAIRY: 4,\n RACE_FIEND: 8,\n RACE_FISH: 131072,\n RACE_ILLUSION: 33554432,\n RACE_INSECT: 2048,\n RACE_MACHINE: 32,\n RACE_PLANT: 1024,\n RACE_PSYCHO: 1048576,\n RACE_PYRO: 128,\n RACE_REPTILE: 524288,\n RACE_ROCK: 256,\n RACE_SEASERPENT: 262144,\n RACE_SPELLCASTER: 2,\n RACE_THUNDER: 4096,\n RACE_WARRIOR: 1,\n RACE_WINDBEAST: 512,\n RACE_WYRM: 8388608,\n RACE_ZOMBIE: 16,\n REASON_ACTION: 2147483648,\n REASON_ADJUST: 256,\n REASON_BATTLE: 32,\n REASON_COST: 128,\n REASON_DESTROY: 1,\n REASON_DISCARD: 16384,\n REASON_DISSUMMON: 4096,\n REASON_DRAW: 33554432,\n REASON_EFFECT: 64,\n REASON_FLIP: 8192,\n REASON_FUSION: 262144,\n REASON_LINK: 268435456,\n REASON_LOST_OVERLAY: 536870912,\n REASON_LOST_TARGET: 512,\n REASON_MAINTENANCE: 1073741824,\n REASON_MATERIAL: 8,\n REASON_RDAMAGE: 32768,\n REASON_REDIRECT: 67108864,\n REASON_RELEASE: 2,\n REASON_REPLACE: 16777216,\n REASON_RETURN: 131072,\n REASON_REVEAL: 134217728,\n REASON_RITUAL: 1048576,\n REASON_RRECOVER: 65536,\n REASON_RULE: 1024,\n REASON_SPSUMMON: 2048,\n REASON_SUMMON: 16,\n REASON_SYNCHRO: 524288,\n REASON_TEMPORARY: 4,\n REASON_XYZ: 2097152,\n RESETS_REDIRECT: 209584128,\n RESETS_STANDARD: 33423360,\n RESETS_WITHOUT_TEMP_REMOVE: 91095040,\n RESET_CARD: 8192,\n RESET_CHAIN: 2147483648,\n RESET_CODE: 16384,\n RESET_CONTROL: 33554432,\n RESET_COPY: 32768,\n RESET_DISABLE: 65536,\n RESET_EVENT: 4096,\n RESET_LEAVE: 8388608,\n RESET_MSCHANGE: 134217728,\n RESET_OPPO_TURN: 536870912,\n RESET_OVERLAY: 67108864,\n RESET_PHASE: 1073741824,\n RESET_REMOVE: 524288,\n RESET_SELF_TURN: 268435456,\n RESET_TEMP_REMOVE: 1048576,\n RESET_TODECK: 4194304,\n RESET_TOFIELD: 16777216,\n RESET_TOGRAVE: 262144,\n RESET_TOHAND: 2097152,\n RESET_TURN_SET: 131072,\n SELECT_HEADS: 60,\n SELECT_TAILS: 61,\n SEQ_DECKBOTTOM: 1,\n SEQ_DECKSHUFFLE: 2,\n SEQ_DECKTOP: 0,\n STATUS_ACTIVATE_DISABLED: 262144,\n STATUS_ACT_FROM_HAND: 134217728,\n STATUS_ATTACK_CANCELED: 2097152,\n STATUS_BATTLE_DESTROYED: 16384,\n STATUS_BATTLE_RESULT: 64,\n STATUS_CANNOT_CHANGE_FORM: 256,\n STATUS_CHAINING: 65536,\n STATUS_CONTINUOUS_POS: 33554432,\n STATUS_COPYING_EFFECT: 32768,\n STATUS_DESTROY_CONFIRMED: 4096,\n STATUS_DISABLED: 1,\n STATUS_EFFECT_ENABLED: 1024,\n STATUS_EFFECT_REPLACED: 524288,\n STATUS_FLIP_SUMMONING: 1048576,\n STATUS_FLIP_SUMMON_DISABLED: 2147483648,\n STATUS_FLIP_SUMMON_TURN: 536870912,\n STATUS_FORBIDDEN: 67108864,\n STATUS_INITIALIZING: 4194304,\n STATUS_JUST_POS: 16777216,\n STATUS_LEAVE_CONFIRMED: 8192,\n STATUS_NO_LEVEL: 32,\n STATUS_OPPO_BATTLE: 268435456,\n STATUS_PROC_COMPLETE: 8,\n STATUS_SET_TURN: 16,\n STATUS_SPSUMMON_STEP: 128,\n STATUS_SPSUMMON_TURN: 1073741824,\n STATUS_SUMMONING: 512,\n STATUS_SUMMON_DISABLED: 131072,\n STATUS_SUMMON_TURN: 2048,\n STATUS_TO_DISABLE: 4,\n STATUS_TO_ENABLE: 2,\n STATUS_TO_HAND_WITHOUT_CONFIRM: 8388608,\n SUMMON_INFO_ATTACK: 128,\n SUMMON_INFO_ATTRIBUTE: 32,\n SUMMON_INFO_CODE: 1,\n SUMMON_INFO_CODE2: 2,\n SUMMON_INFO_DEFENSE: 256,\n SUMMON_INFO_LEVEL: 8,\n SUMMON_INFO_RACE: 64,\n SUMMON_INFO_RANK: 16,\n SUMMON_INFO_REASON_EFFECT: 512,\n SUMMON_INFO_REASON_PLAYER: 1024,\n SUMMON_INFO_TYPE: 4,\n SUMMON_TYPE_ADVANCE: 285212672,\n SUMMON_TYPE_DUAL: 301989888,\n SUMMON_TYPE_FLIP: 536870912,\n SUMMON_TYPE_FUSION: 1124073472,\n SUMMON_TYPE_LINK: 1275068416,\n SUMMON_TYPE_NORMAL: 268435456,\n SUMMON_TYPE_PENDULUM: 1241513984,\n SUMMON_TYPE_RITUAL: 1157627904,\n SUMMON_TYPE_SPECIAL: 1073741824,\n SUMMON_TYPE_SYNCHRO: 1174405120,\n SUMMON_TYPE_XYZ: 1224736768,\n SUMMON_VALUE_ASSAULT_MODE: 21,\n SUMMON_VALUE_DARK_FUSION: 1124073494,\n SUMMON_VALUE_DARK_SANCTUARY: 18,\n SUMMON_VALUE_EVOLTILE: 16384,\n SUMMON_VALUE_FOSSIL_FUSION: 1124073495,\n SUMMON_VALUE_FUTURE_FUSION: 1124073496,\n SUMMON_VALUE_GLADIATOR: 8192,\n SUMMON_VALUE_LV: 4096,\n SUMMON_VALUE_MASK_CHANGE: 20,\n SUMMON_VALUE_MONSTER_REBORN: 19,\n SUMMON_VALUE_SELF: 1,\n SUMMON_VALUE_SYNCHRO_MATERIAL: 17,\n TIMINGS_CHECK_MONSTER: 448,\n TIMING_ATTACK: 4096,\n TIMING_BATTLED: 134217728,\n TIMING_BATTLE_END: 16,\n TIMING_BATTLE_PHASE: 16777216,\n TIMING_BATTLE_START: 8,\n TIMING_BATTLE_STEP_END: 67108864,\n TIMING_CHAIN_END: 32768,\n TIMING_DAMAGE: 131072,\n TIMING_DAMAGE_CAL: 16384,\n TIMING_DAMAGE_STEP: 8192,\n TIMING_DESTROY: 524288,\n TIMING_DRAW: 65536,\n TIMING_DRAW_PHASE: 1,\n TIMING_END_PHASE: 32,\n TIMING_EQUIP: 33554432,\n TIMING_FLIPSUMMON: 256,\n TIMING_MAIN_END: 4,\n TIMING_MSET: 512,\n TIMING_POS_CHANGE: 2048,\n TIMING_RECOVER: 262144,\n TIMING_REMOVE: 1048576,\n TIMING_SPSUMMON: 128,\n TIMING_SSET: 1024,\n TIMING_STANDBY_PHASE: 2,\n TIMING_SUMMON: 64,\n TIMING_TODECK: 4194304,\n TIMING_TOGRAVE: 8388608,\n TIMING_TOHAND: 2097152,\n TYPES_EFFECT_TRAP_MONSTER: 289,\n TYPES_NORMAL_TRAP_MONSTER: 273,\n TYPES_TOKEN_MONSTER: 16401,\n TYPE_CONTINUOUS: 131072,\n TYPE_COUNTER: 1048576,\n TYPE_DUAL: 2048,\n TYPE_EFFECT: 32,\n TYPE_EQUIP: 262144,\n TYPE_FIELD: 524288,\n TYPE_FLIP: 2097152,\n TYPE_FUSION: 64,\n TYPE_LINK: 67108864,\n TYPE_MONSTER: 1,\n TYPE_NORMAL: 16,\n TYPE_PENDULUM: 16777216,\n TYPE_QUICKPLAY: 65536,\n TYPE_RITUAL: 128,\n TYPE_SPELL: 2,\n TYPE_SPIRIT: 512,\n TYPE_SPSUMMON: 33554432,\n TYPE_SYNCHRO: 8192,\n TYPE_TOKEN: 16384,\n TYPE_TOON: 4194304,\n TYPE_TRAP: 4,\n TYPE_TRAPMONSTER: 256,\n TYPE_TUNER: 4096,\n TYPE_UNION: 1024,\n TYPE_XYZ: 8388608,\n} as const;\n", "import JSZip from 'jszip';\n\nimport { ScriptReader } from '../types/callback';\nimport { getNodeFs } from '../utility/node-fs';\nimport { getNodePath } from '../utility/node-path';\n\nconst SCRIPT_PREFIX = './script/';\n\nfunction normalizePath(input: string): string {\n let path = input.replace(/\\\\/g, '/');\n if (path.startsWith(SCRIPT_PREFIX)) {\n path = path.slice(SCRIPT_PREFIX.length);\n }\n return path;\n}\n\nfunction buildCandidates(filename: string): string[] {\n const entries = [\n filename,\n `specials/${filename}`,\n `expansions/script/${filename}`,\n `script/${filename}`,\n ];\n const candidates: string[] = [];\n for (const entry of entries) {\n candidates.push(entry);\n if (!entry.startsWith('./')) {\n const dotEntry = entry.startsWith('/')\n ? `./${entry.slice(1)}`\n : `./${entry}`;\n candidates.push(dotEntry);\n }\n }\n return candidates;\n}\n\nfunction joinPath(baseDir: string, relativePath: string): string {\n const pathMod = getNodePath();\n if (pathMod) {\n return pathMod.join(baseDir, relativePath);\n }\n const trimmedBase = baseDir.replace(/[/\\\\]+$/, '');\n const trimmedRel = relativePath.replace(/^[/\\\\]+/, '');\n return `${trimmedBase}/${trimmedRel}`;\n}\n\nexport function MapScriptReader(\n ...maps: Array<Map<string, string | Uint8Array>>\n): ScriptReader {\n return (path) => {\n const filename = normalizePath(path);\n if (!filename.toLowerCase().endsWith('.lua')) {\n return null;\n }\n const candidates = buildCandidates(filename);\n for (const candidate of candidates) {\n for (const map of maps) {\n if (map.has(candidate)) {\n return map.get(candidate) ?? null;\n }\n }\n }\n return null;\n };\n}\n\nexport function DirScriptReader(...baseDirs: string[]): ScriptReader {\n const fs = getNodeFs();\n return (path) => {\n const filename = normalizePath(path);\n if (!filename.toLowerCase().endsWith('.lua')) {\n return null;\n }\n const candidates = buildCandidates(filename);\n for (const baseDir of baseDirs) {\n for (const candidate of candidates) {\n const normalized = candidate.startsWith('/')\n ? candidate.slice(1)\n : candidate;\n const fullPath = joinPath(baseDir, normalized);\n if (fs.existsSync(fullPath)) {\n return fs.readFileSync(fullPath);\n }\n }\n }\n return null;\n };\n}\n\nfunction normalizeZipEntryName(name: string): string[] {\n const normalized = name.replace(/\\\\/g, '/').replace(/^\\.?\\//, '');\n const names = new Set<string>();\n names.add(normalized);\n if (normalized.startsWith('script/')) {\n names.add(normalized.slice('script/'.length));\n }\n return Array.from(names);\n}\n\nexport async function ZipScriptReader(\n ...inputs: Array<Uint8Array | ArrayBuffer | Blob>\n): Promise<ScriptReader> {\n const maps = await Promise.all(\n inputs.map(async (data) => {\n const zip = await JSZip.loadAsync(data);\n const map = new Map<string, string | Uint8Array>();\n const entries = Object.values(zip.files);\n await Promise.all(\n entries.map(async (entry) => {\n if (entry.dir) {\n return;\n }\n if (!entry.name.toLowerCase().endsWith('.lua')) {\n return;\n }\n const content = await entry.async('uint8array');\n for (const name of normalizeZipEntryName(entry.name)) {\n map.set(name, content);\n }\n }),\n );\n return map;\n }),\n );\n return MapScriptReader(...maps);\n}\n\n/** @deprecated Use MapScriptReader instead. */\nexport function MapReader(\n ...maps: Array<Map<string, string | Uint8Array>>\n): ScriptReader {\n return MapScriptReader(...maps);\n}\n\n/** @deprecated Use DirScriptReader instead. */\nexport function DirReader(...baseDirs: string[]): ScriptReader {\n return DirScriptReader(...baseDirs);\n}\n\n/** @deprecated Use ZipScriptReader instead. */\nexport async function ZipReader(\n ...inputs: Array<Uint8Array | ArrayBuffer | Blob>\n): Promise<ScriptReader> {\n return ZipScriptReader(...inputs);\n}\n", "export function loadNodeModule<T>(id: string, altId?: string): T | null {\n const req =\n typeof module.require !== 'undefined' ? module.require : undefined;\n if (!req) {\n return null;\n }\n try {\n return req(id) as T;\n } catch {\n if (!altId) return null;\n try {\n return req(altId) as T;\n } catch {\n return null;\n }\n }\n}\n", "type NodeStats = {\n isFile: () => boolean;\n};\n\ntype NodeFsPromises = {\n readFile: (path: string) => Promise<Uint8Array>;\n readdir: (path: string) => Promise<string[]>;\n stat: (path: string) => Promise<NodeStats>;\n access: (path: string) => Promise<void>;\n};\n\nexport type NodeFs = {\n existsSync: (path: string) => boolean;\n readFileSync: (path: string) => Uint8Array;\n promises: NodeFsPromises;\n};\n\nimport { loadNodeModule } from './load-node-module';\n\nexport function getNodeFs(noThrow = false): NodeFs | null {\n const mod = loadNodeModule<NodeFs>('node:fs', 'fs');\n if (mod) return mod;\n if (noThrow) return null;\n throw new Error('Node.js fs module is not available.');\n}\n", "export type NodePath = {\n join: (...parts: string[]) => string;\n};\n\nimport { loadNodeModule } from './load-node-module';\n\nexport function getNodePath(noThrow = false): NodePath | null {\n const mod = loadNodeModule<NodePath>('node:path', 'path');\n if (mod) return mod;\n if (noThrow) return null;\n throw new Error('Node.js path module is not available.');\n}\n", "import { getNodeFs } from './node-fs';\nimport { getNodePath } from './node-path';\n\ntype NodeFs = NonNullable<ReturnType<typeof getNodeFs>>;\ntype NodePath = NonNullable<ReturnType<typeof getNodePath>>;\n\nfunction joinPath(\n pathMod: NodePath | null,\n baseDir: string,\n rel: string,\n): string {\n if (pathMod) {\n return pathMod.join(baseDir, rel);\n }\n const trimmedBase = baseDir.replace(/[/\\\\]+$/, '');\n const trimmedRel = rel.replace(/^[/\\\\]+/, '');\n return `${trimmedBase}/${trimmedRel}`;\n}\n\nasync function safeReadDir(fs: NodeFs, dirPath: string): Promise<string[]> {\n try {\n return await fs.promises.readdir(dirPath);\n } catch {\n return [];\n }\n}\n\nexport async function searchZips(\n fs: NodeFs,\n pathMod: NodePath | null,\n baseDir: string,\n): Promise<string[]> {\n const results: string[] = [];\n const rootEntries = await safeReadDir(fs, baseDir);\n for (const entry of rootEntries) {\n const lower = entry.toLowerCase();\n if (!lower.endsWith('.zip') && !lower.endsWith('.ypk')) {\n continue;\n }\n const fullPath = joinPath(pathMod, baseDir, entry);\n try {\n const stats = await fs.promises.stat(fullPath);\n if (stats.isFile()) {\n results.push(fullPath);\n }\n } catch {\n continue;\n }\n }\n\n const expansionsDir = joinPath(pathMod, baseDir, 'expansions');\n const expansionEntries = await safeReadDir(fs, expansionsDir);\n for (const entry of expansionEntries) {\n const lower = entry.toLowerCase();\n if (!lower.endsWith('.zip') && !lower.endsWith('.ypk')) {\n continue;\n }\n const fullPath = joinPath(pathMod, expansionsDir, entry);\n try {\n const stats = await fs.promises.stat(fullPath);\n if (stats.isFile()) {\n results.push(fullPath);\n }\n } catch {\n continue;\n }\n }\n\n return results;\n}\n", "import type { ScriptReader } from '../types/callback';\nimport { DirScriptReader, ZipScriptReader } from './script-readers';\nimport { getNodeFs } from '../utility/node-fs';\nimport { getNodePath } from '../utility/node-path';\nimport { searchZips } from '../utility/search-zips';\n\nfunction getNodeModuleOrThrow<T>(value: T | null, label: string): T {\n if (!value) {\n throw new Error(`${label} is not supported in this runtime.`);\n }\n return value;\n}\n\nexport async function DirScriptReaderEx(\n ...baseDirs: string[]\n): Promise<ScriptReader> {\n const fs = getNodeModuleOrThrow(getNodeFs(), 'DirScriptReaderEx');\n const pathMod = getNodeModuleOrThrow(getNodePath(), 'DirScriptReaderEx');\n const fsReader = DirScriptReader(...baseDirs);\n\n const zipInputs: Uint8Array[] = [];\n for (const baseDir of baseDirs) {\n const zipPaths = await searchZips(fs, pathMod, baseDir);\n for (const zipPath of zipPaths) {\n try {\n zipInputs.push(await fs.promises.readFile(zipPath));\n } catch {\n continue;\n }\n }\n }\n\n if (zipInputs.length === 0) {\n return fsReader;\n }\n\n const zipReader = await ZipScriptReader(...zipInputs);\n return (path) => fsReader(path) ?? zipReader(path);\n}\n", "import type { Database } from 'sql.js';\nimport { OcgcoreCommonConstants } from '../vendor/ocgcore-constants';\nimport type { CardData } from '../types/card-data';\nimport type { CardReader } from '../types/callback';\n\ntype SqljsRow = {\n id: number;\n alias: number;\n setcode: number | bigint;\n type: number;\n atk: number;\n def: number;\n level: number;\n race: number;\n attribute: number;\n};\n\nfunction toUint16ArrayFromSetcode(value: number | bigint): Uint16Array {\n let raw = typeof value === 'bigint' ? value : BigInt(value >>> 0);\n const list = new Uint16Array(16);\n let idx = 0;\n while (raw !== 0n && idx < 16) {\n const chunk = raw & 0xffffn;\n if (chunk !== 0n) {\n list[idx] = Number(chunk);\n idx++;\n }\n raw >>= 16n;\n }\n return list;\n}\n\nfunction mapRowToCardData(row: SqljsRow): CardData {\n const type = (row.type ?? 0) >>> 0;\n const attack = row.atk ?? 0;\n let defense = row.def ?? 0;\n let linkMarker = 0;\n if ((type & OcgcoreCommonConstants.TYPE_LINK) >>> 0 !== 0) {\n linkMarker = defense;\n defense = 0;\n }\n const levelRaw = (row.level ?? 0) >>> 0;\n const level = (levelRaw & 0xff) >>> 0;\n const lscale = ((levelRaw >>> 24) & 0xff) >>> 0;\n const rscale = ((levelRaw >>> 16) & 0xff) >>> 0;\n\n return {\n code: row.id,\n alias: row.alias ?? 0,\n setcode: toUint16ArrayFromSetcode(row.setcode ?? 0),\n type,\n level,\n attribute: (row.attribute ?? 0) >>> 0,\n race: (row.race ?? 0) >>> 0,\n attack,\n defense,\n lscale,\n rscale,\n linkMarker,\n };\n}\n\nfunction queryOne(db: Database, cardId: number): CardData | null {\n if (typeof db.prepare === 'function') {\n const stmt = db.prepare(\n 'SELECT id, alias, setcode, type, atk, def, level, race, attribute FROM datas WHERE id = ?',\n );\n try {\n stmt.bind([cardId]);\n if (!stmt.step()) {\n return null;\n }\n const row = stmt.getAsObject() as unknown as SqljsRow;\n if (!row || row.id == null) {\n return null;\n }\n return mapRowToCardData(row);\n } finally {\n stmt.free();\n }\n }\n\n const res = db.exec(\n `SELECT id, alias, setcode, type, atk, def, level, race, attribute FROM datas WHERE id = ${cardId}`,\n );\n if (\n !res ||\n res.length === 0 ||\n !res[0].values ||\n res[0].values.length === 0\n ) {\n return null;\n }\n const row = res[0].values[0] as unknown[];\n return mapRowToCardData({\n id: row[0] as number,\n alias: row[1] as number,\n setcode: row[2] as number,\n type: row[3] as number,\n atk: row[4] as number,\n def: row[5] as number,\n level: row[6] as number,\n race: row[7] as number,\n attribute: row[8] as number,\n });\n}\n\nexport function SqljsCardReader(...dbs: Database[]): CardReader {\n return (cardId: number) => {\n for (const db of dbs) {\n const data = queryOne(db, cardId);\n if (data) {\n return data;\n }\n }\n return null;\n };\n}\n\n/** @deprecated Use SqljsCardReader instead. */\nexport function createSqljsCardReader(...dbs: Database[]): CardReader {\n return SqljsCardReader(...dbs);\n}\n", "import JSZip from 'jszip';\n\nimport type { CardReader } from '../types/callback';\nimport { getNodeFs } from '../utility/node-fs';\nimport { getNodePath } from '../utility/node-path';\nimport { searchZips } from '../utility/search-zips';\nimport { SqljsCardReader } from './sqljs-card-reader';\nimport type { SqlJsStatic } from 'sql.js';\n\ntype NodeFs = NonNullable<ReturnType<typeof getNodeFs>>;\ntype NodePath = NonNullable<ReturnType<typeof getNodePath>>;\n\nfunction joinPath(\n pathMod: NodePath | null,\n baseDir: string,\n rel: string,\n): string {\n if (pathMod) {\n return pathMod.join(baseDir, rel);\n }\n const trimmedBase = baseDir.replace(/[/\\\\]+$/, '');\n const trimmedRel = rel.replace(/^[/\\\\]+/, '');\n return `${trimmedBase}/${trimmedRel}`;\n}\n\nfunction getNodeModuleOrThrow<T>(value: T | null, label: string): T {\n if (!value) {\n throw new Error(`${label} is not supported in this runtime.`);\n }\n return value;\n}\n\nasync function safeReadDir(fs: NodeFs, dirPath: string): Promise<string[]> {\n try {\n return await fs.promises.readdir(dirPath);\n } catch {\n return [];\n }\n}\n\nasync function collectFsDbPaths(\n fs: NodeFs,\n pathMod: NodePath | null,\n baseDir: string,\n): Promise<string[]> {\n const collectCdbFiles = async (dirPath: string): Promise<string[]> => {\n const paths: string[] = [];\n const entries = await safeReadDir(fs, dirPath);\n for (const entry of entries) {\n if (!entry.toLowerCase().endsWith('.cdb')) {\n continue;\n }\n const fullPath = joinPath(pathMod, dirPath, entry);\n try {\n const stats = await fs.promises.stat(fullPath);\n if (stats.isFile()) {\n paths.push(fullPath);\n }\n } catch {\n continue;\n }\n }\n return paths;\n };\n\n const results: string[] = [];\n\n const expansionsDir = joinPath(pathMod, baseDir, 'expansions');\n results.push(...(await collectCdbFiles(expansionsDir)));\n\n results.push(...(await collectCdbFiles(baseDir)));\n\n return results;\n}\n\nfunction isRootCdbEntry(entryName: string): boolean {\n const normalized = entryName.replace(/\\\\/g, '/').replace(/^\\.?\\//, '');\n return !normalized.includes('/') && normalized.toLowerCase().endsWith('.cdb');\n}\n\nexport async function DirCardReader(\n sqljs: SqlJsStatic,\n ...baseDirs: string[]\n): Promise<CardReader> {\n const fs = getNodeModuleOrThrow(getNodeFs(), 'DirCardReader');\n const pathMod = getNodeModuleOrThrow(getNodePath(), 'DirCardReader');\n\n const dbs: unknown[] = [];\n for (const baseDir of baseDirs) {\n const dbPaths = await collectFsDbPaths(fs, pathMod, baseDir);\n for (const dbPath of dbPaths) {\n try {\n const bytes = await fs.promises.readFile(dbPath);\n dbs.push(new sqljs.Database(bytes));\n } catch {\n continue;\n }\n }\n }\n\n for (const baseDir of baseDirs) {\n const zipPaths = await searchZips(fs, pathMod, baseDir);\n for (const zipPath of zipPaths) {\n try {\n const bytes = await fs.promises.readFile(zipPath);\n const zip = await JSZip.loadAsync(bytes);\n const entries = Object.values(zip.files);\n for (const entry of entries) {\n if (entry.dir || !isRootCdbEntry(entry.name)) {\n continue;\n }\n try {\n const content = await entry.async('uint8array');\n dbs.push(new sqljs.Database(content));\n } catch {\n continue;\n }\n }\n } catch {\n continue;\n }\n }\n }\n\n return SqljsCardReader(...(dbs as Parameters<typeof SqljsCardReader>));\n}\n", "import { YGOProYrp } from 'ygopro-yrp-encode';\n\nimport { OcgcoreDuel } from './ocgcore-duel';\nimport { OcgcoreWrapper } from './ocgcore-wrapper';\nimport { OcgcoreCommonConstants } from './vendor/ocgcore-constants';\nimport { OcgcoreScriptConstants } from './vendor/script-constants';\nimport { OcgcoreProcessResult } from './types';\n\nconst { LOCATION_DECK, LOCATION_EXTRA, POS_FACEDOWN_DEFENSE } =\n OcgcoreScriptConstants;\n\nfunction normalizeYrp(input: YGOProYrp | Uint8Array): YGOProYrp {\n if (input instanceof YGOProYrp) {\n return input;\n }\n return new YGOProYrp().fromYrp(input);\n}\n\nfunction loadDeck(\n duel: OcgcoreDuel,\n deck: { main?: number[]; extra?: number[] } | null,\n owner: number,\n player: number,\n): void {\n if (!deck) return;\n for (const code of deck.main ?? []) {\n duel.newCard({\n code,\n owner,\n player,\n location: LOCATION_DECK,\n sequence: 0,\n position: POS_FACEDOWN_DEFENSE,\n });\n }\n for (const code of deck.extra ?? []) {\n duel.newCard({\n code,\n owner,\n player,\n location: LOCATION_EXTRA,\n sequence: 0,\n position: POS_FACEDOWN_DEFENSE,\n });\n }\n}\n\nfunction loadTagDeck(\n duel: OcgcoreDuel,\n deck: { main?: number[]; extra?: number[] } | null,\n owner: number,\n): void {\n if (!deck) return;\n for (const code of deck.main ?? []) {\n duel.newTagCard({\n code,\n owner,\n location: LOCATION_DECK,\n });\n }\n for (const code of deck.extra ?? []) {\n duel.newTagCard({\n code,\n owner,\n location: LOCATION_EXTRA,\n });\n }\n}\n\nfunction setRegistryValue(duel: OcgcoreDuel, key: string, value: string): void {\n duel.setRegistryValue(key, value);\n}\n\nexport function createDuelFromYrp(\n wrapper: OcgcoreWrapper,\n yrpInput: YGOProYrp | Uint8Array,\n) {\n const yrp = normalizeYrp(yrpInput);\n const header = yrp.header;\n const seedSequence = header?.seedSequence ?? [];\n const duel =\n seedSequence.length > 0\n ? wrapper.createDuelV2(seedSequence)\n : wrapper.createDuel(header?.seed ?? 0);\n\n setRegistryValue(duel, 'duel_mode', yrp.isTag ? 'tag' : 'single');\n setRegistryValue(duel, 'start_lp', String(yrp.startLp));\n setRegistryValue(duel, 'start_hand', String(yrp.startHand));\n setRegistryValue(duel, 'draw_count', String(yrp.drawCount));\n\n const playerNames = yrp.isTag\n ? [\n yrp.hostName,\n yrp.tagHostName ?? '',\n yrp.tagClientName ?? '',\n yrp.clientName,\n ]\n : [yrp.hostName, yrp.clientName];\n for (let i = 0; i < playerNames.length; i++) {\n setRegistryValue(duel, `player_name_${i}`, playerNames[i] ?? '');\n }\n setRegistryValue(duel, 'player_type_0', '0');\n setRegistryValue(duel, 'player_type_1', '1');\n\n duel.setPlayerInfo({\n player: 0,\n lp: yrp.startLp,\n startHand: yrp.startHand,\n drawCount: yrp.drawCount,\n });\n duel.setPlayerInfo({\n player: 1,\n lp: yrp.startLp,\n startHand: yrp.startHand,\n drawCount: yrp.drawCount,\n });\n\n duel.preloadScript('./script/patches/entry.lua');\n duel.preloadScript('./script/special.lua');\n duel.preloadScript('./script/init.lua');\n\n if (yrp.isSingleMode && yrp.singleScript) {\n duel.preloadScript(`./single/${yrp.singleScript}`);\n } else if (yrp.isTag) {\n loadDeck(duel, yrp.hostDeck, 0, 0);\n loadTagDeck(duel, yrp.tagHostDeck, 0);\n loadDeck(duel, yrp.clientDeck, 1, 1);\n loadTagDeck(duel, yrp.tagClientDeck, 1);\n } else {\n loadDeck(duel, yrp.hostDeck, 0, 0);\n loadDeck(duel, yrp.clientDeck, 1, 1);\n }\n\n duel.startDuel(yrp.opt >>> 0);\n return { yrp, duel };\n}\n\nexport function consumeResponseFromOcgcoreProcess(\n duel: OcgcoreDuel,\n result: OcgcoreProcessResult,\n responses: Uint8Array[],\n) {\n if (\n result.raw.length > 0 &&\n result.raw[0] === OcgcoreCommonConstants.MSG_RETRY\n ) {\n throw new Error('Got MSG_RETRY');\n }\n\n if (result.status === 0) {\n return false;\n }\n if (result.status === 1) {\n if (result.raw.length === 0) {\n return false;\n }\n const response = responses.shift();\n if (!response) {\n return true;\n }\n duel.setResponse(response);\n return false;\n }\n return true;\n}\n\nexport function* processYrpDuelStep(duel: OcgcoreDuel, yrp: YGOProYrp) {\n const responses = yrp.responses.slice();\n\n while (true) {\n const result = duel.process();\n yield {\n duel,\n result,\n responses,\n };\n\n if (consumeResponseFromOcgcoreProcess(duel, result, responses)) {\n break;\n }\n }\n}\n\nexport function* playYrpStep(\n ocgcoreWrapper: OcgcoreWrapper,\n yrpInput: YGOProYrp | Uint8Array,\n) {\n const { yrp, duel } = createDuelFromYrp(ocgcoreWrapper, yrpInput);\n\n try {\n for (const stepResult of processYrpDuelStep(duel, yrp)) {\n yield stepResult;\n }\n } finally {\n duel.endDuel();\n }\n}\n\nexport const playYrp = (\n ocgcoreWrapper: OcgcoreWrapper,\n yrpInput: YGOProYrp | Uint8Array,\n) => {\n const results: Uint8Array[] = [];\n for (const result of playYrpStep(ocgcoreWrapper, yrpInput)) {\n results.push(result.result.raw);\n }\n return results;\n};\n", "import { OcgcoreWrapper } from './ocgcore-wrapper';\nimport { OcgcoreCommonConstants } from './vendor/ocgcore-constants';\nimport { OcgcoreScriptConstants } from './vendor/script-constants';\nimport { OcgcoreMessageType } from './types/ocgcore-enums';\n\nconst { LOCATION_DECK, POS_FACEUP_ATTACK } = OcgcoreScriptConstants;\n\nexport interface TestCardMessage {\n type: OcgcoreMessageType;\n message: string;\n}\n\nexport function testCard(\n ocgcoreWrapper: OcgcoreWrapper,\n ...ids: number[]\n): TestCardMessage[] {\n const logs: TestCardMessage[] = [];\n const duel = ocgcoreWrapper.createDuelV2(\n Array.from(\n { length: 8 },\n () => Math.floor(Math.random() * 0xffffffff) >>> 0,\n ),\n );\n\n ocgcoreWrapper.setMessageHandler((_duel, message, type) => {\n if (duel.duelPtr !== _duel.duelPtr) return;\n logs.push({ type, message });\n });\n\n duel.preloadScript('./script/special.lua');\n duel.preloadScript('./script/init.lua');\n duel.setPlayerInfo({ player: 0, lp: 8000, startHand: 5, drawCount: 1 });\n duel.setPlayerInfo({ player: 1, lp: 8000, startHand: 5, drawCount: 1 });\n\n for (const code of ids) {\n duel.newCard({\n code,\n owner: 0,\n player: 0,\n location: LOCATION_DECK,\n sequence: 0,\n position: POS_FACEUP_ATTACK,\n });\n }\n\n duel.startDuel(0);\n\n while (true) {\n const { status, raw } = duel.process();\n if (raw.length > 0 && raw[0] === OcgcoreCommonConstants.MSG_RETRY) {\n break;\n }\n if (status === 0) {\n continue;\n }\n break;\n }\n\n duel.endDuel();\n return logs;\n}\n"],
5
- "mappings": "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",
3
+ "sources": ["../index.ts", "../src/vendor/index.ts", "../src/constants/ocgcore.ts", "../src/utility/binary.ts", "../src/utility/utf8.ts", "../src/adapters/ocgcore-parsers.ts", "../src/adapters/start-duel.ts", "../src/ocgcore-duel.ts", "../src/structs/card-data.ts", "../src/types/ocgcore-enums.ts", "../src/ocgcore-wrapper.ts", "../src/load-ocgcore-factory.esm.ts", "../src/ocgcore-wrapper-utils.ts", "../src/create-ocgcore-wrapper.ts", "../src/script-reader/script-readers.ts", "../src/utility/load-node-module.ts", "../src/utility/node-fs.ts", "../src/utility/node-path.ts", "../src/utility/search-zips.ts", "../src/script-reader/dir-script-reader-ex.ts", "../src/card-reader/sqljs-card-reader.ts", "../src/card-reader/dir-card-reader.ts", "../src/play-yrp.ts", "../src/test-card.ts"],
4
+ "sourcesContent": ["import { Buffer } from 'buffer';\n\nif (\n typeof globalThis !== 'undefined' &&\n !(globalThis as { Buffer?: unknown }).Buffer\n) {\n (globalThis as { Buffer?: unknown }).Buffer = Buffer;\n}\n\nexport * from './src/ocgcore-wrapper';\nexport * from './src/ocgcore-duel';\nexport * from './src/create-ocgcore-wrapper';\nexport * from './src/types';\nexport * from './src/structs';\nexport * from './src/adapters';\nexport * from './src/constants';\n// export * from './src/utility';\nexport * as _OcgcoreConstants from './src/vendor';\nexport * from './src/script-reader';\nexport * from './src/card-reader';\nexport * from './src/play-yrp';\nexport * from './src/test-card';\n", "export {\n OcgcoreCommonConstants,\n OcgcoreScriptConstants,\n} from 'ygopro-msg-encode';\n", "import { OcgcoreCommonConstants } from '../vendor';\n\nexport const MESSAGE_BUFFER_SIZE = OcgcoreCommonConstants.SIZE_MESSAGE_BUFFER;\nexport const QUERY_BUFFER_SIZE = 0x4000;\nexport const REGISTRY_BUFFER_SIZE = 0x2000;\n\nexport const LEN_FAIL = 0;\nexport const LEN_EMPTY = 4;\nexport const LEN_HEADER = 8;\n", "export function readU8(buf: Uint8Array, offset: number): number {\n return buf[offset] ?? 0;\n}\n\nexport function readU16(buf: Uint8Array, offset: number): number {\n return new DataView(buf.buffer, buf.byteOffset, buf.byteLength).getUint16(\n offset,\n true,\n );\n}\n\nexport function readI32(buf: Uint8Array, offset: number): number {\n return new DataView(buf.buffer, buf.byteOffset, buf.byteLength).getInt32(\n offset,\n true,\n );\n}\n\nexport function readU32(buf: Uint8Array, offset: number): number {\n return new DataView(buf.buffer, buf.byteOffset, buf.byteLength).getUint32(\n offset,\n true,\n );\n}\n", "const encoder = new TextEncoder();\nconst decoder = new TextDecoder('utf-8');\n\nexport function encodeUtf8(value: string): Uint8Array {\n return encoder.encode(value);\n}\n\nexport function decodeUtf8(value: Uint8Array): string {\n return decoder.decode(value);\n}\n", "import { LEN_HEADER } from '../constants';\nimport { readI32, readU16 } from '../utility/binary';\nimport { decodeUtf8 } from '../utility/utf8';\nimport { CardQuery, YGOProMsgReloadField } from 'ygopro-msg-encode';\n\n// Internal interface for registry parsing\ninterface RegistryDumpEntry {\n key: string;\n value: Uint8Array;\n valueText?: string;\n}\n\nexport function parseCardQuery(\n raw: Uint8Array,\n length: number,\n): CardQuery | null {\n if (length <= LEN_HEADER) {\n return null;\n }\n const payload = raw.subarray(4, length);\n return new CardQuery().fromPayload(payload);\n}\n\nexport function parseFieldCardQuery(\n raw: Uint8Array,\n length: number,\n): CardQuery[] {\n const cards: CardQuery[] = [];\n let offset = 0;\n while (offset + 4 <= length) {\n const chunkLen = readI32(raw, offset);\n if (chunkLen <= 0) {\n break;\n }\n const end = Math.min(length, offset + chunkLen);\n if (chunkLen <= LEN_HEADER) {\n const emptyCard = new CardQuery();\n emptyCard.flags = 0;\n emptyCard.empty = true;\n cards.push(emptyCard);\n } else {\n const payload = raw.subarray(offset + 4, end);\n cards.push(new CardQuery().fromPayload(payload));\n }\n offset += chunkLen;\n }\n return cards;\n}\n\nexport function parseFieldInfo(raw: Uint8Array): YGOProMsgReloadField {\n // query_field_info() in ocgcore returns data that starts with MSG_RELOAD_FIELD (162) byte\n // Format: [MSG_RELOAD_FIELD][duel_rule][player0_data][player1_data][chains]\n // YGOProMsgReloadField.fromPayload() expects the full message including the identifier\n return new YGOProMsgReloadField().fromPayload(raw);\n}\n\nexport function parseRegistryKeys(raw: Uint8Array): string[] {\n const keys: string[] = [];\n let offset = 0;\n while (offset + 2 <= raw.length) {\n const len = readU16(raw, offset);\n offset += 2;\n if (offset + len > raw.length) {\n break;\n }\n const keyBytes = raw.subarray(offset, offset + len);\n offset += len;\n keys.push(decodeUtf8(keyBytes));\n }\n return keys;\n}\n\nexport function parseRegistryDump(raw: Uint8Array): RegistryDumpEntry[] {\n const entries: RegistryDumpEntry[] = [];\n let offset = 0;\n while (offset + 4 <= raw.length) {\n const keyLen = readU16(raw, offset);\n const valLen = readU16(raw, offset + 2);\n offset += 4;\n if (offset + keyLen + valLen > raw.length) {\n break;\n }\n const keyBytes = raw.subarray(offset, offset + keyLen);\n offset += keyLen;\n const valueBytes = raw.subarray(offset, offset + valLen);\n offset += valLen;\n const entry: RegistryDumpEntry = {\n key: decodeUtf8(keyBytes),\n value: valueBytes,\n };\n entry.valueText = decodeUtf8(valueBytes);\n entries.push(entry);\n }\n return entries;\n}\n", "import { OcgcoreStartDuelOptions } from '../types/ocgcore-params';\n\nexport function normalizeStartDuelOptions(\n options: number | OcgcoreStartDuelOptions,\n): number {\n if (typeof options === 'number') {\n return options;\n }\n const duelRule = options.rule ?? 0;\n let duelOptions = options.options ?? 0;\n if (options.flags?.length) {\n for (const flag of options.flags) {\n duelOptions = (duelOptions | flag) >>> 0;\n }\n }\n return (((duelRule & 0xffff) << 16) | (duelOptions & 0xffff)) >>> 0;\n}\n", "import {\n OcgcoreCardQueryResult,\n OcgcoreFieldCardQueryResult,\n OcgcoreFieldInfoResult,\n OcgcoreMessageResult,\n OcgcoreProcessResult,\n OcgcoreRegistryDumpResult,\n OcgcoreRegistryKeysResult,\n OcgcoreRegistryValueResult,\n} from './types/ocgcore-results';\nimport {\n OcgcoreNewCardParams,\n OcgcoreNewTagCardParams,\n OcgcoreQueryCardParams,\n OcgcoreQueryFieldCardParams,\n OcgcoreQueryFieldCountParams,\n OcgcoreSetPlayerInfoParams,\n OcgcoreStartDuelOptions,\n} from './types/ocgcore-params';\nimport {\n MESSAGE_BUFFER_SIZE,\n QUERY_BUFFER_SIZE,\n REGISTRY_BUFFER_SIZE,\n LEN_HEADER,\n} from './constants';\nimport {\n parseCardQuery,\n parseFieldCardQuery,\n parseFieldInfo,\n parseRegistryDump,\n parseRegistryKeys,\n} from './adapters/ocgcore-parsers';\nimport { normalizeStartDuelOptions } from './adapters/start-duel';\nimport { OcgcoreWrapper } from './ocgcore-wrapper';\nimport { decodeUtf8 } from './utility/utf8';\nimport { YGOProMessages, YGOProMsgBase } from 'ygopro-msg-encode';\n\nexport class OcgcoreDuel {\n private returnPtr = 0;\n private returnSize = 512;\n\n constructor(\n public ocgcoreWrapper: OcgcoreWrapper,\n public duelPtr: number,\n ) {}\n\n startDuel(options: number | OcgcoreStartDuelOptions): void {\n if (!this.returnPtr) {\n this.returnPtr = this.ocgcoreWrapper.malloc(this.returnSize);\n }\n const optionValue = normalizeStartDuelOptions(options);\n this.ocgcoreWrapper.ocgcoreModule._start_duel(this.duelPtr, optionValue);\n }\n\n ended = false;\n\n endDuel(): void {\n if (this.ended) return;\n this.ended = true;\n this.ocgcoreWrapper.ocgcoreModule._end_duel(this.duelPtr);\n if (this.returnPtr) {\n this.ocgcoreWrapper.free(this.returnPtr);\n this.returnPtr = 0;\n }\n this.ocgcoreWrapper.forgetDuel(this.duelPtr);\n }\n\n setPlayerInfo(info: OcgcoreSetPlayerInfoParams): void {\n this.ocgcoreWrapper.ocgcoreModule._set_player_info(\n this.duelPtr,\n info.player,\n info.lp,\n info.startHand,\n info.drawCount,\n );\n }\n\n _getLogMessage(bufPtr: number): number {\n return this.ocgcoreWrapper.ocgcoreModule._get_log_message(\n this.duelPtr,\n bufPtr,\n );\n }\n\n private getMessage(length: number): OcgcoreMessageResult {\n const ptr = this.ocgcoreWrapper.malloc(MESSAGE_BUFFER_SIZE);\n this.ocgcoreWrapper.ocgcoreModule._get_message(this.duelPtr, ptr);\n const raw = this.ocgcoreWrapper.copyHeap(ptr, length);\n this.ocgcoreWrapper.free(ptr);\n return { length, raw };\n }\n\n process(): OcgcoreProcessResult {\n const result = this.ocgcoreWrapper.ocgcoreModule._process(this.duelPtr);\n const length = (result & 0x0fffffff) >>> 0;\n const status = ((result >>> 28) & 0x0f) >>> 0;\n const messageData = this.getMessage(length);\n\n // Parse message using YGOProMessages (only one message per process call)\n let parsedMessage: YGOProMsgBase | undefined;\n if (messageData.raw.length > 0) {\n try {\n parsedMessage = YGOProMessages.getInstanceFromPayload(messageData.raw);\n } catch (e) {\n // If parsing fails, parsedMessage remains undefined\n }\n }\n\n return {\n length: messageData.length,\n raw: messageData.raw,\n status,\n message: parsedMessage,\n };\n }\n\n newCard(card: OcgcoreNewCardParams): void {\n this.ocgcoreWrapper.ocgcoreModule._new_card(\n this.duelPtr,\n card.code,\n card.owner,\n card.player,\n card.location,\n card.sequence,\n card.position,\n );\n }\n\n newTagCard(card: OcgcoreNewTagCardParams): void {\n this.ocgcoreWrapper.ocgcoreModule._new_tag_card(\n this.duelPtr,\n card.code,\n card.owner,\n card.location,\n );\n }\n\n queryCard(query: OcgcoreQueryCardParams): OcgcoreCardQueryResult {\n const ptr = this.ocgcoreWrapper.malloc(QUERY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._query_card(\n this.duelPtr,\n query.player,\n query.location,\n query.sequence,\n query.queryFlag,\n ptr,\n query.useCache ?? 0,\n );\n const raw = this.ocgcoreWrapper.copyHeap(ptr, length);\n this.ocgcoreWrapper.free(ptr);\n const card = length <= LEN_HEADER ? null : parseCardQuery(raw, length);\n return { length, raw, card };\n }\n\n queryFieldCount(query: OcgcoreQueryFieldCountParams): number {\n return this.ocgcoreWrapper.ocgcoreModule._query_field_count(\n this.duelPtr,\n query.player,\n query.location,\n );\n }\n\n queryFieldCard(\n query: OcgcoreQueryFieldCardParams,\n ): OcgcoreFieldCardQueryResult {\n const ptr = this.ocgcoreWrapper.malloc(QUERY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._query_field_card(\n this.duelPtr,\n query.player,\n query.location,\n query.queryFlag,\n ptr,\n query.useCache ?? 0,\n );\n const raw = this.ocgcoreWrapper.copyHeap(ptr, length);\n this.ocgcoreWrapper.free(ptr);\n const cards = parseFieldCardQuery(raw, length);\n return { length, raw, cards };\n }\n\n queryFieldInfo(): OcgcoreFieldInfoResult {\n const ptr = this.ocgcoreWrapper.malloc(QUERY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._query_field_info(\n this.duelPtr,\n ptr,\n );\n const raw = this.ocgcoreWrapper.copyHeap(ptr, length);\n this.ocgcoreWrapper.free(ptr);\n const field = parseFieldInfo(raw);\n return { length, raw, field };\n }\n\n setResponseInt(value: number): void {\n this.ocgcoreWrapper.ocgcoreModule._set_responsei(this.duelPtr, value);\n }\n\n setResponse(response: Uint8Array | number): void {\n if (typeof response === 'number') {\n this.setResponseInt(response);\n return;\n }\n if (response.length > this.returnSize) {\n this.ocgcoreWrapper.free(this.returnPtr);\n this.returnPtr = this.ocgcoreWrapper.malloc(response.length);\n this.returnSize = response.length;\n }\n this.ocgcoreWrapper.setHeap(this.returnPtr, response);\n this.ocgcoreWrapper.ocgcoreModule._set_responseb(\n this.duelPtr,\n this.returnPtr,\n );\n }\n\n preloadScript(scriptPath: string): void {\n this.ocgcoreWrapper.useTmpData(\n (ptr) =>\n this.ocgcoreWrapper.ocgcoreModule._preload_script(this.duelPtr, ptr),\n scriptPath,\n );\n }\n\n getRegistryValue(key: string): OcgcoreRegistryValueResult {\n const outPtr = this.ocgcoreWrapper.malloc(REGISTRY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.useTmpData(\n (keyPtr) =>\n this.ocgcoreWrapper.ocgcoreModule._get_registry_value(\n this.duelPtr,\n keyPtr,\n outPtr,\n ),\n key,\n );\n const raw = this.ocgcoreWrapper.copyHeap(outPtr, Math.max(0, length));\n this.ocgcoreWrapper.free(outPtr);\n const value = raw;\n const text = length >= 0 ? decodeUtf8(raw) : undefined;\n return { length, raw, value, text };\n }\n\n setRegistryValue(key: string, value: string): void {\n this.ocgcoreWrapper.useTmpData(\n (keyPtr, valuePtr) =>\n this.ocgcoreWrapper.ocgcoreModule._set_registry_value(\n this.duelPtr,\n keyPtr,\n valuePtr,\n ),\n key,\n value,\n );\n }\n\n getRegistryKeys(): OcgcoreRegistryKeysResult {\n const outPtr = this.ocgcoreWrapper.malloc(REGISTRY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._get_registry_keys(\n this.duelPtr,\n outPtr,\n );\n const raw = this.ocgcoreWrapper.copyHeap(outPtr, Math.max(0, length));\n this.ocgcoreWrapper.free(outPtr);\n const keys = length >= 0 ? parseRegistryKeys(raw) : [];\n return { length, raw, keys };\n }\n\n clearRegistry(): void {\n this.ocgcoreWrapper.ocgcoreModule._clear_registry(this.duelPtr);\n }\n\n dumpRegistry(): OcgcoreRegistryDumpResult {\n const outPtr = this.ocgcoreWrapper.malloc(REGISTRY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._dump_registry(\n this.duelPtr,\n outPtr,\n );\n const raw = this.ocgcoreWrapper.copyHeap(outPtr, Math.max(0, length));\n this.ocgcoreWrapper.free(outPtr);\n\n // Parse directly into dict\n const dict: Record<string, string> = {};\n if (length > 0) {\n const entries = parseRegistryDump(raw);\n for (const entry of entries) {\n if (entry.valueText !== undefined) {\n dict[entry.key] = entry.valueText;\n }\n }\n }\n\n return { length, raw, dict };\n }\n\n loadRegistry(input: Uint8Array | Record<string, string>): void {\n if (input instanceof Uint8Array) {\n // Load from binary format\n this.ocgcoreWrapper.useTmpData(\n (ptr) =>\n this.ocgcoreWrapper.ocgcoreModule._load_registry(\n this.duelPtr,\n ptr,\n input.length,\n ),\n input,\n );\n } else {\n // Load from dict format\n for (const [key, value] of Object.entries(input)) {\n this.setRegistryValue(key, value);\n }\n }\n }\n}\n", "import {\n BinaryField,\n fillBinaryFields,\n toBinaryFields,\n} from 'ygopro-msg-encode';\n\nexport class CardDataStruct {\n @BinaryField('u32', 0)\n code!: number;\n\n @BinaryField('u32', 4)\n alias!: number;\n\n @BinaryField('u16', 8, 16)\n setcode!: Uint16Array;\n\n @BinaryField('u32', 40)\n type!: number;\n\n @BinaryField('u32', 44)\n level!: number;\n\n @BinaryField('u32', 48)\n attribute!: number;\n\n @BinaryField('u32', 52)\n race!: number;\n\n @BinaryField('i32', 56)\n attack!: number;\n\n @BinaryField('i32', 60)\n defense!: number;\n\n @BinaryField('u32', 64)\n lscale!: number;\n\n @BinaryField('u32', 68)\n rscale!: number;\n\n @BinaryField('u32', 72)\n linkMarker!: number;\n\n static fromBytes(data: Uint8Array): CardDataStruct {\n const obj = new CardDataStruct();\n fillBinaryFields(obj, data, CardDataStruct);\n return obj;\n }\n\n toBytes(): Uint8Array {\n return toBinaryFields(this, CardDataStruct);\n }\n}\n", "export enum OcgcoreMessageType {\n ScriptError = 'ScriptError',\n DebugMessage = 'DebugMessage',\n}\n\nexport enum OcgcoreDuelRule {\n Rule1 = 1,\n Rule2 = 2,\n MasterRule3 = 3,\n NewMasterRule = 4,\n MasterRule2020 = 5,\n}\n\nexport enum OcgcoreDuelOptionFlag {\n TestMode = 0x01,\n AttackFirstTurn = 0x02,\n ObsoleteRuling = 0x08,\n PseudoShuffle = 0x10,\n TagMode = 0x20,\n SimpleAI = 0x40,\n ReturnDeckTop = 0x80,\n RevealDeckSeq = 0x100,\n}\n", "import { OcgcoreModule } from './vendor/libocgcore.shared';\nimport { OcgcoreDuel } from './ocgcore-duel';\nimport { CardDataInput } from './types/card-data';\nimport { CardDataStruct } from './structs/card-data';\nimport { OcgcoreMessageType } from './types/ocgcore-enums';\nimport { CardReader, MessageHandler, ScriptReader } from './types/callback';\n\nexport class OcgcoreWrapper {\n private scriptBufferPtr = 0;\n private scriptBufferSize = 0;\n private logBufferPtr = 0;\n private logBufferSize = 0;\n private tmpStringBufferPtr = 0;\n private tmpStringBufferSize = 0;\n\n private scriptReaderFunc = 0;\n private cardReaderFunc = 0;\n private messageHandlerFunc = 0;\n\n public scriptReaders: ScriptReader[] = [];\n public cardReaders: CardReader[] = [];\n public messageHandlers: MessageHandler[] = [];\n\n private heapU8: Uint8Array;\n private heapView: DataView;\n private encoder = new TextEncoder();\n private decoder = new TextDecoder('utf-8');\n private duels = new Map<number, OcgcoreDuel>();\n\n constructor(\n public ocgcoreModule: OcgcoreModule,\n options?: { scriptBufferSize?: number; logBufferSize?: number },\n ) {\n this.heapU8 = ocgcoreModule.HEAPU8 as Uint8Array;\n this.heapView = new DataView(this.heapU8.buffer);\n this.scriptBufferSize = options?.scriptBufferSize ?? 0x100000;\n this.logBufferSize = options?.logBufferSize ?? 1024;\n\n this.scriptReaderFunc = this.createFunction((scriptPtr, lenPtr) => {\n const scriptPath = this.getUTF8String(scriptPtr);\n const content = this.readScript(scriptPath);\n if (content == null) {\n return 0;\n }\n\n if (!this.scriptBufferPtr) {\n this.scriptBufferPtr = this.ocgcoreModule._malloc(\n this.scriptBufferSize,\n );\n }\n\n const bytes = content;\n if (bytes.length > this.scriptBufferSize) {\n this.ocgcoreModule._free(this.scriptBufferPtr);\n this.scriptBufferPtr = this.ocgcoreModule._malloc(bytes.length);\n this.scriptBufferSize = bytes.length;\n }\n\n this.heapU8.set(bytes, this.scriptBufferPtr);\n this.heapView.setInt32(lenPtr, bytes.length, true);\n return this.scriptBufferPtr;\n }, 'iii');\n this.ocgcoreModule._set_script_reader(this.scriptReaderFunc);\n\n this.cardReaderFunc = this.createFunction((cardId, cardDataPtr) => {\n const data = this.readCard(cardId);\n if (!data) {\n return 0;\n }\n\n let buf: Uint8Array;\n if (data instanceof CardDataStruct) {\n buf = data.toBytes();\n } else {\n const cardData = new CardDataStruct();\n cardData.code = data.code;\n cardData.alias = data.alias;\n\n // Initialize setcode array\n const targetSetcode = new Uint16Array(16);\n targetSetcode.fill(0);\n if (data.setcode instanceof Uint16Array && data.setcode.length === 16) {\n targetSetcode.set(data.setcode);\n } else {\n for (let i = 0; i < 16 && i < data.setcode.length; i++) {\n targetSetcode[i] = data.setcode[i];\n }\n }\n cardData.setcode = targetSetcode;\n\n cardData.type = data.type;\n cardData.level = data.level;\n cardData.attribute = data.attribute;\n cardData.race = data.race;\n cardData.attack = data.attack;\n cardData.defense = data.defense;\n cardData.lscale = data.lscale;\n cardData.rscale = data.rscale;\n cardData.linkMarker = data.linkMarker;\n buf = cardData.toBytes();\n }\n\n this.heapU8.set(buf, cardDataPtr);\n return 0;\n }, 'iii');\n this.ocgcoreModule._set_card_reader(this.cardReaderFunc);\n\n this.messageHandlerFunc = this.createFunction((duelPtr, messageType) => {\n if (!this.logBufferPtr) {\n this.logBufferPtr = this.ocgcoreModule._malloc(this.logBufferSize);\n }\n this.ocgcoreModule._get_log_message(duelPtr, this.logBufferPtr);\n const message = this.getUTF8String(this.logBufferPtr);\n const type =\n messageType === 2\n ? OcgcoreMessageType.DebugMessage\n : OcgcoreMessageType.ScriptError;\n const duel = this.getOrCreateDuel(duelPtr);\n this.handleMessage(duel, message, type);\n }, 'iii');\n this.ocgcoreModule._set_message_handler(this.messageHandlerFunc);\n }\n\n readScript(scriptPath: string): Uint8Array | null {\n let content: string | Uint8Array | null | undefined;\n for (const reader of this.scriptReaders) {\n try {\n content = reader(scriptPath);\n } catch {\n content = null;\n }\n if (content != null) {\n break;\n }\n }\n return typeof content === 'string'\n ? this.encoder.encode(content)\n : (content ?? null);\n }\n\n readCard(cardId: number): CardDataInput | null {\n let data: CardDataInput | null | undefined;\n for (const reader of this.cardReaders) {\n try {\n data = reader(cardId);\n } catch {\n data = null;\n }\n if (data) {\n break;\n }\n }\n return data ?? null;\n }\n\n handleMessage(\n duel: OcgcoreDuel,\n message: string,\n type: OcgcoreMessageType,\n ): void {\n for (const handler of this.messageHandlers) {\n try {\n handler(duel, message, type);\n } catch {\n // ignore handler errors\n }\n }\n }\n\n getUTF8String(ptr: number): string {\n let length = 0;\n while (this.heapU8[ptr + length] !== 0) {\n length++;\n }\n return this.decoder.decode(this.heapU8.subarray(ptr, ptr + length));\n }\n\n setHeap(ptr: number, data: Uint8Array): void {\n this.heapU8.set(data, ptr);\n }\n\n copyHeap(ptr: number, length: number): Uint8Array {\n return this.heapU8.slice(ptr, ptr + length);\n }\n\n useTmpData<R>(\n cb: (...args: number[]) => R,\n ...args: Array<string | Uint8Array>\n ): R {\n const encoded = args.map((item) =>\n typeof item === 'string' ? this.encoder.encode(item) : item,\n );\n const totalLength = encoded.reduce(\n (acc, bytes) => acc + bytes.length + 1,\n 0,\n );\n if (totalLength > this.tmpStringBufferSize) {\n if (this.tmpStringBufferPtr) {\n this.ocgcoreModule._free(this.tmpStringBufferPtr);\n }\n this.tmpStringBufferPtr = this.ocgcoreModule._malloc(totalLength);\n this.tmpStringBufferSize = totalLength;\n }\n\n let offset = 0;\n const ptrs = encoded.map((bytes) => {\n const ptr = this.tmpStringBufferPtr + offset;\n this.heapU8.set(bytes, ptr);\n this.heapU8[ptr + bytes.length] = 0;\n offset += bytes.length + 1;\n return ptr;\n });\n\n return cb(...ptrs);\n }\n\n private createFunction(\n fn: (...args: number[]) => number | void,\n signature: string,\n ): number {\n return this.ocgcoreModule.addFunction(fn, signature);\n }\n\n addFunction(\n fn: (...args: number[]) => number | void,\n signature: string,\n ): number {\n return this.ocgcoreModule.addFunction(fn, signature);\n }\n\n removeFunction(index: number): void {\n this.ocgcoreModule.removeFunction(index);\n }\n\n createDuel(seed: number): OcgcoreDuel {\n const duelPtr = this.ocgcoreModule._create_duel(seed);\n return this.getOrCreateDuel(duelPtr);\n }\n\n createDuelV2(seedSequence: number[]): OcgcoreDuel {\n const count = seedSequence.length;\n const byteLength = count * 4;\n const ptr = this.ocgcoreModule._malloc(byteLength);\n const view = new Uint32Array(this.heapU8.buffer, ptr, count);\n for (let i = 0; i < count; i++) {\n view[i] = seedSequence[i] >>> 0;\n }\n const duelPtr = this.ocgcoreModule._create_duel_v2(ptr);\n this.ocgcoreModule._free(ptr);\n return this.getOrCreateDuel(duelPtr);\n }\n\n _defaultScriptReader(namePtr: number, dataPtr: number): number {\n return this.ocgcoreModule._default_script_reader(namePtr, dataPtr);\n }\n\n malloc(size: number): number {\n return this.ocgcoreModule._malloc(size);\n }\n\n free(ptr: number): void {\n this.ocgcoreModule._free(ptr);\n }\n\n _stdioExit(): void {\n this.ocgcoreModule.___stdio_exit();\n }\n\n setScriptReader(reader: ScriptReader, reset = false): this {\n if (reset) {\n this.scriptReaders = [];\n }\n this.scriptReaders.push(reader);\n return this;\n }\n\n setCardReader(reader: CardReader, reset = false): this {\n if (reset) {\n this.cardReaders = [];\n }\n this.cardReaders.push(reader);\n return this;\n }\n\n setMessageHandler(handler: MessageHandler, reset = false): this {\n if (reset) {\n this.messageHandlers = [];\n }\n this.messageHandlers.push(handler);\n return this;\n }\n\n getOrCreateDuel(duelPtr: number): OcgcoreDuel {\n const existing = this.duels.get(duelPtr);\n if (existing) {\n return existing;\n }\n const duel = new OcgcoreDuel(this, duelPtr);\n this.duels.set(duelPtr, duel);\n return duel;\n }\n\n forgetDuel(duelPtr: number): void {\n this.duels.delete(duelPtr);\n }\n\n finalize(): void {\n if (this.scriptReaderFunc) {\n this.ocgcoreModule.removeFunction(this.scriptReaderFunc);\n this.scriptReaderFunc = 0;\n }\n if (this.cardReaderFunc) {\n this.ocgcoreModule.removeFunction(this.cardReaderFunc);\n this.cardReaderFunc = 0;\n }\n if (this.messageHandlerFunc) {\n this.ocgcoreModule.removeFunction(this.messageHandlerFunc);\n this.messageHandlerFunc = 0;\n }\n\n if (this.scriptBufferPtr) {\n this.ocgcoreModule._free(this.scriptBufferPtr);\n this.scriptBufferPtr = 0;\n this.scriptBufferSize = 0;\n }\n if (this.logBufferPtr) {\n this.ocgcoreModule._free(this.logBufferPtr);\n this.logBufferPtr = 0;\n this.logBufferSize = 0;\n }\n if (this.tmpStringBufferPtr) {\n this.ocgcoreModule._free(this.tmpStringBufferPtr);\n this.tmpStringBufferPtr = 0;\n this.tmpStringBufferSize = 0;\n }\n }\n}\n", "import type { OcgcoreFactory } from './vendor/libocgcore.shared';\nimport createOcgcore from './vendor/wasm_esm/libocgcore.mjs';\nimport { normalizeOcgcoreFactory } from './ocgcore-wrapper-utils';\n\nexport async function loadOcgcoreFactory(): Promise<OcgcoreFactory> {\n return normalizeOcgcoreFactory(createOcgcore as unknown);\n}\n", "import type { OcgcoreFactory } from './vendor/libocgcore.shared';\n\ntype OcgcoreFactoryModule = { default?: OcgcoreFactory } | OcgcoreFactory;\n\nexport function normalizeOcgcoreFactory(mod: unknown): OcgcoreFactory {\n const typed = mod as OcgcoreFactoryModule;\n if (typeof typed === 'function') {\n return typed as OcgcoreFactory;\n }\n if (typed && typeof (typed as { default?: unknown }).default === 'function') {\n return (typed as { default: OcgcoreFactory }).default;\n }\n throw new Error('Invalid ocgcore factory module');\n}\n", "import type { OcgcoreModule } from './vendor/libocgcore.shared';\nimport { OcgcoreWrapper } from './ocgcore-wrapper';\nimport { loadOcgcoreFactory } from './load-ocgcore-factory';\n\nexport interface CreateOcgcoreWrapperOptions {\n moduleOverrides?: Partial<OcgcoreModule>;\n wasmBinary?: Uint8Array;\n locateFile?: (path: string, prefix?: string) => string;\n}\n\nexport async function createOcgcoreWrapper(\n options: CreateOcgcoreWrapperOptions = {},\n): Promise<OcgcoreWrapper> {\n const factory = await loadOcgcoreFactory();\n const overrides: Partial<OcgcoreModule> = {\n ...options.moduleOverrides,\n };\n if (options.wasmBinary) {\n overrides.wasmBinary =\n options.wasmBinary as unknown as OcgcoreModule['wasmBinary'];\n }\n if (options.locateFile) {\n overrides.locateFile =\n options.locateFile as unknown as OcgcoreModule['locateFile'];\n }\n const moduleInstance = await factory(overrides);\n return new OcgcoreWrapper(moduleInstance);\n}\n", "import JSZip from 'jszip';\n\nimport { ScriptReader } from '../types/callback';\nimport { getNodeFs } from '../utility/node-fs';\nimport { getNodePath } from '../utility/node-path';\n\nconst SCRIPT_PREFIX = './script/';\n\nfunction normalizePath(input: string): string {\n let path = input.replace(/\\\\/g, '/');\n if (path.startsWith(SCRIPT_PREFIX)) {\n path = path.slice(SCRIPT_PREFIX.length);\n }\n return path;\n}\n\nfunction buildCandidates(filename: string): string[] {\n const entries = [\n filename,\n `specials/${filename}`,\n `expansions/script/${filename}`,\n `script/${filename}`,\n ];\n const candidates: string[] = [];\n for (const entry of entries) {\n candidates.push(entry);\n if (!entry.startsWith('./')) {\n const dotEntry = entry.startsWith('/')\n ? `./${entry.slice(1)}`\n : `./${entry}`;\n candidates.push(dotEntry);\n }\n }\n return candidates;\n}\n\nfunction joinPath(baseDir: string, relativePath: string): string {\n const pathMod = getNodePath();\n if (pathMod) {\n return pathMod.join(baseDir, relativePath);\n }\n const trimmedBase = baseDir.replace(/[/\\\\]+$/, '');\n const trimmedRel = relativePath.replace(/^[/\\\\]+/, '');\n return `${trimmedBase}/${trimmedRel}`;\n}\n\nexport function MapScriptReader(\n ...maps: Array<Map<string, string | Uint8Array>>\n): ScriptReader {\n return (path) => {\n const filename = normalizePath(path);\n if (!filename.toLowerCase().endsWith('.lua')) {\n return null;\n }\n const candidates = buildCandidates(filename);\n for (const candidate of candidates) {\n for (const map of maps) {\n if (map.has(candidate)) {\n return map.get(candidate) ?? null;\n }\n }\n }\n return null;\n };\n}\n\nexport function DirScriptReader(...baseDirs: string[]): ScriptReader {\n const fs = getNodeFs();\n return (path) => {\n const filename = normalizePath(path);\n if (!filename.toLowerCase().endsWith('.lua')) {\n return null;\n }\n const candidates = buildCandidates(filename);\n for (const baseDir of baseDirs) {\n for (const candidate of candidates) {\n const normalized = candidate.startsWith('/')\n ? candidate.slice(1)\n : candidate;\n const fullPath = joinPath(baseDir, normalized);\n if (fs.existsSync(fullPath)) {\n return fs.readFileSync(fullPath);\n }\n }\n }\n return null;\n };\n}\n\nfunction normalizeZipEntryName(name: string): string[] {\n const normalized = name.replace(/\\\\/g, '/').replace(/^\\.?\\//, '');\n const names = new Set<string>();\n names.add(normalized);\n if (normalized.startsWith('script/')) {\n names.add(normalized.slice('script/'.length));\n }\n return Array.from(names);\n}\n\nexport async function ZipScriptReader(\n ...inputs: Array<Uint8Array | ArrayBuffer | Blob>\n): Promise<ScriptReader> {\n const maps = await Promise.all(\n inputs.map(async (data) => {\n const zip = await JSZip.loadAsync(data);\n const map = new Map<string, string | Uint8Array>();\n const entries = Object.values(zip.files);\n await Promise.all(\n entries.map(async (entry) => {\n if (entry.dir) {\n return;\n }\n if (!entry.name.toLowerCase().endsWith('.lua')) {\n return;\n }\n const content = await entry.async('uint8array');\n for (const name of normalizeZipEntryName(entry.name)) {\n map.set(name, content);\n }\n }),\n );\n return map;\n }),\n );\n return MapScriptReader(...maps);\n}\n\n/** @deprecated Use MapScriptReader instead. */\nexport function MapReader(\n ...maps: Array<Map<string, string | Uint8Array>>\n): ScriptReader {\n return MapScriptReader(...maps);\n}\n\n/** @deprecated Use DirScriptReader instead. */\nexport function DirReader(...baseDirs: string[]): ScriptReader {\n return DirScriptReader(...baseDirs);\n}\n\n/** @deprecated Use ZipScriptReader instead. */\nexport async function ZipReader(\n ...inputs: Array<Uint8Array | ArrayBuffer | Blob>\n): Promise<ScriptReader> {\n return ZipScriptReader(...inputs);\n}\n", "export function loadNodeModule<T>(id: string, altId?: string): T | null {\n const req =\n typeof module.require !== 'undefined' ? module.require : undefined;\n if (!req) {\n return null;\n }\n try {\n return req(id) as T;\n } catch {\n if (!altId) return null;\n try {\n return req(altId) as T;\n } catch {\n return null;\n }\n }\n}\n", "type NodeStats = {\n isFile: () => boolean;\n};\n\ntype NodeFsPromises = {\n readFile: (path: string) => Promise<Uint8Array>;\n readdir: (path: string) => Promise<string[]>;\n stat: (path: string) => Promise<NodeStats>;\n access: (path: string) => Promise<void>;\n};\n\nexport type NodeFs = {\n existsSync: (path: string) => boolean;\n readFileSync: (path: string) => Uint8Array;\n promises: NodeFsPromises;\n};\n\nimport { loadNodeModule } from './load-node-module';\n\nexport function getNodeFs(noThrow = false): NodeFs | null {\n const mod = loadNodeModule<NodeFs>('node:fs', 'fs');\n if (mod) return mod;\n if (noThrow) return null;\n throw new Error('Node.js fs module is not available.');\n}\n", "export type NodePath = {\n join: (...parts: string[]) => string;\n};\n\nimport { loadNodeModule } from './load-node-module';\n\nexport function getNodePath(noThrow = false): NodePath | null {\n const mod = loadNodeModule<NodePath>('node:path', 'path');\n if (mod) return mod;\n if (noThrow) return null;\n throw new Error('Node.js path module is not available.');\n}\n", "import { getNodeFs } from './node-fs';\nimport { getNodePath } from './node-path';\n\ntype NodeFs = NonNullable<ReturnType<typeof getNodeFs>>;\ntype NodePath = NonNullable<ReturnType<typeof getNodePath>>;\n\nfunction joinPath(\n pathMod: NodePath | null,\n baseDir: string,\n rel: string,\n): string {\n if (pathMod) {\n return pathMod.join(baseDir, rel);\n }\n const trimmedBase = baseDir.replace(/[/\\\\]+$/, '');\n const trimmedRel = rel.replace(/^[/\\\\]+/, '');\n return `${trimmedBase}/${trimmedRel}`;\n}\n\nasync function safeReadDir(fs: NodeFs, dirPath: string): Promise<string[]> {\n try {\n return await fs.promises.readdir(dirPath);\n } catch {\n return [];\n }\n}\n\nexport async function searchZips(\n fs: NodeFs,\n pathMod: NodePath | null,\n baseDir: string,\n): Promise<string[]> {\n const results: string[] = [];\n const rootEntries = await safeReadDir(fs, baseDir);\n for (const entry of rootEntries) {\n const lower = entry.toLowerCase();\n if (!lower.endsWith('.zip') && !lower.endsWith('.ypk')) {\n continue;\n }\n const fullPath = joinPath(pathMod, baseDir, entry);\n try {\n const stats = await fs.promises.stat(fullPath);\n if (stats.isFile()) {\n results.push(fullPath);\n }\n } catch {\n continue;\n }\n }\n\n const expansionsDir = joinPath(pathMod, baseDir, 'expansions');\n const expansionEntries = await safeReadDir(fs, expansionsDir);\n for (const entry of expansionEntries) {\n const lower = entry.toLowerCase();\n if (!lower.endsWith('.zip') && !lower.endsWith('.ypk')) {\n continue;\n }\n const fullPath = joinPath(pathMod, expansionsDir, entry);\n try {\n const stats = await fs.promises.stat(fullPath);\n if (stats.isFile()) {\n results.push(fullPath);\n }\n } catch {\n continue;\n }\n }\n\n return results;\n}\n", "import type { ScriptReader } from '../types/callback';\nimport { DirScriptReader, ZipScriptReader } from './script-readers';\nimport { getNodeFs } from '../utility/node-fs';\nimport { getNodePath } from '../utility/node-path';\nimport { searchZips } from '../utility/search-zips';\n\nfunction getNodeModuleOrThrow<T>(value: T | null, label: string): T {\n if (!value) {\n throw new Error(`${label} is not supported in this runtime.`);\n }\n return value;\n}\n\nexport async function DirScriptReaderEx(\n ...baseDirs: string[]\n): Promise<ScriptReader> {\n const fs = getNodeModuleOrThrow(getNodeFs(), 'DirScriptReaderEx');\n const pathMod = getNodeModuleOrThrow(getNodePath(), 'DirScriptReaderEx');\n const fsReader = DirScriptReader(...baseDirs);\n\n const zipInputs: Uint8Array[] = [];\n for (const baseDir of baseDirs) {\n const zipPaths = await searchZips(fs, pathMod, baseDir);\n for (const zipPath of zipPaths) {\n try {\n zipInputs.push(await fs.promises.readFile(zipPath));\n } catch {\n continue;\n }\n }\n }\n\n if (zipInputs.length === 0) {\n return fsReader;\n }\n\n const zipReader = await ZipScriptReader(...zipInputs);\n return (path) => fsReader(path) ?? zipReader(path);\n}\n", "import type { Database } from 'sql.js';\nimport { OcgcoreCommonConstants } from '../vendor';\nimport type { CardData } from '../types/card-data';\nimport type { CardReader } from '../types/callback';\n\ntype SqljsRow = {\n id: number;\n alias: number;\n setcode: number | bigint;\n type: number;\n atk: number;\n def: number;\n level: number;\n race: number;\n attribute: number;\n};\n\nfunction toUint16ArrayFromSetcode(value: number | bigint): Uint16Array {\n let raw = typeof value === 'bigint' ? value : BigInt(value >>> 0);\n const list = new Uint16Array(16);\n let idx = 0;\n while (raw !== 0n && idx < 16) {\n const chunk = raw & 0xffffn;\n if (chunk !== 0n) {\n list[idx] = Number(chunk);\n idx++;\n }\n raw >>= 16n;\n }\n return list;\n}\n\nfunction mapRowToCardData(row: SqljsRow): CardData {\n const type = (row.type ?? 0) >>> 0;\n const attack = row.atk ?? 0;\n let defense = row.def ?? 0;\n let linkMarker = 0;\n if ((type & OcgcoreCommonConstants.TYPE_LINK) >>> 0 !== 0) {\n linkMarker = defense;\n defense = 0;\n }\n const levelRaw = (row.level ?? 0) >>> 0;\n const level = (levelRaw & 0xff) >>> 0;\n const lscale = ((levelRaw >>> 24) & 0xff) >>> 0;\n const rscale = ((levelRaw >>> 16) & 0xff) >>> 0;\n\n return {\n code: row.id,\n alias: row.alias ?? 0,\n setcode: toUint16ArrayFromSetcode(row.setcode ?? 0),\n type,\n level,\n attribute: (row.attribute ?? 0) >>> 0,\n race: (row.race ?? 0) >>> 0,\n attack,\n defense,\n lscale,\n rscale,\n linkMarker,\n };\n}\n\nfunction queryOne(db: Database, cardId: number): CardData | null {\n if (typeof db.prepare === 'function') {\n const stmt = db.prepare(\n 'SELECT id, alias, setcode, type, atk, def, level, race, attribute FROM datas WHERE id = ?',\n );\n try {\n stmt.bind([cardId]);\n if (!stmt.step()) {\n return null;\n }\n const row = stmt.getAsObject() as unknown as SqljsRow;\n if (!row || row.id == null) {\n return null;\n }\n return mapRowToCardData(row);\n } finally {\n stmt.free();\n }\n }\n\n const res = db.exec(\n `SELECT id, alias, setcode, type, atk, def, level, race, attribute FROM datas WHERE id = ${cardId}`,\n );\n if (\n !res ||\n res.length === 0 ||\n !res[0].values ||\n res[0].values.length === 0\n ) {\n return null;\n }\n const row = res[0].values[0] as unknown[];\n return mapRowToCardData({\n id: row[0] as number,\n alias: row[1] as number,\n setcode: row[2] as number,\n type: row[3] as number,\n atk: row[4] as number,\n def: row[5] as number,\n level: row[6] as number,\n race: row[7] as number,\n attribute: row[8] as number,\n });\n}\n\nexport function SqljsCardReader(...dbs: Database[]): CardReader {\n return (cardId: number) => {\n for (const db of dbs) {\n const data = queryOne(db, cardId);\n if (data) {\n return data;\n }\n }\n return null;\n };\n}\n\n/** @deprecated Use SqljsCardReader instead. */\nexport function createSqljsCardReader(...dbs: Database[]): CardReader {\n return SqljsCardReader(...dbs);\n}\n", "import JSZip from 'jszip';\n\nimport type { CardReader } from '../types/callback';\nimport { getNodeFs } from '../utility/node-fs';\nimport { getNodePath } from '../utility/node-path';\nimport { searchZips } from '../utility/search-zips';\nimport { SqljsCardReader } from './sqljs-card-reader';\nimport type { SqlJsStatic } from 'sql.js';\n\ntype NodeFs = NonNullable<ReturnType<typeof getNodeFs>>;\ntype NodePath = NonNullable<ReturnType<typeof getNodePath>>;\n\nfunction joinPath(\n pathMod: NodePath | null,\n baseDir: string,\n rel: string,\n): string {\n if (pathMod) {\n return pathMod.join(baseDir, rel);\n }\n const trimmedBase = baseDir.replace(/[/\\\\]+$/, '');\n const trimmedRel = rel.replace(/^[/\\\\]+/, '');\n return `${trimmedBase}/${trimmedRel}`;\n}\n\nfunction getNodeModuleOrThrow<T>(value: T | null, label: string): T {\n if (!value) {\n throw new Error(`${label} is not supported in this runtime.`);\n }\n return value;\n}\n\nasync function safeReadDir(fs: NodeFs, dirPath: string): Promise<string[]> {\n try {\n return await fs.promises.readdir(dirPath);\n } catch {\n return [];\n }\n}\n\nasync function collectFsDbPaths(\n fs: NodeFs,\n pathMod: NodePath | null,\n baseDir: string,\n): Promise<string[]> {\n const collectCdbFiles = async (dirPath: string): Promise<string[]> => {\n const paths: string[] = [];\n const entries = await safeReadDir(fs, dirPath);\n for (const entry of entries) {\n if (!entry.toLowerCase().endsWith('.cdb')) {\n continue;\n }\n const fullPath = joinPath(pathMod, dirPath, entry);\n try {\n const stats = await fs.promises.stat(fullPath);\n if (stats.isFile()) {\n paths.push(fullPath);\n }\n } catch {\n continue;\n }\n }\n return paths;\n };\n\n const results: string[] = [];\n\n const expansionsDir = joinPath(pathMod, baseDir, 'expansions');\n results.push(...(await collectCdbFiles(expansionsDir)));\n\n results.push(...(await collectCdbFiles(baseDir)));\n\n return results;\n}\n\nfunction isRootCdbEntry(entryName: string): boolean {\n const normalized = entryName.replace(/\\\\/g, '/').replace(/^\\.?\\//, '');\n return !normalized.includes('/') && normalized.toLowerCase().endsWith('.cdb');\n}\n\nexport async function DirCardReader(\n sqljs: SqlJsStatic,\n ...baseDirs: string[]\n): Promise<CardReader> {\n const fs = getNodeModuleOrThrow(getNodeFs(), 'DirCardReader');\n const pathMod = getNodeModuleOrThrow(getNodePath(), 'DirCardReader');\n\n const dbs: unknown[] = [];\n for (const baseDir of baseDirs) {\n const dbPaths = await collectFsDbPaths(fs, pathMod, baseDir);\n for (const dbPath of dbPaths) {\n try {\n const bytes = await fs.promises.readFile(dbPath);\n dbs.push(new sqljs.Database(bytes));\n } catch {\n continue;\n }\n }\n }\n\n for (const baseDir of baseDirs) {\n const zipPaths = await searchZips(fs, pathMod, baseDir);\n for (const zipPath of zipPaths) {\n try {\n const bytes = await fs.promises.readFile(zipPath);\n const zip = await JSZip.loadAsync(bytes);\n const entries = Object.values(zip.files);\n for (const entry of entries) {\n if (entry.dir || !isRootCdbEntry(entry.name)) {\n continue;\n }\n try {\n const content = await entry.async('uint8array');\n dbs.push(new sqljs.Database(content));\n } catch {\n continue;\n }\n }\n } catch {\n continue;\n }\n }\n }\n\n return SqljsCardReader(...(dbs as Parameters<typeof SqljsCardReader>));\n}\n", "import { YGOProYrp } from 'ygopro-yrp-encode';\n\nimport { OcgcoreDuel } from './ocgcore-duel';\nimport { OcgcoreWrapper } from './ocgcore-wrapper';\nimport { OcgcoreCommonConstants, OcgcoreScriptConstants } from './vendor';\nimport { OcgcoreProcessResult } from './types';\n\nconst { LOCATION_DECK, LOCATION_EXTRA, POS_FACEDOWN_DEFENSE } =\n OcgcoreScriptConstants;\n\nfunction normalizeYrp(input: YGOProYrp | Uint8Array): YGOProYrp {\n if (input instanceof YGOProYrp) {\n return input;\n }\n return new YGOProYrp().fromYrp(input);\n}\n\nfunction loadDeck(\n duel: OcgcoreDuel,\n deck: { main?: number[]; extra?: number[] } | null,\n owner: number,\n player: number,\n): void {\n if (!deck) return;\n for (const code of deck.main ?? []) {\n duel.newCard({\n code,\n owner,\n player,\n location: LOCATION_DECK,\n sequence: 0,\n position: POS_FACEDOWN_DEFENSE,\n });\n }\n for (const code of deck.extra ?? []) {\n duel.newCard({\n code,\n owner,\n player,\n location: LOCATION_EXTRA,\n sequence: 0,\n position: POS_FACEDOWN_DEFENSE,\n });\n }\n}\n\nfunction loadTagDeck(\n duel: OcgcoreDuel,\n deck: { main?: number[]; extra?: number[] } | null,\n owner: number,\n): void {\n if (!deck) return;\n for (const code of deck.main ?? []) {\n duel.newTagCard({\n code,\n owner,\n location: LOCATION_DECK,\n });\n }\n for (const code of deck.extra ?? []) {\n duel.newTagCard({\n code,\n owner,\n location: LOCATION_EXTRA,\n });\n }\n}\n\nfunction setRegistryValue(duel: OcgcoreDuel, key: string, value: string): void {\n duel.setRegistryValue(key, value);\n}\n\nexport function createDuelFromYrp(\n wrapper: OcgcoreWrapper,\n yrpInput: YGOProYrp | Uint8Array,\n) {\n const yrp = normalizeYrp(yrpInput);\n const header = yrp.header;\n const seedSequence = header?.seedSequence ?? [];\n const duel =\n seedSequence.length > 0\n ? wrapper.createDuelV2(seedSequence)\n : wrapper.createDuel(header?.seed ?? 0);\n\n setRegistryValue(duel, 'duel_mode', yrp.isTag ? 'tag' : 'single');\n setRegistryValue(duel, 'start_lp', String(yrp.startLp));\n setRegistryValue(duel, 'start_hand', String(yrp.startHand));\n setRegistryValue(duel, 'draw_count', String(yrp.drawCount));\n\n const playerNames = yrp.isTag\n ? [\n yrp.hostName,\n yrp.tagHostName ?? '',\n yrp.tagClientName ?? '',\n yrp.clientName,\n ]\n : [yrp.hostName, yrp.clientName];\n for (let i = 0; i < playerNames.length; i++) {\n setRegistryValue(duel, `player_name_${i}`, playerNames[i] ?? '');\n }\n setRegistryValue(duel, 'player_type_0', '0');\n setRegistryValue(duel, 'player_type_1', '1');\n\n duel.setPlayerInfo({\n player: 0,\n lp: yrp.startLp,\n startHand: yrp.startHand,\n drawCount: yrp.drawCount,\n });\n duel.setPlayerInfo({\n player: 1,\n lp: yrp.startLp,\n startHand: yrp.startHand,\n drawCount: yrp.drawCount,\n });\n\n duel.preloadScript('./script/patches/entry.lua');\n duel.preloadScript('./script/special.lua');\n duel.preloadScript('./script/init.lua');\n\n if (yrp.isSingleMode && yrp.singleScript) {\n duel.preloadScript(`./single/${yrp.singleScript}`);\n } else if (yrp.isTag) {\n loadDeck(duel, yrp.hostDeck, 0, 0);\n loadTagDeck(duel, yrp.tagHostDeck, 0);\n loadDeck(duel, yrp.clientDeck, 1, 1);\n loadTagDeck(duel, yrp.tagClientDeck, 1);\n } else {\n loadDeck(duel, yrp.hostDeck, 0, 0);\n loadDeck(duel, yrp.clientDeck, 1, 1);\n }\n\n duel.startDuel(yrp.opt >>> 0);\n return { yrp, duel };\n}\n\nexport function consumeResponseFromOcgcoreProcess(\n duel: OcgcoreDuel,\n result: OcgcoreProcessResult,\n responses: Uint8Array[],\n) {\n if (\n result.raw.length > 0 &&\n result.raw[0] === OcgcoreCommonConstants.MSG_RETRY\n ) {\n throw new Error('Got MSG_RETRY');\n }\n\n if (result.status === 0) {\n return false;\n }\n if (result.status === 1) {\n if (result.raw.length === 0) {\n return false;\n }\n const response = responses.shift();\n if (!response) {\n return true;\n }\n duel.setResponse(response);\n return false;\n }\n return true;\n}\n\nexport function* processYrpDuelStep(duel: OcgcoreDuel, yrp: YGOProYrp) {\n const responses = yrp.responses.slice();\n\n while (true) {\n const result = duel.process();\n yield {\n duel,\n result,\n responses,\n };\n\n if (consumeResponseFromOcgcoreProcess(duel, result, responses)) {\n break;\n }\n }\n}\n\nexport function* playYrpStep(\n ocgcoreWrapper: OcgcoreWrapper,\n yrpInput: YGOProYrp | Uint8Array,\n) {\n const { yrp, duel } = createDuelFromYrp(ocgcoreWrapper, yrpInput);\n\n try {\n for (const stepResult of processYrpDuelStep(duel, yrp)) {\n yield stepResult;\n }\n } finally {\n duel.endDuel();\n }\n}\n\nexport const playYrp = (\n ocgcoreWrapper: OcgcoreWrapper,\n yrpInput: YGOProYrp | Uint8Array,\n) => {\n const results: Uint8Array[] = [];\n for (const result of playYrpStep(ocgcoreWrapper, yrpInput)) {\n results.push(result.result.raw);\n }\n return results;\n};\n", "import { OcgcoreWrapper } from './ocgcore-wrapper';\nimport { OcgcoreCommonConstants, OcgcoreScriptConstants } from './vendor';\nimport { OcgcoreMessageType } from './types/ocgcore-enums';\n\nconst { LOCATION_DECK, POS_FACEUP_ATTACK } = OcgcoreScriptConstants;\n\nexport interface TestCardMessage {\n type: OcgcoreMessageType;\n message: string;\n}\n\nexport function testCard(\n ocgcoreWrapper: OcgcoreWrapper,\n ...ids: number[]\n): TestCardMessage[] {\n const logs: TestCardMessage[] = [];\n const duel = ocgcoreWrapper.createDuelV2(\n Array.from(\n { length: 8 },\n () => Math.floor(Math.random() * 0xffffffff) >>> 0,\n ),\n );\n\n ocgcoreWrapper.setMessageHandler((_duel, message, type) => {\n if (duel.duelPtr !== _duel.duelPtr) return;\n logs.push({ type, message });\n });\n\n duel.preloadScript('./script/special.lua');\n duel.preloadScript('./script/init.lua');\n duel.setPlayerInfo({ player: 0, lp: 8000, startHand: 5, drawCount: 1 });\n duel.setPlayerInfo({ player: 1, lp: 8000, startHand: 5, drawCount: 1 });\n\n for (const code of ids) {\n duel.newCard({\n code,\n owner: 0,\n player: 0,\n location: LOCATION_DECK,\n sequence: 0,\n position: POS_FACEUP_ATTACK,\n });\n }\n\n duel.startDuel(0);\n\n while (true) {\n const { status, raw } = duel.process();\n if (raw.length > 0 && raw[0] === OcgcoreCommonConstants.MSG_RETRY) {\n break;\n }\n if (status === 0) {\n continue;\n }\n break;\n }\n\n duel.endDuel();\n return logs;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["Buffer", "OcgcoreMessageType", "OcgcoreDuelRule", "OcgcoreDuelOptionFlag", "joinPath", "row", "JSZip", "joinPath", "getNodeModuleOrThrow", "safeReadDir", "JSZip", "LOCATION_DECK", "Buffer"]
7
7
  }
@@ -1,5 +1,7 @@
1
1
  import { OcgcoreModule } from './vendor/libocgcore.shared';
2
2
  import { OcgcoreDuel } from './ocgcore-duel';
3
+ import { CardDataInput } from './types/card-data';
4
+ import { OcgcoreMessageType } from './types/ocgcore-enums';
3
5
  import { CardReader, MessageHandler, ScriptReader } from './types/callback';
4
6
  export declare class OcgcoreWrapper {
5
7
  ocgcoreModule: OcgcoreModule;
@@ -12,9 +14,9 @@ export declare class OcgcoreWrapper {
12
14
  private scriptReaderFunc;
13
15
  private cardReaderFunc;
14
16
  private messageHandlerFunc;
15
- private scriptReaders;
16
- private cardReaders;
17
- private messageHandlers;
17
+ scriptReaders: ScriptReader[];
18
+ cardReaders: CardReader[];
19
+ messageHandlers: MessageHandler[];
18
20
  private heapU8;
19
21
  private heapView;
20
22
  private encoder;
@@ -24,6 +26,9 @@ export declare class OcgcoreWrapper {
24
26
  scriptBufferSize?: number;
25
27
  logBufferSize?: number;
26
28
  });
29
+ readScript(scriptPath: string): Uint8Array | null;
30
+ readCard(cardId: number): CardDataInput | null;
31
+ handleMessage(duel: OcgcoreDuel, message: string, type: OcgcoreMessageType): void;
27
32
  getUTF8String(ptr: number): string;
28
33
  setHeap(ptr: number, data: Uint8Array): void;
29
34
  copyHeap(ptr: number, length: number): Uint8Array;
@@ -1,2 +1 @@
1
- export * from './ocgcore-constants';
2
- export * from './script-constants';
1
+ export { OcgcoreCommonConstants, OcgcoreScriptConstants, } from 'ygopro-msg-encode';
package/index.ts CHANGED
@@ -15,7 +15,7 @@ export * from './src/structs';
15
15
  export * from './src/adapters';
16
16
  export * from './src/constants';
17
17
  // export * from './src/utility';
18
- export * from './src/vendor';
18
+ export * as _OcgcoreConstants from './src/vendor';
19
19
  export * from './src/script-reader';
20
20
  export * from './src/card-reader';
21
21
  export * from './src/play-yrp';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishipro-core.js",
3
3
  "description": "WASM wrapper for YGOPro/ocgcore, designed for both Node and browser runtimes.",
4
- "version": "1.1.5",
4
+ "version": "1.2.0",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",
7
7
  "types": "dist/index.d.ts",
@@ -19,7 +19,6 @@
19
19
  "build:esm": "node build.js esm",
20
20
  "build:types": "node build.js types",
21
21
  "clean": "node build.js clean",
22
- "gen-constants": "node scripts/gen-constants.js",
23
22
  "test": "jest --passWithNoTests",
24
23
  "start": "node dist/index.cjs",
25
24
  "fetch-ocgcore": "node scripts/download-vendor.js"
@@ -41,7 +40,7 @@
41
40
  "buffer": "^6.0.3",
42
41
  "jszip": "^3.10.1",
43
42
  "sql.js": "^1.13.0",
44
- "ygopro-msg-encode": "^1.0.4",
43
+ "ygopro-msg-encode": "^1.0.5",
45
44
  "ygopro-yrp-encode": "^1.0.1"
46
45
  },
47
46
  "jest": {