CPlayer.cpp 54 KB

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