Advertisement
Bob_the_Hamster

Untitled

Jul 11th, 2016
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.31 KB | None | 0 0
  1. include, plotscr.hsd
  2. include, scancode.hsi
  3.  
  4. global variable(1, armada)
  5. global variable(2, playing)
  6. global variable(3, direction)
  7. global variable(4, movespeed)
  8. global variable(5, walktoggle)
  9. global variable(6, shooter)
  10. global variable(7, friendly bullets)
  11. global variable(8, cannon charge)
  12. global variable(9, start speed)
  13. global variable(10, enemy bullets)
  14. global variable(11, enemy fire rate)
  15. global variable(12, score)
  16.  
  17. plotscript, space invadeOHRs, begin
  18. suspend player
  19. create armada
  20. create shooter
  21. create bullet layers
  22. start timer scripts
  23. setup score
  24. playing := true
  25. while(playing) do(
  26. update game
  27. wait(1)
  28. )
  29. cleanup all
  30. game over
  31. end
  32.  
  33. script, cleanup all, begin
  34. # Free all slices and reset their globals to zero
  35. free slice(armada)
  36. armada := 0
  37. free slice(shooter)
  38. shooter := 0
  39. free slice(friendly bullets)
  40. friendly bullets := 0
  41. free slice(enemy bullets)
  42. enemy bullets := 0
  43. # Cancel the timers
  44. stop timer(0)
  45. stop timer(1)
  46. # Hide the score string
  47. hide string(1)
  48. end
  49.  
  50. script, start timer scripts, begin
  51. set timer(0, 1, 3, @update walktoggle)
  52. set timer(1, 1, 4, @reload cannon)
  53. end
  54.  
  55. script, create shooter, begin
  56. shooter := load walkabout sprite(10)
  57. realign slice(shooter, edge:center, edge:bottom, edge:center, edge:bottom)
  58. end
  59.  
  60. script, create armada, begin
  61. if(armada) then(
  62. set slice x(armada, 0)
  63. set slice y(armada, 0)
  64. )else(
  65. armada := create container
  66. )
  67. variable(sl, row, col)
  68. for(row, 0, 3) do(
  69. for(col, 0, 7) do(
  70. sl := load walkabout sprite(2 + col)
  71. set parent(sl, armada)
  72. set sprite frame(sl, 4)
  73. place sprite(sl, col * 25, row * 25)
  74. )
  75. )
  76. refit armada
  77. direction := 1
  78. start speed += 1
  79. movespeed := start speed
  80. enemy fire rate += 1
  81. end
  82.  
  83. script, create bullet layers, begin
  84. friendly bullets := create container(320, 200)
  85. enemy bullets := create container(320, 200)
  86. end
  87.  
  88. script, setup score, begin
  89. show string at(1, 0, 0)
  90. $1=""
  91. append number(1, score)
  92. end
  93.  
  94. script, update game, begin
  95. user input
  96. move armada
  97. update each enemy
  98. update shooter
  99. update bullets
  100. end
  101.  
  102. script, user input, begin
  103. if(key is pressed(key:ESC)) then(
  104. playing := false
  105. )
  106. if(key is pressed(key:left)) then(
  107. set slice x(shooter, slice x(shooter) -- 4)
  108. )
  109. if(key is pressed(key:right)) then(
  110. set slice x(shooter, slice x(shooter) + 4)
  111. )
  112. if(keyval(key:space)>>1) then(
  113. fire bullet
  114. )
  115. end
  116.  
  117. script, move armada, begin
  118. set slice x(armada, slice x(armada) + (movespeed * direction))
  119. if(direction==1) then(
  120. if(not(slice contains(sprite layer, armada))) then(
  121. clamp slice(armada, sprite layer)
  122. play sound(0)
  123. direction := direction * -1
  124. set slice y(armada, slice y(armada) + 4)
  125. )
  126. )else(
  127. if(not(slice contains(sprite layer,armada))) then(
  128. clamp slice(armada, sprite layer)
  129. play sound(0)
  130. direction := direction * -1
  131. movespeed += 1
  132. set slice y(armada, slice y(armada) + 4)
  133. )
  134. )
  135. if(slice y(armada) + slice height(armada) >> slice height(sprite layer)) then(
  136. shooter dies
  137. )
  138. end
  139.  
  140. script, update each enemy, begin
  141. variable(enemy)
  142. enemy := first child(armada)
  143. if(not(enemy)) then(create armada, exit script)
  144. while(enemy) do(
  145. set sprite frame(enemy, 4 + walktoggle)
  146. if(slice collide(enemy, shooter)) then(shooter dies)
  147. if(random(0,999) << enemy fire rate) then(enemy fire bullet(enemy))
  148. enemy := next sibling(enemy)
  149. )
  150. end
  151.  
  152. script, update shooter, begin
  153. set sprite frame(shooter, walktoggle)
  154. end
  155.  
  156. script, update bullets, begin
  157. update friendly bullets
  158. update enemy bullets
  159. end
  160.  
  161. script, update friendly bullets, begin
  162. variable(bullet, delete)
  163. bullet := first child(friendly bullets)
  164. while(bullet) do(
  165. delete := false
  166. set slice y(bullet, slice y(bullet) -- 8)
  167. if(check for friendly bullet hit(bullet)) then(delete := bullet)
  168. if(slice collide(bullet, sprite layer) == false) then(delete := bullet)
  169. bullet := next sibling(bullet)
  170. if(delete) then(free slice(delete))
  171. )
  172. end
  173.  
  174. script, check for friendly bullet hit, bullet, begin
  175. variable(enemy)
  176. enemy := first child(armada)
  177. while(enemy) do(
  178. if(slice contains(enemy, bullet)) then(
  179. free slice(enemy)
  180. play sound(3)
  181. refit armada
  182. score += move speed * enemy fire rate
  183. $1=""
  184. append number(1, score)
  185. exit returning(true)
  186. )
  187. enemy := next sibling(enemy)
  188. )
  189. exit returning(false)
  190. end
  191.  
  192. script, update enemy bullets, begin
  193. variable(bullet, delete)
  194. bullet := first child(enemy bullets)
  195. while(bullet) do(
  196. delete := false
  197. set slice y(bullet, slice y(bullet) + 5)
  198. if(slice contains(shooter, bullet)) then(
  199. shooter dies
  200. exit script
  201. )
  202. if(not(slice collide(bullet, sprite layer))) then(delete := bullet)
  203. bullet := next sibling(bullet)
  204. if(delete) then(free slice(delete))
  205. )
  206. end
  207.  
  208. script, fire bullet, begin
  209. if(cannon charge == false) then(exit script)
  210. variable(bullet)
  211. bullet := create rect(4, 8)
  212. set parent(bullet, friendly bullets)
  213. set horiz anchor(bullet, edge:center)
  214. set vert anchor(bullet, edge:center)
  215. set rect fgcol(bullet, 0)
  216. set rect bgcol(bullet, 15)
  217. set rect border(bullet, -1)
  218. set slice x(bullet, slice screen x(shooter))
  219. set slice y(bullet, slice screen y(shooter) -- slice height(shooter))
  220. cannon charge := false
  221. play sound(2)
  222. end
  223.  
  224. script, enemy fire bullet, enemy, begin
  225. variable(bullet)
  226. bullet := create rect(4, 8)
  227. set parent(bullet, enemy bullets)
  228. set horiz anchor(bullet, edge:center)
  229. set vert anchor(bullet, edge:center)
  230. set rect fgcol(bullet, 0)
  231. set rect bgcol(bullet, 12)
  232. set rect border(bullet, -1)
  233. set slice x(bullet, slice screen x(enemy) + slice width(enemy) / 2)
  234. set slice y(bullet, slice screen y(enemy) + slice height(enemy))
  235. play sound(2)
  236. end
  237.  
  238. script, update walktoggle, begin
  239. walktoggle := walktoggle, xor, 1
  240. play sound(1)
  241. set timer(0, 1, 3, @update walktoggle)
  242. end
  243.  
  244. script, reload cannon, begin
  245. cannon charge := true
  246. set timer(1, 1, 5, @reload cannon)
  247. end
  248.  
  249. script, refit armada, begin
  250. variable(sl, x1, y1, x2, y2, diffx, diffy)
  251. x1 := 99999
  252. y1 := 99999
  253. x2 := -99999
  254. y2 := -99999
  255. # Find the new boundaries
  256. sl := first child(armada)
  257. while(sl) do(
  258. if(slice screen x(sl) << x1) then(x1 := slice screen x(sl))
  259. if(slice screen y(sl) << y1) then(y1 := slice screen y(sl))
  260. if(slice screen x(sl) + slice width(sl) >> x2) then(x2 := slice screen x(sl) + slice width(sl))
  261. if(slice screen y(sl) + slice height(sl) >> y2) then(y2 := slice screen y(sl) + slice height(sl))
  262. sl := next sibling(sl)
  263. )
  264. # Readjust container
  265. diffx := x1 -- slice screen x(armada)
  266. diffy := y1 -- slice screen y(armada)
  267. set slice screen x(armada, x1)
  268. set slice screen y(armada, y1)
  269. set slice width(armada, x2 -- x1)
  270. set slice height(armada, y2 -- y1)
  271. sl := first child(armada)
  272. # Readjust children
  273. while(sl) do(
  274. set slice x(sl, slice x(sl) -- diffx)
  275. set slice y(sl, slice y(sl) -- diffy)
  276. sl := next sibling(sl)
  277. )
  278. end
  279.  
  280. script, shooter dies, begin
  281. $0="GAME OVER"
  282. center string at(0, 160, 100)
  283. playing := false
  284. while(key is pressed(key:space)) do(wait)
  285. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement