{"type": "func", "start": 351692, "end": 352108, "name": "sub_55DCC", "pseudocode": "// \n// sub_55DCC from 0x55dcc to 0x55f6c (416 bytes)\n// \n// 5 xrefs:\n// > sub_5704C @ 0x57130\n// > sub_58380 @ 0x583ac\n// > sub_58674 @ 0x58740\n// > sub_5B3B0 @ 0x5b3d4\n// > sub_5B6D4 @ 0x5b76c\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_55DCC(__int64 *a1, __int64 a2, __int64 a3, char a4)\n{\n  __int64 result; // x0\n  __int64 v7; // x21\n  __int64 *v8; // x8\n  __int64 *v9; // x23\n  char v10; // w22\n  float v11; // s8\n  float v12; // s9\n  int v13; // w9\n  __int64 *v14; // x24\n  __int64 v15; // x25\n  char v16; // w8\n  __int64 v17; // x8\n  __int64 v18; // [xsp+8h] [xbp-58h] BYREF\n  int v19; // [xsp+2Ch] [xbp-34h] BYREF\n\n  v19 = 0;\n  result = (*(__int64 (__fastcall **)(__int64 *, __int64, __int64 *))(*a1 + 288))(a1, 4294967294LL, &v18);\n  if ( !(_DWORD)result )\n  {\n    v7 = v18;\n    result = (*(__int64 (__fastcall **)(__int64 *, __int64, int *))(*a1 + 312))(a1, v18, &v19);\n    v8 = (__int64 *)a1[34];\n    v9 = a1 + 34;\n    if ( v8 == a1 + 34 && (__int64 *)a1[35] == v9 )\n    {\n      v10 = 0;\n      v11 = 1.0;\n      v12 = 0.0;\n    }\n    else\n    {\n      v10 = 0;\n      v11 = 1.0;\n      v12 = 0.0;\n      v13 = -1;\n      while ( v8 != v9 )\n      {\n        v14 = (__int64 *)*v8;\n        v15 = v8[2];\n        result = (__int64)(v8 - 18);\n        if ( v13 < v19 && v19 < (int)v15 >> 16 )\n        {\n          v10 = 1;\n          result = sub_579B4(result, *(float *)(v7 + 568), *(float *)(v7 + 680), *((float *)a1 + 12));\n        }\n        v16 = atomic_load((unsigned int *)(result + 100));\n        if ( (v16 & 1) == 0 )\n        {\n          result = sub_CC2D4();\n          if ( (_DWORD)result )\n            return result;\n          v12 = COERCE_FLOAT(65794) + (float)(13073.0 * v12);\n          v11 = 13073.0 * v11;\n        }\n        v13 = (int)v15 >> 16;\n        v8 = v14;\n      }\n    }\n    if ( v7 && (v10 & 1) == 0 )\n      sub_579B4(result, *(float *)(v7 + 568), *(float *)(v7 + 680), *((float *)a1 + 12));\n    if ( *((float *)a1 + 22) == v11 && *((float *)a1 + 23) == v12 && (a4 & 1) == 0 )\n      return (*(__int64 (__fastcall **)(__int64 *))(*a1 + 528))(a1);\n    v17 = *a1;\n    *((float *)a1 + 22) = v11;\n    *((float *)a1 + 23) = v12;\n    result = (*(__int64 (__fastcall **)(__int64 *))(v17 + 512))(a1);\n    if ( !(_DWORD)result )\n      return (*(__int64 (__fastcall **)(__int64 *))(*a1 + 528))(a1);\n  }\n  return result;\n}", "assembly": "; \n; sub_55DCC from 0x55dcc to 0x55f6c (416 bytes)\n; \n; 5 xrefs:\n; > sub_5704C @ 0x57130\n; > sub_58380 @ 0x583ac\n; > sub_58674 @ 0x58740\n; > sub_5B3B0 @ 0x5b3d4\n; > sub_5B6D4 @ 0x5b76c\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, #0x70                                          ; +0x0, 0x55dcc\nSTP             D9, D8, [SP,#0x60+var_50]                              ; +0x4, 0x55dd0\nSTP             X24, X23, [SP,#0x60+var_30]                            ; +0x8, 0x55dd4\nSTP             X22, X21, [SP,#0x60+var_20]                            ; +0xc, 0x55dd8\nSTP             X20, X19, [SP,#0x60+var_10]                            ; +0x10, 0x55ddc\nSTP             X29, X30, [SP,#0x60+var_s0]                            ; +0x14, 0x55de0\nSTR             WZR, [SP,#0x60+var_34]                                 ; +0x18, 0x55de4\nLDR             X8, [X0]                                               ; +0x1c, 0x55de8\nADD             X2, SP, #0x60+var_58                                   ; +0x20, 0x55dec\nMOV             W1, #0xFFFFFFFE                                        ; +0x24, 0x55df0\nSTR             X25, [SP,#0x60+var_40]                                 ; +0x28, 0x55df4\nLDR             X8, [X8,#0x120]                                        ; +0x2c, 0x55df8\nADD             X29, SP, #0x60                                         ; +0x30, 0x55dfc\nMOV             X19, X0                                                ; +0x34, 0x55e00\nMOV             W20, W3                                                ; +0x38, 0x55e04\nBLR             X8                                                     ; +0x3c, 0x55e08\nCBZ             W0, loc_55E30                                          ; +0x40, 0x55e0c\nLDP             X29, X30, [SP,#0x60+var_s0]                            ; +0x44, 0x55e10\nLDP             X20, X19, [SP,#0x60+var_10]                            ; +0x48, 0x55e14\nLDP             X22, X21, [SP,#0x60+var_20]                            ; +0x4c, 0x55e18\nLDP             X24, X23, [SP,#0x60+var_30]                            ; +0x50, 0x55e1c\nLDR             X25, [SP,#0x60+var_40]                                 ; +0x54, 0x55e20\nLDP             D9, D8, [SP,#0x60+var_50]                              ; +0x58, 0x55e24\nADD             SP, SP, #0x70 ; 'p'                                    ; +0x5c, 0x55e28\nRET                                                                    ; +0x60, 0x55e2c\nLDR             X8, [X19]                                              ; +0x64, 0x55e30\nLDR             X21, [SP,#0x60+var_58]                                 ; +0x68, 0x55e34\nADD             X2, SP, #0x60+var_34                                   ; +0x6c, 0x55e38\nMOV             X0, X19                                                ; +0x70, 0x55e3c\nLDR             X8, [X8,#0x138]                                        ; +0x74, 0x55e40\nMOV             X1, X21                                                ; +0x78, 0x55e44\nBLR             X8                                                     ; +0x7c, 0x55e48\nLDR             X8, [X19,#0x110]                                       ; +0x80, 0x55e4c\nADD             X23, X19, #0x110                                       ; +0x84, 0x55e50\nCMP             X8, X23                                                ; +0x88, 0x55e54\nB.NE            loc_55E68                                              ; +0x8c, 0x55e58\nLDR             X9, [X19,#0x118]                                       ; +0x90, 0x55e5c\nCMP             X9, X23                                                ; +0x94, 0x55e60\nB.EQ            loc_55EFC                                              ; +0x98, 0x55e64\nMOV             W22, WZR                                               ; +0x9c, 0x55e68\nFMOV            S8, #1.0                                               ; +0xa0, 0x55e6c\nFMOV            S9, WZR                                                ; +0xa4, 0x55e70\nMOV             W9, #0xFFFFFFFF                                        ; +0xa8, 0x55e74\nCMP             X8, X23                                                ; +0xac, 0x55e78\nB.EQ            loc_55F08                                              ; +0xb0, 0x55e7c\nLDR             W10, [SP,#0x60+var_34]                                 ; +0xb4, 0x55e80\nLDR             X24, [X8]                                              ; +0xb8, 0x55e84\nLDR             X25, [X8,#0x10]                                        ; +0xbc, 0x55e88\nSUB             X0, X8, #0x90                                          ; +0xc0, 0x55e8c\nCMP             W9, W10                                                ; +0xc4, 0x55e90\nB.GE            loc_55EB4                                              ; +0xc8, 0x55e94\nCMP             W10, W25,ASR#16                                        ; +0xcc, 0x55e98\nB.GE            loc_55EB4                                              ; +0xd0, 0x55e9c\nLDR             S0, [X21,#0x238]                                       ; +0xd4, 0x55ea0\nLDR             S1, [X21,#0x2A8]                                       ; +0xd8, 0x55ea4\nLDR             S2, [X19,#0x30]                                        ; +0xdc, 0x55ea8\nMOV             W22, #1                                                ; +0xe0, 0x55eac\nBL              sub_579B4                                              ; +0xe4, 0x55eb0\nADD             X8, X0, #0x64 ; 'd'                                    ; +0xe8, 0x55eb4\nLDAR            W8, [X8]                                               ; +0xec, 0x55eb8\nTBNZ            W8, #0, loc_55EF0                                      ; +0xf0, 0x55ebc\nSXTH            W1, W25                                                ; +0xf4, 0x55ec0\nMOV             X2, SP                                                 ; +0xf8, 0x55ec4\nMOV             X3, XZR                                                ; +0xfc, 0x55ec8\nMOV             X4, XZR                                                ; +0x100, 0x55ecc\nMOV             W5, WZR                                                ; +0x104, 0x55ed0\nSTR             XZR, [SP,#0x60+var_60]                                 ; +0x108, 0x55ed4\nBL              sub_CC2D4                                              ; +0x10c, 0x55ed8\nCBNZ            W0, loc_55E10                                          ; +0x110, 0x55edc\nLDR             X8, [SP,#0x60+var_60]                                  ; +0x114, 0x55ee0\nLDP             S0, S1, [X8]                                           ; +0x118, 0x55ee4\nFMADD           S9, S0, S9, S1                                         ; +0x11c, 0x55ee8\nFMUL            S8, S0, S8                                             ; +0x120, 0x55eec\nASR             W9, W25, #0x10                                         ; +0x124, 0x55ef0\nMOV             X8, X24                                                ; +0x128, 0x55ef4\nB               loc_55E78                                              ; +0x12c, 0x55ef8\nMOV             W22, WZR                                               ; +0x130, 0x55efc\nFMOV            S8, #1.0                                               ; +0x134, 0x55f00\nFMOV            S9, WZR                                                ; +0x138, 0x55f04\nCBZ             X21, loc_55F20                                         ; +0x13c, 0x55f08\nTBNZ            W22, #0, loc_55F20                                     ; +0x140, 0x55f0c\nLDR             S0, [X21,#0x238]                                       ; +0x144, 0x55f10\nLDR             S1, [X21,#0x2A8]                                       ; +0x148, 0x55f14\nLDR             S2, [X19,#0x30]                                        ; +0x14c, 0x55f18\nBL              sub_579B4                                              ; +0x150, 0x55f1c\nLDR             S0, [X19,#0x58]                                        ; +0x154, 0x55f20\nFCMP            S0, S8                                                 ; +0x158, 0x55f24\nB.EQ            loc_55F48                                              ; +0x15c, 0x55f28\nLDR             X8, [X19]                                              ; +0x160, 0x55f2c\nSTP             S8, S9, [X19,#0x58]                                    ; +0x164, 0x55f30\nMOV             X0, X19                                                ; +0x168, 0x55f34\nLDR             X8, [X8,#0x200]                                        ; +0x16c, 0x55f38\nBLR             X8                                                     ; +0x170, 0x55f3c\nCBNZ            W0, loc_55E10                                          ; +0x174, 0x55f40\nB               loc_55F58                                              ; +0x178, 0x55f44\nLDR             S0, [X19,#0x5C]                                        ; +0x17c, 0x55f48\nFCMP            S0, S9                                                 ; +0x180, 0x55f4c\nB.NE            loc_55F2C                                              ; +0x184, 0x55f50\nTBNZ            W20, #0, loc_55F2C                                     ; +0x188, 0x55f54\nLDR             X8, [X19]                                              ; +0x18c, 0x55f58\nMOV             X0, X19                                                ; +0x190, 0x55f5c\nLDR             X8, [X8,#0x210]                                        ; +0x194, 0x55f60\nBLR             X8                                                     ; +0x198, 0x55f64\nB               loc_55E10                                              ; +0x19c, 0x55f68", "xrefs": ["sub_5704C @ 0x57130", "sub_58380 @ 0x583ac", "sub_58674 @ 0x58740", "sub_5B3B0 @ 0x5b3d4", "sub_5B6D4 @ 0x5b76c"], "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"}