GM.cpp 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  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) {
  58. LOGE("GM_GetPlayerNearestPoint%d%d%x%p",i0,pt1.dx_0,pt1.dy_4,i2);
  59. return rand(); }
  60. //-------------------------------------------------------------------------------------------------
  61. // 00179B60
  62. void GM_GetPlayerNearestPointF(int, TPoint, int, int, int) {}
  63. //-------------------------------------------------------------------------------------------------
  64. // 00179BE0
  65. void GM_GetPlayerNearestPointFX(int, TPoint, bool *, int, int, int, int) {}
  66. //-------------------------------------------------------------------------------------------------
  67. // 00179C80
  68. void GM_GetPlayerNearestPointRange(int, TPoint, bool *, int, int) {}
  69. //-------------------------------------------------------------------------------------------------
  70. // 00179F90
  71. void GM_GetLineIntersectWeighted(TPoint, TPoint, TPoint, int, int, int *,
  72. int *) {}
  73. //-------------------------------------------------------------------------------------------------
  74. // 0017A04C
  75. int GM_GetPlayerFutureNearestLineWeighted(int i0, int i1, bool *b2, TPoint3D tp3d_3, TPoint3D tp3d_6, int i9, int i10, int *pi11, int *pi12) {
  76. TPoint3D tp3_SP68; // [sp+68h] [bp-48h] BYREF
  77. TPoint3D point3D_sp80=tp3d_3;
  78. TPoint3D point3D_sp74=tp3d_6;
  79. int distanseR11 = XMATH_Distance(&tp3d_3.point_0, &tp3d_6.point_0) / 2;
  80. PlayTeam *allTeam = tGame.allplay_14;
  81. int iR9 = 0x7FFFFFFF;
  82. uint ui_SP2C = 0;
  83. int i_SP30 = -1;
  84. uint ui_SP28 = 0x7FFFFFFF;
  85. for (int iR1 = 0; iR1 < 2; iR1++) {
  86. bool b = i0 == -1;
  87. if (i0 != -1)
  88. b = iR1 == i0;
  89. // if(i0!=-1&&iR1!=i0)
  90. if (b) {
  91. int maxHeight_SP3C[11]; // [sp+3Ch] [bp-74h]
  92. for (int iR6 = 0; iR6 < 11; iR6++) {
  93. maxHeight_SP3C[iR6] = allTeam[iR1].teamlist_0[iR6]->GetInterceptMaxHeight();
  94. }
  95. for (int iR10 = 0; iR10 != 11; ++iR10) {
  96. if (!b2[iR10]) {
  97. CPlayer *pPlayerR6 = tGame.allplay_14[iR1].teamlist_0[iR10];
  98. if (!pPlayerR6->tStr32_44.uc_2) {
  99. //0017A100
  100. tp3_SP68.point_0.dx_0 = (tp3d_3.point_0.dx_0 + tp3d_6.point_0.dx_0) / 2;
  101. tp3_SP68.point_0.dy_4 = (tp3d_6.point_0.dy_4 + tp3d_3.point_0.dy_4) / 2;
  102. tp3_SP68.dz_8 = (tp3d_6.dz_8 + tp3d_3.dz_8) / 2;
  103. int i_r0=XMATH_Distance(&pPlayerR6->point_98, &tp3_SP68.point_0) ;
  104. if ((i_r0 - distanseR11) < iR9) {
  105. //0017A13C
  106. TPoint tp4_SP34 = pPlayerR6->GetTimePos(i1);
  107. int iR8 = (uint)i9 << 10;
  108. for (int i = 0; i < 9; i++) {
  109. 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;
  110. 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;
  111. tp3_SP68.dz_8 = (tp3d_3.dz_8 / 2 * ((8 - i) * 0x80) + tp3d_6.dz_8 / 2 * (i * 0x80)) / 512;
  112. if (maxHeight_SP3C[iR10] >= tp3_SP68.dz_8) {
  113. int iR0 = XMATH_Distance(&tp4_SP34, &tp3_SP68.point_0);
  114. int ic = iR0 / 1024 * iR8;
  115. if (ic < iR9) {
  116. ui_SP2C = (i * 0x80);
  117. ui_SP28 = iR0;
  118. i_SP30 = iR10;
  119. iR9 = ic;
  120. }
  121. }
  122. iR8 += (i10 << 7) - (i9 << 7);
  123. }
  124. }
  125. }
  126. }
  127. }
  128. }
  129. }
  130. if (pi11)
  131. *pi11 = XMATH_CalcSqrt(ui_SP28) << 10;
  132. if (pi12)
  133. *pi12 = ui_SP2C;
  134. return i_SP30;
  135. }
  136. //-------------------------------------------------------------------------------------------------
  137. // 0017A24C
  138. int GM_GetPlayerFutureNearestLine(int, CPlayer *, TPoint, TPoint, int *,
  139. int *) {
  140. return 0;
  141. }
  142. //-------------------------------------------------------------------------------------------------
  143. // 0017A340
  144. void GM_GetPlayerTotalSpace(int, int) {}
  145. //-------------------------------------------------------------------------------------------------
  146. // 0017A510
  147. void GM_GetPointSpace(int, TPoint) {}
  148. //-------------------------------------------------------------------------------------------------
  149. // 0017A558
  150. void GM_GetPlayerSpaceRot(CPlayer *, int, int, int) {}
  151. //-------------------------------------------------------------------------------------------------
  152. // 0017A744
  153. void GM_DistanceSq(TPoint const *, TPoint const *) {}
  154. //-------------------------------------------------------------------------------------------------
  155. // 0017A76A
  156. void GM_Distance(TPoint const *, TPoint const *) {}
  157. //-------------------------------------------------------------------------------------------------
  158. // 0017A796
  159. uint GM_Distance3D(TPoint3D *pt0, TPoint3D *pt1) { return 0; }
  160. //-------------------------------------------------------------------------------------------------
  161. // 0017A7DA
  162. void GM_PlayerLimitDistancePos(CPlayer *Player, TPoint pt1, unsigned int ui2) {}
  163. //-------------------------------------------------------------------------------------------------
  164. // 0017A810
  165. void GM_PlayerLimitDistance(CPlayer *, int) {}
  166. //-------------------------------------------------------------------------------------------------
  167. // 0017A858
  168. void GM_PlayerLimitDistancePosPol(CPlayer *, TPoint, int, int) {}
  169. //-------------------------------------------------------------------------------------------------
  170. // 0017A898
  171. void GM_SetBestPointSpace(int, TPoint *, int, int) {}
  172. //-------------------------------------------------------------------------------------------------
  173. // 0017A9EC
  174. void GM_PointIsBetweenPoints(TPoint, TPoint, TPoint, int) {}
  175. //-------------------------------------------------------------------------------------------------
  176. // 0017AA3A
  177. void GM_TendAngle(int, int) {}
  178. //-------------------------------------------------------------------------------------------------
  179. // 0017AA88
  180. float GM_BlendAngleF(float f0, float f1, float f2) { return 0.0f; }
  181. //-------------------------------------------------------------------------------------------------
  182. // 0017AB34 ^_^
  183. float GM_BlendAngleAroundF(float f0, float f1, float f2, float f3) {
  184. return 0.0f;
  185. }
  186. //-------------------------------------------------------------------------------------------------
  187. // 0017ABC8 ^_-
  188. int GM_BlendAngle(int i0, int i1, int i2) {
  189. i0 = i0 & 0x3fff;
  190. i1 = i1 & 0x3fff;
  191. if (i0 == i1) {
  192. // 0017ABD2
  193. return i0;
  194. }
  195. int r3_i = i0 - i1;
  196. int r12_i = 0x100 - i2;
  197. if (r3_i < 0) {
  198. // 0017ABDE
  199. r3_i = -r3_i;
  200. }
  201. if (r3_i > 0x2000) {
  202. // /0017ABE6
  203. if ((uint)i0<=0x1fff) {
  204. // 0017ABEE
  205. i1 *= i2;
  206. i0 |= 0x4000;
  207. } else {
  208. // loc_17ABF6
  209. i1 |= 0x4000;
  210. i1 *= i2;
  211. }
  212. } else {
  213. // loc_17ABFA
  214. i1 *= i2;
  215. }
  216. // loc_17ABFC
  217. i0 = r12_i * i0 + i1;
  218. i0 = i0 / 256 & 0x3fff;
  219. return i0;
  220. }
  221. //-------------------------------------------------------------------------------------------------