Przeglądaj źródła

0x00170a50,CPlayer::UpdateAnimation bugfix

DESKTOP-AB9OQPJ\RED-10 3 lat temu
rodzic
commit
413fca5473
5 zmienionych plików z 287 dodań i 255 usunięć
  1. 1 1
      jni/COL.cpp
  2. 269 190
      jni/CPlayer.cpp
  3. 1 1
      jni/FREE.cpp
  4. 15 63
      jni/TAnimData.h
  5. 1 0
      obj/local/armeabi-v7a/objs/cpufeatures/archiver.list.tmp

+ 1 - 1
jni/COL.cpp

@@ -154,7 +154,7 @@ void COL_PlayerBallCollideEvent(CPlayer *pPlayer_0, int i_1, bool &b_2) {
       {
         // 00172024
         iStance_r0 = (pPlayer_0->tStr32_44.field_14 -
-                      tAnimData_r7->filed_20[0].filed_0) /
+                      tAnimData_r7->filed_20[0].us_0) /
                      pPlayer_0->tStr32_44.field_1C;  // call 002A3CC0
         if (iStance_r0 < 0) {
           iStance_r0 = -iStance_r0;  // 00172036

+ 269 - 190
jni/CPlayer.cpp

@@ -11,9 +11,10 @@
 #include "GU.h"
 #include "SNDGAME.h"
 #include "TGame.h"
+#include "TStateList.h"
 #include "XMATH.h"
 #include "XSYS.h"
-#include "TStateList.h"
+#include "TAnimData.h"
 int LOCO_SPEED_WALK_MIN = 0x321;     // 0033E988
 int LOCO_SPEED_WALK_MAX = 0x321;     // 0033E98C
 int LOCO_SPEED_WALK_AVG = 0x321;     // 0033E990
@@ -27,7 +28,7 @@ int LOCO_SPEED_SPRINT_AVG = 0x102A;  // 0033E9A8
 //-------------------------------------------------------------------------------------------------
 // 0011DE8C
 void CPlayer::SetPos(int i1, int i2) {
-  LOGE("CPlayer::SetPos%p%x%x",this,i1,i2);
+  LOGE("CPlayer::SetPos%p%x%x", this, i1, i2);
 }
 //-------------------------------------------------------------------------------------------------
 // 00125D8C
@@ -41,7 +42,7 @@ int CPlayer::GetDistanceSq(TPoint point1) { return 0; }
 //-------------------------------------------------------------------------------------------------
 // 0015CBD0
 void CPlayer::SetPos(TPoint point1) {
-  LOGE("CPlayer::SetPos%p%x%x",this,point1.dx_0,point1.dy_4);
+  LOGE("CPlayer::SetPos%p%x%x", this, point1.dx_0, point1.dy_4);
 }
 //-------------------------------------------------------------------------------------------------
 // 0016E630
@@ -80,7 +81,7 @@ void CPlayer::UpdatePosVel() {
   TAnimData *r6_pAnimData = GetAnimData();
   int r5_i;
   if ((r6_pAnimData->u_C.s_C.uc_d & 0x20) == 0 ||
-      tStr32_44.field_14 < r6_pAnimData->filed_20[0].filed_0) {
+      tStr32_44.field_14 < r6_pAnimData->filed_20[0].us_0) {
     // loc_16E9D6
     r5_i = GetRunSpeed();
   } else {
@@ -229,7 +230,7 @@ void CPlayer::SetMoveDest(TPoint point1) {
 //-------------------------------------------------------------------------------------------------
 // 0016EBFE
 void CPlayer::SetRotExplicit(int i1) {
-   LOGI("CPlayer::SetRotExplicit %p %d ", this,i1);
+  LOGI("CPlayer::SetRotExplicit %p %d ", this, i1);
 }
 //-------------------------------------------------------------------------------------------------
 // 0016EC02
@@ -251,7 +252,7 @@ __attribute__((noinline)) ushort CPlayer::GetRotPoint(TPoint point1) {
 //-------------------------------------------------------------------------------------------------
 // 0016EC34
 __attribute__((noinline)) void CPlayer::SetFace(int i1) {
-  LOGE("CPlayer::SetFace%p%x",this,i1);
+  LOGE("CPlayer::SetFace%p%x", this, i1);
 }
 //-------------------------------------------------------------------------------------------------
 // 0016EC3A
@@ -266,9 +267,7 @@ void CPlayer::SetFace(TPoint point1) {}
 void CPlayer::SetFaceDest() {}
 //-------------------------------------------------------------------------------------------------
 // 0016EC7A
-void CPlayer::Stop(int i1) {
-   LOGE("CPlayer::SetFace%p%x",this,i1);
-}
+void CPlayer::Stop(int i1) { LOGE("CPlayer::SetFace%p%x", this, i1); }
 //-------------------------------------------------------------------------------------------------
 // 0016EC8E ^_^
 int CPlayer::GetRotDest() {
@@ -324,9 +323,7 @@ void CPlayer::SetupStandard() {}
 void CPlayer::SetupOfficial() {}
 //-------------------------------------------------------------------------------------------------
 // 0016F044 经过单元测试同,功能正常
-void CPlayer::Reset() {
-   LOGI("CPlayer::Reset %p", this);
-}
+void CPlayer::Reset() { LOGI("CPlayer::Reset %p", this); }
 //-------------------------------------------------------------------------------------------------
 // 0016F114
 void CPlayer::CancelHeadInputControl() {}
@@ -344,10 +341,10 @@ TPoint3D CPlayer::GetBonePos(int i2) {
 //-------------------------------------------------------------------------------------------------
 // 0016F13C 经过单元测试,功能正常
 TPoint CPlayer::GetTimePos(int i2) {
-   LOGI("CPlayer::GetTimePos %p %d", this, i2);
+  LOGI("CPlayer::GetTimePos %p %d", this, i2);
   TPoint retPos;
-  retPos.dx_0=i2+rand();
-  retPos.dy_4=i2+rand();
+  retPos.dx_0 = i2 + rand();
+  retPos.dy_4 = i2 + rand();
   return retPos;
 }
 //-------------------------------------------------------------------------------------------------
@@ -427,7 +424,7 @@ void CPlayer::ActionUpdateDynamic() {
 void CPlayer::ActionTendSetupDest(TPoint3D point3D1) {
   TAnimData *r10_pAnimData = GetAnimData();
   int r1_i = r10_pAnimData->filed_20[s_15A].i_4;
-  ushort r0_us =r10_pAnimData->filed_20[s_15A].filed_2;
+  ushort r0_us = r10_pAnimData->filed_20[s_15A].us_2;
   r1_i = r1_i * us_122;
   aPoint3D_178[0] = point3D1;
   int r7 = (r0_us + u_0.s_2_0.s_0) & 0x3FFF;
@@ -435,15 +432,16 @@ void CPlayer::ActionTendSetupDest(TPoint3D point3D1) {
 
   int r0_i = xsin(r7) * r8_i;  // 00170178   MUL.W R0, R0, R8
   r0_i = r0_i / 2048;
-  point3D_164.point_0.dx_0 = point3D1.point_0.dx_0 - r0_i;  // 00170184   SUB.W           R0, R6, R0,ASR#11
-  int r5 = us_122 * r10_pAnimData->filed_20[s_15A].filed_8;
+  point3D_164.point_0.dx_0 =
+      point3D1.point_0.dx_0 -
+      r0_i;  // 00170184   SUB.W           R0, R6, R0,ASR#11
+  int r5 = us_122 * r10_pAnimData->filed_20[s_15A].i_8;
 
   r0_i = xcos(r7) * r8_i;  // 00170194   MUL.W           R0, R0, R8
 
   point3D_164.point_0.dy_4 = point3D1.point_0.dy_4 + (r0_i / 2048);
   point3D_164.dz_8 = (point3D1.dz_8 - (r5 / 128));
-  if(point3D_164.dz_8<0)
-    point3D_164.dz_8=0;
+  if (point3D_164.dz_8 < 0) point3D_164.dz_8 = 0;
   TPoint var_2C;
   if (r10_pAnimData->filed_54) {
     GetRootBoneOfs(&var_2C, r10_pAnimData);
@@ -464,9 +462,7 @@ TPoint3D CPlayer::ActionGetPosFromDest() {
 }
 //-------------------------------------------------------------------------------------------------
 // 001702B0 经过单元测试,功能正常
-void CPlayer::Animate(int i1) {
-  // LOGI("CPlayer::Animate %d", i1);
-}
+void CPlayer::Animate(int i1) { LOGI("CPlayer::Animate %p%d", this, i1); }
 //-------------------------------------------------------------------------------------------------
 // 0017039C ^_- 经过单元测试,功能正常
 void CPlayer::ApplyRootBoneOfs(TAnimData *pAniData1, int i2) {
@@ -526,7 +522,7 @@ void CPlayer::SetAnim(int i1) {
       // 001705AE
 
       r0_i = ((int)(((uint)(XMATH_Mag(&Point3D_14.point_0))) * 2)) /
-             ((short)r8_pAnimData->us_18);
+             ((short)r8_pAnimData->s_18);
       r0_i *= tStr32_44.field_1C;
       r0_i /= 128;
     } else {
@@ -566,7 +562,7 @@ void CPlayer::SetAnim(int i1) {
     }
 
     // loc_170646
-    tStr32_44.field_1C = (int)(r5_pAnimData->filed_10 * r0_i) >> 16;
+    tStr32_44.field_1C = (int)(r5_pAnimData->i_10 * r0_i) >> 16;
 
     // 00170648
     if (field_10 <= 1) {
@@ -579,7 +575,7 @@ void CPlayer::SetAnim(int i1) {
 
   } else {
     // 00170636
-    tStr32_44.field_1C = *(short *)&r5_pAnimData->filed_10;
+    tStr32_44.field_1C = *(short *)&r5_pAnimData->i_10;
     if (!tStr32_44.field_8) {
       // loc_170656
       // 00170656
@@ -631,7 +627,7 @@ void CPlayer::SetTrophyData(ETrophyPos e1, ushort us2, ushort us3) {}
 //-------------------------------------------------------------------------------------------------
 // 001708DE
 __attribute__((noinline)) void CPlayer::ClearBlend() {
-  LOGE("CPlayer::ClearBlend%p",this);
+  LOGE("CPlayer::ClearBlend%p", this);
 }
 //-------------------------------------------------------------------------------------------------
 // 001708E8 后面的代码好像与
@@ -667,7 +663,80 @@ bool CPlayer::SetReaction(int i1, int i2, int i3) { return true; }
 //-------------------------------------------------------------------------------------------------
 // 00170A50 经过单元测试,功能正常
 void CPlayer::UpdateAnimation() {
-  // LOGI("CPlayer::UpdateAnimation %p", this);
+  // 00170A56
+  int i_r5 = GetRunSpeed();
+  // 00170A5E
+  if (tStr32_44.field_8 == 4) {
+    // 00170A62
+    int i_r7 = this->tStr32_44.field_10;
+    int i_r0;
+    // 00170A6C
+    if (s_80 <= 256) {
+      // 00170A78
+      uint ui_r1 = this->tStr32_44.s_30 % 3;
+      i_r0 = CAnimManager::s_iStandardWalk[ui_r1];
+      TAnimData *panimdata_r0 = &CAnimManager::s_tAnimData[i_r0];
+      i_r0 = panimdata_r0->i_10;
+      i_r0 = i_r0 * 5973;
+      TAnimData *panimdata_r1 = &CAnimManager::s_tAnimData[i_r7];
+      int i_r1 = panimdata_r1->i_10;
+      // 00170B14
+      i_r0 = i_r0 / i_r1;
+    } else if (s_80 <= 768) {  // 00170AA8
+      // 00170AAE
+      uint ui_r0 = this->tStr32_44.s_30;
+      uint ui_r1 = ui_r0 % 3;
+      int i_r9 = CAnimManager::s_iStandardWalk[ui_r1];
+      // 00170AD4
+      int i_r1 = XMATH_InterpolateClamp(s_80, 0x100, 0x300, 0xC0, 0x230);
+      int i_r6 = 0x118000 / i_r1;
+      TAnimData *panimdata_r7 = &CAnimManager::s_tAnimData[i_r7];
+      i_r0 = this->s_80;
+      TAnimData *panimdata_r1 = &CAnimManager::s_tAnimData[i_r9];
+      int i_r2 = panimdata_r7->i_10 * 16;
+      int i_r3 = panimdata_r1->i_10 * 16;
+      // 00170B0A
+      i_r0 = XMATH_InterpolateClamp(i_r0, 0x100, 0x300, i_r3, i_r2);
+      i_r0 = i_r6 *i_r0/ (panimdata_r7->i_10 * 16);
+    } else if ((s_80 <= 1024) ||
+               (CAnimManager::s_tAnimData[tStr32_44.field_10].s_64 !=
+                0)) {  // loc_170B1A
+      // 00170B2E
+      i_r0 = 2048;
+    } else {
+      // 00170B50
+      uint ui_r1 = this->tStr32_44.s_30 & 3;
+      int i_r9 = CAnimManager::s_iStandardSprint[ui_r1];
+      // 00170B52
+      if (s_80 <= 3072) {
+        // 00170B68
+        int i_r6 =
+            1146880 / XMATH_InterpolateClamp(s_80, 0xC00, 0x400, 0x3C0, 0x230);
+        //int i_r0 = this->s_80;
+        TAnimData *panimdata_r1 = &CAnimManager::s_tAnimData[i_r9];
+        int i_r2 = CAnimManager::s_tAnimData[i_r7].i_10 * 16;
+        int i_r3 = panimdata_r1->i_10 * 16;
+        // 00170B0A
+        i_r0 = XMATH_InterpolateClamp(s_80, 0xC00, 0x400, i_r3, i_r2);
+        i_r0 = i_r0 * i_r6;
+        int i_r1 = CAnimManager::s_tAnimData[i_r7].i_10 * 16;
+        i_r0 = i_r0 / i_r1;
+      } else {
+        // 00170BAC
+        i_r0 = CAnimManager::s_tAnimData[i_r9].i_10;
+        i_r0 = i_r0 * 0x4AA;
+        int i_r1 = CAnimManager::s_tAnimData[i_r7].i_10;
+        i_r0 = i_r0 / i_r1;
+      }
+    }
+    // 00170B32
+    i_r0 = i_r0 * i_r5;
+    this->tStr32_44.s_18 = this->s_80;
+    i_r5 = i_r0 / 2048;
+  }
+  // 00170B44
+  // 00170B4C
+  Animate(i_r5);
 }
 //-------------------------------------------------------------------------------------------------
 // 00170BD0 ^_^
@@ -737,7 +806,7 @@ void CPlayer::SetAnimFromStateI() {
 //-------------------------------------------------------------------------------------------------
 // 00170DD4 ^_^
 void CPlayer::GetRootBoneOfs(TPoint *pPoint1, TAnimData *pAnimData2) {
-  LOGE("CPlayer::GetRootBoneOfs%p%p%p",this,pPoint1,pAnimData2);
+  LOGE("CPlayer::GetRootBoneOfs%p%p%p", this, pPoint1, pAnimData2);
 }
 //-------------------------------------------------------------------------------------------------
 // 00170E50 ^_^
@@ -776,13 +845,17 @@ void CPlayer::GetActionPoint(TPoint3D *pPoint3D1) {
 // 001715EC 经过单元测试,功能正常
 void CPlayer::GetBonePosition(int i1, TPoint3D *pPoint3D2) {
   short aShort_1E_sp12[3];
-  CAnimManager::GetBonePositionAnim(aShort_1E_sp12, tStr32_44.field_10, tStr32_44.field_14, i1, s_80, tStr32_44.s_30);
+  CAnimManager::GetBonePositionAnim(aShort_1E_sp12, tStr32_44.field_10,
+                                    tStr32_44.field_14, i1, s_80,
+                                    tStr32_44.s_30);
 
   // 00171616
   if (tStr32_44.sBlend_2E) {
     // 0017161A
     short aShort_24_spC[3];
-    CAnimManager::GetBonePositionAnim(aShort_24_spC, tStr32_44.field_20, tStr32_44.field_24, i1, tStr32_44.s_2A, tStr32_44.s_30);
+    CAnimManager::GetBonePositionAnim(aShort_24_spC, tStr32_44.field_20,
+                                      tStr32_44.field_24, i1, tStr32_44.s_2A,
+                                      tStr32_44.s_30);
 
     // 00171632
     short r0_s;
@@ -790,7 +863,8 @@ void CPlayer::GetBonePosition(int i1, TPoint3D *pPoint3D2) {
     // 0017164C
     if (CAnimManager::s_tAnimData[tStr32_44.field_10].us_1C != tStr32_44.s_2C) {
       // 00171650
-      int r0_i =  CAnimManager::s_tAnimData[tStr32_44.field_10].us_1C-tStr32_44.s_2C ;
+      int r0_i =
+          CAnimManager::s_tAnimData[tStr32_44.field_10].us_1C - tStr32_44.s_2C;
 
       int r7_i = xsin(-r0_i);
       r0_i = xcos(-r0_i);
@@ -815,8 +889,9 @@ void CPlayer::GetBonePosition(int i1, TPoint3D *pPoint3D2) {
     int r4_i = 0x2000 - tStr32_44.sBlend_2E;
     int r3_i = aShort_1E_sp12[0] * r4_i;  // 001716B0   MULS            R3, R4
 
-    int r1_i = (r1_s * tStr32_44.sBlend_2E) + r3_i;  // 001716B2   SMLABB.W        R1, R1, R2, R3
-    r3_i = r4_i * aShort_1E_sp12[2];                                  // 001716B6   MUL.W           R3, R4, R6
+    int r1_i = (r1_s * tStr32_44.sBlend_2E) +
+               r3_i;  // 001716B2   SMLABB.W        R1, R1, R2, R3
+    r3_i = r4_i * aShort_1E_sp12[2];  // 001716B6   MUL.W           R3, R4, R6
 
     // int r7_i = aShort_1E_sp12[1] * r4_i;
     int r0_i = (r0_s * tStr32_44.sBlend_2E) + (aShort_1E_sp12[1] * r4_i);
@@ -844,8 +919,10 @@ void CPlayer::GetBonePosition(int i1, TPoint3D *pPoint3D2) {
   // 0017173A
   r1_i = us_122 * aShort_1E_sp12[2];
 
-  pPoint3D2->point_0.dx_0 = ballPosPrev_4.point_0.dx_0 + ((381 * (r2_i / -32))) / 1024;
-  pPoint3D2->point_0.dy_4 = ballPosPrev_4.point_0.dy_4 + ((381 * (r0_i / 32))) / 1024;
+  pPoint3D2->point_0.dx_0 =
+      ballPosPrev_4.point_0.dx_0 + ((381 * (r2_i / -32))) / 1024;
+  pPoint3D2->point_0.dy_4 =
+      ballPosPrev_4.point_0.dy_4 + ((381 * (r0_i / 32))) / 1024;
   pPoint3D2->dz_8 = ballPosPrev_4.dz_8 + (381 * (r1_i / 32)) / 1024;
 }
 //-------------------------------------------------------------------------------------------------
@@ -877,7 +954,7 @@ bool CPlayer::Fell(TPoint point1, bool b3) { return true; }
 bool CPlayer::Fell(int i1, bool b2) {
   bool r4_bret = rand();
   // loc_172FEE
-  LOGE("CPlayer::Fell%x%x%p",i1,b2,this);
+  LOGE("CPlayer::Fell%x%x%p", i1, b2, this);
   return r4_bret;
 }
 //-------------------------------------------------------------------------------------------------
@@ -885,14 +962,13 @@ bool CPlayer::Fell(int i1, bool b2) {
 bool CPlayer::Trip(int i1, int i2) {
   bool r4_bret = rand();
   // loc_172FEE
-  LOGE("CPlayer::Trip%x%x%p",i1,i2,this);
+  LOGE("CPlayer::Trip%x%x%p", i1, i2, this);
   return r4_bret;
 }
 //-------------------------------------------------------------------------------------------------
 // 00172FF8 ^_^
 void CPlayer::UpdateLogic() {
-  if (NIS_Active())
-    return;
+  if (NIS_Active()) return;
 
   // 00173002
   UpdateJostlePoint();
@@ -901,11 +977,11 @@ void CPlayer::UpdateLogic() {
   UpdateBallReactions();
   UpdateFall();
 
-  if (!uc_88)
-    return;
+  if (!uc_88) return;
 
   // 00173026
-  if (cBall.ballPosPrev_4.dz_8 <= us_122 * 72 && tStr58_A0.u_50.ui_50 <= 0x28000) {
+  if (cBall.ballPosPrev_4.dz_8 <= us_122 * 72 &&
+      tStr58_A0.u_50.ui_50 <= 0x28000) {
     // 00173046
     if (tGame.field_6C38 <= 4 && (int)cBall.speedXY_28 > 0x14DC) {
       uc_88 = 0;
@@ -1017,9 +1093,9 @@ void CPlayer::UpdateFall() {
     SetNextState(r1_data);
   } else {
     // 001731F0
-    if (tStr32_44.field_14 >= r1_data->filed_20[0].filed_0 &&
+    if (tStr32_44.field_14 >= r1_data->filed_20[0].us_0 &&
         tStr32_44.field_14 <
-            (r1_data->filed_20[0].filed_0 + tStr32_44.field_1C)) {
+            (r1_data->filed_20[0].us_0 + tStr32_44.field_1C)) {
       tStr32_44.s_18 = 1;
     }
   }
@@ -1087,9 +1163,10 @@ __attribute__((noinline)) void CPlayer::SetConstantSpeed(bool b1) {
 }
 //-------------------------------------------------------------------------------------------------
 // 00174204 ^_^
-int CPlayer::GetAverageRunSpeed() { 
-  LOGE("GetAverageRunSpeed%p",this);
-  return rand(); }
+int CPlayer::GetAverageRunSpeed() {
+  LOGE("GetAverageRunSpeed%p", this);
+  return rand();
+}
 //-------------------------------------------------------------------------------------------------
 // 00174260 ^_^
 void CPlayer::SetAverageRunSpeed(int i1) {}
@@ -1127,7 +1204,7 @@ int CPlayer::GetRunSpeed() {
 //-------------------------------------------------------------------------------------------------
 // 001744CC
 int CPlayer::AttributeInterpolate(EPlayerAttribute eAttr1, int i2, int i3) {
-  LOGE("AttributeInterpolate%p%x%x%x",this,eAttr1,i2,i3);
+  LOGE("AttributeInterpolate%p%x%x%x", this, eAttr1, i2, i3);
   return 0;
 }
 //-------------------------------------------------------------------------------------------------
@@ -1135,9 +1212,10 @@ int CPlayer::AttributeInterpolate(EPlayerAttribute eAttr1, int i2, int i3) {
 float CPlayer::GetMoveSpeed() { return 0.1f; }
 //-------------------------------------------------------------------------------------------------
 // 001744E8 ^_^
-int CPlayer::GetInterceptMaxHeight() { 
-  LOGE("%pGetInterceptMaxHeight",this);
-  return rand(); }
+int CPlayer::GetInterceptMaxHeight() {
+  LOGE("%pGetInterceptMaxHeight", this);
+  return rand();
+}
 //-------------------------------------------------------------------------------------------------
 // 00174530 ^_^
 void CPlayer::SetUrgency(int i1) {
@@ -1167,7 +1245,7 @@ void CPlayer::SetUrgencyTime(int i1, bool b2) {
     r5_i = 1;
   }
 
-  TPoint point_28_sp8=point_34;
+  TPoint point_28_sp8 = point_34;
   // 001745A8
   int r0_i = XMATH_Distance(&point_28_sp8, &point_78);
   int r1_i = r5_i - s_32;
@@ -1198,8 +1276,7 @@ void CPlayer::SetUrgencyTime(int i1, bool b2) {
     if (r5_i > r1_i) {
       // 0017460A
       r0_i = (r6_i * r5_i) / (r5_i - r1_i);
-      if (r0_i < 4096)
-        r7_i = r0_i;
+      if (r0_i < 4096) r7_i = r0_i;
     }
   } else {
     // loc_17461E
@@ -1295,146 +1372,148 @@ __attribute__((noinline)) void CPlayer::ControlFinish(int i1, int i2, int i3) {
 }
 //-------------------------------------------------------------------------------------------------
 // 00175968
-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;
+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->s_74 == i5 &&
+          (short)p_tAnimData_r3->s_76 == i6)  // 2个条件合并
+      {
+        v24 = 0;
+        if (i5 >= 2)  // 00175A18
+        {
+          // 00175A1E
+          v24 = abs(((i_28 - p_tAnimData_r3->s_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
 __attribute__((noinline)) bool CPlayer::Turn(int i1, int i2, bool b3) {
   LOGI("CPlayer::ControlTakeBall %p %d %d %d", this, i1, i2, b3);
-  return rand()%2;
+  return rand() % 2;
 }
 //-------------------------------------------------------------------------------------------------
 // 00178AAC 经过单元测试,功能正常

+ 1 - 1
jni/FREE.cpp

@@ -477,7 +477,7 @@ void FREE_Initialise() {
     int r3_i = r4_player->us_122;
     int r7_i = 0x7454;
     TAnimData* anims = CAnimManager::s_tAnimData;
-    r1_i = anims[r5_i].filed_20[0].filed_8;
+    r1_i = anims[r5_i].filed_20[0].i_8;
     r1_i = r3_i * r1_i;
     TFreeGoal* r3_goal = FREE_tInfo.filed_0.pFREE_tGoal_1818;
     r2_i = r1_i / 128;

+ 15 - 63
jni/TAnimData.h

@@ -3,59 +3,11 @@
 
 #include "common_type.h"
 
-struct test_11 {
-  ushort us_0;
-  ushort us_2;
-  int filed_4;
-  int filed_8;
-};
-
-struct test_22 {
-  int filed_0;
-  int filed_4;
-};
-
-struct test_C {
-  int filed_0;
-  int filed_4;
-  int filed_8;
-};
-
-#pragma pack(push, 1)
-struct TAnimData_test {
-  char buf_0[0x20];
-  test_11 list_test_11_20[5];
-};
-#pragma pack(pop)
-
-#pragma pack(push, 1)
-struct TAnimData_test2 {
-  char buf_0[0x20];
-  int dd;
-  test_22 test_24[5];
-};
-#pragma pack(pop)
-
-#pragma pack(push, 1)
-struct TAnimData_test3 {
-  char buf_0[0x20];
-  short dd;
-  short list_22[5];
-};
-#pragma pack(pop)
-
-#pragma pack(push, 1)
-struct TAnimData_test4 {
-  char buf_0[0x28];
-  test_C list_test_11_28[5];
-};
-#pragma pack(pop)
-
 struct TAnimData_C {
-  ushort filed_0;
-  ushort filed_2;
+  ushort us_0;  // 00156268   STRH R0, [R4,#0x38]; 0016E9CE   LDRH            R0, [R6,#0x20]
+  ushort us_2;
   sint32 i_4;
-  int filed_8;
+  int i_8;
 };
 
 // 0x84
@@ -70,7 +22,7 @@ struct TAnimData {
 
   union {
     struct {
-      uint8 filed_c;  // 0016FB7C filed_c 此处是一个byte
+      uint8 uc_c;  // 0016FB7C filed_c 此处是一个byte
       uint8 uc_d;
       uint8 uc_e;
       uint8 uc_f;
@@ -78,9 +30,9 @@ struct TAnimData {
     int filed_C;
   } u_C;
 
-  uint filed_10;  //这个属性的类型应该有点问题
+  int i_10;
   int filed_14;
-  ushort us_18;
+  short s_18;
   ushort us_1A;
   ushort us_1C;
   ushort us_1E;
@@ -90,19 +42,19 @@ struct TAnimData {
   short* filed_58;
   ushort filed_5c;
   ushort filed_5e;
-  ushort filed_60;
+  short filed_60;
   ushort filed_62;
   short s_64;
-  ushort filed_66;
-  ushort filed_68;
-  ushort filed_6a;
+  short s_66;  // 001D3A84   LDRSH.W R0, [R0,#0x66] 由此判断是有符号的
+  short s_68;  // 00171204   LDRSH.W R0, [R8,#0x68]
+  short s_6A;
   ushort filed_6c;
   ushort filed_6e;
-  ushort filed_70;
-  ushort filed_72;
-  sint16 filed_74;
-  short s_76;//00170DB6
-  ushort filed_78;
+  short s_70;  // 00171192   LDRSH.W         R1, [R8,#0x70]
+  short s_72;  // 001711AA   LDRSH.W         R7, [R8,#0x72]
+  short s_74;  // 00175A08   LDRSH.W         R2, [R3,#0x74]
+  short s_76;
+  short s_78;  // 00171164   LDRSH.W         R3, [R8,#0x78]
   uchar filed_7a;
   uchar filed_7b;
   ushort filed_7c;

+ 1 - 0
obj/local/armeabi-v7a/objs/cpufeatures/archiver.list.tmp

@@ -0,0 +1 @@
+./obj/local/armeabi-v7a/objs/cpufeatures/cpu-features.o