{"type": "func", "start": 366560, "end": 367004, "name": "sub_597E0", "pseudocode": "// \n// sub_597E0 from 0x597e0 to 0x5999c (444 bytes)\n// \n// 5 xrefs:\n// > sub_5B538 @ 0x5b590\n// > sub_5BB4C @ 0x5bb5c\n// > sub_5C64C @ 0x5c654\n// > sub_6E15C @ 0x6e2c0\n// > sub_6E374 @ 0x6e438\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_597E0(__int64 a1)\n{\n  __int64 v1; // x8\n  __int64 v3; // x21\n  __int64 v4; // x9\n  float v5; // s8\n  int v6; // w8\n  int v7; // w9\n  int v8; // w10\n  int v9; // w8\n  int v10; // w22\n  float v12; // [xsp+Ch] [xbp-24h] BYREF\n\n  if ( (*(_BYTE *)(a1 + 74) & 4) != 0 )\n    return 0;\n  v1 = *(_QWORD *)(a1 + 472);\n  if ( !v1 || !*(_QWORD *)(a1 + 32) )\n    return 30;\n  if ( (*(_BYTE *)(v1 + 62) & 1) != 0 )\n    return 0;\n  v3 = *(_QWORD *)(v1 + 40);\n  sub_5999C(a1, &v12, 0);\n  v4 = *(_QWORD *)(a1 + 8);\n  v5 = *(float *)(a1 + 536) * v12;\n  LOBYTE(v6) = 0;\n  if ( v5 <= *(float *)(v4 + 69696) )\n    v6 = (*(unsigned __int8 *)(v4 + 122) >> 1) & 1;\n  sub_59AE8(\n    a1,\n    (unsigned __int8)(((float)((float)((float)(1.0 - *(float *)(a1 + 192))\n                                     - (float)(*(float *)(a1 + 208) * (float)(1.0 - *(float *)(a1 + 192))))\n                             * *(float *)(*(_QWORD *)(a1 + 32) + 496LL)) != 0.0\n                    || (float)((float)((float)(1.0 - *(float *)(a1 + 196))\n                                     - (float)(*(float *)(a1 + 212) * (float)(1.0 - *(float *)(a1 + 196))))\n                             * *(float *)(*(_QWORD *)(a1 + 32) + 500LL)) <= 0.0)\n                    & v6)\n  & (*(_DWORD *)(a1 + 480) != 0));\n  v7 = 10001 * *(_DWORD *)(a1 + 480);\n  v8 = v7 - (int)(float)(v5 * 1000.0) + 10000;\n  v9 = *(_DWORD *)(a1 + 484);\n  *(_DWORD *)(a1 + 484) = v8;\n  v10 = *(_DWORD *)(a1 + 488);\n  *(_DWORD *)(a1 + 488) = v7 - (int)(float)(v12 * 10000.0) + 10000;\n  if ( v8 != v9 )\n  {\n    sub_59598(a1 + 400);\n    sub_59C90(a1 + 400, *(_QWORD *)(a1 + 8) + 1616LL, *(_QWORD *)(a1 + 8) + 1616LL, *(unsigned int *)(a1 + 484));\n    *(_QWORD *)(a1 + 416) = a1;\n  }\n  if ( !v3 || !*(_QWORD *)(v3 + 280) || *(_DWORD *)(a1 + 488) == v10 )\n    return 0;\n  sub_59598(a1 + 432);\n  sub_59C90(a1 + 432, *(_QWORD *)(v3 + 280) + 64LL, *(_QWORD *)(v3 + 280) + 64LL, *(unsigned int *)(a1 + 488));\n  *(_QWORD *)(a1 + 448) = a1;\n  return 0;\n}", "assembly": "; \n; sub_597E0 from 0x597e0 to 0x5999c (444 bytes)\n; \n; 5 xrefs:\n; > sub_5B538 @ 0x5b590\n; > sub_5BB4C @ 0x5bb5c\n; > sub_5C64C @ 0x5c654\n; > sub_6E15C @ 0x6e2c0\n; > sub_6E374 @ 0x6e438\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\nSTR             D8, [SP,#-0x10+var_30]!                                ; +0x0, 0x597e0\nSTP             X22, X21, [SP,#0x30+var_20]                            ; +0x4, 0x597e4\nSTP             X20, X19, [SP,#0x30+var_10]                            ; +0x8, 0x597e8\nSTP             X29, X30, [SP,#0x30+var_s0]                            ; +0xc, 0x597ec\nLDRB            W8, [X0,#0x4A]                                         ; +0x10, 0x597f0\nADD             X29, SP, #0x30                                         ; +0x14, 0x597f4\nTBNZ            W8, #2, loc_59958                                      ; +0x18, 0x597f8\nLDR             X8, [X0,#0x1D8]                                        ; +0x1c, 0x597fc\nMOV             X19, X0                                                ; +0x20, 0x59800\nCBZ             X8, loc_59960                                          ; +0x24, 0x59804\nLDR             X9, [X19,#0x20]                                        ; +0x28, 0x59808\nCBZ             X9, loc_59960                                          ; +0x2c, 0x5980c\nLDRB            W9, [X8,#0x3E]                                         ; +0x30, 0x59810\nTBNZ            W9, #0, loc_59958                                      ; +0x34, 0x59814\nLDR             X21, [X8,#0x28]                                        ; +0x38, 0x59818\nADD             X1, SP, #0x30+var_24                                   ; +0x3c, 0x5981c\nMOV             X0, X19                                                ; +0x40, 0x59820\nMOV             W2, WZR                                                ; +0x44, 0x59824\nBL              sub_5999C                                              ; +0x48, 0x59828\nLDR             S0, [SP,#0x30+var_24]                                  ; +0x4c, 0x5982c\nLDR             X9, [X19,#8]                                           ; +0x50, 0x59830\nLDR             S1, [X19,#0x218]                                       ; +0x54, 0x59834\nMOV             W10, #0x11040                                          ; +0x58, 0x59838\nLDP             S4, S5, [X19,#0xC0]                                    ; +0x60, 0x59840\nLDR             S3, [X9,X10]                                           ; +0x64, 0x59844\nLDR             X10, [X19,#0x20]                                       ; +0x68, 0x59848\nFMUL            S8, S1, S0                                             ; +0x6c, 0x5984c\nLDP             S0, S1, [X19,#0xD0]                                    ; +0x70, 0x59850\nFMOV            S2, #1.0                                               ; +0x74, 0x59854\nFSUB            S4, S2, S4                                             ; +0x78, 0x59858\nFSUB            S2, S2, S5                                             ; +0x7c, 0x5985c\nLDR             S5, [X10,#0x1F0]                                       ; +0x80, 0x59860\nFMSUB           S0, S0, S4, S4                                         ; +0x84, 0x59864\nLDR             S4, [X10,#0x1F4]                                       ; +0x88, 0x59868\nFMSUB           S2, S1, S2, S2                                         ; +0x8c, 0x5986c\nMOV             W8, WZR                                                ; +0x90, 0x59870\nFMUL            S1, S0, S5                                             ; +0x94, 0x59874\nFCMP            S8, S3                                                 ; +0x98, 0x59878\nFMUL            S0, S2, S4                                             ; +0x9c, 0x5987c\nB.GT            loc_5988C                                              ; +0xa0, 0x59880\nLDRB            W8, [X9,#0x7A]                                         ; +0xa4, 0x59884\nUBFX            W8, W8, #1, #1                                         ; +0xa8, 0x59888\nLDR             W9, [X19,#0x1E0]                                       ; +0xac, 0x5988c\nFCMP            S1, #0.0                                               ; +0xb0, 0x59890\nCSET            W10, NE                                                ; +0xb4, 0x59894\nFCMP            S0, #0.0                                               ; +0xb8, 0x59898\nCSET            W11, LE                                                ; +0xbc, 0x5989c\nORR             W10, W10, W11                                          ; +0xc0, 0x598a0\nCMP             W9, #0                                                 ; +0xc4, 0x598a4\nAND             W8, W10, W8                                            ; +0xc8, 0x598a8\nCSET            W9, NE                                                 ; +0xcc, 0x598ac\nAND             W1, W8, W9                                             ; +0xd0, 0x598b0\nMOV             X0, X19                                                ; +0xd4, 0x598b4\nBL              sub_59AE8                                              ; +0xd8, 0x598b8\nLDR             W9, [X19,#0x1E0]                                       ; +0xdc, 0x598bc\nMOV             W11, #0x447A0000                                       ; +0xe0, 0x598c0\nFMOV            S0, W11                                                ; +0xe4, 0x598c4\nMOV             W10, #0x2711                                           ; +0xe8, 0x598c8\nFMUL            S0, S8, S0                                             ; +0xec, 0x598cc\nFCVTZS          W11, S0                                                ; +0xf0, 0x598d0\nMUL             W9, W9, W10                                            ; +0xf4, 0x598d4\nMOV             W12, #0x2710                                           ; +0xf8, 0x598d8\nSUB             W10, W9, W11                                           ; +0xfc, 0x598dc\nADD             W10, W10, W12                                          ; +0x100, 0x598e0\nLDR             W8, [X19,#0x1E4]                                       ; +0x104, 0x598e4\nADRP            X13, #dword_2EFE0@PAGE                                 ; +0x108, 0x598e8\nSTR             W10, [X19,#0x1E4]                                      ; +0x10c, 0x598ec\nLDR             S1, [X13,#dword_2EFE0@PAGEOFF]                         ; +0x110, 0x598f0\nLDR             S0, [SP,#0x30+var_24]                                  ; +0x114, 0x598f4\nLDR             W22, [X19,#0x1E8]                                      ; +0x118, 0x598f8\nCMP             W10, W8                                                ; +0x11c, 0x598fc\nFMUL            S0, S0, S1                                             ; +0x120, 0x59900\nFCVTZS          W11, S0                                                ; +0x124, 0x59904\nSUB             W9, W9, W11                                            ; +0x128, 0x59908\nADD             W9, W9, W12                                            ; +0x12c, 0x5990c\nSTR             W9, [X19,#0x1E8]                                       ; +0x130, 0x59910\nB.EQ            loc_59940                                              ; +0x134, 0x59914\nADD             X20, X19, #0x190                                       ; +0x138, 0x59918\nMOV             X0, X20                                                ; +0x13c, 0x5991c\nBL              sub_59598                                              ; +0x140, 0x59920\nLDR             X8, [X19,#8]                                           ; +0x144, 0x59924\nLDR             W3, [X19,#0x1E4]                                       ; +0x148, 0x59928\nMOV             X0, X20                                                ; +0x14c, 0x5992c\nADD             X1, X8, #0x650                                         ; +0x150, 0x59930\nMOV             X2, X1                                                 ; +0x154, 0x59934\nBL              sub_59C90                                              ; +0x158, 0x59938\nSTR             X19, [X19,#0x1A0]                                      ; +0x15c, 0x5993c\nCBZ             X21, loc_59958                                         ; +0x160, 0x59940\nLDR             X8, [X21,#0x118]                                       ; +0x164, 0x59944\nCBZ             X8, loc_59958                                          ; +0x168, 0x59948\nLDR             W8, [X19,#0x1E8]                                       ; +0x16c, 0x5994c\nCMP             W8, W22                                                ; +0x170, 0x59950\nB.NE            loc_5996C                                              ; +0x174, 0x59954\nMOV             W0, WZR                                                ; +0x178, 0x59958\nB               loc_59964                                              ; +0x17c, 0x5995c\nMOV             W0, #0x1E                                              ; +0x180, 0x59960\nLDP             X29, X30, [SP,#0x30+var_s0]                            ; +0x184, 0x59964\nB               loc_5C5CC                                              ; +0x188, 0x59968\nADD             X20, X19, #0x1B0                                       ; +0x18c, 0x5996c\nMOV             X0, X20                                                ; +0x190, 0x59970\nBL              sub_59598                                              ; +0x194, 0x59974\nLDR             X8, [X21,#0x118]                                       ; +0x198, 0x59978\nLDR             W3, [X19,#0x1E8]                                       ; +0x19c, 0x5997c\nMOV             X0, X20                                                ; +0x1a0, 0x59980\nADD             X1, X8, #0x40 ; '@'                                    ; +0x1a4, 0x59984\nMOV             X2, X1                                                 ; +0x1a8, 0x59988\nBL              sub_59C90                                              ; +0x1ac, 0x5998c\nMOV             W0, WZR                                                ; +0x1b0, 0x59990\nSTR             X19, [X19,#0x1C0]                                      ; +0x1b4, 0x59994\nB               loc_59964                                              ; +0x1b8, 0x59998", "xrefs": ["sub_5B538 @ 0x5b590", "sub_5BB4C @ 0x5bb5c", "sub_5C64C @ 0x5c654", "sub_6E15C @ 0x6e2c0", "sub_6E374 @ 0x6e438"], "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"}