Bladeren bron

FREE_UpdateSuccess bugfix

DESKTOP-AB9OQPJ\RED-10 3 jaren geleden
bovenliggende
commit
1f541c892e
5 gewijzigde bestanden met toevoegingen van 92 en 10 verwijderingen
  1. 2 1
      jni/CBallProj.cpp
  2. 3 1
      jni/CStoryHUD.cpp
  3. 80 3
      jni/FREE.cpp
  4. 4 4
      jni/TFreeControl.h
  5. 3 1
      jni/XMATH.cpp

+ 2 - 1
jni/CBallProj.cpp

@@ -7,7 +7,8 @@ int CBallProj::GetTimeHeight(int) {
 }
 //-------------------------------------------------------------------------------------------------
 //00158B7C
-void CBallProj::EnsureProj(int) {
+void CBallProj::EnsureProj(int a1) {
+	LOGE("CBallProj::EnsureProj%p%x",this,a1);
 }
 //-------------------------------------------------------------------------------------------------
 //00158BB4

+ 3 - 1
jni/CStoryHUD.cpp

@@ -76,7 +76,9 @@ void CStoryHUD::RenderHUD() {}
 void CStoryHUD::SetVideoPlayingMessageBox() {}
 //-------------------------------------------------------------------------------------------------
 // 001E5A9C
-void CStoryHUD::CreateNPPhoto() {}
+void CStoryHUD::CreateNPPhoto() {
+  LOGE("CStoryHUD::CreateNPPhoto%p",this);
+}
 //-------------------------------------------------------------------------------------------------
 // 001E5CB8
 void CStoryHUD::AddVisualFeedback(wchar_t const *a1, char const *a2,

+ 80 - 3
jni/FREE.cpp

@@ -569,7 +569,84 @@ int FREE_PlayerGetUrgency(CPlayer *, int) { return 0; }
 void FREE_ProcessInProgressCore() {}
 //-------------------------------------------------------------------------------------------------
 // 001D956C
-void FREE_UpdateSuccess() {}
+void FREE_UpdateSuccess(void) {
+  // 001D956C
+  TPoint3D var_30;
+  TPoint3D var_40;
+
+  /*
+   * 描述:寄存嚣加载略有不同,VLDR,VLD1.8这两个不知道到底什么区别
+   * 原始汇编:VLDR            D16, [R2]
+   * 自己汇编:VLD1.8          {D16}, [R2]
+   */
+  TPoint3D var_50 = FREE_tInfo.filed_0.point3D_1848;
+  // 001D958E
+  if (FREE_tInfo.filed_0.field_1840 > -1) {
+    // 001D959C
+    int r1_i = FREE_tInfo.filed_0.point3D_1848.dz_8;
+    // 001D95A8
+    if (r1_i <= 0x1000) {
+      // 001D95A8
+      r1_i = 0x1000;
+    }
+    var_50.dz_8 = r1_i;
+    cBallProj.EnsureProj(FREE_tInfo.filed_0.kickTargetTime_1838 + 10);
+    int r0_i = FREE_tInfo.filed_0.kickTargetTime_1838;
+    int r7_i = 0x7FFFFFFF;
+    int r8_i = 600;
+    // r10 = var_50
+    int r5_i = r0_i - 10;
+    int r11_i;
+    // loc_1D963E
+    while (r5_i <= r0_i + 10) {
+      // loc_1D95D4
+      r0_i = cBallProj.field_E4;
+      // 47F7EC - 0x47DFB0 =183C
+      r0_i = r0_i + r5_i;
+      r0_i = r0_i % 512;
+      var_40 = cBallProj.field_E8[r0_i].point3D_0;
+      // r9 = var40
+      if (FREE_tInfo.filed_0.field_183C[0] != 0) {
+        // 001D960E
+        r0_i = XMATH_Distance(&var_40.point_0, &var_50.point_0);
+      } else {
+        // loc_1D9616
+        r0_i = XMATH_Distance3D(&var_40, &var_50);
+      }
+      // loc_1D961C
+      if (r0_i < r7_i) {
+        // 001D9620
+        r7_i = r0_i;
+        r8_i = r5_i;
+        r11_i = var_40.dz_8 - var_50.dz_8;
+        var_30 = var_40;
+      }
+      // loc_1D9636
+      // 47F7E8 - 0x47DFB0 =1838
+      r5_i++;
+      r0_i = FREE_tInfo.filed_0.kickTargetTime_1838;
+    }
+    // 001D9644
+    if (FREE_tInfo.filed_0.field_183C[0] == 0) {
+      // 001D9644
+      cBall.ballMovePrev_10.dz_8 = cBall.ballMovePrev_10.dz_8 - r11_i / r8_i;
+    }
+    // loc_1D9660
+    cBallProj.EnsureProj(r8_i + 1);
+    FREE_tInfo.filed_0.point3D_1848 = var_30;
+    FREE_tInfo.field_1884 = tGame.maybe_sound_0 + r8_i;
+    FREE_tInfo.filed_0.gamestatus_1828 = 7;
+    // 47F834 - 0x47DFB0 =1884
+
+    CStoryCore::m_tStageManager.pStory_5cf4->CreateNPPhoto();
+    // loc_1D96BC
+  } else {
+    // loc_1D96A8
+    FREE_tInfo.filed_0.gamestatus_1828 = 7;
+    CStoryCore::m_tStageManager.pStory_5cf4->CreateNPPhoto();
+  }
+  // loc_1D96BC
+}
 //-------------------------------------------------------------------------------------------------
 // 001D96E4
 int FREE_ProcessLogic() { return 0; }
@@ -1439,9 +1516,9 @@ void PhysicsTest() {
       // loc_16A30C
       if (physics_sp218.ppobject_0[r5_i]->field_9E) {
         if (physics_sp218.ppobject_0[r5_i]->field_90 != EFreePropType_3) {
-          if (FREE_tInfo.filed_0.ugamestatus_1828 <= 8) {
+          if (FREE_tInfo.filed_0.gamestatus_1828 <= 8) {
             // check
-            if ((1 << FREE_tInfo.filed_0.ugamestatus_1828) & 0x190) {
+            if ((1 << FREE_tInfo.filed_0.gamestatus_1828) & 0x190) {
               LOGE("PhysicsTest_2");
               tGame.field_6C98 = 0;
               tGame.mTLogic_6678.freeproptype_74 =

+ 4 - 4
jni/TFreeControl.h

@@ -149,16 +149,16 @@ struct TFreeInfo_0
   int field_181C;
   int field_1820;
   int field_1824;
-  uint ugamestatus_1828;                 //这个变量应该表示游戏的状态
+  uint gamestatus_1828;                 //这个变量应该表示游戏的状态
   int field_182C;
   int field_1830;
   int field_1834;
-  int field_1838;
+  int kickTargetTime_1838;
   uchar field_183C[4];
   int field_1840;
   int field_1844;
-  TPoint field_1848;
-  int field_1850;
+  TPoint3D point3D_1848;
+  //int field_1850;
   int field_1854;
   int field_1858;
   short field_185C;

+ 3 - 1
jni/XMATH.cpp

@@ -210,7 +210,9 @@ float XMATH_Squeeze(TPoint3D *, TPoint3D *, int) {
 //-------------------------------------------------------------------------------------------------
 //001f3490 ^_^ 经过单元测试,功能正常
 uint32_t XMATH_Distance3D(const TPoint3D *a1, const TPoint3D *a2) {
-  return 0;
+   LOGE("%p%p%x%x%x%x%x%x",a1,a2,a1->point_0.dx_0,a1->point_0.dy_4,a2->point_0.dx_0,a2->point_0.dy_4,a1->dz_8,a2->dz_8);
+  return rand();
+  
 }
 //-------------------------------------------------------------------------------------------------
 //001F34BA