// // sub_52D1C from 0x52d1c to 0x52fdc (704 bytes) // // 1 xrefs: // > @ 0x10c238 // // 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_52D1C(__int64 a1, __int64 a2) { __int64 v4; // x21 __int64 result; // x0 __int64 (__fastcall *v6)(__int64, _QWORD, __int128 *, __int128 *, _QWORD, __int64); // x8 int v7; // w8 __int128 *v8; // x0 __int128 v9; // q0 __int128 v10; // q1 __int128 v11; // q2 __int128 v12; // q3 unsigned int v13; // w8 __int64 v14; // x0 __int64 v15; // x0 __int64 v16; // x0 int v17; // w21 __int64 v18; // x0 int v19; // w8 __int64 v20; // x0 __int64 v21; // x0 __int128 v22; // [xsp+0h] [xbp-B0h] BYREF __int128 v23; // [xsp+10h] [xbp-A0h] __int128 v24; // [xsp+20h] [xbp-90h] __int128 v25; // [xsp+30h] [xbp-80h] __int128 v26; // [xsp+40h] [xbp-70h] BYREF char *v27; // [xsp+50h] [xbp-60h] __int64 v28; // [xsp+58h] [xbp-58h] __int64 v29; // [xsp+60h] [xbp-50h] __int64 v30; // [xsp+70h] [xbp-40h] BYREF __int64 v31; // [xsp+78h] [xbp-38h] BYREF __int64 v32; // [xsp+80h] [xbp-30h] BYREF __int64 v33; // [xsp+88h] [xbp-28h] BYREF v32 = 0; if ( !a2 ) return 31; v4 = *(_QWORD *)(*(_QWORD *)(a1 + 24) + 104LL); result = (*(__int64 (__fastcall **)(_QWORD, _QWORD, __int64 *))(**(_QWORD **)(*(_QWORD *)(a1 + 8) + 69856LL) + 288LL))( *(_QWORD *)(*(_QWORD *)(a1 + 8) + 69856LL), 0, &v33); if ( !(_DWORD)result ) { if ( v33 == a2 ) { *(_QWORD *)(a1 + 48) = 0; return 5; } result = ((__int64 (__fastcall *)(__int64))loc_524E4)(a1); if ( !(_DWORD)result ) { *(_QWORD *)(a1 + 744) = 0; v6 = *(__int64 (__fastcall **)(__int64, _QWORD, __int128 *, __int128 *, _QWORD, __int64))(a2 + 296); if ( !v6 ) goto LABEL_33; *(_QWORD *)&v22 = 0; *((_QWORD *)&v23 + 1) = 0; *((_QWORD *)&v22 + 1) = &v31; *(_QWORD *)&v23 = (char *)&v31 + 4; v28 = 0; v27 = (char *)&v30 + 4; v31 = 0; *(_QWORD *)&v24 = 0; v30 = 0; v29 = 0; *((_QWORD *)&v26 + 1) = &v30; *(_QWORD *)&v26 = 1; *(_QWORD *)(a2 + 176) = a2; result = v6(a2 + 176, 0, &v22, &v26, 0, 1); v7 = 0; if ( (unsigned int)result <= 0xB && ((1 << result) & 0x841) != 0 ) { result = 0; *(_WORD *)(a2 + 280) = v30; v7 = 1; } if ( v7 ) { LABEL_33: if ( !*(_WORD *)(a2 + 280) ) *(_WORD *)(a2 + 280) = 1; v8 = (__int128 *)sub_BDCB4(); v9 = *v8; v10 = v8[1]; v11 = v8[2]; v12 = v8[3]; LODWORD(v26) = 0; BYTE12(v26) = 1; v22 = v9; v23 = v10; v24 = v11; v25 = v12; v13 = *(unsigned __int16 *)(a2 + 280); *(_QWORD *)&v24 = &v26; *(_QWORD *)((char *)&v26 + 4) = v13; LOWORD(v25) = v13; result = sub_77040(*(_QWORD *)(a1 + 8), &v22, 0, &v32, 1); if ( !(_DWORD)result ) { v14 = v32; *(_QWORD *)(a1 + 736) = v32; result = sub_CC7C4(v14, a1); if ( !(_DWORD)result ) { *(float *)(*(_QWORD *)(a1 + 736) + 568LL) = (float)*(int *)(*(_QWORD *)(a1 + 8) + 1744LL); v15 = *(_QWORD *)(a1 + 752); *(_DWORD *)(a1 + 104) = 0; if ( !v15 || (result = sub_53D58(v15), !(_DWORD)result) ) { v16 = *(_QWORD *)(a1 + 760); if ( !v16 || (result = sub_53D58(v16), !(_DWORD)result) ) { if ( !*(_QWORD *)(a1 + 664) || (result = sub_53D68(a1 + 112), !(_DWORD)result) ) { sub_C7404(a1 + 112); result = sub_53D88(v4); if ( !(_DWORD)result ) { if ( (*(_BYTE *)(a1 + 62) & 1) != 0 ) { LABEL_30: v18 = *(_QWORD *)(a1 + 736); *(_QWORD *)(v18 + 680) = a2 + 8; *(_DWORD *)(v18 + 704) = *(_DWORD *)(a1 + 96); *(_DWORD *)(v18 + 608) = *(_DWORD *)(a1 + 84); *(_QWORD *)(v18 + 716) = *(_QWORD *)(a1 + 88); v19 = *(_DWORD *)(a1 + 56); *(_DWORD *)(v18 + 612) = -2; *(_DWORD *)(v18 + 712) = v19; *(_DWORD *)(v18 + 196) = *(_DWORD *)(a2 + 196); *(_WORD *)(a2 + 88) = 0; *(_WORD *)(a2 + 90) = *(_DWORD *)(v18 + 648); (*(void (__fastcall **)(__int64, _QWORD, _QWORD, _QWORD))(*(_QWORD *)v18 + 40LL))(v18, 0, 0, 0); v20 = sub_53D7C(*(_QWORD *)(a1 + 736)); v21 = sub_53E14(v20); return sub_53DDC(v21); } result = sub_53DAC(); if ( !(_DWORD)result ) { v17 = 0; while ( v17 != 4 ) { result = sub_52C8C(a1, *(_QWORD *)(a1 + 768), v17++); if ( (_DWORD)result ) return result; } goto LABEL_30; } } } } } } } } } } return result; }