{"type": "func", "start": 368620, "end": 369220, "name": "sub_59FEC", "pseudocode": "// \n// sub_59FEC from 0x59fec to 0x5a244 (600 bytes)\n// \n// 6 xrefs:\n// > sub_59AE8 @ 0x59be4\n// > sub_60458 @ 0x6054c\n// > sub_6E15C @ 0x6e274\n// > sub_7C19C @ 0x7c4a0\n// > sub_7C19C @ 0x7c560\n// > sub_92AE0 @ 0x93170\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_59FEC(__int64 a1, __int64 a2, __int64 a3, char a4, char a5, char a6)\n{\n  __int64 v6; // x8\n  __int64 result; // x0\n  float v13; // s0\n  __int64 v14; // x8\n  __int64 v15; // x1\n  __int64 v16; // x9\n  __int64 *v17; // x8\n  __int64 *v18; // x10\n  __int64 *v19; // x9\n  __int64 v20; // x10\n  __int64 v21; // x8\n  __int64 v22; // x9\n  __int64 *v23; // x8\n  __int64 v24; // x8\n  _BYTE v25[4]; // [xsp+14h] [xbp-3Ch] BYREF\n  __int64 v26; // [xsp+18h] [xbp-38h] BYREF\n\n  if ( !a2 )\n    return 31;\n  v6 = *(_QWORD *)(a1 + 472);\n  if ( !v6 )\n    return 30;\n  if ( *(_DWORD *)(a2 + 176) )\n    return 60;\n  if ( !a3 && (*(_BYTE *)(v6 + 62) & 1) == 0 )\n    ((void (*)(void))sub_5C678)();\n  result = sub_5C50C(a1, 0, &v26);\n  if ( !(_DWORD)result )\n  {\n    if ( v26 )\n      *(_QWORD *)(v26 + 512) = a1;\n    result = sub_5C618(a1);\n    if ( !(_DWORD)result )\n    {\n      result = sub_5AD18(a1, a2, a5 & 1);\n      if ( !(_DWORD)result )\n      {\n        result = sub_5C54C();\n        if ( !(_DWORD)result )\n        {\n          if ( (a5 & 1) == 0 )\n            goto LABEL_26;\n          v13 = 1.0;\n          if ( (a6 & 1) != 0 )\n            v13 = 0.0;\n          *(float *)(a1 + 536) = v13;\n          *(float *)(a1 + 540) = v13;\n          result = sub_595BC();\n          if ( !(_DWORD)result )\n          {\n            if ( ((**(__int64 (__fastcall ***)(__int64))a2)(a2) & 1) != 0 && (v14 = *(_QWORD *)(a2 + 184)) != 0 )\n              v15 = *(unsigned int *)(v14 + 404);\n            else\n              v15 = 0;\n            result = sub_5A918(a1, v15, 2);\n            if ( !(_DWORD)result )\n            {\nLABEL_26:\n              result = sub_5AF2C(a1);\n              if ( !(_DWORD)result )\n              {\n                v16 = *(_QWORD *)(a2 + 280);\n                ++*(_DWORD *)(a2 + 312);\n                if ( v16 && (*(_BYTE *)(*(_QWORD *)(a1 + 472) + 62LL) & 1) == 0 )\n                {\n                  FMOD_OS_CriticalSection_Enter(*(_UNKNOWN ***)((char *)off_130 + (_QWORD)off_114000));\n                  v17 = *(__int64 **)(a2 + 280);\n                  v18 = (__int64 *)v17[1];\n                  *v18 = *v17;\n                  *(_QWORD *)(*v17 + 8) = v18;\n                  *v17 = (__int64)v17;\n                  v19 = (__int64 *)(*(_QWORD *)(a1 + 8) + 69928LL);\n                  v20 = *v19;\n                  *v17 = *v19;\n                  v17[1] = (__int64)v19;\n                  *(_QWORD *)(v20 + 8) = v17;\n                  *(_QWORD *)v17[1] = v17;\n                  result = FMOD_OS_CriticalSection_Leave(*(_UNKNOWN ***)((char *)off_130 + (_QWORD)off_114000));\n                }\n                if ( (a5 & 1) == 0\n                  || ((result = (*(__int64 (__fastcall **)(__int64, _BYTE *))(*(_QWORD *)a2 + 288LL))(a2, v25),\n                       (v25[0] & 0x10) == 0)\n                   || (result = sub_5C694(result), !(_DWORD)result))\n                  && ((result = sub_5C678(result), (*(_BYTE *)(*(_QWORD *)(v21 + v22) + 72LL) & 2) == 0)\n                   || (*(_BYTE *)(*(_QWORD *)(a1 + 472) + 62LL) & 1) != 0\n                   || (result = sub_5C5DC(result), !(_DWORD)result)) )\n                {\n                  v23 = *(__int64 **)(a2 + 240);\n                  if ( v23 && *(_DWORD *)(a2 + 228) )\n                  {\n                    v24 = *v23;\n                    *(_DWORD *)(a1 + 504) = 0;\n                    *(_QWORD *)(a1 + 496) = v24;\n                  }\n                  if ( (a4 & 1) != 0 )\n                    return 0;\n                  result = sub_5C624(result);\n                  if ( !(_DWORD)result )\n                    return 0;\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n  return result;\n}", "assembly": "; \n; sub_59FEC from 0x59fec to 0x5a244 (600 bytes)\n; \n; 6 xrefs:\n; > sub_59AE8 @ 0x59be4\n; > sub_60458 @ 0x6054c\n; > sub_6E15C @ 0x6e274\n; > sub_7C19C @ 0x7c4a0\n; > sub_7C19C @ 0x7c560\n; > sub_92AE0 @ 0x93170\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\nSUB             SP, SP, #0x60                                          ; +0x0, 0x59fec\nSTP             X24, X23, [SP,#0x50+var_30]                            ; +0x4, 0x59ff0\nSTP             X22, X21, [SP,#0x50+var_20]                            ; +0x8, 0x59ff4\nSTP             X20, X19, [SP,#0x50+var_10]                            ; +0xc, 0x59ff8\nSTP             X29, X30, [SP,#0x50+var_s0]                            ; +0x10, 0x59ffc\nADD             X29, SP, #0x50                                         ; +0x14, 0x5a000\nCBZ             X1, loc_5A028                                          ; +0x18, 0x5a004\nLDR             X8, [X0,#0x1D8]                                        ; +0x1c, 0x5a008\nMOV             X19, X0                                                ; +0x20, 0x5a00c\nCBZ             X8, loc_5A030                                          ; +0x24, 0x5a010\nLDR             W9, [X1,#0xB0]                                         ; +0x28, 0x5a014\nMOV             X21, X1                                                ; +0x2c, 0x5a018\nCBZ             W9, loc_5A038                                          ; +0x30, 0x5a01c\nMOV             W0, #0x3C ; '<'                                        ; +0x34, 0x5a020\nB               loc_5A0B4                                              ; +0x38, 0x5a024\nMOV             W0, #0x1F                                              ; +0x3c, 0x5a028\nB               loc_5A0B4                                              ; +0x40, 0x5a02c\nMOV             W0, #0x1E                                              ; +0x44, 0x5a030\nB               loc_5A0B4                                              ; +0x48, 0x5a034\nMOV             W23, W5                                                ; +0x4c, 0x5a038\nMOV             W22, W4                                                ; +0x50, 0x5a03c\nMOV             W20, W3                                                ; +0x54, 0x5a040\nMOV             X24, X2                                                ; +0x58, 0x5a044\nCBNZ            X2, loc_5A064                                          ; +0x5c, 0x5a048\nLDRB            W8, [X8,#0x3E]                                         ; +0x60, 0x5a04c\nTBNZ            W8, #0, loc_5A060                                      ; +0x64, 0x5a050\nBL              sub_5C678                                              ; +0x68, 0x5a054\nLDR             X24, [X8,X9]                                           ; +0x6c, 0x5a058\nB               loc_5A064                                              ; +0x70, 0x5a05c\nMOV             X24, XZR                                               ; +0x74, 0x5a060\nLDR             X8, [X19]                                              ; +0x78, 0x5a064\nADD             X2, SP, #0x50+var_38                                   ; +0x7c, 0x5a068\nMOV             X0, X19                                                ; +0x80, 0x5a06c\nMOV             W1, WZR                                                ; +0x84, 0x5a070\nBL              sub_5C50C                                              ; +0x88, 0x5a074\nCBNZ            W0, loc_5A0B4                                          ; +0x8c, 0x5a078\nLDR             X8, [SP,#0x50+var_38]                                  ; +0x90, 0x5a07c\nCBZ             X8, loc_5A088                                          ; +0x94, 0x5a080\nSTR             X19, [X8,#0x200]                                       ; +0x98, 0x5a084\nMOV             X0, X19                                                ; +0x9c, 0x5a088\nMOV             X1, X24                                                ; +0xa0, 0x5a08c\nBL              sub_5C618                                              ; +0xa4, 0x5a090\nCBNZ            W0, loc_5A0B4                                          ; +0xa8, 0x5a094\nAND             W2, W22, #1                                            ; +0xac, 0x5a098\nMOV             X0, X19                                                ; +0xb0, 0x5a09c\nMOV             X1, X21                                                ; +0xb4, 0x5a0a0\nBL              sub_5AD18                                              ; +0xb8, 0x5a0a4\nCBNZ            W0, loc_5A0B4                                          ; +0xbc, 0x5a0a8\nBL              sub_5C54C                                              ; +0xc0, 0x5a0ac\nCBZ             W0, loc_5A0C8                                          ; +0xc4, 0x5a0b0\nLDP             X29, X30, [SP,#0x50+var_s0]                            ; +0xc8, 0x5a0b4\nLDP             X20, X19, [SP,#0x50+var_10]                            ; +0xcc, 0x5a0b8\nLDP             X22, X21, [SP,#0x50+var_20]                            ; +0xd0, 0x5a0bc\nLDP             X24, X23, [SP,#0x50+var_30]                            ; +0xd4, 0x5a0c0\nB               loc_5C6B4                                              ; +0xd8, 0x5a0c4\nTBZ             W22, #0, loc_5A128                                     ; +0xdc, 0x5a0c8\nTST             W23, #1                                                ; +0xe0, 0x5a0cc\nFMOV            S0, #1.0                                               ; +0xe4, 0x5a0d0\nFMOV            S1, WZR                                                ; +0xe8, 0x5a0d4\nFCSEL           S0, S1, S0, NE                                         ; +0xec, 0x5a0d8\nMOV             X0, X19                                                ; +0xf0, 0x5a0dc\nSTR             S0, [X19,#0x218]                                       ; +0xf4, 0x5a0e0\nSTR             S0, [X19,#0x21C]                                       ; +0xf8, 0x5a0e4\nBL              sub_595BC                                              ; +0xfc, 0x5a0e8\nCBNZ            W0, loc_5A0B4                                          ; +0x100, 0x5a0ec\nLDR             X8, [X21]                                              ; +0x104, 0x5a0f0\nMOV             X0, X21                                                ; +0x108, 0x5a0f4\nLDR             X8, [X8]                                               ; +0x10c, 0x5a0f8\nBLR             X8                                                     ; +0x110, 0x5a0fc\nTBZ             W0, #0, loc_5A114                                      ; +0x114, 0x5a100\nLDR             X8, [X21,#0xB8]                                        ; +0x118, 0x5a104\nCBZ             X8, loc_5A114                                          ; +0x11c, 0x5a108\nLDR             W1, [X8,#0x194]                                        ; +0x120, 0x5a10c\nB               loc_5A118                                              ; +0x124, 0x5a110\nMOV             W1, WZR                                                ; +0x128, 0x5a114\nMOV             W2, #2                                                 ; +0x12c, 0x5a118\nMOV             X0, X19                                                ; +0x130, 0x5a11c\nBL              sub_5A918                                              ; +0x134, 0x5a120\nCBNZ            W0, loc_5A0B4                                          ; +0x138, 0x5a124\nMOV             X0, X19                                                ; +0x13c, 0x5a128\nBL              sub_5AF2C                                              ; +0x140, 0x5a12c\nCBNZ            W0, loc_5A0B4                                          ; +0x144, 0x5a130\nLDR             W8, [X21,#0x138]                                       ; +0x148, 0x5a134\nLDR             X9, [X21,#0x118]                                       ; +0x14c, 0x5a138\nADD             W8, W8, #1                                             ; +0x150, 0x5a13c\nSTR             W8, [X21,#0x138]                                       ; +0x154, 0x5a140\nCBZ             X9, loc_5A1B0                                          ; +0x158, 0x5a144\nLDR             X8, [X19,#0x1D8]                                       ; +0x15c, 0x5a148\nLDRB            W8, [X8,#0x3E]                                         ; +0x160, 0x5a14c\nTBNZ            W8, #0, loc_5A1B0                                      ; +0x164, 0x5a150\nADRP            X23, #off_10F7A0@PAGE                                  ; +0x168, 0x5a154\nLDR             X23, [X23,#off_10F7A0@PAGEOFF]; off_114000             ; +0x16c, 0x5a158\nLDR             X8, [X23]; unk_11F800                                  ; +0x170, 0x5a15c\nLDR             X0, [X8,#(qword_11F930 - 0x11F800)]                    ; +0x174, 0x5a160\nBL              .FMOD_OS_CriticalSection_Enter                         ; +0x178, 0x5a164\nLDR             X8, [X21,#0x118]                                       ; +0x17c, 0x5a168\nLDP             X9, X10, [X8]                                          ; +0x180, 0x5a16c\nSTR             X9, [X10]                                              ; +0x184, 0x5a170\nLDR             X9, [X8]                                               ; +0x188, 0x5a174\nSTR             X10, [X9,#8]                                           ; +0x18c, 0x5a178\nSTR             X8, [X8]                                               ; +0x190, 0x5a17c\nLDR             X9, [X19,#8]                                           ; +0x194, 0x5a180\nMOV             W10, #0x11128                                          ; +0x198, 0x5a184\nADD             X9, X9, X10                                            ; +0x1a0, 0x5a18c\nLDR             X10, [X9]                                              ; +0x1a4, 0x5a190\nSTP             X10, X9, [X8]                                          ; +0x1a8, 0x5a194\nSTR             X8, [X10,#8]                                           ; +0x1ac, 0x5a198\nLDR             X9, [X8,#8]                                            ; +0x1b0, 0x5a19c\nSTR             X8, [X9]                                               ; +0x1b4, 0x5a1a0\nLDR             X8, [X23]; unk_11F800                                  ; +0x1b8, 0x5a1a4\nLDR             X0, [X8,#(qword_11F930 - 0x11F800)]                    ; +0x1bc, 0x5a1a8\nBL              .FMOD_OS_CriticalSection_Leave                         ; +0x1c0, 0x5a1ac\nTBZ             W22, #0, loc_5A214                                     ; +0x1c4, 0x5a1b0\nLDR             X8, [X21]                                              ; +0x1c8, 0x5a1b4\nADD             X1, SP, #0x50+var_3C                                   ; +0x1cc, 0x5a1b8\nMOV             X0, X21                                                ; +0x1d0, 0x5a1bc\nLDR             X8, [X8,#0x120]                                        ; +0x1d4, 0x5a1c0\nBLR             X8                                                     ; +0x1d8, 0x5a1c4\nLDRB            W8, [SP,#0x50+var_3C]                                  ; +0x1dc, 0x5a1c8\nTBZ             W8, #4, loc_5A1F0                                      ; +0x1e0, 0x5a1cc\nSTR             WZR, [SP,#0x50+var_40]                                 ; +0x1e4, 0x5a1d0\nSTR             XZR, [SP,#0x50+var_48]                                 ; +0x1e8, 0x5a1d4\nLDP             X8, X9, [X19]                                          ; +0x1ec, 0x5a1d8\nMOV             W10, #0x10A70                                          ; +0x1f0, 0x5a1dc\nADD             X2, SP, #0x50+var_48                                   ; +0x1f8, 0x5a1e4\nBL              sub_5C694                                              ; +0x1fc, 0x5a1e8\nCBNZ            W0, loc_5A0B4                                          ; +0x200, 0x5a1ec\nBL              sub_5C678                                              ; +0x204, 0x5a1f0\nLDR             X8, [X8,X9]                                            ; +0x208, 0x5a1f4\nLDRB            W8, [X8,#0x48]                                         ; +0x20c, 0x5a1f8\nTBZ             W8, #1, loc_5A214                                      ; +0x210, 0x5a1fc\nLDR             X8, [X19,#0x1D8]                                       ; +0x214, 0x5a200\nLDRB            W8, [X8,#0x3E]                                         ; +0x218, 0x5a204\nTBNZ            W8, #0, loc_5A214                                      ; +0x21c, 0x5a208\nBL              sub_5C5DC                                              ; +0x220, 0x5a20c\nCBNZ            W0, loc_5A0B4                                          ; +0x224, 0x5a210\nLDR             X8, [X21,#0xF0]                                        ; +0x228, 0x5a214\nCBZ             X8, loc_5A230                                          ; +0x22c, 0x5a218\nLDR             W9, [X21,#0xE4]                                        ; +0x230, 0x5a21c\nCBZ             W9, loc_5A230                                          ; +0x234, 0x5a220\nLDR             X8, [X8]                                               ; +0x238, 0x5a224\nSTR             WZR, [X19,#0x1F8]                                      ; +0x23c, 0x5a228\nSTR             X8, [X19,#0x1F0]                                       ; +0x240, 0x5a22c\nTBNZ            W20, #0, loc_5A23C                                     ; +0x244, 0x5a230\nBL              sub_5C624                                              ; +0x248, 0x5a234\nCBNZ            W0, loc_5A0B4                                          ; +0x24c, 0x5a238\nMOV             W0, WZR                                                ; +0x250, 0x5a23c\nB               loc_5A0B4                                              ; +0x254, 0x5a240", "xrefs": ["sub_59AE8 @ 0x59be4", "sub_60458 @ 0x6054c", "sub_6E15C @ 0x6e274", "sub_7C19C @ 0x7c4a0", "sub_7C19C @ 0x7c560", "sub_92AE0 @ 0x93170"], "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"}