【发布时间】:2019-11-27 23:08:54
【问题描述】:
我正在对 1999 年的游戏进行逆向工程,并且遇到了一个功能,该功能看起来正在检查玩家是否在触发音频源的 3d 点范围内。反编译器严重破坏了代码,但我想我理解了。
// Position Y delta
v1 = * (float * )(this + 16) - LocalPlayerZoneEntry - > y;
// Position X delta
v2 = * (float * )(this + 20) - LocalPlayerZoneEntry - > x;
// Absolute value
if (v1 < 0.0)
v1 = -v1;
// Absolute value
if (v2 < 0.0)
v2 = -v2;
// What is going on here?
if (v1 <= v2)
v1 = v1 * 0.5;
else
v2 = v2 * 0.5;
// Z position delta
v3 = * (float * )(this + 24) - LocalPlayerZoneEntry - > z;
// Absolute value
if (v3 < 0.0)
v3 = -v3;
result = v3 + v2 + v1;
// Radius
if (result > * (float * )(this + 28))
return 0.0;
return result;
有趣的是,在游戏中,触发似乎非常不一致,有时会根据我从哪一侧接近触发而偏离很多。
有人知道这是否是当时使用的常用算法吗?
注意:这些类型都是我添加的,所以它们可能不正确。我假设这是一个 bool 类型的函数。
【问题讨论】:
标签: c++ algorithm math reverse-engineering