diff --git a/src/love/images/png/menu/FNF_main_menu_assets.png b/src/love/images/png/menu/FNF_main_menu_assets.png
new file mode 100644
index 00000000..4399ed2d
Binary files /dev/null and b/src/love/images/png/menu/FNF_main_menu_assets.png differ
diff --git a/src/love/images/png/menu/menuBG.png b/src/love/images/png/menu/menuBG.png
new file mode 100644
index 00000000..6586348a
Binary files /dev/null and b/src/love/images/png/menu/menuBG.png differ
diff --git a/src/love/images/png/menu/storymenu/campaign_menu_UI_assets.png b/src/love/images/png/menu/storymenu/campaign_menu_UI_assets.png
new file mode 100644
index 00000000..87022a9e
Binary files /dev/null and b/src/love/images/png/menu/storymenu/campaign_menu_UI_assets.png differ
diff --git a/src/love/images/png/menu/storymenu/campaign_menu_UI_characters.png b/src/love/images/png/menu/storymenu/campaign_menu_UI_characters.png
new file mode 100644
index 00000000..b15372d1
Binary files /dev/null and b/src/love/images/png/menu/storymenu/campaign_menu_UI_characters.png differ
diff --git a/src/love/images/png/menu/storymenu/week0.png b/src/love/images/png/menu/storymenu/week0.png
new file mode 100644
index 00000000..4958689e
Binary files /dev/null and b/src/love/images/png/menu/storymenu/week0.png differ
diff --git a/src/love/images/png/menu/storymenu/week1.png b/src/love/images/png/menu/storymenu/week1.png
new file mode 100644
index 00000000..311bece0
Binary files /dev/null and b/src/love/images/png/menu/storymenu/week1.png differ
diff --git a/src/love/images/png/menu/storymenu/week2.png b/src/love/images/png/menu/storymenu/week2.png
new file mode 100644
index 00000000..394c8819
Binary files /dev/null and b/src/love/images/png/menu/storymenu/week2.png differ
diff --git a/src/love/images/png/menu/storymenu/week3.png b/src/love/images/png/menu/storymenu/week3.png
new file mode 100644
index 00000000..c259746e
Binary files /dev/null and b/src/love/images/png/menu/storymenu/week3.png differ
diff --git a/src/love/images/png/menu/storymenu/week4.png b/src/love/images/png/menu/storymenu/week4.png
new file mode 100644
index 00000000..2fa5c843
Binary files /dev/null and b/src/love/images/png/menu/storymenu/week4.png differ
diff --git a/src/love/images/png/menu/storymenu/week5.png b/src/love/images/png/menu/storymenu/week5.png
new file mode 100644
index 00000000..ee4d1b9a
Binary files /dev/null and b/src/love/images/png/menu/storymenu/week5.png differ
diff --git a/src/love/images/png/menu/storymenu/week6.png b/src/love/images/png/menu/storymenu/week6.png
new file mode 100644
index 00000000..8a45fb52
Binary files /dev/null and b/src/love/images/png/menu/storymenu/week6.png differ
diff --git a/src/love/images/png/menu/storymenu/weekMenu.png b/src/love/images/png/menu/storymenu/weekMenu.png
new file mode 100644
index 00000000..c5eaff2a
Binary files /dev/null and b/src/love/images/png/menu/storymenu/weekMenu.png differ
diff --git a/src/love/images/png/menu/titleEnter.png b/src/love/images/png/menu/titleEnter.png
new file mode 100644
index 00000000..a81270b3
Binary files /dev/null and b/src/love/images/png/menu/titleEnter.png differ
diff --git a/src/love/images/png/pixel/countdown.png b/src/love/images/png/pixel/countdown.png
new file mode 100644
index 00000000..64b4d276
Binary files /dev/null and b/src/love/images/png/pixel/countdown.png differ
diff --git a/src/love/main.lua b/src/love/main.lua
index c78d1854..30555ef1 100644
--- a/src/love/main.lua
+++ b/src/love/main.lua
@@ -39,7 +39,10 @@ function love.load()
-- Load states
clickStart = require "states.click-start"
debugMenu = require "states.debug-menu"
- menu = require "states.menu"
+ titleMenu = require "states.menu.titleMenu"
+ menuWeek = require "states.menu.menuWeek"
+ menuSelect = require "states.menu.menuSelect"
+ menuFreeplay = require "states.menu.menuFreeplay"
weeks = require "states.weeks"
weeksPixel = require "states.weeks-pixel"
@@ -92,7 +95,7 @@ function love.load()
if curOS == "Web" then
Gamestate.switch(clickStart)
else
- Gamestate.switch(menu)
+ Gamestate.switch(titleMenu)
end
end
diff --git a/src/love/sprites/menu/menuButtons.lua b/src/love/sprites/menu/menuButtons.lua
new file mode 100644
index 00000000..3892650c
--- /dev/null
+++ b/src/love/sprites/menu/menuButtons.lua
@@ -0,0 +1,86 @@
+--[[----------------------------------------------------------------------------
+This file is part of Friday Night Funkin' Rewritten
+
+Copyright (C) 2021 HTV04
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+------------------------------------------------------------------------------]]
+
+return graphics.newSprite(
+ love.graphics.newImage(graphics.imagePath("menu/FNF_main_menu_assets")),
+ -- Automatically generated from FNF_main_menu_assets.xml
+ {
+ {x = 0, y = 0, width = 444, height = 117, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 1: donate basic0000
+ {x = 0, y = 0, width = 444, height = 117, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 2: donate basic0001
+ {x = 0, y = 0, width = 444, height = 117, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 3: donate basic0002
+ {x = 454, y = 0, width = 444, height = 117, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 4: donate basic0003
+ {x = 454, y = 0, width = 444, height = 117, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 5: donate basic0004
+ {x = 454, y = 0, width = 444, height = 117, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 6: donate basic0005
+ {x = 908, y = 0, width = 444, height = 117, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 7: donate basic0006
+ {x = 908, y = 0, width = 444, height = 117, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 8: donate basic0007
+ {x = 908, y = 0, width = 444, height = 117, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 9: donate basic0008
+ {x = 1362, y = 0, width = 590, height = 157, offsetX = 0, offsetY = -2, offsetWidth = 590, offsetHeight = 159}, -- 10: donate white0000
+ {x = 0, y = 167, width = 587, height = 154, offsetX = -1, offsetY = -5, offsetWidth = 590, offsetHeight = 159}, -- 11: donate white0001
+ {x = 597, y = 167, width = 585, height = 155, offsetX = -3, offsetY = 0, offsetWidth = 590, offsetHeight = 159}, -- 12: donate white0002
+ {x = 1192, y = 167, width = 484, height = 122, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 13: freeplay basic0000
+ {x = 1192, y = 167, width = 484, height = 122, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 14: freeplay basic0001
+ {x = 1192, y = 167, width = 484, height = 122, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 15: freeplay basic0002
+ {x = 0, y = 332, width = 484, height = 122, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 16: freeplay basic0003
+ {x = 0, y = 332, width = 484, height = 122, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 17: freeplay basic0004
+ {x = 0, y = 332, width = 484, height = 122, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 18: freeplay basic0005
+ {x = 494, y = 332, width = 484, height = 122, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 19: freeplay basic0006
+ {x = 494, y = 332, width = 484, height = 122, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 20: freeplay basic0007
+ {x = 494, y = 332, width = 484, height = 122, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 21: freeplay basic0008
+ {x = 988, y = 332, width = 627, height = 169, offsetX = 0, offsetY = 0, offsetWidth = 635, offsetHeight = 174}, -- 22: freeplay white0000
+ {x = 0, y = 511, width = 632, height = 170, offsetX = -3, offsetY = -1, offsetWidth = 635, offsetHeight = 174}, -- 23: freeplay white0001
+ {x = 642, y = 511, width = 629, height = 173, offsetX = -4, offsetY = -1, offsetWidth = 635, offsetHeight = 174}, -- 24: freeplay white0002
+ {x = 1281, y = 511, width = 487, height = 111, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 25: options basic0000
+ {x = 1281, y = 511, width = 487, height = 111, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 26: options basic0001
+ {x = 1281, y = 511, width = 487, height = 111, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 27: options basic0002
+ {x = 0, y = 694, width = 487, height = 111, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 28: options basic0003
+ {x = 0, y = 694, width = 487, height = 111, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 29: options basic0004
+ {x = 0, y = 694, width = 487, height = 111, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 30: options basic0005
+ {x = 497, y = 694, width = 487, height = 111, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 31: options basic0006
+ {x = 497, y = 694, width = 487, height = 111, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 32: options basic0007
+ {x = 497, y = 694, width = 487, height = 111, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 33: options basic0008
+ {x = 994, y = 694, width = 606, height = 155, offsetX = -2, offsetY = -1, offsetWidth = 610, offsetHeight = 163}, -- 34: options white0000
+ {x = 0, y = 859, width = 607, height = 158, offsetX = -3, offsetY = -1, offsetWidth = 610, offsetHeight = 163}, -- 35: options white0001
+ {x = 617, y = 859, width = 610, height = 163, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 36: options white0002
+ {x = 1237, y = 859, width = 615, height = 122, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 37: story mode basic0000
+ {x = 1237, y = 859, width = 615, height = 122, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 38: story mode basic0001
+ {x = 1237, y = 859, width = 615, height = 122, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 39: story mode basic0002
+ {x = 0, y = 1032, width = 615, height = 122, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 40: story mode basic0003
+ {x = 0, y = 1032, width = 615, height = 122, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 41: story mode basic0004
+ {x = 0, y = 1032, width = 615, height = 122, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 42: story mode basic0005
+ {x = 625, y = 1032, width = 615, height = 122, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 43: story mode basic0006
+ {x = 625, y = 1032, width = 615, height = 122, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 44: story mode basic0007
+ {x = 625, y = 1032, width = 615, height = 122, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 45: story mode basic0008
+ {x = 1250, y = 1032, width = 796, height = 173, offsetX = 0, offsetY = -3, offsetWidth = 796, offsetHeight = 181}, -- 46: story mode white0000
+ {x = 0, y = 1215, width = 794, height = 174, offsetX = -2, offsetY = -2, offsetWidth = 796, offsetHeight = 181}, -- 47: story mode white0001
+ {x = 804, y = 1215, width = 794, height = 181, offsetX = 0, offsetY = 0, offsetWidth = 796, offsetHeight = 181} -- 48: story mode white0002
+ },
+ {
+ ["donate"] = {start = 1, stop = 9, speed = 24, offsetX = 0, offsetY = 0}, -- you can change this to what you want
+ ["donate hover"] = {start = 10, stop = 12, speed = 24, offsetX = 0, offsetY = 0}, -- you can change this to what you want
+ ["freeplay"] = {start = 13, stop = 21, speed = 24, offsetX = 0, offsetY = 0},
+ ["freeplay hover"] = {start = 22, stop = 24, speed = 24, offsetX = 0, offsetY = 0},
+ ["options"] = {start = 25, stop = 33, speed = 24, offsetX = 0, offsetY = 0},
+ ["options hover"] = {start = 34, stop = 36, speed = 24, offsetX = 0, offsetY = 0},
+ ["story"] = {start = 37, stop = 45, speed = 24, offsetX = 0, offsetY = 0},
+ ["story hover"] = {start = 46, stop = 48, speed = 24, offsetX = 0, offsetY = 0}
+ },
+ "story",
+ true
+
+)
\ No newline at end of file
diff --git a/src/love/sprites/menu/storymenu/difficulty.lua b/src/love/sprites/menu/storymenu/difficulty.lua
new file mode 100644
index 00000000..569c5c68
--- /dev/null
+++ b/src/love/sprites/menu/storymenu/difficulty.lua
@@ -0,0 +1,45 @@
+--[[----------------------------------------------------------------------------
+This file is part of Friday Night Funkin' Rewritten
+
+Copyright (C) 2021 HTV04
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+------------------------------------------------------------------------------]]
+
+return graphics.newSprite(
+ love.graphics.newImage(graphics.imagePath("menu/storymenu/campaign_menu_UI_assets")),
+ -- Automatically generated from campaign_menu_UI_assets.xml
+ {
+ {x = 0, y = 0, width = 196, height = 65, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 1: EASY0000
+ {x = 206, y = 0, width = 211, height = 67, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 2: HARD0000
+ {x = 427, y = 0, width = 308, height = 67, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 3: NORMAL0000
+ {x = 738, y = 374, width = 48, height = 85, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 4: arrow left0000
+ {x = 796, y = 374, width = 42, height = 75, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 5: arrow push left0000
+ {x = 848, y = 374, width = 41, height = 74, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 6: arrow push right0000
+ {x = 899, y = 374, width = 47, height = 85, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 7: arrow right0000
+ {x = 956, y = 374, width = 67, height = 93, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 8: lock0000
+ },
+ {
+ ["easy"] = {start = 1, stop = 1, speed = 24, offsetX = 0, offsetY = 0},
+ ["normal"] = {start = 3, stop = 3, speed = 24, offsetX = 0, offsetY = 0},
+ ["hard"] = {start = 2, stop = 2, speed = 24, offsetX = 0, offsetY = 0},
+ ["arrow left"] = {start = 4, stop = 4, speed = 24, offsetX = 0, offsetY = 0},
+ ["arrow left confirm"] = {start = 5, stop = 5, speed = 24, offsetX = 0, offsetY = 0},
+ ["arrow right"] = {start = 7, stop = 7, speed = 24, offsetX = 0, offsetY = 0},
+ ["arrow right confirm"] = {start = 6, stop = 6, speed = 24, offsetX = 0, offsetY = 0},
+ ["lock"] = {start = 8, stop = 8, speed = 24, offsetX = 0, offsetY = 0}
+ },
+ "normal",
+ true
+)
\ No newline at end of file
diff --git a/src/love/sprites/menu/storymenu/idlelines.lua b/src/love/sprites/menu/storymenu/idlelines.lua
new file mode 100644
index 00000000..037169cf
--- /dev/null
+++ b/src/love/sprites/menu/storymenu/idlelines.lua
@@ -0,0 +1,197 @@
+--[[----------------------------------------------------------------------------
+This file is part of Friday Night Funkin' Rewritten
+
+Copyright (C) 2021 HTV04
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+------------------------------------------------------------------------------]]
+
+return graphics.newSprite(
+ love.graphics.newImage(graphics.imagePath("menu/storymenu/campaign_menu_UI_characters")),
+ -- Automatically generated from campaign_menu_UI_characters.xml
+ {
+ {x = 0, y = 0, width = 395, height = 416, offsetX = 0, offsetY = 0, offsetWidth = 415, offsetHeight = 418}, -- 1: BF HEY!!0000
+ {x = 0, y = 0, width = 395, height = 416, offsetX = 0, offsetY = 0, offsetWidth = 415, offsetHeight = 418}, -- 2: BF HEY!!0001
+ {x = 405, y = 0, width = 413, height = 410, offsetX = -1, offsetY = -8, offsetWidth = 415, offsetHeight = 418}, -- 3: BF HEY!!0002
+ {x = 405, y = 0, width = 413, height = 410, offsetX = -1, offsetY = -8, offsetWidth = 415, offsetHeight = 418}, -- 4: BF HEY!!0003
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 5: BF HEY!!0004
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 6: BF HEY!!0005
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 7: BF HEY!!0006
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 8: BF HEY!!0007
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 9: BF HEY!!0008
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 10: BF HEY!!0009
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 11: BF HEY!!0010
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 12: BF HEY!!0011
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 13: BF HEY!!0012
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 14: BF HEY!!0013
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 15: BF HEY!!0014
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 16: BF HEY!!0015
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 17: BF HEY!!0016
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 18: BF HEY!!0017
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 19: BF HEY!!0018
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 20: BF HEY!!0019
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 21: BF HEY!!0020
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 22: BF HEY!!0021
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 23: BF HEY!!0022
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 24: BF HEY!!0023
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 25: BF HEY!!0024
+ {x = 828, y = 0, width = 414, height = 412, offsetX = -1, offsetY = -6, offsetWidth = 415, offsetHeight = 418}, -- 26: BF HEY!!0025
+ {x = 1252, y = 0, width = 406, height = 392, offsetX = -1, offsetY = -20, offsetWidth = 411, offsetHeight = 412}, -- 27: BF idle dance white0000
+ {x = 1252, y = 0, width = 406, height = 392, offsetX = -1, offsetY = -20, offsetWidth = 411, offsetHeight = 412}, -- 28: BF idle dance white0001
+ {x = 1668, y = 0, width = 408, height = 393, offsetX = 0, offsetY = -19, offsetWidth = 411, offsetHeight = 412}, -- 29: BF idle dance white0002
+ {x = 1668, y = 0, width = 408, height = 393, offsetX = 0, offsetY = -19, offsetWidth = 411, offsetHeight = 412}, -- 30: BF idle dance white0003
+ {x = 2086, y = 0, width = 405, height = 398, offsetX = -3, offsetY = -14, offsetWidth = 411, offsetHeight = 412}, -- 31: BF idle dance white0004
+ {x = 2086, y = 0, width = 405, height = 398, offsetX = -3, offsetY = -14, offsetWidth = 411, offsetHeight = 412}, -- 32: BF idle dance white0005
+ {x = 2501, y = 0, width = 410, height = 411, offsetX = -1, offsetY = -1, offsetWidth = 411, offsetHeight = 412}, -- 33: BF idle dance white0006
+ {x = 2501, y = 0, width = 410, height = 411, offsetX = -1, offsetY = -1, offsetWidth = 411, offsetHeight = 412}, -- 34: BF idle dance white0007
+ {x = 2921, y = 0, width = 408, height = 412, offsetX = -2, offsetY = 0, offsetWidth = 411, offsetHeight = 412}, -- 35: BF idle dance white0008
+ {x = 2921, y = 0, width = 408, height = 412, offsetX = -2, offsetY = 0, offsetWidth = 411, offsetHeight = 412}, -- 36: BF idle dance white0009
+ {x = 2921, y = 0, width = 408, height = 412, offsetX = -2, offsetY = 0, offsetWidth = 411, offsetHeight = 412}, -- 37: BF idle dance white0010
+ {x = 2921, y = 0, width = 408, height = 412, offsetX = -2, offsetY = 0, offsetWidth = 411, offsetHeight = 412}, -- 38: BF idle dance white0011
+ {x = 2921, y = 0, width = 408, height = 412, offsetX = -2, offsetY = 0, offsetWidth = 411, offsetHeight = 412}, -- 39: BF idle dance white0012
+ {x = 2921, y = 0, width = 408, height = 412, offsetX = -2, offsetY = 0, offsetWidth = 411, offsetHeight = 412}, -- 40: BF idle dance white0013
+ {x = 3339, y = 0, width = 429, height = 759, offsetX = 0, offsetY = -8, offsetWidth = 429, offsetHeight = 767}, -- 41: Dad idle dance BLACK LINE0000
+ {x = 3339, y = 0, width = 429, height = 759, offsetX = 0, offsetY = -8, offsetWidth = 429, offsetHeight = 767}, -- 42: Dad idle dance BLACK LINE0001
+ {x = 3778, y = 0, width = 424, height = 757, offsetX = -2, offsetY = -10, offsetWidth = 429, offsetHeight = 767}, -- 43: Dad idle dance BLACK LINE0002
+ {x = 3778, y = 0, width = 424, height = 757, offsetX = -2, offsetY = -10, offsetWidth = 429, offsetHeight = 767}, -- 44: Dad idle dance BLACK LINE0003
+ {x = 4212, y = 0, width = 423, height = 759, offsetX = -3, offsetY = -8, offsetWidth = 429, offsetHeight = 767}, -- 45: Dad idle dance BLACK LINE0004
+ {x = 4212, y = 0, width = 423, height = 759, offsetX = -3, offsetY = -8, offsetWidth = 429, offsetHeight = 767}, -- 46: Dad idle dance BLACK LINE0005
+ {x = 4645, y = 0, width = 419, height = 766, offsetX = -5, offsetY = -1, offsetWidth = 429, offsetHeight = 767}, -- 47: Dad idle dance BLACK LINE0006
+ {x = 4645, y = 0, width = 419, height = 766, offsetX = -5, offsetY = -1, offsetWidth = 429, offsetHeight = 767}, -- 48: Dad idle dance BLACK LINE0007
+ {x = 5074, y = 0, width = 419, height = 767, offsetX = -6, offsetY = 0, offsetWidth = 429, offsetHeight = 767}, -- 49: Dad idle dance BLACK LINE0008
+ {x = 5074, y = 0, width = 419, height = 767, offsetX = -6, offsetY = 0, offsetWidth = 429, offsetHeight = 767}, -- 50: Dad idle dance BLACK LINE0009
+ {x = 5503, y = 0, width = 419, height = 767, offsetX = -6, offsetY = 0, offsetWidth = 429, offsetHeight = 767}, -- 51: Dad idle dance BLACK LINE0010
+ {x = 5503, y = 0, width = 419, height = 767, offsetX = -6, offsetY = 0, offsetWidth = 429, offsetHeight = 767}, -- 52: Dad idle dance BLACK LINE0011
+ {x = 5503, y = 0, width = 419, height = 767, offsetX = -6, offsetY = 0, offsetWidth = 429, offsetHeight = 767}, -- 53: Dad idle dance BLACK LINE0012
+ {x = 5503, y = 0, width = 419, height = 767, offsetX = -6, offsetY = 0, offsetWidth = 429, offsetHeight = 767}, -- 54: Dad idle dance BLACK LINE0013
+ {x = 5932, y = 0, width = 699, height = 634, offsetX = -2, offsetY = -14, offsetWidth = 703, offsetHeight = 648}, -- 55: GF Dancing Beat WHITE0000
+ {x = 6641, y = 0, width = 703, height = 634, offsetX = 0, offsetY = -14, offsetWidth = 703, offsetHeight = 648}, -- 56: GF Dancing Beat WHITE0001
+ {x = 7354, y = 0, width = 703, height = 632, offsetX = 0, offsetY = -16, offsetWidth = 703, offsetHeight = 648}, -- 57: GF Dancing Beat WHITE0002
+ {x = 0, y = 777, width = 699, height = 632, offsetX = -2, offsetY = -16, offsetWidth = 703, offsetHeight = 648}, -- 58: GF Dancing Beat WHITE0003
+ {x = 709, y = 777, width = 699, height = 635, offsetX = -2, offsetY = -13, offsetWidth = 703, offsetHeight = 648}, -- 59: GF Dancing Beat WHITE0004
+ {x = 1418, y = 777, width = 699, height = 635, offsetX = -2, offsetY = -13, offsetWidth = 703, offsetHeight = 648}, -- 60: GF Dancing Beat WHITE0005
+ {x = 2127, y = 777, width = 699, height = 637, offsetX = -2, offsetY = -11, offsetWidth = 703, offsetHeight = 648}, -- 61: GF Dancing Beat WHITE0006
+ {x = 2836, y = 777, width = 699, height = 648, offsetX = -2, offsetY = 0, offsetWidth = 703, offsetHeight = 648}, -- 62: GF Dancing Beat WHITE0007
+ {x = 2836, y = 777, width = 699, height = 648, offsetX = -2, offsetY = 0, offsetWidth = 703, offsetHeight = 648}, -- 63: GF Dancing Beat WHITE0008
+ {x = 2836, y = 777, width = 699, height = 648, offsetX = -2, offsetY = 0, offsetWidth = 703, offsetHeight = 648}, -- 64: GF Dancing Beat WHITE0009
+ {x = 3545, y = 777, width = 699, height = 648, offsetX = -2, offsetY = 0, offsetWidth = 703, offsetHeight = 648}, -- 65: GF Dancing Beat WHITE0010
+ {x = 3545, y = 777, width = 699, height = 648, offsetX = -2, offsetY = 0, offsetWidth = 703, offsetHeight = 648}, -- 66: GF Dancing Beat WHITE0011
+ {x = 3545, y = 777, width = 699, height = 648, offsetX = -2, offsetY = 0, offsetWidth = 703, offsetHeight = 648}, -- 67: GF Dancing Beat WHITE0012
+ {x = 4254, y = 777, width = 699, height = 648, offsetX = -2, offsetY = 0, offsetWidth = 703, offsetHeight = 648}, -- 68: GF Dancing Beat WHITE0013
+ {x = 4254, y = 777, width = 699, height = 648, offsetX = -2, offsetY = 0, offsetWidth = 703, offsetHeight = 648}, -- 69: GF Dancing Beat WHITE0014
+ {x = 4963, y = 777, width = 699, height = 636, offsetX = -2, offsetY = -12, offsetWidth = 703, offsetHeight = 648}, -- 70: GF Dancing Beat WHITE0015
+ {x = 5672, y = 777, width = 703, height = 636, offsetX = 0, offsetY = -12, offsetWidth = 703, offsetHeight = 648}, -- 71: GF Dancing Beat WHITE0016
+ {x = 6385, y = 777, width = 703, height = 636, offsetX = 0, offsetY = -12, offsetWidth = 703, offsetHeight = 648}, -- 72: GF Dancing Beat WHITE0017
+ {x = 7098, y = 777, width = 699, height = 636, offsetX = -2, offsetY = -12, offsetWidth = 703, offsetHeight = 648}, -- 73: GF Dancing Beat WHITE0018
+ {x = 0, y = 1435, width = 699, height = 637, offsetX = -2, offsetY = -11, offsetWidth = 703, offsetHeight = 648}, -- 74: GF Dancing Beat WHITE0019
+ {x = 709, y = 1435, width = 699, height = 637, offsetX = -2, offsetY = -11, offsetWidth = 703, offsetHeight = 648}, -- 75: GF Dancing Beat WHITE0020
+ {x = 1418, y = 1435, width = 699, height = 638, offsetX = -2, offsetY = -10, offsetWidth = 703, offsetHeight = 648}, -- 76: GF Dancing Beat WHITE0021
+ {x = 2127, y = 1435, width = 699, height = 643, offsetX = -2, offsetY = -5, offsetWidth = 703, offsetHeight = 648}, -- 77: GF Dancing Beat WHITE0022
+ {x = 2127, y = 1435, width = 699, height = 643, offsetX = -2, offsetY = -5, offsetWidth = 703, offsetHeight = 648}, -- 78: GF Dancing Beat WHITE0023
+ {x = 2127, y = 1435, width = 699, height = 643, offsetX = -2, offsetY = -5, offsetWidth = 703, offsetHeight = 648}, -- 79: GF Dancing Beat WHITE0024
+ {x = 2836, y = 1435, width = 699, height = 642, offsetX = -2, offsetY = -6, offsetWidth = 703, offsetHeight = 648}, -- 80: GF Dancing Beat WHITE0025
+ {x = 2836, y = 1435, width = 699, height = 642, offsetX = -2, offsetY = -6, offsetWidth = 703, offsetHeight = 648}, -- 81: GF Dancing Beat WHITE0026
+ {x = 2836, y = 1435, width = 699, height = 642, offsetX = -2, offsetY = -6, offsetWidth = 703, offsetHeight = 648}, -- 82: GF Dancing Beat WHITE0027
+ {x = 3545, y = 1435, width = 699, height = 642, offsetX = -2, offsetY = -6, offsetWidth = 703, offsetHeight = 648}, -- 83: GF Dancing Beat WHITE0028
+ {x = 3545, y = 1435, width = 699, height = 642, offsetX = -2, offsetY = -6, offsetWidth = 703, offsetHeight = 648}, -- 84: GF Dancing Beat WHITE0029
+ {x = 4254, y = 1435, width = 386, height = 826, offsetX = -4, offsetY = -2, offsetWidth = 390, offsetHeight = 829}, -- 85: Mom Idle BLACK LINES0000
+ {x = 4254, y = 1435, width = 386, height = 826, offsetX = -4, offsetY = -2, offsetWidth = 390, offsetHeight = 829}, -- 86: Mom Idle BLACK LINES0001
+ {x = 4650, y = 1435, width = 386, height = 815, offsetX = -4, offsetY = -14, offsetWidth = 390, offsetHeight = 829}, -- 87: Mom Idle BLACK LINES0002
+ {x = 4650, y = 1435, width = 386, height = 815, offsetX = -4, offsetY = -14, offsetWidth = 390, offsetHeight = 829}, -- 88: Mom Idle BLACK LINES0003
+ {x = 5046, y = 1435, width = 386, height = 822, offsetX = -1, offsetY = -7, offsetWidth = 390, offsetHeight = 829}, -- 89: Mom Idle BLACK LINES0004
+ {x = 5046, y = 1435, width = 386, height = 822, offsetX = -1, offsetY = -7, offsetWidth = 390, offsetHeight = 829}, -- 90: Mom Idle BLACK LINES0005
+ {x = 5442, y = 1435, width = 386, height = 824, offsetX = 0, offsetY = -5, offsetWidth = 390, offsetHeight = 829}, -- 91: Mom Idle BLACK LINES0006
+ {x = 5442, y = 1435, width = 386, height = 824, offsetX = 0, offsetY = -5, offsetWidth = 390, offsetHeight = 829}, -- 92: Mom Idle BLACK LINES0007
+ {x = 5838, y = 1435, width = 386, height = 828, offsetX = 0, offsetY = -1, offsetWidth = 390, offsetHeight = 829}, -- 93: Mom Idle BLACK LINES0008
+ {x = 5838, y = 1435, width = 386, height = 828, offsetX = 0, offsetY = -1, offsetWidth = 390, offsetHeight = 829}, -- 94: Mom Idle BLACK LINES0009
+ {x = 6234, y = 1435, width = 386, height = 829, offsetX = 0, offsetY = 0, offsetWidth = 390, offsetHeight = 829}, -- 95: Mom Idle BLACK LINES0010
+ {x = 6234, y = 1435, width = 386, height = 829, offsetX = 0, offsetY = 0, offsetWidth = 390, offsetHeight = 829}, -- 96: Mom Idle BLACK LINES0011
+ {x = 6630, y = 1435, width = 386, height = 829, offsetX = 0, offsetY = 0, offsetWidth = 390, offsetHeight = 829}, -- 97: Mom Idle BLACK LINES0012
+ {x = 6630, y = 1435, width = 386, height = 829, offsetX = 0, offsetY = 0, offsetWidth = 390, offsetHeight = 829}, -- 98: Mom Idle BLACK LINES0013
+ {x = 7026, y = 1435, width = 873, height = 777, offsetX = -6, offsetY = -5, offsetWidth = 884, offsetHeight = 782}, -- 99: Parent Christmas Idle Black Lines0000
+ {x = 7026, y = 1435, width = 873, height = 777, offsetX = -6, offsetY = -5, offsetWidth = 884, offsetHeight = 782}, -- 100: Parent Christmas Idle Black Lines0001
+ {x = 0, y = 2274, width = 876, height = 760, offsetX = 0, offsetY = -22, offsetWidth = 884, offsetHeight = 782}, -- 101: Parent Christmas Idle Black Lines0002
+ {x = 0, y = 2274, width = 876, height = 760, offsetX = 0, offsetY = -22, offsetWidth = 884, offsetHeight = 782}, -- 102: Parent Christmas Idle Black Lines0003
+ {x = 886, y = 2274, width = 877, height = 766, offsetX = -5, offsetY = -16, offsetWidth = 884, offsetHeight = 782}, -- 103: Parent Christmas Idle Black Lines0004
+ {x = 886, y = 2274, width = 877, height = 766, offsetX = -5, offsetY = -16, offsetWidth = 884, offsetHeight = 782}, -- 104: Parent Christmas Idle Black Lines0005
+ {x = 1773, y = 2274, width = 866, height = 777, offsetX = -18, offsetY = -5, offsetWidth = 884, offsetHeight = 782}, -- 105: Parent Christmas Idle Black Lines0006
+ {x = 1773, y = 2274, width = 866, height = 777, offsetX = -18, offsetY = -5, offsetWidth = 884, offsetHeight = 782}, -- 106: Parent Christmas Idle Black Lines0007
+ {x = 2649, y = 2274, width = 865, height = 781, offsetX = -19, offsetY = -1, offsetWidth = 884, offsetHeight = 782}, -- 107: Parent Christmas Idle Black Lines0008
+ {x = 2649, y = 2274, width = 865, height = 781, offsetX = -19, offsetY = -1, offsetWidth = 884, offsetHeight = 782}, -- 108: Parent Christmas Idle Black Lines0009
+ {x = 3524, y = 2274, width = 865, height = 782, offsetX = -19, offsetY = 0, offsetWidth = 884, offsetHeight = 782}, -- 109: Parent Christmas Idle Black Lines0010
+ {x = 3524, y = 2274, width = 865, height = 782, offsetX = -19, offsetY = 0, offsetWidth = 884, offsetHeight = 782}, -- 110: Parent Christmas Idle Black Lines0011
+ {x = 3524, y = 2274, width = 865, height = 782, offsetX = -19, offsetY = 0, offsetWidth = 884, offsetHeight = 782}, -- 111: Parent Christmas Idle Black Lines0012
+ {x = 3524, y = 2274, width = 865, height = 782, offsetX = -19, offsetY = 0, offsetWidth = 884, offsetHeight = 782}, -- 112: Parent Christmas Idle Black Lines0013
+ {x = 4399, y = 2274, width = 435, height = 461, offsetX = -18, offsetY = -13, offsetWidth = 453, offsetHeight = 475}, -- 113: Pico Idle Dance0000
+ {x = 4399, y = 2274, width = 435, height = 461, offsetX = -18, offsetY = -13, offsetWidth = 453, offsetHeight = 475}, -- 114: Pico Idle Dance0001
+ {x = 4844, y = 2274, width = 442, height = 468, offsetX = -11, offsetY = -6, offsetWidth = 453, offsetHeight = 475}, -- 115: Pico Idle Dance0002
+ {x = 4844, y = 2274, width = 442, height = 468, offsetX = -11, offsetY = -6, offsetWidth = 453, offsetHeight = 475}, -- 116: Pico Idle Dance0003
+ {x = 5296, y = 2274, width = 448, height = 469, offsetX = -1, offsetY = -6, offsetWidth = 453, offsetHeight = 475}, -- 117: Pico Idle Dance0004
+ {x = 5754, y = 2274, width = 444, height = 469, offsetX = -1, offsetY = -6, offsetWidth = 453, offsetHeight = 475}, -- 118: Pico Idle Dance0005
+ {x = 6208, y = 2274, width = 444, height = 474, offsetX = -1, offsetY = -1, offsetWidth = 453, offsetHeight = 475}, -- 119: Pico Idle Dance0006
+ {x = 6662, y = 2274, width = 442, height = 474, offsetX = -1, offsetY = -1, offsetWidth = 453, offsetHeight = 475}, -- 120: Pico Idle Dance0007
+ {x = 7114, y = 2274, width = 443, height = 475, offsetX = 0, offsetY = 0, offsetWidth = 453, offsetHeight = 475}, -- 121: Pico Idle Dance0008
+ {x = 7114, y = 2274, width = 443, height = 475, offsetX = 0, offsetY = 0, offsetWidth = 453, offsetHeight = 475}, -- 122: Pico Idle Dance0009
+ {x = 7114, y = 2274, width = 443, height = 475, offsetX = 0, offsetY = 0, offsetWidth = 453, offsetHeight = 475}, -- 123: Pico Idle Dance0010
+ {x = 7114, y = 2274, width = 443, height = 475, offsetX = 0, offsetY = 0, offsetWidth = 453, offsetHeight = 475}, -- 124: Pico Idle Dance0011
+ {x = 7114, y = 2274, width = 443, height = 475, offsetX = 0, offsetY = 0, offsetWidth = 453, offsetHeight = 475}, -- 125: Pico Idle Dance0012
+ {x = 7114, y = 2274, width = 443, height = 475, offsetX = 0, offsetY = 0, offsetWidth = 453, offsetHeight = 475}, -- 126: Pico Idle Dance0013
+ {x = 7567, y = 2274, width = 336, height = 288, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 127: SENPAI idle Black Lines0000
+ {x = 7567, y = 2274, width = 336, height = 288, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 128: SENPAI idle Black Lines0001
+ {x = 0, y = 3066, width = 336, height = 288, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 129: SENPAI idle Black Lines0002
+ {x = 0, y = 3066, width = 336, height = 288, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 130: SENPAI idle Black Lines0003
+ {x = 346, y = 3066, width = 336, height = 288, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 131: SENPAI idle Black Lines0004
+ {x = 346, y = 3066, width = 336, height = 288, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 132: SENPAI idle Black Lines0005
+ {x = 692, y = 3066, width = 336, height = 288, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 133: SENPAI idle Black Lines0006
+ {x = 692, y = 3066, width = 336, height = 288, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 134: SENPAI idle Black Lines0007
+ {x = 1038, y = 3066, width = 336, height = 288, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 135: SENPAI idle Black Lines0008
+ {x = 1038, y = 3066, width = 336, height = 288, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 136: SENPAI idle Black Lines0009
+ {x = 1038, y = 3066, width = 336, height = 288, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 137: SENPAI idle Black Lines0010
+ {x = 1038, y = 3066, width = 336, height = 288, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 138: SENPAI idle Black Lines0011
+ {x = 1038, y = 3066, width = 336, height = 288, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 139: SENPAI idle Black Lines0012
+ {x = 1038, y = 3066, width = 336, height = 288, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 140: SENPAI idle Black Lines0013
+ {x = 1384, y = 3066, width = 381, height = 549, offsetX = -50, offsetY = 0, offsetWidth = 492, offsetHeight = 549}, -- 141: spooky dance idle BLACK LINES0000
+ {x = 1384, y = 3066, width = 381, height = 549, offsetX = -50, offsetY = 0, offsetWidth = 492, offsetHeight = 549}, -- 142: spooky dance idle BLACK LINES0001
+ {x = 1775, y = 3066, width = 379, height = 541, offsetX = -55, offsetY = -8, offsetWidth = 492, offsetHeight = 549}, -- 143: spooky dance idle BLACK LINES0002
+ {x = 1775, y = 3066, width = 379, height = 541, offsetX = -55, offsetY = -8, offsetWidth = 492, offsetHeight = 549}, -- 144: spooky dance idle BLACK LINES0003
+ {x = 2164, y = 3066, width = 357, height = 484, offsetX = -79, offsetY = -61, offsetWidth = 492, offsetHeight = 549}, -- 145: spooky dance idle BLACK LINES0004
+ {x = 2164, y = 3066, width = 357, height = 484, offsetX = -79, offsetY = -61, offsetWidth = 492, offsetHeight = 549}, -- 146: spooky dance idle BLACK LINES0005
+ {x = 2531, y = 3066, width = 354, height = 494, offsetX = -78, offsetY = -52, offsetWidth = 492, offsetHeight = 549}, -- 147: spooky dance idle BLACK LINES0006
+ {x = 2531, y = 3066, width = 354, height = 494, offsetX = -78, offsetY = -52, offsetWidth = 492, offsetHeight = 549}, -- 148: spooky dance idle BLACK LINES0007
+ {x = 2895, y = 3066, width = 492, height = 532, offsetX = 0, offsetY = -16, offsetWidth = 492, offsetHeight = 549}, -- 149: spooky dance idle BLACK LINES0008
+ {x = 2895, y = 3066, width = 492, height = 532, offsetX = 0, offsetY = -16, offsetWidth = 492, offsetHeight = 549}, -- 150: spooky dance idle BLACK LINES0009
+ {x = 3397, y = 3066, width = 481, height = 524, offsetX = -7, offsetY = -20, offsetWidth = 492, offsetHeight = 549}, -- 151: spooky dance idle BLACK LINES0010
+ {x = 3397, y = 3066, width = 481, height = 524, offsetX = -7, offsetY = -20, offsetWidth = 492, offsetHeight = 549}, -- 152: spooky dance idle BLACK LINES0011
+ {x = 2164, y = 3066, width = 357, height = 484, offsetX = -79, offsetY = -61, offsetWidth = 492, offsetHeight = 549}, -- 153: spooky dance idle BLACK LINES0012
+ {x = 2164, y = 3066, width = 357, height = 484, offsetX = -79, offsetY = -61, offsetWidth = 492, offsetHeight = 549}, -- 154: spooky dance idle BLACK LINES0013
+ {x = 2531, y = 3066, width = 354, height = 494, offsetX = -78, offsetY = -52, offsetWidth = 492, offsetHeight = 549}, -- 155: spooky dance idle BLACK LINES0014
+ {x = 2531, y = 3066, width = 354, height = 494, offsetX = -78, offsetY = -52, offsetWidth = 492, offsetHeight = 549}, -- 156: spooky dance idle BLACK LINES0015
+ {x = 4000, y = 4000, width = 1, height = 1, offsetX = -78, offsetY = -52, offsetWidth = 492, offsetHeight = 549} -- 157: none
+ },
+ {
+ ["boyfriend confirm"] = {start = 1, stop = 26, speed = 24, offsetX = 0, offsetY = 0},
+ ["boyfriend"] = {start = 27, stop = 40, speed = 24, offsetX = 0, offsetY = 0},
+ ["girlfriend"] = {start = 55, stop = 84, speed = 24, offsetX = 0, offsetY = 0},
+ ["week1"] = {start = 157, stop = 157, speed = 24, offsetX = 0, offsetY = 0},
+ ["week2"] = {start = 41, stop = 54, speed = 24, offsetX = 0, offsetY = 0},
+ ["week3"] = {start = 141, stop = 156, speed = 24, offsetX = 0, offsetY = 0},
+ ["week4"] = {start = 113, stop = 126, speed = 24, offsetX = 0, offsetY = 0},
+ ["week5"] = {start = 85, stop = 98, speed = 24, offsetX = 0, offsetY = 0},
+ ["week6"] = {start = 99, stop = 112, speed = 24, offsetX = 0, offsetY = 0},
+ ["week7"] = {start = 127, stop = 140, speed = 24, offsetX = 0, offsetY = 0},
+ ["week8"] = {start = 157, stop = 157, speed = 24, offsetX = 0, offsetY = 0}
+ },
+ "boyfriend",
+ true
+)
\ No newline at end of file
diff --git a/src/love/sprites/menu/titleEnter.lua b/src/love/sprites/menu/titleEnter.lua
new file mode 100644
index 00000000..65cca881
--- /dev/null
+++ b/src/love/sprites/menu/titleEnter.lua
@@ -0,0 +1,85 @@
+--[[----------------------------------------------------------------------------
+This file is part of Friday Night Funkin' Rewritten
+
+Copyright (C) 2021 HTV04
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+------------------------------------------------------------------------------]]
+
+return graphics.newSprite(
+ love.graphics.newImage(graphics.imagePath("menu/titleEnter")),
+ -- Automatically generated from titleEnter.xml
+ {
+ {x = 0, y = 0, width = 1477, height = 79, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 1: ENTER PRESSED0000
+ {x = 1487, y = 0, width = 1477, height = 79, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 2: ENTER PRESSED0001
+ {x = 0, y = 0, width = 1477, height = 79, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 3: ENTER PRESSED0002
+ {x = 1487, y = 0, width = 1477, height = 79, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 4: ENTER PRESSED0003
+ {x = 0, y = 0, width = 1477, height = 79, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 5: ENTER PRESSED0004
+ {x = 1487, y = 0, width = 1477, height = 79, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 6: ENTER PRESSED0005
+ {x = 1487, y = 0, width = 1477, height = 79, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 7: ENTER PRESSED0006
+ {x = 0, y = 0, width = 1477, height = 79, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 8: ENTER PRESSED0007
+ {x = 1487, y = 0, width = 1477, height = 79, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 9: ENTER PRESSED0008
+ {x = 0, y = 89, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 10: Press Enter to Begin0000
+ {x = 1505, y = 89, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 11: Press Enter to Begin0001
+ {x = 0, y = 195, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 12: Press Enter to Begin0002
+ {x = 1505, y = 195, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 13: Press Enter to Begin0003
+ {x = 0, y = 301, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 14: Press Enter to Begin0004
+ {x = 1505, y = 301, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 15: Press Enter to Begin0005
+ {x = 0, y = 407, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 16: Press Enter to Begin0006
+ {x = 1505, y = 407, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 17: Press Enter to Begin0007
+ {x = 0, y = 513, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 18: Press Enter to Begin0008
+ {x = 1505, y = 513, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 19: Press Enter to Begin0009
+ {x = 0, y = 619, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 20: Press Enter to Begin0010
+ {x = 1505, y = 619, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 21: Press Enter to Begin0011
+ {x = 0, y = 725, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 22: Press Enter to Begin0012
+ {x = 1505, y = 725, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 23: Press Enter to Begin0013
+ {x = 0, y = 831, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 24: Press Enter to Begin0014
+ {x = 1505, y = 831, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 25: Press Enter to Begin0015
+ {x = 0, y = 937, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 26: Press Enter to Begin0016
+ {x = 1505, y = 937, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 27: Press Enter to Begin0017
+ {x = 0, y = 1043, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 28: Press Enter to Begin0018
+ {x = 1505, y = 1043, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 29: Press Enter to Begin0019
+ {x = 0, y = 1149, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 30: Press Enter to Begin0020
+ {x = 1505, y = 1149, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 31: Press Enter to Begin0021
+ {x = 0, y = 1255, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 32: Press Enter to Begin0022
+ {x = 0, y = 1255, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 33: Press Enter to Begin0023
+ {x = 1505, y = 1255, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 34: Press Enter to Begin0024
+ {x = 0, y = 1149, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 35: Press Enter to Begin0025
+ {x = 0, y = 1361, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 36: Press Enter to Begin0026
+ {x = 1505, y = 1361, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 37: Press Enter to Begin0027
+ {x = 0, y = 1467, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 38: Press Enter to Begin0028
+ {x = 1505, y = 1467, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 39: Press Enter to Begin0029
+ {x = 0, y = 1573, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 40: Press Enter to Begin0030
+ {x = 1505, y = 1573, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 41: Press Enter to Begin0031
+ {x = 0, y = 1679, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 42: Press Enter to Begin0032
+ {x = 1505, y = 1679, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 43: Press Enter to Begin0033
+ {x = 0, y = 1785, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 44: Press Enter to Begin0034
+ {x = 1505, y = 1785, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 45: Press Enter to Begin0035
+ {x = 0, y = 1891, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 46: Press Enter to Begin0036
+ {x = 1505, y = 1891, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 47: Press Enter to Begin0037
+ {x = 0, y = 1997, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 48: Press Enter to Begin0038
+ {x = 1505, y = 1997, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 49: Press Enter to Begin0039
+ {x = 0, y = 2103, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 50: Press Enter to Begin0040
+ {x = 1505, y = 2103, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 51: Press Enter to Begin0041
+ {x = 0, y = 2209, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 52: Press Enter to Begin0042
+ {x = 1505, y = 2209, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 53: Press Enter to Begin0043
+ {x = 0, y = 89, width = 1495, height = 96, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0} -- 54: Press Enter to Begin0044
+ },
+ {
+ ["anim"] = {start = 10, stop = 54, speed = 24, offsetX = 0, offsetY = 0},
+ ["pressed"] = {start = 1, stop = 9, speed = 24, offsetX = 0, offsetY = 0}
+ },
+ "anim",
+ false
+)
\ No newline at end of file
diff --git a/src/love/sprites/pixel/countdown.lua b/src/love/sprites/pixel/countdown.lua
new file mode 100644
index 00000000..6b46f4fb
--- /dev/null
+++ b/src/love/sprites/pixel/countdown.lua
@@ -0,0 +1,15 @@
+return graphics.newSprite(
+ love.graphics.newImage(graphics.imagePath("pixel/countdown")),
+ {
+ {x = 0, y = 0, width = 87, height = 41, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 1: Ready
+ {x = 87, y = 0, width = 80, height = 37, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 2: Set
+ {x = 167, y = 0, width = 97, height = 37, offsetX = 0, offsetY = 0, offsetWidth = 0, offsetHeight = 0}, -- 3: Date
+ },
+ {
+ ["ready"] = {start = 1, stop = 1, speed = 0, offsetX = 0, offsetY = 0},
+ ["set"] = {start = 2, stop = 2, speed = 0, offsetX = 0, offsetY = 0},
+ ["date"] = {start = 3, stop = 3, speed = 0, offsetX = 0, offsetY = 0}
+ },
+ "ready",
+ false
+)
diff --git a/src/love/states/menu.lua b/src/love/states/menu/menuFreeplay.lua
similarity index 58%
rename from src/love/states/menu.lua
rename to src/love/states/menu/menuFreeplay.lua
index f526414d..8f045419 100644
--- a/src/love/states/menu.lua
+++ b/src/love/states/menu/menuFreeplay.lua
@@ -28,9 +28,7 @@ local songNum, songAppend
local songDifficulty = 2
local titleBG = graphics.newImage(love.graphics.newImage(graphics.imagePath("menu/title-bg")))
-local logo = graphics.newImage(love.graphics.newImage(graphics.imagePath("menu/logo")))
-local girlfriendTitle = love.filesystem.load("sprites/menu/girlfriend-title.lua")()
local menuNames = {
"Story Mode",
@@ -103,7 +101,6 @@ local difficultyStrs = {
local selectSound = love.audio.newSource("sounds/menu/select.ogg", "static")
local confirmSound = love.audio.newSource("sounds/menu/confirm.ogg", "static")
-local music = love.audio.newSource("music/menu/menu.ogg", "stream")
local function switchMenu(menu)
if menu == 4 then
@@ -111,6 +108,8 @@ local function switchMenu(menu)
return switchMenu(1)
elseif menu == 3 then
+
+ elseif menu == 2 then
function leftFunc()
if menuState == 3 then
songDifficulty = (songDifficulty > 1) and songDifficulty - 1 or 3
@@ -131,7 +130,6 @@ local function switchMenu(menu)
end
function confirmFunc()
if menuState == 3 then
- music:stop()
status.setLoading(true)
@@ -179,114 +177,82 @@ local function switchMenu(menu)
end
graphics.setColor(1, 1, 1)
- if input:getActiveDevice() == "joy" then
- love.graphics.printf("Left Stick/D-Pad: Select | A: Confirm | B: Back", -640, 350, 1280, "center", nil, 1, 1)
- else
- love.graphics.printf("Arrow Keys: Select | Enter: Confirm | Escape: Back", -640, 350, 1280, "center", nil, 1, 1)
- end
end
- elseif menu == 2 then
- weekNum = 1
- songNum = 1
+ end
- function leftFunc()
- if menuState == 2 then
- songDifficulty = (songDifficulty > 1) and songDifficulty - 1 or 3
- else
- weekNum = (weekNum > 1) and weekNum - 1 or #weekMeta
- end
- end
- function rightFunc()
- if menuState == 2 then
- songDifficulty = (songDifficulty < 3) and songDifficulty + 1 or 1
- else
- weekNum = (weekNum < #weekMeta) and weekNum + 1 or 1
- end
- end
- function confirmFunc()
- if menuState == 2 then
- music:stop()
+ menuState = 1
+end
- status.setLoading(true)
+function leftFunc()
+ if menuState == 3 then
+ songDifficulty = (songDifficulty > 1) and songDifficulty - 1 or 3
+ elseif menuState == 2 then
+ songNum = (songNum > 1) and songNum - 1 or #weekMeta[weekNum][2]
+ else
+ weekNum = (weekNum > 1) and weekNum - 1 or #weekMeta
+ end
+end
+function rightFunc()
+ if menuState == 3 then
+ songDifficulty = (songDifficulty < 3) and songDifficulty + 1 or 1
+ elseif menuState == 2 then
+ songNum = (songNum < #weekMeta[weekNum][2]) and songNum + 1 or 1
+ else
+ weekNum = (weekNum < #weekMeta) and weekNum + 1 or 1
+ end
+end
+function confirmFunc()
+ if menuState == 3 then
- graphics.fadeOut(
- 0.5,
- function()
- songAppend = difficultyStrs[songDifficulty]
+ status.setLoading(true)
- storyMode = true
+ graphics.fadeOut(
+ 0.5,
+ function()
+ menu:musicStop()
+
+ songAppend = difficultyStrs[songDifficulty]
- Gamestate.switch(weekData[weekNum], songNum, songAppend)
+ storyMode = false
- status.setLoading(false)
- end
- )
- else
- menuState = menuState + 1
- end
- end
- function backFunc()
- if menuState == 1 then
- switchMenu(1)
- else
- menuState = menuState - 1
- end
- end
- function drawFunc()
- graphics.setColor(1, 1, 0)
- if menuState == 2 then
- if songDifficulty == 3 then
- love.graphics.printf("Choose a difficulty: < Hard >", -640, 285, 853, "center", nil, 1.5, 1.5)
- elseif songDifficulty == 2 then
- love.graphics.printf("Choose a difficulty: < Normal >", -640, 285, 853, "center", nil, 1.5, 1.5)
- else
- love.graphics.printf("Choose a difficulty: < Easy >", -640, 285, 853, "center", nil, 1.5, 1.5)
- end
- else
- love.graphics.printf("Choose a week: < " .. weekMeta[weekNum][1] .. " >", -640, 285, 853, "center", nil, 1.5, 1.5)
- end
- graphics.setColor(1, 1, 1)
+ Gamestate.switch(weekData[weekNum], songNum, songAppend)
- if input:getActiveDevice() == "joy" then
- love.graphics.printf("Left Stick/D-Pad: Select | A: Confirm | B: Back", -640, 350, 1280, "center", nil, 1, 1)
- else
- love.graphics.printf("Arrow Keys: Select | Enter: Confirm | Escape: Back", -640, 350, 1280, "center", nil, 1, 1)
+ status.setLoading(false)
end
- end
+ )
else
- function leftFunc()
- menuNum = (menuNum > 1) and menuNum - 1 or #menuNames
- end
- function rightFunc()
- menuNum = (menuNum < #menuNames) and menuNum + 1 or 1
+ if menuState == 1 then
+ songNum = 1
end
- function confirmFunc()
- switchMenu(menuNum + 1)
- end
- function backFunc()
- graphics.fadeOut(0.5, love.event.quit)
- end
- function drawFunc()
- graphics.setColor(1, 1, 0)
- love.graphics.printf("< " .. menuNames[menuNum] .. " >", -640, 285, 853, "center", nil, 1.5, 1.5)
- graphics.setColor(1, 1, 1)
- if input:getActiveDevice() == "joy" then
- love.graphics.printf("Left Stick/D-Pad: Select | A: Confirm | B: Exit", -640, 350, 1280, "center", nil, 1, 1)
- else
- love.graphics.printf("Arrow Keys: Select | Enter: Confirm | Escape: Exit", -640, 350, 1280, "center", nil, 1, 1)
- end
- end
+ menuState = menuState + 1
+ end
+end
+function backFunc()
+ if menuState == 1 then
+ switchMenu(1)
+ else
+ menuState = menuState - 1
end
-
- menuState = 1
end
-logo.x, logo.y = -350, -125
-
-girlfriendTitle.x, girlfriendTitle.y = 300, -75
-
-music:setLooping(true)
+function drawFunc()
+ graphics.setColor(1, 1, 0)
+ if menuState == 3 then
+ if songDifficulty == 3 then
+ love.graphics.printf("Choose a difficulty: < Hard >", -640, 285, 853, "center", nil, 1.5, 1.5)
+ elseif songDifficulty == 2 then
+ love.graphics.printf("Choose a difficulty: < Normal >", -640, 285, 853, "center", nil, 1.5, 1.5)
+ else
+ love.graphics.printf("Choose a difficulty: < Easy >", -640, 285, 853, "center", nil, 1.5, 1.5)
+ end
+ elseif menuState == 2 then
+ love.graphics.printf("Choose a song: < " .. weekMeta[weekNum][2][songNum] .. " >", -640, 285, 853, "center", nil, 1.5, 1.5)
+ else
+ love.graphics.printf("Choose a week: < " .. weekMeta[weekNum][1] .. " >", -640, 285, 853, "center", nil, 1.5, 1.5)
+ end
+ graphics.setColor(1, 1, 1)
+end
return {
enter = function(self, previous)
@@ -300,11 +266,9 @@ return {
graphics.setFade(0)
graphics.fadeIn(0.5)
- music:play()
end,
update = function(self, dt)
- girlfriendTitle:update(dt)
if not graphics.isFading() then
if input:pressed("left") then
@@ -322,7 +286,12 @@ return {
elseif input:pressed("back") then
audio.playSound(selectSound)
- backFunc()
+ if menuState == 1 then
+ Gamestate.switch(menuSelect)
+ else
+ menuState = menuState - 1
+ end
+
end
end
end,
@@ -336,30 +305,12 @@ return {
love.graphics.push()
love.graphics.scale(cam.sizeX, cam.sizeY)
- logo:draw()
-
- girlfriendTitle:draw()
-
- love.graphics.printf(
- "v1.1.0 beta 2\n" ..
- "Developed by HTV04\n\n" ..
- "Original game by Funkin' Crew, in association with Newgrounds",
- -525,
- 90,
- 450,
- "right",
- nil,
- 1,
- 1
- )
-
drawFunc()
love.graphics.pop()
love.graphics.pop()
end,
leave = function(self)
- music:stop()
Timer.clear()
end
diff --git a/src/love/states/menu/menuSelect.lua b/src/love/states/menu/menuSelect.lua
new file mode 100644
index 00000000..6b51f677
--- /dev/null
+++ b/src/love/states/menu/menuSelect.lua
@@ -0,0 +1,158 @@
+--[[----------------------------------------------------------------------------
+This file is part of Friday Night Funkin' Rewritten
+
+Copyright (C) 2021 HTV04
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+------------------------------------------------------------------------------]]
+
+local leftFunc, rightFunc, confirmFunc, backFunc, drawFunc
+
+local menuState
+
+local titleBG = graphics.newImage(love.graphics.newImage(graphics.imagePath("menu/menuBG")))
+
+local options = love.filesystem.load("sprites/menu/menuButtons.lua")()
+local story = love.filesystem.load("sprites/menu/menuButtons.lua")()
+local freeplay = love.filesystem.load("sprites/menu/menuButtons.lua")()
+
+local menuButton
+
+local selectSound = love.audio.newSource("sounds/menu/select.ogg", "static")
+local confirmSound = love.audio.newSource("sounds/menu/confirm.ogg", "static")
+
+
+local function switchMenu(menu)
+ menuState = 1
+end
+
+story.y = -200
+freeplay.y = 0
+options.y = 200
+
+
+return {
+ enter = function(self, previous)
+ menuButton = 1
+ songNum = 0
+ story:animate("story hover", true)
+ freeplay:animate("freeplay", true)
+ options:animate("options", true)
+
+ cam.sizeX, cam.sizeY = 0.9, 0.9
+ camScale.x, camScale.y = 0.9, 0.9
+
+ switchMenu(1)
+
+ graphics.setFade(0)
+ graphics.fadeIn(0.5)
+
+ end,
+
+ update = function(self, dt)
+ options:update(dt)
+ story:update(dt)
+ freeplay:update(dt)
+
+ if not graphics.isFading() then
+ if input:pressed("up") then
+ audio.playSound(selectSound)
+
+ if menuButton ~= 1 then
+ menuButton = menuButton - 1
+ else
+ menuButton = 3
+ end
+
+ if menuButton == 1 then
+ story:animate("story hover", true)
+ freeplay:animate("freeplay", true)
+ options:animate("options", true)
+ elseif menuButton == 2 then
+ story:animate("story", true)
+ freeplay:animate("freeplay hover", true)
+ options:animate("options", true)
+ elseif menuButton == 3 then
+ story:animate("story", true)
+ freeplay:animate("freeplay", true)
+ options:animate("options hover", true)
+ end
+
+ elseif input:pressed("down") then
+ audio.playSound(selectSound)
+
+ if menuButton ~= 3 then
+ menuButton = menuButton + 1
+ else
+ menuButton = 1
+ end
+
+ if menuButton == 1 then
+ story:animate("story hover", true)
+ freeplay:animate("freeplay", true)
+ options:animate("options", true)
+ elseif menuButton == 2 then
+ story:animate("story", true)
+ freeplay:animate("freeplay hover", true)
+ options:animate("options", true)
+ elseif menuButton == 3 then
+ story:animate("story", true)
+ freeplay:animate("freeplay", true)
+ options:animate("options hover", true)
+ end
+
+ elseif input:pressed("confirm") then
+ audio.playSound(confirmSound)
+
+ --confirmFunc()
+ if menuButton == 1 then
+ status.setLoading(true)
+ Gamestate.switch(menuWeek)
+ status.setLoading(false)
+ elseif menuButton == 2 then
+ status.setLoading(true)
+ Gamestate.switch(menuFreeplay)
+ status.setLoading(false)
+ elseif menuButton == 3 then
+ love.window.showMessageBox("lol", "Not implemented yet :P")
+ end
+ elseif input:pressed("back") then
+ audio.playSound(selectSound)
+
+ Gamestate.switch(titleMenu)
+ end
+ end
+ end,
+
+ draw = function(self)
+ love.graphics.push()
+ love.graphics.translate(graphics.getWidth() / 2, graphics.getHeight() / 2)
+
+ titleBG:draw()
+
+ story:draw()
+ options:draw()
+ freeplay:draw()
+
+ love.graphics.push()
+ love.graphics.scale(cam.sizeX, cam.sizeY)
+ love.graphics.pop()
+ love.graphics.pop()
+ end,
+
+ leave = function(self)
+
+ Timer.clear()
+ end
+}
diff --git a/src/love/states/menu/menuWeek.lua b/src/love/states/menu/menuWeek.lua
new file mode 100644
index 00000000..96c2fa10
--- /dev/null
+++ b/src/love/states/menu/menuWeek.lua
@@ -0,0 +1,309 @@
+--[[----------------------------------------------------------------------------
+This file is part of Friday Night Funkin' Rewritten
+
+Copyright (C) 2021 HTV04
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+------------------------------------------------------------------------------]]
+
+local upFunc, downFunc, confirmFunc, backFunc, drawFunc, menuFunc, menuDesc, trackNames
+
+local menuState
+
+local menuNum = 1
+
+local weekNum = 1
+local songNum, songAppend
+local songDifficulty = 2
+
+local titleBG = graphics.newImage(love.graphics.newImage(graphics.imagePath("menu/storymenu/weekMenu")))
+
+local enemyDanceLines = love.filesystem.load("sprites/menu/storymenu/idlelines.lua")()
+
+local difficultyAnim = love.filesystem.load("sprites/menu/storymenu/difficulty.lua")()
+
+local bfDanceLines = love.filesystem.load("sprites/menu/storymenu/idlelines.lua")()
+
+local gfDanceLines = love.filesystem.load("sprites/menu/storymenu/idlelines.lua")()
+
+local tutorial, week1, week2, week3, week4, week5, week6
+
+local weekDesc = {
+ "LEARN TO FUNK",
+ "DADDY DEAREST",
+ "SPOOKY MONTH",
+ "PICO",
+ "MOMMY MUST MURDER",
+ "RED SNOW",
+ "HATING SIMULATOR FT. MOAWLING"
+}
+local difficultyStrs = {
+ "-easy",
+ "",
+ "-hard"
+}
+
+tutorial = graphics.newImage(love.graphics.newImage(graphics.imagePath("menu/storymenu/week0")))
+week1 = graphics.newImage(love.graphics.newImage(graphics.imagePath("menu/storymenu/week1")))
+week2 = graphics.newImage(love.graphics.newImage(graphics.imagePath("menu/storymenu/week2")))
+week3 = graphics.newImage(love.graphics.newImage(graphics.imagePath("menu/storymenu/week3")))
+week4 = graphics.newImage(love.graphics.newImage(graphics.imagePath("menu/storymenu/week4")))
+week5 = graphics.newImage(love.graphics.newImage(graphics.imagePath("menu/storymenu/week5")))
+week6 = graphics.newImage(love.graphics.newImage(graphics.imagePath("menu/storymenu/week6")))
+
+enemyDanceLines.sizeX, enemyDanceLines.sizeY = 0.5, 0.5
+
+local selectSound = love.audio.newSource("sounds/menu/select.ogg", "static")
+local confirmSound = love.audio.newSource("sounds/menu/confirm.ogg", "static")
+
+local function switchMenu(menu)
+
+end
+
+enemyDanceLines.x, enemyDanceLines.y = -375, -170
+
+bfDanceLines.sizeX, bfDanceLines.sizeY = 0.7, 0.7
+gfDanceLines.sizeX, gfDanceLines.sizeY = 0.5, 0.5
+
+bfDanceLines.x, bfDanceLines.y = 0, -150
+gfDanceLines.x, gfDanceLines.y = 375, -170
+
+difficultyAnim.x, difficultyAnim.y = 375 + 25, 220
+
+return {
+ enter = function(self, previous)
+ bfDanceLines:animate("boyfriend", true)
+ gfDanceLines:animate("girlfriend", true)
+ enemyDanceLines:animate("week1", true)
+ songNum = 0
+ weekNum = 1
+ trackNames = "\nTutorial"
+ menuDesc = "LEARN TO FUNK"
+
+ cam.sizeX, cam.sizeY = 0.9, 0.9
+ camScale.x, camScale.y = 0.9, 0.9
+
+ switchMenu(1)
+
+ graphics.setFade(0)
+ graphics.fadeIn(0.5)
+
+ function confirmFunc()
+ menu:musicStop()
+ songNum = 1
+
+ status.setLoading(true)
+
+ graphics.fadeOut(
+ 0.5,
+ function()
+
+ songAppend = difficultyStrs[songDifficulty]
+
+ storyMode = true
+
+ Gamestate.switch(weekData[weekNum], songNum, songAppend)
+
+ status.setLoading(false)
+ end
+ )
+ end
+
+ end,
+
+ update = function(self, dt)
+
+
+ function menuFunc()
+ if weekNum ~= 7 then
+ enemyDanceLines.sizeX, enemyDanceLines.sizeY = 0.5, 0.5
+ elseif weekNum == 7 then
+ enemyDanceLines.sizeX, enemyDanceLines.sizeY = 1, 1
+ end
+
+ if weekNum == 1 then
+ trackNames = "\nTutorial"
+ elseif weekNum == 2 then
+ trackNames = "\nBopeebo\nFresh\nDad-Battle"
+ elseif weekNum == 3 then
+ trackNames = "\nSpookeez\nSouth\nMonster"
+ elseif weekNum == 4 then
+ trackNames = "\nPico\nPhilly\nBlammed"
+ elseif weekNum == 5 then
+ trackNames = "\nSatin-Panties\nHigh\nM.I.L.F"
+ elseif weekNum == 6 then
+ trackNames = "\nCocoa\nEggnog\nWinter-Horrorland"
+ elseif weekNum == 7 then
+ trackNames = "\nSenpai\nRoses\nThorns"
+ end
+
+ enemyDanceLines:animate("week" .. weekNum, true)
+ end
+
+ enemyDanceLines:update(dt)
+ bfDanceLines:update(dt)
+ gfDanceLines:update(dt)
+
+ if songDifficulty == 1 then
+ difficultyAnim:animate("easy", true)
+ elseif songDifficulty == 2 then
+ difficultyAnim:animate("normal", true)
+ elseif songDifficulty == 3 then
+ difficultyAnim:animate("hard", true)
+ end
+
+ difficultyAnim:update(dt)
+
+ if not graphics.isFading() then
+ if input:pressed("down") then
+ audio.playSound(selectSound)
+
+ if weekNum ~= 7 then
+ weekNum = weekNum + 1
+ else
+ weekNum = 1
+ end
+ menuFunc()
+
+ elseif input:pressed("up") then
+ audio.playSound(selectSound)
+
+ if weekNum ~= 1 then
+ weekNum = weekNum - 1
+ else
+ weekNum = 7
+ end
+ menuFunc()
+
+ elseif input:pressed("left") then
+ audio.playSound(selectSound)
+
+ if songDifficulty ~= 1 then
+ songDifficulty = songDifficulty - 1
+ else
+ songDifficulty = 3
+ end
+
+ elseif input:pressed("right") then
+ audio.playSound(selectSound)
+
+ if songDifficulty ~= 3 then
+ songDifficulty = songDifficulty + 1
+ else
+ songDifficulty = 1
+ end
+
+ elseif input:pressed("confirm") then
+ audio.playSound(confirmSound)
+ bfDanceLines:animate("boyfriend confirm", false)
+
+ confirmFunc()
+ elseif input:pressed("back") then
+ audio.playSound(selectSound)
+
+ Gamestate.switch(menuSelect)
+ end
+ end
+ end,
+
+ draw = function(self)
+ love.graphics.push()
+ love.graphics.translate(graphics.getWidth() / 2, graphics.getHeight() / 2)
+
+ titleBG:draw()
+
+ love.graphics.push()
+ love.graphics.scale(cam.sizeX, cam.sizeY)
+
+ difficultyAnim:draw()
+ if weekNum ~= 1 then
+ enemyDanceLines:draw()
+ end
+ bfDanceLines:draw()
+ gfDanceLines:draw()
+
+ if weekNum == 1 then
+ tutorial.x, tutorial.y = 0, 220
+ week1.y = 320
+
+ tutorial:draw()
+ week1:draw()
+
+ elseif weekNum == 2 then
+ tutorial.y = 130
+ week2.y = 320
+ week1.x, week1.y = 0, 220
+
+ tutorial:draw()
+ week1:draw()
+ week2:draw()
+
+ elseif weekNum == 3 then
+ week1.y = 130
+ week3.y = 320
+ week2.x, week2.y = 0, 220
+
+ week1:draw()
+ week2:draw()
+ week3:draw()
+
+ elseif weekNum == 4 then
+ week2.y = 130
+ week4.y = 320
+ week3.x, week3.y = 0, 220
+
+ week2:draw()
+ week3:draw()
+ week4:draw()
+
+ elseif weekNum == 5 then
+ week5.y = 320
+ week3.y = 130
+ week4.x, week4.y = 0, 220
+
+ week3:draw()
+ week4:draw()
+ week5:draw()
+
+ elseif weekNum == 6 then
+
+ week6.y = 320
+ week4.y = 130
+ week5.x, week5.y = 0, 220
+ week4:draw()
+ week5:draw()
+ week6:draw()
+
+ elseif weekNum == 7 then
+ week6.x, week6.y = 0, 220
+ week5.y = 130
+
+ week5:draw()
+ week6:draw()
+ end
+
+ love.graphics.printf(weekDesc[weekNum], -585, -395, 853, "right", nil, 1.5, 1.5)
+ graphics.setColor(255 / 255, 117 / 255, 172 / 255)
+ love.graphics.printf("TRACKS" .. trackNames, -1050, 140, 853, "center", nil, 1.5, 1.5)
+ graphics.setColor(1,1,1)
+
+ love.graphics.pop()
+ love.graphics.pop()
+ end,
+
+ leave = function(self)
+
+ Timer.clear()
+ end
+}
diff --git a/src/love/states/menu/titleMenu.lua b/src/love/states/menu/titleMenu.lua
new file mode 100644
index 00000000..c36ef317
--- /dev/null
+++ b/src/love/states/menu/titleMenu.lua
@@ -0,0 +1,125 @@
+--[[----------------------------------------------------------------------------
+This file is part of Friday Night Funkin' Rewritten
+
+Copyright (C) 2021 HTV04
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+------------------------------------------------------------------------------]]
+
+local upFunc, downFunc, confirmFunc, backFunc, drawFunc, musicStop
+
+local menuState
+
+local menuNum = 1
+
+local weekNum = 1
+local songNum, songAppend
+local songDifficulty = 2
+
+local logo = graphics.newImage(love.graphics.newImage(graphics.imagePath("menu/logo")))
+
+local girlfriendTitle = love.filesystem.load("sprites/menu/girlfriend-title.lua")()
+local titleEnter = love.filesystem.load("sprites/menu/titleEnter.lua")()
+
+local selectSound = love.audio.newSource("sounds/menu/select.ogg", "static")
+local confirmSound = love.audio.newSource("sounds/menu/confirm.ogg", "static")
+
+local music = love.audio.newSource("music/menu/menu.ogg", "stream")
+
+local function switchMenu(menu)
+ function confirmFunc()
+ status.setLoading(true)
+ Gamestate.switch(menuSelect)
+ status.setLoading(false)
+ end
+ function backFunc()
+ graphics.fadeOut(0.5, love.event.quit)
+ end
+
+ menuState = 1
+end
+
+
+
+logo.x, logo.y = -350, -125
+
+girlfriendTitle.x, girlfriendTitle.y = 325, 65
+
+titleEnter.x, titleEnter.y = 225, 350
+
+music:setLooping(true)
+
+return {
+ enter = function(self, previous)
+ titleEnter:animate("anim", true)
+ songNum = 0
+
+ cam.sizeX, cam.sizeY = 0.9, 0.9
+ camScale.x, camScale.y = 0.9, 0.9
+
+ switchMenu(1)
+
+ graphics.setFade(0)
+ graphics.fadeIn(0.5)
+
+ music:play()
+ end,
+
+ musicStop = function(self)
+ music:stop()
+ end,
+
+ update = function(self, dt)
+ girlfriendTitle:update(dt)
+ titleEnter:update(dt)
+ --titleEnter:animate("anim", true)
+
+ if not graphics.isFading() then
+ if input:pressed("confirm") then
+ audio.playSound(confirmSound)
+
+ titleEnter:animate("pressed", false)
+
+
+ confirmFunc()
+ elseif input:pressed("back") then
+ audio.playSound(selectSound)
+
+ backFunc()
+ end
+ end
+ end,
+
+ draw = function(self)
+ love.graphics.push()
+ love.graphics.translate(graphics.getWidth() / 2, graphics.getHeight() / 2)
+
+ love.graphics.push()
+ love.graphics.scale(cam.sizeX, cam.sizeY)
+
+ logo:draw()
+
+ girlfriendTitle:draw()
+ titleEnter:draw()
+
+ love.graphics.pop()
+ love.graphics.pop()
+ end,
+
+ leave = function(self)
+ --music:stop()
+
+ Timer.clear()
+ end
+}
diff --git a/src/love/states/weeks-pixel.lua b/src/love/states/weeks-pixel.lua
index 76138d60..8ea644fe 100644
--- a/src/love/states/weeks-pixel.lua
+++ b/src/love/states/weeks-pixel.lua
@@ -86,11 +86,8 @@ return {
boyfriendIcon.sizeX = -1
countdownFade = {}
- countdown = love.filesystem.load("sprites/countdown.lua")()
+ countdown = love.filesystem.load("sprites/pixel/countdown.lua")()
- -- Temporary
- countdown.sizeX = 0.2
- countdown.sizeY = 0.2
end,
load = function(self)
@@ -518,7 +515,7 @@ return {
{0},
"linear",
function()
- countdown:animate("go")
+ countdown:animate("date")
countdownFade[1] = 1
audio.playSound(sounds.countdown.go)
Timer.tween(