Guest User

Untitled

a guest
Jun 24th, 2018
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.64 KB | None | 0 0
  1. # Written by Paul Swartz, 2004
  2.  
  3. @use CaptureTheFlag.
  4.  
  5. @define swREGULAR_DEFENSE 4.
  6. @define swINTERCEPT_DEFENSE 2.
  7.  
  8. CaptureTheFlagPlayer : Champion (aka Champions) {
  9. + variables:
  10. number (int).
  11. ourPosession, theirPosession (float).
  12. ourFlag, theirFlag (object).
  13. teammates (list).
  14.  
  15. + to init:
  16. number = self get-id-number.
  17. print number.
  18.  
  19. # important checks
  20.  
  21. + to check-for-winning:
  22. if ourPosession > (theirPosession+150): return 1.
  23. return 0.
  24.  
  25. + to check-boss:
  26. if number == 1: return 1.
  27. return 0.
  28.  
  29. + to check-defense:
  30. if (controller get-game-time) > 300 && (self check-for-winning): return 1.
  31. if (controller get-game-time) > 300 && !(self check-for-winning) && number > 3: return 0.
  32. if number <= swREGULAR_DEFENSE + swINTERCEPT_DEFENSE: return 1.
  33. return 0.
  34.  
  35. + to learn-about-their-flag flag f (object):
  36. theirFlag = f.
  37.  
  38. + to move-towards vec v (vector) at-speed s (float):
  39. ang (float).
  40. o (object).
  41.  
  42. if v: {
  43. ang = self get-angle to v.
  44. if |(self get-location) - v| > 10 && |ang| < 1: self set-speed to s.
  45. if |(self get-location) - v| < 10 && |ang| < 0.5: self set-speed to s.
  46. if (self check-if-offsides): { # avoid other players
  47. o = self get-closest from (self sense-other-team) to (self get-location).
  48.  
  49. if o && |(self get-object-angle to o)| < 1 && |(o get-location) - (self get-location)| < 8: {
  50. ang = - (self get-object-angle to o).
  51. }
  52. }
  53.  
  54. if theirFlag && v == (theirFlag get-location): { # just go for the flag
  55. ang = self get-angle to v.
  56. }
  57. if ang < 0.0: self turn-left.
  58. if ang > 0.0: self turn-right.
  59. }
  60.  
  61. + to move-to-intercept obj o (object) at-speed s (float):
  62. loc, vel (vector).
  63. dist (float).
  64. if o: {
  65. loc = o get-location.
  66. vel = o get-velocity.
  67. dist = 0.4 * |(self get-location) - loc|.
  68. dist *= |(self get-object-angle to o)|.
  69.  
  70. vel *= dist.
  71.  
  72. if dist < 2.5 : vel = (0,0,0).
  73.  
  74. self move-towards vec (loc + vel) at-speed s.
  75. }
  76.  
  77. + to get-closest from l (list) to v (vector):
  78. bestDistance, bar (float).
  79. best, foo (object).
  80. if !l: return 0.
  81. if !v: return 0.
  82. bestDistance = 2510.
  83. foreach foo in l: {
  84. bar = |(foo get-location) - v|.
  85. if bar < bestDistance: {
  86. bestDistance = bar.
  87. best = foo.
  88. }
  89. }
  90. return best.
  91.  
  92. + to iterate:
  93. v (vector).
  94.  
  95. if !teammates || !ourFlag: {
  96. if |(self sense-my-team)| == 10:
  97. teammates = (self sense-my-team).
  98. if (self sense-my-flag):
  99. ourFlag = (self sense-my-flag).
  100.  
  101. v = (20.0, 0.5, 0.0).
  102.  
  103. if (self get-team) == BLUE:
  104. v::x = -(v::x).
  105. self move-towards vec v at-speed 1.0.
  106. } else {
  107. # update variables
  108. if (ourFlag get-carrier):
  109. theirPosession += 1.
  110. if (theirFlag && (theirFlag get-carrier)):
  111. ourPosession += 1.
  112. if (self check-defense):
  113. self defense-iterate.
  114. else self offense-iterate.
  115. }
  116. super iterate.
  117.  
  118. + to defense-iterate:
  119. closestA (object).
  120. home (vector).
  121.  
  122. if number <= swINTERCEPT_DEFENSE / 2.0: {
  123. home = (18, 0, 18).
  124. if (self get-team) == BLUE: home = (-18, 0, -18).
  125. } else {
  126. if ourFlag:
  127. home = (ourFlag get-location).
  128. }
  129.  
  130. # transition from offense to defense
  131. if (self check-if-offsides): {
  132. self move-towards vec (self get-my-home-location) at-speed 1.0.
  133. return.
  134. }
  135.  
  136. # someone has our flag!
  137. if (ourFlag get-carrier): {
  138. self move-to-intercept obj (ourFlag get-carrier) at-speed 1.0.
  139. return.
  140. }
  141.  
  142. if number <= swINTERCEPT_DEFENSE: {
  143. closestA = (self get-closest from (self sense-other-team) to (self get-location)).
  144. if closestA && |(closestA get-location) - home| < 10: {
  145. self move-to-intercept obj closestA at-speed 1.0.
  146. return.
  147. } else if closestA && |(self get-location) - home| < 1: {
  148. if (self get-object-angle to closestA) < 0.0: self turn-left.
  149. if (self get-object-angle to closestA) > 0.0: self turn-right.
  150. self set-speed to 0.
  151. return.
  152. }
  153. }
  154. if home: {
  155. if |(self get-location) - home| > 1: {
  156. self move-towards vec home at-speed 1.0.
  157. return.
  158. # } else if |(self get-location) - home| > 1: {
  159. # self move-towards vec home at-speed 0.4.
  160. # return.
  161. } else {
  162. if (self get-angle to home) < 0.0: self turn-left.
  163. if (self get-angle to home) > 0.0: self turn-right.
  164. self set-speed to 0.
  165. return.
  166. }
  167. }
  168.  
  169. + to offense-iterate:
  170. closest (object).
  171. jailedCount (int).
  172. jail, flag (vector).
  173. jail = (20, 0, 20).
  174. if (self get-team) == RED: jail = (-20, 0, -20).
  175.  
  176. if (self get-team) == BLUE: jailedCount = (controller get-jailed-blue-count).
  177. else jailedCount = (controller get-jailed-red-count).
  178.  
  179. if !theirFlag && (self sense-other-flag): {
  180. foreach closest in teammates:
  181. closest learn-about-their-flag flag (self sense-other-flag).
  182. }
  183. if (self has-flag): {
  184. self move-towards vec (self get-my-home-location) at-speed 1.0.
  185. return.
  186. }
  187. if jailedCount: {
  188. closest = (self get-closest from (self sense-my-team) to jail).
  189. if closest == self: {
  190. self move-towards vec jail at-speed 1.0.
  191. return.
  192. }
  193. }
  194. if theirFlag: flag = (theirFlag get-location).
  195. else {
  196. flag = (-20, 0.5, 0).
  197. if (self get-team) == BLUE: flag = (20, 0.5, 0).
  198. }
  199. if number == 10: self move-towards vec jail at-speed 0.8.
  200. else self move-towards vec flag at-speed 1.0.
  201. }
Add Comment
Please, Sign In to add comment