// // sub_53590 from 0x53590 to 0x5379c (524 bytes) // // 1 xrefs: // > sub_537A4 @ 0x537c8 // // 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_53590(__int64 a1, float a2) { long double v2; // q8 __int64 v3; // x8 float v4; // s9 __int64 v5; // x10 int v6; // w9 __int64 v7; // x20 __int64 v9; // x10 float v10; // s0 float v11; // s11 float v12; // s10 float v13; // s0 float v14; // s1 float v15; // s2 __int64 v16; // x0 __int64 v17; // x9 int v18; // w8 __int64 v19; // x9 __int64 v20; // x3 __int64 v21; // x1 v3 = *(_QWORD *)(a1 + 24); v4 = 1.0; v5 = *(_QWORD *)(a1 + 40); v6 = *(_DWORD *)(v3 + 72); if ( (v6 & 2) != 0 ) a2 = 0.0; v7 = *(_QWORD *)(v3 + 112); *(float *)&v2 = a2 * (float)((float)(*(float *)(v3 + 536) * (float)((float)(1.0 - *(float *)(v3 + 240)) + (float)(*(float *)(v3 + 120) * *(float *)(v3 + 240)))) * (float)((float)(1.0 - *(float *)(v3 + 240)) + (float)(*(float *)(v3 + 164) * *(float *)(v3 + 240)))); if ( v5 ) { v9 = *(_QWORD *)(v5 + 280); if ( v9 ) *(float *)&v2 = *(float *)(v9 + 120) * *(float *)&v2; } v10 = (float)(1.0 - *(float *)(v3 + 192)) - (float)(*(float *)(v3 + 208) * (float)(1.0 - *(float *)(v3 + 192))); if ( *(_QWORD *)(a1 + 752) ) { v11 = 0.0; v12 = *(float *)(v3 + 544) * v10; if ( (*(_BYTE *)(*(_QWORD *)(a1 + 8) + 121LL) & 2) == 0 || !*(_QWORD *)(a1 + 760) ) { LABEL_19: v16 = *(_QWORD *)(a1 + 752); if ( v12 < 1.0 || v11 > 0.0 ) { sub_C7DE0(v16, 0); sub_CBD5C( *(_QWORD *)(a1 + 752), 0, fminf( *(float *)(*(_QWORD *)(a1 + 24) + 252LL) + (float)((float)((float)(1.0 - v11) * (float)(1.0 - v11)) * (float)(22050.0 - *(float *)(*(_QWORD *)(a1 + 24) + 252LL))), (float)(v12 * v12) * 22050.0)); } else { sub_C7DE0(v16, 1); } goto LABEL_23; } if ( (v6 & 0x100000) != 0 ) { v4 = *(float *)(v3 + 248); } else { v13 = *(float *)(v3 + 152); v14 = *(float *)(v3 + 160); if ( v13 > v14 ) { LABEL_16: ((void (*)(void))sub_C7DE0)(); sub_CBD5C( *(_QWORD *)(a1 + 760), 0, (float)((float)(v4 * v4) * (float)(*(float *)(*(_QWORD *)(a1 + 24) + 252LL) + -10.0)) + 10.0); LABEL_18: v11 = v4; goto LABEL_19; } v15 = *(float *)(v3 + 156); v4 = 0.0; if ( v13 <= v15 ) { LABEL_17: ((void (*)(void))sub_C7DE0)(); goto LABEL_18; } v4 = (float)(v13 - v15) / (float)(v14 - v15); } if ( v4 > 0.0 ) goto LABEL_16; goto LABEL_17; } *(float *)&v2 = v10 * *(float *)&v2; LABEL_23: v17 = *(_QWORD *)(a1 + 24); v18 = *(_DWORD *)(v17 + 72); if ( (v18 & 0x200000) != 0 ) { v20 = 1; v21 = 64; } else { v19 = *(_QWORD *)(v17 + 32); if ( v19 && (*(_BYTE *)(v19 + 72) & 0x10) != 0 ) { v21 = 0; v20 = 0; } else { v20 = 0; v21 = (unsigned __int8)((v18 & 0xC0020) == 0) << 6; } } return sub_B0C10(v7, v21, (*(_DWORD *)(a1 + 60) & 0x10000) == 0, v20, v2); }