CPlayer.cpp 50 KB

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