Ver Fonte

0x00174550,CPlayer::SetUrgencyTime, bugfix

DESKTOP-AB9OQPJ\RED-10 há 3 anos atrás
pai
commit
225e6788f4
1 ficheiros alterados com 70 adições e 2 exclusões
  1. 70 2
      jni/CPlayer.cpp

+ 70 - 2
jni/CPlayer.cpp

@@ -1079,7 +1079,9 @@ __attribute__((noinline)) void CPlayer::SetConstantSpeed(bool b1) {
 }
 //-------------------------------------------------------------------------------------------------
 // 00174204 ^_^
-int CPlayer::GetAverageRunSpeed() { return 0; }
+int CPlayer::GetAverageRunSpeed() { 
+  LOGE("GetAverageRunSpeed%p",this);
+  return rand(); }
 //-------------------------------------------------------------------------------------------------
 // 00174260 ^_^
 void CPlayer::SetAverageRunSpeed(int i1) {}
@@ -1117,6 +1119,7 @@ int CPlayer::GetRunSpeed() {
 //-------------------------------------------------------------------------------------------------
 // 001744CC
 int CPlayer::AttributeInterpolate(EPlayerAttribute eAttr1, int i2, int i3) {
+  LOGE("AttributeInterpolate%p%x%x%x",this,eAttr1,i2,i3);
   return 0;
 }
 //-------------------------------------------------------------------------------------------------
@@ -1134,8 +1137,73 @@ void CPlayer::SetUrgency(int i1) {
 }
 //-------------------------------------------------------------------------------------------------
 // 00174550 经过单元测试,功能正常
+// 00174550 经过单元测试,功能正常
 void CPlayer::SetUrgencyTime(int i1, bool b2) {
-  // LOGI("CPlayer::SetUrgencyTime %p %d", this, i1);
+  int r5_i = i1;
+  int r8_i = LOCO_SPEED_WALK_AVG;
+  if (!bool_2F)  // 00174568
+    r8_i = LOCO_SPEED_WALK_MIN;
+
+  int r10_i = GetAverageRunSpeed();
+  int r9_i = GetSprintSpeed();
+
+  if (b2) {
+    // 00174584
+    r5_i = (r5_i * 3) / 4;
+  }
+
+  // loc_174590
+  int r7_i = 1;
+  if (r5_i <= 1) {  // 00174598
+    // 001745A4
+    r5_i = 1;
+  }
+
+  TPoint point_28_sp8=point_34;
+  // 001745A8
+  int r0_i = XMATH_Distance(&point_28_sp8, &point_78);
+  int r1_i = r5_i - s_32;
+  if (r1_i > 1) {
+    r7_i = r1_i;
+  }
+
+  int r6_i;
+  // 001745B6
+  // 001745BA
+  r0_i = r0_i / r7_i;
+  if (r0_i < r10_i) {  // 001745BA
+    // 001745BE
+    r6_i = XMATH_InterpolateClamp(r0_i, r8_i, r10_i, 0, 0x800);
+  } else {
+    // loc_1745CC
+    r6_i = XMATH_InterpolateClamp(r0_i, r10_i, r9_i, 0x800, 0x1000);
+  }
+
+  // loc_1745DA
+  // 001745DE
+  r0_i = (r6_i - s_80) / AttributeInterpolate(EPlayerAttribute_4, 0x2D, 0x44);
+  if (r0_i >= 2) {
+    // 001745FC
+    r7_i = 4096;
+    r1_i = r0_i / 2;
+    // 00174606
+    if (r5_i > r1_i) {
+      // 0017460A
+      r0_i = (r6_i * r5_i) / (r5_i - r1_i);
+      if (r0_i < 4096)
+        r7_i = r0_i;
+    }
+  } else {
+    // loc_17461E
+    r7_i = r6_i;
+  }
+
+  // loc_174620
+  r0_i = (0x493E000 + (field_11C * 4096)) / 56250;
+  if (r7_i > r0_i) {
+    r7_i = r0_i;
+  }
+  s_82 = r7_i;
 }
 //-------------------------------------------------------------------------------------------------
 // 0017464C ^_- 经过单元测试,功能正常