// // sub_58D98 from 0x58d98 to 0x58f88 (496 bytes) // // 1 xrefs: // > @ 0x10c488 // // This function is hookable on this platform! // // Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA // Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings // __int64 __fastcall sub_58D98(__int64 *a1, int a2) { int v2; // w21 __int64 result; // x0 unsigned int v6; // w8 int v7; // w8 int v8; // w8 unsigned int v9; // w9 int v10; // w8 unsigned int v11; // w8 int v12; // w9 int v13; // w9 unsigned int v14; // w8 __int64 v15; // x10 __int64 v21; // x0 __int64 v22; // x2 __int64 v23; // x3 int v24; // w8 __int64 v25; // x9 unsigned int v26; // w10 int v27; // w8 __int64 v28; // [xsp+8h] [xbp-18h] BYREF v2 = *((_DWORD *)a1 + 128); result = (*(__int64 (__fastcall **)(__int64 *, __int64, __int64 *))(*a1 + 288))(a1, 4294967294LL, &v28); if ( (_DWORD)result ) return result; if ( (a2 & 7) != 0 ) { v6 = a1[64] & 0xFFFFFFF8; *((_DWORD *)a1 + 128) = v6; if ( (a2 & 1) != 0 ) { v7 = v6 | 1; } else if ( (a2 & 2) != 0 ) { v7 = v6 | 2; } else { if ( (a2 & 4) == 0 ) goto LABEL_11; v7 = v6 | 4; } *((_DWORD *)a1 + 128) = v7; } LABEL_11: if ( (a2 & 0x40000) != 0 ) { v8 = 0x40000; } else { if ( (a2 & 0x80000) == 0 ) goto LABEL_16; v8 = 0x80000; } *((_DWORD *)a1 + 128) = a1[64] & 0xFFF3FFFF | v8; LABEL_16: if ( (a2 & 0x100000) != 0 ) { v10 = 0x100000; LABEL_26: v9 = *((_DWORD *)a1 + 128); goto LABEL_27; } if ( (a2 & 0x200000) != 0 ) { v10 = 0x200000; goto LABEL_26; } if ( (a2 & 0x400000) != 0 ) { v10 = 0x400000; goto LABEL_26; } if ( (a2 & 0x800000) != 0 ) { v10 = 0x800000; goto LABEL_26; } v9 = *((_DWORD *)a1 + 128); if ( (a2 & 0x4000000) == 0 ) goto LABEL_28; v10 = 0x4000000; LABEL_27: v9 = v9 & 0xFB0FFFFF | v10; *((_DWORD *)a1 + 128) = v9; LABEL_28: v11 = v9 & 0xBFFFFFFF; v12 = v9 | 0x40000000; if ( (a2 & 0x40000000) != 0 ) v11 = v12; v13 = v11 & 0x7FFFFFFF; v14 = v11 | 0x80000000; if ( a2 >= 0 ) v14 = v13; *((_DWORD *)a1 + 128) = v14; if ( (a2 & 8) != 0 ) { v15 = *a1; __asm { FMOV V0.2S, #1.0 } *((_DWORD *)a1 + 48) = 0; *((_DWORD *)a1 + 41) = 1065353216; a1[15] = _D0; *((_DWORD *)a1 + 128) = v14 & 0xFFFFFFE7 | 8; result = (*(__int64 (__fastcall **)(__int64 *, __int64, _QWORD, _QWORD, _QWORD, _QWORD))(v15 + 200))( a1, a1[8], (unsigned int)*((__int16 *)a1 + 29), (unsigned int)*((__int16 *)a1 + 28), 0, 0); if ( (_DWORD)result ) return result; v21 = v28; v22 = 0; v23 = 0; } else { if ( (a2 & 0x10) == 0 ) goto LABEL_34; *((_DWORD *)a1 + 128) = v14 & 0xFFFFFFE7 | 0x10; v21 = v28; v22 = 1; v23 = 2; } result = sub_C7E34(v21, 0, v22, v23); if ( (_DWORD)result ) return result; if ( (a2 & 0x10) == 0 || (v2 & 0x10) != 0 ) { LABEL_34: if ( ((v2 ^ a2) & 0x4F00000) == 0 ) goto LABEL_43; } *((_DWORD *)a1 + 18) |= 4u; LABEL_43: v24 = *((_DWORD *)a1 + 128); v25 = *a1; v26 = v24 & 0xFEFFFFFF; v27 = v24 | 0x1000000; if ( (a2 & 0x1000000) == 0 ) v27 = v26; *((_DWORD *)a1 + 128) = v27; return (*(__int64 (__fastcall **)(__int64 *))(v25 + 520))(a1); }