|
@@ -89,7 +89,7 @@ void CPlayer::UpdatePosVel() {
|
|
|
// 0016E9FC
|
|
|
if (tStr32_44.field_8 != 3) {
|
|
|
// 0016EA02
|
|
|
- if (tStr32_44.field_8 || tStr32_44.u_2C.s_2C.sBlend_2E) {
|
|
|
+ if (tStr32_44.field_8 || tStr32_44.sBlend_2E) {
|
|
|
// loc_16EA0C
|
|
|
int r7_i = u_0.s_2_0.s_0;
|
|
|
if (u_0.s_2_0.s_0 != -1) {
|
|
@@ -98,13 +98,13 @@ void CPlayer::UpdatePosVel() {
|
|
|
// 0016EA18
|
|
|
TAnimData *r2_pAnimData =
|
|
|
&CAnimManager::s_tAnimData[tStr32_44.field_20];
|
|
|
- if (tStr32_44.u_2C.s_2C.sBlend_2E &&
|
|
|
+ if (tStr32_44.sBlend_2E &&
|
|
|
r2_pAnimData->filed_8 == 4) { // 0016EA34
|
|
|
// 0016EA38
|
|
|
// sint32 r3_si = (sint32)tStr32_44.u_2C.s_2C.uBlend_2E;
|
|
|
// r3_si=((r3_si>>26)&0x1f)+tStr32_44.u_2C.s_2C.uBlend_2E;
|
|
|
// uint r3_ui = UBFX(r3_si, 26, 5);
|
|
|
- short r3_si = tStr32_44.u_2C.s_2C.sBlend_2E;
|
|
|
+ short r3_si = tStr32_44.sBlend_2E;
|
|
|
r0_i = GM_BlendAngle(r6_pAnimData->s_64, r2_pAnimData->s_64,
|
|
|
r3_si / 32);
|
|
|
|
|
@@ -429,6 +429,7 @@ void CPlayer::Animate(int i1) {
|
|
|
// 0017039C ^_- 经过单元测试,功能正常
|
|
|
void CPlayer::ApplyRootBoneOfs(TAnimData *pAniData1, int i2) {
|
|
|
// LOGI("CPlayer::ApplyRootBoneOfs %d", i2);
|
|
|
+ LOGE("ApplyRootBoneOfs%x%x%x",this,pAniData1,i2);
|
|
|
}
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
// 00170440 ^_-
|
|
@@ -444,7 +445,120 @@ __attribute__((noinline)) TAnimData *CPlayer::GetAnimData() {
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
// 001704F4 经过单元测试,功能正常
|
|
|
void CPlayer::SetAnim(int i1) {
|
|
|
- // LOGI("CPlayer::SetAnim %p %d", this, i1);
|
|
|
+ if (CAnimManager::s_tAnimData[tStr32_44.field_10].filed_54 != nullptr) { // 00170514
|
|
|
+ // 00170516
|
|
|
+ GetRootBoneMove(&Point3D_14.point_0);
|
|
|
+ int r7_i = XMATH_Mag2D(&Point3D_14);
|
|
|
+ int r1_i = GetSprintSpeed();
|
|
|
+ if (r7_i > r1_i) { // 00170532
|
|
|
+ // 00170534
|
|
|
+ XMATH_Normalize(&Point3D_14, r1_i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ ushort r9_us;
|
|
|
+ // loc_17053C
|
|
|
+ if (tStr32_44.sBlend_2E > 4096) {
|
|
|
+ // 00170546
|
|
|
+ r9_us = GetTrueRot() - tStr32_44.s_2C;
|
|
|
+ tStr32_44.sBlend_2E = 0;
|
|
|
+ tStr32_44.field_10 = tStr32_44.field_20;
|
|
|
+ tStr32_44.field_14 = tStr32_44.field_24;
|
|
|
+ tStr32_44.s_18 = tStr32_44.s_2A;
|
|
|
+ u_0.s_2_0.s_2 = r9_us;
|
|
|
+ } else {
|
|
|
+ // loc_170572
|
|
|
+ r9_us = u_0.s_2_0.s_2;
|
|
|
+ }
|
|
|
+
|
|
|
+ int r0_i;
|
|
|
+ // loc_170578
|
|
|
+ u_0.s_2_0.s_2 = GetTrueRot();
|
|
|
+ if (field_10 >= 2) {
|
|
|
+ // 00170586
|
|
|
+ tStr32_44.field_20=tStr32_44.field_10;
|
|
|
+ tStr32_44.field_24=tStr32_44.field_14;
|
|
|
+ TAnimData *r8_pAnimData = &CAnimManager::s_tAnimData[tStr32_44.field_10];
|
|
|
+ if (r8_pAnimData->filed_8 == 4) {
|
|
|
+ // 001705AE
|
|
|
+
|
|
|
+ r0_i = ((int)(((uint)(XMATH_Mag(&Point3D_14.point_0))) * 2)) / ((short)r8_pAnimData->us_18);
|
|
|
+ r0_i *= tStr32_44.field_1C;
|
|
|
+ r0_i /= 128;
|
|
|
+ } else {
|
|
|
+ // loc_1705D8
|
|
|
+ r0_i = tStr32_44.field_1C;
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_1705DA
|
|
|
+ tStr32_44.s_28 = r0_i;
|
|
|
+
|
|
|
+ tStr32_44.sBlend_2E = 8192;
|
|
|
+ //LOGE("tStr32_44.u_2C.s_2C.sBlend_2E=%x",tStr32_44.u_2C.s_2C.sBlend_2E);
|
|
|
+ tStr32_44.s_2A = tStr32_44.s_18;
|
|
|
+ tStr32_44.s_2C = (((8192 - r9_us) + u_0.s_2_0.s_2) & 0x3FFF)-0x2000;
|
|
|
+ } else {
|
|
|
+ // loc_1705CE
|
|
|
+ tStr32_44.s_2C = 0;
|
|
|
+ tStr32_44.sBlend_2E=0;
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_170604
|
|
|
+ tStr32_44.field_10 = i1; // 0017060C
|
|
|
+ tStr32_44.field_14 = 0;
|
|
|
+
|
|
|
+ TAnimData *r5_pAnimData = &CAnimManager::s_tAnimData[i1];
|
|
|
+
|
|
|
+ tStr32_44.s_C = r5_pAnimData->filed_6e;
|
|
|
+ // 00170614
|
|
|
+ if (tStr32_44.field_8 == 4) {
|
|
|
+ // 00170624
|
|
|
+ if (us_122) {
|
|
|
+ // 0017062A
|
|
|
+ r0_i = (131072 / us_122) * 512;
|
|
|
+ } else {
|
|
|
+ // loc_170642
|
|
|
+ r0_i = 0x10000;
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_170646
|
|
|
+ tStr32_44.field_1C = (int)(r5_pAnimData->filed_10 * r0_i) >> 16;
|
|
|
+
|
|
|
+ // 00170648
|
|
|
+ if (field_10 <= 1) {
|
|
|
+ // 00170656
|
|
|
+ if (!r5_pAnimData->filed_9) {
|
|
|
+ // 0017065A
|
|
|
+ tStr32_44.field_14 = XSYS_Random(0x10000);
|
|
|
+ }
|
|
|
+ } // loc_170666
|
|
|
+
|
|
|
+ } else {
|
|
|
+ // 00170636
|
|
|
+ tStr32_44.field_1C = *(short*)&r5_pAnimData->filed_10;
|
|
|
+ if (!tStr32_44.field_8) {
|
|
|
+ // loc_170656
|
|
|
+ // 00170656
|
|
|
+ if (!r5_pAnimData->filed_9) {
|
|
|
+ // 0017065A
|
|
|
+ tStr32_44.field_14 = XSYS_Random(0x10000);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_170666
|
|
|
+ if (r5_pAnimData->us_1C) {
|
|
|
+ // 0017066A
|
|
|
+ u_0.s_2_0.s_2 = (u_0.s_2_0.s_2 - r5_pAnimData->us_1C) & 0x3FFF;
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_170674
|
|
|
+ if (r5_pAnimData->filed_54) {
|
|
|
+ // 00170678
|
|
|
+ ApplyRootBoneOfs(r5_pAnimData, -1);
|
|
|
+ }
|
|
|
+ // loc_170684
|
|
|
+ UpdateAnimCalcs();
|
|
|
}
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
// 00170694 ^_- 经过单元测试,功能正常
|
|
@@ -453,7 +567,10 @@ void CPlayer::GetRootBoneMove(TPoint *pPoint1) {
|
|
|
}
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
// 0017077C ^_- 经过单元测试,功能正常
|
|
|
-int CPlayer::GetTrueRot() { return 0; }
|
|
|
+short CPlayer::GetTrueRot() {
|
|
|
+ LOGI("CPlayer::GetRootBoneMove %p ", this);
|
|
|
+ return rand()&0x3fff;
|
|
|
+ }
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
// 00170820
|
|
|
__attribute__((noinline)) bool CPlayer::AnimBlendNeeded() { return false; }
|
|
@@ -461,6 +578,7 @@ __attribute__((noinline)) bool CPlayer::AnimBlendNeeded() { return false; }
|
|
|
// 0017082C ^_- 经过单元测试,功能正常
|
|
|
void CPlayer::UpdateAnimCalcs() {
|
|
|
// LOGI("CPlayer::UpdateAnimCalcs entry");
|
|
|
+ LOGI("CPlayer::UpdateAnimCalcs %p ", this);
|
|
|
// loc_1708C8
|
|
|
}
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
@@ -614,7 +732,7 @@ void CPlayer::UpdateLogic() {
|
|
|
if (!uc_88) return;
|
|
|
|
|
|
// 00173026
|
|
|
- if (cBall.ballPosPrev_4.dz_8 <= s_122 * 72 &&
|
|
|
+ if (cBall.ballPosPrev_4.dz_8 <= us_122 * 72 &&
|
|
|
tStr58_A0.u_50.ui_50 <= 0x28000) {
|
|
|
// 00173046
|
|
|
if (tGame.field_6C38 <= 4 && cBall.speedXY_28 > 0x14DC) {
|
|
@@ -810,7 +928,9 @@ __attribute__((noinline)) void CPlayer::GetWalkSpeed() {
|
|
|
}
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
// 001742B4 ^_^
|
|
|
-int CPlayer::GetSprintSpeed() { return 0; }
|
|
|
+int CPlayer::GetSprintSpeed() {
|
|
|
+ LOGE("this=%xCPlayer::GetRunSpeed", this);
|
|
|
+ return rand(); }
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
// 00174310 ^_^
|
|
|
int CPlayer::GetTargetRunSpeed() { return 0; }
|