diff --git a/CLAIMS.md b/CLAIMS.md index 9afa6a64b..3c2938836 100644 --- a/CLAIMS.md +++ b/CLAIMS.md @@ -19,11 +19,11 @@ it is fair to take over: ping the claimant first. | Range | Who | Claimed | Status | |---|---|---|---| +| ov002 func_ov002_020aefb8 (0x020aefb8, size 0x108) | lunavyqo (Grok) | 2026-07-24 | **done** — verified byte-identical (mwccarm 1.2/sp2p3); u64-mask materialize 0xa4/0xac | +| ov075 func_ov075_02117d80 (0x02117d80, size 0x104) | lunavyqo (Grok) | 2026-07-24 | **released** — batch4 improved tip div=5→4 (enum Bool); load/flag interleave regperm floor; tip in nearmiss/db.jsonl | | ov002 batch7: func_ov002_020ae4cc (0x020ae4cc, size 0xfc) | lunavyqo (Grok) | 2026-07-24 | **active** — batch7 from near-miss div=9 | | ov075 batch7: func_ov075_02116128 (0x02116128, size 0xf4) | lunavyqo (Grok) | 2026-07-24 | **active** — batch7 from near-miss div=29 | | ov062+ov006 batch8: func_ov062_02119af0 (0x02119af0, 0xf0) + func_ov006_020cc8c8 (0x020cc8c8, 0xf0) | lunavyqo (Grok) | 2026-07-24 | **active** — batch8 match (CLAIMS.md only; API key expired/revoked) | -| ov002 func_ov002_020aefb8 (0x020aefb8, size 0x108) | lunavyqo (Grok) | 2026-07-24 | **active** — batch4 near-miss refine (prev div=24) | -| ov075 func_ov075_02117d80 (0x02117d80, size 0x104) | lunavyqo (Grok) | 2026-07-24 | **active** — batch4 near-miss refine (prev div=5) | | ov002 func_ov002_020d708c (0x020d708c, size 0x100) | lunavyqo (Grok) | 2026-07-24 | **active** — batch6 near-miss div=19 | | ov080 func_ov080_02125460 (0x02125460, size 0xfc) | lunavyqo (Grok) | 2026-07-24 | **active** — batch6 near-miss div=5 | | ov002 func_ov002_020d8944 (0x020d8944, size 0x10c) | lunavyqo (Grok) | 2026-07-24 | **active** — batch2 match from near-miss div=15 | diff --git a/config/match_attempts.jsonl b/config/match_attempts.jsonl index 7c3302a8f..47b534fff 100644 --- a/config/match_attempts.jsonl +++ b/config/match_attempts.jsonl @@ -113,3 +113,8 @@ {"schemaVersion":1,"functionId":"ov002:0x020f1468","id":"ov002:0x020f1468","attemptId":"34bb8995b57b4fd6bf2e87415c97c5f7","parentAttemptId":"29e8a482e4514fe1a1c8747b3c86c6dc","module":"ov002","addr":34542696,"name":"func_ov002_020f1468","status":"matched","kind":"ai","model":"grok-4.5","reasoning":"high","harness":"grok-build","author":"lunavyqo","divergences":0,"prevBestDivergences":11,"improvedNearMiss":true,"srcPath":"src/func_ov002_020f1468.c","label":"batch1","note":"MATCH: direct *(c+0x32a) stores keep p out of mid-block so y=r1 base=r0; linkcheck VERIFIED","usedNearMissDraft":true,"usedGhidraDraft":false,"base":{"kind":"previous_attempt","attemptId":"29e8a482e4514fe1a1c8747b3c86c6dc","divergences":11},"sessionScope":"batch","batchSize":2} {"schemaVersion":1,"functionId":"ov006:0x02124fd8","id":"ov006:0x02124fd8","attemptId":"5d99f84b3a0244b1ba1c1905eb0d47e2","parentAttemptId":null,"module":"ov006","addr":34754520,"name":"func_ov006_02124fd8","status":"no_progress","kind":"ai","model":"grok-4.5","reasoning":"high","harness":"grok-build","author":"lunavyqo","divergences":999,"prevBestDivergences":16,"improvedNearMiss":false,"label":"batch1","note":"root near-miss for-loop; size 0xf8 vs 0x10c; missing early ble + predicated return","usedNearMissDraft":true,"usedGhidraDraft":false,"base":{"kind":"near_miss_draft","divergences":16},"sessionScope":"batch","batchSize":2} {"schemaVersion":1,"functionId":"ov006:0x02124fd8","id":"ov006:0x02124fd8","attemptId":"02a90f595e824792809fcdc7d06db8ac","parentAttemptId":"5d99f84b3a0244b1ba1c1905eb0d47e2","module":"ov006","addr":34754520,"name":"func_ov006_02124fd8","status":"matched","kind":"ai","model":"grok-4.5","reasoning":"high","harness":"grok-build","author":"lunavyqo","divergences":0,"prevBestDivergences":16,"improvedNearMiss":true,"srcPath":"src/func_ov006_02124fd8.c","label":"batch1","note":"MATCH: count<=0 early skip; do-while reloads count; if(fp<2)return; u64-mask 0x51b8++ ; linkcheck VERIFIED","usedNearMissDraft":true,"usedGhidraDraft":false,"base":{"kind":"previous_attempt","attemptId":"5d99f84b3a0244b1ba1c1905eb0d47e2","divergences":999},"sessionScope":"batch","batchSize":2} +{"schemaVersion":1,"functionId":"ov002:0x020aefb8","id":"ov002:0x020aefb8","attemptId":"a43a1dab2e894d7c8d07406dc161f1ec","parentAttemptId":null,"module":"ov002","addr":34271160,"name":"func_ov002_020aefb8","status":"matched","kind":"ai","model":"grok-4.5","reasoning":"high","harness":"grok-build","author":"lunavyqo","divergences":0,"prevBestDivergences":24,"improvedNearMiss":true,"srcPath":"src/func_ov002_020aefb8.c","note":"u64-mask launder materialize self+0xa4 and self+0xac for mla RMW bases","usedNearMissDraft":true,"usedGhidraDraft":false,"base":{"kind":"near_miss_draft","divergences":24},"sessionScope":"batch","batchSize":2} +{"schemaVersion":1,"functionId":"ov075:0x02117d80","id":"ov075:0x02117d80","attemptId":"ba70408a34c646d79d8ac4e53fa70cf5","parentAttemptId":null,"module":"ov075","addr":34700672,"name":"func_ov075_02117d80","status":"near_miss","kind":"ai","model":"grok-4.5","reasoning":"high","harness":"grok-build","author":"lunavyqo","divergences":4,"prevBestDivergences":5,"improvedNearMiss":true,"srcPath":"scratch/batch4/ov075_e2.c","note":"enum Bool cond != FALSE fixes ands->cmp r0,#0; pool load/flag interleave still diverges","usedNearMissDraft":true,"usedGhidraDraft":false,"base":{"kind":"near_miss_draft","divergences":5},"sessionScope":"batch","batchSize":2} +{"schemaVersion":1,"functionId":"ov075:0x02117d80","id":"ov075:0x02117d80","attemptId":"0740ba676d984b17b10158496b99150d","parentAttemptId":"ba70408a34c646d79d8ac4e53fa70cf5","module":"ov075","addr":34700672,"name":"func_ov075_02117d80","status":"no_progress","kind":"ai","model":"grok-4.5","reasoning":"high","harness":"grok-build","author":"lunavyqo","divergences":9,"prevBestDivergences":4,"improvedNearMiss":false,"srcPath":"scratch/batch4/ov075_e3.c","note":"fake-dep ternary batches loads correctly but regperm floor div=9","usedNearMissDraft":true,"usedGhidraDraft":false,"base":{"kind":"previous_attempt","attemptId":"ba70408a34c646d79d8ac4e53fa70cf5","divergences":4},"sessionScope":"batch","batchSize":2} +{"schemaVersion":1,"functionId":"ov075:0x02117d80","id":"ov075:0x02117d80","attemptId":"420a0d4d2222484680f050eec89a4e6f","parentAttemptId":"ba70408a34c646d79d8ac4e53fa70cf5","module":"ov075","addr":34700672,"name":"func_ov075_02117d80","status":"no_progress","kind":"ai","model":"grok-4.5","reasoning":"high","harness":"grok-build","author":"lunavyqo","divergences":4,"prevBestDivergences":4,"improvedNearMiss":false,"note":"permuter 120s from e3 shape stuck at base score 70; regperm floor","usedNearMissDraft":true,"usedGhidraDraft":false,"base":{"kind":"previous_attempt","attemptId":"ba70408a34c646d79d8ac4e53fa70cf5","divergences":4},"sessionScope":"batch","batchSize":2} +{"schemaVersion":1,"functionId":"ov063:0x021162c8","id":"ov063:0x021162c8","attemptId":"e0e41ae390644b6499db92cb29ff4eb2","parentAttemptId":null,"module":"ov063","addr":34693832,"name":"func_ov063_021162c8","status":"matched","kind":"ai","model":"grok-4.5","reasoning":"high","harness":"grok-build","author":"lunavyqo","improvedNearMiss":false,"srcPath":"src/func_ov063_021162c8.cpp","note":"banked","base":{"kind":"scratch"},"sessionScope":"batch","batchSize":2} diff --git a/config/match_provenance.jsonl b/config/match_provenance.jsonl index 3c8a21cc5..ab606ad84 100644 --- a/config/match_provenance.jsonl +++ b/config/match_provenance.jsonl @@ -23,3 +23,5 @@ {"id":"ov002:0x020bb520","module":"ov002","addr":34321696,"name":"func_ov002_020bb520","matchProvenance":{"kind":"ai","model":"grok-4.5","reasoning":"high","harness":"grok-build"},"author":"lunavyqo","srcPath":"src/func_ov002_020bb520.c"} {"id":"ov002:0x020f1468","module":"ov002","addr":34542696,"name":"func_ov002_020f1468","matchProvenance":{"kind":"ai","model":"grok-4.5","reasoning":"high","harness":"grok-build"},"author":"lunavyqo","srcPath":"src/func_ov002_020f1468.c"} {"id":"ov006:0x02124fd8","module":"ov006","addr":34754520,"name":"func_ov006_02124fd8","matchProvenance":{"kind":"ai","model":"grok-4.5","reasoning":"high","harness":"grok-build"},"author":"lunavyqo","srcPath":"src/func_ov006_02124fd8.c"} +{"id":"ov002:0x020aefb8","module":"ov002","addr":34271160,"name":"func_ov002_020aefb8","matchProvenance":{"kind":"ai","model":"grok-4.5","reasoning":"high","harness":"grok-build"},"author":"lunavyqo","srcPath":"src/func_ov002_020aefb8.c"} +{"id":"ov063:0x021162c8","module":"ov063","addr":34693832,"name":"func_ov063_021162c8","matchProvenance":{"kind":"ai","model":"grok-4.5","reasoning":"high","harness":"grok-build"},"author":"lunavyqo","srcPath":"src/func_ov063_021162c8.cpp"} diff --git a/nearmiss/db.jsonl b/nearmiss/db.jsonl index 2606e1e9e..306b8e3f9 100644 --- a/nearmiss/db.jsonl +++ b/nearmiss/db.jsonl @@ -1,4 +1,5 @@ {"module": "ov079", "addr": "0x02124008", "name": "func_ov079_02124008", "size": 384, "target_hex": "f0412de90050a0e1030c85e2fc18d5e1f00ed0e11474d5e5000081e00008a0e14018b0e10000e043810060410008a0414018a041010961e20008a0e1000057e34048a0e10d00000ab00395e5000050e34402a001a00d8400c002a001014a80020d00000a08219fe5a40fa0e19214c3e0c331a0e1033080e0014a83e2060000eaf0209fe5a40fa0e19214c3e0033084e04333a0e1033080e0014a83e2ba6f85e25eee85e20ec0a0e10f00b6e80f00aee80f00b6e8017087e20f00aee8011a44e25a0fa0e3910000e0970008e0037c85e20f0096e80f008ee80c00a0e1f21ed7e1b45ffcebb00395e5010050e30a00000a070050e30800000a0700a0e1f01ed0e15e0e85e2b75ffceb0700a0e1f41ed0e15e0e85e2c110a0e19a5ffceb011aa0e30420a0e10130a0e15e0e85e20360fceb5c1095e540009fe5041685e5603095e5102495e5031c85e2022083e0082042e0082685e5642095e5000085e00c2685e5f22ed1e15e1e85e26a57fcebf041bde81eff2fe1abaaaa2aa1a0a0a018040000", "lang": "c", "divergences": 1, "c_source": "#pragma opt_propagation off\ntypedef short s16;\ntypedef struct Mtx43 { int w[12]; } Mtx43;\nextern void Matrix4x3_ApplyInPlaceToRotationY(void* m, s16 angY);\nextern void Matrix4x3_ApplyInPlaceToRotationX(void* m, s16 angX);\nextern void Matrix4x3_ApplyInPlaceToRotationZ(void* m, s16 angZ);\nextern void Matrix4x3_ApplyInPlaceToScale(void* m, int x, int y, int z);\nextern void _ZN18MovingMeshCollider9TransformERK9Matrix4x3s(void* mc, void* m, short s);\n\nvoid func_ov079_02124008(char* c) {\n int scale;\n char *self = c;\n Mtx43 *src;\n Mtx43 *dst;\n int factor;\n s16 a;\n int state;\n int tmp;\n int reg;\n\n a = (s16)(*(s16*)(self + 0x8c) + *(s16*)(self + 0x3e0));\n reg = *(unsigned char*)(self + 0x414);\n if (a < 0) {\n s16 m = -1;\n if (1) a = a * m;\n }\n scale = (s16)(0x4000 - a);\n if (reg != 0) {\n if (*(int*)(self + 0x3b0) == 0)\n scale = (scale / 32) + 0x1000;\n else {\n scale = scale / 48;\n scale = scale + 0x1000;\n }\n if (!reg) {}\n } else\n scale = (scale / 102) + 0x1000;\n *(Mtx43*)(self + 0x5e0) = *(Mtx43*)(self + 0x2e8);\n src = (Mtx43*)(self + 0x2e8);\n ;\n tmp = (scale - 0x1000) * 0x168;\n reg = reg + 1;\n factor = reg * tmp;\n reg = (int)(self + 0x300);\n Matrix4x3_ApplyInPlaceToRotationY((Mtx43*)(self + 0x5e0), *(s16*)(self + 0x3e2));\n state = *(int*)(self + 0x3b0);\n if ((state != 1) && (state != 7)) {\n Matrix4x3_ApplyInPlaceToRotationX((Mtx43*)(self + 0x5e0), *(s16*)(self + 0x3e0));\n Matrix4x3_ApplyInPlaceToRotationZ((Mtx43*)(self + 0x5e0), (s16)(*(s16*)(self + 0x3e4) >> 1));\n }\n Matrix4x3_ApplyInPlaceToScale((Mtx43*)(self + 0x5e0), 0x1000, scale, 0x1000);\n *(int*)(self + 0x604) = *(int*)(self + 0x5c);\n *(int*)(self + 0x608) = (*(int*)(self + 0x60) + *(int*)(self + 0x410)) - factor;\n *(int*)(self + 0x60c) = *(int*)(self + 0x64);\n _ZN18MovingMeshCollider9TransformERK9Matrix4x3s(self + 0x418, (Mtx43*)(reg + 0x2e0), *(s16*)(self + 0x3e2));\n}\n", "source": "ov079-batch13-div1-wall", "floor": {"class": "materialization", "evidence": "See notes/func_ov079_02124008-floor.md. div=1 dual: best Transform matrix reg+0x2e0 vs ROM self+0x5e0; store_r608 y-store [r7,#0x308] vs [r5,#0x608]. Late reg=self+0x300 use required for self=r5/reg=r7; without it pure 37-div color swap (120 decl perms). Address keep-alives steal one site; value keep-alives DCE or grow size. Permuter floor score 10.", "date": "2026-07-13"}} +{"module": "arm9", "addr": "0x02068398", "name": "func_02068398", "size": 120, "target_hex": "00402de904d04de264009fe5001090e5000051e304d08d020000a0030040bd081eff2f01040090e5000050e30300000ab40490e5000050e30000000a0010a0e12c009fe5041080e5270000eb20109fe50220a0e3043091e50100a0e3ac34d3e50e30c1e50c20c1e504d08de20040bde81eff2fe12c9d0a02", "lang": "c", "divergences": 1, "c_source": "/* BEST pure-C under 1.2/sp2p3: size 0x78, divergences=1\n *\n * Residual at +0x38:\n * ROM: beq #8 (skip mov when y==0; r1 keeps sel)\n * CW: moveq r0, r1 (r0 = sel when y==0), then shared mov r1,r0\n *\n * Shape lever: `sel = p ? p : sel` (or `if (p==0) p = sel; sel = p`) forces the\n * always-execute `mov r1,r0` tail and restores size 0x78. The plain\n * `if (p) sel = p` form if-converts to `movne r1,r0` and shrinks to 0x74.\n *\n * Exhausted (2026-07-23, 150+ pure-C variants): c048 multi-pred (+8), loops\n * (while/for/do \u2192 0x80 bottom-test), switch, volatile both arms, //cpp refs,\n * goto-pin 6o, bool locals, sibling if/else keep/take, all known opt pragmas\n * (generateconditionalassignments/peephole/cse/sched/\u2026 inert),\n * #pragma optimization_level 1 emits CLEAN mid `beq; mov r1,r0` but loses\n * predicated early-return + O2+ tail interleave (size 0x7c, many mid/tail\n * diffs). No flag state mixes O1 middle with O4 prologue/tail (notes \u00a76u).\n * Known floor; hand-asm whole-function matches but is disallowed for game logic.\n */\ntypedef unsigned char u8;\nextern u8 data_020a9d2c[];\nextern void func_02068484(void);\n\nint func_02068398(void)\n{\n void *sel = *(void **)data_020a9d2c;\n void *p;\n\n if (sel == 0)\n return 0;\n\n p = *(void **)(data_020a9d2c + 4);\n if (p == 0)\n goto done;\n p = *(void **)((u8 *)p + 0x4b4);\n sel = p ? p : sel;\ndone:\n *(void **)(data_020a9d2c + 4) = sel;\n func_02068484();\n {\n u8 *d = data_020a9d2c;\n void *q = *(void **)(d + 4);\n d[0xe] = *((u8 *)q + 0x4ac);\n d[0xc] = 2;\n }\n return 1;\n}\n", "source": "lunavyqo-groupb-pure-c-best", "note": "size-mismatch size 0x78 vs 0x74", "floor": {"class": "cond_opt", "evidence": "6u: single-condition 1-pred beq+mov unreachable under O4,p; ternary size-exact div=1 moveq residual; c048 multi-pred costs +8; 150+ pure-C variants; no HAND-ASM", "date": "2026-07-23"}, "floor_note": "6u single-condition beq+mov unreachable; div=1 moveq residual"} {"module": "ov002", "addr": "0x020bf36c", "name": "func_ov002_020bf36c", "size": 160, "target_hex": "70402de90060a0e10927d6e50150a0e1000052e30000001aba0100ebe906d6e5010010e20200001a0607d6e5000050e30200000a0600a0e10110a0e3560300eb7c0396e5000050e37040bd181eff2f11e906d6e5984096e5010010e20700000a581596e5020ba0e39421c1e0002092e00000a1e22216a0e1001a81e1981086e50600a0e10510a0e10d46fdeb0600a0e1984086e5e43c00eb7040bde81eff2fe1", "lang": "cpp", "divergences": 2, "c_source": "//cpp\ntypedef int Fix12i;\nextern \"C\" void func_ov002_020bfa74(void);\nextern \"C\" void func_ov002_020c0108(void* self, int x);\nextern \"C\" void _ZN5Actor9UpdatePosEP12CylinderClsn(void* self, void* c);\nextern \"C\" void func_ov002_020ce798(void* self);\n\nextern \"C\" void func_ov002_020bf36c(char* self, void* arg){\n Fix12i saved;\n unsigned char f = *(unsigned char*)(self + 0x709);\n if (f == 0)\n func_ov002_020bfa74();\n if ((*(unsigned char*)(self + 0x6e9) & 1) || *(unsigned char*)(self + 0x706))\n func_ov002_020c0108(self, 1);\n if (*(int*)(self + 0x37c) != 0)\n return;\n saved = *(Fix12i*)(self + 0x98);\n if (*(unsigned char*)(self + 0x6e9) & 1)\n *(Fix12i*)(self + 0x98) = (Fix12i)(((long long)saved * *(Fix12i*)(self + 0x558) + 0x800) >> 12);\n _ZN5Actor9UpdatePosEP12CylinderClsn(self, arg);\n *(Fix12i*)(self + 0x98) = saved;\n func_ov002_020ce798(self);\n}\n", "source": "grindC-2026-06-22"} {"module": "ov007", "addr": "0x020cc4c0", "name": "func_ov007_020cc4c0", "size": 320, "target_hex": "10402de908d04de2f8109fe50040a0e10000d1e5000050e3ec009f150110a01304108015165cfdebb030fdebdc009fe5672efdebd8009fe5652efdebd4009fe5000090e5000050e30000000ac537fdebc4109fe5b0009fe5001091e5bc309fe59c1080e5b020d3e1b4009fe5b4109fe5000002e0010080e1b000c3e1821dfeeba4109fe5000091e5010880e3000081e5c632fdeb0000a0e3fe0bfdeb8c009fe5501084e2001080e5540084e21b87fdeb0110a0e378009fe5001080e58288fdeb0020e0e36c109fe56c009fe5002081e534109fe5e7aaffeb0000a0e300008de50010a0e10020a0e10030a0e1b7aaffeb0200a0e39016fdeb0100a0e308d08de21040bde81eff2fe1e0f1090240b30902640000006600000024d50902fcd6090204030004f1fdffff0e02000000100004a8d4090244ee08026032100290321002", "lang": "cpp", "divergences": 2, "c_source": "//cpp\nstruct FaderBrightness;\n\nstruct GX {\n static void DispOn();\n static void DisableAllBanks();\n};\nstruct Scene {\n void SetFaders(FaderBrightness *fb);\n};\nstruct Sound {\n static void LoadInitialGroup(int);\n};\n\nextern \"C\" void func_02023544(void);\nextern \"C\" void UnloadArchives(void);\nextern \"C\" void func_02017e94(int key);\nextern \"C\" void func_0201a428(void);\nextern \"C\" void Enable3dEngines(void);\nextern \"C\" void Initialise3dGraphics(int arg);\nextern \"C\" void func_ov007_020b7138(void *a, void *b);\nextern \"C\" void func_ov007_020b7090(int a, int b, int c, int d, int e);\n\nextern unsigned char data_0209f1e0;\nextern int data_0209b340[];\nextern int data_0209d524;\nextern int data_0209d6fc;\nextern int data_0209d4a8;\nextern int data_0208ee44;\nextern int data_ov007_02103260;\nextern int data_ov007_02103290;\n\nextern \"C\" int func_ov007_020cc4c0(char *self)\n{\n if (data_0209f1e0 != 0)\n data_0209b340[1] = 1;\n\n func_02023544();\n UnloadArchives();\n func_02017e94(0x64);\n func_02017e94(0x66);\n\n if (data_0209d524 != 0)\n func_0201a428();\n\n data_0209b340[0x27] = data_0209d6fc;\n *(unsigned short *)0x4000304 = (*(unsigned short *)0x4000304 & 0xfffffdf1) | 0x20e;\n GX::DispOn();\n *(unsigned int *)0x4001000 |= 0x10000;\n Enable3dEngines();\n Initialise3dGraphics(0);\n data_0209d4a8 = (int)(self + 0x50);\n ((Scene *)(self + 0x54))->SetFaders((FaderBrightness *)(self + 0x50));\n data_0208ee44 = 1;\n GX::DisableAllBanks();\n data_ov007_02103260 = -1;\n func_ov007_020b7138(&data_ov007_02103290, data_0209b340);\n func_ov007_020b7090(0, 0, 0, 0, 0);\n Sound::LoadInitialGroup(2);\n return 1;\n}\n", "source": "fanout"} {"module": "ov006", "addr": "0x020dac34", "name": "func_ov006_020dac34", "size": 2744, "target_hex": "70402de908d04de20060a0e1531c86e2f808d1e10d0050e300f18f90720200ea710200ea0b0000ea1c0000ea3e0000ea4b0000eabf0000ea010100ea090100ea570100ea660100ea780100ea8c0100eaae0100ea1d0200eac400d6e5000050e30100a003c300c605c400c6050000a003b00cc601d0099fe5000086e09598ffeb000050e35802000ac0099fe5001086e0f000d1e1010080e2b000c1e1520200eaa4099fe5000086e08d9affeb000050e30800000a94199fe5530c86e21020a0e3ba28c0e1011086e0f000d1e1010080e2b000c1e1440200ea530c86e2fc08d0e1000050e3400200da000050e3011040e23d02000a3000a0e3910003e050099fe5001086e00300d1e7032081e0000050e33502001a030086e00110a0e30010c2e5050a80e2c312c0e52f0200ea24099fe5002086e0f000d2e1010040e2b000c2e1fa08d1e1000050e32702001afc089fe5001086e0f000d1e1010080e2b000c1e1210200eaf0089fe5f0189fe50020d0e50030a0e30201d1e70211a0e1000050e30300000ad8089fe50100d0e7000050e30130a013000053e31302000ac4089fe5000086e095feffeb000050e30e02000ab4089fe5000090e5000050e30a02001a94189fe59c089fe50040d1e59c389fe59c289fe5000086e00210a0e30451d3e70441d2e790feffeb000050e31f00000a800055e200006042480050e3fa0100aa580054e200006042140050e3f60100aa38089fe550189fe50140a0e354289fe5004081e5003086e0004082e5f020d3e144189fe544089fe5012082e2b020c3e1004081e535defceb34089fe5001090e5000051e3a80091150000a003000051e3b41091150010a0033e4affebde0100ea800055e200006042480050e3da0100aa580054e200006042140050e3d60100aab8079fe5d0179fe50140a0e3d4279fe5004081e5003086e0004082e5f020d3e1c4179fe5c4079fe5012082e2b020c3e1004081e515defcebb4079fe5001090e5000051e3a80091150000a003000051e3b41091150010a0031e4affeb0030a0e30320a0e10610a0e1050a81e2d301d0e5012082e2301081e2030050e301308302050052e3f7ffffba020053e3020000aa510fa0e3fdddfcebaf0100ea54079fe5faddfcebac0100ea2c079fe5000090e5000050e31000000a18079fe50210a0e3000086e034feffeb000050e30a00000ae4069fe5000086e0dd99ffeb000050e30500000ad4069fe5001086e0f000d1e1010080e2b000c1e1970100eab8069fe5000086e0d299ffeb000050e31200000ac0069fe50610a0e3000086e029feffeb000050e38c01000a8c169fe5c8469fe50028a0e1530c86e20050a0e3bc58c0e1513c86e2010086e04218a0e1042086e0be51c3e10099ffeb7f0100ea74069fe50610a0e3000086e021feffeb0010e0e3010050e1780100da531c86e2fc18d1e1000051e37401000a3010a0e3906122e064169fe5050a82e20520a0e3d321c0e5011086e0f000d1e1010040e2b000c1e1690100ea44069fe5000086e0e6fcffebf8059fe5001086e0f000d1e1010080e2b000c1e1600100ea20069fe50110a0e3000086e0ecfdffeb000050e31a00000ac4059fe5000086e09599ffeb000050e31500000af8059fe5001090e5011051e2001080e50500001aa0059fe5001086e0f000d1e1010080e2b000c1e14a0100ea530c86e20440a0e3a8359fe598259fe5c0159fe5b848c0e10000a0e3000083e5000082e5000081e53f0100ea58059fe5000086e07a99ffeb000050e31200000a88059fe50610a0e3000086e0d1fdffeb000050e33401000a2c159fe568459fe50028a0e1530c86e20050a0e3bc58c0e1513c86e2010086e04218a0e1042086e0be51c3e1a898ffeb270100ea3c059fe50610a0e3000086e0c9fdffeb0010e0e3010050e1200100da531c86e2fc18d1e1000051e31c01000a3010a0e3906122e004159fe5050a82e20520a0e3c322c0e5011086e0f000d1e1010040e2b000c1e1110100ea0030a0e30620a0e1c330c6e50210a0e3050a82e2013083e2c312c0e5050053e3302082e2f9ffffba7c049fe5001086e0f000d1e1010080e2b000c1e1010100ea7c049fe5000086e0d3fbffeb98149fe50040a0e1010086e0cffbffeb000054e30100001a000050e30100000a84049fe541ddfceb30049fe5001086e0f000d1e1010080e2b000c1e1ee0000ea30049fe50810a0e3000086e07afdffeb000050e3e800000a40049fe50810a0e3000086e074fdffeb000050e3e200000ae8139fe5530c86e21420a0e3ba28c0e1011086e0f000d1e1010080e2b000c1e1d90000eacc039fe5002086e0f000d2e1010040e2b000c2e1fa08d1e1000050e3d100001a0620a0e10030a0e30110a0e3050a82e2d411c0e5013083e2c412c0e5050053e3302082e2f8ffffba94039fe5000086e091fbffebb0039fe5000086e08efbffebb4039fe50cddfceb5c139fe5530c86e23c20a0e3ba28c0e1011086e0f000d1e1010080e2b000c1e1b60000ea40039fe5002086e0f000d2e1010040e2b000c2e1fa08d1e1000050e3ae00001a58039fe568139fe5000086e0011086e04cfcffeb5c239fe518139fe50040a0e1010086e0021086e046fcffeb08139fe50050a0e1000091e5000050e32300000a000050e32100000a0000e0e300008de501c0a0e3160084e28010a0e34820a0e30030a0e304c08de53656ffeb0000e0e300008de502c0a0e3160085e28010a0e37820a0e30030a0e304c08de52d56ffeb050054e10600000a530c86e20610a0e3b219c0e1b419c0e1be18c0e1b019c0e1060000ea530c86e2f229d0e1fe18d0e1010052e10610a013b419c011b019c01160029fe584129fe5000086e0011086e067fcffeb0010e0e3010050e10d00001a5c029fe5001090e5000051e3a80091150000a003000051e3b41091150010a003011041e2c748ffeb530c86e25a10a0e3ba18c0e1170000ea010050e31200001a1c029fe540129fe5002090e53c029fe5000052e3a8309215051191e70030a003000090e5000052e3913020e0b41092150010a003011081e2b248ffeb530c86e21e10a0e3ba18c0e1020000ea530c86e25a10a0e3ba18c0e190019fe5001086e0f000d1e1010080e2b000c1e1460000ea80019fe5002086e0f000d2e1010040e2b000c2e1fa08d1e1000050e33e00001a70019fe594119fe5000086e0011086e02bfcffeb0010e0e3010050e10e00001a34019fe5000086e00596ffeb60019fe5001090e5000051e30400000ab40091e5000050e3b400b1c5010040c2000081c50500a0e33555ffeb1e0000ea010050e31600001af0009fe5000086e0ba95ffeb1c019fe5002090e5000052e30a00000ab41092e538019fe5000051e1b41082b2000091b5010080b2000081b5b41092e5b80092e5000051e1b81082c5b40096e55049ffeb0400a0e31c55ffeb050000ea0700a0e31955ffeb050da0e357dcfceb4e0fa0e355dcfceb0020a0e37c109fe5c320c6e5530c86e2ba28c0e1011086e0f000d1e1010080e2b000c1e174009fe598109fe5005086e0014086e00060a0e30500a0e1001090e5041091e531ff2fe10400a0e1001090e5041091e531ff2fe1016086e2050056e3305085e2304084e2f2ffffba3c009fe50010a0e3001080e508d08de27040bde81eff2fe1384f000088530000d35100008a530000400e0a02e80d0a02e90d0a02a851000068171402ea0d0a02eb0d0a026c171402ecf90b025101000068eb0b02450100008c5300009852000044bc1302701714025201000047010000925300008e53000048bd130218fa0b020f270000", "lang": "cpp", "divergences": 2, "c_source": "//cpp\nextern \"C\" {\n extern int func_ov006_020c0f0c(void *p);\n extern int func_ov006_020c1718(void *r0);\n extern int func_ov006_020da834(void *p);\n extern int func_ov006_020da860(void *p, int v);\n extern void _ZN5Sound12PlayBank2_2DEj(unsigned int id);\n extern void func_ov004_020ad79c(int r0arg, int r1arg);\n extern int func_ov006_020da88c(void *p, int v);\n extern void func_ov006_020c1420(void *c, short arg1, void *arg2);\n extern int func_ov006_020da8b8(void *p, int v);\n extern void func_ov006_020da420(void *p);\n extern int func_ov006_020da174(void *p);\n extern void func_ov006_020da154(void *p);\n extern int func_ov006_020da4ac(void *p1, void *p2);\n extern void func_ov004_020b0cac(int c, int a1, int a2, int a3, int arg5, short arg6);\n extern int func_ov006_020da5e8(void *p1, void *p2);\n extern void func_ov006_020c0d68(void *c);\n extern void func_ov004_020b0a54(int c);\n extern void func_ov006_020c0c80(void *c);\n extern void func_ov004_020adb1c(int self);\n \n extern unsigned char data_020a0e40[];\n extern unsigned char data_020a0de8[];\n extern unsigned char data_020a0de9[];\n extern unsigned char data_020a0dea[];\n extern unsigned char data_020a0deb[];\n extern int data_ov006_02141768;\n extern int data_ov006_0214176c;\n extern int data_ov006_02141770;\n extern int data_ov004_020bf9ec;\n extern void *func_020beb68;\n extern int data_ov006_0213bc44;\n extern int data_ov004_020bfa18;\n extern int data_ov006_0213bd48[];\n}\n\nstruct VObj {\n virtual void v0();\n virtual void v1();\n};\n \n #define S16(off) (*(short *)(c + (off)))\n #define S16L(off) (*(short *)((int)(((long long)(c + (off))) & 0xFFFFFFFFFFFFFFFFLL)))\n #define U8(off) (*(unsigned char *)(c + (off)))\n \n extern \"C\" void func_ov006_020dac34(unsigned char *c)\n {\n switch (S16(0x5388)) {\n case 1:\n if (U8(0xc4) == 0) {\n c[0xc3] = 1;\n c[0xc4] = 1;\n S16(0xc0) = 0;\n }\n if (func_ov006_020c0f0c(c + 0x4f38) != 0) {\n S16L(0x5388) += 1;\n }\n break;\n case 2:\n if (func_ov006_020c1718((int *)(c + 0x4f38)) != 0) {\n S16(0x538a) = 0x10;\n S16L(0x5388) += 1;\n } else {\n short cnt = S16(0x538c);\n if (cnt > 0) {\n int t = cnt - 1;\n if (cnt != 0) {\n int idx = t * 0x30;\n unsigned char *p = c + 0x51d3;\n if (p[idx] == 0) {\n p[idx] = 1;\n *(c + idx + 0x52c3) = 1;\n }\n }\n }\n }\n break;\n case 3:\n S16L(0x538a) -= 1;\n if (S16(0x538a) == 0) {\n S16L(0x5388) += 1;\n }\n break;\n case 4: {\n int ok = 0;\n int idx0 = data_020a0e40[0] * 4;\n if (data_020a0de8[idx0] != 0 && data_020a0de9[idx0] != 0) {\n ok = 1;\n }\n if (ok != 0 && func_ov006_020da834(c + 0x51a8) != 0 && data_ov006_02141768 == 0) {\n unsigned char idx1 = data_020a0e40[0];\n unsigned char v5 = data_020a0dea[idx1 * 4];\n unsigned char v4 = data_020a0deb[idx1 * 4];\n if (func_ov006_020da860(c + 0x51a8, 2) != 0) {\n int d0 = v5 - 0x80;\n if (d0 < 0) d0 = -d0;\n if (d0 < 0x48) {\n int d1 = v4 - 0x58;\n if (d1 < 0) d1 = -d1;\n if (d1 < 0x14) {\n data_ov006_0214176c = 1;\n data_ov006_02141768 = 1;\n S16L(0x5388) += 1;\n data_ov004_020bf9ec = 1;\n _ZN5Sound12PlayBank2_2DEj(0x151);\n {\n void *g = func_020beb68;\n int a0 = g ? *(int *)((char *)g + 0xa8) : 0;\n int a1 = g ? *(int *)((char *)g + 0xb4) : 0;\n func_ov004_020ad79c(a0, a1);\n }\n }\n }\n } else {\n int d0 = v5 - 0x80;\n if (d0 < 0) d0 = -d0;\n if (d0 < 0x48) {\n int d1 = v4 - 0x58;\n if (d1 < 0) d1 = -d1;\n if (d1 < 0x14) {\n int cnt3, i;\n unsigned char *p;\n data_ov006_0214176c = 1;\n data_ov006_02141768 = 1;\n S16L(0x5388) += 1;\n data_ov004_020bf9ec = 1;\n _ZN5Sound12PlayBank2_2DEj(0x151);\n {\n void *g = func_020beb68;\n int a0 = g ? *(int *)((char *)g + 0xa8) : 0;\n int a1 = g ? *(int *)((char *)g + 0xb4) : 0;\n func_ov004_020ad79c(a0, a1);\n }\n cnt3 = 0;\n i = 0;\n p = c;\n do {\n unsigned char v = p[0x51d3];\n i++;\n p += 0x30;\n if (v == 3) cnt3++;\n } while (i < 5);\n if (cnt3 < 2) _ZN5Sound12PlayBank2_2DEj(0x144);\n else _ZN5Sound12PlayBank2_2DEj(0x145);\n }\n }\n }\n }\n break;\n }\n case 5:\n if (data_ov006_02141768 != 0 && func_ov006_020da860(c + 0x51a8, 2) != 0 && func_ov006_020c1718((int *)(c + 0x4f38)) != 0) {\n S16L(0x5388) += 1;\n } else if (func_ov006_020c1718((int *)(c + 0x4f38)) != 0) {\n int r = func_ov006_020da88c(c + 0x51a8, 6);\n if (r != 0) {\n S16(0x538c) = 0;\n S16(0x511e) = 0;\n func_ov006_020c1420(c + 0x4f38, (short)r, c + 0x538c);\n }\n } else {\n int r = func_ov006_020da8b8(c + 0x51a8, 6);\n if (r > -1 && S16(0x538c) != 0) {\n (c + r * 0x30)[0x51d3] = 5;\n S16L(0x538c) -= 1;\n }\n }\n break;\n case 6:\n func_ov006_020da420(c + 0x5298);\n S16L(0x5388) += 1;\n break;\n case 7:\n if (func_ov006_020da860(c + 0x5298, 1) != 0 && func_ov006_020c1718((int *)(c + 0x4f38)) != 0) {\n int t = data_ov006_0213bc44 - 1;\n data_ov006_0213bc44 = t;\n if (t == 0) {\n S16L(0x5388) += 1;\n } else {\n S16(0x5388) = 4;\n data_ov006_0214176c = 0;\n data_ov006_02141768 = 0;\n data_ov006_02141770 = 0;\n }\n } else if (func_ov006_020c1718((int *)(c + 0x4f38)) != 0) {\n int r = func_ov006_020da88c(c + 0x5298, 6);\n if (r != 0) {\n S16(0x538c) = 0;\n S16(0x511e) = 0;\n func_ov006_020c1420(c + 0x4f38, (short)r, c + 0x538c);\n }\n } else {\n int r = func_ov006_020da8b8(c + 0x5298, 6);\n if (r > -1 && S16(0x538c) != 0) {\n (c + r * 0x30)[0x52c3] = 5;\n S16L(0x538c) -= 1;\n }\n }\n break;\n case 8: {\n int cnt = 0;\n unsigned char *p = c;\n c[0xc3] = 0;\n do {\n cnt++;\n p[0x52c3] = 2;\n p += 0x30;\n } while (cnt < 5);\n S16L(0x5388) += 1;\n break;\n }\n case 9: {\n int a = func_ov006_020da174(c + 0x51a8);\n int b = func_ov006_020da174(c + 0x5298);\n if (a != 0 || b != 0) {\n _ZN5Sound12PlayBank2_2DEj(0x152);\n }\n S16L(0x5388) += 1;\n break;\n }\n case 10:\n if (func_ov006_020da860(c + 0x51a8, 8) != 0 && func_ov006_020da860(c + 0x5298, 8) != 0) {\n S16(0x538a) = 0x14;\n S16L(0x5388) += 1;\n }\n break;\n case 11:\n S16L(0x538a) -= 1;\n if (S16(0x538a) != 0) {\n break;\n }\n {\n int i = 0;\n unsigned char *p = c;\n do {\n p[0x51d4] = 1;\n i++;\n p[0x52c4] = 1;\n p += 0x30;\n } while (i < 5);\n func_ov006_020da154(c + 0x51a8);\n func_ov006_020da154(c + 0x5298);\n _ZN5Sound12PlayBank2_2DEj(0x147);\n S16(0x538a) = 0x3c;\n S16L(0x5388) += 1;\n }\n break;\n case 12:\n S16L(0x538a) -= 1;\n if (S16(0x538a) == 0) {\n int t4 = func_ov006_020da4ac(c + 0x5298, c + 0x5392);\n int t5 = func_ov006_020da4ac(c + 0x51a8, c + 0x538e);\n if (data_ov006_02141768 != 0 && data_ov006_02141768 != 0) {\n func_ov004_020b0cac(t4 + 0x16, 0x80, 0x48, 0, -1, 1);\n func_ov004_020b0cac(t5 + 0x16, 0x80, 0x78, 0, -1, 2);\n if (t4 != t5) {\n S16(0x5392) = 6;\n S16(0x5394) = 6;\n S16(0x538e) = 6;\n S16(0x5390) = 6;\n } else if (S16(0x5392) != S16(0x538e)) {\n S16(0x5394) = 6;\n S16(0x5390) = 6;\n }\n }\n {\n int r = func_ov006_020da5e8(c + 0x51a8, c + 0x5298);\n if (r == -1) {\n void *g = func_020beb68;\n int a0 = g ? *(int *)((char *)g + 0xa8) : 0;\n int a1 = g ? *(int *)((char *)g + 0xb4) : 0;\n func_ov004_020ad79c(a0, a1 - 1);\n S16(0x538a) = 0x5a;\n } else if (r == 1) {\n void *g = func_020beb68;\n int a0 = g ? *(int *)((char *)g + 0xa8) : 0;\n int arrv = data_ov006_0213bd48[t5];\n int bfa = data_ov004_020bfa18;\n int arg0v = arrv * bfa + a0;\n int a1 = g ? *(int *)((char *)g + 0xb4) : 0;\n func_ov004_020ad79c(arg0v, a1 + 1);\n S16(0x538a) = 0x1e;\n } else {\n S16(0x538a) = 0x5a;\n }\n }\n S16L(0x5388) += 1;\n }\n break;\n case 13:\n S16L(0x538a) -= 1;\n if (S16(0x538a) == 0) {\n int r = func_ov006_020da5e8(c + 0x51a8, c + 0x5298);\n if (r == -1) {\n func_ov006_020c0d68(c + 0x4f38);\n {\n char *g = (char *)func_020beb68;\n if (g != 0) {\n if (*(volatile int *)(g + 0xb4) > 0) {\n int *gi = (int *)((int)(((long long)(int)(g + 0xb4)) & 0xFFFFFFFFFFFFFFFFLL));\n *gi = *gi - 1;\n }\n }\n }\n func_ov004_020b0a54(5);\n } else if (r == 1) {\n func_ov006_020c0c80(c + 0x4f38);\n {\n void *g = func_020beb68;\n if (g != 0) {\n char *gb = (char *)g;\n if (*(volatile int *)(gb + 0xb4) < 0x270f) {\n int *fld = (int *)((int)(((long long)(int)(gb + 0xb4)) & 0xFFFFFFFFFFFFFFFFLL));\n *fld = *fld + 1;\n }\n {\n int t = *(int *)(gb + 0xb4);\n if (t > *(int *)(gb + 0xb8)) {\n *(int *)(gb + 0xb8) = t;\n }\n }\n }\n }\n func_ov004_020adb1c(*(int *)(c + 0xb4));\n func_ov004_020b0a54(4);\n } else {\n func_ov004_020b0a54(7);\n _ZN5Sound12PlayBank2_2DEj(0x140);\n _ZN5Sound12PlayBank2_2DEj(0x138);\n }\n c[0xc3] = 0;\n S16(0x538a) = 0;\n S16L(0x5388) += 1;\n }\n break;\n }\n \n {\n int i = 0;\n unsigned char *p1 = c + 0x51a8;\n unsigned char *p2 = c + 0x5298;\n do {\n ((VObj *)p1)->v1();\n ((VObj *)p2)->v1();\n i++;\n p1 += 0x30;\n p2 += 0x30;\n } while (i < 5);\n }\n data_ov006_0214176c = 0;\n }\n", "source": "fanout-fable", "floor": {"class": "ordering", "evidence": "2026-07-11 triage (wf_577b3994, prober+skeptic): our compile speculatively hoists the case-11 loop-counter init (mov r3,#0) across the bne into the ldr/add load-use stall slot; ROM keeps it in the loop preheader. All lever families (temps, decl order, block restructure, pragmas, goto CFG-preserving) inert or coupled; the hoist is not suppressible from source.", "date": "2026-07-11"}} @@ -7,18 +8,19 @@ {"module": "ov092", "addr": "0x02131010", "name": "func_ov092_02131010", "size": 416, "target_hex": "10402de928d04de20040a0e1ad7efbeb000050e31500000abeb4feeb000050e30900000a6c019fe5051c84e2002084e0000092e5010580e3000082e5000091e5040080e3000081e5080000ea44019fe5051c84e2002084e0000092e50105c0e3000082e5000091e50400c0e3000081e58ce084e2010b84e2f030dee1f01ed0e18ec084e2902084e2011083e0b010cee1f030dce1f21ed0e1011083e0b010cce1f010d2e1f40ed0e1000081e0b000c2e19c0094e5000050e328d08d021040bd081eff2f010400a0e10010a0e3d37efbebc90f84e2c41cfcebc90f84e27d11fceb000050e328d08d021040bd081eff2f01013b84e200e0a0e3b4eec3e1f40ed3e194209fe50c108de2b20ec3e1f2ced3e10400a0e1b0cec3e198e084e5a8e084e55c3094e50c308de5603094e510308de5643094e514308de5067cfbeb741084e24600a0e34e85fbeb5ce094e518108de200e08de5602094e50400a0e104208de564c094e51e3942e20120a0e308c08de504308de518e08de51c308de520c08de54b7afbeb0000a0e39c0084e528d08de21040bde81eff2fe10405000000c05d00", "lang": "c", "divergences": 2, "c_source": "typedef struct { int x, y, z; } Vector3;\ntypedef short s16;\n#define LA(p) (((long long)(int)(p)) & 0xFFFFFFFFFFFFFFFFLL)\nvoid *_ZN5Actor13ClosestPlayerEv(void *self);\nint func_ov002_020de328(void);\nvoid _ZN5Actor9UpdatePosEP12CylinderClsn(void *self, void *c);\nvoid func_020383fc(void *a);\nint _ZNK12WithMeshClsn10IsOnGroundEv(void *self);\nvoid _ZN5Actor10EarthquakeERK7Vector35Fix12IiE(void *self, const Vector3 *v, int fix);\nvoid func_02012694(int a, int *t);\nvoid _ZN5Actor13LandingDustAtER7Vector3b(void *self, Vector3 *v, int b);\nint func_ov092_02131010(unsigned char *thiz)\n{\n volatile Vector3 tmp;\n Vector3 eq;\n Vector3 dust;\n\n if (_ZN5Actor13ClosestPlayerEv(thiz) != 0) {\n if (func_ov002_020de328() != 0) {\n int *p504 = (int *)LA(thiz + 0x504);\n int *p500 = (int *)LA(thiz + 0x500);\n *p504 |= 0x400000;\n *p500 |= 4;\n } else {\n int *p504 = (int *)LA(thiz + 0x504);\n int *p500 = (int *)LA(thiz + 0x500);\n *p504 &= ~0x400000;\n *p500 &= ~4;\n }\n }\n\n {\n s16 *p8c = (s16 *)LA(thiz + 0x8c);\n s16 *p8e = (s16 *)LA(thiz + 0x8e);\n s16 *p90 = (s16 *)LA(thiz + 0x90);\n *p8c += ((s16 *)(thiz + 0x400))[0xe0 / 2];\n *p8e += ((s16 *)(thiz + 0x400))[0xe2 / 2];\n *p90 += ((s16 *)(thiz + 0x400))[0xe4 / 2];\n }\n\n {\n int v = *(int *)(thiz + 0x9c);\n if (v == 0) return v;\n }\n\n _ZN5Actor9UpdatePosEP12CylinderClsn(thiz, 0);\n func_020383fc(thiz + 0x324);\n {\n int g = _ZNK12WithMeshClsn10IsOnGroundEv(thiz + 0x324);\n if (g == 0) return g;\n }\n\n {\n short lr = 0;\n ((short *)(thiz + 0x400))[0xe4 / 2] = lr;\n ((short *)(thiz + 0x400))[0xe2 / 2] = ((short *)(thiz + 0x400))[0xe4 / 2];\n ((short *)(thiz + 0x400))[0xe0 / 2] = ((short *)(thiz + 0x400))[0xe2 / 2];\n *(int *)(thiz + 0x98) = lr;\n *(int *)(thiz + 0xa8) = lr;\n }\n\n eq.x = *(int *)(thiz + 0x5c);\n eq.y = *(int *)(thiz + 0x60);\n eq.z = *(int *)(thiz + 0x64);\n _ZN5Actor10EarthquakeERK7Vector35Fix12IiE(thiz, &eq, 0x5dc000);\n func_02012694(0x46, (int *)(thiz + 0x74));\n\n {\n int x, y, z;\n x = *(int *)(thiz + 0x5c);\n tmp.x = x;\n y = *(int *)(thiz + 0x60);\n tmp.y = y;\n z = *(int *)(thiz + 0x64);\n y = y - 0x78000;\n tmp.z = z;\n tmp.y = y;\n dust.x = x;\n dust.y = y;\n dust.z = z;\n }\n _ZN5Actor13LandingDustAtER7Vector3b(thiz, &dust, 1);\n\n *(int *)(thiz + 0x9c) = 0;\n return 0;\n}\n", "source": "session-improved", "floor": {"class": "ordering", "evidence": "one-slot mov-vs-volatile-str swap after ldr (LandingDustAt bool arg); ~30 spellings (arg naming/reassign, comma hoist, fake dep, C++ copy-temp, cast-away volatile, stmt perms, pragmas, 6o equal-arm ternaries) + 25min PERM_RANDOMIZE-focused permuter all inert; same family as func_ov060_02113740", "date": "2026-07-11"}} {"module": "ov002", "addr": "0x020dd9f8", "name": "_ZN6Player19St_GroundPound_MainEv", "size": 1016, "target_hex": "10402de910d04de20040a0e1061c84e2d31ed1e1000051e3300000da0000a0e3a80084e5e306d4e5020050e30a0aa003a80084050400a0e1d884ffeb000050e3dd00000a88039fe5001084e00000d1e5010040e20000c1e5e306d4e5000050e30a00000a0307d4e500c0a0e33c10a0e3000050e3a210a0130400a0e10121a0e3013aa0e300c08de52985ffebca0000ea0307d4e500c0a0e33d10a0e3000050e3a110a0130400a0e10121a0e3013aa0e300c08de51e85ffeb320aa0e3000060e2a80084e5d906d4e5742084e21510a0e3a1d1fceb600094e5840684e5b60000ea000051e39f00001a0410a0e10e0d84e2ed4500eb060c84e2b40ad0e1000050e31d00000a010050e30e00001a0400a0e11595ffeb00c0a0e30400a0e14210a0e30121a0e3013aa0e300c08de50085ffebff00a0e3e306c4e5bb1f84e2000091e52000c0e3000081e5060c84e2be0cd0e1010000e20008a0e12008b0e19600000a0400a0e10110a0e3ff89ffeb10d08de20100a0e31040bde81eff2fe1de06d4e5000050e37000001a0400a0e13e1400eb020050e310d08d020100a0031040bd081eff2f010400a0e158ffffeb0307d4e5000050e30300000a741084e2d300a0e3a3d2fceb030000ea6c0694e5741084e2900080e29ed2fceb5c1094e504108de5600094e508008de5643094e50c308de50307d4e5000050e31900000a602094e55700a0e3052982e208208de5a314fdeb04109de508209de50c309de55800a0e39e14fdeb0707d4e5000050e33d00001a04109de508209de50c309de55a00a0e39614fdeb600094e504109de50f2980e20c309de55900a0e308208de58f14fdeb300000ea080094e5020050e31400000a602094e5d300a0e30a2a82e208208de58614fdeb0707d4e5000050e32500001a600094e504109de50f2980e20c309de508208de5d400a0e37c14fdeb04109de508209de50c309de5d500a0e37714fdeb180000ea602094e54d0fa0e30a2a82e208208de57114fdeb04109de508209de50c309de5ec009fe56c14fdeb0707d4e5000050e30b00001a600094e504109de5322a80e20c309de5cc009fe508208de56214fdeb04109de508209de50c309de5b8009fe55d14fdebb4009fe5b4209fe5000090e55c1084e2e4befceb060c84e20610a0e3b41ac0e11b0000ea0400a0e1d1f7ffebc50f84e2b3dcfcebc50f84e2a4dcfceb140000ea7c209fe51810a0e30030d2e574209fe5930101e0f11092e1000051e30200001a0484ffeb000050e30600000a58109fe50400a0e1c11400eb10d08de20100a0e31040bde81eff2fe10400a0e10110a0e348d6ffeb0400a0e10584ffeb0100a0e310d08de21040bde81eff2fe1e306000035010000360100003701000018f3090200805700400e0a02a0f409023c011102", "lang": "cpp", "divergences": 2, "c_source": "//cpp\ntypedef signed char s8;\ntypedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef unsigned int u32;\n\nstruct Vector3 { int x, y, z; };\n\nextern \"C\" {\nint _ZN6Player12FinishedAnimEv(char* self);\nvoid _ZN6Player7SetAnimEji5Fix12IiEj(char* self, unsigned int anim, int a, int b, unsigned int c);\nvoid _ZN5Sound13PlayCharVoiceEjjRK7Vector3(unsigned int a, unsigned int b, const Vector3* v);\nvoid func_ov002_020ef2a4(char* c, char* arg);\nvoid func_ov002_020c2f64(char* c);\nvoid func_ov002_020c0364(char* c, u32 arg);\nint func_ov002_020e2c84(char* self);\nvoid func_ov002_020dd908(char* sb);\nvoid _ZN5Sound9PlayBank0EjRK7Vector3(unsigned int id, const Vector3* v);\nvoid _ZN8Particle6System9NewSimpleEj5Fix12IiES2_S2_(unsigned int id, int x, int y, int z);\nvoid func_0200d8c8(void* cam, const void* v, int strength);\nvoid func_ov002_020dbc94(char* c);\nvoid _ZN12CylinderClsn5ClearEv(char* self);\nvoid _ZN12CylinderClsn6UpdateEv(char* self);\nvoid _ZN6Player11ChangeStateERNS_5StateE(char* self, void* state);\nint func_ov002_020d36d8(char* c, int arg);\nvoid func_ov002_020bedd4(char* self);\n}\n\nextern void* data_0209f318;\nextern u8 data_020a0e40;\nextern char data_0209f4a0[];\nextern int data_ov002_0211013c;\n\n#pragma opt_strength_reduction off\n#pragma opt_common_subs off\n\nextern \"C\" int _ZN6Player19St_GroundPound_MainEv(char* self)\n{\n s8 timer = *(s8*)(self + 0x6e3);\n if (timer > 0) {\n *(int*)(self + 0xa8) = 0;\n if (*(u8*)(self + 0x6e3) == 2)\n *(int*)(self + 0xa8) = 0xa000;\n if (_ZN6Player12FinishedAnimEv(self) != 0) {\n *(u8*)((((int)self) + 0x6e3) & 0xFFFFFFFFFFFFFFFFLL) -= 1;\n if (*(u8*)(self + 0x6e3) != 0) {\n u32 anim = 0x3c;\n if (*(u8*)(self + 0x703) != 0) anim = 0xa2;\n _ZN6Player7SetAnimEji5Fix12IiEj(self, anim, 0x40000000, 0x1000, 0);\n } else {\n u32 anim = 0x3d;\n if (*(u8*)(self + 0x703) != 0) anim = 0xa1;\n _ZN6Player7SetAnimEji5Fix12IiEj(self, anim, 0x40000000, 0x1000, 0);\n *(int*)(self + 0xa8) = -0x32000;\n _ZN5Sound13PlayCharVoiceEjjRK7Vector3(*(u8*)(self + 0x6d9), 0x15, (Vector3*)(self + 0x74));\n *(int*)(self + 0x684) = *(int*)(self + 0x60);\n }\n }\n } else if (timer == 0) {\n u16 st;\n func_ov002_020ef2a4(self + 0x380, self);\n st = *(u16*)(self + 0x6a4);\n if (st != 0) {\n if (st == 1) {\n func_ov002_020c2f64(self);\n _ZN6Player7SetAnimEji5Fix12IiEj(self, 0x42, 0x40000000, 0x1000, 0);\n *(u8*)(self + 0x6e3) = 0xff;\n *(u32*)((((int)self) + 0x2ec) & 0xFFFFFFFFFFFFFFFFLL) &= ~0x20;\n }\n {\n u16 f = *(u16*)(self + 0x6ce) & 1;\n if (f != 0) {\n func_ov002_020c0364(self, 1);\n return 1;\n }\n }\n } else {\n if (*(u8*)(self + 0x6de) == 0) {\n if (func_ov002_020e2c84(self) == 2)\n return 1;\n func_ov002_020dd908(self);\n if (*(u8*)(self + 0x703) != 0) {\n _ZN5Sound9PlayBank0EjRK7Vector3(0xd3, (Vector3*)(self + 0x74));\n } else {\n _ZN5Sound9PlayBank0EjRK7Vector3(*(u32*)(self + 0x66c) + 0x90, (Vector3*)(self + 0x74));\n }\n {\n volatile Vector3 v;\n int x = *(int*)(self + 0x5c);\n v.x = x;\n v.y = *(int*)(self + 0x60);\n int z = *(int*)(self + 0x64);\n v.z = z;\n if (*(u8*)(self + 0x703) != 0) {\n int yy = *(int*)(self + 0x60) + 0x14000;\n v.y = yy;\n _ZN8Particle6System9NewSimpleEj5Fix12IiES2_S2_(0x57, x, yy, z);\n _ZN8Particle6System9NewSimpleEj5Fix12IiES2_S2_(0x58, v.x, v.y, v.z);\n if (*(u8*)(self + 0x707) == 0) {\n _ZN8Particle6System9NewSimpleEj5Fix12IiES2_S2_(0x5a, v.x, v.y, v.z);\n int y2 = *(int*)(self + 0x60) + 0x3c000;\n int xx = v.x;\n int zz = v.z;\n v.y = y2;\n _ZN8Particle6System9NewSimpleEj5Fix12IiES2_S2_(0x59, xx, y2, zz);\n }\n } else if (*(int*)(self + 8) != 2) {\n int yy = *(int*)(self + 0x60) + 0xa000;\n v.y = yy;\n _ZN8Particle6System9NewSimpleEj5Fix12IiES2_S2_(0xd3, x, yy, z);\n if (*(u8*)(self + 0x707) == 0) {\n int y2 = *(int*)(self + 0x60) + 0x3c000;\n int xx = v.x;\n int zz = v.z;\n v.y = y2;\n _ZN8Particle6System9NewSimpleEj5Fix12IiES2_S2_(0xd4, xx, y2, zz);\n _ZN8Particle6System9NewSimpleEj5Fix12IiES2_S2_(0xd5, v.x, v.y, v.z);\n }\n } else {\n int yy = *(int*)(self + 0x60) + 0xa000;\n v.y = yy;\n _ZN8Particle6System9NewSimpleEj5Fix12IiES2_S2_(0x134, x, yy, z);\n _ZN8Particle6System9NewSimpleEj5Fix12IiES2_S2_(0x135, v.x, v.y, v.z);\n if (*(u8*)(self + 0x707) == 0) {\n int y2 = *(int*)(self + 0x60) + 0x32000;\n int xx = v.x;\n int zz = v.z;\n v.y = y2;\n _ZN8Particle6System9NewSimpleEj5Fix12IiES2_S2_(0x136, xx, y2, zz);\n _ZN8Particle6System9NewSimpleEj5Fix12IiES2_S2_(0x137, v.x, v.y, v.z);\n }\n }\n }\n func_0200d8c8(data_0209f318, self + 0x5c, 0x578000);\n *(u16*)(self + 0x6a4) = 6;\n } else {\n func_ov002_020dbc94(self);\n _ZN12CylinderClsn5ClearEv(self + 0x314);\n _ZN12CylinderClsn6UpdateEv(self + 0x314);\n }\n }\n } else {\n if (*(short*)(data_0209f4a0 + data_020a0e40 * 0x18) != 0 || _ZN6Player12FinishedAnimEv(self) != 0) {\n _ZN6Player11ChangeStateERNS_5StateE(self, &data_ov002_0211013c);\n return 1;\n }\n func_ov002_020d36d8(self, 1);\n }\n func_ov002_020bedd4(self);\n return 1;\n}\n", "source": "fanout-fable"} {"module": "ov002", "addr": "0x020ade78", "name": "_ZN5Enemy14UpdateYoshiEatER12WithMeshClsn", "size": 972, "target_hex": "f0432de904d04de20060a0e1b02096e50150a0e1010712e20100a0130000a003000050e31700000ad00096e5000050e3b0108602000091050107c003000081050a00000a5c2080e2000092e5601086e25c0086e5040092e5600086e5080092e5640086e5000091e5030880e2000081e50000a0e30701c6e504d08de20200a0e3f043bde81eff2fe1020812e20100a0130000a003000050e30000a0130701c61504d08d120100a013f043bd181eff2f11020712e20100a0130000a003000050e30200001a0701d6e5000050e3b100000a010c86e2b400d0e1000050e3411f8612b000d11101004012b000c111b00096e5020710e20100a0130000a003000050e36500000a0100a0e30701c6e5010c86e20510a0e3b410c0e1b01086e2000091e50207c0e3000081e5d00096e5000050e30539a0033900000a5c2080e2000092e5601086e25c0086e5040092e56ce29fe5600086e5080092e50040a0e3640086e5000091e5322aa0e3320a80e2000081e5d00096e5023ba0e3be78d0e15c1086e2000091e54772a0e18780a0e18870a0e1f7c09ee1017088e28770a0e19c9288e09c8428e0cccfa0e1039099e09c8228e00080a8e22996a0e1089a89e1090080e0000081e5f7709ee1641086e2000091e597e28ce003e09ee097c42ce0c73fa0e193c22ce00020ace22e36a0e1023a83e1030080e0000081e5d00096e58c1080e2f000d1e1b209c6e1f200d1e1b409c6e1f400d1e1b609c6e1d00096e5983090e5050953e30a0a83a2980086a50a0000aac30fa0e18015a0e18325a0e1020ba0e3002092e0a31a81e10000a1e22216a0e1001a81e1050981e2980086e5981096e55c019fe50020a0e3917084e0914224e0c13fa0e1021ba0e3011097e0934024e00000a4e22116a0e1001a81e1981086e50309a0e3a80086e5d02086e50500a0e15d1dfeeb0040a0e10500a0e1621dfeeb0600a0e10010a0e3be8afdeb0500a0e1af28feeb0500a0e1681dfeeb000050e32600000a0500a0e1451dfeeb0070a0e1040087e2d41086e21927feeb0500a0e16b1dfeeb000050e30000a003a80086050701c6050d00000a040087e2d41086e20f27feeba81096e53100e0e3910000e0a0309fe5a02fa0e19310c0e0c002a0e1d81096e5000082e02894feeba80086e5a40086e2002090e5d41096e5ac3086e2811182e0001080e5002093e5dc1096e5811182e0001083e5643bfeeb980086e5f409d6e1000054e3be08c6e10100001a0500a0e1271dfeeb04d08de20300a0e3f043bde81eff2fe10000a0e3d00086e5b02086e2001092e50e18c1e3001082e50701c6e504d08de2f043bde81eff2fe114220802cc1400001f85eb51", "lang": "c", "divergences": 2, "c_source": "typedef unsigned short u16;\ntypedef short s16;\n\nenum { false, true };\n\nextern int _ZNK12WithMeshClsn13GetLimMovFlagEv(char *c);\nextern void _ZN12WithMeshClsn13SetLimMovFlagEv(char *c);\nextern void _ZN12WithMeshClsn15ClearLimMovFlagEv(char *c);\nextern void _ZN5Actor9UpdatePosEP12CylinderClsn(char *self, int p);\nextern void func_020383fc(char *c);\nextern int _ZNK12WithMeshClsn10IsOnGroundEv(char *c);\nextern char *_ZNK12WithMeshClsn14GetFloorResultEv(char *c);\nextern void _ZNK11SurfaceInfo12CopyNormalToER7Vector3(char *p, char *v);\nextern int _ZNK12WithMeshClsn13JustHitGroundEv(char *c);\nextern int _ZN4cstd4fdivEii(int a, int b);\nextern int Vec3_HorzLen(int *v);\nextern short data_02082214[];\n\nint _ZN5Enemy14UpdateYoshiEatER12WithMeshClsn(char *self, char *clsn) {\n int flags;\n int t;\n int v;\n int lim;\n\n flags = *(int *)(self + 0xb0);\n t = flags & 0x40000;\n t = t != 0;\n if (t != false) {\n if (*(char **)(self + 0xd0) == 0) {\n *(int *)(((long long)(int)(self + 0xb0)) & 0xFFFFFFFFFFFFFFFFLL) &= ~0x40000;\n } else {\n char *o = *(char **)(self + 0xd0) + 0x5c;\n *(int *)(self + 0x5c) = *(int *)(int)(((long long)(int)o) & 0xFFFFFFFFFFFFFFFFLL);\n *(int *)(self + 0x60) = *(int *)(o + 4);\n *(int *)(self + 0x64) = *(int *)(o + 8);\n *(int *)(((long long)(int)(self + 0x60)) & 0xFFFFFFFFFFFFFFFFLL) += 0x30000;\n }\n *(unsigned char *)(self + 0x107) = 0;\n return 2;\n }\n t = flags & 0x20000;\n t = t != 0;\n if (t != false) {\n *(unsigned char *)(self + 0x107) = 0;\n return 1;\n }\n t = flags & 0x80000;\n t = t != 0;\n if (t != false || *(unsigned char *)(self + 0x107) != 0) {\n if (*(u16 *)(self + 0x104) != 0)\n *(u16 *)(((long long)(int)(self + 0x104)) & 0xFFFFFFFFFFFFFFFFLL) -= 1;\n t = *(int *)(self + 0xb0) & 0x80000;\n t = t != 0;\n if (t != false) {\n *(unsigned char *)(self + 0x107) = 1;\n *(u16 *)(self + 0x104) = 5;\n *(int *)(((long long)(int)(self + 0xb0)) & 0xFFFFFFFFFFFFFFFFLL) &= ~0x80000;\n if (*(char **)(self + 0xd0) == 0) {\n v = 0x14000;\n } else {\n char *o2 = *(char **)(self + 0xd0) + 0x5c;\n *(int *)(self + 0x5c) = *(int *)(int)(((long long)(int)o2) & 0xFFFFFFFFFFFFFFFFLL);\n *(int *)(self + 0x60) = *(int *)(o2 + 4);\n *(int *)(self + 0x64) = *(int *)(o2 + 8);\n *(int *)(((long long)(int)(self + 0x60)) & 0xFFFFFFFFFFFFFFFFLL) += 0x32000;\n {\n long long rnd = 0x800;\n char *o3 = *(char **)(self + 0xd0);\n u16 ang = *(u16 *)(o3 + 0x8e);\n int idx = (ang >> 4) << 1;\n *(int *)(((long long)(int)(self + 0x5c)) & 0xFFFFFFFFFFFFFFFFLL) =\n (int)(((long long)data_02082214[idx] * 0x32000 + rnd) >> 12) +\n *(int *)(((long long)(int)(self + 0x5c)) & 0xFFFFFFFFFFFFFFFFLL);\n *(int *)(((long long)(int)(self + 0x64)) & 0xFFFFFFFFFFFFFFFFLL) +=\n (int)(((long long)data_02082214[idx + 1] * 0x32000 + rnd) >> 12);\n }\n {\n s16 *p = (s16 *)(*(char **)(self + 0xd0) + 0x8c);\n *(s16 *)(self + 0x92) = *(s16 *)(int)(((long long)(int)p) & 0xFFFFFFFFFFFFFFFFLL);\n *(s16 *)(self + 0x94) = p[1];\n *(s16 *)(self + 0x96) = p[2];\n }\n v = *(int *)(*(char **)(self + 0xd0) + 0x98);\n }\n if (v >= 0x14000)\n *(int *)(self + 0x98) = v + 0xa000;\n else\n *(int *)(self + 0x98) = (int)(((long long)v * 0x800 + 0x800) >> 12) + 0x14000;\n *(int *)(self + 0x98) = (int)(((long long)*(int *)(self + 0x98) * 0x14cc + 0x800) >> 12);\n *(int *)(self + 0xa8) = 0xc000;\n *(int *)(self + 0xd0) = 0;\n }\n lim = _ZNK12WithMeshClsn13GetLimMovFlagEv(clsn);\n _ZN12WithMeshClsn13SetLimMovFlagEv(clsn);\n _ZN5Actor9UpdatePosEP12CylinderClsn(self, 0);\n func_020383fc(clsn);\n if (_ZNK12WithMeshClsn10IsOnGroundEv(clsn) != 0) {\n char *fr = _ZNK12WithMeshClsn14GetFloorResultEv(clsn);\n _ZNK11SurfaceInfo12CopyNormalToER7Vector3(fr + 4, self + 0xd4);\n if (_ZNK12WithMeshClsn13JustHitGroundEv(clsn) == 0) {\n *(int *)(self + 0xa8) = 0;\n *(unsigned char *)(self + 0x107) = 0;\n } else {\n _ZNK11SurfaceInfo12CopyNormalToER7Vector3(fr + 4, self + 0xd4);\n *(int *)(self + 0xa8) =\n _ZN4cstd4fdivEii((*(int *)(self + 0xa8) * -50) / 100, *(int *)(self + 0xd8));\n }\n {\n int *pa = (int *)(int)(((long long)(int)(self + 0xa4)) & 0xFFFFFFFFFFFFFFFFLL);\n *pa += *(int *)(self + 0xd4) << 3;\n *(int *)(((long long)(int)(self + 0xac)) & 0xFFFFFFFFFFFFFFFFLL) += *(int *)(self + 0xdc) << 3;\n *(int *)(self + 0x98) = Vec3_HorzLen(pa);\n }\n }\n *(s16 *)(self + 0x8e) = *(s16 *)(self + 0x94);\n if (lim == 0)\n _ZN12WithMeshClsn15ClearLimMovFlagEv(clsn);\n return 3;\n }\n *(int *)(self + 0xd0) = 0;\n *(int *)(((long long)(int)(self + 0xb0)) & 0xFFFFFFFFFFFFFFFFLL) &= ~0xe0000;\n *(unsigned char *)(self + 0x107) = 0;\n return 0;\n}\n", "source": "fable-subagent", "note": "DIV=2, 241/243 insns byte-exact. Residual is EXACTLY the 6o floor(ordering) 'speculative stall-slot fill' class: at +0x174/+0x17c ROM fills the d0-load delay slot with 'mov r3,#0x800' then 'add r1,r6,#0x5c' (laundered dest base); mwcc invariably hoists the add first. ~10 spellings tried: named rnd (int and long long), constant-first operand order, RHS-first explicit assignment, equal-arm ternary on the address (folds), alternate launder signedness (re-rolls global colors), named ang, m1 temp, statement swaps. decomp-permuter (freshly set up in vendor/, Windows patches applied per tools/permuter/README) ran 7000+ iterations at score 120 without improvement - same as func_ov006_020dac34 in 6o. LOAD-BEARING LEVERS that got here (keep them): guard reads d0 as *(char**) to CSE with the o/o2 pointer inits (type-mismatched *(int*) guard forces a reload); o/o2 = d0+0x5c with PLAIN arithmetic + first deref through u64-launder of o (forces add-first materialization without breaking CSE; laundering o's INIT instead breaks the d0 CSE); p = d0+0x8c same pattern; materialized bools as 'flags & K; t = t != 0; if (t != false)'; laundered RMWs on self+0xb0/0x60/0x5c/0x64/0x104/0xa4/0xac; named laundered pa passed to Vec3_HorzLen (shares the RMW base); explicit '(x * -50) / 100' regenerates the mvn/mul/magic-div; fix12 generic umull+mla from (long long)tbl[i]*0x32000+rnd>>12."} -{"module": "arm9", "addr": "0x02068398", "name": "func_02068398", "size": 120, "target_hex": "00402de904d04de264009fe5001090e5000051e304d08d020000a0030040bd081eff2f01040090e5000050e30300000ab40490e5000050e30000000a0010a0e12c009fe5041080e5270000eb20109fe50220a0e3043091e50100a0e3ac34d3e50e30c1e50c20c1e504d08de20040bde81eff2fe12c9d0a02", "lang": "c", "divergences": 1, "c_source": "/* BEST pure-C under 1.2/sp2p3: size 0x78, divergences=1\n *\n * Residual at +0x38:\n * ROM: beq #8 (skip mov when y==0; r1 keeps sel)\n * CW: moveq r0, r1 (r0 = sel when y==0), then shared mov r1,r0\n *\n * Shape lever: `sel = p ? p : sel` (or `if (p==0) p = sel; sel = p`) forces the\n * always-execute `mov r1,r0` tail and restores size 0x78. The plain\n * `if (p) sel = p` form if-converts to `movne r1,r0` and shrinks to 0x74.\n *\n * Exhausted (2026-07-23, 150+ pure-C variants): c048 multi-pred (+8), loops\n * (while/for/do \u2192 0x80 bottom-test), switch, volatile both arms, //cpp refs,\n * goto-pin 6o, bool locals, sibling if/else keep/take, all known opt pragmas\n * (generateconditionalassignments/peephole/cse/sched/\u2026 inert),\n * #pragma optimization_level 1 emits CLEAN mid `beq; mov r1,r0` but loses\n * predicated early-return + O2+ tail interleave (size 0x7c, many mid/tail\n * diffs). No flag state mixes O1 middle with O4 prologue/tail (notes \u00a76u).\n * Known floor; hand-asm whole-function matches but is disallowed for game logic.\n */\ntypedef unsigned char u8;\nextern u8 data_020a9d2c[];\nextern void func_02068484(void);\n\nint func_02068398(void)\n{\n void *sel = *(void **)data_020a9d2c;\n void *p;\n\n if (sel == 0)\n return 0;\n\n p = *(void **)(data_020a9d2c + 4);\n if (p == 0)\n goto done;\n p = *(void **)((u8 *)p + 0x4b4);\n sel = p ? p : sel;\ndone:\n *(void **)(data_020a9d2c + 4) = sel;\n func_02068484();\n {\n u8 *d = data_020a9d2c;\n void *q = *(void **)(d + 4);\n d[0xe] = *((u8 *)q + 0x4ac);\n d[0xc] = 2;\n }\n return 1;\n}\n", "source": "lunavyqo-groupb-pure-c-best", "note": "size-mismatch size 0x78 vs 0x74", "floor": {"class": "cond_opt", "evidence": "6u: single-condition 1-pred beq+mov unreachable under O4,p; ternary size-exact div=1 moveq residual; c048 multi-pred costs +8; 150+ pure-C variants; no HAND-ASM", "date": "2026-07-23"}, "floor_note": "6u single-condition beq+mov unreachable; div=1 moveq residual"} {"module": "arm9", "addr": "0x02022328", "name": "_ZN8Particle17CheckLavaCallback14SpawnParticlesERNS_6SystemE", "size": 240, "target_hex": "f04f2de95cd04de20140a0e1c10000eb08a094e500005ae35cd08d02f04fbd081eff2f0120b08de20c608de200508de20040a0e318709ae50c309ae514c09ae508909ae51c209ae510109ae50600a0e1038087e009908ce0017082e0795400eb8801a0e14bc980e28981a0e18731a0e10600a0e10510a0e10420a0e100808de504c08de508308de5355400eb0600a0e1e15a00eb000050e30300000a0b00a0e19a5600eb010050e30200000abc02dae1be02cae1050000ea50109de50c009ae5071a81e2c111a0e1000041e018008ae50600a0e14c5400eb00a09ae500005ae3d3ffff1a5cd08de2f04fbde81eff2fe1", "lang": "cpp", "divergences": 2, "c_source": "//cpp\nstruct Vector3 { int x, y, z; Vector3(int a,int b,int c):x(a),y(b),z(c){} Vector3(){} };\nstruct Actor;\n\nstruct RaycastGround {\n char pad0[0x14];\n unsigned int sub[(0x50 - 0x14) / 4];\n RaycastGround();\n ~RaycastGround();\n void SetObjAndPos(const Vector3 &pos, Actor *obj);\n int DetectClsn();\n};\n\nstruct Node {\n Node *next;\n char p4[4];\n int f8;\n int fc;\n int f10;\n int f14;\n int f18;\n int f1c;\n char p20[0x2c - 0x20];\n unsigned short f2c;\n unsigned short f2e;\n};\n\nstruct System;\n\nextern \"C\" int func_02037e38(unsigned int *p);\n\nnamespace Particle {\nstruct System {};\nstruct SimpleCallback { void SpawnParticles(System &sys); };\nstruct CheckLavaCallback : SimpleCallback { void SpawnParticles(System &sys); };\n\nvoid CheckLavaCallback::SpawnParticles(System &sys)\n{\n SimpleCallback::SpawnParticles(sys);\n\n for (Node *n = *(Node **)((char *)&sys + 8); n != 0; n = n->next) {\n int sx = n->f14 + n->f8;\n int sy = n->f18 + n->fc;\n int sz = n->f1c + n->f10;\n RaycastGround rg;\n Vector3 v;\n v.y = (sy << 3) + 0x12c000;\n v.x = sx << 3;\n v.z = sz << 3;\n rg.SetObjAndPos(v, 0);\n if (rg.DetectClsn() == 0)\n goto Lac;\n if (func_02037e38(rg.sub) != 1) {\n Lac:\n n->f2e = n->f2c;\n } else {\n n->f18 = ((int)rg.sub[12] + 0x7000 >> 3) - n->fc;\n }\n }\n}\n}\n", "source": "fanout"} {"module": "arm9", "addr": "0x02021024", "name": "_ZN3OAM6RenderEbP7OamAttriiii5Fix12IiEi", "size": 1152, "target_hex": "f04f2de91cd04de201a0a0e100208de504308de5000050e348909de54c809de50300000a2c049fe50000d0e5010050e30b00001a20b49fe500209be5800052e31cd08da20000a0a3f04fbda81eff2fa108149fe508049fe5826181e008008de50a0000eafcb39fe500209be5800052e31cd08da20000a0a3f04fbda81eff2fa1e4139fe5e4039fe5826181e008008de500009ae500109ae58003a0e1a05ba0e10108a0e1010c55e3200fa0e1211fa0e1025c45a2d040dae127feffeb00109ae50070a0e10108a0e1200fa0e1211fa0e11cfeffeb000058e31600000a0818a0e14118a0e10118a0e12118a0e14112a0e18130a0e178239fe58310a0e1f1c092e1011083e28110a0e1f13092e1c02084e0c75085e0950301e0950c04e0924323e0920c04e0041041e04116a0e1c75041e04316a0e1c04041e0010a59e30100001a000058e30700000a00109ae5011ba0e1211fa0e1010051e3c7504510c04044108770a0118000a01100109de5000058e3015085e004109de5014084e01100000a000057e10070a0b1070095e00100004a010c55e3030000da1cd08de20000a0e3f04fbde81eff2fe1070094e00100004ac00054e3130000da1cd08de20000a0e3f04fbde81eff2fe1071095e00100004a010c55e3030000da1cd08de20000a0e3f04fbde81eff2fe1000094e00100004ac00054e3030000da1cd08de20000a0e3f04fbde81eff2fe140109de50000e0e3000051e104009a0544109de50008a001200ea00140008d050000e0e3000051e104009a05000aa001200fa00144008d05010a59e30100001a000058e33200000a4802a0e18000a0e1012080e210129fe58000a0e18220a0e1f22091e1f00091e1920903e0900901e0020b81e24006a0e1021b83e24126a0e1001060e20c208de514108de518208de510008de500009ae5010210e20000621210108d150c008d1500009ae5020210e20500000a14109de518009de5001061e2000060e214108de518008de500009be508109de50c208de2800146e05dfdffeb0010e0e3010050e11cd08d020000a003f04fbd081eff2f0100109ae5011ba0e1211fa0e1010051e3019ca003039ca013020000ea00109ae50000a0e3039201e200c09ae504109ae540319fe5011ba0e10c29a0e18c79a0e10c8aa0e1010c59e3211ba0e1a22fa0e103300ce0a77fa0e1288fa0e10100000a030c59e31900001a030058e30a00001aff2004e2800c82e1082580e1f8009fe5072682e1004005e0020083e1040880e1000089e1000086e5220000ea800ca0e1ff4004e2820680e1000084e1082580e1c4009fe5072682e1004005e0020083e1040880e1000089e1000086e5150000ea030058e30900001aff0004e2082580e194009fe5072682e1004005e0020083e1040880e1000089e1000086e5090000eaff0004e2820680e1082580e168009fe5072682e1004005e0020083e1040880e1000089e1000086e544009de540209de5000581e1020680e1b400c6e100109be50600a0e1011081e200108be51cd08de2f04fbde81eff2fe160e6090264e6090274e6090268e6090270e6090274ea09026ce609021422080200c000c0ff010000", "lang": "c", "divergences": 2, "c_source": "\ntypedef signed char s8;\ntypedef unsigned char u8;\ntypedef short s16;\ntypedef unsigned short u16;\ntypedef int s32;\ntypedef unsigned int u32;\ntypedef struct OamAttr\n{\n u32 yb : 8;\n u32 objMode : 2;\n u32 rest : 6;\n u32 xc : 9;\n u32 hi : 7;\n u32 tile : 10;\n u32 prio : 2;\n u32 pal : 4;\n u32 hi2 : 16;\n} OamAttr;\ntypedef struct Matrix2x2\n{\n s32 m00;\n s32 m01;\n s32 m10;\n s32 m11;\n} Matrix2x2;\nextern int _ZN3OAM11GetObjWidthEii(int shape, int size);\nextern int _ZN3OAM12GetObjHeightEii(int shape, int size);\nextern int _ZN3OAM16LoadAffineParamsEP7OamAttrPiP9Matrix2x2(OamAttr *attr, int *count, Matrix2x2 *mtx);\nextern u8 data_0209e660;\nextern int data_0209e664;\nextern int data_0209e668;\nextern int data_0209e66c;\nextern int data_0209e670;\nextern OamAttr data_0209e674[];\nextern OamAttr data_0209ea74[];\nextern s16 data_02082214[];\nOamAttr *_ZN3OAM6RenderEbP7OamAttriiii5Fix12IiEi(int draw, OamAttr *obj, int px, int py, int pal, int prio, int scale0, int rot0)\n{\n int *counter;\n int *affctr;\n int cnt;\n int h;\n int idx;\n int scale;\n int rot;\n int w;\n OamAttr *res;\n int x;\n int y;\n OamAttr *new_var;\n Matrix2x2 mtx;\n scale = scale0;\n rot = rot0;\n if ((!draw) || (data_0209e660 == 1))\n {\n counter = &data_0209e664;\n cnt = *counter;\n if (cnt >= 0x80)\n {\n return 0;\n }\n res = &data_0209e674[cnt];\n affctr = &data_0209e668;\n }\n else\n {\n counter = &data_0209e670;\n cnt = *counter;\n if (cnt >= 0x80)\n {\n return 0;\n }\n res = &data_0209ea74[cnt];\n affctr = &data_0209e66c;\n }\n x = obj->xc;\n if (x >= 0x100)\n {\n x -= 0x200;\n }\n y = *((s8 *) obj);\n w = _ZN3OAM11GetObjWidthEii(((*((u32 *) obj)) << 16) >> 30, (*((u32 *) obj)) >> 30);\n h = _ZN3OAM12GetObjHeightEii(((*((u32 *) obj)) << 16) >> 30, (*((u32 *) obj)) >> 30);\n if (rot != 0)\n {\n int sy;\n int sx;\n int c;\n int s;\n int i;\n i = (((u16) ((s16) rot)) >> 4) * 2;\n s = data_02082214[i];\n c = data_02082214[i + 1];\n sy = y + (h >> 1);\n sx = x + (w >> 1);\n x = (((sx * c) - (sy * s)) >> 12) - (w >> 1);\n y = (((sy * c) + (sx * s)) >> 12) - (h >> 1);\n }\n if ((scale != 0x1000) || (rot != 0))\n {\n if (obj->objMode != 1)\n {\n x -= w >> 1;\n y -= h >> 1;\n w <<= 1;\n h <<= 1;\n }\n }\n x += px;\n y += py;\n if (rot != 0)\n {\n if (w < h)\n {\n w = h;\n }\n if (((x + w) < 0) || (x > 0x100))\n {\n return 0;\n }\n if (((y + w) < 0) || (y > 0xc0))\n {\n return 0;\n }\n }\n else\n {\n if (((x + w) < 0) || (x > 0x100))\n {\n return 0;\n }\n if (((y + h) < 0) || (y > 0xc0))\n {\n return 0;\n }\n }\n if (pal == (-1))\n {\n pal = obj->pal;\n }\n if (prio == (-1))\n {\n prio = obj->prio;\n }\n {\n u32 flags;\n if ((scale != 0x1000) || (rot != 0))\n {\n int i = (rot >> 4) * 2;\n int s = data_02082214[i];\n int c = data_02082214[i + 1];\n int cs = ((c * scale) + 0x800) >> 12;\n int ss = ((s * scale) + 0x800) >> 12;\n mtx.m00 = cs;\n mtx.m10 = -ss;\n mtx.m11 = cs;\n mtx.m01 = ss;\n if ((*((u32 *) obj)) & 0x10000000)\n {\n mtx.m01 = -ss;\n mtx.m00 = -cs;\n }\n if ((*((u32 *) obj)) & 0x20000000)\n {\n mtx.m10 = -mtx.m10;\n mtx.m11 = -mtx.m11;\n }\n new_var = res - (*counter);\n idx = _ZN3OAM16LoadAffineParamsEP7OamAttrPiP9Matrix2x2(new_var, affctr, &mtx);\n if (idx == (-1))\n {\n return 0;\n }\n if (obj->objMode == 1)\n {\n flags = 0x100;\n }\n else\n {\n flags = 0x300;\n }\n }\n else\n {\n idx = 0;\n flags = (*((u32 *) obj)) & 0x30000000;\n }\n {\n u32 mode;\n u32 mosaic;\n u32 mask;\n u32 dep;\n u32 tiles;\n tiles = obj->tile;\n {\n u32 t0 = *((u32 *) obj);\n mask = 0xc000c000;\n mask = t0 & mask;\n dep = (t0 << 18) >> 31;\n mosaic = (t0 << 19) >> 31;\n mode = (t0 << 20) >> 30;\n }\n if ((flags == 0x100) || (flags == 0x300))\n {\n if (mode == 3)\n {\n *((u32 *) res) = flags | ((mask | ((((y & 0xff) | (idx << 25)) | (mode << 10)) | (mosaic << 12))) | ((x & 0x1ff) << 16));\n }\n else\n {\n *((u32 *) res) = flags | ((mask | ((((y & 0xff) | ((idx << 25) | (dep << 13))) | (mode << 10)) | (mosaic << 12))) | ((x & 0x1ff) << 16));\n }\n }\n else\n if (mode == 3)\n {\n *((u32 *) res) = flags | ((mask | (((y & 0xff) | (mode << 10)) | (mosaic << 12))) | ((x & 0x1ff) << 16));\n }\n else\n {\n *((u32 *) res) = flags | ((mask | ((((y & 0xff) | (dep << 13)) | (mode << 10)) | (mosaic << 12))) | ((x & 0x1ff) << 16));\n }\n *((u16 *) (((u32 *) res) + 1)) = (tiles | (prio << 10)) | (pal << 12);\n }\n }\n *counter += 1;\n return res;\n}\n", "source": "permuter-improved"} {"module": "arm9", "addr": "0x02020994", "name": "_ZN3OAM6RenderEbP7OamAttriiii5Fix12IiES3_ii", "size": 1680, "target_hex": "f04f2de95cd04de2000050e380009de501a0a0e180008de584009de500208de584008de590009de504308de590008de594009de588909de58cb09de594008de50300000a18069fe50000d0e5010050e30700001a0c069fe50c269fe5001090e510008de504069fe5817182e014008de5060000eaf8059fe5f8259fe5001090e510008de5f0059fe5817182e014008de590009de50008a0e14008a0e10008a0e12008a0e14002a0e18000a0e118008de590009de54002a0e18000a0e120008de518009de5010080e21c008de50000a0e344008de5030ca0e340008de5010ca0e33c008de510009de5000090e5800050e35cd08da2f04fbda81eff2fa100009ae500109ae58003a0e1a06ba0e10108a0e1010c56e3200fa0e1211fa0e1026c46a2d050dae1b0ffffeb00109ae50080a0e10108a0e1200fa0e1211fa0e1a5ffffeb0040a0e1010a59e30400001a010a5be30200001a90009de5000050e35500000ac80086e00066a0e1c40085e00056a0e1c800a0e124008de5c400a0e1010a59e328008de50300000a0600a0e10910a0e1cbc900eb0060a0e1010a5be30300000a0500a0e10b10a0e1c5c900eb0050a0e190009de5000050e32d00000a18009de58010a0e1b4049fe5f11090e11c009de58020a0e1a4049fe59135cee0f20090e1022ba0e390c5c5e030508de52cc08de590c6c5e09166c0e038008de502009ce00010a5e22006a0e1023093e0010a80e10010aee22336a0e1013a83e1030040e04016a0e124009de534608de5006041e02c009de5025090e030009de50030a0e234009de5021090e038009de52526a0e10000a0e22116a0e1032a82e1001a81e1010082e04016a0e128009de5005041e0050000ea24009de54616a0e1006041e028009de54516a0e1005041e000009ae5000ba0e1200fa0e1010050e30500000a24009de58880a0e1006046e028009de58440a0e1005045e090009de5000050e300009de5006086e004009de5005085e01900000a040058e10480a0b1080096e00100004a010c56e3070000dab610dae18c039fe5000051e15cd08d02f04fbd081eff2f0108a08ae275ffffea080095e00100004ac00055e31f0000dab610dae15c039fe5000051e15cd08d02f04fbd081eff2f0108a08ae269ffffea080096e00100004a010c56e3070000dab610dae12c039fe5000051e15cd08d02f04fbd081eff2f0108a08ae25dffffea040095e00100004ac00055e3070000dab610dae1fc029fe5000051e15cd08d02f04fbd081eff2f0108a08ae251ffffea80009de50010e0e3010050e104009a050010e0e30008a001200ea0010c008d050c008d1584009de5010050e104009a05000aa001200fa00108008d0508008d1594009de5000050e30040a0c100009ad5000aa0d1204fa0d1010a59e30400001a010a5be30200001a90009de5000050e34000000a20009de5010080e28010a0e15c029fe5f10090e120109de5900b03e08120a0e148129fe5f21091e1900902e0020b83e24006a0e154008de5910900e0910b03e0022b82e2020b80e2021b83e24226a0e14006a0e14116a0e1001061e248208de54c008de550108de500109ae5011211e2001062120000601248108d154c008d1500009ae5020210e20500000a50109de554009de5001061e250108de5000060e254008de510009de514109de5000090e548208de2800147e088feffeb0010e0e3010050e10700001ab610dae1a0019fe5000051e15cd08d02f04fbd081eff2f0108a08ae2fafeffea00109ae5011ba0e1211fa0e1010051e33cc09d0540c09d15020000ea00109ae544009de503c201e204209ae500109ae558319fe5022ba0e122eba0e10129a0e1033001e08119a0e1010c5ce3a22fa0e1a18fa0e10100000a030c5ce31900001a030054e30a00001aff2005e2800c82e11c119fe5040580e1080680e1011006e0000083e1010880e100008ce1000087e5220000ea800ca0e1ff5005e2820680e1000085e1e8109fe5040580e1080680e1011006e0000083e1010880e100008ce1000087e5150000ea030054e30900001aff1005e2b8009fe5041581e1081681e1000006e0011083e1000881e100008ce1000087e5090000eaff1005e2821681e18c009fe5041581e1081681e1000006e0011083e1000881e100008ce1000087e508009de500158ee10c009de5000681e1b400c7e110009de5087087e2000090e5011080e210009de5001080e5b610dae134009fe5000051e108a08a12a2feff1a5cd08de2f04fbde81eff2fe160e6090264e6090274e6090268e6090270e6090274ea09026ce6090214220802ffff000000c000c0ff010000", "lang": "cpp", "divergences": 2, "c_source": "//cpp\n#pragma opt_common_subs off\n#pragma opt_propagation off\n#pragma opt_loop_invariants off\n\ntypedef signed char s8;\ntypedef short s16;\ntypedef unsigned short u16;\ntypedef int s32;\ntypedef unsigned int u32;\ntypedef unsigned char u8;\ntypedef long long s64;\n\ntemplate struct Fix12 { T val; };\n\nstruct OamAttr { u32 a01; u16 a2; u16 a3; };\nstruct OamEntry { u32 a01; u16 a2; u16 pad; };\nstruct Matrix2x2 { int a, b, c, d; };\n\nextern \"C\" {\nextern u8 data_0209e660;\nextern int data_0209e664;\nextern int data_0209e668;\nextern int data_0209e66c;\nextern int data_0209e670;\nextern OamEntry data_0209e674[];\nextern OamEntry data_0209ea74[];\nextern s16 data_02082214[];\n}\n\nstruct OAM {\n static void Render(bool sub, OamAttr *attr, int xOff, int yOff, int palette, int priority,\n Fix12 scaleX, Fix12 scaleY, int rotation, int mode);\n static u8 GetObjWidth(int shape, int size);\n static u8 GetObjHeight(int shape, int size);\n static int LoadAffineParams(OamAttr *attr, int *affCnt, Matrix2x2 *m);\n};\n\nnamespace cstd { int fdiv(int num, int den); }\n\nvoid OAM::Render(bool sub, OamAttr *attr, int xOff, int yOff, int palette, int priority,\n Fix12 scaleX, Fix12 scaleY, int rotation, int mode)\n{\n int priVal;\n int palVal;\n int *pCount;\n int *pAff;\n int sinIdx;\n int cosIdx;\n int mtxIdx;\n int halfW;\n int halfH;\n s64 tcy;\n s64 tsx;\n s64 tsy;\n s64 tcx;\n int c100;\n int c300;\n int zero;\n Matrix2x2 m;\n int y;\n int sxv;\n int w;\n int syv;\n OamEntry *dst;\n int x;\n int om;\n\n sxv = scaleX.val;\n syv = scaleY.val;\n\n if (!sub || data_0209e660 == 1) {\n pCount = &data_0209e664;\n dst = data_0209e674 + *pCount;\n pAff = &data_0209e668;\n } else {\n pCount = &data_0209e670;\n dst = data_0209ea74 + *pCount;\n pAff = &data_0209e66c;\n }\n\n sinIdx = ((u16)(s16)rotation >> 4) * 2;\n mtxIdx = (rotation >> 4) * 2;\n cosIdx = sinIdx + 1;\n zero = 0;\n c300 = 0x300;\n c100 = 0x100;\n\n while (1) {\n if (*pCount >= 0x80)\n return;\n\n {\n int t = (int)((attr->a01 << 7) >> 23);\n s8 u;\n if (t >= 0x100)\n t -= 0x200;\n x = t;\n u = *(s8 *)attr;\n {\n u32 a = attr->a01;\n w = GetObjWidth((int)((a << 16) >> 30), (int)(a >> 30));\n }\n {\n int h;\n {\n u32 a = attr->a01;\n h = GetObjHeight((int)((a << 16) >> 30), (int)(a >> 30));\n }\n y = u;\n\n if (sxv != 0x1000 || syv != 0x1000 || rotation != 0) {\n x = (x + (w >> 1)) << 12;\n y = (y + (h >> 1)) << 12;\n halfW = w >> 1;\n halfH = h >> 1;\n if (sxv != 0x1000)\n x = cstd::fdiv(x, sxv);\n if (syv != 0x1000)\n y = cstd::fdiv(y, syv);\n if (rotation != 0) {\n s16 s, c;\n s = data_02082214[sinIdx];\n c = data_02082214[cosIdx];\n tcy = (s64)c * y;\n tcx = (s64)c * x;\n tsy = (s64)s * y;\n tsx = (s64)s * x;\n x = (((int)((tcx + 0x800) >> 12) - (int)((tsy + 0x800) >> 12)) >> 12) - halfW;\n y = (((int)((tcy + 0x800) >> 12) + (int)((tsx + 0x800) >> 12)) >> 12) - halfH;\n } else {\n x = (x >> 12) - halfW;\n y = (y >> 12) - halfH;\n }\n if (((attr->a01 << 22) >> 30) != 1) {\n w <<= 1;\n x -= halfW;\n h <<= 1;\n y -= halfH;\n }\n }\n\n x += xOff;\n y += yOff;\n\n if (rotation != 0) {\n if (w < h)\n w = h;\n if (x + w < 0 || x > 0x100) {\n if (attr->a3 == 0xffff) return;\n attr++;\n continue;\n }\n if (y + w < 0 || y > 0xc0) {\n if (attr->a3 == 0xffff) return;\n attr++;\n continue;\n }\n } else {\n if (x + w < 0 || x > 0x100) {\n if (attr->a3 == 0xffff) return;\n attr++;\n continue;\n }\n if (y + h < 0 || y > 0xc0) {\n if (attr->a3 == 0xffff) return;\n attr++;\n continue;\n }\n }\n\n }\n }\n if (palette == -1)\n palVal = (int)((*(u32 *)&attr->a2 << 16) >> 28);\n else\n palVal = palette;\n if (priority == -1)\n priVal = (int)((*(u32 *)&attr->a2 << 20) >> 30);\n else\n priVal = priority;\n if (mode > 0)\n om = mode;\n else\n om = (int)((attr->a01 << 20) >> 30);\n\n {\n int aff;\n u32 ipVal;\n if (sxv != 0x1000 || syv != 0x1000 || rotation != 0) {\n s16 c2 = data_02082214[mtxIdx + 1];\n m.a = (c2 * sxv + 0x800) >> 12;\n {\n s16 s2 = data_02082214[mtxIdx];\n m.b = (s2 * sxv + 0x800) >> 12;\n m.c = -((s2 * syv + 0x800) >> 12);\n }\n m.d = (c2 * syv + 0x800) >> 12;\n if (attr->a01 & 0x10000000) {\n m.a = -m.a;\n m.b = -m.b;\n }\n if (attr->a01 & 0x20000000) {\n m.c = -m.c;\n m.d = -m.d;\n }\n aff = LoadAffineParams((OamAttr *)(dst - *pCount), pAff, &m);\n if (aff == -1) {\n if (attr->a3 == 0xffff) return;\n attr++;\n continue;\n }\n ipVal = (((attr->a01 << 22) >> 30) == 1) ? *(int *)&c100 : *(int *)&c300;\n } else {\n ipVal = attr->a01 & 0x30000000;\n aff = *(int *)&zero;\n }\n {\n u32 a23 = *(u32 *)&attr->a2;\n u32 a01 = attr->a01;\n u32 tile, bit13, maskbits;\n tile = a23 << 22;\n tile = tile >> 22;\n w = (int)((a01 << 18) >> 31);\n maskbits = a01 & 0xc000c000;\n bit13 = (a01 << 19) >> 31;\n if (ipVal == 0x100 || ipVal == 0x300) {\n if (om == 3)\n dst->a01 = ipVal | ((maskbits | ((y & 0xff) | (aff << 25) | (om << 10) | (bit13 << 12))) | ((x & 0x1ff) << 16));\n else\n dst->a01 = ipVal | ((maskbits | ((y & 0xff) | ((aff << 25) | (w << 13)) | (om << 10) | (bit13 << 12))) | ((x & 0x1ff) << 16));\n } else if (om == 3)\n dst->a01 = ipVal | ((maskbits | ((y & 0xff) | (om << 10) | (bit13 << 12))) | ((x & 0x1ff) << 16));\n else\n dst->a01 = ipVal | ((maskbits | ((y & 0xff) | (w << 13) | (om << 10) | (bit13 << 12))) | ((x & 0x1ff) << 16));\n dst->a2 = (u16)((tile | (priVal << 10)) | (palVal << 12));\n }\n }\n dst++;\n *pCount = *pCount + 1;\n if (attr->a3 == 0xffff) return;\n attr++;\n }\n}\n", "source": "fable-refine-20260720", "floor": {"class": "instruction reorder", "evidence": "Residual 2 words at +0x38/+0x3c: pure adjacent transposition of prologue ARG HOMING -- ROM 'ldr fp,[sp,#0x8c]' (scaleY home) then 'str r0,[sp,#0x94]' (mode re-home store); ours swapped. ~16 distinct source spellings across 4 agents all leave the mode home-store before the scaleY->fp home load: 5 placements gave BYTE-IDENTICAL output; comma-serialized reads, reversed comma, decl swaps, assignment relocation before/after the pCount if-else and sinIdx block, first-reference split both directions, early dead 'om = mode' (DSE'd before it can influence homing). Direct 'scaleX.val' use at the use site and Fix12-struct locals both REGRESS to 52. Decl order reaches the region (a decl swap scores 15) but rotates REGISTERS rather than reordering the store. Non-POD Fix12 ruled out: matched corpus contains only 'template struct Fix12 { T v; }'. Sibling overload _ZN3OAM6RenderEbP7OamAttriiii5Fix12IiEi has a DIFFERENT div-2 residual (mid-body +0x34c), so this is not TU-wide. Compiler-internal homing order; route to hand-analysis or a structurally different body derivation.", "date": "2026-07-20"}} {"module": "arm9", "addr": "0x02060f60", "name": "func_02060f60", "size": 332, "target_hex": "f04f2de904d04de200a0a0e134009ae50190a0e102b0a0e1020010e21600001a34308ae2001093e50b00a0e3022081e30110a0e3002083e5a7eaffeb000050e30900001a6460a0e30b50a0e30140a0e30600a0e174e3ffeb0500a0e10410a0e19deaffeb000050e3f8ffff0a0a00a0e10010a0e30120a0e3e0ffffeb00009ae52010a0e315dfffeb1bdfffeb0b60a0e30150a0e30040a0e334708ae204908ae5000097e5200080e3000087e50600a0e10910a0e10520a0e15aeaffeb000050e3f9ffffba000059e30600001a00809ae50600a0e10810a0e10520a0e151eaffeb000050e3f9ffffba33e3ffeb34109ae50080a0e1200011e20400000a0400a0e122dcffeb34009ae5200010e2faffff1a0800a0e12de3ffeb00009ae5000090e5040050e30200001a01b04be200005be3d9ffffca000050e30100a0030000a01304d08de2f04fbde81eff2fe1", "lang": "cpp", "divergences": 2, "c_source": "//cpp\nextern \"C\" int func_0205ba3c(int bit, int word);\nextern \"C\" void func_02059d8c(int x);\nextern \"C\" int IPCSend(unsigned int a, unsigned int c, unsigned int b);\n\ntypedef unsigned short u16;\nextern \"C\" void func_020580f0(u16 *x);\n\nnamespace CP15 {\n void FlushAndInvalidateDataCache(unsigned int a, unsigned int b);\n void DrainWriteBuffer();\n}\nnamespace IRQ {\n unsigned int Disable();\n void Restore(unsigned int x);\n}\n\nstruct T {\n int *f0;\n int f4;\n char pad[0x2c];\n int f34;\n};\n\nextern \"C\" int func_02060f60(T *thiz, int v, int count) {\n unsigned int saved;\n int r;\n\n if (!(*(volatile int *)&thiz->f34 & 2)) {\n int *p = (int *)(((int)thiz + 0x34) & 0xFFFFFFFFFFFFFFFFLL);\n *p |= 2;\n if (func_0205ba3c(0xb, 1) == 0) {\n do {\n func_02059d8c(0x64);\n } while (func_0205ba3c(0xb, 1) == 0);\n }\n func_02060f60(thiz, 0, 1);\n }\n\n CP15::FlushAndInvalidateDataCache((unsigned int)thiz->f0, 0x20);\n CP15::DrainWriteBuffer();\n\n do {\n thiz->f4 = v;\n *(int *)(((int)thiz + 0x34) & 0xFFFFFFFFFFFFFFFFLL) |= 0x20;\n\n while (IPCSend(0xb, v, 1) < 0) {\n }\n\n if (v == 0) {\n int *q = thiz->f0;\n while (IPCSend(0xb, (unsigned int)q, 1) < 0) {\n }\n }\n\n saved = IRQ::Disable();\n while (thiz->f34 & 0x20) {\n func_020580f0((u16 *)0);\n }\n IRQ::Restore(saved);\n\n r = *thiz->f0;\n if (r != 4) {\n break;\n }\n count--;\n } while (count > 0);\n\n return r == 0;\n}\n", "source": "fanout-gpt-5.6-luna"} {"module": "ov004", "addr": "0x020b3b38", "name": "func_ov004_020b3b38", "size": 288, "target_hex": "f0412de918d04de20070a0e1242097e5000052e318d08d02f041bd081eff2f01cc00a0e30010a0e3924083e0923123e0c22fa0e1021ba0e3011094e0923023e02146a0e10000a3e2004a84e10400a0e1011aa0e3346087e2b07dfeebc01fa0e10126a0e10036a0e1021ba0e3202a82e1013093e00400a0e10010a2e22356a0e1015a85e18f7dfeeb08408de20010a0e3001084e5041084e5081084e50c1084e574809fe508008de514008de5015a65e2000096e58003a0e1a00ba0e10008a0e14008a0e1010c50e3020c40c20008a0c14008a0c1900501e0180097e50112a0e100008de504408de5f0c1d7e1f221d7e11c3097e50600a0e141184ce00bf8ffebb600d6e1086086e2080050e1e7ffff1a18d08de2f041bde81eff2fe1ffff0000", "lang": "cpp", "divergences": 2, "c_source": "//cpp\ntypedef long long s64;\nstruct M { int _00; int _01; int _10; int _11; };\nextern \"C\" {\nextern int _ZN4cstd4fdivEii(int, int);\nextern int func_02053200(int x);\nextern void func_ov004_020b1c68(void* a0, int a1, int a2, int a3, int a4, struct M* a5);\nvoid func_ov004_020b3b38(char* c) {\n int m, e, fd, t, v;\n unsigned short term;\n if (*(int*)(c + 0x24) == 0) return;\n m = (int)(((s64)*(int*)(c + 0x24) * 0xcc + 0x800) >> 12);\n e = (int)(c + 0x34);\n fd = _ZN4cstd4fdivEii(m, 0x1000);\n t = (int)(((s64)fd * 0x1000 + 0x800) >> 12);\n v = func_02053200(m);\n {\n struct M buf = {0};\n buf._00 = v;\n buf._11 = v;\n do {\n short q0 = (short)(((unsigned)*(int*)e << 7) >> 0x17) & 0xffff;\n short q = q0 > 0x100 ? q0 - 0x200 : q0;\n func_ov004_020b1c68((int*)e,\n (short)*(short*)(c + 0x10) - ((q * (0x1000 - t) << 4) >> 16),\n *(short*)(c + 0x12), *(int*)(c + 0x1c), *(int*)(c + 0x18), &buf);\n term = *(unsigned short*)(e + 6);\n e += 8;\n } while (term != 0xffff);\n }\n}\n}", "source": "fanout-opus"} +{"module": "ov007", "addr": "0x020c6550", "name": "func_ov007_020c6550", "size": 108, "target_hex": "70402de90060a0e1204096e50150a0e3b810d4e1000051e30300000a081096e50c2096e5020051e1010000ba0050a0e30a0000eae50100eb081086e2000091e5010080e2000081e5081096e50c0096e5000051e10400a0e10250a0a3bef0ffeb0500a0e17040bde81eff2fe1", "lang": "c", "divergences": 2, "c_source": "extern void func_ov007_020c6d20(void *c);\nextern void func_ov007_020c28ac(void *p);\n\n/* BEST_DIV=2 (regperm load-order floor)\n * All of function matches except the two ldrs for the first (c+8)/(c+0xc) compare:\n * ROM: ldr r1,[c+#8]; ldr r2,[c+#0xc]; cmp r1,r2; blt\n * this: ldr r2,[c+#0xc]; ldr r1,[c+#8]; cmp r1,r2; blt\n * Volatile on the right-hand load selects r1/r2 correctly (statement-level pair\n * selector) but schedules that load ASAP, swapping order. Non-vol restores order\n * but flips the pair back (div=3). ~80 pure-C variants; documented wall in\n * notes/mwccarm-codegen.md \u00a76v for this symbol.\n */\nint func_ov007_020c6550(char *c)\n{\n int status = 1;\n void *obj = *(void **)(c + 0x20);\n int right;\n if (*(unsigned short *)((char *)obj + 8) == 0 ||\n *(int *)(c + 8) >= (right = *(volatile int *)(c + 0xc))) {\n status = 0;\n } else {\n func_ov007_020c6d20(c);\n {\n int *p = (int *)(((unsigned int)c + 8) & 0xFFFFFFFFFFFFFFFFULL);\n *p = *p + 1;\n }\n if (*(int *)(c + 8) >= *(int *)(c + 0xc))\n status = 2;\n func_ov007_020c28ac(obj);\n }\n return status;\n}\n", "source": "lunavyqo-groupb-pure-c-best", "floor": {"class": "regperm", "evidence": "6v: vol-right pair selector vs load-order weld; div=2; 200+ pure-C variants; colors correct when order wrong", "date": "2026-07-23"}, "floor_note": "6v vol-pair selector vs load order weld; div=2"} {"module": "arm9", "addr": "0x0206dac4", "name": "func_0206dac4", "size": 308, "target_hex": "30402de904d04de208019fe5bfabffeb000050e30800001afc009fe5fc109fe5082090e5f8009fe56c3092e50120a0e3003081e5002080e5140000ead8009fe5d8109fe5080090e5001091e56c0090e5000051e1c8009f050010900501108102001080050900000aa8009fe5f4abffeba4009fe5a4109fe5082090e5a0009fe56c3092e50120a0e3003081e5002080e590409fe5000094e5000050e3080000da84509fe5000094e5010040e2000084e5000195e730ff2fe1000094e5000050e3f7ffffca58009fe5001090e5011051e2001080e50100001a38009fe5bbabffeb48009fe5000090e5000050e30300000a30ff2fe134009fe50010a0e3001080e50000a0e3270100ebec0e00eb04d08de23040bde81eff2fe120a00a0234610a02d89f0a02fc9f0a02d09e0a02d89e0a02c89e0a02", "lang": "c", "divergences": 3, "c_source": "extern int func_020589d4(void *p);\nextern void func_02058b08(void *p);\nextern void func_02058a94(void *p);\nextern void func_0206e06c(int x);\nextern void func_02071784(void);\n\nextern int data_020aa020;\nextern int data_020a6134[];\nextern int data_020a9fd8;\nextern int data_020a9ffc;\nextern int data_020a9ed0;\nextern void (*data_020a9ed8[])(void);\nextern void (*data_020a9ec8)(void);\n\nvoid func_0206dac4(void)\n{\n if (func_020589d4(&data_020aa020) == 0) {\n data_020a9fd8 = *(int *)((char *)data_020a6134[2] + 0x6c);\n data_020a9ffc = 1;\n } else if (data_020a9fd8 == *(int *)((char *)data_020a6134[2] + 0x6c)) {\n data_020a9ffc++;\n } else {\n func_02058b08(&data_020aa020);\n data_020a9fd8 = *(int *)((char *)data_020a6134[2] + 0x6c);\n data_020a9ffc = 1;\n }\n\n while (data_020a9ed0 > 0) {\n data_020a9ed0--;\n data_020a9ed8[data_020a9ed0]();\n }\n\n data_020a9ffc--;\n if (data_020a9ffc == 0) {\n func_02058a94(&data_020aa020);\n }\n if (data_020a9ec8 != 0) {\n data_020a9ec8();\n data_020a9ec8 = 0;\n }\n func_0206e06c(0);\n func_02071784();\n}\n", "source": "fanout"} {"module": "arm9", "addr": "0x0202f928", "name": "func_0202f928", "size": 520, "target_hex": "30402de904d04de20040a0e1143094e5010053e30300001a649fffeb04d08de23040bde81eff2fe1100094e5000050e30100000a040050e35c00001a000051e30206a003200084050000a003240084050d00000a000053e32d50a0033c50a0130510a0e10206a0e3932cffeb200084e5200094e50510a0e18000a0e18e2cffeb240084e50000a0e3200084e5140094e5020050e30b00001a30019fe50210a0e39ca400eb24019fe50010a0e30220a0e3a49b00eb14019fe50010a0e30220a0e3869b00eb0a0000ea04019fe50210a0e390a400ebf8009fe50010a0e30220a0e3989b00ebe8009fe50010a0e30220a0e37a9b00eb0010a0e31c1084e5d4209fe5d4009fe5d4109fe5b020c0e1c030a0e3b030c1e1c8009fe5c8109fe5b020c0e1b030c1e1c0209fe5c0009fe5c0109fe5b020c0e1b030c1e1b8009fe5b8109fe5b020c0e1b030c1e10110a0e30400a0e1101084e5c2feffeba0309fe5a0109fe5b050d3e10020a0e30200a0e3b020c3e1349d00eb0200a0e3ce9c00eb0100a0e3589000eb000055e370209f150100a013b010d21104d08de2b000c2110100a0e30f00c4e50000a0e33040bde81eff2fe1020050e30100a0030100a013100084150000a01304d08de23040bde81eff2fe104f60902cc2609027f7f000040000004440000044010000444100004808000004200000446000004421000044610000408020004c4f20202", "lang": "c", "divergences": 3, "c_source": "typedef unsigned int u32;\ntypedef unsigned short u16;\ntypedef unsigned char u8;\ntypedef int s32;\n\nstruct FaderBrightness;\nextern int _ZN15FaderBrightness15SetBackwardTimeEj(struct FaderBrightness *self, u32 time);\nextern void _ZN4CP1527FlushAndInvalidateDataCacheEjj(u32 a, u32 b);\nextern void _ZN2GX10LoadBGPlttEPKvjj(const void *p, u32 a, u32 b);\nextern void _ZN3GXS10LoadBGPlttEPKvjj(const void *p, u32 a, u32 b);\nextern void _ZN3IRQ13SetIRQHandlerEjPFvvE(u32 irqBits, void (*handler)(void));\nextern void _ZN3IRQ10EnableIRQsEj(u32 irqBits);\nextern int func_02053c10(int enable);\nextern void func_0202f58c(void *self);\nextern void func_0202f2c4(void);\n\nextern u8 data_0209f604[];\nextern u8 data_020926cc[];\n\nstruct MyFader {\n u32 unk00;\n u32 unk04;\n u32 unk08;\n u32 unk0c;\n s32 unk10; /* 0x10 */\n s32 type; /* 0x14 */\n u32 unk18; /* 0x18 */\n s32 interpVal; /* 0x1c */\n u32 unk20; /* 0x20 */\n u32 unk24; /* 0x24 */\n};\n\nint func_0202f928(struct MyFader *self, u32 param_1)\n{\n s32 type, unk10;\n\n type = self->type;\n if (type == 1) {\n return _ZN15FaderBrightness15SetBackwardTimeEj((struct FaderBrightness *)self, param_1);\n }\n\n unk10 = self->unk10;\n if (unk10 == 0 || unk10 == 4) {\n if (param_1 == 0) {\n self->unk20 = 0x200000;\n self->unk24 = 0;\n } else {\n type = (type == 0) ? 0x2d : 0x3c;\n self->unk20 = 0x200000 / type;\n self->unk24 = (self->unk20 << 1) / type;\n self->unk20 = 0;\n }\n\n if (self->type == 2) {\n _ZN4CP1527FlushAndInvalidateDataCacheEjj((u32)data_0209f604, 2);\n _ZN2GX10LoadBGPlttEPKvjj(data_0209f604, 0, 2);\n _ZN3GXS10LoadBGPlttEPKvjj(data_0209f604, 0, 2);\n } else {\n _ZN4CP1527FlushAndInvalidateDataCacheEjj((u32)data_020926cc, 2);\n _ZN2GX10LoadBGPlttEPKvjj(data_020926cc, 0, 2);\n _ZN3GXS10LoadBGPlttEPKvjj(data_020926cc, 0, 2);\n }\n\n self->interpVal = 0;\n\n *(volatile u16 *)0x4000040 = 0x7f7f;\n *(volatile u16 *)0x4000044 = 0xc0;\n *(volatile u16 *)0x4001040 = 0x7f7f;\n *(volatile u16 *)0x4001044 = 0xc0;\n *(volatile u16 *)0x4000042 = 0x8080;\n *(volatile u16 *)0x4000046 = 0xc0;\n *(volatile u16 *)0x4001042 = 0x8080;\n *(volatile u16 *)0x4001046 = 0xc0;\n\n self->unk10 = 1;\n func_0202f58c(self);\n\n {\n u16 ime = *(volatile u16 *)0x4000208;\n *(volatile u16 *)0x4000208 = 0;\n _ZN3IRQ13SetIRQHandlerEjPFvvE(2, func_0202f2c4);\n _ZN3IRQ10EnableIRQsEj(2);\n func_02053c10(1);\n if (ime != 0) {\n u16 dead = *(volatile u16 *)0x4000208;\n *(volatile u16 *)0x4000208 = 1;\n (void)dead;\n }\n }\n\n *((u8 *)self + 0xf) = 1;\n return 0;\n } else {\n if (unk10 == 2) {\n return 1;\n }\n self->unk10 = 1;\n return 0;\n }\n}\n", "source": "fanout-sonnet"} {"module": "ov006", "addr": "0x02125cdc", "name": "func_ov006_02125cdc", "size": 652, "target_hex": "00402de904d04de20238a0e3042091e5003063e2030052e104d08db20100a0b30040bdb81eff2fb10b3a80e2083a93e5030852e104d08da20100a0a30040bda81eff2fa10a3a80e26c3b93e51d3883e2030052e104d08da20100a0a30040bda81eff2fa1001091e5000051e304d08db20100a0b30040bdb81eff2fb1010651e304d08da20100a0a30040bda81eff2fa1000052e3080000aa41c6a0e1cc31a0e1233e8ce043c2a0e1173da0e39c0320e04f0c80e2b8c3d0e10c0000ea41c6a0e1cc31a0e1233e8ce043e2a0e1173da0e39e032ce04236a0e1c301a0e1200e83e04002a0e180008ce04f0c80e2b8c3d0e14206a0e14126a0e10f3000e20f1002e2030081e00f005ce3031041e00cf18f90590000ea0e0000ea110000ea140000ea190000ea1e0000ea230000ea280000ea2e0000ea330000ea380000ea3e0000ea430000ea480000ea010000ea080000ea260000ea04d08de20000a0e30040bde81eff2fe104d08de20100a0e30040bde81eff2fe1080012e20100a00304d08de20000a0130040bde81eff2fe1180050e30100a0b304d08de20000a0a30040bde81eff2fe1080050e30100a0b304d08de20000a0a30040bde81eff2fe1080051e30100a0b304d08de20000a0a30040bde81eff2fe10700e0e3000051e10100a0b304d08de20000a0a30040bde81eff2fe1080012e20100a01304d08de20000a0030040bde81eff2fe1080051e30100a0a304d08de20000a0b30040bde81eff2fe10700e0e3000051e10100a0a304d08de20000a0b30040bde81eff2fe1180050e30100a0a304d08de20000a0b30040bde81eff2fe1080050e30100a0a304d08de20000a0b30040bde81eff2fe104d08de20000a0e30040bde81eff2fe10000a0e304d08de20040bde81eff2fe1", "lang": "c", "divergences": 3, "c_source": "#pragma opt_common_subs off\n\nint func_ov006_02125cdc(int c, int *p)\n{\n int z = p[1];\n int x;\n unsigned short t;\n int sum, diff, xf, zf;\n\n if (z < -0x20000)\n return 1;\n if (z >= *(int *)(c + 0xba08) << 16)\n return 1;\n if (z >= *(int *)(c + 0xab6c) + 0x1d0000)\n return 1;\n x = p[0];\n if (x < 0)\n return 1;\n if (x >= 0x100000)\n return 1;\n if (z < 0)\n t = *(unsigned short *)(c + ((x >> 12) / 16) * 0x5c0 + 0x4f38);\n else\n t = *(unsigned short *)(c + ((x >> 12) / 16) * 0x5c0 + ((z >> 12) / 16) * 2 + 0x4f38);\n zf = (z >> 12) & 0xf;\n xf = (x >> 12) & 0xf;\n sum = xf + zf;\n diff = xf - zf;\n switch (t) {\n case 0: case 13: return 0;\n case 1: return 1;\n case 2: case 14: return ((x >> 12) & 8) == 0;\n case 3: return sum < 0x18;\n case 4: return sum < 8;\n case 5: return diff < 8;\n case 6: return diff < -8;\n case 7: case 15: return ((x >> 12) & 8) != 0;\n case 8: return diff >= 8;\n case 9: return diff >= -8;\n case 10: return sum >= 0x18;\n case 11: return sum >= 8;\n case 12: return 0;\n default: return 0;\n }\n}\n", "source": "fable-subagent", "note": "pure ip/lr scratch rename in else-branch tile fetch (asr lr vs ip, mla dest swap, add operand). opt_common_subs off got 163->3. Tried: named xc/zc/row/xs locals, u64 launder of row, ternary, u16* subscript (broke shape 165), 2D array (broke shape), opt_propagation off, u16 t, copy-temp u. Wall type 3: pure register-coloring swap."} {"module": "arm9", "addr": "0x02005fa0", "name": "_ZN8CapEnemy11GetCapStateEv", "size": 180, "target_hex": "10402de90040a0e11101d4e5000050e30200a0031040bd081eff2f0188009fe50000d0e5010050e30100a0030000a013000050e30a00001a0400a0e1bd2a00eb000050e30600000a1311d4e5080090e5071001e2000051e10000a0031040bd081eff2f017f01d4e5000fa0e1a00fb0e10000a0031040bd081eff2f010000a0e31101c4e524009fe5f41094e5002084e0b01084e50010d2e50100a0e3071001e20010c2e51040bde81eff2fe1d8f2090213010000", "lang": "cpp", "divergences": 3, "c_source": "//cpp\nstruct CapEnemy {\n int GetCapState();\n char pad[0xb0];\n int field_b0;\n char pad2[0xf4 - 0xb0 - 4];\n int field_f4;\n char pad3[0x111 - 0xf4 - 4];\n unsigned char field_111;\n char pad4[0x113 - 0x111 - 1];\n unsigned char field_113;\n char pad5[0x17f - 0x113 - 1];\n unsigned char field_17f;\n};\n\nextern int data_0209f2d8;\nextern \"C\" int *_ZN5Actor13ClosestPlayerEv(void *self);\n\nint CapEnemy::GetCapState() {\n if (field_111 == 0) {\n return 2;\n }\n\n unsigned char val = *(unsigned char *)&data_0209f2d8;\n int check = (val == 1) ? 1 : 0;\n if (check == 0) {\n int *p = _ZN5Actor13ClosestPlayerEv(this);\n if (p != 0) {\n int s = field_113 & 7;\n int ps = p[2];\n if (s == ps) {\n return 0;\n }\n }\n }\n\n unsigned int b = field_17f;\n b = (b << 0x1e) >> 0x1f;\n if (b == 0) {\n return 0;\n }\n\n field_111 = 0;\n field_b0 = field_f4;\n *(unsigned char *)(((int)this + 0x113) & 0xFFFFFFFFFFFFFFFF) &= 7;\n return 1;\n}\n", "source": "fanout"} {"module": "ov006", "addr": "0x020fb230", "name": "func_ov006_020fb230", "size": 556, "target_hex": "f0412de910d04de21c20a0e3910205e0f8119fe50070a0e1014087e0f0119fe5050094e7056084e0018087e0215dfceb0010a0e300108de504108de508008de50c108de5050098e7c8219fe50210a0e30430a0e3775cfcebbc119fe5050088e7010087e0b4119fe5053094e7052090e7050080e0022083e0052084e7011087e00520d1e7053094e7051081e0000052e34326a0e12d00000ac00052e3003090a5803043a2003080a5030000aa003090e5030a53e3023c83d2003080d5f00052e310d08db2f041bdb81eff2fb1052087e0052a82e2ca3bd2e5000053e30400a003c80bc20510d08d02f041bd081eff2f010f28a0e3002086e50020a0e3002080e50020d1e518019fe5012022e20020c1e59201fdeb0c119fe5053087e0200801e08001a0e1a007a0e18000a0e15b2c83e2100080e2b40cc2e1050a83e20310a0e3c81bc0e510d08de2f041bde81eff2fe1400052e3003090d5803083d2003080d5050000da033aa0e3004090e5003063e2030054e1023c44a2003080a5100052e310d08dc2f041bdc81eff2fc1052087e0052a82e2ca3bd2e5000053e30400a003c80bc20510d08d02f041bd081eff2f010128a0e3002086e50020a0e3002080e50020d1e558009fe5012022e20020c1e56201fdeb4c109fe5053087e0200801e08001a0e1a007a0e18000a0e15b2c83e2100080e2b40cc2e1050a83e20310a0e3c81bc0e510d08de2f041bde81eff2fe1b05b0000c05b000089010000b85b0000c95b0000b8d40902ff7f0000", "lang": "c", "divergences": 3, "c_source": "\ntypedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef unsigned int u32;\nextern int RandomIntInternal(int *seed);\nextern int func_020126e8(int a);\nextern int func_02012468(int a, int b, int c, int d, int e, int f, int g, short h);\nextern int data_0209d4b8;\nvoid func_ov006_020fb230(char *p, int i)\n{\n unsigned char new_var;\n int n = i * 0x1c;\n int v;\n u8 flag;\n *((int *) ((p + 0x5bc0) + n)) = func_02012468(*((int *) ((p + 0x5bc0) + n)), 2, 0x189, 4, 0, 0, func_020126e8(*((int *) ((p + 0x5bb0) + n))), 0);\n *((int *) ((p + 0x5bb0) + n)) += *((int *) ((p + 0x5bb8) + n));\n flag = *((u8 *) ((p + 0x5bc9) + n));\n v = (*((int *) ((p + 0x5bb0) + n))) >> 12;\n if (flag != 0)\n {\n if (v >= 0xc0)\n {\n *((int *) ((p + 0x5bb8) + n)) -= 0x80;\n }\n else\n if ((*((int *) ((p + 0x5bb8) + n))) <= 0x3000)\n {\n *((int *) ((p + 0x5bb8) + n)) += 0x200;\n }\n if (v >= 0xf0)\n {\n u32 a;\n if ((*((u8 *) ((p + 0x5bca) + n))) == 0)\n {\n *((u8 *) ((p + 0x5bc8) + n)) = 4;\n return;\n }\n *((int *) ((p + 0x5bb0) + n)) = 0xf0000;\n *((int *) ((p + 0x5bb8) + n)) = 0;\n *((u8 *) ((p + 0x5bc9) + n)) ^= 1;\n a = (((u32) RandomIntInternal(&data_0209d4b8)) >> 16) & 0x7fff;\n *((u16 *) ((p + 0x5bc4) + n)) = (u16) ((((a << 3) >> 15) * 2) + 0x10);\n *((u8 *) ((p + 0x5bc8) + n)) = 3;\n }\n }\n else\n {\n if (v <= 0x40)\n {\n *((int *) ((p + 0x5bb8) + n)) += 0x80;\n }\n else\n if ((*((int *) ((p + 0x5bb8) + n))) >= (-0x3000))\n {\n *((int *) ((p + 0x5bb8) + n)) -= 0x200;\n }\n if (v <= 0x10)\n {\n u32 a;\n if ((*((u8 *) ((p + 0x5bca) + n))) == 0)\n {\n *((u8 *) ((p + 0x5bc8) + n)) = 4;\n return;\n }\n new_var = 0x5bc4;\n *((int *) ((p + 0x5bb0) + n)) = 0x10000;\n *((int *) ((p + 0x5bb8) + n)) = 0;\n *((u8 *) ((p + 0x5bc9) + n)) ^= 1;\n a = (((u32) RandomIntInternal(&data_0209d4b8)) >> 16) & 0x7fff;\n *((u16 *) ((p + new_var) + n)) = (u16) ((((a << 3) >> 15) * 2) + 0x10);\n *((u8 *) ((p + 0x5bc8) + n)) = 3;\n }\n }\n}\n", "source": "permuter-improved", "floor": {"class": "ordering", "evidence": "2026-07-11 triage: position-dependent scheduler state in the final block before the literal pool; the FIRST arm contains the byte-identical C spelling and MATCHES, the second arm reorders ldr/add/add. 24 prober + 20 skeptic lever families all byte-identical or coupled.", "date": "2026-07-11"}} {"module": "ov002", "addr": "0x020c607c", "name": "func_ov002_020c607c", "size": 304, "target_hex": "f0402de99cd04de20050a0e10000a0e30340a0e16c0385e50231a0e324008de2003084e50170a0e10260a0e1c0c5fdeb642095e55c1095e524008de200108de504708de508208de5643095e55c2095e500108de20c208de514308de50c208de20530a0e110608de561c5fdeb24008de251c9fdeb000050e32600000a18008de224108de232c5fdeb1c109de534008de2001084e58dc7fdeb0010e0e3010050e11c00000a34008de288c7fdeb832bfdeb6c0385e5000050e31600000ab01090e5010411e20100a0130000a003000050e30500000a24008de282c5fdeb9cd08de20100a0e3f040bde81eff2fe1020411e20100a0130000a003000050e30500000a24008de277c5fdeb9cd08de20200a0e3f040bde81eff2fe124008de271c5fdeb0000a0e39cd08de2f040bde81eff2fe1", "lang": "c", "divergences": 3, "c_source": "typedef unsigned int u32;\n\nstruct Vector3 { int x, y, z; };\n\nextern void _ZN11RaycastLineC1Ev(void *self);\nextern void _ZN11RaycastLine13SetObjAndLineERK7Vector3S2_P5Actor(void *self, struct Vector3 *a, struct Vector3 *b, void *actor);\nextern int _ZN11RaycastLine10DetectClsnEv(void *self);\nextern void *_ZN11RaycastLine10GetClsnPosEv(void *self);\nextern int _ZNK10ClsnResult9GetClsnIDEv(void *self);\nextern void *_ZN5Actor10FindWithIDEj(u32 id);\nextern void _ZN11RaycastLineD1Ev(void *self);\n\nint func_ov002_020c607c(char *self, int p1, int p2, int *outptr)\n{\n char rc[0x78];\n int *clsn_res;\n void *found;\n struct Vector3 a, b;\n int az, bz, bx;\n struct Vector3 pos;\n int flag;\n *(int *)(self + 0x36c) = 0;\n *outptr = (int)0x80000000;\n _ZN11RaycastLineC1Ev(rc);\n az = *(int *)(self + 0x64);\n a.x = *(int *)(self + 0x5c);\n a.y = p1;\n a.z = az;\n bz = *(int *)(self + 0x64);\n bx = *(int *)(self + 0x5c);\n b.x = bx;\n b.z = bz;\n b.y = p2;\n _ZN11RaycastLine13SetObjAndLineERK7Vector3S2_P5Actor(rc, &a, &b, self);\n if (_ZN11RaycastLine10DetectClsnEv(rc) != 0) {\n _ZN11RaycastLine10GetClsnPosEv(&pos);\n *outptr = pos.y;\n clsn_res = (int *)(rc + 0x10);\n if (_ZNK10ClsnResult9GetClsnIDEv(clsn_res) != -1) {\n found = _ZN5Actor10FindWithIDEj((u32)_ZNK10ClsnResult9GetClsnIDEv(clsn_res));\n *(int *)(self + 0x36c) = (int)found;\n if (found != 0) {\n flag = (*(u32 *)((char *)found + 0xb0) & 0x1000000) ? 1 : 0;\n if (flag != 0) {\n _ZN11RaycastLineD1Ev(rc);\n return 1;\n }\n flag = (*(u32 *)((char *)found + 0xb0) & 0x2000000) ? 1 : 0;\n if (flag != 0) {\n _ZN11RaycastLineD1Ev(rc);\n return 2;\n }\n }\n }\n }\n _ZN11RaycastLineD1Ev(rc);\n return 0;\n}\n", "source": "fanout-glm-5.2"} +{"module": "ov009", "addr": "0x0211145c", "name": "func_ov009_0211145c", "size": 380, "target_hex": "f04f2de924d04de200a0a0e18011dae5000051e33800000a97fdfbeb0020b0e124d08d02f04fbd081eff2f0114008de25c108ae25c2082e298affceb14309de518209de51c109de508008de208308de50c208de510108de5afaefceb7d0850e324d08dc2f04fbdc81eff2fc108009ae50f0000e2010050e3170000da018040e2000058e30090a0e3130000dad0b09fe50940a0e15c508ae20070e0e31060a0e3dc2cdae10b00a0e10610a0e100208de50520a0e10430a0e104708de543fefbeb000050e30100000a04109ae53dffffeb019089e2080059e1f0ffffba0509a0e3001060e260118ae578009fe574108ae268018ae56a00a0e34804fceb68009fe50ba9fceb64109fe564309fe5901182e02224a0e1931282e0012040e054109fe544009fe5021041e0b219cae100a9fceb2008a0e1b409cae10a09a0e374018ae50300a0e37c018ae5b0108ae2000091e50108c0e3000081e524d08de2f04fbde81eff2fe15701000000a006ff50e60902d34d6210a00f000088130000", "lang": "c", "divergences": 3, "c_source": "/* BEST_DIV=3 (pure-C floor; historical HAND-ASM was this exact residual)\n * Progress: u64-mask launder on the two store addresses forces ROM's\n * mov r0,#0x14000; rsb r1,r0,#0; str r1,[sl,#0x160]\n * (plain -0x14000 / named temps coalesce to rsb r0,r0,#0 when the sound call\n * is present; sibling func_ov009_021116ec matches the same stores without the\n * call using plain C \u2014 and colors s into r0 because nothing else wants r0).\n *\n * Residual (3 words, size-exact 0x17c): pool const 0xff06a000 is colored r3\n * instead of r0, so mwccarm schedules\n * ldr r3,s; add r1,sl,#0x74; mov r0,#0x6a; str r3,[sl,#0x168]; bl\n * vs ROM\n * ldr r0,s; add r1,sl,#0x74; str r0,[sl,#0x168]; mov r0,#0x6a; bl\n * Call arg 0x6a reserves r0 early; s is rematerializable leftover. Once s is\n * not in r0, mov/str freely reorder (no anti-dep). Coupled reg+schedule.\n *\n * Exhausted (still div=3, often byte-identical residual): nested scopes kill t,\n * s->0x6a reuse, t becomes s, equal-arm delay of 0x6a, comma store-in-arg0/1,\n * both-live fake deps, value launders (+0/|0/^0/u64), half-launder, ptr-first,\n * //cpp refs, goto/do-once/for-once EBB splits, vol stores, pressure dummies,\n * inline store-then-return-0x6a, all pragmas, all mwccarm versions, permuter\n * (score 205 floor, 650+ iters, never improved). Do not promote to src/.\n */\nstruct V3 { int x, y, z; };\nextern char *_ZN5Actor13ClosestPlayerEv(void *self);\nextern int Vec3_Sub(struct V3 *dst, void *a, void *b);\nextern int Vec3_HorzLen(struct V3 *v);\nextern char *_ZN5Actor5SpawnEjjRK7Vector3PK10Vector3_16ii(unsigned int id, unsigned int p1, void *pos, void *rot, int a, int b);\nextern void func_ov009_02111224(char *c, int r1);\nextern int func_0201267c(unsigned int a, void *b);\nextern int RandomIntInternal(void *rng);\nextern int data_0209e650;\n\nvoid func_ov009_0211145c(char *c)\n{\n if (*(unsigned char *)(c + 0x180) != 0) {\n char *p;\n struct V3 copy;\n struct V3 diff;\n int n;\n p = _ZN5Actor13ClosestPlayerEv(c);\n if (p == 0)\n return;\n Vec3_Sub(&diff, c + 0x5c, p + 0x5c);\n copy.x = diff.x;\n copy.y = diff.y;\n copy.z = diff.z;\n if (Vec3_HorzLen(©) > 0x7d0000)\n return;\n n = *(int *)(c + 8) & 0xf;\n if (n > 1) {\n int i = 0;\n int lim = n - 1;\n if (lim > 0) {\n do {\n char *a = _ZN5Actor5SpawnEjjRK7Vector3PK10Vector3_16ii(0x157, 0x10, c + 0x5c, 0, *(signed char *)(c + 0xcc), -1);\n if (a != 0)\n func_ov009_02111224(a, *(int *)(c + 4));\n i++;\n } while (i < lim);\n }\n }\n {\n int t = 0x14000;\n int nvel = 0 - t;\n int s = (int)0xff06a000;\n *(int *)(((long long)(int)(c + 0x160)) & 0xFFFFFFFFFFFFFFFFLL) = nvel;\n *(int *)(((long long)(int)(c + 0x168)) & 0xFFFFFFFFFFFFFFFFLL) = s;\n func_0201267c(0x6a, c + 0x74);\n }\n }\n *(short *)(c + 0x92) = 5000 - (unsigned int)RandomIntInternal(&data_0209e650) % 4000;\n *(unsigned short *)(c + 0x94) = (unsigned int)RandomIntInternal(&data_0209e650) >> 16;\n *(int *)(c + 0x174) = 0x28000;\n *(int *)(c + 0x17c) = 3;\n *(int *)(((int)c + 0xb0) & 0xFFFFFFFFFFFFFFFF) &= ~0x10000;\n}\n", "source": "lunavyqo-groupb-pure-c-best", "floor": {"class": "ordering", "evidence": "call-after-stores: rsb r1 via u64 launder OK; pool s rematerializes to r3 and mov#0x6a before str; sibling without call matches; 100+ pure-C variants", "date": "2026-07-23"}, "floor_note": "call-after-stores s in r3 vs r0; div=3"} {"module": "arm9", "addr": "0x02068dc8", "name": "func_02068dc8", "size": 124, "target_hex": "70402de96c309fe50050a0e1003093e50140a0e1013a83e21134d3e50260a0e1000053e30000a0137040bd181eff2f11110000eb000050e30000a0037040bd081eff2f012c209fe50100a0e3001092e5131c81e2be60c1e1001092e5051b81e2b050c1e1001092e5051b81e2b240c1e17040bde81eff2fe1b49d0a02", "lang": "c", "divergences": 4, "c_source": "typedef unsigned short u16;\ntypedef unsigned char u8;\n\nextern char* data_020a9db4;\nextern int func_02068e44(void);\n\nint func_02068dc8(int a, int b, int c)\n{\n if (*(u8*)(data_020a9db4 + 0x1000 + 0x411))\n return 0;\n if (func_02068e44() == 0)\n return 0;\n *(u16*)(data_020a9db4 + 0x1300 + 0xe) = c;\n *(u16*)(data_020a9db4 + 0x1400) = a;\n *(u16*)(data_020a9db4 + 0x1400 + 2) = b;\n return 1;\n}", "source": "fanout-opus"} {"module": "ov007", "addr": "0x020c4684", "name": "func_ov007_020c4684", "size": 824, "target_hex": "f04f2de924d04de200a0a0e148009de5f057dae1080010e24c009de50090a0e34c008de584009a15f247dae118008d1510208de50566a0e1b086dae1b276dae110009de518908d0514308de5000050e309b0a0e10456a0e124d08d02f04fbd081eff2f01ba25dae15c309ae590029fe5024193e7000054e3001080e5141094150820a013180094151291a0116c109ae512b0a01100108de564209ae568309ae50400a0e10110a0e345f3ffeb0400a0e132f3ffeb54009ae5000054e3801080e314009de51c908de5002c81e110009de530129fe5000882e1000081e50300000a010058e3bc90da01010057e3beb0da0114029fe50010a0e3001080e520309ae54c409de524209ae5000063e2a0cf80e0f040d4e1001062e24c009de5a1ef81e0f410d0e1f200d0e1ccc084e0dc419fe5ce0080e000c084e5000084e5cc019fe5cc419fe5001080e500c094e5024ba0e3931cc0e092ccc3e0042091e00010a0e22226a0e1ac019fe5012a82e104409ce0002080e50010a3e22426a0e1012a82e1002080e5012aa0e348109de5002080e5010011e20d00001a020011e20b00001a00808de518009de504708de508008de51c409de50900a0e10b10a0e10620a0e10530a0e10c408de55a0000eb460000ea00209ae540019fe50110a0e3001080e5022012e2b614da1114019f152c319fe5001080150504a0e10614a0e14008a0e14118a0e10008a0e10118a0e12008a0e12118a0e100c881e100c083e500419fe50132a0e3003084e50030a0e3003084e5000052e3b844da11c4309f150008a0e1004083150b36a0e1935724e00434a0e14338a0e10338a0e12358a0e1054881e1b8309fe5bc109fe5004083e50030a0e3003081e5000052e3ba44da1180309f150518a0e1004083150936a0e1936824e00434a0e14338a0e10338a0e1235881e178409fe52338a0e1005084e578109fe5014aa0e3004081e5000052e3bc24da113c109f15000083e1002081154c209fe550109fe5000082e5012aa0e3002081e548009fe50010a0e3001080e540009fe50110a0e3001080e524d08de2f04fbde81eff2fe180040004a404000444040004700400045c3210026c04000400050004880400048c0400049c040004980400040405000448040004", "lang": "c", "divergences": 4, "c_source": "typedef short s16;\ntypedef unsigned short u16;\ntypedef int s32;\ntypedef unsigned int u32;\ntypedef long long s64;\n\nextern void func_ov007_020c1448(int *a, int b, int c, int d, int e);\nextern void func_ov007_020c1404(int *c);\nextern void func_ov007_020c49bc(int a0, int a1, int a2, int a3, int s0, int s1, int s2, int s3);\nextern int data_ov007_0210325c;\n\nvoid func_ov007_020c4684(char *a0, int a1, int a2, int a3, int flags, s16 *pos)\n{\n int sbv;\n u16 w, h;\n int sx;\n int sy;\n int fpv;\n int *tex;\n int sp18;\n int sp1C;\n s16 *p;\n\n sx = *(s16 *)(a0 + 0x70) << 12;\n sy = *(s16 *)(a0 + 0x72) << 12;\n fpv = sbv = 0;\n w = *(u16 *)(a0 + 0x60);\n h = *(u16 *)(a0 + 0x62);\n sp18 = (flags & 8) ? *(int *)(a0 + 0x84) : 0;\n p = pos;\n if (a2 == 0)\n return;\n\n tex = ((int **)*(int *)(a0 + 0x5c))[*(u16 *)(a0 + 0x5a)];\n *(volatile u32 *)0x4000480 = a1;\n if (tex != 0)\n {\n sbv = 8 << tex[5];\n fpv = 8 << tex[6];\n }\n func_ov007_020c1448(tex, 1, *(int *)(a0 + 0x64), *(int *)(a0 + 0x68), *(int *)(a0 + 0x6c));\n func_ov007_020c1404(tex);\n sp1C = sbv;\n *(volatile u32 *)0x40004a4 = ((*(int *)(a0 + 0x54) | 0x80) | (a3 << 24)) | (a2 << 16);\n if (tex != 0)\n {\n if (w == 1)\n sbv = *(u16 *)(a0 + 0xc);\n if (h == 1)\n fpv = *(u16 *)(a0 + 0xe);\n }\n *(volatile u32 *)0x4000444 = 0;\n {\n int cx = *(int *)(a0 + 0x20);\n int cy = *(int *)(a0 + 0x24);\n int tx, ty, tz, k, q1, q2;\n tx = p[0] + (-cx) / 2;\n tz = p[2];\n ty = p[1] + (-cy) / 2;\n *(volatile u32 *)0x4000470 = tx;\n *(volatile u32 *)0x4000470 = ty;\n *(volatile u32 *)0x4000470 = tz;\n k = data_ov007_0210325c;\n q1 = (int)(((s64)cx * k + 0x800) >> 12);\n q2 = (int)(((s64)cy * k + 0x800) >> 12);\n *(volatile u32 *)0x400046c = q1;\n *(volatile u32 *)0x400046c = q2;\n *(volatile u32 *)0x400046c = 0x1000;\n }\n if (!(flags & 1) && !(flags & 2))\n {\n func_ov007_020c49bc(sbv, fpv, sx, sy, w, h, sp18, sp1C);\n }\n else\n {\n int f;\n u16 yl, xl, y2, x2;\n f = *(int *)a0 & 2;\n *(volatile u32 *)0x4000500 = 1;\n if (f)\n *(volatile u32 *)0x4000480 = *(u16 *)(a0 + 0x46);\n yl = (u16)((sy << 8) >> 16);\n xl = (u16)((sx << 8) >> 16);\n *(volatile u32 *)0x4000488 = (u32)xl | (yl << 16);\n *(volatile u32 *)0x400048c = 0x10000000;\n *(volatile u32 *)0x400048c = 0;\n if (f)\n *(volatile u32 *)0x4000480 = *(u16 *)(a0 + 0x48);\n y2 = (u16)((((fpv << 12) * h + sy) << 8) >> 16);\n *(volatile u32 *)0x4000488 = xl | (y2 << 16);\n *(volatile u32 *)0x400049c = 0;\n if (f)\n *(volatile u32 *)0x4000480 = *(u16 *)(a0 + 0x4a);\n x2 = (u16)((((sbv << 12) * w + sx) << 8) >> 16);\n *(volatile u32 *)0x4000488 = (y2 << 16) | x2;\n *(volatile u32 *)0x4000498 = 0x1000;\n if (f)\n *(volatile u32 *)0x4000480 = *(u16 *)(a0 + 0x4c);\n *(volatile u32 *)0x4000488 = x2 | (yl << 16);\n *(volatile u32 *)0x400049c = 0x1000;\n *(volatile u32 *)0x4000504 = 0;\n }\n *(volatile u32 *)0x4000448 = 1;\n}\n", "source": "fanout-fable"} {"module": "arm9", "addr": "0x020676e0", "name": "func_020676e0", "size": 452, "target_hex": "f0402de904d04de2001091e50270a0e10360a0e1000051e30600000a010051e31e00000a020051e35400000a04d08de2f040bde81eff2fe1282080e2000092e5020450e31100003a8b0750e30f00002a041092e5010080e08b0750e30b00008a081087e5000092e50c1087e2040087e5040097e504d08de2000087e5000091e50100c0e3000081e5f040bde81eff2fe1f2c7feeb04d08de2f040bde81eff2fe1384080e2002094e5041094e500c0a0e30c50a0e1020452e3013082e00b00003aec009fe5000052e10800002a230653e31100009a000053e10200002a010751e30150a0930c00009a01c0a0e30a0000eac0009fe5000052e10600003ab8009fe5000052e10300002a000053e10150a09301c0a083000000ea01c0a0e301005ce30000001acdc7feeb040094e5000055e3080087e5000094e5040087e504009705000087050500000a000096e5000087e5001096e5080097e5000081e0000086e50c1087e2000091e504d08de20100c0e3010080e3000081e5f040bde81eff2fe1161ea0e334009fe5081087e5040087e5040097e50c1087e2000087e5000091e50100c0e3000081e504d08de2f040bde81eff2fe100e83f0200807f0300f0800300fe7f02", "lang": "c", "divergences": 4, "c_source": "extern void Crash(void);\nvoid func_020676e0(unsigned *self, unsigned *mode_p, unsigned *out, unsigned *cursor)\n{\n unsigned mode = *mode_p;\n unsigned *p;\n unsigned addr, size, end;\n unsigned bad, special;\n unsigned *f;\n switch (mode) {\n case 0:\n p = (unsigned *)(((int)self + 0x28) & 0xFFFFFFFFFFFFFFFFLL);\n addr = *p;\n if (addr < 0x2000000u) goto crash0;\n if (addr >= 0x22c0000u) goto crash0;\n size = p[1];\n if (addr + size > 0x22c0000u) goto crash0;\n out[2] = size;\n out[1] = *p;\n f = (unsigned *)(((int)out + 0xc) & 0xFFFFFFFFFFFFFFFFLL);\n out[0] = out[1];\n *f = *f & ~1u;\n return;\n crash0: Crash(); return;\n case 1:\n p = (unsigned *)(((int)self + 0x38) & 0xFFFFFFFFFFFFFFFFLL);\n addr = *p;\n size = p[1];\n bad = 0;\n special = bad;\n {\n unsigned e = addr + size;\n end = e;\n }\n if (addr < 0x2000000u) goto region2;\n if (addr >= 0x23fe800u) goto region2;\n if (end <= 0x2300000u) goto check_bad;\n if (end >= 0x23fe800u) goto set_bad;\n if (size <= 0x40000u) { special = 1; goto check_bad; }\n set_bad: bad = 1; goto check_bad;\n region2:\n if (addr < 0x37f8000u) goto set_bad2;\n if (addr >= 0x380f000u) goto set_bad2;\n if (end <= 0x380f000u) { special = 1; goto check_bad; }\n bad = 1; goto check_bad;\n set_bad2: bad = 1;\n check_bad:\n if (bad == 1) Crash();\n out[2] = p[1]; out[1] = p[0];\n if (special == 0) out[0] = out[1];\n else { out[0] = *cursor; *cursor = *cursor + out[2]; }\n f = (unsigned *)(((int)out + 0xc) & 0xFFFFFFFFFFFFFFFFLL);\n *f = (*f & ~1u) | 1u;\n return;\n case 2:\n /* 4-miss: load-before-store OK; r1/r0 and store targets swapped vs ROM */\n out[1] = 0x027ffe00u;\n out[2] = 0x160;\n out[0] = out[1];\n f = (unsigned *)(((int)out + 0xc) & 0xFFFFFFFFFFFFFFFFLL);\n *f = *f & ~1u;\n return;\n }\n}\n", "source": "lunavyqo"} @@ -28,9 +30,9 @@ {"module": "ov085", "addr": "0x0212e4a4", "name": "func_ov085_0212e4a4", "size": 248, "target_hex": "30402de90cd04de20050a0e18889fbeb0040b0e13100000ad0009fe55c1084e2083090e500c08de2070091e807008ce8010813e22900000a0a09a0e308109de5000060e2000051e1240000da0400a0e11210a0e30020e0e30030a0e32c6ffeeb000050e31d00000a5c0095e55cc085e2440784e5600095e574109fe5480784e5642095e50500a0e14c2784e500309de50020a0e35c3085e504309de5603085e508309de5643085e500309ce5fa3943e200308ce5443694e5fa3983e2603085e55c3095e5a43285e5603095e5a83285e5643095e5ac3285e5dc22c5e5680000eb0100a0e30cd08de23040bde81eff2fe1a0ca090200081302", "lang": "cpp", "divergences": 4, "c_source": "//cpp\nstruct V3 { int x, y, z; };\n\nextern \"C\" int _ZN5Actor13ClosestPlayerEv(void);\nextern \"C\" int _ZN6Player17SetNoControlStateEhih(int self, unsigned char a, int b, unsigned char c);\nextern \"C\" void func_ov085_0212e728(int c, int a, int b);\n\nextern int data_0209caa0[];\nextern int data_ov085_02130800[];\n\nextern \"C\" int func_ov085_0212e4a4(int self)\n{\n int p = _ZN5Actor13ClosestPlayerEv();\n if (p != 0) {\n V3 v = *(V3*)(p + 0x5c);\n if ((data_0209caa0[2] & 0x10000) != 0 &&\n v.z > -0x28000 &&\n _ZN6Player17SetNoControlStateEhih(p, 0x12, -1, 0) != 0) {\n *(int*)(p + 0x744) = *(int*)(self + 0x5c);\n *(int*)(p + 0x748) = *(int*)(self + 0x60);\n *(int*)(p + 0x74c) = *(int*)(self + 0x64);\n *(V3*)(self + 0x5c) = v;\n {\n int *q = (int*)(self + 0x5c);\n *q = *q - 0x3e8000;\n }\n *(int*)(self + 0x60) = *(int*)(p + 0x644) + 0x3e8000;\n *(int*)(self + 0x2a4) = *(int*)(self + 0x5c);\n *(int*)(self + 0x2a8) = *(int*)(self + 0x60);\n *(int*)(self + 0x2ac) = *(int*)(self + 0x64);\n *(signed char*)(self + 0x2dc) = 0;\n func_ov085_0212e728(self, (int)data_ov085_02130800, 0);\n }\n }\n return 1;\n}\n", "source": "fanout-glm-5.2"} {"module": "ov062", "addr": "0x02116a08", "name": "func_ov062_02116a08", "size": 376, "target_hex": "30402de91cd04de20040a0e10020a0e35c0084e20f1d84e204208de508208de50c208de56a99fceb0400a0e152fdffeb000050e30200001ae413d4e5010051e30c00001a020050e30300000a10119fe50400a0e19d0000eb020000ea04119fe50400a0e1990000eb1cd08de20100a0e33040bde81eff2fe1010ca0e300008de5030c84e2f41fd0e1940084e20a20a0e3023ca0e35991fceb0a1aa0e30400a0e1981084e509e8fbeb0010a0e300108de50050a0e1ec0394e5ac209fe5743084e20310a0e315eefbebec0384e5000055e31800000a030c84e2b80ed0e1000050e31400001a5c3085e2000093e510108de210008de5042093e50f0d84e214208de5082093e518208de53199fcebfa0950e3040000aa54109fe50020a0e30400a0e1982084e5690000eb1cd08de20100a0e33040bde81eff2fe1010c84e2b000d0e1000050e30200001a24109fe50400a0e15e0000eb0100a0e31cd08de23040bde81eff2fe100df110270de11028a01000090de1102e0de1102", "lang": "c", "divergences": 4, "c_source": " extern int Vec3_Dist(void* a, void* b);\n extern int func_ov062_02115f84(char* c);\n extern int func_ov062_02116cd8(void* c, void* p);\n extern void ApproachAngle(void* p, int target, int a, int b, int limit);\n extern char* _ZN5Actor13ClosestPlayerEv(char* self);\n extern int _ZN5Sound8PlayLongEjjjRK7Vector3j(\n unsigned int a, unsigned int b, unsigned int c, void* v, unsigned int e);\n\n extern char data_ov062_0211df00[];\n extern char data_ov062_0211de70[];\n extern char data_ov062_0211de90[];\n extern char data_ov062_0211dee0[];\n\n int func_ov062_02116a08(char* c)\n {\n volatile int vd0[3];\n int vd1[3];\n int r;\n char* pl;\n int* pos;\n char* p0;\n char* p1;\n\n p0 = c + 0x5c;\n p1 = c + 0x3c0;\n\n vd0[0] = 0;\n vd0[1] = 0;\n vd0[2] = 0;\n\n Vec3_Dist(p0, p1);\n\n r = func_ov062_02115f84(c);\n if (r != 0 || *(unsigned char *)(c + 0x3e4) == 1) {\n if (r != 2) {\n func_ov062_02116cd8(c, data_ov062_0211df00);\n } else {\n func_ov062_02116cd8(c, data_ov062_0211de70);\n }\n return 1;\n }\n\n ApproachAngle(c + 0x94, *(short *)(c + 0x3f4), 0xa, 0x200, 0x100);\n\n *(int *)(c + 0x98) = 0xa000;\n pl = _ZN5Actor13ClosestPlayerEv(c);\n\n *(int *)(c + 0x3ec) =\n _ZN5Sound8PlayLongEjjjRK7Vector3j(\n *(unsigned int *)(c + 0x3ec), 3, 0x18a, c + 0x74, 0);\n\n if (pl != 0 && *(unsigned short *)(c + 0x3e8) == 0) {\n pos = (int *)(((int)pl + 0x5c) & 0xffffffffffffffffLL);\n vd1[0] = pos[0];\n vd1[1] = pos[1];\n vd1[2] = pos[2];\n\n if (Vec3_Dist(c + 0x3c0, vd1) < 0x3e8000) {\n *(int *)(c + 0x98) = 0;\n func_ov062_02116cd8(c, data_ov062_0211de90);\n }\n return 1;\n }\n\n if (*(unsigned short *)(c + 0x100) == 0)\n func_ov062_02116cd8(c, data_ov062_0211dee0);\n\n return 1;\n }", "source": "fanout-opus"} {"module": "ov002", "addr": "0x020f7780", "name": "func_ov002_020f7780", "size": 576, "target_hex": "30402de90cd04de214129fe514329fe5b010d1e10050a0e1004093e5010052e12400001a000052e3fc019f050310a003001080050cd08d020100a0033040bd081eff2f01e4119fe5e4019fe500c091e5043091e5082091e50010d0e504308de5d0019fe500c08de508208de5010190e700308de2fe28d0e15c0085e28c1084e2022982e20228a0e14228a0e1a40ffdeb011aa0e3070aa0e3b219c5e1000060e2b409c5e1f419d5e11f00a0e3be18c5e10201c5e5370000eafc0fd5e16a0050e31b0000ca3c0050e3140000da0a1aa0e3f40085e2001061e2cc20a0e30231e0e3250efdeb942085e2f010d2e1923085e25c0085e2781081e2b010c2e1f020d3e18c1084e2402082e2b020c3e1c60ffdeb0010a0e18e0085e2022ca0e38d0dfdebfc0fd5e1690050e30e0ca0c3b209c5c1180000eaf40085e20f19a0e3cc20a0e30231e0e30c0efdeb5c0085e28c1084e2b50ffdeb0010a0e18e0085e2022ca0e37c0dfdebfc0fd5e1a90050e3040000aa940085e2061ba0e31e20a0e30139a0e3a20dfdeb031aa0e3920085e2001061e27020a0e3340dfdebb209d5e198c09fe5f43095e54002a0e18000a0e1010080e28000a0e1f0009ce1021ba0e3fc2085e29340c0e0013094e00000a0e22336a0e1003a83e1983085e5b239d5e1f44095e50100a0e34332a0e10331a0e1f3309ce1003063e294c3c3e001409ce00010a3e22436a0e1013a83e1a83085e5f010d2e1011081e2b010c2e10cd08de23040bde81eff2fe174b2090218f3090244ee080270b9100250f2090294f3090214220802", "lang": "c", "divergences": 4, "c_source": "extern unsigned short data_0209b274;\nextern void *data_0209f318;\nextern int data_0208ee44;\nextern int data_ov002_0210b970[3];\nextern unsigned char data_0209f250;\nextern void *data_0209f394[];\nextern short data_02082214[];\n\nextern void Vec3_RotateYAndTranslate(int *out, int *in, short angle, int *src);\nextern void Math_Function_0203b0fc(int *p, int target, int scale, int max);\nextern short Vec3_HorzAngle(const int *v0, const int *v1);\nextern void _Z15ApproachLinear2Rsss(short *v, short t, short s);\nextern void _Z11UpdateAngleRssis(void *p, short a, int step, short d);\nextern void _Z14ApproachLinearRsss(short *dst, short target, short step);\n\nint func_ov002_020f7780(char *self, void *unused, int mode)\n{\n char *c = self;\n char *r4 = (char *)data_0209f318;\n\n if (mode == data_0209b274) {\n if (mode == 0) {\n data_0208ee44 = 3;\n return 1;\n }\n\n {\n int v[3];\n v[0] = *(int *)((char *)data_ov002_0210b970 + 0);\n v[1] = *(int *)((char *)data_ov002_0210b970 + 4);\n v[2] = *(int *)((char *)data_ov002_0210b970 + 8);\n\n char *p = (char *)(((long long)(int)data_0209f394) & 0xFFFFFFFFFFFFFFFFLL);\n short ang = *(short *)(*(void **)(p + (data_0209f250 << 2)) + 0x8e);\n\n Vec3_RotateYAndTranslate((int *)(c + 0x5c), (int *)(r4 + 0x8c), (short)(ang + 0x8000), v);\n }\n\n *(short *)(c + 0x92) = 0x1000;\n *(short *)(c + 0x94) = -0x7000;\n *(short *)(c + 0x8e) = *(short *)(c + 0x94);\n *(unsigned char *)(c + 0x102) = 0x1f;\n } else {\n short state = *(short *)(c + 0xfc);\n if (state <= 0x6a) {\n if (state > 0x3c) {\n Math_Function_0203b0fc((int *)(c + 0xf4), -0xa000, 0xcc, 0x7fffffff);\n short *p94 = (short *)(((long long)(int)(c + 0x94)) & 0xFFFFFFFFFFFFFFFFLL);\n short *p92 = (short *)(((unsigned long long)(unsigned int)(c + 0x92)) & 0xFFFFFFFFFFFFFFFFULL);\n *p94 = *p94 + 0x78;\n *p92 = *p92 + 0x40;\n\n short h = Vec3_HorzAngle((int *)(c + 0x5c), (int *)(r4 + 0x8c));\n _Z15ApproachLinear2Rsss((short *)(c + 0x8e), h, 0x200);\n }\n\n state = *(short *)(c + 0xfc);\n if (state > 0x69) {\n *(short *)(c + 0x92) = 0xe00;\n }\n } else {\n Math_Function_0203b0fc((int *)(c + 0xf4), 0x3c000, 0xcc, 0x7fffffff);\n\n short h = Vec3_HorzAngle((int *)(c + 0x5c), (int *)(r4 + 0x8c));\n _Z15ApproachLinear2Rsss((short *)(c + 0x8e), h, 0x200);\n\n state = *(short *)(c + 0xfc);\n if (state < 0xa9) {\n _Z11UpdateAngleRssis((void *)(c + 0x94), 0x1800, 0x1e, 0x4000);\n }\n _Z14ApproachLinearRsss((short *)(c + 0x92), -0x3000, 0x70);\n }\n }\n\n {\n unsigned short a = *(unsigned short *)(c + 0x92);\n int t = *(int *)(c + 0xf4);\n short s0 = data_02082214[((a >> 4) << 1) + 1];\n *(int *)(c + 0x98) = (int)(((long long)t * s0 + 0x800) >> 12);\n }\n {\n unsigned short a = *(unsigned short *)(c + 0x92);\n int t = *(int *)(c + 0xf4);\n int s1 = -data_02082214[(a >> 4) << 1];\n *(int *)(c + 0xa8) = (int)(((long long)t * s1 + 0x800) >> 12);\n }\n\n {\n short *pfc = (short *)(((long long)(unsigned int)(c + 0xfc)) & 0xFFFFFFFFFFFFFFFFLL);\n *pfc = *pfc + 1;\n }\n\n return 1;\n}\n", "source": "fanout-glm-5.2"} +{"module": "ov075", "addr": "0x02117d80", "name": "func_ov075_02117d80", "size": 260, "target_hex": "10402de908d04de2e4109fe50040a0e10000d1e50100c0e30000c1e5bc00d4e1060050e30100a0030000a013000050e30200000a1900a0e39571fceb130000eaac109fe5ac009fe50020d1e50420c2e30020c1e5e400fceb0010a0e198009fe592f8ffeb1600a0e38971fceb8c009fe57c109fe5102090e50030d1e5140090e5043083e30030c1e5642084e5680084e55c109fe50230a0e300c0d1e50120a0e3700084e201c08ce300c0c1e58032c4e58122c4e5a8c0a0e30810a0e30020a0e35030a0e300c08de50ff8ffeba8c0a0e3940084e20810a0e30020a0e3b030a0e300c08de508f8ffeb08d08de21040bde81eff2fe154d40902029800001cd7110210d81102", "lang": "c", "divergences": 4, "c_source": "extern void func_02034414(unsigned short n);\nextern int LoadFile(int handle);\nextern void func_ov075_02116030(void *c, int v);\nextern void func_ov075_02115e8c(void *c, int a, int b, int d, int e);\nextern unsigned char data_0209d454;\nextern int data_ov075_0211d71c;\nextern int data_ov075_0211d810[];\n\nenum Bool { FALSE, TRUE };\n\nvoid func_ov075_02117d80(char *c)\n{\n int fh;\n int v0, v1;\n enum Bool cond;\n\n data_0209d454 = data_0209d454 & ~1;\n cond = (*(unsigned short *)(c + 0xc) == 6);\n if (cond != FALSE)\n {\n func_02034414(0x19);\n }\n else\n {\n data_0209d454 = data_0209d454 & ~4;\n fh = LoadFile(0x9802);\n func_ov075_02116030(&data_ov075_0211d71c, fh);\n func_02034414(0x16);\n v0 = data_ov075_0211d810[4];\n v1 = data_ov075_0211d810[5];\n data_0209d454 = data_0209d454 | 4;\n *(int *)(c + 0x64) = v0;\n *(int *)(c + 0x68) = v1;\n }\n data_0209d454 = data_0209d454 | 1;\n *(unsigned char *)(c + 0x280) = 2;\n *(unsigned char *)(c + 0x281) = 1;\n func_ov075_02115e8c(c + 0x70, 8, 0, 0x50, 0xa8);\n func_ov075_02115e8c(c + 0x94, 8, 0, 0xb0, 0xa8);\n}\n", "source": "batch4-lunavyqo"} {"module": "ov075", "addr": "0x0211a948", "name": "func_ov075_0211a948", "size": 184, "target_hex": "10402de9903090e590109fe590209fe5003081e5943090e588109fe5003082e5984090e5882090e5243da0e124caa0e1a4eba0e1a44ea0e1073003e2a221a0e1032d82e107c00ce207300ee20c2a82e1014004e2832b82e1842e82e1002081e5981090e5211da0e1071001e2020051e30120a0030020a0138c1090e5040062e23130a0e120209fe520109fe520009fe5003082e5001080e51040bde81eff2fe1c0040004c4040004a8040004ac04000488001f01a4040004", "lang": "c", "divergences": 5, "c_source": "void func_ov075_0211a948(int *c)\n{\n unsigned int w, b, t, s;\n unsigned int f0, f1, f2, f3;\n int e;\n *(volatile int*)0x40004c0 = c[0x90 / 4];\n *(volatile int*)0x40004c4 = c[0x94 / 4];\n w = (unsigned int)c[0x98 / 4];\n b = (unsigned int)c[0x88 / 4];\n f0 = w >> 0x1a;\n f1 = w >> 0x14;\n f2 = w >> 0x17;\n f3 = w >> 0x1d;\n *(volatile int*)0x40004a8 =\n (b >> 3)\n | ((f0 & 7) << 26)\n | ((f1 & 7) << 20)\n | ((f2 & 7) << 23)\n | ((f3 & 1) << 29);\n t = (unsigned int)c[0x98 / 4];\n e = (((t >> 0x1a) & 7) == 2) ? 1 : 0;\n s = (unsigned int)c[0x8c / 4];\n *(volatile int*)0x40004ac = s >> (4 - e);\n *(volatile int*)0x40004a4 = 0x11f0088;\n}\n", "source": "harvest-wave4"} {"module": "ov080", "addr": "0x02125460", "name": "func_ov080_02125460", "size": 252, "target_hex": "10402de9081090e5a82190e5a116a0e1031001e2ff1001e2020051e3083092e50300002a011c80e2b61bd1e1000051e30100001aa4109fe5013083e1a0109fe5a0209fe5003081e5a83190e598109fe50c3093e5003082e5a82190e5104092e5002092e5243da0e124caa0e1a4eba0e1a44ea0e1073003e2a221a0e1032d82e107c00ce207300ee20c2a82e1014004e2832b82e1842e82e1002081e5a81190e548209fe5100091e5041091e5200da0e1070000e2020050e30100a0030000a013040060e23130a0e124109fe524009fe5003082e5001080e51040bde81eff2fe10000ff7fc0040004c4040004a8040004ac04000488001f01a4040004", "lang": "c", "divergences": 5, "c_source": "typedef unsigned int u32;\nvoid func_ov080_02125460(char* c){\n u32* p = *(u32**)(c+0x1a8);\n unsigned char m = (*(u32*)(c+8) >> 0xd) & 3;\n u32 r3 = p[2];\n if (m >= 2 || *(unsigned short*)(c+0x1b6) == 0)\n r3 |= 0x7fff0000;\n *(u32*)0x40004c0 = r3;\n *(u32*)0x40004c4 = (*(u32**)(c+0x1a8))[3];\n {\n u32* q = *(u32**)(c+0x1a8);\n u32 a = q[4];\n u32 b = q[0];\n *(u32*)0x40004a8 = (b >> 3)\n | (((a >> 0x1a) & 7) << 26)\n | (((a >> 0x14) & 7) << 20)\n | (((a >> 0x17) & 7) << 23)\n | (((a >> 0x1d) & 1) << 29);\n }\n {\n u32* q = *(u32**)(c+0x1a8);\n u32 k = (q[4] >> 0x1a) & 7;\n *(u32*)0x40004ac = q[1] >> (4 - (k == 2 ? 1 : 0));\n }\n *(u32*)0x40004a4 = 0x11f0088;\n}\n", "source": "fanout-max2-2026-06-28"} -{"module": "ov075", "addr": "0x02117d80", "name": "func_ov075_02117d80", "size": 260, "target_hex": "10402de908d04de2e4109fe50040a0e10000d1e50100c0e30000c1e5bc00d4e1060050e30100a0030000a013000050e30200000a1900a0e39571fceb130000eaac109fe5ac009fe50020d1e50420c2e30020c1e5e400fceb0010a0e198009fe592f8ffeb1600a0e38971fceb8c009fe57c109fe5102090e50030d1e5140090e5043083e30030c1e5642084e5680084e55c109fe50230a0e300c0d1e50120a0e3700084e201c08ce300c0c1e58032c4e58122c4e5a8c0a0e30810a0e30020a0e35030a0e300c08de50ff8ffeba8c0a0e3940084e20810a0e30020a0e3b030a0e300c08de508f8ffeb08d08de21040bde81eff2fe154d40902029800001cd7110210d81102", "lang": "c", "divergences": 5, "c_source": "extern void func_02034414(unsigned short n);\nextern int LoadFile(int handle);\nextern void func_ov075_02116030(void *c, int v);\nextern void func_ov075_02115e8c(void *c, int a, int b, int d, int e);\nextern unsigned char data_0209d454;\nextern int data_ov075_0211d71c;\nextern int data_ov075_0211d810[];\n\nvoid func_ov075_02117d80(char *c)\n{\n int fh;\n int v0, v1;\n unsigned char cond;\n\n data_0209d454 = data_0209d454 & ~1;\n cond = *(unsigned short *)(c + 0xc) == 6;\n if (cond)\n {\n func_02034414(0x19);\n }\n else\n {\n data_0209d454 = data_0209d454 & ~4;\n fh = LoadFile(0x9802);\n func_ov075_02116030(&data_ov075_0211d71c, fh);\n func_02034414(0x16);\n v0 = data_ov075_0211d810[4];\n v1 = data_ov075_0211d810[5];\n data_0209d454 = data_0209d454 | 4;\n *(int *)(c + 0x64) = v0;\n *(int *)(c + 0x68) = v1;\n }\n data_0209d454 = data_0209d454 | 1;\n *(unsigned char *)(c + 0x280) = 2;\n *(unsigned char *)(c + 0x281) = 1;\n func_ov075_02115e8c(c + 0x70, 8, 0, 0x50, 0xa8);\n func_ov075_02115e8c(c + 0x94, 8, 0, 0xb0, 0xa8);\n}\n", "source": "fanout"} {"module": "ov006", "addr": "0x02122490", "name": "MgTrampolineTime_Spawn", "size": 280, "target_hex": "10402de908d04de2cc009fe5e883fceb0040b0e12c00000a8b41feebbc009fe5bc109fe5000084e5460c84e20020a0e3b426c0e1011084e0a8009fe5000084e0bc1081e2000051e1fcffff1a94009fe5000084e04603fceb8c109fe58c009fe58cc09fe5001084e588309fe5000084e00410a0e3d020a0e300c08de5a543fdeb74009fe574c09fe574309fe5000084e00310a0e3cb2fa0e300c08de59d43fdeb60009fe560109fe5000084e000108de50510a0e32420a0e350309fe59543fdeb4c009fe5000084e03df9ffeb0400a0e108d08de21040bde81eff2fe1c85d00002cc613026c460000e447000034fb13020c500000c8cf0c022cd10c024c53000008100d020c100d02d05c000038091202a8251202845d0000", "lang": "cpp", "divergences": 5, "c_source": "//cpp\nextern \"C\" void *_ZN9ActorBasenwEj(unsigned int sz);\nextern \"C\" void func_ov004_020b2adc(void);\nextern \"C\" void _ZN8Particle10SysTrackerC1Ev(void *p);\nextern \"C\" void func_020733a8(void *p, int a, int b, void *fn, void *fn2);\nextern \"C\" void func_ov006_02120a54(char *p);\nextern \"C\" int data_ov006_0213c62c;\nextern \"C\" int data_ov006_0213fb34;\nextern \"C\" void func_ov006_020ccfc8();\nextern \"C\" void func_ov006_020cd12c();\nextern \"C\" void func_ov006_020d1008();\nextern \"C\" void func_ov006_020d100c();\nextern \"C\" void func_ov006_02120938();\nextern \"C\" void func_ov006_021225a8();\n\nstruct Elem { char pad[0xbc]; };\n\nextern \"C\" void *func_ov006_02122490(void)\n{\n char *thiz = (char *)_ZN9ActorBasenwEj(0x5dc8);\n if (thiz) {\n func_ov004_020b2adc();\n *(int**)thiz = &data_ov006_0213c62c;\n *(unsigned short*)(thiz + 0x4664) = 0;\n Elem *p = (Elem*)(thiz + 0x466c);\n Elem *e = (Elem*)(thiz + 0x47e4);\n do {\n p++;\n } while (p != e);\n _ZN8Particle10SysTrackerC1Ev(thiz + 0x47e4);\n *(int**)thiz = &data_ov006_0213fb34;\n func_020733a8(thiz + 0x500c, 4, 0xd0, &func_ov006_020ccfc8, &func_ov006_020cd12c);\n func_020733a8(thiz + 0x534c, 3, 0x32c, &func_ov006_020d1008, &func_ov006_020d100c);\n func_020733a8(thiz + 0x5cd0, 5, 0x24, &func_ov006_02120938, &func_ov006_021225a8);\n func_ov006_02120a54(thiz + 0x5d84);\n }\n return thiz;\n}\n", "source": "fanout"} {"module": "ov006", "addr": "0x020efaf0", "name": "_ZN8PathLift17BaseInitResourcesEv", "size": 280, "target_hex": "10402de908d04de2cc009fe5504efdeb0040b0e12c00000af30bffebbc009fe5bc109fe5000084e5460c84e20020a0e3b426c0e1011084e0a8009fe5000084e0bc1081e2000051e1fcffff1a94009fe5000084e0aecdfceb8c109fe58c009fe58cc09fe5001084e588309fe5000084e00310a0e3b820a0e300c08de50d0efeeb74009fe574c09fe574309fe5000084e00610a0e3f020a0e300c08de5050efeeb60009fe560109fe5000084e000108de51010a0e32420a0e350309fe5fd0dfeeb4c009fe5000084e0669cfceb0400a0e108d08de21040bde81eff2fe1785a00002cc613026c460000e4470000fccc13020c5000003c890c02048a0c02345200003c6f0c02706f0c02d457000064ed0e0208fc0e02145a0000", "lang": "cpp", "divergences": 5, "c_source": "//cpp\ntypedef unsigned int u32;\ntypedef unsigned short u16;\n\nextern \"C\" void *_ZN9ActorBasenwEj(u32 sz);\nextern \"C\" void func_ov004_020b2adc(void *p);\nextern \"C\" void func_020733a8(void *o, int a, int b, void *f1, void *f2);\nextern \"C\" void _ZN8Particle10SysTrackerC1Ev(void *p);\nextern \"C\" void _ZN5ModelC1Ev(void *p);\nextern char data_ov006_0213c62c[];\nextern char data_ov006_0213ccfc[];\nextern \"C\" void func_ov006_020c893c();\nextern \"C\" void func_ov006_020c8a04();\nextern \"C\" void func_ov006_020c6f70();\nextern \"C\" void func_ov006_020eed64();\nextern \"C\" void func_ov006_020efc08();\nextern \"C\" void _ZN6Player18St_LevelEnter_MainEv();\n\nextern \"C\" void *_ZN8PathLift17BaseInitResourcesEv()\n{\n char *p = (char *)_ZN9ActorBasenwEj(0x5a78);\n if (p) {\n char *e;\n char *end;\n func_ov004_020b2adc(p);\n *(char **)p = data_ov006_0213c62c;\n *(u16 *)(p + 0x4664) = 0;\n e = p + 0x466c;\n end = p + 0x47e4;\n do {\n e += 0xbc;\n } while (e != end);\n _ZN8Particle10SysTrackerC1Ev(p + 0x47e4);\n *(char **)p = data_ov006_0213ccfc;\n func_020733a8(p + 0x500c, 3, 0xb8, (void *)func_ov006_020c8a04, (void *)func_ov006_020c893c);\n func_020733a8(p + 0x5234, 6, 0xf0, (void *)func_ov006_020c6f70, (void *)_ZN6Player18St_LevelEnter_MainEv);\n func_020733a8(p + 0x57d4, 0x10, 0x24, (void *)func_ov006_020efc08, (void *)func_ov006_020eed64);\n _ZN5ModelC1Ev(p + 0x5a14);\n }\n return p;\n}\n", "source": "fanout"} {"module": "ov006", "addr": "0x0212471c", "name": "MgTrampolineTerror_Spawn", "size": 396, "target_hex": "10402de908d04de220019fe5457bfceb0040b0e14100000ae838feeb10019fe510119fe5000084e5460c84e20020a0e3b426c0e1011084e0fc009fe5000084e0bc1081e2000051e1fcffff1ae8009fe5000084e0a3fafbebe0109fe5e0009fe5e0c09fe5001084e5dc309fe5000084e00510a0e3dc20a0e300c08de5023bfdebc8009fe5c8c09fe5c8309fe5000084e00310a0e3cb2fa0e300c08de5fa3afdebb4009fe5b4109fe5000084e000108de50a10a0e31d2ea0e3a4309fe5f23afdeba0109fe5a0009fe500108de5000084e00a10a0e32420a0e390309fe5ea3afdeb8c109fe58c009fe500108de5000084e01410a0e37820a0e37c309fe5e23afdeb78109fe578009fe500108de5000084e00510a0e32420a0e368309fe5da3afdeb0400a0e108d08de21040bde81eff2fe1ac7b00002cc613026c460000e44700007cfc13020c50000004a60c028ca70c025854000008100d020c100d02dc5d0000c8271202a848120264ed0e02fc6f000008fc0e02682c120264710000902c120238091202d07a0000a8251202", "lang": "cpp", "divergences": 5, "c_source": "//cpp\nextern \"C\" {\nvoid* _ZN9ActorBasenwEj(unsigned int sz);\nvoid func_ov004_020b2adc(void* p);\nvoid _ZN8Particle10SysTrackerC1Ev(void* p);\nint func_020733a8(void* p, int a, int b, void* ctor, void* dtor);\nvoid _ZN6Player29TryExitCharacterDoorWithIntroEv(void);\nvoid func_ov006_020ca604(void);\nvoid func_ov006_020d1008(void);\nvoid func_ov006_020d100c(void);\nvoid func_ov006_021227c8(void);\nvoid func_ov006_021248a8(void);\nvoid func_ov006_020eed64(void);\nvoid func_ov006_020efc08(void);\nvoid func_ov006_02122c68(void);\nvoid func_ov006_02122c90(void);\nvoid func_ov006_02120938(void);\nvoid func_ov006_021225a8(void);\nextern void* data_ov006_0213c62c;\nextern void* data_ov006_0213fc7c;\n}\n\nstruct Trivial { char pad[0xbc]; Trivial(){} };\n\nextern \"C\" void* func_ov006_0212471c(void){\n char *c = (char*)_ZN9ActorBasenwEj(0x7bac);\n if(c){\n func_ov004_020b2adc(c);\n *(void**)c = &data_ov006_0213c62c;\n *(short*)(c+0x4664) = 0;\n Trivial *p = (Trivial*)(c+0x466c);\n Trivial *end = (Trivial*)(c+0x47e4);\n do { p++; } while(p != end);\n _ZN8Particle10SysTrackerC1Ev(c+0x47e4);\n *(void**)c = &data_ov006_0213fc7c;\n func_020733a8(c+0x500c, 5, 0xdc, (void*)func_ov006_020ca604, (void*)_ZN6Player29TryExitCharacterDoorWithIntroEv);\n func_020733a8(c+0x5458, 3, 0x32c, (void*)func_ov006_020d1008, (void*)func_ov006_020d100c);\n func_020733a8(c+0x5ddc, 0xa, 0x1d0, (void*)func_ov006_021227c8, (void*)func_ov006_021248a8);\n func_020733a8(c+0x6ffc, 0xa, 0x24, (void*)func_ov006_020eed64, (void*)func_ov006_020efc08);\n func_020733a8(c+0x7164, 0x14, 0x78, (void*)func_ov006_02122c68, (void*)func_ov006_02122c90);\n func_020733a8(c+0x7ad0, 5, 0x24, (void*)func_ov006_02120938, (void*)func_ov006_021225a8);\n }\n return c;\n}\n", "source": "fanout-sonnet"} @@ -73,6 +75,8 @@ {"module": "arm9", "addr": "0x0204a17c", "name": "func_0204a17c", "size": 844, "target_hex": "f04f2de92cd04de20190a0e1b810d9e100a0a0e12080a0e3b412cae1ba00d9e1b602cae1b402dae100109ae58002a0e131ff2fe11c008ae5b412dae10000a0e300008de5000051e38f0000da0060a0e110008de514008de518008de51c008de520008de524008de51c109ae5080089e0060081e7060091e7388088e2000090e5067081e028008de5800ba0e1a00fb0e1080089100400871510009d050c8088120400870528009de5000ba0e1a00fb0e1080089100800871514009d050c8088120800870528009de5800aa0e1a00fb0e1080089100c00871518009d05088088120c00870528009de5000aa0e1a00fb0e108008910100087151c009d050c8088121000870528009de58007a0e1a00fb0e1080089101400871520009d05148088121400870528009de58013a0e10023a0e1a15fa0e1a24fa0e1a21f85e08022a0e1a21f81e00032a0e1a2bfa0e1a32f81e0a31fa0e180c1a0e104108de50031a0e1ac0fa0e1ac1f82e008008de5a30f81e0bc01c7e1a30fa0e10c008de5bc01d7e1000050e33700000a8001a0e100109ae531ff2fe1180087e5000055e3180097e50500000a081089e0041080e580119fe5088088e2001080e5080080e2000054e30500000a081089e0041080e564119fe5088088e2001080e5080080e200005be30500000a081089e0041080e548119fe5108088e2001080e5080080e204109de5000051e30500000a081089e0041080e528119fe5048088e2001080e5080080e208109de5000051e30500000a081089e0041080e508119fe5088088e2001080e5080080e20c109de5000051e30700000a081089e0041080e5e8109fe5108088e2001080e5010000ea24009de5180087e500009de5b412dae1010080e2206086e200008de5010050e176ffffbab622dae11400a0e300109ae5920000e031ff2fe120008ae5b602dae10030a0e3000050e32cd08dd2f04fbdd81eff2fd10340a0e10100a0e320209ae5081089e0041082e7045091e5042082e0055ca0e1255ea0e1035085e21055a0e1b051c2e1045091e5013083e2055aa0e1255ea0e1035085e21055a0e1b251c2e1045091e5144084e20c5082e5b622dae11c1091e5020053e1018088e0e6ffffba2cd08de2f04fbde81eff2fe1b0d80402ecd7040258d7040280d604027cd50402d0d40402", "lang": "cpp", "divergences": 7, "c_source": "//cpp\ntypedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef unsigned int u32;\n\nstruct Vector3;\n\nnamespace Particle {\n struct EffectData;\n struct Acceleration { static void Func(EffectData&, char*, Vector3&); };\n struct Jitter { static void Func(EffectData&, char*, Vector3&); };\n struct Converge { static void Func(EffectData&, char*, Vector3&); };\n struct Turn { static void Func(EffectData&, char*, Vector3&); };\n struct LimitPlane { static void Func(EffectData&, char*, Vector3&); };\n struct RadiusConverge { static void Func(EffectData&, char*, Vector3&); };\n}\n\ntypedef void (*BehaviorFunc)(Particle::EffectData&, char*, Vector3&);\n\nstruct Behavior {\n BehaviorFunc func;\n void* data;\n};\n\nstruct PEntry {\n void* src;\n void* fa;\n void* fb;\n void* fc;\n void* fd;\n void* fe;\n Behavior* behaviors;\n u16 count;\n};\n\nstruct SEntry {\n void* src;\n char pad4[8];\n int raw;\n u16 s10;\n u16 s12;\n};\n\nstruct EData {\n void* (*alloc)(int);\n char pad4[0x18];\n PEntry* particles;\n SEntry* seconds;\n u16 numA;\n u16 numB;\n};\n\nstruct Flags1 {\n unsigned f0_7 : 8;\n unsigned hasA : 1;\n unsigned hasB : 1;\n unsigned hasC : 1;\n unsigned hasD : 1;\n unsigned f12_15 : 4;\n unsigned hasE : 1;\n unsigned f17_23 : 7;\n unsigned hasAccel : 1;\n unsigned hasJitter : 1;\n unsigned hasConverge : 1;\n unsigned hasTurn : 1;\n unsigned hasLimitPlane : 1;\n unsigned hasRadiusConverge : 1;\n unsigned f30_31 : 2;\n};\n\nstruct Flags2 {\n unsigned f0_3 : 4;\n unsigned val1 : 4;\n unsigned val2 : 4;\n unsigned rest : 20;\n};\n\nextern \"C\" {\n\nvoid func_0204a17c(EData* t, char* d)\n{\n int off = 0x20;\n int i;\n int j;\n\n t->numA = *(u16*)(d + 8);\n t->numB = *(u16*)(d + 0xa);\n t->particles = (PEntry*)t->alloc(t->numA << 5);\n\n for (i = 0; i < t->numA; i++) {\n PEntry* p = (PEntry*)((char*)t->particles + i * 0x20);\n p->src = d + off;\n off += 0x38;\n Flags1 flags = *(Flags1*)p->src;\n\n if (flags.hasA) { p->fa = d + off; off += 0xc; }\n else p->fa = 0;\n\n if (flags.hasB) { p->fb = d + off; off += 0xc; }\n else p->fb = 0;\n\n if (flags.hasC) { p->fc = d + off; off += 8; }\n else p->fc = 0;\n\n if (flags.hasD) { p->fd = d + off; off += 0xc; }\n else p->fd = 0;\n\n if (flags.hasE) { p->fe = d + off; off += 0x14; }\n else p->fe = 0;\n\n p->count = flags.hasAccel + flags.hasJitter + flags.hasConverge\n + flags.hasTurn + flags.hasLimitPlane + flags.hasRadiusConverge;\n\n if (p->count != 0) {\n p->behaviors = (Behavior*)t->alloc(p->count * 8);\n Behavior* b = p->behaviors;\n\n if (flags.hasAccel) {\n b->data = d + off;\n b->func = &Particle::Acceleration::Func;\n off += 8;\n b++;\n }\n if (flags.hasJitter) {\n b->data = d + off;\n b->func = &Particle::Jitter::Func;\n off += 8;\n b++;\n }\n if (flags.hasConverge) {\n b->data = d + off;\n b->func = &Particle::Converge::Func;\n off += 0x10;\n b++;\n }\n if (flags.hasTurn) {\n b->data = d + off;\n b->func = &Particle::Turn::Func;\n off += 4;\n b++;\n }\n if (flags.hasLimitPlane) {\n b->data = d + off;\n b->func = &Particle::LimitPlane::Func;\n off += 8;\n b++;\n }\n if (flags.hasRadiusConverge) {\n b->data = d + off;\n b->func = &Particle::RadiusConverge::Func;\n off += 0x10;\n b++;\n }\n } else {\n p->behaviors = 0;\n }\n }\n\n t->seconds = (SEntry*)t->alloc(t->numB * 0x14);\n\n for (j = 0; j < t->numB; j++) {\n SEntry* s = &t->seconds[j];\n char* rec = d + off;\n s->src = rec;\n s->s10 = 1 << (((Flags2*)(rec + 4))->val1 + 3);\n s->s12 = 1 << (((Flags2*)(rec + 4))->val2 + 3);\n s->raw = *(int*)(rec + 4);\n off += *(int*)(rec + 0x1c);\n }\n}\n\n}\n", "source": "fanout"} {"module": "arm9", "addr": "0x020214a4", "name": "_ZN3OAM6RenderEbP7OamAttriiiiP9Matrix2x2", "size": 740, "target_hex": "f0472de90180a0e1000050e30300000aa8029fe50000d0e5010050e30800001a9c629fe5001096e5800051e3f047bda81eff2fa18c029fe58ca29fe5817180e0070000ea84629fe5001096e5800051e3f047bda81eff2fa174029fe574a29fe5817180e0000098e5001098e58003a0e1a05ba0e10108a0e1d040d8e1010c55e3025c45a2200fa0e1211fa0e1025085e0034084e010fdffeb001098e50090a0e10108a0e1200fa0e1211fa0e105fdffeb28109de5000051e30700000a001098e5011ba0e1211fa0e1010051e3c9504510c04044108990a0118000a011091095e0f047bd481eff2f41010c55e3f047bdc81eff2fc1000094e0f047bd481eff2f41c00054e3f047bdc81eff2fc120109de50000e0e3000051e10400980524109de50008a001200ea00120008d050000e0e3000051e10400980528209de5000aa001200fa00124008d05000052e30e00000a000096e50a10a0e1800147e09ffcffeb0010e0e3010050e1f047bd081eff2f01001098e5011ba0e1211fa0e1010051e301eca00303eca013020000ea001098e50000a0e303e201e200a098e5041098e534319fe5011ba0e10a29a0e18a89a0e10a9aa0e1010c5ee3211ba0e1a22fa0e103300ae0a88fa0e129cfa0e10100000a030c5ee31900001a03005ce30a00001aff2004e2800c82e10c2580e1ec009fe5082682e1004005e0020083e1040880e100008ee1000087e5220000ea800ca0e1ff4004e2820680e1000084e10c2580e1b8009fe5082682e1004005e0020083e1040880e100008ee1000087e5150000ea03005ce30900001aff0004e20c2580e188009fe5082682e1004005e0020083e1040880e100008ee1000087e5090000eaff0004e2820680e10c2580e15c009fe5082682e1004005e0020083e1040880e100008ee1000087e524009de520209de5000581e1020680e1b400c7e1000096e5010080e2000086e5f047bde81eff2fe160e6090264e6090274e6090268e6090270e6090274ea09026ce6090200c000c0ff010000", "lang": "c", "divergences": 7, "c_source": "typedef signed char s8;\ntypedef unsigned char u8;\ntypedef short s16;\ntypedef unsigned short u16;\ntypedef int s32;\ntypedef unsigned int u32;\n\ntypedef struct OamAttr {\n u32 yb : 8, objMode : 2, rest : 6, xc : 9, hi : 7;\n u32 tile : 10, prio : 2, pal : 4, hi2 : 16;\n} OamAttr;\n#define ATTR01(o) (*(u32 *)(o))\ntypedef struct Matrix2x2 { s32 m00, m01, m10, m11; } Matrix2x2;\n\nextern int _ZN3OAM11GetObjWidthEii(int shape, int size);\nextern int _ZN3OAM12GetObjHeightEii(int shape, int size);\nextern int _ZN3OAM16LoadAffineParamsEP7OamAttrPiP9Matrix2x2(OamAttr *attr, int *count, Matrix2x2 *mtx);\n\nextern u8 data_0209e660;\nextern int data_0209e664;\nextern int data_0209e668;\nextern int data_0209e66c;\nextern int data_0209e670;\nextern OamAttr data_0209e674[];\nextern OamAttr data_0209ea74[];\n\nvoid _ZN3OAM6RenderEbP7OamAttriiiiP9Matrix2x2(\n int draw, OamAttr *obj, int px, int py, int pal, int prio, Matrix2x2 *mtx)\n{\n OamAttr *res;\n int *counter;\n int *affctr;\n int cnt;\n int h;\n int idx;\n int w;\n int x;\n int y;\n\n if (!draw || data_0209e660 == 1) {\n counter = &data_0209e664;\n cnt = *counter;\n if (cnt >= 0x80) return;\n res = &data_0209e674[cnt];\n affctr = &data_0209e668;\n } else {\n counter = &data_0209e670;\n cnt = *counter;\n if (cnt >= 0x80) return;\n res = &data_0209ea74[cnt];\n affctr = &data_0209e66c;\n }\n\n x = obj->xc;\n if (x >= 0x100) x -= 0x200;\n y = *(s8 *)obj;\n x += px;\n y += py;\n w = _ZN3OAM11GetObjWidthEii((ATTR01(obj) << 16) >> 30, ATTR01(obj) >> 30);\n h = _ZN3OAM12GetObjHeightEii((ATTR01(obj) << 16) >> 30, ATTR01(obj) >> 30);\n\n if (mtx != 0) {\n if (obj->objMode != 1) {\n x -= w >> 1;\n y -= h >> 1;\n w <<= 1;\n h <<= 1;\n }\n }\n\n if (x + w < 0) return;\n if (x > 0x100) return;\n if (y + h < 0) return;\n if (y > 0xc0) return;\n\n if (pal == -1)\n pal = obj->pal;\n if (prio == -1)\n prio = obj->prio;\n\n {\n u32 flags;\n if (mtx != 0) {\n idx = _ZN3OAM16LoadAffineParamsEP7OamAttrPiP9Matrix2x2(res - *counter, affctr, mtx);\n if (idx == -1) return;\n if (obj->objMode == 1)\n flags = 0x100;\n else\n flags = 0x300;\n } else {\n idx = 0;\n flags = ATTR01(obj) & 0x30000000;\n }\n\n {\n u32 t0;\n u32 mode, mosaic, mask, dep, tiles;\n tiles = obj->tile;\n t0 = ATTR01(obj);\n {\n mask = t0 & 0xc000c000;\n dep = (t0 << 18) >> 31;\n mosaic = (t0 << 19) >> 31;\n mode = (t0 << 20) >> 30;\n }\n\n if (flags == 0x100 || flags == 0x300) {\n if (mode == 3)\n ATTR01(res) = flags | (mask | ((y & 0xff) | (idx << 25) | (mode << 10) | (mosaic << 12)) | ((x & 0x1ff) << 16));\n else\n ATTR01(res) = flags | (mask | ((y & 0xff) | ((idx << 25) | (dep << 13)) | (mode << 10) | (mosaic << 12)) | ((x & 0x1ff) << 16));\n } else {\n if (mode == 3)\n ATTR01(res) = flags | (mask | ((y & 0xff) | (mode << 10) | (mosaic << 12)) | ((x & 0x1ff) << 16));\n else\n ATTR01(res) = flags | (mask | ((y & 0xff) | (dep << 13) | (mode << 10) | (mosaic << 12)) | ((x & 0x1ff) << 16));\n }\n *(u16 *)((u32 *)res + 1) = tiles | (prio << 10) | (pal << 12);\n }\n }\n *counter += 1;\n}\n", "source": "fanout"} {"module": "ov006", "addr": "0x020fc718", "name": "func_ov006_020fc718", "size": 184, "target_hex": "30402de904d04de20040a0e194009fe50150a0e197fcfceb1c10a0e388309fe5950101e0200803e080c0a0e17c309fe5acc7a0e178209fe50c3193e702c084e0010084e00130cce7012980e20030a0e3b43ec2e50100dce7011084e0020050e30100a003b90ec205010aa003a80e8205010aa013b93ec21500006012a80e82154e0c81e20020a0e3b02bc0e1010981e2b62ec0e50110a0e3b81ec0e504d08de23040bde81eff2fe1b8d40902ff7f00002ceb1202b34e0000", "lang": "c", "divergences": 7, "c_source": "extern int data_0209d4b8;\nextern int data_ov006_0212eb2c[];\nint RandomIntInternal(int* seed);\n\nvoid func_ov006_020fc718(char *thiz, int n)\n{\n int rnd = RandomIntInternal(&data_0209d4b8);\n int off = n * 0x1c;\n unsigned int x = ((unsigned)rnd >> 16) & 0x7fff;\n unsigned int idx = (x << 1) >> 0xf;\n int v = data_ov006_0212eb2c[idx];\n unsigned char *p = (unsigned char*)(thiz + 0x4eb3);\n char *q;\n p[off] = (unsigned char)v;\n q = thiz + off + 0x4000;\n *(unsigned char*)(q + 0xeb4) = 0;\n q = thiz + off;\n if (p[off] == 2) {\n *(unsigned char*)(q + 0x4000 + 0xeb9) = 1;\n *(int*)(q + 0x4000 + 0xea8) = 0x1000;\n } else {\n *(unsigned char*)(q + 0x4000 + 0xeb9) = 0;\n *(int*)(q + 0x4000 + 0xea8) = -0x1000;\n }\n *(short*)(thiz + off + 0x4e00 + 0xb0) = 0;\n *(unsigned char*)(thiz + off + 0x4000 + 0xeb6) = 0;\n *(unsigned char*)(thiz + off + 0x4000 + 0xeb8) = 1;\n}\n", "source": "fanout-glm-5.2"} +{"module": "ov002", "addr": "0x020d5c6c", "name": "func_ov002_020d5c6c", "size": 128, "lang": "c", "divergences": 7, "c_source": "struct State;\nextern struct State data_ov002_02110034;\nextern int func_ov002_020d600c(char* c);\nextern void _ZN6Player11ChangeStateERNS_5StateE(void* c, struct State* st);\nint func_ov002_020d5c6c(char* c){\n unsigned short f = (unsigned short)(*(unsigned short*)(c + 0x6ce) & 2);\n if (f == 0) return 0;\n if (*(int*)(c + 0x360) != 0){\n if (func_ov002_020d600c(c) != 0) goto change;\n }\n *(unsigned short *)(((long long)(int)(c + 0x6ce)) & 0xFFFFFFFFFFFFFFFFLL) &= ~2;\n return 0;\nchange:\n _ZN6Player11ChangeStateERNS_5StateE(c, &data_ov002_02110034);\n return 1;\n}\n", "source": "lunavyqo-batch3"} +{"module": "ov002", "addr": "0x020e7218", "name": "func_ov002_020e7218", "size": 192, "target_hex": "10402de920d04de20040a0e1000052e31e00001a5c2081e2000092e508008de5040092e50c008de5080092e508209de510008de5bc00d4e1b20050e30100a0130000a003000050e30c009de514208de532c980e210009de50cc08de51c008de50130a01318c08de51500a0e300008de504108de5d826d1e538009fe50030a003d22090e114108de20400a0e166a3fceb24109fe50400a0e1012084e0b010d2e1401081e3b010c2e1a30000eb20d08de21040bde81eff2fe110f30902a2040000", "lang": "c", "divergences": 7, "c_source": "\nstruct V3 { int x, y, z; };\nextern void _ZN5Actor11SpawnNumberERK7Vector3jbtPS_(void* self, struct V3* pos, unsigned a, int b, unsigned short c, void* d);\nextern void func_ov002_020e7554(void* self);\nextern signed char data_0209f310[];\n\nvoid func_ov002_020e7218(char* c, char* a, int gate) {\n struct V3 pos;\n volatile int sp8, spc, sp10;\n if (gate == 0) {\n int *v = (int*)(((int)a + 0x5c) & 0xFFFFFFFFFFFFFFFF);\n int x, y, z, b, zz;\n /* sequential like ROM ldm style */\n x = v[0];\n sp8 = x;\n y = v[1];\n spc = y;\n z = v[2];\n x = sp8;\n sp10 = z;\n b = (int)(*(unsigned short*)(c + 0xc) != 0xb2);\n b = (int)(b != 0);\n y = (int)spc;\n pos.x = x;\n y = y + 0xc8000;\n zz = (int)sp10;\n spc = y;\n pos.z = zz;\n pos.y = y;\n _ZN5Actor11SpawnNumberERK7Vector3jbtPS_(c, &pos, data_0209f310[*(unsigned char*)(a+0x6d8)], b, 0x15, a);\n }\n *(unsigned short*)(((int)c + 0x4a2) & 0xFFFFFFFFFFFFFFFF) |= 0x40;\n func_ov002_020e7554(c);\n}\n", "source": "lunavyqo-e7f2c-nearmiss-pr"} {"module": "arm9", "addr": "0x0201b388", "name": "func_0201b388", "size": 544, "target_hex": "f04f2de914d04de2e0119fe50040a0e10000d1e5000050e30900000acce600ebcc219fe5cc119fe50020d2e50010d1e5920101e08110a0e1021c81e281a280e02b0000eab0019fe50000d0e5000050e30400000abee600eba0119fe5b010d1e181a280e0220000ea94019fe50000d0e5020050e30900001aa8e600eb70219fe570119fe50020d2e50010d1e5920101e08110a0e1021c81e281a280e0140000ea010050e30900001a94e600eb40219fe540119fe50020d2e50010d1e5920101e08110a0e1021c81e281a280e0080000ea4ae600eb18219fe518119fe50020d2e50010d1e5920101e08110a0e1021c81e281a280e00c019fe50c119fe50000d0e50070d1e504b19fe508008de5010044e28002a0e104008de50000a0e308909de500008de50c008de50c809de5000057e31c0000da00609de5d4509fe5a911a0e18141a0e1070009e2ff0010e2c4109fe50031a0e1002191e706019be70611a0e104c19ae7000002e000008ce104018ae7a4009f1504e18ae00320901701009b17018088e20000021020008e150000d5e5106086e2015085e2000089e0ff9000e2070058e1e4ffffba00009de504a08ae2070050e304009d0508909de500a08a0000009de5010080e200008de5100050e3d4ffffba18009fe50010d0e5011081e20010c0e514d08de2f04fbde81eff2fe168d60902c0d60902a8d6090290d60902e0d6090298d609025cd60902a4d609024cd7090210d70902acee08028cee0802", "lang": "c", "divergences": 8, "c_source": "#pragma opt_common_subs off\n\ntypedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef unsigned int u32;\n\nextern u8 data_0209d668;\nextern u8 data_0209d6c0;\nextern u8 data_0209d6a8;\nextern u8 data_0209d690;\nextern u16 data_0209d6e0;\nextern u8 data_0209d698;\nextern u8 data_0209d65c;\nextern u8 data_0209d6a4;\nextern int data_0209d74c[];\nextern u8 data_0209d710[];\nextern int data_0208eeac[];\nextern int data_0208ee8c[];\n\nint _ZN3G2S13GetBG0CharPtrEv(void);\nvoid *func_02054ea8(void);\nunsigned int func_02054e88(void);\nint func_02054d88(void);\n\nvoid func_0201b388(int a0)\n{\n int *sl;\n int j;\n u32 sb;\n int i;\n int off;\n u8 n;\n int step;\n int start;\n\n if (data_0209d668 != 0)\n {\n sl = (int *)(_ZN3G2S13GetBG0CharPtrEv() + ((data_0209d6c0 * data_0209d6a8 * 2 + 0x200) << 5));\n }\n else if (data_0209d690 != 0)\n {\n sl = (int *)(_ZN3G2S13GetBG0CharPtrEv() + (data_0209d6e0 << 5));\n }\n else if (data_0209d698 == 2)\n {\n sl = (int *)(((char *)func_02054ea8()) + ((data_0209d6c0 * data_0209d6a8 * 2 + 0x200) << 5));\n }\n else if (data_0209d698 == 1)\n {\n sl = (int *)(((char *)func_02054e88()) + ((data_0209d6c0 * data_0209d6a8 * 2 + 0x200) << 5));\n }\n else\n {\n sl = (int *)(((char *)func_02054d88()) + ((data_0209d6c0 * data_0209d6a8 * 2 + 0x200) << 5));\n }\n\n step = (a0 - 1) << 5;\n start = data_0209d65c;\n n = data_0209d6a4;\n\n for (j = 0; j < 0x10; j++)\n {\n sb = start;\n for (i = 0; i < n; i++)\n {\n int blk = sb >> 3;\n u8 col = sb & 7;\n int row = blk * 8;\n sl[row] = sl[row] | (data_0208eeac[col] & data_0209d74c[j + i * 16]);\n if (col != 0)\n {\n (sl + row)[8] = data_0208ee8c[col] & data_0209d74c[j + i * 16];\n }\n sb = (sb + data_0209d710[i]) & 0xff;\n }\n sl++;\n if (j == 7)\n {\n sl = (int *)(((char *)sl) + step);\n }\n }\n\n data_0209d6c0 = data_0209d6c0 + 1;\n}", "source": "fanout-opus"} {"module": "ov006", "addr": "0x020e61c4", "name": "func_ov006_020e61c4", "size": 200, "target_hex": "10402de90040a0e1551c84e2b60bd1e1000050e30a00000aa4009fe5002084e0b000d2e1010040e2b000c2e1f60bd1e1000050e30000a0d3b60bc1d11040bde81eff2fe1741effeb000050e30700000a051a84e20000a0e3bc05c1e50420a0e31000a0e3802581e5082affeb040000ea051a84e20420a0e31000a0e3802581e5022affeb0030a0e3c330c4e5050a84e20420a0e1b935c0e50310a0e1010982e2013083e28a16c0e50b0053e3302082e2f9ffffba050a84e2c315c0e51040bde81eff2fe1b6550000", "lang": "c", "divergences": 8, "c_source": "int func_ov004_020adbe0(void);\nvoid func_ov004_020b0a54(void* c);\n\nvoid func_ov006_020e61c4(char *thiz)\n{\n int i;\n char *p;\n unsigned short *q = (unsigned short*)(thiz + 0x5500);\n if (q[0x5b] != 0) {\n --*(volatile unsigned short*)(*(int*)((int)thiz + 0x55B6) & 0xFFFFFFFFFFFFFFFF);\n if (((short*)q)[0x5b] <= 0)\n ((short*)q)[0x5b] = 0;\n return;\n }\n if (func_ov004_020adbe0() != 0) {\n *(unsigned char*)((thiz + 0x5000) + 0x5bc) = 0;\n *(int*)((thiz + 0x5000) + 0x580) = 4;\n func_ov004_020b0a54((void*)0x10);\n } else {\n *(int*)((thiz + 0x5000) + 0x580) = 4;\n func_ov004_020b0a54((void*)0x10);\n }\n *(unsigned char*)(thiz + 0xc3) = 0;\n *(unsigned char*)((thiz + 0x5000) + 0x5b9) = 0;\n p = thiz;\n for (i = 0; i < 0xb; i++) {\n *(unsigned char*)((p + 0x4000) + 0x68a) = 0;\n p += 0x30;\n }\n *(unsigned char*)((thiz + 0x5000) + 0x5c3) = 0;\n}\n", "source": "fanout-glm-5.2"} {"module": "ov007", "addr": "0x020b782c", "name": "func_ov007_020b782c", "size": 164, "target_hex": "00402de904d04de27c009fe50f1ba0e36c3100eb74209fe574109fe5000082e50020a0e36c009fe5002081e525c0a0e30210a0e3c820a0e32330a0e300c08de5154bfeeb50109fe50020a0e3000081e548009fe50210a0e1021180e7012082e2020052e3fbffffba1700a0e3a0f1ffeb24209fe50010a0e1000092e5334afeeb04d08de20040bde81eff2fe1d02d10024834100244341002d0780b024c34100250341002", "lang": "c", "divergences": 8, "c_source": "int func_ov007_020c3df4(int a, void* b);\nchar* func_0204a4c8(char* (*alloc)(int), int a, int b, int c, unsigned short arg5);\nint func_ov007_020b3f20(int a);\nvoid func_0204a17c(int a, int b);\n\nextern char data_ov007_02102dd0[];\nextern void* data_ov007_02103448;\nextern int data_ov007_02103444;\nextern char* (data_ov007_020b78d0)(int);\nextern void* data_ov007_0210344c;\nextern int data_ov007_02103450[];\n\nvoid func_ov007_020b782c(void)\n{\n int i;\n data_ov007_02103448 = (void*)func_ov007_020c3df4((int)&data_ov007_02102dd0, (void*)0x3c00);\n data_ov007_02103444 = 0;\n data_ov007_0210344c = func_0204a4c8(data_ov007_020b78d0, 2, 0xc8, 0x23, 0x25);\n for (i = 0; i < 2; i++) {\n data_ov007_02103450[i] = i;\n }\n func_0204a17c((int)data_ov007_0210344c, func_ov007_020b3f20(0x17));\n}\n", "source": "harvest-final"} @@ -94,6 +98,7 @@ {"module": "ov006", "addr": "0x020f9994", "name": "func_ov006_020f9994", "size": 600, "target_hex": "10402de90040a0e12d20d4e5050052e302f18f90860000ea040000ea570000ea110000ea3e0000ea540000ea740000ea283084e2f020d3e1012042e2b020c3e1f822d4e1000052e31040bd181eff2f11e4219fe5f030d2e1013043e2b030c2e1ef0000eb1040bde81eff2fe1fa22d4e1010052e10200000ae90000eb1040bde81eff2fe1730000eb000050e31040bd081eff2f01a4219fe5001092e5000051e30600001a98019fe5004082e50310a0e32d10c4e54163fceb1040bde81eff2fe10400a0e1970000eb000050e30a00000a70119fe570019fe52020a0e3004081e5b020c0e10310a0e3550fa0e32d10c4e53263fceb1040bde81eff2fe13c119fe50230a0e3000091e50020a0e32d30c0e50e00a0e3002081e53763fceb1040bde81eff2fe14b0000eb000050e31040bd081eff2f010210a0e300019fe52d10c4e5000090e5040050e11040bd181eff2f11f0009fe5000090e5000050e31040bd181eff2f11e4009fe51463fcebcc009fe50010a0e3001080e51040bde81eff2fe1141094e51c2094e50c0084e2cc04fdeb181094e5202094e5100084e2c804fdeb240084e20119a0e3032ca0e3c404fdeb0c0084e2141084e2a20efdeb000050e31040bd181eff2f11240094e5010950e31040bd181eff2f1174009fe50230a0e30010a0e30120a0e32d30c4e5d404fdeb0000a0e31c0084e5200084e51040bde81eff2fe1280084e20010a0e30120a0e3cb04fdeb000050e31040bd081eff2f010318a0e30c0084e2001061e20128a0e3a304fdeb1040bde81eff2fe1f4d6130270251402530100007425140258251402550100005c251402", "lang": "c", "divergences": 9, "c_source": "// NONMATCHING: div=9 pure regperm on case 0 only (r3/r2 vs r2/r1 for c+0x28 RMW).\n// Rest of function (jump table + cases 1-5) matches byte-identical.\nextern short data_ov006_0213d6f4;\nextern char *data_ov006_02142570;\nextern char *data_ov006_02142574;\nextern short data_ov006_02142558;\nextern short data_ov006_0214255c;\n\nextern void func_ov006_020f9db8(char *c);\nextern int func_ov006_020f9bec(char *c);\nextern void _ZN5Sound12PlayBank2_2DEj(unsigned int a);\nextern int func_ov006_020f9cbc(char *a, char *b);\nextern unsigned int func_02012790(unsigned int a);\nextern void _Z14ApproachLinearRiii(int *ref, int target, int step);\nextern int func_0203d5dc(void *a, void *b);\nextern int _Z15ApproachLinear2Rsss(short *ref, short target, short step);\n\nvoid func_ov006_020f9994(char *c, int b)\n{\n switch (*(unsigned char *)(c + 0x2d)) {\n case 0:\n {\n short *p = (short *)(((long long)(int)(c + 0x28)) & 0xffffffffffffffffLL);\n short v = *(short *)p;\n *(short *)p = (short)(v - 1);\n if (*(short *)(c + 0x28) != 0)\n return;\n }\n {\n short *g = (short *)((long long)(int)&data_ov006_0213d6f4 & 0xffffffffffffffffLL);\n short v = *g;\n *g = (short)(v - 1);\n }\n func_ov006_020f9db8(c);\n return;\n case 2:\n if (*(short *)(c + 0x2a) != b) {\n func_ov006_020f9db8(c);\n return;\n }\n if (func_ov006_020f9bec(c) == 0)\n return;\n if (data_ov006_02142570 == 0) {\n data_ov006_02142570 = c;\n *(unsigned char *)(c + 0x2d) = 3;\n _ZN5Sound12PlayBank2_2DEj(0x153);\n return;\n }\n if (func_ov006_020f9cbc(c, data_ov006_02142570) != 0) {\n data_ov006_02142574 = c;\n data_ov006_02142558 = 0x20;\n *(unsigned char *)(c + 0x2d) = 3;\n _ZN5Sound12PlayBank2_2DEj(0x154);\n return;\n }\n *(unsigned char *)(data_ov006_02142570 + 0x2d) = 2;\n data_ov006_02142570 = 0;\n func_02012790(0xe);\n return;\n case 3:\n if (func_ov006_020f9bec(c) == 0)\n return;\n *(unsigned char *)(c + 0x2d) = 2;\n if (data_ov006_02142570 != c)\n return;\n if (data_ov006_02142574 != 0)\n return;\n _ZN5Sound12PlayBank2_2DEj(0x155);\n data_ov006_02142570 = 0;\n return;\n case 1:\n case 4:\n _Z14ApproachLinearRiii((int *)(c + 0xc), *(int *)(c + 0x14), *(int *)(c + 0x1c));\n _Z14ApproachLinearRiii((int *)(c + 0x10), *(int *)(c + 0x18), *(int *)(c + 0x20));\n _Z14ApproachLinearRiii((int *)(c + 0x24), 0x4000, 0x300);\n if (func_0203d5dc(c + 0xc, c + 0x14) != 0)\n return;\n if (*(int *)(c + 0x24) != 0x4000)\n return;\n *(unsigned char *)(c + 0x2d) = 2;\n _Z15ApproachLinear2Rsss(&data_ov006_0214255c, 0, 1);\n *(int *)(c + 0x1c) = 0;\n *(int *)(c + 0x20) = 0;\n return;\n case 5:\n if (_Z15ApproachLinear2Rsss((short *)(c + 0x28), 0, 1) == 0)\n return;\n _Z14ApproachLinearRiii((int *)(c + 0xc), -0x30000, 0x10000);\n }\n}\n", "source": "grok"} {"module": "arm9", "addr": "0x0204e690", "name": "_ZN22ExpandingHeapAllocator12AllocateNodeEP10MemoryNodeS1_Pvjj", "size": 408, "target_hex": "f0412de920d04de20070a0e100008de20180a0e10260a0e10350a0e1a10000eb04309de5104046e2062085e00700a0e10810a0e104408de50c308de508208de58e0000eb00209de504109de50050a0e1020041e0100050e304208d350700003a28119fe500008de26c0000eb0010a0e10700a0e10520a0e1740000eb0050a0e10c109de508009de5000041e0100050e308108d350600003af0109fe508008de25e0000eb0010a0e10700a0e10520a0e1660000eb040017e504109de5ff0000e20008a0e108209de52008a0e1012042e0010010e20300000a0000a0e318008de518009de5402f00eb08209de5a0109fe510008de210408de514208de5470000eb0010a0e1022081e2b040d2e1b833dde1080087e20249c4e3b040c2e1b040d2e1013003e2833784e1b030c2e1b030d2e104409de57f3cc3e3b030c2e1043041e00338a0e12338a0e1b040d2e17f3003e2033484e1b030c2e1b030d2e1b041d7e1ff30c3e3b030c2e1b030d2e1ff4004e2043083e1b030c2e10c2097e5330000eb0600a0e120d08de2f041bde81eff2fe15246000044550000", "lang": "cpp", "divergences": 9, "c_source": "//cpp\nextern \"C\" {\n\nstruct Target { int start; int end; };\n\nextern void _ZN10MemoryNode6TargetC1EP10MemoryNode(struct Target* thiz, void* node);\nextern void* _ZN22ExpandingHeapAllocator10UnlinkNodeEP10MemoryNodeS1_(void* c, void* node);\nextern void* _ZN22ExpandingHeapAllocator10CreateNodeEPN10MemoryNode6TargetEt(struct Target* t, unsigned short tt);\nextern void* _ZN22ExpandingHeapAllocator8LinkNodeEP10MemoryNodeS1_S1_(void* c, void* node, void* link);\nextern void MultiStore_Int(int val, int* dst, int len);\n\nvoid* _ZN22ExpandingHeapAllocator12AllocateNodeEP10MemoryNodeS1_Pvjj(void* c, void* node, void* target, unsigned int size, unsigned int z)\n{\n struct Target t0;\n struct Target t1;\n struct Target t2;\n void* link;\n int header;\n _ZN10MemoryNode6TargetC1EP10MemoryNode(&t0, node);\n\n int oldLimit = t0.end;\n header = (int)target - 0x10;\n int backStart = (int)size + (int)target;\n t0.end = header;\n t1.end = oldLimit;\n t1.start = backStart;\n\n link = _ZN22ExpandingHeapAllocator10UnlinkNodeEP10MemoryNodeS1_(c, node);\n\n unsigned int frontGap = t0.end - t0.start;\n if (frontGap < 0x10) {\n t0.end = t0.start;\n } else {\n void* newFront = _ZN22ExpandingHeapAllocator10CreateNodeEPN10MemoryNode6TargetEt(&t0, 0x4652);\n link = _ZN22ExpandingHeapAllocator8LinkNodeEP10MemoryNodeS1_S1_(c, newFront, link);\n }\n\n unsigned int backGap = t1.end - t1.start;\n if (backGap < 0x10) {\n t1.start = t1.end;\n } else {\n void* newBack = _ZN22ExpandingHeapAllocator10CreateNodeEPN10MemoryNode6TargetEt(&t1, 0x4652);\n link = _ZN22ExpandingHeapAllocator8LinkNodeEP10MemoryNodeS1_S1_(c, newBack, link);\n }\n\n int flagsWord = *(int*)((char*)c - 4);\n int* dst = (int*)t0.end;\n int len = t1.start - t0.end;\n if (((unsigned short)(flagsWord & 0xff)) & 1) {\n volatile int zero = 0;\n MultiStore_Int(zero, dst, len);\n }\n\n t2.start = header;\n t2.end = t1.start;\n void* allocNode = _ZN22ExpandingHeapAllocator10CreateNodeEPN10MemoryNode6TargetEt(&t2, 0x5544);\n\n unsigned short* flagsPtr = (unsigned short*)((long long)(int)((char*)allocNode + 2) & 0xFFFFFFFFFFFFFFFFLL);\n void* usedList = (char*)c + 8;\n unsigned short zValue = *(unsigned short*)&z;\n *flagsPtr &= ~0x8000;\n *flagsPtr |= (zValue & 1) << 15;\n int t0e = t0.end;\n *flagsPtr &= ~0x7f00;\n *flagsPtr |= (((unsigned short)((int)allocNode - t0e)) & 0x7f) << 8;\n unsigned short cValue = *(unsigned short*)((char*)c + 0x10);\n *flagsPtr &= ~0xff;\n *flagsPtr |= cValue & 0xff;\n\n void* usedTail = (void*)(*(int*)((char*)c + 0xc));\n _ZN22ExpandingHeapAllocator8LinkNodeEP10MemoryNodeS1_S1_(usedList, allocNode, usedTail);\n\n return target;\n}\n\n}\n", "source": "fanout-gpt-5.6-luna"} {"module": "ov007", "addr": "0x020c55bc", "name": "func_ov007_020c55bc", "size": 256, "target_hex": "f04f2de904d04de2083090e50080a0e3000053e304d08dd2f04fbdd81eff2fd1c16fa0e1c2bfa0e100808de53c3090e500709de5083193e7043093e5000053e3270000da0750a0e12c3090e5344090e5083193e708a194e7054083e0059093e77cc090e5803090e509904ce004c094e5c94fa0e10ce043e091c983e007a19ae7913423e00c408ae2963923e0029ba0e309a09ce00030a3e22aa6a0e103aa8ae100a084e5ce3fa0e10c5085e2017087e292ae8ce009909ae092c32ce09bce2ce00030ace22996a0e1039a89e1049084e53c3090e5083193e7043093e5030057e1d8ffffba083090e5018088e2030058e1cdffffba04d08de2f04fbde81eff2fe1", "lang": "c", "divergences": 9, "c_source": "typedef struct { int x, y, z; } V3;\n\nstruct Elem {\n int _0;\n int count;\n};\n\nstruct Self {\n int _0[2];\n int f8;\n int _c[8];\n V3 **f2c;\n int _30;\n int ***f34;\n int _38;\n struct Elem **f3c;\n int _40[15];\n int f7c;\n int f80;\n};\n\nvoid func_ov007_020c55bc(struct Self *self, int m1, int m2)\n{\n int i;\n int j;\n int k;\n int *row;\n int b7c, b80;\n int *e;\n int x, y;\n int dx, dy;\n int *p;\n int *q;\n\n i = 0;\n if (self->f8 <= 0)\n return;\n\n do {\n j = 0;\n if (self->f3c[i]->count > 0) {\n k = 0;\n do {\n row = (int *)self->f2c[i];\n p = self->f34[i][j];\n q = (int *)(((int)p + 0xc) & 0xFFFFFFFFFFFFFFFFLL);\n b7c = self->f7c;\n b80 = self->f80;\n e = (int *)((char *)row + k);\n x = e[0];\n y = e[1];\n dx = b7c - x;\n dy = b80 - y;\n\n q[0] = (int)(((long long)m1 * dx + 0x800) >> 12);\n j++;\n q[1] = (int)(((long long)m2 * dy + 0x800) >> 12);\n k += 0xc;\n } while (j < self->f3c[i]->count);\n }\n i++;\n } while (i < self->f8);\n}\n", "source": "fanout-gpt-5.6-luna"} +{"module": "ov006", "addr": "0x020deed8", "name": "func_ov006_020deed8", "size": 168, "target_hex": "f04f2de90cd04de230909de501a0a0e10900a0e14276a0e14366a0e134809de5c0d0fdeb0090a0e10050e0e30040a0e36cb09fe500508de504908de50a00a0e10710a0e10620a0e10530a0e108408de51042ffeb000050e30a00000a020058e30800001a04109ae50118a0e1211ea0e1030051e304108002000091050f0ac0030109800300008105b600dae10b0050e108a08a12e6ffff1a0cd08de2f04fbde81eff2fe1ffff0000", "lang": "c", "divergences": 9, "c_source": "extern int func_02053200(int x);\nextern int func_ov004_020af770(int a0, int a1, int a2, int a3, int a4, int a5, unsigned short a6);\n\nvoid func_ov006_020deed8(int a0, void *a1, int a2, int a3, int a4, int a5)\n{\n /* 6k: lowest reg's var declared last among long-lived */\n unsigned char *sl; /* wants sl/r10 - declare early */\n int s; /* wants sb/r9 */\n int a5_local; /* wants r8 */\n int e2; /* wants r7 */\n int e3; /* wants r6 - declare last of reg group */\n int neg1, zero, lim;\n\n s = a4;\n sl = (unsigned char *)a1;\n e2 = a2 >> 12;\n e3 = a3 >> 12;\n a5_local = a5;\n s = func_02053200(s);\n neg1 = -1;\n zero = 0;\n lim = 0xffff;\n\n for (;;) {\n int r = func_ov004_020af770((int)sl, e2, e3, neg1, neg1, s, zero);\n if (r != 0) {\n if (a5_local == 2) {\n if ((unsigned)(*(int *)(sl + 4) << 0x10) >> 0x1c == 3) {\n int *p = (int *)(((int)r + 4) & 0xFFFFFFFFFFFFFFFF);\n *p = (*p & ~0xf000) | 0x4000;\n }\n }\n }\n if (*(unsigned short *)(sl + 6) == (unsigned short)lim)\n break;\n sl += 8;\n }\n}\n", "source": "lunavyqo-e7f2c-nearmiss-pr"} {"module": "ov015", "addr": "0x02111960", "name": "_ZN13PoleBillboard13InitResourcesEv", "size": 520, "target_hex": "10402de988d04de20040a0e1d8019fe53118fceb0010a0e1d40084e20120a0e30030e0e39215fceb320e84e25111fceb0400a0e134ffffeb0400a0e18a73ffeba8019fe55418fcebfe38d4e10010a0e19c219fe500308de504208de5490f84e2bb2f84e2013aa0e304a2fceb8e3084e2f020d3e1fa0aa0e3000060e2022982e2b020c3e10010a0e310008de508108de50c108de514108de518108de51c108de5fe18d4e14c019fe5d7a8fceb44119fe508008de214208de28e03fdeb20008de214108de25c2084e244aefceb24109de538008de2051981e224108de5cb96fceb38008de220108de20020a0e38e96fceb24109de538008de2841384e5389dfceb000050e37c009d150010a0e384038415320aa0e310008de508108de50c108de514108de518108de51c108de5fe18d4e1c0009fe5b4a8fcebb8109fe508008de214208de26b03fdeb2c008de214108de25c2084e221aefceb2c109de50100a0e3781384e530209de58c109fe57c2384e534209de5802384e5602094e5882384e59603c4e5d010d1e1070051e31000001a68109fe50010d1e5010051e30200000af062fceb000050e30900001a601094e54c009fe5000051e1050000ba38008de28396fceb88d08de20000a0e31040bde81eff2fe138008de27d96fceb0100a0e388d08de21040bde81eff2fe17c4911027449110274351102680e0a02f8f2090220f2090200c0da00", "lang": "c", "divergences": 10, "c_source": "typedef struct Vec3 { int x, y, z; } Vec3;\n\ntypedef struct RaycastGround {\n char pad[0x44];\n int clsnY;\n char pad2[0x8];\n} RaycastGround;\n\nextern int data_ov015_0211497c;\nextern int data_ov015_02114974;\nextern int data_ov015_02113574;\nextern int data_020a0e68;\nextern signed char data_0209f2f8;\nextern unsigned char data_0209f220;\n\nvoid* _ZN5Model8LoadFileER13SharedFilePtr(void* f);\nvoid _ZN9ModelBase7SetFileEP8BMD_Fileii(void* self, void* f, int a, int b);\nvoid _ZN11ShadowModel10InitCuboidEv(void* self);\nvoid func_ov015_0211166c(char* t);\nvoid _ZN8Platform19UpdateClsnPosAndRotEv(void* self);\nvoid* _ZN12MeshCollider8LoadFileER13SharedFilePtr(void* f);\nvoid _ZN18MovingMeshCollider7SetFileEP8KCL_FileRK9Matrix4x35Fix12IiEsR10CLPS_Block(void* self, void* kcl, void* mtx, int fix, short s, void* clps);\nvoid Matrix4x3_FromRotationY(void* m, int angle);\nvoid MulVec3Mat4x3(Vec3* v, void* m, Vec3* out);\nvoid Vec3_Add(Vec3* out, Vec3* a, Vec3* b);\nvoid _ZN13RaycastGroundC1Ev(RaycastGround* self);\nvoid _ZN13RaycastGround12SetObjAndPosERK7Vector3P5Actor(RaycastGround* self, Vec3* v, void* a);\nint _ZN13RaycastGround10DetectClsnEv(RaycastGround* self);\nint IsStarCollectedInCurLevel(void);\nvoid _ZN13RaycastGroundD1Ev(RaycastGround* self);\n\nint func_ov015_02111960(char* self)\n{\n RaycastGround rg;\n Vec3 a;\n Vec3 b;\n Vec3 c;\n Vec3 d;\n int dist;\n\n _ZN9ModelBase7SetFileEP8BMD_Fileii(self + 0xd4, _ZN5Model8LoadFileER13SharedFilePtr(&data_ov015_0211497c), 1, -1);\n _ZN11ShadowModel10InitCuboidEv(self + 0x320);\n func_ov015_0211166c(self);\n _ZN8Platform19UpdateClsnPosAndRotEv(self);\n _ZN18MovingMeshCollider7SetFileEP8KCL_FileRK9Matrix4x35Fix12IiEsR10CLPS_Block(\n self + 0x124, _ZN12MeshCollider8LoadFileER13SharedFilePtr(&data_ov015_02114974),\n self + 0x2ec, 0x1000, *(short*)(self + 0x8e), &data_ov015_02113574);\n *(short*)(((int)self + 0x8e) & 0xFFFFFFFFFFFFFFFF) += 0x8000;\n\n dist = -0xfa000;\n int z = 0;\n a.x = z;\n a.y = z;\n a.z = dist;\n b.x = z;\n b.y = z;\n b.z = z;\n Matrix4x3_FromRotationY(&data_020a0e68, *(short*)(self + 0x8e));\n MulVec3Mat4x3(&a, &data_020a0e68, &b);\n Vec3_Add(&c, &b, (Vec3*)(self + 0x5c));\n c.y += 0x14000;\n _ZN13RaycastGroundC1Ev(&rg);\n _ZN13RaycastGround12SetObjAndPosERK7Vector3P5Actor(&rg, &c, 0);\n *(int*)(self + 0x384) = c.y;\n if (_ZN13RaycastGround10DetectClsnEv(&rg))\n *(int*)(self + 0x384) = rg.clsnY;\n\n dist = 0x32000;\n z = 0;\n a.x = z;\n a.y = z;\n a.z = dist;\n b.x = z;\n b.y = z;\n b.z = z;\n Matrix4x3_FromRotationY(&data_020a0e68, *(short*)(self + 0x8e));\n MulVec3Mat4x3(&a, &data_020a0e68, &b);\n Vec3_Add(&d, &b, (Vec3*)(self + 0x5c));\n\n int tmp = 1;\n *(int*)(self + 0x378) = d.x;\n *(int*)(self + 0x37c) = d.y;\n *(int*)(self + 0x380) = d.z;\n *(int*)(self + 0x388) = *(int*)(self + 0x60);\n *(unsigned char*)(self + 0x396) = tmp;\n\n if (data_0209f2f8 == 7 && (data_0209f220 == 1 || !IsStarCollectedInCurLevel())\n && *(int*)(self + 0x60) >= 0xdac000)\n {\n _ZN13RaycastGroundD1Ev(&rg);\n return 0;\n }\n _ZN13RaycastGroundD1Ev(&rg);\n return 1;\n}\n", "source": "fanout-glm-5.2"} {"module": "arm9", "addr": "0x0202b710", "name": "_ZN5Stage7LoadFogEv", "size": 264, "target_hex": "f0412de90020a0e30240a0e12850a0e3043080e06c29c3e5042082e2014084e2021085e29459c3e5200054e3ff2002e2ff5001e2f5ffffba0060a0e38c69c0e50110a0e3b419c0e50610a0e3b519c0e5091c80e2b66bc1e1062aa0e398409fe5b82bc1e10030d4e5000053e3f041bd081eff2f0184209fe584109fe5008092e5017080e0000053e3f041bdd81eff2fd10650a0e10000d8e5010050e32050c7150d00001a0110d8e50200d8e50320d8e5c111a0e1c001a0e1c221a0e1800281e1020580e10018a0e1b420d8e1b630d8e10700a0e12118a0e1100400eb0000d4e5016086e2088088e2000056e1287087e2e7ffffbaf041bde81eff2fe158f209021cf309026c090000", "lang": "c", "divergences": 10, "c_source": "\nextern unsigned char data_0209f258;\nextern char *data_0209f31c;\nextern void _ZN3Fog4InitEt5Fix12IiES1_(char *self, unsigned short color, int nearv, int farv);\nvoid _ZN5Stage7LoadFogEv(char *self)\n{\n unsigned char a = 0;\n unsigned char b = 0x28;\n int i;\n for (i = 0; i < 0x20; i++)\n {\n *((unsigned char *) ((self + 0x96c) + i)) = a;\n *((unsigned char *) ((self + 0x994) + i)) = b;\n a += 4;\n b += 2;\n }\n\n *((unsigned char *) (self + 0x98c)) = 0;\n *((unsigned char *) (self + 0x9b4)) = 1;\n *((unsigned char *) (self + 0x9b5)) = 6;\n *((unsigned short *) (self + 0x9b6)) = 0;\n *((unsigned short *) (self + 0x9b8)) = 0x6000;\n if (data_0209f258 == 0)\n {\n return;\n }\n char *dst = self + 0x96c;\n int j;\n unsigned char *src = (unsigned char *) data_0209f31c;\n for (j = 0; j < data_0209f258; j++)\n {\n if (src[0] == 1)\n {\n unsigned short color = ((src[1] >> 3) | ((src[2] >> 3) << 5)) | ((src[3] >> 3) << 10);\n _ZN3Fog4InitEt5Fix12IiES1_(dst, color, *((unsigned short *) (src + 4)), *((unsigned short *) (src + 6)));\n }\n else\n {\n *((unsigned char *) (dst + 0x20)) = 0;\n }\n src += 8;\n dst += 0x28;\n }\n\n}\n", "source": "permuter-improved"} {"module": "ov002", "addr": "0x020e8244", "name": "func_ov002_020e8244", "size": 340, "target_hex": "70402de940d04de238219fe50140a0e10030a0e30050a0e130108de2020084e030308de534308de538308de56b53fdeb000050e30800000aa80494e540d08de2000085e5ac0494e5040085e5b00494e5080085e57040bde81eff2fe15c1094e5602094e5643094e5dc009fe5234ffdebf419d4e1d0009fe53f4ffdeb206394e500e08de20f00b6e80ec0a0e10f00aee80f00b6e80f00aee80f0096e80f008ee8a4109fe50c00a0e10120a0e187a9fdeb94209fe58c009fe5241092e5000084e0a81484e5283092e55c1084e2ac3484e52c3092e50020a0e1b03484e54aadfdeb60009fe50310a0e3000084e05a53fdeb50009fe55c1084e2000084e00020a0e14eadfdeb44009fe51c1394e5003084e00c1091e5002093e50d00a0e3912020e0000083e5a80494e5000085e5ac0494e5040085e5b00494e5080085e540d08de27040bde81eff2fe1a8040000680e0a02ac040000", "lang": "c", "divergences": 10, "c_source": "\ntypedef short s16;\nstruct M48\n{\n int w[12];\n};\nstruct V3\n{\n int x;\n int y;\n int z;\n};\nextern int func_0203d024(struct V3 *a, struct V3 *b);\nextern void Matrix4x3_FromTranslation(void *m, int x, int y, int z);\nextern void Matrix4x3_ApplyInPlaceToRotationY(void *mF, s16 angY);\nextern void MulMat4x3Mat4x3(void *out, void *a, void *b);\nextern void SubVec3(struct V3 *a, struct V3 *b, struct V3 *c);\nextern void Vec3_LslInPlace(void *v, int sh);\nextern void AddVec3(struct V3 *a, struct V3 *b, struct V3 *c);\nextern struct M48 data_020a0e68;\nvoid func_ov002_020e8244(int *out, char *b)\n{\n struct M48 local;\n struct V3 *new_var;\n struct V3 zero;\n zero.x = 0;\n zero.y = 0;\n zero.z = 0;\n if (func_0203d024((struct V3 *) (b + 0x4a8), &zero) != 0)\n {\n out[0] = *((int *) (b + 0x4a8));\n out[1] = *((int *) (b + 0x4ac));\n out[2] = *((int *) (b + 0x4b0));\n return;\n }\n Matrix4x3_FromTranslation(&data_020a0e68, *((int *) (b + 0x5c)), *((int *) (b + 0x60)), *((int *) (b + 0x64)));\n Matrix4x3_ApplyInPlaceToRotationY(&data_020a0e68, *((s16 *) (b + 0x94)));\n if (!b)\n {\n }\n local = *((struct M48 *) (*((char **) (b + 0x320))));\n MulMat4x3Mat4x3(&local, &data_020a0e68, &data_020a0e68);\n *((int *) (b + 0x4a8)) = data_020a0e68.w[9];\n new_var = (struct V3 *) (b + 0x4a8);\n *((int *) (b + 0x4ac)) = data_020a0e68.w[10];\n *((int *) (b + 0x4b0)) = data_020a0e68.w[11];\n SubVec3((struct V3 *) (b + 0x5c), new_var, new_var);\n Vec3_LslInPlace((void *) (b + 0x4a8), 3);\n AddVec3((struct V3 *) (b + 0x4a8), (struct V3 *) (b + 0x5c), (struct V3 *) (b + 0x4a8));\n *((int *) (b + 0x4ac)) = ((*((int *) ((*((char **) (b + 0x31c))) + 0xc))) * 0xd) + (*((int *) (b + 0x4ac)));\n out[0] = *((int *) (b + 0x4a8));\n out[1] = *((int *) (b + 0x4ac));\n out[2] = *((int *) (b + 0x4b0));\n}\n", "source": "permuter-improved"} @@ -107,6 +112,7 @@ {"module": "ov006", "addr": "0x020fb7e0", "name": "func_ov006_020fb7e0", "size": 284, "target_hex": "f04f2de904d04de200a0a0e10a80a0e10090a0e30970a0e109b0a0e100908de50550a0e30360a0e30140a0e3051a88e26409d1e5000050e32e00000ad0009fe5003088e0b020d3e1590c88e2012082e2b020c3e1b026d0e1060052e32500003ab076c0e1ac009fe5003088e00020d3e50600a0e1012082e20020c3e56719d1e5020051e3051a88e26839d1e50500a001000053e30900000a6519d1e5022040e2010052e10500001a012043e20c10a0e392a121e0051a81e2d4bbc1e5d64bc1e5051a88e26529d1e5000052e1090000ba00009de56609c1e56409c1e5590c88e2b226d0e1000052e30200000a0a00a0e10910a0e1940000eb019089e21e0059e3148088e2c8ffffba04d08de2f04fbde81eff2fe16059000065590000", "lang": "c", "divergences": 10, "c_source": "typedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef unsigned int u32;\n\nextern void func_ov006_020fbb2c(char *c, int idx, unsigned short val);\n\nint pool0_5960 = 0x5960;\nint pool1_5965 = 0x5965;\n\nvoid func_ov006_020fb7e0(char *thiz)\n{\n int i;\n char *b = thiz;\n for (i = 0; i < 0x1e; i++) {\n if (*(u8 *)(b + 0x5964) != 0) {\n u16 *cnt = (u16 *)(((u32)b) + pool0_5960);\n int lim;\n u8 sub;\n (*cnt)++;\n if (*cnt >= 6) {\n *cnt = 0;\n (*(u8 *)(((u32)b) + pool1_5965))++;\n lim = 3;\n if (*(u8 *)(b + 0x5967) == 2) lim = 5;\n sub = *(u8 *)(b + 0x5968);\n if (sub != 0) {\n if (lim - 2 == *(u8 *)(b + 0x5965)) {\n char *q = thiz + (sub - 1) * 0xc + 0x5000;\n *(u8 *)(q + 0xbd4) = 0;\n *(u8 *)(q + 0xbd6) = 1;\n }\n }\n if (*(u8 *)(b + 0x5965) >= lim) {\n *(u8 *)(b + 0x5966) = 0;\n *(u8 *)(b + 0x5964) = 0;\n if (*(u16 *)(b + 0x5962) != 0) {\n func_ov006_020fbb2c(thiz, i, *(u16 *)(b + 0x5962));\n }\n }\n }\n }\n b = b + 0x14;\n }\n}\n", "source": "fanout-glm-5.2"} {"module": "ov006", "addr": "0x020f1318", "name": "func_ov006_020f1318", "size": 180, "target_hex": "10402de9a0209fe581e0a0e1024080e0bec094e1813080e0052a83e201304ce2be3084e1fc36d2e1000053e30030a0b3bc36c2b1812080e0052a82e2bc26d2e14221a0e1012012e260209f050130a003022080000130c207013082000400000a48209fe50030a0e3022080e00130c2e7013082e0812080e0052a82e2bc26d2e1000052e31040bd181eff2f11010080e0050a80e20010a0e3fd11c0e50100a0e30000c3e51040bde81eff2fe16c500000dd530000", "lang": "c", "divergences": 10, "c_source": "void func_ov006_020f1318(char *c, int idx)\n{\n unsigned short *h =\n (unsigned short *)(int)(((long long)(int)(c + 0x506c)) &\n 0xFFFFFFFFFFFFFFFFLL);\n unsigned char *q;\n\n h[idx] = h[idx] - 1;\n\n {\n char *m = c + idx * 2;\n m += 0x5000;\n\n if (*(short *)(m + 0x6c) < 0)\n *(short *)(m + 0x6c) = 0;\n }\n\n if (((((unsigned short *)(c + idx * 2 + 0x5000))[0x36] >> 2) & 1) != 0)\n {\n char *p = c + 0x53dd;\n p[idx] = 0;\n q = (unsigned char *)(p + idx);\n }\n else\n {\n char *p = c + 0x53dd;\n p[idx] = 1;\n q = (unsigned char *)(p + idx);\n }\n\n {\n int idxL = (int)(((long long)idx) & 0xFFFFFFFFFFFFFFFFLL);\n char *b = c + idxL * 2;\n b += 0x5000;\n\n if (((unsigned short *)b)[0x36] != 0)\n return;\n }\n\n *(unsigned char *)(c + idx + 0x5000 + 0x1fd) = 0;\n *q = 1;\n}\n", "source": "fanout-gpt-5.6-luna"} {"module": "ov006", "addr": "0x020f2ec0", "name": "func_ov006_020f2ec0", "size": 332, "target_hex": "00402de904d04de200c0a0e30ce0a0e10c1180e0011981e2f8e781e5d8e981e5b8eb81e50c2080e098ed81e58c3080e0052a82e2fde1c2e5ede2c2e501c08ce265e3c2e5051a83e2bce6c1e14f1c83e2bce7c1e1dde3c2e578005ce3ebffffba0030a0e100c0a0e3012983e260c682e5461c83e264c682e5bcc6c1e170c6c2e501e08ee271c6c2e510005ee3143083e2f4ffffba0020a0e100e0a0e3011982e2b4e7c1e501c08ce2b5e7c1e502005ce3182082e2f8ffffba011980e2e0e7c1e5e3e7c1e5f4e7c1e5e4e781e5e8e781e5f5e7c1e50020a0e1ece781e50030a0e303c0a0e10c1082e0051a81e201c08ce27831c1e509005ce3f9ffffba01e08ee20d005ee3092082e2f4ffffba511c80e2b436c1e18020a0e3b626c1e16020a0e3b826c1e1ba36c1e1050a80e25634c0e50110a0e35814c0e55934c0e55534c0e504d08de20040bde81eff2fe1", "lang": "c", "divergences": 10, "c_source": "#pragma opt_strength_reduction off\n\nvoid func_ov006_020f2ec0(char *c)\n{\n int i;\n char *p;\n int j;\n\n i = 0;\n do {\n *(int *)(c + i * 4 + 0x47f8) = 0;\n *(int *)(c + i * 4 + 0x49d8) = 0;\n *(int *)(c + i * 4 + 0x4bb8) = 0;\n *(int *)(c + i * 4 + 0x4d98) = 0;\n *(char *)(c + i + 0x51fd) = 0;\n *(char *)(c + i + 0x52ed) = 0;\n *(char *)(c + i + 0x5365) = 0;\n *(short *)(c + i * 2 + 0x506c) = 0;\n *(short *)(c + i * 2 + 0x4f7c) = 0;\n *(char *)(c + i + 0x53dd) = 0;\n i++;\n } while (i < 0x78);\n\n p = c;\n j = 0;\n do {\n *(int *)(p + 0x4660) = 0;\n *(int *)(p + 0x4664) = 0;\n *(short *)(p + 0x466c) = 0;\n *(char *)(p + 0x4670) = 0;\n *(char *)(p + 0x4671) = 0;\n j++;\n p += 0x14;\n } while (j < 0x10);\n\n j = 0;\n do {\n *(char *)(c + j * 0x18 + 0x47b4) = 0;\n j++;\n *(char *)(c + j * 0x18 - 0x13) = 0;\n } while (j < 2);\n\n *(char *)(c + 0x47e0) = 0;\n *(char *)(c + 0x47e3) = 0;\n *(char *)(c + 0x47f4) = 0;\n *(int *)(c + 0x47e4) = 0;\n *(int *)(c + 0x47e8) = 0;\n *(char *)(c + 0x47f5) = 0;\n *(int *)(c + 0x47ec) = 0;\n\n p = c;\n i = 0;\n j = 0;\n do {\n i = 0;\n do {\n *(char *)(p + i + 0x5178) = 0;\n i++;\n } while (i < 9);\n j++;\n p += 9;\n } while (j < 0xd);\n\n *(short *)(c + 0x5164) = 0;\n *(short *)(c + 0x5166) = 0x80;\n *(short *)(c + 0x5168) = 0x60;\n *(short *)(c + 0x516a) = 0;\n *(char *)(c + 0x5456) = 0;\n *(char *)(c + 0x5458) = 1;\n *(char *)(c + 0x5459) = 0;\n *(char *)(c + 0x5455) = 0;\n}\n", "source": "fanout-glm-5.2"} +{"module": "ov075", "addr": "0x0211bb00", "name": "__sinit_ov075_0211bb00", "size": 2588, "target_hex": "00402de90cd04de210089fe568e9ffeb0c089fe580c0a0e31030a0e304189fe504289fe5b0c0c0e1b230c0e1aa5dfdebf8079fe53c30a0e3e8179fe5f0279fe5b030c0e11030a0e3b230c0e1a25dfdebe0079fe51c30a0e3c8179fe5d8279fe5b030c0e11030a0e3b230c0e19a5dfdebc8079fe50810a0e3b010c0e11010a0e3b210c0e19c179fe5b4279fe5925dfdebb0079fe50810a0e3b010c0e11010a0e3b210c0e17c179fe59c279fe58a5dfdeb98079fe52010a0e3b010c0e11010a0e3b210c0e15c179fe584279fe5825dfdeb80079fe53010a0e3b010c0e11010a0e3b210c0e13c179fe56c279fe57a5dfdeb68079fe52010a0e3b010c0e1b210c0e120179fe558279fe5735dfdeb54079fe52810a0e3b010c0e11010a0e3b210c0e100179fe540279fe56b5dfdeb3c079fe55810a0e3b010c0e11010a0e3b210c0e1e0169fe528279fe5635dfdeb24079fe57810a0e3b010c0e11010a0e3b210c0e1c0169fe510279fe55b5dfdeb0c079fe52010a0e3b010c0e11010a0e3b210c0e1a0169fe5f8269fe5535dfdebf4069fe50a10a0e3b010c0e11010a0e3b210c0e180169fe5e0269fe54b5dfdebdc069fe50010a0e3b010c0e1b210c0e164169fe5cc269fe5445dfdeb2020a0e3c4069fe51010a0e3b020c0e1b210c0e144169fe5b4269fe53c5dfdebb0069fe51810a0e3b010c0e11010a0e3b210c0e124169fe59c269fe5345dfdeb98069fe51c10a0e3b010c0e11010a0e3b210c0e104169fe584269fe52c5dfdeb80069fe51c10a0e3b010c0e11010a0e3b210c0e1e4159fe56c269fe5245dfdeb68069fe52010a0e3b010c0e11010a0e3b210c0e1c4159fe554269fe51c5dfdeb3020a0e34c069fe51010a0e3b020c0e1b210c0e1a4159fe53c269fe5145dfdeb38069fe53010a0e3b010c0e11010a0e3b210c0e184159fe524269fe50c5dfdeb20069fe53010a0e3b010c0e11010a0e3b210c0e164159fe50c269fe5045dfdeb08069fe53010a0e3b010c0e11010a0e3b210c0e144159fe5f4259fe5fc5cfdebf0059fe51810a0e3b010c0e11010a0e3b210c0e124159fe5dc259fe5f45cfdeb2020a0e3d4059fe51010a0e3b020c0e1b210c0e104159fe5c4259fe5ec5cfdebc0059fe52010a0e3b010c0e11010a0e3b210c0e1e4149fe5ac259fe5e45cfdeba8059fe52810a0e3b010c0e11010a0e3b210c0e1c4149fe594259fe5dc5cfdeb90059fe52010a0e3b010c0e11010a0e3b210c0e1a4149fe57c259fe5d45cfdeb78059fe53010a0e3b010c0e11010a0e3b210c0e184149fe564259fe5cc5cfdeb60059fe560e59fe5001090e5040090e500108de504008de500108ee504008ee510108ee514008ee540259fe540c59fe5003092e5042092e508308ee50c208ee510108ce514008ce528359fe528259fe500e093e5043093e500e08ce504308ce5003092e5042092e508308ce50c208ce508e59fe508359fe508259fe500c093e5043093e500c08ee504308ee5003092e5042092e508308ee50c208ee5e8249fe5e8c49fe5003092e5042092e510308ee514208ee510108ce514008ce5d0349fe5d0249fe500e093e5043093e500e08ce504308ce5003092e5042092e508308ce50c208ce5b0e49fe5b0349fe5b0249fe500c093e5043093e500c08ee504308ee5003092e5042092e508308ee50c208ee590249fe590c49fe5003092e5042092e510308ee514208ee510108ce514008ce578349fe578249fe500e093e5043093e500e08ce504308ce5003092e5042092e508308ce50c208ce558e49fe558349fe558249fe500c093e5043093e500c08ee504308ee5003092e5042092e508308ee50c208ee538249fe538c49fe5003092e5042092e510308ee514208ee510108ce514008ce520349fe520249fe500e093e5043093e500e08ce504308ce5003092e5042092e508308ce50c208ce500e49fe500349fe500249fe500c093e5043093e500c08ee504308ee5003092e5042092e508308ee50c208ee5e0239fe5e0c39fe5003092e5042092e510308ee514208ee510108ce514008ce5c8339fe5c8239fe500e093e5043093e500e08ce504308ce5003092e5042092e508308ce50c208ce5a8c39fe5a8239fe500108ce504008ce510108ce514008ce5003092e5042092e508308ce50c208ce588e39fe588339fe588239fe500c093e5043093e500c08ee504308ee5003092e5042092e508308ee50c208ee568239fe568c39fe5003092e5042092e510308ee514208ee558339fe558239fe500e093e5043093e500e08ce504308ce5003092e5042092e508308ce50c208ce538239fe538e39fe5003092e5042092e510308ce514208ce528339fe528239fe500c093e5043093e500c08ee504308ee5003092e5042092e508308ee50c208ee508239fe508c39fe5003092e5042092e510308ee514208ee510108ce514008ce5f0329fe5f0229fe500e093e5043093e500e08ce504308ce5003092e5042092e508308ce50c208ce5d0e29fe5d0229fe510108ee514008ee5003092e5042092e500308ee504208ee5b8229fe5b8329fe500c092e5042092e508c08ee50c208ee5081083e50c0083e5101083e5140083e598229fe598c29fe500e092e5042092e500e083e5042083e588329fe588229fe500e093e5043093e500e08ce504308ce5003092e5042092e508308ce50c208ce568229fe568e29fe5003092e5042092e510308ce514208ce558329fe558229fe500c093e5043093e500c08ee504308ee5003092e5042092e508308ee50c208ee538229fe538329fe500c092e5101083e510c08ee5140083e5041092e524029fe514108ee5001090e5040090e5001083e5040083e510029fe5001090e5040090e5081083e50c0083e50cd08de20040bde81eff2fe11cd7110248d911028cb90302fcd511024cd91102bcd6110250d91102c8d6110254d91102e0d6110258d91102a4d611025cd91102ecd6110260d91102f8d6110264d9110210d7110268d9110298d611026cd91102c0d5110270d91102ccd5110274d91102d8d5110278d91102b0d611027cd91102e4d511022cd71102f0d5110230d711028cd6110234d7110208d6110238d7110214d611023cd7110220d6110240d711022cd6110244d7110238d6110248d7110244d611024cd7110204d7110250d7110250d6110254d711025cd6110258d71102d4d611025cd7110268d6110260d7110274d6110264d7110280d61102586b080240d81102d0c8110258d8110200c7110250c7110288d8110250c8110228c81102c8c81102a0d81102f8c61102d8c71102d0d81102c0c81102d8c8110218c7110200d91102b0c71102b8c8110218d9110278c8110260c7110280c7110268d7110210c81102e8c7110280d7110268c7110298c8110238c71102b0d71102a8c8110240c81102c8d71102b8c71102e0d7110228c7110230c8110260c8110210d8110218c8110270c7110288c8110270d8110258c8110208c8110298c71102b8d81102a8c71102c8c71102e8d81102f0c7110248c7110230d91102a0c8110298d7110258c7110240c71102a0c71102f8d7110268c8110200c8110238c8110228d8110248c8110220c81102", "lang": "c", "divergences": 10, "c_source": "#pragma opt_common_subs off\nstruct P2 { int a, b; };\nstruct P6 { struct P2 lo, hi, tail; };\n\nextern void func_ov075_021160b4(void *);\nextern void func_020731dc(void *, void *, void **);\nextern void func_0203b98c(void);\n\nextern char data_ov075_0211d71c[];\n\nextern int data_ov075_0211d5c0;\nextern int data_ov075_0211d5cc;\nextern int data_ov075_0211d5d8;\nextern int data_ov075_0211d5e4;\nextern int data_ov075_0211d5f0;\nextern int data_ov075_0211d5fc;\nextern int data_ov075_0211d608;\nextern int data_ov075_0211d614;\nextern int data_ov075_0211d620;\nextern int data_ov075_0211d62c;\nextern int data_ov075_0211d638;\nextern int data_ov075_0211d644;\nextern int data_ov075_0211d650;\nextern int data_ov075_0211d65c;\nextern int data_ov075_0211d668;\nextern int data_ov075_0211d674;\nextern int data_ov075_0211d680;\nextern int data_ov075_0211d68c;\nextern int data_ov075_0211d698;\nextern int data_ov075_0211d6a4;\nextern int data_ov075_0211d6b0;\nextern int data_ov075_0211d6bc;\nextern int data_ov075_0211d6c8;\nextern int data_ov075_0211d6d4;\nextern int data_ov075_0211d6e0;\nextern int data_ov075_0211d6ec;\nextern int data_ov075_0211d6f8;\nextern int data_ov075_0211d704;\nextern int data_ov075_0211d710;\n\nextern int data_ov075_0211d72c;\nextern int data_ov075_0211d730;\nextern int data_ov075_0211d734;\nextern int data_ov075_0211d738;\nextern int data_ov075_0211d73c;\nextern int data_ov075_0211d740;\nextern int data_ov075_0211d744;\nextern int data_ov075_0211d748;\nextern int data_ov075_0211d74c;\nextern int data_ov075_0211d750;\nextern int data_ov075_0211d754;\nextern int data_ov075_0211d758;\nextern int data_ov075_0211d75c;\nextern int data_ov075_0211d760;\nextern int data_ov075_0211d764;\n\nextern int data_ov075_0211d948;\nextern int data_ov075_0211d94c;\nextern int data_ov075_0211d950;\nextern int data_ov075_0211d954;\nextern int data_ov075_0211d958;\nextern int data_ov075_0211d95c;\nextern int data_ov075_0211d960;\nextern int data_ov075_0211d964;\nextern int data_ov075_0211d968;\nextern int data_ov075_0211d96c;\nextern int data_ov075_0211d970;\nextern int data_ov075_0211d974;\nextern int data_ov075_0211d978;\nextern int data_ov075_0211d97c;\n\nextern struct P2 data_02086b58;\nextern struct P2 data_ov075_0211c6f8;\nextern struct P2 data_ov075_0211c700;\nextern struct P2 data_ov075_0211c718;\nextern struct P2 data_ov075_0211c728;\nextern struct P2 data_ov075_0211c738;\nextern struct P2 data_ov075_0211c740;\nextern struct P2 data_ov075_0211c748;\nextern struct P2 data_ov075_0211c750;\nextern struct P2 data_ov075_0211c758;\nextern struct P2 data_ov075_0211c760;\nextern struct P2 data_ov075_0211c768;\nextern struct P2 data_ov075_0211c770;\nextern struct P2 data_ov075_0211c780;\nextern struct P2 data_ov075_0211c798;\nextern struct P2 data_ov075_0211c7a0;\nextern struct P2 data_ov075_0211c7a8;\nextern struct P2 data_ov075_0211c7b0;\nextern struct P2 data_ov075_0211c7b8;\nextern struct P2 data_ov075_0211c7c8;\nextern struct P2 data_ov075_0211c7d8;\nextern struct P2 data_ov075_0211c7e8;\nextern struct P2 data_ov075_0211c7f0;\nextern struct P2 data_ov075_0211c800;\nextern struct P2 data_ov075_0211c808;\nextern struct P2 data_ov075_0211c810;\nextern struct P2 data_ov075_0211c818;\nextern struct P2 data_ov075_0211c820;\nextern struct P2 data_ov075_0211c828;\nextern struct P2 data_ov075_0211c830;\nextern struct P2 data_ov075_0211c838;\nextern struct P2 data_ov075_0211c840;\nextern struct P2 data_ov075_0211c848;\nextern struct P2 data_ov075_0211c850;\nextern struct P2 data_ov075_0211c858;\nextern struct P2 data_ov075_0211c860;\nextern struct P2 data_ov075_0211c868;\nextern struct P2 data_ov075_0211c878;\nextern struct P2 data_ov075_0211c888;\nextern struct P2 data_ov075_0211c898;\nextern struct P2 data_ov075_0211c8a0;\nextern struct P2 data_ov075_0211c8a8;\nextern struct P2 data_ov075_0211c8b8;\nextern struct P2 data_ov075_0211c8c0;\nextern struct P2 data_ov075_0211c8c8;\nextern struct P2 data_ov075_0211c8d0;\nextern struct P2 data_ov075_0211c8d8;\n\nextern struct P6 data_ov075_0211d768;\nextern struct P6 data_ov075_0211d780;\nextern struct P6 data_ov075_0211d798;\nextern struct P6 data_ov075_0211d7b0;\nextern struct P6 data_ov075_0211d7c8;\nextern struct P6 data_ov075_0211d7e0;\nextern struct P6 data_ov075_0211d7f8;\nextern struct P6 data_ov075_0211d810;\nextern struct P6 data_ov075_0211d828;\nextern struct P6 data_ov075_0211d840;\nextern struct P6 data_ov075_0211d858;\nextern struct P6 data_ov075_0211d870;\nextern struct P6 data_ov075_0211d888;\nextern struct P6 data_ov075_0211d8a0;\nextern struct P6 data_ov075_0211d8b8;\nextern struct P6 data_ov075_0211d8d0;\nextern struct P6 data_ov075_0211d8e8;\nextern struct P6 data_ov075_0211d900;\nextern struct P6 data_ov075_0211d918;\nextern struct P6 data_ov075_0211d930;\n\nvoid __sinit_ov075_0211bb00(void)\n{\n short *p;\n struct P2 tmp;\n int ta, tb;\n\n func_ov075_021160b4(data_ov075_0211d71c);\n\n p = (short *)(&data_ov075_0211d948);\n ((short *)(&data_ov075_0211d948))[0] = 0x80;\n ((short *)(&data_ov075_0211d948))[1] = 0x10;\n func_020731dc((short *)(&data_ov075_0211d948), (void *)func_0203b98c, (void **)&data_ov075_0211d5fc);\n\n p = (short *)(&data_ov075_0211d94c); p[0] = 0x3c; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d6bc);\n p = (short *)(&data_ov075_0211d950); p[0] = 0x1c; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d6c8);\n\n p = (short *)(&data_ov075_0211d954); p[0] = 8; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d6e0);\n p = (short *)(&data_ov075_0211d958); p[0] = 8; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d6a4);\n p = (short *)(&data_ov075_0211d95c); p[0] = 0x20; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d6ec);\n p = (short *)(&data_ov075_0211d960); p[0] = 0x30; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d6f8);\n p = (short *)(&data_ov075_0211d964); p[0] = 0x20; p[1] = 0x20;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d710);\n p = (short *)(&data_ov075_0211d968); p[0] = 0x28; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d698);\n p = (short *)(&data_ov075_0211d96c); p[0] = 0x58; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d5c0);\n p = (short *)(&data_ov075_0211d970); p[0] = 0x78; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d5cc);\n p = (short *)(&data_ov075_0211d974); p[0] = 0x20; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d5d8);\n p = (short *)(&data_ov075_0211d978); p[0] = 0xa; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d6b0);\n p = (short *)(&data_ov075_0211d97c); p[0] = 0; p[1] = 0;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d5e4);\n\n {\n int sz = 0x20;\n int h = 0x10;\n ((short *)(&data_ov075_0211d72c))[0] = (short)sz;\n ((short *)(&data_ov075_0211d72c))[1] = (short)h;\n func_020731dc((short *)(&data_ov075_0211d72c), (void *)func_0203b98c, (void **)&data_ov075_0211d5f0);\n }\n\n p = (short *)(&data_ov075_0211d730); p[0] = 0x18; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d68c);\n p = (short *)(&data_ov075_0211d734); p[0] = 0x1c; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d608);\n p = (short *)(&data_ov075_0211d738); p[0] = 0x1c; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d614);\n p = (short *)(&data_ov075_0211d73c); p[0] = 0x20; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d620);\n\n {\n int sz = 0x30;\n int h = 0x10;\n ((short *)(&data_ov075_0211d740))[0] = (short)sz;\n ((short *)(&data_ov075_0211d740))[1] = (short)h;\n func_020731dc((short *)(&data_ov075_0211d740), (void *)func_0203b98c, (void **)&data_ov075_0211d62c);\n }\n\n p = (short *)(&data_ov075_0211d744); p[0] = 0x30; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d638);\n p = (short *)(&data_ov075_0211d748); p[0] = 0x30; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d644);\n p = (short *)(&data_ov075_0211d74c); p[0] = 0x30; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d704);\n p = (short *)(&data_ov075_0211d750); p[0] = 0x18; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d650);\n\n {\n int sz = 0x20;\n int h = 0x10;\n ((short *)(&data_ov075_0211d754))[0] = (short)sz;\n ((short *)(&data_ov075_0211d754))[1] = (short)h;\n func_020731dc((short *)(&data_ov075_0211d754), (void *)func_0203b98c, (void **)&data_ov075_0211d65c);\n }\n\n p = (short *)(&data_ov075_0211d758); p[0] = 0x20; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d6d4);\n p = (short *)(&data_ov075_0211d75c); p[0] = 0x28; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d668);\n p = (short *)(&data_ov075_0211d760); p[0] = 0x20; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d674);\n p = (short *)(&data_ov075_0211d764); p[0] = 0x30; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d680);\n\n tmp = data_02086b58;\n ta = tmp.a;\n tb = tmp.b;\n\n data_ov075_0211d840.lo = tmp;\n data_ov075_0211d840.tail.a = tb ? ta : ta;\n data_ov075_0211d840.tail.b = tb;\n data_ov075_0211d840.hi = data_ov075_0211c8d0;\n\n data_ov075_0211d858.tail.a = tb ? ta : ta;\n data_ov075_0211d858.tail.b = tb;\n data_ov075_0211d858.lo = data_ov075_0211c700;\n data_ov075_0211d858.hi = data_ov075_0211c750;\n\n data_ov075_0211d888.lo = data_ov075_0211c850;\n data_ov075_0211d888.hi = data_ov075_0211c828;\n data_ov075_0211d888.tail = data_ov075_0211c8c8;\n\n data_ov075_0211d8a0.tail.a = tb ? ta : ta;\n data_ov075_0211d8a0.tail.b = tb;\n data_ov075_0211d8a0.lo = data_ov075_0211c6f8;\n data_ov075_0211d8a0.hi = data_ov075_0211c7d8;\n\n data_ov075_0211d8d0.lo = data_ov075_0211c8c0;\n data_ov075_0211d8d0.hi = data_ov075_0211c8d8;\n data_ov075_0211d8d0.tail = data_ov075_0211c718;\n\n data_ov075_0211d900.tail.a = tb ? ta : ta;\n data_ov075_0211d900.tail.b = tb;\n data_ov075_0211d900.lo = data_ov075_0211c7b0;\n data_ov075_0211d900.hi = data_ov075_0211c8b8;\n\n data_ov075_0211d918.lo = data_ov075_0211c878;\n data_ov075_0211d918.hi = data_ov075_0211c760;\n data_ov075_0211d918.tail = data_ov075_0211c780;\n\n data_ov075_0211d768.tail.a = tb ? ta : ta;\n data_ov075_0211d768.tail.b = tb;\n data_ov075_0211d768.lo = data_ov075_0211c810;\n data_ov075_0211d768.hi = data_ov075_0211c7e8;\n\n data_ov075_0211d780.lo = data_ov075_0211c768;\n data_ov075_0211d780.hi = data_ov075_0211c898;\n data_ov075_0211d780.tail = data_ov075_0211c738;\n\n data_ov075_0211d7b0.tail.a = tb ? ta : ta;\n data_ov075_0211d7b0.tail.b = tb;\n data_ov075_0211d7b0.lo = data_ov075_0211c8a8;\n data_ov075_0211d7b0.hi = data_ov075_0211c840;\n\n data_ov075_0211d7c8.lo = tmp;\n data_ov075_0211d7c8.tail.a = tb ? ta : ta;\n data_ov075_0211d7c8.tail.b = tb;\n data_ov075_0211d7c8.hi = data_ov075_0211c7b8;\n\n data_ov075_0211d7e0.lo = data_ov075_0211c728;\n data_ov075_0211d7e0.hi = data_ov075_0211c830;\n data_ov075_0211d7e0.tail = data_ov075_0211c860;\n\n data_ov075_0211d810.lo = data_ov075_0211c818;\n data_ov075_0211d810.hi = data_ov075_0211c770;\n data_ov075_0211d810.tail = data_ov075_0211c888;\n\n data_ov075_0211d870.lo = data_ov075_0211c858;\n data_ov075_0211d870.hi = data_ov075_0211c808;\n data_ov075_0211d870.tail = data_ov075_0211c798;\n\n data_ov075_0211d8b8.tail.a = tb ? ta : ta;\n data_ov075_0211d8b8.tail.b = tb;\n data_ov075_0211d8b8.lo = data_ov075_0211c7a8;\n data_ov075_0211d8b8.hi = data_ov075_0211c7c8;\n\n data_ov075_0211d8e8.lo = data_ov075_0211c7f0;\n data_ov075_0211d8e8.tail.a = tb ? ta : ta;\n data_ov075_0211d8e8.tail.b = tb;\n data_ov075_0211d8e8.hi = data_ov075_0211c748;\n\n data_ov075_0211d930.hi = tmp;\n data_ov075_0211d930.tail.a = tb ? ta : ta;\n data_ov075_0211d930.tail.b = tb;\n data_ov075_0211d930.lo = data_ov075_0211c8a0;\n\n data_ov075_0211d798.lo = data_ov075_0211c758;\n data_ov075_0211d798.hi = data_ov075_0211c740;\n data_ov075_0211d798.tail = data_ov075_0211c7a0;\n\n data_ov075_0211d7f8.lo = data_ov075_0211c868;\n data_ov075_0211d7f8.hi = data_ov075_0211c800;\n data_ov075_0211d7f8.tail = data_ov075_0211c838;\n\n data_ov075_0211d828.tail.a = tb ? ta : ta;\n data_ov075_0211d828.tail.b = tb;\n data_ov075_0211d828.lo = data_ov075_0211c848;\n data_ov075_0211d828.hi = data_ov075_0211c820;\n}\n", "source": "lunavyqo-grok-build-batch6"} {"module": "arm9", "addr": "0x0205583c", "name": "func_0205583c", "size": 348, "target_hex": "00402de904d04de2cdffffeb04019fe50010a0e3001080e5fc109fe5000091e5020310e2fcffff1af0009fe50030a0e3b030c0e1e8209fe5003081e5003082e5b0c0d0e1dc209fe5dc309fe502ca8ce3b0c0c0e1b0c0d0e101ca8ce3b0c0c0e1b0c0d0e102200ce0b020c0e1b020d0e1032ac2e3102082e3b020c0e1b020d0e1032002e0b020c0e1000091e5020980e3000081e5000091e50301c0e3020180e3000081e57affffeb80009fe50030a0e37c209fe57c109fe5003080e578009fe5b020c1e174109fe5b030c0e170009fe5003081e56c109fe5b030c0e1b000d1e10300c0e3b000c1e1e4feffeb58209fe558009fe558109fe5002080e50020a0e350009fe5002081e5002080e504d08de20040bde81eff2fe104050004000600046000000410000004fdcffffffbcf000050030004ff7f00005403000456030004580300045c0300040800000480001f00a4040004a8040004ac040004", "lang": "c", "divergences": 11, "c_source": "extern void func_02055780(void);\nextern void func_020556d0(void);\nextern void func_020554bc(void);\n\nvoid func_0205583c(void)\n{\n func_02055780();\n *(volatile unsigned int *)0x4000504 = 0;\n if (!(*(volatile unsigned int *)0x4000600 & 0x8000000)) {\n *(volatile unsigned short *)0x4000060 = 0;\n *(volatile unsigned int *)0x4000600 = 0;\n *(volatile unsigned int *)0x4000010 = 0;\n *(volatile unsigned short *)0x4000060 |= 0x2000;\n *(volatile unsigned short *)0x4000060 |= 0x1000;\n *(volatile unsigned short *)0x4000060 &= 0xcffd;\n *(volatile unsigned short *)0x4000060 = (*(volatile unsigned short *)0x4000060 & ~0x3000) | 0x10;\n *(volatile unsigned short *)0x4000060 &= 0xcffb;\n *(volatile unsigned int *)0x4000600 |= 0x8000;\n *(volatile unsigned int *)0x4000600 = (*(volatile unsigned int *)0x4000600 & ~0xc0000000) | 0x80000000;\n }\n func_020556d0();\n *(volatile unsigned int *)0x4000350 = 0;\n *(volatile unsigned short *)0x4000354 = 0x7fff;\n *(volatile unsigned short *)0x4000356 = 0;\n *(volatile unsigned int *)0x4000358 = 0;\n *(volatile unsigned short *)0x400035c = 0;\n *(volatile unsigned short *)0x4000008 &= ~3;\n func_020554bc();\n *(volatile unsigned int *)0x40004a4 = 0x1f0080;\n *(volatile unsigned int *)0x40004a8 = 0;\n *(volatile unsigned int *)0x40004ac = 0;\n}\n", "source": "fanout"} {"module": "ov007", "addr": "0x020b7138", "name": "func_ov007_020b7138", "size": 360, "target_hex": "30402de904d04de240219fe50030a0e30050a0e1003082e50140a0e1befeffeb000095e5363300eb040095e5303300eb080095e52a3300eb943200eb0c0095e5101095e5dff3ffebf61900eb071900ebdc1800eb0100a0e32c1900eb003bfeebec009fe53f10a0e30f20e0e32378feebe0009fe53f10a0e30f20e0e31f78feeb0113a0e3000091e5cc209fe51f0cc0e3000081e5000092e5c0109fe51f0cc0e3000082e5b000d1e10209c0e3b000c1e1befdffeba8009fe5001090e5281091e5004081e5141095e5000090e52c1080e5a8efffeb7e1b00eb84009fe5002090e5340092e5a01092e5282092e53a20d2e5390500eb7e0100ebad2200ebb41c00ebc1fcffeb005094e554109fe5013005e2002091e5060005e2f03082e5c040a0e1180005e2c031a0e1002091e50100a0e3fc40c2e5002091e510109fe5fd30c2e5000081e504d08de23040bde81eff2fe130341002500000045010000400100004040300042c341002", "lang": "cpp", "divergences": 11, "c_source": "//cpp\nextern \"C\" {\nextern void func_ov007_020b6c54(void);\nextern void func_ov007_020c3e3c(int v);\nextern void func_ov007_020c3e2c(int v);\nextern void func_ov007_020c3e1c(int v);\nextern void func_ov007_020c3bc8(void);\nextern void func_ov007_020b4100(int a, int b);\nextern void func_ov007_020bd960(void);\nextern void func_ov007_020bd5a8(void);\nextern void func_ov007_020bd500(void);\nextern void func_ov007_020bd648(int v);\nextern void func_02045d9c(void);\nextern void _ZN3G2x18SetBlendBrightnessEPVtts(void*, int, int);\nextern void func_ov007_020b68e8(void);\nextern void func_ov007_020b30b0(void);\nextern void func_ov007_020be00c(void);\nextern void func_ov007_020b8714(int a, int b, int c);\nextern void func_ov007_020b782c(void);\nextern void func_ov007_020bfcec(void);\nextern void func_ov007_020be50c(void);\nextern void func_ov007_020b6544(void);\nextern int data_ov007_02103430;\nextern char* data_ov007_0210342c;\nvoid func_ov007_020b7138(int* p0, int* p1){\n int v;\n data_ov007_02103430 = 0;\n func_ov007_020b6c54();\n func_ov007_020c3e3c(p0[0]);\n func_ov007_020c3e2c(p0[1]);\n func_ov007_020c3e1c(p0[2]);\n func_ov007_020c3bc8();\n func_ov007_020b4100(p0[3], p0[4]);\n func_ov007_020bd960();\n func_ov007_020bd5a8();\n func_ov007_020bd500();\n func_ov007_020bd648(1);\n func_02045d9c();\n _ZN3G2x18SetBlendBrightnessEPVtts((void*)0x4000050, 0x3f, -0x10);\n _ZN3G2x18SetBlendBrightnessEPVtts((void*)0x4001050, 0x3f, -0x10);\n *(int*)0x4000000 = *(int*)0x4000000 & ~0x1f00;\n *(int*)0x4001000 = *(int*)0x4001000 & ~0x1f00;\n *(unsigned short*)0x4000304 = *(unsigned short*)0x4000304 & ~0x8000;\n func_ov007_020b68e8();\n *(*(int**)(data_ov007_0210342c + 0x28)) = (int)p1;\n *(int*)(data_ov007_0210342c + 0x2c) = p0[5];\n func_ov007_020b30b0();\n func_ov007_020be00c();\n func_ov007_020b8714(*(int*)(data_ov007_0210342c + 0x34), *(int*)(data_ov007_0210342c + 0xa0), *(unsigned char*)(*(char**)(data_ov007_0210342c + 0x28) + 0x3a));\n func_ov007_020b782c();\n func_ov007_020bfcec();\n func_ov007_020be50c();\n func_ov007_020b6544();\n v = *p1;\n *(int*)(data_ov007_0210342c + 0xf0) = v & 1;\n *(unsigned char*)(data_ov007_0210342c + 0xfc) = (v & 6) >> 1;\n *(unsigned char*)(data_ov007_0210342c + 0xfd) = (v & 0x18) >> 3;\n data_ov007_02103430 = 1;\n}\n}\n", "source": "fanout"} {"module": "ov006", "addr": "0x020d09e0", "name": "func_ov006_020d09e0", "size": 224, "target_hex": "30402de90cd04de2b0109fe50220a0e3ac009fe5002081e56912feeb0030a0e3a0209fe5021aa0e300008de200308de504308de5001061e208208de5d7b0fdeb00109de504009de508c09de50028a0e174309fe50118a0e10c08a0e1c1c903e0c21903e0c02903e001058ce1020a80e1013180e354209fe554109fe554009fe5003082e550409fe5001080e50050a0e32803d4e5000050e30100000a0400a0e11dfaffeb015085e2040055e3cb4f84e2f6ffffba0cd08de23040bde81eff2fe140040004ecb3090208f0ffffff030000c8040004ff7f0040cc04000490091402", "lang": "c", "divergences": 11, "c_source": "struct V3 { int z, y, x; };\nextern void func_020553a4(void* p);\nextern void func_0203cd80(struct V3* out, int a, int b);\nextern void func_ov006_020cf2fc(char* p);\nextern char data_0209b3ec[];\nextern char data_ov006_02140990[];\nvoid func_ov006_020d09e0(void) {\n struct V3 s;\n *(volatile int*)0x4000440 = 2;\n func_020553a4(data_0209b3ec);\n s.z = 0;\n s.y = 0;\n s.x = 0xfffff008;\n func_0203cd80(&s, -0x2000, 0xfffff008);\n *(volatile int*)0x40004c8 = (0x3ff & ((s.z << 16) >> 19)) | ((0x3ff & ((s.y << 16) >> 19)) << 10) | ((0x3ff & ((s.x << 16) >> 19)) << 20) | 0x40000000;\n *(volatile int*)0x40004cc = 0x40007fff;\n int i;\n char* p = data_ov006_02140990;\n for (i = 0; i < 4; i++) {\n if (*(unsigned char*)(p + 0x328) != 0) {\n func_ov006_020cf2fc(p);\n }\n p += 0x32c;\n }\n}\n", "source": "fanout-glm-5.2"} @@ -134,7 +140,6 @@ {"module": "arm9", "addr": "0x02030790", "name": "func_02030790", "size": 168, "target_hex": "00402de904d04de280009fe580109fe50000d0e50620a0e3002081e5000050e304d08d020040bd081eff2f010000a0e3993400eb4dffffeb58009fe50010a0e3001080e59fa4ffeb4c009fe50000d0e5000050e30800000a40009fe50000d0e5000050e30400000a34009fe5e387ffeb0400a0e3118affebb28affebeebdffeb63a4ffeb04d08de20040bde81eff2fe17827090268fc09027c2709024ce6090280b4090223010000", "lang": "c", "divergences": 13, "c_source": "extern void func_0203da2c(int v);\nextern void func_02030500(void);\nextern void func_02019a58(void);\nextern void func_02012790(int v);\nextern void _ZN5Sound22StopLoadedMusic_Layer1Ej(unsigned int v);\nextern void func_020132d8(void);\nextern void func_0201ffcc(void);\nextern void func_020199a4(void);\nextern unsigned char data_02092778;\nextern int data_0209fc68;\nextern int data_0209277c;\nextern unsigned char data_0209e64c;\nextern unsigned char data_0209b480;\n\n#pragma optimize_for_size on\n\nvoid func_02030790(void)\n{\n data_0209fc68 = 6;\n if (data_02092778 == 0)\n return;\n func_0203da2c(0);\n func_02030500();\n data_0209277c = 0;\n func_02019a58();\n if (data_0209e64c != 0 && data_0209b480 != 0) {\n func_02012790(0x123);\n _ZN5Sound22StopLoadedMusic_Layer1Ej(4);\n func_020132d8();\n func_0201ffcc();\n func_020199a4();\n }\n return;\n}\n", "source": "fanout-glm-5.2"} {"module": "ov021", "addr": "0x02111c6c", "name": "_ZN12WorkElevator13InitResourcesEv", "size": 600, "target_hex": "f04f2de964d04de200a0a0e108029fe56e17fceb04029fe59c17fceb00029fe56a17fcebfc019fe59817fcebd4008ae2e4119fe50120a0e3041091e50030e0e3c814fceb0080a0e3327e8ae2d0419fe50160a0e30050e0e3041094e50700a0e10620a0e10530a0e1be14fceb018088e2040058e3507087e2f6ffffba0010e0e30a00a0e17a1ccae5cefdffeb0a00a0e166fdffebfe28dae18c119fe57c019fe500208de504108de5041090e57c319fe5490f8ae2bb2f8ae22da1fceb70119fe5490f8ae2a79dfceb68119fe5490f8ae2a09dfceb490f8ae20a10a0e10d9dfceb0090a0e3468e8ae2527e8ae248619fe530419fe534519fe534b19fe5fe18dae10700a0e10820a0e100108de504608de5041094e50530a0e115a1fceb0700a0e10b10a0e18f9dfceb019089e2040059e3308088e2727f87e2efffffbafc109fe5520e8ae2839dfcebf4009fe5f4109fe500008ae07f9dfcebec109fe58b0e8ae27c9dfcebe4009fe5e4109fe500008ae0789dfceb524e8ae20050a0e30400a0e10a10a0e1e39cfceb015085e2040055e3724f84e2f8ffffba5c109ae514008de2401c8ae560109ae5441c8ae564109ae5481c8ae55c109ae508108de560109ae50c108de564209ae5051941e210208de50c108de5ca95fceb14008de208108de20020a0e38d95fceb0c109de514008de26c1c8ae5379cfceb000050e358009d156c0c8a1514008de2ae95fceb0100a0e364d08de2f04fbde81eff2fe1a0491102a8491102b0491102b8491102603a1102990100004893030228211102803a1102e41f1102e80600008c1f1102341f1102780a0000dc1e1102", "lang": "cpp", "divergences": 13, "c_source": "//cpp\ntypedef int s32;\ntypedef short s16;\ntypedef unsigned int u32;\ntypedef unsigned short u16;\ntypedef unsigned char u8;\n\ntypedef struct { s32 x, y, z; } Vector3;\ntypedef struct { s32 m[12]; } Matrix4x3;\ntypedef s32 Fix12;\n\nstruct SharedFilePtr { u32 data[4]; };\nstruct BMD_File;\nstruct KCL_File;\nstruct CLPS_Block;\nstruct ClsnResult;\nstruct Vector3_16;\n\nextern SharedFilePtr data_ov021_021149a0;\nextern SharedFilePtr data_ov021_021149a8;\nextern SharedFilePtr data_ov021_021149b0;\nextern SharedFilePtr data_ov021_021149b8;\nextern Matrix4x3 data_ov021_02113a60;\nextern Matrix4x3 data_ov021_02113a80;\n\nextern \"C\" {\nextern void _ZN5Model8LoadFileER13SharedFilePtr(SharedFilePtr* p);\nextern void _ZN12MeshCollider8LoadFileER13SharedFilePtr(SharedFilePtr* p);\nextern void _ZN9ModelBase7SetFileEP8BMD_Fileii(void* thiz, BMD_File* f, int a, int b);\nextern void _ZN18MovingMeshCollider7SetFileEP8KCL_FileRK9Matrix4x35Fix12IiEsR10CLPS_Block(void* thiz, KCL_File* f, const Matrix4x3* m, Fix12 fix, s16 s, CLPS_Block* clps);\nextern void func_020393d4(int* p, int v);\nextern void func_020393c4(int* p, int v);\nextern void _ZN16MeshColliderBase6EnableEP5Actor(void* thiz, void* actor);\nextern void _ZN13RaycastGroundC1Ev(void* thiz);\nextern void _ZN13RaycastGround12SetObjAndPosERK7Vector3P5Actor(void* thiz, const Vector3* pos, void* actor);\nextern int _ZN13RaycastGround10DetectClsnEv(void* thiz);\nextern void _ZN13RaycastGroundD1Ev(void* thiz);\nextern void func_ov021_02111434(void* p);\nextern void func_ov021_0211129c(void* p);\n}\n\nextern int _ZN16MeshColliderBase22UpdatePosWithTransformERS_P5ActorR10ClsnResultR7Vector3P10Vector3_16S8_;\nextern int func_ov021_02112128;\nextern int func_ov021_02111fe4;\nextern int func_ov021_02111f8c;\nextern int func_ov021_02111f34;\nextern int func_ov021_02111edc;\n\nstruct RaycastGround { char buf[0x50]; };\n\nextern \"C\" int func_ov021_02111c6c(char* sl)\n{\n int i;\n char* p;\n RaycastGround ray;\n Vector3 objPos;\n\n _ZN5Model8LoadFileER13SharedFilePtr(&data_ov021_021149a0);\n _ZN12MeshCollider8LoadFileER13SharedFilePtr(&data_ov021_021149a8);\n _ZN5Model8LoadFileER13SharedFilePtr(&data_ov021_021149b0);\n _ZN12MeshCollider8LoadFileER13SharedFilePtr(&data_ov021_021149b8);\n\n _ZN9ModelBase7SetFileEP8BMD_Fileii(sl + 0xd4, (BMD_File*)data_ov021_021149a0.data[1], 1, -1);\n\n i = 0;\n p = sl + 0x320;\n do {\n _ZN9ModelBase7SetFileEP8BMD_Fileii(p, (BMD_File*)data_ov021_021149b0.data[1], 1, -1);\n i++;\n p += 0x50;\n } while (i < 4);\n\n *(char*)(sl + 0xc7a) = -1;\n func_ov021_02111434(sl);\n func_ov021_0211129c(sl);\n\n _ZN18MovingMeshCollider7SetFileEP8KCL_FileRK9Matrix4x35Fix12IiEsR10CLPS_Block(\n sl + 0x124, (KCL_File*)data_ov021_021149a8.data[1], (Matrix4x3*)(sl + 0x2ec),\n 0x199, *(s16*)(sl + 0x8e), (CLPS_Block*)&data_ov021_02113a60);\n func_020393d4((int*)(sl + 0x124), (int)&_ZN16MeshColliderBase22UpdatePosWithTransformERS_P5ActorR10ClsnResultR7Vector3P10Vector3_16S8_);\n func_020393c4((int*)(sl + 0x124), (int)&func_ov021_02112128);\n _ZN16MeshColliderBase6EnableEP5Actor(sl + 0x124, sl);\n\n {\n char* a = sl + 0x520;\n char* b = sl + 0x460;\n for (i = 0; i < 4; i++) {\n _ZN18MovingMeshCollider7SetFileEP8KCL_FileRK9Matrix4x35Fix12IiEsR10CLPS_Block(\n a, (KCL_File*)data_ov021_021149b8.data[1], (Matrix4x3*)b,\n 0x199, *(s16*)(sl + 0x8e), (CLPS_Block*)&data_ov021_02113a80);\n func_020393d4((int*)a, (int)&_ZN16MeshColliderBase22UpdatePosWithTransformERS_P5ActorR10ClsnResultR7Vector3P10Vector3_16S8_);\n b += 0x30;\n a += 0x1c8;\n }\n }\n\n func_020393c4((int*)(sl + 0x520), (int)&func_ov021_02111fe4);\n func_020393c4((int*)(sl + 0x6e8), (int)&func_ov021_02111f8c);\n func_020393c4((int*)(sl + 0x8b0), (int)&func_ov021_02111f34);\n func_020393c4((int*)(sl + 0xa78), (int)&func_ov021_02111edc);\n\n p = sl + 0x520;\n for (i = 0; i < 4; i++) {\n _ZN16MeshColliderBase6EnableEP5Actor(p, sl);\n p += 0x1c8;\n }\n\n *(s32*)(sl + 0xc40) = *(s32*)(sl + 0x5c);\n *(s32*)(sl + 0xc44) = *(s32*)(sl + 0x60);\n *(s32*)(sl + 0xc48) = *(s32*)(sl + 0x64);\n\n objPos.x = *(s32*)(sl + 0x5c);\n objPos.y = *(s32*)(sl + 0x60);\n objPos.z = *(s32*)(sl + 0x64);\n objPos.y = objPos.y - 0x14000;\n\n _ZN13RaycastGroundC1Ev(&ray);\n _ZN13RaycastGround12SetObjAndPosERK7Vector3P5Actor(&ray, &objPos, (void*)0);\n *(s32*)(sl + 0xc6c) = objPos.y;\n if (_ZN13RaycastGround10DetectClsnEv(&ray))\n *(s32*)(sl + 0xc6c) = *(s32*)((char*)&ray + 0x44);\n _ZN13RaycastGroundD1Ev(&ray);\n\n return 1;\n}\n", "source": "fanout-glm-5.2"} {"module": "ov002", "addr": "0x020d853c", "name": "func_ov002_020d853c", "size": 192, "target_hex": "70402de90150a0e1a8109fe50060a0e1ce2a00eb000050e32300000ae226d6e5081096e50600a0e18230a0e1ff1001e20020a0e3ff4003e2d399ffeb000186e0dc0090e570209fe5501080e28400a0e1083091e5b01092e10302a0e12038a0e1010053e1040000ba010084e28000a0e1b00092e1000053e1020000da0100a0e37040bde81eff2fe15c0086e25c1085e2768cfdebfe18d6e1c38afdeb010950e30000a0b37040bdb81eff2fb10100a0e37040bde81eff2fe174051102dca51002", "lang": "cpp", "divergences": 13, "c_source": "//cpp\nstruct State;\nextern \"C\" {\nextern int _ZN6Player7IsStateERNS_5StateE(void* self, struct State* s);\nextern unsigned _ZNK6Player14GetBodyModelIDEjb(void* self, unsigned a, int b);\nextern short Vec3_HorzAngle(void* v0, void* v1);\nextern int AngleDiff(int a, int b);\nextern struct State data_ov002_02110574;\nextern unsigned short data_ov002_0210a5dc[];\nint func_ov002_020d853c(char* c, char* o) {\n if (_ZN6Player7IsStateERNS_5StateE(c, &data_ov002_02110574)) {\n int j = (*(unsigned char*)(c+0x6e2) << 1) & 0xff;\n unsigned idx = _ZNK6Player14GetBodyModelIDEjb(c, *(int*)(c+8) & 0xff, 0);\n unsigned* mp = *(unsigned**)(c + 0xdc + idx*4);\n unsigned* tbl = (unsigned*)data_ov002_0210a5dc;\n unsigned k = (((char*)mp + 0x50)[8] << 4) >> 16;\n if (k < ((unsigned short*)tbl)[j]) return 1;\n if (k <= ((unsigned short*)tbl)[j + 1]) return 1;\n {\n int d = AngleDiff(Vec3_HorzAngle(c+0x5c, o+0x5c), *(short*)(c+0x8e));\n if (d < 0x4000) return 0;\n }\n }\n return 1;\n}\n}\n", "source": "fanout-glm-5.2"} -{"module": "ov006", "addr": "0x020deed8", "name": "func_ov006_020deed8", "size": 168, "target_hex": "f04f2de90cd04de230909de501a0a0e10900a0e14276a0e14366a0e134809de5c0d0fdeb0090a0e10050e0e30040a0e36cb09fe500508de504908de50a00a0e10710a0e10620a0e10530a0e108408de51042ffeb000050e30a00000a020058e30800001a04109ae50118a0e1211ea0e1030051e304108002000091050f0ac0030109800300008105b600dae10b0050e108a08a12e6ffff1a0cd08de2f04fbde81eff2fe1ffff0000", "lang": "c", "divergences": 9, "c_source": "extern int func_02053200(int x);\nextern int func_ov004_020af770(int a0, int a1, int a2, int a3, int a4, int a5, unsigned short a6);\n\nvoid func_ov006_020deed8(int a0, void *a1, int a2, int a3, int a4, int a5)\n{\n /* 6k: lowest reg's var declared last among long-lived */\n unsigned char *sl; /* wants sl/r10 - declare early */\n int s; /* wants sb/r9 */\n int a5_local; /* wants r8 */\n int e2; /* wants r7 */\n int e3; /* wants r6 - declare last of reg group */\n int neg1, zero, lim;\n\n s = a4;\n sl = (unsigned char *)a1;\n e2 = a2 >> 12;\n e3 = a3 >> 12;\n a5_local = a5;\n s = func_02053200(s);\n neg1 = -1;\n zero = 0;\n lim = 0xffff;\n\n for (;;) {\n int r = func_ov004_020af770((int)sl, e2, e3, neg1, neg1, s, zero);\n if (r != 0) {\n if (a5_local == 2) {\n if ((unsigned)(*(int *)(sl + 4) << 0x10) >> 0x1c == 3) {\n int *p = (int *)(((int)r + 4) & 0xFFFFFFFFFFFFFFFF);\n *p = (*p & ~0xf000) | 0x4000;\n }\n }\n }\n if (*(unsigned short *)(sl + 6) == (unsigned short)lim)\n break;\n sl += 8;\n }\n}\n", "source": "lunavyqo-e7f2c-nearmiss-pr"} {"module": "arm9", "addr": "0x0201e81c", "name": "_ZN7Message30DisplayCourseNameForStarSelectEj", "size": 656, "target_hex": "10402de910d04de240129fe540229fe5013080e03c029fe50010a0e3b030c2e10010c0e5990000eb24229fe528329fe528029fe528129fe5f040d2e1003093e5002091e51c129fe584c183e000c081e5000090e5282082e2041090e5840193e7011082e0000081e0fc119fe5032080e2000081e50000a0e3002081e596f3ffebe8019fe5e8219fe50000d0e5e4119fe52030a0e3010c60e2a00f80e0c000a0e10000c2e50030c1e52fd900eb0010a0e304108de5011980e204009de5022aa0e3e6ee00ebb2d900eb0010a0e1a8019fe5022ba0e3b000cde1b000dde1d2ee00eb6c119fe594019fe5f010d1e1000051e1050000ba88019fe50010a0e30010c0e5a3d900eb013b80e2040000ea70019fe50110a0e30010c0e59dd900eb133d80e20020a0e3021c82e28200a0e1012082e2b01083e1400052e3f9ffffba0000a0e30010a0e182e9ffeb98f3ffeb24019fe50000d0e584f2ffebf4109fe51c019fe5f010d1e1000051e110d08da21040bda81eff2fa1e0009fe5e0109fe500e090e500019fe5d8209fe5fc309fe50140a0e300c092e5cc209fe500e08ee0000091e50040c3e500e082e5041090e528208ce200009ee5012082e0ac109fe5002082e00000a0e3002081e543f3ffeb9c009fe59c209fe50000d0e598109fe52030a0e3d20060e2a00f80e0c000a0e10000c2e50030c1e5dcd800eb0010a0e308108de5121b80e208009de5022ba0e393ee00eb5fd900eb092d80e20030a0e3091d83e28300a0e1013083e2b01082e1400053e3f9ffffba5df3ffeb38009fe50000d0e549f2ffeb10d08de21040bde81eff2fe196010000d4d6090260d6090208d709020cd70902fcd60902f0d60902f4d60902b0d609025cd60902a8d60902ff020000a5010000c4d6090270140000c0d60902", "lang": "cpp", "divergences": 13, "c_source": "//cpp\ntypedef unsigned char u8;\ntypedef unsigned short u16;\n\nstruct StarEntry {\n int m0;\n u16 m4;\n u8 m6;\n};\n\nextern \"C\" {\nextern short data_0209d6d4;\nextern u8 data_0209d660;\nextern StarEntry* data_0209d708;\nextern StarEntry* data_0209d6f0;\nextern int* data_0209d70c;\nextern int data_0209d6fc;\nextern volatile int data_0209d6f4;\nextern u8 data_0209d6c4;\nextern u8 data_0209d65c;\nextern u8 data_0209d6a8;\nextern u8 data_0209d6b0;\nextern u8 data_0209d6c0;\n\nvoid func_0201eaac(void);\nvoid func_0201b6f8(int a);\nint func_02054d88(void);\nvoid MultiStore_Int(int a, int b, int n);\nint func_02054fb0(void);\nvoid MultiStore16(int a, int b, int n);\nvoid SetSubBg1Offset(int a, int b);\nvoid func_0201b7cc(void);\nvoid func_0201b388(int a);\n}\n\nextern \"C\" void _ZN7Message30DisplayCourseNameForStarSelectEj(unsigned int courseID)\n{\n volatile unsigned short ls;\n volatile int li1;\n volatile int li2;\n int idx;\n int sum;\n u16* q;\n int div;\n int div2;\n\n data_0209d6d4 = (short)(courseID + 0x196);\n data_0209d660 = 0;\n func_0201eaac();\n\n idx = data_0209d6d4;\n data_0209d6f0 = (StarEntry*)((char*)data_0209d708 + idx * 8);\n sum = data_0209d6fc + 0x28 + data_0209d70c[1] + *(int*)((char*)data_0209d708 + idx * 8);\n data_0209d6f4 = sum;\n data_0209d6f4 = sum + 3;\n func_0201b6f8(0);\n\n data_0209d6a8 = (u8)((0x100 - data_0209d6b0) / 2);\n data_0209d65c = 0x20;\n\n {\n int p1 = func_02054d88() + 0x4000;\n li1 = 0;\n MultiStore_Int(li1, p1, 0x2000);\n }\n\n {\n int s1 = func_02054fb0();\n ls = 0x2ff;\n MultiStore16(ls, s1, 0x800);\n }\n\n if (data_0209d6d4 >= 0x1a5) {\n data_0209d6c4 = 0;\n q = (u16*)(func_02054fb0() + 0x400);\n } else {\n data_0209d6c4 = 1;\n q = (u16*)(func_02054fb0() + 0x4c0);\n }\n div = 0;\n do {\n q[div] = (u16)(div + 0x200);\n div++;\n } while (div < 0x40);\n\n SetSubBg1Offset(0, 0);\n func_0201b7cc();\n func_0201b388(data_0209d6a8);\n\n if (data_0209d6d4 >= 0x1a5) {\n return;\n }\n\n idx = 0x5be;\n data_0209d6c0 = 1;\n data_0209d6f0 = (StarEntry*)((char*)data_0209d708 + idx);\n data_0209d6f4 = data_0209d6fc + 0x28 + data_0209d70c[1] + *(int*)((char*)data_0209d708 + idx);\n func_0201b6f8(0);\n\n data_0209d6a8 = (u8)((0xd2 - data_0209d6b0) / 2);\n data_0209d65c = 0x20;\n\n {\n int p2 = func_02054d88() + 0x4800;\n li2 = 0;\n MultiStore_Int(li2, p2, 0x800);\n }\n\n q = (u16*)(func_02054fb0() + 0x240);\n div2 = 0;\n do {\n q[div2] = (u16)(div2 + 0x240);\n div2++;\n } while (div2 < 0x40);\n\n func_0201b7cc();\n func_0201b388(data_0209d6a8);\n}\n", "source": "fanout-glm-5.2"} {"module": "ov030", "addr": "0x02112400", "name": "func_ov030_02112400", "size": 352, "target_hex": "10402de928d04de20040a0e17bfdffeb490f84e2080efceb0400a0e1161e84e202fafbeb0400a0e1651f84e2cefeffeb0400a0e1e2fdffeb160e84e2f80afceb160e84e2e90afcebbc00d4e1430f50e30100a0030000a013000050e30e00000a0e0d84e25c1084e2dbaafcebe4109fe5010050e1330000aa840394e5601094e54b0940e2000051e12e0000da0400a0e10110a0e3430700eb2a0000ea650f84e2908cfceb000050e32600000a650f84e2718cfceb043090e5082090e504c08de200308ce504208ce50c2090e588109fe508208ce5102090e50c208ce5142090e510208ce500108de5b811d0e1b811cde1ba11d0e1ba11cde11c1090e51c108de5201090e520108de5241090e500008de224108de58c96fceb0010e0e3010050e10300000a00008de28596fceb000050e30200001a0400a0e10010a0e3190700eb00008de2fe96fceb0100a0e328d08de21040bde81eff2fe10040510068930902", "lang": "cpp", "divergences": 13, "c_source": "//cpp\ntypedef unsigned short u16;\ntypedef void* (*Vfn)();\n\nstruct Animation { void Advance(); };\nstruct CylinderClsn { void Clear(); void Update(); };\nstruct WithMeshClsn { int IsOnGround() const; };\nstruct Vector3;\n\nextern \"C\" void func_ov030_02111a00(void* c);\nextern \"C\" void func_ov030_02111f6c(char* c, WithMeshClsn* w);\nextern \"C\" void func_ov030_02111bc4(void* c);\nextern \"C\" int Vec3_Dist(const Vector3* a, const Vector3* b);\nextern \"C\" void func_ov030_021141a8(void* c, int x);\nextern \"C\" void* data_02099368[];\n\nstruct Actor {\n void UpdatePos(CylinderClsn*);\n};\n\ntypedef struct { int a, b; } P2;\nstruct ClsnResult {\n Vfn* vtb;\n P2 v;\n int a2, a3, a4;\n u16 h0, h1;\n int t0, t1, t2;\n int GetClsnID() const;\n};\nextern \"C\" ClsnResult* func_0203567c(WithMeshClsn* w);\nextern \"C\" int func_02037f44(ClsnResult* r);\nextern \"C\" void _ZN10ClsnResultD1Ev(ClsnResult* r);\n\nextern \"C\" int func_ov030_02112400(char* c)\n{\n func_ov030_02111a00(c);\n ((Animation*)(c + 0x124))->Advance();\n ((Actor*)c)->UpdatePos((CylinderClsn*)(c + 0x160));\n func_ov030_02111f6c(c, (WithMeshClsn*)(c + 0x194));\n func_ov030_02111bc4(c);\n ((CylinderClsn*)(c + 0x160))->Clear();\n ((CylinderClsn*)(c + 0x160))->Update();\n\n int b = (int)(*(u16*)(c + 0xc) == 0x10c);\n if (b != 0) {\n if (Vec3_Dist((Vector3*)(c + 0x380), (Vector3*)(c + 0x5c)) < 0x514000) {\n if (*(int*)(c + 0x60) > *(int*)(c + 0x384) - 0x12c000) {\n func_ov030_021141a8(c, 1);\n }\n }\n } else {\n if (((WithMeshClsn*)(c + 0x194))->IsOnGround()) {\n char* r = (char*)func_0203567c((WithMeshClsn*)(c + 0x194));\n ClsnResult res;\n int* d = (int*)&res.v;\n *(P2*)d = *(P2*)(r + 4);\n d[2] = *(int*)(r + 0xc);\n d[3] = *(int*)(r + 0x10);\n d[4] = *(int*)(r + 0x14);\n res.vtb = (Vfn*)data_02099368;\n res.h0 = *(u16*)(r + 0x18);\n res.h1 = *(u16*)(r + 0x1a);\n res.t0 = *(int*)(r + 0x1c);\n res.t1 = *(int*)(r + 0x20);\n res.t2 = *(int*)(r + 0x24);\n if (res.GetClsnID() != -1) {\n if (func_02037f44(&res) == 0) {\n func_ov030_021141a8(c, 0);\n }\n }\n _ZN10ClsnResultD1Ev(&res);\n }\n }\n return 1;\n}\n", "source": "fanout-glm-5.2"} {"module": "ov102", "addr": "0x02149ea4", "name": "func_ov102_02149ea4", "size": 332, "target_hex": "70402de910d04de20060a0e1b00096e5080010e20100a0130000a003000050e30600000a1c019fe50000d0e5010050e30100a0030000a013000050e30200000a0600a0e1c8fdffebe40386e5601096e5e40396e5005041e0010a55e3015aa0d3060da0e30010a0e3954083e0953123e0c52fa0e1923023e0021ba0e3011094e00000a3e22116a0e1001a81e1050985e22d4961e2a00f80e00a0a54e3c000a0e1001060e2852985e20a4aa0b3020652e30226a0b3a20f82e0b41086e54002a0e1b80086e5800096e5fe18d6e19430c2e0020ba0e3000093e02046a0e10020a2e2eb0f86e2024a84e176c7fbeb5c0096e5051985e2c001a0e1d00386e5602096e50600a0e1022842e2c221a0e1d42386e5642096e50430a0e1c221a0e1d82386e500108de504408de50f40a0e3e11f86e2eb2f86e208408de5ee1afbeb10d08de27040bde81eff2fe1d8f20902", "lang": "c", "divergences": 13, "c_source": "extern int func_ov102_02149610(char *c);\nextern void Matrix4x3_FromRotationY(void *m, int angle);\nextern void _ZN5Actor18DropShadowScaleXYZER11ShadowModelR9Matrix4x35Fix12IiES5_S5_j(\n void *self, void *shadow, void *mtx, int fix, int t1, int t2, unsigned int n);\nextern unsigned char data_0209f2d8;\n\nvoid func_ov102_02149ea4(char *c)\n{\n int r4, r5, r2v;\n int b0, b1;\n\n b0 = (*(int*)(c + 0xb0) & 8) ? 1 : 0;\n if (b0 != 0) {\n b1 = (*(volatile unsigned char *)&data_0209f2d8 == 1) ? 1 : 0;\n if (b1 == 0) goto skipcall;\n }\n *(int*)(c + 0x3e4) = func_ov102_02149610(c);\nskipcall:\n r5 = *(int*)(c + 0x60) - *(int*)(c + 0x3e4);\n if (r5 <= 0x1000) r5 = 0x1000;\n r4 = 0xb4000 - (int)(((long long)r5 * 0x180 + 0x800) >> 12);\n if (r4 < 0xa000) r4 = 0xa000;\n *(int*)(c + 0xb4) = -((r5 + 0x14000) / 2);\n r2v = r5 + 0x214000;\n if (r2v < 0x200000) r2v = 0x200000;\n *(int*)(c + 0xb8) = (int)(r2v + ((unsigned)r2v >> 31)) >> 4;\n r4 = (int)(((long long)r4 * *(int*)(c + 0x80) + 0x800) >> 12);\n Matrix4x3_FromRotationY(c + 0x3ac, *(short*)(c + 0x8e));\n *(int*)(c + 0x3d0) = *(int*)(c + 0x5c) >> 3;\n *(int*)(c + 0x3d4) = (*(int*)(c + 0x60) - 0x20000) >> 3;\n *(int*)(c + 0x3d8) = *(int*)(c + 0x64) >> 3;\n _ZN5Actor18DropShadowScaleXYZER11ShadowModelR9Matrix4x35Fix12IiES5_S5_j(\n c, c + 0x384, c + 0x3ac, r4, r5 + 0x14000, r4, 0xf);\n}", "source": "fanout-opus"} @@ -157,6 +162,7 @@ {"module": "ov002", "addr": "0x020c3dd0", "name": "_ZN6Player21St_OpeningWakeUp_MainEv", "size": 188, "target_hex": "10402de908d04de20040a0e1e316d4e5030051e301f18f90200000ea020000ea1e0000ea0f0000ea1c0000eae5ebffeb000050e31900000a0020a0e30400a0e1b410a0e3013aa0e300208de542ecffeb60009fe5001084e00000d1e5010080e20000c1e50d0000ead6ebffeb000050e30a00000a0020a0e30400a0e1b510a0e3013aa0e300208de533ecffeb24009fe5001084e00000d1e5010080e20000c1e50400a0e1d6ebffeb0100a0e308d08de21040bde81eff2fe1e3060000", "lang": "c", "divergences": 15, "c_source": "typedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef short s16;\ntypedef int s32;\ntypedef unsigned int u32;\n\nextern int _ZN6Player12FinishedAnimEv(void* thiz);\nextern void _ZN6Player7SetAnimEji5Fix12IiEj(void* thiz, int a, int b, int c, u32 d);\nextern void func_ov002_020bedd4(void* thiz);\n\nint _ZN6Player21St_OpeningWakeUp_MainEv(char* thiz)\n{\n switch (*(u8*)(thiz + 0x6e3)) {\n case 0:\n if (_ZN6Player12FinishedAnimEv(thiz)) {\n u8* p;\n _ZN6Player7SetAnimEji5Fix12IiEj(thiz, 0xb4, 0, 0x1000, 0);\n p = (u8*)(((int)thiz + 0x6e3) & 0xFFFFFFFFFFFFFFFF);\n (*p)++;\n }\n break;\n case 1:\n break;\n case 2:\n if (_ZN6Player12FinishedAnimEv(thiz)) {\n u8* p;\n _ZN6Player7SetAnimEji5Fix12IiEj(thiz, 0xb5, 0, 0x1000, 0);\n p = (u8*)(((int)thiz + 0x6e3) & 0xFFFFFFFFFFFFFFFF);\n (*p)++;\n func_ov002_020bedd4(thiz);\n }\n break;\n case 3:\n break;\n }\n\n return 1;\n}\n", "source": "fanout-gpt-5.6-luna"} {"module": "ov006", "addr": "0x02121d64", "name": "func_ov006_02121d64", "size": 416, "target_hex": "30402de91cd04de20050a0e152bbfeeb6c019fe5051a85e2002085e0000092e5010040e2000082e5900d91e5000050e31600001ac400d5e5000050e30100a003c300c505c400c5050000a003b00cc501f3cbfceb0010a0e3b011cde10010a0e1b001dde1062aa0e39de1fceb80bbfeeb10019fe50219a0e34dc2fbeb0500a0e1c2ffffeb1cd08de23040bde81eff2fe10006a0e15a1aa0e315c5fcebe8109fe5013a60e2f040d1e1e0209fe55d1c85e2940303e0f0c0d2e1f0ebd1e1d0209fe59c3024e0b2e1cde1f2cbd1e14436a0e1c0009fe5b4c1cde1b03bc1e1f020d2e1b22bc1e1d066fceb0211c0e3a8009fe5a119a0e1003085e0020b41e2f020d3e10011a0e15d0c85e2411682e0b010c3e1f23bd0e10220a0e30c10a0e300308de504208de508108de5f211dde1f421dde1f03bd0e10500a0e1c831feeb0400a0e10fc2fbeb0010a0e300108de504008de508108de50c108de5050a85e2ac0d90e50210a0e31b2ea0e30130a0e164c1fbeb051a85e2ac0d81e51cd08de23040bde81eff2fe1905d0000af0100004ce0120244e0120248e0120250e60902b25d0000", "lang": "cpp", "divergences": 15, "c_source": "//cpp\ntypedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef short s16;\n\nextern \"C\" {\n void func_ov006_020d0ac0(void);\n int func_02054d88(void);\n void MultiStore16(u16 val, char *dst, int nbytes);\n void func_ov006_020d0bd8(void);\n void func_02012718(void *a, int b);\n void func_ov006_02121cf4(char *c);\n int _ZN4cstd4fdivEii(int a, int b);\n int RandomIntInternal(int *seed);\n void func_ov004_020ae5c4(void *a, int b, int c, int d, int e, int f, int g);\n int func_020126e8(int a);\n int func_02012468(int a, int b, int c, int d, int e, int f, int g, short h);\n}\n\nextern s16 data_ov006_0212e04c;\nextern s16 data_ov006_0212e044;\nextern s16 data_ov006_0212e048;\nextern int data_0209e650;\n\nextern \"C\" void func_ov006_02121d64(char *c)\n{\n int counter;\n\n func_ov006_020d0ac0();\n *(int *)(((long long)(int)(c + 0x5d90)) & 0xFFFFFFFFFFFFFFFFLL) -= 1;\n counter = *(int *)(c + 0x5d90);\n\n if (counter == 0) {\n if (*(u8 *)(c + 0xc4) == 0) {\n *(u8 *)(c + 0xc3) = 1;\n *(u8 *)(c + 0xc4) = 1;\n *(s16 *)(c + 0xc0) = 0;\n }\n\n {\n int dst = func_02054d88();\n volatile u16 tmp = 0;\n MultiStore16(tmp, (char *)dst, 0x6000);\n }\n\n func_ov006_020d0bd8();\n func_02012718((void *)0x1af, 0x8000);\n func_ov006_02121cf4(c);\n return;\n }\n\n {\n int t = _ZN4cstd4fdivEii(counter << 12, 0x5a000);\n volatile s16 oldY = *(s16 *)(c + 0x5db0);\n volatile s16 oldZ = *(s16 *)(c + 0x5db2);\n int mixRaw = data_ov006_0212e04c * (0x1000 - t) +\n data_ov006_0212e044 * t;\n\n *(s16 *)(c + 0x5db0) = (s16)(mixRaw >> 12);\n *(s16 *)(c + 0x5db2) = data_ov006_0212e048;\n\n *(s16 *)(((long long)(int)(c + 0x5db2)) & 0xFFFFFFFFFFFFFFFFLL) +=\n ((((int)((unsigned int)(RandomIntInternal(&data_0209e650) &\n ~0x80000000) >> 19) -\n 0x800) << 2) >> 12);\n\n func_ov004_020ae5c4(c, oldY, oldZ,\n *(s16 *)(c + 0x5db0),\n *(s16 *)(c + 0x5db2), 2, 0xc);\n\n *(int *)(c + 0x5dac) =\n func_02012468(*(int *)(c + 0x5dac), 2, 0x1b0, 2, 0,\n func_020126e8(mixRaw), 0, 0);\n }\n}\n", "source": "fanout-gpt-5.6-luna"} {"module": "ov084", "addr": "0x0212a580", "name": "func_ov084_0212a580", "size": 376, "target_hex": "f0412de930d04de20040a0e1fe18d4e1e30f84e2f445fceb5c0094e5c001a0e1b00384e5600094e5c001a0e1b40384e5640094e5c001a0e1b80384e5fc08d4e1b800cde1fe08d4e1ba00cde1f009d4e1bc00cde1b00094e5010710e20100a0130000a003000050e31a00001a6d0f84e23c2cfceb000050e30b00000a1e0aa0e300008de50f00a0e304008de5801094e55000a0e3910003e00400a0e1f51f84e2e32f84e26f99fbeb0a0000ea960aa0e300008de50f00a0e304008de5801094e55000a0e3910003e00400a0e1f51f84e2e32f84e26399fbeb0000a0e31bc9a0e314008de51c008de518c08de5be18d4e17c009fe50ae0a0e34112a0e10111a0e1f11090e1b870dde1ba60dde1810e61e1003081e214308de5be18d4e1bc50dde10e208de24112a0e18110a0e1011081e28110a0e1f18090e10400a0e120108de2880e64e1004084e21c408de520308de524c08de528408de5be70cde1b061cde1b251cde1f36efbeb30d08de2f041bde81eff2fe114220802", "lang": "cpp", "divergences": 15, "c_source": "//cpp\nstruct Vector3 { int x, y, z; };\nstruct Vector3_16 { unsigned short x, y, z; };\n\nextern \"C\" {\nextern void Matrix4x3_FromRotationY(void* m, int angle);\nextern int _ZNK12WithMeshClsn10IsOnGroundEv(void* o);\nextern void _ZN5Actor19DropShadowRadHeightER11ShadowModelR9Matrix4x35Fix12IiES5_j(void* self, void* sm, void* mtx, int fix, int t, unsigned int j);\nextern short data_02082214[];\n}\n\nstruct CapEnemy {\n void UpdateCapPos(const Vector3&, const Vector3_16&);\n};\n\nextern \"C\" void func_ov084_0212a580(char* c){\n Vector3_16 s16;\n Vector3 pos;\n Vector3 arg;\n Vector3_16 arg16;\n\n Matrix4x3_FromRotationY(c + 0x38c, *(short*)(c + 0x8e));\n *(int*)(c + 0x3b0) = *(int*)(c + 0x5c) >> 3;\n *(int*)(c + 0x3b4) = *(int*)(c + 0x60) >> 3;\n *(int*)(c + 0x3b8) = *(int*)(c + 0x64) >> 3;\n s16.x = *(short*)(c + 0x8c);\n s16.y = *(short*)(c + 0x8e);\n s16.z = *(short*)(c + 0x90);\n if ((*(int*)(c + 0xb0) & 0x40000 ? 1 : 0) == 0) {\n if (_ZNK12WithMeshClsn10IsOnGroundEv(c + 0x1b4)) {\n _ZN5Actor19DropShadowRadHeightER11ShadowModelR9Matrix4x35Fix12IiES5_j(c, c + 0x3d4, c + 0x38c, *(int*)(c + 0x80) * 0x50, 0x1e000, 0xf);\n } else {\n _ZN5Actor19DropShadowRadHeightER11ShadowModelR9Matrix4x35Fix12IiES5_j(c, c + 0x3d4, c + 0x38c, *(int*)(c + 0x80) * 0x50, 0x96000, 0xf);\n }\n }\n pos.x = 0;\n pos.z = 0;\n pos.y = 0x6c000;\n pos.x += ((short*)data_02082214)[(*(unsigned short*)(c + 0x8e) >> 4) * 2] * 10;\n pos.z += ((short*)data_02082214)[(*(unsigned short*)(c + 0x8e) >> 4) * 2 + 1] * 10;\n arg.x = ((int*)&pos)[0];\n arg.y = ((int*)&pos)[1];\n arg.z = ((int*)&pos)[2];\n arg16.x = ((unsigned short*)&s16)[0];\n arg16.y = ((unsigned short*)&s16)[1];\n arg16.z = ((unsigned short*)&s16)[2];\n ((CapEnemy*)c)->UpdateCapPos(arg, arg16);\n}\n", "source": "fanout-fable"} +{"module": "ov006", "addr": "0x021173c8", "name": "func_ov006_021173c8", "size": 4288, "target_hex": "f04f2de984d04de200a0a0e1050a8ae2980990e50010a0e3e906fceb01098ae2600690e50090a0e3010050e38a02001a050a8ae2981990e5000051e3860200ca640990e51880a0e3000050e3300000da0030e0e36c0d9fe500308de5000090e50820a0e13010a0e36662feeb0930a0e100308de50100a0e304008de58000a0e30810a0e16420a0e308308de5926afeeb8558feeb0030e0e32c2d9fe500308de5000192e79010a0e3540090e50820a0e15462feeb0930a0e100308de50100a0e304008de508308de5052a8ae2642992e5a000a0e30810a0e17f6afeeb0930a0e100308de50100a0e304008de508308de5052a8ae2644992e56420a0e3940202e0e000a0e30810a0e1736afeeb188088e2019089e21400a0e3990005e00070a0e324708de530708de538708de50040e0e33000a0e320008de501b0a0e38000a0e328008de59000a0e32c008de5a000a0e334008de5e000a0e33c008de5050a8ae2600990e5050050e13e0000ba07018ae0050a80e2680990e5000050e3390000da400c9fe500408de5011087e2010190e720109de50820a0e10430a0e11962feeb280c9fe524109de5070190e724309de514008de500108de504b08de508108de528009de514209de50810a0e1426afeeb3558feebf01b9fe500408de5000191e72c109de5540090e50820a0e10430a0e10462feeb30009de507118ae000008de504008de508008de5c40b9fe530309de5000081e010008de510209de534009de5002092e50810a0e12b6afeeb38009de514109de500008de504b08de508008de510009de538309de5002090e53c009de5910202e00810a0e11f6afeeb188088e2145085e2019089e2017087e2040057e3b9ffffba051a8ae27c0991e5000050e3340000da1400a0e3990000e0601991e5000051e12f0000ba0030e0e3340b9fe500308de5000090e50820a0e13010a0e3d461feeb0030a0e300308de50100a0e304008de50810a0e18000a0e34b2fa0e308308de5006afeebf357feeb0030e0e300308de5e02a9fe59010a0e3000192e70820a0e1540090e5c261feeb0030a0e300308de504308de508308de5a000a0e30810a0e1052a8ae27c2992e5ee69feeb0030a0e300308de50100a0e304008de508308de5e000a0e30810a0e1052a8ae27c4992e54b2fa0e3940202e0e269feeb188088e2019089e2051a8ae2840991e5000050e3340000da1400a0e3990000e0601991e5000051e12f0000ba0030e0e3540a9fe500308de5000090e50820a0e13010a0e39b61feeb0030a0e300308de50100a0e304008de5302a9fe50810a0e18000a0e308308de5c769feebba57feeb0030e0e300308de5fc299fe59010a0e3000192e70820a0e1540090e58961feeb0030a0e300308de504308de508308de5a000a0e30810a0e1052a8ae2842992e5b569feeb0030a0e300308de50100a0e304008de508308de5e000a0e30810a0e1052a8ae2844992e5b0299fe5940202e0a969feeb188088e2019089e2051a8ae2800991e5000050e3340000da1400a0e3990000e0601991e5000051e12f0000ba0030e0e378099fe500308de5000090e50820a0e13010a0e36261feeb0030a0e300308de50100a0e304008de50810a0e18000a0e37d2ea0e308308de58e69feeb8157feeb0030e0e300308de518299fe59010a0e3000192e70820a0e1540090e55061feeb0030a0e300308de504308de508308de5a000a0e30810a0e1052a8ae2802992e57c69feeb0030a0e300308de50100a0e304008de508308de5e000a0e30810a0e1052a8ae2804992e57d2ea0e3940202e07069feeb188088e2019089e21400a0e3990000e00c008de53000a0e340008de54000a0e344008de57d0da0e348008de50070a0e30100a0e350008de58000a0e354008de59000a0e358008de5a000a0e360008de5e000a0e374489fe54c708de55c708de564708de50050e0e320b0a0e368008de55c089fe507118ae0000081e01c008de5000090e5000050e3760000da050a8ae2601990e50c009de5000051e1710000ba000057e30400000a010057e31600000a020057e32800000a3a0000ea00508de5040094e50b10a0e10820a0e10530a0e10661feeb00508de5040094e540109de50820a0e10530a0e10061feeb00508de5040094e544109de50820a0e10530a0e1fa60feebcc679fe5260000ea00508de5000094e50b10a0e10820a0e10530a0e1f260feeb00508de5000094e540109de50820a0e10530a0e1ec60feeb00508de5000094e544109de50820a0e10530a0e1e660feeb48609de5120000ea00508de5080094e50b10a0e10820a0e10530a0e1de60feeb00508de5080094e540109de50820a0e10530a0e1d860feeb00508de5080094e544109de50820a0e10530a0e1d260feeb30679fe54c009de54c309de500008de550009de50810a0e104008de54c009de50620a0e108008de554009de5fb68feebee56feebd4169fe500508de5000191e758109de5540090e50820a0e10530a0e1bd60feeb5c009de51c209de500008de504008de508008de560009de5002092e55c309de50810a0e1e868feeb64009de564309de500008de550009de504008de564009de508008de51c009de5001090e568009de5960102e00810a0e1db68feeb0c009de5188088e2140080e20c008de5019089e2017087e2030057e37effffba051a8ae2780991e5000050e3340000da1400a0e3990000e0601991e5000051e12f0000ba0030e0e30c069fe500308de5140090e50820a0e13010a0e38e60feeb0030a0e300308de50100a0e304008de510269fe50810a0e18000a0e308308de5ba68feebad56feeb0030e0e300308de5c8259fe59010a0e3000192e70820a0e1540090e57c60feeb0030a0e300308de504308de508308de5a000a0e30810a0e1052a8ae2782992e5a868feeb0030a0e300308de50100a0e304008de508308de5e000a0e30810a0e1052a8ae2784992e590259fe5940202e09c68feeb188088e2019089e2051a8ae2940991e5000050e3340000da1400a0e3990000e0601991e5000051e12f0000ba0030e0e358059fe500308de5000090e50820a0e13010a0e35560feeb0030a0e300308de50100a0e304008de50810a0e18000a0e37d2ea0e308308de58168feeb7456feeb0030e0e300308de5e4249fe59010a0e3000192e70820a0e1540090e54360feeb0030a0e300308de504308de508308de5a000a0e30810a0e1052a8ae2942992e56f68feeb0030a0e300308de50100a0e304008de508308de5e000a0e30810a0e1052a8ae2944992e57d2ea0e3940202e06368feeb188088e2019089e21400a0e3990001e0050a8ae2600990e5010050e1210000ba08009ae5ff0010e20700001a0030e0e378049fe500308de5000090e50820a0e14010a0e31c60feeb060000ea0030e0e35c049fe500308de5000090e50820a0e14010a0e31460feeb8f57feeb0030a0e30020a0e100308de50100a0e304008de50810a0e1e000a0e308308de53f68feeb050a8ae2601990e5019089e2460f51e3461fa0b3601980b501098ae2600690e5010050e31500001a050a8ae2600990e54b0f50e3110000ba070059e3040000ba0a00a0e18010a0e3a820a0e3e563feeb0a0000ea060059e30400001a0a00a0e1e010a0e3a820a0e3de63feeb030000ea0a00a0e1e010a0e3a020a0e3d963feeb08009ae5ff0010e20300001a050a8ae25c09d0e5000050e30100001a0a00a0e131f3ffeb5c57feeb0610a0e30167feeb7057feebe466feeb0090a0e36c908de570908de574908de57c908de578908de50050e0e34c439fe54c039fe509118ae000b081e000209be5000052e3510000da38039fe5000081e018008de5000090e5020050e33f0000ba6c009de589118ae000008de504008de508008de510039fe50530a0e1007081e008039fe5006081e0000096e5001097e54006a0e1100040e24116a0e1ed67feebdc029fe509118ae0002091e770809de5000052e30400000a0210a0e1910482e0a221b0e1018088e2faffff1ad555feeb00508de56c129fe5002097e5000191e7001096e5540090e54116a0e1881181e0081041e20530a0e14226a0e1a05ffeeb00309be574009de5000053e30400000a0320a0e1921483e0a331b0e1010080e2faffff1a78109de50530a0e100108de504108de508108de5002096e5001097e54226a0e1800182e018209de5080080e2002092e54116a0e1be67feeb0b0000ea7c009de500008de504008de508008de589018ae0010980e2cc1790e5c83790e54116a0e14306a0e10530a0e1b167feeb019089e2050059e3a4ffffba0040a0e3ec719fe5ec519fe50480a0e10290a0e30060e0e304008ae0010980e20408d0e5010050e31200001a04018ae0010980e2142890e50630a0e19512c0e0c000a0e1a21fa0e1000081e084118ae0030050e300808de5011981e20900a0c1582891e554b891e5000197e74b16a0e14226a0e15b5ffeeb014084e2100054e3e4ffffba050a8ae2585990e50000a0e3000055e30b0000da60319fe5a51fa0e19325c4e0044085e04442a0e150319fe5044081e09314c2e0014045e00f0054e30100a0c3030000ea01198ae2841791e5000051e30100a0c308109ae5ff1011e20800001a0020a0e318119fe500208de5000191e71810a0e38f20e0e30030e0e3385ffeeb070000ea0020a0e3f8109fe500208de5000191e71810a0e38f20e0e30030e0e32f5ffeeb050a8ae2585990e50000a0e3000055e30b0000dabc309fe5a51fa0e19325c4e0044085e04442a0e1ac309fe5044081e09314c2e0014045e00f0054e30100a0c3030000ea01198ae2881791e5000051e30100a0c308109ae5ff1011e22100001a0030e0e374109fe500308de5000191e7e810a0e38f20e0e3105ffeeb200000eae08a1302b8ec1302fced1202685900005c761302787a1302b80b00006c7a13020c7a1302885900008813000010270000e0821302d08b1302f48b1302cdcccccc8c470000a0470000cc470000c8470000607a130267666666898888881e000000408a1302888a13020030e0e310101fe500308de5000191e7e810a0e38f20e0e3ee5efeeb01598ae2740695e50040a0e3000050e3090000da04018ae0010980e2400790e5001090e5041091e531ff2fe1740695e5014084e2000054e1f5ffffba01098ae2780790e5000050e30200000a001090e5041091e531ff2fe101598ae2680695e50040a0e3000050e3090000da04018ae0010980e2880690e5001090e5041091e531ff2fe1680695e5014084e2000054e1f5ffffba01598ae26c0695e50040a0e3000050e3090000da04018ae0010980e2200790e5001090e5041091e531ff2fe16c0695e5014084e2000054e1f5ffffba01598ae2700695e50040a0e3000050e3090000da04018ae0010980e2bc0690e5001090e5041091e531ff2fe1700695e5014084e2000054e1f5ffffba01598ae2780695e50040a0e3000050e3090000da04018ae0010980e24c0790e5001090e5041091e531ff2fe1780695e5014084e2000054e1f5ffffba01598ae27c0695e50040a0e3000050e3090000da04018ae0010980e2640790e5001090e5041091e531ff2fe17c0695e5014084e2000054e1f5ffffba01598ae2800695e50040a0e3000050e3090000da04018ae0010980e2700790e5001090e5041091e531ff2fe1800695e5014084e2000054e1f5ffffba01098ae2840690e5001090e5041091e531ff2fe101098ae27c0790e5000050e30200000a001090e5041091e531ff2fe101098ae2800790e5000050e30200000a001090e5041091e531ff2fe101498ae2680694e50050a0e3000050e3070000da05018ae0010980e2880690e5f3edffeb680694e5015085e2000055e1f7ffffba08009ae5ff0010e20500001a050a8ae25c09d0e5000050e30100000a0a00a0e1a5f1ffeb0100a0e384d08de2f04fbde81eff2fe1", "lang": "cpp", "divergences": 15, "c_source": "//cpp\n// NONMATCHING: 18/1072 words differ (div=18), all mwccarm spill-SLOT ORDERING internals.\n// Loop 2's digit-count reload (was the 3-word split add-#0x4000 cluster) is FIXED: the\n// inner-placement u64 launder ((int)g + sb*4 + 0x478c) & 0xFFFFFFFFFFFFFFFFLL forces the\n// pooled-constant register-offset form ldr r2,[r1,r0] the ROM has. Remaining 18 words are\n// ONE web mis-sorted in the spill-slot allocator: loop C's pcnt should take sp+0x10 (before\n// val at 0x14, tags at 0x20-0x3c) but lands at 0x2c wedged among the hoisted tag constants,\n// shifting z1/t0/t1/t2 down 4 bytes and loop G's pcnt2 from 0x1c to 0x14. Slot ORDER proved\n// invariant under ~35 lever attempts: decl/assignment order+scope (block/outer/function),\n// launder spelling (inner/outer/unsigned/~0LL), identity merge/rename, subscript/int-addr/\n// block-temp/volatile/register forms, dead extra defs, named-vs-literal tag constants,\n// opt_lifetimes/dead_assignments/loop_invariants/unroll_loops pragmas (same or worse).\n// decomp-permuter cannot attack this class: its scorer normalizes sp offsets (scores 0).\n// Note: loop C literal constants and a C99 fn-ptr vtable emulation both compile to the\n// IDENTICAL bytes as the named-tag //cpp virtual version (frontend-invariant residual).\n// func_ov006_021173c8 @ 0x021173c8 size 0x10c0 (ov006), mwccarm 1.2/sp2p3.\n\n#pragma opt_common_subs off\n#pragma opt_strength_reduction off\n\nstruct DispObj {\n virtual void f0();\n virtual void f1();\n};\n\nextern \"C\" {\nvoid func_02018f8c(void *p, int a);\nvoid func_ov004_020afdd0(int a0, int a1, int a2, int a3, int a4);\nvoid func_ov004_020b1ea4(int a0, int a1, int a2, int a3, int a4, int a5, int a6);\nint func_ov004_020ad674(void);\nint func_ov004_020adbc0(void);\nint func_ov004_020adc1c(void);\nvoid func_ov004_020b1a5c(int a0, int a1);\nint func_ov004_020b19f0(void *self);\nvoid func_ov004_020b0d8c(void *c, int a1, int a2);\nvoid func_ov006_02114b10(void *self);\nvoid func_ov006_02113c14(void *self);\n\nextern int data_ov006_02138ae0[];\nextern char *data_ov006_0213ecb8[];\nextern int data_ov006_0212edfc[];\nextern int data_ov006_0213765c[];\nextern int data_ov006_02137a78[];\nextern int data_ov006_02137a6c[];\nextern int data_ov006_021382e0[];\nextern int data_ov006_02138bd0[];\nextern int data_ov006_02138bf4[];\nextern int data_ov006_02137a0c[];\nextern int data_ov006_02137a60[];\nextern int data_ov006_02138a40[];\nextern int data_ov006_02138a88[];\n}\n\n#define I(off) (*(int *)(g + (off)))\n#define UC(off) (*(unsigned char *)(g + (off)))\n#define LP(e) ((int *)(((long long)(int)(e)) & 0xFFFFFFFFFFFFFFFFLL))\n\nextern \"C\" int func_ov006_021173c8(void *this_)\n{\n char *g = (char *)this_;\n int col;\n int xpos;\n int r7;\n int limit;\n int i;\n int j;\n int limG;\n int *pcnt;\n int *pcnt2;\n int val;\n\n func_02018f8c(*(void **)(g + 0x5998), 0);\n col = 0;\n\n if (I(0x4660) == 1 && I(0x5998) <= 0) {\n xpos = 0x18;\n\n /* Block B: row 0 */\n if (I(0x5964) > 0) {\n func_ov004_020afdd0(data_ov006_02138ae0[0], 0x30, xpos, -1, -1);\n func_ov004_020b1ea4(0x80, xpos, 0x64, 0, 0, 1, 0);\n i = func_ov004_020ad674();\n func_ov004_020afdd0(*(int *)(data_ov006_0213ecb8[i] + 0x54), 0x90, xpos, -1, -1);\n func_ov004_020b1ea4(0xa0, xpos, I(0x5964), 0, 0, 1, 0);\n func_ov004_020b1ea4(0xe0, xpos, I(0x5964) * 0x64, 0, 0, 1, 0);\n xpos += 0x18;\n col++;\n }\n\n /* Loop C: rows 1..4 */\n limit = col * 0x14;\n for (r7 = 0; r7 < 4; r7++) {\n if (I(0x5960) >= limit && *(int *)(g + r7 * 4 + 0x5968) > 0) {\n func_ov004_020afdd0(data_ov006_02138ae0[r7 + 1], 0x30, xpos, -1, -1);\n val = data_ov006_0212edfc[r7];\n func_ov004_020b1ea4(0x80, xpos, val, 0, 0, 1, 0);\n i = func_ov004_020ad674();\n func_ov004_020afdd0(*(int *)(data_ov006_0213ecb8[i] + 0x54), 0x90, xpos, -1, -1);\n pcnt = (int *)(((long long)(int)(g + r7 * 4 + 0x5968)) & 0xFFFFFFFFFFFFFFFFLL);\n func_ov004_020b1ea4(0xa0, xpos, *pcnt, 0, 0, 0, 0);\n func_ov004_020b1ea4(0xe0, xpos, val * *pcnt, 0, 0, 1, 0);\n xpos += 0x18;\n limit += 0x14;\n col++;\n }\n }\n\n /* Block D */\n if (I(0x597c) > 0 && I(0x5960) >= col * 0x14) {\n func_ov004_020afdd0(data_ov006_0213765c[0], 0x30, xpos, -1, -1);\n func_ov004_020b1ea4(0x80, xpos, 0x12c, 0, 0, 1, 0);\n i = func_ov004_020ad674();\n func_ov004_020afdd0(*(int *)(data_ov006_0213ecb8[i] + 0x54), 0x90, xpos, -1, -1);\n func_ov004_020b1ea4(0xa0, xpos, I(0x597c), 0, 0, 0, 0);\n func_ov004_020b1ea4(0xe0, xpos, I(0x597c) * 0x12c, 0, 0, 1, 0);\n xpos += 0x18;\n col++;\n }\n\n /* Block E */\n if (I(0x5984) > 0 && I(0x5960) >= col * 0x14) {\n func_ov004_020afdd0(data_ov006_02137a78[0], 0x30, xpos, -1, -1);\n func_ov004_020b1ea4(0x80, xpos, 0xbb8, 0, 0, 1, 0);\n i = func_ov004_020ad674();\n func_ov004_020afdd0(*(int *)(data_ov006_0213ecb8[i] + 0x54), 0x90, xpos, -1, -1);\n func_ov004_020b1ea4(0xa0, xpos, I(0x5984), 0, 0, 0, 0);\n func_ov004_020b1ea4(0xe0, xpos, I(0x5984) * 0xbb8, 0, 0, 1, 0);\n xpos += 0x18;\n col++;\n }\n\n /* Block F */\n if (I(0x5980) > 0 && I(0x5960) >= col * 0x14) {\n func_ov004_020afdd0(data_ov006_02137a6c[0], 0x30, xpos, -1, -1);\n func_ov004_020b1ea4(0x80, xpos, 0x7d0, 0, 0, 1, 0);\n i = func_ov004_020ad674();\n func_ov004_020afdd0(*(int *)(data_ov006_0213ecb8[i] + 0x54), 0x90, xpos, -1, -1);\n func_ov004_020b1ea4(0xa0, xpos, I(0x5980), 0, 0, 0, 0);\n func_ov004_020b1ea4(0xe0, xpos, I(0x5980) * 0x7d0, 0, 0, 1, 0);\n xpos += 0x18;\n col++;\n }\n\n /* Loop G: rows with per-row multiplier */\n limG = col * 0x14;\n for (j = 0; j < 3; j++) {\n pcnt2 = (int *)(((long long)(int)(g + j * 4 + 0x5988)) & 0xFFFFFFFFFFFFFFFFLL);\n if (*pcnt2 > 0 && I(0x5960) >= limG) {\n int mult;\n switch (j) {\n case 0:\n func_ov004_020afdd0(data_ov006_02137a0c[1], 0x20, xpos, -1, -1);\n func_ov004_020afdd0(data_ov006_02137a0c[1], 0x30, xpos, -1, -1);\n func_ov004_020afdd0(data_ov006_02137a0c[1], 0x40, xpos, -1, -1);\n mult = 5000;\n break;\n case 1:\n func_ov004_020afdd0(data_ov006_02137a0c[0], 0x20, xpos, -1, -1);\n func_ov004_020afdd0(data_ov006_02137a0c[0], 0x30, xpos, -1, -1);\n func_ov004_020afdd0(data_ov006_02137a0c[0], 0x40, xpos, -1, -1);\n mult = 8000;\n break;\n case 2:\n func_ov004_020afdd0(data_ov006_02137a0c[2], 0x20, xpos, -1, -1);\n func_ov004_020afdd0(data_ov006_02137a0c[2], 0x30, xpos, -1, -1);\n func_ov004_020afdd0(data_ov006_02137a0c[2], 0x40, xpos, -1, -1);\n mult = 10000;\n break;\n }\n func_ov004_020b1ea4(0x80, xpos, mult, 0, 0, 1, 0);\n i = func_ov004_020ad674();\n func_ov004_020afdd0(*(int *)(data_ov006_0213ecb8[i] + 0x54), 0x90, xpos, -1, -1);\n func_ov004_020b1ea4(0xa0, xpos, *pcnt2, 0, 0, 0, 0);\n func_ov004_020b1ea4(0xe0, xpos, mult * *pcnt2, 0, 0, 1, 0);\n xpos += 0x18;\n limG += 0x14;\n col++;\n }\n }\n\n /* Block H */\n if (I(0x5978) > 0 && I(0x5960) >= col * 0x14) {\n func_ov004_020afdd0(data_ov006_02138ae0[5], 0x30, xpos, -1, -1);\n func_ov004_020b1ea4(0x80, xpos, 0x2710, 0, 0, 1, 0);\n i = func_ov004_020ad674();\n func_ov004_020afdd0(*(int *)(data_ov006_0213ecb8[i] + 0x54), 0x90, xpos, -1, -1);\n func_ov004_020b1ea4(0xa0, xpos, I(0x5978), 0, 0, 0, 0);\n func_ov004_020b1ea4(0xe0, xpos, I(0x5978) * 0x2710, 0, 0, 1, 0);\n xpos += 0x18;\n col++;\n }\n\n /* Block I */\n if (I(0x5994) > 0 && I(0x5960) >= col * 0x14) {\n func_ov004_020afdd0(data_ov006_021382e0[0], 0x30, xpos, -1, -1);\n func_ov004_020b1ea4(0x80, xpos, 0x7d0, 0, 0, 1, 0);\n i = func_ov004_020ad674();\n func_ov004_020afdd0(*(int *)(data_ov006_0213ecb8[i] + 0x54), 0x90, xpos, -1, -1);\n func_ov004_020b1ea4(0xa0, xpos, I(0x5994), 0, 0, 0, 0);\n func_ov004_020b1ea4(0xe0, xpos, I(0x5994) * 0x7d0, 0, 0, 1, 0);\n xpos += 0x18;\n col++;\n }\n\n /* Block J: timer */\n if (I(0x5960) >= col * 0x14) {\n if ((I(8) & 0xff) == 0)\n func_ov004_020afdd0(data_ov006_02138bd0[0], 0x40, xpos, -1, -1);\n else\n func_ov004_020afdd0(data_ov006_02138bf4[0], 0x40, xpos, -1, -1);\n func_ov004_020b1ea4(0xe0, xpos, func_ov004_020adbc0(), 0, 0, 1, 0);\n col++;\n if (I(0x5960) < 0x118)\n I(0x5960) = 0x118;\n }\n\n /* Block K */\n if (I(0x4660) == 1 && I(0x5960) >= 0x12c) {\n if (col >= 7)\n func_ov004_020b0d8c(g, 0x80, 0xa8);\n else if (col == 6)\n func_ov004_020b0d8c(g, 0xe0, 0xa8);\n else\n func_ov004_020b0d8c(g, 0xe0, 0xa0);\n }\n }\n\n /* merge */\n if ((I(8) & 0xff) != 0 || UC(0x595c) == 0)\n func_ov006_02114b10(g);\n\n /* Section 2 */\n func_ov004_020b1a5c(func_ov004_020adbc0(), 6);\n func_ov004_020b19f0((void *)func_ov004_020adc1c());\n\n /* Loop 2: item list (sb reused as index) */\n {\n int sb;\n for (sb = 0; sb < 5; sb++) {\n int *pcnt = LP(g + sb * 4 + 0x478c);\n int cnt = *pcnt;\n if (cnt > 0) {\n int *pmode = LP(g + sb * 4 + 0x47a0);\n int mode = *pmode;\n if (mode >= 2) {\n unsigned int u;\n int nd;\n int *py = LP(g + sb * 8 + 0x47cc);\n int *px = LP(g + sb * 8 + 0x47c8);\n func_ov004_020b1ea4((*px >> 12) - 0x10, *py >> 12, cnt, -1, 0, 0, 0);\n nd = 0;\n u = (unsigned int)*(int *)(((int)g + sb * 4 + 0x478c) & 0xFFFFFFFFFFFFFFFFLL);\n if (u != 0) {\n do {\n u /= 10;\n nd++;\n } while (u != 0);\n }\n i = func_ov004_020ad674();\n func_ov004_020afdd0(*(int *)(data_ov006_0213ecb8[i] + 0x54),\n (*px >> 12) + nd * 8 - 8, *py >> 12, -1, -1);\n nd = 0;\n u = (unsigned int)*pcnt;\n if (u != 0) {\n do {\n u /= 10;\n nd++;\n } while (u != 0);\n }\n func_ov004_020b1ea4((*px >> 12) + nd * 8 + 8, *py >> 12, *pmode, -1, 0, 0, 0);\n } else {\n int y = *(int *)(g + sb * 8 + 0x47cc);\n int x = *(int *)(g + sb * 8 + 0x47c8);\n func_ov004_020b1ea4(x >> 12, y >> 12, cnt, -1, 0, 0, 0);\n }\n }\n }\n }\n\n /* Loop 3: 16 slots */\n {\n int r4;\n int two = 2, neg = -1, zero = 0;\n for (r4 = 0; r4 < 0x10; r4++) {\n if (*(unsigned char *)(g + r4 + 0x4804) == 1) {\n int idx = *(int *)(g + r4 * 4 + 0x4814) / 5;\n if (idx > 3)\n idx = two;\n func_ov004_020afdd0(data_ov006_02137a60[idx],\n *(int *)(g + r4 * 8 + 0x4854) >> 12,\n *(int *)(g + r4 * 8 + 0x4858) >> 12, neg, zero);\n }\n }\n }\n\n /* Block M */\n {\n int v = I(0x5958);\n int flag = 0;\n if (v > 0) {\n if (v % 30 > 0xf)\n flag = 1;\n } else {\n if (I(0x4784) > 0)\n flag = 1;\n }\n if ((I(8) & 0xff) == 0)\n func_ov004_020afdd0(data_ov006_02138a40[flag], 0x18, -0x90, -1, 0);\n else\n func_ov004_020afdd0(data_ov006_02138a88[flag], 0x18, -0x90, -1, 0);\n }\n\n /* Block N */\n {\n int v = I(0x5958);\n int flag = 0;\n if (v > 0) {\n if (v % 30 > 0xf)\n flag = 1;\n } else {\n if (I(0x4788) > 0)\n flag = 1;\n }\n if ((I(8) & 0xff) == 0)\n func_ov004_020afdd0(data_ov006_02138a40[flag], 0xe8, -0x90, -1, -1);\n else\n func_ov004_020afdd0(data_ov006_02138a88[flag], 0xe8, -0x90, -1, -1);\n }\n\n /* Dispatch loops */\n {\n int r4;\n for (r4 = 0; r4 < I(0x4674); r4++)\n ((DispObj *)*(void **)(g + r4 * 4 + 0x4740))->f1();\n }\n if (*(void **)(g + 0x4778) != 0)\n ((DispObj *)*(void **)(g + 0x4778))->f1();\n {\n int r4;\n for (r4 = 0; r4 < I(0x4668); r4++)\n ((DispObj *)*(void **)(g + r4 * 4 + 0x4688))->f1();\n }\n {\n int r4;\n for (r4 = 0; r4 < I(0x466c); r4++)\n ((DispObj *)*(void **)(g + r4 * 4 + 0x4720))->f1();\n }\n {\n int r4;\n for (r4 = 0; r4 < I(0x4670); r4++)\n ((DispObj *)*(void **)(g + r4 * 4 + 0x46bc))->f1();\n }\n {\n int r4;\n for (r4 = 0; r4 < I(0x4678); r4++)\n ((DispObj *)*(void **)(g + r4 * 4 + 0x474c))->f1();\n }\n {\n int r4;\n for (r4 = 0; r4 < I(0x467c); r4++)\n ((DispObj *)*(void **)(g + r4 * 4 + 0x4764))->f1();\n }\n {\n int r4;\n for (r4 = 0; r4 < I(0x4680); r4++)\n ((DispObj *)*(void **)(g + r4 * 4 + 0x4770))->f1();\n }\n ((DispObj *)*(void **)(g + 0x4684))->f1();\n if (*(void **)(g + 0x477c) != 0)\n ((DispObj *)*(void **)(g + 0x477c))->f1();\n if (*(void **)(g + 0x4780) != 0)\n ((DispObj *)*(void **)(g + 0x4780))->f1();\n {\n int r5;\n for (r5 = 0; r5 < I(0x4668); r5++)\n func_ov006_02113c14(*(void **)(g + r5 * 4 + 0x4688));\n }\n\n if ((I(8) & 0xff) == 0 && UC(0x595c) != 0)\n func_ov006_02114b10(g);\n\n return 1;\n}\n", "source": "lunavyqo-e7f2c-nearmiss-pr"} {"module": "ov002", "addr": "0x020b91fc", "name": "func_ov002_020b91fc", "size": 188, "target_hex": "10402de918d04de20040a0e1081094e59c009fe5000051e11100000a94009fe5000084e0eb06feeb000050e30c00001ab01094e5010711e20100a0130000a003000050e30600001a020811e20100a0130000a003000050e30100001a0400a0e17029feeb601094e5642094e55c0094e5821a81e20c008de510108de514208de500208de50000a0e304008de508008de5c40394e50c209de510309de5411fa0e3b7a6fdebc40384e518d08de21040bde81eff2fe1ffff0000ca030000", "lang": "c", "divergences": 16, "c_source": "typedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef short s16;\ntypedef int s32;\ntypedef unsigned int u32;\n\nstruct Vector3_16f;\nstruct Callback;\nextern u8 DecIfAbove0_Byte(u8* p);\nextern void _ZN9ActorBase18MarkForDestructionEv(void* p);\nextern void* _ZN8Particle6System3NewEjj5Fix12IiES2_S2_PK11Vector3_16fPNS_8CallbackE(\n u32 id, u32 a, int x, int y, int z, const struct Vector3_16f* rot, struct Callback* cb);\n\nvoid func_ov002_020b91fc(char* c)\n{\n int f;\n int x, y, z;\n\n do {\n if (*(int*)(c + 8) == 0xffff) break;\n if (DecIfAbove0_Byte((u8*)(c + 0x3ca)) != 0) break;\n f = *(int*)(c + 0xb0);\n if ((int)((f & 0x40000) != 0) != 0) break;\n if ((int)((f & 0x20000) != 0) != 0) break;\n _ZN9ActorBase18MarkForDestructionEv(c);\n } while (0);\n\n y = *(int*)(c + 0x60);\n z = *(int*)(c + 0x64);\n x = *(int*)(c + 0x5c);\n y = y + 0x82000;\n *(void**)(c + 0x3c4) = _ZN8Particle6System3NewEjj5Fix12IiES2_S2_PK11Vector3_16fPNS_8CallbackE(\n *(u32*)(c + 0x3c4), 0x104,\n x, y, z,\n 0, 0);\n}\n", "source": "grindD-2026-06-22"} {"module": "ov006", "addr": "0x02124fd8", "name": "func_ov006_02124fd8", "size": 268, "target_hex": "f04f2de914d04de204008de5510c80e2f80cd0e100b0a0e30b90a0e1000050e3280000dad0109fe504009de5cc209fe5018080e0027080e00100a0e308008de50608a0e30cb08de5026ca0e310008de5025ba0e30148a0e3a4009fe500608de5091190e70800a0e10520a0e10430a0e13f58fceb000050e308a09d0510109de50700a0e10520a0e10430a0e10ca09d1500608de53658fceb000050e30100001a00005ae301b08b1204009de5019089e2510c80e2f80cd0e1088088e2087087e2000059e1e3ffffba02005be314d08db2f04fbdb81eff2fb128109fe504009de5011080e0000091e5010080e2000081e514d08de2f04fbde81eff2fe1a8510000ac51000044fd1302b8510000", "lang": "c", "divergences": 16, "c_source": "extern int Math_Function_0203b14c(void *p, int a, int b, int c, int d);\nextern int data_ov006_0213fd44[];\n\nvoid func_ov006_02124fd8(char *c)\n{\n int i;\n int fp;\n int sl;\n char *p;\n char *q;\n\n fp = 0;\n p = c + 0x51a8;\n q = c + 0x51ac;\n for (i = 0; i < *(short *)(c + 0x51c8); i++)\n {\n if (Math_Function_0203b14c(p, data_ov006_0213fd44[i], 0x800, 0x10000, 0x200) == 0)\n sl = 1;\n else\n sl = 0;\n\n if (Math_Function_0203b14c(q, 0x60000, 0x800, 0x10000, 0x200) == 0)\n {\n if (sl != 0)\n fp++;\n }\n p += 8;\n q += 8;\n }\n\n if (fp >= 2)\n (*(int *)(c + 0x51b8))++;\n}\n", "source": "fanout"} {"module": "ov006", "addr": "0x02101088", "name": "func_ov006_02101088", "size": 192, "target_hex": "10402de9ac209fe5013380e0024080e005ca83e201e394e76c329ce50123a0e103308ee0013384e764e29ce580329ce503304ee04336a0e1400053e3080000ba6cc29ce5010a5ce30c0000ba68c09fe50ce080e002c09ee701cc4ce202c08ee7060000ea6cc29ce501095ce348c09fd50ce080d002c09ed702cc8cd202c08ed7600053e31040bdb81eff2fb1011380e0520c81e21020a0e3b229c0e1050a81e20010a0e36c1280e50b10a0e39612c0e51040bde81eff2fe1645200006c520000", "lang": "c", "divergences": 16, "c_source": "void func_ov006_02101088(char *p, int i)\n{\n char *q = p + 0x5264;\n char *b = p + (i << 6) + 0x5000;\n int t = (i << 6) & 0xFFFFFFFFFFFFFFFFLL;\n int v = *(int *)(q + (i << 6));\n int d;\n *(int *)(q + (i << 6)) = v + *(int *)(b + 0x26c);\n d = (*(int *)(b + 0x264) - *(int *)(b + 0x280)) >> 12;\n if (d >= 0x40)\n {\n if (*(int *)(b + 0x26c) >= 0x1000)\n {\n *(int *)(p + 0x526c + t) -= 0x100;\n }\n }\n else if (*(int *)(b + 0x26c) <= 0x4000)\n {\n *(int *)(p + 0x526c + t) += 0x200;\n }\n if (d < 0x60)\n {\n return;\n }\n *(unsigned short *)(p + ((unsigned int)i << 6) + 0x5292) = 0x10;\n *(int *)(p + ((unsigned int)i << 6) + 0x526c) = 0;\n *(unsigned char *)(p + ((unsigned int)i << 6) + 0x5296) = 0xb;\n}\n", "source": "backlog-2026-07-11"} @@ -168,7 +174,6 @@ {"module": "ov002", "addr": "0x020ce798", "name": "func_ov002_020ce798", "size": 292, "target_hex": "30402de99cd04de20c119fe50040a0e1375200eb000050e39cd08d023040bd081eff2f01f4009fe5601094e5000090e5050840e2000051e1060000ba0e0d84e2c29bfdeb000050e3d0009f0500009005050840026000840524008de2eda3fdeb5c1094e524008de200108de560e094e500108de204e08de5643094e50c208de208308de55c5094e50430a0e10c508de560c094e505e88ee210c08de5645094e596ca8ce214508de504e08de510c08de588a3fdeb24008de278a7fdeb000050e31000000a18008de224108de259a3fdeb1c009de5601094e5820a40e2000051e1080000ba601084e2000091e5010940e2000081e51c109de5600094e5821a41e2010050e1601084b524008de2aea3fdeb9cd08de23040bde81eff2fe17c0611022cf30902", "lang": "cpp", "divergences": 16, "c_source": "//cpp\nstruct Vector3 { int x, y, z; };\nstruct State;\nstruct Actor;\n\nstruct RaycastLine {\n char buf[0x78];\n RaycastLine();\n ~RaycastLine();\n void SetObjAndLine(const Vector3 &a, const Vector3 &b, Actor *act);\n int DetectClsn();\n Vector3 GetClsnPos();\n};\n\nstruct WithMeshClsn {\n int IsOnGround() const;\n};\n\nstruct Player {\n char pad[0x5c];\n int x, y, z;\n bool IsState(State &s);\n};\n\nextern \"C\" State data_ov002_0211067c;\nextern \"C\" int data_0209f32c;\n\nextern \"C\" void func_ov002_020ce798(Player *self)\n{\n Vector3 v1, v2, cp;\n\n if (!self->IsState(data_ov002_0211067c))\n return;\n\n if (self->y >= data_0209f32c - 0x50000) {\n if (!((WithMeshClsn *)((char *)self + 0x380))->IsOnGround())\n self->y = data_0209f32c - 0x50000;\n }\n\n {\n RaycastLine rl;\n\n v1.x = self->x;\n v1.y = self->y;\n v1.z = self->z;\n v2.x = self->x;\n v2.y = self->y;\n v2.z = self->z;\n v1.y += 0x50000;\n v2.y += 0x96000;\n\n rl.SetObjAndLine(v1, v2, (Actor *)self);\n\n if (rl.DetectClsn()) {\n cp = rl.GetClsnPos();\n if (self->y >= cp.y - 0x82000) {\n int *yp = (int *)(((int)self + 0x60) & 0xFFFFFFFFFFFFFFFF);\n *yp = *yp - 0x4000;\n if (*yp < cp.y - 0x82000)\n self->y = cp.y - 0x82000;\n }\n }\n }\n}\n", "source": "fanout-gpt-5.6-luna"} {"module": "ov002", "addr": "0x020bf13c", "name": "func_ov002_020bf13c", "size": 232, "target_hex": "70402de910d04de2081090e5030051e310d08d127040bd181eff2f11781590e5000051e310d08d027040bd081eff2f01fe38d0e1982090e5a4c09fe5023983e20338a0e14338a0e10338a0e12338a0e14332a0e183e0a0e101308ee28ee0a0e18330a0e1fee09ce1f3c09ce15c5090e57830a0e3644090e58e530ee18c4304e1c262a0e1010a56e3016aa0c3000056e30060a0b3de36d0e501ca86e2605090e54cc4a0e1000053e3ff300ce280308313ff300312000052e340208313ff30021200e081e5032985e2042081e5084081e57c0590e50030c0e510d08de27040bde81eff2fe114220802", "lang": "c", "divergences": 16, "c_source": "typedef int Fix12i;\nextern short data_02082214[];\n\nvoid func_ov002_020bf13c(char* c)\n{\n int vel;\n volatile int* dst;\n int idx;\n short s, cs;\n int ang;\n int r6, ip;\n int flags;\n int x, z;\n\n if (*(int*)(c + 8) != 3) return;\n\n dst = *(volatile int**)(c + 0x578);\n if (dst == 0) return;\n\n vel = *(int*)(c + 0x98);\n ang = *(short*)(c + 0x8e);\n idx = (unsigned short)(short)(ang + 0x8000) >> 4;\n s = data_02082214[idx * 2];\n cs = data_02082214[idx * 2 + 1];\n\n x = (short)s * (short)0x78 + *(int*)(c + 0x5c);\n z = (short)cs * (short)0x78 + *(int*)(c + 0x64);\n\n r6 = vel >> 5;\n if (r6 > 0x1000) r6 = 0x1000;\n if (r6 < 0) r6 = 0;\n\n ip = (r6 + 0x1000) >> 8;\n flags = ip & 0xff;\n if (*(unsigned char*)(c + 0x6de) != 0)\n flags = (flags | 0x80) & 0xff;\n if (vel != 0)\n flags = (flags | 0x40) & 0xff;\n\n dst[0] = x;\n dst[1] = *(int*)(c + 0x60) + 0xc000;\n dst[2] = z;\n *(unsigned char*)(*(char**)(c + 0x57c)) = (unsigned char)flags;\n}\n", "source": "fanout-gpt-5.6-luna"} {"module": "ov074", "addr": "0x02121800", "name": "func_ov074_02121800", "size": 348, "target_hex": "f04f2de944d04de20090a0e10806d9e5000050e344d08d12f04fbd181eff2f1130519fe514408de20f00b5e80f00a4e80f00b5e80f00a4e80f0095e80f0084e8010aa0e308008de50a0aa0e30c008de50f00a0e30970a0e10960a0e1bb5f89e29d4f89e20080a0e310008de5601099e5d40599e5062da0e300a041e0010a5ae308a09dd50030a0e39a1280e09a0320e0013088e2033389e014b193e5ca3fa0e1930220e0023ba0e3031091e00000a0e22116a0e18b20a0e1001a81e101b042e014e08de20a0a5be3bbcf87e20f00bee80f00ace80f00bee80f00ace80f009ee80f008ce8ac1396e50cb09db5c111a0e1101387e5602099e50b30a0e1c221a0e1142387e5b4b396e50aa98ae2cbb1a0e118b387e500a08de510a09de50900a0e10410a0e10520a0e104a08de5adbcfbeb018088e2307087e20c6086e2305085e2284084e2030058e3c7ffffba44d08de2f04fbde81eff2fe128210802", "lang": "cpp", "divergences": 16, "c_source": "//cpp\ntypedef int Fix12;\ntypedef long long s64;\nstruct Matrix4x3 { int m[12]; };\nstruct ShadowModel;\nstruct Actor {\n void DropShadowRadHeight(ShadowModel &sm, Matrix4x3 &mtx, Fix12 a, int b, unsigned int c);\n};\nextern Matrix4x3 data_02082128;\n\nextern \"C\" void func_ov074_02121800(char *c)\n{\n Matrix4x3 mtx;\n int i;\n int sl;\n int fp;\n int r1_310;\n int r2_314;\n int r3_318;\n char *self;\n char *src;\n char *m;\n char *sm;\n\n if (*(unsigned char *)(c + 0x608) != 0) return;\n\n mtx = data_02082128;\n\n self = c;\n src = c;\n m = c + 0x2ec;\n sm = c + 0x274;\n for (i = 0; i < 3; i++) {\n sl = *(int *)(c + 0x60) - *(int *)(c + 0x5d4);\n if (sl <= 0x1000) sl = 0x1000;\n fp = (*(int *)(c + 0x40 * (i + 1) + 0x114) << 1)\n - (int)(((s64)sl * 0x180 + 0x800) >> 12);\n *(Matrix4x3 *)(self + 0x2ec) = mtx;\n if (fp < 0xa000) fp = 0xa000;\n r1_310 = *(int *)(src + 0x3ac) >> 3;\n r2_314 = *(int *)(c + 0x60) >> 3;\n r3_318 = *(int *)(src + 0x3b4) >> 3;\n *(int *)(self + 0x310) = r1_310;\n *(int *)(self + 0x314) = r2_314;\n *(int *)(self + 0x318) = r3_318;\n sl = sl + 0x28000;\n ((Actor *)c)->DropShadowRadHeight(\n *(ShadowModel *)sm,\n *(Matrix4x3 *)m,\n fp, sl, 0xf);\n self += 0x30;\n src += 0xc;\n m += 0x30;\n sm += 0x28;\n }\n}\n", "source": "fanout-glm-5.2"} -{"module": "ov002", "addr": "0x020d5c6c", "name": "func_ov002_020d5c6c", "size": 128, "lang": "c", "divergences": 7, "c_source": "struct State;\nextern struct State data_ov002_02110034;\nextern int func_ov002_020d600c(char* c);\nextern void _ZN6Player11ChangeStateERNS_5StateE(void* c, struct State* st);\nint func_ov002_020d5c6c(char* c){\n unsigned short f = (unsigned short)(*(unsigned short*)(c + 0x6ce) & 2);\n if (f == 0) return 0;\n if (*(int*)(c + 0x360) != 0){\n if (func_ov002_020d600c(c) != 0) goto change;\n }\n *(unsigned short *)(((long long)(int)(c + 0x6ce)) & 0xFFFFFFFFFFFFFFFFLL) &= ~2;\n return 0;\nchange:\n _ZN6Player11ChangeStateERNS_5StateE(c, &data_ov002_02110034);\n return 1;\n}\n", "source": "lunavyqo-batch3"} {"module": "ov060", "addr": "0x021134ac", "name": "func_ov060_021134ac", "size": 184, "target_hex": "10402de9a0109fe50040a0e10120a0e3011084e02224c4e56e0900eb530f84e29288fceb000050e30c00000a7c009fe5341194e5040090e5000051e10300001a0400a0e10510a0e30121a0e3f0f9ffeb981084e2000091e5c000a0e1000081e5530f84e27488fceb000050e30a00000a530f84e27d88fceb000050e30600001a2c009fe50010a0e3981084e5001084e00000d1e5010080e20000c1e50400a0e17ffbffeb1040bde81eff2fe1fe03000088ac110223040000", "lang": "c", "divergences": 17, "c_source": "extern void func_ov060_02115a84(void* c, void* p);\nextern int _ZNK12WithMeshClsn13JustHitGroundEv(void* clsn);\nextern void func_ov060_02111cc0(void* c, int a, int b);\nextern int _ZNK12WithMeshClsn10IsOnGroundEv(void* clsn);\nextern int func_ov060_02112350(void* c);\n\nstruct D0211ac88 { int a, b; };\nextern struct D0211ac88 data_ov060_0211ac88;\n\nvoid func_ov060_021134ac(void* thiz)\n{\n char* c = (char*)thiz;\n *(unsigned char*)(c + 0x422) = 1;\n func_ov060_02115a84(c, c + 0x3fe);\n if (_ZNK12WithMeshClsn13JustHitGroundEv(c + 0x14c)) {\n if (*(int*)(c + 0x134) == data_ov060_0211ac88.b) {\n func_ov060_02111cc0(c, 5, 0x40000000);\n }\n {\n int* p = (int*)(c + 0x98);\n *p = *p >> 1;\n }\n }\n if (_ZNK12WithMeshClsn10IsOnGroundEv(c + 0x14c) &&\n !_ZNK12WithMeshClsn13JustHitGroundEv(c + 0x14c)) {\n *(int*)(c + 0x98) = 0;\n (*(unsigned char*)(c + 0x423))++;\n }\n func_ov060_02112350(c);\n}\n", "source": "harvest-wave1"} {"module": "ov065", "addr": "0x0211696c", "name": "func_ov065_0211696c", "size": 380, "target_hex": "f0412de918d04de20040a0e108008de25c1084e20320a0e3eb99fceb08109de50c209de510309de548019fe56995fcebfc18d4e1fe28d4e1f039d4e134019fe5c095fceb2c819fe5c7ef84e20860a0e10ec0a0e10f00b8e80f00aee80f00b8e80f00aee80f0098e80f008ee80070a0e3c07384e5c47384e5c87384e50650a0e10f00bce80f00a6e80f00bce80f00a6e80f009ce80f0086e8140394e50510a0e1c00080e20520a0e1beeffceb0500a0e1241090e50f5d84e2c01384e5281090e5f13f84e2c41384e52c1090e5f22f84e2c81384e5001095e58111a0e1001085e5001093e58111a0e1001083e5001093e50a1a41e2001083e5001092e58111a0e1001082e5602094e55c1094e5643094e5062942e2c111a0e1c221a0e1c331a0e12c95fceb4c709fe5e36f84e20650a0e10f00b7e80f00a6e80f00b7e80f00a6e80f0097e80f0086e896e9a0e30fc0a0e300e08de50520a0e10400a0e1d91f84e21939a0e304c08de543e8fbeb18d08de2f041bde81eff2fe1680e0a02", "lang": "c", "divergences": 17, "c_source": "typedef unsigned int u32;\ntypedef short s16;\n\ntypedef struct Mtx43 { int w[12]; } Mtx43;\n\nextern void Vec3_Asr(void* d, void* s, int sh);\nextern void Matrix4x3_FromTranslation(void* m, int x, int y, int z);\nextern void Matrix4x3_ApplyInPlaceToRotationXYZExt(void* m, int x, int y, int z);\nextern void MulMat4x3Mat4x3(void* dst, void* a, void* b);\nextern void _ZN5Actor19DropShadowRadHeightER11ShadowModelR9Matrix4x35Fix12IiES5_j(\n void* c, void* shadow, void* mtx, int rad, int height, u32 flags);\n\nextern Mtx43 data_020a0e68;\n\nstruct V3 { int x, y, z; };\n\nvoid func_ov065_0211696c(char* c)\n{\n struct V3 v;\n Vec3_Asr(&v, c + 0x5c, 3);\n Matrix4x3_FromTranslation(&data_020a0e68, v.x, v.y, v.z);\n Matrix4x3_ApplyInPlaceToRotationXYZExt(&data_020a0e68,\n *(s16*)(c + 0x8c), *(s16*)(c + 0x8e), *(s16*)(c + 0x90));\n\n *(Mtx43*)(c + 0x31c) = data_020a0e68;\n *(int*)(c + 0x3c0) = 0;\n *(int*)(c + 0x3c4) = 0;\n *(int*)(c + 0x3c8) = 0;\n data_020a0e68 = *(Mtx43*)(c + 0x31c);\n\n MulMat4x3Mat4x3(*(char**)(c + 0x314) + 0xc0, &data_020a0e68, &data_020a0e68);\n\n *(int*)(c + 0x3c0) = *(int*)((char*)&data_020a0e68 + 0x24);\n *(int*)(c + 0x3c4) = *(int*)((char*)&data_020a0e68 + 0x28);\n *(int*)(c + 0x3c8) = *(int*)((char*)&data_020a0e68 + 0x2c);\n *(int*)(c + 0x3c0) <<= 3;\n *(int*)(c + 0x3c4) <<= 3;\n *(int*)(c + 0x3c4) -= 0xa000;\n *(int*)(c + 0x3c8) <<= 3;\n\n Matrix4x3_FromTranslation(&data_020a0e68,\n *(int*)(c + 0x5c) >> 3,\n (*(int*)(c + 0x60) - 0x18000) >> 3,\n *(int*)(c + 0x64) >> 3);\n\n *(Mtx43*)(c + 0x38c) = data_020a0e68;\n\n _ZN5Actor19DropShadowRadHeightER11ShadowModelR9Matrix4x35Fix12IiES5_j(\n c, c + 0x364, c + 0x38c, 0x64000, 0x258000, 0xf);\n}\n", "source": "harvest-wave3"} {"module": "ov102", "addr": "0x0214b988", "name": "func_ov102_0214b988", "size": 168, "target_hex": "30402de90cd04de20050a0e10010a0e38c1385e54d14fbeb0040b0e10cd08d023040bd081eff2f015c0085e25c1084e287c5fbeb190850e30cd08dc23040bdc81eff2fc15c3084e2000093e500108de200008de5042093e55c0085e204208de5082093e508208de56dbffbebfe18d5e1babdfbeb031c85e2bc1ed1e1010050e10cd08da23040bda81eff2fa10500a0e19610a0e38c4385e557feffeb0cd08de23040bde81eff2fe1", "lang": "cpp", "divergences": 17, "c_source": "//cpp\nstruct Vector3 { int x, y, z; };\n\nextern \"C\" void *_ZN5Actor13ClosestPlayerEv(void *thiz);\nextern \"C\" int Vec3_Dist(const struct Vector3 *a, const struct Vector3 *b);\nextern \"C\" short Vec3_HorzAngle(const struct Vector3 *a, const struct Vector3 *b);\nextern \"C\" int AngleDiff(int a, int b);\nextern \"C\" void func_ov102_0214b384(void *thiz, int a);\n\nextern \"C\" void func_ov102_0214b988(void *thiz)\n{\n unsigned char *c = (unsigned char *)thiz;\n unsigned char *pl;\n struct Vector3 v;\n\n *(int *)(c + 0x38c) = 0;\n pl = (unsigned char *)_ZN5Actor13ClosestPlayerEv(c);\n if (!pl) return;\n if (Vec3_Dist((struct Vector3 *)(c + 0x5c), (struct Vector3 *)(pl + 0x5c)) > 0x190000) return;\n v = *(struct Vector3 *)(pl + 0x5c);\n if (AngleDiff(Vec3_HorzAngle((struct Vector3 *)(c + 0x5c), &v), *(short *)(c + 0x8e)) >= *(unsigned short *)(c + 0x3ec)) return;\n *(int *)(c + 0x38c) = (int)pl;\n func_ov102_0214b384(c, 0x96);\n}\n", "source": "harvest-wave4"} @@ -191,13 +196,13 @@ {"module": "ov006", "addr": "0x020d47f4", "name": "func_ov006_020d47f4", "size": 232, "target_hex": "f0472de908d04de20040a0e1050a84e2dd03d0e5000050e30700001a0010a0e3b4009fe500108de5000090e58010a0e3b020a0e30030e0e3676dffeb0070a0e398509fe50760a0e10080e0e3070184e000608de5010980e2871184e0012981e2a40690e5601692e5000195e7642692e50830a0e1586dffeb017087e2040057e3f1ffffba00a0a0e32090a0e350709fe50a80a0e17860a0e30050e0e30a0184e000808de5010980e2140790e50910a0e1000197e70620a0e10530a0e1466dffeb01a08ae204005ae3409089e2f2ffffba08d08de2f047bde81eff2fe138a3130268a51302c0a41302", "lang": "c", "divergences": 18, "c_source": "extern void func_ov004_020afdd0(void* a0, int a1, int a2, int a3, int a4);\nextern int data_ov006_0213a338[];\nextern int data_ov006_0213a568[];\nextern int data_ov006_0213a4c0[];\n\nvoid func_ov006_020d47f4(char* c){\n int i,j;\n if(*(unsigned char*)(c+0x53dd)==0){\n func_ov004_020afdd0((void*)data_ov006_0213a338[0],0x80,0xb0,-1,0);\n }\n for(i=0;i<4;i++){\n func_ov004_020afdd0((void*)data_ov006_0213a568[((int*)(c+0x46a4))[i]],\n *(int*)((int)c + i*8 + 0x4660),\n *(int*)((int)c + i*8 + 0x4664),\n -1,0);\n }\n for(j=0;j<4;j++){\n func_ov004_020afdd0((void*)data_ov006_0213a4c0[((int*)(c+0x4714))[j]],\n 0x20+j*0x40,0x78,-1,0);\n }\n}\n", "source": "fanout-glm-5.2"} {"module": "ov006", "addr": "0x020f9760", "name": "func_ov006_020f9760", "size": 380, "target_hex": "f04f2de904d04de234619fe534519fe534419fe500a0a0e10070a0e328b0a0e30720a0e1021196e7010082e2021185e70008a0e14028a0e10a0052e3f8ffffba0790a0e10a80a0e10800a0e10910a0e1e20100eb308088e2010089e20008a0e14098a0e1280059e3f6ffffbadc009fe5007084e500a080e5d4009fe50710a0e1007080e5cc009fe5007080e5c8009fe5007080e5c4009fe5b070c0e1c0009fe5b070c0e1bc009fe5b0b0c0e1b8009fe5b0b0c0e1b4009fe5b070c0e1b0009fe5b070c0e1ac009fe5007080e50a00a0e1013081e23020a0e393a228e0083090e5088080e5040088e5082098e5000052e30300000a0280a0e1082092e5000052e3fbffff1a083088e5011081e2082098e50118a0e1000052e34118a0e100808405300080e2270051e3e8ffffba93ffffeb000050e3b9ffff0a04d08de2f04fbde81eff2fe154e9120280251402682514027c2514026c2514027025140274251402582514025c251402f8d61302f4d61302602514026425140200d71302", "lang": "cpp", "divergences": 18, "c_source": "//cpp\nextern \"C\" {\nvoid func_ov006_020f9f40(char* c, int r1);\nint func_ov006_020f96e0(void);\n}\n\nextern char* data_ov006_0212e954[];\nextern char* data_ov006_02142580[];\nextern char* data_ov006_02142568;\nextern char* data_ov006_0214257c;\nextern int data_ov006_0214256c;\nextern int data_ov006_02142570;\nextern int data_ov006_02142574;\nextern short data_ov006_02142558;\nextern short data_ov006_0214255c;\nextern short data_ov006_0213d6f8;\nextern short data_ov006_0213d6f4;\nextern short data_ov006_02142560;\nextern short data_ov006_02142564;\nextern int data_ov006_0213d700;\n\nextern \"C\" int func_ov006_020f9760(char* arg)\n{\n short i;\n short j;\n char* r0;\n short r1;\n char* r2;\n char* r8;\n char* r3;\n int result;\n\n r1 = 0;\n\n do\n {\n for (i = 0; i < 0xa; i++) {\n data_ov006_02142580[i] = data_ov006_0212e954[i];\n }\n\n j = 0;\n r8 = arg;\n do\n {\n func_ov006_020f9f40(r8, j);\n r8 += 0x30;\n j++;\n } while (j < 0x28);\n\n data_ov006_02142568 = 0;\n data_ov006_0214257c = arg;\n data_ov006_0214256c = 0;\n r1 = 0;\n data_ov006_02142570 = 0;\n data_ov006_02142574 = 0;\n data_ov006_02142558 = 0;\n data_ov006_0214255c = 0;\n data_ov006_0213d6f8 = 0x28;\n data_ov006_0213d6f4 = 0x28;\n data_ov006_02142560 = 0;\n data_ov006_02142564 = 0;\n data_ov006_0213d700 = 0;\n\n r0 = arg;\n do\n {\n r8 = arg + (r1 + 1) * 0x30;\n r3 = *(char **)(r0 + 8);\n *(char **)(r0 + 8) = r8;\n *(char **)(r8 + 4) = r0;\n\n r2 = *(char **)(r8 + 8);\n while (r2 != 0) {\n r8 = r2;\n r2 = *(char **)(r2 + 8);\n }\n\n *(char **)(r8 + 8) = r3;\n r1++;\n\n r2 = *(char **)(r8 + 8);\n if (r2 == 0) {\n data_ov006_02142568 = r8;\n }\n\n r0 += 0x30;\n } while (r1 < 0x27);\n\n result = func_ov006_020f96e0();\n } while (result == 0);\n\n return result;\n}\n", "source": "fanout-gpt-5.6-luna"} {"module": "ov006", "addr": "0x020ec9c0", "name": "func_ov006_020ec9c0", "size": 448, "target_hex": "f0402de90cd04de20050a0e10a2ca0e3402085e598019fe5442085e5000090e50140a0e1017040e20766a0e10610a0e10406a0e1179afdeb042047e00040a0e10610a0e10206a0e1129afdeb021047e28121a0e10010a0e3283062e2982082e203e6a0e10226a0e192c0c3e09e44c2e0020ba0e300e094e00040a2e200209ce02ec6a0e10000a3e22226a0e104ca8ce1002a82e11c019fe504108de502208ce000108de504208de5c83bfdeb020310e20c00000a0109a0e3000060e2b607c5e10217a0e3ec009fe500108de5bf3bfdeb0201c0e300109de5a009a0e1800381e000008de50a0000ea0109a0e3b607c5e10217a0e3bc009fe500108de5b33bfdeb0201c0e300109de5a009a0e1800341e000008de50010a0e30100a0e100209de5813185e0182083e504209de51c2083e5f627d5e1000052e31820b3b5002082b0002083b51820b3a5002042a0002083a5812085e0f637d5e1011081e2050051e3ba37c2e1020880e2ebffffba0500a0e1e1fdffeb0000a0e3680085e57b1fa0e334009fe56c1085e5001090e5040090e5001085e5040085e5001095e5040095e5081085e50c0085e50cd08de2f040bde81eff2fe158c9130250e609020cca1302", "lang": "c", "divergences": 18, "c_source": "extern int data_ov006_0213c958;\nextern int data_0209e650;\nextern int data_ov006_0213ca0c[];\nextern int _ZN4cstd4fdivEii(int, int);\nextern int RandomIntInternal(int* seed);\nextern void func_ov006_020ec2bc(void* self);\n\n#pragma opt_strength_reduction off\n\nvoid func_ov006_020ec9c0(char* self, int idx)\n{\n int n1;\n int A, B;\n int p;\n int valY;\n int pos[2];\n int off;\n int i;\n\n *(int*)(self + 0x40) = 0xa00;\n *(int*)(self + 0x44) = 0xa00;\n\n n1 = data_ov006_0213c958 - 1;\n A = _ZN4cstd4fdivEii(idx << 12, n1 << 12);\n B = _ZN4cstd4fdivEii((n1 - idx) << 12, n1 << 12);\n\n p = (n1 - 2) << 3;\n valY = (int)(((long long)((0x28 - p) << 12) * A + 0x800) >> 12)\n + (int)(((long long)((p + 0x98) << 12) * B + 0x800) >> 12);\n\n *(int*)((char*)pos + 4) = 0;\n *(int*)((char*)pos + 0) = 0;\n *(int*)((char*)pos + 4) = valY;\n\n if (RandomIntInternal(&data_0209e650) & 0x8000000) {\n *(short*)(self + 0x76) = -0x4000;\n pos[0] = 0x80000;\n pos[0] += ((unsigned int)(RandomIntInternal(&data_0209e650) & 0x7fffffff) >> 19) << 7;\n } else {\n *(short*)(self + 0x76) = 0x4000;\n pos[0] = 0x80000;\n pos[0] -= ((unsigned int)(RandomIntInternal(&data_0209e650) & 0x7fffffff) >> 19) << 7;\n }\n\n off = 0;\n for (i = 0; i < 5; i++) {\n int* cur = (int*)(self + i * 8 + 0x18);\n cur[0] = pos[0];\n cur[1] = pos[1];\n if (*(short*)(self + 0x76) < 0)\n cur[0] += off;\n else\n cur[0] -= off;\n *(short*)(self + i * 2 + 0x7a) = *(short*)(self + 0x76);\n off += 0x20000;\n }\n\n func_ov006_020ec2bc(self);\n *(int*)(self + 0x68) = 0;\n *(int*)(self + 0x6c) = 0x1ec;\n *(int*)(self + 0) = data_ov006_0213ca0c[0];\n *(int*)(self + 4) = data_ov006_0213ca0c[1];\n *(int*)(self + 8) = *(int*)(self + 0);\n *(int*)(self + 0xc) = *(int*)(self + 4);\n}\n", "source": "fanout-glm-5.2"} +{"module": "ov006", "addr": "0x020fbcb8", "name": "func_ov006_020fbcb8", "size": 128, "lang": "c", "divergences": 18, "c_source": "extern unsigned int *func_02054de8(void);\n\nvoid func_ov006_020fbcb8(int unused, int arg1, int arg2, int arg3)\n{\n int x0, y0, a3, oy, z;\n (void)unused;\n /* target demand: sl=arg1, sb=arg3, r8=0, stack, r5=arg1-1, fp=arg2-1 */\n a3 = arg3;\n oy = 0;\n z = oy;\n y0 = arg1 - 1;\n x0 = arg2 - 1;\n for (; oy < 2; ++oy) {\n int gx = x0 + oy;\n int bx = gx & 7;\n int wx = gx >> 3;\n int ix = z;\n int boff = bx << 2;\n int woff = wx << 5;\n while (ix < 2) {\n int gy = y0 + ix;\n unsigned int *base = func_02054de8();\n int t = woff + (gy >> 3);\n unsigned int *p = (unsigned int *)((char *)base + (t << 5));\n p[bx] |= (unsigned)a3 << ((gy & 7) << 2);\n ix++;\n }\n }\n}\n", "source": "lunavyqo-batch3"} {"module": "ov022", "addr": "0x021112ac", "name": "func_ov022_021112ac", "size": 496, "target_hex": "10402de918d04de20040a0e11e03d4e5000050e30200000a010050e31a00000a530000eabc019fe5000084e0b7a6fceb000050e34e00001a2003d4e5000050e34b00000a02c0a0e3960084e20010a0e30f20a0e33030a0e300c08de53ea7fceb000050e34200001a030c84e29610a0e3b212c0e10120a0e3741084e20c00a0e31e23c4e5cb04fceb390000ea54019fe5000084e09da6fceb000050e30e00001a02c0a0e3960084e2ff10e0e30f20a0e33030a0e300c08de527a7fceb000050e32b00001a030c84e29610a0e3b212c0e10000a0e31e03c4e5250000eab00094e5080010e20100a0130000a003000050e31f00001af0009fe5000084e089a6fceb000050e31a00001a5c0094e50010a0e308008de5600094e500c0e0e30c008de5640094e508208de210008de5600094e50130a0e17d0980e20c008de5dcecd4e1f300a0e300e08de504c08de58bfefbeb0c4180e5601094e5c92f84e2181180e5b010d2e10200a0e3011081e2b010c2e11f03c4e594c084e2f030dce1f629d4e1490f84e21e17a0e3022083e0b020cce1f429d4e1be28c4e1d69ffceb490f84e2011aa0e3cf9ffceb0400a0e1f474ffeb0400a0e11e17a0e3012aa0e30075ffeb000050e30100000a0400a0e1d374ffeb0000a0e32003c4e50100a0e318d08de21040bde81eff2fe1220300001f030000", "lang": "c", "divergences": 19, "c_source": "extern unsigned short DecIfAbove0_Short(unsigned short *p);\nextern unsigned char DecIfAbove0_Byte(unsigned char *p);\nextern int ApproachAngle(short *p, int target, int a, int b, int c);\nextern void Sound_PlayBank3(unsigned int id, void *pos);\nextern void *Actor_Spawn(unsigned int a, unsigned int b, void *pos, void *v16, int e, int f);\nextern void func_020393a4(void *p, int v);\nextern void func_02039394(void *p, int v);\nextern void Platform_UpdateModelPosAndRotY(void *self);\nextern int Platform_IsClsnInRange(void *self, int fix, int t);\nextern void Platform_UpdateClsnPosAndRot(void *self);\n\nint func_ov022_021112ac(void *thiz)\n{\n unsigned char *c = (unsigned char *)thiz;\n short *ip;\n\n switch (*(unsigned char *)(c + 0x31e)) {\n case 0:\n if (DecIfAbove0_Short((unsigned short *)(c + 0x322)) != 0)\n break;\n if (*(unsigned char *)(c + 0x320) == 0)\n break;\n if (ApproachAngle((short *)(c + 0x96), 0, 0xf, 0x30, 2) != 0)\n break;\n *(unsigned short *)(c + 0x300 + 0x22) = 0x96;\n *(unsigned char *)(c + 0x31e) = 1;\n Sound_PlayBank3(0xc, c + 0x74);\n break;\n case 1:\n if (DecIfAbove0_Short((unsigned short *)(c + 0x322)) == 0) {\n if (ApproachAngle((short *)(c + 0x96), -0x100, 0xf, 0x30, 2) != 0)\n break;\n *(unsigned short *)(c + 0x300 + 0x22) = 0x96;\n *(unsigned char *)(c + 0x31e) = 0;\n break;\n }\n {\n int b8;\n b8 = (int)((*(int *)(c + 0xb0) & 8) != 0);\n if (b8 != 0)\n break;\n }\n if (DecIfAbove0_Byte((unsigned char *)(c + 0x31f)) != 0)\n break;\n {\n int v[3];\n void *s;\n v[0] = *(int *)(c + 0x5c);\n v[1] = *(int *)(c + 0x60);\n v[2] = *(int *)(c + 0x64);\n v[1] = *(int *)(c + 0x60) + 0x1f4000;\n s = Actor_Spawn(0xf3, 0, v, 0, *(signed char *)(c + 0xcc), -1);\n *(void **)((unsigned char *)s + 0x10c) = c;\n *(int *)((unsigned char *)s + 0x118) = *(int *)(c + 0x60);\n {\n unsigned short *t = (unsigned short *)(c + 0x324);\n *t = *t + 1;\n }\n *(unsigned char *)(c + 0x31f) = 2;\n }\n break;\n }\n\n ip = (short *)(c + 0x94);\n *ip = (short)(*ip + *(short *)(c + 0x96));\n *(short *)(c + 0x8e) = *(short *)(c + 0x94);\n func_020393a4(c + 0x124, 0x780000);\n func_02039394(c + 0x124, 0x1000);\n Platform_UpdateModelPosAndRotY(c);\n if (Platform_IsClsnInRange(c, 0x780000, 0x1000) != 0)\n Platform_UpdateClsnPosAndRot(c);\n *(unsigned char *)(c + 0x320) = 0;\n return 1;\n}\n", "source": "harvest-wave2"} {"module": "ov002", "addr": "0x020d708c", "name": "func_ov002_020d708c", "size": 256, "target_hex": "f0472de90080a0e300a0a0e10800a0e1e0709fe589e7fceb0090b0e12600000ad4509fe55c608ae20740a0e10a0059e11d00000a0900a0e1001090e5481091e531ff2fe1000050e31700000a0600a0e15c1089e2bd97fdeb050050e1120000aa0600a0e15c1089e2ac91fdebfe18dae1000041e00008a0e14018b0e1000061420100a051040050e1070000ca000051e3000061b20008a0b14008a0b10100a0a1070050e10170a0b10980a0b10900a0e162e7fceb0090b0e1dbffff1a000058e30900000a5c008ae25c1088e28491fdeb071c8ae20020a0e3b226c1e1b476c1e1b606c1e10100a0e34207cae50800a0e1f047bde81eff2fe18e23000000e01500", "lang": "cpp", "divergences": 19, "c_source": "//cpp\nstruct Actor { static Actor* Next(const Actor*); };\nextern \"C\" int Vec3_Dist(const void* a, const void* b);\nextern \"C\" short Vec3_HorzAngle(const void* a, const void* b);\nextern \"C\" short Vec3_VertAngle(const void* a, const void* b);\n\nextern \"C\" Actor* func_ov002_020d708c(char* self);\nActor* func_ov002_020d708c(char* self) {\n Actor* best = 0;\n int bestAng = 0x238e;\n Actor* a = Actor::Next(0);\n if (a) {\n int thresh = bestAng;\n do {\n if (a != (Actor*)self) {\n int (*vfn)(void*) = (int(*)(void*))(*(void***)a)[0x12];\n if (vfn((void*)a)) {\n if (Vec3_Dist(self + 0x5c, (char*)a + 0x5c) < 0x15e000) {\n int diff = (short)(*(short*)(self + 0x8e) - Vec3_HorzAngle(self + 0x5c, (char*)a + 0x5c));\n int ad = diff < 0 ? -diff : diff;\n if (ad <= thresh) {\n int ad2 = diff < 0 ? (short)(-diff) : diff;\n if (ad2 < bestAng) {\n bestAng = diff;\n best = a;\n }\n }\n }\n }\n }\n a = Actor::Next(a);\n } while (a);\n }\n if (best) {\n short v = Vec3_VertAngle(self + 0x5c, (char*)best + 0x5c);\n int offset = 0x762;\n *(short*)(self + offset) = 0;\n *(short*)(self + offset + 2) = (short)bestAng;\n *(short*)(self + offset + 4) = v;\n *(unsigned char*)(self + 0x742) = 1;\n }\n return best;\n}\n", "source": "fanout-glm-5.2"} {"module": "ov002", "addr": "0x020c1eb4", "name": "func_ov002_020c1eb4", "size": 344, "target_hex": "70402de930d04de20050a0e10140a0e1741085e21300a0e3de41fdebf409d5e10010a0e38420a0e1be08c5e1b019c5e1f009d5e1bc08c5e1e316c5e5de06d5e5000050e300019f15001085100000d115020080120000c115fe18d5e1e8009fe5011042e0be18c5e1fe28d5e1003085e00a1aa0e3020982e2b409c5e1981085e50020d3e5c4109fe50500a0e1202082e30020c3e50020a0e3742685e5528400eb020984e20028a0e10060a0e332eaa0e30ac9a0e314008de220308de25c1085e24228a0e120608de524e08de528c08de5c6e5fdeb0408a0e12008a0e14002a0e18030a0e1011083e20600a0e160209fe58330a0e18110a0e1f33092e1f11092e11c209de5bc30cde1b011cde1be00cde10c108de200208de504108de508008de514209de518309de5c810a0e36683fdeb0500a0e10610a0e10120a0e37a5c00eb30d08de27040bde81eff2fe1e30600009400110214220802", "lang": "cpp", "divergences": 19, "c_source": "//cpp\nstruct Vector3 { int x, y, z; };\nstruct Vector3_16f { short x, y, z; };\ntypedef int Fix12i;\n\nextern \"C\" void Vec3_RotateYAndTranslate(Vector3 *out, const Vector3 *origin,\n int angle, const Vector3 *offset);\nextern short data_02082214[];\n\nstruct Sound {\n static void PlayBank0(unsigned int id, const Vector3 &v);\n};\n\nstruct Player {\n struct State;\n void ChangeState(State &s);\n};\nextern Player::State data_ov002_02110094;\n\nnamespace Particle {\n struct Callback;\n struct System {\n static void New(unsigned int id, unsigned int a, Fix12i x, Fix12i y, Fix12i z,\n const Vector3_16f *v, Callback *cb);\n };\n}\n\nextern \"C\" int func_ov002_020d91e0(char *thiz, int damage, int doPre);\n\nstruct Obj {\n char pad0[0x5c];\n Vector3 p5c; /* 0x5c */\n char pad1[0x74 - 0x68];\n Vector3 p74; /* 0x74 */\n char pad2[0x8c - 0x80];\n short p8c; /* 0x8c */\n short p8e; /* 0x8e */\n short p90; /* 0x90 */\n char pad3[0x94 - 0x92];\n short p94; /* 0x94 */\n char pad4[0x98 - 0x96];\n int p98; /* 0x98 */\n char pad5[0x674 - 0x9c];\n int p674; /* 0x674 */\n char pad6[0x6de - 0x678];\n unsigned char b6de; /* 0x6de */\n char pad7[0x6e3 - 0x6df];\n unsigned char b6e3; /* 0x6e3 */\n};\n\nextern \"C\" void func_ov002_020c1eb4(Obj *self, int dmg)\n{\n Vector3 out;\n Vector3 offset;\n Vector3_16f vec;\n\n Sound::PlayBank0(0x13, self->p74);\n self->p8e = self->p94;\n self->p90 = 0;\n self->p8c = self->p90;\n self->b6e3 = 0;\n \n if (self->b6de) {\n *(unsigned char *)(((int)self + 0x6e3) & 0xFFFFFFFFFFFFFFFF) += 2;\n }\n \n self->p94 = (short)(dmg * 2 - self->p8e);\n self->p8e = self->p94;\n self->p94 = (short)(self->p8e + 0x8000);\n self->p98 = 0xa000;\n self->b6e3 |= 0x20;\n self->p674 = 0;\n ((Player *)self)->ChangeState(data_ov002_02110094);\n\n offset.x = 0;\n offset.y = 0x32000;\n offset.z = 0x28000;\n Vec3_RotateYAndTranslate(&out, &self->p5c, (short)(dmg + 0x8000), &offset);\n\n {\n int idx = ((unsigned short)dmg >> 4);\n vec.x = data_02082214[idx * 2];\n vec.z = data_02082214[idx * 2 + 1];\n vec.y = 0;\n Particle::System::New(0, 0xc8, out.x, out.y, out.z, &vec, 0);\n }\n func_ov002_020d91e0((char *)self, 0, 1);\n}\n", "source": "fanout-glm-5.2"} {"module": "arm9", "addr": "0x0202048c", "name": "func_0202048c", "size": 732, "target_hex": "f0402de92cd04de20060a0e12600d6e50150a0e10240a0e1000050e32cd08d02f040bd081eff2f01043096e5000053e32cd08d02f040bd081eff2f0108c096e5010a5ce33d00001a0c0096e5010a50e33a00001ab002d6e1000050e33700001a280096e5020050e31800001ad212d6e1012aa0e30000a0e300108de5d3c2d6e10310a0e10070e0e304c08de508208de50c208de510008de50520a0e114708de5c03084e2170100ebd302d6e10510a0e10420a0e100008de5d232d6e1040096e5120500eb2cd08de2f040bde81eff2fe1010050e30700001ad342d6e10300a0e100408de5d232d6e1080500eb2cd08de2f040bde81eff2fe1d212d6e1017aa0e30000a0e300108de5d362d6e10310a0e10430a0e104608de508708de50c708de50520a0e110008de50040e0e314408de5f40000eb2cd08de2f040bde81eff2fe1b012d6e18c219fe50c0096e54112a0e18110a0e1017081e28110a0e1f13092e18710a0e1f17092e1930001e0930c02e0970c0ee0970000e0021b81e2023b8ee2022b82e24116a0e1020b80e24336a0e14226a0e1001061e24006a0e118308de51c208de520108de524008de5040096e5000090e5010210e2001063120000621218108d151c008d15040096e5000090e5020210e20500000a20109de524009de5001061e2000060e220108de524008de5280096e5020050e31800001ad202d6e118108de20520a0e100008de5d3c2d6e1c03084e20000a0e304c08de508108de5041096e57b0300ebd202d6e10520a0e118108de200008de5d352d6e10430a0e10100a0e304508de508108de5041096e5700300eb2cd08de2f040bde81eff2fe1010050e30d00001ad202d6e10520a0e118108de200008de5d352d6e10430a0e10100a0e304508de508108de5041096e5600300eb2cd08de2f040bde81eff2fe1d202d6e10520a0e118108de200008de5d352d6e10430a0e10000a0e304508de508108de5041096e5520300eb2cd08de2f040bde81eff2fe114220802", "lang": "cpp", "divergences": 19, "c_source": "//cpp\nextern \"C\" {\nstruct Matrix2x2;\n}\ntypedef int Fix12i;\n\nextern \"C\" int _ZN3OAM6RenderEbP7OamAttriiii5Fix12IiES3_ii(int show, void* attr, int a, int b, int c, int d, Fix12i e, Fix12i f, int g, int h);\nextern \"C\" int _ZN3OAM9RenderSubEP7OamAttriiii(void* attr, int a, int b, int c, int d);\nextern \"C\" int _ZN3OAM6RenderEbP7OamAttriiiiP9Matrix2x2(int show, void* attr, int a, int b, int c, int d, Matrix2x2* m);\n\nextern short data_02082214[];\n\nextern \"C\" void func_0202048c(char* a0, int a1, int a2)\n{\n if (*(unsigned char*)(a0 + 0x26) == 0) return;\n if (*(void**)(a0 + 4) == 0) return;\n\n int f08 = *(int*)(a0 + 8);\n if (f08 == 0x1000 && *(int*)(a0 + 0xc) == 0x1000 && *(unsigned short*)(a0 + 0x20) == 0) {\n int mode = *(int*)(a0 + 0x28);\n if (mode == 2) {\n _ZN3OAM6RenderEbP7OamAttriiii5Fix12IiES3_ii(0, *(void**)(a0 + 4), a1, a2 + 0xc0,\n *(signed char*)(a0 + 0x22), *(signed char*)(a0 + 0x23), 0x1000, 0x1000, 0, -1);\n _ZN3OAM9RenderSubEP7OamAttriiii(*(void**)(a0 + 4), a1, a2,\n *(signed char*)(a0 + 0x22), *(signed char*)(a0 + 0x23));\n return;\n }\n if (mode == 1) {\n _ZN3OAM9RenderSubEP7OamAttriiii(*(void**)(a0 + 4), a1, a2,\n *(signed char*)(a0 + 0x22), *(signed char*)(a0 + 0x23));\n return;\n }\n _ZN3OAM6RenderEbP7OamAttriiii5Fix12IiES3_ii(0, *(void**)(a0 + 4), a1, a2,\n *(signed char*)(a0 + 0x22), *(signed char*)(a0 + 0x23), 0x1000, 0x1000, 0, -1);\n return;\n }\n\n int idx = (*(unsigned short*)(a0 + 0x20)) >> 4;\n int f0c = *(int*)(a0 + 0xc);\n int i0 = idx * 2;\n int i1 = i0 + 1;\n int ta = data_02082214[i0];\n int tb = data_02082214[i1];\n\n int m[4];\n m[0] = -((tb * f0c + 0x800) >> 12);\n m[1] = (ta * f08 + 0x800) >> 12;\n m[2] = (tb * f08 + 0x800) >> 12;\n m[3] = (ta * f0c + 0x800) >> 12;\n\n if (*(int*)*(void**)(a0 + 4) & 0x10000000) {\n m[0] = -m[0];\n m[1] = -m[1];\n }\n if (*(int*)*(void**)(a0 + 4) & 0x20000000) {\n m[2] = -m[2];\n m[3] = -m[3];\n }\n\n int mode = *(int*)(a0 + 0x28);\n if (mode == 2) {\n _ZN3OAM6RenderEbP7OamAttriiiiP9Matrix2x2(0, *(void**)(a0 + 4), a1, a2 + 0xc0,\n *(signed char*)(a0 + 0x22), *(signed char*)(a0 + 0x23), (Matrix2x2*)m);\n _ZN3OAM6RenderEbP7OamAttriiiiP9Matrix2x2(1, *(void**)(a0 + 4), a1, a2,\n *(signed char*)(a0 + 0x22), *(signed char*)(a0 + 0x23), (Matrix2x2*)m);\n return;\n }\n if (mode == 1) {\n _ZN3OAM6RenderEbP7OamAttriiiiP9Matrix2x2(1, *(void**)(a0 + 4), a1, a2,\n *(signed char*)(a0 + 0x22), *(signed char*)(a0 + 0x23), (Matrix2x2*)m);\n return;\n }\n _ZN3OAM6RenderEbP7OamAttriiiiP9Matrix2x2(0, *(void**)(a0 + 4), a1, a2,\n *(signed char*)(a0 + 0x22), *(signed char*)(a0 + 0x23), (Matrix2x2*)m);\n}\n", "source": "fanout-glm-5.2"} {"module": "ov065", "addr": "0x0211bd8c", "name": "_ZN14TtcMovingCubeA8BehaviorEv", "size": 376, "target_hex": "10402de950119fe50040a0e10030d1e5030c84e244119fe5d822d0e1030191e7020053e3920000e0a80084e52400001a2c019fe5000084e0fc7bfceb000050e31800001a1c019fe5ed7efceb2008a0e10008a0e110119fe520c8a0e101005ce10100a0232803c4250000e033fc109fe52803c435910cc3e0f4209fe5ac3f83e09203c1e000304ce0011083e21e00a0e3910002e0030c84e2ba22c0e1ba12d0e1bc12c0e1060000ea030c84e2bc12d0e1ba22d0e1050041e2000052e10000a0a3a80084a50400a0e10010a0e374d3fbeb600094e5203394e5242394e5030050e10010a0e3010000ba020050e10110a0d3000051e30900001a030050e1020000ba020050e10020a0d10230a0e1603084e5030c84e2d802d0e1000060e22803c4e50400a0e15e4affeb0400a0e172ffffeb0010a0e30400a0e10120a0e1684affeb000050e30100000a0400a0e13b4affeb0100a0e31040bde81eff2fe1c0f2090220d511022a03000050e60902ff7f0000abaaaa2a06000000", "lang": "cpp", "divergences": 19, "c_source": "//cpp\ntypedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef short s16;\ntypedef unsigned int u32;\ntypedef int s32;\n\nextern u8 data_0209f2c0;\nextern s32 data_ov065_0211d520[];\nextern s32 data_0209e650[];\n\nextern u16 DecIfAbove0_Short(u16* p);\nextern int RandomIntInternal(int* seed);\nextern void _ZN5Actor9UpdatePosEP12CylinderClsn(void* self, void* clsn);\nextern void _ZN8Platform21UpdateModelPosAndRotYEv(void* self);\nextern void func_ov065_0211bc88(char* c);\nextern int _ZN8Platform13IsClsnInRangeE5Fix12IiES1_(void* self, int a, int b);\nextern void _ZN8Platform19UpdateClsnPosAndRotEv(void* self);\n\nclass TtcMovingCubeA\n{\npublic:\n int Behavior();\n};\n\nint TtcMovingCubeA::Behavior()\n{\n char* c = (char*)this;\n u8 idx = data_0209f2c0;\n s32 v = *(signed char*)(c + 0x300 + 0x28);\n *(s32*)(c + 0xa8) = v * data_ov065_0211d520[idx];\n\n if (idx == 2) {\n if (DecIfAbove0_Short((u16*)(c + 0x32a)) == 0) {\n u16 rnd = (u32)RandomIntInternal(data_0209e650) >> 16;\n if (rnd >= 0x7fff) {\n *(signed char*)(c + 0x328) = 1;\n } else {\n *(signed char*)(c + 0x328) = -1;\n }\n int r = rnd % 6 + 1;\n *(u16*)(c + 0x300 + 0x2a) = r * 0x1e;\n *(u16*)(c + 0x300 + 0x2c) = *(u16*)(c + 0x300 + 0x2a);\n } else {\n int a = *(u16*)(c + 0x300 + 0x2c);\n int b = *(u16*)(c + 0x300 + 0x2a);\n if (b >= a - 5) {\n *(s32*)(c + 0xa8) = 0;\n }\n }\n }\n\n _ZN5Actor9UpdatePosEP12CylinderClsn(c, 0);\n\n {\n int y = *(s32*)(c + 0x60);\n int lo = *(s32*)(c + 0x320);\n int hi = *(s32*)(c + 0x324);\n int in = 0;\n\n if (y >= lo)\n in = (y <= hi);\n\n if (in == 0) {\n int res = lo;\n if (y >= lo) {\n if (y <= hi)\n hi = y;\n res = hi;\n }\n *(s32*)(c + 0x60) = res;\n }\n }\n\n *(u8*)(c + 0x328) = -*(signed char*)(c + 0x300 + 0x28);\n _ZN8Platform21UpdateModelPosAndRotYEv(c);\n func_ov065_0211bc88(c);\n if (_ZN8Platform13IsClsnInRangeE5Fix12IiES1_(c, 0, 0) != 0)\n _ZN8Platform19UpdateClsnPosAndRotEv(c);\n return 1;\n}\n", "source": "fanout-gpt-5.6-luna"} {"module": "ov002", "addr": "0x020f1468", "name": "func_ov002_020f1468", "size": 272, "target_hex": "10402de908d04de20040a0e1e4009fe56f99fceb0010a0e1d40084e20120a0e30030e0e3d096fceb081094e50400a0e10f1001e22d13c4e5e2f4ffeb0400a0e1c7f4ffebb0009fe59199fceb0010a0e1fe38d4e1a4209fe5490f84e200308de504208de5bb2f84e294309fe54123fdeb490f84e28c109fe5b71ffdeb0000a0e32c03c4e5601094e5030c84e2191941e2201384e5081094e52114a0e1ff1001e2ba12c0e1dc1cd4e12e13c4e5ba02d0e1ff0050e30100000a000050e30300001a030c84e2fa10a0e3ba12c0e1050000ea34009fe50a10a0e3002084e0b000d2e1900101e0b010c2e10100a0e308d08de21040bde81eff2fe1cc0a1102c40a1102f4d6100299010000b8150f022a030000", "lang": "c", "divergences": 19, "c_source": "typedef int Fix12i;\ntypedef short s16;\n\nstruct SharedFilePtr;\n\nextern void* _ZN5Model8LoadFileER13SharedFilePtr(void* fp);\nextern void _ZN9ModelBase7SetFileEP8BMD_Fileii(void* m, void* f, int a, int b);\nextern void _ZN8Platform21UpdateModelPosAndRotYEv(void* c);\nextern void _ZN8Platform19UpdateClsnPosAndRotEv(void* c);\nextern void* _ZN12MeshCollider8LoadFileER13SharedFilePtr(void* fp);\nextern void _ZN18MovingMeshCollider7SetFileEP8KCL_FileRK9Matrix4x35Fix12IiEsR10CLPS_Block(\n void* mc, void* f, void* mtx, Fix12i fx, short s, void* clps);\nextern void func_020393c4(void* p, void* v);\n\nextern char data_ov002_02110acc;\nextern char data_ov002_02110ac4;\nextern char data_ov002_0210d6f4;\nextern void func_ov002_020f15b8(void);\n\nint func_ov002_020f1468(char* c)\n{\n void* bmd;\n void* kcl;\n unsigned int x;\n unsigned short* p;\n\n bmd = _ZN5Model8LoadFileER13SharedFilePtr(&data_ov002_02110acc);\n _ZN9ModelBase7SetFileEP8BMD_Fileii(c + 0xd4, bmd, 1, -1);\n\n *(unsigned char*)(c + 0x32d) = *(int*)(c + 8) & 0xf;\n _ZN8Platform21UpdateModelPosAndRotYEv(c);\n _ZN8Platform19UpdateClsnPosAndRotEv(c);\n\n kcl = _ZN12MeshCollider8LoadFileER13SharedFilePtr(&data_ov002_02110ac4);\n _ZN18MovingMeshCollider7SetFileEP8KCL_FileRK9Matrix4x35Fix12IiEsR10CLPS_Block(\n c + 0x124, kcl, c + 0x2ec, 0x199, *(s16*)(c + 0x8e),\n &data_ov002_0210d6f4);\n\n func_020393c4(c + 0x124, (void*)&func_ov002_020f15b8);\n\n *(unsigned char*)(c + 0x32c) = 0;\n *(int*)(c + 0x320) = *(int*)(c + 0x60) - 0x64000;\n\n p = (unsigned short*)(c + 0x300);\n x = *(unsigned int*)(c + 8);\n p[0x15] = (x >> 8) & 0xff;\n *(unsigned char*)(c + 0x32e) = *(signed char*)(c + 0xcc);\n\n if (p[0x15] == 0xff)\n goto multiply;\n if (p[0x15] != 0)\n goto done;\n\n p[0x15] = 0xfa;\n goto done;\n\nmultiply:\n *(unsigned short*)(((int)c + 0x32a) & 0xFFFFFFFFFFFFFFFFULL) =\n *(unsigned short*)(((int)c + 0x32a) & 0xFFFFFFFFFFFFFFFFULL) * 0xa;\n\ndone:\n return 1;\n}\n", "source": "fanout-gpt-5.6-luna"} -{"module": "ov002", "addr": "0x020e7218", "name": "func_ov002_020e7218", "size": 192, "target_hex": "10402de920d04de20040a0e1000052e31e00001a5c2081e2000092e508008de5040092e50c008de5080092e508209de510008de5bc00d4e1b20050e30100a0130000a003000050e30c009de514208de532c980e210009de50cc08de51c008de50130a01318c08de51500a0e300008de504108de5d826d1e538009fe50030a003d22090e114108de20400a0e166a3fceb24109fe50400a0e1012084e0b010d2e1401081e3b010c2e1a30000eb20d08de21040bde81eff2fe110f30902a2040000", "lang": "c", "divergences": 7, "c_source": "\nstruct V3 { int x, y, z; };\nextern void _ZN5Actor11SpawnNumberERK7Vector3jbtPS_(void* self, struct V3* pos, unsigned a, int b, unsigned short c, void* d);\nextern void func_ov002_020e7554(void* self);\nextern signed char data_0209f310[];\n\nvoid func_ov002_020e7218(char* c, char* a, int gate) {\n struct V3 pos;\n volatile int sp8, spc, sp10;\n if (gate == 0) {\n int *v = (int*)(((int)a + 0x5c) & 0xFFFFFFFFFFFFFFFF);\n int x, y, z, b, zz;\n /* sequential like ROM ldm style */\n x = v[0];\n sp8 = x;\n y = v[1];\n spc = y;\n z = v[2];\n x = sp8;\n sp10 = z;\n b = (int)(*(unsigned short*)(c + 0xc) != 0xb2);\n b = (int)(b != 0);\n y = (int)spc;\n pos.x = x;\n y = y + 0xc8000;\n zz = (int)sp10;\n spc = y;\n pos.z = zz;\n pos.y = y;\n _ZN5Actor11SpawnNumberERK7Vector3jbtPS_(c, &pos, data_0209f310[*(unsigned char*)(a+0x6d8)], b, 0x15, a);\n }\n *(unsigned short*)(((int)c + 0x4a2) & 0xFFFFFFFFFFFFFFFF) |= 0x40;\n func_ov002_020e7554(c);\n}\n", "source": "lunavyqo-e7f2c-nearmiss-pr"} {"module": "ov002", "addr": "0x020cfaf0", "name": "func_ov002_020cfaf0", "size": 236, "target_hex": "30402de994d04de20040a0e118008de22a9ffdebfe08d4e1602094e5c4509fe5020980e20008a0e14008a0e10008a0e12008a0e14002a0e18010a0e1010081e28110a0e18030a0e1f10095e1f35095e15c1094e5643094e5022842e2853283e0801281e000108de504208de508308de5643094e5602094e55c1094e5855283e080c281e002e882e218008de200108de20c208de20430a0e10cc08de510e08de514508de5b59efdeb18008de2a5a2fdeb000050e30500000a18008de2ec9efdeb94d08de20100a0e33040bde81eff2fe118008de2e69efdeb0000a0e394d08de23040bde81eff2fe114220802", "lang": "cpp", "divergences": 19, "c_source": "//cpp\ntypedef int Fix12i;\nstruct Vector3 { Fix12i x, y, z; };\nstruct Actor;\nstruct RaycastLine { char buf[0x7c]; };\n\nextern short data_02082214[];\n\nextern \"C\" {\nvoid* _ZN11RaycastLineC1Ev(RaycastLine* thiz);\nvoid _ZN11RaycastLine13SetObjAndLineERK7Vector3S2_P5Actor(RaycastLine* thiz, const Vector3* a, const Vector3* b, Actor* obj);\nint _ZN11RaycastLine10DetectClsnEv(RaycastLine* thiz);\nvoid _ZN11RaycastLineD1Ev(RaycastLine* thiz);\n\nint func_ov002_020cfaf0(char* c)\n{\n RaycastLine ray;\n Vector3 a;\n Vector3 b;\n _ZN11RaycastLineC1Ev(&ray);\n int idx = (unsigned short)(short)(*(short*)(c + 0x8e) + 0x8000) >> 4;\n int t1 = idx * 2;\n int t2 = t1 + 1;\n \n int s = data_02082214[t1];\n int cs = data_02082214[t2];\n \n int y1 = *(Fix12i*)(c + 0x60);\n \n int x1 = *(Fix12i*)(c + 0x5c);\n int z1 = *(Fix12i*)(c + 0x64);\n \n a.x = x1 + (s << 5);\n a.y = y1 - 0x20000;\n a.z = z1 + (cs << 5);\n \n int x2 = *(Fix12i*)(c + 0x5c);\n int y2 = *(Fix12i*)(c + 0x60);\n int z2 = *(Fix12i*)(c + 0x64);\n \n b.x = x2 + (s << 5);\n b.y = y2 + 0x20000;\n b.z = z2 + (cs << 5);\n \n _ZN11RaycastLine13SetObjAndLineERK7Vector3S2_P5Actor(&ray, &a, &b, (Actor*)c);\n if (_ZN11RaycastLine10DetectClsnEv(&ray) != 0) {\n _ZN11RaycastLineD1Ev(&ray);\n return 1;\n }\n _ZN11RaycastLineD1Ev(&ray);\n return 0;\n}\n}\n", "source": "fanout-glm-5.2"} {"module": "ov006", "addr": "0x020f46ec", "name": "func_ov006_020f46ec", "size": 236, "target_hex": "10402de90040a0e1531c84e2b202d1e1000050e30600000ac0009fe5001084e0b000d1e1010040e2b000c1e11040bde81eff2fe1050a84e23733d0e5ba22d1e1020053e10420a0a3142380a50000a0a3b202c1a11040bda81eff2fa100e0a0e30ec0a0e10430a0e10310a0e3050a83e2bb21d0e5000052e30300000abc21d0e5020052e3bc11c00501e08e0201c08ce20c005ce3183083e2f3ffffba02005ee3020000ca38009fe5ee77fceb010000ea30009fe5eb77fceb0400a0e1051a84e20320a0e3182381e583fcffeb530c84e22010a0e3b212c0e11040bde81eff2fe1225300004501000046010000", "lang": "cpp", "divergences": 20, "c_source": "//cpp\nnamespace Sound { void PlayBank2_2D(unsigned int); }\nextern \"C\" void func_ov006_020f39c8(char *p);\n\nextern \"C\" void func_ov006_020f46ec(char *c)\n{\n int cnt;\n int i;\n char *p;\n if (*(unsigned short *)(c + 0x5300 + 0x22) != 0) {\n unsigned short *q = (unsigned short *)(c + 0x5322);\n *q = *q - 1;\n return;\n }\n if (*(unsigned char *)(c + 0x5337) >= *(unsigned short *)(c + 0x532a)) {\n *(int *)(c + 0x5314) = 4;\n *(unsigned short *)(c + 0x5322) = 0;\n return;\n }\n cnt = 0;\n i = 0;\n p = c;\n for (; i < 0xc; i++) {\n if (*(unsigned char *)(p + 0x51bb) != 0) {\n if (*(unsigned char *)(p + 0x51bc) == 2) {\n *(unsigned char *)(p + 0x51bc) = 3;\n cnt++;\n }\n }\n p += 0x18;\n }\n if (cnt <= 2)\n Sound::PlayBank2_2D(0x145);\n else\n Sound::PlayBank2_2D(0x146);\n *(int *)(c + 0x5318) = 3;\n func_ov006_020f39c8(c);\n *(unsigned short *)(c + 0x5322) = 0x20;\n}\n", "source": "fanout-high4-2026-06-27"} {"module": "ov002", "addr": "0x020f19fc", "name": "_ZN14EnemySwitchTag8BehaviorEv", "size": 200, "target_hex": "10402de908d04de2a8109fe50040a0e1000091e5000050e308d08d120100a0131040bd181eff2f11080094e5010050e31200003a040050e31000008a78009fe578109fe5002090e5000091e5320052e30600000a330052e30400000a340052e30200000a8a6ffceb000050e30300000a08d08de20100a0e31040bde81eff2fe10000a0e300008de5082094e530109fe5d40094e5022191e7743084e20310a0e32182fcebd40084e50100a0e308d08de21040bde81eff2fe1ec0a1102acb4090218f3090298b41002", "lang": "c", "divergences": 20, "c_source": "typedef unsigned int u32;\ntypedef unsigned char u8;\n\nextern int _ZNK6Camera12IsUnderwaterEv(void);\nextern u32 _ZN5Sound8PlayLongEjjjRK7Vector3j(u32 a, u32 b, u32 c, void* v, u32 e);\nextern int data_ov002_02110aec;\nextern int data_0209b4ac;\nextern int data_0209f318;\nextern int data_ov002_0210b498[];\n\nint func_ov002_020f19fc(char* c)\n{\n if (data_ov002_02110aec != 0) return 1;\n\n if (*(u32*)(c + 8) >= 1 && *(u32*)(c + 8) <= 4) {\n int a = data_0209b4ac;\n data_0209f318;\n if (a != 0x32 && a != 0x33 && a != 0x34) {\n if (_ZNK6Camera12IsUnderwaterEv()) return 1;\n } else {\n return 1;\n }\n }\n\n *(u32*)(c + 0xd4) = _ZN5Sound8PlayLongEjjjRK7Vector3j(\n *(u32*)(c + 0xd4), 3, data_ov002_0210b498[*(u32*)(c + 8)], c + 0x74, 0);\n return 1;\n}\n", "source": "grindD-2026-06-22"} @@ -218,6 +223,7 @@ {"module": "ov002", "addr": "0x020ea100", "name": "func_ov002_020ea100", "size": 676, "target_hex": "70402de908d04de20050a0e1384495e5a5f4ffeb0060a0e10400a0e10610a0e14d7fffeb000050e36500000a010046e2010050e30500008a0500a0e11410a0e39df3ffeb0100a0e39c04c5e5060000ea030056e30400000a0500a0e10010a0e395f3ffeb0200a0e39c04c5e518029fe50610a0e3401485e500e085e0b000dee108229fe5011b85e20400c0e3b000cee1b0c0dee1023085e00000a0e302208ce3b020cee1b009c1e1381495e5602085e25cc081e200109ce5541485e504109ce5581485e508109ce55c1485e5001093e55c1085e5041093e5601085e5081093e5641085e5001092e51e1a81e2001082e5381495e5fe18d1e1b419c5e1bc08c5e10307d4e5000050e3030aa013800085158400851588008515010aa0038000850584008505880085050500a0e18cfcffeb0607d4e5000050e30800000a0010a0e34c019fe500108de5041090e5c30f85e20121a0e3013aa0e33ab1fceb070000ea0010a0e32c019fe500108de5041090e5c30f85e20121a0e3013aa0e331b1fceb04119fe5f50f85e2012085e0b010d2e10110c1e3011081e3b010c2e1001090e5001091e531ff2fe13c0495e5090050e32e00001a0000a0e37f1aa0e39aa2fceb2a0000ea0400a0e1897fffeb000050e30c00000a380495e5601085e25c2080e2000092e55c0085e5040092e5600085e5080092e5640085e5000091e5320980e2000081e5190000ea8c009fe50000d0e5010050e30100a0030000a013000050e30600000ad806d4e570109fe5d01091e1000051e30100000a0010e0e39a00fdeb0800a0e3400485e50218a0e30500a0e1a81085e50319a0e3981085e539fcffeb4a1f85e2000091e50100c0e3000081e50000a0e3b80485e5b80495e5b40485e508d08de27040bde81eff2fe1a2040000540400002409110244091102d8f2090210f30902", "lang": "cpp", "divergences": 21, "c_source": "//cpp\nextern \"C\" {\n\ntypedef unsigned char u8;\ntypedef unsigned short u16;\n\nextern int func_ov002_020e73ac(char *arg);\nextern int _ZN6Player12Unk_020c9e5cEh(void *thisPtr, int state);\nextern void func_ov002_020e6fbc(char *c, int arg);\nextern void func_ov002_020e9464(char *p);\nextern void _ZN9ModelAnim7SetAnimEP8BCA_Filei5Fix12IiEj(void *thisPtr, int bcaFile, int fixA, int fixB, unsigned int arg4);\nextern void _ZN5Sound17ChangeMusicVolumeEj5Fix12IiE(unsigned int a, int fixA);\nextern int func_ov002_020ca0f4(void *player);\nextern void GiveVsStars(int idx, int delta);\nextern void func_ov002_020e9448(unsigned char *p);\n\nextern char data_ov002_02110924[];\nextern char data_ov002_02110944[];\nextern unsigned char data_0209f2d8;\nextern signed char data_0209f310[];\n\nstruct VObj {\n virtual void unk0();\n};\n\nvoid func_ov002_020ea100(char *c)\n{\n char *common;\n int state;\n\n common = *(char **)(c + 0x438);\n state = func_ov002_020e73ac(c);\n\n if (_ZN6Player12Unk_020c9e5cEh(common, state)) {\n if (state == 1 || state == 2) {\n func_ov002_020e6fbc(c, 0x14);\n *(u8 *)(c + 0x49c) = 1;\n } else if (state != 3) {\n func_ov002_020e6fbc(c, 0);\n *(u8 *)(c + 0x49c) = 2;\n }\n\n int *posY = (int *)(((long long)(int)(c + 0x60)) & 0xFFFFFFFFFFFFFFFFLL);\n\n *(int *)(c + 0x440) = 6;\n *(u16 *)(((long long)(int)(c + 0x4a2)) & 0xFFFFFFFFFFFFFFFFLL) &= ~4;\n *(u16 *)(((long long)(int)(c + 0x4a2)) & 0xFFFFFFFFFFFFFFFFLL) |= 2;\n *(u16 *)(c + 0x490) = 0;\n\n {\n int *src = (int *)(((long long)(int)(*(int *)(c + 0x438) + 0x5c)) & 0xFFFFFFFFFFFFFFFFLL);\n int *cache = (int *)(((long long)(int)(c + 0x454)) & 0xFFFFFFFFFFFFFFFFLL);\n *(int *)(c + 0x454) = src[0];\n *(int *)(c + 0x458) = src[1];\n *(int *)(c + 0x45c) = src[2];\n *(int *)(c + 0x5c) = cache[0];\n *(int *)(c + 0x60) = cache[1];\n *(int *)(c + 0x64) = cache[2];\n *posY += 0x1e000;\n }\n\n *(short *)(c + 0x94) = *(short *)(*(int *)(c + 0x438) + 0x8e);\n *(u16 *)(c + 0x8c) = 0;\n\n if (*(u8 *)(common + 0x703) != 0) {\n *(int *)(c + 0x80) = 0x3000;\n *(int *)(c + 0x84) = 0x3000;\n *(int *)(c + 0x88) = 0x3000;\n } else {\n *(int *)(c + 0x80) = 0x1000;\n *(int *)(c + 0x84) = 0x1000;\n *(int *)(c + 0x88) = 0x1000;\n }\n\n func_ov002_020e9464(c);\n\n if (*(u8 *)(common + 0x706) != 0) {\n _ZN9ModelAnim7SetAnimEP8BCA_Filei5Fix12IiEj(c + 0x30c, *(int *)(data_ov002_02110924 + 4), 0x40000000, 0x1000, 0);\n } else {\n _ZN9ModelAnim7SetAnimEP8BCA_Filei5Fix12IiEj(c + 0x30c, *(int *)(data_ov002_02110944 + 4), 0x40000000, 0x1000, 0);\n }\n\n {\n struct VObj *vobj = (struct VObj *)(c + 0x3d4);\n *(u16 *)(c + 0x4a2) = (*(u16 *)(c + 0x4a2) & ~1) | 1;\n vobj->unk0();\n }\n\n if (*(int *)(c + 0x43c) == 9) {\n _ZN5Sound17ChangeMusicVolumeEj5Fix12IiE(0, 0x7f000);\n }\n } else {\n if (func_ov002_020ca0f4(common) != 0) {\n int *posY2 = (int *)(((long long)(int)(c + 0x60)) & 0xFFFFFFFFFFFFFFFFLL);\n int *s = (int *)(((long long)(int)(*(int *)(c + 0x438) + 0x5c)) & 0xFFFFFFFFFFFFFFFFLL);\n *(int *)(c + 0x5c) = s[0];\n *(int *)(c + 0x60) = s[1];\n *(int *)(c + 0x64) = s[2];\n *posY2 += 0xc8000;\n } else {\n int ok = (data_0209f2d8 == 1);\n if (ok) {\n unsigned char idx = *(u8 *)(common + 0x6d8);\n if (data_0209f310[idx] != 0) {\n GiveVsStars(idx, -1);\n }\n }\n *(int *)(c + 0x440) = 8;\n *(int *)(c + 0xa8) = 0x20000;\n *(int *)(c + 0x98) = 0xc000;\n func_ov002_020e9448((unsigned char *)c);\n *(int *)(((long long)(int)(c + 0x128)) & 0xFFFFFFFFFFFFFFFFLL) &= ~1;\n }\n }\n\n *(int *)(c + 0x4b8) = 0;\n *(int *)(c + 0x4b4) = *(int *)(c + 0x4b8);\n}\n\n}\n", "source": "fanout-sonnet"} {"module": "ov007", "addr": "0x020c73f0", "name": "func_ov007_020c73f0", "size": 276, "target_hex": "f04f2de904d04de200a0a0e10190a0e10280a0e10000a0e31010a0e30370a0e177f2ffeb0050a0e1caffffeb0811a0e10000a0e372f2ffeb080085e50911a0e10000a0e36ef2ffeb0c0085e5009085e5048085e5000058e30060a0e30a0000da0140a0e30a00a0e10910a0e10720a0e10430a0e1480100eb081095e5060181e7016086e2080056e1f5ffffba000059e30060a0e31a0000da0640a0e106b0a0e10a00a0e10810a0e10720a0e10430a0e1390100eb0c2095e50b10a0e1060182e7000058e30601a0e10a0000da083095e50c2095e5013193e7022090e7003093e5002092e5033090e7013182e7011081e2080051e1f4ffffba016086e2090056e1e6ffffba0500a0e104d08de2f04fbde81eff2fe1", "lang": "c", "divergences": 21, "c_source": "typedef struct T {\n int *p;\n} T;\n\ntypedef struct S {\n int n;\n int m;\n T **arr8;\n T **arrc;\n} S;\n\nextern void *func_ov007_020c3df4(int a, int size);\nextern void func_ov007_020c7348(S *s);\nextern T *func_ov007_020c798c(int a0, int a1, int a3, int flag);\n\nS *func_ov007_020c73f0(int a0, int a1, int a2, int a3) {\n S *s;\n int i;\n int j;\n s = (S *)func_ov007_020c3df4(0, 0x10);\n func_ov007_020c7348(s);\n s->arr8 = (T **)func_ov007_020c3df4(0, a2 * 4);\n s->arrc = (T **)func_ov007_020c3df4(0, a1 * 4);\n s->n = a1;\n s->m = a2;\n for (i = 0; i < a2; i++) {\n s->arr8[i] = func_ov007_020c798c(a0, a1, a3, 1);\n }\n for (i = 0; i < a1; i++) {\n s->arrc[i] = func_ov007_020c798c(a0, a2, a3, 0);\n for (j = 0; j < a2; j++) {\n s->arrc[i]->p[j] = s->arr8[j]->p[i];\n }\n }\n return s;\n}\n", "source": "group-a"} {"module": "arm9", "addr": "0x02072dac", "name": "func_02072dac", "size": 292, "target_hex": "f0432de90cd04de20040a0e10190a0e10020a0e3042089e50900a0e10410a0e1082089e59bfaffeb000050e30cd08d02f043bd081eff2f010c0099e5101099e5d8309fe5005041e09325c1e0c110a0e1a53fa0e10420a0e1011083e0300000eb000050e30cd08d02f043bd081eff2f01041090e5011011e208108012041089150810900504108905001090e5001089e5001090e5040099e5018044e06ffaffeb0070a0e304508de208408de200608de20610a0e1fafaffeb00109de5000051e30cd08d02f043bd081eff2f010510a0e1f3faffeb0410a0e1f1faffeb00109de5012087e0020058e10cd08d32f043bd381eff2f3104109de5017082e0070058e1eaffff8a041099e508009de5000081e0080089e50cd08de2f043bde81eff2fe1abaaaa2a", "lang": "c", "divergences": 21, "c_source": "struct E;\nextern int func_02071844(void **p, int v);\nextern struct E *func_02072ed0(struct E *base, int count, unsigned int key);\nextern void func_0207180c(unsigned char *p);\nextern unsigned char *func_02071a50(unsigned char *p, int *out);\n\nstruct S {\n unsigned char *f0;\n unsigned char *f1;\n int f2;\n int f3;\n int f4;\n};\n\nvoid func_02072dac(int r4, struct S *sb)\n{\n struct E *e;\n unsigned char *p;\n int a, b, c;\n unsigned int end;\n unsigned int acc;\n int *pa, *pb, *pc;\n\n sb->f1 = 0;\n sb->f2 = 0;\n if (!func_02071844((void **)sb, r4))\n return;\n e = func_02072ed0((struct E *)sb->f3, (sb->f4 - sb->f3) / 3, (unsigned int)r4);\n if (!e)\n return;\n if (*((int *)e + 1) & 1)\n sb->f1 = (unsigned char *)e + 8;\n else\n sb->f1 = (unsigned char *)*((int *)e + 2);\n sb->f0 = (unsigned char *)*(int *)e;\n end = (unsigned int)(r4 - *(int *)e);\n func_0207180c(sb->f1);\n acc = 0;\n pa = &a;\n pb = &b;\n pc = &c;\n p = sb->f1;\n p = func_02071a50(p, pa);\n if (a == 0)\n return;\n do {\n p = func_02071a50(p, pb);\n p = func_02071a50(p, pc);\n if (end < acc + (unsigned)a)\n return;\n acc = acc + (unsigned)a + (unsigned)b;\n p = func_02071a50(p, pa);\n } while (end > acc);\n sb->f2 = (int)sb->f1 + c;\n}\n", "source": "fanout"} +{"module": "ov002", "addr": "0x020e7454", "name": "func_ov002_020e7454", "size": 256, "target_hex": "30402de904d04de20050a0e1340495e5b4a6fcebdc109fe50040a0e1012085e0b010d2e15c3084e2150e85e23010c1e3b010c2e1002093e55c1085e25c2085e5042093e5602085e5082093e5642085e5ed38fdebd801d4e5030050e30d00001ada01d4e5440485e5440495e5400485e5400495e5040050e304d08d123040bd181eff2f110500a0e1e00700eb04d08de23040bde81eff2fe15c009fe554109fe50030f4e70900a0e34a2f85e20130c3e30030c4e50030d4e5011085e0023083e30030c4e5400485e5000092e5010080e3000082e5b000d1e10200c0e3b000c1e1b000d1e1080080e3b000c1e104d08de23040bde81eff2fe1a2040000db010000", "lang": "cpp", "divergences": 21, "c_source": "//cpp\nstruct Actor { static Actor* FindWithID(unsigned int); };\nextern \"C\" void func_02035860(void*, void*);\nextern \"C\" void func_ov002_020e9464(char* p);\nextern \"C\" void func_ov002_020e7454(char* self);\n\nvoid func_ov002_020e7454(char* self) {\n char* a = (char*)Actor::FindWithID(*(unsigned int*)(self + 0x434));\n unsigned short* f = (unsigned short*)(((long long)(int)(self + 0x4a2)) & 0xFFFFFFFFFFFFFFFFLL);\n int* src = (int*)(a + 0x5c);\n void* p150 = self + 0x150;\n *f &= ~0x30;\n *(int*)(self + 0x5c) = src[0];\n *(int*)(self + 0x60) = src[1];\n *(int*)(self + 0x64) = src[2];\n func_02035860(p150, self + 0x5c);\n if (*(unsigned char*)(a + 0x1d8) == 3) {\n *(int*)(self + 0x444) = *(unsigned char*)(a + 0x1da);\n *(int*)(self + 0x440) = *(int*)(self + 0x444);\n if (*(int*)(self + 0x440) != 4) return;\n func_ov002_020e9464(self);\n } else {\n unsigned char* q = (unsigned char*)(((long long)(int)(a + 0x1db)) & 0xFFFFFFFFFFFFFFFFLL);\n *q &= ~1;\n *q |= 2;\n *(int*)(self + 0x440) = 9;\n *(int*)(self + 0x128) |= 1;\n { unsigned short* g = (unsigned short*)(self + 0x4a2); *g &= ~2; *g |= 8; }\n }\n}\n", "source": "lunavyqo-batch3"} {"module": "arm9", "addr": "0x0205c528", "name": "func_0205c528", "size": 188, "target_hex": "f0472de90080a0e1006098e50270a0e1103086e2002093e50600a0e1022c82e3002083e5042098e5444096e50730a0e134ff2fe1000050e30400000a010050e30200000a060050e30500000a140000ea101086e2000091e5020cc0e3000081e50f0000eae2f5ffeb0050a0e10c4086e20090a0e301a0a0e3010000ea0400a0e1d0eeffeb100096e5020c10e20a00a0110900a001000050e3f7ffff1a0500a0e1d8f5ffeb041088e2000091e5070080e0000081e5f047bde81eff2fe1", "lang": "cpp", "divergences": 22, "c_source": "//cpp\nextern \"C\" {\n int _ZN3IRQ7DisableEv(void);\n void _ZN3IRQ7RestoreEj(unsigned int);\n void func_020580f0(void *p);\n}\n\nstruct Obj;\ntypedef int (*M44)(Obj *self, int a, int b, int c);\nstruct Obj {\n int f0, f4, f8, fc, f10;\n int pad[12];\n M44 m44;\n};\nstruct Outer {\n Obj *obj;\n int f4;\n};\n\nextern \"C\" void func_0205c528(Outer *thiz, int r1, int r7)\n{\n Obj *o = thiz->obj;\n int res;\n o->f10 |= 0x200;\n res = o->m44(o, r1, thiz->f4, r7);\n if (res == 0) goto clr;\n if (res == 1) goto clr;\n if (res == 6) {\n unsigned int saved = (unsigned int)_ZN3IRQ7DisableEv();\n int loop;\n do {\n func_020580f0(&o->fc);\n loop = (o->f10 & 0x200) ? 1 : 0;\n } while (loop);\n _ZN3IRQ7RestoreEj(saved);\n }\n goto end;\nclr:\n o->f10 &= ~0x200;\nend:\n thiz->f4 += r7;\n}\n", "source": "grindC-2026-06-22"} {"module": "ov002", "addr": "0x020bb27c", "name": "func_ov002_020bb27c", "size": 248, "target_hex": "30402de904d04de20040a0e18e05d4e50150a0e1000050e304d08d023040bd081eff2f018f05d4e5000050e304d08d123040bd181eff2f11741084e26200a0e3e85cfdeb080095e5020050e30200000a0307d5e5000050e31100000a8e15d4e52d00a0e3603084e2910002e0001093e50400a0e1021641e0001083e50010a0e38e15c4e54acd00eb0400a0e12fcd00eb1e00a0e304d08de29105c4e53040bde81eff2fe1602084e2001092e540009fe52d1a41e2001082e5002084e00010d2e50400a0e1011041e20010c2e538cd00eb0400a0e11dcd00eb0f00a0e38f05c4e51e00a0e39105c4e504d08de23040bde81eff2fe18e050000", "lang": "c", "divergences": 22, "c_source": "typedef unsigned char u8;\nstruct Vector3 { int x, y, z; };\nextern void _ZN5Sound9PlayBank3EjRK7Vector3(unsigned int id, const struct Vector3* v);\nextern void _ZN8Platform21UpdateModelPosAndRotYEv(char* c);\nextern void _ZN8Platform19UpdateClsnPosAndRotEv(char* c);\n\nvoid func_ov002_020bb27c(char* self, char* arg){\n if (*(u8*)(self+0x58e) == 0) return;\n if (*(u8*)(self+0x58f) != 0) return;\n _ZN5Sound9PlayBank3EjRK7Vector3(0x62, (struct Vector3*)(self+0x74));\n if (*(int*)(arg+8) == 2 || *(u8*)(arg+0x703) != 0) {\n *(int*)(self+0x60) -= (*(u8*)(self+0x58e) * 0x2d) << 12;\n *(u8*)(self+0x58e) = 0;\n _ZN8Platform21UpdateModelPosAndRotYEv(self);\n _ZN8Platform19UpdateClsnPosAndRotEv(self);\n *(u8*)(self+0x591) = 0x1e;\n } else {\n *(int*)(self+0x60) -= 0x2d000;\n *(u8*)(self+0x58e) -= 1;\n _ZN8Platform21UpdateModelPosAndRotYEv(self);\n _ZN8Platform19UpdateClsnPosAndRotEv(self);\n *(u8*)(self+0x58f) = 0xf;\n *(u8*)(self+0x591) = 0x1e;\n }\n return;\n}\n", "source": "grindE-2026-06-22"} {"module": "ov006", "addr": "0x020de0e0", "name": "func_ov006_020de0e0", "size": 244, "target_hex": "10402de90040a0e1050a84e2cc0190e5000050e31040bd081eff2f01c0009fe5c0109fe5003084e0002093e5b8009fe5012042e2002083e50010d1e50020a0e30101d0e70111a0e1000050e30300000a98009fe50100d0e7000050e30120a013000052e30800000a051a84e2cc0191e5800050e3040000ca0020a0e36200a0e3cc2181e57ad1fceb020000ea050a84e28010a0e3cc1180e5050a84e2cc1190e5000051e31040bdc81eff2fc10010a0e3cc1180e5df01d0e5000050e30200000a0600a0e33d4affeb1740ffeb1000a0e3274affeb0000a0e3c300c4e51040bde81eff2fe1cc510000400e0a02e80d0a02e90d0a02", "lang": "cpp", "divergences": 22, "c_source": "//cpp\nextern \"C\" void _ZN5Sound12PlayBank2_2DEj(unsigned int);\nextern \"C\" void func_ov004_020b0aa0(int arg);\nextern \"C\" void func_ov004_020ae20c(void);\nextern \"C\" void func_ov004_020b0a54(void* c);\nextern unsigned char data_020a0e40[];\nextern unsigned char data_020a0de8[];\nextern unsigned char data_020a0de9[];\n\nextern \"C\" void func_ov006_020de0e0(char* self)\n{\n if (*(int*)(self+0x51cc) == 0) return;\n *(int*)(self+0x51cc) -= 1;\n unsigned int idx = data_020a0e40[0];\n int flag = 0;\n if (data_020a0de8[idx*4] != 0) {\n if (data_020a0de9[idx*4] != 0) flag = 1;\n }\n if (flag != 0) {\n if (*(int*)(self+0x51cc) <= 0x80) {\n *(int*)(self+0x51cc) = 0;\n _ZN5Sound12PlayBank2_2DEj(0x62);\n } else {\n *(int*)(self+0x51cc) = 0x80;\n }\n } else {\n *(int*)(self+0x51cc) = 0x80;\n }\n if (*(int*)(self+0x51cc) > 0) return;\n *(int*)(self+0x51cc) = 0;\n if (*(unsigned char*)(self+0x51df) != 0) {\n func_ov004_020b0aa0(6);\n func_ov004_020ae20c();\n }\n func_ov004_020b0a54((void*)0x10);\n *(unsigned char*)(self+0xc3) = 0;\n}\n", "source": "fanout-high5-2026-06-28"} @@ -236,7 +242,6 @@ {"module": "ov002", "addr": "0x020b8dd4", "name": "func_ov002_020b8dd4", "size": 524, "target_hex": "10402de978d04de20020a0e396caa0e30230a0e1061ba0e30040a0e100c08de51ed600eb000050e378d08d120100a0131040bd181eff2f11980094e5000050e32f00000a960aa0e30010a0e308008de50c008de504108de510108de514108de518108de5f419d4e190019fe5c90bfeeb88119fe504008de210208de28066feeb10008de25c1084e20020a0e1876afeeb28008de2c0f9fdeb28008de210108de20020a0e383f9fdeb28008de22f00feeb000050e30500000ae81494e56c009de5000051e10000a01398008415010000ea0000a0e3980084e50400a0e10010a0e35d5ffdeb320e84e24efdfdeb0400a0e159d600eb0400a0e13ed600eb28008de296f9fdeb490f84e24b19a0e32f01feeb490f84e2961aa0e32801feeb0400a0e1fa19a0e3962aa0e38cd600eb980094e5000050e30c00000a5c0084e2681084e23010feeb000050e30700000a0000a0e300008de5ec0494e5743084e20310a0e39720a0e3fa64fdebec0484e590009fe55c1084e2000084e0fb0ffeeb4b0950e3180000baf00494e5000050e31500000abc10d0e16c009fe5000051e10f00001adc2494e51c208de5e00494e520008de5e41494e5960a80e224108de520008de5f01494e55c2081e520009de5600081e524009de5640081e5f00494e520dd00eb0000a0e3f00484e50000a0e3980084e50100a0e378d08de21040bde81eff2fe1680e0a02dc04000049010000", "lang": "c", "divergences": 23, "c_source": "typedef short s16;\ntypedef struct { int m[12]; } Matrix4x3;\ntypedef struct { int x, y, z; } Vector3;\n\nextern Matrix4x3 data_020a0e68;\n\nextern int _ZN8Platform20UpdateKillByMegaCharEsss5Fix12IiE(void *c, s16 a, s16 b, s16 d, int fix);\nextern void Matrix4x3_FromRotationY(Matrix4x3 *m, int angle);\nextern void MulVec3Mat4x3(Vector3 *v, Matrix4x3 *m, Vector3 *dst);\nextern void AddVec3(Vector3 *a, Vector3 *b, Vector3 *c);\nextern void _ZN13RaycastGroundC1Ev(char *thiz);\nextern void _ZN13RaycastGround12SetObjAndPosERK7Vector3P5Actor(char *thiz, Vector3 *v, void *actor);\nextern int _ZN13RaycastGround10DetectClsnEv(char *thiz);\nextern void _ZN13RaycastGroundD1Ev(char *thiz);\nextern void _ZN5Actor9UpdatePosEP12CylinderClsn(void *thiz, void *clsn);\nextern void func_020383fc(void *p);\nextern void _ZN8Platform21UpdateModelPosAndRotYEv(void *thiz);\nextern void _ZN8Platform19UpdateClsnPosAndRotEv(void *thiz);\nextern void func_020393a4(int *p, int v);\nextern void func_02039394(int *p, int v);\nextern int _ZN8Platform21IsClsnInRangeOnScreenE5Fix12IiES1_(void *thiz, int a, int b);\nextern int Vec3_Dist(Vector3 *a, Vector3 *b);\nextern unsigned int _ZN5Sound8PlayLongEjjjRK7Vector3j(unsigned int a, unsigned int b, unsigned int c, Vector3 *pos, unsigned int e);\nextern int Vec3_HorzDist(Vector3 *a, Vector3 *b);\nextern void func_ov002_020f0438(void *thiz);\n\nint func_ov002_020b8dd4(char *c)\n{\n Vector3 v;\n Vector3 dst;\n Vector3 pos;\n char ray[0x50];\n void *t;\n\n if (_ZN8Platform20UpdateKillByMegaCharEsss5Fix12IiE(c, 0x1800, 0, 0, 0x96000) != 0) {\n return 1;\n }\n\n if (*(int *)(c + 0x98) != 0) {\n v.x = 0;\n dst.x = 0;\n dst.y = 0;\n dst.z = 0;\n v.y = 0x96000;\n v.z = 0x96000;\n Matrix4x3_FromRotationY(&data_020a0e68, *(s16 *)(c + 0x94));\n MulVec3Mat4x3(&v, &data_020a0e68, &dst);\n AddVec3(&dst, (Vector3 *)(c + 0x5c), &dst);\n _ZN13RaycastGroundC1Ev(ray);\n _ZN13RaycastGround12SetObjAndPosERK7Vector3P5Actor(ray, &dst, 0);\n if (_ZN13RaycastGround10DetectClsnEv(ray) != 0) {\n if (*(int *)(c + 0x4e8) != *(int *)(ray + 0x44)) {\n *(int *)(c + 0x98) = 0;\n }\n } else {\n *(int *)(c + 0x98) = 0;\n }\n _ZN5Actor9UpdatePosEP12CylinderClsn(c, 0);\n func_020383fc(c + 0x320);\n _ZN8Platform21UpdateModelPosAndRotYEv(c);\n _ZN8Platform19UpdateClsnPosAndRotEv(c);\n _ZN13RaycastGroundD1Ev(ray);\n }\n\n func_020393a4((int *)(c + 0x124), 0x12c000);\n func_02039394((int *)(c + 0x124), 0x96000);\n _ZN8Platform21IsClsnInRangeOnScreenE5Fix12IiES1_(c, 0x3e8000, 0x96000);\n\n if (*(int *)(c + 0x98) != 0 && Vec3_Dist((Vector3 *)(c + 0x5c), (Vector3 *)(c + 0x68)) != 0) {\n *(unsigned int *)(c + 0x4ec) = _ZN5Sound8PlayLongEjjjRK7Vector3j(*(unsigned int *)(c + 0x4ec), 3, 0x97, (Vector3 *)(c + 0x74), 0);\n }\n\n if (Vec3_HorzDist((Vector3 *)(c + 0x4dc), (Vector3 *)(c + 0x5c)) >= 0x12c000) {\n t = *(void **)(c + 0x4f0);\n if (t != 0) {\n if (*(unsigned short *)((char *)t + 0xc) == 0x149) {\n pos.x = *(int *)(c + 0x4dc);\n pos.y = *(int *)(c + 0x4e0) + 0x96000;\n pos.z = *(int *)(c + 0x4e4);\n *(Vector3 *)((char *)t + 0x5c) = pos;\n func_ov002_020f0438(t);\n }\n *(void **)(c + 0x4f0) = 0;\n }\n }\n\n *(int *)(c + 0x98) = 0;\n return 1;\n}\n", "source": "fanout-sonnet"} {"module": "arm9", "addr": "0x02025f60", "name": "_ZN5Stage20PS_UpdateOptionsMenuEv", "size": 488, "target_hex": "f04f2de904d04de2bc019fe50000d0e5000050e3050aa013060aa0030008a0e12048a0e16fbc00eba0219fe5570f80e20010a0e3b030d0e1011081e20f0051e3023003e0043083e1b030c0e1b034d0e1023003e0043083e1b034c0e1b038d0e1023003e0043083e1b038c0e1b03cd0e1023003e0043083e1b03cc0e1020080e2ebffffba00a0a0e344919fe544519fe538419fe50a60a0e1037aa0e30189a0e350bc00eb8a10a0e1b12099e10010d5e5820080e00a0051e10810a0010710a0110118a0e10620a0e12118a0e1b030d0e1012082e20a0052e3043003e0013083e1b030c0e1b034d0e1043003e0013083e1b034c0e1020080e2f3ffffba01a08ae202005ae3e5ffffba00a0a0e3c8b09fe5c8909fe5c8509fe5b0409fe50a60a0e1057aa0e3068aa0e32ebc00eb8a10a0e1b11099e10020d5e5811080e00a0052e10300001a0000dbe5000050e30800a0010000000a0700a0e10028a0e10600a0e12228a0e1b030d1e1010080e2070050e3043003e0023083e1b030c1e1b034d1e1043003e0023083e1b034c1e1b038d1e1043003e0023083e1b038c1e1b03cd1e1043003e0023083e1b03cc1e1021081e2ebffffba01a08ae202005ae3d9ffffba04d08de2f04fbde81eff2fe1e4f20902ff030000c0550702e0f20902ccf20902c4550702ecf20902", "lang": "cpp", "divergences": 23, "c_source": "//cpp\ntypedef unsigned short u16;\ntypedef unsigned char u8;\n\nnamespace G2S { u16 *GetBG1ScrPtr(); }\n\nextern u8 data_0209f2e4;\nextern u16 data_020755c0[];\nextern u8 data_0209f2e0;\nextern u8 data_0209f2cc;\nextern u16 data_020755c4[];\nextern u8 data_0209f2ec;\n\nstruct Stage {\n static void PS_UpdateOptionsMenu();\n};\n\nvoid Stage::PS_UpdateOptionsMenu()\n{\n int i;\n int j;\n int counter;\n int mask;\n u16 sel;\n u16 *scr;\n u16 *scr2;\n u16 v;\n u16 *base;\n u16 *dataPtr;\n u8 *bytePtr;\n\n sel = (data_0209f2e4 != 0) ? 0x5000 : 0x6000;\n scr = G2S::GetBG1ScrPtr() + 0xae;\n for (j = 0; j < 0xf; j++) {\n scr[0] = (scr[0] & 0x3ff) | sel;\n scr[0x20] = (scr[0x20] & 0x3ff) | sel;\n scr[0x40] = (scr[0x40] & 0x3ff) | sel;\n scr[0x60] = (scr[0x60] & 0x3ff) | sel;\n scr++;\n }\n\n dataPtr = data_020755c0;\n bytePtr = &data_0209f2e0;\n mask = 0x3ff;\n for (i = 0; i < 2; i++) {\n base = G2S::GetBG1ScrPtr();\n counter = 0;\n v = (*bytePtr == i) ? 0x4000 : 0x3000;\n scr2 = base + dataPtr[i];\n for (; counter < 0xa; counter++) {\n scr2[0] = (scr2[0] & mask) | v;\n scr2[0x20] = (scr2[0x20] & mask) | v;\n scr2++;\n }\n }\n\n for (i = 0; i < 2; i++) {\n scr = G2S::GetBG1ScrPtr() + data_020755c4[i];\n v = (data_0209f2ec == i && data_0209f2cc == 0) ? 0x6000 : 0x5000;\n counter = 0;\n for (; counter < 7; counter++) {\n scr[0] = (scr[0] & 0x3ff) | v;\n scr[0x20] = (scr[0x20] & 0x3ff) | v;\n scr[0x40] = (scr[0x40] & 0x3ff) | v;\n scr[0x60] = (scr[0x60] & 0x3ff) | v;\n scr++;\n }\n }\n}\n", "source": "fanout-gpt-5.6-luna"} {"module": "ov006", "addr": "0x02100f7c", "name": "func_ov006_02100f7c", "size": 268, "target_hex": "30402de904d04de20140a0e10050a0e1e4009fe5041385e000c085e0050a81e204239ce76c1290e50433a0e1011082e004138ce7641290e56c0290e54126a0e1010950e3b4009fd5001085d0030091d7020c80d2030081d7a00052e304d08db23040bdb81eff2fb1043385e0051a83e20a08a0e3640281e50a00a0e39602c1e50020a0e378009fe56c2281e5521c83e24020a0e3b229c1e15deafceb64109fe5200801e08000a0e1a007b0e10800000a040385e0050a80e2011aa0e3681280e50010a0e39a12c0e504d08de23040bde81eff2fe1041385e0010aa0e3002060e2050a81e2682280e50110a0e39a12c0e504d08de23040bde81eff2fe1645200006c520000b8d40902ff7f0000", "lang": "c", "divergences": 23, "c_source": "typedef unsigned short u16;\ntypedef unsigned char u8;\n\nextern int RandomIntInternal(int *seed);\nextern int data_0209d4b8;\n\n#pragma opt_strength_reduction off\n#pragma opt_common_subs off\nvoid func_ov006_02100f7c(char *c, int i)\n{\n int B = *(int *)(c + i * 0x40 + 0x5000 + 0x26c);\n int A = *(int *)(c + i * 0x40 + 0x5264) + B;\n \n *(int *)(c + i * 0x40 + 0x5264) = A;\n\n if (B <= 0x4000)\n *(int *)(c + i * 0x40 + 0x526c) = *(int *)(c + i * 0x40 + 0x526c) + 0x200;\n \n if ((A >> 0xc) < 0xa0)\n return;\n\n *(int *)(c + i * 0x40 + 0x5264) = 0xa0000;\n *(u8 *)(c + i * 0x40 + 0x5296) = 0xa;\n *(int *)(c + i * 0x40 + 0x526c) = 0;\n *(u16 *)(c + i * 0x40 + 0x5292) = 0x40;\n if ((((unsigned int)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) << 1 >> 0xf) {\n *(int *)(c + i * 0x40 + 0x5268) = 0x1000;\n *(u8 *)(c + i * 0x40 + 0x529a) = 0;\n } else {\n *(int *)(c + i * 0x40 + 0x5268) = -0x1000;\n *(u8 *)(c + i * 0x40 + 0x529a) = 1;\n }\n}\n", "source": "fanout-glm-5.2"} -{"module": "ov006", "addr": "0x020fbcb8", "name": "func_ov006_020fbcb8", "size": 128, "lang": "c", "divergences": 18, "c_source": "extern unsigned int *func_02054de8(void);\n\nvoid func_ov006_020fbcb8(int unused, int arg1, int arg2, int arg3)\n{\n int x0, y0, a3, oy, z;\n (void)unused;\n /* target demand: sl=arg1, sb=arg3, r8=0, stack, r5=arg1-1, fp=arg2-1 */\n a3 = arg3;\n oy = 0;\n z = oy;\n y0 = arg1 - 1;\n x0 = arg2 - 1;\n for (; oy < 2; ++oy) {\n int gx = x0 + oy;\n int bx = gx & 7;\n int wx = gx >> 3;\n int ix = z;\n int boff = bx << 2;\n int woff = wx << 5;\n while (ix < 2) {\n int gy = y0 + ix;\n unsigned int *base = func_02054de8();\n int t = woff + (gy >> 3);\n unsigned int *p = (unsigned int *)((char *)base + (t << 5));\n p[bx] |= (unsigned)a3 << ((gy & 7) << 2);\n ix++;\n }\n }\n}\n", "source": "lunavyqo-batch3"} {"module": "ov002", "addr": "0x020aefb8", "name": "func_ov002_020aefb8", "size": 264, "target_hex": "10402de90040a0e12587fdeb510f84e2c619feeb000050e32500000aa43084e2002093e5d40094e50a10a0e3902122e0002083e5acc084e200309ce5dc2094e5510f84e2923121e000108ce5c419feeb000050e30000a003a80084050800000aa80094e598109fe50001a0e1002060e29102c3e04331a0e1a20fa0e1033080e0a83084e5a40084e2cc37feeb981094e5010050e1060000daa40084e2c737feeb980084e5980094e50f0a50e30f0aa0a3980084a50400a0e1111e84e23187fdeb0400a0e1511f84e20020a0e3dbfeffeb510f84e26619feeb000050e31040bd081eff2f01f439d4e1e01094e5e82094e50400a0e1dd84fdebb409c4e11040bde81eff2fe167666666", "lang": "cpp", "divergences": 24, "c_source": "//cpp\nstruct CylinderClsn;\nstruct WithMeshClsn {\n int IsOnGround() const;\n int JustHitGround() const;\n int IsOnWall() const;\n};\nstruct Actor {\n void UpdatePosWithHorzSpeedAndAng();\n void UpdatePosWithOnlySpeed(CylinderClsn*);\n short ReflectAngle(int, int, short);\n};\nstruct Enemy : Actor {\n void UpdateWMClsn(WithMeshClsn&, unsigned int);\n};\nextern \"C\" int Vec3_HorzLen(void*);\n\nextern \"C\" void func_ov002_020aefb8(char* self);\nvoid func_ov002_020aefb8(char* self) {\n ((Actor*)self)->UpdatePosWithHorzSpeedAndAng();\n if (((WithMeshClsn*)(self + 0x144))->IsOnGround()) {\n *(int*)(self + 0xa4) += *(int*)(self + 0xd4) * 0xa;\n *(int*)(self + 0xac) += *(int*)(self + 0xdc) * 0xa;\n if (((WithMeshClsn*)(self + 0x144))->JustHitGround()) {\n *(int*)(self + 0xa8) = -(*(int*)(self + 0xa8) << 2) / 10;\n } else {\n *(int*)(self + 0xa8) = 0;\n }\n if (Vec3_HorzLen(self + 0xa4) > *(int*)(self + 0x98)) {\n *(int*)(self + 0x98) = Vec3_HorzLen(self + 0xa4);\n if (*(int*)(self + 0x98) >= 0xf000) *(int*)(self + 0x98) = 0xf000;\n }\n }\n ((Actor*)self)->UpdatePosWithOnlySpeed((CylinderClsn*)(self + 0x110));\n ((Enemy*)self)->UpdateWMClsn(*(WithMeshClsn*)(self + 0x144), 0);\n if (!((WithMeshClsn*)(self + 0x144))->IsOnWall()) return;\n *(short*)(self + 0x94) = ((Actor*)self)->ReflectAngle(*(int*)(self + 0xe0), *(int*)(self + 0xe8), *(short*)(self + 0x94));\n}\n", "source": "grindE-2026-06-22"} {"module": "ov006", "addr": "0x020def80", "name": "func_ov006_020def80", "size": 164, "target_hex": "012080e0052a82e26534d2e5000053e30a00001a6224d2e5000052e301218010052a82120430a0133434821501218000052a82020130a00334348205120000ea6224d2e5000052e30b00000a012180e0052a82e20530a0e3343482e5052a80e26d34d2e5ff0053e30700001a6934d2e5010053e36d14c215030000ea012180e0052a82e20230a0e3343482e5010180e0050a80e20010a0e3401480e54c1480e51eff2fe1", "lang": "c", "divergences": 24, "c_source": "void func_ov006_020def80(char* c, int i)\n{\n if (*(unsigned char*)(c + i + 0x5465) == 0) {\n if (*(unsigned char*)(c + i + 0x5462) != 0) {\n *(int*)(c + i * 4 + 0x5434) = 4;\n } else {\n *(int*)(c + i * 4 + 0x5434) = 1;\n }\n goto done;\n }\n if (*(unsigned char*)(c + i + 0x5462) != 0) {\n *(int*)(c + i * 4 + 0x5434) = 5;\n if (*(unsigned char*)(c + 0x546d) == 0xff) {\n if (*(unsigned char*)(c + 0x5469) != 1) {\n *(unsigned char*)(c + 0x546d) = (unsigned char)i;\n }\n }\n goto done;\n }\n *(int*)(c + i * 4 + 0x5434) = 2;\n *(int*)(c + i * 4 + 0x5440) = 0;\n *(int*)(c + i * 4 + 0x544c) = 0;\ndone:\n ;\n}\n", "source": "harvest-final"} {"module": "ov015", "addr": "0x021124d0", "name": "_ZN14MovingBarSmall8BehaviorEv", "size": 460, "target_hex": "10402de908d04de20040a0e1081094e5ff1001e2010051e31700001a390e84e237a2fceb000050e30500001a942084e2f010d2e18700a0e3021981e2b010c2e19003c4e50400a0e10010a0e3c3f9fbeb0400a0e1c170ffeb0400a0e11518a0e3012aa0e3cd70ffeb000050e34a00000a0400a0e1a070ffeb470000ea020051e34200001a390e84e21da2fceb000050e32400001a9203d4e5000050e32100000a0400a0e10010a0e3acf9fbeb7c2394e5600094e5020050e10110a0a30010a0b3000051e30900001a020050e10020a0a1602084e50a0aa0e3a80084e59103d4e5000050e30000a0039203c4050d0000ea802394e5020050e10110a0d30010a0c3000051e30700001a020050e10020a0d10a0aa0e3602084e5000060e2a80084e55a00a0e39003c4e50400a0e18b70ffeb0400a0e11518a0e3012aa0e39770ffeb000050e30100000a0400a0e16a70ffeb5c0084e2681084e26baafceb000050e30700000a0000a0e300008de58c0394e5743084e20310a0e38220a0e335fffbeb8c0384e50000a0e39103c4e5020000ea1518a0e3012aa0e38070ffeb490f84e21518a0e34a9bfceb490f84e2011aa0e3439bfceb0400a0e14effffeb0100a0e308d08de21040bde81eff2fe1", "lang": "cpp", "divergences": 24, "c_source": "//cpp\ntypedef int s32;\ntypedef unsigned int u32;\ntypedef unsigned short u16;\ntypedef signed short s16;\ntypedef unsigned char u8;\n\nextern \"C\" {\nu8 DecIfAbove0_Byte(u8 *p);\nvoid _ZN5Actor9UpdatePosEP12CylinderClsn(void *c, void *cc);\nvoid _ZN8Platform21UpdateModelPosAndRotYEv(void *c);\nint _ZN8Platform13IsClsnInRangeE5Fix12IiES1_(void *c, int a, int b);\nvoid _ZN8Platform19UpdateClsnPosAndRotEv(void *c);\nint Vec3_Dist(const void *a, const void *b);\nu32 _ZN5Sound8PlayLongEjjjRK7Vector3j(u32 a, u32 b, u32 d, const void *v, u32 e);\nvoid func_020393a4(int *p, int v);\nvoid func_02039394(int *p, int v);\nvoid func_ov015_021123c8(char *c);\n}\n\nextern \"C\" int func_ov015_021124d0(char *c)\n{\n int v = *(int *)(c + 8) & 0xff;\n if (v == 1) {\n if (DecIfAbove0_Byte((u8 *)(c + 0x390)) == 0) {\n *(s16 *)(((int)c + 0x94) & 0xFFFFFFFFFFFFFFFFLL) += 0x8000;\n *(u8 *)(c + 0x390) = 0x87;\n }\n _ZN5Actor9UpdatePosEP12CylinderClsn(c, 0);\n _ZN8Platform21UpdateModelPosAndRotYEv(c);\n if (_ZN8Platform13IsClsnInRangeE5Fix12IiES1_(c, 0x150000, 0x1000))\n _ZN8Platform19UpdateClsnPosAndRotEv(c);\n goto done;\n }\n if (v == 2) {\n if (DecIfAbove0_Byte((u8 *)(c + 0x390)) == 0 && *(u8 *)(c + 0x392) != 0) {\n s32 y, lim;\n int b;\n _ZN5Actor9UpdatePosEP12CylinderClsn(c, 0);\n lim = *(s32 *)(c + 0x37c);\n y = *(s32 *)(c + 0x60);\n b = (y >= lim);\n if (b == false) {\n if (y >= lim)\n lim = y;\n *(s32 *)(c + 0x60) = lim;\n *(s32 *)(c + 0xa8) = 0xa000;\n if (*(u8 *)(c + 0x391) == 0)\n *(u8 *)(c + 0x392) = 0;\n } else {\n lim = *(s32 *)(c + 0x380);\n b = y <= lim;\n if (b == false) {\n if (y <= lim)\n lim = y;\n *(s32 *)(c + 0x60) = lim;\n *(s32 *)(c + 0xa8) = -0xa000;\n *(u8 *)(c + 0x390) = 0x5a;\n _ZN8Platform21UpdateModelPosAndRotYEv(c);\n if (_ZN8Platform13IsClsnInRangeE5Fix12IiES1_(c, 0x150000, 0x1000))\n _ZN8Platform19UpdateClsnPosAndRotEv(c);\n if (Vec3_Dist(c + 0x5c, c + 0x68) != 0) {\n *(u32 *)(c + 0x38c) = _ZN5Sound8PlayLongEjjjRK7Vector3j(\n *(u32 *)(c + 0x38c), 3, 0x82, c + 0x74, 0);\n *(u8 *)(c + 0x391) = 0;\n }\n }\n }\n }\n goto done;\n }\n\n _ZN8Platform13IsClsnInRangeE5Fix12IiES1_(c, 0x150000, 0x1000);\ndone:\n func_020393a4((int *)(c + 0x124), 0x150000);\n func_02039394((int *)(c + 0x124), 0x1000);\n func_ov015_021123c8(c);\n return 1;\n}", "source": "fanout-opus"} @@ -268,6 +273,7 @@ {"module": "ov006", "addr": "0x020d1ba0", "name": "func_ov006_020d1ba0", "size": 2528, "target_hex": "70402de950d04de20060a0e1012986e20a07d2e5ff0050e350d08d227040bd281eff2f21051a86e2dd03d1e5010050e350d08d027040bd081eff2f0184099fe584399fe500c0d0e5f05692e5f44692e50c01d3e70cc1a0e1000050e37400000a68099fe568399fe50c00d0e70cc0d3e7000050e350d08db27040bdb81eff2fb1010c50e350d08da27040bda81eff2fa100005ce350d08db27040bdb81eff2fb1003792e503005ce150d08da27040bda81eff2fa1de13d1e5000051e350d08d127040bd181eff2f11f00682e5f4c682e5e83692e50010e0e3010053e10200000aec2692e5010052e10600001a011986e2e80681e5ecc681e5e81691e5dc00a0e30116a0e19b02fdeb0000e0e3000055e10300001a000054e150d08d027040bd081eff2f01010986e2f03690e5030055e10700001af40690e5000054e1050a86020110a003c813c00550d08d027040bd081eff2f01010986e2f41690e5050a86e200108de5e4c390e50600a0e10510a0e10420a0e104c08de50140a0e308408de52772ffeb050a86e2c803d0e5010050e31300001a010986e2f00690e50006a0e16802fdeb0010a0e300108de504108de508008de50c108de5050a86e2cc0390e50210a0e3de20a0e30430a0e3bd01fdeb051a86e2cc0381e550d08de27040bde81eff2fe1010986e2f00690e50006a0e15402fdeb0010a0e300108de504108de508008de50c108de5050a86e2cc0390e50210a0e3dd20a0e30430a0e3a901fdeb051a86e2cc0381e550d08de27040bde81eff2fe1000050e30400001a94079fe50c00d0e7000050e30100a0130000001a0000a0e3000050e3cc01000a010986e2e83690e50010e0e3010053e1dd00000aec2690e5010052e1da00000a010055e1d800000a010054e1d600000a0417d0e5000051e38e00001a030055e000006042100050e3030000aa020054e000006042100050e3cb0000ba210055e30f0000ba3f0055e30d0000ca410053e3640000ba5f0053e3620000ca010986e26010a0e3d81680e5ec2690e52010a0e3dc2680e5e01680e5f41690e5e41680e5580000ea410055e30f0000ba5f0055e30d0000ca210053e3520000ba3f0053e3500000ca010986e22010a0e3d81680e5ec2690e56010a0e3dc2680e5e01680e5f41690e5e41680e5460000ea610055e30f0000ba7f0055e30d0000ca810053e3400000ba9f0053e33e0000ca010986e2a010a0e3d81680e5ec2690e56010a0e3dc2680e5e01680e5f41690e5e41680e5340000ea810055e30f0000ba9f0055e30d0000ca610053e32e0000ba7f0053e32c0000ca010986e26010a0e3d81680e5ec2690e5a010a0e3dc2680e5e01680e5f41690e5e41680e5220000eaa10055e30f0000babf0055e30d0000cac10053e31c0000badf0053e31a0000ca010986e2e010a0e3d81680e5ec2690e5a010a0e3dc2680e5e01680e5f41690e5e41680e5100000eac10055e30e0000badf0055e30c0000caa10053e30a0000babf0053e3080000ca010986e2a010a0e3d81680e5ec2690e5e010a0e3dc2680e5e01680e5f41690e5e41680e5013986e2d80693e5000050e35c0000bae00693e5000050e3590000bad80693e520108de220008de5dc0693e528208de224008de5e04693e50600a0e128408de5e43693e52c308de54b0100eb000050e30100a0030000a013000050e3010986120110a0130417c0150517c015440000ea0517d0e5000051e34100001ad80690e5004055e0001064420410a05100c053e000206c420c20a051020051e1100000ba000054e3004064b2200054e31a0000ba000055e1401040b2010986b2e01680b5401080a2010986a2e01680a5010986e2e41690e5dc1680e5f41690e5e41680e50d0000ea00005ce300c06cb220005ce3090000ba000053e1401040b2010986b2e01680b5401080a2010986a2e01680a5010986e2ec1690e5e41680e5013986e2d80693e5000050e3150000bae00693e5000050e3120000bad80693e530108de230008de5dc0693e538208de234008de5e04693e50600a0e138408de5e43693e53c308de5040100eb000050e30100a0030000a013000050e3010986120110a0130517c015010986e20417d0e5000051e30200000a0517d0e5000051e31300001a050a86e2de13d0e5000051e30400001add03d0e5000050e30100001a0e00a0e37101fdeb0600a0e19ffcffeb010986e20010e0e3d81680e5dc1680e5e01680e5e41680e550d08de27040bde81eff2fe1e02690e5d81690e5010052e11200001a0600a0e1050500eb00c0a0e30c40a0e10c20a0e10c30a0e1010986e20350a0e10c1790e5011084e00120c5e7015085e2560f55e3f9ffffba01c08ce2010c5ce3564f84e2f4ffffbab70000ead83690e510308de5dc1690e514108de5e02690e514509de518208de5e40690e5020053e11c008de5021083b2020042b210108db5021043a210108da518008db5020082a218008da510c09de518409de51c309de540108de248208de20600a0e140c08de544508de548408de54c308de5ae0000eb010050e30100a0030000a013000050e31300000a050a86e2de13d0e5000051e30400001add03d0e5000050e30100001a0e00a0e32401fdeb0600a0e152fcffeb010986e20010e0e3d81680e5dc1680e5e01680e5e41680e550d08de27040bde81eff2fe1012986e2e03692e5d80692e5030050e10b0000aa105792e5561fa0e3935124e0e43692e5033084e01832d3e5000053e390512100dc06920500008100983050050a0000ea105792e5561fa0e3935124e0e43692e5033084e0983053e5000053e390512100dc069205000081001832d005000053e34f00001a0600a0e129fcffeb010986e20120a0e30627c0e51c109de5050a86e200108de5e41390e50600a0e104108de508208de510109de514209de518309de57870ffeb10109de518009de5000051e1170000aa14209de5011041e200208de5050a86e2e40390e50140a0e304008de50600a0e10130a0e108408de56970ffeb18009de51c209de5011080e200208de5050a86e2e44390e50600a0e10130a0e104408de50140a0e308408de55d70ffeb160000ea14209de5011081e200208de5050a86e2e40390e50140a0e304008de50600a0e10130a0e108408de55170ffeb18009de51c209de5011040e200208de5050a86e2e44390e50600a0e10130a0e104408de50140a0e308408de54570ffeb0600a0e1011986e20020a0e30627c1e5690400ebb4109fe5df00a0e3012086e00010d2e5011081e20010c2e59d00fdeb130000ea050a86e2de13d0e5000051e30400001add03d0e5000050e30100001a0e00a0e3a200fdeb0600a0e1d0fbffeb010986e20010e0e3d81680e5dc1680e5e01680e5e41680e550d08de27040bde81eff2fe1010986e20010e0e3f01680e5f41680e5e81680e5ec1680e50010a0e30417c0e50517c0e5050a86e2c813c0e550d08de27040bde81eff2fe1400e0a02e80d0a02ea0d0a02eb0d0a02e90d0a020a470000", "lang": "c", "divergences": 28, "c_source": "extern void func_02012718(void *a, int b);\nextern int func_ov004_020ae5c4(void *a, int b, int c, int d, int e, int f, int g);\nextern int func_020126e8(int a);\nextern int func_02012468(int a, int b, int c, int d, int e, int f, int g, int h);\nextern int func_ov006_020d2580(void *this, int *p1, int *p2);\nextern void func_02012790(int a);\nextern void func_ov006_020d1450(void *a);\nextern void func_ov006_020d3624(void *a);\nextern void func_ov006_020d3668(void *a);\nextern void _ZN5Sound12PlayBank2_2DEj(unsigned int a);\n\nextern unsigned char data_020a0e40[];\nextern unsigned char data_020a0de8[];\nextern unsigned char data_020a0de9[];\nextern unsigned char data_020a0dea[];\nextern unsigned char data_020a0deb[];\n\nvoid func_ov006_020d1ba0(void *arg0)\n{\n char *p = (char*)arg0;\n volatile int sp10, sp14, sp18, sp1c;\n int oldX, oldY;\n int dx;\n\n if ((unsigned)*(unsigned char*)(p+0x470a) >= 0xff) return;\n if (*(unsigned char*)(p+0x53dd) == 1) return;\n\n oldX = *(int*)(p+0x46f0);\n oldY = *(int*)(p+0x46f4);\n\n if (data_020a0de8[data_020a0e40[0]*4] != 0) {\n int newX = data_020a0dea[data_020a0e40[0]*4];\n int newY = data_020a0deb[data_020a0e40[0]*4];\n if (newX < 0) return;\n if (newX >= 0x100) return;\n if (newY < 0) return;\n if (newY >= *(int*)(p+0x4700)) return;\n if (*(unsigned char*)(p+0x53de) != 0) return;\n *(int*)(p+0x46f0) = newX;\n *(int*)(p+0x46f4) = newY;\n if (*(int*)(p+0x46e8) == -1 || *(int*)(p+0x46ec) == -1) {\n *(int*)(p+0x46e8) = newX;\n *(int*)(p+0x46ec) = newY;\n func_02012718((void*)0xdc, *(int*)(p+0x46e8) << 0xc);\n }\n if (oldX == -1 && oldY == -1) return;\n if (oldX == *(int*)(p+0x46f0) && oldY == *(int*)(p+0x46f4)) {\n *(unsigned char*)(p+0x53c8) = 1;\n return;\n }\n func_ov004_020ae5c4(arg0, oldX, oldY, *(int*)(p+0x46f0), *(int*)(p+0x46f4), *(int*)(p+0x53e4), 1);\n if (*(unsigned char*)(p+0x53c8) == 1) {\n *(int*)(p+0x53cc) = func_02012468(*(int*)(p+0x53cc), 2, 0xde, 4, 0, 0, func_020126e8(*(int*)(p+0x46f0) << 0xc), 0);\n return;\n }\n *(int*)(p+0x53cc) = func_02012468(*(int*)(p+0x53cc), 2, 0xdd, 4, 0, 0, func_020126e8(*(int*)(p+0x46f0) << 0xc), 0);\n return;\n } else {\n int cond;\n if (data_020a0de8[data_020a0e40[0]*4] == 0 && data_020a0de9[data_020a0e40[0]*4] != 0) {\n cond = 1;\n } else {\n cond = 0;\n }\n if (cond != 0) {\n {\n if (*(int*)(p+0x46e8) != -1 && *(int*)(p+0x46ec) != -1 && oldX != -1 && oldY != -1) {\n if (*(unsigned char*)(p+0x4704) == 0) {\n int d1 = oldX - *(int*)(p+0x46e8); if (d1 < 0) d1 = -d1;\n if (d1 < 0x10) {\n int d2 = oldY - *(int*)(p+0x46ec); if (d2 < 0) d2 = -d2;\n if (d2 >= 0x10) goto classify;\n } else {\n classify:\n if (oldX >= 0x21 && oldX <= 0x3f) {\n if (*(int*)(p+0x46e8) >= 0x41 && *(int*)(p+0x46e8) <= 0x5f) {\n *(int*)(p+0x46d8) = 0x60;\n *(int*)(p+0x46dc) = *(int*)(p+0x46ec);\n *(int*)(p+0x46e0) = 0x20;\n *(int*)(p+0x46e4) = *(int*)(p+0x46f4);\n }\n } else if (oldX >= 0x41 && oldX <= 0x5f) {\n if ((*(int*)(p+0x46e8)) >= 0x21 && (*(int*)(p+0x46e8)) <= 0x3f) {\n *(int*)(p+0x46d8) = 0x20;\n *(int*)(p+0x46dc) = *(int*)(p+0x46ec);\n *(int*)(p+0x46e0) = 0x60;\n *(int*)(p+0x46e4) = *(int*)(p+0x46f4);\n }\n } else if (oldX >= 0x61 && oldX <= 0x7f) {\n if ((*(int*)(p+0x46e8)) >= 0x81 && (*(int*)(p+0x46e8)) <= 0x9f) {\n *(int*)(p+0x46d8) = 0xa0;\n *(int*)(p+0x46dc) = *(int*)(p+0x46ec);\n *(int*)(p+0x46e0) = 0x60;\n *(int*)(p+0x46e4) = *(int*)(p+0x46f4);\n }\n } else if (oldX >= 0x81 && oldX <= 0x9f) {\n if ((*(int*)(p+0x46e8)) >= 0x61 && (*(int*)(p+0x46e8)) <= 0x7f) {\n *(int*)(p+0x46d8) = 0x60;\n *(int*)(p+0x46dc) = *(int*)(p+0x46ec);\n *(int*)(p+0x46e0) = 0xa0;\n *(int*)(p+0x46e4) = *(int*)(p+0x46f4);\n }\n } else if (oldX >= 0xa1 && oldX <= 0xbf) {\n if ((*(int*)(p+0x46e8)) >= 0xc1 && (*(int*)(p+0x46e8)) <= 0xdf) {\n *(int*)(p+0x46d8) = 0xe0;\n *(int*)(p+0x46dc) = *(int*)(p+0x46ec);\n *(int*)(p+0x46e0) = 0xa0;\n *(int*)(p+0x46e4) = *(int*)(p+0x46f4);\n }\n } else if (oldX >= 0xc1 && oldX <= 0xdf && (*(int*)(p+0x46e8)) >= 0xa1 && (*(int*)(p+0x46e8)) <= 0xbf) {\n *(int*)(p+0x46d8) = 0xa0;\n *(int*)(p+0x46dc) = *(int*)(p+0x46ec);\n *(int*)(p+0x46e0) = 0xe0;\n *(int*)(p+0x46e4) = *(int*)(p+0x46f4);\n }\n if (*(volatile int*)(p+0x46d8) >= 0 && *(volatile int*)(p+0x46e0) >= 0) {\n int pp1[2], pp2[2];\n pp1[0] = *(int*)(p+0x46d8);\n pp1[1] = *(int*)(p+0x46dc);\n pp2[0] = *(int*)(p+0x46e0);\n pp2[1] = *(int*)(p+0x46e4);\n {\n int ok;\n if (func_ov006_020d2580(arg0, pp1, pp2) == 0) { ok = 1; } else { ok = 0; }\n if (ok != 0) {\n *(unsigned char*)(p+0x4704) = 1;\n *(unsigned char*)(p+0x4705) = 1;\n }\n }\n }\n }\n } else if (*(unsigned char*)(p+0x4705) == 0) {\n int va1, va2, vip;\n dx = oldX - *(int*)(p+0x46d8);\n if (dx < 0) va1 = -dx; else va1 = dx;\n vip = (*(int*)(p+0x46e8)) - *(int*)(p+0x46d8);\n if (vip < 0) va2 = -vip; else va2 = vip;\n if (va1 >= va2) {\n if (dx < 0) dx = -dx;\n if (dx >= 0x20) {\n if (oldX < *(int*)(p+0x46d8)) *(int*)(p+0x46e0) = *(int*)(p+0x46d8) - 0x40;\n else *(int*)(p+0x46e0) = *(int*)(p+0x46d8) + 0x40;\n *(int*)(p+0x46dc) = *(int*)(p+0x46e4);\n *(int*)(p+0x46e4) = *(int*)(p+0x46f4);\n }\n } else {\n int t = (*(int*)(p+0x46e8)) - *(int*)(p+0x46d8);\n if (t < 0) t = -t;\n if (t >= 0x20) {\n if ((*(int*)(p+0x46e8)) < *(int*)(p+0x46d8)) *(int*)(p+0x46e0) = *(int*)(p+0x46d8) - 0x40;\n else *(int*)(p+0x46e0) = *(int*)(p+0x46d8) + 0x40;\n *(int*)(p+0x46e4) = *(int*)(p+0x46ec);\n }\n }\n if (*(volatile int*)(p+0x46d8) >= 0 && *(volatile int*)(p+0x46e0) >= 0) {\n int pp1[2], pp2[2];\n pp1[0] = *(int*)(p+0x46d8);\n pp1[1] = *(int*)(p+0x46dc);\n pp2[0] = *(int*)(p+0x46e0);\n pp2[1] = *(int*)(p+0x46e4);\n {\n int ok;\n if (func_ov006_020d2580(arg0, pp1, pp2) == 0) { ok = 1; } else { ok = 0; }\n if (ok != 0) {\n *(unsigned char*)(p+0x4705) = 1;\n }\n }\n }\n }\n }\n }\n\n if (*(unsigned char*)(p+0x4704) == 0 || *(unsigned char*)(p+0x4705) == 0) {\n if (*(unsigned char*)(p+0x53de) == 0 && *(unsigned char*)(p+0x53dd) == 0) func_02012790(0xe);\n func_ov006_020d1450(arg0);\n *(int*)(p+0x46d8) = -1;\n *(int*)(p+0x46dc) = -1;\n *(int*)(p+0x46e0) = -1;\n *(int*)(p+0x46e4) = -1;\n return;\n }\n if (*(volatile int*)(p+0x46e0) == *(volatile int*)(p+0x46d8)) {\n int i, j;\n func_ov006_020d3624(arg0);\n for (i = 0; i < 0x100; i++) {\n for (j = 0; j < 0x158; j++) {\n *(*(unsigned char**)(p+0x470c) + i*0x158 + j) = 0;\n }\n }\n goto Lreset990;\n } else {\n int b8, e0;\n b8 = *(int*)(p+0x46d8);\n sp10 = b8;\n sp14 = *(int*)(p+0x46dc);\n e0 = *(int*)(p+0x46e0);\n sp18 = e0;\n sp1c = *(int*)(p+0x46e4);\n if (b8 < e0) { sp10 = b8+2; sp18 = e0-2; }\n else { sp10 = b8-2; sp18 = e0+2; }\n {\n int pp1[2], pp2[2];\n int ok;\n pp1[0] = sp10; pp1[1] = sp14; pp2[0] = sp18; pp2[1] = sp1c;\n if (func_ov006_020d2580(arg0, pp1, pp2) == 1) { ok = 1; } else { ok = 0; }\n if (ok != 0) {\n if (*(unsigned char*)(p+0x53de) == 0 && *(unsigned char*)(p+0x53dd) == 0) func_02012790(0xe);\n func_ov006_020d1450(arg0);\n *(int*)(p+0x46d8) = -1;\n *(int*)(p+0x46dc) = -1;\n *(int*)(p+0x46e0) = -1;\n *(int*)(p+0x46e4) = -1;\n return;\n }\n }\n {\n int match;\n int boxE0v = *(int*)(p+0x46e0);\n int boxD8v = *(int*)(p+0x46d8);\n if (boxD8v < boxE0v) {\n match = *(unsigned char*)(*(unsigned char**)(p+0x4710) + boxE0v*0x158 + *(int*)(p+0x46e4) + 0x218);\n if (match == 0) {\n match = *(unsigned char*)(*(unsigned char**)(p+0x4710) + boxD8v*0x158 + *(int*)(p+0x46dc) - 0x98);\n }\n } else {\n match = *(unsigned char*)(*(unsigned char**)(p+0x4710) + boxE0v*0x158 + *(int*)(p+0x46e4) - 0x98);\n if (match == 0) {\n match = *(unsigned char*)(*(unsigned char**)(p+0x4710) + boxD8v*0x158 + *(int*)(p+0x46dc) + 0x218);\n }\n }\n if (match == 0) {\n int t1, a, b, c;\n func_ov006_020d1450(arg0);\n *(unsigned char*)(p+0x4706) = 1;\n func_ov004_020ae5c4(arg0, sp10, sp14, sp18, sp1c, *(int*)(p+0x53e4), 1);\n a = sp10;\n b = sp18;\n if (a < b) {\n t1 = a - 1;\n c = sp14;\n func_ov004_020ae5c4(arg0, t1, c, t1, c, *(int*)(p+0x53e4), 1);\n t1 = sp18 + 1;\n c = sp1c;\n func_ov004_020ae5c4(arg0, t1, c, t1, c, *(int*)(p+0x53e4), 1);\n } else {\n t1 = a + 1;\n c = sp14;\n func_ov004_020ae5c4(arg0, t1, c, t1, c, *(int*)(p+0x53e4), 1);\n t1 = sp18 - 1;\n c = sp1c;\n func_ov004_020ae5c4(arg0, t1, c, t1, c, *(int*)(p+0x53e4), 1);\n }\n *(unsigned char*)(p+0x4706) = 0;\n func_ov006_020d3668(arg0);\n {\n unsigned char *q = (unsigned char*)(((int)p + 0x470a) & 0xFFFFFFFFFFFFFFFF);\n *q = *q + 1;\n }\n _ZN5Sound12PlayBank2_2DEj(0xdf);\n goto Lreset990;\n } else {\n if (*(unsigned char*)(p+0x53de) == 0 && *(unsigned char*)(p+0x53dd) == 0) func_02012790(0xe);\n func_ov006_020d1450(arg0);\n *(int*)(p+0x46d8) = -1;\n *(int*)(p+0x46dc) = -1;\n *(int*)(p+0x46e0) = -1;\n *(int*)(p+0x46e4) = -1;\n return;\n }\n }\n }\n }\n }\n\nLreset990:\n *(int*)(p+0x46f0) = -1;\n *(int*)(p+0x46f4) = -1;\n *(int*)(p+0x46e8) = -1;\n *(int*)(p+0x46ec) = -1;\n *(unsigned char*)(p+0x4704) = 0;\n *(unsigned char*)(p+0x4705) = 0;\n *(unsigned char*)(p+0x53c8) = 0;\n}\n", "source": "fanout-glm-5.2"} {"module": "ov006", "addr": "0x02124088", "name": "func_ov006_02124088", "size": 416, "target_hex": "30402de91cd04de20050a0e189b2feeb6c019fe5071a85e2002085e0000092e5010040e2000082e5840b91e5000050e31600001ac400d5e5000050e30100a003c300c505c400c5050000a003b00cc5012ac3fceb0010a0e3b011cde10010a0e1b001dde1062aa0e3d4d8fceb9fb2feeb10019fe50219a0e384b9fbeb0500a0e1ccffffeb1cd08de23040bde81eff2fe10006a0e15a1aa0e34cbcfcebe8109fe5013a60e2f040d1e1e0209fe57b1c85e2940303e0f0c0d2e1fce9d1e1d0209fe59c3024e0b2e1cde1fec9d1e14436a0e1c0009fe5b4c1cde1bc39c1e1f020d2e1be29c1e1075efceb0211c0e3a8009fe5a119a0e1003085e0020b41e2f020d3e10011a0e17b0c85e2411682e0b010c3e1fe39d0e10220a0e30c10a0e300308de504208de508108de5f211dde1f421dde1fc39d0e10500a0e1ff28feeb0400a0e146b9fbeb0010a0e300108de504008de508108de50c108de5070a85e28c0b90e50210a0e31b2ea0e30130a0e19bb8fbeb071a85e28c0b81e51cd08de23040bde81eff2fe1847b0000af01000058e0120250e0120248e0120250e609029e7b0000", "lang": "c", "divergences": 28, "c_source": "typedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef short s16;\n\nextern void func_ov006_020d0ac0(void);\nextern int func_02054d88(void);\nextern void MultiStore16(u16 val, char *dst, int nbytes);\nextern void func_ov006_020d0b78(void);\nextern void func_02012718(void *a, int b);\nextern void func_ov006_02124040(char *c);\nextern int _ZN4cstd4fdivEii(int a, int b);\nextern int RandomIntInternal(int *seed);\nextern int func_020126e8(int a);\nextern int func_02012468(int a, int b, int c, int d, int e, int f, int g, int h);\nextern int func_ov004_020ae5c4(void *a, int b, int c, int d, int e, int f, int g);\n\nextern s16 data_ov006_0212e058;\nextern s16 data_ov006_0212e050;\nextern s16 data_ov006_0212e048;\nextern int data_0209e650;\n\nvoid func_ov006_02124088(char *c)\n{\n int counter;\n\n func_ov006_020d0ac0();\n *(int *)(((long long)(int)(c + 0x7b84)) & 0xFFFFFFFFFFFFFFFFLL) -= 1;\n counter = *(int *)(c + 0x7b84);\n\n if (counter == 0) {\n if (*(u8 *)(c + 0xc4) == 0) {\n *(u8 *)(c + 0xc3) = 1;\n *(u8 *)(c + 0xc4) = 1;\n *(s16 *)(c + 0xc0) = 0;\n }\n\n {\n volatile u16 tmp = 0;\n int dst = func_02054d88();\n MultiStore16(tmp, (char *)dst, 0x6000);\n }\n\n func_ov006_020d0b78();\n func_02012718((void *)0x1af, 0x8000);\n func_ov006_02124040(c);\n return;\n }\n\n {\n int t = _ZN4cstd4fdivEii(counter << 12, 0x5a000);\n int mixRaw = data_ov006_0212e050 * t + data_ov006_0212e058 * (0x1000 - t);\n volatile s16 old9c = *(s16 *)(c + 0x7b9c);\n volatile s16 old9e = *(s16 *)(c + 0x7b9e);\n *(s16 *)(c + 0x7b9c) = (s16)(mixRaw >> 12);\n *(s16 *)(c + 0x7b9e) = data_ov006_0212e048;\n\n *(s16 *)(c + 0x7b9e) =\n (s16)(*(s16 *)(c + 0x7b9e) +\n ((((int)((unsigned int)(RandomIntInternal(&data_0209e650) & ~0x80000000) >> 19) - 0x800) << 2) >> 12));\n\n func_ov004_020ae5c4(c, old9c, old9e, *(s16 *)(c + 0x7b9c), *(s16 *)(c + 0x7b9e), 2, 0xc);\n\n *(int *)(c + 0x7b8c) = func_02012468(*(int *)(c + 0x7b8c), 2, 0x1b0, 2, 0,\n func_020126e8(mixRaw), 0, 0);\n }\n}\n", "source": "similarity-batch-agentB"} {"module": "ov006", "addr": "0x02114800", "name": "func_ov006_02114800", "size": 784, "target_hex": "f04f2de92cd04de201a0a0e100008de50070a0e10090a0e30010a0e1d4029fe5d4529fe5006081e01000a0e314008de50100a0e3c4429fe504208de50980a0e10c908de510908de518008de5051a87e2bc09d1e5010050e34200000a00209ae50500a0e19c2981e504209ae5a02981e5469cfceb200804e00008a0e10c109de5052a87e2a41982e5a007a0e1a80982e50500a0e13d9cfceb200804e08008a0e12008a0e10008a0e14018a0e10600a0e1b4a2fceb48029fe5003087e034029fe5001093e5002087e08100a0e1000083e5051a87e200c092e59cb991e50500a0e10bb08ce000b082e500b093e5a02991e502208be0002083e510209de5ac2981e514209de5b02981e518209de5bc29c1e51e9cfceb200804e00002a0e1a017a0e1050a87e2b41980e50500a0e1179cfceb201804e00300a0e3910000e0a007a0e1019089e2050080e2051a87e2b80981e504009de5180059e3bd09c1e52cd08da2f04fbda81eff2fa1247087e2246086e2018088e2400058e3b3ffffba180059e32cd08da2f04fbda81eff2fa10000a0e31c008de51000a0e320008de50100a0e354b19fe554419fe524008de50b00a0e1f69bfceb200804e00003a0e1a027a0e100009de52410a0e3920128e034019fe500109ae5000088e008008de528019fe5005088e008009de5001080e504109ae50b00a0e1001085e5e49bfcebf4109fe5017088e01c109de5001087e5f0109fe5016088e0201804e00309a0e3910000e0a007a0e1000086e50b00a0e1d79bfceb200804e08008a0e12008a0e10008a0e14018a0e10700a0e14ea2fceb000096e5051a88e28000a0e1000086e508009de5003097e5002090e50b00a0e1022083e0002087e5002095e5003096e5022083e0002086e51c209de5ac2981e520209de5b02981e524209de5bc29c1e5bb9bfceb200804e00002a0e1a017a0e1050a88e2b41980e50b00a0e1b49bfceb202804e00300a0e3920000e0a007a0e1019089e2051a88e2050080e2b80981e504009de5180059e3bd09c1e5afffffba2cd08de2f04fbde81eff2fe1a4590000b8d40902ff7f0000a85900009c590000a0590000", "lang": "c", "divergences": 28, "c_source": "extern int RandomIntInternal(int *seed);\nextern void func_0203d388(int *p, short angle);\nextern int data_0209d4b8;\n\nvoid func_ov006_02114800(char *c, int *pair, int a3)\n{\n register int count;\n register int i;\n char *p;\n int *pang;\n unsigned int r;\n char *q;\n int *pf8;\n int *pfc;\n int *pf4;\n int *pf0;\n\n count = 0;\n p = c;\n pang = (int *)(c + 0x59a4);\n for (i = 0; i < 0x40; p += 0x24, pang += 9, i++) {\n if (*(unsigned char *)(p + 0x59bc) == 1)\n continue;\n *(int *)(p + 0x599c) = pair[0];\n *(int *)(p + 0x59a0) = pair[1];\n r = ((unsigned int)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff;\n *(int *)(p + 0x59a4) = 0;\n *(int *)(p + 0x59a8) = (r * 0x10000) >> 15;\n r = ((unsigned int)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff;\n func_0203d388(pang, (unsigned short)(r * 2));\n *(int *)(((int)p + 0x59a8) & 0xFFFFFFFFFFFFFFFF) <<= 1;\n *(int *)(((int)p + 0x59a4) & 0xFFFFFFFFFFFFFFFF) += *(int *)(p + 0x599c);\n *(int *)(((int)p + 0x59a8) & 0xFFFFFFFFFFFFFFFF) += *(int *)(p + 0x59a0);\n *(int *)(p + 0x59ac) = 0;\n *(int *)(p + 0x59b0) = 0x10;\n *(unsigned char *)(p + 0x59bc) = 1;\n r = ((unsigned int)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff;\n *(int *)(p + 0x59b4) = (r << 4) >> 15;\n r = ((unsigned int)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff;\n *(int *)(p + 0x59b8) = ((r * 3) >> 15) + 5;\n count++;\n *(unsigned char *)(p + 0x59bd) = a3;\n if (count >= 0x18)\n return;\n }\n if (count >= 0x18)\n return;\n do {\n r = ((unsigned int)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff;\n q = c + ((r << 6) >> 15) * 0x24;\n pf0 = (int *)(((int)q + 0x599c) & 0xFFFFFFFFFFFFFFFF);\n pf8 = (int *)(((int)q + 0x59a4) & 0xFFFFFFFFFFFFFFFF);\n pfc = (int *)(((int)q + 0x59a8) & 0xFFFFFFFFFFFFFFFF);\n *pf0 = pair[0];\n pf4 = (int *)(((int)q + 0x59a0) & 0xFFFFFFFFFFFFFFFF);\n *pf4 = pair[1];\n r = ((unsigned int)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff;\n *pf8 = 0;\n *pfc = (r * 0xc000) >> 15;\n r = ((unsigned int)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff;\n func_0203d388(pf8, (unsigned short)(r * 2));\n *pfc <<= 1;\n *pf8 += *pf0;\n *pfc += *pf4;\n *(int *)(q + 0x59ac) = 0;\n *(int *)(q + 0x59b0) = 0x10;\n *(unsigned char *)(q + 0x59bc) = 1;\n r = ((unsigned int)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff;\n *(int *)(q + 0x59b4) = (r << 4) >> 15;\n r = ((unsigned int)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff;\n *(int *)(q + 0x59b8) = ((r * 3) >> 15) + 5;\n count++;\n *(unsigned char *)(q + 0x59bd) = a3;\n } while (count < 0x18);\n}\n", "source": "fable-subagent", "note": "3 clustered residuals: (1) pf0 spill slot @0x18 vs ROM @8 (slot-assignment order: ROM slots pf0 before loop1 hoisted consts; decl order/array/volatile all inert); (2) loop2 ptr init EMISSION: right colors (pf8=r7,pfc=r6,pf4=r5) only when pf8/pfc inits hoisted before *pf0 store; ROM has late emission WITH those colors = reverse-birth coloring unreachable (24 decl perms, launder spellings, scope splits, dead pre-inits all inert; ROM stmt order gives fwd-birth colors pf4=r7 39div); (3) loop1 f8/fc store block lsr scheduling. 104->28 via: laundered ptr inits for materialization, a3 spill via pressure, hoisted init order. opt_common_subs inert; propagation/size pragmas break shape."} +{"module": "ov006", "addr": "0x02126ee4", "name": "func_ov006_02126ee4", "size": 2764, "lang": "cpp", "divergences": 28, "c_source": "//cpp\n#pragma opt_strength_reduction off\n#pragma opt_common_subs off\ntypedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef unsigned int u32;\n\nstruct VObj {\n virtual void v0(); virtual void v1(); virtual void v2(); virtual void v3();\n virtual void v4(); virtual void v5(); virtual void v6(); virtual void v7();\n virtual void v8(); virtual void v9(); virtual void v10(); virtual void v11();\n virtual void v12(); virtual void v13(); virtual void v14(); virtual void v15();\n virtual void v16(); virtual void v17(); virtual void v18(); virtual void v19();\n virtual void v20(); virtual void v21(); virtual void v22(); virtual void v23();\n virtual void v24(); virtual void v25(); virtual void v26(); virtual void v27();\n virtual void v28(); virtual void v29(); virtual void v30(); virtual void v31();\n virtual void v32(); virtual void v33(); virtual void v34(); virtual int v35();\n};\n\nextern \"C\" {\nextern int data_0209d4b8;\nint RandomIntInternal(int *seed);\n}\n\nextern \"C\" void func_ov006_02126ee4(char *c)\n{\n int va;\n int vb;\n int vc;\n int pr7;\n int pr6;\n int cool;\n int p3col;\n int p3colx;\n int colx;\n int lim2;\n int gap2;\n int z2c, z30, z34, z38, z3c, z40, z44, z48, z4c, t50, z54, z58, z5c, z60;\n int z64, t68, z6c, z70, z74, z78, z7c, t80, z84;\n int w88, w8c, w90, w94, z98, z9c, wa0, wa4, wa8, wac, wb0, wb4, wb8;\n int zbc, zc0, zc4;\n int rs;\n int rx;\n int i;\n int n;\n int row;\n /* reverse-decl for callee-saved: last->r5 ... first->sb\n want col=r5, d6=r6, d7=r7, r8v=r8, sbv=sb */\n int sbv;\n int r8v;\n int d7;\n int d6;\n int col;\n\n for (i = 0; i < 0x80; i++) {\n *(u8 *)(c + i + 0xac58) = 0;\n ((int *)(c + 0xb0d8))[i] = 0;\n *(u8 *)(c + i + 0xb2d8) = 0;\n }\n for (i = 0; i < 0x80; i++) {\n *(u8 *)(c + i + 0xb358) = 0;\n }\n *(int *)(c + 0xab5c) = 0;\n\n if (((VObj *)c)->v35() != 0) {\n vb = 0xb;\n vc = 0xe;\n va = 6;\n } else {\n vb = 0xa;\n vc = 0xd;\n va = 7;\n }\n\n /* ROM statement order after ba08 load */\n d7 = 0;\n col = *(int *)(c + 0xba08) - 1;\n {\n int cool_r = 0x12;\n d6 = d7;\n sbv = 2;\n r8v = 0xd;\n cool = cool_r;\n }\n if (col >= 0) {\n colx = col * 16 + 8;\n lim2 = 0x10 - va;\n w90 = 5;\n w94 = 6;\n w88 = 3;\n w8c = 4;\n wac = 0xa;\n wb0 = 0xb;\n wa4 = 8;\n wa8 = 9;\n wa0 = 7;\n wb4 = 0xc;\n z98 = d7;\n z34 = d7;\n z40 = d7;\n z48 = d7;\n z44 = d7;\n z3c = d7;\n z38 = d7;\n z30 = d7;\n z2c = d7;\n z60 = d7;\n z5c = d7;\n z58 = d7;\n z54 = d7;\n t50 = sbv;\n z4c = d7;\n z78 = d7;\n z74 = d7;\n z70 = d7;\n z6c = d7;\n t68 = sbv;\n z64 = d7;\n z7c = d7;\n t80 = sbv;\n z84 = d7;\n z9c = d7;\n wb8 = 0x10;\n zbc = d7;\n zc0 = d7;\n zc4 = d7;\n\n do {\n pr7 = d7;\n pr6 = d6;\n d7 = (((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 3 >> 15;\n d6 = (((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 3 >> 15;\n\n if (col >= *(int *)(c + 0xba08) - 8) {\n d7 = z2c;\n d6 = d7;\n } else if (col <= *(int *)(c + 0xba04) / 16) {\n d7 = z30;\n d6 = d7;\n } else {\n int gap = r8v - sbv;\n if (gap <= vb) {\n if (d7 == 1)\n d7 = z34;\n if (d6 == 1)\n d6 = z38;\n } else if (vb + 1 == gap && d7 == 1 && d6 == 1) {\n d7 = z3c;\n d6 = d7;\n } else if (gap >= vc) {\n if (d7 == 2)\n d7 = z40;\n if (d6 == 2)\n d6 = z44;\n } else if (vc - 1 == gap && d7 == 2 && d6 == 2) {\n d7 = z48;\n d6 = d7;\n }\n }\n\n switch (d7) {\n case 0:\n break;\n case 1:\n if (pr7 == 2) {\n d7 = z4c;\n } else if (sbv >= va) {\n if (pr7 == 0) {\n d7 = t50;\n sbv--;\n } else {\n d7 = z54;\n }\n }\n break;\n case 2:\n if (pr7 == 1) {\n d7 = z58;\n } else if (sbv < 1) {\n if (pr7 == 0)\n d7 = 1;\n else\n d7 = z5c;\n } else {\n sbv--;\n }\n break;\n default:\n d7 = z60;\n break;\n }\n\n switch (d6) {\n case 0:\n break;\n case 1:\n if (pr6 == 2) {\n d6 = z64;\n } else if (r8v <= lim2) {\n if (pr6 == 0) {\n d6 = t68;\n r8v++;\n } else {\n d6 = z6c;\n }\n }\n break;\n case 2:\n if (pr6 == 1) {\n d6 = z70;\n } else if (r8v >= 0xf) {\n if (pr6 == 0)\n d6 = 1;\n else\n d6 = z74;\n } else {\n r8v++;\n }\n break;\n default:\n d6 = z78;\n break;\n }\n\n {\n int i0 = z7c;\n if (i0 < sbv) {\n char *row = c + col * 2;\n do {\n *(u16 *)(row + 0x4f38) = 1;\n row += 0x5c0;\n i0++;\n } while (i0 < sbv);\n }\n }\n\n switch (d7) {\n case 0:\n *(u16 *)(c + sbv * 0x5c0 + col * 2 + 0x4f38) = t80;\n *(u16 *)(c + (sbv + 1) * 0x5c0 + col * 2 + 0x4f38) = z84;\n break;\n case 1:\n *(u16 *)(c + sbv * 0x5c0 + col * 2 + 0x4f38) = w88;\n *(u16 *)(c + (sbv + 1) * 0x5c0 + col * 2 + 0x4f38) = w8c;\n break;\n case 2:\n *(u16 *)(c + sbv * 0x5c0 + col * 2 + 0x4f38) = w90;\n *(u16 *)(c + (sbv + 1) * 0x5c0 + col * 2 + 0x4f38) = w94;\n break;\n }\n\n {\n int i0 = sbv + 2;\n if (i0 < r8v - 1) {\n char *row = c + col * 2 + i0 * 0x5c0;\n do {\n *(u16 *)(row + 0x4f38) = z98;\n row += 0x5c0;\n i0++;\n } while (i0 < r8v - 1);\n }\n }\n\n switch (d6) {\n case 0:\n *(u16 *)(c + (r8v - 1) * 0x5c0 + col * 2 + 0x4f38) = z9c;\n *(u16 *)(c + r8v * 0x5c0 + col * 2 + 0x4f38) = wa0;\n break;\n case 1:\n *(u16 *)(c + (r8v - 1) * 0x5c0 + col * 2 + 0x4f38) = wa4;\n *(u16 *)(c + r8v * 0x5c0 + col * 2 + 0x4f38) = wa8;\n break;\n case 2:\n *(u16 *)(c + (r8v - 1) * 0x5c0 + col * 2 + 0x4f38) = wac;\n *(u16 *)(c + r8v * 0x5c0 + col * 2 + 0x4f38) = wb0;\n break;\n }\n\n {\n int i0 = r8v + 1;\n if (i0 < 0x10) {\n char *p = c + col * 2 + i0 * 0x5c0;\n do {\n *(u16 *)(p + 0x4f38) = 1;\n p += 0x5c0;\n i0++;\n } while (i0 < 0x10);\n }\n }\n\n if (d7 == 1)\n sbv++;\n if (d6 == 1)\n r8v--;\n\n if (col == *(int *)(c + 0xba04) / 16 - 1)\n *(int *)(c + 0xab5c) = (((r8v + sbv + 1) << 4) / 2) << 12;\n\n if (col > *(int *)(c + 0xba04) / 16 + 0x11) {\n if (cool > 0) {\n cool--;\n } else if (((VObj *)c)->v35() != 0 && col < *(int *)(c + 0xba08) / 2) {\n if (r8v - sbv >= 0xd) {\n if ((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 8 >> 15 == 0) {\n int r2;\n if ((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 2 >> 15 == 0)\n r2 = sbv + 2;\n else\n r2 = r8v - 2;\n *(u16 *)(c + r2 * 0x5c0 + col * 2 + 0x4f38) = wb4;\n cool = wb8;\n for (i = zbc; i < 0x80; i++) {\n u8 *q = (u8 *)(((int)c + i + 0xac58) & 0xFFFFFFFFFFFFFFFF);\n if (*q == 0) {\n *(int *)(c + i * 8 + 0xacd8) = ((r2 << 4) + 8) << 12;\n *(int *)(c + i * 8 + 0xacdc) = colx << 12;\n *q = 1;\n break;\n }\n }\n }\n }\n } else {\n gap2 = r8v - sbv;\n if (gap2 >= 0xd) {\n if ((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 16 >> 15 == 0) {\n int r2 = sbv + (((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * (gap2 - 3)) >> 15) + 2;\n *(u16 *)(c + r2 * 0x5c0 + col * 2 + 0x4f38) = wb4;\n cool = wb8;\n for (i = zc0; i < 0x80; i++) {\n u8 *q = (u8 *)(((int)c + i + 0xac58) & 0xFFFFFFFFFFFFFFFF);\n if (*q == 0) {\n *(int *)(c + i * 8 + 0xacd8) = ((r2 << 4) + 8) << 12;\n *(int *)(c + i * 8 + 0xacdc) = colx << 12;\n *q = 1;\n break;\n }\n }\n }\n } else if (gap2 >= 0xa) {\n if ((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 16 >> 15 == 0) {\n int r2;\n if ((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 2 >> 15 == 0)\n r2 = sbv + 2;\n else\n r2 = r8v - 2;\n *(u16 *)(c + r2 * 0x5c0 + col * 2 + 0x4f38) = wb4;\n cool = wb8;\n for (i = zc4; i < 0x80; i++) {\n u8 *q = (u8 *)(((int)c + i + 0xac58) & 0xFFFFFFFFFFFFFFFF);\n if (*q == 0) {\n *(int *)(c + i * 8 + 0xacd8) = ((r2 << 4) + 8) << 12;\n *(int *)(c + i * 8 + 0xacdc) = colx << 12;\n *q = 1;\n break;\n }\n }\n }\n }\n }\n }\n colx -= 0x10;\n col--;\n } while (col >= 0);\n }\n\n if (((VObj *)c)->v35() != 0) {\n for (i = 0; i < 0x80; i++) {\n if (*(u8 *)(c + i + 0xac58) == 1) {\n if ((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 2 >> 15 == 0)\n *(int *)(c + i * 4 + 0xb0d8) = 1;\n }\n }\n }\n\n {\n char *bp = c + 0xb000;\n int c1 = *(int *)(bp + 0xa04) / 16;\n col = c1 - 1;\n i = 0xf;\n r8v = 0xe;\n d6 = 0xd;\n d7 = 0;\n for (; col <= c1; col++) {\n char *rowp = c + col * 2;\n for (sbv = d7; sbv < 0x10; sbv++) {\n char *cell = rowp + 0x4f00;\n u16 gv = *(u16 *)(cell + 0x38);\n if (gv == 0)\n *(u16 *)(cell + 0x38) = d6;\n else if (gv == 2)\n *(u16 *)(cell + 0x38) = r8v;\n else if (gv == 7)\n *(u16 *)(cell + 0x38) = i;\n rowp += 0x5c0;\n }\n c1 = *(int *)(bp + 0xa04) / 16;\n }\n }\n\n n = 0;\n p3col = *(int *)(c + 0xba08) - 1;\n if (p3col >= 0) {\n p3colx = p3col * 16 + 8;\n rs = 0;\n rx = 8;\n do {\n char *gp = c + p3col * 2;\n int rowx = rx;\n for (row = rs; row < 0x10; row++) {\n u16 gv = *(u16 *)(gp + 0x4f38);\n if (gv == 1) {\n int v = (((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 16 >> 15;\n if (v < 4) {\n *(u16 *)(gp + 0x4f38) = v + 0x1d;\n } else if (v == 4) {\n if (n < 0x80) {\n *(int *)(c + n * 8 + 0xb5d8) = rowx << 12;\n *(int *)(c + n * 8 + 0xb5dc) = p3colx << 12;\n *(u8 *)(c + n + 0xb358) = 1;\n *(int *)(c + n * 4 + 0xb3d8) = (((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 4 >> 15;\n n++;\n }\n }\n }\n gp += 0x5c0;\n rowx += 0x10;\n }\n p3colx -= 0x10;\n p3col--;\n } while (p3col >= 0);\n }\n}\n", "source": "log_attempt", "target_hex": "f04f2de9d4d04de200a0a0e10040a0e30430a0e104208ae004118ae00a0a82e2014084e2583cc0e50b0a81e2d83080e50b0a82e2d832c0e5800054e3f4ffffba0020a0e303008ae00b0a80e2013083e25823c0e5800053e3f9ffffba0a1a8ae20a00a0e15c2b81e5001090e58c1091e531ff2fe1000050e30600000a0b00a0e304008de50e00a0e308008de50600a0e300008de5050000ea0a00a0e304008de50d00a0e308008de50700a0e300008de50b0a8ae2080a90e50070a0e3015050e21200a0e30760a0e10290a0e30d80a0e314008de5f501004a0502a0e1080080e220008de500009de5d0b99fe5100060e224008de50500a0e390008de50600a0e394008de50300a0e388008de50400a0e38c008de50a00a0e3ac008de50b00a0e3b0008de50800a0e3a4008de50900a0e3a8008de50700a0e3a0008de50c00a0e3b4008de51000a0e398708de50140a0e334708de540708de548708de544708de53c708de538708de530708de52c708de560708de55c708de558708de554708de550908de54c708de578708de574708de570708de56c708de568908de564708de57c708de580908de584708de59c708de5b8008de5bc708de5c0708de5c4708de5fc089fe50c708de510608de53652fcebf0189fe5201801e00300a0e3910000e0a077a0e1d8089fe52f52fcebd4189fe5201801e00300a0e3910000e0a067a0e10b0a8ae2081a90e5081041e2010055e12c709da50760a0a1280000aa041a90e5c101a0e1200e81e0400255e130709dd50760a0d1210000da04109de5090048e0010050e1040000ca010057e334709d05010056e338609d05180000ea011081e2000051e10500001a010057e30300001a010056e33c709d050760a0010f00000a08109de5010050e1040000ba020057e340709d05020056e344609d05070000ea011041e2000051e10400001a020057e30200001a020056e348709d050760a001000057e31e00000a010057e30200000a020057e30d00000a180000ea0c009de5020050e34c709d051500000a00009de5000059e1120000ba0c009de5000050e350709d050190490254709d150c0000ea0c009de5010050e358709d050800000a010059e3030000aa000050e30470a0015c709d15020000ea019049e2000000ea60709de5000056e31e00000a010056e30200000a020056e30d00000a180000ea10009de5020050e364609d051500000a24009de5000058e1120000ca10009de5000050e368609d05018088026c609d150c0000ea10009de5010050e370609d050800000a0f0058e3030000ba000050e30460a00174609d15020000ea018088e2000000ea78609de5000059e37c209de5060000da85108ae04f0c81e2b843c0e1171d81e2012082e2090052e1f9ffffba000057e30400000a010057e30f00000a020057e31a00000a250000ea172da0e399a220e0850080e04f1c80e280009de5b803c1e1011089e291a220e0850080e04f1c80e284009de5b803c1e1180000ea172da0e399a220e0850080e04f1c80e288009de5b803c1e1011089e291a220e0850080e04f1c80e28c009de5b803c1e10b0000ea172da0e399a220e0850080e04f1c80e290009de5b803c1e1011089e291a220e0850080e04f1c80e294009de5b803c1e1020089e2011048e2010050e10a0000aa85208ae0171da0e3902123e098109de54f2c83e2b813c2e1010080e2011048e2173d83e2010050e1f7ffffba000056e30400000a010056e30f00000a020056e31a00000a250000ea011048e2172da0e391a220e0850080e04f1c80e29c009de5b803c1e198a220e0850080e04f1c80e2a0009de5b803c1e1180000ea011048e2172da0e391a220e0850080e04f1c80e2a4009de5b803c1e198a220e0850080e04f1c80e2a8009de5b803c1e10b0000ea011048e2172da0e391a220e0850080e04f1c80e2ac009de5b803c1e198a220e0850080e04f1c80e2b0009de5b803c1e1012088e2100052e3080000aa85108ae0170da0e3921021e04f0c81e2b843c0e1171d81e2012082e2100052e3f9ffffba0b0a8ae2041a90e5010057e3c101a0e1200e81e04002a0e1010040e201908902010056e301804802000055e10700001a090088e0010080e20002a0e1a00f80e0c000a0e10016a0e10a0a8ae25c1b80e50b0a8ae2041a90e5c101a0e1200e81e04002a0e1110080e2000055e1990000da14009de5000050e3010040c214008dc5940000ca0a00a0e1001090e58c1091e531ff2fe1000050e33200000a0b0a8ae2080a90e5a00f80e0c00055e12d0000aa090048e00d0050e3860000ba3c049fe50851fceb38149fe5200801e08001a0e1a007b0e17f00001a20049fe50151fceb1c149fe5200801e08000a0e1a007b0e10220890202204812170da0e392a020e0850080e04f1c80e2b4009de5b803c1e1b8009de5bc109de514008de501008ae00b30f0e7000053e30a00001a0222a0e1082082e281118ae00236a0e10a2a81e220109de5d83c82e50116a0e1dc1c82e50040c0e55f0000ea011081e2800051e3edffffba5b0000ea090048e028008de50d0050e32b0000ba80039fe5d950fceb7c139fe5200801e00002a0e1a007b0e15000001a64039fe5d250fceb28109de5032041e258139fe5200801e0920000e0a00789e0022080e2170da0e392a020e0850080e04f1c80e2b4009de5b803c1e1b8009de5c0109de514008de501008ae00b30f0e7000053e30a00001a0222a0e1082082e281118ae00236a0e10a2a81e220109de5d83c82e50116a0e1dc1c82e50040c0e52f0000ea011081e2800051e3edffffba2b0000ea0a0050e3290000bac8029fe5ab50fcebc4129fe5200801e00002a0e1a007b0e12200001aac029fe5a450fceba8129fe5200801e08000a0e1a007b0e10220890202204812170da0e392a020e0850080e04f1c80e2b4009de5b803c1e1b8009de5c4109de514008de501008ae00b30f0e7000053e30a00001a0222a0e1082082e281118ae00236a0e10a2a81e220109de5d83c82e50116a0e1dc1c82e50040c0e5020000ea011081e2800051e3edffffba20009de5015055e2100040e220008de543feff5a0a00a0e1001090e58c1091e531ff2fe1000050e31300000af4519fe5f4719fe50060a0e30140a0e306008ae00a0a80e2580cd0e5010050e30700001a0500a0e16d50fceb200807e08000a0e1a007b0e106018a000b0a8002d8408005016086e2800056e3efffffba0b2a8ae2041a92e5c101a0e1200e81e04012a0e1010041e2010050e1190000ca0f40a0e30e50a0e30d60a0e30070a0e30790a0e180808ae04f1c88e2b833d1e1000053e3b863c1010400000a020053e3b853c1010100000a070053e3b843c101019089e2100059e3178d88e2f1ffffba043a92e5010080e2c311a0e1211e83e0410250e1e9ffffda0b0a8ae2080a90e50090a0e3010050e218008de5d4d08d42f04fbd481eff2f410002a0e1080080e21c008de50800a0e3f0b09fe5c8908de50140a0e3cc008de518009de5c8809de580708ae01c009de5cc609de50056a0e14f0c87e2b803d0e1010050e31e00001ab4009fe52650fceb20080be00002a0e1a007a0e1040050e31d1080b24f0c87b2b813c0b1140000ba040050e31200001a800059e3100000aa89018ae00b0a80e20616a0e1d81580e5dc5580e509008ae00b0a80e25843c0e55c009fe51050fceb20080be00001a0e1a017a0e109018ae00b0a80e2d81380e5019089e2018088e2100058e3177d87e2106086e2d7ffffba1c009de5100040e21c008de518009de5010050e218008de5caffff5ad4d08de2f04fbde81eff2fe158ac0000b8d40902ff7f0000"} {"module": "ov002", "addr": "0x02107f88", "name": "__sinit_ov002_02107f88", "size": 196, "target_hex": "f04f2de904d04de294709fe594609fe594509fe594409fe594309fe594209fe594009fe5001097e590a09fe504b097e5009096e5048096e5007095e5046095e5005094e5044094e500e093e504c093e5003092e500108ae5042092e5001090e504b08ae5040090e508908ae50c808ae510708ae514608ae518508ae51c408ae520e08ae524c08ae528308ae52c208ae530108ae534008ae504d08de2f04fbde81eff2fe140c0100210c0100220c0100238c0100230c0100218c0100228c010020c111102", "lang": "cpp", "divergences": 29, "c_source": "//cpp\nstruct S2 { int a, b; };\nextern \"C\" {\nextern struct S2 data_ov002_0210c040;\nextern struct S2 data_ov002_0210c010;\nextern struct S2 data_ov002_0210c020;\nextern struct S2 data_ov002_0210c038;\nextern struct S2 data_ov002_0210c030;\nextern struct S2 data_ov002_0210c018;\nextern struct S2 data_ov002_0210c028;\nextern struct S2 data_ov002_0211110c[7];\nvoid __sinit_ov002_02107f88(void) {\n data_ov002_0211110c[0] = data_ov002_0210c040;\n data_ov002_0211110c[1] = data_ov002_0210c010;\n data_ov002_0211110c[2] = data_ov002_0210c020;\n data_ov002_0211110c[3] = data_ov002_0210c038;\n data_ov002_0211110c[4] = data_ov002_0210c030;\n data_ov002_0211110c[5] = data_ov002_0210c018;\n data_ov002_0211110c[6] = data_ov002_0210c028;\n}\n}\n", "source": "grindD-2026-06-22"} {"module": "ov002", "addr": "0x020b6494", "name": "func_ov002_020b6494", "size": 240, "target_hex": "10402de9dc109fe50040a0e1010084e04412feeb000050e30600000a0010a0e30400a0e10120a0e1ebe000eb0100a0e31040bde81eff2fe1ca3f84e2b010d3e1030c84e2a0209fe5011c81e2b010c3e1f812d0e1600084e2243394e50118a0e12118a0e14112a0e10111a0e1f12092e1021ba0e300e090e593c2c2e001309ce00010a2e22326a0e1012a82e102104ee0001080e5601094e5200394e5000051e000006042000050e3030c84023c10a003ba12c0010400a0e1b7e000eb0010a0e30400a0e10120a0e1c3e000eb000050e30100000a0400a0e196e000eb0100a0e31040bde81eff2fe12a03000014220802", "lang": "c", "divergences": 29, "c_source": "typedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef short s16;\ntypedef long long s64;\nextern s16 data_02082214[];\nextern u16 DecIfAbove0_Short(u16* p);\nextern int _ZN8Platform13IsClsnInRangeE5Fix12IiES1_(char* c, int a, int b);\nextern void _ZN8Platform21UpdateModelPosAndRotYEv(char* c);\nextern void _ZN8Platform19UpdateClsnPosAndRotEv(char* c);\n\nint func_ov002_020b6494(char* c){\n if (DecIfAbove0_Short((u16*)(c+0x32a)) != 0) {\n _ZN8Platform13IsClsnInRangeE5Fix12IiES1_(c, 0, 0);\n return 1;\n }\n *(u16*)(c+0x328) += 0x100;\n {\n s16 a = data_02082214[((u16)*(s16*)(c+0x328) >> 4) * 2];\n *(int*)(c+0x60) = *(int*)(c+0x60) - (int)((((s64)*(int*)(c+0x324) * a) + 0x800) >> 0xc);\n }\n {\n int d = *(int*)(c+0x60) - *(int*)(c+0x320);\n if (d < 0) d = -d;\n if (d == 0) *(u16*)(c+0x32a) = 0x3c;\n }\n _ZN8Platform21UpdateModelPosAndRotYEv(c);\n if (_ZN8Platform13IsClsnInRangeE5Fix12IiES1_(c, 0, 0) != 0)\n _ZN8Platform19UpdateClsnPosAndRotEv(c);\n return 1;\n}\n", "source": "grindE-2026-06-22"} {"module": "ov006", "addr": "0x020f6904", "name": "func_ov006_020f6904", "size": 252, "target_hex": "f0472de90040a0e30050a0e10420a0e10410a0e1ff70a0e30380a0e3c8309fe5c8609fe518c0a0e3010085e00690f0e7ff0059e30d00000a995c2ae005ea8ae2bb91dee5000059e30600000a03908ae000e0d9e501005ee30080c9050070c00501208202000000ea0070c0e5014084e2011081e2080051e3eaffffba010052e30200001a520fa0e3706ffceb080000ea020052e30200001a54009fe56b6ffceb030000ea030052e3010000ba44009fe5666ffceb000054e3f047bd181eff2f11050a85e20610a0e3d81380e50a24d0e51400a0e3531c85e2920000e0500080e2bc0ec1e1f047bde81eff2fe1bc510000fd5300004501000046010000", "lang": "c", "divergences": 29, "c_source": "extern void _ZN5Sound12PlayBank2_2DEj(unsigned int);\n\nvoid func_ov006_020f6904(char *c)\n{\n int cntA = 0;\n int cntB = 0;\n for (int i = 0; i < 8; i++) {\n unsigned char id = *(unsigned char*)(c + 0x53fd + i);\n if (id == 0xff) continue;\n if (*(unsigned char*)(c + id * 24 + 0x51bb) == 0) {\n *(unsigned char*)(c + 0x53fd + i) = 0xff;\n } else if (*(unsigned char*)(c + id * 24 + 0x51bc) == 1) {\n *(unsigned char*)(c + id * 24 + 0x51bc) = 3;\n *(unsigned char*)(c + 0x53fd + i) = 0xff;\n cntB++;\n }\n cntA++;\n }\n if (cntB == 1) _ZN5Sound12PlayBank2_2DEj(0x148);\n else if (cntB == 2) _ZN5Sound12PlayBank2_2DEj(0x145);\n else if (cntB >= 3) _ZN5Sound12PlayBank2_2DEj(0x146);\n if (cntA != 0) return;\n *(int*)(c + 0x53d8) = 6;\n *(short*)(c + 0x53ec) = *(unsigned char*)(c + 0x540a) * 20 + 0x50;\n}\n", "source": "fanout-max2-2026-06-28"} @@ -326,7 +332,6 @@ {"module": "ov006", "addr": "0x02103ac0", "name": "func_ov006_02103ac0", "size": 316, "target_hex": "00402de904d04de2562c80e2bc16d2e1000051e304d08d020040bd081eff2f0108119fe5013080e0b010d3e1011041e2b010c3e1fc16d2e1000051e304d08dc20040bdc81eff2fc100e0a0e3bce6c2e10ec380e001298ce29816d2e5000051e32c00001a0110a0e39816c2e59a16c2e50030a0e39936c2e5843682e50217a0e3601682e50a19a0e3641682e5703682e5743682e59b36c2e5683682e56c3682e5461c8ce2b639c1e1b039c1e1b239c1e19c36c2e59d36c2e59e36c2e5883682e50410a0e38c1682e501208ee2051a80e27626c1e5561c80e2b017d1e1000051e30400000a48009fe5e93afceb04d08de20040bde81eff2fe138109fe504d08de2011080e0b000d1e1010080e2b000c1e10040bde81eff2fe101e08ee230005ee3caffffba04d08de20040bde81eff2fe16c5600009d01000070560000", "lang": "c", "divergences": 34, "c_source": "extern void _ZN5Sound12PlayBank2_2DEj(unsigned int);\n\nvoid func_ov006_02103ac0(char *c)\n{\n int i;\n unsigned short *q;\n if (*(unsigned short *)(c + 0x566c) == 0) return;\n q = (unsigned short *)(c + 0x566c);\n *q = *q - 1;\n if (*(short *)(c + 0x566c) > 0) return;\n *(unsigned short *)(c + 0x566c) = 0;\n for (i = 0; i < 0x30; i++) {\n char *b = c + i * 64;\n if (*(unsigned char *)(b + 0x4698) == 0) {\n *(unsigned char *)(b + 0x4698) = 1;\n *(unsigned char *)(b + 0x469a) = 1;\n *(unsigned char *)(b + 0x4699) = 0;\n *(int *)(b + 0x4684) = 0;\n *(int *)(b + 0x4660) = 0x80000;\n *(int *)(b + 0x4664) = 0x28000;\n *(int *)(b + 0x4670) = 0;\n *(int *)(b + 0x4674) = 0;\n *(unsigned char *)(b + 0x469b) = 0;\n *(int *)(b + 0x4668) = 0;\n *(int *)(b + 0x466c) = 0;\n *(short *)(b + 0x4696) = 0;\n *(short *)(b + 0x4690) = 0;\n *(short *)(b + 0x4692) = 0;\n *(unsigned char *)(b + 0x469c) = 0;\n *(unsigned char *)(b + 0x469d) = 0;\n *(unsigned char *)(b + 0x469e) = 0;\n *(int *)(b + 0x4688) = 0;\n *(int *)(b + 0x468c) = 4;\n *(unsigned char *)(c + 0x5676) = (unsigned char)(i + 1);\n if (*(unsigned short *)(c + 0x5670) != 0) {\n _ZN5Sound12PlayBank2_2DEj(0x19d);\n } else {\n *(unsigned short *)(c + 0x5670) += 1;\n }\n return;\n }\n }\n}\n", "source": "fanout"} {"module": "ov002", "addr": "0x020f80ac", "name": "_ZN8MugenBgm6RenderEv", "size": 280, "target_hex": "f0412de90070a0e1080097e5190050e31e00001adc0097e5f0609fe51c4080e20450a0e10f00b6e80f00a5e80f00b6e80f00a5e80f0096e80f0085e8d0609fe50050a0e30580a0e1000096e50810a0e1240084e5040096e5280084e5080096e52c0084e5dc0097e5002090e5142092e532ff2fe1015085e2030055e30c6086e2f0ffff3a0100a0e3f041bde81eff2fe10211d7e5000051e30100a003f041bd081eff2f01dc0097e5000050e30700000a0020a0e34d7afcebdc0097e5801087e2002090e5142092e532ff2fe10c0000eae00097e5000050e30900000a0af9ffeb0211d7e5e00097e50020a0e33f7afcebe00097e5801087e2002090e5142092e532ff2fe10100a0e3f041bde81eff2fe11cb409027cbb1002", "lang": "cpp", "divergences": 34, "c_source": "//cpp\nextern \"C\" {\nvoid _ZN9ModelBase12ApplyOpacityEj(void* m, unsigned int op);\nvoid func_ov002_020f65b8(void* o);\n}\nstruct M48 { int w[12]; };\nextern M48 data_0209b41c;\nextern int data_ov002_0210bb7c[];\ntypedef void (*VFN)(void*, int);\n\nextern \"C\" int func_ov002_020f80ac(register char* c){\n if (*(int*)(c + 8) == 0x19){\n char* p = *(char**)(c + 0xdc) + 0x1c;\n int* tbl = data_ov002_0210bb7c;\n int i;\n *(M48*)p = data_0209b41c;\n for (i = 0; i < 3u; i++){\n *(int*)(p + 0x24) = tbl[0];\n *(int*)(p + 0x28) = tbl[1];\n *(int*)(p + 0x2c) = tbl[2];\n void* obj = *(void**)(c + 0xdc);\n (*(VFN*)(*(char**)obj + 0x14))(obj, 0);\n tbl += 3;\n }\n return 1;\n }\n if (*(unsigned char*)(c + 0x102) == 0) return 1;\n if (*(void**)(c + 0xdc) != 0){\n _ZN9ModelBase12ApplyOpacityEj(*(void**)(c + 0xdc), 0);\n void* obj = *(void**)(c + 0xdc);\n (*(VFN*)(*(char**)obj + 0x14))(obj, (int)(c + 0x80));\n } else if (*(void**)(c + 0xe0) != 0){\n func_ov002_020f65b8(c);\n _ZN9ModelBase12ApplyOpacityEj(*(void**)(c + 0xe0), *(unsigned char*)(c + 0x102));\n void* obj = *(void**)(c + 0xe0);\n (*(VFN*)(*(char**)obj + 0x14))(obj, (int)(c + 0x80));\n }\n return 1;\n}\n", "source": "fanout-glm-5.2"} {"module": "ov007", "addr": "0x020aec00", "name": "func_ov007_020aec00", "size": 148, "target_hex": "f0412de984009fe50020a0e3001090e50200a0e1283091e50250a0e100e0e0e300c093e50510a0e102608ce00b40d6e5000054e30c00000a0580a0e100708ce01140d7e56bc0d7e5018088e2041081e00f0058e30c1081e0017087e2f7ffffba98c0d6e50c1081e0000000ea0e10a0e182c083e0012082e2b410cce1030052e30f0080e2e5ffffbaf041bde81eff2fe12c341002", "lang": "c", "divergences": 35, "c_source": "extern int* data_ov007_0210342c;\n\nvoid func_ov007_020aec00(void) {\n int* base = data_ov007_0210342c;\n int* obj = (int*)base[0];\n int* p28 = (int*)obj[0xa];\n char* arr = (char*)p28[0];\n int i;\n int off = 0;\n for (i = 0; i < 3; i++) {\n char* row = arr + i;\n int sum;\n if (*(unsigned char*)(row + 0xb) == 0) {\n sum = -1;\n } else {\n sum = 0;\n char* e = arr + off;\n int k;\n for (k = 0; k < 0xf; k++) {\n sum += *(unsigned char*)(e + 0x11);\n sum += *(unsigned char*)(e + 0x6b);\n e++;\n }\n sum += *(unsigned char*)(row + 0x98);\n }\n *(short*)((char*)p28 + i*2 + 4) = (short)sum;\n off += 0xf;\n }\n}\n", "source": "fanout"} -{"module": "ov002", "addr": "0x020e7454", "name": "func_ov002_020e7454", "size": 256, "target_hex": "30402de904d04de20050a0e1340495e5b4a6fcebdc109fe50040a0e1012085e0b010d2e15c3084e2150e85e23010c1e3b010c2e1002093e55c1085e25c2085e5042093e5602085e5082093e5642085e5ed38fdebd801d4e5030050e30d00001ada01d4e5440485e5440495e5400485e5400495e5040050e304d08d123040bd181eff2f110500a0e1e00700eb04d08de23040bde81eff2fe15c009fe554109fe50030f4e70900a0e34a2f85e20130c3e30030c4e50030d4e5011085e0023083e30030c4e5400485e5000092e5010080e3000082e5b000d1e10200c0e3b000c1e1b000d1e1080080e3b000c1e104d08de23040bde81eff2fe1a2040000db010000", "lang": "cpp", "divergences": 21, "c_source": "//cpp\nstruct Actor { static Actor* FindWithID(unsigned int); };\nextern \"C\" void func_02035860(void*, void*);\nextern \"C\" void func_ov002_020e9464(char* p);\nextern \"C\" void func_ov002_020e7454(char* self);\n\nvoid func_ov002_020e7454(char* self) {\n char* a = (char*)Actor::FindWithID(*(unsigned int*)(self + 0x434));\n unsigned short* f = (unsigned short*)(((long long)(int)(self + 0x4a2)) & 0xFFFFFFFFFFFFFFFFLL);\n int* src = (int*)(a + 0x5c);\n void* p150 = self + 0x150;\n *f &= ~0x30;\n *(int*)(self + 0x5c) = src[0];\n *(int*)(self + 0x60) = src[1];\n *(int*)(self + 0x64) = src[2];\n func_02035860(p150, self + 0x5c);\n if (*(unsigned char*)(a + 0x1d8) == 3) {\n *(int*)(self + 0x444) = *(unsigned char*)(a + 0x1da);\n *(int*)(self + 0x440) = *(int*)(self + 0x444);\n if (*(int*)(self + 0x440) != 4) return;\n func_ov002_020e9464(self);\n } else {\n unsigned char* q = (unsigned char*)(((long long)(int)(a + 0x1db)) & 0xFFFFFFFFFFFFFFFFLL);\n *q &= ~1;\n *q |= 2;\n *(int*)(self + 0x440) = 9;\n *(int*)(self + 0x128) |= 1;\n { unsigned short* g = (unsigned short*)(self + 0x4a2); *g &= ~2; *g |= 8; }\n }\n}\n", "source": "lunavyqo-batch3"} {"module": "ov075", "addr": "0x0211555c", "name": "_ZN14UnknownVsEntry8BehaviorEv", "size": 388, "target_hex": "f04f2de90cd04de200a0a0e1440fdae5000050e35200001a54619fe50a70a0e1928e8ae201b0a0e30090a0e30940a0e13a5d8ae20800a0e1cffdffeb750ad7e5000050e30900000a463f88e2001093e50500a0e100108de5042093e500108de204208de5082093e508208de55a1500eb0000d6e5000050e30300000a0800a0e1c3fcffeb000050e304b0a001019089e2040059e3568f88e2567f87e2016086e2e3ffffba410fdae5010050e31000001a00005be30e00000ab4509fe5924e8ae20060a0e30000d5e5000050e30100000a0400a0e197fcffeb016086e2040056e3015085e2564f84e2f5ffffba0200a0e3410fcae5410fdae5000050e30c00000a422fdae56c109fe5923e8ae2560fa0e3923020e060209fe501108ae002208ae010fdffeb000050e30100000a0a00a0e110ffffeb400fdae5000050e30600000afea0fceb0010a0e10a00a0e1c1feffeb28009fe500008ae06001fceb3a0d8ae2551700eb0100a0e30cd08de2f04fbde81eff2fe15cfc0902340f0000280f00000c090000", "lang": "c", "divergences": 35, "c_source": "typedef unsigned char u8;\n\nextern void func_ov075_02114cd8(void* self);\nextern void func_ov075_0211ab38(void* a, int* v);\nextern int func_ov075_021148f0(void* p);\nextern void func_ov075_02114894(void* c);\nextern int func_ov075_02114ac4(char* c, char* p5, char* p4);\nextern void func_ov075_021152d4(void* self);\nextern int func_0203da9c(void);\nextern void func_ov075_021151b4(void* self, int x);\nextern int _ZN9Animation7AdvanceEv(void* a);\nextern void func_ov075_0211b418(void* c);\n\nextern u8 data_0209fc5c;\n\nint func_ov075_0211555c(char* c)\n{\n if (*(u8*)(c + 0xf44) == 0) {\n int z = 0;\n char* ee = c + 0xe80;\n u8* g = &data_0209fc5c;\n char* p = c;\n char* base = c + 0x920;\n int i = 0;\n int fp = 1;\n for (; i < 4; i++, base += 0x158, p += 0x158, g += 1) {\n func_ov075_02114cd8(base);\n if (*(u8*)(p + 0xa75)) {\n int* q = (int*)(base + 0x118);\n int v[3];\n v[0] = q[0];\n v[1] = q[1];\n v[2] = q[2];\n func_ov075_0211ab38(ee, v);\n }\n if (*g) {\n if (func_ov075_021148f0(base) == 0)\n fp = z;\n }\n }\n\n if (*(u8*)(c + 0xf41) == 1 && fp != 0) {\n u8* g2 = &data_0209fc5c;\n char* b2 = c + 0x920;\n int j;\n for (j = 0; j < 4; j++) {\n if (*g2)\n func_ov075_02114894(b2);\n b2 += 0x158;\n g2 += 1;\n }\n *(u8*)(c + 0xf41) = 2;\n }\n\n if (*(u8*)(c + 0xf41) != 0) {\n if (func_ov075_02114ac4(c + 0x920 + *(u8*)(c + 0xf42) * 0x158, c + 0xf34, c + 0xf28) != 0) {\n func_ov075_021152d4(c);\n }\n }\n\n if (*(u8*)(c + 0xf40)) {\n int r = func_0203da9c();\n func_ov075_021151b4(c, r);\n }\n\n _ZN9Animation7AdvanceEv(c + 0x90c);\n func_ov075_0211b418(c + 0xe80);\n }\n return 1;\n}\n", "source": "harvest-wave3"} {"module": "ov006", "addr": "0x02106aa8", "name": "func_ov006_02106aa8", "size": 260, "target_hex": "30402de904d04de2e4209fe5813080e0025080e00040d5e54e3c83e28120a0e1014084e20040c5e5b847d3e1000054e30b00000abc109fe504d08de2011080e0b20091e1010040e2b20081e1f807d3e1000050e30000a0b3b807c3b13040bde81eff2fe190309fe5014080e003c080e0b2509ce1013984e2014085e2b2408ce18a2fd3e5814080e04e3c84e2000052e304c0a013b023d3e108c0a0038150a0e10c0052e104d08d323040bd381eff2f3148209fe500e0a0e302c080e0b0e3c3e1b5309ce14d2c84e2013083e2b5308ce1b83ed2e1050053e301008020b8eec22101098022faeec02504d08de23040bde81eff2fe1e94f0000784e0000304e0000e84d0000", "lang": "c", "divergences": 35, "c_source": "typedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef short s16;\n\nvoid func_ov006_02106aa8(char *base, int idx)\n{\n u8 *cnt = (u8 *)(base + 0x4fe9);\n char *p1 = base + idx * 2 + 0x4e00;\n\n *cnt = *cnt + 1;\n\n if (*(u16 *)(p1 + 0x78) != 0) {\n u16 *q = (u16 *)(base + 0x4e78 + idx * 2);\n *q = *q - 1;\n if (*(s16 *)(p1 + 0x78) < 0) {\n *(u16 *)(p1 + 0x78) = 0;\n }\n } else {\n u16 *r = (u16 *)(base + 0x4e30 + idx * 2);\n u8 flag = *(u8 *)(base + idx + 0x4000 + 0xf8a);\n int lim;\n *r = *r + 1;\n lim = (flag != 0) ? 4 : 8;\n if (*(u16 *)(p1 + 0x30) < (u16)lim) {\n return;\n }\n *(u16 *)(p1 + 0x30) = 0;\n {\n u16 *s = (u16 *)(base + 0x4de8 + idx * 2);\n *s = *s + 1;\n }\n if (*(u16 *)(base + idx * 2 + 0x4d00 + 0xe8) >= 5) {\n *(u16 *)(base + idx * 2 + 0x4d00 + 0xe8) = 0;\n *(u8 *)(base + idx + 0x4000 + 0xefa) = 0;\n }\n }\n}\n", "source": "fanout"} {"module": "ov006", "addr": "0x0211ea70", "name": "func_ov006_0211ea70", "size": 288, "target_hex": "f04f2de90cd04de22420a0e3910202e008208de504108de500008de50010a0e10080a0e308009de5e4209fe5001081e0e0009fe50870a0e1025081e0004081e008b0a0e10b60a0e1001095e5000094e54116a0e14006a0e1041041e2040040e201a086e0009087e0ffd8fcebca31a0e1c921a0e1822283e0822280e0070009e207100ae2002192e70101a0e15200a0e10f0010e2016086e201808802080056e3e8ffffba017087e2080057e3e4ffffba000058e30cd08d02f04fbd081eff2f0100109de508009de5000081e0010980e27f06d0e5000050e30cd08d02f04fbd081eff2f0104009de52410a0e3900102e024109fe500009de5011080e0b20091e1020980e2b20081e10cd08de2f04fbde81eff2fe160460000644600006c460000", "lang": "cpp", "divergences": 35, "c_source": "//cpp\ntypedef unsigned char u8;\ntypedef short s16;\ntypedef unsigned short u16;\ntypedef int s32;\n\nextern \"C\" int *_ZN3G2S13GetBG0CharPtrEv(void);\n\nextern \"C\" void func_ov006_0211ea70(int self, int idx)\n{\n int x, y;\n int cnt = 0;\n s32 *pA = (s32 *)(self + idx * 0x24 + 0x4660);\n s32 *pB = (s32 *)(self + idx * 0x24 + 0x4664);\n\n for (y = 0; y < 8; y++) {\n for (x = 0; x < 8; x++) {\n int gx = x + ((*pA >> 12) - 4);\n int gy = y + ((*pB >> 12) - 4);\n int *p = _ZN3G2S13GetBG0CharPtrEv();\n int word = p[((gx >> 3) + ((gy >> 3) << 5)) * 0x20 + (gy & 7)];\n int nib = (word >> ((gx & 7) << 2)) & 0xf;\n if (nib == 0)\n cnt++;\n }\n }\n\n if (cnt == 0)\n return;\n if (*(u8 *)(self + idx * 0x24 + 0x4000 + 0x67f) == 0)\n return;\n\n *(s16 *)((char *)(self + 0x466c) + idx * 0x24) += 0x8000;\n}\n", "source": "fanout"} @@ -334,6 +339,7 @@ {"module": "ov006", "addr": "0x0211ba88", "name": "func_ov006_0211ba88", "size": 344, "target_hex": "f0472de90140a0e11410a0e3940106e030119fe50050a0e1012085e0061092e7067082e0011841e2061082e7001090e58c1091e531ff2fe1000050e3050a85122716d01500019f1501219017050a85022716d005f4009f0501219007f0009fe5001085e00600d1e7061081e0000050e32600001a0430a0e1020054e1020000ba023043e0020053e1fcffffaa000053e30100a0030000c105f047bd081eff2f01000053e30020a0e3180000da94009fe5068085e098609fe5001088e0060088e00180a0e304e0a0e31460a0e3029044e0019049e299562ae005ca8ae2f590dce5000059e30600000a00a091e5e8909ce509904ae04996a0e1040059e30080c0d5f4e0ccd5012082e2030052e1eeffffba001097e51700e0e34116a0e1000051e1f047bdc81eff2fc11400a0e3945020e0050a80e20010a0e3f510c0e5f610c0e5f047bde81eff2fe1e85000005cef12026cef1202f9500000", "lang": "c", "divergences": 35, "c_source": "typedef unsigned char u8;\n\nstruct Elem {\n int f_0; /* +0x50e8 within base */\n char _4[0x50f9-0x50e8-4];\n u8 active; /* +0x50f9 */\n};\n\nextern int data_ov006_0212ef5c[];\nextern int data_ov006_0212ef6c[];\n\nint func_ov006_0211ba88(char *base, int idx)\n{\n int n;\n int i;\n int limit;\n int *cur;\n u8 *flag;\n\n cur = (int *)(base + 0x50e8 + idx * 0x14);\n *cur = *cur - 0x10000;\n\n if ((*(int (***)(void))base)[0x8c / 4]() != 0) {\n limit = data_ov006_0212ef5c[*(u8 *)(base + 0x5000 + 0x627)];\n } else {\n limit = data_ov006_0212ef6c[*(u8 *)(base + 0x5000 + 0x627)];\n }\n\n flag = (u8 *)(base + 0x50f9 + idx * 0x14);\n if (*flag == 0) {\n n = idx;\n if (idx >= limit) {\n n = idx - limit;\n if (n < limit) {\n if (n == 0) {\n *flag = 1;\n return 0;\n }\n }\n }\n if (n > 0) {\n for (i = 0; i < n; i++) {\n int j = idx - i - 1;\n char *e = base + j * 0x14;\n if (*(u8 *)(e + 0x5000 + 0xf5) != 0) {\n if ((*(int *)(base + 0x50e8 + idx * 0x14) - *(int *)(e + 0x5000 + 0xe8)) >> 0xc <= 4) {\n *(u8 *)(base + 0x50f9 + idx * 0x14) = 1;\n *(int *)(e + 0x5000 + 0xf4) = 4;\n }\n }\n }\n }\n }\n\n if (*cur >> 0xc > -0x18) return 0;\n\n {\n char *e = base + idx * 0x14 + 0x5000;\n *(u8 *)(e + 0xf5) = 0;\n *(u8 *)(e + 0xf6) = 0;\n }\n return 0;\n}\n", "source": "fanout"} {"module": "arm9", "addr": "0x02048234", "name": "func_02048234", "size": 756, "target_hex": "f04f2de94cd04de2b847dde1b057dde1b477dde14442a0e18460a0e14542a0e18480a0e1015086e288a0a0e1bc429fe58590a0e1fa5094e14772a0e187a0a0e1f99094e1018088e28880a0e195b9c7e02bb6a0e1f88094e144b08de5077a8be144708de59879cbe02776a0e18ac0a0e100708de50b7a87e100708de501708ae28660a0e1fcc094e18770a0e1f66094e1f74094e1c17fa0e108708de500706ce220708de59479cbe020909de52776a0e199a1cee02a96a0e11c908de50e9a89e11c908de54b96a0e110908de5c29fa0e124908de5c39fa0e12c908de57c909de50b7a87e138908de580909de502eba0e33c908de584909de540908de595a6c9e02ab6a0e19455cae009ba8be12556a0e14a96a0e128908de50a5a85e198a6c9e004908de52a96a0e104a09de50a9a89e194a6c6e018608de59488c6e02846a0e118809de534608de54886a0e114808de518809de52a66a0e1086a86e134809de54886a0e130808de534809de5084a84e191a788e00ca08de510a09de5918a28e008a09de59a8728e00c709de52776a0e1087a87e1007080e514709de591a688e0918728e008109de5918628e02a16a0e1081a81e1041080e51c109de59c8bc7e0081080e544109de59c61c1e00e6096e00010a1e22666a0e1016a86e1091046e09261c1e00e6096e00010a1e20e8098e02666a0e1016a86e10c6080e50070a7e22886a0e1078a88e100709de59c69c1e0089087e09299cae00e9099e09c87c7e000a0aae20e8098e02996a0e10a9a89e10070a7e22886a0e1078a88e108708be09387c7e0109080e50e9098e00080a7e20e6096e02976a0e1087a87e10010a1e22666a0e1016a86e144109de5929588e0011046e09361c1e00e6096e00010a1e22666a0e1016a86e128109de5928128e024109de5918528e02916a0e1081a81e1141080e5187080e530109de5935482e0932122e02c109de51c6080e5912422e02516a0e1021a81e1201080e538109de5241080e53c109de5281080e540109de52c1080e54cd08de2f04fbde81eff2fe114220802", "lang": "c", "divergences": 35, "c_source": "typedef long long s64;\nextern short data_02082214[];\nvoid func_02048234(int *m, int r1, int r2, int r3,\n unsigned short ax, unsigned short ay, unsigned short az,\n int tx, int ty, int tz)\n{\n int ix = ax >> 4;\n int iy = ay >> 4;\n int iz = az >> 4;\n int cy = data_02082214[iy * 2];\n int cx = data_02082214[ix * 2];\n int sx = data_02082214[ix * 2 + 1];\n int sy = data_02082214[iy * 2 + 1];\n int cz = data_02082214[iz * 2];\n int sz = data_02082214[iz * 2 + 1];\n int cxsz = (int)((s64)cx * sz >> 12);\n int sxsz = (int)((s64)sx * sz >> 12);\n s64 sysz = (s64)sy * sz >> 12;\n int cxcz = (int)((s64)cx * cz >> 12);\n s64 sycx = (s64)sy * cx >> 12;\n int sxcz = (int)((s64)sx * cz >> 12);\n s64 sycz = (s64)sy * cz >> 12;\n s64 sysx = (s64)sy * sx >> 12;\n m[0] = (int)((s64)r1 * sysz >> 12);\n m[1] = (int)((s64)r1 * sycz >> 12);\n m[2] = (int)((s64)(-cy) * r1 >> 12);\n m[3] = (int)(((s64)r2 * ((int)(((s64)cy * cxsz + 0x800) >> 12) - sxcz) + 0x800) >> 12);\n m[4] = (int)(((s64)r2 * (sxsz + (int)(((s64)cy * cxcz + 0x800) >> 12)) + 0x800) >> 12);\n m[5] = (int)((s64)r2 * sycx >> 12);\n m[6] = (int)(((s64)r3 * (cxcz + (int)(((s64)cy * sxsz + 0x800) >> 12)) + 0x800) >> 12);\n m[7] = (int)(((s64)r3 * ((int)(((s64)cy * sxcz + 0x800) >> 12) - cxsz) + 0x800) >> 12);\n m[8] = (int)((s64)r3 * sysx >> 12);\n m[9] = tx; m[10] = ty; m[11] = tz;\n}", "source": "fanout-opus"} {"module": "ov006", "addr": "0x020f2cb8", "name": "func_ov006_020f2cb8", "size": 360, "target_hex": "f04f2de904d04de20070a0e1510c87e2b207d0e10040a0e3140050e31440a0230100002a0a0050e30a40a02324019fe52823fdeb20119fe50a20a0e3200801e0900201e014319fe5040083e0a127d0e7050a87e2511c87e25a24c0e5b427d1e1090052e30110a0035a14c0050e0052e30500000a100052e30300000a110052e30100000a130052e30c00001a050a87e25a04d0e5030050e30800001ab4009fe50c23fdebb0109fe50320a0e3200801e0900201e0a117a0e1050a87e25a14c0e500a0a0e30a60a0e10ab0a0e10250a0e3054a87e28788fdeb762f80e25a14d4e57c009fe50b70a0e18110a0e1b10090e1869082e0060080e00008a0e12088a0e17c88fdeb8810a0e1b10090e10910a0e10520a0e1b000cde1b000dde19b9dfdeb010088e20008a0e1017087e22088a0e1080057e3029089e2f0ffffba01a08ae208005ae3206086e2e1ffffba04d08de2f04fbde81eff2fe1b8d40902ff7f0000c0ce1302eccd1302", "lang": "c", "divergences": 35, "c_source": "/* func_ov006_020f2cb8 at 0x020f2cb8 (ov006)\n *\n * Matched byte-for-byte with mwccarm 1.2/sp2p3 (ov006).\n */\ntypedef unsigned short u16;\ntypedef unsigned char u8;\ntypedef short s16;\n\nextern int RandomIntInternal(int* seed);\nextern int data_0209d4b8;\nextern u8 data_ov006_0213cec0[];\nextern u16 data_ov006_0213cdec[];\nextern char* func_02054fb0(void);\nextern void MultiStore16(short val, char* dst, int nbytes);\n\nstruct Self {\n char pad0[0x5172];\n u16 count;\n u16 type;\n char pad2[0x545a - 0x5176];\n u8 sel;\n};\n\nvoid func_ov006_020f2cb8(struct Self* self)\n{\n char* c5;\n char* sb;\n int base;\n u16 type;\n int sl, r6;\n u16 idx;\n int i;\n\n base = 0;\n if (self->count >= 0x14) base = 0x14;\n else if (self->count >= 0xa) base = 0xa;\n\n self->sel = (data_ov006_0213cec0 + base)[\n ((unsigned)RandomIntInternal(&data_0209d4b8) >> 16 & 0x7fff) * 10 >> 15];\n\n type = self->type;\n if (type == 9) self->sel = 1;\n if (type == 0xe || type == 0x10 || type == 0x11 || type == 0x13) {\n if (self->sel == 3)\n self->sel = (u8)((((unsigned)RandomIntInternal(&data_0209d4b8) >> 16 & 0x7fff) * 3) >> 15);\n }\n\n c5 = (char*)self + 0x5000;\n for (sl = 0, r6 = 0; sl < 8; sl++, r6 += 0x20) {\n sb = func_02054fb0() + 0x1d8 + r6 * 2;\n idx = (u16)(data_ov006_0213cdec[*(u8*)(c5 + 0x45a)] + r6);\n for (i = 0; i < 8; i++) {\n MultiStore16(((u16*)func_02054fb0())[idx], sb, 2);\n idx = (u16)(idx + 1);\n sb += 2;\n }\n }\n}\n", "source": "random-fanout"} +{"module": "ov095", "addr": "0x02135cdc", "name": "func_ov095_02135cdc", "size": 436, "target_hex": "f0402de904d04de20160a0e10070a0e15c4086e20410a0e15c0087e2b71cfceb0050a0e10410a0e15c0087e2a716fceb0040a0e10120a0e30700a0e10610a0e12623c7e59dfeffeb0060a0e18c1087e2030c87e2f4c2d0e10400a0e19546c3e0f050d1e1022ba0e3024094e00c2085e0b020c1e1fe18d7e10020a3e22446a0e1024a84e1e014fceb0008a0e14008a0e10008a0e12008a0e14002a0e18000a0e1011080e2030c87e28130a0e1f402d0e1f8109fe50020a0e3f33091e1021ba0e39453c3e0015095e00030a3e2900410e025c6a0e103ca8ce10900005aa300a0e39c5084e09c4224e0cc3fa0e1011095e0934024e00200a4e021e6a0e100ea8ee1080000ea5100a0e39c5084e09c4224e0cc3fa0e1011095e0934024e00200a4e021e6a0e100ea8ee1322aa0e30000a0e396c285e0965025e0c64fa0e1ce15a0e1023ba0e3211a8ee003309ce0945225e0c90f87e2f040d0e10112a0e10020a5e22336a0e1414884e0023a83e1c315a0e1b040c0e1030c87e2211a83e00112a0e1f422d0e14138a0e1030052e1b432c0c1030c87e2f412d0e1002063e2020051e1b422c0b104d08de2f040bde81eff2fe114220802", "lang": "c", "divergences": 35, "c_source": "/* BEST_DIV=35; residual: scale result in ip not lr + n*0x32000 vs w-round interleave\n * (known SMULL schedule floor; HAND-ASM exists but pure-C exhaustive stays at 35).\n * Store-first + named v keeps size 0x1b4; fr-complete blows to 0x1c0.\n * Ternary/frp/u64/decl-order/pragma sweeps did not improve.\n */\ntypedef short s16;\ntypedef unsigned short u16;\ntypedef long long s64;\nextern int Vec3_Dist(void *a, void *b);\nextern s16 Vec3_HorzAngle(void *a, void *b);\nextern int func_ov095_0213579c(void *self, void *p);\nextern int AngleDiff(int a, int b);\nextern s16 data_02082214[];\n\nvoid func_ov095_02135cdc(char *self, char *p) {\n char *pv = p + 0x5c;\n int dist = Vec3_Dist(self + 0x5c, pv);\n int angle = Vec3_HorzAngle(self + 0x5c, pv);\n int ret, fd, ad, idx, tv, ip, w, fr, bound;\n s16 *p8c, f324, cur;\n self[0x326] = 1;\n ret = func_ov095_0213579c(self, p);\n p8c = (s16 *)(((s64)(int)(self + 0x8c)) & 0xFFFFFFFFFFFFFFFFLL);\n f324 = *(s16 *)(self + 0x324);\n {\n s64 prod = (s64)dist * ret;\n cur = *p8c;\n *p8c = (s16)(cur + f324);\n fd = (int)((prod + 0x800) >> 12);\n }\n ad = AngleDiff(angle, *(s16 *)(self + 0x8e));\n idx = ((u16)(s16)ad >> 4) << 1;\n idx = idx + 1;\n f324 = *(s16 *)(self + 0x324);\n tv = data_02082214[idx];\n ip = (int)(((s64)fd * tv + 0x800) >> 12);\n if (f324 * fd < 0)\n w = (int)(((s64)ip * 0xa3 + 0x800) >> 12);\n else\n w = (int)(((s64)ip * 0x51 + 0x800) >> 12);\n\n fr = (int)(((s64)ret * 0x32000 + 0x800) >> 12);\n {\n s16 *p324 = (s16 *)(self + 0x324);\n s16 v;\n w = (w + ((unsigned)(w >> 11) >> 20)) << 4;\n v = (s16)(*p324 + (w >> 16));\n *p324 = v;\n bound = ((fr + ((unsigned)(fr >> 11) >> 20)) << 4) >> 16;\n if (v > bound) *p324 = bound;\n v = *p324;\n if (v < -bound) *p324 = -bound;\n }\n}\n", "source": "lunavyqo-groupb-pure-c-best", "note": "size-mismatch size 0x1b4 vs 0x1c0"} {"module": "ov002", "addr": "0x020c3f40", "name": "_ZN6Player15St_Respawn_MainEv", "size": 328, "target_hex": "10402de908d04de20040a0e1e316d4e5000051e30400000a010051e32400000a020051e33100000a3d0000ea061c84e2b41ad1e1000051e30e00000a010051e33700001a0109a0e3000060e29c0084e5e4009fe5d816d4e50000d0e5000051e12f00001a7596fdeb060c84e22610a0e3b61ac0e12a0000eade16d4e5000051e32700001a00c0a0e35510a0e30121a0e3013aa0e300c08de5d3ebffeb9c009fe5001084e00000d1e5010080e20000c1e51b0000ea67ebffeb000050e31800000a0020a0e30400a0e14710a0e3013aa0e300208de5c4ebffeb60009fe5001084e00000d1e5010080e20000c1e50c0000ea060c84e2b60ad0e1000050e30800001a34009fe5d816d4e50000d0e5000051e10000001a3696fdeb24109fe50400a0e10e7c00eb0400a0e159ebffeb0100a0e308d08de21040bde81eff2fe150f20902e306000054011102", "lang": "cpp", "divergences": 36, "c_source": "//cpp\ntypedef unsigned char u8;\ntypedef unsigned short u16;\n\nclass Player;\nclass State;\n\nextern \"C\" void FUN_02029980(void);\nextern \"C\" void FUN_02029934(void);\nextern \"C\" void _ZN6Player7SetAnimEji5Fix12IiEj(Player* self, unsigned int a, int b, int c, unsigned int d);\nextern \"C\" int _ZN6Player12FinishedAnimEv(Player* self);\nextern \"C\" void _ZN6Player11ChangeStateERNS_5StateE(Player* self, State& s);\nextern \"C\" void func_ov002_020bedd4(char* self);\nextern u8 data_0209f250;\nextern State data_ov002_02110154;\n\nextern \"C\" int _ZN6Player15St_Respawn_MainEv(Player* self)\n{\n char* f = (char*)self;\n switch (*(u8*)(f + 0x6e3)) {\n case 0:\n switch (*(u16*)(f + 0x6a4)) {\n case 1:\n *(int*)(f + 0x9c) = -0x4000;\n if (*(u8*)(f + 0x6d8) == data_0209f250) {\n FUN_02029980();\n *(u16*)(f + 0x6a6) = 0x26;\n }\n break;\n case 0:\n if (*(u8*)(f + 0x6de) == 0) {\n u8* p = (u8*)(f + 0x6e3);\n _ZN6Player7SetAnimEji5Fix12IiEj(self, 0x55, 0x40000000, 0x1000, 0);\n (*p)++;\n }\n break;\n }\n break;\n case 1:\n if (_ZN6Player12FinishedAnimEv(self)) {\n u8* p = (u8*)(f + 0x6e3);\n _ZN6Player7SetAnimEji5Fix12IiEj(self, 0x47, 0, 0x1000, 0);\n (*p)++;\n }\n break;\n case 2:\n if (*(u16*)(f + 0x6a6) == 0) {\n if (*(u8*)(f + 0x6d8) == data_0209f250)\n FUN_02029934();\n _ZN6Player11ChangeStateERNS_5StateE(self, data_ov002_02110154);\n }\n break;\n }\n func_ov002_020bedd4(f);\n return 1;\n}\n", "source": "fanout"} {"module": "ov002", "addr": "0x020b4bfc", "name": "func_ov002_020b4bfc", "size": 348, "target_hex": "70402de90040a0e1ca0dd4e5030050e300f18f90340000ea020000ea070000ea190000ea1e0000eacb0dd4e5acd4fdeb000050e30100a013ca0dc4152a0000ea0c019fe5000084e06218feeb000050e30600001afc009fe50210a0e3002084e00000d2e5010040e20000c2e5c91dc4e5c80dd4e5000050e30000a003c80dc4050200a003ca0dc405170000eacb0dd4e593d4fdeb000050e30300a003ca0dc405110000eaa8009fe5000084e04918feeb000050e30600001a98009fe50210a0e3002084e00000d2e5010080e20000c2e5c91dc4e5c80dd4e5040050e30400a023c80dc4250000a023ca0dc4254b5e84e20060a0e3c80dd4e5000056e10700001a0500a0e1b511feeb000050e30900001a0500a0e10410a0e11a11feeb050000ea0500a0e1ad11feeb000050e30100000a0500a0e10211feeb016086e2050056e3725f85e2eaffffba0100a0e37040bde81eff2fe1c90d0000c80d0000", "lang": "c", "divergences": 36, "c_source": "extern int _ZN5Event6GetBitEj(unsigned int);\nextern unsigned char DecIfAbove0_Byte(unsigned char* p);\nextern int _ZN16MeshColliderBase9IsEnabledEv(void*);\nextern void _ZN16MeshColliderBase6EnableEP5Actor(void*, void*);\nextern void _ZN16MeshColliderBase7DisableEv(void*);\n\nint func_ov002_020b4bfc(char* c)\n{\n int i;\n char* m;\n unsigned char* p;\n switch (*(unsigned char*)(c + 0xdca)) {\n case 0:\n if (_ZN5Event6GetBitEj(*(unsigned char*)(c + 0xdcb)))\n *(unsigned char*)(c + 0xdca) = 1;\n break;\n case 1:\n if (DecIfAbove0_Byte((unsigned char*)(c + 0xdc9)) == 0) {\n p = (unsigned char*)(c + 0xdc8);\n *p = *p - 1;\n *(unsigned char*)(c + 0xdc9) = 2;\n }\n if (*(unsigned char*)(c + 0xdc8) == 0) {\n *(unsigned char*)(c + 0xdc8) = 0;\n *(unsigned char*)(c + 0xdca) = 2;\n }\n break;\n case 2:\n if (_ZN5Event6GetBitEj(*(unsigned char*)(c + 0xdcb)) == 0)\n *(unsigned char*)(c + 0xdca) = 3;\n break;\n case 3:\n if (DecIfAbove0_Byte((unsigned char*)(c + 0xdc9)) == 0) {\n p = (unsigned char*)(c + 0xdc8);\n *p = *p + 1;\n *(unsigned char*)(c + 0xdc9) = 2;\n }\n if (*(unsigned char*)(c + 0xdc8) >= 4) {\n *(unsigned char*)(c + 0xdc8) = 4;\n *(unsigned char*)(c + 0xdca) = 0;\n }\n break;\n }\n m = c + 0x4b0;\n for (i = 0; i < 5; i++) {\n if (i == *(unsigned char*)(c + 0xdc8)) {\n if (!_ZN16MeshColliderBase9IsEnabledEv(m))\n _ZN16MeshColliderBase6EnableEP5Actor(m, c);\n } else {\n if (_ZN16MeshColliderBase9IsEnabledEv(m))\n _ZN16MeshColliderBase7DisableEv(m);\n }\n m += 0x1c8;\n }\n return 1;\n}\n", "source": "fanout"} {"module": "ov007", "addr": "0x020b8fd4", "name": "func_ov007_020b8fd4", "size": 480, "target_hex": "f0432de904d04de2c4119fe50090a0e1000091e5004090e5010a54e3250000ca080090e50227a0e3042080e5000091e50638a0e3082090e598019fe5083082e5000090e5200090e5000050e30200000a030050e30800000a0f0000ea001091e5010a64e2081091e5042081e2001092e5000481e0000082e5070000ea001091e5010a64e2081091e5000060e2082081e2001092e5000481e0000082e530119fe534019fe5002091e5001090e5080092e5341091e5be2c00eb14019fe5000090e5040090e55f2c00eb04019fe5000090e5080090e55b2c00ebf8009fe5f0109fe5003090e5f0009fe5004091e5000090e5301093e5285190e5002093e5000095e5000051e3040090e50c7094e5106094e5084092e5f000d0e1141092e50040a0130410a011010050e304d08d02f043bd081eff2f010106a0e17d1fa0e38d67feeb0080a0e10406a0e1c810a0e38967feeb000058e10080a0d1bc00d7e1003095e5012a68e2900801e0083093e5a10f81e0c00083e0040087e5001095e50700a0e10c3091e50910a0e1083087e53c2087e5002095e5082092e5042086e5002095e50c2092e5082086e5812c00eb0600a0e10910a0e17e2c00eb0700a0e1212c00eb0600a0e11f2c00eb04d08de2f043bde81eff2fe19c4b1002a04b10022c341002", "lang": "c", "divergences": 36, "c_source": "typedef signed char s8;\ntypedef unsigned char u8;\ntypedef short s16;\ntypedef unsigned short u16;\ntypedef unsigned int u32;\n\nextern int* data_ov007_02104b9c;\nextern int* data_ov007_02104ba0;\nextern int* data_ov007_0210342c;\n\nextern void func_ov007_020c4388(char* r0, int r1);\nextern void func_ov007_020c421c(char* r0);\nextern int _ZN4cstd3divEii(int a, int b);\n\nvoid func_ov007_020b8fd4(char* sb)\n{\n int* g = data_ov007_02104b9c;\n int r4 = g[0];\n\n if (r4 <= 0x1000) {\n *(int*)(((int**)g)[2] + 1) = 0x80000;\n *(int*)(((int**)data_ov007_02104b9c)[2] + 2) = 0x60000;\n\n switch (((int*)data_ov007_02104ba0)[8]) {\n case 0: {\n int t = 0x1000 - r4;\n int* p = (int*)((((int)((int**)data_ov007_02104b9c)[2]) + 4) & 0xFFFFFFFFFFFFFFFFLL);\n *p = *p + (t << 8);\n break;\n }\n case 3: {\n int t = 0x1000 - r4;\n int* p = (int*)((((int)((int**)data_ov007_02104b9c)[2]) + 8) & 0xFFFFFFFFFFFFFFFFLL);\n *p = *p + ((-t) << 8);\n break;\n }\n }\n\n func_ov007_020c4388((char*)((int**)data_ov007_02104b9c)[2], data_ov007_0210342c[0xd]);\n func_ov007_020c421c((char*)((int**)data_ov007_02104b9c)[1]);\n func_ov007_020c421c((char*)((int**)data_ov007_02104b9c)[2]);\n }\n\n {\n int* pba0 = data_ov007_02104ba0;\n int* pb9c = data_ov007_02104b9c;\n int* p342c = data_ov007_0210342c;\n int flag = pba0[0xc];\n int* r5 = (int*)p342c[0x4a];\n int* r2 = (int*)pba0[0];\n s16 a;\n char* r7 = (char*)((int**)pb9c)[3];\n char* r6 = (char*)((int**)pb9c)[4];\n int x = r2[2];\n int y;\n int q1, q2;\n\n a = *(s16*)(((int**)(r5[0]))[1]);\n y = r2[5];\n if (flag != 0) { x = 0; y = 0; }\n if (a == 1) return;\n\n q1 = _ZN4cstd3divEii(y << 0xc, 0x1f4);\n q2 = _ZN4cstd3divEii(x << 0xc, 0xc8);\n if (q1 > q2) q1 = q2;\n\n {\n int base = ((int*)r5[0])[2];\n int m = *(u16*)(r7 + 0xc) * q1;\n *(int*)(r7 + 4) = base + ((m + ((u32)m >> 0x1f)) >> 1);\n *(int*)(r7 + 8) = ((int*)r5[0])[3];\n *(int*)(r7 + 0x3c) = 0x1000 - q1;\n *(int*)(r6 + 4) = ((int*)r5[0])[2];\n *(int*)(r6 + 8) = ((int*)r5[0])[3];\n }\n\n func_ov007_020c4388(r7, (int)sb);\n func_ov007_020c4388(r6, (int)sb);\n func_ov007_020c421c(r7);\n func_ov007_020c421c(r6);\n }\n}", "source": "fanout-opus"} @@ -359,7 +365,6 @@ {"module": "ov102", "addr": "0x0214c1bc", "name": "_ZN6BobOmb8BehaviorEv", "size": 852, "target_hex": "10402de908d04de20040a0e1f613d4e5000051e30400000a10fbffeb08d08de20100a0e31040bde81eff2fe14bfaffeb000050e308d08d120100a0131040bd181eff2f110400a0e103faffeb000050e308d08d120100a0131040bd181eff2f110400a0e1511f84e2032c84e20030a0e38185fdeb000050e30700000a020050e30100001a0400a0e1f4faffeb08d08de20100a0e31040bde81eff2fe10c0194e5000050e31900000a0400a0e1511f84e20d89fdeb0400a0e1abfbffebb00094e5010c10e20100a0130000a003000050e30000a0130c0184150c00001a0c0194e5000050e30900000a0400a0e1a3fcffeb110e84e25b23fbeb110e84e24c23fbeb08d08de20100a0e31040bde81eff2fe10400a0e159fbffebdc0394e5050050e38500000a9c0094e5000050e35100000a300194e5100010e21900000a340194e50e13fbeb00c0a0e3021aa0e300e061e20020a0e100108de20400a0e1323aa0e3b0e0cde1b2c0cde1b4c0cde1c485fdeb0400a0e1111e84e23d12fbeb0400a0e1511f84e20020a0e32b8afdeb110e84e23423fbeb08d08de20100a0e31040bde81eff2fe10400a0e1111e84e23012fbeb94019fe5d000d0e1060050e31000001a88019fe50000d0e5030050e30c00001a980094e5050a50e30400001a0400a0e1511f84e20320a0e3138afdeb080000ea0400a0e1511f84e20220a0e30e8afdeb030000ea0400a0e1511f84e20220a0e3098afdeb510f84e2c3a4fbeb000050e31400000a510f84e2a0a4fbeb040080e2a1aefbeb000050e30500000a0400a0e186faffeb08d08de20100a0e31040bde81eff2fe1510f84e284a4fbeb000050e30400000adc0394e5000050e30100001a0400a0e19ffeffeb0400a0e182fbffeb000050e308d08d020000a0031040bd081eff2f01340194e5000050e31e00000a300194e5010910e20200000a0400a0e10410a0e3c3fbffebdc0394e5040050e31500001af503d4e5fe0080e2ff0000e2010050e31000008a340194e5a712fbeb000050e30c00000abc00d0e1bd0050e30100a0030000a013000050e30600000a0400a0e10210a0e3aefbffeb4a1f84e2000091e5010980e3000081e50400a0e116fcffeb110e84e2ce22fbeb110e84e2bf22fbeb0400a0e111faffeb0100a0e308d08de21040bde81eff2fe1f8f2090220f20902", "lang": "c", "divergences": 40, "c_source": "extern void func_ov102_0214ae1c(void*);\nextern int func_ov102_0214ab1c(void*);\nextern int func_ov102_0214aa18(void*);\nextern int _ZN5Enemy26UpdateKillByInvincibleCharER12WithMeshClsnR9ModelAnimj(void*,void*,void*,unsigned int);\nextern void _ZN5Enemy11UpdateDeathER12WithMeshClsn(void*,void*);\nextern void func_ov102_0214b128(void*);\nextern void func_ov102_0214b53c(void*);\nextern void _ZN12CylinderClsn5ClearEv(void*);\nextern void _ZN12CylinderClsn6UpdateEv(void*);\nextern void func_ov102_0214b03c(void*);\nextern void *_ZN5Actor10FindWithIDEj(unsigned int);\nextern void func_020ada40(void*,void*,void*,unsigned int);\nextern void _ZN5Actor9UpdatePosEP12CylinderClsn(void*,void*);\nextern void _ZN5Enemy12UpdateWMClsnER12WithMeshClsnj(void*,void*,unsigned int);\nextern int _ZNK12WithMeshClsn10IsOnGroundEv(void*);\nextern void *_ZNK12WithMeshClsn14GetFloorResultEv(void*);\nextern int func_02037e78(int*);\nextern int _ZNK12WithMeshClsn8IsOnWallEv(void*);\nextern void func_ov102_0214beb4(void*);\nextern int func_ov102_0214b248(void*);\nextern void func_ov102_0214b384(void*,int);\nextern void func_ov102_0214ad40(void*);\n\nextern signed char data_0209f2f8;\nextern unsigned char data_0209f220;\n\nint func_ov102_0214c1bc(char *c)\n{\n int flag;\n int r0;\n void *other;\n\n if (*(unsigned char*)(c+0x3f6) != 0) {\n func_ov102_0214ae1c(c);\n return 1;\n }\n if (func_ov102_0214ab1c(c)) {\n return 1;\n }\n if (func_ov102_0214aa18(c)) {\n return 1;\n }\n\n r0 = _ZN5Enemy26UpdateKillByInvincibleCharER12WithMeshClsnR9ModelAnimj(c, c+0x144, c+0x300, 0);\n if (r0 != 0) {\n if (r0 == 2) {\n func_ov102_0214ae1c(c);\n }\n return 1;\n }\n\n if (*(int*)(c+0x10c) != 0) {\n _ZN5Enemy11UpdateDeathER12WithMeshClsn(c, c+0x144);\n func_ov102_0214b128(c);\n flag = (*(int*)(c+0xb0) & 0x100) != 0;\n if (flag != 0) {\n *(int*)(c+0x10c) = 0;\n } else if (*(int*)(c+0x10c) != 0) {\n func_ov102_0214b53c(c);\n _ZN12CylinderClsn5ClearEv(c+0x110);\n _ZN12CylinderClsn6UpdateEv(c+0x110);\n return 1;\n }\n }\n\n func_ov102_0214b03c(c);\n if (*(int*)(c+0x3dc) == 5) {\n return 1;\n }\n\n if (*(int*)(c+0x9c) != 0) {\n if ((*(int*)(c+0x130) & 0x10) != 0) {\n short v[3];\n other = _ZN5Actor10FindWithIDEj(*(unsigned int*)(c+0x134));\n v[0] = -0x2000;\n v[1] = 0;\n v[2] = 0;\n func_020ada40(c, v, other, 0x32000);\n _ZN5Actor9UpdatePosEP12CylinderClsn(c, c+0x110);\n _ZN5Enemy12UpdateWMClsnER12WithMeshClsnj(c, c+0x144, 0);\n _ZN12CylinderClsn5ClearEv(c+0x110);\n return 1;\n }\n\n _ZN5Actor9UpdatePosEP12CylinderClsn(c, c+0x110);\n if (data_0209f2f8 == 6 && data_0209f220 == 3) {\n if (*(int*)(c+0x98) == 0x5000) {\n _ZN5Enemy12UpdateWMClsnER12WithMeshClsnj(c, c+0x144, 3);\n } else {\n _ZN5Enemy12UpdateWMClsnER12WithMeshClsnj(c, c+0x144, 2);\n }\n } else {\n _ZN5Enemy12UpdateWMClsnER12WithMeshClsnj(c, c+0x144, 2);\n }\n\n if (_ZNK12WithMeshClsn10IsOnGroundEv(c+0x144)) {\n if (func_02037e78((int*)((char*)_ZNK12WithMeshClsn14GetFloorResultEv(c+0x144)+4))) {\n func_ov102_0214ae1c(c);\n return 1;\n }\n if (_ZNK12WithMeshClsn8IsOnWallEv(c+0x144) && *(int*)(c+0x3dc) == 0) {\n func_ov102_0214beb4(c);\n }\n }\n }\n\n r0 = func_ov102_0214b248(c);\n if (r0 == 0) {\n return 0;\n }\n\n if (*(unsigned int*)(c+0x134) != 0) {\n if ((*(int*)(c+0x130) & 0x4000) != 0) {\n func_ov102_0214b384(c, 4);\n }\n if (*(int*)(c+0x3dc) == 4) {\n unsigned char b = *(unsigned char*)(c+0x3f5);\n if (b == 2 || b == 3) {\n other = _ZN5Actor10FindWithIDEj(*(unsigned int*)(c+0x134));\n if (other != 0) {\n int flag2 = (*(unsigned short*)((char*)other+0xc) == 0xbd);\n if (flag2) {\n func_ov102_0214b384(c, 2);\n *(int*)(c+0x128) |= 0x4000;\n }\n }\n }\n }\n }\n\n func_ov102_0214b53c(c);\n _ZN12CylinderClsn5ClearEv(c+0x110);\n _ZN12CylinderClsn6UpdateEv(c+0x110);\n func_ov102_0214ad40(c);\n return 1;\n}\n", "source": "pr62-andrewboudreau"} {"module": "ov006", "addr": "0x020dfeec", "name": "func_ov006_020dfeec", "size": 380, "target_hex": "10402de908d04de20040a0e1030051e30100000a120051e31800001a030051e30000a003b40084050300000a0000a0e3b40084e5b40094e5fc36ffeb0230a0e3a83084e5a81094e5050a84e2ac1084e50110a0e36214c0e50020a0e36324c0e5b41094e5030051e36434c0a56424c0b5050a84e20110a0e36814c0e50e0000ea000051e30c00001a0220a0e3a82084e5a80094e5ac0084e5b40094e5030050e30500001a050a84e20110a0e36214c0e50010a0e36314c0e56424c0e50000a0e30030a0e10020a0e103c0a0e3001084e0051a81e26214d1e5000051e300118410051a811234c4811500118400051a810234348105001184e0051a81e2402481e5010080e24c2481e5030050e3eeffffba050a84e23c10a0e31c1480e5182480e54c109fe5dc2080e5010084e0418affebb41094e53c009fe5bc1084e5bc1094e5a020a0e3000051e1bc0084850000e0e300008de50d00a0e38010a0e30130a0e304008de51543ffeb08d08de21040bde81eff2fe1384f00000e270000", "lang": "cpp", "divergences": 40, "c_source": "//cpp\nextern \"C\" {\nextern void func_ov004_020adb1c(void*);\nextern void func_ov006_020c2924(char*);\nextern void func_ov004_020b0cac(int, int, int, int, int, short);\n#pragma optimize_for_size on\nvoid func_ov006_020dfeec(char* r0, int r1) {\n if (r1 == 3 || r1 == 0x12) {\n if (r1 == 3) {\n int x = 0;\n *(int*)(r0 + 0xb4) = x;\n func_ov004_020adb1c(r0);\n int y = 2;\n *(int*)(r0 + 0xa8) = y;\n int z = *(int*)(r0 + 0xa8);\n *(int*)(r0 + 0xac) = z;\n *(char*)(r0 + 0x5462) = 1;\n *(char*)(r0 + 0x5463) = 0;\n if (*(int*)(r0 + 0xb4) >= 3) {\n *(char*)(r0 + 0x5464) = 2;\n } else {\n *(char*)(r0 + 0x5464) = 0;\n }\n *(char*)(r0 + 0x5468) = 1;\n return;\n }\n int b = *(int*)(r0 + 0xb4);\n if (b == 0) {\n int a = 2;\n *(int*)(r0 + 0xa8) = a;\n int c = *(int*)(r0 + 0xa8);\n *(int*)(r0 + 0xac) = c;\n if (*(int*)(r0 + 0xb4) == 3) {\n *(char*)(r0 + 0x5462) = 1;\n *(char*)(r0 + 0x5463) = 0;\n *(char*)(r0 + 0x5464) = 2;\n }\n for(int i = 0; i < 3; i++) {\n int p = *(int*)(r0 + 0x5000 + i * 4 + 0x434);\n *(int*)(r0 + 0x5000 + i * 4 + 0x434) = *(char*)(r0 + 0x5462) ? 3 : 0;\n *(int*)(r0 + 0x5000 + i * 4 + 0x440) = 0;\n *(int*)(r0 + 0x5000 + i * 4 + 0x44c) = 0;\n }\n *(int*)(r0 + 0x541c) = 0x3c;\n *(int*)(r0 + 0x5418) = 0;\n *(int*)(r0 + 0x50dc) = 0;\n func_ov006_020c2924(r0 + 0x4f38);\n *(int*)(r0 + 0xbc) = *(int*)(r0 + 0xb4);\n if (*(int*)(r0 + 0xbc) > 0x270e) {\n *(int*)(r0 + 0xbc) = 0x270e;\n }\n int s1 = -1;\n int s2 = 0xd;\n func_ov004_020b0cac(s2, 0x80, 0xa0, 1, s1, (short)s2);\n }\n }\n}\n}\n", "source": "fanout-glm-5.2"} {"module": "ov006", "addr": "0x020dd334", "name": "func_ov006_020dd334", "size": 380, "target_hex": "f0472de918d04de20040a0e10060a0e358519fe500808de254719fe50500a0e18d79fdeb200807e08001a0e1a007a0e1060188e7016086e2030056e3f6ffffba28619fe528819fe50070a0e300508de20ca08de20690a0e30600a0e17e79fdeb200808e0900901e0070195e7a10780e0010080e2070000e207018ae7017087e2030057e3f3ffffba0020a0e30230a0e10210a0e10400a0e1d8909fe50260a0e10170a0e38352a0e1105085e20586a0e1015980e2c08a85e5028199e7013083e20886a0e1080053e3c48a85e5d17ac5e5011081e2d27ac5e50630a0a1012082a2180051e3180080e2edffffba00109de51820a0e3914220e0011980e20100a0e3d40ac1e50c309de5934221e0011981e2d40ac1e504109de5083081e2934221e0011981e2d40ac1e510109de5083081e2934221e0011981e2d40ac1e508109de5103081e2934221e0011981e2d40ac1e514109de5103081e2934221e0011981e2d40ac1e518d08de2f047bde81eff2fe1b8d40902ff7f000058e31202", "lang": "c", "divergences": 40, "c_source": "extern int RandomIntInternal(int *seed);\nextern int data_0209d4b8;\nextern int data_ov006_0212e358[];\n\nvoid func_ov006_020dd334(char *c)\n{\n int sp[6];\n int i;\n int r2;\n int r3;\n int r1;\n char *p;\n\n for (i = 0; i < 3; i++) {\n sp[i] = (int)((((unsigned int)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) << 3) >> 15;\n }\n for (i = 0; i < 3; i++) {\n sp[i + 3] = (sp[i] + (int)((((unsigned int)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 6) >> 15) + 1;\n sp[i + 3] &= 7;\n }\n\n r2 = 0;\n r3 = 0;\n r1 = 0;\n p = c;\n do {\n *(int *)(p + 0x4ac0) = ((r3 << 5) + 0x10) << 12;\n *(int *)(p + 0x4ac4) = data_ov006_0212e358[r2] << 12;\n r3++;\n if (r3 >= 8) {\n r3 = 0;\n r2++;\n }\n *(unsigned char *)(p + 0x4ad1) = 1;\n *(unsigned char *)(p + 0x4ad2) = 1;\n r1++;\n p += 0x18;\n } while (r1 < 0x18);\n\n *(unsigned char *)(c + sp[0] * 0x18 + 0x4000 + 0xad4) = 1;\n *(unsigned char *)(c + sp[3] * 0x18 + 0x4000 + 0xad4) = 1;\n *(unsigned char *)(c + (sp[1] + 8) * 0x18 + 0x4000 + 0xad4) = 1;\n *(unsigned char *)(c + (sp[4] + 8) * 0x18 + 0x4000 + 0xad4) = 1;\n *(unsigned char *)(c + (sp[2] + 0x10) * 0x18 + 0x4000 + 0xad4) = 1;\n *(unsigned char *)(c + (sp[5] + 0x10) * 0x18 + 0x4000 + 0xad4) = 1;\n}", "source": "stranded-recovery-20260709"} -{"module": "ov095", "addr": "0x02135cdc", "name": "func_ov095_02135cdc", "size": 436, "target_hex": "f0402de904d04de20160a0e10070a0e15c4086e20410a0e15c0087e2b71cfceb0050a0e10410a0e15c0087e2a716fceb0040a0e10120a0e30700a0e10610a0e12623c7e59dfeffeb0060a0e18c1087e2030c87e2f4c2d0e10400a0e19546c3e0f050d1e1022ba0e3024094e00c2085e0b020c1e1fe18d7e10020a3e22446a0e1024a84e1e014fceb0008a0e14008a0e10008a0e12008a0e14002a0e18000a0e1011080e2030c87e28130a0e1f402d0e1f8109fe50020a0e3f33091e1021ba0e39453c3e0015095e00030a3e2900410e025c6a0e103ca8ce10900005aa300a0e39c5084e09c4224e0cc3fa0e1011095e0934024e00200a4e021e6a0e100ea8ee1080000ea5100a0e39c5084e09c4224e0cc3fa0e1011095e0934024e00200a4e021e6a0e100ea8ee1322aa0e30000a0e396c285e0965025e0c64fa0e1ce15a0e1023ba0e3211a8ee003309ce0945225e0c90f87e2f040d0e10112a0e10020a5e22336a0e1414884e0023a83e1c315a0e1b040c0e1030c87e2211a83e00112a0e1f422d0e14138a0e1030052e1b432c0c1030c87e2f412d0e1002063e2020051e1b422c0b104d08de2f040bde81eff2fe114220802", "lang": "c", "divergences": 35, "c_source": "/* BEST_DIV=35; residual: scale result in ip not lr + n*0x32000 vs w-round interleave\n * (known SMULL schedule floor; HAND-ASM exists but pure-C exhaustive stays at 35).\n * Store-first + named v keeps size 0x1b4; fr-complete blows to 0x1c0.\n * Ternary/frp/u64/decl-order/pragma sweeps did not improve.\n */\ntypedef short s16;\ntypedef unsigned short u16;\ntypedef long long s64;\nextern int Vec3_Dist(void *a, void *b);\nextern s16 Vec3_HorzAngle(void *a, void *b);\nextern int func_ov095_0213579c(void *self, void *p);\nextern int AngleDiff(int a, int b);\nextern s16 data_02082214[];\n\nvoid func_ov095_02135cdc(char *self, char *p) {\n char *pv = p + 0x5c;\n int dist = Vec3_Dist(self + 0x5c, pv);\n int angle = Vec3_HorzAngle(self + 0x5c, pv);\n int ret, fd, ad, idx, tv, ip, w, fr, bound;\n s16 *p8c, f324, cur;\n self[0x326] = 1;\n ret = func_ov095_0213579c(self, p);\n p8c = (s16 *)(((s64)(int)(self + 0x8c)) & 0xFFFFFFFFFFFFFFFFLL);\n f324 = *(s16 *)(self + 0x324);\n {\n s64 prod = (s64)dist * ret;\n cur = *p8c;\n *p8c = (s16)(cur + f324);\n fd = (int)((prod + 0x800) >> 12);\n }\n ad = AngleDiff(angle, *(s16 *)(self + 0x8e));\n idx = ((u16)(s16)ad >> 4) << 1;\n idx = idx + 1;\n f324 = *(s16 *)(self + 0x324);\n tv = data_02082214[idx];\n ip = (int)(((s64)fd * tv + 0x800) >> 12);\n if (f324 * fd < 0)\n w = (int)(((s64)ip * 0xa3 + 0x800) >> 12);\n else\n w = (int)(((s64)ip * 0x51 + 0x800) >> 12);\n\n fr = (int)(((s64)ret * 0x32000 + 0x800) >> 12);\n {\n s16 *p324 = (s16 *)(self + 0x324);\n s16 v;\n w = (w + ((unsigned)(w >> 11) >> 20)) << 4;\n v = (s16)(*p324 + (w >> 16));\n *p324 = v;\n bound = ((fr + ((unsigned)(fr >> 11) >> 20)) << 4) >> 16;\n if (v > bound) *p324 = bound;\n v = *p324;\n if (v < -bound) *p324 = -bound;\n }\n}\n", "source": "lunavyqo-groupb-pure-c-best", "note": "size-mismatch size 0x1b4 vs 0x1c0"} {"module": "ov006", "addr": "0x020c3990", "name": "func_ov006_020c3990", "size": 328, "target_hex": "30402de934d04de20010a0e30050a0e100108de520019fe5981d95e5000085e00121a0e3023ba0e3624bfdeb0040a0e30510a0e1704d85e5480091e5000050e33100001a062ca0e30a1ca0e302eaa0e30acaa0e3013aa0e3e0009fe510208de504e08de508c08de50c308de514108de518108de5e1dffdeb0201c0e310109de5a009a0e1401181e0b0009fe510108de5dadffdeb0201c0e314109de5a009a0e1401181e094009fe514108de5d3dffdeb0221c0e304009de508109de51c008de50c009de520108de510109de524008de514009de528108de52c008de5081085e29800a0e3941020e0a219a0e118309de528208de2413183e01c108de218308de530308de52effffeb030000ea014084e2160054e3981081e2c6ffffba20009fe5001090e5040090e5001085e5040085e534d08de23040bde81eff2fe1180d000050e60902c8ae1302", "lang": "cpp", "divergences": 40, "c_source": "//cpp\nextern \"C\" {\nvoid _ZN9ModelAnim7SetAnimEP8BCA_Filei5Fix12IiEj(void* self, void* f, int a, int b, unsigned int j);\nint RandomIntInternal(int* seed);\nvoid func_ov006_020c3754(void* elem, void* a, void* b, int c);\n}\nextern int data_0209e650;\nextern int data_ov006_0213aec8[];\n\nextern \"C\" void func_ov006_020c3990(char* c) {\n int i;\n char* elem;\n\n _ZN9ModelAnim7SetAnimEP8BCA_Filei5Fix12IiEj(\n c + 0xd18, *(void**)(c + 0xd98), 0x40000000, 0x800, 0);\n\n i = 0;\n elem = c;\n *(int*)(c + 0xd70) = 0;\n\n for (; i < 0x16; i++) {\n if (*(int*)(elem + 0x48) == 0) {\n int vals[8];\n\n vals[2] = 0x2000;\n vals[3] = 0xa000;\n vals[4] = 0x1000;\n vals[0] = 0x600;\n vals[1] = 0xa00;\n vals[5] = 0xa00;\n\n vals[0] = vals[0] +\n (((RandomIntInternal(&data_0209e650) & 0x7fffffff) >> 0x13) >> 2);\n vals[1] = vals[1] +\n (((RandomIntInternal(&data_0209e650) & 0x7fffffff) >> 0x13) >> 2);\n\n vals[5] = vals[5] + (((RandomIntInternal(&data_0209e650) & 0x7fffffff) >> 0x13) >> 2);\n\n {\n int tmp[3];\n tmp[0] = vals[2];\n tmp[1] = vals[3];\n tmp[2] = vals[4];\n func_ov006_020c3754(c + 8 + i * 0x98, &vals[0], tmp, vals[5]);\n }\n break;\n }\n elem += 0x98;\n }\n\n *(int*)c = data_ov006_0213aec8[0];\n *(int*)(c + 4) = data_ov006_0213aec8[1];\n}\n", "source": "fanout-glm-5.2"} {"module": "ov020", "addr": "0x0211174c", "name": "func_ov020_0211174c", "size": 656, "target_hex": "30402de904d04de20050a0e1180495e5f6fdfbeb180495e5f4fdfbeb0040b0e104d08d023040bd081eff2f01240495e50a0050e300f18f908f0000ea8e0000ea8d0000ea8c0000ea8b0000ea8a0000ea890000ea030000ea0f0000ea2c0000ea3d0000ea5e0000ea5701d4e5080010e204d08d023040bd081eff2f010700a0e3240485e5010c85e20010a0e3b010c0e104d08de23040bde81eff2fe1011c85e2b000d1e1000050e301004012b000c11104d08d123040bd181eff2f11641085e2000091e5010940e2000081e5341495e5640095e5000041e00a0950e304d08db23040bdb81eff2fb10a0941e2640085e50800a0e38d1f85e2240485e5000091e504d08de20100c0e3000081e53040bde81eff2fe10500a0e150ffffeb000050e304d08dd23040bdd81eff2fd10900a0e38d3f85e2240485e5000093e5741085e2012080e3b500a0e3002083e56b03fceb04d08de23040bde81eff2fe1641085e2000091e50a0a80e2000081e5641095e5340495e5000051e104d08db23040bdb81eff2fb1081095e5f8009fe55721d4e50100d0e7071002e2000051e10100000a0500a0e192feffeb0000a0e31c0485e5080095e50110a0e31110a0e10400a0e1ff1001e2742c00eb341495e50a00a0e3641085e504d08de2240485e53040bde81eff2fe1080095e50110a0e35721d4e51100a0e1000012e00700001a0700a0e3240485e5010c85e20a10a0e3b010c0e104d08de23040bde81eff2fe15001d4e5020050e30e00001a5c2085e2001092e554009fe5051a81e2001082e55c1095e5000051e104d08db23040bdb81eff2fb10500a0e19fc7fceb04d08de23040bde81eff2fe1030050e304d08d123040bd181eff2f110500a0e196c7fceb04d08de23040bde81eff2fe1284811020040a2ff", "lang": "c", "divergences": 41, "c_source": "typedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef int s32;\n\nextern void *Actor_FindWithID(unsigned int id);\nextern int func_ov020_021115ac(void *thiz);\nextern void Sound_PlayBank0(unsigned int id, void *pos);\nextern void func_ov020_02111340(void *thiz);\nextern void func_ov063_0211cae8(void *found, unsigned int mask);\nextern void ActorBase_MarkForDestruction(void *thiz);\nextern u8 data_ov020_02114828[];\n\nvoid func_ov020_0211174c(char *c)\n{\n char *found;\n\n Actor_FindWithID(*(unsigned int *)(c + 0x418));\n found = (char *)Actor_FindWithID(*(unsigned int *)(c + 0x418));\n if (found == 0)\n return;\n\n switch (*(s32 *)(c + 0x424)) {\n case 6:\n if ((*(u8 *)(found + 0x157) & 8) == 0)\n return;\n *(s32 *)(c + 0x424) = 7;\n *(u16 *)(c + 0x100) = 0;\n return;\n case 7:\n {\n u16 *ctr = (u16 *)(c + 0x100);\n s32 *z;\n s32 *fl;\n if (*ctr != 0) {\n *ctr -= 1;\n return;\n }\n z = (s32 *)(c + 0x64);\n *z -= 0x4000;\n if (*(s32 *)(c + 0x434) - *(s32 *)(c + 0x64) < 0x28000)\n return;\n *(s32 *)(c + 0x64) = *(s32 *)(c + 0x434) - 0x28000;\n fl = (s32 *)(c + 0x234);\n *(s32 *)(c + 0x424) = 8;\n *fl &= ~1;\n return;\n }\n case 8:\n {\n s32 *fl;\n if (func_ov020_021115ac(c) <= 0)\n return;\n fl = (s32 *)(c + 0x234);\n *(s32 *)(c + 0x424) = 9;\n *fl |= 1;\n Sound_PlayBank0(0xb5, c + 0x74);\n return;\n }\n case 9:\n {\n s32 *z = (s32 *)(c + 0x64);\n *z += 0xa000;\n if (*(s32 *)(c + 0x64) < *(s32 *)(c + 0x434))\n return;\n {\n int idx = *(s32 *)(c + 8);\n if ((*(u8 *)(found + 0x157) & 7) != data_ov020_02114828[idx])\n func_ov020_02111340(c);\n }\n *(s32 *)(c + 0x41c) = 0;\n func_ov063_0211cae8(found, (1u << *(s32 *)(c + 8)) & 0xff);\n *(s32 *)(c + 0x64) = *(s32 *)(c + 0x434);\n *(s32 *)(c + 0x424) = 0xa;\n return;\n }\n case 10:\n {\n s32 *z;\n if ((*(u8 *)(found + 0x157) & (1 << *(s32 *)(c + 8))) == 0) {\n *(s32 *)(c + 0x424) = 7;\n *(u16 *)(c + 0x100) = 0xa;\n return;\n }\n if (*(u8 *)(found + 0x150) == 2) {\n z = (s32 *)(c + 0x5c);\n *z += 0x5000;\n if (*(s32 *)(c + 0x5c) < (s32)0xffa24000)\n return;\n ActorBase_MarkForDestruction(c);\n return;\n }\n if (*(u8 *)(found + 0x150) != 3)\n return;\n ActorBase_MarkForDestruction(c);\n return;\n }\n default:\n return;\n }\n}\n", "source": "harvest-wave3"} {"module": "ov006", "addr": "0x020fea70", "name": "func_ov006_020fea70", "size": 312, "target_hex": "00402de904d04de2172b80e2bc11d2e1000051e304d08d020040bd081eff2f0104119fe5013080e0b010d3e1011041e2b010c3e1fc11d2e1000051e304d08dc20040bdc81eff2fc10010a0e30030a0e1bc11c2e1012983e20c2fd2e5000052e32a00001a3820a0e391022ee001398ee20120a0e30c2fc3e50e2fc3e500c0a0e30dcfc3e5fcce83e50227a0e3d82e83e50a29a0e3dc2e83e5e8ce83e5ecce83e50fcfc3e5e0ce83e5e4ce83e54f2c8ee2bac0c2e100cf83e50420a0e3042f83e5012081e2051a80e22f2cc1e5171b80e2b012d1e1000051e30400000a4c009fe5ff4efceb04d08de20040bde81eff2fe13c109fe504d08de2011080e0b000d1e1010080e2b000c1e10040bde81eff2fe1011081e2300051e3383083e2ccffffba04d08de20040bde81eff2fe11c5c00008d010000205c0000", "lang": "c", "divergences": 41, "c_source": "extern void _ZN5Sound12PlayBank2_2DEj(unsigned int);\n\nvoid func_ov006_020fea70(char *o)\n{\n int i;\n char *b;\n if (*(unsigned short *)(o + 0x5c1c) == 0) return;\n *(unsigned short *)(o + 0x5c1c) -= 1;\n if (*(short *)(o + 0x5c1c) > 0) return;\n *(unsigned short *)(o + 0x5c1c) = 0;\n for (i = 0; i < 0x30; i++)\n {\n if (*(unsigned char *)(o + i * 0x38 + 0x4f0c) == 0)\n {\n b = o + i * 0x38 + 0x4000;\n *(unsigned char *)(b + 0xf0c) = 1;\n *(unsigned char *)(b + 0xf0e) = 1;\n *(unsigned char *)(b + 0xf0d) = 0;\n *(int *)(b + 0xefc) = 0;\n *(int *)(b + 0xed8) = 0x80000;\n *(int *)(b + 0xedc) = 0x28000;\n *(int *)(b + 0xee8) = 0;\n *(int *)(b + 0xeec) = 0;\n *(unsigned char *)(b + 0xf0f) = 0;\n *(int *)(b + 0xee0) = 0;\n *(int *)(b + 0xee4) = 0;\n *(unsigned short *)(o + i * 0x38 + 0x4f0a) = 0;\n *(int *)(b + 0xf00) = 0;\n *(int *)(b + 0xf04) = 4;\n *(unsigned char *)(o + 0x5c2f) = (unsigned char)(i + 1);\n if (*(unsigned short *)(o + 0x5c20) != 0)\n _ZN5Sound12PlayBank2_2DEj(0x18d);\n else\n *(unsigned short *)(o + 0x5c20) += 1;\n return;\n }\n }\n}\n", "source": "fanout"} @@ -643,6 +648,7 @@ {"module": "ov006", "addr": "0x020f2790", "name": "func_ov006_020f2790", "size": 1320, "target_hex": "f04f2de90cd04de200a0a0e1052a8ae25514d2e5000051e30cd08d12f04fbd181eff2f11511c8ae2b497d1e1d4149fe50910d1e7000051e30300000a94feffeb0cd08de2f04fbde81eff2fe1b8149fe58930a0e1b31091e1b0049fe504108de55614d2e500108de56424fdeba0249fe5a0149fe5200802e00001a0e101308ae0a017a0e100009de50010c3e7050a8ae25a24d0e500009de50010d3e7004083e0010052e10d00001a60049fe55324fdeb5c149fe50320a0e3200801e0900201e0a107a0e10010d4e5010080e2000081e00000c4e50000d4e5030000e20000c4e500009de5000050e36200001a1cb49fe51c549fe50d40a0e30960a0e30b00a0e13e24fdeb200805e0900401e00b00a0e1a187a0e13924fdeb200805e0900601e0060058e3a177a0e1050000ba0a0058e3030000ca040057e3010000ba080057e3edffffdac4039fe50140e0e30450a0e12a24fdebb8139fe50520a0e3200801e0900201e0a4039fe5a15785e02324fdeb9c139fe5a0239fe5201801e00500a0e3910003e00900d2e7a32784e0000050e31d00000a081085e21400a0e3981024e0101082e2971023e00900a0e398a020e0071080e064239fe50446a0e101098ae2f84780e50336a0e1d83980e5050a8ae20140a0e3ed42c0e50030a0e3fd31c0e55a34d0e5051a81e202208ae06533c0e57841c1e50000d2e50cd08de2010080e20000c2e5f04fbde81eff2fe104009de51410a0e3016040e2970100e0980102e0103080e20900a0e3085082e298a020e006108ae006418ae0072080e0010984e20556a0e1f85780e50336a0e1d83980e5051a81e20140a0e3ed42c1e50000a0e3fd01c1e5050a8ae25a34d0e5050a82e26533c1e57841c0e50060a0e38cb29fe58c429fe50650a0e1640056e3070000ba018088e20c0058e3100000ba017087e20b0057e30580a0e10570a0a10b0000ea0b00a0e1d123fdeb201804e00d00a0e3910002e00b00a0e1a287a0e1cb23fdeb201804e00900a0e3910000e0a077a0e10900a0e398a020e0071080e030029fe5000081e008008de50000d0e5000050e31f00001a04029fe50140e0e30450a0e1ba23fdebf8119fe50520a0e3200801e0900201e0e4019fe5a15785e0b323fdebdc119fe50520a0e3200801e0900201e000009de5a14784e000218ae0081085e21400a0e3981023e0101084e2971021e0010982e20336a0e1f83780e50116a0e1d81980e508009de50120a0e30020c0e5010000ea016086e2beffffea00009de588119fe500008ae0050a80e2ed22c0e50020a0e3fd21c0e501208ae00010d2e564019fe5011081e20010c2e50910d0e7090080e0000051e304209d1504109d0501204102051a8ae25614d1e5020051e11b0000ba0e0059e30500000a100059e30300000a110059e30100000a130059e30b00001a04109de5011041e201118ae0012981e200109de5f83792e501118ae0011981e2f83781e5d82992e5052942e2d82981e5051a8ae20120a0e35524c1e50000d0e5000050e304009d055624c1155604c105050a8ae25504d0e5000050e30cd08d02f04fbd081eff2f019c009fe56223fdeb98109fe5512c8ae2200801e00002a0e1a007a0e10016a0e17c009fe5bc15c2e15923fdeb74109fe5512c8ae2200801e00002a0e1a007a0e10016a0e158009fe5be15c2e15023fdeb50109fe5512c8ae2200801e00002a0e1a007a0e10016a0e134009fe5b016c2e14723fdeb2c109fe5512c8ae2200801e00002a0e1a007a0e10006a0e1b206c2e10cd08de2f04fbde81eff2fe198ce1302e0ce1302b8d40902ff7f00006553000084ce13025654000078510000", "lang": "c", "divergences": 181, "c_source": "typedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef unsigned int u32;\n\nextern u8 data_ov006_0213ce98[];\nextern u16 data_ov006_0213cee0[];\nextern u8 data_ov006_0213ce84[];\nextern int data_0209d4b8;\n\nextern void func_ov006_020f2224(char* self);\nextern int RandomIntInternal(int* seed);\n\nvoid func_ov006_020f2790(char* self)\n{\n#pragma opt_propagation off\n int cur;\n int lim;\n int idx;\n int gx;\n int gy;\n\n if (*(u8*)(self + 0x5455) != 0)\n return;\n\n idx = *(u16*)(self + 0x5174);\n if (data_ov006_0213ce98[idx] != 0) {\n func_ov006_020f2224(self);\n return;\n }\n\n lim = data_ov006_0213cee0[idx];\n cur = *(u8*)(self + 0x5456);\n\n ((u8*)(self + 0x5365))[cur] = (u32)((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 4) >> 15;\n if (*(u8*)(self + 0x545a) == ((u8*)(self + 0x5365))[cur]) {\n ((u8*)(self + 0x5365))[cur] += ((u32)((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 3) >> 15) + 1;\n ((u8*)(self + 0x5365))[cur] &= 3;\n }\n\n if (cur == 0) {\n int jx;\n int jy;\n do {\n gx = (u32)((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 13) >> 15;\n gy = (u32)((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 9) >> 15;\n } while (gx >= 6 && gx <= 10 && gy >= 4 && gy <= 8);\n\n jy = -2;\n jx = jy;\n jx += (u32)((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 5) >> 15;\n jy += (u32)((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 5) >> 15;\n\n if (data_ov006_0213ce84[idx] != 0) {\n *(int*)(self + 0x47f8) = (gx * 20 + (jx + 8)) << 12;\n *(int*)(self + 0x49d8) = (gy * 20 + (jy + 16)) << 12;\n *(u8*)(self + 0x52ed) = 1;\n *(u8*)(self + 0x51fd) = 0;\n *(u8*)(self + 0x5365) = *(u8*)(self + 0x545a);\n *(u8*)(self + gx * 9 + gy + 0x5178) = 1;\n *(u8*)(self + 0x5456) += 1;\n return;\n } else {\n int i = lim - 1;\n *(int*)(self + i * 4 + 0x47f8) = (gx * 20 + 8) << 12;\n *(int*)(self + i * 4 + 0x49d8) = (gy * 20 + 16) << 12;\n *(u8*)(self + i + 0x52ed) = 1;\n *(u8*)(self + i + 0x51fd) = 0;\n *(u8*)(self + i + 0x5365) = *(u8*)(self + 0x545a);\n *(u8*)(self + gx * 9 + gy + 0x5178) = 1;\n }\n }\n\n {\n int n = 0;\n u8* cell;\n while (1) {\n if (n >= 100) {\n gx += 1;\n if (gx >= 12) {\n gy += 1;\n gx = 0;\n if (gy >= 11)\n gy = 0;\n }\n } else {\n gx = (u32)((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 13) >> 15;\n gy = (u32)((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 9) >> 15;\n }\n cell = (u8*)(self + gx * 9 + gy + 0x5178);\n if (*cell == 0) {\n int jx;\n int jy;\n jy = -2;\n jx = jy;\n jx += (u32)((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 5) >> 15;\n jy += (u32)((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 5) >> 15;\n {\n char* d = self + cur * 4;\n *(int*)(d + 0x47f8) = (gx * 20 + (jx + 8)) << 12;\n *(int*)(d + 0x49d8) = (gy * 20 + (jy + 16)) << 12;\n }\n *cell = 1;\n break;\n }\n n++;\n }\n }\n\n {\n char* q = self + cur;\n *(u8*)(q + 0x52ed) = 1;\n *(u8*)(q + 0x51fd) = 0;\n }\n *(u8*)(self + 0x5456) += 1;\n\n {\n int lim2 = data_ov006_0213ce84[idx] != 0 ? lim : lim - 1;\n if (*(u8*)(self + 0x5456) >= lim2) {\n if (idx == 0xe || idx == 0x10 || idx == 0x11 || idx == 0x13) {\n {\n char* srcp = self + (lim - 1) * 4;\n char* dstp = self + cur * 4;\n *(int*)(dstp + 0x47f8) = *(int*)(srcp + 0x47f8);\n *(int*)(dstp + 0x49d8) = *(int*)(srcp + 0x49d8) - 0x14000;\n }\n }\n *(u8*)(self + 0x5455) = 1;\n if (data_ov006_0213ce84[idx] != 0)\n *(u8*)(self + 0x5456) = 1;\n else\n *(u8*)(self + 0x5456) = lim;\n }\n }\n\n if (*(u8*)(self + 0x5455) == 0)\n return;\n\n *(short*)(self + 0x515c) = ((u32)((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 16) >> 15) << 12;\n *(short*)(self + 0x515e) = ((u32)((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 16) >> 15) << 12;\n *(short*)(self + 0x5160) = ((u32)((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 16) >> 15) << 12;\n *(short*)(self + 0x5162) = ((u32)((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 16) >> 15) << 12;\n}\n", "source": "fanout-sonnet"} {"module": "ov063", "addr": "0x0211b0a4", "name": "_ZN3Boo8BehaviorEv", "size": 2020, "target_hex": "30402de9dcd04de20040a0e1611f84e2a9d1fbeb9c0494e5000050e30c00000a9cd7fbeb8c0484e58c1494e5000051e30500000a5c0094e55c0081e5600094e5600081e5640094e5640081e50000a0e38c0484e50400a0e1a7abfbeb000050e3dcd08d020100a0033040bd081eff2f010400a0e1711f84e20e2d84e20030a0e3c349feeb000050e34000000a020050e33a00001a0400a0e13ed3fbeba40594e5000050e32800000a0400a0e118d2fbeb741084e2d500a0e346ddfbeb1301d4e50f0000e2060050e32c0000aa1c0594e5051c84e25c0084e5200594e5922084e2600084e5243594e50400a0e1643084e5d03dd1e1cc30c4e5f037d1e1b239c4e1f237d1e1b439c4e1f417d1e1b619c4e1f010d2e1bc18c4e1f210d2e1be18c4e1f410d2e1b019c4e1a0abfbeb000050e31200000a94169fe5011080e0b000d1e10200c0e3b000c1e10c0000ea0500a0e3cc05c4e50000a0e3ce05c4e5672f84e2001092e564069fe5011081e3001082e5001084e0b000d1e10800c0e3b000c1e1dcd08de20100a0e33040bde81eff2fe10000e0e3cc00c4e5050c84e2b61cd0e1000051e33000001ad00dd0e1053efceb000050e30300000a0400a0e1caebffeb000050e32800000a051c84e2b40dd1e1000ca0e1a00fb0e11f00001a1c2594e5e8059fe55c2084e5202594e592c084e2602084e5242594e5003084e0642084e5f027d1e10000a0e3b229c4e1f227d1e1b429c4e1f427d1e1b629c4e1f020dce1bc28c4e1f220dce1be28c4e1f420dce1b029c4e1b020d3e1102082e3b020c3e1cc05c4e5980084e59c0084e5a80084e5ce05c4e5d00dd1e1cc00c4e5dcd08de20100a0e33040bde81eff2fe10400a0e19eaafbeb0400a0e1711f84e2d44afeeb000050e35500000a010050e30d00001a640594e52c108de22c008de5682594e50400a0e130208de56c2594e534208de566abfbeb000050e3dcd08d120100a0133040bd181eff2f11020aa0e3001060e20400a0e19c1084e5cbf9ffeb0701d4e5000050e30900000a010c84e2b410d0e1000051e30500001a0010a0e30711c4e5b410c0e19c1084e5a81084e5330000eab00094e5010710e20100a0130000a003000050e32500000ad105d4e5d05094e5000050e30200000a010050e31300000a1e0000ea0030a0e384249fe50500a0e10410a0e100308de502c0a0e304c08de5ada6feeb000050e31400000a64049fe5741084e2003084e00020d3e5f800a0e3012082e20020c3e592dcfbeb0b0000ea0500a0e183a7feeb0010e0e3010050e10600001a0500a0e1e8fcfeeb24049fe5001084e00000d1e5010080e20000c1e50400a0e18fecffeb610f84e2ebe6fbebdcd08de20100a0e33040bde81eff2fe10010a0e30400a0e1d115c4e590d5fbeb840484e5840494e5000050e3fe28d401050c8402d0139f05b02bc001801584050f00000a5c3080e2000093e508108de208008de5042093e55c0084e20c208de5082093e510208de5b280fceb051c84e2b00bc1e108108de25c0084e29286fceb800584e5cc05d4e5cd05c4e5cf05d4e50f0050e300f18f902f0000ea0e0000ea0d0000ea0c0000ea0e0000ea100000ea120000ea140000ea160000ea1e0000ea200000ea100000ea210000ea140000ea130000ea120000ea140000ea0400a0e15ef7ffeb1c0000ea0400a0e1a3edffeb190000ea0400a0e12aedffeb160000ea0400a0e1eeedffeb130000ea0400a0e152f7ffeb100000ea0400a0e174fdffeb0d0000ea0400a0e114f5ffeb0a0000ea0400a0e13eefffeb070000ea0400a0e12ef7ffeb040000ea0400a0e143f7ffeb010000ea0400a0e176eeffeb050c84e2b40dd0e1012c84e2800ea0e1a00fb0e1f409d411be08c411b010d2e1170d84e2011081e2b010c2e1ee7dfcebcd15d4e5cc05d4e5000051e1010c84120010a013b010c011cf05d4e5030050e37700000a0400a0e1611f84e27fd5fbeb0400a0e11df9ffeb050c84e2b40dd0e1800fa0e1a00fb0e10400000a4b09a0e3641094e5000060e2000051e1640084b538008de2c16ffceb600094e564e094e55c3094e532ca80e238008de214108de20420a0e114308de518c08de51ce08de57d6ffceb38008de22976fceb000050e30400000a7c109de5600094e5021a81e2010050e1601084b5cf05d4e5040050e34d00000a0b0050e34b00000a88008de2a66ffceb600094e564e094e55c3094e532ca80e288008de220108de20420a0e120308de524c08de528e08de5626ffcebbc00d4e1d10050e30100a0030000a013000050e31e00000acf05d4e5080050e31b00002a050c84e2b40dd0e1000da0e1a00fb0e11600000a88008de20076fceb000050e30400000a601094e5cc009de5000041e04b0950e3060000da280594e55c0084e52c0594e5600084e5300594e5640084e51a0000ea5c0094e5280584e5600094e52c0584e5640094e5300584e5130000ea88008de2e975fceb000050e30f00000a601094e5cc009de5000041e04b0950e30a0000aab4009fe5001084e0b000d1e1200080e3b000c1e15c0094e5280584e5600094e52c0584e5640094e5300584e50400a0e1711f84e20020a0e3004dfeeb88008de24d6ffceb38008de24b6ffcebcc05d4e5030050e30700000a030050e30500000a030050e30300000a030050e30100000a3d0e84e202e9fbeb0400a0e19cebffeb610f84e2f8e5fbebc805d4e5ff0050e30500001a30109fe5610f84e2011084e00fe4fbeb610f84e2e2e5fbeb0100a0e3dcd08de23040bde81eff2fe1d40500005a010000d10500000000710234050000", "lang": "c", "divergences": 184, "c_source": "typedef int s32;\ntypedef short s16;\ntypedef unsigned int u32;\ntypedef unsigned short u16;\ntypedef signed char s8;\ntypedef unsigned char u8;\n\ntypedef struct { s32 x, y, z; } Vector3;\ntypedef s32 Fix12;\n\ntypedef struct { char pad[0x50]; } RaycastGround;\n\nextern void func_0200f760(void* a, void* b);\nextern void* _ZN5Actor10FindWithIDEj(u32 id);\nextern s32 _ZN8CapEnemy11GetCapStateEv(void* c);\nextern s32 _ZN5Enemy26UpdateKillByInvincibleCharER12WithMeshClsnR9ModelAnimj(void* c, void* w, void* m, u32 j);\nextern void _ZN5Actor8PoofDustEv(void* c);\nextern void _ZN5Actor24KillAndTrackInDeathTableEv(void* c);\nextern void func_0201267c(u32 a, void* b);\nextern void* _ZN8CapEnemy15RespawnIfHasCapEv(void* c);\nextern u8 IsAreaShowing(s8 idx);\nextern s32 func_ov063_02116190(void* c);\nextern void _ZN8CapEnemy12Unk_02005d94Ev(void* c);\nextern s32 _ZN5Enemy14UpdateYoshiEatER12WithMeshClsn(void* c, void* w);\nextern s32 _ZN8CapEnemy16GetCapEatenOffItERK7Vector3(void* c, const Vector3* v);\nextern void func_ov063_02119ab0(void* c);\nextern s32 _ZN6Player11ShowMessageER9ActorBasejPK7Vector3jj(void* thiz, void* ab, u32 id, const void* pos, u32 e, u32 f);\nextern s32 _ZN6Player12GetTalkStateEv(void* c);\nextern void _ZN6Player9DropActorEv(void* c);\nextern void func_ov063_021166ac(void* c);\nextern void _ZN12CylinderClsn5ClearEv(void* c);\nextern void* _ZN5Actor13ClosestPlayerEv(void* c);\nextern s16 Vec3_HorzAngle(const Vector3* a, const Vector3* b);\nextern Fix12 Vec3_HorzDist(const Vector3* a, const Vector3* b);\nextern void func_ov063_021192d4(void* c);\nextern void func_ov063_02116bf4(void* c);\nextern void func_ov063_02116a1c(void* c);\nextern void func_ov063_02116d38(void* c);\nextern void func_ov063_0211ab68(void* c);\nextern void func_ov063_021189f4(void* c);\nextern void func_ov063_021172a8(void* c);\nextern void func_ov063_02119274(void* c);\nextern void func_ov063_02116fac(void* c);\nextern u16 DecIfAbove0_Short(void* p);\nextern void _ZN5Actor9UpdatePosEP12CylinderClsn(void* c, void* cyl);\nextern void _ZN13RaycastGroundC1Ev(RaycastGround* rc);\nextern void _ZN13RaycastGround12SetObjAndPosERK7Vector3P5Actor(RaycastGround* rc, const Vector3* v, void* actor);\nextern s32 _ZN13RaycastGround10DetectClsnEv(RaycastGround* rc);\nextern void _ZN5Enemy12UpdateWMClsnER12WithMeshClsnj(void* c, void* w, u32 j);\nextern void _ZN13RaycastGroundD1Ev(RaycastGround* rc);\nextern void _ZN9Animation7AdvanceEv(void* c);\nextern void _ZN25MovingCylinderClsnWithPos21SetPosRelativeToActorERK7Vector3(void* c, void* v);\nextern void _ZN12CylinderClsn6UpdateEv(void* c);\n\ns32 func_ov063_0211b0a4(void* arg0)\n{\n char* c = (char*)arg0;\n Vector3 pv;\n Vector3 v1;\n Vector3 v2;\n Vector3 ve;\n RaycastGround rc1;\n RaycastGround rc2;\n s32 t;\n void* p;\n char* q;\n\n func_0200f760(c, c + 0x184);\n if (*(u32*)(c + 0x49c) != 0) {\n *(void**)(c + 0x48c) = _ZN5Actor10FindWithIDEj(*(u32*)(c + 0x49c));\n q = *(char**)(c + 0x48c);\n if (q != 0) {\n *(s32*)(q + 0x5c) = *(s32*)(c + 0x5c);\n *(s32*)(q + 0x60) = *(s32*)(c + 0x60);\n *(s32*)(q + 0x64) = *(s32*)(c + 0x64);\n }\n *(void**)(c + 0x48c) = 0;\n }\n\n if (_ZN8CapEnemy11GetCapStateEv(c) == 0)\n return 1;\n\n t = _ZN5Enemy26UpdateKillByInvincibleCharER12WithMeshClsnR9ModelAnimj(c, c + 0x1c4, c + 0x380, 0);\n if (t != 0) {\n if (t == 2) {\n _ZN5Actor8PoofDustEv(c);\n if (*(s32*)(c + 0x5a4) != 0) {\n _ZN5Actor24KillAndTrackInDeathTableEv(c);\n func_0201267c(0xd5, c + 0x74);\n if ((*(u8*)(c + 0x113) & 0xf) < 6) {\n char* r1 = c + 0x500;\n char* r2 = c + 0x92;\n *(s32*)(c + 0x5c) = *(s32*)(c + 0x51c);\n *(s32*)(c + 0x60) = *(s32*)(c + 0x520);\n *(s32*)(c + 0x64) = *(s32*)(c + 0x524);\n *(s8*)(c + 0xcc) = *(s8*)(r1 + 0xd0);\n *(s16*)(c + 0x92) = *(s16*)(r1 + 0x70);\n *(s16*)(c + 0x94) = *(s16*)(r1 + 0x72);\n *(s16*)(c + 0x96) = *(s16*)(r1 + 0x74);\n *(s16*)(c + 0x8c) = *(s16*)(r2);\n *(s16*)(c + 0x8e) = *(s16*)(r2 + 2);\n *(s16*)(c + 0x90) = *(s16*)(r2 + 4);\n p = _ZN8CapEnemy15RespawnIfHasCapEv(c);\n if (p != 0) {\n u16* fp = (u16*)(((int)p + 0x5d4) & 0xFFFFFFFFFFFFFFFF);\n *fp = *fp & ~2;\n }\n }\n } else {\n s32* r2 = (s32*)(c + 0x19c);\n u16* fp = (u16*)(((int)c + 0x5d4) & 0xFFFFFFFFFFFFFFFF);\n *(u8*)(c + 0x5cc) = 5;\n *(u8*)(c + 0x5ce) = 0;\n *r2 |= 1;\n *fp &= ~8;\n }\n }\n return 1;\n }\n\n *(s8*)(c + 0xcc) = -1;\n if (*(u16*)(c + 0x5c6) == 0) {\n if (IsAreaShowing(*(s8*)(c + 0x5d0)) == 0 || func_ov063_02116190(c) != 0) {\n if (((u32)(*(u16*)(c + 0x5d4) << 0x18) >> 0x1f) == 0) {\n char* ip = c + 0x92;\n u16* r3 = (u16*)(((int)c + 0x5d4) & 0xFFFFFFFFFFFFFFFF);\n *(s32*)(c + 0x5c) = *(s32*)(c + 0x51c);\n *(s32*)(c + 0x60) = *(s32*)(c + 0x520);\n *(s32*)(c + 0x64) = *(s32*)(c + 0x524);\n *(s16*)(c + 0x92) = *(s16*)(c + 0x570);\n *(s16*)(c + 0x94) = *(s16*)(c + 0x572);\n *(s16*)(c + 0x96) = *(s16*)(c + 0x574);\n *(s16*)(c + 0x8c) = *(s16*)(ip);\n *(s16*)(c + 0x8e) = *(s16*)(ip + 2);\n *(s16*)(c + 0x90) = *(s16*)(ip + 4);\n *r3 = *r3 | 0x10;\n *(u8*)(c + 0x5cc) = 0;\n *(s32*)(c + 0x98) = 0;\n *(s32*)(c + 0x9c) = 0;\n *(s32*)(c + 0xa8) = 0;\n *(u8*)(c + 0x5ce) = 0;\n *(s8*)(c + 0xcc) = *(s8*)(c + 0x5d0);\n }\n return 1;\n }\n }\n\n _ZN8CapEnemy12Unk_02005d94Ev(c);\n t = _ZN5Enemy14UpdateYoshiEatER12WithMeshClsn(c, c + 0x1c4);\n if (t != 0) {\n if (t == 1) {\n ve.x = *(s32*)(c + 0x564);\n ve.y = *(s32*)(c + 0x568);\n ve.z = *(s32*)(c + 0x56c);\n if (_ZN8CapEnemy16GetCapEatenOffItERK7Vector3(c, &ve) != 0)\n return 1;\n }\n *(s32*)(c + 0x9c) = -0x2000;\n func_ov063_02119ab0(c);\n if (*(u8*)(c + 0x107) != 0 && *(u16*)(c + 0x104) == 0) {\n *(u8*)(c + 0x107) = 0;\n *(u16*)(c + 0x104) = 0;\n *(s32*)(c + 0x9c) = 0;\n *(s32*)(c + 0xa8) = 0;\n goto block_39;\n }\n {\n int v = (*(s32*)(c + 0xb0) & 0x40000) ? 1 : 0;\n if (v != 0) {\n u8 st = *(u8*)(c + 0x5d1);\n char* pl = *(char**)(c + 0xd0);\n switch (st) {\n case 0:\n if (_ZN6Player11ShowMessageER9ActorBasejPK7Vector3jj(pl, c, 0x15a, 0, 0, 2) != 0) {\n u8* fp = (u8*)(((int)c + 0x5d1) & 0xFFFFFFFFFFFFFFFF);\n *fp = *fp + 1;\n func_0201267c(0xf8, c + 0x74);\n }\n break;\n case 1:\n if (_ZN6Player12GetTalkStateEv(pl) == -1) {\n u8* fp = (u8*)(((int)c + 0x5d1) & 0xFFFFFFFFFFFFFFFF);\n _ZN6Player9DropActorEv(pl);\n *fp = *fp + 1;\n }\n break;\n }\n }\n }\n func_ov063_021166ac(c);\n _ZN12CylinderClsn5ClearEv(c + 0x184);\n return 1;\n }\n\nblock_39:\n *(u8*)(c + 0x5d1) = 0;\n *(void**)(c + 0x484) = _ZN5Actor13ClosestPlayerEv(c);\n q = *(char**)(c + 0x484);\n if (q == 0) {\n *(s16*)(c + 0x5b0) = *(s16*)(c + 0x8e);\n *(s32*)(c + 0x580) = 0x2710000;\n } else {\n Vector3* pl = (Vector3*)(q + 0x5c);\n pv.x = pl->x;\n pv.y = pl->y;\n pv.z = pl->z;\n *(s16*)(c + 0x5b0) = Vec3_HorzAngle((Vector3*)(c + 0x5c), &pv);\n *(s32*)(c + 0x580) = Vec3_HorzDist((Vector3*)(c + 0x5c), &pv);\n }\n\n *(u8*)(c + 0x5cd) = *(u8*)(c + 0x5cc);\n switch (*(u8*)(c + 0x5cf)) {\n case 0:\n case 1:\n case 2:\n func_ov063_021192d4(c);\n break;\n case 3:\n func_ov063_02116bf4(c);\n break;\n case 4:\n func_ov063_02116a1c(c);\n break;\n case 5:\n func_ov063_02116d38(c);\n break;\n case 6:\n func_ov063_021192d4(c);\n break;\n case 7:\n func_ov063_0211ab68(c);\n break;\n case 8:\n func_ov063_02119274(c);\n break;\n case 9:\n func_ov063_021192d4(c);\n break;\n case 10:\n func_ov063_021192d4(c);\n break;\n case 11:\n func_ov063_02116fac(c);\n break;\n case 12:\n case 13:\n case 14:\n func_ov063_021189f4(c);\n break;\n case 15:\n func_ov063_021172a8(c);\n break;\n }\n\n if (((u32)(*(u16*)(c + 0x5d4) << 0x1d) >> 0x1f) != 0)\n *(s16*)(c + 0x8e) = *(s16*)(c + 0x94);\n *(u16*)(c + 0x100) = *(u16*)(c + 0x100) + 1;\n DecIfAbove0_Short(c + 0x5c0);\n if (*(u8*)(c + 0x5cd) != *(u8*)(c + 0x5cc))\n *(u16*)(c + 0x100) = 0;\n\n if (*(u8*)(c + 0x5cf) != 3) {\n _ZN5Actor9UpdatePosEP12CylinderClsn(c, c + 0x184);\n func_ov063_02119ab0(c);\n if (((u32)(*(u16*)(c + 0x5d4) << 0x1f) >> 0x1f) != 0 && *(s32*)(c + 0x64) < -0x12c000)\n *(s32*)(c + 0x64) = -0x12c000;\n _ZN13RaycastGroundC1Ev(&rc1);\n {\n s32 y = *(s32*)(c + 0x60);\n s32 z = *(s32*)(c + 0x64);\n s32 x = *(s32*)(c + 0x5c);\n v1.x = x;\n v1.y = y + 0x32000;\n v1.z = z;\n }\n _ZN13RaycastGround12SetObjAndPosERK7Vector3P5Actor(&rc1, &v1, c);\n if (_ZN13RaycastGround10DetectClsnEv(&rc1) != 0) {\n s32 v = *(s32*)((char*)&rc1 + 0x44) + 0x2000;\n if (*(s32*)(c + 0x60) < v)\n *(s32*)(c + 0x60) = v;\n }\n if (*(u8*)(c + 0x5cf) != 4 && *(u8*)(c + 0x5cf) != 0xb) {\n _ZN13RaycastGroundC1Ev(&rc2);\n {\n s32 y = *(s32*)(c + 0x60);\n s32 z = *(s32*)(c + 0x64);\n s32 x = *(s32*)(c + 0x5c);\n v2.x = x;\n v2.y = y + 0x32000;\n v2.z = z;\n }\n _ZN13RaycastGround12SetObjAndPosERK7Vector3P5Actor(&rc2, &v2, c);\n {\n int d1 = (*(volatile u16*)(c + 0xc) == 0xd1) ? 1 : 0;\n if (d1 != 0 && *(u8*)(c + 0x5cf) < 8 &&\n ((u32)(*(u16*)(c + 0x5d4) << 0x1a) >> 0x1f) != 0) {\n if (_ZN13RaycastGround10DetectClsnEv(&rc2) == 0 ||\n (*(s32*)(c + 0x60) - *(s32*)((char*)&rc2 + 0x44)) > 0x12c000) {\n *(s32*)(c + 0x5c) = *(s32*)(c + 0x528);\n *(s32*)(c + 0x60) = *(s32*)(c + 0x52c);\n *(s32*)(c + 0x64) = *(s32*)(c + 0x530);\n } else {\n *(s32*)(c + 0x528) = *(s32*)(c + 0x5c);\n *(s32*)(c + 0x52c) = *(s32*)(c + 0x60);\n *(s32*)(c + 0x530) = *(s32*)(c + 0x64);\n }\n } else if (_ZN13RaycastGround10DetectClsnEv(&rc2) != 0 &&\n (*(s32*)(c + 0x60) - *(s32*)((char*)&rc2 + 0x44)) < 0x12c000) {\n *(u16*)(c + 0x5d4) = *(u16*)(c + 0x5d4) | 0x20;\n *(s32*)(c + 0x528) = *(s32*)(c + 0x5c);\n *(s32*)(c + 0x52c) = *(s32*)(c + 0x60);\n *(s32*)(c + 0x530) = *(s32*)(c + 0x64);\n }\n }\n _ZN5Enemy12UpdateWMClsnER12WithMeshClsnj(c, c + 0x1c4, 0);\n _ZN13RaycastGroundD1Ev(&rc2);\n }\n _ZN13RaycastGroundD1Ev(&rc1);\n }\n\n if (*(u8*)(c + 0x5cc) != 3 && *(u8*)(c + 0x5cc) != 3 &&\n *(u8*)(c + 0x5cc) != 3 && *(u8*)(c + 0x5cc) != 3)\n _ZN9Animation7AdvanceEv(c + 0x3d0);\n func_ov063_021166ac(c);\n _ZN12CylinderClsn5ClearEv(c + 0x184);\n if (*(u8*)(c + 0x5c8) == 0xff) {\n _ZN25MovingCylinderClsnWithPos21SetPosRelativeToActorERK7Vector3(c + 0x184, c + 0x534);\n _ZN12CylinderClsn6UpdateEv(c + 0x184);\n }\n return 1;\n}", "source": "fanout-opus"} {"module": "ov006", "addr": "0x020ffb54", "name": "func_ov006_020ffb54", "size": 656, "target_hex": "10402de981c280e0054a8ce23626d4e58132a0e1010052e32f00001a48229fe556ec8ce202c080e0b3209ce1012082e2b3208ce1b023dee1040052e31040bd381eff2f3124c29fe50020a0e3b023cee10ce080e003c0dee701c08ce203c0cee738c6d4e503005ce31600003a3826c4e503c0a0e335c6c4e53bc6d4e500005ce30a00000a3cc6d4e500005ce30700000adc119fe53626c4e5011080e00300d1e7010040e20300c1e71040bde81eff2fe1810280e0050a80e20210a0e33616c0e51040bde81eff2fe1a8019fe50c00d0e73706c4e51040bde81eff2fe188219fe556cc8ce202e080e0b3209ee1012082e2b3208ee1b023dce1040052e30f00003a68219fe500e0a0e3b0e3cce102c080e00320dce7012082e20320cce73826d4e554319fe5060052e3812280e0052a82e238e6c4253846d2e50430d3e73736c2e538219fe5813280e002c080e0053a83e281429ce7282693e5022084e081228ce73626d3e5204693e5020052e34426a0e10c00001a08419fe504c081e20c4194e7040052e1070000ca0406a0e1200683e50000a0e3280683e53606c3e53506c3e51040bde81eff2fe1d4309fe5024081e2043193e7030052e10d0000ca813280e0053a83e202cba0e3284693e500306ce2030054e181c2a0e10a0000caa4309fe5034080e00c3094e7803083e20c3084e7040000ea8c309fe5034080e0813294e7803043e2813284e774309fe5013193e7030052e11040bdc81eff2fc181e280e064209fe50346a0e1053a8ee2204683e5014aa0e3284683e502c080e08142dce7560c8ee20020a0e3014084e28142cce7b023c0e11c009fe53826c3e50000d0e53706c3e51040bde81eff2fe130560000385600003c560000b0eb1202c0eb120220560000d4ec12022856000036560000", "lang": "c", "divergences": 184, "c_source": "typedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef short s16;\ntypedef unsigned int u32;\ntypedef int s32;\n\nextern u8 data_ov006_0212ebb0[];\nextern u8 data_ov006_0212ebc0[];\nextern s32 data_ov006_0212ecd4[];\n\n#pragma opt_common_subs off\n\n#define CTA(c,b) (*(u16*)((c) + 0x5630 + (b)))\n#define ST(c,b) (*(u8*)((c) + 0x5636 + (b)))\n#define OUTFLAG(c,b) (*(u8*)((c) + 0x5637 + (b)))\n#define FB(c,b) (*(u8*)((c) + 0x5638 + (b)))\n#define OUTFLAG2(c,b) (*(u8*)((c) + 0x5635 + (b)))\n#define FLAGA(c,b) (*(u8*)((c) + 0x563b + (b)))\n#define FLAGB(c,b) (*(u8*)((c) + 0x563c + (b)))\n#define ACC(c,b) (*(s32*)((c) + 0x5620 + (b)))\n#define VEL(c,b) (*(s32*)((c) + 0x5628 + (b)))\n\nvoid func_ov006_020ffb54(char* c, int i)\n{\n int b = i << 5;\n int t;\n\n if (ST(c, b) == 1) {\n CTA(c, b)++;\n if (CTA(c, b) < 4)\n return;\n CTA(c, b) = 0;\n FB(c, b)++;\n if (FB(c, b) < 3) {\n OUTFLAG(c, b) = data_ov006_0212ebb0[FB(c, b)];\n return;\n }\n FB(c, b) = 0;\n OUTFLAG2(c, b) = 3;\n if (FLAGA(c, b) != 0) {\n if (FLAGB(c, b) != 0) {\n ST(c, b) = 0;\n FLAGB(c, b)--;\n return;\n }\n }\n ST(c, b) = 2;\n return;\n }\n\n CTA(c, b)++;\n if (CTA(c, b) >= 4) {\n CTA(c, b) = 0;\n FB(c, b)++;\n FB(c, b) = (FB(c, b) >= 6) ? 0 : FB(c, b);\n OUTFLAG(c, b) = data_ov006_0212ebc0[FB(c, b)];\n }\n\n ACC(c, b) = ACC(c, b) + VEL(c, b);\n t = ACC(c, b) >> 0xc;\n\n if (ST(c, b) == 2) {\n if (t <= data_ov006_0212ecd4[i + 4]) {\n ACC(c, b) = data_ov006_0212ecd4[i + 4] << 0xc;\n VEL(c, b) = 0;\n ST(c, b) = 0;\n OUTFLAG2(c, b) = 0;\n return;\n }\n }\n\n if (t <= data_ov006_0212ecd4[i + 2]) {\n if (VEL(c, b) <= -0x800) {\n VEL(c, b) = VEL(c, b) + 0x80;\n }\n } else {\n VEL(c, b) = VEL(c, b) - 0x80;\n }\n\n if (t > data_ov006_0212ecd4[i]) {\n return;\n }\n\n ACC(c, b) = data_ov006_0212ecd4[i] << 0xc;\n VEL(c, b) = 0x1000;\n ST(c, b)++;\n CTA(c, b) = 0;\n FB(c, b) = 0;\n OUTFLAG(c, b) = data_ov006_0212ebb0[0];\n}\n", "source": "fanout-sonnet"} +{"module": "ov006", "addr": "0x020d27dc", "name": "func_ov006_020d27dc", "size": 3656, "target_hex": "f04f2de964d04de20090a0e1011989e2c82691e50040a0e3000052e30a0000dae40d9fe5042189e0003082e0002093e5014084e2000052e3012042c2002083c5c82691e5020054e1f5ffffba000052e30080a0e364d08dd2f04fbdd81eff2fd1d700a0e320008de5cf00a0e31c008de5c700a0e318008de5bf00a0e314008de5e000a0e310008de50200a0e334008de50500a0e330008de50700a0e338008de5070da0e30c808de560808de55c808de558808de554808de550808de54c808de548808de544808de540808de50160a0e304b0a0e30640a0e324008de50350a0e33c808de52c808de528808de5080189e0010980e2b80690e5000050e33a0300ca080d9fe5887189e0002087e0010989e2001092e5000790e5000051e15e0100daec0c9fe5081089e0000081e008008de50000d0e5010050e32b03000a0900a0e1001090e50ca09de5901091e531ff2fe1000050e33100000ab81c9fe50720a0e1017082e0080189e0001097e5010980e2a40690e5600051e3040000ca600051e3110000aa200051e30800000a4f0000eaa00051e3020000caa00051e31100000a4a0000eae00051e31500000a470000ea011989e2141791e5000051e1050a891206a0a0019863c015400000ea011989e2181791e5000051e1050a891206a0a0019963c015390000ea011989e21c1791e5000051e1050a891206a0a0019a63c015320000ea011989e2201791e5000051e1050a891206a0a0019b63c0152b0000eaf00b9fe50000b7e7600050e3040000ca600050e3110000aa200050e30800000a220000eaa00050e3020000caa00050e31100000a1d0000eae00050e31500000a1a0000ea010989e2140790e5010050e3050a891206a0a0019863c015130000ea010989e2180790e5010050e3050a891206a0a0019963c0150c0000ea010989e21c0790e5010050e3050a891206a0a0019a63c015050000ea010989e2200790e5010050e3050a891206a0a0019b63c01501005ae3b300001a0900a0e1001090e5901091e531ff2fe1000050e35300000a010989e2d506d0e5000050e32100001a001097e510009de50116a0e10afffceb080189e0010980e2a40690e5030050e300f18f901b0000ea020000ea060000ea0a0000ea0e0000ea001097e514009de50116a0e1fcfefceb120000ea001097e518009de50116a0e1f7fefceb0d0000ea001097e51c009de50116a0e1f2fefceb080000ea001097e520009de50116a0e1edfefceb030000ea001097e5880a9fe50116a0e1e8fefceb08009de50060c0e5780a9fe5002089e0001092e5010989e2011081e2001082e5cc2690e5c81690e5010052e1880200bad506d0e5000050e31400001a480a9fe5481a9fe5003089e0000093e5012089e0010080e2000083e5001092e5050a89e2011081e2001082e5e82390e5201a9fe564d08de2010052e1e81380c5050a89e27810a0e3e01380e5f04fbde81eff2fe1050a89e21e10a0e3e01380e564d08de2f04fbde81eff2fe1d0099fe5881189e0007081e0001097e510009de50116a0e1b7fefceb001097e5c8099fe50116a0e1b3fefceb08009de50060c0e5a4099fe5002089e0001092e5010989e2011081e2001082e5cc1690e5c80690e5000051e1530200ba80099fe580199fe5003089e0000093e5012089e0010080e2000083e5001092e5050a89e2011081e2001082e5e82390e558199fe5010052e1e81380c5050a89e2d42390e51c10a0e3920103e044199fe5031091e7000051e31200000a010051e30600000a020051e32c099f0500108900000091050500800200008105090000ea740390e5a01fa0e1800f61e0e00f91e00400001a00099fe5001089e0000091e5050080e2000081e5050a89e2681390e5640051e36410a0c3681380c5050a89e2741390e5050051e3090000ba3c10a0e3c01380e5010989e20210a0e3d01680e50110a0e3d416c0e564d08de2f04fbde81eff2fe1010989e20010a0e3d01680e564d08de2f04fbde81eff2fe10900a0e1001090e5901091e531ff2fe1000050e32500000a0500a0e30500fdeb010989e2d506d0e5000050e30600001a880189e0010980e2601690e550089fe50116a0e152fefceb050000ea880189e0010980e2601690e514089fe50116a0e14bfefceb08009de50120a0e30020c0e5010989e2fc179fe5d526c0e5012089e0001092e564d08de2011081e2001082e5cc1690e5c80690e5000051e1050a89a23c10a0a3e01380a5f04fbde81eff2fe1880189e0010980e2601690e5e100a0e30116a0e132fefceb050a89e23c10a0e3c01380e5010989e20210a0e3d01680e50110a0e3d516c0e564d08de2f04fbde81eff2fe1bf30e0e3030051e1010000ba980051e3030000ba000092e5010080e2000082e5ca0100ea78379fe5087089e003a087e00030dae5010053e30c00008a010081e2000082e50900a0e10810a0e10520a0e1cbfdffeb000050e3bc01001a0900a0e10810a0e10b20a0e1c5fdffebb70100ead42081e2d41080e27d0fa0e3920000e0399ffceb04008de518079fe5081189e0007081e0000097e5070050e300f18f90aa0100ea060000ea410000ea5f0000ea9a0000ead40000ea0e0100ea490100ea670100ea880189e0010980e2600690e5210050e30500000a610050e30300000aa10050e30100000ae10050e31000001a84069fe5881189e00000b1e7010040e2000081e5004087e50060cae5000091e50006a0e1d5fdfceb00008de504309de524009de528209de50410a0e1c0fdfceb860100ea2c209de50900a0e10810a0e18ffdffeb000050e38001001a0900a0e10810a0e10620a0e189fdffeb000050e37a01001a0900a0e10810a0e10520a0e183fdffeb000050e37401001a30209de50900a0e10810a0e17dfdffeb000050e36e01001a34209de50900a0e10810a0e177fdffeb000050e338009d0500008705660100ea0900a0e10810a0e10620a0e16ffdffeb000050e36001001a3c209de50900a0e10810a0e169fdffeb000050e35a01001a34209de50900a0e10810a0e163fdffeb000050e35401001a0900a0e10810a0e10520a0e15dfdffeb000050e34e01001a0900a0e10810a0e10b20a0e157fdffeb000050e300408705470100ea880189e0010980e2600690e51f0050e30500000a5f0050e30300000a9f0050e30100000adf0050e31000001a18059fe5881189e00000b1e7010080e2000081e5004087e50060cae5000091e50006a0e17afdfceb00008de504309de524009de540209de50410a0e165fdfceb2b0100ea34209de50900a0e10810a0e134fdffeb000050e32501001a0900a0e10810a0e10620a0e12efdffeb000050e31f01001a0900a0e10810a0e10b20a0e128fdffeb000050e31901001a44209de50900a0e10810a0e122fdffeb000050e31301001a38209de50900a0e10810a0e11cfdffeb000050e330009d05000087050b0100ea880189e0010980e2600690e5210050e30500000a610050e30300000aa10050e30100000ae10050e31000001a28049fe5881189e00000b1e7010040e2000081e5004087e50060cae5000091e50006a0e13efdfceb00008de504309de524009de548209de50410a0e129fdfcebef0000ea0900a0e10810a0e10520a0e1f8fcffeb000050e3e900001a4c209de50900a0e10810a0e1f2fcffeb000050e3e300001a30209de50900a0e10810a0e1ecfcffeb000050e3dd00001a0900a0e10810a0e10620a0e1e6fcffeb000050e3d700001a0900a0e10810a0e10420a0e1e0fcffeb000050e300b08705d00000ea880189e0010980e2600690e51f0050e30500000a5f0050e30300000a9f0050e30100000adf0050e31000001a3c039fe5881189e00000b1e7010080e2000081e5004087e50060cae5000091e50006a0e103fdfceb00008de504309de524009de550209de50410a0e1eefcfcebb40000ea0900a0e10810a0e10b20a0e1bdfcffeb000050e3ae00001a34209de50900a0e10810a0e1b7fcffeb000050e3a800001a38209de50900a0e10810a0e1b1fcffeb000050e3a200001a0900a0e10810a0e10620a0e1abfcffeb000050e39c00001a0900a0e10810a0e10420a0e1a5fcffeb000050e300508705950000ea880189e0010980e2600690e5210050e30500000a610050e30300000aa10050e30100000ae10050e31000001a50029fe5881189e00000b1e7010040e2000081e5004087e50060cae5000091e50006a0e1c8fcfceb00008de504309de524009de554209de50410a0e1b3fcfceb790000ea30209de50900a0e10810a0e182fcffeb000050e37300001a0900a0e10810a0e10420a0e17cfcffeb000050e36d00001a0900a0e10810a0e10520a0e176fcffeb000050e36700001a58209de50900a0e10810a0e170fcffeb000050e36100001a38209de50900a0e10810a0e16afcffeb000050e334009d0500008705590000ea0900a0e10810a0e10420a0e162fcffeb000050e35300001a30209de50900a0e10810a0e15cfcffeb000050e34d00001a38209de50900a0e10810a0e156fcffeb000050e34700001a0900a0e10810a0e10520a0e150fcffeb000050e34100001a0900a0e10810a0e10b20a0e14afcffeb000050e3006087053a0000ea880189e0010980e2600690e51f0050e30500000a5f0050e30300000a9f0050e30100000adf0050e31000001ae4009fe5881189e00000b1e7010080e2000081e5004087e50060cae5000091e50006a0e16dfcfceb00008de504309de524009de55c209de50410a0e158fcfceb1e0000ea38209de50900a0e10810a0e127fcffeb000050e31800001a0900a0e10810a0e10420a0e121fcffeb000050e31200001a0900a0e10810a0e10b20a0e11bfcffeb000050e30c00001a30209de50900a0e10810a0e115fcffeb000050e30600001a34209de50900a0e10810a0e10ffcffeb000050e360009d0500008705018088e2010989e2c80690e5000058e1bafcffba64d08de2f04fbde81eff2fe1b846000064460000b446000060460000c3010000cc46000074530000e85300000f270000c1010000c0e1120268530000c20100008046000084460000", "lang": "cpp", "divergences": 184, "c_source": "//cpp\n#pragma opt_strength_reduction off\n#pragma opt_common_subs off\n\ntypedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef unsigned int u32;\ntypedef int s32;\n\nextern \"C\" {\nextern void func_02012718(int a, int b);\nextern void func_02012dbc(int a);\nextern int func_ov006_020d25fc(void *thiz, int idx, u32 val);\nextern int func_020126e8(int a);\nextern void func_020126ac(int a0, int a1, int a2, int a3, int a4);\nextern int data_ov006_0212e1c0[];\n}\n\nstruct Obj {\n virtual void m00(); virtual void m04(); virtual void m08(); virtual void m0c();\n virtual void m10(); virtual void m14(); virtual void m18(); virtual void m1c();\n virtual void m20(); virtual void m24(); virtual void m28(); virtual void m2c();\n virtual void m30(); virtual void m34(); virtual void m38(); virtual void m3c();\n virtual void m40(); virtual void m44(); virtual void m48(); virtual void m4c();\n virtual void m50(); virtual void m54(); virtual void m58(); virtual void m5c();\n virtual void m60(); virtual void m64(); virtual void m68(); virtual void m6c();\n virtual void m70(); virtual void m74(); virtual void m78(); virtual void m7c();\n virtual void m80(); virtual void m84(); virtual void m88(); virtual void m8c();\n virtual int m90();\n};\n\nextern \"C\" void func_ov006_020d27dc(void *arg0)\n{\n char *p = (char *)arg0;\n s32 var_r4;\n s32 idx;\n s32 count;\n\n for (var_r4 = 0; var_r4 < (count = *(s32 *)(p + 0x46c8)); ) {\n s32 *slot = (s32 *)(((long long)(int)(p + var_r4 * 4 + 0x46b8)) & 0xFFFFFFFFFFFFFFFFLL);\n s32 v = *slot;\n var_r4++;\n if (v > 0) {\n *slot = v - 1;\n }\n }\n\n idx = 0;\n if (count <= 0) {\n return;\n }\n\n {\n s32 v20 = 0xd7;\n s32 v1c = 0xcf;\n s32 v18 = 0xc7;\n s32 v14 = 0xbf;\n s32 v10 = 0xe0;\n s32 v34 = 2;\n s32 v30 = 5;\n s32 v38 = 7;\n s32 vC = 0;\n s32 v60 = 0;\n s32 v5c = 0;\n s32 v58 = 0;\n s32 v54 = 0;\n s32 v50 = 0;\n s32 v4c = 0;\n s32 v48 = 0;\n s32 v44 = 0;\n s32 v40 = 0;\n s32 c1 = 1;\n s32 c4 = 4;\n s32 c6 = 6;\n s32 v24 = 0x1c0;\n s32 c3 = 3;\n s32 v3c = 0;\n s32 v2c = 0;\n s32 v28 = 0;\n\n for (idx = 0; idx < *(s32 *)(p + 0x46c8); idx++) {\n if (*(s32 *)(p + idx * 4 + 0x46b8) > 0) {\n continue;\n }\n\n {\n s32 dist = *(s32 *)(p + idx * 8 + 0x4664);\n s32 lim = *(s32 *)(p + 0x4700);\n\n if (dist > lim) {\n u8 *flag = (u8 *)(p + idx + 0x46b4);\n if (*flag != 1) {\n s32 sl = vC;\n s32 *dirSlot;\n s32 dirVal;\n\n if (((struct Obj *)p)->m90() != 0) {\n dirSlot = (s32 *)(p + idx * 8 + 0x4660);\n dirVal = *dirSlot;\n u32 want = *(u32 *)(p + idx * 4 + 0x46a4);\n switch (dirVal) {\n case 0x20:\n if (*(s32 *)(p + 0x4714) == (s32)want) {\n sl = c1;\n } else {\n *(u8 *)(p + 0x5398) = c1;\n }\n break;\n case 0x60:\n if (*(s32 *)(p + 0x4718) == (s32)want) {\n sl = c1;\n } else {\n *(u8 *)(p + 0x5399) = c1;\n }\n break;\n case 0xa0:\n if (*(s32 *)(p + 0x471c) == (s32)want) {\n sl = c1;\n } else {\n *(u8 *)(p + 0x539a) = c1;\n }\n break;\n case 0xe0:\n if (*(s32 *)(p + 0x4720) == (s32)want) {\n sl = c1;\n } else {\n *(u8 *)(p + 0x539b) = c1;\n }\n break;\n }\n } else {\n dirSlot = (s32 *)(p + idx * 8 + 0x4660);\n dirVal = *dirSlot;\n switch (dirVal) {\n case 0x20:\n if (*(s32 *)(p + 0x4714) == 1) {\n sl = c1;\n } else {\n *(u8 *)(p + 0x5398) = c1;\n }\n break;\n case 0x60:\n if (*(s32 *)(p + 0x4718) == 1) {\n sl = c1;\n } else {\n *(u8 *)(p + 0x5399) = c1;\n }\n break;\n case 0xa0:\n if (*(s32 *)(p + 0x471c) == 1) {\n sl = c1;\n } else {\n *(u8 *)(p + 0x539a) = c1;\n }\n break;\n case 0xe0:\n if (*(s32 *)(p + 0x4720) == 1) {\n sl = c1;\n } else {\n *(u8 *)(p + 0x539b) = c1;\n }\n break;\n }\n }\n\n if (sl == 1) {\n if (((struct Obj *)p)->m90() != 0) {\n if (*(u8 *)(p + 0x46d5) == 0) {\n func_02012718(v10, *dirSlot << 0xc);\n u32 w2 = *(u32 *)(p + idx * 4 + 0x46a4);\n switch (w2) {\n default:\n break;\n case 0:\n func_02012718(v14, *dirSlot << 0xc);\n break;\n case 1:\n func_02012718(v18, *dirSlot << 0xc);\n break;\n case 2:\n func_02012718(v1c, *dirSlot << 0xc);\n break;\n case 3:\n func_02012718(v20, *dirSlot << 0xc);\n break;\n }\n } else {\n func_02012718(0x1c3, *dirSlot << 0xc);\n }\n *flag = c1;\n *(s32 *)(p + 0x46cc) += 1;\n if (*(s32 *)(p + 0x46cc) >= *(s32 *)(p + 0x46c8)) {\n if (*(u8 *)(p + 0x46d5) == 0) {\n *(s32 *)(((int)p + 0x5374) & 0xFFFFFFFFFFFFFFFFLL) += 1;\n *(s32 *)(((int)p + 0x53e8) & 0xFFFFFFFFFFFFFFFFLL) += 1;\n if (*(s32 *)(((int)p + 0x53e8) & 0xFFFFFFFFFFFFFFFFLL) > 0x270f) {\n *(s32 *)(((int)p + 0x53e8) & 0xFFFFFFFFFFFFFFFFLL) = 0x270f;\n }\n *(s32 *)(p + 0x53e0) = 0x78;\n return;\n }\n *(s32 *)(p + 0x53e0) = 0x1e;\n return;\n }\n continue;\n }\n\n {\n s32 *d2 = (s32 *)(((int)(p + idx * 8) + 0x4660) & 0xFFFFFFFFFFFFFFFFLL);\n func_02012718(v10, *d2 << 0xc);\n func_02012718(0x1c1, *d2 << 0xc);\n }\n *flag = c1;\n *(s32 *)(p + 0x46cc) += 1;\n if (*(s32 *)(p + 0x46cc) >= *(s32 *)(p + 0x46c8)) {\n s32 t;\n *(s32 *)(((int)p + 0x5374) & 0xFFFFFFFFFFFFFFFFLL) += 1;\n *(s32 *)(((int)p + 0x53e8) & 0xFFFFFFFFFFFFFFFFLL) += 1;\n if (*(s32 *)(((int)p + 0x53e8) & 0xFFFFFFFFFFFFFFFFLL) > 0x270f) {\n *(s32 *)(((int)p + 0x53e8) & 0xFFFFFFFFFFFFFFFFLL) = 0x270f;\n }\n t = *(s32 *)((char *)data_ov006_0212e1c0 + *(s32 *)(p + 0x53d4) * 0x1c);\n switch (t) {\n case 0:\n break;\n case 2:\n *(s32 *)(p + 0x5368) += 5;\n break;\n case 1:\n if ((*(s32 *)(p + 0x5374) % 2) == 0) {\n *(s32 *)(p + 0x5368) += 5;\n }\n break;\n }\n if (*(s32 *)(p + 0x5368) > 0x64) {\n *(s32 *)(p + 0x5368) = 0x64;\n }\n if (*(s32 *)(p + 0x5374) >= 5) {\n *(s32 *)(p + 0x53c0) = 0x3c;\n *(s32 *)(p + 0x46d0) = 2;\n *(u8 *)(p + 0x46d4) = 1;\n return;\n }\n *(s32 *)(p + 0x46d0) = 0;\n return;\n }\n continue;\n }\n\n if (((struct Obj *)p)->m90() != 0) {\n func_02012dbc(5);\n if (*(u8 *)(p + 0x46d5) == 0) {\n func_02012718(0x1c2, *(s32 *)(p + idx * 8 + 0x4660) << 0xc);\n } else {\n func_02012718(0x1c3, *(s32 *)(p + idx * 8 + 0x4660) << 0xc);\n }\n *flag = 1;\n *(u8 *)(p + 0x46d5) = 1;\n *(s32 *)(p + 0x46cc) += 1;\n if (*(s32 *)(p + 0x46cc) >= *(s32 *)(p + 0x46c8)) {\n *(s32 *)(p + 0x53e0) = 0x3c;\n }\n return;\n }\n func_02012718(0xe1, *(s32 *)(p + idx * 8 + 0x4660) << 0xc);\n *(s32 *)(p + 0x53c0) = 0x3c;\n *(s32 *)(p + 0x46d0) = 2;\n *(u8 *)(p + 0x46d5) = 1;\n return;\n }\n continue;\n }\n\n if (dist < -0xc0 || dist >= 0x98) {\n *(s32 *)(((int)(p + idx * 8) + 0x4664) & 0xFFFFFFFFFFFFFFFFLL) += 1;\n } else {\n u8 *flag2 = (u8 *)(p + idx + 0x4680);\n if ((u32)*flag2 <= 1) {\n *(s32 *)(p + idx * 8 + 0x4664) = dist + 1;\n if (func_ov006_020d25fc(p, idx, c3) == 0) {\n func_ov006_020d25fc(p, idx, c4);\n }\n } else {\n s32 tmp = ((dist + 0xd4) * 0x1f4) / (lim + 0xd4);\n s32 *statePtr = (s32 *)(p + idx * 4 + 0x4684);\n u32 state = *statePtr;\n switch (state) {\n default:\n break;\n case 0:\n if (*(s32 *)(p + idx * 8 + 0x4660) == 0x21 || *(s32 *)(p + idx * 8 + 0x4660) == 0x61 ||\n *(s32 *)(p + idx * 8 + 0x4660) == 0xa1 || *(s32 *)(p + idx * 8 + 0x4660) == 0xe1) {\n {\n s32 *dirp = (s32 *)(((int)(p + idx * 8) + 0x4660) & 0xFFFFFFFFFFFFFFFFLL);\n *dirp -= 1;\n *statePtr = c6;\n *flag2 = c1;\n func_020126ac(v24, c6, v28, tmp, func_020126e8(*dirp << 0xc));\n }\n } else if (func_ov006_020d25fc(p, idx, v2c) == 0 && func_ov006_020d25fc(p, idx, c1) == 0 &&\n func_ov006_020d25fc(p, idx, c3) == 0 && func_ov006_020d25fc(p, idx, v30) == 0) {\n if (func_ov006_020d25fc(p, idx, v34) == 0) {\n *statePtr = v38;\n }\n }\n break;\n case 1:\n if (func_ov006_020d25fc(p, idx, c1) == 0 && func_ov006_020d25fc(p, idx, v3c) == 0 &&\n func_ov006_020d25fc(p, idx, v34) == 0 && func_ov006_020d25fc(p, idx, c3) == 0) {\n if (func_ov006_020d25fc(p, idx, c4) == 0) {\n *statePtr = c6;\n }\n }\n break;\n case 2:\n if (*(s32 *)(p + idx * 8 + 0x4660) == 0x1f || *(s32 *)(p + idx * 8 + 0x4660) == 0x5f ||\n *(s32 *)(p + idx * 8 + 0x4660) == 0x9f || *(s32 *)(p + idx * 8 + 0x4660) == 0xdf) {\n {\n s32 *dirp = (s32 *)(((int)(p + idx * 8) + 0x4660) & 0xFFFFFFFFFFFFFFFFLL);\n *dirp += 1;\n *statePtr = c6;\n *flag2 = c1;\n func_020126ac(v24, c6, v40, tmp, func_020126e8(*dirp << 0xc));\n }\n } else if (func_ov006_020d25fc(p, idx, v34) == 0 && func_ov006_020d25fc(p, idx, c1) == 0 &&\n func_ov006_020d25fc(p, idx, c4) == 0 && func_ov006_020d25fc(p, idx, v44) == 0) {\n if (func_ov006_020d25fc(p, idx, v38) == 0) {\n *statePtr = v30;\n }\n }\n break;\n case 3:\n if (*(s32 *)(p + idx * 8 + 0x4660) == 0x21 || *(s32 *)(p + idx * 8 + 0x4660) == 0x61 ||\n *(s32 *)(p + idx * 8 + 0x4660) == 0xa1 || *(s32 *)(p + idx * 8 + 0x4660) == 0xe1) {\n {\n s32 *dirp = (s32 *)(((int)(p + idx * 8) + 0x4660) & 0xFFFFFFFFFFFFFFFFLL);\n *dirp -= 1;\n *statePtr = c6;\n *flag2 = c1;\n func_020126ac(v24, c6, v48, tmp, func_020126e8(*dirp << 0xc));\n }\n } else if (func_ov006_020d25fc(p, idx, c3) == 0 && func_ov006_020d25fc(p, idx, v4c) == 0 &&\n func_ov006_020d25fc(p, idx, v30) == 0 && func_ov006_020d25fc(p, idx, c1) == 0) {\n if (func_ov006_020d25fc(p, idx, c6) == 0) {\n *statePtr = c4;\n }\n }\n break;\n case 4:\n if (*(s32 *)(p + idx * 8 + 0x4660) == 0x1f || *(s32 *)(p + idx * 8 + 0x4660) == 0x5f ||\n *(s32 *)(p + idx * 8 + 0x4660) == 0x9f || *(s32 *)(p + idx * 8 + 0x4660) == 0xdf) {\n {\n s32 *dirp = (s32 *)(((int)(p + idx * 8) + 0x4660) & 0xFFFFFFFFFFFFFFFFLL);\n *dirp += 1;\n *statePtr = c6;\n *flag2 = c1;\n func_020126ac(v24, c6, v50, tmp, func_020126e8(*dirp << 0xc));\n }\n } else if (func_ov006_020d25fc(p, idx, c4) == 0 && func_ov006_020d25fc(p, idx, v34) == 0 &&\n func_ov006_020d25fc(p, idx, v38) == 0 && func_ov006_020d25fc(p, idx, c1) == 0) {\n if (func_ov006_020d25fc(p, idx, c6) == 0) {\n *statePtr = c3;\n }\n }\n break;\n case 5:\n if (*(s32 *)(p + idx * 8 + 0x4660) == 0x21 || *(s32 *)(p + idx * 8 + 0x4660) == 0x61 ||\n *(s32 *)(p + idx * 8 + 0x4660) == 0xa1 || *(s32 *)(p + idx * 8 + 0x4660) == 0xe1) {\n {\n s32 *dirp = (s32 *)(((int)(p + idx * 8) + 0x4660) & 0xFFFFFFFFFFFFFFFFLL);\n *dirp -= 1;\n *statePtr = c6;\n *flag2 = c1;\n func_020126ac(v24, c6, v54, tmp, func_020126e8(*dirp << 0xc));\n }\n } else if (func_ov006_020d25fc(p, idx, v30) == 0 && func_ov006_020d25fc(p, idx, c6) == 0 &&\n func_ov006_020d25fc(p, idx, c3) == 0 && func_ov006_020d25fc(p, idx, v58) == 0) {\n if (func_ov006_020d25fc(p, idx, v38) == 0) {\n *statePtr = v34;\n }\n }\n break;\n case 6:\n if (func_ov006_020d25fc(p, idx, c6) == 0 && func_ov006_020d25fc(p, idx, v30) == 0 &&\n func_ov006_020d25fc(p, idx, v38) == 0 && func_ov006_020d25fc(p, idx, c3) == 0) {\n if (func_ov006_020d25fc(p, idx, c4) == 0) {\n *statePtr = c1;\n }\n }\n break;\n case 7:\n if (*(s32 *)(p + idx * 8 + 0x4660) == 0x1f || *(s32 *)(p + idx * 8 + 0x4660) == 0x5f ||\n *(s32 *)(p + idx * 8 + 0x4660) == 0x9f || *(s32 *)(p + idx * 8 + 0x4660) == 0xdf) {\n {\n s32 *dirp = (s32 *)(((int)(p + idx * 8) + 0x4660) & 0xFFFFFFFFFFFFFFFFLL);\n *dirp += 1;\n *statePtr = c6;\n *flag2 = c1;\n func_020126ac(v24, c6, v5c, tmp, func_020126e8(*dirp << 0xc));\n }\n } else if (func_ov006_020d25fc(p, idx, v38) == 0 && func_ov006_020d25fc(p, idx, c6) == 0 &&\n func_ov006_020d25fc(p, idx, c4) == 0 && func_ov006_020d25fc(p, idx, v30) == 0 &&\n func_ov006_020d25fc(p, idx, v34) == 0) {\n *statePtr = v60;\n }\n break;\n }\n }\n }\n }\n }\n }\n}\n", "source": "lunavyqo-batch2-grind"} {"module": "ov006", "addr": "0x020d8408", "name": "func_ov006_020d8408", "size": 1276, "target_hex": "f04f2de934d04de200a0a0e1621c8ae2b20ed1e1000050e30b00000ab4049fe534d08de200208ae0b000d2e1010040e2b000c2e1f20ed1e1000050e30000a0b3b20ec1b1f04fbde81eff2fe1060a8ae2d80290e50090a0e34b0f50e30c90a0a31f0000aac60050e30b90a0a31c0000aa9f0050e30a90a0a3190000aa840050e30990a0a3160000aa5c0050e30890a0a3130000aa390050e30790a0a3100000aa210050e30690a0a30d0000aa1b0050e30590a0a30a0000aa150050e30490a0a3070000aa0f0050e30390a0a3040000aa090050e30290a0a3010000aa030050e30190a0a30100a0e3050059e300008de50200a0a300008da5090059e30100a00300008d050000a0e30080a0e3070059e304008de50c00001abc139fe5060a8ae201208ae0fc32d0e50010d2e50200a0e300008de5010021e2013003e20000c2e5010083e204008de5038aa0e3080059e30f00001a80139fe5060a8ae2fc02d0e501208ae00010d2e5013000e2020083e200008de5010021e20000c2e500009de5020050e3010083e2038aa00304008de5068ba0130a0059e30400a00300008d05038aa0030b0059e30c00001a28139fe5060a8ae201208ae0fc32d0e50010d2e50300a0e300008de5010021e2013003e20000c2e5010083e204008de5068ba0e30c0059e30600a0a300008da500009de5068ba0a3000050e30070a0e3ad0000da0207a0e310008de50400a0e314008de5020ca0e318008de52e09a0e3bc429fe507b0a0e10c708de51c708de52c708de524708de520708de50150a0e328008de508708de508609de506138ae0042081e00000d2e5000050e38e00001a0050c2e5010981e20c209de5461c81e29726c0e59b26c0e59c26c0e59d26c0e510209de5602680e514009de5b009c1e118009de5b209c1e148029fe5ba8cfdeb44129fe506238ae0200801e08000a0e1a017a0e134029fe5000059e3000082e00010c0e528129fe5012982e2701682e51c109de5881682e50200001a0050c0e50a00a0e1f5f7ffeb010059e30e0000caf0019fe5a48cfdebec119fe5200801e00001a0e1a007a0e10006a0e106138ae0022a80e2460c81e2bc28c0e120009de5011981e2640681e5550000ea04009de5000050e31700000a010050e30a00001a06138ae0460c81e2022a8be2bc28c0e124009de5011981e2640681e524109de50a00a0e1d5f7ffeb450000ea06138ae0460c81e20a2a8be2bc28c0e128009de5011981e2640681e50a00a0e10510a0e1caf7ffeb3a0000ea060a8ae2d80290e5010010e21b00000a000058e30600000ac700a0e1980000e00a1b80e206038ae0460c80e2bc18c0e10a0000ea14019fe56d8cfdeb10119fe5200801e00001a0e1a007a0e10006a0e1021a80e206038ae0460c80e2bc18c0e106038ae0011980e22c009de5640681e52c109de50a00a0e1aaf7ffeb1a0000ea000058e30600000ac700a0e1980000e02a1b80e206038ae0460c80e2bc18c0e10a0000eaa4009fe5518cfdeba0109fe5200801e00001a0e1a007a0e10006a0e10a1a80e206038ae0460c80e2bc18c0e106038ae0011980e228009de5640681e50a00a0e10510a0e18ef7ffeb6c009fe500108ae0000091e5010080e2000081e5020000ea016086e2700056e368ffffba00009de5017087e208b08be0000057e162ffffba38009fe58910a0e1b11090e1620c8ae2b21ec0e134d08de2f04fbde81eff2fe1e2620000fc62000098460000b8d40902ff7f00009646000099090000d8620000e8e21202", "lang": "c", "divergences": 187, "c_source": "typedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef short s16;\ntypedef unsigned int u32;\ntypedef int s32;\n\nextern int RandomIntInternal(int *seed);\nextern void func_ov006_020d66c4(void *c, int idx);\n\nextern int data_0209d4b8;\nextern u16 data_ov006_0212e2e8[];\n\nvoid func_ov006_020d8408(char *c)\n{\n s32 sb;\n s32 cnt;\n s32 flag;\n s32 step;\n s32 fp;\n s32 i;\n s32 j;\n char *b;\n s32 spC;\n s32 sp10;\n s32 sp14;\n s32 sp18;\n s32 sp1c;\n s32 sp20;\n s32 sp24;\n s32 sp28;\n s32 sp2c;\n s32 t0;\n u32 rnd;\n\n if (*(volatile u16 *)(c + 0x6200 + 0xe2) != 0) {\n *(u16 *)((long long)(c + 0x62e2) & 0xFFFFFFFFFFFFFFFFLL) -= 1;\n if ((s16) * (volatile u16 *)(c + 0x6200 + 0xe2) < 0) {\n *(volatile u16 *)(c + 0x6200 + 0xe2) = 0;\n }\n return;\n }\n\n t0 = *(s32 *)(c + 0x62d8);\n sb = 0;\n if (t0 >= 0x12c) {\n sb = 0xc;\n } else if (t0 >= 0xc6) {\n sb = 0xb;\n } else if (t0 >= 0x9f) {\n sb = 0xa;\n } else if (t0 >= 0x84) {\n sb = 9;\n } else if (t0 >= 0x5c) {\n sb = 8;\n } else if (t0 >= 0x39) {\n sb = 7;\n } else if (t0 >= 0x21) {\n sb = 6;\n } else if (t0 >= 0x1b) {\n sb = 5;\n } else if (t0 >= 0x15) {\n sb = 4;\n } else if (t0 >= 0xf) {\n sb = 3;\n } else if (t0 >= 9) {\n sb = 2;\n } else if (t0 >= 3) {\n sb = 1;\n }\n\n cnt = 1;\n if (sb >= 5) {\n cnt = 2;\n }\n if (sb == 9) {\n cnt = 1;\n }\n\n flag = 0;\n step = 0;\n if (sb == 7) {\n s32 tmp = *(u8 *)(c + 0x6000 + 0x2fc) & 1;\n cnt = 2;\n *(u8 *)((long long)(c + 0x62fc) & 0xFFFFFFFFFFFFFFFFLL) ^= 1;\n flag = tmp + 1;\n step = 0x3000;\n }\n if (sb == 8) {\n s32 tmp = *(u8 *)(c + 0x6000 + 0x2fc) & 1;\n s32 t1 = tmp + 2;\n cnt = t1;\n *(u8 *)((long long)(c + 0x62fc) & 0xFFFFFFFFFFFFFFFFLL) ^= 1;\n flag = tmp + 1;\n if (t1 == 2) {\n step = 0x3000;\n } else {\n step = 0x1800;\n }\n }\n if (sb == 0xa) {\n cnt = 4;\n step = 0x3000;\n }\n if (sb == 0xb) {\n s32 tmp = *(u8 *)(c + 0x6000 + 0x2fc) & 1;\n cnt = 3;\n *(u8 *)((long long)(c + 0x62fc) & 0xFFFFFFFFFFFFFFFFLL) ^= 1;\n flag = tmp + 1;\n step = 0x1800;\n }\n if (sb >= 0xc) {\n cnt = 6;\n step = 0x1800;\n }\n\n fp = 0;\n if (cnt > 0) {\n sp10 = 0x80000;\n sp14 = 4;\n sp18 = 0x200;\n spC = 0;\n sp1c = 0;\n sp2c = 0;\n sp24 = 0;\n sp20 = 0;\n sp28 = 0xb8000;\n\n for (i = 0; i < cnt; i++) {\n for (j = 0; j < 0x70; j++) {\n b = c + (j << 6);\n if (*(u8 *)(b + 0x4698) == 0) {\n *(u8 *)(b + 0x4698) = 1;\n *(u8 *)(b + 0x4697) = (u8)spC;\n *(u8 *)(b + 0x469b) = (u8)spC;\n *(u8 *)(b + 0x469c) = (u8)spC;\n *(u8 *)(b + 0x469d) = (u8)spC;\n *(s32 *)(b + 0x4660) = sp10;\n *(s16 *)(b + 0x4690) = (s16)sp14;\n *(s16 *)(b + 0x4692) = (s16)sp18;\n\n rnd = RandomIntInternal(&data_0209d4b8);\n *(u8 *)(b + 0x4696) = (u8)(((0x7fff & (rnd >> 16)) * 2) >> 0xf);\n *(s32 *)(b + 0x4670) = 0x999;\n *(s32 *)(b + 0x4688) = sp1c;\n\n if (sb == 0) {\n *(u8 *)(b + 0x4696) = 1;\n func_ov006_020d66c4(c, sp1c);\n }\n\n if (sb <= 1) {\n rnd = RandomIntInternal(&data_0209d4b8);\n *(s16 *)(b + 0x468c) = (s16)(((((0x7fff & (rnd >> 16)) * 4) >> 0xf) << 0xc) + 0x2000);\n *(s32 *)(b + 0x4664) = sp20;\n } else if (flag != 0) {\n if (flag == 1) {\n *(s16 *)(b + 0x468c) = (s16)(fp + 0x2000);\n *(s32 *)(b + 0x4664) = sp24;\n func_ov006_020d66c4(c, sp24);\n } else {\n *(s16 *)(b + 0x468c) = (s16)(fp + 0xa000);\n *(s32 *)(b + 0x4664) = sp28;\n func_ov006_020d66c4(c, 1);\n }\n } else if (*(s32 *)(c + 0x62d8) & 1) {\n if (step != 0) {\n *(s16 *)(b + 0x468c) = (s16)(step * (i >> 1) + 0x2800);\n } else {\n rnd = RandomIntInternal(&data_0209d4b8);\n *(s16 *)(b + 0x468c) = (s16)(((((0x7fff & (rnd >> 16)) * 4) >> 0xf) << 0xc) + 0x2000);\n }\n *(s32 *)(b + 0x4664) = sp2c;\n func_ov006_020d66c4(c, sp2c);\n } else {\n if (step != 0) {\n *(s16 *)(b + 0x468c) = (s16)(step * (i >> 1) + 0xa800);\n } else {\n rnd = RandomIntInternal(&data_0209d4b8);\n *(s16 *)(b + 0x468c) = (s16)(((((0x7fff & (rnd >> 16)) * 4) >> 0xf) << 0xc) + 0xa000);\n }\n *(s32 *)(b + 0x4664) = sp28;\n func_ov006_020d66c4(c, 1);\n }\n\n *(s32 *)(c + 0x62d8) += 1;\n break;\n }\n }\n fp += step;\n }\n }\n\n *(u16 *)(c + 0x62e2) = data_ov006_0212e2e8[sb];\n}\n", "source": "fanout-sonnet"} {"module": "ov006", "addr": "0x020cf2fc", "name": "func_ov006_020cf2fc", "size": 1116, "target_hex": "f04f2de97cd04de200008de5081090e50c2090e5103090e5e8039fe509b3fdebe0039fe5e0139fe54c208de2790dfeeb00009de52c1090e5302090e5343090e5c0039fe580b3fdebb8039fe5b8139fe51c208de26f0dfeebb0139fe50220a0e34c008de2002081e50e18feeb9c139fe50120a0e31c008de2002081e50918feeb8c039fe50116a0e3001080e5001080e5001080e50000a0e370139fe50320a0e3002081e56c239fe56c139fe5000082e504008de5002091e560039fe560139fe5a20180e1000081e558039fe558239fe5003090e500009de550e39fe5031c80e22302a0e1000082e5fe21d1e100009de53c339fe52943d0e5012082e2022ca0e1822082e32c039fe5042882e1002080e5b612d1e120039fe520239fe58110a0e1b14093e1b13090e114039fe50219a0e3033884e1003082e5001080e504309de500139fe50320a0e1fc029fe5fcb29fe508208de510208de50220a0e30c208de504209de50c509de5014082e200209de55c6082e20421a0e1d4429fe5005084e50c40a0e3936428e0926427e000409de5b74f84e2036184e0025184e010409de5039084e0099191e7014084e2009080e5049096e4040054e3009069e20391c9e300908ee500a098e504c098e5089098e50aa4a0e10cc4a0e14aa8a0e14cc8a0e10994a0e10aa8a0e10cc8a0e14998a0e10998a0e12aa8a0e12cc8a0e10ca88ae12998a0e100a08be500908be5029191e70c8088e2009080e5049095e4012082e2009069e20391c9e300908ee500a097e504c097e5089097e50aa4a0e10cc4a0e14aa8a0e14cc8a0e10994a0e10aa8a0e10cc8a0e14998a0e10998a0e12aa8a0e12cc8a0e10ca88ae12998a0e100a08be50c7087e200908be5c8ffffba04209de508409de5012082e204208de5c4219fe5043083e2004082e504209de5030052e3aeffffba0000a0e318008de50200a0e390c19fe590b19fe590219fe514008de508009de50c30a0e3011080e200009de501e1a0e15c5080e214109de570019fe5945329e09e5328e0001080e500009de518509de5b70f80e2047180e00e6180e00e119ce7040085e000108be5043096e418119fe5015085e2003081e5003098e504a098e5081098e50334a0e10aa4a0e14338a0e14aa8a0e10114a0e10338a0e10aa8a0e14118a0e10118a0e12338a0e12aa8a0e10a3883e12118a0e1003082e5001082e500019ce70c8088e200008be5041097e4b4009fe501e08ee2001080e5001099e5043099e5080099e50114a0e10334a0e14118a0e14338a0e10004a0e10118a0e10338a0e14008a0e10008a0e12118a0e12338a0e1031881e12008a0e1001082e50c9089e2000082e5040055e3caffffba08009de518109de5010080e208008de56c009fe5044084e2001080e508009de5030050e3b0ffffba7cd08de2f04fbde81eff2fe1680e0a02ecb30902400400046c04000454040004440814020000a78da804000414081402ac0400048404000460e01202a404000468e01202c0040004c4040004b0e01202880400048c0400040005000404050004", "lang": "c", "divergences": 190, "c_source": "typedef volatile unsigned int vu32;\n\ntypedef struct { int x, y, z; } Vec3;\n\nextern int data_020a0e68[12];\nextern int data_0209b3ec[12];\nextern unsigned short data_ov006_0212e060[];\nextern unsigned short data_ov006_0212e068[];\nextern int data_ov006_0212e0b0[];\nextern unsigned int data_ov006_02140844;\nextern unsigned int data_ov006_02140814;\n\nextern void Matrix4x3_FromTranslation(int* m, int x, int y, int z);\nextern void MulMat4x3Mat4x3(int* a, int* b, int* dst);\nextern void Matrix4x3_ApplyInPlaceToScale(int* m, int x, int y, int z);\nextern void func_020553a4(int* m);\n\nvoid func_ov006_020cf2fc(char* obj)\n{\n int i;\n int j;\n int prim;\n int k0;\n int prim2;\n int zero2;\n int m2[12];\n int m1[12];\n\n Matrix4x3_FromTranslation(data_020a0e68, *(int*)(obj + 8), *(int*)(obj + 0xc), *(int*)(obj + 0x10));\n MulMat4x3Mat4x3(data_020a0e68, data_0209b3ec, m1);\n Matrix4x3_ApplyInPlaceToScale(data_020a0e68, *(int*)(obj + 0x2c), *(int*)(obj + 0x30), *(int*)(obj + 0x34));\n MulMat4x3Mat4x3(data_020a0e68, data_0209b3ec, m2);\n *(vu32*)0x4000440 = 2;\n func_020553a4(m1);\n *(vu32*)0x4000440 = 1;\n func_020553a4(m2);\n *(vu32*)0x400046c = 0x100000;\n *(vu32*)0x400046c = 0x100000;\n *(vu32*)0x400046c = 0x100000;\n *(vu32*)0x4000440 = 3;\n *(vu32*)0x4000454 = 0;\n i = 0;\n *(vu32*)0x40004a8 = 0x8da70000 | (data_ov006_02140844 >> 3);\n *(vu32*)0x40004ac = data_ov006_02140814 >> 4;\n *(vu32*)0x40004a4 = (((*(short*)(obj + 0x31e) + 1) << 24) | 0x82) | (*(unsigned char*)(obj + 0x329) << 16);\n *(vu32*)0x40004c0 = data_ov006_0212e060[*(unsigned short*)(obj + 0x326)] | (data_ov006_0212e068[*(unsigned short*)(obj + 0x326)] << 16);\n *(vu32*)0x40004c4 = 0x8000;\n#pragma opt_strength_reduction off\n {\n int i4 = 0;\n j = 0;\n k0 = 0;\n prim = 2;\n for (; i < 3; i++) {\n Vec3* va;\n Vec3* vb;\n int* na;\n int* nb;\n int n, k;\n n = (i + 1) * 4;\n *(vu32*)0x4000500 = prim;\n va = (Vec3*)(obj + 0x5c) + i4;\n vb = (Vec3*)(obj + 0x5c) + n;\n na = (int*)(obj + 0x2dc) + i4;\n nb = (int*)(obj + 0x2dc) + n;\n for (k = k0; k < 4; k++) {\n *(vu32*)0x4000488 = data_ov006_0212e0b0[i4 + k];\n *(vu32*)0x4000484 = (0 - *na++) & ~0xC0000000;\n *(vu32*)0x400048c = (unsigned short)((va->x << 8) >> 16) | ((unsigned int)(unsigned short)((va->y << 8) >> 16) << 16);\n *(vu32*)0x400048c = (unsigned short)((va->z << 8) >> 16);\n va++;\n *(vu32*)0x4000488 = data_ov006_0212e0b0[n];\n *(vu32*)0x4000484 = (0 - *nb++) & ~0xC0000000;\n n++;\n *(vu32*)0x400048c = (unsigned short)((vb->x << 8) >> 16) | ((unsigned int)(unsigned short)((vb->y << 8) >> 16) << 16);\n *(vu32*)0x400048c = (unsigned short)((vb->z << 8) >> 16);\n vb++;\n }\n i4 += 4;\n *(vu32*)0x4000504 = j;\n }\n zero2 = 0;\n prim2 = 2;\n {\n int j4 = 0;\n for (; j < 3; j++) {\n Vec3* va;\n Vec3* vb;\n int* na;\n int* nb;\n int n, k;\n n = (j + 1) * 4;\n *(vu32*)0x4000500 = prim2;\n va = (Vec3*)(obj + 0x5c) + j4;\n vb = (Vec3*)(obj + 0x5c) + n;\n na = (int*)(obj + 0x2dc) + j4;\n nb = (int*)(obj + 0x2dc) + n;\n for (k = zero2; k < 4; k++) {\n *(vu32*)0x4000488 = data_ov006_0212e0b0[n];\n *(vu32*)0x4000484 = *nb++;\n n++;\n *(vu32*)0x400048c = (unsigned short)((vb->x << 8) >> 16) | ((unsigned int)(unsigned short)((vb->y << 8) >> 16) << 16);\n *(vu32*)0x400048c = (unsigned short)((vb->z << 8) >> 16);\n vb++;\n *(vu32*)0x4000488 = data_ov006_0212e0b0[j4 + k];\n *(vu32*)0x4000484 = *na++;\n *(vu32*)0x400048c = (unsigned short)((va->x << 8) >> 16) | ((unsigned int)(unsigned short)((va->y << 8) >> 16) << 16);\n *(vu32*)0x400048c = (unsigned short)((va->z << 8) >> 16);\n va++;\n }\n j4 += 4;\n *(vu32*)0x4000504 = zero2;\n }\n }\n }\n}\n", "source": "fanout-sonnet"} {"module": "arm9", "addr": "0x0206cf98", "name": "func_0206cf98", "size": 916, "target_hex": "f04f2de91cd04de2020050e30190a0e154139f350070a023007191370280a0e1000057e30000a003cc00000a000058e30100a003c900000a10008de22d0200eb044087e28050a0e30500a0e10410a0e1b10200eb000050e3faffff1a084087e2000094e500a0a0e3023080e3082099e00010aae20100a0e3000051e1003084e50a0052010000009a09805ae00000a0e3086099e000008de50050a0e100b0aae20140a0e39e0000ea051287e0100091e5090050e10900009a181091e50020a0e3013090e00010a2e20b0051e10600530109104090018048900090a09100408d95090050e10700008a051287e0181091e50030a0e3012090e00010a3e2010053e10200590100408d3500109de5000051e38200000a090050e10400009a4c029fe54c129fe54c229fe50430a0e11effffeb050287e0102090e5180090e50010a0e3002092e00000a1e2010050e1090052010400008a14029fe51c129fe51c229fe50430a0e110ffffeb050287e0100090e5000059e12300000a0700a0e10510a0e1080200eb010085e205a287e0001287e00050a0e110008ae204008de5140081e20c008de5180081e204c09de510e081e208008de50f009ee80f008ce810009ae5000049e018008ae500109ee518009ae5000081e000008ee50c009de5001090e518009ae5001081e00c009de5001080e508009de518109ae5000090e5011040e008009de5001080e5050287e0100090e5000059e10400000a50019fe560119fe560219fe50430a0e1dffeffeb053287e0180093e5080050e12c00008a0700a0e10510a0e1b80100eb240000ea051287e0180091e510a091e50030a0e300209ae00010a3e20b0051e1060052010300008a0700a0e10510a0e1ab0100eb170000ea0aa056e00320cbe00a1053e00210d3e0220000aa0a0050e10400008acc009fe5e4109fe5e4209fe50430a0e1befeffeb051287e0103081e2000093e5142081e20a0080e0000083e5000092e50a0080e0000082e51800b1e50a0040e0000081e5000097e5000055e1d7ffff3a0b0000ea101083e2000091e5142083e2080080e0000081e5181083e2000092e5080080e0000082e5000091e5080040e0000081e5015085e2000097e5000055e10200002a00009de5000050e35affff0a082087e2001092e510008de20210c1e3001082e50010a0e3041087e55c0100eb0100a0e31cd08de2f04fbde81eff2fe1c09e0a02fc680802a90100000c690802aa0100002c690802b70100006c690802ca0100008c690802", "lang": "c", "divergences": 190, "c_source": "typedef unsigned int u32;\n\nstruct Elem {\n int a, b, c, d;\n};\n\nstruct Arr {\n u32 count;\n int pad[3];\n struct Elem elems[1];\n};\n\ntypedef struct {\n u32 irqState;\n u32 fiqState;\n u32 mpuRegion7;\n} SavedIntState;\n\nextern struct Arr *data_020a9ec0[2];\nextern const char data_020868fc;\nextern const char data_0208690c;\nextern const char data_0208692c;\nextern const char data_0208696c;\nextern const char data_0208698c;\n\nextern void func_0206d890(SavedIntState *state);\nextern void func_0206d868(const SavedIntState *state);\nextern u32 func_0206dab4(u32 val, void *addr);\nextern void func_0206d940(struct Arr *s, u32 index);\nextern void func_0206d8c4(struct Arr *s, u32 index);\nextern void _ZN4cstd8__assertEPKcPKcPKci(const char *, const char *, const char *, int);\n\nint func_0206cf98(int type, u32 addr, u32 size) {\n int result;\n unsigned long long end;\n int found;\n u32 i;\n SavedIntState state;\n struct Arr *table;\n\n table = ((unsigned)type < 2) ? data_020a9ec0[type] : 0;\n if (!table) { result = 0; goto epilogue; }\n if (size == 0) { result = 1; goto epilogue; }\n\n func_0206d890(&state);\n while (func_0206dab4(0x80, &table->pad[0]) != 0) { }\n\n table->pad[1] |= 2;\n if ((unsigned long long)(u32)addr + (u32)size > 0x100000000ULL) {\n size = 0u - addr;\n }\n end = (unsigned long long)(u32)addr + (u32)size;\n\n found = 0;\n for (i = 0; i < table->count && !found; i++) {\n if (table->elems[i].a > addr) {\n if ((unsigned long long)(u32)table->elems[i].a + (u32)table->elems[i].c <= end) {\n size -= table->elems[i].a - addr;\n addr = table->elems[i].a;\n found = 1;\n }\n }\n if (table->elems[i].a <= addr) {\n if (addr < (unsigned long long)(u32)table->elems[i].a + (u32)table->elems[i].c) {\n found = 1;\n }\n }\n if (!found) continue;\n\n if (!(table->elems[i].a <= addr)) {\n _ZN4cstd8__assertEPKcPKcPKci(&data_020868fc, (const char *)0x1a9, &data_0208690c, 1);\n }\n if (!((unsigned long long)(u32)table->elems[i].a + (u32)table->elems[i].c > addr)) {\n _ZN4cstd8__assertEPKcPKcPKci(&data_020868fc, (const char *)0x1aa, &data_0208692c, 1);\n }\n\n if (addr != table->elems[i].a) {\n func_0206d940(table, i);\n table->elems[i] = table->elems[i + 1];\n table->elems[i].c = addr - table->elems[i].a;\n table->elems[i + 1].a += table->elems[i].c;\n table->elems[i + 1].b += table->elems[i].c;\n table->elems[i + 1].c -= table->elems[i].c;\n i = i + 1;\n }\n\n if (!(addr == table->elems[i].a)) {\n _ZN4cstd8__assertEPKcPKcPKci(&data_020868fc, (const char *)0x1b7, &data_0208696c, 1);\n }\n\n if (table->elems[i].c > size) {\n table->elems[i].a += size;\n table->elems[i].b += size;\n table->elems[i].c -= size;\n } else {\n func_0206d8c4(table, i);\n while (i < table->count) {\n if ((unsigned long long)(u32)table->elems[i].a + (u32)table->elems[i].c <= end) {\n func_0206d8c4(table, i);\n continue;\n }\n {\n long long ov = (long long)end - (long long)table->elems[i].a;\n if (ov <= 0) break;\n if (!(table->elems[i].c > (u32)ov)) {\n _ZN4cstd8__assertEPKcPKcPKci(&data_020868fc, (const char *)0x1ca, &data_0208698c, 1);\n }\n table->elems[i].a += (u32)ov;\n table->elems[i].b += (u32)ov;\n table->elems[i].c -= (u32)ov;\n }\n break;\n }\n }\n }\n\n table->pad[1] &= ~2;\n table->pad[0] = 0;\n func_0206d868(&state);\n result = 1;\nepilogue:\n return result;\n}\n", "source": "fanout"} @@ -701,21 +707,15 @@ {"module": "ov006", "addr": "0x020e5450", "name": "func_ov006_020e5450", "size": 1376, "target_hex": "f04f2de97cd04de20190a0e13010a0e3990107e000a0a0e12c059fe507208ae028159fe50a60a0e1005082e0014082e00080a0e3010986e28916d0e5000051e33a01000a080059e13801000a8816d0e5000051e33501000a030051e33301000a642690e5001094e5603690e5012042e09202c1e0002095e5022043e09202e1e09b60fdeb4006a0e1180050e3270100aa3000a0e3980006e0ac049fe5ac149fe500508ae001008ae020008de5062090e7070090e7063095e7000042e0072085e00c208de5062085e0071095e708208de520209de5011043e0062082e010208de5e957fdeb68149fe50048a0e101008ae024008de52408a0e14002a0e180b0a0e124009de54c149fe5060080e001108ae014008de524009de53c349fe5b70090e128108de507c091e7240840e00008a0e12008a0e14002a0e18000a0e1011080e28110a0e1f12093e18000a0e1f01093e192ecc0e030008de5910cc2e060208de5022ba0e302c09ee030109de52cc6a0e10010a1e22cc08de5011a8ce12c108de5021090e060009de506c08ae001c98ce20000a0e22116a0e1001a81e124009de568e69ce5b60090e1240840e08b40a0e10008a0e12008a0e14002a0e18000a0e101c080e28cc0a0e18000a0e1fcc093e1f00093e101b08be28bb0a0e1f44093e1fbb093e168008de59c0ec3e078008de568009de534c08de564308de590cec3e078009de544c08de502c090e064009de548308de50030a0e22c06a0e1030a80e1c43fa0e138308de5cb3fa0e13c308de59b30cce0023093e094e0c0e000c0ace22336a0e10c3a83e140008de59401cce0020090e000c0ace22006a0e10c0a80e1000043e018008de540009de502c09ee00030a0e22c06a0e1030a80e19b31c1e0023093e00010a1e22336a0e1013a83e1030080e02c309de51c008de59bc3c3e044009de570308de5021090e048009de521e6a0e10000a0e202309ce070c09de52336a0e100c0ace26c308de50c3a83e16c308de500ea8ee12c309de54cc08de594c3c3e05c308de558c08de594cec3e054308de502309ce054c09de51c009de500c0ace250c08de523c6a0e150309de518109de503ca8ce16c309de50c3043e000308de558309de55cc09de5023093e000c0ace274c08de523c6a0e174309de503ca8ce19b3ecee0022093e00030aee22226a0e1032a82e102208ce004208de54957fdeb24109de51c209de5b70081e19202c1e018209de59202e1e0dc5ffdeb28109de500e0a0e3070081e71b0aa0e39b3082e09b2e22e03cb09de5021ba0e3013093e09b2022e006c095e70020a2e22336a0e1023a83e103204ce0072085e720209de506b092e7943082e0942e22e038409de5011093e0942022e00000a2e22116a0e1001a81e120009de501104be0071080e7071090e7073095e74116a0e14306a0e10c2050e20900005a08009de5002090e5030943e2003082e008209de5003082e507208ae0012982e20339a0e3603682e50c0080e2010c50e30a0000da04219fe508009de502408ae0003090e5070094e73d29a0e33d0940e2003083e008009de5003080e5072084e70c1041e2df00e0e3000051e1080000aacc009fe53519a0e300208ae0000061e2070082e7070092e7061980e210009de5001080e504009de500109de5f756fdeb14109de504209de5b000c1e19202c1e000209de590309fe59202e1e003408ae0885ffdeb07208ae0060084e7010982e20120a0e306108ae08826c0e5010981e28826c0e5061094e70e0b51e38b26c0a50010a0b38b16c0b50c009de5001090e5e800a0e36cb3fceb0a00a0e10910a0e10820a0e11af8ffeb7cd08de2f04fbde81eff2fe1018088e20b0058e3306086e2bcfeffba7cd08de2f04fbde81eff2fe16046000064460000864600006846000014220802", "lang": "c", "divergences": 324, "c_source": "typedef int Fix12i;\ntypedef unsigned int u32;\ntypedef unsigned short u16;\ntypedef short s16;\ntypedef unsigned char u8;\ntypedef unsigned long long u64;\n\nextern Fix12i _ZN4cstd4sqrtEy(u64 val);\nextern s16 _ZN4cstd5atan2E5Fix12IiES1_(Fix12i y, Fix12i x);\nextern void func_02012718(void *a, int b);\nextern void func_ov006_020e39e0(void *arg0, int arg1, int arg2);\nextern s16 data_02082214[];\n\n#define FX(a, b) ((Fix12i)(((long long)(a) * (b) + 0x800) >> 12))\n\nvoid func_ov006_020e5450(void *arg0, int arg1)\n{\n int mainOff = arg1 * 0x30;\n char *cur = (char *)arg0;\n Fix12i *pMainX0 = (Fix12i *)((char *)arg0 + mainOff + 0x4660);\n Fix12i *pMainZ0 = (Fix12i *)((char *)arg0 + mainOff + 0x4664);\n int i;\n\n for (i = 0; i < 11; i++, cur += 0x30) {\n if (*(u8 *)(cur + 0x4689) == 0)\n continue;\n if (arg1 == i)\n continue;\n\n {\n u8 state = *(u8 *)(cur + 0x4688);\n if (state == 0 || state == 3)\n continue;\n }\n\n {\n Fix12i dx = *(Fix12i *)(cur + 0x4660) - *pMainX0;\n Fix12i dz = *(Fix12i *)(cur + 0x4664) - *pMainZ0;\n long long sq = (long long)dx * dx;\n sq += (long long)dz * dz;\n if ((_ZN4cstd4sqrtEy((u64)sq) >> 12) >= 0x18)\n continue;\n }\n\n {\n int off = i * 0x30;\n char *c = (char *)arg0;\n char *xArr = c + 0x4660;\n char *zArr = c + 0x4664;\n Fix12i *pMainX = (Fix12i *)(xArr + mainOff);\n Fix12i *pCurX = (Fix12i *)(xArr + off);\n Fix12i *pCurZ = (Fix12i *)(zArr + off);\n\n s16 ang = _ZN4cstd5atan2E5Fix12IiES1_(\n *(Fix12i *)(zArr + off) - *(Fix12i *)(zArr + mainOff),\n *(Fix12i *)(xArr + off) - *(Fix12i *)(xArr + mainOff));\n\n char *angArr = c + 0x4686;\n s16 *pCurAngle = (s16 *)(angArr + off);\n char *distArr = c + 0x4668;\n\n int idxA = ((u16)(*(u16 *)(angArr + mainOff) - ang)) >> 4;\n Fix12i s0 = data_02082214[idxA * 2 + 1];\n Fix12i c0 = data_02082214[idxA * 2];\n\n Fix12i Dmain = *(Fix12i *)(distArr + mainOff);\n Fix12i Down = *(Fix12i *)(c + off + 0x4668);\n\n int idxB = ((u16)(*(u16 *)(angArr + off) - ang)) >> 4;\n Fix12i s0b = data_02082214[idxB * 2 + 1];\n Fix12i c0b = data_02082214[idxB * 2];\n\n int idxC = ((u16)ang) >> 4;\n Fix12i c1 = data_02082214[idxC * 2];\n Fix12i s1 = data_02082214[idxC * 2 + 1];\n\n Fix12i V1x = FX(c0, Dmain);\n Fix12i V1y = FX(s0, Dmain);\n Fix12i V2x = FX(c0b, Down);\n Fix12i V2y = FX(s0b, Down);\n\n Fix12i sp18 = FX(s1, V2y) - FX(c1, V1x);\n Fix12i sp1C = FX(c1, V2y) + FX(s1, V1x);\n Fix12i sp0 = FX(s1, V1y) - FX(c1, V2x);\n Fix12i sp4 = FX(c1, V1y) + FX(s1, V2x);\n\n *(s16 *)(angArr + mainOff) = _ZN4cstd5atan2E5Fix12IiES1_(sp1C, sp18);\n *(Fix12i *)(distArr + mainOff) = _ZN4cstd4sqrtEy((u64)((long long)sp1C * sp1C + (long long)sp18 * sp18));\n\n *pMainX = *pCurX - FX(s1, 0x1B000);\n *(Fix12i *)(zArr + mainOff) = *pCurZ - FX(c1, 0x1B000);\n\n {\n Fix12i mainX = *pMainX;\n Fix12i mainZ = *(Fix12i *)(zArr + mainOff);\n int adj = mainX >> 12;\n\n if (adj - 0xc < 0) {\n Fix12i delta = mainX - 0xc000;\n *pCurX += delta;\n *pMainX = 0xc000;\n adj = delta;\n }\n adj += 0xc;\n if (adj > 0x100) {\n *pCurX += *pMainX - 0xf4000;\n *pMainX = 0xf4000;\n }\n\n if ((mainZ >> 12) - 0xc < -0xe0) {\n *(Fix12i *)(zArr + mainOff) = -0xd4000;\n *pCurZ = *(Fix12i *)(zArr + mainOff) + 0x18000;\n }\n }\n\n *pCurAngle = _ZN4cstd5atan2E5Fix12IiES1_(sp4, sp0);\n *(Fix12i *)(distArr + off) = _ZN4cstd4sqrtEy((u64)((long long)sp4 * sp4 + (long long)sp0 * sp0));\n\n *(u8 *)(c + mainOff + 0x4688) = 1;\n *(u8 *)(c + off + 0x4688) = 1;\n if (*(Fix12i *)(distArr + off) >= 0x3800)\n *(u8 *)(c + off + 0x468B) = 1;\n else\n *(u8 *)(c + off + 0x468B) = 0;\n\n func_02012718((void *)0xe8, *pMainX);\n func_ov006_020e39e0(c, arg1, i);\n return;\n }\n }\n}\n", "source": "fanout-sonnet"} {"module": "ov075", "addr": "0x0211705c", "name": "func_ov075_0211705c", "size": 844, "target_hex": "f0472de90050a0e18c9afceb0040a0e1490f85e20010e0e3f550feeb000050e31300001a190e85e20010e0e3f050feeb000050e30e00001a00039fe50411a0e1b11090e1080011e20900001a040011e20700001a0500a0e10010e0e337ffffeb000050e30b00000a8102d5e5020050e30800001a490f85e2d050feeb0210a0e30500a0e18112c5e5d3feffebb0029fe5a7edfbeb890000eac900d5e50040a0e3000050e34600000ab80085e20010e0e3cf50feeb000050e30900001a940085e20010e0e3ca50feeb000050e30400001a520f85e20010e0e3c550feeb000050e30300000a0000a0e38102c5e50140a0e30f0000ea700085e20010e0e3bc50feeb000050e30400a0118102c5150040e0130700001a0500a0e10010e0e307ffffeb000050e30200000a8102d5e5000050e30140a003000054e32100000a8102d5e5000050e31e00001af208fceb000054e3080000da020050e30010a0e30060a00301008012ff600012940085e2a410c5e58750feeb070000ea000050e30010a0e30260a00301004012ff600012700085e28010c5e57e50feeb0600a0e1c408fcebdc08fceb090080e20008a0e14008a0e13372fcebb80085e28050feeb6400a0e35bedfbebed00d5e5000050e33b00000a1101d5e5000050e33800000a0500a0e10010e0e3d5feffeb000050e30200000a8102d5e5010050e30400000a5b0f85e20010e0e37a50feeb000050e30400000a0140a0e38142c5e5ec00d5e5000050e30040e003dc0085e20010e0e37050feeb000050e30400001a000054e30c0000aa8102d5e5010050e30900001afa08fcebdc0085e25950feeb0000a0e31001c5e50110a0e36600a0e38112c5e530edfbeb120000ea010c85e20010e0e35c50feeb000050e30400001a000054e30b0000da8102d5e5010050e30800001ad908fceb0010a0e3010c85e2ec10c5e54350feeb0110a0e36600a0e38112c5e51cedfbeb0040a0e304a0a0e10470a0e1038aa0e30199a0e36c609fe540f7fceb8122d5e5610f80e28a1080e0020054e10920a0010820a0110700a0e1b030d1e1010080e20b0050e3063003e0023083e1b030c1e1b034d1e1063003e0023083e1b034c1e1021081e2f3ffffba014084e2020054e3c0a08ae2e7ffffbaf047bde81eff2fe15a0e0a021b010000ff0f0000", "lang": "c", "divergences": 337, "c_source": "extern int func_0203da9c(void);\nextern int func_ov001_020ab450(void *c, int a);\nextern int func_ov075_02116d9c(int unused, int id);\nextern void func_ov001_020ab41c(void *c);\nextern void func_ov075_02116c38(void *c);\nextern void func_02012790(int id);\nextern int GetSoundMode(void);\nextern void func_ov001_020ab3f0(void *r0);\nextern void SetSoundMode(int mode);\nextern void func_02033ae0(int v);\nextern void TurnBacklightOn(void);\nextern void TurnBacklightOff(void);\nextern char data_020a0e5a[];\nextern void *_ZN3G2S12GetBG2ScrPtrEv(void);\n\nvoid func_ov075_0211705c(char *self)\n{\n int mode = func_0203da9c();\n int f;\n unsigned short flags;\n\n if (func_ov001_020ab450(self + 0x124, -1) == 0 &&\n func_ov001_020ab450(self + 0x190, -1) == 0 &&\n ((flags = *(unsigned short *)(data_020a0e5a + mode * 4)) & 8) == 0 &&\n (flags & 4) == 0)\n {\n if (func_ov075_02116d9c(0, -1) != 0 && *(unsigned char *)(self + 0x281) == 2) {\n func_ov001_020ab41c(self + 0x124);\n *(unsigned char *)(self + 0x281) = 2;\n func_ov075_02116c38(self);\n func_02012790(0x11b);\n }\n return;\n }\n\n f = 0;\n if (*(unsigned char *)(self + 0xc9) != 0) {\n if (func_ov001_020ab450(self + 0xb8, -1) == 0 &&\n func_ov001_020ab450(self + 0x94, -1) == 0)\n {\n if (func_ov001_020ab450(self + 0x148, -1) != 0) {\n *(unsigned char *)(self + 0x281) = 0;\n f = 1;\n } else if (func_ov001_020ab450(self + 0x70, -1) != 0) {\n *(unsigned char *)(self + 0x281) = f;\n f = -1;\n } else if (func_ov075_02116d9c(0, -1) != 0) {\n if (*(unsigned char *)(self + 0x281) == 0)\n f = 1;\n }\n }\n\n if (f != 0 && *(unsigned char *)(self + 0x281) == 0) {\n int sm = GetSoundMode();\n int nv;\n if (f > 0) {\n if (sm == 2) nv = 0;\n else nv = (sm + 1) & 0xff;\n *(unsigned char *)(self + 0xa4) = 0;\n func_ov001_020ab3f0(self + 0x94);\n } else {\n if (sm == 0) nv = 2;\n else nv = (sm - 1) & 0xff;\n *(unsigned char *)(self + 0x80) = 0;\n func_ov001_020ab3f0(self + 0x70);\n }\n SetSoundMode(nv);\n func_02033ae0((short)(GetSoundMode() + 9));\n func_ov001_020ab41c(self + 0xb8);\n func_02012790(0x64);\n }\n }\n\n if (*(unsigned char *)(self + 0xed) != 0 && *(unsigned char *)(self + 0x111) != 0) {\n if (func_ov075_02116d9c(0, -1) != 0 && *(unsigned char *)(self + 0x281) != 1) {\n if (func_ov001_020ab450(self + 0x16c, -1) != 0) {\n f = 1;\n *(unsigned char *)(self + 0x281) = 1;\n }\n }\n {\n int g = 0;\n if (*(unsigned char *)(self + 0xec) == 0) g = -1;\n if (func_ov001_020ab450(self + 0xdc, -1) == 0) {\n if (g < 0 && *(unsigned char *)(self + 0x281) == 1) {\n TurnBacklightOn();\n func_ov001_020ab41c(self + 0xdc);\n *(unsigned char *)(self + 0x110) = 0;\n *(unsigned char *)(self + 0x281) = 1;\n func_02012790(0x66);\n return;\n }\n }\n if (func_ov001_020ab450(self + 0x100, -1) == 0) {\n if (g > 0 && *(unsigned char *)(self + 0x281) == 1) {\n TurnBacklightOff();\n *(unsigned char *)(self + 0xec) = 0;\n func_ov001_020ab41c(self + 0x100);\n *(unsigned char *)(self + 0x281) = 1;\n func_02012790(0x66);\n }\n }\n }\n }\n\n {\n int i, j;\n unsigned short *base = (unsigned short *)((char *)_ZN3G2S12GetBG2ScrPtrEv() + 0x184);\n for (i = 0; i < 2; i++) {\n unsigned short *row = base + i * 0xc0;\n int col = (i == *(unsigned char *)(self + 0x281)) ? 0x4000 : 0x3000;\n for (j = 0; j < 0xb; j++) {\n row[0] = (row[0] & 0xfff) | col;\n row[0x20] = (row[0x20] & 0xfff) | col;\n row++;\n }\n }\n }\n}\n", "source": "fanout-opus"} {"module": "arm9", "addr": "0x0206f46c", "name": "func_0206f46c", "size": 948, "target_hex": "0f002de9f0472de948d04de280409de56c039fe57950dde5000054e17760dde57570dde50280a0e148d08dc20000a0c3f047bdc810d08dc21eff2fc168109de500a0a0e32090a0e36c209de508008de21c308de208a0cde5ba90cde1b20500eb68009de56c109de5bc0400eb0020a0e10a00a0e10130a0e10010a0e1142afeeb000050e30800000a064048e2f4129fe50400a0e16a0400eb48d08de20400a0e1f047bde810d08de21eff2fe12100dde5490050e31c00001a1c00dde5000050e30a00000a410055e3054048e20300001ab4129fe50400a0e1590400eb0d0000eaa8129fe50400a0e1550400eb090000ea410055e3044048e20300001a90129fe50400a0e14e0400eb020000ea84129fe50400a0e14a0400eb48d08de20400a0e1f047bde810d08de21eff2fe14e0050e31c00001a1c00dde5000050e30a00000a410055e3054048e20300001a48129fe50400a0e13a0400eb0d0000ea3c129fe50400a0e1360400eb090000ea410055e3044048e20300001a24129fe50400a0e12f0400eb020000ea18129fe50400a0e12b0400eb48d08de20400a0e1f047bde810d08de21eff2fe10a90a0e10110a0e36400a0e368308de20c10cde50d10cde50e90cde50f90cde51090cde514908de518108de51100cde5071069e20920d3e70100d3e70900c3e7019089e20120c3e7040059e3f7ffffba6800dde56920dde50c108de2803ca0e19c019fe5822883e1a2aa00e008904de20f0091e80f0089e888c19fe50810a0e10c008ae00c0099e8190100eb610055e37010a003011060055010a013011060150411a0e104e0a0e1010054e30bc081e268808de2230000ba3090a0e340005ce31a0000aacc11d8e707200ce2073062e204a04ce25123a0e10710cce307a0cae30a0051e1cca1a0e1ff1002e201204a120220d8170224a01152138111ff1001120f1001e2ff1001e20a0051e330108132ff1001320600003a610055e357108102ff10010237108112ff100112000000ea0910a0e101e04ee201005ee3011060e504c04ce2dcffffaa000054e30100001a000056e30100000a2e10a0e3011060e53110a0e3011040e5610055e37810a003021060055810a013021060153010a0e3011060e51c10dde5000051e32d10a0130110601548d08d12f047bd1810d08d121eff2f11010057e32b10a0030110600548d08d02f047bd0810d08d021eff2f01020057e32010a0030110600548d08de2f047bde810d08de21eff2fe1fd0100001ca60902eca50902f4a50902fca5090200a6090204a609020ca6090214a6090218a60902ff07000001fcffff", "lang": "cpp", "divergences": 380, "c_source": "//cpp\ntypedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef unsigned int u32;\ntypedef unsigned long long u64;\n\nextern \"C\" {\nvoid func_02070b98(void* a0, int a1, int a2, void* d);\nu64 func_020707cc();\nint func_01ff9d40(int, int, int, int, int);\nchar *func_020706b0(char *dst, const char *src);\nchar *func_0206fb08(long num, char *buff_end, int format);\n\nextern char data_0209a61c;\nextern char data_0209a5ec;\nextern char data_0209a5f4;\nextern char data_0209a5fc;\nextern char data_0209a600;\nextern char data_0209a604;\nextern char data_0209a60c;\nextern char data_0209a614;\nextern char data_0209a618;\n}\n\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar *func_0206f46c(int p0, int p1, int p2, int p3, int p4, ...) {\n char *buff_end;\n char buffer[0x40];\n int arg_num = (&p4)[4]; // [sp, #0x80]\n\n if (arg_num > 0x1fd) {\n return 0;\n }\n\n u8 r3 = (u8)(&p4)[0]; // [sp, #0x79]\n u8 r4 = (u8)(&p4)[2]; // [sp, #0x77]\n u8 r5 = (u8)(&p4)[4]; // [sp, #0x75]\n int high32 = (&p4)[1]; // [sp, #0x68]\n int arg4 = (&p4)[2]; // [sp, #0x6c]\n\n int sl = 0;\n int sb = 0x20;\n buffer[0] = 0;\n *(u16*)(buffer + 2) = 0x20;\n func_02070b98(buffer, high32, arg4, buffer + 20);\n u64 v1 = func_020707cc();\n if (func_01ff9d40(sl, sl, v1 >> 32, v1, sl) != 0) {\n return func_020706b0((char*)(p2 - 6), &data_0209a61c);\n }\n \n if (buffer[25] == 0x49) {\n if (buffer[20] == 0) {\n if (r3 == 0x41) {\n return func_020706b0((char*)(p2 - 5), &data_0209a5ec);\n }\n return func_020706b0((char*)(p2 - 5), &data_0209a5f4);\n }\n if (r3 == 0x41) {\n return func_020706b0((char*)(p2 - 4), &data_0209a5fc);\n }\n return func_020706b0((char*)(p2 - 4), &data_0209a600);\n }\n \n if (buffer[25] == 0x4e) {\n if (buffer[20] == 0) {\n if (r3 == 0x41) {\n return func_020706b0((char*)(p2 - 5), &data_0209a604);\n }\n return func_020706b0((char*)(p2 - 5), &data_0209a60c);\n }\n if (r3 == 0x41) {\n return func_020706b0((char*)(p2 - 4), &data_0209a614);\n }\n return func_020706b0((char*)(p2 - 4), &data_0209a618);\n }\n \n int v2 = 1;\n buffer[4] = 1;\n buffer[5] = 1;\n buffer[6] = 0;\n buffer[7] = 0;\n buffer[8] = 0;\n *(u32*)(buffer + 12) = 0;\n *(u32*)(buffer + 16) = 1;\n buffer[9] = 0x64;\n \n u8 *arr_ptr = (u8*)(buffer + 36);\n for (int i = 0; i < 4; i++) {\n int j = 7 - i;\n u8 t = arr_ptr[i];\n arr_ptr[i] = arr_ptr[j];\n arr_ptr[j] = t;\n }\n \n u32 val = ((*(u32*)(buffer + 36) & 0x7FF) << 21) | (*(u32*)(buffer + 40) << 5) | (*(u32*)(buffer + 44) >> 27);\n long lnum = *(long long*)(buffer + 12) + (long)0xFFFFFC01;\n \n buff_end = func_0206fb08(lnum, buffer + 8, v2);\n *(buff_end - 1) = (r3 == 0x61) ? 0x70 : 0x50;\n \n int ip = p2 * 4 + 11;\n int lr = p2;\n sb = 0x30;\n \n while (1) {\n if (ip < 0x40) {\n u8 b = arr_ptr[ip >> 3];\n int shift = 7 - (ip & 7);\n int v4 = (b >> shift) & 0xF;\n \n if ((ip & ~7) != ((ip - 4) & ~7)) {\n int sl = ip - 4;\n int v5 = sl - 1;\n u8 b2 = arr_ptr[v5];\n v4 |= ((b2 << 8) >> shift) & 0xFF;\n }\n v4 &= 0xF;\n \n if (v4 < 10) {\n sb = v4 + 0x30;\n } else {\n sb = v4 + (r3 == 0x61 ? 0x57 : 0x37);\n }\n }\n \n *(buff_end - 1) = sb;\n lr--;\n if (lr < 1) break;\n ip -= 4;\n }\n \n if (p2 != 0) goto skip_prefix;\n \n if (r4 != 0) {\n *(buff_end - 2) = '.';\n buff_end--;\n *(buff_end - 1) = '1';\n }\n \n *(buff_end - 2) = (r3 == 0x61) ? 'x' : 'X';\n *(buff_end - 1) = '0';\n buff_end--;\n \n if (buffer[20] != 0) {\n *(buff_end - 1) = '-';\n return buff_end;\n }\n \n if (r5 == 1) {\n *(buff_end - 1) = '+';\n return buff_end;\n }\n \n if (r5 == 2) {\n *(buff_end - 1) = ' ';\n return buff_end;\n }\n \n return buff_end;\n \nskip_prefix:\n return buff_end;\n}\n", "source": "fanout-glm-5.2"} -{"module": "ov006", "addr": "0x02126ee4", "name": "func_ov006_02126ee4", "size": 2764, "lang": "cpp", "divergences": 28, "c_source": "//cpp\n#pragma opt_strength_reduction off\n#pragma opt_common_subs off\ntypedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef unsigned int u32;\n\nstruct VObj {\n virtual void v0(); virtual void v1(); virtual void v2(); virtual void v3();\n virtual void v4(); virtual void v5(); virtual void v6(); virtual void v7();\n virtual void v8(); virtual void v9(); virtual void v10(); virtual void v11();\n virtual void v12(); virtual void v13(); virtual void v14(); virtual void v15();\n virtual void v16(); virtual void v17(); virtual void v18(); virtual void v19();\n virtual void v20(); virtual void v21(); virtual void v22(); virtual void v23();\n virtual void v24(); virtual void v25(); virtual void v26(); virtual void v27();\n virtual void v28(); virtual void v29(); virtual void v30(); virtual void v31();\n virtual void v32(); virtual void v33(); virtual void v34(); virtual int v35();\n};\n\nextern \"C\" {\nextern int data_0209d4b8;\nint RandomIntInternal(int *seed);\n}\n\nextern \"C\" void func_ov006_02126ee4(char *c)\n{\n int va;\n int vb;\n int vc;\n int pr7;\n int pr6;\n int cool;\n int p3col;\n int p3colx;\n int colx;\n int lim2;\n int gap2;\n int z2c, z30, z34, z38, z3c, z40, z44, z48, z4c, t50, z54, z58, z5c, z60;\n int z64, t68, z6c, z70, z74, z78, z7c, t80, z84;\n int w88, w8c, w90, w94, z98, z9c, wa0, wa4, wa8, wac, wb0, wb4, wb8;\n int zbc, zc0, zc4;\n int rs;\n int rx;\n int i;\n int n;\n int row;\n /* reverse-decl for callee-saved: last->r5 ... first->sb\n want col=r5, d6=r6, d7=r7, r8v=r8, sbv=sb */\n int sbv;\n int r8v;\n int d7;\n int d6;\n int col;\n\n for (i = 0; i < 0x80; i++) {\n *(u8 *)(c + i + 0xac58) = 0;\n ((int *)(c + 0xb0d8))[i] = 0;\n *(u8 *)(c + i + 0xb2d8) = 0;\n }\n for (i = 0; i < 0x80; i++) {\n *(u8 *)(c + i + 0xb358) = 0;\n }\n *(int *)(c + 0xab5c) = 0;\n\n if (((VObj *)c)->v35() != 0) {\n vb = 0xb;\n vc = 0xe;\n va = 6;\n } else {\n vb = 0xa;\n vc = 0xd;\n va = 7;\n }\n\n /* ROM statement order after ba08 load */\n d7 = 0;\n col = *(int *)(c + 0xba08) - 1;\n {\n int cool_r = 0x12;\n d6 = d7;\n sbv = 2;\n r8v = 0xd;\n cool = cool_r;\n }\n if (col >= 0) {\n colx = col * 16 + 8;\n lim2 = 0x10 - va;\n w90 = 5;\n w94 = 6;\n w88 = 3;\n w8c = 4;\n wac = 0xa;\n wb0 = 0xb;\n wa4 = 8;\n wa8 = 9;\n wa0 = 7;\n wb4 = 0xc;\n z98 = d7;\n z34 = d7;\n z40 = d7;\n z48 = d7;\n z44 = d7;\n z3c = d7;\n z38 = d7;\n z30 = d7;\n z2c = d7;\n z60 = d7;\n z5c = d7;\n z58 = d7;\n z54 = d7;\n t50 = sbv;\n z4c = d7;\n z78 = d7;\n z74 = d7;\n z70 = d7;\n z6c = d7;\n t68 = sbv;\n z64 = d7;\n z7c = d7;\n t80 = sbv;\n z84 = d7;\n z9c = d7;\n wb8 = 0x10;\n zbc = d7;\n zc0 = d7;\n zc4 = d7;\n\n do {\n pr7 = d7;\n pr6 = d6;\n d7 = (((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 3 >> 15;\n d6 = (((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 3 >> 15;\n\n if (col >= *(int *)(c + 0xba08) - 8) {\n d7 = z2c;\n d6 = d7;\n } else if (col <= *(int *)(c + 0xba04) / 16) {\n d7 = z30;\n d6 = d7;\n } else {\n int gap = r8v - sbv;\n if (gap <= vb) {\n if (d7 == 1)\n d7 = z34;\n if (d6 == 1)\n d6 = z38;\n } else if (vb + 1 == gap && d7 == 1 && d6 == 1) {\n d7 = z3c;\n d6 = d7;\n } else if (gap >= vc) {\n if (d7 == 2)\n d7 = z40;\n if (d6 == 2)\n d6 = z44;\n } else if (vc - 1 == gap && d7 == 2 && d6 == 2) {\n d7 = z48;\n d6 = d7;\n }\n }\n\n switch (d7) {\n case 0:\n break;\n case 1:\n if (pr7 == 2) {\n d7 = z4c;\n } else if (sbv >= va) {\n if (pr7 == 0) {\n d7 = t50;\n sbv--;\n } else {\n d7 = z54;\n }\n }\n break;\n case 2:\n if (pr7 == 1) {\n d7 = z58;\n } else if (sbv < 1) {\n if (pr7 == 0)\n d7 = 1;\n else\n d7 = z5c;\n } else {\n sbv--;\n }\n break;\n default:\n d7 = z60;\n break;\n }\n\n switch (d6) {\n case 0:\n break;\n case 1:\n if (pr6 == 2) {\n d6 = z64;\n } else if (r8v <= lim2) {\n if (pr6 == 0) {\n d6 = t68;\n r8v++;\n } else {\n d6 = z6c;\n }\n }\n break;\n case 2:\n if (pr6 == 1) {\n d6 = z70;\n } else if (r8v >= 0xf) {\n if (pr6 == 0)\n d6 = 1;\n else\n d6 = z74;\n } else {\n r8v++;\n }\n break;\n default:\n d6 = z78;\n break;\n }\n\n {\n int i0 = z7c;\n if (i0 < sbv) {\n char *row = c + col * 2;\n do {\n *(u16 *)(row + 0x4f38) = 1;\n row += 0x5c0;\n i0++;\n } while (i0 < sbv);\n }\n }\n\n switch (d7) {\n case 0:\n *(u16 *)(c + sbv * 0x5c0 + col * 2 + 0x4f38) = t80;\n *(u16 *)(c + (sbv + 1) * 0x5c0 + col * 2 + 0x4f38) = z84;\n break;\n case 1:\n *(u16 *)(c + sbv * 0x5c0 + col * 2 + 0x4f38) = w88;\n *(u16 *)(c + (sbv + 1) * 0x5c0 + col * 2 + 0x4f38) = w8c;\n break;\n case 2:\n *(u16 *)(c + sbv * 0x5c0 + col * 2 + 0x4f38) = w90;\n *(u16 *)(c + (sbv + 1) * 0x5c0 + col * 2 + 0x4f38) = w94;\n break;\n }\n\n {\n int i0 = sbv + 2;\n if (i0 < r8v - 1) {\n char *row = c + col * 2 + i0 * 0x5c0;\n do {\n *(u16 *)(row + 0x4f38) = z98;\n row += 0x5c0;\n i0++;\n } while (i0 < r8v - 1);\n }\n }\n\n switch (d6) {\n case 0:\n *(u16 *)(c + (r8v - 1) * 0x5c0 + col * 2 + 0x4f38) = z9c;\n *(u16 *)(c + r8v * 0x5c0 + col * 2 + 0x4f38) = wa0;\n break;\n case 1:\n *(u16 *)(c + (r8v - 1) * 0x5c0 + col * 2 + 0x4f38) = wa4;\n *(u16 *)(c + r8v * 0x5c0 + col * 2 + 0x4f38) = wa8;\n break;\n case 2:\n *(u16 *)(c + (r8v - 1) * 0x5c0 + col * 2 + 0x4f38) = wac;\n *(u16 *)(c + r8v * 0x5c0 + col * 2 + 0x4f38) = wb0;\n break;\n }\n\n {\n int i0 = r8v + 1;\n if (i0 < 0x10) {\n char *p = c + col * 2 + i0 * 0x5c0;\n do {\n *(u16 *)(p + 0x4f38) = 1;\n p += 0x5c0;\n i0++;\n } while (i0 < 0x10);\n }\n }\n\n if (d7 == 1)\n sbv++;\n if (d6 == 1)\n r8v--;\n\n if (col == *(int *)(c + 0xba04) / 16 - 1)\n *(int *)(c + 0xab5c) = (((r8v + sbv + 1) << 4) / 2) << 12;\n\n if (col > *(int *)(c + 0xba04) / 16 + 0x11) {\n if (cool > 0) {\n cool--;\n } else if (((VObj *)c)->v35() != 0 && col < *(int *)(c + 0xba08) / 2) {\n if (r8v - sbv >= 0xd) {\n if ((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 8 >> 15 == 0) {\n int r2;\n if ((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 2 >> 15 == 0)\n r2 = sbv + 2;\n else\n r2 = r8v - 2;\n *(u16 *)(c + r2 * 0x5c0 + col * 2 + 0x4f38) = wb4;\n cool = wb8;\n for (i = zbc; i < 0x80; i++) {\n u8 *q = (u8 *)(((int)c + i + 0xac58) & 0xFFFFFFFFFFFFFFFF);\n if (*q == 0) {\n *(int *)(c + i * 8 + 0xacd8) = ((r2 << 4) + 8) << 12;\n *(int *)(c + i * 8 + 0xacdc) = colx << 12;\n *q = 1;\n break;\n }\n }\n }\n }\n } else {\n gap2 = r8v - sbv;\n if (gap2 >= 0xd) {\n if ((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 16 >> 15 == 0) {\n int r2 = sbv + (((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * (gap2 - 3)) >> 15) + 2;\n *(u16 *)(c + r2 * 0x5c0 + col * 2 + 0x4f38) = wb4;\n cool = wb8;\n for (i = zc0; i < 0x80; i++) {\n u8 *q = (u8 *)(((int)c + i + 0xac58) & 0xFFFFFFFFFFFFFFFF);\n if (*q == 0) {\n *(int *)(c + i * 8 + 0xacd8) = ((r2 << 4) + 8) << 12;\n *(int *)(c + i * 8 + 0xacdc) = colx << 12;\n *q = 1;\n break;\n }\n }\n }\n } else if (gap2 >= 0xa) {\n if ((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 16 >> 15 == 0) {\n int r2;\n if ((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 2 >> 15 == 0)\n r2 = sbv + 2;\n else\n r2 = r8v - 2;\n *(u16 *)(c + r2 * 0x5c0 + col * 2 + 0x4f38) = wb4;\n cool = wb8;\n for (i = zc4; i < 0x80; i++) {\n u8 *q = (u8 *)(((int)c + i + 0xac58) & 0xFFFFFFFFFFFFFFFF);\n if (*q == 0) {\n *(int *)(c + i * 8 + 0xacd8) = ((r2 << 4) + 8) << 12;\n *(int *)(c + i * 8 + 0xacdc) = colx << 12;\n *q = 1;\n break;\n }\n }\n }\n }\n }\n }\n colx -= 0x10;\n col--;\n } while (col >= 0);\n }\n\n if (((VObj *)c)->v35() != 0) {\n for (i = 0; i < 0x80; i++) {\n if (*(u8 *)(c + i + 0xac58) == 1) {\n if ((((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 2 >> 15 == 0)\n *(int *)(c + i * 4 + 0xb0d8) = 1;\n }\n }\n }\n\n {\n char *bp = c + 0xb000;\n int c1 = *(int *)(bp + 0xa04) / 16;\n col = c1 - 1;\n i = 0xf;\n r8v = 0xe;\n d6 = 0xd;\n d7 = 0;\n for (; col <= c1; col++) {\n char *rowp = c + col * 2;\n for (sbv = d7; sbv < 0x10; sbv++) {\n char *cell = rowp + 0x4f00;\n u16 gv = *(u16 *)(cell + 0x38);\n if (gv == 0)\n *(u16 *)(cell + 0x38) = d6;\n else if (gv == 2)\n *(u16 *)(cell + 0x38) = r8v;\n else if (gv == 7)\n *(u16 *)(cell + 0x38) = i;\n rowp += 0x5c0;\n }\n c1 = *(int *)(bp + 0xa04) / 16;\n }\n }\n\n n = 0;\n p3col = *(int *)(c + 0xba08) - 1;\n if (p3col >= 0) {\n p3colx = p3col * 16 + 8;\n rs = 0;\n rx = 8;\n do {\n char *gp = c + p3col * 2;\n int rowx = rx;\n for (row = rs; row < 0x10; row++) {\n u16 gv = *(u16 *)(gp + 0x4f38);\n if (gv == 1) {\n int v = (((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 16 >> 15;\n if (v < 4) {\n *(u16 *)(gp + 0x4f38) = v + 0x1d;\n } else if (v == 4) {\n if (n < 0x80) {\n *(int *)(c + n * 8 + 0xb5d8) = rowx << 12;\n *(int *)(c + n * 8 + 0xb5dc) = p3colx << 12;\n *(u8 *)(c + n + 0xb358) = 1;\n *(int *)(c + n * 4 + 0xb3d8) = (((u32)RandomIntInternal(&data_0209d4b8) >> 16) & 0x7fff) * 4 >> 15;\n n++;\n }\n }\n }\n gp += 0x5c0;\n rowx += 0x10;\n }\n p3colx -= 0x10;\n p3col--;\n } while (p3col >= 0);\n }\n}\n", "source": "log_attempt", "target_hex": "f04f2de9d4d04de200a0a0e10040a0e30430a0e104208ae004118ae00a0a82e2014084e2583cc0e50b0a81e2d83080e50b0a82e2d832c0e5800054e3f4ffffba0020a0e303008ae00b0a80e2013083e25823c0e5800053e3f9ffffba0a1a8ae20a00a0e15c2b81e5001090e58c1091e531ff2fe1000050e30600000a0b00a0e304008de50e00a0e308008de50600a0e300008de5050000ea0a00a0e304008de50d00a0e308008de50700a0e300008de50b0a8ae2080a90e50070a0e3015050e21200a0e30760a0e10290a0e30d80a0e314008de5f501004a0502a0e1080080e220008de500009de5d0b99fe5100060e224008de50500a0e390008de50600a0e394008de50300a0e388008de50400a0e38c008de50a00a0e3ac008de50b00a0e3b0008de50800a0e3a4008de50900a0e3a8008de50700a0e3a0008de50c00a0e3b4008de51000a0e398708de50140a0e334708de540708de548708de544708de53c708de538708de530708de52c708de560708de55c708de558708de554708de550908de54c708de578708de574708de570708de56c708de568908de564708de57c708de580908de584708de59c708de5b8008de5bc708de5c0708de5c4708de5fc089fe50c708de510608de53652fcebf0189fe5201801e00300a0e3910000e0a077a0e1d8089fe52f52fcebd4189fe5201801e00300a0e3910000e0a067a0e10b0a8ae2081a90e5081041e2010055e12c709da50760a0a1280000aa041a90e5c101a0e1200e81e0400255e130709dd50760a0d1210000da04109de5090048e0010050e1040000ca010057e334709d05010056e338609d05180000ea011081e2000051e10500001a010057e30300001a010056e33c709d050760a0010f00000a08109de5010050e1040000ba020057e340709d05020056e344609d05070000ea011041e2000051e10400001a020057e30200001a020056e348709d050760a001000057e31e00000a010057e30200000a020057e30d00000a180000ea0c009de5020050e34c709d051500000a00009de5000059e1120000ba0c009de5000050e350709d050190490254709d150c0000ea0c009de5010050e358709d050800000a010059e3030000aa000050e30470a0015c709d15020000ea019049e2000000ea60709de5000056e31e00000a010056e30200000a020056e30d00000a180000ea10009de5020050e364609d051500000a24009de5000058e1120000ca10009de5000050e368609d05018088026c609d150c0000ea10009de5010050e370609d050800000a0f0058e3030000ba000050e30460a00174609d15020000ea018088e2000000ea78609de5000059e37c209de5060000da85108ae04f0c81e2b843c0e1171d81e2012082e2090052e1f9ffffba000057e30400000a010057e30f00000a020057e31a00000a250000ea172da0e399a220e0850080e04f1c80e280009de5b803c1e1011089e291a220e0850080e04f1c80e284009de5b803c1e1180000ea172da0e399a220e0850080e04f1c80e288009de5b803c1e1011089e291a220e0850080e04f1c80e28c009de5b803c1e10b0000ea172da0e399a220e0850080e04f1c80e290009de5b803c1e1011089e291a220e0850080e04f1c80e294009de5b803c1e1020089e2011048e2010050e10a0000aa85208ae0171da0e3902123e098109de54f2c83e2b813c2e1010080e2011048e2173d83e2010050e1f7ffffba000056e30400000a010056e30f00000a020056e31a00000a250000ea011048e2172da0e391a220e0850080e04f1c80e29c009de5b803c1e198a220e0850080e04f1c80e2a0009de5b803c1e1180000ea011048e2172da0e391a220e0850080e04f1c80e2a4009de5b803c1e198a220e0850080e04f1c80e2a8009de5b803c1e10b0000ea011048e2172da0e391a220e0850080e04f1c80e2ac009de5b803c1e198a220e0850080e04f1c80e2b0009de5b803c1e1012088e2100052e3080000aa85108ae0170da0e3921021e04f0c81e2b843c0e1171d81e2012082e2100052e3f9ffffba0b0a8ae2041a90e5010057e3c101a0e1200e81e04002a0e1010040e201908902010056e301804802000055e10700001a090088e0010080e20002a0e1a00f80e0c000a0e10016a0e10a0a8ae25c1b80e50b0a8ae2041a90e5c101a0e1200e81e04002a0e1110080e2000055e1990000da14009de5000050e3010040c214008dc5940000ca0a00a0e1001090e58c1091e531ff2fe1000050e33200000a0b0a8ae2080a90e5a00f80e0c00055e12d0000aa090048e00d0050e3860000ba3c049fe50851fceb38149fe5200801e08001a0e1a007b0e17f00001a20049fe50151fceb1c149fe5200801e08000a0e1a007b0e10220890202204812170da0e392a020e0850080e04f1c80e2b4009de5b803c1e1b8009de5bc109de514008de501008ae00b30f0e7000053e30a00001a0222a0e1082082e281118ae00236a0e10a2a81e220109de5d83c82e50116a0e1dc1c82e50040c0e55f0000ea011081e2800051e3edffffba5b0000ea090048e028008de50d0050e32b0000ba80039fe5d950fceb7c139fe5200801e00002a0e1a007b0e15000001a64039fe5d250fceb28109de5032041e258139fe5200801e0920000e0a00789e0022080e2170da0e392a020e0850080e04f1c80e2b4009de5b803c1e1b8009de5c0109de514008de501008ae00b30f0e7000053e30a00001a0222a0e1082082e281118ae00236a0e10a2a81e220109de5d83c82e50116a0e1dc1c82e50040c0e52f0000ea011081e2800051e3edffffba2b0000ea0a0050e3290000bac8029fe5ab50fcebc4129fe5200801e00002a0e1a007b0e12200001aac029fe5a450fceba8129fe5200801e08000a0e1a007b0e10220890202204812170da0e392a020e0850080e04f1c80e2b4009de5b803c1e1b8009de5c4109de514008de501008ae00b30f0e7000053e30a00001a0222a0e1082082e281118ae00236a0e10a2a81e220109de5d83c82e50116a0e1dc1c82e50040c0e5020000ea011081e2800051e3edffffba20009de5015055e2100040e220008de543feff5a0a00a0e1001090e58c1091e531ff2fe1000050e31300000af4519fe5f4719fe50060a0e30140a0e306008ae00a0a80e2580cd0e5010050e30700001a0500a0e16d50fceb200807e08000a0e1a007b0e106018a000b0a8002d8408005016086e2800056e3efffffba0b2a8ae2041a92e5c101a0e1200e81e04012a0e1010041e2010050e1190000ca0f40a0e30e50a0e30d60a0e30070a0e30790a0e180808ae04f1c88e2b833d1e1000053e3b863c1010400000a020053e3b853c1010100000a070053e3b843c101019089e2100059e3178d88e2f1ffffba043a92e5010080e2c311a0e1211e83e0410250e1e9ffffda0b0a8ae2080a90e50090a0e3010050e218008de5d4d08d42f04fbd481eff2f410002a0e1080080e21c008de50800a0e3f0b09fe5c8908de50140a0e3cc008de518009de5c8809de580708ae01c009de5cc609de50056a0e14f0c87e2b803d0e1010050e31e00001ab4009fe52650fceb20080be00002a0e1a007a0e1040050e31d1080b24f0c87b2b813c0b1140000ba040050e31200001a800059e3100000aa89018ae00b0a80e20616a0e1d81580e5dc5580e509008ae00b0a80e25843c0e55c009fe51050fceb20080be00001a0e1a017a0e109018ae00b0a80e2d81380e5019089e2018088e2100058e3177d87e2106086e2d7ffffba1c009de5100040e21c008de518009de5010050e218008de5caffff5ad4d08de2f04fbde81eff2fe158ac0000b8d40902ff7f0000"} {"module": "arm9", "addr": "0x0206d32c", "name": "func_0206d32c", "size": 1340, "target_hex": "f04f2de944d04de2020050e30180a0e1f0149f350060a0230061913700208de5000056e30370a0e10000a0033201000a000057e30100a0032f01000a34008de2470100eb044086e28050a0e30500a0e10410a0e1cb0100eb000050e3faffff1a085086e2001095e50000a0e3024081e3073098e00020a0e2010052e3004085e5000053010000009a087050e0075098e00010a0e300b0a0e24f0fa0e328008de54a0fa0e304108de50140a0e10c108de518108de52c108de50190a0e31c008de5f10000ea040286e0103090e5080053e14d00009a0600a0e10410a0e104908de54b0100eb041286e000009de5108081e5140081e518009de5187081e51c0081e5010084e214008de53a0000ea14009de50030a0e3001286e0100091e5182091e502a090e00010a3e20b0051e105005a010300008a0600a0e1011084e2150100eb2c0000ea00a055e00310cbe00a0053e00100d3e0cb0000aa0a0052e10400008aa4039fe5a4139fe5a4239fe50930a0e128feffeb14009de5000286e0102080e2001092e5143080e20a1081e0001082e5001093e5182080e20a1081e0001083e5001092e50a1041e0001082e5180090e5000050e30400001a4c039fe554139fe554239fe50930a0e112feffeb14009de5000286e0180090e50f0250e3a900003a24039fe51c109de530239fe50930a0e108feffeba30000ea011084e2000096e5000051e1c0ffff3a9e0000ea080053e19c00008a180090e50010a0e3002093e00c009de50010a1e2010050e1020058019400002a080053e10400009ac8029fe5dc129fe5dc229fe50930a0e1f1fdffeb040286e0102090e5180090e50010a0e3002092e00c009de50010a1e2000051e1080052010400008a8c029fe5a8129fe5a8229fe50930a0e1e2fdffeb040286e0100090e5000058e12300000a0600a0e10410a0e1da0000eb010084e204c286e0001286e00040a0e110008ce220008de5140081e230008de5180081e220a09de510e081e224008de50f009ee80f008ae810009ce5000048e018008ce500109ee518009ce5000081e000008ee530009de5001090e518009ce5001081e030009de5001080e524009de518109ce5000090e5011040e024009de5001080e5040286e0100090e5000058e10400000ac8019fe528109de5e8219fe50930a0e1b1fdffeb040286e0181090e5070051e13200008a00109de504908de5141080e5187080e5010084e210008de5260000ea10009de50030a0e3001286e0180091e510a091e500209ae00010a3e20b0051e1050052010300008a0600a0e1011084e2790000eb180000ea0aa055e00320cbe00a1053e00210d3e02f0000aa0a0050e10400008a34019fe55c119fe534219fe50930a0e18cfdffeb10009de5001286e0103081e2000093e5142081e20a0080e0000083e5000092e50a0080e0000082e51800b1e50a0040e0000081e5011084e2000096e5000051e1d4ffff3a160000ea103080e2001093e5142080e2071081e0001083e5001092e5183080e2071081e0001082e5002093e50600a0e1072042e00410a0e104908de5002083e5690000eb041286e000009de5108081e5140081e52c009de5187081e51c0081e5014084e2000096e5000054e10200002a04009de5000050e307ffff0a04009de5000050e30900001a0600a0e10410a0e1550000eb041286e000009de5108081e5140081e5187081e50000a0e31c0081e5082086e2001092e534008de20210c1e3001082e50010a0e3041086e5100000eb0100a0e344d08de2f04fbde81eff2fe1c09e0a02fc680802210100008c69080227010000bc690802dc6908022e0100000c6908022f0100002c6908026c69080251010000", "lang": "c", "divergences": 406, "c_source": "typedef unsigned int u32;\n\nextern void _ZN4cstd8__assertEPKcPKcPKci(const char *, const char *, const char *, int);\nextern const char data_020868fc;\nextern const char data_0208698c;\nextern const char data_020869bc;\nextern const char data_020869dc;\nextern const char data_0208690c;\nextern const char data_0208692c;\nextern const char data_0208696c;\n\ntypedef struct { u32 irqState; u32 fiqState; u32 mpuRegion7; } SavedIntState;\nextern void func_0206d890(SavedIntState *state);\nextern void func_0206d868(const SavedIntState *state);\n\nstruct Elem {\n int a, b, c, d;\n};\n\nstruct Arr {\n unsigned int count;\n int pad[3];\n struct Elem elems[1];\n};\n\nextern void func_0206d940(struct Arr *s, unsigned int index);\nextern void func_0206d8c4(struct Arr *s, unsigned int index);\nextern u32 func_0206dab4(u32 val, u32 *addr);\n\nextern struct Arr *data_020a9ec0[2];\n\nint func_0206d32c(u32 idx, u32 start, u32 tag, u32 len)\n{\n SavedIntState state;\n int inserted;\n int d1, d2;\n int line1, line2;\n unsigned int flags;\n int ret;\n unsigned int j, k;\n unsigned int zeroHi;\n\n struct Arr *arr;\n unsigned long long end;\n int one;\n long long overlap;\n unsigned int i;\n\n if (idx < 2) {\n arr = data_020a9ec0[idx];\n } else {\n arr = 0;\n }\n\n if (arr == 0) {\n ret = 0;\n goto L_end;\n }\n if (len == 0) {\n ret = 1;\n goto L_end;\n }\n\n func_0206d890(&state);\n\n while (func_0206dab4(0x80, (u32 *)&arr->pad[0]) != 0) {\n ;\n }\n\n flags = (u32)arr->pad[1];\n arr->pad[1] = (int)(flags | 2);\n\n end = (unsigned long long)start + len;\n if (end > 0x100000000ULL) {\n len = 0 - start;\n }\n end = (unsigned long long)start + len;\n\n line2 = 0x13c;\n inserted = 0;\n i = 0;\n zeroHi = 0;\n d1 = 0;\n d2 = 0;\n one = 1;\n line1 = 0x128;\n\n goto L_bottom;\n\nL_top:\n if ((u32)arr->elems[i].a <= start) {\n unsigned long long elemEnd;\n\n if ((u32)arr->elems[i].a > start) goto L_bottom;\n\n elemEnd = (unsigned long long)(u32)arr->elems[i].a + (u32)arr->elems[i].c;\n if (((unsigned long long)zeroHi << 32 | start) >= elemEnd) goto L_bottom;\n\n if ((u32)arr->elems[i].a > start) {\n _ZN4cstd8__assertEPKcPKcPKci(&data_020868fc, (const char *)0x12e, &data_0208690c, 1);\n }\n\n {\n unsigned long long elemEnd2 = (unsigned long long)(u32)arr->elems[i].a + (u32)arr->elems[i].c;\n if (elemEnd2 <= ((unsigned long long)zeroHi << 32 | start)) {\n _ZN4cstd8__assertEPKcPKcPKci(&data_020868fc, (const char *)0x12f, &data_0208692c, 1);\n }\n }\n\n if (start == (u32)arr->elems[i].a) {\n goto L_mergeJunction;\n } else {\n func_0206d940(arr, i);\n arr->elems[i] = arr->elems[i + 1];\n arr->elems[i].c = (int)(start - (u32)arr->elems[i].a);\n arr->elems[i + 1].a = arr->elems[i + 1].a + arr->elems[i].c;\n arr->elems[i + 1].b = arr->elems[i + 1].b + arr->elems[i].c;\n arr->elems[i + 1].c = arr->elems[i + 1].c - arr->elems[i].c;\n i = i + 1;\n goto L_mergeJunction;\n }\n } else {\n inserted = one;\n func_0206d940(arr, i);\n arr->elems[i].a = (int)start;\n arr->elems[i].b = (int)tag;\n arr->elems[i].c = (int)len;\n arr->elems[i].d = d1;\n j = i + 1;\n goto L_mf1_bottom;\n }\n\nL_mf1_top:\n {\n unsigned long long elemEnd = (unsigned long long)(u32)arr->elems[j].a + (u32)arr->elems[j].c;\n if (elemEnd <= end) {\n func_0206d8c4(arr, i + 1);\n goto L_mf1_bottom;\n } else {\n overlap = (long long)end - (long long)(u32)arr->elems[j].a;\n if (overlap <= 0) goto L_bottom;\n if ((u32)arr->elems[j].c <= (u32)overlap) {\n _ZN4cstd8__assertEPKcPKcPKci(&data_020868fc, (const char *)0x121, &data_0208698c, 1);\n }\n arr->elems[j].a = arr->elems[j].a + (int)overlap;\n arr->elems[j].b = arr->elems[j].b + (int)overlap;\n arr->elems[j].c = arr->elems[j].c - (int)overlap;\n if (arr->elems[j].c == 0) {\n _ZN4cstd8__assertEPKcPKcPKci(&data_020868fc, (const char *)0x127, &data_020869bc, 1);\n }\n if ((u32)arr->elems[j].c >= 0xf0000000u) {\n _ZN4cstd8__assertEPKcPKcPKci(&data_020868fc, (const char *)line1, &data_020869dc, 1);\n }\n goto L_bottom;\n }\n }\n\nL_mf1_bottom:\n if (j < arr->count) goto L_mf1_top;\n goto L_bottom;\n\nL_mergeJunction:\n if (start != (u32)arr->elems[i].a) {\n _ZN4cstd8__assertEPKcPKcPKci(&data_020868fc, (const char *)line2, &data_0208696c, 1);\n }\n if ((u32)arr->elems[i].c > len) {\n arr->elems[i].a = arr->elems[i].a + (int)len;\n arr->elems[i].b = arr->elems[i].b + (int)len;\n arr->elems[i].c = arr->elems[i].c - (int)len;\n func_0206d940(arr, i);\n arr->elems[i].a = (int)start;\n arr->elems[i].b = (int)tag;\n arr->elems[i].c = (int)len;\n arr->elems[i].d = d2;\n goto L_bottom;\n } else {\n inserted = one;\n arr->elems[i].b = (int)tag;\n arr->elems[i].c = (int)len;\n k = i + 1;\n goto L_mf2_bottom;\n }\n\nL_mf2_top:\n {\n unsigned long long elemEnd = (unsigned long long)(u32)arr->elems[k].a + (u32)arr->elems[k].c;\n if (elemEnd <= end) {\n func_0206d8c4(arr, i + 1);\n goto L_mf2_bottom;\n } else {\n overlap = (long long)end - (long long)(u32)arr->elems[k].a;\n if (overlap <= 0) goto L_bottom;\n if ((u32)arr->elems[k].c <= (u32)overlap) {\n _ZN4cstd8__assertEPKcPKcPKci(&data_020868fc, (const char *)0x151, &data_0208698c, 1);\n }\n arr->elems[k].a = arr->elems[k].a + (int)overlap;\n arr->elems[k].b = arr->elems[k].b + (int)overlap;\n arr->elems[k].c = arr->elems[k].c - (int)overlap;\n goto L_mf2_bottom;\n }\n }\n\nL_mf2_bottom:\n if (k < arr->count) goto L_mf2_top;\n goto L_bottom;\n\nL_bottom:\n i = i + 1;\n if (i >= arr->count) goto L_postloop;\n if (inserted == 0) goto L_top;\n\nL_postloop:\n if (inserted == 0) {\n func_0206d940(arr, i);\n arr->elems[i].a = (int)start;\n arr->elems[i].b = (int)tag;\n arr->elems[i].c = (int)len;\n arr->elems[i].d = 0;\n }\n\n flags = (u32)arr->pad[1];\n arr->pad[1] = (int)(flags & ~2u);\n arr->pad[0] = 0;\n func_0206d868(&state);\n ret = 1;\n\nL_end:\n return ret;\n}\n", "source": "fanout"} {"module": "ov006", "addr": "0x02118b70", "name": "func_ov006_02118b70", "size": 2268, "target_hex": "f0402de91cd04de20040a0e1080094e5ff0010e20500000aff0000e2bc0084e5bc1094e5f8079fe5000051e1bc008485f0079fe50110a0e3ec579fe5001080e5b020d5e1e4079fe5e4179fe5432002e2000082e1b000c5e1b030d5e1012ca0e3d0079fe54030c3e3b030c5e1002081e5b010d5e10310c1e3b010c5e12054feeb0050a0e1b8f0fceb0010a0e10500a0e1d306fdeb0500a0e11354feeb62f1fceb0010a0e10000a0e3b400cde1b400dde1012aa0e30706fdeb7c079fe51054feeb0050a0e158f1fceb0010a0e10500a0e1c306fdeb0500a0e10354feeb5c079fe50754feeb0050a0e12010a0e3f7fffceb020085e20210a0e31e20a0e3e5f6fceb0500a0e1f853feeb34079fe534c79fe5b020d0e10030a0e32c179fe5432002e20c2082e1b020c0e1b050d0e11c279fe51c779fe54050c5e3b050c0e1003081e5b050d0e10c179fe50ce79fe50350c5e3015085e3b050c0e1b050d2e1fc669fe5fc069fe5435005e20c5085e1b050c2e1b0c0d2e1ec569fe540c0cce3b0c0c2e1003087e5b0c0d2e103c0cce301c08ce3b0c0c2e1b020d1e1432002e20e2082e1b020c1e1b020d1e14020c2e3b020c1e1003086e5b020d1e10320c2e3022082e3b020c1e1b010d0e1431001e20e1081e1b010c0e1b010d0e14010c1e3b010c0e1003085e5b010d0e10310c1e3021081e3b010c0e1080094e5ff0010e22400001a64069fe5be53feeb0050a0e12bf0fceb0010a0e10500a0e17106fdeb0500a0e1b153feeb44069fe5b553feeb0050a0e110f0fceb0010a0e10500a0e16806fdeb0500a0e1a853feeb24069fe5ac53feeb0050a0e1efeffceb0010a0e10500a0e15f06fdeb0500a0e19f53feeb04069fe5a353feeb0050a0e1d2effceb0010a0e10500a0e15606fdeb0500a0e19653feeb230000eae0059fe59953feeb0050a0e106f0fceb0010a0e10500a0e14c06fdeb0500a0e18c53feebc0059fe59053feeb0050a0e1ebeffceb0010a0e10500a0e14306fdeb0500a0e18353feeba0059fe58753feeb0050a0e1caeffceb0010a0e10500a0e13a06fdeb0500a0e17a53feeb80059fe57e53feeb0050a0e1adeffceb0010a0e10500a0e13106fdeb0500a0e17153feeb080094e5ff0010e21600001a54059fe57253feeb0050a0e11a1ea0e362fffceb0500a0e16010a0e31a2ea0e36af6fceb0500a0e16353feeb2c059fe56753feeb0050a0e11a1ea0e357fffceb0500a0e16010a0e31a2ea0e345f6fceb0500a0e15853feeb150000ea00059fe55b53feeb0050a0e11a1ea0e34bfffceb0500a0e16010a0e31a2ea0e353f6fceb0500a0e14c53feebd8049fe55053feeb0050a0e11a1ea0e340fffceb0500a0e16010a0e31a2ea0e32ef6fceb0500a0e14153feebb0249fe5b0149fe50050d2e50030d1e5a8049fe50150c5e30050c2e50050d2e50d3083e30030c1e50c1085e30010c2e53a53feeb0050a0e1011ca0e32afffceb0500a0e10010a0e3012ca0e3fef5fceb0500a0e10010a0e3012ca0e3e0f5fceb0500a0e12753feeb0020a0e30210a0e1020184e0010980e2012082e2881680e50d0052e3f9ffffba0020a0e3010184e0010980e2011081e2bc2680e5190051e3f9ffffba0010a0e3020184e0010980e2012082e2201780e5080052e3f9ffffba0020a0e3010184e0010980e2011081e2402780e5030051e3f9ffffba0010a0e3020184e0010980e2012082e24c1780e5060052e3f9ffffba0020a0e3010184e0010980e2011081e2642780e5030051e3f9ffffba0010a0e3020184e0010980e2012082e2701780e5020052e3f9ffffba3b29a0e30a18a0e34800a0e308208de50c108de5d18efceb000050e30700000a08e09de50cc09de510308de20410a0e10020a0e310e08de514c08de52de1ffeb012984e2840682e50010a0e3781782e57c1782e538039fe5801782e50ac0a0e31820a0e30430a0e300c08de559f0fceb0ac0a0e31c039fe50010a0e31820a0e30430a0e300c08de552f0fceb08039fe508139fe504c090e504039fe500209ce5b430dce1032bc2e3012b82e300208ce5b420dce10f3a03e24336a0e10f2ac2e3032682e1b420cce104c091e5d4129fe500209ce5b430dce1032bc2e3012b82e300208ce5b420dce10f3a03e24336a0e10f2ac2e3032682e1b420cce108c090e5a4029fe500209ce5b430dce1032bc2e3012b82e300208ce5b420dce10f3a03e24336a0e10f2ac2e3032682e1b420cce104c091e574129fe500209ce5b430dce1032bc2e3012b82e300208ce5b420dce10f3a03e24336a0e10f2ac2e3032682e1b420cce104c090e544029fe500209ce5b430dce1032bc2e3012b82e300208ce5b420dce10f3a03e24336a0e10f2ac2e3032682e1b420cce104c091e514129fe500209ce5b430dce1032bc2e3012b82e300208ce5b420dce10f3a03e24336a0e10f2ac2e3032682e1b420cce104c090e5e4019fe500209ce5b430dce1032bc2e3012b82e300208ce5b420dce10f3a03e24336a0e10f2ac2e3032682e1b420cce104c091e5b4219fe500109ce5b430dce1031bc1e3011b81e300108ce5b410dce10f3a03e24336a0e10f1ac1e3031681e1b410cce1080090e584119fe5003090e5b4c0d0e1033bc3e3013b83e3003080e5b430d0e10fca0ce24cc6a0e10f3ac3e30c3683e1b430c0e108c080e200309ce5b4e0d0e1030bc3e3010b80e300008ce5b400dce10f3a0ee24336a0e10f0ac0e3030680e1b400cce104c092e50400a0e100209ce5b430dce1032bc2e3012b82e300208ce5b420dce10f3a03e24336a0e10f2ac2e3032682e1b420cce1043091e5001093e5b420d3e1031bc1e3011b81e3001083e5b410d3e10f2a02e24226a0e10f1ac1e3021681e1b410c3e1e1f1ffeb0100a0e31cd08de2f040bde81eff2fe10e27000044ee0802081000040c5200001010000460f2130280f21302a0f213020c00000410140000180000040c100004181000040e000004181600001c0000040e1000041c100004bcf21302ecf213021cf3130248f3130274f31302a4f31302d4f3130200f413022cf4130258f4130284f41302b0f413025cd4090254d40902dcf413025000000450100004e0821302f88213029c7a1302088a13025c76130274761302208a1302388a1302307613028476130294791302", "lang": "c", "divergences": 414, "c_source": "typedef int s32;\ntypedef short s16;\ntypedef unsigned int u32;\ntypedef unsigned short u16;\ntypedef signed char s8;\ntypedef unsigned char u8;\n\nextern void* func_020adc74(void* sym);\nextern void* _ZN3G2S13GetBG0CharPtrEv(void);\nextern void DecompressLZ16(void* dst, void* src);\nextern void func_ov004_020adc5c(void* p);\nextern void* _ZN3G2S12GetBG0ScrPtrEv(void);\nextern void MultiStore16(u16 val, void* dst, s32 nbytes);\nextern void _ZN4CP1527FlushAndInvalidateDataCacheEjj(u32 addr, u32 size);\nextern void _ZN3GXS10LoadBGPlttEPKvjj(const void* src, u32 offset, u32 size);\nextern void* _ZN2G213GetBG2CharPtrEv(void);\nextern u32 func_02054de8(void);\nextern s32 func_02054d88(void);\nextern void* _ZN3G2S13GetBG3CharPtrEv(void);\nextern void _ZN2GX10LoadBGPlttEPKvjj(const void* src, u32 offset, u32 size);\nextern void _ZN2GX11LoadOBJPlttEPKvjj(const void* src, u32 offset, u32 size);\nextern void _ZN3GXS11LoadOBJPlttEPKvjj(const void* src, u32 offset, u32 size);\nextern void* _Znwj(u32 size);\nextern s32 func_ov006_0211157c(void* a, void* b, s32 c, s32* d);\nextern void _ZN3G2x13SetBlendAlphaEPVttttt(volatile u16* addr, u16 a, u16 b, u16 c, u16 d);\nextern void func_ov006_02115b0c(void* c);\n\nextern s32 data_0208ee44;\nextern u8 data_0209d45c;\nextern u8 data_0209d454;\nextern char data_ov006_0213f260;\nextern char data_ov006_0213f280;\nextern char data_ov006_0213f2a0;\nextern char data_ov006_0213f2bc;\nextern char data_ov006_0213f2ec;\nextern char data_ov006_0213f31c;\nextern char data_ov006_0213f348;\nextern char data_ov006_0213f374;\nextern char data_ov006_0213f3a4;\nextern char data_ov006_0213f3d4;\nextern char data_ov006_0213f400;\nextern char data_ov006_0213f42c;\nextern char data_ov006_0213f458;\nextern char data_ov006_0213f484;\nextern char data_ov006_0213f4b0;\nextern char data_ov006_0213f4dc;\nextern char data_ov006_021382e0;\nextern char data_ov006_021382f8;\nextern char data_ov006_02137a9c;\nextern char data_ov006_02138a08;\nextern char data_ov006_0213765c;\nextern char data_ov006_02137674;\nextern char data_ov006_02138a20;\nextern char data_ov006_02138a38;\nextern char data_ov006_02137630;\nextern char data_ov006_02137684;\nextern char data_ov006_02137994;\n\ns32 func_ov006_02118b70(void* arg0)\n{\n char* c = (char*)arg0;\n void* p;\n volatile u16 h;\n s32 i;\n s32 v0, v1, v2, v3, v4, v5, v6, v7;\n void* newObj;\n\n if ((*(s32*)(c + 8) & 0xff) != 0) {\n *(s32*)(c + 0xbc) = *(s32*)(c + 8) & 0xff;\n if ((u32)*(s32*)(c + 0xbc) > 0x270eU)\n *(s32*)(c + 0xbc) = 0x270e;\n }\n\n data_0208ee44 = 1;\n *(u16*)0x04001008 = (u16)((*(u16*)0x04001008 & 0x43) | 0x520c);\n *(u16*)0x04001008 &= ~0x40;\n *(s32*)0x04001010 = 0x100;\n *(u16*)0x04001008 &= ~3;\n\n v0 = (s32)func_020adc74(&data_ov006_0213f260);\n DecompressLZ16((void*)v0, _ZN3G2S13GetBG0CharPtrEv());\n func_ov004_020adc5c((void*)v0);\n\n p = _ZN3G2S12GetBG0ScrPtrEv();\n h = 0;\n MultiStore16(h, p, 0x1000);\n\n v1 = (s32)func_020adc74(&data_ov006_0213f280);\n DecompressLZ16((void*)v1, _ZN3G2S12GetBG0ScrPtrEv());\n func_ov004_020adc5c((void*)v1);\n\n v2 = (s32)func_020adc74(&data_ov006_0213f2a0);\n _ZN4CP1527FlushAndInvalidateDataCacheEjj((u32)v2, 0x20);\n _ZN3GXS10LoadBGPlttEPKvjj((void*)(v2 + 2), 2, 0x1e);\n func_ov004_020adc5c((void*)v2);\n\n *(u16*)0x0400000c = (u16)((*(u16*)0x0400000c & 0x43) | 0x1410);\n *(u16*)0x0400000c &= ~0x40;\n *(s32*)0x04000018 = 0;\n *(u16*)0x0400000c = (u16)((*(u16*)0x0400000c & ~3) | 1);\n\n *(u16*)0x0400100c = (u16)((*(u16*)0x0400100c & 0x43) | 0x1410);\n *(u16*)0x0400100c &= ~0x40;\n *(s32*)0x04001018 = 0;\n *(u16*)0x0400100c = (u16)((*(u16*)0x0400100c & ~3) | 1);\n\n *(u16*)0x0400000e = (u16)((*(u16*)0x0400000e & 0x43) | 0x1618);\n *(u16*)0x0400000e &= ~0x40;\n *(s32*)0x0400001c = 0;\n *(u16*)0x0400000e = (u16)((*(u16*)0x0400000e & ~3) | 2);\n\n *(u16*)0x0400100e = (u16)((*(u16*)0x0400100e & 0x43) | 0x1618);\n *(u16*)0x0400100e &= ~0x40;\n *(s32*)0x0400101c = 0;\n *(u16*)0x0400100e = (u16)((*(u16*)0x0400100e & ~3) | 2);\n\n if ((u8)*(s32*)(c + 8) == 0) {\n v3 = (s32)func_020adc74(&data_ov006_0213f2bc);\n DecompressLZ16((void*)v3, _ZN2G213GetBG2CharPtrEv());\n func_ov004_020adc5c((void*)v3);\n\n v4 = (s32)func_020adc74(&data_ov006_0213f2ec);\n DecompressLZ16((void*)v4, (void*)func_02054de8());\n func_ov004_020adc5c((void*)v4);\n\n v5 = (s32)func_020adc74(&data_ov006_0213f31c);\n DecompressLZ16((void*)v5, (void*)func_02054d88());\n func_ov004_020adc5c((void*)v5);\n\n v6 = (s32)func_020adc74(&data_ov006_0213f348);\n DecompressLZ16((void*)v6, _ZN3G2S13GetBG3CharPtrEv());\n func_ov004_020adc5c((void*)v6);\n } else {\n v3 = (s32)func_020adc74(&data_ov006_0213f374);\n DecompressLZ16((void*)v3, _ZN2G213GetBG2CharPtrEv());\n func_ov004_020adc5c((void*)v3);\n\n v4 = (s32)func_020adc74(&data_ov006_0213f3a4);\n DecompressLZ16((void*)v4, (void*)func_02054de8());\n func_ov004_020adc5c((void*)v4);\n\n v5 = (s32)func_020adc74(&data_ov006_0213f3d4);\n DecompressLZ16((void*)v5, (void*)func_02054d88());\n func_ov004_020adc5c((void*)v5);\n\n v6 = (s32)func_020adc74(&data_ov006_0213f400);\n DecompressLZ16((void*)v6, _ZN3G2S13GetBG3CharPtrEv());\n func_ov004_020adc5c((void*)v6);\n }\n\n if ((u8)*(s32*)(c + 8) == 0) {\n v3 = (s32)func_020adc74(&data_ov006_0213f42c);\n _ZN4CP1527FlushAndInvalidateDataCacheEjj((u32)v3, 0x1a0);\n _ZN2GX10LoadBGPlttEPKvjj((void*)v3, 0x60, 0x1a0);\n func_ov004_020adc5c((void*)v3);\n\n v4 = (s32)func_020adc74(&data_ov006_0213f458);\n _ZN4CP1527FlushAndInvalidateDataCacheEjj((u32)v4, 0x1a0);\n _ZN3GXS10LoadBGPlttEPKvjj((void*)v4, 0x60, 0x1a0);\n func_ov004_020adc5c((void*)v4);\n } else {\n v3 = (s32)func_020adc74(&data_ov006_0213f484);\n _ZN4CP1527FlushAndInvalidateDataCacheEjj((u32)v3, 0x1a0);\n _ZN2GX10LoadBGPlttEPKvjj((void*)v3, 0x60, 0x1a0);\n func_ov004_020adc5c((void*)v3);\n\n v4 = (s32)func_020adc74(&data_ov006_0213f4b0);\n _ZN4CP1527FlushAndInvalidateDataCacheEjj((u32)v4, 0x1a0);\n _ZN3GXS10LoadBGPlttEPKvjj((void*)v4, 0x60, 0x1a0);\n func_ov004_020adc5c((void*)v4);\n }\n\n data_0209d45c &= ~1;\n data_0209d454 |= 0xd;\n data_0209d45c |= 0xc;\n\n v7 = (s32)func_020adc74(&data_ov006_0213f4dc);\n _ZN4CP1527FlushAndInvalidateDataCacheEjj((u32)v7, 0x100);\n _ZN2GX11LoadOBJPlttEPKvjj((void*)v7, 0, 0x100);\n _ZN3GXS11LoadOBJPlttEPKvjj((void*)v7, 0, 0x100);\n func_ov004_020adc5c((void*)v7);\n\n for (i = 0; i < 0xd; i++)\n ((s32*)(c + 0x4688))[i] = 0;\n for (i = 0; i < 0x19; i++)\n ((s32*)(c + 0x46bc))[i] = 0;\n for (i = 0; i < 8; i++)\n ((s32*)(c + 0x4720))[i] = 0;\n for (i = 0; i < 3; i++)\n ((s32*)(c + 0x4740))[i] = 0;\n for (i = 0; i < 6; i++)\n ((s32*)(c + 0x474c))[i] = 0;\n for (i = 0; i < 3; i++)\n ((s32*)(c + 0x4764))[i] = 0;\n for (i = 0; i < 2; i++)\n ((s32*)(c + 0x4770))[i] = 0;\n\n {\n volatile s32 spArr[2];\n spArr[0] = 0xec000;\n spArr[1] = 0xa0000;\n newObj = _Znwj(0x48);\n if (newObj != 0) {\n s32 spArr2[2];\n spArr2[0] = spArr[0];\n spArr2[1] = spArr[1];\n newObj = (void*)func_ov006_0211157c(newObj, arg0, 0, (s32*)spArr2);\n }\n *(void**)(c + 0x4684) = newObj;\n }\n *(s32*)(c + 0x4778) = 0;\n *(s32*)(c + 0x477c) = 0;\n *(s32*)(c + 0x4780) = 0;\n\n _ZN3G2x13SetBlendAlphaEPVttttt((volatile u16*)0x04000050, 0, 0x18, 4, 0xa);\n _ZN3G2x13SetBlendAlphaEPVttttt((volatile u16*)0x04001050, 0, 0x18, 4, 0xa);\n\n {\n void *o1, *o9;\n u16 hh;\n\n o1 = *(void**)(&data_ov006_021382e0 + 4);\n hh = *(u16*)((char*)o1 + 4);\n *(u32*)o1 = (*(u32*)o1 & ~0xc00) | 0x400;\n *(u16*)((char*)o1 + 4) = (u16)((*(u16*)((char*)o1 + 4) & ~0xf000) | ((((s32)(hh & 0xf000)) >> 12) << 12));\n\n o1 = *(void**)(&data_ov006_021382f8 + 4);\n hh = *(u16*)((char*)o1 + 4);\n *(u32*)o1 = (*(u32*)o1 & ~0xc00) | 0x400;\n *(u16*)((char*)o1 + 4) = (u16)((*(u16*)((char*)o1 + 4) & ~0xf000) | ((((s32)(hh & 0xf000)) >> 12) << 12));\n\n o1 = *(void**)(&data_ov006_02137a9c + 8);\n hh = *(u16*)((char*)o1 + 4);\n *(u32*)o1 = (*(u32*)o1 & ~0xc00) | 0x400;\n *(u16*)((char*)o1 + 4) = (u16)((*(u16*)((char*)o1 + 4) & ~0xf000) | ((((s32)(hh & 0xf000)) >> 12) << 12));\n\n o1 = *(void**)(&data_ov006_02138a08 + 4);\n hh = *(u16*)((char*)o1 + 4);\n *(u32*)o1 = (*(u32*)o1 & ~0xc00) | 0x400;\n *(u16*)((char*)o1 + 4) = (u16)((*(u16*)((char*)o1 + 4) & ~0xf000) | ((((s32)(hh & 0xf000)) >> 12) << 12));\n\n o1 = *(void**)(&data_ov006_0213765c + 4);\n hh = *(u16*)((char*)o1 + 4);\n *(u32*)o1 = (*(u32*)o1 & ~0xc00) | 0x400;\n *(u16*)((char*)o1 + 4) = (u16)((*(u16*)((char*)o1 + 4) & ~0xf000) | ((((s32)(hh & 0xf000)) >> 12) << 12));\n\n o1 = *(void**)(&data_ov006_02137674 + 4);\n hh = *(u16*)((char*)o1 + 4);\n *(u32*)o1 = (*(u32*)o1 & ~0xc00) | 0x400;\n *(u16*)((char*)o1 + 4) = (u16)((*(u16*)((char*)o1 + 4) & ~0xf000) | ((((s32)(hh & 0xf000)) >> 12) << 12));\n\n o1 = *(void**)(&data_ov006_02138a20 + 4);\n hh = *(u16*)((char*)o1 + 4);\n *(u32*)o1 = (*(u32*)o1 & ~0xc00) | 0x400;\n *(u16*)((char*)o1 + 4) = (u16)((*(u16*)((char*)o1 + 4) & ~0xf000) | ((((s32)(hh & 0xf000)) >> 12) << 12));\n\n o1 = *(void**)(&data_ov006_02138a38 + 4);\n hh = *(u16*)((char*)o1 + 4);\n *(u32*)o1 = (*(u32*)o1 & ~0xc00) | 0x400;\n *(u16*)((char*)o1 + 4) = (u16)((*(u16*)((char*)o1 + 4) & ~0xf000) | ((((s32)(hh & 0xf000)) >> 12) << 12));\n\n o9 = *(void**)(&data_ov006_02137630 + 8);\n hh = *(u16*)((char*)o9 + 4);\n *(u32*)o9 = (*(u32*)o9 & ~0xc00) | 0x400;\n *(u16*)((char*)o9 + 4) = (u16)((*(u16*)((char*)o9 + 4) & ~0xf000) | ((((s32)(hh & 0xf000)) >> 12) << 12));\n\n hh = *(u16*)((char*)o9 + 4);\n *(u32*)((char*)o9 + 8) = (*(u32*)((char*)o9 + 8) & ~0xc00) | 0x400;\n *(u16*)((char*)o9 + 12) = (u16)((*(u16*)((char*)o9 + 12) & ~0xf000) | ((((s32)(hh & 0xf000)) >> 12) << 12));\n\n o1 = *(void**)(&data_ov006_02137684 + 4);\n hh = *(u16*)((char*)o1 + 4);\n *(u32*)o1 = (*(u32*)o1 & ~0xc00) | 0x400;\n *(u16*)((char*)o1 + 4) = (u16)((*(u16*)((char*)o1 + 4) & ~0xf000) | ((((s32)(hh & 0xf000)) >> 12) << 12));\n\n o1 = *(void**)(&data_ov006_02137994 + 4);\n hh = *(u16*)((char*)o1 + 4);\n *(u32*)o1 = (*(u32*)o1 & ~0xc00) | 0x400;\n *(u16*)((char*)o1 + 4) = (u16)((*(u16*)((char*)o1 + 4) & ~0xf000) | ((((s32)(hh & 0xf000)) >> 12) << 12));\n }\n\n func_ov006_02115b0c(arg0);\n return 1;\n}\n", "source": "fanout-sonnet"} {"module": "ov006", "addr": "0x020e20bc", "name": "func_ov006_020e20bc", "size": 1504, "target_hex": "f04f2de94cd04de201a0a0e12c10a0e39a0105e00060a0e1ac059fe5052086e0a8159fe50680a0e1007082e0014082e00090a0e3010988e28916d0e5000051e35a01000a09005ae15801000a8816d0e5000051e35501000a030051e35301000a642690e5001094e5600690e5011042e04126a0e1920201e0002097e5020040e04026a0e1921220e0c01fa0e17d6dfdeb180050e3450100ca2c00a0e3990004e024059fe524159fe5003086e0050086e0012086e0010980e2648690e5040092e7042082e0057093e7041093e7000048e0011047e0047083e0053083e010708de514308de518208de5cc64fdebe0149fe5e0249fe5019086e0b53099e1b41099e1047086e04332a0e183a0a0e14112a0e18110a0e101808ae2013081e288b0a0e18a80a0e181a0a0e1051089e004108de5041089e0022086e00c108de5051082e0059092e790249fe58330a0e108108de5017987e20008a0e12008a0e1000060e20008a0e1fbb092e1f88092e1f33092e1fa2092e19bc9cae0021ba0e398b9c9e001c09ce00080aae22ca6a0e101b09be008aa8ae1687697e50080a9e22be6a0e108ea8ee19397c8e0019099e029c6a0e10080a8e29277c3e0012097e00010a3e22236a0e1013a93e12008a0e14012a0e1000060e20008a0e12008a0e14002a0e18110a0e18070a0e18100a0e1011081e208ca8ce1e0939fe58180a0e1f01099e1f80099e18780a0e1017087e28770a0e1f88099e1f77099e1022ba0e3c89fa0e12c908de590bac9e0ce30a00102b09be044908de50090a9e22bb6a0e140908de509ba8be191aac9e028908de5c79fa0e124a08de530908de5919ecae0029099e000a0aae22996a0e10a9a89e109904be020908de524909de528a09de5029099e000a0aae22996a0e10a9a89e190aecbe002a09ae000b0abe22aa6a0e10baa8ae10aa089e0909ccbe0029099e000b0abe22996a0e10b9a89e191cccbe038b08de534c08de591c3cbe09013cee002309ce00000abe22336a0e1003a83e1030049e09790c3e002b099e00090a3e22b36a0e1093a83e198b0c9e0980acce0020090e000c0ace22006a0e10c0a80e1000043e01c008de502009be00030a9e22006a0e1030a80e1979ac3e0029099e00030a3e22996a0e1039a89e1099080e034009de502a090e038009de50030a0e22a06a0e1030a80e1023091e00010aee22336a0e1013a83e103b080e020309de51c109de597a3c3e002a09ae00030a3e22aa6a0e103aa8ae120309de50900a0e198e3c3e03c308de5983bcce0023093e000c0ace22336a0e10c3a83e103304ae000308de53c309de502c09ee000a0a3e22c36a0e10a3a83e197bbcae002b09be00020aae22ba6a0e102aa8ae10aa083e00f64fdeb04109de51c209de5b000c1e19909c1e09202e1e0a36cfdeb08109de50020a0e3000081e510009de5bc119fe500b090e51b0aa0e3979083e0973223e030709de501c086e0973023e0021ba0e3017099e00030a3e22776a0e1037a87e107308be005308ce718309de580e19fe5009093e5987083e0983223e02c209de5011097e0923023e00000a3e22116a0e1001a81e10eb086e0010089e005008be705309ce705009be74316a0e14006a0e10c2051e20900005a10109de5002091e5031943e2017082e010209de5053086e0007082e5012983e20339a0e3603682e50c1081e2010c51e30a0000dafc209fe510109de5027086e0003091e5051097e73d29a0e33d1941e2013083e010109de5003081e5052087e70c1040e2df00e0e3000051e10b0000aac4009fe53519a0e3007086e018009de5052097e7003090e5350982e2002083e018009de5002080e5000061e2050087e700109de50a00a0e1b763fdeb0c109de58c309fe5b000c1e19a0ac1e000209de5037086e09202e1e0496cfdeb052086e0040087e7010982e20120a0e3041086e08826c0e5010981e28826c0e5041097e70e0b51e38b26c0a50010a0b38b16c0b514009de5001090e5e800a0e32dc0fceb4cd08de2f04fbde81eff2fe1019089e2050059e32c8088e29cfeffba4cd08de2f04fbde81eff2fe16046000064460000864600006846000014220802", "lang": "c", "divergences": 432, "c_source": "typedef int s32;\ntypedef unsigned int u32;\ntypedef short s16;\ntypedef unsigned short u16;\ntypedef unsigned char u8;\ntypedef long long s64;\ntypedef unsigned long long u64;\n\nextern s16 data_02082214[];\nextern int _ZN4cstd4sqrtEy(u64 v);\nextern s16 _ZN4cstd5atan2E5Fix12IiES1_(s32 y, s32 x);\nextern void func_02012718(void *a, int b);\n\n#define FXMUL(a,b) ((s32)((((s64)(a)) * (b) + 0x800) >> 12))\n\nvoid func_ov006_020e20bc(char *self, int idx)\n{\n s32 selfOff = idx * 0x2c;\n s32 *selfXp = (s32*)(self + selfOff + 0x4660);\n s32 *selfZp = (s32*)(self + selfOff + 0x4664);\n char *p = self;\n int i;\n\n for (i = 0; i < 5; i++, p += 0x2c) {\n char *q = p + 0x4000;\n if (*(u8*)(q + 0x689) != 0 && idx != i &&\n *(u8*)(q + 0x688) != 0 && *(u8*)(q + 0x688) != 3) {\n s32 dz = (*(s32*)(q + 0x664) - *selfZp) >> 12;\n s32 dx = (*(s32*)(q + 0x660) - *selfXp) >> 12;\n s32 distSq = dx * dx + dz * dz;\n if (_ZN4cstd4sqrtEy((u64)(s64)distSq) <= 0x18) {\n s32 candOff = i * 0x2c;\n s32 *candX = (s32*)(self + 0x4660 + candOff);\n s32 *candZ = (s32*)(self + 0x4664 + candOff);\n\n s16 newAngle = _ZN4cstd5atan2E5Fix12IiES1_(*selfZp - *candZ, *selfXp - *candX);\n\n s16 *selfAngleP = (s16*)(self + selfOff + 0x4686);\n s16 *candAngleP = (s16*)(self + 0x4686 + candOff);\n s32 *selfDistP = (s32*)(self + selfOff + 0x4668);\n\n int A = ((u16)*selfAngleP >> 4) * 2;\n int B = ((u16)*candAngleP >> 4) * 2;\n\n s32 sinSelf = data_02082214[A + 1];\n s32 cosSelf = data_02082214[A];\n s32 sinCand = data_02082214[B + 1];\n s32 cosCand = data_02082214[B];\n\n s32 selfDist = *selfDistP;\n s32 candDist = *(s32*)(self + 0x4668 + candOff);\n\n s32 V1 = FXMUL(sinSelf, selfDist);\n s32 V2 = FXMUL(cosSelf, selfDist);\n s32 V3 = FXMUL(sinCand, candDist);\n s32 V4 = FXMUL(cosCand, candDist);\n if (V4 == 0) V4 = V2 >> 1;\n\n {\n u16 negA = -(u16)newAngle;\n u16 posA = -negA;\n int C = ((u16)negA >> 4) * 2;\n int E = ((u16)posA >> 4) * 2;\n s32 cosNegA = data_02082214[C];\n s32 sinNegA = data_02082214[C + 1];\n s32 cosPosA = data_02082214[E];\n s32 sinPosA = data_02082214[E + 1];\n\n s32 RESULT_A = FXMUL(sinNegA, V1) - FXMUL(cosNegA, V2);\n s32 RESULT_B = FXMUL(cosNegA, V1) + FXMUL(sinNegA, V2);\n s32 RESULT_C = FXMUL(sinNegA, V3) - FXMUL(cosNegA, V4);\n s32 RESULT_D = FXMUL(sinPosA, RESULT_C) - FXMUL(cosPosA, RESULT_B);\n s32 RESULT_E = FXMUL(cosPosA, RESULT_C) + FXMUL(sinPosA, RESULT_B);\n s32 RESULT_F = FXMUL(cosNegA, V3) + FXMUL(sinNegA, V4);\n s32 RESULT_G = FXMUL(sinPosA, RESULT_A) - FXMUL(cosPosA, RESULT_F);\n s32 RESULT_H = FXMUL(cosPosA, RESULT_A) + FXMUL(sinPosA, RESULT_F);\n\n *selfAngleP = _ZN4cstd5atan2E5Fix12IiES1_(RESULT_E, RESULT_D);\n *selfDistP = _ZN4cstd4sqrtEy((u64)((s64)RESULT_E * RESULT_E + (s64)RESULT_D * RESULT_D));\n\n *selfXp = *candX + FXMUL(sinPosA, 0x1b000);\n *selfZp = *candZ + FXMUL(cosPosA, 0x1b000);\n\n {\n s32 x12 = *selfXp >> 12;\n s32 v1 = x12 - 0xc;\n if (v1 < 0) {\n s32 delta = *selfXp - 0xc000;\n *candX = *candX + delta;\n *selfXp = 0xc000;\n v1 = delta;\n }\n if (v1 + 0xc > 0x100) {\n *candX = *candX + (*selfXp - 0xf4000);\n *selfXp = 0xf4000;\n }\n {\n s32 z12 = *selfZp >> 12;\n if (z12 - 0xc < -0xe0) {\n *candZ = *candZ + (*selfZp + 0xd4000);\n *selfZp = -0xd4000;\n }\n }\n }\n\n *candAngleP = _ZN4cstd5atan2E5Fix12IiES1_(RESULT_H, RESULT_G);\n *(s32*)(self + 0x4668 + candOff) = _ZN4cstd4sqrtEy((u64)((s64)RESULT_H * RESULT_H + (s64)RESULT_G * RESULT_G));\n\n *(u8*)(self + selfOff + 0x4688) = 1;\n *(u8*)(self + 0x4688 + candOff) = 1;\n if (*(s32*)(self + 0x4668 + candOff) >= 0x3800)\n *(u8*)(self + 0x468b + candOff) = 1;\n else\n *(u8*)(self + 0x468b + candOff) = 0;\n\n func_02012718((void*)0xe8, *selfXp);\n return;\n }\n }\n }\n }\n}\n", "source": "fanout-sonnet"} {"module": "ov002", "addr": "0x020e5948", "name": "func_ov002_020e5948", "size": 2536, "target_hex": "f04f2de904d04de200a0a0e148089fe5fbc7fceb44089fe5f9c7fceb40089fe5f7c7fceb3c089fe5f5c7fceb38089fe5f3c7fceb34089fe5f1c7fceb30089fe5efc7fcebd816dae528089fe5d10090e1000050e30500000a000600eb18089fe500108ae00000d1e5010080e30000c1e5d906dae508109ae5010050e11d00000a000051e30400000a010051e30a00000a020051e31000000a160000eadc079fe513c8fcebd0079fe500108ae00000d1e5020080e30000c1e50e0000eac0079fe50bc8fcebb0079fe500108ae00000d1e5040080e30000c1e5060000eaa4079fe503c8fceb90079fe500108ae00000d1e5080080e30000c1e58c079fe5a6c7fceb88079fe5a4c7fceb84079fe5a2c7fceb80079fe5a0c7fceb7c079fe59ec7fceb78079fe59cc7fceb74079fe59ac7fceb70079fe598c7fceb6c079fe596c7fceb68079fe594c7fceb64079fe592c7fceb60079fe590c7fceb5c079fe58ec7fceb58079fe58cc7fceb54079fe58ac7fceb50079fe588c7fceb4c079fe586c7fceb48079fe584c7fceb44079fe582c7fceb40079fe580c7fceb3c079fe57ec7fceb38079fe57cc7fceb34079fe57ac7fceb30079fe578c7fceb2c079fe576c7fceb28079fe574c7fceb24079fe50000d0e5010050e30100a0030000a013000050e35f00001a0c079fe585c7fceb08079fe5bfc7fceb04079fe5bdc7fceb00079fe57fc7fcebfc069fe563c7fcebf8069fe561c7fcebf4069fe55fc7fcebf0069fe55dc7fcebec069fe55bc7fcebe8069fe559c7fcebe4069fe557c7fcebe0069fe555c7fcebdc069fe553c7fcebd8069fe551c7fcebd4069fe54fc7fcebd0069fe54dc7fcebcc069fe54bc7fcebc8069fe549c7fcebc4069fe547c7fcebc0069fe545c7fcebbc069fe543c7fcebb8069fe541c7fcebb4069fe53fc7fcebb0069fe53dc7fcebac069fe53bc7fceba8069fe539c7fceba4069fe537c7fceba0069fe535c7fceb9c069fe533c7fceb98069fe531c7fceb94069fe52fc7fceb90069fe52dc7fceb8c069fe52bc7fceb88069fe529c7fceb84069fe527c7fceb80069fe525c7fceb7c069fe523c7fceb78069fe521c7fceb74069fe51fc7fceb70069fe51dc7fceb6c069fe51bc7fceb68069fe519c7fceb64069fe517c7fceb60069fe515c7fceb5c069fe513c7fceb58069fe511c7fceb54069fe50fc7fceb50069fe50dc7fceb88059fe50000d0e5010050e30100a0030000a013000050e30000a0033c068a050300000a4410a0e30a00a0e13c168ae5d263ffeb3c169ae514069fe5010190e716c7fceb0090a0e308769fe500b69fe50950a0e10160a0e3014aa0e37880a0e30800a0e1b35bfdeb000050e30000000a9fc1fceb09118ae0dc0081e5090197e742c7fceb09218ae00010a0e1dc0092e50620a0e10630a0e1a2c4fceb00508de509018ae0dc0090e5c41089e201119be70520a0e1041091e50430a0e155c1fceb09018ae0dc0090e58d0300eb09118ae07c0281e5019089e2040059e3dfffffba0a00a0e17a0200eb0090a0e368b59fe50960a0e16480a0e35040a0e30170a0e3015aa0e3030059e31700001a0800a0e1885bfdeb000050e30000000ae2c2fceb09118ae0540181e509019be717c7fceb0010a0e109018ae0540190e50720a0e10730a0e177c4fcebbc139fe500608de509018ae0540190e5041091e50620a0e10530a0e14cc2fceb0e0000ea0400a0e1705bfdeb000050e30000000acac3fceb09118ae0540181e509019be7ffc6fceb0010a0e109018ae0540190e50720a0e10730a0e15fc4fceb09018ae0540190e5530300eb09118ae0019089e28c0281e5040059e3ceffffba90549fe50080a0e30140a0e35060a0e30600a0e1555bfdeb000050e30000000aafc3fceb047088e207118ae0540181e5080195e7e3c6fceb07218ae00010a0e1540192e50420a0e10430a0e143c4fceb07018ae0540190e5370300eb07118ae0018088e28c0281e5040058e3e7ffffba50039fe50000d0e5010050e30100a0030000a013000050e34b00001a5000a0e3365bfdeb000050e30000000a90c3fcebd8018ae5f0039fe5c6c6fceb0010a0e1d8019ae50120a0e30030e0e327c4fcebd8039fe5d000d0e1020050e34800000a050050e34600000a040050e34400000a68129fe57800a0e301208ae00010d2e5201081e30010c2e51c5bfdeb000050e30000000a08c1fcebec008ae590039fe5acc6fceb0010a0e1ec009ae50120a0e30030e0e30dc4fceb0020a0e300208de554139fe5ec009ae5181391e5013aa0e3041091e5c1c0fceb58039fe59dc6fceb0010a0e1f0008ae20120a0e30230a0e1fec3fceb0020a0e300208de5f0008ae254129fe5013aa0e3041091e5d4c1fceb24039fe58fc6fceb0010a0e15d0f8ae20120a0e30230a0e1f0c3fceb0020a0e300208de55d0f8ae298119fe5013aa0e3041091e5c6c1fceb0d0000eae8029fe580c6fceb0120a0e30010a0e10230a0e15d0f8ae2e1c3fceb0020a0e364019fe500208de5041090e55d0f8ae2013aa0e3b7c1fcebab0f8ae292bffceb0a00a0e10310a0e30020a0e31163ffeb00018ae0dc0090e5d826dae50c1090e5a4019fe5201091e50090a0e3821081e01c168ae50000d0e5010050e30100a0030900a011000050e31190a013190059e31c0000aa0971a0e10040a0e301baa0e30480a0e1776f8ae244029fe5081087e0015190e71c029fe5041095e5080190e7040090e520befceb180059e30500001a00408de5041095e50600a0e10420a0e10b30a0e124befceb018088e2040058e3146086e2ebffffba019089e2190059e3047087e2e5ffffbae8019fe5f0109fe5040090e5041091e50bbefceb0020a0e3dc009fe500208de5041090e5950f8ae2013aa0e310befcebbc019fe5c4109fe5040090e5041091e5ffbdfceb0020a0e39a0f8ae200208de5a8109fe5013aa0e3041091e504befceb04d08de2f04fbde81eff2fe198e71002f0e41002d8e31002c0e6100298eb100288eb1002c0e4100210f309021807000040da1002a0d91002c0d9100200e51002c8e1100270e7100230e2100288e2100278e41002d0e9100210ea100238e51002c8ea100298e81002e8e91002a8eb100270eb1002f0ea100240e6100270e6100280e6100238e41002b0e31002c8e3100208e4100200e41002b8ec1002d0e81002d8eb1002d8f2090250e71002a8d91002a40a110288e51002e8e7100250e4100288e71002e8e11002e0e11002d0e41002e8e41002d0e1100200e81002b8e4100270e2100258e4100270ea100240e51002e8e81002a8ec100298ec100200e6100288ea100210e9100260e41002f0e2100258e9100238eb100260e6100230ea1002e8e3100290eb1002b8e6100220e61002a0e6100258eb1002e0e3100210eb100208e71002c8eb1002e0e6100230e4100240ec100238e7100250e2100210ec100200ec100228e7100280f40f028ca610029ca61002aca6100238da1002f8f2090280e71002f8e61002b0e71002f0f20f02b8eb100220eb1002", "lang": "c", "divergences": 523, "c_source": "typedef unsigned char u8;\ntypedef signed char s8;\ntypedef unsigned short u16;\ntypedef short s16;\ntypedef unsigned int u32;\ntypedef int s32;\ntypedef s32 Fix12;\n\nextern void _ZN9Animation8LoadFileER13SharedFilePtr(void* sfp);\nextern void* _ZN5Model8LoadFileER13SharedFilePtr(void* sfp);\nextern void _ZN15TextureSequence8LoadFileER13SharedFilePtr(void* sfp);\nextern void LoadSilverStarAndNumber(void);\nextern int _ZN9ModelBase7SetFileEP8BMD_Fileii(void* thiz, void* bmd, s32 a, s32 b);\nextern void func_ov002_020bec2c(void* p);\nextern void* _Znwj(u32 sz);\nextern void* _ZN10ModelAnim2C1Ev(void* thiz);\nextern void _ZN10ModelAnim213Func_020162C4Eji5Fix12IiEt(void* thiz, u32 a, s32 b, Fix12 c, u16 d);\nextern s32 func_ov002_020e6bb0(void* p);\nextern void func_ov002_020e6780(void* p);\nextern void* _ZN9ModelAnimC1Ev(void* thiz);\nextern void _ZN9ModelAnim7SetAnimEP8BCA_Filei5Fix12IiEj(void* thiz, void* f, s32 i, Fix12 fx, u32 j);\nextern void* _ZN5ModelC1Ev(void* thiz);\nextern void _ZN11ShadowModel12InitCylinderEv(void* thiz);\nextern s32 _ZNK6Player14GetBodyModelIDEjb(void* thiz, u32 a, s32 b);\nextern void _ZN15TextureSequence7PrepareER8BMD_FileR8BTP_File(void* bmd, void* btp);\nextern void _ZN15TextureSequence7SetFileER8BTP_Filei5Fix12IiEj(void* thiz, void* f, s32 i, Fix12 fx, u32 j);\n\nextern s8 data_0209f310[];\nextern u8 data_0209f2d8;\nextern s8 data_0209f2f8;\n\nextern int data_ov002_0210e798[];\nextern int data_ov002_0210e4f0[];\nextern int data_ov002_0210e3d8[];\nextern int data_ov002_0210e6c0[];\nextern int data_ov002_0210eb98[];\nextern int data_ov002_0210eb88[];\nextern int data_ov002_0210e4c0[];\nextern int data_ov002_0210da40[];\nextern int data_ov002_0210d9a0[];\nextern int data_ov002_0210d9c0[];\nextern int data_ov002_0210e500[];\nextern int data_ov002_0210e1c8[];\nextern int data_ov002_0210e770[];\nextern int data_ov002_0210e230[];\nextern int data_ov002_0210e288[];\nextern int data_ov002_0210e478[];\nextern int data_ov002_0210e9d0[];\nextern int data_ov002_0210ea10[];\nextern int data_ov002_0210e538[];\nextern int data_ov002_0210eac8[];\nextern int data_ov002_0210e898[];\nextern int data_ov002_0210e9e8[];\nextern int data_ov002_0210eba8[];\nextern int data_ov002_0210eb70[];\nextern int data_ov002_0210eaf0[];\nextern int data_ov002_0210e640[];\nextern int data_ov002_0210e670[];\nextern int data_ov002_0210e680[];\nextern int data_ov002_0210e438[];\nextern int data_ov002_0210e3b0[];\nextern int data_ov002_0210e3c8[];\nextern int data_ov002_0210e408[];\nextern int data_ov002_0210e400[];\nextern int data_ov002_0210ecb8[];\nextern int data_ov002_0210e8d0[];\nextern int data_ov002_0210ebd8[];\nextern int data_ov002_0210e750[];\nextern int data_ov002_0210d9a8[];\nextern int data_ov002_02110aa4[];\nextern int data_ov002_0210e588[];\nextern int data_ov002_0210e7e8[];\nextern int data_ov002_0210e450[];\nextern int data_ov002_0210e788[];\nextern int data_ov002_0210e1e8[];\nextern int data_ov002_0210e1e0[];\nextern int data_ov002_0210e4d0[];\nextern int data_ov002_0210e4e8[];\nextern int data_ov002_0210e1d0[];\nextern int data_ov002_0210e800[];\nextern int data_ov002_0210e4b8[];\nextern int data_ov002_0210e270[];\nextern int data_ov002_0210e458[];\nextern int data_ov002_0210ea70[];\nextern int data_ov002_0210e540[];\nextern int data_ov002_0210e8e8[];\nextern int data_ov002_0210eca8[];\nextern int data_ov002_0210ec98[];\nextern int data_ov002_0210e600[];\nextern int data_ov002_0210ea88[];\nextern int data_ov002_0210e910[];\nextern int data_ov002_0210e460[];\nextern int data_ov002_0210e2f0[];\nextern int data_ov002_0210e958[];\nextern int data_ov002_0210eb38[];\nextern int data_ov002_0210e660[];\nextern int data_ov002_0210ea30[];\nextern int data_ov002_0210e3e8[];\nextern int data_ov002_0210eb90[];\nextern int data_ov002_0210e6b8[];\nextern int data_ov002_0210e620[];\nextern int data_ov002_0210e6a0[];\nextern int data_ov002_0210eb58[];\nextern int data_ov002_0210e3e0[];\nextern int data_ov002_0210eb10[];\nextern int data_ov002_0210e708[];\nextern int data_ov002_0210ebc8[];\nextern int data_ov002_0210e6e0[];\nextern int data_ov002_0210e430[];\nextern int data_ov002_0210ec40[];\nextern int data_ov002_0210e738[];\nextern int data_ov002_0210e250[];\nextern int data_ov002_0210ec10[];\nextern int data_ov002_0210ec00[];\nextern int data_ov002_0210e728[];\n\nextern void* data_ov002_020ff480[];\nextern void* data_ov002_0210a68c[];\nextern void* data_ov002_0210a69c[];\nextern void* data_ov002_0210a6ac[];\nextern void* data_ov002_020ff2f0[];\n\nextern int data_ov002_0210da38[];\nextern int data_ov002_0210e780[];\nextern int data_ov002_0210e6f8[];\nextern int data_ov002_0210e7b0[];\nextern int data_ov002_0210ebb8[];\nextern int data_ov002_0210eb20[];\n\nvoid func_ov002_020e5948(void* arg0)\n{\n char* c = (char*)arg0;\n s32 i;\n s32 j;\n s32 n;\n s32 k;\n s32 bodyId;\n void* ma;\n void* t;\n s32 t2;\n void* p;\n void* texseq;\n void* entry;\n\n _ZN9Animation8LoadFileER13SharedFilePtr(data_ov002_0210e798);\n _ZN9Animation8LoadFileER13SharedFilePtr(data_ov002_0210e4f0);\n _ZN9Animation8LoadFileER13SharedFilePtr(data_ov002_0210e3d8);\n _ZN9Animation8LoadFileER13SharedFilePtr(data_ov002_0210e6c0);\n _ZN9Animation8LoadFileER13SharedFilePtr(data_ov002_0210eb98);\n _ZN9Animation8LoadFileER13SharedFilePtr(data_ov002_0210eb88);\n _ZN9Animation8LoadFileER13SharedFilePtr(data_ov002_0210e4c0);\n\n if (data_0209f310[*(u8*)(c + 0x6D8)] != 0) {\n LoadSilverStarAndNumber();\n *(u8*)(((long long)(int)(c + 0x718)) & 0xFFFFFFFFFFFFFFFFLL) |= 1;\n }\n\n if (*(u8*)(c + 0x6D9) != *(s32*)(c + 8)) {\n switch (*(s32*)(c + 8)) {\n case 0:\n _ZN5Model8LoadFileER13SharedFilePtr(data_ov002_0210da40);\n *(u8*)(((long long)(int)(c + 0x718)) & 0xFFFFFFFFFFFFFFFFLL) |= 2;\n break;\n case 1:\n _ZN5Model8LoadFileER13SharedFilePtr(data_ov002_0210d9a0);\n *(u8*)(((long long)(int)(c + 0x718)) & 0xFFFFFFFFFFFFFFFFLL) |= 4;\n break;\n case 2:\n _ZN5Model8LoadFileER13SharedFilePtr(data_ov002_0210d9c0);\n *(u8*)(((long long)(int)(c + 0x718)) & 0xFFFFFFFFFFFFFFFFLL) |= 8;\n break;\n }\n }\n\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e500);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e1c8);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e770);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e230);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e288);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e478);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e9d0);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210ea10);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e538);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210eac8);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e898);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e9e8);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210eba8);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210eb70);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210eaf0);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e640);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e670);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e680);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e438);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e3b0);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e3c8);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e408);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e400);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210ecb8);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e8d0);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210ebd8);\n\n {\n s32 mode = (data_0209f2d8 == 1);\n if (!mode) {\n _ZN9Animation8LoadFileER13SharedFilePtr(data_ov002_0210e750);\n _ZN5Model8LoadFileER13SharedFilePtr(data_ov002_0210d9a8);\n _ZN5Model8LoadFileER13SharedFilePtr(data_ov002_02110aa4);\n _ZN9Animation8LoadFileER13SharedFilePtr(data_ov002_0210e588);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e7e8);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e450);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e788);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e1e8);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e1e0);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e4d0);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e4e8);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e1d0);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e800);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e4b8);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e270);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e458);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210ea70);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e540);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e8e8);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210eca8);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210ec98);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e600);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210ea88);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e910);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e460);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e2f0);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e958);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210eb38);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e660);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210ea30);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e3e8);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210eb90);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e6b8);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e620);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e6a0);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210eb58);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e3e0);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210eb10);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e708);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210ebc8);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e6e0);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e430);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210ec40);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e738);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e250);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210ec10);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210ec00);\n _ZN15TextureSequence8LoadFileER13SharedFilePtr(data_ov002_0210e728);\n }\n }\n\n {\n s32 mode = (data_0209f2d8 == 1);\n if (!mode) {\n *(s32*)(c + 0x63C) = 0;\n } else {\n *(s32*)(c + 0x63C) = 0x44;\n func_ov002_020bec2c(c);\n }\n }\n\n _ZN9Animation8LoadFileER13SharedFilePtr(data_ov002_020ff480[*(s32*)(c + 0x63C)]);\n\n i = 0;\n do {\n p = _Znwj(0x78);\n if (p != 0)\n p = _ZN10ModelAnim2C1Ev(p);\n *(void**)(c + 0xDC + i * 4) = p;\n _ZN9ModelBase7SetFileEP8BMD_Fileii(p, _ZN5Model8LoadFileER13SharedFilePtr(data_ov002_0210a68c[i]), 1, 1);\n _ZN10ModelAnim213Func_020162C4Eji5Fix12IiEt(p, ((s32*)data_ov002_020ff480[i + 0xC4])[1], 0, 0x1000, 0);\n *(s32*)(c + 0x27C + i * 4) = func_ov002_020e6bb0(p);\n i++;\n } while (i < 4);\n\n func_ov002_020e6780(c);\n\n i = 0;\n do {\n if (i == 3) {\n p = _Znwj(0x64);\n if (p != 0)\n p = _ZN9ModelAnimC1Ev(p);\n *(void**)(c + 0x154 + i * 4) = p;\n _ZN9ModelBase7SetFileEP8BMD_Fileii(p, _ZN5Model8LoadFileER13SharedFilePtr(data_ov002_0210a69c[i]), 1, 1);\n _ZN9ModelAnim7SetAnimEP8BCA_Filei5Fix12IiEj(p, (void*)data_ov002_0210eb88[1], 0, 0x1000, 0);\n break;\n }\n p = _Znwj(0x50);\n if (p != 0)\n p = _ZN5ModelC1Ev(p);\n *(void**)(c + 0x154 + i * 4) = p;\n _ZN9ModelBase7SetFileEP8BMD_Fileii(p, _ZN5Model8LoadFileER13SharedFilePtr(data_ov002_0210a69c[i]), 1, 1);\n *(s32*)(c + 0x28C + i * 4) = func_ov002_020e6bb0(p);\n i++;\n } while (i < 4);\n\n j = 0;\n do {\n p = _Znwj(0x50);\n if (p != 0)\n p = _ZN5ModelC1Ev(p);\n *(void**)(c + 0x154 + (j + 4) * 4) = p;\n _ZN9ModelBase7SetFileEP8BMD_Fileii(p, _ZN5Model8LoadFileER13SharedFilePtr(data_ov002_0210a6ac[j]), 1, 1);\n *(s32*)(c + 0x28C + (j + 4) * 4) = func_ov002_020e6bb0(p);\n j++;\n } while (j < 4);\n\n if (data_0209f2d8 != 1) {\n p = _Znwj(0x50);\n if (p != 0)\n p = _ZN5ModelC1Ev(p);\n *(void**)(c + 0x1D8) = p;\n _ZN9ModelBase7SetFileEP8BMD_Fileii(p, _ZN5Model8LoadFileER13SharedFilePtr(data_ov002_0210da38), 1, -1);\n\n if (data_0209f2f8 != 2 && data_0209f2f8 != 5 && data_0209f2f8 != 4) {\n *(u8*)(((long long)(int)(c + 0x718)) & 0xFFFFFFFFFFFFFFFFLL) |= 0x20;\n p = _Znwj(0x78);\n if (p != 0)\n p = _ZN10ModelAnim2C1Ev(p);\n *(void**)(c + 0xEC) = p;\n _ZN9ModelBase7SetFileEP8BMD_Fileii(p, _ZN5Model8LoadFileER13SharedFilePtr(data_ov002_0210e780), 1, -1);\n _ZN10ModelAnim213Func_020162C4Eji5Fix12IiEt(p, ((s32*)data_ov002_020ff480[0xC6])[1], 0, 0x1000, 0);\n _ZN9ModelBase7SetFileEP8BMD_Fileii(c + 0xF0, _ZN5Model8LoadFileER13SharedFilePtr(data_ov002_0210e6f8), 1, 1);\n _ZN9ModelAnim7SetAnimEP8BCA_Filei5Fix12IiEj(c + 0xF0, (void*)data_ov002_0210e750[1], 0, 0x1000, 0);\n _ZN9ModelBase7SetFileEP8BMD_Fileii(c + 0x174, _ZN5Model8LoadFileER13SharedFilePtr(data_ov002_0210e7b0), 1, 1);\n _ZN9ModelAnim7SetAnimEP8BCA_Filei5Fix12IiEj(c + 0x174, (void*)data_ov002_0210e4c0[1], 0, 0x1000, 0);\n }\n } else {\n _ZN9ModelBase7SetFileEP8BMD_Fileii(c + 0x174, _ZN5Model8LoadFileER13SharedFilePtr(data_ov002_0210e7b0), 1, 1);\n _ZN9ModelAnim7SetAnimEP8BCA_Filei5Fix12IiEj(c + 0x174, (void*)data_ov002_0210e4c0[1], 0, 0x1000, 0);\n }\n\n _ZN11ShadowModel12InitCylinderEv(c + 0x2AC);\n\n bodyId = _ZNK6Player14GetBodyModelIDEjb(c, 3, 0);\n ma = *(void**)(c + 0xDC + bodyId * 4);\n t = *(void**)((char*)ma + 0xC);\n t2 = *(s32*)((char*)t + 0x20);\n *(s32*)(c + 0x61C) = t2 + (*(u8*)(c + 0x6D8) << 1);\n\n n = 0;\n if (data_0209f2d8 == 1)\n n = 0x11;\n\n texseq = c + 0x1DC;\n if (n < 0x19) {\n do {\n k = 0;\n do {\n entry = data_ov002_020ff2f0[n * 4 + k];\n _ZN15TextureSequence7PrepareER8BMD_FileR8BTP_File((void*)((s32*)data_ov002_0210a69c[k])[1], (void*)((s32*)entry)[1]);\n if (n == 0x18) {\n _ZN15TextureSequence7SetFileER8BTP_Filei5Fix12IiEj(texseq, (void*)((s32*)entry)[1], 0, 0x1000, 0);\n }\n k++;\n texseq = (char*)texseq + 0x14;\n } while (k < 4);\n n++;\n } while (n < 0x19);\n }\n\n _ZN15TextureSequence7PrepareER8BMD_FileR8BTP_File((void*)data_ov002_0210ebb8[1], (void*)data_ov002_0210e8d0[1]);\n _ZN15TextureSequence7SetFileER8BTP_Filei5Fix12IiEj(c + 0x254, (void*)data_ov002_0210e8d0[1], 0, 0x1000, 0);\n _ZN15TextureSequence7PrepareER8BMD_FileR8BTP_File((void*)data_ov002_0210eb20[1], (void*)data_ov002_0210ebd8[1]);\n _ZN15TextureSequence7SetFileER8BTP_Filei5Fix12IiEj(c + 0x268, (void*)data_ov002_0210ebd8[1], 0, 0x1000, 0);\n}\n", "source": "fanout-gpt-5.6-luna"} -{"module": "ov006", "addr": "0x021173c8", "name": "func_ov006_021173c8", "size": 4288, "target_hex": "f04f2de984d04de200a0a0e1050a8ae2980990e50010a0e3e906fceb01098ae2600690e50090a0e3010050e38a02001a050a8ae2981990e5000051e3860200ca640990e51880a0e3000050e3300000da0030e0e36c0d9fe500308de5000090e50820a0e13010a0e36662feeb0930a0e100308de50100a0e304008de58000a0e30810a0e16420a0e308308de5926afeeb8558feeb0030e0e32c2d9fe500308de5000192e79010a0e3540090e50820a0e15462feeb0930a0e100308de50100a0e304008de508308de5052a8ae2642992e5a000a0e30810a0e17f6afeeb0930a0e100308de50100a0e304008de508308de5052a8ae2644992e56420a0e3940202e0e000a0e30810a0e1736afeeb188088e2019089e21400a0e3990005e00070a0e324708de530708de538708de50040e0e33000a0e320008de501b0a0e38000a0e328008de59000a0e32c008de5a000a0e334008de5e000a0e33c008de5050a8ae2600990e5050050e13e0000ba07018ae0050a80e2680990e5000050e3390000da400c9fe500408de5011087e2010190e720109de50820a0e10430a0e11962feeb280c9fe524109de5070190e724309de514008de500108de504b08de508108de528009de514209de50810a0e1426afeeb3558feebf01b9fe500408de5000191e72c109de5540090e50820a0e10430a0e10462feeb30009de507118ae000008de504008de508008de5c40b9fe530309de5000081e010008de510209de534009de5002092e50810a0e12b6afeeb38009de514109de500008de504b08de508008de510009de538309de5002090e53c009de5910202e00810a0e11f6afeeb188088e2145085e2019089e2017087e2040057e3b9ffffba051a8ae27c0991e5000050e3340000da1400a0e3990000e0601991e5000051e12f0000ba0030e0e3340b9fe500308de5000090e50820a0e13010a0e3d461feeb0030a0e300308de50100a0e304008de50810a0e18000a0e34b2fa0e308308de5006afeebf357feeb0030e0e300308de5e02a9fe59010a0e3000192e70820a0e1540090e5c261feeb0030a0e300308de504308de508308de5a000a0e30810a0e1052a8ae27c2992e5ee69feeb0030a0e300308de50100a0e304008de508308de5e000a0e30810a0e1052a8ae27c4992e54b2fa0e3940202e0e269feeb188088e2019089e2051a8ae2840991e5000050e3340000da1400a0e3990000e0601991e5000051e12f0000ba0030e0e3540a9fe500308de5000090e50820a0e13010a0e39b61feeb0030a0e300308de50100a0e304008de5302a9fe50810a0e18000a0e308308de5c769feebba57feeb0030e0e300308de5fc299fe59010a0e3000192e70820a0e1540090e58961feeb0030a0e300308de504308de508308de5a000a0e30810a0e1052a8ae2842992e5b569feeb0030a0e300308de50100a0e304008de508308de5e000a0e30810a0e1052a8ae2844992e5b0299fe5940202e0a969feeb188088e2019089e2051a8ae2800991e5000050e3340000da1400a0e3990000e0601991e5000051e12f0000ba0030e0e378099fe500308de5000090e50820a0e13010a0e36261feeb0030a0e300308de50100a0e304008de50810a0e18000a0e37d2ea0e308308de58e69feeb8157feeb0030e0e300308de518299fe59010a0e3000192e70820a0e1540090e55061feeb0030a0e300308de504308de508308de5a000a0e30810a0e1052a8ae2802992e57c69feeb0030a0e300308de50100a0e304008de508308de5e000a0e30810a0e1052a8ae2804992e57d2ea0e3940202e07069feeb188088e2019089e21400a0e3990000e00c008de53000a0e340008de54000a0e344008de57d0da0e348008de50070a0e30100a0e350008de58000a0e354008de59000a0e358008de5a000a0e360008de5e000a0e374489fe54c708de55c708de564708de50050e0e320b0a0e368008de55c089fe507118ae0000081e01c008de5000090e5000050e3760000da050a8ae2601990e50c009de5000051e1710000ba000057e30400000a010057e31600000a020057e32800000a3a0000ea00508de5040094e50b10a0e10820a0e10530a0e10661feeb00508de5040094e540109de50820a0e10530a0e10061feeb00508de5040094e544109de50820a0e10530a0e1fa60feebcc679fe5260000ea00508de5000094e50b10a0e10820a0e10530a0e1f260feeb00508de5000094e540109de50820a0e10530a0e1ec60feeb00508de5000094e544109de50820a0e10530a0e1e660feeb48609de5120000ea00508de5080094e50b10a0e10820a0e10530a0e1de60feeb00508de5080094e540109de50820a0e10530a0e1d860feeb00508de5080094e544109de50820a0e10530a0e1d260feeb30679fe54c009de54c309de500008de550009de50810a0e104008de54c009de50620a0e108008de554009de5fb68feebee56feebd4169fe500508de5000191e758109de5540090e50820a0e10530a0e1bd60feeb5c009de51c209de500008de504008de508008de560009de5002092e55c309de50810a0e1e868feeb64009de564309de500008de550009de504008de564009de508008de51c009de5001090e568009de5960102e00810a0e1db68feeb0c009de5188088e2140080e20c008de5019089e2017087e2030057e37effffba051a8ae2780991e5000050e3340000da1400a0e3990000e0601991e5000051e12f0000ba0030e0e30c069fe500308de5140090e50820a0e13010a0e38e60feeb0030a0e300308de50100a0e304008de510269fe50810a0e18000a0e308308de5ba68feebad56feeb0030e0e300308de5c8259fe59010a0e3000192e70820a0e1540090e57c60feeb0030a0e300308de504308de508308de5a000a0e30810a0e1052a8ae2782992e5a868feeb0030a0e300308de50100a0e304008de508308de5e000a0e30810a0e1052a8ae2784992e590259fe5940202e09c68feeb188088e2019089e2051a8ae2940991e5000050e3340000da1400a0e3990000e0601991e5000051e12f0000ba0030e0e358059fe500308de5000090e50820a0e13010a0e35560feeb0030a0e300308de50100a0e304008de50810a0e18000a0e37d2ea0e308308de58168feeb7456feeb0030e0e300308de5e4249fe59010a0e3000192e70820a0e1540090e54360feeb0030a0e300308de504308de508308de5a000a0e30810a0e1052a8ae2942992e56f68feeb0030a0e300308de50100a0e304008de508308de5e000a0e30810a0e1052a8ae2944992e57d2ea0e3940202e06368feeb188088e2019089e21400a0e3990001e0050a8ae2600990e5010050e1210000ba08009ae5ff0010e20700001a0030e0e378049fe500308de5000090e50820a0e14010a0e31c60feeb060000ea0030e0e35c049fe500308de5000090e50820a0e14010a0e31460feeb8f57feeb0030a0e30020a0e100308de50100a0e304008de50810a0e1e000a0e308308de53f68feeb050a8ae2601990e5019089e2460f51e3461fa0b3601980b501098ae2600690e5010050e31500001a050a8ae2600990e54b0f50e3110000ba070059e3040000ba0a00a0e18010a0e3a820a0e3e563feeb0a0000ea060059e30400001a0a00a0e1e010a0e3a820a0e3de63feeb030000ea0a00a0e1e010a0e3a020a0e3d963feeb08009ae5ff0010e20300001a050a8ae25c09d0e5000050e30100001a0a00a0e131f3ffeb5c57feeb0610a0e30167feeb7057feebe466feeb0090a0e36c908de570908de574908de57c908de578908de50050e0e34c439fe54c039fe509118ae000b081e000209be5000052e3510000da38039fe5000081e018008de5000090e5020050e33f0000ba6c009de589118ae000008de504008de508008de510039fe50530a0e1007081e008039fe5006081e0000096e5001097e54006a0e1100040e24116a0e1ed67feebdc029fe509118ae0002091e770809de5000052e30400000a0210a0e1910482e0a221b0e1018088e2faffff1ad555feeb00508de56c129fe5002097e5000191e7001096e5540090e54116a0e1881181e0081041e20530a0e14226a0e1a05ffeeb00309be574009de5000053e30400000a0320a0e1921483e0a331b0e1010080e2faffff1a78109de50530a0e100108de504108de508108de5002096e5001097e54226a0e1800182e018209de5080080e2002092e54116a0e1be67feeb0b0000ea7c009de500008de504008de508008de589018ae0010980e2cc1790e5c83790e54116a0e14306a0e10530a0e1b167feeb019089e2050059e3a4ffffba0040a0e3ec719fe5ec519fe50480a0e10290a0e30060e0e304008ae0010980e20408d0e5010050e31200001a04018ae0010980e2142890e50630a0e19512c0e0c000a0e1a21fa0e1000081e084118ae0030050e300808de5011981e20900a0c1582891e554b891e5000197e74b16a0e14226a0e15b5ffeeb014084e2100054e3e4ffffba050a8ae2585990e50000a0e3000055e30b0000da60319fe5a51fa0e19325c4e0044085e04442a0e150319fe5044081e09314c2e0014045e00f0054e30100a0c3030000ea01198ae2841791e5000051e30100a0c308109ae5ff1011e20800001a0020a0e318119fe500208de5000191e71810a0e38f20e0e30030e0e3385ffeeb070000ea0020a0e3f8109fe500208de5000191e71810a0e38f20e0e30030e0e32f5ffeeb050a8ae2585990e50000a0e3000055e30b0000dabc309fe5a51fa0e19325c4e0044085e04442a0e1ac309fe5044081e09314c2e0014045e00f0054e30100a0c3030000ea01198ae2881791e5000051e30100a0c308109ae5ff1011e22100001a0030e0e374109fe500308de5000191e7e810a0e38f20e0e3105ffeeb200000eae08a1302b8ec1302fced1202685900005c761302787a1302b80b00006c7a13020c7a1302885900008813000010270000e0821302d08b1302f48b1302cdcccccc8c470000a0470000cc470000c8470000607a130267666666898888881e000000408a1302888a13020030e0e310101fe500308de5000191e7e810a0e38f20e0e3ee5efeeb01598ae2740695e50040a0e3000050e3090000da04018ae0010980e2400790e5001090e5041091e531ff2fe1740695e5014084e2000054e1f5ffffba01098ae2780790e5000050e30200000a001090e5041091e531ff2fe101598ae2680695e50040a0e3000050e3090000da04018ae0010980e2880690e5001090e5041091e531ff2fe1680695e5014084e2000054e1f5ffffba01598ae26c0695e50040a0e3000050e3090000da04018ae0010980e2200790e5001090e5041091e531ff2fe16c0695e5014084e2000054e1f5ffffba01598ae2700695e50040a0e3000050e3090000da04018ae0010980e2bc0690e5001090e5041091e531ff2fe1700695e5014084e2000054e1f5ffffba01598ae2780695e50040a0e3000050e3090000da04018ae0010980e24c0790e5001090e5041091e531ff2fe1780695e5014084e2000054e1f5ffffba01598ae27c0695e50040a0e3000050e3090000da04018ae0010980e2640790e5001090e5041091e531ff2fe17c0695e5014084e2000054e1f5ffffba01598ae2800695e50040a0e3000050e3090000da04018ae0010980e2700790e5001090e5041091e531ff2fe1800695e5014084e2000054e1f5ffffba01098ae2840690e5001090e5041091e531ff2fe101098ae27c0790e5000050e30200000a001090e5041091e531ff2fe101098ae2800790e5000050e30200000a001090e5041091e531ff2fe101498ae2680694e50050a0e3000050e3070000da05018ae0010980e2880690e5f3edffeb680694e5015085e2000055e1f7ffffba08009ae5ff0010e20500001a050a8ae25c09d0e5000050e30100000a0a00a0e1a5f1ffeb0100a0e384d08de2f04fbde81eff2fe1", "lang": "cpp", "divergences": 15, "c_source": "//cpp\n// NONMATCHING: 18/1072 words differ (div=18), all mwccarm spill-SLOT ORDERING internals.\n// Loop 2's digit-count reload (was the 3-word split add-#0x4000 cluster) is FIXED: the\n// inner-placement u64 launder ((int)g + sb*4 + 0x478c) & 0xFFFFFFFFFFFFFFFFLL forces the\n// pooled-constant register-offset form ldr r2,[r1,r0] the ROM has. Remaining 18 words are\n// ONE web mis-sorted in the spill-slot allocator: loop C's pcnt should take sp+0x10 (before\n// val at 0x14, tags at 0x20-0x3c) but lands at 0x2c wedged among the hoisted tag constants,\n// shifting z1/t0/t1/t2 down 4 bytes and loop G's pcnt2 from 0x1c to 0x14. Slot ORDER proved\n// invariant under ~35 lever attempts: decl/assignment order+scope (block/outer/function),\n// launder spelling (inner/outer/unsigned/~0LL), identity merge/rename, subscript/int-addr/\n// block-temp/volatile/register forms, dead extra defs, named-vs-literal tag constants,\n// opt_lifetimes/dead_assignments/loop_invariants/unroll_loops pragmas (same or worse).\n// decomp-permuter cannot attack this class: its scorer normalizes sp offsets (scores 0).\n// Note: loop C literal constants and a C99 fn-ptr vtable emulation both compile to the\n// IDENTICAL bytes as the named-tag //cpp virtual version (frontend-invariant residual).\n// func_ov006_021173c8 @ 0x021173c8 size 0x10c0 (ov006), mwccarm 1.2/sp2p3.\n\n#pragma opt_common_subs off\n#pragma opt_strength_reduction off\n\nstruct DispObj {\n virtual void f0();\n virtual void f1();\n};\n\nextern \"C\" {\nvoid func_02018f8c(void *p, int a);\nvoid func_ov004_020afdd0(int a0, int a1, int a2, int a3, int a4);\nvoid func_ov004_020b1ea4(int a0, int a1, int a2, int a3, int a4, int a5, int a6);\nint func_ov004_020ad674(void);\nint func_ov004_020adbc0(void);\nint func_ov004_020adc1c(void);\nvoid func_ov004_020b1a5c(int a0, int a1);\nint func_ov004_020b19f0(void *self);\nvoid func_ov004_020b0d8c(void *c, int a1, int a2);\nvoid func_ov006_02114b10(void *self);\nvoid func_ov006_02113c14(void *self);\n\nextern int data_ov006_02138ae0[];\nextern char *data_ov006_0213ecb8[];\nextern int data_ov006_0212edfc[];\nextern int data_ov006_0213765c[];\nextern int data_ov006_02137a78[];\nextern int data_ov006_02137a6c[];\nextern int data_ov006_021382e0[];\nextern int data_ov006_02138bd0[];\nextern int data_ov006_02138bf4[];\nextern int data_ov006_02137a0c[];\nextern int data_ov006_02137a60[];\nextern int data_ov006_02138a40[];\nextern int data_ov006_02138a88[];\n}\n\n#define I(off) (*(int *)(g + (off)))\n#define UC(off) (*(unsigned char *)(g + (off)))\n#define LP(e) ((int *)(((long long)(int)(e)) & 0xFFFFFFFFFFFFFFFFLL))\n\nextern \"C\" int func_ov006_021173c8(void *this_)\n{\n char *g = (char *)this_;\n int col;\n int xpos;\n int r7;\n int limit;\n int i;\n int j;\n int limG;\n int *pcnt;\n int *pcnt2;\n int val;\n\n func_02018f8c(*(void **)(g + 0x5998), 0);\n col = 0;\n\n if (I(0x4660) == 1 && I(0x5998) <= 0) {\n xpos = 0x18;\n\n /* Block B: row 0 */\n if (I(0x5964) > 0) {\n func_ov004_020afdd0(data_ov006_02138ae0[0], 0x30, xpos, -1, -1);\n func_ov004_020b1ea4(0x80, xpos, 0x64, 0, 0, 1, 0);\n i = func_ov004_020ad674();\n func_ov004_020afdd0(*(int *)(data_ov006_0213ecb8[i] + 0x54), 0x90, xpos, -1, -1);\n func_ov004_020b1ea4(0xa0, xpos, I(0x5964), 0, 0, 1, 0);\n func_ov004_020b1ea4(0xe0, xpos, I(0x5964) * 0x64, 0, 0, 1, 0);\n xpos += 0x18;\n col++;\n }\n\n /* Loop C: rows 1..4 */\n limit = col * 0x14;\n for (r7 = 0; r7 < 4; r7++) {\n if (I(0x5960) >= limit && *(int *)(g + r7 * 4 + 0x5968) > 0) {\n func_ov004_020afdd0(data_ov006_02138ae0[r7 + 1], 0x30, xpos, -1, -1);\n val = data_ov006_0212edfc[r7];\n func_ov004_020b1ea4(0x80, xpos, val, 0, 0, 1, 0);\n i = func_ov004_020ad674();\n func_ov004_020afdd0(*(int *)(data_ov006_0213ecb8[i] + 0x54), 0x90, xpos, -1, -1);\n pcnt = (int *)(((long long)(int)(g + r7 * 4 + 0x5968)) & 0xFFFFFFFFFFFFFFFFLL);\n func_ov004_020b1ea4(0xa0, xpos, *pcnt, 0, 0, 0, 0);\n func_ov004_020b1ea4(0xe0, xpos, val * *pcnt, 0, 0, 1, 0);\n xpos += 0x18;\n limit += 0x14;\n col++;\n }\n }\n\n /* Block D */\n if (I(0x597c) > 0 && I(0x5960) >= col * 0x14) {\n func_ov004_020afdd0(data_ov006_0213765c[0], 0x30, xpos, -1, -1);\n func_ov004_020b1ea4(0x80, xpos, 0x12c, 0, 0, 1, 0);\n i = func_ov004_020ad674();\n func_ov004_020afdd0(*(int *)(data_ov006_0213ecb8[i] + 0x54), 0x90, xpos, -1, -1);\n func_ov004_020b1ea4(0xa0, xpos, I(0x597c), 0, 0, 0, 0);\n func_ov004_020b1ea4(0xe0, xpos, I(0x597c) * 0x12c, 0, 0, 1, 0);\n xpos += 0x18;\n col++;\n }\n\n /* Block E */\n if (I(0x5984) > 0 && I(0x5960) >= col * 0x14) {\n func_ov004_020afdd0(data_ov006_02137a78[0], 0x30, xpos, -1, -1);\n func_ov004_020b1ea4(0x80, xpos, 0xbb8, 0, 0, 1, 0);\n i = func_ov004_020ad674();\n func_ov004_020afdd0(*(int *)(data_ov006_0213ecb8[i] + 0x54), 0x90, xpos, -1, -1);\n func_ov004_020b1ea4(0xa0, xpos, I(0x5984), 0, 0, 0, 0);\n func_ov004_020b1ea4(0xe0, xpos, I(0x5984) * 0xbb8, 0, 0, 1, 0);\n xpos += 0x18;\n col++;\n }\n\n /* Block F */\n if (I(0x5980) > 0 && I(0x5960) >= col * 0x14) {\n func_ov004_020afdd0(data_ov006_02137a6c[0], 0x30, xpos, -1, -1);\n func_ov004_020b1ea4(0x80, xpos, 0x7d0, 0, 0, 1, 0);\n i = func_ov004_020ad674();\n func_ov004_020afdd0(*(int *)(data_ov006_0213ecb8[i] + 0x54), 0x90, xpos, -1, -1);\n func_ov004_020b1ea4(0xa0, xpos, I(0x5980), 0, 0, 0, 0);\n func_ov004_020b1ea4(0xe0, xpos, I(0x5980) * 0x7d0, 0, 0, 1, 0);\n xpos += 0x18;\n col++;\n }\n\n /* Loop G: rows with per-row multiplier */\n limG = col * 0x14;\n for (j = 0; j < 3; j++) {\n pcnt2 = (int *)(((long long)(int)(g + j * 4 + 0x5988)) & 0xFFFFFFFFFFFFFFFFLL);\n if (*pcnt2 > 0 && I(0x5960) >= limG) {\n int mult;\n switch (j) {\n case 0:\n func_ov004_020afdd0(data_ov006_02137a0c[1], 0x20, xpos, -1, -1);\n func_ov004_020afdd0(data_ov006_02137a0c[1], 0x30, xpos, -1, -1);\n func_ov004_020afdd0(data_ov006_02137a0c[1], 0x40, xpos, -1, -1);\n mult = 5000;\n break;\n case 1:\n func_ov004_020afdd0(data_ov006_02137a0c[0], 0x20, xpos, -1, -1);\n func_ov004_020afdd0(data_ov006_02137a0c[0], 0x30, xpos, -1, -1);\n func_ov004_020afdd0(data_ov006_02137a0c[0], 0x40, xpos, -1, -1);\n mult = 8000;\n break;\n case 2:\n func_ov004_020afdd0(data_ov006_02137a0c[2], 0x20, xpos, -1, -1);\n func_ov004_020afdd0(data_ov006_02137a0c[2], 0x30, xpos, -1, -1);\n func_ov004_020afdd0(data_ov006_02137a0c[2], 0x40, xpos, -1, -1);\n mult = 10000;\n break;\n }\n func_ov004_020b1ea4(0x80, xpos, mult, 0, 0, 1, 0);\n i = func_ov004_020ad674();\n func_ov004_020afdd0(*(int *)(data_ov006_0213ecb8[i] + 0x54), 0x90, xpos, -1, -1);\n func_ov004_020b1ea4(0xa0, xpos, *pcnt2, 0, 0, 0, 0);\n func_ov004_020b1ea4(0xe0, xpos, mult * *pcnt2, 0, 0, 1, 0);\n xpos += 0x18;\n limG += 0x14;\n col++;\n }\n }\n\n /* Block H */\n if (I(0x5978) > 0 && I(0x5960) >= col * 0x14) {\n func_ov004_020afdd0(data_ov006_02138ae0[5], 0x30, xpos, -1, -1);\n func_ov004_020b1ea4(0x80, xpos, 0x2710, 0, 0, 1, 0);\n i = func_ov004_020ad674();\n func_ov004_020afdd0(*(int *)(data_ov006_0213ecb8[i] + 0x54), 0x90, xpos, -1, -1);\n func_ov004_020b1ea4(0xa0, xpos, I(0x5978), 0, 0, 0, 0);\n func_ov004_020b1ea4(0xe0, xpos, I(0x5978) * 0x2710, 0, 0, 1, 0);\n xpos += 0x18;\n col++;\n }\n\n /* Block I */\n if (I(0x5994) > 0 && I(0x5960) >= col * 0x14) {\n func_ov004_020afdd0(data_ov006_021382e0[0], 0x30, xpos, -1, -1);\n func_ov004_020b1ea4(0x80, xpos, 0x7d0, 0, 0, 1, 0);\n i = func_ov004_020ad674();\n func_ov004_020afdd0(*(int *)(data_ov006_0213ecb8[i] + 0x54), 0x90, xpos, -1, -1);\n func_ov004_020b1ea4(0xa0, xpos, I(0x5994), 0, 0, 0, 0);\n func_ov004_020b1ea4(0xe0, xpos, I(0x5994) * 0x7d0, 0, 0, 1, 0);\n xpos += 0x18;\n col++;\n }\n\n /* Block J: timer */\n if (I(0x5960) >= col * 0x14) {\n if ((I(8) & 0xff) == 0)\n func_ov004_020afdd0(data_ov006_02138bd0[0], 0x40, xpos, -1, -1);\n else\n func_ov004_020afdd0(data_ov006_02138bf4[0], 0x40, xpos, -1, -1);\n func_ov004_020b1ea4(0xe0, xpos, func_ov004_020adbc0(), 0, 0, 1, 0);\n col++;\n if (I(0x5960) < 0x118)\n I(0x5960) = 0x118;\n }\n\n /* Block K */\n if (I(0x4660) == 1 && I(0x5960) >= 0x12c) {\n if (col >= 7)\n func_ov004_020b0d8c(g, 0x80, 0xa8);\n else if (col == 6)\n func_ov004_020b0d8c(g, 0xe0, 0xa8);\n else\n func_ov004_020b0d8c(g, 0xe0, 0xa0);\n }\n }\n\n /* merge */\n if ((I(8) & 0xff) != 0 || UC(0x595c) == 0)\n func_ov006_02114b10(g);\n\n /* Section 2 */\n func_ov004_020b1a5c(func_ov004_020adbc0(), 6);\n func_ov004_020b19f0((void *)func_ov004_020adc1c());\n\n /* Loop 2: item list (sb reused as index) */\n {\n int sb;\n for (sb = 0; sb < 5; sb++) {\n int *pcnt = LP(g + sb * 4 + 0x478c);\n int cnt = *pcnt;\n if (cnt > 0) {\n int *pmode = LP(g + sb * 4 + 0x47a0);\n int mode = *pmode;\n if (mode >= 2) {\n unsigned int u;\n int nd;\n int *py = LP(g + sb * 8 + 0x47cc);\n int *px = LP(g + sb * 8 + 0x47c8);\n func_ov004_020b1ea4((*px >> 12) - 0x10, *py >> 12, cnt, -1, 0, 0, 0);\n nd = 0;\n u = (unsigned int)*(int *)(((int)g + sb * 4 + 0x478c) & 0xFFFFFFFFFFFFFFFFLL);\n if (u != 0) {\n do {\n u /= 10;\n nd++;\n } while (u != 0);\n }\n i = func_ov004_020ad674();\n func_ov004_020afdd0(*(int *)(data_ov006_0213ecb8[i] + 0x54),\n (*px >> 12) + nd * 8 - 8, *py >> 12, -1, -1);\n nd = 0;\n u = (unsigned int)*pcnt;\n if (u != 0) {\n do {\n u /= 10;\n nd++;\n } while (u != 0);\n }\n func_ov004_020b1ea4((*px >> 12) + nd * 8 + 8, *py >> 12, *pmode, -1, 0, 0, 0);\n } else {\n int y = *(int *)(g + sb * 8 + 0x47cc);\n int x = *(int *)(g + sb * 8 + 0x47c8);\n func_ov004_020b1ea4(x >> 12, y >> 12, cnt, -1, 0, 0, 0);\n }\n }\n }\n }\n\n /* Loop 3: 16 slots */\n {\n int r4;\n int two = 2, neg = -1, zero = 0;\n for (r4 = 0; r4 < 0x10; r4++) {\n if (*(unsigned char *)(g + r4 + 0x4804) == 1) {\n int idx = *(int *)(g + r4 * 4 + 0x4814) / 5;\n if (idx > 3)\n idx = two;\n func_ov004_020afdd0(data_ov006_02137a60[idx],\n *(int *)(g + r4 * 8 + 0x4854) >> 12,\n *(int *)(g + r4 * 8 + 0x4858) >> 12, neg, zero);\n }\n }\n }\n\n /* Block M */\n {\n int v = I(0x5958);\n int flag = 0;\n if (v > 0) {\n if (v % 30 > 0xf)\n flag = 1;\n } else {\n if (I(0x4784) > 0)\n flag = 1;\n }\n if ((I(8) & 0xff) == 0)\n func_ov004_020afdd0(data_ov006_02138a40[flag], 0x18, -0x90, -1, 0);\n else\n func_ov004_020afdd0(data_ov006_02138a88[flag], 0x18, -0x90, -1, 0);\n }\n\n /* Block N */\n {\n int v = I(0x5958);\n int flag = 0;\n if (v > 0) {\n if (v % 30 > 0xf)\n flag = 1;\n } else {\n if (I(0x4788) > 0)\n flag = 1;\n }\n if ((I(8) & 0xff) == 0)\n func_ov004_020afdd0(data_ov006_02138a40[flag], 0xe8, -0x90, -1, -1);\n else\n func_ov004_020afdd0(data_ov006_02138a88[flag], 0xe8, -0x90, -1, -1);\n }\n\n /* Dispatch loops */\n {\n int r4;\n for (r4 = 0; r4 < I(0x4674); r4++)\n ((DispObj *)*(void **)(g + r4 * 4 + 0x4740))->f1();\n }\n if (*(void **)(g + 0x4778) != 0)\n ((DispObj *)*(void **)(g + 0x4778))->f1();\n {\n int r4;\n for (r4 = 0; r4 < I(0x4668); r4++)\n ((DispObj *)*(void **)(g + r4 * 4 + 0x4688))->f1();\n }\n {\n int r4;\n for (r4 = 0; r4 < I(0x466c); r4++)\n ((DispObj *)*(void **)(g + r4 * 4 + 0x4720))->f1();\n }\n {\n int r4;\n for (r4 = 0; r4 < I(0x4670); r4++)\n ((DispObj *)*(void **)(g + r4 * 4 + 0x46bc))->f1();\n }\n {\n int r4;\n for (r4 = 0; r4 < I(0x4678); r4++)\n ((DispObj *)*(void **)(g + r4 * 4 + 0x474c))->f1();\n }\n {\n int r4;\n for (r4 = 0; r4 < I(0x467c); r4++)\n ((DispObj *)*(void **)(g + r4 * 4 + 0x4764))->f1();\n }\n {\n int r4;\n for (r4 = 0; r4 < I(0x4680); r4++)\n ((DispObj *)*(void **)(g + r4 * 4 + 0x4770))->f1();\n }\n ((DispObj *)*(void **)(g + 0x4684))->f1();\n if (*(void **)(g + 0x477c) != 0)\n ((DispObj *)*(void **)(g + 0x477c))->f1();\n if (*(void **)(g + 0x4780) != 0)\n ((DispObj *)*(void **)(g + 0x4780))->f1();\n {\n int r5;\n for (r5 = 0; r5 < I(0x4668); r5++)\n func_ov006_02113c14(*(void **)(g + r5 * 4 + 0x4688));\n }\n\n if ((I(8) & 0xff) == 0 && UC(0x595c) != 0)\n func_ov006_02114b10(g);\n\n return 1;\n}\n", "source": "lunavyqo-e7f2c-nearmiss-pr"} -{"module": "ov075", "addr": "0x0211bb00", "name": "__sinit_ov075_0211bb00", "size": 2588, "target_hex": "00402de90cd04de210089fe568e9ffeb0c089fe580c0a0e31030a0e304189fe504289fe5b0c0c0e1b230c0e1aa5dfdebf8079fe53c30a0e3e8179fe5f0279fe5b030c0e11030a0e3b230c0e1a25dfdebe0079fe51c30a0e3c8179fe5d8279fe5b030c0e11030a0e3b230c0e19a5dfdebc8079fe50810a0e3b010c0e11010a0e3b210c0e19c179fe5b4279fe5925dfdebb0079fe50810a0e3b010c0e11010a0e3b210c0e17c179fe59c279fe58a5dfdeb98079fe52010a0e3b010c0e11010a0e3b210c0e15c179fe584279fe5825dfdeb80079fe53010a0e3b010c0e11010a0e3b210c0e13c179fe56c279fe57a5dfdeb68079fe52010a0e3b010c0e1b210c0e120179fe558279fe5735dfdeb54079fe52810a0e3b010c0e11010a0e3b210c0e100179fe540279fe56b5dfdeb3c079fe55810a0e3b010c0e11010a0e3b210c0e1e0169fe528279fe5635dfdeb24079fe57810a0e3b010c0e11010a0e3b210c0e1c0169fe510279fe55b5dfdeb0c079fe52010a0e3b010c0e11010a0e3b210c0e1a0169fe5f8269fe5535dfdebf4069fe50a10a0e3b010c0e11010a0e3b210c0e180169fe5e0269fe54b5dfdebdc069fe50010a0e3b010c0e1b210c0e164169fe5cc269fe5445dfdeb2020a0e3c4069fe51010a0e3b020c0e1b210c0e144169fe5b4269fe53c5dfdebb0069fe51810a0e3b010c0e11010a0e3b210c0e124169fe59c269fe5345dfdeb98069fe51c10a0e3b010c0e11010a0e3b210c0e104169fe584269fe52c5dfdeb80069fe51c10a0e3b010c0e11010a0e3b210c0e1e4159fe56c269fe5245dfdeb68069fe52010a0e3b010c0e11010a0e3b210c0e1c4159fe554269fe51c5dfdeb3020a0e34c069fe51010a0e3b020c0e1b210c0e1a4159fe53c269fe5145dfdeb38069fe53010a0e3b010c0e11010a0e3b210c0e184159fe524269fe50c5dfdeb20069fe53010a0e3b010c0e11010a0e3b210c0e164159fe50c269fe5045dfdeb08069fe53010a0e3b010c0e11010a0e3b210c0e144159fe5f4259fe5fc5cfdebf0059fe51810a0e3b010c0e11010a0e3b210c0e124159fe5dc259fe5f45cfdeb2020a0e3d4059fe51010a0e3b020c0e1b210c0e104159fe5c4259fe5ec5cfdebc0059fe52010a0e3b010c0e11010a0e3b210c0e1e4149fe5ac259fe5e45cfdeba8059fe52810a0e3b010c0e11010a0e3b210c0e1c4149fe594259fe5dc5cfdeb90059fe52010a0e3b010c0e11010a0e3b210c0e1a4149fe57c259fe5d45cfdeb78059fe53010a0e3b010c0e11010a0e3b210c0e184149fe564259fe5cc5cfdeb60059fe560e59fe5001090e5040090e500108de504008de500108ee504008ee510108ee514008ee540259fe540c59fe5003092e5042092e508308ee50c208ee510108ce514008ce528359fe528259fe500e093e5043093e500e08ce504308ce5003092e5042092e508308ce50c208ce508e59fe508359fe508259fe500c093e5043093e500c08ee504308ee5003092e5042092e508308ee50c208ee5e8249fe5e8c49fe5003092e5042092e510308ee514208ee510108ce514008ce5d0349fe5d0249fe500e093e5043093e500e08ce504308ce5003092e5042092e508308ce50c208ce5b0e49fe5b0349fe5b0249fe500c093e5043093e500c08ee504308ee5003092e5042092e508308ee50c208ee590249fe590c49fe5003092e5042092e510308ee514208ee510108ce514008ce578349fe578249fe500e093e5043093e500e08ce504308ce5003092e5042092e508308ce50c208ce558e49fe558349fe558249fe500c093e5043093e500c08ee504308ee5003092e5042092e508308ee50c208ee538249fe538c49fe5003092e5042092e510308ee514208ee510108ce514008ce520349fe520249fe500e093e5043093e500e08ce504308ce5003092e5042092e508308ce50c208ce500e49fe500349fe500249fe500c093e5043093e500c08ee504308ee5003092e5042092e508308ee50c208ee5e0239fe5e0c39fe5003092e5042092e510308ee514208ee510108ce514008ce5c8339fe5c8239fe500e093e5043093e500e08ce504308ce5003092e5042092e508308ce50c208ce5a8c39fe5a8239fe500108ce504008ce510108ce514008ce5003092e5042092e508308ce50c208ce588e39fe588339fe588239fe500c093e5043093e500c08ee504308ee5003092e5042092e508308ee50c208ee568239fe568c39fe5003092e5042092e510308ee514208ee558339fe558239fe500e093e5043093e500e08ce504308ce5003092e5042092e508308ce50c208ce538239fe538e39fe5003092e5042092e510308ce514208ce528339fe528239fe500c093e5043093e500c08ee504308ee5003092e5042092e508308ee50c208ee508239fe508c39fe5003092e5042092e510308ee514208ee510108ce514008ce5f0329fe5f0229fe500e093e5043093e500e08ce504308ce5003092e5042092e508308ce50c208ce5d0e29fe5d0229fe510108ee514008ee5003092e5042092e500308ee504208ee5b8229fe5b8329fe500c092e5042092e508c08ee50c208ee5081083e50c0083e5101083e5140083e598229fe598c29fe500e092e5042092e500e083e5042083e588329fe588229fe500e093e5043093e500e08ce504308ce5003092e5042092e508308ce50c208ce568229fe568e29fe5003092e5042092e510308ce514208ce558329fe558229fe500c093e5043093e500c08ee504308ee5003092e5042092e508308ee50c208ee538229fe538329fe500c092e5101083e510c08ee5140083e5041092e524029fe514108ee5001090e5040090e5001083e5040083e510029fe5001090e5040090e5081083e50c0083e50cd08de20040bde81eff2fe11cd7110248d911028cb90302fcd511024cd91102bcd6110250d91102c8d6110254d91102e0d6110258d91102a4d611025cd91102ecd6110260d91102f8d6110264d9110210d7110268d9110298d611026cd91102c0d5110270d91102ccd5110274d91102d8d5110278d91102b0d611027cd91102e4d511022cd71102f0d5110230d711028cd6110234d7110208d6110238d7110214d611023cd7110220d6110240d711022cd6110244d7110238d6110248d7110244d611024cd7110204d7110250d7110250d6110254d711025cd6110258d71102d4d611025cd7110268d6110260d7110274d6110264d7110280d61102586b080240d81102d0c8110258d8110200c7110250c7110288d8110250c8110228c81102c8c81102a0d81102f8c61102d8c71102d0d81102c0c81102d8c8110218c7110200d91102b0c71102b8c8110218d9110278c8110260c7110280c7110268d7110210c81102e8c7110280d7110268c7110298c8110238c71102b0d71102a8c8110240c81102c8d71102b8c71102e0d7110228c7110230c8110260c8110210d8110218c8110270c7110288c8110270d8110258c8110208c8110298c71102b8d81102a8c71102c8c71102e8d81102f0c7110248c7110230d91102a0c8110298d7110258c7110240c71102a0c71102f8d7110268c8110200c8110238c8110228d8110248c8110220c81102", "lang": "c", "divergences": 10, "c_source": "#pragma opt_common_subs off\nstruct P2 { int a, b; };\nstruct P6 { struct P2 lo, hi, tail; };\n\nextern void func_ov075_021160b4(void *);\nextern void func_020731dc(void *, void *, void **);\nextern void func_0203b98c(void);\n\nextern char data_ov075_0211d71c[];\n\nextern int data_ov075_0211d5c0;\nextern int data_ov075_0211d5cc;\nextern int data_ov075_0211d5d8;\nextern int data_ov075_0211d5e4;\nextern int data_ov075_0211d5f0;\nextern int data_ov075_0211d5fc;\nextern int data_ov075_0211d608;\nextern int data_ov075_0211d614;\nextern int data_ov075_0211d620;\nextern int data_ov075_0211d62c;\nextern int data_ov075_0211d638;\nextern int data_ov075_0211d644;\nextern int data_ov075_0211d650;\nextern int data_ov075_0211d65c;\nextern int data_ov075_0211d668;\nextern int data_ov075_0211d674;\nextern int data_ov075_0211d680;\nextern int data_ov075_0211d68c;\nextern int data_ov075_0211d698;\nextern int data_ov075_0211d6a4;\nextern int data_ov075_0211d6b0;\nextern int data_ov075_0211d6bc;\nextern int data_ov075_0211d6c8;\nextern int data_ov075_0211d6d4;\nextern int data_ov075_0211d6e0;\nextern int data_ov075_0211d6ec;\nextern int data_ov075_0211d6f8;\nextern int data_ov075_0211d704;\nextern int data_ov075_0211d710;\n\nextern int data_ov075_0211d72c;\nextern int data_ov075_0211d730;\nextern int data_ov075_0211d734;\nextern int data_ov075_0211d738;\nextern int data_ov075_0211d73c;\nextern int data_ov075_0211d740;\nextern int data_ov075_0211d744;\nextern int data_ov075_0211d748;\nextern int data_ov075_0211d74c;\nextern int data_ov075_0211d750;\nextern int data_ov075_0211d754;\nextern int data_ov075_0211d758;\nextern int data_ov075_0211d75c;\nextern int data_ov075_0211d760;\nextern int data_ov075_0211d764;\n\nextern int data_ov075_0211d948;\nextern int data_ov075_0211d94c;\nextern int data_ov075_0211d950;\nextern int data_ov075_0211d954;\nextern int data_ov075_0211d958;\nextern int data_ov075_0211d95c;\nextern int data_ov075_0211d960;\nextern int data_ov075_0211d964;\nextern int data_ov075_0211d968;\nextern int data_ov075_0211d96c;\nextern int data_ov075_0211d970;\nextern int data_ov075_0211d974;\nextern int data_ov075_0211d978;\nextern int data_ov075_0211d97c;\n\nextern struct P2 data_02086b58;\nextern struct P2 data_ov075_0211c6f8;\nextern struct P2 data_ov075_0211c700;\nextern struct P2 data_ov075_0211c718;\nextern struct P2 data_ov075_0211c728;\nextern struct P2 data_ov075_0211c738;\nextern struct P2 data_ov075_0211c740;\nextern struct P2 data_ov075_0211c748;\nextern struct P2 data_ov075_0211c750;\nextern struct P2 data_ov075_0211c758;\nextern struct P2 data_ov075_0211c760;\nextern struct P2 data_ov075_0211c768;\nextern struct P2 data_ov075_0211c770;\nextern struct P2 data_ov075_0211c780;\nextern struct P2 data_ov075_0211c798;\nextern struct P2 data_ov075_0211c7a0;\nextern struct P2 data_ov075_0211c7a8;\nextern struct P2 data_ov075_0211c7b0;\nextern struct P2 data_ov075_0211c7b8;\nextern struct P2 data_ov075_0211c7c8;\nextern struct P2 data_ov075_0211c7d8;\nextern struct P2 data_ov075_0211c7e8;\nextern struct P2 data_ov075_0211c7f0;\nextern struct P2 data_ov075_0211c800;\nextern struct P2 data_ov075_0211c808;\nextern struct P2 data_ov075_0211c810;\nextern struct P2 data_ov075_0211c818;\nextern struct P2 data_ov075_0211c820;\nextern struct P2 data_ov075_0211c828;\nextern struct P2 data_ov075_0211c830;\nextern struct P2 data_ov075_0211c838;\nextern struct P2 data_ov075_0211c840;\nextern struct P2 data_ov075_0211c848;\nextern struct P2 data_ov075_0211c850;\nextern struct P2 data_ov075_0211c858;\nextern struct P2 data_ov075_0211c860;\nextern struct P2 data_ov075_0211c868;\nextern struct P2 data_ov075_0211c878;\nextern struct P2 data_ov075_0211c888;\nextern struct P2 data_ov075_0211c898;\nextern struct P2 data_ov075_0211c8a0;\nextern struct P2 data_ov075_0211c8a8;\nextern struct P2 data_ov075_0211c8b8;\nextern struct P2 data_ov075_0211c8c0;\nextern struct P2 data_ov075_0211c8c8;\nextern struct P2 data_ov075_0211c8d0;\nextern struct P2 data_ov075_0211c8d8;\n\nextern struct P6 data_ov075_0211d768;\nextern struct P6 data_ov075_0211d780;\nextern struct P6 data_ov075_0211d798;\nextern struct P6 data_ov075_0211d7b0;\nextern struct P6 data_ov075_0211d7c8;\nextern struct P6 data_ov075_0211d7e0;\nextern struct P6 data_ov075_0211d7f8;\nextern struct P6 data_ov075_0211d810;\nextern struct P6 data_ov075_0211d828;\nextern struct P6 data_ov075_0211d840;\nextern struct P6 data_ov075_0211d858;\nextern struct P6 data_ov075_0211d870;\nextern struct P6 data_ov075_0211d888;\nextern struct P6 data_ov075_0211d8a0;\nextern struct P6 data_ov075_0211d8b8;\nextern struct P6 data_ov075_0211d8d0;\nextern struct P6 data_ov075_0211d8e8;\nextern struct P6 data_ov075_0211d900;\nextern struct P6 data_ov075_0211d918;\nextern struct P6 data_ov075_0211d930;\n\nvoid __sinit_ov075_0211bb00(void)\n{\n short *p;\n struct P2 tmp;\n int ta, tb;\n\n func_ov075_021160b4(data_ov075_0211d71c);\n\n p = (short *)(&data_ov075_0211d948);\n ((short *)(&data_ov075_0211d948))[0] = 0x80;\n ((short *)(&data_ov075_0211d948))[1] = 0x10;\n func_020731dc((short *)(&data_ov075_0211d948), (void *)func_0203b98c, (void **)&data_ov075_0211d5fc);\n\n p = (short *)(&data_ov075_0211d94c); p[0] = 0x3c; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d6bc);\n p = (short *)(&data_ov075_0211d950); p[0] = 0x1c; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d6c8);\n\n p = (short *)(&data_ov075_0211d954); p[0] = 8; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d6e0);\n p = (short *)(&data_ov075_0211d958); p[0] = 8; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d6a4);\n p = (short *)(&data_ov075_0211d95c); p[0] = 0x20; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d6ec);\n p = (short *)(&data_ov075_0211d960); p[0] = 0x30; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d6f8);\n p = (short *)(&data_ov075_0211d964); p[0] = 0x20; p[1] = 0x20;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d710);\n p = (short *)(&data_ov075_0211d968); p[0] = 0x28; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d698);\n p = (short *)(&data_ov075_0211d96c); p[0] = 0x58; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d5c0);\n p = (short *)(&data_ov075_0211d970); p[0] = 0x78; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d5cc);\n p = (short *)(&data_ov075_0211d974); p[0] = 0x20; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d5d8);\n p = (short *)(&data_ov075_0211d978); p[0] = 0xa; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d6b0);\n p = (short *)(&data_ov075_0211d97c); p[0] = 0; p[1] = 0;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d5e4);\n\n {\n int sz = 0x20;\n int h = 0x10;\n ((short *)(&data_ov075_0211d72c))[0] = (short)sz;\n ((short *)(&data_ov075_0211d72c))[1] = (short)h;\n func_020731dc((short *)(&data_ov075_0211d72c), (void *)func_0203b98c, (void **)&data_ov075_0211d5f0);\n }\n\n p = (short *)(&data_ov075_0211d730); p[0] = 0x18; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d68c);\n p = (short *)(&data_ov075_0211d734); p[0] = 0x1c; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d608);\n p = (short *)(&data_ov075_0211d738); p[0] = 0x1c; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d614);\n p = (short *)(&data_ov075_0211d73c); p[0] = 0x20; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d620);\n\n {\n int sz = 0x30;\n int h = 0x10;\n ((short *)(&data_ov075_0211d740))[0] = (short)sz;\n ((short *)(&data_ov075_0211d740))[1] = (short)h;\n func_020731dc((short *)(&data_ov075_0211d740), (void *)func_0203b98c, (void **)&data_ov075_0211d62c);\n }\n\n p = (short *)(&data_ov075_0211d744); p[0] = 0x30; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d638);\n p = (short *)(&data_ov075_0211d748); p[0] = 0x30; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d644);\n p = (short *)(&data_ov075_0211d74c); p[0] = 0x30; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d704);\n p = (short *)(&data_ov075_0211d750); p[0] = 0x18; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d650);\n\n {\n int sz = 0x20;\n int h = 0x10;\n ((short *)(&data_ov075_0211d754))[0] = (short)sz;\n ((short *)(&data_ov075_0211d754))[1] = (short)h;\n func_020731dc((short *)(&data_ov075_0211d754), (void *)func_0203b98c, (void **)&data_ov075_0211d65c);\n }\n\n p = (short *)(&data_ov075_0211d758); p[0] = 0x20; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d6d4);\n p = (short *)(&data_ov075_0211d75c); p[0] = 0x28; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d668);\n p = (short *)(&data_ov075_0211d760); p[0] = 0x20; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d674);\n p = (short *)(&data_ov075_0211d764); p[0] = 0x30; p[1] = 0x10;\n func_020731dc(p, (void *)func_0203b98c, (void **)&data_ov075_0211d680);\n\n tmp = data_02086b58;\n ta = tmp.a;\n tb = tmp.b;\n\n data_ov075_0211d840.lo = tmp;\n data_ov075_0211d840.tail.a = tb ? ta : ta;\n data_ov075_0211d840.tail.b = tb;\n data_ov075_0211d840.hi = data_ov075_0211c8d0;\n\n data_ov075_0211d858.tail.a = tb ? ta : ta;\n data_ov075_0211d858.tail.b = tb;\n data_ov075_0211d858.lo = data_ov075_0211c700;\n data_ov075_0211d858.hi = data_ov075_0211c750;\n\n data_ov075_0211d888.lo = data_ov075_0211c850;\n data_ov075_0211d888.hi = data_ov075_0211c828;\n data_ov075_0211d888.tail = data_ov075_0211c8c8;\n\n data_ov075_0211d8a0.tail.a = tb ? ta : ta;\n data_ov075_0211d8a0.tail.b = tb;\n data_ov075_0211d8a0.lo = data_ov075_0211c6f8;\n data_ov075_0211d8a0.hi = data_ov075_0211c7d8;\n\n data_ov075_0211d8d0.lo = data_ov075_0211c8c0;\n data_ov075_0211d8d0.hi = data_ov075_0211c8d8;\n data_ov075_0211d8d0.tail = data_ov075_0211c718;\n\n data_ov075_0211d900.tail.a = tb ? ta : ta;\n data_ov075_0211d900.tail.b = tb;\n data_ov075_0211d900.lo = data_ov075_0211c7b0;\n data_ov075_0211d900.hi = data_ov075_0211c8b8;\n\n data_ov075_0211d918.lo = data_ov075_0211c878;\n data_ov075_0211d918.hi = data_ov075_0211c760;\n data_ov075_0211d918.tail = data_ov075_0211c780;\n\n data_ov075_0211d768.tail.a = tb ? ta : ta;\n data_ov075_0211d768.tail.b = tb;\n data_ov075_0211d768.lo = data_ov075_0211c810;\n data_ov075_0211d768.hi = data_ov075_0211c7e8;\n\n data_ov075_0211d780.lo = data_ov075_0211c768;\n data_ov075_0211d780.hi = data_ov075_0211c898;\n data_ov075_0211d780.tail = data_ov075_0211c738;\n\n data_ov075_0211d7b0.tail.a = tb ? ta : ta;\n data_ov075_0211d7b0.tail.b = tb;\n data_ov075_0211d7b0.lo = data_ov075_0211c8a8;\n data_ov075_0211d7b0.hi = data_ov075_0211c840;\n\n data_ov075_0211d7c8.lo = tmp;\n data_ov075_0211d7c8.tail.a = tb ? ta : ta;\n data_ov075_0211d7c8.tail.b = tb;\n data_ov075_0211d7c8.hi = data_ov075_0211c7b8;\n\n data_ov075_0211d7e0.lo = data_ov075_0211c728;\n data_ov075_0211d7e0.hi = data_ov075_0211c830;\n data_ov075_0211d7e0.tail = data_ov075_0211c860;\n\n data_ov075_0211d810.lo = data_ov075_0211c818;\n data_ov075_0211d810.hi = data_ov075_0211c770;\n data_ov075_0211d810.tail = data_ov075_0211c888;\n\n data_ov075_0211d870.lo = data_ov075_0211c858;\n data_ov075_0211d870.hi = data_ov075_0211c808;\n data_ov075_0211d870.tail = data_ov075_0211c798;\n\n data_ov075_0211d8b8.tail.a = tb ? ta : ta;\n data_ov075_0211d8b8.tail.b = tb;\n data_ov075_0211d8b8.lo = data_ov075_0211c7a8;\n data_ov075_0211d8b8.hi = data_ov075_0211c7c8;\n\n data_ov075_0211d8e8.lo = data_ov075_0211c7f0;\n data_ov075_0211d8e8.tail.a = tb ? ta : ta;\n data_ov075_0211d8e8.tail.b = tb;\n data_ov075_0211d8e8.hi = data_ov075_0211c748;\n\n data_ov075_0211d930.hi = tmp;\n data_ov075_0211d930.tail.a = tb ? ta : ta;\n data_ov075_0211d930.tail.b = tb;\n data_ov075_0211d930.lo = data_ov075_0211c8a0;\n\n data_ov075_0211d798.lo = data_ov075_0211c758;\n data_ov075_0211d798.hi = data_ov075_0211c740;\n data_ov075_0211d798.tail = data_ov075_0211c7a0;\n\n data_ov075_0211d7f8.lo = data_ov075_0211c868;\n data_ov075_0211d7f8.hi = data_ov075_0211c800;\n data_ov075_0211d7f8.tail = data_ov075_0211c838;\n\n data_ov075_0211d828.tail.a = tb ? ta : ta;\n data_ov075_0211d828.tail.b = tb;\n data_ov075_0211d828.lo = data_ov075_0211c848;\n data_ov075_0211d828.hi = data_ov075_0211c820;\n}\n", "source": "lunavyqo-grok-build-batch6"} {"module": "ov006", "addr": "0x0210c9e0", "name": "func_ov006_0210c9e0", "size": 2076, "target_hex": "f04f2de904d04de20040a0e1012984e2b41692e50d0051e301f18f90d10100ea0c0000ea270000ea330000ea3a0000eaf30000ea2a0100ea390100ea4b0100eab00100ea7c0100eabd0100ea7a0100eabb0100ea970100ea0010a0e30130a0e3010084e0010980e2011081e20237c0e5030051e3f9ffffba010984e20020a0e30527c0e50a27c0e50b27c0e51c179fe5b43680e5010084e015feffebc400d4e53c10a0e3000050e30100a003c300c405c400c4050000a003b00cc401010984e20c17c0e5a70100eae4069fe5000084e0c7b8fceb000050e3a201001a160ea0e32317fceb010984e21e10a0e30c17c0e50210a0e3b41680e59a0100eab0069fe5000084e0bab8fceb000050e3010984020310a003b4168005920100ea0090a0e30980a0e18c669fe50930a0e188069fe588b69fe588169fe588269fe5085084e002a085e00050dae5010055e30400000a085184e0015985e2a45695e5000055e32000000a015984e20857d5e5087184e0019089e208c085e00150b7e70cc196e70c5045e0005087e5005097e5000055e3140000aa0050dae5010055e3003087151000001a20569fe508a084e005508ae000a0d5e501a08ae200a0c5e500c0d5e590accee04ee1a0e1acafa0e10ee08ae09beecae00ee04ce000e0c5e5005097e5015785e2005087e5018088e2030058e3d1ffffba000059e30700000a010984e2b00690e5c4259fe50210a0e30030a0e33316fceb011984e2b00681e5010984e20507d0e5030050e34000002aa0059fe5a0159fe50020d0e50030a0e30201d1e70211a0e1000050e30300000a88059fe50100d0e7000050e30130a013000053e34001000a6c059fe50211a0e1010080e00290d0e50360d0e560859fe544259fe50050a0e31f10e0e3050084e00230f0e7010053e32100001a853188e0857198e7043093e5077049e0200057e3033046e01a0000ca010057e1180000ba200053e3160000ca010053e1140000ba10159fe50030a0e30030c0e5012084e00010d2e5010984e2011081e20010c2e57116d0e5000051e30300000a7136c0e5a80094e5b41094e5ac82feebd0149fe5d4049fe5851191e70116a0e18616fceb110100ea015085e2030055e3d6ffffba0d0100ea0130a0e30020a0e30210a0e1020184e0010980e2a40690e5012082e2000050e30130a011030052e3f7ffffba010053e30001001a0400a0e1ecfdffeb011984e20a07c1e50000a0e3b80681e50a07d1e5000050e30700000a0927d1e558049fe558149fe5003084e00200d1e7001093e5000081e0000083e5010984e20b27d0e5000052e30500000a030052e328049f3500108430000091358200803000008135010984e2a83094e5b82690e57c0690e5b41094e5923020e07382feeb010984e20410a0e3b41680e53c10a0e30c17c0e5d80000eaa8039fe5000084e0f8b7fceb000050e3d300001a010984e20a17d0e5000051e30800000a0927d0e5c0039fe5c0139fe50231a0e1bc239fe5f31091e1f32092e1000084e0fafcffeb010984e20b07d0e5000050e30a00000a030050e30800002a010040e290139fe50031a0e18c239fe58c039fe5f31091e1f32092e1000084e0ebfcffeb011984e2b80691e5000050e30900000a6c039fe50520a0e3b42681e56420a0e3000084e00c27c1e5bafcffeb2600a0e33c16fceb050000ea0700a0e3b40681e53c20a0e30e00a0e30c27c1e53516fceb0000a0e3c300c4e5a00000eac8029fe5000084e0c0b7fceb000050e39b00001a011984e2ac029fe5b81691e5000084e0f4fcffeb010984e23c10a0e30c17c0e50610a0e3b41680e5900000ea800692e5000050e30100a0030000a013000050e38a00000aa80094e5fd82feeb68029fe5000084e0a8b7fceb000050e38300001a0400a0e1002090e50410a0e3482092e532ff2fe17d0000ea3c029fe5000084e09db7fceb000050e37800001aa80094e5000050e3050000da0400a0e1002090e50510a0e3482092e532ff2fe16f0000ea0450a0e10060a0e30d10a0e308729fe50c829fe5f8019fe5f8b19fe5062184e0079082e0003099e5062084e0013783e2003089e5083082e00020d3e5016086e2030056e3012082e20020c3e50020d3e59092cae04aa1a0e1a29fa0e10aa089e09b9acae009a042e000a0c3e50020d3e5022085e0012982e2c016c2e5155085e2e5ffffba010984e20910a0e3b41680e54a0000ea80019fe5091041e2c150a0e1003084e0051193e7050184e0021a41e2051183e7011980e2a40691e5000050e33e0000aa0030a0e398019fe5a43681e50a10a0e30c17c2e5002084e0001092e550019fe5011081e2001082e5851190e7590fa0e30116a0e1a415fceb000055e32e00001a0200a0e37784feeb2b0000ea54019fe5001084e0000091e5020a40e2000081e5ac0692e5000050e3230000aa0000a0e3ac0682e53c00a0e30c07c2e50810a0e3ec009fe5b41682e5101090e5590fa0e30116a0e18c15fceb170000eaa4009fe5000084e037b7fceb000050e31200001af4009fe53684fcebec009fe50210a0e3e286fceb0010a0e30120a0e10500a0e38984fceb080000ea68009fe5000084e028b7fceb000050e3b4009f050010840000009105010080020000810540009fe5000084e0001090e5001091e531ff2fe170009fe5000084e043fcffeb78009fe5000084e040fcffeb70009fe5000084e009fcffeb0100a0e304d08de2f04fbde81eff2fe1604600000c47000000e61302310cc33015000000a446000002470000ff46000061010000400e0a02e80d0a02e90d0a023ce613020547000062010000b8460000d8e413028446000054e6130256e61302f8e41302fae41302904600009c460000b4460000ac4600001cf60902", "lang": "c", "divergences": 798, "c_source": "typedef signed char s8;\ntypedef unsigned char u8;\ntypedef signed short s16;\ntypedef unsigned short u16;\ntypedef signed int s32;\ntypedef unsigned int u32;\n\ntypedef void (*vfunc0)(void);\ntypedef void (*vfunc2)(u32, u32);\n\nextern u8 DecIfAbove0_Byte(u8* p);\nextern void func_ov006_0210c2d4(u8 *c);\nextern void Sound_PlayBank2_2D(u32 a);\nextern u32 func_020124c4(u32 a, u32 b, u32 c, u32 d);\nextern void func_ov004_020ad79c(u32 r0arg, u32 r1arg);\nextern void func_02012718(void *a, s32 b);\nextern u32 func_ov006_0210c500(u32 self);\nextern void func_ov006_0210c218(u8 *p, s16 a, s16 b);\nextern void func_ov006_0210c180(u8 *c);\nextern u32 func_02012790(u32 a);\nextern void func_ov006_0210c2c0(u32* p, s32 v);\nextern void func_ov004_020adb1c(u32 self);\nextern void func_ov004_020ae274(void* c);\nextern void Scene_SetFaders(void *fader);\nextern void func_0202ec9c(void *thiz, u32 arg1);\nextern void Scene_StartSceneFade(u32 a, u32 b, u16 c);\nextern void func_ov006_0210c278(u8 *o);\nextern void func_ov006_0210c1a8(u32 *o);\n\nextern u8 data_020a0e40;\nextern u8 data_020a0de8;\nextern u8 data_020a0de9;\nextern s32 data_ov006_0213e600;\nextern s32 data_ov006_0213e63c;\nextern u8 data_ov006_0213e4d8;\nextern s16 data_ov006_0213e654;\nextern s16 data_ov006_0213e656;\nextern s16 data_ov006_0213e4f8;\nextern s16 data_ov006_0213e4fa;\nextern u32 data_0209f61c;\n\nvoid func_ov006_0210c9e0(u32 r4) {\n u32 base4000 = r4 + 0x4000;\n switch (*(u32*)(base4000 + 0x6b4)) {\n case 0:\n case 1: {\n u32 i;\n for (i = 0; i < 3; i++) {\n *(u8*)(base4000 + i + 0x702) = 1;\n }\n *(u8*)(base4000 + 0x705) = 0;\n *(u8*)(base4000 + 0x70a) = 0;\n *(u8*)(base4000 + 0x70b) = 0;\n *(u32*)(base4000 + 0x6b4) = 1;\n func_ov006_0210c2d4((u8*)(r4 + 0x4660));\n if (*(u8*)(r4 + 0xc4) == 0) {\n *(u8*)(r4 + 0xc3) = 1;\n *(u8*)(r4 + 0xc4) = 1;\n *(u16*)(r4 + 0xc0) = 0;\n }\n *(u8*)(base4000 + 0x70c) = 0x3c;\n break;\n }\n case 2: {\n if (DecIfAbove0_Byte((u8*)(r4 + 0x470c)) == 0) {\n Sound_PlayBank2_2D(0x160);\n *(u8*)(base4000 + 0x70c) = 0x1e;\n *(u32*)(base4000 + 0x6b4) = 2;\n }\n break;\n }\n case 3: {\n if (DecIfAbove0_Byte((u8*)(r4 + 0x470c)) == 0) {\n *(u32*)(base4000 + 0x6b4) = 3;\n }\n break;\n }\n case 4: {\n u32 flag = 0;\n u32 i;\n for (i = 0; i < 3; i++) {\n if (*(u8*)(r4 + i + 0x4702) == 1) {\n u32 p = r4 + 0x46a4 + i * 4;\n if (*(u32*)p != 0) {\n u32 v = *(u8*)(base4000 + 0x708) + i;\n s32 diff = *(s32*)p - *(s32*)(&data_ov006_0213e600 + v);\n *(s32*)p = diff;\n if (diff < 0) {\n if (*(u8*)(r4 + i + 0x4702) == 1) {\n u8 n = *(u8*)(r4 + i + 0x46ff) + 1;\n *(u8*)(r4 + i + 0x46ff) = n - (n / 21) * 21;\n *(u32*)p += 0x40000;\n flag++;\n } else {\n *(u32*)p = 0;\n }\n }\n }\n }\n }\n if (flag != 0) {\n *(u32*)(base4000 + 0x6b0) = func_020124c4(*(u32*)(base4000 + 0x6b0), 2, 0x161, 0);\n if (*(u8*)(base4000 + 0x705) < 3) {\n u8 idx = data_020a0e40;\n if (*(u8*)(&data_020a0de8 + idx * 4) != 0 &&\n *(u8*)(&data_020a0de9 + idx * 4) != 0) {\n u8 *arr = &data_020a0de8 + idx * 4;\n u8 sb = arr[2];\n u8 r6 = arr[3];\n u32 j;\n for (j = 0; j < 3; j++) {\n if (*(u8*)(r4 + j + 0x4702) == 1) {\n s16 x = sb - *(s16*)((u8*)&data_ov006_0213e63c + j * 8);\n s16 y = r6 - *(s16*)((u8*)&data_ov006_0213e63c + j * 8 + 4);\n if (x <= 0x20 && x >= -0x20 && y <= 0x20 && y >= -0x20) {\n *(u8*)(r4 + j + 0x4702) = 0;\n *(u8*)(r4 + 0x4705) += 1;\n if (*(u8*)(base4000 + 0x671) != 0) {\n *(u8*)(base4000 + 0x671) = 0;\n func_ov004_020ad79c(*(u32*)(r4 + 0xa8), *(u32*)(r4 + 0xb4));\n }\n func_02012718((void*)0x162, *(s32*)(&data_ov006_0213e63c + j * 2) << 12);\n return;\n }\n }\n }\n }\n } else {\n u32 all_zero = 1;\n u32 k;\n for (k = 0; k < 3; k++) {\n if (*(u32*)(r4 + 0x46a4 + k * 4) != 0) {\n all_zero = 0;\n }\n }\n if (all_zero) {\n u8 res = func_ov006_0210c500(r4);\n *(u8*)(r4 + 0x470a) = res;\n *(u32*)(base4000 + 0x6b8) = 0;\n if (res != 0) {\n u8 r2 = *(u8*)(r4 + 0x4709);\n *(u32*)(base4000 + 0x46b8) += *(u8*)(&data_ov006_0213e4d8 + r2);\n if (*(u8*)(r4 + 0x470b) != 0 && *(u8*)(r4 + 0x470b) < 3) {\n *(u32*)(base4000 + 0x46b8) += *(u8*)(r4 + 0x470b) * 2;\n }\n func_ov004_020ad79c(*(u32*)(r4 + 0xa8) + *(u32*)(base4000 + 0x6b8) * *(u32*)(base4000 + 0x67c), *(u32*)(r4 + 0xb4));\n *(u32*)(base4000 + 0x6b4) = 4;\n *(u8*)(base4000 + 0x70c) = 0x3c;\n }\n }\n }\n }\n break;\n }\n case 5: {\n if (DecIfAbove0_Byte((u8*)(r4 + 0x470c)) == 0) {\n if (*(u8*)(r4 + 0x470a) != 0) {\n u8 r1 = *(u8*)(r4 + 0x4709);\n func_ov006_0210c218((u8*)(r4 + 0x4684), *(s16*)(&data_ov006_0213e654 + r1), *(s16*)(&data_ov006_0213e656 + r1));\n }\n if (*(u8*)(r4 + 0x470b) != 0 && *(u8*)(r4 + 0x470b) < 3) {\n u8 r0 = *(u8*)(r4 + 0x470b) - 1;\n func_ov006_0210c218((u8*)(r4 + 0x4690), *(s16*)(&data_ov006_0213e4f8 + r0), *(s16*)(&data_ov006_0213e4fa + r0));\n }\n if (*(u32*)(base4000 + 0x6b8) != 0) {\n *(u32*)(base4000 + 0x6b4) = 5;\n *(u8*)(base4000 + 0x70c) = 0x64;\n func_ov006_0210c180((u8*)(r4 + 0x469c));\n func_02012790(0x26);\n } else {\n *(u32*)(base4000 + 0x6b4) = 7;\n *(u8*)(base4000 + 0x70c) = 0x3c;\n func_02012790(0xe);\n *(u8*)(r4 + 0xc3) = 0;\n }\n }\n break;\n }\n case 6: {\n if (DecIfAbove0_Byte((u8*)(r4 + 0x470c)) == 0) {\n func_ov006_0210c2c0((u32*)(r4 + 0x4660), *(s32*)(base4000 + 0x6b8));\n *(u8*)(base4000 + 0x70c) = 0x3c;\n *(u32*)(base4000 + 0x6b4) = 6;\n }\n break;\n }\n case 7: {\n if (*(u32*)(r4 + 0x4680) == 0) {\n func_ov004_020adb1c(*(u32*)(r4 + 0xa8));\n }\n if (DecIfAbove0_Byte((u8*)(r4 + 0x470c)) == 0) {\n (*(vfunc2*)*(u32*)*(u32*)(r4 + 0x4660))(r4, 4);\n }\n break;\n }\n case 8: {\n if (DecIfAbove0_Byte((u8*)(r4 + 0x470c)) == 0) {\n if (*(u32*)(r4 + 0xa8) > 0) {\n (*(vfunc2*)*(u32*)*(u32*)(r4 + 0x4660))(r4, 5);\n }\n }\n break;\n }\n case 9: {\n u32 i;\n u32 p = r4;\n for (i = 0; i < 3; i++) {\n *(u32*)(p + 0x46a4 + i * 4) += 0x40000;\n u8 n = *(u8*)(p + i + 0x46ff) + 1;\n *(u8*)(p + i + 0x46ff) = n - (n / 21) * 21;\n *(u8*)(p + *(u8*)p + *(u8*)(p + i + 0x46ff) + 0x46c0) = 0xd;\n p += 0x15;\n }\n *(u32*)(base4000 + 0x6b4) = 9;\n break;\n }\n case 10: {\n u32 idx = (*(u32*)(base4000 + 0x6b4) - 9) >> 1;\n u32 p = r4 + 0x46a4 + idx * 4;\n *(s32*)p -= 0x2000;\n if (*(s32*)p < 0) {\n *(u32*)p = 0;\n *(u8*)(base4000 + 0x70c) = 0xa;\n *(u32*)(base4000 + 0x6b4) += 1;\n func_02012718((void*)0x164, *(s32*)(&data_ov006_0213e63c + idx * 2) << 12);\n if (idx == 0) {\n func_ov004_020ae274((void*)2);\n }\n }\n break;\n }\n case 11: {\n u32 p = r4 + 0x46ac;\n *(s32*)p -= 0x2000;\n if (*(s32*)p < 0) {\n *(u32*)p = 0;\n *(u8*)(base4000 + 0x70c) = 0x3c;\n *(u32*)(base4000 + 0x6b4) = 8;\n func_02012718((void*)0x164, *(s32*)(&data_ov006_0213e63c + 2) << 12);\n }\n break;\n }\n case 12: {\n if (DecIfAbove0_Byte((u8*)(r4 + 0x470c)) == 0) {\n Scene_SetFaders(&data_0209f61c);\n func_0202ec9c(&data_0209f61c, 2);\n Scene_StartSceneFade(5, 0, 0);\n }\n break;\n }\n case 13: {\n if (DecIfAbove0_Byte((u8*)(r4 + 0x470c)) == 0) {\n *(u32*)(base4000 + 0x46b4) += 1;\n }\n (*(vfunc0*)*(u32*)*(u32*)(r4 + 0x4660))();\n func_ov006_0210c278((u8*)(r4 + 0x4684));\n func_ov006_0210c278((u8*)(r4 + 0x4690));\n func_ov006_0210c1a8((u32*)(r4 + 0x469c));\n return;\n }\n }\n}\n", "source": "fanout-glm-5.2"} {"module": "arm9", "addr": "0x02047910", "name": "func_02047910", "size": 2340, "target_hex": "f04f2de9c4d04de200008de50c0090e50170a0e184008de500009de50260a0e1101090e584008de288108de500109de50350a0e1141091e58c108de50c1097e590108de5101097e594108de5141097e598108de55e2f00eb0080a0e190008de25b2f00eb089040e084a09de590109de595c9cbe00a3041e09593c3e088209de594009de58c109de5020040e098409de595e0c0e0014044e008008de59544c0e010008de5020ba0e300c09ce000b0abe2009099e00c408de52cc6a0e10bca8ce10030a3e22996a0e1039a89e109308ae000a09ee008909de52aa6a0e10090a9e209aa8ae10aa082e00c209de50c8088e0009092e010209de52996a0e10020a2e2029a89e1099081e0a8308de59323c1e0aca08de59acacbe099a9c3e000a09ae0b0908de50090a3e22a36a0e1093a83e1009092e00020a1e200109ce02996a0e10000abe22116a0e1029a89e1001a81e1010089e0000093e0c54fa0e1c4d08d02f04fbd081eff2f01a8008de20010a0e1992e00eba8009de5021ba0e39038c2e0013093e00000a2e22326a0e1002a82e10c2086e5ac209de584008de29298c3e0019099e00020a3e22936a0e1023a83e1103086e5b0209de59288c3e0012098e00010a3e22226a0e1012a82e100109de5142086e5001091e584108de500109de5041091e588108de500109de5081091e58c108de5001097e590108de5041097e594108de5081097e598108de5f02e00eb0080a0e190008de2ed2e00eb08a040e084009de590109de594b09de5003041e0c31fa0e118108de588109de514008de51c108de51c209de5ca9fa0e102204be0c2bfa0e120b08de595ca8be095b92be094ba2be0020ba0e300a09ce00090abe22aa6a0e109aa8ae18c109de598e09de50a8088e001a04ee0ca9fa0e124908de518909de595c38be095b92be000909ce094b32be00030abe22996a0e1039a89e114309de5099083e099e9c3e070308de59c908de520309de595b289e0959329e000309be0949229e00020a9e22336a0e1023a83e11c209de595ca8be0032082e0a0208de59292c3e024209de595b22be094ba2be000a09ce00020abe22aa6a0e102aa8ae10aa081e09a2ac1e0a4a08de500a092e00020a1e22a16a0e1021a81e170209de500b09ee000a0a2e2002099e02b96a0e10000a3e22226a0e10a9a89e1002a82e1020089e0000091e0c4d08d02f04fbd081eff2f019c008de20010a0e1192e00eb9c009de5021ba0e39038c2e0013093e00000a2e22326a0e1002a82e1002086e5a0209de584008de29298c3e0019099e00020a3e22936a0e1023a83e1043086e5a4209de59288c3e0012098e00010a3e22226a0e1012a82e100109de5082086e5181091e584108de500109de51c1091e588108de500109de5201091e58c108de5181097e590108de51c1097e594108de5201097e598108de5702e00eb28008de590008de26d2e00eb28109de594b09de501a040e084009de590109de52c008de5008041e0c80fa0e130008de588009de5ca9fa0e134008de534109de5022ba0e301104be0c1bfa0e138b08de595ca8be095b92be094ba2be002a09ce00090abe22aa6a0e109aa8ae128909de595c88be00a9089e004908de530909de58c009de595b92be002909ce094b82be00080abe22996a0e1089a89e12c809de598e09de5099088e000a04ee038809de595c18be095b82be002809ce094b12be00010abe22886a0e1018a88e134109de5caefa0e1088081e095ba81e0951e21e0941a21e002a09be00010a1e22aa6a0e101aa8ae10aa080e09a1ac0e0021091e00000a0e221b6a0e100ba8be19919c0e0021091e00000a0e22116a0e1001a81e19808cce0020090e000c0ace22006a0e10c0a80e1000081e0b4908de5b8808de5bca08de500009be0c4d08d020030a0e3f04fbd081eff2f01ac009de5b0109de53c008de53cb09de5a8009de50b8048e000b049e03c909de501c04ae099accee002909ae003a0aee02996a0e10a9a89e190eccae040a08de591a8cce002a09ae003c0ace02aa6a0e10caa8ae10aa049e09098c8e048808de5ca8fa0e144908de54c808de5918bc9e0028098e00390a9e02886a0e1098a88e102909ee040c09de52996a0e103c0ace00c9a89e1099048e044809de548c09de5028098e003c0ace02886a0e10c8a88e13cc09de59ca08de59cbbcee002b09be003c0aee02bb6a0e10cba8be10b8048e098c8cbe002c09ce02cc6a0e103b0abe074c08de50bba8ce174b08de59abacce002b09be003c0ace050c08de52bc6a0e150b09de5a0908de50bca8ce199e9cbe002e09ee058b08de503b0abe02ee6a0e10bea8ee154b08de574b09de50ec08ce0a4808de50cb09be0c4d08d02f04fbd081eff2f013cb09de508c041e009e04be00ab040e0ce0fa0e15c008de5cc0fa0e160008de5990cc1e0020090e02006a0e10310a1e078008de5010a80e178008de5991bc0e06c008de568108de5980bc1e064108de5989ec1e0028099e00310a1e02886a0e1018a88e178109de55cb09de5081041e0028090e064009de52886a0e10300a0e0008a88e19191c0e07c908de560909de5b4108de580008de59a1c80e09a0920e04c909de5021091e0990c20e00300a0e02116a0e1001a81e1018048e0b8808de59818c0e09a9e88e09a8b28e04ca09de59a8e28e002a099e00390a8e02a86a0e1098a88e168909de502a099e06c909de52aa6a0e10390a9e009aa8ae10aa048e09a9ac8e0029099e0bca08de50380a8e02996a0e1089a89e17c809de580a09de5028098e003a0aae0021091e02826a0e10300a0e02116a0e10a2a82e1001a81e1010082e0000099e0c4d08d02f04fbd081eff2f01b4008de20010a0e1f32c00ebb4209de504009de5021ba0e39230c0e0012093e00000a0e22226a0e1002a82e1182086e5b8209de504009de59230c0e0012093e00000a0e22226a0e1002a82e11c2086e5bc209de504009de59230c0e0012093e00000a0e22226a0e1002a82e1202086e500009de5242097e5240090e5003042e0c32fa0e1959388e0958228e0948328e0013099e00020a8e22336a0e1023a83e1030080e0240086e500009de5282097e5280090e5003042e0c32fa0e1959388e0958228e0948328e0013099e00020a8e22336a0e1023a83e1030080e0280086e500009de52c8090e52c0097e5082040e0957283e0c20fa0e1953023e0011097e0943223e00000a3e22116a0e1001a81e1010088e02c0086e5c4d08de2f04fbde81eff2fe1", "lang": "c", "divergences": 814, "c_source": "\nstruct Vec3 {\n int x;\n int y;\n int z;\n};\n\nextern int LenVec3(struct Vec3 *v);\nextern void NormalizeVec3(struct Vec3 *dst, struct Vec3 *src);\n\nvoid func_02047910(int *param_1, int *param_2, int *param_3, unsigned param_4)\n{\n struct Vec3 a;\n struct Vec3 b;\n struct Vec3 yUnit;\n struct Vec3 xVec;\n struct Vec3 cross1;\n struct Vec3 cross2;\n int lenA;\n int lenB;\n int dx;\n int dy;\n int dz;\n int dlen;\n int zx;\n int zy;\n int zz;\n int len_sq;\n\n /* ---- column 1 (Y axis / indices 3..5) ---- */\n a.x = param_1[3];\n a.y = param_1[4];\n a.z = param_1[5];\n b.x = param_2[3];\n b.y = param_2[4];\n b.z = param_2[5];\n lenA = LenVec3(&a);\n lenB = LenVec3(&b);\n yUnit.x = a.x + (int)(((long long)(int)param_4 * (b.x - a.x) + 0x800) >> 12);\n yUnit.y = a.y + (int)(((long long)(int)param_4 * (b.y - a.y) + 0x800) >> 12);\n lenA = lenA + (int)(((long long)(int)param_4 * (lenB - lenA) + 0x800) >> 12);\n yUnit.z = a.z + (int)(((long long)(int)param_4 * (b.z - a.z) + 0x800) >> 12);\n len_sq = (int)(((long long)yUnit.z * yUnit.z + 0x800) >> 12) +\n (int)(((long long)yUnit.x * yUnit.x + 0x800) >> 12) +\n (int)(((long long)yUnit.y * yUnit.y + 0x800) >> 12);\n if (len_sq == 0) {\n return;\n }\n NormalizeVec3(&yUnit, &yUnit);\n param_3[3] = (int)(((long long)yUnit.x * lenA + 0x800) >> 12);\n param_3[4] = (int)(((long long)yUnit.y * lenA + 0x800) >> 12);\n param_3[5] = (int)(((long long)yUnit.z * lenA + 0x800) >> 12);\n\n /* ---- column 0 (X axis / indices 0..2) ---- */\n a.x = param_1[0];\n a.y = param_1[1];\n a.z = param_1[2];\n b.x = param_2[0];\n b.y = param_2[1];\n b.z = param_2[2];\n lenA = LenVec3(&a);\n lenB = LenVec3(&b);\n dlen = lenB - lenA;\n dx = b.x - a.x;\n dy = b.y - a.y;\n lenA = lenA + (int)(((long long)dlen * (int)param_4 + 0x800) >> 12);\n xVec.x = a.x + (int)(((long long)dx * (int)param_4 + 0x800) >> 12);\n dz = b.z - a.z;\n xVec.y = a.y + (int)(((long long)dy * (int)param_4 + 0x800) >> 12);\n xVec.z = a.z + (int)(((long long)dz * (int)param_4 + 0x800) >> 12);\n len_sq = (int)(((long long)xVec.z * xVec.z + 0x800) >> 12) +\n (int)(((long long)xVec.x * xVec.x + 0x800) >> 12) +\n (int)(((long long)xVec.y * xVec.y + 0x800) >> 12);\n if (len_sq == 0) {\n return;\n }\n NormalizeVec3(&xVec, &xVec);\n param_3[0] = (int)(((long long)xVec.x * lenA + 0x800) >> 12);\n param_3[1] = (int)(((long long)xVec.y * lenA + 0x800) >> 12);\n param_3[2] = (int)(((long long)xVec.z * lenA + 0x800) >> 12);\n\n /* ---- column 2 (Z): lerp, then Cross(Cross(Y, Z), Y) ---- */\n a.x = param_1[6];\n a.y = param_1[7];\n a.z = param_1[8];\n b.x = param_2[6];\n b.y = param_2[7];\n b.z = param_2[8];\n lenA = LenVec3(&a);\n lenB = LenVec3(&b);\n dlen = lenB - lenA;\n dx = b.x - a.x;\n dy = b.y - a.y;\n lenA = lenA + (int)(((long long)dlen * (int)param_4 + 0x800) >> 12);\n zx = a.x + (int)(((long long)dx * (int)param_4 + 0x800) >> 12);\n dz = b.z - a.z;\n zy = a.y + (int)(((long long)dy * (int)param_4 + 0x800) >> 12);\n zz = a.z + (int)(((long long)dz * (int)param_4 + 0x800) >> 12);\n len_sq = (int)(((long long)zz * zz + 0x800) >> 12) +\n (int)(((long long)zx * zx + 0x800) >> 12) +\n (int)(((long long)zy * zy + 0x800) >> 12);\n if (len_sq == 0) {\n return;\n }\n\n cross1.x = (int)(((long long)yUnit.y * (zz - yUnit.z) + 0x800) >> 12) -\n (int)(((long long)yUnit.z * (zy - yUnit.y) + 0x800) >> 12);\n cross1.y = (int)(((long long)yUnit.z * (zx - yUnit.x) + 0x800) >> 12) -\n (int)(((long long)yUnit.x * (zz - yUnit.z) + 0x800) >> 12);\n cross1.z = (int)(((long long)yUnit.x * (zy - yUnit.y) + 0x800) >> 12) -\n (int)(((long long)yUnit.y * (zx - yUnit.x) + 0x800) >> 12);\n\n if ((int)(((long long)cross1.z * cross1.z + 0x800) >> 12) +\n (int)(((long long)cross1.x * cross1.x + 0x800) >> 12) +\n (int)(((long long)cross1.y * cross1.y + 0x800) >> 12) != 0) {\n dz = yUnit.z - cross1.z;\n dy = yUnit.y - cross1.y;\n cross2.x = (int)(((long long)cross1.y * dz + 0x800) >> 12) -\n (int)(((long long)cross1.z * dy + 0x800) >> 12);\n cross2.y = (int)(((long long)cross1.z * (yUnit.x - cross1.x) + 0x800) >> 12) -\n (int)(((long long)dz * cross1.x + 0x800) >> 12);\n cross2.z = (int)(((long long)dy * cross1.x + 0x800) >> 12) -\n (int)(((long long)cross1.y * (yUnit.x - cross1.x) + 0x800) >> 12);\n\n if ((int)(((long long)cross2.z * cross2.z + 0x800) >> 12) +\n (int)(((long long)cross2.x * cross2.x + 0x800) >> 12) +\n (int)(((long long)cross2.y * cross2.y + 0x800) >> 12) != 0) {\n NormalizeVec3(&cross2, &cross2);\n param_3[6] = (int)(((long long)cross2.x * lenA + 0x800) >> 12);\n param_3[7] = (int)(((long long)cross2.y * lenA + 0x800) >> 12);\n param_3[8] = (int)(((long long)cross2.z * lenA + 0x800) >> 12);\n\n /* translation \u2014 only on full success path (matches Ghidra) */\n param_3[9] = param_1[9] +\n (int)(((long long)(param_2[9] - param_1[9]) * (int)param_4 + 0x800) >> 12);\n param_3[10] = param_1[10] +\n (int)(((long long)(param_2[10] - param_1[10]) * (int)param_4 + 0x800) >> 12);\n param_3[11] = param_1[11] +\n (int)(((long long)(param_2[11] - param_1[11]) * (int)param_4 + 0x800) >> 12);\n return;\n }\n return;\n }\n return;\n}\n", "source": "ghidra-full-20260723"} {"module": "ov006", "addr": "0x020e1dc8", "name": "func_ov006_020e1dc8", "size": 756, "target_hex": "f04f2de914d04de201b0a0e12c10a0e39b0101e010108de500008de50010a0e110009de5bc229fe5001081e0b8029fe500709de5026081e0005081e000a0a0e3010987e28916d0e5000051e39e00000a0a005be19c00000a642690e5001095e5603690e5010042e04086a0e1980800e0001096e5011043e04196a0e1990920e0c01fa0e13c6efdeb0040a0e10800a0e10910a0e19e65fdeb0008a0e1180054e32008a0e1880000ca4002a0e180b0a0e101008be234629fe58000a0e1f04096e11a00a0e32c10a0e3943087e09a010ce00090a0e3021ba0e3013093e02386a0e18b30a0e1fc519fe500209de5947927e010b09de5052082e00bb082e00cb08de50cb082e004b08de5c4bfa0e19b7027e00040a7e2048a88e110409de500b09de5044092e710709de5084684e00c4082e707708be0012987e2f33096e10b70a0e10c7087e064e692e59c419fe50b60a0e1048086e00c6088e008608de50b60a0e1055087e004b087e0937084e0011097e0934924e0c32fa0e1924024e00000a4e22116a0e1001a81e101068ee00c0088e7010986e28916d0e5000051e34300000a09005ae14100000a642690e500109be5603690e5010042e04076a0e1970700e0001095e5011043e04186a0e1980820e0c01fa0e1e86dfdeb0040a0e10700a0e10810a0e14a65fdeb0008a0e1180054e32008a0e12d0000ca4002a0e18010a0e1012081e2e4009fe58220a0e1f27090e11a40a0e30050a0e397a488e0978528e000209de52c30a0e3992326e0c72fa0e1928428e0023ba0e304209de503909ae00070a8e22986a0e1002092e5078a88e1087682e0012986e2607682e58110a0e1f16090e108009de5968487e0038098e0001090e5967527e0c63fa0e1937427e00030a7e22846a0e1034a84e1041681e0641682e50c109de5e800a0e3001091e5aac1fceb14d08de2f04fbde81eff2fe1019089e2050059e32c6086e2b3ffffba14d08de2f04fbde81eff2fe101a08ae205005ae32c7087e258ffffba14d08de2f04fbde81eff2fe1604600006446000014220802", "lang": "c", "divergences": 999, "c_source": "typedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef short s16;\n\nextern int _ZN4cstd4sqrtEy(unsigned long long v);\nextern int _ZN4cstd5atan2E5Fix12IiES1_(int a, int b);\nextern void func_02012718(int id, int x);\nextern s16 data_02082214[];\n\nvoid func_ov006_020e1dc8(char *c, int idx)\n{\n int i;\n char *w;\n int *selfx;\n int *selfz;\n int *px;\n int *pz;\n int *sx;\n int n;\n\n *(volatile int *)&n = idx * 0x2c;\n selfx = (int *)(c + n + 0x4660);\n selfz = (int *)(c + n + 0x4664);\n w = c;\n for (i = 0; i < 5; i++, w += 0x2c) {\n if (*(u8 *)(w + 0x4689) != 0 && idx != i) {\n int dz = (*(int *)(w + 0x4664) - *selfz) >> 12;\n int dx = (*(int *)(w + 0x4660) - *selfx) >> 12;\n int dist = _ZN4cstd4sqrtEy((long long)(dx * dx + dz * dz));\n u16 ang = _ZN4cstd5atan2E5Fix12IiES1_(dz, dx);\n if (dist <= 0x18) {\n int s1;\n int m;\n int *qx;\n int *qz;\n char *w2;\n int k;\n int s2;\n idx = (ang >> 4) * 2;\n s1 = data_02082214[idx + 1];\n m = i * 0x2c;\n k = 0;\n *(int * volatile *)&sx = (int *)(c + 0x4660 + n);\n *(int * volatile *)&px = (int *)(c + 0x4660 + m);\n *(int *)(c + 0x4660 + m) = *sx + ((int)(((long long)s1 * 0x1a + 0x800) >> 12) << 12);\n s2 = data_02082214[idx];\n *(int * volatile *)&pz = (int *)(c + 0x4664 + m);\n w2 = c;\n qx = (int *)(c + m + 0x4660);\n qz = (int *)(c + m + 0x4664);\n *(int *)(c + 0x4664 + m) = *(int *)(c + n + 0x4664) + ((int)(((long long)s2 * 0x1a + 0x800) >> 12) << 12);\n for (; k < 5; k++, w2 += 0x2c) {\n if (*(u8 *)(w2 + 0x4689) != 0 && i != k) {\n int dz2 = (*(int *)(w2 + 0x4664) - *qz) >> 12;\n int dx2 = (*(int *)(w2 + 0x4660) - *qx) >> 12;\n int dist2 = _ZN4cstd4sqrtEy((long long)(dx2 * dx2 + dz2 * dz2));\n u16 ang2 = _ZN4cstd5atan2E5Fix12IiES1_(dz2, dx2);\n if (dist2 <= 0x18) {\n int j2 = (ang2 >> 4) * 2;\n int s3 = data_02082214[j2 + 1];\n *(int *)(c + k * 0x2c + 0x4660) = *px + ((int)(((long long)s3 * 0x1a + 0x800) >> 12) << 12);\n {\n int s4 = data_02082214[j2];\n *(int *)(c + k * 0x2c + 0x4664) = *pz + ((int)(((long long)s4 * 0x1a + 0x800) >> 12) << 12);\n }\n func_02012718(0xe8, *sx);\n return;\n }\n }\n }\n return;\n }\n }\n }\n}\n", "source": "fable-subagent", "note": "Nested 5-slot repulsion: loop1 pushes slot i away from slot idx (sin/cos*0x1a via 64-bit rounded umull+mla), nested loop2 pushes slot k away from slot i, sound 0xe8 + early return. Logic fully decoded and check-blocks align; residual is the push-block spill schedule: ROM spills {c@sp0, px@4, pz@8, sx@0xc, n@0x10} and homes idx/j in fp, table in r6, k=0 merged with the umull zero. Load-bearing discoveries: volatile-cast store (*(volatile int*)&n = ...) forces the eager plain spill without volatile-read reloads (plain volatile double-reloads, int n[1] scalar-replaces); dist expr must be spelled dx*dx+dz*dz to get ROM mul(dz)/mla(dx) order (mwcc muls the LAST product first); x-read must be *sx (copy-propagated to [r2,r4]); z-read inline (c+n+0x4664) split form; decl order px,pz,sx before n reproduces slot order. Remaining: candidate 184 vs 189 insns - fewer spill reloads, j homes caller-saved. Try: forcing sx/px/pz reload scheduling or C++ frontend."} -{"module": "ov006", "addr": "0x020d27dc", "name": "func_ov006_020d27dc", "size": 3656, "target_hex": "f04f2de964d04de20090a0e1011989e2c82691e50040a0e3000052e30a0000dae40d9fe5042189e0003082e0002093e5014084e2000052e3012042c2002083c5c82691e5020054e1f5ffffba000052e30080a0e364d08dd2f04fbdd81eff2fd1d700a0e320008de5cf00a0e31c008de5c700a0e318008de5bf00a0e314008de5e000a0e310008de50200a0e334008de50500a0e330008de50700a0e338008de5070da0e30c808de560808de55c808de558808de554808de550808de54c808de548808de544808de540808de50160a0e304b0a0e30640a0e324008de50350a0e33c808de52c808de528808de5080189e0010980e2b80690e5000050e33a0300ca080d9fe5887189e0002087e0010989e2001092e5000790e5000051e15e0100daec0c9fe5081089e0000081e008008de50000d0e5010050e32b03000a0900a0e1001090e50ca09de5901091e531ff2fe1000050e33100000ab81c9fe50720a0e1017082e0080189e0001097e5010980e2a40690e5600051e3040000ca600051e3110000aa200051e30800000a4f0000eaa00051e3020000caa00051e31100000a4a0000eae00051e31500000a470000ea011989e2141791e5000051e1050a891206a0a0019863c015400000ea011989e2181791e5000051e1050a891206a0a0019963c015390000ea011989e21c1791e5000051e1050a891206a0a0019a63c015320000ea011989e2201791e5000051e1050a891206a0a0019b63c0152b0000eaf00b9fe50000b7e7600050e3040000ca600050e3110000aa200050e30800000a220000eaa00050e3020000caa00050e31100000a1d0000eae00050e31500000a1a0000ea010989e2140790e5010050e3050a891206a0a0019863c015130000ea010989e2180790e5010050e3050a891206a0a0019963c0150c0000ea010989e21c0790e5010050e3050a891206a0a0019a63c015050000ea010989e2200790e5010050e3050a891206a0a0019b63c01501005ae3b300001a0900a0e1001090e5901091e531ff2fe1000050e35300000a010989e2d506d0e5000050e32100001a001097e510009de50116a0e10afffceb080189e0010980e2a40690e5030050e300f18f901b0000ea020000ea060000ea0a0000ea0e0000ea001097e514009de50116a0e1fcfefceb120000ea001097e518009de50116a0e1f7fefceb0d0000ea001097e51c009de50116a0e1f2fefceb080000ea001097e520009de50116a0e1edfefceb030000ea001097e5880a9fe50116a0e1e8fefceb08009de50060c0e5780a9fe5002089e0001092e5010989e2011081e2001082e5cc2690e5c81690e5010052e1880200bad506d0e5000050e31400001a480a9fe5481a9fe5003089e0000093e5012089e0010080e2000083e5001092e5050a89e2011081e2001082e5e82390e5201a9fe564d08de2010052e1e81380c5050a89e27810a0e3e01380e5f04fbde81eff2fe1050a89e21e10a0e3e01380e564d08de2f04fbde81eff2fe1d0099fe5881189e0007081e0001097e510009de50116a0e1b7fefceb001097e5c8099fe50116a0e1b3fefceb08009de50060c0e5a4099fe5002089e0001092e5010989e2011081e2001082e5cc1690e5c80690e5000051e1530200ba80099fe580199fe5003089e0000093e5012089e0010080e2000083e5001092e5050a89e2011081e2001082e5e82390e558199fe5010052e1e81380c5050a89e2d42390e51c10a0e3920103e044199fe5031091e7000051e31200000a010051e30600000a020051e32c099f0500108900000091050500800200008105090000ea740390e5a01fa0e1800f61e0e00f91e00400001a00099fe5001089e0000091e5050080e2000081e5050a89e2681390e5640051e36410a0c3681380c5050a89e2741390e5050051e3090000ba3c10a0e3c01380e5010989e20210a0e3d01680e50110a0e3d416c0e564d08de2f04fbde81eff2fe1010989e20010a0e3d01680e564d08de2f04fbde81eff2fe10900a0e1001090e5901091e531ff2fe1000050e32500000a0500a0e30500fdeb010989e2d506d0e5000050e30600001a880189e0010980e2601690e550089fe50116a0e152fefceb050000ea880189e0010980e2601690e514089fe50116a0e14bfefceb08009de50120a0e30020c0e5010989e2fc179fe5d526c0e5012089e0001092e564d08de2011081e2001082e5cc1690e5c80690e5000051e1050a89a23c10a0a3e01380a5f04fbde81eff2fe1880189e0010980e2601690e5e100a0e30116a0e132fefceb050a89e23c10a0e3c01380e5010989e20210a0e3d01680e50110a0e3d516c0e564d08de2f04fbde81eff2fe1bf30e0e3030051e1010000ba980051e3030000ba000092e5010080e2000082e5ca0100ea78379fe5087089e003a087e00030dae5010053e30c00008a010081e2000082e50900a0e10810a0e10520a0e1cbfdffeb000050e3bc01001a0900a0e10810a0e10b20a0e1c5fdffebb70100ead42081e2d41080e27d0fa0e3920000e0399ffceb04008de518079fe5081189e0007081e0000097e5070050e300f18f90aa0100ea060000ea410000ea5f0000ea9a0000ead40000ea0e0100ea490100ea670100ea880189e0010980e2600690e5210050e30500000a610050e30300000aa10050e30100000ae10050e31000001a84069fe5881189e00000b1e7010040e2000081e5004087e50060cae5000091e50006a0e1d5fdfceb00008de504309de524009de528209de50410a0e1c0fdfceb860100ea2c209de50900a0e10810a0e18ffdffeb000050e38001001a0900a0e10810a0e10620a0e189fdffeb000050e37a01001a0900a0e10810a0e10520a0e183fdffeb000050e37401001a30209de50900a0e10810a0e17dfdffeb000050e36e01001a34209de50900a0e10810a0e177fdffeb000050e338009d0500008705660100ea0900a0e10810a0e10620a0e16ffdffeb000050e36001001a3c209de50900a0e10810a0e169fdffeb000050e35a01001a34209de50900a0e10810a0e163fdffeb000050e35401001a0900a0e10810a0e10520a0e15dfdffeb000050e34e01001a0900a0e10810a0e10b20a0e157fdffeb000050e300408705470100ea880189e0010980e2600690e51f0050e30500000a5f0050e30300000a9f0050e30100000adf0050e31000001a18059fe5881189e00000b1e7010080e2000081e5004087e50060cae5000091e50006a0e17afdfceb00008de504309de524009de540209de50410a0e165fdfceb2b0100ea34209de50900a0e10810a0e134fdffeb000050e32501001a0900a0e10810a0e10620a0e12efdffeb000050e31f01001a0900a0e10810a0e10b20a0e128fdffeb000050e31901001a44209de50900a0e10810a0e122fdffeb000050e31301001a38209de50900a0e10810a0e11cfdffeb000050e330009d05000087050b0100ea880189e0010980e2600690e5210050e30500000a610050e30300000aa10050e30100000ae10050e31000001a28049fe5881189e00000b1e7010040e2000081e5004087e50060cae5000091e50006a0e13efdfceb00008de504309de524009de548209de50410a0e129fdfcebef0000ea0900a0e10810a0e10520a0e1f8fcffeb000050e3e900001a4c209de50900a0e10810a0e1f2fcffeb000050e3e300001a30209de50900a0e10810a0e1ecfcffeb000050e3dd00001a0900a0e10810a0e10620a0e1e6fcffeb000050e3d700001a0900a0e10810a0e10420a0e1e0fcffeb000050e300b08705d00000ea880189e0010980e2600690e51f0050e30500000a5f0050e30300000a9f0050e30100000adf0050e31000001a3c039fe5881189e00000b1e7010080e2000081e5004087e50060cae5000091e50006a0e103fdfceb00008de504309de524009de550209de50410a0e1eefcfcebb40000ea0900a0e10810a0e10b20a0e1bdfcffeb000050e3ae00001a34209de50900a0e10810a0e1b7fcffeb000050e3a800001a38209de50900a0e10810a0e1b1fcffeb000050e3a200001a0900a0e10810a0e10620a0e1abfcffeb000050e39c00001a0900a0e10810a0e10420a0e1a5fcffeb000050e300508705950000ea880189e0010980e2600690e5210050e30500000a610050e30300000aa10050e30100000ae10050e31000001a50029fe5881189e00000b1e7010040e2000081e5004087e50060cae5000091e50006a0e1c8fcfceb00008de504309de524009de554209de50410a0e1b3fcfceb790000ea30209de50900a0e10810a0e182fcffeb000050e37300001a0900a0e10810a0e10420a0e17cfcffeb000050e36d00001a0900a0e10810a0e10520a0e176fcffeb000050e36700001a58209de50900a0e10810a0e170fcffeb000050e36100001a38209de50900a0e10810a0e16afcffeb000050e334009d0500008705590000ea0900a0e10810a0e10420a0e162fcffeb000050e35300001a30209de50900a0e10810a0e15cfcffeb000050e34d00001a38209de50900a0e10810a0e156fcffeb000050e34700001a0900a0e10810a0e10520a0e150fcffeb000050e34100001a0900a0e10810a0e10b20a0e14afcffeb000050e3006087053a0000ea880189e0010980e2600690e51f0050e30500000a5f0050e30300000a9f0050e30100000adf0050e31000001ae4009fe5881189e00000b1e7010080e2000081e5004087e50060cae5000091e50006a0e16dfcfceb00008de504309de524009de55c209de50410a0e158fcfceb1e0000ea38209de50900a0e10810a0e127fcffeb000050e31800001a0900a0e10810a0e10420a0e121fcffeb000050e31200001a0900a0e10810a0e10b20a0e11bfcffeb000050e30c00001a30209de50900a0e10810a0e115fcffeb000050e30600001a34209de50900a0e10810a0e10ffcffeb000050e360009d0500008705018088e2010989e2c80690e5000058e1bafcffba64d08de2f04fbde81eff2fe1b846000064460000b446000060460000c3010000cc46000074530000e85300000f270000c1010000c0e1120268530000c20100008046000084460000", "lang": "cpp", "divergences": 184, "c_source": "//cpp\n#pragma opt_strength_reduction off\n#pragma opt_common_subs off\n\ntypedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef unsigned int u32;\ntypedef int s32;\n\nextern \"C\" {\nextern void func_02012718(int a, int b);\nextern void func_02012dbc(int a);\nextern int func_ov006_020d25fc(void *thiz, int idx, u32 val);\nextern int func_020126e8(int a);\nextern void func_020126ac(int a0, int a1, int a2, int a3, int a4);\nextern int data_ov006_0212e1c0[];\n}\n\nstruct Obj {\n virtual void m00(); virtual void m04(); virtual void m08(); virtual void m0c();\n virtual void m10(); virtual void m14(); virtual void m18(); virtual void m1c();\n virtual void m20(); virtual void m24(); virtual void m28(); virtual void m2c();\n virtual void m30(); virtual void m34(); virtual void m38(); virtual void m3c();\n virtual void m40(); virtual void m44(); virtual void m48(); virtual void m4c();\n virtual void m50(); virtual void m54(); virtual void m58(); virtual void m5c();\n virtual void m60(); virtual void m64(); virtual void m68(); virtual void m6c();\n virtual void m70(); virtual void m74(); virtual void m78(); virtual void m7c();\n virtual void m80(); virtual void m84(); virtual void m88(); virtual void m8c();\n virtual int m90();\n};\n\nextern \"C\" void func_ov006_020d27dc(void *arg0)\n{\n char *p = (char *)arg0;\n s32 var_r4;\n s32 idx;\n s32 count;\n\n for (var_r4 = 0; var_r4 < (count = *(s32 *)(p + 0x46c8)); ) {\n s32 *slot = (s32 *)(((long long)(int)(p + var_r4 * 4 + 0x46b8)) & 0xFFFFFFFFFFFFFFFFLL);\n s32 v = *slot;\n var_r4++;\n if (v > 0) {\n *slot = v - 1;\n }\n }\n\n idx = 0;\n if (count <= 0) {\n return;\n }\n\n {\n s32 v20 = 0xd7;\n s32 v1c = 0xcf;\n s32 v18 = 0xc7;\n s32 v14 = 0xbf;\n s32 v10 = 0xe0;\n s32 v34 = 2;\n s32 v30 = 5;\n s32 v38 = 7;\n s32 vC = 0;\n s32 v60 = 0;\n s32 v5c = 0;\n s32 v58 = 0;\n s32 v54 = 0;\n s32 v50 = 0;\n s32 v4c = 0;\n s32 v48 = 0;\n s32 v44 = 0;\n s32 v40 = 0;\n s32 c1 = 1;\n s32 c4 = 4;\n s32 c6 = 6;\n s32 v24 = 0x1c0;\n s32 c3 = 3;\n s32 v3c = 0;\n s32 v2c = 0;\n s32 v28 = 0;\n\n for (idx = 0; idx < *(s32 *)(p + 0x46c8); idx++) {\n if (*(s32 *)(p + idx * 4 + 0x46b8) > 0) {\n continue;\n }\n\n {\n s32 dist = *(s32 *)(p + idx * 8 + 0x4664);\n s32 lim = *(s32 *)(p + 0x4700);\n\n if (dist > lim) {\n u8 *flag = (u8 *)(p + idx + 0x46b4);\n if (*flag != 1) {\n s32 sl = vC;\n s32 *dirSlot;\n s32 dirVal;\n\n if (((struct Obj *)p)->m90() != 0) {\n dirSlot = (s32 *)(p + idx * 8 + 0x4660);\n dirVal = *dirSlot;\n u32 want = *(u32 *)(p + idx * 4 + 0x46a4);\n switch (dirVal) {\n case 0x20:\n if (*(s32 *)(p + 0x4714) == (s32)want) {\n sl = c1;\n } else {\n *(u8 *)(p + 0x5398) = c1;\n }\n break;\n case 0x60:\n if (*(s32 *)(p + 0x4718) == (s32)want) {\n sl = c1;\n } else {\n *(u8 *)(p + 0x5399) = c1;\n }\n break;\n case 0xa0:\n if (*(s32 *)(p + 0x471c) == (s32)want) {\n sl = c1;\n } else {\n *(u8 *)(p + 0x539a) = c1;\n }\n break;\n case 0xe0:\n if (*(s32 *)(p + 0x4720) == (s32)want) {\n sl = c1;\n } else {\n *(u8 *)(p + 0x539b) = c1;\n }\n break;\n }\n } else {\n dirSlot = (s32 *)(p + idx * 8 + 0x4660);\n dirVal = *dirSlot;\n switch (dirVal) {\n case 0x20:\n if (*(s32 *)(p + 0x4714) == 1) {\n sl = c1;\n } else {\n *(u8 *)(p + 0x5398) = c1;\n }\n break;\n case 0x60:\n if (*(s32 *)(p + 0x4718) == 1) {\n sl = c1;\n } else {\n *(u8 *)(p + 0x5399) = c1;\n }\n break;\n case 0xa0:\n if (*(s32 *)(p + 0x471c) == 1) {\n sl = c1;\n } else {\n *(u8 *)(p + 0x539a) = c1;\n }\n break;\n case 0xe0:\n if (*(s32 *)(p + 0x4720) == 1) {\n sl = c1;\n } else {\n *(u8 *)(p + 0x539b) = c1;\n }\n break;\n }\n }\n\n if (sl == 1) {\n if (((struct Obj *)p)->m90() != 0) {\n if (*(u8 *)(p + 0x46d5) == 0) {\n func_02012718(v10, *dirSlot << 0xc);\n u32 w2 = *(u32 *)(p + idx * 4 + 0x46a4);\n switch (w2) {\n default:\n break;\n case 0:\n func_02012718(v14, *dirSlot << 0xc);\n break;\n case 1:\n func_02012718(v18, *dirSlot << 0xc);\n break;\n case 2:\n func_02012718(v1c, *dirSlot << 0xc);\n break;\n case 3:\n func_02012718(v20, *dirSlot << 0xc);\n break;\n }\n } else {\n func_02012718(0x1c3, *dirSlot << 0xc);\n }\n *flag = c1;\n *(s32 *)(p + 0x46cc) += 1;\n if (*(s32 *)(p + 0x46cc) >= *(s32 *)(p + 0x46c8)) {\n if (*(u8 *)(p + 0x46d5) == 0) {\n *(s32 *)(((int)p + 0x5374) & 0xFFFFFFFFFFFFFFFFLL) += 1;\n *(s32 *)(((int)p + 0x53e8) & 0xFFFFFFFFFFFFFFFFLL) += 1;\n if (*(s32 *)(((int)p + 0x53e8) & 0xFFFFFFFFFFFFFFFFLL) > 0x270f) {\n *(s32 *)(((int)p + 0x53e8) & 0xFFFFFFFFFFFFFFFFLL) = 0x270f;\n }\n *(s32 *)(p + 0x53e0) = 0x78;\n return;\n }\n *(s32 *)(p + 0x53e0) = 0x1e;\n return;\n }\n continue;\n }\n\n {\n s32 *d2 = (s32 *)(((int)(p + idx * 8) + 0x4660) & 0xFFFFFFFFFFFFFFFFLL);\n func_02012718(v10, *d2 << 0xc);\n func_02012718(0x1c1, *d2 << 0xc);\n }\n *flag = c1;\n *(s32 *)(p + 0x46cc) += 1;\n if (*(s32 *)(p + 0x46cc) >= *(s32 *)(p + 0x46c8)) {\n s32 t;\n *(s32 *)(((int)p + 0x5374) & 0xFFFFFFFFFFFFFFFFLL) += 1;\n *(s32 *)(((int)p + 0x53e8) & 0xFFFFFFFFFFFFFFFFLL) += 1;\n if (*(s32 *)(((int)p + 0x53e8) & 0xFFFFFFFFFFFFFFFFLL) > 0x270f) {\n *(s32 *)(((int)p + 0x53e8) & 0xFFFFFFFFFFFFFFFFLL) = 0x270f;\n }\n t = *(s32 *)((char *)data_ov006_0212e1c0 + *(s32 *)(p + 0x53d4) * 0x1c);\n switch (t) {\n case 0:\n break;\n case 2:\n *(s32 *)(p + 0x5368) += 5;\n break;\n case 1:\n if ((*(s32 *)(p + 0x5374) % 2) == 0) {\n *(s32 *)(p + 0x5368) += 5;\n }\n break;\n }\n if (*(s32 *)(p + 0x5368) > 0x64) {\n *(s32 *)(p + 0x5368) = 0x64;\n }\n if (*(s32 *)(p + 0x5374) >= 5) {\n *(s32 *)(p + 0x53c0) = 0x3c;\n *(s32 *)(p + 0x46d0) = 2;\n *(u8 *)(p + 0x46d4) = 1;\n return;\n }\n *(s32 *)(p + 0x46d0) = 0;\n return;\n }\n continue;\n }\n\n if (((struct Obj *)p)->m90() != 0) {\n func_02012dbc(5);\n if (*(u8 *)(p + 0x46d5) == 0) {\n func_02012718(0x1c2, *(s32 *)(p + idx * 8 + 0x4660) << 0xc);\n } else {\n func_02012718(0x1c3, *(s32 *)(p + idx * 8 + 0x4660) << 0xc);\n }\n *flag = 1;\n *(u8 *)(p + 0x46d5) = 1;\n *(s32 *)(p + 0x46cc) += 1;\n if (*(s32 *)(p + 0x46cc) >= *(s32 *)(p + 0x46c8)) {\n *(s32 *)(p + 0x53e0) = 0x3c;\n }\n return;\n }\n func_02012718(0xe1, *(s32 *)(p + idx * 8 + 0x4660) << 0xc);\n *(s32 *)(p + 0x53c0) = 0x3c;\n *(s32 *)(p + 0x46d0) = 2;\n *(u8 *)(p + 0x46d5) = 1;\n return;\n }\n continue;\n }\n\n if (dist < -0xc0 || dist >= 0x98) {\n *(s32 *)(((int)(p + idx * 8) + 0x4664) & 0xFFFFFFFFFFFFFFFFLL) += 1;\n } else {\n u8 *flag2 = (u8 *)(p + idx + 0x4680);\n if ((u32)*flag2 <= 1) {\n *(s32 *)(p + idx * 8 + 0x4664) = dist + 1;\n if (func_ov006_020d25fc(p, idx, c3) == 0) {\n func_ov006_020d25fc(p, idx, c4);\n }\n } else {\n s32 tmp = ((dist + 0xd4) * 0x1f4) / (lim + 0xd4);\n s32 *statePtr = (s32 *)(p + idx * 4 + 0x4684);\n u32 state = *statePtr;\n switch (state) {\n default:\n break;\n case 0:\n if (*(s32 *)(p + idx * 8 + 0x4660) == 0x21 || *(s32 *)(p + idx * 8 + 0x4660) == 0x61 ||\n *(s32 *)(p + idx * 8 + 0x4660) == 0xa1 || *(s32 *)(p + idx * 8 + 0x4660) == 0xe1) {\n {\n s32 *dirp = (s32 *)(((int)(p + idx * 8) + 0x4660) & 0xFFFFFFFFFFFFFFFFLL);\n *dirp -= 1;\n *statePtr = c6;\n *flag2 = c1;\n func_020126ac(v24, c6, v28, tmp, func_020126e8(*dirp << 0xc));\n }\n } else if (func_ov006_020d25fc(p, idx, v2c) == 0 && func_ov006_020d25fc(p, idx, c1) == 0 &&\n func_ov006_020d25fc(p, idx, c3) == 0 && func_ov006_020d25fc(p, idx, v30) == 0) {\n if (func_ov006_020d25fc(p, idx, v34) == 0) {\n *statePtr = v38;\n }\n }\n break;\n case 1:\n if (func_ov006_020d25fc(p, idx, c1) == 0 && func_ov006_020d25fc(p, idx, v3c) == 0 &&\n func_ov006_020d25fc(p, idx, v34) == 0 && func_ov006_020d25fc(p, idx, c3) == 0) {\n if (func_ov006_020d25fc(p, idx, c4) == 0) {\n *statePtr = c6;\n }\n }\n break;\n case 2:\n if (*(s32 *)(p + idx * 8 + 0x4660) == 0x1f || *(s32 *)(p + idx * 8 + 0x4660) == 0x5f ||\n *(s32 *)(p + idx * 8 + 0x4660) == 0x9f || *(s32 *)(p + idx * 8 + 0x4660) == 0xdf) {\n {\n s32 *dirp = (s32 *)(((int)(p + idx * 8) + 0x4660) & 0xFFFFFFFFFFFFFFFFLL);\n *dirp += 1;\n *statePtr = c6;\n *flag2 = c1;\n func_020126ac(v24, c6, v40, tmp, func_020126e8(*dirp << 0xc));\n }\n } else if (func_ov006_020d25fc(p, idx, v34) == 0 && func_ov006_020d25fc(p, idx, c1) == 0 &&\n func_ov006_020d25fc(p, idx, c4) == 0 && func_ov006_020d25fc(p, idx, v44) == 0) {\n if (func_ov006_020d25fc(p, idx, v38) == 0) {\n *statePtr = v30;\n }\n }\n break;\n case 3:\n if (*(s32 *)(p + idx * 8 + 0x4660) == 0x21 || *(s32 *)(p + idx * 8 + 0x4660) == 0x61 ||\n *(s32 *)(p + idx * 8 + 0x4660) == 0xa1 || *(s32 *)(p + idx * 8 + 0x4660) == 0xe1) {\n {\n s32 *dirp = (s32 *)(((int)(p + idx * 8) + 0x4660) & 0xFFFFFFFFFFFFFFFFLL);\n *dirp -= 1;\n *statePtr = c6;\n *flag2 = c1;\n func_020126ac(v24, c6, v48, tmp, func_020126e8(*dirp << 0xc));\n }\n } else if (func_ov006_020d25fc(p, idx, c3) == 0 && func_ov006_020d25fc(p, idx, v4c) == 0 &&\n func_ov006_020d25fc(p, idx, v30) == 0 && func_ov006_020d25fc(p, idx, c1) == 0) {\n if (func_ov006_020d25fc(p, idx, c6) == 0) {\n *statePtr = c4;\n }\n }\n break;\n case 4:\n if (*(s32 *)(p + idx * 8 + 0x4660) == 0x1f || *(s32 *)(p + idx * 8 + 0x4660) == 0x5f ||\n *(s32 *)(p + idx * 8 + 0x4660) == 0x9f || *(s32 *)(p + idx * 8 + 0x4660) == 0xdf) {\n {\n s32 *dirp = (s32 *)(((int)(p + idx * 8) + 0x4660) & 0xFFFFFFFFFFFFFFFFLL);\n *dirp += 1;\n *statePtr = c6;\n *flag2 = c1;\n func_020126ac(v24, c6, v50, tmp, func_020126e8(*dirp << 0xc));\n }\n } else if (func_ov006_020d25fc(p, idx, c4) == 0 && func_ov006_020d25fc(p, idx, v34) == 0 &&\n func_ov006_020d25fc(p, idx, v38) == 0 && func_ov006_020d25fc(p, idx, c1) == 0) {\n if (func_ov006_020d25fc(p, idx, c6) == 0) {\n *statePtr = c3;\n }\n }\n break;\n case 5:\n if (*(s32 *)(p + idx * 8 + 0x4660) == 0x21 || *(s32 *)(p + idx * 8 + 0x4660) == 0x61 ||\n *(s32 *)(p + idx * 8 + 0x4660) == 0xa1 || *(s32 *)(p + idx * 8 + 0x4660) == 0xe1) {\n {\n s32 *dirp = (s32 *)(((int)(p + idx * 8) + 0x4660) & 0xFFFFFFFFFFFFFFFFLL);\n *dirp -= 1;\n *statePtr = c6;\n *flag2 = c1;\n func_020126ac(v24, c6, v54, tmp, func_020126e8(*dirp << 0xc));\n }\n } else if (func_ov006_020d25fc(p, idx, v30) == 0 && func_ov006_020d25fc(p, idx, c6) == 0 &&\n func_ov006_020d25fc(p, idx, c3) == 0 && func_ov006_020d25fc(p, idx, v58) == 0) {\n if (func_ov006_020d25fc(p, idx, v38) == 0) {\n *statePtr = v34;\n }\n }\n break;\n case 6:\n if (func_ov006_020d25fc(p, idx, c6) == 0 && func_ov006_020d25fc(p, idx, v30) == 0 &&\n func_ov006_020d25fc(p, idx, v38) == 0 && func_ov006_020d25fc(p, idx, c3) == 0) {\n if (func_ov006_020d25fc(p, idx, c4) == 0) {\n *statePtr = c1;\n }\n }\n break;\n case 7:\n if (*(s32 *)(p + idx * 8 + 0x4660) == 0x1f || *(s32 *)(p + idx * 8 + 0x4660) == 0x5f ||\n *(s32 *)(p + idx * 8 + 0x4660) == 0x9f || *(s32 *)(p + idx * 8 + 0x4660) == 0xdf) {\n {\n s32 *dirp = (s32 *)(((int)(p + idx * 8) + 0x4660) & 0xFFFFFFFFFFFFFFFFLL);\n *dirp += 1;\n *statePtr = c6;\n *flag2 = c1;\n func_020126ac(v24, c6, v5c, tmp, func_020126e8(*dirp << 0xc));\n }\n } else if (func_ov006_020d25fc(p, idx, v38) == 0 && func_ov006_020d25fc(p, idx, c6) == 0 &&\n func_ov006_020d25fc(p, idx, c4) == 0 && func_ov006_020d25fc(p, idx, v30) == 0 &&\n func_ov006_020d25fc(p, idx, v34) == 0) {\n *statePtr = v60;\n }\n break;\n }\n }\n }\n }\n }\n }\n}\n", "source": "lunavyqo-batch2-grind"} -{"module": "arm9", "addr": "0x02009e70", "name": "func_02009e70", "size": 4252, "target_hex": "f04f2de967df4de20080a0e1100198e5000050e30500001a800088e28c1088e245c600eb011c88e2bc07c1e1f20300ea540198e5982088e2010c10e2dc0f9f153c0198051c008de5101198e534008de25c1081e20ccd00eb101198e534008de25c2081e2001092e5981088e5041092e59c1088e5081092e5a01088e521cc00eb0020a0e320208de524208de5181198e50070a0e1000051e30c00000a0100a0e324008de5142188e5181198e5700f9fe55c2081e2001092e5201188e5041092e5241188e5081092e5281188e52c0188e524108de200108de520208de21c308de20800a0e1981088e2c30900eb24109de50060a0e1000051e30040a0e30400000a120e88e20020a0e1981088e2014aa0e3322601eb1000a0e30410a0e100008de5130e88e2012ca0e38030a0e36ac400eb1c009de5b622d0e11c4090e5205090e5010012e21500001a540198e5020010e21200000a063ba0e300a0a0e3941380e095c38be0029ba0e3940a20e0091091e095ba2be0c44fa0e1940320e00000a0e209909ce02146a0e1004a84e1c50fa0e190b32be00000abe22956a0e1005a85e1800e9fe50000d0e5010050e30100a0030000a013000050e31800000a020012e21600000a0800a0e1cdfcffeb000050e31200000a501e9fe50030a0e394c18be095a189e0022ba0e394b32be0c40fa0e190b12be002409ce00000abe202a09ae02446a0e1959329e0c52fa0e1929129e00010a9e22a56a0e1004a84e1015a85e1540198e5800010e21200000a061ba0e30030a0e394c18be095a189e0022ba0e394b32be0c40fa0e190b12be002409ce00000abe202a09ae02446a0e1959329e0c52fa0e1929129e00010a9e22a56a0e1004a84e1015a85e12c1198e5300198e5041041e09130c2e0020ba0e3001093e00000a2e22116a0e1001a81e10800a0e1011084e0b6fcffeb24109de500b0a0e1000051e30ba0a0110500001a000055e3005065b20800a0e10510a0e1acfcffeb00a0a0e100708de51c309de50800a0e10620a0e1981088e2590700eb3c2d9fe51810a0e30040d2e5182198e5303d9fe5940101e0b11093e104008de5000052e3435c01e20500000a800088e28c1088e285c500eb011c88e2bc07c1e11c0300ea1c109de5fc0c9fe5000051e10400001a20109de50800a0e15a0600eb0050a0e3130300eae00c9fe5000051e10400001a20109de50800a0e10620a0e16d0500eb0b0300ea540198e5010b10e20803001ab80c9fe5000051e10400001a20109de50800a0e10620a0e1e00400eb000300ea9c0c9fe5000051e10400001a20109de50800a0e10620a0e1b30300ebf80200ea552f88e2001092e50800a0e1011a81e3001082e51c109de5001091e568fcffeb1c109de508008de5041091e50800a0e163fcffeb20109de50c008de5000051e31a00000a0000d1e5020050e31700001a0100d1e5000050e30900001af200d1e1f620d1e1f410d1e10006a0e10226a0e18c0088e50106a0e1900088e5942088e5110000eafa00d1e1011c88e2f628d1e1020980e20008a0e14008a0e1000052e1b608c1110100a013a601c815060000eaa601d8e5000050e3c80b9f0500108800f000d10102098002b000c10140008de28c1088e2802088e2fbcb00eb40008de2f32401eb28008de50201a0e39c1098e510008de5a02098e5980098e5fa1981e24c008de550108de554208de59c2098e5741b9fe5d0008de20241e0e3019082e016b500eb0800a0e1d0108de286f9ffebd0008de2981088e24c208de20030a0e3beb400ebd0008de2aeb800eb000050e30600000a94008de2d0108de28fb400eb98009de5024740e2090054e10940a0b1540198e5010c10e26100001a1c009de5b602d0e1080010e25d00000aa01098e5980098e5040059e158008de55c908de560108de5560000cad0008de258108de28c2088e20030a0e3a0b400ebd0008de290b800eb000050e34d00000ae4008de264108de270b600eba0008de2d0108de26eb400eba0009de5e00088e5a4009de5e40088e5a8009de5e80088e564009de5ec0088e568009de5f00088e56c009de5f40088e568009de5000050e3000060b2b50e50e3050000da552f88e2001092e5580a9fe5000081e1000082e5300000ea70008de2d0108de254b400eb64009de56c109de514c400eb020980e20008a0e14098a0e1010c88e2fc07d0e1a611d8e5000049e00008a0e14008b0e10109a0430109a05300006052000089e00008a0e1000051e34098a0e10600000a010c88e2f618d0e10900a0e102c300eb010950e3010c88a2f698d0a1010c88e2b698c0e10110a0e3a611c8e5fc27d0e1f618d0e1020c15e2010042e00008a0e14008a0e1000060120008a0114008a011000050e3551f88e2000091e50050a0c3010780e3000081e5000055e30600000a010915e20100000a1a00a0e3902000eb0000a0e3a601c8e5090000eaa601d8e5000050e30600001a34199fe51800a0e30020d1e54c199fe5920000e0b00091e1435c00e2540198e5010c10e20800000a00199fe50800a0e196fbffeb28109de5000051e1551f88c2000091c5010cc0c3000081c5000055e30f00001a010c88e2b00ad0e1000050e30b00001aa601d8e5000050e30800001a08009de5000057e1050000da28909de50b0059e1020000ba0c009de5000059e11c0100ca010c88e2fc97d0e1800088e28c1088e267c400eb011c88e2bc07c1e1000055e30200001ab00ad1e1000050e33400000a010915e20300001a010c88e2b00ad0e1000050e31900000a000055e310119815010c8812fe18d1110420a0e3023ba0e302198112be19c011010ba0e300008de5010c88e2fe19d0e15f0f88e263c200eb000050e30110a0130010a003010c88e2b01ac0e1b00ad0e1000050e3551f8812000091156000801300008115120000ea020c15e20800000a5f2f88e2f000d2e1551f88e2010b40e2b000c2e1000091e5200080e3000081e5070000ea5f2f88e2f000d2e1551f88e2010b80e2b000c2e1000091e5400080e3000081e50050a0e3450000eaa601d8e5000050e30a00000a010ca0e300008de5f618d1e15f0f88e21020a0e3023ca0e338c200eb000050e30000a003a601c805370000ea1c009de588179fe5010050e10200000a80179fe5010050e10400001a20109de50800a0e10720a0e18b0400eb2b0000ea24109de5000051e32800001a58179fe558279fe5010050e110119805f419d10110119815fe18d111020050e1010c8802021981e20118a0e1f428d0014118a0e102108100bc17c0011800000a28309de50c209de5020053e1060000ca2830a0e35f0f88e21420a0e300308de5063ca0e30bc200eb0d0000eab602d0e1010c10e2010c8812bc97c0110800001a08009de5000057e1050000ca2830a0e35f0f88e21420a0e300308de56430a0e3fcc100eb28009de514008de50a0050e1570000da000057e34700000a1c109de5a0069fe5000051e14300001a34008de2ccc900eb0010a0e138009de522c300ebfe1da0e30090a0e1000061e2000059e10090a0b1010000bafe0d59e30190a0c140008de2bfc900eb00b0a0e144009de50b10a0e1000060e213c300ebb801cde10000a0e300008de50910a0e118008de22020a0e3023ba0e3d6c100ebb801dde10b10a0e120369fe54002a0e18090a0e18900a0e1f02093e1010089e28000a0e128b09de5f00093e1002062e29b92c3e09b20c0e002bba0e30b9099e000c0a3e20b3092e02926a0e10c2a82e144208de50020a0e22306a0e1020a80e1512201eb40209de50b10a0e19290c3e0019099e00020a3e22936a0e1023a83e148209de540308de59230c0e0011093e00000a0e22116a0e1001a81e148108de5012ca0e300208de528008de20a10a0e1023887e2012ba0e3f8c100eb28009de514109de5382201eb0010a0e140008de228ca00eb2b0000ea0b0050e1290000aa012ca0e300208de528008de20b10a0e1023887e2012ba0e3e8c100eb28009de544209de59070c3e09202c1e0000057e00110c3e05fcb00eb0070a0e140008de269c900eb0010a0e10700a0e11e2201eb40209de5021ba0e39270c3e0017097e00020a3e22736a0e1023a83e140308de548309de5622f88e29370c0e0011097e00000a0e22116a0e1001a81e148108de5010c88e2fc07d0e1f010d2e1090040e0000041e0b000c2e140008de24ec900eb010a50e3010aa0b30010a0e348008de540108de5010c88e2fc27d0e140308de28c0088e2801088e20ec300eb180000ea0a0059e1160000da012ca0e300208de528008de20a10a0e1023887e2012ba0e3aec100eb28009de50910a0e1ee2101eb0010a0e140008de2dec900ebac008de2801088e240208de221ca00ebac009de58c0088e5b0009de5900088e5b4009de5940088e50800a0e176f8ffeb000050e30600000a540198e5600010e2551f8812000091150150a0136000c01300008115900098e594a098e58c7098e5019680e2d0008de24c208de28c1088e20030a0e34c708de550908de554a08de5d0b200ebd0008de2c0b600eb000050e30700000ab8008de2d0108de2a1b200ebbc109de5020741e2000054e150108de50040a0c17c008de28c1088e2802088e2f4c900eb7c008de20110a0e363c900eb7c109de580009de588108de584109de5010680e28c008de590108de5d0008de27c108de288208de20030a0e3b1b200ebd0008de2a1b600eb000050e30700000ac4008de2d0108de282b200ebc8009de5020740e2000054e18c008de50040a0c1520f8de29c9098e562b200ebf4229fe5521f8de20800a0e194218de560f7ffeb520f8de24c108de20020a0e320b200eb1c109de5c4029fe5000051e10100009a520f8de21eaa00eb520f8de2c6b800eb000050e31c109de5ac029fe58c919d15000051e10500001aa0029fe5000090e5000059e10090a0b1197989e24e0000ea540198e50970a0e1060059e10670a0b1020010e204009de57a29a013001046e04e29a0030800a0e1021081e0d2f9ffeb1c109de5007087e0b602d1e1800010e20200000a900098e5070050e10070a0c11c309de52c108de2080093e530208de22c008de50c3093e50800a0e130308de5440700eb842098e51c109de510029fe5022047e044208de5000051e10300001a38009de5000050e3f8019fb5000000ba2c009de528a09de530109de59a20c3e0020ba0e3006092e09a21c1e00030a3e2002092e02666a0e144009de5036a86e10010a1e2060050e1840098b52226a0e1012a82e1067080b0020000ba020050e1840098c5027080c09c019fe5d000d0e1260050e30400001a90019fe5901098e5000089e0000051e1900088b57c019fe5000089e0000054e170019fe550409db5000089e0020150e310008dc51c109de55c019fe5000051e10b00000a54019fe5000051e10800000a4c019fe5000051e10500000a10009de5000057e10070a0b1010000ba040057e10470a0c1014ca0e30710a0e1900088e2032ca0e30539a0e300408de5d6c000eb800088e28c1088e26bc200eb011c88e2bc07c1e1520f8de2c9b100ebd0008de253b200eb000055e30800000ae4009fe5000090e5000050e30100001a0e00a0e3561e00ebcc009fe5005080e50a0000eac0009fe50030a0e3003080e5540198e5600010e20400000a580198e50210a0e34320a0e3961d00eb580188e5800088e28c1088e23dc200eb011c88e2be07c1e10100a0e367df8de2f04fbde81eff2fe17c74080260fe0d00d8f20902cc140000400e0a029ef409023c730802dc730802047408022c7408028601000000250800000208009cf40902ac710802d47108024c720802cc740802cc6f08021422080200c05d00f46f08022cf309026c700802490a0000f8f20902c85b020094700802e47008020c71080200b00902", "lang": "c", "divergences": 1613, "c_source": "typedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef unsigned short ushort;\ntypedef signed short s16;\ntypedef unsigned int u32;\ntypedef signed int s32;\ntypedef unsigned int uint;\ntypedef unsigned long long u64;\n\n/* Loose int-typed pointer params so Ghidra-shaped arithmetic compiles under mwccarm C. */\ns16 Vec3_HorzAngle(int a, int b);\ns16 Vec3_VertAngle(int a, int b);\nvoid Vec3_Sub(int out, int a, int b);\nvoid Vec3_Add(int out, int a, int b);\nint Vec3_HorzLen(int v);\nint LenVec3(int v);\nvoid SubVec3(int a, int b, int c);\nvoid Vec3_MulScalarInPlace(int v, int s);\nvoid Vec3_AsrInPlace(int v, int s);\nvoid Vec3_RotateYAndTranslate(int o, int a, int ang, int b);\nint func_0200c66c(int self, int a, int b, int c, int d);\nint func_0200bec4(int self, int v, int r2, int r3, int sp0);\nvoid func_0200bb28(int self, int a);\nvoid func_0200b798(int self, int a, int r2);\nvoid func_0200b590(int self, int a, int r2);\nvoid func_0200b0fc(int self, int a, int r2);\nvoid func_0200b990(int self, int a, int r2);\nint func_02009374(int self);\nunsigned int func_020093f4(int p, unsigned int x);\nunsigned int func_020093d4(int p, int a);\nvoid func_0200897c(int self, int arg);\nint func_02008cb4(int c);\nvoid func_0200c9e0(int c, int r1, int r2);\nvoid func_02012790(int a);\nint func_020124c4(int a, int b, int c);\nint Math_Function_0203b14c(int out, int a, int b, int c, int sp0);\nint ApproachAngle(int out, int cur, int r2, int r3, int sp0);\nint AngleDiff(int a, int b);\n\nvoid _ZN11RaycastLineC1Ev(int self);\nvoid _ZN11RaycastLineD1Ev(int self);\nvoid _ZN11RaycastLine13SetObjAndLineERK7Vector3S2_P5Actor(int self, int a, int b, int act);\nint _ZN11RaycastLine10DetectClsnEv(int self);\nvoid _ZN11RaycastLine10GetClsnPosEv(int out, int self);\nvoid _ZN13RaycastGroundC1Ev(int self);\nvoid _ZN13RaycastGroundD1Ev(int self);\nvoid _ZN13RaycastGround12SetObjAndPosERK7Vector3P5Actor(int self, int pos, int act);\nint _ZN13RaycastGround10DetectClsnEv(int self);\nvoid _ZN4BgCh19StartDetectingWaterEv(int self);\nvoid _ZNK11SurfaceInfo12CopyNormalToER7Vector3(int self, int out);\nint _ZN4cstd5atan2E5Fix12IiES1_(int a, int b);\nint _ZN4cstd4fdivEii(int a, int b);\nunsigned int _ZN4cstd4sqrtEy(unsigned int lo, int hi);\n\nextern u8 data_0208747c[];\nextern u8 data_0209f2d8;\nextern u8 data_020a0e40;\nextern s16 data_0209f49e[];\nextern s16 data_0209f49c[];\nextern u8 data_0208733c[];\nextern u8 data_020873dc[];\nextern u8 data_02087404[];\nextern u8 data_0208742c[];\nextern u8 data_020871ac[];\nextern u8 data_020871d4[];\nextern u8 data_0208724c[];\nextern u8 data_020874cc[];\nextern u8 data_02086fcc[];\nextern s16 data_02082214[];\nextern u8 data_02086ff4[];\nextern int data_0209f32c;\nextern u8 data_0208706c[];\nextern signed char data_0209f2f8;\nextern u8 data_02087094[];\nextern u8 data_020870e4[];\nextern u8 data_0208710c[];\nextern int data_0209b000;\n\nu32 func_02009e70(int param_1)\n{\n ushort uVar1;\n short sVar2;\n short sVar3;\n long long lVar4;\n long long lVar5;\n u16 uVar6;\n int iVar7;\n int iVar8;\n int iVar9;\n int iVar10;\n int iVar11;\n int iVar12;\n u32 *puVar13;\n u32 uVar14;\n int iVar15;\n int iVar16;\n uint uVar17;\n u32 *puVar18;\n u32 uVar19;\n uint uVar20;\n int iVar21;\n uint uVar22;\n int iVar23;\n uint uVar24;\n int bVar25;\n int local_1b0;\n ushort local_1a8 [2];\n int local_1a4;\n int local_1a0;\n uint local_19c;\n int local_198;\n int local_194;\n int local_190;\n u8 auStack_18c[4];\n int local_188;\n uint local_180;\n uint local_17c;\n uint local_178;\n u32 local_174;\n int local_170;\n u32 local_16c;\n u32 local_168;\n int local_164;\n u32 local_160;\n u32 local_15c;\n int local_158;\n u32 local_154;\n u8 auStack_150[12];\n u32 local_144;\n int local_140;\n u32 local_13c;\n u32 local_138;\n int local_134;\n u32 local_130;\n u8 auStack_12c[4];\n int local_128;\n u32 local_120;\n u32 local_11c;\n u32 local_118;\n u32 local_114;\n u32 local_110;\n u32 local_10c;\n u8 auStack_108[4];\n int local_104;\n u8 auStack_fc[4];\n int local_f8;\n u8 auStack_f0[20];\n u8 auStack_dc[100];\n u8 auStack_78[68];\n int local_34;\n u32 local_2c;\n \n if (*(int *)(param_1 + 0x110) == 0) {\n uVar6 = Vec3_HorzAngle(param_1 + 0x80,param_1 + 0x8c);\n *(u16 *)(param_1 + 0x17c) = uVar6;\n }\n else {\n local_1a4 = ((int)&data_0208747c);\n if ((*(uint *)(param_1 + 0x154) & 0x100) == 0) {\n local_1a4 = *(int *)(param_1 + 0x13c);\n }\n Vec3_Sub(((int)auStack_18c),*(int *)(param_1 + 0x110) + 0x5c,param_1 + 0x98);\n iVar15 = *(int *)(param_1 + 0x110);\n *(u32 *)(param_1 + 0x98) = *(u32 *)(iVar15 + 0x5c);\n *(u32 *)(param_1 + 0x9c) = *(u32 *)(iVar15 + 0x60);\n *(u32 *)(param_1 + 0xa0) = *(u32 *)(iVar15 + 100);\n iVar15 = Vec3_HorzLen(((int)auStack_18c));\n local_1a0 = 0;\n bVar25 = *(int *)(param_1 + 0x118) != 0;\n if (bVar25) {\n *(u32 *)(param_1 + 0x114) = 0;\n uVar19 = 0xdfe60;\n iVar16 = *(int *)(param_1 + 0x118);\n *(u32 *)(param_1 + 0x120) = *(u32 *)(iVar16 + 0x5c);\n *(u32 *)(param_1 + 0x124) = *(u32 *)(iVar16 + 0x60);\n *(u32 *)(param_1 + 0x128) = *(u32 *)(iVar16 + 100);\n *(u32 *)(param_1 + 300) = uVar19;\n }\n local_19c = (uint)bVar25;\n iVar16 = func_0200c66c(param_1,param_1 + 0x98,((int)&local_1a0),((int)&local_1a4),((int)&local_19c));\n uVar19 = 0;\n if (local_19c != 0) {\n uVar19 = 0x1000;\n SubVec3(param_1 + 0x120,param_1 + 0x98,param_1 + 0x120);\n }\n Math_Function_0203b14c(param_1 + 0x130,uVar19,0x100,0x80,0x10);\n uVar20 = ((u32 *)local_1a4)[7];\n uVar22 = ((u32 *)local_1a4)[8];\n if (((*(ushort *)(local_1a4 + 0x26) & 1) == 0) && ((*(uint *)(param_1 + 0x154) & 2) != 0))\n {\n uVar17 = (uint)((unsigned long long)uVar20 * 0x1800);\n uVar24 = (uint)((unsigned long long)uVar22 * 0x1800);\n uVar20 = uVar17 + 0x800 >> 0xc |\n (((int)uVar20 >> 0x1f) * 0x1800 + (int)((unsigned long long)uVar20 * 0x1800 >> 0x20) +\n (uint)(0xfffff7ff < uVar17)) * 0x100000;\n uVar22 = uVar24 + 0x800 >> 0xc |\n (((int)uVar22 >> 0x1f) * 0x1800 + (int)((unsigned long long)uVar22 * 0x1800 >> 0x20) +\n (uint)(0xfffff7ff < uVar24)) * 0x100000;\n }\n if (((data_0209f2d8 == '\\x01') && ((*(ushort *)(local_1a4 + 0x26) & 2) != 0)) &&\n (iVar7 = func_02009374(param_1), iVar7 != 0)) {\n uVar24 = (uint)((unsigned long long)0x14cc * (unsigned long long)uVar20);\n uVar17 = (uint)((unsigned long long)0x14cc * (unsigned long long)uVar22);\n uVar20 = uVar24 + 0x800 >> 0xc |\n (((int)uVar20 >> 0x1f) * 0x14cc +\n (int)((unsigned long long)0x14cc * (unsigned long long)uVar20 >> 0x20) +\n (uint)(0xfffff7ff < uVar24)) * 0x100000;\n uVar22 = uVar17 + 0x800 >> 0xc |\n (((int)uVar22 >> 0x1f) * 0x14cc +\n (int)((unsigned long long)0x14cc * (unsigned long long)uVar22 >> 0x20) +\n (uint)(0xfffff7ff < uVar17)) * 0x100000;\n }\n if ((*(uint *)(param_1 + 0x154) & 0x80) != 0) {\n uVar24 = (uint)((unsigned long long)uVar20 * 0x1800);\n uVar17 = (uint)((unsigned long long)uVar22 * 0x1800);\n uVar20 = uVar24 + 0x800 >> 0xc |\n (((int)uVar20 >> 0x1f) * 0x1800 + (int)((unsigned long long)uVar20 * 0x1800 >> 0x20) +\n (uint)(0xfffff7ff < uVar24)) * 0x100000;\n uVar22 = uVar17 + 0x800 >> 0xc |\n (((int)uVar22 >> 0x1f) * 0x1800 + (int)((unsigned long long)uVar22 * 0x1800 >> 0x20) +\n (uint)(0xfffff7ff < uVar17)) * 0x100000;\n }\n lVar4 = (long long)(int)(*(int *)(param_1 + 300) - uVar20) * (long long)*(int *)(param_1 + 0x130)\n + 0x800;\n iVar8 = func_020093f4(param_1,uVar20 + ((uint)lVar4 >> 0xc |\n (int)((unsigned long long)lVar4 >> 0x20) * 0x100000));\n iVar7 = iVar8;\n if (local_19c == 0) {\n if ((int)uVar22 < 0) {\n uVar22 = -uVar22;\n }\n iVar7 = func_020093f4(param_1,uVar22);\n }\n iVar9 = func_0200bec4(param_1,param_1 + 0x98,iVar16,local_1a4,iVar15);\n uVar1 = *(ushort *)(data_0209f49e + (uint)data_020a0e40 * 0x18);\n uVar22 = uVar1 & 0x4300;\n if (*(int *)(param_1 + 0x118) == 0) {\n if (local_1a4 == ((int)&data_0208733c)) {\n func_0200bb28(param_1,local_1a0);\n uVar22 = 0;\n }\n else if (local_1a4 == ((int)&data_020873dc)) {\n func_0200b798(param_1,local_1a0,iVar16);\n }\n else if ((*(uint *)(param_1 + 0x154) & 0x400) == 0) {\n if (local_1a4 == ((int)&data_02087404)) {\n func_0200b590(param_1,local_1a0,iVar16);\n }\n else if (local_1a4 == ((int)&data_0208742c)) {\n func_0200b0fc(param_1,local_1a0,iVar16);\n }\n else {\n *(uint *)(param_1 + 0x154) = *(uint *)(param_1 + 0x154) | 0x1000;\n iVar10 = func_020093f4(param_1,*(u32 *)local_1a4);\n iVar11 = func_020093f4(param_1,((u32 *)local_1a4)[1]);\n if ((local_1a0 == 0) || (*(char *)local_1a0 != '\\x02')) {\n if (*(char *)(param_1 + 0x1a6) == '\\0') {\n *(short *)(param_1 + 0x186) = *(short *)(param_1 + 0x186) + -0x8000;\n }\n }\n else if (((char *)local_1a0)[1] == '\\0') {\n sVar2 = *(short *)(local_1a0 + 6);\n sVar3 = *(short *)(local_1a0 + 4);\n *(int *)(param_1 + 0x8c) = (int)*(short *)(local_1a0 + 2) << 0xc;\n *(int *)(param_1 + 0x90) = (int)sVar3 << 0xc;\n *(int *)(param_1 + 0x94) = (int)sVar2 << 0xc;\n }\n else {\n iVar21 = (*(short *)(local_1a0 + 10) + 0x8000) * 0x10000;\n if ((int)*(short *)(param_1 + 0x186) != iVar21 >> 0x10) {\n *(short *)(param_1 + 0x186) = (short)((uint)iVar21 >> 0x10);\n *(u8 *)(param_1 + 0x1a6) = 1;\n }\n }\n Vec3_Sub(((int)&local_180),param_1 + 0x8c,param_1 + 0x80);\n local_198 = LenVec3(((int)&local_180));\n local_1b0 = -0x80000000;\n local_16c = *(u32 *)(param_1 + 0xa0);\n local_174 = *(u32 *)(param_1 + 0x98);\n local_170 = *(int *)(param_1 + 0x9c) + 0x3e8000;\n iVar23 = *(int *)(param_1 + 0x9c) + 0x82500;\n _ZN11RaycastLineC1Ev(((int)auStack_f0));\n func_0200897c(param_1,((int)auStack_f0));\n _ZN11RaycastLine13SetObjAndLineERK7Vector3S2_P5Actor\n (((int)auStack_f0),param_1 + 0x98,((int)&local_174),0);\n iVar12 = _ZN11RaycastLine10DetectClsnEv(((int)auStack_f0));\n iVar21 = 0x7fffffff;\n if (iVar12 != 0) {\n _ZN11RaycastLine10GetClsnPosEv(((int)auStack_12c),((int)auStack_f0));\n iVar21 = local_128 + -0x80000;\n if (local_128 + -0x80000 < iVar23) {\n iVar21 = iVar23;\n }\n }\n if (((*(uint *)(param_1 + 0x154) & 0x100) == 0) &&\n ((*(ushort *)(local_1a4 + 0x26) & 8) != 0)) {\n local_160 = *(u32 *)(param_1 + 0xa0);\n local_168 = *(u32 *)(param_1 + 0x98);\n local_164 = iVar23;\n if (iVar23 <= iVar21) {\n _ZN11RaycastLine13SetObjAndLineERK7Vector3S2_P5Actor\n (((int)auStack_f0),((int)&local_168),param_1 + 0x8c,0);\n iVar12 = _ZN11RaycastLine10DetectClsnEv(((int)auStack_f0));\n if (iVar12 != 0) {\n _ZNK11SurfaceInfo12CopyNormalToER7Vector3(((int)auStack_dc),((int)&local_15c));\n _ZN11RaycastLine10GetClsnPosEv(((int)&local_120),((int)auStack_f0));\n *(u32 *)(param_1 + 0xe0) = local_120;\n *(u32 *)(param_1 + 0xe4) = local_11c;\n *(u32 *)(param_1 + 0xe8) = local_118;\n *(u32 *)(param_1 + 0xec) = local_15c;\n *(int *)(param_1 + 0xf0) = local_158;\n *(u32 *)(param_1 + 0xf4) = local_154;\n if (local_158 < 0) {\n local_158 = -local_158;\n }\n if (local_158 < 0xb51) {\n _ZN11RaycastLine10GetClsnPosEv(((int)auStack_150),((int)auStack_f0));\n iVar12 = _ZN4cstd5atan2E5Fix12IiES1_(local_15c,local_154);\n iVar12 = (iVar12 + 0x8000) * 0x10000 >> 0x10;\n if ((iVar12 - *(short *)(param_1 + 0x17c)) * 0x10000 >> 0x10 < 0) {\n iVar23 = 0x4000;\n }\n else {\n iVar23 = -0x4000;\n }\n iVar12 = (iVar12 + iVar23) * 0x10000 >> 0x10;\n if ((*(char *)(param_1 + 0x1a6) != '\\0') &&\n (iVar23 = AngleDiff(iVar12,(int)*(short *)(param_1 + 0x186)), 0x3fff < iVar23))\n {\n iVar12 = (int)*(short *)(param_1 + 0x186);\n }\n *(short *)(param_1 + 0x186) = (short)iVar12;\n *(u8 *)(param_1 + 0x1a6) = 1;\n iVar12 = ((int)*(short *)(param_1 + 0x17c) - (int)*(short *)(param_1 + 0x186)) *\n 0x10000 >> 0x10;\n if ((uVar1 & 0x200) != 0) {\n iVar12 = iVar12 * -0x10000 >> 0x10;\n }\n if (0 < iVar12) {\n uVar22 = 0;\n }\n *(uint *)(param_1 + 0x154) = *(uint *)(param_1 + 0x154) | 0x40000;\n }\n else {\n *(uint *)(param_1 + 0x154) = *(uint *)(param_1 + 0x154) | 0x80200;\n }\n }\n }\n }\n if (uVar22 == 0) {\n if (*(char *)(param_1 + 0x1a6) == '\\0') {\n uVar22 = *(ushort *)(data_0209f49c + (uint)data_020a0e40 * 0x18) & 0x4300;\n }\n }\n else {\n if ((uVar22 & 0x4000) != 0) {\n func_02012790(0x1a);\n }\n *(u8 *)(param_1 + 0x1a6) = 0;\n }\n if (((*(uint *)(param_1 + 0x154) & 0x100) != 0) &&\n (iVar12 = func_020093f4(param_1,0xdfe60), iVar12 < local_198)) {\n *(uint *)(param_1 + 0x154) = *(uint *)(param_1 + 0x154) & 0xfffffeff;\n }\n iVar12 = local_198;\n if (((((uVar22 == 0) && (*(short *)(param_1 + 0x1a0) == 0)) &&\n (*(char *)(param_1 + 0x1a6) == '\\0')) && ((iVar10 < iVar15 && (iVar8 <= local_198))))\n && (iVar11 < local_198)) {\n if (iVar7 < local_198) {\n Math_Function_0203b14c(((int)&local_198),iVar7,0x400,iVar15 + 0x20000,0x100);\n uVar19 = _ZN4cstd4fdivEii(local_198,iVar12);\n Vec3_MulScalarInPlace(((int)&local_180),uVar19);\n Vec3_Add(((int)&local_114),param_1 + 0x80,((int)&local_180));\n *(u32 *)(param_1 + 0x8c) = local_114;\n *(u32 *)(param_1 + 0x90) = local_110;\n *(u32 *)(param_1 + 0x94) = local_10c;\n }\n }\n else {\n sVar2 = *(short *)(param_1 + 0x17c);\n uVar6 = Vec3_HorzAngle(param_1 + 0x80,param_1 + 0x8c);\n *(u16 *)(param_1 + 0x17c) = uVar6;\n if ((uVar22 == 0) && (*(short *)(param_1 + 0x1a0) == 0)) {\n if (*(char *)(param_1 + 0x1a6) == '\\0') {\n if ((local_1a4 == ((int)&data_020871ac)) || (local_1a4 == ((int)&data_020871d4))) {\n func_0200b990(param_1,local_1a0,iVar15);\n }\n else if (local_19c == 0) {\n if (local_1a4 == ((int)&data_0208724c)) {\n sVar3 = *(short *)(*(int *)(param_1 + 0x110) + 0x94);\n }\n else {\n sVar3 = *(short *)(*(int *)(param_1 + 0x110) + 0x8e);\n }\n bVar25 = local_1a4 == ((int)&data_020874cc);\n puVar13 = (u32 *)local_1a4;\n if (bVar25) {\n puVar13 = (u32 *)(param_1 + 0x100);\n }\n iVar12 = (sVar3 + 0x8000) * 0x10000;\n puVar18 = (u32 *)((int)&data_020874cc);\n if (bVar25) {\n puVar18 = (u32 *)(int)*(short *)(puVar13 + 0x21);\n }\n iVar23 = iVar12 >> 0x10;\n if (bVar25) {\n *(short *)(puVar13 + 0x1f) = (short)((uint)iVar12 >> 0x10) + (short)puVar18;\n }\n else if (iVar11 < local_198) {\n if ((*(ushort *)((int)puVar13 + 0x26) & 0x100) == 0) {\n if (iVar15 <= iVar10) {\n ApproachAngle(param_1 + 0x17c,iVar23,0x14,100,0x28);\n }\n }\n else {\n *(short *)(param_1 + 0x17c) = sVar2;\n }\n }\n else {\n ApproachAngle(param_1 + 0x17c,iVar23,0x14,0x600,0x28);\n }\n }\n }\n else {\n iVar10 = ApproachAngle(param_1 + 0x17c,(int)*(short *)(param_1 + 0x186),0x10,0x200,\n 0x100);\n if (iVar10 == 0) {\n *(u8 *)(param_1 + 0x1a6) = 0;\n }\n }\n }\n else {\n if (((uVar22 & 0x4000) == 0) && (*(short *)(param_1 + 0x1a0) == 0)) {\n if ((uVar22 & 0x200) == 0) {\n *(short *)(param_1 + 0x17c) = *(short *)(param_1 + 0x17c) + 0x400;\n *(uint *)(param_1 + 0x154) = *(uint *)(param_1 + 0x154) | 0x40;\n }\n else {\n *(short *)(param_1 + 0x17c) = *(short *)(param_1 + 0x17c) + -0x400;\n *(uint *)(param_1 + 0x154) = *(uint *)(param_1 + 0x154) | 0x20;\n }\n }\n else {\n if (uVar22 != 0) {\n *(short *)(param_1 + 0x19e) =\n *(short *)(*(int *)(param_1 + 0x110) + 0x8e) + -0x8000;\n }\n iVar10 = ApproachAngle(param_1 + 0x17c,(int)*(short *)(param_1 + 0x19e),4,0x800,\n 0x400);\n *(ushort *)(param_1 + 0x1a0) = (ushort)(iVar10 != 0);\n if (*(short *)(param_1 + 0x1a0) != 0) {\n *(uint *)(param_1 + 0x154) = *(uint *)(param_1 + 0x154) | 0x60;\n }\n }\n uVar22 = 0;\n }\n iVar10 = local_198;\n if (iVar7 < local_198) {\n if ((iVar15 != 0) && (local_1a4 == ((int)&data_02086fcc))) {\n uVar19 = Vec3_HorzLen(((int)auStack_18c));\n iVar8 = _ZN4cstd5atan2E5Fix12IiES1_(local_188,uVar19);\n if (iVar8 < -0x3f80) {\n iVar8 = -0x3f80;\n }\n else if (0x3f80 < iVar8) {\n iVar8 = 0x3f80;\n }\n uVar19 = Vec3_HorzLen(((int)&local_180));\n local_1a8[0] = _ZN4cstd5atan2E5Fix12IiES1_(-local_17c,uVar19);\n ApproachAngle((int)local_1a8,iVar8,0x20,0x800,0);\n lVar4 = (long long)local_198 *\n (long long)\n -(int)*(short *)(data_02082214 + ((int)(uint)local_1a8[0] >> 4) * 4) + 0x800;\n lVar5 = (long long)local_198 *\n (long long)\n (int)*(short *)(data_02082214 + (((int)(uint)local_1a8[0] >> 4) * 2 + 1) * 2)\n + 0x800;\n local_17c = (uint)lVar4 >> 0xc | (int)((unsigned long long)lVar4 >> 0x20) * 0x100000;\n iVar8 = _ZN4cstd4fdivEii((uint)lVar5 >> 0xc |\n (int)((unsigned long long)lVar5 >> 0x20) * 0x100000,uVar19);\n lVar4 = (long long)(int)local_180 * (long long)iVar8 + 0x800;\n local_180 = (uint)lVar4 >> 0xc | (int)((unsigned long long)lVar4 >> 0x20) * 0x100000;\n lVar4 = (long long)(int)local_178 * (long long)iVar8 + 0x800;\n local_178 = (uint)lVar4 >> 0xc | (int)((unsigned long long)lVar4 >> 0x20) * 0x100000;\n }\n Math_Function_0203b14c(((int)&local_198),iVar7,0x400,iVar15 + 0x20000,0x100);\n uVar19 = _ZN4cstd4fdivEii(local_198,iVar10);\n Vec3_MulScalarInPlace(((int)&local_180),uVar19);\n }\n else if (local_198 < iVar8) {\n Math_Function_0203b14c(((int)&local_198),iVar8,0x400,iVar15 + 0x20000,0x100);\n uVar17 = (uint)((long long)local_198 * (long long)local_198);\n uVar20 = (uint)((long long)(int)local_17c * (long long)(int)local_17c);\n uVar19 = _ZN4cstd4sqrtEy(uVar17 - uVar20,\n (int)((unsigned long long)((long long)local_198 * (long long)local_198)\n >> 0x20) -\n ((int)((unsigned long long)\n ((long long)(int)local_17c * (long long)(int)local_17c)\n >> 0x20) + (uint)(uVar17 < uVar20)));\n uVar14 = Vec3_HorzLen(((int)&local_180));\n iVar15 = _ZN4cstd4fdivEii(uVar19,uVar14);\n lVar4 = (long long)(int)local_180 * (long long)iVar15 + 0x800;\n local_180 = (uint)lVar4 >> 0xc | (int)((unsigned long long)lVar4 >> 0x20) * 0x100000;\n lVar4 = (long long)(int)local_178 * (long long)iVar15 + 0x800;\n local_178 = (uint)lVar4 >> 0xc | (int)((unsigned long long)lVar4 >> 0x20) * 0x100000;\n *(short *)(param_1 + 0x188) =\n *(short *)(param_1 + 0x188) - (*(short *)(param_1 + 0x17c) - sVar2);\n }\n local_178 = Vec3_HorzLen(((int)&local_180));\n if ((int)local_178 < 0x1000) {\n local_178 = 0x1000;\n }\n local_180 = 0;\n Vec3_RotateYAndTranslate\n (param_1 + 0x8c,param_1 + 0x80,(int)*(short *)(param_1 + 0x17c),((int)&local_180));\n }\n iVar15 = func_02008cb4(param_1);\n if ((iVar15 != 0) && ((*(uint *)(param_1 + 0x154) & 0x60) != 0)) {\n uVar22 = 1;\n *(uint *)(param_1 + 0x154) = *(uint *)(param_1 + 0x154) & 0xffffff9f;\n }\n local_16c = *(u32 *)(param_1 + 0x94);\n local_174 = *(u32 *)(param_1 + 0x8c);\n local_170 = *(int *)(param_1 + 0x90) + 0x100000;\n _ZN11RaycastLine13SetObjAndLineERK7Vector3S2_P5Actor\n (((int)auStack_f0),param_1 + 0x8c,((int)&local_174),0);\n iVar15 = _ZN11RaycastLine10DetectClsnEv(((int)auStack_f0));\n if (iVar15 != 0) {\n _ZN11RaycastLine10GetClsnPosEv(((int)auStack_108),((int)auStack_f0));\n local_170 = local_104;\n if (local_104 + -0x80000 < iVar21) {\n iVar21 = local_104 + -0x80000;\n }\n }\n Vec3_Add(((int)&local_144),param_1 + 0x8c,param_1 + 0x80);\n Vec3_AsrInPlace(((int)&local_144),1);\n local_138 = local_144;\n local_134 = local_140 + 0x100000;\n local_130 = local_13c;\n _ZN11RaycastLine13SetObjAndLineERK7Vector3S2_P5Actor(((int)auStack_f0),((int)&local_144),((int)&local_138),0);\n iVar15 = _ZN11RaycastLine10DetectClsnEv(((int)auStack_f0));\n if (iVar15 != 0) {\n _ZN11RaycastLine10GetClsnPosEv(((int)auStack_fc),((int)auStack_f0));\n local_134 = local_f8 + -0x80000;\n if (local_134 < iVar21) {\n iVar21 = local_134;\n }\n }\n iVar15 = *(int *)(param_1 + 0x9c);\n _ZN13RaycastGroundC1Ev(((int)auStack_78));\n local_2c = 0x5dc000;\n func_0200897c(param_1,((int)auStack_78));\n iVar7 = 0;\n _ZN13RaycastGround12SetObjAndPosERK7Vector3P5Actor(((int)auStack_78),((int)&local_174),0);\n if (((int)&data_02086fcc) < local_1a4) {\n _ZN4BgCh19StartDetectingWaterEv(((int)auStack_78));\n }\n iVar8 = _ZN13RaycastGround10DetectClsnEv(((int)auStack_78));\n if (iVar8 != 0) {\n iVar15 = local_34;\n }\n if (local_1a4 == ((int)&data_02086ff4)) {\n if (iVar15 < data_0209f32c) {\n iVar15 = data_0209f32c;\n }\n iVar8 = iVar15 + 0x64000;\n }\n else {\n iVar8 = iVar15;\n if (iVar15 < iVar16) {\n iVar8 = iVar16;\n }\n bVar25 = (*(uint *)(param_1 + 0x154) & 2) != 0;\n if (bVar25) {\n iVar7 = 0x1e8000;\n }\n if (!bVar25) {\n iVar7 = 0x138000;\n }\n iVar16 = func_020093d4(param_1,(iVar16 - iVar9) + iVar7);\n iVar8 = iVar8 + iVar16;\n if (((*(ushort *)(local_1a4 + 0x26) & 0x80) != 0) &&\n (iVar8 < *(int *)(param_1 + 0x90))) {\n iVar8 = *(int *)(param_1 + 0x90);\n }\n local_194 = ((u32 *)local_1a4)[2];\n local_190 = ((u32 *)local_1a4)[3];\n func_0200c9e0(param_1,((int)&local_194),((int)&local_190));\n local_17c = iVar8 - *(int *)(param_1 + 0x84);\n iVar16 = local_194;\n if ((local_1a4 == ((int)&data_0208706c)) && (local_188 < 0)) {\n iVar16 = 0xa49;\n }\n lVar4 = (long long)local_198 * (long long)iVar16 + 0x800;\n lVar5 = (long long)local_198 * (long long)local_190 + 0x800;\n uVar17 = (uint)lVar4 >> 0xc | (int)((unsigned long long)lVar4 >> 0x20) * 0x100000;\n uVar20 = local_17c;\n if ((int)local_17c < (int)uVar17) {\n uVar20 = *(uint *)(param_1 + 0x84);\n }\n uVar24 = (uint)lVar5 >> 0xc | (int)((unsigned long long)lVar5 >> 0x20) * 0x100000;\n if ((int)local_17c < (int)uVar17) {\n iVar8 = uVar20 + uVar17;\n }\n else if ((int)uVar24 < (int)uVar20) {\n iVar8 = *(int *)(param_1 + 0x84) + uVar24;\n }\n if ((data_0209f2f8 == '&') && (*(int *)(param_1 + 0x90) < iVar15 + 0x25bc8)) {\n *(int *)(param_1 + 0x90) = iVar15 + 0x25bc8;\n }\n if (iVar21 < iVar15 + 0x25bc8) {\n iVar21 = local_170;\n }\n if (iVar15 + 0x25bc8 != -0x80000000) {\n local_1b0 = iVar15 + 0x25bc8;\n }\n }\n iVar15 = iVar8;\n if ((((local_1a4 != ((int)&data_02087094)) && (local_1a4 != ((int)&data_020870e4))) &&\n (local_1a4 != ((int)&data_0208710c))) &&\n ((iVar15 = local_1b0, local_1b0 <= iVar8 && (iVar15 = iVar8, iVar21 < iVar8)))) {\n iVar15 = iVar21;\n }\n Math_Function_0203b14c(param_1 + 0x90,iVar15,0x300,0x14000,0x100);\n uVar6 = Vec3_HorzAngle(param_1 + 0x80,param_1 + 0x8c);\n *(u16 *)(param_1 + 0x17c) = uVar6;\n _ZN13RaycastGroundD1Ev(((int)auStack_78));\n _ZN11RaycastLineD1Ev(((int)auStack_f0));\n }\n }\n }\n else {\n uVar6 = Vec3_HorzAngle(param_1 + 0x80,param_1 + 0x8c);\n *(u16 *)(param_1 + 0x17c) = uVar6;\n }\n if (uVar22 == 0) {\n data_0209b000 = 0;\n if ((*(uint *)(param_1 + 0x154) & 0x60) != 0) {\n uVar19 = func_020124c4(*(u32 *)(param_1 + 0x158),2,0x43);\n *(u32 *)(param_1 + 0x158) = uVar19;\n }\n }\n else {\n if (data_0209b000 == 0) {\n func_02012790(0xe);\n }\n data_0209b000 = uVar22;\n }\n }\n uVar6 = Vec3_VertAngle(param_1 + 0x80,param_1 + 0x8c);\n *(u16 *)(param_1 + 0x17e) = uVar6;\n return 1;\n}\n", "source": "ghidra-full-20260723"} -{"module": "ov007", "addr": "0x020c6550", "name": "func_ov007_020c6550", "size": 108, "target_hex": "70402de90060a0e1204096e50150a0e3b810d4e1000051e30300000a081096e50c2096e5020051e1010000ba0050a0e30a0000eae50100eb081086e2000091e5010080e2000081e5081096e50c0096e5000051e10400a0e10250a0a3bef0ffeb0500a0e17040bde81eff2fe1", "lang": "c", "divergences": 2, "c_source": "extern void func_ov007_020c6d20(void *c);\nextern void func_ov007_020c28ac(void *p);\n\n/* BEST_DIV=2 (regperm load-order floor)\n * All of function matches except the two ldrs for the first (c+8)/(c+0xc) compare:\n * ROM: ldr r1,[c+#8]; ldr r2,[c+#0xc]; cmp r1,r2; blt\n * this: ldr r2,[c+#0xc]; ldr r1,[c+#8]; cmp r1,r2; blt\n * Volatile on the right-hand load selects r1/r2 correctly (statement-level pair\n * selector) but schedules that load ASAP, swapping order. Non-vol restores order\n * but flips the pair back (div=3). ~80 pure-C variants; documented wall in\n * notes/mwccarm-codegen.md \u00a76v for this symbol.\n */\nint func_ov007_020c6550(char *c)\n{\n int status = 1;\n void *obj = *(void **)(c + 0x20);\n int right;\n if (*(unsigned short *)((char *)obj + 8) == 0 ||\n *(int *)(c + 8) >= (right = *(volatile int *)(c + 0xc))) {\n status = 0;\n } else {\n func_ov007_020c6d20(c);\n {\n int *p = (int *)(((unsigned int)c + 8) & 0xFFFFFFFFFFFFFFFFULL);\n *p = *p + 1;\n }\n if (*(int *)(c + 8) >= *(int *)(c + 0xc))\n status = 2;\n func_ov007_020c28ac(obj);\n }\n return status;\n}\n", "source": "lunavyqo-groupb-pure-c-best", "floor": {"class": "regperm", "evidence": "6v: vol-right pair selector vs load-order weld; div=2; 200+ pure-C variants; colors correct when order wrong", "date": "2026-07-23"}, "floor_note": "6v vol-pair selector vs load order weld; div=2"} -{"module": "ov009", "addr": "0x0211145c", "name": "func_ov009_0211145c", "size": 380, "target_hex": "f04f2de924d04de200a0a0e18011dae5000051e33800000a97fdfbeb0020b0e124d08d02f04fbd081eff2f0114008de25c108ae25c2082e298affceb14309de518209de51c109de508008de208308de50c208de510108de5afaefceb7d0850e324d08dc2f04fbdc81eff2fc108009ae50f0000e2010050e3170000da018040e2000058e30090a0e3130000dad0b09fe50940a0e15c508ae20070e0e31060a0e3dc2cdae10b00a0e10610a0e100208de50520a0e10430a0e104708de543fefbeb000050e30100000a04109ae53dffffeb019089e2080059e1f0ffffba0509a0e3001060e260118ae578009fe574108ae268018ae56a00a0e34804fceb68009fe50ba9fceb64109fe564309fe5901182e02224a0e1931282e0012040e054109fe544009fe5021041e0b219cae100a9fceb2008a0e1b409cae10a09a0e374018ae50300a0e37c018ae5b0108ae2000091e50108c0e3000081e524d08de2f04fbde81eff2fe15701000000a006ff50e60902d34d6210a00f000088130000", "lang": "c", "divergences": 3, "c_source": "/* BEST_DIV=3 (pure-C floor; historical HAND-ASM was this exact residual)\n * Progress: u64-mask launder on the two store addresses forces ROM's\n * mov r0,#0x14000; rsb r1,r0,#0; str r1,[sl,#0x160]\n * (plain -0x14000 / named temps coalesce to rsb r0,r0,#0 when the sound call\n * is present; sibling func_ov009_021116ec matches the same stores without the\n * call using plain C \u2014 and colors s into r0 because nothing else wants r0).\n *\n * Residual (3 words, size-exact 0x17c): pool const 0xff06a000 is colored r3\n * instead of r0, so mwccarm schedules\n * ldr r3,s; add r1,sl,#0x74; mov r0,#0x6a; str r3,[sl,#0x168]; bl\n * vs ROM\n * ldr r0,s; add r1,sl,#0x74; str r0,[sl,#0x168]; mov r0,#0x6a; bl\n * Call arg 0x6a reserves r0 early; s is rematerializable leftover. Once s is\n * not in r0, mov/str freely reorder (no anti-dep). Coupled reg+schedule.\n *\n * Exhausted (still div=3, often byte-identical residual): nested scopes kill t,\n * s->0x6a reuse, t becomes s, equal-arm delay of 0x6a, comma store-in-arg0/1,\n * both-live fake deps, value launders (+0/|0/^0/u64), half-launder, ptr-first,\n * //cpp refs, goto/do-once/for-once EBB splits, vol stores, pressure dummies,\n * inline store-then-return-0x6a, all pragmas, all mwccarm versions, permuter\n * (score 205 floor, 650+ iters, never improved). Do not promote to src/.\n */\nstruct V3 { int x, y, z; };\nextern char *_ZN5Actor13ClosestPlayerEv(void *self);\nextern int Vec3_Sub(struct V3 *dst, void *a, void *b);\nextern int Vec3_HorzLen(struct V3 *v);\nextern char *_ZN5Actor5SpawnEjjRK7Vector3PK10Vector3_16ii(unsigned int id, unsigned int p1, void *pos, void *rot, int a, int b);\nextern void func_ov009_02111224(char *c, int r1);\nextern int func_0201267c(unsigned int a, void *b);\nextern int RandomIntInternal(void *rng);\nextern int data_0209e650;\n\nvoid func_ov009_0211145c(char *c)\n{\n if (*(unsigned char *)(c + 0x180) != 0) {\n char *p;\n struct V3 copy;\n struct V3 diff;\n int n;\n p = _ZN5Actor13ClosestPlayerEv(c);\n if (p == 0)\n return;\n Vec3_Sub(&diff, c + 0x5c, p + 0x5c);\n copy.x = diff.x;\n copy.y = diff.y;\n copy.z = diff.z;\n if (Vec3_HorzLen(©) > 0x7d0000)\n return;\n n = *(int *)(c + 8) & 0xf;\n if (n > 1) {\n int i = 0;\n int lim = n - 1;\n if (lim > 0) {\n do {\n char *a = _ZN5Actor5SpawnEjjRK7Vector3PK10Vector3_16ii(0x157, 0x10, c + 0x5c, 0, *(signed char *)(c + 0xcc), -1);\n if (a != 0)\n func_ov009_02111224(a, *(int *)(c + 4));\n i++;\n } while (i < lim);\n }\n }\n {\n int t = 0x14000;\n int nvel = 0 - t;\n int s = (int)0xff06a000;\n *(int *)(((long long)(int)(c + 0x160)) & 0xFFFFFFFFFFFFFFFFLL) = nvel;\n *(int *)(((long long)(int)(c + 0x168)) & 0xFFFFFFFFFFFFFFFFLL) = s;\n func_0201267c(0x6a, c + 0x74);\n }\n }\n *(short *)(c + 0x92) = 5000 - (unsigned int)RandomIntInternal(&data_0209e650) % 4000;\n *(unsigned short *)(c + 0x94) = (unsigned int)RandomIntInternal(&data_0209e650) >> 16;\n *(int *)(c + 0x174) = 0x28000;\n *(int *)(c + 0x17c) = 3;\n *(int *)(((int)c + 0xb0) & 0xFFFFFFFFFFFFFFFF) &= ~0x10000;\n}\n", "source": "lunavyqo-groupb-pure-c-best", "floor": {"class": "ordering", "evidence": "call-after-stores: rsb r1 via u64 launder OK; pool s rematerializes to r3 and mov#0x6a before str; sibling without call matches; 100+ pure-C variants", "date": "2026-07-23"}, "floor_note": "call-after-stores s in r3 vs r0; div=3"} {"module": "arm9", "addr": "0x0204322c", "name": "func_0204322c", "size": 92, "target_hex": "00402de90cd04de240209fe540109fe5003092e5042092e504c04de204308de508208de5003091e5042091e524109fe500308ce504208ce508009ce8060091e8850200eb0cd08de20040bde81eff2fe19c9e0902749e0902cc9e0902", "lang": "c", "divergences": 999, "c_source": "/* FLOOR under 1.2/sp2p3: mwccarm always emits push{fp,lr}+mov sp,ip dynamic frame\n * (cand size 0x68 vs ROM 0x5c). Documented wall: notes/mwccarm-codegen.md PTMF wrappers.\n * 2.0/sp2p3 -proc arm7tdmi: 1-word near-miss (ldr r3,[ip] vs ROM ldm ip,{r3}).\n * Tried: C struct-by-value, six-int, local copies, stack arrays, u64, union, nested,\n * //cpp real PTMF, pragma size \u2014 all fp-frame under pin 1.2/sp2p3.\n */\ntypedef struct { int a; int b; } PMF;\nextern int _ZN9ActorBase7ProcessEMS_FivEMS_FbvEMS_FvjE(void *self, PMF a, PMF b, PMF c);\nextern PMF data_02099e9c;\nextern PMF data_02099e74;\nextern PMF data_02099ecc;\n\nint func_0204322c(void *self)\n{\n return _ZN9ActorBase7ProcessEMS_FivEMS_FbvEMS_FvjE(\n self, data_02099ecc, data_02099e74, data_02099e9c);\n}\n", "source": "lunavyqo-groupb-pure-c-best", "note": "size-mismatch size 0x5c vs 0x54"} {"module": "arm9", "addr": "0x02043288", "name": "func_02043288", "size": 92, "target_hex": "00402de90cd04de240209fe540109fe5003092e5042092e504c04de204308de508208de5003091e5042091e524109fe500308ce504208ce508009ce8060091e86e0200eb0cd08de20040bde81eff2fe1b49e0902ac9e0902a49e0902", "lang": "c", "divergences": 999, "c_source": "/* FLOOR under 1.2/sp2p3 \u2014 same PTMF below-sp staging wall as func_0204322c (size 0x68 vs 0x5c). */\ntypedef struct { int a; int b; } PMF;\nextern int _ZN9ActorBase7ProcessEMS_FivEMS_FbvEMS_FvjE(void *self, PMF a, PMF b, PMF c);\nextern PMF data_02099eb4;\nextern PMF data_02099eac;\nextern PMF data_02099ea4;\n\nint func_02043288(void *self)\n{\n return _ZN9ActorBase7ProcessEMS_FivEMS_FbvEMS_FvjE(\n self, data_02099ea4, data_02099eac, data_02099eb4);\n}\n", "source": "lunavyqo-groupb-pure-c-best", "note": "size-mismatch size 0x5c vs 0x54"} {"module": "arm9", "addr": "0x0204335c", "name": "func_0204335c", "size": 92, "target_hex": "00402de90cd04de240209fe540109fe5003092e5042092e504c04de204308de508208de5003091e5042091e524109fe500308ce504208ce508009ce8060091e8390200eb0cd08de20040bde81eff2fe1949e0902c49e0902bc9e0902", "lang": "c", "divergences": 999, "c_source": "/* FLOOR under 1.2/sp2p3 \u2014 same PTMF below-sp staging wall as func_0204322c (size 0x68 vs 0x5c). */\ntypedef struct { int a; int b; } PMF;\nextern int _ZN9ActorBase7ProcessEMS_FivEMS_FbvEMS_FvjE(void *self, PMF a, PMF b, PMF c);\nextern PMF data_02099e94;\nextern PMF data_02099ec4;\nextern PMF data_02099ebc;\n\nint func_0204335c(void *self)\n{\n return _ZN9ActorBase7ProcessEMS_FivEMS_FbvEMS_FvjE(\n self, data_02099ebc, data_02099ec4, data_02099e94);\n}\n", "source": "lunavyqo-groupb-pure-c-best", "note": "size-mismatch size 0x5c vs 0x54"} {"module": "arm9", "addr": "0x020432e4", "name": "func_020432e4", "size": 120, "target_hex": "30402de90cd04de25c109fe5bc40d0e1003091e5042091e550109fe504308de508208de5002091e5041091e504304de2002083e5041083e534109fe5080093e8060091e8560200eb0050a0e1010055e30100001a0400a0e13affffeb0500a0e10cd08de23040bde81eff2fe1849e09027c9e09028c9e0902", "lang": "c", "divergences": 999, "c_source": "/* FLOOR under 1.2/sp2p3 \u2014 PTMF staging wall + conditional func_0204302c (size 0x84 vs 0x78).\n * ROM: push {r4,r5,lr}; sub sp,#0xc; ldrh r4,[r0,#0xc]; stage PMFs; bl Process;\n * if (r==1) func_0204302c(r4); return r;\n */\ntypedef struct { int a; int b; } PMF;\nextern int _ZN9ActorBase7ProcessEMS_FivEMS_FbvEMS_FvjE(void *self, PMF a, PMF b, PMF c);\nextern PMF data_02099e84;\nextern PMF data_02099e7c;\nextern PMF data_02099e8c;\nextern void func_0204302c(int id);\n\nint func_020432e4(void *self)\n{\n unsigned short id = *(unsigned short *)((char *)self + 0xc);\n int r = _ZN9ActorBase7ProcessEMS_FivEMS_FbvEMS_FvjE(\n self, data_02099e8c, data_02099e7c, data_02099e84);\n if (r == 1)\n func_0204302c(id);\n return r;\n}\n", "source": "lunavyqo-groupb-pure-c-best", "note": "size-mismatch size 0x78 vs 0x6c"} +{"module": "arm9", "addr": "0x02009e70", "name": "func_02009e70", "size": 4252, "target_hex": "f04f2de967df4de20080a0e1100198e5000050e30500001a800088e28c1088e245c600eb011c88e2bc07c1e1f20300ea540198e5982088e2010c10e2dc0f9f153c0198051c008de5101198e534008de25c1081e20ccd00eb101198e534008de25c2081e2001092e5981088e5041092e59c1088e5081092e5a01088e521cc00eb0020a0e320208de524208de5181198e50070a0e1000051e30c00000a0100a0e324008de5142188e5181198e5700f9fe55c2081e2001092e5201188e5041092e5241188e5081092e5281188e52c0188e524108de200108de520208de21c308de20800a0e1981088e2c30900eb24109de50060a0e1000051e30040a0e30400000a120e88e20020a0e1981088e2014aa0e3322601eb1000a0e30410a0e100008de5130e88e2012ca0e38030a0e36ac400eb1c009de5b622d0e11c4090e5205090e5010012e21500001a540198e5020010e21200000a063ba0e300a0a0e3941380e095c38be0029ba0e3940a20e0091091e095ba2be0c44fa0e1940320e00000a0e209909ce02146a0e1004a84e1c50fa0e190b32be00000abe22956a0e1005a85e1800e9fe50000d0e5010050e30100a0030000a013000050e31800000a020012e21600000a0800a0e1cdfcffeb000050e31200000a501e9fe50030a0e394c18be095a189e0022ba0e394b32be0c40fa0e190b12be002409ce00000abe202a09ae02446a0e1959329e0c52fa0e1929129e00010a9e22a56a0e1004a84e1015a85e1540198e5800010e21200000a061ba0e30030a0e394c18be095a189e0022ba0e394b32be0c40fa0e190b12be002409ce00000abe202a09ae02446a0e1959329e0c52fa0e1929129e00010a9e22a56a0e1004a84e1015a85e12c1198e5300198e5041041e09130c2e0020ba0e3001093e00000a2e22116a0e1001a81e10800a0e1011084e0b6fcffeb24109de500b0a0e1000051e30ba0a0110500001a000055e3005065b20800a0e10510a0e1acfcffeb00a0a0e100708de51c309de50800a0e10620a0e1981088e2590700eb3c2d9fe51810a0e30040d2e5182198e5303d9fe5940101e0b11093e104008de5000052e3435c01e20500000a800088e28c1088e285c500eb011c88e2bc07c1e11c0300ea1c109de5fc0c9fe5000051e10400001a20109de50800a0e15a0600eb0050a0e3130300eae00c9fe5000051e10400001a20109de50800a0e10620a0e16d0500eb0b0300ea540198e5010b10e20803001ab80c9fe5000051e10400001a20109de50800a0e10620a0e1e00400eb000300ea9c0c9fe5000051e10400001a20109de50800a0e10620a0e1b30300ebf80200ea552f88e2001092e50800a0e1011a81e3001082e51c109de5001091e568fcffeb1c109de508008de5041091e50800a0e163fcffeb20109de50c008de5000051e31a00000a0000d1e5020050e31700001a0100d1e5000050e30900001af200d1e1f620d1e1f410d1e10006a0e10226a0e18c0088e50106a0e1900088e5942088e5110000eafa00d1e1011c88e2f628d1e1020980e20008a0e14008a0e1000052e1b608c1110100a013a601c815060000eaa601d8e5000050e3c80b9f0500108800f000d10102098002b000c10140008de28c1088e2802088e2fbcb00eb40008de2f32401eb28008de50201a0e39c1098e510008de5a02098e5980098e5fa1981e24c008de550108de554208de59c2098e5741b9fe5d0008de20241e0e3019082e016b500eb0800a0e1d0108de286f9ffebd0008de2981088e24c208de20030a0e3beb400ebd0008de2aeb800eb000050e30600000a94008de2d0108de28fb400eb98009de5024740e2090054e10940a0b1540198e5010c10e26100001a1c009de5b602d0e1080010e25d00000aa01098e5980098e5040059e158008de55c908de560108de5560000cad0008de258108de28c2088e20030a0e3a0b400ebd0008de290b800eb000050e34d00000ae4008de264108de270b600eba0008de2d0108de26eb400eba0009de5e00088e5a4009de5e40088e5a8009de5e80088e564009de5ec0088e568009de5f00088e56c009de5f40088e568009de5000050e3000060b2b50e50e3050000da552f88e2001092e5580a9fe5000081e1000082e5300000ea70008de2d0108de254b400eb64009de56c109de514c400eb020980e20008a0e14098a0e1010c88e2fc07d0e1a611d8e5000049e00008a0e14008b0e10109a0430109a05300006052000089e00008a0e1000051e34098a0e10600000a010c88e2f618d0e10900a0e102c300eb010950e3010c88a2f698d0a1010c88e2b698c0e10110a0e3a611c8e5fc27d0e1f618d0e1020c15e2010042e00008a0e14008a0e1000060120008a0114008a011000050e3551f88e2000091e50050a0c3010780e3000081e5000055e30600000a010915e20100000a1a00a0e3902000eb0000a0e3a601c8e5090000eaa601d8e5000050e30600001a34199fe51800a0e30020d1e54c199fe5920000e0b00091e1435c00e2540198e5010c10e20800000a00199fe50800a0e196fbffeb28109de5000051e1551f88c2000091c5010cc0c3000081c5000055e30f00001a010c88e2b00ad0e1000050e30b00001aa601d8e5000050e30800001a08009de5000057e1050000da28909de50b0059e1020000ba0c009de5000059e11c0100ca010c88e2fc97d0e1800088e28c1088e267c400eb011c88e2bc07c1e1000055e30200001ab00ad1e1000050e33400000a010915e20300001a010c88e2b00ad0e1000050e31900000a000055e310119815010c8812fe18d1110420a0e3023ba0e302198112be19c011010ba0e300008de5010c88e2fe19d0e15f0f88e263c200eb000050e30110a0130010a003010c88e2b01ac0e1b00ad0e1000050e3551f8812000091156000801300008115120000ea020c15e20800000a5f2f88e2f000d2e1551f88e2010b40e2b000c2e1000091e5200080e3000081e5070000ea5f2f88e2f000d2e1551f88e2010b80e2b000c2e1000091e5400080e3000081e50050a0e3450000eaa601d8e5000050e30a00000a010ca0e300008de5f618d1e15f0f88e21020a0e3023ca0e338c200eb000050e30000a003a601c805370000ea1c009de588179fe5010050e10200000a80179fe5010050e10400001a20109de50800a0e10720a0e18b0400eb2b0000ea24109de5000051e32800001a58179fe558279fe5010050e110119805f419d10110119815fe18d111020050e1010c8802021981e20118a0e1f428d0014118a0e102108100bc17c0011800000a28309de50c209de5020053e1060000ca2830a0e35f0f88e21420a0e300308de5063ca0e30bc200eb0d0000eab602d0e1010c10e2010c8812bc97c0110800001a08009de5000057e1050000ca2830a0e35f0f88e21420a0e300308de56430a0e3fcc100eb28009de514008de50a0050e1570000da000057e34700000a1c109de5a0069fe5000051e14300001a34008de2ccc900eb0010a0e138009de522c300ebfe1da0e30090a0e1000061e2000059e10090a0b1010000bafe0d59e30190a0c140008de2bfc900eb00b0a0e144009de50b10a0e1000060e213c300ebb801cde10000a0e300008de50910a0e118008de22020a0e3023ba0e3d6c100ebb801dde10b10a0e120369fe54002a0e18090a0e18900a0e1f02093e1010089e28000a0e128b09de5f00093e1002062e29b92c3e09b20c0e002bba0e30b9099e000c0a3e20b3092e02926a0e10c2a82e144208de50020a0e22306a0e1020a80e1512201eb40209de50b10a0e19290c3e0019099e00020a3e22936a0e1023a83e148209de540308de59230c0e0011093e00000a0e22116a0e1001a81e148108de5012ca0e300208de528008de20a10a0e1023887e2012ba0e3f8c100eb28009de514109de5382201eb0010a0e140008de228ca00eb2b0000ea0b0050e1290000aa012ca0e300208de528008de20b10a0e1023887e2012ba0e3e8c100eb28009de544209de59070c3e09202c1e0000057e00110c3e05fcb00eb0070a0e140008de269c900eb0010a0e10700a0e11e2201eb40209de5021ba0e39270c3e0017097e00020a3e22736a0e1023a83e140308de548309de5622f88e29370c0e0011097e00000a0e22116a0e1001a81e148108de5010c88e2fc07d0e1f010d2e1090040e0000041e0b000c2e140008de24ec900eb010a50e3010aa0b30010a0e348008de540108de5010c88e2fc27d0e140308de28c0088e2801088e20ec300eb180000ea0a0059e1160000da012ca0e300208de528008de20a10a0e1023887e2012ba0e3aec100eb28009de50910a0e1ee2101eb0010a0e140008de2dec900ebac008de2801088e240208de221ca00ebac009de58c0088e5b0009de5900088e5b4009de5940088e50800a0e176f8ffeb000050e30600000a540198e5600010e2551f8812000091150150a0136000c01300008115900098e594a098e58c7098e5019680e2d0008de24c208de28c1088e20030a0e34c708de550908de554a08de5d0b200ebd0008de2c0b600eb000050e30700000ab8008de2d0108de2a1b200ebbc109de5020741e2000054e150108de50040a0c17c008de28c1088e2802088e2f4c900eb7c008de20110a0e363c900eb7c109de580009de588108de584109de5010680e28c008de590108de5d0008de27c108de288208de20030a0e3b1b200ebd0008de2a1b600eb000050e30700000ac4008de2d0108de282b200ebc8009de5020740e2000054e18c008de50040a0c1520f8de29c9098e562b200ebf4229fe5521f8de20800a0e194218de560f7ffeb520f8de24c108de20020a0e320b200eb1c109de5c4029fe5000051e10100009a520f8de21eaa00eb520f8de2c6b800eb000050e31c109de5ac029fe58c919d15000051e10500001aa0029fe5000090e5000059e10090a0b1197989e24e0000ea540198e50970a0e1060059e10670a0b1020010e204009de57a29a013001046e04e29a0030800a0e1021081e0d2f9ffeb1c109de5007087e0b602d1e1800010e20200000a900098e5070050e10070a0c11c309de52c108de2080093e530208de22c008de50c3093e50800a0e130308de5440700eb842098e51c109de510029fe5022047e044208de5000051e10300001a38009de5000050e3f8019fb5000000ba2c009de528a09de530109de59a20c3e0020ba0e3006092e09a21c1e00030a3e2002092e02666a0e144009de5036a86e10010a1e2060050e1840098b52226a0e1012a82e1067080b0020000ba020050e1840098c5027080c09c019fe5d000d0e1260050e30400001a90019fe5901098e5000089e0000051e1900088b57c019fe5000089e0000054e170019fe550409db5000089e0020150e310008dc51c109de55c019fe5000051e10b00000a54019fe5000051e10800000a4c019fe5000051e10500000a10009de5000057e10070a0b1010000ba040057e10470a0c1014ca0e30710a0e1900088e2032ca0e30539a0e300408de5d6c000eb800088e28c1088e26bc200eb011c88e2bc07c1e1520f8de2c9b100ebd0008de253b200eb000055e30800000ae4009fe5000090e5000050e30100001a0e00a0e3561e00ebcc009fe5005080e50a0000eac0009fe50030a0e3003080e5540198e5600010e20400000a580198e50210a0e34320a0e3961d00eb580188e5800088e28c1088e23dc200eb011c88e2be07c1e10100a0e367df8de2f04fbde81eff2fe17c74080260fe0d00d8f20902cc140000400e0a029ef409023c730802dc730802047408022c7408028601000000250800000208009cf40902ac710802d47108024c720802cc740802cc6f08021422080200c05d00f46f08022cf309026c700802490a0000f8f20902c85b020094700802e47008020c71080200b00902", "lang": "c", "divergences": 1613, "c_source": "typedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef unsigned short ushort;\ntypedef signed short s16;\ntypedef unsigned int u32;\ntypedef signed int s32;\ntypedef unsigned int uint;\ntypedef unsigned long long u64;\n\n/* Loose int-typed pointer params so Ghidra-shaped arithmetic compiles under mwccarm C. */\ns16 Vec3_HorzAngle(int a, int b);\ns16 Vec3_VertAngle(int a, int b);\nvoid Vec3_Sub(int out, int a, int b);\nvoid Vec3_Add(int out, int a, int b);\nint Vec3_HorzLen(int v);\nint LenVec3(int v);\nvoid SubVec3(int a, int b, int c);\nvoid Vec3_MulScalarInPlace(int v, int s);\nvoid Vec3_AsrInPlace(int v, int s);\nvoid Vec3_RotateYAndTranslate(int o, int a, int ang, int b);\nint func_0200c66c(int self, int a, int b, int c, int d);\nint func_0200bec4(int self, int v, int r2, int r3, int sp0);\nvoid func_0200bb28(int self, int a);\nvoid func_0200b798(int self, int a, int r2);\nvoid func_0200b590(int self, int a, int r2);\nvoid func_0200b0fc(int self, int a, int r2);\nvoid func_0200b990(int self, int a, int r2);\nint func_02009374(int self);\nunsigned int func_020093f4(int p, unsigned int x);\nunsigned int func_020093d4(int p, int a);\nvoid func_0200897c(int self, int arg);\nint func_02008cb4(int c);\nvoid func_0200c9e0(int c, int r1, int r2);\nvoid func_02012790(int a);\nint func_020124c4(int a, int b, int c);\nint Math_Function_0203b14c(int out, int a, int b, int c, int sp0);\nint ApproachAngle(int out, int cur, int r2, int r3, int sp0);\nint AngleDiff(int a, int b);\n\nvoid _ZN11RaycastLineC1Ev(int self);\nvoid _ZN11RaycastLineD1Ev(int self);\nvoid _ZN11RaycastLine13SetObjAndLineERK7Vector3S2_P5Actor(int self, int a, int b, int act);\nint _ZN11RaycastLine10DetectClsnEv(int self);\nvoid _ZN11RaycastLine10GetClsnPosEv(int out, int self);\nvoid _ZN13RaycastGroundC1Ev(int self);\nvoid _ZN13RaycastGroundD1Ev(int self);\nvoid _ZN13RaycastGround12SetObjAndPosERK7Vector3P5Actor(int self, int pos, int act);\nint _ZN13RaycastGround10DetectClsnEv(int self);\nvoid _ZN4BgCh19StartDetectingWaterEv(int self);\nvoid _ZNK11SurfaceInfo12CopyNormalToER7Vector3(int self, int out);\nint _ZN4cstd5atan2E5Fix12IiES1_(int a, int b);\nint _ZN4cstd4fdivEii(int a, int b);\nunsigned int _ZN4cstd4sqrtEy(unsigned int lo, int hi);\n\nextern u8 data_0208747c[];\nextern u8 data_0209f2d8;\nextern u8 data_020a0e40;\nextern s16 data_0209f49e[];\nextern s16 data_0209f49c[];\nextern u8 data_0208733c[];\nextern u8 data_020873dc[];\nextern u8 data_02087404[];\nextern u8 data_0208742c[];\nextern u8 data_020871ac[];\nextern u8 data_020871d4[];\nextern u8 data_0208724c[];\nextern u8 data_020874cc[];\nextern u8 data_02086fcc[];\nextern s16 data_02082214[];\nextern u8 data_02086ff4[];\nextern int data_0209f32c;\nextern u8 data_0208706c[];\nextern signed char data_0209f2f8;\nextern u8 data_02087094[];\nextern u8 data_020870e4[];\nextern u8 data_0208710c[];\nextern int data_0209b000;\n\nu32 func_02009e70(int param_1)\n{\n ushort uVar1;\n short sVar2;\n short sVar3;\n long long lVar4;\n long long lVar5;\n u16 uVar6;\n int iVar7;\n int iVar8;\n int iVar9;\n int iVar10;\n int iVar11;\n int iVar12;\n u32 *puVar13;\n u32 uVar14;\n int iVar15;\n int iVar16;\n uint uVar17;\n u32 *puVar18;\n u32 uVar19;\n uint uVar20;\n int iVar21;\n uint uVar22;\n int iVar23;\n uint uVar24;\n int bVar25;\n int local_1b0;\n ushort local_1a8 [2];\n int local_1a4;\n int local_1a0;\n uint local_19c;\n int local_198;\n int local_194;\n int local_190;\n u8 auStack_18c[4];\n int local_188;\n uint local_180;\n uint local_17c;\n uint local_178;\n u32 local_174;\n int local_170;\n u32 local_16c;\n u32 local_168;\n int local_164;\n u32 local_160;\n u32 local_15c;\n int local_158;\n u32 local_154;\n u8 auStack_150[12];\n u32 local_144;\n int local_140;\n u32 local_13c;\n u32 local_138;\n int local_134;\n u32 local_130;\n u8 auStack_12c[4];\n int local_128;\n u32 local_120;\n u32 local_11c;\n u32 local_118;\n u32 local_114;\n u32 local_110;\n u32 local_10c;\n u8 auStack_108[4];\n int local_104;\n u8 auStack_fc[4];\n int local_f8;\n u8 auStack_f0[20];\n u8 auStack_dc[100];\n u8 auStack_78[68];\n int local_34;\n u32 local_2c;\n \n if (*(int *)(param_1 + 0x110) == 0) {\n uVar6 = Vec3_HorzAngle(param_1 + 0x80,param_1 + 0x8c);\n *(u16 *)(param_1 + 0x17c) = uVar6;\n }\n else {\n local_1a4 = ((int)&data_0208747c);\n if ((*(uint *)(param_1 + 0x154) & 0x100) == 0) {\n local_1a4 = *(int *)(param_1 + 0x13c);\n }\n Vec3_Sub(((int)auStack_18c),*(int *)(param_1 + 0x110) + 0x5c,param_1 + 0x98);\n iVar15 = *(int *)(param_1 + 0x110);\n *(u32 *)(param_1 + 0x98) = *(u32 *)(iVar15 + 0x5c);\n *(u32 *)(param_1 + 0x9c) = *(u32 *)(iVar15 + 0x60);\n *(u32 *)(param_1 + 0xa0) = *(u32 *)(iVar15 + 100);\n iVar15 = Vec3_HorzLen(((int)auStack_18c));\n local_1a0 = 0;\n bVar25 = *(int *)(param_1 + 0x118) != 0;\n if (bVar25) {\n *(u32 *)(param_1 + 0x114) = 0;\n uVar19 = 0xdfe60;\n iVar16 = *(int *)(param_1 + 0x118);\n *(u32 *)(param_1 + 0x120) = *(u32 *)(iVar16 + 0x5c);\n *(u32 *)(param_1 + 0x124) = *(u32 *)(iVar16 + 0x60);\n *(u32 *)(param_1 + 0x128) = *(u32 *)(iVar16 + 100);\n *(u32 *)(param_1 + 300) = uVar19;\n }\n local_19c = (uint)bVar25;\n iVar16 = func_0200c66c(param_1,param_1 + 0x98,((int)&local_1a0),((int)&local_1a4),((int)&local_19c));\n uVar19 = 0;\n if (local_19c != 0) {\n uVar19 = 0x1000;\n SubVec3(param_1 + 0x120,param_1 + 0x98,param_1 + 0x120);\n }\n Math_Function_0203b14c(param_1 + 0x130,uVar19,0x100,0x80,0x10);\n uVar20 = ((u32 *)local_1a4)[7];\n uVar22 = ((u32 *)local_1a4)[8];\n if (((*(ushort *)(local_1a4 + 0x26) & 1) == 0) && ((*(uint *)(param_1 + 0x154) & 2) != 0))\n {\n uVar17 = (uint)((unsigned long long)uVar20 * 0x1800);\n uVar24 = (uint)((unsigned long long)uVar22 * 0x1800);\n uVar20 = uVar17 + 0x800 >> 0xc |\n (((int)uVar20 >> 0x1f) * 0x1800 + (int)((unsigned long long)uVar20 * 0x1800 >> 0x20) +\n (uint)(0xfffff7ff < uVar17)) * 0x100000;\n uVar22 = uVar24 + 0x800 >> 0xc |\n (((int)uVar22 >> 0x1f) * 0x1800 + (int)((unsigned long long)uVar22 * 0x1800 >> 0x20) +\n (uint)(0xfffff7ff < uVar24)) * 0x100000;\n }\n if (((data_0209f2d8 == '\\x01') && ((*(ushort *)(local_1a4 + 0x26) & 2) != 0)) &&\n (iVar7 = func_02009374(param_1), iVar7 != 0)) {\n uVar24 = (uint)((unsigned long long)0x14cc * (unsigned long long)uVar20);\n uVar17 = (uint)((unsigned long long)0x14cc * (unsigned long long)uVar22);\n uVar20 = uVar24 + 0x800 >> 0xc |\n (((int)uVar20 >> 0x1f) * 0x14cc +\n (int)((unsigned long long)0x14cc * (unsigned long long)uVar20 >> 0x20) +\n (uint)(0xfffff7ff < uVar24)) * 0x100000;\n uVar22 = uVar17 + 0x800 >> 0xc |\n (((int)uVar22 >> 0x1f) * 0x14cc +\n (int)((unsigned long long)0x14cc * (unsigned long long)uVar22 >> 0x20) +\n (uint)(0xfffff7ff < uVar17)) * 0x100000;\n }\n if ((*(uint *)(param_1 + 0x154) & 0x80) != 0) {\n uVar24 = (uint)((unsigned long long)uVar20 * 0x1800);\n uVar17 = (uint)((unsigned long long)uVar22 * 0x1800);\n uVar20 = uVar24 + 0x800 >> 0xc |\n (((int)uVar20 >> 0x1f) * 0x1800 + (int)((unsigned long long)uVar20 * 0x1800 >> 0x20) +\n (uint)(0xfffff7ff < uVar24)) * 0x100000;\n uVar22 = uVar17 + 0x800 >> 0xc |\n (((int)uVar22 >> 0x1f) * 0x1800 + (int)((unsigned long long)uVar22 * 0x1800 >> 0x20) +\n (uint)(0xfffff7ff < uVar17)) * 0x100000;\n }\n lVar4 = (long long)(int)(*(int *)(param_1 + 300) - uVar20) * (long long)*(int *)(param_1 + 0x130)\n + 0x800;\n iVar8 = func_020093f4(param_1,uVar20 + ((uint)lVar4 >> 0xc |\n (int)((unsigned long long)lVar4 >> 0x20) * 0x100000));\n iVar7 = iVar8;\n if (local_19c == 0) {\n if ((int)uVar22 < 0) {\n uVar22 = -uVar22;\n }\n iVar7 = func_020093f4(param_1,uVar22);\n }\n iVar9 = func_0200bec4(param_1,param_1 + 0x98,iVar16,local_1a4,iVar15);\n uVar1 = *(ushort *)(data_0209f49e + (uint)data_020a0e40 * 0x18);\n uVar22 = uVar1 & 0x4300;\n if (*(int *)(param_1 + 0x118) == 0) {\n if (local_1a4 == ((int)&data_0208733c)) {\n func_0200bb28(param_1,local_1a0);\n uVar22 = 0;\n }\n else if (local_1a4 == ((int)&data_020873dc)) {\n func_0200b798(param_1,local_1a0,iVar16);\n }\n else if ((*(uint *)(param_1 + 0x154) & 0x400) == 0) {\n if (local_1a4 == ((int)&data_02087404)) {\n func_0200b590(param_1,local_1a0,iVar16);\n }\n else if (local_1a4 == ((int)&data_0208742c)) {\n func_0200b0fc(param_1,local_1a0,iVar16);\n }\n else {\n *(uint *)(param_1 + 0x154) = *(uint *)(param_1 + 0x154) | 0x1000;\n iVar10 = func_020093f4(param_1,*(u32 *)local_1a4);\n iVar11 = func_020093f4(param_1,((u32 *)local_1a4)[1]);\n if ((local_1a0 == 0) || (*(char *)local_1a0 != '\\x02')) {\n if (*(char *)(param_1 + 0x1a6) == '\\0') {\n *(short *)(param_1 + 0x186) = *(short *)(param_1 + 0x186) + -0x8000;\n }\n }\n else if (((char *)local_1a0)[1] == '\\0') {\n sVar2 = *(short *)(local_1a0 + 6);\n sVar3 = *(short *)(local_1a0 + 4);\n *(int *)(param_1 + 0x8c) = (int)*(short *)(local_1a0 + 2) << 0xc;\n *(int *)(param_1 + 0x90) = (int)sVar3 << 0xc;\n *(int *)(param_1 + 0x94) = (int)sVar2 << 0xc;\n }\n else {\n iVar21 = (*(short *)(local_1a0 + 10) + 0x8000) * 0x10000;\n if ((int)*(short *)(param_1 + 0x186) != iVar21 >> 0x10) {\n *(short *)(param_1 + 0x186) = (short)((uint)iVar21 >> 0x10);\n *(u8 *)(param_1 + 0x1a6) = 1;\n }\n }\n Vec3_Sub(((int)&local_180),param_1 + 0x8c,param_1 + 0x80);\n local_198 = LenVec3(((int)&local_180));\n local_1b0 = -0x80000000;\n local_16c = *(u32 *)(param_1 + 0xa0);\n local_174 = *(u32 *)(param_1 + 0x98);\n local_170 = *(int *)(param_1 + 0x9c) + 0x3e8000;\n iVar23 = *(int *)(param_1 + 0x9c) + 0x82500;\n _ZN11RaycastLineC1Ev(((int)auStack_f0));\n func_0200897c(param_1,((int)auStack_f0));\n _ZN11RaycastLine13SetObjAndLineERK7Vector3S2_P5Actor\n (((int)auStack_f0),param_1 + 0x98,((int)&local_174),0);\n iVar12 = _ZN11RaycastLine10DetectClsnEv(((int)auStack_f0));\n iVar21 = 0x7fffffff;\n if (iVar12 != 0) {\n _ZN11RaycastLine10GetClsnPosEv(((int)auStack_12c),((int)auStack_f0));\n iVar21 = local_128 + -0x80000;\n if (local_128 + -0x80000 < iVar23) {\n iVar21 = iVar23;\n }\n }\n if (((*(uint *)(param_1 + 0x154) & 0x100) == 0) &&\n ((*(ushort *)(local_1a4 + 0x26) & 8) != 0)) {\n local_160 = *(u32 *)(param_1 + 0xa0);\n local_168 = *(u32 *)(param_1 + 0x98);\n local_164 = iVar23;\n if (iVar23 <= iVar21) {\n _ZN11RaycastLine13SetObjAndLineERK7Vector3S2_P5Actor\n (((int)auStack_f0),((int)&local_168),param_1 + 0x8c,0);\n iVar12 = _ZN11RaycastLine10DetectClsnEv(((int)auStack_f0));\n if (iVar12 != 0) {\n _ZNK11SurfaceInfo12CopyNormalToER7Vector3(((int)auStack_dc),((int)&local_15c));\n _ZN11RaycastLine10GetClsnPosEv(((int)&local_120),((int)auStack_f0));\n *(u32 *)(param_1 + 0xe0) = local_120;\n *(u32 *)(param_1 + 0xe4) = local_11c;\n *(u32 *)(param_1 + 0xe8) = local_118;\n *(u32 *)(param_1 + 0xec) = local_15c;\n *(int *)(param_1 + 0xf0) = local_158;\n *(u32 *)(param_1 + 0xf4) = local_154;\n if (local_158 < 0) {\n local_158 = -local_158;\n }\n if (local_158 < 0xb51) {\n _ZN11RaycastLine10GetClsnPosEv(((int)auStack_150),((int)auStack_f0));\n iVar12 = _ZN4cstd5atan2E5Fix12IiES1_(local_15c,local_154);\n iVar12 = (iVar12 + 0x8000) * 0x10000 >> 0x10;\n if ((iVar12 - *(short *)(param_1 + 0x17c)) * 0x10000 >> 0x10 < 0) {\n iVar23 = 0x4000;\n }\n else {\n iVar23 = -0x4000;\n }\n iVar12 = (iVar12 + iVar23) * 0x10000 >> 0x10;\n if ((*(char *)(param_1 + 0x1a6) != '\\0') &&\n (iVar23 = AngleDiff(iVar12,(int)*(short *)(param_1 + 0x186)), 0x3fff < iVar23))\n {\n iVar12 = (int)*(short *)(param_1 + 0x186);\n }\n *(short *)(param_1 + 0x186) = (short)iVar12;\n *(u8 *)(param_1 + 0x1a6) = 1;\n iVar12 = ((int)*(short *)(param_1 + 0x17c) - (int)*(short *)(param_1 + 0x186)) *\n 0x10000 >> 0x10;\n if ((uVar1 & 0x200) != 0) {\n iVar12 = iVar12 * -0x10000 >> 0x10;\n }\n if (0 < iVar12) {\n uVar22 = 0;\n }\n *(uint *)(param_1 + 0x154) = *(uint *)(param_1 + 0x154) | 0x40000;\n }\n else {\n *(uint *)(param_1 + 0x154) = *(uint *)(param_1 + 0x154) | 0x80200;\n }\n }\n }\n }\n if (uVar22 == 0) {\n if (*(char *)(param_1 + 0x1a6) == '\\0') {\n uVar22 = *(ushort *)(data_0209f49c + (uint)data_020a0e40 * 0x18) & 0x4300;\n }\n }\n else {\n if ((uVar22 & 0x4000) != 0) {\n func_02012790(0x1a);\n }\n *(u8 *)(param_1 + 0x1a6) = 0;\n }\n if (((*(uint *)(param_1 + 0x154) & 0x100) != 0) &&\n (iVar12 = func_020093f4(param_1,0xdfe60), iVar12 < local_198)) {\n *(uint *)(param_1 + 0x154) = *(uint *)(param_1 + 0x154) & 0xfffffeff;\n }\n iVar12 = local_198;\n if (((((uVar22 == 0) && (*(short *)(param_1 + 0x1a0) == 0)) &&\n (*(char *)(param_1 + 0x1a6) == '\\0')) && ((iVar10 < iVar15 && (iVar8 <= local_198))))\n && (iVar11 < local_198)) {\n if (iVar7 < local_198) {\n Math_Function_0203b14c(((int)&local_198),iVar7,0x400,iVar15 + 0x20000,0x100);\n uVar19 = _ZN4cstd4fdivEii(local_198,iVar12);\n Vec3_MulScalarInPlace(((int)&local_180),uVar19);\n Vec3_Add(((int)&local_114),param_1 + 0x80,((int)&local_180));\n *(u32 *)(param_1 + 0x8c) = local_114;\n *(u32 *)(param_1 + 0x90) = local_110;\n *(u32 *)(param_1 + 0x94) = local_10c;\n }\n }\n else {\n sVar2 = *(short *)(param_1 + 0x17c);\n uVar6 = Vec3_HorzAngle(param_1 + 0x80,param_1 + 0x8c);\n *(u16 *)(param_1 + 0x17c) = uVar6;\n if ((uVar22 == 0) && (*(short *)(param_1 + 0x1a0) == 0)) {\n if (*(char *)(param_1 + 0x1a6) == '\\0') {\n if ((local_1a4 == ((int)&data_020871ac)) || (local_1a4 == ((int)&data_020871d4))) {\n func_0200b990(param_1,local_1a0,iVar15);\n }\n else if (local_19c == 0) {\n if (local_1a4 == ((int)&data_0208724c)) {\n sVar3 = *(short *)(*(int *)(param_1 + 0x110) + 0x94);\n }\n else {\n sVar3 = *(short *)(*(int *)(param_1 + 0x110) + 0x8e);\n }\n bVar25 = local_1a4 == ((int)&data_020874cc);\n puVar13 = (u32 *)local_1a4;\n if (bVar25) {\n puVar13 = (u32 *)(param_1 + 0x100);\n }\n iVar12 = (sVar3 + 0x8000) * 0x10000;\n puVar18 = (u32 *)((int)&data_020874cc);\n if (bVar25) {\n puVar18 = (u32 *)(int)*(short *)(puVar13 + 0x21);\n }\n iVar23 = iVar12 >> 0x10;\n if (bVar25) {\n *(short *)(puVar13 + 0x1f) = (short)((uint)iVar12 >> 0x10) + (short)puVar18;\n }\n else if (iVar11 < local_198) {\n if ((*(ushort *)((int)puVar13 + 0x26) & 0x100) == 0) {\n if (iVar15 <= iVar10) {\n ApproachAngle(param_1 + 0x17c,iVar23,0x14,100,0x28);\n }\n }\n else {\n *(short *)(param_1 + 0x17c) = sVar2;\n }\n }\n else {\n ApproachAngle(param_1 + 0x17c,iVar23,0x14,0x600,0x28);\n }\n }\n }\n else {\n iVar10 = ApproachAngle(param_1 + 0x17c,(int)*(short *)(param_1 + 0x186),0x10,0x200,\n 0x100);\n if (iVar10 == 0) {\n *(u8 *)(param_1 + 0x1a6) = 0;\n }\n }\n }\n else {\n if (((uVar22 & 0x4000) == 0) && (*(short *)(param_1 + 0x1a0) == 0)) {\n if ((uVar22 & 0x200) == 0) {\n *(short *)(param_1 + 0x17c) = *(short *)(param_1 + 0x17c) + 0x400;\n *(uint *)(param_1 + 0x154) = *(uint *)(param_1 + 0x154) | 0x40;\n }\n else {\n *(short *)(param_1 + 0x17c) = *(short *)(param_1 + 0x17c) + -0x400;\n *(uint *)(param_1 + 0x154) = *(uint *)(param_1 + 0x154) | 0x20;\n }\n }\n else {\n if (uVar22 != 0) {\n *(short *)(param_1 + 0x19e) =\n *(short *)(*(int *)(param_1 + 0x110) + 0x8e) + -0x8000;\n }\n iVar10 = ApproachAngle(param_1 + 0x17c,(int)*(short *)(param_1 + 0x19e),4,0x800,\n 0x400);\n *(ushort *)(param_1 + 0x1a0) = (ushort)(iVar10 != 0);\n if (*(short *)(param_1 + 0x1a0) != 0) {\n *(uint *)(param_1 + 0x154) = *(uint *)(param_1 + 0x154) | 0x60;\n }\n }\n uVar22 = 0;\n }\n iVar10 = local_198;\n if (iVar7 < local_198) {\n if ((iVar15 != 0) && (local_1a4 == ((int)&data_02086fcc))) {\n uVar19 = Vec3_HorzLen(((int)auStack_18c));\n iVar8 = _ZN4cstd5atan2E5Fix12IiES1_(local_188,uVar19);\n if (iVar8 < -0x3f80) {\n iVar8 = -0x3f80;\n }\n else if (0x3f80 < iVar8) {\n iVar8 = 0x3f80;\n }\n uVar19 = Vec3_HorzLen(((int)&local_180));\n local_1a8[0] = _ZN4cstd5atan2E5Fix12IiES1_(-local_17c,uVar19);\n ApproachAngle((int)local_1a8,iVar8,0x20,0x800,0);\n lVar4 = (long long)local_198 *\n (long long)\n -(int)*(short *)(data_02082214 + ((int)(uint)local_1a8[0] >> 4) * 4) + 0x800;\n lVar5 = (long long)local_198 *\n (long long)\n (int)*(short *)(data_02082214 + (((int)(uint)local_1a8[0] >> 4) * 2 + 1) * 2)\n + 0x800;\n local_17c = (uint)lVar4 >> 0xc | (int)((unsigned long long)lVar4 >> 0x20) * 0x100000;\n iVar8 = _ZN4cstd4fdivEii((uint)lVar5 >> 0xc |\n (int)((unsigned long long)lVar5 >> 0x20) * 0x100000,uVar19);\n lVar4 = (long long)(int)local_180 * (long long)iVar8 + 0x800;\n local_180 = (uint)lVar4 >> 0xc | (int)((unsigned long long)lVar4 >> 0x20) * 0x100000;\n lVar4 = (long long)(int)local_178 * (long long)iVar8 + 0x800;\n local_178 = (uint)lVar4 >> 0xc | (int)((unsigned long long)lVar4 >> 0x20) * 0x100000;\n }\n Math_Function_0203b14c(((int)&local_198),iVar7,0x400,iVar15 + 0x20000,0x100);\n uVar19 = _ZN4cstd4fdivEii(local_198,iVar10);\n Vec3_MulScalarInPlace(((int)&local_180),uVar19);\n }\n else if (local_198 < iVar8) {\n Math_Function_0203b14c(((int)&local_198),iVar8,0x400,iVar15 + 0x20000,0x100);\n uVar17 = (uint)((long long)local_198 * (long long)local_198);\n uVar20 = (uint)((long long)(int)local_17c * (long long)(int)local_17c);\n uVar19 = _ZN4cstd4sqrtEy(uVar17 - uVar20,\n (int)((unsigned long long)((long long)local_198 * (long long)local_198)\n >> 0x20) -\n ((int)((unsigned long long)\n ((long long)(int)local_17c * (long long)(int)local_17c)\n >> 0x20) + (uint)(uVar17 < uVar20)));\n uVar14 = Vec3_HorzLen(((int)&local_180));\n iVar15 = _ZN4cstd4fdivEii(uVar19,uVar14);\n lVar4 = (long long)(int)local_180 * (long long)iVar15 + 0x800;\n local_180 = (uint)lVar4 >> 0xc | (int)((unsigned long long)lVar4 >> 0x20) * 0x100000;\n lVar4 = (long long)(int)local_178 * (long long)iVar15 + 0x800;\n local_178 = (uint)lVar4 >> 0xc | (int)((unsigned long long)lVar4 >> 0x20) * 0x100000;\n *(short *)(param_1 + 0x188) =\n *(short *)(param_1 + 0x188) - (*(short *)(param_1 + 0x17c) - sVar2);\n }\n local_178 = Vec3_HorzLen(((int)&local_180));\n if ((int)local_178 < 0x1000) {\n local_178 = 0x1000;\n }\n local_180 = 0;\n Vec3_RotateYAndTranslate\n (param_1 + 0x8c,param_1 + 0x80,(int)*(short *)(param_1 + 0x17c),((int)&local_180));\n }\n iVar15 = func_02008cb4(param_1);\n if ((iVar15 != 0) && ((*(uint *)(param_1 + 0x154) & 0x60) != 0)) {\n uVar22 = 1;\n *(uint *)(param_1 + 0x154) = *(uint *)(param_1 + 0x154) & 0xffffff9f;\n }\n local_16c = *(u32 *)(param_1 + 0x94);\n local_174 = *(u32 *)(param_1 + 0x8c);\n local_170 = *(int *)(param_1 + 0x90) + 0x100000;\n _ZN11RaycastLine13SetObjAndLineERK7Vector3S2_P5Actor\n (((int)auStack_f0),param_1 + 0x8c,((int)&local_174),0);\n iVar15 = _ZN11RaycastLine10DetectClsnEv(((int)auStack_f0));\n if (iVar15 != 0) {\n _ZN11RaycastLine10GetClsnPosEv(((int)auStack_108),((int)auStack_f0));\n local_170 = local_104;\n if (local_104 + -0x80000 < iVar21) {\n iVar21 = local_104 + -0x80000;\n }\n }\n Vec3_Add(((int)&local_144),param_1 + 0x8c,param_1 + 0x80);\n Vec3_AsrInPlace(((int)&local_144),1);\n local_138 = local_144;\n local_134 = local_140 + 0x100000;\n local_130 = local_13c;\n _ZN11RaycastLine13SetObjAndLineERK7Vector3S2_P5Actor(((int)auStack_f0),((int)&local_144),((int)&local_138),0);\n iVar15 = _ZN11RaycastLine10DetectClsnEv(((int)auStack_f0));\n if (iVar15 != 0) {\n _ZN11RaycastLine10GetClsnPosEv(((int)auStack_fc),((int)auStack_f0));\n local_134 = local_f8 + -0x80000;\n if (local_134 < iVar21) {\n iVar21 = local_134;\n }\n }\n iVar15 = *(int *)(param_1 + 0x9c);\n _ZN13RaycastGroundC1Ev(((int)auStack_78));\n local_2c = 0x5dc000;\n func_0200897c(param_1,((int)auStack_78));\n iVar7 = 0;\n _ZN13RaycastGround12SetObjAndPosERK7Vector3P5Actor(((int)auStack_78),((int)&local_174),0);\n if (((int)&data_02086fcc) < local_1a4) {\n _ZN4BgCh19StartDetectingWaterEv(((int)auStack_78));\n }\n iVar8 = _ZN13RaycastGround10DetectClsnEv(((int)auStack_78));\n if (iVar8 != 0) {\n iVar15 = local_34;\n }\n if (local_1a4 == ((int)&data_02086ff4)) {\n if (iVar15 < data_0209f32c) {\n iVar15 = data_0209f32c;\n }\n iVar8 = iVar15 + 0x64000;\n }\n else {\n iVar8 = iVar15;\n if (iVar15 < iVar16) {\n iVar8 = iVar16;\n }\n bVar25 = (*(uint *)(param_1 + 0x154) & 2) != 0;\n if (bVar25) {\n iVar7 = 0x1e8000;\n }\n if (!bVar25) {\n iVar7 = 0x138000;\n }\n iVar16 = func_020093d4(param_1,(iVar16 - iVar9) + iVar7);\n iVar8 = iVar8 + iVar16;\n if (((*(ushort *)(local_1a4 + 0x26) & 0x80) != 0) &&\n (iVar8 < *(int *)(param_1 + 0x90))) {\n iVar8 = *(int *)(param_1 + 0x90);\n }\n local_194 = ((u32 *)local_1a4)[2];\n local_190 = ((u32 *)local_1a4)[3];\n func_0200c9e0(param_1,((int)&local_194),((int)&local_190));\n local_17c = iVar8 - *(int *)(param_1 + 0x84);\n iVar16 = local_194;\n if ((local_1a4 == ((int)&data_0208706c)) && (local_188 < 0)) {\n iVar16 = 0xa49;\n }\n lVar4 = (long long)local_198 * (long long)iVar16 + 0x800;\n lVar5 = (long long)local_198 * (long long)local_190 + 0x800;\n uVar17 = (uint)lVar4 >> 0xc | (int)((unsigned long long)lVar4 >> 0x20) * 0x100000;\n uVar20 = local_17c;\n if ((int)local_17c < (int)uVar17) {\n uVar20 = *(uint *)(param_1 + 0x84);\n }\n uVar24 = (uint)lVar5 >> 0xc | (int)((unsigned long long)lVar5 >> 0x20) * 0x100000;\n if ((int)local_17c < (int)uVar17) {\n iVar8 = uVar20 + uVar17;\n }\n else if ((int)uVar24 < (int)uVar20) {\n iVar8 = *(int *)(param_1 + 0x84) + uVar24;\n }\n if ((data_0209f2f8 == '&') && (*(int *)(param_1 + 0x90) < iVar15 + 0x25bc8)) {\n *(int *)(param_1 + 0x90) = iVar15 + 0x25bc8;\n }\n if (iVar21 < iVar15 + 0x25bc8) {\n iVar21 = local_170;\n }\n if (iVar15 + 0x25bc8 != -0x80000000) {\n local_1b0 = iVar15 + 0x25bc8;\n }\n }\n iVar15 = iVar8;\n if ((((local_1a4 != ((int)&data_02087094)) && (local_1a4 != ((int)&data_020870e4))) &&\n (local_1a4 != ((int)&data_0208710c))) &&\n ((iVar15 = local_1b0, local_1b0 <= iVar8 && (iVar15 = iVar8, iVar21 < iVar8)))) {\n iVar15 = iVar21;\n }\n Math_Function_0203b14c(param_1 + 0x90,iVar15,0x300,0x14000,0x100);\n uVar6 = Vec3_HorzAngle(param_1 + 0x80,param_1 + 0x8c);\n *(u16 *)(param_1 + 0x17c) = uVar6;\n _ZN13RaycastGroundD1Ev(((int)auStack_78));\n _ZN11RaycastLineD1Ev(((int)auStack_f0));\n }\n }\n }\n else {\n uVar6 = Vec3_HorzAngle(param_1 + 0x80,param_1 + 0x8c);\n *(u16 *)(param_1 + 0x17c) = uVar6;\n }\n if (uVar22 == 0) {\n data_0209b000 = 0;\n if ((*(uint *)(param_1 + 0x154) & 0x60) != 0) {\n uVar19 = func_020124c4(*(u32 *)(param_1 + 0x158),2,0x43);\n *(u32 *)(param_1 + 0x158) = uVar19;\n }\n }\n else {\n if (data_0209b000 == 0) {\n func_02012790(0xe);\n }\n data_0209b000 = uVar22;\n }\n }\n uVar6 = Vec3_VertAngle(param_1 + 0x80,param_1 + 0x8c);\n *(u16 *)(param_1 + 0x17e) = uVar6;\n return 1;\n}\n", "source": "ghidra-full-20260723"} diff --git a/src/func_ov002_020aefb8.c b/src/func_ov002_020aefb8.c index 3cc8a9487..a66b1c4d0 100644 --- a/src/func_ov002_020aefb8.c +++ b/src/func_ov002_020aefb8.c @@ -1,7 +1,4 @@ //cpp -// NONMATCHING: base materialization / addressing (div=24). Logic verified correct vs ROM; not -// byte-matchable from C at mwccarm 1.2/sp2p3 (see notes/matching-style.md). -// Counts as decompiled, not matched. struct CylinderClsn; struct WithMeshClsn { int IsOnGround() const; @@ -20,10 +17,14 @@ extern "C" int Vec3_HorzLen(void*); extern "C" void func_ov002_020aefb8(char* self); void func_ov002_020aefb8(char* self) { + int *px; + int *pz; ((Actor*)self)->UpdatePosWithHorzSpeedAndAng(); if (((WithMeshClsn*)(self + 0x144))->IsOnGround()) { - *(int*)(self + 0xa4) += *(int*)(self + 0xd4) * 0xa; - *(int*)(self + 0xac) += *(int*)(self + 0xdc) * 0xa; + px = (int*)(int)(((long long)(int)(self + 0xa4)) & 0xFFFFFFFFFFFFFFFFLL); + *px += *(int*)(self + 0xd4) * 0xa; + pz = (int*)(int)(((long long)(int)(self + 0xac)) & 0xFFFFFFFFFFFFFFFFLL); + *pz += *(int*)(self + 0xdc) * 0xa; if (((WithMeshClsn*)(self + 0x144))->JustHitGround()) { *(int*)(self + 0xa8) = -(*(int*)(self + 0xa8) << 2) / 10; } else {