aboutsummaryrefslogtreecommitdiff
path: root/toxicinvaders_misc/musicplayer
diff options
context:
space:
mode:
authorRibbon <ambiguousmachine@gmail.com>2022-02-26 23:40:32 -0800
committerRibbon <ambiguousmachine@gmail.com>2022-02-26 23:40:32 -0800
commit8d67710e19c0755659633109c45ec90e92b88042 (patch)
treed223cf18fa4f5883f5ada670eb045bee09a7ffeb /toxicinvaders_misc/musicplayer
parent41d9dcc9ab65724858d75a3be45134e527d09108 (diff)
file organization
Diffstat (limited to 'toxicinvaders_misc/musicplayer')
-rw-r--r--toxicinvaders_misc/musicplayer/background_music.lua106
-rw-r--r--toxicinvaders_misc/musicplayer/draw_music.lua29
-rw-r--r--toxicinvaders_misc/musicplayer/music.p8385
-rw-r--r--toxicinvaders_misc/musicplayer/objects_music.lua69
-rw-r--r--toxicinvaders_misc/musicplayer/particles_music.lua29
-rw-r--r--toxicinvaders_misc/musicplayer/toxicinvadersost.p8.pngbin0 -> 17064 bytes
-rw-r--r--toxicinvaders_misc/musicplayer/ui_music.lua90
-rw-r--r--toxicinvaders_misc/musicplayer/update_music.lua51
8 files changed, 759 insertions, 0 deletions
diff --git a/toxicinvaders_misc/musicplayer/background_music.lua b/toxicinvaders_misc/musicplayer/background_music.lua
new file mode 100644
index 0000000..dc57471
--- /dev/null
+++ b/toxicinvaders_misc/musicplayer/background_music.lua
@@ -0,0 +1,106 @@
+function scrollingcircles(y, speed, spacing, radius, color)
+ for i = 1, 256, spacing do
+ circfill((i-(gt*speed))%256-radius*2, y, radius, color)
+ end
+end
+
+function scrollingsprite(sprite,x,y,w,h,speed,flip)
+ flip = flip or false
+ spr(sprite, -(gt*speed+x+w*8)%(128+w*8)-w*8, y, w, h, flip)
+end
+
+
+--ringed planet
+function bgplanetmegasprite(x,y)
+ --default values
+ --x = 160-gt
+ --y = 50
+
+ palt(0,false)
+ palt(13,true)
+ spr(200,x,y,7,4)
+ spr(194,x-8,y+32,6,2)
+ palt()
+end
+
+
+function drawbg()
+ cls(0)
+ --stars
+ for i = 1, 64, 1 do
+ pset((((-gt*0.1)+i*4.3824)*(i/32))%128, sin(i*0.536382)*64+64, 4) --funny random star algorithm!!
+ end
+
+ --galaxies
+ spr(239, 20, 30, 1, 1)
+ spr(255, 108, 40, 1, 1)
+ spr(255, 42, 74, 1, 1, true, true)
+
+ --ringed planet
+ bgplanetmegasprite(150-(gt*10)%300,50)
+
+ --clouds
+ scrollingcircles(-9, 24, 22, 22, 2)
+ --small clouds
+ scrollingsprite(207, 60, 10, 1, 1, 28)
+ scrollingsprite(207, 120, 10, 1, 1, 28)
+ scrollingsprite(207, 130, 12, 1, 1, 29)
+ scrollingsprite(207, 160, 15, 1, 1, 30)--
+ scrollingsprite(223, 145, 15, 1, 1, 30)--
+ scrollingsprite(223, 20, 10, 1, 1, 28)
+ scrollingsprite(223, 100, 10, 1, 1, 28)
+ scrollingsprite(223, 170, 15, 1, 1, 30)
+ --large clouds
+ scrollingsprite(35, 80, 5, 2, 1, 35)
+ scrollingsprite(35, 180, 9, 2, 1, 38)
+ scrollingsprite(35, 260, 9, 2, 1, 38)--
+ scrollingsprite(51, 40, 5, 2, 1, 35)
+ scrollingsprite(51, 120, 7, 2, 1, 36)--
+ scrollingsprite(51, 160, 7, 2, 1, 36)
+ scrollingsprite(51, 240, 9, 2, 1, 38)
+ --fg clouds
+ scrollingcircles(-11, 40, 25, 20, 2)
+ scrollingcircles(-12, 40, 25, 20, 4)
+
+ --landscape
+ scrollingcircles(125, 72, 25, 20, 8)
+ scrollingcircles(126, 72, 25, 20, 2)
+
+ --landscape lines
+ rectfill(0,112,128,128,8)
+ line(0, 113, 128, 113, 2)
+ line(0, 116, 128, 116, 2)
+ line(0, 119, 128, 119, 2)
+
+ for i = 1, 32, 1 do
+ line(((-gt+i*2.5)*80)%128, 111, ((-gt+i*2.5)*80)%128*1.2-12.8, 125, 2)
+ end
+
+ --pine trees
+ local treex = {10,30,20,50,62,70,80,95,100,120}
+ for i = 1, 10, 1 do
+ scrollingsprite(231,treex[i],94+sin(i/5.2323),1,2,72,(i%2==0))
+ end
+ --small buildings
+ scrollingsprite(226,15,98,2,2,80)
+ scrollingsprite(226,65,97,2,2,80)
+ scrollingsprite(226,95,96,2,2,80)
+ scrollingsprite(226,115,97,2,2,80)
+ --totem poles
+ scrollingsprite(230,25,99,1,2,84)
+ scrollingsprite(230,65,100,1,2,83,true)
+ scrollingsprite(230,85,101,1,2,83)
+ --dead trees
+ scrollingsprite(228,30,104,2,2,86)
+ scrollingsprite(228,75,105,2,2,86,true)
+ scrollingsprite(228,100,104,2,2,86)
+ scrollingsprite(228,120,105,2,2,86,true)
+ --large buildings (front)
+ scrollingsprite(192,52,94,2,4,90)
+ scrollingsprite(192,22,91,2,4,90)
+ scrollingsprite(192,102,90,2,4,90)
+ scrollingsprite(192,137,92,2,4,90)
+
+ scrollingcircles(150, 100, 30, 32, 8)
+ scrollingcircles(151, 100, 30, 32, 2)
+end \ No newline at end of file
diff --git a/toxicinvaders_misc/musicplayer/draw_music.lua b/toxicinvaders_misc/musicplayer/draw_music.lua
new file mode 100644
index 0000000..edc3bb6
--- /dev/null
+++ b/toxicinvaders_misc/musicplayer/draw_music.lua
@@ -0,0 +1,29 @@
+--pallete replacement
+pal({1,2,131,141,5,6,7,136,9,137,139,12,133,3,140,130}, 1) --don't ask me why, but this table of colors starts at 1, and 0 is the final color
+
+
+drawbg()
+drawobjs() --only used for acid trans here
+
+menushipscroll += ft
+for i = 1, 3, 1 do
+ spr(14+i*16, (-menushipscroll*(i*20)+(sin(i/3)*128)+8)%(128+8)-1*8, i*36+sin(menushipscroll*i/3)*i*2-20,1,1)
+end
+
+if t() < 1 then
+ drawlogo(24,19.5+sin(0.25+t()*0.5)*6.5)
+else
+ drawlogo(24,26)
+end
+credits(40,116)
+
+if not hideui then
+ --main screen items
+ mainmenutext(15,74)
+
+ --intro acid transtition
+ acidcounter+=ft
+ acidtransition()
+end
+
+-- print(autoplay,0,0,7) \ No newline at end of file
diff --git a/toxicinvaders_misc/musicplayer/music.p8 b/toxicinvaders_misc/musicplayer/music.p8
new file mode 100644
index 0000000..f94f733
--- /dev/null
+++ b/toxicinvaders_misc/musicplayer/music.p8
@@ -0,0 +1,385 @@
+pico-8 cartridge // http://www.pico-8.com
+version 35
+__lua__
+--▶ toxic invaders soundtrack ◀
+--▶ 1029chris ◀
+
+-- 0-26 SLOTS RESERVED FOR SFX
+-- SPRITEWORK BY RIBBONCABLE
+-- CART PUT TOGETHER BY RIBBON
+
+#include objects_music.lua
+#include particles_music.lua
+#include ui_music.lua
+
+function _update60()
+#include update_music.lua
+end
+
+function _draw()
+#include background_music.lua
+#include draw_music.lua
+end
+__gfx__
+48888840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+8a98a980cccccccc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+89889880eeeeeeee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+8988a980777777770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+48888840eeeeeeee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000cccccccc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ebbbe3000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ebea00000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003eb900000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003bb3b000000000
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003bb3b000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003eb900000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ebea00000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ebbbe3000000000
+00000000000000000000000000444000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000044444000044440000000000000000000000000000000000000000000000000000000000000000000000000000ebbbe900000000
+000000000000000000000000444444004444444000000000000000000000000000000000000000000000000000000000000000000000000003bbe30000000000
+00000000000000000000000044044004444004440000000000000000000000000000000000000000000000000000000000000000000000007e3b300000000000
+00000000000000000000000044400444400040440000000000000000000000000000000000000000000000000000000000000000000000007e3b300000000000
+000000000000000000000000444444440000444400000000000000000000000000000000000000000000000000000000000000000000000003bbe30000000000
+000000000000000000000000044444400000044000000000000000000000000000000000000000000000000000000000000000000000000000ebbbe900000000
+00000000000000000000000000444400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000444444400004400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000004444444440044440000000000000000000000000000000000000000000000000000000000000000000000000033bb3000000000
+00000000000000000000000044440004444040440000000000000000000000000000000000000000000000000000000000000000000000007ebe33e900000000
+000000000000000000000000444044404444044400000000000000000000000000000000000000000000000000000000000000000000000000e3bbe000000000
+000000000000000000000000444044440444444000000000000000000000000000000000000000000000000000000000000000000000000000e3bbe000000000
+00000000000000000000000044440444004444000000000000000000000000000000000000000000000000000000000000000000000000007ebe33e900000000
+00000000000000000000000004444444000000000000000000000000000000000000000000000000000000000000000000000000000000000033bb3000000000
+00000000000000000000000000444440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000222272222222222222fff3220000333333333333000a0000a99a000033333333
+000000000000000000000000000000000000000000000000000000000000000022252222222828222beffff200003bbbbb3bbbb300a9a0009999a0003b3bbbb3
+000000000000000000000000000000000000000000000000000000000000000022d2222222888882bdde1fff0000333b333b33b30a999a00aaaaaa003b3b3333
+0000000000000000000000000000000000000000000000000000000000000000200dd00022888882dffdf1f20000003b303b33b3a99999a0a99999a03b3b3000
+00000000000000000000000000000000000000000000000000000000000000000555070022288822d07d073f0000003e303e33e3aa99999aaa99999a3e3e3000
+0000000000000000000000000000000000000000000000000000000000000000dfcc060d28228222bdd9ad220000003b303b33b30aa999990aaaaaaa3b3b3333
+00000000000000000000000000000000000000000000000000000000000000002d0000d288822282ea9999220000003e303eeee300aa999900aaaaaa3e3eeee3
+00000000000000000000000000000000000000000000000000000000000000002220d222282222222ea999920000003330333333000aa99a000aaaa033333333
+0000000000000000ddddddd000dddd000022222222000022222222202222dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd00000000
+0288888888888200dddddd000dddddd0000022200000222222222022222ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd00000000
+2888888888888820ddddd022ddddddddd000000000222222222202222dddddddddddddddddddddddddddddddddddddddddddddddddddddddd22222dd02222000
+8822224442222880dddd022ddddddddddd0000002222222222022222ddddddddddddddddddddddd022222222dddddddddddddddddddddd022222222d22000200
+8822244422222880ddd0222dddddddddddd0002222222222002222ddddddddddddddddddddddd22222222222222ddddddddddddddddd02222222222220220020
+8888888888888880dd0222dddddddddddddd2222222222002222dddddddddddddddddddddd0222222222222222222dddddddddddd00222222222222222220200
+8820222222202880d0222ddddddddddddd22222222220022222ddddddddddddddd222dddd222222222222222222222ddddddddd0022222202222222202200000
+2200282028200220d2222ddddddddddd22222222220022222dddddddddddddddd22222d022002222222222222222222ddddddd002220dddd0222222200000000
+00002220222000000222dddddddd2222222222222d22222dddddddddddddddddd2200202202202222220000222222222dddd00220ddddddd0222222200000000
+00028888888200002222dddddd2222222222222d22222dddddddddddddddddddd22022022202022222022220222222222d0020dddddddddd2222222200000000
+002888888888200022222222222222222222dd2222ddddddddddddddddddddddd22200002222022220222022022002222200ddddddddddd02222222202220000
+02888222228882002222222222222222dddd2222ddddddddddddddddddddddddd0222222222022220022020202022022222dddddddddddd22222d22222022000
+0288288888288200222222222222ddd222222ddddddddddddddddddddddddddddd000000000222220022022202202022222ddddddddddd222222222d22202202
+288888888888882022222222dd222222222ddddddddddddddddddddddddddddddd0000000222222200222000002220222220ddddddddd222222d222d02220220
+2882882828828820d222222222222222ddddddddddddddddddddddddddddddddd00222222222222200022222222202222222dddddddd222222d222dd00000000
+2888888888888820dd22222222222dddddddddddddddddddddddddddddddddddd02222222222222220000222220022222222ddddddd2222222222ddd00000000
+2828284828282820000288888888200000000000000000002220222000008000d00002222222222222200000000222222222dddddd2222222d222ddd00444400
+2828888888882820002882242228820000000000282000002822282000028200d22220222220022222220000002222222222ddddd2222222d222dddd04400040
+2828484828282820008888888888880000000028282000002888882000088800222222022202202222222222222222222222dddd2222222d222ddddd40444004
+28288888888828200022200000022200000000282828200022828222008888202220022022202022222222222222222222220dd2222222d222dddddd44404404
+28284828282828200028200000028200000028282828200022828282082888802202002200222022222222222222222222200d2222222d222ddddddd04044004
+282888888888282000282888888282000000282828282000288888820088888222220002222202222222222222222222220002222222d222dddddddd00000040
+28282828284828200022888888882200000028282828200022828222088882880220200000002222222222222222222220002222222d222ddddddddd40000000
+2828888888882820002828284848820000002828282820000282820028828802d00022000002222222222222222222220002222222d222dddddddddd04044000
+2822282848222820002888888888820000002828282820000282820000288880d0022222222222222222222222222220002222222d222ddddddddddd00404000
+2828888888882820028822444222882000000288288200000282820008888888dd02222222222222222222222222220022222222d222dddddddddddd00000000
+2828282828282820028824442222882000000028282000000282820082808828dd0022222222222222222222222220022222222d222ddddddddddddd40044400
+2828882228882820028888888888882000000028820000000282820000888880dd002222222222222222222222200022222222d222dddddddddddddd40440440
+2828282228282820028288888828282000000028200000000282820008208820ddd00222222222222222222222000222222202222ddddddddddddddd40444404
+2888882228888820028888282888882000000028200000000282820000022200dd00002222222222222222220002222222202222dddddddddddddddd04404004
+2888282228288820028288222828282000020028200020000282820200008200d00000022222222222222200022222222202222ddddddddddddddddd00000040
+2888882228888822228888222888882202022028222020202282822200008200000dd00022222222222200022222222220222ddddddddddddddddddd00404000
+__label__
+iiiiittttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
+iiiitttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
+iiiitttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
+iiittttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
+iiittttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
+iiittttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
+iitttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
+iitttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttppttttttttttttttttppttttttttttttttttttttttttttt
+iitttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttppttttttttttttttttppttttttttttttttttttttttttttt
+iitttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttpp99ppttttttttttttpp99ppttttttttttttttttttttttttt
+iitttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttpp99ppttttttttttttpp99ppttttttttttttttttttttttttt
+iitttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttpp999999ppttttttttpp999999ppttttttttttttttttttttttt
+iitttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttpp999999ppttttttttpp999999ppttttttttttttttttttttttt
+iitttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttpp9999999999ppttttpp9999999999ppttttttttttttttttttttt
+iitttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttpp9999999999ppttttpp9999999999ppttttttttttttttttttttt
+iiittttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttpppp9999999999pppp9999999999ppppttttttttttttttttttttt
+iiitttttttttttttttttttttttttttttttttttttttttttttttttttjjjjjjjjjjjjjjjjjjjjjpppp9999999999pppp9999999999ppppjjjjjjjjjjjjjtttttttt
+iiiittttttttttttttttttttttttttttttttttttttttttttttttttjjjjjjjjjjjjjjjjjjjjjjjpppp99999999999999999999ppppjjjjjjjjjjjjjjjtttttttt
+iiiittttttttttttttttttttttttttttttttttttttttttttttttttjjrrrrrrrrrrjjrrrrrrrrjpppp99999999999999999999ppppjrrjjrrrrrrrrjjtttttttt
+iiiiitttttttttttttttttttttttttttttttttttttttttttttttttjjrrrrrrrrrrjjrrrrrrrrjjtpppp9999999999999999pppptjjrrjjrrrrrrrrjjtttttttt
+iiiiitttttttttttttttttttttttttttttttttttttttttttttttttjjjjjjrrjjjjjjrrjjjjrrjjtpppp9999999999999999pppptjjrrjjrrjjjjjjjjtttttttt
+iiiiiittttttttttttttttttttttttttttttttttttttttttttttttjjjjjjrrjjjjjjrrjjjjrrjjtttpppp9999pppp9999pppptttjjrrjjrrjjjjjjjjtttttttt
+iitiiiitttttttttttttttttttttttttttttttttttttttttttttttjjjjjjrrjjjjjjrrjjjjrrjjtttpppp9999pppp9999pppptttjjrrjjrrjjjjjjjjtttttttt
+iiiiii22ttttttttttttttttttttttttttttttttttttttttttttttjjjjjjrrjjjjjjrrjjjjrrjjtttttpp9999pppp9999pptttttjjrrjjrrjjjjjjjjtttttttt
+iiiii2222tttttttttttttttttttttttttttttttttttttttttttttttttjj33jjttjj33jjjj33jjtttttpp9999pppp9999pptttttjj33jj33jjtttttttttttttt
+iiiii22222ttttttttttttttttttttttttttttttttttttttttttttttttjj33jjttjj33jjjj33jjtttpp9999999999999999pptttjj33jj33jjtttttttttttttt
+iiiii2222222ttttttttttttttttttttttttttttttttttttttttttttttjjrrjjttjjrrjjjjrrjjtttpp9999999999999999pptttjjrrjjrrjjjjjjjjtttttttt
+iiii22222222222tttttttttttttttttttttttttttttttttttttttttttjjrrjjttjjrrjjjjrrjjtpppppppppppppppppppppppptjjrrjjrrjjjjjjjjtttttttt
+iiii222222222222ttttttttttttttttttttttttttttttttttttttttttjj33jjttjj33333333jjtpppppppppppppppppppppppptjj33jj33333333jjtttttttt
+iiii222222222222ttttttttttttttttttttttttttttttttttttttttttjj33jjttjj33333333jpp9999999999pppp9999999999ppj33jj33333333jjtttttttt
+iiii2222222222222tttttttttttttttttttttttttttttttttttttttttjjjjjjttjjjjjjjjjjjpp9999999999pppp9999999999ppjjjjjjjjjjjjjjjtttttttt
+iii22222222222222tttttttttttttttttttttttttttttttttttttttttjjjjjjttjjjjjjjjjpp9999999999pppppppp9999999999ppjjjjjjjjjjjjjtttttttt
+iii222222222222222ttttttttttttttttttttttttttttttttttttttttjjjjjjttjjjjjjjjjpp9999999999pppppppp9999999999ppjjjjjjjjjjjjjtttttttt
+iii22222222222ttt22tttttttttttttttttttttttttttttttttttttttjjjjjjttjjjjjjjjjppppppppppppppttttppppppppppppppjjjjjjjjjjjjjtttttttt
+iii2222222222ttttt22tttttttttttttttttttttttttttttttttttttttttttttttttttttttppppppppppppppttttppppppppppppppttttttttttttttttttttt
+ii2222222222ttttttt22ttttttttttttttttttttttttttttttttttttttttttttttttttttttppppppppppppttttttttppppppppppppttttttttttttttttttttt
+ii222222222ttttttttt22tttttttttttttttttttttttttttttttttttttjjjjjtttjjjjttttjjjjjppppjjjjtttjjjjppppjjjjjpppjjjjtttttjjjjtttttttt
+ii222222222tttttttttt22ttttttttttttttttttttttttttttttttttttjrrrjtttjrrjjtttjrjrjpppjjrrjtttjrrjjtppjrrrjpttjrrjjtttjjrrjtttttttt
+ii22222222ttttttt222tt22tttttttttttttttttttttttttttttttttttjjrjjtttjrjrjtttjrjrjpppjrjrjtttjrjrjtppjrrjjpttjrjrjtttjrjjjtttttttt
+ii22222222tttttt2ttt2tt22ttttttttttttttttttttttttttttttttttjj3jjtttj3j3jtttj333jtttj333jtttj3j3jtttj3jjjtttj33jjtttjjj3jtttttttt
+ii22222222ttttttttttt2tt22tttttttttttttttttttttttttttttttttj333jtttj3j3jtttjj3jjtttj3j3jtttj33jjtttjj33jtttj3j3jtttj33jjtttttttt
+ii22222222tttttttttttt2tt22ttttttttttttttttttttttttttttttttjjjjjtttjjjjjtttjjjjjtttjjjjjtttjjjjjtttjjjjjtttjjjjjtttjjjjjtttttttt
+ii22222222tttttttttttt2ttt222ttttttttttttttttttttttttttttttjjjjjtttjjjjjttttjjjttttjjjjjtttjjjjtttttjjjjtttjjjjjtttjjjjttttttttt
+ii222222222ttttttttttt22ttt22222tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
+ii222222222tttttttttt222ttttt222222222tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
+iii222222222tttttttt2222ttttt22ttttt222tttttttttttttttttttttt2222222222222tttt2222222222222222222222222222222222222222tttttttttt
+iii22222222222ttttt22222tttttt22ttttt222ttttttttttttttttttttt2999292929992ttt22992299292929922992299929992999229929292tttttttttt
+iii222222222222222222222tttttt2222ttt2222tttttttttttttttttttt2292292929222ttt29222929292929292929229229292929292229292tttttttttt
+iiii222222222222222222222ttttt2222tttt2222ttttttttttttttttttt22p22ppp2pp22ttt2ppp2p2p2p2p2p2p2p2p22p22pp22ppp2p222pp22tttttttttt
+iiii222222222222222222222tttttt22ttttt22222ttttttttttttttttttt2p22p2p2p222ttt222p2p2p2p2p2p2p2p2p22p22p2p2p2p2p222p2p2tttttttttt
+iiii222222222222222222222ttttttttttttt222222tttttttttttttttttt2p22p2p2ppp2ttt2pp22pp222pp2p2p2ppp22p22p2p2p2p22pp2p2p2tttttttttt
+iiiii222222222222222222222ttttttttttt22222222ttttttttttttttttt222222222222ttt22222222222222222222222222222222222222222tttttttttt
+iiiii222222222222222222222ttttttttttt222222222tttttttttttttttt222222222222ttt22222222t22222222222222222222222222222222tttttttttt
+iiiiii222222222222222222222ttttttttt222222222222tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
+iiiiii2222222222222222222222ttttttt222222222222222tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
+iiiiiii2222222222222222222222tttt22222222222222222222ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
+iiiiiiii22222222222222222222222222222222222222222222222222222tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt2
+iiiiiiiii222222222222222222222222222222222222222222222222222tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt22
+iiiiiiiiii22222222222222222222222222222222222222222222222222ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt222
+iiiiiiiiiiii22222222222222222222222222222222222222222222222ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt2222
+iiiiiiiiiiiii2222222222222222222222222222222222222222222222tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt22222
+iiiiiiiiiiiii2222222222222222222222222222222222222222222222ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt222222
+iiiiiiiiiiiiii222222222222222222222222222222222222222222222ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt22222222
+iiiiittttiiiii222222222222222222222222222222222222222222222ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt2222222222
+iiiittiiitiiii222222222222222222222222222222222222222222222ttttttttttttttttttttttttttttttttttttttttttttttttttttttttt222222222222
+iiititttiitiii2222222222222222222222222222222222222222222222tttttttttttttttttttttttttttttttttttttt22222222tttttt2222222222222222
+iiitttittitiii2222222222222222222222222222222222222222222222tttttttttttttttttttttttttttttttttt2222222222222222222222222222222222
+iiiitittiitiiii2222222222222222222222222222222222222222222222tttttttttttttttttttttttttttttt222222tttttt2222222222222222222222222
+iiiiiiiiitiiiii222222222222222222222222222222222222222222222222ttttttt22tttttttttttttttt22222222tttttttt222222222222222222222222
+iiitiiiiiiiiiii22222222222222222222222222222222222222222222222222222222222222tttttt222222222222tttttttttt22222222222222222222222
+iiiitittiiiiiiii222222222222222222222222222222222222222222222222222222tttttt22222222ttt22222222ttttttttttt2222222222222222222222
+iiiiiiiiiiiiiiii22222222222222222222222222222222222222222222222222222tttttttttttttttttttt222222ttt2ttttttt2222222222222222222222
+iiiiiiiiiiiiiiii2222222222222222222222222222222222222222222222222222tttttttt22222ttttttttt22222tttt2tttttt2222222222222222222j33
+iiiiiiiiiiiiiiii2222222222222222222222222222222222222222222222222222ttttttt2ttttt2ttttttttt22222ttt2tttttt2222222222222222222333
+iiiiiiiiiiiiiiiii222222222222222222222222222222222222222222222222222tttttt2ttttttt2ttttttttt22222222tttttt2222222222222222222333
+iiiiiiiiiiiiiiiii222222222222222222222222222222222222222222222222222tttttt2tttttttt2tttttttttt22222ttttttt222222222222222222i333
+iiiitiiiiiiiiiiii222222222222222222222222222222222222222222222222222tttttt2tttttttt2ttttttttttttttttttttt222222222222222222iij33
+iiiiiiiiiiiiiiiii222222222222222222222222222222222222222222222222222ttttttt2tttttttt2tttttttttttttttttttt22222222222222222iiiiii
+iiiiiiiiiiiiiiiiii22222222222222222222222222222222222222222222222222tttttttt222ttttt2ttttttttttttttttttt2222222222222222iiiiiiii
+iiiiiiiiiiiiiiiiii22222222222222222222222222222222222222222222222222tttttttttttttttt22ttttttttttttttttt2222222222222222iiiiiiiii
+iiiiiiiiiiiiiiiiiii22222222222222222222222222222222222222222222222222ttttttttttttttt222ttttttttttttttt2222222222j333jiij333jiiii
+iiiiiiiiiiiiiiiiiiii2222222222222222222222222222222222222222222222222tttttttttttttt222222ttttttttttt22222222222233333ii33333j333
+iiiiiiiiiiiiiiiiiiiiii222222222222222222222222222222222222222222222222ttttttttttttt22222222ttttttt2222222222222233333ii333333333
+iiiiiiiiiiiiiiiiiiiiiiii22222222222222222222222222222222222222222222222ttttttttttt22222222222222222222222222222i33333ii333333333
+iiiiiiiiiiiiiiiiiiiiiiii2222222222222222222222222222222222222222222222222ttttttt2222222222222222222222222222iiiij333jiij33333333
+iiiiiiiiiiiiiiiiiiiiiiiiii22222222222222222222222222222222222222222222222222222222222222222222222222222222iiiiiiiiiiiiij33333333
+iiiiiii22222iiiiiiiiiiiiii22222222222222222222222222222222222222222222222222222222222222222222222222222222iiiiiiiiiiiii333333333
+iiiii222222222iiiiiiiiiiiii2222222222222222222222222222222222222222222222222222222222222222222222222222222iiiiiiiiiiiij333333333
+iiii22222222222iiiiiiiiiiii2222222222222222222222222222iiiiii22222222222222222222222222222222222iiiiii22222iiitiiiiiii3333333333
+iiii222222222222iiiiiiiiiiii2222222222222222222222222ii2222iii2222iii2222222222222222222222222ii2222iii2222iiiiiiiiiij3333333333
+iii222222iii2222iiiiiiiiiiii222222222222222222222222i2222222iii222iiiiii222222222222222222222i2222222iii222iiiiiiiiii33333333333
+iii22222i222i2222iiiiiiiiiiii22222222222222222222222i22222222ii222iiiiiiiiiiiii22222222222222i22222222ii222iiiiiijjii33333333333
+iii22222i2222i222iiiiiiiiiiii22222222222222222222222i22222222ii222iiiiiiiiiiiiiiiiiiii2222222i22222222ii222iiiiij33ji33333333333
+iii22222i2222i2222iiiiiiiiiiii2222222222222222222222i22i22222ii222iiiiiiiiiiiiiiiiiiii2222222i22i22222ii222iiiiij33ji33333333333
+iii222222i222i2222iiiiiiiiiiiii2222222222222222222222ii222222ii222iiiiiiiititiiiiiiiii22222222ii222222ii222iiiiiijjii33333333333
+iii22222222222i2222iiiiiiiiiiiii222222222222i2222222222222222ii222iiiiiiiiiiiiiiiiiiii2222222222222222ii222iiiiiiiiii33333333333
+iii22222222222i2222iiiiiiiiiiiiiii222222222iii22222222222222iii22iiiiiiitiitttiiiiiiiii22222222222222iii22iiiiiiiiiiij3333333333
+iiii2222222222i2222iiiii2222iiiiiiii2222iiiiii2222222222222iii222iiiiiiitittittiiiiiiii2222222222222iii222iiiiiiiiiiii3333333333
+iiii2222222222i22222iii222222iiiiiiiiiiiiiiiiii22222222222iiii22iiiiiiiitittttitiiiiiiii22222222222iiii22iiiiiiiiiiiiij333333333
+iiiii22222222ii22222ii22222222iiiiiiiiiiiiiiiiii222222222iiii222iiiiiiiiittitiitiiiiiiiii222222222iiii222iiiiiiiiiiiiiij33333333
+iiiiii222222iii222222i22222222iiiiiiiiiiiiiiiiiiii22222iiiii222iiiiiiiiiiiiiiitiiiiiiiiiiii22222iiiii222iiiiiiiiiiiiiiiii3333333
+iiiiiiiiiiiiiii222222ii2222i222iiiiiiiiiiiiiiiiiiiiiiiiiiiii22iiiiiiiiiiiititiiiiiiiiiiiiiiiiiiiiiiii22iiiiiiij3jiiiiiiij3333333
+iiiiiiiiiiiiiiii222222ii222i222iiiiiiiiiiiiiiiiiiiiiiiiii2iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii2iiiiiiiiiii333iiiij3333333333
+iiiiiiiiiiiiiiii2222222iiii2222iiiiiiiiiiiiiiiiiiiiiiiii222iiiiiiiiiiiiiiiiiiiiiiiiitiiiiiiiiiiii222iiiiiiiiiij3jiij333333333333
+iiiiiiiiiiiiiiiii2222222222222iiiiiiiiiiiiiiiiiiiiiiiiiii2iiiiiiiiiiiiiijjiiiiiiiiiiiiiiiiiiiiiiii2iiiiiiiiiiiiiii33333333333333
+iiiiiiiiiiiiiiiiii222222222222iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiij33jiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii333333333333333
+iiiiiiiiiiiiiiiiiii2222222222iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiij33jiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii3333333333333333
+iiiiiiiiiiiiiiiiiiiii2222222iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiij3jiiiiiijjij33jiiiiiiiij33jiiiiiiiiiiiiiiij333j33333333333333333
+iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiitiiiiiiijjiij3jiiiiiiiii333iiiiiiiii3333iiiiiiij3333jiiiiiiiiiiiiii3333333333333333333333
+iiiiiiiiiittitiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiij33ji333iiiiiiiiij3jiiiiiiij33333iiiiiii333333iiiiiiiiiiiiii3333333333333333333333
+iiiiiiiiiiiiiitiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiij33jij3jiiiiiiiiiiiiiiiiij33333333jiiiii333333iiiiiiiiiiiiii3333333333333333333333
+iiiiiiiitiiiiiiiiiiiiiiiiiiiiiiiiiitiiiiiiiiiiijjiiiiiiiiiiiiiiiiij333j33333333333iiiij3333jiiiiiiiiiiiiiij333333333333333333333
+iiiiiiitiittitiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii33333333333333333iiiij33jiiiiiiiiiiiiiiij333333333333333333333
+iiiiiiitittitttiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii333333333333333333iiiiiiiiiiiiiiiij33jii3333333333333333333333
+iiiiiiitiitttitiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiij33333jiiiiii333333333333333333jiiiiiiiiiiiiij333333j3333333333333333333333
+iiiiiiiitiiittiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiij3333j33333333iiii33333333333333333333iiiiiiij333jj333333333333333333333333333333
+iiiiiiiiittttiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii3333333333333333jj333333333333333333333jiiiiii333333333333333333333333333333333333
+iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiij3333333333333333333333333333333333333333iiiiii333333333333333333333333333333333333
+iiitiiiiiiiiiiiiiiiiiijiiiiiiiiiiiiiiiiiiiiii33333333333333333333333333333333333333333jiiiii333333333333333333333333333333333333
+iiiiiiiiiiiiiiiiiiiiij3jiiiiiiiiiiiiiiiiiiiii333333333333333333333333333333333333333333iiiiij33333333333333333333333333333333333
+iiiiiiiiiiiiiiiiiiiiiijiiiiiiiiiiiiiiiiiiiiii333333333333333333333333333333333333333333jiiij333333333333333333333333333333333333
+iiiiiiiiiiiiiiiiiiiijiiiiiiiiiiiiij3jiiiiiiii33333333333333333333333333333333333333333333333333333333333333333333333333333333333
+iiiiiiiiiiiiiiiiiiij3jiiiiij333jii333iiiiiiiij3333333333333333333333333333333333333333333333333333333333333333333333333333333333
+iiiiiiiiitiiiiiiiiiijiiiiii33333iij3jiiiiiij333333333333333333333333333333333333333333333333333333333333333333333333333333333333
+iiiiiiiiiiiiiiiiiiiiiiiiiii33333iiiiiiiiij33333333333333333333333333333333333333333333333333333333333333333333333333333333333333
+iiiiiiiiiiiiiiiiiiiiiiiiiii33333iiiiiiiij333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
+iiiiiiiiiiiiiiiiiiiiiiiiiiij333jiiiiiiii3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
+iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
+
+__sfx__
+a008000022614286102d6103061033610356103661037610376103561034610326102e6102b610286102661022610206101d610186101661013610116100f6100c61009610066100461003610016100161000615
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+471200001f0111f0121f0121f0121f0121f0121f0121f0122101121012210122101215012210122d0122d01321012210122101221012210122101221012210122301223012230122301223012230122301223012
+411200002201122012220122201222012220122201222012250112501225012250120d01219012250122501325012250122501225012250122501225012250122701227012270122701227012270122701227012
+41120000260112601226012260122601226012260122601228011280122801228012100121c012280122801328012280122801228012280122801228012280122a0112a0122a0122a0122a0122a0122a0122a012
+001208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+d11c00081f011220161a0161f0162b0112e016260162b016000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+490e00101000334615346253461510073346153462534615100033461534625346151007334615346253461500000000000000000000000000000000000000000000000000000000000000000000000000000000
+110e00080030207755077550775500700077550775507755000000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+09380000221212212229121291222912500100001000f1021b1211b1222812128122281250010000100281021d1211d1222112121122211250010000100211021f1211f122221212212222125221002210000000
+a71c0010373272e327373272e327373122d312223120c3122b327223272b327223272b31221312163120031200000000000000000000000000000000000000000000000000000000000000000000000000000000
+490e0008100533460510003346051c655346050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+4d0e002010053073250a425093251c655073250c4250a32510053073250a425093251c655073250c4250e32510053073250a425093251c655073250c4250a32510053073250a425093251c655073250042502325
+d11c000821011240161c016210162d01130016280162d01621000180001c000210002d00024000280002d00000000000000000000000000000000000000000000000000000000000000000000000000000000000
+4d0e002012053093250c4250b3251e655093250e4250c32512053093250c4250b3251e655093250e4251032512053093250c4250b3251e655093250e4250c32512053093250c4250b3251e655093250242504325
+4d0e00200e0530532508425073251a655053250a425083250e0530532508425073251a655053250a4250c3250e0530532508425073251a655053250a425083250e0530532508425073251a655053250042500325
+d11c000821011240161c016210162d01130016280162d0161f000220001a0001f0002b0002e000260002b00000000000000000000000000000000000000000000000000000000000000000000000000000000000
+d10e00201f42222422264222e4021f42222422264222e4021f42222422264222e4021f42222422264222e40225422284222c4222840225422284222c4222840225422284222c4222840225422284222c42234402
+911c02042b311133212b3211331100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+490e000021600156002160021600216003960039600396002162515600216002160021625396003960039600156252160521625240002d625396053962500000156251560521625216052d625396253962539625
+5d0e0020100730715407252071521c675071440c1420a14210073071540a152091521c675071540c3520e152160730d1540d2510d253226750d154121521015216073160731607316073226750d3541946425474
+5d0e0020100730713407242071321c675071340c1320a13210073071340a132091321c675071340c3420e132100730713407251072531c675071340c1320a13210073071340a132091321c675071340035202452
+5d0e0020100730727407252072521c675073440c4420a34210073073440a442093421c675073440c4420e342100730725407251072531c675073440c4420a34210073073440a442093421c675073440044202342
+5d0e0020100730725407252072521c675073440c4420a34210073073440a442093421c675073440c4420e342160730d2440d2410d243226750d3441244210342160730d344104420f342226750d3440644208342
+5d0e0020120730925409252092521e675093440e4420c34212073093440c4420b3421e675093440e44210342180730f2540f2510f253246750f3441444212342180730f3441244211342246750f344084420a342
+d10e002021422244222842230402214222442228422304022142224422284223040221422244222842230402274222a4222e4222a402274222a4222e4222a402274222a4222e4222a402274222a4222e42236402
+5d0e0020100730724413242072421c6751f2442b2421f24210073133441f340093421c67513344184420e342100730d244192410d243226750d2441e44210342100730d344104420f34222675193442b2422b243
+490e0010100633461534625346151e665346151006334615100633461534625346151e66534615346253461500000000000000000000000000000000000000000000000000000000000000000000000000000000
+5d0e0020120731524421242152421e67515244212422124312073093440c4420b3421e6751e6751e6751e675180730f2441b2410f243246750f2442c2421e242180730f3441244211342246750f3442044222342
+5d1c0008100530723413232072321c655072341323207242100001330007300093001c60013300184000e300100000d200192000d200226000d2001e40010300100000d300104000f30022600193002b2001f200
+5d1c1000100000723413232072321c6000723413232072321000007234132321f2321c600072341f23213232100000d200192000d200226000d2001e40010300100000d300104000f30022600193002b2001f200
+5d381000072440724213242072421c675072441c6751f242072440724213242072421c675072001c6001f200100000d200192000d200226000d2001e40010300100000d300104000f30022600193002b2001f200
+471200001f0111f0121f0121f0121f0121f0121f0121f0122101121012210122101215012210122d0122d0131d0121d0121d0121d0121d0121d0121d0121d0121f0111f0121f0121f012130121f0122b0122b013
+411200002201122012220122201222012220122201222012250112501225012250120d01219012250122501321012210122101221012210122101221012210122201122012220122201216012220122e0122e013
+41120000260112601226012260122601226012260122601228011280122801228012100121c01228012280132401224012240122401224012240122401224012260112601226012260120e0121a0122601226013
+5d1200000702213022070221302207022130220702213022090221502209022150220902215022090221502205022110220502211022050221102205022110220702213022070221302207022130220702213022
+5d120000100731302207022130221c675130220702213022100731502209022150221c675150220902215022100731102205022110221c675110220502211022100731302207022130221c675130220702213022
+5d120000100731302207022130221c675130220702213022100731502209022150221c675150220902215022100731502209022150221c6751502209022150220b0220b0220b0220b0220b0220b0220b0220b022
+__music__
+00 20616263
+00 20256263
+01 20266144
+00 23266263
+00 24266263
+00 20266144
+00 27286144
+02 2a296144
+00 2c6b4344
+00 2c2f4344
+00 2c304344
+00 2b2e6161
+00 33326161
+00 2d2e6161
+01 21316161
+02 21326161
+01 37756161
+01 37756161
+00 37356161
+01 21316161
+00 21326161
+00 35316161
+00 35326161
+00 35396161
+00 21346161
+00 21366161
+00 35346161
+00 35366161
+02 35236161
+01 7a3d7d7d
+00 3a3d3c3b
+00 413e657e
+00 3a3e3c3b
+00 413e657e
+02 3a3d3c3b
+00 1b1a1c3f
+04 1d424344
+
diff --git a/toxicinvaders_misc/musicplayer/objects_music.lua b/toxicinvaders_misc/musicplayer/objects_music.lua
new file mode 100644
index 0000000..3c12f48
--- /dev/null
+++ b/toxicinvaders_misc/musicplayer/objects_music.lua
@@ -0,0 +1,69 @@
+obj = {}
+gt = 0 -- game time
+ft = 1/60 --frametime
+scrollspeed = 0
+menushipscroll = 0
+acidcounter = 0
+hideui = false
+autoplay = false
+autoplaytimer = 90
+tracknumber = 0
+currentsong = -1
+fadeouttimer = 1
+tracktitleposition = -200
+newtracktitleposition = 0
+
+function playsong(song, fade)
+ fade = fade or 0
+ if song ~= currentsong then
+ music(song, fade)
+ currentsong = song
+ end
+end
+
+function fadeoutsong()
+ fadeouttimer = 1
+ playsong(-1,1000) --fades out currentsong
+end
+
+function selectmusic()
+ if tracknumber == -1 then
+ tracknumber = 0
+ elseif tracknumber == 0 then
+ playsong(29)
+ elseif tracknumber == 1 then
+ playsong(0)
+ elseif tracknumber == 2 then
+ playsong(8)
+ elseif tracknumber == 3 then
+ playsong(17)
+ elseif tracknumber == 4 then
+ playsong(35)
+ end
+end
+
+function updatetracktitlepos()
+ if tracknumber == 0 then
+ newtracktitleposition = -4
+ elseif tracknumber == 1 then
+ newtracktitleposition = 164
+ elseif tracknumber == 2 then
+ newtracktitleposition = 336
+ elseif tracknumber == 3 then
+ newtracktitleposition = 517
+ elseif tracknumber == 4 then
+ newtracktitleposition = 700
+ end
+end
+
+function updateobjs()
+ foreach(obj, function(obj) obj:update() end)
+end
+
+function drawobjs()
+ foreach(obj, function(obj) obj:draw() end)
+end
+
+function lerp(start, destination, amount)
+ return start + amount * (destination - start);
+end \ No newline at end of file
diff --git a/toxicinvaders_misc/musicplayer/particles_music.lua b/toxicinvaders_misc/musicplayer/particles_music.lua
new file mode 100644
index 0000000..18ef3f8
--- /dev/null
+++ b/toxicinvaders_misc/musicplayer/particles_music.lua
@@ -0,0 +1,29 @@
+function addcircle(x, y, velx, vely, r, time, color, grav)
+ local circle = {
+ x = x,
+ y = y,
+ velx = velx,
+ vely = vely,
+ r = r,
+ time = time,
+ t = time,
+ col = color,
+ grav = grav or 0
+ }
+
+ function circle.draw()
+ circfill(circle.x, circle.y, circle.r*sin(circle.time/circle.t), circle.col)
+ end
+
+ function circle.update()
+ circle.x += circle.velx
+ circle.vely -= circle.grav
+ circle.y += circle.vely
+ circle.time -= ft
+ if circle.time < 0 then
+ del(obj, circle)
+ end
+ end
+
+ add(obj, circle, 1)
+end \ No newline at end of file
diff --git a/toxicinvaders_misc/musicplayer/toxicinvadersost.p8.png b/toxicinvaders_misc/musicplayer/toxicinvadersost.p8.png
new file mode 100644
index 0000000..be3e41b
--- /dev/null
+++ b/toxicinvaders_misc/musicplayer/toxicinvadersost.p8.png
Binary files differ
diff --git a/toxicinvaders_misc/musicplayer/ui_music.lua b/toxicinvaders_misc/musicplayer/ui_music.lua
new file mode 100644
index 0000000..387b174
--- /dev/null
+++ b/toxicinvaders_misc/musicplayer/ui_music.lua
@@ -0,0 +1,90 @@
+function printdropshadow(text,x,y,colorMain,colorShadow)
+ print(text,x,y+1,colorShadow)
+ print(text,x,y,colorMain)
+end
+
+function invaderslogotext(x,y)
+ --default values
+ -- x = 12
+ -- y = 20
+
+ invaderstext = "I N V A D E R S"
+ for i = 1, 12, 1 do
+ print(invaderstext, x+i%3-1, y+i%4-1, 3)
+ end
+ print(invaderstext,x,y,14)
+ clip(x, y, 63, 3)
+ print(invaderstext,x,y,11)
+ clip()
+
+ soundtracktext = "the soundtrack"
+ for i = 1, 12, 1 do
+ print(soundtracktext, x+i%3+1, y+i%4+9, 2)
+ end
+ print(soundtracktext,x+2,y+10,10)
+ clip(x+2, y+9, 69, 3)
+ print(soundtracktext,x+2,y+10,9)
+ clip()
+end
+
+function drawlogo(x,y)
+ --default values
+ -- x = 24
+ -- y = 26
+
+ sspr(88,88,16,8,x-3,y+2,32,16) --to shadow
+ sspr(88,88,16,8,x-3,y,32,16) --to
+ sspr(120,88,8,8,x+55,y+2,16,16) --ic shadow
+ sspr(120,88,8,8,x+55,y,16,16) --ic
+ --X
+ sspr(104,88,8,8,x+26,y-9,16,16)
+ sspr(104,88,8,8,x+42,y-9,16,16,true)
+ sspr(112,88,8,8,x+26,y+7,16,16,true)
+ sspr(112,88,8,8,x+42,y+7,16,16)
+ --invaders
+ invaderslogotext(x+11,y+20)
+end
+
+function mainmenutext(x,y,currentlyplaying)
+ -- default values
+ -- x = 24
+ -- y = 62
+ x -= 1
+
+ printdropshadow("(\139) track selection (\145)",x,y,9,2)
+
+ poke(0x5f58, 0x9 | 0x4) --makes score BIG
+ printdropshadow("iDLE iNERTIA bATTLE bEATS pADRONE pANIC fISSURE fINALE vICTORY vESSLE",x-tracktitleposition+circletimex,y+18+circletimey,11,3)
+ poke(0x5f58)
+end
+
+function credits(x,y)
+ -- default vaues
+ -- x = 10
+ -- y = 100
+ sintimecredits = sin(t())*2
+ timemodcredits = (t()%2<1)
+
+ palt(2,true)
+ palt(0,false)
+ spr(186,x,y+sintimecredits,1,1,timemodcredits) --duck
+ palt()
+ printdropshadow("1029chris",x+11,y+2,9,2)
+end
+
+--intro/ending acid effect
+function acidtransition()
+ if acidcounter < 3 then
+ for i = 1, 128, 1 do
+ line(i-1,128,i-1,sin((i+0.22-acidcounter*20)/24.357)*2+acidcounter*80-5,11) --cool wavy transition effect!!!!
+ line(i-1,128,i-1,sin((i+acidcounter*60)/44.357)*5+acidcounter*80,3)
+ end
+ addcircle(rnd(128), acidcounter*80+5, 0,rnd(1),rnd(12)+2,1.5,14)
+ end
+end
+
+--sfx for the intro transition
+sfx(0,3,3)
+
+menuitem(1, "(\152) hide ui", function() hideui = not hideui end)
+menuitem(3, "(❎ ⁙ 🅾️) to end", function() music(-1,3000,3) end) \ No newline at end of file
diff --git a/toxicinvaders_misc/musicplayer/update_music.lua b/toxicinvaders_misc/musicplayer/update_music.lua
new file mode 100644
index 0000000..3e79211
--- /dev/null
+++ b/toxicinvaders_misc/musicplayer/update_music.lua
@@ -0,0 +1,51 @@
+--similar math elements grouped to lower tokens
+flashtime = (ceil(t()*10%2) == 1) --for flashing elements (ship, score)
+circletimex = sin(t())*3 -- for elements that move in a circle (respawn timer)
+circletimey = cos(t())*3
+
+gt += scrollspeed + 1/600
+fadeouttimer -= ft
+
+if t() < 2 then -- weird if because of freezing bubbles in the menu
+ updateobjs() --update all objects
+end
+
+if tracknumber < 0 then
+ tracknumber = 4
+elseif tracknumber > 4 then
+ tracknumber = 0
+end
+
+if btnp(0) then
+ tracknumber-=1
+ updatetracktitlepos()
+ fadeoutsong()
+elseif btnp(1) then
+ tracknumber+=1
+ updatetracktitlepos()
+ fadeoutsong()
+end
+
+if fadeouttimer <= 0 then
+ fadeouttimer = 0
+ selectmusic()
+ updatetracktitlepos()
+end
+
+if autoplay then
+ autoplaytimer -= ft
+ if autoplaytimer <= 0 then
+ autoplaytimer = 90
+ tracknumber+=1
+ fadeoutsong()
+ end
+ autoplaymenutext = "(♪) autoplay"
+else
+ autoplaymenutext = "(◆) autoplay"
+end
+menuitem(2, autoplaymenutext, function() autoplay = not autoplay end)
+
+
+if btnp(4) and btnp(5) then music(-1,3000) end
+
+tracktitleposition = lerp(tracktitleposition,newtracktitleposition,0.03) \ No newline at end of file