diff --git a/Project.xml b/Project.xml
index f729f5bf7..d7c38fa32 100644
--- a/Project.xml
+++ b/Project.xml
@@ -2,7 +2,7 @@
-
+
@@ -25,6 +25,9 @@
+
+
+
@@ -93,7 +96,10 @@
-
-
-
+
+
+
+
+
+
diff --git a/art/NintendoSDK_Application.bmp b/art/NintendoSDK_Application.bmp
new file mode 100644
index 000000000..ee833a251
Binary files /dev/null and b/art/NintendoSDK_Application.bmp differ
diff --git a/art/build-lime-SWITCH.bat b/art/build-lime-SWITCH.bat
new file mode 100644
index 000000000..cfd836cf0
--- /dev/null
+++ b/art/build-lime-SWITCH.bat
@@ -0,0 +1,27 @@
+@echo off
+cd ..
+@echo on
+echo REBUILDING LIME FOR EXPORT (VERBOSE)
+@echo off
+color 0b
+@echo on
+lime rebuild windows -clean -v
+@echo off
+color 0a
+@echo on
+lime rebuild switch -clean -v
+@echo off
+color 0e
+@echo on
+lime rebuild tools -clean -v
+echo HOPE AND PRAY...
+@echo off
+color 0a
+@echo on
+echo BUILDING GAME
+lime build switch -final -v
+@echo off
+color 0b
+@echo on
+echo NSP FILE CREATED
+pause
\ No newline at end of file
diff --git a/art/iconSwitch.png b/art/iconSwitch.png
new file mode 100644
index 000000000..c80a83f96
Binary files /dev/null and b/art/iconSwitch.png differ
diff --git a/assets/data/south/south.json b/assets/data/south/south.json
index 2b4b02f09..f69498db9 100644
--- a/assets/data/south/south.json
+++ b/assets/data/south/south.json
@@ -1 +1,2 @@
+
{"song":{"song":"South","notes":[{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[11636.818181818182,3,0],[11999.818181818182,3,0],[12363.818181818182,0,0],[12545.818181818182,3,0],[12726.818181818182,2,0],[12908.818181818182,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[13101.818181818182,0,0],[13454.818181818182,1,0],[13817.818181818182,3,0],[13999.818181818182,3,0],[14181.818181818182,3,200]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[14545.818181818182,3,0],[14908.818181818182,3,0],[15272.818181818182,3,0],[15454.818181818182,2,0],[15636.818181818182,0,0],[15817.818181818182,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[16008.818181818182,0,0],[16363.818181818182,0,0],[16726.818181818184,2,0],[17090.818181818184,0,0],[17272.818181818184,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[17455,3,0],[17818,3,0],[18182,0,0],[18364,3,0],[18545,2,0],[18727,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[18920,0,0],[19273,1,0],[19636,3,0],[19818,3,0],[20000,3,200]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[20364,3,0],[20727,3,0],[21091,3,0],[21273,2,0],[21455,0,0],[21636,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[21827,0,0],[22182,0,0],[22545,2,0],[22909,0,0],[23091,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[23273,2,0],[23455,1,0],[23636,0,0],[23818,0,0],[23909,3,0],[24000,2,0],[24182,0,0],[24364,2,0],[24545,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[24734,2,0],[25091,2,0],[25455,2,0],[25636,1,0],[25818,0,0],[26000,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[26193,0,0],[26545,0,0],[26727,0,0],[26818,2,0],[26909,3,0],[27000,0,0],[27273,1,0],[27455,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[27648,2,0],[28000,2,0],[28364,2,0],[28545,3,0],[28727,0,0],[28909,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[29091.181818181816,2,0],[29273.181818181816,1,0],[29454.181818181816,0,0],[29636.181818181816,0,0],[29727.181818181816,3,0],[29818.181818181816,2,0],[30000.181818181816,0,0],[30182.181818181816,2,0],[30363.181818181816,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[30552.181818181816,2,0],[30909.181818181816,2,0],[31273.181818181816,2,0],[31454.181818181816,1,0],[31636.181818181816,0,0],[31818.181818181816,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[32011.181818181816,0,0],[32363.181818181816,0,0],[32545.181818181816,0,0],[32636.181818181816,2,0],[32727.181818181816,3,0],[32818.181818181816,0,0],[33091.181818181816,1,0],[33273.181818181816,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[33466.181818181816,2,0],[33818.181818181816,2,0],[34182.181818181816,2,0],[34363.181818181816,3,0],[34545.181818181816,0,0],[34727.181818181816,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[34918,2,0],[35091,3,0],[35273,0,0],[35455,2,0],[35636,3,0],[35818,0,0],[36000,2,0],[36182,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[36380,0,0],[36545,2,0],[36727,3,0],[36909,0,0],[37091,0,0],[37273,3,0],[37455,0,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[37834,2,0],[38000,3,0],[38182,0,0],[38364,2,0],[38545,3,0],[38727,0,0],[38909,2,0],[39091,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[39284,0,0],[39727,3,0],[39909,0,0],[40000,3,0],[40182,0,0],[40364,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[40736.181818181816,2,0],[40909.181818181816,3,0],[41091.181818181816,0,0],[41273.181818181816,2,0],[41454.181818181816,3,0],[41636.181818181816,0,0],[41818.181818181816,2,0],[42000.181818181816,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[42198.181818181816,0,0],[42363.181818181816,2,0],[42545.181818181816,3,0],[42727.181818181816,0,0],[42909.181818181816,0,0],[43091.181818181816,3,0],[43273.181818181816,0,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[43652.181818181816,2,0],[43818.181818181816,3,0],[44000.181818181816,0,0],[44182.181818181816,2,0],[44363.181818181816,3,0],[44545.181818181816,0,0],[44727.181818181816,2,0],[44909.181818181816,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[45102.181818181816,0,0],[45545.181818181816,3,0],[45727.181818181816,0,0],[45818.181818181816,3,0],[46000.181818181816,0,0],[46182.181818181816,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[46554.818181818184,0,0],[46817.818181818184,3,0],[46908.818181818184,1,0],[47181.818181818184,0,0],[47363.818181818184,3,0],[47454.818181818184,1,0],[47726.818181818184,2,0],[47908.818181818184,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[48011.818181818184,0,0],[48181.818181818184,2,0],[48363.818181818184,3,0],[48545.818181818184,0,0],[48726.818181818184,3,0],[48908.818181818184,2,0],[49090.818181818184,0,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[49545,3,0],[49455,0,0],[49636,2,0],[49818,3,0],[50000,0,0],[50182,2,0],[50364,3,0],[50545,0,0],[50636,3,0],[50727,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[50914,1,0],[51273,0,0],[51455,3,0],[51727,2,0],[51909,3,0],[52091,0,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[52373,0,0],[52636,3,0],[52727,1,0],[53000,0,0],[53182,3,0],[53273,1,0],[53545,2,0],[53727,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[53830,0,0],[54000,2,0],[54182,3,0],[54364,0,0],[54545,3,0],[54727,2,0],[54909,0,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[55363.181818181816,3,0],[55273.181818181816,0,0],[55454.181818181816,2,0],[55636.181818181816,3,0],[55818.181818181816,0,0],[56000.181818181816,2,0],[56182.181818181816,3,0],[56363.181818181816,0,0],[56454.181818181816,3,0],[56545.181818181816,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[56732.181818181816,1,0],[57091.181818181816,0,0],[57273.181818181816,3,0],[57545.181818181816,2,0],[57727.181818181816,3,0],[57909.181818181816,0,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[58182,3,0],[58545,3,0],[59000,2,0],[59091,0,0],[58727,1,0],[59364,1,0],[59455,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[59657,0,272.7272727272727],[60000,2,0],[60364,2,0],[60545,2,0],[60727,2,181.8181818181818]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[61100,2,0],[61455,2,0],[61636,3,0],[61818,1,0],[62000,0,0],[62182,3,0],[62364,0,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[62550,0,0],[63000,0,0],[63727,0,0],[63364,0,0],[63364,7,0],[63545,3,0],[63818,2,0],[63636,5,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[64000.181818181816,3,0],[64363.181818181816,3,0],[64818.181818181816,2,0],[64909.181818181816,0,0],[64545.181818181816,1,0],[65182.181818181816,1,0],[65273.181818181816,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[65475.181818181816,0,272.7272727272727],[65818.18181818182,2,0],[66182.18181818182,2,0],[66363.18181818182,2,0],[66545.18181818182,2,181.8181818181818]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[66918.18181818182,2,0],[67273.18181818182,2,0],[67454.18181818182,3,0],[67636.18181818182,1,0],[67818.18181818182,0,0],[68000.18181818182,3,0],[68182.18181818182,0,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[68368.18181818182,0,0],[68818.18181818182,0,0],[69545.18181818182,0,0],[69182.18181818182,0,0],[69182.18181818182,7,0],[69363.18181818182,3,0],[69636.18181818182,2,0],[69454.18181818182,5,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[69825,2,0],[70000,3,0],[70273,0,0],[70364,3,0],[70545,2,0],[70636,0,0],[71000,2,0],[70727,3,0],[71091,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[71280,2,0],[71636,2,0],[71818,0,0],[72091,2,0],[72273,3,0],[72364,0,0],[72545,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[72732,0,0],[73091,0,0],[73273,0,0],[73455,2,0],[73364,3,0],[73636,3,0],[73818,2,0],[74000,0,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[74195,2,0],[74364,3,0],[74545,2,0],[74727,0,0],[74909,1,0],[75091,3,0],[75273,0,0],[75455,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[75643.18181818182,2,0],[75818.18181818182,3,0],[76091.18181818182,0,0],[76182.18181818182,3,0],[76363.18181818182,2,0],[76454.18181818182,0,0],[76818.18181818182,2,0],[76545.18181818182,3,0],[76909.18181818182,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[77098.18181818182,2,0],[77454.18181818182,2,0],[77636.18181818182,0,0],[77909.18181818182,2,0],[78091.18181818182,3,0],[78182.18181818182,0,0],[78363.18181818182,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[78550.18181818182,0,0],[78909.18181818182,0,0],[79091.18181818182,0,0],[79273.18181818182,2,0],[79182.18181818182,3,0],[79454.18181818182,3,0],[79636.18181818182,2,0],[79818.18181818182,0,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[80013.18181818182,2,0],[80182.18181818182,3,0],[80363.18181818182,2,0],[80545.18181818182,0,0],[80727.18181818182,1,0],[80909.18181818182,3,0],[81091.18181818182,0,0],[81273.18181818182,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]}],"bpm":165,"sections":0,"needsVoices":true,"player1":"bf","player2":"spooky","sectionLengths":[],"speed":1.5000000000000004},"bpm":165,"sections":60,"notes":[{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[11636.818181818182,3,0],[11999.818181818182,3,0],[12363.818181818182,0,0],[12545.818181818182,3,0],[12726.818181818182,2,0],[12908.818181818182,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[13101.818181818182,0,0],[13454.818181818182,1,0],[13817.818181818182,3,0],[13999.818181818182,3,0],[14181.818181818182,3,200]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[14545.818181818182,3,0],[14908.818181818182,3,0],[15272.818181818182,3,0],[15454.818181818182,2,0],[15636.818181818182,0,0],[15817.818181818182,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[16008.818181818182,0,0],[16363.818181818182,0,0],[16726.818181818184,2,0],[17090.818181818184,0,0],[17272.818181818184,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[17455,3,0],[17818,3,0],[18182,0,0],[18364,3,0],[18545,2,0],[18727,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[18920,0,0],[19273,1,0],[19636,3,0],[19818,3,0],[20000,3,200]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[20364,3,0],[20727,3,0],[21091,3,0],[21273,2,0],[21455,0,0],[21636,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[21827,0,0],[22182,0,0],[22545,2,0],[22909,0,0],[23091,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[23273,2,0],[23455,1,0],[23636,0,0],[23818,0,0],[23909,3,0],[24000,2,0],[24182,0,0],[24364,2,0],[24545,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[24734,2,0],[25091,2,0],[25455,2,0],[25636,1,0],[25818,0,0],[26000,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[26193,0,0],[26545,0,0],[26727,0,0],[26818,2,0],[26909,3,0],[27000,0,0],[27273,1,0],[27455,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[27648,2,0],[28000,2,0],[28364,2,0],[28545,3,0],[28727,0,0],[28909,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[29091.181818181816,2,0],[29273.181818181816,1,0],[29454.181818181816,0,0],[29636.181818181816,0,0],[29727.181818181816,3,0],[29818.181818181816,2,0],[30000.181818181816,0,0],[30182.181818181816,2,0],[30363.181818181816,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[30552.181818181816,2,0],[30909.181818181816,2,0],[31273.181818181816,2,0],[31454.181818181816,1,0],[31636.181818181816,0,0],[31818.181818181816,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[32011.181818181816,0,0],[32363.181818181816,0,0],[32545.181818181816,0,0],[32636.181818181816,2,0],[32727.181818181816,3,0],[32818.181818181816,0,0],[33091.181818181816,1,0],[33273.181818181816,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[33466.181818181816,2,0],[33818.181818181816,2,0],[34182.181818181816,2,0],[34363.181818181816,3,0],[34545.181818181816,0,0],[34727.181818181816,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[34918,2,0],[35091,3,0],[35273,0,0],[35455,2,0],[35636,3,0],[35818,0,0],[36000,2,0],[36182,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[36380,0,0],[36545,2,0],[36727,3,0],[36909,0,0],[37091,0,0],[37273,3,0],[37455,0,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[37834,2,0],[38000,3,0],[38182,0,0],[38364,2,0],[38545,3,0],[38727,0,0],[38909,2,0],[39091,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[39284,0,0],[39727,3,0],[39909,0,0],[40000,3,0],[40182,0,0],[40364,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[40736.181818181816,2,0],[40909.181818181816,3,0],[41091.181818181816,0,0],[41273.181818181816,2,0],[41454.181818181816,3,0],[41636.181818181816,0,0],[41818.181818181816,2,0],[42000.181818181816,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[42198.181818181816,0,0],[42363.181818181816,2,0],[42545.181818181816,3,0],[42727.181818181816,0,0],[42909.181818181816,0,0],[43091.181818181816,3,0],[43273.181818181816,0,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[43652.181818181816,2,0],[43818.181818181816,3,0],[44000.181818181816,0,0],[44182.181818181816,2,0],[44363.181818181816,3,0],[44545.181818181816,0,0],[44727.181818181816,2,0],[44909.181818181816,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[45102.181818181816,0,0],[45545.181818181816,3,0],[45727.181818181816,0,0],[45818.181818181816,3,0],[46000.181818181816,0,0],[46182.181818181816,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[46554.818181818184,0,0],[46817.818181818184,3,0],[46908.818181818184,1,0],[47181.818181818184,0,0],[47363.818181818184,3,0],[47454.818181818184,1,0],[47726.818181818184,2,0],[47908.818181818184,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[48011.818181818184,0,0],[48181.818181818184,2,0],[48363.818181818184,3,0],[48545.818181818184,0,0],[48726.818181818184,3,0],[48908.818181818184,2,0],[49090.818181818184,0,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[49545,3,0],[49455,0,0],[49636,2,0],[49818,3,0],[50000,0,0],[50182,2,0],[50364,3,0],[50545,0,0],[50636,3,0],[50727,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[50914,1,0],[51273,0,0],[51455,3,0],[51727,2,0],[51909,3,0],[52091,0,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[52373,0,0],[52636,3,0],[52727,1,0],[53000,0,0],[53182,3,0],[53273,1,0],[53545,2,0],[53727,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[53830,0,0],[54000,2,0],[54182,3,0],[54364,0,0],[54545,3,0],[54727,2,0],[54909,0,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[55363.181818181816,3,0],[55273.181818181816,0,0],[55454.181818181816,2,0],[55636.181818181816,3,0],[55818.181818181816,0,0],[56000.181818181816,2,0],[56182.181818181816,3,0],[56363.181818181816,0,0],[56454.181818181816,3,0],[56545.181818181816,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[56732.181818181816,1,0],[57091.181818181816,0,0],[57273.181818181816,3,0],[57545.181818181816,2,0],[57727.181818181816,3,0],[57909.181818181816,0,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[58182,3,0],[58545,3,0],[59000,2,0],[59091,0,0],[58727,1,0],[59364,1,0],[59455,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[59657,0,272.7272727272727],[60000,2,0],[60364,2,0],[60545,2,0],[60727,2,181.8181818181818]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[61100,2,0],[61455,2,0],[61636,3,0],[61818,1,0],[62000,0,0],[62182,3,0],[62364,0,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[62550,0,0],[63000,0,0],[63727,0,0],[63364,0,0],[63364,7,0],[63545,3,0],[63818,2,0],[63636,5,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[64000.181818181816,3,0],[64363.181818181816,3,0],[64818.181818181816,2,0],[64909.181818181816,0,0],[64545.181818181816,1,0],[65182.181818181816,1,0],[65273.181818181816,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[65475.181818181816,0,272.7272727272727],[65818.18181818182,2,0],[66182.18181818182,2,0],[66363.18181818182,2,0],[66545.18181818182,2,181.8181818181818]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[66918.18181818182,2,0],[67273.18181818182,2,0],[67454.18181818182,3,0],[67636.18181818182,1,0],[67818.18181818182,0,0],[68000.18181818182,3,0],[68182.18181818182,0,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[68368.18181818182,0,0],[68818.18181818182,0,0],[69545.18181818182,0,0],[69182.18181818182,0,0],[69182.18181818182,7,0],[69363.18181818182,3,0],[69636.18181818182,2,0],[69454.18181818182,5,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[69825,2,0],[70000,3,0],[70273,0,0],[70364,3,0],[70545,2,0],[70636,0,0],[71000,2,0],[70727,3,0],[71091,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[71280,2,0],[71636,2,0],[71818,0,0],[72091,2,0],[72273,3,0],[72364,0,0],[72545,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[72732,0,0],[73091,0,0],[73273,0,0],[73455,2,0],[73364,3,0],[73636,3,0],[73818,2,0],[74000,0,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[74195,2,0],[74364,3,0],[74545,2,0],[74727,0,0],[74909,1,0],[75091,3,0],[75273,0,0],[75455,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[75643.18181818182,2,0],[75818.18181818182,3,0],[76091.18181818182,0,0],[76182.18181818182,3,0],[76363.18181818182,2,0],[76454.18181818182,0,0],[76818.18181818182,2,0],[76545.18181818182,3,0],[76909.18181818182,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[77098.18181818182,2,0],[77454.18181818182,2,0],[77636.18181818182,0,0],[77909.18181818182,2,0],[78091.18181818182,3,0],[78182.18181818182,0,0],[78363.18181818182,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[78550.18181818182,0,0],[78909.18181818182,0,0],[79091.18181818182,0,0],[79273.18181818182,2,0],[79182.18181818182,3,0],[79454.18181818182,3,0],[79636.18181818182,2,0],[79818.18181818182,0,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[80013.18181818182,2,0],[80182.18181818182,3,0],[80363.18181818182,2,0],[80545.18181818182,0,0],[80727.18181818182,1,0],[80909.18181818182,3,0],[81091.18181818182,0,0],[81273.18181818182,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]}]}
\ No newline at end of file
diff --git a/source/Alphabet.hx b/source/Alphabet.hx
index 9824e2f35..a5e1d9396 100644
--- a/source/Alphabet.hx
+++ b/source/Alphabet.hx
@@ -48,6 +48,7 @@ class Alphabet extends FlxSpriteGroup
this.text = text;
isBold = bold;
+
if (text != "")
{
if (typed)
@@ -77,7 +78,8 @@ class Alphabet extends FlxSpriteGroup
lastWasSpace = true;
}
- if (AlphaCharacter.alphabet.contains(character.toLowerCase()))
+ if (AlphaCharacter.alphabet.indexOf(character.toLowerCase()) != -1)
+ //if (AlphaCharacter.alphabet.contains(character.toLowerCase()))
{
if (lastSprite != null)
{
@@ -121,6 +123,7 @@ class Alphabet extends FlxSpriteGroup
_finalText = text;
doSplitWords();
+
// trace(arrayShit);
var loopNum:Int = 0;
@@ -137,6 +140,7 @@ class Alphabet extends FlxSpriteGroup
xPosResetted = true;
xPos = 0;
curRow += 1;
+
}
if (splitWords[loopNum] == " ")
@@ -144,9 +148,17 @@ class Alphabet extends FlxSpriteGroup
lastWasSpace = true;
}
+ #if (haxe >= "4.0.0")
var isNumber:Bool = AlphaCharacter.numbers.contains(splitWords[loopNum]);
var isSymbol:Bool = AlphaCharacter.symbols.contains(splitWords[loopNum]);
- if (AlphaCharacter.alphabet.contains(splitWords[loopNum].toLowerCase()) || isNumber || isSymbol)
+ #else
+ var isNumber:Bool = AlphaCharacter.numbers.indexOf(splitWords[loopNum]) != -1;
+ var isSymbol:Bool = AlphaCharacter.symbols.indexOf(splitWords[loopNum]) != -1;
+ #end
+
+ if (AlphaCharacter.alphabet.indexOf(splitWords[loopNum].toLowerCase()) != -1 || isNumber || isSymbol)
+ //if (AlphaCharacter.alphabet.contains(splitWords[loopNum].toLowerCase()) || isNumber || isSymbol)
+
{
if (lastSprite != null && !xPosResetted)
{
diff --git a/source/Controls.hx b/source/Controls.hx
index b5715a614..b251ac61d 100644
--- a/source/Controls.hx
+++ b/source/Controls.hx
@@ -108,7 +108,11 @@ class Controls extends FlxActionSet
var _pause = new FlxActionDigital(Action.PAUSE);
var _reset = new FlxActionDigital(Action.RESET);
+ #if (haxe >= "4.0.0")
var byName:Map = [];
+ #else
+ var byName:Map = new Map();
+ #end
public var gamepadsAdded:Array = [];
public var keyboardScheme = KeyboardScheme.None;
@@ -193,6 +197,7 @@ class Controls extends FlxActionSet
inline function get_RESET()
return _reset.check();
+ #if (haxe >= "4.0.0")
public function new(name, scheme = None)
{
super(name);
@@ -219,6 +224,36 @@ class Controls extends FlxActionSet
setKeyboardScheme(scheme, false);
}
+ #else
+ public function new(name, scheme:KeyboardScheme = null)
+ {
+ super(name);
+
+ add(_up);
+ add(_left);
+ add(_right);
+ add(_down);
+ add(_upP);
+ add(_leftP);
+ add(_rightP);
+ add(_downP);
+ add(_upR);
+ add(_leftR);
+ add(_rightR);
+ add(_downR);
+ add(_accept);
+ add(_back);
+ add(_pause);
+ add(_reset);
+
+ for (action in digitalActions)
+ byName[action.name] = action;
+
+ if (scheme == null)
+ scheme = None;
+ setKeyboardScheme(scheme, false);
+ }
+ #end
override function update()
{
@@ -278,7 +313,7 @@ class Controls extends FlxActionSet
* @param func
* @return ->Void)
*/
- function forEachBound(control:Control, func:(FlxActionDigital, FlxInputState) -> Void)
+ function forEachBound(control:Control, func:FlxActionDigital->FlxInputState->Void)
{
switch (control)
{
@@ -332,6 +367,7 @@ class Controls extends FlxActionSet
public function copyFrom(controls:Controls, ?device:Device)
{
+ #if (haxe >= "4.0.0")
for (name => action in controls.byName)
{
for (input in action.inputs)
@@ -340,14 +376,31 @@ class Controls extends FlxActionSet
byName[name].add(cast input);
}
}
+ #else
+ for (name in controls.byName.keys())
+ {
+ var action = controls.byName[name];
+ for (input in action.inputs)
+ {
+ if (device == null || isDevice(input, device))
+ byName[name].add(cast input);
+ }
+ }
+ #end
switch (device)
{
case null:
// add all
+ #if (haxe >= "4.0.0")
for (gamepad in controls.gamepadsAdded)
if (!gamepadsAdded.contains(gamepad))
gamepadsAdded.push(gamepad);
+ #else
+ for (gamepad in controls.gamepadsAdded)
+ if (gamepadsAdded.indexOf(gamepad) == -1)
+ gamepadsAdded.push(gamepad);
+ #end
mergeKeyboardScheme(controls.keyboardScheme);
@@ -383,7 +436,11 @@ class Controls extends FlxActionSet
*/
public function bindKeys(control:Control, keys:Array)
{
+ #if (haxe >= "4.0.0")
inline forEachBound(control, (action, state) -> addKeys(action, keys, state));
+ #else
+ forEachBound(control, function(action, state) addKeys(action, keys, state));
+ #end
}
/**
@@ -392,7 +449,11 @@ class Controls extends FlxActionSet
*/
public function unbindKeys(control:Control, keys:Array)
{
+ #if (haxe >= "4.0.0")
inline forEachBound(control, (action, _) -> removeKeys(action, keys));
+ #else
+ forEachBound(control, function(action, _) removeKeys(action, keys));
+ #end
}
inline static function addKeys(action:FlxActionDigital, keys:Array, state:FlxInputState)
@@ -418,6 +479,8 @@ class Controls extends FlxActionSet
removeKeyboard();
keyboardScheme = scheme;
+
+ #if (haxe >= "4.0.0")
switch (scheme)
{
case Solo:
@@ -450,6 +513,40 @@ class Controls extends FlxActionSet
case None: // nothing
case Custom: // nothing
}
+ #else
+ switch (scheme)
+ {
+ case Solo:
+ bindKeys(Control.UP, [W, FlxKey.UP]);
+ bindKeys(Control.DOWN, [S, FlxKey.DOWN]);
+ bindKeys(Control.LEFT, [A, FlxKey.LEFT]);
+ bindKeys(Control.RIGHT, [D, FlxKey.RIGHT]);
+ bindKeys(Control.ACCEPT, [Z, SPACE, ENTER]);
+ bindKeys(Control.BACK, [BACKSPACE, ESCAPE]);
+ bindKeys(Control.PAUSE, [P, ENTER, ESCAPE]);
+ bindKeys(Control.RESET, [R]);
+ case Duo(true):
+ bindKeys(Control.UP, [W]);
+ bindKeys(Control.DOWN, [S]);
+ bindKeys(Control.LEFT, [A]);
+ bindKeys(Control.RIGHT, [D]);
+ bindKeys(Control.ACCEPT, [G, Z]);
+ bindKeys(Control.BACK, [H, X]);
+ bindKeys(Control.PAUSE, [ONE]);
+ bindKeys(Control.RESET, [R]);
+ case Duo(false):
+ bindKeys(Control.UP, [FlxKey.UP]);
+ bindKeys(Control.DOWN, [FlxKey.DOWN]);
+ bindKeys(Control.LEFT, [FlxKey.LEFT]);
+ bindKeys(Control.RIGHT, [FlxKey.RIGHT]);
+ bindKeys(Control.ACCEPT, [O]);
+ bindKeys(Control.BACK, [P]);
+ bindKeys(Control.PAUSE, [ENTER]);
+ bindKeys(Control.RESET, [BACKSPACE]);
+ case None: // nothing
+ case Custom: // nothing
+ }
+ #end
}
function removeKeyboard()
@@ -469,15 +566,27 @@ class Controls extends FlxActionSet
public function addGamepad(id:Int, ?buttonMap:Map>):Void
{
gamepadsAdded.push(id);
+
+ #if (haxe >= "4.0.0")
for (control => buttons in buttonMap)
- bindButtons(control, id, buttons);
+ inline bindButtons(control, id, buttons);
+ #else
+ for (control in buttonMap.keys())
+ bindButtons(control, id, buttonMap[control]);
+ #end
}
inline function addGamepadLiteral(id:Int, ?buttonMap:Map>):Void
{
gamepadsAdded.push(id);
+
+ #if (haxe >= "4.0.0")
for (control => buttons in buttonMap)
inline bindButtons(control, id, buttons);
+ #else
+ for (control in buttonMap.keys())
+ bindButtons(control, id, buttonMap[control]);
+ #end
}
public function removeGamepad(deviceID:Int = FlxInputDeviceID.ALL):Void
@@ -498,6 +607,7 @@ class Controls extends FlxActionSet
public function addDefaultGamepad(id):Void
{
+ #if !switch
addGamepadLiteral(id, [
Control.ACCEPT => [A],
Control.BACK => [B],
@@ -508,6 +618,19 @@ class Controls extends FlxActionSet
Control.PAUSE => [START],
Control.RESET => [Y]
]);
+ #else
+ addGamepadLiteral(id, [
+ //Swap A and B for switch
+ Control.ACCEPT => [B],
+ Control.BACK => [A],
+ Control.UP => [DPAD_UP, LEFT_STICK_DIGITAL_UP],
+ Control.DOWN => [DPAD_DOWN, LEFT_STICK_DIGITAL_DOWN],
+ Control.LEFT => [DPAD_LEFT, LEFT_STICK_DIGITAL_LEFT],
+ Control.RIGHT => [DPAD_RIGHT, LEFT_STICK_DIGITAL_RIGHT],
+ Control.PAUSE => [START],
+ Control.RESET => [Y]
+ ]);
+ #end
}
/**
@@ -516,7 +639,11 @@ class Controls extends FlxActionSet
*/
public function bindButtons(control:Control, id, buttons)
{
+ #if (haxe >= "4.0.0")
inline forEachBound(control, (action, state) -> addButtons(action, buttons, state, id));
+ #else
+ forEachBound(control, function(action, state) addButtons(action, buttons, state, id));
+ #end
}
/**
@@ -525,7 +652,11 @@ class Controls extends FlxActionSet
*/
public function unbindButtons(control:Control, gamepadID:Int, buttons)
{
+ #if (haxe >= "4.0.0")
inline forEachBound(control, (action, _) -> removeButtons(action, gamepadID, buttons));
+ #else
+ forEachBound(control, function(action, _) removeButtons(action, gamepadID, buttons));
+ #end
}
inline static function addButtons(action:FlxActionDigital, buttons:Array, state, id)
diff --git a/source/PlayState.hx b/source/PlayState.hx
index 9bc96a88d..0163efc84 100644
--- a/source/PlayState.hx
+++ b/source/PlayState.hx
@@ -820,7 +820,11 @@ class PlayState extends MusicBeatState
{
trace('SONG DONE' + isStoryMode);
+
+ #if !switch
NGio.postScore(songScore, SONG.song);
+ #end
+
if (isStoryMode)
{
@@ -834,7 +838,10 @@ class PlayState extends MusicBeatState
StoryMenuState.weekUnlocked[1] = true;
+ #if !switch
NGio.unlockMedal(60961);
+ #end
+
FlxG.save.data.weekUnlocked = StoryMenuState.weekUnlocked;
FlxG.save.flush();
diff --git a/source/PlayerSettings.hx b/source/PlayerSettings.hx
index fa034581d..b275b9b51 100644
--- a/source/PlayerSettings.hx
+++ b/source/PlayerSettings.hx
@@ -14,12 +14,21 @@ class PlayerSettings
static public var player1(default, null):PlayerSettings;
static public var player2(default, null):PlayerSettings;
+ #if (haxe >= "4.0.0")
static public final onAvatarAdd = new FlxTypedSignalVoid>();
static public final onAvatarRemove = new FlxTypedSignalVoid>();
+ #else
+ static public var onAvatarAdd = new FlxTypedSignalVoid>();
+ static public var onAvatarRemove = new FlxTypedSignalVoid>();
+ #end
public var id(default, null):Int;
+ #if (haxe >= "4.0.0")
public final controls:Controls;
+ #else
+ public var controls:Controls;
+ #end
// public var avatar:Player;
// public var camera(get, never):PlayCamera;
diff --git a/source/Song.hx b/source/Song.hx
index 08eae4921..8af708367 100644
--- a/source/Song.hx
+++ b/source/Song.hx
@@ -49,7 +49,7 @@ class Song
public static function loadFromJson(jsonInput:String, ?folder:String):SwagSong
{
- // var rawJson = Assets.getText('assets/data/ridge/ridge.json').trim();
+
var rawJson = Assets.getText('assets/data/' + folder.toLowerCase() + '/' + jsonInput.toLowerCase() + '.json').trim();
while (!rawJson.endsWith("}"))
diff --git a/source/TitleState.hx b/source/TitleState.hx
index aa7c2ffc2..172e8fed4 100644
--- a/source/TitleState.hx
+++ b/source/TitleState.hx
@@ -42,6 +42,7 @@ class TitleState extends MusicBeatState
var wackyImage:FlxSprite;
+
override public function create():Void
{
#if (!web)
@@ -56,12 +57,16 @@ class TitleState extends MusicBeatState
super.create();
- #if (!debug && NG_LOGIN)
+
+ #if (!switch && !debug && NG_LOGIN)
+
var ng:NGio = new NGio(APIStuff.API, APIStuff.EncKey);
#end
#if SKIP_TO_PLAYSTATE
- FlxG.switchState(new ChartingState());
+
+ FlxG.switchState(new StoryMenuState());
+
#else
startIntro();
#end
@@ -199,7 +204,11 @@ class TitleState extends MusicBeatState
if (pressedEnter && !transitioning && skippedIntro)
{
+
+ #if !switch
NGio.unlockMedal(60960);
+ #end
+
titleText.animation.play('press');
FlxG.camera.flash(FlxColor.WHITE, 1);