|
@@ -13,7 +13,7 @@
|
|
#include "TGame.h"
|
|
#include "TGame.h"
|
|
#include "XMATH.h"
|
|
#include "XMATH.h"
|
|
#include "XSYS.h"
|
|
#include "XSYS.h"
|
|
-
|
|
|
|
|
|
+#include "TStateList.h"
|
|
int LOCO_SPEED_WALK_MIN = 0x321; // 0033E988
|
|
int LOCO_SPEED_WALK_MIN = 0x321; // 0033E988
|
|
int LOCO_SPEED_WALK_MAX = 0x321; // 0033E98C
|
|
int LOCO_SPEED_WALK_MAX = 0x321; // 0033E98C
|
|
int LOCO_SPEED_WALK_AVG = 0x321; // 0033E990
|
|
int LOCO_SPEED_WALK_AVG = 0x321; // 0033E990
|
|
@@ -333,8 +333,10 @@ TPoint3D CPlayer::GetBonePos(int i2) {
|
|
//-------------------------------------------------------------------------------------------------
|
|
//-------------------------------------------------------------------------------------------------
|
|
// 0016F13C 经过单元测试,功能正常
|
|
// 0016F13C 经过单元测试,功能正常
|
|
TPoint CPlayer::GetTimePos(int i2) {
|
|
TPoint CPlayer::GetTimePos(int i2) {
|
|
- // LOGI("CPlayer::GetTimePos %p %d", this, i2);
|
|
|
|
|
|
+ LOGI("CPlayer::GetTimePos %p %d", this, i2);
|
|
TPoint retPos;
|
|
TPoint retPos;
|
|
|
|
+ retPos.dx_0=i2+rand();
|
|
|
|
+ retPos.dy_4=i2+rand();
|
|
return retPos;
|
|
return retPos;
|
|
}
|
|
}
|
|
//-------------------------------------------------------------------------------------------------
|
|
//-------------------------------------------------------------------------------------------------
|
|
@@ -1017,7 +1019,9 @@ int CPlayer::AttributeInterpolate(EPlayerAttribute eAttr1, int i2, int i3) {
|
|
float CPlayer::GetMoveSpeed() { return 0.1f; }
|
|
float CPlayer::GetMoveSpeed() { return 0.1f; }
|
|
//-------------------------------------------------------------------------------------------------
|
|
//-------------------------------------------------------------------------------------------------
|
|
// 001744E8 ^_^
|
|
// 001744E8 ^_^
|
|
-int CPlayer::GetInterceptMaxHeight() { return 0; }
|
|
|
|
|
|
+int CPlayer::GetInterceptMaxHeight() {
|
|
|
|
+ LOGE("%pGetInterceptMaxHeight",this);
|
|
|
|
+ return rand(); }
|
|
//-------------------------------------------------------------------------------------------------
|
|
//-------------------------------------------------------------------------------------------------
|
|
// 00174530 ^_^
|
|
// 00174530 ^_^
|
|
void CPlayer::SetUrgency(int i1) {
|
|
void CPlayer::SetUrgency(int i1) {
|
|
@@ -1110,11 +1114,140 @@ __attribute__((noinline)) void CPlayer::ControlFinish(int i1, int i2, int i3) {
|
|
}
|
|
}
|
|
//-------------------------------------------------------------------------------------------------
|
|
//-------------------------------------------------------------------------------------------------
|
|
// 00175968
|
|
// 00175968
|
|
-__attribute__((noinline)) void CPlayer::SetAnimTurn(
|
|
|
|
- int i1, int i2, int i3, int i4, int i5, int i6, int i7,
|
|
|
|
- TActionSetup *pActionSetup) {
|
|
|
|
- LOGI("CPlayer::ControlTakeBall %p %d %d %d %d %d %d %d %p", this, i1, i2, i3,
|
|
|
|
- i4, i5, i6, i7, pActionSetup);
|
|
|
|
|
|
+int CPlayer::SetAnimTurn(int i1, int i2, int i3, int i4, int i5, int i6, int i7, TActionSetup *pActionSetup) {
|
|
|
|
+ short i_r6; // r6
|
|
|
|
+ unsigned int i_r11; // r11
|
|
|
|
+ unsigned int v12; // r2
|
|
|
|
+ TStateList *i_r5; // r5
|
|
|
|
+ int i_r4; // r4
|
|
|
|
+ int i_r7; // r7
|
|
|
|
+ int iVal_r6; // r6
|
|
|
|
+ TAnimData *p_tAnimData_r3; // r3
|
|
|
|
+ int i_r2; // r2
|
|
|
|
+ int v24; // r2
|
|
|
|
+ short v27; // r2
|
|
|
|
+ int i_value3_r3; // r3
|
|
|
|
+ int i_value4_r1; // r1
|
|
|
|
+ int i_value2_r2; // r2
|
|
|
|
+ int i_value5_r2; // r2
|
|
|
|
+ int i_tmp_r1; // r1
|
|
|
|
+ int i_tmp1_r0; // r0
|
|
|
|
+ int result; // r0
|
|
|
|
+ int i_value1_4; // [sp+4h] [bp-4Ch]
|
|
|
|
+ int i_C; // [sp+Ch] [bp-44h]
|
|
|
|
+ short i_10; // [sp+10h] [bp-40h]
|
|
|
|
+ short i_14; // [sp+14h] [bp-3Ch]
|
|
|
|
+ short i_18; // [sp+18h] [bp-38h]
|
|
|
|
+ unsigned int i_1C; // [sp+1Ch] [bp-34h]
|
|
|
|
+ CPlayer *pThis; // [sp+20h] [bp-30h]
|
|
|
|
+ int i_24; // [sp+24h] [bp-2Ch]
|
|
|
|
+ short i_28; // [sp+28h] [bp-28h]
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //0017596C
|
|
|
|
+ i_28 = i1 + 8192 - i2;
|
|
|
|
+ i_r6 = 8192 - i2 + i3;
|
|
|
|
+ i_10 = i4 + 8192 - i2;
|
|
|
|
+ i_r11 = (i7 >> 7) & 0x200;
|
|
|
|
+ v12 = this->tStr32_44.field_8;
|
|
|
|
+ this->tStr32_44.field_8 = 5;
|
|
|
|
+ i_14 = i4 + 8192 - i3;
|
|
|
|
+ i_1C = v12;
|
|
|
|
+ i_r5 = CAnimManager::StateInfoGet(5); //call 001564D8
|
|
|
|
+ i_r4 = CAnimManager::StateInfoGetAnimCount(this->tStr32_44.field_8); //call 001564EC
|
|
|
|
+ i_24 = -1;
|
|
|
|
+ i_r7 = 0;
|
|
|
|
+ i_C = 0x7FFFFFFF;
|
|
|
|
+ i_18 = i_r6 + 0x2000;
|
|
|
|
+
|
|
|
|
+ //001759D2
|
|
|
|
+ for( int i = 0; i < i_r4 ;i++) //001759E4
|
|
|
|
+ {
|
|
|
|
+ //001759E8
|
|
|
|
+ iVal_r6 = i_r5->filed_8[i_r7++];
|
|
|
|
+ p_tAnimData_r3 = &CAnimManager::s_tAnimData[iVal_r6];
|
|
|
|
+ i_r2 = p_tAnimData_r3->u_C.filed_C;
|
|
|
|
+
|
|
|
|
+ //001759FE
|
|
|
|
+ if (i_r11 == (i_r2 & i_r11) && (i_r2 & (i_r11 ^ 0x200)) == 0) //2个条件合并
|
|
|
|
+ {
|
|
|
|
+ //00175A0C
|
|
|
|
+ if (p_tAnimData_r3->filed_74 == i5 && (short)p_tAnimData_r3->s_76 == i6) //2个条件合并
|
|
|
|
+ {
|
|
|
|
+ v24 = 0;
|
|
|
|
+ if (i5 >= 2) //00175A18
|
|
|
|
+ {
|
|
|
|
+ //00175A1E
|
|
|
|
+ v24 = abs( ((i_28 - p_tAnimData_r3->filed_70) & 16383 )- 8192); //优化后的结果,汇编并没有abs函数调用
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //00175A3C
|
|
|
|
+ if (v24 <= 2730)
|
|
|
|
+ {
|
|
|
|
+ //00175A44
|
|
|
|
+ i_value1_4 = v24 << 7;
|
|
|
|
+ v27 = (p_tAnimData_r3->us_1E + 0x2000 - p_tAnimData_r3->us_1C) & 16383;
|
|
|
|
+ i_value3_r3 = abs(((i_18 - (p_tAnimData_r3->s_64 + v27)) & 0x3FFF) - 8192); //优化后的结果,汇编并没有abs函数调用
|
|
|
|
+
|
|
|
|
+ //00175A7E
|
|
|
|
+ if (i_value3_r3 <= 2730)
|
|
|
|
+ {
|
|
|
|
+ //00175A86
|
|
|
|
+ i_value4_r1 = abs(((i_14 + p_tAnimData_r3->s_64) & 16383) - 8192); //优化后的结果,汇编并没有abs函数调用
|
|
|
|
+
|
|
|
|
+ // 00175A7E
|
|
|
|
+ if (i_value4_r1 <= 2730)
|
|
|
|
+ {
|
|
|
|
+ //00175A86
|
|
|
|
+ i_value2_r2 = abs(((i_10 + 8192 - v27) & 16383) - 8192); //优化后的结果,汇编并没有abs函数调用
|
|
|
|
+
|
|
|
|
+ //00175AA4
|
|
|
|
+ if (i_value2_r2 <= 0xAAA)
|
|
|
|
+ {
|
|
|
|
+ //00175AAA
|
|
|
|
+ i_value5_r2 = i_value1_4 + (i_value2_r2 << 7) + ((i_value3_r3 + i_value4_r1) << 7);
|
|
|
|
+ if (i_value5_r2 < i_C) {
|
|
|
|
+ //00175AE2
|
|
|
|
+ i_value5_r2 += XSYS_Random(0x200); //call 001F4F44
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //00175AF0
|
|
|
|
+ i_tmp_r1 = i_C;
|
|
|
|
+ i_tmp1_r0 = i_24;
|
|
|
|
+
|
|
|
|
+ if (i_value5_r2 < i_C) {
|
|
|
|
+ i_tmp1_r0 = iVal_r6;
|
|
|
|
+ }
|
|
|
|
+ i_24 = i_tmp1_r0;
|
|
|
|
+ if (i_value5_r2 < i_C) {
|
|
|
|
+ i_tmp_r1 = i_value5_r2;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ i_C = i_tmp_r1;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ i++; //00175A7C 原始是NEG,但是他以用负数计算,我这用正数计算,就+1即可
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //00175B06
|
|
|
|
+ if (i_24 < 0)
|
|
|
|
+ {
|
|
|
|
+ //00175B14
|
|
|
|
+ this->tStr32_44.field_8 = i_1C;
|
|
|
|
+ result = 0;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ //00175B0A
|
|
|
|
+ LOGI("CPlayer::SetAnimTurn: %p %d",this,i_24);
|
|
|
|
+ this->SetAnim(i_24); //call 001704F4
|
|
|
|
+ result = 1;
|
|
|
|
+ }
|
|
|
|
+ return result;
|
|
}
|
|
}
|
|
//-------------------------------------------------------------------------------------------------
|
|
//-------------------------------------------------------------------------------------------------
|
|
// 00175B2C
|
|
// 00175B2C
|