{"type": "func", "start": 383412, "end": 383840, "name": "sub_5D9B4", "pseudocode": "// \n// sub_5D9B4 from 0x5d9b4 to 0x5db60 (428 bytes)\n// \n// 1 xrefs:\n// > FMOD::Geometry::release @ 0xd508c\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_5D9B4(_QWORD *a1)\n{\n  __int64 v2; // x0\n  _QWORD *v3; // x9\n  _QWORD *v4; // x8\n  _QWORD *v5; // x11\n  _QWORD *v6; // x10\n  __int64 v7; // x8\n  __int64 v8; // x1\n  __int64 v9; // x2\n  __int64 v10; // x8\n  __int64 v11; // x1\n  __int64 v12; // x2\n  __int64 v13; // x8\n  __int64 v14; // x0\n  _QWORD *v15; // x9\n  _QWORD *v16; // x8\n  __int64 v17; // x0\n  __int64 v18; // x8\n  _QWORD *v19; // x9\n  __int64 v21; // [xsp+8h] [xbp-28h] BYREF\n  __int64 v22; // [xsp+10h] [xbp-20h] BYREF\n  char v23; // [xsp+18h] [xbp-18h]\n\n  v22 = *(_QWORD *)(a1[3] + 400LL);\n  FMOD_OS_CriticalSection_Enter(v22);\n  v23 = 1;\n  v2 = a1[3];\n  v3 = nullptr;\n  v4 = (_QWORD *)(v2 + 432);\n  v5 = (_QWORD *)(v2 + 432);\n  while ( 1 )\n  {\n    v6 = v3;\n    v3 = (_QWORD *)*v5;\n    if ( !*v5 )\n      break;\n    v5 = v3 + 38;\n    if ( v3 == a1 )\n    {\n      if ( v6 )\n        v4 = v6 + 38;\n      *v4 = a1[38];\n      break;\n    }\n  }\n  if ( a1[33] )\n  {\n    sub_60D14(*(_QWORD *)(v2 + 416));\n    sub_610B0(*(_QWORD *)(a1[3] + 416LL), a1[33] + 80LL);\n    sub_5F318(*(__int64 *)((char *)&qword_1B0 + (_QWORD)off_114000), a1[33], \"../../src/fmod_geometryi.cpp\", 378);\n    v2 = a1[3];\n    a1[33] = 0;\n  }\n  if ( *(_QWORD *)(v2 + 416) )\n    v2 = sub_5D3D0(v2);\n  if ( a1[8] )\n  {\n    sub_5F220(v2);\n    v2 = sub_5F318(*(_QWORD *)(v7 + 432), v8, v9, 388);\n    a1[8] = 0;\n  }\n  if ( a1[6] )\n  {\n    sub_5F220(v2);\n    sub_5F318(*(_QWORD *)(v10 + 432), v11, v12, 393);\n    a1[6] = 0;\n  }\n  v13 = a1[3];\n  *(_BYTE *)(v13 + 8) = 1;\n  v21 = 0;\n  sub_50238(&v21, *(_QWORD *)v13);\n  sub_6CFD0(*(_QWORD *)a1[3]);\n  v14 = sub_51968(&v21);\n  v15 = (_QWORD *)(*(_QWORD *)a1[3] + 73136LL);\n  v16 = (_QWORD *)*a1;\n  if ( (_QWORD *)*v15 == a1 )\n  {\n    *v15 = v16;\n    if ( v16 == a1 )\n      *v15 = 0;\n  }\n  v17 = sub_5F220(v14);\n  *v19 = v18;\n  *(_QWORD *)(*a1 + 8LL) = v19;\n  *a1 = a1;\n  a1[1] = a1;\n  sub_5F320(v17, a1);\n  sub_52090((__int64)&v22);\n  return 0;\n}", "assembly": "; \n; sub_5D9B4 from 0x5d9b4 to 0x5db60 (428 bytes)\n; \n; 1 xrefs:\n; > FMOD::Geometry::release @ 0xd508c\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, #0x40                                          ; +0x0, 0x5d9b4\nSTP             X20, X19, [SP,#0x30+var_10]                            ; +0x4, 0x5d9b8\nSTP             X29, X30, [SP,#0x30+var_s0]                            ; +0x8, 0x5d9bc\nLDR             X8, [X0,#0x18]                                         ; +0xc, 0x5d9c0\nMOV             X19, X0                                                ; +0x10, 0x5d9c4\nADD             X29, SP, #0x30                                         ; +0x14, 0x5d9c8\nLDR             X0, [X8,#0x190]                                        ; +0x18, 0x5d9cc\nSTR             X0, [SP,#0x30+var_20]                                  ; +0x1c, 0x5d9d0\nBL              .FMOD_OS_CriticalSection_Enter                         ; +0x20, 0x5d9d4\nMOV             W8, #1                                                 ; +0x24, 0x5d9d8\nSTRB            W8, [SP,#0x30+var_18]                                  ; +0x28, 0x5d9dc\nLDR             X0, [X19,#0x18]                                        ; +0x2c, 0x5d9e0\nMOV             X9, XZR                                                ; +0x30, 0x5d9e4\nADD             X8, X0, #0x1B0                                         ; +0x34, 0x5d9e8\nMOV             X11, X8                                                ; +0x38, 0x5d9ec\nMOV             X10, X9                                                ; +0x3c, 0x5d9f0\nLDR             X9, [X11]                                              ; +0x40, 0x5d9f4\nCBZ             X9, loc_5DA1C                                          ; +0x44, 0x5d9f8\nCMP             X9, X19                                                ; +0x48, 0x5d9fc\nADD             X11, X9, #0x130                                        ; +0x4c, 0x5da00\nB.NE            loc_5D9F0                                              ; +0x50, 0x5da04\nLDR             X9, [X19,#0x130]                                       ; +0x54, 0x5da08\nADD             X11, X10, #0x130                                       ; +0x58, 0x5da0c\nCMP             X10, #0                                                ; +0x5c, 0x5da10\nCSEL            X8, X8, X11, EQ                                        ; +0x60, 0x5da14\nSTR             X9, [X8]                                               ; +0x64, 0x5da18\nADRP            X20, #off_10F7A0@PAGE                                  ; +0x68, 0x5da1c\nLDR             X1, [X19,#0x108]                                       ; +0x6c, 0x5da20\nLDR             X20, [X20,#off_10F7A0@PAGEOFF]; off_114000             ; +0x70, 0x5da24\nCBZ             X1, loc_5DA6C                                          ; +0x74, 0x5da28\nLDR             X0, [X0,#0x1A0]                                        ; +0x78, 0x5da2c\nBL              sub_60D14                                              ; +0x7c, 0x5da30\nLDR             X8, [X19,#0x18]                                        ; +0x80, 0x5da34\nLDR             X9, [X19,#0x108]                                       ; +0x84, 0x5da38\nLDR             X0, [X8,#0x1A0]                                        ; +0x88, 0x5da3c\nADD             X1, X9, #0x50 ; 'P'                                    ; +0x8c, 0x5da40\nBL              sub_610B0                                              ; +0x90, 0x5da44\nLDR             X8, [X20]; unk_11F800                                  ; +0x94, 0x5da48\nLDR             X1, [X19,#0x108]                                       ; +0x98, 0x5da4c\nADRL            X2, aSrcFmodGeometr; \"../../src/fmod_geometryi.cpp\"    ; +0x9c, 0x5da50\nLDR             X0, [X8,#(qword_11F9B0 - 0x11F800)]                    ; +0xa4, 0x5da58\nMOV             W3, #0x17A                                             ; +0xa8, 0x5da5c\nBL              sub_5F318                                              ; +0xac, 0x5da60\nLDR             X0, [X19,#0x18]                                        ; +0xb0, 0x5da64\nSTR             XZR, [X19,#0x108]                                      ; +0xb4, 0x5da68\nLDR             X8, [X0,#0x1A0]                                        ; +0xb8, 0x5da6c\nCBZ             X8, loc_5DA78                                          ; +0xbc, 0x5da70\nBL              sub_5D3D0                                              ; +0xc0, 0x5da74\nLDR             X1, [X19,#0x40]                                        ; +0xc4, 0x5da78\nCBZ             X1, loc_5DA98                                          ; +0xc8, 0x5da7c\nLDR             X8, [X20]; unk_11F800                                  ; +0xcc, 0x5da80\nBL              sub_5F220                                              ; +0xd0, 0x5da84\nMOV             W3, #0x184                                             ; +0xd4, 0x5da88\nLDR             X0, [X8,#0x1B0]                                        ; +0xd8, 0x5da8c\nBL              sub_5F318                                              ; +0xdc, 0x5da90\nSTR             XZR, [X19,#0x40]                                       ; +0xe0, 0x5da94\nLDR             X1, [X19,#0x30]                                        ; +0xe4, 0x5da98\nCBZ             X1, loc_5DAB8                                          ; +0xe8, 0x5da9c\nLDR             X8, [X20]; unk_11F800                                  ; +0xec, 0x5daa0\nBL              sub_5F220                                              ; +0xf0, 0x5daa4\nMOV             W3, #0x189                                             ; +0xf4, 0x5daa8\nLDR             X0, [X8,#0x1B0]                                        ; +0xf8, 0x5daac\nBL              sub_5F318                                              ; +0xfc, 0x5dab0\nSTR             XZR, [X19,#0x30]                                       ; +0x100, 0x5dab4\nLDR             X8, [X19,#0x18]                                        ; +0x104, 0x5dab8\nMOV             W9, #1                                                 ; +0x108, 0x5dabc\nADD             X0, SP, #0x30+var_28                                   ; +0x10c, 0x5dac0\nSTRB            W9, [X8,#8]                                            ; +0x110, 0x5dac4\nSTR             XZR, [SP,#0x30+var_28]                                 ; +0x114, 0x5dac8\nLDR             X1, [X8]                                               ; +0x118, 0x5dacc\nBL              sub_50238                                              ; +0x11c, 0x5dad0\nLDR             X8, [X19,#0x18]                                        ; +0x120, 0x5dad4\nLDR             X0, [X8]                                               ; +0x124, 0x5dad8\nBL              sub_6CFD0                                              ; +0x128, 0x5dadc\nADD             X0, SP, #0x30+var_28                                   ; +0x12c, 0x5dae0\nBL              sub_51968                                              ; +0x130, 0x5dae4\nLDR             X8, [X19,#0x18]                                        ; +0x134, 0x5dae8\nMOV             W9, #0x11DB0                                           ; +0x138, 0x5daec\nLDR             X8, [X8]                                               ; +0x140, 0x5daf4\nADD             X9, X8, X9                                             ; +0x144, 0x5daf8\nLDR             X10, [X9]                                              ; +0x148, 0x5dafc\nLDR             X8, [X19]                                              ; +0x14c, 0x5db00\nCMP             X10, X19                                               ; +0x150, 0x5db04\nB.NE            loc_5DB1C                                              ; +0x154, 0x5db08\nCMP             X8, X19                                                ; +0x158, 0x5db0c\nSTR             X8, [X9]                                               ; +0x15c, 0x5db10\nB.NE            loc_5DB1C                                              ; +0x160, 0x5db14\nSTR             XZR, [X9]                                              ; +0x164, 0x5db18\nLDR             X9, [X19,#8]                                           ; +0x168, 0x5db1c\nBL              sub_5F220                                              ; +0x16c, 0x5db20\nMOV             W3, #0x1A0                                             ; +0x170, 0x5db24\nSTR             X8, [X9]                                               ; +0x174, 0x5db28\nLDR             X8, [X19]                                              ; +0x178, 0x5db2c\nMOV             W4, #1                                                 ; +0x17c, 0x5db30\nMOV             X1, X19                                                ; +0x180, 0x5db34\nSTR             X9, [X8,#8]                                            ; +0x184, 0x5db38\nSTP             X19, X19, [X19]                                        ; +0x188, 0x5db3c\nLDR             X8, [X20]; unk_11F800                                  ; +0x18c, 0x5db40\nBL              sub_5F320                                              ; +0x190, 0x5db44\nADD             X0, SP, #0x30+var_20                                   ; +0x194, 0x5db48\nBL              sub_52090                                              ; +0x198, 0x5db4c\nLDP             X29, X30, [SP,#0x30+var_s0]                            ; +0x19c, 0x5db50\nLDP             X20, X19, [SP,#0x30+var_10]                            ; +0x1a0, 0x5db54\nMOV             W0, WZR                                                ; +0x1a4, 0x5db58\nB               loc_5F2CC                                              ; +0x1a8, 0x5db5c", "xrefs": ["FMOD::Geometry::release @ 0xd508c"], "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"}