Icons for songs, funny thing for satin-panties, score saving (NOT FINISHED)

This commit is contained in:
entar 2025-06-19 22:33:05 +07:00
parent 4e4c52d506
commit 78be9e2295
43 changed files with 1482 additions and 174 deletions

View File

@ -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"
}
}

View File

@ -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

View File

@ -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"
}
}

View 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"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View 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"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

View 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"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View 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>

View 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"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View 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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View 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>

View 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"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View 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>

View 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"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

View 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>

View 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"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View 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>

View 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"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View 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>

View 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"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

View 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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View 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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View 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>

View 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"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View 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>

View 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"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 873 B

View 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>

View File

@ -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

View File

@ -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

View File

@ -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))