{"type": "func", "start": 370968, "end": 371308, "name": "sub_5A918", "pseudocode": "// \n// sub_5A918 from 0x5a918 to 0x5aa6c (340 bytes)\n// \n// 6 xrefs:\n// > sub_59FEC @ 0x5a120\n// > sub_5A244 @ 0x5a2b8\n// > sub_5A364 @ 0x5a430\n// > sub_60458 @ 0x60574\n// > sub_8D6F8 @ 0x8eee8\n// > FMOD::Channel::setPosition @ 0xceaa0\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_5A918(__int64 a1)\n{\n  __int64 v1; // x19\n  unsigned int v2; // w1\n  unsigned int v3; // w2\n  __int64 v4; // x8\n  long double v5; // q0\n  __int64 v6; // x9\n  unsigned int v7; // w21\n  __int64 result; // x0\n  unsigned int v9; // w20\n  __int64 v10; // x0\n  _QWORD *v11; // x0\n  unsigned int *v12; // x8\n  __int64 v13; // x2\n  __int64 v14; // x3\n  __int64 v15; // x8\n  __int64 v16; // [xsp+8h] [xbp-28h] BYREF\n  unsigned int v17; // [xsp+1Ch] [xbp-14h] BYREF\n\n  if ( !*(_QWORD *)(a1 + 472) )\n    return 30;\n  sub_5C688(a1);\n  if ( !v6 )\n    return 30;\n  v7 = v3;\n  if ( (v3 & 0x600) != 0 )\n    return 68;\n  v9 = v2;\n  if ( (v3 & 0x10) == 0 )\n  {\n    v10 = *(_QWORD *)(v4 + 40);\n    if ( v10 )\n    {\n      result = (*(__int64 (__fastcall **)(__int64, unsigned int *, _QWORD))(*(_QWORD *)v10 + 152LL))(v10, &v17, v3);\n      if ( (_DWORD)result )\n        return result;\n      if ( v17 <= v9 )\n        return 32;\n    }\n  }\n  if ( (v7 & 7) == 0 )\n  {\n    result = (*(__int64 (__fastcall **)(_QWORD, _QWORD, _QWORD, _QWORD))(**(_QWORD **)(v1 + 472) + 216LL))(\n               *(_QWORD *)(v1 + 472),\n               v9,\n               v7,\n               0);\n    if ( !(_DWORD)result )\n      return sub_5C71C();\n    return result;\n  }\n  v11 = *(_QWORD **)(v1 + 472);\n  v12 = (unsigned int *)v11[5];\n  if ( v12 )\n  {\n    v13 = v12[26];\n    v14 = v12[10];\n    LODWORD(v5) = v12[27];\n    if ( (v7 & 2) == 0 )\n      goto LABEL_12;\nLABEL_19:\n    HIDWORD(v16) = v9;\nLABEL_20:\n    LODWORD(v16) = 0;\n    goto LABEL_25;\n  }\n  v15 = v11[6];\n  if ( !v15 )\n    return 30;\n  v13 = *(unsigned __int16 *)(v15 + 280);\n  v14 = 5;\n  *(float *)&v5 = (float)*(int *)(*(_QWORD *)(v1 + 8) + 1744LL);\n  if ( (v7 & 2) != 0 )\n    goto LABEL_19;\nLABEL_12:\n  if ( (v7 & 4) == 0 )\n  {\n    if ( (v7 & 1) == 0 )\n      goto LABEL_25;\n    *(float *)&v5 = (float)((float)((float)v9 * 0.001) * *(float *)&v5) + 0.5;\n    HIDWORD(v16) = (unsigned int)*(float *)&v5;\n    goto LABEL_20;\n  }\n  sub_5C214(v9, (char *)&v16 + 4, v13, v14);\n  LODWORD(v16) = 0;\n  v11 = *(_QWORD **)(v1 + 472);\nLABEL_25:\n  result = (*(__int64 (__fastcall **)(_QWORD *, __int64, __int64, __int64, long double))(*v11 + 128LL))(\n             v11,\n             v16,\n             v13,\n             v14,\n             v5);\n  if ( !(_DWORD)result )\n    return sub_5C71C();\n  return result;\n}", "assembly": "; \n; sub_5A918 from 0x5a918 to 0x5aa6c (340 bytes)\n; \n; 6 xrefs:\n; > sub_59FEC @ 0x5a120\n; > sub_5A244 @ 0x5a2b8\n; > sub_5A364 @ 0x5a430\n; > sub_60458 @ 0x60574\n; > sub_8D6F8 @ 0x8eee8\n; > FMOD::Channel::setPosition @ 0xceaa0\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, 0x5a918\nSTP             X20, X19, [SP,#0x30+var_10]                            ; +0x4, 0x5a91c\nSTP             X29, X30, [SP,#0x30+var_s0]                            ; +0x8, 0x5a920\nLDR             X8, [X0,#0x1D8]                                        ; +0xc, 0x5a924\nSTR             X21, [SP,#0x30+var_20]                                 ; +0x10, 0x5a928\nADD             X29, SP, #0x30                                         ; +0x14, 0x5a92c\nCBZ             X8, loc_5AA24                                          ; +0x18, 0x5a930\nBL              sub_5C688                                              ; +0x1c, 0x5a934\nCBZ             X9, loc_5AA24                                          ; +0x20, 0x5a938\nMOV             W21, W2                                                ; +0x24, 0x5a93c\nTST             W2, #0x600                                             ; +0x28, 0x5a940\nB.EQ            loc_5A950                                              ; +0x2c, 0x5a944\nMOV             W0, #0x44 ; 'D'                                        ; +0x30, 0x5a948\nB               loc_5AA28                                              ; +0x34, 0x5a94c\nMOV             W20, W1                                                ; +0x38, 0x5a950\nTBNZ            W21, #4, loc_5A984                                     ; +0x3c, 0x5a954\nLDR             X0, [X8,#0x28]                                         ; +0x40, 0x5a958\nCBZ             X0, loc_5A984                                          ; +0x44, 0x5a95c\nLDR             X8, [X0]                                               ; +0x48, 0x5a960\nSUB             X1, X29, #-var_14                                      ; +0x4c, 0x5a964\nMOV             W2, W21                                                ; +0x50, 0x5a968\nLDR             X8, [X8,#0x98]                                         ; +0x54, 0x5a96c\nBLR             X8                                                     ; +0x58, 0x5a970\nCBNZ            W0, loc_5AA28                                          ; +0x5c, 0x5a974\nLDUR            W8, [X29,#var_14]                                      ; +0x60, 0x5a978\nCMP             W8, W20                                                ; +0x64, 0x5a97c\nB.LS            loc_5AA30                                              ; +0x68, 0x5a980\nTST             W21, #7                                                ; +0x6c, 0x5a984\nB.EQ            loc_5A9D4                                              ; +0x70, 0x5a988\nLDR             X0, [X19,#0x1D8]                                       ; +0x74, 0x5a98c\nLDR             X8, [X0,#0x28]                                         ; +0x78, 0x5a990\nCBZ             X8, loc_5A9F8                                          ; +0x7c, 0x5a994\nLDR             W2, [X8,#0x68]                                         ; +0x80, 0x5a998\nLDR             W3, [X8,#0x28]                                         ; +0x84, 0x5a99c\nLDR             S0, [X8,#0x6C]                                         ; +0x88, 0x5a9a0\nTBNZ            W21, #1, loc_5AA18                                     ; +0x8c, 0x5a9a4\nTBNZ            W21, #2, loc_5AA38                                     ; +0x90, 0x5a9a8\nTBZ             W21, #0, loc_5AA50                                     ; +0x94, 0x5a9ac\nADRP            X8, #dword_2F10C@PAGE                                  ; +0x98, 0x5a9b0\nLDR             S1, [X8,#dword_2F10C@PAGEOFF]                          ; +0x9c, 0x5a9b4\nUCVTF           S2, W20                                                ; +0xa0, 0x5a9b8\nFMOV            S3, #0.5                                               ; +0xa4, 0x5a9bc\nFMUL            S1, S2, S1                                             ; +0xa8, 0x5a9c0\nFMADD           S0, S1, S0, S3                                         ; +0xac, 0x5a9c4\nFCVTZU          W8, S0                                                 ; +0xb0, 0x5a9c8\nSTR             W8, [SP,#0x30+var_28+4]                                ; +0xb4, 0x5a9cc\nB               loc_5AA1C                                              ; +0xb8, 0x5a9d0\nLDR             X0, [X19,#0x1D8]                                       ; +0xbc, 0x5a9d4\nMOV             W1, W20                                                ; +0xc0, 0x5a9d8\nMOV             W2, W21                                                ; +0xc4, 0x5a9dc\nMOV             W3, WZR                                                ; +0xc8, 0x5a9e0\nLDR             X8, [X0]                                               ; +0xcc, 0x5a9e4\nLDR             X8, [X8,#0xD8]                                         ; +0xd0, 0x5a9e8\nBLR             X8                                                     ; +0xd4, 0x5a9ec\nCBNZ            W0, loc_5AA28                                          ; +0xd8, 0x5a9f0\nB               loc_5AA64                                              ; +0xdc, 0x5a9f4\nLDR             X8, [X0,#0x30]                                         ; +0xe0, 0x5a9f8\nCBZ             X8, loc_5AA24                                          ; +0xe4, 0x5a9fc\nLDR             X9, [X19,#8]                                           ; +0xe8, 0x5aa00\nLDRH            W2, [X8,#0x118]                                        ; +0xec, 0x5aa04\nMOV             W3, #5                                                 ; +0xf0, 0x5aa08\nLDR             S0, [X9,#0x6D0]                                        ; +0xf4, 0x5aa0c\nSCVTF           S0, S0                                                 ; +0xf8, 0x5aa10\nTBZ             W21, #1, loc_5A9A8                                     ; +0xfc, 0x5aa14\nSTR             W20, [SP,#0x30+var_28+4]                               ; +0x100, 0x5aa18\nSTR             WZR, [SP,#0x30+var_28]                                 ; +0x104, 0x5aa1c\nB               loc_5AA50                                              ; +0x108, 0x5aa20\nMOV             W0, #0x1E                                              ; +0x10c, 0x5aa24\nLDP             X29, X30, [SP,#0x30+var_s0]                            ; +0x110, 0x5aa28\nB               loc_5C5BC                                              ; +0x114, 0x5aa2c\nMOV             W0, #0x20 ; ' '                                        ; +0x118, 0x5aa30\nB               loc_5AA28                                              ; +0x11c, 0x5aa34\nADD             X8, SP, #0x30+var_28                                   ; +0x120, 0x5aa38\nORR             X1, X8, #4                                             ; +0x124, 0x5aa3c\nMOV             W0, W20                                                ; +0x128, 0x5aa40\nBL              sub_5C214                                              ; +0x12c, 0x5aa44\nSTR             WZR, [SP,#0x30+var_28]                                 ; +0x130, 0x5aa48\nLDR             X0, [X19,#0x1D8]                                       ; +0x134, 0x5aa4c\nLDR             X8, [X0]                                               ; +0x138, 0x5aa50\nLDR             X1, [SP,#0x30+var_28]                                  ; +0x13c, 0x5aa54\nLDR             X8, [X8,#0x80]                                         ; +0x140, 0x5aa58\nBLR             X8                                                     ; +0x144, 0x5aa5c\nCBNZ            W0, loc_5AA28                                          ; +0x148, 0x5aa60\nBL              sub_5C71C                                              ; +0x14c, 0x5aa64\nB               loc_5AA28                                              ; +0x150, 0x5aa68", "xrefs": ["sub_59FEC @ 0x5a120", "sub_5A244 @ 0x5a2b8", "sub_5A364 @ 0x5a430", "sub_60458 @ 0x60574", "sub_8D6F8 @ 0x8eee8", "FMOD::Channel::setPosition @ 0xceaa0"], "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"}