GM.cpp 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. #include "GM.h"
  2. #include "CBall.h"
  3. #include "GU.h"
  4. #include "TGame.h"
  5. #include "XMATH.h"
  6. #define Add2Ptr(PTR, INC, CAST) ((CAST)((uint64)(PTR) + (INC)))
  7. #define PI 3.14159274f
  8. #define NEGPI -3.14159274f
  9. //-------------------------------------------------------------------------------------------------
  10. // 0015B0A4
  11. void GM_CheckGoalSide() {}
  12. //-------------------------------------------------------------------------------------------------
  13. // 0015B340
  14. void GM_CalcPlayerDist() {}
  15. //-------------------------------------------------------------------------------------------------
  16. // 0015B7C8
  17. void GM_IsOnPitch(TPoint) {}
  18. //-------------------------------------------------------------------------------------------------
  19. // 0015B7F8
  20. void GM_SwapInt(int &i0, int &i1) {
  21. int tmp_r2 = i1;
  22. i1 = i0;
  23. i0 = tmp_r2;
  24. }
  25. //-------------------------------------------------------------------------------------------------
  26. // 0015B804
  27. int GM_CalcGoalDist(TPoint, int) { return 0; }
  28. //-------------------------------------------------------------------------------------------------
  29. // 0016E0BC
  30. void GM_GetRotPowerTrajectory(TPoint3D pt0, int *i1, int *i2, int *i3) {}
  31. //-------------------------------------------------------------------------------------------------
  32. // 0016E108
  33. void GM_GetVecFromRotPowerTrajectory(TPoint3D *, int, int, int) {}
  34. //-------------------------------------------------------------------------------------------------
  35. // 00171E50
  36. void GM_DeflectBallFromDribbler(CPlayer *player, int *i1) {
  37. LOGE("%p%pGM_DeflectBallFromDribbler",player,i1);
  38. *i1=rand();
  39. }
  40. //-------------------------------------------------------------------------------------------------
  41. // 00178C7C
  42. int GM_CheckInterception(CPlayer *, int, int, int) { return 0; }
  43. //-------------------------------------------------------------------------------------------------
  44. // 00178D3C
  45. void GM_CheckInterceptionPos(CPlayer *, int, int, TPoint *) {}
  46. //-------------------------------------------------------------------------------------------------
  47. // 00179170
  48. void GM_CheckInterceptionX(CPlayer *, int) {}
  49. //-------------------------------------------------------------------------------------------------
  50. // 0017918C
  51. void GM_CalcPlayerBallInterceptions() {}
  52. //-------------------------------------------------------------------------------------------------
  53. // 00179A44
  54. int GM_GetPlayerNearestPoint(int i0, TPoint pt1, int i2, int *i3) { return 0; }
  55. //-------------------------------------------------------------------------------------------------
  56. // 00179AD0
  57. int GM_GetPlayerNearestPoint(int i0, TPoint pt1, int *i2) { return 0; }
  58. //-------------------------------------------------------------------------------------------------
  59. // 00179B60
  60. void GM_GetPlayerNearestPointF(int, TPoint, int, int, int) {}
  61. //-------------------------------------------------------------------------------------------------
  62. // 00179BE0
  63. void GM_GetPlayerNearestPointFX(int, TPoint, bool *, int, int, int, int) {}
  64. //-------------------------------------------------------------------------------------------------
  65. // 00179C80
  66. void GM_GetPlayerNearestPointRange(int, TPoint, bool *, int, int) {}
  67. //-------------------------------------------------------------------------------------------------
  68. // 00179F90
  69. void GM_GetLineIntersectWeighted(TPoint, TPoint, TPoint, int, int, int *,
  70. int *) {}
  71. //-------------------------------------------------------------------------------------------------
  72. // 0017A04C
  73. int GM_GetPlayerFutureNearestLineWeighted(int i0, int i1, bool *b2, TPoint3D tp3d_3, TPoint3D tp3d_6, int i9, int i10, int *pi11, int *pi12) {
  74. TPoint3D tp3_SP68; // [sp+68h] [bp-48h] BYREF
  75. TPoint3D point3D_sp80=tp3d_3;
  76. TPoint3D point3D_sp74=tp3d_6;
  77. int distanseR11 = XMATH_Distance(&tp3d_3.point_0, &tp3d_6.point_0) / 2;
  78. PlayTeam *allTeam = tGame.allplay_14;
  79. int iR9 = 0x7FFFFFFF;
  80. uint ui_SP2C = 0;
  81. int i_SP30 = -1;
  82. uint ui_SP28 = 0x7FFFFFFF;
  83. for (int iR1 = 0; iR1 < 2; iR1++) {
  84. bool b = i0 == -1;
  85. if (i0 != -1)
  86. b = iR1 == i0;
  87. // if(i0!=-1&&iR1!=i0)
  88. if (b) {
  89. int maxHeight_SP3C[11]; // [sp+3Ch] [bp-74h]
  90. for (int iR6 = 0; iR6 < 11; iR6++) {
  91. maxHeight_SP3C[iR6] = allTeam[iR1].teamlist_0[iR6]->GetInterceptMaxHeight();
  92. }
  93. for (int iR10 = 0; iR10 != 11; ++iR10) {
  94. if (!b2[iR10]) {
  95. CPlayer *pPlayerR6 = tGame.allplay_14[iR1].teamlist_0[iR10];
  96. if (!pPlayerR6->tStr32_44.uc_2) {
  97. //0017A100
  98. tp3_SP68.point_0.dx_0 = (tp3d_3.point_0.dx_0 + tp3d_6.point_0.dx_0) / 2;
  99. tp3_SP68.point_0.dy_4 = (tp3d_6.point_0.dy_4 + tp3d_3.point_0.dy_4) / 2;
  100. tp3_SP68.dz_8 = (tp3d_6.dz_8 + tp3d_3.dz_8) / 2;
  101. int i_r0=XMATH_Distance(&pPlayerR6->point_98, &tp3_SP68.point_0) ;
  102. if ((i_r0 - distanseR11) < iR9) {
  103. //0017A13C
  104. TPoint tp4_SP34 = pPlayerR6->GetTimePos(i1);
  105. int iR8 = (uint)i9 << 10;
  106. for (int i = 0; i < 9; i++) {
  107. tp3_SP68.point_0.dx_0 = (tp3d_3.point_0.dx_0 / 2 * ((8 - i) * 0x80) + tp3d_6.point_0.dx_0 / 2 * (i * 0x80)) / 512;
  108. tp3_SP68.point_0.dy_4 = (tp3d_3.point_0.dy_4 / 2 * ((8 - i) * 0x80) + tp3d_6.point_0.dy_4 / 2 * (i * 0x80)) / 512;
  109. tp3_SP68.dz_8 = (tp3d_3.dz_8 / 2 * ((8 - i) * 0x80) + tp3d_6.dz_8 / 2 * (i * 0x80)) / 512;
  110. if (maxHeight_SP3C[iR10] >= tp3_SP68.dz_8) {
  111. int iR0 = XMATH_Distance(&tp4_SP34, &tp3_SP68.point_0);
  112. int ic = iR0 / 1024 * iR8;
  113. if (ic < iR9) {
  114. ui_SP2C = (i * 0x80);
  115. ui_SP28 = iR0;
  116. i_SP30 = iR10;
  117. iR9 = ic;
  118. }
  119. }
  120. iR8 += (i10 << 7) - (i9 << 7);
  121. }
  122. }
  123. }
  124. }
  125. }
  126. }
  127. }
  128. if (pi11)
  129. *pi11 = XMATH_CalcSqrt(ui_SP28) << 10;
  130. if (pi12)
  131. *pi12 = ui_SP2C;
  132. return i_SP30;
  133. }
  134. //-------------------------------------------------------------------------------------------------
  135. // 0017A24C
  136. int GM_GetPlayerFutureNearestLine(int, CPlayer *, TPoint, TPoint, int *,
  137. int *) {
  138. return 0;
  139. }
  140. //-------------------------------------------------------------------------------------------------
  141. // 0017A340
  142. void GM_GetPlayerTotalSpace(int, int) {}
  143. //-------------------------------------------------------------------------------------------------
  144. // 0017A510
  145. void GM_GetPointSpace(int, TPoint) {}
  146. //-------------------------------------------------------------------------------------------------
  147. // 0017A558
  148. void GM_GetPlayerSpaceRot(CPlayer *, int, int, int) {}
  149. //-------------------------------------------------------------------------------------------------
  150. // 0017A744
  151. void GM_DistanceSq(TPoint const *, TPoint const *) {}
  152. //-------------------------------------------------------------------------------------------------
  153. // 0017A76A
  154. void GM_Distance(TPoint const *, TPoint const *) {}
  155. //-------------------------------------------------------------------------------------------------
  156. // 0017A796
  157. uint GM_Distance3D(TPoint3D *pt0, TPoint3D *pt1) { return 0; }
  158. //-------------------------------------------------------------------------------------------------
  159. // 0017A7DA
  160. void GM_PlayerLimitDistancePos(CPlayer *Player, TPoint pt1, unsigned int ui2) {}
  161. //-------------------------------------------------------------------------------------------------
  162. // 0017A810
  163. void GM_PlayerLimitDistance(CPlayer *, int) {}
  164. //-------------------------------------------------------------------------------------------------
  165. // 0017A858
  166. void GM_PlayerLimitDistancePosPol(CPlayer *, TPoint, int, int) {}
  167. //-------------------------------------------------------------------------------------------------
  168. // 0017A898
  169. void GM_SetBestPointSpace(int, TPoint *, int, int) {}
  170. //-------------------------------------------------------------------------------------------------
  171. // 0017A9EC
  172. void GM_PointIsBetweenPoints(TPoint, TPoint, TPoint, int) {}
  173. //-------------------------------------------------------------------------------------------------
  174. // 0017AA3A
  175. void GM_TendAngle(int, int) {}
  176. //-------------------------------------------------------------------------------------------------
  177. // 0017AA88
  178. float GM_BlendAngleF(float f0, float f1, float f2) { return 0.0f; }
  179. //-------------------------------------------------------------------------------------------------
  180. // 0017AB34 ^_^
  181. float GM_BlendAngleAroundF(float f0, float f1, float f2, float f3) {
  182. return 0.0f;
  183. }
  184. //-------------------------------------------------------------------------------------------------
  185. // 0017ABC8 ^_-
  186. int GM_BlendAngle(int i0, int i1, int i2) {
  187. i0 = i0 & 0x3fff;
  188. i1 = i1 & 0x3fff;
  189. if (i0 == i1) {
  190. // 0017ABD2
  191. return i0;
  192. }
  193. int r3_i = i0 - i1;
  194. int r12_i = 0x100 - i2;
  195. if (r3_i < 0) {
  196. // 0017ABDE
  197. r3_i = -r3_i;
  198. }
  199. if (r3_i > 0x2000) {
  200. // /0017ABE6
  201. if ((uint)i0<=0x1fff) {
  202. // 0017ABEE
  203. i1 *= i2;
  204. i0 |= 0x4000;
  205. } else {
  206. // loc_17ABF6
  207. i1 |= 0x4000;
  208. i1 *= i2;
  209. }
  210. } else {
  211. // loc_17ABFA
  212. i1 *= i2;
  213. }
  214. // loc_17ABFC
  215. i0 = r12_i * i0 + i1;
  216. i0 = i0 / 256 & 0x3fff;
  217. return i0;
  218. }
  219. //-------------------------------------------------------------------------------------------------