CPlayer.cpp 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267
  1. #include "CPlayer.h"
  2. #include "ACT.h"
  3. #include "CAnimManager.h"
  4. #include "CBall.h"
  5. #include "CBallProj.h"
  6. #include "CPlayerManager.h"
  7. #include "GL.h"
  8. #include "GM.h"
  9. #include "GPA.h"
  10. #include "GU.h"
  11. #include "SNDGAME.h"
  12. #include "TGame.h"
  13. #include "XMATH.h"
  14. #include "XSYS.h"
  15. #include "TStateList.h"
  16. int LOCO_SPEED_WALK_MIN = 0x321; // 0033E988
  17. int LOCO_SPEED_WALK_MAX = 0x321; // 0033E98C
  18. int LOCO_SPEED_WALK_AVG = 0x321; // 0033E990
  19. int LOCO_SPEED_JOG_MIN = 0xC84; // 0033E994
  20. int LOCO_SPEED_JOG_MAX = 0xE9A; // 0033E998
  21. int LOCO_SPEED_JOG_AVG = 0xD8F; // 0033E99C
  22. int LOCO_SPEED_SPRINT_MIN = 0xE9A; // 0033E9A0
  23. int LOCO_SPEED_SPRINT_MAX = 0x11BB; // 0033E9A4
  24. int LOCO_SPEED_SPRINT_AVG = 0x102A; // 0033E9A8
  25. //-------------------------------------------------------------------------------------------------
  26. // 0011DE8C
  27. void CPlayer::SetPos(int i1, int i2) {}
  28. //-------------------------------------------------------------------------------------------------
  29. // 00125D8C
  30. void CPlayer::SetPos(TPoint3D r1) {}
  31. //-------------------------------------------------------------------------------------------------
  32. // 00154314 ^_^
  33. uint64_t CPlayer::GetDistance(TPoint point1) { return 0; }
  34. //-------------------------------------------------------------------------------------------------
  35. // 0015432C ^_^
  36. int CPlayer::GetDistanceSq(TPoint point1) { return 0; }
  37. //-------------------------------------------------------------------------------------------------
  38. // 0015CBD0
  39. void CPlayer::SetPos(TPoint point1) {}
  40. //-------------------------------------------------------------------------------------------------
  41. // 0016E630
  42. void CPlayer::UpdateFE() {}
  43. //-------------------------------------------------------------------------------------------------
  44. // 0016E64E ^_- 经过单元测试,功能正常
  45. void CPlayer::UpdateRot() {
  46. // locret_16E6AC
  47. }
  48. //-------------------------------------------------------------------------------------------------
  49. // 0016E6B0 ^_- 经过单元测试,功能正常
  50. void CPlayer::UpdateHeadRot() {
  51. // LOGI("CPlayer::UpdateHeadRot %p", this);
  52. // locret_16E798
  53. }
  54. //-------------------------------------------------------------------------------------------------
  55. // 0016E7A4 ^_^
  56. void CPlayer::UpdateFinalise() {}
  57. //-------------------------------------------------------------------------------------------------
  58. // 0016E7C2 ^_^
  59. void CPlayer::Update() {}
  60. //-------------------------------------------------------------------------------------------------
  61. // 0016E81A ^_^
  62. void CPlayer::UpdateSprint() {
  63. // locret_16E870
  64. }
  65. //-------------------------------------------------------------------------------------------------
  66. // 0016E874
  67. void CPlayer::UpdateFace() { LOGI("CPlayer::UpdateFace %p", this); }
  68. //-------------------------------------------------------------------------------------------------
  69. int UNITROT_X(int x) { return xsin(x) / 16; }
  70. int UNITROT_Y(int x) { return 0 - xcos(x) / 16; }
  71. // 0016E9BC
  72. // 0016E9BC 经过更衣室和游戏第一关测试正常
  73. void CPlayer::UpdatePosVel() {
  74. TAnimData *r6_pAnimData = GetAnimData();
  75. int r5_i;
  76. if ((r6_pAnimData->u_C.s_C.uc_d & 0x20) == 0 ||
  77. tStr32_44.field_14 < r6_pAnimData->filed_20[0].filed_0) {
  78. // loc_16E9D6
  79. r5_i = GetRunSpeed();
  80. } else {
  81. r5_i = 0;
  82. }
  83. // loc_16E9E2
  84. int r0_i, r1_i;
  85. if (s_158 == 0 && ballPosPrev_4.dz_8 == 0 && Point3D_14.dz_8 == 0) {
  86. // 0016E9FC
  87. if (tStr32_44.field_8 != 3) {
  88. // 0016EA02
  89. if (tStr32_44.field_8 || tStr32_44.sBlend_2E) {
  90. // loc_16EA0C
  91. int r7_i = u_0.s_2_0.s_0;
  92. if (u_0.s_2_0.s_0 != -1) {
  93. // 0016EA14
  94. if (tStr32_44.field_8 == 4) {
  95. // 0016EA18
  96. TAnimData *r2_pAnimData =
  97. &CAnimManager::s_tAnimData[tStr32_44.field_20];
  98. if (tStr32_44.sBlend_2E &&
  99. r2_pAnimData->filed_8 == 4) { // 0016EA34
  100. // 0016EA38
  101. // sint32 r3_si = (sint32)tStr32_44.u_2C.s_2C.uBlend_2E;
  102. // r3_si=((r3_si>>26)&0x1f)+tStr32_44.u_2C.s_2C.uBlend_2E;
  103. // uint r3_ui = UBFX(r3_si, 26, 5);
  104. short r3_si = tStr32_44.sBlend_2E;
  105. r0_i = GM_BlendAngle(r6_pAnimData->s_64, r2_pAnimData->s_64,
  106. r3_si / 32);
  107. } else {
  108. // loc_16EAC2
  109. //!!!!!!!修改
  110. r0_i = r6_pAnimData->s_64;
  111. }
  112. // loc_16EAC6
  113. int r6_i = r0_i + r7_i;
  114. r7_i = xsin(r6_i) / 4 * r5_i;
  115. r0_i = xcos(r6_i);
  116. // r1_i = 0 - (r0_i * 4096);
  117. if (r1_i < 0)
  118. r1_i = 0x3FFF;
  119. else
  120. r1_i = 0;
  121. r0_i = r1_i - (r0_i * 4096);
  122. r0_i = (r0_i >> 14) * r5_i / 4096;
  123. // loc_16EAF8
  124. r1_i = r7_i / 4096;
  125. } else {
  126. // loc_16EA86
  127. r0_i = xsin(r7_i);
  128. r0_i = r0_i / 4;
  129. int r6_i = r0_i * r5_i;
  130. r0_i = xcos(r7_i); // 0016EA9E
  131. // r1_i = 0 - ((uint)r0_i << 12);
  132. // r1_i = r1_i >> 31;
  133. // r1_i = (uint)r1_i >> 18;
  134. if (r1_i < 0)
  135. r1_i = 0x3fff;
  136. else
  137. r1_i = 0;
  138. r0_i = r1_i - ((uint)r0_i << 12);
  139. // //FF003FFF
  140. r0_i = r0_i >> 14;
  141. // FFFFFC00
  142. // loc_16EAF8
  143. r1_i = r6_i / 4096;
  144. r0_i = r0_i * r5_i / 4096;
  145. }
  146. } else {
  147. // loc_16EA80
  148. r0_i = 0;
  149. r1_i = 0;
  150. }
  151. } else {
  152. // loc_16EAB8
  153. r0_i = 0;
  154. r1_i = 0;
  155. Point3D_14.point_0.dx_0 = 0;
  156. Point3D_14.point_0.dy_4 = 0;
  157. }
  158. } else {
  159. // loc_16EA52
  160. int r6_i = GU_GetRot(ballPosPrev_4.point_0, point_78);
  161. int r7_i = UNITROT_X(r6_i) * r5_i;
  162. r0_i = UNITROT_Y(r6_i) * r5_i;
  163. r1_i = r7_i / 1024;
  164. r0_i = r0_i / 1024;
  165. }
  166. // loc_16EB04
  167. int r2_i = Point3D_14.point_0.dx_0;
  168. int r3_i = Point3D_14.point_0.dy_4;
  169. Point3D_14.point_0.dx_0 = ((r2_i * 96) + (r1_i * 32)) / 128;
  170. Point3D_14.point_0.dy_4 = ((r3_i * 96) + (r0_i * 32)) / 128;
  171. }
  172. // loc_16EB30
  173. ballPosPrev_4.point_0.dx_0 += Point3D_14.point_0.dx_0;
  174. ballPosPrev_4.point_0.dy_4 += Point3D_14.point_0.dy_4;
  175. if (Point3D_14.dz_8 || ballPosPrev_4.dz_8 >= 1) {
  176. // loc_16EB4A
  177. ballPosPrev_4.dz_8 += Point3D_14.dz_8;
  178. Point3D_14.dz_8 -= 98;
  179. if (ballPosPrev_4.dz_8 > -1) {
  180. return;
  181. }
  182. }
  183. // loc_16EB5E
  184. Point3D_14.dz_8 = 0;
  185. ballPosPrev_4.dz_8 = 0;
  186. }
  187. //-------------------------------------------------------------------------------------------------
  188. // 0016EB6C ^_^
  189. void CPlayer::UpdateFuturePos() {}
  190. //-------------------------------------------------------------------------------------------------
  191. // 0016EB86
  192. __attribute__((noinline)) void CPlayer::UpdateBallInHands() {
  193. LOGI("CPlayer::UpdateBallInHands %p", this);
  194. }
  195. //-------------------------------------------------------------------------------------------------
  196. // 0016EB88
  197. void CPlayer::SetPos(int i1, int i2, int i3) {
  198. // LOGI("CPlayer::SetPos %d %d %d", i1, i2, i3);
  199. }
  200. //-------------------------------------------------------------------------------------------------
  201. // 0016EBDE
  202. void CPlayer::SetPosDest() {}
  203. //-------------------------------------------------------------------------------------------------
  204. // 0016EBE6
  205. __attribute__((noinline)) void CPlayer::SetMoveDest(int i1, int i2) {
  206. LOGI("CPlayer::SetPosDest %p %d %d", this, i1, i2);
  207. }
  208. //-------------------------------------------------------------------------------------------------
  209. // 0016EBF2
  210. void CPlayer::SetMoveDest(TPoint point1) {}
  211. //-------------------------------------------------------------------------------------------------
  212. // 0016EBFE
  213. void CPlayer::SetRotExplicit(int i1) {}
  214. //-------------------------------------------------------------------------------------------------
  215. // 0016EC02
  216. __attribute__((noinline)) void CPlayer::SetRot(int r1, bool r2) {
  217. // locret_16EC0A
  218. }
  219. //-------------------------------------------------------------------------------------------------
  220. // 0016EC0C
  221. __attribute__((noinline)) void CPlayer::SetRot(TPoint point1, bool b2) {
  222. LOGI("CPlayer::SetPosDest %p %d %d %d", this, point1.dx_0, point1.dy_4, b2);
  223. }
  224. //-------------------------------------------------------------------------------------------------
  225. // 0016EC20
  226. __attribute__((noinline)) ushort CPlayer::GetRotPoint(TPoint point1) {
  227. LOGE("CPlayer::GetRotPoint0016EC20%p%x%x", this, point1.dx_0, point1.dy_4);
  228. return rand();
  229. }
  230. //-------------------------------------------------------------------------------------------------
  231. // 0016EC34
  232. __attribute__((noinline)) void CPlayer::SetFace(int i1) {
  233. LOGE("CPlayer::SetFace%p%x",this,i1);
  234. }
  235. //-------------------------------------------------------------------------------------------------
  236. // 0016EC3A
  237. __attribute__((noinline)) void CPlayer::SetFace(int i1, int i2) {
  238. LOGI("CPlayer::SetFace %p %d %d", this, i1, i2);
  239. }
  240. //-------------------------------------------------------------------------------------------------
  241. // 0016EC48
  242. void CPlayer::SetFace(TPoint point1) {}
  243. //-------------------------------------------------------------------------------------------------
  244. // 0016EC56
  245. void CPlayer::SetFaceDest() {}
  246. //-------------------------------------------------------------------------------------------------
  247. // 0016EC7A
  248. void CPlayer::Stop(int i1) {}
  249. //-------------------------------------------------------------------------------------------------
  250. // 0016EC8E ^_^
  251. int CPlayer::GetRotDest() {
  252. // 0016EC9E
  253. return 0;
  254. }
  255. //-------------------------------------------------------------------------------------------------
  256. // 0016ECB6
  257. __attribute__((noinline)) ushort CPlayer::GetRotPoint(TPoint3D point1) {
  258. LOGE("CPlayer::GetRotPoint0016ECB6 %p %x %x %x", this, point1.point_0.dx_0,
  259. point1.point_0.dy_4, point1.dz_8);
  260. return rand();
  261. }
  262. //-------------------------------------------------------------------------------------------------
  263. // 0016ECCC ^_^
  264. int CPlayer::GetRotBall() { return 0; }
  265. //-------------------------------------------------------------------------------------------------
  266. // 0016ECF0
  267. __attribute__((noinline)) void CPlayer::GetDistance(CPlayer *pPlayer1) {
  268. LOGI("CPlayer::GetDistance %p %p", this, pPlayer1);
  269. }
  270. //-------------------------------------------------------------------------------------------------
  271. // 0016ED1C
  272. __attribute__((noinline)) void CPlayer::GetDistanceSq(CPlayer *pPlayer1) {
  273. LOGI("CPlayer::GetDistanceSq %p %p", this, pPlayer1);
  274. }
  275. //-------------------------------------------------------------------------------------------------
  276. // 0016ED40 ^_^
  277. void CPlayer::SetSpaceRot(int i1, int i2) {}
  278. //-------------------------------------------------------------------------------------------------
  279. // 0016ED8A
  280. __attribute__((noinline)) void CPlayer::GetMoveDistance() {
  281. LOGI("CPlayer::GetMoveDistance %p", this);
  282. }
  283. //-------------------------------------------------------------------------------------------------
  284. // 0016ED96 ^_^
  285. void CPlayer::Init() {}
  286. //-------------------------------------------------------------------------------------------------
  287. // 0016EDD0 经过单元测试功能正常
  288. void CPlayer::SetupGoally(int i1, TPlayerInfo *pPlayerInfo2) {
  289. // LOGI("CPlayer::SetupGoally %p %d %p", this, i1, pPlayerInfo2);
  290. }
  291. //-------------------------------------------------------------------------------------------------
  292. // 0016EEC6 经过单元测试,功能正常
  293. void CPlayer::SetupPlayer(int i1, int i2, TPlayerInfo *pPlayerInfo3) {
  294. LOGI("CPlayer::SetupPlayer %p %d %d %p", this, i1, i2, pPlayerInfo3);
  295. }
  296. //-------------------------------------------------------------------------------------------------
  297. // 0016EFBC ^_^
  298. void CPlayer::SetupStandard() {}
  299. //-------------------------------------------------------------------------------------------------
  300. // 0016F008 ^_^
  301. void CPlayer::SetupOfficial() {}
  302. //-------------------------------------------------------------------------------------------------
  303. // 0016F044 经过单元测试同,功能正常
  304. void CPlayer::Reset() {
  305. // LOGI("CPlayer::Reset %p", this);
  306. }
  307. //-------------------------------------------------------------------------------------------------
  308. // 0016F114
  309. void CPlayer::CancelHeadInputControl() {}
  310. //-------------------------------------------------------------------------------------------------
  311. // 0016F11C
  312. void CPlayer::SetHeadRotRel(int r1, bool r2) {
  313. // locret_16F12A
  314. }
  315. //-------------------------------------------------------------------------------------------------
  316. // 0016F12C
  317. TPoint3D CPlayer::GetBonePos(int i2) {
  318. TPoint3D ret;
  319. return ret;
  320. }
  321. //-------------------------------------------------------------------------------------------------
  322. // 0016F13C 经过单元测试,功能正常
  323. TPoint CPlayer::GetTimePos(int i2) {
  324. LOGI("CPlayer::GetTimePos %p %d", this, i2);
  325. TPoint retPos;
  326. retPos.dx_0=i2+rand();
  327. retPos.dy_4=i2+rand();
  328. return retPos;
  329. }
  330. //-------------------------------------------------------------------------------------------------
  331. // 0016F280 ^_^
  332. int CPlayer::AttributeInterpolate_Internal(EPlayerAttribute eAttr1, int i2,
  333. int i3, int i4, int i5, int i6) {
  334. // LOGI("CPlayer::AttributeInterpolate_Internal %p %d %d %d %d %d %d", this,
  335. // eAttr1, i2, i3, i4, i5, i6);
  336. return 0;
  337. }
  338. //-------------------------------------------------------------------------------------------------
  339. // 0016F324 ^_- 经过单元测试,功能正常
  340. void CPlayer::UpdateAction() {
  341. // LOGI("CPlayer::UpdateAction %p", this);
  342. }
  343. //-------------------------------------------------------------------------------------------------
  344. // 0016F3D4
  345. __attribute__((noinline)) int CPlayer::ActionTend(int i1, TPoint3D *pPoint3D2) {
  346. LOGI("CPlayer::UpdateAction %p %d%x", this, i1, (uint)pPoint3D2);
  347. return rand() % 4;
  348. }
  349. //-------------------------------------------------------------------------------------------------
  350. // 0016F734
  351. __attribute__((noinline)) void CPlayer::UpdateActionSlideTackleX(int i1) {
  352. LOGI("CPlayer::UpdateActionSlideTackleX %p %d", this, i1);
  353. }
  354. //-------------------------------------------------------------------------------------------------
  355. // 0016FA40
  356. void CPlayer::UpdateActionSlideTackle(int i1) {}
  357. //-------------------------------------------------------------------------------------------------
  358. // 0016FAAC ^_^
  359. void CPlayer::UpdateActionConservativeTackle(int i1) {
  360. // LOGI("CPlayer::UpdateActionConservativeTackle entry %d", i1);
  361. // locret_16FB1A
  362. }
  363. //-------------------------------------------------------------------------------------------------
  364. // 0016FB24 ^_-
  365. void CPlayer::UpdateActionGKSave(int i1) {}
  366. //-------------------------------------------------------------------------------------------------
  367. // 0016FB94
  368. __attribute__((noinline)) void CPlayer::UpdateActionDeek(int i1) {
  369. LOGI("CPlayer::UpdateActionDeek %p %d", this, i1);
  370. }
  371. //-------------------------------------------------------------------------------------------------
  372. // 0016FE80 ^_^
  373. void CPlayer::UpdateActionControl(int i1) {
  374. // LOGI("CPlayer::UpdateActionControl %p %d", this, i1);
  375. }
  376. //-------------------------------------------------------------------------------------------------
  377. // 0016FF24 ^_^
  378. void CPlayer::UpdateActionKick(int i1) {}
  379. //-------------------------------------------------------------------------------------------------
  380. // 0016FF78 ^_-
  381. void CPlayer::UpdateActionGKKick(int i1) {}
  382. //-------------------------------------------------------------------------------------------------
  383. // 0016FFC8
  384. __attribute__((noinline)) void CPlayer::ClearAction() {
  385. LOGI("CPlayer::ClearAction %p", this);
  386. }
  387. //-------------------------------------------------------------------------------------------------
  388. // 0016FFD4 经过单元测试,功能正常
  389. bool CPlayer::ActionCheckIsStillValidRange(int i1, int i2, int i3) {
  390. // LOGI("CPlayer::ActionCheckIsStillValidRange %p %d %d %d", this, i1, i2,
  391. // i3);
  392. return true;
  393. }
  394. //-------------------------------------------------------------------------------------------------
  395. // 001700C0 ^_^
  396. void CPlayer::KickFail() {}
  397. //-------------------------------------------------------------------------------------------------
  398. // 001700E4 ^_^
  399. void CPlayer::ActionUpdateDynamic() {
  400. // locret_170126
  401. }
  402. //-------------------------------------------------------------------------------------------------
  403. // 0017012C //???
  404. void CPlayer::ActionTendSetupDest(TPoint3D point3D1) {
  405. // LOGI("CPlayer::ActionTendSetupDest %p %d %d %d", this,
  406. // point3D1.point_0.dx_0, point3D1.point_0.dy_4, point3D1.dz_8); TAnimData *
  407. // r10_pAnimData = GetAnimData();
  408. }
  409. //-------------------------------------------------------------------------------------------------
  410. // 001701D0 ^_^
  411. void CPlayer::ActionTendSetup(TActionSetup *pActionSetup01, EACTION eAction2) {}
  412. //-------------------------------------------------------------------------------------------------
  413. // 00170242
  414. TPoint3D CPlayer::ActionGetPosFromDest() {
  415. TPoint3D ret_p3D;
  416. return ret_p3D;
  417. }
  418. //-------------------------------------------------------------------------------------------------
  419. // 001702B0 经过单元测试,功能正常
  420. void CPlayer::Animate(int i1) {
  421. // LOGI("CPlayer::Animate %d", i1);
  422. }
  423. //-------------------------------------------------------------------------------------------------
  424. // 0017039C ^_- 经过单元测试,功能正常
  425. void CPlayer::ApplyRootBoneOfs(TAnimData *pAniData1, int i2) {
  426. // LOGI("CPlayer::ApplyRootBoneOfs %d", i2);
  427. LOGE("ApplyRootBoneOfs%p%x%x", this, (uint)pAniData1, i2);
  428. }
  429. //-------------------------------------------------------------------------------------------------
  430. // 00170440 ^_-
  431. void CPlayer::SetNextState(TAnimData *pAnimData1) {
  432. // LOGI("CPlayer::SetNextState %p %p", this, pAnimData1);
  433. }
  434. //-------------------------------------------------------------------------------------------------
  435. // 001704DC ^_^
  436. __attribute__((noinline)) TAnimData *CPlayer::GetAnimData() {
  437. LOGE("TAnimData *CPlayer::GetAnimData");
  438. return (TAnimData *)rand();
  439. }
  440. //-------------------------------------------------------------------------------------------------
  441. // 001704F4 经过单元测试,功能正常
  442. void CPlayer::SetAnim(int i1) {
  443. if (CAnimManager::s_tAnimData[tStr32_44.field_10].filed_54 !=
  444. nullptr) { // 00170514
  445. // 00170516
  446. GetRootBoneMove(&Point3D_14.point_0);
  447. int r7_i = XMATH_Mag2D(&Point3D_14);
  448. int r1_i = GetSprintSpeed();
  449. if (r7_i > r1_i) { // 00170532
  450. // 00170534
  451. XMATH_Normalize(&Point3D_14, r1_i);
  452. }
  453. }
  454. ushort r9_us;
  455. // loc_17053C
  456. if (tStr32_44.sBlend_2E > 4096) {
  457. // 00170546
  458. r9_us = GetTrueRot() - tStr32_44.s_2C;
  459. tStr32_44.sBlend_2E = 0;
  460. tStr32_44.field_10 = tStr32_44.field_20;
  461. tStr32_44.field_14 = tStr32_44.field_24;
  462. tStr32_44.s_18 = tStr32_44.s_2A;
  463. u_0.s_2_0.s_2 = r9_us;
  464. } else {
  465. // loc_170572
  466. r9_us = u_0.s_2_0.s_2;
  467. }
  468. int r0_i;
  469. // loc_170578
  470. u_0.s_2_0.s_2 = GetTrueRot();
  471. if (field_10 >= 2) {
  472. // 00170586
  473. tStr32_44.field_20 = tStr32_44.field_10;
  474. tStr32_44.field_24 = tStr32_44.field_14;
  475. TAnimData *r8_pAnimData = &CAnimManager::s_tAnimData[tStr32_44.field_10];
  476. if (r8_pAnimData->filed_8 == 4) {
  477. // 001705AE
  478. r0_i = ((int)(((uint)(XMATH_Mag(&Point3D_14.point_0))) * 2)) /
  479. ((short)r8_pAnimData->us_18);
  480. r0_i *= tStr32_44.field_1C;
  481. r0_i /= 128;
  482. } else {
  483. // loc_1705D8
  484. r0_i = tStr32_44.field_1C;
  485. }
  486. // loc_1705DA
  487. tStr32_44.s_28 = r0_i;
  488. tStr32_44.sBlend_2E = 8192;
  489. // LOGE("tStr32_44.u_2C.s_2C.sBlend_2E=%x",tStr32_44.u_2C.s_2C.sBlend_2E);
  490. tStr32_44.s_2A = tStr32_44.s_18;
  491. tStr32_44.s_2C = (((8192 - r9_us) + u_0.s_2_0.s_2) & 0x3FFF) - 0x2000;
  492. } else {
  493. // loc_1705CE
  494. tStr32_44.s_2C = 0;
  495. tStr32_44.sBlend_2E = 0;
  496. }
  497. // loc_170604
  498. tStr32_44.field_10 = i1; // 0017060C
  499. tStr32_44.field_14 = 0;
  500. TAnimData *r5_pAnimData = &CAnimManager::s_tAnimData[i1];
  501. tStr32_44.s_C = r5_pAnimData->filed_6e;
  502. // 00170614
  503. if (tStr32_44.field_8 == 4) {
  504. // 00170624
  505. if (us_122) {
  506. // 0017062A
  507. r0_i = (131072 / us_122) * 512;
  508. } else {
  509. // loc_170642
  510. r0_i = 0x10000;
  511. }
  512. // loc_170646
  513. tStr32_44.field_1C = (int)(r5_pAnimData->filed_10 * r0_i) >> 16;
  514. // 00170648
  515. if (field_10 <= 1) {
  516. // 00170656
  517. if (!r5_pAnimData->filed_9) {
  518. // 0017065A
  519. tStr32_44.field_14 = XSYS_Random(0x10000);
  520. }
  521. } // loc_170666
  522. } else {
  523. // 00170636
  524. tStr32_44.field_1C = *(short *)&r5_pAnimData->filed_10;
  525. if (!tStr32_44.field_8) {
  526. // loc_170656
  527. // 00170656
  528. if (!r5_pAnimData->filed_9) {
  529. // 0017065A
  530. tStr32_44.field_14 = XSYS_Random(0x10000);
  531. }
  532. }
  533. }
  534. // loc_170666
  535. if (r5_pAnimData->us_1C) {
  536. // 0017066A
  537. u_0.s_2_0.s_2 = (u_0.s_2_0.s_2 - r5_pAnimData->us_1C) & 0x3FFF;
  538. }
  539. // loc_170674
  540. if (r5_pAnimData->filed_54) {
  541. // 00170678
  542. ApplyRootBoneOfs(r5_pAnimData, -1);
  543. }
  544. // loc_170684
  545. UpdateAnimCalcs();
  546. }
  547. //-------------------------------------------------------------------------------------------------
  548. // 00170694 ^_- 经过单元测试,功能正常
  549. void CPlayer::GetRootBoneMove(TPoint *pPoint1) {
  550. LOGI("CPlayer::GetRootBoneMove %p %p", this, pPoint1);
  551. }
  552. //-------------------------------------------------------------------------------------------------
  553. // 0017077C ^_- 经过单元测试,功能正常
  554. short CPlayer::GetTrueRot() {
  555. LOGI("CPlayer::GetRootBoneMove %p ", this);
  556. return rand() & 0x3fff;
  557. }
  558. //-------------------------------------------------------------------------------------------------
  559. // 00170820
  560. __attribute__((noinline)) bool CPlayer::AnimBlendNeeded() { return false; }
  561. //-------------------------------------------------------------------------------------------------
  562. // 0017082C ^_- 经过单元测试,功能正常
  563. void CPlayer::UpdateAnimCalcs() {
  564. // LOGI("CPlayer::UpdateAnimCalcs entry");
  565. LOGI("CPlayer::UpdateAnimCalcs %p ", this);
  566. // loc_1708C8
  567. }
  568. //-------------------------------------------------------------------------------------------------
  569. // 001708D0
  570. void CPlayer::SetTrophyData(ETrophyPos e1, ushort us2, ushort us3) {}
  571. //-------------------------------------------------------------------------------------------------
  572. // 001708DE
  573. __attribute__((noinline)) void CPlayer::ClearBlend() {}
  574. //-------------------------------------------------------------------------------------------------
  575. // 001708E8 后面的代码好像与
  576. // NIS的测试环境,通过单元测试,发现后面的代码不写,不影响逻辑
  577. void CPlayer::UpdateJostlePoint() {
  578. if (!tStr32_44.uc_1) return;
  579. // 001708F4
  580. if (tStr32_44.field_8 != 4) {
  581. if (tStr32_44.field_8 || tStr32_44.s_C != 5 || tStr58_A0.field_4 <= 1024)
  582. return;
  583. // 00170910
  584. // SetAnimFromStateLoco(int i1, int i2, int i3) {
  585. SetAnimFromStateLoco(-1, -1, 0);
  586. return;
  587. }
  588. // loc_170926
  589. if (tStr32_44.s_C != 40) return;
  590. // 0017092E
  591. TAnimData *r6_pAnimData = &CAnimManager::s_tAnimData[tStr32_44.field_10];
  592. // 00170944
  593. if (r6_pAnimData->s_64) return;
  594. //??? 后面的代码好像与
  595. // NIS的测试环境,通过单元测试,发现后面的代码不写,不影响逻辑
  596. }
  597. //-------------------------------------------------------------------------------------------------
  598. // 00170A14 ^_^
  599. bool CPlayer::SetReaction(int i1, int i2, int i3) { return true; }
  600. //-------------------------------------------------------------------------------------------------
  601. // 00170A50 经过单元测试,功能正常
  602. void CPlayer::UpdateAnimation() {
  603. // LOGI("CPlayer::UpdateAnimation %p", this);
  604. }
  605. //-------------------------------------------------------------------------------------------------
  606. // 00170BD0 ^_^
  607. void CPlayer::OverrideAnimFrame(int i1) {}
  608. //-------------------------------------------------------------------------------------------------
  609. // 00170C0C
  610. __attribute__((noinline)) void CPlayer::EnableIdleAnims(bool b1) {}
  611. //-------------------------------------------------------------------------------------------------
  612. // 00170C14 经过单元测试,功能正常
  613. void CPlayer::SetAnimFromStateGen(int i1, int i2, int i3) {
  614. LOGI("CPlayer::SetAnimFromStateGen %p %d %d %d", this, i1, i2, i3);
  615. }
  616. //-------------------------------------------------------------------------------------------------
  617. // 00170D10 经过单元测试,功能正常
  618. void CPlayer::SetAnimFromStateI() {
  619. // 00170D16
  620. if (tStr32_44.field_8) {
  621. // 00170D18
  622. if (tStr32_44.field_8 != 4) {
  623. if (tStr32_44.field_8 == 11) {
  624. // 00170D20
  625. if (tGame.mTLogic_6678.field_8 == 1) {
  626. // 00170D3A
  627. // loc_170DA8
  628. SetAnimFromStateGen(
  629. GetRotPoint(cBall.point3D_84),
  630. CAnimManager::s_tAnimData[tStr32_44.field_10].s_76, 0x200);
  631. } else {
  632. // loc_170D98
  633. SetAnimFromStateGen(
  634. GetRotPoint(g_vZero),
  635. CAnimManager::s_tAnimData[tStr32_44.field_10].s_76, 0x200);
  636. }
  637. } else {
  638. // loc_170D82
  639. SetAnimFromStateGen(-1, -1, 0);
  640. tStr32_44.field_14 = 0;
  641. }
  642. } else { // loc_170D6C
  643. SetAnimFromStateLoco(-1, -1, 0x180);
  644. tStr32_44.field_14 = 0;
  645. }
  646. } else {
  647. // loc_170D4E
  648. if (u_0.s_2_0.s_0 + 1 != 0) {
  649. // 00170D56
  650. if (Turn(u_0.s_2_0.s_0, u_0.s_2_0.s_0, false)) {
  651. // locret_170D96
  652. return;
  653. }
  654. // 00170D62
  655. tStr32_44.field_8 = 4;
  656. SetAnimFromStateLoco(-1, -1, 0x180);
  657. tStr32_44.field_14 = 0x2000;
  658. } else {
  659. // loc_170D6C
  660. SetAnimFromStateLoco(-1, -1, 0x180);
  661. tStr32_44.field_14 = 0;
  662. }
  663. }
  664. }
  665. //-------------------------------------------------------------------------------------------------
  666. // 00170DD4 ^_^
  667. void CPlayer::GetRootBoneOfs(TPoint *pPoint1, TAnimData *pAnimData2) {}
  668. //-------------------------------------------------------------------------------------------------
  669. // 00170E50 ^_^
  670. void CPlayer::UpdateActOKTime() {}
  671. //-------------------------------------------------------------------------------------------------
  672. // 00170E98 ^_^
  673. int CPlayer::GetActionTime() { return 0; }
  674. //-------------------------------------------------------------------------------------------------
  675. // 00170EC8
  676. __attribute__((noinline)) void CPlayer::GetAnimTime() {
  677. LOGI("CPlayer::GetAnimTime %p", this);
  678. }
  679. //-------------------------------------------------------------------------------------------------
  680. // 00170EE0
  681. __attribute__((noinline)) int CPlayer::SetAnimFromStateAction(
  682. int i1, int i2, int i3, int i4, int i5, int i6, TActionSetup *pActionSetup7,
  683. int i8, int i9) {
  684. LOGI("CPlayer::SetAnimFromStateAction %p %d %d %d %d %d %d %p %d %d", this,
  685. i1, i2, i3, i4, i5, i6, pActionSetup7, i8, i9);
  686. return 0;
  687. }
  688. //-------------------------------------------------------------------------------------------------
  689. // 001714E4
  690. __attribute__((noinline)) void CPlayer::GetAnimActionPoint(
  691. TPoint *pPoint1, TAnimData *pAnimData2, int i3, int i4) {
  692. LOGI("CPlayer::GetAnimTime %p %p %p %d %d", this, pPoint1, pAnimData2, i3,
  693. i4);
  694. }
  695. //-------------------------------------------------------------------------------------------------
  696. // 00171534 没有测试到
  697. void CPlayer::GetActionPoint(TPoint3D *pPoint3D1) {
  698. LOGI("CPlayer::GetActionPoint %p %p", this, pPoint3D1);
  699. }
  700. //-------------------------------------------------------------------------------------------------
  701. // 001715EC 经过单元测试,功能正常
  702. void CPlayer::GetBonePosition(int i1, TPoint3D *pPoint3D2) {
  703. // LOGI("CPlayer::GetBonePosition %p %p", this, pPoint3D2);
  704. }
  705. //-------------------------------------------------------------------------------------------------
  706. // 00171798
  707. __attribute__((noinline)) void CPlayer::GetHandPosition(TPoint3D *pPoint3D1,
  708. bool b2) {
  709. LOGI("CPlayer::GetAnimTime %p %p %d", this, pPoint3D1, b2);
  710. }
  711. //-------------------------------------------------------------------------------------------------
  712. // 001717A8 ^_^ 经过单元测试,功能正常
  713. TPoint3D CPlayer::GetHandsPosition(int i1) {
  714. TPoint3D ret;
  715. return ret;
  716. }
  717. //-------------------------------------------------------------------------------------------------
  718. // 00171868
  719. __attribute__((noinline)) void CPlayer::GetBoneOrientation(
  720. int i1, TPoint3D *pPoint3D2) {
  721. LOGI("CPlayer::GetAnimTime %p %d %p", this, i1, pPoint3D2);
  722. }
  723. //-------------------------------------------------------------------------------------------------
  724. // 00172634 ^_^
  725. int CPlayer::GetDistanceSq(TPoint3D point3D1) { return 0; }
  726. //-------------------------------------------------------------------------------------------------
  727. // 00172EB2 ^_^
  728. bool CPlayer::Fell(TPoint point1, bool b3) { return true; }
  729. //-------------------------------------------------------------------------------------------------
  730. // 00172EE4
  731. bool CPlayer::Fell(int i1, bool b2) {
  732. bool r4_bret = rand();
  733. // loc_172FEE
  734. LOGE("CPlayer::Fell%x%x%p",i1,b2,this);
  735. return r4_bret;
  736. }
  737. //-------------------------------------------------------------------------------------------------
  738. // 00172F78 ^_-
  739. bool CPlayer::Trip(int i1, int i2) {
  740. bool r4_bret = rand();
  741. // loc_172FEE
  742. LOGE("CPlayer::Trip%x%x%p",i1,i2,this);
  743. return r4_bret;
  744. }
  745. //-------------------------------------------------------------------------------------------------
  746. // 00172FF8 ^_^
  747. void CPlayer::UpdateLogic() {
  748. if (NIS_Active()) return;
  749. // 00173002
  750. UpdateJostlePoint();
  751. UpdateIdle();
  752. UpdateReactions();
  753. UpdateBallReactions();
  754. UpdateFall();
  755. if (!uc_88) return;
  756. // 00173026
  757. if (cBall.ballPosPrev_4.dz_8 <= us_122 * 72 &&
  758. tStr58_A0.u_50.ui_50 <= 0x28000) {
  759. // 00173046
  760. if (tGame.field_6C38 <= 4 && cBall.speedXY_28 > 0x14DC) {
  761. uc_88 = 0;
  762. } else if (tGame.mTLogic_6678.team_40 == tStr32_44.uc_0) {
  763. uc_88 = 0;
  764. }
  765. } else {
  766. uc_88 = 0;
  767. }
  768. // loc_17306E
  769. }
  770. //-------------------------------------------------------------------------------------------------
  771. // 00173080 ^_^
  772. void CPlayer::UpdateIdle() {
  773. // LOGI("CPlayer::UpdateIdle %p", this);
  774. if (b_30) return;
  775. // 0017308C
  776. if (tGame.field_6C38 >= 6 && !tStr32_44.field_8) {
  777. // 001730A0
  778. // tStr32_44.s_C > 6 ||
  779. if ((tStr32_44.s_C != 6 && tStr32_44.s_C != 3 && tStr32_44.s_C != 2)) {
  780. // loc_1730B4
  781. field_120++;
  782. if ((int)field_120 >= 241) {
  783. // 001730CC
  784. if (XSYS_Random(0x12C) || uc_88) {
  785. // loc_1730D6
  786. if (tStr32_44.s_C == 6 || tStr32_44.s_C == 1) {
  787. // 001730E2
  788. NewPlayerStateX(0, -1, 0);
  789. } // loc_173104
  790. } else {
  791. // loc_173178
  792. NewPlayerStateX(0, -1, 0xB);
  793. }
  794. } //-> loc_173104
  795. } else {
  796. field_120 = 0;
  797. }
  798. } else {
  799. // loc_1730F2
  800. if (tStr32_44.field_8 == 14 && tStr32_44.s_C == 6) {
  801. // loc_173170
  802. field_120++;
  803. } else {
  804. // 001730FE
  805. field_120 = 0;
  806. }
  807. }
  808. // loc_1730FE
  809. // loc_173100
  810. // loc_173104
  811. if (tGame.mTLogic_6678.field_8 == 1 && tGame.mTLogic_6678.field_10 == 1) {
  812. // loc_17311A
  813. if (tGame.mTLogic_6678.field_38 <= 29 && tStr32_44.field_8 == 14 &&
  814. tStr32_44.field_14 > (tStr32_44.field_1C * 30)) {
  815. // 00173138
  816. NewPlayerStateX(0, -1, 0);
  817. if (tGame.mTLogic_6678.field_38 >= 61 && tStr32_44.field_8 == 0 &&
  818. tStr32_44.s_C == 2) {
  819. // 0017315E
  820. NewPlayerStateX(0, -1, 0);
  821. }
  822. }
  823. }
  824. // 00173118
  825. return;
  826. }
  827. //-------------------------------------------------------------------------------------------------
  828. // 00173188 ^_^
  829. void CPlayer::UpdateReactions() {
  830. if (field_8C) {
  831. // 00173192
  832. if (s_32) {
  833. // 00173196
  834. field_8C--;
  835. } else {
  836. // loc_17319A
  837. NewPlayerStateDataNIS(s_90, s_92, 0, s_94);
  838. field_8C = 0;
  839. }
  840. // loc_1731B2
  841. }
  842. // locret_1731B6
  843. }
  844. //-------------------------------------------------------------------------------------------------
  845. // 001731B8
  846. __attribute__((noinline)) void CPlayer::UpdateBallReactions() {
  847. UpdateTake();
  848. UpdateAvoid();
  849. }
  850. //-------------------------------------------------------------------------------------------------
  851. // 001731CA ^_-
  852. void CPlayer::UpdateFall() {
  853. if (tStr32_44.field_8 != 10) return;
  854. // 001731D6
  855. TAnimData *r1_data = GetAnimData();
  856. // 001731E2
  857. if (tStr32_44.s_C == 10) {
  858. // 001731E6
  859. SetNextState(r1_data);
  860. } else {
  861. // 001731F0
  862. if (tStr32_44.field_14 >= r1_data->filed_20[0].filed_0 &&
  863. tStr32_44.field_14 <
  864. (r1_data->filed_20[0].filed_0 + tStr32_44.field_1C)) {
  865. tStr32_44.s_18 = 1;
  866. }
  867. }
  868. // locret_173206
  869. }
  870. //-------------------------------------------------------------------------------------------------
  871. // 00173208
  872. __attribute__((noinline)) void CPlayer::UpdateAvoid() {
  873. LOGI("CPlayer::UpdateAvoid %p", this);
  874. }
  875. //-------------------------------------------------------------------------------------------------
  876. // 001733C4
  877. __attribute__((noinline)) void CPlayer::IsWalking() {
  878. LOGI("CPlayer::IsWalking %p", this);
  879. }
  880. //-------------------------------------------------------------------------------------------------
  881. // 001733EC
  882. bool CPlayer::IsSprinting() {
  883. // locret_173412
  884. return false;
  885. }
  886. //-------------------------------------------------------------------------------------------------
  887. // 00173414
  888. __attribute__((noinline)) void CPlayer::IsStanding() {
  889. LOGI("CPlayer::IsStanding %p", this);
  890. }
  891. //-------------------------------------------------------------------------------------------------
  892. // 0017341E
  893. __attribute__((noinline)) void CPlayer::IsFacing(int i1, int i2) {
  894. LOGI("CPlayer::IsFacing %p %d %d", this, i1, i2);
  895. }
  896. //-------------------------------------------------------------------------------------------------
  897. // 00173442
  898. __attribute__((noinline)) void CPlayer::IsAtDest(TPoint *pPoint1, int i2) {
  899. LOGI("CPlayer::IsAtDest %p %d %d", this, (int)pPoint1, i2);
  900. }
  901. //-------------------------------------------------------------------------------------------------
  902. // 0017346C
  903. __attribute__((noinline)) void CPlayer::UpdateMovement() {
  904. LOGI("CPlayer::UpdateMovement %p", this);
  905. }
  906. //-------------------------------------------------------------------------------------------------
  907. // 00173DBA ^_^
  908. void CPlayer::SetStateStand(bool b1) {}
  909. //-------------------------------------------------------------------------------------------------
  910. // 00173DD4 ^_^
  911. void CPlayer::SetStateLoco() {}
  912. //-------------------------------------------------------------------------------------------------
  913. // 00173E58
  914. __attribute__((noinline)) void CPlayer::SetAnimFromStateLoco(int i1, int i2,
  915. int i3) {
  916. LOGI("CPlayer::SetAnimFromStateLoco %p %d %d %d", this, i1, i2, i3);
  917. }
  918. //-------------------------------------------------------------------------------------------------
  919. // 00174074
  920. void CPlayer::CheckAvoid(TPoint *pPoint1, int i2, int i3) {
  921. // LOGI("CPlayer::CheckAvoid %p %p %d %d", this, pPoint1, i2, i3);
  922. // tStr32_44.uc_1
  923. }
  924. //-------------------------------------------------------------------------------------------------
  925. // 001741FC
  926. __attribute__((noinline)) void CPlayer::SetConstantSpeed(bool b1) {
  927. LOGI("CPlayer::SetConstantSpeed %p %d", this, b1);
  928. }
  929. //-------------------------------------------------------------------------------------------------
  930. // 00174204 ^_^
  931. int CPlayer::GetAverageRunSpeed() { return 0; }
  932. //-------------------------------------------------------------------------------------------------
  933. // 00174260 ^_^
  934. void CPlayer::SetAverageRunSpeed(int i1) {}
  935. //-------------------------------------------------------------------------------------------------
  936. // 00174290
  937. void CPlayer::GetInterceptRunSpeed() {}
  938. //-------------------------------------------------------------------------------------------------
  939. // 00174294
  940. __attribute__((noinline)) void CPlayer::GetWalkSpeed() {
  941. LOGI("CPlayer::GetWalkSpeed %p", this);
  942. }
  943. //-------------------------------------------------------------------------------------------------
  944. // 001742B4 ^_^
  945. int CPlayer::GetSprintSpeed() {
  946. LOGE("this=%xCPlayer::GetRunSpeed", (uint)this);
  947. return rand();
  948. }
  949. //-------------------------------------------------------------------------------------------------
  950. // 00174310 ^_^
  951. int CPlayer::GetTargetRunSpeed() { return 0; }
  952. //-------------------------------------------------------------------------------------------------
  953. // 0017432C //^_^
  954. int CPlayer::GetCurrentRunSpeed() {
  955. // LOGI("CPlayer::GetCurrentRunSpeed %p", this);
  956. return 0;
  957. }
  958. //-------------------------------------------------------------------------------------------------
  959. // 00174458 ^_-
  960. int CPlayer::GetRunSpeed() {
  961. int dret = 0;
  962. // loc_1744BA
  963. LOGE("this=%xCPlayer::GetRunSpeed", (uint)this);
  964. return rand() + 0x409360;
  965. }
  966. //-------------------------------------------------------------------------------------------------
  967. // 001744CC
  968. int CPlayer::AttributeInterpolate(EPlayerAttribute eAttr1, int i2, int i3) {
  969. return 0;
  970. }
  971. //-------------------------------------------------------------------------------------------------
  972. // 001744E2
  973. float CPlayer::GetMoveSpeed() { return 0.1f; }
  974. //-------------------------------------------------------------------------------------------------
  975. // 001744E8 ^_^
  976. int CPlayer::GetInterceptMaxHeight() {
  977. LOGE("%pGetInterceptMaxHeight",this);
  978. return rand(); }
  979. //-------------------------------------------------------------------------------------------------
  980. // 00174530 ^_^
  981. void CPlayer::SetUrgency(int i1) {
  982. LOGI("CPlayer::SetUrgency %d %d", i1, s_82);
  983. }
  984. //-------------------------------------------------------------------------------------------------
  985. // 00174550 经过单元测试,功能正常
  986. void CPlayer::SetUrgencyTime(int i1, bool b2) {
  987. // LOGI("CPlayer::SetUrgencyTime %p %d", this, i1);
  988. }
  989. //-------------------------------------------------------------------------------------------------
  990. // 0017464C ^_- 经过单元测试,功能正常
  991. void CPlayer::UpdateUrgency() {
  992. // LOGI("CPlayer::UpdateUrgency %p", this);
  993. // 00174652
  994. }
  995. //-------------------------------------------------------------------------------------------------
  996. // 001746EE
  997. __attribute__((noinline)) void CPlayer::GetDirMoveX() {
  998. LOGI("CPlayer::GetCurrentRunSpeed %p", this);
  999. }
  1000. //-------------------------------------------------------------------------------------------------
  1001. // 00174702
  1002. __attribute__((noinline)) void CPlayer::GetDirMoveY() {
  1003. LOGI("CPlayer::GetCurrentRunSpeed %p", this);
  1004. }
  1005. //-------------------------------------------------------------------------------------------------
  1006. // 0017471E
  1007. void CPlayer::NewPlayerStateX(int i1, int i2, int i3) {}
  1008. //-------------------------------------------------------------------------------------------------
  1009. // 0017472E ^_^
  1010. void CPlayer::NewPlayerStateXF(int i1, int i2, int i3, int i4) {}
  1011. //-------------------------------------------------------------------------------------------------
  1012. // 00174778
  1013. __attribute__((noinline)) void CPlayer::NewPlayerStateGen(int i1) {
  1014. LOGI("CPlayer::NewPlayerStateGen %p %d", this, i1);
  1015. }
  1016. //-------------------------------------------------------------------------------------------------
  1017. // 001747A8
  1018. __attribute__((noinline)) void CPlayer::NewPlayerStateData(int i1, int i2,
  1019. int i3, int i4) {
  1020. LOGI("CPlayer::NewPlayerStateData %p %d %d %d %d", this, i1, i2, i3, i4);
  1021. }
  1022. //-------------------------------------------------------------------------------------------------
  1023. // 001748A8 初步测试调用不到
  1024. void CPlayer::NewPlayerStateDataNIS(int i1, int i2, int i3, int i4) {
  1025. LOGI("CPlayer::NewPlayerStateDataNIS %p %d %d %d %d %d", this, i1, i2, i3, i4,
  1026. tStr32_44.uc_2);
  1027. }
  1028. //-------------------------------------------------------------------------------------------------
  1029. // 001749A0 ^_^
  1030. __attribute__((noinline)) bool CPlayer::CheckBlockedOff(int i1) {
  1031. // 00174A0E
  1032. return false;
  1033. }
  1034. //-------------------------------------------------------------------------------------------------
  1035. // 00174A24 没有测试到
  1036. __attribute__((noinline)) bool CPlayer::NewPlayerStateXFKick(
  1037. TPoint3D point3D1, int i2, int i3, TActionSetup *pActionSetup4, int i5,
  1038. int i6) {
  1039. // LOGI("CPlayer::NewPlayerStateXFKick %p poiint %d %d %d", this,
  1040. // point3D1.point_0.dx_0, point3D1.point_0.dy_4, point3D1.dz_8);
  1041. LOGI("CPlayer::NewPlayerStateXFKick %d %d %p %d %d", i2, i3, pActionSetup4,
  1042. i5, i6);
  1043. // loc_174ACE
  1044. return false;
  1045. }
  1046. //-------------------------------------------------------------------------------------------------
  1047. // 00174ADC
  1048. __attribute__((noinline)) void CPlayer::UpdateTake() {
  1049. LOGI("CPlayer::UpdateTake %p", this);
  1050. }
  1051. //-------------------------------------------------------------------------------------------------
  1052. // 00174C9C
  1053. __attribute__((noinline)) void CPlayer::ControlTakeBall(int i1) {
  1054. LOGI("CPlayer::ControlTakeBall %p %d", this, i1);
  1055. }
  1056. //-------------------------------------------------------------------------------------------------
  1057. // 00174FBC
  1058. __attribute__((noinline)) void CPlayer::SetAnimControl(
  1059. int i1, int i2, int i3, int i4, int i5, int i6, int i7,
  1060. TActionSetup *pActionSetup) {
  1061. LOGI("CPlayer::SetAnimControl %p %d %d %d %d %d %d %d %p", this, i1, i2, i3,
  1062. i4, i5, i6, i7, pActionSetup);
  1063. }
  1064. //-------------------------------------------------------------------------------------------------
  1065. // 0017555C
  1066. __attribute__((noinline)) void CPlayer::ControlFinish(int i1, int i2, int i3) {
  1067. LOGI("CPlayer::ControlTakeBall %p %d %d %d", this, i1, i2, i3);
  1068. }
  1069. //-------------------------------------------------------------------------------------------------
  1070. // 00175968
  1071. int CPlayer::SetAnimTurn(int i1, int i2, int i3, int i4, int i5, int i6, int i7, TActionSetup *pActionSetup) {
  1072. short i_r6; // r6
  1073. unsigned int i_r11; // r11
  1074. unsigned int v12; // r2
  1075. TStateList *i_r5; // r5
  1076. int i_r4; // r4
  1077. int i_r7; // r7
  1078. int iVal_r6; // r6
  1079. TAnimData *p_tAnimData_r3; // r3
  1080. int i_r2; // r2
  1081. int v24; // r2
  1082. short v27; // r2
  1083. int i_value3_r3; // r3
  1084. int i_value4_r1; // r1
  1085. int i_value2_r2; // r2
  1086. int i_value5_r2; // r2
  1087. int i_tmp_r1; // r1
  1088. int i_tmp1_r0; // r0
  1089. int result; // r0
  1090. int i_value1_4; // [sp+4h] [bp-4Ch]
  1091. int i_C; // [sp+Ch] [bp-44h]
  1092. short i_10; // [sp+10h] [bp-40h]
  1093. short i_14; // [sp+14h] [bp-3Ch]
  1094. short i_18; // [sp+18h] [bp-38h]
  1095. unsigned int i_1C; // [sp+1Ch] [bp-34h]
  1096. CPlayer *pThis; // [sp+20h] [bp-30h]
  1097. int i_24; // [sp+24h] [bp-2Ch]
  1098. short i_28; // [sp+28h] [bp-28h]
  1099. //0017596C
  1100. i_28 = i1 + 8192 - i2;
  1101. i_r6 = 8192 - i2 + i3;
  1102. i_10 = i4 + 8192 - i2;
  1103. i_r11 = (i7 >> 7) & 0x200;
  1104. v12 = this->tStr32_44.field_8;
  1105. this->tStr32_44.field_8 = 5;
  1106. i_14 = i4 + 8192 - i3;
  1107. i_1C = v12;
  1108. i_r5 = CAnimManager::StateInfoGet(5); //call 001564D8
  1109. i_r4 = CAnimManager::StateInfoGetAnimCount(this->tStr32_44.field_8); //call 001564EC
  1110. i_24 = -1;
  1111. i_r7 = 0;
  1112. i_C = 0x7FFFFFFF;
  1113. i_18 = i_r6 + 0x2000;
  1114. //001759D2
  1115. for( int i = 0; i < i_r4 ;i++) //001759E4
  1116. {
  1117. //001759E8
  1118. iVal_r6 = i_r5->filed_8[i_r7++];
  1119. p_tAnimData_r3 = &CAnimManager::s_tAnimData[iVal_r6];
  1120. i_r2 = p_tAnimData_r3->u_C.filed_C;
  1121. //001759FE
  1122. if (i_r11 == (i_r2 & i_r11) && (i_r2 & (i_r11 ^ 0x200)) == 0) //2个条件合并
  1123. {
  1124. //00175A0C
  1125. if (p_tAnimData_r3->filed_74 == i5 && (short)p_tAnimData_r3->s_76 == i6) //2个条件合并
  1126. {
  1127. v24 = 0;
  1128. if (i5 >= 2) //00175A18
  1129. {
  1130. //00175A1E
  1131. v24 = abs( ((i_28 - p_tAnimData_r3->filed_70) & 16383 )- 8192); //优化后的结果,汇编并没有abs函数调用
  1132. }
  1133. //00175A3C
  1134. if (v24 <= 2730)
  1135. {
  1136. //00175A44
  1137. i_value1_4 = v24 << 7;
  1138. v27 = (p_tAnimData_r3->us_1E + 0x2000 - p_tAnimData_r3->us_1C) & 16383;
  1139. i_value3_r3 = abs(((i_18 - (p_tAnimData_r3->s_64 + v27)) & 0x3FFF) - 8192); //优化后的结果,汇编并没有abs函数调用
  1140. //00175A7E
  1141. if (i_value3_r3 <= 2730)
  1142. {
  1143. //00175A86
  1144. i_value4_r1 = abs(((i_14 + p_tAnimData_r3->s_64) & 16383) - 8192); //优化后的结果,汇编并没有abs函数调用
  1145. // 00175A7E
  1146. if (i_value4_r1 <= 2730)
  1147. {
  1148. //00175A86
  1149. i_value2_r2 = abs(((i_10 + 8192 - v27) & 16383) - 8192); //优化后的结果,汇编并没有abs函数调用
  1150. //00175AA4
  1151. if (i_value2_r2 <= 0xAAA)
  1152. {
  1153. //00175AAA
  1154. i_value5_r2 = i_value1_4 + (i_value2_r2 << 7) + ((i_value3_r3 + i_value4_r1) << 7);
  1155. if (i_value5_r2 < i_C) {
  1156. //00175AE2
  1157. i_value5_r2 += XSYS_Random(0x200); //call 001F4F44
  1158. }
  1159. //00175AF0
  1160. i_tmp_r1 = i_C;
  1161. i_tmp1_r0 = i_24;
  1162. if (i_value5_r2 < i_C) {
  1163. i_tmp1_r0 = iVal_r6;
  1164. }
  1165. i_24 = i_tmp1_r0;
  1166. if (i_value5_r2 < i_C) {
  1167. i_tmp_r1 = i_value5_r2;
  1168. }
  1169. i_C = i_tmp_r1;
  1170. }
  1171. }
  1172. }
  1173. i++; //00175A7C 原始是NEG,但是他以用负数计算,我这用正数计算,就+1即可
  1174. }
  1175. }
  1176. }
  1177. }
  1178. //00175B06
  1179. if (i_24 < 0)
  1180. {
  1181. //00175B14
  1182. this->tStr32_44.field_8 = i_1C;
  1183. result = 0;
  1184. }
  1185. else
  1186. {
  1187. //00175B0A
  1188. LOGI("CPlayer::SetAnimTurn: %p %d",this,i_24);
  1189. this->SetAnim(i_24); //call 001704F4
  1190. result = 1;
  1191. }
  1192. return result;
  1193. }
  1194. //-------------------------------------------------------------------------------------------------
  1195. // 00175B2C
  1196. __attribute__((noinline)) bool CPlayer::Turn(int i1, int i2, bool b3) {
  1197. LOGI("CPlayer::ControlTakeBall %p %d %d %d", this, i1, i2, b3);
  1198. return rand()%2;
  1199. }
  1200. //-------------------------------------------------------------------------------------------------
  1201. // 00178AAC 经过单元测试,功能正常
  1202. __attribute__((noinline)) CPlayer &CPlayer::operator=(CPlayer const &other) {
  1203. return *this;
  1204. }
  1205. //-------------------------------------------------------------------------------------------------
  1206. /*
  1207. 001700E4
  1208. */