{"type": "func", "start": 6442466608, "end": 6442467071, "name": "sub_180003D30", "pseudocode": "// \n// sub_180003D30 from 0x180003d30 to 0x180003eff (463 bytes)\n// \n// 8 xrefs:\n// > sub_180017A50 @ 0x180017b87\n// > sub_180017CB0 @ 0x180017ced\n// > sub_180017CB0 @ 0x180017d0e\n// > sub_180017E70 @ 0x180018026\n// > sub_180017E70 @ 0x180018081\n// > <???> @ 0x18017d5e8\n// > <???> @ 0x18017d5f8\n// > <???> @ 0x1801f621c\n// \n// This function is hookable on this platform!\n// \n// Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA\n// Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings\n// \n\n__int64 __fastcall sub_180003D30(__int64 a1, float *a2, int a3)\n{\n  __int64 v3; // r13\n  int v5; // edx\n  int v7; // edi\n  int v8; // edi\n  int v9; // edx\n  char *v10; // rcx\n  char *v11; // rsi\n  float *v12; // r15\n  __int64 v14; // [rsp+20h] [rbp-60h]\n  __int64 v15; // [rsp+28h] [rbp-58h]\n  __int64 v16; // [rsp+30h] [rbp-50h]\n  int v17; // [rsp+60h] [rbp-20h] BYREF\n  int v18; // [rsp+64h] [rbp-1Ch] BYREF\n  int v19; // [rsp+68h] [rbp-18h] BYREF\n  int v20; // [rsp+6Ch] [rbp-14h] BYREF\n  int v21; // [rsp+70h] [rbp-10h] BYREF\n  int v22[3]; // [rsp+74h] [rbp-Ch] BYREF\n  int v23; // [rsp+B0h] [rbp+30h] BYREF\n  int v24; // [rsp+C8h] [rbp+48h] BYREF\n\n  v3 = *(_QWORD *)a1;\n  v5 = *(_DWORD *)(a1 + 24);\n  if ( v5 <= -1 )\n    return 0;\n  v7 = *(_DWORD *)(a1 + 28);\n  if ( v5 >= v7 )\n    return 0;\n  v8 = v7 - v5;\n  if ( a2 )\n  {\n    if ( v8 > a3 )\n      v8 = a3;\n    sub_1800041D0(\n      a1,\n      v5,\n      v5 + v8,\n      (unsigned int)&v18,\n      (__int64)&v17,\n      (__int64)&v24,\n      (__int64)&v23,\n      (__int64)&v20,\n      (__int64)&v19,\n      (__int64)&v21,\n      (__int64)v22);\n    v9 = *(_DWORD *)(a1 + 40);\n    v10 = (char *)&unk_1801A3200;\n    if ( v9 && *(_DWORD *)(a1 + 36) )\n    {\n      v11 = (char *)&unk_1801A3200 + 4 * v21;\n    }\n    else\n    {\n      v11 = (char *)&unk_1801A3000 + 4 * v21;\n      if ( !v9 || !*(_DWORD *)(a1 + 36) )\n        v10 = (char *)&unk_1801A3000;\n    }\n    v12 = (float *)&v10[4 * v22[0]];\n    if ( (unsigned int)sub_1800C0A10(2) )\n    {\n      sub_180005520(a1, (_DWORD)a2, (_DWORD)v11, (_DWORD)v12, v20, v19, *(_DWORD *)(v3 + 4), v18, v17, v24, v23);\n    }\n    else if ( (unsigned int)sub_1800C0A10(0) )\n    {\n      LODWORD(v16) = *(_DWORD *)(v3 + 4);\n      LODWORD(v15) = v19;\n      LODWORD(v14) = v20;\n      sub_180004520(a1, (_DWORD)a2, (_DWORD)v11, (_DWORD)v12, v14, v15, v16, v18, v17, v24, v23);\n    }\n    else\n    {\n      sub_180003740(a1, a2, (__int64)v11, v12, v20, v19, *(_DWORD *)(v3 + 4), v18, v17, v24, v23);\n    }\n  }\n  return (unsigned int)v8;\n}", "assembly": "; \n; sub_180003D30 from 0x180003d30 to 0x180003eff (463 bytes)\n; \n; 8 xrefs:\n; > sub_180017A50 @ 0x180017b87\n; > sub_180017CB0 @ 0x180017ced\n; > sub_180017CB0 @ 0x180017d0e\n; > sub_180017E70 @ 0x180018026\n; > sub_180017E70 @ 0x180018081\n; > <???> @ 0x18017d5e8\n; > <???> @ 0x18017d5f8\n; > <???> @ 0x1801f621c\n; \n; This function is hookable on this platform!\n; \n; Using BromaIDA 8.0.0 @ https:;github.com/Stazzical/BromaIDA\n; Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https:;github.com/geode-sdk/bindings\n; \n\nmov     r11, rsp                                                       ; +0x0, 0x180003d30\npush    rbp                                                            ; +0x3, 0x180003d33\npush    rbx                                                            ; +0x4, 0x180003d34\npush    rdi                                                            ; +0x5, 0x180003d35\npush    r13                                                            ; +0x6, 0x180003d36\npush    r14                                                            ; +0x8, 0x180003d38\nmov     rbp, rsp                                                       ; +0xa, 0x180003d3a\nsub     rsp, 80h                                                       ; +0xd, 0x180003d3d\nmov     r13, [rcx]                                                     ; +0x14, 0x180003d44\nmov     r14, rdx                                                       ; +0x17, 0x180003d47\nmov     edx, [rcx+18h]                                                 ; +0x1a, 0x180003d4a\nmov     rbx, rcx                                                       ; +0x1d, 0x180003d4d\ncmp     edx, 0FFFFFFFFh                                                ; +0x20, 0x180003d50\njle     loc_180003EEE                                                  ; +0x23, 0x180003d53\nmov     edi, [rcx+1Ch]                                                 ; +0x29, 0x180003d59\ncmp     edx, edi                                                       ; +0x2c, 0x180003d5c\njge     loc_180003EEE                                                  ; +0x2e, 0x180003d5e\nsub     edi, edx                                                       ; +0x34, 0x180003d64\ntest    r14, r14                                                       ; +0x36, 0x180003d66\njz      loc_180003EDD                                                  ; +0x39, 0x180003d69\ncmp     edi, r8d                                                       ; +0x3f, 0x180003d6f\nmov     [r11+10h], rsi                                                 ; +0x42, 0x180003d72\nlea     rax, [rbp+var_C]                                               ; +0x46, 0x180003d76\nmov     [r11+18h], r15                                                 ; +0x4a, 0x180003d7a\nmov     [r11-58h], rax                                                 ; +0x4e, 0x180003d7e\nlea     r9, [rbp+var_1C]                                               ; +0x52, 0x180003d82\nlea     rax, [rbp+var_10]                                              ; +0x56, 0x180003d86\ncmovg   edi, r8d                                                       ; +0x5a, 0x180003d8a\nmov     [r11-60h], rax                                                 ; +0x5e, 0x180003d8e\nlea     rax, [rbp+var_18]                                              ; +0x62, 0x180003d92\nmov     [r11-68h], rax                                                 ; +0x66, 0x180003d96\nlea     rax, [rbp+var_14]                                              ; +0x6a, 0x180003d9a\nmov     [r11-70h], rax                                                 ; +0x6e, 0x180003d9e\nlea     rax, [rbp+arg_0]                                               ; +0x72, 0x180003da2\nmov     [r11-78h], rax                                                 ; +0x76, 0x180003da6\nlea     r8d, [rdx+rdi]                                                 ; +0x7a, 0x180003daa\nlea     rax, [rbp+arg_18]                                              ; +0x7e, 0x180003dae\nmov     [r11-80h], rax                                                 ; +0x82, 0x180003db2\nlea     rax, [rbp+var_20]                                              ; +0x86, 0x180003db6\nmov     [rsp+80h+var_60], rax                                          ; +0x8a, 0x180003dba\ncall    sub_1800041D0                                                  ; +0x8f, 0x180003dbf\nmov     edx, [rbx+28h]                                                 ; +0x94, 0x180003dc4\nlea     rcx, unk_1801A3200                                             ; +0x97, 0x180003dc7\ntest    edx, edx                                                       ; +0x9e, 0x180003dce\njz      short loc_180003DE2                                            ; +0xa0, 0x180003dd0\ncmp     dword ptr [rbx+24h], 0                                         ; +0xa2, 0x180003dd2\njz      short loc_180003DE2                                            ; +0xa6, 0x180003dd6\nmovsxd  rax, [rbp+var_10]                                              ; +0xa8, 0x180003dd8\nlea     rsi, [rcx+rax*4]                                               ; +0xac, 0x180003ddc\njmp     short loc_180003DFE                                            ; +0xb0, 0x180003de0\nmovsxd  rax, [rbp+var_10]                                              ; +0xb2, 0x180003de2\nlea     r8, unk_1801A3000                                              ; +0xb6, 0x180003de6\nlea     rsi, [r8+rax*4]                                                ; +0xbd, 0x180003ded\ntest    edx, edx                                                       ; +0xc1, 0x180003df1\njz      short loc_180003DFB                                            ; +0xc3, 0x180003df3\ncmp     dword ptr [rbx+24h], 0                                         ; +0xc5, 0x180003df5\njnz     short loc_180003DFE                                            ; +0xc9, 0x180003df9\nmov     rcx, r8                                                        ; +0xcb, 0x180003dfb\nmovsxd  rax, [rbp+var_C]                                               ; +0xce, 0x180003dfe\nlea     r15, [rcx+rax*4]                                               ; +0xd2, 0x180003e02\nmov     ecx, 2                                                         ; +0xd6, 0x180003e06\ncall    sub_1800C0A10                                                  ; +0xdb, 0x180003e0b\ntest    eax, eax                                                       ; +0xe0, 0x180003e10\njz      short loc_180003E59                                            ; +0xe2, 0x180003e12\nmov     eax, [rbp+arg_0]                                               ; +0xe4, 0x180003e14\nmov     r9, r15                                                        ; +0xe7, 0x180003e17\nmov     [rsp+80h+var_30], eax                                          ; +0xea, 0x180003e1a\nmov     r8, rsi                                                        ; +0xee, 0x180003e1e\nmov     eax, [rbp+arg_18]                                              ; +0xf1, 0x180003e21\nmov     rdx, r14                                                       ; +0xf4, 0x180003e24\nmov     [rsp+80h+var_38], eax                                          ; +0xf7, 0x180003e27\nmov     rcx, rbx                                                       ; +0xfb, 0x180003e2b\nmov     eax, [rbp+var_20]                                              ; +0xfe, 0x180003e2e\nmov     [rsp+80h+var_40], eax                                          ; +0x101, 0x180003e31\nmov     eax, [rbp+var_1C]                                              ; +0x105, 0x180003e35\nmov     [rsp+80h+var_48], eax                                          ; +0x108, 0x180003e38\nmov     eax, [r13+4]                                                   ; +0x10c, 0x180003e3c\nmov     dword ptr [rsp+80h+var_50], eax                                ; +0x110, 0x180003e40\nmov     eax, [rbp+var_18]                                              ; +0x114, 0x180003e44\nmov     dword ptr [rsp+80h+var_58], eax                                ; +0x117, 0x180003e47\nmov     eax, [rbp+var_14]                                              ; +0x11b, 0x180003e4b\nmov     dword ptr [rsp+80h+var_60], eax                                ; +0x11e, 0x180003e4e\ncall    sub_180005520                                                  ; +0x122, 0x180003e52\njmp     short loc_180003ECD                                            ; +0x127, 0x180003e57\nxor     ecx, ecx                                                       ; +0x129, 0x180003e59\ncall    sub_1800C0A10                                                  ; +0x12b, 0x180003e5b\nmov     edx, [r13+4]                                                   ; +0x130, 0x180003e60\ntest    eax, eax                                                       ; +0x134, 0x180003e64\nmov     eax, [rbp+arg_0]                                               ; +0x136, 0x180003e66\nmov     r9, r15                                                        ; +0x139, 0x180003e69\nmov     [rsp+80h+var_30], eax                                          ; +0x13c, 0x180003e6c\nmov     r8, rsi                                                        ; +0x140, 0x180003e70\nmov     eax, [rbp+arg_18]                                              ; +0x143, 0x180003e73\nmov     [rsp+80h+var_38], eax                                          ; +0x146, 0x180003e76\nmov     eax, [rbp+var_20]                                              ; +0x14a, 0x180003e7a\nmov     [rsp+80h+var_40], eax                                          ; +0x14d, 0x180003e7d\njz      short loc_180003EA9                                            ; +0x151, 0x180003e81\nmov     eax, [rbp+var_1C]                                              ; +0x153, 0x180003e83\nmov     rcx, rbx                                                       ; +0x156, 0x180003e86\nmov     [rsp+80h+var_48], eax                                          ; +0x159, 0x180003e89\nmov     eax, [rbp+var_18]                                              ; +0x15d, 0x180003e8d\nmov     dword ptr [rsp+80h+var_50], edx                                ; +0x160, 0x180003e90\nmov     rdx, r14                                                       ; +0x164, 0x180003e94\nmov     dword ptr [rsp+80h+var_58], eax                                ; +0x167, 0x180003e97\nmov     eax, [rbp+var_14]                                              ; +0x16b, 0x180003e9b\nmov     dword ptr [rsp+80h+var_60], eax                                ; +0x16e, 0x180003e9e\ncall    sub_180004520                                                  ; +0x172, 0x180003ea2\njmp     short loc_180003ECD                                            ; +0x177, 0x180003ea7\nmov     ecx, [rbp+var_1C]                                              ; +0x179, 0x180003ea9\nmov     [rsp+80h+var_48], ecx                                          ; +0x17c, 0x180003eac\nmov     ecx, [rbp+var_18]                                              ; +0x180, 0x180003eb0\nmov     dword ptr [rsp+80h+var_50], edx                                ; +0x183, 0x180003eb3\nmov     rdx, r14                                                       ; +0x187, 0x180003eb7\nmov     dword ptr [rsp+80h+var_58], ecx                                ; +0x18a, 0x180003eba\nmov     ecx, [rbp+var_14]                                              ; +0x18e, 0x180003ebe\nmov     dword ptr [rsp+80h+var_60], ecx                                ; +0x191, 0x180003ec1\nmov     rcx, rbx                                                       ; +0x195, 0x180003ec5\ncall    sub_180003740                                                  ; +0x198, 0x180003ec8\nmov     rsi, [rsp+80h+arg_8]                                           ; +0x19d, 0x180003ecd\nmov     r15, [rsp+80h+arg_10]                                          ; +0x1a5, 0x180003ed5\nmov     eax, edi                                                       ; +0x1ad, 0x180003edd\nadd     rsp, 80h                                                       ; +0x1af, 0x180003edf\npop     r14                                                            ; +0x1b6, 0x180003ee6\npop     r13                                                            ; +0x1b8, 0x180003ee8\npop     rdi                                                            ; +0x1ba, 0x180003eea\npop     rbx                                                            ; +0x1bb, 0x180003eeb\npop     rbp                                                            ; +0x1bc, 0x180003eec\nretn                                                                   ; +0x1bd, 0x180003eed\nxor     eax, eax                                                       ; +0x1be, 0x180003eee\nadd     rsp, 80h                                                       ; +0x1c0, 0x180003ef0\npop     r14                                                            ; +0x1c7, 0x180003ef7\npop     r13                                                            ; +0x1c9, 0x180003ef9\npop     rdi                                                            ; +0x1cb, 0x180003efb\npop     rbx                                                            ; +0x1cc, 0x180003efc\npop     rbp                                                            ; +0x1cd, 0x180003efd\nretn                                                                   ; +0x1ce, 0x180003efe", "xrefs": ["sub_180017A50 @ 0x180017b87", "sub_180017CB0 @ 0x180017ced", "sub_180017CB0 @ 0x180017d0e", "sub_180017E70 @ 0x180018026", "sub_180017E70 @ 0x180018081", "<???> @ 0x18017d5e8", "<???> @ 0x18017d5f8", "<???> @ 0x1801f621c"], "is_objc": false, "is_arm32": false, "is_arm64": false, "bida_info": "8.0.0 @ https://github.com/Stazzical/BromaIDA", "bindings_info": "commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings"}