浏览代码

FREE_AddVisualFeedback bugfix

DESKTOP-AB9OQPJ\RED-10 3 年之前
父节点
当前提交
10936662b7
共有 1 个文件被更改,包括 195 次插入4 次删除
  1. 195 4
      jni/FREE.cpp

+ 195 - 4
jni/FREE.cpp

@@ -1,5 +1,7 @@
 #include "FREE.h"
-
+#include "LOCstring.h"
+#include "CStoryHUD.h"
+#include "CStoryCore.h"
 #include "CBall.h"
 #include "CFTTPObject.h"
 #include "CFTTPPBox.h"
@@ -16,6 +18,22 @@
 #include "CBallProj.h"
 #include "XSYS.h"
 #include "SNDGAME.h"
+int s_iEVFStrings[160] = {
+    0x184B, 0x184C, 0x1858, 0, 0, 0, 0, 0, 0, 0,
+    0x1859, 0x185A, 0, 0, 0, 0, 0, 0, 0, 0, 0x1854,
+    0x1855, 0x1856, 0, 0, 0, 0, 0, 0, 0,
+    0x184F, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0x1850, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0x184E, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0x186B, 0x186C, 0, 0, 0, 0, 0, 0, 0, 0,
+    0x184D, 0x1851, 0x1852, 0x1853, 0x1857, 0x186A, 0, 0, 0, 0,
+    0x185B, 0x185C, 0x185D, 0x185E, 0x1864, 0x1869, 0, 0, 0, 0,
+    0x1860, 0x1861, 0x1862, 0x1865, 0x1866, 0, 0, 0, 0, 0,
+    0x1863, 0x1868, 0x1867, 0x185F, 0, 0, 0, 0, 0, 0,
+    0x1867, 0x1861, 0x1859, 0x185A, 0, 0, 0, 0, 0, 0,
+    0xFB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1878, 0x1879,
+    0, 0, 0, 0, 0, 0, 0, 0, 0x1876, 0x1877, 0, 0, 0, 0, 0, 0, 0, 0,
+    0x186D, 0x186E, 0x186F, 0x1870, 0x1871, 0x1873, 0x1874, 0x1875, 0x1872, 0};
 // FREE_tInfo  0x1D20
 // FREE_tGoal  0x7634
 int FREE_iTeam ;
@@ -658,11 +676,184 @@ void FREE_Render3DDecal() {}
 void FREE_RenderPreSelectedPlayer() {}
 //-------------------------------------------------------------------------------------------------
 // 001DC0E0
-void FREE_RenderProcess() {}
+void FREE_RenderProcess() {
+  MP_cMyProfile.m_TProfileData.m_CGameSettings_2b80.filed_0.filed_0=rand()%10;
+}
 //-------------------------------------------------------------------------------------------------
 // 001DC0E4
-void FREE_AddVisualFeedback(int a1, EVFEffect a2, int a3) {
-  LOGE("FREE_AddVisualFeedback%x%x%x",a1,a2,a3);
+void FREE_AddVisualFeedback(int i0, EVFEffect e1, int i2) {
+  CStoryHUD* r0_hud = CStoryCore::m_tStageManager.pStory_5cf4;
+  r0_hud->ClearVisualFeedback();
+
+  int r0_i = 0;
+  int r4_i = i2;
+  int r5_i = e1;
+  int r6_i = i0;
+  // int r7_i =0;
+  int r1_i = r6_i + r6_i * 4;
+  int* r7_pi = s_iEVFStrings + r1_i * 2;
+  // loc_1DC120
+  while (r0_i <= 9) {
+    // loc_1DC118
+    r1_i = *(r7_pi + r0_i);
+    if (r1_i == 0) {
+      break;
+    }
+    // loc_1DC120
+    r0_i++;
+  }  // loc_1DC118
+  // loc_1DC124
+  r0_i = XSYS_Random(r0_i);
+  r0_i = *(r7_pi + r0_i);
+  wchar_t* r1_pwc = LOCstring(r0_i);
+  wchar_t var_218[256];
+  xstrlcpy(var_218, r1_pwc, 256);
+  int r3_i;
+  int r7_i;
+  // 47AEA8 - 0x477E90
+  r0_i = MP_cMyProfile.m_TProfileData.m_CGameSettings_2b80.filed_0.filed_0;
+  // 001DC148
+  if (r0_i == 1) {
+    // 001DC14C
+    xstrlcat(var_218, L" ", 256);
+  } else {
+    // loc_1DC152
+    xstrlcat(var_218, L"!", 256);
+  }
+
+  /*
+    * 描述:此处分支被合并到下面的cBall变量访问的代码块中了
+    * 原始汇编:    BLX             j__Z8xstrlcatPwPKwj
+                   LDR             R0, =(cBall_ptr - 0x1DC166)
+                   ADD             R0, PC
+                   LDR             R0, [R0]
+                   LDR             R1, [R0,#(dword_356A7C - 0x356A70)]
+     * 自已汇编:   ...
+     *            LDR             R0, =(cBall_ptr - 0xA26A)
+                   MOV.W           R4, #0xFFFFFFFF
+                   ADD             R0, PC
+                   LDR             R0, [R0]
+                   LDRD.W          R3, R2, [R0,#4]
+                   LDR             R0, [R0,#(dword_27A4C - 0x27A40)]
+     */
+  // 356A7C - 0x356A70
+  // 001DC168
+  r1_i = cBall.ballPosPrev_4.dz_8;
+  if (r1_i <= 98304) {
+    // 001DC16E
+    r1_i = 98304;
+  }
+  r3_i = cBall.ballPosPrev_4.point_0.dx_0;
+  int r2_i = cBall.ballPosPrev_4.point_0.dy_4;
+  bool bC1F8 = false;
+  // 001DC174
+  if (r4_i + 1 != 0) {
+    // 001DC176
+    if (r5_i == 3) {
+      // 001DC17A
+      r1_i = tGame.CPlayer_3050[r4_i].ballPosPrev_4.dz_8;
+      r2_i = tGame.CPlayer_3050[r4_i].ballPosPrev_4.point_0.dy_4;
+      r3_i = tGame.CPlayer_3050[r4_i].ballPosPrev_4.point_0.dx_0;
+      r4_i = -1;
+      // 001DC18A
+      if (r6_i != 12) {
+        // 001DC1A2
+        r1_i = r1_i + 98304;
+      }
+      // loc_1DC1F8
+      bC1F8 = true;
+    } else {
+      // loc_1DC1B2
+      r1_i = 98304;
+      r2_i = 0;
+      r3_i = 0;
+    }
+    // loc_1DC1BA
+  } else {
+    // loc_1DC1A8
+    r4_i = -1;
+  }
+  if (bC1F8 == false) {
+    // loc_1DC1BA
+    uint r0_ui = (uint)r5_i - 1u;
+    // 001DC1BC
+    if (r0_ui >= 2) {
+      // 001DC1C0
+      if (r5_i != 3) {
+        // 001DC1C4
+        if (r5_i == 0) {
+          // 001DC1C8
+          // 4B0E34 - 0x4AB140
+          CStoryHUD* r0_hud = CStoryCore::m_tStageManager.pStory_5cf4;
+          r7_i = 0;
+          r6_i = 1;
+          int var_228 = r6_i;
+          int var_224 = r7_i;
+          int var_220 = r4_i;
+          int r12_i = -256;
+          float r5_f = 1;
+          r4_i = 100;
+          r6_i = 1602;
+          TPoint3D tp3d0;
+          tp3d0.point_0.dx_0 = r3_i;
+          tp3d0.point_0.dy_4 = r2_i;
+          tp3d0.dz_8 = r1_i;
+          TPoint3D tp3d1;
+          tp3d1.point_0.dx_0 = r7_i;
+          tp3d1.point_0.dy_4 = r7_i;
+          tp3d1.dz_8 = r6_i;
+          return r0_hud->AddVisualFeedback(var_218, 0, tp3d0, tp3d1, r4_i, r5_f, r12_i,
+                                           var_228, (EVFEffect)var_224, var_220);
+        }
+        // loc_1DC25E
+        return;
+      }
+      // F8
+    } else {
+      // loc_1DC228
+      float r6_f = 0.699999988079071;
+      r7_i = 1;
+      CStoryHUD* r0_hud = CStoryCore::m_tStageManager.pStory_5cf4;
+      int var_228 = r7_i;
+      int var_224 = r5_i;
+      int var_220 = r4_i;
+      r5_i = 60;
+      r7_i = 0;
+      r4_i = 1602;
+      int r12_i = -1;
+      TPoint3D tp3d0;
+      tp3d0.point_0.dx_0 = r3_i;
+      tp3d0.point_0.dy_4 = r2_i;
+      tp3d0.dz_8 = r1_i;
+      TPoint3D tp3d1;
+      tp3d1.point_0.dx_0 = r7_i;
+      tp3d1.point_0.dy_4 = r7_i;
+      tp3d1.dz_8 = r4_i;
+      return r0_hud->AddVisualFeedback(var_218, 0, tp3d0, tp3d1, r5_i, r6_f, r12_i, var_228,
+                                       (EVFEffect)var_224, var_220);
+    }
+  }
+  // loc_1DC1F8
+  r0_i = -801;
+  r7_i = 1;
+  r6_i = -12566464;
+  int lr_i = r0_i;
+  // lostphp.com/hexconvert该网站转换,反编译后与原汇编一致
+  float r12_f = 0.699999988079071;
+  r0_hud = CStoryCore::m_tStageManager.pStory_5cf4;
+  int var_228 = r7_i;
+  int var_224 = r5_i;
+  r7_i = 40;
+  r5_i = 0;
+  TPoint3D tp3d0;
+  tp3d0.point_0.dx_0 = r3_i;
+  tp3d0.point_0.dy_4 = r2_i;
+  tp3d0.dz_8 = r1_i;
+  TPoint3D tp3d1;
+  tp3d1.point_0.dx_0 = r5_i;
+  tp3d1.point_0.dy_4 = r5_i;
+  tp3d1.dz_8 = lr_i;
+  r0_hud->AddVisualFeedback(var_218, 0, tp3d0, tp3d1, r7_i, r12_f, r6_i, var_228, (EVFEffect)var_224, r4_i);
 }
 //-------------------------------------------------------------------------------------------------
 // 001DC290