Code:
// bad sp value at call has been detected, the output may be wrong!
// positive sp value has been detected, the output may be wrong!
void __fastcall CouldBeGetRegenPower(
__int64 a1,
__int64 a2,
__int64 a3,
__int64 a4,
__int64 a5,
__int64 a6,
__int64 a7,
__int64 a8,
__int64 a9,
__int64 a10,
__int64 a11,
__int64 a12,
__int64 a13,
__int64 a14,
__int64 a15,
__int64 a16,
__int64 a17,
__int64 a18,
__int64 a19,
__int64 a20,
__int64 a21,
__int64 a22,
__int64 a23,
__int64 a24,
__int64 a25,
__int64 a26,
__int64 a27,
__int64 a28,
__int64 a29,
__int64 a30,
__int64 a31,
__int64 a32,
__int64 a33,
__int64 a34,
__int64 a35,
__int64 a36,
__int64 a37,
__int64 a38,
__int64 a39,
__int64 a40,
__int64 a41,
__int64 a42,
__int64 a43,
__int64 a44,
__int64 a45,
__int64 a46,
__int64 a47,
__int64 a48,
__int64 a49,
__int64 a50,
__int64 a51,
__int64 a52,
__int64 a53,
__int64 a54,
__int64 a55,
__int64 a56,
__int64 a57,
__int64 a58,
__int64 a59,
__int64 a60,
__int64 a61,
__int64 a62,
__int64 a63)
{
__int64 v68; // rax
__int64 v69; // r8
__int64 v70; // r9
_BYTE *v71; // rdi
__int64 v72; // rdx
__int64 v73; // rcx
__int64 v74; // r8
__int64 v75; // r9
float v76; // xmm0_4
__int64 v77; // rdx
__int64 v78; // rcx
__int64 v79; // r8
__int64 v80; // r9
unsigned int v81; // eax
__int64 v82; // r8
double v83; // xmm6_8
v68 = ((__int64 (__stdcall *)(__int64))sub_141C75600)(a1);
v71 = (_BYTE *)v68;
if ( v68 && (int)sub_141D03A40(v68, 0LL, v69, v70) > 0 )
{
if ( (unsigned int)sub_141EFDBD0(v73, v72, v74, v75) < 2 )
LODWORD(v76) = sub_141D050D0((__int64)v71, 0LL, 0LL).m128_u32[0];
else
v76 = INREGENPOWER(v71, 0LL, 0);
sub_1403151E0(a1, (float)(v76 + 0.001));
v81 = sub_141EFDBD0(v78, v77, v79, v80);
LOBYTE(v82) = 1;
if ( v81 < 2 )
v83 = (float)(sub_141D050D0((__int64)v71, 0LL, v82).m128_f32[0] + 0.001);
else
v83 = (float)(INREGENPOWER(v71, 0LL, 1) + 0.001);
}
else
{
v83 = 0.0;
sub_1403151E0(a1, 0.0);
}
sub_1403151E0(a1, v83);
JUMPOUT(0x142303C2FLL);
}
thanks in advance