diff --git a/Project.xml b/Project.xml
index 566d4b8f..f6754d53 100644
--- a/Project.xml
+++ b/Project.xml
@@ -39,56 +39,21 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -157,10 +122,10 @@
-
+
diff --git a/assets/preload/data/blammed/blammed-easy.json b/assets/charts/blammed/easy.json
similarity index 100%
rename from assets/preload/data/blammed/blammed-easy.json
rename to assets/charts/blammed/easy.json
diff --git a/assets/preload/data/blammed/blammed-hard.json b/assets/charts/blammed/hard.json
similarity index 100%
rename from assets/preload/data/blammed/blammed-hard.json
rename to assets/charts/blammed/hard.json
diff --git a/assets/preload/data/blammed/blammed.json b/assets/charts/blammed/normal.json
similarity index 100%
rename from assets/preload/data/blammed/blammed.json
rename to assets/charts/blammed/normal.json
diff --git a/assets/preload/data/bopeebo/bopeebo-easy.json b/assets/charts/bopeebo/easy.json
similarity index 100%
rename from assets/preload/data/bopeebo/bopeebo-easy.json
rename to assets/charts/bopeebo/easy.json
diff --git a/assets/preload/data/bopeebo/bopeebo-hard.json b/assets/charts/bopeebo/hard.json
similarity index 100%
rename from assets/preload/data/bopeebo/bopeebo-hard.json
rename to assets/charts/bopeebo/hard.json
diff --git a/assets/preload/data/bopeebo/bopeebo.json b/assets/charts/bopeebo/normal.json
similarity index 100%
rename from assets/preload/data/bopeebo/bopeebo.json
rename to assets/charts/bopeebo/normal.json
diff --git a/assets/preload/data/cocoa/cocoa-easy.json b/assets/charts/cocoa/easy.json
similarity index 100%
rename from assets/preload/data/cocoa/cocoa-easy.json
rename to assets/charts/cocoa/easy.json
diff --git a/assets/preload/data/cocoa/cocoa-hard.json b/assets/charts/cocoa/hard.json
similarity index 100%
rename from assets/preload/data/cocoa/cocoa-hard.json
rename to assets/charts/cocoa/hard.json
diff --git a/assets/preload/data/cocoa/cocoa.json b/assets/charts/cocoa/normal.json
similarity index 100%
rename from assets/preload/data/cocoa/cocoa.json
rename to assets/charts/cocoa/normal.json
diff --git a/assets/preload/data/dadbattle/dadbattle-easy.json b/assets/charts/dadbattle/dadbattle-easy.json
similarity index 100%
rename from assets/preload/data/dadbattle/dadbattle-easy.json
rename to assets/charts/dadbattle/dadbattle-easy.json
diff --git a/assets/preload/data/dadbattle/dadbattle-hard.json b/assets/charts/dadbattle/dadbattle-hard.json
similarity index 100%
rename from assets/preload/data/dadbattle/dadbattle-hard.json
rename to assets/charts/dadbattle/dadbattle-hard.json
diff --git a/assets/preload/data/dadbattle/dadbattle.json b/assets/charts/dadbattle/dadbattle.json
similarity index 100%
rename from assets/preload/data/dadbattle/dadbattle.json
rename to assets/charts/dadbattle/dadbattle.json
diff --git a/assets/preload/data/eggnog/eggnog-easy.json b/assets/charts/eggnog/eggnog-easy.json
similarity index 100%
rename from assets/preload/data/eggnog/eggnog-easy.json
rename to assets/charts/eggnog/eggnog-easy.json
diff --git a/assets/preload/data/eggnog/eggnog-hard.json b/assets/charts/eggnog/eggnog-hard.json
similarity index 100%
rename from assets/preload/data/eggnog/eggnog-hard.json
rename to assets/charts/eggnog/eggnog-hard.json
diff --git a/assets/preload/data/eggnog/eggnog.json b/assets/charts/eggnog/eggnog.json
similarity index 100%
rename from assets/preload/data/eggnog/eggnog.json
rename to assets/charts/eggnog/eggnog.json
diff --git a/assets/preload/data/fresh/fresh-easy.json b/assets/charts/fresh/fresh-easy.json
similarity index 100%
rename from assets/preload/data/fresh/fresh-easy.json
rename to assets/charts/fresh/fresh-easy.json
diff --git a/assets/preload/data/fresh/fresh-hard.json b/assets/charts/fresh/fresh-hard.json
similarity index 100%
rename from assets/preload/data/fresh/fresh-hard.json
rename to assets/charts/fresh/fresh-hard.json
diff --git a/assets/preload/data/fresh/fresh.json b/assets/charts/fresh/fresh.json
similarity index 100%
rename from assets/preload/data/fresh/fresh.json
rename to assets/charts/fresh/fresh.json
diff --git a/assets/preload/data/high/high-easy.json b/assets/charts/high/high-easy.json
similarity index 100%
rename from assets/preload/data/high/high-easy.json
rename to assets/charts/high/high-easy.json
diff --git a/assets/preload/data/high/high-hard.json b/assets/charts/high/high-hard.json
similarity index 100%
rename from assets/preload/data/high/high-hard.json
rename to assets/charts/high/high-hard.json
diff --git a/assets/preload/data/high/high.json b/assets/charts/high/high.json
similarity index 100%
rename from assets/preload/data/high/high.json
rename to assets/charts/high/high.json
diff --git a/assets/preload/data/milf/milf-easy.json b/assets/charts/milf/milf-easy.json
similarity index 100%
rename from assets/preload/data/milf/milf-easy.json
rename to assets/charts/milf/milf-easy.json
diff --git a/assets/preload/data/milf/milf-hard.json b/assets/charts/milf/milf-hard.json
similarity index 100%
rename from assets/preload/data/milf/milf-hard.json
rename to assets/charts/milf/milf-hard.json
diff --git a/assets/preload/data/milf/milf.json b/assets/charts/milf/milf.json
similarity index 100%
rename from assets/preload/data/milf/milf.json
rename to assets/charts/milf/milf.json
diff --git a/assets/preload/data/monster/monster-easy.json b/assets/charts/monster/monster-easy.json
similarity index 100%
rename from assets/preload/data/monster/monster-easy.json
rename to assets/charts/monster/monster-easy.json
diff --git a/assets/preload/data/monster/monster-hard.json b/assets/charts/monster/monster-hard.json
similarity index 100%
rename from assets/preload/data/monster/monster-hard.json
rename to assets/charts/monster/monster-hard.json
diff --git a/assets/preload/data/monster/monster.json b/assets/charts/monster/monster.json
similarity index 100%
rename from assets/preload/data/monster/monster.json
rename to assets/charts/monster/monster.json
diff --git a/assets/preload/data/philly/philly-easy.json b/assets/charts/philly/philly-easy.json
similarity index 100%
rename from assets/preload/data/philly/philly-easy.json
rename to assets/charts/philly/philly-easy.json
diff --git a/assets/preload/data/philly/philly-hard.json b/assets/charts/philly/philly-hard.json
similarity index 100%
rename from assets/preload/data/philly/philly-hard.json
rename to assets/charts/philly/philly-hard.json
diff --git a/assets/preload/data/philly/philly.json b/assets/charts/philly/philly.json
similarity index 100%
rename from assets/preload/data/philly/philly.json
rename to assets/charts/philly/philly.json
diff --git a/assets/preload/data/pico/pico-easy.json b/assets/charts/pico/pico-easy.json
similarity index 100%
rename from assets/preload/data/pico/pico-easy.json
rename to assets/charts/pico/pico-easy.json
diff --git a/assets/preload/data/pico/pico-hard.json b/assets/charts/pico/pico-hard.json
similarity index 100%
rename from assets/preload/data/pico/pico-hard.json
rename to assets/charts/pico/pico-hard.json
diff --git a/assets/preload/data/pico/pico.json b/assets/charts/pico/pico.json
similarity index 100%
rename from assets/preload/data/pico/pico.json
rename to assets/charts/pico/pico.json
diff --git a/assets/preload/data/ridge/ridge.json b/assets/charts/ridge/ridge.json
similarity index 100%
rename from assets/preload/data/ridge/ridge.json
rename to assets/charts/ridge/ridge.json
diff --git a/assets/preload/data/roses/roses-easy.json b/assets/charts/roses/roses-easy.json
similarity index 100%
rename from assets/preload/data/roses/roses-easy.json
rename to assets/charts/roses/roses-easy.json
diff --git a/assets/preload/data/roses/roses-hard.json b/assets/charts/roses/roses-hard.json
similarity index 100%
rename from assets/preload/data/roses/roses-hard.json
rename to assets/charts/roses/roses-hard.json
diff --git a/assets/preload/data/roses/roses.json b/assets/charts/roses/roses.json
similarity index 100%
rename from assets/preload/data/roses/roses.json
rename to assets/charts/roses/roses.json
diff --git a/assets/preload/data/roses/rosesDialogue.txt b/assets/charts/roses/rosesDialogue.txt
similarity index 100%
rename from assets/preload/data/roses/rosesDialogue.txt
rename to assets/charts/roses/rosesDialogue.txt
diff --git a/assets/preload/data/satin-panties/satin-panties-easy.json b/assets/charts/satin-panties/satin-panties-easy.json
similarity index 100%
rename from assets/preload/data/satin-panties/satin-panties-easy.json
rename to assets/charts/satin-panties/satin-panties-easy.json
diff --git a/assets/preload/data/satin-panties/satin-panties-hard.json b/assets/charts/satin-panties/satin-panties-hard.json
similarity index 100%
rename from assets/preload/data/satin-panties/satin-panties-hard.json
rename to assets/charts/satin-panties/satin-panties-hard.json
diff --git a/assets/preload/data/satin-panties/satin-panties.json b/assets/charts/satin-panties/satin-panties.json
similarity index 100%
rename from assets/preload/data/satin-panties/satin-panties.json
rename to assets/charts/satin-panties/satin-panties.json
diff --git a/assets/preload/data/senpai/senpai-easy.json b/assets/charts/senpai/senpai-easy.json
similarity index 100%
rename from assets/preload/data/senpai/senpai-easy.json
rename to assets/charts/senpai/senpai-easy.json
diff --git a/assets/preload/data/senpai/senpai-hard.json b/assets/charts/senpai/senpai-hard.json
similarity index 100%
rename from assets/preload/data/senpai/senpai-hard.json
rename to assets/charts/senpai/senpai-hard.json
diff --git a/assets/preload/data/senpai/senpai.json b/assets/charts/senpai/senpai.json
similarity index 100%
rename from assets/preload/data/senpai/senpai.json
rename to assets/charts/senpai/senpai.json
diff --git a/assets/preload/data/senpai/senpaiDialogue.txt b/assets/charts/senpai/senpaiDialogue.txt
similarity index 100%
rename from assets/preload/data/senpai/senpaiDialogue.txt
rename to assets/charts/senpai/senpaiDialogue.txt
diff --git a/assets/preload/data/smash/smash.json b/assets/charts/smash/smash.json
similarity index 100%
rename from assets/preload/data/smash/smash.json
rename to assets/charts/smash/smash.json
diff --git a/assets/preload/data/south/south-easy.json b/assets/charts/south/south-easy.json
similarity index 100%
rename from assets/preload/data/south/south-easy.json
rename to assets/charts/south/south-easy.json
diff --git a/assets/preload/data/south/south-hard.json b/assets/charts/south/south-hard.json
similarity index 100%
rename from assets/preload/data/south/south-hard.json
rename to assets/charts/south/south-hard.json
diff --git a/assets/preload/data/south/south.json b/assets/charts/south/south.json
similarity index 100%
rename from assets/preload/data/south/south.json
rename to assets/charts/south/south.json
diff --git a/assets/preload/data/spookeez/spookeez-easy.json b/assets/charts/spookeez/spookeez-easy.json
similarity index 100%
rename from assets/preload/data/spookeez/spookeez-easy.json
rename to assets/charts/spookeez/spookeez-easy.json
diff --git a/assets/preload/data/spookeez/spookeez-hard.json b/assets/charts/spookeez/spookeez-hard.json
similarity index 100%
rename from assets/preload/data/spookeez/spookeez-hard.json
rename to assets/charts/spookeez/spookeez-hard.json
diff --git a/assets/preload/data/spookeez/spookeez.json b/assets/charts/spookeez/spookeez.json
similarity index 100%
rename from assets/preload/data/spookeez/spookeez.json
rename to assets/charts/spookeez/spookeez.json
diff --git a/assets/preload/data/thorns/thorns-easy.json b/assets/charts/thorns/thorns-easy.json
similarity index 100%
rename from assets/preload/data/thorns/thorns-easy.json
rename to assets/charts/thorns/thorns-easy.json
diff --git a/assets/preload/data/thorns/thorns-hard.json b/assets/charts/thorns/thorns-hard.json
similarity index 100%
rename from assets/preload/data/thorns/thorns-hard.json
rename to assets/charts/thorns/thorns-hard.json
diff --git a/assets/preload/data/thorns/thorns.json b/assets/charts/thorns/thorns.json
similarity index 100%
rename from assets/preload/data/thorns/thorns.json
rename to assets/charts/thorns/thorns.json
diff --git a/assets/preload/data/thorns/thornsDialogue.txt b/assets/charts/thorns/thornsDialogue.txt
similarity index 100%
rename from assets/preload/data/thorns/thornsDialogue.txt
rename to assets/charts/thorns/thornsDialogue.txt
diff --git a/assets/preload/data/tutorial/tutorial-easy.json b/assets/charts/tutorial/tutorial-easy.json
similarity index 100%
rename from assets/preload/data/tutorial/tutorial-easy.json
rename to assets/charts/tutorial/tutorial-easy.json
diff --git a/assets/preload/data/tutorial/tutorial-hard.json b/assets/charts/tutorial/tutorial-hard.json
similarity index 100%
rename from assets/preload/data/tutorial/tutorial-hard.json
rename to assets/charts/tutorial/tutorial-hard.json
diff --git a/assets/preload/data/tutorial/tutorial.json b/assets/charts/tutorial/tutorial.json
similarity index 100%
rename from assets/preload/data/tutorial/tutorial.json
rename to assets/charts/tutorial/tutorial.json
diff --git a/assets/preload/data/winter-horrorland/winter-horrorland-easy.json b/assets/charts/winter-horrorland/winter-horrorland-easy.json
similarity index 100%
rename from assets/preload/data/winter-horrorland/winter-horrorland-easy.json
rename to assets/charts/winter-horrorland/winter-horrorland-easy.json
diff --git a/assets/preload/data/winter-horrorland/winter-horrorland-hard.json b/assets/charts/winter-horrorland/winter-horrorland-hard.json
similarity index 100%
rename from assets/preload/data/winter-horrorland/winter-horrorland-hard.json
rename to assets/charts/winter-horrorland/winter-horrorland-hard.json
diff --git a/assets/preload/data/winter-horrorland/winter-horrorland.json b/assets/charts/winter-horrorland/winter-horrorland.json
similarity index 100%
rename from assets/preload/data/winter-horrorland/winter-horrorland.json
rename to assets/charts/winter-horrorland/winter-horrorland.json
diff --git a/assets/preload/data/characterList.txt b/assets/data/characterList.txt
similarity index 100%
rename from assets/preload/data/characterList.txt
rename to assets/data/characterList.txt
diff --git a/assets/data/characters/.foldercontent b/assets/data/characters/.foldercontent
new file mode 100644
index 00000000..b40ec66b
--- /dev/null
+++ b/assets/data/characters/.foldercontent
@@ -0,0 +1 @@
+bf.xml
\ No newline at end of file
diff --git a/assets/data/characters/bf.json b/assets/data/characters/bf.json
new file mode 100644
index 00000000..f14ba329
--- /dev/null
+++ b/assets/data/characters/bf.json
@@ -0,0 +1,94 @@
+{
+ "isPlayer": true,
+ "flipX": true,
+ "anims": [
+ {
+ "name": "idle",
+ "animation": "BF idle dance",
+ "fps": 24,
+ "loop": false,
+ "x": 0,
+ "y": -5
+ },
+ {
+ "name": "singUP",
+ "animation": "BF NOTE UP0",
+ "fps": 24,
+ "loop": false,
+ "x": -29,
+ "y": 27
+ },
+ {
+ "name": "singLEFT",
+ "animation": "BF NOTE LEFT0",
+ "fps": 24,
+ "loop": false,
+ "x": 12,
+ "y": -6
+ },
+ {
+ "name": "singRIGHT",
+ "animation": "BF NOTE RIGHT0",
+ "fps": 24,
+ "loop": false,
+ "x": -38,
+ "y": -7
+ },
+ {
+ "name": "singDOWN",
+ "animation": "BF NOTE DOWN0",
+ "fps": 24,
+ "loop": false,
+ "x": -10,
+ "y": -50
+ },
+ {
+ "name": "singUPmiss",
+ "animation": "BF NOTE UP MISS",
+ "fps": 24,
+ "loop": false,
+ "x": -29,
+ "y": 27
+ },
+ {
+ "name": "singLEFTmiss",
+ "animation": "BF NOTE LEFT MISS",
+ "fps": 24,
+ "loop": false,
+ "x": 12,
+ "y": 24
+ },
+ {
+ "name": "singRIGHTmiss",
+ "animation": "BF NOTE RIGHT MISS",
+ "fps": 24,
+ "loop": false,
+ "x": -30,
+ "y": 21
+ },
+ {
+ "name": "singDOWNmiss",
+ "animation": "BF NOTE DOWN MISS",
+ "fps": 24,
+ "loop": false,
+ "x": -11,
+ "y": -19
+ },
+ {
+ "name": "hey",
+ "animation": "BF HEY",
+ "fps": 24,
+ "loop": false,
+ "x": 7,
+ "y": 4
+ },
+ {
+ "name": "scared",
+ "animation": "BF idle shaking",
+ "fps": 24,
+ "loop": true,
+ "x": -4,
+ "y": 0
+ }
+ ]
+}
\ No newline at end of file
diff --git a/assets/data/characters/bf.xml b/assets/data/characters/bf.xml
new file mode 100644
index 00000000..1f9c5a92
--- /dev/null
+++ b/assets/data/characters/bf.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/preload/data/controls.txt b/assets/data/controls.txt
similarity index 100%
rename from assets/preload/data/controls.txt
rename to assets/data/controls.txt
diff --git a/assets/preload/data/data-goes-here.txt b/assets/data/data-goes-here.txt
similarity index 100%
rename from assets/preload/data/data-goes-here.txt
rename to assets/data/data-goes-here.txt
diff --git a/assets/preload/data/freeplaySonglist.txt b/assets/data/freeplaySonglist.txt
similarity index 100%
rename from assets/preload/data/freeplaySonglist.txt
rename to assets/data/freeplaySonglist.txt
diff --git a/assets/preload/data/introText.txt b/assets/data/introText.txt
similarity index 100%
rename from assets/preload/data/introText.txt
rename to assets/data/introText.txt
diff --git a/assets/preload/data/specialThanks.txt b/assets/data/specialThanks.txt
similarity index 100%
rename from assets/preload/data/specialThanks.txt
rename to assets/data/specialThanks.txt
diff --git a/assets/exclude/music/Monster.mp3 b/assets/exclude/music/Monster.mp3
deleted file mode 100644
index a5bee769..00000000
Binary files a/assets/exclude/music/Monster.mp3 and /dev/null differ
diff --git a/assets/exclude/music/Monster.ogg b/assets/exclude/music/Monster.ogg
deleted file mode 100644
index 29357b2b..00000000
Binary files a/assets/exclude/music/Monster.ogg and /dev/null differ
diff --git a/assets/exclude/music/Spookeez.mp3 b/assets/exclude/music/Spookeez.mp3
deleted file mode 100644
index 74a958eb..00000000
Binary files a/assets/exclude/music/Spookeez.mp3 and /dev/null differ
diff --git a/assets/exclude/music/Spookeez.ogg b/assets/exclude/music/Spookeez.ogg
deleted file mode 100644
index ae1b4cca..00000000
Binary files a/assets/exclude/music/Spookeez.ogg and /dev/null differ
diff --git a/assets/exclude/music/title.mp3 b/assets/exclude/music/title.mp3
deleted file mode 100644
index 4fd507ee..00000000
Binary files a/assets/exclude/music/title.mp3 and /dev/null differ
diff --git a/assets/exclude/music/title.ogg b/assets/exclude/music/title.ogg
deleted file mode 100644
index 92941b0c..00000000
Binary files a/assets/exclude/music/title.ogg and /dev/null differ
diff --git a/assets/exclude/music/titleShoot.mp3 b/assets/exclude/music/titleShoot.mp3
deleted file mode 100644
index ed124dde..00000000
Binary files a/assets/exclude/music/titleShoot.mp3 and /dev/null differ
diff --git a/assets/exclude/music/titleShoot.ogg b/assets/exclude/music/titleShoot.ogg
deleted file mode 100644
index c9c4f6e3..00000000
Binary files a/assets/exclude/music/titleShoot.ogg and /dev/null differ
diff --git a/assets/exclude/sounds/freshIntro.mp3 b/assets/exclude/sounds/freshIntro.mp3
deleted file mode 100644
index 9f168668..00000000
Binary files a/assets/exclude/sounds/freshIntro.mp3 and /dev/null differ
diff --git a/assets/exclude/sounds/freshIntro.ogg b/assets/exclude/sounds/freshIntro.ogg
deleted file mode 100644
index 337444ea..00000000
Binary files a/assets/exclude/sounds/freshIntro.ogg and /dev/null differ
diff --git a/assets/preload/images/FNF_main_menu_assets.png b/assets/images/FNF_main_menu_assets.png
similarity index 100%
rename from assets/preload/images/FNF_main_menu_assets.png
rename to assets/images/FNF_main_menu_assets.png
diff --git a/assets/preload/images/FNF_main_menu_assets.xml b/assets/images/FNF_main_menu_assets.xml
similarity index 100%
rename from assets/preload/images/FNF_main_menu_assets.xml
rename to assets/images/FNF_main_menu_assets.xml
diff --git a/assets/shared/images/NOTE_assets.png b/assets/images/NOTE_assets.png
similarity index 100%
rename from assets/shared/images/NOTE_assets.png
rename to assets/images/NOTE_assets.png
diff --git a/assets/shared/images/NOTE_assets.xml b/assets/images/NOTE_assets.xml
similarity index 100%
rename from assets/shared/images/NOTE_assets.xml
rename to assets/images/NOTE_assets.xml
diff --git a/assets/preload/images/alphabet.png b/assets/images/alphabet.png
similarity index 100%
rename from assets/preload/images/alphabet.png
rename to assets/images/alphabet.png
diff --git a/assets/preload/images/alphabet.xml b/assets/images/alphabet.xml
similarity index 100%
rename from assets/preload/images/alphabet.xml
rename to assets/images/alphabet.xml
diff --git a/assets/shared/images/backspace.png b/assets/images/backspace.png
similarity index 100%
rename from assets/shared/images/backspace.png
rename to assets/images/backspace.png
diff --git a/assets/shared/images/backspace.xml b/assets/images/backspace.xml
similarity index 100%
rename from assets/shared/images/backspace.xml
rename to assets/images/backspace.xml
diff --git a/assets/shared/images/bad.png b/assets/images/bad.png
similarity index 100%
rename from assets/shared/images/bad.png
rename to assets/images/bad.png
diff --git a/assets/preload/images/campaign_menu_UI_assets.png b/assets/images/campaign_menu_UI_assets.png
similarity index 100%
rename from assets/preload/images/campaign_menu_UI_assets.png
rename to assets/images/campaign_menu_UI_assets.png
diff --git a/assets/preload/images/campaign_menu_UI_assets.xml b/assets/images/campaign_menu_UI_assets.xml
similarity index 100%
rename from assets/preload/images/campaign_menu_UI_assets.xml
rename to assets/images/campaign_menu_UI_assets.xml
diff --git a/assets/preload/images/campaign_menu_UI_characters.png b/assets/images/campaign_menu_UI_characters.png
similarity index 100%
rename from assets/preload/images/campaign_menu_UI_characters.png
rename to assets/images/campaign_menu_UI_characters.png
diff --git a/assets/preload/images/campaign_menu_UI_characters.xml b/assets/images/campaign_menu_UI_characters.xml
similarity index 100%
rename from assets/preload/images/campaign_menu_UI_characters.xml
rename to assets/images/campaign_menu_UI_characters.xml
diff --git a/assets/shared/images/BOYFRIEND.png b/assets/images/characters/bf.png
similarity index 100%
rename from assets/shared/images/BOYFRIEND.png
rename to assets/images/characters/bf.png
diff --git a/assets/shared/images/BOYFRIEND.xml b/assets/images/characters/bf.xml
similarity index 100%
rename from assets/shared/images/BOYFRIEND.xml
rename to assets/images/characters/bf.xml
diff --git a/assets/shared/images/DADDY_DEAREST.png b/assets/images/characters/dad.png
similarity index 100%
rename from assets/shared/images/DADDY_DEAREST.png
rename to assets/images/characters/dad.png
diff --git a/assets/shared/images/DADDY_DEAREST.xml b/assets/images/characters/dad.xml
similarity index 100%
rename from assets/shared/images/DADDY_DEAREST.xml
rename to assets/images/characters/dad.xml
diff --git a/assets/shared/images/GF_assets.png b/assets/images/characters/gf.png
similarity index 100%
rename from assets/shared/images/GF_assets.png
rename to assets/images/characters/gf.png
diff --git a/assets/shared/images/GF_assets.xml b/assets/images/characters/gf.xml
similarity index 100%
rename from assets/shared/images/GF_assets.xml
rename to assets/images/characters/gf.xml
diff --git a/assets/shared/images/combo.png b/assets/images/combo.png
similarity index 100%
rename from assets/shared/images/combo.png
rename to assets/images/combo.png
diff --git a/assets/preload/images/gfDanceTitle.png b/assets/images/gfDanceTitle.png
similarity index 100%
rename from assets/preload/images/gfDanceTitle.png
rename to assets/images/gfDanceTitle.png
diff --git a/assets/preload/images/gfDanceTitle.xml b/assets/images/gfDanceTitle.xml
similarity index 100%
rename from assets/preload/images/gfDanceTitle.xml
rename to assets/images/gfDanceTitle.xml
diff --git a/assets/shared/images/go.png b/assets/images/go.png
similarity index 100%
rename from assets/shared/images/go.png
rename to assets/images/go.png
diff --git a/assets/shared/images/good.png b/assets/images/good.png
similarity index 100%
rename from assets/shared/images/good.png
rename to assets/images/good.png
diff --git a/assets/shared/images/grafix.png b/assets/images/grafix.png
similarity index 100%
rename from assets/shared/images/grafix.png
rename to assets/images/grafix.png
diff --git a/assets/shared/images/healthBar.png b/assets/images/healthBar.png
similarity index 100%
rename from assets/shared/images/healthBar.png
rename to assets/images/healthBar.png
diff --git a/assets/preload/images/iconGrid.png b/assets/images/iconGrid.png
similarity index 100%
rename from assets/preload/images/iconGrid.png
rename to assets/images/iconGrid.png
diff --git a/assets/shared/images/images-go-here.txt b/assets/images/images-go-here.txt
similarity index 100%
rename from assets/shared/images/images-go-here.txt
rename to assets/images/images-go-here.txt
diff --git a/assets/preload/images/logo.png b/assets/images/logo.png
similarity index 100%
rename from assets/preload/images/logo.png
rename to assets/images/logo.png
diff --git a/assets/preload/images/logoBumpin.png b/assets/images/logoBumpin.png
similarity index 100%
rename from assets/preload/images/logoBumpin.png
rename to assets/images/logoBumpin.png
diff --git a/assets/preload/images/logoBumpin.xml b/assets/images/logoBumpin.xml
similarity index 100%
rename from assets/preload/images/logoBumpin.xml
rename to assets/images/logoBumpin.xml
diff --git a/assets/shared/images/lol.png b/assets/images/lol.png
similarity index 100%
rename from assets/shared/images/lol.png
rename to assets/images/lol.png
diff --git a/assets/shared/images/lose.png b/assets/images/lose.png
similarity index 100%
rename from assets/shared/images/lose.png
rename to assets/images/lose.png
diff --git a/assets/shared/images/lose.xml b/assets/images/lose.xml
similarity index 100%
rename from assets/shared/images/lose.xml
rename to assets/images/lose.xml
diff --git a/assets/preload/images/menuBG.png b/assets/images/menuBG.png
similarity index 100%
rename from assets/preload/images/menuBG.png
rename to assets/images/menuBG.png
diff --git a/assets/preload/images/menuBGBlue.png b/assets/images/menuBGBlue.png
similarity index 100%
rename from assets/preload/images/menuBGBlue.png
rename to assets/images/menuBGBlue.png
diff --git a/assets/preload/images/menuBGMagenta.png b/assets/images/menuBGMagenta.png
similarity index 100%
rename from assets/preload/images/menuBGMagenta.png
rename to assets/images/menuBGMagenta.png
diff --git a/assets/preload/images/menuDesat.png b/assets/images/menuDesat.png
similarity index 100%
rename from assets/preload/images/menuDesat.png
rename to assets/images/menuDesat.png
diff --git a/assets/preload/images/newgrounds_logo.png b/assets/images/newgrounds_logo.png
similarity index 100%
rename from assets/preload/images/newgrounds_logo.png
rename to assets/images/newgrounds_logo.png
diff --git a/assets/preload/images/num0.png b/assets/images/num0.png
similarity index 100%
rename from assets/preload/images/num0.png
rename to assets/images/num0.png
diff --git a/assets/preload/images/num1.png b/assets/images/num1.png
similarity index 100%
rename from assets/preload/images/num1.png
rename to assets/images/num1.png
diff --git a/assets/preload/images/num2.png b/assets/images/num2.png
similarity index 100%
rename from assets/preload/images/num2.png
rename to assets/images/num2.png
diff --git a/assets/preload/images/num3.png b/assets/images/num3.png
similarity index 100%
rename from assets/preload/images/num3.png
rename to assets/images/num3.png
diff --git a/assets/preload/images/num4.png b/assets/images/num4.png
similarity index 100%
rename from assets/preload/images/num4.png
rename to assets/images/num4.png
diff --git a/assets/preload/images/num5.png b/assets/images/num5.png
similarity index 100%
rename from assets/preload/images/num5.png
rename to assets/images/num5.png
diff --git a/assets/preload/images/num6.png b/assets/images/num6.png
similarity index 100%
rename from assets/preload/images/num6.png
rename to assets/images/num6.png
diff --git a/assets/preload/images/num7.png b/assets/images/num7.png
similarity index 100%
rename from assets/preload/images/num7.png
rename to assets/images/num7.png
diff --git a/assets/preload/images/num8.png b/assets/images/num8.png
similarity index 100%
rename from assets/preload/images/num8.png
rename to assets/images/num8.png
diff --git a/assets/preload/images/num9.png b/assets/images/num9.png
similarity index 100%
rename from assets/preload/images/num9.png
rename to assets/images/num9.png
diff --git a/assets/shared/images/pauseAlt/bfLol.png b/assets/images/pauseAlt/bfLol.png
similarity index 100%
rename from assets/shared/images/pauseAlt/bfLol.png
rename to assets/images/pauseAlt/bfLol.png
diff --git a/assets/shared/images/pauseAlt/bfLol.xml b/assets/images/pauseAlt/bfLol.xml
similarity index 100%
rename from assets/shared/images/pauseAlt/bfLol.xml
rename to assets/images/pauseAlt/bfLol.xml
diff --git a/assets/shared/images/pauseAlt/pauseBG.png b/assets/images/pauseAlt/pauseBG.png
similarity index 100%
rename from assets/shared/images/pauseAlt/pauseBG.png
rename to assets/images/pauseAlt/pauseBG.png
diff --git a/assets/shared/images/pauseAlt/pauseUI.png b/assets/images/pauseAlt/pauseUI.png
similarity index 100%
rename from assets/shared/images/pauseAlt/pauseUI.png
rename to assets/images/pauseAlt/pauseUI.png
diff --git a/assets/shared/images/pauseAlt/pauseUI.xml b/assets/images/pauseAlt/pauseUI.xml
similarity index 100%
rename from assets/shared/images/pauseAlt/pauseUI.xml
rename to assets/images/pauseAlt/pauseUI.xml
diff --git a/assets/shared/images/ready.png b/assets/images/ready.png
similarity index 100%
rename from assets/shared/images/ready.png
rename to assets/images/ready.png
diff --git a/assets/shared/images/restart.png b/assets/images/restart.png
similarity index 100%
rename from assets/shared/images/restart.png
rename to assets/images/restart.png
diff --git a/assets/shared/images/screencapTierImage.png b/assets/images/screencapTierImage.png
similarity index 100%
rename from assets/shared/images/screencapTierImage.png
rename to assets/images/screencapTierImage.png
diff --git a/assets/shared/images/set.png b/assets/images/set.png
similarity index 100%
rename from assets/shared/images/set.png
rename to assets/images/set.png
diff --git a/assets/shared/images/shit.png b/assets/images/shit.png
similarity index 100%
rename from assets/shared/images/shit.png
rename to assets/images/shit.png
diff --git a/assets/shared/images/sick.png b/assets/images/sick.png
similarity index 100%
rename from assets/shared/images/sick.png
rename to assets/images/sick.png
diff --git a/assets/shared/images/speech_bubble_talking.png b/assets/images/speech_bubble_talking.png
similarity index 100%
rename from assets/shared/images/speech_bubble_talking.png
rename to assets/images/speech_bubble_talking.png
diff --git a/assets/shared/images/speech_bubble_talking.xml b/assets/images/speech_bubble_talking.xml
similarity index 100%
rename from assets/shared/images/speech_bubble_talking.xml
rename to assets/images/speech_bubble_talking.xml
diff --git a/assets/shared/images/stage_light.png b/assets/images/stage_light.png
similarity index 100%
rename from assets/shared/images/stage_light.png
rename to assets/images/stage_light.png
diff --git a/assets/shared/images/stageback.png b/assets/images/stageback.png
similarity index 100%
rename from assets/shared/images/stageback.png
rename to assets/images/stageback.png
diff --git a/assets/shared/images/stagecurtains.png b/assets/images/stagecurtains.png
similarity index 100%
rename from assets/shared/images/stagecurtains.png
rename to assets/images/stagecurtains.png
diff --git a/assets/shared/images/stagefront.png b/assets/images/stagefront.png
similarity index 100%
rename from assets/shared/images/stagefront.png
rename to assets/images/stagefront.png
diff --git a/assets/preload/images/storymenu/week0.png b/assets/images/storymenu/week0.png
similarity index 100%
rename from assets/preload/images/storymenu/week0.png
rename to assets/images/storymenu/week0.png
diff --git a/assets/preload/images/storymenu/week1.png b/assets/images/storymenu/week1.png
similarity index 100%
rename from assets/preload/images/storymenu/week1.png
rename to assets/images/storymenu/week1.png
diff --git a/assets/preload/images/storymenu/week2.png b/assets/images/storymenu/week2.png
similarity index 100%
rename from assets/preload/images/storymenu/week2.png
rename to assets/images/storymenu/week2.png
diff --git a/assets/preload/images/storymenu/week3.png b/assets/images/storymenu/week3.png
similarity index 100%
rename from assets/preload/images/storymenu/week3.png
rename to assets/images/storymenu/week3.png
diff --git a/assets/preload/images/storymenu/week4.png b/assets/images/storymenu/week4.png
similarity index 100%
rename from assets/preload/images/storymenu/week4.png
rename to assets/images/storymenu/week4.png
diff --git a/assets/preload/images/storymenu/week5.png b/assets/images/storymenu/week5.png
similarity index 100%
rename from assets/preload/images/storymenu/week5.png
rename to assets/images/storymenu/week5.png
diff --git a/assets/preload/images/storymenu/week6.png b/assets/images/storymenu/week6.png
similarity index 100%
rename from assets/preload/images/storymenu/week6.png
rename to assets/images/storymenu/week6.png
diff --git a/assets/preload/images/titleEnter.png b/assets/images/titleEnter.png
similarity index 100%
rename from assets/preload/images/titleEnter.png
rename to assets/images/titleEnter.png
diff --git a/assets/preload/images/titleEnter.xml b/assets/images/titleEnter.xml
similarity index 100%
rename from assets/preload/images/titleEnter.xml
rename to assets/images/titleEnter.xml
diff --git a/assets/shared/images/week54prototype.png b/assets/images/week54prototype.png
similarity index 100%
rename from assets/shared/images/week54prototype.png
rename to assets/images/week54prototype.png
diff --git a/assets/shared/images/zzzzzzzz.png b/assets/images/zzzzzzzz.png
similarity index 100%
rename from assets/shared/images/zzzzzzzz.png
rename to assets/images/zzzzzzzz.png
diff --git a/assets/shared/music/breakfast.mp3 b/assets/music/breakfast.mp3
similarity index 100%
rename from assets/shared/music/breakfast.mp3
rename to assets/music/breakfast.mp3
diff --git a/assets/shared/music/breakfast.ogg b/assets/music/breakfast.ogg
similarity index 100%
rename from assets/shared/music/breakfast.ogg
rename to assets/music/breakfast.ogg
diff --git a/assets/preload/music/freakyMenu.mp3 b/assets/music/freakyMenu.mp3
similarity index 100%
rename from assets/preload/music/freakyMenu.mp3
rename to assets/music/freakyMenu.mp3
diff --git a/assets/preload/music/freakyMenu.ogg b/assets/music/freakyMenu.ogg
similarity index 100%
rename from assets/preload/music/freakyMenu.ogg
rename to assets/music/freakyMenu.ogg
diff --git a/assets/shared/music/gameOver.mp3 b/assets/music/gameOver.mp3
similarity index 100%
rename from assets/shared/music/gameOver.mp3
rename to assets/music/gameOver.mp3
diff --git a/assets/shared/music/gameOver.ogg b/assets/music/gameOver.ogg
similarity index 100%
rename from assets/shared/music/gameOver.ogg
rename to assets/music/gameOver.ogg
diff --git a/assets/shared/music/gameOverEnd.mp3 b/assets/music/gameOverEnd.mp3
similarity index 100%
rename from assets/shared/music/gameOverEnd.mp3
rename to assets/music/gameOverEnd.mp3
diff --git a/assets/shared/music/gameOverEnd.ogg b/assets/music/gameOverEnd.ogg
similarity index 100%
rename from assets/shared/music/gameOverEnd.ogg
rename to assets/music/gameOverEnd.ogg
diff --git a/assets/preload/data/main-view.xml b/assets/preload/data/main-view.xml
deleted file mode 100644
index cafcff6c..00000000
--- a/assets/preload/data/main-view.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/assets/shared/sounds/ANGRY.mp3 b/assets/sounds/ANGRY.mp3
similarity index 100%
rename from assets/shared/sounds/ANGRY.mp3
rename to assets/sounds/ANGRY.mp3
diff --git a/assets/shared/sounds/ANGRY.ogg b/assets/sounds/ANGRY.ogg
similarity index 100%
rename from assets/shared/sounds/ANGRY.ogg
rename to assets/sounds/ANGRY.ogg
diff --git a/assets/shared/sounds/ANGRY_TEXT_BOX.mp3 b/assets/sounds/ANGRY_TEXT_BOX.mp3
similarity index 100%
rename from assets/shared/sounds/ANGRY_TEXT_BOX.mp3
rename to assets/sounds/ANGRY_TEXT_BOX.mp3
diff --git a/assets/shared/sounds/ANGRY_TEXT_BOX.ogg b/assets/sounds/ANGRY_TEXT_BOX.ogg
similarity index 100%
rename from assets/shared/sounds/ANGRY_TEXT_BOX.ogg
rename to assets/sounds/ANGRY_TEXT_BOX.ogg
diff --git a/assets/shared/sounds/GF_1.mp3 b/assets/sounds/GF_1.mp3
similarity index 100%
rename from assets/shared/sounds/GF_1.mp3
rename to assets/sounds/GF_1.mp3
diff --git a/assets/shared/sounds/GF_1.ogg b/assets/sounds/GF_1.ogg
similarity index 100%
rename from assets/shared/sounds/GF_1.ogg
rename to assets/sounds/GF_1.ogg
diff --git a/assets/shared/sounds/GF_2.mp3 b/assets/sounds/GF_2.mp3
similarity index 100%
rename from assets/shared/sounds/GF_2.mp3
rename to assets/sounds/GF_2.mp3
diff --git a/assets/shared/sounds/GF_2.ogg b/assets/sounds/GF_2.ogg
similarity index 100%
rename from assets/shared/sounds/GF_2.ogg
rename to assets/sounds/GF_2.ogg
diff --git a/assets/shared/sounds/GF_3.mp3 b/assets/sounds/GF_3.mp3
similarity index 100%
rename from assets/shared/sounds/GF_3.mp3
rename to assets/sounds/GF_3.mp3
diff --git a/assets/shared/sounds/GF_3.ogg b/assets/sounds/GF_3.ogg
similarity index 100%
rename from assets/shared/sounds/GF_3.ogg
rename to assets/sounds/GF_3.ogg
diff --git a/assets/shared/sounds/GF_4.mp3 b/assets/sounds/GF_4.mp3
similarity index 100%
rename from assets/shared/sounds/GF_4.mp3
rename to assets/sounds/GF_4.mp3
diff --git a/assets/shared/sounds/GF_4.ogg b/assets/sounds/GF_4.ogg
similarity index 100%
rename from assets/shared/sounds/GF_4.ogg
rename to assets/sounds/GF_4.ogg
diff --git a/assets/shared/sounds/Lights_Shut_off.mp3 b/assets/sounds/Lights_Shut_off.mp3
similarity index 100%
rename from assets/shared/sounds/Lights_Shut_off.mp3
rename to assets/sounds/Lights_Shut_off.mp3
diff --git a/assets/shared/sounds/Lights_Shut_off.ogg b/assets/sounds/Lights_Shut_off.ogg
similarity index 100%
rename from assets/shared/sounds/Lights_Shut_off.ogg
rename to assets/sounds/Lights_Shut_off.ogg
diff --git a/assets/shared/sounds/Lights_Turn_On.mp3 b/assets/sounds/Lights_Turn_On.mp3
similarity index 100%
rename from assets/shared/sounds/Lights_Turn_On.mp3
rename to assets/sounds/Lights_Turn_On.mp3
diff --git a/assets/shared/sounds/Lights_Turn_On.ogg b/assets/sounds/Lights_Turn_On.ogg
similarity index 100%
rename from assets/shared/sounds/Lights_Turn_On.ogg
rename to assets/sounds/Lights_Turn_On.ogg
diff --git a/assets/shared/sounds/Senpai_Dies.mp3 b/assets/sounds/Senpai_Dies.mp3
similarity index 100%
rename from assets/shared/sounds/Senpai_Dies.mp3
rename to assets/sounds/Senpai_Dies.mp3
diff --git a/assets/shared/sounds/Senpai_Dies.ogg b/assets/sounds/Senpai_Dies.ogg
similarity index 100%
rename from assets/shared/sounds/Senpai_Dies.ogg
rename to assets/sounds/Senpai_Dies.ogg
diff --git a/assets/shared/sounds/badnoise1.mp3 b/assets/sounds/badnoise1.mp3
similarity index 100%
rename from assets/shared/sounds/badnoise1.mp3
rename to assets/sounds/badnoise1.mp3
diff --git a/assets/shared/sounds/badnoise1.ogg b/assets/sounds/badnoise1.ogg
similarity index 100%
rename from assets/shared/sounds/badnoise1.ogg
rename to assets/sounds/badnoise1.ogg
diff --git a/assets/shared/sounds/badnoise2.mp3 b/assets/sounds/badnoise2.mp3
similarity index 100%
rename from assets/shared/sounds/badnoise2.mp3
rename to assets/sounds/badnoise2.mp3
diff --git a/assets/shared/sounds/badnoise2.ogg b/assets/sounds/badnoise2.ogg
similarity index 100%
rename from assets/shared/sounds/badnoise2.ogg
rename to assets/sounds/badnoise2.ogg
diff --git a/assets/shared/sounds/badnoise3.mp3 b/assets/sounds/badnoise3.mp3
similarity index 100%
rename from assets/shared/sounds/badnoise3.mp3
rename to assets/sounds/badnoise3.mp3
diff --git a/assets/shared/sounds/badnoise3.ogg b/assets/sounds/badnoise3.ogg
similarity index 100%
rename from assets/shared/sounds/badnoise3.ogg
rename to assets/sounds/badnoise3.ogg
diff --git a/assets/preload/sounds/cancelMenu.mp3 b/assets/sounds/cancelMenu.mp3
similarity index 100%
rename from assets/preload/sounds/cancelMenu.mp3
rename to assets/sounds/cancelMenu.mp3
diff --git a/assets/preload/sounds/cancelMenu.ogg b/assets/sounds/cancelMenu.ogg
similarity index 100%
rename from assets/preload/sounds/cancelMenu.ogg
rename to assets/sounds/cancelMenu.ogg
diff --git a/assets/shared/sounds/carPass0.mp3 b/assets/sounds/carPass0.mp3
similarity index 100%
rename from assets/shared/sounds/carPass0.mp3
rename to assets/sounds/carPass0.mp3
diff --git a/assets/shared/sounds/carPass0.ogg b/assets/sounds/carPass0.ogg
similarity index 100%
rename from assets/shared/sounds/carPass0.ogg
rename to assets/sounds/carPass0.ogg
diff --git a/assets/shared/sounds/carPass1.mp3 b/assets/sounds/carPass1.mp3
similarity index 100%
rename from assets/shared/sounds/carPass1.mp3
rename to assets/sounds/carPass1.mp3
diff --git a/assets/shared/sounds/carPass1.ogg b/assets/sounds/carPass1.ogg
similarity index 100%
rename from assets/shared/sounds/carPass1.ogg
rename to assets/sounds/carPass1.ogg
diff --git a/assets/shared/sounds/clickText.mp3 b/assets/sounds/clickText.mp3
similarity index 100%
rename from assets/shared/sounds/clickText.mp3
rename to assets/sounds/clickText.mp3
diff --git a/assets/shared/sounds/clickText.ogg b/assets/sounds/clickText.ogg
similarity index 100%
rename from assets/shared/sounds/clickText.ogg
rename to assets/sounds/clickText.ogg
diff --git a/assets/preload/sounds/confirmMenu.mp3 b/assets/sounds/confirmMenu.mp3
similarity index 100%
rename from assets/preload/sounds/confirmMenu.mp3
rename to assets/sounds/confirmMenu.mp3
diff --git a/assets/preload/sounds/confirmMenu.ogg b/assets/sounds/confirmMenu.ogg
similarity index 100%
rename from assets/preload/sounds/confirmMenu.ogg
rename to assets/sounds/confirmMenu.ogg
diff --git a/assets/shared/sounds/fnf_loss_sfx-pixel.mp3 b/assets/sounds/fnf_loss_sfx-pixel.mp3
similarity index 100%
rename from assets/shared/sounds/fnf_loss_sfx-pixel.mp3
rename to assets/sounds/fnf_loss_sfx-pixel.mp3
diff --git a/assets/shared/sounds/fnf_loss_sfx-pixel.ogg b/assets/sounds/fnf_loss_sfx-pixel.ogg
similarity index 100%
rename from assets/shared/sounds/fnf_loss_sfx-pixel.ogg
rename to assets/sounds/fnf_loss_sfx-pixel.ogg
diff --git a/assets/shared/sounds/fnf_loss_sfx.mp3 b/assets/sounds/fnf_loss_sfx.mp3
similarity index 100%
rename from assets/shared/sounds/fnf_loss_sfx.mp3
rename to assets/sounds/fnf_loss_sfx.mp3
diff --git a/assets/shared/sounds/fnf_loss_sfx.ogg b/assets/sounds/fnf_loss_sfx.ogg
similarity index 100%
rename from assets/shared/sounds/fnf_loss_sfx.ogg
rename to assets/sounds/fnf_loss_sfx.ogg
diff --git a/assets/shared/sounds/intro1-pixel.mp3 b/assets/sounds/intro1-pixel.mp3
similarity index 100%
rename from assets/shared/sounds/intro1-pixel.mp3
rename to assets/sounds/intro1-pixel.mp3
diff --git a/assets/shared/sounds/intro1-pixel.ogg b/assets/sounds/intro1-pixel.ogg
similarity index 100%
rename from assets/shared/sounds/intro1-pixel.ogg
rename to assets/sounds/intro1-pixel.ogg
diff --git a/assets/shared/sounds/intro1.mp3 b/assets/sounds/intro1.mp3
similarity index 100%
rename from assets/shared/sounds/intro1.mp3
rename to assets/sounds/intro1.mp3
diff --git a/assets/shared/sounds/intro1.ogg b/assets/sounds/intro1.ogg
similarity index 100%
rename from assets/shared/sounds/intro1.ogg
rename to assets/sounds/intro1.ogg
diff --git a/assets/shared/sounds/intro2-pixel.mp3 b/assets/sounds/intro2-pixel.mp3
similarity index 100%
rename from assets/shared/sounds/intro2-pixel.mp3
rename to assets/sounds/intro2-pixel.mp3
diff --git a/assets/shared/sounds/intro2-pixel.ogg b/assets/sounds/intro2-pixel.ogg
similarity index 100%
rename from assets/shared/sounds/intro2-pixel.ogg
rename to assets/sounds/intro2-pixel.ogg
diff --git a/assets/shared/sounds/intro2.mp3 b/assets/sounds/intro2.mp3
similarity index 100%
rename from assets/shared/sounds/intro2.mp3
rename to assets/sounds/intro2.mp3
diff --git a/assets/shared/sounds/intro2.ogg b/assets/sounds/intro2.ogg
similarity index 100%
rename from assets/shared/sounds/intro2.ogg
rename to assets/sounds/intro2.ogg
diff --git a/assets/shared/sounds/intro3-pixel.mp3 b/assets/sounds/intro3-pixel.mp3
similarity index 100%
rename from assets/shared/sounds/intro3-pixel.mp3
rename to assets/sounds/intro3-pixel.mp3
diff --git a/assets/shared/sounds/intro3-pixel.ogg b/assets/sounds/intro3-pixel.ogg
similarity index 100%
rename from assets/shared/sounds/intro3-pixel.ogg
rename to assets/sounds/intro3-pixel.ogg
diff --git a/assets/shared/sounds/intro3.mp3 b/assets/sounds/intro3.mp3
similarity index 100%
rename from assets/shared/sounds/intro3.mp3
rename to assets/sounds/intro3.mp3
diff --git a/assets/shared/sounds/intro3.ogg b/assets/sounds/intro3.ogg
similarity index 100%
rename from assets/shared/sounds/intro3.ogg
rename to assets/sounds/intro3.ogg
diff --git a/assets/shared/sounds/introGo-pixel.mp3 b/assets/sounds/introGo-pixel.mp3
similarity index 100%
rename from assets/shared/sounds/introGo-pixel.mp3
rename to assets/sounds/introGo-pixel.mp3
diff --git a/assets/shared/sounds/introGo-pixel.ogg b/assets/sounds/introGo-pixel.ogg
similarity index 100%
rename from assets/shared/sounds/introGo-pixel.ogg
rename to assets/sounds/introGo-pixel.ogg
diff --git a/assets/shared/sounds/introGo.mp3 b/assets/sounds/introGo.mp3
similarity index 100%
rename from assets/shared/sounds/introGo.mp3
rename to assets/sounds/introGo.mp3
diff --git a/assets/shared/sounds/introGo.ogg b/assets/sounds/introGo.ogg
similarity index 100%
rename from assets/shared/sounds/introGo.ogg
rename to assets/sounds/introGo.ogg
diff --git a/assets/shared/sounds/missnote1.mp3 b/assets/sounds/missnote1.mp3
similarity index 100%
rename from assets/shared/sounds/missnote1.mp3
rename to assets/sounds/missnote1.mp3
diff --git a/assets/shared/sounds/missnote1.ogg b/assets/sounds/missnote1.ogg
similarity index 100%
rename from assets/shared/sounds/missnote1.ogg
rename to assets/sounds/missnote1.ogg
diff --git a/assets/shared/sounds/missnote2.mp3 b/assets/sounds/missnote2.mp3
similarity index 100%
rename from assets/shared/sounds/missnote2.mp3
rename to assets/sounds/missnote2.mp3
diff --git a/assets/shared/sounds/missnote2.ogg b/assets/sounds/missnote2.ogg
similarity index 100%
rename from assets/shared/sounds/missnote2.ogg
rename to assets/sounds/missnote2.ogg
diff --git a/assets/shared/sounds/missnote3.mp3 b/assets/sounds/missnote3.mp3
similarity index 100%
rename from assets/shared/sounds/missnote3.mp3
rename to assets/sounds/missnote3.mp3
diff --git a/assets/shared/sounds/missnote3.ogg b/assets/sounds/missnote3.ogg
similarity index 100%
rename from assets/shared/sounds/missnote3.ogg
rename to assets/sounds/missnote3.ogg
diff --git a/assets/shared/sounds/pixelText.mp3 b/assets/sounds/pixelText.mp3
similarity index 100%
rename from assets/shared/sounds/pixelText.mp3
rename to assets/sounds/pixelText.mp3
diff --git a/assets/shared/sounds/pixelText.ogg b/assets/sounds/pixelText.ogg
similarity index 100%
rename from assets/shared/sounds/pixelText.ogg
rename to assets/sounds/pixelText.ogg
diff --git a/assets/preload/sounds/scrollMenu.mp3 b/assets/sounds/scrollMenu.mp3
similarity index 100%
rename from assets/preload/sounds/scrollMenu.mp3
rename to assets/sounds/scrollMenu.mp3
diff --git a/assets/preload/sounds/scrollMenu.ogg b/assets/sounds/scrollMenu.ogg
similarity index 100%
rename from assets/preload/sounds/scrollMenu.ogg
rename to assets/sounds/scrollMenu.ogg
diff --git a/assets/shared/sounds/soundTest.mp3 b/assets/sounds/soundTest.mp3
similarity index 100%
rename from assets/shared/sounds/soundTest.mp3
rename to assets/sounds/soundTest.mp3
diff --git a/assets/shared/sounds/soundTest.ogg b/assets/sounds/soundTest.ogg
similarity index 100%
rename from assets/shared/sounds/soundTest.ogg
rename to assets/sounds/soundTest.ogg
diff --git a/assets/shared/sounds/sounds-go-here.txt b/assets/sounds/sounds-go-here.txt
similarity index 100%
rename from assets/shared/sounds/sounds-go-here.txt
rename to assets/sounds/sounds-go-here.txt
diff --git a/assets/shared/sounds/thunder_1.mp3 b/assets/sounds/thunder_1.mp3
similarity index 100%
rename from assets/shared/sounds/thunder_1.mp3
rename to assets/sounds/thunder_1.mp3
diff --git a/assets/shared/sounds/thunder_1.ogg b/assets/sounds/thunder_1.ogg
similarity index 100%
rename from assets/shared/sounds/thunder_1.ogg
rename to assets/sounds/thunder_1.ogg
diff --git a/assets/shared/sounds/thunder_2.mp3 b/assets/sounds/thunder_2.mp3
similarity index 100%
rename from assets/shared/sounds/thunder_2.mp3
rename to assets/sounds/thunder_2.mp3
diff --git a/assets/shared/sounds/thunder_2.ogg b/assets/sounds/thunder_2.ogg
similarity index 100%
rename from assets/shared/sounds/thunder_2.ogg
rename to assets/sounds/thunder_2.ogg
diff --git a/assets/shared/sounds/train_passes.mp3 b/assets/sounds/train_passes.mp3
similarity index 100%
rename from assets/shared/sounds/train_passes.mp3
rename to assets/sounds/train_passes.mp3
diff --git a/assets/shared/sounds/train_passes.ogg b/assets/sounds/train_passes.ogg
similarity index 100%
rename from assets/shared/sounds/train_passes.ogg
rename to assets/sounds/train_passes.ogg
diff --git a/assets/stages/default.stage.json b/assets/stages/default.stage.json
new file mode 100644
index 00000000..544b7b4d
--- /dev/null
+++ b/assets/stages/default.stage.json
@@ -0,0 +1,3 @@
+{
+
+}
\ No newline at end of file
diff --git a/buildnumber.txt b/buildnumber.txt
index 83233289..bd753ccc 100644
--- a/buildnumber.txt
+++ b/buildnumber.txt
@@ -1 +1 @@
-67
\ No newline at end of file
+94
\ No newline at end of file
diff --git a/source/ChartingState.hx b/source/ChartingState.hx
index 12130b3f..54cf8c8f 100644
--- a/source/ChartingState.hx
+++ b/source/ChartingState.hx
@@ -1018,7 +1018,7 @@ class ChartingState extends MusicBeatState
function loadJson(song:String):Void
{
- PlayState.SONG = Song.loadFromJson(song.toLowerCase(), song.toLowerCase());
+ PlayState.SONG = Song.loadFromJson(PlayState.storyPlaylist[0].toLowerCase(), CoolUtil.difficultyString());
FlxG.resetState();
}
diff --git a/source/CoolUtil.hx b/source/CoolUtil.hx
index d4c57c05..2e07f043 100644
--- a/source/CoolUtil.hx
+++ b/source/CoolUtil.hx
@@ -1,6 +1,7 @@
package;
import lime.utils.Assets;
+import flixel.animation.FlxAnimation;
using StringTools;
@@ -22,4 +23,11 @@ class CoolUtil
{
return [for (i in min...max) i];
}
+
+ public static function switchAnimFrames(anim1:FlxAnimation, anim2:FlxAnimation) {
+ if (anim1 == null || anim2 == null) return;
+ var old = anim1.frames;
+ anim1.frames = anim2.frames;
+ anim2.frames = old;
+ }
}
diff --git a/source/Paths.hx b/source/Paths.hx
index 5a3c1df7..bfcf83eb 100644
--- a/source/Paths.hx
+++ b/source/Paths.hx
@@ -23,12 +23,12 @@ class Paths
currentLevel = name.toLowerCase();
}
- static function getPath(file:String, type:AssetType, library:Null)
+ static function getPath(file:String, type:AssetType, library:Null, skipModsVerification:Bool = false)
{
if (library != null && library.startsWith("mods/")) {
file = file.toLowerCase();
library = library.toLowerCase();
- } else if (ModsFolder.currentModFolder != null) {
+ } else if (!skipModsVerification && ModsFolder.currentModFolder != null) {
var modPath = getPath(file, type, 'mods/${ModsFolder.currentModFolder}');
if (OpenFlAssets.exists(modPath)) return modPath;
}
@@ -115,6 +115,27 @@ class Paths
return getPath('images/$key.png', IMAGE, library);
}
+ static public function chart(song:String, ?difficulty:String = "normal"):String {
+ difficulty = difficulty.toLowerCase();
+ song = song.toLowerCase();
+
+ var difficultyEnd = (difficulty == "normal") ? "" : '-$difficulty';
+
+ // charts/your-song/hard.json
+ var p = getPath('charts/$song/$difficulty.json', TEXT, null);
+ if (OpenFlAssets.exists(p)) return p;
+
+ // charts/your-song/your-song-hard.json
+ var p2 = getPath('charts/$song/$song$difficultyEnd.json', TEXT, null);
+ if (OpenFlAssets.exists(p2)) return p2;
+
+ // data/your-song/your-song-hard.json (default old format)
+ p2 = json('$song/$song$difficultyEnd');
+ if (OpenFlAssets.exists(p2)) return p2;
+
+ return p; // returns the normal one so that it shows the correct path in the error message.
+ }
+
inline static public function font(key:String)
{
return 'assets/fonts/$key';
@@ -129,4 +150,24 @@ class Paths
{
return FlxAtlasFrames.fromSpriteSheetPacker(image(key, library), file('images/$key.txt', library));
}
+
+ inline static public function getFolderContent(key:String, includeSource:Bool = false, ?library:String):Array {
+ // designed to work both on windows and web
+
+ while(key.charAt(key.length-1) == "/") key.substr(0, key.length-1);
+ var path = getPath('$key/.foldercontent', TEXT, library);
+ var content:Array = [];
+ if (OpenFlAssets.exists(path)) {
+ var text = OpenFlAssets.getText(path);
+ for(e in text.split("\n")) content.push(e.trim());
+ }
+ if (includeSource) {
+ var path = getPath('$key/.foldercontent', TEXT, library, true);
+ if (OpenFlAssets.exists(path)) {
+ var text = OpenFlAssets.getText(path);
+ for(e in text.split("\n")) content.push(e.trim());
+ }
+ }
+ return content;
+ }
}
diff --git a/source/Song.hx b/source/Song.hx
index 407abb2d..80c6bc39 100644
--- a/source/Song.hx
+++ b/source/Song.hx
@@ -38,9 +38,11 @@ class Song
this.bpm = bpm;
}
- public static function loadFromJson(jsonInput:String, ?folder:String):SwagSong
+ public static function loadFromJson(songName:String, ?difficulty:String = "normal"):SwagSong
{
- var rawJson = Assets.getText(Paths.json(folder.toLowerCase() + '/' + jsonInput.toLowerCase())).trim();
+ var assetPath = Paths.chart(songName, difficulty);
+ PlayState.fromMods = !assetPath.startsWith("mods");
+ var rawJson = Assets.getText(assetPath).trim();
while (!rawJson.endsWith("}"))
{
@@ -48,22 +50,6 @@ class Song
// LOL GOING THROUGH THE BULLSHIT TO CLEAN IDK WHATS STRANGE
}
- // FIX THE CASTING ON WINDOWS/NATIVE
- // Windows???
- // trace(songData);
-
- // trace('LOADED FROM JSON: ' + songData.notes);
- /*
- for (i in 0...songData.notes.length)
- {
- trace('LOADED FROM JSON: ' + songData.notes[i].sectionNotes);
- // songData.notes[i].sectionNotes = songData.notes[i].sectionNotes
- }
-
- daNotes = songData.notes;
- daSong = songData.song;
- daBpm = songData.bpm; */
-
return parseJSONshit(rawJson);
}
diff --git a/source/funkin/game/Character.hx b/source/funkin/game/Character.hx
index aadda9e7..112bbbcd 100644
--- a/source/funkin/game/Character.hx
+++ b/source/funkin/game/Character.hx
@@ -6,6 +6,10 @@ import flixel.FlxSprite;
import flixel.animation.FlxBaseAnimation;
import flixel.graphics.frames.FlxAtlasFrames;
+import openfl.utils.Assets;
+import haxe.xml.Access;
+import haxe.Exception;
+
using StringTools;
class Character extends FlxSprite implements IBeatReceiver
@@ -21,6 +25,8 @@ class Character extends FlxSprite implements IBeatReceiver
public var lastHit:Float = -5000;
public var dadVar:Float = 4;
+ public var playerOffsets:Bool = false;
+
public function new(x:Float, y:Float, ?character:String = "bf", ?isPlayer:Bool = false)
{
super(x, y);
@@ -32,502 +38,558 @@ class Character extends FlxSprite implements IBeatReceiver
var tex:FlxAtlasFrames;
antialiasing = true;
- switch (curCharacter)
- {
- case 'gf':
- // GIRLFRIEND CODE
- tex = Paths.getSparrowAtlas('GF_assets');
- frames = tex;
- animation.addByPrefix('cheer', 'GF Cheer', 24, false);
- animation.addByPrefix('singLEFT', 'GF left note', 24, false);
- animation.addByPrefix('singRIGHT', 'GF Right Note', 24, false);
- animation.addByPrefix('singUP', 'GF Up Note', 24, false);
- animation.addByPrefix('singDOWN', 'GF Down Note', 24, false);
- animation.addByIndices('sad', 'gf sad', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "", 24, false);
- animation.addByIndices('danceLeft', 'GF Dancing Beat', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false);
- animation.addByIndices('danceRight', 'GF Dancing Beat', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false);
- animation.addByIndices('hairBlow', "GF Dancing Beat Hair blowing", [0, 1, 2, 3], "", 24);
- animation.addByIndices('hairFall', "GF Dancing Beat Hair Landing", [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "", 24, false);
- animation.addByPrefix('scared', 'GF FEAR', 24);
-
- addOffset('cheer');
- addOffset('sad', -2, -2);
- addOffset('danceLeft', 0, -9);
- addOffset('danceRight', 0, -9);
-
- addOffset("singUP", 0, 4);
- addOffset("singRIGHT", 0, -20);
- addOffset("singLEFT", 0, -19);
- addOffset("singDOWN", 0, -20);
- addOffset('hairBlow', 45, -8);
- addOffset('hairFall', 0, -9);
-
- addOffset('scared', -2, -17);
-
- playAnim('danceRight');
-
- case 'gf-christmas':
- tex = Paths.getSparrowAtlas('christmas/gfChristmas');
- frames = tex;
- animation.addByPrefix('cheer', 'GF Cheer', 24, false);
- animation.addByPrefix('singLEFT', 'GF left note', 24, false);
- animation.addByPrefix('singRIGHT', 'GF Right Note', 24, false);
- animation.addByPrefix('singUP', 'GF Up Note', 24, false);
- animation.addByPrefix('singDOWN', 'GF Down Note', 24, false);
- animation.addByIndices('sad', 'gf sad', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "", 24, false);
- animation.addByIndices('danceLeft', 'GF Dancing Beat', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false);
- animation.addByIndices('danceRight', 'GF Dancing Beat', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false);
- animation.addByIndices('hairBlow', "GF Dancing Beat Hair blowing", [0, 1, 2, 3], "", 24);
- animation.addByIndices('hairFall', "GF Dancing Beat Hair Landing", [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "", 24, false);
- animation.addByPrefix('scared', 'GF FEAR', 24);
-
- addOffset('cheer');
- addOffset('sad', -2, -2);
- addOffset('danceLeft', 0, -9);
- addOffset('danceRight', 0, -9);
-
- addOffset("singUP", 0, 4);
- addOffset("singRIGHT", 0, -20);
- addOffset("singLEFT", 0, -19);
- addOffset("singDOWN", 0, -20);
- addOffset('hairBlow', 45, -8);
- addOffset('hairFall', 0, -9);
-
- addOffset('scared', -2, -17);
-
- playAnim('danceRight');
-
- case 'gf-car':
- tex = Paths.getSparrowAtlas('gfCar');
- frames = tex;
- animation.addByIndices('singUP', 'GF Dancing Beat Hair blowing CAR', [0], "", 24, false);
- animation.addByIndices('danceLeft', 'GF Dancing Beat Hair blowing CAR', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false);
- animation.addByIndices('danceRight', 'GF Dancing Beat Hair blowing CAR', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24,
- false);
-
- addOffset('danceLeft', 0);
- addOffset('danceRight', 0);
-
- playAnim('danceRight');
-
- case 'gf-pixel':
- tex = Paths.getSparrowAtlas('weeb/gfPixel');
- frames = tex;
- animation.addByIndices('singUP', 'GF IDLE', [2], "", 24, false);
- animation.addByIndices('danceLeft', 'GF IDLE', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false);
- animation.addByIndices('danceRight', 'GF IDLE', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false);
-
- addOffset('danceLeft', 0);
- addOffset('danceRight', 0);
-
- playAnim('danceRight');
-
- setGraphicSize(Std.int(width * PlayState.daPixelZoom));
- updateHitbox();
- antialiasing = false;
-
- case 'dad':
- // DAD ANIMATION LOADING CODE
- tex = Paths.getSparrowAtlas('DADDY_DEAREST');
- frames = tex;
- animation.addByPrefix('idle', 'Dad idle dance', 24);
- animation.addByPrefix('singUP', 'Dad Sing Note UP', 24);
- animation.addByPrefix('singRIGHT', 'Dad Sing Note RIGHT', 24);
- animation.addByPrefix('singDOWN', 'Dad Sing Note DOWN', 24);
- animation.addByPrefix('singLEFT', 'Dad Sing Note LEFT', 24);
-
- addOffset('idle');
- addOffset("singUP", -6, 50);
- addOffset("singRIGHT", 0, 27);
- addOffset("singLEFT", -10, 10);
- addOffset("singDOWN", 0, -30);
-
- dadVar = 6.1;
-
- playAnim('idle');
- case 'spooky':
- tex = Paths.getSparrowAtlas('spooky_kids_assets');
- frames = tex;
- animation.addByPrefix('singUP', 'spooky UP NOTE', 24, false);
- animation.addByPrefix('singDOWN', 'spooky DOWN note', 24, false);
- animation.addByPrefix('singLEFT', 'note sing left', 24, false);
- animation.addByPrefix('singRIGHT', 'spooky sing right', 24, false);
- animation.addByIndices('danceLeft', 'spooky dance idle', [0, 2, 6], "", 12, false);
- animation.addByIndices('danceRight', 'spooky dance idle', [8, 10, 12, 14], "", 12, false);
-
- addOffset('danceLeft');
- addOffset('danceRight');
-
- addOffset("singUP", -20, 26);
- addOffset("singRIGHT", -130, -14);
- addOffset("singLEFT", 130, -10);
- addOffset("singDOWN", -50, -130);
-
- playAnim('danceRight');
- case 'mom':
- tex = Paths.getSparrowAtlas('Mom_Assets');
- frames = tex;
-
- animation.addByPrefix('idle', "Mom Idle", 24, false);
- animation.addByPrefix('singUP', "Mom Up Pose", 24, false);
- animation.addByPrefix('singDOWN', "MOM DOWN POSE", 24, false);
- animation.addByPrefix('singLEFT', 'Mom Left Pose', 24, false);
- // ANIMATION IS CALLED MOM LEFT POSE BUT ITS FOR THE RIGHT
- // CUZ DAVE IS DUMB!
- animation.addByPrefix('singRIGHT', 'Mom Pose Left', 24, false);
-
- addOffset('idle');
- addOffset("singUP", 14, 71);
- addOffset("singRIGHT", 10, -60);
- addOffset("singLEFT", 250, -23);
- addOffset("singDOWN", 20, -160);
-
- playAnim('idle');
-
- case 'mom-car':
- tex = Paths.getSparrowAtlas('momCar');
- frames = tex;
-
- animation.addByPrefix('idle', "Mom Idle", 24, false);
- animation.addByPrefix('singUP', "Mom Up Pose", 24, false);
- animation.addByPrefix('singDOWN', "MOM DOWN POSE", 24, false);
- animation.addByPrefix('singLEFT', 'Mom Left Pose', 24, false);
- // ANIMATION IS CALLED MOM LEFT POSE BUT ITS FOR THE RIGHT
- // CUZ DAVE IS DUMB!
- animation.addByPrefix('singRIGHT', 'Mom Pose Left', 24, false);
-
- addOffset('idle');
- addOffset("singUP", 14, 71);
- addOffset("singRIGHT", 10, -60);
- addOffset("singLEFT", 250, -23);
- addOffset("singDOWN", 20, -160);
-
- playAnim('idle');
- case 'monster':
- tex = Paths.getSparrowAtlas('Monster_Assets');
- frames = tex;
- animation.addByPrefix('idle', 'monster idle', 24, false);
- animation.addByPrefix('singUP', 'monster up note', 24, false);
- animation.addByPrefix('singDOWN', 'monster down', 24, false);
- animation.addByPrefix('singLEFT', 'Monster left note', 24, false);
- animation.addByPrefix('singRIGHT', 'Monster Right note', 24, false);
-
- addOffset('idle');
- addOffset("singUP", -20, 50);
- addOffset("singRIGHT", -51);
- addOffset("singLEFT", -30);
- addOffset("singDOWN", -30, -40);
- playAnim('idle');
- case 'monster-christmas':
- tex = Paths.getSparrowAtlas('christmas/monsterChristmas');
- frames = tex;
- animation.addByPrefix('idle', 'monster idle', 24, false);
- animation.addByPrefix('singUP', 'monster up note', 24, false);
- animation.addByPrefix('singDOWN', 'monster down', 24, false);
- animation.addByPrefix('singLEFT', 'Monster left note', 24, false);
- animation.addByPrefix('singRIGHT', 'Monster Right note', 24, false);
-
- addOffset('idle');
- addOffset("singUP", -20, 50);
- addOffset("singRIGHT", -51);
- addOffset("singLEFT", -30);
- addOffset("singDOWN", -40, -94);
- playAnim('idle');
- case 'pico':
- tex = Paths.getSparrowAtlas('Pico_FNF_assetss');
- frames = tex;
- animation.addByPrefix('idle', "Pico Idle Dance", 24);
- animation.addByPrefix('singUP', 'pico Up note0', 24, false);
- animation.addByPrefix('singDOWN', 'Pico Down Note0', 24, false);
- if (isPlayer)
- {
- animation.addByPrefix('singLEFT', 'Pico NOTE LEFT0', 24, false);
- animation.addByPrefix('singRIGHT', 'Pico Note Right0', 24, false);
- animation.addByPrefix('singRIGHTmiss', 'Pico Note Right Miss', 24, false);
- animation.addByPrefix('singLEFTmiss', 'Pico NOTE LEFT miss', 24, false);
- }
- else
- {
- // Need to be flipped! REDO THIS LATER!
- animation.addByPrefix('singLEFT', 'Pico Note Right0', 24, false);
- animation.addByPrefix('singRIGHT', 'Pico NOTE LEFT0', 24, false);
- animation.addByPrefix('singRIGHTmiss', 'Pico NOTE LEFT miss', 24, false);
- animation.addByPrefix('singLEFTmiss', 'Pico Note Right Miss', 24, false);
- }
-
- animation.addByPrefix('singUPmiss', 'pico Up note miss', 24);
- animation.addByPrefix('singDOWNmiss', 'Pico Down Note MISS', 24);
-
- addOffset('idle');
- addOffset("singUP", -29, 27);
- addOffset("singRIGHT", -68, -7);
- addOffset("singLEFT", 65, 9);
- addOffset("singDOWN", 200, -70);
- addOffset("singUPmiss", -19, 67);
- addOffset("singRIGHTmiss", -60, 41);
- addOffset("singLEFTmiss", 62, 64);
- addOffset("singDOWNmiss", 210, -28);
-
- playAnim('idle');
-
- flipX = true;
-
-
- case 'bf-christmas':
- var tex = Paths.getSparrowAtlas('christmas/bfChristmas');
- frames = tex;
- animation.addByPrefix('idle', 'BF idle dance', 24, false);
- animation.addByPrefix('singUP', 'BF NOTE UP0', 24, false);
- animation.addByPrefix('singLEFT', 'BF NOTE LEFT0', 24, false);
- animation.addByPrefix('singRIGHT', 'BF NOTE RIGHT0', 24, false);
- animation.addByPrefix('singDOWN', 'BF NOTE DOWN0', 24, false);
- animation.addByPrefix('singUPmiss', 'BF NOTE UP MISS', 24, false);
- animation.addByPrefix('singLEFTmiss', 'BF NOTE LEFT MISS', 24, false);
- animation.addByPrefix('singRIGHTmiss', 'BF NOTE RIGHT MISS', 24, false);
- animation.addByPrefix('singDOWNmiss', 'BF NOTE DOWN MISS', 24, false);
- animation.addByPrefix('hey', 'BF HEY', 24, false);
-
- addOffset('idle', -5);
- addOffset("singUP", -29, 27);
- addOffset("singRIGHT", -38, -7);
- addOffset("singLEFT", 12, -6);
- addOffset("singDOWN", -10, -50);
- addOffset("singUPmiss", -29, 27);
- addOffset("singRIGHTmiss", -30, 21);
- addOffset("singLEFTmiss", 12, 24);
- addOffset("singDOWNmiss", -11, -19);
- addOffset("hey", 7, 4);
-
- playAnim('idle');
-
- flipX = true;
- case 'bf-car':
- var tex = Paths.getSparrowAtlas('bfCar');
- frames = tex;
- animation.addByPrefix('idle', 'BF idle dance', 24, false);
- animation.addByPrefix('singUP', 'BF NOTE UP0', 24, false);
- animation.addByPrefix('singLEFT', 'BF NOTE LEFT0', 24, false);
- animation.addByPrefix('singRIGHT', 'BF NOTE RIGHT0', 24, false);
- animation.addByPrefix('singDOWN', 'BF NOTE DOWN0', 24, false);
- animation.addByPrefix('singUPmiss', 'BF NOTE UP MISS', 24, false);
- animation.addByPrefix('singLEFTmiss', 'BF NOTE LEFT MISS', 24, false);
- animation.addByPrefix('singRIGHTmiss', 'BF NOTE RIGHT MISS', 24, false);
- animation.addByPrefix('singDOWNmiss', 'BF NOTE DOWN MISS', 24, false);
-
- addOffset('idle', -5);
- addOffset("singUP", -29, 27);
- addOffset("singRIGHT", -38, -7);
- addOffset("singLEFT", 12, -6);
- addOffset("singDOWN", -10, -50);
- addOffset("singUPmiss", -29, 27);
- addOffset("singRIGHTmiss", -30, 21);
- addOffset("singLEFTmiss", 12, 24);
- addOffset("singDOWNmiss", -11, -19);
- playAnim('idle');
-
- flipX = true;
- case 'bf-pixel':
- frames = Paths.getSparrowAtlas('weeb/bfPixel');
- animation.addByPrefix('idle', 'BF IDLE', 24, false);
- animation.addByPrefix('singUP', 'BF UP NOTE', 24, false);
- animation.addByPrefix('singLEFT', 'BF LEFT NOTE', 24, false);
- animation.addByPrefix('singRIGHT', 'BF RIGHT NOTE', 24, false);
- animation.addByPrefix('singDOWN', 'BF DOWN NOTE', 24, false);
- animation.addByPrefix('singUPmiss', 'BF UP MISS', 24, false);
- animation.addByPrefix('singLEFTmiss', 'BF LEFT MISS', 24, false);
- animation.addByPrefix('singRIGHTmiss', 'BF RIGHT MISS', 24, false);
- animation.addByPrefix('singDOWNmiss', 'BF DOWN MISS', 24, false);
-
- addOffset('idle');
- addOffset("singUP");
- addOffset("singRIGHT");
- addOffset("singLEFT");
- addOffset("singDOWN");
- addOffset("singUPmiss");
- addOffset("singRIGHTmiss");
- addOffset("singLEFTmiss");
- addOffset("singDOWNmiss");
-
- setGraphicSize(Std.int(width * 6));
- updateHitbox();
-
- playAnim('idle');
-
- width -= 100;
- height -= 100;
-
- antialiasing = false;
-
- flipX = true;
- case 'bf-pixel-dead':
- frames = Paths.getSparrowAtlas('weeb/bfPixelsDEAD');
- animation.addByPrefix('singUP', "BF Dies pixel", 24, false);
- animation.addByPrefix('firstDeath', "BF Dies pixel", 24, false);
- animation.addByPrefix('deathLoop', "Retry Loop", 24, true);
- animation.addByPrefix('deathConfirm', "RETRY CONFIRM", 24, false);
- animation.play('firstDeath');
-
- addOffset('firstDeath');
- addOffset('deathLoop', -37);
- addOffset('deathConfirm', -37);
- playAnim('firstDeath');
- // pixel bullshit
- setGraphicSize(Std.int(width * 6));
- updateHitbox();
- antialiasing = false;
- flipX = true;
-
- case 'senpai':
- frames = Paths.getSparrowAtlas('weeb/senpai');
- animation.addByPrefix('idle', 'Senpai Idle', 24, false);
- animation.addByPrefix('singUP', 'SENPAI UP NOTE', 24, false);
- animation.addByPrefix('singLEFT', 'SENPAI LEFT NOTE', 24, false);
- animation.addByPrefix('singRIGHT', 'SENPAI RIGHT NOTE', 24, false);
- animation.addByPrefix('singDOWN', 'SENPAI DOWN NOTE', 24, false);
-
- addOffset('idle');
- addOffset("singUP", 5, 37);
- addOffset("singRIGHT");
- addOffset("singLEFT", 40);
- addOffset("singDOWN", 14);
-
- playAnim('idle');
-
- setGraphicSize(Std.int(width * 6));
- updateHitbox();
-
- antialiasing = false;
- case 'senpai-angry':
- frames = Paths.getSparrowAtlas('weeb/senpai');
- animation.addByPrefix('idle', 'Angry Senpai Idle', 24, false);
- animation.addByPrefix('singUP', 'Angry Senpai UP NOTE', 24, false);
- animation.addByPrefix('singLEFT', 'Angry Senpai LEFT NOTE', 24, false);
- animation.addByPrefix('singRIGHT', 'Angry Senpai RIGHT NOTE', 24, false);
- animation.addByPrefix('singDOWN', 'Angry Senpai DOWN NOTE', 24, false);
-
- addOffset('idle');
- addOffset("singUP", 5, 37);
- addOffset("singRIGHT");
- addOffset("singLEFT", 40);
- addOffset("singDOWN", 14);
- playAnim('idle');
-
- setGraphicSize(Std.int(width * 6));
- updateHitbox();
-
- antialiasing = false;
-
- case 'spirit':
- frames = Paths.getPackerAtlas('weeb/spirit');
- animation.addByPrefix('idle', "idle spirit_", 24, false);
- animation.addByPrefix('singUP', "up_", 24, false);
- animation.addByPrefix('singRIGHT', "right_", 24, false);
- animation.addByPrefix('singLEFT', "left_", 24, false);
- animation.addByPrefix('singDOWN', "spirit down_", 24, false);
-
- addOffset('idle', -220, -280);
- addOffset('singUP', -220, -240);
- addOffset("singRIGHT", -220, -280);
- addOffset("singLEFT", -200, -280);
- addOffset("singDOWN", 170, 110);
-
- setGraphicSize(Std.int(width * 6));
- updateHitbox();
-
- playAnim('idle');
-
- antialiasing = false;
-
- case 'parents-christmas':
- frames = Paths.getSparrowAtlas('christmas/mom_dad_christmas_assets');
- animation.addByPrefix('idle', 'Parent Christmas Idle', 24, false);
- animation.addByPrefix('singUP', 'Parent Up Note Dad', 24, false);
- animation.addByPrefix('singDOWN', 'Parent Down Note Dad', 24, false);
- animation.addByPrefix('singLEFT', 'Parent Left Note Dad', 24, false);
- animation.addByPrefix('singRIGHT', 'Parent Right Note Dad', 24, false);
-
- animation.addByPrefix('singUP-alt', 'Parent Up Note Mom', 24, false);
-
- animation.addByPrefix('singDOWN-alt', 'Parent Down Note Mom', 24, false);
- animation.addByPrefix('singLEFT-alt', 'Parent Left Note Mom', 24, false);
- animation.addByPrefix('singRIGHT-alt', 'Parent Right Note Mom', 24, false);
-
- addOffset('idle');
- addOffset("singUP", -47, 24);
- addOffset("singRIGHT", -1, -23);
- addOffset("singLEFT", -30, 16);
- addOffset("singDOWN", -31, -29);
- addOffset("singUP-alt", -47, 24);
- addOffset("singRIGHT-alt", -1, -24);
- addOffset("singLEFT-alt", -30, 15);
- addOffset("singDOWN-alt", -30, -27);
-
- playAnim('idle');
-
- default:
- curCharacter = "bf";
- var tex = Paths.getSparrowAtlas('BOYFRIEND');
- frames = tex;
- animation.addByPrefix('idle', 'BF idle dance', 24, false);
- animation.addByPrefix('singUP', 'BF NOTE UP0', 24, false);
- animation.addByPrefix('singLEFT', 'BF NOTE LEFT0', 24, false);
- animation.addByPrefix('singRIGHT', 'BF NOTE RIGHT0', 24, false);
- animation.addByPrefix('singDOWN', 'BF NOTE DOWN0', 24, false);
- animation.addByPrefix('singUPmiss', 'BF NOTE UP MISS', 24, false);
- animation.addByPrefix('singLEFTmiss', 'BF NOTE LEFT MISS', 24, false);
- animation.addByPrefix('singRIGHTmiss', 'BF NOTE RIGHT MISS', 24, false);
- animation.addByPrefix('singDOWNmiss', 'BF NOTE DOWN MISS', 24, false);
- animation.addByPrefix('hey', 'BF HEY', 24, false);
-
- animation.addByPrefix('firstDeath', "BF dies", 24, false);
- animation.addByPrefix('deathLoop', "BF Dead Loop", 24, true);
- animation.addByPrefix('deathConfirm', "BF Dead confirm", 24, false);
-
- animation.addByPrefix('scared', 'BF idle shaking', 24);
-
- addOffset('idle', -5);
- addOffset("singUP", -29, 27);
- addOffset("singRIGHT", -38, -7);
- addOffset("singLEFT", 12, -6);
- addOffset("singDOWN", -10, -50);
- addOffset("singUPmiss", -29, 27);
- addOffset("singRIGHTmiss", -30, 21);
- addOffset("singLEFTmiss", 12, 24);
- addOffset("singDOWNmiss", -11, -19);
- addOffset("hey", 7, 4);
- addOffset('firstDeath', 37, 11);
- addOffset('deathLoop', 37, 5);
- addOffset('deathConfirm', 37, 69);
- addOffset('scared', -4);
-
- playAnim('idle');
-
- flipX = true;
+ while(true) {
+ switch (curCharacter)
+ {
+ // case 'your-char': // To hardcode characters
+ default:
+ // load xml
+ if (!Assets.exists(Paths.xml('characters/$curCharacter'))) {
+ curCharacter = "bf";
+ continue; // load bf instead
+ }
+
+
+ var plainXML = Assets.getText(Paths.xml('characters/$curCharacter'));
+ var character:Access;
+ try {
+ var charXML = Xml.parse(plainXML).firstElement();
+ if (charXML == null) throw new Exception("Missing \"character\" node in XML.");
+ character = new Access(charXML);
+ } catch(e) {
+ trace(e);
+ curCharacter = "bf"; // load fallback
+ continue;
+ }
+
+ if (character.has.isPlayer) playerOffsets = (character.att.isPlayer == "true");
+ if (character.has.flipX) flipX = (character.att.flipX == "true");
+
+ frames = Paths.getSparrowAtlas('characters/$curCharacter');
+ for(anim in character.nodes.anim) {
+ // TODO: Add indices
+ var animData:AnimData = {
+ name: null,
+ anim: null,
+ fps: 24,
+ loop: false,
+ x: 0,
+ y: 0
+ };
+
+ if (anim.has.name) animData.name = anim.att.name;
+ if (anim.has.anim) animData.anim = anim.att.anim;
+ if (anim.has.fps) animData.fps = Std.parseInt(anim.att.fps);
+ if (anim.has.x) animData.x = Std.parseFloat(anim.att.x);
+ if (anim.has.y) animData.y = Std.parseFloat(anim.att.y);
+
+ if (animData.name != null && animData.anim != null) {
+ if (animData.fps <= 0 #if web || animData.fps == null #end) animData.fps = 24;
+
+ animation.addByPrefix(animData.name, animData.anim, animData.fps, animData.loop);
+ addOffset(animData.name, animData.x, animData.y);
+ }
+ }
+ }
+ break;
}
+ // case 'gf':
+ // // GIRLFRIEND CODE
+ // tex = Paths.getSparrowAtlas('GF_assets');
+ // frames = tex;
+ // animation.addByPrefix('cheer', 'GF Cheer', 24, false);
+ // animation.addByPrefix('singLEFT', 'GF left note', 24, false);
+ // animation.addByPrefix('singRIGHT', 'GF Right Note', 24, false);
+ // animation.addByPrefix('singUP', 'GF Up Note', 24, false);
+ // animation.addByPrefix('singDOWN', 'GF Down Note', 24, false);
+ // animation.addByIndices('sad', 'gf sad', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "", 24, false);
+ // animation.addByIndices('danceLeft', 'GF Dancing Beat', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false);
+ // animation.addByIndices('danceRight', 'GF Dancing Beat', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false);
+ // animation.addByIndices('hairBlow', "GF Dancing Beat Hair blowing", [0, 1, 2, 3], "", 24);
+ // animation.addByIndices('hairFall', "GF Dancing Beat Hair Landing", [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "", 24, false);
+ // animation.addByPrefix('scared', 'GF FEAR', 24);
+
+ // addOffset('cheer');
+ // addOffset('sad', -2, -2);
+ // addOffset('danceLeft', 0, -9);
+ // addOffset('danceRight', 0, -9);
+
+ // addOffset("singUP", 0, 4);
+ // addOffset("singRIGHT", 0, -20);
+ // addOffset("singLEFT", 0, -19);
+ // addOffset("singDOWN", 0, -20);
+ // addOffset('hairBlow', 45, -8);
+ // addOffset('hairFall', 0, -9);
+
+ // addOffset('scared', -2, -17);
+
+ // playAnim('danceRight');
+
+ // case 'gf-christmas':
+ // tex = Paths.getSparrowAtlas('christmas/gfChristmas');
+ // frames = tex;
+ // animation.addByPrefix('cheer', 'GF Cheer', 24, false);
+ // animation.addByPrefix('singLEFT', 'GF left note', 24, false);
+ // animation.addByPrefix('singRIGHT', 'GF Right Note', 24, false);
+ // animation.addByPrefix('singUP', 'GF Up Note', 24, false);
+ // animation.addByPrefix('singDOWN', 'GF Down Note', 24, false);
+ // animation.addByIndices('sad', 'gf sad', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "", 24, false);
+ // animation.addByIndices('danceLeft', 'GF Dancing Beat', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false);
+ // animation.addByIndices('danceRight', 'GF Dancing Beat', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false);
+ // animation.addByIndices('hairBlow', "GF Dancing Beat Hair blowing", [0, 1, 2, 3], "", 24);
+ // animation.addByIndices('hairFall', "GF Dancing Beat Hair Landing", [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "", 24, false);
+ // animation.addByPrefix('scared', 'GF FEAR', 24);
+
+ // addOffset('cheer');
+ // addOffset('sad', -2, -2);
+ // addOffset('danceLeft', 0, -9);
+ // addOffset('danceRight', 0, -9);
+
+ // addOffset("singUP", 0, 4);
+ // addOffset("singRIGHT", 0, -20);
+ // addOffset("singLEFT", 0, -19);
+ // addOffset("singDOWN", 0, -20);
+ // addOffset('hairBlow', 45, -8);
+ // addOffset('hairFall', 0, -9);
+
+ // addOffset('scared', -2, -17);
+
+ // playAnim('danceRight');
+
+ // case 'gf-car':
+ // tex = Paths.getSparrowAtlas('gfCar');
+ // frames = tex;
+ // animation.addByIndices('singUP', 'GF Dancing Beat Hair blowing CAR', [0], "", 24, false);
+ // animation.addByIndices('danceLeft', 'GF Dancing Beat Hair blowing CAR', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false);
+ // animation.addByIndices('danceRight', 'GF Dancing Beat Hair blowing CAR', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24,
+ // false);
+
+ // addOffset('danceLeft', 0);
+ // addOffset('danceRight', 0);
+
+ // playAnim('danceRight');
+
+ // case 'gf-pixel':
+ // tex = Paths.getSparrowAtlas('weeb/gfPixel');
+ // frames = tex;
+ // animation.addByIndices('singUP', 'GF IDLE', [2], "", 24, false);
+ // animation.addByIndices('danceLeft', 'GF IDLE', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false);
+ // animation.addByIndices('danceRight', 'GF IDLE', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false);
+
+ // addOffset('danceLeft', 0);
+ // addOffset('danceRight', 0);
+
+ // playAnim('danceRight');
+
+ // setGraphicSize(Std.int(width * PlayState.daPixelZoom));
+ // updateHitbox();
+ // antialiasing = false;
+
+ // case 'dad':
+ // // DAD ANIMATION LOADING CODE
+ // tex = Paths.getSparrowAtlas('DADDY_DEAREST');
+ // frames = tex;
+ // animation.addByPrefix('idle', 'Dad idle dance', 24);
+ // animation.addByPrefix('singUP', 'Dad Sing Note UP', 24);
+ // animation.addByPrefix('singRIGHT', 'Dad Sing Note RIGHT', 24);
+ // animation.addByPrefix('singDOWN', 'Dad Sing Note DOWN', 24);
+ // animation.addByPrefix('singLEFT', 'Dad Sing Note LEFT', 24);
+
+ // addOffset('idle');
+ // addOffset("singUP", -6, 50);
+ // addOffset("singRIGHT", 0, 27);
+ // addOffset("singLEFT", -10, 10);
+ // addOffset("singDOWN", 0, -30);
+
+ // dadVar = 6.1;
+
+ // playAnim('idle');
+ // case 'spooky':
+ // tex = Paths.getSparrowAtlas('spooky_kids_assets');
+ // frames = tex;
+ // animation.addByPrefix('singUP', 'spooky UP NOTE', 24, false);
+ // animation.addByPrefix('singDOWN', 'spooky DOWN note', 24, false);
+ // animation.addByPrefix('singLEFT', 'note sing left', 24, false);
+ // animation.addByPrefix('singRIGHT', 'spooky sing right', 24, false);
+ // animation.addByIndices('danceLeft', 'spooky dance idle', [0, 2, 6], "", 12, false);
+ // animation.addByIndices('danceRight', 'spooky dance idle', [8, 10, 12, 14], "", 12, false);
+
+ // addOffset('danceLeft');
+ // addOffset('danceRight');
+
+ // addOffset("singUP", -20, 26);
+ // addOffset("singRIGHT", -130, -14);
+ // addOffset("singLEFT", 130, -10);
+ // addOffset("singDOWN", -50, -130);
+
+ // playAnim('danceRight');
+ // case 'mom':
+ // tex = Paths.getSparrowAtlas('Mom_Assets');
+ // frames = tex;
+
+ // animation.addByPrefix('idle', "Mom Idle", 24, false);
+ // animation.addByPrefix('singUP', "Mom Up Pose", 24, false);
+ // animation.addByPrefix('singDOWN', "MOM DOWN POSE", 24, false);
+ // animation.addByPrefix('singLEFT', 'Mom Left Pose', 24, false);
+ // // ANIMATION IS CALLED MOM LEFT POSE BUT ITS FOR THE RIGHT
+ // // CUZ DAVE IS DUMB!
+ // animation.addByPrefix('singRIGHT', 'Mom Pose Left', 24, false);
+
+ // addOffset('idle');
+ // addOffset("singUP", 14, 71);
+ // addOffset("singRIGHT", 10, -60);
+ // addOffset("singLEFT", 250, -23);
+ // addOffset("singDOWN", 20, -160);
+
+ // playAnim('idle');
+
+ // case 'mom-car':
+ // tex = Paths.getSparrowAtlas('momCar');
+ // frames = tex;
+
+ // animation.addByPrefix('idle', "Mom Idle", 24, false);
+ // animation.addByPrefix('singUP', "Mom Up Pose", 24, false);
+ // animation.addByPrefix('singDOWN', "MOM DOWN POSE", 24, false);
+ // animation.addByPrefix('singLEFT', 'Mom Left Pose', 24, false);
+ // // ANIMATION IS CALLED MOM LEFT POSE BUT ITS FOR THE RIGHT
+ // // CUZ DAVE IS DUMB!
+ // animation.addByPrefix('singRIGHT', 'Mom Pose Left', 24, false);
+
+ // addOffset('idle');
+ // addOffset("singUP", 14, 71);
+ // addOffset("singRIGHT", 10, -60);
+ // addOffset("singLEFT", 250, -23);
+ // addOffset("singDOWN", 20, -160);
+
+ // playAnim('idle');
+ // case 'monster':
+ // tex = Paths.getSparrowAtlas('Monster_Assets');
+ // frames = tex;
+ // animation.addByPrefix('idle', 'monster idle', 24, false);
+ // animation.addByPrefix('singUP', 'monster up note', 24, false);
+ // animation.addByPrefix('singDOWN', 'monster down', 24, false);
+ // animation.addByPrefix('singLEFT', 'Monster left note', 24, false);
+ // animation.addByPrefix('singRIGHT', 'Monster Right note', 24, false);
+
+ // addOffset('idle');
+ // addOffset("singUP", -20, 50);
+ // addOffset("singRIGHT", -51);
+ // addOffset("singLEFT", -30);
+ // addOffset("singDOWN", -30, -40);
+ // playAnim('idle');
+ // case 'monster-christmas':
+ // tex = Paths.getSparrowAtlas('christmas/monsterChristmas');
+ // frames = tex;
+ // animation.addByPrefix('idle', 'monster idle', 24, false);
+ // animation.addByPrefix('singUP', 'monster up note', 24, false);
+ // animation.addByPrefix('singDOWN', 'monster down', 24, false);
+ // animation.addByPrefix('singLEFT', 'Monster left note', 24, false);
+ // animation.addByPrefix('singRIGHT', 'Monster Right note', 24, false);
+
+ // addOffset('idle');
+ // addOffset("singUP", -20, 50);
+ // addOffset("singRIGHT", -51);
+ // addOffset("singLEFT", -30);
+ // addOffset("singDOWN", -40, -94);
+ // playAnim('idle');
+ // case 'pico':
+ // tex = Paths.getSparrowAtlas('Pico_FNF_assetss');
+ // frames = tex;
+ // animation.addByPrefix('idle', "Pico Idle Dance", 24);
+ // animation.addByPrefix('singUP', 'pico Up note0', 24, false);
+ // animation.addByPrefix('singDOWN', 'Pico Down Note0', 24, false);
+ // if (isPlayer)
+ // {
+ // animation.addByPrefix('singLEFT', 'Pico NOTE LEFT0', 24, false);
+ // animation.addByPrefix('singRIGHT', 'Pico Note Right0', 24, false);
+ // animation.addByPrefix('singRIGHTmiss', 'Pico Note Right Miss', 24, false);
+ // animation.addByPrefix('singLEFTmiss', 'Pico NOTE LEFT miss', 24, false);
+ // }
+ // else
+ // {
+ // // Need to be flipped! REDO THIS LATER!
+ // animation.addByPrefix('singLEFT', 'Pico Note Right0', 24, false);
+ // animation.addByPrefix('singRIGHT', 'Pico NOTE LEFT0', 24, false);
+ // animation.addByPrefix('singRIGHTmiss', 'Pico NOTE LEFT miss', 24, false);
+ // animation.addByPrefix('singLEFTmiss', 'Pico Note Right Miss', 24, false);
+ // }
+
+ // animation.addByPrefix('singUPmiss', 'pico Up note miss', 24);
+ // animation.addByPrefix('singDOWNmiss', 'Pico Down Note MISS', 24);
+
+ // addOffset('idle');
+ // addOffset("singUP", -29, 27);
+ // addOffset("singRIGHT", -68, -7);
+ // addOffset("singLEFT", 65, 9);
+ // addOffset("singDOWN", 200, -70);
+ // addOffset("singUPmiss", -19, 67);
+ // addOffset("singRIGHTmiss", -60, 41);
+ // addOffset("singLEFTmiss", 62, 64);
+ // addOffset("singDOWNmiss", 210, -28);
+
+ // playAnim('idle');
+
+ // flipX = true;
+
+
+ // case 'bf-christmas':
+ // var tex = Paths.getSparrowAtlas('christmas/bfChristmas');
+ // frames = tex;
+ // animation.addByPrefix('idle', 'BF idle dance', 24, false);
+ // animation.addByPrefix('singUP', 'BF NOTE UP0', 24, false);
+ // animation.addByPrefix('singLEFT', 'BF NOTE LEFT0', 24, false);
+ // animation.addByPrefix('singRIGHT', 'BF NOTE RIGHT0', 24, false);
+ // animation.addByPrefix('singDOWN', 'BF NOTE DOWN0', 24, false);
+ // animation.addByPrefix('singUPmiss', 'BF NOTE UP MISS', 24, false);
+ // animation.addByPrefix('singLEFTmiss', 'BF NOTE LEFT MISS', 24, false);
+ // animation.addByPrefix('singRIGHTmiss', 'BF NOTE RIGHT MISS', 24, false);
+ // animation.addByPrefix('singDOWNmiss', 'BF NOTE DOWN MISS', 24, false);
+ // animation.addByPrefix('hey', 'BF HEY', 24, false);
+
+ // addOffset('idle', -5);
+ // addOffset("singUP", -29, 27);
+ // addOffset("singRIGHT", -38, -7);
+ // addOffset("singLEFT", 12, -6);
+ // addOffset("singDOWN", -10, -50);
+ // addOffset("singUPmiss", -29, 27);
+ // addOffset("singRIGHTmiss", -30, 21);
+ // addOffset("singLEFTmiss", 12, 24);
+ // addOffset("singDOWNmiss", -11, -19);
+ // addOffset("hey", 7, 4);
+
+ // playAnim('idle');
+
+ // flipX = true;
+ // case 'bf-car':
+ // var tex = Paths.getSparrowAtlas('bfCar');
+ // frames = tex;
+ // animation.addByPrefix('idle', 'BF idle dance', 24, false);
+ // animation.addByPrefix('singUP', 'BF NOTE UP0', 24, false);
+ // animation.addByPrefix('singLEFT', 'BF NOTE LEFT0', 24, false);
+ // animation.addByPrefix('singRIGHT', 'BF NOTE RIGHT0', 24, false);
+ // animation.addByPrefix('singDOWN', 'BF NOTE DOWN0', 24, false);
+ // animation.addByPrefix('singUPmiss', 'BF NOTE UP MISS', 24, false);
+ // animation.addByPrefix('singLEFTmiss', 'BF NOTE LEFT MISS', 24, false);
+ // animation.addByPrefix('singRIGHTmiss', 'BF NOTE RIGHT MISS', 24, false);
+ // animation.addByPrefix('singDOWNmiss', 'BF NOTE DOWN MISS', 24, false);
+
+ // addOffset('idle', -5);
+ // addOffset("singUP", -29, 27);
+ // addOffset("singRIGHT", -38, -7);
+ // addOffset("singLEFT", 12, -6);
+ // addOffset("singDOWN", -10, -50);
+ // addOffset("singUPmiss", -29, 27);
+ // addOffset("singRIGHTmiss", -30, 21);
+ // addOffset("singLEFTmiss", 12, 24);
+ // addOffset("singDOWNmiss", -11, -19);
+ // playAnim('idle');
+
+ // flipX = true;
+ // case 'bf-pixel':
+ // frames = Paths.getSparrowAtlas('weeb/bfPixel');
+ // animation.addByPrefix('idle', 'BF IDLE', 24, false);
+ // animation.addByPrefix('singUP', 'BF UP NOTE', 24, false);
+ // animation.addByPrefix('singLEFT', 'BF LEFT NOTE', 24, false);
+ // animation.addByPrefix('singRIGHT', 'BF RIGHT NOTE', 24, false);
+ // animation.addByPrefix('singDOWN', 'BF DOWN NOTE', 24, false);
+ // animation.addByPrefix('singUPmiss', 'BF UP MISS', 24, false);
+ // animation.addByPrefix('singLEFTmiss', 'BF LEFT MISS', 24, false);
+ // animation.addByPrefix('singRIGHTmiss', 'BF RIGHT MISS', 24, false);
+ // animation.addByPrefix('singDOWNmiss', 'BF DOWN MISS', 24, false);
+
+ // addOffset('idle');
+ // addOffset("singUP");
+ // addOffset("singRIGHT");
+ // addOffset("singLEFT");
+ // addOffset("singDOWN");
+ // addOffset("singUPmiss");
+ // addOffset("singRIGHTmiss");
+ // addOffset("singLEFTmiss");
+ // addOffset("singDOWNmiss");
+
+ // setGraphicSize(Std.int(width * 6));
+ // updateHitbox();
+
+ // playAnim('idle');
+
+ // width -= 100;
+ // height -= 100;
+
+ // antialiasing = false;
+
+ // flipX = true;
+ // case 'bf-pixel-dead':
+ // frames = Paths.getSparrowAtlas('weeb/bfPixelsDEAD');
+ // animation.addByPrefix('singUP', "BF Dies pixel", 24, false);
+ // animation.addByPrefix('firstDeath', "BF Dies pixel", 24, false);
+ // animation.addByPrefix('deathLoop', "Retry Loop", 24, true);
+ // animation.addByPrefix('deathConfirm', "RETRY CONFIRM", 24, false);
+ // animation.play('firstDeath');
+
+ // addOffset('firstDeath');
+ // addOffset('deathLoop', -37);
+ // addOffset('deathConfirm', -37);
+ // playAnim('firstDeath');
+ // // pixel bullshit
+ // setGraphicSize(Std.int(width * 6));
+ // updateHitbox();
+ // antialiasing = false;
+ // flipX = true;
+
+ // case 'senpai':
+ // frames = Paths.getSparrowAtlas('weeb/senpai');
+ // animation.addByPrefix('idle', 'Senpai Idle', 24, false);
+ // animation.addByPrefix('singUP', 'SENPAI UP NOTE', 24, false);
+ // animation.addByPrefix('singLEFT', 'SENPAI LEFT NOTE', 24, false);
+ // animation.addByPrefix('singRIGHT', 'SENPAI RIGHT NOTE', 24, false);
+ // animation.addByPrefix('singDOWN', 'SENPAI DOWN NOTE', 24, false);
+
+ // addOffset('idle');
+ // addOffset("singUP", 5, 37);
+ // addOffset("singRIGHT");
+ // addOffset("singLEFT", 40);
+ // addOffset("singDOWN", 14);
+
+ // playAnim('idle');
+
+ // setGraphicSize(Std.int(width * 6));
+ // updateHitbox();
+
+ // antialiasing = false;
+ // case 'senpai-angry':
+ // frames = Paths.getSparrowAtlas('weeb/senpai');
+ // animation.addByPrefix('idle', 'Angry Senpai Idle', 24, false);
+ // animation.addByPrefix('singUP', 'Angry Senpai UP NOTE', 24, false);
+ // animation.addByPrefix('singLEFT', 'Angry Senpai LEFT NOTE', 24, false);
+ // animation.addByPrefix('singRIGHT', 'Angry Senpai RIGHT NOTE', 24, false);
+ // animation.addByPrefix('singDOWN', 'Angry Senpai DOWN NOTE', 24, false);
+
+ // addOffset('idle');
+ // addOffset("singUP", 5, 37);
+ // addOffset("singRIGHT");
+ // addOffset("singLEFT", 40);
+ // addOffset("singDOWN", 14);
+ // playAnim('idle');
+
+ // setGraphicSize(Std.int(width * 6));
+ // updateHitbox();
+
+ // antialiasing = false;
+
+ // case 'spirit':
+ // frames = Paths.getPackerAtlas('weeb/spirit');
+ // animation.addByPrefix('idle', "idle spirit_", 24, false);
+ // animation.addByPrefix('singUP', "up_", 24, false);
+ // animation.addByPrefix('singRIGHT', "right_", 24, false);
+ // animation.addByPrefix('singLEFT', "left_", 24, false);
+ // animation.addByPrefix('singDOWN', "spirit down_", 24, false);
+
+ // addOffset('idle', -220, -280);
+ // addOffset('singUP', -220, -240);
+ // addOffset("singRIGHT", -220, -280);
+ // addOffset("singLEFT", -200, -280);
+ // addOffset("singDOWN", 170, 110);
+
+ // setGraphicSize(Std.int(width * 6));
+ // updateHitbox();
+
+ // playAnim('idle');
+
+ // antialiasing = false;
+
+ // case 'parents-christmas':
+ // frames = Paths.getSparrowAtlas('christmas/mom_dad_christmas_assets');
+ // animation.addByPrefix('idle', 'Parent Christmas Idle', 24, false);
+ // animation.addByPrefix('singUP', 'Parent Up Note Dad', 24, false);
+ // animation.addByPrefix('singDOWN', 'Parent Down Note Dad', 24, false);
+ // animation.addByPrefix('singLEFT', 'Parent Left Note Dad', 24, false);
+ // animation.addByPrefix('singRIGHT', 'Parent Right Note Dad', 24, false);
+
+ // animation.addByPrefix('singUP-alt', 'Parent Up Note Mom', 24, false);
+
+ // animation.addByPrefix('singDOWN-alt', 'Parent Down Note Mom', 24, false);
+ // animation.addByPrefix('singLEFT-alt', 'Parent Left Note Mom', 24, false);
+ // animation.addByPrefix('singRIGHT-alt', 'Parent Right Note Mom', 24, false);
+
+ // addOffset('idle');
+ // addOffset("singUP", -47, 24);
+ // addOffset("singRIGHT", -1, -23);
+ // addOffset("singLEFT", -30, 16);
+ // addOffset("singDOWN", -31, -29);
+ // addOffset("singUP-alt", -47, 24);
+ // addOffset("singRIGHT-alt", -1, -24);
+ // addOffset("singLEFT-alt", -30, 15);
+ // addOffset("singDOWN-alt", -30, -27);
+
+ // playAnim('idle');
+
+ // default:
+ // curCharacter = "bf";
+ // var tex = Paths.getSparrowAtlas('BOYFRIEND');
+ // frames = tex;
+ // animation.addByPrefix('idle', 'BF idle dance', 24, false);
+ // animation.addByPrefix('singUP', 'BF NOTE UP0', 24, false);
+ // animation.addByPrefix('singLEFT', 'BF NOTE LEFT0', 24, false);
+ // animation.addByPrefix('singRIGHT', 'BF NOTE RIGHT0', 24, false);
+ // animation.addByPrefix('singDOWN', 'BF NOTE DOWN0', 24, false);
+ // animation.addByPrefix('singUPmiss', 'BF NOTE UP MISS', 24, false);
+ // animation.addByPrefix('singLEFTmiss', 'BF NOTE LEFT MISS', 24, false);
+ // animation.addByPrefix('singRIGHTmiss', 'BF NOTE RIGHT MISS', 24, false);
+ // animation.addByPrefix('singDOWNmiss', 'BF NOTE DOWN MISS', 24, false);
+ // animation.addByPrefix('hey', 'BF HEY', 24, false);
+
+ // animation.addByPrefix('firstDeath', "BF dies", 24, false);
+ // animation.addByPrefix('deathLoop', "BF Dead Loop", 24, true);
+ // animation.addByPrefix('deathConfirm', "BF Dead confirm", 24, false);
+
+ // animation.addByPrefix('scared', 'BF idle shaking', 24);
+
+ // addOffset('idle', -5);
+ // addOffset("singUP", -29, 27);
+ // addOffset("singRIGHT", -38, -7);
+ // addOffset("singLEFT", 12, -6);
+ // addOffset("singDOWN", -10, -50);
+ // addOffset("singUPmiss", -29, 27);
+ // addOffset("singRIGHTmiss", -30, 21);
+ // addOffset("singLEFTmiss", 12, 24);
+ // addOffset("singDOWNmiss", -11, -19);
+ // addOffset("hey", 7, 4);
+ // addOffset('firstDeath', 37, 11);
+ // addOffset('deathLoop', 37, 5);
+ // addOffset('deathConfirm', 37, 69);
+ // addOffset('scared', -4);
+
+ // playAnim('idle');
+
+ // flipX = true;
+ // }
dance();
- if (isPlayer)
+ // alternative to xor operator
+ // for people who dont believe it, heres the truth table
+ // [ a ][ b ][ a!= b ]
+ // [ true ][ true ][ false ]
+ // [ true ][ false ][ true ]
+ // [ false ][ true ][ true ]
+ // [ true ][ true ][ false ]
+
+ if (isPlayer != playerOffsets)
{
+ // character is flipped
+ CoolUtil.switchAnimFrames(animation.getByName('singRIGHT'), animation.getByName('singLEFT'));
+ CoolUtil.switchAnimFrames(animation.getByName('singRIGHTmiss'), animation.getByName('singLEFTmiss'));
+
+ switchOffset('singLEFT', 'singRIGHT');
+ switchOffset('singLEFTmiss', 'singRIGHTmiss');
+ } else
flipX = !flipX;
+ }
- // Doesn't flip for BF, since his are already in the right place???
- if (!curCharacter.startsWith('bf'))
- {
- // var animArray
- var oldRight = animation.getByName('singRIGHT').frames;
- animation.getByName('singRIGHT').frames = animation.getByName('singLEFT').frames;
- animation.getByName('singLEFT').frames = oldRight;
-
- // IF THEY HAVE MISS ANIMATIONS??
- if (animation.getByName('singRIGHTmiss') != null)
- {
- var oldMiss = animation.getByName('singRIGHTmiss').frames;
- animation.getByName('singRIGHTmiss').frames = animation.getByName('singLEFTmiss').frames;
- animation.getByName('singLEFTmiss').frames = oldMiss;
- }
- }
- }
+ public function switchOffset(anim1:String, anim2:String) {
+ var old = animOffsets[anim1];
+ animOffsets[anim1] = animOffsets[anim2];
+ animOffsets[anim2] = old;
}
override function update(elapsed:Float)
@@ -624,7 +686,15 @@ class Character extends FlxSprite implements IBeatReceiver
var daOffset = animOffsets.get(AnimName);
if (animOffsets.exists(AnimName))
{
- offset.set(daOffset[0], daOffset[1]);
+ if (isPlayer != playerOffsets) {
+ offset.set(-daOffset[0], daOffset[1]);
+ var anim = animation.getByName(AnimName);
+ if (anim != null) {
+ offset.x -= frames.frames[anim.frames[0]].offset.x * 3;
+ }
+ } else {
+ offset.set(daOffset[0], daOffset[1]);
+ }
}
else
offset.set(0, 0);
@@ -655,3 +725,12 @@ class Character extends FlxSprite implements IBeatReceiver
animOffsets[name] = [x, y];
}
}
+
+typedef AnimData = {
+ var name:String;
+ var anim:String;
+ var fps:Int;
+ var loop:Bool;
+ var x:Float;
+ var y:Float;
+}
\ No newline at end of file
diff --git a/source/funkin/game/PlayState.hx b/source/funkin/game/PlayState.hx
index 425c45ed..6a9b87a5 100644
--- a/source/funkin/game/PlayState.hx
+++ b/source/funkin/game/PlayState.hx
@@ -48,12 +48,16 @@ using StringTools;
class PlayState extends MusicBeatState
{
+ /**
+ * SONG METADATA
+ */
public static var curStage:String = '';
public static var SONG:SwagSong;
public static var isStoryMode:Bool = false;
public static var storyWeek:Int = 0;
public static var storyPlaylist:Array = [];
public static var storyDifficulty:Int = 1;
+ public static var fromMods:Bool = false;
var halloweenLevel:Bool = false;
@@ -133,7 +137,7 @@ class PlayState extends MusicBeatState
persistentDraw = true;
if (SONG == null)
- SONG = Song.loadFromJson('tutorial');
+ SONG = Song.loadFromJson('tutorial', 'normal');
Conductor.mapBPMChanges(SONG);
Conductor.changeBPM(SONG.bpm);
@@ -920,12 +924,9 @@ class PlayState extends MusicBeatState
#end
}
- var addedNote:Bool = false;
- while(unspawnNotes[0] != null && unspawnNotes[0].strumTime - Conductor.songPosition < 1500) {
- addedNote = true;
+ while(unspawnNotes[0] != null && unspawnNotes[0].strumTime - Conductor.songPosition < 1500)
notes.add(unspawnNotes.shift());
- }
- if (addedNote) notes.sort(function(i, p1, p2) {return sortByShit(p1, p2);});
+
if (generatedMusic)
{
@@ -1001,13 +1002,8 @@ class PlayState extends MusicBeatState
}
else
{
- var difficulty:String = "";
-
- if (storyDifficulty == 0)
- difficulty = '-easy';
-
- if (storyDifficulty == 2)
- difficulty = '-hard';
+ // TODO: NOT INT DIFFICULTIES
+ var difficulty:String = CoolUtil.difficultyString();
trace('LOADING NEXT SONG');
trace(PlayState.storyPlaylist[0].toLowerCase() + difficulty);
@@ -1027,7 +1023,7 @@ class PlayState extends MusicBeatState
FlxTransitionableState.skipNextTransOut = true;
prevCamFollow = camFollow;
- PlayState.SONG = Song.loadFromJson(PlayState.storyPlaylist[0].toLowerCase() + difficulty, PlayState.storyPlaylist[0]);
+ PlayState.SONG = Song.loadFromJson(PlayState.storyPlaylist[0].toLowerCase(), difficulty);
FlxG.sound.music.stop();
LoadingState.loadAndSwitchState(new PlayState());
diff --git a/source/funkin/menus/FreeplayState.hx b/source/funkin/menus/FreeplayState.hx
index adaa612c..da471d80 100644
--- a/source/funkin/menus/FreeplayState.hx
+++ b/source/funkin/menus/FreeplayState.hx
@@ -217,13 +217,9 @@ class FreeplayState extends MusicBeatState
if (accepted)
{
- var poop:String = Highscore.formatSong(songs[curSelected].songName.toLowerCase(), curDifficulty);
-
- trace(poop);
-
- PlayState.SONG = Song.loadFromJson(poop, songs[curSelected].songName.toLowerCase());
- PlayState.isStoryMode = false;
PlayState.storyDifficulty = curDifficulty;
+ PlayState.SONG = Song.loadFromJson(songs[curSelected].songName, CoolUtil.difficultyString());
+ PlayState.isStoryMode = false;
PlayState.storyWeek = songs[curSelected].week;
trace('CUR WEEK' + PlayState.storyWeek);