Forráskód Böngészése

0x001d8998,FREE_SetupKickAction bugfix

DESKTOP-AB9OQPJ\RED-10 3 éve
szülő
commit
a045cb6b40
3 módosított fájl, 76 hozzáadás és 7 törlés
  1. 6 4
      jni/CAnimManager.cpp
  2. 7 2
      jni/CPlayer.cpp
  3. 63 1
      jni/FREE.cpp

+ 6 - 4
jni/CAnimManager.cpp

@@ -99,13 +99,15 @@ void CAnimManager::GetRootBoneOfs(TPoint *, int, int, int, int) {
 }
 //-------------------------------------------------------------------------------------------------
 //0015679C
-int CAnimManager::GetActionTime(int, int, int) {
-	return 0;
+int CAnimManager::GetActionTime(int a1, int a2, int a3) {
+  LOGE("GetActionTime%x%x%x",a1,a2,a3);
+	return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //001567C8
-int CAnimManager::GetActionAnim(CPlayer *, EPlayerState, TPoint3D *, int, int, int, int, int) {
-	return 0;
+int CAnimManager::GetActionAnim(CPlayer *a1, EPlayerState a2, TPoint3D *a3, int a4, int a5, int a6, int a7, int a8) {
+  LOGE(" CAnimManager::GetActionAnim%p%x%x%x%x%x%x%x",a1,a2,a3,a4,a5,a6,a7,a8);
+	return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //00156AB8 ^_^

+ 7 - 2
jni/CPlayer.cpp

@@ -38,7 +38,9 @@ uint64_t CPlayer::GetDistance(TPoint point1) { return 0; }
 int CPlayer::GetDistanceSq(TPoint point1) { return 0; }
 //-------------------------------------------------------------------------------------------------
 // 0015CBD0
-void CPlayer::SetPos(TPoint point1) {}
+void CPlayer::SetPos(TPoint point1) {
+  LOGE("CPlayer::SetPos%p%x%x",this,point1.dx_0,point1.dy_4);
+}
 //-------------------------------------------------------------------------------------------------
 // 0016E630
 void CPlayer::UpdateFE() {}
@@ -219,13 +221,16 @@ __attribute__((noinline)) void CPlayer::SetMoveDest(int i1, int i2) {
 }
 //-------------------------------------------------------------------------------------------------
 // 0016EBF2
-void CPlayer::SetMoveDest(TPoint point1) {}
+void CPlayer::SetMoveDest(TPoint point1) {
+  LOGI("CPlayer::SetPosDest %p %d %d", this, point1.dx_0, point1.dy_4);
+}
 //-------------------------------------------------------------------------------------------------
 // 0016EBFE
 void CPlayer::SetRotExplicit(int i1) {}
 //-------------------------------------------------------------------------------------------------
 // 0016EC02
 __attribute__((noinline)) void CPlayer::SetRot(int r1, bool r2) {
+  LOGI("CPlayer::SetRot %p %d %d", this, r1, r2);
   // locret_16EC0A
 }
 //-------------------------------------------------------------------------------------------------

+ 63 - 1
jni/FREE.cpp

@@ -555,7 +555,69 @@ void FREE_PlayCommentaryClearance() {}
 void FREE_PlayCommentaryInterception() {}
 //-------------------------------------------------------------------------------------------------
 // 001D8998
-void FREE_SetupKickAction(TPoint3D, int, int) {}
+void FREE_SetupKickAction(TPoint3D tPoint3D0, int i1, int i2) {
+  TPoint3D var_30_sp18 = tPoint3D0;
+  int r4_i = FREE_tInfo.filed_0.field_1834;
+  CPlayer* r5_player = tGame.allplay_14[FREE_iTeam].teamlist_0[FREE_tInfo.filed_0.field_1840];
+  int r0_i = r4_i + 1;
+  // 001D89DA
+  if (r0_i == -1) {
+    // 001D89DE
+    r0_i = CAnimManager::GetActionAnim(r5_player, EPlayerState_12, &var_30_sp18, i2, 0, 10, -1, 0);
+    r4_i = r0_i;
+    FREE_tInfo.filed_0.field_1834 = r0_i;
+  }
+  // loc_1D89FE
+  TAnimData* r7_pAnimData = &CAnimManager::s_tAnimData[r4_i];
+  int r11_i = CAnimManager::GetActionTime(r4_i, 0, 1024);
+  TPoint var_38;
+  r0_i = r7_pAnimData->s_64;
+  int r8_i = i2;
+  r4_i = r8_i;
+  int r3_i = r8_i - r0_i;
+  r5_player->GetAnimActionPoint(&var_38, r7_pAnimData, r3_i & 0x3FFFu, 0);
+  //  FREE_tInfo.field_1870 = var_30.point_0;  这句是多余的?
+  // 47F838 - 0x47DFB0 = 1888
+  // 47F828 - 0x47DFB0 = 1878
+  r0_i = var_30_sp18.point_0.dx_0;
+  int r1_i = var_30_sp18.point_0.dy_4;
+  int r2_i = var_30_sp18.dz_8;
+
+  FREE_tInfo.field_1878 = r2_i;
+  FREE_tInfo.field_1888 = r4_i;
+  r3_i = tGame.maybe_sound_0;
+  r2_i = var_38.dx_0;
+  int r5_i = var_38.dy_4;
+  r5_i = r1_i - r5_i;
+  r4_i = r0_i - r2_i;
+  // 47F82C - 0x47DFB0 = 187C
+  FREE_tInfo.field_187C = r4_i;
+  // 47F830 - 0x47DFB0 = 1880
+  FREE_tInfo.field_1880 = r5_i;
+  r0_i = i1 - r11_i;
+  // 001D8A4C
+  if (i1 != 0) {
+    // 001D8A7C
+    r3_i = r3_i + r0_i;
+  }
+  // 47F834 - 0x47DFB0 = 1884
+  FREE_tInfo.field_1884 = r3_i;
+  FREE_tInfo.field_1870 = var_38;
+  // 001D8A8A
+  if (i1 == 0) {
+    // 001D8A94
+    TPoint tPoint;
+    tPoint.dx_0 = r4_i;
+    tPoint.dy_4 = r5_i;
+    r5_player->SetPos(tPoint);
+    r5_player->SetMoveDest(tPoint);
+    r0_i = r7_pAnimData->s_64;
+    r1_i = i2;
+    r1_i = r1_i - r0_i;
+    r5_player->SetRot(r1_i & 0x3FFFu, 1);
+  }
+  // loc_1D8ABA
+}
 //-------------------------------------------------------------------------------------------------
 // 001D8AD0
 void FREE_CheckGKHandPos(CPlayer *, int) {}