Kaynağa Gözat

0x0016e9bc,CPlayer::UpdatePosVel bugfix

DESKTOP-AB9OQPJ\RED-10 3 yıl önce
ebeveyn
işleme
944b5827fd

+ 7 - 0
jni/CDynamicAABBTree.cpp

@@ -1 +1,8 @@
 #include "CDynamicAABBTree.h"
+void test(){
+    CDynamicAABBTree<unsigned> test_class(5,2);
+}
+
+void XMATH_Distance() {
+  return ;
+}

+ 577 - 6
jni/CDynamicAABBTree.h

@@ -2,32 +2,603 @@
 #ifndef _CDYNAMICAABBTREE_H_
 #define _CDYNAMICAABBTREE_H_
 
-#include "common.h"
+#include "FTTPair.h"
+#include "FTTList.h"
+#include "FTTVector.h"
+#include "FTTUPtr.h"
+#include "TAABB.h"
 
 /*
 00198C88 CDynamicAABBTree<uint>::CDynamicAABBTree(uint,float)
-00198CFE CDynamicAABBTree<FTTList<TEdgeGroup>::Iterator>::CDynamicAABBTree(uint,float)
 00198E3A CDynamicAABBTree<uint>::Query(TAABB const&)
 00198E94 CDynamicAABBTree<uint>::Insert(TAABB,uint)
-0019918C CDynamicAABBTree<FTTList<TEdgeGroup>::Iterator>::Query(TAABB const&)
-00199294 CDynamicAABBTree<FTTList<TEdgeGroup>::Iterator>::Remove(TDynamicAABBNode<FTTList<TEdgeGroup>::Iterator> *)
-0019933C CDynamicAABBTree<FTTList<TEdgeGroup>::Iterator>::Insert(TAABB,FTTList<TEdgeGroup>::Iterator)
-001A4ECC CDynamicAABBTree<uint>::Query(TDynamicAABBNode<uint> *,TAABB const&,FTTVector<FTTPair<uint,TDynamicAABBNode<uint> *>> &)
+001A4ECC CDynamicAABBTree<uint>::Query(TDynamicAABBNode<uint> *,TAABB const&, FTTVector<FTTPair<uint,TDynamicAABBNode<uint> *>> &)
 001A510A CDynamicAABBTree<uint>::Balance(TDynamicAABBNode<uint> *)
 001A519E CDynamicAABBTree<uint>::RotateLeft(TDynamicAABBNode<uint> *)
 001A522C CDynamicAABBTree<uint>::RotateRightLeft(TDynamicAABBNode<uint> *)
 001A5318 CDynamicAABBTree<uint>::RotateRight(TDynamicAABBNode<uint> *)
 001A53A8 CDynamicAABBTree<uint>::RotateLeftRight(TDynamicAABBNode<uint> *)
+
+00198CFE CDynamicAABBTree<FTTList<TEdgeGroup>::Iterator>::CDynamicAABBTree(uint,float)
+0019918C CDynamicAABBTree<FTTList<TEdgeGroup>::Iterator>::Query(TAABB const&)
+00199294 CDynamicAABBTree<FTTList<TEdgeGroup>::Iterator>::Remove(TDynamicAABBNode<FTTList<TEdgeGroup>::Iterator> *)
+0019933C CDynamicAABBTree<FTTList<TEdgeGroup>::Iterator>::Insert(TAABB,FTTList<TEdgeGroup>::Iterator)
 001A549C CDynamicAABBTree<FTTList<TEdgeGroup>::Iterator>::Query(TDynamicAABBNode<FTTList<TEdgeGroup>::Iterator> *,TAABB const&,FTTVector<FTTPair<FTTList<TEdgeGroup>::Iterator,TDynamicAABBNode<FTTList<TEdgeGroup>::Iterator> *>> &)
 001A5624 CDynamicAABBTree<FTTList<TEdgeGroup>::Iterator>::Balance(TDynamicAABBNode<FTTList<TEdgeGroup>::Iterator> *)
 001A56CA CDynamicAABBTree<FTTList<TEdgeGroup>::Iterator>::RotateLeft(TDynamicAABBNode<FTTList<TEdgeGroup>::Iterator> *)
 001A576C CDynamicAABBTree<FTTList<TEdgeGroup>::Iterator>::RotateRightLeft(TDynamicAABBNode<FTTList<TEdgeGroup>::Iterator> *)
 001A5874 CDynamicAABBTree<FTTList<TEdgeGroup>::Iterator>::RotateRight(TDynamicAABBNode<FTTList<TEdgeGroup>::Iterator> *)
 001A5914 CDynamicAABBTree<FTTList<TEdgeGroup>::Iterator>::RotateLeftRight(TDynamicAABBNode<FTTList<TEdgeGroup>::Iterator> *)
+
+00000000 TDynamicAABBNode<uint> struc @ (sizeof=0x2C, mappedto_1869)
+00000000 t_0:.long ?
+00000004 aabb_8:TAABB ?
+0000001C depth_20:.byte ?
+0000001D field_21:.byte ?
+0000001E field_22:.byte ?
+0000001F field_23:.byte ?
+00000020 LeftNode_24:.long ?
+00000024 MiddleNode_28:.long ?
+00000028 RightNode_2C:.long ?
+0000002C TDynamicAABBNode<uint> ends
 */
 
+//-------------------------------------------------------------------------------------------------
+// 00198C88 CDynamicAABBTree<uint> 0x2C
+template <typename T>
+struct TDynamicAABBNode {
+  TDynamicAABBNode() {
+    LeftNode_24 = NULL;
+    MiddleNode_28 = NULL;
+    RightNode_2C = NULL;
+    depth_20 = 0;
+  }
+
+  T t_0;
+  TAABB aabb_8;
+
+  uint8 depth_20;
+  uint8 field_21;
+  uint8 field_22;
+  uint8 field_23;
+
+  TDynamicAABBNode<T>* LeftNode_24;
+  TDynamicAABBNode<T>* MiddleNode_28;
+  TDynamicAABBNode<T>* RightNode_2C;
+};
+//-------------------------------------------------------------------------------------------------
+template <typename T>
 class CDynamicAABBTree {
 public:
+  // 001a5624 001a510a ^_-
+  TDynamicAABBNode<T>* Balance(TDynamicAABBNode<T>* node1) {
+    TDynamicAABBNode<T>* node_r0 = node1->MiddleNode_28;
+    TDynamicAABBNode<T>* node_r1 = node1->RightNode_2C;
+
+    int tmp_r5 = node_r1->depth_20 - node_r0->depth_20;
+    // 1a5638
+    if (tmp_r5 != -2) {
+      // 1a563c
+      if (tmp_r5 == 2) {
+        node_r0 = node_r1->RightNode_2C;
+        node_r1 = node_r1->MiddleNode_28;
+        // 1a5642 1a564e
+        if (node_r0 && node_r1->depth_20 < node_r0->depth_20) {
+          // 1a5656
+          RotateLeft(node1);
+        } else {
+          // 1a56a6
+          RotateRightLeft(node1);
+        }
+      } else {
+        // 1a5678
+        if (node_r1) {
+          // 1a567a
+          node1->depth_20 = max(node_r1->depth_20, node_r0->depth_20) + 1;
+          memcpy(&node1->aabb_8, &node_r0->aabb_8, sizeof(TAABB));
+          node1->aabb_8.Expand(node_r1->aabb_8);
+        }
+        return node1;
+      }
+    } else {
+      // 1a565e
+      if (node_r0->RightNode_2C &&
+          node_r0->RightNode_2C->depth_20 < node_r0->MiddleNode_28->depth_20) {
+        // 1a5672
+        RotateRight(node1);
+      } else {
+        // 1a56b4
+        RotateLeftRight(node1);
+      }
+    }
+    // 1a56ba
+    if (node_0.GetObj() == node1)
+      node_0.SetObj(node1->LeftNode_24);
+
+    return node1->LeftNode_24;
+  }
+  //-----------------------------------------------------------------------------------------------
+  // 00198cfe 00198c88  ^_-
+  // 00198C88 _ZN16CDynamicAABBTreeIjEC2Ejf CDynamicAABBTree<unsigned int>::CDynamicAABBTree(unsigned int, float)
+  CDynamicAABBTree(unsigned int ui1, float f2) {
+    node_8.SetObj(nullptr);
+    field_C = f2;
+    NodeCount_10 = ui1;
+
+    TDynamicAABBNode<T>* r9_pNode = new TDynamicAABBNode<T>[ui1];
+    // node_8.Delete();
+    // FTTUPtr<TDynamicAABBNode<unsigned int> []>::operator=(TDynamicAABBNode<unsigned int>*)
+    node_8 = (TDynamicAABBNode<T>(*)[])r9_pNode;  // 00198CD4
+    node_4.SetObj(node_8.GetObj());
+
+    // 198d64
+    for (uint tmp_r0 = 0; tmp_r0 < ui1 - 1; tmp_r0++) {
+      // 198d58 loc_198CE2
+      TDynamicAABBNode<T>* pNode = (TDynamicAABBNode<T>*)node_8.GetObj();
+      pNode[tmp_r0].LeftNode_24 = &pNode[tmp_r0 + 1];
+    }
+
+    node_0.SetObj(nullptr);
+  }
+  //-----------------------------------------------------------------------------------------------
+  // 0019933c 00198e94  ^_-
+  TDynamicAABBNode<T>* Insert(TAABB aabb1, T t2) {
+    TDynamicAABBNode<T>* node_r4 = node_4.GetObj();
+    TDynamicAABBNode<T>* node_r6;
+    node_4 = node_r4->LeftNode_24;
+    node_r4->t_0 = t2;
+
+    node_r4->aabb_8 = aabb1;
+
+    node_r4->aabb_8.Inflate(field_C);
+    node_r4->depth_20 = 0;
+
+    TAABB* aabbptr_8;
+    TDynamicAABBNode<T>* node_r8 = node_0.GetObj();
+    // 199382
+    if (node_r8) {
+      // 19938a
+      TDynamicAABBNode<T>* node_sl;
+      // 199396
+      while ((node_sl = node_r8->RightNode_2C) != NULL) {
+        // 19939e
+        TDynamicAABBNode<T>* node_fp = node_r8->MiddleNode_28;
+
+        TAABB aabb_28(node_r8->aabb_8);
+        // 1993c2
+        aabb_28.Expand(node_r4->aabb_8);
+
+        aabbptr_8 = &node_r8->aabb_8;
+        // 1993cc
+        float tmp_s16 = node_r8->aabb_8.SurfaceArea();
+        // 1993d6
+        float tmp_s18 = aabb_28.SurfaceArea();
+        tmp_s16 = (tmp_s18 - tmp_s16) + (tmp_s18 - tmp_s16);
+        float tmp_s0;
+        // 1993e6
+        if (node_fp->RightNode_2C) {
+          // 1993ee
+          TAABB aabb_10(node_fp->aabb_8);
+          // 199408
+          aabb_10.Expand(node_r4->aabb_8);
+
+          // 19940e 199418
+          tmp_s0 = aabb_10.SurfaceArea() - node_fp->aabb_8.SurfaceArea();
+          // 199424
+        } else {
+          // 199426
+          TAABB aabb_10(node_fp->aabb_8);
+          // 199440
+          aabb_10.Expand(node_r4->aabb_8);
+          // 199446
+          tmp_s0 = aabb_10.SurfaceArea();
+          // 19944a
+        }
+
+        float tmp_s20 = tmp_s18 + tmp_s18;
+        tmp_s18 = tmp_s16 * tmp_s0;
+        // 19945a
+        if (node_sl->RightNode_2C) {
+          // 19945c
+          TAABB aabb_10(node_sl->aabb_8);
+          // 199476
+          aabb_10.Expand(node_r4->aabb_8);
+          // 19947c 199486
+          tmp_s0 = aabb_10.SurfaceArea() + node_sl->aabb_8.SurfaceArea();
+        } else {
+          // 199494
+          TAABB aabb_10(node_sl->aabb_8);
+          // 1994ae
+          aabb_10.Expand(node_r4->aabb_8);
+          // 1994b4
+          tmp_s0 = aabb_10.SurfaceArea();
+        }
+
+        tmp_s0 += tmp_s16;
+        // 1994bc 1994ca
+        if (tmp_s20 < tmp_s18 && tmp_s20 < tmp_s0)
+          break;
+
+        // 1994d4
+        if (tmp_s18 < tmp_s0)
+          node_r8 = node_r8->MiddleNode_28;
+        else
+          node_r8 = node_r8->RightNode_2C;
+
+        // 1994e6
+        if (!node_r8)
+          goto FuncExit;  //-> 19956c
+      }
+      // 199396
+      if (node_sl == NULL)
+        aabbptr_8 = &node_r8->aabb_8;
+
+      // 199506
+      node_r6 = node_4.GetObj();
+      node_4 = node_r6->LeftNode_24;
+
+      node_r6->LeftNode_24 = node_r8->LeftNode_24;
+      node_r6->MiddleNode_28 = node_r8;
+      node_r6->RightNode_2C = node_r4;
+
+      memcpy(&node_r6->aabb_8, aabbptr_8, sizeof(TAABB));
+      // 199530
+      node_r6->aabb_8.Expand(node_r4->aabb_8);
+      // 19953c
+      node_r6->depth_20 = max(node_r8->depth_20, node_r4->depth_20) + 1;
+
+      // 19954a
+      if (node_r8 != node_0.GetObj()) {  // 19954e
+        TDynamicAABBNode<T>* node_r0 = node_r8->LeftNode_24;
+        // 199556
+        if (node_r0->MiddleNode_28 == node_r8)
+          node_r0->MiddleNode_28 = node_r6;
+        else
+          node_r0->RightNode_2C = node_r6;
+      } else {
+        // 19955e
+        node_0 = node_r6;
+      }
+      node_r4->LeftNode_24 = node_r6;
+      node_r8->LeftNode_24 = node_r6;
+      // 19956a
+      node_r8 = node_r4;
+
+    FuncExit:
+      // 19956c
+
+      // 19957e
+      for (; node_r8->LeftNode_24;) {
+        // 199574
+        node_r8 = Balance(node_r8->LeftNode_24);
+      }
+      return node_r4;
+    } else {
+      // 1994f0
+      node_0 = node_r4;
+      node_r4->LeftNode_24 = NULL;
+      return node_r4;
+    }
+  }
+  //-----------------------------------------------------------------------------------------------
+  // 0019918c 00198e3a  ^_-
+  // 00198E3A _ZN16CDynamicAABBTreeIjE5QueryERK5TAABB
+  FTTVector<FTTPair<T, TDynamicAABBNode<T>*>> Query(TAABB const& aabb1) {
+    FTTVector<FTTPair<T, TDynamicAABBNode<T>*>> vector;
+    // 1991a4 1991aa 1991ae
+    if (node_0.GetObj() != nullptr && TAABB::Overlap(node_0.GetObj()->aabb_8, aabb1)) {
+      Query(node_0.GetObj(), aabb1, vector);
+    }
+
+    return vector;
+  }
+  //-----------------------------------------------------------------------------------------------
+  // 001a549c 001a4ecc  ^_-
+  void Query(TDynamicAABBNode<T>* node1, const TAABB& aabb2, FTTVector<FTTPair<T, TDynamicAABBNode<T>*>>& vector3) {
+    // 1a54aa
+    if (node1->RightNode_2C) {
+      // 1a54b2
+      bool tmp_r7 = TAABB::Overlap(node1->MiddleNode_28->aabb_8, aabb2);
+      // 1a54be
+      bool tmp_r4 = TAABB::Overlap(node1->RightNode_2C->aabb_8, aabb2);
+      // 1a54c4
+      if (tmp_r7) {
+        // 1a54ce
+        Query(node1->MiddleNode_28, aabb2, vector3);
+      }
+      // 1a54d2
+      if (tmp_r4) {
+        // 1a54e2
+        Query(node1->RightNode_2C, aabb2, vector3);
+      }
+    } else {  // 1a54e6
+      FTTPair<T, TDynamicAABBNode<T>*> pair_0(T(node1->t_0), node1);
+
+      vector3.Insert((FTTPair<T, TDynamicAABBNode<T>*> &&) pair_0);
+    }
+  }
+  //-----------------------------------------------------------------------------------------------
+  // 00199294  ^_-
+  void Remove(TDynamicAABBNode<T>* node1) {
+    TDynamicAABBNode<T>* node_r0 = node_0.GetObj();
+    TDynamicAABBNode<T>* node_r1;
+    TDynamicAABBNode<T>* node_r2;
+
+    // 19929c
+    if (node_r0 != node1) {  // 1992a0
+      // 1992a2
+      if (node1->LeftNode_24 != node_0.GetObj()) {
+        // 1992a6
+        node_r2 = node1->LeftNode_24;
+
+        node_r1 = node_r2->LeftNode_24;
+        node_r0 = node_r2->MiddleNode_28;
+        // 1992aa
+        if (node_r0 == node1)
+          node_r0 = node_r2->RightNode_2C;
+
+        // 1992b6
+        if (node_r1->MiddleNode_28 != node_r2)
+          node_r1->RightNode_2C = node_r0;
+        else
+          node_r1->MiddleNode_28 = node_r0;
+
+        node_r0->LeftNode_24 = node_r1;
+        node_r2->LeftNode_24 = node_4.GetObj();
+        node_4.SetObj(node_r2);
+        for (; node_r1;) {
+          // 1992ce
+          node_r1 = Balance(node_0.GetObj())->LeftNode_24;
+        }
+      } else {
+        // 1992e2
+        node_r1 = node_r0->MiddleNode_28;
+
+        // 1992e6
+        if (node_r1 == node1)
+          node_r1 = node_r0->RightNode_2C;
+        node_0 = node_r1;
+
+        node_r1->LeftNode_24 = NULL;
+
+        node_r0->LeftNode_24 = node_4.GetObj();
+        node_4.SetObj(node_r0);
+      }
+    } else {
+      // 1992dc
+      node_0.SetObj(NULL);
+    }
+
+    node1->LeftNode_24 = node_4.GetObj();
+    node_4.SetObj(node1);
+    return;
+  }
+  //-----------------------------------------------------------------------------------------------
+  // 001a56ca 001a519e  ^_-
+  void RotateLeft(TDynamicAABBNode<T>* node1) {
+    TDynamicAABBNode<T>* node_r4 = node1->RightNode_2C;
+    TDynamicAABBNode<T>* node_r0 = node1->LeftNode_24;
+    TDynamicAABBNode<T>* node_r2 = node_r4->MiddleNode_28;
+
+    node1->LeftNode_24 = node_r4;
+    node1->RightNode_2C = node_r2;
+    // 1a56d4
+    if (node_r2)
+      node_r2->LeftNode_24 = node1;
+
+    node_r4->LeftNode_24 = node_r0;
+    node_r4->MiddleNode_28 = node1;
+    // 1a56dc
+    if (node_r0) {
+      // 1a56e6 1a56e8
+      if (node_r0->MiddleNode_28 && node_r0->MiddleNode_28 == node1)
+        node_r0->MiddleNode_28 = node_r4;
+
+      // 1a56f0 1a56f2
+      if (node_r0->RightNode_2C && node_r0->RightNode_2C == node1)
+        node_r0->RightNode_2C = node_r4;
+    }
+
+    node_r0 = node1->MiddleNode_28;
+    TDynamicAABBNode<T>* node_ip = node1->RightNode_2C;
+
+    // 1a5704
+    node1->depth_20 = max(node_r0->depth_20, node_ip->depth_20) + 1;
+    memcpy(&node1->aabb_8, &node_r0->aabb_8, sizeof(TAABB));
+    // 1a572c
+    node1->aabb_8.Expand(node_ip->aabb_8);
+
+    node_r0 = node_r4->MiddleNode_28;
+    TDynamicAABBNode<T>* node_r1 = node_r4->RightNode_2C;
+    // 1a573e
+    node_r4->depth_20 = max(node_r0->depth_20, node_r1->depth_20) + 1;
+    memcpy(&node_r4->aabb_8, &node_r0->aabb_8, sizeof(TAABB));
+    // 1a5766
+    node_r4->aabb_8.Expand(node_r1->aabb_8);
+  }
+  //-----------------------------------------------------------------------------------------------
+  // 001a5914 001a53a8  ^_-
+  void RotateLeftRight(TDynamicAABBNode<T>* node1) {
+    TDynamicAABBNode<T>* node_ip = node1->LeftNode_24;
+    TDynamicAABBNode<T>* node_r1 = node1->MiddleNode_28;
+    TDynamicAABBNode<T>* node_lr = node1->RightNode_2C;
+
+    TDynamicAABBNode<T>* node_r2 = node_r1->MiddleNode_28;
+    TDynamicAABBNode<T>* node_r5 = node_r1->RightNode_2C;
+
+    TDynamicAABBNode<T>* node_r0 = node_r5->MiddleNode_28;
+    TDynamicAABBNode<T>* node_r3 = node_r5->RightNode_2C;
+
+    node_r1->RightNode_2C = node_r0;
+    node_r1->LeftNode_24 = node_r5;
+
+    node_r5->LeftNode_24 = node_ip;
+    node_r5->MiddleNode_28 = node_r1;
+    node_r5->RightNode_2C = node1;
+    node1->LeftNode_24 = node_r5;
+    node1->MiddleNode_28 = node_r3;
+    node1->RightNode_2C = node_lr;
+    // 1a5928
+    if (node_r2)
+      node_r2->LeftNode_24 = node_r1;
+    // 1a5940
+    if (node_r0)
+      node_r0->LeftNode_24 = node_r1;
+    // 1a5944
+    if (node_r3)
+      node_r3->LeftNode_24 = node1;
+    // 1a5948
+    if (node_lr)
+      node_lr->LeftNode_24 = node1;
+    // 1a5952
+    if (node_ip) {
+      // 1a595c 1a595e
+      if (node_ip->MiddleNode_28 && node_ip->MiddleNode_28 == node1)
+        node_ip->MiddleNode_28 = node_r5;
+      // 1a596a 1a596c
+      if (node_ip->RightNode_2C && node_ip->RightNode_2C == node1)
+        node_ip->RightNode_2C = node_r5;
+    }
+
+    node_r0 = node_r1->MiddleNode_28;
+    node_ip = node_r1->RightNode_2C;
+    node_r1->depth_20 = max(node_ip->depth_20, node_r0->depth_20) + 1;
+
+    memcpy(&node_r1->aabb_8, &node_r0->aabb_8, sizeof(TAABB));
+    // 1a59ae
+    node_r1->aabb_8.Expand(node_ip->aabb_8);
+
+    node_r0 = node1->MiddleNode_28;
+    node_r1 = node1->RightNode_2C;
+    node1->depth_20 = max(node_r0->depth_20, node_r1->depth_20) + 1;
+    memcpy(&node1->aabb_8, &node_r0->aabb_8, sizeof(TAABB));
+    // 1a59e2
+    node1->aabb_8.Expand(node_r1->aabb_8);
+
+    node_r0 = node_r5->MiddleNode_28;
+    node_r1 = node_r5->RightNode_2C;
+    node_r5->depth_20 = max(node_r0->depth_20, node_r1->depth_20) + 1;
+    memcpy(&node_r5->aabb_8, &node_r0->aabb_8, sizeof(TAABB));
+    // 1a5a1c
+    node_r5->aabb_8.Expand(node_r1->aabb_8);
+  }
+  //-----------------------------------------------------------------------------------------------
+  // 001a5874 001a5318  ^_-
+  void RotateRight(TDynamicAABBNode<T>* node1) {
+    TDynamicAABBNode<T>* node_r0 = node1->LeftNode_24;
+    TDynamicAABBNode<T>* node_r4 = node1->MiddleNode_28;
+    TDynamicAABBNode<T>* node_r2 = node_r4->RightNode_2C;
+
+    node1->LeftNode_24 = node_r4;
+    node1->MiddleNode_28 = node_r2;
+    // 1a587c
+    if (node_r2)
+      node_r2->LeftNode_24 = node1;
+
+    node_r4->RightNode_2C = node1;
+    node_r4->LeftNode_24 = node_r0;
+    // 1a5886
+    if (node_r0) {
+      // 1a5890 1a5892
+      if (node_r0->MiddleNode_28 && node_r0->MiddleNode_28 == node1)
+        node_r0->MiddleNode_28 = node_r4;
+      // 1a589a 1a589c
+      if (node_r0->RightNode_2C && node_r0->RightNode_2C == node1)
+        node_r0->RightNode_2C = node_r4;
+    }
+
+    node_r0 = node1->MiddleNode_28;
+    TDynamicAABBNode<T>* node_ip = node1->RightNode_2C;
+    node1->depth_20 = max(node_ip->depth_20, node_r0->depth_20) + 1;
+    memcpy(&node1->aabb_8, &node_r0->aabb_8, sizeof(TAABB));
+    // 1a58d6
+    node1->aabb_8.Expand(node_ip->aabb_8);
+
+    node_r0 = node_r4->MiddleNode_28;
+    TDynamicAABBNode<T>* node_r1 = node_r4->RightNode_2C;
+    node_r4->depth_20 = max(node_r0->depth_20, node_r1->depth_20) + 1;
+    memcpy(&node_r4->aabb_8, &node_r0->aabb_8, sizeof(TAABB));
+    // 1a5910
+    node_r1->aabb_8.Expand(node_r1->aabb_8);
+  }
+  //-----------------------------------------------------------------------------------------------
+  // 001a576c 001a522c  ^_-
+  void RotateRightLeft(TDynamicAABBNode<T>* node1) {
+    TDynamicAABBNode<T>* node_ip = node1->LeftNode_24;
+    TDynamicAABBNode<T>* node_lr = node1->MiddleNode_28;
+    TDynamicAABBNode<T>* node_r5 = node1->RightNode_2C;
+
+    TDynamicAABBNode<T>* node_r4 = node_r5->MiddleNode_28;
+    TDynamicAABBNode<T>* node_r2 = node_r5->RightNode_2C;
+
+    TDynamicAABBNode<T>* node_r0 = node_r4->MiddleNode_28;
+    TDynamicAABBNode<T>* node_r3 = node_r4->RightNode_2C;
+
+    node1->RightNode_2C = node_r0;
+    node1->LeftNode_24 = node_r4;
+
+    node_r4->LeftNode_24 = node_ip;
+    node_r4->MiddleNode_28 = node1;
+    node_r4->RightNode_2C = node_r5;
+
+    node_r5->LeftNode_24 = node_r4;
+    node_r5->MiddleNode_28 = node_r3;
+    node_r5->RightNode_2C = node_r2;
+    // 1a5772
+    if (node_lr)
+      node_lr->LeftNode_24 = node1;
+
+    // 1a5796
+    if (node_r0)
+      node_r0->LeftNode_24 = node1;
+
+    // 1a579a
+    if (node_r3)
+      node_r3->LeftNode_24 = node_r5;
+
+    // 1a579e
+    if (node_r2)
+      node_r2->LeftNode_24 = node_r5;
+
+    // 1a57a2
+    if (node_ip) {
+      // 1a57ac 1a57ae
+      if (node_ip->MiddleNode_28 && node_ip->MiddleNode_28 == node1)
+        node_ip->MiddleNode_28 = node_r4;
+
+      // 1a57ba 1a57bc
+      if (node_ip->RightNode_2C && node_ip->RightNode_2C == node1)
+        node_ip->RightNode_2C = node_r4;
+    }
+
+    node_r0 = node1->MiddleNode_28;
+    node_ip = node1->RightNode_2C;
+    node1->depth_20 = max(node_r0->depth_20, node_ip->depth_20) + 1;
+    memcpy(&node1->aabb_8, &node_r0->aabb_8, sizeof(TAABB));
+    // 1a57fe
+    node1->aabb_8.Expand(node_ip->aabb_8);
+
+    node_r0 = node_r5->MiddleNode_28;
+    TDynamicAABBNode<T>* node_r1 = node_r5->RightNode_2C;
+    node_r5->depth_20 = max(node_r0->depth_20, node_r1->depth_20) + 1;
+    memcpy(&node_r5->aabb_8, &node_r0->aabb_8, sizeof(TAABB));
+    // 1a5832
+    node_r5->aabb_8.Expand(node_r1->aabb_8);
+
+    node_r0 = node_r4->MiddleNode_28;
+    node_r1 = node_r4->RightNode_2C;
+    node_r4->depth_20 = max(node_r0->depth_20, node_r1->depth_20) + 1;
+    memcpy(&node_r4->aabb_8, &node_r0->aabb_8, sizeof(TAABB));
+    // 1a586c
+    node_r4->aabb_8.Expand(node_r1->aabb_8);
+  }
+  //-----------------------------------------------------------------------------------------------
+  FTTUPtr<TDynamicAABBNode<T>> node_0;
+  FTTUPtr<TDynamicAABBNode<T>[]> node_4;
+  FTTUPtr<TDynamicAABBNode<T>[]> node_8;
+
+  float field_C;
+  unsigned int NodeCount_10;
 };
 
 #endif  //_CDYNAMICAABBTREE_H_

+ 1 - 0
jni/CFTTMusicPlayer.cpp

@@ -7,6 +7,7 @@ CFTTMusicPlayer::CFTTMusicPlayer() {
 //---------------------------------------------------------------------------------------
 //001FAE8E
 CFTTMusicPlayer::~CFTTMusicPlayer() {
+	
 }
 //---------------------------------------------------------------------------------------
 //001FADE8

+ 35 - 35
jni/CGfxCrowd.cpp

@@ -560,10 +560,10 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
       // loc_19CE38
       // 0019CE48 这里的符号不对 可能会造成内存泄漏 
       // FTTUPtr<TCrowdMember []>::operator=(TCrowdMember*)
-      LOGE("tPtrTextureData_D0.pType_0->pmembers_34=%x",tPtrTextureData_D0.pType_0->pmembers_34.pType_0);
-      //TCrowdMember* r5_pmem = new TCrowdMember [0x20];
+      LOGE("tPtrTextureData_D0.pType_0->pmembers_34=%x",((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0));
+      TCrowdMember* r5_pmem = new TCrowdMember [0x20];
       //FTTUPtr<TCrowdMember[0x20]> r5_pmem(new TCrowdMember [0x20]);
-      tPtrTextureData_D0.pType_0->pmembers_34= new TCrowdMember [0x20];
+      tPtrTextureData_D0.pType_0->pmembers_34= r5_pmem;
       CPlayerShader::s_tInstance.SetCinematic(EPlayerShader_Cinematic_1);
       CFTTVector32x4 vector32x4_sp120;
       vector32x4_sp120.my[0] = 1.0f;
@@ -585,12 +585,12 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
       for (int r4_i = 0; r4_i != 0x20; r4_i++) {
         // loc_19CE9E
         float s0_f = XSYS_RandomNoSyncF(0.0799999982f);
-        tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r4_i]
+        ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r4_i]
             .m_cVec32_ADC.float_4 = 0;
-        tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r4_i]
+        ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r4_i]
             .m_cVec32_ADC.float_8 = 0;
 
-        tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r4_i]
+        ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r4_i]
             .m_cVec32_ADC.float_0 =
             (-6.975f + r4_i * 0.449999988f) + (s0_f - 0.0399999991f);
       }
@@ -625,31 +625,31 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
       for (uint r6_u = 0; r6_u != 0x20; r6_u++) {
         // loc_19D002
         if (r6_u <= 5) {  // 0019D00C
-          tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r6_u].Setup(
+          ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r6_u].Setup(
               r4_member_type, r6_u);
         } else {
           // loc_19D012
-          tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r6_u].Setup(
+          ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r6_u].Setup(
               ECrowdMemberType_2, r6_u - 6);
         }
         // loc_19D018
       }
      
       // 0019D026
-      FTTALG::Shuffle(tPtrTextureData_D0.pType_0->pmembers_34.pType_0,
-                      &tPtrTextureData_D0.pType_0->pmembers_34.pType_0[0x20]);
+      FTTALG::Shuffle(((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0),
+                      &((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[0x20]);
      
       // 0019D032
       // loc_19D084
       for (int r4_i = 0; r4_i != 0x20; r4_i++) {
         // loc_19D04C
         float s0_f = XSYS_RandomNoSyncF(0.0399999991f);
-        tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r4_i]
+        ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r4_i]
             .m_cVec32_ADC.float_4 = 0;
-        tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r4_i]
+        ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r4_i]
             .m_cVec32_ADC.float_8 = 0;
 
-        tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r4_i]
+        ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r4_i]
             .m_cVec32_ADC.float_0 =
             (-6.975f + r4_i * 0.449999988f) + (s0_f - 0.0199999996f);
       }
@@ -663,7 +663,7 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
         // loc_19D0A2
         // sp44=r2_i
         // sp48=r1
-        int r1_i = (int)tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r2_i]
+        int r1_i = (int)((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r2_i]
                        .m_eCrowdMemberType_0 *
                    5;
         const uchar *r4_pb = &byte_2FEFF4[r1_i];
@@ -673,7 +673,7 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
         int r5_i = XSYS_RandomNoSync(r4_pb[2]);
         int r0_i = XSYS_RandomNoSync(r4_pb[3]);
         const uchar *r6_pb =
-            &byte_2FF003[tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r2_i]
+            &byte_2FF003[((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r2_i]
                              .m_eCrowdMemberType_0 *
                          60];
         //
@@ -819,14 +819,14 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
           TSATAnim_TSX *r3_panim = GetLegAnim(
               tPtrTextureData_D0.pType_0->field_10c[r10_i][r4_i].b_0);
           CFTTMatrix32 matrix_sp78 =
-              tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r10_i].Animate(
+              ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r10_i].Animate(
                   r9_panim, r3_panim,
                   tPtrTextureData_D0.pType_0->field_10c[r10_i][r4_i].us_2);
           // 0019D3EE
         
           MatrixMultiply(&matrix_sp78, &matrix32_spd0, &CFTTCamera::s_matView);
          
-          tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r10_i].Render(
+          ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r10_i].Render(
               &matrix_sp78);
         
         }
@@ -980,11 +980,11 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
         float s0_f = XSYS_RandomNoSyncF(0.0799999982f);
         float s2_f = (float)r4_i - 1.5f;
         s0_f -= 0.0399999991f;
-        tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r4_i]
+        ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r4_i]
             .m_cVec32_ADC.float_8 = 0;
-        tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r4_i]
+        ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r4_i]
             .m_cVec32_ADC.float_4 = 0;
-        tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r4_i]
+        ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r4_i]
             .m_cVec32_ADC.float_0 = s2_f + s0_f;
       }
       // 0019D7AE
@@ -1007,13 +1007,13 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
       for (int r4_i = 0; r4_i != 4; r4_i++) {
         // loc_19D836
         // check 寻址
-        tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r4_i].Setup(
+        ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r4_i].Setup(
             ECrowdMemberType_2, 0xff);
       }
 
       // 0019D84E
-      FTTALG::Shuffle(tPtrTextureData_D0.pType_0->pmembers_34.pType_0,
-                      &tPtrTextureData_D0.pType_0->pmembers_34.pType_0[4]);
+      FTTALG::Shuffle(((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0),
+                      &((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[4]);
       // loc_19D870
       for (int r5_i = 0; r5_i != 4; r5_i++) {
         uchar r0_b = XSYS_RandomNoSync(3);
@@ -1141,11 +1141,11 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
               GetLegAnim(tPtrTextureData_D0.pType_0->data_90c[r10_i][r5_i].b_0);
          
           CFTTMatrix32 mat32_sp120 =
-              tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r10_i].Animate(
+              ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r10_i].Animate(
                   r5_panim, r3_plegAnim,
                   tPtrTextureData_D0.pType_0->data_90c[r10_i][r5_i].us_2);
           
-          tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r10_i].Render(NULL);
+          ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r10_i].Render(NULL);
        
         }
         // 0019DB18
@@ -1309,18 +1309,18 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
               // loc_19DD22
               if (r5_uc <= 4) {
                 // 0019DD26
-                tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r5_uc].Setup(
+                ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r5_uc].Setup(
                     ECrowdMemberType_0, r5_uc);
 
               } else {
                 // loc_19DD32
                 if (r5_uc <= 9) {
                   // /0019DD3C
-                  tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r5_uc].Setup(
+                  ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r5_uc].Setup(
                       ECrowdMemberType_1, r5_uc - 0x5);
                 } else {
                   // loc_19DD44
-                  tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r5_uc].Setup(
+                  ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r5_uc].Setup(
                       ECrowdMemberType_2, r5_uc - 0xa);
                 }
               }
@@ -1328,11 +1328,11 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
             // 0019DD5A
             for (int r1_i = 0; r1_i != 0x20; r1_i++) {
               // loc_19DD60
-              tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r1_i]
+              ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r1_i]
                   .m_cVec32_ADC.float_0 = 0;
-              tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r1_i]
+              ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r1_i]
                   .m_cVec32_ADC.float_4 = 0;
-              tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r1_i]
+              ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r1_i]
                   .m_cVec32_ADC.float_8 = 0;
             }
             // 0019DD7C
@@ -1532,7 +1532,7 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
                 TSATAnim_TSX *r3_plegAnim = GetLegAnim(
                     tPtrTextureData_D0.pType_0->buff_94c[r0_i][r11_u].b_0);
                 CFTTMatrix32 mat_spd0 =
-                    tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r0_i]
+                    ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r0_i]
                         .Animate(
                             r4_panim, r3_plegAnim,
                             tPtrTextureData_D0.pType_0->buff_94c[r0_i][r11_u].us_2);
@@ -1712,7 +1712,7 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
                     tPtrTextureData_D0.pType_0->buff_94c[r9_i][r8_u].b_0);
 
                 CFTTMatrix32 mat_sp50 =
-                    tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r9_i]
+                    ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r9_i]
                         .Animate(
                             r4_panim, r3_panim,
                             tPtrTextureData_D0.pType_0->buff_94c[r9_i][r8_u]
@@ -1778,7 +1778,7 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
                 CFTTMatrix32 mat32_sp78;
                 MatrixMultiply(&mat32_sp78, &mat32_spd0,
                                &CFTTCamera::s_matView);
-                tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r9_i].Render(
+                ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r9_i].Render(
                     &mat32_sp78);
               }
               // 0019E5BE
@@ -1857,7 +1857,7 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
                 TSATAnim_TSX *r3_panim = GetLegAnim(
                     tPtrTextureData_D0.pType_0->buff_94c[r10_i][r9_u].b_0);
                 CFTTMatrix32 mat32_spd0 =
-                    tPtrTextureData_D0.pType_0->pmembers_34.pType_0[r10_i]
+                    ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r10_i]
                         .Animate(
                             r5_panim, r3_panim,
                             tPtrTextureData_D0.pType_0->buff_94c[r10_i][r9_u]

+ 448 - 376
jni/CPlayer.cpp

@@ -1,388 +1,479 @@
 #include "CPlayer.h"
-#include "XMATH.h"
-#include "XSYS.h"
-#include "GU.h"
-#include "GL.h"
-#include "GM.h"
+
+#include "ACT.h"
+#include "CAnimManager.h"
 #include "CBall.h"
 #include "CBallProj.h"
+#include "CPlayerManager.h"
+#include "GL.h"
+#include "GM.h"
 #include "GPA.h"
-#include "TGame.h"
+#include "GU.h"
 #include "SNDGAME.h"
-#include "ACT.h"
-#include "CAnimManager.h"
-#include "CPlayerManager.h"
+#include "TGame.h"
+#include "XMATH.h"
+#include "XSYS.h"
 
-int LOCO_SPEED_WALK_MIN = 0x321;     //0033E988
-int LOCO_SPEED_WALK_MAX = 0x321;     //0033E98C
-int LOCO_SPEED_WALK_AVG = 0x321;     //0033E990
-int LOCO_SPEED_JOG_MIN = 0xC84;      //0033E994
-int LOCO_SPEED_JOG_MAX = 0xE9A;      //0033E998
-int LOCO_SPEED_JOG_AVG = 0xD8F;      //0033E99C
-int LOCO_SPEED_SPRINT_MIN = 0xE9A;   //0033E9A0
-int LOCO_SPEED_SPRINT_MAX = 0x11BB;  //0033E9A4
-int LOCO_SPEED_SPRINT_AVG = 0x102A;  //0033E9A8
+int LOCO_SPEED_WALK_MIN = 0x321;     // 0033E988
+int LOCO_SPEED_WALK_MAX = 0x321;     // 0033E98C
+int LOCO_SPEED_WALK_AVG = 0x321;     // 0033E990
+int LOCO_SPEED_JOG_MIN = 0xC84;      // 0033E994
+int LOCO_SPEED_JOG_MAX = 0xE9A;      // 0033E998
+int LOCO_SPEED_JOG_AVG = 0xD8F;      // 0033E99C
+int LOCO_SPEED_SPRINT_MIN = 0xE9A;   // 0033E9A0
+int LOCO_SPEED_SPRINT_MAX = 0x11BB;  // 0033E9A4
+int LOCO_SPEED_SPRINT_AVG = 0x102A;  // 0033E9A8
 
 //-------------------------------------------------------------------------------------------------
-//0011DE8C
-void CPlayer::SetPos(int i1, int i2) {
-}
+// 0011DE8C
+void CPlayer::SetPos(int i1, int i2) {}
 //-------------------------------------------------------------------------------------------------
-//00125D8C
-void CPlayer::SetPos(TPoint3D r1) {
-}
+// 00125D8C
+void CPlayer::SetPos(TPoint3D r1) {}
 //-------------------------------------------------------------------------------------------------
-//00154314 ^_^
-uint64_t CPlayer::GetDistance(TPoint point1) {
-  return 0;
-}
+// 00154314 ^_^
+uint64_t CPlayer::GetDistance(TPoint point1) { return 0; }
 //-------------------------------------------------------------------------------------------------
-//0015432C ^_^
-int CPlayer::GetDistanceSq(TPoint point1) {
-  return 0;
-}
+// 0015432C ^_^
+int CPlayer::GetDistanceSq(TPoint point1) { return 0; }
 //-------------------------------------------------------------------------------------------------
-//0015CBD0
-void CPlayer::SetPos(TPoint point1) {
-}
+// 0015CBD0
+void CPlayer::SetPos(TPoint point1) {}
 //-------------------------------------------------------------------------------------------------
-//0016E630
-void CPlayer::UpdateFE() {
-}
+// 0016E630
+void CPlayer::UpdateFE() {}
 //-------------------------------------------------------------------------------------------------
-//0016E64E ^_- 经过单元测试,功能正常
+// 0016E64E ^_- 经过单元测试,功能正常
 void CPlayer::UpdateRot() {
-  //locret_16E6AC
+  // locret_16E6AC
 }
 //-------------------------------------------------------------------------------------------------
-//0016E6B0 ^_- 经过单元测试,功能正常
+// 0016E6B0 ^_- 经过单元测试,功能正常
 void CPlayer::UpdateHeadRot() {
-  //LOGI("CPlayer::UpdateHeadRot %p", this);
-  //locret_16E798
+  // LOGI("CPlayer::UpdateHeadRot %p", this);
+  // locret_16E798
 }
 //-------------------------------------------------------------------------------------------------
-//0016E7A4 ^_^
-void CPlayer::UpdateFinalise() {
-}
+// 0016E7A4 ^_^
+void CPlayer::UpdateFinalise() {}
 //-------------------------------------------------------------------------------------------------
-//0016E7C2 ^_^
-void CPlayer::Update() {
-}
+// 0016E7C2 ^_^
+void CPlayer::Update() {}
 //-------------------------------------------------------------------------------------------------
-//0016E81A ^_^
+// 0016E81A ^_^
 void CPlayer::UpdateSprint() {
-  //locret_16E870
-}
-//-------------------------------------------------------------------------------------------------
-//0016E874
-void CPlayer::UpdateFace() {
-  LOGI("CPlayer::UpdateFace %p", this);
-}
-//-------------------------------------------------------------------------------------------------
-//0016E9BC
-__attribute__((noinline)) void CPlayer::UpdatePosVel() {
-  LOGI("CPlayer::UpdatePosVel %p", this);
+  // locret_16E870
+}
+//-------------------------------------------------------------------------------------------------
+// 0016E874
+void CPlayer::UpdateFace() { LOGI("CPlayer::UpdateFace %p", this); }
+//-------------------------------------------------------------------------------------------------
+int UNITROT_X(int x) { return xsin(x) / 16; }
+int UNITROT_Y(int x) { return 0 - xcos(x) / 16; }
+// 0016E9BC
+//  0016E9BC 经过更衣室和游戏第一关测试正常
+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) {
+    // loc_16E9D6
+    r5_i = GetRunSpeed();
+  } else {
+    r5_i = 0;
+  }
+
+  // loc_16E9E2
+  int r0_i, r1_i;
+  if (s_158 == 0 && ballPosPrev_4.dz_8 == 0 && Point3D_14.dz_8 == 0) {
+    // 0016E9FC
+    if (tStr32_44.field_8 != 3) {
+      // 0016EA02
+      if (tStr32_44.field_8 || tStr32_44.u_2C.s_2C.sBlend_2E) {
+        // loc_16EA0C
+        int r7_i = u_0.s_2_0.s_0;
+        if (u_0.s_2_0.s_0 != -1) {
+          // 0016EA14
+          if (tStr32_44.field_8 == 4) {
+            // 0016EA18
+            TAnimData *r2_pAnimData =
+                &CAnimManager::s_tAnimData[tStr32_44.field_20];
+            if (tStr32_44.u_2C.s_2C.sBlend_2E &&
+                r2_pAnimData->filed_8 == 4) {  // 0016EA34
+              // 0016EA38
+              // sint32 r3_si = (sint32)tStr32_44.u_2C.s_2C.uBlend_2E;
+              // r3_si=((r3_si>>26)&0x1f)+tStr32_44.u_2C.s_2C.uBlend_2E;
+              // uint r3_ui = UBFX(r3_si, 26, 5);
+              short r3_si = tStr32_44.u_2C.s_2C.sBlend_2E;
+              r0_i = GM_BlendAngle(r6_pAnimData->s_64, r2_pAnimData->s_64,
+                                   r3_si / 32);
+
+            } else {
+              // loc_16EAC2
+              //!!!!!!!修改
+              r0_i = r6_pAnimData->s_64;
+            }
+
+            // loc_16EAC6
+            int r6_i = r0_i + r7_i;
+            r7_i = xsin(r6_i) / 4 * r5_i;
+            r0_i = xcos(r6_i);
+            // r1_i = 0 - (r0_i * 4096);
+            if(r1_i<0)
+              r1_i=0x3FFF;
+            else
+              r1_i=0;
+             r0_i = r1_i - (r0_i * 4096);
+
+            r0_i = (r0_i >> 14) * r5_i / 4096;
+            
+            // loc_16EAF8
+            r1_i = r7_i / 4096;
+
+          } else {
+            // loc_16EA86
+            r0_i = xsin(r7_i);
+            r0_i = r0_i / 4;
+            int r6_i = r0_i * r5_i;
+            r0_i = xcos(r7_i);  // 0016EA9E
+            //r1_i = 0 - ((uint)r0_i << 12);
+            // r1_i = r1_i >> 31;
+            // r1_i = (uint)r1_i >> 18;
+            if (r1_i < 0)
+             r1_i = 0x3fff;
+            else
+              r1_i = 0;
+            r0_i = r1_i - ((uint)r0_i << 12);
+            // //FF003FFF
+             r0_i = r0_i >> 14;
+            //FFFFFC00
+            // loc_16EAF8
+            r1_i = r6_i / 4096;
+            r0_i = r0_i * r5_i / 4096;
+          }
+
+        } else {
+          // loc_16EA80
+          r0_i = 0;
+          r1_i = 0;
+        }
+      } else {
+        // loc_16EAB8
+        r0_i = 0;
+        r1_i = 0;
+        Point3D_14.point_0.dx_0 = 0;
+        Point3D_14.point_0.dy_4 = 0;
+      }
+    } else {
+      // loc_16EA52
+      int r6_i = GU_GetRot(ballPosPrev_4.point_0, point_78);
+      int r7_i = UNITROT_X(r6_i) * r5_i;
+      r0_i = UNITROT_Y(r6_i) * r5_i;
+      r1_i = r7_i / 1024;
+      r0_i = r0_i / 1024;
+    }
+
+    // loc_16EB04
+    int r2_i = Point3D_14.point_0.dx_0;
+    int r3_i = Point3D_14.point_0.dy_4;
+    Point3D_14.point_0.dx_0 = ((r2_i * 96) + (r1_i * 32)) / 128;
+    Point3D_14.point_0.dy_4 = ((r3_i * 96) + (r0_i * 32)) / 128;
+  }
+  // loc_16EB30
+
+  ballPosPrev_4.point_0.dx_0 += Point3D_14.point_0.dx_0;
+  ballPosPrev_4.point_0.dy_4 += Point3D_14.point_0.dy_4;
+  if (Point3D_14.dz_8 || ballPosPrev_4.dz_8 >= 1) {
+    // loc_16EB4A
+    ballPosPrev_4.dz_8 += Point3D_14.dz_8;
+    Point3D_14.dz_8 -= 98;
+    if (ballPosPrev_4.dz_8 > -1) {
+      return;
+    }
+  }
+
+  // loc_16EB5E
+  Point3D_14.dz_8 = 0;
+  ballPosPrev_4.dz_8 = 0;
 }
 //-------------------------------------------------------------------------------------------------
-//0016EB6C ^_^
-void CPlayer::UpdateFuturePos() {
-}
+// 0016EB6C ^_^
+void CPlayer::UpdateFuturePos() {}
 //-------------------------------------------------------------------------------------------------
-//0016EB86
+// 0016EB86
 __attribute__((noinline)) void CPlayer::UpdateBallInHands() {
   LOGI("CPlayer::UpdateBallInHands %p", this);
 }
 //-------------------------------------------------------------------------------------------------
-//0016EB88
+// 0016EB88
 void CPlayer::SetPos(int i1, int i2, int i3) {
-  //LOGI("CPlayer::SetPos %d %d %d", i1, i2, i3);
+  // LOGI("CPlayer::SetPos %d %d %d", i1, i2, i3);
 }
 //-------------------------------------------------------------------------------------------------
-//0016EBDE
-void CPlayer::SetPosDest() {
-}
+// 0016EBDE
+void CPlayer::SetPosDest() {}
 //-------------------------------------------------------------------------------------------------
-//0016EBE6
+// 0016EBE6
 __attribute__((noinline)) void CPlayer::SetMoveDest(int i1, int i2) {
   LOGI("CPlayer::SetPosDest %p %d %d", this, i1, i2);
 }
 //-------------------------------------------------------------------------------------------------
-//0016EBF2
-void CPlayer::SetMoveDest(TPoint point1) {
-}
+// 0016EBF2
+void CPlayer::SetMoveDest(TPoint point1) {}
 //-------------------------------------------------------------------------------------------------
-//0016EBFE
-void CPlayer::SetRotExplicit(int i1) {
-}
+// 0016EBFE
+void CPlayer::SetRotExplicit(int i1) {}
 //-------------------------------------------------------------------------------------------------
-//0016EC02
+// 0016EC02
 __attribute__((noinline)) void CPlayer::SetRot(int r1, bool r2) {
-  //locret_16EC0A
+  // locret_16EC0A
 }
 //-------------------------------------------------------------------------------------------------
-//0016EC0C
+// 0016EC0C
 __attribute__((noinline)) void CPlayer::SetRot(TPoint point1, bool b2) {
   LOGI("CPlayer::SetPosDest %p %d %d %d", this, point1.dx_0, point1.dy_4, b2);
 }
 //-------------------------------------------------------------------------------------------------
-//0016EC20
+// 0016EC20
 __attribute__((noinline)) ushort CPlayer::GetRotPoint(TPoint point1) {
   return 0;
 }
 //-------------------------------------------------------------------------------------------------
-//0016EC34
-__attribute__((noinline)) void CPlayer::SetFace(int i1) {
-}
+// 0016EC34
+__attribute__((noinline)) void CPlayer::SetFace(int i1) {}
 //-------------------------------------------------------------------------------------------------
-//0016EC3A
+// 0016EC3A
 __attribute__((noinline)) void CPlayer::SetFace(int i1, int i2) {
   LOGI("CPlayer::SetFace %p %d %d", this, i1, i2);
 }
 //-------------------------------------------------------------------------------------------------
-//0016EC48
-void CPlayer::SetFace(TPoint point1) {
-}
+// 0016EC48
+void CPlayer::SetFace(TPoint point1) {}
 //-------------------------------------------------------------------------------------------------
-//0016EC56
-void CPlayer::SetFaceDest() {
-}
+// 0016EC56
+void CPlayer::SetFaceDest() {}
 //-------------------------------------------------------------------------------------------------
-//0016EC7A
-void CPlayer::Stop(int i1) {
-}
+// 0016EC7A
+void CPlayer::Stop(int i1) {}
 //-------------------------------------------------------------------------------------------------
-//0016EC8E ^_^
+// 0016EC8E ^_^
 int CPlayer::GetRotDest() {
-  //0016EC9E
+  // 0016EC9E
   return 0;
 }
 //-------------------------------------------------------------------------------------------------
-//0016ECB6
+// 0016ECB6
 __attribute__((noinline)) ushort CPlayer::GetRotPoint(TPoint3D point1) {
   return 0;
 }
 //-------------------------------------------------------------------------------------------------
-//0016ECCC ^_^
-int CPlayer::GetRotBall() {
-  return 0;
-}
+// 0016ECCC ^_^
+int CPlayer::GetRotBall() { return 0; }
 //-------------------------------------------------------------------------------------------------
-//0016ECF0
+// 0016ECF0
 __attribute__((noinline)) void CPlayer::GetDistance(CPlayer *pPlayer1) {
   LOGI("CPlayer::GetDistance %p %p", this, pPlayer1);
 }
 //-------------------------------------------------------------------------------------------------
-//0016ED1C
+// 0016ED1C
 __attribute__((noinline)) void CPlayer::GetDistanceSq(CPlayer *pPlayer1) {
   LOGI("CPlayer::GetDistanceSq %p %p", this, pPlayer1);
 }
 //-------------------------------------------------------------------------------------------------
-//0016ED40 ^_^
-void CPlayer::SetSpaceRot(int i1, int i2) {
-}
+// 0016ED40 ^_^
+void CPlayer::SetSpaceRot(int i1, int i2) {}
 //-------------------------------------------------------------------------------------------------
-//0016ED8A
+// 0016ED8A
 __attribute__((noinline)) void CPlayer::GetMoveDistance() {
   LOGI("CPlayer::GetMoveDistance %p", this);
 }
 //-------------------------------------------------------------------------------------------------
-//0016ED96 ^_^
-void CPlayer::Init() {
-}
+// 0016ED96 ^_^
+void CPlayer::Init() {}
 //-------------------------------------------------------------------------------------------------
-//0016EDD0 经过单元测试功能正常
+// 0016EDD0 经过单元测试功能正常
 void CPlayer::SetupGoally(int i1, TPlayerInfo *pPlayerInfo2) {
-  //LOGI("CPlayer::SetupGoally %p %d %p", this, i1, pPlayerInfo2);
+  // LOGI("CPlayer::SetupGoally %p %d %p", this, i1, pPlayerInfo2);
 }
 //-------------------------------------------------------------------------------------------------
-//0016EEC6 经过单元测试,功能正常
+// 0016EEC6 经过单元测试,功能正常
 void CPlayer::SetupPlayer(int i1, int i2, TPlayerInfo *pPlayerInfo3) {
   LOGI("CPlayer::SetupPlayer %p %d %d %p", this, i1, i2, pPlayerInfo3);
 }
 //-------------------------------------------------------------------------------------------------
-//0016EFBC ^_^
-void CPlayer::SetupStandard() {
-}
+// 0016EFBC ^_^
+void CPlayer::SetupStandard() {}
 //-------------------------------------------------------------------------------------------------
-//0016F008 ^_^
-void CPlayer::SetupOfficial() {
-}
+// 0016F008 ^_^
+void CPlayer::SetupOfficial() {}
 //-------------------------------------------------------------------------------------------------
-//0016F044 经过单元测试同,功能正常
+// 0016F044 经过单元测试同,功能正常
 void CPlayer::Reset() {
-  //LOGI("CPlayer::Reset %p", this);
+  // LOGI("CPlayer::Reset %p", this);
 }
 //-------------------------------------------------------------------------------------------------
-//0016F114
-void CPlayer::CancelHeadInputControl() {
-}
+// 0016F114
+void CPlayer::CancelHeadInputControl() {}
 //-------------------------------------------------------------------------------------------------
-//0016F11C
+// 0016F11C
 void CPlayer::SetHeadRotRel(int r1, bool r2) {
-  //locret_16F12A
+  // locret_16F12A
 }
 //-------------------------------------------------------------------------------------------------
-//0016F12C
+// 0016F12C
 TPoint3D CPlayer::GetBonePos(int i2) {
   TPoint3D ret;
   return ret;
 }
 //-------------------------------------------------------------------------------------------------
-//0016F13C 经过单元测试,功能正常
+// 0016F13C 经过单元测试,功能正常
 TPoint CPlayer::GetTimePos(int i2) {
-  //LOGI("CPlayer::GetTimePos %p %d", this, i2);
+  // LOGI("CPlayer::GetTimePos %p %d", this, i2);
   TPoint retPos;
   return retPos;
 }
 //-------------------------------------------------------------------------------------------------
-//0016F280 ^_^
-int CPlayer::AttributeInterpolate_Internal(EPlayerAttribute eAttr1, int i2, int i3, int i4, int i5, int i6) {
-  //LOGI("CPlayer::AttributeInterpolate_Internal %p %d %d %d %d %d %d", this, eAttr1, i2, i3, i4, i5, i6);
+// 0016F280 ^_^
+int CPlayer::AttributeInterpolate_Internal(EPlayerAttribute eAttr1, int i2,
+                                           int i3, int i4, int i5, int i6) {
+  // LOGI("CPlayer::AttributeInterpolate_Internal %p %d %d %d %d %d %d", this,
+  // eAttr1, i2, i3, i4, i5, i6);
   return 0;
 }
 //-------------------------------------------------------------------------------------------------
-//0016F324 ^_- 经过单元测试,功能正常
+// 0016F324 ^_- 经过单元测试,功能正常
 void CPlayer::UpdateAction() {
-  //LOGI("CPlayer::UpdateAction %p", this);
+  // LOGI("CPlayer::UpdateAction %p", this);
 }
 //-------------------------------------------------------------------------------------------------
-//0016F3D4
+// 0016F3D4
 __attribute__((noinline)) int CPlayer::ActionTend(int i1, TPoint3D *pPoint3D2) {
   LOGI("CPlayer::UpdateAction %p %d", this, i1, pPoint3D2);
-  return  rand() % 4;
+  return rand() % 4;
 }
 //-------------------------------------------------------------------------------------------------
-//0016F734
+// 0016F734
 __attribute__((noinline)) void CPlayer::UpdateActionSlideTackleX(int i1) {
   LOGI("CPlayer::UpdateActionSlideTackleX %p %d", this, i1);
 }
 //-------------------------------------------------------------------------------------------------
-//0016FA40
-void CPlayer::UpdateActionSlideTackle(int i1) {
-}
+// 0016FA40
+void CPlayer::UpdateActionSlideTackle(int i1) {}
 //-------------------------------------------------------------------------------------------------
-//0016FAAC ^_^
+// 0016FAAC ^_^
 void CPlayer::UpdateActionConservativeTackle(int i1) {
-  //LOGI("CPlayer::UpdateActionConservativeTackle entry %d", i1);
-  //locret_16FB1A
+  // LOGI("CPlayer::UpdateActionConservativeTackle entry %d", i1);
+  // locret_16FB1A
 }
 //-------------------------------------------------------------------------------------------------
-//0016FB24 ^_-
-void CPlayer::UpdateActionGKSave(int i1) {
-}
+// 0016FB24 ^_-
+void CPlayer::UpdateActionGKSave(int i1) {}
 //-------------------------------------------------------------------------------------------------
-//0016FB94
+// 0016FB94
 __attribute__((noinline)) void CPlayer::UpdateActionDeek(int i1) {
   LOGI("CPlayer::UpdateActionDeek %p %d", this, i1);
 }
 //-------------------------------------------------------------------------------------------------
-//0016FE80 ^_^
+// 0016FE80 ^_^
 void CPlayer::UpdateActionControl(int i1) {
-  //LOGI("CPlayer::UpdateActionControl %p %d", this, i1);
+  // LOGI("CPlayer::UpdateActionControl %p %d", this, i1);
 }
 //-------------------------------------------------------------------------------------------------
-//0016FF24 ^_^
-void CPlayer::UpdateActionKick(int i1) {
-}
+// 0016FF24 ^_^
+void CPlayer::UpdateActionKick(int i1) {}
 //-------------------------------------------------------------------------------------------------
-//0016FF78 ^_-
-void CPlayer::UpdateActionGKKick(int i1) {
-}
+// 0016FF78 ^_-
+void CPlayer::UpdateActionGKKick(int i1) {}
 //-------------------------------------------------------------------------------------------------
-//0016FFC8
+// 0016FFC8
 __attribute__((noinline)) void CPlayer::ClearAction() {
   LOGI("CPlayer::ClearAction %p", this);
 }
 //-------------------------------------------------------------------------------------------------
-//0016FFD4 经过单元测试,功能正常
+// 0016FFD4 经过单元测试,功能正常
 bool CPlayer::ActionCheckIsStillValidRange(int i1, int i2, int i3) {
-  //LOGI("CPlayer::ActionCheckIsStillValidRange %p %d %d %d", this, i1, i2, i3);
+  // LOGI("CPlayer::ActionCheckIsStillValidRange %p %d %d %d", this, i1, i2,
+  // i3);
   return true;
 }
 //-------------------------------------------------------------------------------------------------
-//001700C0 ^_^
-void CPlayer::KickFail() {
-}
+// 001700C0 ^_^
+void CPlayer::KickFail() {}
 //-------------------------------------------------------------------------------------------------
-//001700E4 ^_^
+// 001700E4 ^_^
 void CPlayer::ActionUpdateDynamic() {
-  //locret_170126
+  // locret_170126
 }
 //-------------------------------------------------------------------------------------------------
-//0017012C  //???
+// 0017012C  //???
 void CPlayer::ActionTendSetupDest(TPoint3D point3D1) {
-  //LOGI("CPlayer::ActionTendSetupDest %p %d %d %d", this, point3D1.point_0.dx_0, point3D1.point_0.dy_4, point3D1.dz_8);
-  //TAnimData * r10_pAnimData = GetAnimData();
+  // LOGI("CPlayer::ActionTendSetupDest %p %d %d %d", this,
+  // point3D1.point_0.dx_0, point3D1.point_0.dy_4, point3D1.dz_8); TAnimData *
+  // r10_pAnimData = GetAnimData();
 }
 //-------------------------------------------------------------------------------------------------
-//001701D0 ^_^
-void CPlayer::ActionTendSetup(TActionSetup *pActionSetup01, EACTION eAction2) {
-}
+// 001701D0 ^_^
+void CPlayer::ActionTendSetup(TActionSetup *pActionSetup01, EACTION eAction2) {}
 //-------------------------------------------------------------------------------------------------
-//00170242
+// 00170242
 TPoint3D CPlayer::ActionGetPosFromDest() {
   TPoint3D ret_p3D;
   return ret_p3D;
 }
 //-------------------------------------------------------------------------------------------------
-//001702B0 经过单元测试,功能正常
+// 001702B0 经过单元测试,功能正常
 void CPlayer::Animate(int i1) {
-  //LOGI("CPlayer::Animate %d", i1);
+  // LOGI("CPlayer::Animate %d", i1);
 }
 //-------------------------------------------------------------------------------------------------
-//0017039C ^_- 经过单元测试,功能正常
+// 0017039C ^_- 经过单元测试,功能正常
 void CPlayer::ApplyRootBoneOfs(TAnimData *pAniData1, int i2) {
-  //LOGI("CPlayer::ApplyRootBoneOfs %d", i2);
+  // LOGI("CPlayer::ApplyRootBoneOfs %d", i2);
 }
 //-------------------------------------------------------------------------------------------------
-//00170440 ^_-
+// 00170440 ^_-
 void CPlayer::SetNextState(TAnimData *pAnimData1) {
-  //LOGI("CPlayer::SetNextState %p %p", this, pAnimData1);
+  // LOGI("CPlayer::SetNextState %p %p", this, pAnimData1);
 }
 //-------------------------------------------------------------------------------------------------
-//001704DC ^_^
+// 001704DC ^_^
 __attribute__((noinline)) TAnimData *CPlayer::GetAnimData() {
-  return nullptr;
+  LOGE("TAnimData *CPlayer::GetAnimData");
+  return (TAnimData *)rand();
 }
 //-------------------------------------------------------------------------------------------------
-//001704F4 经过单元测试,功能正常
+// 001704F4 经过单元测试,功能正常
 void CPlayer::SetAnim(int i1) {
-  //LOGI("CPlayer::SetAnim %p %d", this, i1);
+  // LOGI("CPlayer::SetAnim %p %d", this, i1);
 }
 //-------------------------------------------------------------------------------------------------
-//00170694 ^_- 经过单元测试,功能正常
+// 00170694 ^_- 经过单元测试,功能正常
 void CPlayer::GetRootBoneMove(TPoint *pPoint1) {
   LOGI("CPlayer::GetRootBoneMove %p %p", this, pPoint1);
 }
 //-------------------------------------------------------------------------------------------------
-//0017077C ^_- 经过单元测试,功能正常
-int CPlayer::GetTrueRot() {
-  return 0;
-}
+// 0017077C ^_- 经过单元测试,功能正常
+int CPlayer::GetTrueRot() { return 0; }
 //-------------------------------------------------------------------------------------------------
-//00170820
-__attribute__((noinline)) bool CPlayer::AnimBlendNeeded() {
-  return false;
-}
+// 00170820
+__attribute__((noinline)) bool CPlayer::AnimBlendNeeded() { return false; }
 //-------------------------------------------------------------------------------------------------
-//0017082C ^_- 经过单元测试,功能正常
+// 0017082C ^_- 经过单元测试,功能正常
 void CPlayer::UpdateAnimCalcs() {
-  //LOGI("CPlayer::UpdateAnimCalcs entry");
-  //loc_1708C8
+  // LOGI("CPlayer::UpdateAnimCalcs entry");
+  // loc_1708C8
 }
 //-------------------------------------------------------------------------------------------------
-//001708D0
-void CPlayer::SetTrophyData(ETrophyPos e1, ushort us2, ushort us3) {
-}
+// 001708D0
+void CPlayer::SetTrophyData(ETrophyPos e1, ushort us2, ushort us3) {}
 //-------------------------------------------------------------------------------------------------
-//001708DE
-__attribute__((noinline)) void CPlayer::ClearBlend() {
-}
+// 001708DE
+__attribute__((noinline)) void CPlayer::ClearBlend() {}
 //-------------------------------------------------------------------------------------------------
-//001708E8 后面的代码好像与 NIS的测试环境,通过单元测试,发现后面的代码不写,不影响逻辑
+// 001708E8 后面的代码好像与
+// NIS的测试环境,通过单元测试,发现后面的代码不写,不影响逻辑
 void CPlayer::UpdateJostlePoint() {
-  if (!tStr32_44.uc_1)
-    return;
+  if (!tStr32_44.uc_1) return;
 
   // 001708F4
   if (tStr32_44.field_8 != 4) {
@@ -395,130 +486,123 @@ void CPlayer::UpdateJostlePoint() {
     return;
   }
   // loc_170926
-  if (tStr32_44.s_C != 40)
-    return;
+  if (tStr32_44.s_C != 40) return;
 
   // 0017092E
   TAnimData *r6_pAnimData = &CAnimManager::s_tAnimData[tStr32_44.field_10];
 
   // 00170944
-  if (r6_pAnimData->filed_64)
-    return;
+  if (r6_pAnimData->s_64) return;
 
-  //??? 后面的代码好像与 NIS的测试环境,通过单元测试,发现后面的代码不写,不影响逻辑
+  //??? 后面的代码好像与
+  //NIS的测试环境,通过单元测试,发现后面的代码不写,不影响逻辑
 }
 //-------------------------------------------------------------------------------------------------
-//00170A14 ^_^
-bool CPlayer::SetReaction(int i1, int i2, int i3) {
-  return true;
-}
+// 00170A14 ^_^
+bool CPlayer::SetReaction(int i1, int i2, int i3) { return true; }
 //-------------------------------------------------------------------------------------------------
-//00170A50 经过单元测试,功能正常
+// 00170A50 经过单元测试,功能正常
 void CPlayer::UpdateAnimation() {
-  //LOGI("CPlayer::UpdateAnimation %p", this);
+  // LOGI("CPlayer::UpdateAnimation %p", this);
 }
 //-------------------------------------------------------------------------------------------------
-//00170BD0 ^_^
-void CPlayer::OverrideAnimFrame(int i1) {
-}
+// 00170BD0 ^_^
+void CPlayer::OverrideAnimFrame(int i1) {}
 //-------------------------------------------------------------------------------------------------
-//00170C0C
-__attribute__((noinline)) void CPlayer::EnableIdleAnims(bool b1) {
-}
+// 00170C0C
+__attribute__((noinline)) void CPlayer::EnableIdleAnims(bool b1) {}
 //-------------------------------------------------------------------------------------------------
-//00170C14 经过单元测试,功能正常
+// 00170C14 经过单元测试,功能正常
 void CPlayer::SetAnimFromStateGen(int i1, int i2, int i3) {
-  //LOGI("CPlayer::SetAnimFromStateGen %p %d %d %d", this, i1, i2, i3);
+  // LOGI("CPlayer::SetAnimFromStateGen %p %d %d %d", this, i1, i2, i3);
 }
 //-------------------------------------------------------------------------------------------------
-//00170D10 经过单元测试,功能正常
+// 00170D10 经过单元测试,功能正常
 void CPlayer::SetAnimFromStateI() {
-  //LOGI("CPlayer::SetAnimFromStateI %p", this);
-  //00170D16
+  // LOGI("CPlayer::SetAnimFromStateI %p", this);
+  // 00170D16
 }
 //-------------------------------------------------------------------------------------------------
-//00170DD4 ^_^
-void CPlayer::GetRootBoneOfs(TPoint *pPoint1, TAnimData *pAnimData2) {
-}
+// 00170DD4 ^_^
+void CPlayer::GetRootBoneOfs(TPoint *pPoint1, TAnimData *pAnimData2) {}
 //-------------------------------------------------------------------------------------------------
-//00170E50 ^_^
-void CPlayer::UpdateActOKTime() {
-}
+// 00170E50 ^_^
+void CPlayer::UpdateActOKTime() {}
 //-------------------------------------------------------------------------------------------------
-//00170E98 ^_^
-int CPlayer::GetActionTime() {
-  return 0;
-}
+// 00170E98 ^_^
+int CPlayer::GetActionTime() { return 0; }
 //-------------------------------------------------------------------------------------------------
-//00170EC8
+// 00170EC8
 __attribute__((noinline)) void CPlayer::GetAnimTime() {
   LOGI("CPlayer::GetAnimTime %p", this);
 }
 //-------------------------------------------------------------------------------------------------
-//00170EE0
-__attribute__((noinline)) int CPlayer::SetAnimFromStateAction(int i1, int i2, int i3, int i4, int i5, int i6, TActionSetup *pActionSetup7, int i8, int i9) {
-  LOGI("CPlayer::SetAnimFromStateAction %p %d %d %d %d %d %d %p %d %d", this, i1, i2, i3, i4, i5, i6, pActionSetup7, i8, i9);
+// 00170EE0
+__attribute__((noinline)) int CPlayer::SetAnimFromStateAction(
+    int i1, int i2, int i3, int i4, int i5, int i6, TActionSetup *pActionSetup7,
+    int i8, int i9) {
+  LOGI("CPlayer::SetAnimFromStateAction %p %d %d %d %d %d %d %p %d %d", this,
+       i1, i2, i3, i4, i5, i6, pActionSetup7, i8, i9);
   return 0;
 }
 //-------------------------------------------------------------------------------------------------
-//001714E4
-__attribute__((noinline)) void CPlayer::GetAnimActionPoint(TPoint *pPoint1, TAnimData *pAnimData2, int i3, int i4) {
-  LOGI("CPlayer::GetAnimTime %p %p %p %d %d", this, pPoint1, pAnimData2, i3, i4);
+// 001714E4
+__attribute__((noinline)) void CPlayer::GetAnimActionPoint(
+    TPoint *pPoint1, TAnimData *pAnimData2, int i3, int i4) {
+  LOGI("CPlayer::GetAnimTime %p %p %p %d %d", this, pPoint1, pAnimData2, i3,
+       i4);
 }
 //-------------------------------------------------------------------------------------------------
-//00171534 没有测试到
+// 00171534 没有测试到
 void CPlayer::GetActionPoint(TPoint3D *pPoint3D1) {
   LOGI("CPlayer::GetActionPoint %p %p", this, pPoint3D1);
 }
 //-------------------------------------------------------------------------------------------------
-//001715EC 经过单元测试,功能正常
+// 001715EC 经过单元测试,功能正常
 void CPlayer::GetBonePosition(int i1, TPoint3D *pPoint3D2) {
-  //LOGI("CPlayer::GetBonePosition %p %p", this, pPoint3D2);
+  // LOGI("CPlayer::GetBonePosition %p %p", this, pPoint3D2);
 }
 //-------------------------------------------------------------------------------------------------
-//00171798
-__attribute__((noinline)) void CPlayer::GetHandPosition(TPoint3D *pPoint3D1, bool b2) {
+// 00171798
+__attribute__((noinline)) void CPlayer::GetHandPosition(TPoint3D *pPoint3D1,
+                                                        bool b2) {
   LOGI("CPlayer::GetAnimTime %p %p %d", this, pPoint3D1, b2);
 }
 //-------------------------------------------------------------------------------------------------
-//001717A8 ^_^ 经过单元测试,功能正常
+// 001717A8 ^_^ 经过单元测试,功能正常
 TPoint3D CPlayer::GetHandsPosition(int i1) {
   TPoint3D ret;
   return ret;
 }
 //-------------------------------------------------------------------------------------------------
-//00171868
-__attribute__((noinline)) void CPlayer::GetBoneOrientation(int i1, TPoint3D *pPoint3D2) {
+// 00171868
+__attribute__((noinline)) void CPlayer::GetBoneOrientation(
+    int i1, TPoint3D *pPoint3D2) {
   LOGI("CPlayer::GetAnimTime %p %d %p", this, i1, pPoint3D2);
 }
 //-------------------------------------------------------------------------------------------------
-//00172634 ^_^
-int CPlayer::GetDistanceSq(TPoint3D point3D1) {
-  return 0;
-}
+// 00172634 ^_^
+int CPlayer::GetDistanceSq(TPoint3D point3D1) { return 0; }
 //-------------------------------------------------------------------------------------------------
-//00172EB2 ^_^
-bool CPlayer::Fell(TPoint point1, bool b3) {
-  return true;
-}
+// 00172EB2 ^_^
+bool CPlayer::Fell(TPoint point1, bool b3) { return true; }
 //-------------------------------------------------------------------------------------------------
-//00172EE4
+// 00172EE4
 bool CPlayer::Fell(int i1, bool b2) {
   LOGI("CPlayer::Fell 00172EE4");
   return true;
 }
 //-------------------------------------------------------------------------------------------------
-//00172F78 ^_-
+// 00172F78 ^_-
 bool CPlayer::Trip(int i1, int i2) {
   bool r4_bret = false;
-  //loc_172FEE
+  // loc_172FEE
   return r4_bret;
 }
 //-------------------------------------------------------------------------------------------------
-//00172FF8 ^_^
+// 00172FF8 ^_^
 void CPlayer::UpdateLogic() {
-  if (NIS_Active())
-    return;
+  if (NIS_Active()) return;
 
   // 00173002
   UpdateJostlePoint();
@@ -527,11 +611,11 @@ void CPlayer::UpdateLogic() {
   UpdateBallReactions();
   UpdateFall();
 
-  if (!uc_88)
-    return;
+  if (!uc_88) return;
 
   // 00173026
-  if (cBall.ballPosPrev_4.dz_8 <= s_122 * 72 && tStr58_A0.u_50.ui_50 <= 0x28000) {
+  if (cBall.ballPosPrev_4.dz_8 <= s_122 * 72 &&
+      tStr58_A0.u_50.ui_50 <= 0x28000) {
     // 00173046
     if (tGame.field_6C38 <= 4 && cBall.speedXY_28 > 0x14DC) {
       uc_88 = 0;
@@ -544,19 +628,16 @@ void CPlayer::UpdateLogic() {
   // loc_17306E
 }
 //-------------------------------------------------------------------------------------------------
-//00173080 ^_^
+// 00173080 ^_^
 void CPlayer::UpdateIdle() {
   // LOGI("CPlayer::UpdateIdle %p", this);
-  if (b_30)
-    return;
+  if (b_30) return;
 
   // 0017308C
   if (tGame.field_6C38 >= 6 && !tStr32_44.field_8) {
     // 001730A0
     // tStr32_44.s_C > 6 ||
-    if ((tStr32_44.s_C != 6 &&
-         tStr32_44.s_C != 3 &&
-         tStr32_44.s_C != 2)) {
+    if ((tStr32_44.s_C != 6 && tStr32_44.s_C != 3 && tStr32_44.s_C != 2)) {
       // loc_1730B4
       field_120++;
       if ((int)field_120 >= 241) {
@@ -593,13 +674,11 @@ void CPlayer::UpdateIdle() {
   // loc_173104
   if (tGame.mTLogic_6678.field_8 == 1 && tGame.mTLogic_6678.field_10 == 1) {
     // loc_17311A
-    if (tGame.mTLogic_6678.field_38 <= 29 &&
-        tStr32_44.field_8 == 14 &&
+    if (tGame.mTLogic_6678.field_38 <= 29 && tStr32_44.field_8 == 14 &&
         tStr32_44.field_14 > (tStr32_44.field_1C * 30)) {
       // 00173138
       NewPlayerStateX(0, -1, 0);
-      if (tGame.mTLogic_6678.field_38 >= 61 &&
-          tStr32_44.field_8 == 0 &&
+      if (tGame.mTLogic_6678.field_38 >= 61 && tStr32_44.field_8 == 0 &&
           tStr32_44.s_C == 2) {
         // 0017315E
         NewPlayerStateX(0, -1, 0);
@@ -611,7 +690,7 @@ void CPlayer::UpdateIdle() {
   return;
 }
 //-------------------------------------------------------------------------------------------------
-//00173188 ^_^
+// 00173188 ^_^
 void CPlayer::UpdateReactions() {
   if (field_8C) {
     // 00173192
@@ -628,16 +707,15 @@ void CPlayer::UpdateReactions() {
   // locret_1731B6
 }
 //-------------------------------------------------------------------------------------------------
-//001731B8
+// 001731B8
 __attribute__((noinline)) void CPlayer::UpdateBallReactions() {
   UpdateTake();
   UpdateAvoid();
 }
 //-------------------------------------------------------------------------------------------------
-//001731CA ^_-
+// 001731CA ^_-
 void CPlayer::UpdateFall() {
-  if (tStr32_44.field_8 != 10)
-    return;
+  if (tStr32_44.field_8 != 10) return;
 
   // 001731D6
   TAnimData *r1_data = GetAnimData();
@@ -649,7 +727,8 @@ void CPlayer::UpdateFall() {
   } else {
     // 001731F0
     if (tStr32_44.field_14 >= r1_data->filed_20[0].filed_0 &&
-        tStr32_44.field_14 < (r1_data->filed_20[0].filed_0 + tStr32_44.field_1C)) {
+        tStr32_44.field_14 <
+            (r1_data->filed_20[0].filed_0 + tStr32_44.field_1C)) {
       tStr32_44.s_18 = 1;
     }
   }
@@ -657,222 +736,215 @@ void CPlayer::UpdateFall() {
   // locret_173206
 }
 //-------------------------------------------------------------------------------------------------
-//00173208
+// 00173208
 __attribute__((noinline)) void CPlayer::UpdateAvoid() {
   LOGI("CPlayer::UpdateAvoid %p", this);
 }
 //-------------------------------------------------------------------------------------------------
-//001733C4
+// 001733C4
 __attribute__((noinline)) void CPlayer::IsWalking() {
   LOGI("CPlayer::IsWalking %p", this);
 }
 //-------------------------------------------------------------------------------------------------
-//001733EC
+// 001733EC
 bool CPlayer::IsSprinting() {
-  //locret_173412
+  // locret_173412
   return false;
 }
 //-------------------------------------------------------------------------------------------------
-//00173414
+// 00173414
 __attribute__((noinline)) void CPlayer::IsStanding() {
   LOGI("CPlayer::IsStanding %p", this);
 }
 //-------------------------------------------------------------------------------------------------
-//0017341E
+// 0017341E
 __attribute__((noinline)) void CPlayer::IsFacing(int i1, int i2) {
   LOGI("CPlayer::IsFacing %p %d %d", this, i1, i2);
 }
 //-------------------------------------------------------------------------------------------------
-//00173442
+// 00173442
 __attribute__((noinline)) void CPlayer::IsAtDest(TPoint *pPoint1, int i2) {
   LOGI("CPlayer::IsAtDest %p %d %d", this, pPoint1, i2);
 }
 //-------------------------------------------------------------------------------------------------
-//0017346C
+// 0017346C
 __attribute__((noinline)) void CPlayer::UpdateMovement() {
   LOGI("CPlayer::UpdateMovement %p", this);
 }
 //-------------------------------------------------------------------------------------------------
-//00173DBA ^_^
-void CPlayer::SetStateStand(bool b1) {
-}
+// 00173DBA ^_^
+void CPlayer::SetStateStand(bool b1) {}
 //-------------------------------------------------------------------------------------------------
-//00173DD4 ^_^
-void CPlayer::SetStateLoco() {
-}
+// 00173DD4 ^_^
+void CPlayer::SetStateLoco() {}
 //-------------------------------------------------------------------------------------------------
-//00173E58
-__attribute__((noinline)) void CPlayer::SetAnimFromStateLoco(int i1, int i2, int i3) {
+// 00173E58
+__attribute__((noinline)) void CPlayer::SetAnimFromStateLoco(int i1, int i2,
+                                                             int i3) {
   LOGI("CPlayer::SetAnimFromStateLoco %p %d %d %d", this, i1, i2, i3);
 }
 //-------------------------------------------------------------------------------------------------
-//00174074
+// 00174074
 void CPlayer::CheckAvoid(TPoint *pPoint1, int i2, int i3) {
-  //LOGI("CPlayer::CheckAvoid %p %p %d %d", this, pPoint1, i2, i3);
-  //tStr32_44.uc_1
+  // LOGI("CPlayer::CheckAvoid %p %p %d %d", this, pPoint1, i2, i3);
+  // tStr32_44.uc_1
 }
 //-------------------------------------------------------------------------------------------------
-//001741FC
+// 001741FC
 __attribute__((noinline)) void CPlayer::SetConstantSpeed(bool b1) {
   LOGI("CPlayer::SetConstantSpeed %p %d", this, b1);
 }
 //-------------------------------------------------------------------------------------------------
-//00174204 ^_^
-int CPlayer::GetAverageRunSpeed() {
-  return 0;
-}
+// 00174204 ^_^
+int CPlayer::GetAverageRunSpeed() { return 0; }
 //-------------------------------------------------------------------------------------------------
-//00174260 ^_^
-void CPlayer::SetAverageRunSpeed(int i1) {
-}
+// 00174260 ^_^
+void CPlayer::SetAverageRunSpeed(int i1) {}
 //-------------------------------------------------------------------------------------------------
-//00174290
-void CPlayer::GetInterceptRunSpeed() {
-}
+// 00174290
+void CPlayer::GetInterceptRunSpeed() {}
 //-------------------------------------------------------------------------------------------------
-//00174294
+// 00174294
 __attribute__((noinline)) void CPlayer::GetWalkSpeed() {
   LOGI("CPlayer::GetWalkSpeed %p", this);
 }
 //-------------------------------------------------------------------------------------------------
-//001742B4 ^_^
-int CPlayer::GetSprintSpeed() {
-  return 0;
-}
+// 001742B4 ^_^
+int CPlayer::GetSprintSpeed() { return 0; }
 //-------------------------------------------------------------------------------------------------
-//00174310 ^_^
-int CPlayer::GetTargetRunSpeed() {
-  return 0;
-}
+// 00174310 ^_^
+int CPlayer::GetTargetRunSpeed() { return 0; }
 //-------------------------------------------------------------------------------------------------
-//0017432C //^_^
+// 0017432C //^_^
 int CPlayer::GetCurrentRunSpeed() {
-  //LOGI("CPlayer::GetCurrentRunSpeed %p", this);
+  // LOGI("CPlayer::GetCurrentRunSpeed %p", this);
   return 0;
 }
 //-------------------------------------------------------------------------------------------------
-//00174458 ^_-
+// 00174458 ^_-
 int CPlayer::GetRunSpeed() {
   int dret = 0;
-  //loc_1744BA
-  return dret;
+  // loc_1744BA
+  LOGE("this=%xCPlayer::GetRunSpeed", this);
+  return rand()+0x409360;
 }
 //-------------------------------------------------------------------------------------------------
-//001744CC
+// 001744CC
 int CPlayer::AttributeInterpolate(EPlayerAttribute eAttr1, int i2, int i3) {
   return 0;
 }
 //-------------------------------------------------------------------------------------------------
-//001744E2
-float CPlayer::GetMoveSpeed() {
-  return 0.1f;
-}
+// 001744E2
+float CPlayer::GetMoveSpeed() { return 0.1f; }
 //-------------------------------------------------------------------------------------------------
-//001744E8 ^_^
-int CPlayer::GetInterceptMaxHeight() {
-  return 0;
-}
+// 001744E8 ^_^
+int CPlayer::GetInterceptMaxHeight() { return 0; }
 //-------------------------------------------------------------------------------------------------
-//00174530 ^_^
+// 00174530 ^_^
 void CPlayer::SetUrgency(int i1) {
   LOGI("CPlayer::SetUrgency %d %d", i1, s_82);
 }
 //-------------------------------------------------------------------------------------------------
-//00174550 经过单元测试,功能正常
+// 00174550 经过单元测试,功能正常
 void CPlayer::SetUrgencyTime(int i1, bool b2) {
-  //LOGI("CPlayer::SetUrgencyTime %p %d", this, i1);
+  // LOGI("CPlayer::SetUrgencyTime %p %d", this, i1);
 }
 //-------------------------------------------------------------------------------------------------
-//0017464C ^_- 经过单元测试,功能正常
+// 0017464C ^_- 经过单元测试,功能正常
 void CPlayer::UpdateUrgency() {
-  //LOGI("CPlayer::UpdateUrgency %p", this);
-  //00174652
+  // LOGI("CPlayer::UpdateUrgency %p", this);
+  // 00174652
 }
 //-------------------------------------------------------------------------------------------------
-//001746EE
+// 001746EE
 __attribute__((noinline)) void CPlayer::GetDirMoveX() {
   LOGI("CPlayer::GetCurrentRunSpeed %p", this);
 }
 //-------------------------------------------------------------------------------------------------
-//00174702
+// 00174702
 __attribute__((noinline)) void CPlayer::GetDirMoveY() {
   LOGI("CPlayer::GetCurrentRunSpeed %p", this);
 }
 //-------------------------------------------------------------------------------------------------
-//0017471E
-void CPlayer::NewPlayerStateX(int i1, int i2, int i3) {
-}
+// 0017471E
+void CPlayer::NewPlayerStateX(int i1, int i2, int i3) {}
 //-------------------------------------------------------------------------------------------------
-//0017472E ^_^
-void CPlayer::NewPlayerStateXF(int i1, int i2, int i3, int i4) {
-}
+// 0017472E ^_^
+void CPlayer::NewPlayerStateXF(int i1, int i2, int i3, int i4) {}
 //-------------------------------------------------------------------------------------------------
-//00174778
+// 00174778
 __attribute__((noinline)) void CPlayer::NewPlayerStateGen(int i1) {
   LOGI("CPlayer::NewPlayerStateGen %p %d", this, i1);
 }
 //-------------------------------------------------------------------------------------------------
-//001747A8
-__attribute__((noinline)) void CPlayer::NewPlayerStateData(int i1, int i2, int i3, int i4) {
+// 001747A8
+__attribute__((noinline)) void CPlayer::NewPlayerStateData(int i1, int i2,
+                                                           int i3, int i4) {
   LOGI("CPlayer::NewPlayerStateData %p %d %d %d %d", this, i1, i2, i3, i4);
 }
 //-------------------------------------------------------------------------------------------------
-//001748A8 初步测试调用不到
+// 001748A8 初步测试调用不到
 void CPlayer::NewPlayerStateDataNIS(int i1, int i2, int i3, int i4) {
-  LOGI("CPlayer::NewPlayerStateDataNIS %p %d %d %d %d %d", this, i1, i2, i3, i4, tStr32_44.uc_2);
+  LOGI("CPlayer::NewPlayerStateDataNIS %p %d %d %d %d %d", this, i1, i2, i3, i4,
+       tStr32_44.uc_2);
 }
 //-------------------------------------------------------------------------------------------------
-//001749A0 ^_^
+// 001749A0 ^_^
 __attribute__((noinline)) bool CPlayer::CheckBlockedOff(int i1) {
-  //00174A0E
+  // 00174A0E
   return false;
 }
 //-------------------------------------------------------------------------------------------------
-//00174A24 没有测试到
-__attribute__((noinline)) bool CPlayer::NewPlayerStateXFKick(TPoint3D point3D1,
-                                                             int i2,
-                                                             int i3,
-                                                             TActionSetup *pActionSetup4,
-                                                             int i5,
-                                                             int i6) {
-  //LOGI("CPlayer::NewPlayerStateXFKick %p poiint %d %d %d", this, point3D1.point_0.dx_0, point3D1.point_0.dy_4, point3D1.dz_8);
-  LOGI("CPlayer::NewPlayerStateXFKick %d %d %p %d %d", i2, i3, pActionSetup4, i5, i6);
-  //loc_174ACE
+// 00174A24 没有测试到
+__attribute__((noinline)) bool CPlayer::NewPlayerStateXFKick(
+    TPoint3D point3D1, int i2, int i3, TActionSetup *pActionSetup4, int i5,
+    int i6) {
+  // LOGI("CPlayer::NewPlayerStateXFKick %p poiint %d %d %d", this,
+  // point3D1.point_0.dx_0, point3D1.point_0.dy_4, point3D1.dz_8);
+  LOGI("CPlayer::NewPlayerStateXFKick %d %d %p %d %d", i2, i3, pActionSetup4,
+       i5, i6);
+  // loc_174ACE
   return false;
 }
 //-------------------------------------------------------------------------------------------------
-//00174ADC
+// 00174ADC
 __attribute__((noinline)) void CPlayer::UpdateTake() {
   LOGI("CPlayer::UpdateTake %p", this);
 }
 //-------------------------------------------------------------------------------------------------
-//00174C9C
+// 00174C9C
 __attribute__((noinline)) void CPlayer::ControlTakeBall(int i1) {
   LOGI("CPlayer::ControlTakeBall %p %d", this, i1);
 }
 //-------------------------------------------------------------------------------------------------
-//00174FBC
-__attribute__((noinline)) void CPlayer::SetAnimControl(int i1, int i2, int i3, int i4, int i5, int i6, int i7, TActionSetup *pActionSetup) {
-  LOGI("CPlayer::SetAnimControl %p %d %d %d %d %d %d %d %p", this, i1, i2, i3, i4, i5, i6, i7, pActionSetup);
+// 00174FBC
+__attribute__((noinline)) void CPlayer::SetAnimControl(
+    int i1, int i2, int i3, int i4, int i5, int i6, int i7,
+    TActionSetup *pActionSetup) {
+  LOGI("CPlayer::SetAnimControl %p %d %d %d %d %d %d %d %p", this, i1, i2, i3,
+       i4, i5, i6, i7, pActionSetup);
 }
 //-------------------------------------------------------------------------------------------------
-//0017555C
+// 0017555C
 __attribute__((noinline)) void CPlayer::ControlFinish(int i1, int i2, int i3) {
   LOGI("CPlayer::ControlTakeBall %p %d %d %d", this, i1, i2, i3);
 }
 //-------------------------------------------------------------------------------------------------
-//00175968
-__attribute__((noinline)) void CPlayer::SetAnimTurn(int i1, int i2, int i3, int i4, int i5, int i6, int i7, TActionSetup *pActionSetup) {
-  LOGI("CPlayer::ControlTakeBall %p %d %d %d %d %d %d %d %p", this, i1, i2, i3, i4, i5, i6, i7, pActionSetup);
+// 00175968
+__attribute__((noinline)) void CPlayer::SetAnimTurn(
+    int i1, int i2, int i3, int i4, int i5, int i6, int i7,
+    TActionSetup *pActionSetup) {
+  LOGI("CPlayer::ControlTakeBall %p %d %d %d %d %d %d %d %p", this, i1, i2, i3,
+       i4, i5, i6, i7, pActionSetup);
 }
 //-------------------------------------------------------------------------------------------------
-//00175B2C
+// 00175B2C
 __attribute__((noinline)) bool CPlayer::Turn(int i1, int i2, bool b3) {
   LOGI("CPlayer::ControlTakeBall %p %d %d %d", this, i1, i2, b3);
   return true;
 }
 //-------------------------------------------------------------------------------------------------
-//00178AAC 经过单元测试,功能正常
+// 00178AAC 经过单元测试,功能正常
 __attribute__((noinline)) CPlayer &CPlayer::operator=(CPlayer const &other) {
   return *this;
 }

+ 2 - 1
jni/CPlayer.h

@@ -261,7 +261,8 @@ struct CPlayer_str_32 {
   union {
     struct {
       short ss_2C;
-      sint16 sBlend_2E;  //00170352
+      sint16 sBlend_2E;  //0017033A 
+      
     } s_2C;
     int field_2C;  //001705D4
   } u_2C;

+ 7 - 0
jni/CPlayerManager.cpp

@@ -1 +1,8 @@
 #include "CPlayerManager.h"
+#include "TGame.h"
+void CPlayerManager::SetPlayersWalking(bool b1)
+{
+    srand((unsigned) time(NULL));
+    tGame.mTLogic_6678.field_8=rand()%10;
+    LOGE("CPlayerManager::SetPlayersWalking%x",b1);
+}

+ 7 - 1
jni/FTTUPtr.h

@@ -43,7 +43,13 @@ class FTTUPtr {
 
   //   pType_0 = p;
   // };
-
+  T* GetObj()
+  {
+    return pType_0;
+  }
+  void SetObj(T*obj){
+    pType_0=obj;
+  }
   ~FTTUPtr() { delete pType_0; };
 
   FTTUPtr<T>* operator=(T* other) {

+ 1 - 1
jni/GFXSCENE.cpp

@@ -6,7 +6,7 @@
 
 CFTTVector32 GFXSCENE_vLightDir;  //004613D8
 MYSTATIC int gs_i_3A4144;
-
+ CLightingLUTSceneSettings *pLUTSceneSettings_33F448;
 //------------------------------------------------------------------------------------------------
 //0018BF4C
 void GFXSCENE_Init() {

+ 2 - 1
jni/GU.cpp

@@ -19,7 +19,8 @@ int GU_GetRot(const TPoint3D &a1, const TPoint3D &a2) {
 //-------------------------------------------------------------------------------------------------
 //0015BE38
 int GU_GetRot(const TPoint &a1, const TPoint &a2) {
-  return 0;
+  LOGE("GU_GetRot");
+  return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //0015D790

+ 5 - 0
jni/TAABB.cpp

@@ -52,6 +52,11 @@ int TAABB::Overlap(TAABB *a2) {
   int dret = 0;
   return dret;
 }
+
+int Overlap(TAABB const&a1,TAABB const&a2)
+{
+  
+}
 //-------------------------------------------------------------------------------------------------------
 //001A50D0
 float TAABB::SurfaceArea() {

+ 1 - 1
jni/TAABB.h

@@ -22,7 +22,7 @@ public:
   void Inflate(float const &a2);        // 00198E28
   int Overlap(TAABB *a2);               // 001A4E12
   float SurfaceArea();                  // 001A50D0
-
+  static int Overlap(TAABB const&a1,TAABB const&a2);               // 001A4E12
   CFTTVector32 Vector32_0;
   CFTTVector32 Vector32_C;
 };

+ 1 - 1
jni/TAnimData.h

@@ -92,7 +92,7 @@ struct TAnimData {
   ushort filed_5e;
   ushort filed_60;
   ushort filed_62;
-  ushort filed_64;
+  short s_64;
   ushort filed_66;
   ushort filed_68;
   ushort filed_6a;

+ 4 - 2
jni/XMATH.cpp

@@ -5,12 +5,14 @@
 //-------------------------------------------------------------------------------------------------
 //001F3324 ^_^ 经过单元测试,功能正常
 int xsin(int a1) {
-  return 0;
+  LOGE("xsin %x",a1);
+  return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //001F3390 ^_^
 int xcos(int a1) {
-  return xsin(a1 + 4096);
+  LOGE("xcos%x",a1);
+   return xsin(a1+0x1000);
 }
 //-------------------------------------------------------------------------------------------------
 //001F2368 //^_^ 经过单元测试,功能正常

+ 1 - 1
jni/common_type.h

@@ -25,7 +25,7 @@ typedef unsigned long ulong;    //ul
 //float  f
 //double d
 
-#define _TESTMOD_
+//#define _TESTMOD_
 
 #ifdef _TESTMOD_
 #define MYSTATIC

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

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