einhander.lua 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583
  1. -- title: einhander
  2. -- author: pixelbath
  3. -- desc: one-handed
  4. -- script: lua
  5. -- TODO:
  6. -- configurable controls
  7. -- cannon: more animation when firing
  8. -- gun transition sprites
  9. -- enemy collisions
  10. -- ammo counting
  11. seed=12345
  12. player={
  13. x=20, y=50,
  14. vx=0, vy=0,
  15. speed=1.5,
  16. inv=0,
  17. show=1,
  18. fire=0,
  19. gun_down=0,
  20. gun_anim=0,
  21. gun_held=0,
  22. is_firing=0,
  23. big_gun_cooldown=0,
  24. }
  25. gunsprites={
  26. 292, -- vulcan
  27. 294, -- cannon
  28. 296, -- spreader
  29. 298, -- wasp
  30. 300, -- grenade
  31. 302, -- hedgehog
  32. }
  33. gunnames={
  34. {324, "V", "ULCAN"},
  35. {325, "C", "ANNON"},
  36. {326, "S", "PREADER"},
  37. {327, "W", "ASP"},
  38. {328, "G", "RENADE"},
  39. {329, "H", "EDGEHOG"},
  40. }
  41. vulcanMuzzleSprites={
  42. 264, 266, 280
  43. }
  44. shellParticles={}
  45. -- particles are just white pixels by default
  46. for i=1,15 do
  47. table.insert(shellParticles, {x=0,y=0,vx=0,vy=0,age=0,dieAt=0,color=12,idx=0,isPixel=true})
  48. end
  49. particlePointer=1 -- points at the next particle to be spawned
  50. weaponBgSize=16--12
  51. weaponBgTimer=0
  52. weaponAmmo=3000
  53. p_bullets = {}
  54. p_big_bullets = {}
  55. multiplier = 12
  56. multiplier_sub = 0
  57. multiplier_tick = 0
  58. score = 25000
  59. active_enemies={}
  60. t=0
  61. math.randomseed(seed)
  62. -- create a mapping for darkening palette colors
  63. -- note: this is for the default sweetie16 palette
  64. drk={[0]=0,0,1,2,3,6,7,15,0,8,9,10,13,14,15,0}
  65. function drawParallelogram(x, y, w, h, skewpx, color)
  66. tri(x+skewpx, y, x+w, y+h, x, y+h, color)
  67. tri(x+skewpx, y, x+w, y+h, x+w+skewpx, y, color)
  68. end
  69. function spawnPixelParticle(x, y, vx, vy, age, dieAt, color)
  70. local p = shellParticles[particlePointer]
  71. p.x = x
  72. p.y = y
  73. p.vx = vx
  74. p.vy = vy
  75. p.age = age
  76. p.dieAt = dieAt
  77. p.color = color
  78. p.isPixel = true
  79. particlePointer = particlePointer + 1
  80. if particlePointer > 15 then particlePointer = 1 end
  81. end
  82. function spawnSpriteParticle(x, y, vx, vy, age, dieAt, index)
  83. local p = shellParticles[particlePointer]
  84. p.x = x
  85. p.y = y
  86. p.vx = vx
  87. p.vy = vy
  88. p.age = age
  89. p.dieAt = dieAt
  90. p.idx = index
  91. p.isPixel = false
  92. particlePointer = particlePointer + 1
  93. if particlePointer > 15 then particlePointer = 1 end
  94. end
  95. function spawnEnemySprite(x, y, age, type)
  96. local e = {}
  97. e.hp = 0
  98. e.hp_shield = 0
  99. e.x = x
  100. e.y = y
  101. e.age = age
  102. e.type = type
  103. if type == 1 then
  104. e.hp = 100
  105. e.hp_shield = 50
  106. end
  107. table.insert(active_enemies, e)
  108. end
  109. spawnEnemySprite(150, 50, 0, 1)
  110. function updateEnemies()
  111. for i=1,#active_enemies do
  112. local e = active_enemies[i]
  113. -- car - medium
  114. if e.type == 1 then
  115. end
  116. e.age = e.age + 1
  117. end
  118. end
  119. function drawEnemies()
  120. for i=1,#active_enemies do
  121. local e = active_enemies[i]
  122. -- car - medium
  123. if e.type == 1 then
  124. -- shield
  125. spr(352, e.x, e.y, 0, 1, 0, 0, 2, 1)
  126. -- body
  127. spr(354, e.x + 6, e.y, 0, 1, 0, 0, 3, 1)
  128. end
  129. end
  130. end
  131. function drawPlayer()
  132. if (player.show) then
  133. -- arm
  134. if player.gun_anim > 0 then
  135. --spr(260, player.x+12, player.y+11, 0, 1, 0, 3, 2, 1)
  136. else
  137. if player.gun_down then
  138. spr(260, player.x+12, player.y+11, 0, 1, 0, 0, 2, 1)
  139. else
  140. spr(260, player.x+12, player.y-2, 0, 1, 2, 0, 2, 1)
  141. end
  142. end
  143. -- ship
  144. spr(256, player.x, player.y, 0, 1, 0, 0, 4, 2)
  145. end
  146. -- draw regular bullets
  147. for key,val in ipairs(p_bullets) do
  148. spr(262, val.x, val.y, 0)
  149. end
  150. -- draw big bullets
  151. for key,val in ipairs(p_big_bullets) do
  152. local spritenum = 0
  153. if val.type == 2 then spritenum = 282 end
  154. if val.type == 3 then spritenum = 267 end
  155. spr(spritenum, val.x, val.y, 0)
  156. end
  157. -- custom routines depending on gun held
  158. if player.gun_held > 0 then
  159. local gunsprite = gunsprites[player.gun_held]
  160. local gunpos = player.y - 2
  161. if player.gun_down then
  162. gunsprite = gunsprite + 16
  163. gunpos = gunpos + 14
  164. end
  165. if player.gun_anim > 0 then
  166. spr(gunsprite, player.x+3, gunpos, 0, 1, 0, 3, 2, 1)
  167. else
  168. spr(gunsprite, player.x+12, gunpos, 0, 1, 0, 0, 2, 1)
  169. end
  170. -- vulcan
  171. if player.gun_held == 1 then
  172. local flipfire = 0
  173. local muzzleIdx = math.random(0,3)
  174. if math.random(1, 2) == 2 then
  175. flipfire = 2
  176. end
  177. if player.fire == 0 then
  178. player.fire = 2
  179. else
  180. player.fire = player.fire - 1
  181. end
  182. -- not tracking individual bullets with vulcan
  183. -- begin dakka
  184. if player.is_firing > 0 then
  185. if muzzleIdx > 0 then
  186. if player.gun_down then
  187. spr(vulcanMuzzleSprites[muzzleIdx], player.x + 27, player.y + 14, 0, 1, flipfire, 0, 2, 1)
  188. else
  189. spr(vulcanMuzzleSprites[muzzleIdx], player.x + 28, player.y - 2, 0, 1, flipfire, 0, 2, 1)
  190. end
  191. end
  192. if t % 10 == 0 then
  193. local randFactor = math.random(10,100)
  194. local spawnOffsetY = 1
  195. local lineStart = math.random(player.x//1+20, 260)
  196. if player.gun_down then
  197. spawnOffsetY = 18
  198. -- vulcan tilts downward so we get to do trig! yay!
  199. lineStart = lineStart - player.x
  200. local angle = 8
  201. local radius2 = lineStart+38
  202. local c = math.cos(angle * math.pi / 180)
  203. local s = math.sin(angle * math.pi / 180)
  204. line(c * lineStart + player.x + 18, s * lineStart + player.y + 17, c * radius2 + player.x + 18, s * radius2 + player.y + 17, 14)
  205. else
  206. line(lineStart, player.y+1, lineStart+40, player.y+1, 14)
  207. end
  208. -- shells
  209. spawnPixelParticle(player.x+14, player.y+spawnOffsetY, -0.2, -0.6 + (randFactor / 100), 0, 50, 15)
  210. end
  211. end
  212. -- update shells with light gravity
  213. for i=1,#shellParticles do
  214. local p = shellParticles[i]
  215. p.vy = p.vy + 0.1
  216. end
  217. end
  218. -- cannon
  219. if player.gun_held == 2 then
  220. if player.fire == 0 then
  221. player.fire = 30
  222. else
  223. player.fire = player.fire - 1
  224. end
  225. -- todo: move to update()
  226. for i=1, #p_big_bullets do
  227. if p_big_bullets[i].x < 250 then
  228. p_big_bullets[i].x = p_big_bullets[i].x + 10
  229. end
  230. end
  231. end
  232. end
  233. for i=1,#shellParticles do
  234. local p = shellParticles[i]
  235. if p.age < p.dieAt then
  236. if p.isPixel then
  237. pix(p.x, p.y, p.color)
  238. else
  239. spr(p.idx, p.x, p.y)
  240. end
  241. end
  242. end
  243. if player.gun_anim > 0 then player.gun_anim = player.gun_anim - 1 end
  244. end
  245. function drawUI()
  246. -- weapon bg
  247. -- spr(322, 4, 114, 0, 1, 0, 0, 1, 2)
  248. -- rect(12, 114, 8, 16, 6)
  249. -- spr(323, 20, 114, 0, 1, 0, 0, 1, 2)
  250. drawParallelogram(6, 115, weaponBgSize, 12, 6, 6)
  251. -- selected weapon
  252. if player.gun_held > 0 then
  253. local lettersprite = gunnames[player.gun_held][1]
  254. local guntext = gunnames[player.gun_held][3]
  255. spr(lettersprite, 14, 118, 0, 1)
  256. print(guntext, 24, 122, 12, true, 1, true)
  257. print(weaponAmmo, 12, 129, 12, true, 1, true)
  258. end
  259. -- multiplier
  260. -- TODO: need to do multipliers over 10, so the X needs to move left when that happens
  261. spr(340, 164, 114, 0)
  262. --spr(340 + multiplier, 172, 113, 0)
  263. spr(330, 180, 114, 0, 1, 0, 0, 4, 1)
  264. spr(331, 212, 114, 0, 1, 0, 0, 3, 1)
  265. spr(334, 236, 114, 0, 1)
  266. if multiplier_sub > 0 then
  267. for i = 1, multiplier_sub do
  268. spr(335, 177 + (i * 6), 114, 0)
  269. end
  270. end
  271. -- score
  272. local scorestring = tostring(score)
  273. for i = 1, #scorestring do
  274. local char = scorestring:sub(i, i)
  275. local numsprite = 340 + tonumber(char)
  276. -- this is a hack because I ordered the numbers weirdly
  277. if char == "0" then numsprite = 350 end
  278. spr(numsprite, (230 - (8 * #scorestring)) + (i * 8), 123, 0)
  279. end
  280. end
  281. function drawWater(waterHeight)
  282. tm=time()/200
  283. for x=0,239 do
  284. for y=waterHeight,135 do
  285. -- introduce some wobble
  286. ox=x+2*math.sin(tm+y)
  287. oy=waterHeight-(y-waterHeight)-1
  288. oc=pix(ox,oy)
  289. -- darken reflected pixel
  290. pix(x,y,drk[oc])
  291. end
  292. end
  293. end
  294. function drawDebug()
  295. -- print("p.gdown: " .. tostring(player.gun_down), 5, 5, 12, true, 1, true)
  296. -- print("spr: " .. tostring(vulcanMuzzleSprites[player.fire + 1]), 5, 13, 12, true, 1, true)
  297. end
  298. function update()
  299. player.vx = 0
  300. player.vy = 0
  301. if btn(0) then
  302. player.vy=-player.speed
  303. end
  304. if btn(1) then
  305. player.vy=player.speed
  306. end
  307. if btn(2) then
  308. player.vx=-player.speed
  309. end
  310. if btn(3) then
  311. player.vx=player.speed
  312. end
  313. -- slow down diagonal movements
  314. if player.vx * player.vy ~= 0 then
  315. player.vx = player.vx * 0.707
  316. player.vy = player.vy * 0.707
  317. end
  318. player.x = player.x + player.vx
  319. player.y = player.y + player.vy
  320. if player.x < 5 then player.x = 5 end
  321. if player.x > 220 then player.x = 220 end
  322. if player.y < 5 then player.y = 5 end
  323. if player.y > 128 then player.y = 128 end
  324. -- A: fire main gun
  325. if btn(4) then
  326. if player.fire == 0 then
  327. player.fire = 5
  328. table.insert(p_bullets, {x=player.x+10, y=player.y+2})
  329. else
  330. player.fire = player.fire - 1
  331. end
  332. end
  333. -- B: fire accessory gun
  334. if btn(5) then
  335. if player.gun_held == 1 then
  336. player.is_firing = 1
  337. end
  338. if player.gun_held == 2 then
  339. -- controlled by cooldown (or semi-auto)
  340. if player.is_firing == 1 then player.is_firing = 0 end
  341. if player.big_gun_cooldown == 0 then
  342. player.big_gun_cooldown = 30
  343. player.is_firing = 1
  344. else
  345. player.big_gun_cooldown = player.big_gun_cooldown - 1
  346. player.is_firing = 0
  347. end
  348. if player.is_firing == 1 then
  349. table.insert(p_big_bullets, {x=player.x+12, y=player.y+6, type=player.gun_held})
  350. end
  351. end
  352. else
  353. player.big_gun_cooldown = 0
  354. player.is_firing = 0
  355. end
  356. -- X: switch arm
  357. if btnp(6) then
  358. player.gun_down = not player.gun_down
  359. player.gun_anim = 1
  360. end
  361. -- Y: swap weapon (debug)
  362. if btnp(7) then
  363. player.gun_held = player.gun_held + 1
  364. if player.gun_held > 6 then player.gun_held = 0 end
  365. end
  366. for key,val in ipairs(p_bullets) do
  367. p_bullets[key].x = p_bullets[key].x + 8
  368. if val.x > 240 then
  369. table.remove(p_bullets, key)
  370. end
  371. end
  372. for key,val in ipairs(p_big_bullets) do
  373. p_big_bullets[key].x = p_big_bullets[key].x + 8
  374. if val.x > 240 then
  375. table.remove(p_big_bullets, key)
  376. end
  377. end
  378. for i=1,#shellParticles do
  379. local p = shellParticles[i]
  380. p.x = p.x + p.vx
  381. p.y = p.y + p.vy
  382. p.age = p.age + 1
  383. end
  384. t=t+1
  385. end
  386. function TIC()
  387. update()
  388. cls(0)
  389. drawPlayer()
  390. drawEnemies()
  391. drawWater(120)
  392. drawUI()
  393. drawDebug()
  394. end
  395. -- <TILES>
  396. -- 000:00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
  397. -- 001:ffffffeeffffffeeffffffeeffffffeeffffffeeffffffeeffffffeeffffffee
  398. -- 004:eee00000e0e00000efe00000f0f0fff0f0f0000000f000000000000000000000
  399. -- 005:eee00000e0e00000efe00000f0f0fff0f0f0f0f000f000000000000000000000
  400. -- 006:eee00000e0e00000efe00000f0f0fff0f0f0000000f000000000000000000000
  401. -- 007:eee00000e0e00000efe00000f0f0fff0f0f0f0f000f000000000000000000000
  402. -- 016:ffffffffffffffffffffffffffbbbffbffbbbffbffffffffffffffffffffffff
  403. -- 017:ffffffffffffffffffffffffbbffffffbbffffffffffffffffffffffffffffff
  404. -- 020:0000000000000000000000000099008800aa0088009a00880088000000000000
  405. -- 021:000000000000000000000000009a00aa00aa00aa009900990088008800000000
  406. -- 022:0000000000000000000000000099009900aa00a900aa00aa0088008800000000
  407. -- 023:000000000000000000000000009a009a00aa009a009900990088008800000000
  408. -- 033:ffffffffffffffffffffffffbbf888ffbbf888fbffffffffffffffffffffffff
  409. -- </TILES>
  410. -- <SPRITES>
  411. -- 000:04488a844488aaaa4889999a00000d99000000d90000000d0000000000000000
  412. -- 001:48000000889aa000aa889aa09aaa899a99aaa884999aa8430d99a43f00d999ff
  413. -- 002:000000000000000000000000a00000004400000038ddc000f8998000ff88dbc0
  414. -- 004:0d000000d9add0009999addd8122999900128889000890080000000000000000
  415. -- 005:000000000000000000000000d000000080000000800000000000000000000000
  416. -- 006:0000000000000000000000000000440044444cc0000044000000000000000000
  417. -- 007:000000000000000000000000eddc0000fee00000000000000000000000000000
  418. -- 008:00000000000000000cc40000ccccccccccccccc404cc00000000000000000000
  419. -- 009:000000000000000000000000ccc4400000000000000000000000000000000000
  420. -- 010:0000000000000000033000003333300033330000033000000000000000000000
  421. -- 017:0009aaaa00088999000eee080000000000000000000000000000000000000000
  422. -- 018:ffeeeddcaf0fffed880e65fe0000eed000000000000000000000000000000000
  423. -- 019:00000000b0000000d00000000000000000000000000000000000000000000000
  424. -- 020:0d000000d9add0009999addd8122999900128888000890000000000000000000
  425. -- 021:0000000000000000000000009d00000098000000880000000000000000000000
  426. -- 022:0300000034300000030000000000000000000000000000000000000000000000
  427. -- 023:000000000000000000000000eddd0000feed0000000000000000000000000000
  428. -- 024:0000000000000000033300004444333344444433033300000000000000000000
  429. -- 025:0000000000000000000000000000000033000000000000000000000000000000
  430. -- 026:0000000000000000000000000004444000444444000444400000000000000000
  431. -- 032:0000000011101300211023003210340043104c0056705c006770650077707500
  432. -- 036:00000000000000000edce000f999edddfffffeee000099dd0000fff000000000
  433. -- 037:0000000000000000000000d0dddddd9deeeeeefe000000f00000000000000000
  434. -- 038:00000000000000000000dddd0dd0ffe3defddeeed2eeeff9ff00feed00000ff0
  435. -- 039:0000dde00ddee900ee9000003000000000000000d00000000000000000000000
  436. -- 040:000000000000000001eeef00d1e77770d3766667c4d66666000000ee00000000
  437. -- 041:00000000000000000000000077700750f565065077776e500077755000000000
  438. -- 042:0000000000000000000c555c000b646b000b666b0009777900000ff000000000
  439. -- 043:0000000000000000540000006300000063000000720000000000000000000000
  440. -- 044:00000000000000000000edd600006ed600dd7ff600ee777700000fe000000000
  441. -- 046:00000000000dd0dd000ee0ee000ee0ee000444440003fff30003333300000000
  442. -- 048:88808a0098809a00a980ab00ba80bc00cdf0cc00def0dc00ef80ed00f880fd00
  443. -- 052:000000000fedc0000f999e0000fffddd00009eee0000f9de0000fff000000000
  444. -- 053:000000000000000000000000d0000000dddd000deeeeddd9000eeefd000000f0
  445. -- 054:00000000000000000ddd099dd2e9dffefeeeeee90000fff00000feed00000000
  446. -- 055:0000000000000000ddddd000eeeeeeee34000000000000000000000000000000
  447. -- 056:00000000000000005577700e5e677776560565f7570077700000000000000000
  448. -- 057:0000000000000000e00000006666d4c0666673d07777e1d00feee10000000000
  449. -- 058:000000000000000000000ff0000c555c000b666b000b636b0009777900000000
  450. -- 059:0000000000000000000000005400000062000000620000007200000000000000
  451. -- 060:0000000000000000000dd000006665dd006ed6ee007ee600007eff0000000000
  452. -- 062:000000000000000000444440004fff400033333000fe0fe000ed0ed000ee0ee0
  453. -- 068:0c00000c0c00000c0cc000cc00c000c000cc0cc0000c0c00000ccc000000c000
  454. -- 069:00ccccc00cc000c00c0000000c0000000c0000000c0000000cc000c000ccccc0
  455. -- 070:00ccccc00cc000000c0000000ccccc0000000cc0000000c000000cc00ccccc00
  456. -- 071:0c00000c0c00000c0c00c00c0c00c00c0c00c00c0c00c00c0cc0c0cc00ccccc0
  457. -- 072:00ccccc00cc000c00c0000000c0000000c00ccc00c0000c00cc000c000ccccc0
  458. -- 073:0c0000c00c0000c00c0000c00cccccc00c0000c00c0000c00c0000c00c0000c0
  459. -- 074:00dddddd000dd0000000dd00000dd00000dd00000dd0000d0ddddddd00000000
  460. -- 075:dddddddd0dd0000d00dd00000dd0000ddd0000ddd0000dd0dddddddd00000000
  461. -- 076:ddddddddd0000dd0dd0000ddd0000dd00000dd00000dd000dddddddd00000000
  462. -- 077:dddddddd000dd0000000dd00000dd00000dd00000dd0000ddddddddd00000000
  463. -- 078:dd0000000dd0000000d000000dd00000dd000000d00000000000000000000000
  464. -- 079:0000000000333300000333300033330003333000333300000000000000000000
  465. -- 080:0000b000000aabb000a999aa0090ffe90000fffe00000ff00000000000000000
  466. -- 081:000000000000000000000000ab000000e9ab0000fee9ab0000fee9a00000fee0
  467. -- 084:000000000c000c0000c0c000000c000000c0c0000c000c000000000000000000
  468. -- 085:00000000000ccc000000cc000000cc000000cc000000cc000000cc000000cc00
  469. -- 086:00000000000ccc0000c00cc000000cc00000cc00000cc00000cc000000ccccc0
  470. -- 087:00000000000ccc0000c00cc000000cc00000cc0000000cc000c00cc0000ccc00
  471. -- 088:00000000000ccc0000cccc0000c0cc000cc0cc000c00cc000cccccc00000cc00
  472. -- 089:0000000000ccccc000cc000000cccc0000000cc000000cc000c00cc0000ccc00
  473. -- 090:00000000000ccc0000cc00c000cc000000cccc0000cc0cc000cc0cc0000ccc00
  474. -- 091:0000000000ccccc000000cc000000cc00000cc000000cc00000cc000000cc000
  475. -- 092:00000000000ccc0000cc0cc000cc0cc0000ccc0000cc0cc000cc0cc0000ccc00
  476. -- 093:00000000000ccc0000cc0cc000cc0cc0000cccc000000cc000c00cc0000ccc00
  477. -- 094:00000000000ccc0000cc0cc000cc0cc000cc0cc000cc0cc000cc0cc0000ccc00
  478. -- 096:0000000000000000000000aa0000ae9900ae9998ae99998e944cc8889944cc88
  479. -- 097:00000000aadddddaae999eaa9999dddd8889ffeeee9999f08888880088888000
  480. -- 098:000000000000000000000000000aaa9900a9eded0a9ededdd888888800000000
  481. -- 099:00000000000000cc00000bdbddd0bddeeeeddddfee9999998811222200000222
  482. -- 100:0000000000000000000ddb00fffee000bfcfa000999999003333334022222224
  483. -- </SPRITES>
  484. -- <MAP>
  485. -- 006:000000000112010110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  486. -- 007:000000000101010110000000515161610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  487. -- 008:000000000101111210000000715161410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  488. -- 009:000000000101010110000000417161610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  489. -- 010:000000000101011210000000615161710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  490. -- 011:000000000101010110000000515171510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  491. -- 012:000000000101011210000000715161610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  492. -- 013:000000000112010110000000616141710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  493. -- 014:000000000101010110000000715161710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  494. -- 015:000000000101010110000000515161710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  495. -- 016:000000000101120110000000714161410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  496. -- </MAP>
  497. -- <WAVES>
  498. -- 000:00000000ffffffff00000000ffffffff
  499. -- 001:012345678acdeeffffeedca876543210
  500. -- 002:0123456789abcdef0123456789abcdef
  501. -- 003:ff000000000000000ff0000000000000
  502. -- 004:01234000000000000000000000000000
  503. -- </WAVES>
  504. -- <SFX>
  505. -- 000:01000101010201020101010f010e010e010f0101010201020101010f010e010e010f0101010201020101010f010e010e010f0101010201020101010f6020000000f9
  506. -- 001:9400940094009400940094009400a400a400a400a400b400b400b400b400b400b400b400c400c400c400c400d400d400d400e400e400f400f400f400212000000000
  507. -- 002:030f030e130d330c530b730a9309b309d308f308f308f308f308f308f308f308f308f308f308f308f308f308f308f308f308f308f308f308f308f308105000000000
  508. -- 003:85009500a500b500c500d500e500f500f500f500f500f500f500f500f500f500f500f500f500f500f500f500f500f500f500f500f500f500f500f500502000000000
  509. -- 004:6500750085009500a500b500c500d500e500f500f500f500f500f500f500f500f500f500f500f500f500f500f500f500f500f500f500f500f500f500572000000000
  510. -- </SFX>
  511. -- <PATTERNS>
  512. -- 000:40002200000000003000000050003a00000000003000000040002200000000003000000050003a000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  513. -- </PATTERNS>
  514. -- <TRACKS>
  515. -- 000:1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e0000
  516. -- </TRACKS>
  517. -- <PALETTE>
  518. -- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57
  519. -- </PALETTE>