einhander.lua 24 KB

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