From 78be9e2295e3d56562ac3d6507862c96c6ef9e91 Mon Sep 17 00:00:00 2001 From: entar Date: Thu, 19 Jun 2025 22:33:05 +0700 Subject: [PATCH] Icons for songs, funny thing for satin-panties, score saving (NOT FINISHED) --- charts/picoSongs.lua | 12 +- charts/satin-panties/script.lua | 36 +- charts/songs.lua | 19 + sprites/freeplay/freeplaySelector.json | 112 +++++ sprites/freeplay/freeplaySelector.png | Bin 0 -> 3198 bytes sprites/freeplay/freeplaySelector_pico.json | 112 +++++ sprites/freeplay/freeplaySelector_pico.png | Bin 0 -> 7362 bytes sprites/freeplay/icons/bfpixel.json | 75 +++ sprites/freeplay/icons/bfpixel.png | Bin 0 -> 1117 bytes sprites/freeplay/icons/bfpixel.xml | 11 + sprites/freeplay/icons/dadpixel.json | 75 +++ sprites/freeplay/icons/dadpixel.png | Bin 0 -> 1106 bytes sprites/freeplay/icons/dadpixel.xml | 11 + sprites/freeplay/icons/darnellpixel.png | Bin 0 -> 1176 bytes sprites/freeplay/icons/darnellpixel.xml | 11 + sprites/freeplay/icons/gfpixel.json | 75 +++ sprites/freeplay/icons/gfpixel.png | Bin 0 -> 1099 bytes sprites/freeplay/icons/gfpixel.xml | 11 + sprites/freeplay/icons/mommypixel.json | 86 ++++ sprites/freeplay/icons/mommypixel.png | Bin 0 -> 5215 bytes sprites/freeplay/icons/mommypixel.xml | 12 + sprites/freeplay/icons/monsterpixel.json | 75 +++ sprites/freeplay/icons/monsterpixel.png | Bin 0 -> 1053 bytes sprites/freeplay/icons/monsterpixel.xml | 11 + .../icons/parents-christmaspixel.json | 86 ++++ .../freeplay/icons/parents-christmaspixel.png | Bin 0 -> 2365 bytes .../freeplay/icons/parents-christmaspixel.xml | 12 + sprites/freeplay/icons/picopixel.json | 75 +++ sprites/freeplay/icons/picopixel.png | Bin 0 -> 878 bytes sprites/freeplay/icons/picopixel.xml | 11 + sprites/freeplay/icons/senpaipixel.png | Bin 0 -> 1321 bytes sprites/freeplay/icons/senpaipixel.xml | 11 + sprites/freeplay/icons/spiritpixel.png | Bin 0 -> 1028 bytes sprites/freeplay/icons/spiritpixel.xml | 11 + sprites/freeplay/icons/spookypixel.json | 75 +++ sprites/freeplay/icons/spookypixel.png | Bin 0 -> 1167 bytes sprites/freeplay/icons/spookypixel.xml | 11 + sprites/freeplay/icons/tankmanpixel.json | 75 +++ sprites/freeplay/icons/tankmanpixel.png | Bin 0 -> 873 bytes sprites/freeplay/icons/tankmanpixel.xml | 11 + src/main.lua | 435 ++++++++++++------ src/modules/states/playstate.lua | 88 +++- src/modules/types/render.lua | 11 +- 43 files changed, 1482 insertions(+), 174 deletions(-) create mode 100644 sprites/freeplay/freeplaySelector.json create mode 100644 sprites/freeplay/freeplaySelector.png create mode 100644 sprites/freeplay/freeplaySelector_pico.json create mode 100644 sprites/freeplay/freeplaySelector_pico.png create mode 100644 sprites/freeplay/icons/bfpixel.json create mode 100644 sprites/freeplay/icons/bfpixel.png create mode 100644 sprites/freeplay/icons/bfpixel.xml create mode 100644 sprites/freeplay/icons/dadpixel.json create mode 100644 sprites/freeplay/icons/dadpixel.png create mode 100644 sprites/freeplay/icons/dadpixel.xml create mode 100644 sprites/freeplay/icons/darnellpixel.png create mode 100644 sprites/freeplay/icons/darnellpixel.xml create mode 100644 sprites/freeplay/icons/gfpixel.json create mode 100644 sprites/freeplay/icons/gfpixel.png create mode 100644 sprites/freeplay/icons/gfpixel.xml create mode 100644 sprites/freeplay/icons/mommypixel.json create mode 100644 sprites/freeplay/icons/mommypixel.png create mode 100644 sprites/freeplay/icons/mommypixel.xml create mode 100644 sprites/freeplay/icons/monsterpixel.json create mode 100644 sprites/freeplay/icons/monsterpixel.png create mode 100644 sprites/freeplay/icons/monsterpixel.xml create mode 100644 sprites/freeplay/icons/parents-christmaspixel.json create mode 100644 sprites/freeplay/icons/parents-christmaspixel.png create mode 100644 sprites/freeplay/icons/parents-christmaspixel.xml create mode 100644 sprites/freeplay/icons/picopixel.json create mode 100644 sprites/freeplay/icons/picopixel.png create mode 100644 sprites/freeplay/icons/picopixel.xml create mode 100644 sprites/freeplay/icons/senpaipixel.png create mode 100644 sprites/freeplay/icons/senpaipixel.xml create mode 100644 sprites/freeplay/icons/spiritpixel.png create mode 100644 sprites/freeplay/icons/spiritpixel.xml create mode 100644 sprites/freeplay/icons/spookypixel.json create mode 100644 sprites/freeplay/icons/spookypixel.png create mode 100644 sprites/freeplay/icons/spookypixel.xml create mode 100644 sprites/freeplay/icons/tankmanpixel.json create mode 100644 sprites/freeplay/icons/tankmanpixel.png create mode 100644 sprites/freeplay/icons/tankmanpixel.xml diff --git a/charts/picoSongs.lua b/charts/picoSongs.lua index ebdd453..aabb0c6 100644 --- a/charts/picoSongs.lua +++ b/charts/picoSongs.lua @@ -6,6 +6,7 @@ return { "normal", "hard" }, + icon = "dadpixel" }, { name = "fresh", @@ -14,6 +15,7 @@ return { "normal", "hard" }, + icon = "dadpixel" }, { name = "dad-battle", @@ -22,6 +24,7 @@ return { "normal", "hard" }, + icon = "dadpixel" }, { name = "south", @@ -30,6 +33,7 @@ return { "normal", "hard" }, + icon = "spookypixel" }, { name = "pico", @@ -38,6 +42,7 @@ return { "normal", "hard" }, + icon = "picopixel" }, { name = "philly-nice", @@ -46,6 +51,7 @@ return { "normal", "hard" }, + icon = "picopixel" }, { name = "blammed", @@ -54,6 +60,7 @@ return { "normal", "hard" }, + icon = "picopixel" }, { name = "cocoa", @@ -62,6 +69,7 @@ return { "normal", "hard" }, + icon = "parents-christmaspixel" }, { name = "eggnog", @@ -70,6 +78,7 @@ return { "normal", "hard" }, + icon = "parents-christmaspixel" }, { name = "guns", @@ -77,6 +86,7 @@ return { "easy", "normal", "hard" - } + }, + icon = "tankmanpixel" } } \ No newline at end of file diff --git a/charts/satin-panties/script.lua b/charts/satin-panties/script.lua index f5dc910..4e2c97a 100644 --- a/charts/satin-panties/script.lua +++ b/charts/satin-panties/script.lua @@ -38,21 +38,29 @@ end function module.onUpdate(dt, elapsed) if enabled then - for index, note in next, module.shared.notes do - if note.mustPress then - note.offset.x = math.sin(math.rad(degree)) * (note.position - elapsed) * module.shared.speed - note.offset.y = (math.cos(math.rad(degree)) * (note.position - elapsed) * module.shared.speed) - (note.position - elapsed) - -- note.sprite.rotation = degree - end - end - for index, hold in next, module.shared.holds do - if hold.mustPress then - hold.offset.x = math.sin(math.rad(degree)) * (hold.position - elapsed) * module.shared.speed - hold.offset.y = (math.cos(math.rad(degree)) * (hold.position - elapsed) * module.shared.speed) - (hold.position - elapsed) - hold.sprite.rotation = degree - end - end + -- for index, note in next, module.shared.notes do + -- if note.mustPress then + -- note.offset.x = math.sin(math.rad(degree)) * (note.position - elapsed) * module.shared.speed + -- note.offset.y = (math.cos(math.rad(degree)) * (note.position - elapsed) * module.shared.speed) - (note.position - elapsed) + -- -- note.sprite.rotation = degree + -- end + -- end + -- for index, hold in next, module.shared.holds do + -- if hold.mustPress then + -- hold.offset.x = math.sin(math.rad(degree)) * (hold.position - elapsed) * module.shared.speed + -- hold.offset.y = (math.cos(math.rad(degree)) * (hold.position - elapsed) * module.shared.speed) - (hold.position - elapsed) + -- hold.sprite.rotation = degree + -- end + -- end + + local evil = math.cos(elapsed / 100) * 100 + local evilb = math.sin(elapsed / 100) * 100 + love.window.setPosition(325 + evil, 180 + evilb) end end +function module.onClose() + love.window.setPosition(325, 180) +end + return module \ No newline at end of file diff --git a/charts/songs.lua b/charts/songs.lua index f25aad5..a5f1642 100644 --- a/charts/songs.lua +++ b/charts/songs.lua @@ -6,6 +6,7 @@ return { "normal", "hard" }, + icon = "gfpixel" }, { name = "bopeebo", @@ -15,6 +16,7 @@ return { "hard", "erect" }, + icon = "dadpixel" }, { name = "fresh", @@ -24,6 +26,7 @@ return { "hard", "erect" }, + icon = "dadpixel" }, { name = "dad-battle", @@ -33,6 +36,7 @@ return { "hard", "erect" }, + icon = "dadpixel" }, { name = "spookeez", @@ -42,6 +46,7 @@ return { "hard", "erect" }, + icon = "spookypixel" }, { name = "south", @@ -51,6 +56,7 @@ return { "hard", "erect" }, + icon = "spookypixel" }, { name = "monster", @@ -59,6 +65,7 @@ return { "normal", "hard" }, + icon = "monsterpixel" }, { name = "pico", @@ -68,6 +75,7 @@ return { "hard", "erect" }, + icon = "picopixel" }, { name = "philly-nice", @@ -77,6 +85,7 @@ return { "hard", "erect" }, + icon = "picopixel" }, { name = "blammed", @@ -86,6 +95,7 @@ return { "hard", "erect" }, + icon = "picopixel" }, { name = "satin-panties", @@ -95,6 +105,7 @@ return { "hard", "erect" }, + icon = "mommypixel" }, { name = "high", @@ -104,6 +115,7 @@ return { "hard", "erect" }, + icon = "mommypixel" }, { name = "milf", @@ -112,6 +124,7 @@ return { "normal", "hard" }, + icon = "mommypixel" }, { name = "cocoa", @@ -121,6 +134,7 @@ return { "hard", "erect" }, + icon = "parents-christmaspixel" }, { name = "eggnog", @@ -130,6 +144,7 @@ return { "hard", "erect" }, + icon = "parents-christmaspixel" }, { name = "winter-horrorland", @@ -138,6 +153,7 @@ return { "normal", "hard" }, + icon = "monsterpixel" }, { name = "ugh", @@ -148,6 +164,7 @@ return { "erect", "nightmare" }, + icon = "tankmanpixel" }, { name = "guns", @@ -156,6 +173,7 @@ return { "normal", "hard" }, + icon = "tankmanpixel" }, { name = "stress", @@ -164,5 +182,6 @@ return { "normal", "hard" }, + icon = "tankmanpixel" } } \ No newline at end of file diff --git a/sprites/freeplay/freeplaySelector.json b/sprites/freeplay/freeplaySelector.json new file mode 100644 index 0000000..ad1bd29 --- /dev/null +++ b/sprites/freeplay/freeplaySelector.json @@ -0,0 +1,112 @@ +{ + "TextureAtlas": { + "SubTexture": [ + { + "_name": "arrow pointer loop0000", + "_x": "0", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0001", + "_x": "0", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0002", + "_x": "0", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0003", + "_x": "0", + "_y": "95", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0004", + "_x": "0", + "_y": "95", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0005", + "_x": "0", + "_y": "95", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0006", + "_x": "54", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0007", + "_x": "54", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0008", + "_x": "54", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0009", + "_x": "54", + "_y": "95", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0010", + "_x": "54", + "_y": "95", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0011", + "_x": "54", + "_y": "95", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0012", + "_x": "108", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0013", + "_x": "108", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0014", + "_x": "108", + "_y": "0", + "_width": "49", + "_height": "90" + } + ], + "_imagePath": "freeplaySelector.png" + } +} \ No newline at end of file diff --git a/sprites/freeplay/freeplaySelector.png b/sprites/freeplay/freeplaySelector.png new file mode 100644 index 0000000000000000000000000000000000000000..1958267850cbb54d908522f1ef0a016515af97c2 GIT binary patch literal 3198 zcmbVPhg%a_zdjQ}-w^a7uwj>ot29e?)gUZFs7etM+9Dwdh}b|yK>-m-M6(vq2!?7I z;9G=U2`PyQo*r)g06?lP1hmvt5M91EPz7?zoQrt3vQ6d0AEGDGn4`R5g z9!RB`r2-%plmD(~=fR+}Ga(Pg)z#B)!JxiA;R*)`1QvJTs3a!lE(~Cpe3nU%jsYAF zS@mQx$)RB&CdOqC8H9yl$Yi1e36RMa4kVl-2}2?Q63JpS0Ye}F0s&`=2Y5UNiv_A1 z087@b{VLEu8yAFWvdQUg!z{LI+xqi_&X9M;vw+g?| zOE}BI&t}?@PB;1N?)IXd3d;$@TZst5`R_;jzu)Lb9@>R}b7pULL#y5Hmyn*2U&7hy2p(hIFve_=J8Wx^**I@u%$AbZ>9d1xrWY6}7fT$|8xbTeiJ~KhlWcXw z%+|spUa;$(NwyST?Pp)hZ0tV5SXj2mYw;_56yL$QKZvQJ(Q|D_A zjLS;idpp5Dwqt+$N8h{tt#MvDvF(Tswr9gzf2$4M4;hK4J)XRya^&WJW-1fj27Z}# zk%_Ft&6MaM%T;5i2+7Q6TJ(}*tCyeov+reJ{nprS(|6dp_u@?nT@Wj4%R>I5tE?>e$6(k;UTbLmBDyFfZ=4;_Iss=~T&KOp<^b2M(v^D!MFFgBuaYu_WC*MD9rlH8A^s06~Gunx3NQBv~(L0iWg_PKltA4FZ0(8l1~+f$sNBXS-(*m-MmBM zHXev>8j8L$3QJt802`5s#F~EeCr|{<6 zqi+LJh>jmvAlg zX}{0Zzd%`vWhaKXD>$nejJ@K&iZA_;JO0Y^0WsCP%w4CzpOes&|0kU-eKnn2{|EaO z$D9=hX#ZK>u@3~*WY3P)=HacP*{6BJ?w+%x+Z%pThumOj8eQwnZ}| z$)z;^L}?md-L*ObS}(e4P9dB`UG9vP{Ytv~qB1HXU~i8LCc|m)s^$%vuGIEn_PM-{ z%!S|#y4KpB(`)L66;~>4wZr3fcpUbM$25Z?{h|n{XRaSrS1y{myTv1U%)v9IOb>4T+vfcqRD*sE2MZ@Ht2Ih}-*%=_!Rhe`uO$D&yGB1I$Sb(;va zV=kNHQ9tIVMjtf*Pu*fSe|g&`w5o3Lu>v)QA@*r>nJU-?WweVw#HXa)ZlG(D_HRw_ z$zOQMWmA8!vmGt6iW5Cy1Gk`y)Sn9PzbfEO?BVl9>b52Hu&JLh&kL@F;^Klki3wRM z`?1$XPe1*fzcqpGv$gtLL}go}8m{bMh})+}l(f=gg;r;>%h=RCL1Xu~OUgg@8_>R< zJ4sB7?#xaT6b){s(8rhH~Hq&bKu4=nu^=Fm=gsb_f=`#Xr(EP|sYtZImSNG2b;FtgHNhyj-+ zUznNYh(^XkSTpj(bJa5>WP=g6vvqvFV>d+q$J7!g8!bOUSt9RNx+39!QdMrt*JB*p z@1CPL;sq(kYm3!rugxuCPL4FrS)MFZcFkSzy``mC+Ff@k}xz)>+DKCWNB*pQdg=jO{;UAijoNFL38WZ+!CwE zb3_Rp&hp{#l+YDNu>m*ix-zis@pq!TXF=JJhW;r_lNB2tqWzUR6TQm!aC8)Ar50+; z-kVd3T=CYGEK)PDiYv7#F?5onuM{j{*D=Iu7X9B>!&;c+ou3hGX3g}?Vso72T5J2* z7)mF~64vry0NYO8&3SoR6U zKuot}=)cZEw|8C_k&gO&YA1tS^<+`jl;RS9@pu%(CHsIIb1CK&Ww;G;VP|#h8gOIY zBm9Oom$Wm!zWu^RO{iC0@(UE2drGw(KXEzN{yMY+I5J44tlO*(prX9$rk?7Qp^xr+ zr&8vRTIS#INYY zzR&T@KeSMR>aVy767Y GQ~wuC_5*eR literal 0 HcmV?d00001 diff --git a/sprites/freeplay/freeplaySelector_pico.json b/sprites/freeplay/freeplaySelector_pico.json new file mode 100644 index 0000000..a15be3b --- /dev/null +++ b/sprites/freeplay/freeplaySelector_pico.json @@ -0,0 +1,112 @@ +{ + "TextureAtlas": { + "SubTexture": [ + { + "_name": "arrow pointer loop0000", + "_x": "0", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0001", + "_x": "0", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0002", + "_x": "0", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0003", + "_x": "54", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0004", + "_x": "54", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0005", + "_x": "54", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0006", + "_x": "108", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0007", + "_x": "108", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0008", + "_x": "108", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0009", + "_x": "162", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0010", + "_x": "162", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0011", + "_x": "162", + "_y": "0", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0012", + "_x": "0", + "_y": "95", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0013", + "_x": "0", + "_y": "95", + "_width": "49", + "_height": "90" + }, + { + "_name": "arrow pointer loop0014", + "_x": "0", + "_y": "95", + "_width": "49", + "_height": "90" + } + ], + "_imagePath": "freeplaySelector_pico.png" + } +} \ No newline at end of file diff --git a/sprites/freeplay/freeplaySelector_pico.png b/sprites/freeplay/freeplaySelector_pico.png new file mode 100644 index 0000000000000000000000000000000000000000..9c9755c7c8cdd94fa18561d8425c341cef89bcd6 GIT binary patch literal 7362 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

^?P1d95Qt#I)l{J#*PZUfx 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 literal 0 HcmV?d00001 diff --git a/sprites/freeplay/icons/bfpixel.xml b/sprites/freeplay/icons/bfpixel.xml new file mode 100644 index 0000000..080f4ff --- /dev/null +++ b/sprites/freeplay/icons/bfpixel.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/sprites/freeplay/icons/dadpixel.json b/sprites/freeplay/icons/dadpixel.json new file mode 100644 index 0000000..63dd782 --- /dev/null +++ b/sprites/freeplay/icons/dadpixel.json @@ -0,0 +1,75 @@ +{ + "TextureAtlas": { + "SubTexture": [ + { + "_name": "idle0001", + "_x": "0", + "_y": "77", + "_width": "31", + "_height": "33", + "_frameX": "-12", + "_frameY": "-6", + "_frameWidth": "50", + "_frameHeight": "40" + }, + { + "_name": "confirm0001", + "_x": "0", + "_y": "77", + "_width": "31", + "_height": "33", + "_frameX": "-12", + "_frameY": "-6", + "_frameWidth": "50", + "_frameHeight": "40" + }, + { + "_name": "confirm0002", + "_x": "0", + "_y": "110", + "_width": "34", + "_height": "31", + "_frameX": "-11", + "_frameY": "-9", + "_frameWidth": "50", + "_frameHeight": "40" + }, + { + "_name": "confirm0003", + "_x": "0", + "_y": "0", + "_width": "32", + "_height": "39", + "_frameX": "-11", + "_frameY": "-1", + "_frameWidth": "50", + "_frameHeight": "40" + }, + { + "_name": "confirm0004", + "_x": "0", + "_y": "39", + "_width": "32", + "_height": "38", + "_frameX": "-12", + "_frameY": "-2", + "_frameWidth": "50", + "_frameHeight": "40" + }, + { + "_name": "confirm-hold0001", + "_x": "0", + "_y": "39", + "_width": "32", + "_height": "38", + "_frameX": "-12", + "_frameY": "-2", + "_frameWidth": "50", + "_frameHeight": "40" + } + ], + "_imagePath": "dadpixel.png", + "_width": "34", + "_height": "141" + } +} \ No newline at end of file diff --git a/sprites/freeplay/icons/dadpixel.png b/sprites/freeplay/icons/dadpixel.png new file mode 100644 index 0000000000000000000000000000000000000000..481f9a651fcfc43a83ca8dc7d5c87fb82bde39b4 GIT binary patch literal 1106 zcmV-Y1g-mtP)Q?I#yLjDl0{ z8h>5G%-22VHBw)%mud?3L>;AIyR#>1h7IBppOZX#$JnPDMD`BPI~~zg~0DA{_xAPlf_9XDbk!|Tb3ZD zT!;lu_JhkoI1xC>I01_6BoDF(@{xNZ07^M%fyCUK5eQl0#LPfMNUq=C%OVngFKz@* zsEY-F6frT3akTy#iZI1UG6EOlNg3lN26G{p5(pXz@jON!2?T2pbuu5bs*z=VbJDUX zsmr^Q{KGYY$CFgoRSdY8kC6nAX?6L(COg$a&TpkV@!`UiGV4_Fo`%(rDxW=5YXQi4>NtKf3)PH|OwK&=6V<4rZXvE5G-?q&=$V73`P7?K2;{Ipb8HD%VfD!mX zjPAY?k|ul%2^e9LhNM6$fq;~|5dq>TH#T=9LXnd3$Ks^M)>SM4=Y;E$0i@tgXrvlU zI~7I}0n<*UU?|MzPHi9U{3KP%bJJ17;BBX>nH7S^!o;$!@yv5WnDIxJH@z!x0P?xM z+GQJ2a_H1)W9Ej-D~a}Q%I>(5X=BzgWQwsd z+nDQyc_;n4NHd-*5rj!O6lU9Zt8271W+{FVQbSe|1TbTSI3!9n#`V<_%Pg~ZvsF{{ zn`)M-5g2PE>!%VMBPjPR6yBM~zWtW!enf+!BW+W)DHb3XhjCMlJ(QSzlSoAQ9*9=u zg!qkiTt=qLq1`8^zyncTVo@bH5;$3{JaWaH*8*+bUG)u-D41_zPKYpg)2d7rPafo1 z<;U`@__>Jwj+Z{qpe0|_mE>x=l_LNXkgVj|9b`X$O0=1?VOY&8&5My%F+I`O5T1nO zkJrnb)NRX+4y4t~*g@H41kT#6=@qkIQZUkEcKtG}Z7G}}eosqFgSCPvGy)P=)$erz z74kT;JH*$vO6V0NT0rhQSu7}?Hbz)?vi&&Xl?VwA{bCXNVfeWeB1vz}(+L2Qocxy4 zFzIBnAX1m5M*}gmE{5uHod0+-MGIytSt#HXoHj!$zX3_+NaB&g%u%s`LFOpILndGR Ye=;(Cf{!^1Qvd(}07*qoM6N<$f@hrmZ2$lO literal 0 HcmV?d00001 diff --git a/sprites/freeplay/icons/dadpixel.xml b/sprites/freeplay/icons/dadpixel.xml new file mode 100644 index 0000000..e3556e7 --- /dev/null +++ b/sprites/freeplay/icons/dadpixel.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/sprites/freeplay/icons/darnellpixel.png b/sprites/freeplay/icons/darnellpixel.png new file mode 100644 index 0000000000000000000000000000000000000000..7f5a8d0fe36e76eb7c165c718db4a3c881644b58 GIT binary patch literal 1176 zcmV;J1ZVq+P)Zcx2#0y%+nX8 z$zT&4`(~-JQuhL&_W0`g8b`;(iHyYQ%XohMT4- zjI>~($uEZUrJ7k(Z%S2ZBQLA(9qru)6Ez>sd%cQO2i&*>?f#gG%6xvlOR|a-*#a~$ zUp6o)L}irf$^}y7GM)B~MJ<9fccN=G(a8e$j^ zDkh}yKEgqeaELfjl?%|XfEuTvF3+DXD|m_aIB>Y!6f5tbv$F>E7G#K zA8SWNx&u4s0JJ+-?VA$N6*z{AeKl%v5arB9%n}ov>G|R$faJ2HT$Q4aE^fd>h+6?+ zdL9yArq73)aF2Tm4x+}BcsQZdBmiAy9ILb zt&2S1{eGLN!Lc6-&m0HP*4)^|H2|2qIIuGwcVL3c;}_t=3DNu(Xz+pZgvMPQZ*&!0 zStft%a3GGqT!=Sz1viMZ7Tow2XcoFC(%sk@bM9o@pplO1xV;k#TCou4I^5XwQ+J+^ z+o>3qB9FyZ&rQQQr*`}>Q?uS2N804km|(k5z4os60Hgg7=6#b)JKkFBPS!BuN=PJc zgD_3FyKrT)A;V(JY@T7Vk8V3~O#U~b!kV+8aU1AMI=*UJ$wtx+q1xE(xUo^C!Zz#bkWpz)ed3jjPD zc#MEEIk#s#2*!Y$Q_>DzA8;8s_uv4OfXl>bxJ}bBxt4%SF#~SF8L3U2B?E4m&XjOt q2Hb>;yfNT!z>${&?sg$-GwmOWRF}kGy83(o0000 + + + + + + + + + + diff --git a/sprites/freeplay/icons/gfpixel.json b/sprites/freeplay/icons/gfpixel.json new file mode 100644 index 0000000..f75438b --- /dev/null +++ b/sprites/freeplay/icons/gfpixel.json @@ -0,0 +1,75 @@ +{ + "TextureAtlas": { + "SubTexture": [ + { + "_name": "idle0001", + "_x": "0", + "_y": "39", + "_width": "38", + "_height": "37", + "_frameX": "-5", + "_frameY": "-8", + "_frameWidth": "50", + "_frameHeight": "50" + }, + { + "_name": "confirm0001", + "_x": "0", + "_y": "39", + "_width": "38", + "_height": "37", + "_frameX": "-5", + "_frameY": "-8", + "_frameWidth": "50", + "_frameHeight": "50" + }, + { + "_name": "confirm0002", + "_x": "0", + "_y": "0", + "_width": "36", + "_height": "39", + "_frameX": "-6", + "_frameY": "-5", + "_frameWidth": "50", + "_frameHeight": "50" + }, + { + "_name": "confirm0003", + "_x": "73", + "_y": "0", + "_width": "38", + "_height": "33", + "_frameX": "-6", + "_frameY": "-11", + "_frameWidth": "50", + "_frameHeight": "50" + }, + { + "_name": "confirm0004", + "_x": "36", + "_y": "0", + "_width": "37", + "_height": "34", + "_frameX": "-6", + "_frameY": "-9", + "_frameWidth": "50", + "_frameHeight": "50" + }, + { + "_name": "confirm-hold0004", + "_x": "36", + "_y": "0", + "_width": "37", + "_height": "34", + "_frameX": "-6", + "_frameY": "-9", + "_frameWidth": "50", + "_frameHeight": "50" + } + ], + "_imagePath": "gfpixel.png", + "_width": "111", + "_height": "76" + } +} \ No newline at end of file diff --git a/sprites/freeplay/icons/gfpixel.png b/sprites/freeplay/icons/gfpixel.png new file mode 100644 index 0000000000000000000000000000000000000000..68c03a7563de3fb5dc2af7ec2c659ec1b7f36e0b GIT binary patch literal 1099 zcmV-R1ho5!P)bWyLDPx&MLJq69LsB6NX`vJYroB$GF^m7g*#f~0kR$7o5O73H9a zteI$gM*%99PO)fG=}|z01>=xWYs3OJ)EvjW?Qa-ip^Lm1qNm7YTXQE$5Y zFw%tq8AW3#BDDz6;EamLPykVYOnn6qq4{ERisTk$8cKTs9LE80VWoE&<(L4Fr8b&K z>>~onpzZ_ARRGkROlK*26yWe=?;3rg)@5VW9zBjySyBj<0yGAq3HO;ObQc<38dbF{ z(>TAqk_VrHlmjn|rqLHMG`dJFV7|kB#t6+9Wt7+1b2MQP?#sZ>l~$(}>pmYIs?Vn~ zrXsIjDsH2rF;(1PKCV0;kDtfmS>2^#G>GKB7(E}|M{R&K__B@utba$72Bgq+m#=?0 ztxIG$nP-FWyuGfO?*f znkU*c(2z8AWfNYUbw!gy7Mc&d$;ZOtzNgk8LPu^@SS}Dmgqx1n*`ITh2ZOG39vllK z@_4j|@Jx@dxi6EMc61??_c)o!nn@~a-Q>Q<=kcLy4ce6>=NSpiQ8&r zj}Wu07BHVr>{h1L$_C-QTXES2-*3B>ZNBwxqYv&+1}%1bw-3K#tvtkah?W(F2%vDoIr>s$uMpqB><_^AHxz8t{Q)CwXRhZ- RkW>Hw002ovPDHLkV1n5^_3{7! literal 0 HcmV?d00001 diff --git a/sprites/freeplay/icons/gfpixel.xml b/sprites/freeplay/icons/gfpixel.xml new file mode 100644 index 0000000..6ecc117 --- /dev/null +++ b/sprites/freeplay/icons/gfpixel.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/sprites/freeplay/icons/mommypixel.json b/sprites/freeplay/icons/mommypixel.json new file mode 100644 index 0000000..017824d --- /dev/null +++ b/sprites/freeplay/icons/mommypixel.json @@ -0,0 +1,86 @@ +{ + "TextureAtlas": { + "SubTexture": [ + { + "_name": "idle0001", + "_x": "232", + "_y": "1", + "_width": "42", + "_height": "44", + "_frameX": "-11", + "_frameY": "-9", + "_frameWidth": "60", + "_frameHeight": "60" + }, + { + "_name": "confirm0001", + "_x": "94", + "_y": "1", + "_width": "43", + "_height": "45", + "_frameX": "-12", + "_frameY": "-8", + "_frameWidth": "60", + "_frameHeight": "60" + }, + { + "_name": "confirm0002", + "_x": "1", + "_y": "1", + "_width": "44", + "_height": "48", + "_frameX": "-8", + "_frameY": "-9", + "_frameWidth": "60", + "_frameHeight": "60" + }, + { + "_name": "confirm0003", + "_x": "186", + "_y": "1", + "_width": "43", + "_height": "44", + "_frameX": "-9", + "_frameY": "-13", + "_frameWidth": "60", + "_frameHeight": "60" + }, + { + "_name": "confirm0004", + "_x": "48", + "_y": "1", + "_width": "43", + "_height": "47", + "_frameX": "-9", + "_frameY": "-10", + "_frameWidth": "60", + "_frameHeight": "60" + }, + { + "_name": "confirm0005", + "_x": "140", + "_y": "1", + "_width": "43", + "_height": "45", + "_frameX": "-9", + "_frameY": "-12", + "_frameWidth": "60", + "_frameHeight": "60" + }, + { + "_name": "confirm-hold0001", + "_x": "140", + "_y": "1", + "_width": "43", + "_height": "45", + "_frameX": "-9", + "_frameY": "-12", + "_frameWidth": "60", + "_frameHeight": "60" + } + ], + "_imagePath": "mommypixel.png", + "_width": "275", + "_height": "50" + } +} \ No newline at end of file diff --git a/sprites/freeplay/icons/mommypixel.png b/sprites/freeplay/icons/mommypixel.png new file mode 100644 index 0000000000000000000000000000000000000000..2cb847545d62ccdc4250132ee2bcccfb48319d6b GIT binary patch literal 5215 zcmV-l6rk&gP)a0DX38RCPLD|bL5pbH=}gNcc+5Y~i5oq$FZ(1jo~F*75WI17!M%s6U7 zX61@VG#X{V2Qi8mm5sV$H4?)h8N*}52DTd5YM_D!W)=DfbukxTEOV?e)7TU_bLJ@Lf_tW>_l1l*M!H=$t*OZ= z^{wf4iuzp}PO2~9p3C;kFT8T0IkSJCozzo*f6e}T?5zE_`gl2-i?o?@IXfArC}(P# z7U;Upt;J47@1DNhq>S{({xL~>kcgh#oC7C{>!5=tjBwjz_BjgsRY4|+Wa4C^1ADr} zmjnoin-OC3&{daAiNsanHkfI?c=-;OyDBDAES&LuO}W<@Il6fqc=DW^_N^B;&HJys zr1{;8uQgA+VLu+M|G_sZi!cXc|DuaXNMHbZf|1Fb_6ESWcN+dNW zLKz!n8JFA1N=6z2>Js!E8Y-%PBj+5^Nya>*Hdo8Ixv((ViC1WR8?*P3T1fIH8VJF&_j&n1!`VbTX{GRji9?HXvZB66gQYKZuI ztnp^9XLKHLI<;h}Vca=HlA5<~j0@YTA)o5iM=swmT1hQ*$VeJZm zTlSq=w9M~w(k#$KWhFV7pF&D>p$sm4zvu1wgmVI{Xw{$US*M}EDrLd)aMkXu2DkYOVPx&{qwb^O2 zlI$@#UCjhw!4--^QbdC9DfDKA+~K%r2P`s5+z?A;R$-LDpbX>FeeMhLqOw&--Ybzfvi2Tggv1C zRmmW=u0uvT#qd>=)!SjnAyF+F;r9XT)TVGfd&4ioC=ZyL1CX*jqimx16t9B{@u8#ymEj@?FUY7zU^Hyfw3&nvWgj?%BprAL&twNf&%isg)(*m@+1 z1c~^9Y79OW)NF)M*ygrS(N+{Sbx+xqG*{s%Nq$4M^9L8_MXa3d6<_)ofoMjF9xLeF zddF26X@tx3ly>=45{&6G?MwPCxc)2X zysA;=%%_%7g0%M=LLo9igoVR&LoUdKvpTqN8eFbfjRRteTxt}HcDa$2LtV!TsYpxe zeh`@i7Em%{G#Zht$CXnt3>@YuMfR0aD$QlA+_X)n0T?>hh{S)qB@TTGOSN2otn6%L zODG#^l#amZWNrzW5Q*He|7-5HQ;*-nUr3Kz!D6)-hZPy?Z zS!|ny3ap`ml=ScwJS6F*&{LLXjs4{u0+bkuU<3|^QVEGbBP6i>>;c!_+-xicCtpBekWq0J!-DPsu}H`fen^H_0eH zSyNce(Y;0_xbNn}SA?RHu3L}dQ?{7B<8tim>t@`ye51P+ynIoqJ1L`9oeM4@3(YOO-rf!lrDbe}RwsK3D`WZqd z$-=58WNscjf=J3eWkQ>2Pq}abOu@3(933aUWr|Gj{jZO_9G#KO;dkfr=9zP^HxJyn zc=t>QC`!lGfW2a)T*#e>lw!(E5jS+rFYY+$tjPe!nZ(Huf`~+>MLSVBK$r3rPblQw z-~Pu3dvhNca@%NRLp^1d>;zs}^9T{14yu;?etz;Q_ciyDgi zT+z^}Q*Daqj}C!~7h7?=?48U`*Lf(iQs0(Hj6LkRwyl?FWJ~r#Yy2y7 zvNW;jP?W;!QS8hdG&M)^kfLe>Q#co2|dQ+pyQl8m_wJ?c0_Rs z!?xfa82!2Mbv2%{r)#;xB?*P16N-#LD9;&Uxti5VQe+YW3i{4`Z!dQp1xDE_wa6$t z@1ARv3FqT&t)frv5V@{D{LCx1u!<{1%w&AL9giBh9l<7W;VpJJ4!|OB%@#QdiyY6; zD3<0D+8EIuD&;lK9+`|K5eQV42QR$4Jk%zNv2%8M>;J)1TJj^r(6d1o{_=8j&!I)0 zEy)!G!qY6k^9^$ku4jJK_QnZ?LT-GHup7p__t^)Ui)O6~iNHW4nJ?~Hp;4YTdHd(A zoXavwZn5&w0!e&am!xZrO!)f9qwM6xk=7Qzb5$M=_4LAJ$JT8sicL8k%pvxoCyltP zlgSwG&eH@2bj#xWZw`RYAiH_YjHjFjAIH~rT-N9*X&MeBkPl=+#31ul?r{jP^SkeE ze)FzJ8Ui{%u8|3dL>eV069T;;aG`4VXEeRp1f%4-2t|ZAm?hK65TS5I(b@o8lrHdH zGCCn{?#ZcH$~AD$;FLI?AyF*NBR6Z%CNnw@4j~Yqd&Q|p9!z}@!9+m5LQmO73>7`4 zBNQH)#K;5yJ=w`HGepuHJZM6@Q_cLuiRP~ED7W-Fnx_=x%yaTwfM=&^Q#VQ?4APT4 zbHfX+ryjqr^Iz@K(JqKgb7*0y#>H$RSHDprAL4jYQEbdUVTY*g{C4pcdo=gvqE5_w zIOk8!@>%70_fVyq6N%;}rS?M404Q1>=qcOc%9_Jhx0Ayo56FZlgGVP+g#Ff0vn^>Z zL>q`qW`;;Yzz*#^aZkytV+hclr(75%-VitUQWKgRVS`AS)-r08Mk;HRhrB~zLuBR9 z@#N-_ofZ*7KFG`?6>Ue2=0|Hp15#utuvQT0gzZ&?kV44QlU?EsgOn{{2?=Lu&puNZ~AHL(mG2Lvc4oE z6iPuuAw#ocoYSuU+JcW<@1KT6A7{+()O4WDU4v|_$lX6{AaFbOYJqAGe_S z@%dBnl^<}F=aSr38COuM2%9RfQeRq;Cx=MP{d}V*SJ5=A;wk-l0Xkr=2iHe`eOfGngpL?M?h0t^+_@Og#bZSla3KC2jI&{~^DGs*$;Fmi)b z7eD?*wKINlmG5fEw1N{)L|proJ#Qj@Gl%XekiEBamcj}g&u6-Uw3HZMGxFb- zGR4LBJ)>kt0LB<4$uCnF7#h~VD#)w@Cra9JBjw?{o4RLlFhA&;(vKs@{HWyVi|vn` zX%mmFgStITGKa82x-N}k#hO{Uun{8CV{Z;Z_#Hzi%u-BKS)Ag(RZ4^+*_=k;M|64k zP2ZDu2T_UBmqQAImJo}>*B8tV%AexTw8Y?E!BeU-L#N;U{$CxC`Mg4)Mq{~kEP>4< z6SObfp5&@f&zNXu9QZs)Mj}COlv4f@qZIFJDKbi$looMAU-K95a_ity9W%m9U;je$ z*y$fMpJiGhGL;(*)P#{9@lXz%s!<8)D~1)Gnjwm%V+3+g8O2iFNU5y_bsJUsA!Fnp zyz8vD?HDUgg|s5Ql?=zZK|Gg9h2HswV$3j1p%% zFl6Yl1;|Znz@KclUdpV)p=%yBr${fj?fdT;76n0vC>99 z3#=@Dl9wD0MM^o$MQsS*xlvz|!O7F)7N<&u=2h;DyfUWvNqI`KXjys|FJo2#f)9EA zj=v?S@tFiRJP+RbrCp`bNz5p@K@y=+A=nz^wWnQ5M1;61qhtrgoEl_3>dXQ2LhLi= zED@93SeN}jyxo#I&50Z$WG7I5vMY>hL?R**Z5fh|a&gm+AwBPH`eCfF$Xkm7KVTv+ z8V01dZPgmcUv3zkNKoG4DY8zUb?UMqI8lIGV=GvybA0_xhr`aEvF<_*SuwJNX1v9o~Qhm>2}uh^lJEek!h;z0uIcHF`WcJ z7NIN6Jp^X18}ddn>U+|plYVt71%3*|lT$rsBDaP^TftQ6M(BzQ zN9iq5bjLJe;VTtJvn7G#qT_HaQwdX1SYznlU6tYfI8B9GO6F`X6 z@vm6e;I=RkzGnnx9#6noE?`JRkkoSy!n-yZ2I*IzD(kU8)Lv7o5BjMJyv+^xADM!W zktcR<@M&UsxU`4uj?j4&7;-$y+NfAj$>gwMH{rF^hxgpcx~@nl4HADN#Kx1YxJYn~ zNHmQNiBbs6yuYNU6oW(Y-!`NugHu0zHJ&p5I}<~VGYXIps7ulM#DC2l^HI@AWXN_` zP#PpBLV5Fuh^}<%IqhA_EQ{`;pT^ATbct=$ZDVaC1CLyMvpYde^6*+pB>GC?SvH8) z9eS1SADe=nVI36Kc1&@KtUy-cof1uhdk&jj6*KDdKaCaxyIYFh-W_G|lF$_$O~6yC z0D)}U$;8svE?|BGcX3K=B8aDn8YSiyeKdnlzS6m<5`AiIy=T+-PL&o>X}C@~sNDKx zk4!p%sT1U6!YkboAH+Zo%a&QN?CRwm>1=P?r3WUO2Tmb8m_NRZ4=I(xi9}S8OZ#57zLTDEqT#FaIGao)8)TFg z=Pccy8je*v!Hy>CCF^vArHbl33>ad7iGyd8Jf)Pibj_Ac(y{*Md){geZvESy5!n>E zhdvj!Rz1@r8SB(@$pQy=7of$^YYW!Nl!4WCPZf9Hm*`*}fZ_5^T~;qOn`oq$TEnc6 zKGn&JzbA~W6(1#oOC<-R6nS7~oop!qTUgxsCiDOsx(V_6+;6O9tv<#W6}ehLaK zkfA#!T5!h_nhsT3k4Pq7FR^*>27Ah(>$C*Obs za*Nxo1~x?lrDU?H-hETU*G<9ER?e*kiYn||&%OoBRs&lN1T|0^nQT?L)xcH*TMeih Z_#e}M?*)DPecJ#4002ovPDHLkV1nJ?+?4 + + + + + + + + + + + diff --git a/sprites/freeplay/icons/monsterpixel.json b/sprites/freeplay/icons/monsterpixel.json new file mode 100644 index 0000000..1478496 --- /dev/null +++ b/sprites/freeplay/icons/monsterpixel.json @@ -0,0 +1,75 @@ +{ + "TextureAtlas": { + "SubTexture": [ + { + "_name": "idle0001", + "_x": "85", + "_y": "0", + "_width": "38", + "_height": "25", + "_frameX": "-5", + "_frameY": "-2", + "_frameWidth": "45", + "_frameHeight": "31" + }, + { + "_name": "confirm0001", + "_x": "85", + "_y": "0", + "_width": "38", + "_height": "25", + "_frameX": "-5", + "_frameY": "-2", + "_frameWidth": "45", + "_frameHeight": "31" + }, + { + "_name": "confirm0002", + "_x": "0", + "_y": "0", + "_width": "45", + "_height": "22", + "_frameX": "-0", + "_frameY": "-6", + "_frameWidth": "45", + "_frameHeight": "31" + }, + { + "_name": "confirm0003", + "_x": "45", + "_y": "0", + "_width": "40", + "_height": "31", + "_frameX": "-3", + "_frameY": "-0", + "_frameWidth": "45", + "_frameHeight": "31" + }, + { + "_name": "confirm0004", + "_x": "0", + "_y": "22", + "_width": "40", + "_height": "27", + "_frameX": "-3", + "_frameY": "-2", + "_frameWidth": "45", + "_frameHeight": "31" + }, + { + "_name": "confirm-hold0001", + "_x": "0", + "_y": "22", + "_width": "40", + "_height": "27", + "_frameX": "-3", + "_frameY": "-2", + "_frameWidth": "45", + "_frameHeight": "31" + } + ], + "_imagePath": "monsterpixel.png", + "_width": "123", + "_height": "49" + } +} \ No newline at end of file diff --git a/sprites/freeplay/icons/monsterpixel.png b/sprites/freeplay/icons/monsterpixel.png new file mode 100644 index 0000000000000000000000000000000000000000..ac7668bd90810c33090db054ddcf732f18b07460 GIT binary patch literal 1053 zcmV+&1mgRNP)){-=zU!R{o7ykeNlmGw;1_=fP1_lEG0RaI30064@A-Dhl00MMUPE!E( zB2AhR000A^NklYVbo2Zf+%Jm zK?JIb%6M(&127s`lKO>PW)RE9^lihviC6~4oNe3CaNmfbqxHekcxJV8_pFG`qHg%6 zdu9`|t#CJoCj@;y$X9M;4E5r6x;N)ND{1nUHs`##tHvfzM8R@l77h^zg80F0$kLlh zy3RLSsxisE5&$hPKzW3j@rhZ@$FJK|(+&72o9+&P%s-k;Sru#FY}_uDjMQzq$_*Hc zQV&cshFWrWdqj29%bzh|Cf2?}$L3qm*RY7qG1O$rX)iDp8n&3ZG^_3wBn4`_TWVeC z8L_#$7Q2{<80q%-MpA7-OX96IU&`O+}<*dMRXn?A-jTUOE!I-I@ z_Ha0_ju(cSKpL$-s6tu`HG17Cw+X_C=)2={s$c9aWS}04n$-|%?h37n*Cuf>tAL}! zh$GxmxN5jMdlh5UM>*3C_rg;+gv-gbns%63bgTg25YY=i=Q%H9=MXthsxQDZCjqQI zcGvGA8m`PH6HDnzj&u2IV%iJK41YEgL%NdN ziQCxDPfq+aAF<2Q-5m$qAD@v#Qb8JXaV1yxXD?LabF~)IdZzSrEmu`6c;QpENh+%3 zP3~S7`#ZU-y3^U+`fzz7PXj}d}Y}qSn0Pr_`r~)2cp~-pltQD(v_g`VvcgYKeRAn*GoLXSnRNqDIs(jUc zKe0PoF1Nb*s#|gUUTYoK{wJ|)qx;sj=TuOw{@u&Ro(RjnU7i|91mKO`u4dbFI)NR( z8;% + + + + + + + + + + diff --git a/sprites/freeplay/icons/parents-christmaspixel.json b/sprites/freeplay/icons/parents-christmaspixel.json new file mode 100644 index 0000000..bda45c2 --- /dev/null +++ b/sprites/freeplay/icons/parents-christmaspixel.json @@ -0,0 +1,86 @@ +{ + "TextureAtlas": { + "SubTexture": [ + { + "_name": "idle0001", + "_x": "0", + "_y": "43", + "_width": "57", + "_height": "44", + "_frameX": "-7", + "_frameY": "-3", + "_frameWidth": "72", + "_frameHeight": "50" + }, + { + "_name": "confirm0001", + "_x": "0", + "_y": "43", + "_width": "57", + "_height": "44", + "_frameX": "-7", + "_frameY": "-3", + "_frameWidth": "72", + "_frameHeight": "50" + }, + { + "_name": "confirm0002", + "_x": "122", + "_y": "0", + "_width": "59", + "_height": "45", + "_frameX": "-4", + "_frameY": "-2", + "_frameWidth": "72", + "_frameHeight": "50" + }, + { + "_name": "confirm0003", + "_x": "61", + "_y": "42", + "_width": "59", + "_height": "43", + "_frameX": "-6", + "_frameY": "-2", + "_frameWidth": "72", + "_frameHeight": "50" + }, + { + "_name": "confirm0004", + "_x": "61", + "_y": "0", + "_width": "61", + "_height": "42", + "_frameX": "-5", + "_frameY": "-4", + "_frameWidth": "72", + "_frameHeight": "50" + }, + { + "_name": "confirm0005", + "_x": "0", + "_y": "0", + "_width": "61", + "_height": "43", + "_frameX": "-5", + "_frameY": "-3", + "_frameWidth": "72", + "_frameHeight": "50" + }, + { + "_name": "confirm-hold0001", + "_x": "0", + "_y": "0", + "_width": "61", + "_height": "43", + "_frameX": "-5", + "_frameY": "-3", + "_frameWidth": "72", + "_frameHeight": "50" + } + ], + "_imagePath": "parents-christmaspixel.png", + "_width": "181", + "_height": "87" + } +} \ No newline at end of file diff --git a/sprites/freeplay/icons/parents-christmaspixel.png b/sprites/freeplay/icons/parents-christmaspixel.png new file mode 100644 index 0000000000000000000000000000000000000000..a115dc976fbb8940b620a4b6f6449d8fd25810c4 GIT binary patch literal 2365 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 literal 0 HcmV?d00001 diff --git a/sprites/freeplay/icons/parents-christmaspixel.xml b/sprites/freeplay/icons/parents-christmaspixel.xml new file mode 100644 index 0000000..a2e6057 --- /dev/null +++ b/sprites/freeplay/icons/parents-christmaspixel.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/sprites/freeplay/icons/picopixel.json b/sprites/freeplay/icons/picopixel.json new file mode 100644 index 0000000..1fe0d64 --- /dev/null +++ b/sprites/freeplay/icons/picopixel.json @@ -0,0 +1,75 @@ +{ + "TextureAtlas": { + "SubTexture": [ + { + "_name": "idle0001", + "_x": "0", + "_y": "0", + "_width": "33", + "_height": "29", + "_frameX": "-3", + "_frameY": "-2", + "_frameWidth": "36", + "_frameHeight": "32" + }, + { + "_name": "confirm0001", + "_x": "0", + "_y": "0", + "_width": "33", + "_height": "29", + "_frameX": "-3", + "_frameY": "-2", + "_frameWidth": "36", + "_frameHeight": "32" + }, + { + "_name": "confirm0002", + "_x": "33", + "_y": "0", + "_width": "33", + "_height": "29", + "_frameX": "-2", + "_frameY": "-3", + "_frameWidth": "36", + "_frameHeight": "32" + }, + { + "_name": "confirm0003", + "_x": "99", + "_y": "0", + "_width": "32", + "_height": "28", + "_frameX": "-4", + "_frameY": "-2", + "_frameWidth": "36", + "_frameHeight": "32" + }, + { + "_name": "confirm0004", + "_x": "66", + "_y": "0", + "_width": "33", + "_height": "29", + "_frameX": "-3", + "_frameY": "-2", + "_frameWidth": "36", + "_frameHeight": "32" + }, + { + "_name": "confirm-hold0001", + "_x": "66", + "_y": "0", + "_width": "33", + "_height": "29", + "_frameX": "-3", + "_frameY": "-2", + "_frameWidth": "36", + "_frameHeight": "32" + } + ], + "_imagePath": "picopixel.png", + "_width": "131", + "_height": "29" + } +} \ No newline at end of file diff --git a/sprites/freeplay/icons/picopixel.png b/sprites/freeplay/icons/picopixel.png new file mode 100644 index 0000000000000000000000000000000000000000..0b16a4a976151bc26ccaa6807d847186f4122479 GIT binary patch literal 878 zcmV-!1CjiRP)FnPgKLVh^!_ir89a*Pq<7<2uF|9r+T87xL*|oD3eWoUe0T66fn#v#7{3Fa z`U)7XKSPqdO(6f&-tQ9F`(PCG?iOAUrtXH+_o0WTqhCr$|A6d&lX^iIK^Ws5Rd>dZ z;b353Jw?Rssn$Je1&ZEJy-&tsxLd-jj))8ZT{svLp%OeWREz5eo+8-K8E!Zo?|1L-h&#^k{Z6@OW!Mo*%i9UbxBj^bJxlhp_@6>^`WJ2t*D8`i`^=(*}NcH^2Ii^$&bwnh7YJN>-L)8J` zQo{Z?JPvgXqvK(Mg4=>nRptI}uz!d6?f_4H04Nl@4kZx`3nYV^BgaM*#O-06-HJbm)M0FxSF)|=2u@I7hP>qCO5MUv2 z>UnE$85DpfgPWAEm^g$1vx$fTiGV_hM3`w~%!g2;!YNGRC#PfGnq*dp&Fslw#<|Eu z$OO#YOa#7z0V^Oo90J}163&2a4M=1t8`p0Fijv^6g3_9`W+Fyb28B67115v12NcJ| zoQ|YiYnBL7BcnO0&Ozz~=p$mLZJLa)TA*xDvNh;uz|BESi;>Jrfggh(z!aS6wjio5 z!Zro7<_s(dE?YBIn{=@Q5doPn&li>kcT`HoUztUh=*&?gQ(t4E+I%v-7)1p zQYk6BL46kswHlJ3F~w?7DRV%&YSpt*Zghb_9vvD(7Om{5`;Lb})3Ba&@5mA-&>%Ps za`xBv#>ag)DG4{E2jF30Lf-a}NB^nk+&li^dHr{O03HB4r6HI4ZvX%Q07*qoM6N<$ Eg6ipvxBvhE literal 0 HcmV?d00001 diff --git a/sprites/freeplay/icons/picopixel.xml b/sprites/freeplay/icons/picopixel.xml new file mode 100644 index 0000000..cd896c2 --- /dev/null +++ b/sprites/freeplay/icons/picopixel.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/sprites/freeplay/icons/senpaipixel.png b/sprites/freeplay/icons/senpaipixel.png new file mode 100644 index 0000000000000000000000000000000000000000..86f097539bf916c7949a7895c688deaf30c7267c GIT binary patch literal 1321 zcmV+^1=jkBP)9j!XN<;x(*5Q!-s94ISlzbq*|l+`2&0+z3Y zdZe|sZHwKaSAK|Kci&dQ3GtW6Jc&g(CY?v7p@mODvJvtoxJ&<`A2Y(X&Fgw4m@VSY zHbj4EG@Yj+8e80_pf2mn4Kbx4G^QoOdq%=x-Mx*0Jp|EIMwq7a`8-WCBPJ9~8A;o2 z%=hd~221Z)F&3v{N|x0X84(dSCc0PHi|_aMYN+tdZzi?`*h2Mrb6Ng4#GJcg{py z!uF4aP|xjzb#cr)hzKRagHZW&@6wFBUkdqnHiTGo)#0^JTnb|-M&wt^wn#BjLY3yy zEIcr4A>;{?M{*$X(g=QOs!Uvn-Fk}@lfRK^E-k!a%BbeBP(C=S?%IKQ@(n$zvoRf=I3sx&lW9&{;%AT4hP z(4kDOF;RK}B8NEu5!eb6tg`AVA-08)0kJ%c+D(O;tBhqIERVL%zB5YYIxH-V;6_$3 z9utUwnF!_-(A&$IgR_hgJNFs%e3>h*4CFP9DRBj?8 zk@ti3;v2blK-ISLF=j5Dj1fVq<8IJc8=QC52gIUIwfZ$2S zebU-(3fcHLL)vC_2HmjQyfVb>Ht8(oJVH@c!E*QK*xLdsVoYne-QXLGvbJ9}&beHG zm29!>+8-S7!we2*i_~}b%291OvdOK z`~No54mHTDWUou0Yw)~k#xnm#nL(G|8i$Lh6Y>m + + + + + + + + + + diff --git a/sprites/freeplay/icons/spiritpixel.png b/sprites/freeplay/icons/spiritpixel.png new file mode 100644 index 0000000000000000000000000000000000000000..878d5ec9fcd72f2cbfe224c17d2ad439d3ff9ebc GIT binary patch literal 1028 zcmV+f1pE7mP)i!n2J4!x#sjxB)=GWtbN;jBcoDw!AWchXJ^S zgiAGI_Nw3?r))@VC(G*Nv!xftFN{_KNN#}>MPTHh1fQba%#Ms;S!`gd9uZNe5kCE8 zzc@)@g|rkanb7@5FKLDwxqHe>)+vrS_)WG|2Ko|cCp zMTUTsuo>OZ3XyDmF;&fy9&aZ2%*~lAF^^5i|+rW_B;T)1@;mxy)yjcey4w+6d)Vq5BC6R(&Nuw^KQ!W4+x6$`l}fbrlhlrn|FJH_|6dA zYU!Ww2hQ{7&Itd7$RT`AwU(KY!4j&0#@0p^%vS3^tUYnFQOyILA+iUk8FOvz!^5D? zPtAUk`>EMad_Oh&34g*Sk^A@d3!+$hJJ7=18IoI~hsg`eO#?k&YN=bQ9jY@f$8232 z=Td#mZTxJz*(P7F*4nGtM1)y1%}8qYTAL|tHXheW{0wrl=DFf^(%VR)&341hZ$O7t z=h=b0*$l}n-`O{NGA$HAO7@qHkPxq>ow!XVe)MX$r)sqA%DdWh6|>x#eMoAhaV8~Z yHQpxaU-gX;#ibciYsJk(Iy-zfQfUzlx5{t5BT=Y9Fon4Q0000 + + + + + + + + + + diff --git a/sprites/freeplay/icons/spookypixel.json b/sprites/freeplay/icons/spookypixel.json new file mode 100644 index 0000000..34d1e52 --- /dev/null +++ b/sprites/freeplay/icons/spookypixel.json @@ -0,0 +1,75 @@ +{ + "TextureAtlas": { + "SubTexture": [ + { + "_name": "idle0001", + "_x": "43", + "_y": "33", + "_width": "40", + "_height": "33", + "_frameX": "-7", + "_frameY": "-3", + "_frameWidth": "50", + "_frameHeight": "36" + }, + { + "_name": "confirm0001", + "_x": "43", + "_y": "33", + "_width": "40", + "_height": "33", + "_frameX": "-7", + "_frameY": "-3", + "_frameWidth": "50", + "_frameHeight": "36" + }, + { + "_name": "confirm0002", + "_x": "0", + "_y": "0", + "_width": "43", + "_height": "34", + "_frameX": "-7", + "_frameY": "-1", + "_frameWidth": "50", + "_frameHeight": "36" + }, + { + "_name": "confirm0003", + "_x": "43", + "_y": "0", + "_width": "43", + "_height": "33", + "_frameX": "-4", + "_frameY": "-3", + "_frameWidth": "50", + "_frameHeight": "36" + }, + { + "_name": "confirm0004", + "_x": "86", + "_y": "0", + "_width": "41", + "_height": "34", + "_frameX": "-6", + "_frameY": "-1", + "_frameWidth": "50", + "_frameHeight": "36" + }, + { + "_name": "confirm-hold0001", + "_x": "86", + "_y": "0", + "_width": "41", + "_height": "34", + "_frameX": "-6", + "_frameY": "-1", + "_frameWidth": "50", + "_frameHeight": "36" + } + ], + "_imagePath": "spookypixel.png", + "_width": "127", + "_height": "66" + } +} \ No newline at end of file diff --git a/sprites/freeplay/icons/spookypixel.png b/sprites/freeplay/icons/spookypixel.png new file mode 100644 index 0000000000000000000000000000000000000000..7c8c0d3b573b6613f9709f20c2bad219a25f2b9c GIT binary patch literal 1167 zcmV;A1aSL_P)QYJPv{mzo6Ue8)IGlaYLQTKBfP2qbT3- zm%~BDm?nRn$*y~!miKc^c5D<*{2crF^X3K6atKH-UqPRt3D z9ZWl6tAemag>@1FijdO>VWF>RHmZL*Vi?pPD0fue&@0x$g}e3M_b57HwMm6) zzgJa+Dy9DfGXI9w@7C_62e4TODqs~hj^dH}yisuNfG-!uk&&C=@pcIEd^ivY6uli}3P&xH+ekRHcOnJygwWdzut zl_L}v`twA;IB5ASaJ^pvoXHQD`USMvkFdB?xRO-K4?0sL|Fv}4W;)GzBvAV=rrV+e z7H4pc|E>VkabDZpF8@6f01*e=8~w3vXOsRuzoXUbzoWiV002ovPDHLkV1h`PK8OGS literal 0 HcmV?d00001 diff --git a/sprites/freeplay/icons/spookypixel.xml b/sprites/freeplay/icons/spookypixel.xml new file mode 100644 index 0000000..2588df3 --- /dev/null +++ b/sprites/freeplay/icons/spookypixel.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/sprites/freeplay/icons/tankmanpixel.json b/sprites/freeplay/icons/tankmanpixel.json new file mode 100644 index 0000000..0a5def1 --- /dev/null +++ b/sprites/freeplay/icons/tankmanpixel.json @@ -0,0 +1,75 @@ +{ + "TextureAtlas": { + "SubTexture": [ + { + "_name": "idle0001", + "_x": "103", + "_y": "0", + "_width": "32", + "_height": "26", + "_frameX": "-6", + "_frameY": "-2", + "_frameWidth": "40", + "_frameHeight": "28" + }, + { + "_name": "confirm0001", + "_x": "103", + "_y": "0", + "_width": "32", + "_height": "26", + "_frameX": "-6", + "_frameY": "-2", + "_frameWidth": "40", + "_frameHeight": "28" + }, + { + "_name": "confirm0002", + "_x": "69", + "_y": "0", + "_width": "34", + "_height": "24", + "_frameX": "-6", + "_frameY": "-4", + "_frameWidth": "40", + "_frameHeight": "28" + }, + { + "_name": "confirm0003", + "_x": "0", + "_y": "0", + "_width": "35", + "_height": "27", + "_frameX": "-5", + "_frameY": "-0", + "_frameWidth": "40", + "_frameHeight": "28" + }, + { + "_name": "confirm0004", + "_x": "35", + "_y": "0", + "_width": "34", + "_height": "26", + "_frameX": "-6", + "_frameY": "-1", + "_frameWidth": "40", + "_frameHeight": "28" + }, + { + "_name": "confirm-hold0001", + "_x": "35", + "_y": "0", + "_width": "34", + "_height": "26", + "_frameX": "-6", + "_frameY": "-1", + "_frameWidth": "40", + "_frameHeight": "28" + } + ], + "_imagePath": "tankmanpixel.png", + "_width": "135", + "_height": "27" + } +} \ No newline at end of file diff --git a/sprites/freeplay/icons/tankmanpixel.png b/sprites/freeplay/icons/tankmanpixel.png new file mode 100644 index 0000000000000000000000000000000000000000..d94fc66b65ca75a20b2edd7ae8d6afebac165200 GIT binary patch literal 873 zcmV-v1D5=WP)o+cBOJiUx_k$N}@==Rxo&d;8!9d*ooIO@ogP&w}!jp zSz?OZRY=lp;N(+;KGyd{N-O}o#Gcqp7;Zbh%*-{Snt{Dz$MG$px<-O-4>lR*}^M_Q;6P>{-;fCxWCLiKNcZkn%=w^FY@? zVjDdYj~c4!F()D@W#Ujq_b823#LNL;Hcb<^qqtN!rtVAcf7Gc@fUqsG%Ci(vW& zcU3@2qOg3Ozlpfjd82%Q+B}Y3#A{KO7z9*j3u=jCS)s~%D&06?-sVO~A3 zsCJ1T9&LMStCRBx*G0rBSva+H&&%47Pe? zgGy;0fEl`Kt{p8xs~)ttYJ`dOPN6%4W*inw%_P_31!NPJ5@_2Eezrh$@_>jaP$R6H zCscWRWK)fksz&J=Dx#EWy?wCJRDdigrF*yoP=y_bB9S+m7R|#!Qy%NIwS^?@tO--K zxYQzlgB7bD?bwu}I+XyB%OhP;cZo=uVNHZtjQOd(B~62@?=h_gLi1zh*9vPThu+dLbxI3x{(4Wwp2zSzJiL%ukLGO1^diPK=Ei{S^QDgv< zhGb8+j0i02aWoruEcXwR?zEyx>br&RU1F%F2T85(E8VgKkkgJ?+hu$zxgJw@Xv;gl{xQ%kPSy0hhw}FUxOIis zjl}@3zh~U&Q{fq)JA6zugMT7| + + + + + + + + + + diff --git a/src/main.lua b/src/main.lua index 91d5ecd..d639ee9 100644 --- a/src/main.lua +++ b/src/main.lua @@ -1,5 +1,9 @@ +-- This is pretty much the menustate code, i might put it into a different module in some time. + local gamePath = love.filesystem.getSourceBaseDirectory() -- Assuming it's always in fused mode. -local mounted = love.filesystem.mount(gamePath, "") -- Mounting the game directory, should be accessible like if normal. +local dataFolder = love.filesystem.getSaveDirectory() + +local mounted = love.filesystem.mount(gamePath, "") -- Mounting the game directory, should be accessible like if normal. assert(mounted, "Couldn't mount the game directory.") @@ -14,12 +18,54 @@ local logging = require("modules.logging") require("modules.loveanimate") -- Start loveanimate local songs = require("charts.songs") +local unparsedData = files.read_file("Saves.json") +print(dataFolder, unparsedData) +local data = unparsedData and json.parse(unparsedData) or +{ + songs = { + tutorial = { + hard = { + accuracy = 100, + score = 100000, + rank = "Perfect" + } + } + } +} + +print(logging.dump(data)) + +local icons = {} + +local function setupIcons() + for index, icon in next, icons do + icon:Destroy() + end + + for index, song in next, songs do + local icon = song.icon + if not icon then goto evilgoto end + + local spriteicon = myTypes.Sprite(string.format("sprites/freeplay/icons/%s.png", icon), string.format("sprites/freeplay/icons/%s.json", icon)) + spriteicon:PlayAnimation("idle", .005, false) + spriteicon.frame = 1 + spriteicon.layer = 10 + + icons[song.name] = spriteicon + + ::evilgoto:: + end +end + curChar = "bf" --this needs to be global local flip = false local lastChange = 0 +local startedPlaying = 0 +local start = false + local curSong = songs[1] local curIndex = 1 local evilCurIndex = 1 @@ -33,12 +79,12 @@ local curDiffInd = 1 local diffIMG local charIcon -local iconNum = math.random(1,3) +local iconNum = math.random(1, 3) local curState = nil local stateLoaded = false -local pressed = {false,false,false} +local pressed = { false, false, false } local bg local logo @@ -49,8 +95,10 @@ local charSwapSND = love.audio.newSource("sounds/CS_select.ogg", "stream") charSwapSND:setVolume(0.25) local left +local arrow local function setup() + start = false bg = myTypes.Image("images/menuBG.png", 0) bg.ui = false bg.layer = -10 @@ -61,21 +109,31 @@ local function setup() left.layer = 0 left.resize = myTypes.Vector2(2, 1) - local arrow = myTypes.Image("images/eventArrow.png") + arrow = myTypes.Sprite("sprites/freeplay/freeplaySelector.png", "sprites/freeplay/freeplaySelector.json") arrow.position.y = 330 + arrow.position.x = 20 arrow.layer = 1 - arrow.resize = myTypes.Vector2(.5,.5) + arrow.resize = myTypes.Vector2(.5, .5) + arrow.flipX = true + arrow:PlayAnimation("arrow pointer loop", 24, true) - diffIMG = myTypes.Sprite("images/diff/diffList.png", "images/diff/diffList.json") --look there was a different plan going in + -- myTypes.render.preLoad( + -- "sprites/freeplay/freeplaySelector_pico.png", + -- "sprites/freeplay/freeplaySelector.json" + -- ) + + myTypes.render.preLoad("sprites/freeplay/freeplaySelector_pico.png", "sprites/freeplay/freeplaySelector_pico.json") + + diffIMG = myTypes.Sprite("images/diff/diffList.png", "images/diff/diffList.json") --look there was a different plan going in diffIMG:PlayAnimation(curDiff, 24, false) diffIMG.position = myTypes.Vector2(200, 320) diffIMG.layer = 2 charIcon = myTypes.Sprite("sprites/menu/charIcons.png", "sprites/menu/charIcons.json") - charIcon:PlayAnimation(curChar..iconNum, 24, false) + charIcon:PlayAnimation(curChar .. iconNum, 24, false) charIcon.position = myTypes.Vector2(175, 100) - charIcon.resize = myTypes.Vector2(0.25, 0.25) --this doesnt work and idk why - charIcon.layer = 2 --since they won't overlap this is ok i think + charIcon.resize = myTypes.Vector2(0.25, 0.25) --this doesnt work and idk why + charIcon.layer = 2 --since they won't overlap this is ok i think freaky:play() @@ -93,9 +151,12 @@ local function setup() bfAtlas:play("pico cs idle") end + + setupIcons() end local font = love.graphics.newFont("fonts/FridayNightFunkin-Regular.ttf", 40) +local smallerFont = love.graphics.newFont("fonts/FridayNightFunkin-Regular.ttf", 20) local gettingKey @@ -109,19 +170,26 @@ function love.update(dt) if stateLoaded then curState.update(dt) else - stateLoaded = true -- skipping this update frame + stateLoaded = true -- skipping this update frame curState.finish() end elseif not curState then + if start then + startedPlaying = startedPlaying + dt + if startedPlaying > 2 then + run() + end + end + lastChange = lastChange + dt - if lastChange > .25 and bfAtlas.symbol == curChar.." slide in" then - bfAtlas:play(curChar.." cs idle") + if lastChange > .25 and bfAtlas.symbol == curChar .. " slide in" then + bfAtlas:play(curChar .. " cs idle") if curChar == "pico" then flip = true end end bfAtlas:update(dt) - myTypes.render.cameraTarget = myTypes.Vector2(0,0) + myTypes.render.cameraTarget = myTypes.Vector2(0, 0) myTypes.updateSprites(dt) end end @@ -130,173 +198,266 @@ function love.draw() if curState and stateLoaded then curState.draw() else - + love.graphics.setDefaultFilter("nearest", "nearest") myTypes.drawSprites() evilCurIndex = myMath.lerp(evilCurIndex, curIndex, .3) for index, song in next, songs do - love.graphics.print({{0,0,0}, song.name}, font, 300 + (8 * (index - evilCurIndex)), love.graphics:getHeight()/2 + (50 * (index - evilCurIndex - .7)), 0, 1, 1, 200) + local color = index == curIndex and { 50, 50, 50 } or { 0, 0, 0 } + love.graphics.print({color , song.name }, font, 300 + (8 * (index - evilCurIndex)), love.graphics:getHeight() / 2 + (50 * (index - evilCurIndex - .7)), 0, 1, 1, 200) + + local icon = icons[song.name] + if icon then + icon.position = myTypes.Vector2(5 * (index - evilCurIndex) + 80 + (song.name:len() * 10), love.graphics:getHeight() / 4 + (25 * (index - evilCurIndex - .5))) + end end + arrow.position = myTypes.Vector2(30 + 8 * (evilCurIndex - curIndex), love.graphics:getHeight() / 4 + (evilCurIndex - curIndex - 1) * 25) + --love.graphics.print({{0,0,0}, curDiff}, font, 400, 660) love.graphics.print( - {{0,0,0}, string.format("Left: %s, Down: %s, Up: %s, Right: %s \nDownscroll: %s", - keybinds[1], - keybinds[2], - keybinds[3], - keybinds[4], - settings.Downscroll - )}) - love.graphics.print({{0,0,0}, "Press 1 to change LEFT \nPress 2 to change DOWN \nPress 3 to change UP \nPress 4 to change RIGHT \nPress 0 to toggle DOWNSCROLL \nPress P to SWAP CHARACTERS"}, 500, 0) - if bfAtlas.symbol == curChar.." slide in" then + { + { 0, 0, 0 }, + string.format( + "Left: %s, Down: %s, Up: %s, Right: %s \nDownscroll: %s", + keybinds[1], + keybinds[2], + keybinds[3], + keybinds[4], + settings.Downscroll + ) + } + ) + love.graphics.print( + { + { 0, 0, 0 }, + "Press 1 to change LEFT \nPress 2 to change DOWN \nPress 3 to change UP \nPress 4 to change RIGHT \nPress 0 to toggle DOWNSCROLL \nPress P to SWAP CHARACTERS" + }, + 500, + 0 + ) + if bfAtlas.symbol == curChar .. " slide in" then bfAtlas:draw(curChar == "bf" and 695 or 690, curChar == "bf" and 315 or 320, 0, flip and -1 or 1, 1) else bfAtlas:draw(curChar == "bf" and 700 or 1150, curChar == "bf" and 300 or 190, 0, flip and -1 or 1, 1) end + + if data.songs[curSong.name] and data.songs[curSong.name][curDiff] then + local text = string.format("Accuracy: %s, Score: %s, Rank: %s", tostring(data.songs[curSong.name][curDiff].accuracy):sub(1, 5), data.songs[curSong.name][curDiff].score, data.songs[curSong.name][curDiff].rank) + love.graphics.print({{ 0, 0, 0 }, text}, smallerFont, 1280 - text:len() * 10, 0) + end end end -function run() - confirm:stop() - confirm:play() +local rankingWindows = { + { + name = "Bad", + window = 50 + }, + { + name = "Good", + window = 70 + }, + { + name = "Sick", + window = 90 + }, + { + name = "Perfect", + window = 100 + }, +} +local function getRank(accuracy) + local rank = "Ass" + for index, newRank in next, rankingWindows do + if accuracy >= newRank.window then + rank = newRank.name + end + end + + return rank +end + +function run() myTypes.destroyAllSprites() freaky:stop() curState = state(curSong.name, curDiff) - curState.quit = function() + curState.quit = function(accuracy, score) + if accuracy then + if not data.songs[curSong.name] then + data.songs[curSong.name] = {} + data.songs[curSong.name][curDiff] = { + accuracy = accuracy, + score = score, + rank = getRank(accuracy) + } + end + if data.songs[curSong.name][curDiff] and accuracy > data.songs[curSong.name][curDiff].accuracy or not data.songs[curSong.name][curDiff] then + data.songs[curSong.name][curDiff] = { + accuracy = accuracy, + score = score, + rank = getRank(accuracy) + } + end + end + files.write_file("Saves.json", json.stringify(data)) curState = nil stateLoaded = false myTypes.destroyAllSprites() - setup() + setup() end curState.restart = function() curState = nil stateLoaded = false myTypes.destroyAllSprites() - + run() end curState.load() end function love.keypressed(key, un, is) - if curState and stateLoaded then - curState.keypressed(key, un, is) - elseif not curState then - if not gettingKey then - if key == "return" then - run() - elseif key == "down" then - curIndex, curSong = next(songs, curIndex) - if not curSong then - curIndex, curSong = next(songs) - curDiffList = curSong.difficulties - else - curDiffList = curSong.difficulties - end - curDiffInd = 1 - curDiff = curDiffList[1] - diffIMG:PlayAnimation(curDiff, 24, true) - scroll:stop() - scroll:play() - elseif key == "up" then --the solution was so stupid easy - if songs[curIndex - 1] then - curSong = songs[curIndex - 1] - curDiffList = songs[curIndex - 1].difficulties - curDiffInd = 1 - curDiff = curDiffList[curDiffInd] - curIndex = curIndex - 1 - else - curSong = songs[#songs] - curIndex = #songs - curDiffList = songs[curIndex].difficulties - curDiffInd = 1 - curDiff = curDiffList[curDiffInd] - end - curDiffInd = 1 - curDiff = curDiffList[1] - diffIMG:PlayAnimation(curDiff, 24, true) - scroll:stop() - scroll:play() - elseif key == "right" then - if curDiffList[curDiffInd + 1] then - curDiff = curDiffList[curDiffInd + 1] - curDiffInd = curDiffInd + 1 - else - curDiff = curDiffList[1] - curDiffInd = 1 - end - diffIMG:PlayAnimation(curDiff, 24, true) - scroll:stop() - scroll:play() - elseif key == "left" then - if curDiffList[curDiffInd - 1] then - curDiff = curDiffList[curDiffInd - 1] - curDiffInd = curDiffInd - 1 - else - curDiff = curDiffList[#curDiffList] - curDiffInd = #curDiffList - end - diffIMG:PlayAnimation(curDiff, 24, true) - scroll:stop() - scroll:play() - elseif key == "p" then --changes character to/from pico hopefully - if curChar == "bf" then - songs = require("charts.picoSongs") --change which catalogue is available - curChar = "pico" - bfAtlas:stop() - bfAtlas:load("sprites/charSelect/picoChill") - bfAtlas:play("pico slide in") - -- flip = true - else - songs = require("charts.songs") - curChar = "bf" - bfAtlas:stop() - bfAtlas:load("sprites/charSelect/bfChill") - bfAtlas:play("bf slide in") - end - flip = false - --reset the index's nd shit - curSong = songs[1] - curIndex = 1 - evilCurIndex = 1 - curDiffInd = 1 - curDiffList = songs[curIndex].difficulties - curDiff = curDiffList[1] - diffIMG:PlayAnimation(curDiff, 24, true) - iconNum = math.random(1,3) - charIcon:PlayAnimation(curChar..iconNum, 24, false) - charSwapSND:stop() - charSwapSND:play() - lastChange = 0 - - elseif tonumber(key) and tonumber(key) < 5 then - if key == "0" then - settings.Downscroll = not settings.Downscroll - files.write_file("settings.json", json.stringify(settings)) - else - gettingKey = tonumber(key) - end - end - else - keybinds[gettingKey] = key - gettingKey = nil - - files.write_file("settings.json", json.stringify(settings)) - + if curState and stateLoaded then + curState.keypressed(key, un, is) + elseif not curState and not start then + if not gettingKey then + if key == "return" then + start = true + startedPlaying = 0 + icons[curSong.name]:PlayAnimation("confirm", 24, false) confirm:stop() confirm:play() + bfAtlas:play(string.format("%s cs confirm", curChar)) + elseif key == "down" then + curIndex, curSong = next(songs, curIndex) + if not curSong then + curIndex, curSong = next(songs) + curDiffList = curSong.difficulties + else + curDiffList = curSong.difficulties + end + curDiffInd = 1 + curDiff = curDiffList[1] + diffIMG:PlayAnimation(curDiff, 24, true) + scroll:stop() + scroll:play() + elseif key == "up" then --the solution was so stupid easy + if songs[curIndex - 1] then + curSong = songs[curIndex - 1] + curDiffList = songs[curIndex - 1].difficulties + curDiffInd = 1 + curDiff = curDiffList[curDiffInd] + curIndex = curIndex - 1 + else + curSong = songs[#songs] + curIndex = #songs + curDiffList = songs[curIndex].difficulties + curDiffInd = 1 + curDiff = curDiffList[curDiffInd] + end + curDiffInd = 1 + curDiff = curDiffList[1] + diffIMG:PlayAnimation(curDiff, 24, true) + scroll:stop() + scroll:play() + elseif key == "right" then + if curDiffList[curDiffInd + 1] then + curDiff = curDiffList[curDiffInd + 1] + curDiffInd = curDiffInd + 1 + else + curDiff = curDiffList[1] + curDiffInd = 1 + end + diffIMG:PlayAnimation(curDiff, 24, true) + scroll:stop() + scroll:play() + elseif key == "left" then + if curDiffList[curDiffInd - 1] then + curDiff = curDiffList[curDiffInd - 1] + curDiffInd = curDiffInd - 1 + else + curDiff = curDiffList[#curDiffList] + curDiffInd = #curDiffList + end + diffIMG:PlayAnimation(curDiff, 24, true) + scroll:stop() + scroll:play() + elseif key == "p" then --changes character to/from pico hopefully + arrow:Destroy() + if curChar == "bf" then + -- flip = true + songs = require("charts.picoSongs") --change which catalogue is available + curChar = "pico" + bfAtlas:stop() + bfAtlas:load("sprites/charSelect/picoChill") + bfAtlas:play("pico slide in") + arrow = myTypes.Sprite( + "sprites/freeplay/freeplaySelector_pico.png", + "sprites/freeplay/freeplaySelector_pico.json" + ) + arrow.position.y = 330 + arrow.position.x = 20 + arrow.layer = 1 + arrow.resize = myTypes.Vector2(.5, .5) + arrow.flipX = true + arrow:PlayAnimation("arrow pointer loop", 24, true) + + else + arrow = myTypes.Sprite("sprites/freeplay/freeplaySelector.png", "sprites/freeplay/freeplaySelector.json") + arrow.position.y = 330 + arrow.position.x = 20 + arrow.layer = 1 + arrow.resize = myTypes.Vector2(.5, .5) + arrow.flipX = true + arrow:PlayAnimation("arrow pointer loop", 24, true) + songs = require("charts.songs") + curChar = "bf" + bfAtlas:stop() + bfAtlas:load("sprites/charSelect/bfChill") + bfAtlas:play("bf slide in") + end + flip = false + --reset the index's nd shit + curSong = songs[1] + curIndex = 1 + evilCurIndex = 1 + curDiffInd = 1 + curDiffList = songs[curIndex].difficulties + curDiff = curDiffList[1] + diffIMG:PlayAnimation(curDiff, 24, true) + iconNum = math.random(1, 3) + charIcon:PlayAnimation(curChar .. iconNum, 24, false) + charSwapSND:stop() + charSwapSND:play() + lastChange = 0 + setupIcons() + elseif tonumber(key) and tonumber(key) < 5 then + if key == "0" then + settings.Downscroll = not settings.Downscroll + files.write_file("settings.json", json.stringify(settings)) + else + gettingKey = tonumber(key) + end end + else + keybinds[gettingKey] = key + gettingKey = nil + + files.write_file("settings.json", json.stringify(settings)) + + confirm:stop() + confirm:play() end + end end -love.window.setMode(1280, 720, { fullscreen = false , resizable = false}) - +love.window.setMode(1280, 720, { fullscreen = false, resizable = false }) function love.load() setup() -end \ No newline at end of file +end diff --git a/src/modules/states/playstate.lua b/src/modules/states/playstate.lua index 0735cdc..680262d 100644 --- a/src/modules/states/playstate.lua +++ b/src/modules/states/playstate.lua @@ -151,6 +151,19 @@ local function state(songName, songDifficulty) local deadBF local restart = false + local countDownAudio = { + love.audio.newSource("sounds/countdown/introONE.ogg", "static"), + love.audio.newSource("sounds/countdown/introTWO.ogg", "static"), + love.audio.newSource("sounds/countdown/introTHREE.ogg", "static"), + love.audio.newSource("sounds/countdown/introGO.ogg", "static") + } + local curCD = 0 + local counting = true -- Before the round starts it will be true + local cdLength = 0 + for i, audio in next, countDownAudio do + cdLength = cdLength + audio:getDuration() * 1000 + end + local sharedVars = { canStart = true, screenSize = myTypes.Vector2(1280, 720), @@ -175,7 +188,8 @@ local function state(songName, songDifficulty) zoom = zoom, notes = notes, -- only spawned notes holds = holdNotes, - characters = characters + characters = characters, + shouldCountdown = true, } local function quit() @@ -212,7 +226,7 @@ local function state(songName, songDifficulty) gameOverEnd:stop() end - state.quit() + state.quit(not dead and math.abs(score) > 0 and accuracy, not dead and math.abs(score) > 0 and score) end local function die() @@ -340,11 +354,36 @@ local function state(songName, songDifficulty) end -- playing isn't supposed to work like "paused", it's there to keep the game from working during loading + if counting and sharedVars.shouldCountdown then + if not countDownAudio[curCD] or not countDownAudio[curCD]:isPlaying() then + if not countDownAudio[curCD + 1] then + counting = false -- Ended the countdown + inst:play() + if chart.needsVoices then + voices:play() + end + + elapsed = 0 + + playing = true --countdown now + + startTime = socket.gettime() + cdLength = 0 + + else + curCD = curCD + 1 + countDownAudio[curCD]:play() + end + end + elseif not sharedVars.shouldCountdown then + counting = false + end + if paused then goto continue end -- if paused then skip this cycle local currentTime = socket.gettime() - elapsed = (currentTime - startTime) * 1000 - pauseTime + elapsed = (currentTime - startTime) * 1000 - pauseTime - cdLength conductor.songPosition = elapsed @@ -407,6 +446,9 @@ local function state(songName, songDifficulty) local currentSingVector = sharedVars.singVectors[characters.gf.animation] or myTypes.Vector2() myTypes.render.cameraTarget = myTypes.Vector2(stage.camera_girlfriend[1], stage.camera_girlfriend[2]):Add(characters.gf.stageCamera:Negate()):Add(myTypes.Vector2(0, -200)):Add(currentSingVector) end + else + local currentSingVector = sharedVars.singVectors[characters.dad.animation] or myTypes.Vector2() + myTypes.render.cameraTarget = myTypes.Vector2(stage.camera_opponent[1], stage.camera_opponent[2]):Add(characters.dad.stageCamera:Negate()):Add(myTypes.Vector2(0, -200)) end myTypes.updateSprites(dt) @@ -461,18 +503,22 @@ local function state(songName, songDifficulty) note.sprite.position = myTypes.Vector2(opponentReceptors[note.direction].position.x + note.offset.x, settings.Downscroll and opponentReceptors[note.direction].position.y - (note.position-elapsed) * speed or opponentReceptors[note.direction].position.y + (note.position - elapsed) * speed) if (note.position - elapsed) * speed < 10 then notes[index] = nil - if section.gfSection or chart.song == "Tutorial" then - if section.altAnim or note.altAnim then - characters.gf:PlayAnimation("sing"..directions[note.direction].."-alt") + if section then + if section.gfSection or chart.song == "Tutorial" then + if section.altAnim or note.altAnim then + characters.gf:PlayAnimation("sing"..directions[note.direction].."-alt") + else + characters.gf:PlayAnimation("sing"..directions[note.direction]) + end else - characters.gf:PlayAnimation("sing"..directions[note.direction]) + if section.altAnim or note.altAnim then + characters.dad:PlayAnimation("sing"..directions[note.direction].."-alt") + else + characters.dad:PlayAnimation("sing"..directions[note.direction]) + end end else - if section.altAnim or note.altAnim then - characters.dad:PlayAnimation("sing"..directions[note.direction].."-alt") - else - characters.dad:PlayAnimation("sing"..directions[note.direction]) - end + characters.dad:PlayAnimation("sing"..directions[note.direction]) end note:destroy() note = nil @@ -556,7 +602,7 @@ local function state(songName, songDifficulty) health = 2 end - if inst and not inst:isPlaying() then + if inst and not inst:isPlaying() and not counting then quit() end @@ -773,8 +819,8 @@ local function state(songName, songDifficulty) local newEvent = { time = note[1], name = string.lower(note[3]), - var1 = string.lower(note[4]), - var2 = string.lower(note[5]) + var1 = string.lower(note[4] or ""), + var2 = string.lower(note[5] or "") } events[#events+1] = newEvent @@ -889,13 +935,13 @@ local function state(songName, songDifficulty) if sharedVars.canStart then sharedVars.canStart = false -- already started - inst:play() - if chart.needsVoices then - voices:play() - end + -- inst:play() + -- if chart.needsVoices then + -- voices:play() + -- end - while not inst:isPlaying() do - end --waiting till the song actually plays. + -- while not inst:isPlaying() do + -- end --waiting till the song actually plays. elapsed = 0 diff --git a/src/modules/types/render.lua b/src/modules/types/render.lua index 8aa5383..2fc09de 100644 --- a/src/modules/types/render.lua +++ b/src/modules/types/render.lua @@ -10,6 +10,7 @@ local Image = {} Image.__index = Image local cachedQuads = {} +local cachedImages = {} local loadedShaders = {} @@ -413,8 +414,12 @@ function module.destroyAllSprites() end function module.Image(path, scrollFactor) + if not cachedImages[path] then + cachedImages[path] = love.graphics.newImage(path) + end + local newImage = setmetatable({ - image = love.graphics.newImage(path), + image = cachedImages[path], resize = module.myTypes.Vector2(1,1), position = module.myTypes.Vector2(), modifier = scrollFactor or 1, @@ -462,6 +467,10 @@ function module.preLoad(imagePath, sheetPath) cachedQuads[sheetPath] = {quads = quads, image = image} end +function module.preLoadImage(path) + cachedImages[path] = love.graphics.newImage(path) +end + function module.loadShader(name) local file = files.read_file(string.format("shaders/%s", name))