Icons for songs, funny thing for satin-panties, score saving (NOT FINISHED)
@ -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"
|
||||
}
|
||||
}
|
@ -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
|
@ -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"
|
||||
}
|
||||
}
|
112
sprites/freeplay/freeplaySelector.json
Normal file
@ -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"
|
||||
}
|
||||
}
|
BIN
sprites/freeplay/freeplaySelector.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
112
sprites/freeplay/freeplaySelector_pico.json
Normal file
@ -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"
|
||||
}
|
||||
}
|
BIN
sprites/freeplay/freeplaySelector_pico.png
Normal file
After Width: | Height: | Size: 7.2 KiB |
75
sprites/freeplay/icons/bfpixel.json
Normal file
@ -0,0 +1,75 @@
|
||||
{
|
||||
"TextureAtlas": {
|
||||
"SubTexture": [
|
||||
{
|
||||
"_name": "idle0001",
|
||||
"_x": "44",
|
||||
"_y": "0",
|
||||
"_width": "42",
|
||||
"_height": "28",
|
||||
"_frameX": "-3",
|
||||
"_frameY": "-12",
|
||||
"_frameWidth": "50",
|
||||
"_frameHeight": "50"
|
||||
},
|
||||
{
|
||||
"_name": "confirm0001",
|
||||
"_x": "44",
|
||||
"_y": "0",
|
||||
"_width": "42",
|
||||
"_height": "28",
|
||||
"_frameX": "-3",
|
||||
"_frameY": "-12",
|
||||
"_frameWidth": "50",
|
||||
"_frameHeight": "50"
|
||||
},
|
||||
{
|
||||
"_name": "confirm0002",
|
||||
"_x": "0",
|
||||
"_y": "0",
|
||||
"_width": "44",
|
||||
"_height": "25",
|
||||
"_frameX": "-0",
|
||||
"_frameY": "-19",
|
||||
"_frameWidth": "50",
|
||||
"_frameHeight": "50"
|
||||
},
|
||||
{
|
||||
"_name": "confirm0003",
|
||||
"_x": "86",
|
||||
"_y": "0",
|
||||
"_width": "33",
|
||||
"_height": "37",
|
||||
"_frameX": "-5",
|
||||
"_frameY": "-6",
|
||||
"_frameWidth": "50",
|
||||
"_frameHeight": "50"
|
||||
},
|
||||
{
|
||||
"_name": "confirm0004",
|
||||
"_x": "0",
|
||||
"_y": "25",
|
||||
"_width": "37",
|
||||
"_height": "31",
|
||||
"_frameX": "-4",
|
||||
"_frameY": "-9",
|
||||
"_frameWidth": "50",
|
||||
"_frameHeight": "50"
|
||||
},
|
||||
{
|
||||
"_name": "confirm-hold0001",
|
||||
"_x": "0",
|
||||
"_y": "25",
|
||||
"_width": "37",
|
||||
"_height": "31",
|
||||
"_frameX": "-4",
|
||||
"_frameY": "-9",
|
||||
"_frameWidth": "50",
|
||||
"_frameHeight": "50"
|
||||
}
|
||||
],
|
||||
"_imagePath": "bfpixel.png",
|
||||
"_width": "119",
|
||||
"_height": "56"
|
||||
}
|
||||
}
|
BIN
sprites/freeplay/icons/bfpixel.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
11
sprites/freeplay/icons/bfpixel.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<TextureAtlas imagePath="bfpixel.png" width="119" height="56">
|
||||
<SubTexture name="idle0001" x="44" y="0" width="42" height="28" frameX="-3" frameY="-12" frameWidth="50" frameHeight="50"/>
|
||||
|
||||
<SubTexture name="confirm0001" x="44" y="0" width="42" height="28" frameX="-3" frameY="-12" frameWidth="50" frameHeight="50"/>
|
||||
<SubTexture name="confirm0002" x="0" y="0" width="44" height="25" frameX="-0" frameY="-19" frameWidth="50" frameHeight="50"/>
|
||||
<SubTexture name="confirm0003" x="86" y="0" width="33" height="37" frameX="-5" frameY="-6" frameWidth="50" frameHeight="50"/>
|
||||
<SubTexture name="confirm0004" x="0" y="25" width="37" height="31" frameX="-4" frameY="-9" frameWidth="50" frameHeight="50"/>
|
||||
|
||||
<SubTexture name="confirm-hold0001" x="0" y="25" width="37" height="31" frameX="-4" frameY="-9" frameWidth="50" frameHeight="50"/>
|
||||
</TextureAtlas>
|
75
sprites/freeplay/icons/dadpixel.json
Normal file
@ -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"
|
||||
}
|
||||
}
|
BIN
sprites/freeplay/icons/dadpixel.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
11
sprites/freeplay/icons/dadpixel.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<TextureAtlas imagePath="dadpixel.png" width="34" height="141">
|
||||
<SubTexture name="idle0001" x="0" y="77" width="31" height="33" frameX="-12" frameY="-6" frameWidth="50" frameHeight="40"/>
|
||||
|
||||
<SubTexture name="confirm0001" x="0" y="77" width="31" height="33" frameX="-12" frameY="-6" frameWidth="50" frameHeight="40"/>
|
||||
<SubTexture name="confirm0002" x="0" y="110" width="34" height="31" frameX="-11" frameY="-9" frameWidth="50" frameHeight="40"/>
|
||||
<SubTexture name="confirm0003" x="0" y="0" width="32" height="39" frameX="-11" frameY="-1" frameWidth="50" frameHeight="40"/>
|
||||
<SubTexture name="confirm0004" x="0" y="39" width="32" height="38" frameX="-12" frameY="-2" frameWidth="50" frameHeight="40"/>
|
||||
|
||||
<SubTexture name="confirm-hold0001" x="0" y="39" width="32" height="38" frameX="-12" frameY="-2" frameWidth="50" frameHeight="40"/>
|
||||
</TextureAtlas>
|
BIN
sprites/freeplay/icons/darnellpixel.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
11
sprites/freeplay/icons/darnellpixel.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<TextureAtlas imagePath="darnellpixel.png" width="110" height="71">
|
||||
<SubTexture name="idle0001" x="39" y="0" width="38" height="38" frameX="-5" frameY="-6" frameWidth="54" frameHeight="50"/>
|
||||
|
||||
<SubTexture name="confirm0001" x="39" y="0" width="38" height="38" frameX="-5" frameY="-6" frameWidth="54" frameHeight="50"/>
|
||||
<SubTexture name="confirm0002" x="0" y="0" width="39" height="36" frameX="-5" frameY="-10" frameWidth="54" frameHeight="50"/>
|
||||
<SubTexture name="confirm0003" x="77" y="0" width="33" height="39" frameX="-6" frameY="-3" frameWidth="54" frameHeight="50"/>
|
||||
<SubTexture name="confirm0004" x="0" y="36" width="35" height="35" frameX="-5" frameY="-6" frameWidth="54" frameHeight="50"/>
|
||||
|
||||
<SubTexture name="confirm-hold0001" x="0" y="36" width="35" height="35" frameX="-5" frameY="-6" frameWidth="54" frameHeight="50"/>
|
||||
</TextureAtlas>
|
75
sprites/freeplay/icons/gfpixel.json
Normal file
@ -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"
|
||||
}
|
||||
}
|
BIN
sprites/freeplay/icons/gfpixel.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
11
sprites/freeplay/icons/gfpixel.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<TextureAtlas imagePath="gfpixel.png" width="111" height="76">
|
||||
<SubTexture name="idle0001" x="0" y="39" width="38" height="37" frameX="-5" frameY="-8" frameWidth="50" frameHeight="50"/>
|
||||
|
||||
<SubTexture name="confirm0001" x="0" y="39" width="38" height="37" frameX="-5" frameY="-8" frameWidth="50" frameHeight="50"/>
|
||||
<SubTexture name="confirm0002" x="0" y="0" width="36" height="39" frameX="-6" frameY="-5" frameWidth="50" frameHeight="50"/>
|
||||
<SubTexture name="confirm0003" x="73" y="0" width="38" height="33" frameX="-6" frameY="-11" frameWidth="50" frameHeight="50"/>
|
||||
<SubTexture name="confirm0004" x="36" y="0" width="37" height="34" frameX="-6" frameY="-9" frameWidth="50" frameHeight="50"/>
|
||||
|
||||
<SubTexture name="confirm-hold0004" x="36" y="0" width="37" height="34" frameX="-6" frameY="-9" frameWidth="50" frameHeight="50"/>
|
||||
</TextureAtlas>
|
86
sprites/freeplay/icons/mommypixel.json
Normal file
@ -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"
|
||||
}
|
||||
}
|
BIN
sprites/freeplay/icons/mommypixel.png
Normal file
After Width: | Height: | Size: 5.1 KiB |
12
sprites/freeplay/icons/mommypixel.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<TextureAtlas imagePath="mommypixel.png" width="275" height="50">
|
||||
<SubTexture name="idle0001" x="232" y="1" width="42" height="44" frameX="-11" frameY="-9" frameWidth="60" frameHeight="60"/>
|
||||
|
||||
<SubTexture name="confirm0001" x="94" y="1" width="43" height="45" frameX="-12" frameY="-8" frameWidth="60" frameHeight="60"/>
|
||||
<SubTexture name="confirm0002" x="1" y="1" width="44" height="48" frameX="-8" frameY="-9" frameWidth="60" frameHeight="60"/>
|
||||
<SubTexture name="confirm0003" x="186" y="1" width="43" height="44" frameX="-9" frameY="-13" frameWidth="60" frameHeight="60"/>
|
||||
<SubTexture name="confirm0004" x="48" y="1" width="43" height="47" frameX="-9" frameY="-10" frameWidth="60" frameHeight="60"/>
|
||||
<SubTexture name="confirm0005" x="140" y="1" width="43" height="45" frameX="-9" frameY="-12" frameWidth="60" frameHeight="60"/>
|
||||
|
||||
<SubTexture name="confirm-hold0001" x="140" y="1" width="43" height="45" frameX="-9" frameY="-12" frameWidth="60" frameHeight="60"/>
|
||||
</TextureAtlas>
|
75
sprites/freeplay/icons/monsterpixel.json
Normal file
@ -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"
|
||||
}
|
||||
}
|
BIN
sprites/freeplay/icons/monsterpixel.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
11
sprites/freeplay/icons/monsterpixel.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<TextureAtlas imagePath="monsterpixel.png" width="123" height="49">
|
||||
<SubTexture name="idle0001" x="85" y="0" width="38" height="25" frameX="-5" frameY="-2" frameWidth="45" frameHeight="31"/>
|
||||
|
||||
<SubTexture name="confirm0001" x="85" y="0" width="38" height="25" frameX="-5" frameY="-2" frameWidth="45" frameHeight="31"/>
|
||||
<SubTexture name="confirm0002" x="0" y="0" width="45" height="22" frameX="-0" frameY="-6" frameWidth="45" frameHeight="31"/>
|
||||
<SubTexture name="confirm0003" x="45" y="0" width="40" height="31" frameX="-3" frameY="-0" frameWidth="45" frameHeight="31"/>
|
||||
<SubTexture name="confirm0004" x="0" y="22" width="40" height="27" frameX="-3" frameY="-2" frameWidth="45" frameHeight="31"/>
|
||||
|
||||
<SubTexture name="confirm-hold0001" x="0" y="22" width="40" height="27" frameX="-3" frameY="-2" frameWidth="45" frameHeight="31"/>
|
||||
</TextureAtlas>
|
86
sprites/freeplay/icons/parents-christmaspixel.json
Normal file
@ -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"
|
||||
}
|
||||
}
|
BIN
sprites/freeplay/icons/parents-christmaspixel.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
12
sprites/freeplay/icons/parents-christmaspixel.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<TextureAtlas imagePath="parents-christmaspixel.png" width="181" height="87">
|
||||
<SubTexture name="idle0001" x="0" y="43" width="57" height="44" frameX="-7" frameY="-3" frameWidth="72" frameHeight="50"/>
|
||||
|
||||
<SubTexture name="confirm0001" x="0" y="43" width="57" height="44" frameX="-7" frameY="-3" frameWidth="72" frameHeight="50"/>
|
||||
<SubTexture name="confirm0002" x="122" y="0" width="59" height="45" frameX="-4" frameY="-2" frameWidth="72" frameHeight="50"/>
|
||||
<SubTexture name="confirm0003" x="61" y="42" width="59" height="43" frameX="-6" frameY="-2" frameWidth="72" frameHeight="50"/>
|
||||
<SubTexture name="confirm0004" x="61" y="0" width="61" height="42" frameX="-5" frameY="-4" frameWidth="72" frameHeight="50"/>
|
||||
<SubTexture name="confirm0005" x="0" y="0" width="61" height="43" frameX="-5" frameY="-3" frameWidth="72" frameHeight="50"/>
|
||||
|
||||
<SubTexture name="confirm-hold0001" x="0" y="0" width="61" height="43" frameX="-5" frameY="-3" frameWidth="72" frameHeight="50"/>
|
||||
</TextureAtlas>
|
75
sprites/freeplay/icons/picopixel.json
Normal file
@ -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"
|
||||
}
|
||||
}
|
BIN
sprites/freeplay/icons/picopixel.png
Normal file
After Width: | Height: | Size: 878 B |
11
sprites/freeplay/icons/picopixel.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<TextureAtlas imagePath="picopixel.png" width="131" height="29">
|
||||
<SubTexture name="idle0001" x="0" y="0" width="33" height="29" frameX="-3" frameY="-2" frameWidth="36" frameHeight="32"/>
|
||||
|
||||
<SubTexture name="confirm0001" x="0" y="0" width="33" height="29" frameX="-3" frameY="-2" frameWidth="36" frameHeight="32"/>
|
||||
<SubTexture name="confirm0002" x="33" y="0" width="33" height="29" frameX="-2" frameY="-3" frameWidth="36" frameHeight="32"/>
|
||||
<SubTexture name="confirm0003" x="99" y="0" width="32" height="28" frameX="-4" frameY="-2" frameWidth="36" frameHeight="32"/>
|
||||
<SubTexture name="confirm0004" x="66" y="0" width="33" height="29" frameX="-3" frameY="-2" frameWidth="36" frameHeight="32"/>
|
||||
|
||||
<SubTexture name="confirm-hold0001" x="66" y="0" width="33" height="29" frameX="-3" frameY="-2" frameWidth="36" frameHeight="32"/>
|
||||
</TextureAtlas>
|
BIN
sprites/freeplay/icons/senpaipixel.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
11
sprites/freeplay/icons/senpaipixel.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<TextureAtlas imagePath="senpaipixel.png" width="144" height="35">
|
||||
<SubTexture name="idle0001" x="36" y="0" width="36" height="34" frameX="-10" frameY="-4" frameWidth="55" frameHeight="40"/>
|
||||
|
||||
<SubTexture name="confirm0001" x="36" y="0" width="36" height="34" frameX="-10" frameY="-4" frameWidth="55" frameHeight="40"/>
|
||||
<SubTexture name="confirm0002" x="0" y="0" width="36" height="35" frameX="-10" frameY="-3" frameWidth="55" frameHeight="40"/>
|
||||
<SubTexture name="confirm0003" x="108" y="0" width="36" height="33" frameX="-9" frameY="-4" frameWidth="55" frameHeight="40"/>
|
||||
<SubTexture name="confirm0004" x="72" y="0" width="36" height="34" frameX="-9" frameY="-4" frameWidth="55" frameHeight="40"/>
|
||||
|
||||
<SubTexture name="confirm-hold0001" x="72" y="0" width="36" height="34" frameX="-9" frameY="-4" frameWidth="55" frameHeight="40"/>
|
||||
</TextureAtlas>
|
BIN
sprites/freeplay/icons/spiritpixel.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
11
sprites/freeplay/icons/spiritpixel.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<TextureAtlas imagePath="spiritpixel.png" width="38" height="149">
|
||||
<SubTexture name="idle0001" x="0" y="39" width="37" height="38" frameX="-7" frameY="-1" frameWidth="45" frameHeight="40"/>
|
||||
|
||||
<SubTexture name="confirm0001" x="0" y="39" width="37" height="38" frameX="-7" frameY="-1" frameWidth="45" frameHeight="40"/>
|
||||
<SubTexture name="confirm0002" x="0" y="115" width="36" height="34" frameX="-8" frameY="-6" frameWidth="45" frameHeight="40"/>
|
||||
<SubTexture name="confirm0003" x="0" y="0" width="38" height="39" frameX="-4" frameY="-1" frameWidth="45" frameHeight="40"/>
|
||||
<SubTexture name="confirm0004" x="0" y="77" width="36" height="38" frameX="-6" frameY="-2" frameWidth="45" frameHeight="40"/>
|
||||
|
||||
<SubTexture name="confirm-hold0001" x="0" y="77" width="36" height="38" frameX="-6" frameY="-2" frameWidth="45" frameHeight="40"/>
|
||||
</TextureAtlas>
|
75
sprites/freeplay/icons/spookypixel.json
Normal file
@ -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"
|
||||
}
|
||||
}
|
BIN
sprites/freeplay/icons/spookypixel.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
11
sprites/freeplay/icons/spookypixel.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<TextureAtlas imagePath="spookypixel.png" width="127" height="66">
|
||||
<SubTexture name="idle0001" x="43" y="33" width="40" height="33" frameX="-7" frameY="-3" frameWidth="50" frameHeight="36"/>
|
||||
|
||||
<SubTexture name="confirm0001" x="43" y="33" width="40" height="33" frameX="-7" frameY="-3" frameWidth="50" frameHeight="36"/>
|
||||
<SubTexture name="confirm0002" x="0" y="0" width="43" height="34" frameX="-7" frameY="-1" frameWidth="50" frameHeight="36"/>
|
||||
<SubTexture name="confirm0003" x="43" y="0" width="43" height="33" frameX="-4" frameY="-3" frameWidth="50" frameHeight="36"/>
|
||||
<SubTexture name="confirm0004" x="86" y="0" width="41" height="34" frameX="-6" frameY="-1" frameWidth="50" frameHeight="36"/>
|
||||
|
||||
<SubTexture name="confirm-hold0001" x="86" y="0" width="41" height="34" frameX="-6" frameY="-1" frameWidth="50" frameHeight="36"/>
|
||||
</TextureAtlas>
|
75
sprites/freeplay/icons/tankmanpixel.json
Normal file
@ -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"
|
||||
}
|
||||
}
|
BIN
sprites/freeplay/icons/tankmanpixel.png
Normal file
After Width: | Height: | Size: 873 B |
11
sprites/freeplay/icons/tankmanpixel.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<TextureAtlas imagePath="tankmanpixel.png" width="135" height="27">
|
||||
<SubTexture name="idle0001" x="103" y="0" width="32" height="26" frameX="-6" frameY="-2" frameWidth="40" frameHeight="28"/>
|
||||
|
||||
<SubTexture name="confirm0001" x="103" y="0" width="32" height="26" frameX="-6" frameY="-2" frameWidth="40" frameHeight="28"/>
|
||||
<SubTexture name="confirm0002" x="69" y="0" width="34" height="24" frameX="-6" frameY="-4" frameWidth="40" frameHeight="28"/>
|
||||
<SubTexture name="confirm0003" x="0" y="0" width="35" height="27" frameX="-5" frameY="-0" frameWidth="40" frameHeight="28"/>
|
||||
<SubTexture name="confirm0004" x="35" y="0" width="34" height="26" frameX="-6" frameY="-1" frameWidth="40" frameHeight="28"/>
|
||||
|
||||
<SubTexture name="confirm-hold0001" x="35" y="0" width="34" height="26" frameX="-6" frameY="-1" frameWidth="40" frameHeight="28"/>
|
||||
</TextureAtlas>
|
435
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
|
||||
end
|
||||
|
@ -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
|
||||
|
||||
|
@ -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))
|
||||
|
||||
|