From 93092b73d0eaf7b2162ddd457e67ce4761eecdfb Mon Sep 17 00:00:00 2001 From: gamer147 Date: Mon, 6 Jul 2026 13:16:33 -0400 Subject: [PATCH] docs(opcodes): retire superseded opcode files; update structure + doc pointers - rm vm-map/opcodes-himegari.json, vm-map/himegari-opcode-notes.md (folded into opcodes.toml; in history) - PROJECT-STRUCTURE.md: opcodes.toml single-source-of-truth + generated artifacts + convention - repoint dead references in vm-mapping-plan/sys4-format-notes/himegari-port-reference/phase-a-slice-plan Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/PROJECT-STRUCTURE.md | 21 +- docs/himegari-port-reference.md | 2 +- docs/phase-a-slice-plan.md | 2 +- docs/sys4-format-notes.md | 2 +- docs/vm-mapping-plan.md | 6 +- vm-map/himegari-opcode-notes.md | 111 -- vm-map/opcodes-himegari.json | 2023 ------------------------------- 7 files changed, 21 insertions(+), 2146 deletions(-) delete mode 100644 vm-map/himegari-opcode-notes.md delete mode 100644 vm-map/opcodes-himegari.json diff --git a/docs/PROJECT-STRUCTURE.md b/docs/PROJECT-STRUCTURE.md index 819b45a..8121635 100644 --- a/docs/PROJECT-STRUCTURE.md +++ b/docs/PROJECT-STRUCTURE.md @@ -33,8 +33,10 @@ S:\Game Hacking\Eushully\Himegari\ ← workspace root (three siblings) │ │ where the game / extracted / build dirs are. All │ │ tools import it; relocatable with no other edits. │ ├── sys4load.py loader + disassembler (opcode-decoding) - │ ├── age_opcodes.py 548-entry AGE opcode/arg-type table (pristine) - │ ├── age_opcodes_himegari.py inferred Himegari opcode-name overlay + │ ├── age_opcodes.py 548-entry Kelebek AGE opcode/arg-type table (PRISTINE; never edit) + │ ├── opcodes_build.py generator/linter: vm-map/opcodes.toml -> the 4 artifacts below + │ ├── opcodes_model.py load + lint (dangling-ref, confidence-ceiling, vocab) + dependents + │ ├── age_opcodes_himegari.py GENERATED from opcodes.toml (do not hand-edit) │ ├── vm0.py headless Python VM (Phase A0); `--test` = RECOVER unit test │ ├── extract_phase2.py batch: disasm + text + data extraction │ ├── extract_init.py, global_map.py … *INIT parsers, global-var map builder @@ -46,9 +48,10 @@ S:\Game Hacking\Eushully\Himegari\ ← workspace root (three siblings) │ └── LzssCpp.dll its LZSS codec dependency │ ├── vm-map/ VM / reverse-engineering reference artifacts - │ ├── opcodes-himegari.json validated opcode table (what this game uses) + │ ├── opcodes.toml ★ CANONICAL opcode reference (hand-edited: ABI + semantics + │ │ + provenance + depends_on). Single source of truth for opcodes. │ ├── kelebek1-age-shared.cpp / -disassembler.cpp upstream opcode-table source - │ └── opcode-leads.json, small-script-listings.md, himegari-opcode-notes.md + │ └── opcode-leads.json, small-script-listings.md │ ├── docs/ all documentation │ ├── PROJECT-STRUCTURE.md this file @@ -58,7 +61,8 @@ S:\Game Hacking\Eushully\Himegari\ ← workspace root (three siblings) │ ├── himegari-port-reference.md master reference + engine background │ ├── name-resolution.md call-script + global-var name recovery │ ├── sys4-format-notes.md byte-level container format - │ └── script-inventory.md what the 481 scripts are + │ ├── script-inventory.md what the 481 scripts are + │ └── opcode-reference.md GENERATED from opcodes.toml (human-readable opcode reference) │ ├── build/ DERIVED (our-work-side) — generated by tools/; disposable │ ├── disasm/ .asm — human-readable disassembly, one per script @@ -69,7 +73,8 @@ S:\Game Hacking\Eushully\Himegari\ ← workspace root (three siblings) │ ├── data/ parsed data tables (*INIT → JSON) │ ├── scripts-json/ machine-readable full dumps (on demand via --json) │ ├── global-var-map.{json,md} partial global-variable name map - │ └── manifest.json, opcode-coverage.md + │ ├── opcodes.json GENERATED from opcodes.toml (machine view for the C# VM) + │ └── manifest.json, opcode-coverage.md (opcode-coverage.md GENERATED from opcodes.toml) │ └── godot/ DELIVERABLE — the Godot/C# engine project (built in Phase A2+) ``` @@ -90,6 +95,10 @@ S:\Game Hacking\Eushully\Himegari\ ← workspace root (three siblings) - **`build/` and `extracted/` are disposable.** `build/` regenerates via `tools/extract_phase2.py` (or `sys4load.py`); `extracted/` regenerates via `bin/BinExtractALF.exe` on the `.ALF` files. Safe to delete and rebuild; do not hand-edit. +- **Opcode knowledge is edited ONLY in `vm-map/opcodes.toml`** (ABI + semantics + provenance + + `depends_on`). Run `tools/opcodes_build.py --build` to regenerate the shim (`tools/age_opcodes_himegari.py`), + machine JSON (`build/opcodes.json`), reference (`docs/opcode-reference.md`), and coverage. `--lint` + checks dangling deps / confidence-ceiling / vocabulary. Kelebek's `tools/age_opcodes.py` stays pristine. - **Encoding:** all generated text is UTF-8 (source strings are cp932/Shift-JIS, decoded on extraction). Run Python as `py -3.11 -X utf8`. - **The game install is a runnable unit** — do not relocate `AGE.EXE`/`*.ALF`/DLLs relative to each diff --git a/docs/himegari-port-reference.md b/docs/himegari-port-reference.md index 1d1542f..82a4654 100644 --- a/docs/himegari-port-reference.md +++ b/docs/himegari-port-reference.md @@ -109,7 +109,7 @@ See [sys4-format-notes.md](sys4-format-notes.md). Confirmed across all 481 files > this game directly — **476/476 scripts decode 100% clean, 1.46M instructions, 0 > unknown opcodes, 37,392/0 string args resolved.** Model: code = instructions of > ` + argc*()`, length `1+2*argc`; stop code at the first inline -> string offset. Himegari uses 248 opcodes, 52 named (see `vm-map/opcodes-himegari.json`). +> string offset. Himegari uses 248 opcodes, 52 named (see `vm-map/opcodes.toml`). > Header fields F0–F5 are now known = local-variable counts (Kelebek's `BinaryHeader`). > **Unpacking `AGE.EXE` is no longer the blocker** — it's demoted to optional Phase 3 > enrichment (prefer Frida hooking). Reproduce: `tools/validate_opcode_table.py`. diff --git a/docs/phase-a-slice-plan.md b/docs/phase-a-slice-plan.md index 1a65d69..502422a 100644 --- a/docs/phase-a-slice-plan.md +++ b/docs/phase-a-slice-plan.md @@ -118,7 +118,7 @@ all parsing/decoding (no new parser). SC/SP), `--scene NAME` (detailed diff for one script), plus `load_oracle`/`subsequence_status`. **op 0x90 investigated in depth — it is input chrome, NOT a correctness hole** (full evidence: -`vm-map/himegari-opcode-notes.md` §F). Kelebek left it "ukn"; corpus analysis resolves it: +`vm-map/opcodes.toml` op 0x90 `details`). Kelebek left it "ukn"; corpus analysis resolves it: `0x90 x y w h tgt_a tgt_b tgt_c` (argc 7) is a **cursor/input hotspot hit-test** that branches per interaction outcome and **falls through to pc+1 when nothing matches** (design-confirmed: enc.len 15 lands the next instr on the fall-through statement). It occurs ONLY in a shared ADV-chrome subroutine diff --git a/docs/sys4-format-notes.md b/docs/sys4-format-notes.md index 5f3bd85..46b3b9d 100644 --- a/docs/sys4-format-notes.md +++ b/docs/sys4-format-notes.md @@ -11,7 +11,7 @@ live in `tools/probe_*.py`. > offset. 476/476 scripts decode clean (0 unknown opcodes). Header fields F0–F5 are > **local-variable counts** (F0=local_integer_1, F1=local_floats, F2=local_strings_1, > F3=local_integer_2, F4=unknown, F5=local_strings_2). See `vm-mapping-plan.md` and -> `vm-map/opcodes-himegari.json`. The tag values below (0x71/0x03/0x8F etc.) are the +> `vm-map/opcodes.toml`. The tag values below (0x71/0x03/0x8F etc.) are the > *opcodes at table targets*: 0x8F=`call`, 0x03=`call-script`, 0x71=`u0041A7B0`. ## Header — CONFIRMED diff --git a/docs/vm-mapping-plan.md b/docs/vm-mapping-plan.md index 34316ba..3d65131 100644 --- a/docs/vm-mapping-plan.md +++ b/docs/vm-mapping-plan.md @@ -15,13 +15,13 @@ - Kelebek1/Eushully-Decompiler's `age-shared.cpp` contains an opcode table (`{op_code, label, argument_count}`) and a header parser that **explicitly handles the SYS4 signature** (`"SYS4"`, header length `0x3C`, cp932 XOR-0xFF strings) — this exact game's format. - The instruction model: **code = a flat sequence of instructions; each instruction = `` followed by `argument_count` arguments, where every argument is a `` pair. Instruction length in dwords = `1 + 2*argc`.** Inline strings sit *after* the code inside the `[0,F8)` region; stop decoding at the lowest string offset referenced (a type-2 arg, or op `0x64` arg 1). - Applying that table to Himegari's scripts: **476 of 476 parseable scripts decode 100% clean — 1,463,788 instructions, 0 unknown opcodes, and all 37,392 inline-string arguments resolve to valid decoded strings.** (The 7 non-decoding `.BIN` are container-level non-scripts like `SYS4AB`/`SYS4INI`, different magic.) -- Himegari uses **248 distinct opcodes; 52 have semantic names** (in `vm-map/opcodes-himegari.json`). The other 196 decode perfectly (known length) but have engine-internal names only (`u004xxxx`). **Caveat (measured 2026-07-06):** the named 52 are the dialogue/ADV core but cover only **72.6% of instruction volume**, not "the entire core" — the unnamed 27.4% is concentrated in the highest-frequency opcodes and must be partly addressed before Phase 4. See Phase 3's coverage correction. +- Himegari uses **248 distinct opcodes; 52 have semantic names** (in `vm-map/opcodes.toml`). The other 196 decode perfectly (known length) but have engine-internal names only (`u004xxxx`). **Caveat (measured 2026-07-06):** the named 52 are the dialogue/ADV core but cover only **72.6% of instruction volume**, not "the entire core" — the unnamed 27.4% is concentrated in the highest-frequency opcodes and must be partly addressed before Phase 4. See Phase 3's coverage correction. **This resolves the header unknowns too.** Kelebek's `BinaryHeader` struct maps my F0–F12 exactly: `F0`=local_integer_1, `F1`=local_floats, `F2`=local_strings_1, `F3`=local_integer_2, `F4`=unknown, `F5`=local_strings_2, `F6`=sub_header_length(0x1C), then the three (length, offset) table pairs. The "flag fields" were **local-variable counts**. Arg `type` codes: 0=immediate, 1=float, 2=string, 3=global-int, 4=global-float, 5=global-string, 6=global-ptr, 8=global-string-ptr, 9=local-int, A=local-float, B=local-string, C=local-ptr, D=local-float-ptr, E=local-string-ptr. **Consequence:** Unpacking `AGE.EXE` (still packed — see appendix) drops from *the blocker* to an *optional enrichment* used only to name the 196 unnamed opcodes' fine semantics, and even that has a cheaper dynamic alternative. -**Provenance / sources in `vm-map/`:** `kelebek1-age-shared.cpp` (the opcode table), `kelebek1-disassembler.cpp` (the parser), `opcodes-himegari.json` (validated table filtered to what this game uses), `opcode-leads.json` + `small-script-listings.md` (this session's static analysis, now confirmed). +**Provenance / sources in `vm-map/`:** `kelebek1-age-shared.cpp` (the opcode table), `kelebek1-disassembler.cpp` (the parser), `opcodes.toml` (validated table filtered to what this game uses), `opcode-leads.json` + `small-script-listings.md` (this session's static analysis, now confirmed). --- @@ -93,7 +93,7 @@ changes, not the toolkit. The genuine rare tail stays lazy (name on demand). - [x] **3.0 — Inference pass DONE (2026-07-06).** Classified the top 21 unnamed opcodes → **instruction coverage 72.62% (named) → 96.94% (classified)**; ~90.5% is VM-handleable by inference alone. Tooling: `tools/opcode_context.py` (evidence gatherer). Results: - `vm-map/himegari-opcode-notes.md` (per-op evidence), `tools/age_opcodes_himegari.py` + `vm-map/opcodes.toml` (per-op evidence + provenance), `tools/age_opcodes_himegari.py` (`INFERRED` dict consumed by the disassembler + future VM), `build/opcode-coverage.md` (tiers + Frida/Unicorn shortlist). `sys4load` now renders inferred names (verified: MENU's `label-def 0x71` land exactly on its T1 targets). Key findings: `0x1f4`/`0x1f5` = stmt diff --git a/vm-map/himegari-opcode-notes.md b/vm-map/himegari-opcode-notes.md deleted file mode 100644 index 13420c4..0000000 --- a/vm-map/himegari-opcode-notes.md +++ /dev/null @@ -1,111 +0,0 @@ -# Himegari opcode inference notes - -Classification of the top ~20 unnamed opcodes (Phase 3.0, inference-only, 2026-07-06). -Machine-readable form: `tools/age_opcodes_himegari.py` (`INFERRED`). Evidence gathered with -`tools/opcode_context.py` over the 481-script `Output/DATA1` corpus (1,502,986 instructions). - -Baseline: named opcodes = **72.62%** of instruction volume. Classifying the top 20 unnamed -ops covers to **~96.7%** cumulative. Kelebek labels (`u004xxxx`) are engine addresses from a -*later* AGE title — opcode number + argc are validated for Himegari (481/481 clean decode); -the meanings below are inferred and flagged by confidence + confirmation method. - -## Buckets - -### A. Statement/scope scaffolding — zero-arg, no operands, safe VM no-ops (HIGH) -The compiler brackets statements/blocks with operand-less markers. They carry no data and -sit at structural boundaries, so the VM v1 skips them; the Phase-4 dialogue harness confirms. - -- **0x1f4 `stmt-begin`** (60,297; 4.01%) — opens scripts (first instr of ADDEN/ADDEXP/…), and - `stmt-end 0x1f5 → 0x1f4` pairs 25,899×. Successor is the statement's first real op (eq/mov/call). -- **0x1f5 `stmt-end`** (60,297; 4.01%) — equal count to 0x1f4; precedes `exit`/next statement. - `... → 0x1f5 → stmt-begin/lt/show-text`. -- **0x1d5 `cond-block`** (34,238; 2.28%) — **always** preceded by `jcc`; marks the fall-through - (condition-true) block entry. `jcc cond -1 label; 0x1d5; `. -- **0x1bc `block-mark`** (26,865; 1.79%) — `jcc → 0x1bc → mov` (26,413×): another block boundary. -- **0x1bf `call-end`** (8,752; 0.58%) — `call → 0x1bf → stmt-end` (8,600×): end-of-call statement. - -### B. Statement metadata with an id — tentative no-op, confirm via harness (MED/LOW) -Same scaffolding family but carrying an immediate; likely line numbers / statement descriptors. -Treated as no-ops in v1 but flagged `method=harness` because a wrong no-op here could drop state. - -- **0x21b `line-id?`** (27,016; 1.80%) — `mov → 0x21b → stmt-end`. Arg is 0/1/small. Sits - near `savemesskip`/`loadmesskip` dev-comments (MENU/BUNKI) — **verify it isn't a message-control - toggle** before trusting the no-op. -- **0x1d2 `stmt-desc?`** (17,323; 1.15%) — always immediately after `stmt-begin 0x1f4`; 2 imm args - (e.g. `0x2 0x5`) then a `mov`. Reads like a per-statement descriptor. -- **0x258 `decl?`** (7,224; 0.48%) — runs in a chain right after script-entry `0x259`, enumerating - ids (`0x4 0x1`, `0x5 0x1`, `0x6 0x1`, …). Prologue declaration/registration table. - -### C. Structural (HIGH) -- **0x71 `label-def`** (26,445; 1.76%) — its corpus count **exactly equals the T1 table size**, so - this is the instruction T1 (tag 0x71) indexes: a label/anchor definition. Arg is a small id. - Preceded by `end-text-line`/`call`. VM v1 = no-op; **revisit if menu/callback dispatch resolves - entries by this id** (T1 may be a named-entry-point table). - -### D. Computational — exact behaviour via Unicorn/inference (MED/LOW) -- **0x215 `count?`** (5,675; 0.38%) — writes its first operand (a global) which is then tested - `gre …, 0` / `lt` and branched on. Signature (global,global). Looks like a count / search-returns - -index helper. Micro-exec candidate. -- **0x1a2 `resolve-handle?`** (17,585; 1.17%) — takes a `local-ptr` just filled by `lookup-array`, - then `create-texture` follows. Resolves a looked-up resource/handle. Borderline effectful → Frida. - -### E. Effectful — draw / UI / audio / ADV; need Frida to confirm (see shortlist) -All in the 0x420–0x421 graphics family or 0x41D audio family, clustered with named draw/audio ops. -Not semantically no-ops; VM must implement (or knowingly stub) them. - -- **0x7a `text-param?`** (17,324; 1.15%) — `sub` computes a value, then `0x7a `, - then `show-text`. A text speed / auto-wait / window parameter for the following line. (The review - guessed "computational"; context says ADV-text-effectful.) -- **0x202 `draw-blit?`** (9,223) / **0x203 `draw?`** (9,149) — 4–5 coord/size args, preceded by - coordinate arithmetic, chained with `draw-texture`/`u00420950`. Blit/positioned-draw. -- **0x1f7 `ui-elem?`** (7,735) / **0x1fa `ui-clear?`** (6,126) — paired (`0x1f7 → 0x1fa` 5,014×); - create/begin a UI element then show/hide/clear it by id. From MENU: `0x1f7 0x11170 0xc80`, `0x1fa 0x49/0x4a/0x4b`. -- **0x217 / 0x218 / 0x21a `gfx-geom?`** (~5,000 each) — a chain each taking 4 global-ints - (`0x21a → 0x218`, `0x217 → 0x1ff`); rect/coordinate/geometry transforms in the draw library. -- **0x1ff `draw?`** (3,926) — 4 args then `call`; follows `0x217`. -- **0xb6 `snd-ctrl?`** (4,805) — 0x41D family, self-chains, near `play-sound-effect`/`0xb5`; sound - channel / volume / stop control. - -### F. Input / UI hotspot branch — op 0x90 & 0x97 (A0-slice deep-dive, 2026-07-06 s2, HIGH) -Solved while investigating the A0 EMPTY scenes. Kelebek: `{0x90,"u0041BEB0",0x7} // args 5,6,7 = -code locations` (they left it "ukn"). Corpus evidence (`scratchpad/analyze_0x90.py` over all scripts): - -- **op 0x90 = pointer/input hotspot hit-test branch.** Encoding `0x90 x y w h tgt_a tgt_b tgt_c` - (argc 7; targets `0xffffffff` = unused). Branches to one of 3 targets per interaction outcome and - **falls through to pc+1 when nothing matches** — design-confirmed: a 0x90 is 15 dwords, and the - instruction after the last one lands exactly on the fall-through statement (`0xd0+15 = 0xdf`). -- **Two forms, both only in one shared subroutine:** - - *Mode A* (1505 = 5×301): all-immediate, `w=h=20`. The five on-screen ADV buttons — identical in - all 301 scripts at `(x,y) = (684|706|728|750|772, 572)`, each setting one of `G[0x6c9..0x6cd]` to - 1 (target a) / 0 (target b) / 0+run-action (target c). Reads as hover-enter / hover-leave / click. - - *Mode B* (903 = 3×301): local-int operands, `w=h=1`, only target c real — a keyed/degenerate - 2-way input test (fall through, or jump to c). Operands are `0-1000`-based sentinels (key codes?). -- **Distribution is unanimous: every one of the 301 ADV scripts has EXACTLY 8 sites (5 A + 3 B).** - Zero scene-specific use — it is boilerplate ADV chrome (the system button row + input polling), not - gameplay branching. -- **VM handling:** headless (no cursor/input) ⇒ fall through ⇒ **our stub is already correct**; proven - safe by all 279 CLEAN dialogue scenes (which contain these same 8 sites). So 0x90 is NOT a headless - correctness hole. It must be modelled for real in **A2** (Godot input backend) as a live hotspot test; - confirm the exact target→interaction-state mapping via input capture / Frida then. -- **op 0x97** (`u0041C150`, argc 5: `v1 v2 1 1 `, NO code targets) interleaves with 0x90 in - the same subroutine → companion *register-hotspot / set-widget-action* call (trailing imm = action id - 0x0/0x7/0x8). Not control flow; part of the `0x90/0x91/0x92/0x95/0x97` widget cluster. - -**Consequence for A0/A1:** the 12 EMPTY scenes are gated by **state + interactive input-wait loops** -(this chrome polls hotspots until a click), NOT by unmodelled 0x90 semantics. A1 can keep 0x90 as -fall-through with confidence; unlocking the EMPTY family is a Phase-A2/B task (seed state + input). - -## Coverage after classification -See `build/opcode-coverage.md`. Roughly: named 72.6% + no-op scaffolding & label-def (A+C, high -conf) ≈ 14.4% + tentative-no-op metadata (B) ≈ 3.4% → **~90% handleable without live tools**; -the effectful/computational remainder (D+E) ≈ 6–7% is classified but needs Frida/Unicorn for -exact behaviour. - -## Frida / Unicorn shortlist (feeds Phase 3.1/3.2) -- **Frida (effectful):** 0x7a (adv text param), 0x202/0x203/0x1f7/0x1fa/0x217/0x218/0x21a/0x1ff - (draw/UI), 0xb6 (audio), 0x1a2 (resource resolve). Also **Frida-confirm already-named effectful - ops the VM will rely on**: `play-voice 0xc4`, `play-bgm 0xbf`, `play-sound-effect 0xb4`, - `draw-texture 0x1fb`, `draw-string 0x204`, `create-texture 0x1f8`, `set-texture 0x1f9`. -- **Unicorn (computational):** 0x215 (count/search). -- **Harness (no live tools):** 0x21b / 0x1d2 / 0x258 — confirm no-op assumption by diffing the - VM's `show-text` sequence per scene against `build/text/dialogue.jsonl`. diff --git a/vm-map/opcodes-himegari.json b/vm-map/opcodes-himegari.json deleted file mode 100644 index 7f002c5..0000000 --- a/vm-map/opcodes-himegari.json +++ /dev/null @@ -1,2023 +0,0 @@ -{ - "source": "Kelebek1/Eushully-Decompiler age-shared.cpp (validated against 476/476 Himegari scripts, 1.46M instructions, 0 unknown opcodes, 37392/0 string args resolved)", - "instruction_model": "code = seq of instructions; instr = then argc*(); len_dwords = 1 + 2*argc. Inline strings live after code inside [0,F8); stop decoding at the lowest string/array offset referenced (type-2 arg or op 0x64 arg1).", - "arg_types": { - "0x0": "immediate", - "0x1": "float", - "0x2": "string", - "0x3": "global-int", - "0x4": "global-float", - "0x5": "global-string", - "0x6": "global-ptr", - "0x8": "global-string-ptr", - "0x9": "local-int", - "0xa": "local-float", - "0xb": "local-string", - "0xc": "local-ptr", - "0xd": "local-float-ptr", - "0xe": "local-string-ptr" - }, - "header_fields": { - "F0": "local_integer_1", - "F1": "local_floats", - "F2": "local_strings_1", - "F3": "local_integer_2", - "F4": "unknown_data", - "F5": "local_strings_2", - "F6": "sub_header_length(=0x1C)", - "F7": "table_1_length", - "F8": "table_1_offset(=code end)", - "F9": "table_2_length", - "F10": "table_2_offset", - "F11": "table_3_length", - "F12": "table_3_offset" - }, - "opcodes_used_by_himegari": 248, - "named_semantics": 52, - "opcodes": [ - { - "op": "0x1", - "dec": 1, - "label": "u004149C0", - "argc": 0, - "named": false, - "uses": 2 - }, - { - "op": "0x2", - "dec": 2, - "label": "exit", - "argc": 0, - "named": true, - "uses": 5693 - }, - { - "op": "0x3", - "dec": 3, - "label": "call-script", - "argc": 1, - "named": true, - "uses": 2783 - }, - { - "op": "0x5", - "dec": 5, - "label": "ret", - "argc": 0, - "named": true, - "uses": 13846 - }, - { - "op": "0x6", - "dec": 6, - "label": "u00417E80", - "argc": 2, - "named": false, - "uses": 3 - }, - { - "op": "0x8", - "dec": 8, - "label": "u00417FC0", - "argc": 1, - "named": false, - "uses": 64 - }, - { - "op": "0x9", - "dec": 9, - "label": "exit-script", - "argc": 0, - "named": true, - "uses": 75 - }, - { - "op": "0x21", - "dec": 33, - "label": "u00418860", - "argc": 2, - "named": false, - "uses": 3 - }, - { - "op": "0x22", - "dec": 34, - "label": "u00418920", - "argc": 2, - "named": false, - "uses": 8 - }, - { - "op": "0x25", - "dec": 37, - "label": "u00418B40", - "argc": 3, - "named": false, - "uses": 19 - }, - { - "op": "0x50", - "dec": 80, - "label": "add", - "argc": 3, - "named": false, - "uses": 35070 - }, - { - "op": "0x51", - "dec": 81, - "label": "sub", - "argc": 3, - "named": true, - "uses": 50202 - }, - { - "op": "0x52", - "dec": 82, - "label": "mul", - "argc": 3, - "named": true, - "uses": 2961 - }, - { - "op": "0x53", - "dec": 83, - "label": "div", - "argc": 3, - "named": true, - "uses": 2570 - }, - { - "op": "0x54", - "dec": 84, - "label": "mod", - "argc": 3, - "named": true, - "uses": 455 - }, - { - "op": "0x55", - "dec": 85, - "label": "mov", - "argc": 2, - "named": true, - "uses": 268214 - }, - { - "op": "0x56", - "dec": 86, - "label": "and", - "argc": 3, - "named": true, - "uses": 11855 - }, - { - "op": "0x57", - "dec": 87, - "label": "or", - "argc": 3, - "named": true, - "uses": 1652 - }, - { - "op": "0x58", - "dec": 88, - "label": "sar", - "argc": 3, - "named": true, - "uses": 26 - }, - { - "op": "0x59", - "dec": 89, - "label": "shl", - "argc": 3, - "named": true, - "uses": 691 - }, - { - "op": "0x5a", - "dec": 90, - "label": "eq", - "argc": 3, - "named": true, - "uses": 61676 - }, - { - "op": "0x5b", - "dec": 91, - "label": "ne", - "argc": 3, - "named": true, - "uses": 3437 - }, - { - "op": "0x5c", - "dec": 92, - "label": "lt", - "argc": 3, - "named": true, - "uses": 20008 - }, - { - "op": "0x5d", - "dec": 93, - "label": "lte", - "argc": 3, - "named": true, - "uses": 2006 - }, - { - "op": "0x5e", - "dec": 94, - "label": "gr", - "argc": 3, - "named": true, - "uses": 728 - }, - { - "op": "0x5f", - "dec": 95, - "label": "gre", - "argc": 3, - "named": true, - "uses": 5801 - }, - { - "op": "0x60", - "dec": 96, - "label": "u0041A270", - "argc": 2, - "named": false, - "uses": 64 - }, - { - "op": "0x61", - "dec": 97, - "label": "lookup-array", - "argc": 3, - "named": true, - "uses": 140438 - }, - { - "op": "0x63", - "dec": 99, - "label": "u00414A60", - "argc": 2, - "named": false, - "uses": 92 - }, - { - "op": "0x64", - "dec": 100, - "label": "copy-local-array", - "argc": 2, - "named": true, - "uses": 5384 - }, - { - "op": "0x6c", - "dec": 108, - "label": "copy-to-global", - "argc": 2, - "named": true, - "uses": 910 - }, - { - "op": "0x6e", - "dec": 110, - "label": "show-text", - "argc": 2, - "named": true, - "uses": 30918 - }, - { - "op": "0x6f", - "dec": 111, - "label": "end-text-line", - "argc": 1, - "named": true, - "uses": 53619 - }, - { - "op": "0x70", - "dec": 112, - "label": "u0041A750", - "argc": 5, - "named": false, - "uses": 9 - }, - { - "op": "0x71", - "dec": 113, - "label": "u0041A7B0", - "argc": 1, - "named": false, - "uses": 25714 - }, - { - "op": "0x72", - "dec": 114, - "label": "wait-for-input", - "argc": 1, - "named": true, - "uses": 25678 - }, - { - "op": "0x73", - "dec": 115, - "label": "u0041AB30", - "argc": 10, - "named": false, - "uses": 1 - }, - { - "op": "0x75", - "dec": 117, - "label": "u0041AC30", - "argc": 1, - "named": false, - "uses": 221 - }, - { - "op": "0x76", - "dec": 118, - "label": "u0041AC60", - "argc": 1, - "named": false, - "uses": 257 - }, - { - "op": "0x77", - "dec": 119, - "label": "u0041ACB0", - "argc": 1, - "named": false, - "uses": 210 - }, - { - "op": "0x78", - "dec": 120, - "label": "u0041AD00", - "argc": 1, - "named": false, - "uses": 204 - }, - { - "op": "0x79", - "dec": 121, - "label": "u0041AD30", - "argc": 3, - "named": false, - "uses": 9 - }, - { - "op": "0x7a", - "dec": 122, - "label": "u0041AD70", - "argc": 3, - "named": false, - "uses": 16800 - }, - { - "op": "0x7b", - "dec": 123, - "label": "u0041ADB0", - "argc": 2, - "named": false, - "uses": 1889 - }, - { - "op": "0x7c", - "dec": 124, - "label": "u00416A90", - "argc": 0, - "named": false, - "uses": 594 - }, - { - "op": "0x7f", - "dec": 127, - "label": "u00414C60", - "argc": 1, - "named": false, - "uses": 7 - }, - { - "op": "0x80", - "dec": 128, - "label": "u0041AF00", - "argc": 1, - "named": false, - "uses": 20 - }, - { - "op": "0x85", - "dec": 133, - "label": "u00414CF0", - "argc": 0, - "named": false, - "uses": 278 - }, - { - "op": "0x86", - "dec": 134, - "label": "u0041B210", - "argc": 1, - "named": false, - "uses": 25 - }, - { - "op": "0x87", - "dec": 135, - "label": "u00414D10", - "argc": 0, - "named": false, - "uses": 10 - }, - { - "op": "0x88", - "dec": 136, - "label": "u0041B290", - "argc": 1, - "named": false, - "uses": 298 - }, - { - "op": "0x8b", - "dec": 139, - "label": "u0041B3D0", - "argc": 1, - "named": false, - "uses": 178 - }, - { - "op": "0x8c", - "dec": 140, - "label": "jmp", - "argc": 1, - "named": true, - "uses": 37513 - }, - { - "op": "0x8f", - "dec": 143, - "label": "call", - "argc": 1, - "named": true, - "uses": 70677 - }, - { - "op": "0x90", - "dec": 144, - "label": "u0041BEB0", - "argc": 7, - "named": false, - "uses": 2376 - }, - { - "op": "0x93", - "dec": 147, - "label": "u00415040", - "argc": 0, - "named": false, - "uses": 1731 - }, - { - "op": "0x94", - "dec": 148, - "label": "u00415090", - "argc": 0, - "named": false, - "uses": 297 - }, - { - "op": "0x97", - "dec": 151, - "label": "u0041C150", - "argc": 5, - "named": false, - "uses": 891 - }, - { - "op": "0xa0", - "dec": 160, - "label": "jcc", - "argc": 3, - "named": true, - "uses": 114366 - }, - { - "op": "0xa1", - "dec": 161, - "label": "u00427C00", - "argc": 0, - "named": false, - "uses": 12 - }, - { - "op": "0xa2", - "dec": 162, - "label": "u00427FD0", - "argc": 2, - "named": false, - "uses": 80 - }, - { - "op": "0xa3", - "dec": 163, - "label": "u004244D0", - "argc": 2, - "named": false, - "uses": 12 - }, - { - "op": "0xae", - "dec": 174, - "label": "u00415130", - "argc": 0, - "named": false, - "uses": 301 - }, - { - "op": "0xb4", - "dec": 180, - "label": "play-sound-effect", - "argc": 2, - "named": true, - "uses": 1596 - }, - { - "op": "0xb5", - "dec": 181, - "label": "u0041D050", - "argc": 1, - "named": false, - "uses": 1308 - }, - { - "op": "0xb6", - "dec": 182, - "label": "u0041D080", - "argc": 1, - "named": false, - "uses": 4765 - }, - { - "op": "0xb7", - "dec": 183, - "label": "u0041D0E0", - "argc": 1, - "named": false, - "uses": 2 - }, - { - "op": "0xb8", - "dec": 184, - "label": "u00415520", - "argc": 0, - "named": false, - "uses": 2 - }, - { - "op": "0xb9", - "dec": 185, - "label": "u0041D140", - "argc": 1, - "named": false, - "uses": 1 - }, - { - "op": "0xba", - "dec": 186, - "label": "u0041D0B0", - "argc": 1, - "named": false, - "uses": 334 - }, - { - "op": "0xbf", - "dec": 191, - "label": "play-bgm", - "argc": 1, - "named": true, - "uses": 821 - }, - { - "op": "0xc0", - "dec": 192, - "label": "u00415620", - "argc": 1, - "named": false, - "uses": 1 - }, - { - "op": "0xc2", - "dec": 194, - "label": "u0041D2B0", - "argc": 2, - "named": false, - "uses": 529 - }, - { - "op": "0xc4", - "dec": 196, - "label": "play-voice", - "argc": 1, - "named": true, - "uses": 16610 - }, - { - "op": "0xc5", - "dec": 197, - "label": "u0041D4A0", - "argc": 2, - "named": false, - "uses": 9 - }, - { - "op": "0xc6", - "dec": 198, - "label": "u0041D5D0", - "argc": 2, - "named": false, - "uses": 12 - }, - { - "op": "0xc7", - "dec": 199, - "label": "u0041D760", - "argc": 2, - "named": false, - "uses": 1 - }, - { - "op": "0xc8", - "dec": 200, - "label": "sleep", - "argc": 1, - "named": true, - "uses": 1974 - }, - { - "op": "0xcc", - "dec": 204, - "label": "mouse_callback", - "argc": 2, - "named": true, - "uses": 38 - }, - { - "op": "0xcd", - "dec": 205, - "label": "get-input-type", - "argc": 0, - "named": true, - "uses": 37 - }, - { - "op": "0xd0", - "dec": 208, - "label": "u00415830", - "argc": 1, - "named": false, - "uses": 6 - }, - { - "op": "0xd3", - "dec": 211, - "label": "u00425960", - "argc": 0, - "named": false, - "uses": 17 - }, - { - "op": "0xd4", - "dec": 212, - "label": "u004266F0", - "argc": 4, - "named": false, - "uses": 43 - }, - { - "op": "0xd5", - "dec": 213, - "label": "u004262C0", - "argc": 1, - "named": false, - "uses": 17 - }, - { - "op": "0xd9", - "dec": 217, - "label": "u00415880", - "argc": 0, - "named": false, - "uses": 139 - }, - { - "op": "0xfb", - "dec": 251, - "label": "joy_callback", - "argc": 2, - "named": true, - "uses": 410 - }, - { - "op": "0xfe", - "dec": 254, - "label": "u0041E360", - "argc": 1, - "named": false, - "uses": 1 - }, - { - "op": "0xff", - "dec": 255, - "label": "u00415A10", - "argc": 0, - "named": false, - "uses": 39 - }, - { - "op": "0x100", - "dec": 256, - "label": "u00415A60", - "argc": 0, - "named": false, - "uses": 39 - }, - { - "op": "0x101", - "dec": 257, - "label": "u00415BF0", - "argc": 0, - "named": false, - "uses": 1391 - }, - { - "op": "0x107", - "dec": 263, - "label": "u0041E500", - "argc": 2, - "named": false, - "uses": 6 - }, - { - "op": "0x108", - "dec": 264, - "label": "u00415E70", - "argc": 1, - "named": false, - "uses": 37 - }, - { - "op": "0x109", - "dec": 265, - "label": "u00415EC0", - "argc": 2, - "named": false, - "uses": 1258 - }, - { - "op": "0x10a", - "dec": 266, - "label": "u0041E540", - "argc": 2, - "named": false, - "uses": 1192 - }, - { - "op": "0x10b", - "dec": 267, - "label": "u0041E5A0", - "argc": 2, - "named": false, - "uses": 1 - }, - { - "op": "0x10c", - "dec": 268, - "label": "u0041E5E0", - "argc": 2, - "named": false, - "uses": 8 - }, - { - "op": "0x10d", - "dec": 269, - "label": "u00415F10", - "argc": 1, - "named": false, - "uses": 34 - }, - { - "op": "0x12c", - "dec": 300, - "label": "lookup-array-2d", - "argc": 5, - "named": true, - "uses": 4567 - }, - { - "op": "0x12e", - "dec": 302, - "label": "u0041E940", - "argc": 8, - "named": false, - "uses": 33 - }, - { - "op": "0x12f", - "dec": 303, - "label": "u0041ECB0", - "argc": 4, - "named": false, - "uses": 40 - }, - { - "op": "0x130", - "dec": 304, - "label": "u00415F40", - "argc": 1, - "named": false, - "uses": 1 - }, - { - "op": "0x131", - "dec": 305, - "label": "u00415F70", - "argc": 1, - "named": false, - "uses": 619 - }, - { - "op": "0x132", - "dec": 306, - "label": "u0041EF00", - "argc": 1, - "named": false, - "uses": 2 - }, - { - "op": "0x133", - "dec": 307, - "label": "u0041EFF0", - "argc": 2, - "named": false, - "uses": 4 - }, - { - "op": "0x134", - "dec": 308, - "label": "u0041F050", - "argc": 3, - "named": false, - "uses": 2 - }, - { - "op": "0x135", - "dec": 309, - "label": "bit-set", - "argc": 2, - "named": true, - "uses": 218 - }, - { - "op": "0x136", - "dec": 310, - "label": "bit-reset", - "argc": 2, - "named": true, - "uses": 143 - }, - { - "op": "0x137", - "dec": 311, - "label": "u0041F1C0", - "argc": 1, - "named": false, - "uses": 1 - }, - { - "op": "0x13a", - "dec": 314, - "label": "u0041F3A0", - "argc": 6, - "named": false, - "uses": 74 - }, - { - "op": "0x13f", - "dec": 319, - "label": "check-bit", - "argc": 3, - "named": true, - "uses": 55 - }, - { - "op": "0x140", - "dec": 320, - "label": "u0041F9C0", - "argc": 4, - "named": false, - "uses": 135 - }, - { - "op": "0x141", - "dec": 321, - "label": "u0041FAA0", - "argc": 1, - "named": false, - "uses": 3 - }, - { - "op": "0x142", - "dec": 322, - "label": "u0041FB10", - "argc": 1, - "named": false, - "uses": 2 - }, - { - "op": "0x143", - "dec": 323, - "label": "u00415FB0", - "argc": 0, - "named": false, - "uses": 1 - }, - { - "op": "0x144", - "dec": 324, - "label": "u004259D0", - "argc": 2, - "named": false, - "uses": 1 - }, - { - "op": "0x149", - "dec": 329, - "label": "u0041FCE0", - "argc": 1, - "named": false, - "uses": 1 - }, - { - "op": "0x191", - "dec": 401, - "label": "u0041A4A0", - "argc": 2, - "named": false, - "uses": 5 - }, - { - "op": "0x192", - "dec": 402, - "label": "set-string", - "argc": 2, - "named": true, - "uses": 5134 - }, - { - "op": "0x193", - "dec": 403, - "label": "concat", - "argc": 3, - "named": true, - "uses": 58 - }, - { - "op": "0x194", - "dec": 404, - "label": "u00425480", - "argc": 3, - "named": false, - "uses": 15 - }, - { - "op": "0x195", - "dec": 405, - "label": "u00425580", - "argc": 3, - "named": false, - "uses": 17 - }, - { - "op": "0x196", - "dec": 406, - "label": "display-furigana", - "argc": 3, - "named": true, - "uses": 272 - }, - { - "op": "0x197", - "dec": 407, - "label": "u0041B510", - "argc": 1, - "named": false, - "uses": 178 - }, - { - "op": "0x198", - "dec": 408, - "label": "u0041B540", - "argc": 3, - "named": false, - "uses": 446 - }, - { - "op": "0x199", - "dec": 409, - "label": "u00414D50", - "argc": 0, - "named": false, - "uses": 594 - }, - { - "op": "0x19a", - "dec": 410, - "label": "u00414E50", - "argc": 1, - "named": false, - "uses": 317 - }, - { - "op": "0x19b", - "dec": 411, - "label": "u00414E80", - "argc": 0, - "named": false, - "uses": 145 - }, - { - "op": "0x19c", - "dec": 412, - "label": "u00414EC0", - "argc": 0, - "named": false, - "uses": 146 - }, - { - "op": "0x19d", - "dec": 413, - "label": "u0041C680", - "argc": 2, - "named": false, - "uses": 4 - }, - { - "op": "0x19e", - "dec": 414, - "label": "u0041C6E0", - "argc": 2, - "named": false, - "uses": 2 - }, - { - "op": "0x1a0", - "dec": 416, - "label": "u0041C9B0", - "argc": 9, - "named": false, - "uses": 3 - }, - { - "op": "0x1a1", - "dec": 417, - "label": "u0041CB40", - "argc": 2, - "named": false, - "uses": 1 - }, - { - "op": "0x1a2", - "dec": 418, - "label": "u00428010", - "argc": 1, - "named": false, - "uses": 17057 - }, - { - "op": "0x1a3", - "dec": 419, - "label": "string-lookup-set", - "argc": 1, - "named": true, - "uses": 77 - }, - { - "op": "0x1a4", - "dec": 420, - "label": "u0041B580", - "argc": 2, - "named": false, - "uses": 203 - }, - { - "op": "0x1a5", - "dec": 421, - "label": "set-font", - "argc": 1, - "named": true, - "uses": 203 - }, - { - "op": "0x1a6", - "dec": 422, - "label": "halve-strlen", - "argc": 2, - "named": true, - "uses": 17 - }, - { - "op": "0x1a7", - "dec": 423, - "label": "comment", - "argc": 1, - "named": true, - "uses": 1986 - }, - { - "op": "0x1a8", - "dec": 424, - "label": "dev_ukn", - "argc": 0, - "named": false, - "uses": 1937 - }, - { - "op": "0x1a9", - "dec": 425, - "label": "u00428090", - "argc": 1, - "named": false, - "uses": 17 - }, - { - "op": "0x1aa", - "dec": 426, - "label": "u00425920", - "argc": 1, - "named": false, - "uses": 7 - }, - { - "op": "0x1ab", - "dec": 427, - "label": "u0041CCA0", - "argc": 2, - "named": false, - "uses": 1 - }, - { - "op": "0x1ac", - "dec": 428, - "label": "u0041CD80", - "argc": 3, - "named": false, - "uses": 2 - }, - { - "op": "0x1ad", - "dec": 429, - "label": "u004154F0", - "argc": 0, - "named": false, - "uses": 1893 - }, - { - "op": "0x1ae", - "dec": 430, - "label": "u0041CED0", - "argc": 3, - "named": false, - "uses": 2 - }, - { - "op": "0x1af", - "dec": 431, - "label": "u004245C0", - "argc": 3, - "named": false, - "uses": 1 - }, - { - "op": "0x1b0", - "dec": 432, - "label": "u0041A510", - "argc": 3, - "named": false, - "uses": 65 - }, - { - "op": "0x1b2", - "dec": 434, - "label": "u00425790", - "argc": 1, - "named": false, - "uses": 3 - }, - { - "op": "0x1b3", - "dec": 435, - "label": "u004257D0", - "argc": 0, - "named": false, - "uses": 2 - }, - { - "op": "0x1b4", - "dec": 436, - "label": "u004237C0", - "argc": 0, - "named": false, - "uses": 1 - }, - { - "op": "0x1b5", - "dec": 437, - "label": "u0041B5F0", - "argc": 1, - "named": false, - "uses": 11 - }, - { - "op": "0x1b6", - "dec": 438, - "label": "u00414F60", - "argc": 1, - "named": false, - "uses": 614 - }, - { - "op": "0x1b7", - "dec": 439, - "label": "u0041B640", - "argc": 1, - "named": false, - "uses": 297 - }, - { - "op": "0x1b8", - "dec": 440, - "label": "u0041B670", - "argc": 2, - "named": false, - "uses": 6 - }, - { - "op": "0x1b9", - "dec": 441, - "label": "u0041B710", - "argc": 2, - "named": false, - "uses": 6 - }, - { - "op": "0x1ba", - "dec": 442, - "label": "u0041D850", - "argc": 2, - "named": false, - "uses": 15 - }, - { - "op": "0x1bb", - "dec": 443, - "label": "u0041B7B0", - "argc": 1, - "named": false, - "uses": 33 - }, - { - "op": "0x1bc", - "dec": 444, - "label": "u00415670", - "argc": 0, - "named": false, - "uses": 26126 - }, - { - "op": "0x1bd", - "dec": 445, - "label": "u0041D910", - "argc": 1, - "named": false, - "uses": 1 - }, - { - "op": "0x1bf", - "dec": 447, - "label": "u004156C0", - "argc": 0, - "named": false, - "uses": 8541 - }, - { - "op": "0x1c1", - "dec": 449, - "label": "u0041B820", - "argc": 3, - "named": false, - "uses": 9 - }, - { - "op": "0x1c7", - "dec": 455, - "label": "u00414F90", - "argc": 1, - "named": false, - "uses": 299 - }, - { - "op": "0x1c8", - "dec": 456, - "label": "toString", - "argc": 2, - "named": true, - "uses": 5 - }, - { - "op": "0x1ca", - "dec": 458, - "label": "u0041B9B0", - "argc": 1, - "named": false, - "uses": 298 - }, - { - "op": "0x1cb", - "dec": 459, - "label": "u00414FD0", - "argc": 1, - "named": false, - "uses": 614 - }, - { - "op": "0x1cc", - "dec": 460, - "label": "u00415010", - "argc": 1, - "named": false, - "uses": 299 - }, - { - "op": "0x1ce", - "dec": 462, - "label": "u0041B9F0", - "argc": 1, - "named": false, - "uses": 146 - }, - { - "op": "0x1cf", - "dec": 463, - "label": "u0041DA10", - "argc": 1, - "named": false, - "uses": 1204 - }, - { - "op": "0x1d0", - "dec": 464, - "label": "u0041BA80", - "argc": 3, - "named": false, - "uses": 3 - }, - { - "op": "0x1d1", - "dec": 465, - "label": "u0041BAE0", - "argc": 5, - "named": false, - "uses": 1 - }, - { - "op": "0x1d2", - "dec": 466, - "label": "u0041BB40", - "argc": 2, - "named": false, - "uses": 16799 - }, - { - "op": "0x1d3", - "dec": 467, - "label": "u0041BB90", - "argc": 5, - "named": false, - "uses": 3 - }, - { - "op": "0x1d4", - "dec": 468, - "label": "u0041BC00", - "argc": 4, - "named": false, - "uses": 1 - }, - { - "op": "0x1d5", - "dec": 469, - "label": "u00415700", - "argc": 0, - "named": false, - "uses": 33200 - }, - { - "op": "0x1f4", - "dec": 500, - "label": "u004160D0", - "argc": 0, - "named": false, - "uses": 58716 - }, - { - "op": "0x1f5", - "dec": 501, - "label": "u00416120", - "argc": 0, - "named": false, - "uses": 58716 - }, - { - "op": "0x1f6", - "dec": 502, - "label": "u00416170", - "argc": 0, - "named": false, - "uses": 285 - }, - { - "op": "0x1f7", - "dec": 503, - "label": "u00420270", - "argc": 2, - "named": false, - "uses": 7537 - }, - { - "op": "0x1f8", - "dec": 504, - "label": "create-texture", - "argc": 4, - "named": true, - "uses": 16924 - }, - { - "op": "0x1f9", - "dec": 505, - "label": "set-texture", - "argc": 3, - "named": true, - "uses": 748 - }, - { - "op": "0x1fa", - "dec": 506, - "label": "u00420480", - "argc": 1, - "named": false, - "uses": 5948 - }, - { - "op": "0x1fb", - "dec": 507, - "label": "draw-texture", - "argc": 8, - "named": true, - "uses": 25254 - }, - { - "op": "0x1fd", - "dec": 509, - "label": "u00420620", - "argc": 4, - "named": false, - "uses": 816 - }, - { - "op": "0x1fe", - "dec": 510, - "label": "u004206C0", - "argc": 5, - "named": false, - "uses": 181 - }, - { - "op": "0x1ff", - "dec": 511, - "label": "u00420770", - "argc": 4, - "named": false, - "uses": 3752 - }, - { - "op": "0x202", - "dec": 514, - "label": "u00420880", - "argc": 5, - "named": false, - "uses": 8927 - }, - { - "op": "0x203", - "dec": 515, - "label": "u00420950", - "argc": 4, - "named": false, - "uses": 8929 - }, - { - "op": "0x204", - "dec": 516, - "label": "draw-string", - "argc": 4, - "named": true, - "uses": 16925 - }, - { - "op": "0x205", - "dec": 517, - "label": "u00420A60", - "argc": 6, - "named": false, - "uses": 60 - }, - { - "op": "0x207", - "dec": 519, - "label": "u00420B00", - "argc": 8, - "named": false, - "uses": 15 - }, - { - "op": "0x208", - "dec": 520, - "label": "u00420BF0", - "argc": 3, - "named": false, - "uses": 1488 - }, - { - "op": "0x20a", - "dec": 522, - "label": "u00420CE0", - "argc": 1, - "named": false, - "uses": 311 - }, - { - "op": "0x20b", - "dec": 523, - "label": "u00420D50", - "argc": 7, - "named": false, - "uses": 11 - }, - { - "op": "0x20c", - "dec": 524, - "label": "u00416200", - "argc": 0, - "named": false, - "uses": 2342 - }, - { - "op": "0x20d", - "dec": 525, - "label": "u00420E10", - "argc": 1, - "named": false, - "uses": 113 - }, - { - "op": "0x20e", - "dec": 526, - "label": "u00416250", - "argc": 0, - "named": false, - "uses": 337 - }, - { - "op": "0x20f", - "dec": 527, - "label": "u00420E40", - "argc": 3, - "named": false, - "uses": 3 - }, - { - "op": "0x212", - "dec": 530, - "label": "u00421090", - "argc": 2, - "named": false, - "uses": 1 - }, - { - "op": "0x213", - "dec": 531, - "label": "u004210D0", - "argc": 3, - "named": false, - "uses": 9 - }, - { - "op": "0x215", - "dec": 533, - "label": "u00421160", - "argc": 2, - "named": false, - "uses": 5500 - }, - { - "op": "0x216", - "dec": 534, - "label": "u004211A0", - "argc": 2, - "named": false, - "uses": 4 - }, - { - "op": "0x217", - "dec": 535, - "label": "u004211E0", - "argc": 4, - "named": false, - "uses": 5117 - }, - { - "op": "0x218", - "dec": 536, - "label": "u00421270", - "argc": 4, - "named": false, - "uses": 5106 - }, - { - "op": "0x219", - "dec": 537, - "label": "u004212E0", - "argc": 4, - "named": false, - "uses": 3723 - }, - { - "op": "0x21a", - "dec": 538, - "label": "u00421370", - "argc": 4, - "named": false, - "uses": 4699 - }, - { - "op": "0x21b", - "dec": 539, - "label": "u004213E0", - "argc": 1, - "named": false, - "uses": 26273 - }, - { - "op": "0x21c", - "dec": 540, - "label": "u00416270", - "argc": 0, - "named": false, - "uses": 371 - }, - { - "op": "0x21d", - "dec": 541, - "label": "u00421410", - "argc": 2, - "named": false, - "uses": 260 - }, - { - "op": "0x21e", - "dec": 542, - "label": "u00421450", - "argc": 6, - "named": false, - "uses": 984 - }, - { - "op": "0x21f", - "dec": 543, - "label": "u00421510", - "argc": 7, - "named": false, - "uses": 110 - }, - { - "op": "0x220", - "dec": 544, - "label": "u004215D0", - "argc": 6, - "named": false, - "uses": 1320 - }, - { - "op": "0x222", - "dec": 546, - "label": "u004216C0", - "argc": 2, - "named": false, - "uses": 24 - }, - { - "op": "0x223", - "dec": 547, - "label": "u00421700", - "argc": 8, - "named": false, - "uses": 253 - }, - { - "op": "0x224", - "dec": 548, - "label": "u00416290", - "argc": 0, - "named": false, - "uses": 301 - }, - { - "op": "0x228", - "dec": 552, - "label": "u00421940", - "argc": 5, - "named": false, - "uses": 649 - }, - { - "op": "0x229", - "dec": 553, - "label": "u004219E0", - "argc": 5, - "named": false, - "uses": 676 - }, - { - "op": "0x22a", - "dec": 554, - "label": "u00421A90", - "argc": 3, - "named": false, - "uses": 2 - }, - { - "op": "0x22c", - "dec": 556, - "label": "u00421BD0", - "argc": 3, - "named": false, - "uses": 2 - }, - { - "op": "0x22d", - "dec": 557, - "label": "u00421C60", - "argc": 5, - "named": false, - "uses": 1 - }, - { - "op": "0x22f", - "dec": 559, - "label": "u00421DD0", - "argc": 5, - "named": false, - "uses": 594 - }, - { - "op": "0x230", - "dec": 560, - "label": "u00421E70", - "argc": 1, - "named": false, - "uses": 6 - }, - { - "op": "0x231", - "dec": 561, - "label": "u00421EA0", - "argc": 4, - "named": false, - "uses": 90 - }, - { - "op": "0x232", - "dec": 562, - "label": "u00421EF0", - "argc": 4, - "named": false, - "uses": 5 - }, - { - "op": "0x233", - "dec": 563, - "label": "u00421FB0", - "argc": 5, - "named": false, - "uses": 31 - }, - { - "op": "0x234", - "dec": 564, - "label": "u00422060", - "argc": 5, - "named": false, - "uses": 18 - }, - { - "op": "0x236", - "dec": 566, - "label": "u004221A0", - "argc": 4, - "named": false, - "uses": 23 - }, - { - "op": "0x238", - "dec": 568, - "label": "u00422390", - "argc": 1, - "named": false, - "uses": 370 - }, - { - "op": "0x239", - "dec": 569, - "label": "u004223C0", - "argc": 6, - "named": false, - "uses": 233 - }, - { - "op": "0x23a", - "dec": 570, - "label": "u00422420", - "argc": 2, - "named": false, - "uses": 4 - }, - { - "op": "0x23b", - "dec": 571, - "label": "u00422460", - "argc": 7, - "named": false, - "uses": 147 - }, - { - "op": "0x23c", - "dec": 572, - "label": "u004162B0", - "argc": 0, - "named": false, - "uses": 16 - }, - { - "op": "0x23d", - "dec": 573, - "label": "u004162F0", - "argc": 0, - "named": false, - "uses": 145 - }, - { - "op": "0x23f", - "dec": 575, - "label": "u00422930", - "argc": 2, - "named": false, - "uses": 21 - }, - { - "op": "0x241", - "dec": 577, - "label": "u00422B80", - "argc": 5, - "named": false, - "uses": 1 - }, - { - "op": "0x242", - "dec": 578, - "label": "u00422D60", - "argc": 2, - "named": false, - "uses": 298 - }, - { - "op": "0x243", - "dec": 579, - "label": "u00417070", - "argc": 0, - "named": false, - "uses": 308 - }, - { - "op": "0x248", - "dec": 584, - "label": "u00422E80", - "argc": 1, - "named": false, - "uses": 1 - }, - { - "op": "0x249", - "dec": 585, - "label": "u00422EB0", - "argc": 3, - "named": false, - "uses": 26 - }, - { - "op": "0x24d", - "dec": 589, - "label": "u00422E90", - "argc": 12, - "named": false, - "uses": 2 - }, - { - "op": "0x24e", - "dec": 590, - "label": "u00422EA0", - "argc": 1, - "named": false, - "uses": 5 - }, - { - "op": "0x258", - "dec": 600, - "label": "u00422FE0", - "argc": 2, - "named": false, - "uses": 7128 - }, - { - "op": "0x259", - "dec": 601, - "label": "u00416410", - "argc": 0, - "named": false, - "uses": 436 - }, - { - "op": "0x2bd", - "dec": 701, - "label": "u00423100", - "argc": 1, - "named": false, - "uses": 203 - }, - { - "op": "0x2bf", - "dec": 703, - "label": "u00423180", - "argc": 3, - "named": false, - "uses": 75 - }, - { - "op": "0x2c0", - "dec": 704, - "label": "u004231C0", - "argc": 3, - "named": false, - "uses": 1 - }, - { - "op": "0x2c5", - "dec": 709, - "label": "strlen", - "argc": 2, - "named": true, - "uses": 23 - }, - { - "op": "0x2c6", - "dec": 710, - "label": "u0042B5E0", - "argc": 2, - "named": false, - "uses": 1 - }, - { - "op": "0x2c8", - "dec": 712, - "label": "u0042B610", - "argc": 4, - "named": false, - "uses": 1 - } - ] -} \ No newline at end of file