diff --git a/.github/workflows/html5.yml b/.github/workflows/html5.yml
new file mode 100644
index 0000000000..bf1844688b
--- /dev/null
+++ b/.github/workflows/html5.yml
@@ -0,0 +1,54 @@
+# This is a basic workflow to help you get started with Actions
+
+name: HTML5 Build CI
+
+# Controls when the workflow will run
+on: [push, pull_request]
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+ # This workflow contains a single job called "build"
+ build:
+ # The type of runner that the job will run on
+ runs-on: ubuntu-latest
+
+ # Steps represent a sequence of tasks that will be executed as part of the job
+ steps:
+ # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+ - uses: actions/checkout@v2
+ - uses: krdlab/setup-haxe@v1
+ with:
+ haxe-version: 4.1.5
+ # Runs a set of commands using the runners shell
+ - name: script run line haha
+ run: |
+ sudo add-apt-repository ppa:haxe/releases -y
+ sudo apt-get update
+ sudo apt-get install gcc-multilib g++-multilib haxe -y
+ mkdir "%HAXELIB_ROOT%"
+ haxelib setup "%HAXELIB_ROOT%"
+ haxelib install lime 7.9.0
+ haxelib install openfl
+ haxelib install flixel
+ haxelib run lime setup flixel
+ haxelib run lime setup
+ haxelib install flixel-tools
+ haxelib install flixel-addons
+ haxelib install flixel-ui
+ haxelib install hscript
+ haxelib install flixel-addons
+ haxelib git faxe https://github.com/uhrobots/faxe
+ haxelib git polymod https://github.com/MasterEric/polymod.git
+ haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc
+ haxelib git extension-webm https://github.com/KadeDev/extension-webm
+ haxelib run lime rebuild extension-webm linux
+ haxelib git linc_luajit https://github.com/MasterEric/linc_luajit.git
+ haxelib git hxvm-luajit https://github.com/nebulazorua/hxvm-luajit.git
+ haxelib install actuate
+ haxelib list
+ haxelib run lime build html5
+
+ - uses: actions/upload-artifact@v2
+ with:
+ name: HTML5 Build
+ path: export/release/html5/bin
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
new file mode 100644
index 0000000000..924795d799
--- /dev/null
+++ b/.github/workflows/linux.yml
@@ -0,0 +1,54 @@
+# This is a basic workflow to help you get started with Actions
+
+name: Linux Build CI
+
+# Controls when the workflow will run
+on: [push, pull_request]
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+ # This workflow contains a single job called "build"
+ build:
+ # The type of runner that the job will run on
+ runs-on: ubuntu-latest
+
+ # Steps represent a sequence of tasks that will be executed as part of the job
+ steps:
+ # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+ - uses: actions/checkout@v2
+ - uses: krdlab/setup-haxe@v1
+ with:
+ haxe-version: 4.1.5
+ # Runs a set of commands using the runners shell
+ - name: script run line haha
+ run: |
+ sudo add-apt-repository ppa:haxe/releases -y
+ sudo apt-get update
+ sudo apt-get install gcc-multilib g++-multilib haxe -y
+ mkdir "%HAXELIB_ROOT%"
+ haxelib setup "%HAXELIB_ROOT%"
+ haxelib install lime 7.9.0
+ haxelib install openfl
+ haxelib install flixel
+ haxelib run lime setup flixel
+ haxelib run lime setup
+ haxelib install flixel-tools
+ haxelib install flixel-addons
+ haxelib install flixel-ui
+ haxelib install hscript
+ haxelib install flixel-addons
+ haxelib git faxe https://github.com/uhrobots/faxe
+ haxelib git polymod https://github.com/MasterEric/polymod.git
+ haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc
+ haxelib git extension-webm https://github.com/KadeDev/extension-webm
+ haxelib run lime rebuild extension-webm linux
+ haxelib git linc_luajit https://github.com/MasterEric/linc_luajit.git
+ haxelib git hxvm-luajit https://github.com/nebulazorua/hxvm-luajit.git
+ haxelib install actuate
+ haxelib list
+ haxelib run lime build linux
+
+ - uses: actions/upload-artifact@v2
+ with:
+ name: Linux Build
+ path: export/release/linux/bin
diff --git a/.github/workflows/superlinter.yml b/.github/workflows/superlinter.yml
deleted file mode 100644
index a10058fc04..0000000000
--- a/.github/workflows/superlinter.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-jobs:
- build:
- runs-on: [ubuntu-latest, macos-latest]
- steps:
- - uses: krdlab/setup-haxe@v1
- with:
- haxe-version: 4.0.5
- - run: |
- haxe -version
- haxelib install hxnodejs
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml
index d729621441..93a6986999 100644
--- a/.github/workflows/windows.yml
+++ b/.github/workflows/windows.yml
@@ -1,9 +1,9 @@
# This is a basic workflow to help you get started with Actions
-name: CI
+name: Windows Build CI
# Controls when the workflow will run
-on: push
+on: [push, pull_request]
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
@@ -18,16 +18,14 @@ jobs:
- uses: actions/checkout@v2
- uses: krdlab/setup-haxe@v1
with:
- haxe-version: 4.0.5
+ haxe-version: 4.1.5
# Runs a set of commands using the runners shell
- name: script run line haha
run: |
- cinst neko --version 2.3.0 -y
cinst haxe --version 4.1.5 -y
RefreshEnv
mkdir "%HAXELIB_ROOT%"
haxelib setup "%HAXELIB_ROOT%"
- Install project dependencies
haxelib install lime 7.9.0
RefreshEnv
haxelib install openfl
@@ -35,18 +33,17 @@ jobs:
haxelib run lime setup flixel
haxelib run lime setup
haxelib install flixel-tools
- haxelib run flixel-tools setup -y # Can't do this since it asks [y/n] even with -y argument! Stupid
haxelib install flixel-addons
haxelib install flixel-ui
haxelib install hscript
- haxelib install newgrounds
haxelib install flixel-addons
haxelib git faxe https://github.com/uhrobots/faxe
- haxelib git polymod https://github.com/larsiusprime/polymod.git
+ haxelib git polymod https://github.com/MasterEric/polymod.git
haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc
haxelib git extension-webm https://github.com/KadeDev/extension-webm
haxelib run lime rebuild extension-webm windows
- haxelib install linc_luajit
+ haxelib git linc_luajit https://github.com/nebulazorua/linc_luajit.git
+ haxelib git hxvm-luajit https://github.com/nebulazorua/hxvm-luajit
haxelib install actuate
haxelib list
haxelib run lime build windows
diff --git a/.gitignore b/.gitignore
index 8e2966de9d..1fe2d30330 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1 @@
-export/
-.vscode/
-assets/preload/data/milf/modchart.lua
+export/
\ No newline at end of file
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000000..0239fb55ef
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,8 @@
+{
+ "recommendations": [
+ "nadako.vshaxe",
+ "wiggin77.codedox",
+ "vshaxe.hxcpp-debugger",
+ "openfl.lime-vscode-extension"
+ ]
+}
\ No newline at end of file
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000000..e9fbe66de4
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,47 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "Windows (Debug)",
+ "type": "hxcpp",
+ "preLaunchTask": "Build Windows (Debug)",
+ "request": "launch",
+ "program": "${workspaceFolder}/export/debug/windows/bin/Kade Engine.exe"
+ },
+ {
+ "name": "Windows (Release)",
+ "type": "hxcpp",
+ "preLaunchTask": "Build Windows (Release)",
+ "request": "launch",
+ "program": "${workspaceFolder}/export/debug/windows/bin/Kade Engine.exe"
+ },
+ {
+ "name": "HTML5 (Debug)",
+ "request": "launch",
+ "preLaunchTask": "Build HTML5 (Debug)",
+ "type": "node-terminal",
+ "command": "npx live-server \"${workspaceFolder}/export/debug/html5/bin/\""
+ },
+ {
+ "name": "HTML5 (Release)",
+ "request": "launch",
+ "preLaunchTask": "Build HTML5 (Release)",
+ "type": "node-terminal",
+ "command": "npx live-server \"${workspaceFolder}/export/release/html5/bin/\""
+ },
+ {
+ "name": "Linux (Debug)",
+ "type": "hxcpp",
+ "preLaunchTask": "Build Linux (Debug)",
+ "request": "launch",
+ "program": "${workspaceFolder}/export/debug/linux/bin/Kade Engine"
+ },
+ {
+ "name": "Linux (Release)",
+ "type": "hxcpp",
+ "preLaunchTask": "Build Linux (Release)",
+ "request": "launch",
+ "program": "${workspaceFolder}/export/debug/linux/bin/Kade Engine"
+ },
+ ],
+}
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000000..53792bd022
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,50 @@
+{
+ "[haxe]": {
+ "editor.formatOnSave": true,
+ "editor.formatOnPaste": true
+ },
+ "lime.targetConfigurations": [
+ {
+ "label": "Build Windows (Debug)",
+ "target": "windows",
+ "args": [
+ "-debug"
+ ]
+ },
+ {
+ "label": "Build Windows (Release)",
+ "target": "windows",
+ "args": [
+ "-release"
+ ]
+ },
+ {
+ "label": "Build Linux (Debug)",
+ "target": "linux",
+ "args": [
+ "-debug"
+ ]
+ },
+ {
+ "label": "Build Linux (Release)",
+ "target": "linux",
+ "args": [
+ "-release"
+ ]
+ },
+ {
+ "label": "Build HTML5 (Debug)",
+ "target": "html5",
+ "args": [
+ "-debug"
+ ]
+ },
+ {
+ "label": "Build HTML5 (Release)",
+ "target": "html5",
+ "args": [
+ "-release"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index 0930c09c67..012d4d784b 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -1,21 +1,65 @@
{
"version": "2.0.0",
"tasks": [
- {
- "type": "lime",
- "command": "test",
- "group": {
- "kind": "build",
- "isDefault": true
- }
- },
- {
- "type": "lime",
- "command": "build",
- "group": {
- "kind": "build",
- "isDefault": true
- }
- }
+ {
+ "label": "Build Windows (Debug)",
+ "type": "lime",
+ "targetConfiguration": "Build Windows (Debug)",
+ "command": "build",
+ "group": {
+ "kind": "build",
+ "isDefault": true
+ }
+ },
+ {
+ "label": "Build Windows (Release)",
+ "type": "lime",
+ "targetConfiguration": "Build Windows (Release)",
+ "command": "build",
+ "group": {
+ "kind": "build",
+ "isDefault": true
+ }
+ },
+ {
+ "label": "Build HTML5 (Debug)",
+ "type": "lime",
+ "targetConfiguration": "Build HTML5 (Debug)",
+ "command": "build",
+ "group": {
+ "kind": "build",
+ "isDefault": true
+ }
+ },
+ {
+ "label": "Build HTML5 (Release)",
+ "type": "lime",
+ "targetConfiguration": "Build HTML5 (Release)",
+ "command": "build",
+ "group": {
+ "kind": "build",
+ "isDefault": true
+ }
+ },
+ {
+ "label": "Build Linux (Debug)",
+ "type": "lime",
+ "targetConfiguration": "Build Linux (Debug)",
+ "command": "build",
+ "group": {
+ "kind": "build",
+ "isDefault": true
+ }
+ },
+ {
+ "label": "Build Linux (Release)",
+ "type": "lime",
+ "targetConfiguration": "Build Linux (Release)",
+ "command": "build",
+ "group": {
+ "kind": "build",
+ "isDefault": true
+ }
+ }
]
}
diff --git a/Project.xml b/Project.xml
index 977e694d62..7b87057dda 100644
--- a/Project.xml
+++ b/Project.xml
@@ -123,11 +123,10 @@
-
-
+
@@ -187,7 +186,23 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/README.md b/README.md
index fc33559e77..7d4f8b8b4d 100644
--- a/README.md
+++ b/README.md
@@ -82,3 +82,6 @@ This game was made with love to Newgrounds and its community. Extra love to Tom
- [Puyo](https://github.com/puyoxyz) - Setting up appveyor and a lot of other help
- [Smokey](https://github.com/Smokey555) - telling me that I should do the tricky asset loading
- [Poco](https://github.com/poco0317) - math degree (aka most of the fucking math in this project)
+- [Fox](https://twitter.com/FoxeruKun) - circle noteskins
+- [Orbyy](https://twitter.com/orbyynew) - pixel circle noteskins
+- [Shubs](https://github.com/Yoshubs) - Forever Engine dump cache
\ No newline at end of file
diff --git a/appveyor-linux.yml b/appveyor-linux.yml
index 37e9a21fa2..2e8404a6a4 100644
--- a/appveyor-linux.yml
+++ b/appveyor-linux.yml
@@ -24,7 +24,6 @@ install:
- haxelib install flixel-addons
- haxelib install flixel-ui
- haxelib install hscript
- - haxelib install newgrounds
- haxelib git faxe https://github.com/uhrobots/faxe
- haxelib git polymod https://github.com/larsiusprime/polymod.git
- haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc
diff --git a/appveyor-macos.yml b/appveyor-macos.yml
index 902861d5bd..5631ed61bb 100644
--- a/appveyor-macos.yml
+++ b/appveyor-macos.yml
@@ -24,7 +24,6 @@ install:
- haxelib install flixel-addons
- haxelib install flixel-ui
- haxelib install hscript
- - haxelib install newgrounds
- haxelib git faxe https://github.com/uhrobots/faxe
- haxelib git polymod https://github.com/larsiusprime/polymod.git
- haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc
diff --git a/appveyor-windows.yml b/appveyor-windows.yml
index af96272877..1ac5d6c3e7 100644
--- a/appveyor-windows.yml
+++ b/appveyor-windows.yml
@@ -28,7 +28,6 @@ install:
- haxelib install flixel-addons
- haxelib install flixel-ui
- haxelib install hscript
- - haxelib install newgrounds
- haxelib install flixel-addons
- haxelib git faxe https://github.com/uhrobots/faxe
- haxelib git polymod https://github.com/larsiusprime/polymod.git
diff --git a/art/flashFiles/FNF_Circles_NOTE_Assets.fla b/art/flashFiles/FNF_Circles_NOTE_Assets.fla
new file mode 100644
index 0000000000..4e279089f1
Binary files /dev/null and b/art/flashFiles/FNF_Circles_NOTE_Assets.fla differ
diff --git a/assets/preload/data/blammed/0.offset b/assets/preload/data/blammed/0.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/blammed/0.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/blammed/blammed-easy.json b/assets/preload/data/blammed/blammed-easy.json
deleted file mode 100644
index 6f10e77340..0000000000
--- a/assets/preload/data/blammed/blammed-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11818.1816,1,0],[12363.6367,0,0],[12727.2725,3,181.818176]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[13090.9092,2,0],[13454.5449,2,0],[14181.8184,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[14727.2725,1,0],[15272.7275,0,0],[15818.1816,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[16181.8184,1,0],[17090.9082,1,181.818176]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[17636.3633,1,0],[18181.8184,0,0],[18545.4551,3,181.818176]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[18909.09,2,0],[19272.7266,2,0],[20000,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[20545.4551,1,0],[21090.9082,0,0],[21636.3633,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[22000,1,0],[22909.09,1,181.818176]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[23454.5449,2,0],[24000,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[24727.2734,3,0],[25090.9082,0,0],[25454.5449,2,0],[25818.1816,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26363.6367,2,0],[26909.09,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[27636.3633,3,0],[28000,1,0],[28363.6367,3,0],[28727.2715,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[29272.7266,2,0],[29818.1816,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30545.4551,3,0],[30909.09,0,0],[31272.7266,2,0],[31636.3633,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32181.8184,2,0],[32727.2715,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33454.5469,3,0],[33818.18,1,0],[34181.8164,3,0],[34545.4531,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[35090.91,0,0],[35636.3633,3,0],[36000,1,272.727264]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[36363.6367,2,181.818176],[36727.2734,3,0],[37090.91,2,0],[37454.5469,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[38000,0,0],[38545.4531,3,0],[38909.09,1,272.727264]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[39272.7266,0,272.727264],[39636.3633,1,0],[40000,3,0],[40363.6367,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[40909.09,0,0],[41454.5469,3,0],[41818.18,1,272.727264]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[42181.8164,2,181.818176],[42545.4531,3,0],[42909.09,2,0],[43272.7266,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[43818.18,0,0],[44363.6367,3,0],[44727.2734,1,272.727264]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[45090.91,0,272.727264],[45454.5469,1,0],[45818.18,3,0],[46181.8164,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[46545.4531,0,0],[46909.09,3,0],[47272.7266,0,0],[47636.3633,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48000,2,0],[48363.6367,3,0],[48727.2734,1,0],[49090.91,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49454.5469,3,0],[49818.18,3,0],[50181.8164,2,0],[50545.4531,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[50909.09,0,0],[51636.3633,2,0],[52000,2,0],[52181.8164,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[52363.6367,0,0],[52727.2734,3,0],[53090.91,0,0],[53454.5469,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[53818.18,2,0],[54181.8164,3,0],[54545.4531,1,0],[54909.09,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[55272.7266,3,0],[55636.3633,3,0],[56000,2,0],[56181.8164,5,0],[56363.6367,4,0],[56363.6367,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56727.2734,7,0],[56727.2734,0,0],[57090.91,6,0],[57454.543,6,272.727264],[57454.543,2,0],[57818.18,7,272.727264],[57818.18,2,0],[58000,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[58181.8164,0,0],[58545.4531,3,0],[58909.09,0,0],[59272.7266,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[59636.3633,2,0],[60000,3,0],[60363.6367,1,0],[60727.2734,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61090.91,3,0],[61454.543,3,0],[61818.18,2,0],[62181.8164,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[62545.4531,2,0],[62727.2734,3,0],[62909.09,2,0],[63272.7266,1,0],[63636.3633,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[64000,0,0],[64363.6367,3,0],[64727.2734,0,0],[65090.91,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65454.543,2,0],[65818.18,3,0],[66181.82,1,0],[66545.45,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[66909.09,3,0],[67272.73,3,0],[67636.36,2,0],[68000,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[68363.63,2,0],[68545.45,3,0],[68727.27,2,0],[69090.91,1,0],[69454.55,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[69818.18,5,272.727264],[70000,0,0],[70545.45,3,0],[70909.09,1,272.727264]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[71272.73,2,181.818176],[71636.36,3,0],[72000,2,0],[72363.63,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72909.09,0,0],[73454.55,3,0],[73818.18,1,272.727264]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[74181.82,0,272.727264],[74545.45,1,0],[74909.09,3,0],[75272.73,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[75818.18,0,0],[76363.63,3,0],[76727.27,1,272.727264]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[77090.91,2,181.818176],[77454.55,3,0],[77818.18,2,0],[78181.82,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78727.27,0,0],[79272.73,3,0],[79636.36,1,272.727264]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80000,0,272.727264],[80363.63,1,0],[80727.27,3,0],[81090.91,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[81636.36,0,0],[82181.82,3,0],[82545.45,1,272.727264]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[82909.09,2,181.818176],[83272.73,3,0],[83636.36,2,0],[84000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[84545.45,0,0],[85090.91,3,0],[85454.55,1,272.727264]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[85818.18,0,272.727264],[86181.82,1,0],[86545.45,3,0],[86909.09,2,0],[87090.91,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[87454.55,0,0],[88000,3,0],[88363.63,1,272.727264]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[88727.27,2,181.818176],[89090.91,3,0],[89454.55,2,0],[89818.18,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[90363.63,0,0],[90909.09,3,0],[91272.73,1,272.727264]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[91636.36,0,272.727264],[92000,1,0],[92363.63,3,0],[92727.27,2,0],[92909.09,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":165,"changeBPM":false,"mustHitSection":true}],"player2":"pico","song":"Blammed","stage":"philly","needsVoices":true,"validScore":true,"bpm":165,"speed":1.2}}
\ No newline at end of file
diff --git a/assets/preload/data/blammed/blammed-hard.json b/assets/preload/data/blammed/blammed-hard.json
deleted file mode 100644
index 6917b49f9c..0000000000
--- a/assets/preload/data/blammed/blammed-hard.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11818.1816,1,0],[12000,3,0],[12181.8184,0,0],[12363.6367,0,0],[12545.4541,1,0],[12727.2725,3,181.818176]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[13090.9092,2,0],[13272.7275,0,0],[13454.5449,2,0],[13636.3633,3,0],[13727.2725,0,0],[13818.1816,3,0],[14000,3,0],[14181.8184,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[14727.2725,1,0],[14909.0908,3,0],[15090.9092,0,0],[15272.7275,0,0],[15454.5449,1,0],[15636.3633,3,0],[15818.1816,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[16000,3,0],[16181.8184,1,90.90909],[16363.6357,3,0],[16545.4551,2,0],[16727.2734,1,90.90909],[16909.09,3,0],[17090.9082,1,181.818176]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[17636.3633,1,0],[17818.1816,3,0],[18000,0,0],[18181.8184,0,0],[18363.6367,1,0],[18545.4551,3,181.818176]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[18909.09,2,0],[19090.9082,0,0],[19272.7266,2,0],[19454.5449,3,0],[19545.4551,0,0],[19636.3633,3,0],[19818.1816,3,0],[20000,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[20545.4551,1,0],[20727.2734,3,0],[20909.09,0,0],[21090.9082,0,0],[21272.7266,1,0],[21454.5449,3,0],[21636.3633,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[21818.1816,3,0],[22000,1,90.90909],[22181.8184,3,0],[22363.6367,2,0],[22545.4551,1,90.90909],[22727.2734,3,0],[22909.09,1,181.818176]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[23454.5449,2,0],[23636.3633,3,0],[23818.1816,3,0],[24000,2,0],[24181.8184,0,0],[24363.6367,3,0],[24545.4551,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[24727.2734,3,0],[24909.09,1,0],[25090.9082,0,0],[25272.7266,1,0],[25454.5449,2,0],[25636.3633,3,0],[25818.1816,0,0],[26000,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26363.6367,2,0],[26545.4551,3,0],[26727.2734,3,0],[26909.09,1,0],[27090.9082,0,0],[27272.7266,3,0],[27454.5449,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[27636.3633,3,0],[27818.1816,0,0],[28000,1,0],[28181.8184,1,0],[28363.6367,3,0],[28545.4551,2,0],[28727.2715,0,0],[28909.09,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[29272.7266,2,0],[29454.5449,3,0],[29636.3633,3,0],[29818.1816,2,0],[30000,0,0],[30181.8184,3,0],[30363.6367,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30545.4551,3,0],[30727.2715,1,0],[30909.09,0,0],[31090.9082,1,0],[31272.7266,2,0],[31454.5449,3,0],[31636.3633,0,0],[31818.1816,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32181.8184,2,0],[32363.6367,3,0],[32545.4551,3,0],[32727.2715,1,0],[32909.09,0,0],[33090.91,3,0],[33272.7266,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33454.5469,3,0],[33636.3633,0,0],[33818.18,1,0],[34000,1,0],[34181.8164,3,0],[34363.6367,2,0],[34545.4531,0,0],[34727.2734,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[35090.91,0,0],[35272.7266,2,181.818176],[35636.3633,3,0],[35818.18,3,0],[36000,1,272.727264]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[36363.6367,2,181.818176],[36727.2734,3,0],[37090.91,2,0],[37454.5469,0,0],[37636.3633,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[38000,0,0],[38181.8164,2,181.818176],[38545.4531,3,0],[38727.2734,3,0],[38909.09,1,272.727264]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[39272.7266,0,272.727264],[39636.3633,1,0],[40000,3,0],[40090.91,3,0],[40181.8164,1,0],[40363.6367,2,0],[40545.4531,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[40909.09,0,0],[41090.91,2,181.818176],[41454.5469,3,0],[41636.3633,3,0],[41818.18,1,272.727264]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[42181.8164,2,181.818176],[42545.4531,3,0],[42909.09,2,0],[43272.7266,0,0],[43454.5469,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[43818.18,0,0],[44000,2,181.818176],[44363.6367,3,0],[44545.4531,3,0],[44727.2734,1,272.727264]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[45090.91,0,272.727264],[45454.5469,1,0],[45818.18,3,0],[45909.09,3,0],[46000,1,0],[46181.8164,2,0],[46363.6367,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[46545.4531,0,0],[46727.2734,0,0],[46909.09,3,0],[47090.91,1,0],[47181.8164,3,0],[47272.7266,1,0],[47454.5469,0,0],[47636.3633,1,0],[47818.18,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48000,2,0],[48181.8164,2,0],[48363.6367,3,0],[48545.4531,2,0],[48727.2734,1,0],[48909.09,0,0],[49000,1,0],[49090.91,0,0],[49272.7266,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49454.5469,3,0],[49636.3633,3,0],[49818.18,3,0],[50000,2,0],[50090.91,0,0],[50181.8164,2,0],[50363.6367,0,0],[50545.4531,0,0],[50727.2734,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[50909.09,0,0],[51090.91,0,0],[51272.7266,3,0],[51454.5469,3,0],[51636.3633,2,0],[51818.18,0,0],[52000,2,0],[52181.8164,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[52363.6367,0,0],[52545.4531,0,0],[52727.2734,3,0],[52909.09,1,0],[53000,3,0],[53090.91,1,0],[53272.7266,0,0],[53454.5469,1,0],[53636.3633,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[53818.18,2,0],[54000,2,0],[54181.8164,3,0],[54363.6367,2,0],[54545.4531,1,0],[54727.2734,0,0],[54818.18,1,0],[54909.09,0,0],[55090.91,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[55272.7266,3,0],[55454.5469,3,0],[55636.3633,3,0],[55818.18,2,0],[55909.09,0,0],[56000,2,0],[56181.8164,5,0],[56181.8164,0,0],[56363.6367,4,0],[56363.6367,0,0],[56545.4531,4,0],[56545.4531,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56727.2734,7,0],[56727.2734,0,0],[56909.09,7,0],[56909.09,0,0],[57090.91,6,0],[57090.91,3,0],[57272.7266,7,0],[57272.7266,3,0],[57454.543,6,272.727264],[57454.543,2,0],[57636.3633,0,0],[57818.18,7,272.727264],[57818.18,2,0],[58000,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[58181.8164,0,0],[58363.6367,0,0],[58545.4531,3,0],[58727.2734,1,0],[58818.18,3,0],[58909.09,1,0],[59090.91,0,0],[59272.7266,1,0],[59454.543,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[59636.3633,2,0],[59818.18,2,0],[60000,3,0],[60181.8164,2,0],[60363.6367,1,0],[60545.4531,0,0],[60636.3633,1,0],[60727.2734,0,0],[60909.09,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61090.91,3,0],[61272.7266,3,0],[61454.543,3,0],[61636.3633,2,0],[61727.2734,0,0],[61818.18,2,0],[62000,0,0],[62181.8164,0,0],[62363.6367,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[62545.4531,2,0],[62727.2734,3,0],[62909.09,2,0],[63090.91,0,0],[63272.7266,1,0],[63454.543,0,0],[63636.3633,2,0],[63818.18,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[64000,0,0],[64181.8164,0,0],[64363.6367,3,0],[64545.4531,1,0],[64636.3633,3,0],[64727.2734,1,0],[64909.09,0,0],[65090.91,1,0],[65272.7266,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65454.543,2,0],[65636.36,2,0],[65818.18,3,0],[66000,2,0],[66181.82,1,0],[66363.63,0,0],[66454.55,1,0],[66545.45,0,0],[66727.27,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[66909.09,3,0],[67090.91,3,0],[67272.73,3,0],[67454.55,2,0],[67545.45,0,0],[67636.36,2,0],[67818.18,0,0],[68000,0,0],[68181.82,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[68363.63,2,0],[68545.45,3,0],[68727.27,2,0],[68909.09,0,0],[69090.91,1,0],[69272.73,0,0],[69454.55,2,0],[69636.36,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[69818.18,5,272.727264],[70000,0,0],[70181.82,2,181.818176],[70545.45,3,0],[70727.27,3,0],[70909.09,1,272.727264]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[71272.73,2,181.818176],[71636.36,3,0],[72000,2,0],[72363.63,0,0],[72545.45,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72909.09,0,0],[73090.91,2,181.818176],[73454.55,3,0],[73636.36,3,0],[73818.18,1,272.727264]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[74181.82,0,272.727264],[74545.45,1,0],[74909.09,3,0],[75000,3,0],[75090.91,1,0],[75272.73,2,0],[75454.55,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[75818.18,0,0],[76000,2,181.818176],[76363.63,3,0],[76545.45,3,0],[76727.27,1,272.727264]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[77090.91,2,181.818176],[77454.55,3,0],[77818.18,2,0],[78181.82,0,0],[78363.63,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78727.27,0,0],[78909.09,2,181.818176],[79272.73,3,0],[79454.55,3,0],[79636.36,1,272.727264]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80000,0,272.727264],[80363.63,1,0],[80727.27,3,0],[80818.18,3,0],[80909.09,1,0],[81090.91,2,0],[81272.73,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[81636.36,0,0],[81727.27,0,0],[81818.18,2,181.818176],[82181.82,3,0],[82363.63,3,0],[82545.45,1,272.727264]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[82909.09,2,181.818176],[83272.73,3,0],[83636.36,2,0],[84000,0,0],[84181.82,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[84545.45,0,0],[84727.27,2,181.818176],[85090.91,3,0],[85272.73,3,0],[85454.55,1,272.727264]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[85818.18,0,272.727264],[86181.82,1,0],[86545.45,3,0],[86636.36,3,0],[86727.27,1,0],[86909.09,2,0],[87090.91,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[87454.55,0,0],[87545.45,0,0],[87636.36,2,181.818176],[88000,3,0],[88181.82,3,0],[88363.63,1,272.727264]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[88727.27,2,181.818176],[89090.91,3,0],[89454.55,2,0],[89818.18,0,0],[90000,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[90363.63,0,0],[90545.45,2,181.818176],[90909.09,3,0],[91090.91,3,0],[91272.73,1,272.727264]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[91636.36,0,272.727264],[92000,1,0],[92363.63,3,0],[92454.55,3,0],[92545.45,1,0],[92727.27,2,0],[92909.09,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":165,"changeBPM":false,"mustHitSection":true}],"player2":"pico","song":"Blammed","stage":"philly","needsVoices":true,"validScore":true,"bpm":165,"speed":2.3}}
\ No newline at end of file
diff --git a/assets/preload/data/blammed/blammed.json b/assets/preload/data/blammed/blammed.json
deleted file mode 100644
index 3e5b31412e..0000000000
--- a/assets/preload/data/blammed/blammed.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11818.1816,1,0],[12363.6367,0,0],[12727.2725,3,181.818176]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[13090.9092,2,0],[13454.5449,2,0],[13818.1816,3,0],[14181.8184,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[14727.2725,1,0],[15272.7275,0,0],[15818.1816,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[16181.8184,1,0],[16727.2734,1,90.90909],[17090.9082,1,181.818176]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[17636.3633,1,0],[18181.8184,0,0],[18545.4551,3,181.818176]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[18909.09,2,0],[19272.7266,2,0],[19636.3633,3,0],[20000,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[20545.4551,1,0],[21090.9082,0,0],[21636.3633,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[22000,1,0],[22545.4551,1,90.90909],[22909.09,1,181.818176]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[23454.5449,2,0],[24000,2,0],[24181.8184,0,0],[24545.4551,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[24727.2734,3,0],[25090.9082,0,0],[25454.5449,2,0],[25818.1816,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26363.6367,2,0],[26909.09,1,0],[27090.9082,0,0],[27454.5449,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[27636.3633,3,0],[28000,1,0],[28363.6367,3,0],[28727.2715,0,0],[28909.09,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[29272.7266,2,0],[29818.1816,2,0],[30000,0,0],[30363.6367,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30545.4551,3,0],[30909.09,0,0],[31272.7266,2,0],[31636.3633,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32181.8184,2,0],[32727.2715,1,0],[32909.09,0,0],[33272.7266,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33454.5469,3,0],[33818.18,1,0],[34181.8164,3,0],[34545.4531,0,0],[34727.2734,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[35090.91,0,0],[35636.3633,3,0],[36000,1,272.727264]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[36363.6367,2,181.818176],[36727.2734,3,0],[37090.91,2,0],[37454.5469,0,0],[37636.3633,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[38000,0,0],[38545.4531,3,0],[38909.09,1,272.727264]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[39272.7266,0,272.727264],[39636.3633,1,0],[40000,3,0],[40363.6367,2,0],[40545.4531,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[40909.09,0,0],[41454.5469,3,0],[41818.18,1,272.727264]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[42181.8164,2,181.818176],[42545.4531,3,0],[42909.09,2,0],[43272.7266,0,0],[43454.5469,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[43818.18,0,0],[44363.6367,3,0],[44727.2734,1,272.727264]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[45090.91,0,272.727264],[45454.5469,1,0],[45818.18,3,0],[46181.8164,2,0],[46363.6367,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[46545.4531,0,0],[46909.09,3,0],[47272.7266,1,0],[47454.5469,0,0],[47636.3633,1,0],[47818.18,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48000,2,0],[48363.6367,3,0],[48727.2734,1,0],[48909.09,0,0],[49090.91,0,0],[49272.7266,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49454.5469,3,0],[49818.18,3,0],[50181.8164,2,0],[50363.6367,0,0],[50545.4531,0,0],[50727.2734,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[50909.09,0,0],[51272.7266,3,0],[51636.3633,2,0],[51818.18,0,0],[52000,2,0],[52181.8164,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[52363.6367,0,0],[52727.2734,3,0],[53090.91,1,0],[53272.7266,0,0],[53454.5469,1,0],[53636.3633,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[53818.18,2,0],[54181.8164,3,0],[54545.4531,1,0],[54727.2734,0,0],[54909.09,0,0],[55090.91,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[55272.7266,3,0],[55636.3633,3,0],[56000,2,0],[56181.8164,5,0],[56181.8164,0,0],[56363.6367,4,0],[56363.6367,0,0],[56545.4531,4,0],[56545.4531,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56727.2734,7,0],[56727.2734,0,0],[57090.91,6,0],[57090.91,3,0],[57272.7266,7,0],[57454.543,6,272.727264],[57454.543,2,0],[57636.3633,0,0],[57818.18,7,272.727264],[57818.18,2,0],[58000,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[58181.8164,0,0],[58545.4531,3,0],[58909.09,1,0],[59090.91,0,0],[59272.7266,1,0],[59454.543,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[59636.3633,2,0],[60000,3,0],[60363.6367,1,0],[60545.4531,0,0],[60727.2734,0,0],[60909.09,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61090.91,3,0],[61454.543,3,0],[61818.18,2,0],[62000,0,0],[62181.8164,0,0],[62363.6367,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[62545.4531,2,0],[62727.2734,3,0],[62909.09,2,0],[63090.91,0,0],[63272.7266,1,0],[63636.3633,2,0],[63818.18,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[64000,0,0],[64363.6367,3,0],[64727.2734,1,0],[64909.09,0,0],[65090.91,1,0],[65272.7266,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65454.543,2,0],[65818.18,3,0],[66181.82,1,0],[66363.63,0,0],[66545.45,0,0],[66727.27,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[66909.09,3,0],[67272.73,3,0],[67636.36,2,0],[67818.18,0,0],[68000,0,0],[68181.82,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[68363.63,2,0],[68545.45,3,0],[68727.27,2,0],[68909.09,0,0],[69090.91,1,0],[69454.55,2,0],[69636.36,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[69818.18,5,272.727264],[70000,0,0],[70181.82,2,181.818176],[70545.45,3,0],[70909.09,1,272.727264]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[71272.73,2,181.818176],[71636.36,3,0],[72000,2,0],[72363.63,0,0],[72545.45,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72909.09,0,0],[73454.55,3,0],[73818.18,1,272.727264]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[74181.82,0,272.727264],[74545.45,1,0],[74909.09,3,0],[75272.73,2,0],[75454.55,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[75818.18,0,0],[76000,2,181.818176],[76363.63,3,0],[76727.27,1,272.727264]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[77090.91,2,181.818176],[77454.55,3,0],[77818.18,2,0],[78181.82,0,0],[78363.63,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78727.27,0,0],[79272.73,3,0],[79636.36,1,272.727264]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80000,0,272.727264],[80363.63,1,0],[80727.27,3,0],[81090.91,2,0],[81272.73,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[81636.36,0,0],[81818.18,2,181.818176],[82181.82,3,0],[82545.45,1,272.727264]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[82909.09,2,181.818176],[83272.73,3,0],[83636.36,2,0],[84000,0,0],[84181.82,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[84545.45,0,0],[84727.27,2,181.818176],[85090.91,3,0],[85454.55,1,272.727264]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[85818.18,0,272.727264],[86181.82,1,0],[86545.45,3,0],[86909.09,2,0],[87090.91,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[87454.55,0,0],[87636.36,2,181.818176],[88000,3,0],[88363.63,1,272.727264]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[88727.27,2,181.818176],[89090.91,3,0],[89454.55,2,0],[89818.18,0,0],[90000,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[90363.63,0,0],[90545.45,2,181.818176],[90909.09,3,0],[91272.73,1,272.727264]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[91636.36,0,272.727264],[92000,1,0],[92363.63,3,0],[92727.27,2,0],[92909.09,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":165,"changeBPM":false,"mustHitSection":true}],"player2":"pico","song":"Blammed","stage":"philly","needsVoices":true,"validScore":true,"bpm":165,"speed":1.5}}
\ No newline at end of file
diff --git a/assets/preload/data/bopeebo/0.offset b/assets/preload/data/bopeebo/0.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/bopeebo/0.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/bopeebo/bopeebo-easy.json b/assets/preload/data/bopeebo/bopeebo-easy.json
deleted file mode 100644
index f32e1dd274..0000000000
--- a/assets/preload/data/bopeebo/bopeebo-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"song":"Bopeebo","bpm":100.0,"needsVoices":true,"player1":"bf","player2":"dad","speed":1.0,"notes":[{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[0.0,2,0.0],[600.0,3,450.0],[1200.0,3,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[2400.0,2,0.0],[3000.0,3,450.0],[3600.0,3,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[4800.0,1,300.0],[5400.0,0,300.0],[6000.0,3,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[7200.0,1,300.0],[7800.0,0,300.0],[8400.0,3,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[9600.0,1,0.0],[10200.0,3,0.0],[10500.0,0,0.0],[10800.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[12000.0,1,0.0],[12600.0,3,0.0],[12900.0,0,0.0],[13200.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[14400.0,3,0.0],[14700.0,1,0.0],[15300.0,0,0.0],[15600.0,2,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[16800.0,3,0.0],[17100.0,1,0.0],[17700.0,0,0.0],[18000.0,2,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[19200.0,0,0.0],[19500.0,3,0.0],[19800.0,1,900.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[21600.0,0,0.0],[21900.0,3,0.0],[22200.0,1,900.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[24000.0,1,0.0],[24300.0,3,0.0],[24600.0,0,900.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[26400.0,1,0.0],[26700.0,3,0.0],[27000.0,0,900.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[28800.0,2,0.0],[29100.0,3,0.0],[29400.0,0,1200.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[31200.0,2,0.0],[31500.0,3,0.0],[31800.0,0,1200.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[33600.0,0,0.0],[33900.0,3,0.0],[34500.0,2,0.0],[34800.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[36000.0,0,0.0],[36300.0,3,0.0],[36900.0,2,0.0],[37200.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[38400.0,2,450.0],[39000.0,3,300.0],[39600.0,0,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[40800.0,2,450.0],[41400.0,3,300.0],[42000.0,0,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[43200.0,1,0.0],[43800.0,2,0.0],[44400.0,1,0.0],[44700.0,1,0.0],[45000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[45600.0,1,0.0],[46200.0,2,0.0],[46800.0,1,0.0],[47100.0,1,0.0],[47400.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[48000.0,2,450.0],[48600.0,3,300.0],[49200.0,0,450.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[50400.0,2,450.0],[51000.0,3,300.0],[51600.0,0,450.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[52800.0,3,1800.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[55200.0,3,1800.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[57600.0,2,0.0],[57900.0,3,0.0],[58200.0,0,1200.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[60000.0,2,0.0],[60300.0,3,0.0],[60600.0,0,1200.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[62400.0,0,0.0],[62700.0,3,0.0],[63300.0,2,0.0],[63600.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[64800.0,0,0.0],[65100.0,3,0.0],[65700.0,2,0.0],[66000.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[67200.0,2,0.0],[67500.0,3,0.0],[67800.0,0,0.0],[68100.0,2,0.0],[68400.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[69600.0,2,0.0],[69900.0,3,0.0],[70200.0,0,0.0],[70500.0,2,0.0],[70800.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[72000.0,0,0.0],[72300.0,3,0.0],[72900.0,2,0.0],[73200.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[74400.0,0,0.0],[74700.0,3,0.0],[75300.0,2,0.0],[75600.0,1,600.0]]}]},"generatedBy":"SNIFF ver.6"}
\ No newline at end of file
diff --git a/assets/preload/data/bopeebo/bopeebo-hard.json b/assets/preload/data/bopeebo/bopeebo-hard.json
deleted file mode 100644
index 09e5800460..0000000000
--- a/assets/preload/data/bopeebo/bopeebo-hard.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"song":"Bopeebo","bpm":100.0,"needsVoices":true,"player1":"bf","player2":"dad","speed":1.3,"notes":[{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[0.0,2,0.0],[600.0,3,600.0],[1200.0,3,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[2400.0,2,0.0],[3000.0,3,600.0],[3600.0,3,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[4800.0,1,300.0],[5400.0,0,300.0],[6000.0,3,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[7200.0,1,300.0],[7800.0,0,300.0],[8400.0,3,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[9600.0,1,300.0],[10200.0,3,0.0],[10500.0,0,0.0],[10800.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[12000.0,1,300.0],[12600.0,3,0.0],[12900.0,0,0.0],[13200.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[14400.0,3,0.0],[14700.0,1,0.0],[15300.0,0,0.0],[15600.0,2,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[16800.0,3,0.0],[17100.0,1,0.0],[17700.0,0,0.0],[18000.0,2,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[19200.0,0,0.0],[19500.0,3,0.0],[19800.0,1,900.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[21600.0,0,0.0],[21900.0,3,0.0],[22200.0,1,900.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[24000.0,1,0.0],[24300.0,3,0.0],[24600.0,0,900.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[26400.0,1,0.0],[26700.0,3,0.0],[27000.0,0,900.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[28800.0,2,0.0],[29100.0,3,0.0],[29400.0,0,1200.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[31200.0,2,0.0],[31500.0,3,0.0],[31800.0,0,1200.0],[33300.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[33600.0,0,0.0],[33900.0,3,0.0],[34500.0,2,0.0],[34575.0,0,0.0],[34800.0,1,600.0],[35700.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[36000.0,0,0.0],[36300.0,3,0.0],[36900.0,2,0.0],[36975.0,0,0.0],[37200.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[38400.0,2,450.0],[39000.0,3,300.0],[39600.0,0,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[40800.0,2,450.0],[41400.0,3,300.0],[42000.0,0,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[43200.0,1,0.0],[43800.0,2,0.0],[44400.0,1,0.0],[44550.0,1,0.0],[44700.0,1,0.0],[45000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[45600.0,1,0.0],[46200.0,2,0.0],[46800.0,1,0.0],[46950.0,1,0.0],[47100.0,1,0.0],[47400.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[48000.0,2,450.0],[48600.0,3,300.0],[49200.0,0,450.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[50400.0,2,450.0],[51000.0,3,300.0],[51600.0,0,450.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[52800.0,3,1800.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[55200.0,3,1800.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[57600.0,2,0.0],[57900.0,3,0.0],[58200.0,0,1200.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[60000.0,2,0.0],[60300.0,3,0.0],[60600.0,0,1200.0],[62100.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[62400.0,0,0.0],[62700.0,3,0.0],[63300.0,2,0.0],[63375.0,0,0.0],[63600.0,1,600.0],[64500.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[64800.0,0,0.0],[65100.0,3,0.0],[65700.0,2,0.0],[65775.0,0,0.0],[66000.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[67200.0,2,0.0],[67500.0,3,0.0],[67800.0,0,0.0],[68100.0,2,0.0],[68400.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[69600.0,2,0.0],[69900.0,3,0.0],[70200.0,0,0.0],[70500.0,2,0.0],[70800.0,1,600.0],[71700.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[72000.0,0,0.0],[72300.0,3,0.0],[72900.0,2,0.0],[72975.0,0,0.0],[73200.0,1,600.0],[74100.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[74400.0,0,0.0],[74700.0,3,0.0],[75300.0,2,0.0],[75375.0,0,0.0],[75600.0,1,600.0]]}]},"generatedBy":"SNIFF ver.6"}
\ No newline at end of file
diff --git a/assets/preload/data/bopeebo/bopeebo.json b/assets/preload/data/bopeebo/bopeebo.json
deleted file mode 100644
index 3567ce5e44..0000000000
--- a/assets/preload/data/bopeebo/bopeebo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"song":"Bopeebo","bpm":100.0,"needsVoices":true,"player1":"bf","player2":"dad","speed":1.0,"notes":[{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[0.0,2,0.0],[600.0,3,600.0],[1200.0,3,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[2400.0,2,0.0],[3000.0,3,600.0],[3600.0,3,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[4800.0,1,300.0],[5400.0,0,300.0],[6000.0,3,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[7200.0,1,300.0],[7800.0,0,300.0],[8400.0,3,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[9600.0,1,300.0],[10200.0,3,0.0],[10500.0,0,0.0],[10800.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[12000.0,1,300.0],[12600.0,3,0.0],[12900.0,0,0.0],[13200.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[14400.0,3,0.0],[14700.0,1,0.0],[15300.0,0,0.0],[15600.0,2,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[16800.0,3,0.0],[17100.0,1,0.0],[17700.0,0,0.0],[18000.0,2,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[19200.0,0,0.0],[19500.0,3,0.0],[19800.0,1,900.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[21600.0,0,0.0],[21900.0,3,0.0],[22200.0,1,900.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[24000.0,1,0.0],[24300.0,3,0.0],[24600.0,0,900.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[26400.0,1,0.0],[26700.0,3,0.0],[27000.0,0,900.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[28800.0,2,0.0],[29100.0,3,0.0],[29400.0,0,1200.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[31200.0,2,0.0],[31500.0,3,0.0],[31800.0,0,1200.0],[33300.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[33600.0,0,0.0],[33900.0,3,0.0],[34500.0,2,0.0],[34800.0,1,600.0],[35700.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[36000.0,0,0.0],[36300.0,3,0.0],[36900.0,2,0.0],[37200.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[38400.0,2,450.0],[39000.0,3,300.0],[39600.0,0,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[40800.0,2,450.0],[41400.0,3,300.0],[42000.0,0,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[43200.0,1,0.0],[43800.0,2,0.0],[44400.0,1,0.0],[44550.0,1,0.0],[44700.0,1,0.0],[45000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[45600.0,1,0.0],[46200.0,2,0.0],[46800.0,1,0.0],[46950.0,1,0.0],[47100.0,1,0.0],[47400.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[48000.0,2,450.0],[48600.0,3,300.0],[49200.0,0,450.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[50400.0,2,450.0],[51000.0,3,300.0],[51600.0,0,450.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[52800.0,3,1800.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[55200.0,3,1800.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[57600.0,2,0.0],[57900.0,3,0.0],[58200.0,0,1200.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[60000.0,2,0.0],[60300.0,3,0.0],[60600.0,0,1200.0],[62100.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[62400.0,0,0.0],[62700.0,3,0.0],[63300.0,2,0.0],[63600.0,1,600.0],[64500.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[64800.0,0,0.0],[65100.0,3,0.0],[65700.0,2,0.0],[66000.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[67200.0,2,0.0],[67500.0,3,0.0],[67800.0,0,0.0],[68100.0,2,0.0],[68400.0,1,600.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[69600.0,2,0.0],[69900.0,3,0.0],[70200.0,0,0.0],[70500.0,2,0.0],[70800.0,1,600.0],[71700.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[72000.0,0,0.0],[72300.0,3,0.0],[72900.0,2,0.0],[73200.0,1,600.0],[74100.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[74400.0,0,0.0],[74700.0,3,0.0],[75300.0,2,0.0],[75600.0,1,600.0]]}]},"generatedBy":"SNIFF ver.6"}
\ No newline at end of file
diff --git a/assets/preload/data/characters/gf.json b/assets/preload/data/characters/gf.json
new file mode 100644
index 0000000000..229f53932c
--- /dev/null
+++ b/assets/preload/data/characters/gf.json
@@ -0,0 +1,70 @@
+{
+ "name": "Girlfriend",
+ "asset": "characters/GF_assets",
+ "barColor": "#A5004D",
+ "startingAnim": "danceRight",
+ "animations": [
+ {
+ "name": "singLEFT",
+ "prefix": "GF left note",
+ "offsets": [0, -19]
+ },
+ {
+ "name": "singRIGHT",
+ "prefix": "GF Right Note",
+ "offsets": [0, -20]
+ },
+ {
+ "name": "singUP",
+ "prefix": "GF Up Note",
+ "offsets": [0, 4]
+ },
+ {
+ "name": "singDOWN",
+ "prefix": "GF Down Note",
+ "offsets": [0, -20]
+ },
+ {
+ "name": "danceLeft",
+ "prefix": "GF Dancing Beat",
+ "offsets": [0, -9],
+ "frameIndices": [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
+ },
+ {
+ "name": "danceRight",
+ "prefix": "GF Dancing Beat",
+ "offsets": [0, -9],
+ "frameIndices": [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
+ },
+ {
+ "name": "cheer",
+ "prefix": "GF Cheer",
+ "offsets": [0, 0]
+ },
+ {
+ "name": "hairBlow",
+ "prefix": "GF Dancing Beat Hair blowing",
+ "offsets": [45, -8],
+ "frameIndices": [0, 1, 2, 3],
+ "looped": true
+ },
+ {
+ "name": "hairFall",
+ "prefix": "GF Dancing Beat Hair Landing",
+ "offsets": [0, -9],
+ "frameIndices": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
+ },
+ {
+ "name": "sad",
+ "prefix": "gf sad",
+ "offsets": [-2, -21],
+ "frameIndices": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
+ },
+ {
+ "name": "scared",
+ "prefix": "GF FEAR",
+ "offsets": [-2, -17],
+ "looped": true
+ }
+ ]
+}
\ No newline at end of file
diff --git a/assets/preload/data/cocoa/0.offset b/assets/preload/data/cocoa/0.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/cocoa/0.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/cocoa/cocoa-easy.json b/assets/preload/data/cocoa/cocoa-easy.json
deleted file mode 100644
index 8b002f3704..0000000000
--- a/assets/preload/data/cocoa/cocoa-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-christmas","gfVersion":"gf-christmas","notes":[{"sectionNotes":[[0,0,0],[600,2,0],[1350,1,0],[1650,3,0],[2100,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[2400,0,0],[3000,2,0],[3750,1,0],[4050,3,0],[4500,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[4800,0,0],[5400,2,0],[5700,0,0],[6300,2,0],[6600,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[7200,2,0],[7500,0,0],[8100,2,0],[8400,0,0],[9000,2,0],[9300,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[9600,0,0],[10200,2,0],[10950,1,0],[11250,3,0],[11700,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[12000,0,0],[12600,2,0],[13350,1,0],[13650,3,0],[14100,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[14400,0,0],[15000,2,0],[15300,0,0],[15900,2,0],[16200,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[16800,2,0],[17100,0,0],[17700,2,0],[18000,0,0],[18600,2,0],[18900,1,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[19500,3,150],[19800,1,450],[20400,2,1050]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[22500,1,0],[23100,1,0],[23400,3,0],[23700,1,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[24000,0,0],[24600,2,0],[24900,0,0],[25500,2,0],[25800,0,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[26400,2,0],[26700,0,0],[27300,2,0],[27600,0,0],[28200,2,0],[28500,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[28800,6,600],[29100,3,150],[29400,1,450],[30000,2,1050]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32100,1,0],[32700,1,0],[33000,3,0],[33300,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33600,0,0],[34200,2,0],[34500,0,0],[35100,2,0],[35400,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[36000,2,0],[36300,0,0],[36900,2,0],[37200,0,0],[37800,2,0],[38100,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[39000,0,0],[39450,3,0],[40050,2,0],[40500,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[40800,1,0],[41400,0,0],[41850,3,0],[42450,2,0],[42900,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[43200,1,0],[43800,0,0],[44250,3,0],[44850,2,0],[45300,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[45600,0,0],[46050,0,0],[46200,3,0],[46950,0,0],[47100,3,0],[47400,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48600,0,0],[49050,3,0],[49650,2,0],[50100,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[50400,1,0],[51000,0,0],[51450,3,0],[52050,2,0],[52500,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[52800,1,0],[53400,0,0],[53850,3,0],[54450,2,0],[54900,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[55200,0,0],[55650,0,0],[55800,3,0],[56550,0,0],[56700,3,0],[57000,0,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[57750,0,0],[58200,2,450],[58800,3,450],[59400,2,150],[59700,0,750]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[60600,2,300],[61200,3,450],[61800,2,450]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[62400,0,0],[63000,2,0],[63300,0,0],[63900,2,0],[64200,0,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[64800,2,0],[65100,0,0],[65700,2,0],[66000,0,0],[66600,2,0],[66900,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[67350,0,0],[67800,2,450],[68400,3,450],[69000,2,150],[69300,0,750]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[70200,2,300],[70800,3,450],[71400,2,450]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[72000,0,0],[72600,2,0],[72900,0,0],[73500,2,0],[73800,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[74400,2,0],[74700,0,0],[75300,2,0],[75600,0,0],[76200,2,0],[76500,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[76800,0,0],[77400,2,0],[78150,1,0],[78450,3,0],[78900,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[79200,0,0],[79800,2,0],[80550,1,0],[80850,3,0],[81300,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[81600,0,0],[82200,2,0],[82950,1,0],[83250,3,0],[83700,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[84000,0,0],[84600,2,0],[85350,1,0],[85650,3,0],[86100,0,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[86400,0,0],[86700,3,0],[87300,3,0],[87600,0,0],[87900,3,0],[88200,3,0],[88500,3,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[88800,0,0],[89100,3,0],[89700,3,0],[90000,3,0],[90600,3,0],[90900,2,0],[91050,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[91200,0,0],[91500,3,0],[92100,3,0],[92400,0,0],[92700,3,0],[93000,3,0],[93300,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[93600,0,0],[93900,3,0],[94500,3,0],[94800,3,0],[95400,3,0],[95700,2,0],[95850,0,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[96000,0,0],[96300,3,0],[96900,3,0],[97200,0,0],[97500,3,0],[97800,3,0],[98100,3,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[98400,0,0],[98700,3,0],[99300,3,0],[99600,3,0],[100200,3,0],[100500,2,0],[100650,0,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[100800,7,600],[100800,0,0],[101100,3,0],[101700,3,0],[102000,0,0],[102300,3,0],[102600,3,0],[102900,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[103200,0,0],[103500,3,0],[104100,3,0],[104400,3,0],[105000,3,0],[105300,2,0],[105450,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[105600,3,600]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":100,"changeBPM":false,"mustHitSection":true}],"player2":"parents-christmas","song":"Cocoa","stage":"mall","needsVoices":true,"validScore":true,"bpm":100,"speed":1.3}}
\ No newline at end of file
diff --git a/assets/preload/data/cocoa/cocoa-hard.json b/assets/preload/data/cocoa/cocoa-hard.json
deleted file mode 100644
index 00cd4c0808..0000000000
--- a/assets/preload/data/cocoa/cocoa-hard.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-christmas","gfVersion":"gf-christmas","notes":[{"sectionNotes":[[0,0,0],[600,2,0],[900,0,0],[1350,1,0],[1650,3,0],[1950,1,0],[2100,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[2400,0,0],[3000,2,0],[3300,0,0],[3750,1,0],[4050,3,0],[4350,1,0],[4500,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[4800,0,0],[4950,3,0],[5100,0,0],[5250,3,0],[5400,2,0],[5700,0,0],[5850,3,0],[6000,0,0],[6150,3,0],[6300,2,0],[6600,0,0],[6750,3,0],[6900,0,0],[7050,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[7200,2,0],[7500,0,0],[7650,3,0],[7800,0,0],[7950,3,0],[8100,2,0],[8400,0,0],[8550,3,0],[8700,0,0],[8850,3,0],[9000,2,0],[9300,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[9600,0,0],[10200,2,0],[10500,0,0],[10950,1,0],[11250,3,0],[11550,1,0],[11700,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[12000,0,0],[12600,2,0],[12900,0,0],[13350,1,0],[13650,3,0],[13950,1,0],[14100,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[14400,0,0],[14550,3,0],[14700,0,0],[14850,3,0],[15000,2,0],[15300,0,0],[15450,3,0],[15600,0,0],[15750,3,0],[15900,2,0],[16200,0,0],[16350,3,0],[16500,0,0],[16650,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[16800,2,0],[17100,0,0],[17250,3,0],[17400,0,0],[17550,3,0],[17700,2,0],[18000,0,0],[18150,3,0],[18300,0,0],[18450,3,0],[18600,2,0],[18900,1,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[19500,3,150],[19800,1,450],[20400,2,1050]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[22500,1,0],[22650,3,0],[22800,0,150],[23100,1,0],[23400,3,0],[23700,1,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[24000,0,0],[24150,3,0],[24300,0,0],[24450,3,0],[24600,2,0],[24900,0,0],[25050,3,0],[25200,0,0],[25350,3,0],[25500,2,0],[25800,0,0],[25950,3,0],[26100,0,0],[26250,3,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[26400,2,0],[26700,0,0],[26850,3,0],[27000,0,0],[27150,3,0],[27300,2,0],[27600,0,0],[27750,3,0],[27900,0,0],[28050,3,0],[28200,2,0],[28500,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[28800,6,600],[29100,3,150],[29400,1,450],[30000,2,1050]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32100,1,0],[32250,3,0],[32400,0,150],[32700,1,0],[33000,3,0],[33300,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33600,0,0],[33750,3,0],[33900,0,0],[34050,3,0],[34200,2,0],[34500,0,0],[34650,3,0],[34800,0,0],[34950,3,0],[35100,2,0],[35400,0,0],[35550,3,0],[35700,0,0],[35850,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[36000,2,0],[36300,0,0],[36450,3,0],[36600,0,0],[36750,3,0],[36900,2,0],[37200,0,0],[37350,3,0],[37500,0,0],[37650,3,0],[37800,2,0],[38100,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[39000,0,0],[39150,1,0],[39450,3,0],[39750,3,0],[40050,2,0],[40200,3,0],[40500,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[40800,1,0],[41400,0,0],[41550,1,0],[41850,3,0],[42150,3,0],[42450,2,0],[42600,3,0],[42900,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[43200,1,0],[43800,0,0],[43950,1,0],[44250,3,0],[44550,3,0],[44850,2,0],[45000,3,0],[45300,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[45600,0,0],[45750,3,0],[46050,0,0],[46200,3,0],[46500,0,0],[46650,3,0],[46950,0,0],[47100,3,0],[47400,0,0],[47550,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48600,0,0],[48750,1,0],[49050,3,0],[49350,3,0],[49650,2,0],[49800,3,0],[50100,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[50400,1,0],[51000,0,0],[51150,1,0],[51450,3,0],[51750,3,0],[52050,2,0],[52200,3,0],[52500,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[52800,1,0],[53400,0,0],[53550,1,0],[53850,3,0],[54150,3,0],[54450,2,0],[54600,3,0],[54900,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[55200,0,0],[55350,3,0],[55650,0,0],[55800,3,0],[56100,0,0],[56250,3,0],[56550,0,0],[56700,3,0],[57000,0,0],[57150,3,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[57750,0,0],[57900,1,0],[58050,0,0],[58200,2,450],[58800,3,450],[59400,2,150],[59700,0,750]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[60600,2,300],[61200,3,450],[61800,2,450]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[62400,0,0],[62550,3,0],[62700,0,0],[62850,3,0],[63000,2,0],[63300,0,0],[63450,3,0],[63600,0,0],[63750,3,0],[63900,2,0],[64200,0,0],[64350,3,0],[64500,0,0],[64650,3,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[64800,2,0],[65100,0,0],[65250,3,0],[65400,0,0],[65550,3,0],[65700,2,0],[66000,0,0],[66150,3,0],[66300,0,0],[66450,3,0],[66600,2,0],[66900,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[67350,0,0],[67500,1,0],[67650,0,0],[67800,2,450],[68400,3,450],[69000,2,150],[69300,0,750]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[70200,2,300],[70800,3,450],[71400,2,450]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[72000,0,0],[72150,3,0],[72300,0,0],[72450,3,0],[72600,2,0],[72900,0,0],[73050,3,0],[73200,0,0],[73350,3,0],[73500,2,0],[73800,0,0],[73950,3,0],[74100,0,0],[74250,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[74400,2,0],[74700,0,0],[74850,3,0],[75000,0,0],[75150,3,0],[75300,2,0],[75600,0,0],[75750,3,0],[75900,0,0],[76050,3,0],[76200,2,0],[76500,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[76800,0,0],[77400,2,0],[77700,0,0],[78150,1,0],[78450,3,0],[78750,1,0],[78900,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[79200,0,0],[79800,2,0],[80100,0,0],[80550,1,0],[80850,3,0],[81150,1,0],[81300,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[81600,0,0],[82200,2,0],[82500,0,0],[82950,1,0],[83250,3,0],[83550,1,0],[83700,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[84000,0,0],[84600,2,0],[84900,0,0],[85350,1,0],[85650,3,0],[85950,1,0],[86100,0,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[86400,0,0],[86550,1,0],[86700,3,0],[86850,1,0],[87000,0,0],[87150,1,0],[87300,3,0],[87450,2,0],[87600,0,0],[87750,1,0],[87900,3,0],[88050,1,0],[88200,0,0],[88350,1,0],[88500,3,0],[88650,2,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[88800,0,0],[88950,1,0],[89100,3,0],[89250,1,0],[89400,0,0],[89550,1,0],[89700,3,0],[89850,2,0],[90000,3,0],[90150,0,0],[90300,3,0],[90450,1,0],[90600,3,0],[90750,1,0],[90900,2,0],[91050,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[91200,0,0],[91350,1,0],[91500,3,0],[91650,1,0],[91800,0,0],[91950,1,0],[92100,3,0],[92250,2,0],[92400,0,0],[92550,1,0],[92700,3,0],[92850,1,0],[93000,0,0],[93150,1,0],[93300,3,0],[93450,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[93600,0,0],[93750,1,0],[93900,3,0],[94050,1,0],[94200,0,0],[94350,1,0],[94500,3,0],[94650,2,0],[94800,3,0],[94950,0,0],[95100,3,0],[95250,1,0],[95400,3,0],[95550,1,0],[95700,2,0],[95850,0,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[96000,0,0],[96150,1,0],[96300,3,0],[96450,1,0],[96600,0,0],[96750,1,0],[96900,3,0],[97050,2,0],[97200,0,0],[97350,1,0],[97500,3,0],[97650,1,0],[97800,0,0],[97950,1,0],[98100,3,0],[98250,2,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[98400,0,0],[98550,1,0],[98700,3,0],[98850,1,0],[99000,0,0],[99150,1,0],[99300,3,0],[99450,2,0],[99600,3,0],[99750,0,0],[99900,3,0],[100050,1,0],[100200,3,0],[100350,1,0],[100500,2,0],[100650,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[100800,7,600],[100800,0,0],[100950,1,0],[101100,3,0],[101250,1,0],[101400,0,0],[101550,1,0],[101700,3,0],[101850,2,0],[102000,0,0],[102150,1,0],[102300,3,0],[102450,1,0],[102600,0,0],[102750,1,0],[102900,3,0],[103050,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[103200,0,0],[103350,1,0],[103500,3,0],[103650,1,0],[103800,0,0],[103950,1,0],[104100,3,0],[104250,2,0],[104400,3,0],[104550,0,0],[104700,3,0],[104850,1,0],[105000,3,0],[105150,1,0],[105300,2,0],[105450,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[105600,3,600]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":100,"changeBPM":false,"mustHitSection":true}],"player2":"parents-christmas","song":"Cocoa","stage":"mall","needsVoices":true,"validScore":true,"bpm":100,"speed":1.5}}
\ No newline at end of file
diff --git a/assets/preload/data/cocoa/cocoa.json b/assets/preload/data/cocoa/cocoa.json
deleted file mode 100644
index d80794d78a..0000000000
--- a/assets/preload/data/cocoa/cocoa.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-christmas","gfVersion":"gf-christmas","notes":[{"sectionNotes":[[0,0,0],[600,2,0],[900,0,0],[1350,1,0],[1650,3,0],[2100,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[2400,0,0],[3000,2,0],[3300,0,0],[3750,1,0],[4050,3,0],[4500,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[4800,0,0],[5100,0,0],[5400,2,0],[5700,0,0],[6000,0,0],[6300,2,0],[6600,0,0],[6750,3,0],[6900,0,0],[7050,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[7200,2,0],[7500,0,0],[7800,0,0],[8100,2,0],[8400,0,0],[8700,0,0],[9000,2,0],[9300,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[9600,0,0],[10200,2,0],[10500,0,0],[10950,1,0],[11250,3,0],[11700,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[12000,0,0],[12600,2,0],[12900,0,0],[13350,1,0],[13650,3,0],[14100,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[14400,0,0],[14700,0,0],[15000,2,0],[15300,0,0],[15600,0,0],[15900,2,0],[16200,0,0],[16350,3,0],[16500,0,0],[16650,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[16800,2,0],[17100,0,0],[17400,0,0],[17700,2,0],[18000,0,0],[18300,0,0],[18600,2,0],[18900,1,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[19500,3,150],[19800,1,450],[20400,2,1050]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[22500,1,0],[22800,0,150],[23100,1,0],[23400,3,0],[23700,1,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[24000,0,0],[24300,0,0],[24600,2,0],[24900,0,0],[25200,0,0],[25500,2,0],[25800,0,0],[26100,0,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[26400,2,0],[26700,0,0],[27000,0,0],[27300,2,0],[27600,0,0],[27900,0,0],[28200,2,0],[28500,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[28800,6,600],[29100,3,150],[29400,1,450],[30000,2,1050]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32100,1,0],[32400,0,150],[32700,1,0],[33000,3,0],[33300,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33600,0,0],[33900,0,0],[34200,2,0],[34500,0,0],[34800,0,0],[35100,2,0],[35400,0,0],[35700,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[36000,2,0],[36300,0,0],[36600,0,0],[36900,2,0],[37200,0,0],[37500,0,0],[37800,2,0],[38100,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[39000,0,0],[39450,3,0],[39750,3,0],[40050,2,0],[40500,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[40800,1,0],[41400,0,0],[41850,3,0],[42150,3,0],[42450,2,0],[42900,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[43200,1,0],[43800,0,0],[44250,3,0],[44550,3,0],[44850,2,0],[45300,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[45600,0,0],[46050,0,0],[46200,3,0],[46500,0,0],[46950,0,0],[47100,3,0],[47400,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48600,0,0],[49050,3,0],[49350,3,0],[49650,2,0],[50100,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[50400,1,0],[51000,0,0],[51450,3,0],[51750,3,0],[52050,2,0],[52500,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[52800,1,0],[53400,0,0],[53850,3,0],[54150,3,0],[54450,2,0],[54900,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[55200,0,0],[55650,0,0],[55800,3,0],[56100,0,0],[56550,0,0],[56700,3,0],[57000,0,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[57750,0,0],[58200,2,450],[58800,3,450],[59400,2,150],[59700,0,750]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[60600,2,300],[61200,3,450],[61800,2,450]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[62400,0,0],[62700,0,0],[63000,2,0],[63300,0,0],[63600,0,0],[63900,2,0],[64200,0,0],[64500,0,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[64800,2,0],[65100,0,0],[65400,0,0],[65700,2,0],[66000,0,0],[66300,0,0],[66600,2,0],[66900,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[67350,0,0],[67800,2,450],[68400,3,450],[69000,2,150],[69300,0,750]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[70200,2,300],[70800,3,450],[71400,2,450]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[72000,0,0],[72300,0,0],[72600,2,0],[72900,0,0],[73200,0,0],[73500,2,0],[73800,0,0],[74100,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[74400,2,0],[74700,0,0],[75000,0,0],[75300,2,0],[75600,0,0],[75900,0,0],[76200,2,0],[76500,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[76800,0,0],[77400,2,0],[77700,0,0],[78150,1,0],[78450,3,0],[78900,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[79200,0,0],[79800,2,0],[80100,0,0],[80550,1,0],[80850,3,0],[81300,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[81600,0,0],[82200,2,0],[82500,0,0],[82950,1,0],[83250,3,0],[83700,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[84000,0,0],[84600,2,0],[84900,0,0],[85350,1,0],[85650,3,0],[86100,0,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[86400,0,0],[86700,3,0],[87000,3,0],[87300,3,0],[87450,2,0],[87600,0,0],[87900,3,0],[88200,3,0],[88500,3,0],[88650,2,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[88800,0,0],[89100,3,0],[89400,3,0],[89700,3,0],[89850,2,0],[90000,3,0],[90300,3,0],[90600,3,0],[90900,2,0],[91050,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[91200,0,0],[91500,3,0],[91800,3,0],[92100,3,0],[92250,2,0],[92400,0,0],[92700,3,0],[93000,3,0],[93300,3,0],[93450,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[93600,0,0],[93900,3,0],[94200,3,0],[94500,3,0],[94650,2,0],[94800,3,0],[95100,3,0],[95400,3,0],[95700,2,0],[95850,0,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[96000,0,0],[96300,3,0],[96600,3,0],[96900,3,0],[97050,2,0],[97200,0,0],[97500,3,0],[97800,3,0],[98100,3,0],[98250,2,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[98400,0,0],[98700,3,0],[99000,3,0],[99300,3,0],[99450,2,0],[99600,3,0],[99900,3,0],[100200,3,0],[100500,2,0],[100650,0,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[100800,7,600],[100800,0,0],[101100,3,0],[101400,3,0],[101700,3,0],[101850,2,0],[102000,0,0],[102300,3,0],[102600,3,0],[102900,3,0],[103050,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[103200,0,0],[103500,3,0],[103800,3,0],[104100,3,0],[104250,2,0],[104400,3,0],[104700,3,0],[105000,3,0],[105300,2,0],[105450,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[105600,3,600]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":100,"changeBPM":false,"mustHitSection":true}],"player2":"parents-christmas","song":"Cocoa","stage":"mall","needsVoices":true,"validScore":true,"bpm":100,"speed":1.3}}
\ No newline at end of file
diff --git a/assets/preload/data/dadbattle/0.offset b/assets/preload/data/dadbattle/0.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/dadbattle/0.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/dadbattle/dadbattle-easy.json b/assets/preload/data/dadbattle/dadbattle-easy.json
deleted file mode 100644
index 3a933bfcde..0000000000
--- a/assets/preload/data/dadbattle/dadbattle-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"song":"Dad Battle","bpm":180.0,"needsVoices":true,"player1":"bf","player2":"dad","speed":1.3,"notes":[{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[10666.667,2,0.0],[11000.0,0,0.0],[11333.334,2,0.0],[11666.667,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[12000.0,2,0.0],[12166.667,3,0.0],[12333.334,0,0.0],[12666.667,2,0.0],[13000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[13333.334,2,0.0],[13666.667,0,0.0],[14000.0,2,0.0],[14333.334,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[14666.667,2,0.0],[14833.334,3,0.0],[15000.0,0,0.0],[15333.334,2,0.0],[15666.667,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[16000.0,1,0.0],[16333.334,0,0.0],[16666.668,1,0.0],[17000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[17333.334,1,0.0],[17666.668,0,0.0],[18000.0,3,0.0],[18333.334,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[18666.668,1,0.0],[19000.0,0,0.0],[19333.334,1,0.0],[19666.668,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[20000.0,1,0.0],[20333.334,0,0.0],[20666.668,3,0.0],[21000.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[21666.668,2,0.0],[22000.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[22833.334,1,0.0],[23000.0,3,0.0],[23333.334,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[24333.334,2,0.0],[24666.668,1,0.0],[25000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[25333.334,2,0.0],[25666.668,0,0.0],[26000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[27000.0,2,0.0],[27333.334,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[28166.668,1,0.0],[28333.334,3,0.0],[28666.668,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[29666.668,2,0.0],[30000.0,1,0.0],[30333.334,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[30666.668,4,0.0],[30666.668,2,0.0],[31000.0,6,0.0],[31000.0,0,0.0],[31333.334,6,0.0],[31333.334,2,0.0],[31666.668,4,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[32166.668,0,0.0],[32666.668,1,0.0],[33000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[33500.0,2,0.0],[34000.0,2,0.0],[34333.3359,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[34666.668,0,0.0],[35000.0,1,0.0],[35333.3359,3,0.0],[35666.668,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[36000.0,2,0.0],[36333.3359,3,0.0],[36666.668,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[37500.0,1,0.0],[37666.668,3,0.0],[38000.0,0,0.0],[38333.3359,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[38666.668,0,0.0],[39000.0,1,0.0],[39166.668,0,0.0],[39333.3359,2,0.0],[39666.668,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[40166.668,0,0.0],[40333.3359,3,0.0],[40666.668,2,0.0],[41000.0,1,0.0],[41166.668,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[41333.3359,4,0.0],[41333.3359,0,0.0],[41666.668,6,0.0],[41666.668,0,0.0],[42000.0,6,0.0],[42000.0,2,0.0],[42333.3359,4,0.0],[42333.3359,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[42833.3359,0,0.0],[43333.3359,1,0.0],[43666.668,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[44166.668,2,0.0],[44666.668,2,0.0],[45000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[45333.3359,0,0.0],[45666.668,1,0.0],[46000.0,3,0.0],[46333.3359,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[46666.668,2,0.0],[47000.0,3,0.0],[47333.3359,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[48166.668,1,0.0],[48333.3359,3,0.0],[48666.668,0,0.0],[49000.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[49333.3359,0,0.0],[49666.668,1,0.0],[49833.3359,0,0.0],[50000.0,2,0.0],[50333.3359,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[50833.3359,0,0.0],[51000.0,3,0.0],[51333.3359,2,0.0],[51666.668,1,0.0],[51833.3359,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[52000.0,0,0.0],[52333.3359,0,0.0],[52666.668,2,0.0],[53000.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[53333.3359,2,0.0],[53666.668,0,0.0],[54000.0,2,0.0],[54333.3359,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[54666.668,2,0.0],[54833.3359,3,0.0],[55000.0,0,0.0],[55333.3359,2,0.0],[55666.668,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[56000.0,2,0.0],[56333.3359,0,0.0],[56666.668,2,0.0],[57000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[57333.3359,2,0.0],[57500.0,3,0.0],[57666.668,0,0.0],[58000.0,2,0.0],[58333.3359,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[58666.668,1,0.0],[59000.0,0,0.0],[59333.3359,1,0.0],[59666.668,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[60000.0,1,0.0],[60333.3359,0,0.0],[60666.668,3,0.0],[61000.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[61333.3359,1,0.0],[61666.668,0,0.0],[62000.0,1,0.0],[62333.3359,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[62666.668,4,0.0],[62666.668,1,0.0],[63000.0,6,0.0],[63000.0,0,0.0],[63333.3359,6,0.0],[63333.3359,3,0.0],[63666.668,4,0.0],[63666.668,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[64333.3359,2,0.0],[64666.668,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[65500.0039,1,0.0],[65666.67,3,0.0],[66000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[67000.0,2,0.0],[67333.3359,1,0.0],[67666.67,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[68000.0,2,0.0],[68000.0,4,0.0],[68333.3359,0,0.0],[68333.3359,6,0.0],[68666.67,2,0.0],[68666.67,6,0.0],[69000.0,4,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[69666.67,2,0.0],[70000.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[70833.3359,1,0.0],[71000.0,3,0.0],[71333.3359,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[72333.3359,2,0.0],[72666.67,1,0.0],[73000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[73333.3359,2,0.0],[73666.67,0,0.0],[74000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[74666.67,2,0.0],[75000.0,0,0.0],[75333.3359,2,0.0],[75666.67,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[76000.0,2,0.0],[76333.3359,0,0.0],[76666.67,2,0.0],[77000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[77333.3359,2,0.0],[77666.67,0,0.0],[78000.0,2,0.0],[78333.3359,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[78666.67,2,0.0],[79000.0,0,0.0],[79333.3359,2,0.0],[79666.67,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[80000.0,1,0.0],[80333.3359,0,0.0],[80500.0,3,0.0],[80666.67,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[81333.3359,1,0.0],[81666.67,1,0.0],[82000.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[82666.67,1,0.0],[83000.0,0,0.0],[83166.67,3,0.0],[83333.3359,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[84000.0,1,0.0],[84333.3359,1,0.0],[84666.67,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]}]},"generatedBy":"SNIFF ver.6"}
\ No newline at end of file
diff --git a/assets/preload/data/dadbattle/dadbattle-hard.json b/assets/preload/data/dadbattle/dadbattle-hard.json
deleted file mode 100644
index 106521fe57..0000000000
--- a/assets/preload/data/dadbattle/dadbattle-hard.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"song":"Dad Battle","bpm":180.0,"needsVoices":true,"player1":"bf","player2":"dad","speed":2.3,"notes":[{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[10666.667,2,0.0],[11000.0,0,0.0],[11166.667,1,0.0],[11333.334,2,0.0],[11666.667,0,0.0],[11833.334,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[12000.0,2,0.0],[12166.667,3,0.0],[12333.334,0,0.0],[12500.0,1,0.0],[12666.667,2,0.0],[13000.0,0,0.0],[13166.667,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[13333.334,2,0.0],[13666.667,0,0.0],[13833.334,1,0.0],[14000.0,2,0.0],[14333.334,0,0.0],[14500.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[14666.667,2,0.0],[14833.334,3,0.0],[15000.0,0,0.0],[15166.667,1,0.0],[15333.334,2,0.0],[15666.667,0,0.0],[15833.334,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[16000.0,1,0.0],[16333.334,0,0.0],[16500.0,3,0.0],[16666.668,1,0.0],[17000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[17333.334,1,0.0],[17666.668,0,0.0],[17833.334,0,0.0],[18000.0,3,0.0],[18166.668,3,0.0],[18333.334,3,0.0],[18500.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[18666.668,1,0.0],[19000.0,0,0.0],[19166.668,3,0.0],[19333.334,1,0.0],[19666.668,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[20000.0,1,0.0],[20333.334,0,0.0],[20500.0,0,0.0],[20666.668,3,0.0],[20833.334,3,0.0],[21000.0,3,0.0],[21166.668,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[21666.668,2,0.0],[21833.334,1,0.0],[22000.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[22833.334,1,0.0],[23000.0,3,0.0],[23333.334,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[24333.334,2,0.0],[24666.668,1,0.0],[25000.0,0,0.0],[25166.668,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[25333.334,2,0.0],[25500.0,3,0.0],[25666.668,0,0.0],[25833.334,3,0.0],[26000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[27000.0,2,0.0],[27166.668,1,0.0],[27333.334,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[28166.668,1,0.0],[28333.334,3,0.0],[28666.668,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[29666.668,2,0.0],[30000.0,1,0.0],[30333.334,0,0.0],[30500.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[30666.668,4,0.0],[30666.668,2,0.0],[30833.334,5,0.0],[30833.334,3,0.0],[31000.0,6,0.0],[31000.0,0,0.0],[31166.668,7,0.0],[31166.668,3,0.0],[31333.334,6,0.0],[31333.334,2,0.0],[31500.0,5,0.0],[31666.668,4,0.0],[31833.334,5,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[32166.668,0,0.0],[32333.334,3,0.0],[32500.002,2,0.0],[32666.668,1,0.0],[33000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[33500.0,2,0.0],[33666.668,3,0.0],[33833.3359,1,0.0],[34000.0,2,0.0],[34333.3359,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[34666.668,0,0.0],[35000.0,1,0.0],[35333.3359,3,0.0],[35666.668,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[36000.0,2,0.0],[36333.3359,3,0.0],[36666.668,0,0.0],[36666.668,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[37500.0,1,0.0],[37666.668,3,0.0],[37833.3359,2,0.0],[38000.0,0,0.0],[38166.668,2,0.0],[38333.3359,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[38666.668,0,0.0],[38750.0,3,0.0],[38833.3359,0,0.0],[39000.0,1,0.0],[39166.668,0,0.0],[39333.3359,2,0.0],[39500.0,3,0.0],[39666.668,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[40166.668,0,0.0],[40333.3359,3,0.0],[40500.0,1,0.0],[40666.668,2,0.0],[40833.3359,3,0.0],[41000.0,1,0.0],[41166.668,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[41333.3359,0,0.0],[41333.3359,4,0.0],[41500.0,1,0.0],[41500.0,5,0.0],[41666.668,0,0.0],[41666.668,6,0.0],[41833.3359,3,0.0],[41833.3359,7,0.0],[42000.0,2,0.0],[42000.0,6,0.0],[42166.668,5,0.0],[42333.3359,3,0.0],[42333.3359,4,0.0],[42500.0,5,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[42833.3359,0,0.0],[43000.0,3,0.0],[43166.668,2,0.0],[43333.3359,1,0.0],[43666.668,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[44166.668,2,0.0],[44333.3359,3,0.0],[44500.0,1,0.0],[44666.668,2,0.0],[45000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[45333.3359,0,0.0],[45666.668,1,0.0],[46000.0,3,0.0],[46333.3359,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[46666.668,2,0.0],[47000.0,3,0.0],[47333.3359,0,0.0],[47333.3359,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[48166.668,1,0.0],[48333.3359,3,0.0],[48500.0,2,0.0],[48666.668,0,0.0],[48833.3359,2,0.0],[49000.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[49333.3359,0,0.0],[49416.668,3,0.0],[49500.0,0,0.0],[49666.668,1,0.0],[49833.3359,0,0.0],[50000.0,2,0.0],[50166.668,3,0.0],[50333.3359,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[50833.3359,0,0.0],[51000.0,3,0.0],[51166.668,1,0.0],[51333.3359,2,0.0],[51500.0,3,0.0],[51666.668,1,0.0],[51833.3359,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[52000.0,0,0.0],[52166.668,0,0.0],[52333.3359,2,0.0],[52500.0,2,0.0],[52666.668,3,0.0],[53000.0,3,0.0],[53000.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[53333.3359,2,0.0],[53666.668,0,0.0],[53833.3359,1,0.0],[54000.0,2,0.0],[54333.3359,0,0.0],[54500.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[54666.668,2,0.0],[54833.3359,3,0.0],[55000.0,0,0.0],[55166.668,1,0.0],[55333.3359,2,0.0],[55666.668,0,0.0],[55833.3359,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[56000.0,2,0.0],[56333.3359,0,0.0],[56500.0,1,0.0],[56666.668,2,0.0],[57000.0,0,0.0],[57166.668,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[57333.3359,2,0.0],[57500.0,3,0.0],[57666.668,0,0.0],[57833.3359,1,0.0],[58000.0,2,0.0],[58333.3359,0,0.0],[58500.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[58666.668,1,0.0],[59000.0,0,0.0],[59166.668,3,0.0],[59333.3359,1,0.0],[59666.668,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[60000.0,1,0.0],[60333.3359,0,0.0],[60500.0,0,0.0],[60666.668,3,0.0],[60833.3359,3,0.0],[61000.0,3,0.0],[61166.668,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[61333.3359,1,0.0],[61666.668,0,0.0],[61833.3359,3,0.0],[62000.0,1,0.0],[62333.3359,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[62666.668,1,0.0],[62666.668,4,0.0],[62833.3359,5,0.0],[63000.0,0,0.0],[63000.0,6,0.0],[63166.668,0,0.0],[63166.668,7,0.0],[63333.3359,3,0.0],[63333.3359,6,0.0],[63500.0,3,0.0],[63500.0,5,0.0],[63666.668,3,0.0],[63666.668,4,0.0],[63833.3359,5,333.333344],[63833.3359,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[64333.3359,2,0.0],[64500.0039,1,0.0],[64666.668,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[65500.0039,1,0.0],[65666.67,3,0.0],[66000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[67000.0,2,0.0],[67333.3359,1,0.0],[67666.67,0,0.0],[67833.3359,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[68000.0,2,0.0],[68000.0,4,0.0],[68166.67,3,0.0],[68166.67,5,0.0],[68333.3359,0,0.0],[68333.3359,6,0.0],[68500.0,3,0.0],[68500.0,7,0.0],[68666.67,2,0.0],[68666.67,6,0.0],[68833.3359,5,0.0],[69000.0,4,0.0],[69166.67,5,333.333344]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[69666.67,2,0.0],[69833.3359,1,0.0],[70000.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[70833.3359,1,0.0],[71000.0,3,0.0],[71333.3359,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[72333.3359,2,0.0],[72666.67,1,0.0],[73000.0,0,0.0],[73166.67,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[73333.3359,2,0.0],[73500.0,3,0.0],[73666.67,0,0.0],[73833.3359,3,0.0],[74000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[74666.67,2,0.0],[75000.0,0,0.0],[75166.67,1,0.0],[75333.3359,2,0.0],[75666.67,0,0.0],[75833.3359,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[76000.0,2,0.0],[76166.67,3,0.0],[76333.3359,0,0.0],[76500.0,1,0.0],[76666.67,2,0.0],[77000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[77333.3359,2,0.0],[77666.67,0,0.0],[77833.3359,1,0.0],[78000.0,2,0.0],[78333.3359,0,0.0],[78500.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[78666.67,2,0.0],[78833.3359,3,0.0],[79000.0,0,0.0],[79166.67,1,0.0],[79333.3359,2,0.0],[79666.67,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[80000.0,1,0.0],[80333.3359,0,0.0],[80500.0,3,0.0],[80666.67,1,0.0],[81000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[81333.3359,1,0.0],[81666.67,1,0.0],[82000.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[82666.67,1,0.0],[83000.0,0,0.0],[83166.67,3,0.0],[83333.3359,1,0.0],[83666.67,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[84000.0,1,0.0],[84333.3359,1,0.0],[84666.67,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]}]},"generatedBy":"SNIFF ver.6"}
\ No newline at end of file
diff --git a/assets/preload/data/dadbattle/dadbattle.json b/assets/preload/data/dadbattle/dadbattle.json
deleted file mode 100644
index db78a3da46..0000000000
--- a/assets/preload/data/dadbattle/dadbattle.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"song":"Dad Battle","bpm":180.0,"needsVoices":true,"player1":"bf","player2":"dad","speed":1.5,"notes":[{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[10666.667,2,0.0],[11000.0,0,0.0],[11333.334,2,0.0],[11666.667,0,0.0],[11833.334,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[12000.0,2,0.0],[12166.667,3,0.0],[12333.334,0,0.0],[12666.667,2,0.0],[13000.0,0,0.0],[13166.667,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[13333.334,2,0.0],[13666.667,0,0.0],[14000.0,2,0.0],[14333.334,0,0.0],[14500.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[14666.667,2,0.0],[14833.334,3,0.0],[15000.0,0,0.0],[15333.334,2,0.0],[15666.667,0,0.0],[15833.334,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[16000.0,1,0.0],[16333.334,0,0.0],[16500.0,3,0.0],[16666.668,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[17333.334,1,0.0],[17666.668,0,0.0],[17833.334,0,0.0],[18000.0,3,0.0],[18166.668,3,0.0],[18333.334,3,0.0],[18500.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[18666.668,1,0.0],[19000.0,0,0.0],[19166.668,3,0.0],[19333.334,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[20000.0,1,0.0],[20333.334,0,0.0],[20500.0,0,0.0],[20666.668,3,0.0],[20833.334,3,0.0],[21000.0,3,0.0],[21166.668,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[21666.668,2,0.0],[22000.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[22833.334,1,0.0],[23000.0,3,0.0],[23333.334,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[24333.334,2,0.0],[24666.668,1,0.0],[25000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[25333.334,2,0.0],[25666.668,0,0.0],[25833.334,3,0.0],[26000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[27000.0,2,0.0],[27333.334,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[28166.668,1,0.0],[28333.334,3,0.0],[28666.668,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[29666.668,2,0.0],[30000.0,1,0.0],[30333.334,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[30666.668,4,0.0],[30666.668,2,0.0],[30833.334,5,0.0],[31000.0,7,0.0],[31000.0,0,0.0],[31166.668,5,0.0],[31166.668,3,0.0],[31333.334,4,0.0],[31333.334,2,0.0],[31500.0,5,0.0],[31666.668,7,0.0],[31833.334,5,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[32166.668,0,0.0],[32333.334,3,0.0],[32666.668,1,0.0],[33000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[33500.0,2,0.0],[33666.668,3,0.0],[34000.0,2,0.0],[34333.3359,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[34666.668,0,0.0],[35000.0,1,0.0],[35333.3359,3,0.0],[35666.668,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[36000.0,2,0.0],[36333.3359,3,0.0],[36666.668,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[37500.0,1,0.0],[37666.668,3,0.0],[38000.0,0,0.0],[38333.3359,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[38666.668,0,0.0],[39000.0,1,0.0],[39333.3359,2,0.0],[39500.0,3,0.0],[39666.668,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[40166.668,0,0.0],[40333.3359,3,0.0],[40666.668,2,0.0],[40833.3359,3,0.0],[41000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[41333.3359,4,0.0],[41333.3359,0,0.0],[41500.0,5,0.0],[41666.668,7,0.0],[41666.668,2,0.0],[41833.3359,5,0.0],[42000.0,4,0.0],[42000.0,3,0.0],[42166.668,5,0.0],[42333.3359,7,0.0],[42333.3359,3,0.0],[42500.0,5,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[42833.3359,0,0.0],[43000.0,3,0.0],[43333.3359,1,0.0],[43666.668,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[44166.668,2,0.0],[44333.3359,3,0.0],[44666.668,2,0.0],[45000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[45333.3359,0,0.0],[45666.668,1,0.0],[46000.0,3,0.0],[46333.3359,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[46666.668,2,0.0],[47000.0,3,0.0],[47333.3359,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[48166.668,1,0.0],[48333.3359,3,0.0],[48666.668,0,0.0],[49000.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[49333.3359,0,0.0],[49666.668,1,0.0],[50000.0,2,0.0],[50166.668,3,0.0],[50333.3359,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[50833.3359,0,0.0],[51000.0,3,0.0],[51333.3359,2,0.0],[51500.0,3,0.0],[51666.668,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[52000.0,0,0.0],[52333.3359,2,0.0],[52666.668,3,0.0],[53000.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[53333.3359,2,0.0],[53666.668,0,0.0],[54000.0,2,0.0],[54333.3359,0,0.0],[54500.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[54666.668,2,0.0],[55000.0,0,0.0],[55333.3359,2,0.0],[55666.668,0,0.0],[55833.3359,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[56000.0,2,0.0],[56333.3359,0,0.0],[56666.668,2,0.0],[57000.0,0,0.0],[57166.668,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[57333.3359,2,0.0],[57500.0,3,0.0],[57666.668,0,0.0],[58000.0,2,0.0],[58333.3359,0,0.0],[58500.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[58666.668,1,0.0],[59000.0,0,0.0],[59166.668,3,0.0],[59333.3359,1,0.0],[59666.668,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[60000.0,1,0.0],[60333.3359,0,0.0],[60500.0,0,0.0],[60666.668,3,0.0],[60833.3359,3,0.0],[61000.0,3,0.0],[61166.668,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[61333.3359,1,0.0],[61666.668,0,0.0],[61833.3359,3,0.0],[62000.0,1,0.0],[62333.3359,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[62666.668,4,0.0],[62666.668,1,0.0],[62833.3359,5,0.0],[63000.0,7,0.0],[63000.0,0,0.0],[63166.668,5,0.0],[63166.668,0,0.0],[63333.3359,4,0.0],[63333.3359,3,0.0],[63500.0,5,0.0],[63500.0,3,0.0],[63666.668,7,0.0],[63666.668,3,0.0],[63833.3359,5,333.333344],[63833.3359,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[64333.3359,2,0.0],[64500.0039,1,0.0],[64666.668,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[65500.0039,1,0.0],[65666.67,3,0.0],[66000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[67000.0,2,0.0],[67333.3359,1,0.0],[67666.67,0,0.0],[67833.3359,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[68000.0,4,0.0],[68000.0,2,0.0],[68166.67,5,0.0],[68166.67,3,0.0],[68333.3359,7,0.0],[68333.3359,0,0.0],[68500.0,5,0.0],[68500.0,3,0.0],[68666.67,4,0.0],[68666.67,2,0.0],[68833.3359,5,0.0],[69000.0,7,0.0],[69166.67,5,333.333344]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[69666.67,2,0.0],[69833.3359,1,0.0],[70000.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[70833.3359,1,0.0],[71000.0,3,0.0],[71333.3359,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[72333.3359,2,0.0],[72666.67,1,0.0],[73000.0,0,0.0],[73166.67,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[73333.3359,2,0.0],[73500.0,3,0.0],[73666.67,0,0.0],[73833.3359,3,0.0],[74000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[74666.67,2,0.0],[75000.0,0,0.0],[75333.3359,2,0.0],[75666.67,0,0.0],[75833.3359,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[76000.0,2,0.0],[76166.67,3,0.0],[76333.3359,0,0.0],[76666.67,2,0.0],[77000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[77333.3359,2,0.0],[77666.67,0,0.0],[78000.0,2,0.0],[78333.3359,0,0.0],[78500.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[78666.67,2,0.0],[78833.3359,3,0.0],[79000.0,0,0.0],[79333.3359,2,0.0],[79666.67,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[80000.0,1,0.0],[80333.3359,0,0.0],[80500.0,3,0.0],[80666.67,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[81333.3359,1,0.0],[81666.67,1,0.0],[82000.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[82666.67,1,0.0],[83000.0,0,0.0],[83166.67,3,0.0],[83333.3359,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[84000.0,1,0.0],[84333.3359,1,0.0],[84666.67,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]}]},"generatedBy":"SNIFF ver.6"}
\ No newline at end of file
diff --git a/assets/preload/data/eggnog/0.offset b/assets/preload/data/eggnog/0.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/eggnog/0.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/eggnog/eggnog-easy.json b/assets/preload/data/eggnog/eggnog-easy.json
deleted file mode 100644
index ba93689648..0000000000
--- a/assets/preload/data/eggnog/eggnog-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-christmas","gfVersion":"gf-christmas","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[3399.99976,1,0],[3799.99976,1,0],[4200,1,0],[4400,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5000,1,0],[5400,1,0],[5600,3,0],[6000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[6599.99951,1,0],[6999.99951,1,0],[7399.99951,1,0],[7599.99951,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[8200,1,0],[8600,1,0],[8800,3,0],[9000,2,0],[9400,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[9800,1,0],[10200,1,0],[10600,1,0],[10800,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11400,1,0],[11800,1,0],[12000,3,0],[12400,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[12999.999,1,0],[13399.999,1,0],[13799.999,1,0],[13999.999,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[14599.999,1,0],[14999.999,1,0],[15199.999,3,0],[15399.999,2,0],[15799.999,1,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[15999.999,2,0],[16400,1,0],[16800,3,100],[17200,0,0],[17400,2,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[17800,0,0],[18200,0,0],[18600,0,0],[19000,3,400]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[19600,1,100],[20000,3,100],[20400,1,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[21000,0,0],[21400,1,0],[22000,2,400]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[22400,4,400],[22400,2,0],[22800,1,0],[23200,3,100],[23600,0,0],[23800,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[24200,0,0],[24600,0,0],[25000,0,0],[25400,3,400]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[25999.998,1,100],[26399.998,3,100],[26799.998,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[27399.998,0,0],[27799.998,1,0],[28399.998,2,300]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[28799.998,4,400],[28999.998,3,0],[29199.998,1,0],[29399.998,0,0],[29799.998,3,0],[30199.998,0,0],[30299.998,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[30599.998,3,0],[30799.998,1,0],[30999.998,0,0],[31099.998,3,0],[31599.998,3,0],[31799.998,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[31999.998,3,0],[32399.998,1,0],[32599.998,0,0],[32699.998,3,0],[33000,3,0],[33400,0,0],[33500,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[33800,3,0],[34000,1,0],[34200,0,0],[34400,1,0],[34800,3,0],[35000,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[35200,7,400],[35400,3,0],[35600,1,0],[35800,0,0],[36200,3,0],[36600,0,0],[36700,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[37000,3,0],[37200,1,0],[37400,0,0],[37500,3,0],[38000,3,0],[38200,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[38400,3,0],[38800,1,0],[39000,0,0],[39100,3,0],[39400,3,0],[39800,0,0],[39900,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[40200,3,0],[40400,1,0],[40600,0,0],[40800,1,0],[41200,3,0],[41400,1,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[41600,7,400],[41600,0,0],[42000,3,0],[42200,0,0],[42600,0,0],[43000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[43200,7,400],[43200,0,0],[43600,3,0],[43800,0,0],[44200,0,0],[44600,3,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[44800,7,400],[44800,0,0],[45200,3,0],[45400,0,0],[45800,0,0],[46200,3,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[46400,7,400],[46400,0,0],[46800,3,0],[47000,0,0],[47400,0,0],[47800,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[48000,7,400],[48200,1,0],[48600,1,0],[49000,1,0],[49400,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49800,1,0],[50200,1,0],[50600,1,0],[50800,3,0],[51000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[51399.9961,1,0],[51799.9961,1,0],[52199.9961,1,0],[52599.9961,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[52999.9961,1,0],[53399.9961,1,0],[53799.9961,1,0],[53999.9961,3,0],[54199.9961,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[54599.9961,1,0],[54999.9961,1,0],[55399.9961,1,0],[55799.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56199.9961,1,0],[56599.9961,1,0],[56999.9961,1,0],[57199.9961,3,0],[57399.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[57799.9961,1,0],[58199.9961,1,0],[58599.9961,1,0],[58999.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[59399.9961,1,0],[59799.9961,1,0],[60199.9961,1,0],[60399.9961,3,0],[60599.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[60799.9961,2,0],[60999.9961,3,0],[61199.9961,0,0],[61599.9961,1,0],[61999.9961,1,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[62399.9961,0,0],[62799.9961,0,0],[62999.9961,3,100],[63199.9961,1,0],[63599.9961,3,200]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[63999.9961,2,0],[64199.9961,3,0],[64399.9961,0,0],[64799.9961,1,0],[65199.9961,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65600,0,0],[66000,0,0],[66200,3,100],[66400,1,0],[66800,3,200]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[67200,1,0],[67400,3,0],[67600,0,200],[68000,1,0],[68400,1,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[68800,3,0],[68900,0,100],[69200,1,0],[69600,2,300],[70000,2,300]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[70400,1,0],[70600,3,0],[70800,0,200],[71200,1,0],[71600,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[72000,3,0],[72100,0,100],[72400,1,0],[72800,2,300],[73200,2,300]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[73600,2,0],[73800,7,0],[74000,5,0],[74000,1,0],[74200,4,0],[74400,3,100],[74600,7,0],[74800,0,0],[75000,4,0],[75000,2,0],[75100,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[75400,7,0],[75400,0,0],[75600,5,0],[75800,4,0],[75800,0,0],[75900,7,0],[76200,0,0],[76400,7,0],[76600,4,0],[76600,3,400]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[76800,7,0],[77200,5,0],[77200,1,100],[77400,4,0],[77500,7,0],[77600,3,100],[77800,7,0],[78000,1,0],[78200,4,0],[78200,0,0],[78300,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78600,7,0],[78600,0,0],[78800,5,0],[79000,4,0],[79000,1,0],[79200,5,0],[79400,1,0],[79600,7,0],[79600,2,300],[79800,5,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80000,7,400],[80200,3,0],[80400,1,0],[80600,0,0],[81000,3,0],[81400,0,0],[81500,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[81800,3,0],[82000,1,0],[82200,0,0],[82300,3,0],[82800,3,0],[83000,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[83200,3,0],[83600,1,0],[83800,0,0],[83900,3,0],[84200,3,0],[84600,0,0],[84700,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[85000,3,0],[85200,1,0],[85400,0,0],[85600,1,0],[86000,3,0],[86200,1,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[86400,0,0],[86400,7,400],[86800,3,0],[87000,0,0],[87400,0,0],[87800,3,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[88000,7,400],[88000,0,0],[88400,3,0],[88600,0,0],[89000,0,0],[89400,3,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[89600,7,400],[89600,0,0],[90000,3,0],[90200,0,0],[90600,0,0],[91000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[91200,7,400],[91200,0,0],[91600,3,0],[91800,0,0],[92200,0,0],[92600,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[92800,3,800]],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":150,"changeBPM":false,"mustHitSection":true}],"player2":"parents-christmas","song":"Eggnog","stage":"mall","needsVoices":true,"validScore":true,"bpm":150,"speed":1.4}}
\ No newline at end of file
diff --git a/assets/preload/data/eggnog/eggnog-hard.json b/assets/preload/data/eggnog/eggnog-hard.json
deleted file mode 100644
index c1ca0445fa..0000000000
--- a/assets/preload/data/eggnog/eggnog-hard.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-christmas","gfVersion":"gf-christmas","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[3399.99976,1,0],[3799.99976,1,0],[4200,1,0],[4400,3,0],[4600,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5000,1,0],[5400,1,0],[5600,3,0],[5800,2,0],[6000,3,0],[6200,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[6599.99951,1,0],[6999.99951,1,0],[7399.99951,1,0],[7599.99951,3,0],[7799.99951,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[8200,1,0],[8600,1,0],[8800,3,0],[9000,2,0],[9200,0,0],[9400,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[9800,1,0],[10200,1,0],[10600,1,0],[10800,3,0],[11000,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11400,1,0],[11800,1,0],[12000,3,0],[12200,2,0],[12400,3,0],[12600,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[12999.999,1,0],[13399.999,1,0],[13799.999,1,0],[13999.999,3,0],[14199.999,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[14599.999,1,0],[14999.999,1,0],[15199.999,3,0],[15399.999,2,0],[15599.999,0,0],[15799.999,1,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[15999.999,2,0],[16099.999,0,0],[16199.999,3,100],[16400,1,0],[16500,2,200],[16800,3,100],[17200,0,0],[17400,2,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[17800,0,0],[18200,0,0],[18600,0,0],[18700,1,0],[18800,2,0],[19000,3,400]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[19600,1,100],[20000,3,100],[20400,1,0],[20600,0,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[21000,0,0],[21400,1,0],[21800,1,0],[22000,2,300]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[22400,4,400],[22400,2,0],[22500,0,0],[22600,3,100],[22800,1,0],[22900,2,200],[23200,3,100],[23600,0,0],[23800,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[24200,0,0],[24600,0,0],[25000,0,0],[25100,1,0],[25200,2,0],[25400,3,400]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[25999.998,1,100],[26399.998,3,100],[26799.998,1,0],[26999.998,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[27399.998,0,0],[27799.998,1,0],[28199.998,1,0],[28399.998,2,300]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[28799.998,4,400],[28999.998,3,0],[29199.998,1,0],[29399.998,0,0],[29499.998,3,0],[29599.998,2,0],[29799.998,3,0],[29999.998,1,0],[30199.998,0,0],[30299.998,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[30399.998,2,0],[30599.998,3,0],[30799.998,1,0],[30999.998,0,0],[31099.998,3,0],[31199.998,2,0],[31399.998,3,0],[31599.998,3,0],[31799.998,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[31999.998,3,0],[32199.998,3,0],[32399.998,1,0],[32599.998,0,0],[32699.998,3,0],[32800,2,0],[33000,3,0],[33200,1,0],[33400,0,0],[33500,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[33600,2,0],[33800,3,0],[34000,1,0],[34200,0,0],[34400,1,0],[34500,0,0],[34600,2,100],[34800,3,0],[35000,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[35200,7,400],[35400,3,0],[35600,1,0],[35800,0,0],[35900,3,0],[36000,2,0],[36200,3,0],[36400,1,0],[36600,0,0],[36700,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[36800,2,0],[37000,3,0],[37200,1,0],[37400,0,0],[37500,3,0],[37600,2,0],[37800,3,0],[38000,3,0],[38200,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[38400,3,0],[38600,3,0],[38800,1,0],[39000,0,0],[39100,3,0],[39200,2,0],[39400,3,0],[39600,1,0],[39800,0,0],[39900,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[40000,2,0],[40200,3,0],[40400,1,0],[40600,0,0],[40800,1,0],[40900,0,0],[41000,2,100],[41200,3,0],[41400,1,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[41600,0,0],[41600,7,400],[41700,2,0],[41800,3,0],[42000,2,0],[42200,0,0],[42400,1,0],[42600,0,0],[42800,1,0],[43000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[43200,7,400],[43200,0,0],[43300,2,0],[43400,3,0],[43600,2,0],[43800,0,0],[44000,1,0],[44200,0,0],[44400,1,0],[44600,3,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[44800,7,400],[44800,0,0],[44900,2,0],[45000,3,0],[45200,2,0],[45400,0,0],[45600,1,0],[45800,0,0],[46000,1,0],[46200,3,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[46400,7,400],[46400,0,0],[46500,2,0],[46600,3,0],[46800,2,0],[47000,0,0],[47200,1,0],[47400,0,0],[47600,1,0],[47800,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[48000,7,400],[48200,1,0],[48600,1,0],[49000,1,0],[49200,2,0],[49300,0,0],[49400,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49800,1,0],[50200,1,0],[50600,1,0],[50800,3,0],[50900,0,0],[51000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[51399.9961,1,0],[51799.9961,1,0],[52199.9961,1,0],[52399.9961,2,0],[52499.9961,0,0],[52599.9961,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[52999.9961,1,0],[53399.9961,1,0],[53799.9961,1,0],[53999.9961,3,0],[54099.9961,0,0],[54199.9961,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[54599.9961,1,0],[54999.9961,1,0],[55399.9961,1,0],[55599.9961,2,0],[55699.9961,0,0],[55799.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56199.9961,1,0],[56599.9961,1,0],[56999.9961,1,0],[57199.9961,3,0],[57299.9961,0,0],[57399.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[57799.9961,1,0],[58199.9961,1,0],[58599.9961,1,0],[58799.9961,2,0],[58899.9961,0,0],[58999.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[59399.9961,1,0],[59799.9961,1,0],[60199.9961,1,0],[60399.9961,3,0],[60499.9961,0,0],[60599.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[60799.9961,2,0],[60999.9961,3,0],[61199.9961,0,0],[61399.9961,3,0],[61599.9961,1,0],[61799.9961,0,0],[61999.9961,1,0],[62199.9961,3,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[62399.9961,0,0],[62499.9961,3,0],[62599.9961,1,0],[62799.9961,0,0],[62899.9961,1,0],[62999.9961,3,100],[63199.9961,1,0],[63399.9961,2,0],[63599.9961,3,200]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[63999.9961,2,0],[64199.9961,3,0],[64399.9961,0,0],[64599.9961,3,0],[64799.9961,1,0],[64999.9961,0,0],[65199.9961,1,0],[65399.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65600,0,0],[65700,3,0],[65800,1,0],[66000,0,0],[66100,1,0],[66200,3,100],[66400,1,0],[66600,2,0],[66800,3,200]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[67200,1,0],[67400,3,0],[67600,0,200],[68000,1,0],[68200,1,0],[68400,1,0],[68600,2,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[68800,3,0],[68900,0,0],[69000,3,0],[69200,1,0],[69300,0,0],[69400,1,0],[69500,0,0],[69600,2,300],[70000,2,300]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[70400,1,0],[70600,3,0],[70800,0,200],[71200,1,0],[71400,0,0],[71600,1,0],[71800,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[72000,3,0],[72100,0,0],[72200,3,0],[72400,1,0],[72500,0,0],[72600,1,0],[72700,0,0],[72800,2,300],[73200,2,300]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[73600,2,0],[73700,0,0],[73800,7,0],[73800,3,100],[74000,5,0],[74000,1,0],[74100,2,200],[74200,4,0],[74300,7,0],[74400,6,0],[74400,3,100],[74600,7,0],[74800,5,0],[74800,0,0],[75000,4,0],[75000,2,0],[75100,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[75200,6,0],[75400,7,0],[75400,0,0],[75600,5,0],[75800,4,0],[75800,0,0],[75900,7,0],[76000,6,0],[76200,7,0],[76200,0,0],[76300,1,0],[76400,7,0],[76400,2,0],[76600,4,0],[76600,3,400]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[76800,7,0],[77000,7,0],[77200,5,0],[77200,1,100],[77400,4,0],[77500,7,0],[77600,6,0],[77600,3,100],[77800,7,0],[78000,5,0],[78000,1,0],[78200,4,0],[78200,0,0],[78300,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78400,6,0],[78600,7,0],[78600,0,0],[78800,5,0],[79000,4,0],[79000,1,0],[79200,5,0],[79300,4,0],[79400,6,100],[79400,1,0],[79600,7,0],[79600,2,300],[79800,5,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80000,7,400],[80200,3,0],[80400,1,0],[80600,0,0],[80700,3,0],[80800,2,0],[81000,3,0],[81200,1,0],[81400,0,0],[81500,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[81600,2,0],[81800,3,0],[82000,1,0],[82200,0,0],[82300,3,0],[82400,2,0],[82600,3,0],[82800,3,0],[83000,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[83200,3,0],[83400,3,0],[83600,1,0],[83800,0,0],[83900,3,0],[84000,2,0],[84200,3,0],[84400,1,0],[84600,0,0],[84700,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[84800,2,0],[85000,3,0],[85200,1,0],[85400,0,0],[85600,1,0],[85700,0,0],[85800,2,100],[86000,3,0],[86200,1,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[86400,0,0],[86400,7,400],[86500,2,0],[86600,3,0],[86800,2,0],[87000,0,0],[87200,1,0],[87400,0,0],[87600,1,0],[87800,3,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[88000,7,400],[88000,0,0],[88100,2,0],[88200,3,0],[88400,2,0],[88600,0,0],[88800,1,0],[89000,0,0],[89200,1,0],[89400,3,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[89600,7,400],[89600,0,0],[89700,2,0],[89800,3,0],[90000,2,0],[90200,0,0],[90400,1,0],[90600,0,0],[90800,1,0],[91000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[91200,7,400],[91200,0,0],[91300,2,0],[91400,3,0],[91600,2,0],[91800,0,0],[92000,1,0],[92200,0,0],[92400,1,0],[92600,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[92800,3,800]],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":150,"changeBPM":false,"mustHitSection":true}],"player2":"parents-christmas","song":"Eggnog","stage":"mall","needsVoices":true,"validScore":true,"bpm":150,"speed":1.9}}
\ No newline at end of file
diff --git a/assets/preload/data/eggnog/eggnog.json b/assets/preload/data/eggnog/eggnog.json
deleted file mode 100644
index b3eed2ff19..0000000000
--- a/assets/preload/data/eggnog/eggnog.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-christmas","gfVersion":"gf-christmas","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[3399.99976,1,0],[3799.99976,1,0],[4200,1,0],[4400,3,0],[4600,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5000,1,0],[5400,1,0],[5600,3,0],[5800,2,0],[6000,3,0],[6200,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[6599.99951,1,0],[6999.99951,1,0],[7399.99951,1,0],[7599.99951,3,0],[7799.99951,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[8200,1,0],[8600,1,0],[8800,3,0],[9000,2,0],[9400,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[9800,1,0],[10200,1,0],[10600,1,0],[10800,3,0],[11000,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11400,1,0],[11800,1,0],[12000,3,0],[12200,2,0],[12400,3,0],[12600,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[12999.999,1,0],[13399.999,1,0],[13799.999,1,0],[13999.999,3,0],[14199.999,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[14599.999,1,0],[14999.999,1,0],[15199.999,3,0],[15399.999,2,0],[15799.999,1,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[15999.999,2,0],[16199.999,3,100],[16400,1,0],[16800,3,100],[17200,0,0],[17400,2,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[17800,0,0],[18200,0,0],[18600,0,0],[19000,3,400]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[19600,1,100],[20000,3,100],[20400,1,0],[20600,0,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[21000,0,0],[21400,1,0],[21800,1,0],[22000,2,300]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[22400,4,400],[22400,2,0],[22600,3,100],[22800,1,0],[23200,3,100],[23600,0,0],[23800,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[24200,0,0],[24600,0,0],[25000,0,0],[25400,3,400]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[25999.998,1,100],[26399.998,3,100],[26799.998,1,0],[26999.998,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[27399.998,0,0],[27799.998,1,0],[28199.998,1,0],[28399.998,2,300]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[28799.998,4,400],[28999.998,3,0],[29199.998,1,0],[29399.998,0,0],[29499.998,3,0],[29799.998,3,0],[29999.998,1,0],[30199.998,0,0],[30299.998,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[30599.998,3,0],[30799.998,1,0],[30999.998,0,0],[31099.998,3,0],[31399.998,3,0],[31599.998,3,0],[31799.998,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[31999.998,3,0],[32199.998,3,0],[32399.998,1,0],[32599.998,0,0],[32699.998,3,0],[33000,3,0],[33200,1,0],[33400,0,0],[33500,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[33800,3,0],[34000,1,0],[34200,0,0],[34400,1,0],[34500,0,0],[34800,3,0],[35000,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[35200,7,400],[35400,3,0],[35600,1,0],[35800,0,0],[35900,3,0],[36200,3,0],[36400,1,0],[36600,0,0],[36700,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[37000,3,0],[37200,1,0],[37400,0,0],[37500,3,0],[37800,3,0],[38000,3,0],[38200,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[38400,3,0],[38600,3,0],[38800,1,0],[39000,0,0],[39100,3,0],[39400,3,0],[39600,1,0],[39800,0,0],[39900,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[40200,3,0],[40400,1,0],[40600,0,0],[40800,1,0],[41000,2,100],[41200,3,0],[41400,1,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[41600,0,0],[41600,7,400],[41800,3,0],[42000,3,0],[42200,0,0],[42600,0,0],[43000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[43200,7,400],[43200,0,0],[43400,3,0],[43600,3,0],[43800,0,0],[44200,0,0],[44600,3,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[44800,7,400],[44800,0,0],[45000,3,0],[45200,3,0],[45400,0,0],[45800,0,0],[46200,3,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[46400,7,400],[46400,0,0],[46600,3,0],[46800,3,0],[47000,0,0],[47400,0,0],[47800,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[48000,7,400],[48200,1,0],[48600,1,0],[49000,1,0],[49200,2,0],[49400,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49800,1,0],[50200,1,0],[50600,1,0],[50800,3,0],[50900,0,0],[51000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[51399.9961,1,0],[51799.9961,1,0],[52199.9961,1,0],[52399.9961,2,0],[52599.9961,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[52999.9961,1,0],[53399.9961,1,0],[53799.9961,1,0],[53999.9961,3,0],[54099.9961,0,0],[54199.9961,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[54599.9961,1,0],[54999.9961,1,0],[55399.9961,1,0],[55599.9961,2,0],[55799.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56199.9961,1,0],[56599.9961,1,0],[56999.9961,1,0],[57199.9961,3,0],[57299.9961,0,0],[57399.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[57799.9961,1,0],[58199.9961,1,0],[58599.9961,1,0],[58799.9961,2,0],[58999.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[59399.9961,1,0],[59799.9961,1,0],[60199.9961,1,0],[60399.9961,3,0],[60499.9961,0,0],[60599.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[60799.9961,2,0],[60999.9961,3,0],[61199.9961,0,0],[61599.9961,1,0],[61799.9961,0,0],[61999.9961,1,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[62399.9961,0,0],[62599.9961,1,0],[62799.9961,0,0],[62999.9961,3,100],[63199.9961,1,0],[63399.9961,2,0],[63599.9961,3,200]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[63999.9961,2,0],[64199.9961,3,0],[64399.9961,0,0],[64799.9961,1,0],[64999.9961,0,0],[65199.9961,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65600,0,0],[65800,1,0],[66000,0,0],[66200,3,100],[66400,1,0],[66600,2,0],[66800,3,200]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[67200,1,0],[67400,3,0],[67600,0,200],[68000,1,0],[68200,1,0],[68400,1,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[68800,3,0],[68900,0,100],[69200,1,0],[69400,1,0],[69600,2,300],[70000,2,300]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[70400,1,0],[70600,3,0],[70800,0,200],[71200,1,0],[71400,0,0],[71600,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[72000,3,0],[72100,0,100],[72400,1,0],[72600,1,0],[72800,2,300],[73200,2,300]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[73600,2,0],[73800,7,0],[73800,3,100],[74000,5,0],[74000,1,0],[74200,4,0],[74300,7,0],[74400,3,100],[74600,7,0],[74800,5,0],[74800,0,0],[75000,4,0],[75000,2,0],[75100,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[75400,7,0],[75400,0,0],[75600,5,0],[75800,4,0],[75800,0,0],[75900,7,0],[76200,7,0],[76200,0,0],[76400,7,0],[76600,4,0],[76600,3,400]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[76800,7,0],[77000,7,0],[77200,5,0],[77200,1,100],[77400,4,0],[77500,7,0],[77600,3,100],[77800,7,0],[78000,5,0],[78000,1,0],[78200,4,0],[78200,0,0],[78300,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78600,7,0],[78600,0,0],[78800,5,0],[79000,4,0],[79000,1,0],[79200,5,0],[79300,4,0],[79400,1,0],[79600,7,0],[79600,2,300],[79800,5,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80000,7,400],[80200,3,0],[80400,1,0],[80600,0,0],[80700,3,0],[81000,3,0],[81200,1,0],[81400,0,0],[81500,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[81800,3,0],[82000,1,0],[82200,0,0],[82300,3,0],[82600,3,0],[82800,3,0],[83000,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[83200,3,0],[83400,3,0],[83600,1,0],[83800,0,0],[83900,3,0],[84200,3,0],[84400,1,0],[84600,0,0],[84700,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[85000,3,0],[85200,1,0],[85400,0,0],[85600,1,0],[85700,0,0],[86000,3,0],[86200,1,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[86400,0,0],[86400,7,400],[86600,3,0],[86800,3,0],[87000,0,0],[87400,0,0],[87800,3,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[88000,7,400],[88000,0,0],[88200,3,0],[88400,3,0],[88600,0,0],[89000,0,0],[89400,3,0]],"lengthInSteps":16,"mustHitSection":true},{"altAnim":true,"sectionNotes":[[89600,7,400],[89600,0,0],[89800,3,0],[90000,3,0],[90200,0,0],[90600,0,0],[91000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"altAnim":true,"sectionNotes":[[91200,7,400],[91200,0,0],[91400,3,0],[91600,3,0],[91800,0,0],[92200,0,0],[92600,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[92800,3,800]],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":150,"changeBPM":false,"mustHitSection":true}],"player2":"parents-christmas","song":"Eggnog","stage":"mall","needsVoices":true,"validScore":true,"bpm":150,"speed":1.6}}
\ No newline at end of file
diff --git a/assets/preload/data/freeplaySonglist.txt b/assets/preload/data/freeplaySonglist.txt
index 7af8115cb4..be5c8baf6e 100644
--- a/assets/preload/data/freeplaySonglist.txt
+++ b/assets/preload/data/freeplaySonglist.txt
@@ -1,19 +1,19 @@
-Tutorial:gf:0
-Bopeebo:dad:1
-Fresh:dad:1
-Dad Battle:dad:1
-Spookeez:spooky:2
-South:spooky:2
-Monster:monster:2
-Pico:pico:3
-Philly Nice:pico:3
-Blammed:pico:3
-Satin Panties:mom:4
-High:mom:4
-Milf:mom:4
-Cocoa:parents-christmas:5
-Eggnog:parents-christmas:5
-Winter Horrorland:monster-christmas:5
-Senpai:senpai:6
-Roses:senpai:6
-Thorns:spirit:6
\ No newline at end of file
+tutorial:gf:0
+bopeebo:dad:1
+fresh:dad:1
+dadbattle:dad:1
+spookeez:spooky:2
+south:spooky:2
+monster:monster:2
+pico:pico:3
+philly:pico:3
+blammed:pico:3
+satin-panties:mom:4
+high:mom:4
+milf:mom:4
+cocoa:parents-christmas:5
+eggnog:parents-christmas:5
+winter-horrorland:monster-christmas:5
+senpai:senpai:6
+roses:senpai:6
+thorns:spirit:6
\ No newline at end of file
diff --git a/assets/preload/data/fresh/0.offset b/assets/preload/data/fresh/0.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/fresh/0.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/fresh/fresh-easy.json b/assets/preload/data/fresh/fresh-easy.json
deleted file mode 100644
index d91456debd..0000000000
--- a/assets/preload/data/fresh/fresh-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"song":"Fresh","bpm":120.0,"needsVoices":true,"player1":"bf","player2":"dad","speed":1.0,"notes":[{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[0.0,1,0.0],[500.0,3,0.0],[1250.0,1,0.0],[1500.0,2,0.0],[1750.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[2000.0,1,0.0],[2500.0,3,0.0],[3250.0,1,0.0],[3500.0,2,0.0],[3750.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[4000.0,1,0.0],[4500.0,3,0.0],[5125.0,1,0.0],[5250.0,0,0.0],[5500.0,0,0.0],[5750.0,3,125.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[6000.0,1,0.0],[6500.0,3,0.0],[7125.0,1,0.0],[7250.0,0,0.0],[7500.0,0,0.0],[7750.0,3,125.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[8250.0,0,0.0],[8500.0,1,0.0],[9000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[10250.0,0,0.0],[10500.0,1,0.0],[11000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[12250.0,0,0.0],[12500.0,2,0.0],[12750.0,3,0.0],[13000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[14250.0,0,0.0],[14500.0,2,0.0],[14750.0,3,0.0],[15000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[16250.001,0,0.0],[16500.0,1,0.0],[16750.0,3,0.0],[17000.0,0,0.0],[17500.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[18250.0,0,0.0],[18500.0,1,0.0],[18750.0,3,0.0],[19000.0,0,0.0],[19500.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[20000.0,3,0.0],[20250.0,1,0.0],[21000.0,3,0.0],[21250.0,1,0.0],[21750.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[22000.0,3,0.0],[22250.0,1,0.0],[23000.0,3,0.0],[23250.0,1,0.0],[23750.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[24000.0,3,0.0],[24500.0,0,0.0],[25000.0,1,0.0],[25250.0,1,0.0],[25500.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[26000.0,1,0.0],[26500.0,3,0.0],[26750.0,0,0.0],[27000.0,2,0.0],[27500.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[28000.0,3,0.0],[28500.0,0,0.0],[29000.0,1,0.0],[29250.0,1,0.0],[29500.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[30000.0,1,0.0],[30500.0,3,0.0],[30750.0,0,0.0],[31000.0,2,0.0],[31500.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[32500.002,0,0.0],[33000.0,1,0.0],[33500.0,1,0.0],[33750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[34250.0,0,0.0],[34500.0,3,0.0],[34750.0,0,0.0],[35000.0,2,250.0],[35500.0,1,375.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[36500.0,0,0.0],[37000.0,1,0.0],[37500.0,1,0.0],[37750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[38250.0,0,0.0],[38500.0,3,0.0],[38750.0,0,0.0],[39000.0,2,250.0],[39500.0,1,375.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[40250.0,0,0.0],[40500.0,1,0.0],[41000.0,2,0.0],[41500.0,2,0.0],[41750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[42250.0,0,0.0],[42500.0,1,0.0],[43000.0,2,0.0],[43500.0,2,0.0],[43750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[44250.0,0,0.0],[44500.0,2,0.0],[44750.0,3,0.0],[45000.0,0,0.0],[45750.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[46250.0,0,0.0],[46500.0,2,0.0],[46750.0,3,0.0],[47000.0,0,0.0],[47750.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[48250.0,0,0.0],[48500.0,1,0.0],[48750.0,3,0.0],[49000.0,0,0.0],[49750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[50250.0,0,0.0],[50500.0,1,0.0],[50750.0,3,0.0],[51000.0,0,0.0],[51750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[52000.0,3,0.0],[52250.0,1,0.0],[52750.0,2,0.0],[53000.0,3,0.0],[53250.0,1,0.0],[53750.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[54000.0,3,0.0],[54250.0,1,0.0],[54750.0,2,0.0],[55000.0,3,0.0],[55250.0,1,0.0],[55750.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[56000.0,3,0.0],[56500.0,0,0.0],[57000.0,1,0.0],[57250.0,1,0.0],[57500.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[58000.0,1,0.0],[58500.0,3,0.0],[58750.0,0,0.0],[59000.0,2,0.0],[59500.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[60000.0,3,0.0],[60500.0,0,0.0],[61000.0,1,0.0],[61250.0,1,0.0],[61500.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[62000.0,1,0.0],[62500.0,3,0.0],[62750.0,0,0.0],[63000.0,2,0.0],[63500.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[64500.0039,0,0.0],[64750.0039,3,0.0],[65000.0039,1,0.0],[65250.0039,3,0.0],[65500.0039,1,0.0],[65750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[66250.0,0,0.0],[66500.0,3,0.0],[66750.0,0,0.0],[67000.0,2,250.0],[67500.0,1,375.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[68500.0,0,0.0],[68750.0,3,0.0],[69000.0,1,0.0],[69250.0,3,0.0],[69500.0,1,0.0],[69750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[70250.0,0,0.0],[70500.0,3,0.0],[70750.0,0,0.0],[71000.0,2,250.0],[71500.0,1,375.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[72000.0,1,0.0],[72500.0,3,0.0],[73250.0,1,0.0],[73500.0,2,0.0],[73750.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[74000.0,1,0.0],[74500.0,3,0.0],[75250.0,1,0.0],[75500.0,2,0.0],[75750.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[76000.0,1,0.0],[76500.0,3,0.0],[77125.0,1,0.0],[77250.0,0,0.0],[77500.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[78000.0,1,0.0],[78500.0,3,0.0],[79125.0,1,0.0],[79250.0,0,0.0],[79500.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]}]},"generatedBy":"SNIFF ver.6"}
\ No newline at end of file
diff --git a/assets/preload/data/fresh/fresh-hard.json b/assets/preload/data/fresh/fresh-hard.json
deleted file mode 100644
index a1158f0242..0000000000
--- a/assets/preload/data/fresh/fresh-hard.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"song":"Fresh","bpm":120.0,"needsVoices":true,"player1":"bf","player2":"dad","speed":1.8,"notes":[{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[0.0,1,0.0],[250.0,1,0.0],[500.0,3,0.0],[875.0,3,0.0],[1125.0,1,0.0],[1250.0,0,0.0],[1500.0,3,0.0],[1500.0,2,0.0],[1750.0,1,0.0],[1875.0,0,125.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[2000.0,1,0.0],[2250.0,1,0.0],[2500.0,3,0.0],[2875.0,3,0.0],[3125.0,1,0.0],[3250.0,0,0.0],[3500.0,2,0.0],[3500.0,3,0.0],[3750.0,1,0.0],[3875.0,0,125.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[4000.0,1,0.0],[4250.0,1,0.0],[4500.0,3,0.0],[4875.0,3,0.0],[5125.0,1,0.0],[5250.0,0,0.0],[5500.0,3,0.0],[5500.0,2,0.0],[5750.0,3,125.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[6000.0,1,0.0],[6250.0,1,0.0],[6500.0,3,0.0],[6875.0,3,0.0],[7125.0,1,0.0],[7250.0,0,0.0],[7500.0,3,0.0],[7500.0,2,0.0],[7750.0,3,125.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[8250.0,0,0.0],[8500.0,1,0.0],[9000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[10250.0,0,0.0],[10500.0,1,0.0],[11000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[12250.0,0,0.0],[12500.0,2,0.0],[12750.0,3,0.0],[13000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[14250.0,0,0.0],[14500.0,2,0.0],[14750.0,3,0.0],[15000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[16250.001,0,0.0],[16500.0,1,0.0],[16750.0,3,0.0],[17000.0,0,0.0],[17500.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[18250.0,0,0.0],[18500.0,1,0.0],[18750.0,3,0.0],[19000.0,0,0.0],[19500.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[20000.0,3,0.0],[20250.0,1,0.0],[20750.0,2,0.0],[21000.0,3,0.0],[21250.0,1,0.0],[21750.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[22000.0,3,0.0],[22250.0,1,0.0],[22750.0,2,0.0],[23000.0,3,0.0],[23250.0,1,0.0],[23750.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[24000.0,3,0.0],[24500.0,0,0.0],[25000.0,1,0.0],[25250.0,1,0.0],[25500.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[26000.0,1,0.0],[26250.0,2,0.0],[26500.0,3,0.0],[26750.0,0,0.0],[27000.0,2,0.0],[27250.0,3,0.0],[27500.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[28000.0,3,0.0],[28500.0,0,0.0],[29000.0,1,0.0],[29250.0,1,0.0],[29500.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[30000.0,1,0.0],[30250.0,2,0.0],[30500.0,3,0.0],[30750.0,0,0.0],[31000.0,2,0.0],[31250.0,3,0.0],[31500.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[32500.002,0,0.0],[32750.002,3,0.0],[33000.0,1,0.0],[33250.0,3,0.0],[33500.0,1,0.0],[33750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[34250.0,0,0.0],[34500.0,3,0.0],[34750.0,0,0.0],[35000.0,2,375.0],[35500.0,1,375.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[36500.0,0,0.0],[36750.0,3,0.0],[37000.0,1,0.0],[37250.0,3,0.0],[37500.0,1,0.0],[37750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[38250.0,0,0.0],[38500.0,3,0.0],[38750.0,0,0.0],[39000.0,2,375.0],[39500.0,1,375.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[40250.0,0,0.0],[40500.0,1,0.0],[41000.0,2,0.0],[41500.0,2,0.0],[41750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[42250.0,0,0.0],[42500.0,1,0.0],[43000.0,2,0.0],[43500.0,2,0.0],[43750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[44250.0,0,0.0],[44500.0,2,0.0],[44750.0,3,0.0],[45000.0,0,0.0],[45750.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[46250.0,0,0.0],[46500.0,2,0.0],[46750.0,3,0.0],[47000.0,0,0.0],[47750.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[48250.0,0,0.0],[48500.0,1,0.0],[48750.0,3,0.0],[49000.0,0,0.0],[49750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[50250.0,0,0.0],[50500.0,1,0.0],[50750.0,3,0.0],[51000.0,0,0.0],[51750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[52000.0,3,0.0],[52250.0,1,0.0],[52500.0,1,0.0],[52750.0,2,0.0],[53000.0,3,0.0],[53250.0,1,0.0],[53750.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[54000.0,3,0.0],[54250.0,1,0.0],[54500.0,1,0.0],[54750.0,2,0.0],[55000.0,3,0.0],[55250.0,1,0.0],[55750.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[56000.0,3,0.0],[56500.0,0,0.0],[57000.0,1,0.0],[57250.0,1,0.0],[57500.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[58000.0,1,0.0],[58250.0,2,0.0],[58500.0,3,0.0],[58750.0,0,0.0],[59000.0,2,0.0],[59250.0,3,0.0],[59500.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[60000.0,3,0.0],[60500.0,0,0.0],[61000.0,1,0.0],[61250.0,1,0.0],[61500.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[62000.0,1,0.0],[62250.0,2,0.0],[62500.0,3,0.0],[62750.0,0,0.0],[63000.0,2,0.0],[63250.0,3,0.0],[63500.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[64500.0039,0,0.0],[64750.0039,3,0.0],[65000.0039,1,0.0],[65250.0039,3,0.0],[65500.0039,1,0.0],[65750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[66250.0,0,0.0],[66500.0,3,0.0],[66750.0,0,0.0],[67000.0,2,375.0],[67500.0,1,375.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[68500.0,0,0.0],[68750.0,3,0.0],[69000.0,1,0.0],[69250.0,3,0.0],[69500.0,1,0.0],[69750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[70250.0,0,0.0],[70500.0,3,0.0],[70750.0,0,0.0],[71000.0,2,375.0],[71500.0,1,375.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[72000.0,1,0.0],[72000.0,5,0.0],[72250.0,1,0.0],[72250.0,5,0.0],[72500.0,3,0.0],[72500.0,7,0.0],[72875.0,3,0.0],[72875.0,7,0.0],[73125.0,1,0.0],[73125.0,5,0.0],[73250.0,0,0.0],[73250.0,4,0.0],[73500.0,3,0.0],[73500.0,2,0.0],[73500.0,7,0.0],[73500.0,6,0.0],[73750.0,1,0.0],[73750.0,5,0.0],[73875.0,0,125.0],[73875.0,4,125.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[74000.0,1,0.0],[74250.0,1,0.0],[74500.0,3,0.0],[74875.0,3,0.0],[75125.0,1,0.0],[75250.0,0,0.0],[75500.0,3,0.0],[75500.0,2,0.0],[75750.0,1,0.0],[75875.0,0,125.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[76000.0,1,0.0],[76000.0,5,0.0],[76250.0,1,0.0],[76250.0,5,0.0],[76500.0,3,0.0],[76500.0,7,0.0],[76875.0,3,0.0],[76875.0,7,0.0],[77125.0,1,0.0],[77125.0,5,0.0],[77250.0,0,0.0],[77250.0,4,0.0],[77500.0,3,0.0],[77500.0,2,0.0],[77500.0,7,0.0],[77500.0,6,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[78000.0,1,0.0],[78250.0,1,0.0],[78500.0,3,0.0],[78875.0,3,0.0],[79125.0,1,0.0],[79250.0,0,0.0],[79500.0,3,0.0],[79500.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]}]},"generatedBy":"SNIFF ver.6"}
\ No newline at end of file
diff --git a/assets/preload/data/fresh/fresh.json b/assets/preload/data/fresh/fresh.json
deleted file mode 100644
index cd34c7e33c..0000000000
--- a/assets/preload/data/fresh/fresh.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"song":"Fresh","bpm":120.0,"needsVoices":true,"player1":"bf","player2":"dad","speed":1.3,"notes":[{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[0.0,1,0.0],[250.0,1,0.0],[500.0,3,0.0],[875.0,3,0.0],[1125.0,1,0.0],[1250.0,0,0.0],[1500.0,2,0.0],[1750.0,1,0.0],[1875.0,0,125.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[2000.0,1,0.0],[2250.0,1,0.0],[2500.0,3,0.0],[2875.0,3,0.0],[3125.0,1,0.0],[3250.0,0,0.0],[3500.0,2,0.0],[3750.0,1,0.0],[3875.0,0,125.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[4000.0,1,0.0],[4250.0,1,0.0],[4500.0,3,0.0],[4875.0,3,0.0],[5125.0,1,0.0],[5250.0,0,0.0],[5500.0,2,0.0],[5750.0,3,125.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[6000.0,1,0.0],[6250.0,1,0.0],[6500.0,3,0.0],[6875.0,3,0.0],[7125.0,1,0.0],[7250.0,0,0.0],[7500.0,2,0.0],[7750.0,3,125.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[8250.0,0,0.0],[8500.0,1,0.0],[9000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[10250.0,0,0.0],[10500.0,1,0.0],[11000.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[12250.0,0,0.0],[12500.0,2,0.0],[12750.0,3,0.0],[13000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[14250.0,0,0.0],[14500.0,2,0.0],[14750.0,3,0.0],[15000.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[16250.001,0,0.0],[16500.0,1,0.0],[16750.0,3,0.0],[17000.0,0,0.0],[17500.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[18250.0,0,0.0],[18500.0,1,0.0],[18750.0,3,0.0],[19000.0,0,0.0],[19500.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[20000.0,3,0.0],[20250.0,1,0.0],[20750.0,2,0.0],[21000.0,3,0.0],[21250.0,1,0.0],[21750.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[22000.0,3,0.0],[22250.0,1,0.0],[22750.0,2,0.0],[23000.0,3,0.0],[23250.0,1,0.0],[23750.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[24000.0,3,0.0],[24500.0,0,0.0],[25000.0,1,0.0],[25250.0,1,0.0],[25500.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[26000.0,1,0.0],[26250.0,2,0.0],[26500.0,3,0.0],[26750.0,0,0.0],[27000.0,2,0.0],[27250.0,3,0.0],[27500.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[28000.0,3,0.0],[28500.0,0,0.0],[29000.0,1,0.0],[29250.0,1,0.0],[29500.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[30000.0,1,0.0],[30250.0,2,0.0],[30500.0,3,0.0],[30750.0,0,0.0],[31000.0,2,0.0],[31250.0,3,0.0],[31500.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[32500.002,0,0.0],[32750.002,3,0.0],[33000.0,1,0.0],[33250.0,3,0.0],[33500.0,1,0.0],[33750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[34250.0,0,0.0],[34500.0,3,0.0],[34750.0,0,0.0],[35000.0,2,375.0],[35500.0,1,375.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[36500.0,0,0.0],[36750.0,3,0.0],[37000.0,1,0.0],[37250.0,3,0.0],[37500.0,1,0.0],[37750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[38250.0,0,0.0],[38500.0,3,0.0],[38750.0,0,0.0],[39000.0,2,375.0],[39500.0,1,375.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[40250.0,0,0.0],[40500.0,1,0.0],[41000.0,2,0.0],[41500.0,2,0.0],[41750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[42250.0,0,0.0],[42500.0,1,0.0],[43000.0,2,0.0],[43500.0,2,0.0],[43750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[44250.0,0,0.0],[44500.0,2,0.0],[44750.0,3,0.0],[45000.0,0,0.0],[45750.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[46250.0,0,0.0],[46500.0,2,0.0],[46750.0,3,0.0],[47000.0,0,0.0],[47750.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[48250.0,0,0.0],[48500.0,1,0.0],[48750.0,3,0.0],[49000.0,0,0.0],[49750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[50250.0,0,0.0],[50500.0,1,0.0],[50750.0,3,0.0],[51000.0,0,0.0],[51750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[52000.0,3,0.0],[52250.0,1,0.0],[52500.0,1,0.0],[52750.0,2,0.0],[53000.0,3,0.0],[53250.0,1,0.0],[53750.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[54000.0,3,0.0],[54250.0,1,0.0],[54500.0,1,0.0],[54750.0,2,0.0],[55000.0,3,0.0],[55250.0,1,0.0],[55750.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[56000.0,3,0.0],[56500.0,0,0.0],[57000.0,1,0.0],[57250.0,1,0.0],[57500.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[58000.0,1,0.0],[58250.0,2,0.0],[58500.0,3,0.0],[58750.0,0,0.0],[59000.0,2,0.0],[59250.0,3,0.0],[59500.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[60000.0,3,0.0],[60500.0,0,0.0],[61000.0,1,0.0],[61250.0,1,0.0],[61500.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[62000.0,1,0.0],[62250.0,2,0.0],[62500.0,3,0.0],[62750.0,0,0.0],[63000.0,2,0.0],[63250.0,3,0.0],[63500.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[64500.0039,0,0.0],[64750.0039,3,0.0],[65000.0039,1,0.0],[65250.0039,3,0.0],[65500.0039,1,0.0],[65750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[66250.0,0,0.0],[66500.0,3,0.0],[66750.0,0,0.0],[67000.0,2,375.0],[67500.0,1,375.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[68500.0,0,0.0],[68750.0,3,0.0],[69000.0,1,0.0],[69250.0,3,0.0],[69500.0,1,0.0],[69750.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[70250.0,0,0.0],[70500.0,3,0.0],[70750.0,0,0.0],[71000.0,2,375.0],[71500.0,1,375.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[72000.0,1,0.0],[72250.0,1,0.0],[72500.0,3,0.0],[72875.0,3,0.0],[73125.0,1,0.0],[73250.0,0,0.0],[73500.0,2,0.0],[73750.0,1,0.0],[73875.0,0,125.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[74000.0,1,0.0],[74250.0,1,0.0],[74500.0,3,0.0],[74875.0,3,0.0],[75125.0,1,0.0],[75250.0,0,0.0],[75500.0,2,0.0],[75750.0,1,0.0],[75875.0,0,125.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[76000.0,1,0.0],[76250.0,1,0.0],[76500.0,3,0.0],[76875.0,3,0.0],[77125.0,1,0.0],[77250.0,0,0.0],[77500.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[78000.0,1,0.0],[78250.0,1,0.0],[78500.0,3,0.0],[78875.0,3,0.0],[79125.0,1,0.0],[79250.0,0,0.0],[79500.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]}]},"generatedBy":"SNIFF ver.6"}
\ No newline at end of file
diff --git a/assets/preload/data/high/0.offset b/assets/preload/data/high/0.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/high/0.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/high/high-easy.json b/assets/preload/data/high/high-easy.json
deleted file mode 100644
index 715239e426..0000000000
--- a/assets/preload/data/high/high-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-car","gfVersion":"gf-car","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[3840,0,0],[4320,0,0],[4560,3,0],[4800,0,0],[5160,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5760,0,0],[6240,0,0],[6480,3,0],[6720,0,0],[7080,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[7680,0,0],[8160,0,0],[8400,3,0],[8640,3,0],[9000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[9600,2,0],[10080,0,0],[10560,3,0],[10800,2,0],[11280,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[11520,0,0],[12000,0,0],[12240,3,0],[12480,0,0],[12840,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[13440,0,0],[13920,0,0],[14160,3,0],[14400,0,0],[14760,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[15360,0,0],[15840,0,0],[16080,3,0],[16320,3,0],[16680,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[17280,2,0],[17280,6,360],[17760,0,0],[17760,7,360],[18240,4,360],[18240,3,0],[18480,2,0],[18720,5,360],[18960,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[19200,2,0],[19680,3,0],[20160,3,0],[20520,3,0],[20880,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[21360,1,0],[21600,3,0],[22080,0,0],[22440,3,0],[22800,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[23280,0,0],[23520,3,0],[24000,2,0],[24360,2,0],[24720,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[24960,6,360],[24960,2,0],[25440,7,360],[25440,2,0],[25680,0,0],[25920,4,360],[25920,2,0],[26160,0,0],[26400,5,360],[26400,3,0],[26640,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26880,2,0],[27360,3,0],[27840,3,0],[28200,3,0],[28560,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[29040,1,0],[29280,3,0],[29760,0,0],[30120,3,0],[30480,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30960,0,0],[31200,3,0],[31680,2,0],[32040,2,0],[32400,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32640,2,0],[33120,2,0],[33360,0,0],[33600,2,0],[33840,0,0],[34080,3,0],[34320,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[34560,0,0],[35040,1,360],[35520,0,360],[36000,3,360]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[36480,3,0],[36960,3,0],[37200,0,0],[37440,3,240],[37920,0,240],[38280,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[38400,2,360],[38880,3,360],[39360,0,360],[39840,2,360]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[40320,3,0],[40560,2,0],[40800,0,0],[41040,2,0],[41280,0,240],[41760,1,240]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[42240,0,0],[42240,7,420],[42720,1,360],[42720,5,360],[43200,7,360],[43200,0,360],[43680,4,360],[43680,3,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[44160,6,360],[44160,3,0],[44640,3,0],[44880,0,0],[45120,4,240],[45120,3,240],[45600,7,240],[45600,0,240],[45960,5,0],[45960,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[46080,2,360],[46080,6,360],[46560,3,360],[46560,7,1440],[47040,0,360],[47520,2,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[48000,3,0],[48240,2,0],[48480,0,0],[48720,2,0],[48960,0,240],[49440,1,240]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[49920,1,600],[49920,5,720],[50640,3,0],[50880,3,0],[51360,0,240]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[51840,2,360],[52320,1,0],[52560,3,0],[52800,3,0],[53280,0,240]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[53760,1,360],[54240,0,0],[54480,3,0],[54720,3,0],[55200,0,240]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[55680,0,0],[56160,3,0],[56400,3,0],[56640,0,0],[56880,0,0],[57120,1,0],[57360,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[57600,1,600],[57600,5,480],[58320,3,0],[58560,3,0],[59040,0,240]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[59520,2,360],[60000,1,0],[60240,3,0],[60480,3,0],[60960,0,240]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[61440,1,360],[61920,0,0],[62160,3,0],[62400,3,0],[62880,0,240]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[63360,0,0],[63840,3,0],[64080,3,0],[64320,0,0],[64560,0,0],[64800,1,0],[65040,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65280,0,0],[65280,5,480],[65760,1,360],[66240,0,360],[66720,3,360]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[67200,3,0],[67680,3,0],[67920,0,0],[68160,3,240],[68640,0,240],[69000,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[69120,2,360],[69600,3,360],[70080,0,360],[70560,2,360]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[71040,3,0],[71280,2,0],[71520,0,0],[71760,2,0],[72000,0,240],[72480,1,240]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72960,0,0],[72960,7,420],[73440,1,360],[73440,5,360],[73920,7,360],[73920,0,360],[74400,4,360],[74400,3,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[74880,6,360],[74880,3,0],[75360,3,0],[75600,0,0],[75840,4,240],[75840,3,240],[76320,7,240],[76320,0,240],[76680,5,0],[76680,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[76800,2,360],[76800,6,360],[77280,3,360],[77280,7,1440],[77760,0,360],[78240,2,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78720,3,0],[78960,2,0],[79200,0,0],[79440,2,0],[79680,0,240],[80160,1,240]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80640,3,960],[80640,7,960],[82080,2,360],[82080,6,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[82560,1,600],[82560,5,600],[83280,6,600],[83280,2,600],[84000,7,360],[84000,3,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[84480,6,0],[84480,2,360],[84720,7,0],[84960,4,0],[84960,1,360],[85440,5,0],[85440,3,360],[85920,4,0],[85920,0,360],[86160,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[86400,6,0],[86400,2,360],[86640,7,0],[86880,4,0],[86880,1,360],[87360,7,0],[87360,3,360],[87840,7,0],[87840,0,0],[88080,6,0],[88080,3,0],[88200,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[88320,3,960],[88320,7,960],[89760,2,360],[89760,6,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[90240,1,600],[90240,5,600],[90960,6,600],[90960,2,600],[91680,7,360],[91680,3,360]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[92160,2,0],[92160,6,360],[92400,3,0],[92640,0,0],[92640,5,360],[93120,1,0],[93120,7,360],[93600,0,0],[93600,4,360],[93840,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[94080,2,0],[94080,6,360],[94320,3,0],[94560,0,0],[94560,5,360],[95040,3,0],[95040,7,360],[95520,3,0],[95520,4,0],[95640,6,0],[95760,7,0],[95760,2,0],[95880,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[96000,6,960],[96000,2,960]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":125,"changeBPM":false,"mustHitSection":true}],"player2":"mom-car","song":"High","stage":"limo","needsVoices":true,"validScore":true,"bpm":125,"speed":1.3}}
\ No newline at end of file
diff --git a/assets/preload/data/high/high-hard.json b/assets/preload/data/high/high-hard.json
deleted file mode 100644
index 7dbba16b23..0000000000
--- a/assets/preload/data/high/high-hard.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-car","gfVersion":"gf-car","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[3840,0,0],[4320,0,0],[4560,3,0],[4800,2,0],[4920,0,0],[5160,3,0],[5520,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5760,0,0],[6240,0,0],[6480,3,0],[6720,2,0],[6840,0,0],[7080,3,0],[7440,0,0],[7560,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[7680,0,0],[8160,0,0],[8400,3,0],[8640,2,0],[8760,3,0],[9000,0,0],[9360,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[9600,2,0],[9720,3,0],[9840,2,0],[9960,3,0],[10080,0,0],[10320,0,0],[10440,1,0],[10560,3,0],[10800,2,0],[11040,2,0],[11160,3,0],[11280,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[11520,0,0],[12000,0,0],[12240,3,0],[12480,2,0],[12600,0,0],[12840,3,0],[13200,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[13440,0,0],[13920,0,0],[14160,3,0],[14400,2,0],[14520,0,0],[14760,3,0],[15120,0,0],[15240,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[15360,0,0],[15840,0,0],[16080,3,0],[16320,2,0],[16440,3,0],[16680,0,0],[17040,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[17280,6,360],[17280,2,0],[17400,3,0],[17520,2,0],[17640,3,0],[17760,7,360],[17760,0,0],[18000,0,0],[18120,1,0],[18240,4,360],[18240,3,0],[18480,2,0],[18720,5,360],[18720,2,0],[18840,3,0],[18960,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[19200,2,0],[19440,1,0],[19560,0,0],[19680,3,0],[20040,1,0],[20160,3,0],[20520,3,0],[20880,3,0],[21000,2,240]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[21360,1,0],[21480,0,0],[21600,3,0],[21960,1,0],[22080,0,0],[22200,1,0],[22440,3,0],[22800,2,0],[22920,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[23280,0,0],[23400,2,0],[23520,3,0],[23880,3,0],[24000,2,0],[24360,2,0],[24720,2,0],[24840,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[24960,6,360],[24960,2,0],[25080,3,0],[25200,0,0],[25440,7,360],[25440,2,0],[25680,0,0],[25920,4,360],[25920,2,0],[26040,3,0],[26160,0,0],[26280,1,0],[26400,5,360],[26400,3,0],[26520,0,0],[26640,1,0],[26760,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26880,2,0],[27120,1,0],[27240,0,0],[27360,3,0],[27720,1,0],[27840,3,0],[28200,3,0],[28560,3,0],[28680,2,240]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[29040,1,0],[29160,0,0],[29280,3,0],[29640,1,0],[29760,0,0],[29880,1,0],[30120,3,0],[30480,2,0],[30600,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30960,0,0],[31080,2,0],[31200,3,0],[31560,3,0],[31680,2,0],[32040,2,0],[32400,2,0],[32520,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32640,2,0],[32760,3,0],[32880,0,0],[33120,2,0],[33360,0,0],[33600,2,0],[33720,3,0],[33840,0,0],[33960,1,0],[34080,3,0],[34200,0,0],[34320,1,0],[34440,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[34560,0,0],[34680,3,0],[34800,2,0],[34920,3,0],[35040,1,360],[35520,0,360],[36000,3,360]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[36480,3,0],[36840,1,0],[36960,3,0],[37080,2,0],[37200,0,0],[37320,1,0],[37440,3,240],[37800,1,0],[37920,0,240],[38280,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[38400,2,360],[38880,3,360],[39360,0,360],[39840,2,360]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[40320,3,0],[40440,0,0],[40560,2,0],[40680,3,0],[40800,0,0],[40920,2,0],[41040,3,0],[41160,0,0],[41280,2,240],[41640,3,0],[41760,0,240],[42120,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[42240,7,360],[42240,0,0],[42360,3,0],[42480,2,0],[42600,3,0],[42720,5,360],[42720,1,360],[43200,7,360],[43200,0,360],[43680,4,360],[43680,3,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[44160,6,360],[44160,3,0],[44520,1,0],[44640,3,0],[44760,2,0],[44880,0,0],[45000,1,0],[45120,4,240],[45120,3,240],[45480,5,0],[45480,1,0],[45600,7,240],[45600,0,240],[45960,5,0],[45960,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[46080,6,360],[46080,2,360],[46560,7,1440],[46560,3,360],[47040,0,360],[47520,2,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[48000,3,0],[48120,0,0],[48240,2,0],[48360,3,0],[48480,0,0],[48600,2,0],[48720,3,0],[48840,0,0],[48960,2,240],[49320,3,0],[49440,0,240],[49800,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[49920,5,720],[49920,1,600],[50640,3,0],[50880,2,0],[51000,3,0],[51240,2,0],[51360,0,240],[51720,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[51840,2,360],[52320,1,0],[52560,3,0],[52800,2,0],[52920,3,0],[53160,2,0],[53280,0,240],[53640,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[53760,1,360],[54240,0,0],[54480,3,0],[54720,2,0],[54840,3,0],[55080,2,0],[55200,0,240],[55560,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[55680,0,0],[55920,0,0],[56040,3,0],[56160,0,0],[56280,3,0],[56400,2,0],[56520,0,0],[56640,3,0],[56760,1,0],[56880,0,120],[57120,1,0],[57360,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[57600,5,480],[57600,1,600],[58320,3,0],[58560,2,0],[58680,3,0],[58920,2,0],[59040,0,240],[59400,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[59520,2,360],[60000,1,0],[60240,3,0],[60480,2,0],[60600,3,0],[60840,2,0],[60960,0,240],[61320,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[61440,1,360],[61920,0,0],[62160,3,0],[62400,2,0],[62520,3,0],[62760,2,0],[62880,0,240],[63240,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[63360,0,0],[63600,0,0],[63720,3,0],[63840,0,0],[63960,3,0],[64080,2,0],[64200,0,0],[64320,3,0],[64440,1,0],[64560,0,120],[64800,1,0],[65040,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65280,0,0],[65280,5,480],[65400,3,0],[65520,2,0],[65640,3,0],[65760,1,360],[66240,0,360],[66720,3,360]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[67200,3,0],[67560,1,0],[67680,3,0],[67800,2,0],[67920,0,0],[68040,1,0],[68160,3,240],[68520,1,0],[68640,0,240],[69000,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[69120,2,360],[69600,3,360],[70080,0,360],[70560,2,360]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[71040,3,0],[71160,0,0],[71280,2,0],[71400,3,0],[71520,0,0],[71640,2,0],[71760,3,0],[71880,0,0],[72000,2,240],[72360,3,0],[72480,0,240],[72840,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72960,7,360],[72960,0,0],[73080,3,0],[73200,2,0],[73320,3,0],[73440,5,360],[73440,1,360],[73920,7,360],[73920,0,360],[74400,4,360],[74400,3,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[74880,6,360],[74880,3,0],[75240,1,0],[75360,3,0],[75480,2,0],[75600,0,0],[75720,1,0],[75840,4,240],[75840,3,240],[76200,5,0],[76200,1,0],[76320,7,240],[76320,0,240],[76680,5,0],[76680,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[76800,6,360],[76800,2,360],[77280,7,1440],[77280,3,360],[77760,0,360],[78240,2,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78720,3,0],[78840,0,0],[78960,2,0],[79080,3,0],[79200,0,0],[79320,2,0],[79440,3,0],[79560,0,0],[79680,2,240],[80040,3,0],[80160,0,240],[80520,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80640,3,960],[80640,7,960],[82080,2,360],[82080,6,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[82560,1,360],[82560,5,600],[83040,1,0],[83280,2,360],[83280,6,600],[83760,2,0],[84000,3,360],[84000,7,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[84480,6,0],[84480,2,360],[84720,7,0],[84840,4,0],[84960,7,0],[84960,1,360],[85080,5,0],[85200,7,0],[85320,4,0],[85440,6,0],[85440,3,360],[85560,4,0],[85680,7,0],[85800,4,0],[85920,7,0],[85920,0,360],[86040,5,0],[86160,7,0],[86280,4,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[86400,6,0],[86400,2,360],[86640,7,0],[86760,4,0],[86880,7,0],[86880,1,360],[87000,5,0],[87120,7,0],[87240,4,0],[87360,6,0],[87360,3,360],[87480,4,0],[87600,7,0],[87720,4,0],[87840,0,0],[87840,7,0],[87960,2,0],[87960,5,0],[88080,3,0],[88080,7,0],[88200,2,0],[88200,4,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[88320,7,960],[88320,3,960],[89760,2,360],[89760,6,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[90240,5,600],[90240,1,360],[90720,1,0],[90960,6,600],[90960,2,360],[91440,2,0],[91680,7,0],[91680,3,360],[91800,5,0],[91920,4,120]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[92160,6,360],[92160,2,0],[92400,3,0],[92520,0,0],[92640,5,360],[92640,3,0],[92760,1,0],[92880,3,0],[93000,0,0],[93120,7,360],[93120,2,0],[93240,0,0],[93360,3,0],[93480,0,0],[93600,4,360],[93600,3,0],[93720,1,0],[93840,3,0],[93960,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[94080,6,360],[94080,2,0],[94320,3,0],[94440,0,0],[94560,5,360],[94560,3,0],[94680,1,0],[94800,3,0],[94920,0,0],[95040,7,360],[95040,2,0],[95160,0,0],[95280,3,0],[95400,0,0],[95520,4,0],[95520,3,0],[95640,6,0],[95640,1,0],[95760,7,0],[95760,3,0],[95880,6,0],[95880,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[96000,6,960],[96000,2,960]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":125,"changeBPM":false,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":125,"changeBPM":false,"mustHitSection":true}],"player2":"mom-car","song":"High","stage":"limo","needsVoices":true,"validScore":true,"bpm":125,"speed":2}}
\ No newline at end of file
diff --git a/assets/preload/data/high/high.json b/assets/preload/data/high/high.json
deleted file mode 100644
index 5d078fab78..0000000000
--- a/assets/preload/data/high/high.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-car","gfVersion":"gf-car","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[3840,0,0],[4320,0,0],[4560,3,0],[4800,0,0],[5160,3,0],[5520,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5760,0,0],[6240,0,0],[6480,3,0],[6720,0,0],[7080,3,0],[7440,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[7680,0,0],[8160,0,0],[8400,3,0],[8640,3,0],[9000,0,0],[9360,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[9600,2,0],[9840,2,0],[10080,0,0],[10320,0,0],[10560,3,0],[10800,2,0],[11040,2,0],[11280,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[11520,0,0],[12000,0,0],[12240,3,0],[12480,0,0],[12840,3,0],[13200,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[13440,0,0],[13920,0,0],[14160,3,0],[14400,0,0],[14760,3,0],[15120,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[15360,0,0],[15840,0,0],[16080,3,0],[16320,3,0],[16680,0,0],[17040,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[17280,2,0],[17280,6,360],[17520,2,0],[17760,7,360],[17760,0,0],[18000,0,0],[18240,4,360],[18240,3,0],[18480,2,0],[18720,5,360],[18720,2,0],[18960,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[19200,2,0],[19440,1,0],[19680,3,0],[20040,1,0],[20160,3,0],[20520,3,0],[20880,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[21120,2,0],[21360,1,0],[21600,3,0],[21960,1,0],[22080,0,0],[22440,3,0],[22800,2,0],[22920,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[23280,0,0],[23520,3,0],[24000,2,0],[24360,2,0],[24720,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[24960,2,0],[24960,6,360],[25200,0,0],[25440,2,0],[25440,7,360],[25680,0,0],[25920,3,0],[25920,4,360],[26160,1,0],[26400,3,0],[26400,5,360],[26640,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26880,2,0],[27120,1,0],[27360,3,0],[27720,1,0],[27840,3,0],[28200,3,0],[28560,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[28800,2,0],[29040,1,0],[29280,3,0],[29640,1,0],[29760,0,0],[30120,3,0],[30480,2,0],[30600,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30960,0,0],[31200,3,0],[31680,2,0],[32040,2,0],[32400,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32640,2,0],[32880,0,0],[33120,2,0],[33360,0,0],[33600,3,0],[33840,1,0],[34080,3,0],[34320,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[34560,0,0],[34800,2,0],[35040,1,360],[35520,0,360],[36000,3,360]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[36480,3,0],[36840,1,0],[36960,3,0],[37200,0,0],[37440,3,240],[37800,1,0],[37920,0,240],[38280,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[38400,2,360],[38880,3,360],[39360,0,360],[39840,2,360]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[40320,3,0],[40560,2,0],[40800,0,0],[41040,2,0],[41280,0,240],[41640,3,0],[41760,1,240],[42120,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[42240,7,360],[42240,0,0],[42480,2,0],[42720,5,360],[42720,1,360],[43200,0,360],[43200,7,360],[43680,4,360],[43680,3,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[44160,6,360],[44160,3,0],[44520,1,0],[44640,3,0],[44880,0,0],[45120,4,240],[45120,3,240],[45480,5,0],[45480,1,0],[45600,7,240],[45600,0,240],[45960,5,0],[45960,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[46080,6,360],[46080,2,360],[46560,7,1440],[46560,3,360],[47040,0,360],[47520,2,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[48000,3,0],[48240,2,0],[48480,0,0],[48720,2,0],[48960,0,240],[49320,3,0],[49440,1,240],[49800,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[49920,1,600],[49920,5,720],[50640,3,0],[50880,3,0],[51240,2,0],[51360,0,240]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[51840,2,360],[52320,1,0],[52560,3,0],[52800,3,0],[53160,2,0],[53280,0,240]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[53760,1,360],[54240,0,0],[54480,3,0],[54720,3,0],[55080,2,0],[55200,0,240]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[55680,0,0],[55920,0,0],[56160,3,0],[56280,2,0],[56400,3,0],[56640,0,0],[56760,1,0],[56880,0,0],[57120,1,0],[57360,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[57600,5,480],[57600,1,600],[58320,3,0],[58560,3,0],[58920,2,0],[59040,0,240]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[59520,2,360],[60000,1,0],[60240,3,0],[60480,3,0],[60840,2,0],[60960,0,240]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[61440,1,360],[61920,0,0],[62160,3,0],[62400,3,0],[62760,2,0],[62880,0,240]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[63360,0,0],[63600,0,0],[63840,3,0],[63960,2,0],[64080,3,0],[64320,0,0],[64440,1,0],[64560,0,0],[64800,1,0],[65040,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65280,0,0],[65280,5,480],[65520,2,0],[65760,1,360],[66240,0,360],[66720,3,360]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[67200,3,0],[67560,1,0],[67680,3,0],[67920,0,0],[68160,3,240],[68520,1,0],[68640,0,240],[69000,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[69120,2,360],[69600,3,360],[70080,0,360],[70560,2,360]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[71040,3,0],[71280,2,0],[71520,0,0],[71760,2,0],[72000,0,240],[72360,3,0],[72480,1,240],[72840,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72960,7,360],[72960,0,0],[73200,2,0],[73440,5,360],[73440,1,360],[73920,0,360],[73920,7,360],[74400,4,360],[74400,3,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[74880,6,360],[74880,3,0],[75240,1,0],[75360,3,0],[75600,0,0],[75840,4,240],[75840,3,240],[76200,5,0],[76200,1,0],[76320,7,240],[76320,0,240],[76680,5,0],[76680,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[76800,6,360],[76800,2,360],[77280,7,1440],[77280,3,360],[77760,0,360],[78240,2,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78720,3,0],[78960,2,0],[79200,0,0],[79440,2,0],[79680,0,240],[80040,3,0],[80160,1,240],[80520,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80640,3,960],[80640,7,960],[82080,2,360],[82080,6,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[82560,5,600],[82560,1,360],[83040,1,0],[83280,6,600],[83280,2,360],[83760,2,0],[84000,3,360],[84000,7,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[84480,6,0],[84480,2,360],[84720,7,0],[84960,1,360],[85080,5,0],[85200,7,0],[85320,4,0],[85440,3,360],[85680,7,0],[85800,4,0],[85920,7,0],[85920,0,360],[86040,5,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[86400,6,0],[86400,2,360],[86640,7,0],[86880,1,360],[87000,5,0],[87120,7,0],[87240,4,0],[87360,3,360],[87600,7,0],[87720,4,0],[87840,7,0],[87840,0,0],[87960,5,0],[88080,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[88320,3,960],[88320,7,960],[89760,2,360],[89760,6,360]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[90240,5,600],[90240,1,360],[90720,1,0],[90960,6,600],[90960,2,360],[91440,2,0],[91680,7,0],[91680,3,360],[91920,4,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[92160,2,0],[92160,6,360],[92400,3,0],[92640,0,0],[92640,5,360],[92880,3,0],[93120,1,0],[93120,7,360],[93360,3,0],[93600,0,0],[93600,4,360],[93840,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[94080,2,0],[94080,6,360],[94320,3,0],[94560,3,0],[94560,5,360],[94680,1,0],[94800,3,0],[94920,0,0],[95040,2,0],[95040,7,360],[95280,3,0],[95520,3,0],[95520,4,0],[95640,1,0],[95640,6,0],[95760,3,0],[95760,7,0],[95880,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[96000,6,960],[96000,2,960]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":125,"changeBPM":false,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":125,"changeBPM":false,"mustHitSection":true}],"player2":"mom-car","song":"High","stage":"limo","needsVoices":true,"validScore":true,"bpm":125,"speed":1.8}}
\ No newline at end of file
diff --git a/assets/preload/data/milf/0.offset b/assets/preload/data/milf/0.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/milf/0.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/milf/milf-easy.json b/assets/preload/data/milf/milf-easy.json
deleted file mode 100644
index eab5b34c03..0000000000
--- a/assets/preload/data/milf/milf-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-car","gfVersion":"gf-car","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[2666.66675,1,0],[3333.3335,1,0],[3583.3335,2,166.666672],[3833.3335,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[4166.667,1,0],[4500,1,0],[4666.667,3,0],[5000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5333.3335,1,0],[6000,1,0],[6250,2,166.666672],[6500,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[6833.3335,1,0],[7166.667,1,0],[7333.3335,3,0],[7666.667,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[8000,1,0],[8666.667,1,0],[8916.667,2,166.666672],[9166.667,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[9500,1,0],[9833.334,1,0],[10000,3,0],[10333.334,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[10666.667,1,0],[11333.334,1,0],[11583.334,2,166.666672],[11833.334,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[12166.667,1,0],[12500,1,0],[12666.667,3,0],[13000,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[13333.334,2,666.6667],[14333.334,1,0],[14500,3,500]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15166.667,2,250],[15500,0,0],[15833.334,1,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[16333.334,1,250],[16666.668,2,250],[17000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[17333.334,3,0],[17666.668,0,0],[18000,3,0],[18333.334,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[18666.668,2,666.6667],[19666.668,1,0],[19833.334,3,500]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[20500,2,250],[20833.334,0,0],[21166.668,1,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[21666.668,1,250],[22000,2,250],[22333.334,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[22666.668,3,0],[23000,0,0],[23333.334,3,0],[23666.668,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[24000,1,0],[24250,3,0],[24666.668,1,0],[24916.668,1,0],[25166.668,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[25500,2,0],[26000,1,0],[26250,1,0],[26500,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26833.334,0,0],[27333.334,1,0],[27583.334,1,0],[27833.334,2,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[28333.334,3,83.3333359],[28666.668,0,0],[29000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[29333.334,1,0],[29333.334,6,333.333344],[29583.334,3,0],[30000,1,0],[30250,1,0],[30500,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30833.334,2,0],[31333.334,1,0],[31583.334,1,0],[31833.334,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32166.668,0,0],[32666.668,1,0],[32916.668,1,0],[33166.668,2,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33666.668,3,83.3333359],[34000,0,0],[34333.3359,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[34666.668,2,666.6667],[35666.668,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[36000,0,166.666672],[36333.3359,1,0],[36666.668,2,166.666672],[37000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[37333.3359,2,0],[37666.668,3,0],[38000,2,0],[38333.3359,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[38666.668,2,0],[39000,3,0],[39333.3359,2,250],[39666.668,1,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[40000,2,666.6667],[41000,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[41333.3359,0,166.666672],[41666.668,1,0],[42000,2,166.666672],[42333.3359,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[42666.668,2,0],[43000,3,0],[43333.3359,2,0],[43666.668,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[44000,2,0],[44333.3359,3,0],[44666.668,2,250],[45000,1,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[45333.3359,2,666.6667],[46333.3359,1,0],[46500,3,500]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[47166.668,2,250],[47500,0,0],[47833.3359,1,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48333.3359,1,250],[48666.668,2,250],[49000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49333.3359,3,0],[49666.668,0,0],[50000,3,0],[50333.3359,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[50666.668,2,666.6667],[51666.668,1,0],[51833.3359,3,500]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[52500,2,250],[52833.3359,0,0],[53166.668,1,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[53666.668,1,250],[54000,2,250],[54333.3359,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[54666.668,3,0],[55000,0,0],[55333.3359,3,0],[55666.668,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56000,0,0],[56333.3359,3,0],[56500,0,0],[56833.3359,3,0],[57000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[57333.3359,0,0],[57666.668,3,0],[57833.3359,0,0],[58166.668,3,0],[58333.3359,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[58666.668,2,0],[58833.3359,3,0],[59000,2,0],[59166.668,3,0],[59333.3359,2,0],[59500,3,0],[59666.668,2,0],[59833.3359,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[60000,2,0],[60166.668,3,0],[60333.3359,2,0],[60500,3,0],[60666.668,2,0],[60833.3359,3,0],[61000,2,0],[61166.668,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61333.3359,0,0],[61666.668,3,0],[61833.3359,0,0],[62166.668,3,0],[62333.3359,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[62666.668,0,0],[63000,3,0],[63166.668,0,0],[63500,3,0],[63666.668,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[64000,2,0],[64166.668,3,0],[64333.3359,2,0],[64500.0039,3,0],[64666.668,2,0],[64833.3359,3,0],[65000.0039,2,0],[65166.668,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65333.3359,2,0],[65500.0039,3,0],[65666.67,2,0],[65833.3359,3,0],[66000,2,0],[66166.67,3,0],[66333.3359,2,0],[66500,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[66666.67,1,0],[66916.67,3,0],[67333.3359,1,0],[67583.3359,1,0],[67833.3359,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[68166.67,2,0],[68666.67,1,0],[68916.67,1,0],[69166.67,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[69500,0,0],[70000,1,0],[70250,1,0],[70500,2,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[71000,3,83.3333359],[71333.3359,0,0],[71666.67,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72000,6,333.333344],[72000,1,0],[72250,3,0],[72666.67,1,0],[72916.67,1,0],[73166.67,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[73500,2,0],[74000,1,0],[74250,1,0],[74500,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[74833.3359,0,0],[75333.3359,1,0],[75583.3359,1,0],[75833.3359,2,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[76333.3359,3,83.3333359],[76666.67,0,0],[77000,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[77333.3359,6,666.6667],[77333.3359,2,666.6667],[78333.3359,5,0],[78333.3359,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[78666.67,4,166.666672],[78666.67,0,166.666672],[79000,5,0],[79000,1,0],[79333.3359,6,166.666672],[79333.3359,2,166.666672],[79666.67,4,0],[79666.67,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[80000,6,0],[80000,2,0],[80333.3359,7,0],[80333.3359,3,0],[80666.67,6,0],[80666.67,2,0],[81000,4,0],[81000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[81333.3359,6,0],[81333.3359,2,0],[81666.67,7,0],[81666.67,3,0],[82000,6,250],[82000,2,250],[82333.3359,5,250],[82333.3359,1,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[82666.67,0,250],[82666.67,6,666.6667],[83000,1,250],[83333.3359,3,250],[83666.67,1,250],[83666.67,5,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[84000,2,250],[84000,4,166.666672],[84333.3359,1,250],[84333.3359,5,0],[84666.67,3,250],[84666.67,6,166.666672],[85000,1,250],[85000,4,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[85333.3359,1,250],[85333.3359,6,0],[85666.67,3,250],[85666.67,7,0],[86000,0,250],[86000,6,0],[86333.3359,3,250],[86333.3359,4,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[86666.67,2,0],[86666.67,6,250],[86833.3359,3,0],[87000,2,0],[87000,7,250],[87166.67,0,0],[87333.3359,2,250],[87333.3359,6,250],[87333.3359,2,250],[87666.67,1,250],[87666.67,5,250],[87666.67,1,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[88000,1,0],[88000,5,0],[88333.3359,1,0],[88666.67,1,0],[89000,2,0],[89166.67,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[89500,1,0],[89833.3359,1,0],[90166.67,3,0],[90333.3359,2,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[90666.67,1,0],[91000,1,0],[91333.3359,1,0],[91666.67,2,0],[91833.3359,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[92166.67,1,0],[92500,1,0],[92666.67,3,0],[92833.3359,1,0],[93000,3,0],[93166.67,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[93333.3359,5,0],[93333.3359,1,0],[93666.67,5,0],[93666.67,1,0],[94000,5,0],[94000,1,0],[94333.3359,6,0],[94333.3359,2,0],[94500,5,0],[94500,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[94833.3359,5,0],[94833.3359,1,0],[95166.67,5,0],[95166.67,1,0],[95500,7,0],[95500,3,0],[95666.67,6,250],[95666.67,2,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[96000,5,0],[96000,1,0],[96333.3359,5,0],[96333.3359,1,0],[96666.67,5,0],[96666.67,1,0],[97000,6,0],[97000,2,0],[97166.67,5,0],[97166.67,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[97500,5,0],[97500,1,0],[97833.3359,5,0],[97833.3359,1,0],[98000,7,0],[98000,3,0],[98166.67,5,0],[98166.67,1,0],[98333.3359,7,0],[98333.3359,3,0],[98500,4,0],[98500,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[98666.67,6,666.6667],[98666.67,2,666.6667],[99666.67,1,0],[99833.3359,3,500]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[100500,2,250],[100833.336,0,0],[101166.672,1,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[101666.672,1,250],[102000,2,250],[102333.336,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[102666.672,3,0],[103000,0,0],[103333.336,3,0],[103666.672,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[104000,2,666.6667],[104000,6,666.6667],[105000,1,0],[105166.672,3,500]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[105833.336,2,250],[106166.672,0,0],[106500,1,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[107000,1,250],[107333.336,2,250],[107666.672,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[108000,3,0],[108333.336,0,0],[108666.672,3,0],[109000,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[109333.336,1,0],[109583.336,3,0],[110000,1,0],[110250,1,0],[110500,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[110833.336,2,0],[111333.336,1,0],[111583.336,1,0],[111833.336,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[112166.672,0,0],[112666.672,1,0],[112916.672,1,0],[113166.672,2,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[113666.672,3,83.3333359],[114000,0,0],[114333.336,0,0],[114500,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[114666.672,6,333.333344],[114666.672,1,0],[114916.672,3,0],[115333.336,1,0],[115583.336,1,0],[115833.336,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[116166.672,2,0],[116666.672,1,0],[116916.672,1,0],[117166.672,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[117500,0,0],[118000,1,0],[118250,1,0],[118500,2,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[119000,3,83.3333359],[119333.336,0,0],[119666.672,0,0],[119833.336,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[120000,2,833.3334]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":180,"changeBPM":false,"mustHitSection":true}],"player2":"mom-car","song":"Milf","stage":"limo","needsVoices":true,"validScore":true,"bpm":180,"speed":1.4}}
\ No newline at end of file
diff --git a/assets/preload/data/milf/milf-hard.json b/assets/preload/data/milf/milf-hard.json
deleted file mode 100644
index 4c7b7251b0..0000000000
--- a/assets/preload/data/milf/milf-hard.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-car","gfVersion":"gf-car","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[2666.66675,1,0],[3000,1,0],[3333.3335,1,0],[3416.66675,0,0],[3500,3,0],[3583.3335,2,166.666672],[3833.3335,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[4166.667,1,0],[4500,1,0],[4666.667,3,0],[4833.3335,1,0],[5000,0,0],[5166.667,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5333.3335,1,0],[5666.667,1,0],[6000,1,0],[6083.3335,0,0],[6166.667,3,0],[6250,2,166.666672],[6500,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[6833.3335,1,0],[7166.667,1,0],[7333.3335,3,0],[7500,1,0],[7666.667,2,0],[7750,3,0],[7833.3335,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[8000,1,0],[8333.334,1,0],[8666.667,1,0],[8750,0,0],[8833.334,3,0],[8916.667,2,166.666672],[9166.667,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[9500,1,0],[9833.334,1,0],[10000,3,0],[10166.667,1,0],[10333.334,0,0],[10500,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[10666.667,1,0],[11000,1,0],[11333.334,1,0],[11416.667,0,0],[11500,3,0],[11583.334,2,166.666672],[11833.334,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[12166.667,1,0],[12500,1,0],[12666.667,3,0],[12833.334,1,0],[13000,2,0],[13083.334,3,0],[13166.667,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[13333.334,2,666.6667],[14333.334,1,0],[14500,1,0],[14583.334,3,416.6667]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15166.667,3,0],[15250,2,166.666672],[15500,0,0],[15833.334,1,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[16166.667,0,0],[16250.001,3,0],[16333.334,1,250],[16666.668,2,250],[17000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[17333.334,3,0],[17500,3,0],[17583.334,2,0],[17666.668,0,0],[17833.334,1,0],[18000,3,0],[18166.668,2,0],[18333.334,0,0],[18500,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[18666.668,2,666.6667],[19666.668,1,0],[19833.334,1,0],[19916.668,3,416.6667]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[20500,3,0],[20583.334,2,166.666672],[20833.334,0,0],[21166.668,1,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[21500,0,0],[21583.334,3,0],[21666.668,1,250],[22000,2,250],[22333.334,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[22666.668,3,0],[22833.334,3,0],[22916.668,2,0],[23000,0,0],[23166.668,1,0],[23333.334,3,0],[23500,2,0],[23666.668,0,0],[23833.334,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[24000,1,0],[24083.334,3,0],[24166.668,0,0],[24250,3,0],[24500,3,0],[24666.668,1,0],[24916.668,1,0],[25166.668,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[25500,2,0],[25666.668,3,83.3333359],[25833.334,1,0],[26000,1,0],[26250,1,0],[26500,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26750,1,0],[26833.334,3,0],[26916.668,0,0],[27000,3,0],[27250,3,0],[27333.334,1,0],[27583.334,1,0],[27833.334,2,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[28166.668,2,0],[28333.334,3,83.3333359],[28500,1,0],[28666.668,0,0],[28833.334,3,0],[28916.668,1,0],[29000,0,0],[29166.668,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[29333.334,1,0],[29333.334,6,333.333344],[29416.668,3,0],[29500,0,0],[29583.334,3,0],[29833.334,3,0],[30000,1,0],[30250,1,0],[30500,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30833.334,2,0],[31000,3,83.3333359],[31166.668,1,0],[31333.334,1,0],[31583.334,1,0],[31833.334,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32083.334,1,0],[32166.668,3,0],[32250.002,0,0],[32333.334,3,0],[32583.334,3,0],[32666.668,1,0],[32916.668,1,0],[33166.668,2,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33500,2,0],[33666.668,3,83.3333359],[33833.3359,1,0],[34000,0,0],[34166.668,3,0],[34250,1,0],[34333.3359,0,0],[34500,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[34666.668,2,666.6667],[35666.668,1,0],[35833.3359,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[36000,0,166.666672],[36333.3359,1,0],[36666.668,2,166.666672],[37000,0,0],[37083.3359,3,0],[37166.668,1,83.3333359]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[37333.3359,2,0],[37500,0,0],[37666.668,3,0],[37833.3359,0,0],[38000,2,0],[38166.668,3,0],[38333.3359,0,0],[38500,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[38666.668,2,0],[38833.3359,3,0],[39000,2,0],[39166.668,0,0],[39333.3359,2,250],[39666.668,1,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[40000,2,666.6667],[41000,1,0],[41166.668,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[41333.3359,0,166.666672],[41666.668,1,0],[42000,2,166.666672],[42333.3359,0,0],[42416.668,3,0],[42500,1,83.3333359]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[42666.668,2,0],[42833.3359,0,0],[43000,3,0],[43166.668,0,0],[43333.3359,2,0],[43500,3,0],[43666.668,0,0],[43833.3359,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[44000,2,0],[44166.668,3,0],[44333.3359,2,0],[44500,0,0],[44666.668,2,250],[45000,1,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[45333.3359,2,666.6667],[46333.3359,1,0],[46500,1,0],[46583.3359,3,416.6667]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[47166.668,3,0],[47250,2,166.666672],[47500,0,0],[47833.3359,1,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48166.668,0,0],[48250,3,0],[48333.3359,1,250],[48666.668,2,250],[49000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49333.3359,3,0],[49500,2,0],[49666.668,0,0],[49833.3359,1,0],[50000,3,0],[50166.668,2,0],[50333.3359,0,0],[50500,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[50666.668,2,666.6667],[51666.668,1,0],[51833.3359,1,0],[51916.668,3,416.6667]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[52500,3,0],[52583.3359,2,166.666672],[52833.3359,0,0],[53166.668,1,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[53500,0,0],[53583.3359,3,0],[53666.668,1,250],[54000,2,250],[54333.3359,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[54666.668,3,0],[54833.3359,2,0],[55000,0,0],[55166.668,1,0],[55333.3359,3,0],[55500,2,0],[55666.668,0,0],[55833.3359,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56000,0,0],[56166.668,1,0],[56333.3359,3,0],[56500,1,0],[56666.668,3,0],[56833.3359,1,0],[57000,0,0],[57083.3359,3,0],[57166.668,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[57333.3359,0,0],[57500,1,0],[57666.668,3,0],[57833.3359,1,0],[58000,3,0],[58166.668,1,0],[58333.3359,0,0],[58416.668,3,0],[58500,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[58666.668,2,0],[58750,3,0],[58833.3359,1,0],[59000,2,0],[59083.3359,3,0],[59166.668,1,0],[59333.3359,2,0],[59416.668,3,0],[59500,1,0],[59666.668,2,0],[59750,3,0],[59833.3359,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[60000,2,0],[60083.3359,3,0],[60166.668,1,0],[60333.3359,2,0],[60416.668,3,0],[60500,1,0],[60666.668,2,0],[60750,3,0],[60833.3359,1,0],[61000,2,0],[61083.3359,3,0],[61166.668,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61333.3359,0,0],[61500,1,0],[61666.668,3,0],[61833.3359,1,0],[62000,3,0],[62166.668,1,0],[62333.3359,0,0],[62416.668,3,0],[62500,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[62666.668,0,0],[62833.3359,1,0],[63000,3,0],[63166.668,1,0],[63333.3359,3,0],[63500,1,0],[63666.668,0,0],[63750,3,0],[63833.3359,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[64000,2,0],[64083.3359,3,0],[64166.668,1,0],[64333.3359,2,0],[64416.668,3,0],[64500.0039,1,0],[64666.668,2,0],[64750.0039,3,0],[64833.3359,1,0],[65000.0039,2,0],[65083.3359,3,0],[65166.668,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65333.3359,2,0],[65416.668,3,0],[65500.0039,1,0],[65666.67,2,0],[65750,3,0],[65833.3359,1,0],[66000,2,0],[66083.3359,3,0],[66166.67,1,0],[66333.3359,2,0],[66416.67,3,0],[66500,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[66666.67,1,0],[66750,3,0],[66833.3359,0,0],[66916.67,3,0],[67166.67,3,0],[67333.3359,1,0],[67583.3359,1,0],[67833.3359,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[68166.67,2,0],[68333.3359,3,83.3333359],[68500,1,0],[68666.67,1,0],[68916.67,1,0],[69166.67,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[69416.67,1,0],[69500,3,0],[69583.3359,0,0],[69666.67,3,0],[69916.67,3,0],[70000,1,0],[70250,1,0],[70500,2,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[70833.3359,2,0],[71000,3,0],[71083.3359,1,0],[71166.67,0,0],[71333.3359,1,0],[71500,3,0],[71583.3359,1,0],[71666.67,0,0],[71833.3359,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72000,1,0],[72000,6,333.333344],[72083.3359,3,0],[72166.67,0,0],[72250,3,0],[72500,3,0],[72666.67,1,0],[72916.67,1,0],[73166.67,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[73500,2,0],[73666.67,3,83.3333359],[73833.3359,1,0],[74000,1,0],[74250,1,0],[74500,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[74750,1,0],[74833.3359,3,0],[74916.67,0,0],[75000,3,0],[75250,3,0],[75333.3359,1,0],[75583.3359,1,0],[75833.3359,2,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[76166.67,2,0],[76333.3359,3,0],[76416.67,1,0],[76500,0,0],[76666.67,1,0],[76833.3359,3,0],[76916.67,1,0],[77000,0,0],[77166.67,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[77333.3359,6,666.6667],[77333.3359,2,666.6667],[78333.3359,4,0],[78333.3359,1,0],[78500,6,0],[78500,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[78666.67,6,166.666672],[78666.67,0,166.666672],[79000,7,0],[79000,1,0],[79333.3359,5,166.666672],[79333.3359,2,166.666672],[79666.67,7,0],[79666.67,0,0],[79750,4,0],[79750,3,0],[79833.3359,1,83.3333359],[79833.3359,5,83.3333359]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[80000,6,0],[80000,2,0],[80166.67,4,0],[80166.67,0,0],[80333.3359,7,0],[80333.3359,3,0],[80500,4,0],[80500,0,0],[80666.67,6,0],[80666.67,2,0],[80833.3359,7,0],[80833.3359,3,0],[81000,4,0],[81000,0,0],[81166.67,7,0],[81166.67,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[81333.3359,6,0],[81333.3359,2,0],[81500,7,0],[81500,3,0],[81666.67,6,0],[81666.67,2,0],[81833.3359,4,0],[81833.3359,0,0],[82000,6,250],[82000,2,250],[82333.3359,5,250],[82333.3359,1,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[82666.67,6,666.6667],[82666.67,0,250],[83000,1,250],[83333.3359,3,250],[83666.67,1,250],[83666.67,5,0],[83833.3359,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[84000,2,250],[84000,4,166.666672],[84333.3359,1,250],[84333.3359,5,0],[84666.67,3,250],[84666.67,6,166.666672],[85000,1,250],[85000,4,0],[85083.3359,7,0],[85166.67,5,83.3333359]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[85333.3359,1,250],[85333.3359,6,0],[85500,4,0],[85666.67,3,250],[85666.67,7,0],[85833.3359,4,0],[86000,0,250],[86000,6,0],[86166.67,7,0],[86333.3359,3,250],[86333.3359,4,0],[86500,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[86666.67,6,250],[86666.67,2,0],[86833.3359,3,0],[87000,7,250],[87000,2,0],[87166.67,0,0],[87333.3359,6,250],[87333.3359,2,250],[87666.67,5,250],[87666.67,1,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[88000,5,0],[88000,1,0],[88333.3359,1,0],[88666.67,1,0],[88833.3359,0,0],[88916.67,3,0],[89000,2,0],[89166.67,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[89500,1,0],[89833.3359,1,0],[90166.67,3,0],[90250,0,0],[90333.3359,2,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[90666.67,1,0],[91000,1,0],[91333.3359,1,0],[91500,3,0],[91583.3359,0,0],[91666.67,2,0],[91833.3359,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[92000,0,0],[92166.67,1,0],[92333.3359,2,0],[92500,1,0],[92666.67,3,0],[92833.3359,1,0],[92916.67,2,0],[93000,3,0],[93166.67,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[93333.3359,1,0],[93333.3359,5,0],[93666.67,1,0],[93666.67,5,0],[94000,1,0],[94000,5,0],[94166.67,0,0],[94166.67,4,0],[94250,3,0],[94250,7,0],[94333.3359,6,0],[94333.3359,2,0],[94500,1,0],[94500,5,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[94833.3359,1,0],[94833.3359,5,0],[95166.67,1,0],[95166.67,5,0],[95500,3,0],[95500,7,0],[95583.3359,0,0],[95583.3359,4,0],[95666.67,2,250],[95666.67,6,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[96000,1,0],[96000,5,0],[96333.3359,1,0],[96333.3359,5,0],[96666.67,1,0],[96666.67,5,0],[96833.3359,3,0],[96833.3359,7,0],[96916.67,0,0],[96916.67,4,0],[97000,2,0],[97000,6,0],[97166.67,1,0],[97166.67,5,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[97333.3359,0,0],[97333.3359,4,0],[97500,1,0],[97500,5,0],[97666.67,2,0],[97666.67,6,0],[97833.3359,1,0],[97833.3359,5,0],[98000,3,0],[98000,7,0],[98166.67,1,0],[98166.67,5,0],[98250,2,0],[98250,6,0],[98333.3359,3,0],[98333.3359,7,0],[98500,0,0],[98500,4,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[98666.67,2,666.6667],[98666.67,6,666.6667],[99666.67,1,0],[99833.3359,1,0],[99916.67,3,416.6667]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[100500,3,0],[100583.336,2,166.666672],[100833.336,0,0],[101166.672,1,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[101500,0,0],[101583.336,3,0],[101666.672,1,250],[102000,2,250],[102333.336,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[102666.672,3,0],[102833.336,3,0],[102916.672,2,0],[103000,0,0],[103166.672,1,0],[103333.336,3,0],[103500,2,0],[103666.672,0,0],[103833.336,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[104000,2,666.6667],[104000,6,666.6667],[105000,1,0],[105166.672,1,0],[105250,3,333.333344]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[105833.336,3,0],[105916.672,2,166.666672],[106166.672,0,0],[106500,1,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[106833.336,0,0],[106916.672,3,0],[107000,1,250],[107333.336,2,250],[107666.672,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[108000,3,0],[108166.672,3,0],[108250,2,0],[108333.336,0,0],[108500,1,0],[108666.672,3,0],[108833.336,2,0],[109000,0,0],[109166.672,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[109333.336,1,0],[109416.672,3,0],[109500,0,0],[109583.336,3,0],[109833.336,3,0],[110000,1,0],[110250,1,0],[110500,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[110833.336,2,0],[111000,3,83.3333359],[111166.672,1,0],[111333.336,1,0],[111583.336,1,0],[111833.336,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[112083.336,1,0],[112166.672,3,0],[112250,0,0],[112333.336,3,0],[112583.336,3,0],[112666.672,1,0],[112916.672,1,0],[113166.672,2,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[113500,2,0],[113666.672,3,0],[113750,1,0],[113833.336,0,0],[114000,1,0],[114166.672,3,0],[114250,1,0],[114333.336,0,0],[114500,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[114666.672,1,0],[114666.672,6,333.333344],[114750,3,0],[114833.336,0,0],[114916.672,3,0],[115166.672,3,0],[115333.336,1,0],[115583.336,1,0],[115833.336,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[116166.672,2,0],[116333.336,3,83.3333359],[116500,1,0],[116666.672,1,0],[116916.672,1,0],[117166.672,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[117416.672,1,0],[117500,3,0],[117583.336,0,0],[117666.672,3,0],[117916.672,3,0],[118000,1,0],[118250,1,0],[118500,2,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[118833.336,2,0],[119000,3,0],[119083.336,1,0],[119166.672,0,0],[119333.336,1,0],[119500,3,0],[119583.336,1,0],[119666.672,0,0],[119833.336,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[120000,2,833.3334]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":180,"changeBPM":false,"mustHitSection":true}],"player2":"mom-car","song":"Milf","stage":"limo","needsVoices":true,"validScore":true,"bpm":180,"speed":2.6}}
\ No newline at end of file
diff --git a/assets/preload/data/milf/milf.json b/assets/preload/data/milf/milf.json
deleted file mode 100644
index 4b0d3a1e31..0000000000
--- a/assets/preload/data/milf/milf.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-car","gfVersion":"gf-car","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[2666.66675,1,0],[3000,1,0],[3333.3335,1,0],[3583.3335,2,166.666672],[3833.3335,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[4166.667,1,0],[4500,1,0],[4666.667,3,0],[4833.3335,1,0],[5000,0,0],[5166.667,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5333.3335,1,0],[5666.667,1,0],[6000,1,0],[6250,2,166.666672],[6500,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[6833.3335,1,0],[7166.667,1,0],[7333.3335,3,0],[7500,1,0],[7666.667,2,0],[7833.3335,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[8000,1,0],[8333.334,1,0],[8666.667,1,0],[8916.667,2,166.666672],[9166.667,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[9500,1,0],[9833.334,1,0],[10000,3,0],[10166.667,1,0],[10333.334,0,0],[10500,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[10666.667,1,0],[11000,1,0],[11333.334,1,0],[11583.334,2,166.666672],[11833.334,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[12166.667,1,0],[12500,1,0],[12666.667,3,0],[12833.334,1,0],[13000,2,0],[13166.667,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[13333.334,2,666.6667],[14333.334,1,0],[14500,3,500]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15166.667,2,250],[15500,0,0],[15833.334,1,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[16166.667,0,0],[16333.334,1,250],[16666.668,2,250],[17000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[17333.334,3,0],[17666.668,0,0],[18000,3,0],[18166.668,2,0],[18333.334,0,0],[18500,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[18666.668,2,666.6667],[19666.668,1,0],[19833.334,3,500]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[20500,2,250],[20833.334,0,0],[21166.668,1,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[21500,0,0],[21666.668,1,250],[22000,2,250],[22333.334,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[22666.668,3,0],[23000,0,0],[23333.334,3,0],[23500,2,0],[23666.668,0,0],[23833.334,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[24000,1,0],[24250,3,0],[24500,3,0],[24666.668,1,0],[24916.668,1,0],[25166.668,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[25500,2,0],[25833.334,1,0],[26000,1,0],[26250,1,0],[26500,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26833.334,0,0],[27000,3,0],[27333.334,1,0],[27583.334,1,0],[27833.334,2,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[28166.668,2,0],[28333.334,3,83.3333359],[28500,1,0],[28666.668,0,0],[29000,0,0],[29166.668,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[29333.334,1,0],[29333.334,6,333.333344],[29583.334,3,0],[29833.334,3,0],[30000,1,0],[30250,1,0],[30500,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30833.334,2,0],[31166.668,1,0],[31333.334,1,0],[31583.334,1,0],[31833.334,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32166.668,0,0],[32333.334,3,0],[32666.668,1,0],[32916.668,1,0],[33166.668,2,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33500,2,0],[33666.668,3,83.3333359],[33833.3359,1,0],[34000,0,0],[34333.3359,0,0],[34500,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[34666.668,2,666.6667],[35666.668,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[36000,0,166.666672],[36333.3359,1,0],[36666.668,2,166.666672],[37000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[37333.3359,2,0],[37500,0,0],[37666.668,3,0],[37833.3359,0,0],[38000,2,0],[38166.668,3,0],[38333.3359,0,0],[38500,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[38666.668,2,0],[38833.3359,3,0],[39000,2,0],[39166.668,0,0],[39333.3359,2,250],[39666.668,1,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[40000,2,666.6667],[41000,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[41333.3359,0,166.666672],[41666.668,1,0],[42000,2,166.666672],[42333.3359,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[42666.668,2,0],[42833.3359,0,0],[43000,3,0],[43166.668,0,0],[43333.3359,2,0],[43500,3,0],[43666.668,0,0],[43833.3359,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[44000,2,0],[44166.668,3,0],[44333.3359,2,0],[44500,0,0],[44666.668,2,250],[45000,1,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[45333.3359,2,666.6667],[46333.3359,1,0],[46500,3,500]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[47166.668,2,250],[47500,0,0],[47833.3359,1,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48166.668,0,0],[48333.3359,1,250],[48666.668,2,250],[49000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49333.3359,3,0],[49666.668,0,0],[50000,3,0],[50166.668,2,0],[50333.3359,0,0],[50500,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[50666.668,2,666.6667],[51666.668,1,0],[51833.3359,3,500]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[52500,2,250],[52833.3359,0,0],[53166.668,1,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[53500,0,0],[53666.668,1,250],[54000,2,250],[54333.3359,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[54666.668,3,0],[55000,0,0],[55333.3359,3,0],[55500,2,0],[55666.668,0,0],[55833.3359,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56000,0,0],[56166.668,1,0],[56333.3359,3,0],[56500,0,0],[56666.668,1,0],[56833.3359,3,0],[57000,0,0],[57166.668,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[57333.3359,0,0],[57500,1,0],[57666.668,3,0],[57833.3359,0,0],[58000,1,0],[58166.668,3,0],[58333.3359,0,0],[58500,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[58666.668,2,0],[58750,3,0],[59000,2,0],[59083.3359,3,0],[59333.3359,2,0],[59416.668,3,0],[59666.668,2,0],[59750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[60000,2,0],[60083.3359,3,0],[60333.3359,2,0],[60416.668,3,0],[60666.668,2,0],[60750,3,0],[61000,2,0],[61083.3359,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61333.3359,0,0],[61500,1,0],[61666.668,3,0],[61833.3359,0,0],[62000,1,0],[62166.668,3,0],[62333.3359,0,0],[62500,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[62666.668,0,0],[62833.3359,1,0],[63000,3,0],[63166.668,0,0],[63333.3359,1,0],[63500,3,0],[63666.668,0,0],[63833.3359,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[64000,2,0],[64083.3359,3,0],[64333.3359,2,0],[64416.668,3,0],[64666.668,2,0],[64750.0039,3,0],[65000.0039,2,0],[65083.3359,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65333.3359,2,0],[65416.668,3,0],[65666.67,2,0],[65750,3,0],[66000,2,0],[66083.3359,3,0],[66333.3359,2,0],[66416.67,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[66666.67,1,0],[66916.67,3,0],[67166.67,3,0],[67333.3359,1,0],[67583.3359,1,0],[67833.3359,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[68166.67,2,0],[68500,1,0],[68666.67,1,0],[68916.67,1,0],[69166.67,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[69500,0,0],[69666.67,3,0],[70000,1,0],[70250,1,0],[70500,2,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[70833.3359,2,0],[71000,3,83.3333359],[71166.67,1,0],[71333.3359,0,0],[71666.67,0,0],[71833.3359,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72000,6,333.333344],[72000,1,0],[72250,3,0],[72500,3,0],[72666.67,1,0],[72916.67,1,0],[73166.67,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[73500,2,0],[73833.3359,1,0],[74000,1,0],[74250,1,0],[74500,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[74833.3359,0,0],[75000,3,0],[75333.3359,1,0],[75583.3359,1,0],[75833.3359,2,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[76166.67,2,0],[76333.3359,3,83.3333359],[76500,1,0],[76666.67,0,0],[77000,0,0],[77166.67,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[77333.3359,6,666.6667],[77333.3359,2,666.6667],[78333.3359,4,0],[78333.3359,1,0],[78500,6,0],[78500,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[78666.67,6,166.666672],[78666.67,0,166.666672],[79000,7,0],[79000,1,0],[79333.3359,2,166.666672],[79333.3359,5,166.666672],[79666.67,7,0],[79666.67,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[80000,6,0],[80000,2,0],[80333.3359,7,0],[80333.3359,3,0],[80500,4,0],[80500,0,0],[80833.3359,7,0],[80833.3359,3,0],[81000,4,0],[81000,0,0],[81166.67,7,0],[81166.67,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[81333.3359,6,0],[81333.3359,2,0],[81666.67,6,0],[81666.67,2,0],[81833.3359,4,0],[81833.3359,0,0],[82000,6,250],[82000,2,250],[82333.3359,5,250],[82333.3359,1,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[82666.67,6,666.6667],[82666.67,0,250],[83000,1,250],[83333.3359,3,250],[83666.67,1,250],[83666.67,5,0],[83833.3359,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[84000,2,250],[84000,4,166.666672],[84333.3359,1,250],[84333.3359,5,0],[84666.67,6,166.666672],[84666.67,3,250],[85000,4,0],[85000,1,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[85333.3359,6,0],[85333.3359,1,250],[85666.67,7,0],[85666.67,3,250],[85833.3359,4,0],[86000,0,250],[86166.67,7,0],[86333.3359,4,0],[86333.3359,3,250],[86500,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[86666.67,2,0],[86666.67,6,250],[87000,2,0],[87000,7,250],[87166.67,0,0],[87333.3359,2,250],[87333.3359,6,250],[87666.67,1,250],[87666.67,5,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[88000,1,0],[88000,5,0],[88333.3359,1,0],[88666.67,1,0],[89000,2,0],[89166.67,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[89500,1,0],[89833.3359,1,0],[90166.67,3,0],[90333.3359,2,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[90666.67,1,0],[91000,1,0],[91333.3359,1,0],[91666.67,2,0],[91833.3359,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[92166.67,1,0],[92500,1,0],[92666.67,3,0],[92833.3359,1,0],[93000,3,0],[93166.67,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[93333.3359,5,0],[93333.3359,1,0],[93666.67,5,0],[93666.67,1,0],[94000,5,0],[94000,1,0],[94333.3359,6,0],[94333.3359,2,0],[94500,5,0],[94500,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[94833.3359,5,0],[94833.3359,1,0],[95166.67,5,0],[95166.67,1,0],[95500,7,0],[95500,3,0],[95666.67,6,250],[95666.67,2,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[96000,5,0],[96000,1,0],[96333.3359,5,0],[96333.3359,1,0],[96666.67,5,0],[96666.67,1,0],[97000,6,0],[97000,2,0],[97166.67,5,0],[97166.67,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[97500,5,0],[97500,1,0],[97833.3359,5,0],[97833.3359,1,0],[98000,7,0],[98000,3,0],[98166.67,5,0],[98166.67,1,0],[98333.3359,7,0],[98333.3359,3,0],[98500,4,0],[98500,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[98666.67,2,666.6667],[98666.67,6,666.6667],[99666.67,1,0],[99833.3359,3,500]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[100500,2,250],[100833.336,0,0],[101166.672,1,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[101500,0,0],[101666.672,1,250],[102000,2,250],[102333.336,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[102666.672,3,0],[103000,0,0],[103333.336,3,0],[103500,2,0],[103666.672,0,0],[103833.336,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[104000,6,666.6667],[104000,2,666.6667],[105000,1,0],[105166.672,3,500]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[105833.336,2,250],[106166.672,0,0],[106500,1,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[106833.336,0,0],[107000,1,250],[107333.336,2,250],[107666.672,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[108000,3,0],[108333.336,0,0],[108666.672,3,0],[108833.336,2,0],[109000,0,0],[109166.672,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[109333.336,1,0],[109583.336,3,0],[109833.336,3,0],[110000,1,0],[110250,1,0],[110500,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[110833.336,2,0],[111166.672,1,0],[111333.336,1,0],[111583.336,1,0],[111833.336,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[112166.672,0,0],[112333.336,3,0],[112666.672,1,0],[112916.672,1,0],[113166.672,2,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[113500,2,0],[113666.672,3,83.3333359],[113833.336,1,0],[114000,0,0],[114333.336,0,0],[114500,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[114666.672,6,333.333344],[114666.672,1,0],[114916.672,3,0],[115166.672,3,0],[115333.336,1,0],[115583.336,1,0],[115833.336,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[116166.672,2,0],[116500,1,0],[116666.672,1,0],[116916.672,1,0],[117166.672,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[117500,0,0],[117666.672,3,0],[118000,1,0],[118250,1,0],[118500,2,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[118833.336,2,0],[119000,3,83.3333359],[119166.672,1,0],[119333.336,0,0],[119666.672,0,0],[119833.336,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[120000,2,833.3334]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":180,"changeBPM":false,"mustHitSection":true}],"player2":"mom-car","song":"Milf","stage":"limo","needsVoices":true,"validScore":true,"bpm":180,"speed":1.7}}
\ No newline at end of file
diff --git a/assets/preload/data/monster/0.offset b/assets/preload/data/monster/0.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/monster/0.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/monster/monster-easy.json b/assets/preload/data/monster/monster-easy.json
deleted file mode 100644
index 5ea3e1a374..0000000000
--- a/assets/preload/data/monster/monster-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[2526.31567,2,789.473633],[3473.684,3,157.89473],[3789.47363,2,789.473633],[4736.842,3,157.89473]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5052.63135,1,1105.26306]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[7578.94727,4,1105.26306],[7578.94727,2,789.473633],[8526.315,3,0],[8842.10449,6,1105.26306],[8842.10449,2,789.473633],[9789.474,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[10105.2627,5,1105.26306],[10105.2627,1,1105.26306]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[13263.1572,2,0],[13578.9463,1,0],[13894.7363,3,315.789459],[14526.3154,1,315.789459]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15157.8945,3,0],[15473.6836,0,0],[15789.4727,3,0],[16105.2627,1,0],[16421.0527,2,473.6842],[17052.63,0,473.6842]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[18315.79,2,0],[18631.5781,1,0],[18947.3672,3,315.789459],[19578.9473,1,315.789459]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[20210.5254,3,0],[20526.3145,0,0],[20842.1035,3,0],[21157.8945,1,0],[21473.6836,2,473.6842],[22105.2617,0,473.6842]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[23368.42,3,0],[23684.209,2,0],[23999.998,0,473.6842],[24631.5781,2,0],[24947.3672,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[25263.1563,0,473.6842],[25894.7363,2,473.6842],[26526.3145,3,1105.26306]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[28421.05,3,0],[28736.84,2,0],[29052.63,0,473.6842],[29684.209,2,0],[29999.998,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30315.79,0,473.6842],[30947.3672,2,473.6842],[31578.9453,3,1105.26306]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32842.1055,2,631.5789],[33789.4727,0,0],[34105.26,2,0],[34736.84,2,0],[35052.63,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[35368.418,3,0],[35683.38,0,0],[35998.34,2,0],[36313.3,3,590.5512]],"lengthInSteps":16,"changeBPM":true,"mustHitSection":false,"bpm":127},{"sectionNotes":[[37258.1836,2,472.440948],[38205.55,0,0],[38521.34,2,0],[39152.92,2,0],[39468.71,0,0]],"lengthInSteps":16,"changeBPM":true,"mustHitSection":true,"bpm":95},{"sectionNotes":[[39784.5,3,0],[40099.46,0,0],[40414.42,2,0],[40729.3828,3,590.5512]],"lengthInSteps":16,"changeBPM":true,"mustHitSection":true,"bpm":127},{"sectionNotes":[],"lengthInSteps":16,"changeBPM":true,"mustHitSection":true,"bpm":100},{"sectionNotes":[[44359.98,3,0],[44645.6953,0,0],[44931.41,1,0],[45217.12,2,0],[45502.8359,3,0],[45788.55,0,0],[46074.2656,3,0]],"lengthInSteps":16,"changeBPM":true,"mustHitSection":false,"bpm":105},{"sectionNotes":[[46359.98,0,428.571442],[46931.41,1,857.1429]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48931.41,3,0],[49217.12,0,0],[49502.8359,1,0],[49788.55,2,0],[50074.2656,3,0],[50359.98,0,0],[50645.6953,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[50931.41,0,428.571442],[51502.8359,1,857.1429]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[53502.8359,2,0],[53788.55,3,0],[54074.2656,0,0],[54359.98,3,0],[54645.6953,3,0],[54931.41,1,0],[55217.125,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[55502.8359,2,857.1429],[56645.6953,3,0],[56931.41,3,0],[57502.8359,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[58074.2656,2,0],[58359.98,3,0],[58645.6953,0,0],[58931.41,3,0],[59217.125,3,0],[59502.8359,1,0],[59788.55,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[60074.2656,2,857.1429],[61217.125,3,0],[61502.8359,3,0],[62074.2656,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[62359.98,3,0],[62645.6953,3,0],[62931.41,1,0],[63217.125,1,0],[63502.8359,2,0],[63788.55,0,0],[64074.2656,0,0],[64217.125,1,0],[64359.98,2,285.7143]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[64931.41,3,285.7143],[65502.8359,2,285.7143],[66074.2656,3,0],[66359.9844,2,285.7143]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[66931.41,3,0],[67217.125,3,0],[67502.8359,1,0],[67788.5547,1,0],[68074.2656,2,0],[68359.9844,0,0],[68645.6953,0,0],[68788.5547,1,0],[68931.41,2,285.7143]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[69502.8359,3,285.7143],[70074.2656,2,285.7143],[70645.6953,3,0],[70931.41,2,285.7143]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[71502.8359,2,1000],[72645.6953,1,1000]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[73788.5547,3,0],[74074.2656,0,0],[74359.9844,3,0],[74645.6953,0,0],[74931.41,2,0],[75217.125,2,0],[75502.8359,2,0],[75788.5547,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[76074.2656,2,1000],[77217.125,1,1000]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78359.9844,3,0],[78645.6953,0,0],[78931.41,3,0],[79217.125,0,0],[79502.8359,2,0],[79788.5547,2,0],[80074.2656,2,0],[80359.9844,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"changeBPM":true,"mustHitSection":true,"bpm":216},{"sectionNotes":[[82072.59,3,473.6842],[82704.17,0,473.6842],[83335.75,1,0],[83651.54,2,473.6842]],"lengthInSteps":16,"changeBPM":true,"mustHitSection":false,"bpm":95},{"sectionNotes":[[84283.12,3,473.6842],[84914.7,0,473.6842],[85546.28,1,0],[85862.07,2,473.6842],[86493.65,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[86809.44,1,0],[87125.23,2,0],[87756.8047,3,0],[88072.59,1,473.6842],[88704.17,7,0],[89019.96,5,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[89335.75,6,0],[89651.54,4,157.89473],[89967.33,7,0],[90283.12,5,473.6842],[90598.91,2,0],[90914.6953,1,0],[91230.49,3,0],[91546.28,2,315.789459]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[92177.86,2,0],[92493.65,1,0],[92809.44,3,0],[93125.23,2,315.789459],[94072.59,6,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[94546.28,7,0],[94704.17,5,0],[95019.96,5,0],[95651.54,2,0],[96125.23,3,0],[96283.12,1,0],[96598.91,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[97230.4844,2,0],[97546.28,2,0],[97862.07,3,473.6842],[98493.65,1,0],[98809.44,3,315.789459]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[99441.0156,2,0],[99756.8047,2,0],[100072.594,3,473.6842],[100704.172,1,0],[101019.961,3,315.789459],[101335.75,4,473.6842]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[101967.328,1,0],[102283.117,0,0],[102598.906,2,0],[102914.695,0,0],[103230.484,0,0],[103546.281,4,473.6842],[104177.859,5,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[104493.648,4,0],[104809.438,6,0],[105125.227,4,0],[105441.016,4,0],[105756.805,3,473.6842],[106388.383,1,473.6842]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[107019.961,0,0],[107335.75,3,0],[107651.539,0,0],[107967.328,3,0],[108283.117,1,473.6842],[108914.695,7,473.6842]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[109546.273,1,473.6842],[110177.859,0,0],[110493.648,3,0],[110809.438,0,0],[111125.227,3,0],[111441.016,1,473.6842]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[117352.5,2,0],[117579.773,2,0],[117807.047,2,0],[118034.32,2,0],[118261.594,0,227.272736],[118716.133,1,454.545471]],"lengthInSteps":16,"changeBPM":true,"mustHitSection":false,"bpm":132},{"sectionNotes":[[120534.32,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[120761.594,3,795.4545],[121670.68,3,340.9091],[122125.227,0,0],[122352.5,2,340.9091]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[122807.047,1,681.8182]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[124625.227,2,0],[124852.5,2,0],[125079.773,2,0],[125307.047,2,0],[125534.32,0,227.272736],[125988.859,1,454.545471]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[127807.047,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[128034.32,3,795.4545],[128943.406,3,340.9091],[129397.953,0,0],[129625.227,2,340.9091]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[130079.773,1,681.8182]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"changeBPM":true,"mustHitSection":true,"bpm":120},{"sectionNotes":[[133920.688,2,0],[134170.688,0,0],[134420.688,1,0],[134670.688,2,0],[134920.688,3,0],[135170.688,0,0],[135420.688,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[135670.688,0,375],[136170.688,3,750]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[137920.688,2,0],[138170.688,0,0],[138420.688,1,0],[138670.688,2,0],[138920.688,3,0],[139170.688,0,0],[139420.688,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[139670.688,0,375],[140170.688,3,750]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[141920.688,3,0],[142170.688,1,0],[142420.688,0,0],[142670.688,2,0],[142920.688,3,0],[143170.688,0,0],[143420.688,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[143670.688,3,500],[144670.688,2,0],[144920.688,2,0],[145420.688,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[145920.688,3,0],[146170.688,1,0],[146420.688,0,0],[146670.688,2,0],[146920.688,3,0],[147170.688,0,0],[147420.688,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[147670.688,3,500],[148670.688,2,0],[148920.688,2,0],[149420.688,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[149670.688,3,0],[149920.688,3,0],[150170.688,1,0],[150420.688,1,0],[150670.688,2,0],[150920.688,0,0],[151170.688,0,0],[151420.688,2,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[151920.688,3,250],[152420.688,0,250],[152920.688,3,0],[153170.688,0,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[153670.688,3,0],[153920.688,3,0],[154170.688,1,0],[154420.688,1,0],[154670.688,2,0],[154920.688,0,0],[155170.688,0,0],[155420.688,2,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[155920.688,3,250],[156420.688,0,250],[156920.688,3,0],[157170.688,0,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[157670.688,2,875],[158670.688,1,875]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[159670.688,3,0],[159920.688,0,0],[160170.688,3,0],[160420.688,0,0],[160670.688,3,0],[160920.688,3,0],[161170.688,3,0],[161420.688,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[161670.688,2,875],[162670.688,1,875]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[163670.688,3,0],[163920.688,0,0],[164170.688,3,0],[164420.688,0,0],[164670.688,3,0],[164920.688,3,0],[165170.688,3,0],[165420.688,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[165920.688,1,0],[166170.688,0,0],[166420.688,2,0],[166670.688,1,0],[166920.688,0,0],[167170.688,3,0],[167420.688,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[167670.688,3,0],[167920.688,1,500]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[169920.688,1,0],[170170.688,0,0],[170420.688,2,0],[170670.688,1,0],[170920.688,0,0],[171170.688,3,0],[171420.688,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[171670.688,3,0],[171920.688,1,500]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":95,"changeBPM":false,"mustHitSection":true}],"player2":"monster","song":"Monster","stage":"halloween","needsVoices":true,"validScore":true,"bpm":95,"speed":1.3}}
\ No newline at end of file
diff --git a/assets/preload/data/monster/monster-hard.json b/assets/preload/data/monster/monster-hard.json
deleted file mode 100644
index 670f469dcf..0000000000
--- a/assets/preload/data/monster/monster-hard.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[2526.31567,2,789.473633],[3473.684,3,157.89473],[3789.47363,2,789.473633],[4736.842,3,157.89473]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5052.63135,1,1105.26306]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[7578.94727,4,1105.26306],[7578.94727,2,789.473633],[8526.315,3,157.89473],[8842.10449,6,1105.26306],[8842.10449,2,789.473633],[9789.474,3,157.89473]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[10105.2627,5,1105.26306],[10105.2627,1,1105.26306]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[13263.1572,2,0],[13578.9463,1,0],[13894.7363,3,315.789459],[14526.3154,1,157.89473],[14842.1045,0,0],[14999.999,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15157.8945,3,0],[15473.6836,0,0],[15789.4727,3,0],[16105.2627,1,0],[16421.0527,2,473.6842],[17052.63,0,473.6842]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[18315.79,2,0],[18631.5781,1,0],[18947.3672,3,315.789459],[19578.9473,1,157.89473],[19894.7363,0,0],[20052.63,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[20210.5254,3,0],[20526.3145,0,0],[20842.1035,3,0],[21157.8945,1,0],[21473.6836,2,473.6842],[22105.2617,0,473.6842]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[23368.42,3,0],[23684.209,2,0],[23999.998,0,473.6842],[24631.5781,2,157.89473],[24947.3672,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[25263.1563,0,473.6842],[25894.7363,2,473.6842],[26526.3145,3,1105.26306]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[28421.05,3,0],[28736.84,2,0],[29052.63,0,473.6842],[29684.209,2,157.89473],[29999.998,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30315.79,0,473.6842],[30947.3672,2,473.6842],[31578.9453,3,1105.26306]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32842.1055,2,631.5789],[33789.4727,2,0],[33789.4727,0,0],[34105.26,2,157.89473],[34421.05,1,157.89473],[34736.84,2,157.89473],[35052.63,0,0],[35052.63,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[35368.418,3,0],[35368.418,0,0],[35683.38,0,118.110237],[35998.34,2,0],[36313.3,3,590.5512]],"lengthInSteps":16,"changeBPM":true,"mustHitSection":false,"bpm":127},{"sectionNotes":[[37258.1836,2,631.5789],[38205.55,0,0],[38205.55,2,0],[38521.34,2,157.89473],[38837.1328,1,157.89473],[39152.92,2,157.89473],[39468.71,3,0],[39468.71,0,0]],"lengthInSteps":16,"changeBPM":true,"mustHitSection":true,"bpm":95},{"sectionNotes":[[39784.5,3,0],[39784.5,0,0],[40099.46,0,118.110237],[40414.42,2,0],[40729.3828,3,590.5512]],"lengthInSteps":16,"changeBPM":true,"mustHitSection":true,"bpm":127},{"sectionNotes":[],"lengthInSteps":16,"changeBPM":true,"mustHitSection":true,"bpm":100},{"sectionNotes":[[44359.98,3,0],[44502.8359,0,0],[44502.8359,1,0],[44931.41,1,0],[45217.12,3,0],[45217.12,2,0],[45502.8359,3,0],[45788.55,0,0],[46074.2656,2,0],[46074.2656,3,0]],"lengthInSteps":16,"changeBPM":true,"mustHitSection":false,"bpm":105},{"sectionNotes":[[46359.98,0,428.571442],[46931.41,1,857.1429]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48931.41,3,0],[49074.2656,0,0],[49074.2656,1,0],[49502.8359,1,0],[49788.55,3,0],[49788.55,2,0],[50074.2656,3,0],[50359.98,0,0],[50645.6953,2,0],[50645.6953,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[50931.41,0,428.571442],[51502.8359,1,857.1429]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[53502.8359,2,148.809525],[53788.55,3,148.809525],[54074.2656,0,148.809525],[54359.98,3,148.809525],[54645.6953,1,0],[54645.6953,3,0],[54931.41,1,0],[55217.125,0,148.809525]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[55502.8359,2,857.1429],[55502.8359,0,857.1429],[56645.6953,3,0],[56788.55,2,0],[56931.41,3,0],[57359.98,1,0],[57502.8359,3,0],[57502.8359,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[58074.2656,2,148.809525],[58359.98,3,148.809525],[58645.6953,0,148.809525],[58931.41,3,148.809525],[59217.125,1,0],[59217.125,3,0],[59502.8359,1,0],[59788.55,0,148.809525]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[60074.2656,2,857.1429],[60074.2656,0,857.1429],[61217.125,3,0],[61359.98,2,0],[61502.8359,3,0],[61931.41,1,0],[62074.2656,3,0],[62074.2656,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[62359.98,3,0],[62502.8359,2,0],[62645.6953,3,0],[62931.41,1,0],[63074.2656,2,0],[63217.125,1,0],[63502.8359,2,0],[63645.6953,1,0],[63788.55,0,0],[63931.41,1,0],[64074.2656,3,0],[64217.125,1,0],[64359.98,0,285.7143]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[64931.41,0,285.7143],[64931.41,3,285.7143],[65502.8359,2,285.7143],[66074.2656,0,0],[66074.2656,3,0],[66359.9844,2,285.7143]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[66931.41,3,0],[67074.2656,2,0],[67217.125,3,0],[67502.8359,1,0],[67645.6953,2,0],[67788.5547,1,0],[68074.2656,2,0],[68217.125,1,0],[68359.9844,0,0],[68502.8359,1,0],[68645.6953,3,0],[68788.5547,1,0],[68931.41,0,285.7143]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[69502.8359,0,285.7143],[69502.8359,3,285.7143],[70074.2656,2,285.7143],[70645.6953,0,0],[70645.6953,3,0],[70931.41,2,285.7143]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[71502.8359,2,1000],[72645.6953,1,1000]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[73788.5547,3,0],[73931.41,1,0],[74074.2656,0,0],[74217.125,1,0],[74359.9844,3,0],[74502.8359,1,0],[74645.6953,0,0],[74788.5547,1,0],[74931.41,2,0],[75217.125,2,0],[75502.8359,2,0],[75788.5547,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[76074.2656,2,1000],[77217.125,1,1000]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78359.9844,3,0],[78502.8359,1,0],[78645.6953,0,0],[78788.5547,1,0],[78931.41,3,0],[79074.2656,1,0],[79217.125,0,0],[79359.9844,1,0],[79502.8359,2,0],[79788.5547,2,0],[80074.2656,2,0],[80359.9844,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"changeBPM":true,"mustHitSection":true,"bpm":216},{"sectionNotes":[[82072.59,3,473.6842],[82704.17,0,473.6842],[83335.75,1,0],[83651.54,2,473.6842]],"lengthInSteps":16,"changeBPM":true,"mustHitSection":false,"bpm":95},{"sectionNotes":[[84283.12,3,473.6842],[84914.7,0,473.6842],[85546.28,1,0],[85862.07,2,473.6842],[86493.65,7,157.89473]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[86809.44,1,157.89473],[87125.23,2,157.89473],[87441.0156,0,157.89473],[87756.8047,3,157.89473],[88072.59,1,473.6842],[88704.17,7,157.89473],[89019.96,5,157.89473]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[89335.75,6,157.89473],[89651.54,4,157.89473],[89967.33,7,157.89473],[90283.12,5,473.6842],[90598.91,2,157.89473],[90914.6953,0,0],[91072.59,1,0],[91230.49,3,157.89473],[91546.28,2,315.789459]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[92177.86,2,157.89473],[92493.65,0,0],[92651.54,1,0],[92809.44,3,157.89473],[93125.23,2,315.789459],[94072.59,6,157.89473]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[94546.28,7,0],[94704.17,5,157.89473],[95019.96,5,0],[95651.54,2,157.89473],[96125.23,3,0],[96283.12,1,157.89473],[96598.91,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[97230.4844,2,0],[97388.38,0,0],[97546.28,2,157.89473],[97862.07,3,473.6842],[98493.65,1,157.89473],[98809.44,3,315.789459]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[99441.0156,2,0],[99598.91,0,0],[99756.8047,2,157.89473],[100072.594,3,473.6842],[100704.172,1,157.89473],[101019.961,3,315.789459],[101335.75,4,473.6842]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[101967.328,1,0],[102125.227,3,0],[102283.117,0,0],[102598.906,2,0],[102914.695,0,0],[103230.484,0,0],[103546.281,4,473.6842],[104177.859,5,0],[104335.75,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[104493.648,4,0],[104809.438,6,0],[105125.227,4,0],[105441.016,4,0],[105756.805,3,473.6842],[106388.383,1,473.6842]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[107019.961,0,0],[107335.75,3,157.89473],[107651.539,0,157.89473],[107967.328,3,0],[108283.117,1,473.6842],[108914.695,7,473.6842]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[109546.273,1,473.6842],[110177.859,0,0],[110493.648,3,157.89473],[110809.438,0,157.89473],[111125.227,3,0],[111441.016,1,473.6842]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[117352.5,2,0],[117579.773,2,0],[117807.047,2,0],[118034.32,2,0],[118261.594,0,0],[118488.859,0,113.636368],[118716.133,1,454.545471]],"lengthInSteps":16,"changeBPM":true,"mustHitSection":false,"bpm":132},{"sectionNotes":[[120534.32,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[120761.594,3,795.4545],[121670.68,3,340.9091],[122125.227,0,0],[122352.5,2,340.9091]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[122807.047,1,681.8182]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[124625.227,2,0],[124852.5,2,0],[125079.773,2,0],[125307.047,2,0],[125534.32,0,0],[125761.594,0,113.636368],[125988.859,1,454.545471]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[127807.047,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[128034.32,3,795.4545],[128943.406,3,340.9091],[129397.953,0,0],[129625.227,2,340.9091]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[130079.773,1,681.8182]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"changeBPM":true,"mustHitSection":true,"bpm":120},{"sectionNotes":[[133920.688,2,0],[134045.688,3,250],[134045.688,0,250],[134420.688,1,0],[134670.688,3,0],[134670.688,2,0],[134920.688,3,0],[135170.688,0,0],[135420.688,3,0],[135420.688,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[135670.688,0,375],[136170.688,3,750]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[137920.688,2,0],[138045.688,3,250],[138045.688,0,250],[138420.688,1,0],[138670.688,3,0],[138670.688,2,0],[138920.688,3,0],[139170.688,0,0],[139420.688,3,0],[139420.688,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[139670.688,0,375],[140170.688,3,750]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[141920.688,3,125],[142170.688,1,125],[142420.688,0,125],[142670.688,2,125],[142920.688,3,125],[143170.688,0,125],[143420.688,2,125]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[143670.688,3,500],[144670.688,2,0],[144795.688,0,0],[144920.688,2,0],[145295.688,3,0],[145420.688,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[145920.688,3,125],[146170.688,1,125],[146420.688,0,125],[146670.688,2,125],[146920.688,3,125],[147170.688,0,125],[147420.688,2,125]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[147670.688,3,500],[148670.688,2,0],[148795.688,0,0],[148920.688,2,0],[149295.688,3,0],[149420.688,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[149670.688,3,0],[149795.688,2,0],[149920.688,3,0],[150170.688,0,0],[150295.688,2,0],[150420.688,0,0],[150670.688,2,0],[150795.688,3,0],[150920.688,2,0],[151045.688,0,0],[151170.688,2,0],[151295.688,3,0],[151420.688,1,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[151920.688,3,250],[152420.688,0,250],[152920.688,0,0],[152920.688,3,0],[153170.688,0,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[153670.688,3,0],[153795.688,2,0],[153920.688,3,0],[154170.688,0,0],[154295.688,2,0],[154420.688,0,0],[154670.688,2,0],[154795.688,3,0],[154920.688,2,0],[155045.688,0,0],[155170.688,2,0],[155295.688,3,0],[155420.688,1,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[155920.688,3,250],[156420.688,0,250],[156920.688,0,0],[156920.688,3,0],[157170.688,0,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[157670.688,2,875],[158670.688,1,875]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[159670.688,3,0],[159795.688,1,0],[159920.688,0,0],[160045.688,1,0],[160170.688,3,0],[160295.688,1,0],[160420.688,0,0],[160545.688,1,0],[160670.688,3,0],[160920.688,3,0],[161170.688,3,0],[161420.688,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[161670.688,2,875],[162670.688,1,875]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[163670.688,3,0],[163795.688,1,0],[163920.688,0,0],[164045.688,1,0],[164170.688,3,0],[164295.688,1,0],[164420.688,0,0],[164545.688,1,0],[164670.688,3,0],[164920.688,3,0],[165170.688,3,0],[165420.688,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[165920.688,1,125],[166170.688,0,125],[166420.688,2,125],[166670.688,1,125],[166920.688,0,125],[167170.688,3,125],[167420.688,2,125]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[167670.688,3,125],[167920.688,1,500]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[169920.688,1,125],[170170.688,0,125],[170420.688,2,125],[170670.688,1,125],[170920.688,0,125],[171170.688,3,125],[171420.688,2,125]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[171670.688,3,125],[171920.688,1,500]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":95,"changeBPM":false,"mustHitSection":true}],"player2":"monster","song":"Monster","stage":"halloween","needsVoices":true,"validScore":true,"bpm":95,"speed":1.6}}
\ No newline at end of file
diff --git a/assets/preload/data/monster/monster.json b/assets/preload/data/monster/monster.json
deleted file mode 100644
index 40981f21b7..0000000000
--- a/assets/preload/data/monster/monster.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[2526.31567,2,789.473633],[3473.684,3,157.89473],[3789.47363,2,789.473633],[4736.842,3,157.89473]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5052.63135,1,1105.26306]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[7578.94727,4,1105.26306],[7578.94727,2,789.473633],[8526.315,3,157.89473],[8842.10449,6,1105.26306],[8842.10449,2,789.473633],[9789.474,3,157.89473]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[10105.2627,5,1105.26306],[10105.2627,1,1105.26306]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[13263.1572,2,0],[13578.9463,1,0],[13894.7363,3,315.789459],[14526.3154,1,157.89473],[14842.1045,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15157.8945,3,0],[15473.6836,0,0],[15789.4727,3,0],[16105.2627,1,0],[16421.0527,2,473.6842],[17052.63,0,473.6842]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[18315.79,2,0],[18631.5781,1,0],[18947.3672,3,315.789459],[19578.9473,1,157.89473],[19894.7363,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[20210.5254,3,0],[20526.3145,0,0],[20842.1035,3,0],[21157.8945,1,0],[21473.6836,2,473.6842],[22105.2617,0,473.6842]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[23368.42,3,0],[23684.209,2,0],[23999.998,0,473.6842],[24631.5781,2,157.89473],[24947.3672,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[25263.1563,0,473.6842],[25894.7363,2,473.6842],[26526.3145,3,1105.26306]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[28421.05,3,0],[28736.84,2,0],[29052.63,0,473.6842],[29684.209,2,157.89473],[29999.998,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30315.79,0,473.6842],[30947.3672,2,473.6842],[31578.9453,3,1105.26306]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32842.1055,2,631.5789],[33789.4727,0,0],[34105.26,2,157.89473],[34421.05,1,157.89473],[34736.84,2,157.89473],[35052.63,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[35368.418,3,0],[35683.38,0,118.110237],[35998.34,2,0],[36313.3,3,590.5512]],"lengthInSteps":16,"changeBPM":true,"mustHitSection":false,"bpm":127},{"sectionNotes":[[37258.1836,2,631.5789],[38205.55,0,0],[38521.34,2,157.89473],[38837.1328,1,157.89473],[39152.92,2,157.89473],[39468.71,0,0]],"lengthInSteps":16,"changeBPM":true,"mustHitSection":true,"bpm":95},{"sectionNotes":[[39784.5,3,0],[40099.46,0,118.110237],[40414.42,2,0],[40729.3828,3,590.5512]],"lengthInSteps":16,"changeBPM":true,"mustHitSection":true,"bpm":127},{"sectionNotes":[],"lengthInSteps":16,"changeBPM":true,"mustHitSection":true,"bpm":100},{"sectionNotes":[[44359.98,3,0],[44502.8359,0,0],[44931.41,1,0],[45217.12,2,0],[45502.8359,3,0],[45788.55,0,0],[46074.2656,3,0]],"lengthInSteps":16,"changeBPM":true,"mustHitSection":false,"bpm":105},{"sectionNotes":[[46359.98,0,428.571442],[46931.41,1,857.1429]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48931.41,3,0],[49074.2656,0,0],[49502.8359,1,0],[49788.55,2,0],[50074.2656,3,0],[50359.98,0,0],[50645.6953,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[50931.41,0,428.571442],[51502.8359,1,857.1429]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[53502.8359,2,148.809525],[53788.55,3,148.809525],[54074.2656,0,148.809525],[54359.98,3,148.809525],[54645.6953,3,0],[54931.41,1,0],[55217.125,0,148.809525]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[55502.8359,2,857.1429],[56645.6953,3,0],[56788.55,2,0],[56931.41,3,0],[57359.98,1,0],[57502.8359,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[58074.2656,2,148.809525],[58359.98,3,148.809525],[58645.6953,0,148.809525],[58931.41,3,148.809525],[59217.125,3,0],[59502.8359,1,0],[59788.55,0,148.809525]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[60074.2656,2,857.1429],[61217.125,3,0],[61359.98,2,0],[61502.8359,3,0],[61931.41,1,0],[62074.2656,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[62359.98,3,0],[62502.8359,2,0],[62645.6953,3,0],[62931.41,1,0],[63074.2656,0,0],[63217.125,1,0],[63502.8359,2,0],[63645.6953,1,0],[63788.55,0,0],[64074.2656,0,0],[64217.125,1,0],[64359.98,2,285.7143]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[64931.41,3,285.7143],[65502.8359,2,285.7143],[66074.2656,3,0],[66359.9844,2,285.7143]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[66931.41,3,0],[67074.2656,2,0],[67217.125,3,0],[67502.8359,1,0],[67645.6953,0,0],[67788.5547,1,0],[68074.2656,2,0],[68217.125,1,0],[68359.9844,0,0],[68645.6953,0,0],[68788.5547,1,0],[68931.41,2,285.7143]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[69502.8359,3,285.7143],[70074.2656,2,285.7143],[70645.6953,3,0],[70931.41,2,285.7143]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[71502.8359,2,1000],[72645.6953,1,1000]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[73788.5547,3,0],[73931.41,1,0],[74074.2656,0,0],[74217.125,1,0],[74359.9844,3,0],[74502.8359,1,0],[74645.6953,0,0],[74788.5547,1,0],[74931.41,2,0],[75217.125,2,0],[75502.8359,2,0],[75788.5547,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[76074.2656,2,1000],[77217.125,1,1000]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78359.9844,3,0],[78502.8359,1,0],[78645.6953,0,0],[78788.5547,1,0],[78931.41,3,0],[79074.2656,1,0],[79217.125,0,0],[79359.9844,1,0],[79502.8359,2,0],[79788.5547,2,0],[80074.2656,2,0],[80359.9844,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"changeBPM":true,"mustHitSection":true,"bpm":216},{"sectionNotes":[[82072.59,3,473.6842],[82704.17,0,473.6842],[83335.75,1,0],[83651.54,2,473.6842]],"lengthInSteps":16,"changeBPM":true,"mustHitSection":false,"bpm":95},{"sectionNotes":[[84283.12,3,473.6842],[84914.7,0,473.6842],[85546.28,1,0],[85862.07,2,473.6842],[86493.65,7,157.89473]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[86809.44,1,157.89473],[87125.23,2,157.89473],[87441.0156,0,157.89473],[87756.8047,3,157.89473],[88072.59,1,473.6842],[88704.17,7,157.89473],[89019.96,5,157.89473]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[89335.75,6,157.89473],[89651.54,4,157.89473],[89967.33,7,157.89473],[90283.12,5,473.6842],[90598.91,2,157.89473],[90914.6953,0,0],[91072.59,1,0],[91230.49,3,157.89473],[91546.28,2,315.789459]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[92177.86,2,157.89473],[92493.65,0,0],[92651.54,1,0],[92809.44,3,157.89473],[93125.23,2,315.789459],[94072.59,6,157.89473]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[94546.28,7,0],[94704.17,5,157.89473],[95019.96,5,0],[95651.54,2,157.89473],[96125.23,3,0],[96283.12,1,157.89473],[96598.91,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[97230.4844,2,0],[97388.38,0,0],[97546.28,2,157.89473],[97862.07,3,473.6842],[98493.65,1,157.89473],[98809.44,3,315.789459]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[99441.0156,2,0],[99598.91,0,0],[99756.8047,2,157.89473],[100072.594,3,473.6842],[100704.172,1,157.89473],[101019.961,3,315.789459],[101335.75,4,473.6842]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[101967.328,1,0],[102125.227,3,0],[102283.117,0,0],[102598.906,2,0],[102914.695,0,0],[103230.484,0,0],[103546.281,4,473.6842],[104177.859,5,0],[104335.75,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[104493.648,4,0],[104809.438,6,0],[105125.227,4,0],[105441.016,4,0],[105756.805,3,473.6842],[106388.383,1,473.6842]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[107019.961,0,0],[107335.75,3,157.89473],[107651.539,0,157.89473],[107967.328,3,0],[108283.117,1,473.6842],[108914.695,7,473.6842]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[109546.273,1,473.6842],[110177.859,0,0],[110493.648,3,157.89473],[110809.438,0,157.89473],[111125.227,3,0],[111441.016,1,473.6842]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[117352.5,2,0],[117579.773,2,0],[117807.047,2,0],[118034.32,2,0],[118261.594,0,0],[118488.859,0,113.636368],[118716.133,1,454.545471]],"lengthInSteps":16,"changeBPM":true,"mustHitSection":false,"bpm":132},{"sectionNotes":[[120534.32,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[120761.594,3,795.4545],[121670.68,3,340.9091],[122125.227,0,0],[122352.5,2,340.9091]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[122807.047,1,681.8182]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[124625.227,2,0],[124852.5,2,0],[125079.773,2,0],[125307.047,2,0],[125534.32,0,0],[125761.594,0,113.636368],[125988.859,1,454.545471]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[127807.047,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[128034.32,3,795.4545],[128943.406,3,340.9091],[129397.953,0,0],[129625.227,2,340.9091]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[130079.773,1,681.8182]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"changeBPM":true,"mustHitSection":true,"bpm":120},{"sectionNotes":[[133920.688,2,0],[134045.688,0,250],[134420.688,1,0],[134670.688,2,0],[134920.688,3,0],[135170.688,0,0],[135420.688,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[135670.688,0,375],[136170.688,3,750]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[137920.688,2,0],[138045.688,0,250],[138420.688,1,0],[138670.688,2,0],[138920.688,3,0],[139170.688,0,0],[139420.688,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[139670.688,0,375],[140170.688,3,750]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[141920.688,3,125],[142170.688,1,125],[142420.688,0,125],[142670.688,2,125],[142920.688,3,125],[143170.688,0,125],[143420.688,2,125]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[143670.688,3,500],[144670.688,2,0],[144795.688,0,0],[144920.688,2,0],[145295.688,2,0],[145420.688,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[145920.688,3,125],[146170.688,1,125],[146420.688,0,125],[146670.688,2,125],[146920.688,3,125],[147170.688,0,125],[147420.688,2,125]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[147670.688,3,500],[148670.688,2,0],[148795.688,0,0],[148920.688,2,0],[149295.688,2,0],[149420.688,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[149670.688,3,0],[149795.688,2,0],[149920.688,3,0],[150170.688,1,0],[150295.688,0,0],[150420.688,1,0],[150670.688,2,0],[150795.688,1,0],[150920.688,0,0],[151170.688,0,0],[151295.688,1,0],[151420.688,2,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[151920.688,3,250],[152420.688,0,250],[152920.688,3,0],[153170.688,0,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[153670.688,3,0],[153795.688,2,0],[153920.688,3,0],[154170.688,1,0],[154295.688,0,0],[154420.688,1,0],[154670.688,2,0],[154795.688,1,0],[154920.688,0,0],[155170.688,0,0],[155295.688,1,0],[155420.688,2,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[155920.688,3,250],[156420.688,0,250],[156920.688,3,0],[157170.688,0,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[157670.688,2,875],[158670.688,1,875]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[159670.688,3,0],[159795.688,1,0],[159920.688,0,0],[160045.688,1,0],[160170.688,3,0],[160295.688,1,0],[160420.688,0,0],[160545.688,1,0],[160670.688,3,0],[160920.688,3,0],[161170.688,3,0],[161420.688,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[161670.688,2,875],[162670.688,1,875]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[163670.688,3,0],[163795.688,1,0],[163920.688,0,0],[164045.688,1,0],[164170.688,3,0],[164295.688,1,0],[164420.688,0,0],[164545.688,1,0],[164670.688,3,0],[164920.688,3,0],[165170.688,3,0],[165420.688,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[165920.688,1,0],[166170.688,0,0],[166420.688,2,0],[166670.688,1,0],[166920.688,0,0],[167170.688,3,0],[167420.688,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[167670.688,3,0],[167920.688,1,500]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[169920.688,1,0],[170170.688,0,0],[170420.688,2,0],[170670.688,1,0],[170920.688,0,0],[171170.688,3,0],[171420.688,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[171670.688,3,0],[171920.688,1,500]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":95,"changeBPM":false,"mustHitSection":true}],"player2":"monster","song":"Monster","stage":"halloween","needsVoices":true,"validScore":true,"bpm":95,"speed":1.3}}
\ No newline at end of file
diff --git a/assets/preload/data/offsettest/offsettest.json b/assets/preload/data/offsettest/offsettest.json
deleted file mode 100644
index 52325bb523..0000000000
--- a/assets/preload/data/offsettest/offsettest.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"song":"offsetTest","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":[[9600,0,0],[10800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[12000,0,0],[13200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[14400,0,0],[15600,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[16800,0,0],[18000,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[19200,2,0],[20400,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[21600,2,0],[22800,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[24000,2,0],[25200,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[26400,2,0],[27600,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[28800,0,0],[30000,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[31200,1,0],[32400,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[33600,0,0],[34800,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[36000,1,0],[37200,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[38400,1,0],[39000,1,0],[39600,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[40800,1,0],[41400,1,0],[42000,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[43200,1,0],[43800,1,0],[44400,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[45600,1,0],[46200,1,0],[46800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[48000,1,0],[48300,2,0],[48600,3,0],[48900,2,0],[49800,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[50400,1,0],[50700,2,0],[51000,3,0],[51300,2,0],[52200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[52800,3,0],[53400,1,0],[54000,0,0],[54600,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[55200,2,0],[55800,3,0],[56400,0,0],[57000,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[57600,1,750]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]}],"bpm":100,"sections":0,"needsVoices":false,"player1":"bf","player2":"gf","sectionLengths":[],"speed":1},"bpm":100,"sections":27,"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":[[9600,0,0],[10800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[12000,0,0],[13200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[14400,0,0],[15600,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[16800,0,0],[18000,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[19200,2,0],[20400,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[21600,2,0],[22800,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[24000,2,0],[25200,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[26400,2,0],[27600,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[28800,0,0],[30000,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[31200,1,0],[32400,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[33600,0,0],[34800,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[36000,1,0],[37200,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[38400,1,0],[39000,1,0],[39600,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[40800,1,0],[41400,1,0],[42000,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[43200,1,0],[43800,1,0],[44400,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[45600,1,0],[46200,1,0],[46800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[48000,1,0],[48300,2,0],[48600,3,0],[48900,2,0],[49800,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[50400,1,0],[50700,2,0],[51000,3,0],[51300,2,0],[52200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[52800,3,0],[53400,1,0],[54000,0,0],[54600,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[55200,2,0],[55800,3,0],[56400,0,0],[57000,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[57600,1,750]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]}]}
\ No newline at end of file
diff --git a/assets/preload/data/philly/0.offset b/assets/preload/data/philly/0.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/philly/0.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/philly/philly-easy.json b/assets/preload/data/philly/philly-easy.json
deleted file mode 100644
index 6ad3bbb86c..0000000000
--- a/assets/preload/data/philly/philly-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[2914.28564,2,0],[3428.57129,1,257.142853],[3771.42847,3,171.428574]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[4285.71436,2,0],[4800,1,257.142853],[5142.857,3,171.428574]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5657.14258,2,0],[6171.42871,1,257.142853],[6514.28564,3,171.428574]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[6857.14258,0,0],[7200,2,0],[7542.857,2,0],[7885.71436,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[8400,2,0],[8914.285,1,257.142853],[9257.143,3,171.428574]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[9771.429,2,0],[10285.7139,1,257.142853],[10628.5713,3,171.428574]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11142.8574,2,0],[11657.1426,1,257.142853],[12000,3,171.428574]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[12342.8574,0,0],[12685.7139,2,0],[13028.5713,2,0],[13371.4287,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[14057.1426,2,0],[14400,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15428.5713,3,0],[15771.4287,2,0],[16285.7139,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[16800,3,0],[17142.8574,0,0],[17485.7148,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[17828.57,3,0],[18171.4277,1,0],[18514.2852,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[19542.8574,2,0],[19885.7148,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[20914.2852,3,0],[21257.1426,2,0],[21771.4277,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[22285.7148,3,0],[22628.57,0,0],[22971.4277,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[23314.2852,3,0],[23657.1426,1,0],[24000,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[24685.7148,2,0],[25371.4277,0,0],[25714.2852,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26400,3,0],[26742.8574,2,0],[27257.1426,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[27771.4277,3,0],[28114.2852,0,0],[28457.1426,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[28800,3,0],[29142.8574,1,0],[29485.7148,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[30171.4277,2,0],[30857.1426,0,0],[31200,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[31885.7148,3,0],[32228.57,2,0],[32742.8574,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33257.14,3,0],[33600,0,0],[33942.8555,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[34285.7148,3,0],[34628.57,1,0],[34971.43,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[35657.14,2,0],[36342.8555,2,0],[36685.7148,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[37028.57,2,0],[37714.2852,2,0],[38057.14,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[38400,2,0],[39085.7148,2,0],[39428.57,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[39771.43,2,0],[40457.14,2,0],[40800,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[41142.8555,2,0],[41828.57,2,0],[42171.43,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[42514.2852,2,0],[43200,2,0],[43542.8555,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[43885.7148,2,0],[44571.43,2,0],[44914.2852,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[45257.14,2,0],[45942.8555,2,0],[46285.7148,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[46628.57,2,0],[47314.2852,2,0],[47657.14,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48000,2,0],[48685.7148,2,0],[49028.57,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49371.43,2,0],[50057.14,2,0],[50400,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[50742.8555,3,0],[51428.57,2,0],[51771.43,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[52114.2852,2,0],[52800,2,0],[53142.8555,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[53485.7148,2,0],[54171.43,2,0],[54514.2852,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[54857.14,2,0],[55542.8555,2,0],[55885.7148,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56228.57,3,0],[56914.2852,2,0],[57257.14,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[57600,3,0],[58285.7148,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[58971.43,2,0],[59314.2852,3,0],[59657.14,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[60342.8555,3,0],[61028.57,2,0],[61542.8555,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61714.2852,2,0],[62057.14,0,0],[62400,2,0],[62742.8555,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[63085.7148,3,0],[63771.43,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[64457.14,2,0],[64800,3,0],[65142.8555,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65828.57,3,0],[66514.28,2,0],[67028.57,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[67200,2,0],[67542.86,0,0],[67885.71,2,0],[68228.57,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[68571.43,2,0],[69257.14,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[69942.86,0,0],[70628.57,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[71314.28,3,0],[72000,2,0],[72342.86,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72685.71,3,0],[73371.43,2,0],[73714.28,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[74057.14,2,0],[74742.86,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[75428.57,0,0],[76114.28,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[76800,3,0],[77485.71,2,0],[77828.57,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78171.43,3,0],[78857.14,2,0],[79200,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[79542.86,2,0],[80228.57,2,0],[80571.43,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[80914.28,2,0],[81600,2,0],[81942.86,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[82285.71,2,0],[82971.43,2,0],[83314.28,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[83657.14,3,0],[84342.86,2,0],[84685.71,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[85028.57,2,0],[85714.28,2,0],[86057.14,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[86400,2,0],[87085.71,2,0],[87428.57,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[87771.43,2,0],[88457.14,2,0],[88800,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[89142.86,3,0],[89828.57,2,0],[90171.43,0,0],[90342.86,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[90514.28,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":175,"changeBPM":false,"mustHitSection":true}],"player2":"pico","song":"Philly Nice","stage":"philly","needsVoices":true,"validScore":true,"bpm":175,"speed":1}}
\ No newline at end of file
diff --git a/assets/preload/data/philly/philly-hard.json b/assets/preload/data/philly/philly-hard.json
deleted file mode 100644
index 5dcf8f20db..0000000000
--- a/assets/preload/data/philly/philly-hard.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[2914.28564,2,0],[3085.71436,0,0],[3428.57129,1,257.142853],[3771.42847,3,171.428574]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[4285.71436,2,0],[4457.14258,0,0],[4800,1,257.142853],[5142.857,3,171.428574]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5657.14258,2,0],[5828.57129,0,0],[6171.42871,1,257.142853],[6514.28564,3,171.428574]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[6857.14258,0,0],[7028.57129,3,0],[7200,2,0],[7542.857,2,0],[7885.71436,0,0],[8057.14258,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[8400,2,0],[8571.429,0,0],[8914.285,1,257.142853],[9257.143,3,171.428574]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[9771.429,2,0],[9942.857,0,0],[10285.7139,1,257.142853],[10628.5713,3,171.428574]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11142.8574,2,0],[11314.2852,0,0],[11657.1426,1,257.142853],[12000,3,171.428574]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[12342.8574,0,0],[12514.2852,3,0],[12685.7139,2,0],[13028.5713,2,0],[13371.4287,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[13885.7139,2,0],[14057.1426,0,0],[14400,0,0],[14742.8574,3,0],[14914.2852,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15257.1426,3,0],[15428.5713,0,0],[15771.4287,2,0],[16114.2852,0,0],[16285.7139,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[16628.57,0,0],[16800,1,0],[16971.4277,3,0],[17142.8574,1,0],[17314.2852,0,0],[17485.7148,1,0],[17657.1426,3,0],[17742.8574,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[17828.57,3,0],[18000,3,0],[18171.4277,1,0],[18514.2852,2,0],[18857.1426,2,0],[19028.57,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[19371.4277,2,0],[19542.8574,0,0],[19885.7148,0,0],[20228.57,3,0],[20400,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[20742.8574,3,0],[20914.2852,0,0],[21257.1426,2,0],[21600,0,0],[21771.4277,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[22114.2852,0,0],[22285.7148,1,0],[22457.1426,3,0],[22628.57,1,0],[22800,0,0],[22971.4277,1,0],[23142.8574,3,0],[23228.57,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[23314.2852,3,0],[23485.7148,3,0],[23657.1426,1,0],[24000,2,0],[24342.8574,2,0],[24514.2852,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[24685.7148,2,0],[24857.1426,2,0],[25028.57,0,0],[25371.4277,0,0],[25714.2852,3,0],[25885.7148,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26228.57,3,0],[26400,0,0],[26742.8574,2,0],[27085.7148,0,0],[27257.1426,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[27600,0,0],[27771.4277,1,0],[27942.8574,3,0],[28114.2852,1,0],[28285.7148,0,0],[28457.1426,1,0],[28628.57,3,0],[28714.2852,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[28800,3,0],[28971.4277,3,0],[29142.8574,1,0],[29485.7148,2,0],[29828.57,2,0],[30000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[30171.4277,2,0],[30342.8574,2,0],[30514.2852,0,0],[30857.1426,0,0],[31200,3,0],[31371.4277,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[31714.2852,3,0],[31885.7148,0,0],[32228.57,2,0],[32571.4277,0,0],[32742.8574,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33085.7148,0,0],[33257.14,1,0],[33428.57,3,0],[33600,1,0],[33771.43,0,0],[33942.8555,1,0],[34114.2852,3,0],[34200,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[34285.7148,3,0],[34457.14,3,0],[34628.57,1,0],[34971.43,2,0],[35314.2852,2,0],[35485.7148,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[35657.14,2,0],[35828.57,3,0],[36000,1,0],[36171.43,0,0],[36342.8555,2,0],[36514.2852,3,0],[36685.7148,0,0],[36857.14,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[37028.57,2,0],[37200,3,0],[37371.43,2,0],[37542.8555,0,0],[37714.2852,2,0],[37885.7148,3,0],[38057.14,0,0],[38228.57,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[38400,2,0],[38571.43,3,0],[38742.8555,1,0],[38914.2852,0,0],[39085.7148,2,0],[39257.14,3,0],[39428.57,0,0],[39600,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[39771.43,2,0],[39942.8555,3,0],[40114.2852,2,0],[40285.7148,0,0],[40457.14,2,0],[40628.57,3,0],[40800,0,0],[40971.43,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[41142.8555,2,0],[41314.2852,3,0],[41485.7148,1,0],[41657.14,0,0],[41828.57,2,0],[42000,3,0],[42171.43,0,0],[42342.8555,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[42514.2852,2,0],[42685.7148,3,0],[42857.14,2,0],[43028.57,0,0],[43200,2,0],[43371.43,3,0],[43542.8555,0,0],[43714.2852,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[43885.7148,2,0],[44057.14,3,0],[44228.57,1,0],[44400,0,0],[44571.43,2,0],[44742.8555,3,0],[44914.2852,0,0],[45085.7148,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[45257.14,2,0],[45428.57,3,0],[45600,2,0],[45771.43,0,0],[45942.8555,2,0],[46114.2852,3,0],[46285.7148,0,0],[46457.14,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[46628.57,2,0],[46800,3,0],[46971.43,1,0],[47142.8555,0,0],[47314.2852,2,0],[47485.7148,3,0],[47657.14,0,0],[47828.57,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48000,2,0],[48171.43,3,0],[48342.8555,2,0],[48514.2852,0,0],[48685.7148,2,0],[48857.14,3,0],[49028.57,0,0],[49200,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49371.43,2,0],[49542.8555,3,0],[49714.2852,1,0],[49885.7148,0,0],[50057.14,2,0],[50228.57,3,0],[50400,0,0],[50571.43,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[50742.8555,2,0],[50914.2852,3,0],[51085.7148,2,0],[51257.14,0,0],[51428.57,2,0],[51600,3,0],[51771.43,0,0],[51942.8555,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[52114.2852,2,0],[52285.7148,3,0],[52457.14,1,0],[52628.57,0,0],[52800,2,0],[52971.43,3,0],[53142.8555,0,0],[53314.2852,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[53485.7148,2,0],[53657.14,3,0],[53828.57,2,0],[54000,0,0],[54171.43,2,0],[54342.8555,3,0],[54514.2852,0,0],[54685.7148,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[54857.14,2,0],[55028.57,3,0],[55200,1,0],[55371.43,0,0],[55542.8555,2,0],[55714.2852,3,0],[55885.7148,0,0],[56057.14,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56228.57,2,0],[56400,3,0],[56571.43,2,0],[56742.8555,0,0],[56914.2852,2,0],[57085.7148,3,0],[57257.14,0,0],[57428.57,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[57600,3,0],[57771.43,3,0],[57942.8555,1,0],[58114.2852,1,0],[58285.7148,2,0],[58457.14,2,0],[58800,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[58971.43,2,0],[59142.8555,3,0],[59228.57,0,0],[59314.2852,3,0],[59485.7148,3,0],[59657.14,2,0],[59828.57,0,0],[60000,0,0],[60171.43,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[60342.8555,3,0],[60514.2852,3,0],[60600,0,0],[60685.7148,3,0],[60857.14,1,0],[61028.57,2,0],[61200,2,0],[61371.43,0,0],[61542.8555,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61714.2852,2,0],[61885.7148,3,0],[62057.14,0,0],[62228.57,3,0],[62400,2,0],[62742.8555,1,0],[62914.2852,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[63085.7148,3,0],[63257.14,3,0],[63428.57,1,0],[63600,1,0],[63771.43,2,0],[63942.8555,2,0],[64285.7148,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[64457.14,2,0],[64628.57,3,0],[64714.2852,0,0],[64800,3,0],[64971.43,3,0],[65142.8555,2,0],[65314.2852,0,0],[65485.7148,0,0],[65657.14,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65828.57,3,0],[66000,3,0],[66085.71,0,0],[66171.43,3,0],[66342.86,1,0],[66514.28,2,0],[66685.71,2,0],[66857.14,0,0],[67028.57,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[67200,2,0],[67371.43,3,0],[67542.86,0,0],[67714.28,3,0],[67885.71,2,0],[68228.57,1,0],[68400,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[68571.43,2,0],[68914.28,1,0],[69085.71,3,0],[69257.14,2,0],[69600,1,0],[69771.43,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[69942.86,0,0],[70114.28,3,0],[70285.71,1,0],[70457.14,3,0],[70628.57,2,0],[70971.43,2,0],[71142.86,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[71314.28,3,0],[71485.71,1,0],[71657.14,0,0],[71828.57,3,0],[72000,2,0],[72342.86,0,0],[72514.28,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72685.71,3,0],[72857.14,3,0],[73028.57,2,0],[73200,0,0],[73371.43,2,0],[73542.86,3,0],[73714.28,0,0],[73885.71,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[74057.14,2,0],[74400,1,0],[74571.43,3,0],[74742.86,2,0],[75085.71,1,0],[75257.14,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[75428.57,0,0],[75600,3,0],[75771.43,1,0],[75942.86,3,0],[76114.28,2,0],[76457.14,2,0],[76628.57,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[76800,3,0],[76971.43,1,0],[77142.86,0,0],[77314.28,3,0],[77485.71,2,0],[77828.57,0,0],[78000,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78171.43,3,0],[78342.86,3,0],[78514.28,2,0],[78685.71,0,0],[78857.14,2,0],[79028.57,3,0],[79200,0,0],[79371.43,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[79542.86,2,0],[79714.28,3,0],[79885.71,1,0],[80057.14,0,0],[80228.57,2,0],[80400,3,0],[80571.43,0,0],[80742.86,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[80914.28,2,0],[81085.71,3,0],[81257.14,2,0],[81428.57,0,0],[81600,2,0],[81771.43,3,0],[81942.86,0,0],[82114.28,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[82285.71,2,0],[82457.14,3,0],[82628.57,1,0],[82800,0,0],[82971.43,2,0],[83142.86,3,0],[83314.28,0,0],[83485.71,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[83657.14,2,0],[83828.57,3,0],[84000,2,0],[84171.43,0,0],[84342.86,2,0],[84514.28,3,0],[84685.71,0,0],[84857.14,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[85028.57,2,0],[85200,3,0],[85371.43,1,0],[85542.86,0,0],[85714.28,2,0],[85885.71,3,0],[86057.14,0,0],[86228.57,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[86400,2,0],[86571.43,3,0],[86742.86,2,0],[86914.28,0,0],[87085.71,2,0],[87257.14,3,0],[87428.57,0,0],[87600,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[87771.43,2,0],[87942.86,3,0],[88114.28,1,0],[88285.71,0,0],[88457.14,2,0],[88628.57,3,0],[88800,0,0],[88971.43,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[89142.86,2,0],[89314.28,3,0],[89485.71,2,0],[89657.14,0,0],[89828.57,2,0],[90000,3,0],[90171.43,0,0],[90342.86,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[90514.28,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":175,"changeBPM":false,"mustHitSection":true}],"player2":"pico","song":"Philly Nice","stage":"philly","needsVoices":true,"validScore":true,"bpm":175,"speed":2}}
\ No newline at end of file
diff --git a/assets/preload/data/philly/philly.json b/assets/preload/data/philly/philly.json
deleted file mode 100644
index a201a1ee1c..0000000000
--- a/assets/preload/data/philly/philly.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[2914.28564,2,0],[3428.57129,1,257.142853],[3771.42847,3,171.428574]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[4285.71436,2,0],[4800,1,257.142853],[5142.857,3,171.428574]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5657.14258,2,0],[6171.42871,1,257.142853],[6514.28564,3,171.428574]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[6857.14258,0,0],[7542.857,2,0],[7885.71436,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[8400,2,0],[8914.285,1,257.142853],[9257.143,3,171.428574]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[9771.429,2,0],[10285.7139,1,257.142853],[10628.5713,3,171.428574]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11142.8574,2,0],[11657.1426,1,257.142853],[12000,3,171.428574]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[12342.8574,0,0],[12685.7139,2,0],[13028.5713,2,0],[13371.4287,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[14057.1426,2,0],[14400,0,0],[14742.8574,3,0],[14914.2852,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15428.5713,3,0],[15771.4287,2,0],[16114.2852,0,0],[16285.7139,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[16628.57,0,0],[16800,3,0],[17142.8574,0,0],[17485.7148,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[17828.57,3,0],[18171.4277,1,0],[18514.2852,2,0],[18857.1426,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[19542.8574,2,0],[19885.7148,0,0],[20228.57,3,0],[20400,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[20914.2852,3,0],[21257.1426,2,0],[21600,0,0],[21771.4277,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[22114.2852,0,0],[22285.7148,3,0],[22628.57,0,0],[22971.4277,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[23314.2852,3,0],[23657.1426,1,0],[24000,2,0],[24342.8574,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[24685.7148,2,0],[24857.1426,2,0],[25028.57,2,0],[25371.4277,0,0],[25714.2852,3,0],[25885.7148,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26400,3,0],[26742.8574,2,0],[27085.7148,0,0],[27257.1426,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[27600,0,0],[27771.4277,3,0],[27942.8574,3,0],[28114.2852,0,0],[28285.7148,0,0],[28457.1426,3,0],[28628.57,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[28800,3,0],[29142.8574,1,0],[29485.7148,2,0],[29828.57,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[30171.4277,2,0],[30342.8574,2,0],[30514.2852,2,0],[30857.1426,0,0],[31200,3,0],[31371.4277,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[31885.7148,3,0],[32228.57,2,0],[32571.4277,0,0],[32742.8574,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33085.7148,0,0],[33257.14,3,0],[33428.57,3,0],[33600,0,0],[33771.43,0,0],[33942.8555,3,0],[34114.2852,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[34285.7148,3,0],[34628.57,1,0],[34971.43,2,0],[35314.2852,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[35657.14,2,0],[36342.8555,2,0],[36514.2852,3,0],[36685.7148,0,0],[36857.14,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[37028.57,2,0],[37714.2852,2,0],[37885.7148,3,0],[38057.14,0,0],[38228.57,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[38400,2,0],[39085.7148,2,0],[39257.14,3,0],[39428.57,0,0],[39600,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[39771.43,2,0],[40457.14,2,0],[40628.57,3,0],[40800,0,0],[40971.43,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[41142.8555,2,0],[41828.57,2,0],[42000,3,0],[42171.43,0,0],[42342.8555,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[42514.2852,2,0],[43200,2,0],[43371.43,3,0],[43542.8555,0,0],[43714.2852,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[43885.7148,2,0],[44571.43,2,0],[44742.8555,3,0],[44914.2852,0,0],[45085.7148,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[45257.14,2,0],[45942.8555,2,0],[46114.2852,3,0],[46285.7148,0,0],[46457.14,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[46628.57,2,0],[46971.43,1,0],[47314.2852,2,0],[47485.7148,3,0],[47657.14,0,0],[47828.57,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48000,2,0],[48342.8555,2,0],[48685.7148,2,0],[48857.14,3,0],[49028.57,0,0],[49200,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49371.43,2,0],[49714.2852,1,0],[50057.14,2,0],[50228.57,3,0],[50400,0,0],[50571.43,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[50742.8555,2,0],[51085.7148,2,0],[51428.57,2,0],[51600,3,0],[51771.43,0,0],[51942.8555,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[52114.2852,2,0],[52457.14,1,0],[52800,2,0],[52971.43,3,0],[53142.8555,0,0],[53314.2852,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[53485.7148,2,0],[53828.57,2,0],[54171.43,2,0],[54342.8555,3,0],[54514.2852,0,0],[54685.7148,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[54857.14,2,0],[55200,1,0],[55542.8555,2,0],[55714.2852,3,0],[55885.7148,0,0],[56057.14,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56228.57,2,0],[56571.43,2,0],[56914.2852,2,0],[57085.7148,3,0],[57257.14,0,0],[57428.57,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[57600,3,0],[57942.8555,1,0],[58285.7148,2,0],[58800,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[58971.43,2,0],[59314.2852,3,0],[59657.14,2,0],[60171.43,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[60342.8555,3,0],[60685.7148,1,0],[61028.57,2,0],[61542.8555,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61714.2852,2,0],[62057.14,0,0],[62400,2,0],[62742.8555,0,0],[62914.2852,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[63085.7148,3,0],[63428.57,1,0],[63771.43,2,0],[64285.7148,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[64457.14,2,0],[64800,3,0],[65142.8555,2,0],[65657.14,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65828.57,3,0],[66171.43,1,0],[66514.28,2,0],[67028.57,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[67200,2,0],[67542.86,0,0],[67885.71,2,0],[68228.57,0,0],[68400,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[68571.43,2,0],[68914.28,1,0],[69257.14,2,0],[69600,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[69942.86,0,0],[70285.71,1,0],[70628.57,2,0],[70971.43,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[71314.28,3,0],[71657.14,0,0],[72000,2,0],[72342.86,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72685.71,3,0],[73028.57,2,0],[73371.43,2,0],[73542.86,3,0],[73714.28,0,0],[73885.71,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[74057.14,2,0],[74400,1,0],[74742.86,2,0],[75085.71,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[75428.57,0,0],[75771.43,1,0],[76114.28,2,0],[76457.14,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[76800,3,0],[77142.86,0,0],[77485.71,2,0],[77828.57,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78171.43,3,0],[78514.28,2,0],[78857.14,2,0],[79028.57,3,0],[79200,0,0],[79371.43,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[79542.86,2,0],[79885.71,1,0],[80228.57,2,0],[80400,3,0],[80571.43,0,0],[80742.86,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[80914.28,2,0],[81257.14,2,0],[81600,2,0],[81771.43,3,0],[81942.86,0,0],[82114.28,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[82285.71,2,0],[82628.57,1,0],[82971.43,2,0],[83142.86,3,0],[83314.28,0,0],[83485.71,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[83657.14,2,0],[84000,2,0],[84342.86,2,0],[84514.28,3,0],[84685.71,0,0],[84857.14,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[85028.57,2,0],[85371.43,1,0],[85714.28,2,0],[85885.71,3,0],[86057.14,0,0],[86228.57,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[86400,2,0],[86742.86,2,0],[87085.71,2,0],[87257.14,3,0],[87428.57,0,0],[87600,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[87771.43,2,0],[88114.28,1,0],[88457.14,2,0],[88628.57,3,0],[88800,0,0],[88971.43,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[89142.86,2,0],[89485.71,2,0],[89828.57,2,0],[90000,3,0],[90171.43,0,0],[90342.86,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[90514.28,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":175,"changeBPM":false,"mustHitSection":true}],"player2":"pico","song":"Philly Nice","stage":"philly","needsVoices":true,"validScore":true,"bpm":175,"speed":1.3}}
\ No newline at end of file
diff --git a/assets/preload/data/pico/0.offset b/assets/preload/data/pico/0.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/pico/0.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/pico/pico-easy.json b/assets/preload/data/pico/pico-easy.json
deleted file mode 100644
index 96c4f88e0b..0000000000
--- a/assets/preload/data/pico/pico-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[3799.99976,2,0],[4600,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5000,0,0],[5400,2,0],[6200,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[6999.99951,2,0],[7799.99951,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[8200,0,0],[8600,2,0],[9400,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[10200,2,0],[11000,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11400,0,0],[11800,2,0],[12600,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[13399.999,2,0],[14199.999,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[14599.999,0,0],[14999.999,2,0],[15799.999,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[16199.999,2,0],[16800,3,0],[17200,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[17800,3,0],[18400,2,0],[18800,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[19400,3,0],[20000,2,0],[20400,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[21000,2,0],[21600,3,0],[22000,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[22600,2,0],[23200,3,0],[23600,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[24200,3,0],[24800,2,0],[25200,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[25799.998,3,0],[26399.998,2,0],[26799.998,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[27399.998,2,0],[27999.998,3,0],[28399.998,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[28999.998,0,0],[29599.998,2,0],[29999.998,1,0],[30199.998,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[30399.998,2,0],[30599.998,3,0],[30799.998,3,0],[31199.998,0,300],[31599.998,1,200]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[32199.998,3,0],[32800,3,0],[33200,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[33600,0,0],[34000,3,0],[34400,2,300],[34800,1,300]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[35400,0,0],[36000,2,0],[36400,1,0],[36600,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[36800,2,0],[37000,3,0],[37200,3,0],[37600,0,300],[38000,1,200]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[38600,3,0],[39200,3,0],[39600,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[40000,0,0],[40400,3,0],[40800,2,300],[41200,1,300]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[41800,2,0],[42400,3,0],[42800,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[43400,2,0],[44000,3,0],[44400,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[45000,3,0],[45600,2,0],[46000,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[46600,2,0],[47200,3,0],[47600,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48200,2,0],[48800,3,0],[49200,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[49800,2,0],[50400,3,0],[50800,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[51399.9961,3,0],[51999.9961,2,0],[52399.9961,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[52999.9961,2,0],[53599.9961,3,0],[53999.9961,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[54399.9961,6,200],[54599.9961,2,0],[54999.9961,7,0],[55199.9961,3,0],[55199.9961,5,0],[55599.9961,1,0],[55599.9961,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[55999.9961,0,0],[56199.9961,4,0],[56499.9961,0,0],[56799.9961,7,0],[56799.9961,1,200],[57199.9961,6,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[57599.9961,6,200],[57799.9961,3,0],[58399.9961,2,0],[58399.9961,5,0],[58799.9961,1,0],[58799.9961,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[59199.9961,4,0],[59399.9961,0,0],[59699.9961,4,0],[59999.9961,3,0],[60099.9961,6,0],[60399.9961,2,0],[60499.9961,4,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[60999.9961,2,0],[61599.9961,3,0],[61999.9961,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[62599.9961,0,0],[63199.9961,3,0],[63599.9961,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[64199.9961,3,0],[64799.9961,2,0],[65199.9961,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65800,0,0],[66400,3,0],[66800,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[67400,0,0],[68000,2,0],[68400,1,0],[68600,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[68800,2,0],[69000,3,0],[69200,3,0],[69600,0,300],[70000,1,200]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[70600,3,0],[71200,3,0],[71600,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72000,0,0],[72400,3,0],[72800,2,300],[73200,1,300]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[73800,0,0],[74400,2,0],[74800,1,0],[75000,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[75200,2,0],[75400,3,0],[75600,3,0],[76000,0,300],[76400,1,200]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[77000,3,0],[77600,3,0],[78000,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78400,0,0],[78800,3,0],[79200,2,300],[79600,1,300]],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":150,"changeBPM":false,"mustHitSection":true}],"player2":"pico","song":"Pico","stage":"philly","needsVoices":true,"validScore":true,"bpm":150,"speed":1.2}}
\ No newline at end of file
diff --git a/assets/preload/data/pico/pico-hard.json b/assets/preload/data/pico/pico-hard.json
deleted file mode 100644
index c3edd31c49..0000000000
--- a/assets/preload/data/pico/pico-hard.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[3799.99976,2,0],[3999.99976,3,0],[4200,2,0],[4600,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5000,0,0],[5400,2,0],[5600,3,0],[5800,2,0],[6200,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[6999.99951,2,0],[7199.99951,3,0],[7399.99951,2,0],[7799.99951,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[8200,0,0],[8600,2,0],[8800,3,0],[9000,2,0],[9400,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[10200,2,0],[10400,3,0],[10600,2,0],[11000,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11400,0,0],[11800,2,0],[12000,3,0],[12200,2,0],[12600,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[13399.999,2,0],[13599.999,3,0],[13799.999,2,0],[14199.999,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[14599.999,0,0],[14999.999,2,0],[15199.999,3,0],[15399.999,2,0],[15799.999,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[16199.999,2,0],[16400,3,0],[16600,0,0],[16800,3,0],[17000,0,0],[17200,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[17800,3,0],[18000,0,0],[18200,2,0],[18400,3,0],[18600,0,0],[18800,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[19400,3,0],[19600,0,0],[19800,3,0],[20000,2,0],[20200,0,0],[20400,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[21000,2,0],[21200,3,0],[21400,0,0],[21600,3,0],[21800,0,0],[22000,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[22600,2,0],[22800,3,0],[23000,0,0],[23200,3,0],[23400,0,0],[23600,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[24200,3,0],[24400,0,0],[24600,2,0],[24800,3,0],[25000,0,0],[25200,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[25799.998,3,0],[25999.998,0,0],[26199.998,3,0],[26399.998,2,0],[26599.998,0,0],[26799.998,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[27399.998,2,0],[27599.998,3,0],[27799.998,0,0],[27999.998,3,0],[28199.998,0,0],[28399.998,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[28999.998,0,0],[29199.998,3,0],[29399.998,2,0],[29599.998,2,0],[29799.998,3,0],[29999.998,1,0],[30199.998,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[30399.998,2,0],[30599.998,3,0],[30699.998,0,0],[30799.998,3,0],[30999.998,2,0],[31199.998,0,300],[31599.998,1,200]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[32199.998,3,0],[32399.998,1,0],[32599.998,2,0],[32800,3,0],[33000,1,0],[33200,2,0],[33400,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[33600,0,0],[33800,0,0],[34000,3,0],[34200,3,0],[34400,2,300],[34800,1,300]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[35400,0,0],[35600,3,0],[35800,2,0],[36000,2,0],[36200,3,0],[36400,1,0],[36600,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[36800,2,0],[37000,3,0],[37100,0,0],[37200,3,0],[37400,2,0],[37600,0,300],[38000,1,200]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[38400,2,0],[38600,3,0],[38800,1,0],[39000,2,0],[39200,3,0],[39400,1,0],[39600,2,0],[39800,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[40000,0,0],[40200,0,0],[40400,3,0],[40600,3,0],[40800,2,300],[41200,1,300]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[41800,2,0],[42000,3,0],[42200,0,0],[42400,3,0],[42600,0,0],[42700,3,0],[42800,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[43400,2,0],[43600,0,0],[43800,3,0],[44000,3,0],[44200,0,0],[44300,3,0],[44400,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[45000,3,0],[45200,0,0],[45400,0,0],[45600,2,0],[45800,0,0],[45900,3,0],[46000,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[46600,2,0],[46800,3,0],[47000,0,0],[47200,3,0],[47400,0,0],[47500,3,0],[47600,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48200,2,0],[48400,3,0],[48600,0,0],[48800,3,0],[49000,0,0],[49100,3,0],[49200,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[49800,2,0],[50000,0,0],[50200,3,0],[50400,3,0],[50600,0,0],[50700,3,0],[50800,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[51399.9961,3,0],[51599.9961,0,0],[51799.9961,0,0],[51999.9961,2,0],[52199.9961,0,0],[52299.9961,3,0],[52399.9961,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[52999.9961,2,0],[53199.9961,3,0],[53399.9961,0,0],[53599.9961,3,0],[53799.9961,0,0],[53899.9961,3,0],[53999.9961,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[54399.9961,6,200],[54599.9961,2,0],[54799.9961,3,0],[54999.9961,0,0],[54999.9961,7,0],[55199.9961,3,0],[55199.9961,5,0],[55399.9961,0,0],[55499.9961,3,0],[55599.9961,1,0],[55599.9961,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[55999.9961,0,0],[56199.9961,6,0],[56199.9961,2,0],[56399.9961,0,0],[56399.9961,4,0],[56599.9961,7,0],[56599.9961,3,0],[56799.9961,7,0],[56799.9961,1,200],[56999.9961,4,0],[57099.9961,7,0],[57199.9961,5,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[57599.9961,6,200],[57799.9961,3,0],[57999.9961,0,0],[58199.9961,0,0],[58199.9961,7,0],[58399.9961,2,0],[58399.9961,5,0],[58599.9961,0,0],[58699.9961,3,0],[58799.9961,1,0],[58799.9961,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[59199.9961,4,0],[59399.9961,2,0],[59399.9961,6,0],[59599.9961,4,0],[59599.9961,3,0],[59799.9961,0,0],[59799.9961,7,0],[59999.9961,6,0],[59999.9961,3,0],[60199.9961,6,0],[60199.9961,0,0],[60299.9961,3,0],[60399.9961,4,0],[60399.9961,1,0],[60599.9961,4,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[60999.9961,2,0],[61199.9961,3,0],[61399.9961,0,0],[61599.9961,3,0],[61799.9961,0,0],[61899.9961,3,0],[61999.9961,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[62599.9961,2,0],[62799.9961,0,0],[62999.9961,3,0],[63199.9961,3,0],[63399.9961,0,0],[63499.9961,3,0],[63599.9961,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[64199.9961,3,0],[64399.9961,0,0],[64599.9961,0,0],[64799.9961,2,0],[64999.9961,0,0],[65099.9961,3,0],[65199.9961,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65800,2,0],[66000,3,0],[66200,0,0],[66400,3,0],[66600,0,0],[66700,3,0],[66800,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[67400,0,0],[67600,3,0],[67800,2,0],[68000,2,0],[68200,3,0],[68400,1,0],[68600,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[68800,2,0],[69000,3,0],[69100,0,0],[69200,3,0],[69400,2,0],[69600,0,300],[70000,1,200]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[70600,3,0],[70800,1,0],[71000,2,0],[71200,3,0],[71400,1,0],[71600,2,0],[71800,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72000,0,0],[72200,0,0],[72400,3,0],[72600,3,0],[72800,2,300],[73200,1,300]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[73800,0,0],[74000,3,0],[74200,2,0],[74400,2,0],[74600,3,0],[74800,1,0],[75000,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[75200,2,0],[75400,3,0],[75500,0,0],[75600,3,0],[75800,2,0],[76000,0,300],[76400,1,200]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[76800,2,0],[77000,3,0],[77200,1,0],[77400,2,0],[77600,3,0],[77800,1,0],[78000,2,0],[78200,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78400,0,0],[78600,0,0],[78800,3,0],[79000,3,0],[79200,2,300],[79600,1,300]],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":150,"changeBPM":false,"mustHitSection":true}],"player2":"pico","song":"Pico","stage":"philly","needsVoices":true,"validScore":true,"bpm":150,"speed":1.6}}
\ No newline at end of file
diff --git a/assets/preload/data/pico/pico.json b/assets/preload/data/pico/pico.json
deleted file mode 100644
index 01500bb878..0000000000
--- a/assets/preload/data/pico/pico.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[3799.99976,2,0],[3999.99976,3,0],[4200,2,0],[4600,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5000,0,0],[5400,2,0],[5600,3,0],[5800,2,0],[6200,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[6999.99951,2,0],[7199.99951,3,0],[7399.99951,2,0],[7799.99951,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[8200,0,0],[8600,2,0],[8800,3,0],[9000,2,0],[9400,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[10200,2,0],[10400,3,0],[10600,2,0],[11000,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11400,0,0],[11800,2,0],[12000,3,0],[12200,2,0],[12600,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[13399.999,2,0],[13599.999,3,0],[13799.999,2,0],[14199.999,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[14599.999,0,0],[14999.999,2,0],[15199.999,3,0],[15399.999,2,0],[15799.999,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[16199.999,2,0],[16800,3,0],[17000,0,0],[17200,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[17800,3,0],[18400,3,0],[18600,0,0],[18800,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[19400,3,0],[20000,2,0],[20200,0,0],[20400,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[21000,2,0],[21600,3,0],[21800,0,0],[22000,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[22600,2,0],[23200,3,0],[23400,0,0],[23600,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[24200,3,0],[24800,3,0],[25000,0,0],[25200,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[25799.998,3,0],[26399.998,2,0],[26599.998,0,0],[26799.998,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[27399.998,2,0],[27999.998,3,0],[28199.998,0,0],[28399.998,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[28999.998,0,0],[29199.998,3,0],[29599.998,2,0],[29999.998,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[30399.998,2,0],[30599.998,3,0],[30699.998,0,0],[30799.998,3,0],[31199.998,0,300],[31599.998,1,200]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[32199.998,3,0],[32399.998,1,0],[32800,3,0],[33000,1,0],[33400,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[33600,0,0],[33800,0,0],[34000,3,0],[34200,3,0],[34400,2,300],[34800,1,300]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[35400,0,0],[35600,3,0],[36000,2,0],[36400,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[36800,2,0],[37000,3,0],[37100,0,0],[37200,3,0],[37600,0,300],[38000,1,200]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[38600,3,0],[38800,1,0],[39200,3,0],[39400,1,0],[39800,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[40000,0,0],[40200,0,0],[40400,3,0],[40600,3,0],[40800,2,300],[41200,1,300]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[41800,2,0],[42400,3,0],[42600,0,0],[42700,3,0],[42800,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[43400,2,0],[44000,3,0],[44200,0,0],[44300,3,0],[44400,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[45000,3,0],[45600,2,0],[45800,0,0],[45900,3,0],[46000,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[46600,2,0],[47200,3,0],[47400,0,0],[47500,3,0],[47600,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48200,2,0],[48800,3,0],[49000,0,0],[49100,3,0],[49200,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[49800,2,0],[50400,3,0],[50600,0,0],[50700,3,0],[50800,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[51399.9961,3,0],[51999.9961,2,0],[52199.9961,0,0],[52299.9961,3,0],[52399.9961,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[52999.9961,2,0],[53599.9961,3,0],[53799.9961,0,0],[53899.9961,3,0],[53999.9961,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[54399.9961,6,200],[54599.9961,2,0],[54999.9961,7,0],[55199.9961,3,0],[55199.9961,5,0],[55399.9961,0,0],[55499.9961,3,0],[55599.9961,1,0],[55599.9961,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[55999.9961,0,0],[56199.9961,6,0],[56399.9961,0,0],[56599.9961,3,0],[56799.9961,7,0],[56799.9961,1,200],[56999.9961,4,0],[57099.9961,7,0],[57199.9961,5,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[57599.9961,6,200],[57799.9961,3,0],[58199.9961,7,0],[58399.9961,2,0],[58399.9961,5,0],[58599.9961,0,0],[58699.9961,3,0],[58799.9961,1,0],[58799.9961,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[59199.9961,4,0],[59399.9961,2,0],[59399.9961,6,0],[59599.9961,4,0],[59799.9961,7,0],[59999.9961,3,0],[59999.9961,6,0],[60199.9961,0,0],[60199.9961,6,0],[60299.9961,3,0],[60399.9961,1,0],[60399.9961,4,0],[60599.9961,4,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[60999.9961,2,0],[61599.9961,3,0],[61799.9961,0,0],[61899.9961,3,0],[61999.9961,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[62599.9961,2,0],[63199.9961,3,0],[63399.9961,0,0],[63499.9961,3,0],[63599.9961,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[64199.9961,3,0],[64799.9961,2,0],[64999.9961,0,0],[65099.9961,3,0],[65199.9961,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65800,2,0],[66400,3,0],[66600,0,0],[66700,3,0],[66800,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[67400,0,0],[67600,3,0],[68000,2,0],[68400,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[68800,2,0],[69000,3,0],[69100,0,0],[69200,3,0],[69600,0,300],[70000,1,200]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[70600,3,0],[70800,1,0],[71200,3,0],[71400,1,0],[71800,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72000,0,0],[72200,0,0],[72400,3,0],[72600,3,0],[72800,2,300],[73200,1,300]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[73800,0,0],[74000,3,0],[74400,2,0],[74800,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[75200,2,0],[75400,3,0],[75500,0,0],[75600,3,0],[76000,0,300],[76400,1,200]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[77000,3,0],[77200,1,0],[77600,3,0],[77800,1,0],[78200,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78400,0,0],[78600,0,0],[78800,3,0],[79000,3,0],[79200,2,300],[79600,1,300]],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":150,"changeBPM":false,"mustHitSection":true}],"player2":"pico","song":"Pico","stage":"philly","needsVoices":true,"validScore":true,"bpm":150,"speed":1.4}}
\ No newline at end of file
diff --git a/assets/preload/data/roses/-30.offset b/assets/preload/data/roses/-30.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/roses/-30.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/roses/roses-easy.json b/assets/preload/data/roses/roses-easy.json
deleted file mode 100644
index 04cffc363a..0000000000
--- a/assets/preload/data/roses/roses-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-pixel","gfVersion":"gf-pixel","notes":[{"sectionNotes":[[500,3,0],[1000,0,250],[1375,1,0],[1875,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[2375,2,0],[3000,3,250],[3375,3,0],[3625,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[4500,3,0],[5000,0,250],[5375,1,0],[5875,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[6375,2,0],[7000,3,250],[7375,3,0],[7625,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[8000,2,125],[8500,2,0],[8875,3,250],[9500,0,0],[9875,3,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[10250,1,0],[10500,3,0],[10875,3,250],[11250,1,0],[11500,0,0],[11750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[12000,2,125],[12500,2,0],[12875,3,250],[13500,0,0],[13875,3,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[14250,1,0],[14500,3,0],[14875,3,250],[15250,1,0],[15500,0,0],[15750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[16500,0,0],[17000,3,125],[17250,1,0],[17500,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[18000,0,0],[18250,3,0],[18500,0,0],[19000,3,0],[19250,1,0],[19500,0,0],[19750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[20500,0,0],[21000,3,125],[21250,1,0],[21500,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[22000,0,0],[22250,3,0],[22500,0,0],[23000,3,0],[23250,1,0],[23500,0,0],[23750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[24000,2,0],[24625,0,0],[25000,3,0],[25375,3,0],[25625,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26000,2,0],[26625,0,0],[27000,3,0],[27375,3,0],[27625,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[28000,2,0],[28625,0,0],[29000,3,0],[29375,3,0],[29625,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30000,2,0],[30625,0,0],[31000,3,0],[31375,3,0],[31625,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32000,0,0],[32500.002,3,0],[33000,2,0],[33375,3,0],[33750,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[34000,1,0],[34500,3,0],[35000,2,0],[35375,3,0],[35750,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[36000,0,0],[36500,3,0],[37000,2,0],[37375,3,0],[37750,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[38000,1,0],[38500,3,0],[39000,2,0],[39375,3,0],[39750,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[40000,1,0],[40500,2,0],[40750,3,0],[41000,2,0],[41375,1,0],[41750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[42000,1,0],[42500,2,0],[42750,3,0],[43000,2,0],[43375,3,0],[43750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[44000,1,0],[44500,2,0],[44750,3,0],[45000,2,0],[45375,1,0],[45750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[46000,1,0],[46500,2,0],[46750,3,0],[47000,2,0],[47375,3,0],[47750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[48000,2,0],[48625,0,0],[48875,0,0],[49125,3,0],[49375,3,0],[49500,0,375]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[50000,2,0],[50750,2,0],[50875,0,0],[51250,3,0],[51375,0,0],[51500,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[52000,2,0],[52625,0,0],[52875,0,0],[53125,3,0],[53375,3,0],[53500,0,375]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[54000,2,0],[54750,2,0],[54875,0,0],[55250,3,0],[55375,0,0],[55500,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56000,0,0],[56375,0,0],[56500,3,0],[57000,0,0],[57375,0,0],[57500,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[58000,0,0],[58375,0,0],[58500,3,0],[59000,0,0],[59375,0,0],[59500,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[60000,0,0],[60375,0,0],[60500,3,0],[61000,0,0],[61375,0,0],[61500,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[62000,0,0],[62375,0,0],[62500,3,0],[63000,0,0],[63375,0,0],[63500,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[64500.0039,3,0],[65000.0039,0,250],[65375.0039,1,0],[65875,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[66375,2,0],[67000,3,250],[67375,3,0],[67625,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[68500,3,0],[69000,0,250],[69375,1,0],[69875,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[70375,2,0],[71000,3,250],[71375,3,0],[71625,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[72000,2,125],[72500,2,0],[72875,3,250],[73500,0,0],[73875,3,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[74250,1,0],[74500,3,0],[74875,3,250],[75250,1,0],[75500,0,0],[75750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[76000,2,125],[76500,2,0],[76875,3,250],[77500,0,0],[77875,3,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78250,1,0],[78500,3,0],[78875,3,250],[79250,1,0],[79500,0,0],[79750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80000,0,0],[80375,0,0],[80500,3,0],[81000,0,0],[81375,0,0],[81500,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[82000,0,0],[82375,0,0],[82500,3,0],[83000,0,0],[83375,0,0],[83500,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[84000,0,0],[84375,0,0],[84500,3,0],[85000,0,0],[85375,0,0],[85500,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[86000,0,0],[86375,0,0],[86500,3,0],[87000,0,0],[87375,0,0],[87500,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":120,"changeBPM":false,"mustHitSection":true}],"player2":"senpai-angry","song":"Roses","stage":"school","needsVoices":true,"validScore":true,"noteStyle":"pixel","bpm":120,"speed":1.2}}
\ No newline at end of file
diff --git a/assets/preload/data/roses/roses-hard.json b/assets/preload/data/roses/roses-hard.json
deleted file mode 100644
index 89c3bf9dfd..0000000000
--- a/assets/preload/data/roses/roses-hard.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-pixel","gfVersion":"gf-pixel","notes":[{"sectionNotes":[[500,3,0],[750,1,0],[1000,0,250],[1375,1,0],[1875,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[2125,2,0],[2375,2,0],[2500,0,0],[2625,1,0],[2750,0,0],[3000,3,250],[3375,3,0],[3625,0,0],[3875,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[4500,3,0],[4750,1,0],[5000,0,250],[5375,1,0],[5875,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[6125,2,0],[6375,2,0],[6500,0,0],[6625,1,0],[6750,0,0],[7000,3,250],[7375,3,0],[7625,0,0],[7875,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[8000,2,125],[8250,3,0],[8500,2,0],[8625,1,0],[8750,0,0],[8875,3,250],[9250,1,0],[9500,0,0],[9750,1,0],[9875,3,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[10250,1,0],[10500,3,0],[10750,2,0],[10875,3,250],[11250,1,0],[11500,0,0],[11750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[12000,2,125],[12250,3,0],[12500,2,0],[12625,1,0],[12750,0,0],[12875,3,250],[13250,1,0],[13500,0,0],[13750,1,0],[13875,3,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[14250,1,0],[14500,3,0],[14750,2,0],[14875,3,250],[15250,1,0],[15500,0,0],[15750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[16500,0,0],[16625,2,0],[16750,0,0],[16875,2,0],[17000,3,125],[17250,1,0],[17500,0,0],[17750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[18000,0,0],[18250,3,0],[18500,0,0],[18750,2,0],[19000,3,0],[19250,1,0],[19500,0,0],[19750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[20500,0,0],[20625,2,0],[20750,0,0],[20875,2,0],[21000,3,125],[21250,1,0],[21500,0,0],[21750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[22000,0,0],[22250,3,0],[22500,0,0],[22750,2,0],[23000,3,0],[23250,1,0],[23500,0,0],[23750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[24000,2,0],[24250,0,0],[24375,1,0],[24625,0,0],[24750,3,0],[25000,3,0],[25250,1,0],[25375,3,0],[25625,0,0],[25750,3,0],[25875,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26000,2,0],[26250,0,0],[26375,1,0],[26625,0,0],[26750,3,0],[27000,3,0],[27250,1,0],[27375,3,0],[27625,0,0],[27750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[28000,2,0],[28250,0,0],[28375,1,0],[28625,0,0],[28750,3,0],[29000,3,0],[29250,1,0],[29375,3,0],[29625,0,0],[29750,3,0],[29875,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30000,2,0],[30250,0,0],[30375,1,0],[30625,0,0],[30750,3,0],[31000,3,0],[31250,1,0],[31375,3,0],[31625,0,0],[31750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32000,0,0],[32250.002,1,0],[32375.002,0,0],[32500.002,3,0],[32750.002,1,0],[33000,2,0],[33250,1,0],[33375,3,0],[33625,1,0],[33750,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[34000,1,0],[34250,1,0],[34375,0,0],[34500,3,0],[34750,1,0],[35000,2,0],[35250,1,0],[35375,3,0],[35625,1,0],[35750,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[36000,0,0],[36250,1,0],[36375,0,0],[36500,3,0],[36750,1,0],[37000,2,0],[37250,1,0],[37375,3,0],[37625,1,0],[37750,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[38000,1,0],[38250,1,0],[38375,0,0],[38500,3,0],[38750,1,0],[39000,2,0],[39250,1,0],[39375,3,0],[39625,1,0],[39750,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[40000,1,0],[40125,0,0],[40250,0,0],[40375,3,0],[40500,2,0],[40625,2,0],[40750,3,0],[41000,2,0],[41250,0,0],[41375,1,0],[41500,1,0],[41625,1,0],[41750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[42000,1,0],[42250,0,0],[42375,3,0],[42500,2,0],[42625,2,0],[42750,3,0],[43000,2,0],[43250,0,0],[43375,3,0],[43625,1,0],[43750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[44000,1,0],[44125,0,0],[44250,0,0],[44375,3,0],[44500,2,0],[44625,2,0],[44750,3,0],[45000,2,0],[45250,0,0],[45375,1,0],[45500,1,0],[45625,1,0],[45750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[46000,1,0],[46250,0,0],[46375,3,0],[46500,2,0],[46625,2,0],[46750,3,0],[47000,2,0],[47250,0,0],[47375,3,0],[47625,1,0],[47750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[48000,2,0],[48125,3,0],[48250,2,0],[48375,0,0],[48500,2,0],[48625,0,0],[48750,3,0],[48875,0,0],[49000,2,0],[49125,3,0],[49250,1,0],[49375,3,0],[49500,0,375]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[50000,2,0],[50125,3,0],[50250,2,0],[50375,0,0],[50500,3,0],[50625,0,0],[50750,2,0],[50875,0,0],[51000,2,0],[51125,0,0],[51250,3,0],[51375,0,0],[51500,1,375]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[52000,2,0],[52125,3,0],[52250,2,0],[52375,0,0],[52500,2,0],[52625,0,0],[52750,3,0],[52875,0,0],[53000,2,0],[53125,3,0],[53250,1,0],[53375,3,0],[53500,0,375]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[54000,2,0],[54125,3,0],[54250,2,0],[54375,0,0],[54500,3,0],[54625,0,0],[54750,2,0],[54875,0,0],[55000,2,0],[55125,0,0],[55250,3,0],[55375,0,0],[55500,1,375]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56000,0,0],[56125,3,0],[56250,1,0],[56375,0,0],[56500,3,0],[56625,0,0],[56750,1,0],[56875,3,0],[57000,0,0],[57125,3,0],[57250,1,0],[57375,0,0],[57500,3,0],[57625,0,0],[57750,1,0],[57875,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[58000,0,0],[58125,3,0],[58250,1,0],[58375,0,0],[58500,3,0],[58625,0,0],[58750,1,0],[58875,3,0],[59000,0,0],[59125,3,0],[59250,1,0],[59375,0,0],[59500,3,0],[59625,0,0],[59750,1,0],[59875,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[60000,0,0],[60125,3,0],[60250,1,0],[60375,0,0],[60500,3,0],[60625,0,0],[60750,1,0],[60875,3,0],[61000,0,0],[61125,3,0],[61250,1,0],[61375,0,0],[61500,3,0],[61625,0,0],[61750,1,0],[61875,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[62000,0,0],[62125,3,0],[62250,1,0],[62375,0,0],[62500,3,0],[62625,0,0],[62750,1,0],[62875,3,0],[63000,0,0],[63125,3,0],[63250,1,0],[63375,0,0],[63500,3,0],[63625,0,0],[63750,1,0],[63875,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[64500.0039,3,0],[64750.0039,1,0],[65000.0039,0,250],[65375.0039,1,0],[65875,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[66125,2,0],[66375,2,0],[66500,0,0],[66625,1,0],[66750,0,0],[67000,3,250],[67375,3,0],[67625,0,0],[67875,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[68500,3,0],[68750,1,0],[69000,0,250],[69375,1,0],[69875,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[70125,2,0],[70375,2,0],[70500,0,0],[70625,1,0],[70750,0,0],[71000,3,250],[71375,3,0],[71625,0,0],[71875,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[72000,2,125],[72250,3,0],[72500,2,0],[72625,1,0],[72750,0,0],[72875,3,250],[73250,1,0],[73500,0,0],[73750,1,0],[73875,3,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[74250,1,0],[74500,3,0],[74750,2,0],[74875,3,250],[75250,1,0],[75500,0,0],[75750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[76000,2,125],[76250,3,0],[76500,2,0],[76625,1,0],[76750,0,0],[76875,3,250],[77250,1,0],[77500,0,0],[77750,1,0],[77875,3,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78250,1,0],[78500,3,0],[78750,2,0],[78875,3,250],[79250,1,0],[79500,0,0],[79750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80000,0,0],[80125,3,0],[80250,1,0],[80375,0,0],[80500,3,0],[80625,0,0],[80750,1,0],[80875,3,0],[81000,0,0],[81125,3,0],[81250,1,0],[81375,0,0],[81500,3,0],[81625,0,0],[81750,1,0],[81875,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[82000,0,0],[82125,3,0],[82250,1,0],[82375,0,0],[82500,3,0],[82625,0,0],[82750,1,0],[82875,3,0],[83000,0,0],[83125,3,0],[83250,1,0],[83375,0,0],[83500,3,0],[83625,0,0],[83750,1,0],[83875,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[84000,0,0],[84125,3,0],[84250,1,0],[84375,0,0],[84500,3,0],[84625,0,0],[84750,1,0],[84875,3,0],[85000,0,0],[85125,3,0],[85250,1,0],[85375,0,0],[85500,3,0],[85625,0,0],[85750,1,0],[85875,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[86000,0,0],[86125,3,0],[86250,1,0],[86375,0,0],[86500,3,0],[86625,0,0],[86750,1,0],[86875,3,0],[87000,0,0],[87125,3,0],[87250,1,0],[87375,0,0],[87500,3,0],[87625,0,0],[87750,1,0],[87875,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":120,"changeBPM":false,"mustHitSection":true}],"player2":"senpai-angry","song":"Roses","stage":"school","needsVoices":true,"validScore":true,"noteStyle":"pixel","bpm":120,"speed":1.5}}
\ No newline at end of file
diff --git a/assets/preload/data/roses/roses.json b/assets/preload/data/roses/roses.json
deleted file mode 100644
index 2fd790b493..0000000000
--- a/assets/preload/data/roses/roses.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-pixel","gfVersion":"gf-pixel","notes":[{"sectionNotes":[[500,3,0],[750,1,0],[1000,0,250],[1375,1,0],[1875,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[2375,2,0],[2500,0,0],[2750,0,0],[3000,3,250],[3375,3,0],[3625,0,0],[3875,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[4500,3,0],[4750,1,0],[5000,0,250],[5375,1,0],[5875,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[6375,2,0],[6500,0,0],[6750,0,0],[7000,3,250],[7375,3,0],[7625,0,0],[7875,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[8000,2,125],[8500,2,0],[8750,0,0],[8875,3,250],[9500,0,0],[9750,1,0],[9875,3,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[10250,1,0],[10500,3,0],[10875,3,250],[11250,1,0],[11500,0,0],[11750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[12000,2,125],[12500,2,0],[12750,0,0],[12875,3,250],[13500,0,0],[13750,1,0],[13875,3,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[14250,1,0],[14500,3,0],[14875,3,250],[15250,1,0],[15500,0,0],[15750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[16500,0,0],[16750,0,0],[16875,2,0],[17000,3,125],[17250,1,0],[17500,0,0],[17750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[18000,0,0],[18250,3,0],[18500,0,0],[19000,3,0],[19250,1,0],[19500,0,0],[19750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[20500,0,0],[20750,0,0],[20875,2,0],[21000,3,125],[21250,1,0],[21500,0,0],[21750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[22000,0,0],[22250,3,0],[22500,0,0],[23000,3,0],[23250,1,0],[23500,0,0],[23750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[24000,2,0],[24250,0,0],[24625,0,0],[25000,3,0],[25250,1,0],[25375,3,0],[25625,0,0],[25750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26000,2,0],[26250,0,0],[26625,0,0],[27000,3,0],[27250,1,0],[27375,3,0],[27625,0,0],[27750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[28000,2,0],[28250,0,0],[28625,0,0],[29000,3,0],[29250,1,0],[29375,3,0],[29625,0,0],[29750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30000,2,0],[30250,0,0],[30625,0,0],[31000,3,0],[31250,1,0],[31375,3,0],[31625,0,0],[31750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32000,0,0],[32250.002,1,0],[32500.002,3,0],[32750.002,1,0],[33000,2,0],[33250,1,0],[33375,3,0],[33625,1,0],[33750,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[34000,1,0],[34250,1,0],[34500,3,0],[34750,1,0],[35000,2,0],[35250,1,0],[35375,3,0],[35625,1,0],[35750,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[36000,0,0],[36250,1,0],[36500,3,0],[36750,1,0],[37000,2,0],[37250,1,0],[37375,3,0],[37625,1,0],[37750,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[38000,1,0],[38250,1,0],[38500,3,0],[38750,1,0],[39000,2,0],[39250,1,0],[39375,3,0],[39625,1,0],[39750,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[40000,1,0],[40250,0,0],[40500,2,0],[40625,2,0],[40750,3,0],[41000,2,0],[41250,0,0],[41375,1,0],[41625,1,0],[41750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[42000,1,0],[42250,0,0],[42500,2,0],[42625,2,0],[42750,3,0],[43000,2,0],[43250,0,0],[43375,3,0],[43625,1,0],[43750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[44000,1,0],[44250,0,0],[44500,2,0],[44625,2,0],[44750,3,0],[45000,2,0],[45250,0,0],[45375,1,0],[45625,1,0],[45750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[46000,1,0],[46250,0,0],[46500,2,0],[46625,2,0],[46750,3,0],[47000,2,0],[47250,0,0],[47375,3,0],[47625,1,0],[47750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[48000,2,0],[48375,0,0],[48625,0,0],[48750,3,0],[48875,0,0],[49000,2,0],[49125,3,0],[49375,3,0],[49500,0,375]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[50000,2,0],[50375,0,0],[50750,2,0],[50875,0,0],[51250,3,0],[51375,0,0],[51500,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[52000,2,0],[52375,0,0],[52625,0,0],[52750,3,0],[52875,0,0],[53000,2,0],[53125,3,0],[53375,3,0],[53500,0,375]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[54000,2,0],[54375,0,0],[54750,2,0],[54875,0,0],[55250,3,0],[55375,0,0],[55500,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56000,0,0],[56125,3,0],[56375,0,0],[56500,3,0],[56625,0,0],[57000,0,0],[57125,3,0],[57375,0,0],[57500,3,0],[57625,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[58000,0,0],[58125,3,0],[58375,0,0],[58500,3,0],[58625,0,0],[59000,0,0],[59125,3,0],[59375,0,0],[59500,3,0],[59625,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[60000,0,0],[60125,3,0],[60375,0,0],[60500,3,0],[60625,0,0],[61000,0,0],[61125,3,0],[61375,0,0],[61500,3,0],[61625,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[62000,0,0],[62125,3,0],[62375,0,0],[62500,3,0],[62625,0,0],[63000,0,0],[63125,3,0],[63375,0,0],[63500,3,0],[63625,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[64500.0039,3,0],[64750.0039,1,0],[65000.0039,0,250],[65375.0039,1,0],[65875,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[66375,2,0],[66500,0,0],[66750,0,0],[67000,3,250],[67375,3,0],[67625,0,0],[67875,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[68500,3,0],[68750,1,0],[69000,0,250],[69375,1,0],[69875,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[70375,2,0],[70500,0,0],[70750,0,0],[71000,3,250],[71375,3,0],[71625,0,0],[71875,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[72000,2,125],[72500,2,0],[72750,0,0],[72875,3,250],[73500,0,0],[73750,1,0],[73875,3,250]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[74250,1,0],[74500,3,0],[74875,3,250],[75250,1,0],[75500,0,0],[75750,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[76000,2,125],[76500,2,0],[76750,0,0],[76875,3,250],[77500,0,0],[77750,1,0],[77875,3,250]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78250,1,0],[78500,3,0],[78875,3,250],[79250,1,0],[79500,0,0],[79750,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80000,0,0],[80125,3,0],[80375,0,0],[80500,3,0],[80625,0,0],[81000,0,0],[81125,3,0],[81375,0,0],[81500,3,0],[81625,0,0],[81750,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[82000,0,0],[82125,3,0],[82375,0,0],[82500,3,0],[82625,0,0],[83000,0,0],[83125,3,0],[83375,0,0],[83500,3,0],[83625,0,0],[83750,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[84000,0,0],[84125,3,0],[84375,0,0],[84500,3,0],[84625,0,0],[85000,0,0],[85125,3,0],[85375,0,0],[85500,3,0],[85625,0,0],[85750,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[86000,0,0],[86125,3,0],[86375,0,0],[86500,3,0],[86625,0,0],[87000,0,0],[87125,3,0],[87375,0,0],[87500,3,0],[87625,0,0],[87750,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":120,"changeBPM":false,"mustHitSection":true}],"player2":"senpai-angry","song":"Roses","stage":"school","needsVoices":true,"validScore":true,"noteStyle":"pixel","bpm":120,"speed":1.3}}
\ No newline at end of file
diff --git a/assets/preload/data/satin-panties/0.offset b/assets/preload/data/satin-panties/0.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/satin-panties/0.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/satin-panties/satin-panties-easy.json b/assets/preload/data/satin-panties/satin-panties-easy.json
deleted file mode 100644
index 3d3273f4b0..0000000000
--- a/assets/preload/data/satin-panties/satin-panties-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-car","gfVersion":"gf-car","notes":[{"sectionNotes":[[0,0,0],[545.4545,0,0],[954.5454,0,0],[1363.63635,0,0],[1636.36353,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[2181.818,3,0],[2727.27271,3,0],[3136.36353,3,0],[3545.45435,3,0],[3818.18164,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[4636.36328,2,0],[4909.091,3,0],[5318.18164,3,0],[6000,3,0],[6272.727,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[6818.18164,2,0],[7090.90869,3,0],[7500,3,0],[8181.818,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[8727.272,6,545.4545],[9000,2,0],[9272.727,3,0],[9681.818,3,0],[10363.6357,3,0],[10636.3633,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11181.8174,2,0],[11454.5449,3,0],[11863.6357,3,0],[12545.4541,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[13090.9082,6,545.4545],[13363.6357,1,0],[13636.3633,0,0],[14181.8174,2,272.727264],[14727.2725,0,0],[15000,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15272.7266,3,272.727264],[15681.8174,0,0],[16363.6357,2,272.727264],[16772.7266,3,0],[16909.09,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[17454.5449,6,545.4545],[17727.2715,1,0],[18000,0,0],[18545.4531,2,272.727264],[19090.9082,0,0],[19363.6367,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[19636.3633,3,272.727264],[20045.4531,0,0],[20727.2715,2,272.727264],[21136.3633,3,0],[21272.7266,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[21818.1816,6,409.090881],[21818.1816,2,409.090881],[22363.6348,7,0],[22363.6348,3,0],[22909.09,4,0],[22909.09,0,0],[23181.8184,4,0],[23181.8184,0,0],[23454.5449,4,0],[23454.5449,0,0],[23727.2715,4,0],[23727.2715,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[24000,1,409.090881],[24000,5,409.090881],[24545.4531,4,0],[24545.4531,0,0],[24818.1816,4,0],[24818.1816,0,0],[25090.9082,6,136.363632],[25090.9082,2,136.363632],[25636.3633,7,0],[25636.3633,3,0],[25909.09,5,0],[25909.09,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26181.8164,4,409.090881],[26181.8164,3,409.090881],[26727.2715,0,409.090881],[26727.2715,7,409.090881],[27272.7266,6,0],[27272.7266,2,0],[27818.1816,7,409.090881],[27818.1816,0,409.090881]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[28363.6348,5,409.090881],[28363.6348,1,409.090881],[28909.09,7,409.090881],[28909.09,3,409.090881],[29454.5449,6,409.090881],[29454.5449,2,409.090881],[30000,4,0],[30000,0,0],[30272.7266,7,409.090881]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30545.4531,5,545.4545],[30818.1816,2,0],[31090.9082,0,0],[31636.3633,3,0],[31909.09,3,0],[32181.8164,3,0],[32454.5449,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[33000,1,0],[33272.7266,0,136.363632],[33818.18,2,0],[34090.9063,0,0],[34363.6367,3,0],[34636.3633,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[34909.09,7,0],[35181.8164,7,0],[35181.8164,2,0],[35454.543,0,0],[36000,3,0],[36272.7266,3,0],[36545.4531,3,0],[36818.18,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[37363.6367,1,0],[37636.3633,0,136.363632],[38181.8164,2,0],[38454.543,0,0],[38727.2734,7,0],[38727.2734,3,0],[39000,7,0],[39000,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[39272.7266,2,0],[39272.7266,7,0],[39545.4531,2,0],[39545.4531,7,0],[39818.18,0,0],[40090.9063,3,0],[40363.6367,3,0],[40636.3633,3,0],[40909.09,3,0],[41181.8164,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[41454.543,0,0],[42000,0,0],[42272.7266,1,0],[42545.4531,2,0],[42818.18,0,0],[43090.9063,3,0],[43090.9063,7,0],[43363.6367,0,0],[43363.6367,7,0],[43500,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[43636.3633,2,0],[43909.09,2,0],[44181.8164,0,0],[44454.543,3,0],[44727.27,3,0],[45000,3,0],[45272.7266,3,0],[45545.4531,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[45818.18,0,0],[46363.6367,0,0],[46636.3633,1,0],[46909.09,2,0],[47181.8164,0,0],[47454.543,3,0],[47727.27,0,0],[47863.6367,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[48272.7266,2,0],[48545.4531,0,0],[48818.18,0,0],[49090.9063,3,0],[49363.6367,3,0],[49636.3633,1,0],[49909.09,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[50454.543,3,0],[50727.27,0,0],[51272.7266,0,0],[51545.4531,2,0],[51818.18,0,0],[52090.9063,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[52363.6328,6,545.4545],[52636.3633,2,0],[52909.09,0,0],[53181.8164,0,0],[53454.543,3,0],[53727.27,3,0],[54000,1,0],[54272.7266,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[54818.18,3,0],[55090.9063,0,0],[55636.3633,0,0],[55909.09,2,0],[56181.8164,0,0],[56454.543,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56727.27,2,409.090881],[56727.27,6,409.090881],[57272.7266,3,0],[57272.7266,7,0],[57818.18,0,0],[57818.18,4,0],[58090.9063,0,0],[58090.9063,4,0],[58363.6328,0,0],[58363.6328,4,0],[58636.3633,0,0],[58636.3633,4,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[58909.09,1,409.090881],[58909.09,5,409.090881],[59454.543,4,0],[59454.543,0,0],[59727.27,4,0],[59727.27,0,0],[60000,6,136.363632],[60000,2,136.363632],[60545.4531,7,0],[60545.4531,3,0],[60818.18,5,0],[60818.18,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61090.9063,0,409.090881],[61090.9063,7,409.090881],[61636.3633,4,409.090881],[61636.3633,3,409.090881],[62181.8164,2,0],[62181.8164,6,0],[62727.27,3,409.090881],[62727.27,4,409.090881]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[63272.7266,5,409.090881],[63272.7266,1,409.090881],[63818.18,7,409.090881],[63818.18,3,409.090881],[64363.6328,6,409.090881],[64363.6328,2,409.090881],[64909.09,0,0],[64909.09,4,0],[65181.8164,7,409.090881]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65454.543,5,545.4545],[65727.27,2,0],[66000,0,0],[66545.45,3,0],[66818.18,3,0],[67090.91,3,0],[67363.63,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[67909.0859,1,0],[68181.81,0,136.363632],[68727.27,3,0],[69000,0,0],[69272.73,3,0],[69545.45,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[69818.18,5,409.090881],[70090.91,2,0],[70363.63,0,0],[70363.63,7,409.090881],[70909.0859,6,409.090881],[70909.0859,3,0],[71181.81,3,0],[71454.55,3,0],[71454.55,7,409.090881],[71727.27,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[72000,5,409.090881],[72272.73,1,0],[72545.45,0,136.363632],[72545.45,7,409.090881],[73090.91,3,0],[73363.63,0,0],[73636.36,3,0],[73909.0859,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[74181.81,2,0],[74181.81,5,409.090881],[74454.55,2,0],[74727.27,0,0],[74727.27,7,409.090881],[75000,3,0],[75272.73,3,0],[75272.73,6,409.090881],[75545.45,3,0],[75818.18,3,0],[75818.18,7,409.090881],[76090.91,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[76363.63,0,0],[76363.63,5,409.090881],[76909.0859,0,0],[76909.0859,7,409.090881],[77181.81,1,0],[77454.55,2,0],[77454.55,6,409.090881],[77727.27,0,0],[78000,3,0],[78000,7,0],[78272.73,0,0],[78272.73,7,0],[78409.0859,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[78545.45,2,0],[78818.18,2,0],[79090.91,0,0],[79363.63,3,0],[79636.36,3,0],[79909.0859,3,0],[80181.81,3,0],[80454.55,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80727.27,0,0],[81272.73,0,0],[81545.45,1,0],[81818.18,2,0],[82090.91,0,0],[82363.63,3,0],[82636.36,0,0],[82772.73,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[82909.0859,7,1090.909],[83181.81,2,0],[83454.54,3,0],[83863.63,3,0],[84545.45,3,0],[84818.18,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[85363.63,2,0],[85636.36,3,0],[86045.45,3,0],[86727.27,3,0],[87000,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[87272.73,2,545.4545]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":110,"changeBPM":false,"mustHitSection":true}],"player2":"mom-car","song":"Satin Panties","stage":"limo","needsVoices":true,"validScore":true,"bpm":110,"speed":1.3}}
\ No newline at end of file
diff --git a/assets/preload/data/satin-panties/satin-panties-hard.json b/assets/preload/data/satin-panties/satin-panties-hard.json
deleted file mode 100644
index d1578b2475..0000000000
--- a/assets/preload/data/satin-panties/satin-panties-hard.json
+++ /dev/null
@@ -1,2904 +0,0 @@
-{
- "song": {
- "player1": "bf-car",
- "player2": "mom-car",
- "notes": [
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 0,
- 0,
- 0
- ],
- [
- 272.727264,
- 0,
- 0
- ],
- [
- 545.4545,
- 0,
- 0
- ],
- [
- 818.181763,
- 0,
- 0
- ],
- [
- 954.5454,
- 0,
- 0
- ],
- [
- 1227.27271,
- 0,
- 0
- ],
- [
- 1363.63635,
- 0,
- 0
- ],
- [
- 1636.36353,
- 0,
- 0
- ],
- [
- 1909.09082,
- 0,
- 0
- ],
- [
- 2045.45447,
- 0,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 2181.818,
- 3,
- 0
- ],
- [
- 2454.54541,
- 3,
- 0
- ],
- [
- 2727.27271,
- 3,
- 0
- ],
- [
- 3000,
- 3,
- 0
- ],
- [
- 3136.36353,
- 3,
- 0
- ],
- [
- 3409.09082,
- 3,
- 0
- ],
- [
- 3545.45435,
- 3,
- 0
- ],
- [
- 3818.18164,
- 3,
- 0
- ],
- [
- 4090.909,
- 3,
- 0
- ],
- [
- 4227.27246,
- 3,
- 0
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 4636.36328,
- 2,
- 0
- ],
- [
- 4909.091,
- 3,
- 0
- ],
- [
- 5181.818,
- 2,
- 0
- ],
- [
- 5318.18164,
- 3,
- 0
- ],
- [
- 5590.90869,
- 0,
- 0
- ],
- [
- 5863.636,
- 2,
- 0
- ],
- [
- 6000,
- 3,
- 0
- ],
- [
- 6272.727,
- 0,
- 0
- ],
- [
- 6409.091,
- 3,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 6818.18164,
- 2,
- 0
- ],
- [
- 7090.90869,
- 3,
- 0
- ],
- [
- 7363.636,
- 2,
- 0
- ],
- [
- 7500,
- 3,
- 0
- ],
- [
- 7772.727,
- 0,
- 0
- ],
- [
- 8045.454,
- 2,
- 0
- ],
- [
- 8181.818,
- 3,
- 0
- ],
- [
- 8318.182,
- 0,
- 0
- ],
- [
- 8454.545,
- 1,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 8727.272,
- 6,
- 545.4545
- ],
- [
- 9000,
- 2,
- 0
- ],
- [
- 9272.727,
- 3,
- 0
- ],
- [
- 9545.454,
- 2,
- 0
- ],
- [
- 9681.818,
- 3,
- 0
- ],
- [
- 9954.545,
- 0,
- 0
- ],
- [
- 10227.2725,
- 2,
- 0
- ],
- [
- 10363.6357,
- 3,
- 0
- ],
- [
- 10636.3633,
- 0,
- 0
- ],
- [
- 10772.7266,
- 3,
- 0
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 11181.8174,
- 2,
- 0
- ],
- [
- 11454.5449,
- 3,
- 0
- ],
- [
- 11727.2725,
- 2,
- 0
- ],
- [
- 11863.6357,
- 3,
- 0
- ],
- [
- 12136.3633,
- 0,
- 0
- ],
- [
- 12409.0908,
- 2,
- 0
- ],
- [
- 12545.4541,
- 3,
- 0
- ],
- [
- 12681.8174,
- 0,
- 0
- ],
- [
- 12818.1816,
- 1,
- 0
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 13090.9082,
- 6,
- 545.4545
- ],
- [
- 13363.6357,
- 1,
- 0
- ],
- [
- 13500,
- 1,
- 0
- ],
- [
- 13636.3633,
- 0,
- 0
- ],
- [
- 13909.0908,
- 0,
- 0
- ],
- [
- 14045.4541,
- 3,
- 0
- ],
- [
- 14181.8174,
- 2,
- 272.727264
- ],
- [
- 14590.9082,
- 3,
- 0
- ],
- [
- 14727.2725,
- 0,
- 0
- ],
- [
- 15000,
- 1,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 15272.7266,
- 3,
- 272.727264
- ],
- [
- 15681.8174,
- 0,
- 0
- ],
- [
- 15954.5449,
- 0,
- 0
- ],
- [
- 16090.9082,
- 0,
- 0
- ],
- [
- 16227.2725,
- 0,
- 0
- ],
- [
- 16363.6357,
- 2,
- 272.727264
- ],
- [
- 16772.7266,
- 3,
- 0
- ],
- [
- 16909.09,
- 0,
- 0
- ],
- [
- 17045.4531,
- 1,
- 0
- ],
- [
- 17181.8184,
- 0,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 17454.5449,
- 6,
- 545.4545
- ],
- [
- 17727.2715,
- 1,
- 0
- ],
- [
- 17863.6367,
- 1,
- 0
- ],
- [
- 18000,
- 0,
- 0
- ],
- [
- 18272.7266,
- 0,
- 0
- ],
- [
- 18409.09,
- 3,
- 0
- ],
- [
- 18545.4531,
- 2,
- 272.727264
- ],
- [
- 18954.5449,
- 3,
- 0
- ],
- [
- 19090.9082,
- 0,
- 0
- ],
- [
- 19363.6367,
- 1,
- 0
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 19636.3633,
- 3,
- 272.727264
- ],
- [
- 20045.4531,
- 0,
- 0
- ],
- [
- 20318.1816,
- 0,
- 0
- ],
- [
- 20454.5449,
- 0,
- 0
- ],
- [
- 20590.9082,
- 0,
- 0
- ],
- [
- 20727.2715,
- 2,
- 272.727264
- ],
- [
- 21136.3633,
- 3,
- 0
- ],
- [
- 21272.7266,
- 0,
- 0
- ],
- [
- 21409.09,
- 1,
- 0
- ],
- [
- 21545.4531,
- 0,
- 0
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 21818.1816,
- 6,
- 409.090881
- ],
- [
- 21818.1816,
- 2,
- 409.090881
- ],
- [
- 22363.6348,
- 7,
- 0
- ],
- [
- 22363.6348,
- 3,
- 0
- ],
- [
- 22500,
- 6,
- 0
- ],
- [
- 22500,
- 2,
- 0
- ],
- [
- 22636.3633,
- 7,
- 0
- ],
- [
- 22636.3633,
- 3,
- 0
- ],
- [
- 22772.7266,
- 6,
- 0
- ],
- [
- 22772.7266,
- 2,
- 0
- ],
- [
- 22909.09,
- 4,
- 0
- ],
- [
- 22909.09,
- 0,
- 0
- ],
- [
- 23045.4531,
- 5,
- 0
- ],
- [
- 23045.4531,
- 1,
- 0
- ],
- [
- 23181.8184,
- 4,
- 0
- ],
- [
- 23181.8184,
- 0,
- 0
- ],
- [
- 23318.1816,
- 5,
- 0
- ],
- [
- 23318.1816,
- 1,
- 0
- ],
- [
- 23454.5449,
- 4,
- 0
- ],
- [
- 23454.5449,
- 0,
- 0
- ],
- [
- 23590.9082,
- 7,
- 0
- ],
- [
- 23590.9082,
- 3,
- 0
- ],
- [
- 23727.2715,
- 4,
- 0
- ],
- [
- 23727.2715,
- 0,
- 0
- ],
- [
- 23863.6348,
- 7,
- 0
- ],
- [
- 23863.6348,
- 3,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 24000,
- 1,
- 409.090881
- ],
- [
- 24000,
- 5,
- 409.090881
- ],
- [
- 24545.4531,
- 4,
- 0
- ],
- [
- 24545.4531,
- 0,
- 0
- ],
- [
- 24681.8184,
- 7,
- 0
- ],
- [
- 24681.8184,
- 3,
- 0
- ],
- [
- 24818.1816,
- 4,
- 0
- ],
- [
- 24818.1816,
- 0,
- 0
- ],
- [
- 24954.5449,
- 7,
- 0
- ],
- [
- 24954.5449,
- 3,
- 0
- ],
- [
- 25090.9082,
- 6,
- 136.363632
- ],
- [
- 25090.9082,
- 2,
- 136.363632
- ],
- [
- 25363.6348,
- 7,
- 0
- ],
- [
- 25363.6348,
- 3,
- 0
- ],
- [
- 25636.3633,
- 7,
- 0
- ],
- [
- 25636.3633,
- 3,
- 0
- ],
- [
- 25909.09,
- 5,
- 0
- ],
- [
- 25909.09,
- 1,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 26181.8164,
- 4,
- 409.090881
- ],
- [
- 26181.8164,
- 3,
- 409.090881
- ],
- [
- 26727.2715,
- 0,
- 409.090881
- ],
- [
- 26727.2715,
- 7,
- 409.090881
- ],
- [
- 27272.7266,
- 6,
- 0
- ],
- [
- 27272.7266,
- 2,
- 0
- ],
- [
- 27545.4531,
- 6,
- 0
- ],
- [
- 27545.4531,
- 2,
- 0
- ],
- [
- 27681.8164,
- 6,
- 0
- ],
- [
- 27681.8164,
- 2,
- 0
- ],
- [
- 27818.1816,
- 7,
- 409.090881
- ],
- [
- 27818.1816,
- 0,
- 409.090881
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 28363.6348,
- 5,
- 409.090881
- ],
- [
- 28363.6348,
- 1,
- 409.090881
- ],
- [
- 28909.09,
- 7,
- 409.090881
- ],
- [
- 28909.09,
- 3,
- 409.090881
- ],
- [
- 29454.5449,
- 6,
- 409.090881
- ],
- [
- 29454.5449,
- 2,
- 409.090881
- ],
- [
- 30000,
- 4,
- 0
- ],
- [
- 30000,
- 0,
- 0
- ],
- [
- 30272.7266,
- 7,
- 409.090881
- ],
- [
- 30272.7266,
- 3,
- 0
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 30545.4531,
- 5,
- 545.4545
- ],
- [
- 30818.1816,
- 2,
- 0
- ],
- [
- 30954.5449,
- 3,
- 0
- ],
- [
- 31090.9082,
- 0,
- 0
- ],
- [
- 31363.6348,
- 1,
- 0
- ],
- [
- 31636.3633,
- 3,
- 0
- ],
- [
- 31772.7266,
- 0,
- 0
- ],
- [
- 31909.09,
- 3,
- 0
- ],
- [
- 32181.8164,
- 3,
- 0
- ],
- [
- 32318.1816,
- 0,
- 0
- ],
- [
- 32454.5449,
- 1,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 33000,
- 1,
- 0
- ],
- [
- 33136.3633,
- 3,
- 0
- ],
- [
- 33272.7266,
- 0,
- 136.363632
- ],
- [
- 33545.4531,
- 1,
- 0
- ],
- [
- 33818.18,
- 2,
- 0
- ],
- [
- 33954.543,
- 3,
- 0
- ],
- [
- 34090.9063,
- 0,
- 0
- ],
- [
- 34227.2734,
- 0,
- 0
- ],
- [
- 34363.6367,
- 3,
- 0
- ],
- [
- 34500,
- 0,
- 0
- ],
- [
- 34636.3633,
- 0,
- 0
- ],
- [
- 34772.7266,
- 1,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 34909.09,
- 7,
- 0
- ],
- [
- 35045.4531,
- 6,
- 0
- ],
- [
- 35181.8164,
- 2,
- 0
- ],
- [
- 35181.8164,
- 7,
- 0
- ],
- [
- 35318.18,
- 3,
- 0
- ],
- [
- 35454.543,
- 0,
- 0
- ],
- [
- 35727.2734,
- 1,
- 0
- ],
- [
- 36000,
- 3,
- 0
- ],
- [
- 36136.3633,
- 0,
- 0
- ],
- [
- 36272.7266,
- 3,
- 0
- ],
- [
- 36545.4531,
- 3,
- 0
- ],
- [
- 36681.8164,
- 0,
- 0
- ],
- [
- 36818.18,
- 1,
- 0
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 37363.6367,
- 1,
- 0
- ],
- [
- 37500,
- 3,
- 0
- ],
- [
- 37636.3633,
- 0,
- 136.363632
- ],
- [
- 37909.09,
- 1,
- 0
- ],
- [
- 38181.8164,
- 2,
- 0
- ],
- [
- 38318.18,
- 3,
- 0
- ],
- [
- 38454.543,
- 0,
- 0
- ],
- [
- 38590.9063,
- 0,
- 0
- ],
- [
- 38727.2734,
- 7,
- 0
- ],
- [
- 38727.2734,
- 3,
- 0
- ],
- [
- 38863.6367,
- 4,
- 0
- ],
- [
- 38863.6367,
- 0,
- 0
- ],
- [
- 39000,
- 5,
- 0
- ],
- [
- 39000,
- 0,
- 0
- ],
- [
- 39136.3633,
- 7,
- 0
- ],
- [
- 39136.3633,
- 1,
- 0
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 39272.7266,
- 2,
- 136.363632
- ],
- [
- 39272.7266,
- 7,
- 0
- ],
- [
- 39409.09,
- 6,
- 0
- ],
- [
- 39545.4531,
- 7,
- 0
- ],
- [
- 39545.4531,
- 2,
- 0
- ],
- [
- 39681.8164,
- 3,
- 0
- ],
- [
- 39818.18,
- 0,
- 0
- ],
- [
- 39954.543,
- 1,
- 0
- ],
- [
- 40090.9063,
- 3,
- 0
- ],
- [
- 40227.2734,
- 1,
- 0
- ],
- [
- 40363.6367,
- 3,
- 0
- ],
- [
- 40500,
- 0,
- 0
- ],
- [
- 40636.3633,
- 3,
- 0
- ],
- [
- 40772.7266,
- 1,
- 0
- ],
- [
- 40909.09,
- 3,
- 0
- ],
- [
- 41045.4531,
- 0,
- 0
- ],
- [
- 41181.8164,
- 1,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 41454.543,
- 0,
- 0
- ],
- [
- 41727.27,
- 1,
- 0
- ],
- [
- 41863.6367,
- 3,
- 0
- ],
- [
- 42000,
- 0,
- 136.363632
- ],
- [
- 42272.7266,
- 1,
- 0
- ],
- [
- 42545.4531,
- 2,
- 0
- ],
- [
- 42681.8164,
- 3,
- 0
- ],
- [
- 42818.18,
- 0,
- 0
- ],
- [
- 42954.543,
- 0,
- 0
- ],
- [
- 43090.9063,
- 7,
- 0
- ],
- [
- 43090.9063,
- 3,
- 0
- ],
- [
- 43227.27,
- 4,
- 0
- ],
- [
- 43227.27,
- 0,
- 0
- ],
- [
- 43363.6367,
- 5,
- 0
- ],
- [
- 43363.6367,
- 0,
- 0
- ],
- [
- 43500,
- 7,
- 0
- ],
- [
- 43500,
- 1,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 43636.3633,
- 2,
- 136.363632
- ],
- [
- 43909.09,
- 2,
- 0
- ],
- [
- 44045.4531,
- 3,
- 0
- ],
- [
- 44181.8164,
- 0,
- 0
- ],
- [
- 44318.18,
- 1,
- 0
- ],
- [
- 44454.543,
- 3,
- 0
- ],
- [
- 44590.9063,
- 1,
- 0
- ],
- [
- 44727.27,
- 3,
- 0
- ],
- [
- 44863.6367,
- 0,
- 0
- ],
- [
- 45000,
- 3,
- 0
- ],
- [
- 45136.3633,
- 1,
- 0
- ],
- [
- 45272.7266,
- 3,
- 0
- ],
- [
- 45409.09,
- 0,
- 0
- ],
- [
- 45545.4531,
- 1,
- 0
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 45818.18,
- 0,
- 0
- ],
- [
- 46090.9063,
- 1,
- 0
- ],
- [
- 46227.27,
- 3,
- 0
- ],
- [
- 46363.6367,
- 0,
- 136.363632
- ],
- [
- 46636.3633,
- 1,
- 0
- ],
- [
- 46909.09,
- 2,
- 0
- ],
- [
- 47045.4531,
- 3,
- 0
- ],
- [
- 47181.8164,
- 0,
- 0
- ],
- [
- 47318.18,
- 0,
- 0
- ],
- [
- 47454.543,
- 3,
- 0
- ],
- [
- 47590.9063,
- 0,
- 0
- ],
- [
- 47727.27,
- 0,
- 0
- ],
- [
- 47863.6367,
- 1,
- 0
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 48272.7266,
- 2,
- 0
- ],
- [
- 48409.09,
- 3,
- 0
- ],
- [
- 48545.4531,
- 0,
- 0
- ],
- [
- 48681.8164,
- 3,
- 0
- ],
- [
- 48818.18,
- 0,
- 0
- ],
- [
- 48954.543,
- 2,
- 0
- ],
- [
- 49090.9063,
- 3,
- 0
- ],
- [
- 49363.6367,
- 3,
- 0
- ],
- [
- 49636.3633,
- 1,
- 0
- ],
- [
- 49909.09,
- 0,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 50454.543,
- 3,
- 0
- ],
- [
- 50590.9063,
- 1,
- 0
- ],
- [
- 50727.27,
- 0,
- 0
- ],
- [
- 50863.6367,
- 3,
- 0
- ],
- [
- 51000,
- 2,
- 0
- ],
- [
- 51272.7266,
- 0,
- 0
- ],
- [
- 51545.4531,
- 2,
- 0
- ],
- [
- 51818.18,
- 0,
- 0
- ],
- [
- 52090.9063,
- 1,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 52363.6328,
- 6,
- 545.4545
- ],
- [
- 52636.3633,
- 2,
- 0
- ],
- [
- 52772.7266,
- 3,
- 0
- ],
- [
- 52909.09,
- 0,
- 0
- ],
- [
- 53045.4531,
- 3,
- 0
- ],
- [
- 53181.8164,
- 0,
- 0
- ],
- [
- 53318.18,
- 2,
- 0
- ],
- [
- 53454.543,
- 3,
- 0
- ],
- [
- 53727.27,
- 3,
- 0
- ],
- [
- 54000,
- 1,
- 0
- ],
- [
- 54272.7266,
- 0,
- 0
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 54818.18,
- 3,
- 0
- ],
- [
- 54954.543,
- 1,
- 0
- ],
- [
- 55090.9063,
- 0,
- 0
- ],
- [
- 55227.27,
- 3,
- 0
- ],
- [
- 55363.6328,
- 2,
- 0
- ],
- [
- 55636.3633,
- 0,
- 0
- ],
- [
- 55909.09,
- 2,
- 0
- ],
- [
- 56181.8164,
- 0,
- 0
- ],
- [
- 56454.543,
- 1,
- 0
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 56727.27,
- 6,
- 409.090881
- ],
- [
- 56727.27,
- 2,
- 409.090881
- ],
- [
- 57272.7266,
- 3,
- 0
- ],
- [
- 57272.7266,
- 7,
- 0
- ],
- [
- 57409.09,
- 2,
- 0
- ],
- [
- 57409.09,
- 6,
- 0
- ],
- [
- 57545.4531,
- 3,
- 0
- ],
- [
- 57545.4531,
- 7,
- 0
- ],
- [
- 57681.8164,
- 2,
- 0
- ],
- [
- 57681.8164,
- 6,
- 0
- ],
- [
- 57818.18,
- 0,
- 0
- ],
- [
- 57818.18,
- 4,
- 0
- ],
- [
- 57954.543,
- 1,
- 0
- ],
- [
- 57954.543,
- 5,
- 0
- ],
- [
- 58090.9063,
- 0,
- 0
- ],
- [
- 58090.9063,
- 4,
- 0
- ],
- [
- 58227.27,
- 1,
- 0
- ],
- [
- 58227.27,
- 5,
- 0
- ],
- [
- 58363.6328,
- 0,
- 0
- ],
- [
- 58363.6328,
- 4,
- 0
- ],
- [
- 58500,
- 3,
- 0
- ],
- [
- 58500,
- 7,
- 0
- ],
- [
- 58636.3633,
- 0,
- 0
- ],
- [
- 58636.3633,
- 4,
- 0
- ],
- [
- 58772.7266,
- 3,
- 0
- ],
- [
- 58772.7266,
- 7,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 58909.09,
- 1,
- 409.090881
- ],
- [
- 58909.09,
- 5,
- 409.090881
- ],
- [
- 59454.543,
- 4,
- 0
- ],
- [
- 59454.543,
- 0,
- 0
- ],
- [
- 59590.9063,
- 7,
- 0
- ],
- [
- 59590.9063,
- 3,
- 0
- ],
- [
- 59727.27,
- 4,
- 0
- ],
- [
- 59727.27,
- 0,
- 0
- ],
- [
- 59863.6328,
- 7,
- 0
- ],
- [
- 59863.6328,
- 3,
- 0
- ],
- [
- 60000,
- 6,
- 136.363632
- ],
- [
- 60000,
- 2,
- 136.363632
- ],
- [
- 60272.7266,
- 7,
- 0
- ],
- [
- 60272.7266,
- 3,
- 0
- ],
- [
- 60545.4531,
- 7,
- 0
- ],
- [
- 60545.4531,
- 3,
- 0
- ],
- [
- 60818.18,
- 5,
- 0
- ],
- [
- 60818.18,
- 1,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 61090.9063,
- 0,
- 409.090881
- ],
- [
- 61090.9063,
- 7,
- 409.090881
- ],
- [
- 61636.3633,
- 4,
- 409.090881
- ],
- [
- 61636.3633,
- 3,
- 409.090881
- ],
- [
- 62181.8164,
- 2,
- 0
- ],
- [
- 62181.8164,
- 6,
- 0
- ],
- [
- 62454.543,
- 2,
- 0
- ],
- [
- 62454.543,
- 6,
- 0
- ],
- [
- 62590.9063,
- 2,
- 0
- ],
- [
- 62590.9063,
- 6,
- 0
- ],
- [
- 62727.27,
- 3,
- 409.090881
- ],
- [
- 62727.27,
- 4,
- 409.090881
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 63272.7266,
- 5,
- 409.090881
- ],
- [
- 63272.7266,
- 1,
- 409.090881
- ],
- [
- 63818.18,
- 7,
- 409.090881
- ],
- [
- 63818.18,
- 3,
- 409.090881
- ],
- [
- 64363.6328,
- 6,
- 409.090881
- ],
- [
- 64363.6328,
- 2,
- 409.090881
- ],
- [
- 64909.09,
- 4,
- 0
- ],
- [
- 64909.09,
- 0,
- 0
- ],
- [
- 65181.8164,
- 7,
- 0
- ],
- [
- 65181.8164,
- 3,
- 0
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 65454.543,
- 5,
- 545.4545
- ],
- [
- 65454.543,
- 2,
- 0
- ],
- [
- 65727.27,
- 2,
- 0
- ],
- [
- 65863.63,
- 3,
- 0
- ],
- [
- 66000,
- 0,
- 0
- ],
- [
- 66272.73,
- 1,
- 0
- ],
- [
- 66545.45,
- 3,
- 0
- ],
- [
- 66681.81,
- 0,
- 0
- ],
- [
- 66818.18,
- 3,
- 0
- ],
- [
- 67090.91,
- 3,
- 0
- ],
- [
- 67227.27,
- 0,
- 0
- ],
- [
- 67363.63,
- 1,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 67909.0859,
- 1,
- 0
- ],
- [
- 68045.45,
- 3,
- 0
- ],
- [
- 68181.81,
- 0,
- 136.363632
- ],
- [
- 68454.55,
- 1,
- 0
- ],
- [
- 68727.27,
- 2,
- 0
- ],
- [
- 69000,
- 0,
- 0
- ],
- [
- 69272.73,
- 3,
- 0
- ],
- [
- 69545.45,
- 1,
- 0
- ],
- [
- 68818.1818181819,
- 0,
- 0
- ],
- [
- 68909.090909091,
- 3,
- 0
- ],
- [
- 69181.8181818182,
- 0,
- 0
- ],
- [
- 69363.6363636364,
- 0,
- 0
- ],
- [
- 69454.5454545455,
- 3,
- 0
- ],
- [
- 69727.2727272728,
- 0,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 69818.18,
- 5,
- 409.090881
- ],
- [
- 70090.91,
- 2,
- 0
- ],
- [
- 70227.27,
- 3,
- 0
- ],
- [
- 70363.63,
- 0,
- 0
- ],
- [
- 70363.63,
- 7,
- 409.090881
- ],
- [
- 70636.36,
- 1,
- 0
- ],
- [
- 70909.0859,
- 3,
- 0
- ],
- [
- 70909.0859,
- 6,
- 409.090881
- ],
- [
- 71045.45,
- 0,
- 0
- ],
- [
- 71181.81,
- 3,
- 0
- ],
- [
- 71454.55,
- 3,
- 0
- ],
- [
- 71454.55,
- 7,
- 409.090881
- ],
- [
- 71590.91,
- 0,
- 0
- ],
- [
- 71727.27,
- 1,
- 0
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 72000,
- 5,
- 409.090881
- ],
- [
- 72272.73,
- 1,
- 0
- ],
- [
- 72409.0859,
- 3,
- 0
- ],
- [
- 72545.45,
- 0,
- 136.363632
- ],
- [
- 72545.45,
- 7,
- 409.090881
- ],
- [
- 72818.18,
- 1,
- 0
- ],
- [
- 73090.91,
- 2,
- 0
- ],
- [
- 73363.63,
- 0,
- 0
- ],
- [
- 73636.36,
- 3,
- 0
- ],
- [
- 73909.0859,
- 1,
- 0
- ],
- [
- 73181.8181818182,
- 0,
- 0
- ],
- [
- 73272.7272727273,
- 3,
- 0
- ],
- [
- 73545.4545454546,
- 0,
- 0
- ],
- [
- 73727.2727272727,
- 0,
- 0
- ],
- [
- 73818.1818181819,
- 3,
- 0
- ],
- [
- 74090.9090909091,
- 0,
- 0
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 74181.81,
- 0,
- 136.363632
- ],
- [
- 74181.81,
- 5,
- 409.090881
- ],
- [
- 74454.55,
- 2,
- 0
- ],
- [
- 74590.91,
- 3,
- 0
- ],
- [
- 74727.27,
- 0,
- 0
- ],
- [
- 74727.27,
- 7,
- 409.090881
- ],
- [
- 74863.63,
- 1,
- 0
- ],
- [
- 75000,
- 3,
- 0
- ],
- [
- 75136.36,
- 1,
- 0
- ],
- [
- 75272.73,
- 3,
- 0
- ],
- [
- 75272.73,
- 6,
- 409.090881
- ],
- [
- 75409.0859,
- 0,
- 0
- ],
- [
- 75545.45,
- 3,
- 0
- ],
- [
- 75681.81,
- 1,
- 0
- ],
- [
- 75818.18,
- 3,
- 0
- ],
- [
- 75818.18,
- 7,
- 409.090881
- ],
- [
- 75954.55,
- 0,
- 0
- ],
- [
- 76090.91,
- 1,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 76363.63,
- 0,
- 0
- ],
- [
- 76363.63,
- 5,
- 409.090881
- ],
- [
- 76636.36,
- 1,
- 0
- ],
- [
- 76772.73,
- 3,
- 0
- ],
- [
- 76909.0859,
- 0,
- 136.363632
- ],
- [
- 76909.0859,
- 7,
- 409.090881
- ],
- [
- 77181.81,
- 1,
- 0
- ],
- [
- 77454.55,
- 2,
- 0
- ],
- [
- 77454.55,
- 6,
- 409.090881
- ],
- [
- 77590.91,
- 3,
- 0
- ],
- [
- 77727.27,
- 0,
- 0
- ],
- [
- 77863.63,
- 0,
- 0
- ],
- [
- 78000,
- 3,
- 0
- ],
- [
- 78000,
- 7,
- 0
- ],
- [
- 78136.36,
- 0,
- 0
- ],
- [
- 78136.36,
- 4,
- 0
- ],
- [
- 78272.73,
- 0,
- 0
- ],
- [
- 78272.73,
- 4,
- 0
- ],
- [
- 78409.0859,
- 1,
- 0
- ],
- [
- 78409.0859,
- 5,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 78545.45,
- 0,
- 136.363632
- ],
- [
- 78818.18,
- 2,
- 0
- ],
- [
- 78954.55,
- 3,
- 0
- ],
- [
- 79090.91,
- 0,
- 0
- ],
- [
- 79227.27,
- 1,
- 0
- ],
- [
- 79363.63,
- 3,
- 0
- ],
- [
- 79500,
- 1,
- 0
- ],
- [
- 79636.36,
- 3,
- 0
- ],
- [
- 79772.73,
- 0,
- 0
- ],
- [
- 79909.0859,
- 3,
- 0
- ],
- [
- 80045.45,
- 1,
- 0
- ],
- [
- 80181.81,
- 3,
- 0
- ],
- [
- 80318.18,
- 0,
- 0
- ],
- [
- 80454.55,
- 1,
- 0
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 80727.27,
- 0,
- 0
- ],
- [
- 81000,
- 1,
- 0
- ],
- [
- 81136.36,
- 3,
- 0
- ],
- [
- 81272.73,
- 0,
- 136.363632
- ],
- [
- 81545.45,
- 1,
- 0
- ],
- [
- 81818.18,
- 2,
- 0
- ],
- [
- 81954.54,
- 3,
- 0
- ],
- [
- 82090.91,
- 0,
- 0
- ],
- [
- 82227.27,
- 0,
- 0
- ],
- [
- 82363.63,
- 3,
- 0
- ],
- [
- 82500,
- 0,
- 0
- ],
- [
- 82636.36,
- 0,
- 0
- ],
- [
- 82772.73,
- 1,
- 0
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 82909.0859,
- 7,
- 1090.909
- ],
- [
- 83181.81,
- 2,
- 0
- ],
- [
- 83454.54,
- 3,
- 0
- ],
- [
- 83727.27,
- 2,
- 0
- ],
- [
- 83863.63,
- 3,
- 0
- ],
- [
- 84136.36,
- 0,
- 0
- ],
- [
- 84409.0859,
- 2,
- 0
- ],
- [
- 84545.45,
- 3,
- 0
- ],
- [
- 84818.18,
- 0,
- 0
- ],
- [
- 84954.54,
- 3,
- 0
- ]
- ],
- "mustHitSection": false
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 85363.63,
- 2,
- 0
- ],
- [
- 85636.36,
- 3,
- 0
- ],
- [
- 85909.0859,
- 2,
- 0
- ],
- [
- 86045.45,
- 3,
- 0
- ],
- [
- 86318.18,
- 0,
- 0
- ],
- [
- 86590.91,
- 2,
- 0
- ],
- [
- 86727.27,
- 3,
- 0
- ],
- [
- 86863.63,
- 0,
- 0
- ],
- [
- 87000,
- 1,
- 0
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [
- [
- 87272.73,
- 2,
- 545.4545
- ]
- ],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [],
- "mustHitSection": true
- },
- {
- "lengthInSteps": 16,
- "sectionNotes": [],
- "mustHitSection": true
- },
- {
- "sectionNotes": [],
- "typeOfSection": 0,
- "lengthInSteps": 16,
- "altAnim": false,
- "mustHitSection": true,
- "changeBPM": false,
- "bpm": 110
- },
- {
- "lengthInSteps": 16,
- "altAnim": false,
- "typeOfSection": 0,
- "sectionNotes": [],
- "bpm": 110,
- "changeBPM": false,
- "mustHitSection": true
- }
- ],
- "gfVersion": "gf-car",
- "song": "Satin Panties",
- "stage": "limo",
- "needsVoices": true,
- "validScore": true,
- "speed": 1.8,
- "bpm": 110
- }
-}
\ No newline at end of file
diff --git a/assets/preload/data/satin-panties/satin-panties.json b/assets/preload/data/satin-panties/satin-panties.json
deleted file mode 100644
index b5fe2234e5..0000000000
--- a/assets/preload/data/satin-panties/satin-panties.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-car","gfVersion":"gf-car","notes":[{"sectionNotes":[[0,0,0],[272.727264,0,0],[545.4545,0,0],[954.5454,0,0],[1363.63635,0,0],[1636.36353,0,0],[1909.09082,0,0],[2045.45447,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[2181.818,3,0],[2454.54541,3,0],[2727.27271,3,0],[3136.36353,3,0],[3545.45435,3,0],[3818.18164,3,0],[4090.909,3,0],[4227.27246,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[4636.36328,2,0],[4909.091,3,0],[5181.818,2,0],[5318.18164,3,0],[5863.636,2,0],[6000,3,0],[6272.727,0,0],[6409.091,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[6818.18164,2,0],[7090.90869,3,0],[7363.636,2,0],[7500,3,0],[7772.727,0,0],[8045.454,2,0],[8181.818,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[8727.272,6,545.4545],[9000,2,0],[9272.727,3,0],[9545.454,2,0],[9681.818,3,0],[10227.2725,2,0],[10363.6357,3,0],[10636.3633,0,0],[10772.7266,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11181.8174,2,0],[11454.5449,3,0],[11727.2725,2,0],[11863.6357,3,0],[12136.3633,0,0],[12409.0908,2,0],[12545.4541,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[13090.9082,6,545.4545],[13363.6357,1,0],[13636.3633,0,0],[13909.0908,0,0],[14181.8174,2,272.727264],[14590.9082,3,0],[14727.2725,0,0],[15000,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15272.7266,3,272.727264],[15681.8174,0,0],[15954.5449,0,0],[16090.9082,0,0],[16363.6357,2,272.727264],[16772.7266,3,0],[16909.09,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[17454.5449,6,545.4545],[17727.2715,1,0],[18000,0,0],[18272.7266,0,0],[18545.4531,2,272.727264],[18954.5449,3,0],[19090.9082,0,0],[19363.6367,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[19636.3633,3,272.727264],[20045.4531,0,0],[20318.1816,0,0],[20454.5449,0,0],[20727.2715,2,272.727264],[21136.3633,3,0],[21272.7266,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[21818.1816,6,409.090881],[21818.1816,2,409.090881],[22363.6348,7,0],[22363.6348,3,0],[22636.3633,7,0],[22636.3633,3,0],[22909.09,4,0],[22909.09,0,0],[23181.8184,4,0],[23181.8184,0,0],[23318.1816,5,0],[23318.1816,1,0],[23454.5449,4,0],[23454.5449,0,0],[23727.2715,4,0],[23727.2715,0,0],[23863.6348,7,0],[23863.6348,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[24000,1,409.090881],[24000,5,409.090881],[24545.4531,4,0],[24545.4531,0,0],[24818.1816,4,0],[24818.1816,0,0],[24954.5449,7,0],[24954.5449,3,0],[25090.9082,6,136.363632],[25090.9082,2,136.363632],[25363.6348,7,0],[25363.6348,3,0],[25636.3633,7,0],[25636.3633,3,0],[25909.09,5,0],[25909.09,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26181.8164,4,409.090881],[26181.8164,3,409.090881],[26727.2715,0,409.090881],[26727.2715,7,409.090881],[27272.7266,6,0],[27272.7266,2,0],[27545.4531,6,0],[27545.4531,2,0],[27818.1816,7,409.090881],[27818.1816,0,409.090881]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[28363.6348,5,409.090881],[28363.6348,1,409.090881],[28909.09,7,409.090881],[28909.09,3,409.090881],[29454.5449,6,409.090881],[29454.5449,2,409.090881],[30000,4,0],[30000,0,0],[30272.7266,7,409.090881],[30272.7266,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30545.4531,5,545.4545],[30818.1816,2,0],[31090.9082,0,0],[31363.6348,1,0],[31636.3633,3,0],[31772.7266,0,0],[31909.09,3,0],[32181.8164,3,0],[32454.5449,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[33000,1,0],[33136.3633,3,0],[33272.7266,0,136.363632],[33545.4531,1,0],[33818.18,2,0],[34090.9063,0,0],[34363.6367,3,0],[34636.3633,0,0],[34772.7266,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[34909.09,7,0],[35181.8164,7,0],[35181.8164,2,0],[35454.543,0,0],[35727.2734,1,0],[36000,3,0],[36136.3633,0,0],[36272.7266,3,0],[36545.4531,3,0],[36818.18,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[37363.6367,1,0],[37500,3,0],[37636.3633,0,136.363632],[37909.09,1,0],[38181.8164,2,0],[38454.543,0,0],[38727.2734,3,0],[38727.2734,7,0],[39000,5,0],[39000,0,0],[39136.3633,7,0],[39136.3633,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[39272.7266,2,0],[39272.7266,7,0],[39545.4531,2,0],[39545.4531,7,0],[39818.18,0,0],[39954.543,1,0],[40090.9063,3,0],[40363.6367,3,0],[40500,0,0],[40636.3633,3,0],[40909.09,3,0],[41181.8164,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[41454.543,0,0],[41727.27,1,0],[41863.6367,3,0],[42000,0,136.363632],[42272.7266,1,0],[42545.4531,2,0],[42818.18,0,0],[43090.9063,7,0],[43090.9063,3,0],[43363.6367,5,0],[43363.6367,0,0],[43500,7,0],[43500,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[43636.3633,2,0],[43909.09,2,0],[44181.8164,0,0],[44318.18,1,0],[44454.543,3,0],[44727.27,3,0],[44863.6367,0,0],[45000,3,0],[45272.7266,3,0],[45545.4531,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[45818.18,0,0],[46090.9063,1,0],[46227.27,3,0],[46363.6367,0,136.363632],[46636.3633,1,0],[46909.09,2,0],[47181.8164,0,0],[47454.543,3,0],[47727.27,0,0],[47863.6367,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[48272.7266,2,0],[48409.09,3,0],[48545.4531,0,0],[48818.18,0,0],[49090.9063,3,0],[49363.6367,3,0],[49636.3633,1,0],[49909.09,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[50454.543,3,0],[50590.9063,1,0],[50727.27,0,0],[51000,2,0],[51272.7266,0,0],[51545.4531,2,0],[51818.18,0,0],[52090.9063,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[52363.6328,6,545.4545],[52636.3633,2,0],[52772.7266,3,0],[52909.09,0,0],[53181.8164,0,0],[53454.543,3,0],[53727.27,3,0],[54000,1,0],[54272.7266,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[54818.18,3,0],[54954.543,1,0],[55090.9063,0,0],[55363.6328,2,0],[55636.3633,0,0],[55909.09,2,0],[56181.8164,0,0],[56454.543,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56727.27,2,409.090881],[56727.27,6,409.090881],[57272.7266,3,0],[57272.7266,7,0],[57545.4531,3,0],[57545.4531,7,0],[57818.18,0,0],[57818.18,4,0],[58090.9063,0,0],[58090.9063,4,0],[58227.27,1,0],[58227.27,5,0],[58363.6328,0,0],[58363.6328,4,0],[58636.3633,0,0],[58636.3633,4,0],[58772.7266,3,0],[58772.7266,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[58909.09,1,409.090881],[58909.09,5,409.090881],[59454.543,4,0],[59454.543,0,0],[59727.27,4,0],[59727.27,0,0],[59863.6328,7,0],[59863.6328,3,0],[60000,6,136.363632],[60000,2,136.363632],[60272.7266,7,0],[60272.7266,3,0],[60545.4531,7,0],[60545.4531,3,0],[60818.18,5,0],[60818.18,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61090.9063,0,409.090881],[61090.9063,7,409.090881],[61636.3633,4,409.090881],[61636.3633,3,409.090881],[62181.8164,2,0],[62181.8164,6,0],[62454.543,2,0],[62454.543,6,0],[62727.27,3,409.090881],[62727.27,4,409.090881]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[63272.7266,5,409.090881],[63272.7266,1,409.090881],[63818.18,7,409.090881],[63818.18,3,409.090881],[64363.6328,6,409.090881],[64363.6328,2,409.090881],[64909.09,4,0],[64909.09,0,0],[65181.8164,7,0],[65181.8164,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65454.543,5,545.4545],[65727.27,2,0],[66000,0,0],[66272.73,1,0],[66545.45,3,0],[66681.81,0,0],[66818.18,3,0],[67090.91,3,0],[67363.63,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[67909.0859,1,0],[68045.45,3,0],[68181.81,0,136.363632],[68454.55,1,0],[68727.27,3,0],[69000,0,0],[69181.81,0,0],[69272.73,3,0],[69545.45,1,0],[69727.27,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[69818.18,5,409.090881],[70090.91,2,0],[70363.63,0,0],[70363.63,7,409.090881],[70636.36,1,0],[70909.0859,3,0],[70909.0859,6,409.090881],[71045.45,0,0],[71181.81,3,0],[71454.55,3,0],[71454.55,7,409.090881],[71727.27,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[72000,5,409.090881],[72272.73,1,0],[72409.0859,3,0],[72545.45,0,136.363632],[72545.45,7,409.090881],[72818.18,1,0],[73090.91,3,0],[73363.63,0,0],[73545.45,0,0],[73636.36,3,0],[73909.0859,1,0],[74090.91,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[74181.81,2,0],[74181.81,5,409.090881],[74454.55,2,0],[74727.27,0,0],[74727.27,7,409.090881],[74863.63,1,0],[75000,3,0],[75272.73,3,0],[75272.73,6,409.090881],[75409.0859,0,0],[75545.45,3,0],[75818.18,3,0],[75818.18,7,409.090881],[76090.91,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[76363.63,0,0],[76363.63,5,409.090881],[76636.36,1,0],[76772.73,3,0],[76909.0859,0,136.363632],[76909.0859,7,409.090881],[77181.81,1,0],[77454.55,2,0],[77454.55,6,409.090881],[77727.27,0,0],[78000,3,0],[78000,7,0],[78136.36,4,0],[78272.73,0,0],[78409.0859,1,0],[78409.0859,5,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[78545.45,2,0],[78818.18,2,0],[79090.91,0,0],[79227.27,1,0],[79363.63,3,0],[79636.36,3,0],[79772.73,0,0],[79909.0859,3,0],[80181.81,3,0],[80454.55,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80727.27,0,0],[81000,1,0],[81136.36,3,0],[81272.73,0,136.363632],[81545.45,1,0],[81818.18,2,0],[82090.91,0,0],[82363.63,3,0],[82636.36,0,0],[82772.73,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[82909.0859,7,1090.909],[83181.81,2,0],[83454.54,3,0],[83727.27,2,0],[83863.63,3,0],[84409.0859,2,0],[84545.45,3,0],[84818.18,0,0],[84954.54,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[85363.63,2,0],[85636.36,3,0],[85909.0859,2,0],[86045.45,3,0],[86590.91,2,0],[86727.27,3,0],[87000,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[87272.73,2,545.4545]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":110,"changeBPM":false,"mustHitSection":true}],"player2":"mom-car","song":"Satin Panties","stage":"limo","needsVoices":true,"validScore":true,"bpm":110,"speed":1.6}}
\ No newline at end of file
diff --git a/assets/preload/data/senpai/-50.offset b/assets/preload/data/senpai/-50.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/senpai/-50.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/senpai/senpai-easy.json b/assets/preload/data/senpai/senpai-easy.json
deleted file mode 100644
index 0839e5d30c..0000000000
--- a/assets/preload/data/senpai/senpai-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-pixel","gfVersion":"gf-pixel","notes":[{"sectionNotes":[[0,3,0],[416.666656,3,0],[833.3333,2,312.5],[1250,1,208.333328]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[1666.66663,3,416.666656],[2291.6665,1,833.3333]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[3333.33325,3,0],[3750,3,0],[4166.6665,2,312.5],[4583.333,1,208.333328]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[5000,3,312.5],[5416.6665,2,0],[5625,3,312.5],[6041.6665,2,0],[6250,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[6666.6665,5,0],[6666.6665,1,0],[7083.333,5,0],[7083.333,1,0],[7500,2,312.5],[7500,6,312.5],[7916.6665,5,0],[7916.6665,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[8333.333,4,312.5],[8333.333,3,312.5],[8750,1,0],[8750,5,0],[8958.333,0,312.5],[8958.333,7,312.5],[9375,1,0],[9375,5,0],[9583.333,0,0],[9583.333,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[10000,3,0],[10000,4,0],[10416.666,5,0],[10416.666,1,0],[10833.333,0,0],[10833.333,7,0],[11250,1,208.333328],[11250,5,208.333328]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[11666.666,4,0],[11666.666,3,0],[12083.333,5,0],[12083.333,1,0],[12500,6,0],[12500,2,0],[12916.666,7,0],[12916.666,0,0],[13125,6,0],[13125,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[13750,2,208.333328],[14166.666,1,520.8333],[14791.666,3,625]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15625,2,0],[16250,1,208.333328]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[16666.666,3,312.5],[17083.332,1,0],[17291.666,0,937.5]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[18333.332,1,416.666656],[18958.332,0,520.8333],[19583.332,3,312.5]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[20000,5,416.666656],[20416.666,2,312.5],[20833.332,1,520.8333],[21458.332,3,625]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[22291.666,2,0],[22916.666,1,208.333328]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[23333.332,3,312.5],[23750,1,0],[23958.332,0,937.5]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[25000,1,416.666656],[25625,0,520.8333],[26250,3,312.5]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[26666.666,0,0],[26666.666,5,625],[27083.332,0,0],[27500,2,0],[27500,7,625],[27916.666,3,0],[28125,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[28333.332,7,208.333328],[28333.332,0,625],[28750,5,208.333328],[29166.666,6,0],[29166.666,3,625],[29583.332,4,312.5]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30000,3,0],[30000,6,625],[30416.666,1,0],[30625,0,625],[30833.332,7,625],[31458.332,3,416.666656]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[31666.666,0,625],[32083.332,5,0],[32291.666,7,0],[32500,1,625],[32708.332,4,0],[32916.6641,5,208.333328]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33333.332,0,0],[33750,0,0],[34166.6641,2,0],[34583.332,3,0],[34791.6641,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[35000,3,208.333328],[35416.6641,1,208.333328],[35833.332,2,0],[36250,0,312.5]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[36666.6641,3,0],[37083.332,1,0],[37291.6641,0,625],[38125,3,416.666656]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[38750,1,0],[38958.332,3,0],[39375,0,0],[39583.332,1,208.333328]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[40000,2,312.5],[40000,6,416.666656],[40416.6641,0,0],[40833.332,3,312.5],[41250,1,0],[41458.332,0,625]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[42291.6641,1,312.5],[42708.332,3,312.5],[43125,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[43333.332,3,312.5],[43750,0,0],[43958.332,2,312.5],[44375,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[45000,3,0],[45416.6641,3,0],[45833.332,3,0],[46041.6641,2,0],[46250,3,0],[46458.332,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[46666.6641,2,312.5],[47083.332,0,0],[47500,3,312.5],[47916.6641,1,0],[48125,0,625]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[48958.332,1,312.5],[49375,3,312.5],[49791.6641,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[50000,3,312.5],[50416.6641,0,0],[50625,2,312.5],[51041.6641,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[51666.6641,3,0],[52083.332,3,0],[52500,3,0],[52708.332,2,0],[52916.6641,3,0],[53125,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[53333.332,3,0],[53333.332,7,416.666656],[53750,3,0],[54166.6641,2,312.5],[54583.332,1,208.333328]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[55000,3,416.666656],[55625,1,833.3333]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[56666.6641,3,0],[57083.332,3,0],[57500,2,312.5],[57916.6641,1,208.333328]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[58333.332,3,312.5],[58750,2,0],[58958.332,3,312.5],[59375,2,0],[59583.332,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[60000,5,0],[60000,1,0],[60416.6641,5,0],[60416.6641,1,0],[60833.332,2,312.5],[60833.332,6,312.5],[61250,5,0],[61250,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61666.6641,4,312.5],[61666.6641,3,312.5],[62083.332,1,0],[62083.332,5,0],[62291.6641,0,312.5],[62291.6641,7,312.5],[62708.332,1,0],[62708.332,5,0],[62916.6641,0,0],[62916.6641,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[63333.332,3,0],[63333.332,4,0],[63750,5,0],[63750,1,0],[64166.6641,0,0],[64166.6641,7,0],[64583.332,1,208.333328],[64583.332,5,208.333328]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[65000,4,0],[65000,3,0],[65416.6641,5,0],[65416.6641,1,0],[65833.33,6,0],[65833.33,2,0],[66250,7,0],[66250,0,0],[66458.33,6,0],[66458.33,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[66666.6641,1,0],[67083.33,0,0],[67500,1,0],[67916.6641,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[68333.33,1,0],[68750,0,0],[69166.6641,2,0],[69375,3,0],[69583.33,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[70000,1,0],[70416.6641,0,0],[70833.33,1,0],[71250,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[71666.6641,1,0],[72083.33,0,0],[72500,2,0],[72708.33,3,0],[72916.6641,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[73333.33,0,0],[73750,1,0],[73958.33,3,0],[74166.6641,0,0],[74583.33,1,0],[74791.6641,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[75000,0,0],[75416.6641,1,0],[75625,3,0],[75833.33,2,0],[76041.6641,3,0],[76250,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[76666.6641,0,0],[77083.33,1,0],[77291.6641,3,0],[77500,0,0],[77916.6641,1,0],[78125,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78333.33,0,0],[78750,1,0],[78958.33,3,0],[79166.6641,2,0],[79375,3,0],[79583.33,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80000,2,312.5],[80000,6,312.5],[80416.6641,0,0],[80833.33,3,312.5],[81250,1,0],[81458.33,0,625]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[82291.6641,1,312.5],[82708.33,3,312.5],[83125,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[83333.33,3,312.5],[83750,0,0],[83958.33,2,312.5],[84375,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[85000,3,0],[85416.6641,3,0],[85833.33,3,0],[86041.6641,2,0],[86250,3,0],[86458.33,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[86666.6641,2,312.5],[87083.33,0,0],[87500,3,312.5],[87916.6641,1,0],[88125,0,625]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[88958.33,1,312.5],[89375,3,312.5],[89791.6641,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[90000,3,312.5],[90416.6641,0,0],[90625,2,312.5],[91041.6641,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[91666.6641,3,0],[92083.33,3,0],[92500,3,0],[92708.33,2,0],[92916.6641,3,0],[93125,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[93333.33,5,833.3333],[93333.33,3,833.3333]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":false},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":144,"changeBPM":false,"mustHitSection":true}],"player2":"senpai","song":"Senpai","stage":"school","needsVoices":true,"validScore":true,"noteStyle":"pixel","bpm":144,"speed":1}}
\ No newline at end of file
diff --git a/assets/preload/data/senpai/senpai-hard.json b/assets/preload/data/senpai/senpai-hard.json
deleted file mode 100644
index 87ae01a63f..0000000000
--- a/assets/preload/data/senpai/senpai-hard.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-pixel","gfVersion":"gf-pixel","notes":[{"sectionNotes":[[0,3,0],[416.666656,3,0],[625,0,0],[833.3333,2,312.5],[1250,1,208.333328]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[1666.66663,3,416.666656],[2291.6665,1,833.3333]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[3333.33325,3,0],[3750,3,0],[3958.33325,0,0],[4166.6665,2,312.5],[4583.333,1,208.333328]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[5000,3,312.5],[5416.6665,2,0],[5625,3,312.5],[6041.6665,2,0],[6250,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[6666.6665,5,0],[6666.6665,1,0],[7083.333,5,0],[7083.333,1,0],[7291.6665,3,0],[7291.6665,4,0],[7500,2,312.5],[7500,6,312.5],[7916.6665,5,0],[7916.6665,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[8333.333,4,312.5],[8333.333,3,312.5],[8750,1,0],[8750,5,0],[8958.333,7,312.5],[8958.333,0,312.5],[9375,1,0],[9375,5,0],[9583.333,0,0],[9583.333,4,0],[9583.333,7,0],[9583.333,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[10000,3,0],[10000,4,0],[10416.666,5,0],[10416.666,1,0],[10833.333,0,0],[10833.333,7,0],[11041.666,3,0],[11041.666,4,0],[11250,1,208.333328],[11250,5,208.333328]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[11666.666,4,0],[11666.666,3,0],[11875,7,0],[11875,0,0],[12083.333,5,0],[12083.333,1,0],[12291.666,4,0],[12291.666,3,0],[12500,6,0],[12500,2,0],[12708.333,4,0],[12708.333,3,0],[12916.666,7,0],[12916.666,0,0],[13125,6,0],[13125,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[13750,2,208.333328],[14166.666,1,520.8333],[14791.666,3,625]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15625,0,0],[15729.166,2,0],[16041.666,3,0],[16250,1,208.333328]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[16666.666,3,312.5],[17083.332,1,0],[17291.666,0,937.5]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[18333.332,1,416.666656],[18958.332,0,520.8333],[19583.332,3,312.5]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[20000,5,416.666656],[20416.666,2,208.333328],[20833.332,1,520.8333],[21458.332,3,625]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[22291.666,0,0],[22395.832,2,0],[22708.332,3,0],[22916.666,1,208.333328]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[23333.332,3,312.5],[23750,1,0],[23958.332,0,937.5]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[25000,1,416.666656],[25625,0,520.8333],[26250,3,312.5]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[26666.666,5,729.1666],[26666.666,0,0],[26770.832,3,0],[26875,1,0],[26979.166,3,0],[27083.332,0,0],[27291.666,1,0],[27500,7,729.1666],[27500,2,0],[27708.332,0,0],[27916.666,3,0],[28125,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[28333.332,0,729.1666],[28333.332,7,208.333328],[28750,5,208.333328],[29166.666,3,729.1666],[29166.666,6,0],[29375,7,0],[29583.332,4,312.5]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30000,6,729.1666],[30000,3,0],[30416.666,1,0],[30625,0,625],[30833.332,7,729.1666],[31458.332,3,416.666656]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[31666.666,0,729.1666],[32083.332,5,0],[32291.666,7,0],[32500,1,625],[32500,7,0],[32708.332,4,0],[32916.6641,5,208.333328]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33333.332,0,0],[33437.5,3,0],[33541.6641,1,0],[33645.832,3,0],[33750,0,0],[33958.332,1,0],[34166.6641,2,0],[34375,0,0],[34583.332,3,0],[34791.6641,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[35000,3,208.333328],[35416.6641,1,208.333328],[35833.332,2,0],[36041.6641,3,0],[36250,0,312.5]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[36666.6641,3,0],[37083.332,1,0],[37291.6641,0,625],[38125,3,416.666656]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[38750,1,0],[38958.332,3,0],[39166.6641,3,0],[39375,0,0],[39583.332,1,208.333328]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[40000,2,312.5],[40000,6,416.666656],[40416.6641,0,0],[40520.832,1,0],[40625,0,0],[40729.1641,1,0],[40833.332,3,312.5],[41250,1,0],[41458.332,0,625]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[42291.6641,1,312.5],[42708.332,3,312.5],[43125,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[43333.332,3,312.5],[43750,0,0],[43958.332,2,312.5],[44375,0,0],[44583.332,2,0],[44791.6641,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[45000,3,0],[45208.332,1,0],[45312.5,0,0],[45416.6641,3,0],[45625,1,0],[45833.332,3,0],[46041.6641,2,0],[46250,3,0],[46458.332,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[46666.6641,2,312.5],[47083.332,0,0],[47187.5,1,0],[47291.6641,0,0],[47395.832,1,0],[47500,3,312.5],[47916.6641,1,0],[48125,0,625]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[48958.332,1,312.5],[49375,3,312.5],[49791.6641,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[50000,3,312.5],[50416.6641,0,0],[50625,2,312.5],[51041.6641,0,0],[51250,2,0],[51458.332,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[51666.6641,3,0],[51875,1,0],[51979.1641,0,0],[52083.332,3,0],[52291.6641,1,0],[52500,3,0],[52708.332,2,0],[52916.6641,3,0],[53125,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[53333.332,3,0],[53333.332,7,416.666656],[53750,3,0],[53958.332,0,0],[54166.6641,2,312.5],[54583.332,1,208.333328]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[55000,3,416.666656],[55625,1,833.3333]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[56666.6641,3,0],[57083.332,3,0],[57291.6641,0,0],[57500,2,312.5],[57916.6641,1,208.333328]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[58333.332,3,312.5],[58750,2,0],[58958.332,3,312.5],[59375,2,0],[59583.332,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[60000,5,0],[60000,1,0],[60416.6641,5,0],[60416.6641,1,0],[60625,3,0],[60625,4,0],[60833.332,2,312.5],[60833.332,6,312.5],[61250,5,0],[61250,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61666.6641,4,312.5],[61666.6641,3,312.5],[62083.332,1,0],[62083.332,5,0],[62291.6641,7,312.5],[62291.6641,0,312.5],[62708.332,1,0],[62708.332,5,0],[62916.6641,0,0],[62916.6641,4,0],[62916.6641,7,0],[62916.6641,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[63333.332,3,0],[63333.332,4,0],[63750,5,0],[63750,1,0],[64166.6641,0,0],[64166.6641,7,0],[64375,3,0],[64375,4,0],[64583.332,1,208.333328],[64583.332,5,208.333328]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[65000,4,0],[65000,3,0],[65208.332,7,0],[65208.332,0,0],[65416.6641,5,0],[65416.6641,1,0],[65625,4,0],[65625,3,0],[65833.33,6,0],[65833.33,2,0],[66041.6641,4,0],[66041.6641,3,0],[66250,7,0],[66250,0,0],[66458.33,6,0],[66458.33,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[66666.6641,1,0],[66875,3,0],[67083.33,0,0],[67291.6641,3,0],[67500,1,0],[67708.33,3,0],[67916.6641,0,0],[68125,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[68333.33,1,0],[68541.6641,3,0],[68750,0,0],[68958.33,3,0],[69166.6641,2,0],[69375,3,0],[69583.33,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[70000,1,0],[70208.33,3,0],[70416.6641,0,0],[70625,3,0],[70833.33,1,0],[71041.6641,3,0],[71250,0,0],[71458.33,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[71666.6641,1,0],[71875,3,0],[72083.33,0,0],[72291.6641,3,0],[72500,2,0],[72708.33,3,0],[72916.6641,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[73333.33,0,0],[73541.6641,3,0],[73750,1,0],[73958.33,3,0],[74062.5,2,0],[74166.6641,0,0],[74375,3,0],[74583.33,1,0],[74791.6641,3,0],[74895.83,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[75000,0,0],[75208.33,3,0],[75416.6641,1,0],[75625,3,0],[75833.33,2,0],[76041.6641,3,0],[76250,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[76666.6641,0,0],[76875,3,0],[77083.33,1,0],[77291.6641,3,0],[77395.83,2,0],[77500,0,0],[77708.33,3,0],[77916.6641,1,0],[78125,3,0],[78229.1641,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78333.33,0,0],[78541.6641,3,0],[78750,1,0],[78958.33,3,0],[79166.6641,2,0],[79375,3,0],[79583.33,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80000,2,312.5],[80416.6641,0,0],[80520.83,1,0],[80625,0,0],[80729.1641,1,0],[80833.33,3,312.5],[81250,1,0],[81458.33,0,625]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[82291.6641,1,312.5],[82708.33,3,312.5],[83125,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[83333.33,3,312.5],[83750,0,0],[83958.33,2,312.5],[84375,0,0],[84583.33,2,0],[84791.6641,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[85000,3,0],[85208.33,1,0],[85312.5,0,0],[85416.6641,3,0],[85625,1,0],[85833.33,3,0],[86041.6641,2,0],[86250,3,0],[86458.33,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[86666.6641,2,312.5],[87083.33,0,0],[87187.5,1,0],[87291.6641,0,0],[87395.83,1,0],[87500,3,312.5],[87916.6641,1,0],[88125,0,625]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[88958.33,1,312.5],[89375,3,312.5],[89791.6641,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[90000,3,312.5],[90416.6641,0,0],[90625,2,312.5],[91041.6641,0,0],[91250,2,0],[91458.33,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[91666.6641,3,0],[91875,1,0],[91979.1641,0,0],[92083.33,3,0],[92291.6641,1,0],[92500,3,0],[92708.33,2,0],[92916.6641,3,0],[93125,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[93333.33,5,833.3333],[93333.33,3,833.3333]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":false},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":144,"changeBPM":false,"mustHitSection":true}],"player2":"senpai","song":"Senpai","stage":"school","needsVoices":true,"validScore":true,"noteStyle":"pixel","bpm":144,"speed":1.3}}
\ No newline at end of file
diff --git a/assets/preload/data/senpai/senpai.json b/assets/preload/data/senpai/senpai.json
deleted file mode 100644
index b3ff03e64f..0000000000
--- a/assets/preload/data/senpai/senpai.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-pixel","gfVersion":"gf-pixel","notes":[{"sectionNotes":[[0,3,0],[416.666656,3,0],[625,0,0],[833.3333,2,312.5],[1250,1,208.333328]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[1666.66663,3,416.666656],[2291.6665,1,833.3333]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[3333.33325,3,0],[3750,3,0],[3958.33325,0,0],[4166.6665,2,312.5],[4583.333,1,208.333328]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[5000,3,312.5],[5416.6665,2,0],[5625,3,312.5],[6041.6665,2,0],[6250,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[6666.6665,5,0],[6666.6665,1,0],[7083.333,5,0],[7083.333,1,0],[7500,2,312.5],[7500,6,312.5],[7916.6665,5,0],[7916.6665,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[8333.333,4,312.5],[8333.333,3,312.5],[8750,5,0],[8750,1,0],[8958.333,7,312.5],[8958.333,0,312.5],[9375,1,0],[9375,5,0],[9583.333,7,0],[9583.333,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[10000,3,0],[10000,4,0],[10416.666,5,0],[10416.666,1,0],[10833.333,0,0],[10833.333,7,0],[11041.666,3,0],[11041.666,4,0],[11250,1,208.333328],[11250,5,208.333328]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[11666.666,4,0],[11666.666,3,0],[12083.333,5,0],[12083.333,1,0],[12500,6,0],[12500,2,0],[12708.333,4,0],[12708.333,3,0],[12916.666,7,0],[12916.666,0,0],[13125,6,0],[13125,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[13750,2,208.333328],[14166.666,1,520.8333],[14791.666,3,625]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15625,0,0],[15729.166,2,0],[16250,1,208.333328]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[16666.666,3,312.5],[17083.332,1,0],[17291.666,0,937.5]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[18333.332,1,416.666656],[18958.332,0,520.8333],[19583.332,3,312.5]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[20000,5,416.666656],[20416.666,2,208.333328],[20833.332,1,520.8333],[21458.332,3,625]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[22291.666,0,0],[22395.832,2,0],[22916.666,1,208.333328]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[23333.332,3,312.5],[23750,1,0],[23958.332,0,937.5]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[25000,1,416.666656],[25625,0,520.8333],[26250,3,312.5]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[26666.666,0,0],[26666.666,5,729.1666],[27083.332,0,0],[27500,2,0],[27500,7,729.1666],[27708.332,0,0],[27916.666,3,0],[28125,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[28333.332,7,208.333328],[28333.332,0,729.1666],[28750,5,208.333328],[29166.666,6,0],[29166.666,3,729.1666],[29375,7,0],[29583.332,4,312.5]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30000,3,0],[30000,6,729.1666],[30416.666,1,0],[30625,0,625],[30833.332,7,729.1666],[31458.332,3,416.666656]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[31666.666,0,729.1666],[32083.332,5,0],[32291.666,7,0],[32500,1,729.1666],[32708.332,4,0],[32916.6641,5,208.333328]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33333.332,0,0],[33750,0,0],[34166.6641,2,0],[34375,0,0],[34583.332,3,0],[34791.6641,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[35000,3,208.333328],[35416.6641,1,208.333328],[35833.332,2,0],[36041.6641,3,0],[36250,0,312.5]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[36666.6641,3,0],[37083.332,1,0],[37291.6641,0,625],[38125,3,416.666656]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[38750,1,0],[38958.332,3,0],[39375,0,0],[39583.332,1,208.333328]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[40000,2,312.5],[40000,6,416.666656],[40416.6641,0,0],[40520.832,1,0],[40625,0,0],[40729.1641,1,0],[40833.332,3,312.5],[41250,1,0],[41458.332,0,625]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[42291.6641,1,312.5],[42708.332,3,312.5],[43125,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[43333.332,3,312.5],[43750,0,0],[43958.332,2,312.5],[44375,0,0],[44583.332,2,0],[44791.6641,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[45000,3,0],[45416.6641,3,0],[45625,1,0],[45833.332,3,0],[46041.6641,2,0],[46250,3,0],[46458.332,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[46666.6641,2,312.5],[47083.332,0,0],[47187.5,1,0],[47291.6641,0,0],[47395.832,1,0],[47500,3,312.5],[47916.6641,1,0],[48125,0,625]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[48958.332,1,312.5],[49375,3,312.5],[49791.6641,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[50000,3,312.5],[50416.6641,0,0],[50625,2,312.5],[51041.6641,0,0],[51250,2,0],[51458.332,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[51666.6641,3,0],[52083.332,3,0],[52291.6641,1,0],[52500,3,0],[52708.332,2,0],[52916.6641,3,0],[53125,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[53333.332,3,0],[53333.332,7,416.666656],[53750,3,0],[53958.332,0,0],[54166.6641,2,312.5],[54583.332,1,208.333328]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[55000,3,416.666656],[55625,1,833.3333]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[56666.6641,3,0],[57083.332,3,0],[57291.6641,0,0],[57500,2,312.5],[57916.6641,1,208.333328]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[58333.332,3,312.5],[58750,2,0],[58958.332,3,312.5],[59375,2,0],[59583.332,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[60000,5,0],[60000,1,0],[60416.6641,5,0],[60416.6641,1,0],[60833.332,2,312.5],[60833.332,6,312.5],[61250,5,0],[61250,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61666.6641,4,312.5],[61666.6641,3,312.5],[62083.332,5,0],[62083.332,1,0],[62291.6641,7,312.5],[62291.6641,0,312.5],[62708.332,1,0],[62708.332,5,0],[62916.6641,7,0],[62916.6641,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[63333.332,3,0],[63333.332,4,0],[63750,5,0],[63750,1,0],[64166.6641,0,0],[64166.6641,7,0],[64375,3,0],[64375,4,0],[64583.332,1,208.333328],[64583.332,5,208.333328]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[65000,4,0],[65000,3,0],[65416.6641,5,0],[65416.6641,1,0],[65833.33,6,0],[65833.33,2,0],[66041.6641,4,0],[66041.6641,3,0],[66250,7,0],[66250,0,0],[66458.33,6,0],[66458.33,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[66666.6641,1,0],[66875,3,0],[67083.33,0,0],[67500,1,0],[67708.33,3,0],[67916.6641,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[68333.33,1,0],[68541.6641,3,0],[68750,0,0],[69166.6641,2,0],[69375,3,0],[69583.33,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[70000,1,0],[70208.33,3,0],[70416.6641,0,0],[70833.33,1,0],[71041.6641,3,0],[71250,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[71666.6641,1,0],[71875,3,0],[72083.33,0,0],[72500,2,0],[72708.33,3,0],[72916.6641,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[73333.33,0,0],[73541.6641,3,0],[73750,1,0],[73958.33,3,0],[74166.6641,0,0],[74375,3,0],[74583.33,1,0],[74791.6641,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[75000,0,0],[75208.33,3,0],[75416.6641,1,0],[75625,3,0],[75833.33,2,0],[76041.6641,3,0],[76250,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[76666.6641,0,0],[76875,3,0],[77083.33,1,0],[77291.6641,3,0],[77500,0,0],[77708.33,3,0],[77916.6641,1,0],[78125,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78333.33,0,0],[78541.6641,3,0],[78750,1,0],[78958.33,3,0],[79166.6641,2,0],[79375,3,0],[79583.33,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80000,2,312.5],[80416.6641,0,0],[80520.83,1,0],[80625,0,0],[80729.1641,1,0],[80833.33,3,312.5],[81250,1,0],[81458.33,0,625]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[82291.6641,1,312.5],[82708.33,3,312.5],[83125,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[83333.33,3,312.5],[83750,0,0],[83958.33,2,312.5],[84375,0,0],[84583.33,2,0],[84791.6641,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[85000,3,0],[85208.33,1,0],[85312.5,0,0],[85416.6641,3,0],[85625,1,0],[85833.33,3,0],[86041.6641,2,0],[86250,3,0],[86458.33,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[86666.6641,2,312.5],[87083.33,0,0],[87187.5,1,0],[87291.6641,0,0],[87395.83,1,0],[87500,3,312.5],[87916.6641,1,0],[88125,0,625]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[88958.33,1,312.5],[89375,3,312.5],[89791.6641,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[90000,3,312.5],[90416.6641,0,0],[90625,2,312.5],[91041.6641,0,0],[91250,2,0],[91458.33,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[91666.6641,3,0],[92083.33,3,0],[92291.6641,1,0],[92500,3,0],[92708.33,2,0],[92916.6641,3,0],[93125,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[93333.33,5,833.3333],[93333.33,3,833.3333]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":false},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":144,"changeBPM":false,"mustHitSection":true}],"player2":"senpai","song":"Senpai","stage":"school","needsVoices":true,"validScore":true,"noteStyle":"pixel","bpm":144,"speed":1.2}}
\ No newline at end of file
diff --git a/assets/preload/data/smash/smash.json b/assets/preload/data/smash/smash.json
deleted file mode 100644
index 76c3f60898..0000000000
--- a/assets/preload/data/smash/smash.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":"Smash","bpm":144,"sections":1,"notes":[{"lengthInSteps":16,"notes":[[0,0],[313,1],[729,3]]}]}
\ No newline at end of file
diff --git a/assets/preload/data/songs/blammed/_meta.json b/assets/preload/data/songs/blammed/_meta.json
new file mode 100644
index 0000000000..4c2eee6beb
--- /dev/null
+++ b/assets/preload/data/songs/blammed/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/songs/blammed/blammed-easy.json b/assets/preload/data/songs/blammed/blammed-easy.json
new file mode 100644
index 0000000000..c8d79af46e
--- /dev/null
+++ b/assets/preload/data/songs/blammed/blammed-easy.json
@@ -0,0 +1,582 @@
+{
+ "song": {
+ "player1": "bf",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [11818.1816, 1, 0],
+ [12363.6367, 0, 0],
+ [12727.2725, 3, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [13090.9092, 2, 0],
+ [13454.5449, 2, 0],
+ [14181.8184, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [14727.2725, 1, 0],
+ [15272.7275, 0, 0],
+ [15818.1816, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [16181.8184, 1, 0],
+ [17090.9082, 1, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [17636.3633, 1, 0],
+ [18181.8184, 0, 0],
+ [18545.4551, 3, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [18909.09, 2, 0],
+ [19272.7266, 2, 0],
+ [20000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [20545.4551, 1, 0],
+ [21090.9082, 0, 0],
+ [21636.3633, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [22000, 1, 0],
+ [22909.09, 1, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [23454.5449, 2, 0],
+ [24000, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [24727.2734, 3, 0],
+ [25090.9082, 0, 0],
+ [25454.5449, 2, 0],
+ [25818.1816, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26363.6367, 2, 0],
+ [26909.09, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [27636.3633, 3, 0],
+ [28000, 1, 0],
+ [28363.6367, 3, 0],
+ [28727.2715, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [29272.7266, 2, 0],
+ [29818.1816, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30545.4551, 3, 0],
+ [30909.09, 0, 0],
+ [31272.7266, 2, 0],
+ [31636.3633, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32181.8184, 2, 0],
+ [32727.2715, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33454.5469, 3, 0],
+ [33818.18, 1, 0],
+ [34181.8164, 3, 0],
+ [34545.4531, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [35090.91, 0, 0],
+ [35636.3633, 3, 0],
+ [36000, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [36363.6367, 2, 181.818176],
+ [36727.2734, 3, 0],
+ [37090.91, 2, 0],
+ [37454.5469, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [38000, 0, 0],
+ [38545.4531, 3, 0],
+ [38909.09, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [39272.7266, 0, 272.727264],
+ [39636.3633, 1, 0],
+ [40000, 3, 0],
+ [40363.6367, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [40909.09, 0, 0],
+ [41454.5469, 3, 0],
+ [41818.18, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [42181.8164, 2, 181.818176],
+ [42545.4531, 3, 0],
+ [42909.09, 2, 0],
+ [43272.7266, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [43818.18, 0, 0],
+ [44363.6367, 3, 0],
+ [44727.2734, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [45090.91, 0, 272.727264],
+ [45454.5469, 1, 0],
+ [45818.18, 3, 0],
+ [46181.8164, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [46545.4531, 0, 0],
+ [46909.09, 3, 0],
+ [47272.7266, 0, 0],
+ [47636.3633, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48000, 2, 0],
+ [48363.6367, 3, 0],
+ [48727.2734, 1, 0],
+ [49090.91, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49454.5469, 3, 0],
+ [49818.18, 3, 0],
+ [50181.8164, 2, 0],
+ [50545.4531, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [50909.09, 0, 0],
+ [51636.3633, 2, 0],
+ [52000, 2, 0],
+ [52181.8164, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [52363.6367, 0, 0],
+ [52727.2734, 3, 0],
+ [53090.91, 0, 0],
+ [53454.5469, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [53818.18, 2, 0],
+ [54181.8164, 3, 0],
+ [54545.4531, 1, 0],
+ [54909.09, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [55272.7266, 3, 0],
+ [55636.3633, 3, 0],
+ [56000, 2, 0],
+ [56181.8164, 5, 0],
+ [56363.6367, 4, 0],
+ [56363.6367, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56727.2734, 7, 0],
+ [56727.2734, 0, 0],
+ [57090.91, 6, 0],
+ [57454.543, 6, 272.727264],
+ [57454.543, 2, 0],
+ [57818.18, 7, 272.727264],
+ [57818.18, 2, 0],
+ [58000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [58181.8164, 0, 0],
+ [58545.4531, 3, 0],
+ [58909.09, 0, 0],
+ [59272.7266, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [59636.3633, 2, 0],
+ [60000, 3, 0],
+ [60363.6367, 1, 0],
+ [60727.2734, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61090.91, 3, 0],
+ [61454.543, 3, 0],
+ [61818.18, 2, 0],
+ [62181.8164, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [62545.4531, 2, 0],
+ [62727.2734, 3, 0],
+ [62909.09, 2, 0],
+ [63272.7266, 1, 0],
+ [63636.3633, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [64000, 0, 0],
+ [64363.6367, 3, 0],
+ [64727.2734, 0, 0],
+ [65090.91, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65454.543, 2, 0],
+ [65818.18, 3, 0],
+ [66181.82, 1, 0],
+ [66545.45, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [66909.09, 3, 0],
+ [67272.73, 3, 0],
+ [67636.36, 2, 0],
+ [68000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [68363.63, 2, 0],
+ [68545.45, 3, 0],
+ [68727.27, 2, 0],
+ [69090.91, 1, 0],
+ [69454.55, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [69818.18, 5, 272.727264],
+ [70000, 0, 0],
+ [70545.45, 3, 0],
+ [70909.09, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [71272.73, 2, 181.818176],
+ [71636.36, 3, 0],
+ [72000, 2, 0],
+ [72363.63, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72909.09, 0, 0],
+ [73454.55, 3, 0],
+ [73818.18, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [74181.82, 0, 272.727264],
+ [74545.45, 1, 0],
+ [74909.09, 3, 0],
+ [75272.73, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [75818.18, 0, 0],
+ [76363.63, 3, 0],
+ [76727.27, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [77090.91, 2, 181.818176],
+ [77454.55, 3, 0],
+ [77818.18, 2, 0],
+ [78181.82, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78727.27, 0, 0],
+ [79272.73, 3, 0],
+ [79636.36, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80000, 0, 272.727264],
+ [80363.63, 1, 0],
+ [80727.27, 3, 0],
+ [81090.91, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [81636.36, 0, 0],
+ [82181.82, 3, 0],
+ [82545.45, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [82909.09, 2, 181.818176],
+ [83272.73, 3, 0],
+ [83636.36, 2, 0],
+ [84000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [84545.45, 0, 0],
+ [85090.91, 3, 0],
+ [85454.55, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [85818.18, 0, 272.727264],
+ [86181.82, 1, 0],
+ [86545.45, 3, 0],
+ [86909.09, 2, 0],
+ [87090.91, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [87454.55, 0, 0],
+ [88000, 3, 0],
+ [88363.63, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [88727.27, 2, 181.818176],
+ [89090.91, 3, 0],
+ [89454.55, 2, 0],
+ [89818.18, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [90363.63, 0, 0],
+ [90909.09, 3, 0],
+ [91272.73, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [91636.36, 0, 272.727264],
+ [92000, 1, 0],
+ [92363.63, 3, 0],
+ [92727.27, 2, 0],
+ [92909.09, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 165,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "pico",
+ "song": "Blammed",
+ "stage": "philly",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 165,
+ "speed": 1.2
+ }
+}
diff --git a/assets/preload/data/songs/blammed/blammed-hard.json b/assets/preload/data/songs/blammed/blammed-hard.json
new file mode 100644
index 0000000000..baf8164076
--- /dev/null
+++ b/assets/preload/data/songs/blammed/blammed-hard.json
@@ -0,0 +1,777 @@
+{
+ "song": {
+ "player1": "bf",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [11818.1816, 1, 0],
+ [12000, 3, 0],
+ [12181.8184, 0, 0],
+ [12363.6367, 0, 0],
+ [12545.4541, 1, 0],
+ [12727.2725, 3, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [13090.9092, 2, 0],
+ [13272.7275, 0, 0],
+ [13454.5449, 2, 0],
+ [13636.3633, 3, 0],
+ [13727.2725, 0, 0],
+ [13818.1816, 3, 0],
+ [14000, 3, 0],
+ [14181.8184, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [14727.2725, 1, 0],
+ [14909.0908, 3, 0],
+ [15090.9092, 0, 0],
+ [15272.7275, 0, 0],
+ [15454.5449, 1, 0],
+ [15636.3633, 3, 0],
+ [15818.1816, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [16000, 3, 0],
+ [16181.8184, 1, 90.90909],
+ [16363.6357, 3, 0],
+ [16545.4551, 2, 0],
+ [16727.2734, 1, 90.90909],
+ [16909.09, 3, 0],
+ [17090.9082, 1, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [17636.3633, 1, 0],
+ [17818.1816, 3, 0],
+ [18000, 0, 0],
+ [18181.8184, 0, 0],
+ [18363.6367, 1, 0],
+ [18545.4551, 3, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [18909.09, 2, 0],
+ [19090.9082, 0, 0],
+ [19272.7266, 2, 0],
+ [19454.5449, 3, 0],
+ [19545.4551, 0, 0],
+ [19636.3633, 3, 0],
+ [19818.1816, 3, 0],
+ [20000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [20545.4551, 1, 0],
+ [20727.2734, 3, 0],
+ [20909.09, 0, 0],
+ [21090.9082, 0, 0],
+ [21272.7266, 1, 0],
+ [21454.5449, 3, 0],
+ [21636.3633, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [21818.1816, 3, 0],
+ [22000, 1, 90.90909],
+ [22181.8184, 3, 0],
+ [22363.6367, 2, 0],
+ [22545.4551, 1, 90.90909],
+ [22727.2734, 3, 0],
+ [22909.09, 1, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [23454.5449, 2, 0],
+ [23636.3633, 3, 0],
+ [23818.1816, 3, 0],
+ [24000, 2, 0],
+ [24181.8184, 0, 0],
+ [24363.6367, 3, 0],
+ [24545.4551, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [24727.2734, 3, 0],
+ [24909.09, 1, 0],
+ [25090.9082, 0, 0],
+ [25272.7266, 1, 0],
+ [25454.5449, 2, 0],
+ [25636.3633, 3, 0],
+ [25818.1816, 0, 0],
+ [26000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26363.6367, 2, 0],
+ [26545.4551, 3, 0],
+ [26727.2734, 3, 0],
+ [26909.09, 1, 0],
+ [27090.9082, 0, 0],
+ [27272.7266, 3, 0],
+ [27454.5449, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [27636.3633, 3, 0],
+ [27818.1816, 0, 0],
+ [28000, 1, 0],
+ [28181.8184, 1, 0],
+ [28363.6367, 3, 0],
+ [28545.4551, 2, 0],
+ [28727.2715, 0, 0],
+ [28909.09, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [29272.7266, 2, 0],
+ [29454.5449, 3, 0],
+ [29636.3633, 3, 0],
+ [29818.1816, 2, 0],
+ [30000, 0, 0],
+ [30181.8184, 3, 0],
+ [30363.6367, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30545.4551, 3, 0],
+ [30727.2715, 1, 0],
+ [30909.09, 0, 0],
+ [31090.9082, 1, 0],
+ [31272.7266, 2, 0],
+ [31454.5449, 3, 0],
+ [31636.3633, 0, 0],
+ [31818.1816, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32181.8184, 2, 0],
+ [32363.6367, 3, 0],
+ [32545.4551, 3, 0],
+ [32727.2715, 1, 0],
+ [32909.09, 0, 0],
+ [33090.91, 3, 0],
+ [33272.7266, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33454.5469, 3, 0],
+ [33636.3633, 0, 0],
+ [33818.18, 1, 0],
+ [34000, 1, 0],
+ [34181.8164, 3, 0],
+ [34363.6367, 2, 0],
+ [34545.4531, 0, 0],
+ [34727.2734, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [35090.91, 0, 0],
+ [35272.7266, 2, 181.818176],
+ [35636.3633, 3, 0],
+ [35818.18, 3, 0],
+ [36000, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [36363.6367, 2, 181.818176],
+ [36727.2734, 3, 0],
+ [37090.91, 2, 0],
+ [37454.5469, 0, 0],
+ [37636.3633, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [38000, 0, 0],
+ [38181.8164, 2, 181.818176],
+ [38545.4531, 3, 0],
+ [38727.2734, 3, 0],
+ [38909.09, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [39272.7266, 0, 272.727264],
+ [39636.3633, 1, 0],
+ [40000, 3, 0],
+ [40090.91, 3, 0],
+ [40181.8164, 1, 0],
+ [40363.6367, 2, 0],
+ [40545.4531, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [40909.09, 0, 0],
+ [41090.91, 2, 181.818176],
+ [41454.5469, 3, 0],
+ [41636.3633, 3, 0],
+ [41818.18, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [42181.8164, 2, 181.818176],
+ [42545.4531, 3, 0],
+ [42909.09, 2, 0],
+ [43272.7266, 0, 0],
+ [43454.5469, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [43818.18, 0, 0],
+ [44000, 2, 181.818176],
+ [44363.6367, 3, 0],
+ [44545.4531, 3, 0],
+ [44727.2734, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [45090.91, 0, 272.727264],
+ [45454.5469, 1, 0],
+ [45818.18, 3, 0],
+ [45909.09, 3, 0],
+ [46000, 1, 0],
+ [46181.8164, 2, 0],
+ [46363.6367, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [46545.4531, 0, 0],
+ [46727.2734, 0, 0],
+ [46909.09, 3, 0],
+ [47090.91, 1, 0],
+ [47181.8164, 3, 0],
+ [47272.7266, 1, 0],
+ [47454.5469, 0, 0],
+ [47636.3633, 1, 0],
+ [47818.18, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48000, 2, 0],
+ [48181.8164, 2, 0],
+ [48363.6367, 3, 0],
+ [48545.4531, 2, 0],
+ [48727.2734, 1, 0],
+ [48909.09, 0, 0],
+ [49000, 1, 0],
+ [49090.91, 0, 0],
+ [49272.7266, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49454.5469, 3, 0],
+ [49636.3633, 3, 0],
+ [49818.18, 3, 0],
+ [50000, 2, 0],
+ [50090.91, 0, 0],
+ [50181.8164, 2, 0],
+ [50363.6367, 0, 0],
+ [50545.4531, 0, 0],
+ [50727.2734, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [50909.09, 0, 0],
+ [51090.91, 0, 0],
+ [51272.7266, 3, 0],
+ [51454.5469, 3, 0],
+ [51636.3633, 2, 0],
+ [51818.18, 0, 0],
+ [52000, 2, 0],
+ [52181.8164, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [52363.6367, 0, 0],
+ [52545.4531, 0, 0],
+ [52727.2734, 3, 0],
+ [52909.09, 1, 0],
+ [53000, 3, 0],
+ [53090.91, 1, 0],
+ [53272.7266, 0, 0],
+ [53454.5469, 1, 0],
+ [53636.3633, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [53818.18, 2, 0],
+ [54000, 2, 0],
+ [54181.8164, 3, 0],
+ [54363.6367, 2, 0],
+ [54545.4531, 1, 0],
+ [54727.2734, 0, 0],
+ [54818.18, 1, 0],
+ [54909.09, 0, 0],
+ [55090.91, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [55272.7266, 3, 0],
+ [55454.5469, 3, 0],
+ [55636.3633, 3, 0],
+ [55818.18, 2, 0],
+ [55909.09, 0, 0],
+ [56000, 2, 0],
+ [56181.8164, 5, 0],
+ [56181.8164, 0, 0],
+ [56363.6367, 4, 0],
+ [56363.6367, 0, 0],
+ [56545.4531, 4, 0],
+ [56545.4531, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56727.2734, 7, 0],
+ [56727.2734, 0, 0],
+ [56909.09, 7, 0],
+ [56909.09, 0, 0],
+ [57090.91, 6, 0],
+ [57090.91, 3, 0],
+ [57272.7266, 7, 0],
+ [57272.7266, 3, 0],
+ [57454.543, 6, 272.727264],
+ [57454.543, 2, 0],
+ [57636.3633, 0, 0],
+ [57818.18, 7, 272.727264],
+ [57818.18, 2, 0],
+ [58000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [58181.8164, 0, 0],
+ [58363.6367, 0, 0],
+ [58545.4531, 3, 0],
+ [58727.2734, 1, 0],
+ [58818.18, 3, 0],
+ [58909.09, 1, 0],
+ [59090.91, 0, 0],
+ [59272.7266, 1, 0],
+ [59454.543, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [59636.3633, 2, 0],
+ [59818.18, 2, 0],
+ [60000, 3, 0],
+ [60181.8164, 2, 0],
+ [60363.6367, 1, 0],
+ [60545.4531, 0, 0],
+ [60636.3633, 1, 0],
+ [60727.2734, 0, 0],
+ [60909.09, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61090.91, 3, 0],
+ [61272.7266, 3, 0],
+ [61454.543, 3, 0],
+ [61636.3633, 2, 0],
+ [61727.2734, 0, 0],
+ [61818.18, 2, 0],
+ [62000, 0, 0],
+ [62181.8164, 0, 0],
+ [62363.6367, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [62545.4531, 2, 0],
+ [62727.2734, 3, 0],
+ [62909.09, 2, 0],
+ [63090.91, 0, 0],
+ [63272.7266, 1, 0],
+ [63454.543, 0, 0],
+ [63636.3633, 2, 0],
+ [63818.18, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [64000, 0, 0],
+ [64181.8164, 0, 0],
+ [64363.6367, 3, 0],
+ [64545.4531, 1, 0],
+ [64636.3633, 3, 0],
+ [64727.2734, 1, 0],
+ [64909.09, 0, 0],
+ [65090.91, 1, 0],
+ [65272.7266, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65454.543, 2, 0],
+ [65636.36, 2, 0],
+ [65818.18, 3, 0],
+ [66000, 2, 0],
+ [66181.82, 1, 0],
+ [66363.63, 0, 0],
+ [66454.55, 1, 0],
+ [66545.45, 0, 0],
+ [66727.27, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [66909.09, 3, 0],
+ [67090.91, 3, 0],
+ [67272.73, 3, 0],
+ [67454.55, 2, 0],
+ [67545.45, 0, 0],
+ [67636.36, 2, 0],
+ [67818.18, 0, 0],
+ [68000, 0, 0],
+ [68181.82, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [68363.63, 2, 0],
+ [68545.45, 3, 0],
+ [68727.27, 2, 0],
+ [68909.09, 0, 0],
+ [69090.91, 1, 0],
+ [69272.73, 0, 0],
+ [69454.55, 2, 0],
+ [69636.36, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [69818.18, 5, 272.727264],
+ [70000, 0, 0],
+ [70181.82, 2, 181.818176],
+ [70545.45, 3, 0],
+ [70727.27, 3, 0],
+ [70909.09, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [71272.73, 2, 181.818176],
+ [71636.36, 3, 0],
+ [72000, 2, 0],
+ [72363.63, 0, 0],
+ [72545.45, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72909.09, 0, 0],
+ [73090.91, 2, 181.818176],
+ [73454.55, 3, 0],
+ [73636.36, 3, 0],
+ [73818.18, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [74181.82, 0, 272.727264],
+ [74545.45, 1, 0],
+ [74909.09, 3, 0],
+ [75000, 3, 0],
+ [75090.91, 1, 0],
+ [75272.73, 2, 0],
+ [75454.55, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [75818.18, 0, 0],
+ [76000, 2, 181.818176],
+ [76363.63, 3, 0],
+ [76545.45, 3, 0],
+ [76727.27, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [77090.91, 2, 181.818176],
+ [77454.55, 3, 0],
+ [77818.18, 2, 0],
+ [78181.82, 0, 0],
+ [78363.63, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78727.27, 0, 0],
+ [78909.09, 2, 181.818176],
+ [79272.73, 3, 0],
+ [79454.55, 3, 0],
+ [79636.36, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80000, 0, 272.727264],
+ [80363.63, 1, 0],
+ [80727.27, 3, 0],
+ [80818.18, 3, 0],
+ [80909.09, 1, 0],
+ [81090.91, 2, 0],
+ [81272.73, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [81636.36, 0, 0],
+ [81727.27, 0, 0],
+ [81818.18, 2, 181.818176],
+ [82181.82, 3, 0],
+ [82363.63, 3, 0],
+ [82545.45, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [82909.09, 2, 181.818176],
+ [83272.73, 3, 0],
+ [83636.36, 2, 0],
+ [84000, 0, 0],
+ [84181.82, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [84545.45, 0, 0],
+ [84727.27, 2, 181.818176],
+ [85090.91, 3, 0],
+ [85272.73, 3, 0],
+ [85454.55, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [85818.18, 0, 272.727264],
+ [86181.82, 1, 0],
+ [86545.45, 3, 0],
+ [86636.36, 3, 0],
+ [86727.27, 1, 0],
+ [86909.09, 2, 0],
+ [87090.91, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [87454.55, 0, 0],
+ [87545.45, 0, 0],
+ [87636.36, 2, 181.818176],
+ [88000, 3, 0],
+ [88181.82, 3, 0],
+ [88363.63, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [88727.27, 2, 181.818176],
+ [89090.91, 3, 0],
+ [89454.55, 2, 0],
+ [89818.18, 0, 0],
+ [90000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [90363.63, 0, 0],
+ [90545.45, 2, 181.818176],
+ [90909.09, 3, 0],
+ [91090.91, 3, 0],
+ [91272.73, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [91636.36, 0, 272.727264],
+ [92000, 1, 0],
+ [92363.63, 3, 0],
+ [92454.55, 3, 0],
+ [92545.45, 1, 0],
+ [92727.27, 2, 0],
+ [92909.09, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 165,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "pico",
+ "song": "Blammed",
+ "stage": "philly",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 165,
+ "speed": 2.3
+ }
+}
diff --git a/assets/preload/data/songs/blammed/blammed.json b/assets/preload/data/songs/blammed/blammed.json
new file mode 100644
index 0000000000..0157998132
--- /dev/null
+++ b/assets/preload/data/songs/blammed/blammed.json
@@ -0,0 +1,646 @@
+{
+ "song": {
+ "player1": "bf",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [11818.1816, 1, 0],
+ [12363.6367, 0, 0],
+ [12727.2725, 3, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [13090.9092, 2, 0],
+ [13454.5449, 2, 0],
+ [13818.1816, 3, 0],
+ [14181.8184, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [14727.2725, 1, 0],
+ [15272.7275, 0, 0],
+ [15818.1816, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [16181.8184, 1, 0],
+ [16727.2734, 1, 90.90909],
+ [17090.9082, 1, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [17636.3633, 1, 0],
+ [18181.8184, 0, 0],
+ [18545.4551, 3, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [18909.09, 2, 0],
+ [19272.7266, 2, 0],
+ [19636.3633, 3, 0],
+ [20000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [20545.4551, 1, 0],
+ [21090.9082, 0, 0],
+ [21636.3633, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [22000, 1, 0],
+ [22545.4551, 1, 90.90909],
+ [22909.09, 1, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [23454.5449, 2, 0],
+ [24000, 2, 0],
+ [24181.8184, 0, 0],
+ [24545.4551, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [24727.2734, 3, 0],
+ [25090.9082, 0, 0],
+ [25454.5449, 2, 0],
+ [25818.1816, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26363.6367, 2, 0],
+ [26909.09, 1, 0],
+ [27090.9082, 0, 0],
+ [27454.5449, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [27636.3633, 3, 0],
+ [28000, 1, 0],
+ [28363.6367, 3, 0],
+ [28727.2715, 0, 0],
+ [28909.09, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [29272.7266, 2, 0],
+ [29818.1816, 2, 0],
+ [30000, 0, 0],
+ [30363.6367, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30545.4551, 3, 0],
+ [30909.09, 0, 0],
+ [31272.7266, 2, 0],
+ [31636.3633, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32181.8184, 2, 0],
+ [32727.2715, 1, 0],
+ [32909.09, 0, 0],
+ [33272.7266, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33454.5469, 3, 0],
+ [33818.18, 1, 0],
+ [34181.8164, 3, 0],
+ [34545.4531, 0, 0],
+ [34727.2734, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [35090.91, 0, 0],
+ [35636.3633, 3, 0],
+ [36000, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [36363.6367, 2, 181.818176],
+ [36727.2734, 3, 0],
+ [37090.91, 2, 0],
+ [37454.5469, 0, 0],
+ [37636.3633, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [38000, 0, 0],
+ [38545.4531, 3, 0],
+ [38909.09, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [39272.7266, 0, 272.727264],
+ [39636.3633, 1, 0],
+ [40000, 3, 0],
+ [40363.6367, 2, 0],
+ [40545.4531, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [40909.09, 0, 0],
+ [41454.5469, 3, 0],
+ [41818.18, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [42181.8164, 2, 181.818176],
+ [42545.4531, 3, 0],
+ [42909.09, 2, 0],
+ [43272.7266, 0, 0],
+ [43454.5469, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [43818.18, 0, 0],
+ [44363.6367, 3, 0],
+ [44727.2734, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [45090.91, 0, 272.727264],
+ [45454.5469, 1, 0],
+ [45818.18, 3, 0],
+ [46181.8164, 2, 0],
+ [46363.6367, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [46545.4531, 0, 0],
+ [46909.09, 3, 0],
+ [47272.7266, 1, 0],
+ [47454.5469, 0, 0],
+ [47636.3633, 1, 0],
+ [47818.18, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48000, 2, 0],
+ [48363.6367, 3, 0],
+ [48727.2734, 1, 0],
+ [48909.09, 0, 0],
+ [49090.91, 0, 0],
+ [49272.7266, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49454.5469, 3, 0],
+ [49818.18, 3, 0],
+ [50181.8164, 2, 0],
+ [50363.6367, 0, 0],
+ [50545.4531, 0, 0],
+ [50727.2734, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [50909.09, 0, 0],
+ [51272.7266, 3, 0],
+ [51636.3633, 2, 0],
+ [51818.18, 0, 0],
+ [52000, 2, 0],
+ [52181.8164, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [52363.6367, 0, 0],
+ [52727.2734, 3, 0],
+ [53090.91, 1, 0],
+ [53272.7266, 0, 0],
+ [53454.5469, 1, 0],
+ [53636.3633, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [53818.18, 2, 0],
+ [54181.8164, 3, 0],
+ [54545.4531, 1, 0],
+ [54727.2734, 0, 0],
+ [54909.09, 0, 0],
+ [55090.91, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [55272.7266, 3, 0],
+ [55636.3633, 3, 0],
+ [56000, 2, 0],
+ [56181.8164, 5, 0],
+ [56181.8164, 0, 0],
+ [56363.6367, 4, 0],
+ [56363.6367, 0, 0],
+ [56545.4531, 4, 0],
+ [56545.4531, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56727.2734, 7, 0],
+ [56727.2734, 0, 0],
+ [57090.91, 6, 0],
+ [57090.91, 3, 0],
+ [57272.7266, 7, 0],
+ [57454.543, 6, 272.727264],
+ [57454.543, 2, 0],
+ [57636.3633, 0, 0],
+ [57818.18, 7, 272.727264],
+ [57818.18, 2, 0],
+ [58000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [58181.8164, 0, 0],
+ [58545.4531, 3, 0],
+ [58909.09, 1, 0],
+ [59090.91, 0, 0],
+ [59272.7266, 1, 0],
+ [59454.543, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [59636.3633, 2, 0],
+ [60000, 3, 0],
+ [60363.6367, 1, 0],
+ [60545.4531, 0, 0],
+ [60727.2734, 0, 0],
+ [60909.09, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61090.91, 3, 0],
+ [61454.543, 3, 0],
+ [61818.18, 2, 0],
+ [62000, 0, 0],
+ [62181.8164, 0, 0],
+ [62363.6367, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [62545.4531, 2, 0],
+ [62727.2734, 3, 0],
+ [62909.09, 2, 0],
+ [63090.91, 0, 0],
+ [63272.7266, 1, 0],
+ [63636.3633, 2, 0],
+ [63818.18, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [64000, 0, 0],
+ [64363.6367, 3, 0],
+ [64727.2734, 1, 0],
+ [64909.09, 0, 0],
+ [65090.91, 1, 0],
+ [65272.7266, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65454.543, 2, 0],
+ [65818.18, 3, 0],
+ [66181.82, 1, 0],
+ [66363.63, 0, 0],
+ [66545.45, 0, 0],
+ [66727.27, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [66909.09, 3, 0],
+ [67272.73, 3, 0],
+ [67636.36, 2, 0],
+ [67818.18, 0, 0],
+ [68000, 0, 0],
+ [68181.82, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [68363.63, 2, 0],
+ [68545.45, 3, 0],
+ [68727.27, 2, 0],
+ [68909.09, 0, 0],
+ [69090.91, 1, 0],
+ [69454.55, 2, 0],
+ [69636.36, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [69818.18, 5, 272.727264],
+ [70000, 0, 0],
+ [70181.82, 2, 181.818176],
+ [70545.45, 3, 0],
+ [70909.09, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [71272.73, 2, 181.818176],
+ [71636.36, 3, 0],
+ [72000, 2, 0],
+ [72363.63, 0, 0],
+ [72545.45, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72909.09, 0, 0],
+ [73454.55, 3, 0],
+ [73818.18, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [74181.82, 0, 272.727264],
+ [74545.45, 1, 0],
+ [74909.09, 3, 0],
+ [75272.73, 2, 0],
+ [75454.55, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [75818.18, 0, 0],
+ [76000, 2, 181.818176],
+ [76363.63, 3, 0],
+ [76727.27, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [77090.91, 2, 181.818176],
+ [77454.55, 3, 0],
+ [77818.18, 2, 0],
+ [78181.82, 0, 0],
+ [78363.63, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78727.27, 0, 0],
+ [79272.73, 3, 0],
+ [79636.36, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80000, 0, 272.727264],
+ [80363.63, 1, 0],
+ [80727.27, 3, 0],
+ [81090.91, 2, 0],
+ [81272.73, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [81636.36, 0, 0],
+ [81818.18, 2, 181.818176],
+ [82181.82, 3, 0],
+ [82545.45, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [82909.09, 2, 181.818176],
+ [83272.73, 3, 0],
+ [83636.36, 2, 0],
+ [84000, 0, 0],
+ [84181.82, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [84545.45, 0, 0],
+ [84727.27, 2, 181.818176],
+ [85090.91, 3, 0],
+ [85454.55, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [85818.18, 0, 272.727264],
+ [86181.82, 1, 0],
+ [86545.45, 3, 0],
+ [86909.09, 2, 0],
+ [87090.91, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [87454.55, 0, 0],
+ [87636.36, 2, 181.818176],
+ [88000, 3, 0],
+ [88363.63, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [88727.27, 2, 181.818176],
+ [89090.91, 3, 0],
+ [89454.55, 2, 0],
+ [89818.18, 0, 0],
+ [90000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [90363.63, 0, 0],
+ [90545.45, 2, 181.818176],
+ [90909.09, 3, 0],
+ [91272.73, 1, 272.727264]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [91636.36, 0, 272.727264],
+ [92000, 1, 0],
+ [92363.63, 3, 0],
+ [92727.27, 2, 0],
+ [92909.09, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 165,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "pico",
+ "song": "Blammed",
+ "stage": "philly",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 165,
+ "speed": 1.5
+ }
+}
diff --git a/assets/preload/data/songs/bopeebo/_meta.json b/assets/preload/data/songs/bopeebo/_meta.json
new file mode 100644
index 0000000000..4c2eee6beb
--- /dev/null
+++ b/assets/preload/data/songs/bopeebo/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/songs/bopeebo/bopeebo-easy.json b/assets/preload/data/songs/bopeebo/bopeebo-easy.json
new file mode 100644
index 0000000000..d05fdcd9b4
--- /dev/null
+++ b/assets/preload/data/songs/bopeebo/bopeebo-easy.json
@@ -0,0 +1,311 @@
+{
+ "song": {
+ "song": "Bopeebo",
+ "bpm": 100.0,
+ "needsVoices": true,
+ "player1": "bf",
+ "player2": "dad",
+ "speed": 1.0,
+ "notes": [
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [0.0, 2, 0.0],
+ [600.0, 3, 450.0],
+ [1200.0, 3, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [2400.0, 2, 0.0],
+ [3000.0, 3, 450.0],
+ [3600.0, 3, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [4800.0, 1, 300.0],
+ [5400.0, 0, 300.0],
+ [6000.0, 3, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [7200.0, 1, 300.0],
+ [7800.0, 0, 300.0],
+ [8400.0, 3, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [9600.0, 1, 0.0],
+ [10200.0, 3, 0.0],
+ [10500.0, 0, 0.0],
+ [10800.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [12000.0, 1, 0.0],
+ [12600.0, 3, 0.0],
+ [12900.0, 0, 0.0],
+ [13200.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [14400.0, 3, 0.0],
+ [14700.0, 1, 0.0],
+ [15300.0, 0, 0.0],
+ [15600.0, 2, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [16800.0, 3, 0.0],
+ [17100.0, 1, 0.0],
+ [17700.0, 0, 0.0],
+ [18000.0, 2, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [19200.0, 0, 0.0],
+ [19500.0, 3, 0.0],
+ [19800.0, 1, 900.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [21600.0, 0, 0.0],
+ [21900.0, 3, 0.0],
+ [22200.0, 1, 900.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [24000.0, 1, 0.0],
+ [24300.0, 3, 0.0],
+ [24600.0, 0, 900.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [26400.0, 1, 0.0],
+ [26700.0, 3, 0.0],
+ [27000.0, 0, 900.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [28800.0, 2, 0.0],
+ [29100.0, 3, 0.0],
+ [29400.0, 0, 1200.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [31200.0, 2, 0.0],
+ [31500.0, 3, 0.0],
+ [31800.0, 0, 1200.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [33600.0, 0, 0.0],
+ [33900.0, 3, 0.0],
+ [34500.0, 2, 0.0],
+ [34800.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [36000.0, 0, 0.0],
+ [36300.0, 3, 0.0],
+ [36900.0, 2, 0.0],
+ [37200.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [38400.0, 2, 450.0],
+ [39000.0, 3, 300.0],
+ [39600.0, 0, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [40800.0, 2, 450.0],
+ [41400.0, 3, 300.0],
+ [42000.0, 0, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [43200.0, 1, 0.0],
+ [43800.0, 2, 0.0],
+ [44400.0, 1, 0.0],
+ [44700.0, 1, 0.0],
+ [45000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [45600.0, 1, 0.0],
+ [46200.0, 2, 0.0],
+ [46800.0, 1, 0.0],
+ [47100.0, 1, 0.0],
+ [47400.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [48000.0, 2, 450.0],
+ [48600.0, 3, 300.0],
+ [49200.0, 0, 450.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [50400.0, 2, 450.0],
+ [51000.0, 3, 300.0],
+ [51600.0, 0, 450.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [[52800.0, 3, 1800.0]]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [[55200.0, 3, 1800.0]]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [57600.0, 2, 0.0],
+ [57900.0, 3, 0.0],
+ [58200.0, 0, 1200.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [60000.0, 2, 0.0],
+ [60300.0, 3, 0.0],
+ [60600.0, 0, 1200.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [62400.0, 0, 0.0],
+ [62700.0, 3, 0.0],
+ [63300.0, 2, 0.0],
+ [63600.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [64800.0, 0, 0.0],
+ [65100.0, 3, 0.0],
+ [65700.0, 2, 0.0],
+ [66000.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [67200.0, 2, 0.0],
+ [67500.0, 3, 0.0],
+ [67800.0, 0, 0.0],
+ [68100.0, 2, 0.0],
+ [68400.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [69600.0, 2, 0.0],
+ [69900.0, 3, 0.0],
+ [70200.0, 0, 0.0],
+ [70500.0, 2, 0.0],
+ [70800.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [72000.0, 0, 0.0],
+ [72300.0, 3, 0.0],
+ [72900.0, 2, 0.0],
+ [73200.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [74400.0, 0, 0.0],
+ [74700.0, 3, 0.0],
+ [75300.0, 2, 0.0],
+ [75600.0, 1, 600.0]
+ ]
+ }
+ ]
+ },
+ "generatedBy": "SNIFF ver.6"
+}
diff --git a/assets/preload/data/songs/bopeebo/bopeebo-hard.json b/assets/preload/data/songs/bopeebo/bopeebo-hard.json
new file mode 100644
index 0000000000..2b268533d5
--- /dev/null
+++ b/assets/preload/data/songs/bopeebo/bopeebo-hard.json
@@ -0,0 +1,325 @@
+{
+ "song": {
+ "song": "Bopeebo",
+ "bpm": 100.0,
+ "needsVoices": true,
+ "player1": "bf",
+ "player2": "dad",
+ "speed": 1.3,
+ "notes": [
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [0.0, 2, 0.0],
+ [600.0, 3, 600.0],
+ [1200.0, 3, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [2400.0, 2, 0.0],
+ [3000.0, 3, 600.0],
+ [3600.0, 3, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [4800.0, 1, 300.0],
+ [5400.0, 0, 300.0],
+ [6000.0, 3, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [7200.0, 1, 300.0],
+ [7800.0, 0, 300.0],
+ [8400.0, 3, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [9600.0, 1, 300.0],
+ [10200.0, 3, 0.0],
+ [10500.0, 0, 0.0],
+ [10800.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [12000.0, 1, 300.0],
+ [12600.0, 3, 0.0],
+ [12900.0, 0, 0.0],
+ [13200.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [14400.0, 3, 0.0],
+ [14700.0, 1, 0.0],
+ [15300.0, 0, 0.0],
+ [15600.0, 2, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [16800.0, 3, 0.0],
+ [17100.0, 1, 0.0],
+ [17700.0, 0, 0.0],
+ [18000.0, 2, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [19200.0, 0, 0.0],
+ [19500.0, 3, 0.0],
+ [19800.0, 1, 900.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [21600.0, 0, 0.0],
+ [21900.0, 3, 0.0],
+ [22200.0, 1, 900.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [24000.0, 1, 0.0],
+ [24300.0, 3, 0.0],
+ [24600.0, 0, 900.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [26400.0, 1, 0.0],
+ [26700.0, 3, 0.0],
+ [27000.0, 0, 900.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [28800.0, 2, 0.0],
+ [29100.0, 3, 0.0],
+ [29400.0, 0, 1200.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [31200.0, 2, 0.0],
+ [31500.0, 3, 0.0],
+ [31800.0, 0, 1200.0],
+ [33300.0, 6, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [33600.0, 0, 0.0],
+ [33900.0, 3, 0.0],
+ [34500.0, 2, 0.0],
+ [34575.0, 0, 0.0],
+ [34800.0, 1, 600.0],
+ [35700.0, 6, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [36000.0, 0, 0.0],
+ [36300.0, 3, 0.0],
+ [36900.0, 2, 0.0],
+ [36975.0, 0, 0.0],
+ [37200.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [38400.0, 2, 450.0],
+ [39000.0, 3, 300.0],
+ [39600.0, 0, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [40800.0, 2, 450.0],
+ [41400.0, 3, 300.0],
+ [42000.0, 0, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [43200.0, 1, 0.0],
+ [43800.0, 2, 0.0],
+ [44400.0, 1, 0.0],
+ [44550.0, 1, 0.0],
+ [44700.0, 1, 0.0],
+ [45000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [45600.0, 1, 0.0],
+ [46200.0, 2, 0.0],
+ [46800.0, 1, 0.0],
+ [46950.0, 1, 0.0],
+ [47100.0, 1, 0.0],
+ [47400.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [48000.0, 2, 450.0],
+ [48600.0, 3, 300.0],
+ [49200.0, 0, 450.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [50400.0, 2, 450.0],
+ [51000.0, 3, 300.0],
+ [51600.0, 0, 450.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [[52800.0, 3, 1800.0]]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [[55200.0, 3, 1800.0]]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [57600.0, 2, 0.0],
+ [57900.0, 3, 0.0],
+ [58200.0, 0, 1200.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [60000.0, 2, 0.0],
+ [60300.0, 3, 0.0],
+ [60600.0, 0, 1200.0],
+ [62100.0, 6, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [62400.0, 0, 0.0],
+ [62700.0, 3, 0.0],
+ [63300.0, 2, 0.0],
+ [63375.0, 0, 0.0],
+ [63600.0, 1, 600.0],
+ [64500.0, 6, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [64800.0, 0, 0.0],
+ [65100.0, 3, 0.0],
+ [65700.0, 2, 0.0],
+ [65775.0, 0, 0.0],
+ [66000.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [67200.0, 2, 0.0],
+ [67500.0, 3, 0.0],
+ [67800.0, 0, 0.0],
+ [68100.0, 2, 0.0],
+ [68400.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [69600.0, 2, 0.0],
+ [69900.0, 3, 0.0],
+ [70200.0, 0, 0.0],
+ [70500.0, 2, 0.0],
+ [70800.0, 1, 600.0],
+ [71700.0, 6, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [72000.0, 0, 0.0],
+ [72300.0, 3, 0.0],
+ [72900.0, 2, 0.0],
+ [72975.0, 0, 0.0],
+ [73200.0, 1, 600.0],
+ [74100.0, 6, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [74400.0, 0, 0.0],
+ [74700.0, 3, 0.0],
+ [75300.0, 2, 0.0],
+ [75375.0, 0, 0.0],
+ [75600.0, 1, 600.0]
+ ]
+ }
+ ]
+ },
+ "generatedBy": "SNIFF ver.6"
+}
diff --git a/assets/preload/data/songs/bopeebo/bopeebo.json b/assets/preload/data/songs/bopeebo/bopeebo.json
new file mode 100644
index 0000000000..27825b5bb6
--- /dev/null
+++ b/assets/preload/data/songs/bopeebo/bopeebo.json
@@ -0,0 +1,319 @@
+{
+ "song": {
+ "song": "Bopeebo",
+ "bpm": 100.0,
+ "needsVoices": true,
+ "player1": "bf",
+ "player2": "dad",
+ "speed": 1.0,
+ "notes": [
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [0.0, 2, 0.0],
+ [600.0, 3, 600.0],
+ [1200.0, 3, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [2400.0, 2, 0.0],
+ [3000.0, 3, 600.0],
+ [3600.0, 3, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [4800.0, 1, 300.0],
+ [5400.0, 0, 300.0],
+ [6000.0, 3, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [7200.0, 1, 300.0],
+ [7800.0, 0, 300.0],
+ [8400.0, 3, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [9600.0, 1, 300.0],
+ [10200.0, 3, 0.0],
+ [10500.0, 0, 0.0],
+ [10800.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [12000.0, 1, 300.0],
+ [12600.0, 3, 0.0],
+ [12900.0, 0, 0.0],
+ [13200.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [14400.0, 3, 0.0],
+ [14700.0, 1, 0.0],
+ [15300.0, 0, 0.0],
+ [15600.0, 2, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [16800.0, 3, 0.0],
+ [17100.0, 1, 0.0],
+ [17700.0, 0, 0.0],
+ [18000.0, 2, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [19200.0, 0, 0.0],
+ [19500.0, 3, 0.0],
+ [19800.0, 1, 900.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [21600.0, 0, 0.0],
+ [21900.0, 3, 0.0],
+ [22200.0, 1, 900.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [24000.0, 1, 0.0],
+ [24300.0, 3, 0.0],
+ [24600.0, 0, 900.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [26400.0, 1, 0.0],
+ [26700.0, 3, 0.0],
+ [27000.0, 0, 900.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [28800.0, 2, 0.0],
+ [29100.0, 3, 0.0],
+ [29400.0, 0, 1200.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [31200.0, 2, 0.0],
+ [31500.0, 3, 0.0],
+ [31800.0, 0, 1200.0],
+ [33300.0, 6, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [33600.0, 0, 0.0],
+ [33900.0, 3, 0.0],
+ [34500.0, 2, 0.0],
+ [34800.0, 1, 600.0],
+ [35700.0, 6, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [36000.0, 0, 0.0],
+ [36300.0, 3, 0.0],
+ [36900.0, 2, 0.0],
+ [37200.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [38400.0, 2, 450.0],
+ [39000.0, 3, 300.0],
+ [39600.0, 0, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [40800.0, 2, 450.0],
+ [41400.0, 3, 300.0],
+ [42000.0, 0, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [43200.0, 1, 0.0],
+ [43800.0, 2, 0.0],
+ [44400.0, 1, 0.0],
+ [44550.0, 1, 0.0],
+ [44700.0, 1, 0.0],
+ [45000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [45600.0, 1, 0.0],
+ [46200.0, 2, 0.0],
+ [46800.0, 1, 0.0],
+ [46950.0, 1, 0.0],
+ [47100.0, 1, 0.0],
+ [47400.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [48000.0, 2, 450.0],
+ [48600.0, 3, 300.0],
+ [49200.0, 0, 450.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [50400.0, 2, 450.0],
+ [51000.0, 3, 300.0],
+ [51600.0, 0, 450.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [[52800.0, 3, 1800.0]]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [[55200.0, 3, 1800.0]]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [57600.0, 2, 0.0],
+ [57900.0, 3, 0.0],
+ [58200.0, 0, 1200.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [60000.0, 2, 0.0],
+ [60300.0, 3, 0.0],
+ [60600.0, 0, 1200.0],
+ [62100.0, 6, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [62400.0, 0, 0.0],
+ [62700.0, 3, 0.0],
+ [63300.0, 2, 0.0],
+ [63600.0, 1, 600.0],
+ [64500.0, 6, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [64800.0, 0, 0.0],
+ [65100.0, 3, 0.0],
+ [65700.0, 2, 0.0],
+ [66000.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [67200.0, 2, 0.0],
+ [67500.0, 3, 0.0],
+ [67800.0, 0, 0.0],
+ [68100.0, 2, 0.0],
+ [68400.0, 1, 600.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [69600.0, 2, 0.0],
+ [69900.0, 3, 0.0],
+ [70200.0, 0, 0.0],
+ [70500.0, 2, 0.0],
+ [70800.0, 1, 600.0],
+ [71700.0, 6, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [72000.0, 0, 0.0],
+ [72300.0, 3, 0.0],
+ [72900.0, 2, 0.0],
+ [73200.0, 1, 600.0],
+ [74100.0, 6, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [74400.0, 0, 0.0],
+ [74700.0, 3, 0.0],
+ [75300.0, 2, 0.0],
+ [75600.0, 1, 600.0]
+ ]
+ }
+ ]
+ },
+ "generatedBy": "SNIFF ver.6"
+}
diff --git a/assets/preload/data/songs/cocoa/_meta.json b/assets/preload/data/songs/cocoa/_meta.json
new file mode 100644
index 0000000000..4c2eee6beb
--- /dev/null
+++ b/assets/preload/data/songs/cocoa/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/songs/cocoa/cocoa-easy.json b/assets/preload/data/songs/cocoa/cocoa-easy.json
new file mode 100644
index 0000000000..b1568eb112
--- /dev/null
+++ b/assets/preload/data/songs/cocoa/cocoa-easy.json
@@ -0,0 +1,543 @@
+{
+ "song": {
+ "player1": "bf-christmas",
+ "gfVersion": "gf-christmas",
+ "notes": [
+ {
+ "sectionNotes": [
+ [0, 0, 0],
+ [600, 2, 0],
+ [1350, 1, 0],
+ [1650, 3, 0],
+ [2100, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [2400, 0, 0],
+ [3000, 2, 0],
+ [3750, 1, 0],
+ [4050, 3, 0],
+ [4500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [4800, 0, 0],
+ [5400, 2, 0],
+ [5700, 0, 0],
+ [6300, 2, 0],
+ [6600, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [7200, 2, 0],
+ [7500, 0, 0],
+ [8100, 2, 0],
+ [8400, 0, 0],
+ [9000, 2, 0],
+ [9300, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [9600, 0, 0],
+ [10200, 2, 0],
+ [10950, 1, 0],
+ [11250, 3, 0],
+ [11700, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [12000, 0, 0],
+ [12600, 2, 0],
+ [13350, 1, 0],
+ [13650, 3, 0],
+ [14100, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [14400, 0, 0],
+ [15000, 2, 0],
+ [15300, 0, 0],
+ [15900, 2, 0],
+ [16200, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [16800, 2, 0],
+ [17100, 0, 0],
+ [17700, 2, 0],
+ [18000, 0, 0],
+ [18600, 2, 0],
+ [18900, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [19500, 3, 150],
+ [19800, 1, 450],
+ [20400, 2, 1050]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [22500, 1, 0],
+ [23100, 1, 0],
+ [23400, 3, 0],
+ [23700, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [24000, 0, 0],
+ [24600, 2, 0],
+ [24900, 0, 0],
+ [25500, 2, 0],
+ [25800, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [26400, 2, 0],
+ [26700, 0, 0],
+ [27300, 2, 0],
+ [27600, 0, 0],
+ [28200, 2, 0],
+ [28500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [28800, 6, 600],
+ [29100, 3, 150],
+ [29400, 1, 450],
+ [30000, 2, 1050]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32100, 1, 0],
+ [32700, 1, 0],
+ [33000, 3, 0],
+ [33300, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33600, 0, 0],
+ [34200, 2, 0],
+ [34500, 0, 0],
+ [35100, 2, 0],
+ [35400, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [36000, 2, 0],
+ [36300, 0, 0],
+ [36900, 2, 0],
+ [37200, 0, 0],
+ [37800, 2, 0],
+ [38100, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [39000, 0, 0],
+ [39450, 3, 0],
+ [40050, 2, 0],
+ [40500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [40800, 1, 0],
+ [41400, 0, 0],
+ [41850, 3, 0],
+ [42450, 2, 0],
+ [42900, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [43200, 1, 0],
+ [43800, 0, 0],
+ [44250, 3, 0],
+ [44850, 2, 0],
+ [45300, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [45600, 0, 0],
+ [46050, 0, 0],
+ [46200, 3, 0],
+ [46950, 0, 0],
+ [47100, 3, 0],
+ [47400, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48600, 0, 0],
+ [49050, 3, 0],
+ [49650, 2, 0],
+ [50100, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [50400, 1, 0],
+ [51000, 0, 0],
+ [51450, 3, 0],
+ [52050, 2, 0],
+ [52500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [52800, 1, 0],
+ [53400, 0, 0],
+ [53850, 3, 0],
+ [54450, 2, 0],
+ [54900, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [55200, 0, 0],
+ [55650, 0, 0],
+ [55800, 3, 0],
+ [56550, 0, 0],
+ [56700, 3, 0],
+ [57000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [57750, 0, 0],
+ [58200, 2, 450],
+ [58800, 3, 450],
+ [59400, 2, 150],
+ [59700, 0, 750]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [60600, 2, 300],
+ [61200, 3, 450],
+ [61800, 2, 450]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [62400, 0, 0],
+ [63000, 2, 0],
+ [63300, 0, 0],
+ [63900, 2, 0],
+ [64200, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [64800, 2, 0],
+ [65100, 0, 0],
+ [65700, 2, 0],
+ [66000, 0, 0],
+ [66600, 2, 0],
+ [66900, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [67350, 0, 0],
+ [67800, 2, 450],
+ [68400, 3, 450],
+ [69000, 2, 150],
+ [69300, 0, 750]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [70200, 2, 300],
+ [70800, 3, 450],
+ [71400, 2, 450]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [72000, 0, 0],
+ [72600, 2, 0],
+ [72900, 0, 0],
+ [73500, 2, 0],
+ [73800, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [74400, 2, 0],
+ [74700, 0, 0],
+ [75300, 2, 0],
+ [75600, 0, 0],
+ [76200, 2, 0],
+ [76500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [76800, 0, 0],
+ [77400, 2, 0],
+ [78150, 1, 0],
+ [78450, 3, 0],
+ [78900, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [79200, 0, 0],
+ [79800, 2, 0],
+ [80550, 1, 0],
+ [80850, 3, 0],
+ [81300, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [81600, 0, 0],
+ [82200, 2, 0],
+ [82950, 1, 0],
+ [83250, 3, 0],
+ [83700, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [84000, 0, 0],
+ [84600, 2, 0],
+ [85350, 1, 0],
+ [85650, 3, 0],
+ [86100, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [86400, 0, 0],
+ [86700, 3, 0],
+ [87300, 3, 0],
+ [87600, 0, 0],
+ [87900, 3, 0],
+ [88200, 3, 0],
+ [88500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [88800, 0, 0],
+ [89100, 3, 0],
+ [89700, 3, 0],
+ [90000, 3, 0],
+ [90600, 3, 0],
+ [90900, 2, 0],
+ [91050, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [91200, 0, 0],
+ [91500, 3, 0],
+ [92100, 3, 0],
+ [92400, 0, 0],
+ [92700, 3, 0],
+ [93000, 3, 0],
+ [93300, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [93600, 0, 0],
+ [93900, 3, 0],
+ [94500, 3, 0],
+ [94800, 3, 0],
+ [95400, 3, 0],
+ [95700, 2, 0],
+ [95850, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [96000, 0, 0],
+ [96300, 3, 0],
+ [96900, 3, 0],
+ [97200, 0, 0],
+ [97500, 3, 0],
+ [97800, 3, 0],
+ [98100, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [98400, 0, 0],
+ [98700, 3, 0],
+ [99300, 3, 0],
+ [99600, 3, 0],
+ [100200, 3, 0],
+ [100500, 2, 0],
+ [100650, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [100800, 7, 600],
+ [100800, 0, 0],
+ [101100, 3, 0],
+ [101700, 3, 0],
+ [102000, 0, 0],
+ [102300, 3, 0],
+ [102600, 3, 0],
+ [102900, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [103200, 0, 0],
+ [103500, 3, 0],
+ [104100, 3, 0],
+ [104400, 3, 0],
+ [105000, 3, 0],
+ [105300, 2, 0],
+ [105450, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[105600, 3, 600]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 100,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "parents-christmas",
+ "song": "Cocoa",
+ "stage": "mall",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 100,
+ "speed": 1.3
+ }
+}
diff --git a/assets/preload/data/songs/cocoa/cocoa-hard.json b/assets/preload/data/songs/cocoa/cocoa-hard.json
new file mode 100644
index 0000000000..daa148fea4
--- /dev/null
+++ b/assets/preload/data/songs/cocoa/cocoa-hard.json
@@ -0,0 +1,754 @@
+{
+ "song": {
+ "player1": "bf-christmas",
+ "gfVersion": "gf-christmas",
+ "notes": [
+ {
+ "sectionNotes": [
+ [0, 0, 0],
+ [600, 2, 0],
+ [900, 0, 0],
+ [1350, 1, 0],
+ [1650, 3, 0],
+ [1950, 1, 0],
+ [2100, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [2400, 0, 0],
+ [3000, 2, 0],
+ [3300, 0, 0],
+ [3750, 1, 0],
+ [4050, 3, 0],
+ [4350, 1, 0],
+ [4500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [4800, 0, 0],
+ [4950, 3, 0],
+ [5100, 0, 0],
+ [5250, 3, 0],
+ [5400, 2, 0],
+ [5700, 0, 0],
+ [5850, 3, 0],
+ [6000, 0, 0],
+ [6150, 3, 0],
+ [6300, 2, 0],
+ [6600, 0, 0],
+ [6750, 3, 0],
+ [6900, 0, 0],
+ [7050, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [7200, 2, 0],
+ [7500, 0, 0],
+ [7650, 3, 0],
+ [7800, 0, 0],
+ [7950, 3, 0],
+ [8100, 2, 0],
+ [8400, 0, 0],
+ [8550, 3, 0],
+ [8700, 0, 0],
+ [8850, 3, 0],
+ [9000, 2, 0],
+ [9300, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [9600, 0, 0],
+ [10200, 2, 0],
+ [10500, 0, 0],
+ [10950, 1, 0],
+ [11250, 3, 0],
+ [11550, 1, 0],
+ [11700, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [12000, 0, 0],
+ [12600, 2, 0],
+ [12900, 0, 0],
+ [13350, 1, 0],
+ [13650, 3, 0],
+ [13950, 1, 0],
+ [14100, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [14400, 0, 0],
+ [14550, 3, 0],
+ [14700, 0, 0],
+ [14850, 3, 0],
+ [15000, 2, 0],
+ [15300, 0, 0],
+ [15450, 3, 0],
+ [15600, 0, 0],
+ [15750, 3, 0],
+ [15900, 2, 0],
+ [16200, 0, 0],
+ [16350, 3, 0],
+ [16500, 0, 0],
+ [16650, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [16800, 2, 0],
+ [17100, 0, 0],
+ [17250, 3, 0],
+ [17400, 0, 0],
+ [17550, 3, 0],
+ [17700, 2, 0],
+ [18000, 0, 0],
+ [18150, 3, 0],
+ [18300, 0, 0],
+ [18450, 3, 0],
+ [18600, 2, 0],
+ [18900, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [19500, 3, 150],
+ [19800, 1, 450],
+ [20400, 2, 1050]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [22500, 1, 0],
+ [22650, 3, 0],
+ [22800, 0, 150],
+ [23100, 1, 0],
+ [23400, 3, 0],
+ [23700, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [24000, 0, 0],
+ [24150, 3, 0],
+ [24300, 0, 0],
+ [24450, 3, 0],
+ [24600, 2, 0],
+ [24900, 0, 0],
+ [25050, 3, 0],
+ [25200, 0, 0],
+ [25350, 3, 0],
+ [25500, 2, 0],
+ [25800, 0, 0],
+ [25950, 3, 0],
+ [26100, 0, 0],
+ [26250, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [26400, 2, 0],
+ [26700, 0, 0],
+ [26850, 3, 0],
+ [27000, 0, 0],
+ [27150, 3, 0],
+ [27300, 2, 0],
+ [27600, 0, 0],
+ [27750, 3, 0],
+ [27900, 0, 0],
+ [28050, 3, 0],
+ [28200, 2, 0],
+ [28500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [28800, 6, 600],
+ [29100, 3, 150],
+ [29400, 1, 450],
+ [30000, 2, 1050]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32100, 1, 0],
+ [32250, 3, 0],
+ [32400, 0, 150],
+ [32700, 1, 0],
+ [33000, 3, 0],
+ [33300, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33600, 0, 0],
+ [33750, 3, 0],
+ [33900, 0, 0],
+ [34050, 3, 0],
+ [34200, 2, 0],
+ [34500, 0, 0],
+ [34650, 3, 0],
+ [34800, 0, 0],
+ [34950, 3, 0],
+ [35100, 2, 0],
+ [35400, 0, 0],
+ [35550, 3, 0],
+ [35700, 0, 0],
+ [35850, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [36000, 2, 0],
+ [36300, 0, 0],
+ [36450, 3, 0],
+ [36600, 0, 0],
+ [36750, 3, 0],
+ [36900, 2, 0],
+ [37200, 0, 0],
+ [37350, 3, 0],
+ [37500, 0, 0],
+ [37650, 3, 0],
+ [37800, 2, 0],
+ [38100, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [39000, 0, 0],
+ [39150, 1, 0],
+ [39450, 3, 0],
+ [39750, 3, 0],
+ [40050, 2, 0],
+ [40200, 3, 0],
+ [40500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [40800, 1, 0],
+ [41400, 0, 0],
+ [41550, 1, 0],
+ [41850, 3, 0],
+ [42150, 3, 0],
+ [42450, 2, 0],
+ [42600, 3, 0],
+ [42900, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [43200, 1, 0],
+ [43800, 0, 0],
+ [43950, 1, 0],
+ [44250, 3, 0],
+ [44550, 3, 0],
+ [44850, 2, 0],
+ [45000, 3, 0],
+ [45300, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [45600, 0, 0],
+ [45750, 3, 0],
+ [46050, 0, 0],
+ [46200, 3, 0],
+ [46500, 0, 0],
+ [46650, 3, 0],
+ [46950, 0, 0],
+ [47100, 3, 0],
+ [47400, 0, 0],
+ [47550, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48600, 0, 0],
+ [48750, 1, 0],
+ [49050, 3, 0],
+ [49350, 3, 0],
+ [49650, 2, 0],
+ [49800, 3, 0],
+ [50100, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [50400, 1, 0],
+ [51000, 0, 0],
+ [51150, 1, 0],
+ [51450, 3, 0],
+ [51750, 3, 0],
+ [52050, 2, 0],
+ [52200, 3, 0],
+ [52500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [52800, 1, 0],
+ [53400, 0, 0],
+ [53550, 1, 0],
+ [53850, 3, 0],
+ [54150, 3, 0],
+ [54450, 2, 0],
+ [54600, 3, 0],
+ [54900, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [55200, 0, 0],
+ [55350, 3, 0],
+ [55650, 0, 0],
+ [55800, 3, 0],
+ [56100, 0, 0],
+ [56250, 3, 0],
+ [56550, 0, 0],
+ [56700, 3, 0],
+ [57000, 0, 0],
+ [57150, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [57750, 0, 0],
+ [57900, 1, 0],
+ [58050, 0, 0],
+ [58200, 2, 450],
+ [58800, 3, 450],
+ [59400, 2, 150],
+ [59700, 0, 750]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [60600, 2, 300],
+ [61200, 3, 450],
+ [61800, 2, 450]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [62400, 0, 0],
+ [62550, 3, 0],
+ [62700, 0, 0],
+ [62850, 3, 0],
+ [63000, 2, 0],
+ [63300, 0, 0],
+ [63450, 3, 0],
+ [63600, 0, 0],
+ [63750, 3, 0],
+ [63900, 2, 0],
+ [64200, 0, 0],
+ [64350, 3, 0],
+ [64500, 0, 0],
+ [64650, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [64800, 2, 0],
+ [65100, 0, 0],
+ [65250, 3, 0],
+ [65400, 0, 0],
+ [65550, 3, 0],
+ [65700, 2, 0],
+ [66000, 0, 0],
+ [66150, 3, 0],
+ [66300, 0, 0],
+ [66450, 3, 0],
+ [66600, 2, 0],
+ [66900, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [67350, 0, 0],
+ [67500, 1, 0],
+ [67650, 0, 0],
+ [67800, 2, 450],
+ [68400, 3, 450],
+ [69000, 2, 150],
+ [69300, 0, 750]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [70200, 2, 300],
+ [70800, 3, 450],
+ [71400, 2, 450]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [72000, 0, 0],
+ [72150, 3, 0],
+ [72300, 0, 0],
+ [72450, 3, 0],
+ [72600, 2, 0],
+ [72900, 0, 0],
+ [73050, 3, 0],
+ [73200, 0, 0],
+ [73350, 3, 0],
+ [73500, 2, 0],
+ [73800, 0, 0],
+ [73950, 3, 0],
+ [74100, 0, 0],
+ [74250, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [74400, 2, 0],
+ [74700, 0, 0],
+ [74850, 3, 0],
+ [75000, 0, 0],
+ [75150, 3, 0],
+ [75300, 2, 0],
+ [75600, 0, 0],
+ [75750, 3, 0],
+ [75900, 0, 0],
+ [76050, 3, 0],
+ [76200, 2, 0],
+ [76500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [76800, 0, 0],
+ [77400, 2, 0],
+ [77700, 0, 0],
+ [78150, 1, 0],
+ [78450, 3, 0],
+ [78750, 1, 0],
+ [78900, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [79200, 0, 0],
+ [79800, 2, 0],
+ [80100, 0, 0],
+ [80550, 1, 0],
+ [80850, 3, 0],
+ [81150, 1, 0],
+ [81300, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [81600, 0, 0],
+ [82200, 2, 0],
+ [82500, 0, 0],
+ [82950, 1, 0],
+ [83250, 3, 0],
+ [83550, 1, 0],
+ [83700, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [84000, 0, 0],
+ [84600, 2, 0],
+ [84900, 0, 0],
+ [85350, 1, 0],
+ [85650, 3, 0],
+ [85950, 1, 0],
+ [86100, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [86400, 0, 0],
+ [86550, 1, 0],
+ [86700, 3, 0],
+ [86850, 1, 0],
+ [87000, 0, 0],
+ [87150, 1, 0],
+ [87300, 3, 0],
+ [87450, 2, 0],
+ [87600, 0, 0],
+ [87750, 1, 0],
+ [87900, 3, 0],
+ [88050, 1, 0],
+ [88200, 0, 0],
+ [88350, 1, 0],
+ [88500, 3, 0],
+ [88650, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [88800, 0, 0],
+ [88950, 1, 0],
+ [89100, 3, 0],
+ [89250, 1, 0],
+ [89400, 0, 0],
+ [89550, 1, 0],
+ [89700, 3, 0],
+ [89850, 2, 0],
+ [90000, 3, 0],
+ [90150, 0, 0],
+ [90300, 3, 0],
+ [90450, 1, 0],
+ [90600, 3, 0],
+ [90750, 1, 0],
+ [90900, 2, 0],
+ [91050, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [91200, 0, 0],
+ [91350, 1, 0],
+ [91500, 3, 0],
+ [91650, 1, 0],
+ [91800, 0, 0],
+ [91950, 1, 0],
+ [92100, 3, 0],
+ [92250, 2, 0],
+ [92400, 0, 0],
+ [92550, 1, 0],
+ [92700, 3, 0],
+ [92850, 1, 0],
+ [93000, 0, 0],
+ [93150, 1, 0],
+ [93300, 3, 0],
+ [93450, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [93600, 0, 0],
+ [93750, 1, 0],
+ [93900, 3, 0],
+ [94050, 1, 0],
+ [94200, 0, 0],
+ [94350, 1, 0],
+ [94500, 3, 0],
+ [94650, 2, 0],
+ [94800, 3, 0],
+ [94950, 0, 0],
+ [95100, 3, 0],
+ [95250, 1, 0],
+ [95400, 3, 0],
+ [95550, 1, 0],
+ [95700, 2, 0],
+ [95850, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [96000, 0, 0],
+ [96150, 1, 0],
+ [96300, 3, 0],
+ [96450, 1, 0],
+ [96600, 0, 0],
+ [96750, 1, 0],
+ [96900, 3, 0],
+ [97050, 2, 0],
+ [97200, 0, 0],
+ [97350, 1, 0],
+ [97500, 3, 0],
+ [97650, 1, 0],
+ [97800, 0, 0],
+ [97950, 1, 0],
+ [98100, 3, 0],
+ [98250, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [98400, 0, 0],
+ [98550, 1, 0],
+ [98700, 3, 0],
+ [98850, 1, 0],
+ [99000, 0, 0],
+ [99150, 1, 0],
+ [99300, 3, 0],
+ [99450, 2, 0],
+ [99600, 3, 0],
+ [99750, 0, 0],
+ [99900, 3, 0],
+ [100050, 1, 0],
+ [100200, 3, 0],
+ [100350, 1, 0],
+ [100500, 2, 0],
+ [100650, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [100800, 7, 600],
+ [100800, 0, 0],
+ [100950, 1, 0],
+ [101100, 3, 0],
+ [101250, 1, 0],
+ [101400, 0, 0],
+ [101550, 1, 0],
+ [101700, 3, 0],
+ [101850, 2, 0],
+ [102000, 0, 0],
+ [102150, 1, 0],
+ [102300, 3, 0],
+ [102450, 1, 0],
+ [102600, 0, 0],
+ [102750, 1, 0],
+ [102900, 3, 0],
+ [103050, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [103200, 0, 0],
+ [103350, 1, 0],
+ [103500, 3, 0],
+ [103650, 1, 0],
+ [103800, 0, 0],
+ [103950, 1, 0],
+ [104100, 3, 0],
+ [104250, 2, 0],
+ [104400, 3, 0],
+ [104550, 0, 0],
+ [104700, 3, 0],
+ [104850, 1, 0],
+ [105000, 3, 0],
+ [105150, 1, 0],
+ [105300, 2, 0],
+ [105450, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[105600, 3, 600]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 100,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "parents-christmas",
+ "song": "Cocoa",
+ "stage": "mall",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 100,
+ "speed": 1.5
+ }
+}
diff --git a/assets/preload/data/songs/cocoa/cocoa.json b/assets/preload/data/songs/cocoa/cocoa.json
new file mode 100644
index 0000000000..4a9fd568d2
--- /dev/null
+++ b/assets/preload/data/songs/cocoa/cocoa.json
@@ -0,0 +1,619 @@
+{
+ "song": {
+ "player1": "bf-christmas",
+ "gfVersion": "gf-christmas",
+ "notes": [
+ {
+ "sectionNotes": [
+ [0, 0, 0],
+ [600, 2, 0],
+ [900, 0, 0],
+ [1350, 1, 0],
+ [1650, 3, 0],
+ [2100, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [2400, 0, 0],
+ [3000, 2, 0],
+ [3300, 0, 0],
+ [3750, 1, 0],
+ [4050, 3, 0],
+ [4500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [4800, 0, 0],
+ [5100, 0, 0],
+ [5400, 2, 0],
+ [5700, 0, 0],
+ [6000, 0, 0],
+ [6300, 2, 0],
+ [6600, 0, 0],
+ [6750, 3, 0],
+ [6900, 0, 0],
+ [7050, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [7200, 2, 0],
+ [7500, 0, 0],
+ [7800, 0, 0],
+ [8100, 2, 0],
+ [8400, 0, 0],
+ [8700, 0, 0],
+ [9000, 2, 0],
+ [9300, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [9600, 0, 0],
+ [10200, 2, 0],
+ [10500, 0, 0],
+ [10950, 1, 0],
+ [11250, 3, 0],
+ [11700, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [12000, 0, 0],
+ [12600, 2, 0],
+ [12900, 0, 0],
+ [13350, 1, 0],
+ [13650, 3, 0],
+ [14100, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [14400, 0, 0],
+ [14700, 0, 0],
+ [15000, 2, 0],
+ [15300, 0, 0],
+ [15600, 0, 0],
+ [15900, 2, 0],
+ [16200, 0, 0],
+ [16350, 3, 0],
+ [16500, 0, 0],
+ [16650, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [16800, 2, 0],
+ [17100, 0, 0],
+ [17400, 0, 0],
+ [17700, 2, 0],
+ [18000, 0, 0],
+ [18300, 0, 0],
+ [18600, 2, 0],
+ [18900, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [19500, 3, 150],
+ [19800, 1, 450],
+ [20400, 2, 1050]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [22500, 1, 0],
+ [22800, 0, 150],
+ [23100, 1, 0],
+ [23400, 3, 0],
+ [23700, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [24000, 0, 0],
+ [24300, 0, 0],
+ [24600, 2, 0],
+ [24900, 0, 0],
+ [25200, 0, 0],
+ [25500, 2, 0],
+ [25800, 0, 0],
+ [26100, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [26400, 2, 0],
+ [26700, 0, 0],
+ [27000, 0, 0],
+ [27300, 2, 0],
+ [27600, 0, 0],
+ [27900, 0, 0],
+ [28200, 2, 0],
+ [28500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [28800, 6, 600],
+ [29100, 3, 150],
+ [29400, 1, 450],
+ [30000, 2, 1050]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32100, 1, 0],
+ [32400, 0, 150],
+ [32700, 1, 0],
+ [33000, 3, 0],
+ [33300, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33600, 0, 0],
+ [33900, 0, 0],
+ [34200, 2, 0],
+ [34500, 0, 0],
+ [34800, 0, 0],
+ [35100, 2, 0],
+ [35400, 0, 0],
+ [35700, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [36000, 2, 0],
+ [36300, 0, 0],
+ [36600, 0, 0],
+ [36900, 2, 0],
+ [37200, 0, 0],
+ [37500, 0, 0],
+ [37800, 2, 0],
+ [38100, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [39000, 0, 0],
+ [39450, 3, 0],
+ [39750, 3, 0],
+ [40050, 2, 0],
+ [40500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [40800, 1, 0],
+ [41400, 0, 0],
+ [41850, 3, 0],
+ [42150, 3, 0],
+ [42450, 2, 0],
+ [42900, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [43200, 1, 0],
+ [43800, 0, 0],
+ [44250, 3, 0],
+ [44550, 3, 0],
+ [44850, 2, 0],
+ [45300, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [45600, 0, 0],
+ [46050, 0, 0],
+ [46200, 3, 0],
+ [46500, 0, 0],
+ [46950, 0, 0],
+ [47100, 3, 0],
+ [47400, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48600, 0, 0],
+ [49050, 3, 0],
+ [49350, 3, 0],
+ [49650, 2, 0],
+ [50100, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [50400, 1, 0],
+ [51000, 0, 0],
+ [51450, 3, 0],
+ [51750, 3, 0],
+ [52050, 2, 0],
+ [52500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [52800, 1, 0],
+ [53400, 0, 0],
+ [53850, 3, 0],
+ [54150, 3, 0],
+ [54450, 2, 0],
+ [54900, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [55200, 0, 0],
+ [55650, 0, 0],
+ [55800, 3, 0],
+ [56100, 0, 0],
+ [56550, 0, 0],
+ [56700, 3, 0],
+ [57000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [57750, 0, 0],
+ [58200, 2, 450],
+ [58800, 3, 450],
+ [59400, 2, 150],
+ [59700, 0, 750]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [60600, 2, 300],
+ [61200, 3, 450],
+ [61800, 2, 450]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [62400, 0, 0],
+ [62700, 0, 0],
+ [63000, 2, 0],
+ [63300, 0, 0],
+ [63600, 0, 0],
+ [63900, 2, 0],
+ [64200, 0, 0],
+ [64500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [64800, 2, 0],
+ [65100, 0, 0],
+ [65400, 0, 0],
+ [65700, 2, 0],
+ [66000, 0, 0],
+ [66300, 0, 0],
+ [66600, 2, 0],
+ [66900, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [67350, 0, 0],
+ [67800, 2, 450],
+ [68400, 3, 450],
+ [69000, 2, 150],
+ [69300, 0, 750]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [70200, 2, 300],
+ [70800, 3, 450],
+ [71400, 2, 450]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [72000, 0, 0],
+ [72300, 0, 0],
+ [72600, 2, 0],
+ [72900, 0, 0],
+ [73200, 0, 0],
+ [73500, 2, 0],
+ [73800, 0, 0],
+ [74100, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [74400, 2, 0],
+ [74700, 0, 0],
+ [75000, 0, 0],
+ [75300, 2, 0],
+ [75600, 0, 0],
+ [75900, 0, 0],
+ [76200, 2, 0],
+ [76500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [76800, 0, 0],
+ [77400, 2, 0],
+ [77700, 0, 0],
+ [78150, 1, 0],
+ [78450, 3, 0],
+ [78900, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [79200, 0, 0],
+ [79800, 2, 0],
+ [80100, 0, 0],
+ [80550, 1, 0],
+ [80850, 3, 0],
+ [81300, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [81600, 0, 0],
+ [82200, 2, 0],
+ [82500, 0, 0],
+ [82950, 1, 0],
+ [83250, 3, 0],
+ [83700, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [84000, 0, 0],
+ [84600, 2, 0],
+ [84900, 0, 0],
+ [85350, 1, 0],
+ [85650, 3, 0],
+ [86100, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [86400, 0, 0],
+ [86700, 3, 0],
+ [87000, 3, 0],
+ [87300, 3, 0],
+ [87450, 2, 0],
+ [87600, 0, 0],
+ [87900, 3, 0],
+ [88200, 3, 0],
+ [88500, 3, 0],
+ [88650, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [88800, 0, 0],
+ [89100, 3, 0],
+ [89400, 3, 0],
+ [89700, 3, 0],
+ [89850, 2, 0],
+ [90000, 3, 0],
+ [90300, 3, 0],
+ [90600, 3, 0],
+ [90900, 2, 0],
+ [91050, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [91200, 0, 0],
+ [91500, 3, 0],
+ [91800, 3, 0],
+ [92100, 3, 0],
+ [92250, 2, 0],
+ [92400, 0, 0],
+ [92700, 3, 0],
+ [93000, 3, 0],
+ [93300, 3, 0],
+ [93450, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [93600, 0, 0],
+ [93900, 3, 0],
+ [94200, 3, 0],
+ [94500, 3, 0],
+ [94650, 2, 0],
+ [94800, 3, 0],
+ [95100, 3, 0],
+ [95400, 3, 0],
+ [95700, 2, 0],
+ [95850, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [96000, 0, 0],
+ [96300, 3, 0],
+ [96600, 3, 0],
+ [96900, 3, 0],
+ [97050, 2, 0],
+ [97200, 0, 0],
+ [97500, 3, 0],
+ [97800, 3, 0],
+ [98100, 3, 0],
+ [98250, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [98400, 0, 0],
+ [98700, 3, 0],
+ [99000, 3, 0],
+ [99300, 3, 0],
+ [99450, 2, 0],
+ [99600, 3, 0],
+ [99900, 3, 0],
+ [100200, 3, 0],
+ [100500, 2, 0],
+ [100650, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [100800, 7, 600],
+ [100800, 0, 0],
+ [101100, 3, 0],
+ [101400, 3, 0],
+ [101700, 3, 0],
+ [101850, 2, 0],
+ [102000, 0, 0],
+ [102300, 3, 0],
+ [102600, 3, 0],
+ [102900, 3, 0],
+ [103050, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [103200, 0, 0],
+ [103500, 3, 0],
+ [103800, 3, 0],
+ [104100, 3, 0],
+ [104250, 2, 0],
+ [104400, 3, 0],
+ [104700, 3, 0],
+ [105000, 3, 0],
+ [105300, 2, 0],
+ [105450, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[105600, 3, 600]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 100,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "parents-christmas",
+ "song": "Cocoa",
+ "stage": "mall",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 100,
+ "speed": 1.3
+ }
+}
diff --git a/assets/preload/data/songs/dadbattle/_meta.json b/assets/preload/data/songs/dadbattle/_meta.json
new file mode 100644
index 0000000000..4c2eee6beb
--- /dev/null
+++ b/assets/preload/data/songs/dadbattle/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/songs/dadbattle/dadbattle-easy.json b/assets/preload/data/songs/dadbattle/dadbattle-easy.json
new file mode 100644
index 0000000000..56f1e2e184
--- /dev/null
+++ b/assets/preload/data/songs/dadbattle/dadbattle-easy.json
@@ -0,0 +1,578 @@
+{
+ "song": {
+ "song": "Dad Battle",
+ "bpm": 180.0,
+ "needsVoices": true,
+ "player1": "bf",
+ "player2": "dad",
+ "speed": 1.3,
+ "notes": [
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [10666.667, 2, 0.0],
+ [11000.0, 0, 0.0],
+ [11333.334, 2, 0.0],
+ [11666.667, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [12000.0, 2, 0.0],
+ [12166.667, 3, 0.0],
+ [12333.334, 0, 0.0],
+ [12666.667, 2, 0.0],
+ [13000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [13333.334, 2, 0.0],
+ [13666.667, 0, 0.0],
+ [14000.0, 2, 0.0],
+ [14333.334, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [14666.667, 2, 0.0],
+ [14833.334, 3, 0.0],
+ [15000.0, 0, 0.0],
+ [15333.334, 2, 0.0],
+ [15666.667, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [16000.0, 1, 0.0],
+ [16333.334, 0, 0.0],
+ [16666.668, 1, 0.0],
+ [17000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [17333.334, 1, 0.0],
+ [17666.668, 0, 0.0],
+ [18000.0, 3, 0.0],
+ [18333.334, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [18666.668, 1, 0.0],
+ [19000.0, 0, 0.0],
+ [19333.334, 1, 0.0],
+ [19666.668, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [20000.0, 1, 0.0],
+ [20333.334, 0, 0.0],
+ [20666.668, 3, 0.0],
+ [21000.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [21666.668, 2, 0.0],
+ [22000.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [22833.334, 1, 0.0],
+ [23000.0, 3, 0.0],
+ [23333.334, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [24333.334, 2, 0.0],
+ [24666.668, 1, 0.0],
+ [25000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [25333.334, 2, 0.0],
+ [25666.668, 0, 0.0],
+ [26000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [27000.0, 2, 0.0],
+ [27333.334, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [28166.668, 1, 0.0],
+ [28333.334, 3, 0.0],
+ [28666.668, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [29666.668, 2, 0.0],
+ [30000.0, 1, 0.0],
+ [30333.334, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [30666.668, 4, 0.0],
+ [30666.668, 2, 0.0],
+ [31000.0, 6, 0.0],
+ [31000.0, 0, 0.0],
+ [31333.334, 6, 0.0],
+ [31333.334, 2, 0.0],
+ [31666.668, 4, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [32166.668, 0, 0.0],
+ [32666.668, 1, 0.0],
+ [33000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [33500.0, 2, 0.0],
+ [34000.0, 2, 0.0],
+ [34333.3359, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [34666.668, 0, 0.0],
+ [35000.0, 1, 0.0],
+ [35333.3359, 3, 0.0],
+ [35666.668, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [36000.0, 2, 0.0],
+ [36333.3359, 3, 0.0],
+ [36666.668, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [37500.0, 1, 0.0],
+ [37666.668, 3, 0.0],
+ [38000.0, 0, 0.0],
+ [38333.3359, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [38666.668, 0, 0.0],
+ [39000.0, 1, 0.0],
+ [39166.668, 0, 0.0],
+ [39333.3359, 2, 0.0],
+ [39666.668, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [40166.668, 0, 0.0],
+ [40333.3359, 3, 0.0],
+ [40666.668, 2, 0.0],
+ [41000.0, 1, 0.0],
+ [41166.668, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [41333.3359, 4, 0.0],
+ [41333.3359, 0, 0.0],
+ [41666.668, 6, 0.0],
+ [41666.668, 0, 0.0],
+ [42000.0, 6, 0.0],
+ [42000.0, 2, 0.0],
+ [42333.3359, 4, 0.0],
+ [42333.3359, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [42833.3359, 0, 0.0],
+ [43333.3359, 1, 0.0],
+ [43666.668, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [44166.668, 2, 0.0],
+ [44666.668, 2, 0.0],
+ [45000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [45333.3359, 0, 0.0],
+ [45666.668, 1, 0.0],
+ [46000.0, 3, 0.0],
+ [46333.3359, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [46666.668, 2, 0.0],
+ [47000.0, 3, 0.0],
+ [47333.3359, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [48166.668, 1, 0.0],
+ [48333.3359, 3, 0.0],
+ [48666.668, 0, 0.0],
+ [49000.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [49333.3359, 0, 0.0],
+ [49666.668, 1, 0.0],
+ [49833.3359, 0, 0.0],
+ [50000.0, 2, 0.0],
+ [50333.3359, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [50833.3359, 0, 0.0],
+ [51000.0, 3, 0.0],
+ [51333.3359, 2, 0.0],
+ [51666.668, 1, 0.0],
+ [51833.3359, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [52000.0, 0, 0.0],
+ [52333.3359, 0, 0.0],
+ [52666.668, 2, 0.0],
+ [53000.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [53333.3359, 2, 0.0],
+ [53666.668, 0, 0.0],
+ [54000.0, 2, 0.0],
+ [54333.3359, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [54666.668, 2, 0.0],
+ [54833.3359, 3, 0.0],
+ [55000.0, 0, 0.0],
+ [55333.3359, 2, 0.0],
+ [55666.668, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [56000.0, 2, 0.0],
+ [56333.3359, 0, 0.0],
+ [56666.668, 2, 0.0],
+ [57000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [57333.3359, 2, 0.0],
+ [57500.0, 3, 0.0],
+ [57666.668, 0, 0.0],
+ [58000.0, 2, 0.0],
+ [58333.3359, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [58666.668, 1, 0.0],
+ [59000.0, 0, 0.0],
+ [59333.3359, 1, 0.0],
+ [59666.668, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [60000.0, 1, 0.0],
+ [60333.3359, 0, 0.0],
+ [60666.668, 3, 0.0],
+ [61000.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [61333.3359, 1, 0.0],
+ [61666.668, 0, 0.0],
+ [62000.0, 1, 0.0],
+ [62333.3359, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [62666.668, 4, 0.0],
+ [62666.668, 1, 0.0],
+ [63000.0, 6, 0.0],
+ [63000.0, 0, 0.0],
+ [63333.3359, 6, 0.0],
+ [63333.3359, 3, 0.0],
+ [63666.668, 4, 0.0],
+ [63666.668, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [64333.3359, 2, 0.0],
+ [64666.668, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [65500.0039, 1, 0.0],
+ [65666.67, 3, 0.0],
+ [66000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [67000.0, 2, 0.0],
+ [67333.3359, 1, 0.0],
+ [67666.67, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [68000.0, 2, 0.0],
+ [68000.0, 4, 0.0],
+ [68333.3359, 0, 0.0],
+ [68333.3359, 6, 0.0],
+ [68666.67, 2, 0.0],
+ [68666.67, 6, 0.0],
+ [69000.0, 4, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [69666.67, 2, 0.0],
+ [70000.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [70833.3359, 1, 0.0],
+ [71000.0, 3, 0.0],
+ [71333.3359, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [72333.3359, 2, 0.0],
+ [72666.67, 1, 0.0],
+ [73000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [73333.3359, 2, 0.0],
+ [73666.67, 0, 0.0],
+ [74000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [74666.67, 2, 0.0],
+ [75000.0, 0, 0.0],
+ [75333.3359, 2, 0.0],
+ [75666.67, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [76000.0, 2, 0.0],
+ [76333.3359, 0, 0.0],
+ [76666.67, 2, 0.0],
+ [77000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [77333.3359, 2, 0.0],
+ [77666.67, 0, 0.0],
+ [78000.0, 2, 0.0],
+ [78333.3359, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [78666.67, 2, 0.0],
+ [79000.0, 0, 0.0],
+ [79333.3359, 2, 0.0],
+ [79666.67, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [80000.0, 1, 0.0],
+ [80333.3359, 0, 0.0],
+ [80500.0, 3, 0.0],
+ [80666.67, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [81333.3359, 1, 0.0],
+ [81666.67, 1, 0.0],
+ [82000.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [82666.67, 1, 0.0],
+ [83000.0, 0, 0.0],
+ [83166.67, 3, 0.0],
+ [83333.3359, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [84000.0, 1, 0.0],
+ [84333.3359, 1, 0.0],
+ [84666.67, 1, 0.0]
+ ]
+ },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] }
+ ]
+ },
+ "generatedBy": "SNIFF ver.6"
+}
diff --git a/assets/preload/data/songs/dadbattle/dadbattle-hard.json b/assets/preload/data/songs/dadbattle/dadbattle-hard.json
new file mode 100644
index 0000000000..b881ac7cf8
--- /dev/null
+++ b/assets/preload/data/songs/dadbattle/dadbattle-hard.json
@@ -0,0 +1,681 @@
+{
+ "song": {
+ "song": "Dad Battle",
+ "bpm": 180.0,
+ "needsVoices": true,
+ "player1": "bf",
+ "player2": "dad",
+ "speed": 2.3,
+ "notes": [
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [10666.667, 2, 0.0],
+ [11000.0, 0, 0.0],
+ [11166.667, 1, 0.0],
+ [11333.334, 2, 0.0],
+ [11666.667, 0, 0.0],
+ [11833.334, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [12000.0, 2, 0.0],
+ [12166.667, 3, 0.0],
+ [12333.334, 0, 0.0],
+ [12500.0, 1, 0.0],
+ [12666.667, 2, 0.0],
+ [13000.0, 0, 0.0],
+ [13166.667, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [13333.334, 2, 0.0],
+ [13666.667, 0, 0.0],
+ [13833.334, 1, 0.0],
+ [14000.0, 2, 0.0],
+ [14333.334, 0, 0.0],
+ [14500.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [14666.667, 2, 0.0],
+ [14833.334, 3, 0.0],
+ [15000.0, 0, 0.0],
+ [15166.667, 1, 0.0],
+ [15333.334, 2, 0.0],
+ [15666.667, 0, 0.0],
+ [15833.334, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [16000.0, 1, 0.0],
+ [16333.334, 0, 0.0],
+ [16500.0, 3, 0.0],
+ [16666.668, 1, 0.0],
+ [17000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [17333.334, 1, 0.0],
+ [17666.668, 0, 0.0],
+ [17833.334, 0, 0.0],
+ [18000.0, 3, 0.0],
+ [18166.668, 3, 0.0],
+ [18333.334, 3, 0.0],
+ [18500.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [18666.668, 1, 0.0],
+ [19000.0, 0, 0.0],
+ [19166.668, 3, 0.0],
+ [19333.334, 1, 0.0],
+ [19666.668, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [20000.0, 1, 0.0],
+ [20333.334, 0, 0.0],
+ [20500.0, 0, 0.0],
+ [20666.668, 3, 0.0],
+ [20833.334, 3, 0.0],
+ [21000.0, 3, 0.0],
+ [21166.668, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [21666.668, 2, 0.0],
+ [21833.334, 1, 0.0],
+ [22000.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [22833.334, 1, 0.0],
+ [23000.0, 3, 0.0],
+ [23333.334, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [24333.334, 2, 0.0],
+ [24666.668, 1, 0.0],
+ [25000.0, 0, 0.0],
+ [25166.668, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [25333.334, 2, 0.0],
+ [25500.0, 3, 0.0],
+ [25666.668, 0, 0.0],
+ [25833.334, 3, 0.0],
+ [26000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [27000.0, 2, 0.0],
+ [27166.668, 1, 0.0],
+ [27333.334, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [28166.668, 1, 0.0],
+ [28333.334, 3, 0.0],
+ [28666.668, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [29666.668, 2, 0.0],
+ [30000.0, 1, 0.0],
+ [30333.334, 0, 0.0],
+ [30500.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [30666.668, 4, 0.0],
+ [30666.668, 2, 0.0],
+ [30833.334, 5, 0.0],
+ [30833.334, 3, 0.0],
+ [31000.0, 6, 0.0],
+ [31000.0, 0, 0.0],
+ [31166.668, 7, 0.0],
+ [31166.668, 3, 0.0],
+ [31333.334, 6, 0.0],
+ [31333.334, 2, 0.0],
+ [31500.0, 5, 0.0],
+ [31666.668, 4, 0.0],
+ [31833.334, 5, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [32166.668, 0, 0.0],
+ [32333.334, 3, 0.0],
+ [32500.002, 2, 0.0],
+ [32666.668, 1, 0.0],
+ [33000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [33500.0, 2, 0.0],
+ [33666.668, 3, 0.0],
+ [33833.3359, 1, 0.0],
+ [34000.0, 2, 0.0],
+ [34333.3359, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [34666.668, 0, 0.0],
+ [35000.0, 1, 0.0],
+ [35333.3359, 3, 0.0],
+ [35666.668, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [36000.0, 2, 0.0],
+ [36333.3359, 3, 0.0],
+ [36666.668, 0, 0.0],
+ [36666.668, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [37500.0, 1, 0.0],
+ [37666.668, 3, 0.0],
+ [37833.3359, 2, 0.0],
+ [38000.0, 0, 0.0],
+ [38166.668, 2, 0.0],
+ [38333.3359, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [38666.668, 0, 0.0],
+ [38750.0, 3, 0.0],
+ [38833.3359, 0, 0.0],
+ [39000.0, 1, 0.0],
+ [39166.668, 0, 0.0],
+ [39333.3359, 2, 0.0],
+ [39500.0, 3, 0.0],
+ [39666.668, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [40166.668, 0, 0.0],
+ [40333.3359, 3, 0.0],
+ [40500.0, 1, 0.0],
+ [40666.668, 2, 0.0],
+ [40833.3359, 3, 0.0],
+ [41000.0, 1, 0.0],
+ [41166.668, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [41333.3359, 0, 0.0],
+ [41333.3359, 4, 0.0],
+ [41500.0, 1, 0.0],
+ [41500.0, 5, 0.0],
+ [41666.668, 0, 0.0],
+ [41666.668, 6, 0.0],
+ [41833.3359, 3, 0.0],
+ [41833.3359, 7, 0.0],
+ [42000.0, 2, 0.0],
+ [42000.0, 6, 0.0],
+ [42166.668, 5, 0.0],
+ [42333.3359, 3, 0.0],
+ [42333.3359, 4, 0.0],
+ [42500.0, 5, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [42833.3359, 0, 0.0],
+ [43000.0, 3, 0.0],
+ [43166.668, 2, 0.0],
+ [43333.3359, 1, 0.0],
+ [43666.668, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [44166.668, 2, 0.0],
+ [44333.3359, 3, 0.0],
+ [44500.0, 1, 0.0],
+ [44666.668, 2, 0.0],
+ [45000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [45333.3359, 0, 0.0],
+ [45666.668, 1, 0.0],
+ [46000.0, 3, 0.0],
+ [46333.3359, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [46666.668, 2, 0.0],
+ [47000.0, 3, 0.0],
+ [47333.3359, 0, 0.0],
+ [47333.3359, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [48166.668, 1, 0.0],
+ [48333.3359, 3, 0.0],
+ [48500.0, 2, 0.0],
+ [48666.668, 0, 0.0],
+ [48833.3359, 2, 0.0],
+ [49000.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [49333.3359, 0, 0.0],
+ [49416.668, 3, 0.0],
+ [49500.0, 0, 0.0],
+ [49666.668, 1, 0.0],
+ [49833.3359, 0, 0.0],
+ [50000.0, 2, 0.0],
+ [50166.668, 3, 0.0],
+ [50333.3359, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [50833.3359, 0, 0.0],
+ [51000.0, 3, 0.0],
+ [51166.668, 1, 0.0],
+ [51333.3359, 2, 0.0],
+ [51500.0, 3, 0.0],
+ [51666.668, 1, 0.0],
+ [51833.3359, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [52000.0, 0, 0.0],
+ [52166.668, 0, 0.0],
+ [52333.3359, 2, 0.0],
+ [52500.0, 2, 0.0],
+ [52666.668, 3, 0.0],
+ [53000.0, 3, 0.0],
+ [53000.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [53333.3359, 2, 0.0],
+ [53666.668, 0, 0.0],
+ [53833.3359, 1, 0.0],
+ [54000.0, 2, 0.0],
+ [54333.3359, 0, 0.0],
+ [54500.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [54666.668, 2, 0.0],
+ [54833.3359, 3, 0.0],
+ [55000.0, 0, 0.0],
+ [55166.668, 1, 0.0],
+ [55333.3359, 2, 0.0],
+ [55666.668, 0, 0.0],
+ [55833.3359, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [56000.0, 2, 0.0],
+ [56333.3359, 0, 0.0],
+ [56500.0, 1, 0.0],
+ [56666.668, 2, 0.0],
+ [57000.0, 0, 0.0],
+ [57166.668, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [57333.3359, 2, 0.0],
+ [57500.0, 3, 0.0],
+ [57666.668, 0, 0.0],
+ [57833.3359, 1, 0.0],
+ [58000.0, 2, 0.0],
+ [58333.3359, 0, 0.0],
+ [58500.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [58666.668, 1, 0.0],
+ [59000.0, 0, 0.0],
+ [59166.668, 3, 0.0],
+ [59333.3359, 1, 0.0],
+ [59666.668, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [60000.0, 1, 0.0],
+ [60333.3359, 0, 0.0],
+ [60500.0, 0, 0.0],
+ [60666.668, 3, 0.0],
+ [60833.3359, 3, 0.0],
+ [61000.0, 3, 0.0],
+ [61166.668, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [61333.3359, 1, 0.0],
+ [61666.668, 0, 0.0],
+ [61833.3359, 3, 0.0],
+ [62000.0, 1, 0.0],
+ [62333.3359, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [62666.668, 1, 0.0],
+ [62666.668, 4, 0.0],
+ [62833.3359, 5, 0.0],
+ [63000.0, 0, 0.0],
+ [63000.0, 6, 0.0],
+ [63166.668, 0, 0.0],
+ [63166.668, 7, 0.0],
+ [63333.3359, 3, 0.0],
+ [63333.3359, 6, 0.0],
+ [63500.0, 3, 0.0],
+ [63500.0, 5, 0.0],
+ [63666.668, 3, 0.0],
+ [63666.668, 4, 0.0],
+ [63833.3359, 5, 333.333344],
+ [63833.3359, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [64333.3359, 2, 0.0],
+ [64500.0039, 1, 0.0],
+ [64666.668, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [65500.0039, 1, 0.0],
+ [65666.67, 3, 0.0],
+ [66000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [67000.0, 2, 0.0],
+ [67333.3359, 1, 0.0],
+ [67666.67, 0, 0.0],
+ [67833.3359, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [68000.0, 2, 0.0],
+ [68000.0, 4, 0.0],
+ [68166.67, 3, 0.0],
+ [68166.67, 5, 0.0],
+ [68333.3359, 0, 0.0],
+ [68333.3359, 6, 0.0],
+ [68500.0, 3, 0.0],
+ [68500.0, 7, 0.0],
+ [68666.67, 2, 0.0],
+ [68666.67, 6, 0.0],
+ [68833.3359, 5, 0.0],
+ [69000.0, 4, 0.0],
+ [69166.67, 5, 333.333344]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [69666.67, 2, 0.0],
+ [69833.3359, 1, 0.0],
+ [70000.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [70833.3359, 1, 0.0],
+ [71000.0, 3, 0.0],
+ [71333.3359, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [72333.3359, 2, 0.0],
+ [72666.67, 1, 0.0],
+ [73000.0, 0, 0.0],
+ [73166.67, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [73333.3359, 2, 0.0],
+ [73500.0, 3, 0.0],
+ [73666.67, 0, 0.0],
+ [73833.3359, 3, 0.0],
+ [74000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [74666.67, 2, 0.0],
+ [75000.0, 0, 0.0],
+ [75166.67, 1, 0.0],
+ [75333.3359, 2, 0.0],
+ [75666.67, 0, 0.0],
+ [75833.3359, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [76000.0, 2, 0.0],
+ [76166.67, 3, 0.0],
+ [76333.3359, 0, 0.0],
+ [76500.0, 1, 0.0],
+ [76666.67, 2, 0.0],
+ [77000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [77333.3359, 2, 0.0],
+ [77666.67, 0, 0.0],
+ [77833.3359, 1, 0.0],
+ [78000.0, 2, 0.0],
+ [78333.3359, 0, 0.0],
+ [78500.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [78666.67, 2, 0.0],
+ [78833.3359, 3, 0.0],
+ [79000.0, 0, 0.0],
+ [79166.67, 1, 0.0],
+ [79333.3359, 2, 0.0],
+ [79666.67, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [80000.0, 1, 0.0],
+ [80333.3359, 0, 0.0],
+ [80500.0, 3, 0.0],
+ [80666.67, 1, 0.0],
+ [81000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [81333.3359, 1, 0.0],
+ [81666.67, 1, 0.0],
+ [82000.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [82666.67, 1, 0.0],
+ [83000.0, 0, 0.0],
+ [83166.67, 3, 0.0],
+ [83333.3359, 1, 0.0],
+ [83666.67, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [84000.0, 1, 0.0],
+ [84333.3359, 1, 0.0],
+ [84666.67, 1, 0.0]
+ ]
+ },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] }
+ ]
+ },
+ "generatedBy": "SNIFF ver.6"
+}
diff --git a/assets/preload/data/songs/dadbattle/dadbattle.json b/assets/preload/data/songs/dadbattle/dadbattle.json
new file mode 100644
index 0000000000..6b88e5a23c
--- /dev/null
+++ b/assets/preload/data/songs/dadbattle/dadbattle.json
@@ -0,0 +1,633 @@
+{
+ "song": {
+ "song": "Dad Battle",
+ "bpm": 180.0,
+ "needsVoices": true,
+ "player1": "bf",
+ "player2": "dad",
+ "speed": 1.5,
+ "notes": [
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [10666.667, 2, 0.0],
+ [11000.0, 0, 0.0],
+ [11333.334, 2, 0.0],
+ [11666.667, 0, 0.0],
+ [11833.334, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [12000.0, 2, 0.0],
+ [12166.667, 3, 0.0],
+ [12333.334, 0, 0.0],
+ [12666.667, 2, 0.0],
+ [13000.0, 0, 0.0],
+ [13166.667, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [13333.334, 2, 0.0],
+ [13666.667, 0, 0.0],
+ [14000.0, 2, 0.0],
+ [14333.334, 0, 0.0],
+ [14500.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [14666.667, 2, 0.0],
+ [14833.334, 3, 0.0],
+ [15000.0, 0, 0.0],
+ [15333.334, 2, 0.0],
+ [15666.667, 0, 0.0],
+ [15833.334, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [16000.0, 1, 0.0],
+ [16333.334, 0, 0.0],
+ [16500.0, 3, 0.0],
+ [16666.668, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [17333.334, 1, 0.0],
+ [17666.668, 0, 0.0],
+ [17833.334, 0, 0.0],
+ [18000.0, 3, 0.0],
+ [18166.668, 3, 0.0],
+ [18333.334, 3, 0.0],
+ [18500.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [18666.668, 1, 0.0],
+ [19000.0, 0, 0.0],
+ [19166.668, 3, 0.0],
+ [19333.334, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [20000.0, 1, 0.0],
+ [20333.334, 0, 0.0],
+ [20500.0, 0, 0.0],
+ [20666.668, 3, 0.0],
+ [20833.334, 3, 0.0],
+ [21000.0, 3, 0.0],
+ [21166.668, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [21666.668, 2, 0.0],
+ [22000.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [22833.334, 1, 0.0],
+ [23000.0, 3, 0.0],
+ [23333.334, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [24333.334, 2, 0.0],
+ [24666.668, 1, 0.0],
+ [25000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [25333.334, 2, 0.0],
+ [25666.668, 0, 0.0],
+ [25833.334, 3, 0.0],
+ [26000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [27000.0, 2, 0.0],
+ [27333.334, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [28166.668, 1, 0.0],
+ [28333.334, 3, 0.0],
+ [28666.668, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [29666.668, 2, 0.0],
+ [30000.0, 1, 0.0],
+ [30333.334, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [30666.668, 4, 0.0],
+ [30666.668, 2, 0.0],
+ [30833.334, 5, 0.0],
+ [31000.0, 7, 0.0],
+ [31000.0, 0, 0.0],
+ [31166.668, 5, 0.0],
+ [31166.668, 3, 0.0],
+ [31333.334, 4, 0.0],
+ [31333.334, 2, 0.0],
+ [31500.0, 5, 0.0],
+ [31666.668, 7, 0.0],
+ [31833.334, 5, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [32166.668, 0, 0.0],
+ [32333.334, 3, 0.0],
+ [32666.668, 1, 0.0],
+ [33000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [33500.0, 2, 0.0],
+ [33666.668, 3, 0.0],
+ [34000.0, 2, 0.0],
+ [34333.3359, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [34666.668, 0, 0.0],
+ [35000.0, 1, 0.0],
+ [35333.3359, 3, 0.0],
+ [35666.668, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [36000.0, 2, 0.0],
+ [36333.3359, 3, 0.0],
+ [36666.668, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [37500.0, 1, 0.0],
+ [37666.668, 3, 0.0],
+ [38000.0, 0, 0.0],
+ [38333.3359, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [38666.668, 0, 0.0],
+ [39000.0, 1, 0.0],
+ [39333.3359, 2, 0.0],
+ [39500.0, 3, 0.0],
+ [39666.668, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [40166.668, 0, 0.0],
+ [40333.3359, 3, 0.0],
+ [40666.668, 2, 0.0],
+ [40833.3359, 3, 0.0],
+ [41000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [41333.3359, 4, 0.0],
+ [41333.3359, 0, 0.0],
+ [41500.0, 5, 0.0],
+ [41666.668, 7, 0.0],
+ [41666.668, 2, 0.0],
+ [41833.3359, 5, 0.0],
+ [42000.0, 4, 0.0],
+ [42000.0, 3, 0.0],
+ [42166.668, 5, 0.0],
+ [42333.3359, 7, 0.0],
+ [42333.3359, 3, 0.0],
+ [42500.0, 5, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [42833.3359, 0, 0.0],
+ [43000.0, 3, 0.0],
+ [43333.3359, 1, 0.0],
+ [43666.668, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [44166.668, 2, 0.0],
+ [44333.3359, 3, 0.0],
+ [44666.668, 2, 0.0],
+ [45000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [45333.3359, 0, 0.0],
+ [45666.668, 1, 0.0],
+ [46000.0, 3, 0.0],
+ [46333.3359, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [46666.668, 2, 0.0],
+ [47000.0, 3, 0.0],
+ [47333.3359, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [48166.668, 1, 0.0],
+ [48333.3359, 3, 0.0],
+ [48666.668, 0, 0.0],
+ [49000.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [49333.3359, 0, 0.0],
+ [49666.668, 1, 0.0],
+ [50000.0, 2, 0.0],
+ [50166.668, 3, 0.0],
+ [50333.3359, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [50833.3359, 0, 0.0],
+ [51000.0, 3, 0.0],
+ [51333.3359, 2, 0.0],
+ [51500.0, 3, 0.0],
+ [51666.668, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [52000.0, 0, 0.0],
+ [52333.3359, 2, 0.0],
+ [52666.668, 3, 0.0],
+ [53000.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [53333.3359, 2, 0.0],
+ [53666.668, 0, 0.0],
+ [54000.0, 2, 0.0],
+ [54333.3359, 0, 0.0],
+ [54500.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [54666.668, 2, 0.0],
+ [55000.0, 0, 0.0],
+ [55333.3359, 2, 0.0],
+ [55666.668, 0, 0.0],
+ [55833.3359, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [56000.0, 2, 0.0],
+ [56333.3359, 0, 0.0],
+ [56666.668, 2, 0.0],
+ [57000.0, 0, 0.0],
+ [57166.668, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [57333.3359, 2, 0.0],
+ [57500.0, 3, 0.0],
+ [57666.668, 0, 0.0],
+ [58000.0, 2, 0.0],
+ [58333.3359, 0, 0.0],
+ [58500.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [58666.668, 1, 0.0],
+ [59000.0, 0, 0.0],
+ [59166.668, 3, 0.0],
+ [59333.3359, 1, 0.0],
+ [59666.668, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [60000.0, 1, 0.0],
+ [60333.3359, 0, 0.0],
+ [60500.0, 0, 0.0],
+ [60666.668, 3, 0.0],
+ [60833.3359, 3, 0.0],
+ [61000.0, 3, 0.0],
+ [61166.668, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [61333.3359, 1, 0.0],
+ [61666.668, 0, 0.0],
+ [61833.3359, 3, 0.0],
+ [62000.0, 1, 0.0],
+ [62333.3359, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [62666.668, 4, 0.0],
+ [62666.668, 1, 0.0],
+ [62833.3359, 5, 0.0],
+ [63000.0, 7, 0.0],
+ [63000.0, 0, 0.0],
+ [63166.668, 5, 0.0],
+ [63166.668, 0, 0.0],
+ [63333.3359, 4, 0.0],
+ [63333.3359, 3, 0.0],
+ [63500.0, 5, 0.0],
+ [63500.0, 3, 0.0],
+ [63666.668, 7, 0.0],
+ [63666.668, 3, 0.0],
+ [63833.3359, 5, 333.333344],
+ [63833.3359, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [64333.3359, 2, 0.0],
+ [64500.0039, 1, 0.0],
+ [64666.668, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [65500.0039, 1, 0.0],
+ [65666.67, 3, 0.0],
+ [66000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [67000.0, 2, 0.0],
+ [67333.3359, 1, 0.0],
+ [67666.67, 0, 0.0],
+ [67833.3359, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [68000.0, 4, 0.0],
+ [68000.0, 2, 0.0],
+ [68166.67, 5, 0.0],
+ [68166.67, 3, 0.0],
+ [68333.3359, 7, 0.0],
+ [68333.3359, 0, 0.0],
+ [68500.0, 5, 0.0],
+ [68500.0, 3, 0.0],
+ [68666.67, 4, 0.0],
+ [68666.67, 2, 0.0],
+ [68833.3359, 5, 0.0],
+ [69000.0, 7, 0.0],
+ [69166.67, 5, 333.333344]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [69666.67, 2, 0.0],
+ [69833.3359, 1, 0.0],
+ [70000.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [70833.3359, 1, 0.0],
+ [71000.0, 3, 0.0],
+ [71333.3359, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [72333.3359, 2, 0.0],
+ [72666.67, 1, 0.0],
+ [73000.0, 0, 0.0],
+ [73166.67, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [73333.3359, 2, 0.0],
+ [73500.0, 3, 0.0],
+ [73666.67, 0, 0.0],
+ [73833.3359, 3, 0.0],
+ [74000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [74666.67, 2, 0.0],
+ [75000.0, 0, 0.0],
+ [75333.3359, 2, 0.0],
+ [75666.67, 0, 0.0],
+ [75833.3359, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [76000.0, 2, 0.0],
+ [76166.67, 3, 0.0],
+ [76333.3359, 0, 0.0],
+ [76666.67, 2, 0.0],
+ [77000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [77333.3359, 2, 0.0],
+ [77666.67, 0, 0.0],
+ [78000.0, 2, 0.0],
+ [78333.3359, 0, 0.0],
+ [78500.0, 3, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [78666.67, 2, 0.0],
+ [78833.3359, 3, 0.0],
+ [79000.0, 0, 0.0],
+ [79333.3359, 2, 0.0],
+ [79666.67, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [80000.0, 1, 0.0],
+ [80333.3359, 0, 0.0],
+ [80500.0, 3, 0.0],
+ [80666.67, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [81333.3359, 1, 0.0],
+ [81666.67, 1, 0.0],
+ [82000.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [82666.67, 1, 0.0],
+ [83000.0, 0, 0.0],
+ [83166.67, 3, 0.0],
+ [83333.3359, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [84000.0, 1, 0.0],
+ [84333.3359, 1, 0.0],
+ [84666.67, 1, 0.0]
+ ]
+ },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] }
+ ]
+ },
+ "generatedBy": "SNIFF ver.6"
+}
diff --git a/assets/preload/data/songs/eggnog/_meta.json b/assets/preload/data/songs/eggnog/_meta.json
new file mode 100644
index 0000000000..4c2eee6beb
--- /dev/null
+++ b/assets/preload/data/songs/eggnog/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/songs/eggnog/eggnog-easy.json b/assets/preload/data/songs/eggnog/eggnog-easy.json
new file mode 100644
index 0000000000..3803bde7ff
--- /dev/null
+++ b/assets/preload/data/songs/eggnog/eggnog-easy.json
@@ -0,0 +1,694 @@
+{
+ "song": {
+ "player1": "bf-christmas",
+ "gfVersion": "gf-christmas",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [3399.99976, 1, 0],
+ [3799.99976, 1, 0],
+ [4200, 1, 0],
+ [4400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [5000, 1, 0],
+ [5400, 1, 0],
+ [5600, 3, 0],
+ [6000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [6599.99951, 1, 0],
+ [6999.99951, 1, 0],
+ [7399.99951, 1, 0],
+ [7599.99951, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [8200, 1, 0],
+ [8600, 1, 0],
+ [8800, 3, 0],
+ [9000, 2, 0],
+ [9400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [9800, 1, 0],
+ [10200, 1, 0],
+ [10600, 1, 0],
+ [10800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [11400, 1, 0],
+ [11800, 1, 0],
+ [12000, 3, 0],
+ [12400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [12999.999, 1, 0],
+ [13399.999, 1, 0],
+ [13799.999, 1, 0],
+ [13999.999, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [14599.999, 1, 0],
+ [14999.999, 1, 0],
+ [15199.999, 3, 0],
+ [15399.999, 2, 0],
+ [15799.999, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [15999.999, 2, 0],
+ [16400, 1, 0],
+ [16800, 3, 100],
+ [17200, 0, 0],
+ [17400, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [17800, 0, 0],
+ [18200, 0, 0],
+ [18600, 0, 0],
+ [19000, 3, 400]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [19600, 1, 100],
+ [20000, 3, 100],
+ [20400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [21000, 0, 0],
+ [21400, 1, 0],
+ [22000, 2, 400]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [22400, 4, 400],
+ [22400, 2, 0],
+ [22800, 1, 0],
+ [23200, 3, 100],
+ [23600, 0, 0],
+ [23800, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [24200, 0, 0],
+ [24600, 0, 0],
+ [25000, 0, 0],
+ [25400, 3, 400]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [25999.998, 1, 100],
+ [26399.998, 3, 100],
+ [26799.998, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [27399.998, 0, 0],
+ [27799.998, 1, 0],
+ [28399.998, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [28799.998, 4, 400],
+ [28999.998, 3, 0],
+ [29199.998, 1, 0],
+ [29399.998, 0, 0],
+ [29799.998, 3, 0],
+ [30199.998, 0, 0],
+ [30299.998, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [30599.998, 3, 0],
+ [30799.998, 1, 0],
+ [30999.998, 0, 0],
+ [31099.998, 3, 0],
+ [31599.998, 3, 0],
+ [31799.998, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [31999.998, 3, 0],
+ [32399.998, 1, 0],
+ [32599.998, 0, 0],
+ [32699.998, 3, 0],
+ [33000, 3, 0],
+ [33400, 0, 0],
+ [33500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [33800, 3, 0],
+ [34000, 1, 0],
+ [34200, 0, 0],
+ [34400, 1, 0],
+ [34800, 3, 0],
+ [35000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [35200, 7, 400],
+ [35400, 3, 0],
+ [35600, 1, 0],
+ [35800, 0, 0],
+ [36200, 3, 0],
+ [36600, 0, 0],
+ [36700, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [37000, 3, 0],
+ [37200, 1, 0],
+ [37400, 0, 0],
+ [37500, 3, 0],
+ [38000, 3, 0],
+ [38200, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [38400, 3, 0],
+ [38800, 1, 0],
+ [39000, 0, 0],
+ [39100, 3, 0],
+ [39400, 3, 0],
+ [39800, 0, 0],
+ [39900, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [40200, 3, 0],
+ [40400, 1, 0],
+ [40600, 0, 0],
+ [40800, 1, 0],
+ [41200, 3, 0],
+ [41400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [41600, 7, 400],
+ [41600, 0, 0],
+ [42000, 3, 0],
+ [42200, 0, 0],
+ [42600, 0, 0],
+ [43000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [43200, 7, 400],
+ [43200, 0, 0],
+ [43600, 3, 0],
+ [43800, 0, 0],
+ [44200, 0, 0],
+ [44600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [44800, 7, 400],
+ [44800, 0, 0],
+ [45200, 3, 0],
+ [45400, 0, 0],
+ [45800, 0, 0],
+ [46200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [46400, 7, 400],
+ [46400, 0, 0],
+ [46800, 3, 0],
+ [47000, 0, 0],
+ [47400, 0, 0],
+ [47800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [48000, 7, 400],
+ [48200, 1, 0],
+ [48600, 1, 0],
+ [49000, 1, 0],
+ [49400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49800, 1, 0],
+ [50200, 1, 0],
+ [50600, 1, 0],
+ [50800, 3, 0],
+ [51000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [51399.9961, 1, 0],
+ [51799.9961, 1, 0],
+ [52199.9961, 1, 0],
+ [52599.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [52999.9961, 1, 0],
+ [53399.9961, 1, 0],
+ [53799.9961, 1, 0],
+ [53999.9961, 3, 0],
+ [54199.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [54599.9961, 1, 0],
+ [54999.9961, 1, 0],
+ [55399.9961, 1, 0],
+ [55799.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56199.9961, 1, 0],
+ [56599.9961, 1, 0],
+ [56999.9961, 1, 0],
+ [57199.9961, 3, 0],
+ [57399.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [57799.9961, 1, 0],
+ [58199.9961, 1, 0],
+ [58599.9961, 1, 0],
+ [58999.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [59399.9961, 1, 0],
+ [59799.9961, 1, 0],
+ [60199.9961, 1, 0],
+ [60399.9961, 3, 0],
+ [60599.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [60799.9961, 2, 0],
+ [60999.9961, 3, 0],
+ [61199.9961, 0, 0],
+ [61599.9961, 1, 0],
+ [61999.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [62399.9961, 0, 0],
+ [62799.9961, 0, 0],
+ [62999.9961, 3, 100],
+ [63199.9961, 1, 0],
+ [63599.9961, 3, 200]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [63999.9961, 2, 0],
+ [64199.9961, 3, 0],
+ [64399.9961, 0, 0],
+ [64799.9961, 1, 0],
+ [65199.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65600, 0, 0],
+ [66000, 0, 0],
+ [66200, 3, 100],
+ [66400, 1, 0],
+ [66800, 3, 200]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [67200, 1, 0],
+ [67400, 3, 0],
+ [67600, 0, 200],
+ [68000, 1, 0],
+ [68400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [68800, 3, 0],
+ [68900, 0, 100],
+ [69200, 1, 0],
+ [69600, 2, 300],
+ [70000, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [70400, 1, 0],
+ [70600, 3, 0],
+ [70800, 0, 200],
+ [71200, 1, 0],
+ [71600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [72000, 3, 0],
+ [72100, 0, 100],
+ [72400, 1, 0],
+ [72800, 2, 300],
+ [73200, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [73600, 2, 0],
+ [73800, 7, 0],
+ [74000, 5, 0],
+ [74000, 1, 0],
+ [74200, 4, 0],
+ [74400, 3, 100],
+ [74600, 7, 0],
+ [74800, 0, 0],
+ [75000, 4, 0],
+ [75000, 2, 0],
+ [75100, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [75400, 7, 0],
+ [75400, 0, 0],
+ [75600, 5, 0],
+ [75800, 4, 0],
+ [75800, 0, 0],
+ [75900, 7, 0],
+ [76200, 0, 0],
+ [76400, 7, 0],
+ [76600, 4, 0],
+ [76600, 3, 400]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [76800, 7, 0],
+ [77200, 5, 0],
+ [77200, 1, 100],
+ [77400, 4, 0],
+ [77500, 7, 0],
+ [77600, 3, 100],
+ [77800, 7, 0],
+ [78000, 1, 0],
+ [78200, 4, 0],
+ [78200, 0, 0],
+ [78300, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78600, 7, 0],
+ [78600, 0, 0],
+ [78800, 5, 0],
+ [79000, 4, 0],
+ [79000, 1, 0],
+ [79200, 5, 0],
+ [79400, 1, 0],
+ [79600, 7, 0],
+ [79600, 2, 300],
+ [79800, 5, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80000, 7, 400],
+ [80200, 3, 0],
+ [80400, 1, 0],
+ [80600, 0, 0],
+ [81000, 3, 0],
+ [81400, 0, 0],
+ [81500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [81800, 3, 0],
+ [82000, 1, 0],
+ [82200, 0, 0],
+ [82300, 3, 0],
+ [82800, 3, 0],
+ [83000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [83200, 3, 0],
+ [83600, 1, 0],
+ [83800, 0, 0],
+ [83900, 3, 0],
+ [84200, 3, 0],
+ [84600, 0, 0],
+ [84700, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [85000, 3, 0],
+ [85200, 1, 0],
+ [85400, 0, 0],
+ [85600, 1, 0],
+ [86000, 3, 0],
+ [86200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [86400, 0, 0],
+ [86400, 7, 400],
+ [86800, 3, 0],
+ [87000, 0, 0],
+ [87400, 0, 0],
+ [87800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [88000, 7, 400],
+ [88000, 0, 0],
+ [88400, 3, 0],
+ [88600, 0, 0],
+ [89000, 0, 0],
+ [89400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [89600, 7, 400],
+ [89600, 0, 0],
+ [90000, 3, 0],
+ [90200, 0, 0],
+ [90600, 0, 0],
+ [91000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [91200, 7, 400],
+ [91200, 0, 0],
+ [91600, 3, 0],
+ [91800, 0, 0],
+ [92200, 0, 0],
+ [92600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[92800, 3, 800]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 150,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "parents-christmas",
+ "song": "Eggnog",
+ "stage": "mall",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 150,
+ "speed": 1.4
+ }
+}
diff --git a/assets/preload/data/songs/eggnog/eggnog-hard.json b/assets/preload/data/songs/eggnog/eggnog-hard.json
new file mode 100644
index 0000000000..6c3a3ab450
--- /dev/null
+++ b/assets/preload/data/songs/eggnog/eggnog-hard.json
@@ -0,0 +1,841 @@
+{
+ "song": {
+ "player1": "bf-christmas",
+ "gfVersion": "gf-christmas",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [3399.99976, 1, 0],
+ [3799.99976, 1, 0],
+ [4200, 1, 0],
+ [4400, 3, 0],
+ [4600, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [5000, 1, 0],
+ [5400, 1, 0],
+ [5600, 3, 0],
+ [5800, 2, 0],
+ [6000, 3, 0],
+ [6200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [6599.99951, 1, 0],
+ [6999.99951, 1, 0],
+ [7399.99951, 1, 0],
+ [7599.99951, 3, 0],
+ [7799.99951, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [8200, 1, 0],
+ [8600, 1, 0],
+ [8800, 3, 0],
+ [9000, 2, 0],
+ [9200, 0, 0],
+ [9400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [9800, 1, 0],
+ [10200, 1, 0],
+ [10600, 1, 0],
+ [10800, 3, 0],
+ [11000, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [11400, 1, 0],
+ [11800, 1, 0],
+ [12000, 3, 0],
+ [12200, 2, 0],
+ [12400, 3, 0],
+ [12600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [12999.999, 1, 0],
+ [13399.999, 1, 0],
+ [13799.999, 1, 0],
+ [13999.999, 3, 0],
+ [14199.999, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [14599.999, 1, 0],
+ [14999.999, 1, 0],
+ [15199.999, 3, 0],
+ [15399.999, 2, 0],
+ [15599.999, 0, 0],
+ [15799.999, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [15999.999, 2, 0],
+ [16099.999, 0, 0],
+ [16199.999, 3, 100],
+ [16400, 1, 0],
+ [16500, 2, 200],
+ [16800, 3, 100],
+ [17200, 0, 0],
+ [17400, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [17800, 0, 0],
+ [18200, 0, 0],
+ [18600, 0, 0],
+ [18700, 1, 0],
+ [18800, 2, 0],
+ [19000, 3, 400]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [19600, 1, 100],
+ [20000, 3, 100],
+ [20400, 1, 0],
+ [20600, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [21000, 0, 0],
+ [21400, 1, 0],
+ [21800, 1, 0],
+ [22000, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [22400, 4, 400],
+ [22400, 2, 0],
+ [22500, 0, 0],
+ [22600, 3, 100],
+ [22800, 1, 0],
+ [22900, 2, 200],
+ [23200, 3, 100],
+ [23600, 0, 0],
+ [23800, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [24200, 0, 0],
+ [24600, 0, 0],
+ [25000, 0, 0],
+ [25100, 1, 0],
+ [25200, 2, 0],
+ [25400, 3, 400]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [25999.998, 1, 100],
+ [26399.998, 3, 100],
+ [26799.998, 1, 0],
+ [26999.998, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [27399.998, 0, 0],
+ [27799.998, 1, 0],
+ [28199.998, 1, 0],
+ [28399.998, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [28799.998, 4, 400],
+ [28999.998, 3, 0],
+ [29199.998, 1, 0],
+ [29399.998, 0, 0],
+ [29499.998, 3, 0],
+ [29599.998, 2, 0],
+ [29799.998, 3, 0],
+ [29999.998, 1, 0],
+ [30199.998, 0, 0],
+ [30299.998, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [30399.998, 2, 0],
+ [30599.998, 3, 0],
+ [30799.998, 1, 0],
+ [30999.998, 0, 0],
+ [31099.998, 3, 0],
+ [31199.998, 2, 0],
+ [31399.998, 3, 0],
+ [31599.998, 3, 0],
+ [31799.998, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [31999.998, 3, 0],
+ [32199.998, 3, 0],
+ [32399.998, 1, 0],
+ [32599.998, 0, 0],
+ [32699.998, 3, 0],
+ [32800, 2, 0],
+ [33000, 3, 0],
+ [33200, 1, 0],
+ [33400, 0, 0],
+ [33500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [33600, 2, 0],
+ [33800, 3, 0],
+ [34000, 1, 0],
+ [34200, 0, 0],
+ [34400, 1, 0],
+ [34500, 0, 0],
+ [34600, 2, 100],
+ [34800, 3, 0],
+ [35000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [35200, 7, 400],
+ [35400, 3, 0],
+ [35600, 1, 0],
+ [35800, 0, 0],
+ [35900, 3, 0],
+ [36000, 2, 0],
+ [36200, 3, 0],
+ [36400, 1, 0],
+ [36600, 0, 0],
+ [36700, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [36800, 2, 0],
+ [37000, 3, 0],
+ [37200, 1, 0],
+ [37400, 0, 0],
+ [37500, 3, 0],
+ [37600, 2, 0],
+ [37800, 3, 0],
+ [38000, 3, 0],
+ [38200, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [38400, 3, 0],
+ [38600, 3, 0],
+ [38800, 1, 0],
+ [39000, 0, 0],
+ [39100, 3, 0],
+ [39200, 2, 0],
+ [39400, 3, 0],
+ [39600, 1, 0],
+ [39800, 0, 0],
+ [39900, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [40000, 2, 0],
+ [40200, 3, 0],
+ [40400, 1, 0],
+ [40600, 0, 0],
+ [40800, 1, 0],
+ [40900, 0, 0],
+ [41000, 2, 100],
+ [41200, 3, 0],
+ [41400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [41600, 0, 0],
+ [41600, 7, 400],
+ [41700, 2, 0],
+ [41800, 3, 0],
+ [42000, 2, 0],
+ [42200, 0, 0],
+ [42400, 1, 0],
+ [42600, 0, 0],
+ [42800, 1, 0],
+ [43000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [43200, 7, 400],
+ [43200, 0, 0],
+ [43300, 2, 0],
+ [43400, 3, 0],
+ [43600, 2, 0],
+ [43800, 0, 0],
+ [44000, 1, 0],
+ [44200, 0, 0],
+ [44400, 1, 0],
+ [44600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [44800, 7, 400],
+ [44800, 0, 0],
+ [44900, 2, 0],
+ [45000, 3, 0],
+ [45200, 2, 0],
+ [45400, 0, 0],
+ [45600, 1, 0],
+ [45800, 0, 0],
+ [46000, 1, 0],
+ [46200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [46400, 7, 400],
+ [46400, 0, 0],
+ [46500, 2, 0],
+ [46600, 3, 0],
+ [46800, 2, 0],
+ [47000, 0, 0],
+ [47200, 1, 0],
+ [47400, 0, 0],
+ [47600, 1, 0],
+ [47800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [48000, 7, 400],
+ [48200, 1, 0],
+ [48600, 1, 0],
+ [49000, 1, 0],
+ [49200, 2, 0],
+ [49300, 0, 0],
+ [49400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49800, 1, 0],
+ [50200, 1, 0],
+ [50600, 1, 0],
+ [50800, 3, 0],
+ [50900, 0, 0],
+ [51000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [51399.9961, 1, 0],
+ [51799.9961, 1, 0],
+ [52199.9961, 1, 0],
+ [52399.9961, 2, 0],
+ [52499.9961, 0, 0],
+ [52599.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [52999.9961, 1, 0],
+ [53399.9961, 1, 0],
+ [53799.9961, 1, 0],
+ [53999.9961, 3, 0],
+ [54099.9961, 0, 0],
+ [54199.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [54599.9961, 1, 0],
+ [54999.9961, 1, 0],
+ [55399.9961, 1, 0],
+ [55599.9961, 2, 0],
+ [55699.9961, 0, 0],
+ [55799.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56199.9961, 1, 0],
+ [56599.9961, 1, 0],
+ [56999.9961, 1, 0],
+ [57199.9961, 3, 0],
+ [57299.9961, 0, 0],
+ [57399.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [57799.9961, 1, 0],
+ [58199.9961, 1, 0],
+ [58599.9961, 1, 0],
+ [58799.9961, 2, 0],
+ [58899.9961, 0, 0],
+ [58999.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [59399.9961, 1, 0],
+ [59799.9961, 1, 0],
+ [60199.9961, 1, 0],
+ [60399.9961, 3, 0],
+ [60499.9961, 0, 0],
+ [60599.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [60799.9961, 2, 0],
+ [60999.9961, 3, 0],
+ [61199.9961, 0, 0],
+ [61399.9961, 3, 0],
+ [61599.9961, 1, 0],
+ [61799.9961, 0, 0],
+ [61999.9961, 1, 0],
+ [62199.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [62399.9961, 0, 0],
+ [62499.9961, 3, 0],
+ [62599.9961, 1, 0],
+ [62799.9961, 0, 0],
+ [62899.9961, 1, 0],
+ [62999.9961, 3, 100],
+ [63199.9961, 1, 0],
+ [63399.9961, 2, 0],
+ [63599.9961, 3, 200]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [63999.9961, 2, 0],
+ [64199.9961, 3, 0],
+ [64399.9961, 0, 0],
+ [64599.9961, 3, 0],
+ [64799.9961, 1, 0],
+ [64999.9961, 0, 0],
+ [65199.9961, 1, 0],
+ [65399.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65600, 0, 0],
+ [65700, 3, 0],
+ [65800, 1, 0],
+ [66000, 0, 0],
+ [66100, 1, 0],
+ [66200, 3, 100],
+ [66400, 1, 0],
+ [66600, 2, 0],
+ [66800, 3, 200]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [67200, 1, 0],
+ [67400, 3, 0],
+ [67600, 0, 200],
+ [68000, 1, 0],
+ [68200, 1, 0],
+ [68400, 1, 0],
+ [68600, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [68800, 3, 0],
+ [68900, 0, 0],
+ [69000, 3, 0],
+ [69200, 1, 0],
+ [69300, 0, 0],
+ [69400, 1, 0],
+ [69500, 0, 0],
+ [69600, 2, 300],
+ [70000, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [70400, 1, 0],
+ [70600, 3, 0],
+ [70800, 0, 200],
+ [71200, 1, 0],
+ [71400, 0, 0],
+ [71600, 1, 0],
+ [71800, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [72000, 3, 0],
+ [72100, 0, 0],
+ [72200, 3, 0],
+ [72400, 1, 0],
+ [72500, 0, 0],
+ [72600, 1, 0],
+ [72700, 0, 0],
+ [72800, 2, 300],
+ [73200, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [73600, 2, 0],
+ [73700, 0, 0],
+ [73800, 7, 0],
+ [73800, 3, 100],
+ [74000, 5, 0],
+ [74000, 1, 0],
+ [74100, 2, 200],
+ [74200, 4, 0],
+ [74300, 7, 0],
+ [74400, 6, 0],
+ [74400, 3, 100],
+ [74600, 7, 0],
+ [74800, 5, 0],
+ [74800, 0, 0],
+ [75000, 4, 0],
+ [75000, 2, 0],
+ [75100, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [75200, 6, 0],
+ [75400, 7, 0],
+ [75400, 0, 0],
+ [75600, 5, 0],
+ [75800, 4, 0],
+ [75800, 0, 0],
+ [75900, 7, 0],
+ [76000, 6, 0],
+ [76200, 7, 0],
+ [76200, 0, 0],
+ [76300, 1, 0],
+ [76400, 7, 0],
+ [76400, 2, 0],
+ [76600, 4, 0],
+ [76600, 3, 400]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [76800, 7, 0],
+ [77000, 7, 0],
+ [77200, 5, 0],
+ [77200, 1, 100],
+ [77400, 4, 0],
+ [77500, 7, 0],
+ [77600, 6, 0],
+ [77600, 3, 100],
+ [77800, 7, 0],
+ [78000, 5, 0],
+ [78000, 1, 0],
+ [78200, 4, 0],
+ [78200, 0, 0],
+ [78300, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78400, 6, 0],
+ [78600, 7, 0],
+ [78600, 0, 0],
+ [78800, 5, 0],
+ [79000, 4, 0],
+ [79000, 1, 0],
+ [79200, 5, 0],
+ [79300, 4, 0],
+ [79400, 6, 100],
+ [79400, 1, 0],
+ [79600, 7, 0],
+ [79600, 2, 300],
+ [79800, 5, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80000, 7, 400],
+ [80200, 3, 0],
+ [80400, 1, 0],
+ [80600, 0, 0],
+ [80700, 3, 0],
+ [80800, 2, 0],
+ [81000, 3, 0],
+ [81200, 1, 0],
+ [81400, 0, 0],
+ [81500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [81600, 2, 0],
+ [81800, 3, 0],
+ [82000, 1, 0],
+ [82200, 0, 0],
+ [82300, 3, 0],
+ [82400, 2, 0],
+ [82600, 3, 0],
+ [82800, 3, 0],
+ [83000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [83200, 3, 0],
+ [83400, 3, 0],
+ [83600, 1, 0],
+ [83800, 0, 0],
+ [83900, 3, 0],
+ [84000, 2, 0],
+ [84200, 3, 0],
+ [84400, 1, 0],
+ [84600, 0, 0],
+ [84700, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [84800, 2, 0],
+ [85000, 3, 0],
+ [85200, 1, 0],
+ [85400, 0, 0],
+ [85600, 1, 0],
+ [85700, 0, 0],
+ [85800, 2, 100],
+ [86000, 3, 0],
+ [86200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [86400, 0, 0],
+ [86400, 7, 400],
+ [86500, 2, 0],
+ [86600, 3, 0],
+ [86800, 2, 0],
+ [87000, 0, 0],
+ [87200, 1, 0],
+ [87400, 0, 0],
+ [87600, 1, 0],
+ [87800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [88000, 7, 400],
+ [88000, 0, 0],
+ [88100, 2, 0],
+ [88200, 3, 0],
+ [88400, 2, 0],
+ [88600, 0, 0],
+ [88800, 1, 0],
+ [89000, 0, 0],
+ [89200, 1, 0],
+ [89400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [89600, 7, 400],
+ [89600, 0, 0],
+ [89700, 2, 0],
+ [89800, 3, 0],
+ [90000, 2, 0],
+ [90200, 0, 0],
+ [90400, 1, 0],
+ [90600, 0, 0],
+ [90800, 1, 0],
+ [91000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [91200, 7, 400],
+ [91200, 0, 0],
+ [91300, 2, 0],
+ [91400, 3, 0],
+ [91600, 2, 0],
+ [91800, 0, 0],
+ [92000, 1, 0],
+ [92200, 0, 0],
+ [92400, 1, 0],
+ [92600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[92800, 3, 800]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 150,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "parents-christmas",
+ "song": "Eggnog",
+ "stage": "mall",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 150,
+ "speed": 1.9
+ }
+}
diff --git a/assets/preload/data/songs/eggnog/eggnog.json b/assets/preload/data/songs/eggnog/eggnog.json
new file mode 100644
index 0000000000..3c964e407a
--- /dev/null
+++ b/assets/preload/data/songs/eggnog/eggnog.json
@@ -0,0 +1,759 @@
+{
+ "song": {
+ "player1": "bf-christmas",
+ "gfVersion": "gf-christmas",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [3399.99976, 1, 0],
+ [3799.99976, 1, 0],
+ [4200, 1, 0],
+ [4400, 3, 0],
+ [4600, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [5000, 1, 0],
+ [5400, 1, 0],
+ [5600, 3, 0],
+ [5800, 2, 0],
+ [6000, 3, 0],
+ [6200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [6599.99951, 1, 0],
+ [6999.99951, 1, 0],
+ [7399.99951, 1, 0],
+ [7599.99951, 3, 0],
+ [7799.99951, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [8200, 1, 0],
+ [8600, 1, 0],
+ [8800, 3, 0],
+ [9000, 2, 0],
+ [9400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [9800, 1, 0],
+ [10200, 1, 0],
+ [10600, 1, 0],
+ [10800, 3, 0],
+ [11000, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [11400, 1, 0],
+ [11800, 1, 0],
+ [12000, 3, 0],
+ [12200, 2, 0],
+ [12400, 3, 0],
+ [12600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [12999.999, 1, 0],
+ [13399.999, 1, 0],
+ [13799.999, 1, 0],
+ [13999.999, 3, 0],
+ [14199.999, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [14599.999, 1, 0],
+ [14999.999, 1, 0],
+ [15199.999, 3, 0],
+ [15399.999, 2, 0],
+ [15799.999, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [15999.999, 2, 0],
+ [16199.999, 3, 100],
+ [16400, 1, 0],
+ [16800, 3, 100],
+ [17200, 0, 0],
+ [17400, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [17800, 0, 0],
+ [18200, 0, 0],
+ [18600, 0, 0],
+ [19000, 3, 400]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [19600, 1, 100],
+ [20000, 3, 100],
+ [20400, 1, 0],
+ [20600, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [21000, 0, 0],
+ [21400, 1, 0],
+ [21800, 1, 0],
+ [22000, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [22400, 4, 400],
+ [22400, 2, 0],
+ [22600, 3, 100],
+ [22800, 1, 0],
+ [23200, 3, 100],
+ [23600, 0, 0],
+ [23800, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [24200, 0, 0],
+ [24600, 0, 0],
+ [25000, 0, 0],
+ [25400, 3, 400]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [25999.998, 1, 100],
+ [26399.998, 3, 100],
+ [26799.998, 1, 0],
+ [26999.998, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [27399.998, 0, 0],
+ [27799.998, 1, 0],
+ [28199.998, 1, 0],
+ [28399.998, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [28799.998, 4, 400],
+ [28999.998, 3, 0],
+ [29199.998, 1, 0],
+ [29399.998, 0, 0],
+ [29499.998, 3, 0],
+ [29799.998, 3, 0],
+ [29999.998, 1, 0],
+ [30199.998, 0, 0],
+ [30299.998, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [30599.998, 3, 0],
+ [30799.998, 1, 0],
+ [30999.998, 0, 0],
+ [31099.998, 3, 0],
+ [31399.998, 3, 0],
+ [31599.998, 3, 0],
+ [31799.998, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [31999.998, 3, 0],
+ [32199.998, 3, 0],
+ [32399.998, 1, 0],
+ [32599.998, 0, 0],
+ [32699.998, 3, 0],
+ [33000, 3, 0],
+ [33200, 1, 0],
+ [33400, 0, 0],
+ [33500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [33800, 3, 0],
+ [34000, 1, 0],
+ [34200, 0, 0],
+ [34400, 1, 0],
+ [34500, 0, 0],
+ [34800, 3, 0],
+ [35000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [35200, 7, 400],
+ [35400, 3, 0],
+ [35600, 1, 0],
+ [35800, 0, 0],
+ [35900, 3, 0],
+ [36200, 3, 0],
+ [36400, 1, 0],
+ [36600, 0, 0],
+ [36700, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [37000, 3, 0],
+ [37200, 1, 0],
+ [37400, 0, 0],
+ [37500, 3, 0],
+ [37800, 3, 0],
+ [38000, 3, 0],
+ [38200, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [38400, 3, 0],
+ [38600, 3, 0],
+ [38800, 1, 0],
+ [39000, 0, 0],
+ [39100, 3, 0],
+ [39400, 3, 0],
+ [39600, 1, 0],
+ [39800, 0, 0],
+ [39900, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [40200, 3, 0],
+ [40400, 1, 0],
+ [40600, 0, 0],
+ [40800, 1, 0],
+ [41000, 2, 100],
+ [41200, 3, 0],
+ [41400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [41600, 0, 0],
+ [41600, 7, 400],
+ [41800, 3, 0],
+ [42000, 3, 0],
+ [42200, 0, 0],
+ [42600, 0, 0],
+ [43000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [43200, 7, 400],
+ [43200, 0, 0],
+ [43400, 3, 0],
+ [43600, 3, 0],
+ [43800, 0, 0],
+ [44200, 0, 0],
+ [44600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [44800, 7, 400],
+ [44800, 0, 0],
+ [45000, 3, 0],
+ [45200, 3, 0],
+ [45400, 0, 0],
+ [45800, 0, 0],
+ [46200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [46400, 7, 400],
+ [46400, 0, 0],
+ [46600, 3, 0],
+ [46800, 3, 0],
+ [47000, 0, 0],
+ [47400, 0, 0],
+ [47800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [48000, 7, 400],
+ [48200, 1, 0],
+ [48600, 1, 0],
+ [49000, 1, 0],
+ [49200, 2, 0],
+ [49400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49800, 1, 0],
+ [50200, 1, 0],
+ [50600, 1, 0],
+ [50800, 3, 0],
+ [50900, 0, 0],
+ [51000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [51399.9961, 1, 0],
+ [51799.9961, 1, 0],
+ [52199.9961, 1, 0],
+ [52399.9961, 2, 0],
+ [52599.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [52999.9961, 1, 0],
+ [53399.9961, 1, 0],
+ [53799.9961, 1, 0],
+ [53999.9961, 3, 0],
+ [54099.9961, 0, 0],
+ [54199.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [54599.9961, 1, 0],
+ [54999.9961, 1, 0],
+ [55399.9961, 1, 0],
+ [55599.9961, 2, 0],
+ [55799.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56199.9961, 1, 0],
+ [56599.9961, 1, 0],
+ [56999.9961, 1, 0],
+ [57199.9961, 3, 0],
+ [57299.9961, 0, 0],
+ [57399.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [57799.9961, 1, 0],
+ [58199.9961, 1, 0],
+ [58599.9961, 1, 0],
+ [58799.9961, 2, 0],
+ [58999.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [59399.9961, 1, 0],
+ [59799.9961, 1, 0],
+ [60199.9961, 1, 0],
+ [60399.9961, 3, 0],
+ [60499.9961, 0, 0],
+ [60599.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [60799.9961, 2, 0],
+ [60999.9961, 3, 0],
+ [61199.9961, 0, 0],
+ [61599.9961, 1, 0],
+ [61799.9961, 0, 0],
+ [61999.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [62399.9961, 0, 0],
+ [62599.9961, 1, 0],
+ [62799.9961, 0, 0],
+ [62999.9961, 3, 100],
+ [63199.9961, 1, 0],
+ [63399.9961, 2, 0],
+ [63599.9961, 3, 200]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [63999.9961, 2, 0],
+ [64199.9961, 3, 0],
+ [64399.9961, 0, 0],
+ [64799.9961, 1, 0],
+ [64999.9961, 0, 0],
+ [65199.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65600, 0, 0],
+ [65800, 1, 0],
+ [66000, 0, 0],
+ [66200, 3, 100],
+ [66400, 1, 0],
+ [66600, 2, 0],
+ [66800, 3, 200]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [67200, 1, 0],
+ [67400, 3, 0],
+ [67600, 0, 200],
+ [68000, 1, 0],
+ [68200, 1, 0],
+ [68400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [68800, 3, 0],
+ [68900, 0, 100],
+ [69200, 1, 0],
+ [69400, 1, 0],
+ [69600, 2, 300],
+ [70000, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [70400, 1, 0],
+ [70600, 3, 0],
+ [70800, 0, 200],
+ [71200, 1, 0],
+ [71400, 0, 0],
+ [71600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [72000, 3, 0],
+ [72100, 0, 100],
+ [72400, 1, 0],
+ [72600, 1, 0],
+ [72800, 2, 300],
+ [73200, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [73600, 2, 0],
+ [73800, 7, 0],
+ [73800, 3, 100],
+ [74000, 5, 0],
+ [74000, 1, 0],
+ [74200, 4, 0],
+ [74300, 7, 0],
+ [74400, 3, 100],
+ [74600, 7, 0],
+ [74800, 5, 0],
+ [74800, 0, 0],
+ [75000, 4, 0],
+ [75000, 2, 0],
+ [75100, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [75400, 7, 0],
+ [75400, 0, 0],
+ [75600, 5, 0],
+ [75800, 4, 0],
+ [75800, 0, 0],
+ [75900, 7, 0],
+ [76200, 7, 0],
+ [76200, 0, 0],
+ [76400, 7, 0],
+ [76600, 4, 0],
+ [76600, 3, 400]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [76800, 7, 0],
+ [77000, 7, 0],
+ [77200, 5, 0],
+ [77200, 1, 100],
+ [77400, 4, 0],
+ [77500, 7, 0],
+ [77600, 3, 100],
+ [77800, 7, 0],
+ [78000, 5, 0],
+ [78000, 1, 0],
+ [78200, 4, 0],
+ [78200, 0, 0],
+ [78300, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78600, 7, 0],
+ [78600, 0, 0],
+ [78800, 5, 0],
+ [79000, 4, 0],
+ [79000, 1, 0],
+ [79200, 5, 0],
+ [79300, 4, 0],
+ [79400, 1, 0],
+ [79600, 7, 0],
+ [79600, 2, 300],
+ [79800, 5, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80000, 7, 400],
+ [80200, 3, 0],
+ [80400, 1, 0],
+ [80600, 0, 0],
+ [80700, 3, 0],
+ [81000, 3, 0],
+ [81200, 1, 0],
+ [81400, 0, 0],
+ [81500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [81800, 3, 0],
+ [82000, 1, 0],
+ [82200, 0, 0],
+ [82300, 3, 0],
+ [82600, 3, 0],
+ [82800, 3, 0],
+ [83000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [83200, 3, 0],
+ [83400, 3, 0],
+ [83600, 1, 0],
+ [83800, 0, 0],
+ [83900, 3, 0],
+ [84200, 3, 0],
+ [84400, 1, 0],
+ [84600, 0, 0],
+ [84700, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [85000, 3, 0],
+ [85200, 1, 0],
+ [85400, 0, 0],
+ [85600, 1, 0],
+ [85700, 0, 0],
+ [86000, 3, 0],
+ [86200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [86400, 0, 0],
+ [86400, 7, 400],
+ [86600, 3, 0],
+ [86800, 3, 0],
+ [87000, 0, 0],
+ [87400, 0, 0],
+ [87800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [88000, 7, 400],
+ [88000, 0, 0],
+ [88200, 3, 0],
+ [88400, 3, 0],
+ [88600, 0, 0],
+ [89000, 0, 0],
+ [89400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [89600, 7, 400],
+ [89600, 0, 0],
+ [89800, 3, 0],
+ [90000, 3, 0],
+ [90200, 0, 0],
+ [90600, 0, 0],
+ [91000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "altAnim": true,
+ "sectionNotes": [
+ [91200, 7, 400],
+ [91200, 0, 0],
+ [91400, 3, 0],
+ [91600, 3, 0],
+ [91800, 0, 0],
+ [92200, 0, 0],
+ [92600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[92800, 3, 800]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 150,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "parents-christmas",
+ "song": "Eggnog",
+ "stage": "mall",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 150,
+ "speed": 1.6
+ }
+}
diff --git a/assets/preload/data/songs/fresh/_meta.json b/assets/preload/data/songs/fresh/_meta.json
new file mode 100644
index 0000000000..4c2eee6beb
--- /dev/null
+++ b/assets/preload/data/songs/fresh/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/songs/fresh/fresh-easy.json b/assets/preload/data/songs/fresh/fresh-easy.json
new file mode 100644
index 0000000000..84918a6206
--- /dev/null
+++ b/assets/preload/data/songs/fresh/fresh-easy.json
@@ -0,0 +1,453 @@
+{
+ "song": {
+ "song": "Fresh",
+ "bpm": 120.0,
+ "needsVoices": true,
+ "player1": "bf",
+ "player2": "dad",
+ "speed": 1.0,
+ "notes": [
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [0.0, 1, 0.0],
+ [500.0, 3, 0.0],
+ [1250.0, 1, 0.0],
+ [1500.0, 2, 0.0],
+ [1750.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [2000.0, 1, 0.0],
+ [2500.0, 3, 0.0],
+ [3250.0, 1, 0.0],
+ [3500.0, 2, 0.0],
+ [3750.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [4000.0, 1, 0.0],
+ [4500.0, 3, 0.0],
+ [5125.0, 1, 0.0],
+ [5250.0, 0, 0.0],
+ [5500.0, 0, 0.0],
+ [5750.0, 3, 125.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [6000.0, 1, 0.0],
+ [6500.0, 3, 0.0],
+ [7125.0, 1, 0.0],
+ [7250.0, 0, 0.0],
+ [7500.0, 0, 0.0],
+ [7750.0, 3, 125.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [8250.0, 0, 0.0],
+ [8500.0, 1, 0.0],
+ [9000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [10250.0, 0, 0.0],
+ [10500.0, 1, 0.0],
+ [11000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [12250.0, 0, 0.0],
+ [12500.0, 2, 0.0],
+ [12750.0, 3, 0.0],
+ [13000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [14250.0, 0, 0.0],
+ [14500.0, 2, 0.0],
+ [14750.0, 3, 0.0],
+ [15000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [16250.001, 0, 0.0],
+ [16500.0, 1, 0.0],
+ [16750.0, 3, 0.0],
+ [17000.0, 0, 0.0],
+ [17500.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [18250.0, 0, 0.0],
+ [18500.0, 1, 0.0],
+ [18750.0, 3, 0.0],
+ [19000.0, 0, 0.0],
+ [19500.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [20000.0, 3, 0.0],
+ [20250.0, 1, 0.0],
+ [21000.0, 3, 0.0],
+ [21250.0, 1, 0.0],
+ [21750.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [22000.0, 3, 0.0],
+ [22250.0, 1, 0.0],
+ [23000.0, 3, 0.0],
+ [23250.0, 1, 0.0],
+ [23750.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [24000.0, 3, 0.0],
+ [24500.0, 0, 0.0],
+ [25000.0, 1, 0.0],
+ [25250.0, 1, 0.0],
+ [25500.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [26000.0, 1, 0.0],
+ [26500.0, 3, 0.0],
+ [26750.0, 0, 0.0],
+ [27000.0, 2, 0.0],
+ [27500.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [28000.0, 3, 0.0],
+ [28500.0, 0, 0.0],
+ [29000.0, 1, 0.0],
+ [29250.0, 1, 0.0],
+ [29500.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [30000.0, 1, 0.0],
+ [30500.0, 3, 0.0],
+ [30750.0, 0, 0.0],
+ [31000.0, 2, 0.0],
+ [31500.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [32500.002, 0, 0.0],
+ [33000.0, 1, 0.0],
+ [33500.0, 1, 0.0],
+ [33750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [34250.0, 0, 0.0],
+ [34500.0, 3, 0.0],
+ [34750.0, 0, 0.0],
+ [35000.0, 2, 250.0],
+ [35500.0, 1, 375.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [36500.0, 0, 0.0],
+ [37000.0, 1, 0.0],
+ [37500.0, 1, 0.0],
+ [37750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [38250.0, 0, 0.0],
+ [38500.0, 3, 0.0],
+ [38750.0, 0, 0.0],
+ [39000.0, 2, 250.0],
+ [39500.0, 1, 375.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [40250.0, 0, 0.0],
+ [40500.0, 1, 0.0],
+ [41000.0, 2, 0.0],
+ [41500.0, 2, 0.0],
+ [41750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [42250.0, 0, 0.0],
+ [42500.0, 1, 0.0],
+ [43000.0, 2, 0.0],
+ [43500.0, 2, 0.0],
+ [43750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [44250.0, 0, 0.0],
+ [44500.0, 2, 0.0],
+ [44750.0, 3, 0.0],
+ [45000.0, 0, 0.0],
+ [45750.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [46250.0, 0, 0.0],
+ [46500.0, 2, 0.0],
+ [46750.0, 3, 0.0],
+ [47000.0, 0, 0.0],
+ [47750.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [48250.0, 0, 0.0],
+ [48500.0, 1, 0.0],
+ [48750.0, 3, 0.0],
+ [49000.0, 0, 0.0],
+ [49750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [50250.0, 0, 0.0],
+ [50500.0, 1, 0.0],
+ [50750.0, 3, 0.0],
+ [51000.0, 0, 0.0],
+ [51750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [52000.0, 3, 0.0],
+ [52250.0, 1, 0.0],
+ [52750.0, 2, 0.0],
+ [53000.0, 3, 0.0],
+ [53250.0, 1, 0.0],
+ [53750.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [54000.0, 3, 0.0],
+ [54250.0, 1, 0.0],
+ [54750.0, 2, 0.0],
+ [55000.0, 3, 0.0],
+ [55250.0, 1, 0.0],
+ [55750.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [56000.0, 3, 0.0],
+ [56500.0, 0, 0.0],
+ [57000.0, 1, 0.0],
+ [57250.0, 1, 0.0],
+ [57500.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [58000.0, 1, 0.0],
+ [58500.0, 3, 0.0],
+ [58750.0, 0, 0.0],
+ [59000.0, 2, 0.0],
+ [59500.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [60000.0, 3, 0.0],
+ [60500.0, 0, 0.0],
+ [61000.0, 1, 0.0],
+ [61250.0, 1, 0.0],
+ [61500.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [62000.0, 1, 0.0],
+ [62500.0, 3, 0.0],
+ [62750.0, 0, 0.0],
+ [63000.0, 2, 0.0],
+ [63500.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [64500.0039, 0, 0.0],
+ [64750.0039, 3, 0.0],
+ [65000.0039, 1, 0.0],
+ [65250.0039, 3, 0.0],
+ [65500.0039, 1, 0.0],
+ [65750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [66250.0, 0, 0.0],
+ [66500.0, 3, 0.0],
+ [66750.0, 0, 0.0],
+ [67000.0, 2, 250.0],
+ [67500.0, 1, 375.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [68500.0, 0, 0.0],
+ [68750.0, 3, 0.0],
+ [69000.0, 1, 0.0],
+ [69250.0, 3, 0.0],
+ [69500.0, 1, 0.0],
+ [69750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [70250.0, 0, 0.0],
+ [70500.0, 3, 0.0],
+ [70750.0, 0, 0.0],
+ [71000.0, 2, 250.0],
+ [71500.0, 1, 375.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [72000.0, 1, 0.0],
+ [72500.0, 3, 0.0],
+ [73250.0, 1, 0.0],
+ [73500.0, 2, 0.0],
+ [73750.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [74000.0, 1, 0.0],
+ [74500.0, 3, 0.0],
+ [75250.0, 1, 0.0],
+ [75500.0, 2, 0.0],
+ [75750.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [76000.0, 1, 0.0],
+ [76500.0, 3, 0.0],
+ [77125.0, 1, 0.0],
+ [77250.0, 0, 0.0],
+ [77500.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [78000.0, 1, 0.0],
+ [78500.0, 3, 0.0],
+ [79125.0, 1, 0.0],
+ [79250.0, 0, 0.0],
+ [79500.0, 0, 0.0]
+ ]
+ },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] }
+ ]
+ },
+ "generatedBy": "SNIFF ver.6"
+}
diff --git a/assets/preload/data/songs/fresh/fresh-hard.json b/assets/preload/data/songs/fresh/fresh-hard.json
new file mode 100644
index 0000000000..ff434cb5f3
--- /dev/null
+++ b/assets/preload/data/songs/fresh/fresh-hard.json
@@ -0,0 +1,519 @@
+{
+ "song": {
+ "song": "Fresh",
+ "bpm": 120.0,
+ "needsVoices": true,
+ "player1": "bf",
+ "player2": "dad",
+ "speed": 1.8,
+ "notes": [
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [0.0, 1, 0.0],
+ [250.0, 1, 0.0],
+ [500.0, 3, 0.0],
+ [875.0, 3, 0.0],
+ [1125.0, 1, 0.0],
+ [1250.0, 0, 0.0],
+ [1500.0, 3, 0.0],
+ [1500.0, 2, 0.0],
+ [1750.0, 1, 0.0],
+ [1875.0, 0, 125.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [2000.0, 1, 0.0],
+ [2250.0, 1, 0.0],
+ [2500.0, 3, 0.0],
+ [2875.0, 3, 0.0],
+ [3125.0, 1, 0.0],
+ [3250.0, 0, 0.0],
+ [3500.0, 2, 0.0],
+ [3500.0, 3, 0.0],
+ [3750.0, 1, 0.0],
+ [3875.0, 0, 125.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [4000.0, 1, 0.0],
+ [4250.0, 1, 0.0],
+ [4500.0, 3, 0.0],
+ [4875.0, 3, 0.0],
+ [5125.0, 1, 0.0],
+ [5250.0, 0, 0.0],
+ [5500.0, 3, 0.0],
+ [5500.0, 2, 0.0],
+ [5750.0, 3, 125.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [6000.0, 1, 0.0],
+ [6250.0, 1, 0.0],
+ [6500.0, 3, 0.0],
+ [6875.0, 3, 0.0],
+ [7125.0, 1, 0.0],
+ [7250.0, 0, 0.0],
+ [7500.0, 3, 0.0],
+ [7500.0, 2, 0.0],
+ [7750.0, 3, 125.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [8250.0, 0, 0.0],
+ [8500.0, 1, 0.0],
+ [9000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [10250.0, 0, 0.0],
+ [10500.0, 1, 0.0],
+ [11000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [12250.0, 0, 0.0],
+ [12500.0, 2, 0.0],
+ [12750.0, 3, 0.0],
+ [13000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [14250.0, 0, 0.0],
+ [14500.0, 2, 0.0],
+ [14750.0, 3, 0.0],
+ [15000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [16250.001, 0, 0.0],
+ [16500.0, 1, 0.0],
+ [16750.0, 3, 0.0],
+ [17000.0, 0, 0.0],
+ [17500.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [18250.0, 0, 0.0],
+ [18500.0, 1, 0.0],
+ [18750.0, 3, 0.0],
+ [19000.0, 0, 0.0],
+ [19500.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [20000.0, 3, 0.0],
+ [20250.0, 1, 0.0],
+ [20750.0, 2, 0.0],
+ [21000.0, 3, 0.0],
+ [21250.0, 1, 0.0],
+ [21750.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [22000.0, 3, 0.0],
+ [22250.0, 1, 0.0],
+ [22750.0, 2, 0.0],
+ [23000.0, 3, 0.0],
+ [23250.0, 1, 0.0],
+ [23750.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [24000.0, 3, 0.0],
+ [24500.0, 0, 0.0],
+ [25000.0, 1, 0.0],
+ [25250.0, 1, 0.0],
+ [25500.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [26000.0, 1, 0.0],
+ [26250.0, 2, 0.0],
+ [26500.0, 3, 0.0],
+ [26750.0, 0, 0.0],
+ [27000.0, 2, 0.0],
+ [27250.0, 3, 0.0],
+ [27500.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [28000.0, 3, 0.0],
+ [28500.0, 0, 0.0],
+ [29000.0, 1, 0.0],
+ [29250.0, 1, 0.0],
+ [29500.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [30000.0, 1, 0.0],
+ [30250.0, 2, 0.0],
+ [30500.0, 3, 0.0],
+ [30750.0, 0, 0.0],
+ [31000.0, 2, 0.0],
+ [31250.0, 3, 0.0],
+ [31500.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [32500.002, 0, 0.0],
+ [32750.002, 3, 0.0],
+ [33000.0, 1, 0.0],
+ [33250.0, 3, 0.0],
+ [33500.0, 1, 0.0],
+ [33750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [34250.0, 0, 0.0],
+ [34500.0, 3, 0.0],
+ [34750.0, 0, 0.0],
+ [35000.0, 2, 375.0],
+ [35500.0, 1, 375.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [36500.0, 0, 0.0],
+ [36750.0, 3, 0.0],
+ [37000.0, 1, 0.0],
+ [37250.0, 3, 0.0],
+ [37500.0, 1, 0.0],
+ [37750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [38250.0, 0, 0.0],
+ [38500.0, 3, 0.0],
+ [38750.0, 0, 0.0],
+ [39000.0, 2, 375.0],
+ [39500.0, 1, 375.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [40250.0, 0, 0.0],
+ [40500.0, 1, 0.0],
+ [41000.0, 2, 0.0],
+ [41500.0, 2, 0.0],
+ [41750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [42250.0, 0, 0.0],
+ [42500.0, 1, 0.0],
+ [43000.0, 2, 0.0],
+ [43500.0, 2, 0.0],
+ [43750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [44250.0, 0, 0.0],
+ [44500.0, 2, 0.0],
+ [44750.0, 3, 0.0],
+ [45000.0, 0, 0.0],
+ [45750.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [46250.0, 0, 0.0],
+ [46500.0, 2, 0.0],
+ [46750.0, 3, 0.0],
+ [47000.0, 0, 0.0],
+ [47750.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [48250.0, 0, 0.0],
+ [48500.0, 1, 0.0],
+ [48750.0, 3, 0.0],
+ [49000.0, 0, 0.0],
+ [49750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [50250.0, 0, 0.0],
+ [50500.0, 1, 0.0],
+ [50750.0, 3, 0.0],
+ [51000.0, 0, 0.0],
+ [51750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [52000.0, 3, 0.0],
+ [52250.0, 1, 0.0],
+ [52500.0, 1, 0.0],
+ [52750.0, 2, 0.0],
+ [53000.0, 3, 0.0],
+ [53250.0, 1, 0.0],
+ [53750.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [54000.0, 3, 0.0],
+ [54250.0, 1, 0.0],
+ [54500.0, 1, 0.0],
+ [54750.0, 2, 0.0],
+ [55000.0, 3, 0.0],
+ [55250.0, 1, 0.0],
+ [55750.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [56000.0, 3, 0.0],
+ [56500.0, 0, 0.0],
+ [57000.0, 1, 0.0],
+ [57250.0, 1, 0.0],
+ [57500.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [58000.0, 1, 0.0],
+ [58250.0, 2, 0.0],
+ [58500.0, 3, 0.0],
+ [58750.0, 0, 0.0],
+ [59000.0, 2, 0.0],
+ [59250.0, 3, 0.0],
+ [59500.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [60000.0, 3, 0.0],
+ [60500.0, 0, 0.0],
+ [61000.0, 1, 0.0],
+ [61250.0, 1, 0.0],
+ [61500.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [62000.0, 1, 0.0],
+ [62250.0, 2, 0.0],
+ [62500.0, 3, 0.0],
+ [62750.0, 0, 0.0],
+ [63000.0, 2, 0.0],
+ [63250.0, 3, 0.0],
+ [63500.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [64500.0039, 0, 0.0],
+ [64750.0039, 3, 0.0],
+ [65000.0039, 1, 0.0],
+ [65250.0039, 3, 0.0],
+ [65500.0039, 1, 0.0],
+ [65750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [66250.0, 0, 0.0],
+ [66500.0, 3, 0.0],
+ [66750.0, 0, 0.0],
+ [67000.0, 2, 375.0],
+ [67500.0, 1, 375.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [68500.0, 0, 0.0],
+ [68750.0, 3, 0.0],
+ [69000.0, 1, 0.0],
+ [69250.0, 3, 0.0],
+ [69500.0, 1, 0.0],
+ [69750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [70250.0, 0, 0.0],
+ [70500.0, 3, 0.0],
+ [70750.0, 0, 0.0],
+ [71000.0, 2, 375.0],
+ [71500.0, 1, 375.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [72000.0, 1, 0.0],
+ [72000.0, 5, 0.0],
+ [72250.0, 1, 0.0],
+ [72250.0, 5, 0.0],
+ [72500.0, 3, 0.0],
+ [72500.0, 7, 0.0],
+ [72875.0, 3, 0.0],
+ [72875.0, 7, 0.0],
+ [73125.0, 1, 0.0],
+ [73125.0, 5, 0.0],
+ [73250.0, 0, 0.0],
+ [73250.0, 4, 0.0],
+ [73500.0, 3, 0.0],
+ [73500.0, 2, 0.0],
+ [73500.0, 7, 0.0],
+ [73500.0, 6, 0.0],
+ [73750.0, 1, 0.0],
+ [73750.0, 5, 0.0],
+ [73875.0, 0, 125.0],
+ [73875.0, 4, 125.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [74000.0, 1, 0.0],
+ [74250.0, 1, 0.0],
+ [74500.0, 3, 0.0],
+ [74875.0, 3, 0.0],
+ [75125.0, 1, 0.0],
+ [75250.0, 0, 0.0],
+ [75500.0, 3, 0.0],
+ [75500.0, 2, 0.0],
+ [75750.0, 1, 0.0],
+ [75875.0, 0, 125.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [76000.0, 1, 0.0],
+ [76000.0, 5, 0.0],
+ [76250.0, 1, 0.0],
+ [76250.0, 5, 0.0],
+ [76500.0, 3, 0.0],
+ [76500.0, 7, 0.0],
+ [76875.0, 3, 0.0],
+ [76875.0, 7, 0.0],
+ [77125.0, 1, 0.0],
+ [77125.0, 5, 0.0],
+ [77250.0, 0, 0.0],
+ [77250.0, 4, 0.0],
+ [77500.0, 3, 0.0],
+ [77500.0, 2, 0.0],
+ [77500.0, 7, 0.0],
+ [77500.0, 6, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [78000.0, 1, 0.0],
+ [78250.0, 1, 0.0],
+ [78500.0, 3, 0.0],
+ [78875.0, 3, 0.0],
+ [79125.0, 1, 0.0],
+ [79250.0, 0, 0.0],
+ [79500.0, 3, 0.0],
+ [79500.0, 2, 0.0]
+ ]
+ },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] }
+ ]
+ },
+ "generatedBy": "SNIFF ver.6"
+}
diff --git a/assets/preload/data/songs/fresh/fresh.json b/assets/preload/data/songs/fresh/fresh.json
new file mode 100644
index 0000000000..58a263ad1d
--- /dev/null
+++ b/assets/preload/data/songs/fresh/fresh.json
@@ -0,0 +1,493 @@
+{
+ "song": {
+ "song": "Fresh",
+ "bpm": 120.0,
+ "needsVoices": true,
+ "player1": "bf",
+ "player2": "dad",
+ "speed": 1.3,
+ "notes": [
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [0.0, 1, 0.0],
+ [250.0, 1, 0.0],
+ [500.0, 3, 0.0],
+ [875.0, 3, 0.0],
+ [1125.0, 1, 0.0],
+ [1250.0, 0, 0.0],
+ [1500.0, 2, 0.0],
+ [1750.0, 1, 0.0],
+ [1875.0, 0, 125.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [2000.0, 1, 0.0],
+ [2250.0, 1, 0.0],
+ [2500.0, 3, 0.0],
+ [2875.0, 3, 0.0],
+ [3125.0, 1, 0.0],
+ [3250.0, 0, 0.0],
+ [3500.0, 2, 0.0],
+ [3750.0, 1, 0.0],
+ [3875.0, 0, 125.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [4000.0, 1, 0.0],
+ [4250.0, 1, 0.0],
+ [4500.0, 3, 0.0],
+ [4875.0, 3, 0.0],
+ [5125.0, 1, 0.0],
+ [5250.0, 0, 0.0],
+ [5500.0, 2, 0.0],
+ [5750.0, 3, 125.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [6000.0, 1, 0.0],
+ [6250.0, 1, 0.0],
+ [6500.0, 3, 0.0],
+ [6875.0, 3, 0.0],
+ [7125.0, 1, 0.0],
+ [7250.0, 0, 0.0],
+ [7500.0, 2, 0.0],
+ [7750.0, 3, 125.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [8250.0, 0, 0.0],
+ [8500.0, 1, 0.0],
+ [9000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [10250.0, 0, 0.0],
+ [10500.0, 1, 0.0],
+ [11000.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [12250.0, 0, 0.0],
+ [12500.0, 2, 0.0],
+ [12750.0, 3, 0.0],
+ [13000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [14250.0, 0, 0.0],
+ [14500.0, 2, 0.0],
+ [14750.0, 3, 0.0],
+ [15000.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [16250.001, 0, 0.0],
+ [16500.0, 1, 0.0],
+ [16750.0, 3, 0.0],
+ [17000.0, 0, 0.0],
+ [17500.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [18250.0, 0, 0.0],
+ [18500.0, 1, 0.0],
+ [18750.0, 3, 0.0],
+ [19000.0, 0, 0.0],
+ [19500.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [20000.0, 3, 0.0],
+ [20250.0, 1, 0.0],
+ [20750.0, 2, 0.0],
+ [21000.0, 3, 0.0],
+ [21250.0, 1, 0.0],
+ [21750.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [22000.0, 3, 0.0],
+ [22250.0, 1, 0.0],
+ [22750.0, 2, 0.0],
+ [23000.0, 3, 0.0],
+ [23250.0, 1, 0.0],
+ [23750.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [24000.0, 3, 0.0],
+ [24500.0, 0, 0.0],
+ [25000.0, 1, 0.0],
+ [25250.0, 1, 0.0],
+ [25500.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [26000.0, 1, 0.0],
+ [26250.0, 2, 0.0],
+ [26500.0, 3, 0.0],
+ [26750.0, 0, 0.0],
+ [27000.0, 2, 0.0],
+ [27250.0, 3, 0.0],
+ [27500.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [28000.0, 3, 0.0],
+ [28500.0, 0, 0.0],
+ [29000.0, 1, 0.0],
+ [29250.0, 1, 0.0],
+ [29500.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [30000.0, 1, 0.0],
+ [30250.0, 2, 0.0],
+ [30500.0, 3, 0.0],
+ [30750.0, 0, 0.0],
+ [31000.0, 2, 0.0],
+ [31250.0, 3, 0.0],
+ [31500.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [32500.002, 0, 0.0],
+ [32750.002, 3, 0.0],
+ [33000.0, 1, 0.0],
+ [33250.0, 3, 0.0],
+ [33500.0, 1, 0.0],
+ [33750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [34250.0, 0, 0.0],
+ [34500.0, 3, 0.0],
+ [34750.0, 0, 0.0],
+ [35000.0, 2, 375.0],
+ [35500.0, 1, 375.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [36500.0, 0, 0.0],
+ [36750.0, 3, 0.0],
+ [37000.0, 1, 0.0],
+ [37250.0, 3, 0.0],
+ [37500.0, 1, 0.0],
+ [37750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [38250.0, 0, 0.0],
+ [38500.0, 3, 0.0],
+ [38750.0, 0, 0.0],
+ [39000.0, 2, 375.0],
+ [39500.0, 1, 375.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [40250.0, 0, 0.0],
+ [40500.0, 1, 0.0],
+ [41000.0, 2, 0.0],
+ [41500.0, 2, 0.0],
+ [41750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [42250.0, 0, 0.0],
+ [42500.0, 1, 0.0],
+ [43000.0, 2, 0.0],
+ [43500.0, 2, 0.0],
+ [43750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [44250.0, 0, 0.0],
+ [44500.0, 2, 0.0],
+ [44750.0, 3, 0.0],
+ [45000.0, 0, 0.0],
+ [45750.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [46250.0, 0, 0.0],
+ [46500.0, 2, 0.0],
+ [46750.0, 3, 0.0],
+ [47000.0, 0, 0.0],
+ [47750.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [48250.0, 0, 0.0],
+ [48500.0, 1, 0.0],
+ [48750.0, 3, 0.0],
+ [49000.0, 0, 0.0],
+ [49750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [50250.0, 0, 0.0],
+ [50500.0, 1, 0.0],
+ [50750.0, 3, 0.0],
+ [51000.0, 0, 0.0],
+ [51750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [52000.0, 3, 0.0],
+ [52250.0, 1, 0.0],
+ [52500.0, 1, 0.0],
+ [52750.0, 2, 0.0],
+ [53000.0, 3, 0.0],
+ [53250.0, 1, 0.0],
+ [53750.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [54000.0, 3, 0.0],
+ [54250.0, 1, 0.0],
+ [54500.0, 1, 0.0],
+ [54750.0, 2, 0.0],
+ [55000.0, 3, 0.0],
+ [55250.0, 1, 0.0],
+ [55750.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [56000.0, 3, 0.0],
+ [56500.0, 0, 0.0],
+ [57000.0, 1, 0.0],
+ [57250.0, 1, 0.0],
+ [57500.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [58000.0, 1, 0.0],
+ [58250.0, 2, 0.0],
+ [58500.0, 3, 0.0],
+ [58750.0, 0, 0.0],
+ [59000.0, 2, 0.0],
+ [59250.0, 3, 0.0],
+ [59500.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [60000.0, 3, 0.0],
+ [60500.0, 0, 0.0],
+ [61000.0, 1, 0.0],
+ [61250.0, 1, 0.0],
+ [61500.0, 0, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [62000.0, 1, 0.0],
+ [62250.0, 2, 0.0],
+ [62500.0, 3, 0.0],
+ [62750.0, 0, 0.0],
+ [63000.0, 2, 0.0],
+ [63250.0, 3, 0.0],
+ [63500.0, 1, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [64500.0039, 0, 0.0],
+ [64750.0039, 3, 0.0],
+ [65000.0039, 1, 0.0],
+ [65250.0039, 3, 0.0],
+ [65500.0039, 1, 0.0],
+ [65750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [66250.0, 0, 0.0],
+ [66500.0, 3, 0.0],
+ [66750.0, 0, 0.0],
+ [67000.0, 2, 375.0],
+ [67500.0, 1, 375.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [68500.0, 0, 0.0],
+ [68750.0, 3, 0.0],
+ [69000.0, 1, 0.0],
+ [69250.0, 3, 0.0],
+ [69500.0, 1, 0.0],
+ [69750.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [70250.0, 0, 0.0],
+ [70500.0, 3, 0.0],
+ [70750.0, 0, 0.0],
+ [71000.0, 2, 375.0],
+ [71500.0, 1, 375.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [72000.0, 1, 0.0],
+ [72250.0, 1, 0.0],
+ [72500.0, 3, 0.0],
+ [72875.0, 3, 0.0],
+ [73125.0, 1, 0.0],
+ [73250.0, 0, 0.0],
+ [73500.0, 2, 0.0],
+ [73750.0, 1, 0.0],
+ [73875.0, 0, 125.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [74000.0, 1, 0.0],
+ [74250.0, 1, 0.0],
+ [74500.0, 3, 0.0],
+ [74875.0, 3, 0.0],
+ [75125.0, 1, 0.0],
+ [75250.0, 0, 0.0],
+ [75500.0, 2, 0.0],
+ [75750.0, 1, 0.0],
+ [75875.0, 0, 125.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": false,
+ "sectionNotes": [
+ [76000.0, 1, 0.0],
+ [76250.0, 1, 0.0],
+ [76500.0, 3, 0.0],
+ [76875.0, 3, 0.0],
+ [77125.0, 1, 0.0],
+ [77250.0, 0, 0.0],
+ [77500.0, 2, 0.0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "mustHitSection": true,
+ "sectionNotes": [
+ [78000.0, 1, 0.0],
+ [78250.0, 1, 0.0],
+ [78500.0, 3, 0.0],
+ [78875.0, 3, 0.0],
+ [79125.0, 1, 0.0],
+ [79250.0, 0, 0.0],
+ [79500.0, 2, 0.0]
+ ]
+ },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] },
+ { "lengthInSteps": 16, "mustHitSection": true, "sectionNotes": [] }
+ ]
+ },
+ "generatedBy": "SNIFF ver.6"
+}
diff --git a/assets/preload/data/songs/high/_meta.json b/assets/preload/data/songs/high/_meta.json
new file mode 100644
index 0000000000..4c2eee6beb
--- /dev/null
+++ b/assets/preload/data/songs/high/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/songs/high/high-easy.json b/assets/preload/data/songs/high/high-easy.json
new file mode 100644
index 0000000000..af8fed81fc
--- /dev/null
+++ b/assets/preload/data/songs/high/high-easy.json
@@ -0,0 +1,628 @@
+{
+ "song": {
+ "player1": "bf-car",
+ "gfVersion": "gf-car",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [3840, 0, 0],
+ [4320, 0, 0],
+ [4560, 3, 0],
+ [4800, 0, 0],
+ [5160, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [5760, 0, 0],
+ [6240, 0, 0],
+ [6480, 3, 0],
+ [6720, 0, 0],
+ [7080, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [7680, 0, 0],
+ [8160, 0, 0],
+ [8400, 3, 0],
+ [8640, 3, 0],
+ [9000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [9600, 2, 0],
+ [10080, 0, 0],
+ [10560, 3, 0],
+ [10800, 2, 0],
+ [11280, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [11520, 0, 0],
+ [12000, 0, 0],
+ [12240, 3, 0],
+ [12480, 0, 0],
+ [12840, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [13440, 0, 0],
+ [13920, 0, 0],
+ [14160, 3, 0],
+ [14400, 0, 0],
+ [14760, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [15360, 0, 0],
+ [15840, 0, 0],
+ [16080, 3, 0],
+ [16320, 3, 0],
+ [16680, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [17280, 2, 0],
+ [17280, 6, 360],
+ [17760, 0, 0],
+ [17760, 7, 360],
+ [18240, 4, 360],
+ [18240, 3, 0],
+ [18480, 2, 0],
+ [18720, 5, 360],
+ [18960, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [19200, 2, 0],
+ [19680, 3, 0],
+ [20160, 3, 0],
+ [20520, 3, 0],
+ [20880, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [21360, 1, 0],
+ [21600, 3, 0],
+ [22080, 0, 0],
+ [22440, 3, 0],
+ [22800, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [23280, 0, 0],
+ [23520, 3, 0],
+ [24000, 2, 0],
+ [24360, 2, 0],
+ [24720, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [24960, 6, 360],
+ [24960, 2, 0],
+ [25440, 7, 360],
+ [25440, 2, 0],
+ [25680, 0, 0],
+ [25920, 4, 360],
+ [25920, 2, 0],
+ [26160, 0, 0],
+ [26400, 5, 360],
+ [26400, 3, 0],
+ [26640, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26880, 2, 0],
+ [27360, 3, 0],
+ [27840, 3, 0],
+ [28200, 3, 0],
+ [28560, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [29040, 1, 0],
+ [29280, 3, 0],
+ [29760, 0, 0],
+ [30120, 3, 0],
+ [30480, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30960, 0, 0],
+ [31200, 3, 0],
+ [31680, 2, 0],
+ [32040, 2, 0],
+ [32400, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32640, 2, 0],
+ [33120, 2, 0],
+ [33360, 0, 0],
+ [33600, 2, 0],
+ [33840, 0, 0],
+ [34080, 3, 0],
+ [34320, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [34560, 0, 0],
+ [35040, 1, 360],
+ [35520, 0, 360],
+ [36000, 3, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [36480, 3, 0],
+ [36960, 3, 0],
+ [37200, 0, 0],
+ [37440, 3, 240],
+ [37920, 0, 240],
+ [38280, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [38400, 2, 360],
+ [38880, 3, 360],
+ [39360, 0, 360],
+ [39840, 2, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [40320, 3, 0],
+ [40560, 2, 0],
+ [40800, 0, 0],
+ [41040, 2, 0],
+ [41280, 0, 240],
+ [41760, 1, 240]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [42240, 0, 0],
+ [42240, 7, 420],
+ [42720, 1, 360],
+ [42720, 5, 360],
+ [43200, 7, 360],
+ [43200, 0, 360],
+ [43680, 4, 360],
+ [43680, 3, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [44160, 6, 360],
+ [44160, 3, 0],
+ [44640, 3, 0],
+ [44880, 0, 0],
+ [45120, 4, 240],
+ [45120, 3, 240],
+ [45600, 7, 240],
+ [45600, 0, 240],
+ [45960, 5, 0],
+ [45960, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [46080, 2, 360],
+ [46080, 6, 360],
+ [46560, 3, 360],
+ [46560, 7, 1440],
+ [47040, 0, 360],
+ [47520, 2, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [48000, 3, 0],
+ [48240, 2, 0],
+ [48480, 0, 0],
+ [48720, 2, 0],
+ [48960, 0, 240],
+ [49440, 1, 240]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [49920, 1, 600],
+ [49920, 5, 720],
+ [50640, 3, 0],
+ [50880, 3, 0],
+ [51360, 0, 240]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [51840, 2, 360],
+ [52320, 1, 0],
+ [52560, 3, 0],
+ [52800, 3, 0],
+ [53280, 0, 240]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [53760, 1, 360],
+ [54240, 0, 0],
+ [54480, 3, 0],
+ [54720, 3, 0],
+ [55200, 0, 240]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [55680, 0, 0],
+ [56160, 3, 0],
+ [56400, 3, 0],
+ [56640, 0, 0],
+ [56880, 0, 0],
+ [57120, 1, 0],
+ [57360, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [57600, 1, 600],
+ [57600, 5, 480],
+ [58320, 3, 0],
+ [58560, 3, 0],
+ [59040, 0, 240]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [59520, 2, 360],
+ [60000, 1, 0],
+ [60240, 3, 0],
+ [60480, 3, 0],
+ [60960, 0, 240]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [61440, 1, 360],
+ [61920, 0, 0],
+ [62160, 3, 0],
+ [62400, 3, 0],
+ [62880, 0, 240]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [63360, 0, 0],
+ [63840, 3, 0],
+ [64080, 3, 0],
+ [64320, 0, 0],
+ [64560, 0, 0],
+ [64800, 1, 0],
+ [65040, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65280, 0, 0],
+ [65280, 5, 480],
+ [65760, 1, 360],
+ [66240, 0, 360],
+ [66720, 3, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [67200, 3, 0],
+ [67680, 3, 0],
+ [67920, 0, 0],
+ [68160, 3, 240],
+ [68640, 0, 240],
+ [69000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [69120, 2, 360],
+ [69600, 3, 360],
+ [70080, 0, 360],
+ [70560, 2, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [71040, 3, 0],
+ [71280, 2, 0],
+ [71520, 0, 0],
+ [71760, 2, 0],
+ [72000, 0, 240],
+ [72480, 1, 240]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72960, 0, 0],
+ [72960, 7, 420],
+ [73440, 1, 360],
+ [73440, 5, 360],
+ [73920, 7, 360],
+ [73920, 0, 360],
+ [74400, 4, 360],
+ [74400, 3, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [74880, 6, 360],
+ [74880, 3, 0],
+ [75360, 3, 0],
+ [75600, 0, 0],
+ [75840, 4, 240],
+ [75840, 3, 240],
+ [76320, 7, 240],
+ [76320, 0, 240],
+ [76680, 5, 0],
+ [76680, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [76800, 2, 360],
+ [76800, 6, 360],
+ [77280, 3, 360],
+ [77280, 7, 1440],
+ [77760, 0, 360],
+ [78240, 2, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78720, 3, 0],
+ [78960, 2, 0],
+ [79200, 0, 0],
+ [79440, 2, 0],
+ [79680, 0, 240],
+ [80160, 1, 240]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80640, 3, 960],
+ [80640, 7, 960],
+ [82080, 2, 360],
+ [82080, 6, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [82560, 1, 600],
+ [82560, 5, 600],
+ [83280, 6, 600],
+ [83280, 2, 600],
+ [84000, 7, 360],
+ [84000, 3, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [84480, 6, 0],
+ [84480, 2, 360],
+ [84720, 7, 0],
+ [84960, 4, 0],
+ [84960, 1, 360],
+ [85440, 5, 0],
+ [85440, 3, 360],
+ [85920, 4, 0],
+ [85920, 0, 360],
+ [86160, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [86400, 6, 0],
+ [86400, 2, 360],
+ [86640, 7, 0],
+ [86880, 4, 0],
+ [86880, 1, 360],
+ [87360, 7, 0],
+ [87360, 3, 360],
+ [87840, 7, 0],
+ [87840, 0, 0],
+ [88080, 6, 0],
+ [88080, 3, 0],
+ [88200, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [88320, 3, 960],
+ [88320, 7, 960],
+ [89760, 2, 360],
+ [89760, 6, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [90240, 1, 600],
+ [90240, 5, 600],
+ [90960, 6, 600],
+ [90960, 2, 600],
+ [91680, 7, 360],
+ [91680, 3, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [92160, 2, 0],
+ [92160, 6, 360],
+ [92400, 3, 0],
+ [92640, 0, 0],
+ [92640, 5, 360],
+ [93120, 1, 0],
+ [93120, 7, 360],
+ [93600, 0, 0],
+ [93600, 4, 360],
+ [93840, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [94080, 2, 0],
+ [94080, 6, 360],
+ [94320, 3, 0],
+ [94560, 0, 0],
+ [94560, 5, 360],
+ [95040, 3, 0],
+ [95040, 7, 360],
+ [95520, 3, 0],
+ [95520, 4, 0],
+ [95640, 6, 0],
+ [95760, 7, 0],
+ [95760, 2, 0],
+ [95880, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [96000, 6, 960],
+ [96000, 2, 960]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 125,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "mom-car",
+ "song": "High",
+ "stage": "limo",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 125,
+ "speed": 1.3
+ }
+}
diff --git a/assets/preload/data/songs/high/high-hard.json b/assets/preload/data/songs/high/high-hard.json
new file mode 100644
index 0000000000..31b98441ce
--- /dev/null
+++ b/assets/preload/data/songs/high/high-hard.json
@@ -0,0 +1,824 @@
+{
+ "song": {
+ "player1": "bf-car",
+ "gfVersion": "gf-car",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [3840, 0, 0],
+ [4320, 0, 0],
+ [4560, 3, 0],
+ [4800, 2, 0],
+ [4920, 0, 0],
+ [5160, 3, 0],
+ [5520, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [5760, 0, 0],
+ [6240, 0, 0],
+ [6480, 3, 0],
+ [6720, 2, 0],
+ [6840, 0, 0],
+ [7080, 3, 0],
+ [7440, 0, 0],
+ [7560, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [7680, 0, 0],
+ [8160, 0, 0],
+ [8400, 3, 0],
+ [8640, 2, 0],
+ [8760, 3, 0],
+ [9000, 0, 0],
+ [9360, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [9600, 2, 0],
+ [9720, 3, 0],
+ [9840, 2, 0],
+ [9960, 3, 0],
+ [10080, 0, 0],
+ [10320, 0, 0],
+ [10440, 1, 0],
+ [10560, 3, 0],
+ [10800, 2, 0],
+ [11040, 2, 0],
+ [11160, 3, 0],
+ [11280, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [11520, 0, 0],
+ [12000, 0, 0],
+ [12240, 3, 0],
+ [12480, 2, 0],
+ [12600, 0, 0],
+ [12840, 3, 0],
+ [13200, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [13440, 0, 0],
+ [13920, 0, 0],
+ [14160, 3, 0],
+ [14400, 2, 0],
+ [14520, 0, 0],
+ [14760, 3, 0],
+ [15120, 0, 0],
+ [15240, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [15360, 0, 0],
+ [15840, 0, 0],
+ [16080, 3, 0],
+ [16320, 2, 0],
+ [16440, 3, 0],
+ [16680, 0, 0],
+ [17040, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [17280, 6, 360],
+ [17280, 2, 0],
+ [17400, 3, 0],
+ [17520, 2, 0],
+ [17640, 3, 0],
+ [17760, 7, 360],
+ [17760, 0, 0],
+ [18000, 0, 0],
+ [18120, 1, 0],
+ [18240, 4, 360],
+ [18240, 3, 0],
+ [18480, 2, 0],
+ [18720, 5, 360],
+ [18720, 2, 0],
+ [18840, 3, 0],
+ [18960, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [19200, 2, 0],
+ [19440, 1, 0],
+ [19560, 0, 0],
+ [19680, 3, 0],
+ [20040, 1, 0],
+ [20160, 3, 0],
+ [20520, 3, 0],
+ [20880, 3, 0],
+ [21000, 2, 240]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [21360, 1, 0],
+ [21480, 0, 0],
+ [21600, 3, 0],
+ [21960, 1, 0],
+ [22080, 0, 0],
+ [22200, 1, 0],
+ [22440, 3, 0],
+ [22800, 2, 0],
+ [22920, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [23280, 0, 0],
+ [23400, 2, 0],
+ [23520, 3, 0],
+ [23880, 3, 0],
+ [24000, 2, 0],
+ [24360, 2, 0],
+ [24720, 2, 0],
+ [24840, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [24960, 6, 360],
+ [24960, 2, 0],
+ [25080, 3, 0],
+ [25200, 0, 0],
+ [25440, 7, 360],
+ [25440, 2, 0],
+ [25680, 0, 0],
+ [25920, 4, 360],
+ [25920, 2, 0],
+ [26040, 3, 0],
+ [26160, 0, 0],
+ [26280, 1, 0],
+ [26400, 5, 360],
+ [26400, 3, 0],
+ [26520, 0, 0],
+ [26640, 1, 0],
+ [26760, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26880, 2, 0],
+ [27120, 1, 0],
+ [27240, 0, 0],
+ [27360, 3, 0],
+ [27720, 1, 0],
+ [27840, 3, 0],
+ [28200, 3, 0],
+ [28560, 3, 0],
+ [28680, 2, 240]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [29040, 1, 0],
+ [29160, 0, 0],
+ [29280, 3, 0],
+ [29640, 1, 0],
+ [29760, 0, 0],
+ [29880, 1, 0],
+ [30120, 3, 0],
+ [30480, 2, 0],
+ [30600, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30960, 0, 0],
+ [31080, 2, 0],
+ [31200, 3, 0],
+ [31560, 3, 0],
+ [31680, 2, 0],
+ [32040, 2, 0],
+ [32400, 2, 0],
+ [32520, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32640, 2, 0],
+ [32760, 3, 0],
+ [32880, 0, 0],
+ [33120, 2, 0],
+ [33360, 0, 0],
+ [33600, 2, 0],
+ [33720, 3, 0],
+ [33840, 0, 0],
+ [33960, 1, 0],
+ [34080, 3, 0],
+ [34200, 0, 0],
+ [34320, 1, 0],
+ [34440, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [34560, 0, 0],
+ [34680, 3, 0],
+ [34800, 2, 0],
+ [34920, 3, 0],
+ [35040, 1, 360],
+ [35520, 0, 360],
+ [36000, 3, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [36480, 3, 0],
+ [36840, 1, 0],
+ [36960, 3, 0],
+ [37080, 2, 0],
+ [37200, 0, 0],
+ [37320, 1, 0],
+ [37440, 3, 240],
+ [37800, 1, 0],
+ [37920, 0, 240],
+ [38280, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [38400, 2, 360],
+ [38880, 3, 360],
+ [39360, 0, 360],
+ [39840, 2, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [40320, 3, 0],
+ [40440, 0, 0],
+ [40560, 2, 0],
+ [40680, 3, 0],
+ [40800, 0, 0],
+ [40920, 2, 0],
+ [41040, 3, 0],
+ [41160, 0, 0],
+ [41280, 2, 240],
+ [41640, 3, 0],
+ [41760, 0, 240],
+ [42120, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [42240, 7, 360],
+ [42240, 0, 0],
+ [42360, 3, 0],
+ [42480, 2, 0],
+ [42600, 3, 0],
+ [42720, 5, 360],
+ [42720, 1, 360],
+ [43200, 7, 360],
+ [43200, 0, 360],
+ [43680, 4, 360],
+ [43680, 3, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [44160, 6, 360],
+ [44160, 3, 0],
+ [44520, 1, 0],
+ [44640, 3, 0],
+ [44760, 2, 0],
+ [44880, 0, 0],
+ [45000, 1, 0],
+ [45120, 4, 240],
+ [45120, 3, 240],
+ [45480, 5, 0],
+ [45480, 1, 0],
+ [45600, 7, 240],
+ [45600, 0, 240],
+ [45960, 5, 0],
+ [45960, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [46080, 6, 360],
+ [46080, 2, 360],
+ [46560, 7, 1440],
+ [46560, 3, 360],
+ [47040, 0, 360],
+ [47520, 2, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [48000, 3, 0],
+ [48120, 0, 0],
+ [48240, 2, 0],
+ [48360, 3, 0],
+ [48480, 0, 0],
+ [48600, 2, 0],
+ [48720, 3, 0],
+ [48840, 0, 0],
+ [48960, 2, 240],
+ [49320, 3, 0],
+ [49440, 0, 240],
+ [49800, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [49920, 5, 720],
+ [49920, 1, 600],
+ [50640, 3, 0],
+ [50880, 2, 0],
+ [51000, 3, 0],
+ [51240, 2, 0],
+ [51360, 0, 240],
+ [51720, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [51840, 2, 360],
+ [52320, 1, 0],
+ [52560, 3, 0],
+ [52800, 2, 0],
+ [52920, 3, 0],
+ [53160, 2, 0],
+ [53280, 0, 240],
+ [53640, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [53760, 1, 360],
+ [54240, 0, 0],
+ [54480, 3, 0],
+ [54720, 2, 0],
+ [54840, 3, 0],
+ [55080, 2, 0],
+ [55200, 0, 240],
+ [55560, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [55680, 0, 0],
+ [55920, 0, 0],
+ [56040, 3, 0],
+ [56160, 0, 0],
+ [56280, 3, 0],
+ [56400, 2, 0],
+ [56520, 0, 0],
+ [56640, 3, 0],
+ [56760, 1, 0],
+ [56880, 0, 120],
+ [57120, 1, 0],
+ [57360, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [57600, 5, 480],
+ [57600, 1, 600],
+ [58320, 3, 0],
+ [58560, 2, 0],
+ [58680, 3, 0],
+ [58920, 2, 0],
+ [59040, 0, 240],
+ [59400, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [59520, 2, 360],
+ [60000, 1, 0],
+ [60240, 3, 0],
+ [60480, 2, 0],
+ [60600, 3, 0],
+ [60840, 2, 0],
+ [60960, 0, 240],
+ [61320, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [61440, 1, 360],
+ [61920, 0, 0],
+ [62160, 3, 0],
+ [62400, 2, 0],
+ [62520, 3, 0],
+ [62760, 2, 0],
+ [62880, 0, 240],
+ [63240, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [63360, 0, 0],
+ [63600, 0, 0],
+ [63720, 3, 0],
+ [63840, 0, 0],
+ [63960, 3, 0],
+ [64080, 2, 0],
+ [64200, 0, 0],
+ [64320, 3, 0],
+ [64440, 1, 0],
+ [64560, 0, 120],
+ [64800, 1, 0],
+ [65040, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65280, 0, 0],
+ [65280, 5, 480],
+ [65400, 3, 0],
+ [65520, 2, 0],
+ [65640, 3, 0],
+ [65760, 1, 360],
+ [66240, 0, 360],
+ [66720, 3, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [67200, 3, 0],
+ [67560, 1, 0],
+ [67680, 3, 0],
+ [67800, 2, 0],
+ [67920, 0, 0],
+ [68040, 1, 0],
+ [68160, 3, 240],
+ [68520, 1, 0],
+ [68640, 0, 240],
+ [69000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [69120, 2, 360],
+ [69600, 3, 360],
+ [70080, 0, 360],
+ [70560, 2, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [71040, 3, 0],
+ [71160, 0, 0],
+ [71280, 2, 0],
+ [71400, 3, 0],
+ [71520, 0, 0],
+ [71640, 2, 0],
+ [71760, 3, 0],
+ [71880, 0, 0],
+ [72000, 2, 240],
+ [72360, 3, 0],
+ [72480, 0, 240],
+ [72840, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72960, 7, 360],
+ [72960, 0, 0],
+ [73080, 3, 0],
+ [73200, 2, 0],
+ [73320, 3, 0],
+ [73440, 5, 360],
+ [73440, 1, 360],
+ [73920, 7, 360],
+ [73920, 0, 360],
+ [74400, 4, 360],
+ [74400, 3, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [74880, 6, 360],
+ [74880, 3, 0],
+ [75240, 1, 0],
+ [75360, 3, 0],
+ [75480, 2, 0],
+ [75600, 0, 0],
+ [75720, 1, 0],
+ [75840, 4, 240],
+ [75840, 3, 240],
+ [76200, 5, 0],
+ [76200, 1, 0],
+ [76320, 7, 240],
+ [76320, 0, 240],
+ [76680, 5, 0],
+ [76680, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [76800, 6, 360],
+ [76800, 2, 360],
+ [77280, 7, 1440],
+ [77280, 3, 360],
+ [77760, 0, 360],
+ [78240, 2, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78720, 3, 0],
+ [78840, 0, 0],
+ [78960, 2, 0],
+ [79080, 3, 0],
+ [79200, 0, 0],
+ [79320, 2, 0],
+ [79440, 3, 0],
+ [79560, 0, 0],
+ [79680, 2, 240],
+ [80040, 3, 0],
+ [80160, 0, 240],
+ [80520, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80640, 3, 960],
+ [80640, 7, 960],
+ [82080, 2, 360],
+ [82080, 6, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [82560, 1, 360],
+ [82560, 5, 600],
+ [83040, 1, 0],
+ [83280, 2, 360],
+ [83280, 6, 600],
+ [83760, 2, 0],
+ [84000, 3, 360],
+ [84000, 7, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [84480, 6, 0],
+ [84480, 2, 360],
+ [84720, 7, 0],
+ [84840, 4, 0],
+ [84960, 7, 0],
+ [84960, 1, 360],
+ [85080, 5, 0],
+ [85200, 7, 0],
+ [85320, 4, 0],
+ [85440, 6, 0],
+ [85440, 3, 360],
+ [85560, 4, 0],
+ [85680, 7, 0],
+ [85800, 4, 0],
+ [85920, 7, 0],
+ [85920, 0, 360],
+ [86040, 5, 0],
+ [86160, 7, 0],
+ [86280, 4, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [86400, 6, 0],
+ [86400, 2, 360],
+ [86640, 7, 0],
+ [86760, 4, 0],
+ [86880, 7, 0],
+ [86880, 1, 360],
+ [87000, 5, 0],
+ [87120, 7, 0],
+ [87240, 4, 0],
+ [87360, 6, 0],
+ [87360, 3, 360],
+ [87480, 4, 0],
+ [87600, 7, 0],
+ [87720, 4, 0],
+ [87840, 0, 0],
+ [87840, 7, 0],
+ [87960, 2, 0],
+ [87960, 5, 0],
+ [88080, 3, 0],
+ [88080, 7, 0],
+ [88200, 2, 0],
+ [88200, 4, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [88320, 7, 960],
+ [88320, 3, 960],
+ [89760, 2, 360],
+ [89760, 6, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [90240, 5, 600],
+ [90240, 1, 360],
+ [90720, 1, 0],
+ [90960, 6, 600],
+ [90960, 2, 360],
+ [91440, 2, 0],
+ [91680, 7, 0],
+ [91680, 3, 360],
+ [91800, 5, 0],
+ [91920, 4, 120]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [92160, 6, 360],
+ [92160, 2, 0],
+ [92400, 3, 0],
+ [92520, 0, 0],
+ [92640, 5, 360],
+ [92640, 3, 0],
+ [92760, 1, 0],
+ [92880, 3, 0],
+ [93000, 0, 0],
+ [93120, 7, 360],
+ [93120, 2, 0],
+ [93240, 0, 0],
+ [93360, 3, 0],
+ [93480, 0, 0],
+ [93600, 4, 360],
+ [93600, 3, 0],
+ [93720, 1, 0],
+ [93840, 3, 0],
+ [93960, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [94080, 6, 360],
+ [94080, 2, 0],
+ [94320, 3, 0],
+ [94440, 0, 0],
+ [94560, 5, 360],
+ [94560, 3, 0],
+ [94680, 1, 0],
+ [94800, 3, 0],
+ [94920, 0, 0],
+ [95040, 7, 360],
+ [95040, 2, 0],
+ [95160, 0, 0],
+ [95280, 3, 0],
+ [95400, 0, 0],
+ [95520, 4, 0],
+ [95520, 3, 0],
+ [95640, 6, 0],
+ [95640, 1, 0],
+ [95760, 7, 0],
+ [95760, 3, 0],
+ [95880, 6, 0],
+ [95880, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [96000, 6, 960],
+ [96000, 2, 960]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 125,
+ "changeBPM": false,
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 125,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "mom-car",
+ "song": "High",
+ "stage": "limo",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 125,
+ "speed": 2
+ }
+}
diff --git a/assets/preload/data/songs/high/high.json b/assets/preload/data/songs/high/high.json
new file mode 100644
index 0000000000..33bb3142de
--- /dev/null
+++ b/assets/preload/data/songs/high/high.json
@@ -0,0 +1,712 @@
+{
+ "song": {
+ "player1": "bf-car",
+ "gfVersion": "gf-car",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [3840, 0, 0],
+ [4320, 0, 0],
+ [4560, 3, 0],
+ [4800, 0, 0],
+ [5160, 3, 0],
+ [5520, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [5760, 0, 0],
+ [6240, 0, 0],
+ [6480, 3, 0],
+ [6720, 0, 0],
+ [7080, 3, 0],
+ [7440, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [7680, 0, 0],
+ [8160, 0, 0],
+ [8400, 3, 0],
+ [8640, 3, 0],
+ [9000, 0, 0],
+ [9360, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [9600, 2, 0],
+ [9840, 2, 0],
+ [10080, 0, 0],
+ [10320, 0, 0],
+ [10560, 3, 0],
+ [10800, 2, 0],
+ [11040, 2, 0],
+ [11280, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [11520, 0, 0],
+ [12000, 0, 0],
+ [12240, 3, 0],
+ [12480, 0, 0],
+ [12840, 3, 0],
+ [13200, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [13440, 0, 0],
+ [13920, 0, 0],
+ [14160, 3, 0],
+ [14400, 0, 0],
+ [14760, 3, 0],
+ [15120, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [15360, 0, 0],
+ [15840, 0, 0],
+ [16080, 3, 0],
+ [16320, 3, 0],
+ [16680, 0, 0],
+ [17040, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [17280, 2, 0],
+ [17280, 6, 360],
+ [17520, 2, 0],
+ [17760, 7, 360],
+ [17760, 0, 0],
+ [18000, 0, 0],
+ [18240, 4, 360],
+ [18240, 3, 0],
+ [18480, 2, 0],
+ [18720, 5, 360],
+ [18720, 2, 0],
+ [18960, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [19200, 2, 0],
+ [19440, 1, 0],
+ [19680, 3, 0],
+ [20040, 1, 0],
+ [20160, 3, 0],
+ [20520, 3, 0],
+ [20880, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [21120, 2, 0],
+ [21360, 1, 0],
+ [21600, 3, 0],
+ [21960, 1, 0],
+ [22080, 0, 0],
+ [22440, 3, 0],
+ [22800, 2, 0],
+ [22920, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [23280, 0, 0],
+ [23520, 3, 0],
+ [24000, 2, 0],
+ [24360, 2, 0],
+ [24720, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [24960, 2, 0],
+ [24960, 6, 360],
+ [25200, 0, 0],
+ [25440, 2, 0],
+ [25440, 7, 360],
+ [25680, 0, 0],
+ [25920, 3, 0],
+ [25920, 4, 360],
+ [26160, 1, 0],
+ [26400, 3, 0],
+ [26400, 5, 360],
+ [26640, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26880, 2, 0],
+ [27120, 1, 0],
+ [27360, 3, 0],
+ [27720, 1, 0],
+ [27840, 3, 0],
+ [28200, 3, 0],
+ [28560, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [28800, 2, 0],
+ [29040, 1, 0],
+ [29280, 3, 0],
+ [29640, 1, 0],
+ [29760, 0, 0],
+ [30120, 3, 0],
+ [30480, 2, 0],
+ [30600, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30960, 0, 0],
+ [31200, 3, 0],
+ [31680, 2, 0],
+ [32040, 2, 0],
+ [32400, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32640, 2, 0],
+ [32880, 0, 0],
+ [33120, 2, 0],
+ [33360, 0, 0],
+ [33600, 3, 0],
+ [33840, 1, 0],
+ [34080, 3, 0],
+ [34320, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [34560, 0, 0],
+ [34800, 2, 0],
+ [35040, 1, 360],
+ [35520, 0, 360],
+ [36000, 3, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [36480, 3, 0],
+ [36840, 1, 0],
+ [36960, 3, 0],
+ [37200, 0, 0],
+ [37440, 3, 240],
+ [37800, 1, 0],
+ [37920, 0, 240],
+ [38280, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [38400, 2, 360],
+ [38880, 3, 360],
+ [39360, 0, 360],
+ [39840, 2, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [40320, 3, 0],
+ [40560, 2, 0],
+ [40800, 0, 0],
+ [41040, 2, 0],
+ [41280, 0, 240],
+ [41640, 3, 0],
+ [41760, 1, 240],
+ [42120, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [42240, 7, 360],
+ [42240, 0, 0],
+ [42480, 2, 0],
+ [42720, 5, 360],
+ [42720, 1, 360],
+ [43200, 0, 360],
+ [43200, 7, 360],
+ [43680, 4, 360],
+ [43680, 3, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [44160, 6, 360],
+ [44160, 3, 0],
+ [44520, 1, 0],
+ [44640, 3, 0],
+ [44880, 0, 0],
+ [45120, 4, 240],
+ [45120, 3, 240],
+ [45480, 5, 0],
+ [45480, 1, 0],
+ [45600, 7, 240],
+ [45600, 0, 240],
+ [45960, 5, 0],
+ [45960, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [46080, 6, 360],
+ [46080, 2, 360],
+ [46560, 7, 1440],
+ [46560, 3, 360],
+ [47040, 0, 360],
+ [47520, 2, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [48000, 3, 0],
+ [48240, 2, 0],
+ [48480, 0, 0],
+ [48720, 2, 0],
+ [48960, 0, 240],
+ [49320, 3, 0],
+ [49440, 1, 240],
+ [49800, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [49920, 1, 600],
+ [49920, 5, 720],
+ [50640, 3, 0],
+ [50880, 3, 0],
+ [51240, 2, 0],
+ [51360, 0, 240]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [51840, 2, 360],
+ [52320, 1, 0],
+ [52560, 3, 0],
+ [52800, 3, 0],
+ [53160, 2, 0],
+ [53280, 0, 240]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [53760, 1, 360],
+ [54240, 0, 0],
+ [54480, 3, 0],
+ [54720, 3, 0],
+ [55080, 2, 0],
+ [55200, 0, 240]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [55680, 0, 0],
+ [55920, 0, 0],
+ [56160, 3, 0],
+ [56280, 2, 0],
+ [56400, 3, 0],
+ [56640, 0, 0],
+ [56760, 1, 0],
+ [56880, 0, 0],
+ [57120, 1, 0],
+ [57360, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [57600, 5, 480],
+ [57600, 1, 600],
+ [58320, 3, 0],
+ [58560, 3, 0],
+ [58920, 2, 0],
+ [59040, 0, 240]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [59520, 2, 360],
+ [60000, 1, 0],
+ [60240, 3, 0],
+ [60480, 3, 0],
+ [60840, 2, 0],
+ [60960, 0, 240]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [61440, 1, 360],
+ [61920, 0, 0],
+ [62160, 3, 0],
+ [62400, 3, 0],
+ [62760, 2, 0],
+ [62880, 0, 240]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [63360, 0, 0],
+ [63600, 0, 0],
+ [63840, 3, 0],
+ [63960, 2, 0],
+ [64080, 3, 0],
+ [64320, 0, 0],
+ [64440, 1, 0],
+ [64560, 0, 0],
+ [64800, 1, 0],
+ [65040, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65280, 0, 0],
+ [65280, 5, 480],
+ [65520, 2, 0],
+ [65760, 1, 360],
+ [66240, 0, 360],
+ [66720, 3, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [67200, 3, 0],
+ [67560, 1, 0],
+ [67680, 3, 0],
+ [67920, 0, 0],
+ [68160, 3, 240],
+ [68520, 1, 0],
+ [68640, 0, 240],
+ [69000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [69120, 2, 360],
+ [69600, 3, 360],
+ [70080, 0, 360],
+ [70560, 2, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [71040, 3, 0],
+ [71280, 2, 0],
+ [71520, 0, 0],
+ [71760, 2, 0],
+ [72000, 0, 240],
+ [72360, 3, 0],
+ [72480, 1, 240],
+ [72840, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72960, 7, 360],
+ [72960, 0, 0],
+ [73200, 2, 0],
+ [73440, 5, 360],
+ [73440, 1, 360],
+ [73920, 0, 360],
+ [73920, 7, 360],
+ [74400, 4, 360],
+ [74400, 3, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [74880, 6, 360],
+ [74880, 3, 0],
+ [75240, 1, 0],
+ [75360, 3, 0],
+ [75600, 0, 0],
+ [75840, 4, 240],
+ [75840, 3, 240],
+ [76200, 5, 0],
+ [76200, 1, 0],
+ [76320, 7, 240],
+ [76320, 0, 240],
+ [76680, 5, 0],
+ [76680, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [76800, 6, 360],
+ [76800, 2, 360],
+ [77280, 7, 1440],
+ [77280, 3, 360],
+ [77760, 0, 360],
+ [78240, 2, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78720, 3, 0],
+ [78960, 2, 0],
+ [79200, 0, 0],
+ [79440, 2, 0],
+ [79680, 0, 240],
+ [80040, 3, 0],
+ [80160, 1, 240],
+ [80520, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80640, 3, 960],
+ [80640, 7, 960],
+ [82080, 2, 360],
+ [82080, 6, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [82560, 5, 600],
+ [82560, 1, 360],
+ [83040, 1, 0],
+ [83280, 6, 600],
+ [83280, 2, 360],
+ [83760, 2, 0],
+ [84000, 3, 360],
+ [84000, 7, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [84480, 6, 0],
+ [84480, 2, 360],
+ [84720, 7, 0],
+ [84960, 1, 360],
+ [85080, 5, 0],
+ [85200, 7, 0],
+ [85320, 4, 0],
+ [85440, 3, 360],
+ [85680, 7, 0],
+ [85800, 4, 0],
+ [85920, 7, 0],
+ [85920, 0, 360],
+ [86040, 5, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [86400, 6, 0],
+ [86400, 2, 360],
+ [86640, 7, 0],
+ [86880, 1, 360],
+ [87000, 5, 0],
+ [87120, 7, 0],
+ [87240, 4, 0],
+ [87360, 3, 360],
+ [87600, 7, 0],
+ [87720, 4, 0],
+ [87840, 7, 0],
+ [87840, 0, 0],
+ [87960, 5, 0],
+ [88080, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [88320, 3, 960],
+ [88320, 7, 960],
+ [89760, 2, 360],
+ [89760, 6, 360]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [90240, 5, 600],
+ [90240, 1, 360],
+ [90720, 1, 0],
+ [90960, 6, 600],
+ [90960, 2, 360],
+ [91440, 2, 0],
+ [91680, 7, 0],
+ [91680, 3, 360],
+ [91920, 4, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [92160, 2, 0],
+ [92160, 6, 360],
+ [92400, 3, 0],
+ [92640, 0, 0],
+ [92640, 5, 360],
+ [92880, 3, 0],
+ [93120, 1, 0],
+ [93120, 7, 360],
+ [93360, 3, 0],
+ [93600, 0, 0],
+ [93600, 4, 360],
+ [93840, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [94080, 2, 0],
+ [94080, 6, 360],
+ [94320, 3, 0],
+ [94560, 3, 0],
+ [94560, 5, 360],
+ [94680, 1, 0],
+ [94800, 3, 0],
+ [94920, 0, 0],
+ [95040, 2, 0],
+ [95040, 7, 360],
+ [95280, 3, 0],
+ [95520, 3, 0],
+ [95520, 4, 0],
+ [95640, 1, 0],
+ [95640, 6, 0],
+ [95760, 3, 0],
+ [95760, 7, 0],
+ [95880, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [96000, 6, 960],
+ [96000, 2, 960]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 125,
+ "changeBPM": false,
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 125,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "mom-car",
+ "song": "High",
+ "stage": "limo",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 125,
+ "speed": 1.8
+ }
+}
diff --git a/assets/preload/data/songs/milf/_meta.json b/assets/preload/data/songs/milf/_meta.json
new file mode 100644
index 0000000000..31a99bf6e9
--- /dev/null
+++ b/assets/preload/data/songs/milf/_meta.json
@@ -0,0 +1,4 @@
+{
+ "name": "M.I.L.F",
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/songs/milf/milf-easy.json b/assets/preload/data/songs/milf/milf-easy.json
new file mode 100644
index 0000000000..ed9cabd5ed
--- /dev/null
+++ b/assets/preload/data/songs/milf/milf-easy.json
@@ -0,0 +1,978 @@
+{
+ "song": {
+ "player1": "bf-car",
+ "gfVersion": "gf-car",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [2666.66675, 1, 0],
+ [3333.3335, 1, 0],
+ [3583.3335, 2, 166.666672],
+ [3833.3335, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [4166.667, 1, 0],
+ [4500, 1, 0],
+ [4666.667, 3, 0],
+ [5000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [5333.3335, 1, 0],
+ [6000, 1, 0],
+ [6250, 2, 166.666672],
+ [6500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [6833.3335, 1, 0],
+ [7166.667, 1, 0],
+ [7333.3335, 3, 0],
+ [7666.667, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [8000, 1, 0],
+ [8666.667, 1, 0],
+ [8916.667, 2, 166.666672],
+ [9166.667, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [9500, 1, 0],
+ [9833.334, 1, 0],
+ [10000, 3, 0],
+ [10333.334, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [10666.667, 1, 0],
+ [11333.334, 1, 0],
+ [11583.334, 2, 166.666672],
+ [11833.334, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [12166.667, 1, 0],
+ [12500, 1, 0],
+ [12666.667, 3, 0],
+ [13000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [13333.334, 2, 666.6667],
+ [14333.334, 1, 0],
+ [14500, 3, 500]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15166.667, 2, 250],
+ [15500, 0, 0],
+ [15833.334, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [16333.334, 1, 250],
+ [16666.668, 2, 250],
+ [17000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [17333.334, 3, 0],
+ [17666.668, 0, 0],
+ [18000, 3, 0],
+ [18333.334, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [18666.668, 2, 666.6667],
+ [19666.668, 1, 0],
+ [19833.334, 3, 500]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [20500, 2, 250],
+ [20833.334, 0, 0],
+ [21166.668, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [21666.668, 1, 250],
+ [22000, 2, 250],
+ [22333.334, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [22666.668, 3, 0],
+ [23000, 0, 0],
+ [23333.334, 3, 0],
+ [23666.668, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [24000, 1, 0],
+ [24250, 3, 0],
+ [24666.668, 1, 0],
+ [24916.668, 1, 0],
+ [25166.668, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [25500, 2, 0],
+ [26000, 1, 0],
+ [26250, 1, 0],
+ [26500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26833.334, 0, 0],
+ [27333.334, 1, 0],
+ [27583.334, 1, 0],
+ [27833.334, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [28333.334, 3, 83.3333359],
+ [28666.668, 0, 0],
+ [29000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [29333.334, 1, 0],
+ [29333.334, 6, 333.333344],
+ [29583.334, 3, 0],
+ [30000, 1, 0],
+ [30250, 1, 0],
+ [30500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30833.334, 2, 0],
+ [31333.334, 1, 0],
+ [31583.334, 1, 0],
+ [31833.334, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32166.668, 0, 0],
+ [32666.668, 1, 0],
+ [32916.668, 1, 0],
+ [33166.668, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33666.668, 3, 83.3333359],
+ [34000, 0, 0],
+ [34333.3359, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [34666.668, 2, 666.6667],
+ [35666.668, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [36000, 0, 166.666672],
+ [36333.3359, 1, 0],
+ [36666.668, 2, 166.666672],
+ [37000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [37333.3359, 2, 0],
+ [37666.668, 3, 0],
+ [38000, 2, 0],
+ [38333.3359, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [38666.668, 2, 0],
+ [39000, 3, 0],
+ [39333.3359, 2, 250],
+ [39666.668, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [40000, 2, 666.6667],
+ [41000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [41333.3359, 0, 166.666672],
+ [41666.668, 1, 0],
+ [42000, 2, 166.666672],
+ [42333.3359, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [42666.668, 2, 0],
+ [43000, 3, 0],
+ [43333.3359, 2, 0],
+ [43666.668, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [44000, 2, 0],
+ [44333.3359, 3, 0],
+ [44666.668, 2, 250],
+ [45000, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [45333.3359, 2, 666.6667],
+ [46333.3359, 1, 0],
+ [46500, 3, 500]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [47166.668, 2, 250],
+ [47500, 0, 0],
+ [47833.3359, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48333.3359, 1, 250],
+ [48666.668, 2, 250],
+ [49000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49333.3359, 3, 0],
+ [49666.668, 0, 0],
+ [50000, 3, 0],
+ [50333.3359, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [50666.668, 2, 666.6667],
+ [51666.668, 1, 0],
+ [51833.3359, 3, 500]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [52500, 2, 250],
+ [52833.3359, 0, 0],
+ [53166.668, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [53666.668, 1, 250],
+ [54000, 2, 250],
+ [54333.3359, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [54666.668, 3, 0],
+ [55000, 0, 0],
+ [55333.3359, 3, 0],
+ [55666.668, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56000, 0, 0],
+ [56333.3359, 3, 0],
+ [56500, 0, 0],
+ [56833.3359, 3, 0],
+ [57000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [57333.3359, 0, 0],
+ [57666.668, 3, 0],
+ [57833.3359, 0, 0],
+ [58166.668, 3, 0],
+ [58333.3359, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [58666.668, 2, 0],
+ [58833.3359, 3, 0],
+ [59000, 2, 0],
+ [59166.668, 3, 0],
+ [59333.3359, 2, 0],
+ [59500, 3, 0],
+ [59666.668, 2, 0],
+ [59833.3359, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [60000, 2, 0],
+ [60166.668, 3, 0],
+ [60333.3359, 2, 0],
+ [60500, 3, 0],
+ [60666.668, 2, 0],
+ [60833.3359, 3, 0],
+ [61000, 2, 0],
+ [61166.668, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61333.3359, 0, 0],
+ [61666.668, 3, 0],
+ [61833.3359, 0, 0],
+ [62166.668, 3, 0],
+ [62333.3359, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [62666.668, 0, 0],
+ [63000, 3, 0],
+ [63166.668, 0, 0],
+ [63500, 3, 0],
+ [63666.668, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [64000, 2, 0],
+ [64166.668, 3, 0],
+ [64333.3359, 2, 0],
+ [64500.0039, 3, 0],
+ [64666.668, 2, 0],
+ [64833.3359, 3, 0],
+ [65000.0039, 2, 0],
+ [65166.668, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65333.3359, 2, 0],
+ [65500.0039, 3, 0],
+ [65666.67, 2, 0],
+ [65833.3359, 3, 0],
+ [66000, 2, 0],
+ [66166.67, 3, 0],
+ [66333.3359, 2, 0],
+ [66500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [66666.67, 1, 0],
+ [66916.67, 3, 0],
+ [67333.3359, 1, 0],
+ [67583.3359, 1, 0],
+ [67833.3359, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [68166.67, 2, 0],
+ [68666.67, 1, 0],
+ [68916.67, 1, 0],
+ [69166.67, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [69500, 0, 0],
+ [70000, 1, 0],
+ [70250, 1, 0],
+ [70500, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [71000, 3, 83.3333359],
+ [71333.3359, 0, 0],
+ [71666.67, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72000, 6, 333.333344],
+ [72000, 1, 0],
+ [72250, 3, 0],
+ [72666.67, 1, 0],
+ [72916.67, 1, 0],
+ [73166.67, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [73500, 2, 0],
+ [74000, 1, 0],
+ [74250, 1, 0],
+ [74500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [74833.3359, 0, 0],
+ [75333.3359, 1, 0],
+ [75583.3359, 1, 0],
+ [75833.3359, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [76333.3359, 3, 83.3333359],
+ [76666.67, 0, 0],
+ [77000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [77333.3359, 6, 666.6667],
+ [77333.3359, 2, 666.6667],
+ [78333.3359, 5, 0],
+ [78333.3359, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [78666.67, 4, 166.666672],
+ [78666.67, 0, 166.666672],
+ [79000, 5, 0],
+ [79000, 1, 0],
+ [79333.3359, 6, 166.666672],
+ [79333.3359, 2, 166.666672],
+ [79666.67, 4, 0],
+ [79666.67, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [80000, 6, 0],
+ [80000, 2, 0],
+ [80333.3359, 7, 0],
+ [80333.3359, 3, 0],
+ [80666.67, 6, 0],
+ [80666.67, 2, 0],
+ [81000, 4, 0],
+ [81000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [81333.3359, 6, 0],
+ [81333.3359, 2, 0],
+ [81666.67, 7, 0],
+ [81666.67, 3, 0],
+ [82000, 6, 250],
+ [82000, 2, 250],
+ [82333.3359, 5, 250],
+ [82333.3359, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [82666.67, 0, 250],
+ [82666.67, 6, 666.6667],
+ [83000, 1, 250],
+ [83333.3359, 3, 250],
+ [83666.67, 1, 250],
+ [83666.67, 5, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [84000, 2, 250],
+ [84000, 4, 166.666672],
+ [84333.3359, 1, 250],
+ [84333.3359, 5, 0],
+ [84666.67, 3, 250],
+ [84666.67, 6, 166.666672],
+ [85000, 1, 250],
+ [85000, 4, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [85333.3359, 1, 250],
+ [85333.3359, 6, 0],
+ [85666.67, 3, 250],
+ [85666.67, 7, 0],
+ [86000, 0, 250],
+ [86000, 6, 0],
+ [86333.3359, 3, 250],
+ [86333.3359, 4, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [86666.67, 2, 0],
+ [86666.67, 6, 250],
+ [86833.3359, 3, 0],
+ [87000, 2, 0],
+ [87000, 7, 250],
+ [87166.67, 0, 0],
+ [87333.3359, 2, 250],
+ [87333.3359, 6, 250],
+ [87333.3359, 2, 250],
+ [87666.67, 1, 250],
+ [87666.67, 5, 250],
+ [87666.67, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [88000, 1, 0],
+ [88000, 5, 0],
+ [88333.3359, 1, 0],
+ [88666.67, 1, 0],
+ [89000, 2, 0],
+ [89166.67, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [89500, 1, 0],
+ [89833.3359, 1, 0],
+ [90166.67, 3, 0],
+ [90333.3359, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [90666.67, 1, 0],
+ [91000, 1, 0],
+ [91333.3359, 1, 0],
+ [91666.67, 2, 0],
+ [91833.3359, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [92166.67, 1, 0],
+ [92500, 1, 0],
+ [92666.67, 3, 0],
+ [92833.3359, 1, 0],
+ [93000, 3, 0],
+ [93166.67, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [93333.3359, 5, 0],
+ [93333.3359, 1, 0],
+ [93666.67, 5, 0],
+ [93666.67, 1, 0],
+ [94000, 5, 0],
+ [94000, 1, 0],
+ [94333.3359, 6, 0],
+ [94333.3359, 2, 0],
+ [94500, 5, 0],
+ [94500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [94833.3359, 5, 0],
+ [94833.3359, 1, 0],
+ [95166.67, 5, 0],
+ [95166.67, 1, 0],
+ [95500, 7, 0],
+ [95500, 3, 0],
+ [95666.67, 6, 250],
+ [95666.67, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [96000, 5, 0],
+ [96000, 1, 0],
+ [96333.3359, 5, 0],
+ [96333.3359, 1, 0],
+ [96666.67, 5, 0],
+ [96666.67, 1, 0],
+ [97000, 6, 0],
+ [97000, 2, 0],
+ [97166.67, 5, 0],
+ [97166.67, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [97500, 5, 0],
+ [97500, 1, 0],
+ [97833.3359, 5, 0],
+ [97833.3359, 1, 0],
+ [98000, 7, 0],
+ [98000, 3, 0],
+ [98166.67, 5, 0],
+ [98166.67, 1, 0],
+ [98333.3359, 7, 0],
+ [98333.3359, 3, 0],
+ [98500, 4, 0],
+ [98500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [98666.67, 6, 666.6667],
+ [98666.67, 2, 666.6667],
+ [99666.67, 1, 0],
+ [99833.3359, 3, 500]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [100500, 2, 250],
+ [100833.336, 0, 0],
+ [101166.672, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [101666.672, 1, 250],
+ [102000, 2, 250],
+ [102333.336, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [102666.672, 3, 0],
+ [103000, 0, 0],
+ [103333.336, 3, 0],
+ [103666.672, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [104000, 2, 666.6667],
+ [104000, 6, 666.6667],
+ [105000, 1, 0],
+ [105166.672, 3, 500]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [105833.336, 2, 250],
+ [106166.672, 0, 0],
+ [106500, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [107000, 1, 250],
+ [107333.336, 2, 250],
+ [107666.672, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [108000, 3, 0],
+ [108333.336, 0, 0],
+ [108666.672, 3, 0],
+ [109000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [109333.336, 1, 0],
+ [109583.336, 3, 0],
+ [110000, 1, 0],
+ [110250, 1, 0],
+ [110500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [110833.336, 2, 0],
+ [111333.336, 1, 0],
+ [111583.336, 1, 0],
+ [111833.336, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [112166.672, 0, 0],
+ [112666.672, 1, 0],
+ [112916.672, 1, 0],
+ [113166.672, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [113666.672, 3, 83.3333359],
+ [114000, 0, 0],
+ [114333.336, 0, 0],
+ [114500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [114666.672, 6, 333.333344],
+ [114666.672, 1, 0],
+ [114916.672, 3, 0],
+ [115333.336, 1, 0],
+ [115583.336, 1, 0],
+ [115833.336, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [116166.672, 2, 0],
+ [116666.672, 1, 0],
+ [116916.672, 1, 0],
+ [117166.672, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [117500, 0, 0],
+ [118000, 1, 0],
+ [118250, 1, 0],
+ [118500, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [119000, 3, 83.3333359],
+ [119333.336, 0, 0],
+ [119666.672, 0, 0],
+ [119833.336, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[120000, 2, 833.3334]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 180,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "mom-car",
+ "song": "M.I.L.F",
+ "stage": "limo",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 180,
+ "speed": 1.4
+ }
+}
diff --git a/assets/preload/data/songs/milf/milf-hard.json b/assets/preload/data/songs/milf/milf-hard.json
new file mode 100644
index 0000000000..2109889cc2
--- /dev/null
+++ b/assets/preload/data/songs/milf/milf-hard.json
@@ -0,0 +1,1235 @@
+{
+ "song": {
+ "player1": "bf-car",
+ "gfVersion": "gf-car",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [2666.66675, 1, 0],
+ [3000, 1, 0],
+ [3333.3335, 1, 0],
+ [3416.66675, 0, 0],
+ [3500, 3, 0],
+ [3583.3335, 2, 166.666672],
+ [3833.3335, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [4166.667, 1, 0],
+ [4500, 1, 0],
+ [4666.667, 3, 0],
+ [4833.3335, 1, 0],
+ [5000, 0, 0],
+ [5166.667, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [5333.3335, 1, 0],
+ [5666.667, 1, 0],
+ [6000, 1, 0],
+ [6083.3335, 0, 0],
+ [6166.667, 3, 0],
+ [6250, 2, 166.666672],
+ [6500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [6833.3335, 1, 0],
+ [7166.667, 1, 0],
+ [7333.3335, 3, 0],
+ [7500, 1, 0],
+ [7666.667, 2, 0],
+ [7750, 3, 0],
+ [7833.3335, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [8000, 1, 0],
+ [8333.334, 1, 0],
+ [8666.667, 1, 0],
+ [8750, 0, 0],
+ [8833.334, 3, 0],
+ [8916.667, 2, 166.666672],
+ [9166.667, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [9500, 1, 0],
+ [9833.334, 1, 0],
+ [10000, 3, 0],
+ [10166.667, 1, 0],
+ [10333.334, 0, 0],
+ [10500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [10666.667, 1, 0],
+ [11000, 1, 0],
+ [11333.334, 1, 0],
+ [11416.667, 0, 0],
+ [11500, 3, 0],
+ [11583.334, 2, 166.666672],
+ [11833.334, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [12166.667, 1, 0],
+ [12500, 1, 0],
+ [12666.667, 3, 0],
+ [12833.334, 1, 0],
+ [13000, 2, 0],
+ [13083.334, 3, 0],
+ [13166.667, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [13333.334, 2, 666.6667],
+ [14333.334, 1, 0],
+ [14500, 1, 0],
+ [14583.334, 3, 416.6667]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15166.667, 3, 0],
+ [15250, 2, 166.666672],
+ [15500, 0, 0],
+ [15833.334, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [16166.667, 0, 0],
+ [16250.001, 3, 0],
+ [16333.334, 1, 250],
+ [16666.668, 2, 250],
+ [17000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [17333.334, 3, 0],
+ [17500, 3, 0],
+ [17583.334, 2, 0],
+ [17666.668, 0, 0],
+ [17833.334, 1, 0],
+ [18000, 3, 0],
+ [18166.668, 2, 0],
+ [18333.334, 0, 0],
+ [18500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [18666.668, 2, 666.6667],
+ [19666.668, 1, 0],
+ [19833.334, 1, 0],
+ [19916.668, 3, 416.6667]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [20500, 3, 0],
+ [20583.334, 2, 166.666672],
+ [20833.334, 0, 0],
+ [21166.668, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [21500, 0, 0],
+ [21583.334, 3, 0],
+ [21666.668, 1, 250],
+ [22000, 2, 250],
+ [22333.334, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [22666.668, 3, 0],
+ [22833.334, 3, 0],
+ [22916.668, 2, 0],
+ [23000, 0, 0],
+ [23166.668, 1, 0],
+ [23333.334, 3, 0],
+ [23500, 2, 0],
+ [23666.668, 0, 0],
+ [23833.334, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [24000, 1, 0],
+ [24083.334, 3, 0],
+ [24166.668, 0, 0],
+ [24250, 3, 0],
+ [24500, 3, 0],
+ [24666.668, 1, 0],
+ [24916.668, 1, 0],
+ [25166.668, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [25500, 2, 0],
+ [25666.668, 3, 83.3333359],
+ [25833.334, 1, 0],
+ [26000, 1, 0],
+ [26250, 1, 0],
+ [26500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26750, 1, 0],
+ [26833.334, 3, 0],
+ [26916.668, 0, 0],
+ [27000, 3, 0],
+ [27250, 3, 0],
+ [27333.334, 1, 0],
+ [27583.334, 1, 0],
+ [27833.334, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [28166.668, 2, 0],
+ [28333.334, 3, 83.3333359],
+ [28500, 1, 0],
+ [28666.668, 0, 0],
+ [28833.334, 3, 0],
+ [28916.668, 1, 0],
+ [29000, 0, 0],
+ [29166.668, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [29333.334, 1, 0],
+ [29333.334, 6, 333.333344],
+ [29416.668, 3, 0],
+ [29500, 0, 0],
+ [29583.334, 3, 0],
+ [29833.334, 3, 0],
+ [30000, 1, 0],
+ [30250, 1, 0],
+ [30500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30833.334, 2, 0],
+ [31000, 3, 83.3333359],
+ [31166.668, 1, 0],
+ [31333.334, 1, 0],
+ [31583.334, 1, 0],
+ [31833.334, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32083.334, 1, 0],
+ [32166.668, 3, 0],
+ [32250.002, 0, 0],
+ [32333.334, 3, 0],
+ [32583.334, 3, 0],
+ [32666.668, 1, 0],
+ [32916.668, 1, 0],
+ [33166.668, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33500, 2, 0],
+ [33666.668, 3, 83.3333359],
+ [33833.3359, 1, 0],
+ [34000, 0, 0],
+ [34166.668, 3, 0],
+ [34250, 1, 0],
+ [34333.3359, 0, 0],
+ [34500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [34666.668, 2, 666.6667],
+ [35666.668, 1, 0],
+ [35833.3359, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [36000, 0, 166.666672],
+ [36333.3359, 1, 0],
+ [36666.668, 2, 166.666672],
+ [37000, 0, 0],
+ [37083.3359, 3, 0],
+ [37166.668, 1, 83.3333359]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [37333.3359, 2, 0],
+ [37500, 0, 0],
+ [37666.668, 3, 0],
+ [37833.3359, 0, 0],
+ [38000, 2, 0],
+ [38166.668, 3, 0],
+ [38333.3359, 0, 0],
+ [38500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [38666.668, 2, 0],
+ [38833.3359, 3, 0],
+ [39000, 2, 0],
+ [39166.668, 0, 0],
+ [39333.3359, 2, 250],
+ [39666.668, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [40000, 2, 666.6667],
+ [41000, 1, 0],
+ [41166.668, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [41333.3359, 0, 166.666672],
+ [41666.668, 1, 0],
+ [42000, 2, 166.666672],
+ [42333.3359, 0, 0],
+ [42416.668, 3, 0],
+ [42500, 1, 83.3333359]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [42666.668, 2, 0],
+ [42833.3359, 0, 0],
+ [43000, 3, 0],
+ [43166.668, 0, 0],
+ [43333.3359, 2, 0],
+ [43500, 3, 0],
+ [43666.668, 0, 0],
+ [43833.3359, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [44000, 2, 0],
+ [44166.668, 3, 0],
+ [44333.3359, 2, 0],
+ [44500, 0, 0],
+ [44666.668, 2, 250],
+ [45000, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [45333.3359, 2, 666.6667],
+ [46333.3359, 1, 0],
+ [46500, 1, 0],
+ [46583.3359, 3, 416.6667]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [47166.668, 3, 0],
+ [47250, 2, 166.666672],
+ [47500, 0, 0],
+ [47833.3359, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48166.668, 0, 0],
+ [48250, 3, 0],
+ [48333.3359, 1, 250],
+ [48666.668, 2, 250],
+ [49000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49333.3359, 3, 0],
+ [49500, 2, 0],
+ [49666.668, 0, 0],
+ [49833.3359, 1, 0],
+ [50000, 3, 0],
+ [50166.668, 2, 0],
+ [50333.3359, 0, 0],
+ [50500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [50666.668, 2, 666.6667],
+ [51666.668, 1, 0],
+ [51833.3359, 1, 0],
+ [51916.668, 3, 416.6667]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [52500, 3, 0],
+ [52583.3359, 2, 166.666672],
+ [52833.3359, 0, 0],
+ [53166.668, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [53500, 0, 0],
+ [53583.3359, 3, 0],
+ [53666.668, 1, 250],
+ [54000, 2, 250],
+ [54333.3359, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [54666.668, 3, 0],
+ [54833.3359, 2, 0],
+ [55000, 0, 0],
+ [55166.668, 1, 0],
+ [55333.3359, 3, 0],
+ [55500, 2, 0],
+ [55666.668, 0, 0],
+ [55833.3359, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56000, 0, 0],
+ [56166.668, 1, 0],
+ [56333.3359, 3, 0],
+ [56500, 1, 0],
+ [56666.668, 3, 0],
+ [56833.3359, 1, 0],
+ [57000, 0, 0],
+ [57083.3359, 3, 0],
+ [57166.668, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [57333.3359, 0, 0],
+ [57500, 1, 0],
+ [57666.668, 3, 0],
+ [57833.3359, 1, 0],
+ [58000, 3, 0],
+ [58166.668, 1, 0],
+ [58333.3359, 0, 0],
+ [58416.668, 3, 0],
+ [58500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [58666.668, 2, 0],
+ [58750, 3, 0],
+ [58833.3359, 1, 0],
+ [59000, 2, 0],
+ [59083.3359, 3, 0],
+ [59166.668, 1, 0],
+ [59333.3359, 2, 0],
+ [59416.668, 3, 0],
+ [59500, 1, 0],
+ [59666.668, 2, 0],
+ [59750, 3, 0],
+ [59833.3359, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [60000, 2, 0],
+ [60083.3359, 3, 0],
+ [60166.668, 1, 0],
+ [60333.3359, 2, 0],
+ [60416.668, 3, 0],
+ [60500, 1, 0],
+ [60666.668, 2, 0],
+ [60750, 3, 0],
+ [60833.3359, 1, 0],
+ [61000, 2, 0],
+ [61083.3359, 3, 0],
+ [61166.668, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61333.3359, 0, 0],
+ [61500, 1, 0],
+ [61666.668, 3, 0],
+ [61833.3359, 1, 0],
+ [62000, 3, 0],
+ [62166.668, 1, 0],
+ [62333.3359, 0, 0],
+ [62416.668, 3, 0],
+ [62500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [62666.668, 0, 0],
+ [62833.3359, 1, 0],
+ [63000, 3, 0],
+ [63166.668, 1, 0],
+ [63333.3359, 3, 0],
+ [63500, 1, 0],
+ [63666.668, 0, 0],
+ [63750, 3, 0],
+ [63833.3359, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [64000, 2, 0],
+ [64083.3359, 3, 0],
+ [64166.668, 1, 0],
+ [64333.3359, 2, 0],
+ [64416.668, 3, 0],
+ [64500.0039, 1, 0],
+ [64666.668, 2, 0],
+ [64750.0039, 3, 0],
+ [64833.3359, 1, 0],
+ [65000.0039, 2, 0],
+ [65083.3359, 3, 0],
+ [65166.668, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65333.3359, 2, 0],
+ [65416.668, 3, 0],
+ [65500.0039, 1, 0],
+ [65666.67, 2, 0],
+ [65750, 3, 0],
+ [65833.3359, 1, 0],
+ [66000, 2, 0],
+ [66083.3359, 3, 0],
+ [66166.67, 1, 0],
+ [66333.3359, 2, 0],
+ [66416.67, 3, 0],
+ [66500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [66666.67, 1, 0],
+ [66750, 3, 0],
+ [66833.3359, 0, 0],
+ [66916.67, 3, 0],
+ [67166.67, 3, 0],
+ [67333.3359, 1, 0],
+ [67583.3359, 1, 0],
+ [67833.3359, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [68166.67, 2, 0],
+ [68333.3359, 3, 83.3333359],
+ [68500, 1, 0],
+ [68666.67, 1, 0],
+ [68916.67, 1, 0],
+ [69166.67, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [69416.67, 1, 0],
+ [69500, 3, 0],
+ [69583.3359, 0, 0],
+ [69666.67, 3, 0],
+ [69916.67, 3, 0],
+ [70000, 1, 0],
+ [70250, 1, 0],
+ [70500, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [70833.3359, 2, 0],
+ [71000, 3, 0],
+ [71083.3359, 1, 0],
+ [71166.67, 0, 0],
+ [71333.3359, 1, 0],
+ [71500, 3, 0],
+ [71583.3359, 1, 0],
+ [71666.67, 0, 0],
+ [71833.3359, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72000, 1, 0],
+ [72000, 6, 333.333344],
+ [72083.3359, 3, 0],
+ [72166.67, 0, 0],
+ [72250, 3, 0],
+ [72500, 3, 0],
+ [72666.67, 1, 0],
+ [72916.67, 1, 0],
+ [73166.67, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [73500, 2, 0],
+ [73666.67, 3, 83.3333359],
+ [73833.3359, 1, 0],
+ [74000, 1, 0],
+ [74250, 1, 0],
+ [74500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [74750, 1, 0],
+ [74833.3359, 3, 0],
+ [74916.67, 0, 0],
+ [75000, 3, 0],
+ [75250, 3, 0],
+ [75333.3359, 1, 0],
+ [75583.3359, 1, 0],
+ [75833.3359, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [76166.67, 2, 0],
+ [76333.3359, 3, 0],
+ [76416.67, 1, 0],
+ [76500, 0, 0],
+ [76666.67, 1, 0],
+ [76833.3359, 3, 0],
+ [76916.67, 1, 0],
+ [77000, 0, 0],
+ [77166.67, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [77333.3359, 6, 666.6667],
+ [77333.3359, 2, 666.6667],
+ [78333.3359, 4, 0],
+ [78333.3359, 1, 0],
+ [78500, 6, 0],
+ [78500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [78666.67, 6, 166.666672],
+ [78666.67, 0, 166.666672],
+ [79000, 7, 0],
+ [79000, 1, 0],
+ [79333.3359, 5, 166.666672],
+ [79333.3359, 2, 166.666672],
+ [79666.67, 7, 0],
+ [79666.67, 0, 0],
+ [79750, 4, 0],
+ [79750, 3, 0],
+ [79833.3359, 1, 83.3333359],
+ [79833.3359, 5, 83.3333359]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [80000, 6, 0],
+ [80000, 2, 0],
+ [80166.67, 4, 0],
+ [80166.67, 0, 0],
+ [80333.3359, 7, 0],
+ [80333.3359, 3, 0],
+ [80500, 4, 0],
+ [80500, 0, 0],
+ [80666.67, 6, 0],
+ [80666.67, 2, 0],
+ [80833.3359, 7, 0],
+ [80833.3359, 3, 0],
+ [81000, 4, 0],
+ [81000, 0, 0],
+ [81166.67, 7, 0],
+ [81166.67, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [81333.3359, 6, 0],
+ [81333.3359, 2, 0],
+ [81500, 7, 0],
+ [81500, 3, 0],
+ [81666.67, 6, 0],
+ [81666.67, 2, 0],
+ [81833.3359, 4, 0],
+ [81833.3359, 0, 0],
+ [82000, 6, 250],
+ [82000, 2, 250],
+ [82333.3359, 5, 250],
+ [82333.3359, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [82666.67, 6, 666.6667],
+ [82666.67, 0, 250],
+ [83000, 1, 250],
+ [83333.3359, 3, 250],
+ [83666.67, 1, 250],
+ [83666.67, 5, 0],
+ [83833.3359, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [84000, 2, 250],
+ [84000, 4, 166.666672],
+ [84333.3359, 1, 250],
+ [84333.3359, 5, 0],
+ [84666.67, 3, 250],
+ [84666.67, 6, 166.666672],
+ [85000, 1, 250],
+ [85000, 4, 0],
+ [85083.3359, 7, 0],
+ [85166.67, 5, 83.3333359]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [85333.3359, 1, 250],
+ [85333.3359, 6, 0],
+ [85500, 4, 0],
+ [85666.67, 3, 250],
+ [85666.67, 7, 0],
+ [85833.3359, 4, 0],
+ [86000, 0, 250],
+ [86000, 6, 0],
+ [86166.67, 7, 0],
+ [86333.3359, 3, 250],
+ [86333.3359, 4, 0],
+ [86500, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [86666.67, 6, 250],
+ [86666.67, 2, 0],
+ [86833.3359, 3, 0],
+ [87000, 7, 250],
+ [87000, 2, 0],
+ [87166.67, 0, 0],
+ [87333.3359, 6, 250],
+ [87333.3359, 2, 250],
+ [87666.67, 5, 250],
+ [87666.67, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [88000, 5, 0],
+ [88000, 1, 0],
+ [88333.3359, 1, 0],
+ [88666.67, 1, 0],
+ [88833.3359, 0, 0],
+ [88916.67, 3, 0],
+ [89000, 2, 0],
+ [89166.67, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [89500, 1, 0],
+ [89833.3359, 1, 0],
+ [90166.67, 3, 0],
+ [90250, 0, 0],
+ [90333.3359, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [90666.67, 1, 0],
+ [91000, 1, 0],
+ [91333.3359, 1, 0],
+ [91500, 3, 0],
+ [91583.3359, 0, 0],
+ [91666.67, 2, 0],
+ [91833.3359, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [92000, 0, 0],
+ [92166.67, 1, 0],
+ [92333.3359, 2, 0],
+ [92500, 1, 0],
+ [92666.67, 3, 0],
+ [92833.3359, 1, 0],
+ [92916.67, 2, 0],
+ [93000, 3, 0],
+ [93166.67, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [93333.3359, 1, 0],
+ [93333.3359, 5, 0],
+ [93666.67, 1, 0],
+ [93666.67, 5, 0],
+ [94000, 1, 0],
+ [94000, 5, 0],
+ [94166.67, 0, 0],
+ [94166.67, 4, 0],
+ [94250, 3, 0],
+ [94250, 7, 0],
+ [94333.3359, 6, 0],
+ [94333.3359, 2, 0],
+ [94500, 1, 0],
+ [94500, 5, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [94833.3359, 1, 0],
+ [94833.3359, 5, 0],
+ [95166.67, 1, 0],
+ [95166.67, 5, 0],
+ [95500, 3, 0],
+ [95500, 7, 0],
+ [95583.3359, 0, 0],
+ [95583.3359, 4, 0],
+ [95666.67, 2, 250],
+ [95666.67, 6, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [96000, 1, 0],
+ [96000, 5, 0],
+ [96333.3359, 1, 0],
+ [96333.3359, 5, 0],
+ [96666.67, 1, 0],
+ [96666.67, 5, 0],
+ [96833.3359, 3, 0],
+ [96833.3359, 7, 0],
+ [96916.67, 0, 0],
+ [96916.67, 4, 0],
+ [97000, 2, 0],
+ [97000, 6, 0],
+ [97166.67, 1, 0],
+ [97166.67, 5, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [97333.3359, 0, 0],
+ [97333.3359, 4, 0],
+ [97500, 1, 0],
+ [97500, 5, 0],
+ [97666.67, 2, 0],
+ [97666.67, 6, 0],
+ [97833.3359, 1, 0],
+ [97833.3359, 5, 0],
+ [98000, 3, 0],
+ [98000, 7, 0],
+ [98166.67, 1, 0],
+ [98166.67, 5, 0],
+ [98250, 2, 0],
+ [98250, 6, 0],
+ [98333.3359, 3, 0],
+ [98333.3359, 7, 0],
+ [98500, 0, 0],
+ [98500, 4, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [98666.67, 2, 666.6667],
+ [98666.67, 6, 666.6667],
+ [99666.67, 1, 0],
+ [99833.3359, 1, 0],
+ [99916.67, 3, 416.6667]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [100500, 3, 0],
+ [100583.336, 2, 166.666672],
+ [100833.336, 0, 0],
+ [101166.672, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [101500, 0, 0],
+ [101583.336, 3, 0],
+ [101666.672, 1, 250],
+ [102000, 2, 250],
+ [102333.336, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [102666.672, 3, 0],
+ [102833.336, 3, 0],
+ [102916.672, 2, 0],
+ [103000, 0, 0],
+ [103166.672, 1, 0],
+ [103333.336, 3, 0],
+ [103500, 2, 0],
+ [103666.672, 0, 0],
+ [103833.336, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [104000, 2, 666.6667],
+ [104000, 6, 666.6667],
+ [105000, 1, 0],
+ [105166.672, 1, 0],
+ [105250, 3, 333.333344]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [105833.336, 3, 0],
+ [105916.672, 2, 166.666672],
+ [106166.672, 0, 0],
+ [106500, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [106833.336, 0, 0],
+ [106916.672, 3, 0],
+ [107000, 1, 250],
+ [107333.336, 2, 250],
+ [107666.672, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [108000, 3, 0],
+ [108166.672, 3, 0],
+ [108250, 2, 0],
+ [108333.336, 0, 0],
+ [108500, 1, 0],
+ [108666.672, 3, 0],
+ [108833.336, 2, 0],
+ [109000, 0, 0],
+ [109166.672, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [109333.336, 1, 0],
+ [109416.672, 3, 0],
+ [109500, 0, 0],
+ [109583.336, 3, 0],
+ [109833.336, 3, 0],
+ [110000, 1, 0],
+ [110250, 1, 0],
+ [110500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [110833.336, 2, 0],
+ [111000, 3, 83.3333359],
+ [111166.672, 1, 0],
+ [111333.336, 1, 0],
+ [111583.336, 1, 0],
+ [111833.336, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [112083.336, 1, 0],
+ [112166.672, 3, 0],
+ [112250, 0, 0],
+ [112333.336, 3, 0],
+ [112583.336, 3, 0],
+ [112666.672, 1, 0],
+ [112916.672, 1, 0],
+ [113166.672, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [113500, 2, 0],
+ [113666.672, 3, 0],
+ [113750, 1, 0],
+ [113833.336, 0, 0],
+ [114000, 1, 0],
+ [114166.672, 3, 0],
+ [114250, 1, 0],
+ [114333.336, 0, 0],
+ [114500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [114666.672, 1, 0],
+ [114666.672, 6, 333.333344],
+ [114750, 3, 0],
+ [114833.336, 0, 0],
+ [114916.672, 3, 0],
+ [115166.672, 3, 0],
+ [115333.336, 1, 0],
+ [115583.336, 1, 0],
+ [115833.336, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [116166.672, 2, 0],
+ [116333.336, 3, 83.3333359],
+ [116500, 1, 0],
+ [116666.672, 1, 0],
+ [116916.672, 1, 0],
+ [117166.672, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [117416.672, 1, 0],
+ [117500, 3, 0],
+ [117583.336, 0, 0],
+ [117666.672, 3, 0],
+ [117916.672, 3, 0],
+ [118000, 1, 0],
+ [118250, 1, 0],
+ [118500, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [118833.336, 2, 0],
+ [119000, 3, 0],
+ [119083.336, 1, 0],
+ [119166.672, 0, 0],
+ [119333.336, 1, 0],
+ [119500, 3, 0],
+ [119583.336, 1, 0],
+ [119666.672, 0, 0],
+ [119833.336, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[120000, 2, 833.3334]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 180,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "mom-car",
+ "song": "M.I.L.F",
+ "stage": "limo",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 180,
+ "speed": 2.6
+ }
+}
diff --git a/assets/preload/data/songs/milf/milf.json b/assets/preload/data/songs/milf/milf.json
new file mode 100644
index 0000000000..d61269c2b1
--- /dev/null
+++ b/assets/preload/data/songs/milf/milf.json
@@ -0,0 +1,1074 @@
+{
+ "song": {
+ "player1": "bf-car",
+ "gfVersion": "gf-car",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [2666.66675, 1, 0],
+ [3000, 1, 0],
+ [3333.3335, 1, 0],
+ [3583.3335, 2, 166.666672],
+ [3833.3335, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [4166.667, 1, 0],
+ [4500, 1, 0],
+ [4666.667, 3, 0],
+ [4833.3335, 1, 0],
+ [5000, 0, 0],
+ [5166.667, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [5333.3335, 1, 0],
+ [5666.667, 1, 0],
+ [6000, 1, 0],
+ [6250, 2, 166.666672],
+ [6500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [6833.3335, 1, 0],
+ [7166.667, 1, 0],
+ [7333.3335, 3, 0],
+ [7500, 1, 0],
+ [7666.667, 2, 0],
+ [7833.3335, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [8000, 1, 0],
+ [8333.334, 1, 0],
+ [8666.667, 1, 0],
+ [8916.667, 2, 166.666672],
+ [9166.667, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [9500, 1, 0],
+ [9833.334, 1, 0],
+ [10000, 3, 0],
+ [10166.667, 1, 0],
+ [10333.334, 0, 0],
+ [10500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [10666.667, 1, 0],
+ [11000, 1, 0],
+ [11333.334, 1, 0],
+ [11583.334, 2, 166.666672],
+ [11833.334, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [12166.667, 1, 0],
+ [12500, 1, 0],
+ [12666.667, 3, 0],
+ [12833.334, 1, 0],
+ [13000, 2, 0],
+ [13166.667, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [13333.334, 2, 666.6667],
+ [14333.334, 1, 0],
+ [14500, 3, 500]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15166.667, 2, 250],
+ [15500, 0, 0],
+ [15833.334, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [16166.667, 0, 0],
+ [16333.334, 1, 250],
+ [16666.668, 2, 250],
+ [17000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [17333.334, 3, 0],
+ [17666.668, 0, 0],
+ [18000, 3, 0],
+ [18166.668, 2, 0],
+ [18333.334, 0, 0],
+ [18500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [18666.668, 2, 666.6667],
+ [19666.668, 1, 0],
+ [19833.334, 3, 500]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [20500, 2, 250],
+ [20833.334, 0, 0],
+ [21166.668, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [21500, 0, 0],
+ [21666.668, 1, 250],
+ [22000, 2, 250],
+ [22333.334, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [22666.668, 3, 0],
+ [23000, 0, 0],
+ [23333.334, 3, 0],
+ [23500, 2, 0],
+ [23666.668, 0, 0],
+ [23833.334, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [24000, 1, 0],
+ [24250, 3, 0],
+ [24500, 3, 0],
+ [24666.668, 1, 0],
+ [24916.668, 1, 0],
+ [25166.668, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [25500, 2, 0],
+ [25833.334, 1, 0],
+ [26000, 1, 0],
+ [26250, 1, 0],
+ [26500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26833.334, 0, 0],
+ [27000, 3, 0],
+ [27333.334, 1, 0],
+ [27583.334, 1, 0],
+ [27833.334, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [28166.668, 2, 0],
+ [28333.334, 3, 83.3333359],
+ [28500, 1, 0],
+ [28666.668, 0, 0],
+ [29000, 0, 0],
+ [29166.668, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [29333.334, 1, 0],
+ [29333.334, 6, 333.333344],
+ [29583.334, 3, 0],
+ [29833.334, 3, 0],
+ [30000, 1, 0],
+ [30250, 1, 0],
+ [30500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30833.334, 2, 0],
+ [31166.668, 1, 0],
+ [31333.334, 1, 0],
+ [31583.334, 1, 0],
+ [31833.334, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32166.668, 0, 0],
+ [32333.334, 3, 0],
+ [32666.668, 1, 0],
+ [32916.668, 1, 0],
+ [33166.668, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33500, 2, 0],
+ [33666.668, 3, 83.3333359],
+ [33833.3359, 1, 0],
+ [34000, 0, 0],
+ [34333.3359, 0, 0],
+ [34500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [34666.668, 2, 666.6667],
+ [35666.668, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [36000, 0, 166.666672],
+ [36333.3359, 1, 0],
+ [36666.668, 2, 166.666672],
+ [37000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [37333.3359, 2, 0],
+ [37500, 0, 0],
+ [37666.668, 3, 0],
+ [37833.3359, 0, 0],
+ [38000, 2, 0],
+ [38166.668, 3, 0],
+ [38333.3359, 0, 0],
+ [38500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [38666.668, 2, 0],
+ [38833.3359, 3, 0],
+ [39000, 2, 0],
+ [39166.668, 0, 0],
+ [39333.3359, 2, 250],
+ [39666.668, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [40000, 2, 666.6667],
+ [41000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [41333.3359, 0, 166.666672],
+ [41666.668, 1, 0],
+ [42000, 2, 166.666672],
+ [42333.3359, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [42666.668, 2, 0],
+ [42833.3359, 0, 0],
+ [43000, 3, 0],
+ [43166.668, 0, 0],
+ [43333.3359, 2, 0],
+ [43500, 3, 0],
+ [43666.668, 0, 0],
+ [43833.3359, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [44000, 2, 0],
+ [44166.668, 3, 0],
+ [44333.3359, 2, 0],
+ [44500, 0, 0],
+ [44666.668, 2, 250],
+ [45000, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [45333.3359, 2, 666.6667],
+ [46333.3359, 1, 0],
+ [46500, 3, 500]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [47166.668, 2, 250],
+ [47500, 0, 0],
+ [47833.3359, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48166.668, 0, 0],
+ [48333.3359, 1, 250],
+ [48666.668, 2, 250],
+ [49000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49333.3359, 3, 0],
+ [49666.668, 0, 0],
+ [50000, 3, 0],
+ [50166.668, 2, 0],
+ [50333.3359, 0, 0],
+ [50500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [50666.668, 2, 666.6667],
+ [51666.668, 1, 0],
+ [51833.3359, 3, 500]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [52500, 2, 250],
+ [52833.3359, 0, 0],
+ [53166.668, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [53500, 0, 0],
+ [53666.668, 1, 250],
+ [54000, 2, 250],
+ [54333.3359, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [54666.668, 3, 0],
+ [55000, 0, 0],
+ [55333.3359, 3, 0],
+ [55500, 2, 0],
+ [55666.668, 0, 0],
+ [55833.3359, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56000, 0, 0],
+ [56166.668, 1, 0],
+ [56333.3359, 3, 0],
+ [56500, 0, 0],
+ [56666.668, 1, 0],
+ [56833.3359, 3, 0],
+ [57000, 0, 0],
+ [57166.668, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [57333.3359, 0, 0],
+ [57500, 1, 0],
+ [57666.668, 3, 0],
+ [57833.3359, 0, 0],
+ [58000, 1, 0],
+ [58166.668, 3, 0],
+ [58333.3359, 0, 0],
+ [58500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [58666.668, 2, 0],
+ [58750, 3, 0],
+ [59000, 2, 0],
+ [59083.3359, 3, 0],
+ [59333.3359, 2, 0],
+ [59416.668, 3, 0],
+ [59666.668, 2, 0],
+ [59750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [60000, 2, 0],
+ [60083.3359, 3, 0],
+ [60333.3359, 2, 0],
+ [60416.668, 3, 0],
+ [60666.668, 2, 0],
+ [60750, 3, 0],
+ [61000, 2, 0],
+ [61083.3359, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61333.3359, 0, 0],
+ [61500, 1, 0],
+ [61666.668, 3, 0],
+ [61833.3359, 0, 0],
+ [62000, 1, 0],
+ [62166.668, 3, 0],
+ [62333.3359, 0, 0],
+ [62500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [62666.668, 0, 0],
+ [62833.3359, 1, 0],
+ [63000, 3, 0],
+ [63166.668, 0, 0],
+ [63333.3359, 1, 0],
+ [63500, 3, 0],
+ [63666.668, 0, 0],
+ [63833.3359, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [64000, 2, 0],
+ [64083.3359, 3, 0],
+ [64333.3359, 2, 0],
+ [64416.668, 3, 0],
+ [64666.668, 2, 0],
+ [64750.0039, 3, 0],
+ [65000.0039, 2, 0],
+ [65083.3359, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65333.3359, 2, 0],
+ [65416.668, 3, 0],
+ [65666.67, 2, 0],
+ [65750, 3, 0],
+ [66000, 2, 0],
+ [66083.3359, 3, 0],
+ [66333.3359, 2, 0],
+ [66416.67, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [66666.67, 1, 0],
+ [66916.67, 3, 0],
+ [67166.67, 3, 0],
+ [67333.3359, 1, 0],
+ [67583.3359, 1, 0],
+ [67833.3359, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [68166.67, 2, 0],
+ [68500, 1, 0],
+ [68666.67, 1, 0],
+ [68916.67, 1, 0],
+ [69166.67, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [69500, 0, 0],
+ [69666.67, 3, 0],
+ [70000, 1, 0],
+ [70250, 1, 0],
+ [70500, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [70833.3359, 2, 0],
+ [71000, 3, 83.3333359],
+ [71166.67, 1, 0],
+ [71333.3359, 0, 0],
+ [71666.67, 0, 0],
+ [71833.3359, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72000, 6, 333.333344],
+ [72000, 1, 0],
+ [72250, 3, 0],
+ [72500, 3, 0],
+ [72666.67, 1, 0],
+ [72916.67, 1, 0],
+ [73166.67, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [73500, 2, 0],
+ [73833.3359, 1, 0],
+ [74000, 1, 0],
+ [74250, 1, 0],
+ [74500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [74833.3359, 0, 0],
+ [75000, 3, 0],
+ [75333.3359, 1, 0],
+ [75583.3359, 1, 0],
+ [75833.3359, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [76166.67, 2, 0],
+ [76333.3359, 3, 83.3333359],
+ [76500, 1, 0],
+ [76666.67, 0, 0],
+ [77000, 0, 0],
+ [77166.67, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [77333.3359, 6, 666.6667],
+ [77333.3359, 2, 666.6667],
+ [78333.3359, 4, 0],
+ [78333.3359, 1, 0],
+ [78500, 6, 0],
+ [78500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [78666.67, 6, 166.666672],
+ [78666.67, 0, 166.666672],
+ [79000, 7, 0],
+ [79000, 1, 0],
+ [79333.3359, 2, 166.666672],
+ [79333.3359, 5, 166.666672],
+ [79666.67, 7, 0],
+ [79666.67, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [80000, 6, 0],
+ [80000, 2, 0],
+ [80333.3359, 7, 0],
+ [80333.3359, 3, 0],
+ [80500, 4, 0],
+ [80500, 0, 0],
+ [80833.3359, 7, 0],
+ [80833.3359, 3, 0],
+ [81000, 4, 0],
+ [81000, 0, 0],
+ [81166.67, 7, 0],
+ [81166.67, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [81333.3359, 6, 0],
+ [81333.3359, 2, 0],
+ [81666.67, 6, 0],
+ [81666.67, 2, 0],
+ [81833.3359, 4, 0],
+ [81833.3359, 0, 0],
+ [82000, 6, 250],
+ [82000, 2, 250],
+ [82333.3359, 5, 250],
+ [82333.3359, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [82666.67, 6, 666.6667],
+ [82666.67, 0, 250],
+ [83000, 1, 250],
+ [83333.3359, 3, 250],
+ [83666.67, 1, 250],
+ [83666.67, 5, 0],
+ [83833.3359, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [84000, 2, 250],
+ [84000, 4, 166.666672],
+ [84333.3359, 1, 250],
+ [84333.3359, 5, 0],
+ [84666.67, 6, 166.666672],
+ [84666.67, 3, 250],
+ [85000, 4, 0],
+ [85000, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [85333.3359, 6, 0],
+ [85333.3359, 1, 250],
+ [85666.67, 7, 0],
+ [85666.67, 3, 250],
+ [85833.3359, 4, 0],
+ [86000, 0, 250],
+ [86166.67, 7, 0],
+ [86333.3359, 4, 0],
+ [86333.3359, 3, 250],
+ [86500, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [86666.67, 2, 0],
+ [86666.67, 6, 250],
+ [87000, 2, 0],
+ [87000, 7, 250],
+ [87166.67, 0, 0],
+ [87333.3359, 2, 250],
+ [87333.3359, 6, 250],
+ [87666.67, 1, 250],
+ [87666.67, 5, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [88000, 1, 0],
+ [88000, 5, 0],
+ [88333.3359, 1, 0],
+ [88666.67, 1, 0],
+ [89000, 2, 0],
+ [89166.67, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [89500, 1, 0],
+ [89833.3359, 1, 0],
+ [90166.67, 3, 0],
+ [90333.3359, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [90666.67, 1, 0],
+ [91000, 1, 0],
+ [91333.3359, 1, 0],
+ [91666.67, 2, 0],
+ [91833.3359, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [92166.67, 1, 0],
+ [92500, 1, 0],
+ [92666.67, 3, 0],
+ [92833.3359, 1, 0],
+ [93000, 3, 0],
+ [93166.67, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [93333.3359, 5, 0],
+ [93333.3359, 1, 0],
+ [93666.67, 5, 0],
+ [93666.67, 1, 0],
+ [94000, 5, 0],
+ [94000, 1, 0],
+ [94333.3359, 6, 0],
+ [94333.3359, 2, 0],
+ [94500, 5, 0],
+ [94500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [94833.3359, 5, 0],
+ [94833.3359, 1, 0],
+ [95166.67, 5, 0],
+ [95166.67, 1, 0],
+ [95500, 7, 0],
+ [95500, 3, 0],
+ [95666.67, 6, 250],
+ [95666.67, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [96000, 5, 0],
+ [96000, 1, 0],
+ [96333.3359, 5, 0],
+ [96333.3359, 1, 0],
+ [96666.67, 5, 0],
+ [96666.67, 1, 0],
+ [97000, 6, 0],
+ [97000, 2, 0],
+ [97166.67, 5, 0],
+ [97166.67, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [97500, 5, 0],
+ [97500, 1, 0],
+ [97833.3359, 5, 0],
+ [97833.3359, 1, 0],
+ [98000, 7, 0],
+ [98000, 3, 0],
+ [98166.67, 5, 0],
+ [98166.67, 1, 0],
+ [98333.3359, 7, 0],
+ [98333.3359, 3, 0],
+ [98500, 4, 0],
+ [98500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [98666.67, 2, 666.6667],
+ [98666.67, 6, 666.6667],
+ [99666.67, 1, 0],
+ [99833.3359, 3, 500]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [100500, 2, 250],
+ [100833.336, 0, 0],
+ [101166.672, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [101500, 0, 0],
+ [101666.672, 1, 250],
+ [102000, 2, 250],
+ [102333.336, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [102666.672, 3, 0],
+ [103000, 0, 0],
+ [103333.336, 3, 0],
+ [103500, 2, 0],
+ [103666.672, 0, 0],
+ [103833.336, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [104000, 6, 666.6667],
+ [104000, 2, 666.6667],
+ [105000, 1, 0],
+ [105166.672, 3, 500]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [105833.336, 2, 250],
+ [106166.672, 0, 0],
+ [106500, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [106833.336, 0, 0],
+ [107000, 1, 250],
+ [107333.336, 2, 250],
+ [107666.672, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [108000, 3, 0],
+ [108333.336, 0, 0],
+ [108666.672, 3, 0],
+ [108833.336, 2, 0],
+ [109000, 0, 0],
+ [109166.672, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [109333.336, 1, 0],
+ [109583.336, 3, 0],
+ [109833.336, 3, 0],
+ [110000, 1, 0],
+ [110250, 1, 0],
+ [110500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [110833.336, 2, 0],
+ [111166.672, 1, 0],
+ [111333.336, 1, 0],
+ [111583.336, 1, 0],
+ [111833.336, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [112166.672, 0, 0],
+ [112333.336, 3, 0],
+ [112666.672, 1, 0],
+ [112916.672, 1, 0],
+ [113166.672, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [113500, 2, 0],
+ [113666.672, 3, 83.3333359],
+ [113833.336, 1, 0],
+ [114000, 0, 0],
+ [114333.336, 0, 0],
+ [114500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [114666.672, 6, 333.333344],
+ [114666.672, 1, 0],
+ [114916.672, 3, 0],
+ [115166.672, 3, 0],
+ [115333.336, 1, 0],
+ [115583.336, 1, 0],
+ [115833.336, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [116166.672, 2, 0],
+ [116500, 1, 0],
+ [116666.672, 1, 0],
+ [116916.672, 1, 0],
+ [117166.672, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [117500, 0, 0],
+ [117666.672, 3, 0],
+ [118000, 1, 0],
+ [118250, 1, 0],
+ [118500, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [118833.336, 2, 0],
+ [119000, 3, 83.3333359],
+ [119166.672, 1, 0],
+ [119333.336, 0, 0],
+ [119666.672, 0, 0],
+ [119833.336, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[120000, 2, 833.3334]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 180,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "mom-car",
+ "song": "M.I.L.F",
+ "stage": "limo",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 180,
+ "speed": 1.7
+ }
+}
diff --git a/assets/preload/data/songs/monster/_meta.json b/assets/preload/data/songs/monster/_meta.json
new file mode 100644
index 0000000000..4c2eee6beb
--- /dev/null
+++ b/assets/preload/data/songs/monster/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/songs/monster/monster-easy.json b/assets/preload/data/songs/monster/monster-easy.json
new file mode 100644
index 0000000000..a12c61f9f3
--- /dev/null
+++ b/assets/preload/data/songs/monster/monster-easy.json
@@ -0,0 +1,833 @@
+{
+ "song": {
+ "player1": "bf",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [2526.31567, 2, 789.473633],
+ [3473.684, 3, 157.89473],
+ [3789.47363, 2, 789.473633],
+ [4736.842, 3, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [[5052.63135, 1, 1105.26306]],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [7578.94727, 4, 1105.26306],
+ [7578.94727, 2, 789.473633],
+ [8526.315, 3, 0],
+ [8842.10449, 6, 1105.26306],
+ [8842.10449, 2, 789.473633],
+ [9789.474, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [10105.2627, 5, 1105.26306],
+ [10105.2627, 1, 1105.26306]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [13263.1572, 2, 0],
+ [13578.9463, 1, 0],
+ [13894.7363, 3, 315.789459],
+ [14526.3154, 1, 315.789459]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15157.8945, 3, 0],
+ [15473.6836, 0, 0],
+ [15789.4727, 3, 0],
+ [16105.2627, 1, 0],
+ [16421.0527, 2, 473.6842],
+ [17052.63, 0, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [18315.79, 2, 0],
+ [18631.5781, 1, 0],
+ [18947.3672, 3, 315.789459],
+ [19578.9473, 1, 315.789459]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [20210.5254, 3, 0],
+ [20526.3145, 0, 0],
+ [20842.1035, 3, 0],
+ [21157.8945, 1, 0],
+ [21473.6836, 2, 473.6842],
+ [22105.2617, 0, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [23368.42, 3, 0],
+ [23684.209, 2, 0],
+ [23999.998, 0, 473.6842],
+ [24631.5781, 2, 0],
+ [24947.3672, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [25263.1563, 0, 473.6842],
+ [25894.7363, 2, 473.6842],
+ [26526.3145, 3, 1105.26306]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [28421.05, 3, 0],
+ [28736.84, 2, 0],
+ [29052.63, 0, 473.6842],
+ [29684.209, 2, 0],
+ [29999.998, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30315.79, 0, 473.6842],
+ [30947.3672, 2, 473.6842],
+ [31578.9453, 3, 1105.26306]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32842.1055, 2, 631.5789],
+ [33789.4727, 0, 0],
+ [34105.26, 2, 0],
+ [34736.84, 2, 0],
+ [35052.63, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [35368.418, 3, 0],
+ [35683.38, 0, 0],
+ [35998.34, 2, 0],
+ [36313.3, 3, 590.5512]
+ ],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": false,
+ "bpm": 127
+ },
+ {
+ "sectionNotes": [
+ [37258.1836, 2, 472.440948],
+ [38205.55, 0, 0],
+ [38521.34, 2, 0],
+ [39152.92, 2, 0],
+ [39468.71, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": true,
+ "bpm": 95
+ },
+ {
+ "sectionNotes": [
+ [39784.5, 3, 0],
+ [40099.46, 0, 0],
+ [40414.42, 2, 0],
+ [40729.3828, 3, 590.5512]
+ ],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": true,
+ "bpm": 127
+ },
+ {
+ "sectionNotes": [],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": true,
+ "bpm": 100
+ },
+ {
+ "sectionNotes": [
+ [44359.98, 3, 0],
+ [44645.6953, 0, 0],
+ [44931.41, 1, 0],
+ [45217.12, 2, 0],
+ [45502.8359, 3, 0],
+ [45788.55, 0, 0],
+ [46074.2656, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": false,
+ "bpm": 105
+ },
+ {
+ "sectionNotes": [
+ [46359.98, 0, 428.571442],
+ [46931.41, 1, 857.1429]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48931.41, 3, 0],
+ [49217.12, 0, 0],
+ [49502.8359, 1, 0],
+ [49788.55, 2, 0],
+ [50074.2656, 3, 0],
+ [50359.98, 0, 0],
+ [50645.6953, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [50931.41, 0, 428.571442],
+ [51502.8359, 1, 857.1429]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [53502.8359, 2, 0],
+ [53788.55, 3, 0],
+ [54074.2656, 0, 0],
+ [54359.98, 3, 0],
+ [54645.6953, 3, 0],
+ [54931.41, 1, 0],
+ [55217.125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [55502.8359, 2, 857.1429],
+ [56645.6953, 3, 0],
+ [56931.41, 3, 0],
+ [57502.8359, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [58074.2656, 2, 0],
+ [58359.98, 3, 0],
+ [58645.6953, 0, 0],
+ [58931.41, 3, 0],
+ [59217.125, 3, 0],
+ [59502.8359, 1, 0],
+ [59788.55, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [60074.2656, 2, 857.1429],
+ [61217.125, 3, 0],
+ [61502.8359, 3, 0],
+ [62074.2656, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [62359.98, 3, 0],
+ [62645.6953, 3, 0],
+ [62931.41, 1, 0],
+ [63217.125, 1, 0],
+ [63502.8359, 2, 0],
+ [63788.55, 0, 0],
+ [64074.2656, 0, 0],
+ [64217.125, 1, 0],
+ [64359.98, 2, 285.7143]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [64931.41, 3, 285.7143],
+ [65502.8359, 2, 285.7143],
+ [66074.2656, 3, 0],
+ [66359.9844, 2, 285.7143]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [66931.41, 3, 0],
+ [67217.125, 3, 0],
+ [67502.8359, 1, 0],
+ [67788.5547, 1, 0],
+ [68074.2656, 2, 0],
+ [68359.9844, 0, 0],
+ [68645.6953, 0, 0],
+ [68788.5547, 1, 0],
+ [68931.41, 2, 285.7143]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [69502.8359, 3, 285.7143],
+ [70074.2656, 2, 285.7143],
+ [70645.6953, 3, 0],
+ [70931.41, 2, 285.7143]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [71502.8359, 2, 1000],
+ [72645.6953, 1, 1000]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [73788.5547, 3, 0],
+ [74074.2656, 0, 0],
+ [74359.9844, 3, 0],
+ [74645.6953, 0, 0],
+ [74931.41, 2, 0],
+ [75217.125, 2, 0],
+ [75502.8359, 2, 0],
+ [75788.5547, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [76074.2656, 2, 1000],
+ [77217.125, 1, 1000]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78359.9844, 3, 0],
+ [78645.6953, 0, 0],
+ [78931.41, 3, 0],
+ [79217.125, 0, 0],
+ [79502.8359, 2, 0],
+ [79788.5547, 2, 0],
+ [80074.2656, 2, 0],
+ [80359.9844, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": true,
+ "bpm": 216
+ },
+ {
+ "sectionNotes": [
+ [82072.59, 3, 473.6842],
+ [82704.17, 0, 473.6842],
+ [83335.75, 1, 0],
+ [83651.54, 2, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": false,
+ "bpm": 95
+ },
+ {
+ "sectionNotes": [
+ [84283.12, 3, 473.6842],
+ [84914.7, 0, 473.6842],
+ [85546.28, 1, 0],
+ [85862.07, 2, 473.6842],
+ [86493.65, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [86809.44, 1, 0],
+ [87125.23, 2, 0],
+ [87756.8047, 3, 0],
+ [88072.59, 1, 473.6842],
+ [88704.17, 7, 0],
+ [89019.96, 5, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [89335.75, 6, 0],
+ [89651.54, 4, 157.89473],
+ [89967.33, 7, 0],
+ [90283.12, 5, 473.6842],
+ [90598.91, 2, 0],
+ [90914.6953, 1, 0],
+ [91230.49, 3, 0],
+ [91546.28, 2, 315.789459]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [92177.86, 2, 0],
+ [92493.65, 1, 0],
+ [92809.44, 3, 0],
+ [93125.23, 2, 315.789459],
+ [94072.59, 6, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [94546.28, 7, 0],
+ [94704.17, 5, 0],
+ [95019.96, 5, 0],
+ [95651.54, 2, 0],
+ [96125.23, 3, 0],
+ [96283.12, 1, 0],
+ [96598.91, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [97230.4844, 2, 0],
+ [97546.28, 2, 0],
+ [97862.07, 3, 473.6842],
+ [98493.65, 1, 0],
+ [98809.44, 3, 315.789459]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [99441.0156, 2, 0],
+ [99756.8047, 2, 0],
+ [100072.594, 3, 473.6842],
+ [100704.172, 1, 0],
+ [101019.961, 3, 315.789459],
+ [101335.75, 4, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [101967.328, 1, 0],
+ [102283.117, 0, 0],
+ [102598.906, 2, 0],
+ [102914.695, 0, 0],
+ [103230.484, 0, 0],
+ [103546.281, 4, 473.6842],
+ [104177.859, 5, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [104493.648, 4, 0],
+ [104809.438, 6, 0],
+ [105125.227, 4, 0],
+ [105441.016, 4, 0],
+ [105756.805, 3, 473.6842],
+ [106388.383, 1, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [107019.961, 0, 0],
+ [107335.75, 3, 0],
+ [107651.539, 0, 0],
+ [107967.328, 3, 0],
+ [108283.117, 1, 473.6842],
+ [108914.695, 7, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [109546.273, 1, 473.6842],
+ [110177.859, 0, 0],
+ [110493.648, 3, 0],
+ [110809.438, 0, 0],
+ [111125.227, 3, 0],
+ [111441.016, 1, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [117352.5, 2, 0],
+ [117579.773, 2, 0],
+ [117807.047, 2, 0],
+ [118034.32, 2, 0],
+ [118261.594, 0, 227.272736],
+ [118716.133, 1, 454.545471]
+ ],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": false,
+ "bpm": 132
+ },
+ {
+ "sectionNotes": [[120534.32, 2, 0]],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [120761.594, 3, 795.4545],
+ [121670.68, 3, 340.9091],
+ [122125.227, 0, 0],
+ [122352.5, 2, 340.9091]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [[122807.047, 1, 681.8182]],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [124625.227, 2, 0],
+ [124852.5, 2, 0],
+ [125079.773, 2, 0],
+ [125307.047, 2, 0],
+ [125534.32, 0, 227.272736],
+ [125988.859, 1, 454.545471]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[127807.047, 2, 0]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [128034.32, 3, 795.4545],
+ [128943.406, 3, 340.9091],
+ [129397.953, 0, 0],
+ [129625.227, 2, 340.9091]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[130079.773, 1, 681.8182]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": true,
+ "bpm": 120
+ },
+ {
+ "sectionNotes": [
+ [133920.688, 2, 0],
+ [134170.688, 0, 0],
+ [134420.688, 1, 0],
+ [134670.688, 2, 0],
+ [134920.688, 3, 0],
+ [135170.688, 0, 0],
+ [135420.688, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [135670.688, 0, 375],
+ [136170.688, 3, 750]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [137920.688, 2, 0],
+ [138170.688, 0, 0],
+ [138420.688, 1, 0],
+ [138670.688, 2, 0],
+ [138920.688, 3, 0],
+ [139170.688, 0, 0],
+ [139420.688, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [139670.688, 0, 375],
+ [140170.688, 3, 750]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [141920.688, 3, 0],
+ [142170.688, 1, 0],
+ [142420.688, 0, 0],
+ [142670.688, 2, 0],
+ [142920.688, 3, 0],
+ [143170.688, 0, 0],
+ [143420.688, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [143670.688, 3, 500],
+ [144670.688, 2, 0],
+ [144920.688, 2, 0],
+ [145420.688, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [145920.688, 3, 0],
+ [146170.688, 1, 0],
+ [146420.688, 0, 0],
+ [146670.688, 2, 0],
+ [146920.688, 3, 0],
+ [147170.688, 0, 0],
+ [147420.688, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [147670.688, 3, 500],
+ [148670.688, 2, 0],
+ [148920.688, 2, 0],
+ [149420.688, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [149670.688, 3, 0],
+ [149920.688, 3, 0],
+ [150170.688, 1, 0],
+ [150420.688, 1, 0],
+ [150670.688, 2, 0],
+ [150920.688, 0, 0],
+ [151170.688, 0, 0],
+ [151420.688, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [151920.688, 3, 250],
+ [152420.688, 0, 250],
+ [152920.688, 3, 0],
+ [153170.688, 0, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [153670.688, 3, 0],
+ [153920.688, 3, 0],
+ [154170.688, 1, 0],
+ [154420.688, 1, 0],
+ [154670.688, 2, 0],
+ [154920.688, 0, 0],
+ [155170.688, 0, 0],
+ [155420.688, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [155920.688, 3, 250],
+ [156420.688, 0, 250],
+ [156920.688, 3, 0],
+ [157170.688, 0, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [157670.688, 2, 875],
+ [158670.688, 1, 875]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [159670.688, 3, 0],
+ [159920.688, 0, 0],
+ [160170.688, 3, 0],
+ [160420.688, 0, 0],
+ [160670.688, 3, 0],
+ [160920.688, 3, 0],
+ [161170.688, 3, 0],
+ [161420.688, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [161670.688, 2, 875],
+ [162670.688, 1, 875]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [163670.688, 3, 0],
+ [163920.688, 0, 0],
+ [164170.688, 3, 0],
+ [164420.688, 0, 0],
+ [164670.688, 3, 0],
+ [164920.688, 3, 0],
+ [165170.688, 3, 0],
+ [165420.688, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [165920.688, 1, 0],
+ [166170.688, 0, 0],
+ [166420.688, 2, 0],
+ [166670.688, 1, 0],
+ [166920.688, 0, 0],
+ [167170.688, 3, 0],
+ [167420.688, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [167670.688, 3, 0],
+ [167920.688, 1, 500]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [169920.688, 1, 0],
+ [170170.688, 0, 0],
+ [170420.688, 2, 0],
+ [170670.688, 1, 0],
+ [170920.688, 0, 0],
+ [171170.688, 3, 0],
+ [171420.688, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [171670.688, 3, 0],
+ [171920.688, 1, 500]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 95,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "monster",
+ "song": "Monster",
+ "stage": "halloween",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 95,
+ "speed": 1.3
+ }
+}
diff --git a/assets/preload/data/songs/monster/monster-hard.json b/assets/preload/data/songs/monster/monster-hard.json
new file mode 100644
index 0000000000..cb5dfbedd7
--- /dev/null
+++ b/assets/preload/data/songs/monster/monster-hard.json
@@ -0,0 +1,920 @@
+{
+ "song": {
+ "player1": "bf",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [2526.31567, 2, 789.473633],
+ [3473.684, 3, 157.89473],
+ [3789.47363, 2, 789.473633],
+ [4736.842, 3, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [[5052.63135, 1, 1105.26306]],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [7578.94727, 4, 1105.26306],
+ [7578.94727, 2, 789.473633],
+ [8526.315, 3, 157.89473],
+ [8842.10449, 6, 1105.26306],
+ [8842.10449, 2, 789.473633],
+ [9789.474, 3, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [10105.2627, 5, 1105.26306],
+ [10105.2627, 1, 1105.26306]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [13263.1572, 2, 0],
+ [13578.9463, 1, 0],
+ [13894.7363, 3, 315.789459],
+ [14526.3154, 1, 157.89473],
+ [14842.1045, 0, 0],
+ [14999.999, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15157.8945, 3, 0],
+ [15473.6836, 0, 0],
+ [15789.4727, 3, 0],
+ [16105.2627, 1, 0],
+ [16421.0527, 2, 473.6842],
+ [17052.63, 0, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [18315.79, 2, 0],
+ [18631.5781, 1, 0],
+ [18947.3672, 3, 315.789459],
+ [19578.9473, 1, 157.89473],
+ [19894.7363, 0, 0],
+ [20052.63, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [20210.5254, 3, 0],
+ [20526.3145, 0, 0],
+ [20842.1035, 3, 0],
+ [21157.8945, 1, 0],
+ [21473.6836, 2, 473.6842],
+ [22105.2617, 0, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [23368.42, 3, 0],
+ [23684.209, 2, 0],
+ [23999.998, 0, 473.6842],
+ [24631.5781, 2, 157.89473],
+ [24947.3672, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [25263.1563, 0, 473.6842],
+ [25894.7363, 2, 473.6842],
+ [26526.3145, 3, 1105.26306]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [28421.05, 3, 0],
+ [28736.84, 2, 0],
+ [29052.63, 0, 473.6842],
+ [29684.209, 2, 157.89473],
+ [29999.998, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30315.79, 0, 473.6842],
+ [30947.3672, 2, 473.6842],
+ [31578.9453, 3, 1105.26306]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32842.1055, 2, 631.5789],
+ [33789.4727, 2, 0],
+ [33789.4727, 0, 0],
+ [34105.26, 2, 157.89473],
+ [34421.05, 1, 157.89473],
+ [34736.84, 2, 157.89473],
+ [35052.63, 0, 0],
+ [35052.63, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [35368.418, 3, 0],
+ [35368.418, 0, 0],
+ [35683.38, 0, 118.110237],
+ [35998.34, 2, 0],
+ [36313.3, 3, 590.5512]
+ ],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": false,
+ "bpm": 127
+ },
+ {
+ "sectionNotes": [
+ [37258.1836, 2, 631.5789],
+ [38205.55, 0, 0],
+ [38205.55, 2, 0],
+ [38521.34, 2, 157.89473],
+ [38837.1328, 1, 157.89473],
+ [39152.92, 2, 157.89473],
+ [39468.71, 3, 0],
+ [39468.71, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": true,
+ "bpm": 95
+ },
+ {
+ "sectionNotes": [
+ [39784.5, 3, 0],
+ [39784.5, 0, 0],
+ [40099.46, 0, 118.110237],
+ [40414.42, 2, 0],
+ [40729.3828, 3, 590.5512]
+ ],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": true,
+ "bpm": 127
+ },
+ {
+ "sectionNotes": [],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": true,
+ "bpm": 100
+ },
+ {
+ "sectionNotes": [
+ [44359.98, 3, 0],
+ [44502.8359, 0, 0],
+ [44502.8359, 1, 0],
+ [44931.41, 1, 0],
+ [45217.12, 3, 0],
+ [45217.12, 2, 0],
+ [45502.8359, 3, 0],
+ [45788.55, 0, 0],
+ [46074.2656, 2, 0],
+ [46074.2656, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": false,
+ "bpm": 105
+ },
+ {
+ "sectionNotes": [
+ [46359.98, 0, 428.571442],
+ [46931.41, 1, 857.1429]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48931.41, 3, 0],
+ [49074.2656, 0, 0],
+ [49074.2656, 1, 0],
+ [49502.8359, 1, 0],
+ [49788.55, 3, 0],
+ [49788.55, 2, 0],
+ [50074.2656, 3, 0],
+ [50359.98, 0, 0],
+ [50645.6953, 2, 0],
+ [50645.6953, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [50931.41, 0, 428.571442],
+ [51502.8359, 1, 857.1429]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [53502.8359, 2, 148.809525],
+ [53788.55, 3, 148.809525],
+ [54074.2656, 0, 148.809525],
+ [54359.98, 3, 148.809525],
+ [54645.6953, 1, 0],
+ [54645.6953, 3, 0],
+ [54931.41, 1, 0],
+ [55217.125, 0, 148.809525]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [55502.8359, 2, 857.1429],
+ [55502.8359, 0, 857.1429],
+ [56645.6953, 3, 0],
+ [56788.55, 2, 0],
+ [56931.41, 3, 0],
+ [57359.98, 1, 0],
+ [57502.8359, 3, 0],
+ [57502.8359, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [58074.2656, 2, 148.809525],
+ [58359.98, 3, 148.809525],
+ [58645.6953, 0, 148.809525],
+ [58931.41, 3, 148.809525],
+ [59217.125, 1, 0],
+ [59217.125, 3, 0],
+ [59502.8359, 1, 0],
+ [59788.55, 0, 148.809525]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [60074.2656, 2, 857.1429],
+ [60074.2656, 0, 857.1429],
+ [61217.125, 3, 0],
+ [61359.98, 2, 0],
+ [61502.8359, 3, 0],
+ [61931.41, 1, 0],
+ [62074.2656, 3, 0],
+ [62074.2656, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [62359.98, 3, 0],
+ [62502.8359, 2, 0],
+ [62645.6953, 3, 0],
+ [62931.41, 1, 0],
+ [63074.2656, 2, 0],
+ [63217.125, 1, 0],
+ [63502.8359, 2, 0],
+ [63645.6953, 1, 0],
+ [63788.55, 0, 0],
+ [63931.41, 1, 0],
+ [64074.2656, 3, 0],
+ [64217.125, 1, 0],
+ [64359.98, 0, 285.7143]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [64931.41, 0, 285.7143],
+ [64931.41, 3, 285.7143],
+ [65502.8359, 2, 285.7143],
+ [66074.2656, 0, 0],
+ [66074.2656, 3, 0],
+ [66359.9844, 2, 285.7143]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [66931.41, 3, 0],
+ [67074.2656, 2, 0],
+ [67217.125, 3, 0],
+ [67502.8359, 1, 0],
+ [67645.6953, 2, 0],
+ [67788.5547, 1, 0],
+ [68074.2656, 2, 0],
+ [68217.125, 1, 0],
+ [68359.9844, 0, 0],
+ [68502.8359, 1, 0],
+ [68645.6953, 3, 0],
+ [68788.5547, 1, 0],
+ [68931.41, 0, 285.7143]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [69502.8359, 0, 285.7143],
+ [69502.8359, 3, 285.7143],
+ [70074.2656, 2, 285.7143],
+ [70645.6953, 0, 0],
+ [70645.6953, 3, 0],
+ [70931.41, 2, 285.7143]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [71502.8359, 2, 1000],
+ [72645.6953, 1, 1000]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [73788.5547, 3, 0],
+ [73931.41, 1, 0],
+ [74074.2656, 0, 0],
+ [74217.125, 1, 0],
+ [74359.9844, 3, 0],
+ [74502.8359, 1, 0],
+ [74645.6953, 0, 0],
+ [74788.5547, 1, 0],
+ [74931.41, 2, 0],
+ [75217.125, 2, 0],
+ [75502.8359, 2, 0],
+ [75788.5547, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [76074.2656, 2, 1000],
+ [77217.125, 1, 1000]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78359.9844, 3, 0],
+ [78502.8359, 1, 0],
+ [78645.6953, 0, 0],
+ [78788.5547, 1, 0],
+ [78931.41, 3, 0],
+ [79074.2656, 1, 0],
+ [79217.125, 0, 0],
+ [79359.9844, 1, 0],
+ [79502.8359, 2, 0],
+ [79788.5547, 2, 0],
+ [80074.2656, 2, 0],
+ [80359.9844, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": true,
+ "bpm": 216
+ },
+ {
+ "sectionNotes": [
+ [82072.59, 3, 473.6842],
+ [82704.17, 0, 473.6842],
+ [83335.75, 1, 0],
+ [83651.54, 2, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": false,
+ "bpm": 95
+ },
+ {
+ "sectionNotes": [
+ [84283.12, 3, 473.6842],
+ [84914.7, 0, 473.6842],
+ [85546.28, 1, 0],
+ [85862.07, 2, 473.6842],
+ [86493.65, 7, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [86809.44, 1, 157.89473],
+ [87125.23, 2, 157.89473],
+ [87441.0156, 0, 157.89473],
+ [87756.8047, 3, 157.89473],
+ [88072.59, 1, 473.6842],
+ [88704.17, 7, 157.89473],
+ [89019.96, 5, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [89335.75, 6, 157.89473],
+ [89651.54, 4, 157.89473],
+ [89967.33, 7, 157.89473],
+ [90283.12, 5, 473.6842],
+ [90598.91, 2, 157.89473],
+ [90914.6953, 0, 0],
+ [91072.59, 1, 0],
+ [91230.49, 3, 157.89473],
+ [91546.28, 2, 315.789459]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [92177.86, 2, 157.89473],
+ [92493.65, 0, 0],
+ [92651.54, 1, 0],
+ [92809.44, 3, 157.89473],
+ [93125.23, 2, 315.789459],
+ [94072.59, 6, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [94546.28, 7, 0],
+ [94704.17, 5, 157.89473],
+ [95019.96, 5, 0],
+ [95651.54, 2, 157.89473],
+ [96125.23, 3, 0],
+ [96283.12, 1, 157.89473],
+ [96598.91, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [97230.4844, 2, 0],
+ [97388.38, 0, 0],
+ [97546.28, 2, 157.89473],
+ [97862.07, 3, 473.6842],
+ [98493.65, 1, 157.89473],
+ [98809.44, 3, 315.789459]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [99441.0156, 2, 0],
+ [99598.91, 0, 0],
+ [99756.8047, 2, 157.89473],
+ [100072.594, 3, 473.6842],
+ [100704.172, 1, 157.89473],
+ [101019.961, 3, 315.789459],
+ [101335.75, 4, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [101967.328, 1, 0],
+ [102125.227, 3, 0],
+ [102283.117, 0, 0],
+ [102598.906, 2, 0],
+ [102914.695, 0, 0],
+ [103230.484, 0, 0],
+ [103546.281, 4, 473.6842],
+ [104177.859, 5, 0],
+ [104335.75, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [104493.648, 4, 0],
+ [104809.438, 6, 0],
+ [105125.227, 4, 0],
+ [105441.016, 4, 0],
+ [105756.805, 3, 473.6842],
+ [106388.383, 1, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [107019.961, 0, 0],
+ [107335.75, 3, 157.89473],
+ [107651.539, 0, 157.89473],
+ [107967.328, 3, 0],
+ [108283.117, 1, 473.6842],
+ [108914.695, 7, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [109546.273, 1, 473.6842],
+ [110177.859, 0, 0],
+ [110493.648, 3, 157.89473],
+ [110809.438, 0, 157.89473],
+ [111125.227, 3, 0],
+ [111441.016, 1, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [117352.5, 2, 0],
+ [117579.773, 2, 0],
+ [117807.047, 2, 0],
+ [118034.32, 2, 0],
+ [118261.594, 0, 0],
+ [118488.859, 0, 113.636368],
+ [118716.133, 1, 454.545471]
+ ],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": false,
+ "bpm": 132
+ },
+ {
+ "sectionNotes": [[120534.32, 2, 0]],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [120761.594, 3, 795.4545],
+ [121670.68, 3, 340.9091],
+ [122125.227, 0, 0],
+ [122352.5, 2, 340.9091]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [[122807.047, 1, 681.8182]],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [124625.227, 2, 0],
+ [124852.5, 2, 0],
+ [125079.773, 2, 0],
+ [125307.047, 2, 0],
+ [125534.32, 0, 0],
+ [125761.594, 0, 113.636368],
+ [125988.859, 1, 454.545471]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[127807.047, 2, 0]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [128034.32, 3, 795.4545],
+ [128943.406, 3, 340.9091],
+ [129397.953, 0, 0],
+ [129625.227, 2, 340.9091]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[130079.773, 1, 681.8182]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": true,
+ "bpm": 120
+ },
+ {
+ "sectionNotes": [
+ [133920.688, 2, 0],
+ [134045.688, 3, 250],
+ [134045.688, 0, 250],
+ [134420.688, 1, 0],
+ [134670.688, 3, 0],
+ [134670.688, 2, 0],
+ [134920.688, 3, 0],
+ [135170.688, 0, 0],
+ [135420.688, 3, 0],
+ [135420.688, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [135670.688, 0, 375],
+ [136170.688, 3, 750]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [137920.688, 2, 0],
+ [138045.688, 3, 250],
+ [138045.688, 0, 250],
+ [138420.688, 1, 0],
+ [138670.688, 3, 0],
+ [138670.688, 2, 0],
+ [138920.688, 3, 0],
+ [139170.688, 0, 0],
+ [139420.688, 3, 0],
+ [139420.688, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [139670.688, 0, 375],
+ [140170.688, 3, 750]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [141920.688, 3, 125],
+ [142170.688, 1, 125],
+ [142420.688, 0, 125],
+ [142670.688, 2, 125],
+ [142920.688, 3, 125],
+ [143170.688, 0, 125],
+ [143420.688, 2, 125]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [143670.688, 3, 500],
+ [144670.688, 2, 0],
+ [144795.688, 0, 0],
+ [144920.688, 2, 0],
+ [145295.688, 3, 0],
+ [145420.688, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [145920.688, 3, 125],
+ [146170.688, 1, 125],
+ [146420.688, 0, 125],
+ [146670.688, 2, 125],
+ [146920.688, 3, 125],
+ [147170.688, 0, 125],
+ [147420.688, 2, 125]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [147670.688, 3, 500],
+ [148670.688, 2, 0],
+ [148795.688, 0, 0],
+ [148920.688, 2, 0],
+ [149295.688, 3, 0],
+ [149420.688, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [149670.688, 3, 0],
+ [149795.688, 2, 0],
+ [149920.688, 3, 0],
+ [150170.688, 0, 0],
+ [150295.688, 2, 0],
+ [150420.688, 0, 0],
+ [150670.688, 2, 0],
+ [150795.688, 3, 0],
+ [150920.688, 2, 0],
+ [151045.688, 0, 0],
+ [151170.688, 2, 0],
+ [151295.688, 3, 0],
+ [151420.688, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [151920.688, 3, 250],
+ [152420.688, 0, 250],
+ [152920.688, 0, 0],
+ [152920.688, 3, 0],
+ [153170.688, 0, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [153670.688, 3, 0],
+ [153795.688, 2, 0],
+ [153920.688, 3, 0],
+ [154170.688, 0, 0],
+ [154295.688, 2, 0],
+ [154420.688, 0, 0],
+ [154670.688, 2, 0],
+ [154795.688, 3, 0],
+ [154920.688, 2, 0],
+ [155045.688, 0, 0],
+ [155170.688, 2, 0],
+ [155295.688, 3, 0],
+ [155420.688, 1, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [155920.688, 3, 250],
+ [156420.688, 0, 250],
+ [156920.688, 0, 0],
+ [156920.688, 3, 0],
+ [157170.688, 0, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [157670.688, 2, 875],
+ [158670.688, 1, 875]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [159670.688, 3, 0],
+ [159795.688, 1, 0],
+ [159920.688, 0, 0],
+ [160045.688, 1, 0],
+ [160170.688, 3, 0],
+ [160295.688, 1, 0],
+ [160420.688, 0, 0],
+ [160545.688, 1, 0],
+ [160670.688, 3, 0],
+ [160920.688, 3, 0],
+ [161170.688, 3, 0],
+ [161420.688, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [161670.688, 2, 875],
+ [162670.688, 1, 875]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [163670.688, 3, 0],
+ [163795.688, 1, 0],
+ [163920.688, 0, 0],
+ [164045.688, 1, 0],
+ [164170.688, 3, 0],
+ [164295.688, 1, 0],
+ [164420.688, 0, 0],
+ [164545.688, 1, 0],
+ [164670.688, 3, 0],
+ [164920.688, 3, 0],
+ [165170.688, 3, 0],
+ [165420.688, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [165920.688, 1, 125],
+ [166170.688, 0, 125],
+ [166420.688, 2, 125],
+ [166670.688, 1, 125],
+ [166920.688, 0, 125],
+ [167170.688, 3, 125],
+ [167420.688, 2, 125]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [167670.688, 3, 125],
+ [167920.688, 1, 500]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [169920.688, 1, 125],
+ [170170.688, 0, 125],
+ [170420.688, 2, 125],
+ [170670.688, 1, 125],
+ [170920.688, 0, 125],
+ [171170.688, 3, 125],
+ [171420.688, 2, 125]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [171670.688, 3, 125],
+ [171920.688, 1, 500]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 95,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "monster",
+ "song": "Monster",
+ "stage": "halloween",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 95,
+ "speed": 1.6
+ }
+}
diff --git a/assets/preload/data/songs/monster/monster.json b/assets/preload/data/songs/monster/monster.json
new file mode 100644
index 0000000000..ba1802a662
--- /dev/null
+++ b/assets/preload/data/songs/monster/monster.json
@@ -0,0 +1,884 @@
+{
+ "song": {
+ "player1": "bf",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [2526.31567, 2, 789.473633],
+ [3473.684, 3, 157.89473],
+ [3789.47363, 2, 789.473633],
+ [4736.842, 3, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [[5052.63135, 1, 1105.26306]],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [7578.94727, 4, 1105.26306],
+ [7578.94727, 2, 789.473633],
+ [8526.315, 3, 157.89473],
+ [8842.10449, 6, 1105.26306],
+ [8842.10449, 2, 789.473633],
+ [9789.474, 3, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [10105.2627, 5, 1105.26306],
+ [10105.2627, 1, 1105.26306]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [13263.1572, 2, 0],
+ [13578.9463, 1, 0],
+ [13894.7363, 3, 315.789459],
+ [14526.3154, 1, 157.89473],
+ [14842.1045, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15157.8945, 3, 0],
+ [15473.6836, 0, 0],
+ [15789.4727, 3, 0],
+ [16105.2627, 1, 0],
+ [16421.0527, 2, 473.6842],
+ [17052.63, 0, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [18315.79, 2, 0],
+ [18631.5781, 1, 0],
+ [18947.3672, 3, 315.789459],
+ [19578.9473, 1, 157.89473],
+ [19894.7363, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [20210.5254, 3, 0],
+ [20526.3145, 0, 0],
+ [20842.1035, 3, 0],
+ [21157.8945, 1, 0],
+ [21473.6836, 2, 473.6842],
+ [22105.2617, 0, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [23368.42, 3, 0],
+ [23684.209, 2, 0],
+ [23999.998, 0, 473.6842],
+ [24631.5781, 2, 157.89473],
+ [24947.3672, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [25263.1563, 0, 473.6842],
+ [25894.7363, 2, 473.6842],
+ [26526.3145, 3, 1105.26306]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [28421.05, 3, 0],
+ [28736.84, 2, 0],
+ [29052.63, 0, 473.6842],
+ [29684.209, 2, 157.89473],
+ [29999.998, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30315.79, 0, 473.6842],
+ [30947.3672, 2, 473.6842],
+ [31578.9453, 3, 1105.26306]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32842.1055, 2, 631.5789],
+ [33789.4727, 0, 0],
+ [34105.26, 2, 157.89473],
+ [34421.05, 1, 157.89473],
+ [34736.84, 2, 157.89473],
+ [35052.63, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [35368.418, 3, 0],
+ [35683.38, 0, 118.110237],
+ [35998.34, 2, 0],
+ [36313.3, 3, 590.5512]
+ ],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": false,
+ "bpm": 127
+ },
+ {
+ "sectionNotes": [
+ [37258.1836, 2, 631.5789],
+ [38205.55, 0, 0],
+ [38521.34, 2, 157.89473],
+ [38837.1328, 1, 157.89473],
+ [39152.92, 2, 157.89473],
+ [39468.71, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": true,
+ "bpm": 95
+ },
+ {
+ "sectionNotes": [
+ [39784.5, 3, 0],
+ [40099.46, 0, 118.110237],
+ [40414.42, 2, 0],
+ [40729.3828, 3, 590.5512]
+ ],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": true,
+ "bpm": 127
+ },
+ {
+ "sectionNotes": [],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": true,
+ "bpm": 100
+ },
+ {
+ "sectionNotes": [
+ [44359.98, 3, 0],
+ [44502.8359, 0, 0],
+ [44931.41, 1, 0],
+ [45217.12, 2, 0],
+ [45502.8359, 3, 0],
+ [45788.55, 0, 0],
+ [46074.2656, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": false,
+ "bpm": 105
+ },
+ {
+ "sectionNotes": [
+ [46359.98, 0, 428.571442],
+ [46931.41, 1, 857.1429]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48931.41, 3, 0],
+ [49074.2656, 0, 0],
+ [49502.8359, 1, 0],
+ [49788.55, 2, 0],
+ [50074.2656, 3, 0],
+ [50359.98, 0, 0],
+ [50645.6953, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [50931.41, 0, 428.571442],
+ [51502.8359, 1, 857.1429]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [53502.8359, 2, 148.809525],
+ [53788.55, 3, 148.809525],
+ [54074.2656, 0, 148.809525],
+ [54359.98, 3, 148.809525],
+ [54645.6953, 3, 0],
+ [54931.41, 1, 0],
+ [55217.125, 0, 148.809525]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [55502.8359, 2, 857.1429],
+ [56645.6953, 3, 0],
+ [56788.55, 2, 0],
+ [56931.41, 3, 0],
+ [57359.98, 1, 0],
+ [57502.8359, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [58074.2656, 2, 148.809525],
+ [58359.98, 3, 148.809525],
+ [58645.6953, 0, 148.809525],
+ [58931.41, 3, 148.809525],
+ [59217.125, 3, 0],
+ [59502.8359, 1, 0],
+ [59788.55, 0, 148.809525]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [60074.2656, 2, 857.1429],
+ [61217.125, 3, 0],
+ [61359.98, 2, 0],
+ [61502.8359, 3, 0],
+ [61931.41, 1, 0],
+ [62074.2656, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [62359.98, 3, 0],
+ [62502.8359, 2, 0],
+ [62645.6953, 3, 0],
+ [62931.41, 1, 0],
+ [63074.2656, 0, 0],
+ [63217.125, 1, 0],
+ [63502.8359, 2, 0],
+ [63645.6953, 1, 0],
+ [63788.55, 0, 0],
+ [64074.2656, 0, 0],
+ [64217.125, 1, 0],
+ [64359.98, 2, 285.7143]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [64931.41, 3, 285.7143],
+ [65502.8359, 2, 285.7143],
+ [66074.2656, 3, 0],
+ [66359.9844, 2, 285.7143]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [66931.41, 3, 0],
+ [67074.2656, 2, 0],
+ [67217.125, 3, 0],
+ [67502.8359, 1, 0],
+ [67645.6953, 0, 0],
+ [67788.5547, 1, 0],
+ [68074.2656, 2, 0],
+ [68217.125, 1, 0],
+ [68359.9844, 0, 0],
+ [68645.6953, 0, 0],
+ [68788.5547, 1, 0],
+ [68931.41, 2, 285.7143]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [69502.8359, 3, 285.7143],
+ [70074.2656, 2, 285.7143],
+ [70645.6953, 3, 0],
+ [70931.41, 2, 285.7143]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [71502.8359, 2, 1000],
+ [72645.6953, 1, 1000]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [73788.5547, 3, 0],
+ [73931.41, 1, 0],
+ [74074.2656, 0, 0],
+ [74217.125, 1, 0],
+ [74359.9844, 3, 0],
+ [74502.8359, 1, 0],
+ [74645.6953, 0, 0],
+ [74788.5547, 1, 0],
+ [74931.41, 2, 0],
+ [75217.125, 2, 0],
+ [75502.8359, 2, 0],
+ [75788.5547, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [76074.2656, 2, 1000],
+ [77217.125, 1, 1000]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78359.9844, 3, 0],
+ [78502.8359, 1, 0],
+ [78645.6953, 0, 0],
+ [78788.5547, 1, 0],
+ [78931.41, 3, 0],
+ [79074.2656, 1, 0],
+ [79217.125, 0, 0],
+ [79359.9844, 1, 0],
+ [79502.8359, 2, 0],
+ [79788.5547, 2, 0],
+ [80074.2656, 2, 0],
+ [80359.9844, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": true,
+ "bpm": 216
+ },
+ {
+ "sectionNotes": [
+ [82072.59, 3, 473.6842],
+ [82704.17, 0, 473.6842],
+ [83335.75, 1, 0],
+ [83651.54, 2, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": false,
+ "bpm": 95
+ },
+ {
+ "sectionNotes": [
+ [84283.12, 3, 473.6842],
+ [84914.7, 0, 473.6842],
+ [85546.28, 1, 0],
+ [85862.07, 2, 473.6842],
+ [86493.65, 7, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [86809.44, 1, 157.89473],
+ [87125.23, 2, 157.89473],
+ [87441.0156, 0, 157.89473],
+ [87756.8047, 3, 157.89473],
+ [88072.59, 1, 473.6842],
+ [88704.17, 7, 157.89473],
+ [89019.96, 5, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [89335.75, 6, 157.89473],
+ [89651.54, 4, 157.89473],
+ [89967.33, 7, 157.89473],
+ [90283.12, 5, 473.6842],
+ [90598.91, 2, 157.89473],
+ [90914.6953, 0, 0],
+ [91072.59, 1, 0],
+ [91230.49, 3, 157.89473],
+ [91546.28, 2, 315.789459]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [92177.86, 2, 157.89473],
+ [92493.65, 0, 0],
+ [92651.54, 1, 0],
+ [92809.44, 3, 157.89473],
+ [93125.23, 2, 315.789459],
+ [94072.59, 6, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [94546.28, 7, 0],
+ [94704.17, 5, 157.89473],
+ [95019.96, 5, 0],
+ [95651.54, 2, 157.89473],
+ [96125.23, 3, 0],
+ [96283.12, 1, 157.89473],
+ [96598.91, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [97230.4844, 2, 0],
+ [97388.38, 0, 0],
+ [97546.28, 2, 157.89473],
+ [97862.07, 3, 473.6842],
+ [98493.65, 1, 157.89473],
+ [98809.44, 3, 315.789459]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [99441.0156, 2, 0],
+ [99598.91, 0, 0],
+ [99756.8047, 2, 157.89473],
+ [100072.594, 3, 473.6842],
+ [100704.172, 1, 157.89473],
+ [101019.961, 3, 315.789459],
+ [101335.75, 4, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [101967.328, 1, 0],
+ [102125.227, 3, 0],
+ [102283.117, 0, 0],
+ [102598.906, 2, 0],
+ [102914.695, 0, 0],
+ [103230.484, 0, 0],
+ [103546.281, 4, 473.6842],
+ [104177.859, 5, 0],
+ [104335.75, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [104493.648, 4, 0],
+ [104809.438, 6, 0],
+ [105125.227, 4, 0],
+ [105441.016, 4, 0],
+ [105756.805, 3, 473.6842],
+ [106388.383, 1, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [107019.961, 0, 0],
+ [107335.75, 3, 157.89473],
+ [107651.539, 0, 157.89473],
+ [107967.328, 3, 0],
+ [108283.117, 1, 473.6842],
+ [108914.695, 7, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [109546.273, 1, 473.6842],
+ [110177.859, 0, 0],
+ [110493.648, 3, 157.89473],
+ [110809.438, 0, 157.89473],
+ [111125.227, 3, 0],
+ [111441.016, 1, 473.6842]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [117352.5, 2, 0],
+ [117579.773, 2, 0],
+ [117807.047, 2, 0],
+ [118034.32, 2, 0],
+ [118261.594, 0, 0],
+ [118488.859, 0, 113.636368],
+ [118716.133, 1, 454.545471]
+ ],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": false,
+ "bpm": 132
+ },
+ {
+ "sectionNotes": [[120534.32, 2, 0]],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [120761.594, 3, 795.4545],
+ [121670.68, 3, 340.9091],
+ [122125.227, 0, 0],
+ [122352.5, 2, 340.9091]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [[122807.047, 1, 681.8182]],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [124625.227, 2, 0],
+ [124852.5, 2, 0],
+ [125079.773, 2, 0],
+ [125307.047, 2, 0],
+ [125534.32, 0, 0],
+ [125761.594, 0, 113.636368],
+ [125988.859, 1, 454.545471]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[127807.047, 2, 0]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [128034.32, 3, 795.4545],
+ [128943.406, 3, 340.9091],
+ [129397.953, 0, 0],
+ [129625.227, 2, 340.9091]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[130079.773, 1, 681.8182]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [],
+ "lengthInSteps": 16,
+ "changeBPM": true,
+ "mustHitSection": true,
+ "bpm": 120
+ },
+ {
+ "sectionNotes": [
+ [133920.688, 2, 0],
+ [134045.688, 0, 250],
+ [134420.688, 1, 0],
+ [134670.688, 2, 0],
+ [134920.688, 3, 0],
+ [135170.688, 0, 0],
+ [135420.688, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [135670.688, 0, 375],
+ [136170.688, 3, 750]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [137920.688, 2, 0],
+ [138045.688, 0, 250],
+ [138420.688, 1, 0],
+ [138670.688, 2, 0],
+ [138920.688, 3, 0],
+ [139170.688, 0, 0],
+ [139420.688, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [139670.688, 0, 375],
+ [140170.688, 3, 750]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [141920.688, 3, 125],
+ [142170.688, 1, 125],
+ [142420.688, 0, 125],
+ [142670.688, 2, 125],
+ [142920.688, 3, 125],
+ [143170.688, 0, 125],
+ [143420.688, 2, 125]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [143670.688, 3, 500],
+ [144670.688, 2, 0],
+ [144795.688, 0, 0],
+ [144920.688, 2, 0],
+ [145295.688, 2, 0],
+ [145420.688, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [145920.688, 3, 125],
+ [146170.688, 1, 125],
+ [146420.688, 0, 125],
+ [146670.688, 2, 125],
+ [146920.688, 3, 125],
+ [147170.688, 0, 125],
+ [147420.688, 2, 125]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [147670.688, 3, 500],
+ [148670.688, 2, 0],
+ [148795.688, 0, 0],
+ [148920.688, 2, 0],
+ [149295.688, 2, 0],
+ [149420.688, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [149670.688, 3, 0],
+ [149795.688, 2, 0],
+ [149920.688, 3, 0],
+ [150170.688, 1, 0],
+ [150295.688, 0, 0],
+ [150420.688, 1, 0],
+ [150670.688, 2, 0],
+ [150795.688, 1, 0],
+ [150920.688, 0, 0],
+ [151170.688, 0, 0],
+ [151295.688, 1, 0],
+ [151420.688, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [151920.688, 3, 250],
+ [152420.688, 0, 250],
+ [152920.688, 3, 0],
+ [153170.688, 0, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [153670.688, 3, 0],
+ [153795.688, 2, 0],
+ [153920.688, 3, 0],
+ [154170.688, 1, 0],
+ [154295.688, 0, 0],
+ [154420.688, 1, 0],
+ [154670.688, 2, 0],
+ [154795.688, 1, 0],
+ [154920.688, 0, 0],
+ [155170.688, 0, 0],
+ [155295.688, 1, 0],
+ [155420.688, 2, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [155920.688, 3, 250],
+ [156420.688, 0, 250],
+ [156920.688, 3, 0],
+ [157170.688, 0, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [157670.688, 2, 875],
+ [158670.688, 1, 875]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [159670.688, 3, 0],
+ [159795.688, 1, 0],
+ [159920.688, 0, 0],
+ [160045.688, 1, 0],
+ [160170.688, 3, 0],
+ [160295.688, 1, 0],
+ [160420.688, 0, 0],
+ [160545.688, 1, 0],
+ [160670.688, 3, 0],
+ [160920.688, 3, 0],
+ [161170.688, 3, 0],
+ [161420.688, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [161670.688, 2, 875],
+ [162670.688, 1, 875]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [163670.688, 3, 0],
+ [163795.688, 1, 0],
+ [163920.688, 0, 0],
+ [164045.688, 1, 0],
+ [164170.688, 3, 0],
+ [164295.688, 1, 0],
+ [164420.688, 0, 0],
+ [164545.688, 1, 0],
+ [164670.688, 3, 0],
+ [164920.688, 3, 0],
+ [165170.688, 3, 0],
+ [165420.688, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [165920.688, 1, 0],
+ [166170.688, 0, 0],
+ [166420.688, 2, 0],
+ [166670.688, 1, 0],
+ [166920.688, 0, 0],
+ [167170.688, 3, 0],
+ [167420.688, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [167670.688, 3, 0],
+ [167920.688, 1, 500]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [169920.688, 1, 0],
+ [170170.688, 0, 0],
+ [170420.688, 2, 0],
+ [170670.688, 1, 0],
+ [170920.688, 0, 0],
+ [171170.688, 3, 0],
+ [171420.688, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [171670.688, 3, 0],
+ [171920.688, 1, 500]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 95,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "monster",
+ "song": "Monster",
+ "stage": "halloween",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 95,
+ "speed": 1.3
+ }
+}
diff --git a/assets/preload/data/songs/offsettest/_meta.json b/assets/preload/data/songs/offsettest/_meta.json
new file mode 100644
index 0000000000..5a907ae220
--- /dev/null
+++ b/assets/preload/data/songs/offsettest/_meta.json
@@ -0,0 +1,4 @@
+{
+ "name": "Offset Test",
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/songs/offsettest/offsettest.json b/assets/preload/data/songs/offsettest/offsettest.json
new file mode 100644
index 0000000000..4c622e4cad
--- /dev/null
+++ b/assets/preload/data/songs/offsettest/offsettest.json
@@ -0,0 +1,490 @@
+{
+ "song": {
+ "song": "offsetTest",
+ "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": [
+ [9600, 0, 0],
+ [10800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [12000, 0, 0],
+ [13200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [14400, 0, 0],
+ [15600, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [16800, 0, 0],
+ [18000, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [19200, 2, 0],
+ [20400, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [21600, 2, 0],
+ [22800, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [24000, 2, 0],
+ [25200, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [26400, 2, 0],
+ [27600, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [28800, 0, 0],
+ [30000, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [31200, 1, 0],
+ [32400, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [33600, 0, 0],
+ [34800, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [36000, 1, 0],
+ [37200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [38400, 1, 0],
+ [39000, 1, 0],
+ [39600, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [40800, 1, 0],
+ [41400, 1, 0],
+ [42000, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [43200, 1, 0],
+ [43800, 1, 0],
+ [44400, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [45600, 1, 0],
+ [46200, 1, 0],
+ [46800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [48000, 1, 0],
+ [48300, 2, 0],
+ [48600, 3, 0],
+ [48900, 2, 0],
+ [49800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [50400, 1, 0],
+ [50700, 2, 0],
+ [51000, 3, 0],
+ [51300, 2, 0],
+ [52200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [52800, 3, 0],
+ [53400, 1, 0],
+ [54000, 0, 0],
+ [54600, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [55200, 2, 0],
+ [55800, 3, 0],
+ [56400, 0, 0],
+ [57000, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [[57600, 1, 750]]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": []
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": []
+ }
+ ],
+ "bpm": 100,
+ "sections": 0,
+ "needsVoices": false,
+ "player1": "bf",
+ "player2": "gf",
+ "sectionLengths": [],
+ "speed": 1
+ },
+ "bpm": 100,
+ "sections": 27,
+ "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": [
+ [9600, 0, 0],
+ [10800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [12000, 0, 0],
+ [13200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [14400, 0, 0],
+ [15600, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [16800, 0, 0],
+ [18000, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [19200, 2, 0],
+ [20400, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [21600, 2, 0],
+ [22800, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [24000, 2, 0],
+ [25200, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [26400, 2, 0],
+ [27600, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [28800, 0, 0],
+ [30000, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [31200, 1, 0],
+ [32400, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [33600, 0, 0],
+ [34800, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [36000, 1, 0],
+ [37200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [38400, 1, 0],
+ [39000, 1, 0],
+ [39600, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [40800, 1, 0],
+ [41400, 1, 0],
+ [42000, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [43200, 1, 0],
+ [43800, 1, 0],
+ [44400, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [45600, 1, 0],
+ [46200, 1, 0],
+ [46800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [48000, 1, 0],
+ [48300, 2, 0],
+ [48600, 3, 0],
+ [48900, 2, 0],
+ [49800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [50400, 1, 0],
+ [50700, 2, 0],
+ [51000, 3, 0],
+ [51300, 2, 0],
+ [52200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [52800, 3, 0],
+ [53400, 1, 0],
+ [54000, 0, 0],
+ [54600, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [55200, 2, 0],
+ [55800, 3, 0],
+ [56400, 0, 0],
+ [57000, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [[57600, 1, 750]]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": []
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": []
+ }
+ ]
+}
diff --git a/assets/preload/data/songs/philly/_meta.json b/assets/preload/data/songs/philly/_meta.json
new file mode 100644
index 0000000000..4c2eee6beb
--- /dev/null
+++ b/assets/preload/data/songs/philly/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/songs/philly/philly-easy.json b/assets/preload/data/songs/philly/philly-easy.json
new file mode 100644
index 0000000000..166744c182
--- /dev/null
+++ b/assets/preload/data/songs/philly/philly-easy.json
@@ -0,0 +1,610 @@
+{
+ "song": {
+ "player1": "bf",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [2914.28564, 2, 0],
+ [3428.57129, 1, 257.142853],
+ [3771.42847, 3, 171.428574]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [4285.71436, 2, 0],
+ [4800, 1, 257.142853],
+ [5142.857, 3, 171.428574]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [5657.14258, 2, 0],
+ [6171.42871, 1, 257.142853],
+ [6514.28564, 3, 171.428574]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [6857.14258, 0, 0],
+ [7200, 2, 0],
+ [7542.857, 2, 0],
+ [7885.71436, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [8400, 2, 0],
+ [8914.285, 1, 257.142853],
+ [9257.143, 3, 171.428574]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [9771.429, 2, 0],
+ [10285.7139, 1, 257.142853],
+ [10628.5713, 3, 171.428574]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [11142.8574, 2, 0],
+ [11657.1426, 1, 257.142853],
+ [12000, 3, 171.428574]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [12342.8574, 0, 0],
+ [12685.7139, 2, 0],
+ [13028.5713, 2, 0],
+ [13371.4287, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [14057.1426, 2, 0],
+ [14400, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15428.5713, 3, 0],
+ [15771.4287, 2, 0],
+ [16285.7139, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [16800, 3, 0],
+ [17142.8574, 0, 0],
+ [17485.7148, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [17828.57, 3, 0],
+ [18171.4277, 1, 0],
+ [18514.2852, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [19542.8574, 2, 0],
+ [19885.7148, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [20914.2852, 3, 0],
+ [21257.1426, 2, 0],
+ [21771.4277, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [22285.7148, 3, 0],
+ [22628.57, 0, 0],
+ [22971.4277, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [23314.2852, 3, 0],
+ [23657.1426, 1, 0],
+ [24000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [24685.7148, 2, 0],
+ [25371.4277, 0, 0],
+ [25714.2852, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26400, 3, 0],
+ [26742.8574, 2, 0],
+ [27257.1426, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [27771.4277, 3, 0],
+ [28114.2852, 0, 0],
+ [28457.1426, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [28800, 3, 0],
+ [29142.8574, 1, 0],
+ [29485.7148, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [30171.4277, 2, 0],
+ [30857.1426, 0, 0],
+ [31200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [31885.7148, 3, 0],
+ [32228.57, 2, 0],
+ [32742.8574, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33257.14, 3, 0],
+ [33600, 0, 0],
+ [33942.8555, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [34285.7148, 3, 0],
+ [34628.57, 1, 0],
+ [34971.43, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [35657.14, 2, 0],
+ [36342.8555, 2, 0],
+ [36685.7148, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [37028.57, 2, 0],
+ [37714.2852, 2, 0],
+ [38057.14, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [38400, 2, 0],
+ [39085.7148, 2, 0],
+ [39428.57, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [39771.43, 2, 0],
+ [40457.14, 2, 0],
+ [40800, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [41142.8555, 2, 0],
+ [41828.57, 2, 0],
+ [42171.43, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [42514.2852, 2, 0],
+ [43200, 2, 0],
+ [43542.8555, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [43885.7148, 2, 0],
+ [44571.43, 2, 0],
+ [44914.2852, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [45257.14, 2, 0],
+ [45942.8555, 2, 0],
+ [46285.7148, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [46628.57, 2, 0],
+ [47314.2852, 2, 0],
+ [47657.14, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48000, 2, 0],
+ [48685.7148, 2, 0],
+ [49028.57, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49371.43, 2, 0],
+ [50057.14, 2, 0],
+ [50400, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [50742.8555, 3, 0],
+ [51428.57, 2, 0],
+ [51771.43, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [52114.2852, 2, 0],
+ [52800, 2, 0],
+ [53142.8555, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [53485.7148, 2, 0],
+ [54171.43, 2, 0],
+ [54514.2852, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [54857.14, 2, 0],
+ [55542.8555, 2, 0],
+ [55885.7148, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56228.57, 3, 0],
+ [56914.2852, 2, 0],
+ [57257.14, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [57600, 3, 0],
+ [58285.7148, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [58971.43, 2, 0],
+ [59314.2852, 3, 0],
+ [59657.14, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [60342.8555, 3, 0],
+ [61028.57, 2, 0],
+ [61542.8555, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61714.2852, 2, 0],
+ [62057.14, 0, 0],
+ [62400, 2, 0],
+ [62742.8555, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [63085.7148, 3, 0],
+ [63771.43, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [64457.14, 2, 0],
+ [64800, 3, 0],
+ [65142.8555, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65828.57, 3, 0],
+ [66514.28, 2, 0],
+ [67028.57, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [67200, 2, 0],
+ [67542.86, 0, 0],
+ [67885.71, 2, 0],
+ [68228.57, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [68571.43, 2, 0],
+ [69257.14, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [69942.86, 0, 0],
+ [70628.57, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [71314.28, 3, 0],
+ [72000, 2, 0],
+ [72342.86, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72685.71, 3, 0],
+ [73371.43, 2, 0],
+ [73714.28, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [74057.14, 2, 0],
+ [74742.86, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [75428.57, 0, 0],
+ [76114.28, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [76800, 3, 0],
+ [77485.71, 2, 0],
+ [77828.57, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78171.43, 3, 0],
+ [78857.14, 2, 0],
+ [79200, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [79542.86, 2, 0],
+ [80228.57, 2, 0],
+ [80571.43, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [80914.28, 2, 0],
+ [81600, 2, 0],
+ [81942.86, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [82285.71, 2, 0],
+ [82971.43, 2, 0],
+ [83314.28, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [83657.14, 3, 0],
+ [84342.86, 2, 0],
+ [84685.71, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [85028.57, 2, 0],
+ [85714.28, 2, 0],
+ [86057.14, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [86400, 2, 0],
+ [87085.71, 2, 0],
+ [87428.57, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [87771.43, 2, 0],
+ [88457.14, 2, 0],
+ [88800, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [89142.86, 3, 0],
+ [89828.57, 2, 0],
+ [90171.43, 0, 0],
+ [90342.86, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[90514.28, 1, 0]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 175,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "pico",
+ "song": "Philly Nice",
+ "stage": "philly",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 175,
+ "speed": 1
+ }
+}
diff --git a/assets/preload/data/songs/philly/philly-hard.json b/assets/preload/data/songs/philly/philly-hard.json
new file mode 100644
index 0000000000..82eeece413
--- /dev/null
+++ b/assets/preload/data/songs/philly/philly-hard.json
@@ -0,0 +1,866 @@
+{
+ "song": {
+ "player1": "bf",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [2914.28564, 2, 0],
+ [3085.71436, 0, 0],
+ [3428.57129, 1, 257.142853],
+ [3771.42847, 3, 171.428574]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [4285.71436, 2, 0],
+ [4457.14258, 0, 0],
+ [4800, 1, 257.142853],
+ [5142.857, 3, 171.428574]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [5657.14258, 2, 0],
+ [5828.57129, 0, 0],
+ [6171.42871, 1, 257.142853],
+ [6514.28564, 3, 171.428574]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [6857.14258, 0, 0],
+ [7028.57129, 3, 0],
+ [7200, 2, 0],
+ [7542.857, 2, 0],
+ [7885.71436, 0, 0],
+ [8057.14258, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [8400, 2, 0],
+ [8571.429, 0, 0],
+ [8914.285, 1, 257.142853],
+ [9257.143, 3, 171.428574]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [9771.429, 2, 0],
+ [9942.857, 0, 0],
+ [10285.7139, 1, 257.142853],
+ [10628.5713, 3, 171.428574]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [11142.8574, 2, 0],
+ [11314.2852, 0, 0],
+ [11657.1426, 1, 257.142853],
+ [12000, 3, 171.428574]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [12342.8574, 0, 0],
+ [12514.2852, 3, 0],
+ [12685.7139, 2, 0],
+ [13028.5713, 2, 0],
+ [13371.4287, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [13885.7139, 2, 0],
+ [14057.1426, 0, 0],
+ [14400, 0, 0],
+ [14742.8574, 3, 0],
+ [14914.2852, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15257.1426, 3, 0],
+ [15428.5713, 0, 0],
+ [15771.4287, 2, 0],
+ [16114.2852, 0, 0],
+ [16285.7139, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [16628.57, 0, 0],
+ [16800, 1, 0],
+ [16971.4277, 3, 0],
+ [17142.8574, 1, 0],
+ [17314.2852, 0, 0],
+ [17485.7148, 1, 0],
+ [17657.1426, 3, 0],
+ [17742.8574, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [17828.57, 3, 0],
+ [18000, 3, 0],
+ [18171.4277, 1, 0],
+ [18514.2852, 2, 0],
+ [18857.1426, 2, 0],
+ [19028.57, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [19371.4277, 2, 0],
+ [19542.8574, 0, 0],
+ [19885.7148, 0, 0],
+ [20228.57, 3, 0],
+ [20400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [20742.8574, 3, 0],
+ [20914.2852, 0, 0],
+ [21257.1426, 2, 0],
+ [21600, 0, 0],
+ [21771.4277, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [22114.2852, 0, 0],
+ [22285.7148, 1, 0],
+ [22457.1426, 3, 0],
+ [22628.57, 1, 0],
+ [22800, 0, 0],
+ [22971.4277, 1, 0],
+ [23142.8574, 3, 0],
+ [23228.57, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [23314.2852, 3, 0],
+ [23485.7148, 3, 0],
+ [23657.1426, 1, 0],
+ [24000, 2, 0],
+ [24342.8574, 2, 0],
+ [24514.2852, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [24685.7148, 2, 0],
+ [24857.1426, 2, 0],
+ [25028.57, 0, 0],
+ [25371.4277, 0, 0],
+ [25714.2852, 3, 0],
+ [25885.7148, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26228.57, 3, 0],
+ [26400, 0, 0],
+ [26742.8574, 2, 0],
+ [27085.7148, 0, 0],
+ [27257.1426, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [27600, 0, 0],
+ [27771.4277, 1, 0],
+ [27942.8574, 3, 0],
+ [28114.2852, 1, 0],
+ [28285.7148, 0, 0],
+ [28457.1426, 1, 0],
+ [28628.57, 3, 0],
+ [28714.2852, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [28800, 3, 0],
+ [28971.4277, 3, 0],
+ [29142.8574, 1, 0],
+ [29485.7148, 2, 0],
+ [29828.57, 2, 0],
+ [30000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [30171.4277, 2, 0],
+ [30342.8574, 2, 0],
+ [30514.2852, 0, 0],
+ [30857.1426, 0, 0],
+ [31200, 3, 0],
+ [31371.4277, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [31714.2852, 3, 0],
+ [31885.7148, 0, 0],
+ [32228.57, 2, 0],
+ [32571.4277, 0, 0],
+ [32742.8574, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33085.7148, 0, 0],
+ [33257.14, 1, 0],
+ [33428.57, 3, 0],
+ [33600, 1, 0],
+ [33771.43, 0, 0],
+ [33942.8555, 1, 0],
+ [34114.2852, 3, 0],
+ [34200, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [34285.7148, 3, 0],
+ [34457.14, 3, 0],
+ [34628.57, 1, 0],
+ [34971.43, 2, 0],
+ [35314.2852, 2, 0],
+ [35485.7148, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [35657.14, 2, 0],
+ [35828.57, 3, 0],
+ [36000, 1, 0],
+ [36171.43, 0, 0],
+ [36342.8555, 2, 0],
+ [36514.2852, 3, 0],
+ [36685.7148, 0, 0],
+ [36857.14, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [37028.57, 2, 0],
+ [37200, 3, 0],
+ [37371.43, 2, 0],
+ [37542.8555, 0, 0],
+ [37714.2852, 2, 0],
+ [37885.7148, 3, 0],
+ [38057.14, 0, 0],
+ [38228.57, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [38400, 2, 0],
+ [38571.43, 3, 0],
+ [38742.8555, 1, 0],
+ [38914.2852, 0, 0],
+ [39085.7148, 2, 0],
+ [39257.14, 3, 0],
+ [39428.57, 0, 0],
+ [39600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [39771.43, 2, 0],
+ [39942.8555, 3, 0],
+ [40114.2852, 2, 0],
+ [40285.7148, 0, 0],
+ [40457.14, 2, 0],
+ [40628.57, 3, 0],
+ [40800, 0, 0],
+ [40971.43, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [41142.8555, 2, 0],
+ [41314.2852, 3, 0],
+ [41485.7148, 1, 0],
+ [41657.14, 0, 0],
+ [41828.57, 2, 0],
+ [42000, 3, 0],
+ [42171.43, 0, 0],
+ [42342.8555, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [42514.2852, 2, 0],
+ [42685.7148, 3, 0],
+ [42857.14, 2, 0],
+ [43028.57, 0, 0],
+ [43200, 2, 0],
+ [43371.43, 3, 0],
+ [43542.8555, 0, 0],
+ [43714.2852, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [43885.7148, 2, 0],
+ [44057.14, 3, 0],
+ [44228.57, 1, 0],
+ [44400, 0, 0],
+ [44571.43, 2, 0],
+ [44742.8555, 3, 0],
+ [44914.2852, 0, 0],
+ [45085.7148, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [45257.14, 2, 0],
+ [45428.57, 3, 0],
+ [45600, 2, 0],
+ [45771.43, 0, 0],
+ [45942.8555, 2, 0],
+ [46114.2852, 3, 0],
+ [46285.7148, 0, 0],
+ [46457.14, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [46628.57, 2, 0],
+ [46800, 3, 0],
+ [46971.43, 1, 0],
+ [47142.8555, 0, 0],
+ [47314.2852, 2, 0],
+ [47485.7148, 3, 0],
+ [47657.14, 0, 0],
+ [47828.57, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48000, 2, 0],
+ [48171.43, 3, 0],
+ [48342.8555, 2, 0],
+ [48514.2852, 0, 0],
+ [48685.7148, 2, 0],
+ [48857.14, 3, 0],
+ [49028.57, 0, 0],
+ [49200, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49371.43, 2, 0],
+ [49542.8555, 3, 0],
+ [49714.2852, 1, 0],
+ [49885.7148, 0, 0],
+ [50057.14, 2, 0],
+ [50228.57, 3, 0],
+ [50400, 0, 0],
+ [50571.43, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [50742.8555, 2, 0],
+ [50914.2852, 3, 0],
+ [51085.7148, 2, 0],
+ [51257.14, 0, 0],
+ [51428.57, 2, 0],
+ [51600, 3, 0],
+ [51771.43, 0, 0],
+ [51942.8555, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [52114.2852, 2, 0],
+ [52285.7148, 3, 0],
+ [52457.14, 1, 0],
+ [52628.57, 0, 0],
+ [52800, 2, 0],
+ [52971.43, 3, 0],
+ [53142.8555, 0, 0],
+ [53314.2852, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [53485.7148, 2, 0],
+ [53657.14, 3, 0],
+ [53828.57, 2, 0],
+ [54000, 0, 0],
+ [54171.43, 2, 0],
+ [54342.8555, 3, 0],
+ [54514.2852, 0, 0],
+ [54685.7148, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [54857.14, 2, 0],
+ [55028.57, 3, 0],
+ [55200, 1, 0],
+ [55371.43, 0, 0],
+ [55542.8555, 2, 0],
+ [55714.2852, 3, 0],
+ [55885.7148, 0, 0],
+ [56057.14, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56228.57, 2, 0],
+ [56400, 3, 0],
+ [56571.43, 2, 0],
+ [56742.8555, 0, 0],
+ [56914.2852, 2, 0],
+ [57085.7148, 3, 0],
+ [57257.14, 0, 0],
+ [57428.57, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [57600, 3, 0],
+ [57771.43, 3, 0],
+ [57942.8555, 1, 0],
+ [58114.2852, 1, 0],
+ [58285.7148, 2, 0],
+ [58457.14, 2, 0],
+ [58800, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [58971.43, 2, 0],
+ [59142.8555, 3, 0],
+ [59228.57, 0, 0],
+ [59314.2852, 3, 0],
+ [59485.7148, 3, 0],
+ [59657.14, 2, 0],
+ [59828.57, 0, 0],
+ [60000, 0, 0],
+ [60171.43, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [60342.8555, 3, 0],
+ [60514.2852, 3, 0],
+ [60600, 0, 0],
+ [60685.7148, 3, 0],
+ [60857.14, 1, 0],
+ [61028.57, 2, 0],
+ [61200, 2, 0],
+ [61371.43, 0, 0],
+ [61542.8555, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61714.2852, 2, 0],
+ [61885.7148, 3, 0],
+ [62057.14, 0, 0],
+ [62228.57, 3, 0],
+ [62400, 2, 0],
+ [62742.8555, 1, 0],
+ [62914.2852, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [63085.7148, 3, 0],
+ [63257.14, 3, 0],
+ [63428.57, 1, 0],
+ [63600, 1, 0],
+ [63771.43, 2, 0],
+ [63942.8555, 2, 0],
+ [64285.7148, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [64457.14, 2, 0],
+ [64628.57, 3, 0],
+ [64714.2852, 0, 0],
+ [64800, 3, 0],
+ [64971.43, 3, 0],
+ [65142.8555, 2, 0],
+ [65314.2852, 0, 0],
+ [65485.7148, 0, 0],
+ [65657.14, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65828.57, 3, 0],
+ [66000, 3, 0],
+ [66085.71, 0, 0],
+ [66171.43, 3, 0],
+ [66342.86, 1, 0],
+ [66514.28, 2, 0],
+ [66685.71, 2, 0],
+ [66857.14, 0, 0],
+ [67028.57, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [67200, 2, 0],
+ [67371.43, 3, 0],
+ [67542.86, 0, 0],
+ [67714.28, 3, 0],
+ [67885.71, 2, 0],
+ [68228.57, 1, 0],
+ [68400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [68571.43, 2, 0],
+ [68914.28, 1, 0],
+ [69085.71, 3, 0],
+ [69257.14, 2, 0],
+ [69600, 1, 0],
+ [69771.43, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [69942.86, 0, 0],
+ [70114.28, 3, 0],
+ [70285.71, 1, 0],
+ [70457.14, 3, 0],
+ [70628.57, 2, 0],
+ [70971.43, 2, 0],
+ [71142.86, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [71314.28, 3, 0],
+ [71485.71, 1, 0],
+ [71657.14, 0, 0],
+ [71828.57, 3, 0],
+ [72000, 2, 0],
+ [72342.86, 0, 0],
+ [72514.28, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72685.71, 3, 0],
+ [72857.14, 3, 0],
+ [73028.57, 2, 0],
+ [73200, 0, 0],
+ [73371.43, 2, 0],
+ [73542.86, 3, 0],
+ [73714.28, 0, 0],
+ [73885.71, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [74057.14, 2, 0],
+ [74400, 1, 0],
+ [74571.43, 3, 0],
+ [74742.86, 2, 0],
+ [75085.71, 1, 0],
+ [75257.14, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [75428.57, 0, 0],
+ [75600, 3, 0],
+ [75771.43, 1, 0],
+ [75942.86, 3, 0],
+ [76114.28, 2, 0],
+ [76457.14, 2, 0],
+ [76628.57, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [76800, 3, 0],
+ [76971.43, 1, 0],
+ [77142.86, 0, 0],
+ [77314.28, 3, 0],
+ [77485.71, 2, 0],
+ [77828.57, 0, 0],
+ [78000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78171.43, 3, 0],
+ [78342.86, 3, 0],
+ [78514.28, 2, 0],
+ [78685.71, 0, 0],
+ [78857.14, 2, 0],
+ [79028.57, 3, 0],
+ [79200, 0, 0],
+ [79371.43, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [79542.86, 2, 0],
+ [79714.28, 3, 0],
+ [79885.71, 1, 0],
+ [80057.14, 0, 0],
+ [80228.57, 2, 0],
+ [80400, 3, 0],
+ [80571.43, 0, 0],
+ [80742.86, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [80914.28, 2, 0],
+ [81085.71, 3, 0],
+ [81257.14, 2, 0],
+ [81428.57, 0, 0],
+ [81600, 2, 0],
+ [81771.43, 3, 0],
+ [81942.86, 0, 0],
+ [82114.28, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [82285.71, 2, 0],
+ [82457.14, 3, 0],
+ [82628.57, 1, 0],
+ [82800, 0, 0],
+ [82971.43, 2, 0],
+ [83142.86, 3, 0],
+ [83314.28, 0, 0],
+ [83485.71, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [83657.14, 2, 0],
+ [83828.57, 3, 0],
+ [84000, 2, 0],
+ [84171.43, 0, 0],
+ [84342.86, 2, 0],
+ [84514.28, 3, 0],
+ [84685.71, 0, 0],
+ [84857.14, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [85028.57, 2, 0],
+ [85200, 3, 0],
+ [85371.43, 1, 0],
+ [85542.86, 0, 0],
+ [85714.28, 2, 0],
+ [85885.71, 3, 0],
+ [86057.14, 0, 0],
+ [86228.57, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [86400, 2, 0],
+ [86571.43, 3, 0],
+ [86742.86, 2, 0],
+ [86914.28, 0, 0],
+ [87085.71, 2, 0],
+ [87257.14, 3, 0],
+ [87428.57, 0, 0],
+ [87600, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [87771.43, 2, 0],
+ [87942.86, 3, 0],
+ [88114.28, 1, 0],
+ [88285.71, 0, 0],
+ [88457.14, 2, 0],
+ [88628.57, 3, 0],
+ [88800, 0, 0],
+ [88971.43, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [89142.86, 2, 0],
+ [89314.28, 3, 0],
+ [89485.71, 2, 0],
+ [89657.14, 0, 0],
+ [89828.57, 2, 0],
+ [90000, 3, 0],
+ [90171.43, 0, 0],
+ [90342.86, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[90514.28, 1, 0]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 175,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "pico",
+ "song": "Philly Nice",
+ "stage": "philly",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 175,
+ "speed": 2
+ }
+}
diff --git a/assets/preload/data/songs/philly/philly.json b/assets/preload/data/songs/philly/philly.json
new file mode 100644
index 0000000000..170431b750
--- /dev/null
+++ b/assets/preload/data/songs/philly/philly.json
@@ -0,0 +1,726 @@
+{
+ "song": {
+ "player1": "bf",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [2914.28564, 2, 0],
+ [3428.57129, 1, 257.142853],
+ [3771.42847, 3, 171.428574]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [4285.71436, 2, 0],
+ [4800, 1, 257.142853],
+ [5142.857, 3, 171.428574]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [5657.14258, 2, 0],
+ [6171.42871, 1, 257.142853],
+ [6514.28564, 3, 171.428574]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [6857.14258, 0, 0],
+ [7542.857, 2, 0],
+ [7885.71436, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [8400, 2, 0],
+ [8914.285, 1, 257.142853],
+ [9257.143, 3, 171.428574]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [9771.429, 2, 0],
+ [10285.7139, 1, 257.142853],
+ [10628.5713, 3, 171.428574]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [11142.8574, 2, 0],
+ [11657.1426, 1, 257.142853],
+ [12000, 3, 171.428574]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [12342.8574, 0, 0],
+ [12685.7139, 2, 0],
+ [13028.5713, 2, 0],
+ [13371.4287, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [14057.1426, 2, 0],
+ [14400, 0, 0],
+ [14742.8574, 3, 0],
+ [14914.2852, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15428.5713, 3, 0],
+ [15771.4287, 2, 0],
+ [16114.2852, 0, 0],
+ [16285.7139, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [16628.57, 0, 0],
+ [16800, 3, 0],
+ [17142.8574, 0, 0],
+ [17485.7148, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [17828.57, 3, 0],
+ [18171.4277, 1, 0],
+ [18514.2852, 2, 0],
+ [18857.1426, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [19542.8574, 2, 0],
+ [19885.7148, 0, 0],
+ [20228.57, 3, 0],
+ [20400, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [20914.2852, 3, 0],
+ [21257.1426, 2, 0],
+ [21600, 0, 0],
+ [21771.4277, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [22114.2852, 0, 0],
+ [22285.7148, 3, 0],
+ [22628.57, 0, 0],
+ [22971.4277, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [23314.2852, 3, 0],
+ [23657.1426, 1, 0],
+ [24000, 2, 0],
+ [24342.8574, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [24685.7148, 2, 0],
+ [24857.1426, 2, 0],
+ [25028.57, 2, 0],
+ [25371.4277, 0, 0],
+ [25714.2852, 3, 0],
+ [25885.7148, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26400, 3, 0],
+ [26742.8574, 2, 0],
+ [27085.7148, 0, 0],
+ [27257.1426, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [27600, 0, 0],
+ [27771.4277, 3, 0],
+ [27942.8574, 3, 0],
+ [28114.2852, 0, 0],
+ [28285.7148, 0, 0],
+ [28457.1426, 3, 0],
+ [28628.57, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [28800, 3, 0],
+ [29142.8574, 1, 0],
+ [29485.7148, 2, 0],
+ [29828.57, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [30171.4277, 2, 0],
+ [30342.8574, 2, 0],
+ [30514.2852, 2, 0],
+ [30857.1426, 0, 0],
+ [31200, 3, 0],
+ [31371.4277, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [31885.7148, 3, 0],
+ [32228.57, 2, 0],
+ [32571.4277, 0, 0],
+ [32742.8574, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33085.7148, 0, 0],
+ [33257.14, 3, 0],
+ [33428.57, 3, 0],
+ [33600, 0, 0],
+ [33771.43, 0, 0],
+ [33942.8555, 3, 0],
+ [34114.2852, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [34285.7148, 3, 0],
+ [34628.57, 1, 0],
+ [34971.43, 2, 0],
+ [35314.2852, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [35657.14, 2, 0],
+ [36342.8555, 2, 0],
+ [36514.2852, 3, 0],
+ [36685.7148, 0, 0],
+ [36857.14, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [37028.57, 2, 0],
+ [37714.2852, 2, 0],
+ [37885.7148, 3, 0],
+ [38057.14, 0, 0],
+ [38228.57, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [38400, 2, 0],
+ [39085.7148, 2, 0],
+ [39257.14, 3, 0],
+ [39428.57, 0, 0],
+ [39600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [39771.43, 2, 0],
+ [40457.14, 2, 0],
+ [40628.57, 3, 0],
+ [40800, 0, 0],
+ [40971.43, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [41142.8555, 2, 0],
+ [41828.57, 2, 0],
+ [42000, 3, 0],
+ [42171.43, 0, 0],
+ [42342.8555, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [42514.2852, 2, 0],
+ [43200, 2, 0],
+ [43371.43, 3, 0],
+ [43542.8555, 0, 0],
+ [43714.2852, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [43885.7148, 2, 0],
+ [44571.43, 2, 0],
+ [44742.8555, 3, 0],
+ [44914.2852, 0, 0],
+ [45085.7148, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [45257.14, 2, 0],
+ [45942.8555, 2, 0],
+ [46114.2852, 3, 0],
+ [46285.7148, 0, 0],
+ [46457.14, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [46628.57, 2, 0],
+ [46971.43, 1, 0],
+ [47314.2852, 2, 0],
+ [47485.7148, 3, 0],
+ [47657.14, 0, 0],
+ [47828.57, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48000, 2, 0],
+ [48342.8555, 2, 0],
+ [48685.7148, 2, 0],
+ [48857.14, 3, 0],
+ [49028.57, 0, 0],
+ [49200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49371.43, 2, 0],
+ [49714.2852, 1, 0],
+ [50057.14, 2, 0],
+ [50228.57, 3, 0],
+ [50400, 0, 0],
+ [50571.43, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [50742.8555, 2, 0],
+ [51085.7148, 2, 0],
+ [51428.57, 2, 0],
+ [51600, 3, 0],
+ [51771.43, 0, 0],
+ [51942.8555, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [52114.2852, 2, 0],
+ [52457.14, 1, 0],
+ [52800, 2, 0],
+ [52971.43, 3, 0],
+ [53142.8555, 0, 0],
+ [53314.2852, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [53485.7148, 2, 0],
+ [53828.57, 2, 0],
+ [54171.43, 2, 0],
+ [54342.8555, 3, 0],
+ [54514.2852, 0, 0],
+ [54685.7148, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [54857.14, 2, 0],
+ [55200, 1, 0],
+ [55542.8555, 2, 0],
+ [55714.2852, 3, 0],
+ [55885.7148, 0, 0],
+ [56057.14, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56228.57, 2, 0],
+ [56571.43, 2, 0],
+ [56914.2852, 2, 0],
+ [57085.7148, 3, 0],
+ [57257.14, 0, 0],
+ [57428.57, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [57600, 3, 0],
+ [57942.8555, 1, 0],
+ [58285.7148, 2, 0],
+ [58800, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [58971.43, 2, 0],
+ [59314.2852, 3, 0],
+ [59657.14, 2, 0],
+ [60171.43, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [60342.8555, 3, 0],
+ [60685.7148, 1, 0],
+ [61028.57, 2, 0],
+ [61542.8555, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61714.2852, 2, 0],
+ [62057.14, 0, 0],
+ [62400, 2, 0],
+ [62742.8555, 0, 0],
+ [62914.2852, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [63085.7148, 3, 0],
+ [63428.57, 1, 0],
+ [63771.43, 2, 0],
+ [64285.7148, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [64457.14, 2, 0],
+ [64800, 3, 0],
+ [65142.8555, 2, 0],
+ [65657.14, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65828.57, 3, 0],
+ [66171.43, 1, 0],
+ [66514.28, 2, 0],
+ [67028.57, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [67200, 2, 0],
+ [67542.86, 0, 0],
+ [67885.71, 2, 0],
+ [68228.57, 0, 0],
+ [68400, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [68571.43, 2, 0],
+ [68914.28, 1, 0],
+ [69257.14, 2, 0],
+ [69600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [69942.86, 0, 0],
+ [70285.71, 1, 0],
+ [70628.57, 2, 0],
+ [70971.43, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [71314.28, 3, 0],
+ [71657.14, 0, 0],
+ [72000, 2, 0],
+ [72342.86, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72685.71, 3, 0],
+ [73028.57, 2, 0],
+ [73371.43, 2, 0],
+ [73542.86, 3, 0],
+ [73714.28, 0, 0],
+ [73885.71, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [74057.14, 2, 0],
+ [74400, 1, 0],
+ [74742.86, 2, 0],
+ [75085.71, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [75428.57, 0, 0],
+ [75771.43, 1, 0],
+ [76114.28, 2, 0],
+ [76457.14, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [76800, 3, 0],
+ [77142.86, 0, 0],
+ [77485.71, 2, 0],
+ [77828.57, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78171.43, 3, 0],
+ [78514.28, 2, 0],
+ [78857.14, 2, 0],
+ [79028.57, 3, 0],
+ [79200, 0, 0],
+ [79371.43, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [79542.86, 2, 0],
+ [79885.71, 1, 0],
+ [80228.57, 2, 0],
+ [80400, 3, 0],
+ [80571.43, 0, 0],
+ [80742.86, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [80914.28, 2, 0],
+ [81257.14, 2, 0],
+ [81600, 2, 0],
+ [81771.43, 3, 0],
+ [81942.86, 0, 0],
+ [82114.28, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [82285.71, 2, 0],
+ [82628.57, 1, 0],
+ [82971.43, 2, 0],
+ [83142.86, 3, 0],
+ [83314.28, 0, 0],
+ [83485.71, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [83657.14, 2, 0],
+ [84000, 2, 0],
+ [84342.86, 2, 0],
+ [84514.28, 3, 0],
+ [84685.71, 0, 0],
+ [84857.14, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [85028.57, 2, 0],
+ [85371.43, 1, 0],
+ [85714.28, 2, 0],
+ [85885.71, 3, 0],
+ [86057.14, 0, 0],
+ [86228.57, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [86400, 2, 0],
+ [86742.86, 2, 0],
+ [87085.71, 2, 0],
+ [87257.14, 3, 0],
+ [87428.57, 0, 0],
+ [87600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [87771.43, 2, 0],
+ [88114.28, 1, 0],
+ [88457.14, 2, 0],
+ [88628.57, 3, 0],
+ [88800, 0, 0],
+ [88971.43, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [89142.86, 2, 0],
+ [89485.71, 2, 0],
+ [89828.57, 2, 0],
+ [90000, 3, 0],
+ [90171.43, 0, 0],
+ [90342.86, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[90514.28, 1, 0]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 175,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "pico",
+ "song": "Philly Nice",
+ "stage": "philly",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 175,
+ "speed": 1.3
+ }
+}
diff --git a/assets/preload/data/songs/pico/_meta.json b/assets/preload/data/songs/pico/_meta.json
new file mode 100644
index 0000000000..4c2eee6beb
--- /dev/null
+++ b/assets/preload/data/songs/pico/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/songs/pico/pico-easy.json b/assets/preload/data/songs/pico/pico-easy.json
new file mode 100644
index 0000000000..390b84c0fa
--- /dev/null
+++ b/assets/preload/data/songs/pico/pico-easy.json
@@ -0,0 +1,483 @@
+{
+ "song": {
+ "player1": "bf",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [3799.99976, 2, 0],
+ [4600, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [5000, 0, 0],
+ [5400, 2, 0],
+ [6200, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [6999.99951, 2, 0],
+ [7799.99951, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [8200, 0, 0],
+ [8600, 2, 0],
+ [9400, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [10200, 2, 0],
+ [11000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [11400, 0, 0],
+ [11800, 2, 0],
+ [12600, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [13399.999, 2, 0],
+ [14199.999, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [14599.999, 0, 0],
+ [14999.999, 2, 0],
+ [15799.999, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [16199.999, 2, 0],
+ [16800, 3, 0],
+ [17200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [17800, 3, 0],
+ [18400, 2, 0],
+ [18800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [19400, 3, 0],
+ [20000, 2, 0],
+ [20400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [21000, 2, 0],
+ [21600, 3, 0],
+ [22000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [22600, 2, 0],
+ [23200, 3, 0],
+ [23600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [24200, 3, 0],
+ [24800, 2, 0],
+ [25200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [25799.998, 3, 0],
+ [26399.998, 2, 0],
+ [26799.998, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [27399.998, 2, 0],
+ [27999.998, 3, 0],
+ [28399.998, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [28999.998, 0, 0],
+ [29599.998, 2, 0],
+ [29999.998, 1, 0],
+ [30199.998, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [30399.998, 2, 0],
+ [30599.998, 3, 0],
+ [30799.998, 3, 0],
+ [31199.998, 0, 300],
+ [31599.998, 1, 200]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [32199.998, 3, 0],
+ [32800, 3, 0],
+ [33200, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [33600, 0, 0],
+ [34000, 3, 0],
+ [34400, 2, 300],
+ [34800, 1, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [35400, 0, 0],
+ [36000, 2, 0],
+ [36400, 1, 0],
+ [36600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [36800, 2, 0],
+ [37000, 3, 0],
+ [37200, 3, 0],
+ [37600, 0, 300],
+ [38000, 1, 200]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [38600, 3, 0],
+ [39200, 3, 0],
+ [39600, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [40000, 0, 0],
+ [40400, 3, 0],
+ [40800, 2, 300],
+ [41200, 1, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [41800, 2, 0],
+ [42400, 3, 0],
+ [42800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [43400, 2, 0],
+ [44000, 3, 0],
+ [44400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [45000, 3, 0],
+ [45600, 2, 0],
+ [46000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [46600, 2, 0],
+ [47200, 3, 0],
+ [47600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48200, 2, 0],
+ [48800, 3, 0],
+ [49200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [49800, 2, 0],
+ [50400, 3, 0],
+ [50800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [51399.9961, 3, 0],
+ [51999.9961, 2, 0],
+ [52399.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [52999.9961, 2, 0],
+ [53599.9961, 3, 0],
+ [53999.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [54399.9961, 6, 200],
+ [54599.9961, 2, 0],
+ [54999.9961, 7, 0],
+ [55199.9961, 3, 0],
+ [55199.9961, 5, 0],
+ [55599.9961, 1, 0],
+ [55599.9961, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [55999.9961, 0, 0],
+ [56199.9961, 4, 0],
+ [56499.9961, 0, 0],
+ [56799.9961, 7, 0],
+ [56799.9961, 1, 200],
+ [57199.9961, 6, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [57599.9961, 6, 200],
+ [57799.9961, 3, 0],
+ [58399.9961, 2, 0],
+ [58399.9961, 5, 0],
+ [58799.9961, 1, 0],
+ [58799.9961, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [59199.9961, 4, 0],
+ [59399.9961, 0, 0],
+ [59699.9961, 4, 0],
+ [59999.9961, 3, 0],
+ [60099.9961, 6, 0],
+ [60399.9961, 2, 0],
+ [60499.9961, 4, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [60999.9961, 2, 0],
+ [61599.9961, 3, 0],
+ [61999.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [62599.9961, 0, 0],
+ [63199.9961, 3, 0],
+ [63599.9961, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [64199.9961, 3, 0],
+ [64799.9961, 2, 0],
+ [65199.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65800, 0, 0],
+ [66400, 3, 0],
+ [66800, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [67400, 0, 0],
+ [68000, 2, 0],
+ [68400, 1, 0],
+ [68600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [68800, 2, 0],
+ [69000, 3, 0],
+ [69200, 3, 0],
+ [69600, 0, 300],
+ [70000, 1, 200]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [70600, 3, 0],
+ [71200, 3, 0],
+ [71600, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72000, 0, 0],
+ [72400, 3, 0],
+ [72800, 2, 300],
+ [73200, 1, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [73800, 0, 0],
+ [74400, 2, 0],
+ [74800, 1, 0],
+ [75000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [75200, 2, 0],
+ [75400, 3, 0],
+ [75600, 3, 0],
+ [76000, 0, 300],
+ [76400, 1, 200]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [77000, 3, 0],
+ [77600, 3, 0],
+ [78000, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78400, 0, 0],
+ [78800, 3, 0],
+ [79200, 2, 300],
+ [79600, 1, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 150,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "pico",
+ "song": "Pico",
+ "stage": "philly",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 150,
+ "speed": 1.2
+ }
+}
diff --git a/assets/preload/data/songs/pico/pico-hard.json b/assets/preload/data/songs/pico/pico-hard.json
new file mode 100644
index 0000000000..f0cfe26e9b
--- /dev/null
+++ b/assets/preload/data/songs/pico/pico-hard.json
@@ -0,0 +1,640 @@
+{
+ "song": {
+ "player1": "bf",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [3799.99976, 2, 0],
+ [3999.99976, 3, 0],
+ [4200, 2, 0],
+ [4600, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [5000, 0, 0],
+ [5400, 2, 0],
+ [5600, 3, 0],
+ [5800, 2, 0],
+ [6200, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [6999.99951, 2, 0],
+ [7199.99951, 3, 0],
+ [7399.99951, 2, 0],
+ [7799.99951, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [8200, 0, 0],
+ [8600, 2, 0],
+ [8800, 3, 0],
+ [9000, 2, 0],
+ [9400, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [10200, 2, 0],
+ [10400, 3, 0],
+ [10600, 2, 0],
+ [11000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [11400, 0, 0],
+ [11800, 2, 0],
+ [12000, 3, 0],
+ [12200, 2, 0],
+ [12600, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [13399.999, 2, 0],
+ [13599.999, 3, 0],
+ [13799.999, 2, 0],
+ [14199.999, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [14599.999, 0, 0],
+ [14999.999, 2, 0],
+ [15199.999, 3, 0],
+ [15399.999, 2, 0],
+ [15799.999, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [16199.999, 2, 0],
+ [16400, 3, 0],
+ [16600, 0, 0],
+ [16800, 3, 0],
+ [17000, 0, 0],
+ [17200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [17800, 3, 0],
+ [18000, 0, 0],
+ [18200, 2, 0],
+ [18400, 3, 0],
+ [18600, 0, 0],
+ [18800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [19400, 3, 0],
+ [19600, 0, 0],
+ [19800, 3, 0],
+ [20000, 2, 0],
+ [20200, 0, 0],
+ [20400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [21000, 2, 0],
+ [21200, 3, 0],
+ [21400, 0, 0],
+ [21600, 3, 0],
+ [21800, 0, 0],
+ [22000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [22600, 2, 0],
+ [22800, 3, 0],
+ [23000, 0, 0],
+ [23200, 3, 0],
+ [23400, 0, 0],
+ [23600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [24200, 3, 0],
+ [24400, 0, 0],
+ [24600, 2, 0],
+ [24800, 3, 0],
+ [25000, 0, 0],
+ [25200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [25799.998, 3, 0],
+ [25999.998, 0, 0],
+ [26199.998, 3, 0],
+ [26399.998, 2, 0],
+ [26599.998, 0, 0],
+ [26799.998, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [27399.998, 2, 0],
+ [27599.998, 3, 0],
+ [27799.998, 0, 0],
+ [27999.998, 3, 0],
+ [28199.998, 0, 0],
+ [28399.998, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [28999.998, 0, 0],
+ [29199.998, 3, 0],
+ [29399.998, 2, 0],
+ [29599.998, 2, 0],
+ [29799.998, 3, 0],
+ [29999.998, 1, 0],
+ [30199.998, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [30399.998, 2, 0],
+ [30599.998, 3, 0],
+ [30699.998, 0, 0],
+ [30799.998, 3, 0],
+ [30999.998, 2, 0],
+ [31199.998, 0, 300],
+ [31599.998, 1, 200]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [32199.998, 3, 0],
+ [32399.998, 1, 0],
+ [32599.998, 2, 0],
+ [32800, 3, 0],
+ [33000, 1, 0],
+ [33200, 2, 0],
+ [33400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [33600, 0, 0],
+ [33800, 0, 0],
+ [34000, 3, 0],
+ [34200, 3, 0],
+ [34400, 2, 300],
+ [34800, 1, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [35400, 0, 0],
+ [35600, 3, 0],
+ [35800, 2, 0],
+ [36000, 2, 0],
+ [36200, 3, 0],
+ [36400, 1, 0],
+ [36600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [36800, 2, 0],
+ [37000, 3, 0],
+ [37100, 0, 0],
+ [37200, 3, 0],
+ [37400, 2, 0],
+ [37600, 0, 300],
+ [38000, 1, 200]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [38400, 2, 0],
+ [38600, 3, 0],
+ [38800, 1, 0],
+ [39000, 2, 0],
+ [39200, 3, 0],
+ [39400, 1, 0],
+ [39600, 2, 0],
+ [39800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [40000, 0, 0],
+ [40200, 0, 0],
+ [40400, 3, 0],
+ [40600, 3, 0],
+ [40800, 2, 300],
+ [41200, 1, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [41800, 2, 0],
+ [42000, 3, 0],
+ [42200, 0, 0],
+ [42400, 3, 0],
+ [42600, 0, 0],
+ [42700, 3, 0],
+ [42800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [43400, 2, 0],
+ [43600, 0, 0],
+ [43800, 3, 0],
+ [44000, 3, 0],
+ [44200, 0, 0],
+ [44300, 3, 0],
+ [44400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [45000, 3, 0],
+ [45200, 0, 0],
+ [45400, 0, 0],
+ [45600, 2, 0],
+ [45800, 0, 0],
+ [45900, 3, 0],
+ [46000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [46600, 2, 0],
+ [46800, 3, 0],
+ [47000, 0, 0],
+ [47200, 3, 0],
+ [47400, 0, 0],
+ [47500, 3, 0],
+ [47600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48200, 2, 0],
+ [48400, 3, 0],
+ [48600, 0, 0],
+ [48800, 3, 0],
+ [49000, 0, 0],
+ [49100, 3, 0],
+ [49200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [49800, 2, 0],
+ [50000, 0, 0],
+ [50200, 3, 0],
+ [50400, 3, 0],
+ [50600, 0, 0],
+ [50700, 3, 0],
+ [50800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [51399.9961, 3, 0],
+ [51599.9961, 0, 0],
+ [51799.9961, 0, 0],
+ [51999.9961, 2, 0],
+ [52199.9961, 0, 0],
+ [52299.9961, 3, 0],
+ [52399.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [52999.9961, 2, 0],
+ [53199.9961, 3, 0],
+ [53399.9961, 0, 0],
+ [53599.9961, 3, 0],
+ [53799.9961, 0, 0],
+ [53899.9961, 3, 0],
+ [53999.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [54399.9961, 6, 200],
+ [54599.9961, 2, 0],
+ [54799.9961, 3, 0],
+ [54999.9961, 0, 0],
+ [54999.9961, 7, 0],
+ [55199.9961, 3, 0],
+ [55199.9961, 5, 0],
+ [55399.9961, 0, 0],
+ [55499.9961, 3, 0],
+ [55599.9961, 1, 0],
+ [55599.9961, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [55999.9961, 0, 0],
+ [56199.9961, 6, 0],
+ [56199.9961, 2, 0],
+ [56399.9961, 0, 0],
+ [56399.9961, 4, 0],
+ [56599.9961, 7, 0],
+ [56599.9961, 3, 0],
+ [56799.9961, 7, 0],
+ [56799.9961, 1, 200],
+ [56999.9961, 4, 0],
+ [57099.9961, 7, 0],
+ [57199.9961, 5, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [57599.9961, 6, 200],
+ [57799.9961, 3, 0],
+ [57999.9961, 0, 0],
+ [58199.9961, 0, 0],
+ [58199.9961, 7, 0],
+ [58399.9961, 2, 0],
+ [58399.9961, 5, 0],
+ [58599.9961, 0, 0],
+ [58699.9961, 3, 0],
+ [58799.9961, 1, 0],
+ [58799.9961, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [59199.9961, 4, 0],
+ [59399.9961, 2, 0],
+ [59399.9961, 6, 0],
+ [59599.9961, 4, 0],
+ [59599.9961, 3, 0],
+ [59799.9961, 0, 0],
+ [59799.9961, 7, 0],
+ [59999.9961, 6, 0],
+ [59999.9961, 3, 0],
+ [60199.9961, 6, 0],
+ [60199.9961, 0, 0],
+ [60299.9961, 3, 0],
+ [60399.9961, 4, 0],
+ [60399.9961, 1, 0],
+ [60599.9961, 4, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [60999.9961, 2, 0],
+ [61199.9961, 3, 0],
+ [61399.9961, 0, 0],
+ [61599.9961, 3, 0],
+ [61799.9961, 0, 0],
+ [61899.9961, 3, 0],
+ [61999.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [62599.9961, 2, 0],
+ [62799.9961, 0, 0],
+ [62999.9961, 3, 0],
+ [63199.9961, 3, 0],
+ [63399.9961, 0, 0],
+ [63499.9961, 3, 0],
+ [63599.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [64199.9961, 3, 0],
+ [64399.9961, 0, 0],
+ [64599.9961, 0, 0],
+ [64799.9961, 2, 0],
+ [64999.9961, 0, 0],
+ [65099.9961, 3, 0],
+ [65199.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65800, 2, 0],
+ [66000, 3, 0],
+ [66200, 0, 0],
+ [66400, 3, 0],
+ [66600, 0, 0],
+ [66700, 3, 0],
+ [66800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [67400, 0, 0],
+ [67600, 3, 0],
+ [67800, 2, 0],
+ [68000, 2, 0],
+ [68200, 3, 0],
+ [68400, 1, 0],
+ [68600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [68800, 2, 0],
+ [69000, 3, 0],
+ [69100, 0, 0],
+ [69200, 3, 0],
+ [69400, 2, 0],
+ [69600, 0, 300],
+ [70000, 1, 200]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [70600, 3, 0],
+ [70800, 1, 0],
+ [71000, 2, 0],
+ [71200, 3, 0],
+ [71400, 1, 0],
+ [71600, 2, 0],
+ [71800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72000, 0, 0],
+ [72200, 0, 0],
+ [72400, 3, 0],
+ [72600, 3, 0],
+ [72800, 2, 300],
+ [73200, 1, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [73800, 0, 0],
+ [74000, 3, 0],
+ [74200, 2, 0],
+ [74400, 2, 0],
+ [74600, 3, 0],
+ [74800, 1, 0],
+ [75000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [75200, 2, 0],
+ [75400, 3, 0],
+ [75500, 0, 0],
+ [75600, 3, 0],
+ [75800, 2, 0],
+ [76000, 0, 300],
+ [76400, 1, 200]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [76800, 2, 0],
+ [77000, 3, 0],
+ [77200, 1, 0],
+ [77400, 2, 0],
+ [77600, 3, 0],
+ [77800, 1, 0],
+ [78000, 2, 0],
+ [78200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78400, 0, 0],
+ [78600, 0, 0],
+ [78800, 3, 0],
+ [79000, 3, 0],
+ [79200, 2, 300],
+ [79600, 1, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 150,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "pico",
+ "song": "Pico",
+ "stage": "philly",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 150,
+ "speed": 1.6
+ }
+}
diff --git a/assets/preload/data/songs/pico/pico.json b/assets/preload/data/songs/pico/pico.json
new file mode 100644
index 0000000000..c1f231f2b6
--- /dev/null
+++ b/assets/preload/data/songs/pico/pico.json
@@ -0,0 +1,565 @@
+{
+ "song": {
+ "player1": "bf",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [3799.99976, 2, 0],
+ [3999.99976, 3, 0],
+ [4200, 2, 0],
+ [4600, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [5000, 0, 0],
+ [5400, 2, 0],
+ [5600, 3, 0],
+ [5800, 2, 0],
+ [6200, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [6999.99951, 2, 0],
+ [7199.99951, 3, 0],
+ [7399.99951, 2, 0],
+ [7799.99951, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [8200, 0, 0],
+ [8600, 2, 0],
+ [8800, 3, 0],
+ [9000, 2, 0],
+ [9400, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [10200, 2, 0],
+ [10400, 3, 0],
+ [10600, 2, 0],
+ [11000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [11400, 0, 0],
+ [11800, 2, 0],
+ [12000, 3, 0],
+ [12200, 2, 0],
+ [12600, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [13399.999, 2, 0],
+ [13599.999, 3, 0],
+ [13799.999, 2, 0],
+ [14199.999, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [14599.999, 0, 0],
+ [14999.999, 2, 0],
+ [15199.999, 3, 0],
+ [15399.999, 2, 0],
+ [15799.999, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [16199.999, 2, 0],
+ [16800, 3, 0],
+ [17000, 0, 0],
+ [17200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [17800, 3, 0],
+ [18400, 3, 0],
+ [18600, 0, 0],
+ [18800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [19400, 3, 0],
+ [20000, 2, 0],
+ [20200, 0, 0],
+ [20400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [21000, 2, 0],
+ [21600, 3, 0],
+ [21800, 0, 0],
+ [22000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [22600, 2, 0],
+ [23200, 3, 0],
+ [23400, 0, 0],
+ [23600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [24200, 3, 0],
+ [24800, 3, 0],
+ [25000, 0, 0],
+ [25200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [25799.998, 3, 0],
+ [26399.998, 2, 0],
+ [26599.998, 0, 0],
+ [26799.998, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [27399.998, 2, 0],
+ [27999.998, 3, 0],
+ [28199.998, 0, 0],
+ [28399.998, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [28999.998, 0, 0],
+ [29199.998, 3, 0],
+ [29599.998, 2, 0],
+ [29999.998, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [30399.998, 2, 0],
+ [30599.998, 3, 0],
+ [30699.998, 0, 0],
+ [30799.998, 3, 0],
+ [31199.998, 0, 300],
+ [31599.998, 1, 200]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [32199.998, 3, 0],
+ [32399.998, 1, 0],
+ [32800, 3, 0],
+ [33000, 1, 0],
+ [33400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [33600, 0, 0],
+ [33800, 0, 0],
+ [34000, 3, 0],
+ [34200, 3, 0],
+ [34400, 2, 300],
+ [34800, 1, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [35400, 0, 0],
+ [35600, 3, 0],
+ [36000, 2, 0],
+ [36400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [36800, 2, 0],
+ [37000, 3, 0],
+ [37100, 0, 0],
+ [37200, 3, 0],
+ [37600, 0, 300],
+ [38000, 1, 200]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [38600, 3, 0],
+ [38800, 1, 0],
+ [39200, 3, 0],
+ [39400, 1, 0],
+ [39800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [40000, 0, 0],
+ [40200, 0, 0],
+ [40400, 3, 0],
+ [40600, 3, 0],
+ [40800, 2, 300],
+ [41200, 1, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [41800, 2, 0],
+ [42400, 3, 0],
+ [42600, 0, 0],
+ [42700, 3, 0],
+ [42800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [43400, 2, 0],
+ [44000, 3, 0],
+ [44200, 0, 0],
+ [44300, 3, 0],
+ [44400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [45000, 3, 0],
+ [45600, 2, 0],
+ [45800, 0, 0],
+ [45900, 3, 0],
+ [46000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [46600, 2, 0],
+ [47200, 3, 0],
+ [47400, 0, 0],
+ [47500, 3, 0],
+ [47600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48200, 2, 0],
+ [48800, 3, 0],
+ [49000, 0, 0],
+ [49100, 3, 0],
+ [49200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [49800, 2, 0],
+ [50400, 3, 0],
+ [50600, 0, 0],
+ [50700, 3, 0],
+ [50800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [51399.9961, 3, 0],
+ [51999.9961, 2, 0],
+ [52199.9961, 0, 0],
+ [52299.9961, 3, 0],
+ [52399.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [52999.9961, 2, 0],
+ [53599.9961, 3, 0],
+ [53799.9961, 0, 0],
+ [53899.9961, 3, 0],
+ [53999.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [54399.9961, 6, 200],
+ [54599.9961, 2, 0],
+ [54999.9961, 7, 0],
+ [55199.9961, 3, 0],
+ [55199.9961, 5, 0],
+ [55399.9961, 0, 0],
+ [55499.9961, 3, 0],
+ [55599.9961, 1, 0],
+ [55599.9961, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [55999.9961, 0, 0],
+ [56199.9961, 6, 0],
+ [56399.9961, 0, 0],
+ [56599.9961, 3, 0],
+ [56799.9961, 7, 0],
+ [56799.9961, 1, 200],
+ [56999.9961, 4, 0],
+ [57099.9961, 7, 0],
+ [57199.9961, 5, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [57599.9961, 6, 200],
+ [57799.9961, 3, 0],
+ [58199.9961, 7, 0],
+ [58399.9961, 2, 0],
+ [58399.9961, 5, 0],
+ [58599.9961, 0, 0],
+ [58699.9961, 3, 0],
+ [58799.9961, 1, 0],
+ [58799.9961, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [59199.9961, 4, 0],
+ [59399.9961, 2, 0],
+ [59399.9961, 6, 0],
+ [59599.9961, 4, 0],
+ [59799.9961, 7, 0],
+ [59999.9961, 3, 0],
+ [59999.9961, 6, 0],
+ [60199.9961, 0, 0],
+ [60199.9961, 6, 0],
+ [60299.9961, 3, 0],
+ [60399.9961, 1, 0],
+ [60399.9961, 4, 0],
+ [60599.9961, 4, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [60999.9961, 2, 0],
+ [61599.9961, 3, 0],
+ [61799.9961, 0, 0],
+ [61899.9961, 3, 0],
+ [61999.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [62599.9961, 2, 0],
+ [63199.9961, 3, 0],
+ [63399.9961, 0, 0],
+ [63499.9961, 3, 0],
+ [63599.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [64199.9961, 3, 0],
+ [64799.9961, 2, 0],
+ [64999.9961, 0, 0],
+ [65099.9961, 3, 0],
+ [65199.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65800, 2, 0],
+ [66400, 3, 0],
+ [66600, 0, 0],
+ [66700, 3, 0],
+ [66800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [67400, 0, 0],
+ [67600, 3, 0],
+ [68000, 2, 0],
+ [68400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [68800, 2, 0],
+ [69000, 3, 0],
+ [69100, 0, 0],
+ [69200, 3, 0],
+ [69600, 0, 300],
+ [70000, 1, 200]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [70600, 3, 0],
+ [70800, 1, 0],
+ [71200, 3, 0],
+ [71400, 1, 0],
+ [71800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72000, 0, 0],
+ [72200, 0, 0],
+ [72400, 3, 0],
+ [72600, 3, 0],
+ [72800, 2, 300],
+ [73200, 1, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [73800, 0, 0],
+ [74000, 3, 0],
+ [74400, 2, 0],
+ [74800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [75200, 2, 0],
+ [75400, 3, 0],
+ [75500, 0, 0],
+ [75600, 3, 0],
+ [76000, 0, 300],
+ [76400, 1, 200]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [77000, 3, 0],
+ [77200, 1, 0],
+ [77600, 3, 0],
+ [77800, 1, 0],
+ [78200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78400, 0, 0],
+ [78600, 0, 0],
+ [78800, 3, 0],
+ [79000, 3, 0],
+ [79200, 2, 300],
+ [79600, 1, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 150,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "pico",
+ "song": "Pico",
+ "stage": "philly",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 150,
+ "speed": 1.4
+ }
+}
diff --git a/assets/preload/data/songs/ridge/_meta.json b/assets/preload/data/songs/ridge/_meta.json
new file mode 100644
index 0000000000..4c2eee6beb
--- /dev/null
+++ b/assets/preload/data/songs/ridge/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/ridge/ridge.json b/assets/preload/data/songs/ridge/ridge.json
similarity index 100%
rename from assets/preload/data/ridge/ridge.json
rename to assets/preload/data/songs/ridge/ridge.json
diff --git a/assets/preload/data/songs/roses/_meta.json b/assets/preload/data/songs/roses/_meta.json
new file mode 100644
index 0000000000..b645903598
--- /dev/null
+++ b/assets/preload/data/songs/roses/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": -30
+}
\ No newline at end of file
diff --git a/assets/preload/data/roses/dialogue.txt b/assets/preload/data/songs/roses/dialogue.txt
similarity index 100%
rename from assets/preload/data/roses/dialogue.txt
rename to assets/preload/data/songs/roses/dialogue.txt
diff --git a/assets/preload/data/songs/roses/roses-easy.json b/assets/preload/data/songs/roses/roses-easy.json
new file mode 100644
index 0000000000..4f10dec29d
--- /dev/null
+++ b/assets/preload/data/songs/roses/roses-easy.json
@@ -0,0 +1,525 @@
+{
+ "song": {
+ "player1": "bf-pixel",
+ "gfVersion": "gf-pixel",
+ "notes": [
+ {
+ "sectionNotes": [
+ [500, 3, 0],
+ [1000, 0, 250],
+ [1375, 1, 0],
+ [1875, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [2375, 2, 0],
+ [3000, 3, 250],
+ [3375, 3, 0],
+ [3625, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [4500, 3, 0],
+ [5000, 0, 250],
+ [5375, 1, 0],
+ [5875, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [6375, 2, 0],
+ [7000, 3, 250],
+ [7375, 3, 0],
+ [7625, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [8000, 2, 125],
+ [8500, 2, 0],
+ [8875, 3, 250],
+ [9500, 0, 0],
+ [9875, 3, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [10250, 1, 0],
+ [10500, 3, 0],
+ [10875, 3, 250],
+ [11250, 1, 0],
+ [11500, 0, 0],
+ [11750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [12000, 2, 125],
+ [12500, 2, 0],
+ [12875, 3, 250],
+ [13500, 0, 0],
+ [13875, 3, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [14250, 1, 0],
+ [14500, 3, 0],
+ [14875, 3, 250],
+ [15250, 1, 0],
+ [15500, 0, 0],
+ [15750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [16500, 0, 0],
+ [17000, 3, 125],
+ [17250, 1, 0],
+ [17500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [18000, 0, 0],
+ [18250, 3, 0],
+ [18500, 0, 0],
+ [19000, 3, 0],
+ [19250, 1, 0],
+ [19500, 0, 0],
+ [19750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [20500, 0, 0],
+ [21000, 3, 125],
+ [21250, 1, 0],
+ [21500, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [22000, 0, 0],
+ [22250, 3, 0],
+ [22500, 0, 0],
+ [23000, 3, 0],
+ [23250, 1, 0],
+ [23500, 0, 0],
+ [23750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [24000, 2, 0],
+ [24625, 0, 0],
+ [25000, 3, 0],
+ [25375, 3, 0],
+ [25625, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26000, 2, 0],
+ [26625, 0, 0],
+ [27000, 3, 0],
+ [27375, 3, 0],
+ [27625, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [28000, 2, 0],
+ [28625, 0, 0],
+ [29000, 3, 0],
+ [29375, 3, 0],
+ [29625, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30000, 2, 0],
+ [30625, 0, 0],
+ [31000, 3, 0],
+ [31375, 3, 0],
+ [31625, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32000, 0, 0],
+ [32500.002, 3, 0],
+ [33000, 2, 0],
+ [33375, 3, 0],
+ [33750, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [34000, 1, 0],
+ [34500, 3, 0],
+ [35000, 2, 0],
+ [35375, 3, 0],
+ [35750, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [36000, 0, 0],
+ [36500, 3, 0],
+ [37000, 2, 0],
+ [37375, 3, 0],
+ [37750, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [38000, 1, 0],
+ [38500, 3, 0],
+ [39000, 2, 0],
+ [39375, 3, 0],
+ [39750, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [40000, 1, 0],
+ [40500, 2, 0],
+ [40750, 3, 0],
+ [41000, 2, 0],
+ [41375, 1, 0],
+ [41750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [42000, 1, 0],
+ [42500, 2, 0],
+ [42750, 3, 0],
+ [43000, 2, 0],
+ [43375, 3, 0],
+ [43750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [44000, 1, 0],
+ [44500, 2, 0],
+ [44750, 3, 0],
+ [45000, 2, 0],
+ [45375, 1, 0],
+ [45750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [46000, 1, 0],
+ [46500, 2, 0],
+ [46750, 3, 0],
+ [47000, 2, 0],
+ [47375, 3, 0],
+ [47750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [48000, 2, 0],
+ [48625, 0, 0],
+ [48875, 0, 0],
+ [49125, 3, 0],
+ [49375, 3, 0],
+ [49500, 0, 375]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [50000, 2, 0],
+ [50750, 2, 0],
+ [50875, 0, 0],
+ [51250, 3, 0],
+ [51375, 0, 0],
+ [51500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [52000, 2, 0],
+ [52625, 0, 0],
+ [52875, 0, 0],
+ [53125, 3, 0],
+ [53375, 3, 0],
+ [53500, 0, 375]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [54000, 2, 0],
+ [54750, 2, 0],
+ [54875, 0, 0],
+ [55250, 3, 0],
+ [55375, 0, 0],
+ [55500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56000, 0, 0],
+ [56375, 0, 0],
+ [56500, 3, 0],
+ [57000, 0, 0],
+ [57375, 0, 0],
+ [57500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [58000, 0, 0],
+ [58375, 0, 0],
+ [58500, 3, 0],
+ [59000, 0, 0],
+ [59375, 0, 0],
+ [59500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [60000, 0, 0],
+ [60375, 0, 0],
+ [60500, 3, 0],
+ [61000, 0, 0],
+ [61375, 0, 0],
+ [61500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [62000, 0, 0],
+ [62375, 0, 0],
+ [62500, 3, 0],
+ [63000, 0, 0],
+ [63375, 0, 0],
+ [63500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [64500.0039, 3, 0],
+ [65000.0039, 0, 250],
+ [65375.0039, 1, 0],
+ [65875, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [66375, 2, 0],
+ [67000, 3, 250],
+ [67375, 3, 0],
+ [67625, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [68500, 3, 0],
+ [69000, 0, 250],
+ [69375, 1, 0],
+ [69875, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [70375, 2, 0],
+ [71000, 3, 250],
+ [71375, 3, 0],
+ [71625, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [72000, 2, 125],
+ [72500, 2, 0],
+ [72875, 3, 250],
+ [73500, 0, 0],
+ [73875, 3, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [74250, 1, 0],
+ [74500, 3, 0],
+ [74875, 3, 250],
+ [75250, 1, 0],
+ [75500, 0, 0],
+ [75750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [76000, 2, 125],
+ [76500, 2, 0],
+ [76875, 3, 250],
+ [77500, 0, 0],
+ [77875, 3, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78250, 1, 0],
+ [78500, 3, 0],
+ [78875, 3, 250],
+ [79250, 1, 0],
+ [79500, 0, 0],
+ [79750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80000, 0, 0],
+ [80375, 0, 0],
+ [80500, 3, 0],
+ [81000, 0, 0],
+ [81375, 0, 0],
+ [81500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [82000, 0, 0],
+ [82375, 0, 0],
+ [82500, 3, 0],
+ [83000, 0, 0],
+ [83375, 0, 0],
+ [83500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [84000, 0, 0],
+ [84375, 0, 0],
+ [84500, 3, 0],
+ [85000, 0, 0],
+ [85375, 0, 0],
+ [85500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [86000, 0, 0],
+ [86375, 0, 0],
+ [86500, 3, 0],
+ [87000, 0, 0],
+ [87375, 0, 0],
+ [87500, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 120,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "senpai-angry",
+ "song": "Roses",
+ "stage": "school",
+ "needsVoices": true,
+ "validScore": true,
+ "noteStyle": "pixel",
+ "bpm": 120,
+ "speed": 1.2
+ }
+}
diff --git a/assets/preload/data/songs/roses/roses-hard.json b/assets/preload/data/songs/roses/roses-hard.json
new file mode 100644
index 0000000000..e8884b6ae5
--- /dev/null
+++ b/assets/preload/data/songs/roses/roses-hard.json
@@ -0,0 +1,757 @@
+{
+ "song": {
+ "player1": "bf-pixel",
+ "gfVersion": "gf-pixel",
+ "notes": [
+ {
+ "sectionNotes": [
+ [500, 3, 0],
+ [750, 1, 0],
+ [1000, 0, 250],
+ [1375, 1, 0],
+ [1875, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [2125, 2, 0],
+ [2375, 2, 0],
+ [2500, 0, 0],
+ [2625, 1, 0],
+ [2750, 0, 0],
+ [3000, 3, 250],
+ [3375, 3, 0],
+ [3625, 0, 0],
+ [3875, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [4500, 3, 0],
+ [4750, 1, 0],
+ [5000, 0, 250],
+ [5375, 1, 0],
+ [5875, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [6125, 2, 0],
+ [6375, 2, 0],
+ [6500, 0, 0],
+ [6625, 1, 0],
+ [6750, 0, 0],
+ [7000, 3, 250],
+ [7375, 3, 0],
+ [7625, 0, 0],
+ [7875, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [8000, 2, 125],
+ [8250, 3, 0],
+ [8500, 2, 0],
+ [8625, 1, 0],
+ [8750, 0, 0],
+ [8875, 3, 250],
+ [9250, 1, 0],
+ [9500, 0, 0],
+ [9750, 1, 0],
+ [9875, 3, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [10250, 1, 0],
+ [10500, 3, 0],
+ [10750, 2, 0],
+ [10875, 3, 250],
+ [11250, 1, 0],
+ [11500, 0, 0],
+ [11750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [12000, 2, 125],
+ [12250, 3, 0],
+ [12500, 2, 0],
+ [12625, 1, 0],
+ [12750, 0, 0],
+ [12875, 3, 250],
+ [13250, 1, 0],
+ [13500, 0, 0],
+ [13750, 1, 0],
+ [13875, 3, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [14250, 1, 0],
+ [14500, 3, 0],
+ [14750, 2, 0],
+ [14875, 3, 250],
+ [15250, 1, 0],
+ [15500, 0, 0],
+ [15750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [16500, 0, 0],
+ [16625, 2, 0],
+ [16750, 0, 0],
+ [16875, 2, 0],
+ [17000, 3, 125],
+ [17250, 1, 0],
+ [17500, 0, 0],
+ [17750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [18000, 0, 0],
+ [18250, 3, 0],
+ [18500, 0, 0],
+ [18750, 2, 0],
+ [19000, 3, 0],
+ [19250, 1, 0],
+ [19500, 0, 0],
+ [19750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [20500, 0, 0],
+ [20625, 2, 0],
+ [20750, 0, 0],
+ [20875, 2, 0],
+ [21000, 3, 125],
+ [21250, 1, 0],
+ [21500, 0, 0],
+ [21750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [22000, 0, 0],
+ [22250, 3, 0],
+ [22500, 0, 0],
+ [22750, 2, 0],
+ [23000, 3, 0],
+ [23250, 1, 0],
+ [23500, 0, 0],
+ [23750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [24000, 2, 0],
+ [24250, 0, 0],
+ [24375, 1, 0],
+ [24625, 0, 0],
+ [24750, 3, 0],
+ [25000, 3, 0],
+ [25250, 1, 0],
+ [25375, 3, 0],
+ [25625, 0, 0],
+ [25750, 3, 0],
+ [25875, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26000, 2, 0],
+ [26250, 0, 0],
+ [26375, 1, 0],
+ [26625, 0, 0],
+ [26750, 3, 0],
+ [27000, 3, 0],
+ [27250, 1, 0],
+ [27375, 3, 0],
+ [27625, 0, 0],
+ [27750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [28000, 2, 0],
+ [28250, 0, 0],
+ [28375, 1, 0],
+ [28625, 0, 0],
+ [28750, 3, 0],
+ [29000, 3, 0],
+ [29250, 1, 0],
+ [29375, 3, 0],
+ [29625, 0, 0],
+ [29750, 3, 0],
+ [29875, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30000, 2, 0],
+ [30250, 0, 0],
+ [30375, 1, 0],
+ [30625, 0, 0],
+ [30750, 3, 0],
+ [31000, 3, 0],
+ [31250, 1, 0],
+ [31375, 3, 0],
+ [31625, 0, 0],
+ [31750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32000, 0, 0],
+ [32250.002, 1, 0],
+ [32375.002, 0, 0],
+ [32500.002, 3, 0],
+ [32750.002, 1, 0],
+ [33000, 2, 0],
+ [33250, 1, 0],
+ [33375, 3, 0],
+ [33625, 1, 0],
+ [33750, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [34000, 1, 0],
+ [34250, 1, 0],
+ [34375, 0, 0],
+ [34500, 3, 0],
+ [34750, 1, 0],
+ [35000, 2, 0],
+ [35250, 1, 0],
+ [35375, 3, 0],
+ [35625, 1, 0],
+ [35750, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [36000, 0, 0],
+ [36250, 1, 0],
+ [36375, 0, 0],
+ [36500, 3, 0],
+ [36750, 1, 0],
+ [37000, 2, 0],
+ [37250, 1, 0],
+ [37375, 3, 0],
+ [37625, 1, 0],
+ [37750, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [38000, 1, 0],
+ [38250, 1, 0],
+ [38375, 0, 0],
+ [38500, 3, 0],
+ [38750, 1, 0],
+ [39000, 2, 0],
+ [39250, 1, 0],
+ [39375, 3, 0],
+ [39625, 1, 0],
+ [39750, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [40000, 1, 0],
+ [40125, 0, 0],
+ [40250, 0, 0],
+ [40375, 3, 0],
+ [40500, 2, 0],
+ [40625, 2, 0],
+ [40750, 3, 0],
+ [41000, 2, 0],
+ [41250, 0, 0],
+ [41375, 1, 0],
+ [41500, 1, 0],
+ [41625, 1, 0],
+ [41750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [42000, 1, 0],
+ [42250, 0, 0],
+ [42375, 3, 0],
+ [42500, 2, 0],
+ [42625, 2, 0],
+ [42750, 3, 0],
+ [43000, 2, 0],
+ [43250, 0, 0],
+ [43375, 3, 0],
+ [43625, 1, 0],
+ [43750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [44000, 1, 0],
+ [44125, 0, 0],
+ [44250, 0, 0],
+ [44375, 3, 0],
+ [44500, 2, 0],
+ [44625, 2, 0],
+ [44750, 3, 0],
+ [45000, 2, 0],
+ [45250, 0, 0],
+ [45375, 1, 0],
+ [45500, 1, 0],
+ [45625, 1, 0],
+ [45750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [46000, 1, 0],
+ [46250, 0, 0],
+ [46375, 3, 0],
+ [46500, 2, 0],
+ [46625, 2, 0],
+ [46750, 3, 0],
+ [47000, 2, 0],
+ [47250, 0, 0],
+ [47375, 3, 0],
+ [47625, 1, 0],
+ [47750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [48000, 2, 0],
+ [48125, 3, 0],
+ [48250, 2, 0],
+ [48375, 0, 0],
+ [48500, 2, 0],
+ [48625, 0, 0],
+ [48750, 3, 0],
+ [48875, 0, 0],
+ [49000, 2, 0],
+ [49125, 3, 0],
+ [49250, 1, 0],
+ [49375, 3, 0],
+ [49500, 0, 375]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [50000, 2, 0],
+ [50125, 3, 0],
+ [50250, 2, 0],
+ [50375, 0, 0],
+ [50500, 3, 0],
+ [50625, 0, 0],
+ [50750, 2, 0],
+ [50875, 0, 0],
+ [51000, 2, 0],
+ [51125, 0, 0],
+ [51250, 3, 0],
+ [51375, 0, 0],
+ [51500, 1, 375]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [52000, 2, 0],
+ [52125, 3, 0],
+ [52250, 2, 0],
+ [52375, 0, 0],
+ [52500, 2, 0],
+ [52625, 0, 0],
+ [52750, 3, 0],
+ [52875, 0, 0],
+ [53000, 2, 0],
+ [53125, 3, 0],
+ [53250, 1, 0],
+ [53375, 3, 0],
+ [53500, 0, 375]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [54000, 2, 0],
+ [54125, 3, 0],
+ [54250, 2, 0],
+ [54375, 0, 0],
+ [54500, 3, 0],
+ [54625, 0, 0],
+ [54750, 2, 0],
+ [54875, 0, 0],
+ [55000, 2, 0],
+ [55125, 0, 0],
+ [55250, 3, 0],
+ [55375, 0, 0],
+ [55500, 1, 375]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56000, 0, 0],
+ [56125, 3, 0],
+ [56250, 1, 0],
+ [56375, 0, 0],
+ [56500, 3, 0],
+ [56625, 0, 0],
+ [56750, 1, 0],
+ [56875, 3, 0],
+ [57000, 0, 0],
+ [57125, 3, 0],
+ [57250, 1, 0],
+ [57375, 0, 0],
+ [57500, 3, 0],
+ [57625, 0, 0],
+ [57750, 1, 0],
+ [57875, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [58000, 0, 0],
+ [58125, 3, 0],
+ [58250, 1, 0],
+ [58375, 0, 0],
+ [58500, 3, 0],
+ [58625, 0, 0],
+ [58750, 1, 0],
+ [58875, 3, 0],
+ [59000, 0, 0],
+ [59125, 3, 0],
+ [59250, 1, 0],
+ [59375, 0, 0],
+ [59500, 3, 0],
+ [59625, 0, 0],
+ [59750, 1, 0],
+ [59875, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [60000, 0, 0],
+ [60125, 3, 0],
+ [60250, 1, 0],
+ [60375, 0, 0],
+ [60500, 3, 0],
+ [60625, 0, 0],
+ [60750, 1, 0],
+ [60875, 3, 0],
+ [61000, 0, 0],
+ [61125, 3, 0],
+ [61250, 1, 0],
+ [61375, 0, 0],
+ [61500, 3, 0],
+ [61625, 0, 0],
+ [61750, 1, 0],
+ [61875, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [62000, 0, 0],
+ [62125, 3, 0],
+ [62250, 1, 0],
+ [62375, 0, 0],
+ [62500, 3, 0],
+ [62625, 0, 0],
+ [62750, 1, 0],
+ [62875, 3, 0],
+ [63000, 0, 0],
+ [63125, 3, 0],
+ [63250, 1, 0],
+ [63375, 0, 0],
+ [63500, 3, 0],
+ [63625, 0, 0],
+ [63750, 1, 0],
+ [63875, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [64500.0039, 3, 0],
+ [64750.0039, 1, 0],
+ [65000.0039, 0, 250],
+ [65375.0039, 1, 0],
+ [65875, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [66125, 2, 0],
+ [66375, 2, 0],
+ [66500, 0, 0],
+ [66625, 1, 0],
+ [66750, 0, 0],
+ [67000, 3, 250],
+ [67375, 3, 0],
+ [67625, 0, 0],
+ [67875, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [68500, 3, 0],
+ [68750, 1, 0],
+ [69000, 0, 250],
+ [69375, 1, 0],
+ [69875, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [70125, 2, 0],
+ [70375, 2, 0],
+ [70500, 0, 0],
+ [70625, 1, 0],
+ [70750, 0, 0],
+ [71000, 3, 250],
+ [71375, 3, 0],
+ [71625, 0, 0],
+ [71875, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [72000, 2, 125],
+ [72250, 3, 0],
+ [72500, 2, 0],
+ [72625, 1, 0],
+ [72750, 0, 0],
+ [72875, 3, 250],
+ [73250, 1, 0],
+ [73500, 0, 0],
+ [73750, 1, 0],
+ [73875, 3, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [74250, 1, 0],
+ [74500, 3, 0],
+ [74750, 2, 0],
+ [74875, 3, 250],
+ [75250, 1, 0],
+ [75500, 0, 0],
+ [75750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [76000, 2, 125],
+ [76250, 3, 0],
+ [76500, 2, 0],
+ [76625, 1, 0],
+ [76750, 0, 0],
+ [76875, 3, 250],
+ [77250, 1, 0],
+ [77500, 0, 0],
+ [77750, 1, 0],
+ [77875, 3, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78250, 1, 0],
+ [78500, 3, 0],
+ [78750, 2, 0],
+ [78875, 3, 250],
+ [79250, 1, 0],
+ [79500, 0, 0],
+ [79750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80000, 0, 0],
+ [80125, 3, 0],
+ [80250, 1, 0],
+ [80375, 0, 0],
+ [80500, 3, 0],
+ [80625, 0, 0],
+ [80750, 1, 0],
+ [80875, 3, 0],
+ [81000, 0, 0],
+ [81125, 3, 0],
+ [81250, 1, 0],
+ [81375, 0, 0],
+ [81500, 3, 0],
+ [81625, 0, 0],
+ [81750, 1, 0],
+ [81875, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [82000, 0, 0],
+ [82125, 3, 0],
+ [82250, 1, 0],
+ [82375, 0, 0],
+ [82500, 3, 0],
+ [82625, 0, 0],
+ [82750, 1, 0],
+ [82875, 3, 0],
+ [83000, 0, 0],
+ [83125, 3, 0],
+ [83250, 1, 0],
+ [83375, 0, 0],
+ [83500, 3, 0],
+ [83625, 0, 0],
+ [83750, 1, 0],
+ [83875, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [84000, 0, 0],
+ [84125, 3, 0],
+ [84250, 1, 0],
+ [84375, 0, 0],
+ [84500, 3, 0],
+ [84625, 0, 0],
+ [84750, 1, 0],
+ [84875, 3, 0],
+ [85000, 0, 0],
+ [85125, 3, 0],
+ [85250, 1, 0],
+ [85375, 0, 0],
+ [85500, 3, 0],
+ [85625, 0, 0],
+ [85750, 1, 0],
+ [85875, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [86000, 0, 0],
+ [86125, 3, 0],
+ [86250, 1, 0],
+ [86375, 0, 0],
+ [86500, 3, 0],
+ [86625, 0, 0],
+ [86750, 1, 0],
+ [86875, 3, 0],
+ [87000, 0, 0],
+ [87125, 3, 0],
+ [87250, 1, 0],
+ [87375, 0, 0],
+ [87500, 3, 0],
+ [87625, 0, 0],
+ [87750, 1, 0],
+ [87875, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 120,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "senpai-angry",
+ "song": "Roses",
+ "stage": "school",
+ "needsVoices": true,
+ "validScore": true,
+ "noteStyle": "pixel",
+ "bpm": 120,
+ "speed": 1.5
+ }
+}
diff --git a/assets/preload/data/songs/roses/roses.json b/assets/preload/data/songs/roses/roses.json
new file mode 100644
index 0000000000..e673d546e8
--- /dev/null
+++ b/assets/preload/data/songs/roses/roses.json
@@ -0,0 +1,643 @@
+{
+ "song": {
+ "player1": "bf-pixel",
+ "gfVersion": "gf-pixel",
+ "notes": [
+ {
+ "sectionNotes": [
+ [500, 3, 0],
+ [750, 1, 0],
+ [1000, 0, 250],
+ [1375, 1, 0],
+ [1875, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [2375, 2, 0],
+ [2500, 0, 0],
+ [2750, 0, 0],
+ [3000, 3, 250],
+ [3375, 3, 0],
+ [3625, 0, 0],
+ [3875, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [4500, 3, 0],
+ [4750, 1, 0],
+ [5000, 0, 250],
+ [5375, 1, 0],
+ [5875, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [6375, 2, 0],
+ [6500, 0, 0],
+ [6750, 0, 0],
+ [7000, 3, 250],
+ [7375, 3, 0],
+ [7625, 0, 0],
+ [7875, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [8000, 2, 125],
+ [8500, 2, 0],
+ [8750, 0, 0],
+ [8875, 3, 250],
+ [9500, 0, 0],
+ [9750, 1, 0],
+ [9875, 3, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [10250, 1, 0],
+ [10500, 3, 0],
+ [10875, 3, 250],
+ [11250, 1, 0],
+ [11500, 0, 0],
+ [11750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [12000, 2, 125],
+ [12500, 2, 0],
+ [12750, 0, 0],
+ [12875, 3, 250],
+ [13500, 0, 0],
+ [13750, 1, 0],
+ [13875, 3, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [14250, 1, 0],
+ [14500, 3, 0],
+ [14875, 3, 250],
+ [15250, 1, 0],
+ [15500, 0, 0],
+ [15750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [16500, 0, 0],
+ [16750, 0, 0],
+ [16875, 2, 0],
+ [17000, 3, 125],
+ [17250, 1, 0],
+ [17500, 0, 0],
+ [17750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [18000, 0, 0],
+ [18250, 3, 0],
+ [18500, 0, 0],
+ [19000, 3, 0],
+ [19250, 1, 0],
+ [19500, 0, 0],
+ [19750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [20500, 0, 0],
+ [20750, 0, 0],
+ [20875, 2, 0],
+ [21000, 3, 125],
+ [21250, 1, 0],
+ [21500, 0, 0],
+ [21750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [22000, 0, 0],
+ [22250, 3, 0],
+ [22500, 0, 0],
+ [23000, 3, 0],
+ [23250, 1, 0],
+ [23500, 0, 0],
+ [23750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [24000, 2, 0],
+ [24250, 0, 0],
+ [24625, 0, 0],
+ [25000, 3, 0],
+ [25250, 1, 0],
+ [25375, 3, 0],
+ [25625, 0, 0],
+ [25750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26000, 2, 0],
+ [26250, 0, 0],
+ [26625, 0, 0],
+ [27000, 3, 0],
+ [27250, 1, 0],
+ [27375, 3, 0],
+ [27625, 0, 0],
+ [27750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [28000, 2, 0],
+ [28250, 0, 0],
+ [28625, 0, 0],
+ [29000, 3, 0],
+ [29250, 1, 0],
+ [29375, 3, 0],
+ [29625, 0, 0],
+ [29750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30000, 2, 0],
+ [30250, 0, 0],
+ [30625, 0, 0],
+ [31000, 3, 0],
+ [31250, 1, 0],
+ [31375, 3, 0],
+ [31625, 0, 0],
+ [31750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32000, 0, 0],
+ [32250.002, 1, 0],
+ [32500.002, 3, 0],
+ [32750.002, 1, 0],
+ [33000, 2, 0],
+ [33250, 1, 0],
+ [33375, 3, 0],
+ [33625, 1, 0],
+ [33750, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [34000, 1, 0],
+ [34250, 1, 0],
+ [34500, 3, 0],
+ [34750, 1, 0],
+ [35000, 2, 0],
+ [35250, 1, 0],
+ [35375, 3, 0],
+ [35625, 1, 0],
+ [35750, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [36000, 0, 0],
+ [36250, 1, 0],
+ [36500, 3, 0],
+ [36750, 1, 0],
+ [37000, 2, 0],
+ [37250, 1, 0],
+ [37375, 3, 0],
+ [37625, 1, 0],
+ [37750, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [38000, 1, 0],
+ [38250, 1, 0],
+ [38500, 3, 0],
+ [38750, 1, 0],
+ [39000, 2, 0],
+ [39250, 1, 0],
+ [39375, 3, 0],
+ [39625, 1, 0],
+ [39750, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [40000, 1, 0],
+ [40250, 0, 0],
+ [40500, 2, 0],
+ [40625, 2, 0],
+ [40750, 3, 0],
+ [41000, 2, 0],
+ [41250, 0, 0],
+ [41375, 1, 0],
+ [41625, 1, 0],
+ [41750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [42000, 1, 0],
+ [42250, 0, 0],
+ [42500, 2, 0],
+ [42625, 2, 0],
+ [42750, 3, 0],
+ [43000, 2, 0],
+ [43250, 0, 0],
+ [43375, 3, 0],
+ [43625, 1, 0],
+ [43750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [44000, 1, 0],
+ [44250, 0, 0],
+ [44500, 2, 0],
+ [44625, 2, 0],
+ [44750, 3, 0],
+ [45000, 2, 0],
+ [45250, 0, 0],
+ [45375, 1, 0],
+ [45625, 1, 0],
+ [45750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [46000, 1, 0],
+ [46250, 0, 0],
+ [46500, 2, 0],
+ [46625, 2, 0],
+ [46750, 3, 0],
+ [47000, 2, 0],
+ [47250, 0, 0],
+ [47375, 3, 0],
+ [47625, 1, 0],
+ [47750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [48000, 2, 0],
+ [48375, 0, 0],
+ [48625, 0, 0],
+ [48750, 3, 0],
+ [48875, 0, 0],
+ [49000, 2, 0],
+ [49125, 3, 0],
+ [49375, 3, 0],
+ [49500, 0, 375]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [50000, 2, 0],
+ [50375, 0, 0],
+ [50750, 2, 0],
+ [50875, 0, 0],
+ [51250, 3, 0],
+ [51375, 0, 0],
+ [51500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [52000, 2, 0],
+ [52375, 0, 0],
+ [52625, 0, 0],
+ [52750, 3, 0],
+ [52875, 0, 0],
+ [53000, 2, 0],
+ [53125, 3, 0],
+ [53375, 3, 0],
+ [53500, 0, 375]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [54000, 2, 0],
+ [54375, 0, 0],
+ [54750, 2, 0],
+ [54875, 0, 0],
+ [55250, 3, 0],
+ [55375, 0, 0],
+ [55500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56000, 0, 0],
+ [56125, 3, 0],
+ [56375, 0, 0],
+ [56500, 3, 0],
+ [56625, 0, 0],
+ [57000, 0, 0],
+ [57125, 3, 0],
+ [57375, 0, 0],
+ [57500, 3, 0],
+ [57625, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [58000, 0, 0],
+ [58125, 3, 0],
+ [58375, 0, 0],
+ [58500, 3, 0],
+ [58625, 0, 0],
+ [59000, 0, 0],
+ [59125, 3, 0],
+ [59375, 0, 0],
+ [59500, 3, 0],
+ [59625, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [60000, 0, 0],
+ [60125, 3, 0],
+ [60375, 0, 0],
+ [60500, 3, 0],
+ [60625, 0, 0],
+ [61000, 0, 0],
+ [61125, 3, 0],
+ [61375, 0, 0],
+ [61500, 3, 0],
+ [61625, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [62000, 0, 0],
+ [62125, 3, 0],
+ [62375, 0, 0],
+ [62500, 3, 0],
+ [62625, 0, 0],
+ [63000, 0, 0],
+ [63125, 3, 0],
+ [63375, 0, 0],
+ [63500, 3, 0],
+ [63625, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [64500.0039, 3, 0],
+ [64750.0039, 1, 0],
+ [65000.0039, 0, 250],
+ [65375.0039, 1, 0],
+ [65875, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [66375, 2, 0],
+ [66500, 0, 0],
+ [66750, 0, 0],
+ [67000, 3, 250],
+ [67375, 3, 0],
+ [67625, 0, 0],
+ [67875, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [68500, 3, 0],
+ [68750, 1, 0],
+ [69000, 0, 250],
+ [69375, 1, 0],
+ [69875, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [70375, 2, 0],
+ [70500, 0, 0],
+ [70750, 0, 0],
+ [71000, 3, 250],
+ [71375, 3, 0],
+ [71625, 0, 0],
+ [71875, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [72000, 2, 125],
+ [72500, 2, 0],
+ [72750, 0, 0],
+ [72875, 3, 250],
+ [73500, 0, 0],
+ [73750, 1, 0],
+ [73875, 3, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [74250, 1, 0],
+ [74500, 3, 0],
+ [74875, 3, 250],
+ [75250, 1, 0],
+ [75500, 0, 0],
+ [75750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [76000, 2, 125],
+ [76500, 2, 0],
+ [76750, 0, 0],
+ [76875, 3, 250],
+ [77500, 0, 0],
+ [77750, 1, 0],
+ [77875, 3, 250]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78250, 1, 0],
+ [78500, 3, 0],
+ [78875, 3, 250],
+ [79250, 1, 0],
+ [79500, 0, 0],
+ [79750, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80000, 0, 0],
+ [80125, 3, 0],
+ [80375, 0, 0],
+ [80500, 3, 0],
+ [80625, 0, 0],
+ [81000, 0, 0],
+ [81125, 3, 0],
+ [81375, 0, 0],
+ [81500, 3, 0],
+ [81625, 0, 0],
+ [81750, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [82000, 0, 0],
+ [82125, 3, 0],
+ [82375, 0, 0],
+ [82500, 3, 0],
+ [82625, 0, 0],
+ [83000, 0, 0],
+ [83125, 3, 0],
+ [83375, 0, 0],
+ [83500, 3, 0],
+ [83625, 0, 0],
+ [83750, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [84000, 0, 0],
+ [84125, 3, 0],
+ [84375, 0, 0],
+ [84500, 3, 0],
+ [84625, 0, 0],
+ [85000, 0, 0],
+ [85125, 3, 0],
+ [85375, 0, 0],
+ [85500, 3, 0],
+ [85625, 0, 0],
+ [85750, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [86000, 0, 0],
+ [86125, 3, 0],
+ [86375, 0, 0],
+ [86500, 3, 0],
+ [86625, 0, 0],
+ [87000, 0, 0],
+ [87125, 3, 0],
+ [87375, 0, 0],
+ [87500, 3, 0],
+ [87625, 0, 0],
+ [87750, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 120,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "senpai-angry",
+ "song": "Roses",
+ "stage": "school",
+ "needsVoices": true,
+ "validScore": true,
+ "noteStyle": "pixel",
+ "bpm": 120,
+ "speed": 1.3
+ }
+}
diff --git a/assets/preload/data/songs/satin-panties/_meta.json b/assets/preload/data/songs/satin-panties/_meta.json
new file mode 100644
index 0000000000..a0de7a6c5c
--- /dev/null
+++ b/assets/preload/data/songs/satin-panties/_meta.json
@@ -0,0 +1,4 @@
+{
+ "name": "Satin Panties",
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/songs/satin-panties/satin-panties-easy.json b/assets/preload/data/songs/satin-panties/satin-panties-easy.json
new file mode 100644
index 0000000000..57381a7f8b
--- /dev/null
+++ b/assets/preload/data/songs/satin-panties/satin-panties-easy.json
@@ -0,0 +1,580 @@
+{
+ "song": {
+ "player1": "bf-car",
+ "gfVersion": "gf-car",
+ "notes": [
+ {
+ "sectionNotes": [
+ [0, 0, 0],
+ [545.4545, 0, 0],
+ [954.5454, 0, 0],
+ [1363.63635, 0, 0],
+ [1636.36353, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [2181.818, 3, 0],
+ [2727.27271, 3, 0],
+ [3136.36353, 3, 0],
+ [3545.45435, 3, 0],
+ [3818.18164, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [4636.36328, 2, 0],
+ [4909.091, 3, 0],
+ [5318.18164, 3, 0],
+ [6000, 3, 0],
+ [6272.727, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [6818.18164, 2, 0],
+ [7090.90869, 3, 0],
+ [7500, 3, 0],
+ [8181.818, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [8727.272, 6, 545.4545],
+ [9000, 2, 0],
+ [9272.727, 3, 0],
+ [9681.818, 3, 0],
+ [10363.6357, 3, 0],
+ [10636.3633, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [11181.8174, 2, 0],
+ [11454.5449, 3, 0],
+ [11863.6357, 3, 0],
+ [12545.4541, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [13090.9082, 6, 545.4545],
+ [13363.6357, 1, 0],
+ [13636.3633, 0, 0],
+ [14181.8174, 2, 272.727264],
+ [14727.2725, 0, 0],
+ [15000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15272.7266, 3, 272.727264],
+ [15681.8174, 0, 0],
+ [16363.6357, 2, 272.727264],
+ [16772.7266, 3, 0],
+ [16909.09, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [17454.5449, 6, 545.4545],
+ [17727.2715, 1, 0],
+ [18000, 0, 0],
+ [18545.4531, 2, 272.727264],
+ [19090.9082, 0, 0],
+ [19363.6367, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [19636.3633, 3, 272.727264],
+ [20045.4531, 0, 0],
+ [20727.2715, 2, 272.727264],
+ [21136.3633, 3, 0],
+ [21272.7266, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [21818.1816, 6, 409.090881],
+ [21818.1816, 2, 409.090881],
+ [22363.6348, 7, 0],
+ [22363.6348, 3, 0],
+ [22909.09, 4, 0],
+ [22909.09, 0, 0],
+ [23181.8184, 4, 0],
+ [23181.8184, 0, 0],
+ [23454.5449, 4, 0],
+ [23454.5449, 0, 0],
+ [23727.2715, 4, 0],
+ [23727.2715, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [24000, 1, 409.090881],
+ [24000, 5, 409.090881],
+ [24545.4531, 4, 0],
+ [24545.4531, 0, 0],
+ [24818.1816, 4, 0],
+ [24818.1816, 0, 0],
+ [25090.9082, 6, 136.363632],
+ [25090.9082, 2, 136.363632],
+ [25636.3633, 7, 0],
+ [25636.3633, 3, 0],
+ [25909.09, 5, 0],
+ [25909.09, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26181.8164, 4, 409.090881],
+ [26181.8164, 3, 409.090881],
+ [26727.2715, 0, 409.090881],
+ [26727.2715, 7, 409.090881],
+ [27272.7266, 6, 0],
+ [27272.7266, 2, 0],
+ [27818.1816, 7, 409.090881],
+ [27818.1816, 0, 409.090881]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [28363.6348, 5, 409.090881],
+ [28363.6348, 1, 409.090881],
+ [28909.09, 7, 409.090881],
+ [28909.09, 3, 409.090881],
+ [29454.5449, 6, 409.090881],
+ [29454.5449, 2, 409.090881],
+ [30000, 4, 0],
+ [30000, 0, 0],
+ [30272.7266, 7, 409.090881]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30545.4531, 5, 545.4545],
+ [30818.1816, 2, 0],
+ [31090.9082, 0, 0],
+ [31636.3633, 3, 0],
+ [31909.09, 3, 0],
+ [32181.8164, 3, 0],
+ [32454.5449, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [33000, 1, 0],
+ [33272.7266, 0, 136.363632],
+ [33818.18, 2, 0],
+ [34090.9063, 0, 0],
+ [34363.6367, 3, 0],
+ [34636.3633, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [34909.09, 7, 0],
+ [35181.8164, 7, 0],
+ [35181.8164, 2, 0],
+ [35454.543, 0, 0],
+ [36000, 3, 0],
+ [36272.7266, 3, 0],
+ [36545.4531, 3, 0],
+ [36818.18, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [37363.6367, 1, 0],
+ [37636.3633, 0, 136.363632],
+ [38181.8164, 2, 0],
+ [38454.543, 0, 0],
+ [38727.2734, 7, 0],
+ [38727.2734, 3, 0],
+ [39000, 7, 0],
+ [39000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [39272.7266, 2, 0],
+ [39272.7266, 7, 0],
+ [39545.4531, 2, 0],
+ [39545.4531, 7, 0],
+ [39818.18, 0, 0],
+ [40090.9063, 3, 0],
+ [40363.6367, 3, 0],
+ [40636.3633, 3, 0],
+ [40909.09, 3, 0],
+ [41181.8164, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [41454.543, 0, 0],
+ [42000, 0, 0],
+ [42272.7266, 1, 0],
+ [42545.4531, 2, 0],
+ [42818.18, 0, 0],
+ [43090.9063, 3, 0],
+ [43090.9063, 7, 0],
+ [43363.6367, 0, 0],
+ [43363.6367, 7, 0],
+ [43500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [43636.3633, 2, 0],
+ [43909.09, 2, 0],
+ [44181.8164, 0, 0],
+ [44454.543, 3, 0],
+ [44727.27, 3, 0],
+ [45000, 3, 0],
+ [45272.7266, 3, 0],
+ [45545.4531, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [45818.18, 0, 0],
+ [46363.6367, 0, 0],
+ [46636.3633, 1, 0],
+ [46909.09, 2, 0],
+ [47181.8164, 0, 0],
+ [47454.543, 3, 0],
+ [47727.27, 0, 0],
+ [47863.6367, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [48272.7266, 2, 0],
+ [48545.4531, 0, 0],
+ [48818.18, 0, 0],
+ [49090.9063, 3, 0],
+ [49363.6367, 3, 0],
+ [49636.3633, 1, 0],
+ [49909.09, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [50454.543, 3, 0],
+ [50727.27, 0, 0],
+ [51272.7266, 0, 0],
+ [51545.4531, 2, 0],
+ [51818.18, 0, 0],
+ [52090.9063, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [52363.6328, 6, 545.4545],
+ [52636.3633, 2, 0],
+ [52909.09, 0, 0],
+ [53181.8164, 0, 0],
+ [53454.543, 3, 0],
+ [53727.27, 3, 0],
+ [54000, 1, 0],
+ [54272.7266, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [54818.18, 3, 0],
+ [55090.9063, 0, 0],
+ [55636.3633, 0, 0],
+ [55909.09, 2, 0],
+ [56181.8164, 0, 0],
+ [56454.543, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56727.27, 2, 409.090881],
+ [56727.27, 6, 409.090881],
+ [57272.7266, 3, 0],
+ [57272.7266, 7, 0],
+ [57818.18, 0, 0],
+ [57818.18, 4, 0],
+ [58090.9063, 0, 0],
+ [58090.9063, 4, 0],
+ [58363.6328, 0, 0],
+ [58363.6328, 4, 0],
+ [58636.3633, 0, 0],
+ [58636.3633, 4, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [58909.09, 1, 409.090881],
+ [58909.09, 5, 409.090881],
+ [59454.543, 4, 0],
+ [59454.543, 0, 0],
+ [59727.27, 4, 0],
+ [59727.27, 0, 0],
+ [60000, 6, 136.363632],
+ [60000, 2, 136.363632],
+ [60545.4531, 7, 0],
+ [60545.4531, 3, 0],
+ [60818.18, 5, 0],
+ [60818.18, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61090.9063, 0, 409.090881],
+ [61090.9063, 7, 409.090881],
+ [61636.3633, 4, 409.090881],
+ [61636.3633, 3, 409.090881],
+ [62181.8164, 2, 0],
+ [62181.8164, 6, 0],
+ [62727.27, 3, 409.090881],
+ [62727.27, 4, 409.090881]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [63272.7266, 5, 409.090881],
+ [63272.7266, 1, 409.090881],
+ [63818.18, 7, 409.090881],
+ [63818.18, 3, 409.090881],
+ [64363.6328, 6, 409.090881],
+ [64363.6328, 2, 409.090881],
+ [64909.09, 0, 0],
+ [64909.09, 4, 0],
+ [65181.8164, 7, 409.090881]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65454.543, 5, 545.4545],
+ [65727.27, 2, 0],
+ [66000, 0, 0],
+ [66545.45, 3, 0],
+ [66818.18, 3, 0],
+ [67090.91, 3, 0],
+ [67363.63, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [67909.0859, 1, 0],
+ [68181.81, 0, 136.363632],
+ [68727.27, 3, 0],
+ [69000, 0, 0],
+ [69272.73, 3, 0],
+ [69545.45, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [69818.18, 5, 409.090881],
+ [70090.91, 2, 0],
+ [70363.63, 0, 0],
+ [70363.63, 7, 409.090881],
+ [70909.0859, 6, 409.090881],
+ [70909.0859, 3, 0],
+ [71181.81, 3, 0],
+ [71454.55, 3, 0],
+ [71454.55, 7, 409.090881],
+ [71727.27, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [72000, 5, 409.090881],
+ [72272.73, 1, 0],
+ [72545.45, 0, 136.363632],
+ [72545.45, 7, 409.090881],
+ [73090.91, 3, 0],
+ [73363.63, 0, 0],
+ [73636.36, 3, 0],
+ [73909.0859, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [74181.81, 2, 0],
+ [74181.81, 5, 409.090881],
+ [74454.55, 2, 0],
+ [74727.27, 0, 0],
+ [74727.27, 7, 409.090881],
+ [75000, 3, 0],
+ [75272.73, 3, 0],
+ [75272.73, 6, 409.090881],
+ [75545.45, 3, 0],
+ [75818.18, 3, 0],
+ [75818.18, 7, 409.090881],
+ [76090.91, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [76363.63, 0, 0],
+ [76363.63, 5, 409.090881],
+ [76909.0859, 0, 0],
+ [76909.0859, 7, 409.090881],
+ [77181.81, 1, 0],
+ [77454.55, 2, 0],
+ [77454.55, 6, 409.090881],
+ [77727.27, 0, 0],
+ [78000, 3, 0],
+ [78000, 7, 0],
+ [78272.73, 0, 0],
+ [78272.73, 7, 0],
+ [78409.0859, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [78545.45, 2, 0],
+ [78818.18, 2, 0],
+ [79090.91, 0, 0],
+ [79363.63, 3, 0],
+ [79636.36, 3, 0],
+ [79909.0859, 3, 0],
+ [80181.81, 3, 0],
+ [80454.55, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80727.27, 0, 0],
+ [81272.73, 0, 0],
+ [81545.45, 1, 0],
+ [81818.18, 2, 0],
+ [82090.91, 0, 0],
+ [82363.63, 3, 0],
+ [82636.36, 0, 0],
+ [82772.73, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [82909.0859, 7, 1090.909],
+ [83181.81, 2, 0],
+ [83454.54, 3, 0],
+ [83863.63, 3, 0],
+ [84545.45, 3, 0],
+ [84818.18, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [85363.63, 2, 0],
+ [85636.36, 3, 0],
+ [86045.45, 3, 0],
+ [86727.27, 3, 0],
+ [87000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[87272.73, 2, 545.4545]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 110,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "mom-car",
+ "song": "Satin Panties",
+ "stage": "limo",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 110,
+ "speed": 1.3
+ }
+}
diff --git a/assets/preload/data/songs/satin-panties/satin-panties-hard.json b/assets/preload/data/songs/satin-panties/satin-panties-hard.json
new file mode 100644
index 0000000000..ecd5ce98f2
--- /dev/null
+++ b/assets/preload/data/songs/satin-panties/satin-panties-hard.json
@@ -0,0 +1,814 @@
+{
+ "song": {
+ "player1": "bf-car",
+ "player2": "mom-car",
+ "notes": [
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [0, 0, 0],
+ [272.727264, 0, 0],
+ [545.4545, 0, 0],
+ [818.181763, 0, 0],
+ [954.5454, 0, 0],
+ [1227.27271, 0, 0],
+ [1363.63635, 0, 0],
+ [1636.36353, 0, 0],
+ [1909.09082, 0, 0],
+ [2045.45447, 0, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [2181.818, 3, 0],
+ [2454.54541, 3, 0],
+ [2727.27271, 3, 0],
+ [3000, 3, 0],
+ [3136.36353, 3, 0],
+ [3409.09082, 3, 0],
+ [3545.45435, 3, 0],
+ [3818.18164, 3, 0],
+ [4090.909, 3, 0],
+ [4227.27246, 3, 0]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [4636.36328, 2, 0],
+ [4909.091, 3, 0],
+ [5181.818, 2, 0],
+ [5318.18164, 3, 0],
+ [5590.90869, 0, 0],
+ [5863.636, 2, 0],
+ [6000, 3, 0],
+ [6272.727, 0, 0],
+ [6409.091, 3, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [6818.18164, 2, 0],
+ [7090.90869, 3, 0],
+ [7363.636, 2, 0],
+ [7500, 3, 0],
+ [7772.727, 0, 0],
+ [8045.454, 2, 0],
+ [8181.818, 3, 0],
+ [8318.182, 0, 0],
+ [8454.545, 1, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [8727.272, 6, 545.4545],
+ [9000, 2, 0],
+ [9272.727, 3, 0],
+ [9545.454, 2, 0],
+ [9681.818, 3, 0],
+ [9954.545, 0, 0],
+ [10227.2725, 2, 0],
+ [10363.6357, 3, 0],
+ [10636.3633, 0, 0],
+ [10772.7266, 3, 0]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [11181.8174, 2, 0],
+ [11454.5449, 3, 0],
+ [11727.2725, 2, 0],
+ [11863.6357, 3, 0],
+ [12136.3633, 0, 0],
+ [12409.0908, 2, 0],
+ [12545.4541, 3, 0],
+ [12681.8174, 0, 0],
+ [12818.1816, 1, 0]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [13090.9082, 6, 545.4545],
+ [13363.6357, 1, 0],
+ [13500, 1, 0],
+ [13636.3633, 0, 0],
+ [13909.0908, 0, 0],
+ [14045.4541, 3, 0],
+ [14181.8174, 2, 272.727264],
+ [14590.9082, 3, 0],
+ [14727.2725, 0, 0],
+ [15000, 1, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [15272.7266, 3, 272.727264],
+ [15681.8174, 0, 0],
+ [15954.5449, 0, 0],
+ [16090.9082, 0, 0],
+ [16227.2725, 0, 0],
+ [16363.6357, 2, 272.727264],
+ [16772.7266, 3, 0],
+ [16909.09, 0, 0],
+ [17045.4531, 1, 0],
+ [17181.8184, 0, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [17454.5449, 6, 545.4545],
+ [17727.2715, 1, 0],
+ [17863.6367, 1, 0],
+ [18000, 0, 0],
+ [18272.7266, 0, 0],
+ [18409.09, 3, 0],
+ [18545.4531, 2, 272.727264],
+ [18954.5449, 3, 0],
+ [19090.9082, 0, 0],
+ [19363.6367, 1, 0]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [19636.3633, 3, 272.727264],
+ [20045.4531, 0, 0],
+ [20318.1816, 0, 0],
+ [20454.5449, 0, 0],
+ [20590.9082, 0, 0],
+ [20727.2715, 2, 272.727264],
+ [21136.3633, 3, 0],
+ [21272.7266, 0, 0],
+ [21409.09, 1, 0],
+ [21545.4531, 0, 0]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [21818.1816, 6, 409.090881],
+ [21818.1816, 2, 409.090881],
+ [22363.6348, 7, 0],
+ [22363.6348, 3, 0],
+ [22500, 6, 0],
+ [22500, 2, 0],
+ [22636.3633, 7, 0],
+ [22636.3633, 3, 0],
+ [22772.7266, 6, 0],
+ [22772.7266, 2, 0],
+ [22909.09, 4, 0],
+ [22909.09, 0, 0],
+ [23045.4531, 5, 0],
+ [23045.4531, 1, 0],
+ [23181.8184, 4, 0],
+ [23181.8184, 0, 0],
+ [23318.1816, 5, 0],
+ [23318.1816, 1, 0],
+ [23454.5449, 4, 0],
+ [23454.5449, 0, 0],
+ [23590.9082, 7, 0],
+ [23590.9082, 3, 0],
+ [23727.2715, 4, 0],
+ [23727.2715, 0, 0],
+ [23863.6348, 7, 0],
+ [23863.6348, 3, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [24000, 1, 409.090881],
+ [24000, 5, 409.090881],
+ [24545.4531, 4, 0],
+ [24545.4531, 0, 0],
+ [24681.8184, 7, 0],
+ [24681.8184, 3, 0],
+ [24818.1816, 4, 0],
+ [24818.1816, 0, 0],
+ [24954.5449, 7, 0],
+ [24954.5449, 3, 0],
+ [25090.9082, 6, 136.363632],
+ [25090.9082, 2, 136.363632],
+ [25363.6348, 7, 0],
+ [25363.6348, 3, 0],
+ [25636.3633, 7, 0],
+ [25636.3633, 3, 0],
+ [25909.09, 5, 0],
+ [25909.09, 1, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [26181.8164, 4, 409.090881],
+ [26181.8164, 3, 409.090881],
+ [26727.2715, 0, 409.090881],
+ [26727.2715, 7, 409.090881],
+ [27272.7266, 6, 0],
+ [27272.7266, 2, 0],
+ [27545.4531, 6, 0],
+ [27545.4531, 2, 0],
+ [27681.8164, 6, 0],
+ [27681.8164, 2, 0],
+ [27818.1816, 7, 409.090881],
+ [27818.1816, 0, 409.090881]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [28363.6348, 5, 409.090881],
+ [28363.6348, 1, 409.090881],
+ [28909.09, 7, 409.090881],
+ [28909.09, 3, 409.090881],
+ [29454.5449, 6, 409.090881],
+ [29454.5449, 2, 409.090881],
+ [30000, 4, 0],
+ [30000, 0, 0],
+ [30272.7266, 7, 409.090881],
+ [30272.7266, 3, 0]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [30545.4531, 5, 545.4545],
+ [30818.1816, 2, 0],
+ [30954.5449, 3, 0],
+ [31090.9082, 0, 0],
+ [31363.6348, 1, 0],
+ [31636.3633, 3, 0],
+ [31772.7266, 0, 0],
+ [31909.09, 3, 0],
+ [32181.8164, 3, 0],
+ [32318.1816, 0, 0],
+ [32454.5449, 1, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [33000, 1, 0],
+ [33136.3633, 3, 0],
+ [33272.7266, 0, 136.363632],
+ [33545.4531, 1, 0],
+ [33818.18, 2, 0],
+ [33954.543, 3, 0],
+ [34090.9063, 0, 0],
+ [34227.2734, 0, 0],
+ [34363.6367, 3, 0],
+ [34500, 0, 0],
+ [34636.3633, 0, 0],
+ [34772.7266, 1, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [34909.09, 7, 0],
+ [35045.4531, 6, 0],
+ [35181.8164, 2, 0],
+ [35181.8164, 7, 0],
+ [35318.18, 3, 0],
+ [35454.543, 0, 0],
+ [35727.2734, 1, 0],
+ [36000, 3, 0],
+ [36136.3633, 0, 0],
+ [36272.7266, 3, 0],
+ [36545.4531, 3, 0],
+ [36681.8164, 0, 0],
+ [36818.18, 1, 0]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [37363.6367, 1, 0],
+ [37500, 3, 0],
+ [37636.3633, 0, 136.363632],
+ [37909.09, 1, 0],
+ [38181.8164, 2, 0],
+ [38318.18, 3, 0],
+ [38454.543, 0, 0],
+ [38590.9063, 0, 0],
+ [38727.2734, 7, 0],
+ [38727.2734, 3, 0],
+ [38863.6367, 4, 0],
+ [38863.6367, 0, 0],
+ [39000, 5, 0],
+ [39000, 0, 0],
+ [39136.3633, 7, 0],
+ [39136.3633, 1, 0]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [39272.7266, 2, 136.363632],
+ [39272.7266, 7, 0],
+ [39409.09, 6, 0],
+ [39545.4531, 7, 0],
+ [39545.4531, 2, 0],
+ [39681.8164, 3, 0],
+ [39818.18, 0, 0],
+ [39954.543, 1, 0],
+ [40090.9063, 3, 0],
+ [40227.2734, 1, 0],
+ [40363.6367, 3, 0],
+ [40500, 0, 0],
+ [40636.3633, 3, 0],
+ [40772.7266, 1, 0],
+ [40909.09, 3, 0],
+ [41045.4531, 0, 0],
+ [41181.8164, 1, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [41454.543, 0, 0],
+ [41727.27, 1, 0],
+ [41863.6367, 3, 0],
+ [42000, 0, 136.363632],
+ [42272.7266, 1, 0],
+ [42545.4531, 2, 0],
+ [42681.8164, 3, 0],
+ [42818.18, 0, 0],
+ [42954.543, 0, 0],
+ [43090.9063, 7, 0],
+ [43090.9063, 3, 0],
+ [43227.27, 4, 0],
+ [43227.27, 0, 0],
+ [43363.6367, 5, 0],
+ [43363.6367, 0, 0],
+ [43500, 7, 0],
+ [43500, 1, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [43636.3633, 2, 136.363632],
+ [43909.09, 2, 0],
+ [44045.4531, 3, 0],
+ [44181.8164, 0, 0],
+ [44318.18, 1, 0],
+ [44454.543, 3, 0],
+ [44590.9063, 1, 0],
+ [44727.27, 3, 0],
+ [44863.6367, 0, 0],
+ [45000, 3, 0],
+ [45136.3633, 1, 0],
+ [45272.7266, 3, 0],
+ [45409.09, 0, 0],
+ [45545.4531, 1, 0]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [45818.18, 0, 0],
+ [46090.9063, 1, 0],
+ [46227.27, 3, 0],
+ [46363.6367, 0, 136.363632],
+ [46636.3633, 1, 0],
+ [46909.09, 2, 0],
+ [47045.4531, 3, 0],
+ [47181.8164, 0, 0],
+ [47318.18, 0, 0],
+ [47454.543, 3, 0],
+ [47590.9063, 0, 0],
+ [47727.27, 0, 0],
+ [47863.6367, 1, 0]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [48272.7266, 2, 0],
+ [48409.09, 3, 0],
+ [48545.4531, 0, 0],
+ [48681.8164, 3, 0],
+ [48818.18, 0, 0],
+ [48954.543, 2, 0],
+ [49090.9063, 3, 0],
+ [49363.6367, 3, 0],
+ [49636.3633, 1, 0],
+ [49909.09, 0, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [50454.543, 3, 0],
+ [50590.9063, 1, 0],
+ [50727.27, 0, 0],
+ [50863.6367, 3, 0],
+ [51000, 2, 0],
+ [51272.7266, 0, 0],
+ [51545.4531, 2, 0],
+ [51818.18, 0, 0],
+ [52090.9063, 1, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [52363.6328, 6, 545.4545],
+ [52636.3633, 2, 0],
+ [52772.7266, 3, 0],
+ [52909.09, 0, 0],
+ [53045.4531, 3, 0],
+ [53181.8164, 0, 0],
+ [53318.18, 2, 0],
+ [53454.543, 3, 0],
+ [53727.27, 3, 0],
+ [54000, 1, 0],
+ [54272.7266, 0, 0]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [54818.18, 3, 0],
+ [54954.543, 1, 0],
+ [55090.9063, 0, 0],
+ [55227.27, 3, 0],
+ [55363.6328, 2, 0],
+ [55636.3633, 0, 0],
+ [55909.09, 2, 0],
+ [56181.8164, 0, 0],
+ [56454.543, 1, 0]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [56727.27, 6, 409.090881],
+ [56727.27, 2, 409.090881],
+ [57272.7266, 3, 0],
+ [57272.7266, 7, 0],
+ [57409.09, 2, 0],
+ [57409.09, 6, 0],
+ [57545.4531, 3, 0],
+ [57545.4531, 7, 0],
+ [57681.8164, 2, 0],
+ [57681.8164, 6, 0],
+ [57818.18, 0, 0],
+ [57818.18, 4, 0],
+ [57954.543, 1, 0],
+ [57954.543, 5, 0],
+ [58090.9063, 0, 0],
+ [58090.9063, 4, 0],
+ [58227.27, 1, 0],
+ [58227.27, 5, 0],
+ [58363.6328, 0, 0],
+ [58363.6328, 4, 0],
+ [58500, 3, 0],
+ [58500, 7, 0],
+ [58636.3633, 0, 0],
+ [58636.3633, 4, 0],
+ [58772.7266, 3, 0],
+ [58772.7266, 7, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [58909.09, 1, 409.090881],
+ [58909.09, 5, 409.090881],
+ [59454.543, 4, 0],
+ [59454.543, 0, 0],
+ [59590.9063, 7, 0],
+ [59590.9063, 3, 0],
+ [59727.27, 4, 0],
+ [59727.27, 0, 0],
+ [59863.6328, 7, 0],
+ [59863.6328, 3, 0],
+ [60000, 6, 136.363632],
+ [60000, 2, 136.363632],
+ [60272.7266, 7, 0],
+ [60272.7266, 3, 0],
+ [60545.4531, 7, 0],
+ [60545.4531, 3, 0],
+ [60818.18, 5, 0],
+ [60818.18, 1, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [61090.9063, 0, 409.090881],
+ [61090.9063, 7, 409.090881],
+ [61636.3633, 4, 409.090881],
+ [61636.3633, 3, 409.090881],
+ [62181.8164, 2, 0],
+ [62181.8164, 6, 0],
+ [62454.543, 2, 0],
+ [62454.543, 6, 0],
+ [62590.9063, 2, 0],
+ [62590.9063, 6, 0],
+ [62727.27, 3, 409.090881],
+ [62727.27, 4, 409.090881]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [63272.7266, 5, 409.090881],
+ [63272.7266, 1, 409.090881],
+ [63818.18, 7, 409.090881],
+ [63818.18, 3, 409.090881],
+ [64363.6328, 6, 409.090881],
+ [64363.6328, 2, 409.090881],
+ [64909.09, 4, 0],
+ [64909.09, 0, 0],
+ [65181.8164, 7, 0],
+ [65181.8164, 3, 0]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [65454.543, 5, 545.4545],
+ [65454.543, 2, 0],
+ [65727.27, 2, 0],
+ [65863.63, 3, 0],
+ [66000, 0, 0],
+ [66272.73, 1, 0],
+ [66545.45, 3, 0],
+ [66681.81, 0, 0],
+ [66818.18, 3, 0],
+ [67090.91, 3, 0],
+ [67227.27, 0, 0],
+ [67363.63, 1, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [67909.0859, 1, 0],
+ [68045.45, 3, 0],
+ [68181.81, 0, 136.363632],
+ [68454.55, 1, 0],
+ [68727.27, 2, 0],
+ [69000, 0, 0],
+ [69272.73, 3, 0],
+ [69545.45, 1, 0],
+ [68818.1818181819, 0, 0],
+ [68909.090909091, 3, 0],
+ [69181.8181818182, 0, 0],
+ [69363.6363636364, 0, 0],
+ [69454.5454545455, 3, 0],
+ [69727.2727272728, 0, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [69818.18, 5, 409.090881],
+ [70090.91, 2, 0],
+ [70227.27, 3, 0],
+ [70363.63, 0, 0],
+ [70363.63, 7, 409.090881],
+ [70636.36, 1, 0],
+ [70909.0859, 3, 0],
+ [70909.0859, 6, 409.090881],
+ [71045.45, 0, 0],
+ [71181.81, 3, 0],
+ [71454.55, 3, 0],
+ [71454.55, 7, 409.090881],
+ [71590.91, 0, 0],
+ [71727.27, 1, 0]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [72000, 5, 409.090881],
+ [72272.73, 1, 0],
+ [72409.0859, 3, 0],
+ [72545.45, 0, 136.363632],
+ [72545.45, 7, 409.090881],
+ [72818.18, 1, 0],
+ [73090.91, 2, 0],
+ [73363.63, 0, 0],
+ [73636.36, 3, 0],
+ [73909.0859, 1, 0],
+ [73181.8181818182, 0, 0],
+ [73272.7272727273, 3, 0],
+ [73545.4545454546, 0, 0],
+ [73727.2727272727, 0, 0],
+ [73818.1818181819, 3, 0],
+ [74090.9090909091, 0, 0]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [74181.81, 0, 136.363632],
+ [74181.81, 5, 409.090881],
+ [74454.55, 2, 0],
+ [74590.91, 3, 0],
+ [74727.27, 0, 0],
+ [74727.27, 7, 409.090881],
+ [74863.63, 1, 0],
+ [75000, 3, 0],
+ [75136.36, 1, 0],
+ [75272.73, 3, 0],
+ [75272.73, 6, 409.090881],
+ [75409.0859, 0, 0],
+ [75545.45, 3, 0],
+ [75681.81, 1, 0],
+ [75818.18, 3, 0],
+ [75818.18, 7, 409.090881],
+ [75954.55, 0, 0],
+ [76090.91, 1, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [76363.63, 0, 0],
+ [76363.63, 5, 409.090881],
+ [76636.36, 1, 0],
+ [76772.73, 3, 0],
+ [76909.0859, 0, 136.363632],
+ [76909.0859, 7, 409.090881],
+ [77181.81, 1, 0],
+ [77454.55, 2, 0],
+ [77454.55, 6, 409.090881],
+ [77590.91, 3, 0],
+ [77727.27, 0, 0],
+ [77863.63, 0, 0],
+ [78000, 3, 0],
+ [78000, 7, 0],
+ [78136.36, 0, 0],
+ [78136.36, 4, 0],
+ [78272.73, 0, 0],
+ [78272.73, 4, 0],
+ [78409.0859, 1, 0],
+ [78409.0859, 5, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [78545.45, 0, 136.363632],
+ [78818.18, 2, 0],
+ [78954.55, 3, 0],
+ [79090.91, 0, 0],
+ [79227.27, 1, 0],
+ [79363.63, 3, 0],
+ [79500, 1, 0],
+ [79636.36, 3, 0],
+ [79772.73, 0, 0],
+ [79909.0859, 3, 0],
+ [80045.45, 1, 0],
+ [80181.81, 3, 0],
+ [80318.18, 0, 0],
+ [80454.55, 1, 0]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [80727.27, 0, 0],
+ [81000, 1, 0],
+ [81136.36, 3, 0],
+ [81272.73, 0, 136.363632],
+ [81545.45, 1, 0],
+ [81818.18, 2, 0],
+ [81954.54, 3, 0],
+ [82090.91, 0, 0],
+ [82227.27, 0, 0],
+ [82363.63, 3, 0],
+ [82500, 0, 0],
+ [82636.36, 0, 0],
+ [82772.73, 1, 0]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [82909.0859, 7, 1090.909],
+ [83181.81, 2, 0],
+ [83454.54, 3, 0],
+ [83727.27, 2, 0],
+ [83863.63, 3, 0],
+ [84136.36, 0, 0],
+ [84409.0859, 2, 0],
+ [84545.45, 3, 0],
+ [84818.18, 0, 0],
+ [84954.54, 3, 0]
+ ],
+ "mustHitSection": false
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [85363.63, 2, 0],
+ [85636.36, 3, 0],
+ [85909.0859, 2, 0],
+ [86045.45, 3, 0],
+ [86318.18, 0, 0],
+ [86590.91, 2, 0],
+ [86727.27, 3, 0],
+ [86863.63, 0, 0],
+ [87000, 1, 0]
+ ],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [[87272.73, 2, 545.4545]],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [],
+ "mustHitSection": true
+ },
+ {
+ "lengthInSteps": 16,
+ "sectionNotes": [],
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [],
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "mustHitSection": true,
+ "changeBPM": false,
+ "bpm": 110
+ },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 110,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "gfVersion": "gf-car",
+ "song": "Satin Panties",
+ "stage": "limo",
+ "needsVoices": true,
+ "validScore": true,
+ "speed": 1.8,
+ "bpm": 110
+ }
+}
diff --git a/assets/preload/data/songs/satin-panties/satin-panties.json b/assets/preload/data/songs/satin-panties/satin-panties.json
new file mode 100644
index 0000000000..521f67f3aa
--- /dev/null
+++ b/assets/preload/data/songs/satin-panties/satin-panties.json
@@ -0,0 +1,684 @@
+{
+ "song": {
+ "player1": "bf-car",
+ "gfVersion": "gf-car",
+ "notes": [
+ {
+ "sectionNotes": [
+ [0, 0, 0],
+ [272.727264, 0, 0],
+ [545.4545, 0, 0],
+ [954.5454, 0, 0],
+ [1363.63635, 0, 0],
+ [1636.36353, 0, 0],
+ [1909.09082, 0, 0],
+ [2045.45447, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [2181.818, 3, 0],
+ [2454.54541, 3, 0],
+ [2727.27271, 3, 0],
+ [3136.36353, 3, 0],
+ [3545.45435, 3, 0],
+ [3818.18164, 3, 0],
+ [4090.909, 3, 0],
+ [4227.27246, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [4636.36328, 2, 0],
+ [4909.091, 3, 0],
+ [5181.818, 2, 0],
+ [5318.18164, 3, 0],
+ [5863.636, 2, 0],
+ [6000, 3, 0],
+ [6272.727, 0, 0],
+ [6409.091, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [6818.18164, 2, 0],
+ [7090.90869, 3, 0],
+ [7363.636, 2, 0],
+ [7500, 3, 0],
+ [7772.727, 0, 0],
+ [8045.454, 2, 0],
+ [8181.818, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [8727.272, 6, 545.4545],
+ [9000, 2, 0],
+ [9272.727, 3, 0],
+ [9545.454, 2, 0],
+ [9681.818, 3, 0],
+ [10227.2725, 2, 0],
+ [10363.6357, 3, 0],
+ [10636.3633, 0, 0],
+ [10772.7266, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [11181.8174, 2, 0],
+ [11454.5449, 3, 0],
+ [11727.2725, 2, 0],
+ [11863.6357, 3, 0],
+ [12136.3633, 0, 0],
+ [12409.0908, 2, 0],
+ [12545.4541, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [13090.9082, 6, 545.4545],
+ [13363.6357, 1, 0],
+ [13636.3633, 0, 0],
+ [13909.0908, 0, 0],
+ [14181.8174, 2, 272.727264],
+ [14590.9082, 3, 0],
+ [14727.2725, 0, 0],
+ [15000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15272.7266, 3, 272.727264],
+ [15681.8174, 0, 0],
+ [15954.5449, 0, 0],
+ [16090.9082, 0, 0],
+ [16363.6357, 2, 272.727264],
+ [16772.7266, 3, 0],
+ [16909.09, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [17454.5449, 6, 545.4545],
+ [17727.2715, 1, 0],
+ [18000, 0, 0],
+ [18272.7266, 0, 0],
+ [18545.4531, 2, 272.727264],
+ [18954.5449, 3, 0],
+ [19090.9082, 0, 0],
+ [19363.6367, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [19636.3633, 3, 272.727264],
+ [20045.4531, 0, 0],
+ [20318.1816, 0, 0],
+ [20454.5449, 0, 0],
+ [20727.2715, 2, 272.727264],
+ [21136.3633, 3, 0],
+ [21272.7266, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [21818.1816, 6, 409.090881],
+ [21818.1816, 2, 409.090881],
+ [22363.6348, 7, 0],
+ [22363.6348, 3, 0],
+ [22636.3633, 7, 0],
+ [22636.3633, 3, 0],
+ [22909.09, 4, 0],
+ [22909.09, 0, 0],
+ [23181.8184, 4, 0],
+ [23181.8184, 0, 0],
+ [23318.1816, 5, 0],
+ [23318.1816, 1, 0],
+ [23454.5449, 4, 0],
+ [23454.5449, 0, 0],
+ [23727.2715, 4, 0],
+ [23727.2715, 0, 0],
+ [23863.6348, 7, 0],
+ [23863.6348, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [24000, 1, 409.090881],
+ [24000, 5, 409.090881],
+ [24545.4531, 4, 0],
+ [24545.4531, 0, 0],
+ [24818.1816, 4, 0],
+ [24818.1816, 0, 0],
+ [24954.5449, 7, 0],
+ [24954.5449, 3, 0],
+ [25090.9082, 6, 136.363632],
+ [25090.9082, 2, 136.363632],
+ [25363.6348, 7, 0],
+ [25363.6348, 3, 0],
+ [25636.3633, 7, 0],
+ [25636.3633, 3, 0],
+ [25909.09, 5, 0],
+ [25909.09, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26181.8164, 4, 409.090881],
+ [26181.8164, 3, 409.090881],
+ [26727.2715, 0, 409.090881],
+ [26727.2715, 7, 409.090881],
+ [27272.7266, 6, 0],
+ [27272.7266, 2, 0],
+ [27545.4531, 6, 0],
+ [27545.4531, 2, 0],
+ [27818.1816, 7, 409.090881],
+ [27818.1816, 0, 409.090881]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [28363.6348, 5, 409.090881],
+ [28363.6348, 1, 409.090881],
+ [28909.09, 7, 409.090881],
+ [28909.09, 3, 409.090881],
+ [29454.5449, 6, 409.090881],
+ [29454.5449, 2, 409.090881],
+ [30000, 4, 0],
+ [30000, 0, 0],
+ [30272.7266, 7, 409.090881],
+ [30272.7266, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30545.4531, 5, 545.4545],
+ [30818.1816, 2, 0],
+ [31090.9082, 0, 0],
+ [31363.6348, 1, 0],
+ [31636.3633, 3, 0],
+ [31772.7266, 0, 0],
+ [31909.09, 3, 0],
+ [32181.8164, 3, 0],
+ [32454.5449, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [33000, 1, 0],
+ [33136.3633, 3, 0],
+ [33272.7266, 0, 136.363632],
+ [33545.4531, 1, 0],
+ [33818.18, 2, 0],
+ [34090.9063, 0, 0],
+ [34363.6367, 3, 0],
+ [34636.3633, 0, 0],
+ [34772.7266, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [34909.09, 7, 0],
+ [35181.8164, 7, 0],
+ [35181.8164, 2, 0],
+ [35454.543, 0, 0],
+ [35727.2734, 1, 0],
+ [36000, 3, 0],
+ [36136.3633, 0, 0],
+ [36272.7266, 3, 0],
+ [36545.4531, 3, 0],
+ [36818.18, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [37363.6367, 1, 0],
+ [37500, 3, 0],
+ [37636.3633, 0, 136.363632],
+ [37909.09, 1, 0],
+ [38181.8164, 2, 0],
+ [38454.543, 0, 0],
+ [38727.2734, 3, 0],
+ [38727.2734, 7, 0],
+ [39000, 5, 0],
+ [39000, 0, 0],
+ [39136.3633, 7, 0],
+ [39136.3633, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [39272.7266, 2, 0],
+ [39272.7266, 7, 0],
+ [39545.4531, 2, 0],
+ [39545.4531, 7, 0],
+ [39818.18, 0, 0],
+ [39954.543, 1, 0],
+ [40090.9063, 3, 0],
+ [40363.6367, 3, 0],
+ [40500, 0, 0],
+ [40636.3633, 3, 0],
+ [40909.09, 3, 0],
+ [41181.8164, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [41454.543, 0, 0],
+ [41727.27, 1, 0],
+ [41863.6367, 3, 0],
+ [42000, 0, 136.363632],
+ [42272.7266, 1, 0],
+ [42545.4531, 2, 0],
+ [42818.18, 0, 0],
+ [43090.9063, 7, 0],
+ [43090.9063, 3, 0],
+ [43363.6367, 5, 0],
+ [43363.6367, 0, 0],
+ [43500, 7, 0],
+ [43500, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [43636.3633, 2, 0],
+ [43909.09, 2, 0],
+ [44181.8164, 0, 0],
+ [44318.18, 1, 0],
+ [44454.543, 3, 0],
+ [44727.27, 3, 0],
+ [44863.6367, 0, 0],
+ [45000, 3, 0],
+ [45272.7266, 3, 0],
+ [45545.4531, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [45818.18, 0, 0],
+ [46090.9063, 1, 0],
+ [46227.27, 3, 0],
+ [46363.6367, 0, 136.363632],
+ [46636.3633, 1, 0],
+ [46909.09, 2, 0],
+ [47181.8164, 0, 0],
+ [47454.543, 3, 0],
+ [47727.27, 0, 0],
+ [47863.6367, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [48272.7266, 2, 0],
+ [48409.09, 3, 0],
+ [48545.4531, 0, 0],
+ [48818.18, 0, 0],
+ [49090.9063, 3, 0],
+ [49363.6367, 3, 0],
+ [49636.3633, 1, 0],
+ [49909.09, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [50454.543, 3, 0],
+ [50590.9063, 1, 0],
+ [50727.27, 0, 0],
+ [51000, 2, 0],
+ [51272.7266, 0, 0],
+ [51545.4531, 2, 0],
+ [51818.18, 0, 0],
+ [52090.9063, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [52363.6328, 6, 545.4545],
+ [52636.3633, 2, 0],
+ [52772.7266, 3, 0],
+ [52909.09, 0, 0],
+ [53181.8164, 0, 0],
+ [53454.543, 3, 0],
+ [53727.27, 3, 0],
+ [54000, 1, 0],
+ [54272.7266, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [54818.18, 3, 0],
+ [54954.543, 1, 0],
+ [55090.9063, 0, 0],
+ [55363.6328, 2, 0],
+ [55636.3633, 0, 0],
+ [55909.09, 2, 0],
+ [56181.8164, 0, 0],
+ [56454.543, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56727.27, 2, 409.090881],
+ [56727.27, 6, 409.090881],
+ [57272.7266, 3, 0],
+ [57272.7266, 7, 0],
+ [57545.4531, 3, 0],
+ [57545.4531, 7, 0],
+ [57818.18, 0, 0],
+ [57818.18, 4, 0],
+ [58090.9063, 0, 0],
+ [58090.9063, 4, 0],
+ [58227.27, 1, 0],
+ [58227.27, 5, 0],
+ [58363.6328, 0, 0],
+ [58363.6328, 4, 0],
+ [58636.3633, 0, 0],
+ [58636.3633, 4, 0],
+ [58772.7266, 3, 0],
+ [58772.7266, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [58909.09, 1, 409.090881],
+ [58909.09, 5, 409.090881],
+ [59454.543, 4, 0],
+ [59454.543, 0, 0],
+ [59727.27, 4, 0],
+ [59727.27, 0, 0],
+ [59863.6328, 7, 0],
+ [59863.6328, 3, 0],
+ [60000, 6, 136.363632],
+ [60000, 2, 136.363632],
+ [60272.7266, 7, 0],
+ [60272.7266, 3, 0],
+ [60545.4531, 7, 0],
+ [60545.4531, 3, 0],
+ [60818.18, 5, 0],
+ [60818.18, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61090.9063, 0, 409.090881],
+ [61090.9063, 7, 409.090881],
+ [61636.3633, 4, 409.090881],
+ [61636.3633, 3, 409.090881],
+ [62181.8164, 2, 0],
+ [62181.8164, 6, 0],
+ [62454.543, 2, 0],
+ [62454.543, 6, 0],
+ [62727.27, 3, 409.090881],
+ [62727.27, 4, 409.090881]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [63272.7266, 5, 409.090881],
+ [63272.7266, 1, 409.090881],
+ [63818.18, 7, 409.090881],
+ [63818.18, 3, 409.090881],
+ [64363.6328, 6, 409.090881],
+ [64363.6328, 2, 409.090881],
+ [64909.09, 4, 0],
+ [64909.09, 0, 0],
+ [65181.8164, 7, 0],
+ [65181.8164, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65454.543, 5, 545.4545],
+ [65727.27, 2, 0],
+ [66000, 0, 0],
+ [66272.73, 1, 0],
+ [66545.45, 3, 0],
+ [66681.81, 0, 0],
+ [66818.18, 3, 0],
+ [67090.91, 3, 0],
+ [67363.63, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [67909.0859, 1, 0],
+ [68045.45, 3, 0],
+ [68181.81, 0, 136.363632],
+ [68454.55, 1, 0],
+ [68727.27, 3, 0],
+ [69000, 0, 0],
+ [69181.81, 0, 0],
+ [69272.73, 3, 0],
+ [69545.45, 1, 0],
+ [69727.27, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [69818.18, 5, 409.090881],
+ [70090.91, 2, 0],
+ [70363.63, 0, 0],
+ [70363.63, 7, 409.090881],
+ [70636.36, 1, 0],
+ [70909.0859, 3, 0],
+ [70909.0859, 6, 409.090881],
+ [71045.45, 0, 0],
+ [71181.81, 3, 0],
+ [71454.55, 3, 0],
+ [71454.55, 7, 409.090881],
+ [71727.27, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [72000, 5, 409.090881],
+ [72272.73, 1, 0],
+ [72409.0859, 3, 0],
+ [72545.45, 0, 136.363632],
+ [72545.45, 7, 409.090881],
+ [72818.18, 1, 0],
+ [73090.91, 3, 0],
+ [73363.63, 0, 0],
+ [73545.45, 0, 0],
+ [73636.36, 3, 0],
+ [73909.0859, 1, 0],
+ [74090.91, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [74181.81, 2, 0],
+ [74181.81, 5, 409.090881],
+ [74454.55, 2, 0],
+ [74727.27, 0, 0],
+ [74727.27, 7, 409.090881],
+ [74863.63, 1, 0],
+ [75000, 3, 0],
+ [75272.73, 3, 0],
+ [75272.73, 6, 409.090881],
+ [75409.0859, 0, 0],
+ [75545.45, 3, 0],
+ [75818.18, 3, 0],
+ [75818.18, 7, 409.090881],
+ [76090.91, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [76363.63, 0, 0],
+ [76363.63, 5, 409.090881],
+ [76636.36, 1, 0],
+ [76772.73, 3, 0],
+ [76909.0859, 0, 136.363632],
+ [76909.0859, 7, 409.090881],
+ [77181.81, 1, 0],
+ [77454.55, 2, 0],
+ [77454.55, 6, 409.090881],
+ [77727.27, 0, 0],
+ [78000, 3, 0],
+ [78000, 7, 0],
+ [78136.36, 4, 0],
+ [78272.73, 0, 0],
+ [78409.0859, 1, 0],
+ [78409.0859, 5, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [78545.45, 2, 0],
+ [78818.18, 2, 0],
+ [79090.91, 0, 0],
+ [79227.27, 1, 0],
+ [79363.63, 3, 0],
+ [79636.36, 3, 0],
+ [79772.73, 0, 0],
+ [79909.0859, 3, 0],
+ [80181.81, 3, 0],
+ [80454.55, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80727.27, 0, 0],
+ [81000, 1, 0],
+ [81136.36, 3, 0],
+ [81272.73, 0, 136.363632],
+ [81545.45, 1, 0],
+ [81818.18, 2, 0],
+ [82090.91, 0, 0],
+ [82363.63, 3, 0],
+ [82636.36, 0, 0],
+ [82772.73, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [82909.0859, 7, 1090.909],
+ [83181.81, 2, 0],
+ [83454.54, 3, 0],
+ [83727.27, 2, 0],
+ [83863.63, 3, 0],
+ [84409.0859, 2, 0],
+ [84545.45, 3, 0],
+ [84818.18, 0, 0],
+ [84954.54, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [85363.63, 2, 0],
+ [85636.36, 3, 0],
+ [85909.0859, 2, 0],
+ [86045.45, 3, 0],
+ [86590.91, 2, 0],
+ [86727.27, 3, 0],
+ [87000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[87272.73, 2, 545.4545]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 110,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "mom-car",
+ "song": "Satin Panties",
+ "stage": "limo",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 110,
+ "speed": 1.6
+ }
+}
diff --git a/assets/preload/data/songs/senpai/_meta.json b/assets/preload/data/songs/senpai/_meta.json
new file mode 100644
index 0000000000..ae820d2296
--- /dev/null
+++ b/assets/preload/data/songs/senpai/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": -50
+}
\ No newline at end of file
diff --git a/assets/preload/data/senpai/dialogue.txt b/assets/preload/data/songs/senpai/dialogue.txt
similarity index 100%
rename from assets/preload/data/senpai/dialogue.txt
rename to assets/preload/data/songs/senpai/dialogue.txt
diff --git a/assets/preload/data/songs/senpai/senpai-easy.json b/assets/preload/data/songs/senpai/senpai-easy.json
new file mode 100644
index 0000000000..65af50407b
--- /dev/null
+++ b/assets/preload/data/songs/senpai/senpai-easy.json
@@ -0,0 +1,655 @@
+{
+ "song": {
+ "player1": "bf-pixel",
+ "gfVersion": "gf-pixel",
+ "notes": [
+ {
+ "sectionNotes": [
+ [0, 3, 0],
+ [416.666656, 3, 0],
+ [833.3333, 2, 312.5],
+ [1250, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [1666.66663, 3, 416.666656],
+ [2291.6665, 1, 833.3333]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [3333.33325, 3, 0],
+ [3750, 3, 0],
+ [4166.6665, 2, 312.5],
+ [4583.333, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [5000, 3, 312.5],
+ [5416.6665, 2, 0],
+ [5625, 3, 312.5],
+ [6041.6665, 2, 0],
+ [6250, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [6666.6665, 5, 0],
+ [6666.6665, 1, 0],
+ [7083.333, 5, 0],
+ [7083.333, 1, 0],
+ [7500, 2, 312.5],
+ [7500, 6, 312.5],
+ [7916.6665, 5, 0],
+ [7916.6665, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [8333.333, 4, 312.5],
+ [8333.333, 3, 312.5],
+ [8750, 1, 0],
+ [8750, 5, 0],
+ [8958.333, 0, 312.5],
+ [8958.333, 7, 312.5],
+ [9375, 1, 0],
+ [9375, 5, 0],
+ [9583.333, 0, 0],
+ [9583.333, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [10000, 3, 0],
+ [10000, 4, 0],
+ [10416.666, 5, 0],
+ [10416.666, 1, 0],
+ [10833.333, 0, 0],
+ [10833.333, 7, 0],
+ [11250, 1, 208.333328],
+ [11250, 5, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [11666.666, 4, 0],
+ [11666.666, 3, 0],
+ [12083.333, 5, 0],
+ [12083.333, 1, 0],
+ [12500, 6, 0],
+ [12500, 2, 0],
+ [12916.666, 7, 0],
+ [12916.666, 0, 0],
+ [13125, 6, 0],
+ [13125, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [13750, 2, 208.333328],
+ [14166.666, 1, 520.8333],
+ [14791.666, 3, 625]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15625, 2, 0],
+ [16250, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [16666.666, 3, 312.5],
+ [17083.332, 1, 0],
+ [17291.666, 0, 937.5]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [18333.332, 1, 416.666656],
+ [18958.332, 0, 520.8333],
+ [19583.332, 3, 312.5]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [20000, 5, 416.666656],
+ [20416.666, 2, 312.5],
+ [20833.332, 1, 520.8333],
+ [21458.332, 3, 625]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [22291.666, 2, 0],
+ [22916.666, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [23333.332, 3, 312.5],
+ [23750, 1, 0],
+ [23958.332, 0, 937.5]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [25000, 1, 416.666656],
+ [25625, 0, 520.8333],
+ [26250, 3, 312.5]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [26666.666, 0, 0],
+ [26666.666, 5, 625],
+ [27083.332, 0, 0],
+ [27500, 2, 0],
+ [27500, 7, 625],
+ [27916.666, 3, 0],
+ [28125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [28333.332, 7, 208.333328],
+ [28333.332, 0, 625],
+ [28750, 5, 208.333328],
+ [29166.666, 6, 0],
+ [29166.666, 3, 625],
+ [29583.332, 4, 312.5]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30000, 3, 0],
+ [30000, 6, 625],
+ [30416.666, 1, 0],
+ [30625, 0, 625],
+ [30833.332, 7, 625],
+ [31458.332, 3, 416.666656]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [31666.666, 0, 625],
+ [32083.332, 5, 0],
+ [32291.666, 7, 0],
+ [32500, 1, 625],
+ [32708.332, 4, 0],
+ [32916.6641, 5, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33333.332, 0, 0],
+ [33750, 0, 0],
+ [34166.6641, 2, 0],
+ [34583.332, 3, 0],
+ [34791.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [35000, 3, 208.333328],
+ [35416.6641, 1, 208.333328],
+ [35833.332, 2, 0],
+ [36250, 0, 312.5]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [36666.6641, 3, 0],
+ [37083.332, 1, 0],
+ [37291.6641, 0, 625],
+ [38125, 3, 416.666656]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [38750, 1, 0],
+ [38958.332, 3, 0],
+ [39375, 0, 0],
+ [39583.332, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [40000, 2, 312.5],
+ [40000, 6, 416.666656],
+ [40416.6641, 0, 0],
+ [40833.332, 3, 312.5],
+ [41250, 1, 0],
+ [41458.332, 0, 625]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [42291.6641, 1, 312.5],
+ [42708.332, 3, 312.5],
+ [43125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [43333.332, 3, 312.5],
+ [43750, 0, 0],
+ [43958.332, 2, 312.5],
+ [44375, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [45000, 3, 0],
+ [45416.6641, 3, 0],
+ [45833.332, 3, 0],
+ [46041.6641, 2, 0],
+ [46250, 3, 0],
+ [46458.332, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [46666.6641, 2, 312.5],
+ [47083.332, 0, 0],
+ [47500, 3, 312.5],
+ [47916.6641, 1, 0],
+ [48125, 0, 625]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [48958.332, 1, 312.5],
+ [49375, 3, 312.5],
+ [49791.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [50000, 3, 312.5],
+ [50416.6641, 0, 0],
+ [50625, 2, 312.5],
+ [51041.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [51666.6641, 3, 0],
+ [52083.332, 3, 0],
+ [52500, 3, 0],
+ [52708.332, 2, 0],
+ [52916.6641, 3, 0],
+ [53125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [53333.332, 3, 0],
+ [53333.332, 7, 416.666656],
+ [53750, 3, 0],
+ [54166.6641, 2, 312.5],
+ [54583.332, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [55000, 3, 416.666656],
+ [55625, 1, 833.3333]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [56666.6641, 3, 0],
+ [57083.332, 3, 0],
+ [57500, 2, 312.5],
+ [57916.6641, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [58333.332, 3, 312.5],
+ [58750, 2, 0],
+ [58958.332, 3, 312.5],
+ [59375, 2, 0],
+ [59583.332, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [60000, 5, 0],
+ [60000, 1, 0],
+ [60416.6641, 5, 0],
+ [60416.6641, 1, 0],
+ [60833.332, 2, 312.5],
+ [60833.332, 6, 312.5],
+ [61250, 5, 0],
+ [61250, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61666.6641, 4, 312.5],
+ [61666.6641, 3, 312.5],
+ [62083.332, 1, 0],
+ [62083.332, 5, 0],
+ [62291.6641, 0, 312.5],
+ [62291.6641, 7, 312.5],
+ [62708.332, 1, 0],
+ [62708.332, 5, 0],
+ [62916.6641, 0, 0],
+ [62916.6641, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [63333.332, 3, 0],
+ [63333.332, 4, 0],
+ [63750, 5, 0],
+ [63750, 1, 0],
+ [64166.6641, 0, 0],
+ [64166.6641, 7, 0],
+ [64583.332, 1, 208.333328],
+ [64583.332, 5, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [65000, 4, 0],
+ [65000, 3, 0],
+ [65416.6641, 5, 0],
+ [65416.6641, 1, 0],
+ [65833.33, 6, 0],
+ [65833.33, 2, 0],
+ [66250, 7, 0],
+ [66250, 0, 0],
+ [66458.33, 6, 0],
+ [66458.33, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [66666.6641, 1, 0],
+ [67083.33, 0, 0],
+ [67500, 1, 0],
+ [67916.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [68333.33, 1, 0],
+ [68750, 0, 0],
+ [69166.6641, 2, 0],
+ [69375, 3, 0],
+ [69583.33, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [70000, 1, 0],
+ [70416.6641, 0, 0],
+ [70833.33, 1, 0],
+ [71250, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [71666.6641, 1, 0],
+ [72083.33, 0, 0],
+ [72500, 2, 0],
+ [72708.33, 3, 0],
+ [72916.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [73333.33, 0, 0],
+ [73750, 1, 0],
+ [73958.33, 3, 0],
+ [74166.6641, 0, 0],
+ [74583.33, 1, 0],
+ [74791.6641, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [75000, 0, 0],
+ [75416.6641, 1, 0],
+ [75625, 3, 0],
+ [75833.33, 2, 0],
+ [76041.6641, 3, 0],
+ [76250, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [76666.6641, 0, 0],
+ [77083.33, 1, 0],
+ [77291.6641, 3, 0],
+ [77500, 0, 0],
+ [77916.6641, 1, 0],
+ [78125, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78333.33, 0, 0],
+ [78750, 1, 0],
+ [78958.33, 3, 0],
+ [79166.6641, 2, 0],
+ [79375, 3, 0],
+ [79583.33, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80000, 2, 312.5],
+ [80000, 6, 312.5],
+ [80416.6641, 0, 0],
+ [80833.33, 3, 312.5],
+ [81250, 1, 0],
+ [81458.33, 0, 625]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [82291.6641, 1, 312.5],
+ [82708.33, 3, 312.5],
+ [83125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [83333.33, 3, 312.5],
+ [83750, 0, 0],
+ [83958.33, 2, 312.5],
+ [84375, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [85000, 3, 0],
+ [85416.6641, 3, 0],
+ [85833.33, 3, 0],
+ [86041.6641, 2, 0],
+ [86250, 3, 0],
+ [86458.33, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [86666.6641, 2, 312.5],
+ [87083.33, 0, 0],
+ [87500, 3, 312.5],
+ [87916.6641, 1, 0],
+ [88125, 0, 625]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [88958.33, 1, 312.5],
+ [89375, 3, 312.5],
+ [89791.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [90000, 3, 312.5],
+ [90416.6641, 0, 0],
+ [90625, 2, 312.5],
+ [91041.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [91666.6641, 3, 0],
+ [92083.33, 3, 0],
+ [92500, 3, 0],
+ [92708.33, 2, 0],
+ [92916.6641, 3, 0],
+ [93125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [93333.33, 5, 833.3333],
+ [93333.33, 3, 833.3333]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": false },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": false },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 144,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "senpai",
+ "song": "Senpai",
+ "stage": "school",
+ "needsVoices": true,
+ "validScore": true,
+ "noteStyle": "pixel",
+ "bpm": 144,
+ "speed": 1
+ }
+}
diff --git a/assets/preload/data/songs/senpai/senpai-hard.json b/assets/preload/data/songs/senpai/senpai-hard.json
new file mode 100644
index 0000000000..a68b73ba1d
--- /dev/null
+++ b/assets/preload/data/songs/senpai/senpai-hard.json
@@ -0,0 +1,754 @@
+{
+ "song": {
+ "player1": "bf-pixel",
+ "gfVersion": "gf-pixel",
+ "notes": [
+ {
+ "sectionNotes": [
+ [0, 3, 0],
+ [416.666656, 3, 0],
+ [625, 0, 0],
+ [833.3333, 2, 312.5],
+ [1250, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [1666.66663, 3, 416.666656],
+ [2291.6665, 1, 833.3333]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [3333.33325, 3, 0],
+ [3750, 3, 0],
+ [3958.33325, 0, 0],
+ [4166.6665, 2, 312.5],
+ [4583.333, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [5000, 3, 312.5],
+ [5416.6665, 2, 0],
+ [5625, 3, 312.5],
+ [6041.6665, 2, 0],
+ [6250, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [6666.6665, 5, 0],
+ [6666.6665, 1, 0],
+ [7083.333, 5, 0],
+ [7083.333, 1, 0],
+ [7291.6665, 3, 0],
+ [7291.6665, 4, 0],
+ [7500, 2, 312.5],
+ [7500, 6, 312.5],
+ [7916.6665, 5, 0],
+ [7916.6665, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [8333.333, 4, 312.5],
+ [8333.333, 3, 312.5],
+ [8750, 1, 0],
+ [8750, 5, 0],
+ [8958.333, 7, 312.5],
+ [8958.333, 0, 312.5],
+ [9375, 1, 0],
+ [9375, 5, 0],
+ [9583.333, 0, 0],
+ [9583.333, 4, 0],
+ [9583.333, 7, 0],
+ [9583.333, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [10000, 3, 0],
+ [10000, 4, 0],
+ [10416.666, 5, 0],
+ [10416.666, 1, 0],
+ [10833.333, 0, 0],
+ [10833.333, 7, 0],
+ [11041.666, 3, 0],
+ [11041.666, 4, 0],
+ [11250, 1, 208.333328],
+ [11250, 5, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [11666.666, 4, 0],
+ [11666.666, 3, 0],
+ [11875, 7, 0],
+ [11875, 0, 0],
+ [12083.333, 5, 0],
+ [12083.333, 1, 0],
+ [12291.666, 4, 0],
+ [12291.666, 3, 0],
+ [12500, 6, 0],
+ [12500, 2, 0],
+ [12708.333, 4, 0],
+ [12708.333, 3, 0],
+ [12916.666, 7, 0],
+ [12916.666, 0, 0],
+ [13125, 6, 0],
+ [13125, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [13750, 2, 208.333328],
+ [14166.666, 1, 520.8333],
+ [14791.666, 3, 625]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15625, 0, 0],
+ [15729.166, 2, 0],
+ [16041.666, 3, 0],
+ [16250, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [16666.666, 3, 312.5],
+ [17083.332, 1, 0],
+ [17291.666, 0, 937.5]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [18333.332, 1, 416.666656],
+ [18958.332, 0, 520.8333],
+ [19583.332, 3, 312.5]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [20000, 5, 416.666656],
+ [20416.666, 2, 208.333328],
+ [20833.332, 1, 520.8333],
+ [21458.332, 3, 625]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [22291.666, 0, 0],
+ [22395.832, 2, 0],
+ [22708.332, 3, 0],
+ [22916.666, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [23333.332, 3, 312.5],
+ [23750, 1, 0],
+ [23958.332, 0, 937.5]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [25000, 1, 416.666656],
+ [25625, 0, 520.8333],
+ [26250, 3, 312.5]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [26666.666, 5, 729.1666],
+ [26666.666, 0, 0],
+ [26770.832, 3, 0],
+ [26875, 1, 0],
+ [26979.166, 3, 0],
+ [27083.332, 0, 0],
+ [27291.666, 1, 0],
+ [27500, 7, 729.1666],
+ [27500, 2, 0],
+ [27708.332, 0, 0],
+ [27916.666, 3, 0],
+ [28125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [28333.332, 0, 729.1666],
+ [28333.332, 7, 208.333328],
+ [28750, 5, 208.333328],
+ [29166.666, 3, 729.1666],
+ [29166.666, 6, 0],
+ [29375, 7, 0],
+ [29583.332, 4, 312.5]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30000, 6, 729.1666],
+ [30000, 3, 0],
+ [30416.666, 1, 0],
+ [30625, 0, 625],
+ [30833.332, 7, 729.1666],
+ [31458.332, 3, 416.666656]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [31666.666, 0, 729.1666],
+ [32083.332, 5, 0],
+ [32291.666, 7, 0],
+ [32500, 1, 625],
+ [32500, 7, 0],
+ [32708.332, 4, 0],
+ [32916.6641, 5, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33333.332, 0, 0],
+ [33437.5, 3, 0],
+ [33541.6641, 1, 0],
+ [33645.832, 3, 0],
+ [33750, 0, 0],
+ [33958.332, 1, 0],
+ [34166.6641, 2, 0],
+ [34375, 0, 0],
+ [34583.332, 3, 0],
+ [34791.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [35000, 3, 208.333328],
+ [35416.6641, 1, 208.333328],
+ [35833.332, 2, 0],
+ [36041.6641, 3, 0],
+ [36250, 0, 312.5]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [36666.6641, 3, 0],
+ [37083.332, 1, 0],
+ [37291.6641, 0, 625],
+ [38125, 3, 416.666656]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [38750, 1, 0],
+ [38958.332, 3, 0],
+ [39166.6641, 3, 0],
+ [39375, 0, 0],
+ [39583.332, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [40000, 2, 312.5],
+ [40000, 6, 416.666656],
+ [40416.6641, 0, 0],
+ [40520.832, 1, 0],
+ [40625, 0, 0],
+ [40729.1641, 1, 0],
+ [40833.332, 3, 312.5],
+ [41250, 1, 0],
+ [41458.332, 0, 625]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [42291.6641, 1, 312.5],
+ [42708.332, 3, 312.5],
+ [43125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [43333.332, 3, 312.5],
+ [43750, 0, 0],
+ [43958.332, 2, 312.5],
+ [44375, 0, 0],
+ [44583.332, 2, 0],
+ [44791.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [45000, 3, 0],
+ [45208.332, 1, 0],
+ [45312.5, 0, 0],
+ [45416.6641, 3, 0],
+ [45625, 1, 0],
+ [45833.332, 3, 0],
+ [46041.6641, 2, 0],
+ [46250, 3, 0],
+ [46458.332, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [46666.6641, 2, 312.5],
+ [47083.332, 0, 0],
+ [47187.5, 1, 0],
+ [47291.6641, 0, 0],
+ [47395.832, 1, 0],
+ [47500, 3, 312.5],
+ [47916.6641, 1, 0],
+ [48125, 0, 625]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [48958.332, 1, 312.5],
+ [49375, 3, 312.5],
+ [49791.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [50000, 3, 312.5],
+ [50416.6641, 0, 0],
+ [50625, 2, 312.5],
+ [51041.6641, 0, 0],
+ [51250, 2, 0],
+ [51458.332, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [51666.6641, 3, 0],
+ [51875, 1, 0],
+ [51979.1641, 0, 0],
+ [52083.332, 3, 0],
+ [52291.6641, 1, 0],
+ [52500, 3, 0],
+ [52708.332, 2, 0],
+ [52916.6641, 3, 0],
+ [53125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [53333.332, 3, 0],
+ [53333.332, 7, 416.666656],
+ [53750, 3, 0],
+ [53958.332, 0, 0],
+ [54166.6641, 2, 312.5],
+ [54583.332, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [55000, 3, 416.666656],
+ [55625, 1, 833.3333]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [56666.6641, 3, 0],
+ [57083.332, 3, 0],
+ [57291.6641, 0, 0],
+ [57500, 2, 312.5],
+ [57916.6641, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [58333.332, 3, 312.5],
+ [58750, 2, 0],
+ [58958.332, 3, 312.5],
+ [59375, 2, 0],
+ [59583.332, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [60000, 5, 0],
+ [60000, 1, 0],
+ [60416.6641, 5, 0],
+ [60416.6641, 1, 0],
+ [60625, 3, 0],
+ [60625, 4, 0],
+ [60833.332, 2, 312.5],
+ [60833.332, 6, 312.5],
+ [61250, 5, 0],
+ [61250, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61666.6641, 4, 312.5],
+ [61666.6641, 3, 312.5],
+ [62083.332, 1, 0],
+ [62083.332, 5, 0],
+ [62291.6641, 7, 312.5],
+ [62291.6641, 0, 312.5],
+ [62708.332, 1, 0],
+ [62708.332, 5, 0],
+ [62916.6641, 0, 0],
+ [62916.6641, 4, 0],
+ [62916.6641, 7, 0],
+ [62916.6641, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [63333.332, 3, 0],
+ [63333.332, 4, 0],
+ [63750, 5, 0],
+ [63750, 1, 0],
+ [64166.6641, 0, 0],
+ [64166.6641, 7, 0],
+ [64375, 3, 0],
+ [64375, 4, 0],
+ [64583.332, 1, 208.333328],
+ [64583.332, 5, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [65000, 4, 0],
+ [65000, 3, 0],
+ [65208.332, 7, 0],
+ [65208.332, 0, 0],
+ [65416.6641, 5, 0],
+ [65416.6641, 1, 0],
+ [65625, 4, 0],
+ [65625, 3, 0],
+ [65833.33, 6, 0],
+ [65833.33, 2, 0],
+ [66041.6641, 4, 0],
+ [66041.6641, 3, 0],
+ [66250, 7, 0],
+ [66250, 0, 0],
+ [66458.33, 6, 0],
+ [66458.33, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [66666.6641, 1, 0],
+ [66875, 3, 0],
+ [67083.33, 0, 0],
+ [67291.6641, 3, 0],
+ [67500, 1, 0],
+ [67708.33, 3, 0],
+ [67916.6641, 0, 0],
+ [68125, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [68333.33, 1, 0],
+ [68541.6641, 3, 0],
+ [68750, 0, 0],
+ [68958.33, 3, 0],
+ [69166.6641, 2, 0],
+ [69375, 3, 0],
+ [69583.33, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [70000, 1, 0],
+ [70208.33, 3, 0],
+ [70416.6641, 0, 0],
+ [70625, 3, 0],
+ [70833.33, 1, 0],
+ [71041.6641, 3, 0],
+ [71250, 0, 0],
+ [71458.33, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [71666.6641, 1, 0],
+ [71875, 3, 0],
+ [72083.33, 0, 0],
+ [72291.6641, 3, 0],
+ [72500, 2, 0],
+ [72708.33, 3, 0],
+ [72916.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [73333.33, 0, 0],
+ [73541.6641, 3, 0],
+ [73750, 1, 0],
+ [73958.33, 3, 0],
+ [74062.5, 2, 0],
+ [74166.6641, 0, 0],
+ [74375, 3, 0],
+ [74583.33, 1, 0],
+ [74791.6641, 3, 0],
+ [74895.83, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [75000, 0, 0],
+ [75208.33, 3, 0],
+ [75416.6641, 1, 0],
+ [75625, 3, 0],
+ [75833.33, 2, 0],
+ [76041.6641, 3, 0],
+ [76250, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [76666.6641, 0, 0],
+ [76875, 3, 0],
+ [77083.33, 1, 0],
+ [77291.6641, 3, 0],
+ [77395.83, 2, 0],
+ [77500, 0, 0],
+ [77708.33, 3, 0],
+ [77916.6641, 1, 0],
+ [78125, 3, 0],
+ [78229.1641, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78333.33, 0, 0],
+ [78541.6641, 3, 0],
+ [78750, 1, 0],
+ [78958.33, 3, 0],
+ [79166.6641, 2, 0],
+ [79375, 3, 0],
+ [79583.33, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80000, 2, 312.5],
+ [80416.6641, 0, 0],
+ [80520.83, 1, 0],
+ [80625, 0, 0],
+ [80729.1641, 1, 0],
+ [80833.33, 3, 312.5],
+ [81250, 1, 0],
+ [81458.33, 0, 625]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [82291.6641, 1, 312.5],
+ [82708.33, 3, 312.5],
+ [83125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [83333.33, 3, 312.5],
+ [83750, 0, 0],
+ [83958.33, 2, 312.5],
+ [84375, 0, 0],
+ [84583.33, 2, 0],
+ [84791.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [85000, 3, 0],
+ [85208.33, 1, 0],
+ [85312.5, 0, 0],
+ [85416.6641, 3, 0],
+ [85625, 1, 0],
+ [85833.33, 3, 0],
+ [86041.6641, 2, 0],
+ [86250, 3, 0],
+ [86458.33, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [86666.6641, 2, 312.5],
+ [87083.33, 0, 0],
+ [87187.5, 1, 0],
+ [87291.6641, 0, 0],
+ [87395.83, 1, 0],
+ [87500, 3, 312.5],
+ [87916.6641, 1, 0],
+ [88125, 0, 625]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [88958.33, 1, 312.5],
+ [89375, 3, 312.5],
+ [89791.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [90000, 3, 312.5],
+ [90416.6641, 0, 0],
+ [90625, 2, 312.5],
+ [91041.6641, 0, 0],
+ [91250, 2, 0],
+ [91458.33, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [91666.6641, 3, 0],
+ [91875, 1, 0],
+ [91979.1641, 0, 0],
+ [92083.33, 3, 0],
+ [92291.6641, 1, 0],
+ [92500, 3, 0],
+ [92708.33, 2, 0],
+ [92916.6641, 3, 0],
+ [93125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [93333.33, 5, 833.3333],
+ [93333.33, 3, 833.3333]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": false },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": false },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 144,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "senpai",
+ "song": "Senpai",
+ "stage": "school",
+ "needsVoices": true,
+ "validScore": true,
+ "noteStyle": "pixel",
+ "bpm": 144,
+ "speed": 1.3
+ }
+}
diff --git a/assets/preload/data/songs/senpai/senpai.json b/assets/preload/data/songs/senpai/senpai.json
new file mode 100644
index 0000000000..942b847032
--- /dev/null
+++ b/assets/preload/data/songs/senpai/senpai.json
@@ -0,0 +1,710 @@
+{
+ "song": {
+ "player1": "bf-pixel",
+ "gfVersion": "gf-pixel",
+ "notes": [
+ {
+ "sectionNotes": [
+ [0, 3, 0],
+ [416.666656, 3, 0],
+ [625, 0, 0],
+ [833.3333, 2, 312.5],
+ [1250, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [1666.66663, 3, 416.666656],
+ [2291.6665, 1, 833.3333]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [3333.33325, 3, 0],
+ [3750, 3, 0],
+ [3958.33325, 0, 0],
+ [4166.6665, 2, 312.5],
+ [4583.333, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [5000, 3, 312.5],
+ [5416.6665, 2, 0],
+ [5625, 3, 312.5],
+ [6041.6665, 2, 0],
+ [6250, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [6666.6665, 5, 0],
+ [6666.6665, 1, 0],
+ [7083.333, 5, 0],
+ [7083.333, 1, 0],
+ [7500, 2, 312.5],
+ [7500, 6, 312.5],
+ [7916.6665, 5, 0],
+ [7916.6665, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [8333.333, 4, 312.5],
+ [8333.333, 3, 312.5],
+ [8750, 5, 0],
+ [8750, 1, 0],
+ [8958.333, 7, 312.5],
+ [8958.333, 0, 312.5],
+ [9375, 1, 0],
+ [9375, 5, 0],
+ [9583.333, 7, 0],
+ [9583.333, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [10000, 3, 0],
+ [10000, 4, 0],
+ [10416.666, 5, 0],
+ [10416.666, 1, 0],
+ [10833.333, 0, 0],
+ [10833.333, 7, 0],
+ [11041.666, 3, 0],
+ [11041.666, 4, 0],
+ [11250, 1, 208.333328],
+ [11250, 5, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [11666.666, 4, 0],
+ [11666.666, 3, 0],
+ [12083.333, 5, 0],
+ [12083.333, 1, 0],
+ [12500, 6, 0],
+ [12500, 2, 0],
+ [12708.333, 4, 0],
+ [12708.333, 3, 0],
+ [12916.666, 7, 0],
+ [12916.666, 0, 0],
+ [13125, 6, 0],
+ [13125, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [13750, 2, 208.333328],
+ [14166.666, 1, 520.8333],
+ [14791.666, 3, 625]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15625, 0, 0],
+ [15729.166, 2, 0],
+ [16250, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [16666.666, 3, 312.5],
+ [17083.332, 1, 0],
+ [17291.666, 0, 937.5]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [18333.332, 1, 416.666656],
+ [18958.332, 0, 520.8333],
+ [19583.332, 3, 312.5]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [20000, 5, 416.666656],
+ [20416.666, 2, 208.333328],
+ [20833.332, 1, 520.8333],
+ [21458.332, 3, 625]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [22291.666, 0, 0],
+ [22395.832, 2, 0],
+ [22916.666, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [23333.332, 3, 312.5],
+ [23750, 1, 0],
+ [23958.332, 0, 937.5]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [25000, 1, 416.666656],
+ [25625, 0, 520.8333],
+ [26250, 3, 312.5]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [26666.666, 0, 0],
+ [26666.666, 5, 729.1666],
+ [27083.332, 0, 0],
+ [27500, 2, 0],
+ [27500, 7, 729.1666],
+ [27708.332, 0, 0],
+ [27916.666, 3, 0],
+ [28125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [28333.332, 7, 208.333328],
+ [28333.332, 0, 729.1666],
+ [28750, 5, 208.333328],
+ [29166.666, 6, 0],
+ [29166.666, 3, 729.1666],
+ [29375, 7, 0],
+ [29583.332, 4, 312.5]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30000, 3, 0],
+ [30000, 6, 729.1666],
+ [30416.666, 1, 0],
+ [30625, 0, 625],
+ [30833.332, 7, 729.1666],
+ [31458.332, 3, 416.666656]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [31666.666, 0, 729.1666],
+ [32083.332, 5, 0],
+ [32291.666, 7, 0],
+ [32500, 1, 729.1666],
+ [32708.332, 4, 0],
+ [32916.6641, 5, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33333.332, 0, 0],
+ [33750, 0, 0],
+ [34166.6641, 2, 0],
+ [34375, 0, 0],
+ [34583.332, 3, 0],
+ [34791.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [35000, 3, 208.333328],
+ [35416.6641, 1, 208.333328],
+ [35833.332, 2, 0],
+ [36041.6641, 3, 0],
+ [36250, 0, 312.5]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [36666.6641, 3, 0],
+ [37083.332, 1, 0],
+ [37291.6641, 0, 625],
+ [38125, 3, 416.666656]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [38750, 1, 0],
+ [38958.332, 3, 0],
+ [39375, 0, 0],
+ [39583.332, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [40000, 2, 312.5],
+ [40000, 6, 416.666656],
+ [40416.6641, 0, 0],
+ [40520.832, 1, 0],
+ [40625, 0, 0],
+ [40729.1641, 1, 0],
+ [40833.332, 3, 312.5],
+ [41250, 1, 0],
+ [41458.332, 0, 625]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [42291.6641, 1, 312.5],
+ [42708.332, 3, 312.5],
+ [43125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [43333.332, 3, 312.5],
+ [43750, 0, 0],
+ [43958.332, 2, 312.5],
+ [44375, 0, 0],
+ [44583.332, 2, 0],
+ [44791.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [45000, 3, 0],
+ [45416.6641, 3, 0],
+ [45625, 1, 0],
+ [45833.332, 3, 0],
+ [46041.6641, 2, 0],
+ [46250, 3, 0],
+ [46458.332, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [46666.6641, 2, 312.5],
+ [47083.332, 0, 0],
+ [47187.5, 1, 0],
+ [47291.6641, 0, 0],
+ [47395.832, 1, 0],
+ [47500, 3, 312.5],
+ [47916.6641, 1, 0],
+ [48125, 0, 625]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [48958.332, 1, 312.5],
+ [49375, 3, 312.5],
+ [49791.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [50000, 3, 312.5],
+ [50416.6641, 0, 0],
+ [50625, 2, 312.5],
+ [51041.6641, 0, 0],
+ [51250, 2, 0],
+ [51458.332, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [51666.6641, 3, 0],
+ [52083.332, 3, 0],
+ [52291.6641, 1, 0],
+ [52500, 3, 0],
+ [52708.332, 2, 0],
+ [52916.6641, 3, 0],
+ [53125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [53333.332, 3, 0],
+ [53333.332, 7, 416.666656],
+ [53750, 3, 0],
+ [53958.332, 0, 0],
+ [54166.6641, 2, 312.5],
+ [54583.332, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [55000, 3, 416.666656],
+ [55625, 1, 833.3333]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [56666.6641, 3, 0],
+ [57083.332, 3, 0],
+ [57291.6641, 0, 0],
+ [57500, 2, 312.5],
+ [57916.6641, 1, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [58333.332, 3, 312.5],
+ [58750, 2, 0],
+ [58958.332, 3, 312.5],
+ [59375, 2, 0],
+ [59583.332, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [60000, 5, 0],
+ [60000, 1, 0],
+ [60416.6641, 5, 0],
+ [60416.6641, 1, 0],
+ [60833.332, 2, 312.5],
+ [60833.332, 6, 312.5],
+ [61250, 5, 0],
+ [61250, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61666.6641, 4, 312.5],
+ [61666.6641, 3, 312.5],
+ [62083.332, 5, 0],
+ [62083.332, 1, 0],
+ [62291.6641, 7, 312.5],
+ [62291.6641, 0, 312.5],
+ [62708.332, 1, 0],
+ [62708.332, 5, 0],
+ [62916.6641, 7, 0],
+ [62916.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [63333.332, 3, 0],
+ [63333.332, 4, 0],
+ [63750, 5, 0],
+ [63750, 1, 0],
+ [64166.6641, 0, 0],
+ [64166.6641, 7, 0],
+ [64375, 3, 0],
+ [64375, 4, 0],
+ [64583.332, 1, 208.333328],
+ [64583.332, 5, 208.333328]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [65000, 4, 0],
+ [65000, 3, 0],
+ [65416.6641, 5, 0],
+ [65416.6641, 1, 0],
+ [65833.33, 6, 0],
+ [65833.33, 2, 0],
+ [66041.6641, 4, 0],
+ [66041.6641, 3, 0],
+ [66250, 7, 0],
+ [66250, 0, 0],
+ [66458.33, 6, 0],
+ [66458.33, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [66666.6641, 1, 0],
+ [66875, 3, 0],
+ [67083.33, 0, 0],
+ [67500, 1, 0],
+ [67708.33, 3, 0],
+ [67916.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [68333.33, 1, 0],
+ [68541.6641, 3, 0],
+ [68750, 0, 0],
+ [69166.6641, 2, 0],
+ [69375, 3, 0],
+ [69583.33, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [70000, 1, 0],
+ [70208.33, 3, 0],
+ [70416.6641, 0, 0],
+ [70833.33, 1, 0],
+ [71041.6641, 3, 0],
+ [71250, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [71666.6641, 1, 0],
+ [71875, 3, 0],
+ [72083.33, 0, 0],
+ [72500, 2, 0],
+ [72708.33, 3, 0],
+ [72916.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [73333.33, 0, 0],
+ [73541.6641, 3, 0],
+ [73750, 1, 0],
+ [73958.33, 3, 0],
+ [74166.6641, 0, 0],
+ [74375, 3, 0],
+ [74583.33, 1, 0],
+ [74791.6641, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [75000, 0, 0],
+ [75208.33, 3, 0],
+ [75416.6641, 1, 0],
+ [75625, 3, 0],
+ [75833.33, 2, 0],
+ [76041.6641, 3, 0],
+ [76250, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [76666.6641, 0, 0],
+ [76875, 3, 0],
+ [77083.33, 1, 0],
+ [77291.6641, 3, 0],
+ [77500, 0, 0],
+ [77708.33, 3, 0],
+ [77916.6641, 1, 0],
+ [78125, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78333.33, 0, 0],
+ [78541.6641, 3, 0],
+ [78750, 1, 0],
+ [78958.33, 3, 0],
+ [79166.6641, 2, 0],
+ [79375, 3, 0],
+ [79583.33, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80000, 2, 312.5],
+ [80416.6641, 0, 0],
+ [80520.83, 1, 0],
+ [80625, 0, 0],
+ [80729.1641, 1, 0],
+ [80833.33, 3, 312.5],
+ [81250, 1, 0],
+ [81458.33, 0, 625]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [82291.6641, 1, 312.5],
+ [82708.33, 3, 312.5],
+ [83125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [83333.33, 3, 312.5],
+ [83750, 0, 0],
+ [83958.33, 2, 312.5],
+ [84375, 0, 0],
+ [84583.33, 2, 0],
+ [84791.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [85000, 3, 0],
+ [85208.33, 1, 0],
+ [85312.5, 0, 0],
+ [85416.6641, 3, 0],
+ [85625, 1, 0],
+ [85833.33, 3, 0],
+ [86041.6641, 2, 0],
+ [86250, 3, 0],
+ [86458.33, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [86666.6641, 2, 312.5],
+ [87083.33, 0, 0],
+ [87187.5, 1, 0],
+ [87291.6641, 0, 0],
+ [87395.83, 1, 0],
+ [87500, 3, 312.5],
+ [87916.6641, 1, 0],
+ [88125, 0, 625]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [88958.33, 1, 312.5],
+ [89375, 3, 312.5],
+ [89791.6641, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [90000, 3, 312.5],
+ [90416.6641, 0, 0],
+ [90625, 2, 312.5],
+ [91041.6641, 0, 0],
+ [91250, 2, 0],
+ [91458.33, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [91666.6641, 3, 0],
+ [92083.33, 3, 0],
+ [92291.6641, 1, 0],
+ [92500, 3, 0],
+ [92708.33, 2, 0],
+ [92916.6641, 3, 0],
+ [93125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [93333.33, 5, 833.3333],
+ [93333.33, 3, 833.3333]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": false },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": false },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 144,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "senpai",
+ "song": "Senpai",
+ "stage": "school",
+ "needsVoices": true,
+ "validScore": true,
+ "noteStyle": "pixel",
+ "bpm": 144,
+ "speed": 1.2
+ }
+}
diff --git a/assets/preload/data/songs/smash/_meta.json b/assets/preload/data/songs/smash/_meta.json
new file mode 100644
index 0000000000..4c2eee6beb
--- /dev/null
+++ b/assets/preload/data/songs/smash/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/songs/smash/smash.json b/assets/preload/data/songs/smash/smash.json
new file mode 100644
index 0000000000..1570e2fc48
--- /dev/null
+++ b/assets/preload/data/songs/smash/smash.json
@@ -0,0 +1,15 @@
+{
+ "song": "Smash",
+ "bpm": 144,
+ "sections": 1,
+ "notes": [
+ {
+ "lengthInSteps": 16,
+ "notes": [
+ [0, 0],
+ [313, 1],
+ [729, 3]
+ ]
+ }
+ ]
+}
diff --git a/assets/preload/data/songs/south/_meta.json b/assets/preload/data/songs/south/_meta.json
new file mode 100644
index 0000000000..4c2eee6beb
--- /dev/null
+++ b/assets/preload/data/songs/south/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/songs/south/south-easy.json b/assets/preload/data/songs/south/south-easy.json
new file mode 100644
index 0000000000..ca984e2729
--- /dev/null
+++ b/assets/preload/data/songs/south/south-easy.json
@@ -0,0 +1,578 @@
+{
+ "song": {
+ "player1": "bf",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [11636.3633, 3, 0],
+ [12000, 3, 0],
+ [12363.6367, 0, 0],
+ [12727.2725, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [13090.9092, 0, 0],
+ [13454.5449, 1, 0],
+ [13818.1816, 3, 0],
+ [14000, 3, 0],
+ [14181.8184, 3, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [14545.4541, 3, 0],
+ [14909.0908, 3, 0],
+ [15272.7275, 3, 0],
+ [15636.3633, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [16000, 0, 0],
+ [16363.6357, 0, 0],
+ [16727.2734, 2, 0],
+ [17090.9082, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [17454.5449, 3, 0],
+ [17818.1816, 3, 0],
+ [18181.8184, 0, 0],
+ [18545.4551, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [18909.09, 0, 0],
+ [19272.7266, 1, 0],
+ [19636.3633, 3, 0],
+ [19818.1816, 3, 0],
+ [20000, 3, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [20363.6367, 3, 0],
+ [20727.2734, 3, 0],
+ [21090.9082, 3, 0],
+ [21454.5449, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [21818.1816, 0, 0],
+ [22181.8184, 0, 0],
+ [22545.4551, 2, 0],
+ [22909.09, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [23272.7266, 2, 0],
+ [23636.3633, 0, 0],
+ [23818.1816, 0, 0],
+ [24000, 2, 0],
+ [24363.6367, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [24727.2734, 2, 0],
+ [25090.9082, 2, 0],
+ [25454.5449, 2, 0],
+ [25818.1816, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26181.8184, 0, 0],
+ [26545.4551, 0, 0],
+ [26727.2734, 0, 0],
+ [26909.09, 3, 0],
+ [27272.7266, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [27636.3633, 2, 0],
+ [28000, 2, 0],
+ [28363.6367, 2, 0],
+ [28545.4551, 3, 0],
+ [28727.2715, 0, 0],
+ [28909.09, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [29090.9082, 2, 0],
+ [29454.5449, 0, 0],
+ [29636.3633, 0, 0],
+ [29818.1816, 2, 0],
+ [30181.8184, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30545.4551, 2, 0],
+ [30909.09, 2, 0],
+ [31272.7266, 2, 0],
+ [31636.3633, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32000, 0, 0],
+ [32363.6367, 0, 0],
+ [32545.4551, 0, 0],
+ [32727.2715, 3, 0],
+ [33090.91, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33454.5469, 2, 0],
+ [33818.18, 2, 0],
+ [34181.8164, 2, 0],
+ [34363.6367, 3, 0],
+ [34545.4531, 0, 0],
+ [34727.2734, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [34909.09, 2, 0],
+ [35090.91, 3, 0],
+ [35272.7266, 0, 0],
+ [35454.5469, 2, 0],
+ [35636.3633, 3, 0],
+ [35818.18, 0, 0],
+ [36000, 2, 0],
+ [36181.8164, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [36363.6367, 0, 0],
+ [36545.4531, 2, 0],
+ [36727.2734, 3, 0],
+ [36909.09, 0, 0],
+ [37090.91, 0, 0],
+ [37454.5469, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [37818.18, 2, 0],
+ [38000, 3, 0],
+ [38181.8164, 0, 0],
+ [38363.6367, 2, 0],
+ [38545.4531, 3, 0],
+ [38727.2734, 0, 0],
+ [38909.09, 2, 0],
+ [39090.91, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [39272.7266, 0, 0],
+ [39636.3633, 3, 0],
+ [39818.18, 0, 0],
+ [40000, 0, 0],
+ [40363.6367, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [40727.2734, 2, 0],
+ [40909.09, 3, 0],
+ [41090.91, 0, 0],
+ [41272.7266, 2, 0],
+ [41454.5469, 3, 0],
+ [41636.3633, 0, 0],
+ [41818.18, 2, 0],
+ [42000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [42181.8164, 0, 0],
+ [42363.6367, 2, 0],
+ [42545.4531, 3, 0],
+ [42727.2734, 0, 0],
+ [42909.09, 0, 0],
+ [43272.7266, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [43636.3633, 2, 0],
+ [43818.18, 3, 0],
+ [44000, 0, 0],
+ [44181.8164, 2, 0],
+ [44363.6367, 3, 0],
+ [44545.4531, 0, 0],
+ [44727.2734, 2, 0],
+ [44909.09, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [45090.91, 0, 0],
+ [45454.5469, 3, 0],
+ [45636.3633, 0, 0],
+ [45818.18, 0, 0],
+ [46181.8164, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [46545.4531, 0, 0],
+ [46909.09, 1, 0],
+ [47090.91, 0, 0],
+ [47454.5469, 1, 0],
+ [47636.3633, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48000, 0, 0],
+ [48181.8164, 2, 0],
+ [48363.6367, 3, 0],
+ [48545.4531, 0, 0],
+ [48727.2734, 3, 0],
+ [48909.09, 2, 0],
+ [49090.91, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49454.5469, 0, 0],
+ [49818.18, 3, 0],
+ [50000, 0, 0],
+ [50363.6367, 3, 0],
+ [50545.4531, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [50909.09, 1, 0],
+ [51272.7266, 0, 0],
+ [51454.5469, 3, 0],
+ [51636.3633, 2, 0],
+ [52000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [52363.6367, 0, 0],
+ [52727.2734, 1, 0],
+ [52909.09, 0, 0],
+ [53272.7266, 1, 0],
+ [53454.5469, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [53818.18, 0, 0],
+ [54000, 2, 0],
+ [54181.8164, 3, 0],
+ [54363.6367, 0, 0],
+ [54545.4531, 3, 0],
+ [54727.2734, 2, 0],
+ [54909.09, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [55272.7266, 0, 0],
+ [55636.3633, 3, 0],
+ [55818.18, 0, 0],
+ [56181.8164, 3, 0],
+ [56363.6367, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56727.2734, 1, 0],
+ [57090.91, 0, 0],
+ [57272.7266, 3, 0],
+ [57454.543, 4, 0],
+ [57454.543, 2, 0],
+ [57636.3633, 7, 0],
+ [57818.18, 5, 0],
+ [57818.18, 0, 0],
+ [58000, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [58181.8164, 3, 0],
+ [58545.4531, 3, 0],
+ [58909.09, 0, 0],
+ [59272.7266, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [59636.3633, 0, 0],
+ [60000, 1, 0],
+ [60363.6367, 3, 0],
+ [60545.4531, 3, 0],
+ [60727.2734, 3, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61090.91, 3, 0],
+ [61454.543, 3, 0],
+ [61818.18, 2, 0],
+ [62181.8164, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [62545.4531, 0, 0],
+ [62909.09, 0, 0],
+ [63272.7266, 2, 0],
+ [63272.7266, 4, 0],
+ [63454.543, 7, 0],
+ [63636.3633, 0, 0],
+ [63636.3633, 5, 0],
+ [63818.18, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [64000, 3, 0],
+ [64363.6367, 3, 0],
+ [64727.2734, 0, 0],
+ [65090.91, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65454.543, 0, 0],
+ [65818.18, 1, 0],
+ [66181.82, 3, 0],
+ [66363.63, 3, 0],
+ [66545.45, 3, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [66909.09, 3, 0],
+ [67272.73, 3, 0],
+ [67636.36, 2, 0],
+ [68000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [68363.63, 0, 0],
+ [68727.27, 0, 0],
+ [69090.91, 2, 0],
+ [69454.55, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [69818.18, 2, 0],
+ [70181.82, 0, 0],
+ [70363.63, 0, 0],
+ [70545.45, 2, 0],
+ [70909.09, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [71272.73, 2, 0],
+ [71636.36, 2, 0],
+ [72000, 2, 0],
+ [72363.63, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72727.27, 0, 0],
+ [73090.91, 0, 0],
+ [73272.73, 0, 0],
+ [73454.55, 3, 0],
+ [73818.18, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [74181.82, 2, 0],
+ [74545.45, 2, 0],
+ [74909.09, 2, 0],
+ [75090.91, 3, 0],
+ [75272.73, 0, 0],
+ [75454.55, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [75636.36, 2, 0],
+ [76000, 0, 0],
+ [76181.82, 0, 0],
+ [76363.63, 2, 0],
+ [76727.27, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [77090.91, 2, 0],
+ [77454.55, 2, 0],
+ [77818.18, 2, 0],
+ [78181.82, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78545.45, 0, 0],
+ [78909.09, 0, 0],
+ [79090.91, 0, 0],
+ [79272.73, 3, 0],
+ [79636.36, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80000, 2, 0],
+ [80363.63, 2, 0],
+ [80727.27, 2, 0],
+ [80909.09, 3, 0],
+ [81090.91, 0, 0],
+ [81272.73, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 165,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "spooky",
+ "song": "South",
+ "stage": "halloween",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 165,
+ "speed": 1.1
+ }
+}
diff --git a/assets/preload/data/songs/south/south-hard.json b/assets/preload/data/songs/south/south-hard.json
new file mode 100644
index 0000000000..4670d926bf
--- /dev/null
+++ b/assets/preload/data/songs/south/south-hard.json
@@ -0,0 +1,674 @@
+{
+ "song": {
+ "player1": "bf",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [11636.3633, 3, 0],
+ [12000, 3, 0],
+ [12363.6367, 0, 0],
+ [12545.4541, 3, 0],
+ [12727.2725, 2, 0],
+ [12909.0908, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [13090.9092, 0, 0],
+ [13454.5449, 1, 0],
+ [13818.1816, 3, 0],
+ [14000, 3, 0],
+ [14181.8184, 3, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [14545.4541, 3, 0],
+ [14909.0908, 3, 0],
+ [15272.7275, 3, 0],
+ [15454.5449, 2, 0],
+ [15636.3633, 0, 0],
+ [15818.1816, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [16000, 0, 0],
+ [16363.6357, 0, 0],
+ [16727.2734, 2, 0],
+ [17090.9082, 0, 0],
+ [17272.7266, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [17454.5449, 3, 0],
+ [17818.1816, 3, 0],
+ [18181.8184, 0, 0],
+ [18363.6367, 3, 0],
+ [18545.4551, 2, 0],
+ [18727.2734, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [18909.09, 0, 0],
+ [19272.7266, 1, 0],
+ [19636.3633, 3, 0],
+ [19818.1816, 3, 0],
+ [20000, 3, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [20363.6367, 3, 0],
+ [20727.2734, 3, 0],
+ [21090.9082, 3, 0],
+ [21272.7266, 2, 0],
+ [21454.5449, 0, 0],
+ [21636.3633, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [21818.1816, 0, 0],
+ [22181.8184, 0, 0],
+ [22545.4551, 2, 0],
+ [22909.09, 0, 0],
+ [23090.9082, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [23272.7266, 2, 0],
+ [23454.5449, 1, 0],
+ [23636.3633, 0, 0],
+ [23818.1816, 0, 0],
+ [23909.09, 3, 0],
+ [24000, 2, 0],
+ [24181.8184, 0, 0],
+ [24363.6367, 2, 0],
+ [24545.4551, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [24727.2734, 2, 0],
+ [25090.9082, 2, 0],
+ [25454.5449, 2, 0],
+ [25636.3633, 1, 0],
+ [25818.1816, 0, 0],
+ [26000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26181.8184, 0, 0],
+ [26545.4551, 0, 0],
+ [26727.2734, 0, 0],
+ [26818.1816, 2, 0],
+ [26909.09, 3, 0],
+ [27090.9082, 0, 0],
+ [27272.7266, 1, 0],
+ [27454.5449, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [27636.3633, 2, 0],
+ [28000, 2, 0],
+ [28363.6367, 2, 0],
+ [28545.4551, 3, 0],
+ [28727.2715, 0, 0],
+ [28909.09, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [29090.9082, 2, 0],
+ [29272.7266, 1, 0],
+ [29454.5449, 0, 0],
+ [29636.3633, 0, 0],
+ [29727.2715, 3, 0],
+ [29818.1816, 2, 0],
+ [30000, 0, 0],
+ [30181.8184, 2, 0],
+ [30363.6367, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30545.4551, 2, 0],
+ [30909.09, 2, 0],
+ [31272.7266, 2, 0],
+ [31454.5449, 1, 0],
+ [31636.3633, 0, 0],
+ [31818.1816, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32000, 0, 0],
+ [32363.6367, 0, 0],
+ [32545.4551, 0, 0],
+ [32636.3633, 2, 0],
+ [32727.2715, 3, 0],
+ [32909.09, 0, 0],
+ [33090.91, 1, 0],
+ [33272.7266, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33454.5469, 2, 0],
+ [33818.18, 2, 0],
+ [34181.8164, 2, 0],
+ [34363.6367, 3, 0],
+ [34545.4531, 0, 0],
+ [34727.2734, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [34909.09, 2, 0],
+ [35090.91, 3, 0],
+ [35272.7266, 0, 0],
+ [35454.5469, 2, 0],
+ [35636.3633, 3, 0],
+ [35818.18, 0, 0],
+ [36000, 2, 0],
+ [36181.8164, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [36363.6367, 0, 0],
+ [36545.4531, 2, 0],
+ [36727.2734, 3, 0],
+ [36909.09, 0, 0],
+ [37090.91, 0, 0],
+ [37272.7266, 3, 0],
+ [37454.5469, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [37818.18, 2, 0],
+ [38000, 3, 0],
+ [38181.8164, 0, 0],
+ [38363.6367, 2, 0],
+ [38545.4531, 3, 0],
+ [38727.2734, 0, 0],
+ [38909.09, 2, 0],
+ [39090.91, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [39272.7266, 0, 0],
+ [39454.5469, 1, 0],
+ [39545.4531, 1, 0],
+ [39636.3633, 3, 0],
+ [39818.18, 0, 0],
+ [40000, 3, 0],
+ [40181.8164, 0, 0],
+ [40363.6367, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [40727.2734, 2, 0],
+ [40909.09, 3, 0],
+ [41090.91, 0, 0],
+ [41272.7266, 2, 0],
+ [41454.5469, 3, 0],
+ [41636.3633, 0, 0],
+ [41818.18, 2, 0],
+ [42000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [42181.8164, 0, 0],
+ [42363.6367, 2, 0],
+ [42545.4531, 3, 0],
+ [42727.2734, 0, 0],
+ [42909.09, 0, 0],
+ [43090.91, 3, 0],
+ [43272.7266, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [43636.3633, 2, 0],
+ [43818.18, 3, 0],
+ [44000, 0, 0],
+ [44181.8164, 2, 0],
+ [44363.6367, 3, 0],
+ [44545.4531, 0, 0],
+ [44727.2734, 2, 0],
+ [44909.09, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [45090.91, 0, 0],
+ [45272.7266, 1, 0],
+ [45363.6367, 1, 0],
+ [45454.5469, 3, 0],
+ [45636.3633, 0, 0],
+ [45818.18, 3, 0],
+ [46000, 0, 0],
+ [46181.8164, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [46545.4531, 0, 0],
+ [46818.18, 3, 0],
+ [46909.09, 1, 0],
+ [47090.91, 0, 0],
+ [47272.7266, 3, 0],
+ [47454.5469, 1, 0],
+ [47636.3633, 2, 0],
+ [47818.18, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48000, 0, 0],
+ [48181.8164, 2, 0],
+ [48363.6367, 3, 0],
+ [48545.4531, 0, 0],
+ [48727.2734, 3, 0],
+ [48909.09, 2, 0],
+ [49090.91, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49454.5469, 0, 0],
+ [49545.4531, 3, 0],
+ [49636.3633, 2, 0],
+ [49818.18, 3, 0],
+ [50000, 0, 0],
+ [50181.8164, 2, 0],
+ [50363.6367, 3, 0],
+ [50545.4531, 0, 0],
+ [50636.3633, 3, 0],
+ [50727.2734, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [50909.09, 1, 0],
+ [51090.91, 1, 0],
+ [51181.8164, 1, 0],
+ [51272.7266, 0, 0],
+ [51454.5469, 3, 0],
+ [51636.3633, 2, 0],
+ [51818.18, 3, 0],
+ [52000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [52363.6367, 0, 0],
+ [52636.3633, 3, 0],
+ [52727.2734, 1, 0],
+ [52909.09, 0, 0],
+ [53090.91, 3, 0],
+ [53272.7266, 1, 0],
+ [53454.5469, 2, 0],
+ [53636.3633, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [53818.18, 0, 0],
+ [54000, 2, 0],
+ [54181.8164, 3, 0],
+ [54363.6367, 0, 0],
+ [54545.4531, 3, 0],
+ [54727.2734, 2, 0],
+ [54909.09, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [55272.7266, 0, 0],
+ [55363.6367, 3, 0],
+ [55454.5469, 2, 0],
+ [55636.3633, 3, 0],
+ [55818.18, 0, 0],
+ [56000, 2, 0],
+ [56181.8164, 3, 0],
+ [56363.6367, 0, 0],
+ [56454.543, 3, 0],
+ [56545.4531, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56727.2734, 1, 0],
+ [56909.09, 1, 0],
+ [57000, 1, 0],
+ [57090.91, 0, 0],
+ [57272.7266, 3, 0],
+ [57454.543, 4, 0],
+ [57454.543, 2, 0],
+ [57636.3633, 3, 0],
+ [57636.3633, 7, 0],
+ [57818.18, 0, 0],
+ [57818.18, 5, 0],
+ [58000, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [58181.8164, 3, 0],
+ [58545.4531, 3, 0],
+ [58727.2734, 1, 0],
+ [58909.09, 2, 0],
+ [59090.91, 0, 0],
+ [59272.7266, 1, 0],
+ [59454.543, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [59636.3633, 0, 272.727264],
+ [60000, 2, 0],
+ [60363.6367, 2, 0],
+ [60545.4531, 2, 0],
+ [60727.2734, 2, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61090.91, 2, 0],
+ [61454.543, 2, 0],
+ [61636.3633, 3, 0],
+ [61818.18, 1, 0],
+ [62000, 0, 0],
+ [62181.8164, 3, 0],
+ [62363.6367, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [62545.4531, 0, 0],
+ [62909.09, 0, 0],
+ [63272.7266, 2, 0],
+ [63272.7266, 4, 0],
+ [63454.543, 7, 0],
+ [63636.3633, 0, 0],
+ [63636.3633, 5, 0],
+ [63818.18, 3, 0],
+ [63818.18, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [64000, 3, 0],
+ [64363.6367, 3, 0],
+ [64545.4531, 1, 0],
+ [64727.2734, 2, 0],
+ [64909.09, 0, 0],
+ [65090.91, 1, 0],
+ [65272.7266, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65454.543, 0, 272.727264],
+ [65818.18, 2, 0],
+ [66181.82, 2, 0],
+ [66363.63, 2, 0],
+ [66545.45, 2, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [66909.09, 2, 0],
+ [67272.73, 2, 0],
+ [67454.55, 3, 0],
+ [67636.36, 1, 0],
+ [67818.18, 0, 0],
+ [68000, 3, 0],
+ [68181.82, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [68363.63, 0, 0],
+ [68727.27, 0, 0],
+ [69090.91, 2, 0],
+ [69454.55, 0, 0],
+ [69636.36, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [69818.18, 2, 0],
+ [70000, 3, 0],
+ [70181.82, 0, 0],
+ [70363.63, 3, 0],
+ [70454.55, 2, 0],
+ [70545.45, 0, 0],
+ [70727.27, 3, 0],
+ [70909.09, 2, 0],
+ [71090.91, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [71272.73, 2, 0],
+ [71636.36, 2, 0],
+ [71818.18, 0, 0],
+ [72000, 2, 0],
+ [72181.82, 3, 0],
+ [72363.63, 0, 0],
+ [72545.45, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72727.27, 0, 0],
+ [73090.91, 0, 0],
+ [73272.73, 0, 0],
+ [73363.63, 3, 0],
+ [73454.55, 2, 0],
+ [73636.36, 3, 0],
+ [73818.18, 2, 0],
+ [74000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [74181.82, 2, 0],
+ [74363.63, 3, 0],
+ [74545.45, 2, 0],
+ [74727.27, 0, 0],
+ [74909.09, 1, 0],
+ [75090.91, 3, 0],
+ [75272.73, 0, 0],
+ [75454.55, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [75636.36, 2, 0],
+ [75818.18, 3, 0],
+ [76000, 0, 0],
+ [76181.82, 3, 0],
+ [76272.73, 2, 0],
+ [76363.63, 0, 0],
+ [76545.45, 3, 0],
+ [76727.27, 2, 0],
+ [76909.09, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [77090.91, 2, 0],
+ [77454.55, 2, 0],
+ [77636.36, 0, 0],
+ [77818.18, 2, 0],
+ [78000, 3, 0],
+ [78181.82, 0, 0],
+ [78363.63, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78545.45, 0, 0],
+ [78909.09, 0, 0],
+ [79090.91, 0, 0],
+ [79181.82, 3, 0],
+ [79272.73, 2, 0],
+ [79454.55, 3, 0],
+ [79636.36, 2, 0],
+ [79818.18, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80000, 2, 0],
+ [80181.82, 3, 0],
+ [80363.63, 2, 0],
+ [80545.45, 0, 0],
+ [80727.27, 1, 0],
+ [80909.09, 3, 0],
+ [81090.91, 0, 0],
+ [81272.73, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 165,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "spooky",
+ "song": "South",
+ "stage": "halloween",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 165,
+ "speed": 2.2
+ }
+}
diff --git a/assets/preload/data/songs/south/south.json b/assets/preload/data/songs/south/south.json
new file mode 100644
index 0000000000..a4e4978b9a
--- /dev/null
+++ b/assets/preload/data/songs/south/south.json
@@ -0,0 +1,670 @@
+{
+ "song": {
+ "player1": "bf",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [11636.3633, 3, 0],
+ [12000, 3, 0],
+ [12363.6367, 0, 0],
+ [12545.4541, 3, 0],
+ [12727.2725, 2, 0],
+ [12909.0908, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [13090.9092, 0, 0],
+ [13454.5449, 1, 0],
+ [13818.1816, 3, 0],
+ [14000, 3, 0],
+ [14181.8184, 3, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [14545.4541, 3, 0],
+ [14909.0908, 3, 0],
+ [15272.7275, 3, 0],
+ [15454.5449, 2, 0],
+ [15636.3633, 0, 0],
+ [15818.1816, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [16000, 0, 0],
+ [16363.6357, 0, 0],
+ [16727.2734, 2, 0],
+ [17090.9082, 0, 0],
+ [17272.7266, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [17454.5449, 3, 0],
+ [17818.1816, 3, 0],
+ [18181.8184, 0, 0],
+ [18363.6367, 3, 0],
+ [18545.4551, 2, 0],
+ [18727.2734, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [18909.09, 0, 0],
+ [19272.7266, 1, 0],
+ [19636.3633, 3, 0],
+ [19818.1816, 3, 0],
+ [20000, 3, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [20363.6367, 3, 0],
+ [20727.2734, 3, 0],
+ [21090.9082, 3, 0],
+ [21272.7266, 2, 0],
+ [21454.5449, 0, 0],
+ [21636.3633, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [21818.1816, 0, 0],
+ [22181.8184, 0, 0],
+ [22545.4551, 2, 0],
+ [22909.09, 0, 0],
+ [23090.9082, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [23272.7266, 2, 0],
+ [23454.5449, 1, 0],
+ [23636.3633, 0, 0],
+ [23818.1816, 0, 0],
+ [23909.09, 3, 0],
+ [24000, 2, 0],
+ [24181.8184, 0, 0],
+ [24363.6367, 2, 0],
+ [24545.4551, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [24727.2734, 2, 0],
+ [25090.9082, 2, 0],
+ [25454.5449, 2, 0],
+ [25636.3633, 1, 0],
+ [25818.1816, 0, 0],
+ [26000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [26181.8184, 0, 0],
+ [26545.4551, 0, 0],
+ [26727.2734, 0, 0],
+ [26818.1816, 2, 0],
+ [26909.09, 3, 0],
+ [27090.9082, 0, 0],
+ [27272.7266, 1, 0],
+ [27454.5449, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [27636.3633, 2, 0],
+ [28000, 2, 0],
+ [28363.6367, 2, 0],
+ [28545.4551, 3, 0],
+ [28727.2715, 0, 0],
+ [28909.09, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [29090.9082, 2, 0],
+ [29272.7266, 1, 0],
+ [29454.5449, 0, 0],
+ [29636.3633, 0, 0],
+ [29727.2715, 3, 0],
+ [29818.1816, 2, 0],
+ [30000, 0, 0],
+ [30181.8184, 2, 0],
+ [30363.6367, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30545.4551, 2, 0],
+ [30909.09, 2, 0],
+ [31272.7266, 2, 0],
+ [31454.5449, 1, 0],
+ [31636.3633, 0, 0],
+ [31818.1816, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [32000, 0, 0],
+ [32363.6367, 0, 0],
+ [32545.4551, 0, 0],
+ [32636.3633, 2, 0],
+ [32727.2715, 3, 0],
+ [32909.09, 0, 0],
+ [33090.91, 1, 0],
+ [33272.7266, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33454.5469, 2, 0],
+ [33818.18, 2, 0],
+ [34181.8164, 2, 0],
+ [34363.6367, 3, 0],
+ [34545.4531, 0, 0],
+ [34727.2734, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [34909.09, 2, 0],
+ [35090.91, 3, 0],
+ [35272.7266, 0, 0],
+ [35454.5469, 2, 0],
+ [35636.3633, 3, 0],
+ [35818.18, 0, 0],
+ [36000, 2, 0],
+ [36181.8164, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [36363.6367, 0, 0],
+ [36545.4531, 2, 0],
+ [36727.2734, 3, 0],
+ [36909.09, 0, 0],
+ [37090.91, 0, 0],
+ [37272.7266, 3, 0],
+ [37454.5469, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [37818.18, 2, 0],
+ [38000, 3, 0],
+ [38181.8164, 0, 0],
+ [38363.6367, 2, 0],
+ [38545.4531, 3, 0],
+ [38727.2734, 0, 0],
+ [38909.09, 2, 0],
+ [39090.91, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [39272.7266, 0, 0],
+ [39454.5469, 1, 0],
+ [39636.3633, 3, 0],
+ [39818.18, 0, 0],
+ [40000, 3, 0],
+ [40181.8164, 0, 0],
+ [40363.6367, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [40727.2734, 2, 0],
+ [40909.09, 3, 0],
+ [41090.91, 0, 0],
+ [41272.7266, 2, 0],
+ [41454.5469, 3, 0],
+ [41636.3633, 0, 0],
+ [41818.18, 2, 0],
+ [42000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [42181.8164, 0, 0],
+ [42363.6367, 2, 0],
+ [42545.4531, 3, 0],
+ [42727.2734, 0, 0],
+ [42909.09, 0, 0],
+ [43090.91, 3, 0],
+ [43272.7266, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [43636.3633, 2, 0],
+ [43818.18, 3, 0],
+ [44000, 0, 0],
+ [44181.8164, 2, 0],
+ [44363.6367, 3, 0],
+ [44545.4531, 0, 0],
+ [44727.2734, 2, 0],
+ [44909.09, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [45090.91, 0, 0],
+ [45272.7266, 1, 0],
+ [45454.5469, 3, 0],
+ [45636.3633, 0, 0],
+ [45818.18, 3, 0],
+ [46000, 0, 0],
+ [46181.8164, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [46545.4531, 0, 0],
+ [46818.18, 3, 0],
+ [46909.09, 1, 0],
+ [47090.91, 0, 0],
+ [47272.7266, 3, 0],
+ [47454.5469, 1, 0],
+ [47636.3633, 2, 0],
+ [47818.18, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48000, 0, 0],
+ [48181.8164, 2, 0],
+ [48363.6367, 3, 0],
+ [48545.4531, 0, 0],
+ [48727.2734, 3, 0],
+ [48909.09, 2, 0],
+ [49090.91, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49454.5469, 0, 0],
+ [49545.4531, 3, 0],
+ [49636.3633, 2, 0],
+ [49818.18, 3, 0],
+ [50000, 0, 0],
+ [50181.8164, 2, 0],
+ [50363.6367, 3, 0],
+ [50545.4531, 0, 0],
+ [50636.3633, 3, 0],
+ [50727.2734, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [50909.09, 1, 0],
+ [51090.91, 1, 0],
+ [51272.7266, 0, 0],
+ [51454.5469, 3, 0],
+ [51636.3633, 2, 0],
+ [51818.18, 3, 0],
+ [52000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [52363.6367, 0, 0],
+ [52636.3633, 3, 0],
+ [52727.2734, 1, 0],
+ [52909.09, 0, 0],
+ [53090.91, 3, 0],
+ [53272.7266, 1, 0],
+ [53454.5469, 2, 0],
+ [53636.3633, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [53818.18, 0, 0],
+ [54000, 2, 0],
+ [54181.8164, 3, 0],
+ [54363.6367, 0, 0],
+ [54545.4531, 3, 0],
+ [54727.2734, 2, 0],
+ [54909.09, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [55272.7266, 0, 0],
+ [55363.6367, 3, 0],
+ [55454.5469, 2, 0],
+ [55636.3633, 3, 0],
+ [55818.18, 0, 0],
+ [56000, 2, 0],
+ [56181.8164, 3, 0],
+ [56363.6367, 0, 0],
+ [56454.543, 3, 0],
+ [56545.4531, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56727.2734, 1, 0],
+ [56909.09, 1, 0],
+ [57090.91, 0, 0],
+ [57272.7266, 3, 0],
+ [57454.543, 4, 0],
+ [57454.543, 2, 0],
+ [57636.3633, 7, 0],
+ [57636.3633, 3, 0],
+ [57818.18, 5, 0],
+ [57818.18, 0, 0],
+ [58000, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [58181.8164, 3, 0],
+ [58545.4531, 3, 0],
+ [58727.2734, 1, 0],
+ [58909.09, 2, 0],
+ [59090.91, 0, 0],
+ [59272.7266, 1, 0],
+ [59454.543, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [59636.3633, 0, 272.727264],
+ [60000, 2, 0],
+ [60363.6367, 2, 0],
+ [60545.4531, 2, 0],
+ [60727.2734, 2, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61090.91, 2, 0],
+ [61454.543, 2, 0],
+ [61636.3633, 3, 0],
+ [61818.18, 1, 0],
+ [62000, 0, 0],
+ [62181.8164, 3, 0],
+ [62363.6367, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [62545.4531, 0, 0],
+ [62909.09, 0, 0],
+ [63272.7266, 4, 0],
+ [63272.7266, 2, 0],
+ [63454.543, 7, 0],
+ [63636.3633, 5, 0],
+ [63636.3633, 0, 0],
+ [63818.18, 7, 0],
+ [63818.18, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [64000, 3, 0],
+ [64363.6367, 3, 0],
+ [64545.4531, 1, 0],
+ [64727.2734, 2, 0],
+ [64909.09, 0, 0],
+ [65090.91, 1, 0],
+ [65272.7266, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65454.543, 0, 272.727264],
+ [65818.18, 2, 0],
+ [66181.82, 2, 0],
+ [66363.63, 2, 0],
+ [66545.45, 2, 181.818176]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [66909.09, 2, 0],
+ [67272.73, 2, 0],
+ [67454.55, 3, 0],
+ [67636.36, 1, 0],
+ [67818.18, 0, 0],
+ [68000, 3, 0],
+ [68181.82, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [68363.63, 0, 0],
+ [68727.27, 0, 0],
+ [69090.91, 2, 0],
+ [69454.55, 0, 0],
+ [69636.36, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [69818.18, 2, 0],
+ [70000, 3, 0],
+ [70181.82, 0, 0],
+ [70363.63, 3, 0],
+ [70454.55, 2, 0],
+ [70545.45, 0, 0],
+ [70727.27, 3, 0],
+ [70909.09, 2, 0],
+ [71090.91, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [71272.73, 2, 0],
+ [71636.36, 2, 0],
+ [71818.18, 0, 0],
+ [72000, 2, 0],
+ [72181.82, 3, 0],
+ [72363.63, 0, 0],
+ [72545.45, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72727.27, 0, 0],
+ [73090.91, 0, 0],
+ [73272.73, 0, 0],
+ [73363.63, 3, 0],
+ [73454.55, 2, 0],
+ [73636.36, 3, 0],
+ [73818.18, 2, 0],
+ [74000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [74181.82, 2, 0],
+ [74363.63, 3, 0],
+ [74545.45, 2, 0],
+ [74727.27, 0, 0],
+ [74909.09, 1, 0],
+ [75090.91, 3, 0],
+ [75272.73, 0, 0],
+ [75454.55, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [75636.36, 2, 0],
+ [75818.18, 3, 0],
+ [76000, 0, 0],
+ [76181.82, 3, 0],
+ [76272.73, 2, 0],
+ [76363.63, 0, 0],
+ [76545.45, 3, 0],
+ [76727.27, 2, 0],
+ [76909.09, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [77090.91, 2, 0],
+ [77454.55, 2, 0],
+ [77636.36, 0, 0],
+ [77818.18, 2, 0],
+ [78000, 3, 0],
+ [78181.82, 0, 0],
+ [78363.63, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78545.45, 0, 0],
+ [78909.09, 0, 0],
+ [79090.91, 0, 0],
+ [79181.82, 3, 0],
+ [79272.73, 2, 0],
+ [79454.55, 3, 0],
+ [79636.36, 2, 0],
+ [79818.18, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80000, 2, 0],
+ [80181.82, 3, 0],
+ [80363.63, 2, 0],
+ [80545.45, 0, 0],
+ [80727.27, 1, 0],
+ [80909.09, 3, 0],
+ [81090.91, 0, 0],
+ [81272.73, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 165,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "spooky",
+ "song": "South",
+ "stage": "halloween",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 165,
+ "speed": 1.5
+ }
+}
diff --git a/assets/preload/data/songs/spookeez/_meta.json b/assets/preload/data/songs/spookeez/_meta.json
new file mode 100644
index 0000000000..4c2eee6beb
--- /dev/null
+++ b/assets/preload/data/songs/spookeez/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/songs/spookeez/spookeez-easy.json b/assets/preload/data/songs/spookeez/spookeez-easy.json
new file mode 100644
index 0000000000..032cc8dfe8
--- /dev/null
+++ b/assets/preload/data/songs/spookeez/spookeez-easy.json
@@ -0,0 +1,660 @@
+{
+ "song": {
+ "player1": "bf",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [6400, 0, 0],
+ [6799.99951, 3, 0],
+ [7199.99951, 3, 0],
+ [7599.99951, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [7999.99951, 1, 0],
+ [8400, 3, 0],
+ [8800, 2, 0],
+ [9200, 0, 0],
+ [9400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [9600, 0, 0],
+ [10000, 3, 0],
+ [10400, 3, 0],
+ [10800, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [11200, 1, 0],
+ [11600, 3, 0],
+ [12000, 2, 0],
+ [12400, 0, 0],
+ [12600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [12800, 2, 0],
+ [13199.999, 0, 0],
+ [13599.999, 2, 0],
+ [13799.999, 0, 0],
+ [13999.999, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [14399.999, 1, 0],
+ [14799.999, 3, 0],
+ [15199.999, 1, 0],
+ [15599.999, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15999.999, 2, 0],
+ [16400, 0, 0],
+ [16800, 2, 0],
+ [17000, 0, 0],
+ [17200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [17600, 1, 0],
+ [18000, 3, 0],
+ [18400, 1, 0],
+ [18800, 4, 0],
+ [18800, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [19200, 2, 0],
+ [19400, 1, 0],
+ [19600, 3, 0],
+ [20000, 3, 0],
+ [20300, 3, 0],
+ [20600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [20800, 2, 0],
+ [21000, 1, 0],
+ [21200, 3, 0],
+ [21600, 3, 0],
+ [21900, 1, 0],
+ [22200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [22400, 2, 0],
+ [22600, 1, 0],
+ [22800, 3, 0],
+ [23200, 3, 0],
+ [23500, 3, 0],
+ [23800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [24000, 2, 0],
+ [24200, 1, 0],
+ [24400, 3, 0],
+ [24800, 2, 0],
+ [25200, 4, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [25600, 2, 0],
+ [25799.998, 1, 0],
+ [25999.998, 3, 0],
+ [26399.998, 3, 0],
+ [26699.998, 3, 0],
+ [26999.998, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [27199.998, 2, 0],
+ [27399.998, 1, 0],
+ [27599.998, 3, 0],
+ [27999.998, 3, 0],
+ [28299.998, 1, 0],
+ [28599.998, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [28799.998, 2, 0],
+ [28999.998, 1, 0],
+ [29199.998, 3, 0],
+ [29599.998, 3, 0],
+ [29899.998, 3, 0],
+ [30199.998, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30399.998, 2, 0],
+ [30599.998, 1, 0],
+ [30799.998, 3, 0],
+ [31199.998, 2, 0],
+ [31599.998, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [31999.998, 0, 0],
+ [32399.998, 3, 0],
+ [32800, 3, 0],
+ [33200, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [33600, 1, 0],
+ [34000, 3, 0],
+ [34400, 2, 0],
+ [34800, 0, 0],
+ [35000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [35200, 0, 0],
+ [35600, 3, 0],
+ [36000, 3, 0],
+ [36400, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [36800, 1, 0],
+ [37200, 3, 0],
+ [37600, 2, 0],
+ [38000, 0, 0],
+ [38200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [38400, 2, 0],
+ [38800, 0, 0],
+ [39200, 2, 0],
+ [39400, 0, 0],
+ [39600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [40000, 1, 0],
+ [40400, 3, 0],
+ [40800, 1, 0],
+ [41200, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [41600, 2, 0],
+ [42000, 0, 0],
+ [42400, 2, 0],
+ [42600, 0, 0],
+ [42800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [43200, 1, 0],
+ [43600, 3, 0],
+ [44000, 1, 0],
+ [44400, 4, 0],
+ [44400, 2, 0],
+ [44600, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [44800, 2, 0],
+ [45000, 0, 0],
+ [45200, 3, 0],
+ [45600, 3, 0],
+ [45900, 3, 0],
+ [46200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [46400, 2, 0],
+ [46600, 0, 0],
+ [46800, 3, 0],
+ [47200, 1, 0],
+ [47600, 0, 0],
+ [47800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48000, 2, 0],
+ [48200, 0, 0],
+ [48400, 3, 0],
+ [48800, 3, 0],
+ [49100, 3, 0],
+ [49400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49600, 2, 0],
+ [49800, 0, 0],
+ [50000, 3, 0],
+ [50400, 3, 0],
+ [50800, 4, 0],
+ [51000, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [51200, 2, 0],
+ [51399.9961, 0, 0],
+ [51599.9961, 3, 0],
+ [51999.9961, 3, 0],
+ [52299.9961, 3, 0],
+ [52599.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [52799.9961, 2, 0],
+ [52999.9961, 0, 0],
+ [53199.9961, 3, 0],
+ [53599.9961, 1, 0],
+ [53999.9961, 0, 0],
+ [54199.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [54399.9961, 2, 0],
+ [54599.9961, 0, 0],
+ [54799.9961, 3, 0],
+ [55199.9961, 3, 0],
+ [55499.9961, 3, 0],
+ [55799.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [55999.9961, 2, 0],
+ [56199.9961, 0, 0],
+ [56399.9961, 3, 0],
+ [56799.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [57599.9961, 2, 300],
+ [57999.9961, 3, 300],
+ [58399.9961, 1, 300],
+ [58799.9961, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [59199.9961, 2, 300],
+ [59599.9961, 0, 300],
+ [59999.9961, 1, 300],
+ [60399.9961, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [60799.9961, 1, 0],
+ [61399.9961, 3, 0],
+ [61799.9961, 3, 0],
+ [61999.9961, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [62399.9961, 1, 0],
+ [62999.9961, 3, 0],
+ [63399.9961, 3, 0],
+ [63599.9961, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [63999.9961, 2, 300],
+ [64399.9961, 3, 300],
+ [64799.9961, 1, 300],
+ [65199.9961, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65600, 2, 300],
+ [66000, 0, 300],
+ [66400, 1, 300],
+ [66800, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [67200, 1, 0],
+ [67800, 3, 0],
+ [68200, 3, 0],
+ [68400, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [68800, 4, 300],
+ [68800, 1, 0],
+ [69200, 5, 300],
+ [69400, 3, 0],
+ [69600, 7, 300],
+ [69800, 3, 0],
+ [70000, 5, 300],
+ [70000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [70400, 2, 0],
+ [70600, 2, 0],
+ [71000, 2, 0],
+ [71400, 3, 0],
+ [71600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72000, 2, 0],
+ [72200, 2, 0],
+ [72600, 2, 0],
+ [73000, 3, 0],
+ [73200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [73600, 2, 0],
+ [73800, 2, 0],
+ [74200, 2, 0],
+ [74600, 3, 0],
+ [74800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [75200, 4, 300],
+ [75200, 2, 0],
+ [75400, 2, 0],
+ [75600, 5, 300],
+ [75800, 2, 0],
+ [76000, 7, 300],
+ [76200, 3, 0],
+ [76400, 5, 300],
+ [76400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [76800, 2, 0],
+ [77000, 2, 0],
+ [77400, 2, 0],
+ [77800, 3, 0],
+ [78000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78400, 2, 0],
+ [78600, 2, 0],
+ [79000, 2, 0],
+ [79400, 3, 0],
+ [79600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80000, 2, 0],
+ [80200, 2, 0],
+ [80600, 2, 0],
+ [81000, 3, 0],
+ [81200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [81600, 4, 300],
+ [81600, 2, 0],
+ [81800, 2, 0],
+ [82000, 5, 300],
+ [82200, 2, 0],
+ [82400, 7, 300],
+ [82600, 3, 0],
+ [82800, 5, 300],
+ [82800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [83200, 2, 0],
+ [83400, 2, 0],
+ [83800, 2, 0],
+ [84200, 3, 0],
+ [84400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [84800, 2, 0],
+ [85000, 2, 0],
+ [85400, 2, 0],
+ [85800, 3, 0],
+ [86000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [86400, 2, 0],
+ [86600, 2, 0],
+ [87000, 2, 0],
+ [87400, 3, 0],
+ [87600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [88000, 4, 300],
+ [88000, 2, 0],
+ [88200, 2, 0],
+ [88400, 5, 300],
+ [88600, 2, 0],
+ [88800, 7, 300],
+ [89000, 3, 0],
+ [89200, 5, 300],
+ [89200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [89600, 2, 0],
+ [89800, 2, 0],
+ [90200, 2, 0],
+ [90600, 3, 0],
+ [90800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [91200, 2, 0],
+ [91400, 2, 0],
+ [91800, 2, 0],
+ [92200, 3, 0],
+ [92400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [92800, 2, 0],
+ [93000, 2, 0],
+ [93400, 2, 0],
+ [93800, 3, 0],
+ [94000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [94400, 2, 0],
+ [94600, 2, 0],
+ [95000, 2, 0],
+ [95400, 3, 0],
+ [95600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 150,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "spooky",
+ "song": "Spookeez",
+ "stage": "halloween",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 150,
+ "speed": 1
+ }
+}
diff --git a/assets/preload/data/songs/spookeez/spookeez-hard.json b/assets/preload/data/songs/spookeez/spookeez-hard.json
new file mode 100644
index 0000000000..e7ae89b0c8
--- /dev/null
+++ b/assets/preload/data/songs/spookeez/spookeez-hard.json
@@ -0,0 +1,769 @@
+{
+ "song": {
+ "player1": "bf",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [6400, 0, 0],
+ [6599.99951, 1, 0],
+ [6799.99951, 3, 0],
+ [7199.99951, 3, 0],
+ [7599.99951, 2, 0],
+ [7799.99951, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [7999.99951, 1, 0],
+ [8200, 3, 0],
+ [8400, 3, 0],
+ [8800, 2, 0],
+ [9200, 0, 0],
+ [9400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [9600, 0, 0],
+ [9800, 1, 0],
+ [10000, 3, 0],
+ [10400, 3, 0],
+ [10800, 2, 0],
+ [11000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [11200, 1, 0],
+ [11400, 3, 0],
+ [11600, 3, 0],
+ [12000, 2, 0],
+ [12400, 0, 0],
+ [12600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [12800, 2, 0],
+ [12999.999, 3, 0],
+ [13099.999, 1, 0],
+ [13199.999, 0, 0],
+ [13399.999, 0, 0],
+ [13599.999, 2, 0],
+ [13799.999, 3, 0],
+ [13999.999, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [14399.999, 1, 0],
+ [14599.999, 0, 0],
+ [14699.999, 1, 0],
+ [14799.999, 3, 0],
+ [14999.999, 3, 0],
+ [15199.999, 0, 0],
+ [15399.999, 0, 0],
+ [15599.999, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15999.999, 2, 0],
+ [16199.999, 3, 0],
+ [16299.999, 1, 0],
+ [16400, 0, 0],
+ [16600, 0, 0],
+ [16800, 2, 0],
+ [17000, 3, 0],
+ [17200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [17600, 1, 0],
+ [17800, 0, 0],
+ [17900, 1, 0],
+ [18000, 3, 0],
+ [18200, 3, 0],
+ [18400, 0, 0],
+ [18600, 0, 0],
+ [18800, 4, 0],
+ [18800, 2, 0],
+ [19000, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [19200, 2, 0],
+ [19400, 3, 0],
+ [19500, 1, 0],
+ [19600, 3, 0],
+ [20000, 3, 0],
+ [20300, 3, 0],
+ [20600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [20800, 2, 0],
+ [21000, 0, 0],
+ [21100, 1, 0],
+ [21200, 3, 0],
+ [21600, 3, 0],
+ [21900, 1, 0],
+ [22000, 3, 0],
+ [22200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [22400, 2, 0],
+ [22600, 3, 0],
+ [22700, 1, 0],
+ [22800, 3, 0],
+ [23200, 3, 0],
+ [23500, 3, 0],
+ [23800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [24000, 2, 0],
+ [24200, 0, 0],
+ [24300, 1, 0],
+ [24400, 3, 0],
+ [24800, 1, 0],
+ [25200, 2, 0],
+ [25200, 4, 0],
+ [25400, 2, 0],
+ [25400, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [25600, 2, 0],
+ [25799.998, 3, 0],
+ [25899.998, 1, 0],
+ [25999.998, 3, 0],
+ [26399.998, 3, 0],
+ [26699.998, 3, 0],
+ [26999.998, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [27199.998, 2, 0],
+ [27399.998, 0, 0],
+ [27499.998, 1, 0],
+ [27599.998, 3, 0],
+ [27999.998, 3, 0],
+ [28299.998, 1, 0],
+ [28399.998, 3, 0],
+ [28599.998, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [28799.998, 2, 0],
+ [28999.998, 3, 0],
+ [29099.998, 1, 0],
+ [29199.998, 3, 0],
+ [29599.998, 3, 0],
+ [29899.998, 3, 0],
+ [30199.998, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30399.998, 2, 0],
+ [30599.998, 0, 0],
+ [30699.998, 1, 0],
+ [30799.998, 3, 0],
+ [31199.998, 1, 0],
+ [31599.998, 2, 0],
+ [31599.998, 7, 0],
+ [31799.998, 2, 0],
+ [31799.998, 5, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [31999.998, 0, 0],
+ [32199.998, 1, 0],
+ [32399.998, 3, 0],
+ [32800, 3, 0],
+ [33200, 2, 0],
+ [33400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [33600, 1, 0],
+ [33800, 3, 0],
+ [34000, 3, 0],
+ [34400, 2, 0],
+ [34800, 0, 0],
+ [35000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [35200, 0, 0],
+ [35400, 1, 0],
+ [35600, 3, 0],
+ [36000, 3, 0],
+ [36400, 2, 0],
+ [36600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [36800, 1, 0],
+ [37000, 3, 0],
+ [37200, 3, 0],
+ [37600, 2, 0],
+ [38000, 0, 0],
+ [38200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [38400, 2, 0],
+ [38600, 3, 0],
+ [38700, 1, 0],
+ [38800, 0, 0],
+ [39000, 0, 0],
+ [39200, 2, 0],
+ [39400, 3, 0],
+ [39600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [40000, 1, 0],
+ [40200, 0, 0],
+ [40300, 1, 0],
+ [40400, 3, 0],
+ [40600, 3, 0],
+ [40800, 0, 0],
+ [41000, 0, 0],
+ [41200, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [41600, 2, 0],
+ [41800, 3, 0],
+ [41900, 1, 0],
+ [42000, 0, 0],
+ [42200, 0, 0],
+ [42400, 2, 0],
+ [42600, 3, 0],
+ [42800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [43200, 1, 0],
+ [43400, 0, 0],
+ [43500, 1, 0],
+ [43600, 3, 0],
+ [43800, 3, 0],
+ [44000, 0, 0],
+ [44200, 0, 0],
+ [44400, 4, 0],
+ [44400, 2, 0],
+ [44600, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [44800, 2, 0],
+ [45000, 3, 0],
+ [45100, 1, 0],
+ [45200, 3, 0],
+ [45500, 3, 0],
+ [45600, 3, 0],
+ [45900, 3, 0],
+ [46200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [46400, 2, 0],
+ [46600, 0, 0],
+ [46700, 1, 0],
+ [46800, 3, 0],
+ [47100, 3, 0],
+ [47200, 1, 0],
+ [47400, 0, 0],
+ [47500, 2, 0],
+ [47600, 3, 0],
+ [47800, 3, 0],
+ [47900, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48000, 2, 0],
+ [48200, 3, 0],
+ [48300, 1, 0],
+ [48400, 3, 0],
+ [48800, 3, 0],
+ [49100, 3, 0],
+ [49400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49600, 2, 0],
+ [49800, 0, 0],
+ [49900, 1, 0],
+ [50000, 3, 0],
+ [50400, 3, 0],
+ [50800, 4, 0],
+ [51000, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [51200, 2, 0],
+ [51399.9961, 3, 0],
+ [51499.9961, 1, 0],
+ [51599.9961, 3, 0],
+ [51899.9961, 3, 0],
+ [51999.9961, 3, 0],
+ [52299.9961, 3, 0],
+ [52599.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [52799.9961, 2, 0],
+ [52999.9961, 0, 0],
+ [53099.9961, 1, 0],
+ [53199.9961, 3, 0],
+ [53499.9961, 3, 0],
+ [53599.9961, 1, 0],
+ [53799.9961, 0, 0],
+ [53899.9961, 2, 0],
+ [53999.9961, 3, 0],
+ [54199.9961, 3, 0],
+ [54299.9961, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [54399.9961, 2, 0],
+ [54599.9961, 3, 0],
+ [54699.9961, 1, 0],
+ [54799.9961, 3, 0],
+ [55199.9961, 3, 0],
+ [55499.9961, 3, 0],
+ [55799.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [55999.9961, 2, 0],
+ [56199.9961, 0, 0],
+ [56299.9961, 1, 0],
+ [56399.9961, 3, 0],
+ [56799.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [57599.9961, 2, 300],
+ [57999.9961, 3, 300],
+ [58399.9961, 1, 300],
+ [58799.9961, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [59199.9961, 2, 100],
+ [59399.9961, 3, 100],
+ [59599.9961, 0, 300],
+ [59999.9961, 1, 300],
+ [60399.9961, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [60799.9961, 1, 0],
+ [61199.9961, 1, 0],
+ [61399.9961, 3, 0],
+ [61799.9961, 3, 0],
+ [61999.9961, 0, 0],
+ [62199.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [62399.9961, 1, 0],
+ [62799.9961, 1, 0],
+ [62999.9961, 3, 0],
+ [63399.9961, 3, 0],
+ [63599.9961, 0, 0],
+ [63799.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [63999.9961, 2, 300],
+ [64399.9961, 3, 300],
+ [64799.9961, 1, 300],
+ [65199.9961, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65600, 2, 100],
+ [65800, 3, 100],
+ [66000, 0, 300],
+ [66400, 1, 300],
+ [66800, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [67200, 1, 0],
+ [67600, 1, 0],
+ [67800, 3, 0],
+ [68200, 3, 0],
+ [68400, 0, 0],
+ [68600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [68800, 4, 300],
+ [68800, 1, 0],
+ [69200, 5, 300],
+ [69200, 1, 0],
+ [69400, 3, 0],
+ [69600, 7, 300],
+ [69800, 3, 0],
+ [70000, 5, 300],
+ [70000, 0, 0],
+ [70200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [70400, 2, 0],
+ [70600, 2, 0],
+ [70800, 3, 0],
+ [71000, 2, 0],
+ [71400, 3, 0],
+ [71600, 1, 0],
+ [71800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72000, 2, 0],
+ [72200, 2, 0],
+ [72400, 3, 0],
+ [72600, 2, 0],
+ [73000, 3, 0],
+ [73200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [73600, 2, 0],
+ [73800, 2, 0],
+ [74000, 3, 0],
+ [74200, 2, 0],
+ [74600, 3, 0],
+ [74800, 1, 0],
+ [75000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [75200, 2, 0],
+ [75200, 4, 300],
+ [75400, 2, 0],
+ [75600, 3, 0],
+ [75600, 5, 300],
+ [75800, 2, 0],
+ [76000, 7, 300],
+ [76200, 3, 0],
+ [76400, 1, 0],
+ [76400, 5, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [76800, 2, 0],
+ [77000, 2, 0],
+ [77200, 3, 0],
+ [77400, 2, 0],
+ [77800, 3, 0],
+ [78000, 1, 0],
+ [78200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78400, 2, 0],
+ [78600, 2, 0],
+ [78800, 3, 0],
+ [79000, 2, 0],
+ [79400, 3, 0],
+ [79600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80000, 2, 0],
+ [80200, 2, 0],
+ [80400, 3, 0],
+ [80600, 2, 0],
+ [81000, 3, 0],
+ [81200, 1, 0],
+ [81400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [81600, 2, 0],
+ [81600, 4, 300],
+ [81800, 2, 0],
+ [82000, 3, 0],
+ [82000, 5, 300],
+ [82200, 2, 0],
+ [82400, 7, 300],
+ [82600, 3, 0],
+ [82800, 1, 0],
+ [82800, 5, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [83200, 2, 0],
+ [83400, 2, 0],
+ [83600, 3, 0],
+ [83800, 2, 0],
+ [84200, 3, 0],
+ [84400, 1, 0],
+ [84600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [84800, 2, 0],
+ [85000, 2, 0],
+ [85200, 3, 0],
+ [85400, 2, 0],
+ [85800, 3, 0],
+ [86000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [86400, 2, 0],
+ [86600, 2, 0],
+ [86800, 3, 0],
+ [87000, 2, 0],
+ [87400, 3, 0],
+ [87600, 1, 0],
+ [87800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [88000, 2, 0],
+ [88000, 4, 300],
+ [88200, 2, 0],
+ [88400, 3, 0],
+ [88400, 5, 300],
+ [88600, 2, 0],
+ [88800, 7, 300],
+ [89000, 3, 0],
+ [89200, 1, 0],
+ [89200, 5, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [89600, 2, 0],
+ [89800, 2, 0],
+ [90000, 3, 0],
+ [90200, 2, 0],
+ [90600, 3, 0],
+ [90800, 1, 0],
+ [91000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [91200, 2, 0],
+ [91400, 2, 0],
+ [91600, 3, 0],
+ [91800, 2, 0],
+ [92200, 3, 0],
+ [92400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [92800, 2, 0],
+ [93000, 2, 0],
+ [93200, 3, 0],
+ [93400, 2, 0],
+ [93800, 3, 0],
+ [94000, 1, 0],
+ [94200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [94400, 2, 0],
+ [94600, 2, 0],
+ [94800, 3, 0],
+ [95000, 2, 0],
+ [95400, 3, 0],
+ [95600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 150,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "spooky",
+ "song": "Spookeez",
+ "stage": "halloween",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 150,
+ "speed": 2.4
+ }
+}
diff --git a/assets/preload/data/songs/spookeez/spookeez.json b/assets/preload/data/songs/spookeez/spookeez.json
new file mode 100644
index 0000000000..06fecf3dcb
--- /dev/null
+++ b/assets/preload/data/songs/spookeez/spookeez.json
@@ -0,0 +1,729 @@
+{
+ "song": {
+ "player1": "bf",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [6400, 0, 0],
+ [6799.99951, 3, 0],
+ [7199.99951, 3, 0],
+ [7599.99951, 2, 0],
+ [7799.99951, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [7999.99951, 1, 0],
+ [8400, 3, 0],
+ [8800, 2, 0],
+ [9200, 0, 0],
+ [9400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [9600, 0, 0],
+ [10000, 3, 0],
+ [10400, 3, 0],
+ [10800, 2, 0],
+ [11000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [11200, 1, 0],
+ [11600, 3, 0],
+ [12000, 2, 0],
+ [12400, 0, 0],
+ [12600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [12800, 2, 0],
+ [12999.999, 1, 0],
+ [13199.999, 0, 0],
+ [13399.999, 0, 0],
+ [13599.999, 2, 0],
+ [13799.999, 3, 0],
+ [13999.999, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [14399.999, 1, 0],
+ [14599.999, 0, 0],
+ [14799.999, 3, 0],
+ [14999.999, 3, 0],
+ [15199.999, 0, 0],
+ [15399.999, 0, 0],
+ [15599.999, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15999.999, 2, 0],
+ [16199.999, 1, 0],
+ [16400, 0, 0],
+ [16600, 0, 0],
+ [16800, 2, 0],
+ [17000, 3, 0],
+ [17200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [17600, 1, 0],
+ [17800, 0, 0],
+ [18000, 3, 0],
+ [18200, 3, 0],
+ [18400, 0, 0],
+ [18600, 0, 0],
+ [18800, 4, 0],
+ [18800, 2, 0],
+ [19000, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [19200, 2, 0],
+ [19400, 0, 0],
+ [19600, 3, 0],
+ [20000, 3, 0],
+ [20300, 3, 0],
+ [20600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [20800, 2, 0],
+ [21000, 3, 0],
+ [21200, 3, 0],
+ [21600, 3, 0],
+ [21900, 1, 0],
+ [22200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [22400, 2, 0],
+ [22600, 0, 0],
+ [22800, 3, 0],
+ [23200, 3, 0],
+ [23500, 3, 0],
+ [23800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [24000, 2, 0],
+ [24200, 3, 0],
+ [24400, 3, 0],
+ [24800, 1, 0],
+ [25200, 4, 0],
+ [25200, 2, 0],
+ [25400, 7, 0],
+ [25400, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [25600, 2, 0],
+ [25799.998, 0, 0],
+ [25999.998, 3, 0],
+ [26399.998, 3, 0],
+ [26699.998, 3, 0],
+ [26999.998, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [27199.998, 2, 0],
+ [27399.998, 3, 0],
+ [27599.998, 3, 0],
+ [27999.998, 3, 0],
+ [28299.998, 1, 0],
+ [28599.998, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [28799.998, 2, 0],
+ [28999.998, 0, 0],
+ [29199.998, 3, 0],
+ [29599.998, 3, 0],
+ [29899.998, 3, 0],
+ [30199.998, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30399.998, 2, 0],
+ [30599.998, 3, 0],
+ [30799.998, 3, 0],
+ [31199.998, 1, 0],
+ [31599.998, 7, 0],
+ [31599.998, 2, 0],
+ [31799.998, 5, 0],
+ [31799.998, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [31999.998, 0, 0],
+ [32399.998, 3, 0],
+ [32800, 3, 0],
+ [33200, 2, 0],
+ [33400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [33600, 1, 0],
+ [34000, 3, 0],
+ [34400, 2, 0],
+ [34800, 0, 0],
+ [35000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [35200, 0, 0],
+ [35600, 3, 0],
+ [36000, 3, 0],
+ [36400, 2, 0],
+ [36600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [36800, 1, 0],
+ [37200, 3, 0],
+ [37600, 2, 0],
+ [38000, 0, 0],
+ [38200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [38400, 2, 0],
+ [38600, 1, 0],
+ [38800, 0, 0],
+ [39000, 0, 0],
+ [39200, 2, 0],
+ [39400, 3, 0],
+ [39600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [40000, 1, 0],
+ [40200, 0, 0],
+ [40400, 3, 0],
+ [40600, 3, 0],
+ [40800, 0, 0],
+ [41000, 0, 0],
+ [41200, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [41600, 2, 0],
+ [41800, 1, 0],
+ [42000, 0, 0],
+ [42200, 0, 0],
+ [42400, 2, 0],
+ [42600, 3, 0],
+ [42800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [43200, 1, 0],
+ [43400, 0, 0],
+ [43600, 3, 0],
+ [43800, 3, 0],
+ [44000, 0, 0],
+ [44200, 0, 0],
+ [44400, 4, 0],
+ [44400, 2, 0],
+ [44600, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [44800, 2, 0],
+ [45000, 0, 0],
+ [45200, 3, 0],
+ [45500, 3, 0],
+ [45600, 3, 0],
+ [45900, 3, 0],
+ [46200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [46400, 2, 0],
+ [46600, 3, 0],
+ [46800, 3, 0],
+ [47100, 3, 0],
+ [47200, 1, 0],
+ [47600, 3, 0],
+ [47800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [48000, 2, 0],
+ [48200, 0, 0],
+ [48400, 3, 0],
+ [48800, 3, 0],
+ [49100, 3, 0],
+ [49400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49600, 2, 0],
+ [49800, 3, 0],
+ [50000, 3, 0],
+ [50400, 3, 0],
+ [50800, 4, 0],
+ [51000, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [51200, 2, 0],
+ [51399.9961, 0, 0],
+ [51599.9961, 3, 0],
+ [51899.9961, 3, 0],
+ [51999.9961, 3, 0],
+ [52299.9961, 3, 0],
+ [52599.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [52799.9961, 2, 0],
+ [52999.9961, 3, 0],
+ [53199.9961, 3, 0],
+ [53499.9961, 3, 0],
+ [53599.9961, 1, 0],
+ [53999.9961, 3, 0],
+ [54199.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [54399.9961, 2, 0],
+ [54599.9961, 0, 0],
+ [54799.9961, 3, 0],
+ [55199.9961, 3, 0],
+ [55499.9961, 3, 0],
+ [55799.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [55999.9961, 2, 0],
+ [56199.9961, 3, 0],
+ [56399.9961, 3, 0],
+ [56799.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [57599.9961, 2, 300],
+ [57999.9961, 3, 300],
+ [58399.9961, 1, 300],
+ [58799.9961, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [59199.9961, 2, 100],
+ [59399.9961, 3, 100],
+ [59599.9961, 0, 300],
+ [59999.9961, 1, 300],
+ [60399.9961, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [60799.9961, 1, 0],
+ [61199.9961, 1, 0],
+ [61399.9961, 3, 0],
+ [61799.9961, 3, 0],
+ [61999.9961, 0, 0],
+ [62199.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [62399.9961, 1, 0],
+ [62799.9961, 1, 0],
+ [62999.9961, 3, 0],
+ [63399.9961, 3, 0],
+ [63599.9961, 0, 0],
+ [63799.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [63999.9961, 2, 300],
+ [64399.9961, 3, 300],
+ [64799.9961, 1, 300],
+ [65199.9961, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [65600, 2, 100],
+ [65800, 3, 100],
+ [66000, 0, 300],
+ [66400, 1, 300],
+ [66800, 2, 300]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [67200, 1, 0],
+ [67600, 1, 0],
+ [67800, 3, 0],
+ [68200, 3, 0],
+ [68400, 0, 0],
+ [68600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [68800, 4, 300],
+ [68800, 1, 0],
+ [69200, 5, 300],
+ [69200, 1, 0],
+ [69400, 3, 0],
+ [69600, 7, 300],
+ [69800, 3, 0],
+ [70000, 5, 300],
+ [70000, 0, 0],
+ [70200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [70400, 2, 0],
+ [70600, 2, 0],
+ [70800, 3, 0],
+ [71000, 2, 0],
+ [71400, 3, 0],
+ [71600, 1, 0],
+ [71800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72000, 2, 0],
+ [72200, 2, 0],
+ [72400, 3, 0],
+ [72600, 2, 0],
+ [73000, 3, 0],
+ [73200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [73600, 2, 0],
+ [73800, 2, 0],
+ [74000, 3, 0],
+ [74200, 2, 0],
+ [74600, 3, 0],
+ [74800, 1, 0],
+ [75000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [75200, 4, 300],
+ [75200, 2, 0],
+ [75400, 2, 0],
+ [75600, 5, 300],
+ [75600, 3, 0],
+ [75800, 2, 0],
+ [76000, 7, 300],
+ [76200, 3, 0],
+ [76400, 5, 300],
+ [76400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [76800, 2, 0],
+ [77000, 2, 0],
+ [77200, 3, 0],
+ [77400, 2, 0],
+ [77800, 3, 0],
+ [78000, 1, 0],
+ [78200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78400, 2, 0],
+ [78600, 2, 0],
+ [78800, 3, 0],
+ [79000, 2, 0],
+ [79400, 3, 0],
+ [79600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80000, 2, 0],
+ [80200, 2, 0],
+ [80400, 3, 0],
+ [80600, 2, 0],
+ [81000, 3, 0],
+ [81200, 1, 0],
+ [81400, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [81600, 4, 300],
+ [81600, 2, 0],
+ [81800, 2, 0],
+ [82000, 5, 300],
+ [82000, 3, 0],
+ [82200, 2, 0],
+ [82400, 7, 300],
+ [82600, 3, 0],
+ [82800, 5, 300],
+ [82800, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [83200, 2, 0],
+ [83400, 2, 0],
+ [83600, 3, 0],
+ [83800, 2, 0],
+ [84200, 3, 0],
+ [84400, 1, 0],
+ [84600, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [84800, 2, 0],
+ [85000, 2, 0],
+ [85200, 3, 0],
+ [85400, 2, 0],
+ [85800, 3, 0],
+ [86000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [86400, 2, 0],
+ [86600, 2, 0],
+ [86800, 3, 0],
+ [87000, 2, 0],
+ [87400, 3, 0],
+ [87600, 1, 0],
+ [87800, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [88000, 4, 300],
+ [88000, 2, 0],
+ [88200, 2, 0],
+ [88400, 5, 300],
+ [88400, 3, 0],
+ [88600, 2, 0],
+ [88800, 7, 300],
+ [89000, 3, 0],
+ [89200, 5, 300],
+ [89200, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [89600, 2, 0],
+ [89800, 2, 0],
+ [90000, 3, 0],
+ [90200, 2, 0],
+ [90600, 3, 0],
+ [90800, 1, 0],
+ [91000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [91200, 2, 0],
+ [91400, 2, 0],
+ [91600, 3, 0],
+ [91800, 2, 0],
+ [92200, 3, 0],
+ [92400, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [92800, 2, 0],
+ [93000, 2, 0],
+ [93200, 3, 0],
+ [93400, 2, 0],
+ [93800, 3, 0],
+ [94000, 1, 0],
+ [94200, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [94400, 2, 0],
+ [94600, 2, 0],
+ [94800, 3, 0],
+ [95000, 2, 0],
+ [95400, 3, 0],
+ [95600, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 150,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "spooky",
+ "song": "Spookeez",
+ "stage": "halloween",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 150,
+ "speed": 1.7
+ }
+}
diff --git a/assets/preload/data/songs/test/_meta.json b/assets/preload/data/songs/test/_meta.json
new file mode 100644
index 0000000000..4c2eee6beb
--- /dev/null
+++ b/assets/preload/data/songs/test/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/songs/test/test.json b/assets/preload/data/songs/test/test.json
new file mode 100644
index 0000000000..78e450dc57
--- /dev/null
+++ b/assets/preload/data/songs/test/test.json
@@ -0,0 +1,551 @@
+{
+ "song": {
+ "song": "Test",
+ "notes": [
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [668.578947368421, 3, 947.3684210526317],
+ [1615.9473684210527, 1, 631.578947368421],
+ [2247.5263157894738, 0, 315.7894736842104]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [2563.315789473684, 3, 631.5789473684213],
+ [3194.8947368421054, 2, 631.5789473684208],
+ [3826.4736842105262, 1, 631.5789473684213],
+ [4773.8421052631575, 1, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [5089.631578947368, 2, 0],
+ [5563.315789473684, 1, 0],
+ [5879.105263157895, 3, 0],
+ [6037.0, 1, 0],
+ [6194.894736842105, 0, 0],
+ [6352.789473684211, 2, 315.78947368420995],
+ [6668.578947368421, 1, 315.78947368421086],
+ [6984.368421052632, 0, 0],
+ [7142.263157894737, 1, 0],
+ [7300.1578947368425, 2, 0],
+ [7458.0526315789475, 0, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [7615.9473684210525, 1, 1578.9473684210525],
+ [7615.9473684210525, 3, 947.3684210526326],
+ [8721.21052631579, 3, 0],
+ [8879.105263157895, 0, 0],
+ [9194.894736842105, 2, 0],
+ [9352.78947368421, 1, 0],
+ [9352.78947368421, 3, 0],
+ [9510.684210526315, 0, 0],
+ [9510.684210526315, 2, 0],
+ [9668.578947368422, 0, 0],
+ [9668.578947368422, 2, 0],
+ [9826.473684210527, 1, 0],
+ [9826.473684210527, 3, 0],
+ [9984.368421052632, 0, 0],
+ [9984.368421052632, 2, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [10142.263157894737, 3, 0],
+ [10458.052631578947, 3, 0],
+ [10773.842105263158, 3, 0],
+ [11089.631578947368, 1, 0],
+ [11247.526315789473, 2, 0],
+ [11405.421052631578, 0, 0],
+ [11721.21052631579, 0, 0],
+ [12037.0, 0, 0],
+ [12194.894736842105, 2, 0],
+ [12352.78947368421, 1, 0],
+ [12510.684210526315, 2, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [12668.578947368422, 3, 0],
+ [12984.368421052632, 1, 0],
+ [13300.157894736842, 2, 315.78947368421177],
+ [13615.947368421053, 0, 0],
+ [13773.842105263158, 1, 0],
+ [13931.736842105263, 3, 1263.1578947368416],
+ [14563.315789473685, 0, 0],
+ [14721.21052631579, 1, 0],
+ [14879.105263157895, 2, 0],
+ [15037.0, 1, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [15194.894736842105, 0, 0],
+ [15352.78947368421, 2, 0],
+ [15510.684210526315, 0, 631.5789473684217],
+ [16142.263157894737, 2, 0],
+ [16300.157894736842, 1, 0],
+ [16458.052631578947, 0, 0],
+ [16773.842105263157, 0, 0],
+ [17089.63157894737, 0, 0],
+ [17405.42105263158, 1, 315.78947368420995]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [17721.21052631579, 0, 1263.1578947368398],
+ [17721.21052631579, 3, 1263.1578947368398],
+ [18984.36842105263, 1, 0],
+ [18984.36842105263, 2, 0],
+ [19300.157894736843, 1, 0],
+ [19300.157894736843, 2, 0],
+ [19615.947368421053, 1, 0],
+ [19615.947368421053, 2, 0],
+ [19826.473684210527, 1, 0],
+ [19826.473684210527, 2, 0],
+ [20037.0, 1, 0],
+ [20037.0, 2, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [20247.526315789473, 3, 631.5789473684199],
+ [20879.105263157893, 1, 0],
+ [21194.894736842107, 1, 0],
+ [21510.684210526317, 1, 0],
+ [21826.473684210527, 1, 0],
+ [22142.263157894737, 1, 0],
+ [22300.157894736843, 2, 0],
+ [22458.052631578947, 0, 0],
+ [22615.947368421053, 2, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [22773.842105263157, 3, 0],
+ [22931.736842105263, 1, 0],
+ [23089.63157894737, 2, 0],
+ [23405.42105263158, 1, 0],
+ [23721.21052631579, 1, 0],
+ [24037.0, 1, 0],
+ [24352.78947368421, 2, 0],
+ [24510.684210526317, 3, 0],
+ [24668.57894736842, 1, 0],
+ [24826.473684210527, 2, 0],
+ [24984.36842105263, 1, 0],
+ [25142.263157894737, 0, 473.68421052631675]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [25773.842105263157, 2, 0],
+ [25931.736842105263, 3, 0],
+ [26089.63157894737, 1, 0],
+ [26247.526315789473, 2, 0],
+ [26563.315789473683, 1, 0],
+ [26879.105263157893, 0, 0],
+ [27194.894736842107, 0, 0],
+ [27352.78947368421, 1, 0],
+ [27510.684210526317, 2, 0],
+ [27668.57894736842, 3, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [27826.473684210527, 2, 0],
+ [28142.263157894737, 2, 0],
+ [28458.052631578947, 3, 1894.7368421052633],
+ [28615.947368421053, 2, 0],
+ [28773.842105263157, 1, 0],
+ [28931.736842105263, 0, 0],
+ [29089.63157894737, 2, 0],
+ [29247.526315789473, 1, 0],
+ [29405.42105263158, 0, 0],
+ [29563.315789473683, 1, 0],
+ [29879.105263157893, 2, 0],
+ [30037.0, 1, 0],
+ [30194.894736842107, 0, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [30352.78947368421, 2, 0],
+ [30431.736842105263, 1, 0],
+ [30510.684210526317, 0, 0],
+ [30668.57894736842, 0, 0],
+ [30826.473684210527, 0, 0],
+ [30905.42105263158, 1, 0],
+ [30984.36842105263, 2, 0],
+ [31142.263157894737, 3, 0],
+ [31300.157894736843, 1, 0],
+ [31458.052631578947, 2, 0],
+ [31615.947368421053, 0, 0],
+ [31773.842105263157, 2, 0],
+ [31931.736842105263, 1, 0],
+ [32089.63157894737, 2, 0],
+ [32405.42105263158, 2, 0],
+ [32721.21052631579, 2, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [32879.10526315789, 2, 0],
+ [32958.05263157895, 3, 0],
+ [33037.0, 1, 0],
+ [33194.89473684211, 0, 0],
+ [33352.78947368421, 2, 0],
+ [33510.68421052631, 1, 0],
+ [33668.57894736842, 2, 0],
+ [33826.47368421053, 3, 0],
+ [33984.36842105263, 1, 0],
+ [34063.31578947369, 2, 0],
+ [34142.26315789474, 0, 0],
+ [34300.15789473684, 0, 0],
+ [34458.05263157895, 1, 0],
+ [34615.94736842105, 2, 0],
+ [34694.89473684211, 1, 0],
+ [34773.84210526316, 2, 0],
+ [34931.73684210526, 3, 0],
+ [35089.63157894737, 1, 0],
+ [35247.52631578947, 2, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [35405.42105263158, 0, 0],
+ [35563.31578947369, 1, 0],
+ [35721.21052631579, 2, 0],
+ [35879.10526315789, 3, 0],
+ [36194.89473684211, 2, 0],
+ [36352.78947368421, 1, 0],
+ [36510.68421052631, 0, 0],
+ [36826.47368421053, 2, 0],
+ [36984.36842105263, 1, 0],
+ [37142.26315789474, 0, 236.84210526315292],
+ [37458.05263157895, 0, 236.8421052631602],
+ [37773.84210526316, 0, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [37931.73684210526, 2, 0],
+ [38089.63157894737, 1, 0],
+ [38247.52631578947, 0, 0],
+ [38405.42105263158, 1, 0],
+ [38563.31578947369, 3, 0],
+ [38721.21052631579, 3, 0],
+ [38879.10526315789, 2, 552.6315789473665],
+ [39510.68421052631, 1, 315.7894736842136],
+ [39826.47368421053, 3, 1263.1578947368398]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [41721.21052631579, 1, 631.5789473684272],
+ [42431.73684210526, 0, 0],
+ [42510.68421052631, 1, 0],
+ [42589.63157894737, 2, 0],
+ [42668.57894736842, 3, 0],
+ [42747.52631578947, 2, 0],
+ [42826.47368421053, 1, 0],
+ [42905.42105263158, 0, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [42984.36842105263, 3, 631.5789473684199],
+ [43615.94736842105, 1, 552.6315789473665],
+ [44247.52631578947, 1, 631.5789473684199],
+ [44958.05263157895, 0, 0],
+ [45037.0, 1, 0],
+ [45115.94736842105, 2, 0],
+ [45194.89473684211, 3, 0],
+ [45273.84210526316, 1, 0],
+ [45352.78947368421, 2, 0],
+ [45431.73684210526, 1, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [45510.68421052631, 3, 631.5789473684272],
+ [46142.26315789474, 1, 0],
+ [46142.26315789474, 2, 631.5789473684199],
+ [46300.15789473684, 0, 0],
+ [46458.05263157895, 1, 0],
+ [46615.94736842105, 0, 0],
+ [46773.84210526316, 1, 0],
+ [46773.84210526316, 3, 631.5789473684199],
+ [46931.73684210526, 0, 0],
+ [47089.63157894737, 1, 0],
+ [47247.52631578947, 0, 0],
+ [47405.42105263158, 1, 0],
+ [47405.42105263158, 2, 631.5789473684199],
+ [47484.36842105263, 0, 0],
+ [47563.31578947369, 1, 0],
+ [47642.26315789474, 0, 0],
+ [47721.21052631579, 1, 0],
+ [47800.15789473684, 0, 0],
+ [47879.10526315789, 1, 0],
+ [47958.05263157895, 0, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [48037.0, 1, 0],
+ [48194.89473684211, 2, 0],
+ [48352.78947368421, 1, 315.7894736842063],
+ [48668.57894736842, 2, 236.8421052631602],
+ [48984.36842105263, 1, 0],
+ [49063.31578947369, 2, 0],
+ [49142.26315789474, 3, 0],
+ [49221.21052631579, 2, 0],
+ [49300.15789473684, 0, 631.5789473684199],
+ [49458.05263157895, 1, 0],
+ [49615.94736842105, 2, 0],
+ [49773.84210526316, 1, 0],
+ [49931.73684210526, 2, 0],
+ [50010.68421052631, 0, 0],
+ [50089.63157894737, 1, 0],
+ [50168.57894736842, 2, 0],
+ [50247.52631578947, 1, 0],
+ [50326.47368421053, 2, 0],
+ [50405.42105263158, 3, 0],
+ [50484.36842105263, 2, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [50563.31578947369, 1, 631.5789473684199],
+ [50563.31578947369, 3, 631.5789473684199],
+ [51194.89473684211, 0, 631.5789473684199],
+ [51194.89473684211, 2, 631.5789473684199],
+ [51826.47368421053, 3, 0],
+ [51984.36842105263, 2, 0],
+ [52142.26315789474, 1, 0],
+ [52300.15789473684, 3, 0],
+ [52458.05263157895, 2, 0],
+ [52615.94736842105, 1, 0],
+ [52773.84210526316, 3, 0],
+ [52931.73684210526, 2, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [53089.63157894737, 1, 0],
+ [53247.52631578947, 3, 0],
+ [53405.42105263158, 2, 0],
+ [53563.31578947369, 1, 0],
+ [53721.21052631579, 3, 0],
+ [53879.10526315789, 2, 0],
+ [54037.0, 1, 0],
+ [54194.89473684211, 0, 0],
+ [54352.78947368421, 1, 0],
+ [54510.68421052631, 2, 0],
+ [54668.57894736842, 3, 0],
+ [54826.47368421053, 2, 0],
+ [54984.36842105263, 1, 0],
+ [55142.26315789474, 3, 0],
+ [55300.15789473684, 2, 0],
+ [55458.05263157895, 1, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [55615.94736842105, 3, 0],
+ [55773.84210526316, 2, 0],
+ [55931.73684210526, 1, 0],
+ [56089.63157894737, 3, 0],
+ [56247.52631578947, 2, 0],
+ [56405.42105263158, 1, 0],
+ [56563.31578947369, 3, 0],
+ [56721.21052631579, 2, 0],
+ [56879.10526315789, 1, 0],
+ [57037.0, 0, 0],
+ [57194.89473684211, 1, 0],
+ [57352.78947368421, 0, 0],
+ [57510.68421052631, 1, 0],
+ [57668.57894736842, 2, 0],
+ [57826.47368421053, 0, 0],
+ [57984.36842105263, 1, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [58142.26315789474, 2, 0],
+ [58300.15789473684, 3, 0],
+ [58458.05263157895, 2, 0],
+ [58615.94736842105, 1, 0],
+ [58773.84210526316, 0, 0],
+ [58931.73684210526, 1, 0],
+ [59089.63157894737, 2, 0],
+ [59247.52631578947, 3, 0],
+ [59405.42105263158, 2, 0],
+ [59563.31578947369, 3, 0],
+ [59721.21052631579, 0, 0],
+ [59879.10526315789, 1, 0],
+ [60037.0, 2, 0],
+ [60194.89473684211, 0, 0],
+ [60352.78947368421, 1, 0],
+ [60510.68421052631, 2, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": [
+ [60668.57894736842, 3, 0],
+ [60826.47368421053, 2, 0],
+ [60984.36842105263, 0, 0],
+ [61142.26315789474, 1, 0],
+ [61300.15789473684, 2, 0],
+ [61458.05263157895, 0, 0],
+ [61615.94736842105, 1, 0],
+ [61773.84210526316, 2, 0],
+ [61931.73684210526, 3, 0],
+ [62089.63157894737, 2, 0],
+ [62247.52631578947, 1, 2210.5263157894733]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 95.0,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "sectionNotes": []
+ }
+ ],
+ "bpm": 95.0,
+ "sections": 0,
+ "needsVoices": false,
+ "player1": "bf",
+ "player2": "gf",
+ "sectionLengths": [],
+ "speed": 3
+ }
+}
diff --git a/assets/preload/data/songs/thorns/_meta.json b/assets/preload/data/songs/thorns/_meta.json
new file mode 100644
index 0000000000..4c2eee6beb
--- /dev/null
+++ b/assets/preload/data/songs/thorns/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/thorns/dialogue.txt b/assets/preload/data/songs/thorns/dialogue.txt
similarity index 100%
rename from assets/preload/data/thorns/dialogue.txt
rename to assets/preload/data/songs/thorns/dialogue.txt
diff --git a/assets/preload/data/songs/thorns/thorns-easy.json b/assets/preload/data/songs/thorns/thorns-easy.json
new file mode 100644
index 0000000000..fbef5923c3
--- /dev/null
+++ b/assets/preload/data/songs/thorns/thorns-easy.json
@@ -0,0 +1,790 @@
+{
+ "song": {
+ "player1": "bf-pixel",
+ "gfVersion": "gf-pixel",
+ "notes": [
+ {
+ "sectionNotes": [
+ [0, 3, 157.89473],
+ [631.5789, 1, 157.89473],
+ [947.3684, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [1263.15784, 3, 0],
+ [1736.842, 3, 0],
+ [2210.52612, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [2526.31567, 3, 0],
+ [2842.10522, 3, 0],
+ [3157.89453, 1, 0],
+ [3473.684, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [3789.47363, 3, 0],
+ [4263.15771, 3, 0],
+ [4736.842, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [5052.63135, 3, 157.89473],
+ [5684.21045, 1, 157.89473],
+ [5999.99951, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [6315.789, 3, 0],
+ [6789.473, 3, 0],
+ [7263.15771, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [7578.94727, 3, 0],
+ [7894.73633, 3, 0],
+ [8210.526, 1, 0],
+ [8526.315, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [8842.10449, 3, 0],
+ [9315.789, 3, 0],
+ [9789.474, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [10105.2627, 2, 157.89473],
+ [10736.8418, 2, 0],
+ [10894.7363, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [11368.4209, 2, 157.89473],
+ [11842.1045, 2, 157.89473],
+ [12315.7891, 2, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [12631.5781, 2, 157.89473],
+ [13263.1572, 2, 0],
+ [13421.0518, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [13894.7363, 2, 157.89473],
+ [14368.42, 2, 157.89473],
+ [14842.1045, 0, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15157.8945, 2, 157.89473],
+ [15789.4727, 2, 0],
+ [15947.3682, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [16421.0527, 2, 157.89473],
+ [16894.7363, 2, 157.89473],
+ [17368.42, 2, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [17684.209, 2, 157.89473],
+ [18315.79, 2, 0],
+ [18473.6836, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [18947.3672, 2, 157.89473],
+ [19421.05, 2, 157.89473],
+ [19894.7363, 0, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [20210.5254, 1, 0],
+ [20526.3145, 3, 0],
+ [21000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [21473.6836, 2, 0],
+ [21947.3672, 2, 0],
+ [22421.05, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [22736.8418, 1, 0],
+ [23052.63, 3, 0],
+ [23526.3145, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [23999.998, 2, 0],
+ [24473.6836, 2, 0],
+ [24789.4727, 4, 0],
+ [24947.3672, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [25263.1563, 1, 0],
+ [25578.9453, 3, 0],
+ [26052.63, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [26526.3145, 2, 0],
+ [26999.998, 2, 0],
+ [27473.6836, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [27789.4727, 1, 0],
+ [28105.2617, 3, 0],
+ [28578.9453, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [29052.63, 2, 0],
+ [29526.3145, 2, 0],
+ [29999.998, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30315.79, 2, 0],
+ [30631.5781, 3, 0],
+ [30947.3672, 3, 0],
+ [31263.1563, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [31578.9453, 0, 0],
+ [31894.7363, 0, 0],
+ [32210.5254, 3, 0],
+ [32526.3145, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [32842.1055, 0, 0],
+ [33157.8945, 0, 0],
+ [33473.6836, 0, 0],
+ [33789.4727, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [34105.26, 1, 0],
+ [34421.05, 1, 0],
+ [34736.84, 1, 0],
+ [35052.63, 1, 236.8421]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [35368.418, 2, 0],
+ [35684.207, 3, 0],
+ [36000, 3, 0],
+ [36315.79, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [36631.58, 0, 0],
+ [36947.3672, 0, 0],
+ [37263.1563, 3, 0],
+ [37578.9453, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [37894.7344, 0, 0],
+ [38210.5234, 0, 0],
+ [38526.3125, 0, 0],
+ [38842.1, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [39157.8945, 1, 0],
+ [39473.6836, 1, 0],
+ [39789.4727, 1, 0],
+ [40105.26, 1, 236.8421]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [40421.05, 0, 0],
+ [40736.84, 0, 0],
+ [41052.63, 3, 0],
+ [41368.418, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [41684.207, 2, 0],
+ [42315.79, 2, 0],
+ [42631.58, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [42947.3672, 0, 0],
+ [43263.1563, 0, 0],
+ [43578.9453, 3, 0],
+ [43894.7344, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [44210.5234, 2, 0],
+ [44842.1, 2, 0],
+ [45157.8945, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [45473.6836, 0, 0],
+ [45789.4727, 0, 0],
+ [46105.26, 3, 0],
+ [46421.05, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [46736.84, 2, 0],
+ [47368.418, 2, 0],
+ [47684.207, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [47999.9961, 0, 0],
+ [48315.79, 0, 0],
+ [48631.58, 3, 0],
+ [48947.3672, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [49263.1563, 2, 0],
+ [49894.7344, 2, 0],
+ [50210.5234, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [50526.3125, 3, 157.89473],
+ [51157.89, 1, 157.89473],
+ [51473.6836, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [51789.4727, 3, 0],
+ [52263.1563, 3, 0],
+ [52736.84, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [53052.63, 3, 0],
+ [53368.418, 3, 0],
+ [53684.207, 1, 0],
+ [53999.9961, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [54315.7852, 3, 0],
+ [54789.4727, 3, 0],
+ [55263.1563, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [55578.9453, 3, 157.89473],
+ [56210.5234, 1, 157.89473],
+ [56526.3125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56842.1, 3, 0],
+ [57315.7852, 3, 0],
+ [57789.4727, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [58105.26, 3, 0],
+ [58421.05, 3, 0],
+ [58736.84, 1, 0],
+ [59052.63, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [59368.418, 3, 0],
+ [59842.1, 3, 0],
+ [60315.7852, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [60631.58, 2, 0],
+ [60947.3672, 3, 0],
+ [61263.1563, 3, 0],
+ [61578.9453, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61894.7344, 0, 0],
+ [62210.5234, 0, 0],
+ [62526.3125, 3, 0],
+ [62842.1, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [63157.89, 0, 0],
+ [63473.68, 0, 0],
+ [63789.4727, 0, 0],
+ [64105.26, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [64421.05, 1, 0],
+ [64736.84, 1, 0],
+ [65052.63, 1, 0],
+ [65368.418, 1, 236.8421]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [65684.21, 2, 0],
+ [66000, 3, 0],
+ [66315.79, 3, 0],
+ [66631.58, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [66947.37, 0, 0],
+ [67263.16, 0, 0],
+ [67578.9453, 3, 0],
+ [67894.7344, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [68210.52, 0, 0],
+ [68526.31, 0, 0],
+ [68684.21, 3, 0],
+ [68842.1, 0, 0],
+ [69157.89, 3, 0],
+ [69315.79, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [69473.68, 1, 0],
+ [69789.47, 1, 0],
+ [70105.26, 1, 0],
+ [70421.05, 1, 236.8421]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [70736.8359, 0, 0],
+ [71052.625, 0, 0],
+ [71368.4141, 3, 0],
+ [71684.21, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72000, 2, 0],
+ [72631.58, 2, 0],
+ [72947.37, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [73263.16, 0, 0],
+ [73578.9453, 0, 0],
+ [73894.7344, 3, 0],
+ [74210.52, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [74526.31, 2, 0],
+ [75157.89, 2, 0],
+ [75473.68, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [75789.47, 0, 0],
+ [76105.26, 0, 0],
+ [76421.05, 3, 0],
+ [76736.8359, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [77052.625, 2, 0],
+ [77684.2, 2, 0],
+ [78000, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78315.79, 0, 0],
+ [78631.58, 0, 0],
+ [78947.37, 3, 0],
+ [79263.16, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [79578.9453, 2, 0],
+ [80210.52, 2, 0],
+ [80526.31, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80842.1, 2, 0],
+ [81473.68, 0, 0],
+ [81631.58, 3, 0],
+ [81789.47, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [82105.26, 2, 0],
+ [82736.8359, 0, 0],
+ [82894.7344, 3, 0],
+ [83052.625, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [83368.4141, 2, 0],
+ [84000, 0, 0],
+ [84157.89, 3, 0],
+ [84315.79, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [84631.58, 2, 0],
+ [85263.16, 0, 0],
+ [85421.05, 3, 0],
+ [85578.9453, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [85894.7344, 2, 0],
+ [86526.31, 0, 0],
+ [86684.2, 3, 0],
+ [86842.1, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [87157.89, 2, 0],
+ [87789.47, 0, 0],
+ [87947.37, 3, 0],
+ [88105.26, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [88421.05, 2, 0],
+ [89052.625, 0, 0],
+ [89210.52, 3, 0],
+ [89368.4141, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [89684.2, 2, 0],
+ [90315.79, 0, 0],
+ [90473.68, 3, 0],
+ [90631.58, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [90947.37, 3, 157.89473],
+ [91578.9453, 1, 157.89473],
+ [91894.7344, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [92210.52, 3, 0],
+ [92684.2, 3, 0],
+ [93157.89, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [93473.68, 3, 0],
+ [93789.47, 3, 0],
+ [94105.26, 1, 0],
+ [94421.05, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [94736.8359, 3, 0],
+ [95210.52, 3, 0],
+ [95684.2, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [95999.99, 3, 157.89473],
+ [96631.58, 1, 157.89473],
+ [96947.37, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [97263.16, 3, 0],
+ [97736.8359, 3, 0],
+ [98210.52, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [98526.31, 3, 0],
+ [98842.1, 3, 0],
+ [99157.89, 1, 0],
+ [99473.68, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [99789.47, 3, 0],
+ [100263.156, 3, 0],
+ [100736.836, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 190,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "spirit",
+ "song": "Thorns",
+ "stage": "schoolEvil",
+ "needsVoices": true,
+ "validScore": true,
+ "noteStyle": "pixel",
+ "bpm": 190,
+ "speed": 1.1
+ }
+}
diff --git a/assets/preload/data/songs/thorns/thorns-hard.json b/assets/preload/data/songs/thorns/thorns-hard.json
new file mode 100644
index 0000000000..b5e1c82bb3
--- /dev/null
+++ b/assets/preload/data/songs/thorns/thorns-hard.json
@@ -0,0 +1,1066 @@
+{
+ "song": {
+ "player1": "bf-pixel",
+ "gfVersion": "gf-pixel",
+ "notes": [
+ {
+ "sectionNotes": [
+ [0, 3, 157.89473],
+ [315.789459, 3, 0],
+ [473.6842, 3, 0],
+ [631.5789, 1, 157.89473],
+ [947.3684, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [1263.15784, 3, 0],
+ [1578.94727, 1, 0],
+ [1736.842, 3, 0],
+ [2052.63159, 1, 0],
+ [2210.52612, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [2526.31567, 3, 0],
+ [2684.21045, 3, 0],
+ [2842.10522, 3, 0],
+ [2999.99976, 3, 0],
+ [3157.89453, 1, 0],
+ [3315.78931, 1, 0],
+ [3473.684, 0, 0],
+ [3631.57886, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [3789.47363, 3, 0],
+ [4105.263, 1, 0],
+ [4263.15771, 3, 0],
+ [4578.94727, 1, 0],
+ [4736.842, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [5052.63135, 3, 157.89473],
+ [5368.421, 3, 0],
+ [5526.31543, 3, 0],
+ [5684.21045, 1, 157.89473],
+ [5999.99951, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [6315.789, 3, 0],
+ [6631.57861, 1, 0],
+ [6789.473, 3, 0],
+ [7105.2627, 1, 0],
+ [7263.15771, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [7578.94727, 3, 0],
+ [7736.842, 3, 0],
+ [7894.73633, 3, 0],
+ [8052.63135, 3, 0],
+ [8210.526, 1, 0],
+ [8368.421, 1, 0],
+ [8526.315, 0, 0],
+ [8684.21, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [8842.10449, 3, 0],
+ [9157.895, 1, 0],
+ [9315.789, 3, 0],
+ [9631.578, 1, 0],
+ [9789.474, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [10105.2627, 2, 157.89473],
+ [10421.0518, 1, 78.9473648],
+ [10736.8418, 2, 0],
+ [10894.7363, 3, 0],
+ [11052.6309, 1, 78.9473648]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [11368.4209, 2, 157.89473],
+ [11684.21, 1, 0],
+ [11842.1045, 2, 157.89473],
+ [12157.8945, 1, 0],
+ [12315.7891, 2, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [12631.5781, 2, 157.89473],
+ [12947.3682, 1, 78.9473648],
+ [13263.1572, 2, 0],
+ [13421.0518, 3, 0],
+ [13578.9463, 1, 78.9473648]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [13894.7363, 2, 157.89473],
+ [14210.5254, 1, 0],
+ [14368.42, 2, 157.89473],
+ [14684.21, 1, 0],
+ [14842.1045, 0, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15157.8945, 2, 157.89473],
+ [15473.6836, 1, 78.9473648],
+ [15789.4727, 2, 0],
+ [15947.3682, 3, 0],
+ [16105.2627, 1, 78.9473648]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [16421.0527, 2, 157.89473],
+ [16736.8418, 1, 0],
+ [16894.7363, 2, 157.89473],
+ [17210.5254, 1, 0],
+ [17368.42, 2, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [17684.209, 2, 157.89473],
+ [18000, 1, 78.9473648],
+ [18315.79, 2, 0],
+ [18473.6836, 3, 0],
+ [18631.5781, 1, 78.9473648]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [18947.3672, 2, 157.89473],
+ [19263.1563, 1, 0],
+ [19421.05, 2, 157.89473],
+ [19736.8418, 1, 0],
+ [19894.7363, 0, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [20210.5254, 1, 0],
+ [20368.42, 0, 0],
+ [20526.3145, 3, 0],
+ [20684.209, 1, 0],
+ [20842.1035, 0, 0],
+ [21000, 3, 0],
+ [21157.8945, 1, 0],
+ [21315.79, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [21473.6836, 2, 0],
+ [21631.5781, 1, 0],
+ [21789.4727, 0, 0],
+ [21947.3672, 2, 0],
+ [22105.2617, 1, 0],
+ [22263.1563, 0, 0],
+ [22421.05, 3, 0],
+ [22578.9473, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [22736.8418, 1, 0],
+ [22894.7363, 0, 0],
+ [23052.63, 3, 0],
+ [23210.5254, 1, 0],
+ [23368.42, 0, 0],
+ [23526.3145, 3, 0],
+ [23684.209, 1, 0],
+ [23842.1035, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [23999.998, 2, 0],
+ [24157.8945, 1, 0],
+ [24315.79, 0, 0],
+ [24473.6836, 2, 0],
+ [24631.5781, 1, 0],
+ [24789.4727, 7, 0],
+ [24789.4727, 0, 0],
+ [24947.3672, 6, 0],
+ [24947.3672, 3, 0],
+ [25105.2617, 4, 0],
+ [25105.2617, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [25263.1563, 1, 0],
+ [25421.05, 0, 0],
+ [25578.9453, 3, 0],
+ [25736.8418, 1, 0],
+ [25894.7363, 0, 0],
+ [26052.63, 3, 0],
+ [26210.5254, 1, 0],
+ [26368.42, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [26526.3145, 2, 0],
+ [26684.209, 1, 0],
+ [26842.1035, 0, 0],
+ [26999.998, 2, 0],
+ [27157.8926, 1, 0],
+ [27315.79, 0, 0],
+ [27473.6836, 3, 0],
+ [27631.5781, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [27789.4727, 1, 0],
+ [27947.3672, 0, 0],
+ [28105.2617, 3, 0],
+ [28263.1563, 1, 0],
+ [28421.05, 0, 0],
+ [28578.9453, 3, 0],
+ [28736.84, 1, 0],
+ [28894.7363, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [29052.63, 2, 0],
+ [29210.5254, 1, 0],
+ [29368.42, 0, 0],
+ [29526.3145, 2, 0],
+ [29684.209, 1, 0],
+ [29842.1035, 0, 0],
+ [29999.998, 3, 0],
+ [30157.8926, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30315.79, 2, 0],
+ [30473.6836, 0, 0],
+ [30631.5781, 3, 0],
+ [30789.4727, 1, 0],
+ [30947.3672, 3, 236.8421],
+ [31263.1563, 0, 0],
+ [31421.05, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [31578.9453, 0, 0],
+ [31736.84, 2, 0],
+ [31894.7363, 0, 0],
+ [32052.63, 1, 0],
+ [32210.5254, 3, 236.8421],
+ [32526.3145, 1, 0],
+ [32684.209, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [32842.1055, 0, 0],
+ [33000, 2, 0],
+ [33157.8945, 0, 0],
+ [33315.79, 3, 0],
+ [33473.6836, 0, 0],
+ [33631.58, 2, 0],
+ [33789.4727, 3, 0],
+ [33947.3672, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [34105.26, 1, 0],
+ [34263.1563, 0, 0],
+ [34421.05, 1, 0],
+ [34578.9453, 3, 0],
+ [34736.84, 1, 0],
+ [34894.7344, 0, 0],
+ [35052.63, 1, 236.8421]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [35368.418, 2, 0],
+ [35526.3125, 0, 0],
+ [35684.207, 3, 0],
+ [35842.1055, 1, 0],
+ [36000, 3, 236.8421],
+ [36315.79, 0, 0],
+ [36473.6836, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [36631.58, 0, 0],
+ [36789.4727, 2, 0],
+ [36947.3672, 0, 0],
+ [37105.26, 1, 0],
+ [37263.1563, 3, 236.8421],
+ [37578.9453, 1, 0],
+ [37736.84, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [37894.7344, 0, 0],
+ [38052.63, 2, 0],
+ [38210.5234, 0, 0],
+ [38368.418, 3, 0],
+ [38526.3125, 0, 0],
+ [38684.207, 2, 0],
+ [38842.1, 3, 0],
+ [39000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [39157.8945, 1, 0],
+ [39315.79, 0, 0],
+ [39473.6836, 1, 0],
+ [39631.58, 3, 0],
+ [39789.4727, 1, 0],
+ [39947.3672, 0, 0],
+ [40105.26, 1, 236.8421]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [40421.05, 0, 0],
+ [40578.9453, 1, 0],
+ [40736.84, 0, 0],
+ [40894.7344, 2, 0],
+ [41052.63, 3, 0],
+ [41210.5234, 1, 0],
+ [41368.418, 0, 0],
+ [41526.3125, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [41684.207, 2, 0],
+ [41842.1, 0, 0],
+ [42000, 1, 0],
+ [42157.8945, 0, 0],
+ [42315.79, 2, 0],
+ [42473.6836, 3, 0],
+ [42631.58, 0, 0],
+ [42789.4727, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [42947.3672, 0, 0],
+ [43105.26, 1, 0],
+ [43263.1563, 0, 0],
+ [43421.05, 2, 0],
+ [43578.9453, 3, 0],
+ [43736.84, 1, 0],
+ [43894.7344, 0, 0],
+ [44052.63, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [44210.5234, 2, 0],
+ [44368.418, 0, 0],
+ [44526.3125, 1, 0],
+ [44684.207, 0, 0],
+ [44842.1, 2, 0],
+ [44999.9961, 0, 0],
+ [45157.8945, 3, 0],
+ [45315.79, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [45473.6836, 0, 0],
+ [45631.58, 1, 0],
+ [45789.4727, 0, 0],
+ [45947.3672, 2, 0],
+ [46105.26, 3, 0],
+ [46263.1563, 1, 0],
+ [46421.05, 0, 0],
+ [46578.9453, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [46736.84, 2, 0],
+ [46894.7344, 0, 0],
+ [47052.63, 1, 0],
+ [47210.5234, 0, 0],
+ [47368.418, 2, 0],
+ [47526.3125, 3, 0],
+ [47684.207, 0, 0],
+ [47842.1, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [47999.9961, 0, 0],
+ [48157.89, 1, 0],
+ [48315.79, 0, 0],
+ [48473.6836, 2, 0],
+ [48631.58, 3, 0],
+ [48789.4727, 1, 0],
+ [48947.3672, 0, 0],
+ [49105.26, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [49263.1563, 2, 0],
+ [49421.05, 0, 0],
+ [49578.9453, 1, 0],
+ [49736.84, 0, 0],
+ [49894.7344, 2, 0],
+ [50052.63, 0, 0],
+ [50210.5234, 3, 0],
+ [50368.418, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [50526.3125, 3, 157.89473],
+ [50842.1, 3, 0],
+ [50999.9961, 3, 0],
+ [51157.89, 1, 157.89473],
+ [51473.6836, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [51789.4727, 3, 0],
+ [52105.26, 1, 0],
+ [52263.1563, 3, 0],
+ [52578.9453, 1, 0],
+ [52736.84, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [53052.63, 3, 0],
+ [53210.5234, 3, 0],
+ [53368.418, 3, 0],
+ [53526.3125, 3, 0],
+ [53684.207, 1, 0],
+ [53842.1, 1, 0],
+ [53999.9961, 0, 0],
+ [54157.89, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [54315.7852, 3, 0],
+ [54631.58, 1, 0],
+ [54789.4727, 3, 0],
+ [55105.26, 1, 0],
+ [55263.1563, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [55578.9453, 3, 157.89473],
+ [55894.7344, 3, 0],
+ [56052.63, 3, 0],
+ [56210.5234, 1, 157.89473],
+ [56526.3125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56842.1, 3, 0],
+ [57157.89, 1, 0],
+ [57315.7852, 3, 0],
+ [57631.58, 1, 0],
+ [57789.4727, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [58105.26, 3, 0],
+ [58263.1563, 3, 0],
+ [58421.05, 3, 0],
+ [58578.9453, 3, 0],
+ [58736.84, 1, 0],
+ [58894.7344, 1, 0],
+ [59052.63, 0, 0],
+ [59210.5234, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [59368.418, 3, 0],
+ [59684.207, 1, 0],
+ [59842.1, 3, 0],
+ [60157.89, 1, 0],
+ [60315.7852, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [60631.58, 2, 0],
+ [60789.4727, 0, 0],
+ [60947.3672, 3, 0],
+ [61105.26, 1, 0],
+ [61263.1563, 3, 0],
+ [61421.05, 3, 0],
+ [61578.9453, 0, 0],
+ [61736.84, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61894.7344, 0, 0],
+ [62052.63, 2, 0],
+ [62210.5234, 0, 0],
+ [62368.418, 1, 0],
+ [62526.3125, 3, 0],
+ [62684.207, 3, 0],
+ [62842.1, 1, 0],
+ [62999.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [63157.89, 0, 0],
+ [63315.7852, 2, 0],
+ [63473.68, 0, 0],
+ [63631.5742, 3, 0],
+ [63789.4727, 0, 0],
+ [63947.3672, 2, 0],
+ [64105.26, 3, 0],
+ [64263.1563, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [64421.05, 1, 0],
+ [64578.9453, 0, 0],
+ [64736.84, 1, 0],
+ [64894.7344, 3, 0],
+ [65052.63, 1, 0],
+ [65210.5234, 0, 0],
+ [65368.418, 1, 236.8421]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [65684.21, 2, 0],
+ [65842.1, 0, 0],
+ [66000, 3, 0],
+ [66157.89, 1, 0],
+ [66315.79, 3, 0],
+ [66473.68, 3, 0],
+ [66631.58, 0, 0],
+ [66789.47, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [66947.37, 0, 0],
+ [67105.26, 2, 0],
+ [67263.16, 0, 0],
+ [67421.05, 1, 0],
+ [67578.9453, 3, 0],
+ [67736.8359, 3, 0],
+ [67894.7344, 1, 0],
+ [68052.625, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [68210.52, 0, 0],
+ [68368.4141, 2, 0],
+ [68526.31, 0, 0],
+ [68684.21, 3, 0],
+ [68842.1, 0, 0],
+ [69000, 2, 0],
+ [69157.89, 3, 0],
+ [69315.79, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [69473.68, 1, 0],
+ [69631.58, 0, 0],
+ [69789.47, 1, 0],
+ [69947.37, 3, 0],
+ [70105.26, 1, 0],
+ [70263.16, 0, 0],
+ [70421.05, 1, 236.8421]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [70736.8359, 0, 0],
+ [70894.7344, 1, 0],
+ [71052.625, 0, 0],
+ [71210.52, 2, 0],
+ [71368.4141, 3, 0],
+ [71526.31, 1, 0],
+ [71684.21, 0, 0],
+ [71842.1, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72000, 2, 0],
+ [72157.89, 0, 0],
+ [72315.79, 1, 0],
+ [72473.68, 0, 0],
+ [72631.58, 2, 0],
+ [72789.47, 3, 0],
+ [72947.37, 0, 0],
+ [73105.26, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [73263.16, 0, 0],
+ [73421.05, 1, 0],
+ [73578.9453, 0, 0],
+ [73736.8359, 2, 0],
+ [73894.7344, 3, 0],
+ [74052.625, 1, 0],
+ [74210.52, 0, 0],
+ [74368.4141, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [74526.31, 2, 0],
+ [74684.21, 0, 0],
+ [74842.1, 1, 0],
+ [75000, 0, 0],
+ [75157.89, 2, 0],
+ [75315.79, 0, 0],
+ [75473.68, 3, 0],
+ [75631.58, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [75789.47, 0, 0],
+ [75947.37, 1, 0],
+ [76105.26, 0, 0],
+ [76263.16, 2, 0],
+ [76421.05, 3, 0],
+ [76578.9453, 1, 0],
+ [76736.8359, 0, 0],
+ [76894.7344, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [77052.625, 2, 0],
+ [77210.52, 0, 0],
+ [77368.4141, 1, 0],
+ [77526.31, 0, 0],
+ [77684.2, 2, 0],
+ [77842.1, 3, 0],
+ [78000, 0, 0],
+ [78157.89, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78315.79, 0, 0],
+ [78473.68, 1, 0],
+ [78631.58, 0, 0],
+ [78789.47, 2, 0],
+ [78947.37, 3, 0],
+ [79105.26, 1, 0],
+ [79263.16, 0, 0],
+ [79421.05, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [79578.9453, 2, 0],
+ [79736.8359, 0, 0],
+ [79894.7344, 1, 0],
+ [80052.625, 0, 0],
+ [80210.52, 2, 0],
+ [80368.4141, 0, 0],
+ [80526.31, 3, 0],
+ [80684.2, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80842.1, 2, 0],
+ [81000, 3, 0],
+ [81157.89, 1, 0],
+ [81315.79, 3, 0],
+ [81473.68, 0, 0],
+ [81631.58, 3, 0],
+ [81789.47, 1, 0],
+ [81947.37, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [82105.26, 2, 0],
+ [82263.16, 3, 0],
+ [82421.05, 1, 0],
+ [82578.9453, 3, 0],
+ [82736.8359, 0, 0],
+ [82894.7344, 3, 0],
+ [83052.625, 1, 0],
+ [83210.52, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [83368.4141, 2, 0],
+ [83526.31, 3, 0],
+ [83684.2, 1, 0],
+ [83842.1, 3, 0],
+ [84000, 0, 0],
+ [84157.89, 3, 0],
+ [84315.79, 1, 0],
+ [84473.68, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [84631.58, 2, 0],
+ [84789.47, 3, 0],
+ [84947.37, 1, 0],
+ [85105.26, 3, 0],
+ [85263.16, 0, 0],
+ [85421.05, 3, 0],
+ [85578.9453, 1, 0],
+ [85736.8359, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [85894.7344, 2, 0],
+ [86052.625, 3, 0],
+ [86210.52, 1, 0],
+ [86368.4141, 3, 0],
+ [86526.31, 0, 0],
+ [86684.2, 3, 0],
+ [86842.1, 1, 0],
+ [86999.99, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [87157.89, 2, 0],
+ [87315.79, 3, 0],
+ [87473.68, 1, 0],
+ [87631.58, 3, 0],
+ [87789.47, 0, 0],
+ [87947.37, 3, 0],
+ [88105.26, 1, 0],
+ [88263.16, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [88421.05, 2, 0],
+ [88578.9453, 3, 0],
+ [88736.8359, 1, 0],
+ [88894.7344, 3, 0],
+ [89052.625, 0, 0],
+ [89210.52, 3, 0],
+ [89368.4141, 1, 0],
+ [89526.31, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [89684.2, 2, 0],
+ [89842.1, 3, 0],
+ [89999.99, 1, 0],
+ [90157.89, 3, 0],
+ [90315.79, 0, 0],
+ [90473.68, 3, 0],
+ [90631.58, 1, 0],
+ [90789.47, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [90947.37, 3, 157.89473],
+ [91263.16, 3, 0],
+ [91421.05, 3, 0],
+ [91578.9453, 1, 157.89473],
+ [91894.7344, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [92210.52, 3, 0],
+ [92526.31, 1, 0],
+ [92684.2, 3, 0],
+ [92999.99, 1, 0],
+ [93157.89, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [93473.68, 3, 0],
+ [93631.58, 3, 0],
+ [93789.47, 3, 0],
+ [93947.37, 3, 0],
+ [94105.26, 1, 0],
+ [94263.16, 1, 0],
+ [94421.05, 0, 0],
+ [94578.9453, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [94736.8359, 3, 0],
+ [95052.625, 1, 0],
+ [95210.52, 3, 0],
+ [95526.31, 1, 0],
+ [95684.2, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [95999.99, 3, 157.89473],
+ [96315.78, 3, 0],
+ [96473.68, 3, 0],
+ [96631.58, 1, 157.89473],
+ [96947.37, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [97263.16, 3, 0],
+ [97578.9453, 1, 0],
+ [97736.8359, 3, 0],
+ [98052.625, 1, 0],
+ [98210.52, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [98526.31, 3, 0],
+ [98684.2, 3, 0],
+ [98842.1, 3, 0],
+ [98999.99, 3, 0],
+ [99157.89, 1, 0],
+ [99315.78, 1, 0],
+ [99473.68, 0, 0],
+ [99631.58, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [99789.47, 3, 0],
+ [100105.258, 1, 0],
+ [100263.156, 3, 0],
+ [100578.945, 1, 0],
+ [100736.836, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 190,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "spirit",
+ "song": "Thorns",
+ "stage": "schoolEvil",
+ "needsVoices": true,
+ "validScore": true,
+ "noteStyle": "pixel",
+ "bpm": 190,
+ "speed": 1.5
+ }
+}
diff --git a/assets/preload/data/songs/thorns/thorns.json b/assets/preload/data/songs/thorns/thorns.json
new file mode 100644
index 0000000000..787e4c5f86
--- /dev/null
+++ b/assets/preload/data/songs/thorns/thorns.json
@@ -0,0 +1,914 @@
+{
+ "song": {
+ "player1": "bf-pixel",
+ "gfVersion": "gf-pixel",
+ "notes": [
+ {
+ "sectionNotes": [
+ [0, 3, 157.89473],
+ [631.5789, 1, 157.89473],
+ [947.3684, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [1263.15784, 3, 0],
+ [1578.94727, 1, 0],
+ [1736.842, 3, 0],
+ [2052.63159, 1, 0],
+ [2210.52612, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [2526.31567, 3, 0],
+ [2842.10522, 3, 0],
+ [3157.89453, 1, 0],
+ [3473.684, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [3789.47363, 3, 0],
+ [4105.263, 1, 0],
+ [4263.15771, 3, 0],
+ [4578.94727, 1, 0],
+ [4736.842, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [5052.63135, 3, 157.89473],
+ [5684.21045, 1, 157.89473],
+ [5999.99951, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [6315.789, 3, 0],
+ [6631.57861, 1, 0],
+ [6789.473, 3, 0],
+ [7105.2627, 1, 0],
+ [7263.15771, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [7578.94727, 3, 0],
+ [7894.73633, 3, 0],
+ [8210.526, 1, 0],
+ [8526.315, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [8842.10449, 3, 0],
+ [9157.895, 1, 0],
+ [9315.789, 3, 0],
+ [9631.578, 1, 0],
+ [9789.474, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [10105.2627, 2, 157.89473],
+ [10736.8418, 2, 0],
+ [10894.7363, 3, 0],
+ [11052.6309, 1, 78.9473648]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [11368.4209, 2, 157.89473],
+ [11842.1045, 2, 157.89473],
+ [12315.7891, 2, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [12631.5781, 2, 157.89473],
+ [13263.1572, 2, 0],
+ [13421.0518, 3, 0],
+ [13578.9463, 1, 78.9473648]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [13894.7363, 2, 157.89473],
+ [14368.42, 2, 157.89473],
+ [14842.1045, 0, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15157.8945, 2, 157.89473],
+ [15789.4727, 2, 0],
+ [15947.3682, 3, 0],
+ [16105.2627, 1, 78.9473648]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [16421.0527, 2, 157.89473],
+ [16894.7363, 2, 157.89473],
+ [17368.42, 2, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [17684.209, 2, 157.89473],
+ [18315.79, 2, 0],
+ [18473.6836, 3, 0],
+ [18631.5781, 1, 78.9473648]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [18947.3672, 2, 157.89473],
+ [19421.05, 2, 157.89473],
+ [19894.7363, 0, 157.89473]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [20210.5254, 1, 0],
+ [20526.3145, 3, 0],
+ [20684.209, 1, 0],
+ [21000, 3, 0],
+ [21157.8945, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [21473.6836, 2, 0],
+ [21631.5781, 1, 0],
+ [21947.3672, 2, 0],
+ [22105.2617, 1, 0],
+ [22421.05, 3, 0],
+ [22578.9473, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [22736.8418, 1, 0],
+ [23052.63, 3, 0],
+ [23210.5254, 1, 0],
+ [23526.3145, 3, 0],
+ [23684.209, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [23999.998, 2, 0],
+ [24157.8945, 1, 0],
+ [24473.6836, 2, 0],
+ [24631.5781, 1, 0],
+ [24789.4727, 7, 0],
+ [24947.3672, 6, 0],
+ [24947.3672, 3, 0],
+ [25105.2617, 4, 0],
+ [25105.2617, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [25263.1563, 1, 0],
+ [25578.9453, 3, 0],
+ [25736.8418, 1, 0],
+ [26052.63, 3, 0],
+ [26210.5254, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [26526.3145, 2, 0],
+ [26684.209, 1, 0],
+ [26999.998, 2, 0],
+ [27157.8926, 1, 0],
+ [27473.6836, 3, 0],
+ [27631.5781, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [27789.4727, 1, 0],
+ [28105.2617, 3, 0],
+ [28263.1563, 1, 0],
+ [28578.9453, 3, 0],
+ [28736.84, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [29052.63, 2, 0],
+ [29210.5254, 1, 0],
+ [29526.3145, 2, 0],
+ [29684.209, 1, 0],
+ [29999.998, 3, 0],
+ [30157.8926, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30315.79, 2, 0],
+ [30631.5781, 3, 0],
+ [30789.4727, 1, 0],
+ [30947.3672, 3, 0],
+ [31263.1563, 0, 0],
+ [31421.05, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [31578.9453, 0, 0],
+ [31894.7363, 0, 0],
+ [32052.63, 1, 0],
+ [32210.5254, 3, 0],
+ [32526.3145, 1, 0],
+ [32684.209, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [32842.1055, 0, 0],
+ [33157.8945, 0, 0],
+ [33315.79, 3, 0],
+ [33473.6836, 0, 0],
+ [33789.4727, 3, 0],
+ [33947.3672, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [34105.26, 1, 0],
+ [34421.05, 1, 0],
+ [34578.9453, 3, 0],
+ [34736.84, 1, 0],
+ [35052.63, 1, 236.8421]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [35368.418, 2, 0],
+ [35684.207, 3, 0],
+ [35842.1055, 1, 0],
+ [36000, 3, 0],
+ [36315.79, 0, 0],
+ [36473.6836, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [36631.58, 0, 0],
+ [36947.3672, 0, 0],
+ [37105.26, 1, 0],
+ [37263.1563, 3, 0],
+ [37578.9453, 1, 0],
+ [37736.84, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [37894.7344, 0, 0],
+ [38210.5234, 0, 0],
+ [38368.418, 3, 0],
+ [38526.3125, 0, 0],
+ [38842.1, 3, 0],
+ [39000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [39157.8945, 1, 0],
+ [39473.6836, 1, 0],
+ [39631.58, 3, 0],
+ [39789.4727, 1, 0],
+ [40105.26, 1, 236.8421]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [40421.05, 0, 0],
+ [40736.84, 0, 0],
+ [41052.63, 3, 0],
+ [41210.5234, 1, 0],
+ [41368.418, 0, 0],
+ [41526.3125, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [41684.207, 2, 0],
+ [42000, 1, 0],
+ [42315.79, 2, 0],
+ [42473.6836, 3, 0],
+ [42631.58, 0, 0],
+ [42789.4727, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [42947.3672, 0, 0],
+ [43263.1563, 0, 0],
+ [43578.9453, 3, 0],
+ [43736.84, 1, 0],
+ [43894.7344, 0, 0],
+ [44052.63, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [44210.5234, 2, 0],
+ [44526.3125, 1, 0],
+ [44842.1, 2, 0],
+ [44999.9961, 0, 0],
+ [45157.8945, 3, 0],
+ [45315.79, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [45473.6836, 0, 0],
+ [45789.4727, 0, 0],
+ [46105.26, 3, 0],
+ [46263.1563, 1, 0],
+ [46421.05, 0, 0],
+ [46578.9453, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [46736.84, 2, 0],
+ [47052.63, 1, 0],
+ [47368.418, 2, 0],
+ [47526.3125, 3, 0],
+ [47684.207, 0, 0],
+ [47842.1, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [47999.9961, 0, 0],
+ [48315.79, 0, 0],
+ [48631.58, 3, 0],
+ [48789.4727, 1, 0],
+ [48947.3672, 0, 0],
+ [49105.26, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [49263.1563, 2, 0],
+ [49578.9453, 1, 0],
+ [49894.7344, 2, 0],
+ [50052.63, 0, 0],
+ [50210.5234, 3, 0],
+ [50368.418, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [50526.3125, 3, 157.89473],
+ [51157.89, 1, 157.89473],
+ [51473.6836, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [51789.4727, 3, 0],
+ [52105.26, 1, 0],
+ [52263.1563, 3, 0],
+ [52578.9453, 1, 0],
+ [52736.84, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [53052.63, 3, 0],
+ [53368.418, 3, 0],
+ [53684.207, 1, 0],
+ [53999.9961, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [54315.7852, 3, 0],
+ [54631.58, 1, 0],
+ [54789.4727, 3, 0],
+ [55105.26, 1, 0],
+ [55263.1563, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [55578.9453, 3, 157.89473],
+ [56210.5234, 1, 157.89473],
+ [56526.3125, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56842.1, 3, 0],
+ [57157.89, 1, 0],
+ [57315.7852, 3, 0],
+ [57631.58, 1, 0],
+ [57789.4727, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [58105.26, 3, 0],
+ [58421.05, 3, 0],
+ [58736.84, 1, 0],
+ [59052.63, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [59368.418, 3, 0],
+ [59684.207, 1, 0],
+ [59842.1, 3, 0],
+ [60157.89, 1, 0],
+ [60315.7852, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [60631.58, 2, 0],
+ [60947.3672, 3, 0],
+ [61105.26, 1, 0],
+ [61263.1563, 3, 0],
+ [61578.9453, 0, 0],
+ [61736.84, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [61894.7344, 0, 0],
+ [62210.5234, 0, 0],
+ [62368.418, 1, 0],
+ [62526.3125, 3, 0],
+ [62842.1, 1, 0],
+ [62999.9961, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [63157.89, 0, 0],
+ [63473.68, 0, 0],
+ [63631.5742, 3, 0],
+ [63789.4727, 0, 0],
+ [64105.26, 3, 0],
+ [64263.1563, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [64421.05, 1, 0],
+ [64736.84, 1, 0],
+ [64894.7344, 3, 0],
+ [65052.63, 1, 0],
+ [65368.418, 1, 236.8421]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [65684.21, 2, 0],
+ [66000, 3, 0],
+ [66157.89, 1, 0],
+ [66315.79, 3, 0],
+ [66631.58, 0, 0],
+ [66789.47, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [66947.37, 0, 0],
+ [67263.16, 0, 0],
+ [67421.05, 1, 0],
+ [67578.9453, 3, 0],
+ [67894.7344, 1, 0],
+ [68052.625, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [68210.52, 0, 0],
+ [68526.31, 0, 0],
+ [68684.21, 3, 0],
+ [68842.1, 0, 0],
+ [69157.89, 3, 0],
+ [69315.79, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [69473.68, 1, 0],
+ [69789.47, 1, 0],
+ [69947.37, 3, 0],
+ [70105.26, 1, 0],
+ [70421.05, 1, 236.8421]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [70736.8359, 0, 0],
+ [71052.625, 0, 0],
+ [71368.4141, 3, 0],
+ [71526.31, 1, 0],
+ [71684.21, 0, 0],
+ [71842.1, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72000, 2, 0],
+ [72315.79, 1, 0],
+ [72631.58, 2, 0],
+ [72789.47, 3, 0],
+ [72947.37, 0, 0],
+ [73105.26, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [73263.16, 0, 0],
+ [73578.9453, 0, 0],
+ [73894.7344, 3, 0],
+ [74052.625, 1, 0],
+ [74210.52, 0, 0],
+ [74368.4141, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [74526.31, 2, 0],
+ [74842.1, 1, 0],
+ [75157.89, 2, 0],
+ [75315.79, 0, 0],
+ [75473.68, 3, 0],
+ [75631.58, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [75789.47, 0, 0],
+ [76105.26, 0, 0],
+ [76421.05, 3, 0],
+ [76578.9453, 1, 0],
+ [76736.8359, 0, 0],
+ [76894.7344, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [77052.625, 2, 0],
+ [77368.4141, 1, 0],
+ [77684.2, 2, 0],
+ [77842.1, 3, 0],
+ [78000, 0, 0],
+ [78157.89, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78315.79, 0, 0],
+ [78631.58, 0, 0],
+ [78947.37, 3, 0],
+ [79105.26, 1, 0],
+ [79263.16, 0, 0],
+ [79421.05, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [79578.9453, 2, 0],
+ [79894.7344, 1, 0],
+ [80210.52, 2, 0],
+ [80368.4141, 0, 0],
+ [80526.31, 3, 0],
+ [80684.2, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80842.1, 2, 0],
+ [81157.89, 1, 0],
+ [81473.68, 0, 0],
+ [81631.58, 3, 0],
+ [81789.47, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [82105.26, 2, 0],
+ [82421.05, 1, 0],
+ [82736.8359, 0, 0],
+ [82894.7344, 3, 0],
+ [83052.625, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [83368.4141, 2, 0],
+ [83684.2, 1, 0],
+ [84000, 0, 0],
+ [84157.89, 3, 0],
+ [84315.79, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [84631.58, 2, 0],
+ [84947.37, 1, 0],
+ [85263.16, 0, 0],
+ [85421.05, 3, 0],
+ [85578.9453, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [85894.7344, 2, 0],
+ [86210.52, 1, 0],
+ [86526.31, 0, 0],
+ [86684.2, 3, 0],
+ [86842.1, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [87157.89, 2, 0],
+ [87473.68, 1, 0],
+ [87789.47, 0, 0],
+ [87947.37, 3, 0],
+ [88105.26, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [88421.05, 2, 0],
+ [88736.8359, 1, 0],
+ [89052.625, 0, 0],
+ [89210.52, 3, 0],
+ [89368.4141, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [89684.2, 2, 0],
+ [89999.99, 1, 0],
+ [90315.79, 0, 0],
+ [90473.68, 3, 0],
+ [90631.58, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [90947.37, 3, 157.89473],
+ [91578.9453, 1, 157.89473],
+ [91894.7344, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [92210.52, 3, 0],
+ [92526.31, 1, 0],
+ [92684.2, 3, 0],
+ [92999.99, 1, 0],
+ [93157.89, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [93473.68, 3, 0],
+ [93789.47, 3, 0],
+ [94105.26, 1, 0],
+ [94421.05, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [94736.8359, 3, 0],
+ [95052.625, 1, 0],
+ [95210.52, 3, 0],
+ [95526.31, 1, 0],
+ [95684.2, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [95999.99, 3, 157.89473],
+ [96631.58, 1, 157.89473],
+ [96947.37, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [97263.16, 3, 0],
+ [97578.9453, 1, 0],
+ [97736.8359, 3, 0],
+ [98052.625, 1, 0],
+ [98210.52, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [98526.31, 3, 0],
+ [98842.1, 3, 0],
+ [99157.89, 1, 0],
+ [99473.68, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [99789.47, 3, 0],
+ [100105.258, 1, 0],
+ [100263.156, 3, 0],
+ [100578.945, 1, 0],
+ [100736.836, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 190,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "spirit",
+ "song": "Thorns",
+ "stage": "schoolEvil",
+ "needsVoices": true,
+ "validScore": true,
+ "noteStyle": "pixel",
+ "bpm": 190,
+ "speed": 1.3
+ }
+}
diff --git a/assets/preload/data/songs/tutorial/_meta.json b/assets/preload/data/songs/tutorial/_meta.json
new file mode 100644
index 0000000000..4c2eee6beb
--- /dev/null
+++ b/assets/preload/data/songs/tutorial/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/tutorial/modchart.lua b/assets/preload/data/songs/tutorial/modchart.lua
similarity index 100%
rename from assets/preload/data/tutorial/modchart.lua
rename to assets/preload/data/songs/tutorial/modchart.lua
diff --git a/assets/preload/data/songs/tutorial/tutorial-easy.json b/assets/preload/data/songs/tutorial/tutorial-easy.json
new file mode 100644
index 0000000000..bd768e2615
--- /dev/null
+++ b/assets/preload/data/songs/tutorial/tutorial-easy.json
@@ -0,0 +1,490 @@
+{
+ "song": {
+ "song": "Tutorial",
+ "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": [
+ [9600, 0, 0],
+ [10800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [12000, 0, 0],
+ [13200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [14400, 0, 0],
+ [15600, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [16800, 0, 0],
+ [18000, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [19200, 2, 0],
+ [20400, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [21600, 2, 0],
+ [22800, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [24000, 2, 0],
+ [25200, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [26400, 2, 0],
+ [27600, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [28800, 0, 0],
+ [30000, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [31200, 1, 0],
+ [32400, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [33600, 0, 0],
+ [34800, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [36000, 1, 0],
+ [37200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [38400, 1, 0],
+ [39000, 1, 0],
+ [39600, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [40800, 1, 0],
+ [41400, 1, 0],
+ [42000, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [43200, 1, 0],
+ [43800, 1, 0],
+ [44400, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [45600, 1, 0],
+ [46200, 1, 0],
+ [46800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [48000, 1, 0],
+ [48300, 2, 0],
+ [48600, 3, 0],
+ [48900, 2, 0],
+ [49800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [50400, 1, 0],
+ [50700, 2, 0],
+ [51000, 3, 0],
+ [51300, 2, 0],
+ [52200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [52800, 3, 0],
+ [53400, 1, 0],
+ [54000, 0, 0],
+ [54600, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [55200, 2, 0],
+ [55800, 3, 0],
+ [56400, 0, 0],
+ [57000, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [[57600, 1, 750]]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": []
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": []
+ }
+ ],
+ "bpm": 100,
+ "sections": 0,
+ "needsVoices": true,
+ "player1": "bf",
+ "player2": "gf",
+ "sectionLengths": [],
+ "speed": 1
+ },
+ "bpm": 100,
+ "sections": 27,
+ "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": [
+ [9600, 0, 0],
+ [10800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [12000, 0, 0],
+ [13200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [14400, 0, 0],
+ [15600, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [16800, 0, 0],
+ [18000, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [19200, 2, 0],
+ [20400, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [21600, 2, 0],
+ [22800, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [24000, 2, 0],
+ [25200, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [26400, 2, 0],
+ [27600, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [28800, 0, 0],
+ [30000, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [31200, 1, 0],
+ [32400, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [33600, 0, 0],
+ [34800, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [36000, 1, 0],
+ [37200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [38400, 1, 0],
+ [39000, 1, 0],
+ [39600, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [40800, 1, 0],
+ [41400, 1, 0],
+ [42000, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [43200, 1, 0],
+ [43800, 1, 0],
+ [44400, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [45600, 1, 0],
+ [46200, 1, 0],
+ [46800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [48000, 1, 0],
+ [48300, 2, 0],
+ [48600, 3, 0],
+ [48900, 2, 0],
+ [49800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [50400, 1, 0],
+ [50700, 2, 0],
+ [51000, 3, 0],
+ [51300, 2, 0],
+ [52200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [52800, 3, 0],
+ [53400, 1, 0],
+ [54000, 0, 0],
+ [54600, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [55200, 2, 0],
+ [55800, 3, 0],
+ [56400, 0, 0],
+ [57000, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [[57600, 1, 750]]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": []
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": []
+ }
+ ]
+}
diff --git a/assets/preload/data/songs/tutorial/tutorial-hard.json b/assets/preload/data/songs/tutorial/tutorial-hard.json
new file mode 100644
index 0000000000..c4a2b5993a
--- /dev/null
+++ b/assets/preload/data/songs/tutorial/tutorial-hard.json
@@ -0,0 +1,540 @@
+{
+ "song": {
+ "song": "Tutorial",
+ "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": [
+ [9600, 0, 0],
+ [10800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [12000, 0, 0],
+ [13200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [14400, 0, 0],
+ [15600, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [16800, 0, 0],
+ [18000, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [19200, 2, 0],
+ [20400, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [21600, 2, 0],
+ [22800, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [24000, 2, 0],
+ [25200, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [26400, 2, 0],
+ [27600, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [28800, 0, 0],
+ [30000, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [31200, 1, 0],
+ [32400, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [33600, 0, 0],
+ [34800, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [36000, 1, 0],
+ [37200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [38400, 1, 0],
+ [39000, 1, 0],
+ [39600, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [40800, 1, 0],
+ [41400, 1, 0],
+ [42000, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [43200, 1, 0],
+ [43800, 1, 0],
+ [44400, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [45600, 1, 0],
+ [46200, 1, 0],
+ [46800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [48000, 1, 0],
+ [48300, 2, 0],
+ [48600, 3, 0],
+ [48900, 2, 0],
+ [49800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [50400, 1, 0],
+ [50700, 2, 0],
+ [51000, 3, 0],
+ [51300, 2, 0],
+ [52200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [52800, 3, 0],
+ [53400, 1, 0],
+ [54000, 0, 0],
+ [54600, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [55200, 2, 0],
+ [55800, 3, 0],
+ [56400, 0, 0],
+ [57000, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [[57600, 1, 750]]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": []
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [62400, 0, 0],
+ [62550, 1, 0],
+ [62700, 2, 0],
+ [62850, 3, 0],
+ [63000, 2, 0],
+ [63150, 1, 0],
+ [63300, 0, 0],
+ [63450, 1, 0],
+ [63600, 2, 0],
+ [63750, 3, 0],
+ [63900, 2, 0],
+ [64050, 3, 0],
+ [64200, 2, 0],
+ [64350, 3, 0],
+ [64650, 0, 0],
+ [64500, 1, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 100,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "sectionNotes": [],
+ "typeOfSection": 0
+ }
+ ],
+ "bpm": 100,
+ "sections": 0,
+ "needsVoices": true,
+ "player1": "bf",
+ "player2": "gf",
+ "sectionLengths": [],
+ "speed": 1
+ },
+ "bpm": 100,
+ "sections": 28,
+ "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": [
+ [9600, 0, 0],
+ [10800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [12000, 0, 0],
+ [13200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [14400, 0, 0],
+ [15600, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [16800, 0, 0],
+ [18000, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [19200, 2, 0],
+ [20400, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [21600, 2, 0],
+ [22800, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [24000, 2, 0],
+ [25200, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [26400, 2, 0],
+ [27600, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [28800, 0, 0],
+ [30000, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [31200, 1, 0],
+ [32400, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [33600, 0, 0],
+ [34800, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [36000, 1, 0],
+ [37200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [38400, 1, 0],
+ [39000, 1, 0],
+ [39600, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [40800, 1, 0],
+ [41400, 1, 0],
+ [42000, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [43200, 1, 0],
+ [43800, 1, 0],
+ [44400, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [45600, 1, 0],
+ [46200, 1, 0],
+ [46800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [48000, 1, 0],
+ [48300, 2, 0],
+ [48600, 3, 0],
+ [48900, 2, 0],
+ [49800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [50400, 1, 0],
+ [50700, 2, 0],
+ [51000, 3, 0],
+ [51300, 2, 0],
+ [52200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [52800, 3, 0],
+ [53400, 1, 0],
+ [54000, 0, 0],
+ [54600, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [55200, 2, 0],
+ [55800, 3, 0],
+ [56400, 0, 0],
+ [57000, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [[57600, 1, 750]]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": []
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [62400, 0, 0],
+ [62550, 1, 0],
+ [62700, 2, 0],
+ [62850, 3, 0],
+ [63000, 2, 0],
+ [63150, 1, 0],
+ [63300, 0, 0],
+ [63450, 1, 0],
+ [63600, 2, 0],
+ [63750, 3, 0],
+ [63900, 2, 0],
+ [64050, 3, 0],
+ [64200, 2, 0],
+ [64350, 3, 0],
+ [64650, 0, 0],
+ [64500, 1, 0]
+ ]
+ },
+ {
+ "lengthInSteps": 16,
+ "bpm": 100,
+ "changeBPM": false,
+ "mustHitSection": true,
+ "sectionNotes": [],
+ "typeOfSection": 0
+ }
+ ]
+}
diff --git a/assets/preload/data/songs/tutorial/tutorial.json b/assets/preload/data/songs/tutorial/tutorial.json
new file mode 100644
index 0000000000..bd768e2615
--- /dev/null
+++ b/assets/preload/data/songs/tutorial/tutorial.json
@@ -0,0 +1,490 @@
+{
+ "song": {
+ "song": "Tutorial",
+ "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": [
+ [9600, 0, 0],
+ [10800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [12000, 0, 0],
+ [13200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [14400, 0, 0],
+ [15600, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [16800, 0, 0],
+ [18000, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [19200, 2, 0],
+ [20400, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [21600, 2, 0],
+ [22800, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [24000, 2, 0],
+ [25200, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [26400, 2, 0],
+ [27600, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [28800, 0, 0],
+ [30000, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [31200, 1, 0],
+ [32400, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [33600, 0, 0],
+ [34800, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [36000, 1, 0],
+ [37200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [38400, 1, 0],
+ [39000, 1, 0],
+ [39600, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [40800, 1, 0],
+ [41400, 1, 0],
+ [42000, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [43200, 1, 0],
+ [43800, 1, 0],
+ [44400, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [45600, 1, 0],
+ [46200, 1, 0],
+ [46800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [48000, 1, 0],
+ [48300, 2, 0],
+ [48600, 3, 0],
+ [48900, 2, 0],
+ [49800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [50400, 1, 0],
+ [50700, 2, 0],
+ [51000, 3, 0],
+ [51300, 2, 0],
+ [52200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [52800, 3, 0],
+ [53400, 1, 0],
+ [54000, 0, 0],
+ [54600, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [55200, 2, 0],
+ [55800, 3, 0],
+ [56400, 0, 0],
+ [57000, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [[57600, 1, 750]]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": []
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": []
+ }
+ ],
+ "bpm": 100,
+ "sections": 0,
+ "needsVoices": true,
+ "player1": "bf",
+ "player2": "gf",
+ "sectionLengths": [],
+ "speed": 1
+ },
+ "bpm": 100,
+ "sections": 27,
+ "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": [
+ [9600, 0, 0],
+ [10800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [12000, 0, 0],
+ [13200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [14400, 0, 0],
+ [15600, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [16800, 0, 0],
+ [18000, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [19200, 2, 0],
+ [20400, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [21600, 2, 0],
+ [22800, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [24000, 2, 0],
+ [25200, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [26400, 2, 0],
+ [27600, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [28800, 0, 0],
+ [30000, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [31200, 1, 0],
+ [32400, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [33600, 0, 0],
+ [34800, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [36000, 1, 0],
+ [37200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [38400, 1, 0],
+ [39000, 1, 0],
+ [39600, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [40800, 1, 0],
+ [41400, 1, 0],
+ [42000, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [43200, 1, 0],
+ [43800, 1, 0],
+ [44400, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [45600, 1, 0],
+ [46200, 1, 0],
+ [46800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": false,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [48000, 1, 0],
+ [48300, 2, 0],
+ [48600, 3, 0],
+ [48900, 2, 0],
+ [49800, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [50400, 1, 0],
+ [50700, 2, 0],
+ [51000, 3, 0],
+ [51300, 2, 0],
+ [52200, 3, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [52800, 3, 0],
+ [53400, 1, 0],
+ [54000, 0, 0],
+ [54600, 1, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [
+ [55200, 2, 0],
+ [55800, 3, 0],
+ [56400, 0, 0],
+ [57000, 2, 0]
+ ]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": [[57600, 1, 750]]
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": []
+ },
+ {
+ "mustHitSection": true,
+ "typeOfSection": 0,
+ "lengthInSteps": 16,
+ "sectionNotes": []
+ }
+ ]
+}
diff --git a/assets/preload/data/songs/winter-horrorland/_meta.json b/assets/preload/data/songs/winter-horrorland/_meta.json
new file mode 100644
index 0000000000..4c2eee6beb
--- /dev/null
+++ b/assets/preload/data/songs/winter-horrorland/_meta.json
@@ -0,0 +1,3 @@
+{
+ "offset": 0
+}
\ No newline at end of file
diff --git a/assets/preload/data/songs/winter-horrorland/winter-horrorland-easy.json b/assets/preload/data/songs/winter-horrorland/winter-horrorland-easy.json
new file mode 100644
index 0000000000..57812d45fc
--- /dev/null
+++ b/assets/preload/data/songs/winter-horrorland/winter-horrorland-easy.json
@@ -0,0 +1,806 @@
+{
+ "song": {
+ "player1": "bf-christmas",
+ "gfVersion": "gf-christmas",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [9433.962, 0, 283.01886],
+ [9811.32, 2, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [10566.0381, 0, 660.3774],
+ [11320.7549, 2, 660.3774]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [12452.83, 0, 283.01886],
+ [12830.1885, 2, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [13584.9053, 1, 0],
+ [14339.623, 3, 283.01886],
+ [14716.9814, 2, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15094.34, 5, 754.717],
+ [15471.6982, 0, 283.01886],
+ [15849.0566, 2, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [16603.7734, 0, 660.3774],
+ [17358.49, 2, 660.3774]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [18490.5664, 0, 283.01886],
+ [18867.9238, 2, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [19622.64, 1, 0],
+ [20377.36, 3, 283.01886],
+ [20754.7168, 2, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [21132.0762, 1, 283.01886],
+ [21132.0762, 5, 754.717],
+ [21886.793, 2, 283.01886],
+ [22264.15, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [22641.51, 1, 471.69812],
+ [23396.2266, 0, 0],
+ [23773.584, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [24150.9434, 3, 283.01886],
+ [24528.3027, 2, 0],
+ [24905.66, 2, 0],
+ [25283.02, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [25660.377, 1, 471.69812],
+ [26415.0938, 3, 0],
+ [26792.4531, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [27169.81, 1, 283.01886],
+ [27924.5273, 2, 283.01886],
+ [28301.8867, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [28679.2461, 1, 471.69812],
+ [29433.9629, 0, 0],
+ [29811.32, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30188.68, 3, 283.01886],
+ [30566.0371, 2, 0],
+ [30943.3965, 2, 0],
+ [31320.7539, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [31698.1133, 1, 471.69812],
+ [32452.83, 3, 0],
+ [32830.1875, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33584.9063, 2, 0],
+ [33962.2656, 0, 283.01886],
+ [34528.3, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [35094.34, 2, 283.01886],
+ [35471.7, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [36603.7734, 2, 0],
+ [36981.1328, 0, 283.01886],
+ [37358.4922, 1, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [[37735.8477, 0, 283.01886]],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [39622.64, 2, 0],
+ [40000, 0, 283.01886],
+ [40566.04, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [41132.0742, 2, 283.01886],
+ [41509.4336, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [42641.5078, 2, 0],
+ [43018.8672, 0, 283.01886],
+ [43396.2266, 1, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[43773.5859, 0, 283.01886]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [45283.02, 0, 283.01886],
+ [46037.7344, 2, 0],
+ [46415.0938, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [46792.4531, 5, 283.01886],
+ [47169.8125, 0, 0],
+ [47547.168, 3, 0],
+ [47924.5273, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [48301.8867, 2, 283.01886],
+ [48301.8867, 6, 849.0566],
+ [48679.2461, 0, 188.679245],
+ [49056.6055, 3, 0],
+ [49433.96, 3, 0],
+ [49622.64, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49937.1055, 2, 0],
+ [50188.68, 2, 0],
+ [50440.25, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [51320.7539, 0, 283.01886],
+ [52075.4727, 2, 0],
+ [52452.832, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [52830.1875, 5, 283.01886],
+ [53207.5469, 0, 0],
+ [53584.9063, 3, 0],
+ [53962.2656, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [54339.62, 6, 1132.07544],
+ [54339.62, 2, 283.01886],
+ [54716.98, 0, 188.679245],
+ [55094.34, 3, 0],
+ [55471.7, 3, 0],
+ [55660.38, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56037.7344, 2, 0],
+ [56415.0938, 2, 0],
+ [56603.7734, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [57547.168, 2, 0],
+ [58113.207, 2, 0],
+ [58490.5664, 2, 0],
+ [58679.2461, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [58867.9258, 1, 0],
+ [59245.28, 3, 283.01886],
+ [59622.64, 2, 0],
+ [60000, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [60566.04, 2, 0],
+ [61132.0742, 2, 0],
+ [61509.4336, 2, 0],
+ [61698.1133, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [61886.793, 1, 0],
+ [62264.1523, 3, 283.01886],
+ [62641.5078, 2, 0],
+ [63018.8672, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [63396.2266, 3, 0],
+ [63773.5859, 1, 283.01886],
+ [64150.94, 0, 0],
+ [64528.3, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [64905.66, 4, 0],
+ [64905.66, 3, 0],
+ [65283.02, 1, 283.01886],
+ [65660.375, 0, 0],
+ [66037.7344, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [66415.09, 0, 0],
+ [66415.09, 4, 0],
+ [66981.13, 7, 0],
+ [66981.13, 3, 0],
+ [67358.49, 6, 0],
+ [67358.49, 2, 0],
+ [67735.85, 5, 754.717],
+ [67735.85, 1, 754.717]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [69622.64, 0, 0],
+ [70188.68, 1, 0],
+ [70754.72, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [71132.08, 2, 0],
+ [71320.76, 1, 0],
+ [71698.11, 2, 0],
+ [72075.47, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72452.83, 2, 283.01886],
+ [72830.19, 0, 283.01886],
+ [73207.55, 3, 283.01886],
+ [73584.91, 0, 0],
+ [73773.5859, 1, 566.0377]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [74716.9844, 3, 0],
+ [74905.6641, 0, 0],
+ [75094.3359, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [75660.375, 0, 0],
+ [76226.4141, 1, 0],
+ [76792.45, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [77169.81, 2, 0],
+ [77358.49, 1, 0],
+ [77735.85, 2, 0],
+ [78113.21, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78490.56, 2, 283.01886],
+ [78867.92, 0, 283.01886],
+ [79245.28, 3, 283.01886],
+ [79622.64, 0, 0],
+ [79811.32, 1, 566.0377]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80754.72, 3, 0],
+ [80943.4, 0, 0],
+ [81132.08, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [81509.44, 1, 0],
+ [81886.79, 3, 0],
+ [82264.15, 0, 0],
+ [82641.51, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [83018.87, 1, 0],
+ [83396.23, 3, 0],
+ [83773.5859, 0, 0],
+ [84150.9453, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [84528.3047, 2, 0],
+ [84905.6641, 2, 0],
+ [85094.3359, 0, 0],
+ [85283.0156, 2, 0],
+ [85660.375, 2, 0],
+ [85849.0547, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [86037.7344, 2, 0],
+ [86415.09, 2, 0],
+ [86603.77, 0, 0],
+ [86792.45, 2, 0],
+ [87169.81, 2, 0],
+ [87358.49, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [87547.17, 3, 283.01886],
+ [88113.21, 1, 283.01886],
+ [88301.88, 4, 0],
+ [88679.24, 7, 283.01886],
+ [88679.24, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [89056.6, 5, 283.01886],
+ [89056.6, 3, 0],
+ [89433.96, 3, 0],
+ [89811.32, 1, 283.01886],
+ [89811.32, 7, 0],
+ [90188.68, 6, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [90566.04, 5, 283.01886],
+ [90566.04, 0, 0],
+ [91132.08, 3, 0],
+ [91698.11, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [92075.47, 2, 566.0377],
+ [92075.47, 6, 566.0377],
+ [92830.19, 3, 566.0377],
+ [92830.19, 4, 566.0377]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [93773.5859, 3, 0],
+ [94150.9453, 7, 0],
+ [94339.625, 0, 283.01886],
+ [94716.9844, 4, 283.01886],
+ [94905.6641, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [95283.0156, 3, 283.01886],
+ [95471.6953, 6, 283.01886],
+ [95849.0547, 4, 283.01886],
+ [95849.0547, 2, 283.01886],
+ [96226.4141, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [96792.45, 7, 94.33962],
+ [96981.13, 6, 0],
+ [97169.81, 3, 94.33962],
+ [97358.49, 4, 283.01886],
+ [97358.49, 2, 0],
+ [97735.85, 0, 283.01886],
+ [97735.85, 5, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [98113.21, 5, 283.01886],
+ [98113.21, 0, 283.01886],
+ [98490.56, 7, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [99811.32, 3, 0],
+ [100188.68, 7, 0],
+ [100377.359, 0, 283.01886],
+ [100754.719, 4, 283.01886],
+ [100943.4, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [101320.758, 3, 283.01886],
+ [101509.438, 6, 283.01886],
+ [101886.789, 4, 283.01886],
+ [101886.789, 2, 283.01886],
+ [102264.148, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [102830.188, 3, 94.33962],
+ [103207.547, 7, 94.33962],
+ [103396.227, 0, 283.01886],
+ [103773.586, 1, 283.01886],
+ [103773.586, 4, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [104150.945, 5, 283.01886],
+ [104150.945, 0, 283.01886],
+ [104528.305, 7, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [105849.055, 2, 0],
+ [106415.094, 2, 0],
+ [106792.453, 2, 0],
+ [106981.133, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [107169.813, 1, 0],
+ [107547.172, 3, 283.01886],
+ [107924.531, 2, 0],
+ [108301.883, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [108867.922, 2, 0],
+ [109433.961, 2, 0],
+ [109811.32, 2, 0],
+ [110000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [110188.68, 1, 0],
+ [110566.039, 3, 283.01886],
+ [110943.4, 2, 0],
+ [111320.758, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [111698.109, 3, 0],
+ [112075.469, 1, 283.01886],
+ [112452.828, 0, 0],
+ [112830.188, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [113207.547, 4, 0],
+ [113207.547, 3, 0],
+ [113584.906, 1, 283.01886],
+ [113962.266, 0, 0],
+ [114339.625, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [114716.984, 4, 0],
+ [114716.984, 0, 0],
+ [115283.016, 3, 0],
+ [115283.016, 7, 0],
+ [115660.375, 6, 0],
+ [115660.375, 2, 0],
+ [116037.734, 1, 754.717],
+ [116037.734, 5, 754.717]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [117924.531, 0, 0],
+ [118490.563, 1, 0],
+ [118867.922, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [119245.281, 2, 283.01886],
+ [119622.641, 3, 283.01886],
+ [120000, 0, 283.01886],
+ [120377.359, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [120754.719, 6, 754.717],
+ [120943.4, 0, 0],
+ [121509.438, 1, 0],
+ [121886.789, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [122264.148, 2, 283.01886],
+ [122641.508, 3, 283.01886],
+ [123018.867, 0, 283.01886],
+ [123396.227, 3, 754.717]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [123773.586, 1, 94.33962],
+ [124150.945, 3, 0],
+ [124528.305, 2, 283.01886],
+ [124905.664, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [125283.016, 2, 0],
+ [125283.016, 5, 283.01886],
+ [125660.375, 1, 283.01886],
+ [126037.734, 3, 0],
+ [126415.094, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [126792.453, 0, 0],
+ [126792.453, 4, 0],
+ [127358.492, 3, 0],
+ [127358.492, 7, 0],
+ [127735.852, 6, 0],
+ [127735.852, 2, 0],
+ [128113.211, 1, 377.3585],
+ [128113.211, 5, 377.3585]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [129056.6, 0, 0],
+ [129245.281, 3, 0],
+ [129433.961, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[129811.32, 2, 0]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 159,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "monster-christmas",
+ "song": "Winter Horrorland",
+ "stage": "mallEvil",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 159,
+ "speed": 1
+ }
+}
diff --git a/assets/preload/data/songs/winter-horrorland/winter-horrorland-hard.json b/assets/preload/data/songs/winter-horrorland/winter-horrorland-hard.json
new file mode 100644
index 0000000000..43b209dcac
--- /dev/null
+++ b/assets/preload/data/songs/winter-horrorland/winter-horrorland-hard.json
@@ -0,0 +1,948 @@
+{
+ "song": {
+ "player1": "bf-christmas",
+ "gfVersion": "gf-christmas",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [9433.962, 0, 283.01886],
+ [9811.32, 2, 283.01886],
+ [10188.68, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [10566.0381, 0, 660.3774],
+ [11320.7549, 2, 566.0377]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [12452.83, 0, 283.01886],
+ [12830.1885, 2, 283.01886],
+ [13207.5469, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [13584.9053, 1, 0],
+ [14150.9434, 2, 0],
+ [14339.623, 3, 283.01886],
+ [14716.9814, 2, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15094.34, 5, 754.717],
+ [15471.6982, 0, 283.01886],
+ [15849.0566, 2, 283.01886],
+ [16226.415, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [16603.7734, 0, 660.3774],
+ [17358.49, 2, 660.3774]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [18490.5664, 0, 283.01886],
+ [18867.9238, 2, 283.01886],
+ [19245.2832, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [19622.64, 1, 0],
+ [20188.68, 2, 0],
+ [20377.36, 3, 283.01886],
+ [20754.7168, 2, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [21132.0762, 1, 283.01886],
+ [21132.0762, 5, 754.717],
+ [21509.4336, 3, 283.01886],
+ [21886.793, 2, 283.01886],
+ [22264.15, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [22641.51, 1, 471.69812],
+ [23207.5469, 0, 0],
+ [23301.8867, 2, 0],
+ [23396.2266, 0, 0],
+ [23584.9063, 3, 0],
+ [23773.584, 0, 0],
+ [23962.2637, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [24150.9434, 3, 283.01886],
+ [24528.3027, 2, 0],
+ [24716.98, 0, 0],
+ [24905.66, 2, 0],
+ [25094.34, 0, 0],
+ [25283.02, 2, 0],
+ [25471.6973, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [25660.377, 1, 471.69812],
+ [26226.416, 2, 0],
+ [26415.0938, 3, 0],
+ [26603.7734, 2, 0],
+ [26792.4531, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [27169.81, 1, 283.01886],
+ [27547.17, 3, 283.01886],
+ [27924.5273, 2, 283.01886],
+ [28301.8867, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [28679.2461, 1, 471.69812],
+ [29245.2832, 0, 0],
+ [29339.623, 2, 0],
+ [29433.9629, 0, 0],
+ [29622.64, 3, 0],
+ [29811.32, 0, 0],
+ [30000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30188.68, 3, 283.01886],
+ [30566.0371, 2, 0],
+ [30754.7168, 0, 0],
+ [30943.3965, 2, 0],
+ [31132.0762, 0, 0],
+ [31320.7539, 2, 0],
+ [31509.4336, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [31698.1133, 1, 471.69812],
+ [32264.15, 2, 0],
+ [32452.83, 3, 0],
+ [32641.51, 2, 0],
+ [32830.1875, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33396.2266, 3, 0],
+ [33490.5664, 3, 0],
+ [33584.9063, 2, 0],
+ [33773.5859, 1, 0],
+ [33962.2656, 0, 283.01886],
+ [34528.3, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [35094.34, 2, 283.01886],
+ [35471.7, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [36415.0938, 3, 94.33962],
+ [36603.7734, 2, 94.33962],
+ [36792.4531, 1, 94.33962],
+ [36981.1328, 0, 283.01886],
+ [37358.4922, 1, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [[37735.8477, 0, 283.01886]],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [39433.96, 3, 0],
+ [39528.3, 3, 0],
+ [39622.64, 2, 0],
+ [39811.32, 1, 0],
+ [40000, 0, 283.01886],
+ [40566.04, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [41132.0742, 2, 283.01886],
+ [41509.4336, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [42452.832, 3, 94.33962],
+ [42641.5078, 2, 94.33962],
+ [42830.1875, 1, 94.33962],
+ [43018.8672, 0, 283.01886],
+ [43396.2266, 1, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[43773.5859, 0, 283.01886]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [45283.02, 0, 283.01886],
+ [45660.38, 1, 283.01886],
+ [46037.7344, 2, 0],
+ [46226.4141, 3, 0],
+ [46415.0938, 2, 0],
+ [46603.7734, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [46792.4531, 5, 283.01886],
+ [47169.8125, 0, 0],
+ [47547.168, 3, 0],
+ [47924.5273, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [48301.8867, 6, 849.0566],
+ [48301.8867, 2, 283.01886],
+ [48679.2461, 0, 188.679245],
+ [49056.6055, 3, 0],
+ [49245.28, 0, 0],
+ [49339.62, 0, 0],
+ [49433.96, 3, 0],
+ [49622.64, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49937.1055, 2, 0],
+ [50188.68, 2, 0],
+ [50440.25, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [51320.7539, 0, 283.01886],
+ [51698.1133, 1, 283.01886],
+ [52075.4727, 2, 0],
+ [52264.1523, 3, 0],
+ [52452.832, 2, 0],
+ [52641.5078, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [52830.1875, 5, 283.01886],
+ [53207.5469, 0, 0],
+ [53584.9063, 3, 0],
+ [53962.2656, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [54339.62, 6, 1132.07544],
+ [54339.62, 2, 188.679245],
+ [54716.98, 0, 188.679245],
+ [55094.34, 3, 0],
+ [55283.02, 0, 0],
+ [55377.36, 0, 0],
+ [55471.7, 3, 0],
+ [55660.38, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56037.7344, 2, 0],
+ [56415.0938, 2, 0],
+ [56603.7734, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [57547.168, 2, 0],
+ [57924.5273, 2, 0],
+ [58018.8672, 3, 0],
+ [58113.207, 2, 0],
+ [58301.8867, 0, 0],
+ [58490.5664, 2, 0],
+ [58679.2461, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [58867.9258, 1, 0],
+ [59056.6055, 0, 0],
+ [59245.28, 3, 283.01886],
+ [59622.64, 2, 0],
+ [59811.32, 3, 0],
+ [60000, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [60566.04, 2, 0],
+ [60943.3945, 2, 0],
+ [61037.7344, 3, 0],
+ [61132.0742, 2, 0],
+ [61320.7539, 0, 0],
+ [61509.4336, 2, 0],
+ [61698.1133, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [61886.793, 1, 0],
+ [62075.4727, 0, 0],
+ [62264.1523, 3, 283.01886],
+ [62641.5078, 2, 0],
+ [62830.1875, 3, 0],
+ [63018.8672, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [63396.2266, 3, 0],
+ [63584.9063, 3, 0],
+ [63773.5859, 1, 283.01886],
+ [64150.94, 0, 0],
+ [64528.3, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [64905.66, 4, 0],
+ [64905.66, 3, 0],
+ [65094.34, 3, 0],
+ [65283.02, 1, 283.01886],
+ [65660.375, 0, 0],
+ [65849.0547, 0, 0],
+ [66037.7344, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [66415.09, 4, 0],
+ [66415.09, 0, 0],
+ [66603.77, 5, 0],
+ [66603.77, 1, 0],
+ [66981.13, 7, 0],
+ [66981.13, 3, 0],
+ [67358.49, 6, 0],
+ [67358.49, 2, 0],
+ [67735.85, 1, 754.717],
+ [67735.85, 5, 754.717]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [69622.64, 0, 0],
+ [69716.9844, 0, 0],
+ [69811.32, 3, 0],
+ [70188.68, 1, 0],
+ [70377.36, 0, 0],
+ [70566.04, 2, 0],
+ [70754.72, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [71132.08, 2, 0],
+ [71226.4141, 3, 0],
+ [71320.76, 1, 0],
+ [71509.44, 0, 0],
+ [71698.11, 2, 0],
+ [71886.79, 3, 0],
+ [72075.47, 0, 0],
+ [72264.15, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72452.83, 2, 283.01886],
+ [72830.19, 0, 283.01886],
+ [73207.55, 3, 283.01886],
+ [73584.91, 0, 0],
+ [73773.5859, 1, 566.0377]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [74528.3047, 0, 0],
+ [74716.9844, 3, 0],
+ [74905.6641, 0, 0],
+ [75094.3359, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [75660.375, 0, 0],
+ [75754.72, 0, 0],
+ [75849.0547, 3, 0],
+ [76226.4141, 1, 0],
+ [76415.09, 0, 0],
+ [76603.77, 2, 0],
+ [76792.45, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [77169.81, 2, 0],
+ [77264.15, 3, 0],
+ [77358.49, 1, 0],
+ [77547.17, 0, 0],
+ [77735.85, 2, 0],
+ [77924.53, 3, 0],
+ [78113.21, 0, 0],
+ [78301.88, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78490.56, 2, 283.01886],
+ [78867.92, 0, 283.01886],
+ [79245.28, 3, 283.01886],
+ [79622.64, 0, 0],
+ [79811.32, 1, 566.0377]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80566.04, 0, 0],
+ [80754.72, 3, 0],
+ [80943.4, 0, 0],
+ [81132.08, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [81509.44, 1, 0],
+ [81698.11, 1, 0],
+ [81886.79, 3, 0],
+ [82075.47, 3, 0],
+ [82264.15, 0, 0],
+ [82452.83, 3, 0],
+ [82641.51, 2, 0],
+ [82830.19, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [83018.87, 1, 0],
+ [83207.55, 1, 0],
+ [83396.23, 3, 0],
+ [83584.91, 3, 0],
+ [83773.5859, 0, 0],
+ [83962.2656, 3, 0],
+ [84150.9453, 2, 0],
+ [84339.625, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [84528.3047, 2, 0],
+ [84716.9844, 3, 0],
+ [84905.6641, 2, 0],
+ [85094.3359, 0, 0],
+ [85283.0156, 2, 0],
+ [85471.6953, 3, 0],
+ [85660.375, 2, 0],
+ [85849.0547, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [86037.7344, 2, 0],
+ [86226.4141, 3, 0],
+ [86415.09, 2, 0],
+ [86603.77, 0, 0],
+ [86792.45, 2, 0],
+ [86981.13, 3, 0],
+ [87169.81, 2, 0],
+ [87358.49, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [87547.17, 3, 283.01886],
+ [87924.53, 0, 94.33962],
+ [88113.21, 1, 283.01886],
+ [88301.88, 4, 0],
+ [88490.56, 0, 0],
+ [88490.56, 7, 0],
+ [88679.24, 1, 0],
+ [88679.24, 7, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [89056.6, 5, 283.01886],
+ [89056.6, 3, 0],
+ [89433.96, 3, 0],
+ [89811.32, 1, 283.01886],
+ [89811.32, 7, 0],
+ [90000, 4, 0],
+ [90188.68, 6, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [90566.04, 5, 283.01886],
+ [90566.04, 0, 0],
+ [91132.08, 3, 0],
+ [91698.11, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [92075.47, 6, 566.0377],
+ [92075.47, 2, 566.0377],
+ [92830.19, 3, 566.0377],
+ [92830.19, 4, 566.0377]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [93773.5859, 3, 0],
+ [93867.92, 3, 0],
+ [93962.2656, 2, 0],
+ [94150.9453, 1, 0],
+ [94150.9453, 7, 0],
+ [94245.28, 7, 0],
+ [94339.625, 0, 283.01886],
+ [94339.625, 6, 0],
+ [94528.3047, 5, 0],
+ [94716.9844, 4, 283.01886],
+ [94905.6641, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [95283.0156, 3, 283.01886],
+ [95471.6953, 6, 283.01886],
+ [95849.0547, 2, 283.01886],
+ [95849.0547, 4, 283.01886],
+ [96226.4141, 0, 283.01886],
+ [96226.4141, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [96603.77, 3, 0],
+ [96792.45, 7, 94.33962],
+ [96981.13, 6, 94.33962],
+ [97169.81, 5, 94.33962],
+ [97169.81, 3, 94.33962],
+ [97358.49, 4, 283.01886],
+ [97358.49, 2, 94.33962],
+ [97547.17, 1, 94.33962],
+ [97735.85, 0, 283.01886],
+ [97735.85, 5, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [98113.21, 5, 283.01886],
+ [98113.21, 0, 283.01886],
+ [98490.56, 7, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [99811.32, 3, 0],
+ [99905.6641, 3, 0],
+ [100000, 2, 0],
+ [100188.68, 7, 0],
+ [100188.68, 1, 0],
+ [100283.016, 7, 0],
+ [100377.359, 6, 0],
+ [100377.359, 0, 283.01886],
+ [100566.039, 5, 0],
+ [100754.719, 4, 283.01886],
+ [100943.4, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [101320.758, 3, 283.01886],
+ [101509.438, 6, 283.01886],
+ [101886.789, 2, 283.01886],
+ [101886.789, 4, 283.01886],
+ [102264.148, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [102830.188, 3, 94.33962],
+ [103018.867, 2, 94.33962],
+ [103207.547, 7, 94.33962],
+ [103207.547, 1, 94.33962],
+ [103396.227, 0, 283.01886],
+ [103396.227, 6, 94.33962],
+ [103584.906, 5, 94.33962],
+ [103773.586, 1, 283.01886],
+ [103773.586, 4, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [104150.945, 0, 283.01886],
+ [104150.945, 5, 283.01886],
+ [104528.305, 7, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [105849.055, 2, 0],
+ [106226.414, 2, 0],
+ [106320.758, 3, 0],
+ [106415.094, 2, 0],
+ [106603.773, 0, 0],
+ [106792.453, 2, 0],
+ [106981.133, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [107169.813, 1, 0],
+ [107358.492, 0, 0],
+ [107547.172, 3, 283.01886],
+ [107924.531, 2, 0],
+ [108113.211, 3, 0],
+ [108301.883, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [108867.922, 2, 0],
+ [109245.281, 2, 0],
+ [109339.625, 3, 0],
+ [109433.961, 2, 0],
+ [109622.641, 0, 0],
+ [109811.32, 2, 0],
+ [110000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [110188.68, 1, 0],
+ [110377.359, 0, 0],
+ [110566.039, 3, 283.01886],
+ [110943.4, 2, 0],
+ [111132.078, 3, 0],
+ [111320.758, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [111698.109, 3, 0],
+ [111886.789, 3, 0],
+ [112075.469, 1, 283.01886],
+ [112452.828, 0, 0],
+ [112830.188, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [113207.547, 4, 0],
+ [113207.547, 3, 0],
+ [113396.227, 3, 0],
+ [113584.906, 1, 283.01886],
+ [113962.266, 0, 0],
+ [114150.945, 0, 0],
+ [114339.625, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [114716.984, 0, 0],
+ [114716.984, 4, 0],
+ [114905.664, 1, 0],
+ [114905.664, 5, 0],
+ [115283.016, 3, 0],
+ [115283.016, 7, 0],
+ [115660.375, 2, 0],
+ [115660.375, 6, 0],
+ [116037.734, 5, 754.717],
+ [116037.734, 1, 754.717]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [117924.531, 0, 0],
+ [118301.883, 3, 0],
+ [118490.563, 1, 0],
+ [118679.242, 0, 0],
+ [118867.922, 2, 0],
+ [119056.6, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [119245.281, 2, 283.01886],
+ [119622.641, 3, 283.01886],
+ [120000, 0, 283.01886],
+ [120377.359, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [120754.719, 6, 754.717],
+ [120943.4, 0, 0],
+ [121320.758, 3, 0],
+ [121509.438, 1, 0],
+ [121698.109, 0, 0],
+ [121886.789, 2, 0],
+ [122075.469, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [122264.148, 2, 283.01886],
+ [122641.508, 3, 283.01886],
+ [123018.867, 0, 283.01886],
+ [123396.227, 3, 754.717]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [123773.586, 1, 94.33962],
+ [124150.945, 3, 0],
+ [124339.625, 3, 0],
+ [124528.305, 2, 283.01886],
+ [124905.664, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [125283.016, 5, 283.01886],
+ [125283.016, 2, 0],
+ [125471.695, 3, 0],
+ [125660.375, 1, 283.01886],
+ [126037.734, 3, 0],
+ [126226.414, 0, 0],
+ [126415.094, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [126792.453, 0, 0],
+ [126792.453, 4, 0],
+ [126981.133, 1, 0],
+ [126981.133, 5, 0],
+ [127358.492, 3, 0],
+ [127358.492, 7, 0],
+ [127735.852, 2, 0],
+ [127735.852, 6, 0],
+ [128113.211, 1, 377.3585],
+ [128113.211, 5, 377.3585]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [129056.6, 0, 0],
+ [129245.281, 3, 0],
+ [129433.961, 0, 0],
+ [129622.641, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[129811.32, 2, 0]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 159,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "monster-christmas",
+ "song": "Winter Horrorland",
+ "stage": "mallEvil",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 159,
+ "speed": 1.3
+ }
+}
diff --git a/assets/preload/data/songs/winter-horrorland/winter-horrorland.json b/assets/preload/data/songs/winter-horrorland/winter-horrorland.json
new file mode 100644
index 0000000000..fc3bcdddf6
--- /dev/null
+++ b/assets/preload/data/songs/winter-horrorland/winter-horrorland.json
@@ -0,0 +1,856 @@
+{
+ "song": {
+ "player1": "bf-christmas",
+ "gfVersion": "gf-christmas",
+ "notes": [
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [9433.962, 0, 283.01886],
+ [9811.32, 2, 283.01886],
+ [10188.68, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [10566.0381, 0, 660.3774],
+ [11320.7549, 2, 660.3774]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [12452.83, 0, 283.01886],
+ [12830.1885, 2, 283.01886],
+ [13207.5469, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [13584.9053, 1, 0],
+ [14339.623, 3, 283.01886],
+ [14716.9814, 2, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [15094.34, 5, 754.717],
+ [15471.6982, 0, 283.01886],
+ [15849.0566, 2, 283.01886],
+ [16226.415, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [16603.7734, 0, 660.3774],
+ [17358.49, 2, 660.3774]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [18490.5664, 0, 283.01886],
+ [18867.9238, 2, 283.01886],
+ [19245.2832, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [19622.64, 1, 0],
+ [20377.36, 3, 283.01886],
+ [20754.7168, 2, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [21132.0762, 1, 283.01886],
+ [21132.0762, 5, 754.717],
+ [21509.4336, 3, 283.01886],
+ [21886.793, 2, 283.01886],
+ [22264.15, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [22641.51, 1, 471.69812],
+ [23207.5469, 0, 0],
+ [23396.2266, 0, 0],
+ [23773.584, 0, 0],
+ [23962.2637, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [24150.9434, 3, 283.01886],
+ [24528.3027, 2, 0],
+ [24905.66, 2, 0],
+ [25283.02, 2, 0],
+ [25471.6973, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [25660.377, 1, 471.69812],
+ [26226.416, 2, 0],
+ [26415.0938, 3, 0],
+ [26603.7734, 2, 0],
+ [26792.4531, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [27169.81, 1, 283.01886],
+ [27547.17, 3, 283.01886],
+ [27924.5273, 2, 283.01886],
+ [28301.8867, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [28679.2461, 1, 471.69812],
+ [29245.2832, 0, 0],
+ [29433.9629, 0, 0],
+ [29811.32, 0, 0],
+ [30000, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [30188.68, 3, 283.01886],
+ [30566.0371, 2, 0],
+ [30943.3965, 2, 0],
+ [31320.7539, 2, 0],
+ [31509.4336, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [31698.1133, 1, 471.69812],
+ [32264.15, 2, 0],
+ [32452.83, 3, 0],
+ [32641.51, 2, 0],
+ [32830.1875, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [33396.2266, 3, 0],
+ [33584.9063, 2, 0],
+ [33962.2656, 0, 283.01886],
+ [34528.3, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [35094.34, 2, 283.01886],
+ [35471.7, 0, 283.01886],
+ [35849.0547, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [36603.7734, 2, 0],
+ [36981.1328, 0, 283.01886],
+ [37358.4922, 1, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [[37735.8477, 0, 283.01886]],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [39433.96, 3, 0],
+ [39622.64, 2, 0],
+ [40000, 0, 283.01886],
+ [40566.04, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [41132.0742, 2, 283.01886],
+ [41509.4336, 0, 283.01886],
+ [41886.793, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [42641.5078, 2, 0],
+ [43018.8672, 0, 283.01886],
+ [43396.2266, 1, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[43773.5859, 0, 283.01886]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [45283.02, 0, 283.01886],
+ [45660.38, 1, 283.01886],
+ [46037.7344, 2, 0],
+ [46415.0938, 2, 0],
+ [46603.7734, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [46792.4531, 5, 283.01886],
+ [47169.8125, 0, 0],
+ [47547.168, 3, 0],
+ [47924.5273, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [48301.8867, 2, 283.01886],
+ [48301.8867, 6, 849.0566],
+ [48679.2461, 0, 188.679245],
+ [49056.6055, 3, 0],
+ [49245.28, 0, 0],
+ [49433.96, 3, 0],
+ [49622.64, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [49937.1055, 2, 0],
+ [50188.68, 2, 0],
+ [50440.25, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [51320.7539, 0, 283.01886],
+ [51698.1133, 1, 283.01886],
+ [52075.4727, 2, 0],
+ [52452.832, 2, 0],
+ [52641.5078, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [52830.1875, 5, 283.01886],
+ [53207.5469, 0, 0],
+ [53584.9063, 3, 0],
+ [53962.2656, 1, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [54339.62, 6, 1132.07544],
+ [54339.62, 2, 188.679245],
+ [54716.98, 0, 188.679245],
+ [55094.34, 3, 0],
+ [55283.02, 0, 0],
+ [55471.7, 3, 0],
+ [55660.38, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [56037.7344, 2, 0],
+ [56415.0938, 2, 0],
+ [56603.7734, 2, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [57547.168, 2, 0],
+ [57924.5273, 2, 0],
+ [58113.207, 2, 0],
+ [58490.5664, 2, 0],
+ [58679.2461, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [58867.9258, 1, 0],
+ [59245.28, 3, 283.01886],
+ [59622.64, 2, 0],
+ [60000, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [60566.04, 2, 0],
+ [60943.3945, 2, 0],
+ [61132.0742, 2, 0],
+ [61509.4336, 2, 0],
+ [61698.1133, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [61886.793, 1, 0],
+ [62264.1523, 3, 283.01886],
+ [62641.5078, 2, 0],
+ [63018.8672, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [63396.2266, 3, 0],
+ [63773.5859, 1, 283.01886],
+ [64150.94, 0, 0],
+ [64528.3, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [64905.66, 4, 0],
+ [64905.66, 3, 0],
+ [65283.02, 1, 283.01886],
+ [65660.375, 0, 0],
+ [66037.7344, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [66415.09, 4, 0],
+ [66415.09, 0, 0],
+ [66981.13, 7, 0],
+ [66981.13, 3, 0],
+ [67358.49, 6, 0],
+ [67358.49, 2, 0],
+ [67735.85, 5, 754.717],
+ [67735.85, 1, 754.717]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [69622.64, 0, 0],
+ [69811.32, 3, 0],
+ [70188.68, 1, 0],
+ [70566.04, 2, 0],
+ [70754.72, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [71132.08, 2, 0],
+ [71320.76, 1, 0],
+ [71698.11, 2, 0],
+ [72075.47, 0, 0],
+ [72264.15, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [72452.83, 2, 283.01886],
+ [72830.19, 0, 283.01886],
+ [73207.55, 3, 283.01886],
+ [73584.91, 0, 0],
+ [73773.5859, 1, 566.0377]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [74528.3047, 0, 0],
+ [74716.9844, 3, 0],
+ [74905.6641, 0, 0],
+ [75094.3359, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [75660.375, 0, 0],
+ [75849.0547, 3, 0],
+ [76226.4141, 1, 0],
+ [76603.77, 2, 0],
+ [76792.45, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [77169.81, 2, 0],
+ [77358.49, 1, 0],
+ [77735.85, 2, 0],
+ [78113.21, 0, 0],
+ [78301.88, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [78490.56, 2, 283.01886],
+ [78867.92, 0, 283.01886],
+ [79245.28, 3, 283.01886],
+ [79622.64, 0, 0],
+ [79811.32, 1, 566.0377]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [80566.04, 0, 0],
+ [80754.72, 3, 0],
+ [80943.4, 0, 0],
+ [81132.08, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [81509.44, 1, 0],
+ [81886.79, 3, 0],
+ [82264.15, 0, 0],
+ [82641.51, 2, 0],
+ [82830.19, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [83018.87, 1, 0],
+ [83396.23, 3, 0],
+ [83773.5859, 0, 0],
+ [84150.9453, 2, 0],
+ [84339.625, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [84528.3047, 2, 0],
+ [84905.6641, 2, 0],
+ [85094.3359, 0, 0],
+ [85283.0156, 2, 0],
+ [85660.375, 2, 0],
+ [85849.0547, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [86037.7344, 2, 0],
+ [86415.09, 2, 0],
+ [86603.77, 0, 0],
+ [86792.45, 2, 0],
+ [87169.81, 2, 0],
+ [87358.49, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [87547.17, 3, 283.01886],
+ [87924.53, 0, 94.33962],
+ [88113.21, 1, 283.01886],
+ [88301.88, 4, 0],
+ [88679.24, 1, 0],
+ [88679.24, 7, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [89056.6, 5, 283.01886],
+ [89056.6, 3, 0],
+ [89433.96, 3, 0],
+ [89811.32, 1, 283.01886],
+ [89811.32, 7, 0],
+ [90188.68, 6, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [90566.04, 5, 283.01886],
+ [90566.04, 0, 0],
+ [91132.08, 3, 0],
+ [91698.11, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [92075.47, 2, 566.0377],
+ [92075.47, 6, 566.0377],
+ [92830.19, 3, 566.0377],
+ [92830.19, 4, 566.0377]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [93773.5859, 3, 0],
+ [93962.2656, 2, 0],
+ [94150.9453, 7, 0],
+ [94339.625, 6, 0],
+ [94339.625, 0, 283.01886],
+ [94716.9844, 4, 283.01886],
+ [94905.6641, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [95283.0156, 3, 283.01886],
+ [95471.6953, 6, 283.01886],
+ [95849.0547, 2, 283.01886],
+ [95849.0547, 4, 283.01886],
+ [96226.4141, 0, 283.01886],
+ [96226.4141, 7, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [96603.77, 3, 0],
+ [96981.13, 6, 0],
+ [97358.49, 2, 0],
+ [97358.49, 4, 283.01886],
+ [97735.85, 0, 283.01886],
+ [97735.85, 5, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [98113.21, 5, 283.01886],
+ [98113.21, 0, 283.01886],
+ [98490.56, 7, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [99811.32, 3, 0],
+ [100000, 2, 0],
+ [100188.68, 7, 0],
+ [100377.359, 0, 283.01886],
+ [100377.359, 6, 0],
+ [100754.719, 4, 283.01886],
+ [100943.4, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [101320.758, 3, 283.01886],
+ [101509.438, 6, 283.01886],
+ [101886.789, 2, 283.01886],
+ [101886.789, 4, 283.01886],
+ [102264.148, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [102830.188, 3, 94.33962],
+ [103018.867, 2, 94.33962],
+ [103207.547, 7, 94.33962],
+ [103396.227, 0, 283.01886],
+ [103396.227, 6, 94.33962],
+ [103773.586, 1, 283.01886],
+ [103773.586, 4, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [104150.945, 0, 283.01886],
+ [104150.945, 5, 283.01886],
+ [104528.305, 7, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [105849.055, 2, 0],
+ [106226.414, 2, 0],
+ [106415.094, 2, 0],
+ [106792.453, 2, 0],
+ [106981.133, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [107169.813, 1, 0],
+ [107547.172, 3, 283.01886],
+ [107924.531, 2, 0],
+ [108301.883, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [108867.922, 2, 0],
+ [109245.281, 2, 0],
+ [109433.961, 2, 0],
+ [109811.32, 2, 0],
+ [110000, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [110188.68, 1, 0],
+ [110566.039, 3, 283.01886],
+ [110943.4, 2, 0],
+ [111320.758, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [111698.109, 3, 0],
+ [112075.469, 1, 283.01886],
+ [112452.828, 0, 0],
+ [112830.188, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [113207.547, 3, 0],
+ [113207.547, 4, 0],
+ [113584.906, 1, 283.01886],
+ [113962.266, 0, 0],
+ [114339.625, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [114716.984, 4, 0],
+ [114716.984, 0, 0],
+ [115283.016, 7, 0],
+ [115283.016, 3, 0],
+ [115660.375, 6, 0],
+ [115660.375, 2, 0],
+ [116037.734, 5, 754.717],
+ [116037.734, 1, 754.717]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "sectionNotes": [
+ [117924.531, 0, 0],
+ [118490.563, 1, 0],
+ [118867.922, 2, 0],
+ [119056.6, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [119245.281, 2, 283.01886],
+ [119622.641, 3, 283.01886],
+ [120000, 0, 283.01886],
+ [120377.359, 3, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [120754.719, 6, 754.717],
+ [120943.4, 0, 0],
+ [121509.438, 1, 0],
+ [121886.789, 2, 0],
+ [122075.469, 3, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [122264.148, 2, 283.01886],
+ [122641.508, 3, 283.01886],
+ [123018.867, 0, 283.01886],
+ [123396.227, 3, 754.717]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [123773.586, 1, 94.33962],
+ [124150.945, 3, 0],
+ [124528.305, 2, 283.01886],
+ [124905.664, 0, 283.01886]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [125283.016, 5, 283.01886],
+ [125283.016, 2, 0],
+ [125660.375, 1, 283.01886],
+ [126037.734, 3, 0],
+ [126226.414, 0, 0],
+ [126415.094, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [
+ [126792.453, 0, 0],
+ [126792.453, 4, 0],
+ [127358.492, 3, 0],
+ [127358.492, 7, 0],
+ [127735.852, 2, 0],
+ [127735.852, 6, 0],
+ [128113.211, 1, 377.3585],
+ [128113.211, 5, 377.3585]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": false
+ },
+ {
+ "sectionNotes": [
+ [129056.6, 0, 0],
+ [129245.281, 3, 0],
+ [129433.961, 0, 0]
+ ],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ {
+ "sectionNotes": [[129811.32, 2, 0]],
+ "lengthInSteps": 16,
+ "mustHitSection": true
+ },
+ { "sectionNotes": [], "lengthInSteps": 16, "mustHitSection": true },
+ {
+ "lengthInSteps": 16,
+ "altAnim": false,
+ "typeOfSection": 0,
+ "sectionNotes": [],
+ "bpm": 159,
+ "changeBPM": false,
+ "mustHitSection": true
+ }
+ ],
+ "player2": "monster-christmas",
+ "song": "Winter Horrorland",
+ "stage": "mallEvil",
+ "needsVoices": true,
+ "validScore": true,
+ "bpm": 159,
+ "speed": 1.1
+ }
+}
diff --git a/assets/preload/data/south/0.offset b/assets/preload/data/south/0.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/south/0.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/south/south-easy.json b/assets/preload/data/south/south-easy.json
deleted file mode 100644
index ce4043e1e3..0000000000
--- a/assets/preload/data/south/south-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11636.3633,3,0],[12000,3,0],[12363.6367,0,0],[12727.2725,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[13090.9092,0,0],[13454.5449,1,0],[13818.1816,3,0],[14000,3,0],[14181.8184,3,181.818176]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[14545.4541,3,0],[14909.0908,3,0],[15272.7275,3,0],[15636.3633,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[16000,0,0],[16363.6357,0,0],[16727.2734,2,0],[17090.9082,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[17454.5449,3,0],[17818.1816,3,0],[18181.8184,0,0],[18545.4551,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[18909.09,0,0],[19272.7266,1,0],[19636.3633,3,0],[19818.1816,3,0],[20000,3,181.818176]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[20363.6367,3,0],[20727.2734,3,0],[21090.9082,3,0],[21454.5449,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[21818.1816,0,0],[22181.8184,0,0],[22545.4551,2,0],[22909.09,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[23272.7266,2,0],[23636.3633,0,0],[23818.1816,0,0],[24000,2,0],[24363.6367,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[24727.2734,2,0],[25090.9082,2,0],[25454.5449,2,0],[25818.1816,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26181.8184,0,0],[26545.4551,0,0],[26727.2734,0,0],[26909.09,3,0],[27272.7266,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[27636.3633,2,0],[28000,2,0],[28363.6367,2,0],[28545.4551,3,0],[28727.2715,0,0],[28909.09,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[29090.9082,2,0],[29454.5449,0,0],[29636.3633,0,0],[29818.1816,2,0],[30181.8184,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30545.4551,2,0],[30909.09,2,0],[31272.7266,2,0],[31636.3633,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32000,0,0],[32363.6367,0,0],[32545.4551,0,0],[32727.2715,3,0],[33090.91,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33454.5469,2,0],[33818.18,2,0],[34181.8164,2,0],[34363.6367,3,0],[34545.4531,0,0],[34727.2734,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[34909.09,2,0],[35090.91,3,0],[35272.7266,0,0],[35454.5469,2,0],[35636.3633,3,0],[35818.18,0,0],[36000,2,0],[36181.8164,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[36363.6367,0,0],[36545.4531,2,0],[36727.2734,3,0],[36909.09,0,0],[37090.91,0,0],[37454.5469,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[37818.18,2,0],[38000,3,0],[38181.8164,0,0],[38363.6367,2,0],[38545.4531,3,0],[38727.2734,0,0],[38909.09,2,0],[39090.91,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[39272.7266,0,0],[39636.3633,3,0],[39818.18,0,0],[40000,0,0],[40363.6367,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[40727.2734,2,0],[40909.09,3,0],[41090.91,0,0],[41272.7266,2,0],[41454.5469,3,0],[41636.3633,0,0],[41818.18,2,0],[42000,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[42181.8164,0,0],[42363.6367,2,0],[42545.4531,3,0],[42727.2734,0,0],[42909.09,0,0],[43272.7266,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[43636.3633,2,0],[43818.18,3,0],[44000,0,0],[44181.8164,2,0],[44363.6367,3,0],[44545.4531,0,0],[44727.2734,2,0],[44909.09,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[45090.91,0,0],[45454.5469,3,0],[45636.3633,0,0],[45818.18,0,0],[46181.8164,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[46545.4531,0,0],[46909.09,1,0],[47090.91,0,0],[47454.5469,1,0],[47636.3633,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48000,0,0],[48181.8164,2,0],[48363.6367,3,0],[48545.4531,0,0],[48727.2734,3,0],[48909.09,2,0],[49090.91,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49454.5469,0,0],[49818.18,3,0],[50000,0,0],[50363.6367,3,0],[50545.4531,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[50909.09,1,0],[51272.7266,0,0],[51454.5469,3,0],[51636.3633,2,0],[52000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[52363.6367,0,0],[52727.2734,1,0],[52909.09,0,0],[53272.7266,1,0],[53454.5469,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[53818.18,0,0],[54000,2,0],[54181.8164,3,0],[54363.6367,0,0],[54545.4531,3,0],[54727.2734,2,0],[54909.09,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[55272.7266,0,0],[55636.3633,3,0],[55818.18,0,0],[56181.8164,3,0],[56363.6367,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56727.2734,1,0],[57090.91,0,0],[57272.7266,3,0],[57454.543,4,0],[57454.543,2,0],[57636.3633,7,0],[57818.18,5,0],[57818.18,0,0],[58000,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[58181.8164,3,0],[58545.4531,3,0],[58909.09,0,0],[59272.7266,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[59636.3633,0,0],[60000,1,0],[60363.6367,3,0],[60545.4531,3,0],[60727.2734,3,181.818176]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61090.91,3,0],[61454.543,3,0],[61818.18,2,0],[62181.8164,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[62545.4531,0,0],[62909.09,0,0],[63272.7266,2,0],[63272.7266,4,0],[63454.543,7,0],[63636.3633,0,0],[63636.3633,5,0],[63818.18,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[64000,3,0],[64363.6367,3,0],[64727.2734,0,0],[65090.91,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65454.543,0,0],[65818.18,1,0],[66181.82,3,0],[66363.63,3,0],[66545.45,3,181.818176]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[66909.09,3,0],[67272.73,3,0],[67636.36,2,0],[68000,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[68363.63,0,0],[68727.27,0,0],[69090.91,2,0],[69454.55,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[69818.18,2,0],[70181.82,0,0],[70363.63,0,0],[70545.45,2,0],[70909.09,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[71272.73,2,0],[71636.36,2,0],[72000,2,0],[72363.63,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72727.27,0,0],[73090.91,0,0],[73272.73,0,0],[73454.55,3,0],[73818.18,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[74181.82,2,0],[74545.45,2,0],[74909.09,2,0],[75090.91,3,0],[75272.73,0,0],[75454.55,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[75636.36,2,0],[76000,0,0],[76181.82,0,0],[76363.63,2,0],[76727.27,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[77090.91,2,0],[77454.55,2,0],[77818.18,2,0],[78181.82,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78545.45,0,0],[78909.09,0,0],[79090.91,0,0],[79272.73,3,0],[79636.36,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80000,2,0],[80363.63,2,0],[80727.27,2,0],[80909.09,3,0],[81090.91,0,0],[81272.73,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":165,"changeBPM":false,"mustHitSection":true}],"player2":"spooky","song":"South","stage":"halloween","needsVoices":true,"validScore":true,"bpm":165,"speed":1.1}}
\ No newline at end of file
diff --git a/assets/preload/data/south/south-hard.json b/assets/preload/data/south/south-hard.json
deleted file mode 100644
index adfbdd3b21..0000000000
--- a/assets/preload/data/south/south-hard.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11636.3633,3,0],[12000,3,0],[12363.6367,0,0],[12545.4541,3,0],[12727.2725,2,0],[12909.0908,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[13090.9092,0,0],[13454.5449,1,0],[13818.1816,3,0],[14000,3,0],[14181.8184,3,181.818176]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[14545.4541,3,0],[14909.0908,3,0],[15272.7275,3,0],[15454.5449,2,0],[15636.3633,0,0],[15818.1816,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[16000,0,0],[16363.6357,0,0],[16727.2734,2,0],[17090.9082,0,0],[17272.7266,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[17454.5449,3,0],[17818.1816,3,0],[18181.8184,0,0],[18363.6367,3,0],[18545.4551,2,0],[18727.2734,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[18909.09,0,0],[19272.7266,1,0],[19636.3633,3,0],[19818.1816,3,0],[20000,3,181.818176]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[20363.6367,3,0],[20727.2734,3,0],[21090.9082,3,0],[21272.7266,2,0],[21454.5449,0,0],[21636.3633,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[21818.1816,0,0],[22181.8184,0,0],[22545.4551,2,0],[22909.09,0,0],[23090.9082,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[23272.7266,2,0],[23454.5449,1,0],[23636.3633,0,0],[23818.1816,0,0],[23909.09,3,0],[24000,2,0],[24181.8184,0,0],[24363.6367,2,0],[24545.4551,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[24727.2734,2,0],[25090.9082,2,0],[25454.5449,2,0],[25636.3633,1,0],[25818.1816,0,0],[26000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26181.8184,0,0],[26545.4551,0,0],[26727.2734,0,0],[26818.1816,2,0],[26909.09,3,0],[27090.9082,0,0],[27272.7266,1,0],[27454.5449,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[27636.3633,2,0],[28000,2,0],[28363.6367,2,0],[28545.4551,3,0],[28727.2715,0,0],[28909.09,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[29090.9082,2,0],[29272.7266,1,0],[29454.5449,0,0],[29636.3633,0,0],[29727.2715,3,0],[29818.1816,2,0],[30000,0,0],[30181.8184,2,0],[30363.6367,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30545.4551,2,0],[30909.09,2,0],[31272.7266,2,0],[31454.5449,1,0],[31636.3633,0,0],[31818.1816,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32000,0,0],[32363.6367,0,0],[32545.4551,0,0],[32636.3633,2,0],[32727.2715,3,0],[32909.09,0,0],[33090.91,1,0],[33272.7266,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33454.5469,2,0],[33818.18,2,0],[34181.8164,2,0],[34363.6367,3,0],[34545.4531,0,0],[34727.2734,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[34909.09,2,0],[35090.91,3,0],[35272.7266,0,0],[35454.5469,2,0],[35636.3633,3,0],[35818.18,0,0],[36000,2,0],[36181.8164,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[36363.6367,0,0],[36545.4531,2,0],[36727.2734,3,0],[36909.09,0,0],[37090.91,0,0],[37272.7266,3,0],[37454.5469,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[37818.18,2,0],[38000,3,0],[38181.8164,0,0],[38363.6367,2,0],[38545.4531,3,0],[38727.2734,0,0],[38909.09,2,0],[39090.91,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[39272.7266,0,0],[39454.5469,1,0],[39545.4531,1,0],[39636.3633,3,0],[39818.18,0,0],[40000,3,0],[40181.8164,0,0],[40363.6367,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[40727.2734,2,0],[40909.09,3,0],[41090.91,0,0],[41272.7266,2,0],[41454.5469,3,0],[41636.3633,0,0],[41818.18,2,0],[42000,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[42181.8164,0,0],[42363.6367,2,0],[42545.4531,3,0],[42727.2734,0,0],[42909.09,0,0],[43090.91,3,0],[43272.7266,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[43636.3633,2,0],[43818.18,3,0],[44000,0,0],[44181.8164,2,0],[44363.6367,3,0],[44545.4531,0,0],[44727.2734,2,0],[44909.09,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[45090.91,0,0],[45272.7266,1,0],[45363.6367,1,0],[45454.5469,3,0],[45636.3633,0,0],[45818.18,3,0],[46000,0,0],[46181.8164,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[46545.4531,0,0],[46818.18,3,0],[46909.09,1,0],[47090.91,0,0],[47272.7266,3,0],[47454.5469,1,0],[47636.3633,2,0],[47818.18,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48000,0,0],[48181.8164,2,0],[48363.6367,3,0],[48545.4531,0,0],[48727.2734,3,0],[48909.09,2,0],[49090.91,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49454.5469,0,0],[49545.4531,3,0],[49636.3633,2,0],[49818.18,3,0],[50000,0,0],[50181.8164,2,0],[50363.6367,3,0],[50545.4531,0,0],[50636.3633,3,0],[50727.2734,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[50909.09,1,0],[51090.91,1,0],[51181.8164,1,0],[51272.7266,0,0],[51454.5469,3,0],[51636.3633,2,0],[51818.18,3,0],[52000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[52363.6367,0,0],[52636.3633,3,0],[52727.2734,1,0],[52909.09,0,0],[53090.91,3,0],[53272.7266,1,0],[53454.5469,2,0],[53636.3633,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[53818.18,0,0],[54000,2,0],[54181.8164,3,0],[54363.6367,0,0],[54545.4531,3,0],[54727.2734,2,0],[54909.09,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[55272.7266,0,0],[55363.6367,3,0],[55454.5469,2,0],[55636.3633,3,0],[55818.18,0,0],[56000,2,0],[56181.8164,3,0],[56363.6367,0,0],[56454.543,3,0],[56545.4531,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56727.2734,1,0],[56909.09,1,0],[57000,1,0],[57090.91,0,0],[57272.7266,3,0],[57454.543,4,0],[57454.543,2,0],[57636.3633,3,0],[57636.3633,7,0],[57818.18,0,0],[57818.18,5,0],[58000,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[58181.8164,3,0],[58545.4531,3,0],[58727.2734,1,0],[58909.09,2,0],[59090.91,0,0],[59272.7266,1,0],[59454.543,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[59636.3633,0,272.727264],[60000,2,0],[60363.6367,2,0],[60545.4531,2,0],[60727.2734,2,181.818176]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61090.91,2,0],[61454.543,2,0],[61636.3633,3,0],[61818.18,1,0],[62000,0,0],[62181.8164,3,0],[62363.6367,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[62545.4531,0,0],[62909.09,0,0],[63272.7266,2,0],[63272.7266,4,0],[63454.543,7,0],[63636.3633,0,0],[63636.3633,5,0],[63818.18,3,0],[63818.18,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[64000,3,0],[64363.6367,3,0],[64545.4531,1,0],[64727.2734,2,0],[64909.09,0,0],[65090.91,1,0],[65272.7266,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65454.543,0,272.727264],[65818.18,2,0],[66181.82,2,0],[66363.63,2,0],[66545.45,2,181.818176]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[66909.09,2,0],[67272.73,2,0],[67454.55,3,0],[67636.36,1,0],[67818.18,0,0],[68000,3,0],[68181.82,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[68363.63,0,0],[68727.27,0,0],[69090.91,2,0],[69454.55,0,0],[69636.36,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[69818.18,2,0],[70000,3,0],[70181.82,0,0],[70363.63,3,0],[70454.55,2,0],[70545.45,0,0],[70727.27,3,0],[70909.09,2,0],[71090.91,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[71272.73,2,0],[71636.36,2,0],[71818.18,0,0],[72000,2,0],[72181.82,3,0],[72363.63,0,0],[72545.45,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72727.27,0,0],[73090.91,0,0],[73272.73,0,0],[73363.63,3,0],[73454.55,2,0],[73636.36,3,0],[73818.18,2,0],[74000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[74181.82,2,0],[74363.63,3,0],[74545.45,2,0],[74727.27,0,0],[74909.09,1,0],[75090.91,3,0],[75272.73,0,0],[75454.55,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[75636.36,2,0],[75818.18,3,0],[76000,0,0],[76181.82,3,0],[76272.73,2,0],[76363.63,0,0],[76545.45,3,0],[76727.27,2,0],[76909.09,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[77090.91,2,0],[77454.55,2,0],[77636.36,0,0],[77818.18,2,0],[78000,3,0],[78181.82,0,0],[78363.63,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78545.45,0,0],[78909.09,0,0],[79090.91,0,0],[79181.82,3,0],[79272.73,2,0],[79454.55,3,0],[79636.36,2,0],[79818.18,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80000,2,0],[80181.82,3,0],[80363.63,2,0],[80545.45,0,0],[80727.27,1,0],[80909.09,3,0],[81090.91,0,0],[81272.73,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":165,"changeBPM":false,"mustHitSection":true}],"player2":"spooky","song":"South","stage":"halloween","needsVoices":true,"validScore":true,"bpm":165,"speed":2.2}}
\ No newline at end of file
diff --git a/assets/preload/data/south/south.json b/assets/preload/data/south/south.json
deleted file mode 100644
index e09a46e8c5..0000000000
--- a/assets/preload/data/south/south.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11636.3633,3,0],[12000,3,0],[12363.6367,0,0],[12545.4541,3,0],[12727.2725,2,0],[12909.0908,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[13090.9092,0,0],[13454.5449,1,0],[13818.1816,3,0],[14000,3,0],[14181.8184,3,181.818176]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[14545.4541,3,0],[14909.0908,3,0],[15272.7275,3,0],[15454.5449,2,0],[15636.3633,0,0],[15818.1816,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[16000,0,0],[16363.6357,0,0],[16727.2734,2,0],[17090.9082,0,0],[17272.7266,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[17454.5449,3,0],[17818.1816,3,0],[18181.8184,0,0],[18363.6367,3,0],[18545.4551,2,0],[18727.2734,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[18909.09,0,0],[19272.7266,1,0],[19636.3633,3,0],[19818.1816,3,0],[20000,3,181.818176]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[20363.6367,3,0],[20727.2734,3,0],[21090.9082,3,0],[21272.7266,2,0],[21454.5449,0,0],[21636.3633,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[21818.1816,0,0],[22181.8184,0,0],[22545.4551,2,0],[22909.09,0,0],[23090.9082,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[23272.7266,2,0],[23454.5449,1,0],[23636.3633,0,0],[23818.1816,0,0],[23909.09,3,0],[24000,2,0],[24181.8184,0,0],[24363.6367,2,0],[24545.4551,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[24727.2734,2,0],[25090.9082,2,0],[25454.5449,2,0],[25636.3633,1,0],[25818.1816,0,0],[26000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[26181.8184,0,0],[26545.4551,0,0],[26727.2734,0,0],[26818.1816,2,0],[26909.09,3,0],[27090.9082,0,0],[27272.7266,1,0],[27454.5449,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[27636.3633,2,0],[28000,2,0],[28363.6367,2,0],[28545.4551,3,0],[28727.2715,0,0],[28909.09,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[29090.9082,2,0],[29272.7266,1,0],[29454.5449,0,0],[29636.3633,0,0],[29727.2715,3,0],[29818.1816,2,0],[30000,0,0],[30181.8184,2,0],[30363.6367,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30545.4551,2,0],[30909.09,2,0],[31272.7266,2,0],[31454.5449,1,0],[31636.3633,0,0],[31818.1816,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[32000,0,0],[32363.6367,0,0],[32545.4551,0,0],[32636.3633,2,0],[32727.2715,3,0],[32909.09,0,0],[33090.91,1,0],[33272.7266,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33454.5469,2,0],[33818.18,2,0],[34181.8164,2,0],[34363.6367,3,0],[34545.4531,0,0],[34727.2734,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[34909.09,2,0],[35090.91,3,0],[35272.7266,0,0],[35454.5469,2,0],[35636.3633,3,0],[35818.18,0,0],[36000,2,0],[36181.8164,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[36363.6367,0,0],[36545.4531,2,0],[36727.2734,3,0],[36909.09,0,0],[37090.91,0,0],[37272.7266,3,0],[37454.5469,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[37818.18,2,0],[38000,3,0],[38181.8164,0,0],[38363.6367,2,0],[38545.4531,3,0],[38727.2734,0,0],[38909.09,2,0],[39090.91,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[39272.7266,0,0],[39454.5469,1,0],[39636.3633,3,0],[39818.18,0,0],[40000,3,0],[40181.8164,0,0],[40363.6367,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[40727.2734,2,0],[40909.09,3,0],[41090.91,0,0],[41272.7266,2,0],[41454.5469,3,0],[41636.3633,0,0],[41818.18,2,0],[42000,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[42181.8164,0,0],[42363.6367,2,0],[42545.4531,3,0],[42727.2734,0,0],[42909.09,0,0],[43090.91,3,0],[43272.7266,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[43636.3633,2,0],[43818.18,3,0],[44000,0,0],[44181.8164,2,0],[44363.6367,3,0],[44545.4531,0,0],[44727.2734,2,0],[44909.09,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[45090.91,0,0],[45272.7266,1,0],[45454.5469,3,0],[45636.3633,0,0],[45818.18,3,0],[46000,0,0],[46181.8164,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[46545.4531,0,0],[46818.18,3,0],[46909.09,1,0],[47090.91,0,0],[47272.7266,3,0],[47454.5469,1,0],[47636.3633,2,0],[47818.18,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48000,0,0],[48181.8164,2,0],[48363.6367,3,0],[48545.4531,0,0],[48727.2734,3,0],[48909.09,2,0],[49090.91,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49454.5469,0,0],[49545.4531,3,0],[49636.3633,2,0],[49818.18,3,0],[50000,0,0],[50181.8164,2,0],[50363.6367,3,0],[50545.4531,0,0],[50636.3633,3,0],[50727.2734,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[50909.09,1,0],[51090.91,1,0],[51272.7266,0,0],[51454.5469,3,0],[51636.3633,2,0],[51818.18,3,0],[52000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[52363.6367,0,0],[52636.3633,3,0],[52727.2734,1,0],[52909.09,0,0],[53090.91,3,0],[53272.7266,1,0],[53454.5469,2,0],[53636.3633,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[53818.18,0,0],[54000,2,0],[54181.8164,3,0],[54363.6367,0,0],[54545.4531,3,0],[54727.2734,2,0],[54909.09,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[55272.7266,0,0],[55363.6367,3,0],[55454.5469,2,0],[55636.3633,3,0],[55818.18,0,0],[56000,2,0],[56181.8164,3,0],[56363.6367,0,0],[56454.543,3,0],[56545.4531,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56727.2734,1,0],[56909.09,1,0],[57090.91,0,0],[57272.7266,3,0],[57454.543,4,0],[57454.543,2,0],[57636.3633,7,0],[57636.3633,3,0],[57818.18,5,0],[57818.18,0,0],[58000,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[58181.8164,3,0],[58545.4531,3,0],[58727.2734,1,0],[58909.09,2,0],[59090.91,0,0],[59272.7266,1,0],[59454.543,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[59636.3633,0,272.727264],[60000,2,0],[60363.6367,2,0],[60545.4531,2,0],[60727.2734,2,181.818176]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61090.91,2,0],[61454.543,2,0],[61636.3633,3,0],[61818.18,1,0],[62000,0,0],[62181.8164,3,0],[62363.6367,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[62545.4531,0,0],[62909.09,0,0],[63272.7266,4,0],[63272.7266,2,0],[63454.543,7,0],[63636.3633,5,0],[63636.3633,0,0],[63818.18,7,0],[63818.18,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[64000,3,0],[64363.6367,3,0],[64545.4531,1,0],[64727.2734,2,0],[64909.09,0,0],[65090.91,1,0],[65272.7266,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65454.543,0,272.727264],[65818.18,2,0],[66181.82,2,0],[66363.63,2,0],[66545.45,2,181.818176]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[66909.09,2,0],[67272.73,2,0],[67454.55,3,0],[67636.36,1,0],[67818.18,0,0],[68000,3,0],[68181.82,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[68363.63,0,0],[68727.27,0,0],[69090.91,2,0],[69454.55,0,0],[69636.36,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[69818.18,2,0],[70000,3,0],[70181.82,0,0],[70363.63,3,0],[70454.55,2,0],[70545.45,0,0],[70727.27,3,0],[70909.09,2,0],[71090.91,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[71272.73,2,0],[71636.36,2,0],[71818.18,0,0],[72000,2,0],[72181.82,3,0],[72363.63,0,0],[72545.45,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72727.27,0,0],[73090.91,0,0],[73272.73,0,0],[73363.63,3,0],[73454.55,2,0],[73636.36,3,0],[73818.18,2,0],[74000,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[74181.82,2,0],[74363.63,3,0],[74545.45,2,0],[74727.27,0,0],[74909.09,1,0],[75090.91,3,0],[75272.73,0,0],[75454.55,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[75636.36,2,0],[75818.18,3,0],[76000,0,0],[76181.82,3,0],[76272.73,2,0],[76363.63,0,0],[76545.45,3,0],[76727.27,2,0],[76909.09,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[77090.91,2,0],[77454.55,2,0],[77636.36,0,0],[77818.18,2,0],[78000,3,0],[78181.82,0,0],[78363.63,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78545.45,0,0],[78909.09,0,0],[79090.91,0,0],[79181.82,3,0],[79272.73,2,0],[79454.55,3,0],[79636.36,2,0],[79818.18,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80000,2,0],[80181.82,3,0],[80363.63,2,0],[80545.45,0,0],[80727.27,1,0],[80909.09,3,0],[81090.91,0,0],[81272.73,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":165,"changeBPM":false,"mustHitSection":true}],"player2":"spooky","song":"South","stage":"halloween","needsVoices":true,"validScore":true,"bpm":165,"speed":1.5}}
\ No newline at end of file
diff --git a/assets/preload/data/spookeez/0.offset b/assets/preload/data/spookeez/0.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/spookeez/0.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/spookeez/spookeez-easy.json b/assets/preload/data/spookeez/spookeez-easy.json
deleted file mode 100644
index 9e9bbbac7e..0000000000
--- a/assets/preload/data/spookeez/spookeez-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[6400,0,0],[6799.99951,3,0],[7199.99951,3,0],[7599.99951,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[7999.99951,1,0],[8400,3,0],[8800,2,0],[9200,0,0],[9400,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[9600,0,0],[10000,3,0],[10400,3,0],[10800,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11200,1,0],[11600,3,0],[12000,2,0],[12400,0,0],[12600,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[12800,2,0],[13199.999,0,0],[13599.999,2,0],[13799.999,0,0],[13999.999,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[14399.999,1,0],[14799.999,3,0],[15199.999,1,0],[15599.999,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15999.999,2,0],[16400,0,0],[16800,2,0],[17000,0,0],[17200,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[17600,1,0],[18000,3,0],[18400,1,0],[18800,4,0],[18800,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[19200,2,0],[19400,1,0],[19600,3,0],[20000,3,0],[20300,3,0],[20600,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[20800,2,0],[21000,1,0],[21200,3,0],[21600,3,0],[21900,1,0],[22200,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[22400,2,0],[22600,1,0],[22800,3,0],[23200,3,0],[23500,3,0],[23800,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[24000,2,0],[24200,1,0],[24400,3,0],[24800,2,0],[25200,4,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[25600,2,0],[25799.998,1,0],[25999.998,3,0],[26399.998,3,0],[26699.998,3,0],[26999.998,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[27199.998,2,0],[27399.998,1,0],[27599.998,3,0],[27999.998,3,0],[28299.998,1,0],[28599.998,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[28799.998,2,0],[28999.998,1,0],[29199.998,3,0],[29599.998,3,0],[29899.998,3,0],[30199.998,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30399.998,2,0],[30599.998,1,0],[30799.998,3,0],[31199.998,2,0],[31599.998,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[31999.998,0,0],[32399.998,3,0],[32800,3,0],[33200,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[33600,1,0],[34000,3,0],[34400,2,0],[34800,0,0],[35000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[35200,0,0],[35600,3,0],[36000,3,0],[36400,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[36800,1,0],[37200,3,0],[37600,2,0],[38000,0,0],[38200,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[38400,2,0],[38800,0,0],[39200,2,0],[39400,0,0],[39600,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[40000,1,0],[40400,3,0],[40800,1,0],[41200,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[41600,2,0],[42000,0,0],[42400,2,0],[42600,0,0],[42800,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[43200,1,0],[43600,3,0],[44000,1,0],[44400,4,0],[44400,2,0],[44600,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[44800,2,0],[45000,0,0],[45200,3,0],[45600,3,0],[45900,3,0],[46200,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[46400,2,0],[46600,0,0],[46800,3,0],[47200,1,0],[47600,0,0],[47800,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48000,2,0],[48200,0,0],[48400,3,0],[48800,3,0],[49100,3,0],[49400,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49600,2,0],[49800,0,0],[50000,3,0],[50400,3,0],[50800,4,0],[51000,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[51200,2,0],[51399.9961,0,0],[51599.9961,3,0],[51999.9961,3,0],[52299.9961,3,0],[52599.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[52799.9961,2,0],[52999.9961,0,0],[53199.9961,3,0],[53599.9961,1,0],[53999.9961,0,0],[54199.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[54399.9961,2,0],[54599.9961,0,0],[54799.9961,3,0],[55199.9961,3,0],[55499.9961,3,0],[55799.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[55999.9961,2,0],[56199.9961,0,0],[56399.9961,3,0],[56799.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[57599.9961,2,300],[57999.9961,3,300],[58399.9961,1,300],[58799.9961,2,300]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[59199.9961,2,300],[59599.9961,0,300],[59999.9961,1,300],[60399.9961,2,300]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[60799.9961,1,0],[61399.9961,3,0],[61799.9961,3,0],[61999.9961,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[62399.9961,1,0],[62999.9961,3,0],[63399.9961,3,0],[63599.9961,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[63999.9961,2,300],[64399.9961,3,300],[64799.9961,1,300],[65199.9961,2,300]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65600,2,300],[66000,0,300],[66400,1,300],[66800,2,300]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[67200,1,0],[67800,3,0],[68200,3,0],[68400,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[68800,4,300],[68800,1,0],[69200,5,300],[69400,3,0],[69600,7,300],[69800,3,0],[70000,5,300],[70000,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[70400,2,0],[70600,2,0],[71000,2,0],[71400,3,0],[71600,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72000,2,0],[72200,2,0],[72600,2,0],[73000,3,0],[73200,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[73600,2,0],[73800,2,0],[74200,2,0],[74600,3,0],[74800,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[75200,4,300],[75200,2,0],[75400,2,0],[75600,5,300],[75800,2,0],[76000,7,300],[76200,3,0],[76400,5,300],[76400,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[76800,2,0],[77000,2,0],[77400,2,0],[77800,3,0],[78000,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78400,2,0],[78600,2,0],[79000,2,0],[79400,3,0],[79600,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80000,2,0],[80200,2,0],[80600,2,0],[81000,3,0],[81200,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[81600,4,300],[81600,2,0],[81800,2,0],[82000,5,300],[82200,2,0],[82400,7,300],[82600,3,0],[82800,5,300],[82800,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[83200,2,0],[83400,2,0],[83800,2,0],[84200,3,0],[84400,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[84800,2,0],[85000,2,0],[85400,2,0],[85800,3,0],[86000,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[86400,2,0],[86600,2,0],[87000,2,0],[87400,3,0],[87600,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[88000,4,300],[88000,2,0],[88200,2,0],[88400,5,300],[88600,2,0],[88800,7,300],[89000,3,0],[89200,5,300],[89200,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[89600,2,0],[89800,2,0],[90200,2,0],[90600,3,0],[90800,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[91200,2,0],[91400,2,0],[91800,2,0],[92200,3,0],[92400,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[92800,2,0],[93000,2,0],[93400,2,0],[93800,3,0],[94000,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[94400,2,0],[94600,2,0],[95000,2,0],[95400,3,0],[95600,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":150,"changeBPM":false,"mustHitSection":true}],"player2":"spooky","song":"Spookeez","stage":"halloween","needsVoices":true,"validScore":true,"bpm":150,"speed":1}}
\ No newline at end of file
diff --git a/assets/preload/data/spookeez/spookeez-hard.json b/assets/preload/data/spookeez/spookeez-hard.json
deleted file mode 100644
index 95a3133d78..0000000000
--- a/assets/preload/data/spookeez/spookeez-hard.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[6400,0,0],[6599.99951,1,0],[6799.99951,3,0],[7199.99951,3,0],[7599.99951,2,0],[7799.99951,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[7999.99951,1,0],[8200,3,0],[8400,3,0],[8800,2,0],[9200,0,0],[9400,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[9600,0,0],[9800,1,0],[10000,3,0],[10400,3,0],[10800,2,0],[11000,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11200,1,0],[11400,3,0],[11600,3,0],[12000,2,0],[12400,0,0],[12600,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[12800,2,0],[12999.999,3,0],[13099.999,1,0],[13199.999,0,0],[13399.999,0,0],[13599.999,2,0],[13799.999,3,0],[13999.999,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[14399.999,1,0],[14599.999,0,0],[14699.999,1,0],[14799.999,3,0],[14999.999,3,0],[15199.999,0,0],[15399.999,0,0],[15599.999,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15999.999,2,0],[16199.999,3,0],[16299.999,1,0],[16400,0,0],[16600,0,0],[16800,2,0],[17000,3,0],[17200,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[17600,1,0],[17800,0,0],[17900,1,0],[18000,3,0],[18200,3,0],[18400,0,0],[18600,0,0],[18800,4,0],[18800,2,0],[19000,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[19200,2,0],[19400,3,0],[19500,1,0],[19600,3,0],[20000,3,0],[20300,3,0],[20600,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[20800,2,0],[21000,0,0],[21100,1,0],[21200,3,0],[21600,3,0],[21900,1,0],[22000,3,0],[22200,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[22400,2,0],[22600,3,0],[22700,1,0],[22800,3,0],[23200,3,0],[23500,3,0],[23800,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[24000,2,0],[24200,0,0],[24300,1,0],[24400,3,0],[24800,1,0],[25200,2,0],[25200,4,0],[25400,2,0],[25400,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[25600,2,0],[25799.998,3,0],[25899.998,1,0],[25999.998,3,0],[26399.998,3,0],[26699.998,3,0],[26999.998,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[27199.998,2,0],[27399.998,0,0],[27499.998,1,0],[27599.998,3,0],[27999.998,3,0],[28299.998,1,0],[28399.998,3,0],[28599.998,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[28799.998,2,0],[28999.998,3,0],[29099.998,1,0],[29199.998,3,0],[29599.998,3,0],[29899.998,3,0],[30199.998,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30399.998,2,0],[30599.998,0,0],[30699.998,1,0],[30799.998,3,0],[31199.998,1,0],[31599.998,2,0],[31599.998,7,0],[31799.998,2,0],[31799.998,5,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[31999.998,0,0],[32199.998,1,0],[32399.998,3,0],[32800,3,0],[33200,2,0],[33400,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[33600,1,0],[33800,3,0],[34000,3,0],[34400,2,0],[34800,0,0],[35000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[35200,0,0],[35400,1,0],[35600,3,0],[36000,3,0],[36400,2,0],[36600,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[36800,1,0],[37000,3,0],[37200,3,0],[37600,2,0],[38000,0,0],[38200,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[38400,2,0],[38600,3,0],[38700,1,0],[38800,0,0],[39000,0,0],[39200,2,0],[39400,3,0],[39600,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[40000,1,0],[40200,0,0],[40300,1,0],[40400,3,0],[40600,3,0],[40800,0,0],[41000,0,0],[41200,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[41600,2,0],[41800,3,0],[41900,1,0],[42000,0,0],[42200,0,0],[42400,2,0],[42600,3,0],[42800,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[43200,1,0],[43400,0,0],[43500,1,0],[43600,3,0],[43800,3,0],[44000,0,0],[44200,0,0],[44400,4,0],[44400,2,0],[44600,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[44800,2,0],[45000,3,0],[45100,1,0],[45200,3,0],[45500,3,0],[45600,3,0],[45900,3,0],[46200,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[46400,2,0],[46600,0,0],[46700,1,0],[46800,3,0],[47100,3,0],[47200,1,0],[47400,0,0],[47500,2,0],[47600,3,0],[47800,3,0],[47900,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48000,2,0],[48200,3,0],[48300,1,0],[48400,3,0],[48800,3,0],[49100,3,0],[49400,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49600,2,0],[49800,0,0],[49900,1,0],[50000,3,0],[50400,3,0],[50800,4,0],[51000,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[51200,2,0],[51399.9961,3,0],[51499.9961,1,0],[51599.9961,3,0],[51899.9961,3,0],[51999.9961,3,0],[52299.9961,3,0],[52599.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[52799.9961,2,0],[52999.9961,0,0],[53099.9961,1,0],[53199.9961,3,0],[53499.9961,3,0],[53599.9961,1,0],[53799.9961,0,0],[53899.9961,2,0],[53999.9961,3,0],[54199.9961,3,0],[54299.9961,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[54399.9961,2,0],[54599.9961,3,0],[54699.9961,1,0],[54799.9961,3,0],[55199.9961,3,0],[55499.9961,3,0],[55799.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[55999.9961,2,0],[56199.9961,0,0],[56299.9961,1,0],[56399.9961,3,0],[56799.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[57599.9961,2,300],[57999.9961,3,300],[58399.9961,1,300],[58799.9961,2,300]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[59199.9961,2,100],[59399.9961,3,100],[59599.9961,0,300],[59999.9961,1,300],[60399.9961,2,300]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[60799.9961,1,0],[61199.9961,1,0],[61399.9961,3,0],[61799.9961,3,0],[61999.9961,0,0],[62199.9961,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[62399.9961,1,0],[62799.9961,1,0],[62999.9961,3,0],[63399.9961,3,0],[63599.9961,0,0],[63799.9961,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[63999.9961,2,300],[64399.9961,3,300],[64799.9961,1,300],[65199.9961,2,300]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65600,2,100],[65800,3,100],[66000,0,300],[66400,1,300],[66800,2,300]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[67200,1,0],[67600,1,0],[67800,3,0],[68200,3,0],[68400,0,0],[68600,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[68800,4,300],[68800,1,0],[69200,5,300],[69200,1,0],[69400,3,0],[69600,7,300],[69800,3,0],[70000,5,300],[70000,0,0],[70200,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[70400,2,0],[70600,2,0],[70800,3,0],[71000,2,0],[71400,3,0],[71600,1,0],[71800,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72000,2,0],[72200,2,0],[72400,3,0],[72600,2,0],[73000,3,0],[73200,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[73600,2,0],[73800,2,0],[74000,3,0],[74200,2,0],[74600,3,0],[74800,1,0],[75000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[75200,2,0],[75200,4,300],[75400,2,0],[75600,3,0],[75600,5,300],[75800,2,0],[76000,7,300],[76200,3,0],[76400,1,0],[76400,5,300]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[76800,2,0],[77000,2,0],[77200,3,0],[77400,2,0],[77800,3,0],[78000,1,0],[78200,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78400,2,0],[78600,2,0],[78800,3,0],[79000,2,0],[79400,3,0],[79600,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80000,2,0],[80200,2,0],[80400,3,0],[80600,2,0],[81000,3,0],[81200,1,0],[81400,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[81600,2,0],[81600,4,300],[81800,2,0],[82000,3,0],[82000,5,300],[82200,2,0],[82400,7,300],[82600,3,0],[82800,1,0],[82800,5,300]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[83200,2,0],[83400,2,0],[83600,3,0],[83800,2,0],[84200,3,0],[84400,1,0],[84600,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[84800,2,0],[85000,2,0],[85200,3,0],[85400,2,0],[85800,3,0],[86000,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[86400,2,0],[86600,2,0],[86800,3,0],[87000,2,0],[87400,3,0],[87600,1,0],[87800,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[88000,2,0],[88000,4,300],[88200,2,0],[88400,3,0],[88400,5,300],[88600,2,0],[88800,7,300],[89000,3,0],[89200,1,0],[89200,5,300]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[89600,2,0],[89800,2,0],[90000,3,0],[90200,2,0],[90600,3,0],[90800,1,0],[91000,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[91200,2,0],[91400,2,0],[91600,3,0],[91800,2,0],[92200,3,0],[92400,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[92800,2,0],[93000,2,0],[93200,3,0],[93400,2,0],[93800,3,0],[94000,1,0],[94200,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[94400,2,0],[94600,2,0],[94800,3,0],[95000,2,0],[95400,3,0],[95600,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":150,"changeBPM":false,"mustHitSection":true}],"player2":"spooky","song":"Spookeez","stage":"halloween","needsVoices":true,"validScore":true,"bpm":150,"speed":2.4}}
\ No newline at end of file
diff --git a/assets/preload/data/spookeez/spookeez.json b/assets/preload/data/spookeez/spookeez.json
deleted file mode 100644
index b10533a044..0000000000
--- a/assets/preload/data/spookeez/spookeez.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[6400,0,0],[6799.99951,3,0],[7199.99951,3,0],[7599.99951,2,0],[7799.99951,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[7999.99951,1,0],[8400,3,0],[8800,2,0],[9200,0,0],[9400,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[9600,0,0],[10000,3,0],[10400,3,0],[10800,2,0],[11000,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[11200,1,0],[11600,3,0],[12000,2,0],[12400,0,0],[12600,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[12800,2,0],[12999.999,1,0],[13199.999,0,0],[13399.999,0,0],[13599.999,2,0],[13799.999,3,0],[13999.999,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[14399.999,1,0],[14599.999,0,0],[14799.999,3,0],[14999.999,3,0],[15199.999,0,0],[15399.999,0,0],[15599.999,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15999.999,2,0],[16199.999,1,0],[16400,0,0],[16600,0,0],[16800,2,0],[17000,3,0],[17200,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[17600,1,0],[17800,0,0],[18000,3,0],[18200,3,0],[18400,0,0],[18600,0,0],[18800,4,0],[18800,2,0],[19000,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[19200,2,0],[19400,0,0],[19600,3,0],[20000,3,0],[20300,3,0],[20600,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[20800,2,0],[21000,3,0],[21200,3,0],[21600,3,0],[21900,1,0],[22200,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[22400,2,0],[22600,0,0],[22800,3,0],[23200,3,0],[23500,3,0],[23800,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[24000,2,0],[24200,3,0],[24400,3,0],[24800,1,0],[25200,4,0],[25200,2,0],[25400,7,0],[25400,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[25600,2,0],[25799.998,0,0],[25999.998,3,0],[26399.998,3,0],[26699.998,3,0],[26999.998,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[27199.998,2,0],[27399.998,3,0],[27599.998,3,0],[27999.998,3,0],[28299.998,1,0],[28599.998,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[28799.998,2,0],[28999.998,0,0],[29199.998,3,0],[29599.998,3,0],[29899.998,3,0],[30199.998,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30399.998,2,0],[30599.998,3,0],[30799.998,3,0],[31199.998,1,0],[31599.998,7,0],[31599.998,2,0],[31799.998,5,0],[31799.998,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[31999.998,0,0],[32399.998,3,0],[32800,3,0],[33200,2,0],[33400,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[33600,1,0],[34000,3,0],[34400,2,0],[34800,0,0],[35000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[35200,0,0],[35600,3,0],[36000,3,0],[36400,2,0],[36600,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[36800,1,0],[37200,3,0],[37600,2,0],[38000,0,0],[38200,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[38400,2,0],[38600,1,0],[38800,0,0],[39000,0,0],[39200,2,0],[39400,3,0],[39600,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[40000,1,0],[40200,0,0],[40400,3,0],[40600,3,0],[40800,0,0],[41000,0,0],[41200,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[41600,2,0],[41800,1,0],[42000,0,0],[42200,0,0],[42400,2,0],[42600,3,0],[42800,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[43200,1,0],[43400,0,0],[43600,3,0],[43800,3,0],[44000,0,0],[44200,0,0],[44400,4,0],[44400,2,0],[44600,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[44800,2,0],[45000,0,0],[45200,3,0],[45500,3,0],[45600,3,0],[45900,3,0],[46200,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[46400,2,0],[46600,3,0],[46800,3,0],[47100,3,0],[47200,1,0],[47600,3,0],[47800,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[48000,2,0],[48200,0,0],[48400,3,0],[48800,3,0],[49100,3,0],[49400,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49600,2,0],[49800,3,0],[50000,3,0],[50400,3,0],[50800,4,0],[51000,7,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[51200,2,0],[51399.9961,0,0],[51599.9961,3,0],[51899.9961,3,0],[51999.9961,3,0],[52299.9961,3,0],[52599.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[52799.9961,2,0],[52999.9961,3,0],[53199.9961,3,0],[53499.9961,3,0],[53599.9961,1,0],[53999.9961,3,0],[54199.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[54399.9961,2,0],[54599.9961,0,0],[54799.9961,3,0],[55199.9961,3,0],[55499.9961,3,0],[55799.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[55999.9961,2,0],[56199.9961,3,0],[56399.9961,3,0],[56799.9961,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[57599.9961,2,300],[57999.9961,3,300],[58399.9961,1,300],[58799.9961,2,300]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[59199.9961,2,100],[59399.9961,3,100],[59599.9961,0,300],[59999.9961,1,300],[60399.9961,2,300]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[60799.9961,1,0],[61199.9961,1,0],[61399.9961,3,0],[61799.9961,3,0],[61999.9961,0,0],[62199.9961,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[62399.9961,1,0],[62799.9961,1,0],[62999.9961,3,0],[63399.9961,3,0],[63599.9961,0,0],[63799.9961,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[63999.9961,2,300],[64399.9961,3,300],[64799.9961,1,300],[65199.9961,2,300]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[65600,2,100],[65800,3,100],[66000,0,300],[66400,1,300],[66800,2,300]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[67200,1,0],[67600,1,0],[67800,3,0],[68200,3,0],[68400,0,0],[68600,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[68800,4,300],[68800,1,0],[69200,5,300],[69200,1,0],[69400,3,0],[69600,7,300],[69800,3,0],[70000,5,300],[70000,0,0],[70200,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[70400,2,0],[70600,2,0],[70800,3,0],[71000,2,0],[71400,3,0],[71600,1,0],[71800,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72000,2,0],[72200,2,0],[72400,3,0],[72600,2,0],[73000,3,0],[73200,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[73600,2,0],[73800,2,0],[74000,3,0],[74200,2,0],[74600,3,0],[74800,1,0],[75000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[75200,4,300],[75200,2,0],[75400,2,0],[75600,5,300],[75600,3,0],[75800,2,0],[76000,7,300],[76200,3,0],[76400,5,300],[76400,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[76800,2,0],[77000,2,0],[77200,3,0],[77400,2,0],[77800,3,0],[78000,1,0],[78200,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78400,2,0],[78600,2,0],[78800,3,0],[79000,2,0],[79400,3,0],[79600,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80000,2,0],[80200,2,0],[80400,3,0],[80600,2,0],[81000,3,0],[81200,1,0],[81400,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[81600,4,300],[81600,2,0],[81800,2,0],[82000,5,300],[82000,3,0],[82200,2,0],[82400,7,300],[82600,3,0],[82800,5,300],[82800,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[83200,2,0],[83400,2,0],[83600,3,0],[83800,2,0],[84200,3,0],[84400,1,0],[84600,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[84800,2,0],[85000,2,0],[85200,3,0],[85400,2,0],[85800,3,0],[86000,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[86400,2,0],[86600,2,0],[86800,3,0],[87000,2,0],[87400,3,0],[87600,1,0],[87800,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[88000,4,300],[88000,2,0],[88200,2,0],[88400,5,300],[88400,3,0],[88600,2,0],[88800,7,300],[89000,3,0],[89200,5,300],[89200,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[89600,2,0],[89800,2,0],[90000,3,0],[90200,2,0],[90600,3,0],[90800,1,0],[91000,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[91200,2,0],[91400,2,0],[91600,3,0],[91800,2,0],[92200,3,0],[92400,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[92800,2,0],[93000,2,0],[93200,3,0],[93400,2,0],[93800,3,0],[94000,1,0],[94200,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[94400,2,0],[94600,2,0],[94800,3,0],[95000,2,0],[95400,3,0],[95600,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":150,"changeBPM":false,"mustHitSection":true}],"player2":"spooky","song":"Spookeez","stage":"halloween","needsVoices":true,"validScore":true,"bpm":150,"speed":1.7}}
\ No newline at end of file
diff --git a/assets/preload/data/test/test.json b/assets/preload/data/test/test.json
deleted file mode 100644
index 6ccba5edf1..0000000000
--- a/assets/preload/data/test/test.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song": {"song": "Test", "notes": [{"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[668.578947368421, 3, 947.3684210526317], [1615.9473684210527, 1, 631.578947368421], [2247.5263157894738, 0, 315.7894736842104]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[2563.315789473684, 3, 631.5789473684213], [3194.8947368421054, 2, 631.5789473684208], [3826.4736842105262, 1, 631.5789473684213], [4773.8421052631575, 1, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[5089.631578947368, 2, 0], [5563.315789473684, 1, 0], [5879.105263157895, 3, 0], [6037.0, 1, 0], [6194.894736842105, 0, 0], [6352.789473684211, 2, 315.78947368420995], [6668.578947368421, 1, 315.78947368421086], [6984.368421052632, 0, 0], [7142.263157894737, 1, 0], [7300.1578947368425, 2, 0], [7458.0526315789475, 0, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[7615.9473684210525, 1, 1578.9473684210525], [7615.9473684210525, 3, 947.3684210526326], [8721.21052631579, 3, 0], [8879.105263157895, 0, 0], [9194.894736842105, 2, 0], [9352.78947368421, 1, 0], [9352.78947368421, 3, 0], [9510.684210526315, 0, 0], [9510.684210526315, 2, 0], [9668.578947368422, 0, 0], [9668.578947368422, 2, 0], [9826.473684210527, 1, 0], [9826.473684210527, 3, 0], [9984.368421052632, 0, 0], [9984.368421052632, 2, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[10142.263157894737, 3, 0], [10458.052631578947, 3, 0], [10773.842105263158, 3, 0], [11089.631578947368, 1, 0], [11247.526315789473, 2, 0], [11405.421052631578, 0, 0], [11721.21052631579, 0, 0], [12037.0, 0, 0], [12194.894736842105, 2, 0], [12352.78947368421, 1, 0], [12510.684210526315, 2, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[12668.578947368422, 3, 0], [12984.368421052632, 1, 0], [13300.157894736842, 2, 315.78947368421177], [13615.947368421053, 0, 0], [13773.842105263158, 1, 0], [13931.736842105263, 3, 1263.1578947368416], [14563.315789473685, 0, 0], [14721.21052631579, 1, 0], [14879.105263157895, 2, 0], [15037.0, 1, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[15194.894736842105, 0, 0], [15352.78947368421, 2, 0], [15510.684210526315, 0, 631.5789473684217], [16142.263157894737, 2, 0], [16300.157894736842, 1, 0], [16458.052631578947, 0, 0], [16773.842105263157, 0, 0], [17089.63157894737, 0, 0], [17405.42105263158, 1, 315.78947368420995]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[17721.21052631579, 0, 1263.1578947368398], [17721.21052631579, 3, 1263.1578947368398], [18984.36842105263, 1, 0], [18984.36842105263, 2, 0], [19300.157894736843, 1, 0], [19300.157894736843, 2, 0], [19615.947368421053, 1, 0], [19615.947368421053, 2, 0], [19826.473684210527, 1, 0], [19826.473684210527, 2, 0], [20037.0, 1, 0], [20037.0, 2, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[20247.526315789473, 3, 631.5789473684199], [20879.105263157893, 1, 0], [21194.894736842107, 1, 0], [21510.684210526317, 1, 0], [21826.473684210527, 1, 0], [22142.263157894737, 1, 0], [22300.157894736843, 2, 0], [22458.052631578947, 0, 0], [22615.947368421053, 2, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[22773.842105263157, 3, 0], [22931.736842105263, 1, 0], [23089.63157894737, 2, 0], [23405.42105263158, 1, 0], [23721.21052631579, 1, 0], [24037.0, 1, 0], [24352.78947368421, 2, 0], [24510.684210526317, 3, 0], [24668.57894736842, 1, 0], [24826.473684210527, 2, 0], [24984.36842105263, 1, 0], [25142.263157894737, 0, 473.68421052631675]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[25773.842105263157, 2, 0], [25931.736842105263, 3, 0], [26089.63157894737, 1, 0], [26247.526315789473, 2, 0], [26563.315789473683, 1, 0], [26879.105263157893, 0, 0], [27194.894736842107, 0, 0], [27352.78947368421, 1, 0], [27510.684210526317, 2, 0], [27668.57894736842, 3, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[27826.473684210527, 2, 0], [28142.263157894737, 2, 0], [28458.052631578947, 3, 1894.7368421052633], [28615.947368421053, 2, 0], [28773.842105263157, 1, 0], [28931.736842105263, 0, 0], [29089.63157894737, 2, 0], [29247.526315789473, 1, 0], [29405.42105263158, 0, 0], [29563.315789473683, 1, 0], [29879.105263157893, 2, 0], [30037.0, 1, 0], [30194.894736842107, 0, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[30352.78947368421, 2, 0], [30431.736842105263, 1, 0], [30510.684210526317, 0, 0], [30668.57894736842, 0, 0], [30826.473684210527, 0, 0], [30905.42105263158, 1, 0], [30984.36842105263, 2, 0], [31142.263157894737, 3, 0], [31300.157894736843, 1, 0], [31458.052631578947, 2, 0], [31615.947368421053, 0, 0], [31773.842105263157, 2, 0], [31931.736842105263, 1, 0], [32089.63157894737, 2, 0], [32405.42105263158, 2, 0], [32721.21052631579, 2, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[32879.10526315789, 2, 0], [32958.05263157895, 3, 0], [33037.0, 1, 0], [33194.89473684211, 0, 0], [33352.78947368421, 2, 0], [33510.68421052631, 1, 0], [33668.57894736842, 2, 0], [33826.47368421053, 3, 0], [33984.36842105263, 1, 0], [34063.31578947369, 2, 0], [34142.26315789474, 0, 0], [34300.15789473684, 0, 0], [34458.05263157895, 1, 0], [34615.94736842105, 2, 0], [34694.89473684211, 1, 0], [34773.84210526316, 2, 0], [34931.73684210526, 3, 0], [35089.63157894737, 1, 0], [35247.52631578947, 2, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[35405.42105263158, 0, 0], [35563.31578947369, 1, 0], [35721.21052631579, 2, 0], [35879.10526315789, 3, 0], [36194.89473684211, 2, 0], [36352.78947368421, 1, 0], [36510.68421052631, 0, 0], [36826.47368421053, 2, 0], [36984.36842105263, 1, 0], [37142.26315789474, 0, 236.84210526315292], [37458.05263157895, 0, 236.8421052631602], [37773.84210526316, 0, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[37931.73684210526, 2, 0], [38089.63157894737, 1, 0], [38247.52631578947, 0, 0], [38405.42105263158, 1, 0], [38563.31578947369, 3, 0], [38721.21052631579, 3, 0], [38879.10526315789, 2, 552.6315789473665], [39510.68421052631, 1, 315.7894736842136], [39826.47368421053, 3, 1263.1578947368398]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[41721.21052631579, 1, 631.5789473684272], [42431.73684210526, 0, 0], [42510.68421052631, 1, 0], [42589.63157894737, 2, 0], [42668.57894736842, 3, 0], [42747.52631578947, 2, 0], [42826.47368421053, 1, 0], [42905.42105263158, 0, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[42984.36842105263, 3, 631.5789473684199], [43615.94736842105, 1, 552.6315789473665], [44247.52631578947, 1, 631.5789473684199], [44958.05263157895, 0, 0], [45037.0, 1, 0], [45115.94736842105, 2, 0], [45194.89473684211, 3, 0], [45273.84210526316, 1, 0], [45352.78947368421, 2, 0], [45431.73684210526, 1, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[45510.68421052631, 3, 631.5789473684272], [46142.26315789474, 1, 0], [46142.26315789474, 2, 631.5789473684199], [46300.15789473684, 0, 0], [46458.05263157895, 1, 0], [46615.94736842105, 0, 0], [46773.84210526316, 1, 0], [46773.84210526316, 3, 631.5789473684199], [46931.73684210526, 0, 0], [47089.63157894737, 1, 0], [47247.52631578947, 0, 0], [47405.42105263158, 1, 0], [47405.42105263158, 2, 631.5789473684199], [47484.36842105263, 0, 0], [47563.31578947369, 1, 0], [47642.26315789474, 0, 0], [47721.21052631579, 1, 0], [47800.15789473684, 0, 0], [47879.10526315789, 1, 0], [47958.05263157895, 0, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[48037.0, 1, 0], [48194.89473684211, 2, 0], [48352.78947368421, 1, 315.7894736842063], [48668.57894736842, 2, 236.8421052631602], [48984.36842105263, 1, 0], [49063.31578947369, 2, 0], [49142.26315789474, 3, 0], [49221.21052631579, 2, 0], [49300.15789473684, 0, 631.5789473684199], [49458.05263157895, 1, 0], [49615.94736842105, 2, 0], [49773.84210526316, 1, 0], [49931.73684210526, 2, 0], [50010.68421052631, 0, 0], [50089.63157894737, 1, 0], [50168.57894736842, 2, 0], [50247.52631578947, 1, 0], [50326.47368421053, 2, 0], [50405.42105263158, 3, 0], [50484.36842105263, 2, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[50563.31578947369, 1, 631.5789473684199], [50563.31578947369, 3, 631.5789473684199], [51194.89473684211, 0, 631.5789473684199], [51194.89473684211, 2, 631.5789473684199], [51826.47368421053, 3, 0], [51984.36842105263, 2, 0], [52142.26315789474, 1, 0], [52300.15789473684, 3, 0], [52458.05263157895, 2, 0], [52615.94736842105, 1, 0], [52773.84210526316, 3, 0], [52931.73684210526, 2, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[53089.63157894737, 1, 0], [53247.52631578947, 3, 0], [53405.42105263158, 2, 0], [53563.31578947369, 1, 0], [53721.21052631579, 3, 0], [53879.10526315789, 2, 0], [54037.0, 1, 0], [54194.89473684211, 0, 0], [54352.78947368421, 1, 0], [54510.68421052631, 2, 0], [54668.57894736842, 3, 0], [54826.47368421053, 2, 0], [54984.36842105263, 1, 0], [55142.26315789474, 3, 0], [55300.15789473684, 2, 0], [55458.05263157895, 1, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[55615.94736842105, 3, 0], [55773.84210526316, 2, 0], [55931.73684210526, 1, 0], [56089.63157894737, 3, 0], [56247.52631578947, 2, 0], [56405.42105263158, 1, 0], [56563.31578947369, 3, 0], [56721.21052631579, 2, 0], [56879.10526315789, 1, 0], [57037.0, 0, 0], [57194.89473684211, 1, 0], [57352.78947368421, 0, 0], [57510.68421052631, 1, 0], [57668.57894736842, 2, 0], [57826.47368421053, 0, 0], [57984.36842105263, 1, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[58142.26315789474, 2, 0], [58300.15789473684, 3, 0], [58458.05263157895, 2, 0], [58615.94736842105, 1, 0], [58773.84210526316, 0, 0], [58931.73684210526, 1, 0], [59089.63157894737, 2, 0], [59247.52631578947, 3, 0], [59405.42105263158, 2, 0], [59563.31578947369, 3, 0], [59721.21052631579, 0, 0], [59879.10526315789, 1, 0], [60037.0, 2, 0], [60194.89473684211, 0, 0], [60352.78947368421, 1, 0], [60510.68421052631, 2, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[60668.57894736842, 3, 0], [60826.47368421053, 2, 0], [60984.36842105263, 0, 0], [61142.26315789474, 1, 0], [61300.15789473684, 2, 0], [61458.05263157895, 0, 0], [61615.94736842105, 1, 0], [61773.84210526316, 2, 0], [61931.73684210526, 3, 0], [62089.63157894737, 2, 0], [62247.52631578947, 1, 2210.5263157894733]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": []}], "bpm": 95.0, "sections": 0, "needsVoices": false, "player1": "bf", "player2": "gf", "sectionLengths": [], "speed": 3}}
\ No newline at end of file
diff --git a/assets/preload/data/thorns/0.offset b/assets/preload/data/thorns/0.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/thorns/0.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/thorns/thorns-easy.json b/assets/preload/data/thorns/thorns-easy.json
deleted file mode 100644
index 4685662c9e..0000000000
--- a/assets/preload/data/thorns/thorns-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-pixel","gfVersion":"gf-pixel","notes":[{"sectionNotes":[[0,3,157.89473],[631.5789,1,157.89473],[947.3684,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[1263.15784,3,0],[1736.842,3,0],[2210.52612,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[2526.31567,3,0],[2842.10522,3,0],[3157.89453,1,0],[3473.684,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[3789.47363,3,0],[4263.15771,3,0],[4736.842,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5052.63135,3,157.89473],[5684.21045,1,157.89473],[5999.99951,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[6315.789,3,0],[6789.473,3,0],[7263.15771,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[7578.94727,3,0],[7894.73633,3,0],[8210.526,1,0],[8526.315,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[8842.10449,3,0],[9315.789,3,0],[9789.474,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[10105.2627,2,157.89473],[10736.8418,2,0],[10894.7363,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[11368.4209,2,157.89473],[11842.1045,2,157.89473],[12315.7891,2,157.89473]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[12631.5781,2,157.89473],[13263.1572,2,0],[13421.0518,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[13894.7363,2,157.89473],[14368.42,2,157.89473],[14842.1045,0,157.89473]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15157.8945,2,157.89473],[15789.4727,2,0],[15947.3682,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[16421.0527,2,157.89473],[16894.7363,2,157.89473],[17368.42,2,157.89473]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[17684.209,2,157.89473],[18315.79,2,0],[18473.6836,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[18947.3672,2,157.89473],[19421.05,2,157.89473],[19894.7363,0,157.89473]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[20210.5254,1,0],[20526.3145,3,0],[21000,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[21473.6836,2,0],[21947.3672,2,0],[22421.05,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[22736.8418,1,0],[23052.63,3,0],[23526.3145,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[23999.998,2,0],[24473.6836,2,0],[24789.4727,4,0],[24947.3672,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[25263.1563,1,0],[25578.9453,3,0],[26052.63,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[26526.3145,2,0],[26999.998,2,0],[27473.6836,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[27789.4727,1,0],[28105.2617,3,0],[28578.9453,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[29052.63,2,0],[29526.3145,2,0],[29999.998,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30315.79,2,0],[30631.5781,3,0],[30947.3672,3,0],[31263.1563,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[31578.9453,0,0],[31894.7363,0,0],[32210.5254,3,0],[32526.3145,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[32842.1055,0,0],[33157.8945,0,0],[33473.6836,0,0],[33789.4727,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[34105.26,1,0],[34421.05,1,0],[34736.84,1,0],[35052.63,1,236.8421]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[35368.418,2,0],[35684.207,3,0],[36000,3,0],[36315.79,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[36631.58,0,0],[36947.3672,0,0],[37263.1563,3,0],[37578.9453,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[37894.7344,0,0],[38210.5234,0,0],[38526.3125,0,0],[38842.1,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[39157.8945,1,0],[39473.6836,1,0],[39789.4727,1,0],[40105.26,1,236.8421]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[40421.05,0,0],[40736.84,0,0],[41052.63,3,0],[41368.418,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[41684.207,2,0],[42315.79,2,0],[42631.58,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[42947.3672,0,0],[43263.1563,0,0],[43578.9453,3,0],[43894.7344,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[44210.5234,2,0],[44842.1,2,0],[45157.8945,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[45473.6836,0,0],[45789.4727,0,0],[46105.26,3,0],[46421.05,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[46736.84,2,0],[47368.418,2,0],[47684.207,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[47999.9961,0,0],[48315.79,0,0],[48631.58,3,0],[48947.3672,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[49263.1563,2,0],[49894.7344,2,0],[50210.5234,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[50526.3125,3,157.89473],[51157.89,1,157.89473],[51473.6836,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[51789.4727,3,0],[52263.1563,3,0],[52736.84,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[53052.63,3,0],[53368.418,3,0],[53684.207,1,0],[53999.9961,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[54315.7852,3,0],[54789.4727,3,0],[55263.1563,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[55578.9453,3,157.89473],[56210.5234,1,157.89473],[56526.3125,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56842.1,3,0],[57315.7852,3,0],[57789.4727,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[58105.26,3,0],[58421.05,3,0],[58736.84,1,0],[59052.63,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[59368.418,3,0],[59842.1,3,0],[60315.7852,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[60631.58,2,0],[60947.3672,3,0],[61263.1563,3,0],[61578.9453,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61894.7344,0,0],[62210.5234,0,0],[62526.3125,3,0],[62842.1,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[63157.89,0,0],[63473.68,0,0],[63789.4727,0,0],[64105.26,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[64421.05,1,0],[64736.84,1,0],[65052.63,1,0],[65368.418,1,236.8421]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[65684.21,2,0],[66000,3,0],[66315.79,3,0],[66631.58,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[66947.37,0,0],[67263.16,0,0],[67578.9453,3,0],[67894.7344,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[68210.52,0,0],[68526.31,0,0],[68684.21,3,0],[68842.1,0,0],[69157.89,3,0],[69315.79,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[69473.68,1,0],[69789.47,1,0],[70105.26,1,0],[70421.05,1,236.8421]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[70736.8359,0,0],[71052.625,0,0],[71368.4141,3,0],[71684.21,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72000,2,0],[72631.58,2,0],[72947.37,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[73263.16,0,0],[73578.9453,0,0],[73894.7344,3,0],[74210.52,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[74526.31,2,0],[75157.89,2,0],[75473.68,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[75789.47,0,0],[76105.26,0,0],[76421.05,3,0],[76736.8359,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[77052.625,2,0],[77684.2,2,0],[78000,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78315.79,0,0],[78631.58,0,0],[78947.37,3,0],[79263.16,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[79578.9453,2,0],[80210.52,2,0],[80526.31,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80842.1,2,0],[81473.68,0,0],[81631.58,3,0],[81789.47,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[82105.26,2,0],[82736.8359,0,0],[82894.7344,3,0],[83052.625,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[83368.4141,2,0],[84000,0,0],[84157.89,3,0],[84315.79,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[84631.58,2,0],[85263.16,0,0],[85421.05,3,0],[85578.9453,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[85894.7344,2,0],[86526.31,0,0],[86684.2,3,0],[86842.1,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[87157.89,2,0],[87789.47,0,0],[87947.37,3,0],[88105.26,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[88421.05,2,0],[89052.625,0,0],[89210.52,3,0],[89368.4141,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[89684.2,2,0],[90315.79,0,0],[90473.68,3,0],[90631.58,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[90947.37,3,157.89473],[91578.9453,1,157.89473],[91894.7344,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[92210.52,3,0],[92684.2,3,0],[93157.89,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[93473.68,3,0],[93789.47,3,0],[94105.26,1,0],[94421.05,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[94736.8359,3,0],[95210.52,3,0],[95684.2,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[95999.99,3,157.89473],[96631.58,1,157.89473],[96947.37,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[97263.16,3,0],[97736.8359,3,0],[98210.52,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[98526.31,3,0],[98842.1,3,0],[99157.89,1,0],[99473.68,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[99789.47,3,0],[100263.156,3,0],[100736.836,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":190,"changeBPM":false,"mustHitSection":true}],"player2":"spirit","song":"Thorns","stage":"schoolEvil","needsVoices":true,"validScore":true,"noteStyle":"pixel","bpm":190,"speed":1.1}}
\ No newline at end of file
diff --git a/assets/preload/data/thorns/thorns-hard.json b/assets/preload/data/thorns/thorns-hard.json
deleted file mode 100644
index 9500bdc570..0000000000
--- a/assets/preload/data/thorns/thorns-hard.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-pixel","gfVersion":"gf-pixel","notes":[{"sectionNotes":[[0,3,157.89473],[315.789459,3,0],[473.6842,3,0],[631.5789,1,157.89473],[947.3684,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[1263.15784,3,0],[1578.94727,1,0],[1736.842,3,0],[2052.63159,1,0],[2210.52612,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[2526.31567,3,0],[2684.21045,3,0],[2842.10522,3,0],[2999.99976,3,0],[3157.89453,1,0],[3315.78931,1,0],[3473.684,0,0],[3631.57886,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[3789.47363,3,0],[4105.263,1,0],[4263.15771,3,0],[4578.94727,1,0],[4736.842,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5052.63135,3,157.89473],[5368.421,3,0],[5526.31543,3,0],[5684.21045,1,157.89473],[5999.99951,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[6315.789,3,0],[6631.57861,1,0],[6789.473,3,0],[7105.2627,1,0],[7263.15771,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[7578.94727,3,0],[7736.842,3,0],[7894.73633,3,0],[8052.63135,3,0],[8210.526,1,0],[8368.421,1,0],[8526.315,0,0],[8684.21,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[8842.10449,3,0],[9157.895,1,0],[9315.789,3,0],[9631.578,1,0],[9789.474,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[10105.2627,2,157.89473],[10421.0518,1,78.9473648],[10736.8418,2,0],[10894.7363,3,0],[11052.6309,1,78.9473648]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[11368.4209,2,157.89473],[11684.21,1,0],[11842.1045,2,157.89473],[12157.8945,1,0],[12315.7891,2,157.89473]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[12631.5781,2,157.89473],[12947.3682,1,78.9473648],[13263.1572,2,0],[13421.0518,3,0],[13578.9463,1,78.9473648]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[13894.7363,2,157.89473],[14210.5254,1,0],[14368.42,2,157.89473],[14684.21,1,0],[14842.1045,0,157.89473]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15157.8945,2,157.89473],[15473.6836,1,78.9473648],[15789.4727,2,0],[15947.3682,3,0],[16105.2627,1,78.9473648]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[16421.0527,2,157.89473],[16736.8418,1,0],[16894.7363,2,157.89473],[17210.5254,1,0],[17368.42,2,157.89473]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[17684.209,2,157.89473],[18000,1,78.9473648],[18315.79,2,0],[18473.6836,3,0],[18631.5781,1,78.9473648]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[18947.3672,2,157.89473],[19263.1563,1,0],[19421.05,2,157.89473],[19736.8418,1,0],[19894.7363,0,157.89473]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[20210.5254,1,0],[20368.42,0,0],[20526.3145,3,0],[20684.209,1,0],[20842.1035,0,0],[21000,3,0],[21157.8945,1,0],[21315.79,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[21473.6836,2,0],[21631.5781,1,0],[21789.4727,0,0],[21947.3672,2,0],[22105.2617,1,0],[22263.1563,0,0],[22421.05,3,0],[22578.9473,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[22736.8418,1,0],[22894.7363,0,0],[23052.63,3,0],[23210.5254,1,0],[23368.42,0,0],[23526.3145,3,0],[23684.209,1,0],[23842.1035,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[23999.998,2,0],[24157.8945,1,0],[24315.79,0,0],[24473.6836,2,0],[24631.5781,1,0],[24789.4727,7,0],[24789.4727,0,0],[24947.3672,6,0],[24947.3672,3,0],[25105.2617,4,0],[25105.2617,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[25263.1563,1,0],[25421.05,0,0],[25578.9453,3,0],[25736.8418,1,0],[25894.7363,0,0],[26052.63,3,0],[26210.5254,1,0],[26368.42,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[26526.3145,2,0],[26684.209,1,0],[26842.1035,0,0],[26999.998,2,0],[27157.8926,1,0],[27315.79,0,0],[27473.6836,3,0],[27631.5781,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[27789.4727,1,0],[27947.3672,0,0],[28105.2617,3,0],[28263.1563,1,0],[28421.05,0,0],[28578.9453,3,0],[28736.84,1,0],[28894.7363,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[29052.63,2,0],[29210.5254,1,0],[29368.42,0,0],[29526.3145,2,0],[29684.209,1,0],[29842.1035,0,0],[29999.998,3,0],[30157.8926,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30315.79,2,0],[30473.6836,0,0],[30631.5781,3,0],[30789.4727,1,0],[30947.3672,3,236.8421],[31263.1563,0,0],[31421.05,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[31578.9453,0,0],[31736.84,2,0],[31894.7363,0,0],[32052.63,1,0],[32210.5254,3,236.8421],[32526.3145,1,0],[32684.209,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[32842.1055,0,0],[33000,2,0],[33157.8945,0,0],[33315.79,3,0],[33473.6836,0,0],[33631.58,2,0],[33789.4727,3,0],[33947.3672,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[34105.26,1,0],[34263.1563,0,0],[34421.05,1,0],[34578.9453,3,0],[34736.84,1,0],[34894.7344,0,0],[35052.63,1,236.8421]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[35368.418,2,0],[35526.3125,0,0],[35684.207,3,0],[35842.1055,1,0],[36000,3,236.8421],[36315.79,0,0],[36473.6836,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[36631.58,0,0],[36789.4727,2,0],[36947.3672,0,0],[37105.26,1,0],[37263.1563,3,236.8421],[37578.9453,1,0],[37736.84,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[37894.7344,0,0],[38052.63,2,0],[38210.5234,0,0],[38368.418,3,0],[38526.3125,0,0],[38684.207,2,0],[38842.1,3,0],[39000,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[39157.8945,1,0],[39315.79,0,0],[39473.6836,1,0],[39631.58,3,0],[39789.4727,1,0],[39947.3672,0,0],[40105.26,1,236.8421]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[40421.05,0,0],[40578.9453,1,0],[40736.84,0,0],[40894.7344,2,0],[41052.63,3,0],[41210.5234,1,0],[41368.418,0,0],[41526.3125,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[41684.207,2,0],[41842.1,0,0],[42000,1,0],[42157.8945,0,0],[42315.79,2,0],[42473.6836,3,0],[42631.58,0,0],[42789.4727,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[42947.3672,0,0],[43105.26,1,0],[43263.1563,0,0],[43421.05,2,0],[43578.9453,3,0],[43736.84,1,0],[43894.7344,0,0],[44052.63,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[44210.5234,2,0],[44368.418,0,0],[44526.3125,1,0],[44684.207,0,0],[44842.1,2,0],[44999.9961,0,0],[45157.8945,3,0],[45315.79,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[45473.6836,0,0],[45631.58,1,0],[45789.4727,0,0],[45947.3672,2,0],[46105.26,3,0],[46263.1563,1,0],[46421.05,0,0],[46578.9453,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[46736.84,2,0],[46894.7344,0,0],[47052.63,1,0],[47210.5234,0,0],[47368.418,2,0],[47526.3125,3,0],[47684.207,0,0],[47842.1,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[47999.9961,0,0],[48157.89,1,0],[48315.79,0,0],[48473.6836,2,0],[48631.58,3,0],[48789.4727,1,0],[48947.3672,0,0],[49105.26,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[49263.1563,2,0],[49421.05,0,0],[49578.9453,1,0],[49736.84,0,0],[49894.7344,2,0],[50052.63,0,0],[50210.5234,3,0],[50368.418,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[50526.3125,3,157.89473],[50842.1,3,0],[50999.9961,3,0],[51157.89,1,157.89473],[51473.6836,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[51789.4727,3,0],[52105.26,1,0],[52263.1563,3,0],[52578.9453,1,0],[52736.84,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[53052.63,3,0],[53210.5234,3,0],[53368.418,3,0],[53526.3125,3,0],[53684.207,1,0],[53842.1,1,0],[53999.9961,0,0],[54157.89,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[54315.7852,3,0],[54631.58,1,0],[54789.4727,3,0],[55105.26,1,0],[55263.1563,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[55578.9453,3,157.89473],[55894.7344,3,0],[56052.63,3,0],[56210.5234,1,157.89473],[56526.3125,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56842.1,3,0],[57157.89,1,0],[57315.7852,3,0],[57631.58,1,0],[57789.4727,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[58105.26,3,0],[58263.1563,3,0],[58421.05,3,0],[58578.9453,3,0],[58736.84,1,0],[58894.7344,1,0],[59052.63,0,0],[59210.5234,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[59368.418,3,0],[59684.207,1,0],[59842.1,3,0],[60157.89,1,0],[60315.7852,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[60631.58,2,0],[60789.4727,0,0],[60947.3672,3,0],[61105.26,1,0],[61263.1563,3,0],[61421.05,3,0],[61578.9453,0,0],[61736.84,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61894.7344,0,0],[62052.63,2,0],[62210.5234,0,0],[62368.418,1,0],[62526.3125,3,0],[62684.207,3,0],[62842.1,1,0],[62999.9961,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[63157.89,0,0],[63315.7852,2,0],[63473.68,0,0],[63631.5742,3,0],[63789.4727,0,0],[63947.3672,2,0],[64105.26,3,0],[64263.1563,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[64421.05,1,0],[64578.9453,0,0],[64736.84,1,0],[64894.7344,3,0],[65052.63,1,0],[65210.5234,0,0],[65368.418,1,236.8421]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[65684.21,2,0],[65842.1,0,0],[66000,3,0],[66157.89,1,0],[66315.79,3,0],[66473.68,3,0],[66631.58,0,0],[66789.47,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[66947.37,0,0],[67105.26,2,0],[67263.16,0,0],[67421.05,1,0],[67578.9453,3,0],[67736.8359,3,0],[67894.7344,1,0],[68052.625,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[68210.52,0,0],[68368.4141,2,0],[68526.31,0,0],[68684.21,3,0],[68842.1,0,0],[69000,2,0],[69157.89,3,0],[69315.79,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[69473.68,1,0],[69631.58,0,0],[69789.47,1,0],[69947.37,3,0],[70105.26,1,0],[70263.16,0,0],[70421.05,1,236.8421]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[70736.8359,0,0],[70894.7344,1,0],[71052.625,0,0],[71210.52,2,0],[71368.4141,3,0],[71526.31,1,0],[71684.21,0,0],[71842.1,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72000,2,0],[72157.89,0,0],[72315.79,1,0],[72473.68,0,0],[72631.58,2,0],[72789.47,3,0],[72947.37,0,0],[73105.26,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[73263.16,0,0],[73421.05,1,0],[73578.9453,0,0],[73736.8359,2,0],[73894.7344,3,0],[74052.625,1,0],[74210.52,0,0],[74368.4141,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[74526.31,2,0],[74684.21,0,0],[74842.1,1,0],[75000,0,0],[75157.89,2,0],[75315.79,0,0],[75473.68,3,0],[75631.58,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[75789.47,0,0],[75947.37,1,0],[76105.26,0,0],[76263.16,2,0],[76421.05,3,0],[76578.9453,1,0],[76736.8359,0,0],[76894.7344,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[77052.625,2,0],[77210.52,0,0],[77368.4141,1,0],[77526.31,0,0],[77684.2,2,0],[77842.1,3,0],[78000,0,0],[78157.89,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78315.79,0,0],[78473.68,1,0],[78631.58,0,0],[78789.47,2,0],[78947.37,3,0],[79105.26,1,0],[79263.16,0,0],[79421.05,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[79578.9453,2,0],[79736.8359,0,0],[79894.7344,1,0],[80052.625,0,0],[80210.52,2,0],[80368.4141,0,0],[80526.31,3,0],[80684.2,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80842.1,2,0],[81000,3,0],[81157.89,1,0],[81315.79,3,0],[81473.68,0,0],[81631.58,3,0],[81789.47,1,0],[81947.37,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[82105.26,2,0],[82263.16,3,0],[82421.05,1,0],[82578.9453,3,0],[82736.8359,0,0],[82894.7344,3,0],[83052.625,1,0],[83210.52,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[83368.4141,2,0],[83526.31,3,0],[83684.2,1,0],[83842.1,3,0],[84000,0,0],[84157.89,3,0],[84315.79,1,0],[84473.68,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[84631.58,2,0],[84789.47,3,0],[84947.37,1,0],[85105.26,3,0],[85263.16,0,0],[85421.05,3,0],[85578.9453,1,0],[85736.8359,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[85894.7344,2,0],[86052.625,3,0],[86210.52,1,0],[86368.4141,3,0],[86526.31,0,0],[86684.2,3,0],[86842.1,1,0],[86999.99,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[87157.89,2,0],[87315.79,3,0],[87473.68,1,0],[87631.58,3,0],[87789.47,0,0],[87947.37,3,0],[88105.26,1,0],[88263.16,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[88421.05,2,0],[88578.9453,3,0],[88736.8359,1,0],[88894.7344,3,0],[89052.625,0,0],[89210.52,3,0],[89368.4141,1,0],[89526.31,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[89684.2,2,0],[89842.1,3,0],[89999.99,1,0],[90157.89,3,0],[90315.79,0,0],[90473.68,3,0],[90631.58,1,0],[90789.47,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[90947.37,3,157.89473],[91263.16,3,0],[91421.05,3,0],[91578.9453,1,157.89473],[91894.7344,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[92210.52,3,0],[92526.31,1,0],[92684.2,3,0],[92999.99,1,0],[93157.89,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[93473.68,3,0],[93631.58,3,0],[93789.47,3,0],[93947.37,3,0],[94105.26,1,0],[94263.16,1,0],[94421.05,0,0],[94578.9453,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[94736.8359,3,0],[95052.625,1,0],[95210.52,3,0],[95526.31,1,0],[95684.2,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[95999.99,3,157.89473],[96315.78,3,0],[96473.68,3,0],[96631.58,1,157.89473],[96947.37,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[97263.16,3,0],[97578.9453,1,0],[97736.8359,3,0],[98052.625,1,0],[98210.52,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[98526.31,3,0],[98684.2,3,0],[98842.1,3,0],[98999.99,3,0],[99157.89,1,0],[99315.78,1,0],[99473.68,0,0],[99631.58,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[99789.47,3,0],[100105.258,1,0],[100263.156,3,0],[100578.945,1,0],[100736.836,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":190,"changeBPM":false,"mustHitSection":true}],"player2":"spirit","song":"Thorns","stage":"schoolEvil","needsVoices":true,"validScore":true,"noteStyle":"pixel","bpm":190,"speed":1.5}}
\ No newline at end of file
diff --git a/assets/preload/data/thorns/thorns.json b/assets/preload/data/thorns/thorns.json
deleted file mode 100644
index 21c0a0de5d..0000000000
--- a/assets/preload/data/thorns/thorns.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-pixel","gfVersion":"gf-pixel","notes":[{"sectionNotes":[[0,3,157.89473],[631.5789,1,157.89473],[947.3684,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[1263.15784,3,0],[1578.94727,1,0],[1736.842,3,0],[2052.63159,1,0],[2210.52612,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[2526.31567,3,0],[2842.10522,3,0],[3157.89453,1,0],[3473.684,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[3789.47363,3,0],[4105.263,1,0],[4263.15771,3,0],[4578.94727,1,0],[4736.842,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[5052.63135,3,157.89473],[5684.21045,1,157.89473],[5999.99951,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[6315.789,3,0],[6631.57861,1,0],[6789.473,3,0],[7105.2627,1,0],[7263.15771,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[7578.94727,3,0],[7894.73633,3,0],[8210.526,1,0],[8526.315,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[8842.10449,3,0],[9157.895,1,0],[9315.789,3,0],[9631.578,1,0],[9789.474,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[10105.2627,2,157.89473],[10736.8418,2,0],[10894.7363,3,0],[11052.6309,1,78.9473648]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[11368.4209,2,157.89473],[11842.1045,2,157.89473],[12315.7891,2,157.89473]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[12631.5781,2,157.89473],[13263.1572,2,0],[13421.0518,3,0],[13578.9463,1,78.9473648]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[13894.7363,2,157.89473],[14368.42,2,157.89473],[14842.1045,0,157.89473]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15157.8945,2,157.89473],[15789.4727,2,0],[15947.3682,3,0],[16105.2627,1,78.9473648]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[16421.0527,2,157.89473],[16894.7363,2,157.89473],[17368.42,2,157.89473]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[17684.209,2,157.89473],[18315.79,2,0],[18473.6836,3,0],[18631.5781,1,78.9473648]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[18947.3672,2,157.89473],[19421.05,2,157.89473],[19894.7363,0,157.89473]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[20210.5254,1,0],[20526.3145,3,0],[20684.209,1,0],[21000,3,0],[21157.8945,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[21473.6836,2,0],[21631.5781,1,0],[21947.3672,2,0],[22105.2617,1,0],[22421.05,3,0],[22578.9473,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[22736.8418,1,0],[23052.63,3,0],[23210.5254,1,0],[23526.3145,3,0],[23684.209,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[23999.998,2,0],[24157.8945,1,0],[24473.6836,2,0],[24631.5781,1,0],[24789.4727,7,0],[24947.3672,6,0],[24947.3672,3,0],[25105.2617,4,0],[25105.2617,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[25263.1563,1,0],[25578.9453,3,0],[25736.8418,1,0],[26052.63,3,0],[26210.5254,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[26526.3145,2,0],[26684.209,1,0],[26999.998,2,0],[27157.8926,1,0],[27473.6836,3,0],[27631.5781,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[27789.4727,1,0],[28105.2617,3,0],[28263.1563,1,0],[28578.9453,3,0],[28736.84,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[29052.63,2,0],[29210.5254,1,0],[29526.3145,2,0],[29684.209,1,0],[29999.998,3,0],[30157.8926,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30315.79,2,0],[30631.5781,3,0],[30789.4727,1,0],[30947.3672,3,0],[31263.1563,0,0],[31421.05,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[31578.9453,0,0],[31894.7363,0,0],[32052.63,1,0],[32210.5254,3,0],[32526.3145,1,0],[32684.209,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[32842.1055,0,0],[33157.8945,0,0],[33315.79,3,0],[33473.6836,0,0],[33789.4727,3,0],[33947.3672,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[34105.26,1,0],[34421.05,1,0],[34578.9453,3,0],[34736.84,1,0],[35052.63,1,236.8421]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[35368.418,2,0],[35684.207,3,0],[35842.1055,1,0],[36000,3,0],[36315.79,0,0],[36473.6836,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[36631.58,0,0],[36947.3672,0,0],[37105.26,1,0],[37263.1563,3,0],[37578.9453,1,0],[37736.84,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[37894.7344,0,0],[38210.5234,0,0],[38368.418,3,0],[38526.3125,0,0],[38842.1,3,0],[39000,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[39157.8945,1,0],[39473.6836,1,0],[39631.58,3,0],[39789.4727,1,0],[40105.26,1,236.8421]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[40421.05,0,0],[40736.84,0,0],[41052.63,3,0],[41210.5234,1,0],[41368.418,0,0],[41526.3125,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[41684.207,2,0],[42000,1,0],[42315.79,2,0],[42473.6836,3,0],[42631.58,0,0],[42789.4727,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[42947.3672,0,0],[43263.1563,0,0],[43578.9453,3,0],[43736.84,1,0],[43894.7344,0,0],[44052.63,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[44210.5234,2,0],[44526.3125,1,0],[44842.1,2,0],[44999.9961,0,0],[45157.8945,3,0],[45315.79,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[45473.6836,0,0],[45789.4727,0,0],[46105.26,3,0],[46263.1563,1,0],[46421.05,0,0],[46578.9453,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[46736.84,2,0],[47052.63,1,0],[47368.418,2,0],[47526.3125,3,0],[47684.207,0,0],[47842.1,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[47999.9961,0,0],[48315.79,0,0],[48631.58,3,0],[48789.4727,1,0],[48947.3672,0,0],[49105.26,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[49263.1563,2,0],[49578.9453,1,0],[49894.7344,2,0],[50052.63,0,0],[50210.5234,3,0],[50368.418,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[50526.3125,3,157.89473],[51157.89,1,157.89473],[51473.6836,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[51789.4727,3,0],[52105.26,1,0],[52263.1563,3,0],[52578.9453,1,0],[52736.84,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[53052.63,3,0],[53368.418,3,0],[53684.207,1,0],[53999.9961,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[54315.7852,3,0],[54631.58,1,0],[54789.4727,3,0],[55105.26,1,0],[55263.1563,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[55578.9453,3,157.89473],[56210.5234,1,157.89473],[56526.3125,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56842.1,3,0],[57157.89,1,0],[57315.7852,3,0],[57631.58,1,0],[57789.4727,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[58105.26,3,0],[58421.05,3,0],[58736.84,1,0],[59052.63,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[59368.418,3,0],[59684.207,1,0],[59842.1,3,0],[60157.89,1,0],[60315.7852,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[60631.58,2,0],[60947.3672,3,0],[61105.26,1,0],[61263.1563,3,0],[61578.9453,0,0],[61736.84,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[61894.7344,0,0],[62210.5234,0,0],[62368.418,1,0],[62526.3125,3,0],[62842.1,1,0],[62999.9961,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[63157.89,0,0],[63473.68,0,0],[63631.5742,3,0],[63789.4727,0,0],[64105.26,3,0],[64263.1563,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[64421.05,1,0],[64736.84,1,0],[64894.7344,3,0],[65052.63,1,0],[65368.418,1,236.8421]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[65684.21,2,0],[66000,3,0],[66157.89,1,0],[66315.79,3,0],[66631.58,0,0],[66789.47,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[66947.37,0,0],[67263.16,0,0],[67421.05,1,0],[67578.9453,3,0],[67894.7344,1,0],[68052.625,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[68210.52,0,0],[68526.31,0,0],[68684.21,3,0],[68842.1,0,0],[69157.89,3,0],[69315.79,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[69473.68,1,0],[69789.47,1,0],[69947.37,3,0],[70105.26,1,0],[70421.05,1,236.8421]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[70736.8359,0,0],[71052.625,0,0],[71368.4141,3,0],[71526.31,1,0],[71684.21,0,0],[71842.1,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72000,2,0],[72315.79,1,0],[72631.58,2,0],[72789.47,3,0],[72947.37,0,0],[73105.26,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[73263.16,0,0],[73578.9453,0,0],[73894.7344,3,0],[74052.625,1,0],[74210.52,0,0],[74368.4141,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[74526.31,2,0],[74842.1,1,0],[75157.89,2,0],[75315.79,0,0],[75473.68,3,0],[75631.58,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[75789.47,0,0],[76105.26,0,0],[76421.05,3,0],[76578.9453,1,0],[76736.8359,0,0],[76894.7344,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[77052.625,2,0],[77368.4141,1,0],[77684.2,2,0],[77842.1,3,0],[78000,0,0],[78157.89,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78315.79,0,0],[78631.58,0,0],[78947.37,3,0],[79105.26,1,0],[79263.16,0,0],[79421.05,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[79578.9453,2,0],[79894.7344,1,0],[80210.52,2,0],[80368.4141,0,0],[80526.31,3,0],[80684.2,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80842.1,2,0],[81157.89,1,0],[81473.68,0,0],[81631.58,3,0],[81789.47,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[82105.26,2,0],[82421.05,1,0],[82736.8359,0,0],[82894.7344,3,0],[83052.625,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[83368.4141,2,0],[83684.2,1,0],[84000,0,0],[84157.89,3,0],[84315.79,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[84631.58,2,0],[84947.37,1,0],[85263.16,0,0],[85421.05,3,0],[85578.9453,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[85894.7344,2,0],[86210.52,1,0],[86526.31,0,0],[86684.2,3,0],[86842.1,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[87157.89,2,0],[87473.68,1,0],[87789.47,0,0],[87947.37,3,0],[88105.26,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[88421.05,2,0],[88736.8359,1,0],[89052.625,0,0],[89210.52,3,0],[89368.4141,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[89684.2,2,0],[89999.99,1,0],[90315.79,0,0],[90473.68,3,0],[90631.58,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[90947.37,3,157.89473],[91578.9453,1,157.89473],[91894.7344,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[92210.52,3,0],[92526.31,1,0],[92684.2,3,0],[92999.99,1,0],[93157.89,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[93473.68,3,0],[93789.47,3,0],[94105.26,1,0],[94421.05,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[94736.8359,3,0],[95052.625,1,0],[95210.52,3,0],[95526.31,1,0],[95684.2,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[95999.99,3,157.89473],[96631.58,1,157.89473],[96947.37,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[97263.16,3,0],[97578.9453,1,0],[97736.8359,3,0],[98052.625,1,0],[98210.52,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[98526.31,3,0],[98842.1,3,0],[99157.89,1,0],[99473.68,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[99789.47,3,0],[100105.258,1,0],[100263.156,3,0],[100578.945,1,0],[100736.836,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":190,"changeBPM":false,"mustHitSection":true}],"player2":"spirit","song":"Thorns","stage":"schoolEvil","needsVoices":true,"validScore":true,"noteStyle":"pixel","bpm":190,"speed":1.3}}
\ No newline at end of file
diff --git a/assets/preload/data/tutorial/0.offset b/assets/preload/data/tutorial/0.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/tutorial/0.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/tutorial/tutorial-easy.json b/assets/preload/data/tutorial/tutorial-easy.json
deleted file mode 100644
index b5a64ec3aa..0000000000
--- a/assets/preload/data/tutorial/tutorial-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"song":"Tutorial","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":[[9600,0,0],[10800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[12000,0,0],[13200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[14400,0,0],[15600,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[16800,0,0],[18000,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[19200,2,0],[20400,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[21600,2,0],[22800,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[24000,2,0],[25200,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[26400,2,0],[27600,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[28800,0,0],[30000,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[31200,1,0],[32400,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[33600,0,0],[34800,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[36000,1,0],[37200,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[38400,1,0],[39000,1,0],[39600,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[40800,1,0],[41400,1,0],[42000,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[43200,1,0],[43800,1,0],[44400,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[45600,1,0],[46200,1,0],[46800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[48000,1,0],[48300,2,0],[48600,3,0],[48900,2,0],[49800,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[50400,1,0],[50700,2,0],[51000,3,0],[51300,2,0],[52200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[52800,3,0],[53400,1,0],[54000,0,0],[54600,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[55200,2,0],[55800,3,0],[56400,0,0],[57000,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[57600,1,750]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]}],"bpm":100,"sections":0,"needsVoices":false,"player1":"bf","player2":"gf","sectionLengths":[],"speed":1},"bpm":100,"sections":27,"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":[[9600,0,0],[10800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[12000,0,0],[13200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[14400,0,0],[15600,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[16800,0,0],[18000,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[19200,2,0],[20400,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[21600,2,0],[22800,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[24000,2,0],[25200,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[26400,2,0],[27600,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[28800,0,0],[30000,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[31200,1,0],[32400,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[33600,0,0],[34800,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[36000,1,0],[37200,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[38400,1,0],[39000,1,0],[39600,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[40800,1,0],[41400,1,0],[42000,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[43200,1,0],[43800,1,0],[44400,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[45600,1,0],[46200,1,0],[46800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[48000,1,0],[48300,2,0],[48600,3,0],[48900,2,0],[49800,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[50400,1,0],[50700,2,0],[51000,3,0],[51300,2,0],[52200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[52800,3,0],[53400,1,0],[54000,0,0],[54600,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[55200,2,0],[55800,3,0],[56400,0,0],[57000,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[57600,1,750]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]}]}
\ No newline at end of file
diff --git a/assets/preload/data/tutorial/tutorial-hard.json b/assets/preload/data/tutorial/tutorial-hard.json
deleted file mode 100644
index 10d4e0c27f..0000000000
--- a/assets/preload/data/tutorial/tutorial-hard.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"song":"Tutorial","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":[[9600,0,0],[10800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[12000,0,0],[13200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[14400,0,0],[15600,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[16800,0,0],[18000,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[19200,2,0],[20400,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[21600,2,0],[22800,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[24000,2,0],[25200,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[26400,2,0],[27600,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[28800,0,0],[30000,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[31200,1,0],[32400,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[33600,0,0],[34800,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[36000,1,0],[37200,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[38400,1,0],[39000,1,0],[39600,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[40800,1,0],[41400,1,0],[42000,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[43200,1,0],[43800,1,0],[44400,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[45600,1,0],[46200,1,0],[46800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[48000,1,0],[48300,2,0],[48600,3,0],[48900,2,0],[49800,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[50400,1,0],[50700,2,0],[51000,3,0],[51300,2,0],[52200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[52800,3,0],[53400,1,0],[54000,0,0],[54600,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[55200,2,0],[55800,3,0],[56400,0,0],[57000,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[57600,1,750]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[62400,0,0],[62550,1,0],[62700,2,0],[62850,3,0],[63000,2,0],[63150,1,0],[63300,0,0],[63450,1,0],[63600,2,0],[63750,3,0],[63900,2,0],[64050,3,0],[64200,2,0],[64350,3,0],[64650,0,0],[64500,1,0]]},{"lengthInSteps":16,"bpm":100,"changeBPM":false,"mustHitSection":true,"sectionNotes":[],"typeOfSection":0}],"bpm":100,"sections":0,"needsVoices":false,"player1":"bf","player2":"gf","sectionLengths":[],"speed":1},"bpm":100,"sections":28,"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":[[9600,0,0],[10800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[12000,0,0],[13200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[14400,0,0],[15600,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[16800,0,0],[18000,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[19200,2,0],[20400,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[21600,2,0],[22800,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[24000,2,0],[25200,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[26400,2,0],[27600,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[28800,0,0],[30000,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[31200,1,0],[32400,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[33600,0,0],[34800,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[36000,1,0],[37200,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[38400,1,0],[39000,1,0],[39600,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[40800,1,0],[41400,1,0],[42000,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[43200,1,0],[43800,1,0],[44400,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[45600,1,0],[46200,1,0],[46800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[48000,1,0],[48300,2,0],[48600,3,0],[48900,2,0],[49800,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[50400,1,0],[50700,2,0],[51000,3,0],[51300,2,0],[52200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[52800,3,0],[53400,1,0],[54000,0,0],[54600,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[55200,2,0],[55800,3,0],[56400,0,0],[57000,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[57600,1,750]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[62400,0,0],[62550,1,0],[62700,2,0],[62850,3,0],[63000,2,0],[63150,1,0],[63300,0,0],[63450,1,0],[63600,2,0],[63750,3,0],[63900,2,0],[64050,3,0],[64200,2,0],[64350,3,0],[64650,0,0],[64500,1,0]]},{"lengthInSteps":16,"bpm":100,"changeBPM":false,"mustHitSection":true,"sectionNotes":[],"typeOfSection":0}]}
\ No newline at end of file
diff --git a/assets/preload/data/tutorial/tutorial.json b/assets/preload/data/tutorial/tutorial.json
deleted file mode 100644
index b5a64ec3aa..0000000000
--- a/assets/preload/data/tutorial/tutorial.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"song":"Tutorial","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":[[9600,0,0],[10800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[12000,0,0],[13200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[14400,0,0],[15600,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[16800,0,0],[18000,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[19200,2,0],[20400,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[21600,2,0],[22800,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[24000,2,0],[25200,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[26400,2,0],[27600,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[28800,0,0],[30000,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[31200,1,0],[32400,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[33600,0,0],[34800,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[36000,1,0],[37200,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[38400,1,0],[39000,1,0],[39600,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[40800,1,0],[41400,1,0],[42000,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[43200,1,0],[43800,1,0],[44400,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[45600,1,0],[46200,1,0],[46800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[48000,1,0],[48300,2,0],[48600,3,0],[48900,2,0],[49800,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[50400,1,0],[50700,2,0],[51000,3,0],[51300,2,0],[52200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[52800,3,0],[53400,1,0],[54000,0,0],[54600,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[55200,2,0],[55800,3,0],[56400,0,0],[57000,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[57600,1,750]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]}],"bpm":100,"sections":0,"needsVoices":false,"player1":"bf","player2":"gf","sectionLengths":[],"speed":1},"bpm":100,"sections":27,"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":[[9600,0,0],[10800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[12000,0,0],[13200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[14400,0,0],[15600,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[16800,0,0],[18000,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[19200,2,0],[20400,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[21600,2,0],[22800,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[24000,2,0],[25200,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[26400,2,0],[27600,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[28800,0,0],[30000,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[31200,1,0],[32400,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[33600,0,0],[34800,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[36000,1,0],[37200,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[38400,1,0],[39000,1,0],[39600,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[40800,1,0],[41400,1,0],[42000,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[43200,1,0],[43800,1,0],[44400,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[45600,1,0],[46200,1,0],[46800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[48000,1,0],[48300,2,0],[48600,3,0],[48900,2,0],[49800,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[50400,1,0],[50700,2,0],[51000,3,0],[51300,2,0],[52200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[52800,3,0],[53400,1,0],[54000,0,0],[54600,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[55200,2,0],[55800,3,0],[56400,0,0],[57000,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[57600,1,750]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]}]}
\ No newline at end of file
diff --git a/assets/preload/data/winter-horrorland/0.offset b/assets/preload/data/winter-horrorland/0.offset
deleted file mode 100644
index 0519ecba6e..0000000000
--- a/assets/preload/data/winter-horrorland/0.offset
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/preload/data/winter-horrorland/winter-horrorland-easy.json b/assets/preload/data/winter-horrorland/winter-horrorland-easy.json
deleted file mode 100644
index d082e66a13..0000000000
--- a/assets/preload/data/winter-horrorland/winter-horrorland-easy.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-christmas","gfVersion":"gf-christmas","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[9433.962,0,283.01886],[9811.32,2,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[10566.0381,0,660.3774],[11320.7549,2,660.3774]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[12452.83,0,283.01886],[12830.1885,2,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[13584.9053,1,0],[14339.623,3,283.01886],[14716.9814,2,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15094.34,5,754.717],[15471.6982,0,283.01886],[15849.0566,2,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[16603.7734,0,660.3774],[17358.49,2,660.3774]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[18490.5664,0,283.01886],[18867.9238,2,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[19622.64,1,0],[20377.36,3,283.01886],[20754.7168,2,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[21132.0762,1,283.01886],[21132.0762,5,754.717],[21886.793,2,283.01886],[22264.15,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[22641.51,1,471.69812],[23396.2266,0,0],[23773.584,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[24150.9434,3,283.01886],[24528.3027,2,0],[24905.66,2,0],[25283.02,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[25660.377,1,471.69812],[26415.0938,3,0],[26792.4531,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[27169.81,1,283.01886],[27924.5273,2,283.01886],[28301.8867,3,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[28679.2461,1,471.69812],[29433.9629,0,0],[29811.32,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30188.68,3,283.01886],[30566.0371,2,0],[30943.3965,2,0],[31320.7539,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[31698.1133,1,471.69812],[32452.83,3,0],[32830.1875,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33584.9063,2,0],[33962.2656,0,283.01886],[34528.3,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[35094.34,2,283.01886],[35471.7,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[36603.7734,2,0],[36981.1328,0,283.01886],[37358.4922,1,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[37735.8477,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[39622.64,2,0],[40000,0,283.01886],[40566.04,3,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[41132.0742,2,283.01886],[41509.4336,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[42641.5078,2,0],[43018.8672,0,283.01886],[43396.2266,1,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[43773.5859,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[45283.02,0,283.01886],[46037.7344,2,0],[46415.0938,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[46792.4531,5,283.01886],[47169.8125,0,0],[47547.168,3,0],[47924.5273,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[48301.8867,2,283.01886],[48301.8867,6,849.0566],[48679.2461,0,188.679245],[49056.6055,3,0],[49433.96,3,0],[49622.64,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49937.1055,2,0],[50188.68,2,0],[50440.25,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[51320.7539,0,283.01886],[52075.4727,2,0],[52452.832,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[52830.1875,5,283.01886],[53207.5469,0,0],[53584.9063,3,0],[53962.2656,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[54339.62,6,1132.07544],[54339.62,2,283.01886],[54716.98,0,188.679245],[55094.34,3,0],[55471.7,3,0],[55660.38,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56037.7344,2,0],[56415.0938,2,0],[56603.7734,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[57547.168,2,0],[58113.207,2,0],[58490.5664,2,0],[58679.2461,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[58867.9258,1,0],[59245.28,3,283.01886],[59622.64,2,0],[60000,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[60566.04,2,0],[61132.0742,2,0],[61509.4336,2,0],[61698.1133,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[61886.793,1,0],[62264.1523,3,283.01886],[62641.5078,2,0],[63018.8672,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[63396.2266,3,0],[63773.5859,1,283.01886],[64150.94,0,0],[64528.3,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[64905.66,4,0],[64905.66,3,0],[65283.02,1,283.01886],[65660.375,0,0],[66037.7344,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[66415.09,0,0],[66415.09,4,0],[66981.13,7,0],[66981.13,3,0],[67358.49,6,0],[67358.49,2,0],[67735.85,5,754.717],[67735.85,1,754.717]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[69622.64,0,0],[70188.68,1,0],[70754.72,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[71132.08,2,0],[71320.76,1,0],[71698.11,2,0],[72075.47,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72452.83,2,283.01886],[72830.19,0,283.01886],[73207.55,3,283.01886],[73584.91,0,0],[73773.5859,1,566.0377]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[74716.9844,3,0],[74905.6641,0,0],[75094.3359,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[75660.375,0,0],[76226.4141,1,0],[76792.45,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[77169.81,2,0],[77358.49,1,0],[77735.85,2,0],[78113.21,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78490.56,2,283.01886],[78867.92,0,283.01886],[79245.28,3,283.01886],[79622.64,0,0],[79811.32,1,566.0377]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80754.72,3,0],[80943.4,0,0],[81132.08,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[81509.44,1,0],[81886.79,3,0],[82264.15,0,0],[82641.51,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[83018.87,1,0],[83396.23,3,0],[83773.5859,0,0],[84150.9453,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[84528.3047,2,0],[84905.6641,2,0],[85094.3359,0,0],[85283.0156,2,0],[85660.375,2,0],[85849.0547,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[86037.7344,2,0],[86415.09,2,0],[86603.77,0,0],[86792.45,2,0],[87169.81,2,0],[87358.49,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[87547.17,3,283.01886],[88113.21,1,283.01886],[88301.88,4,0],[88679.24,7,283.01886],[88679.24,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[89056.6,5,283.01886],[89056.6,3,0],[89433.96,3,0],[89811.32,1,283.01886],[89811.32,7,0],[90188.68,6,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[90566.04,5,283.01886],[90566.04,0,0],[91132.08,3,0],[91698.11,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[92075.47,2,566.0377],[92075.47,6,566.0377],[92830.19,3,566.0377],[92830.19,4,566.0377]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[93773.5859,3,0],[94150.9453,7,0],[94339.625,0,283.01886],[94716.9844,4,283.01886],[94905.6641,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[95283.0156,3,283.01886],[95471.6953,6,283.01886],[95849.0547,4,283.01886],[95849.0547,2,283.01886],[96226.4141,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[96792.45,7,94.33962],[96981.13,6,0],[97169.81,3,94.33962],[97358.49,4,283.01886],[97358.49,2,0],[97735.85,0,283.01886],[97735.85,5,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[98113.21,5,283.01886],[98113.21,0,283.01886],[98490.56,7,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[99811.32,3,0],[100188.68,7,0],[100377.359,0,283.01886],[100754.719,4,283.01886],[100943.4,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[101320.758,3,283.01886],[101509.438,6,283.01886],[101886.789,4,283.01886],[101886.789,2,283.01886],[102264.148,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[102830.188,3,94.33962],[103207.547,7,94.33962],[103396.227,0,283.01886],[103773.586,1,283.01886],[103773.586,4,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[104150.945,5,283.01886],[104150.945,0,283.01886],[104528.305,7,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[105849.055,2,0],[106415.094,2,0],[106792.453,2,0],[106981.133,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[107169.813,1,0],[107547.172,3,283.01886],[107924.531,2,0],[108301.883,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[108867.922,2,0],[109433.961,2,0],[109811.32,2,0],[110000,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[110188.68,1,0],[110566.039,3,283.01886],[110943.4,2,0],[111320.758,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[111698.109,3,0],[112075.469,1,283.01886],[112452.828,0,0],[112830.188,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[113207.547,4,0],[113207.547,3,0],[113584.906,1,283.01886],[113962.266,0,0],[114339.625,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[114716.984,4,0],[114716.984,0,0],[115283.016,3,0],[115283.016,7,0],[115660.375,6,0],[115660.375,2,0],[116037.734,1,754.717],[116037.734,5,754.717]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[117924.531,0,0],[118490.563,1,0],[118867.922,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[119245.281,2,283.01886],[119622.641,3,283.01886],[120000,0,283.01886],[120377.359,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[120754.719,6,754.717],[120943.4,0,0],[121509.438,1,0],[121886.789,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[122264.148,2,283.01886],[122641.508,3,283.01886],[123018.867,0,283.01886],[123396.227,3,754.717]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[123773.586,1,94.33962],[124150.945,3,0],[124528.305,2,283.01886],[124905.664,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[125283.016,2,0],[125283.016,5,283.01886],[125660.375,1,283.01886],[126037.734,3,0],[126415.094,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[126792.453,0,0],[126792.453,4,0],[127358.492,3,0],[127358.492,7,0],[127735.852,6,0],[127735.852,2,0],[128113.211,1,377.3585],[128113.211,5,377.3585]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[129056.6,0,0],[129245.281,3,0],[129433.961,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[129811.32,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":159,"changeBPM":false,"mustHitSection":true}],"player2":"monster-christmas","song":"Winter Horrorland","stage":"mallEvil","needsVoices":true,"validScore":true,"bpm":159,"speed":1}}
\ No newline at end of file
diff --git a/assets/preload/data/winter-horrorland/winter-horrorland-hard.json b/assets/preload/data/winter-horrorland/winter-horrorland-hard.json
deleted file mode 100644
index e9df3f4b09..0000000000
--- a/assets/preload/data/winter-horrorland/winter-horrorland-hard.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-christmas","gfVersion":"gf-christmas","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[9433.962,0,283.01886],[9811.32,2,283.01886],[10188.68,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[10566.0381,0,660.3774],[11320.7549,2,566.0377]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[12452.83,0,283.01886],[12830.1885,2,283.01886],[13207.5469,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[13584.9053,1,0],[14150.9434,2,0],[14339.623,3,283.01886],[14716.9814,2,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15094.34,5,754.717],[15471.6982,0,283.01886],[15849.0566,2,283.01886],[16226.415,3,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[16603.7734,0,660.3774],[17358.49,2,660.3774]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[18490.5664,0,283.01886],[18867.9238,2,283.01886],[19245.2832,3,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[19622.64,1,0],[20188.68,2,0],[20377.36,3,283.01886],[20754.7168,2,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[21132.0762,1,283.01886],[21132.0762,5,754.717],[21509.4336,3,283.01886],[21886.793,2,283.01886],[22264.15,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[22641.51,1,471.69812],[23207.5469,0,0],[23301.8867,2,0],[23396.2266,0,0],[23584.9063,3,0],[23773.584,0,0],[23962.2637,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[24150.9434,3,283.01886],[24528.3027,2,0],[24716.98,0,0],[24905.66,2,0],[25094.34,0,0],[25283.02,2,0],[25471.6973,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[25660.377,1,471.69812],[26226.416,2,0],[26415.0938,3,0],[26603.7734,2,0],[26792.4531,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[27169.81,1,283.01886],[27547.17,3,283.01886],[27924.5273,2,283.01886],[28301.8867,3,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[28679.2461,1,471.69812],[29245.2832,0,0],[29339.623,2,0],[29433.9629,0,0],[29622.64,3,0],[29811.32,0,0],[30000,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30188.68,3,283.01886],[30566.0371,2,0],[30754.7168,0,0],[30943.3965,2,0],[31132.0762,0,0],[31320.7539,2,0],[31509.4336,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[31698.1133,1,471.69812],[32264.15,2,0],[32452.83,3,0],[32641.51,2,0],[32830.1875,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33396.2266,3,0],[33490.5664,3,0],[33584.9063,2,0],[33773.5859,1,0],[33962.2656,0,283.01886],[34528.3,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[35094.34,2,283.01886],[35471.7,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[36415.0938,3,94.33962],[36603.7734,2,94.33962],[36792.4531,1,94.33962],[36981.1328,0,283.01886],[37358.4922,1,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[37735.8477,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[39433.96,3,0],[39528.3,3,0],[39622.64,2,0],[39811.32,1,0],[40000,0,283.01886],[40566.04,3,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[41132.0742,2,283.01886],[41509.4336,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[42452.832,3,94.33962],[42641.5078,2,94.33962],[42830.1875,1,94.33962],[43018.8672,0,283.01886],[43396.2266,1,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[43773.5859,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[45283.02,0,283.01886],[45660.38,1,283.01886],[46037.7344,2,0],[46226.4141,3,0],[46415.0938,2,0],[46603.7734,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[46792.4531,5,283.01886],[47169.8125,0,0],[47547.168,3,0],[47924.5273,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[48301.8867,6,849.0566],[48301.8867,2,283.01886],[48679.2461,0,188.679245],[49056.6055,3,0],[49245.28,0,0],[49339.62,0,0],[49433.96,3,0],[49622.64,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49937.1055,2,0],[50188.68,2,0],[50440.25,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[51320.7539,0,283.01886],[51698.1133,1,283.01886],[52075.4727,2,0],[52264.1523,3,0],[52452.832,2,0],[52641.5078,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[52830.1875,5,283.01886],[53207.5469,0,0],[53584.9063,3,0],[53962.2656,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[54339.62,6,1132.07544],[54339.62,2,188.679245],[54716.98,0,188.679245],[55094.34,3,0],[55283.02,0,0],[55377.36,0,0],[55471.7,3,0],[55660.38,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56037.7344,2,0],[56415.0938,2,0],[56603.7734,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[57547.168,2,0],[57924.5273,2,0],[58018.8672,3,0],[58113.207,2,0],[58301.8867,0,0],[58490.5664,2,0],[58679.2461,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[58867.9258,1,0],[59056.6055,0,0],[59245.28,3,283.01886],[59622.64,2,0],[59811.32,3,0],[60000,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[60566.04,2,0],[60943.3945,2,0],[61037.7344,3,0],[61132.0742,2,0],[61320.7539,0,0],[61509.4336,2,0],[61698.1133,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[61886.793,1,0],[62075.4727,0,0],[62264.1523,3,283.01886],[62641.5078,2,0],[62830.1875,3,0],[63018.8672,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[63396.2266,3,0],[63584.9063,3,0],[63773.5859,1,283.01886],[64150.94,0,0],[64528.3,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[64905.66,4,0],[64905.66,3,0],[65094.34,3,0],[65283.02,1,283.01886],[65660.375,0,0],[65849.0547,0,0],[66037.7344,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[66415.09,4,0],[66415.09,0,0],[66603.77,5,0],[66603.77,1,0],[66981.13,7,0],[66981.13,3,0],[67358.49,6,0],[67358.49,2,0],[67735.85,1,754.717],[67735.85,5,754.717]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[69622.64,0,0],[69716.9844,0,0],[69811.32,3,0],[70188.68,1,0],[70377.36,0,0],[70566.04,2,0],[70754.72,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[71132.08,2,0],[71226.4141,3,0],[71320.76,1,0],[71509.44,0,0],[71698.11,2,0],[71886.79,3,0],[72075.47,0,0],[72264.15,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72452.83,2,283.01886],[72830.19,0,283.01886],[73207.55,3,283.01886],[73584.91,0,0],[73773.5859,1,566.0377]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[74528.3047,0,0],[74716.9844,3,0],[74905.6641,0,0],[75094.3359,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[75660.375,0,0],[75754.72,0,0],[75849.0547,3,0],[76226.4141,1,0],[76415.09,0,0],[76603.77,2,0],[76792.45,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[77169.81,2,0],[77264.15,3,0],[77358.49,1,0],[77547.17,0,0],[77735.85,2,0],[77924.53,3,0],[78113.21,0,0],[78301.88,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78490.56,2,283.01886],[78867.92,0,283.01886],[79245.28,3,283.01886],[79622.64,0,0],[79811.32,1,566.0377]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80566.04,0,0],[80754.72,3,0],[80943.4,0,0],[81132.08,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[81509.44,1,0],[81698.11,1,0],[81886.79,3,0],[82075.47,3,0],[82264.15,0,0],[82452.83,3,0],[82641.51,2,0],[82830.19,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[83018.87,1,0],[83207.55,1,0],[83396.23,3,0],[83584.91,3,0],[83773.5859,0,0],[83962.2656,3,0],[84150.9453,2,0],[84339.625,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[84528.3047,2,0],[84716.9844,3,0],[84905.6641,2,0],[85094.3359,0,0],[85283.0156,2,0],[85471.6953,3,0],[85660.375,2,0],[85849.0547,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[86037.7344,2,0],[86226.4141,3,0],[86415.09,2,0],[86603.77,0,0],[86792.45,2,0],[86981.13,3,0],[87169.81,2,0],[87358.49,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[87547.17,3,283.01886],[87924.53,0,94.33962],[88113.21,1,283.01886],[88301.88,4,0],[88490.56,0,0],[88490.56,7,0],[88679.24,1,0],[88679.24,7,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[89056.6,5,283.01886],[89056.6,3,0],[89433.96,3,0],[89811.32,1,283.01886],[89811.32,7,0],[90000,4,0],[90188.68,6,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[90566.04,5,283.01886],[90566.04,0,0],[91132.08,3,0],[91698.11,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[92075.47,6,566.0377],[92075.47,2,566.0377],[92830.19,3,566.0377],[92830.19,4,566.0377]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[93773.5859,3,0],[93867.92,3,0],[93962.2656,2,0],[94150.9453,1,0],[94150.9453,7,0],[94245.28,7,0],[94339.625,0,283.01886],[94339.625,6,0],[94528.3047,5,0],[94716.9844,4,283.01886],[94905.6641,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[95283.0156,3,283.01886],[95471.6953,6,283.01886],[95849.0547,2,283.01886],[95849.0547,4,283.01886],[96226.4141,0,283.01886],[96226.4141,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[96603.77,3,0],[96792.45,7,94.33962],[96981.13,6,94.33962],[97169.81,5,94.33962],[97169.81,3,94.33962],[97358.49,4,283.01886],[97358.49,2,94.33962],[97547.17,1,94.33962],[97735.85,0,283.01886],[97735.85,5,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[98113.21,5,283.01886],[98113.21,0,283.01886],[98490.56,7,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[99811.32,3,0],[99905.6641,3,0],[100000,2,0],[100188.68,7,0],[100188.68,1,0],[100283.016,7,0],[100377.359,6,0],[100377.359,0,283.01886],[100566.039,5,0],[100754.719,4,283.01886],[100943.4,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[101320.758,3,283.01886],[101509.438,6,283.01886],[101886.789,2,283.01886],[101886.789,4,283.01886],[102264.148,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[102830.188,3,94.33962],[103018.867,2,94.33962],[103207.547,7,94.33962],[103207.547,1,94.33962],[103396.227,0,283.01886],[103396.227,6,94.33962],[103584.906,5,94.33962],[103773.586,1,283.01886],[103773.586,4,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[104150.945,0,283.01886],[104150.945,5,283.01886],[104528.305,7,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[105849.055,2,0],[106226.414,2,0],[106320.758,3,0],[106415.094,2,0],[106603.773,0,0],[106792.453,2,0],[106981.133,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[107169.813,1,0],[107358.492,0,0],[107547.172,3,283.01886],[107924.531,2,0],[108113.211,3,0],[108301.883,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[108867.922,2,0],[109245.281,2,0],[109339.625,3,0],[109433.961,2,0],[109622.641,0,0],[109811.32,2,0],[110000,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[110188.68,1,0],[110377.359,0,0],[110566.039,3,283.01886],[110943.4,2,0],[111132.078,3,0],[111320.758,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[111698.109,3,0],[111886.789,3,0],[112075.469,1,283.01886],[112452.828,0,0],[112830.188,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[113207.547,4,0],[113207.547,3,0],[113396.227,3,0],[113584.906,1,283.01886],[113962.266,0,0],[114150.945,0,0],[114339.625,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[114716.984,0,0],[114716.984,4,0],[114905.664,1,0],[114905.664,5,0],[115283.016,3,0],[115283.016,7,0],[115660.375,2,0],[115660.375,6,0],[116037.734,5,754.717],[116037.734,1,754.717]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[117924.531,0,0],[118301.883,3,0],[118490.563,1,0],[118679.242,0,0],[118867.922,2,0],[119056.6,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[119245.281,2,283.01886],[119622.641,3,283.01886],[120000,0,283.01886],[120377.359,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[120754.719,6,754.717],[120943.4,0,0],[121320.758,3,0],[121509.438,1,0],[121698.109,0,0],[121886.789,2,0],[122075.469,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[122264.148,2,283.01886],[122641.508,3,283.01886],[123018.867,0,283.01886],[123396.227,3,754.717]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[123773.586,1,94.33962],[124150.945,3,0],[124339.625,3,0],[124528.305,2,283.01886],[124905.664,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[125283.016,5,283.01886],[125283.016,2,0],[125471.695,3,0],[125660.375,1,283.01886],[126037.734,3,0],[126226.414,0,0],[126415.094,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[126792.453,0,0],[126792.453,4,0],[126981.133,1,0],[126981.133,5,0],[127358.492,3,0],[127358.492,7,0],[127735.852,2,0],[127735.852,6,0],[128113.211,1,377.3585],[128113.211,5,377.3585]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[129056.6,0,0],[129245.281,3,0],[129433.961,0,0],[129622.641,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[129811.32,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":159,"changeBPM":false,"mustHitSection":true}],"player2":"monster-christmas","song":"Winter Horrorland","stage":"mallEvil","needsVoices":true,"validScore":true,"bpm":159,"speed":1.3}}
\ No newline at end of file
diff --git a/assets/preload/data/winter-horrorland/winter-horrorland.json b/assets/preload/data/winter-horrorland/winter-horrorland.json
deleted file mode 100644
index 43c1e80245..0000000000
--- a/assets/preload/data/winter-horrorland/winter-horrorland.json
+++ /dev/null
@@ -1 +0,0 @@
-{"song":{"player1":"bf-christmas","gfVersion":"gf-christmas","notes":[{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[9433.962,0,283.01886],[9811.32,2,283.01886],[10188.68,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[10566.0381,0,660.3774],[11320.7549,2,660.3774]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[12452.83,0,283.01886],[12830.1885,2,283.01886],[13207.5469,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[13584.9053,1,0],[14339.623,3,283.01886],[14716.9814,2,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[15094.34,5,754.717],[15471.6982,0,283.01886],[15849.0566,2,283.01886],[16226.415,3,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[16603.7734,0,660.3774],[17358.49,2,660.3774]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[18490.5664,0,283.01886],[18867.9238,2,283.01886],[19245.2832,3,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[19622.64,1,0],[20377.36,3,283.01886],[20754.7168,2,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[21132.0762,1,283.01886],[21132.0762,5,754.717],[21509.4336,3,283.01886],[21886.793,2,283.01886],[22264.15,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[22641.51,1,471.69812],[23207.5469,0,0],[23396.2266,0,0],[23773.584,0,0],[23962.2637,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[24150.9434,3,283.01886],[24528.3027,2,0],[24905.66,2,0],[25283.02,2,0],[25471.6973,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[25660.377,1,471.69812],[26226.416,2,0],[26415.0938,3,0],[26603.7734,2,0],[26792.4531,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[27169.81,1,283.01886],[27547.17,3,283.01886],[27924.5273,2,283.01886],[28301.8867,3,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[28679.2461,1,471.69812],[29245.2832,0,0],[29433.9629,0,0],[29811.32,0,0],[30000,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[30188.68,3,283.01886],[30566.0371,2,0],[30943.3965,2,0],[31320.7539,2,0],[31509.4336,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[31698.1133,1,471.69812],[32264.15,2,0],[32452.83,3,0],[32641.51,2,0],[32830.1875,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[33396.2266,3,0],[33584.9063,2,0],[33962.2656,0,283.01886],[34528.3,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[35094.34,2,283.01886],[35471.7,0,283.01886],[35849.0547,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[36603.7734,2,0],[36981.1328,0,283.01886],[37358.4922,1,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[37735.8477,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[39433.96,3,0],[39622.64,2,0],[40000,0,283.01886],[40566.04,3,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[41132.0742,2,283.01886],[41509.4336,0,283.01886],[41886.793,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[42641.5078,2,0],[43018.8672,0,283.01886],[43396.2266,1,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[43773.5859,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[45283.02,0,283.01886],[45660.38,1,283.01886],[46037.7344,2,0],[46415.0938,2,0],[46603.7734,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[46792.4531,5,283.01886],[47169.8125,0,0],[47547.168,3,0],[47924.5273,1,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[48301.8867,2,283.01886],[48301.8867,6,849.0566],[48679.2461,0,188.679245],[49056.6055,3,0],[49245.28,0,0],[49433.96,3,0],[49622.64,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[49937.1055,2,0],[50188.68,2,0],[50440.25,2,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[51320.7539,0,283.01886],[51698.1133,1,283.01886],[52075.4727,2,0],[52452.832,2,0],[52641.5078,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[52830.1875,5,283.01886],[53207.5469,0,0],[53584.9063,3,0],[53962.2656,1,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[54339.62,6,1132.07544],[54339.62,2,188.679245],[54716.98,0,188.679245],[55094.34,3,0],[55283.02,0,0],[55471.7,3,0],[55660.38,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[56037.7344,2,0],[56415.0938,2,0],[56603.7734,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[57547.168,2,0],[57924.5273,2,0],[58113.207,2,0],[58490.5664,2,0],[58679.2461,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[58867.9258,1,0],[59245.28,3,283.01886],[59622.64,2,0],[60000,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[60566.04,2,0],[60943.3945,2,0],[61132.0742,2,0],[61509.4336,2,0],[61698.1133,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[61886.793,1,0],[62264.1523,3,283.01886],[62641.5078,2,0],[63018.8672,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[63396.2266,3,0],[63773.5859,1,283.01886],[64150.94,0,0],[64528.3,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[64905.66,4,0],[64905.66,3,0],[65283.02,1,283.01886],[65660.375,0,0],[66037.7344,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[66415.09,4,0],[66415.09,0,0],[66981.13,7,0],[66981.13,3,0],[67358.49,6,0],[67358.49,2,0],[67735.85,5,754.717],[67735.85,1,754.717]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[69622.64,0,0],[69811.32,3,0],[70188.68,1,0],[70566.04,2,0],[70754.72,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[71132.08,2,0],[71320.76,1,0],[71698.11,2,0],[72075.47,0,0],[72264.15,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[72452.83,2,283.01886],[72830.19,0,283.01886],[73207.55,3,283.01886],[73584.91,0,0],[73773.5859,1,566.0377]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[74528.3047,0,0],[74716.9844,3,0],[74905.6641,0,0],[75094.3359,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[75660.375,0,0],[75849.0547,3,0],[76226.4141,1,0],[76603.77,2,0],[76792.45,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[77169.81,2,0],[77358.49,1,0],[77735.85,2,0],[78113.21,0,0],[78301.88,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[78490.56,2,283.01886],[78867.92,0,283.01886],[79245.28,3,283.01886],[79622.64,0,0],[79811.32,1,566.0377]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[80566.04,0,0],[80754.72,3,0],[80943.4,0,0],[81132.08,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[81509.44,1,0],[81886.79,3,0],[82264.15,0,0],[82641.51,2,0],[82830.19,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[83018.87,1,0],[83396.23,3,0],[83773.5859,0,0],[84150.9453,2,0],[84339.625,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[84528.3047,2,0],[84905.6641,2,0],[85094.3359,0,0],[85283.0156,2,0],[85660.375,2,0],[85849.0547,0,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[86037.7344,2,0],[86415.09,2,0],[86603.77,0,0],[86792.45,2,0],[87169.81,2,0],[87358.49,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[87547.17,3,283.01886],[87924.53,0,94.33962],[88113.21,1,283.01886],[88301.88,4,0],[88679.24,1,0],[88679.24,7,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[89056.6,5,283.01886],[89056.6,3,0],[89433.96,3,0],[89811.32,1,283.01886],[89811.32,7,0],[90188.68,6,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[90566.04,5,283.01886],[90566.04,0,0],[91132.08,3,0],[91698.11,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[92075.47,2,566.0377],[92075.47,6,566.0377],[92830.19,3,566.0377],[92830.19,4,566.0377]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[93773.5859,3,0],[93962.2656,2,0],[94150.9453,7,0],[94339.625,6,0],[94339.625,0,283.01886],[94716.9844,4,283.01886],[94905.6641,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[95283.0156,3,283.01886],[95471.6953,6,283.01886],[95849.0547,2,283.01886],[95849.0547,4,283.01886],[96226.4141,0,283.01886],[96226.4141,7,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[96603.77,3,0],[96981.13,6,0],[97358.49,2,0],[97358.49,4,283.01886],[97735.85,0,283.01886],[97735.85,5,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[98113.21,5,283.01886],[98113.21,0,283.01886],[98490.56,7,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[99811.32,3,0],[100000,2,0],[100188.68,7,0],[100377.359,0,283.01886],[100377.359,6,0],[100754.719,4,283.01886],[100943.4,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[101320.758,3,283.01886],[101509.438,6,283.01886],[101886.789,2,283.01886],[101886.789,4,283.01886],[102264.148,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[102830.188,3,94.33962],[103018.867,2,94.33962],[103207.547,7,94.33962],[103396.227,0,283.01886],[103396.227,6,94.33962],[103773.586,1,283.01886],[103773.586,4,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[104150.945,0,283.01886],[104150.945,5,283.01886],[104528.305,7,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[105849.055,2,0],[106226.414,2,0],[106415.094,2,0],[106792.453,2,0],[106981.133,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[107169.813,1,0],[107547.172,3,283.01886],[107924.531,2,0],[108301.883,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[108867.922,2,0],[109245.281,2,0],[109433.961,2,0],[109811.32,2,0],[110000,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[110188.68,1,0],[110566.039,3,283.01886],[110943.4,2,0],[111320.758,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[111698.109,3,0],[112075.469,1,283.01886],[112452.828,0,0],[112830.188,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[113207.547,3,0],[113207.547,4,0],[113584.906,1,283.01886],[113962.266,0,0],[114339.625,0,283.01886]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[114716.984,4,0],[114716.984,0,0],[115283.016,7,0],[115283.016,3,0],[115660.375,6,0],[115660.375,2,0],[116037.734,5,754.717],[116037.734,1,754.717]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[117924.531,0,0],[118490.563,1,0],[118867.922,2,0],[119056.6,3,0]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[119245.281,2,283.01886],[119622.641,3,283.01886],[120000,0,283.01886],[120377.359,3,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[120754.719,6,754.717],[120943.4,0,0],[121509.438,1,0],[121886.789,2,0],[122075.469,3,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[122264.148,2,283.01886],[122641.508,3,283.01886],[123018.867,0,283.01886],[123396.227,3,754.717]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[123773.586,1,94.33962],[124150.945,3,0],[124528.305,2,283.01886],[124905.664,0,283.01886]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[125283.016,5,283.01886],[125283.016,2,0],[125660.375,1,283.01886],[126037.734,3,0],[126226.414,0,0],[126415.094,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[126792.453,0,0],[126792.453,4,0],[127358.492,3,0],[127358.492,7,0],[127735.852,2,0],[127735.852,6,0],[128113.211,1,377.3585],[128113.211,5,377.3585]],"lengthInSteps":16,"mustHitSection":false},{"sectionNotes":[[129056.6,0,0],[129245.281,3,0],[129433.961,0,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[[129811.32,2,0]],"lengthInSteps":16,"mustHitSection":true},{"sectionNotes":[],"lengthInSteps":16,"mustHitSection":true},{"lengthInSteps":16,"altAnim":false,"typeOfSection":0,"sectionNotes":[],"bpm":159,"changeBPM":false,"mustHitSection":true}],"player2":"monster-christmas","song":"Winter Horrorland","stage":"mallEvil","needsVoices":true,"validScore":true,"bpm":159,"speed":1.1}}
\ No newline at end of file
diff --git a/assets/preload/music/freakyMenu.mp3 b/assets/preload/music/freakyMenu.mp3
deleted file mode 100644
index c8b0a569f2..0000000000
Binary files a/assets/preload/music/freakyMenu.mp3 and /dev/null differ
diff --git a/assets/preload/music/freakyMenu.ogg b/assets/preload/music/freakyMenu.ogg
index a3ac889c2c..372111d6f1 100644
Binary files a/assets/preload/music/freakyMenu.ogg and b/assets/preload/music/freakyMenu.ogg differ
diff --git a/assets/shared/images/characters/bf-carOffsets.txt b/assets/shared/images/characters/bf-carOffsets.txt
index 5bbfae167c..bcabd1951b 100644
--- a/assets/shared/images/characters/bf-carOffsets.txt
+++ b/assets/shared/images/characters/bf-carOffsets.txt
@@ -1,4 +1,5 @@
idle -5 0
+idleHair -5 0
singUP -29 27
singRIGHT -38 -7
singLEFT 12 -6
diff --git a/assets/shared/images/characters/dadOffsets.txt b/assets/shared/images/characters/dadOffsets.txt
index 69ba153a54..87284640e3 100644
--- a/assets/shared/images/characters/dadOffsets.txt
+++ b/assets/shared/images/characters/dadOffsets.txt
@@ -1,4 +1,5 @@
idle 0 0
+idleLoop 0 0
singUP -6 50
singRIGHT 0 27
singLEFT -10 10
diff --git a/assets/shared/images/characters/gf-carOffsets.txt b/assets/shared/images/characters/gf-carOffsets.txt
index 9862aaecd7..7b96a0fe9b 100644
--- a/assets/shared/images/characters/gf-carOffsets.txt
+++ b/assets/shared/images/characters/gf-carOffsets.txt
@@ -1,2 +1,3 @@
+idleHair 0 0
danceLeft 0 0
danceRight 0 0
diff --git a/assets/shared/images/characters/gfOffsets.txt b/assets/shared/images/characters/gfOffsets.txt
deleted file mode 100644
index 05abb7ab84..0000000000
--- a/assets/shared/images/characters/gfOffsets.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-cheer 0 0
-sad -2 -21
-danceLeft 0 -9
-danceRight 0 -9
-singUP 0 4
-singRIGHT 0 -20
-singLEFT 0 -19
-singDOWN 0 -20
-hairBlow 45 -8
-hairFall 0 -9
-scared -2 -17
diff --git a/assets/shared/images/characters/mom-carOffsets.txt b/assets/shared/images/characters/mom-carOffsets.txt
index 65cbecdbeb..1a2ecefcff 100644
--- a/assets/shared/images/characters/mom-carOffsets.txt
+++ b/assets/shared/images/characters/mom-carOffsets.txt
@@ -1,4 +1,5 @@
idle 0 0
+idleHair 0 0
singUP 14 71
singRIGHT 10 -60
singLEFT 250 -23
diff --git a/assets/shared/images/characters/momOffsets.txt b/assets/shared/images/characters/momOffsets.txt
index 65cbecdbeb..512fcfd63d 100644
--- a/assets/shared/images/characters/momOffsets.txt
+++ b/assets/shared/images/characters/momOffsets.txt
@@ -1,4 +1,5 @@
idle 0 0
+idleLoop 0 0
singUP 14 71
singRIGHT 10 -60
singLEFT 250 -23
diff --git a/assets/shared/images/characters/parents-christmasOffsets.txt b/assets/shared/images/characters/parents-christmasOffsets.txt
index bdee13c637..3b4773d5a1 100644
--- a/assets/shared/images/characters/parents-christmasOffsets.txt
+++ b/assets/shared/images/characters/parents-christmasOffsets.txt
@@ -1,4 +1,5 @@
idle 0 0
+idleLoop 0 0
singUP -47 24
singRIGHT -1 -23
singLEFT -30 16
diff --git a/assets/shared/images/noteskins/Arrows-pixel-ends.png b/assets/shared/images/noteskins/Arrows-pixel-ends.png
new file mode 100644
index 0000000000..dd91e4eb8c
Binary files /dev/null and b/assets/shared/images/noteskins/Arrows-pixel-ends.png differ
diff --git a/assets/shared/images/noteskins/Arrows-pixel.png b/assets/shared/images/noteskins/Arrows-pixel.png
new file mode 100644
index 0000000000..a443684327
Binary files /dev/null and b/assets/shared/images/noteskins/Arrows-pixel.png differ
diff --git a/assets/shared/images/NOTE_assets.png b/assets/shared/images/noteskins/Arrows.png
similarity index 100%
rename from assets/shared/images/NOTE_assets.png
rename to assets/shared/images/noteskins/Arrows.png
diff --git a/assets/shared/images/NOTE_assets.xml b/assets/shared/images/noteskins/Arrows.xml
similarity index 99%
rename from assets/shared/images/NOTE_assets.xml
rename to assets/shared/images/noteskins/Arrows.xml
index d3e1257bd3..3663f12879 100644
--- a/assets/shared/images/NOTE_assets.xml
+++ b/assets/shared/images/noteskins/Arrows.xml
@@ -1,5 +1,5 @@

-
+
diff --git a/assets/shared/images/noteskins/Circles-pixel-ends.png b/assets/shared/images/noteskins/Circles-pixel-ends.png
new file mode 100644
index 0000000000..dd91e4eb8c
Binary files /dev/null and b/assets/shared/images/noteskins/Circles-pixel-ends.png differ
diff --git a/assets/shared/images/noteskins/Circles-pixel.png b/assets/shared/images/noteskins/Circles-pixel.png
new file mode 100644
index 0000000000..39cb4d125e
Binary files /dev/null and b/assets/shared/images/noteskins/Circles-pixel.png differ
diff --git a/assets/shared/images/noteskins/Circles.png b/assets/shared/images/noteskins/Circles.png
new file mode 100644
index 0000000000..42471b3f93
Binary files /dev/null and b/assets/shared/images/noteskins/Circles.png differ
diff --git a/assets/shared/images/noteskins/Circles.xml b/assets/shared/images/noteskins/Circles.xml
new file mode 100644
index 0000000000..201584a350
--- /dev/null
+++ b/assets/shared/images/noteskins/Circles.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/shared/sounds/missnote-pixel1.mp3 b/assets/shared/sounds/missnote-pixel1.mp3
new file mode 100644
index 0000000000..b684c1c549
Binary files /dev/null and b/assets/shared/sounds/missnote-pixel1.mp3 differ
diff --git a/assets/shared/sounds/missnote-pixel1.ogg b/assets/shared/sounds/missnote-pixel1.ogg
new file mode 100644
index 0000000000..749d92fa2d
Binary files /dev/null and b/assets/shared/sounds/missnote-pixel1.ogg differ
diff --git a/assets/shared/sounds/missnote-pixel2.mp3 b/assets/shared/sounds/missnote-pixel2.mp3
new file mode 100644
index 0000000000..8133a9effc
Binary files /dev/null and b/assets/shared/sounds/missnote-pixel2.mp3 differ
diff --git a/assets/shared/sounds/missnote-pixel2.ogg b/assets/shared/sounds/missnote-pixel2.ogg
new file mode 100644
index 0000000000..437be91b97
Binary files /dev/null and b/assets/shared/sounds/missnote-pixel2.ogg differ
diff --git a/assets/shared/sounds/missnote-pixel3.mp3 b/assets/shared/sounds/missnote-pixel3.mp3
new file mode 100644
index 0000000000..13d906f633
Binary files /dev/null and b/assets/shared/sounds/missnote-pixel3.mp3 differ
diff --git a/assets/shared/sounds/missnote-pixel3.ogg b/assets/shared/sounds/missnote-pixel3.ogg
new file mode 100644
index 0000000000..087c4841de
Binary files /dev/null and b/assets/shared/sounds/missnote-pixel3.ogg differ
diff --git a/assets/shared/sounds/missnote2.mp3 b/assets/shared/sounds/missnote2.mp3
index e0384ca80b..1442de663c 100644
Binary files a/assets/shared/sounds/missnote2.mp3 and b/assets/shared/sounds/missnote2.mp3 differ
diff --git a/assets/shared/sounds/missnote2.ogg b/assets/shared/sounds/missnote2.ogg
index c38c484989..58b732b85e 100644
Binary files a/assets/shared/sounds/missnote2.ogg and b/assets/shared/sounds/missnote2.ogg differ
diff --git a/assets/shared/sounds/missnote3.mp3 b/assets/shared/sounds/missnote3.mp3
index fe119c9b67..e6a8fd0ff3 100644
Binary files a/assets/shared/sounds/missnote3.mp3 and b/assets/shared/sounds/missnote3.mp3 differ
diff --git a/assets/shared/sounds/missnote3.ogg b/assets/shared/sounds/missnote3.ogg
index 59506db6a0..322b90f6f0 100644
Binary files a/assets/shared/sounds/missnote3.ogg and b/assets/shared/sounds/missnote3.ogg differ
diff --git a/assets/songs/test/Inst.mp3 b/assets/songs/test/Inst.mp3
new file mode 100644
index 0000000000..5b521c0934
Binary files /dev/null and b/assets/songs/test/Inst.mp3 differ
diff --git a/assets/songs/tutorial/Inst.mp3 b/assets/songs/tutorial/Inst.mp3
index 473f008ca4..318c4ed164 100644
Binary files a/assets/songs/tutorial/Inst.mp3 and b/assets/songs/tutorial/Inst.mp3 differ
diff --git a/assets/songs/tutorial/Inst.ogg b/assets/songs/tutorial/Inst.ogg
index 0da44906a7..d0abcb7355 100644
Binary files a/assets/songs/tutorial/Inst.ogg and b/assets/songs/tutorial/Inst.ogg differ
diff --git a/assets/songs/tutorial/Voices.mp3 b/assets/songs/tutorial/Voices.mp3
new file mode 100644
index 0000000000..78328401e7
Binary files /dev/null and b/assets/songs/tutorial/Voices.mp3 differ
diff --git a/assets/songs/tutorial/Voices.ogg b/assets/songs/tutorial/Voices.ogg
new file mode 100644
index 0000000000..c28aa8cc0d
Binary files /dev/null and b/assets/songs/tutorial/Voices.ogg differ
diff --git a/assets/week3/sounds/train_passes.ogg b/assets/week3/sounds/train_passes.ogg
deleted file mode 100644
index f695954f13..0000000000
Binary files a/assets/week3/sounds/train_passes.ogg and /dev/null differ
diff --git a/docs/building.md b/docs/building.md
index d760fb9e81..d4db8b271c 100644
--- a/docs/building.md
+++ b/docs/building.md
@@ -16,20 +16,19 @@
- `haxelib install lime 7.9.0`
- `haxelib install openfl`
- `haxelib install flixel`
- - `haxelib run lime setup`
- - `haxelib run lime setup flixel`
- `haxelib install flixel-tools`
- - `haxelib run flixel-tools setup`
- - `haxelib install flixel-addons`
- `haxelib install flixel-ui`
- `haxelib install hscript`
- - `haxelib install newgrounds`
+ - `haxelib install flixel-addons`
+ - `haxelib install actuate`
+ - `haxelib run lime setup`
+ - `haxelib run lime setup flixel`
+ - `haxelib run flixel-tools setup`
- `haxelib git linc_luajit https://github.com/nebulazorua/linc_luajit.git`
- `haxelib git hxvm-luajit https://github.com/nebulazorua/hxvm-luajit`
- `haxelib git faxe https://github.com/uhrobots/faxe`
- - `haxelib git polymod https://github.com/larsiusprime/polymod.git`
+ - `haxelib git polymod https://github.com/MasterEric/polymod.git`
- `haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc`
- - `haxelib install actuate`
- `haxelib git extension-webm https://github.com/KadeDev/extension-webm`
- `lime rebuild extension-webm `
- Note: for Linux, you need to install the `g++-multilib` and `gcc-multilib` packages respectively. (use apt to install them.)
@@ -64,23 +63,4 @@ Finally, we are ready to build.
- Only the `bin` folder is necessary to run the game. The other ones in `export/release/` are not.
## Troubleshooting
-If you are experiencing one of the common problems below, you can use the provided steps to fix the issue.
-
-### Type not found : StatePointer
-
-If you experience this problem, you may see lines like
-
-```
-source/LuaClass.hx:33: characters 46-58 : Type not found : StatePointer
-```
-
-This problem occurs when running an old version of the libraries that power the Lua-based modcharting system. These libraries were replaced in Kade Engine v1.7.
-
-To fix this issue, run the following commands to reinstall the proper versions:
-
-```
-haxelib remove linc_luajit
-haxelib remove hxvm-luajit
-haxelib git linc_luajit https://github.com/nebulazorua/linc_luajit.git
-haxelib git hxvm-luajit https://github.com/nebulazorua/hxvm-luajit
-```
+Check the **Troubleshooting documentation** if you have problems with these instructions.
diff --git a/docs/changelogs/changelog-1.8.md b/docs/changelogs/changelog-1.8.md
new file mode 100644
index 0000000000..6abbfa4a43
--- /dev/null
+++ b/docs/changelogs/changelog-1.8.md
@@ -0,0 +1,41 @@
+# Latest (master) changelog/Changelog
+
+Changes marked with 💖 will be listed in the short version of the changelog in `version.downloadMe`.
+
+### Additions
+- New options menu 💖
+- New animation debug screen 💖
+- Asset replacing mods are now fully supported (docs are [here](https://github.com/KadeDev/Kade-Engine/blob/master/example_mods/README.md))
+- Middle scroll 💖
+- Lane transparency 💖
+- Toggelabe health bar
+- Added noteskin support + new circle skin 💖
+- Added an hotkey (r) to reset the rate in freeplay
+- Added the ability to customize judgements
+- Added a border around the FPS Counter
+
+### Changes
+- You can now view the options menu in the pause menu 💖
+- Editor claps are more consistant
+- Changed logging system to a custom one, logs output into logs/
+- Changed some stuff on customize gameplay
+- Allowed VolumeUp, VolumeDown, VolumeMute, Pause, Reset, and Fullscreen keybinds to bindable
+- Controllers can now bind more keys that were previously blacklisted
+- Removed version identifier in gameplay
+- Removed some stuff from the results screen
+- Made the FPS text nicer
+- The game no longer freezes when it has lost focus
+
+### Bugfixes
+- Fix linux and mac compiling and running
+- Fix failing on 20/21 on debug mode
+- Fixed a memory leak with note XML assets
+- Fixed crashing at the end of a song in the charter
+- Fixed playing music when paused
+- Fixed a bug where a song would end early if the rate was lower than 1
+- Fixed a bug where a song would end earlier than the end of the song if the rate was higher than 1
+- Fixed the results screen being skewed on higher or lower rates
+- Fixed FPS Cap resetting itself on focusing out of the window
+- Fixed sustain rendering so it doesn't break itself on rates
+- Fixed input on rates 💖
+- Fixed rates on longer maps so they are more stable 💖
\ No newline at end of file
diff --git a/docs/it-didnt-work.md b/docs/it-didnt-work.md
new file mode 100644
index 0000000000..b6bd568787
--- /dev/null
+++ b/docs/it-didnt-work.md
@@ -0,0 +1,21 @@
+# It didn't work!
+
+If someone just linked you to this, you have tested positive for Stupid Bitch disease. The primary symptom is saying that your code "didn't work" with no explanation, or otherwise doing a really shitty job when asking a question or getting help with a code issue. As you can see, this can have serious consequences for the friends and loved ones of the affected.
+
+Thankfully, there is a cure. Please take the following prescription:
+
+- Check the **Troubleshooting guide** to see if your issue already has a detailed guide on how to fix it.
+- If this didn't help, go back to where you previously posted and specify:
+ - Your operating system and the version you're trying to build, if any.
+ - What action you take that triggers the issue.
+ - The symptoms of the issue.
+ - Post the error message that occurs if you can.
+- In particular, if you would ever respond in regards to a coding issue with "it didn't work", please try the following statements instead:
+ - When I try this, I see the same error as before, with no changes.
+ - When I try this, a different error appears.
+ - When I try this, XXX happens instead.
+ - When I try this, no error appears and the expected behavior does not happen.
+
+Remember: Fixing code is like fixing a car. If you go to your local mechanic and say "It doesn't work", they aren't going to be able to help you, or if they are, they will waste a lot of time doing it. You need to specify the symptoms that occur.
+
+With this advice, you may one day be able to recover from this debilitating ailment.
diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md
new file mode 100644
index 0000000000..aedc8852f0
--- /dev/null
+++ b/docs/troubleshooting.md
@@ -0,0 +1,78 @@
+# Troubleshooting
+
+This document lists common problems alongside their solutions. If you try to post an issue about one of these, either give details on why the solution below didn't work, or prepare for [vicious mockery](https://roll20.net/compendium/dnd5e/Vicious%20Mockery#content).
+
+If you have solved a commonly experienced issue, please feel free to expand on it here.
+
+## Error: Source path "C:/HaxeToolkit/haxe/lib/extension-webm/git/ndll/Windows64/extension-webm.ndll" does not exist
+
+If someone linked you to this, you were a dumbass who didn't read the **Build Documentation** properly.
+
+Run the following lines in your command prompt:
+
+```
+haxelib git extension-webm https://github.com/KadeDev/extension-webm
+lime rebuild extension-webm windows
+```
+
+## GetThreadContext failed!
+
+As best I can tell, this issue is caused by an out-of-memory error when trying to build the game. If this error occurs, you're probably multi-tasking by running something computationally expensive in the background.
+
+## source/WebmHandler.hx:33: characters 8-12 : webm.WebmPlayer has no field fuck
+
+You are using an incorrect version of extension-webm. See **extension-webm.ndll** does not exist.
+
+## Could not find haxelib "hxvm-luajit", does it need to be installed?
+
+With Kade Engine v1.7, a new library is used to power ModCharts. You'll need to uninstall the old one and install the new one. Run the following lines in your command prompt:
+
+```
+haxelib remove linc_luajit
+haxelib remove hxvm-luajit
+haxelib git linc_luajit https://github.com/nebulazorua/linc_luajit.git
+haxelib git hxvm-luajit https://github.com/nebulazorua/hxvm-luajit
+```
+
+## Type not found : StatePointer
+
+See **Could not find haxelib "hxvm-luajit", does it need to be installed?**.
+
+## ../lib/lua/src/lua.hpp: No such file or directory
+
+This error may occur if you are building Kade Engine v1.7 on a aystem with case sensitive file system (MacOS or Linux). This is an issue with the linc_luajit and a pull request needs to be merged in order to fix it.
+
+In the meantime, run the following lines in your command prompt to use a fork:
+
+```
+haxelib remove linc_luajit
+haxelib git linc_luajit https://github.com/MasterEric/linc_luajit.git
+```
+
+## Warning: Could not find Visual Studio 2017 VsDevCmd
+
+```
+Warning: Could not find Visual Studio 2017 VsDevCmd
+Missing HxCppVars
+Error: Could not automatically setup MSVC
+```
+
+This error occurs if you don't have the proper Windows build dependencies installed.
+
+See the **Windows-only dependencies section of the Build documentation**.
+
+## Error: Cannot copy to "export/debug/windows/bin/lime.ndll", is the file in use?
+
+This error occurs if you try to compile the game while it's running in the background. Please close the game, then try again.
+
+## Null Object Reference
+
+This is a coding error. It occurs when you attempt to access an attribute of a null object. Check your code and look for places where the object may not be defined.
+
+## Null Function Reference
+
+This is a coding error. It occurs when you attempt to call a function on an object but that function does not exist. Check your code and look for places where the object may be a different type than expected.
+
+## Visual C++ Runtime Library: Assertion Failed!
+
+I get this error all the time, but I haven't the foggiest what's causing it. The program will often work if you abort the program and start it again.
diff --git a/example_mods/README.md b/example_mods/README.md
new file mode 100644
index 0000000000..296a8981ef
--- /dev/null
+++ b/example_mods/README.md
@@ -0,0 +1,112 @@
+# How do mods work?
+
+ModCore makes it easy to append, replace, or merge files without editing the game's code.
+
+Kade Engine's ModCore is powered by [Polymod](https://github.com/larsiusprime/polymod). Polymod is what handles loading the relevant assets, ensuring they are injected properly. It also handles ensuring mods are loaded in the proper order.
+
+Example mod created by [Master Eric](https://twitter.com/EliteMasterEric) > [here](https://github.com/EnigmaEngine/ModCore-Tricky-Mod) <
+
+## Using mods
+
+To install a mod, place the folder inside the `mods` folder. To disable or uninstall a mod, take it out of the folder.
+
+One day, we'll probably have a modloader that lets you control what order mods are loaded in.
+
+## Metadata
+
+You will want several pieces of metadata in order for Polymod to identify and display your mod. Note that only one of these is mandatory.
+
+* _polymod_meta.json
+ * This file tells Polymod all about your mod, such as name and description. This file is **MANDATORY**.
+ * Learn more about how to write this file below.
+* _polymod_icon.png
+ * This icon will be used by mod browsers in the future. Make sure to provide one, 256x256 should be pretty good.
+* LICENSE.txt
+ * This is the general sofware license used by the mod. Without a license, your mod is under All Rights Reserved.
+* ASSET_LICENSE.txt
+ * This is the license specifically for the mod's assets.
+ * Creative Commons is recommended.
+* CODE_LICENSE.txt (for code/script-specific licensing terms.
+ * GPLv3, Apache, or MIT are recommended.
+* _polymod_pack.txt
+ * Used for modpacks.
+
+### _polymod_meta.json
+
+Here is an example of a valid mod metadata file.
+
+Note that both `api_version` and `mod_version` should use valid [Semantic Versioning 2.0.0](https://semver.org/) values.
+
+```
+{
+ "title":"Daisy",
+ "description":"This mod has a daisy",
+ "author":"Lars A. Doucet",
+ "api_version":"0.1.0",
+ "mod_version":"1.0.0-alpha",
+ "license":"CC BY 4.0,MIT"
+}
+```
+
+## Assets
+
+### Replacing
+
+Asset replacements are simple; just place the assets in the relevant subfolder.
+
+Here's what the mod folder might look like for a simple "XXX over Boyfriend" mod.
+
+```
+ (name this anything)
+|- _polymod_meta.json
+|- images
+ |- characters
+ |- BOYFRIEND.xml
+ |- BOYFRIEND.png
+```
+
+By the way,
+
+### Appending
+
+Appending to assets is only slightly more involved. Appending is used when you want to add to the end of a particular text file without getting rid of what's already there.
+
+For example, using replacement on `introText.txt` will get rid of the base game's intro text values, as well as any that other mods may have added. This may or may not be what you want. Appending will put your values at the end of the file for other mods to add to.
+
+To perfrom asset appending, place the assets in the relevant subfolder under the `_append` folder, like so. Note the underscore before it.
+
+```
+ (name this anything)
+|- _polymod_meta.json
+|- _append
+ |- data
+ |- introText.txt
+```
+
+### Merging
+
+Merging is the most convoluted. Use it only if you can't use replacement or appending.
+
+Merging locates a given key in a file and replaces it with the intended value.
+
+* For `CSV` and `TSV` files, the value in the first column is assumed to be the ID. Each ID in the merge CSV is located in the base CSV, and that row is replaced with the row from the merge CSV.
+* For `LINES` text files, Polymod will check
+* For `PLAINTEXT` text files, Polymod will throw a warning that merging is not supported.
+* For `XML` files, you need to add a child key called `merge` which specifies the key and value to match on. All other values will be replaced. [See here for more info](https://github.com/larsiusprime/polymod#_merge-folder).
+* For `JSON` files, create a single top-level array named `merge`. Each element is an object with two keys: A key `target` like `abc.d[3].e`, and a value `payload`.
+
+## Modpacks
+
+If you have a mod with several parts that you want people to be able to install separately, the best way to do that is to make them separate mods, then make a modpack. This is an empty mod containing only a file defining the other mods that the game should load.
+
+To create a modpack, make a mod containing a `_polymod_pack.txt` file with the following text:
+
+```
+foo:1.0.0,bar:1.*.*,abc,xyz
+```
+
+ModCore will search for, and load, the mods with the IDs `foo`, `bar`, `abc`, and `xyz`, in that order. It will fail any mods that fail the version check (`foo` must be exactly `1.0.0` while `bar` allows any `1.x` version) and only load the mods which don't fail.
+
+## Scripts
+
+Coming soon...
diff --git a/example_mods/introMod/_polymod_meta.json b/example_mods/introMod/_polymod_meta.json
new file mode 100644
index 0000000000..51a448c666
--- /dev/null
+++ b/example_mods/introMod/_polymod_meta.json
@@ -0,0 +1,8 @@
+{
+ "title": "Intro Mod",
+ "description": "This is an example mod.",
+ "author": "MasterEric",
+ "api_version": "0.1.0",
+ "mod_version": "1.0.0",
+ "license": "GPLv3"
+}
\ No newline at end of file
diff --git a/example_mods/introMod/images/KadeEngineLogo.png b/example_mods/introMod/images/KadeEngineLogo.png
new file mode 100644
index 0000000000..8a7064bf8d
Binary files /dev/null and b/example_mods/introMod/images/KadeEngineLogo.png differ
diff --git a/example_mods/modList.txt b/example_mods/modList.txt
deleted file mode 100644
index 3e24925955..0000000000
--- a/example_mods/modList.txt
+++ /dev/null
@@ -1 +0,0 @@
-introMod
\ No newline at end of file
diff --git a/example_mods/readme.txt b/example_mods/readme.txt
deleted file mode 100644
index f8d8f6e7e7..0000000000
--- a/example_mods/readme.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-THIS MOD FOLDER DOES NOT ENTIRELY WORK JUST YET!!!
-DONT EXPECT MUCH OUT OF IT RIGHT NOW!!!
\ No newline at end of file
diff --git a/source/Alphabet.hx b/source/Alphabet.hx
index b1f75cd0e5..a8b447a470 100644
--- a/source/Alphabet.hx
+++ b/source/Alphabet.hx
@@ -9,6 +9,7 @@ import flixel.graphics.frames.FlxAtlasFrames;
import flixel.group.FlxSpriteGroup;
import flixel.math.FlxMath;
import flixel.util.FlxTimer;
+import openfl.Lib;
using StringTools;
@@ -46,14 +47,15 @@ class Alphabet extends FlxSpriteGroup
var isBold:Bool = false;
var pastX:Float = 0;
- var pastY:Float = 0;
+ var pastY:Float = 0;
// ThatGuy: Variables here to be used later
var xScale:Float;
var yScale:Float;
// ThatGuy: Added 2 more variables, xScale and yScale for resizing text
- public function new(x:Float, y:Float, text:String = "", ?bold:Bool = false, typed:Bool = false, shouldMove:Bool = false, xScale:Float = 1, yScale:Float = 1)
+ public function new(x:Float, y:Float, text:String = "", ?bold:Bool = false, typed:Bool = false, shouldMove:Bool = false, xScale:Float = 1,
+ yScale:Float = 1)
{
pastX = x;
pastY = y;
@@ -78,7 +80,6 @@ class Alphabet extends FlxSpriteGroup
{
addText();
}
-
}
}
@@ -99,7 +100,7 @@ class Alphabet extends FlxSpriteGroup
this.xScale = xScale;
this.yScale = yScale;
-
+
addText();
}
@@ -137,7 +138,7 @@ class Alphabet extends FlxSpriteGroup
// var letter:AlphaCharacter = new AlphaCharacter(30 * loopNum, 0);
var letter:AlphaCharacter = new AlphaCharacter(xPos, 0);
-
+
// ThatGuy: These are the lines that change the individual scaling of each character
letter.scale.set(xScale, yScale);
letter.updateHitbox();
@@ -284,31 +285,37 @@ class Alphabet extends FlxSpriteGroup
}
// ThatGuy: Ooga booga function for resizing text, with the option of wanting it to have the same midPoint
- // Side note: Do not, EVER, do updateHitbox() unless you are retyping the whole thing. Don't know why, but the position gets retarded if you do that
- public function resizeText(xScale:Float, yScale:Float, xStaysCentered:Bool = true, yStaysCentered:Bool = false):Void {
+ // Side note: Do not, EVER, do updateHitbox() unless you are retyping the whole thing. Don't know why, but the position gets retarded if you do that
+ public function resizeText(xScale:Float, yScale:Float, xStaysCentered:Bool = true, yStaysCentered:Bool = false):Void
+ {
var oldMidpoint:FlxPoint = this.getMidpoint();
reType(text, xScale, yScale);
- if(!(xStaysCentered && yStaysCentered)){
- if(xStaysCentered) {
- //I can just use this juicy new function i made
+ if (!(xStaysCentered && yStaysCentered))
+ {
+ if (xStaysCentered)
+ {
+ // I can just use this juicy new function i made
moveTextToMidpoint(new FlxPoint(oldMidpoint.x, getMidpoint().y));
}
- if(yStaysCentered) {
+ if (yStaysCentered)
+ {
moveTextToMidpoint(new FlxPoint(getMidpoint().x, oldMidpoint.y));
}
- } else {
+ }
+ else
+ {
moveTextToMidpoint(new FlxPoint(oldMidpoint.x, oldMidpoint.y));
}
-
}
// ThatGuy: Function used to keep text centered on one point instead of manually having to come up with offsets for each sentence
- public function moveTextToMidpoint(midpoint:FlxPoint):Void {
+ public function moveTextToMidpoint(midpoint:FlxPoint):Void
+ {
/*
- e.g. You want your midpoint at (100, 100)
- and your text is 200 wide, 50 tall
- then, x = 100 - 200/2, y = 100 - 50/2
- */
+ e.g. You want your midpoint at (100, 100)
+ and your text is 200 wide, 50 tall
+ then, x = 100 - 200/2, y = 100 - 50/2
+ */
this.x = midpoint.x - this.width / 2;
this.y = midpoint.y - this.height / 2;
}
@@ -329,16 +336,17 @@ class AlphaCharacter extends FlxSprite
super(x, y);
var tex = Paths.getSparrowAtlas('alphabet');
frames = tex;
- if(FlxG.save.data.antialiasing)
- {
- antialiasing = true;
- }
+ if (FlxG.save.data.antialiasing)
+ {
+ antialiasing = true;
+ }
}
public function createBold(letter:String)
{
animation.addByPrefix(letter, letter.toUpperCase() + " bold", 24);
animation.play(letter);
+ animation.curAnim.frameRate = 24 * (60 / (cast(Lib.current.getChildAt(0), Main)).getFPS());
updateHitbox();
}
diff --git a/source/AnimationDebug.hx b/source/AnimationDebug.hx
index 8bd59abfc2..4d1bedfd8b 100644
--- a/source/AnimationDebug.hx
+++ b/source/AnimationDebug.hx
@@ -8,12 +8,28 @@ import flixel.addons.display.FlxGridOverlay;
import flixel.group.FlxGroup.FlxTypedGroup;
import flixel.text.FlxText;
import flixel.util.FlxColor;
+import openfl.events.Event;
+import openfl.events.IOErrorEvent;
+import openfl.net.FileReference;
+import flixel.addons.ui.FlxInputText;
+import flixel.addons.ui.FlxUI9SliceSprite;
+import flixel.addons.ui.FlxUI;
+import flixel.addons.ui.FlxUIState;
+import flixel.addons.ui.FlxUICheckBox;
+import flixel.addons.ui.FlxUIDropDownMenu;
+import flixel.addons.ui.FlxUIInputText;
+import flixel.addons.ui.FlxUINumericStepper;
+import flixel.addons.ui.FlxUITabMenu;
+import flixel.addons.ui.FlxUITooltip.FlxUITooltipStyle;
/**
*DEBUG MODE
*/
-class AnimationDebug extends FlxState
+using StringTools;
+
+class AnimationDebug extends MusicBeatState
{
+ var _file:FileReference;
var bf:Boyfriend;
var dad:Character;
var char:Character;
@@ -25,7 +41,18 @@ class AnimationDebug extends FlxState
var daAnim:String = 'spooky';
var camFollow:FlxObject;
- public function new(daAnim:String = 'spooky')
+ var background:FlxSprite;
+ var curt:FlxSprite;
+ var front:FlxSprite;
+
+ var UI_box:FlxUITabMenu;
+ var UI_options:FlxUITabMenu;
+ var offsetX:FlxUINumericStepper;
+ var offsetY:FlxUINumericStepper;
+
+ var characters:Array;
+
+ public function new(daAnim:String = 'bf')
{
super();
this.daAnim = daAnim;
@@ -33,46 +60,83 @@ class AnimationDebug extends FlxState
override function create()
{
- FlxG.sound.music.stop();
+ // FlxG.sound.music.stop();
- var gridBG:FlxSprite = FlxGridOverlay.create(10, 10);
- gridBG.scrollFactor.set(0.5, 0.5);
- add(gridBG);
+ // var gridBG:FlxSprite = FlxGridOverlay.create(10, 10);
+ // gridBG.scrollFactor.set(0.5, 0.5);
+ // add(gridBG);
- if (daAnim == 'bf')
- isDad = false;
+ FlxG.mouse.visible = true;
- if (isDad)
- {
- dad = new Character(0, 0, daAnim);
- dad.screenCenter();
- dad.debugMode = true;
- add(dad);
+ background = new FlxSprite(-600, -525).loadGraphic(Paths.loadImage('stageback', 'shared'));
+ front = new FlxSprite(-650, 325).loadGraphic(Paths.loadImage('stagefront', 'shared'));
+ curt = new FlxSprite(-500, -625).loadGraphic(Paths.loadImage('stagecurtains', 'shared'));
+ background.antialiasing = FlxG.save.data.antialiasing;
+ front.antialiasing = FlxG.save.data.antialiasing;
+ curt.antialiasing = FlxG.save.data.antialiasing;
- char = dad;
- dad.flipX = false;
- }
- else
- {
- bf = new Boyfriend(0, 0);
- bf.screenCenter();
- bf.debugMode = true;
- add(bf);
+ background.screenCenter(X);
+ background.scale.set(0.7, 0.7);
+ front.screenCenter(X);
+ front.scale.set(0.7, 0.7);
+ curt.screenCenter(X);
+ curt.scale.set(0.7, 0.7);
- char = bf;
- bf.flipX = false;
- }
+ background.scrollFactor.set(0.9, 0.9);
+ curt.scrollFactor.set(0.9, 0.9);
+ front.scrollFactor.set(0.9, 0.9);
+
+ add(background);
+ add(front);
+ add(curt);
+
+ dad = new Character(0, 0, daAnim);
+ dad.screenCenter();
+ dad.debugMode = true;
+ add(dad);
+
+ char = dad;
+ dad.flipX = false;
dumbTexts = new FlxTypedGroup();
add(dumbTexts);
textAnim = new FlxText(300, 16);
textAnim.size = 26;
+ textAnim.setBorderStyle(OUTLINE, FlxColor.BLACK, 2);
textAnim.scrollFactor.set();
add(textAnim);
genBoyOffsets();
+ addHelpText();
+
+ characters = CoolUtil.coolTextFile(Paths.txt('data/characterList'));
+
+ var tabs = [{name: "Offsets", label: 'Offset menu'},];
+
+ UI_box = new FlxUITabMenu(null, tabs, true);
+
+ UI_box.scrollFactor.set();
+ UI_box.resize(150, 200);
+ UI_box.x = FlxG.width - UI_box.width - 20;
+ UI_box.y = 20;
+
+ // var opt_tabs = [{name: "test", label: 'test'}];
+
+ // UI_options = new FlxUITabMenu(null, opt_tabs, true);
+
+ // UI_options.scrollFactor.set();
+ // UI_options.selected_tab = 0;
+ // UI_options.resize(300, 200);
+ // UI_options.x = UI_box.x;
+ // UI_options.y = FlxG.height - 300;
+ // no need for now
+ // add(UI_options);
+ add(UI_box);
+
+ addOffsetUI();
+
camFollow = new FlxObject(0, 0, 2, 2);
camFollow.screenCenter();
add(camFollow);
@@ -82,15 +146,68 @@ class AnimationDebug extends FlxState
super.create();
}
- function genBoyOffsets(pushList:Bool = true):Void
+ function addOffsetUI():Void
{
+ var player1DropDown = new FlxUIDropDownMenu(10, 10, FlxUIDropDownMenu.makeStrIdLabelArray(characters, true), function(character:String)
+ {
+ remove(dad);
+ dad = new Character(0, 0, characters[Std.parseInt(character)]);
+ dad.screenCenter();
+ dad.debugMode = true;
+ dad.flipX = false;
+ add(dad);
+
+ replace(char, dad);
+ char = dad;
+
+ dumbTexts.clear();
+ genBoyOffsets(true, true);
+ updateTexts();
+ });
+
+ player1DropDown.selectedLabel = char.curCharacter;
+
+ var offsetX_label = new FlxText(10, 50, 'X Offset');
+
+ var UI_offsetX:FlxUINumericStepper = new FlxUINumericStepper(10, offsetX_label.y + offsetX_label.height + 10, 1,
+ char.animOffsets.get(animList[curAnim])[0], -500.0, 500.0, 0);
+ UI_offsetX.value = char.animOffsets.get(animList[curAnim])[0];
+ UI_offsetX.name = 'offset_x';
+ offsetX = UI_offsetX;
+
+ var offsetY_label = new FlxText(10, UI_offsetX.y + UI_offsetX.height + 10, 'Y Offset');
+
+ var UI_offsetY:FlxUINumericStepper = new FlxUINumericStepper(10, offsetY_label.y + offsetY_label.height + 10, 1,
+ char.animOffsets.get(animList[curAnim])[0], -500.0, 500.0, 0);
+ UI_offsetY.value = char.animOffsets.get(animList[curAnim])[1];
+ UI_offsetY.name = 'offset_y';
+ offsetY = UI_offsetY;
+
+ var tab_group_offsets = new FlxUI(null, UI_box);
+ tab_group_offsets.name = "Offsets";
+
+ tab_group_offsets.add(offsetX_label);
+ tab_group_offsets.add(offsetY_label);
+ tab_group_offsets.add(UI_offsetX);
+ tab_group_offsets.add(UI_offsetY);
+ tab_group_offsets.add(player1DropDown);
+
+ UI_box.addGroup(tab_group_offsets);
+ }
+
+ function genBoyOffsets(pushList:Bool = true, ?cleanArray:Bool = false):Void
+ {
+ if (cleanArray)
+ animList.splice(0, animList.length);
+
var daLoop:Int = 0;
for (anim => offsets in char.animOffsets)
{
var text:FlxText = new FlxText(10, 20 + (18 * daLoop), 0, anim + ": " + offsets, 15);
text.scrollFactor.set();
- text.color = FlxColor.BLUE;
+ text.setBorderStyle(OUTLINE, FlxColor.BLACK, 2);
+ text.color = FlxColor.WHITE;
dumbTexts.add(text);
if (pushList)
@@ -100,7 +217,7 @@ class AnimationDebug extends FlxState
}
}
- function copyBoyOffsets():Void
+ function saveBoyOffsets():Void
{
var result = "";
@@ -110,13 +227,56 @@ class AnimationDebug extends FlxState
result += text + "\n";
}
- trace("Outputting animation offsets to clipboard...");
+ if ((result != null) && (result.length > 0))
+ {
+ _file = new FileReference();
+ _file.addEventListener(Event.COMPLETE, onSaveComplete);
+ _file.addEventListener(Event.CANCEL, onSaveCancel);
+ _file.addEventListener(IOErrorEvent.IO_ERROR, onSaveError);
+ _file.save(result.trim(), daAnim + "Offsets.txt");
+ }
+ }
+
+ /**
+ * Called when the save file dialog is completed.
+ */
+ function onSaveComplete(_):Void
+ {
+ _file.removeEventListener(Event.COMPLETE, onSaveComplete);
+ _file.removeEventListener(Event.CANCEL, onSaveCancel);
+ _file.removeEventListener(IOErrorEvent.IO_ERROR, onSaveError);
+ _file = null;
+ FlxG.log.notice("Successfully saved OFFSET DATA.");
+ }
+
+ /**
+ * Called when the save file dialog is cancelled.
+ */
+ function onSaveCancel(_):Void
+ {
+ _file.removeEventListener(Event.COMPLETE, onSaveComplete);
+ _file.removeEventListener(Event.CANCEL, onSaveCancel);
+ _file.removeEventListener(IOErrorEvent.IO_ERROR, onSaveError);
+ _file = null;
+ }
- openfl.system.System.setClipboard(result);
+ /**
+ * Called if there is an error while saving the offset data.
+ */
+ function onSaveError(_):Void
+ {
+ _file.removeEventListener(Event.COMPLETE, onSaveComplete);
+ _file.removeEventListener(Event.CANCEL, onSaveCancel);
+ _file.removeEventListener(IOErrorEvent.IO_ERROR, onSaveError);
+ _file = null;
+ FlxG.log.error("Problem saving Offset data");
}
function updateTexts():Void
{
+ offsetX.value = char.animOffsets.get(animList[curAnim])[0];
+ offsetY.value = char.animOffsets.get(animList[curAnim])[1];
+
dumbTexts.forEach(function(text:FlxText)
{
text.kill();
@@ -124,12 +284,63 @@ class AnimationDebug extends FlxState
});
}
+ var helpText:FlxText;
+
+ function addHelpText():Void
+ {
+ var helpTextValue = "Help:\nQ/E : Zoom in and out\nF : Flip\nI/J/K/L : Pan Camera\nW/S : Cycle Animation\nArrows : Offset Animation\nShift-Arrows : Offset Animation x10\nSpace : Replay Animation\nCTRL-S : Save Offsets to File\nEnter/ESC : Exit\nPress F1 to hide/show this!\n";
+ helpText = new FlxText(940, 20, 0, helpTextValue, 15);
+ helpText.scrollFactor.set();
+ helpText.y = FlxG.height - helpText.height - 20;
+ helpText.setBorderStyle(OUTLINE, FlxColor.BLACK, 2);
+ helpText.color = FlxColor.WHITE;
+
+ add(helpText);
+ }
+
+ override function getEvent(id:String, sender:Dynamic, data:Dynamic, ?params:Array)
+ {
+ if (id == FlxUINumericStepper.CHANGE_EVENT && (sender is FlxUINumericStepper))
+ {
+ var offset:FlxUINumericStepper = cast sender;
+ var offsetName = offset.name;
+ switch (offsetName)
+ {
+ case 'offset_x':
+ char.animOffsets.get(animList[curAnim])[0] = offset.value;
+ updateTexts();
+ genBoyOffsets(false);
+ char.playAnim(animList[curAnim]);
+ case 'offset_y':
+ char.animOffsets.get(animList[curAnim])[1] = offset.value;
+ updateTexts();
+ genBoyOffsets(false);
+ char.playAnim(animList[curAnim]);
+ }
+ }
+ }
+
override function update(elapsed:Float)
{
textAnim.text = char.animation.curAnim.name;
- if (FlxG.keys.justPressed.ENTER || FlxG.keys.justPressed.ESCAPE)
- FlxG.switchState(new MainMenuState());
+ if (FlxG.mouse.overlaps(char) && FlxG.mouse.pressed)
+ {
+ // HOW THE FUCK DO I CONVERT THIS
+ char.animOffsets.get(animList[curAnim])[0] = -Math.round(FlxG.mouse.x - char.frameWidth * 1.5);
+ char.animOffsets.get(animList[curAnim])[1] = -Math.round(FlxG.mouse.y - char.frameHeight / 2);
+
+ updateTexts();
+ genBoyOffsets(false);
+ char.playAnim(animList[curAnim]);
+ // TO MOUSE MOVEMENT?????????
+ }
+
+ if (FlxG.keys.justPressed.ESCAPE)
+ {
+ FlxG.mouse.visible = false;
+ FlxG.switchState(new PlayState());
+ }
if (FlxG.keys.justPressed.E)
FlxG.camera.zoom += 0.25;
@@ -211,8 +422,13 @@ class AnimationDebug extends FlxState
char.playAnim(animList[curAnim]);
}
- if (FlxG.keys.justPressed.V)
- copyBoyOffsets();
+ if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.S)
+ saveBoyOffsets();
+
+ if (FlxG.keys.justPressed.F1)
+ FlxG.save.data.showHelp = !FlxG.save.data.showHelp;
+
+ helpText.visible = FlxG.save.data.showHelp;
super.update(elapsed);
}
diff --git a/source/BackgroundDancer.hx b/source/BackgroundDancer.hx
index 38978c91d1..df231124ff 100644
--- a/source/BackgroundDancer.hx
+++ b/source/BackgroundDancer.hx
@@ -10,13 +10,11 @@ class BackgroundDancer extends FlxSprite
{
super(x, y);
- frames = Paths.getSparrowAtlas("limo/limoDancer",'week4');
+ frames = Paths.getSparrowAtlas("limo/limoDancer", 'week4');
animation.addByIndices('danceLeft', 'bg dancer sketch PINK', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false);
animation.addByIndices('danceRight', 'bg dancer sketch PINK', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false);
animation.play('danceLeft');
antialiasing = FlxG.save.data.antialiasing;
-
-
}
var danceDir:Bool = false;
diff --git a/source/BackgroundGirls.hx b/source/BackgroundGirls.hx
index 8a84699c2c..1c2e10e3d2 100644
--- a/source/BackgroundGirls.hx
+++ b/source/BackgroundGirls.hx
@@ -10,7 +10,7 @@ class BackgroundGirls extends FlxSprite
super(x, y);
// BG fangirls dissuaded
- frames = Paths.getSparrowAtlas('weeb/bgFreaks','week6');
+ frames = Paths.getSparrowAtlas('weeb/bgFreaks', 'week6');
animation.addByIndices('danceLeft', 'BG girls group', CoolUtil.numberArray(14), "", 24, false);
animation.addByIndices('danceRight', 'BG girls group', CoolUtil.numberArray(30, 15), "", 24, false);
diff --git a/source/Boyfriend.hx b/source/Boyfriend.hx
index c9f87f9bf0..8975fd911d 100644
--- a/source/Boyfriend.hx
+++ b/source/Boyfriend.hx
@@ -32,6 +32,9 @@ class Boyfriend extends Character
playAnim('idle', true, false, 10);
}
+ if (curCharacter.endsWith('-car') && !animation.curAnim.name.startsWith('sing') && animation.curAnim.finished)
+ playAnim('idleHair');
+
if (animation.curAnim.name == 'firstDeath' && animation.curAnim.finished)
{
playAnim('deathLoop');
diff --git a/source/Caching.hx b/source/Caching.hx
index 3d7fe865b7..eb98a4bef1 100644
--- a/source/Caching.hx
+++ b/source/Caching.hx
@@ -1,17 +1,17 @@
-#if sys
+#if FEATURE_FILESYSTEM
package;
import lime.app.Application;
-#if desktop
+#if FEATURE_DISCORD
import Discord.DiscordClient;
#end
import openfl.display.BitmapData;
-import openfl.utils.Assets;
+import openfl.utils.Assets as OpenFlAssets;
import flixel.ui.FlxBar;
import haxe.Exception;
import flixel.tweens.FlxEase;
import flixel.tweens.FlxTween;
-#if cpp
+#if FEATURE_FILESYSTEM
import sys.FileSystem;
import sys.io.File;
#end
@@ -27,6 +27,7 @@ import flixel.math.FlxRect;
import flixel.util.FlxColor;
import flixel.util.FlxTimer;
import flixel.text.FlxText;
+import flixel.input.keyboard.FlxKey;
using StringTools;
@@ -40,72 +41,83 @@ class Caching extends MusicBeatState
var text:FlxText;
var kadeLogo:FlxSprite;
- public static var bitmapData:Map;
+ public static var bitmapData:Map;
var images = [];
var music = [];
var charts = [];
-
override function create()
{
-
FlxG.save.bind('funkin', 'ninjamuffin99');
PlayerSettings.init();
KadeEngineData.initSave();
+ // It doesn't reupdate the list before u restart rn lmao
+ NoteskinHelpers.updateNoteskins();
+
+ FlxG.sound.muteKeys = [FlxKey.fromString(FlxG.save.data.muteBind)];
+ FlxG.sound.volumeDownKeys = [FlxKey.fromString(FlxG.save.data.volDownBind)];
+ FlxG.sound.volumeUpKeys = [FlxKey.fromString(FlxG.save.data.volUpBind)];
+
FlxG.mouse.visible = false;
- FlxG.worldBounds.set(0,0);
+ FlxG.worldBounds.set(0, 0);
- bitmapData = new Map();
+ bitmapData = new Map();
- text = new FlxText(FlxG.width / 2, FlxG.height / 2 + 300,0,"Loading...");
+ text = new FlxText(FlxG.width / 2, FlxG.height / 2 + 300, 0, "Loading...");
text.size = 34;
text.alignment = FlxTextAlign.CENTER;
text.alpha = 0;
- kadeLogo = new FlxSprite(FlxG.width / 2, FlxG.height / 2).loadGraphic(Paths.image('KadeEngineLogo'));
+ kadeLogo = new FlxSprite(FlxG.width / 2, FlxG.height / 2).loadGraphic(Paths.loadImage('KadeEngineLogo'));
kadeLogo.x -= kadeLogo.width / 2;
kadeLogo.y -= kadeLogo.height / 2 + 100;
text.y -= kadeLogo.height / 2 - 125;
text.x -= 170;
kadeLogo.setGraphicSize(Std.int(kadeLogo.width * 0.6));
- if(FlxG.save.data.antialiasing != null)
+ if (FlxG.save.data.antialiasing != null)
kadeLogo.antialiasing = FlxG.save.data.antialiasing;
else
kadeLogo.antialiasing = true;
-
+
kadeLogo.alpha = 0;
FlxGraphic.defaultPersist = FlxG.save.data.cacheImages;
- #if cpp
+ #if FEATURE_FILESYSTEM
if (FlxG.save.data.cacheImages)
{
- trace("caching images...");
+ Debug.logTrace("caching images...");
+ // TODO: Refactor this to use OpenFlAssets.
for (i in FileSystem.readDirectory(FileSystem.absolutePath("assets/shared/images/characters")))
{
if (!i.endsWith(".png"))
continue;
images.push(i);
}
+
+ for (i in FileSystem.readDirectory(FileSystem.absolutePath("assets/shared/images/noteskins")))
+ {
+ if (!i.endsWith(".png"))
+ continue;
+ images.push(i);
+ }
}
- trace("caching music...");
+ Debug.logTrace("caching music...");
- for (i in FileSystem.readDirectory(FileSystem.absolutePath("assets/songs")))
- {
- music.push(i);
- }
+ // TODO: Get the song list from OpenFlAssets.
+ music = Paths.listSongsToCache();
#end
toBeDone = Lambda.count(images) + Lambda.count(music);
- var bar = new FlxBar(10,FlxG.height - 50,FlxBarFillDirection.LEFT_TO_RIGHT,FlxG.width,40,null,"done",0,toBeDone);
+ var bar = new FlxBar(10, FlxG.height - 50, FlxBarFillDirection.LEFT_TO_RIGHT, FlxG.width, 40, null, "done", 0, toBeDone);
bar.color = FlxColor.PURPLE;
add(bar);
@@ -114,27 +126,27 @@ class Caching extends MusicBeatState
add(text);
trace('starting caching..');
-
- #if cpp
+
+ #if FEATURE_MULTITHREADING
// update thread
- sys.thread.Thread.create(() -> {
- while(!loaded)
+ sys.thread.Thread.create(() ->
+ {
+ while (!loaded)
{
if (toBeDone != 0 && done != toBeDone)
- {
- var alpha = HelperFunctions.truncateFloat(done / toBeDone * 100,2) / 100;
- kadeLogo.alpha = alpha;
- text.alpha = alpha;
- text.text = "Loading... (" + done + "/" + toBeDone + ")";
- }
+ {
+ var alpha = HelperFunctions.truncateFloat(done / toBeDone * 100, 2) / 100;
+ kadeLogo.alpha = alpha;
+ text.alpha = alpha;
+ text.text = "Loading... (" + done + "/" + toBeDone + ")";
+ }
}
-
});
// cache thread
-
- sys.thread.Thread.create(() -> {
+ sys.thread.Thread.create(() ->
+ {
cache();
});
#end
@@ -144,47 +156,55 @@ class Caching extends MusicBeatState
var calledDone = false;
- override function update(elapsed)
+ override function update(elapsed)
{
super.update(elapsed);
}
-
function cache()
{
- #if !linux
+ #if FEATURE_FILESYSTEM
trace("LOADING: " + toBeDone + " OBJECTS.");
for (i in images)
{
- var replaced = i.replace(".png","");
- var data:BitmapData = BitmapData.fromFile("assets/shared/images/characters/" + i);
- trace('id ' + replaced + ' file - assets/shared/images/characters/' + i + ' ${data.width}');
+ var replaced = i.replace(".png", "");
+
+ // var data:BitmapData = BitmapData.fromFile("assets/shared/images/characters/" + i);
+ var imagePath = Paths.image('characters/$i', 'shared');
+ Debug.logTrace('Caching character graphic $i ($imagePath)...');
+ var data = OpenFlAssets.getBitmapData(imagePath);
var graph = FlxGraphic.fromBitmapData(data);
graph.persist = true;
graph.destroyOnNoUse = false;
- bitmapData.set(replaced,graph);
+ bitmapData.set(replaced, graph);
done++;
}
for (i in music)
{
- FlxG.sound.cache(Paths.inst(i));
- FlxG.sound.cache(Paths.voices(i));
- trace("cached " + i);
+ var inst = Paths.inst(i);
+ if (Paths.doesSoundAssetExist(inst))
+ {
+ FlxG.sound.cache(inst);
+ }
+
+ var voices = Paths.voices(i);
+ if (Paths.doesSoundAssetExist(voices))
+ {
+ FlxG.sound.cache(voices);
+ }
+
done++;
}
-
- trace("Finished caching...");
+ Debug.logTrace("Finished caching...");
loaded = true;
- trace(Assets.cache.hasBitmapData('GF_assets'));
-
+ trace(OpenFlAssets.cache.hasBitmapData('GF_assets'));
#end
FlxG.switchState(new TitleState());
}
-
}
-#end
\ No newline at end of file
+#end
diff --git a/source/Character.hx b/source/Character.hx
index 7e1328065d..9e1a83e739 100644
--- a/source/Character.hx
+++ b/source/Character.hx
@@ -1,9 +1,12 @@
package;
+import flixel.util.FlxColor;
import flixel.FlxG;
import flixel.FlxSprite;
import flixel.animation.FlxBaseAnimation;
import flixel.graphics.frames.FlxAtlasFrames;
+import openfl.utils.Assets as OpenFlAssets;
+import haxe.Json;
using StringTools;
@@ -14,6 +17,7 @@ class Character extends FlxSprite
public var isPlayer:Bool = false;
public var curCharacter:String = 'bf';
+ public var barColor:FlxColor;
public var holdTimer:Float = 0;
@@ -21,6 +25,7 @@ class Character extends FlxSprite
{
super(x, y);
+ barColor = isPlayer ? 0xFF66FF33 : 0xFFFF0000;
animOffsets = new Map>();
curCharacter = character;
this.isPlayer = isPlayer;
@@ -30,28 +35,8 @@ class Character extends FlxSprite
switch (curCharacter)
{
- case 'gf':
- // GIRLFRIEND CODE
- tex = Paths.getSparrowAtlas('GF_assets','shared',true);
- 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);
-
- loadOffsetFile(curCharacter);
-
- playAnim('danceRight');
-
case 'gf-christmas':
- tex = Paths.getSparrowAtlas('gfChristmas','shared',true);
+ tex = Paths.getSparrowAtlas('gfChristmas', 'shared', true);
frames = tex;
animation.addByPrefix('cheer', 'GF Cheer', 24, false);
animation.addByPrefix('singLEFT', 'GF left note', 24, false);
@@ -70,19 +55,20 @@ class Character extends FlxSprite
playAnim('danceRight');
case 'gf-car':
- tex = Paths.getSparrowAtlas('gfCar','shared',true);
+ tex = Paths.getSparrowAtlas('gfCar', 'shared', true);
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);
+ animation.addByIndices('idleHair', 'GF Dancing Beat Hair blowing CAR', [10, 11, 12, 25, 26, 27], "", 24, true);
loadOffsetFile(curCharacter);
playAnim('danceRight');
case 'gf-pixel':
- tex = Paths.getSparrowAtlas('gfPixel','shared',true);
+ tex = Paths.getSparrowAtlas('gfPixel', 'shared', true);
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);
@@ -92,25 +78,27 @@ class Character extends FlxSprite
playAnim('danceRight');
- setGraphicSize(Std.int(width * PlayState.daPixelZoom));
+ setGraphicSize(Std.int(width * CoolUtil.daPixelZoom));
updateHitbox();
antialiasing = false;
case 'dad':
// DAD ANIMATION LOADING CODE
- tex = Paths.getSparrowAtlas('DADDY_DEAREST','shared',true);
+ tex = Paths.getSparrowAtlas('DADDY_DEAREST', 'shared', true);
frames = tex;
animation.addByPrefix('idle', 'Dad idle dance', 24, false);
animation.addByPrefix('singUP', 'Dad Sing Note UP', 24, false);
animation.addByPrefix('singRIGHT', 'Dad Sing Note RIGHT', 24, false);
animation.addByPrefix('singDOWN', 'Dad Sing Note DOWN', 24, false);
animation.addByPrefix('singLEFT', 'Dad Sing Note LEFT', 24, false);
+ animation.addByIndices('idleLoop', "Dad idle dance", [11, 12], "", 12, true);
loadOffsetFile(curCharacter);
+ barColor = 0xFFaf66ce;
playAnim('idle');
case 'spooky':
- tex = Paths.getSparrowAtlas('spooky_kids_assets','shared',true);
+ tex = Paths.getSparrowAtlas('spooky_kids_assets', 'shared', true);
frames = tex;
animation.addByPrefix('singUP', 'spooky UP NOTE', 24, false);
animation.addByPrefix('singDOWN', 'spooky DOWN note', 24, false);
@@ -120,10 +108,11 @@ class Character extends FlxSprite
animation.addByIndices('danceRight', 'spooky dance idle', [8, 10, 12, 14], "", 12, false);
loadOffsetFile(curCharacter);
+ barColor = 0xFFd57e00;
playAnim('danceRight');
case 'mom':
- tex = Paths.getSparrowAtlas('Mom_Assets','shared',true);
+ tex = Paths.getSparrowAtlas('Mom_Assets', 'shared', true);
frames = tex;
animation.addByPrefix('idle', "Mom Idle", 24, false);
@@ -133,13 +122,15 @@ class Character extends FlxSprite
// ANIMATION IS CALLED MOM LEFT POSE BUT ITS FOR THE RIGHT
// CUZ DAVE IS DUMB!
animation.addByPrefix('singRIGHT', 'Mom Pose Left', 24, false);
+ animation.addByIndices('idleLoop', "Mom Idle", [11, 12], "", 12, true);
loadOffsetFile(curCharacter);
+ barColor = 0xFFd8558e;
playAnim('idle');
case 'mom-car':
- tex = Paths.getSparrowAtlas('momCar','shared',true);
+ tex = Paths.getSparrowAtlas('momCar', 'shared', true);
frames = tex;
animation.addByPrefix('idle', "Mom Idle", 24, false);
@@ -149,12 +140,14 @@ class Character extends FlxSprite
// ANIMATION IS CALLED MOM LEFT POSE BUT ITS FOR THE RIGHT
// CUZ DAVE IS DUMB!
animation.addByPrefix('singRIGHT', 'Mom Pose Left', 24, false);
+ animation.addByIndices('idleHair', 'Mom Idle', [10, 11, 12, 13], "", 24, true);
loadOffsetFile(curCharacter);
+ barColor = 0xFFd8558e;
playAnim('idle');
case 'monster':
- tex = Paths.getSparrowAtlas('Monster_Assets','shared',true);
+ tex = Paths.getSparrowAtlas('Monster_Assets', 'shared', true);
frames = tex;
animation.addByPrefix('idle', 'monster idle', 24, false);
animation.addByPrefix('singUP', 'monster up note', 24, false);
@@ -163,9 +156,10 @@ class Character extends FlxSprite
animation.addByPrefix('singRIGHT', 'Monster Right note', 24, false);
loadOffsetFile(curCharacter);
+ barColor = 0xFFf3ff6e;
playAnim('idle');
case 'monster-christmas':
- tex = Paths.getSparrowAtlas('monsterChristmas','shared',true);
+ tex = Paths.getSparrowAtlas('monsterChristmas', 'shared', true);
frames = tex;
animation.addByPrefix('idle', 'monster idle', 24, false);
animation.addByPrefix('singUP', 'monster up note', 24, false);
@@ -174,9 +168,10 @@ class Character extends FlxSprite
animation.addByPrefix('singRIGHT', 'Monster Right note', 24, false);
loadOffsetFile(curCharacter);
+ barColor = 0xFFf3ff6e;
playAnim('idle');
case 'pico':
- tex = Paths.getSparrowAtlas('Pico_FNF_assetss','shared',true);
+ tex = Paths.getSparrowAtlas('Pico_FNF_assetss', 'shared', true);
frames = tex;
animation.addByPrefix('idle', "Pico Idle Dance", 24, false);
animation.addByPrefix('singUP', 'pico Up note0', 24, false);
@@ -201,13 +196,14 @@ class Character extends FlxSprite
animation.addByPrefix('singDOWNmiss', 'Pico Down Note MISS', 24);
loadOffsetFile(curCharacter);
+ barColor = 0xFFb7d855;
playAnim('idle');
flipX = true;
case 'bf':
- var tex = Paths.getSparrowAtlas('BOYFRIEND','shared',true);
+ var tex = Paths.getSparrowAtlas('BOYFRIEND', 'shared', true);
frames = tex;
trace(tex.frames.length);
@@ -233,10 +229,12 @@ class Character extends FlxSprite
playAnim('idle');
+ barColor = 0xFF31b0d1;
+
flipX = true;
case 'bf-christmas':
- var tex = Paths.getSparrowAtlas('bfChristmas','shared',true);
+ var tex = Paths.getSparrowAtlas('bfChristmas', 'shared', true);
frames = tex;
animation.addByPrefix('idle', 'BF idle dance', 24, false);
animation.addByPrefix('singUP', 'BF NOTE UP0', 24, false);
@@ -255,7 +253,7 @@ class Character extends FlxSprite
flipX = true;
case 'bf-car':
- var tex = Paths.getSparrowAtlas('bfCar','shared',true);
+ var tex = Paths.getSparrowAtlas('bfCar', 'shared', true);
frames = tex;
animation.addByPrefix('idle', 'BF idle dance', 24, false);
animation.addByPrefix('singUP', 'BF NOTE UP0', 24, false);
@@ -266,13 +264,16 @@ class Character extends FlxSprite
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.addByIndices('idleHair', 'BF idle dance', [10, 11, 12, 13], "", 24, true);
loadOffsetFile(curCharacter);
playAnim('idle');
+ barColor = 0xFF31b0d1;
+
flipX = true;
case 'bf-pixel':
- frames = Paths.getSparrowAtlas('bfPixel','shared',true);
+ frames = Paths.getSparrowAtlas('bfPixel', 'shared', true);
animation.addByPrefix('idle', 'BF IDLE', 24, false);
animation.addByPrefix('singUP', 'BF UP NOTE', 24, false);
animation.addByPrefix('singLEFT', 'BF LEFT NOTE', 24, false);
@@ -295,9 +296,11 @@ class Character extends FlxSprite
antialiasing = false;
+ barColor = 0xFF31b0d1;
+
flipX = true;
case 'bf-pixel-dead':
- frames = Paths.getSparrowAtlas('bfPixelsDEAD','shared',true);
+ frames = Paths.getSparrowAtlas('bfPixelsDEAD', 'shared', true);
animation.addByPrefix('singUP', "BF Dies pixel", 24, false);
animation.addByPrefix('firstDeath', "BF Dies pixel", 24, false);
animation.addByPrefix('deathLoop', "Retry Loop", 24, false);
@@ -312,8 +315,10 @@ class Character extends FlxSprite
antialiasing = false;
flipX = true;
+ barColor = 0xFF31b0d1;
+
case 'senpai':
- frames = Paths.getSparrowAtlas('senpai','shared',true);
+ frames = Paths.getSparrowAtlas('senpai', 'shared', true);
animation.addByPrefix('idle', 'Senpai Idle', 24, false);
animation.addByPrefix('singUP', 'SENPAI UP NOTE', 24, false);
animation.addByPrefix('singLEFT', 'SENPAI LEFT NOTE', 24, false);
@@ -321,6 +326,7 @@ class Character extends FlxSprite
animation.addByPrefix('singDOWN', 'SENPAI DOWN NOTE', 24, false);
loadOffsetFile(curCharacter);
+ barColor = 0xFFffaa6f;
playAnim('idle');
@@ -329,7 +335,7 @@ class Character extends FlxSprite
antialiasing = false;
case 'senpai-angry':
- frames = Paths.getSparrowAtlas('senpai','shared',true);
+ frames = Paths.getSparrowAtlas('senpai', 'shared', true);
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);
@@ -337,6 +343,7 @@ class Character extends FlxSprite
animation.addByPrefix('singDOWN', 'Angry Senpai DOWN NOTE', 24, false);
loadOffsetFile(curCharacter);
+ barColor = 0xFFffaa6f;
playAnim('idle');
setGraphicSize(Std.int(width * 6));
@@ -345,7 +352,7 @@ class Character extends FlxSprite
antialiasing = false;
case 'spirit':
- frames = Paths.getPackerAtlas('spirit','shared',true);
+ frames = Paths.getPackerAtlas('spirit', 'shared', true);
animation.addByPrefix('idle', "idle spirit_", 24, false);
animation.addByPrefix('singUP', "up_", 24, false);
animation.addByPrefix('singRIGHT', "right_", 24, false);
@@ -353,6 +360,7 @@ class Character extends FlxSprite
animation.addByPrefix('singDOWN', "spirit down_", 24, false);
loadOffsetFile(curCharacter);
+ barColor = 0xFFff3c6e;
setGraphicSize(Std.int(width * 6));
updateHitbox();
@@ -362,7 +370,7 @@ class Character extends FlxSprite
antialiasing = false;
case 'parents-christmas':
- frames = Paths.getSparrowAtlas('mom_dad_christmas_assets','shared',true);
+ frames = Paths.getSparrowAtlas('mom_dad_christmas_assets', 'shared', true);
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);
@@ -370,17 +378,21 @@ class Character extends FlxSprite
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);
+ animation.addByIndices('idleLoop', "Parent Christmas Idle", [11, 12], "", 12, true);
loadOffsetFile(curCharacter);
+ barColor = 0xFF9a00f8;
playAnim('idle');
+ default:
+ parseDataFile();
}
- dance();
+ if (curCharacter.startsWith('bf'))
+ dance();
if (isPlayer && frames != null)
{
@@ -405,6 +417,47 @@ class Character extends FlxSprite
}
}
+ function parseDataFile()
+ {
+ Debug.logInfo('Generating character (${curCharacter}) from JSON data...');
+
+ // Load the data from JSON and cast it to a struct we can easily read.
+ var jsonData = Paths.loadJSON('characters/${curCharacter}');
+ if (jsonData == null)
+ {
+ Debug.logError('Failed to parse JSON data for character ${curCharacter}');
+ return;
+ }
+
+ var data:CharacterData = cast jsonData;
+
+ var tex:FlxAtlasFrames = Paths.getSparrowAtlas(data.asset, 'shared');
+ frames = tex;
+ if (frames != null)
+ for (anim in data.animations)
+ {
+ var frameRate = anim.frameRate == null ? 24 : anim.frameRate;
+ var looped = anim.looped == null ? false : anim.looped;
+ var flipX = anim.flipX == null ? false : anim.flipX;
+ var flipY = anim.flipY == null ? false : anim.flipY;
+
+ if (anim.frameIndices != null)
+ {
+ animation.addByIndices(anim.name, anim.prefix, anim.frameIndices, "", frameRate, looped, flipX, flipY);
+ }
+ else
+ {
+ animation.addByPrefix(anim.name, anim.prefix, frameRate, looped, flipX, flipY);
+ }
+
+ animOffsets[anim.name] = anim.offsets == null ? [0, 0] : anim.offsets;
+ }
+
+ barColor = FlxColor.fromString(data.barColor);
+
+ playAnim(data.startingAnim);
+ }
+
public function loadOffsetFile(character:String, library:String = 'shared')
{
var offset:Array = CoolUtil.coolTextFile(Paths.txt('images/characters/' + character + "Offsets", library));
@@ -418,20 +471,35 @@ class Character extends FlxSprite
override function update(elapsed:Float)
{
- if (!curCharacter.startsWith('bf'))
+ if (!isPlayer)
{
if (animation.curAnim.name.startsWith('sing'))
{
holdTimer += elapsed;
}
+ if (curCharacter.endsWith('-car')
+ && !animation.curAnim.name.startsWith('sing')
+ && animation.curAnim.finished
+ && animation.getByName('idleHair') != null)
+ playAnim('idleHair');
+
+ if (animation.getByName('idleLoop') != null)
+ {
+ if (!animation.curAnim.name.startsWith('sing') && animation.curAnim.finished)
+ playAnim('idleLoop');
+ }
+
var dadVar:Float = 4;
if (curCharacter == 'dad')
dadVar = 6.1;
+ else if (curCharacter == 'gf' || curCharacter == 'spooky')
+ dadVar = 4.1; // fix double dances
if (holdTimer >= Conductor.stepCrochet * dadVar * 0.001)
{
- trace('dance');
+ if (curCharacter == 'gf' || curCharacter == 'spooky')
+ playAnim('danceLeft'); // overridden by dance correctly later
dance();
holdTimer = 0;
}
@@ -441,7 +509,10 @@ class Character extends FlxSprite
{
case 'gf':
if (animation.curAnim.name == 'hairFall' && animation.curAnim.finished)
+ {
+ danced = true;
playAnim('danceRight');
+ }
}
super.update(elapsed);
@@ -459,7 +530,7 @@ class Character extends FlxSprite
switch (curCharacter)
{
case 'gf' | 'gf-christmas' | 'gf-car' | 'gf-pixel':
- if (!animation.curAnim.name.startsWith('hair'))
+ if (!animation.curAnim.name.startsWith('hair') && !animation.curAnim.name.startsWith('sing'))
{
danced = !danced;
@@ -469,12 +540,22 @@ class Character extends FlxSprite
playAnim('danceLeft');
}
case 'spooky':
- danced = !danced;
+ if (!animation.curAnim.name.startsWith('sing'))
+ {
+ danced = !danced;
- if (danced)
- playAnim('danceRight');
- else
- playAnim('danceLeft');
+ if (danced)
+ playAnim('danceRight');
+ else
+ playAnim('danceLeft');
+ }
+ /*
+ // new dance code is gonna end up cutting off animation with the idle
+ // so here's example code that'll fix it. just adjust it to ya character 'n shit
+ case 'custom character':
+ if (!animation.curAnim.name.endsWith('custom animation'))
+ playAnim('idle', forced);
+ */
default:
if (altAnim && animation.getByName('idle-alt') != null)
playAnim('idle-alt', forced);
@@ -486,7 +567,6 @@ class Character extends FlxSprite
public function playAnim(AnimName:String, Force:Bool = false, Reversed:Bool = false, Frame:Int = 0):Void
{
-
if (AnimName.endsWith('alt') && animation.getByName(AnimName) == null)
{
#if debug
@@ -528,3 +608,41 @@ class Character extends FlxSprite
animOffsets[name] = [x, y];
}
}
+
+typedef CharacterData =
+{
+ var name:String;
+ var asset:String;
+ var startingAnim:String;
+
+ /**
+ * The color of this character's health bar.
+ */
+ var barColor:String;
+
+ var animations:Array;
+}
+
+typedef AnimationData =
+{
+ var name:String;
+ var prefix:String;
+ var ?offsets:Array;
+
+ /**
+ * Whether this animation is looped.
+ * @default false
+ */
+ var ?looped:Bool;
+
+ var ?flipX:Bool;
+ var ?flipY:Bool;
+
+ /**
+ * The frame rate of this animation.
+ * @default 24
+ */
+ var ?frameRate:Int;
+
+ var ?frameIndices:Array;
+}
diff --git a/source/ChartParser.hx b/source/ChartParser.hx
index 3884c0e54b..6f0c10727b 100644
--- a/source/ChartParser.hx
+++ b/source/ChartParser.hx
@@ -11,7 +11,7 @@ class ChartParser
var IMG_WIDTH:Int = 8;
var regex:EReg = new EReg("[ \t]*((\r\n)|\r|\n)[ \t]*", "g");
- var csvData = FlxStringUtil.imageToCSV(Paths.file('data/' + songName + '/' + songName + '_section' + section + '.png'));
+ var csvData = FlxStringUtil.imageToCSV(Paths.file('data/songs/' + songName + '/' + songName + '_section' + section + '.png'));
var lines:Array = regex.split(csvData);
var rows:Array = lines.filter(function(line) return line != "");
diff --git a/source/ChartingBox.hx b/source/ChartingBox.hx
index e9d933b571..15362bd62e 100644
--- a/source/ChartingBox.hx
+++ b/source/ChartingBox.hx
@@ -3,15 +3,15 @@ import flixel.FlxSprite;
class ChartingBox extends FlxSprite
{
- public var connectedNote:Note;
- public var connectedNoteData:Array;
+ public var connectedNote:Note;
+ public var connectedNoteData:Array;
- public function new(x,y, originalNote:Note)
- {
- super(x,y);
- connectedNote = originalNote;
+ public function new(x, y, originalNote:Note)
+ {
+ super(x, y);
+ connectedNote = originalNote;
- makeGraphic(40,40,FlxColor.fromRGB(173, 216, 230));
- alpha = 0.4;
- }
-}
\ No newline at end of file
+ makeGraphic(40, 40, FlxColor.fromRGB(173, 216, 230));
+ alpha = 0.4;
+ }
+}
diff --git a/source/ChartingState.hx b/source/ChartingState.hx
index 7daa0eb591..e02c9bc313 100644
--- a/source/ChartingState.hx
+++ b/source/ChartingState.hx
@@ -1,9 +1,11 @@
package;
+import Song.SongMeta;
import openfl.system.System;
import lime.app.Application;
-#if sys
+#if FEATURE_FILESYSTEM
import sys.io.File;
+import sys.FileSystem;
#end
import flixel.addons.ui.FlxUIButton;
import flixel.addons.ui.StrNameLabel;
@@ -13,7 +15,7 @@ import flixel.addons.ui.FlxUIText;
import haxe.zip.Writer;
import Conductor.BPMChangeEvent;
import Section.SwagSection;
-import Song.SwagSong;
+import Song.SongData;
import flixel.FlxG;
import flixel.FlxSprite;
import flixel.addons.display.FlxGridOverlay;
@@ -36,7 +38,6 @@ import flixel.ui.FlxButton;
import flixel.ui.FlxSpriteButton;
import flixel.util.FlxColor;
import haxe.Json;
-import lime.utils.Assets;
import openfl.events.Event;
import openfl.events.IOErrorEvent;
import openfl.events.IOErrorEvent;
@@ -44,7 +45,7 @@ import openfl.events.IOErrorEvent;
import openfl.media.Sound;
import openfl.net.FileReference;
import openfl.utils.ByteArray;
-#if desktop
+#if FEATURE_DISCORD
import Discord.DiscordClient;
#end
@@ -60,7 +61,7 @@ class ChartingState extends MusicBeatState
public var snap:Int = 16;
- public var deezNuts:Map = new Map(); // snap conversion map
+ public var deezNuts:Map = new Map(); // snap conversion map
var UI_box:FlxUITabMenu;
var UI_options:FlxUITabMenu;
@@ -97,7 +98,6 @@ class ChartingState extends MusicBeatState
var dummyArrow:FlxSprite;
-
var curRenderedNotes:FlxTypedGroup;
var curRenderedSustains:FlxTypedGroup;
@@ -105,7 +105,7 @@ class ChartingState extends MusicBeatState
public var sectionRenderes:FlxTypedGroup;
- public static var _song:SwagSong;
+ public static var _song:SongData;
var typingShit:FlxInputText;
/*
@@ -117,8 +117,8 @@ class ChartingState extends MusicBeatState
var gridBlackLine:FlxSprite;
var vocals:FlxSound;
- var player2:Character = new Character(0,0, "dad");
- var player1:Boyfriend = new Boyfriend(0,0, "bf");
+ var player2:Character = new Character(0, 0, "dad");
+ var player1:Boyfriend = new Boyfriend(0, 0, "bf");
public static var leftIcon:HealthIcon;
@@ -136,60 +136,75 @@ class ChartingState extends MusicBeatState
var camFollow:FlxObject;
- //public var waveform:Waveform;
+ public var waveform:Waveform;
public static var latestChartVersion = "2";
+ public function new(reloadOnInit:Bool = false)
+ {
+ super();
+ // If we're loading the charter from an arbitrary state, we need to reload the song on init,
+ // but if we're not, then reloading the song is a performance drop.
+ this.reloadOnInit = reloadOnInit;
+ }
+
+ var reloadOnInit = false;
+
override function create()
{
+ #if FEATURE_DISCORD
+ DiscordClient.changePresence("Chart Editor", null, null, true);
+ #end
+
curSection = lastSection;
- trace(1 > Math.POSITIVE_INFINITY);
+ Debug.logTrace(1 > Math.POSITIVE_INFINITY);
+
+ Debug.logTrace(PlayState.noteskinSprite);
+
+ PlayState.noteskinSprite = NoteskinHelpers.generateNoteskinSprite(FlxG.save.data.noteskin);
FlxG.mouse.visible = true;
instance = this;
- deezNuts.set(4,1);
- deezNuts.set(8,2);
- deezNuts.set(12,3);
- deezNuts.set(16,4);
- deezNuts.set(24,6);
- deezNuts.set(32,8);
- deezNuts.set(64,16);
+ deezNuts.set(4, 1);
+ deezNuts.set(8, 2);
+ deezNuts.set(12, 3);
+ deezNuts.set(16, 4);
+ deezNuts.set(24, 6);
+ deezNuts.set(32, 8);
+ deezNuts.set(64, 16);
+ if (FlxG.save.data.showHelp == null)
+ FlxG.save.data.showHelp = true;
sectionRenderes = new FlxTypedGroup();
lines = new FlxTypedGroup();
texts = new FlxTypedGroup();
-
- TimingStruct.clearTimings();
-
-
+ TimingStruct.clearTimings();
if (PlayState.SONG != null)
{
if (PlayState.isSM)
+ {
+ #if FEATURE_STEPMANIA
_song = Song.conversionChecks(Song.loadFromJsonRAW(File.getContent(PlayState.pathToSm + "/converted.json")));
+ #end
+ }
else
{
- var songFormat = StringTools.replace(PlayState.SONG.song, " ", "-");
- switch (songFormat) {
- case 'Dad-Battle': songFormat = 'Dadbattle';
- case 'Philly-Nice': songFormat = 'Philly';
- }
-
- var poop:String = Highscore.formatSong(songFormat, PlayState.storyDifficulty);
-
- _song = Song.conversionChecks(Song.loadFromJson(poop, PlayState.SONG.song));
+ var diff:String = ["-easy", "", "-hard"][PlayState.storyDifficulty];
+ _song = Song.conversionChecks(Song.loadFromJson(PlayState.SONG.songId, diff));
}
}
else
{
_song = {
chartVersion: latestChartVersion,
- song: 'Test',
+ songId: 'test',
+ songName: 'Test',
notes: [],
eventObjects: [],
bpm: 150,
@@ -208,17 +223,14 @@ class ChartingState extends MusicBeatState
if (_song.chartVersion == null)
_song.chartVersion = "2";
-
- //var blackBorder:FlxSprite = new FlxSprite(60,10).makeGraphic(120,100,FlxColor.BLACK);
- //blackBorder.scrollFactor.set();
+ // var blackBorder:FlxSprite = new FlxSprite(60,10).makeGraphic(120,100,FlxColor.BLACK);
+ // blackBorder.scrollFactor.set();
- //blackBorder.alpha = 0.3;
+ // blackBorder.alpha = 0.3;
-
- snapText = new FlxText(60,10,0,"", 14);
+ snapText = new FlxText(60, 10, 0, "", 14);
snapText.scrollFactor.set();
-
curRenderedNotes = new FlxTypedGroup();
curRenderedSustains = new FlxTypedGroup();
@@ -231,7 +243,7 @@ class ChartingState extends MusicBeatState
// sections = _song.notes;
- loadSong(_song.song);
+ loadSong(_song.songId, reloadOnInit);
Conductor.changeBPM(_song.bpm);
Conductor.mapBPMChanges(_song);
@@ -241,39 +253,38 @@ class ChartingState extends MusicBeatState
var index = 0;
if (_song.eventObjects == null)
- _song.eventObjects = [new Song.Event("Init BPM",0,_song.bpm,"BPM Change")];
+ _song.eventObjects = [new Song.Event("Init BPM", 0, _song.bpm, "BPM Change")];
if (_song.eventObjects.length == 0)
- _song.eventObjects = [new Song.Event("Init BPM",0,_song.bpm,"BPM Change")];
-
+ _song.eventObjects = [new Song.Event("Init BPM", 0, _song.bpm, "BPM Change")];
- trace("goin");
+ Debug.logTrace("goin");
var currentIndex = 0;
for (i in _song.eventObjects)
{
- var name = Reflect.field(i,"name");
- var type = Reflect.field(i,"type");
- var pos = Reflect.field(i,"position");
- var value = Reflect.field(i,"value");
+ var name = Reflect.field(i, "name");
+ var type = Reflect.field(i, "type");
+ var pos = Reflect.field(i, "position");
+ var value = Reflect.field(i, "value");
if (type == "BPM Change")
{
- var beat:Float = pos;
+ var beat:Float = pos;
+
+ var endBeat:Float = Math.POSITIVE_INFINITY;
- var endBeat:Float = Math.POSITIVE_INFINITY;
+ TimingStruct.addTiming(beat, value, endBeat, 0); // offset in this case = start time since we don't have a offset
- TimingStruct.addTiming(beat,value,endBeat, 0); // offset in this case = start time since we don't have a offset
-
- if (currentIndex != 0)
- {
- var data = TimingStruct.AllTimings[currentIndex - 1];
- data.endBeat = beat;
- data.length = (data.endBeat - data.startBeat) / (data.bpm / 60);
+ if (currentIndex != 0)
+ {
+ var data = TimingStruct.AllTimings[currentIndex - 1];
+ data.endBeat = beat;
+ data.length = (data.endBeat - data.startBeat) / (data.bpm / 60);
var step = ((60 / data.bpm) * 1000) / 4;
TimingStruct.AllTimings[currentIndex].startStep = Math.floor(((data.endBeat / (data.bpm / 60)) * 1000) / step);
TimingStruct.AllTimings[currentIndex].startTime = data.startTime + data.length;
- }
+ }
currentIndex++;
}
@@ -284,25 +295,22 @@ class ChartingState extends MusicBeatState
for (i in 0...TimingStruct.AllTimings.length)
{
var seg = TimingStruct.AllTimings[i];
- if (i == TimingStruct.AllTimings.length - 1)
+ if (i == TimingStruct.AllTimings.length - 1)
lastSeg = seg;
}
- trace("STRUCTS: " + TimingStruct.AllTimings.length);
+ Debug.logTrace("STRUCTS: " + TimingStruct.AllTimings.length);
-
- recalculateAllSectionTimes();
+ recalculateAllSectionTimes();
poggers();
-
- trace("Song length in MS: " + FlxG.sound.music.length);
+ Debug.logTrace("Song length in MS: " + FlxG.sound.music.length);
- for(i in 0...9000000) // REALLY HIGH BEATS just cuz like ig this is the upper limit, I mean ur chart is probably going to run like ass anyways
+ for (i in 0...9000000) // REALLY HIGH BEATS just cuz like ig this is the upper limit, I mean ur chart is probably going to run like ass anyways
{
var seg = TimingStruct.getTimingAtBeat(i);
-
var start:Float = (i - seg.startBeat) / (seg.bpm / 60);
var time = (seg.startTime + start) * 1000;
@@ -315,19 +323,25 @@ class ChartingState extends MusicBeatState
lengthInSteps = lengthInBeats * 4;
- trace('LENGTH IN STEPS ' + lengthInSteps + ' | LENGTH IN BEATS ' + lengthInBeats + ' | SECTIONS: ' + Math.floor(((lengthInSteps + 16)) / 16));
+ Debug.logTrace('LENGTH IN STEPS '
+ + lengthInSteps
+ + ' | LENGTH IN BEATS '
+ + lengthInBeats
+ + ' | SECTIONS: '
+ + Math.floor(((lengthInSteps + 16)) / 16));
var sections = Math.floor(((lengthInSteps + 16)) / 16);
var targetY = getYfromStrum(FlxG.sound.music.length);
- trace("TARGET " + targetY);
+ Debug.logTrace("TARGET " + targetY);
- for (awfgaw in 0...Math.round(targetY / 640) + 1920) // grids/steps
+ for (awfgaw in 0...Math.round(targetY / 640)) // grids/steps
{
- var renderer = new SectionRender(0,640 * awfgaw,GRID_SIZE);
+ var renderer = new SectionRender(0, 640 * awfgaw, GRID_SIZE);
if (_song.notes[awfgaw] == null)
- _song.notes.push(newSection(16,true,false,false));
+ _song.notes.push(newSection(16, true, false, false));
+
renderer.section = _song.notes[awfgaw];
sectionRenderes.add(renderer);
@@ -338,23 +352,20 @@ class ChartingState extends MusicBeatState
sectionicon.x = -95;
sectionicon.y = down - 75;
sectionicon.setGraphicSize(0, 45);
-
+
renderer.icon = sectionicon;
renderer.lastUpdated = _song.notes[awfgaw].mustHitSection;
-
+
add(sectionicon);
height = Math.floor(renderer.y);
}
-
-
- trace(height);
+ Debug.logTrace(height);
gridBlackLine = new FlxSprite(gridBG.width / 2).makeGraphic(2, height, FlxColor.BLACK);
- //leftIcon.scrollFactor.set();
- //rightIcon.scrollFactor.set();
-
+ // leftIcon.scrollFactor.set();
+ // rightIcon.scrollFactor.set();
leftIcon.setGraphicSize(0, 45);
rightIcon.setGraphicSize(0, 45);
@@ -368,7 +379,7 @@ class ChartingState extends MusicBeatState
leftIcon.scrollFactor.set();
rightIcon.scrollFactor.set();
- bpmTxt = new FlxText(1000, 50, 0, "", 16);
+ bpmTxt = new FlxText(985, 25, 0, "", 16);
bpmTxt.scrollFactor.set();
add(bpmTxt);
@@ -383,13 +394,13 @@ class ChartingState extends MusicBeatState
];
UI_box = new FlxUITabMenu(null, tabs, true);
-
+
UI_box.scrollFactor.set();
UI_box.resize(300, 400);
UI_box.x = FlxG.width / 2 + 40;
UI_box.y = 20;
- var opt_tabs = [{name: "Options", label:'Song Options'}, {name: "Events", label:'Song Events'}];
+ var opt_tabs = [{name: "Options", label: 'Song Options'}, {name: "Events", label: 'Song Events'}];
UI_options = new FlxUITabMenu(null, opt_tabs, true);
@@ -401,7 +412,6 @@ class ChartingState extends MusicBeatState
add(UI_options);
add(UI_box);
-
addSongUI();
addSectionUI();
addNoteUI();
@@ -410,32 +420,12 @@ class ChartingState extends MusicBeatState
addEventsUI();
regenerateLines();
-
updateGrid();
- trace("bruh");
-
-
+ Debug.logTrace("bruh");
add(sectionRenderes);
-
- // fuckin stupid ass bitch ass fucking waveform
- /*if (PlayState.isSM)
- {
- waveform = new Waveform(0,0,PlayState.pathToSm + "/" + PlayState.sm.header.MUSIC,height);
- }
- else
- {
- if (_song.needsVoices)
- waveform = new Waveform(0,0,Paths.voices(_song.song),height);
- else
- waveform = new Waveform(0,0,Paths.inst(_song.song),height);
- }
-
- waveform.drawWaveform();
- add(waveform);
- */
add(dummyArrow);
add(strumLine);
add(lines);
@@ -447,14 +437,14 @@ class ChartingState extends MusicBeatState
add(selectedBoxes);
- trace("bruh");
+ Debug.logTrace("bruh");
- //add(blackBorder);
+ // add(blackBorder);
add(snapText);
- trace("bruh");
+ Debug.logTrace("bruh");
- trace("create");
+ Debug.logTrace("create");
super.create();
}
@@ -463,21 +453,21 @@ class ChartingState extends MusicBeatState
function regenerateLines()
{
- while(lines.members.length > 0)
+ while (lines.members.length > 0)
{
lines.members[0].destroy();
lines.members.remove(lines.members[0]);
}
- while(texts.members.length > 0)
+ while (texts.members.length > 0)
{
texts.members[0].destroy();
texts.members.remove(texts.members[0]);
}
- trace("removed lines and texts");
+ Debug.logTrace("removed lines and texts");
if (_song.eventObjects != null)
- for(i in _song.eventObjects)
+ for (i in _song.eventObjects)
{
var seg = TimingStruct.getTimingAtBeat(i.position);
@@ -497,14 +487,14 @@ class ChartingState extends MusicBeatState
var type = i.type;
- var text = new FlxText(-190, pos,0,i.name + "\n" + type + "\n" + i.value,12);
+ var text = new FlxText(-190, pos, 0, i.name + "\n" + type + "\n" + i.value, 12);
var line = new FlxSprite(0, pos).makeGraphic(Std.int(GRID_SIZE * 8), 4, FlxColor.BLUE);
line.alpha = 0.2;
lines.add(line);
texts.add(text);
-
+
add(line);
add(text);
}
@@ -528,28 +518,26 @@ class ChartingState extends MusicBeatState
h = GRID_SIZE;
remove(gridBG);
- gridBG = FlxGridOverlay.create(GRID_SIZE, Std.int(h), GRID_SIZE * 8,GRID_SIZE * 16);
- trace(gridBG.height);
- //gridBG.scrollFactor.set();
- //gridBG.x += 358;
- //gridBG.y += 390;
- trace("height of " + (Math.floor(lengthInSteps)));
-
+ gridBG = FlxGridOverlay.create(GRID_SIZE, Std.int(h), GRID_SIZE * 8, GRID_SIZE * 16);
+ Debug.logTrace(gridBG.height);
+ // gridBG.scrollFactor.set();
+ // gridBG.x += 358;
+ // gridBG.y += 390;
+ Debug.logTrace("height of " + (Math.floor(lengthInSteps)));
/*for(i in 0...Math.floor(lengthInSteps))
- {
- trace("Creating sprite " + i);
- var grid = FlxGridOverlay.create(GRID_SIZE, Std.int(h), GRID_SIZE * 8, GRID_SIZE * 16);
- add(grid);
- if (i > lengthInSteps)
- break;
+ {
+ Debug.logTrace("Creating sprite " + i);
+ var grid = FlxGridOverlay.create(GRID_SIZE, Std.int(h), GRID_SIZE * 8, GRID_SIZE * 16);
+ add(grid);
+ if (i > lengthInSteps)
+ break;
}*/
var totalHeight = 0;
- //add(gridBG);
+ // add(gridBG);
-
remove(gridBlackLine);
gridBlackLine = new FlxSprite(0 + gridBG.width / 2).makeGraphic(2, Std.int(Math.floor(lengthInSteps)), FlxColor.BLACK);
add(gridBlackLine);
@@ -567,7 +555,7 @@ class ChartingState extends MusicBeatState
{
for (i in events)
{
- var thisName = Reflect.field(i,"name");
+ var thisName = Reflect.field(i, "name");
if (thisName == name)
return i;
@@ -581,389 +569,387 @@ class ChartingState extends MusicBeatState
function addEventsUI()
{
- if (_song.eventObjects == null)
- {
- _song.eventObjects = [new Song.Event("Init BPM",0,_song.bpm,"BPM Change")];
- }
-
- var firstEvent = "";
-
- if (Lambda.count(_song.eventObjects) != 0)
- {
- firstEvent = _song.eventObjects[0].name;
- }
-
- var listLabel = new FlxText(10, 5, 'List of Events');
- var nameLabel = new FlxText(150, 5, 'Event Name');
- var eventName = new FlxUIInputText(150,20,80,"");
- var typeLabel = new FlxText(10, 45, 'Type of Event');
- var eventType = new FlxUIDropDownMenu(10,60,FlxUIDropDownMenu.makeStrIdLabelArray(["BPM Change", "Scroll Speed Change"], true));
- var valueLabel = new FlxText(150, 45, 'Event Value');
- var eventValue = new FlxUIInputText(150,60,80,"");
- var eventSave = new FlxButton(10,155,"Save Event", function() {
- var pog:Song.Event = new Song.Event(currentSelectedEventName,currentEventPosition,HelperFunctions.truncateFloat(Std.parseFloat(savedValue), 3),savedType);
-
- trace("trying to save " + currentSelectedEventName);
-
- var obj = containsName(pog.name,_song.eventObjects);
-
-
- if (pog.name == "")
- return;
-
- trace("yeah we can save it");
-
- if (obj != null)
- _song.eventObjects.remove(obj);
- _song.eventObjects.push(pog);
-
- trace(_song.eventObjects.length);
-
- TimingStruct.clearTimings();
+ if (_song.eventObjects == null)
+ {
+ _song.eventObjects = [new Song.Event("Init BPM", 0, _song.bpm, "BPM Change")];
+ }
- var currentIndex = 0;
- for (i in _song.eventObjects)
- {
- var name = Reflect.field(i,"name");
- var type = Reflect.field(i,"type");
- var pos = Reflect.field(i,"position");
- var value = Reflect.field(i,"value");
+ var firstEvent = "";
- trace(i.type);
- if (type == "BPM Change")
- {
- var beat:Float = pos;
+ if (Lambda.count(_song.eventObjects) != 0)
+ {
+ firstEvent = _song.eventObjects[0].name;
+ }
- var endBeat:Float = Math.POSITIVE_INFINITY;
+ var listLabel = new FlxText(10, 5, 'List of Events');
+ var nameLabel = new FlxText(150, 5, 'Event Name');
+ var eventName = new FlxUIInputText(150, 20, 80, "");
+ var typeLabel = new FlxText(10, 45, 'Type of Event');
+ var eventType = new FlxUIDropDownMenu(10, 60, FlxUIDropDownMenu.makeStrIdLabelArray(["BPM Change", "Scroll Speed Change"], true));
+ var valueLabel = new FlxText(150, 45, 'Event Value');
+ var eventValue = new FlxUIInputText(150, 60, 80, "");
+ var eventSave = new FlxButton(10, 155, "Save Event", function()
+ {
+ var pog:Song.Event = new Song.Event(currentSelectedEventName, currentEventPosition, HelperFunctions.truncateFloat(Std.parseFloat(savedValue), 3),
+ savedType);
- TimingStruct.addTiming(beat,value,endBeat, 0); // offset in this case = start time since we don't have a offset
-
- if (currentIndex != 0)
- {
- var data = TimingStruct.AllTimings[currentIndex - 1];
- data.endBeat = beat;
- data.length = (data.endBeat - data.startBeat) / (data.bpm / 60);
- var step = ((60 / data.bpm) * 1000) / 4;
- TimingStruct.AllTimings[currentIndex].startStep = Math.floor(((data.endBeat / (data.bpm / 60)) * 1000) / step);
- TimingStruct.AllTimings[currentIndex].startTime = data.startTime + data.length;
- }
+ Debug.logTrace("trying to save " + currentSelectedEventName);
- currentIndex++;
- }
- }
+ var obj = containsName(pog.name, _song.eventObjects);
+
+ if (pog.name == "")
+ return;
+
+ Debug.logTrace("yeah we can save it");
+
+ if (obj != null)
+ _song.eventObjects.remove(obj);
+ _song.eventObjects.push(pog);
+
+ Debug.logTrace(_song.eventObjects.length);
+
+ TimingStruct.clearTimings();
+
+ var currentIndex = 0;
+ for (i in _song.eventObjects)
+ {
+ var name = Reflect.field(i, "name");
+ var type = Reflect.field(i, "type");
+ var pos = Reflect.field(i, "position");
+ var value = Reflect.field(i, "value");
- if (pog.type == "BPM Change")
+ Debug.logTrace(i.type);
+ if (type == "BPM Change")
+ {
+ var beat:Float = pos;
+
+ var endBeat:Float = Math.POSITIVE_INFINITY;
+
+ TimingStruct.addTiming(beat, value, endBeat, 0); // offset in this case = start time since we don't have a offset
+
+ if (currentIndex != 0)
{
- recalculateAllSectionTimes();
- poggers();
+ var data = TimingStruct.AllTimings[currentIndex - 1];
+ data.endBeat = beat;
+ data.length = (data.endBeat - data.startBeat) / (data.bpm / 60);
+ var step = ((60 / data.bpm) * 1000) / 4;
+ TimingStruct.AllTimings[currentIndex].startStep = Math.floor(((data.endBeat / (data.bpm / 60)) * 1000) / step);
+ TimingStruct.AllTimings[currentIndex].startTime = data.startTime + data.length;
}
- regenerateLines();
+ currentIndex++;
+ }
+ }
+
+ if (pog.type == "BPM Change")
+ {
+ recalculateAllSectionTimes();
+ poggers();
+ }
+
+ regenerateLines();
+
+ var listofnames = [];
+
+ for (key => value in _song.eventObjects)
+ {
+ listofnames.push(value.name);
+ }
- var listofnames = [];
-
- for (key => value in _song.eventObjects) {
- listofnames.push(value.name);
- }
-
- listOfEvents.setData(FlxUIDropDownMenu.makeStrIdLabelArray(listofnames, true));
+ listOfEvents.setData(FlxUIDropDownMenu.makeStrIdLabelArray(listofnames, true));
- listOfEvents.selectedLabel = pog.name;
+ listOfEvents.selectedLabel = pog.name;
- trace('end');
- });
- var posLabel = new FlxText(150, 85, 'Event Position');
- var eventPos = new FlxUIInputText(150,100,80,"");
- var eventAdd = new FlxButton(95,155,"Add Event", function() {
+ Debug.logTrace('end');
+ });
+ var posLabel = new FlxText(150, 85, 'Event Position');
+ var eventPos = new FlxUIInputText(150, 100, 80, "");
+ var eventAdd = new FlxButton(95, 155, "Add Event", function()
+ {
+ var pog:Song.Event = new Song.Event("New Event " + HelperFunctions.truncateFloat(curDecimalBeat, 3),
+ HelperFunctions.truncateFloat(curDecimalBeat, 3), _song.bpm, "BPM Change");
- var pog:Song.Event = new Song.Event("New Event " + HelperFunctions.truncateFloat(curDecimalBeat, 3),HelperFunctions.truncateFloat(curDecimalBeat, 3),_song.bpm,"BPM Change");
-
- trace("adding " + pog.name);
+ Debug.logTrace("adding " + pog.name);
- var obj = containsName(pog.name,_song.eventObjects);
-
- if (obj != null)
- return;
+ var obj = containsName(pog.name, _song.eventObjects);
- trace("yeah we can add it");
+ if (obj != null)
+ return;
- _song.eventObjects.push(pog);
+ Debug.logTrace("yeah we can add it");
- eventName.text = pog.name;
- eventType.selectedLabel = pog.type;
- eventValue.text = pog.value + "";
- eventPos.text = pog.position + "";
- currentSelectedEventName = pog.name;
- currentEventPosition = pog.position;
+ _song.eventObjects.push(pog);
- savedType = pog.type;
- savedValue = pog.value + "";
+ eventName.text = pog.name;
+ eventType.selectedLabel = pog.type;
+ eventValue.text = pog.value + "";
+ eventPos.text = pog.position + "";
+ currentSelectedEventName = pog.name;
+ currentEventPosition = pog.position;
- var listofnames = [];
-
- for (key => value in _song.eventObjects) {
- listofnames.push(value.name);
- }
-
- listOfEvents.setData(FlxUIDropDownMenu.makeStrIdLabelArray(listofnames, true));
+ savedType = pog.type;
+ savedValue = pog.value + "";
- listOfEvents.selectedLabel = pog.name;
+ var listofnames = [];
- TimingStruct.clearTimings();
+ for (key => value in _song.eventObjects)
+ {
+ listofnames.push(value.name);
+ }
- var currentIndex = 0;
- for (i in _song.eventObjects)
- {
- var name = Reflect.field(i,"name");
- var type = Reflect.field(i,"type");
- var pos = Reflect.field(i,"position");
- var value = Reflect.field(i,"value");
+ listOfEvents.setData(FlxUIDropDownMenu.makeStrIdLabelArray(listofnames, true));
- trace(i.type);
- if (type == "BPM Change")
- {
- var beat:Float = pos;
+ listOfEvents.selectedLabel = pog.name;
- var endBeat:Float = Math.POSITIVE_INFINITY;
+ TimingStruct.clearTimings();
- TimingStruct.addTiming(beat,value,endBeat, 0); // offset in this case = start time since we don't have a offset
-
- if (currentIndex != 0)
- {
- var data = TimingStruct.AllTimings[currentIndex - 1];
- data.endBeat = beat;
- data.length = (data.endBeat - data.startBeat) / (data.bpm / 60);
- var step = ((60 / data.bpm) * 1000) / 4;
- TimingStruct.AllTimings[currentIndex].startStep = Math.floor(((data.endBeat / (data.bpm / 60)) * 1000) / step);
- TimingStruct.AllTimings[currentIndex].startTime = data.startTime + data.length;
- }
+ var currentIndex = 0;
+ for (i in _song.eventObjects)
+ {
+ var name = Reflect.field(i, "name");
+ var type = Reflect.field(i, "type");
+ var pos = Reflect.field(i, "position");
+ var value = Reflect.field(i, "value");
- currentIndex++;
- }
+ Debug.logTrace(i.type);
+ if (type == "BPM Change")
+ {
+ var beat:Float = pos;
+
+ var endBeat:Float = Math.POSITIVE_INFINITY;
+
+ TimingStruct.addTiming(beat, value, endBeat, 0); // offset in this case = start time since we don't have a offset
+
+ if (currentIndex != 0)
+ {
+ var data = TimingStruct.AllTimings[currentIndex - 1];
+ data.endBeat = beat;
+ data.length = (data.endBeat - data.startBeat) / (data.bpm / 60);
+ var step = ((60 / data.bpm) * 1000) / 4;
+ TimingStruct.AllTimings[currentIndex].startStep = Math.floor(((data.endBeat / (data.bpm / 60)) * 1000) / step);
+ TimingStruct.AllTimings[currentIndex].startTime = data.startTime + data.length;
}
- trace("BPM CHANGES:");
- for (i in TimingStruct.AllTimings)
- trace(i.bpm + " - START: " + i.startBeat + " - END: " + i.endBeat + " - START-TIME: " + i.startTime);
+ currentIndex++;
+ }
+ }
+ Debug.logTrace("BPM CHANGES:");
- recalculateAllSectionTimes();
- poggers();
+ for (i in TimingStruct.AllTimings)
+ Debug.logTrace(i.bpm + " - START: " + i.startBeat + " - END: " + i.endBeat + " - START-TIME: " + i.startTime);
- regenerateLines();
+ recalculateAllSectionTimes();
+ poggers();
+ regenerateLines();
+ });
+ var eventRemove = new FlxButton(180, 155, "Remove Event", function()
+ {
+ Debug.logTrace("lets see if we can remove " + listOfEvents.selectedLabel);
- });
- var eventRemove = new FlxButton(180,155,"Remove Event", function() {
+ var obj = containsName(listOfEvents.selectedLabel, _song.eventObjects);
- trace("lets see if we can remove " + listOfEvents.selectedLabel);
+ Debug.logTrace(obj);
- var obj = containsName(listOfEvents.selectedLabel,_song.eventObjects);
+ if (obj == null)
+ return;
- trace(obj);
-
- if (obj == null)
- return;
+ Debug.logTrace("yeah we can remove it it");
- trace("yeah we can remove it it");
+ _song.eventObjects.remove(obj);
- _song.eventObjects.remove(obj);
+ var firstEvent = _song.eventObjects[0];
- var firstEvent = _song.eventObjects[0];
+ if (firstEvent == null)
+ {
+ _song.eventObjects.push(new Song.Event("Init BPM", 0, _song.bpm, "BPM Change"));
+ firstEvent = _song.eventObjects[0];
+ }
- if (firstEvent == null)
- {
- _song.eventObjects.push(new Song.Event("Init BPM",0,_song.bpm,"BPM Change"));
- firstEvent = _song.eventObjects[0];
- }
+ eventName.text = firstEvent.name;
+ eventType.selectedLabel = firstEvent.type;
+ eventValue.text = firstEvent.value + "";
+ eventPos.text = firstEvent.position + "";
+ currentSelectedEventName = firstEvent.name;
+ currentEventPosition = firstEvent.position;
- eventName.text = firstEvent.name;
- eventType.selectedLabel = firstEvent.type;
- eventValue.text = firstEvent.value + "";
- eventPos.text = firstEvent.position + "";
- currentSelectedEventName = firstEvent.name;
- currentEventPosition = firstEvent.position;
+ savedType = firstEvent.type;
+ savedValue = firstEvent.value + '';
- savedType = firstEvent.type;
- savedValue = firstEvent.value + '';
+ var listofnames = [];
- var listofnames = [];
-
- for (key => value in _song.eventObjects) {
- listofnames.push(value.name);
- }
-
- listOfEvents.setData(FlxUIDropDownMenu.makeStrIdLabelArray(listofnames, true));
+ for (key => value in _song.eventObjects)
+ {
+ listofnames.push(value.name);
+ }
- listOfEvents.selectedLabel = firstEvent.name;
+ listOfEvents.setData(FlxUIDropDownMenu.makeStrIdLabelArray(listofnames, true));
- TimingStruct.clearTimings();
+ listOfEvents.selectedLabel = firstEvent.name;
- var currentIndex = 0;
- for (i in _song.eventObjects)
- {
- var name = Reflect.field(i,"name");
- var type = Reflect.field(i,"type");
- var pos = Reflect.field(i,"position");
- var value = Reflect.field(i,"value");
+ TimingStruct.clearTimings();
- trace(i.type);
- if (type == "BPM Change")
- {
- var beat:Float = pos;
+ var currentIndex = 0;
+ for (i in _song.eventObjects)
+ {
+ var name = Reflect.field(i, "name");
+ var type = Reflect.field(i, "type");
+ var pos = Reflect.field(i, "position");
+ var value = Reflect.field(i, "value");
- var endBeat:Float = Math.POSITIVE_INFINITY;
+ Debug.logTrace(i.type);
+ if (type == "BPM Change")
+ {
+ var beat:Float = pos;
- TimingStruct.addTiming(beat,value,endBeat, 0); // offset in this case = start time since we don't have a offset
-
- if (currentIndex != 0)
- {
- var data = TimingStruct.AllTimings[currentIndex - 1];
- data.endBeat = beat;
- data.length = (data.endBeat - data.startBeat) / (data.bpm / 60);
- var step = ((60 / data.bpm) * 1000) / 4;
- TimingStruct.AllTimings[currentIndex].startStep = Math.floor(((data.endBeat / (data.bpm / 60)) * 1000) / step);
- TimingStruct.AllTimings[currentIndex].startTime = data.startTime + data.length;
- }
+ var endBeat:Float = Math.POSITIVE_INFINITY;
- currentIndex++;
- }
+ TimingStruct.addTiming(beat, value, endBeat, 0); // offset in this case = start time since we don't have a offset
+
+ if (currentIndex != 0)
+ {
+ var data = TimingStruct.AllTimings[currentIndex - 1];
+ data.endBeat = beat;
+ data.length = (data.endBeat - data.startBeat) / (data.bpm / 60);
+ var step = ((60 / data.bpm) * 1000) / 4;
+ TimingStruct.AllTimings[currentIndex].startStep = Math.floor(((data.endBeat / (data.bpm / 60)) * 1000) / step);
+ TimingStruct.AllTimings[currentIndex].startTime = data.startTime + data.length;
}
- recalculateAllSectionTimes();
- poggers();
+ currentIndex++;
+ }
+ }
- regenerateLines();
+ recalculateAllSectionTimes();
+ poggers();
+ regenerateLines();
+ });
+ var updatePos = new FlxButton(150, 120, "Update Pos", function()
+ {
+ var obj = containsName(currentSelectedEventName, _song.eventObjects);
+ if (obj == null)
+ return;
+ currentEventPosition = curDecimalBeat;
+ obj.position = currentEventPosition;
+ eventPos.text = currentEventPosition + "";
+ });
- });
- var updatePos = new FlxButton(150,120,"Update Pos", function() {
- var obj = containsName(currentSelectedEventName,_song.eventObjects);
- if (obj == null)
- return;
- currentEventPosition = curDecimalBeat;
- obj.position = currentEventPosition;
- eventPos.text = currentEventPosition + "";
- });
+ var listofnames = [];
-
-
- var listofnames = [];
+ var firstEventObject = null;
- var firstEventObject = null;
-
- for (event in _song.eventObjects) {
- var name = Reflect.field(event,"name");
- var type = Reflect.field(event,"type");
- var pos = Reflect.field(event,"position");
- var value = Reflect.field(event,"value");
+ for (event in _song.eventObjects)
+ {
+ var name = Reflect.field(event, "name");
+ var type = Reflect.field(event, "type");
+ var pos = Reflect.field(event, "position");
+ var value = Reflect.field(event, "value");
- trace(value);
+ Debug.logTrace(value);
- var eventt = new Song.Event(name,pos,value,type);
+ var eventt = new Song.Event(name, pos, value, type);
- chartEvents.push(eventt);
- listofnames.push(name);
- }
+ chartEvents.push(eventt);
+ listofnames.push(name);
+ }
- _song.eventObjects = chartEvents;
+ _song.eventObjects = chartEvents;
- if (listofnames.length == 0)
- listofnames.push("");
+ if (listofnames.length == 0)
+ listofnames.push("");
- if (_song.eventObjects.length != 0)
- firstEventObject = _song.eventObjects[0];
- trace("bruh");
+ if (_song.eventObjects.length != 0)
+ firstEventObject = _song.eventObjects[0];
+ Debug.logTrace("bruh");
+ if (firstEvent != "")
+ {
+ Debug.logTrace(firstEventObject);
+ eventName.text = firstEventObject.name;
+ Debug.logTrace("bruh");
+ eventType.selectedLabel = firstEventObject.type;
+ Debug.logTrace("bruh");
+ eventValue.text = firstEventObject.value + "";
+ Debug.logTrace("bruh");
+ currentSelectedEventName = firstEventObject.name;
+ Debug.logTrace("bruh");
+ currentEventPosition = firstEventObject.position;
+ Debug.logTrace("bruh");
+ eventPos.text = currentEventPosition + "";
+ Debug.logTrace("bruh");
+ }
- if (firstEvent != "")
- {
- trace(firstEventObject);
- eventName.text = firstEventObject.name;
- trace("bruh");
- eventType.selectedLabel = firstEventObject.type;
- trace("bruh");
- eventValue.text = firstEventObject.value + "";
- trace("bruh");
- currentSelectedEventName = firstEventObject.name;
- trace("bruh");
- currentEventPosition = firstEventObject.position;
- trace("bruh");
- eventPos.text = currentEventPosition + "";
- trace("bruh");
- }
+ listOfEvents = new FlxUIDropDownMenu(10, 20, FlxUIDropDownMenu.makeStrIdLabelArray(listofnames, true), function(name:String)
+ {
+ var event = containsName(listOfEvents.selectedLabel, _song.eventObjects);
- listOfEvents = new FlxUIDropDownMenu(10,20, FlxUIDropDownMenu.makeStrIdLabelArray(listofnames, true), function(name:String)
- {
- var event = containsName(listOfEvents.selectedLabel,_song.eventObjects);
-
- if (event == null)
- return;
-
- trace('selecting ' + name + ' found: ' + event);
-
- eventName.text = event.name;
- eventValue.text = event.value + "";
- eventPos.text = event.position + "";
- eventType.selectedLabel = event.type;
- currentSelectedEventName = event.name;
- currentEventPosition = event.position;
- });
+ if (event == null)
+ return;
- eventValue.callback = function(string:String, string2:String)
- {
- trace(string + " - value");
- savedValue = string;
- };
-
- eventType.callback = function(type:String)
- {
- savedType = eventType.selectedLabel;
- };
-
- eventName.callback = function(string:String, string2:String)
+ Debug.logTrace('selecting ' + name + ' found: ' + event);
+
+ eventName.text = event.name;
+ eventValue.text = event.value + "";
+ eventPos.text = event.position + "";
+ eventType.selectedLabel = event.type;
+ currentSelectedEventName = event.name;
+ currentEventPosition = event.position;
+ });
+
+ eventValue.callback = function(string:String, string2:String)
+ {
+ Debug.logTrace(string + " - value");
+ savedValue = string;
+ };
+
+ eventType.callback = function(type:String)
+ {
+ savedType = eventType.selectedLabel;
+ };
+
+ eventName.callback = function(string:String, string2:String)
+ {
+ var obj = containsName(currentSelectedEventName, _song.eventObjects);
+ if (obj == null)
{
- var obj = containsName(currentSelectedEventName,_song.eventObjects);
- if (obj == null)
- {
- currentSelectedEventName = string;
- return;
- }
- obj = containsName(string,_song.eventObjects);
- if (obj != null)
- return;
- obj = containsName(currentSelectedEventName,_song.eventObjects);
- obj.name = string;
currentSelectedEventName = string;
- };
- trace("bruh");
-
- Typeables.push(eventPos);
- Typeables.push(eventValue);
- Typeables.push(eventName);
-
- var tab_events = new FlxUI(null, UI_options);
- tab_events.name = "Events";
- tab_events.add(posLabel);
- tab_events.add(valueLabel);
- tab_events.add(nameLabel);
- tab_events.add(listLabel);
- tab_events.add(typeLabel);
- tab_events.add(eventName);
- tab_events.add(eventValue);
- tab_events.add(eventSave);
- tab_events.add(eventAdd);
- tab_events.add(eventRemove);
- tab_events.add(eventPos);
- tab_events.add(updatePos);
- tab_events.add(eventType);
- tab_events.add(listOfEvents);
- UI_options.addGroup(tab_events);
+ return;
+ }
+ obj = containsName(string, _song.eventObjects);
+ if (obj != null)
+ return;
+ obj = containsName(currentSelectedEventName, _song.eventObjects);
+ obj.name = string;
+ currentSelectedEventName = string;
+ };
+ Debug.logTrace("bruh");
+
+ Typeables.push(eventPos);
+ Typeables.push(eventValue);
+ Typeables.push(eventName);
+
+ var tab_events = new FlxUI(null, UI_options);
+ tab_events.name = "Events";
+ tab_events.add(posLabel);
+ tab_events.add(valueLabel);
+ tab_events.add(nameLabel);
+ tab_events.add(listLabel);
+ tab_events.add(typeLabel);
+ tab_events.add(eventName);
+ tab_events.add(eventValue);
+ tab_events.add(eventSave);
+ tab_events.add(eventAdd);
+ tab_events.add(eventRemove);
+ tab_events.add(eventPos);
+ tab_events.add(updatePos);
+ tab_events.add(eventType);
+ tab_events.add(listOfEvents);
+ UI_options.addGroup(tab_events);
}
function addOptionsUI()
{
-
-
var hitsounds = new FlxUICheckBox(10, 60, null, null, "Play hitsounds", 100);
hitsounds.checked = false;
hitsounds.callback = function()
@@ -971,37 +957,24 @@ class ChartingState extends MusicBeatState
playClaps = hitsounds.checked;
};
- var check_mute_inst = new FlxUICheckBox(10, 90, null, null, "Mute Instrumental", 100);
- check_mute_inst.checked = false;
- check_mute_inst.callback = function()
- {
- var vol:Float = 1;
-
- if (check_mute_inst.checked)
- vol = 0;
-
- FlxG.sound.music.volume = vol;
- };
-
check_snap = new FlxUICheckBox(80, 25, null, null, "Snap to grid", 100);
check_snap.checked = defaultSnap;
// _song.needsVoices = check_voices.checked;
check_snap.callback = function()
{
defaultSnap = check_snap.checked;
- trace('CHECKED!');
+ Debug.logTrace('CHECKED!');
};
var tab_options = new FlxUI(null, UI_options);
tab_options.name = "Options";
tab_options.add(hitsounds);
- tab_options.add(check_mute_inst);
UI_options.addGroup(tab_options);
}
function addSongUI():Void
{
- var UI_songTitle = new FlxUIInputText(10, 10, 70, _song.song, 8);
+ var UI_songTitle = new FlxUIInputText(10, 10, 70, _song.songId, 8);
typingShit = UI_songTitle;
var check_voices = new FlxUICheckBox(10, 25, null, null, "Has voice track", 100);
@@ -1010,7 +983,7 @@ class ChartingState extends MusicBeatState
check_voices.callback = function()
{
_song.needsVoices = check_voices.checked;
- trace('CHECKED!');
+ Debug.logTrace('CHECKED!');
};
var saveButton:FlxButton = new FlxButton(110, 8, "Save", function()
@@ -1020,42 +993,41 @@ class ChartingState extends MusicBeatState
var reloadSong:FlxButton = new FlxButton(saveButton.x + saveButton.width + 10, saveButton.y, "Reload Audio", function()
{
- loadSong(_song.song);
+ loadSong(_song.songId, true);
});
var reloadSongJson:FlxButton = new FlxButton(reloadSong.x, saveButton.y + 30, "Reload JSON", function()
{
- loadJson(_song.song.toLowerCase());
+ loadJson(_song.songId.toLowerCase());
});
-
- var restart = new FlxButton(10,140,"Reset Chart", function()
- {
- for (ii in 0..._song.notes.length)
- {
- for (i in 0..._song.notes[ii].sectionNotes.length)
- {
- _song.notes[ii].sectionNotes = [];
- }
- }
- resetSection(true);
- });
+ var restart = new FlxButton(10, 140, "Reset Chart", function()
+ {
+ for (ii in 0..._song.notes.length)
+ {
+ for (i in 0..._song.notes[ii].sectionNotes.length)
+ {
+ _song.notes[ii].sectionNotes = [];
+ }
+ }
+ resetSection(true);
+ });
var loadAutosaveBtn:FlxButton = new FlxButton(reloadSongJson.x, reloadSongJson.y + 30, 'load autosave', loadAutosave);
var stepperBPM:FlxUINumericStepper = new FlxUINumericStepper(10, 65, 0.1, 1, 1.0, 5000.0, 1);
stepperBPM.value = Conductor.bpm;
stepperBPM.name = 'song_bpm';
- var stepperBPMLabel = new FlxText(74,65,'BPM');
-
+ var stepperBPMLabel = new FlxText(74, 65, 'BPM');
+
var stepperSpeed:FlxUINumericStepper = new FlxUINumericStepper(10, 80, 0.1, 1, 0.1, 10, 1);
stepperSpeed.value = _song.speed;
stepperSpeed.name = 'song_speed';
- var stepperSpeedLabel = new FlxText(74,80,'Scroll Speed');
-
+ var stepperSpeedLabel = new FlxText(74, 80, 'Scroll Speed');
+
var stepperVocalVol:FlxUINumericStepper = new FlxUINumericStepper(10, 95, 0.1, 1, 0.1, 10, 1);
- #if sys
+ #if FEATURE_STEPMANIA
if (!PlayState.isSM)
stepperVocalVol.value = vocals.volume;
else
@@ -1066,27 +1038,26 @@ class ChartingState extends MusicBeatState
stepperVocalVol.name = 'song_vocalvol';
var stepperVocalVolLabel = new FlxText(74, 95, 'Vocal Volume');
-
+
var stepperSongVol:FlxUINumericStepper = new FlxUINumericStepper(10, 110, 0.1, 1, 0.1, 10, 1);
stepperSongVol.value = FlxG.sound.music.volume;
stepperSongVol.name = 'song_instvol';
var stepperSongVolLabel = new FlxText(74, 110, 'Instrumental Volume');
-
- var shiftNoteDialLabel = new FlxText(10, 245, 'Shift Note FWD by (Section)');
+ var shiftNoteDialLabel = new FlxText(10, 245, 'Shift All Notes by # Sections');
var stepperShiftNoteDial:FlxUINumericStepper = new FlxUINumericStepper(10, 260, 1, 0, -1000, 1000, 0);
stepperShiftNoteDial.name = 'song_shiftnote';
- var shiftNoteDialLabel2 = new FlxText(10, 275, 'Shift Note FWD by (Step)');
+ var shiftNoteDialLabel2 = new FlxText(10, 275, 'Shift All Notes by # Steps');
var stepperShiftNoteDialstep:FlxUINumericStepper = new FlxUINumericStepper(10, 290, 1, 0, -1000, 1000, 0);
stepperShiftNoteDialstep.name = 'song_shiftnotems';
- var shiftNoteDialLabel3 = new FlxText(10, 305, 'Shift Note FWD by (ms)');
+ var shiftNoteDialLabel3 = new FlxText(10, 305, 'Shift All Notes by # ms');
var stepperShiftNoteDialms:FlxUINumericStepper = new FlxUINumericStepper(10, 320, 1, 0, -1000, 1000, 2);
stepperShiftNoteDialms.name = 'song_shiftnotems';
var shiftNoteButton:FlxButton = new FlxButton(10, 335, "Shift", function()
{
- shiftNotes(Std.int(stepperShiftNoteDial.value),Std.int(stepperShiftNoteDialstep.value),Std.int(stepperShiftNoteDialms.value));
+ shiftNotes(Std.int(stepperShiftNoteDial.value), Std.int(stepperShiftNoteDialstep.value), Std.int(stepperShiftNoteDialms.value));
});
var characters:Array = CoolUtil.coolTextFile(Paths.txt('data/characterList'));
@@ -1100,7 +1071,7 @@ class ChartingState extends MusicBeatState
});
player1DropDown.selectedLabel = _song.player1;
- var player1Label = new FlxText(10,80,64,'Player 1');
+ var player1Label = new FlxText(10, 80, 64, 'Player 1');
var player2DropDown = new FlxUIDropDownMenu(140, 100, FlxUIDropDownMenu.makeStrIdLabelArray(characters, true), function(character:String)
{
@@ -1108,39 +1079,38 @@ class ChartingState extends MusicBeatState
});
player2DropDown.selectedLabel = _song.player2;
- var player2Label = new FlxText(140,80,64,'Player 2');
+ var player2Label = new FlxText(140, 80, 64, 'Player 2');
var gfVersionDropDown = new FlxUIDropDownMenu(10, 200, FlxUIDropDownMenu.makeStrIdLabelArray(gfVersions, true), function(gfVersion:String)
- {
- _song.gfVersion = gfVersions[Std.parseInt(gfVersion)];
- });
+ {
+ _song.gfVersion = gfVersions[Std.parseInt(gfVersion)];
+ });
gfVersionDropDown.selectedLabel = _song.gfVersion;
- var gfVersionLabel = new FlxText(10,180,64,'Girlfriend');
+ var gfVersionLabel = new FlxText(10, 180, 64, 'Girlfriend');
var stageDropDown = new FlxUIDropDownMenu(140, 200, FlxUIDropDownMenu.makeStrIdLabelArray(stages, true), function(stage:String)
- {
- _song.stage = stages[Std.parseInt(stage)];
- });
+ {
+ _song.stage = stages[Std.parseInt(stage)];
+ });
stageDropDown.selectedLabel = _song.stage;
-
- var stageLabel = new FlxText(140,180,64,'Stage');
+
+ var stageLabel = new FlxText(140, 180, 64, 'Stage');
var noteStyleDropDown = new FlxUIDropDownMenu(10, 300, FlxUIDropDownMenu.makeStrIdLabelArray(noteStyles, true), function(noteStyle:String)
- {
- _song.noteStyle = noteStyles[Std.parseInt(noteStyle)];
- });
+ {
+ _song.noteStyle = noteStyles[Std.parseInt(noteStyle)];
+ });
noteStyleDropDown.selectedLabel = _song.noteStyle;
- var noteStyleLabel = new FlxText(10,280,64,'Note Skin');
-
+ var noteStyleLabel = new FlxText(10, 280, 64, 'Note Skin');
var tab_group_song = new FlxUI(null, UI_box);
tab_group_song.name = "Song";
tab_group_song.add(UI_songTitle);
tab_group_song.add(restart);
tab_group_song.add(check_voices);
- //tab_group_song.add(check_mute_inst);
+ // tab_group_song.add(check_mute_inst);
tab_group_song.add(saveButton);
tab_group_song.add(reloadSong);
tab_group_song.add(reloadSongJson);
@@ -1153,14 +1123,14 @@ class ChartingState extends MusicBeatState
tab_group_song.add(stepperVocalVolLabel);
tab_group_song.add(stepperSongVol);
tab_group_song.add(stepperSongVolLabel);
- tab_group_song.add(shiftNoteDialLabel);
- tab_group_song.add(stepperShiftNoteDial);
- tab_group_song.add(shiftNoteDialLabel2);
- tab_group_song.add(stepperShiftNoteDialstep);
- tab_group_song.add(shiftNoteDialLabel3);
- tab_group_song.add(stepperShiftNoteDialms);
- tab_group_song.add(shiftNoteButton);
- //tab_group_song.add(hitsounds);
+ tab_group_song.add(shiftNoteDialLabel);
+ tab_group_song.add(stepperShiftNoteDial);
+ tab_group_song.add(shiftNoteDialLabel2);
+ tab_group_song.add(stepperShiftNoteDialstep);
+ tab_group_song.add(shiftNoteDialLabel3);
+ tab_group_song.add(stepperShiftNoteDialms);
+ tab_group_song.add(shiftNoteButton);
+ // tab_group_song.add(hitsounds);
var tab_group_assets = new FlxUI(null, UI_box);
tab_group_assets.name = "Assets";
@@ -1177,7 +1147,7 @@ class ChartingState extends MusicBeatState
UI_box.addGroup(tab_group_song);
UI_box.addGroup(tab_group_assets);
-
+
camFollow = new FlxObject(280, 0, 1, 1);
add(camFollow);
@@ -1196,9 +1166,8 @@ class ChartingState extends MusicBeatState
var tab_group_section = new FlxUI(null, UI_box);
tab_group_section.name = 'Section';
-
var stepperCopy:FlxUINumericStepper = new FlxUINumericStepper(110, 132, 1, 1, -999, 999, 0);
- var stepperCopyLabel = new FlxText(174,132,'sections back');
+ var stepperCopyLabel = new FlxText(174, 132, 'sections back');
var copyButton:FlxButton = new FlxButton(10, 130, "Copy last section", function()
{
@@ -1209,48 +1178,29 @@ class ChartingState extends MusicBeatState
var swapSection:FlxButton = new FlxButton(10, 170, "Swap Section", function()
{
-
var secit = _song.notes[curSection];
+ if (secit != null)
+ {
+ var secit = _song.notes[curSection];
+
if (secit != null)
{
- var newSwaps:Array> = [];
- trace(_song.notes[curSection]);
- for (i in 0...secit.sectionNotes.length)
- {
- var note = secit.sectionNotes[i];
- if (note[1] < 4)
- note[1] += 4;
- else
- note[1] -= 4;
- newSwaps.push(note);
- }
+ swapSection(secit);
+ }
+ }
+ });
+ check_mustHitSection = new FlxUICheckBox(10, 30, null, null, "Camera Points to Player?", 100, null, function()
+ {
+ var sect = lastUpdatedSection;
- secit.sectionNotes = newSwaps;
-
- for (i in shownNotes)
- {
- for(ii in newSwaps)
- if (i.strumTime == ii[0] && i.noteData == ii[1] % 4)
- {
- i.x = Math.floor(ii[1] * GRID_SIZE);
-
- i.y = Math.floor(getYfromStrum(ii[0]) * zoomFactor);
- if (i.sustainLength > 0 && i.noteCharterObject != null)
- i.noteCharterObject.x = i.x + (GRID_SIZE / 2);
- }
- }
- }
- });
- check_mustHitSection = new FlxUICheckBox(10, 30, null, null, "Camera Points to Player?", 100,null,function() {
- var sect = lastUpdatedSection;
-
- trace(sect);
+ Debug.logTrace(sect);
if (sect == null)
return;
sect.mustHitSection = check_mustHitSection.checked;
+ updateHeads();
for (i in sectionRenderes)
{
@@ -1262,10 +1212,10 @@ class ChartingState extends MusicBeatState
sectionicon.x = -95;
sectionicon.y = cachedY;
sectionicon.setGraphicSize(0, 45);
-
+
i.icon = sectionicon;
i.lastUpdated = sect.mustHitSection;
-
+
add(sectionicon);
}
}
@@ -1279,7 +1229,8 @@ class ChartingState extends MusicBeatState
check_playerAltAnim = new FlxUICheckBox(180, 340, null, null, "Player Alternate Animation", 100);
check_playerAltAnim.name = 'check_playerAltAnim';
- var refresh = new FlxButton(10, 60, 'Refresh Section', function() {
+ var refresh = new FlxButton(10, 60, 'Refresh Section', function()
+ {
var section = getSectionByTime(Conductor.songPosition);
if (section == null)
@@ -1290,23 +1241,50 @@ class ChartingState extends MusicBeatState
check_playerAltAnim.checked = section.playerAltAnim;
});
- var startSection:FlxButton = new FlxButton(10, 85, "Play Here", function() {
+ var startSection:FlxButton = new FlxButton(10, 85, "Play Here", function()
+ {
PlayState.SONG = _song;
FlxG.sound.music.stop();
if (!PlayState.isSM)
- vocals.stop();
+ vocals.stop();
PlayState.startTime = _song.notes[curSection].startTime;
+ while (curRenderedNotes.members.length > 0)
+ {
+ curRenderedNotes.remove(curRenderedNotes.members[0], true);
+ }
+
+ while (curRenderedSustains.members.length > 0)
+ {
+ curRenderedSustains.remove(curRenderedSustains.members[0], true);
+ }
+
+ while (sectionRenderes.members.length > 0)
+ {
+ sectionRenderes.remove(sectionRenderes.members[0], true);
+ }
+ var toRemove = [];
+
+ for (i in _song.notes)
+ {
+ if (i.startTime > FlxG.sound.music.length)
+ toRemove.push(i);
+ }
+
+ for (i in toRemove)
+ _song.notes.remove(i);
+
+ toRemove = []; // clear memory
LoadingState.loadAndSwitchState(new PlayState());
});
tab_group_section.add(refresh);
tab_group_section.add(startSection);
- //tab_group_section.add(stepperCopy);
- //tab_group_section.add(stepperCopyLabel);
+ // tab_group_section.add(stepperCopy);
+ // tab_group_section.add(stepperCopyLabel);
tab_group_section.add(check_mustHitSection);
tab_group_section.add(check_CPUAltAnim);
tab_group_section.add(check_playerAltAnim);
- //tab_group_section.add(copyButton);
+ // tab_group_section.add(copyButton);
tab_group_section.add(clearSectionButton);
tab_group_section.add(swapSection);
@@ -1329,14 +1307,16 @@ class ChartingState extends MusicBeatState
if (!PlayState.isSM)
vocals.time = FlxG.sound.music.time;
curSection = section;
- trace("Going too " + FlxG.sound.music.time + " | " + section + " | Which is at " + beat);
+ Debug.logTrace("Going too " + FlxG.sound.music.time + " | " + section + " | Which is at " + beat);
if (FlxG.sound.music.time < 0)
FlxG.sound.music.time = 0;
else if (FlxG.sound.music.time > FlxG.sound.music.length)
FlxG.sound.music.time = FlxG.sound.music.length;
+
+ claps.splice(0, claps.length);
}
-
+
public var check_naltAnim:FlxUICheckBox;
function addNoteUI():Void
@@ -1344,8 +1324,8 @@ class ChartingState extends MusicBeatState
tab_group_note = new FlxUI(null, UI_box);
tab_group_note.name = 'Note';
- writingNotesText = new FlxUIText(20,100, 0, "");
- writingNotesText.setFormat("Arial",20,FlxColor.WHITE,FlxTextAlign.LEFT,FlxTextBorderStyle.OUTLINE,FlxColor.BLACK);
+ writingNotesText = new FlxUIText(20, 100, 0, "");
+ writingNotesText.setFormat("Arial", 20, FlxColor.WHITE, FlxTextAlign.LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
stepperSusLength = new FlxUINumericStepper(10, 10, Conductor.stepCrochet / 2, 0, 0, Conductor.stepCrochet * 16 * 4);
stepperSusLength.value = 0;
@@ -1356,13 +1336,13 @@ class ChartingState extends MusicBeatState
{
if (curSelectedNote != null)
{
- for(i in selectedBoxes)
+ for (i in selectedBoxes)
{
i.connectedNoteData[3] = check_naltAnim.checked;
- for(ii in _song.notes)
+ for (ii in _song.notes)
{
- for(n in ii.sectionNotes)
+ for (n in ii.sectionNotes)
if (n[0] == i.connectedNoteData[0] && n[1] == i.connectedNoteData[1])
n[3] = i.connectedNoteData[3];
}
@@ -1370,7 +1350,7 @@ class ChartingState extends MusicBeatState
}
}
- var stepperSusLengthLabel = new FlxText(74,10,'Note Sustain Length');
+ var stepperSusLengthLabel = new FlxText(74, 10, 'Note Sustain Length');
var applyLength:FlxButton = new FlxButton(10, 100, 'Apply Data');
@@ -1382,113 +1362,190 @@ class ChartingState extends MusicBeatState
UI_box.addGroup(tab_group_note);
/*player2 = new Character(0,0, _song.player2);
- player1 = new Boyfriend(player2.width * 0.2,0 + player2.height, _song.player1);
+ player1 = new Boyfriend(player2.width * 0.2,0 + player2.height, _song.player1);
- player1.y = player1.y - player1.height;
+ player1.y = player1.y - player1.height;
- player2.setGraphicSize(Std.int(player2.width * 0.2));
- player1.setGraphicSize(Std.int(player1.width * 0.2));
-
- UI_box.add(player1);
- UI_box.add(player2);*/
+ player2.setGraphicSize(Std.int(player2.width * 0.2));
+ player1.setGraphicSize(Std.int(player1.width * 0.2));
+ UI_box.add(player1);
+ UI_box.add(player2); */
}
-
- function pasteNotesFromArray(array:Array>,fromStrum:Bool = true)
+ function pasteNotesFromArray(array:Array>, fromStrum:Bool = true)
{
- for(i in array)
+ for (i in array)
+ {
+ var strum:Float = i[0];
+ if (fromStrum)
+ strum += Conductor.songPosition;
+ var section = 0;
+ for (ii in _song.notes)
{
- var strum:Float = i[0];
- if (fromStrum)
- strum += Conductor.songPosition;
- var section = 0;
- for(ii in _song.notes)
+ if (ii.startTime <= strum && ii.endTime > strum)
{
- if (ii.startTime <= strum && ii.endTime > strum)
+ Debug.logTrace("new strum " + strum + " - at section " + section);
+ // alright we're in this section lets paste the note here.
+ var newData = [strum, i[1], i[2], i[3], i[4]];
+ ii.sectionNotes.push(newData);
+
+ var thing = ii.sectionNotes[ii.sectionNotes.length - 1];
+
+ var note:Note = new Note(strum, Math.floor(i[1] % 4), null, false, true, i[3], i[4]);
+ note.rawNoteData = i[1];
+ note.sustainLength = i[2];
+ note.setGraphicSize(Math.floor(GRID_SIZE), Math.floor(GRID_SIZE));
+ note.updateHitbox();
+ note.x = Math.floor(i[1] * GRID_SIZE);
+
+ note.charterSelected = true;
+
+ note.y = Math.floor(getYfromStrum(strum) * zoomFactor);
+
+ var box = new ChartingBox(note.x, note.y, note);
+ box.connectedNoteData = thing;
+ selectedBoxes.add(box);
+
+ curRenderedNotes.add(note);
+
+ pastedNotes.push(note);
+
+ if (note.sustainLength > 0)
{
- trace("new strum " + strum + " - at section " + section);
- // alright we're in this section lets paste the note here.
- var newData = [strum,i[1],i[2],i[3],i[4]];
- ii.sectionNotes.push(newData);
+ var sustainVis:FlxSprite = new FlxSprite(note.x + (GRID_SIZE / 2),
+ note.y + GRID_SIZE).makeGraphic(8, Math.floor((getYfromStrum(note.strumTime + note.sustainLength) * zoomFactor) - note.y));
- var thing = ii.sectionNotes[ii.sectionNotes.length - 1];
+ note.noteCharterObject = sustainVis;
- var note:Note = new Note(strum, Math.floor(i[1] % 4),null,false,true,i[3], i[4]);
- note.rawNoteData = i[1];
- note.sustainLength = i[2];
- note.setGraphicSize(Math.floor(GRID_SIZE), Math.floor(GRID_SIZE));
- note.updateHitbox();
- note.x = Math.floor(i[1] * GRID_SIZE);
+ curRenderedSustains.add(sustainVis);
+ }
+ Debug.logTrace("section new length: " + ii.sectionNotes.length);
+ continue;
+ }
+ section++;
+ }
+ }
+ }
- note.charterSelected = true;
+ function offsetSelectedNotes(offset:Float)
+ {
+ var toDelete:Array = [];
+ var toAdd:Array = [];
-
- note.y = Math.floor(getYfromStrum(strum) * zoomFactor);
+ // For each selected note...
+ for (i in 0...selectedBoxes.members.length)
+ {
+ var originalNote = selectedBoxes.members[i].connectedNote;
+ // Delete after the fact to avoid tomfuckery.
+ toDelete.push(originalNote);
- var box = new ChartingBox(note.x,note.y,note);
- box.connectedNoteData = thing;
- selectedBoxes.add(box);
+ var strum = originalNote.strumTime + offset;
+ // Remove the old note.
+ // Find the position in the song to put the new note.
+ for (ii in _song.notes)
+ {
+ if (ii.startTime <= strum && ii.endTime > strum)
+ {
+ // alright we're in this section lets paste the note here.
+ var newData:Array = [
+ strum,
+ originalNote.rawNoteData,
+ originalNote.sustainLength,
+ originalNote.isAlt,
+ originalNote.beat
+ ];
+ ii.sectionNotes.push(newData);
- curRenderedNotes.add(note);
+ var thing = ii.sectionNotes[ii.sectionNotes.length - 1];
- pastedNotes.push(note);
+ var note:Note = new Note(strum, originalNote.noteData, originalNote.prevNote, originalNote.isSustainNote, true, originalNote.isAlt,
+ originalNote.beat);
+ note.rawNoteData = originalNote.rawNoteData;
+ note.sustainLength = originalNote.sustainLength;
+ note.setGraphicSize(Math.floor(GRID_SIZE), Math.floor(GRID_SIZE));
+ note.updateHitbox();
+ note.x = Math.floor(originalNote.rawNoteData * GRID_SIZE);
- if (note.sustainLength > 0)
- {
- var sustainVis:FlxSprite = new FlxSprite(note.x + (GRID_SIZE / 2),
- note.y + GRID_SIZE).makeGraphic(8, Math.floor((getYfromStrum(note.strumTime + note.sustainLength) * zoomFactor) - note.y));
-
- note.noteCharterObject = sustainVis;
-
- curRenderedSustains.add(sustainVis);
- }
- trace("section new length: " + ii.sectionNotes.length);
- continue;
+ note.charterSelected = true;
+
+ note.y = Math.floor(getYfromStrum(strum) * zoomFactor);
+
+ var box = new ChartingBox(note.x, note.y, note);
+ box.connectedNoteData = thing;
+ // Add to selection after the fact to avoid tomfuckery.
+ toAdd.push(box);
+
+ curRenderedNotes.add(note);
+
+ pastedNotes.push(note);
+
+ if (note.sustainLength > 0)
+ {
+ var sustainVis:FlxSprite = new FlxSprite(note.x + (GRID_SIZE / 2),
+ note.y + GRID_SIZE).makeGraphic(8, Math.floor((getYfromStrum(note.strumTime + note.sustainLength) * zoomFactor) - note.y));
+
+ note.noteCharterObject = sustainVis;
+
+ curRenderedSustains.add(sustainVis);
}
- section++;
+ Debug.logTrace("section new length: " + ii.sectionNotes.length);
+ continue;
}
}
+ }
+ for (note in toDelete)
+ {
+ deleteNote(note);
+ }
+ for (box in toAdd)
+ {
+ selectedBoxes.add(box);
+ }
}
- function loadSong(daSong:String):Void
+
+ function loadSong(daSong:String, reloadFromFile:Bool = false):Void
{
if (FlxG.sound.music != null)
{
FlxG.sound.music.stop();
// vocals.stop();
}
- #if sys
- if (PlayState.isSM)
+ if (reloadFromFile)
{
- trace("Loading " + PlayState.pathToSm + "/" + PlayState.sm.header.MUSIC);
- var bytes = File.getBytes(PlayState.pathToSm + "/" + PlayState.sm.header.MUSIC);
- var sound = new Sound();
- sound.loadCompressedDataFromByteArray(bytes.getData(), bytes.length);
- FlxG.sound.playMusic(sound);
- }
- else
+ #if FEATURE_STEPMANIA
+ if (PlayState.isSM)
+ {
+ Debug.logTrace("Loading " + PlayState.pathToSm + "/" + PlayState.sm.header.MUSIC);
+ var bytes = File.getBytes(PlayState.pathToSm + "/" + PlayState.sm.header.MUSIC);
+ var sound = new Sound();
+ sound.loadCompressedDataFromByteArray(bytes.getData(), bytes.length);
+ FlxG.sound.playMusic(sound);
+ }
+ else
+ FlxG.sound.playMusic(Paths.inst(daSong), 0.6);
+ #else
FlxG.sound.playMusic(Paths.inst(daSong), 0.6);
- #else
- FlxG.sound.playMusic(Paths.inst(daSong), 0.6);
- #end
+ #end
- if (PlayState.isSM)
- _song = Song.conversionChecks(Song.loadFromJsonRAW(File.getContent(PlayState.pathToSm + "/converted.json")));
+ if (PlayState.isSM)
+ {
+ #if FEATURE_STEPMANIA
+ _song = Song.conversionChecks(Song.loadFromJsonRAW(File.getContent(PlayState.pathToSm + "/converted.json")));
+ #end
+ }
+ else
+ {
+ var diff:String = ["-easy", "", "-hard"][PlayState.storyDifficulty];
+ _song = Song.conversionChecks(Song.loadFromJson(PlayState.SONG.songId, diff));
+ }
+ }
else
{
- var songFormat = StringTools.replace(PlayState.SONG.song, " ", "-");
- switch (songFormat) {
- case 'Dad-Battle': songFormat = 'Dadbattle';
- case 'Philly-Nice': songFormat = 'Philly';
- }
-
- var poop:String = Highscore.formatSong(songFormat, PlayState.storyDifficulty);
-
- _song = Song.conversionChecks(Song.loadFromJson(poop, PlayState.SONG.song));
+ _song = PlayState.SONG;
}
-
// WONT WORK FOR TUTORIAL OR TEST SONG!!! REDO LATER
- #if sys
+ #if FEATURE_STEPMANIA
if (PlayState.isSM)
vocals = null;
else
@@ -1505,9 +1562,12 @@ class ChartingState extends MusicBeatState
FlxG.sound.music.onComplete = function()
{
if (!PlayState.isSM)
+ {
vocals.pause();
+ vocals.time = 0;
+ }
FlxG.sound.music.pause();
- goToSection(0);
+ FlxG.sound.music.time = 0;
};
}
@@ -1580,43 +1640,43 @@ class ChartingState extends MusicBeatState
var currentIndex = 0;
for (i in _song.eventObjects)
+ {
+ var name = Reflect.field(i, "name");
+ var type = Reflect.field(i, "type");
+ var pos = Reflect.field(i, "position");
+ var value = Reflect.field(i, "value");
+
+ Debug.logTrace(i.type);
+ if (type == "BPM Change")
{
- var name = Reflect.field(i,"name");
- var type = Reflect.field(i,"type");
- var pos = Reflect.field(i,"position");
- var value = Reflect.field(i,"value");
-
- trace(i.type);
- if (type == "BPM Change")
+ var beat:Float = pos;
+
+ var endBeat:Float = Math.POSITIVE_INFINITY;
+
+ TimingStruct.addTiming(beat, value, endBeat, 0); // offset in this case = start time since we don't have a offset
+
+ if (currentIndex != 0)
{
- var beat:Float = pos;
-
- var endBeat:Float = Math.POSITIVE_INFINITY;
-
- TimingStruct.addTiming(beat,value,endBeat, 0); // offset in this case = start time since we don't have a offset
-
- if (currentIndex != 0)
- {
- var data = TimingStruct.AllTimings[currentIndex - 1];
- data.endBeat = beat;
- data.length = (data.endBeat - data.startBeat) / (data.bpm / 60);
- var step = ((60 / data.bpm) * 1000) / 4;
- TimingStruct.AllTimings[currentIndex].startStep = Math.floor(((data.endBeat / (data.bpm / 60)) * 1000) / step);
- TimingStruct.AllTimings[currentIndex].startTime = data.startTime + data.length;
- }
-
- currentIndex++;
+ var data = TimingStruct.AllTimings[currentIndex - 1];
+ data.endBeat = beat;
+ data.length = (data.endBeat - data.startBeat) / (data.bpm / 60);
+ var step = ((60 / data.bpm) * 1000) / 4;
+ TimingStruct.AllTimings[currentIndex].startStep = Math.floor(((data.endBeat / (data.bpm / 60)) * 1000) / step);
+ TimingStruct.AllTimings[currentIndex].startTime = data.startTime + data.length;
}
+
+ currentIndex++;
}
- trace("BPM CHANGES:");
-
+ }
+ Debug.logTrace("BPM CHANGES:");
+
for (i in TimingStruct.AllTimings)
- trace(i.bpm + " - START: " + i.startBeat + " - END: " + i.endBeat + " - START-TIME: " + i.startTime);
-
+ Debug.logTrace(i.bpm + " - START: " + i.startBeat + " - END: " + i.endBeat + " - START-TIME: " + i.startTime);
+
recalculateAllSectionTimes();
-
+
regenerateLines();
-
+
poggers();
case 'note_susLength':
@@ -1633,18 +1693,18 @@ class ChartingState extends MusicBeatState
nums.value = 0.1;
getSectionByTime(Conductor.songPosition).bpm = Std.int(nums.value);
updateGrid();
-
+
case 'song_vocalvol':
if (nums.value <= 0.1)
nums.value = 0.1;
if (!PlayState.isSM)
- vocals.volume = nums.value;
+ vocals.volume = nums.value;
case 'song_instvol':
if (nums.value <= 0.1)
nums.value = 0.1;
FlxG.sound.music.volume = nums.value;
-
+
case 'divisions':
subDivisions = nums.value;
updateGrid();
@@ -1664,17 +1724,15 @@ class ChartingState extends MusicBeatState
else
return getSectionByTime(Conductor.songPosition).lengthInSteps;
}*/
-
function poggers()
{
var notes = [];
- for(section in _song.notes)
+ for (section in _song.notes)
{
-
var removed = [];
- for(note in section.sectionNotes)
+ for (note in section.sectionNotes)
{
// commit suicide
var old = note[0];
@@ -1692,18 +1750,17 @@ class ChartingState extends MusicBeatState
}
}
- for(i in removed)
+ for (i in removed)
{
section.sectionNotes.remove(i);
}
}
- for(section in _song.notes)
+ for (section in _song.notes)
{
-
var saveRemove = [];
- for(i in notes)
+ for (i in notes)
{
if (i[0] >= section.startTime && i[0] < section.endTime)
{
@@ -1712,11 +1769,11 @@ class ChartingState extends MusicBeatState
}
}
- for(i in saveRemove)
+ for (i in saveRemove)
notes.remove(i);
}
- for(i in curRenderedNotes)
+ for (i in curRenderedNotes)
{
i.strumTime = TimingStruct.getTimeFromBeat(i.beat);
i.y = Math.floor(getYfromStrum(i.strumTime) * zoomFactor);
@@ -1724,15 +1781,13 @@ class ChartingState extends MusicBeatState
if (i.noteCharterObject != null)
{
i.noteCharterObject.y = i.y + 40;
- i.noteCharterObject.makeGraphic(8,Math.floor((getYfromStrum(i.strumTime + i.sustainLength) * zoomFactor) - i.y),FlxColor.WHITE);
+ i.noteCharterObject.makeGraphic(8, Math.floor((getYfromStrum(i.strumTime + i.sustainLength) * zoomFactor) - i.y), FlxColor.WHITE);
}
-
}
- trace("FUCK YOU BITCH FUCKER CUCK SUCK BITCH " + _song.notes.length);
+ Debug.logTrace("FUCK YOU BITCH FUCKER CUCK SUCK BITCH " + _song.notes.length);
}
-
function stepStartTime(step):Float
{
return Conductor.bpm / (step / 4) / 60;
@@ -1753,7 +1808,46 @@ class ChartingState extends MusicBeatState
var writingNotes:Bool = false;
var doSnapShit:Bool = false;
-
+
+ function swapSection(secit:SwagSection)
+ {
+ var newSwaps:Array> = [];
+ Debug.logTrace(_song.notes[curSection]);
+
+ haxe.ds.ArraySort.sort(secit.sectionNotes, function(a, b)
+ {
+ if (a[0] < b[0])
+ return -1;
+ else if (a[0] > b[0])
+ return 1;
+ else
+ return 0;
+ });
+
+ for (i in 0...secit.sectionNotes.length)
+ {
+ var note = secit.sectionNotes[i];
+ var n = [note[0], Std.int(note[1]), note[2], note[3], note[4]];
+ n[1] = (note[1] + 4) % 8;
+ newSwaps.push(n);
+ }
+
+ secit.sectionNotes = newSwaps;
+
+ for (i in shownNotes)
+ {
+ for (ii in secit.sectionNotes)
+ if (i.strumTime == ii[0] && i.noteData == ii[1] % 4)
+ {
+ i.x = Math.floor(ii[1] * GRID_SIZE);
+
+ i.y = Math.floor(getYfromStrum(ii[0]) * zoomFactor);
+ if (i.sustainLength > 0 && i.noteCharterObject != null)
+ i.noteCharterObject.x = i.x + (GRID_SIZE / 2);
+ }
+ }
+ }
+
public var diff:Float = 0;
public var changeIndex = 0;
@@ -1766,8 +1860,23 @@ class ChartingState extends MusicBeatState
public function resizeEverything()
{
-
regenerateLines();
+
+ for (i in curRenderedNotes.members)
+ {
+ if (i == null)
+ continue;
+ i.y = getYfromStrum(i.strumTime) * zoomFactor;
+ if (i.noteCharterObject != null)
+ {
+ curRenderedSustains.remove(i.noteCharterObject);
+ var sustainVis:FlxSprite = new FlxSprite(i.x + (GRID_SIZE / 2),
+ i.y + GRID_SIZE).makeGraphic(8, Math.floor((getYfromStrum(i.strumTime + i.sustainLength) * zoomFactor) - i.y), FlxColor.WHITE);
+
+ i.noteCharterObject = sustainVis;
+ curRenderedSustains.add(i.noteCharterObject);
+ }
+ }
}
public var shownNotes:Array = [];
@@ -1790,19 +1899,30 @@ class ChartingState extends MusicBeatState
override function update(elapsed:Float)
{
- if (FlxG.sound.music.time > FlxG.sound.music.length)
- FlxG.sound.music.time = FlxG.sound.music.length;
-
- updateHeads();
-
- #if desktop
- DiscordClient.changePresence("Chart Editor", null, null, true);
- #end
+ try
+ {
+ if (FlxG.sound.music != null)
+ if (FlxG.sound.music.time > FlxG.sound.music.length - 85)
+ {
+ FlxG.sound.music.pause();
+ FlxG.sound.music.time = FlxG.sound.music.length - 85;
+ if (!PlayState.isSM)
+ {
+ vocals.pause();
+ vocals.time = vocals.length - 85;
+ }
+ }
- for(i in sectionRenderes)
+ #if debug
+ FlxG.watch.addQuick("Renderers", sectionRenderes.length);
+ FlxG.watch.addQuick("Notes", curRenderedNotes.length);
+ FlxG.watch.addQuick("Rendered Notes ", shownNotes.length);
+ #end
+
+ for (i in sectionRenderes)
{
var diff = i.y - strumLine.y;
- if (diff < 4000 && diff >= -4000)
+ if (diff < 2000 && diff >= -2000)
{
i.active = true;
i.visible = true;
@@ -1813,7 +1933,7 @@ class ChartingState extends MusicBeatState
i.visible = false;
}
}
-
+
shownNotes = [];
if (FlxG.sound.music != null)
@@ -1822,113 +1942,117 @@ class ChartingState extends MusicBeatState
{
@:privateAccess
{
+ #if desktop
+ // The __backend.handle attribute is only available on native.
lime.media.openal.AL.sourcef(FlxG.sound.music._channel.__source.__backend.handle, lime.media.openal.AL.PITCH, speed);
try
{
// We need to make CERTAIN vocals exist and are non-empty
- // before we try to play them. Otherwise the game crashes.
+ // before we try to play them. Otherwise the game crashes.
if (vocals != null && vocals.length > 0)
{
lime.media.openal.AL.sourcef(vocals._channel.__source.__backend.handle, lime.media.openal.AL.PITCH, speed);
}
}
- catch(e)
+ catch (e)
{
- // trace("failed to pitch vocals (probably cuz they don't exist)");
+ // Debug.logTrace("failed to pitch vocals (probably cuz they don't exist)");
}
-
- }
+ #end
+ }
}
}
- for(note in curRenderedNotes)
+ for (note in curRenderedNotes)
+ {
+ var diff = note.strumTime - Conductor.songPosition;
+ if (diff < 8000 && diff >= -8000)
{
- var diff = note.strumTime - Conductor.songPosition;
- if (diff < 8000 && diff >= -8000)
+ shownNotes.push(note);
+ if (note.sustainLength > 0)
{
- shownNotes.push(note);
- note.y = getYfromStrum(note.strumTime) * zoomFactor;
- if (note.sustainLength > 0)
- {
- if (note.noteCharterObject != null)
+ note.noteCharterObject.active = true;
+ note.noteCharterObject.visible = true;
+ }
+ note.active = true;
+ note.visible = true;
+ }
+ else
+ {
+ note.active = false;
+ note.visible = false;
+ if (note.sustainLength > 0)
+ {
+ if (note.noteCharterObject != null)
if (note.noteCharterObject.y != note.y + GRID_SIZE)
{
- note.noteCharterObject.y = note.y + GRID_SIZE;
- note.noteCharterObject.makeGraphic(8,Math.floor((getYfromStrum(note.strumTime + note.sustainLength) * zoomFactor) - note.y),FlxColor.WHITE);
+ note.noteCharterObject.active = false;
+ note.noteCharterObject.visible = false;
}
- }
- note.active = true;
- note.visible = true;
}
- else
- {
- note.active = false;
- note.visible = false;
- }
- }
+ }
+ }
- for(ii in selectedBoxes.members)
- {
- ii.x = ii.connectedNote.x;
- ii.y = ii.connectedNote.y;
- }
+ for (ii in selectedBoxes.members)
+ {
+ ii.x = ii.connectedNote.x;
+ ii.y = ii.connectedNote.y;
+ }
- var doInput = true;
+ var doInput = true;
- for (i in Typeables)
- {
- if (i.hasFocus)
- doInput = false;
- }
+ for (i in Typeables)
+ {
+ if (i.hasFocus)
+ doInput = false;
+ }
- if (doInput)
- {
- if (FlxG.mouse.wheel != 0)
+ if (doInput)
+ {
+ if (FlxG.mouse.wheel != 0)
{
FlxG.sound.music.pause();
-
+
if (!PlayState.isSM)
vocals.pause();
claps.splice(0, claps.length);
-
-
+
if (FlxG.keys.pressed.CONTROL && !waitingForRelease)
{
var amount = FlxG.mouse.wheel;
-
- if(amount > 0)
+
+ if (amount > 0)
amount = 0;
-
+
var increase:Float = 0;
-
+
if (amount < 0)
increase = -0.02;
else
increase = 0.02;
-
-
+
zoomFactor += increase;
-
+
if (zoomFactor > 2)
zoomFactor = 2;
-
+
if (zoomFactor < 0.1)
zoomFactor = 0.1;
-
+
resizeEverything();
}
else
{
var amount = FlxG.mouse.wheel;
-
- if(amount > 0 && strumLine.y < 0)
+
+ if (amount > 0 && strumLine.y < 0)
amount = 0;
-
+
if (doSnapShit)
{
var increase:Float = 0;
var beats:Float = 0;
-
+
if (amount < 0)
{
increase = 1 / deezNuts.get(snap);
@@ -1939,211 +2063,233 @@ class ChartingState extends MusicBeatState
increase = -1 / deezNuts.get(snap);
beats = ((Math.ceil(curDecimalBeat * deezNuts.get(snap)) - 0.001) / deezNuts.get(snap)) + increase;
}
-
- trace("SNAP - " + snap + " INCREASE - " + increase + " - GO TO BEAT " + beats);
-
+
+ Debug.logTrace("SNAP - " + snap + " INCREASE - " + increase + " - GO TO BEAT " + beats);
+
var data = TimingStruct.getTimingAtBeat(beats);
if (beats <= 0)
FlxG.sound.music.time = 0;
-
+
var bpm = data != null ? data.bpm : _song.bpm;
if (data != null)
{
-
- FlxG.sound.music.time = (data.startTime + ((beats - data.startBeat) / (bpm/60))) * 1000;
+ FlxG.sound.music.time = (data.startTime + ((beats - data.startBeat) / (bpm / 60))) * 1000;
}
}
else
FlxG.sound.music.time -= (FlxG.mouse.wheel * Conductor.stepCrochet * 0.4);
- if (FlxG.sound.music.time > FlxG.sound.music.length)
- FlxG.sound.music.time = FlxG.sound.music.length;
-
if (!PlayState.isSM)
- vocals.time = FlxG.sound.music.time;
+ vocals.time = FlxG.sound.music.time;
}
}
- if (FlxG.keys.pressed.SHIFT)
- {
- if (FlxG.keys.justPressed.RIGHT)
- speed += 0.1;
- else if (FlxG.keys.justPressed.LEFT)
- speed -= 0.1;
-
- if (speed > 3)
- speed = 3;
- if (speed <= 0.01)
- speed = 0.1;
- }
- else
- {
- if (FlxG.keys.justPressed.RIGHT && !FlxG.keys.pressed.CONTROL)
- goToSection(curSection + 1);
- else if (FlxG.keys.justPressed.LEFT && !FlxG.keys.pressed.CONTROL)
- goToSection(curSection - 1);
- }
+ if (FlxG.keys.pressed.SHIFT)
+ {
+ if (FlxG.keys.justPressed.RIGHT)
+ speed += 0.1;
+ else if (FlxG.keys.justPressed.LEFT)
+ speed -= 0.1;
+
+ if (speed > 3)
+ speed = 3;
+ if (speed <= 0.01)
+ speed = 0.1;
+ }
+ else
+ {
+ if (FlxG.keys.justPressed.RIGHT && !FlxG.keys.pressed.CONTROL)
+ goToSection(curSection + 1);
+ else if (FlxG.keys.justPressed.LEFT && !FlxG.keys.pressed.CONTROL)
+ goToSection(curSection - 1);
+ }
- if (FlxG.mouse.pressed && FlxG.keys.pressed.CONTROL)
- {
- if (!waitingForRelease)
+ if (FlxG.mouse.pressed && FlxG.keys.pressed.CONTROL)
{
- trace("creating select box");
- waitingForRelease = true;
- selectBox = new FlxSprite(FlxG.mouse.x,FlxG.mouse.y);
- selectBox.makeGraphic(0,0,FlxColor.fromRGB(173, 216, 230));
- selectBox.alpha = 0.4;
+ if (!waitingForRelease)
+ {
+ Debug.logTrace("creating select box");
+ waitingForRelease = true;
+ selectBox = new FlxSprite(FlxG.mouse.x, FlxG.mouse.y);
+ selectBox.makeGraphic(0, 0, FlxColor.fromRGB(173, 216, 230));
+ selectBox.alpha = 0.4;
+
+ selectInitialX = selectBox.x;
+ selectInitialY = selectBox.y;
- selectInitialX = selectBox.x;
- selectInitialY = selectBox.y;
+ add(selectBox);
+ }
+ else
+ {
+ if (waitingForRelease)
+ {
+ Debug.logTrace(selectBox.width + " | " + selectBox.height);
+ selectBox.x = Math.min(FlxG.mouse.x, selectInitialX);
+ selectBox.y = Math.min(FlxG.mouse.y, selectInitialY);
- add(selectBox);
+ selectBox.makeGraphic(Math.floor(Math.abs(FlxG.mouse.x - selectInitialX)), Math.floor(Math.abs(FlxG.mouse.y - selectInitialY)),
+ FlxColor.fromRGB(173, 216, 230));
+ }
+ }
}
- else
+ if (FlxG.mouse.justReleased && waitingForRelease)
{
- if (waitingForRelease)
+ Debug.logTrace("released!");
+ waitingForRelease = false;
+
+ while (selectedBoxes.members.length != 0 && selectBox.width > 10 && selectBox.height > 10)
{
- trace(selectBox.width + " | " + selectBox.height);
- selectBox.x = Math.min(FlxG.mouse.x,selectInitialX);
- selectBox.y = Math.min(FlxG.mouse.y,selectInitialY);
-
- selectBox.makeGraphic(Math.floor(Math.abs(FlxG.mouse.x - selectInitialX)),Math.floor(Math.abs(FlxG.mouse.y - selectInitialY)),FlxColor.fromRGB(173, 216, 230));
+ selectedBoxes.members[0].connectedNote.charterSelected = false;
+ selectedBoxes.members[0].destroy();
+ selectedBoxes.members.remove(selectedBoxes.members[0]);
}
- }
- }
- if (FlxG.mouse.justReleased && waitingForRelease)
- {
- trace("released!");
- waitingForRelease = false;
- while(selectedBoxes.members.length != 0 && selectBox.width > 10 && selectBox.height > 10)
- {
- selectedBoxes.members[0].connectedNote.charterSelected = false;
- selectedBoxes.members[0].destroy();
- selectedBoxes.members.remove(selectedBoxes.members[0]);
+ for (i in curRenderedNotes)
+ {
+ if (i.overlaps(selectBox) && !i.charterSelected)
+ {
+ Debug.logTrace("seleting " + i.strumTime);
+ selectNote(i, false);
+ }
+ }
+ selectBox.destroy();
+ remove(selectBox);
}
- for(i in curRenderedNotes)
+ if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.D)
{
- if (i.overlaps(selectBox) && !i.charterSelected)
+ lastAction = "delete";
+ var notesToBeDeleted = [];
+ deletedNotes = [];
+ for (i in 0...selectedBoxes.members.length)
{
- trace("seleting " + i.strumTime);
- selectNote(i, false);
+ deletedNotes.push([
+ selectedBoxes.members[i].connectedNote.strumTime,
+ selectedBoxes.members[i].connectedNote.rawNoteData,
+ selectedBoxes.members[i].connectedNote.sustainLength
+ ]);
+ notesToBeDeleted.push(selectedBoxes.members[i].connectedNote);
}
- }
- selectBox.destroy();
- remove(selectBox);
- }
- if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.D)
- {
- lastAction = "delete";
- var notesToBeDeleted = [];
- deletedNotes = [];
- for(i in 0...selectedBoxes.members.length)
- {
- deletedNotes.push([selectedBoxes.members[i].connectedNote.strumTime,selectedBoxes.members[i].connectedNote.rawNoteData,selectedBoxes.members[i].connectedNote.sustainLength]);
- notesToBeDeleted.push(selectedBoxes.members[i].connectedNote);
+ for (i in notesToBeDeleted)
+ {
+ deleteNote(i);
+ }
}
- for(i in notesToBeDeleted)
+ if (FlxG.keys.justPressed.DELETE)
{
- deleteNote(i);
- }
- }
+ lastAction = "delete";
+ var notesToBeDeleted = [];
+ deletedNotes = [];
+ for (i in 0...selectedBoxes.members.length)
+ {
+ deletedNotes.push([
+ selectedBoxes.members[i].connectedNote.strumTime,
+ selectedBoxes.members[i].connectedNote.rawNoteData,
+ selectedBoxes.members[i].connectedNote.sustainLength
+ ]);
+ notesToBeDeleted.push(selectedBoxes.members[i].connectedNote);
+ }
- if (FlxG.keys.justPressed.DELETE)
- {
- lastAction = "delete";
- var notesToBeDeleted = [];
- deletedNotes = [];
- for(i in 0...selectedBoxes.members.length)
- {
- deletedNotes.push([selectedBoxes.members[i].connectedNote.strumTime,selectedBoxes.members[i].connectedNote.rawNoteData,selectedBoxes.members[i].connectedNote.sustainLength]);
- notesToBeDeleted.push(selectedBoxes.members[i].connectedNote);
+ for (i in notesToBeDeleted)
+ {
+ deleteNote(i);
+ }
}
- for(i in notesToBeDeleted)
+ if (FlxG.keys.justPressed.UP || FlxG.keys.justPressed.DOWN)
{
- deleteNote(i);
+ var offsetSteps = FlxG.keys.pressed.CONTROL ? 16 : 1;
+ var offsetSeconds = Conductor.stepCrochet * offsetSteps;
+
+ var offset:Float = 0;
+ if (FlxG.keys.justPressed.UP)
+ offset -= offsetSeconds;
+ if (FlxG.keys.justPressed.DOWN)
+ offset += offsetSeconds;
+
+ offsetSelectedNotes(offset);
}
- }
-
-
if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.C)
{
if (selectedBoxes.members.length != 0)
{
copiedNotes = [];
- for(i in selectedBoxes.members)
- copiedNotes.push([i.connectedNote.strumTime,i.connectedNote.rawNoteData,i.connectedNote.sustainLength,i.connectedNote.isAlt,i.connectedNote.beat]);
+ for (i in selectedBoxes.members)
+ copiedNotes.push([
+ i.connectedNote.strumTime,
+ i.connectedNote.rawNoteData,
+ i.connectedNote.sustainLength,
+ i.connectedNote.isAlt,
+ i.connectedNote.beat
+ ]);
var firstNote = copiedNotes[0][0];
- for(i in copiedNotes) // normalize the notes
+ for (i in copiedNotes) // normalize the notes
{
i[0] = i[0] - firstNote;
- trace("Normalized time: " + i[0] + " | " + i[1]);
+ Debug.logTrace("Normalized time: " + i[0] + " | " + i[1]);
}
- trace(copiedNotes.length);
+ Debug.logTrace(copiedNotes.length);
}
}
-
+
if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.V)
{
if (copiedNotes.length != 0)
{
- while(selectedBoxes.members.length != 0)
+ while (selectedBoxes.members.length != 0)
{
selectedBoxes.members[0].connectedNote.charterSelected = false;
selectedBoxes.members[0].destroy();
selectedBoxes.members.remove(selectedBoxes.members[0]);
}
- trace("Pasting " + copiedNotes.length);
-
+ Debug.logTrace("Pasting " + copiedNotes.length);
+
pasteNotesFromArray(copiedNotes);
lastAction = "paste";
-
}
}
if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.Z)
{
- switch(lastAction)
+ switch (lastAction)
{
case "paste":
- trace("undo paste");
+ Debug.logTrace("undo paste");
if (pastedNotes.length != 0)
{
- for(i in pastedNotes)
+ for (i in pastedNotes)
{
if (curRenderedNotes.members.contains(i))
deleteNote(i);
}
-
+
pastedNotes = [];
}
case "delete":
- trace("undoing delete");
+ Debug.logTrace("undoing delete");
if (deletedNotes.length != 0)
{
- trace("undoing delete");
- pasteNotesFromArray(deletedNotes,false);
+ Debug.logTrace("undoing delete");
+ pasteNotesFromArray(deletedNotes, false);
deletedNotes = [];
}
}
}
- }
+ }
- if (updateFrame == 4)
- {
- TimingStruct.clearTimings();
+ if (updateFrame == 4)
+ {
+ TimingStruct.clearTimings();
var currentIndex = 0;
for (i in _song.eventObjects)
@@ -2154,8 +2300,8 @@ class ChartingState extends MusicBeatState
var endBeat:Float = Math.POSITIVE_INFINITY;
- TimingStruct.addTiming(beat,i.value,endBeat, 0); // offset in this case = start time since we don't have a offset
-
+ TimingStruct.addTiming(beat, i.value, endBeat, 0); // offset in this case = start time since we don't have a offset
+
if (currentIndex != 0)
{
var data = TimingStruct.AllTimings[currentIndex - 1];
@@ -2174,482 +2320,474 @@ class ChartingState extends MusicBeatState
regenerateLines();
updateFrame++;
- }
- else if (updateFrame != 5)
- updateFrame++;
-
- snapText.text = "Snap: 1/" + snap + " (" + (doSnapShit ? "Shift to disable, CTRL Left or Right to increase/decrease" : "Snap Disabled, Shift to renable.") + ")\nAdd Notes: 1-8 (or click)\nZoom: " + zoomFactor;
+ }
+ else if (updateFrame != 5)
+ updateFrame++;
+ snapText.text = "";
- if (FlxG.keys.justPressed.RIGHT && FlxG.keys.pressed.CONTROL)
- {
- snapSelection++;
- var index = 6;
- if (snapSelection > 6)
- snapSelection = 6;
- if (snapSelection < 0)
- snapSelection = 0;
- for (v in deezNuts.keys()){
- trace(v);
- if (index == snapSelection)
+ if (FlxG.keys.justPressed.RIGHT && FlxG.keys.pressed.CONTROL)
+ {
+ snapSelection++;
+ var index = 6;
+ if (snapSelection > 6)
+ snapSelection = 6;
+ if (snapSelection < 0)
+ snapSelection = 0;
+ for (v in deezNuts.keys())
{
- trace("found " + v + " at " + index);
- snap = v;
+ Debug.logTrace(v);
+ if (index == snapSelection)
+ {
+ Debug.logTrace("found " + v + " at " + index);
+ snap = v;
+ }
+ index--;
}
- index--;
- }
- trace("new snap " + snap + " | " + snapSelection);
- }
- if (FlxG.keys.justPressed.LEFT && FlxG.keys.pressed.CONTROL)
- {
- snapSelection--;
- if (snapSelection > 6)
- snapSelection = 6;
- if (snapSelection < 0)
- snapSelection = 0;
- var index = 6;
- for (v in deezNuts.keys()){
- trace(v);
- if (index == snapSelection)
+ Debug.logTrace("new snap " + snap + " | " + snapSelection);
+ }
+ if (FlxG.keys.justPressed.LEFT && FlxG.keys.pressed.CONTROL)
+ {
+ snapSelection--;
+ if (snapSelection > 6)
+ snapSelection = 6;
+ if (snapSelection < 0)
+ snapSelection = 0;
+ var index = 6;
+ for (v in deezNuts.keys())
{
- trace("found " + v + " at " + index);
- snap = v;
+ Debug.logTrace(v);
+ if (index == snapSelection)
+ {
+ Debug.logTrace("found " + v + " at " + index);
+ snap = v;
+ }
+ index--;
}
- index--;
- }
- trace("new snap " + snap + " | " + snapSelection);
- }
-
- if (FlxG.keys.justPressed.SHIFT)
- doSnapShit = !doSnapShit;
-
-
- doSnapShit = defaultSnap;
- if (FlxG.keys.pressed.SHIFT)
- {
- doSnapShit = !defaultSnap;
- }
-
-
- check_snap.checked = doSnapShit;
-
- Conductor.songPosition = FlxG.sound.music.time;
- _song.song = typingShit.text;
-
-
- var timingSeg = TimingStruct.getTimingAtTimestamp(Conductor.songPosition);
-
- var start = Conductor.songPosition;
+ Debug.logTrace("new snap " + snap + " | " + snapSelection);
+ }
- if (timingSeg != null)
- {
- var timingSegBpm = timingSeg.bpm;
- currentBPM = timingSegBpm;
+ if (FlxG.keys.justPressed.SHIFT)
+ doSnapShit = !doSnapShit;
- if (currentBPM != Conductor.bpm)
+ doSnapShit = defaultSnap;
+ if (FlxG.keys.pressed.SHIFT)
{
- trace("BPM CHANGE to " + currentBPM);
- Conductor.changeBPM(currentBPM, false);
+ doSnapShit = !defaultSnap;
}
- var pog:Float = (curDecimalBeat - timingSeg.startBeat) / (Conductor.bpm / 60);
+ check_snap.checked = doSnapShit;
- start = (timingSeg.startTime + pog) * 1000;
- }
+ Conductor.songPosition = FlxG.sound.music.time;
+ _song.songId = typingShit.text;
-
- var weird = getSectionByTime(start, true);
+ var timingSeg = TimingStruct.getTimingAtTimestamp(Conductor.songPosition);
- FlxG.watch.addQuick("Section",weird);
+ var start = Conductor.songPosition;
- if (weird != null)
- {
- if (lastUpdatedSection != getSectionByTime(start,true))
+ if (timingSeg != null)
{
- lastUpdatedSection = weird;
- check_mustHitSection.checked = weird.mustHitSection;
- check_CPUAltAnim.checked = weird.CPUAltAnim;
- check_playerAltAnim.checked = weird.playerAltAnim;
- }
- }
-
+ var timingSegBpm = timingSeg.bpm;
+ currentBPM = timingSegBpm;
- strumLine.y = getYfromStrum(start) * zoomFactor;
- camFollow.y = strumLine.y;
+ if (currentBPM != Conductor.bpm)
+ {
+ Debug.logTrace("BPM CHANGE to " + currentBPM);
+ Conductor.changeBPM(currentBPM, false);
+ }
+ var pog:Float = (curDecimalBeat - timingSeg.startBeat) / (Conductor.bpm / 60);
- bpmTxt.text = Std.string(FlxMath.roundDecimal(Conductor.songPosition / 1000, 2))
- + " / "
- + Std.string(FlxMath.roundDecimal(FlxG.sound.music.length / 1000, 2))
- + "\nCur Section: "
- + curSection
- + "\nCurBPM: "
- + currentBPM
- + "\nCurBeat: "
- + HelperFunctions.truncateFloat(curDecimalBeat,3)
- + "\nCurStep: "
- + curStep
- + "\nZoom: "
- + HelperFunctions.truncateFloat(zoomFactor,2)
- + "\nSpeed: "
- + HelperFunctions.truncateFloat(speed,1);
+ start = (timingSeg.startTime + pog) * 1000;
+ }
+ var weird = getSectionByTime(start, true);
- var left = FlxG.keys.justPressed.ONE;
- var down = FlxG.keys.justPressed.TWO;
- var up = FlxG.keys.justPressed.THREE;
- var right = FlxG.keys.justPressed.FOUR;
- var leftO = FlxG.keys.justPressed.FIVE;
- var downO = FlxG.keys.justPressed.SIX;
- var upO = FlxG.keys.justPressed.SEVEN;
- var rightO = FlxG.keys.justPressed.EIGHT;
+ FlxG.watch.addQuick("Section", weird);
- var pressArray = [left, down, up, right, leftO, downO, upO, rightO];
- var delete = false;
- if (doInput)
- {
- curRenderedNotes.forEach(function(note:Note)
+ if (weird != null)
{
- if (strumLine.overlaps(note) && pressArray[Math.floor(Math.abs(note.rawNoteData))])
+ if (lastUpdatedSection != getSectionByTime(start, true))
{
- deleteNote(note);
- delete = true;
- trace('deelte note');
+ lastUpdatedSection = weird;
+ check_mustHitSection.checked = weird.mustHitSection;
+ check_CPUAltAnim.checked = weird.CPUAltAnim;
+ check_playerAltAnim.checked = weird.playerAltAnim;
}
- });
- for (p in 0...pressArray.length)
- {
- var i = pressArray[p];
- if (i && !delete)
- {
- addNote(new Note(Conductor.songPosition,p));
}
- }
-
-
- }
- if (playClaps)
- {
- for(note in shownNotes)
+ strumLine.y = getYfromStrum(start) * zoomFactor;
+ camFollow.y = strumLine.y;
+
+ bpmTxt.text = Std.string(FlxMath.roundDecimal(Conductor.songPosition / 1000, 2))
+ + " / "
+ + Std.string(FlxMath.roundDecimal(FlxG.sound.music.length / 1000, 2))
+ + "\nCur Section: "
+ + curSection
+ + "\nCurBeat: "
+ + HelperFunctions.truncateFloat(curDecimalBeat, 3)
+ + "\nCurStep: "
+ + curStep
+ + "\nZoom: "
+ + HelperFunctions.truncateFloat(zoomFactor, 2)
+ + "\nSpeed: "
+ + HelperFunctions.truncateFloat(speed, 1)
+ + "\n\nSnap: "
+ + snap
+ + "\n"
+ + (doSnapShit ? "Snap enabled" : "Snap disabled")
+ +
+ (FlxG.save.data.showHelp ? "\n\nHelp:\nCtrl-MWheel : Zoom in/out\nShift-Left/Right :\nChange playback speed\nCtrl-Drag Click : Select notes\nCtrl-C : Copy notes\nCtrl-V : Paste notes\nCtrl-Z : Undo\nDelete : Delete selection\nCTRL-Left/Right :\n Change Snap\nHold Shift : Disable Snap\nClick or 1/2/3/4/5/6/7/8 :\n Place notes\nUp/Down :\n Move selected notes 1 step\nShift-Up/Down :\n Move selected notes 1 beat\nSpace: Play Music\nEnter : Preview\nPress F1 to hide/show this!" : "");
+
+ var left = FlxG.keys.justPressed.ONE;
+ var down = FlxG.keys.justPressed.TWO;
+ var up = FlxG.keys.justPressed.THREE;
+ var right = FlxG.keys.justPressed.FOUR;
+ var leftO = FlxG.keys.justPressed.FIVE;
+ var downO = FlxG.keys.justPressed.SIX;
+ var upO = FlxG.keys.justPressed.SEVEN;
+ var rightO = FlxG.keys.justPressed.EIGHT;
+
+ if (FlxG.keys.justPressed.F1)
+ FlxG.save.data.showHelp = !FlxG.save.data.showHelp;
+
+ var pressArray = [left, down, up, right, leftO, downO, upO, rightO];
+ var delete = false;
+ if (doInput)
{
- if (note.strumTime <= Conductor.songPosition && !claps.contains(note) && FlxG.sound.music.playing)
+ curRenderedNotes.forEach(function(note:Note)
{
- claps.push(note);
- FlxG.sound.play(Paths.sound('SNAP'));
+ if (strumLine.overlaps(note) && pressArray[Math.floor(Math.abs(note.rawNoteData))])
+ {
+ deleteNote(note);
+ delete = true;
+ Debug.logTrace('deelte note');
+ }
+ });
+ for (p in 0...pressArray.length)
+ {
+ var i = pressArray[p];
+ if (i && !delete)
+ {
+ addNote(new Note(Conductor.songPosition, p));
+ }
}
}
- }
- /*curRenderedNotes.forEach(function(note:Note) {
- if (strumLine.overlaps(note) && strumLine.y == note.y) // yandere dev type shit
+
+ if (playClaps)
{
- if (getSectionByTime(Conductor.songPosition).mustHitSection)
+ for (note in shownNotes)
+ {
+ if (note.strumTime <= Conductor.songPosition && !claps.contains(note) && FlxG.sound.music.playing)
{
- trace('must hit ' + Math.abs(note.noteData));
- if (note.noteData < 4)
+ claps.push(note);
+ FlxG.sound.play(Paths.sound('SNAP'));
+ }
+ }
+ }
+ /*curRenderedNotes.forEach(function(note:Note) {
+ if (strumLine.overlaps(note) && strumLine.y == note.y) // yandere dev type shit
+ {
+ if (getSectionByTime(Conductor.songPosition).mustHitSection)
{
- switch (Math.abs(note.noteData))
+ Debug.logTrace('must hit ' + Math.abs(note.noteData));
+ if (note.noteData < 4)
{
- case 2:
- player1.playAnim('singUP', true);
- case 3:
- player1.playAnim('singRIGHT', true);
- case 1:
- player1.playAnim('singDOWN', true);
- case 0:
- player1.playAnim('singLEFT', true);
+ switch (Math.abs(note.noteData))
+ {
+ case 2:
+ player1.playAnim('singUP', true);
+ case 3:
+ player1.playAnim('singRIGHT', true);
+ case 1:
+ player1.playAnim('singDOWN', true);
+ case 0:
+ player1.playAnim('singLEFT', true);
+ }
}
- }
- if (note.noteData >= 4)
- {
- switch (note.noteData)
+ if (note.noteData >= 4)
{
- case 6:
- player2.playAnim('singUP', true);
- case 7:
- player2.playAnim('singRIGHT', true);
- case 5:
- player2.playAnim('singDOWN', true);
- case 4:
- player2.playAnim('singLEFT', true);
+ switch (note.noteData)
+ {
+ case 6:
+ player2.playAnim('singUP', true);
+ case 7:
+ player2.playAnim('singRIGHT', true);
+ case 5:
+ player2.playAnim('singDOWN', true);
+ case 4:
+ player2.playAnim('singLEFT', true);
+ }
}
}
- }
- else
- {
- trace('hit ' + Math.abs(note.noteData));
- if (note.noteData < 4)
+ else
{
- switch (Math.abs(note.noteData))
+ Debug.logTrace('hit ' + Math.abs(note.noteData));
+ if (note.noteData < 4)
{
- case 2:
- player2.playAnim('singUP', true);
- case 3:
- player2.playAnim('singRIGHT', true);
- case 1:
- player2.playAnim('singDOWN', true);
- case 0:
- player2.playAnim('singLEFT', true);
+ switch (Math.abs(note.noteData))
+ {
+ case 2:
+ player2.playAnim('singUP', true);
+ case 3:
+ player2.playAnim('singRIGHT', true);
+ case 1:
+ player2.playAnim('singDOWN', true);
+ case 0:
+ player2.playAnim('singLEFT', true);
+ }
}
- }
- if (note.noteData >= 4)
- {
- switch (note.noteData)
+ if (note.noteData >= 4)
{
- case 6:
- player1.playAnim('singUP', true);
- case 7:
- player1.playAnim('singRIGHT', true);
- case 5:
- player1.playAnim('singDOWN', true);
- case 4:
- player1.playAnim('singLEFT', true);
+ switch (note.noteData)
+ {
+ case 6:
+ player1.playAnim('singUP', true);
+ case 7:
+ player1.playAnim('singRIGHT', true);
+ case 5:
+ player1.playAnim('singDOWN', true);
+ case 4:
+ player1.playAnim('singLEFT', true);
+ }
}
}
- }
- }
- });*/
-
+ }
+ });*/
- FlxG.watch.addQuick('daBeat', curDecimalBeat);
+ FlxG.watch.addQuick('daBeat', curDecimalBeat);
-
- if (FlxG.mouse.justPressed && !waitingForRelease)
- {
- if (FlxG.mouse.overlaps(curRenderedNotes))
+ if (FlxG.mouse.justPressed && !waitingForRelease)
{
- curRenderedNotes.forEach(function(note:Note)
+ if (FlxG.mouse.overlaps(curRenderedNotes))
{
- if (FlxG.mouse.overlaps(note))
+ curRenderedNotes.forEach(function(note:Note)
{
- if (FlxG.keys.pressed.CONTROL)
+ if (FlxG.mouse.overlaps(note))
{
- selectNote(note, false);
- }
- else
- {
- deleteNote(note);
+ if (FlxG.keys.pressed.CONTROL)
+ {
+ selectNote(note, false);
+ }
+ else
+ {
+ deleteNote(note);
+ }
}
- }
- });
- }
- else
- {
- if (FlxG.mouse.x > 0
- && FlxG.mouse.x < 0 + gridBG.width
- && FlxG.mouse.y > 0
- && FlxG.mouse.y < 0 + height)
+ });
+ }
+ else
{
- FlxG.log.add('added note');
- addNote();
+ if (FlxG.mouse.x > 0 && FlxG.mouse.x < 0 + gridBG.width && FlxG.mouse.y > 0 && FlxG.mouse.y < 0 + height)
+ {
+ FlxG.log.add('added note');
+ addNote();
+ }
}
}
- }
- if (FlxG.mouse.x > 0
- && FlxG.mouse.x < gridBG.width
- && FlxG.mouse.y > 0
- && FlxG.mouse.y < height)
- {
- dummyArrow.visible = true;
+ if (FlxG.mouse.x > 0 && FlxG.mouse.x < gridBG.width && FlxG.mouse.y > 0 && FlxG.mouse.y < height)
+ {
+ dummyArrow.visible = true;
- dummyArrow.x = Math.floor(FlxG.mouse.x / GRID_SIZE) * GRID_SIZE;
+ dummyArrow.x = Math.floor(FlxG.mouse.x / GRID_SIZE) * GRID_SIZE;
- if (doSnapShit)
- {
- var time = getStrumTime(FlxG.mouse.y / zoomFactor);
+ if (doSnapShit)
+ {
+ var time = getStrumTime(FlxG.mouse.y / zoomFactor);
+
+ var beat = TimingStruct.getBeatFromTime(time);
+ var snapped = Math.round(beat * deezNuts.get(snap)) / deezNuts.get(snap);
- var beat = TimingStruct.getBeatFromTime(time);
- var snapped = Math.round(beat * deezNuts.get(snap)) / deezNuts.get(snap);
-
- dummyArrow.y = getYfromStrum(TimingStruct.getTimeFromBeat(snapped)) * zoomFactor;
+ dummyArrow.y = getYfromStrum(TimingStruct.getTimeFromBeat(snapped)) * zoomFactor;
+ }
+ else
+ {
+ dummyArrow.y = FlxG.mouse.y;
+ }
}
else
{
- dummyArrow.y = FlxG.mouse.y;
+ dummyArrow.visible = false;
}
- }
- else
- {
- dummyArrow.visible = false;
- }
-
- if (doInput)
- {
- if (FlxG.keys.justPressed.ENTER)
- {
- lastSection = curSection;
-
- PlayState.SONG = _song;
- FlxG.sound.music.stop();
- if (!PlayState.isSM)
- vocals.stop();
- LoadingState.loadAndSwitchState(new PlayState());
- }
- if (FlxG.keys.justPressed.E)
- {
- changeNoteSustain(((60 / (timingSeg != null ? timingSeg.bpm : _song.bpm)) * 1000) / 4);
- }
- if (FlxG.keys.justPressed.Q)
- {
- changeNoteSustain(-(((60 / (timingSeg != null ? timingSeg.bpm : _song.bpm)) * 1000) / 4));
- }
-
- if (FlxG.keys.justPressed.C && !FlxG.keys.pressed.CONTROL)
- {
- var sect = _song.notes[curSection];
+ if (doInput)
+ {
+ if (FlxG.keys.justPressed.ENTER)
+ {
+ lastSection = curSection;
- trace(sect);
+ PlayState.SONG = _song;
+ FlxG.sound.music.stop();
+ if (!PlayState.isSM)
+ vocals.stop();
- sect.mustHitSection = !sect.mustHitSection;
- check_mustHitSection.checked = sect.mustHitSection;
- var i = sectionRenderes.members[curSection];
- var cachedY = i.icon.y;
- remove(i.icon);
- var sectionicon = sect.mustHitSection ? new HealthIcon(_song.player1).clone() : new HealthIcon(_song.player2).clone();
- sectionicon.x = -95;
- sectionicon.y = cachedY;
- sectionicon.setGraphicSize(0, 45);
-
- i.icon = sectionicon;
- i.lastUpdated = sect.mustHitSection;
-
- add(sectionicon);
- trace("must hit " + sect.mustHitSection);
+ while (curRenderedNotes.members.length > 0)
+ {
+ curRenderedNotes.remove(curRenderedNotes.members[0], true);
+ }
- }
- if (FlxG.keys.justPressed.V && !FlxG.keys.pressed.CONTROL)
- {
- trace("swap");
- var secit = _song.notes[curSection];
+ while (curRenderedSustains.members.length > 0)
+ {
+ curRenderedSustains.remove(curRenderedSustains.members[0], true);
+ }
- if (secit != null)
- {
- var newSwaps:Array> = [];
- trace(_song.notes[curSection]);
- for (i in 0...secit.sectionNotes.length)
+ while (sectionRenderes.members.length > 0)
{
- var note = secit.sectionNotes[i];
- if (note[1] < 4)
- note[1] += 4;
- else
- note[1] -= 4;
- newSwaps.push(note);
+ sectionRenderes.remove(sectionRenderes.members[0], true);
}
- secit.sectionNotes = newSwaps;
+ var toRemove = [];
- for (i in shownNotes)
+ for (i in _song.notes)
{
- for(ii in newSwaps)
- if (i.strumTime == ii[0] && i.noteData == ii[1] % 4)
- {
- i.x = Math.floor(ii[1] * GRID_SIZE);
-
- i.y = Math.floor(getYfromStrum(ii[0]) * zoomFactor);
- if (i.sustainLength > 0 && i.noteCharterObject != null)
- i.noteCharterObject.x = i.x + (GRID_SIZE / 2);
- }
+ if (i.startTime > FlxG.sound.music.length)
+ toRemove.push(i);
}
- }
- }
- if (FlxG.keys.justPressed.TAB)
- {
- if (FlxG.keys.pressed.SHIFT)
- {
- UI_box.selected_tab -= 1;
- if (UI_box.selected_tab < 0)
- UI_box.selected_tab = 2;
- }
- else
- {
- UI_box.selected_tab += 1;
- if (UI_box.selected_tab >= 3)
- UI_box.selected_tab = 0;
- }
- }
+ for (i in toRemove)
+ _song.notes.remove(i);
- if (!typingShit.hasFocus)
- {
+ toRemove = []; // clear memory
+ LoadingState.loadAndSwitchState(new PlayState());
+ }
- var shiftThing:Int = 1;
- if (FlxG.keys.pressed.SHIFT)
- shiftThing = 4;
- if (FlxG.keys.justPressed.SPACE)
- {
- if (FlxG.sound.music.playing)
+ if (FlxG.keys.justPressed.E)
{
- FlxG.sound.music.pause();
- if (!PlayState.isSM)
- vocals.pause();
- claps.splice(0, claps.length);
+ changeNoteSustain(((60 / (timingSeg != null ? timingSeg.bpm : _song.bpm)) * 1000) / 4);
}
- else
+ if (FlxG.keys.justPressed.Q)
{
- if (!PlayState.isSM)
- vocals.play();
- FlxG.sound.music.play();
+ changeNoteSustain(-(((60 / (timingSeg != null ? timingSeg.bpm : _song.bpm)) * 1000) / 4));
}
- }
-
- if (FlxG.sound.music.time < 0 || curDecimalBeat < 0)
- FlxG.sound.music.time = 0;
+ if (FlxG.keys.justPressed.C && !FlxG.keys.pressed.CONTROL)
+ {
+ var sect = _song.notes[curSection];
- if (!FlxG.keys.pressed.SHIFT)
- {
- if (FlxG.keys.pressed.W || FlxG.keys.pressed.S)
+ Debug.logTrace(sect);
+
+ sect.mustHitSection = !sect.mustHitSection;
+ updateHeads();
+ check_mustHitSection.checked = sect.mustHitSection;
+ var i = sectionRenderes.members[curSection];
+ var cachedY = i.icon.y;
+ remove(i.icon);
+ var sectionicon = sect.mustHitSection ? new HealthIcon(_song.player1).clone() : new HealthIcon(_song.player2).clone();
+ sectionicon.x = -95;
+ sectionicon.y = cachedY;
+ sectionicon.setGraphicSize(0, 45);
+
+ i.icon = sectionicon;
+ i.lastUpdated = sect.mustHitSection;
+
+ add(sectionicon);
+ Debug.logTrace("must hit " + sect.mustHitSection);
+ }
+ if (FlxG.keys.justPressed.V && !FlxG.keys.pressed.CONTROL)
{
- FlxG.sound.music.pause();
- if (!PlayState.isSM)
- vocals.pause();
- claps.splice(0, claps.length);
+ Debug.logTrace("swap");
+ var secit = _song.notes[curSection];
- var daTime:Float = 700 * FlxG.elapsed;
+ if (secit != null)
+ {
+ swapSection(secit);
+ }
+ }
- if (FlxG.keys.pressed.W)
+ if (FlxG.keys.justPressed.TAB)
+ {
+ if (FlxG.keys.pressed.SHIFT)
{
- FlxG.sound.music.time -= daTime;
+ UI_box.selected_tab -= 1;
+ if (UI_box.selected_tab < 0)
+ UI_box.selected_tab = 2;
}
else
- FlxG.sound.music.time += daTime;
-
- if (!PlayState.isSM)
- vocals.time = FlxG.sound.music.time;
+ {
+ UI_box.selected_tab += 1;
+ if (UI_box.selected_tab >= 3)
+ UI_box.selected_tab = 0;
+ }
}
- }
- else
- {
- if (FlxG.keys.justPressed.W || FlxG.keys.justPressed.S)
+
+ if (!typingShit.hasFocus)
{
- FlxG.sound.music.pause();
- if (!PlayState.isSM)
- vocals.pause();
+ var shiftThing:Int = 1;
+ if (FlxG.keys.pressed.SHIFT)
+ shiftThing = 4;
+ if (FlxG.keys.justPressed.SPACE)
+ {
+ if (FlxG.sound.music.playing)
+ {
+ FlxG.sound.music.pause();
+ if (!PlayState.isSM)
+ vocals.pause();
+ claps.splice(0, claps.length);
+ }
+ else
+ {
+ if (!PlayState.isSM)
+ vocals.play();
+ FlxG.sound.music.play();
+ }
+ }
- var daTime:Float = Conductor.stepCrochet * 2;
+ if (FlxG.sound.music.time < 0 || curDecimalBeat < 0)
+ FlxG.sound.music.time = 0;
- if (FlxG.keys.justPressed.W)
+ if (!FlxG.keys.pressed.SHIFT)
{
- FlxG.sound.music.time -= daTime;
+ if (FlxG.keys.pressed.W || FlxG.keys.pressed.S)
+ {
+ FlxG.sound.music.pause();
+ if (!PlayState.isSM)
+ vocals.pause();
+ claps.splice(0, claps.length);
+
+ var daTime:Float = 700 * FlxG.elapsed;
+
+ if (FlxG.keys.pressed.W)
+ {
+ FlxG.sound.music.time -= daTime;
+ }
+ else
+ FlxG.sound.music.time += daTime;
+
+ if (!PlayState.isSM)
+ vocals.time = FlxG.sound.music.time;
+ }
}
else
- FlxG.sound.music.time += daTime;
+ {
+ if (FlxG.keys.justPressed.W || FlxG.keys.justPressed.S)
+ {
+ FlxG.sound.music.pause();
+ if (!PlayState.isSM)
+ vocals.pause();
- if (!PlayState.isSM)
- vocals.time = FlxG.sound.music.time;
+ var daTime:Float = Conductor.stepCrochet * 2;
+
+ if (FlxG.keys.justPressed.W)
+ {
+ FlxG.sound.music.time -= daTime;
+ }
+ else
+ FlxG.sound.music.time += daTime;
+
+ if (!PlayState.isSM)
+ vocals.time = FlxG.sound.music.time;
+ }
+ }
}
}
+ _song.bpm = tempBpm;
}
+ catch (e)
+ {
+ Debug.logError("Error on this shit???\n" + e);
}
- _song.bpm = tempBpm;
-
- /* if (FlxG.keys.justPressed.UP)
- Conductor.changeBPM(Conductor.bpm + 1);
- if (FlxG.keys.justPressed.DOWN)
- Conductor.changeBPM(Conductor.bpm - 1); */
super.update(elapsed);
}
@@ -2665,32 +2803,33 @@ class ChartingState extends MusicBeatState
if (curSelectedNoteObject.noteCharterObject != null)
curRenderedSustains.remove(curSelectedNoteObject.noteCharterObject);
+ remove(curSelectedNoteObject.noteCharterObject);
+
var sustainVis:FlxSprite = new FlxSprite(curSelectedNoteObject.x + (GRID_SIZE / 2),
- curSelectedNoteObject.y + GRID_SIZE).makeGraphic(8, Math.floor((getYfromStrum(curSelectedNoteObject.strumTime + curSelectedNote[2]) * zoomFactor) - curSelectedNoteObject.y));
+ curSelectedNoteObject.y + GRID_SIZE).makeGraphic(8,
+ Math.floor((getYfromStrum(curSelectedNoteObject.strumTime + curSelectedNote[2]) * zoomFactor) - curSelectedNoteObject.y));
curSelectedNoteObject.sustainLength = curSelectedNote[2];
- trace("new sustain " + curSelectedNoteObject.sustainLength);
+ Debug.logTrace("new sustain " + curSelectedNoteObject.sustainLength);
curSelectedNoteObject.noteCharterObject = sustainVis;
-
+
curRenderedSustains.add(sustainVis);
}
}
updateNoteUI();
-
-
}
function resetSection(songBeginning:Bool = false):Void
{
FlxG.sound.music.pause();
if (!PlayState.isSM)
- vocals.pause();
+ vocals.pause();
// Basically old shit from changeSection???
FlxG.sound.music.time = 0;
if (!PlayState.isSM)
- vocals.time = FlxG.sound.music.time;
+ vocals.time = FlxG.sound.music.time;
updateGrid();
if (!songBeginning)
@@ -2699,11 +2838,11 @@ class ChartingState extends MusicBeatState
function changeSection(sec:Int = 0, ?updateMusic:Bool = true):Void
{
- trace('changing section' + sec);
+ Debug.logTrace('changing section' + sec);
if (_song.notes[sec] != null)
{
- trace('naw im not null');
+ Debug.logTrace('naw im not null');
curSection = sec;
updateGrid();
@@ -2712,7 +2851,7 @@ class ChartingState extends MusicBeatState
{
FlxG.sound.music.pause();
if (!PlayState.isSM)
- vocals.pause();
+ vocals.pause();
/*var daNum:Int = 0;
var daLength:Float = 0;
@@ -2724,7 +2863,7 @@ class ChartingState extends MusicBeatState
FlxG.sound.music.time = sectionStartTime();
if (!PlayState.isSM)
- vocals.time = FlxG.sound.music.time;
+ vocals.time = FlxG.sound.music.time;
updateCurStep();
}
@@ -2732,7 +2871,7 @@ class ChartingState extends MusicBeatState
updateSectionUI();
}
else
- trace('bro wtf I AM NULL');
+ Debug.logTrace('bro wtf I AM NULL');
}
function copySection(?sectionNum:Int = 1)
@@ -2747,7 +2886,7 @@ class ChartingState extends MusicBeatState
{
var strum = note[0] + Conductor.stepCrochet * (_song.notes[daSec].lengthInSteps * sectionNum);
- var copiedNote:Array = [strum, note[1], note[2],note[3]];
+ var copiedNote:Array = [strum, note[1], note[2], note[3]];
sect.sectionNotes.push(copiedNote);
}
@@ -2774,16 +2913,49 @@ class ChartingState extends MusicBeatState
function updateHeads():Void
{
- if (check_mustHitSection.checked)
+ var mustHit = check_mustHitSection.checked;
+ #if FEATURE_FILESYSTEM
+ var head = (mustHit ? _song.player1 : _song.player2);
+ var i = sectionRenderes.members[curSection];
+
+ function iconUpdate(failsafe:Bool = false):Void
+ {
+ var sect = _song.notes[curSection];
+ var cachedY = i.icon.y;
+ remove(i.icon);
+ var sectionicon = new HealthIcon(failsafe ? (mustHit ? 'bf' : 'face') : head).clone();
+ sectionicon.x = -95;
+ sectionicon.y = cachedY;
+ sectionicon.setGraphicSize(0, 45);
+
+ i.icon = sectionicon;
+ i.lastUpdated = sect.mustHitSection;
+
+ add(sectionicon);
+ }
+
+ // fail-safe
+ // TODO: Refactor this to use OpenFlAssets.
+ if (!FileSystem.exists(Paths.image('icons/icon-' + head.split("-")[0])) && !FileSystem.exists(Paths.image('icons/icon-' + head)))
{
- leftIcon.animation.play(_song.player1);
- rightIcon.animation.play(_song.player2);
+ if (i.icon.animation.curAnim == null)
+ iconUpdate(true);
}
- else
+ //
+ else if (i.icon.animation.curAnim.name != head
+ && i.icon.animation.curAnim.name != head.split("-")[0]
+ || head == 'bf-pixel'
+ && i.icon.animation.curAnim.name != 'bf-pixel')
{
- leftIcon.animation.play(_song.player2);
- rightIcon.animation.play(_song.player1);
+ if (i.icon.animation.getByName(head) != null)
+ i.icon.animation.play(head);
+ else
+ iconUpdate();
}
+ #else
+ leftIcon.animation.play(mustHit ? _song.player1 : _song.player2);
+ rightIcon.animation.play(mustHit ? _song.player2 : _song.player1);
+ #end
}
function updateNoteUI():Void
@@ -2820,7 +2992,7 @@ class ChartingState extends MusicBeatState
{
if (_song.notes[sec].sectionNotes[notesse][2] == null)
{
- trace('SUS NULL');
+ Debug.logTrace('SUS NULL');
_song.notes[sec].sectionNotes[notesse][2] = 0;
}
}
@@ -2838,7 +3010,7 @@ class ChartingState extends MusicBeatState
var daStrumTime = i[0];
var daSus = i[2];
- var note:Note = new Note(daStrumTime, daNoteInfo % 4,null,false,true,i[3], i[4]);
+ var note:Note = new Note(daStrumTime, daNoteInfo % 4, null, false, true, i[3], i[4]);
note.rawNoteData = daNoteInfo;
note.sustainLength = daSus;
note.setGraphicSize(Math.floor(GRID_SIZE), Math.floor(GRID_SIZE));
@@ -2861,13 +3033,12 @@ class ChartingState extends MusicBeatState
note.y + GRID_SIZE).makeGraphic(8, Math.floor((getYfromStrum(note.strumTime + note.sustainLength) * zoomFactor) - note.y));
note.noteCharterObject = sustainVis;
-
+
curRenderedSustains.add(sustainVis);
}
}
- currentSection++;
+ currentSection++;
}
-
}
private function addSection(lengthInSteps:Int = 16):Void
@@ -2878,12 +3049,12 @@ class ChartingState extends MusicBeatState
var bpm = _song.bpm;
for (i in 0...curSection)
{
- for(ii in TimingStruct.AllTimings)
- {
- var data = TimingStruct.getTimingAtTimestamp(start);
- if ((data != null ? data.bpm : _song.bpm) != bpm && bpm != ii.bpm)
- bpm = ii.bpm;
- }
+ for (ii in TimingStruct.AllTimings)
+ {
+ var data = TimingStruct.getTimingAtTimestamp(start);
+ if ((data != null ? data.bpm : _song.bpm) != bpm && bpm != ii.bpm)
+ bpm = ii.bpm;
+ }
start += (4 * (60 / bpm)) * 1000;
}
@@ -2908,19 +3079,18 @@ class ChartingState extends MusicBeatState
{
var swagNum:Int = 0;
-
if (deleteAllBoxes)
- while(selectedBoxes.members.length != 0)
+ while (selectedBoxes.members.length != 0)
{
selectedBoxes.members[0].connectedNote.charterSelected = false;
selectedBoxes.members[0].destroy();
selectedBoxes.members.remove(selectedBoxes.members[0]);
}
- for(sec in _song.notes)
+ for (sec in _song.notes)
{
swagNum = 0;
- for(i in sec.sectionNotes)
+ for (i in sec.sectionNotes)
{
if (i[0] == note.strumTime && i[1] == note.rawNoteData)
{
@@ -2930,15 +3100,13 @@ class ChartingState extends MusicBeatState
curSelectedNoteObject = note;
if (!note.charterSelected)
- {
- var box = new ChartingBox(note.x,note.y,note);
+ {
+ var box = new ChartingBox(note.x, note.y, note);
box.connectedNoteData = i;
selectedBoxes.add(box);
note.charterSelected = true;
curSelectedNoteObject.charterSelected = true;
}
-
-
}
swagNum += 1;
}
@@ -2947,50 +3115,49 @@ class ChartingState extends MusicBeatState
updateNoteUI();
}
-
function deleteNote(note:Note):Void
- {
- lastNote = note;
+ {
+ lastNote = note;
- var section = getSectionByTime(note.strumTime);
+ var section = getSectionByTime(note.strumTime);
- var found = false;
+ var found = false;
- for (i in section.sectionNotes)
+ for (i in section.sectionNotes)
+ {
+ if (i[0] == note.strumTime && i[1] == note.rawNoteData)
{
- if (i[0] == note.strumTime && i[1] == note.rawNoteData)
- {
- section.sectionNotes.remove(i);
- found = true;
- }
+ section.sectionNotes.remove(i);
+ found = true;
}
+ }
- if (!found) // backup check
+ if (!found) // backup check
+ {
+ for (i in _song.notes)
{
- for(i in _song.notes)
- {
- for (n in i.sectionNotes)
- if (n[0] == note.strumTime && n[1] == note.rawNoteData)
- i.sectionNotes.remove(n);
- }
+ for (n in i.sectionNotes)
+ if (n[0] == note.strumTime && n[1] == note.rawNoteData)
+ i.sectionNotes.remove(n);
}
+ }
- curRenderedNotes.remove(note);
+ curRenderedNotes.remove(note);
- if (note.sustainLength > 0)
- curRenderedSustains.remove(note.noteCharterObject);
+ if (note.sustainLength > 0)
+ curRenderedSustains.remove(note.noteCharterObject);
- for(i in 0...selectedBoxes.members.length)
+ for (i in 0...selectedBoxes.members.length)
+ {
+ var box = selectedBoxes.members[i];
+ if (box.connectedNote == note)
{
- var box = selectedBoxes.members[i];
- if (box.connectedNote == note)
- {
- selectedBoxes.members.remove(box);
- box.destroy();
- return;
- }
+ selectedBoxes.members.remove(box);
+ box.destroy();
+ return;
}
}
+ }
function clearSection():Void
{
@@ -3009,129 +3176,122 @@ class ChartingState extends MusicBeatState
updateGrid();
}
- private function newSection(lengthInSteps:Int = 16,mustHitSection:Bool = false,CPUAltAnim:Bool = true, playerAltAnim:Bool = true):SwagSection
- {
+ private function newSection(lengthInSteps:Int = 16, mustHitSection:Bool = false, CPUAltAnim:Bool = true, playerAltAnim:Bool = true):SwagSection
+ {
+ var daPos:Float = 0;
- var daPos:Float = 0;
-
- var currentSeg = TimingStruct.AllTimings[TimingStruct.AllTimings.length - 1];
+ var currentSeg = TimingStruct.AllTimings[TimingStruct.AllTimings.length - 1];
- var currentBeat = 4;
+ var currentBeat = 4;
- for(i in _song.notes)
- currentBeat += 4;
+ for (i in _song.notes)
+ currentBeat += 4;
- if (currentSeg == null)
- return null;
+ if (currentSeg == null)
+ return null;
- var start:Float = (currentBeat - currentSeg.startBeat) / (currentSeg.bpm / 60);
+ var start:Float = (currentBeat - currentSeg.startBeat) / (currentSeg.bpm / 60);
- daPos = (currentSeg.startTime + start) * 1000;
-
- var sec:SwagSection = {
- startTime: daPos,
- endTime: Math.POSITIVE_INFINITY,
- lengthInSteps: lengthInSteps,
- bpm: _song.bpm,
- changeBPM: false,
- mustHitSection: mustHitSection,
- sectionNotes: [],
- typeOfSection: 0,
- altAnim: false,
- CPUAltAnim: CPUAltAnim,
- playerAltAnim: playerAltAnim
- };
+ daPos = (currentSeg.startTime + start) * 1000;
+ var sec:SwagSection = {
+ startTime: daPos,
+ endTime: Math.POSITIVE_INFINITY,
+ lengthInSteps: lengthInSteps,
+ bpm: _song.bpm,
+ changeBPM: false,
+ mustHitSection: mustHitSection,
+ sectionNotes: [],
+ typeOfSection: 0,
+ altAnim: false,
+ CPUAltAnim: CPUAltAnim,
+ playerAltAnim: playerAltAnim
+ };
- return sec;
- }
+ return sec;
+ }
function recalculateAllSectionTimes()
{
+ Debug.logTrace("RECALCULATING SECTION TIMES");
- trace("RECALCULATING SECTION TIMES");
-
- var savedNotes:Array = [];
+ var savedNotes:Array = [];
- for (i in 0..._song.notes.length) // loops through sections
- {
- var section = _song.notes[i];
+ for (i in 0..._song.notes.length) // loops through sections
+ {
+ var section = _song.notes[i];
- var currentBeat = 4 * i;
+ var currentBeat = 4 * i;
- var currentSeg = TimingStruct.getTimingAtBeat(currentBeat);
+ var currentSeg = TimingStruct.getTimingAtBeat(currentBeat);
- if (currentSeg == null)
- return;
+ if (currentSeg == null)
+ return;
- var start:Float = (currentBeat - currentSeg.startBeat) / (currentSeg.bpm / 60);
+ var start:Float = (currentBeat - currentSeg.startBeat) / (currentSeg.bpm / 60);
- section.startTime = (currentSeg.startTime + start) * 1000;
+ section.startTime = (currentSeg.startTime + start) * 1000;
- if (i != 0)
- _song.notes[i - 1].endTime = section.startTime;
- section.endTime = Math.POSITIVE_INFINITY;
- }
+ if (i != 0)
+ _song.notes[i - 1].endTime = section.startTime;
+ section.endTime = Math.POSITIVE_INFINITY;
+ }
}
+ function shiftNotes(measure:Int = 0, step:Int = 0, ms:Int = 0):Void
+ {
+ var newSong = [];
+ var millisecadd = (((measure * 4) + step / 4) * (60000 / currentBPM)) + ms;
+ var totaladdsection = Std.int((millisecadd / (60000 / currentBPM) / 4));
+ if (millisecadd > 0)
+ {
+ for (i in 0...totaladdsection)
+ {
+ newSong.unshift(newSection());
+ }
+ }
+ for (daSection1 in 0..._song.notes.length)
+ {
+ newSong.push(newSection(16, _song.notes[daSection1].mustHitSection, _song.notes[daSection1].CPUAltAnim, _song.notes[daSection1].playerAltAnim));
+ }
- function shiftNotes(measure:Int=0,step:Int=0,ms:Int = 0):Void
+ for (daSection in 0...(_song.notes.length))
{
- var newSong = [];
-
- var millisecadd = (((measure*4)+step/4)*(60000/currentBPM))+ms;
- var totaladdsection = Std.int((millisecadd/(60000/currentBPM)/4));
- trace(millisecadd,totaladdsection);
- if(millisecadd > 0)
- {
- for(i in 0...totaladdsection)
- {
- newSong.unshift(newSection());
- }
- }
- for (daSection1 in 0..._song.notes.length)
+ var aimtosetsection = daSection + Std.int((totaladdsection));
+ if (aimtosetsection < 0)
+ aimtosetsection = 0;
+ newSong[aimtosetsection].mustHitSection = _song.notes[daSection].mustHitSection;
+ updateHeads();
+ newSong[aimtosetsection].CPUAltAnim = _song.notes[daSection].CPUAltAnim;
+ newSong[aimtosetsection].playerAltAnim = _song.notes[daSection].playerAltAnim;
+ // Debug.logTrace("section "+daSection);
+ for (daNote in 0...(_song.notes[daSection].sectionNotes.length))
+ {
+ var newtiming = _song.notes[daSection].sectionNotes[daNote][0] + millisecadd;
+ if (newtiming < 0)
{
- newSong.push(newSection(16,_song.notes[daSection1].mustHitSection,_song.notes[daSection1].CPUAltAnim,_song.notes[daSection1].playerAltAnim));
+ newtiming = 0;
}
-
- for (daSection in 0...(_song.notes.length))
- {
- var aimtosetsection = daSection+Std.int((totaladdsection));
- if(aimtosetsection<0) aimtosetsection = 0;
- newSong[aimtosetsection].mustHitSection = _song.notes[daSection].mustHitSection;
- newSong[aimtosetsection].CPUAltAnim = _song.notes[daSection].CPUAltAnim;
- newSong[aimtosetsection].playerAltAnim = _song.notes[daSection].playerAltAnim;
- //trace("section "+daSection);
- for(daNote in 0...(_song.notes[daSection].sectionNotes.length))
- {
- var newtiming = _song.notes[daSection].sectionNotes[daNote][0]+millisecadd;
- if(newtiming<0)
- {
- newtiming = 0;
- }
- var futureSection = Math.floor(newtiming/4/(60000/currentBPM));
- _song.notes[daSection].sectionNotes[daNote][0] = newtiming;
- newSong[futureSection].sectionNotes.push(_song.notes[daSection].sectionNotes[daNote]);
-
- //newSong.notes[daSection].sectionNotes.remove(_song.notes[daSection].sectionNotes[daNote]);
- }
-
+ var futureSection = Math.floor(newtiming / 4 / (60000 / currentBPM));
+ _song.notes[daSection].sectionNotes[daNote][0] = newtiming;
+ newSong[futureSection].sectionNotes.push(_song.notes[daSection].sectionNotes[daNote]);
+
+ // newSong.notes[daSection].sectionNotes.remove(_song.notes[daSection].sectionNotes[daNote]);
}
- //trace("DONE BITCH");
- _song.notes = newSong;
- recalculateAllSectionTimes();
- updateGrid();
- updateSectionUI();
- updateNoteUI();
}
+ // Debug.logTrace("DONE BITCH");
+ _song.notes = newSong;
+ recalculateAllSectionTimes();
+ updateGrid();
+ updateSectionUI();
+ updateNoteUI();
+ }
public function getSectionByTime(ms:Float, ?changeCurSectionIndex:Bool = false):SwagSection
{
var index = 0;
-
-
for (i in _song.notes)
{
if (ms >= i.startTime && ms < i.endTime)
@@ -3143,15 +3303,14 @@ class ChartingState extends MusicBeatState
index++;
}
-
return null;
}
public function getNoteByTime(ms:Float)
{
- for(i in _song.notes)
+ for (i in _song.notes)
{
- for(n in i.sectionNotes)
+ for (n in i.sectionNotes)
if (n[0] == ms)
return i;
}
@@ -3164,21 +3323,27 @@ class ChartingState extends MusicBeatState
{
var strum = getStrumTime(dummyArrow.y) / zoomFactor;
- trace(strum + " from " + dummyArrow.y);
-
- trace("adding note with " + strum + " from dummyArrow");
-
var section = getSectionByTime(strum);
if (section == null)
return;
+ Debug.logTrace(strum + " from " + dummyArrow.y);
+
var noteStrum = strum;
var noteData = Math.floor(FlxG.mouse.x / GRID_SIZE);
var noteSus = 0;
+ Debug.logTrace("adding note with " + strum + " from dummyArrow with data " + noteData);
+
if (n != null)
- section.sectionNotes.push([n.strumTime, n.noteData, n.sustainLength, false, TimingStruct.getBeatFromTime(n.strumTime)]);
+ section.sectionNotes.push([
+ n.strumTime,
+ n.noteData,
+ n.sustainLength,
+ false,
+ TimingStruct.getBeatFromTime(n.strumTime)
+ ]);
else
section.sectionNotes.push([noteStrum, noteData, noteSus, false, TimingStruct.getBeatFromTime(noteStrum)]);
@@ -3190,7 +3355,7 @@ class ChartingState extends MusicBeatState
if (n == null)
{
- var note:Note = new Note(noteStrum, noteData % 4,null,false,true,TimingStruct.getBeatFromTime(noteStrum));
+ var note:Note = new Note(noteStrum, noteData % 4, null, false, true, TimingStruct.getBeatFromTime(noteStrum));
note.rawNoteData = noteData;
note.sustainLength = noteSus;
note.setGraphicSize(Math.floor(GRID_SIZE), Math.floor(GRID_SIZE));
@@ -3201,18 +3366,18 @@ class ChartingState extends MusicBeatState
curSelectedNoteObject.charterSelected = false;
curSelectedNoteObject = note;
- while(selectedBoxes.members.length != 0)
+ while (selectedBoxes.members.length != 0)
{
selectedBoxes.members[0].connectedNote.charterSelected = false;
selectedBoxes.members[0].destroy();
selectedBoxes.members.remove(selectedBoxes.members[0]);
}
-
+
curSelectedNoteObject.charterSelected = true;
note.y = Math.floor(getYfromStrum(noteStrum) * zoomFactor);
- var box = new ChartingBox(note.x,note.y,note);
+ var box = new ChartingBox(note.x, note.y, note);
box.connectedNoteData = thingy;
selectedBoxes.add(box);
@@ -3220,7 +3385,7 @@ class ChartingState extends MusicBeatState
}
else
{
- var note:Note = new Note(n.strumTime, n.noteData % 4,null,false,true, n.isAlt,TimingStruct.getBeatFromTime(n.strumTime));
+ var note:Note = new Note(n.strumTime, n.noteData % 4, null, false, true, n.isAlt, TimingStruct.getBeatFromTime(n.strumTime));
note.beat = TimingStruct.getBeatFromTime(n.strumTime);
note.rawNoteData = n.noteData;
note.sustainLength = noteSus;
@@ -3232,17 +3397,17 @@ class ChartingState extends MusicBeatState
curSelectedNoteObject.charterSelected = false;
curSelectedNoteObject = note;
- while(selectedBoxes.members.length != 0)
+ while (selectedBoxes.members.length != 0)
{
selectedBoxes.members[0].connectedNote.charterSelected = false;
selectedBoxes.members[0].destroy();
selectedBoxes.members.remove(selectedBoxes.members[0]);
}
- var box = new ChartingBox(note.x,note.y,note);
+ var box = new ChartingBox(note.x, note.y, note);
box.connectedNoteData = thingy;
selectedBoxes.add(box);
-
+
curSelectedNoteObject.charterSelected = true;
note.y = Math.floor(getYfromStrum(n.strumTime) * zoomFactor);
@@ -3281,7 +3446,7 @@ class ChartingState extends MusicBeatState
if (sec != null && sec == i)
{
- trace('swag loop??');
+ Debug.logTrace('swag loop??');
break;
}
}
@@ -3292,7 +3457,7 @@ class ChartingState extends MusicBeatState
function loadLevel():Void
{
- trace(_song.notes);
+ Debug.logTrace(_song.notes);
}
function getNotes():Array
@@ -3307,28 +3472,107 @@ class ChartingState extends MusicBeatState
return noteData;
}
- function loadJson(song:String):Void
+ function loadJson(songId:String):Void
{
var difficultyArray:Array = ["-easy", "", "-hard"];
- var format = StringTools.replace(PlayState.SONG.song.toLowerCase(), " ", "-");
- switch (format) {
- case 'Dad-Battle': format = 'Dadbattle';
- case 'Philly-Nice': format = 'Philly';
+
+ PlayState.SONG = Song.loadFromJson(songId, difficultyArray[PlayState.storyDifficulty]);
+
+ while (curRenderedNotes.members.length > 0)
+ {
+ curRenderedNotes.remove(curRenderedNotes.members[0], true);
}
- PlayState.SONG = Song.loadFromJson(format + difficultyArray[PlayState.storyDifficulty], format);
+
+ while (curRenderedSustains.members.length > 0)
+ {
+ curRenderedSustains.remove(curRenderedSustains.members[0], true);
+ }
+
+ while (sectionRenderes.members.length > 0)
+ {
+ sectionRenderes.remove(sectionRenderes.members[0], true);
+ }
+
+ while (sectionRenderes.members.length > 0)
+ {
+ sectionRenderes.remove(sectionRenderes.members[0], true);
+ }
+ var toRemove = [];
+
+ for (i in _song.notes)
+ {
+ if (i.startTime > FlxG.sound.music.length)
+ toRemove.push(i);
+ }
+
+ for (i in toRemove)
+ _song.notes.remove(i);
+
+ toRemove = []; // clear memory
LoadingState.loadAndSwitchState(new ChartingState());
}
function loadAutosave():Void
{
- PlayState.SONG = Song.parseJSONshit(FlxG.save.data.autosave);
+ while (curRenderedNotes.members.length > 0)
+ {
+ curRenderedNotes.remove(curRenderedNotes.members[0], true);
+ }
+
+ while (curRenderedSustains.members.length > 0)
+ {
+ curRenderedSustains.remove(curRenderedSustains.members[0], true);
+ }
+
+ var autoSaveData = Json.parse(FlxG.save.data.autosave);
+
+ var data:SongData = cast autoSaveData.song;
+ var meta:SongMeta = {};
+ var name:String = data.songId;
+ if (autoSaveData.song != null)
+ {
+ meta = autoSaveData.songMeta != null ? cast autoSaveData.songMeta : {};
+ name = meta.name;
+ }
+ PlayState.SONG = Song.parseJSONshit(name, data, meta);
+
+ while (curRenderedNotes.members.length > 0)
+ {
+ curRenderedNotes.remove(curRenderedNotes.members[0], true);
+ }
+
+ while (curRenderedSustains.members.length > 0)
+ {
+ curRenderedSustains.remove(curRenderedSustains.members[0], true);
+ }
+
+ while (sectionRenderes.members.length > 0)
+ {
+ sectionRenderes.remove(sectionRenderes.members[0], true);
+ }
+ var toRemove = [];
+
+ for (i in _song.notes)
+ {
+ if (i.startTime > FlxG.sound.music.length)
+ toRemove.push(i);
+ }
+
+ for (i in toRemove)
+ _song.notes.remove(i);
+
+ toRemove = []; // clear memory
LoadingState.loadAndSwitchState(new ChartingState());
}
function autosaveSong():Void
{
FlxG.save.data.autosave = Json.stringify({
- "song": _song
+ "song": _song,
+ "songMeta": {
+ "name": _song.songId,
+ "offset": 0,
+ }
});
FlxG.save.flush();
}
@@ -3336,11 +3580,25 @@ class ChartingState extends MusicBeatState
private function saveLevel()
{
var difficultyArray:Array = ["-easy", "", "-hard"];
+
+ var toRemove = [];
+
+ for (i in _song.notes)
+ {
+ if (i.startTime > FlxG.sound.music.length)
+ toRemove.push(i);
+ }
+
+ for (i in toRemove)
+ _song.notes.remove(i);
+
+ toRemove = []; // clear memory
+
var json = {
"song": _song
};
- var data:String = Json.stringify(json,null," ");
+ var data:String = Json.stringify(json, null, " ");
if ((data != null) && (data.length > 0))
{
@@ -3348,7 +3606,7 @@ class ChartingState extends MusicBeatState
_file.addEventListener(Event.COMPLETE, onSaveComplete);
_file.addEventListener(Event.CANCEL, onSaveCancel);
_file.addEventListener(IOErrorEvent.IO_ERROR, onSaveError);
- _file.save(data.trim(), _song.song.toLowerCase() + difficultyArray[PlayState.storyDifficulty] + ".json");
+ _file.save(data.trim(), _song.songId.toLowerCase() + difficultyArray[PlayState.storyDifficulty] + ".json");
}
}
@@ -3363,7 +3621,7 @@ class ChartingState extends MusicBeatState
/**
* Called when the save file dialog is cancelled.
- */
+ */
function onSaveCancel(_):Void
{
_file.removeEventListener(Event.COMPLETE, onSaveComplete);
diff --git a/source/Conductor.hx b/source/Conductor.hx
index c4b5847b6f..d98289f8fc 100644
--- a/source/Conductor.hx
+++ b/source/Conductor.hx
@@ -1,13 +1,12 @@
package;
-import Song.SwagSong;
+import Song.SongData;
import flixel.FlxG;
/**
* ...
* @author
*/
-
typedef BPMChangeEvent =
{
var stepTime:Int;
@@ -43,7 +42,7 @@ class Conductor
Conductor.timeScale = Conductor.safeZoneOffset / 166;
}
- public static function mapBPMChanges(song:SwagSong)
+ public static function mapBPMChanges(song:SongData)
{
bpmChangeMap = [];
@@ -52,7 +51,7 @@ class Conductor
var totalPos:Float = 0;
for (i in 0...song.notes.length)
{
- if(song.notes[i].changeBPM && song.notes[i].bpm != curBPM)
+ if (song.notes[i].changeBPM && song.notes[i].bpm != curBPM)
{
curBPM = song.notes[i].bpm;
var event:BPMChangeEvent = {
@@ -70,19 +69,19 @@ class Conductor
trace("new BPM map BUDDY " + bpmChangeMap);
}
- public static function recalculateTimingStruct(SONG:Song)
+ public static function recalculateTimingStruct(SONG:SongData)
{
- for(i in SONG.eventObjects)
+ for (i in SONG.eventObjects)
{
/*TimingStruct.addTiming(beat,bpm,endBeat, Std.parseFloat(OFFSET));
- if (changeEvents.length != 0)
- {
- var data = TimingStruct.AllTimings[currentIndex - 1];
- data.endBeat = beat;
- data.length = (data.endBeat - data.startBeat) / (data.bpm / 60);
- TimingStruct.AllTimings[currentIndex].startTime = data.startTime + data.length;
- }*/
+ if (changeEvents.length != 0)
+ {
+ var data = TimingStruct.AllTimings[currentIndex - 1];
+ data.endBeat = beat;
+ data.length = (data.endBeat - data.startBeat) / (data.bpm / 60);
+ TimingStruct.AllTimings[currentIndex].startTime = data.startTime + data.length;
+ }*/
}
}
@@ -93,4 +92,4 @@ class Conductor
crochet = ((60 / bpm) * 1000);
stepCrochet = crochet / 4;
}
-}
\ No newline at end of file
+}
diff --git a/source/Controls.hx b/source/Controls.hx
index 021911590f..28182212e5 100644
--- a/source/Controls.hx
+++ b/source/Controls.hx
@@ -260,7 +260,7 @@ class Controls extends FlxActionSet
for (action in digitalActions)
byName[action.name] = action;
-
+
if (scheme == null)
scheme = None;
setKeyboardScheme(scheme, false);
@@ -398,7 +398,7 @@ class Controls extends FlxActionSet
for (input in action.inputs)
{
if (device == null || isDevice(input, device))
- byName[name].add(cast input);
+ byName[name].add(cast input);
}
}
#end
@@ -414,7 +414,7 @@ class Controls extends FlxActionSet
#else
for (gamepad in controls.gamepadsAdded)
if (gamepadsAdded.indexOf(gamepad) == -1)
- gamepadsAdded.push(gamepad);
+ gamepadsAdded.push(gamepad);
#end
mergeKeyboardScheme(controls.keyboardScheme);
@@ -490,103 +490,104 @@ class Controls extends FlxActionSet
public function setKeyboardScheme(scheme:KeyboardScheme, reset = true)
{
-
loadKeyBinds();
/*if (reset)
- removeKeyboard();
+ removeKeyboard();
- keyboardScheme = scheme;
-
- #if (haxe >= "4.0.0")
- switch (scheme)
- {
- case Solo:
- inline bindKeys(Control.UP, [FlxKey.fromString("W"), FlxKey.UP]);
- inline bindKeys(Control.DOWN, [FlxKey.fromString("S"), FlxKey.DOWN]);
- inline bindKeys(Control.LEFT, [FlxKey.fromString("A"), FlxKey.LEFT]);
- inline bindKeys(Control.RIGHT, [FlxKey.fromString("D"), FlxKey.RIGHT]);
- inline bindKeys(Control.ACCEPT, [Z, SPACE, ENTER]);
- inline bindKeys(Control.BACK, [BACKSPACE, ESCAPE]);
- inline bindKeys(Control.PAUSE, [P, ENTER, ESCAPE]);
- inline bindKeys(Control.RESET, [FlxKey.fromString("R")]);
- case Duo(true):
- inline bindKeys(Control.UP, [W, K]);
- inline bindKeys(Control.DOWN, [S, J]);
- inline bindKeys(Control.LEFT, [A, H]);
- inline bindKeys(Control.RIGHT, [D, L]);
- inline bindKeys(Control.ACCEPT, [Z]);
- inline bindKeys(Control.BACK, [X]);
- inline bindKeys(Control.PAUSE, [ONE]);
- inline bindKeys(Control.RESET, [R]);
- case Duo(false):
- inline bindKeys(Control.UP, [FlxKey.UP]);
- inline bindKeys(Control.DOWN, [FlxKey.DOWN]);
- inline bindKeys(Control.LEFT, [FlxKey.LEFT]);
- inline bindKeys(Control.RIGHT, [FlxKey.RIGHT]);
- inline bindKeys(Control.ACCEPT, [O]);
- inline bindKeys(Control.BACK, [P]);
- inline bindKeys(Control.PAUSE, [ENTER]);
- inline bindKeys(Control.RESET, [BACKSPACE]);
- case None: // nothing
- case Custom: // nothing
- }
- #else
- switch (scheme)
- {
- case Solo:
- bindKeys(Control.UP, [W, K, FlxKey.UP]);
- bindKeys(Control.DOWN, [S, J, FlxKey.DOWN]);
- bindKeys(Control.LEFT, [A, H, FlxKey.LEFT]);
- bindKeys(Control.RIGHT, [D, L, 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, K]);
- bindKeys(Control.DOWN, [S, J]);
- bindKeys(Control.LEFT, [A, H]);
- bindKeys(Control.RIGHT, [D, L]);
- bindKeys(Control.ACCEPT, [Z]);
- bindKeys(Control.BACK, [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*/
+ keyboardScheme = scheme;
+
+ #if (haxe >= "4.0.0")
+ switch (scheme)
+ {
+ case Solo:
+ inline bindKeys(Control.UP, [FlxKey.fromString("W"), FlxKey.UP]);
+ inline bindKeys(Control.DOWN, [FlxKey.fromString("S"), FlxKey.DOWN]);
+ inline bindKeys(Control.LEFT, [FlxKey.fromString("A"), FlxKey.LEFT]);
+ inline bindKeys(Control.RIGHT, [FlxKey.fromString("D"), FlxKey.RIGHT]);
+ inline bindKeys(Control.ACCEPT, [Z, SPACE, ENTER]);
+ inline bindKeys(Control.BACK, [BACKSPACE, ESCAPE]);
+ inline bindKeys(Control.PAUSE, [P, ENTER, ESCAPE]);
+ inline bindKeys(Control.RESET, [FlxKey.fromString("R")]);
+ case Duo(true):
+ inline bindKeys(Control.UP, [W, K]);
+ inline bindKeys(Control.DOWN, [S, J]);
+ inline bindKeys(Control.LEFT, [A, H]);
+ inline bindKeys(Control.RIGHT, [D, L]);
+ inline bindKeys(Control.ACCEPT, [Z]);
+ inline bindKeys(Control.BACK, [X]);
+ inline bindKeys(Control.PAUSE, [ONE]);
+ inline bindKeys(Control.RESET, [R]);
+ case Duo(false):
+ inline bindKeys(Control.UP, [FlxKey.UP]);
+ inline bindKeys(Control.DOWN, [FlxKey.DOWN]);
+ inline bindKeys(Control.LEFT, [FlxKey.LEFT]);
+ inline bindKeys(Control.RIGHT, [FlxKey.RIGHT]);
+ inline bindKeys(Control.ACCEPT, [O]);
+ inline bindKeys(Control.BACK, [P]);
+ inline bindKeys(Control.PAUSE, [ENTER]);
+ inline bindKeys(Control.RESET, [BACKSPACE]);
+ case None: // nothing
+ case Custom: // nothing
+ }
+ #else
+ switch (scheme)
+ {
+ case Solo:
+ bindKeys(Control.UP, [W, K, FlxKey.UP]);
+ bindKeys(Control.DOWN, [S, J, FlxKey.DOWN]);
+ bindKeys(Control.LEFT, [A, H, FlxKey.LEFT]);
+ bindKeys(Control.RIGHT, [D, L, 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, K]);
+ bindKeys(Control.DOWN, [S, J]);
+ bindKeys(Control.LEFT, [A, H]);
+ bindKeys(Control.RIGHT, [D, L]);
+ bindKeys(Control.ACCEPT, [Z]);
+ bindKeys(Control.BACK, [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 */
}
public function loadKeyBinds()
{
-
- //trace(FlxKey.fromString(FlxG.save.data.upBind));
+ // trace(FlxKey.fromString(FlxG.save.data.upBind));
removeKeyboard();
if (gamepadsAdded.length != 0)
removeGamepad();
KeyBinds.keyCheck();
- var buttons = new Map>();
+ var buttons = new Map>();
- buttons.set(Control.UP,[FlxGamepadInputID.fromString(FlxG.save.data.gpupBind)]);
- buttons.set(Control.LEFT,[FlxGamepadInputID.fromString(FlxG.save.data.gpleftBind)]);
- buttons.set(Control.DOWN,[FlxGamepadInputID.fromString(FlxG.save.data.gpdownBind)]);
- buttons.set(Control.RIGHT,[FlxGamepadInputID.fromString(FlxG.save.data.gprightBind)]);
- buttons.set(Control.ACCEPT,[FlxGamepadInputID.A]);
- buttons.set(Control.BACK,[FlxGamepadInputID.B]);
- buttons.set(Control.PAUSE,[FlxGamepadInputID.START]);
-
- addGamepad(0,buttons);
+ if (KeyBinds.gamepad)
+ {
+ buttons.set(Control.UP, [FlxGamepadInputID.fromString(FlxG.save.data.upBind)]);
+ buttons.set(Control.LEFT, [FlxGamepadInputID.fromString(FlxG.save.data.leftBind)]);
+ buttons.set(Control.DOWN, [FlxGamepadInputID.fromString(FlxG.save.data.downBind)]);
+ buttons.set(Control.RIGHT, [FlxGamepadInputID.fromString(FlxG.save.data.rightBind)]);
+ buttons.set(Control.ACCEPT, [FlxGamepadInputID.A]);
+ buttons.set(Control.BACK, [FlxGamepadInputID.B]);
+ buttons.set(Control.PAUSE, [FlxGamepadInputID.fromString(FlxG.save.data.pauseBind)]);
+
+ addGamepad(0, buttons);
+ }
inline bindKeys(Control.UP, [FlxKey.fromString(FlxG.save.data.upBind), FlxKey.UP]);
inline bindKeys(Control.DOWN, [FlxKey.fromString(FlxG.save.data.downBind), FlxKey.DOWN]);
@@ -594,8 +595,12 @@ class Controls extends FlxActionSet
inline bindKeys(Control.RIGHT, [FlxKey.fromString(FlxG.save.data.rightBind), FlxKey.RIGHT]);
inline bindKeys(Control.ACCEPT, [Z, SPACE, ENTER]);
inline bindKeys(Control.BACK, [BACKSPACE, ESCAPE]);
- inline bindKeys(Control.PAUSE, [ENTER, ESCAPE]);
- inline bindKeys(Control.RESET, [FlxKey.fromString(FlxG.save.data.killBind)]);
+ inline bindKeys(Control.PAUSE, [FlxKey.fromString(FlxG.save.data.pauseBind)]);
+ inline bindKeys(Control.RESET, [FlxKey.fromString(FlxG.save.data.resetBind)]);
+
+ FlxG.sound.muteKeys = [FlxKey.fromString(FlxG.save.data.muteBind)];
+ FlxG.sound.volumeDownKeys = [FlxKey.fromString(FlxG.save.data.volDownBind)];
+ FlxG.sound.volumeUpKeys = [FlxKey.fromString(FlxG.save.data.volUpBind)];
}
function removeKeyboard()
@@ -618,7 +623,7 @@ class Controls extends FlxActionSet
gamepadsAdded.remove(id);
gamepadsAdded.push(id);
-
+
#if (haxe >= "4.0.0")
for (control => buttons in buttonMap)
inline bindButtons(control, id, buttons);
@@ -672,7 +677,7 @@ class Controls extends FlxActionSet
]);
#else
addGamepadLiteral(id, [
- //Swap A and B for switch
+ // Swap A and B for switch
Control.ACCEPT => [B],
Control.BACK => [A],
Control.UP => [DPAD_UP, LEFT_STICK_DIGITAL_UP, RIGHT_STICK_DIGITAL_UP],
@@ -680,7 +685,7 @@ class Controls extends FlxActionSet
Control.LEFT => [DPAD_LEFT, LEFT_STICK_DIGITAL_LEFT, RIGHT_STICK_DIGITAL_LEFT],
Control.RIGHT => [DPAD_RIGHT, LEFT_STICK_DIGITAL_RIGHT, RIGHT_STICK_DIGITAL_RIGHT],
Control.PAUSE => [START],
- //Swap Y and X for switch
+ // Swap Y and X for switch
Control.RESET => [Y],
Control.CHEAT => [X]
]);
diff --git a/source/ConvertScore.hx b/source/ConvertScore.hx
index cd88854a0d..3894307559 100644
--- a/source/ConvertScore.hx
+++ b/source/ConvertScore.hx
@@ -1,9 +1,7 @@
class ConvertScore
{
- public static function convertScore(noteDiff:Float):Int
- {
-
- return 0;
- }
-
-}
\ No newline at end of file
+ public static function convertScore(noteDiff:Float):Int
+ {
+ return 0;
+ }
+}
diff --git a/source/CoolUtil.hx b/source/CoolUtil.hx
index 24dc749c0f..b2366b2e2e 100644
--- a/source/CoolUtil.hx
+++ b/source/CoolUtil.hx
@@ -1,6 +1,6 @@
package;
-import lime.utils.Assets;
+import openfl.utils.Assets as OpenFlAssets;
using StringTools;
@@ -8,6 +8,8 @@ class CoolUtil
{
public static var difficultyArray:Array = ['Easy', "Normal", "Hard"];
+ public static var daPixelZoom:Float = 6;
+
public static function difficultyFromInt(difficulty:Int):String
{
return difficultyArray[difficulty];
@@ -15,7 +17,7 @@ class CoolUtil
public static function coolTextFile(path:String):Array
{
- var daList:Array = Assets.getText(path).trim().split('\n');
+ var daList:Array = OpenFlAssets.getText(path).trim().split('\n');
for (i in 0...daList.length)
{
@@ -24,19 +26,19 @@ class CoolUtil
return daList;
}
-
+
public static function coolStringFile(path:String):Array
+ {
+ var daList:Array = path.trim().split('\n');
+
+ for (i in 0...daList.length)
{
- var daList:Array = path.trim().split('\n');
-
- for (i in 0...daList.length)
- {
- daList[i] = daList[i].trim();
- }
-
- return daList;
+ daList[i] = daList[i].trim();
}
+ return daList;
+ }
+
public static function numberArray(max:Int, ?min = 0):Array
{
var dumbArray:Array = [];
diff --git a/source/Debug.hx b/source/Debug.hx
new file mode 100644
index 0000000000..bd1142ac3d
--- /dev/null
+++ b/source/Debug.hx
@@ -0,0 +1,470 @@
+import lime.app.Application;
+import polymod.Polymod.PolymodError;
+import flixel.FlxG;
+import flixel.FlxSprite;
+import flixel.system.debug.log.LogStyle;
+import flixel.system.debug.watch.Tracker.TrackerProfile;
+import flixel.util.FlxStringUtil;
+import haxe.Log;
+import haxe.PosInfos;
+import Song.SongData;
+
+using StringTools;
+
+/**
+ * Hey you, developer!
+ * This class contains lots of utility functions for logging and debugging.
+ * The goal is to integrate development more heavily with the HaxeFlixel debugger.
+ * Use these methods to the fullest to produce mods efficiently!
+ *
+ * @see https://haxeflixel.com/documentation/debugger/
+ */
+class Debug
+{
+ static final LOG_STYLE_ERROR:LogStyle = new LogStyle('[ERROR] ', 'FF8888', 12, true, false, false, 'flixel/sounds/beep', true);
+ static final LOG_STYLE_WARN:LogStyle = new LogStyle('[WARN ] ', 'D9F85C', 12, true, false, false, 'flixel/sounds/beep', true);
+ static final LOG_STYLE_INFO:LogStyle = new LogStyle('[INFO ] ', '5CF878', 12, false);
+ static final LOG_STYLE_TRACE:LogStyle = new LogStyle('[TRACE] ', '5CF878', 12, false);
+
+ static var logFileWriter:DebugLogWriter = null;
+
+ /**
+ * Log an error message to the game's console.
+ * Plays a beep to the user and forces the console open if this is a debug build.
+ * @param input The message to display.
+ * @param pos This magic type is auto-populated, and includes the line number and class it was called from.
+ */
+ public static inline function logError(input:Dynamic, ?pos:haxe.PosInfos):Void
+ {
+ if (input == null)
+ return;
+ var output = formatOutput(input, pos);
+ writeToFlxGLog(output, LOG_STYLE_ERROR);
+ writeToLogFile(output, 'ERROR');
+ }
+
+ /**
+ * Log an warning message to the game's console.
+ * Plays a beep to the user and forces the console open if this is a debug build.
+ * @param input The message to display.
+ * @param pos This magic type is auto-populated, and includes the line number and class it was called from.
+ */
+ public static inline function logWarn(input:Dynamic, ?pos:haxe.PosInfos):Void
+ {
+ if (input == null)
+ return;
+ var output = formatOutput(input, pos);
+ writeToFlxGLog(output, LOG_STYLE_WARN);
+ writeToLogFile(output, 'WARN');
+ }
+
+ /**
+ * Log an info message to the game's console. Only visible in debug builds.
+ * @param input The message to display.
+ * @param pos This magic type is auto-populated, and includes the line number and class it was called from.
+ */
+ public static inline function logInfo(input:Dynamic, ?pos:haxe.PosInfos):Void
+ {
+ if (input == null)
+ return;
+ var output = formatOutput(input, pos);
+ writeToFlxGLog(output, LOG_STYLE_INFO);
+ writeToLogFile(output, 'INFO');
+ }
+
+ /**
+ * Log a debug message to the game's console. Only visible in debug builds.
+ * NOTE: We redirect all Haxe `trace()` calls to this function.
+ * @param input The message to display.
+ * @param pos This magic type is auto-populated, and includes the line number and class it was called from.
+ */
+ public static function logTrace(input:Dynamic, ?pos:haxe.PosInfos):Void
+ {
+ if (input == null)
+ return;
+ var output = formatOutput(input, pos);
+ writeToFlxGLog(output, LOG_STYLE_TRACE);
+ writeToLogFile(output, 'TRACE');
+ }
+
+ /**
+ * Displays a popup with the provided text.
+ * This interrupts the game, so make sure it's REALLY important.
+ * @param title The title of the popup.
+ * @param description The description of the popup.
+ */
+ public static function displayAlert(title:String, description:String):Void
+ {
+ Application.current.window.alert(description, title);
+ }
+
+ /**
+ * Display the value of a particular field of a given object
+ * in the Debug watch window, labelled with the specified name.
+ * Updates continuously.
+ * @param object The object to watch.
+ * @param field The string name of a field of the above object.
+ * @param name
+ */
+ public static inline function watchVariable(object:Dynamic, field:String, name:String):Void
+ {
+ #if debug
+ if (object == null)
+ {
+ Debug.logError("Tried to watch a variable on a null object!");
+ return;
+ }
+ FlxG.watch.add(object, field, name == null ? field : name);
+ #end
+ // Else, do nothing outside of debug mode.
+ }
+
+ /**
+ * Adds the specified value to the Debug Watch window under the current name.
+ * A lightweight alternative to watchVariable, since it doesn't update until you call it again.
+ *
+ * @param value
+ * @param name
+ */
+ public inline static function quickWatch(value:Dynamic, name:String)
+ {
+ #if debug
+ FlxG.watch.addQuick(name == null ? "QuickWatch" : name, value);
+ #end
+ // Else, do nothing outside of debug mode.
+ }
+
+ /**
+ * The Console window already supports most hScript, meaning you can do most things you could already do in Haxe.
+ * However, you can also add custom commands using this function.
+ */
+ public inline static function addConsoleCommand(name:String, callbackFn:Dynamic)
+ {
+ FlxG.console.registerFunction(name, callbackFn);
+ }
+
+ /**
+ * Add an object with a custom alias so that it can be accessed via the console.
+ */
+ public inline static function addObject(name:String, object:Dynamic)
+ {
+ FlxG.console.registerObject(name, object);
+ }
+
+ /**
+ * Create a tracker window for an object.
+ * This will display the properties of that object in
+ * a fancy little Debug window you can minimize and drag around.
+ *
+ * @param obj The object to display.
+ */
+ public inline static function trackObject(obj:Dynamic)
+ {
+ if (obj == null)
+ {
+ Debug.logError("Tried to track a null object!");
+ return;
+ }
+ FlxG.debugger.track(obj);
+ }
+
+ /**
+ * The game runs this function immediately when it starts.
+ * Use onGameStart() if it can wait until a little later.
+ */
+ public static function onInitProgram()
+ {
+ // Initialize logging tools.
+ trace('Initializing Debug tools...');
+
+ // Override Haxe's vanilla trace() calls to use the Flixel console.
+ Log.trace = function(data:Dynamic, ?info:PosInfos)
+ {
+ var paramArray:Array = [data];
+
+ if (info != null)
+ {
+ if (info.customParams != null)
+ {
+ for (i in info.customParams)
+ {
+ paramArray.push(i);
+ }
+ }
+ }
+
+ logTrace(paramArray, info);
+ };
+
+ // Start the log file writer.
+ // We have to set it to TRACE for now.
+ logFileWriter = new DebugLogWriter("TRACE");
+
+ logInfo("Debug logging initialized. Hello, developer.");
+
+ #if debug
+ logInfo("This is a DEBUG build.");
+ #else
+ logInfo("This is a RELEASE build.");
+ #end
+ logInfo('HaxeFlixel version: ${Std.string(FlxG.VERSION)}');
+ logInfo('Friday Night Funkin\' version: ${MainMenuState.gameVer}');
+ logInfo('KadeEngine version: ${MainMenuState.kadeEngineVer}');
+ }
+
+ /**
+ * The game runs this function when it starts, but after Flixel is initialized.
+ */
+ public static function onGameStart()
+ {
+ // Add the mouse position to the debug Watch window.
+ FlxG.watch.addMouse();
+
+ defineTrackerProfiles();
+ defineConsoleCommands();
+
+ // Now we can remember the log level.
+ if (FlxG.save.data.debugLogLevel == null)
+ FlxG.save.data.debugLogLevel = "TRACE";
+
+ logFileWriter.setLogLevel(FlxG.save.data.debugLogLevel);
+ }
+
+ static function writeToFlxGLog(data:Array, logStyle:LogStyle)
+ {
+ if (FlxG != null && FlxG.game != null && FlxG.log != null)
+ {
+ FlxG.log.advanced(data, logStyle);
+ }
+ }
+
+ static function writeToLogFile(data:Array, logLevel:String = "TRACE")
+ {
+ if (logFileWriter != null && logFileWriter.isActive())
+ {
+ logFileWriter.write(data, logLevel);
+ }
+ }
+
+ /**
+ * Defines what properties will be displayed in tracker windows for all these classes.
+ */
+ static function defineTrackerProfiles()
+ {
+ // Example: This will display all the properties that FlxSprite does, along with curCharacter and barColor.
+ FlxG.debugger.addTrackerProfile(new TrackerProfile(Character, ["curCharacter", "isPlayer", "barColor"], [FlxSprite]));
+ FlxG.debugger.addTrackerProfile(new TrackerProfile(HealthIcon, ["char", "isPlayer", "isOldIcon"], [FlxSprite]));
+ FlxG.debugger.addTrackerProfile(new TrackerProfile(Note, ["x", "y", "strumTime", "mustPress", "rawNoteData", "sustainLength"], []));
+ FlxG.debugger.addTrackerProfile(new TrackerProfile(Song, [
+ "chartVersion",
+ "song",
+ "speed",
+ "player1",
+ "player2",
+ "gfVersion",
+ "noteStyle",
+ "stage"
+ ], []));
+ }
+
+ /**
+ * Defines some commands you can run in the console for easy use of important debugging functions.
+ * Feel free to add your own!
+ */
+ inline static function defineConsoleCommands()
+ {
+ // Example: This will display Boyfriend's sprite properties in a debug window.
+ addConsoleCommand("trackBoyfriend", function()
+ {
+ Debug.logInfo("CONSOLE: Begin tracking Boyfriend...");
+ trackObject(PlayState.boyfriend);
+ });
+ addConsoleCommand("trackGirlfriend", function()
+ {
+ Debug.logInfo("CONSOLE: Begin tracking Girlfriend...");
+ trackObject(PlayState.gf);
+ });
+ addConsoleCommand("trackDad", function()
+ {
+ Debug.logInfo("CONSOLE: Begin tracking Dad...");
+ trackObject(PlayState.dad);
+ });
+
+ addConsoleCommand("setLogLevel", function(logLevel:String)
+ {
+ if (!DebugLogWriter.LOG_LEVELS.contains(logLevel))
+ {
+ Debug.logWarn('CONSOLE: Invalid log level $logLevel!');
+ Debug.logWarn(' Expected: ${DebugLogWriter.LOG_LEVELS.join(', ')}');
+ }
+ else
+ {
+ Debug.logInfo('CONSOLE: Setting log level to $logLevel...');
+ logFileWriter.setLogLevel(logLevel);
+ }
+ });
+
+ // Console commands let you do WHATEVER you want.
+ addConsoleCommand("playSong", function(songName:String, ?difficulty:Int = 1)
+ {
+ Debug.logInfo('CONSOLE: Opening song $songName ($difficulty) in Free Play...');
+ FreeplayState.loadSongInFreePlay(songName, difficulty, false);
+ });
+ addConsoleCommand("chartSong", function(songName:String, ?difficulty:Int = 1)
+ {
+ Debug.logInfo('CONSOLE: Opening song $songName ($difficulty) in Chart Editor...');
+ FreeplayState.loadSongInFreePlay(songName, difficulty, true, true);
+ });
+ }
+
+ static function formatOutput(input:Dynamic, pos:haxe.PosInfos):Array
+ {
+ // This code is junk but I kept getting Null Function References.
+ var inArray:Array = null;
+ if (input == null)
+ {
+ inArray = [''];
+ }
+ else if (!Std.is(input, Array))
+ {
+ inArray = [input];
+ }
+ else
+ {
+ inArray = input;
+ }
+
+ if (pos == null)
+ return inArray;
+
+ // Format the position ourselves.
+ var output:Array = ['(${pos.className}/${pos.methodName}#${pos.lineNumber}): '];
+
+ return output.concat(inArray);
+ }
+}
+
+class DebugLogWriter
+{
+ static final LOG_FOLDER = "logs";
+ public static final LOG_LEVELS = ['ERROR', 'WARN', 'INFO', 'TRACE'];
+
+ /**
+ * Set this to the current timestamp that the game started.
+ */
+ var startTime:Float = 0;
+
+ var logLevel:Int;
+
+ var active = false;
+ #if FEATURE_FILESYSTEM
+ var file:sys.io.FileOutput;
+ #end
+
+ public function new(logLevelParam:String)
+ {
+ logLevel = LOG_LEVELS.indexOf(logLevelParam);
+
+ #if FEATURE_FILESYSTEM
+ printDebug("Initializing log file...");
+
+ var logFilePath = '$LOG_FOLDER/${Sys.time()}.log';
+
+ // Make sure that the path exists
+ if (logFilePath.indexOf("/") != -1)
+ {
+ var lastIndex:Int = logFilePath.lastIndexOf("/");
+ var logFolderPath:String = logFilePath.substr(0, lastIndex);
+ printDebug('Creating log folder $logFolderPath');
+ sys.FileSystem.createDirectory(logFolderPath);
+ }
+ // Open the file
+ printDebug('Creating log file $logFilePath');
+ file = sys.io.File.write(logFilePath, false);
+ active = true;
+ #else
+ printDebug("Won't create log file; no file system access.");
+ active = false;
+ #end
+
+ // Get the absolute time in seconds. This lets us show relative time in log, which is more readable.
+ startTime = getTime(true);
+ }
+
+ public function isActive()
+ {
+ return active;
+ }
+
+ /**
+ * Get the time in seconds.
+ * @param abs Whether the timestamp is absolute or relative to the start time.
+ */
+ public inline function getTime(abs:Bool = false):Float
+ {
+ #if sys
+ // Use this one on CPP and Neko since it's more accurate.
+ return abs ? Sys.time() : (Sys.time() - startTime);
+ #else
+ // This one is more accurate on non-CPP platforms.
+ return abs ? Date.now().getTime() : (Date.now().getTime() - startTime);
+ #end
+ }
+
+ function shouldLog(input:String):Bool
+ {
+ var levelIndex = LOG_LEVELS.indexOf(input);
+ // Could not find this log level.
+ if (levelIndex == -1)
+ return false;
+ return levelIndex <= logLevel;
+ }
+
+ public function setLogLevel(input:String):Void
+ {
+ var levelIndex = LOG_LEVELS.indexOf(input);
+ // Could not find this log level.
+ if (levelIndex == -1)
+ return;
+
+ logLevel = levelIndex;
+ FlxG.save.data.debugLogLevel = logLevel;
+ }
+
+ /**
+ * Output text to the log file.
+ */
+ public function write(input:Array, logLevel = 'TRACE'):Void
+ {
+ var ts = FlxStringUtil.formatTime(getTime(), true);
+ var msg = '$ts [${logLevel.rpad(' ', 5)}] ${input.join('')}';
+
+ #if FEATURE_FILESYSTEM
+ if (active && file != null)
+ {
+ if (shouldLog(logLevel))
+ {
+ file.writeString('$msg\n');
+ file.flush();
+ file.flush();
+ }
+ }
+ #end
+
+ // Output text to the debug console directly.
+ if (shouldLog(logLevel))
+ {
+ printDebug(msg);
+ }
+ }
+
+ function printDebug(msg:String)
+ {
+ #if sys
+ Sys.println(msg);
+ #else
+ // Pass null to exclude the position.
+ haxe.Log.trace(msg, null);
+ #end
+ }
+}
diff --git a/source/DialogueBox.hx b/source/DialogueBox.hx
index 64107f5235..e009b3814f 100644
--- a/source/DialogueBox.hx
+++ b/source/DialogueBox.hx
@@ -26,6 +26,7 @@ class DialogueBox extends FlxSpriteGroup
var swagDialogue:FlxTypeText;
var dropText:FlxText;
+ var skipText:FlxText;
public var finishThing:Void->Void;
@@ -41,15 +42,15 @@ class DialogueBox extends FlxSpriteGroup
{
super();
- switch (PlayState.SONG.song.toLowerCase())
+ switch (PlayState.SONG.songId.toLowerCase())
{
case 'senpai':
- sound = new FlxSound().loadEmbedded(Paths.music('Lunchbox'),true);
+ sound = new FlxSound().loadEmbedded(Paths.music('Lunchbox'), true);
sound.volume = 0;
FlxG.sound.list.add(sound);
sound.fadeIn(1, 0, 0.8);
case 'thorns':
- sound = new FlxSound().loadEmbedded(Paths.music('LunchboxScary'),true);
+ sound = new FlxSound().loadEmbedded(Paths.music('LunchboxScary'), true);
sound.volume = 0;
FlxG.sound.list.add(sound);
sound.fadeIn(1, 0, 0.8);
@@ -68,9 +69,9 @@ class DialogueBox extends FlxSpriteGroup
}, 5);
box = new FlxSprite(-20, 45);
-
+
var hasDialog = false;
- switch (PlayState.SONG.song.toLowerCase())
+ switch (PlayState.SONG.songId.toLowerCase())
{
case 'senpai':
hasDialog = true;
@@ -91,20 +92,20 @@ class DialogueBox extends FlxSpriteGroup
box.animation.addByPrefix('normalOpen', 'Spirit Textbox spawn', 24, false);
box.animation.addByIndices('normal', 'Spirit Textbox spawn', [11], "", 24);
- var face:FlxSprite = new FlxSprite(320, 170).loadGraphic(Paths.image('weeb/spiritFaceForward'));
+ var face:FlxSprite = new FlxSprite(320, 170).loadGraphic(Paths.loadImage('weeb/spiritFaceForward'));
face.setGraphicSize(Std.int(face.width * 6));
add(face);
}
this.dialogueList = dialogueList;
-
+
if (!hasDialog)
return;
-
+
portraitLeft = new FlxSprite(-20, 40);
portraitLeft.frames = Paths.getSparrowAtlas('weeb/senpaiPortrait');
portraitLeft.animation.addByPrefix('enter', 'Senpai Portrait Enter', 24, false);
- portraitLeft.setGraphicSize(Std.int(portraitLeft.width * PlayState.daPixelZoom * 0.9));
+ portraitLeft.setGraphicSize(Std.int(portraitLeft.width * CoolUtil.daPixelZoom * 0.9));
portraitLeft.updateHitbox();
portraitLeft.scrollFactor.set();
add(portraitLeft);
@@ -113,24 +114,27 @@ class DialogueBox extends FlxSpriteGroup
portraitRight = new FlxSprite(0, 40);
portraitRight.frames = Paths.getSparrowAtlas('weeb/bfPortrait');
portraitRight.animation.addByPrefix('enter', 'Boyfriend portrait enter', 24, false);
- portraitRight.setGraphicSize(Std.int(portraitRight.width * PlayState.daPixelZoom * 0.9));
+ portraitRight.setGraphicSize(Std.int(portraitRight.width * CoolUtil.daPixelZoom * 0.9));
portraitRight.updateHitbox();
portraitRight.scrollFactor.set();
add(portraitRight);
portraitRight.visible = false;
-
+
box.animation.play('normalOpen');
- box.setGraphicSize(Std.int(box.width * PlayState.daPixelZoom * 0.9));
+ box.setGraphicSize(Std.int(box.width * CoolUtil.daPixelZoom * 0.9));
box.updateHitbox();
add(box);
box.screenCenter(X);
portraitLeft.screenCenter(X);
-
- handSelect = new FlxSprite(FlxG.width * 0.9, FlxG.height * 0.9).loadGraphic(Paths.image('weeb/pixelUI/hand_textbox'));
+ skipText = new FlxText(10, 10, Std.int(FlxG.width * 0.6), "", 16);
+ skipText.font = 'Pixel Arial 11 Bold';
+ skipText.color = 0x000000;
+ skipText.text = 'press back to skip';
+ add(skipText);
+ handSelect = new FlxSprite(FlxG.width * 0.9, FlxG.height * 0.9).loadGraphic(Paths.loadImage('weeb/pixelUI/hand_textbox'));
add(handSelect);
-
if (!talkingRight)
{
// box.flipX = true;
@@ -158,9 +162,9 @@ class DialogueBox extends FlxSpriteGroup
override function update(elapsed:Float)
{
// HARD CODING CUZ IM STUPDI
- if (PlayState.SONG.song.toLowerCase() == 'roses')
+ if (PlayState.SONG.songId.toLowerCase() == 'roses')
portraitLeft.visible = false;
- if (PlayState.SONG.song.toLowerCase() == 'thorns')
+ if (PlayState.SONG.songId.toLowerCase() == 'thorns')
{
portraitLeft.visible = false;
swagDialogue.color = FlxColor.WHITE;
@@ -183,11 +187,39 @@ class DialogueBox extends FlxSpriteGroup
startDialogue();
dialogueStarted = true;
}
+ if (PlayerSettings.player1.controls.BACK && isEnding != true)
+ {
+ remove(dialogue);
+ isEnding = true;
+ switch (PlayState.SONG.songId.toLowerCase())
+ {
+ case "senpai" | "thorns":
+ sound.fadeOut(2.2, 0);
+ case "roses":
+ trace("roses");
+ default:
+ trace("other song");
+ }
+ new FlxTimer().start(0.2, function(tmr:FlxTimer)
+ {
+ box.alpha -= 1 / 5;
+ bgFade.alpha -= 1 / 5 * 0.7;
+ portraitLeft.visible = false;
+ portraitRight.visible = false;
+ swagDialogue.alpha -= 1 / 5;
+ dropText.alpha = swagDialogue.alpha;
+ }, 5);
+ new FlxTimer().start(1.2, function(tmr:FlxTimer)
+ {
+ finishThing();
+ kill();
+ });
+ }
if (PlayerSettings.player1.controls.ACCEPT && dialogueStarted == true)
{
remove(dialogue);
-
+
FlxG.sound.play(Paths.sound('clickText'), 0.8);
if (dialogueList[1] == null && dialogueList[0] != null)
@@ -196,7 +228,7 @@ class DialogueBox extends FlxSpriteGroup
{
isEnding = true;
- if (PlayState.SONG.song.toLowerCase() == 'senpai' || PlayState.SONG.song.toLowerCase() == 'thorns')
+ if (PlayState.SONG.songId.toLowerCase() == 'senpai' || PlayState.SONG.songId.toLowerCase() == 'thorns')
sound.fadeOut(2.2, 0);
new FlxTimer().start(0.2, function(tmr:FlxTimer)
{
@@ -221,7 +253,7 @@ class DialogueBox extends FlxSpriteGroup
startDialogue();
}
}
-
+
super.update(elapsed);
}
diff --git a/source/DiffCalc.hx b/source/DiffCalc.hx
index 91bf3298d0..ce936c2bd4 100644
--- a/source/DiffCalc.hx
+++ b/source/DiffCalc.hx
@@ -1,373 +1,369 @@
import openfl.system.System;
import flixel.math.FlxMath;
-import Song.SwagSong;
+import Song.SongData;
class SmallNote // basically Note.hx but small as fuck
{
- public var strumTime:Float;
- public var noteData:Int;
-
- public function new(strum,data)
- {
- strumTime = strum;
- noteData = data;
- }
+ public var strumTime:Float;
+ public var noteData:Int;
+
+ public function new(strum, data)
+ {
+ strumTime = strum;
+ noteData = data;
+ }
}
class DiffCalc
{
- public static var scale = 3 * 1.8;
+ public static var scale = 3 * 1.8;
- public static var lastDiffHandOne:Array = [];
- public static var lastDiffHandTwo:Array = [];
+ public static var lastDiffHandOne:Array = [];
+ public static var lastDiffHandTwo:Array = [];
- public static function CalculateDiff(song:SwagSong, ?accuracy:Float = .93)
- {
- // cleaned notes
- var cleanedNotes:Array = [];
+ public static function CalculateDiff(song:SongData, ?accuracy:Float = .93)
+ {
+ // cleaned notes
+ var cleanedNotes:Array = [];
- if (song.notes == null)
- return 0.0;
+ if (song.notes == null)
+ return 0.0;
- if (song.notes.length == 0)
- return 0.0;
+ if (song.notes.length == 0)
+ return 0.0;
- // find all of the notes
- for(i in song.notes) // sections
- {
- for (ii in i.sectionNotes) // notes
- {
- var gottaHitNote:Bool = i.mustHitSection;
+ // find all of the notes
+ for (i in song.notes) // sections
+ {
+ for (ii in i.sectionNotes) // notes
+ {
+ var gottaHitNote:Bool = i.mustHitSection;
if (ii[1] >= 3 && gottaHitNote)
- cleanedNotes.push(new SmallNote(ii[0] / FreeplayState.rate,Math.floor(Math.abs(ii[1]))));
- if (ii[1] <= 4 && !gottaHitNote)
- cleanedNotes.push(new SmallNote(ii[0] / FreeplayState.rate,Math.floor(Math.abs(ii[1]))));
- }
- }
-
- trace('calcuilafjwaf ' + cleanedNotes.length);
-
- var handOne:Array = [];
- var handTwo:Array = [];
-
- cleanedNotes.sort((a, b) -> Std.int(a.strumTime - b.strumTime));
-
-
-
- var firstNoteTime = cleanedNotes[0].strumTime;
-
- // normalize the notes
-
- for(i in cleanedNotes)
- {
- i.strumTime = (i.strumTime - firstNoteTime) * 2;
- }
-
- for (i in cleanedNotes)
- {
- switch(i.noteData)
- {
- case 0:
- handOne.push(i);
- case 1:
- handOne.push(i);
- case 2:
- handTwo.push(i);
- case 3:
- handTwo.push(i);
- }
- }
-
- // collect all of the notes in each col
-
- var leftHandCol:Array = []; // d 0
- var leftMHandCol:Array = []; // f 1
- var rightMHandCol:Array = []; // j 2
- var rightHandCol:Array = []; // k 3
-
- for(i in 0...handOne.length - 1)
- {
- if (handOne[i].noteData == 0)
- leftHandCol.push(handOne[i].strumTime);
- else
- leftMHandCol.push(handOne[i].strumTime);
- }
- for(i in 0...handTwo.length - 1)
- {
- if (handTwo[i].noteData == 3)
- rightHandCol.push(handTwo[i].strumTime);
- else
- rightMHandCol.push(handTwo[i].strumTime);
- }
-
-
- // length in segments of the song
- var length = ((cleanedNotes[cleanedNotes.length - 1].strumTime / 1000) / 0.5);
-
- // hackey way of creating a array with a length
- var segmentsOne = new haxe.ds.Vector(Math.floor(length));
-
- var segmentsTwo = new haxe.ds.Vector(Math.floor(length));
-
- // set em all to array's (so no null's)
-
- for(i in 0...segmentsOne.length)
- segmentsOne[i] = new Array();
- for(i in 0...segmentsTwo.length)
- segmentsTwo[i] = new Array();
-
- // algo loop
- for(i in handOne)
- {
- var index = Std.int((((i.strumTime * 2) / 1000)));
- if (index + 1 > length)
- continue;
- segmentsOne[index].push(i);
- }
-
- for(i in handTwo)
- {
- var index = Std.int((((i.strumTime * 2) / 1000)));
- if (index + 1 > length)
- continue;
- segmentsTwo[index].push(i);
- }
-
- // Remove 0 intervals
- /*for(i in 0...segmentsOne.length)
- {
- if (segmentsOne[i].length == 0)
- segmentsOne[i] = null;
- }
-
- for(i in 0...segmentsTwo.length)
- {
- if (segmentsTwo[i].length == 0)
- segmentsTwo[i] = null;
- }*/
-
- // get nps for both hands
-
- var hand_npsOne:Array = new Array();
- var hand_npsTwo:Array = new Array();
-
- for(i in segmentsOne)
- {
- if (i == null)
- continue;
- hand_npsOne.push(i.length * scale * 1.6);
- }
- for(i in segmentsTwo)
- {
- if (i == null)
- continue;
- hand_npsTwo.push(i.length * scale * 1.6);
- }
-
- // get the diff vector's for all of the hands
-
- var hand_diffOne:Array = new Array();
- var hand_diffTwo:Array = new Array();
-
- for(i in 0...segmentsOne.length)
- {
- var ve = segmentsOne[i];
- if (ve == null)
- continue;
- var fuckYouOne:Array = [];
- var fuckYouTwo:Array = [];
- for(note in ve)
- {
- switch(note.noteData)
- {
- case 0: // fingie 1
- fuckYouOne.push(note);
- case 1: // fingie 2
- fuckYouTwo.push(note);
- }
- }
-
- var one = fingieCalc(fuckYouOne,leftHandCol);
- var two = fingieCalc(fuckYouTwo,leftMHandCol);
-
-
- var bigFuck = ((((one > two ? one : two) * 8) + (hand_npsOne[i] / scale) * 5) / 13) * scale;
-
- //trace(bigFuck + " - hand one [" + i + "]");
-
-
- hand_diffOne.push(bigFuck);
- }
-
- for(i in 0...segmentsTwo.length)
- {
- var ve = segmentsTwo[i];
- if (ve == null)
- continue;
- var fuckYouOne:Array = [];
- var fuckYouTwo:Array = [];
- for(note in ve)
- {
- switch(note.noteData)
- {
- case 2: // fingie 1
- fuckYouOne.push(note);
- case 3: // fingie 2
- fuckYouTwo.push(note);
- }
- }
-
- var one = fingieCalc(fuckYouOne,rightMHandCol);
- var two = fingieCalc(fuckYouTwo,rightHandCol);
-
- var bigFuck = ((((one > two ? one : two) * 8) + (hand_npsTwo[i] / scale) * 5) / 13) * scale;
-
- hand_diffTwo.push(bigFuck);
-
- // trace(bigFuck + " - hand two [" + i + "]");
- }
-
- for (i in 0...4)
- {
- smoothBrain(hand_npsOne,0);
- smoothBrain(hand_npsTwo,0);
-
- smoothBrainTwo(hand_diffOne);
- smoothBrainTwo(hand_diffTwo);
- }
-
- //trace(hand_diffOne);
- //trace(hand_diffTwo);
-
- //trace(hand_npsOne);
- //trace(hand_npsTwo);
-
- var point_npsOne:Array = new Array();
- var point_npsTwo:Array = new Array();
-
- for(i in segmentsOne)
- {
- if (i == null)
- continue;
- point_npsOne.push(i.length);
- }
- for(i in segmentsTwo)
- {
- if (i == null)
- continue;
- point_npsTwo.push(i.length);
- }
-
- var maxPoints:Float = 0;
-
- for(i in point_npsOne)
- maxPoints += i;
- for(i in point_npsTwo)
- maxPoints += i;
-
- if (accuracy > .965)
- accuracy = .965;
-
- lastDiffHandOne = hand_diffOne;
- lastDiffHandTwo = hand_diffTwo;
-
-
- return HelperFunctions.truncateFloat(chisel(accuracy,hand_diffOne,hand_diffTwo,point_npsOne,point_npsTwo,maxPoints),2);
- }
-
- public static function chisel(scoreGoal:Float,diffOne:Array,diffTwo:Array,pointsOne:Array,pointsTwo:Array,maxPoints:Float)
- {
- var lowerBound:Float = 0;
- var upperBound:Float = 100;
-
- while(upperBound - lowerBound > 0.01)
- {
- var average:Float = (upperBound + lowerBound) / 2;
- var amtOfPoints:Float = calcuate(average,diffOne,pointsOne) + calcuate(average,diffTwo,pointsTwo);
- if (amtOfPoints / maxPoints < scoreGoal)
- lowerBound = average;
- else
- upperBound = average;
-
- }
- return upperBound;
- }
-
- public static function calcuate(midPoint:Float,diff:Array,points:Array)
- {
- var output:Float = 0;
-
- for (i in 0...diff.length)
- {
- var res = diff[i];
- if (midPoint > res)
- output += points[i];
- else
- output += points[i] * Math.pow(midPoint / res,1.2);
- }
- return output;
- }
-
- public static function findStupid(strumTime:Float, array:Array)
- {
- for(i in 0...array.length)
- if (array[i] == strumTime)
- return i;
- return -1;
- }
-
- public static function fingieCalc(floats:Array, columArray:Array):Float
- {
- var sum:Float = 0;
- if (floats.length == 0)
- return 0;
- var startIndex = findStupid(floats[0].strumTime,columArray);
- if (startIndex == -1)
- return 0;
- for(i in floats)
- {
- sum += columArray[startIndex + 1] - columArray[startIndex];
- startIndex++;
- }
-
- if (sum == 0)
- return 0;
-
- return (1375 * (floats.length)) / sum;
- }
-
- // based arrayer
- // basicily smmoth the shit
- public static function smoothBrain(npsVector:Array, weirdchamp:Float)
- {
- var floatOne = weirdchamp;
- var floatTwo = weirdchamp;
-
- for (i in 0...npsVector.length)
- {
- var result = npsVector[i];
-
- var chunker = floatOne;
- floatOne = floatTwo;
- floatTwo = result;
-
- npsVector[i] = (chunker + floatOne + floatTwo) / 3;
- }
- }
-
- // Smooth the shit but less
- public static function smoothBrainTwo(diffVector:Array)
- {
- var floatZero:Float = 0;
-
- for(i in 0...diffVector.length)
- {
- var result = diffVector[i];
-
- var fuck = floatZero;
- floatZero = result;
- diffVector[i] = (fuck + floatZero) / 2;
- }
- }
+ cleanedNotes.push(new SmallNote(ii[0] / FreeplayState.rate, Math.floor(Math.abs(ii[1]))));
+ if (ii[1] <= 4 && !gottaHitNote)
+ cleanedNotes.push(new SmallNote(ii[0] / FreeplayState.rate, Math.floor(Math.abs(ii[1]))));
+ }
+ }
+
+ trace('calcuilafjwaf ' + cleanedNotes.length);
+
+ var handOne:Array = [];
+ var handTwo:Array = [];
+
+ cleanedNotes.sort((a, b) -> Std.int(a.strumTime - b.strumTime));
+
+ if (cleanedNotes.length == 0)
+ return 90000000000000000;
+
+ var firstNoteTime = cleanedNotes[0].strumTime;
+
+ // normalize the notes
+
+ for (i in cleanedNotes)
+ {
+ i.strumTime = (i.strumTime - firstNoteTime) * 2;
+ }
+
+ for (i in cleanedNotes)
+ {
+ switch (i.noteData)
+ {
+ case 0:
+ handOne.push(i);
+ case 1:
+ handOne.push(i);
+ case 2:
+ handTwo.push(i);
+ case 3:
+ handTwo.push(i);
+ }
+ }
+
+ // collect all of the notes in each col
+
+ var leftHandCol:Array = []; // d 0
+ var leftMHandCol:Array = []; // f 1
+ var rightMHandCol:Array = []; // j 2
+ var rightHandCol:Array = []; // k 3
+
+ for (i in 0...handOne.length - 1)
+ {
+ if (handOne[i].noteData == 0)
+ leftHandCol.push(handOne[i].strumTime);
+ else
+ leftMHandCol.push(handOne[i].strumTime);
+ }
+ for (i in 0...handTwo.length - 1)
+ {
+ if (handTwo[i].noteData == 3)
+ rightHandCol.push(handTwo[i].strumTime);
+ else
+ rightMHandCol.push(handTwo[i].strumTime);
+ }
+
+ // length in segments of the song
+ var length = ((cleanedNotes[cleanedNotes.length - 1].strumTime / 1000) / 0.5);
+
+ // hackey way of creating a array with a length
+ var segmentsOne = new haxe.ds.Vector(Math.floor(length));
+
+ var segmentsTwo = new haxe.ds.Vector(Math.floor(length));
+
+ // set em all to array's (so no null's)
+
+ for (i in 0...segmentsOne.length)
+ segmentsOne[i] = new Array();
+ for (i in 0...segmentsTwo.length)
+ segmentsTwo[i] = new Array();
+
+ // algo loop
+ for (i in handOne)
+ {
+ var index = Std.int((((i.strumTime * 2) / 1000)));
+ if (index + 1 > length)
+ continue;
+ segmentsOne[index].push(i);
+ }
+
+ for (i in handTwo)
+ {
+ var index = Std.int((((i.strumTime * 2) / 1000)));
+ if (index + 1 > length)
+ continue;
+ segmentsTwo[index].push(i);
+ }
+
+ // Remove 0 intervals
+ /*for(i in 0...segmentsOne.length)
+ {
+ if (segmentsOne[i].length == 0)
+ segmentsOne[i] = null;
+ }
+
+ for(i in 0...segmentsTwo.length)
+ {
+ if (segmentsTwo[i].length == 0)
+ segmentsTwo[i] = null;
+ }*/
+
+ // get nps for both hands
+
+ var hand_npsOne:Array = new Array();
+ var hand_npsTwo:Array = new Array();
+
+ for (i in segmentsOne)
+ {
+ if (i == null)
+ continue;
+ hand_npsOne.push(i.length * scale * 1.6);
+ }
+ for (i in segmentsTwo)
+ {
+ if (i == null)
+ continue;
+ hand_npsTwo.push(i.length * scale * 1.6);
+ }
+
+ // get the diff vector's for all of the hands
+
+ var hand_diffOne:Array = new Array();
+ var hand_diffTwo:Array = new Array();
+
+ for (i in 0...segmentsOne.length)
+ {
+ var ve = segmentsOne[i];
+ if (ve == null)
+ continue;
+ var fuckYouOne:Array = [];
+ var fuckYouTwo:Array = [];
+ for (note in ve)
+ {
+ switch (note.noteData)
+ {
+ case 0: // fingie 1
+ fuckYouOne.push(note);
+ case 1: // fingie 2
+ fuckYouTwo.push(note);
+ }
+ }
+
+ var one = fingieCalc(fuckYouOne, leftHandCol);
+ var two = fingieCalc(fuckYouTwo, leftMHandCol);
+
+ var bigFuck = ((((one > two ? one : two) * 8) + (hand_npsOne[i] / scale) * 5) / 13) * scale;
+
+ // trace(bigFuck + " - hand one [" + i + "]");
+
+ hand_diffOne.push(bigFuck);
+ }
+
+ for (i in 0...segmentsTwo.length)
+ {
+ var ve = segmentsTwo[i];
+ if (ve == null)
+ continue;
+ var fuckYouOne:Array = [];
+ var fuckYouTwo:Array = [];
+ for (note in ve)
+ {
+ switch (note.noteData)
+ {
+ case 2: // fingie 1
+ fuckYouOne.push(note);
+ case 3: // fingie 2
+ fuckYouTwo.push(note);
+ }
+ }
+
+ var one = fingieCalc(fuckYouOne, rightMHandCol);
+ var two = fingieCalc(fuckYouTwo, rightHandCol);
+
+ var bigFuck = ((((one > two ? one : two) * 8) + (hand_npsTwo[i] / scale) * 5) / 13) * scale;
+
+ hand_diffTwo.push(bigFuck);
+
+ // trace(bigFuck + " - hand two [" + i + "]");
+ }
+
+ for (i in 0...4)
+ {
+ smoothBrain(hand_npsOne, 0);
+ smoothBrain(hand_npsTwo, 0);
+
+ smoothBrainTwo(hand_diffOne);
+ smoothBrainTwo(hand_diffTwo);
+ }
+
+ // trace(hand_diffOne);
+ // trace(hand_diffTwo);
+
+ // trace(hand_npsOne);
+ // trace(hand_npsTwo);
+
+ var point_npsOne:Array = new Array();
+ var point_npsTwo:Array = new Array();
+
+ for (i in segmentsOne)
+ {
+ if (i == null)
+ continue;
+ point_npsOne.push(i.length);
+ }
+ for (i in segmentsTwo)
+ {
+ if (i == null)
+ continue;
+ point_npsTwo.push(i.length);
+ }
+
+ var maxPoints:Float = 0;
+
+ for (i in point_npsOne)
+ maxPoints += i;
+ for (i in point_npsTwo)
+ maxPoints += i;
+
+ if (accuracy > .965)
+ accuracy = .965;
+
+ lastDiffHandOne = hand_diffOne;
+ lastDiffHandTwo = hand_diffTwo;
+
+ return HelperFunctions.truncateFloat(chisel(accuracy, hand_diffOne, hand_diffTwo, point_npsOne, point_npsTwo, maxPoints), 2);
+ }
+
+ public static function chisel(scoreGoal:Float, diffOne:Array, diffTwo:Array, pointsOne:Array, pointsTwo:Array, maxPoints:Float)
+ {
+ var lowerBound:Float = 0;
+ var upperBound:Float = 100;
+
+ while (upperBound - lowerBound > 0.01)
+ {
+ var average:Float = (upperBound + lowerBound) / 2;
+ var amtOfPoints:Float = calcuate(average, diffOne, pointsOne) + calcuate(average, diffTwo, pointsTwo);
+ if (amtOfPoints / maxPoints < scoreGoal)
+ lowerBound = average;
+ else
+ upperBound = average;
+ }
+ return upperBound;
+ }
+
+ public static function calcuate(midPoint:Float, diff:Array, points:Array)
+ {
+ var output:Float = 0;
+
+ for (i in 0...diff.length)
+ {
+ var res = diff[i];
+ if (midPoint > res)
+ output += points[i];
+ else
+ output += points[i] * Math.pow(midPoint / res, 1.2);
+ }
+ return output;
+ }
+
+ public static function findStupid(strumTime:Float, array:Array)
+ {
+ for (i in 0...array.length)
+ if (array[i] == strumTime)
+ return i;
+ return -1;
+ }
+
+ public static function fingieCalc(floats:Array, columArray:Array):Float
+ {
+ var sum:Float = 0;
+ if (floats.length == 0)
+ return 0;
+ var startIndex = findStupid(floats[0].strumTime, columArray);
+ if (startIndex == -1)
+ return 0;
+ for (i in floats)
+ {
+ sum += columArray[startIndex + 1] - columArray[startIndex];
+ startIndex++;
+ }
+
+ if (sum == 0)
+ return 0;
+
+ return (1375 * (floats.length)) / sum;
+ }
+
+ // based arrayer
+ // basicily smmoth the shit
+ public static function smoothBrain(npsVector:Array, weirdchamp:Float)
+ {
+ var floatOne = weirdchamp;
+ var floatTwo = weirdchamp;
+
+ for (i in 0...npsVector.length)
+ {
+ var result = npsVector[i];
+
+ var chunker = floatOne;
+ floatOne = floatTwo;
+ floatTwo = result;
+
+ npsVector[i] = (chunker + floatOne + floatTwo) / 3;
+ }
+ }
+
+ // Smooth the shit but less
+ public static function smoothBrainTwo(diffVector:Array)
+ {
+ var floatZero:Float = 0;
+
+ for (i in 0...diffVector.length)
+ {
+ var result = diffVector[i];
+
+ var fuck = floatZero;
+ floatZero = result;
+ diffVector[i] = (fuck + floatZero) / 2;
+ }
+ }
}
diff --git a/source/DiffOverview.hx b/source/DiffOverview.hx
index 2a11393c99..cc7e271f46 100644
--- a/source/DiffOverview.hx
+++ b/source/DiffOverview.hx
@@ -3,7 +3,7 @@ package;
import Conductor.BPMChangeEvent;
import flixel.FlxCamera;
import flixel.math.FlxRect;
-import Song.SwagSong;
+import Song.SongData;
import Section.SwagSection;
import flixel.system.FlxSound;
import flixel.input.gamepad.FlxGamepad;
@@ -23,9 +23,7 @@ import flixel.util.FlxSort;
import flixel.tweens.FlxEase;
import flixel.tweens.FlxTween;
import flixel.util.FlxColor;
-import io.newgrounds.NG;
import lime.app.Application;
-import lime.utils.Assets;
import flixel.math.FlxMath;
import flixel.text.FlxText;
import flixel.input.FlxKeyManager;
@@ -41,30 +39,33 @@ class DiffOverview extends FlxSubState
var giantText:FlxText;
- var SONG:SwagSong;
+ var SONG:SongData;
var strumLine:FlxSprite;
- var camHUD:FlxCamera;
+ var camHUD:FlxCamera;
- var offset:FlxText;
+ var offset:FlxText;
+
+ private var dataSuffix:Array = ['LEFT', 'DOWN', 'UP', 'RIGHT'];
+ private var dataColor:Array = ['purple', 'blue', 'green', 'red'];
public static var playerStrums:FlxTypedGroup = null;
override function create()
{
- Conductor.songPosition = 0;
- Conductor.lastSongPos = 0;
-
- camHUD = new FlxCamera();
- camHUD.bgColor.alpha = 0;
- var camGame = new FlxCamera();
+ Conductor.songPosition = 0;
+ Conductor.lastSongPos = 0;
+
+ camHUD = new FlxCamera();
+ camHUD.bgColor.alpha = 0;
+ var camGame = new FlxCamera();
- FlxG.cameras.add(camGame);
+ FlxG.cameras.add(camGame);
- FlxG.cameras.add(camHUD);
+ FlxG.cameras.add(camHUD);
FlxCamera.defaultCameras = [camGame];
- playerStrums = new FlxTypedGroup();
+ playerStrums = new FlxTypedGroup();
SONG = FreeplayState.songData.get(FreeplayState.songs[FreeplayState.curSelected].songName)[FreeplayState.curDifficulty];
@@ -72,50 +73,80 @@ class DiffOverview extends FlxSubState
strumLine.scrollFactor.set();
blackBox = new FlxSprite(0, 0).makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
- blackBox.alpha = 0;
+ blackBox.alpha = 0;
add(blackBox);
- FreeplayState.openedPreview = true;
+ FreeplayState.openedPreview = true;
handOne = DiffCalc.lastDiffHandOne;
handTwo = DiffCalc.lastDiffHandTwo;
+
+ generateStaticArrows();
+
+ add(playerStrums);
+
+ generateSong("assItch");
+
+ playerStrums.cameras = [camHUD];
+ notes.cameras = [camHUD];
+ blackBox.cameras = [camHUD];
+
+ blackBox.x = playerStrums.members[0].x;
+ blackBox.y = strumLine.y;
+
+ camHUD.zoom = 0.6;
+ camHUD.alpha = 0;
+ camHUD.height = 5000;
+ blackBox.height = camHUD.height;
+
+ camHUD.x += 280;
+
+ blackBox.y -= 100;
+ blackBox.x -= 100;
+
+ offset = new FlxText(10, FlxG.height
+ - 40, 0,
+ "Offset: "
+ + HelperFunctions.truncateFloat(FlxG.save.data.offset, 0)
+ + " (LEFT/RIGHT to decrease/increase)", 16);
+ offset.setBorderStyle(FlxTextBorderStyle.OUTLINE, FlxColor.BLACK, 4, 1);
+ offset.color = FlxColor.WHITE;
+ offset.scrollFactor.set();
+ // add(offset);
+
+ FlxTween.tween(blackBox, {alpha: 0.5}, 1, {ease: FlxEase.expoInOut});
+ FlxTween.tween(camHUD, {alpha: 1}, 0.5, {ease: FlxEase.expoInOut});
+ FlxTween.tween(offset, {alpha: 1}, 0.5, {ease: FlxEase.expoInOut});
+
+ trace('pog');
+
+ super.create();
+ }
+
+ function generateStaticArrows()
+ {
for (i in 0...4)
{
// FlxG.log.add(i);
- var babyArrow:FlxSprite = new FlxSprite(0, strumLine.y);
+ var babyArrow:StaticArrow = new StaticArrow(-10, strumLine.y);
+ babyArrow.frames = NoteskinHelpers.generateNoteskinSprite(FlxG.save.data.noteskin);
+ for (j in 0...4)
+ {
+ babyArrow.animation.addByPrefix(dataColor[j], 'arrow' + dataSuffix[j]);
+ babyArrow.animation.addByPrefix('dirCon' + j, dataSuffix[j].toLowerCase() + ' confirm', 24, false);
+ }
+
+ var lowerDir:String = dataSuffix[i].toLowerCase();
+
+ babyArrow.animation.addByPrefix('static', 'arrow' + dataSuffix[i]);
+ babyArrow.animation.addByPrefix('pressed', lowerDir + ' press', 24, false);
+ babyArrow.animation.addByPrefix('confirm', lowerDir + ' confirm', 24, false);
+
+ babyArrow.x += Note.swagWidth * i;
- babyArrow.frames = Paths.getSparrowAtlas('NOTE_assets','shared');
- babyArrow.animation.addByPrefix('green', 'arrowUP');
- babyArrow.animation.addByPrefix('blue', 'arrowDOWN');
- babyArrow.animation.addByPrefix('purple', 'arrowLEFT');
- babyArrow.animation.addByPrefix('red', 'arrowRIGHT');
babyArrow.antialiasing = FlxG.save.data.antialiasing;
babyArrow.setGraphicSize(Std.int(babyArrow.width * 0.7));
- switch (Math.abs(i))
- {
- case 2:
- babyArrow.x += Note.swagWidth * 2;
- babyArrow.animation.addByPrefix('static', 'arrowUP');
- babyArrow.animation.addByPrefix('pressed', 'up press', 24, false);
- babyArrow.animation.addByPrefix('confirm', 'up confirm', 24, false);
- case 3:
- babyArrow.x += Note.swagWidth * 3;
- babyArrow.animation.addByPrefix('static', 'arrowRIGHT');
- babyArrow.animation.addByPrefix('pressed', 'right press', 24, false);
- babyArrow.animation.addByPrefix('confirm', 'right confirm', 24, false);
- case 1:
- babyArrow.x += Note.swagWidth * 1;
- babyArrow.animation.addByPrefix('static', 'arrowDOWN');
- babyArrow.animation.addByPrefix('pressed', 'down press', 24, false);
- babyArrow.animation.addByPrefix('confirm', 'down confirm', 24, false);
- case 0:
- babyArrow.x += Note.swagWidth * 0;
- babyArrow.animation.addByPrefix('static', 'arrowLEFT');
- babyArrow.animation.addByPrefix('pressed', 'left press', 24, false);
- babyArrow.animation.addByPrefix('confirm', 'left confirm', 24, false);
- }
-
babyArrow.updateHitbox();
babyArrow.scrollFactor.set();
@@ -130,171 +161,135 @@ class DiffOverview extends FlxSubState
babyArrow.x += 50;
babyArrow.x += ((FlxG.width / 2));
}
+ }
- add(playerStrums);
-
- generateSong("assItch");
-
- playerStrums.cameras = [camHUD];
- notes.cameras = [camHUD];
- blackBox.cameras = [camHUD];
+ function endSong()
+ {
+ if (stopDoingShit)
+ return;
+ }
- blackBox.x = playerStrums.members[0].x;
- blackBox.y = strumLine.y;
+ function resyncVocals():Void
+ {
+ vocals.pause();
- camHUD.zoom = 0.6;
- camHUD.alpha = 0;
- camHUD.height = 5000;
- blackBox.height = camHUD.height;
+ FlxG.sound.music.play();
+ Conductor.songPosition = FlxG.sound.music.time;
+ vocals.time = Conductor.songPosition;
+ vocals.play();
+ }
- camHUD.x += 280;
+ public var stopDoingShit = false;
- blackBox.y -= 100;
- blackBox.x -= 100;
+ public var currentStep = 0;
+ public var oldStep = 0;
- offset = new FlxText(10,FlxG.height - 40,0,"Offset: " + HelperFunctions.truncateFloat(FlxG.save.data.offset,0) + " (LEFT/RIGHT to decrease/increase)",16);
- offset.setBorderStyle(FlxTextBorderStyle.OUTLINE,FlxColor.BLACK,4,1);
- offset.color = FlxColor.WHITE;
- offset.scrollFactor.set();
- //add(offset);
+ private function updateCurStep():Void
+ {
+ var lastChange:BPMChangeEvent = {
+ stepTime: 0,
+ songTime: 0,
+ bpm: 0
+ }
+ for (i in 0...Conductor.bpmChangeMap.length)
+ {
+ if (Conductor.songPosition >= Conductor.bpmChangeMap[i].songTime)
+ lastChange = Conductor.bpmChangeMap[i];
+ }
- FlxTween.tween(blackBox, {alpha: 0.5}, 1, {ease: FlxEase.expoInOut});
- FlxTween.tween(camHUD, {alpha: 1}, 0.5, {ease: FlxEase.expoInOut});
- FlxTween.tween(offset, {alpha: 1}, 0.5, {ease: FlxEase.expoInOut});
+ currentStep = lastChange.stepTime + Math.floor((Conductor.songPosition - lastChange.songTime) / Conductor.stepCrochet);
+ }
- trace('pog');
+ function stepHit()
+ {
+ if (FlxG.sound.music.time > Conductor.songPosition + 20 || FlxG.sound.music.time < Conductor.songPosition - 20)
+ {
+ trace("resync");
+ resyncVocals();
+ }
+ oldStep = currentStep;
+ }
- super.create();
+ function offsetChange()
+ {
+ for (i in unspawnNotes)
+ i.strumTime = i.baseStrum + FlxG.save.data.offset;
+ for (i in notes)
+ i.strumTime = i.baseStrum + FlxG.save.data.offset;
}
- function endSong()
- {
- if (stopDoingShit)
- return;
- }
-
- function resyncVocals():Void
- {
- vocals.pause();
-
- FlxG.sound.music.play();
- Conductor.songPosition = FlxG.sound.music.time;
- vocals.time = Conductor.songPosition;
- vocals.play();
- }
-
- public var stopDoingShit = false;
-
- public var currentStep = 0;
- public var oldStep = 0;
-
- private function updateCurStep():Void
- {
- var lastChange:BPMChangeEvent = {
- stepTime: 0,
- songTime: 0,
- bpm: 0
- }
- for (i in 0...Conductor.bpmChangeMap.length)
- {
- if (Conductor.songPosition >= Conductor.bpmChangeMap[i].songTime)
- lastChange = Conductor.bpmChangeMap[i];
- }
-
- currentStep = lastChange.stepTime + Math.floor((Conductor.songPosition - lastChange.songTime) / Conductor.stepCrochet);
- }
-
- function stepHit()
- {
- if (FlxG.sound.music.time > Conductor.songPosition + 20 || FlxG.sound.music.time < Conductor.songPosition - 20)
- {
- trace("resync");
- resyncVocals();
- }
- oldStep = currentStep;
- }
-
- function offsetChange()
- {
- for (i in unspawnNotes)
- i.strumTime = i.baseStrum + FlxG.save.data.offset;
- for (i in notes)
- i.strumTime = i.baseStrum + FlxG.save.data.offset;
- }
-
- var frames = 0;
+ var frames = 0;
override function update(elapsed:Float)
{
super.update(elapsed);
+ // input
+
+ if (frames < 10)
+ {
+ frames++;
+ return;
+ }
+
+ if (stopDoingShit)
+ return;
+
+ updateCurStep();
+
+ if (oldStep != currentStep && currentStep > 0)
+ stepHit();
+
+ if (FlxG.keys.pressed.SPACE)
+ {
+ stopDoingShit = true;
+ quit();
+ }
+
+ var gamepad:FlxGamepad = FlxG.gamepads.lastActive;
+
+ if (gamepad != null)
+ if (gamepad.justPressed.X)
+ {
+ stopDoingShit = true;
+ quit();
+ }
+
+ /*if (FlxG.keys.pressed.RIGHT)
+ {
+ if (FlxG.keys.pressed.SHIFT)
+ {
+ FlxG.save.data.offset++;
+ offsetChange();
+ }
+ }
+ if (FlxG.keys.pressed.LEFT)
+ {
+ if (FlxG.keys.pressed.SHIFT)
+ {
+ FlxG.save.data.offset--;
+ offsetChange();
+ }
+ }
+
+ if (FlxG.keys.justPressed.RIGHT)
+ {
+ FlxG.save.data.offset++;
+ offsetChange();
+ }
+ if (FlxG.keys.justPressed.LEFT)
+ {
+ FlxG.save.data.offset--;
+ offsetChange();
+ }
+
+
+ offset.text = "Offset: " + HelperFunctions.truncateFloat(FlxG.save.data.offset,0) + " (LEFT/RIGHT to decrease/increase, SHIFT to go faster) - Time: " + HelperFunctions.truncateFloat(Conductor.songPosition / 1000,0) + "s - Step: " + currentStep;
+ */
- // input
-
- if (frames < 10)
- {
- frames++;
- return;
- }
-
- if (stopDoingShit)
- return;
-
- updateCurStep();
-
- if (oldStep != currentStep && currentStep > 0)
- stepHit();
-
- if (FlxG.keys.pressed.SPACE)
- {
- stopDoingShit = true;
- quit();
- }
-
- var gamepad:FlxGamepad = FlxG.gamepads.lastActive;
-
- if (gamepad != null)
- if (gamepad.justPressed.X)
- {
- stopDoingShit = true;
- quit();
- }
-
- /*if (FlxG.keys.pressed.RIGHT)
- {
- if (FlxG.keys.pressed.SHIFT)
- {
- FlxG.save.data.offset++;
- offsetChange();
- }
- }
- if (FlxG.keys.pressed.LEFT)
- {
- if (FlxG.keys.pressed.SHIFT)
- {
- FlxG.save.data.offset--;
- offsetChange();
- }
- }
-
- if (FlxG.keys.justPressed.RIGHT)
- {
- FlxG.save.data.offset++;
- offsetChange();
- }
- if (FlxG.keys.justPressed.LEFT)
- {
- FlxG.save.data.offset--;
- offsetChange();
- }
-
-
- offset.text = "Offset: " + HelperFunctions.truncateFloat(FlxG.save.data.offset,0) + " (LEFT/RIGHT to decrease/increase, SHIFT to go faster) - Time: " + HelperFunctions.truncateFloat(Conductor.songPosition / 1000,0) + "s - Step: " + currentStep;
- */
-
- if (vocals != null)
- if (vocals.playing)
- Conductor.songPosition += FlxG.elapsed * 1000;
+ if (vocals != null)
+ if (vocals.playing)
+ Conductor.songPosition += FlxG.elapsed * 1000;
if (unspawnNotes[0] != null)
{
@@ -308,8 +303,6 @@ class DiffOverview extends FlxSubState
}
}
-
-
notes.forEachAlive(function(daNote:Note)
{
// instead of doing stupid y > FlxG.height
@@ -325,9 +318,8 @@ class DiffOverview extends FlxSubState
daNote.active = true;
}
- daNote.y = (playerStrums.members[Math.floor(Math.abs(daNote.noteData))].y
- - 0.45 * (Conductor.songPosition - daNote.strumTime) * FlxMath.roundDecimal(SONG.speed,
- 2));
+ daNote.y = (playerStrums.members[Math.floor(Math.abs(daNote.noteData))].y
+ - 0.45 * (Conductor.songPosition - daNote.strumTime) * FlxMath.roundDecimal(SONG.speed, 2));
if (daNote.isSustainNote)
{
@@ -351,35 +343,33 @@ class DiffOverview extends FlxSubState
daNote.angle = playerStrums.members[Math.floor(Math.abs(daNote.noteData))].angle;
daNote.alpha = playerStrums.members[Math.floor(Math.abs(daNote.noteData))].alpha;
- // auto hit
-
- if(daNote.y < strumLine.y)
- {
- // Force good note hit regardless if it's too late to hit it or not as a fail safe
- if(daNote.canBeHit && daNote.mustPress || daNote.tooLate && daNote.mustPress)
- {
-
- daNote.wasGoodHit = true;
- vocals.volume = 1;
-
- daNote.kill();
- notes.remove(daNote, true);
- daNote.destroy();
- }
- }
- });
+ // auto hit
+ if (daNote.y < strumLine.y)
+ {
+ // Force good note hit regardless if it's too late to hit it or not as a fail safe
+ if (daNote.canBeHit && daNote.mustPress || daNote.tooLate && daNote.mustPress)
+ {
+ daNote.wasGoodHit = true;
+ vocals.volume = 1;
+
+ daNote.kill();
+ notes.remove(daNote, true);
+ daNote.destroy();
+ }
+ }
+ });
}
function quit()
{
FlxTween.tween(blackBox, {alpha: 0}, 1, {ease: FlxEase.expoInOut});
- FlxTween.tween(camHUD, {alpha: 0}, 1, {ease: FlxEase.expoInOut});
- FlxTween.tween(offset, {alpha: 0}, 1, {ease: FlxEase.expoInOut});
+ FlxTween.tween(camHUD, {alpha: 0}, 1, {ease: FlxEase.expoInOut});
+ FlxTween.tween(offset, {alpha: 0}, 1, {ease: FlxEase.expoInOut});
- vocals.fadeOut();
+ vocals.fadeOut();
- FreeplayState.openedPreview = false;
+ FreeplayState.openedPreview = false;
}
var vocals:FlxSound;
@@ -395,7 +385,7 @@ class DiffOverview extends FlxSubState
Conductor.changeBPM(songData.bpm);
if (SONG.needsVoices)
- vocals = new FlxSound().loadEmbedded(Paths.voices(SONG.song));
+ vocals = new FlxSound().loadEmbedded(Paths.voices(SONG.songId));
else
vocals = new FlxSound();
@@ -438,13 +428,12 @@ class DiffOverview extends FlxSubState
else
oldNote = null;
- var swagNote:Note = new Note(daStrumTime, daNoteData, oldNote,false, true);
+ var swagNote:Note = new Note(daStrumTime, daNoteData, oldNote, false, true);
-
if (!gottaHitNote)
continue;
- swagNote.baseStrum = Math.round(songNotes[0]);
+ swagNote.baseStrum = Math.round(songNotes[0]);
swagNote.sustainLength = songNotes[2];
swagNote.scrollFactor.set(0, 0);
@@ -488,10 +477,10 @@ class DiffOverview extends FlxSubState
unspawnNotes.sort(sortByShit);
- Conductor.mapBPMChanges(SONG);
+ Conductor.mapBPMChanges(SONG);
Conductor.changeBPM(SONG.bpm);
- FlxG.sound.playMusic(Paths.inst(SONG.song), 1, false);
+ FlxG.sound.playMusic(Paths.inst(SONG.songId), 1, false);
FlxG.sound.music.onComplete = endSong;
vocals.play();
}
diff --git a/source/Discord.hx b/source/Discord.hx
index 5dc9c640f9..7fbe0a0925 100644
--- a/source/Discord.hx
+++ b/source/Discord.hx
@@ -1,5 +1,6 @@
package;
+#if FEATURE_DISCORD
import Sys.sleep;
import discord_rpc.DiscordRpc;
@@ -22,7 +23,7 @@ class DiscordClient
{
DiscordRpc.process();
sleep(2);
- //trace("Discord Client Update");
+ // trace("Discord Client Update");
}
DiscordRpc.shutdown();
@@ -62,9 +63,9 @@ class DiscordClient
trace("Discord Client initialized");
}
- public static function changePresence(details:String, state:Null, ?smallImageKey : String, ?hasStartTimestamp : Bool, ?endTimestamp: Float)
+ public static function changePresence(details:String, state:Null, ?smallImageKey:String, ?hasStartTimestamp:Bool, ?endTimestamp:Float)
{
- var startTimestamp:Float = if(hasStartTimestamp) Date.now().getTime() else 0;
+ var startTimestamp:Float = if (hasStartTimestamp) Date.now().getTime() else 0;
if (endTimestamp > 0)
{
@@ -76,12 +77,13 @@ class DiscordClient
state: state,
largeImageKey: 'icon',
largeImageText: "fridaynightfunkin",
- smallImageKey : smallImageKey,
+ smallImageKey: smallImageKey,
// Obtained times are in milliseconds so they are divided so Discord can use it
- startTimestamp : Std.int(startTimestamp / 1000),
- endTimestamp : Std.int(endTimestamp / 1000)
+ startTimestamp: Std.int(startTimestamp / 1000),
+ endTimestamp: Std.int(endTimestamp / 1000)
});
- //trace('Discord RPC Updated. Arguments: $details, $state, $smallImageKey, $hasStartTimestamp, $endTimestamp');
+ // trace('Discord RPC Updated. Arguments: $details, $state, $smallImageKey, $hasStartTimestamp, $endTimestamp');
}
-}
\ No newline at end of file
+}
+#end
diff --git a/source/EtternaFunctions.hx b/source/EtternaFunctions.hx
index 126269a4fa..41dc25a10e 100644
--- a/source/EtternaFunctions.hx
+++ b/source/EtternaFunctions.hx
@@ -1,84 +1,83 @@
class EtternaFunctions
{
- // erf constants
- public static var a1 = 0.254829592;
- public static var a2 = -0.284496736;
- public static var a3 = 1.421413741;
- public static var a4 = -1.453152027;
- public static var a5 = 1.061405429;
- public static var p = 0.3275911;
+ // erf constants
+ public static var a1 = 0.254829592;
+ public static var a2 = -0.284496736;
+ public static var a3 = 1.421413741;
+ public static var a4 = -1.453152027;
+ public static var a5 = 1.061405429;
+ public static var p = 0.3275911;
- public static function erf(x:Float):Float
- {
- // Save the sign of x
- var sign = 1;
- if (x < 0)
- sign = -1;
- x = Math.abs(x);
-
- // A&S formula 7.1.26
- var t = 1.0/(1.0 + p*x);
- var y = 1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*Math.exp(-x*x);
-
- return sign*y;
- }
+ public static function erf(x:Float):Float
+ {
+ // Save the sign of x
+ var sign = 1;
+ if (x < 0)
+ sign = -1;
+ x = Math.abs(x);
- public static function getNotes():Int
- {
- var notes:Int = 0;
- for (i in 0...PlayState.SONG.notes.length)
- {
- for (ii in 0...PlayState.SONG.notes[i].sectionNotes.length)
- {
- var n = PlayState.SONG.notes[i].sectionNotes[ii];
- if (n[1] <= 0)
- notes++;
- }
- }
- return notes;
- }
+ // A&S formula 7.1.26
+ var t = 1.0 / (1.0 + p * x);
+ var y = 1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * Math.exp(-x * x);
- public static function getHolds():Int
- {
- var notes:Int = 0;
- for (i in 0...PlayState.SONG.notes.length)
- {
- trace(PlayState.SONG.notes[i]);
- for (ii in 0...PlayState.SONG.notes[i].sectionNotes.length)
- {
- var n = PlayState.SONG.notes[i].sectionNotes[ii];
- trace(n);
- if (n[1] > 0)
- notes++;
- }
- }
- return notes;
- }
+ return sign * y;
+ }
- public static function getMapMaxScore():Int
- {
- return (getNotes() * 350);
- }
+ public static function getNotes():Int
+ {
+ var notes:Int = 0;
+ for (i in 0...PlayState.SONG.notes.length)
+ {
+ for (ii in 0...PlayState.SONG.notes[i].sectionNotes.length)
+ {
+ var n = PlayState.SONG.notes[i].sectionNotes[ii];
+ if (n[1] <= 0)
+ notes++;
+ }
+ }
+ return notes;
+ }
- public static function wife3(maxms:Float, ts:Float)
- {
- var max_points = 1.0;
- var miss_weight = -5.5;
- var ridic= 5 * ts;
- var max_boo_weight = 166 * (ts / PlayState.songMultiplier);
- var ts_pow = 0.75;
- var zero = 65 * (Math.pow(ts,ts_pow));
- var power = 2.5;
- var dev = 22.7 * (Math.pow(ts,ts_pow));
-
- if (maxms <= ridic) // anything below this (judge scaled) threshold is counted as full pts
- return max_points;
- else if (maxms <= zero) // ma/pa region, exponential
- return max_points * erf((zero - maxms) / dev);
- else if (maxms <= max_boo_weight)// cb region, linear
- return (maxms - zero) * miss_weight / (max_boo_weight - zero);
- else
- return miss_weight;
- }
+ public static function getHolds():Int
+ {
+ var notes:Int = 0;
+ for (i in 0...PlayState.SONG.notes.length)
+ {
+ trace(PlayState.SONG.notes[i]);
+ for (ii in 0...PlayState.SONG.notes[i].sectionNotes.length)
+ {
+ var n = PlayState.SONG.notes[i].sectionNotes[ii];
+ trace(n);
+ if (n[1] > 0)
+ notes++;
+ }
+ }
+ return notes;
+ }
-}
\ No newline at end of file
+ public static function getMapMaxScore():Int
+ {
+ return (getNotes() * 350);
+ }
+
+ public static function wife3(maxms:Float, ts:Float)
+ {
+ var max_points = 1.0;
+ var miss_weight = -5.5;
+ var ridic = 5 * ts;
+ var max_boo_weight = 166 * (ts / PlayState.songMultiplier);
+ var ts_pow = 0.75;
+ var zero = 65 * (Math.pow(ts, ts_pow));
+ var power = 2.5;
+ var dev = 22.7 * (Math.pow(ts, ts_pow));
+
+ if (maxms <= ridic) // anything below this (judge scaled) threshold is counted as full pts
+ return max_points;
+ else if (maxms <= zero) // ma/pa region, exponential
+ return max_points * erf((zero - maxms) / dev);
+ else if (maxms <= max_boo_weight) // cb region, linear
+ return (maxms - zero) * miss_weight / (max_boo_weight - zero);
+ else
+ return miss_weight;
+ }
+}
diff --git a/source/FXAAShader.hx b/source/FXAAShader.hx
new file mode 100644
index 0000000000..ba0fa79066
--- /dev/null
+++ b/source/FXAAShader.hx
@@ -0,0 +1,5 @@
+import flixel.system.FlxAssets;
+
+class FXAAShader extends FlxShader
+{
+}
diff --git a/source/FreeplayState.hx b/source/FreeplayState.hx
index 1b688f452d..d19d0ee762 100644
--- a/source/FreeplayState.hx
+++ b/source/FreeplayState.hx
@@ -1,14 +1,16 @@
package;
-import lime.app.Application;
+
import openfl.utils.Future;
import openfl.media.Sound;
import flixel.system.FlxSound;
-#if sys
+#if FEATURE_STEPMANIA
import smTools.SMFile;
+#end
+#if FEATURE_FILESYSTEM
import sys.FileSystem;
import sys.io.File;
#end
-import Song.SwagSong;
+import Song.SongData;
import flixel.input.gamepad.FlxGamepad;
import flash.text.TextField;
import flixel.FlxG;
@@ -18,10 +20,7 @@ import flixel.group.FlxGroup.FlxTypedGroup;
import flixel.math.FlxMath;
import flixel.text.FlxText;
import flixel.util.FlxColor;
-import lime.utils.Assets;
-
-
-#if desktop
+#if FEATURE_DISCORD
import Discord.DiscordClient;
#end
@@ -29,7 +28,7 @@ using StringTools;
class FreeplayState extends MusicBeatState
{
- public static var songs:Array = [];
+ public static var songs:Array = [];
var selector:FlxText;
@@ -54,82 +53,42 @@ class FreeplayState extends MusicBeatState
public static var openedPreview = false;
- public static var songData:Map> = [];
+ public static var songData:Map> = [];
- public static function loadDiff(diff:Int, format:String, name:String, array:Array)
+ public static function loadDiff(diff:Int, songId:String, array:Array)
{
- try
- {
- array.push(Song.loadFromJson(Highscore.formatSong(format, diff), name));
- }
- catch(ex)
+ var diffName:String = "";
+
+ switch (diff)
{
- // do nada
+ case 0:
+ diffName = "-easy";
+ case 2:
+ diffName = "-hard";
}
+
+ array.push(Song.conversionChecks(Song.loadFromJson(songId, diffName)));
}
+ public static var list:Array = [];
+
override function create()
{
clean();
- var initSonglist = CoolUtil.coolTextFile(Paths.txt('data/freeplaySonglist'));
+ list = CoolUtil.coolTextFile(Paths.txt('data/freeplaySonglist'));
- //var diffList = "";
-
- songData = [];
- songs = [];
-
- for (i in 0...initSonglist.length)
- {
- var data:Array = initSonglist[i].split(':');
- var meta = new SongMetadata(data[0], Std.parseInt(data[2]), data[1]);
- var format = StringTools.replace(meta.songName, " ", "-");
- switch (format) {
- case 'Dad-Battle': format = 'Dadbattle';
- case 'Philly-Nice': format = 'Philly';
- }
-
- var diffs = [];
- var diffsThatExist = [];
+ cached = false;
+ populateSongData();
+ PlayState.inDaPlay = false;
+ PlayState.currentSong = "bruh";
- #if sys
- if (FileSystem.exists('assets/data/${format}/${format}-hard.json'))
- diffsThatExist.push("Hard");
- if (FileSystem.exists('assets/data/${format}/${format}-easy.json'))
- diffsThatExist.push("Easy");
- if (FileSystem.exists('assets/data/${format}/${format}.json'))
- diffsThatExist.push("Normal");
-
- if (diffsThatExist.length == 0)
- {
- Application.current.window.alert("No difficulties found for chart, skipping.",meta.songName + " Chart");
- continue;
- }
- #else
- diffsThatExist = ["Easy","Normal","Hard"];
- #end
- if (diffsThatExist.contains("Easy"))
- FreeplayState.loadDiff(0,format,meta.songName,diffs);
- if (diffsThatExist.contains("Normal"))
- FreeplayState.loadDiff(1,format,meta.songName,diffs);
- if (diffsThatExist.contains("Hard"))
- FreeplayState.loadDiff(2,format,meta.songName,diffs);
-
- meta.diffs = diffsThatExist;
-
- if (diffsThatExist.length != 3)
- trace("I ONLY FOUND " + diffsThatExist);
-
- FreeplayState.songData.set(meta.songName,diffs);
- trace('loaded diffs for ' + meta.songName);
- songs.push(meta);
-
- }
-
+ #if !FEATURE_STEPMANIA
+ trace("FEATURE_STEPMANIA was not specified during build, sm file loading is disabled.");
+ #elseif FEATURE_STEPMANIA
+ // TODO: Refactor this to use OpenFlAssets.
trace("tryin to load sm files");
-
- #if sys
- for(i in FileSystem.readDirectory("assets/sm/"))
+ for (i in FileSystem.readDirectory("assets/sm/"))
{
trace(i);
if (FileSystem.isDirectory("assets/sm/" + i))
@@ -138,49 +97,39 @@ class FreeplayState extends MusicBeatState
for (file in FileSystem.readDirectory("assets/sm/" + i))
{
if (file.contains(" "))
- FileSystem.rename("assets/sm/" + i + "/" + file,"assets/sm/" + i + "/" + file.replace(" ","_"));
+ FileSystem.rename("assets/sm/" + i + "/" + file, "assets/sm/" + i + "/" + file.replace(" ", "_"));
if (file.endsWith(".sm") && !FileSystem.exists("assets/sm/" + i + "/converted.json"))
{
trace("reading " + file);
- var file:SMFile = SMFile.loadFile("assets/sm/" + i + "/" + file.replace(" ","_"));
+ var file:SMFile = SMFile.loadFile("assets/sm/" + i + "/" + file.replace(" ", "_"));
trace("Converting " + file.header.TITLE);
var data = file.convertToFNF("assets/sm/" + i + "/converted.json");
- var meta = new SongMetadata(file.header.TITLE, 0, "sm",file,"assets/sm/" + i);
+ var meta = new FreeplaySongMetadata(file.header.TITLE, 0, "sm", file, "assets/sm/" + i);
songs.push(meta);
var song = Song.loadFromJsonRAW(data);
- songData.set(file.header.TITLE, [song,song,song]);
+ songData.set(file.header.TITLE, [song, song, song]);
}
else if (FileSystem.exists("assets/sm/" + i + "/converted.json") && file.endsWith(".sm"))
{
trace("reading " + file);
- var file:SMFile = SMFile.loadFile("assets/sm/" + i + "/" + file.replace(" ","_"));
+ var file:SMFile = SMFile.loadFile("assets/sm/" + i + "/" + file.replace(" ", "_"));
trace("Converting " + file.header.TITLE);
var data = file.convertToFNF("assets/sm/" + i + "/converted.json");
- var meta = new SongMetadata(file.header.TITLE, 0, "sm",file,"assets/sm/" + i);
+ var meta = new FreeplaySongMetadata(file.header.TITLE, 0, "sm", file, "assets/sm/" + i);
songs.push(meta);
var song = Song.loadFromJsonRAW(File.getContent("assets/sm/" + i + "/converted.json"));
trace("got content lol");
- songData.set(file.header.TITLE, [song,song,song]);
+ songData.set(file.header.TITLE, [song, song, song]);
}
}
}
}
#end
- //trace("\n" + diffList);
-
- /*
- if (FlxG.sound.music != null)
- {
- if (!FlxG.sound.music.playing)
- FlxG.sound.playMusic(Paths.music('freakyMenu'));
- }
- */
-
- #if desktop
- // Updating Discord Rich Presence
- DiscordClient.changePresence("In the Freeplay Menu", null);
- #end
+ #if FEATURE_DISCORD
+ // Updating Discord Rich Presence
+ DiscordClient.changePresence("In the Freeplay Menu", null);
+ #end
var isDebug:Bool = false;
@@ -194,7 +143,7 @@ class FreeplayState extends MusicBeatState
// LOAD CHARACTERS
- var bg:FlxSprite = new FlxSprite().loadGraphic(Paths.image('menuBGBlue'));
+ var bg:FlxSprite = new FlxSprite().loadGraphic(Paths.loadImage('menuBGBlue'));
bg.antialiasing = FlxG.save.data.antialiasing;
add(bg);
@@ -220,12 +169,12 @@ class FreeplayState extends MusicBeatState
// songText.screenCenter(X);
}
- scoreText = new FlxText(FlxG.width * 0.7, 5, 0, "", 32);
+ scoreText = new FlxText(FlxG.width * 0.65, 5, 0, "", 32);
// scoreText.autoSize = false;
scoreText.setFormat(Paths.font("vcr.ttf"), 32, FlxColor.WHITE, RIGHT);
// scoreText.alignment = RIGHT;
- var scoreBG:FlxSprite = new FlxSprite(scoreText.x - 6, 0).makeGraphic(Std.int(FlxG.width * 0.35), 135, 0xFF000000);
+ var scoreBG:FlxSprite = new FlxSprite(scoreText.x - 6, 0).makeGraphic(Std.int(FlxG.width * 0.4), 135, 0xFF000000);
scoreBG.alpha = 0.6;
add(scoreBG);
@@ -237,7 +186,7 @@ class FreeplayState extends MusicBeatState
diffCalcText.font = scoreText.font;
add(diffCalcText);
- previewtext = new FlxText(scoreText.x, scoreText.y + 94, 0, "Rate: " + rate + "x", 24);
+ previewtext = new FlxText(scoreText.x, scoreText.y + 96, 0, "Rate: " + FlxMath.roundDecimal(rate, 2) + "x", 24);
previewtext.font = scoreText.font;
add(previewtext);
@@ -260,29 +209,74 @@ class FreeplayState extends MusicBeatState
var swag:Alphabet = new Alphabet(1, 0, "swag");
- // JUST DOIN THIS SHIT FOR TESTING!!!
- /*
- var md:String = Markdown.markdownToHtml(Assets.getText('CHANGELOG.md'));
+ super.create();
+ }
+
+ public static var cached:Bool = false;
- var texFel:TextField = new TextField();
- texFel.width = FlxG.width;
- texFel.height = FlxG.height;
- // texFel.
- texFel.htmlText = md;
+ /**
+ * Load song data from the data files.
+ */
+ static function populateSongData()
+ {
+ cached = false;
+ list = CoolUtil.coolTextFile(Paths.txt('data/freeplaySonglist'));
- FlxG.stage.addChild(texFel);
+ songData = [];
+ songs = [];
- // scoreText.textField.htmlText = md;
+ for (i in 0...list.length)
+ {
+ var data:Array = list[i].split(':');
+ var songId = data[0];
+ var meta = new FreeplaySongMetadata(songId, Std.parseInt(data[2]), data[1]);
- trace(md);
- */
+ var diffs = [];
+ var diffsThatExist = [];
+ #if FEATURE_FILESYSTEM
+ if (Paths.doesTextAssetExist(Paths.json('songs/$songId/$songId-hard')))
+ diffsThatExist.push("Hard");
+ if (Paths.doesTextAssetExist(Paths.json('songs/$songId/$songId-easy')))
+ diffsThatExist.push("Easy");
+ if (Paths.doesTextAssetExist(Paths.json('songs/$songId/$songId')))
+ diffsThatExist.push("Normal");
- super.create();
+ if (diffsThatExist.length == 0)
+ {
+ Debug.displayAlert(meta.songName + " Chart", "No difficulties found for chart, skipping.");
+ }
+ else
+ {
+ #else
+ diffsThatExist = ["Easy", "Normal", "Hard"];
+ #end
+ if (diffsThatExist.contains("Easy"))
+ FreeplayState.loadDiff(0, songId, diffs);
+ if (diffsThatExist.contains("Normal"))
+ FreeplayState.loadDiff(1, songId, diffs);
+ if (diffsThatExist.contains("Hard"))
+ FreeplayState.loadDiff(2, songId, diffs);
+
+ meta.diffs = diffsThatExist;
+
+ if (diffsThatExist.length != 3)
+ trace("I ONLY FOUND " + diffsThatExist);
+
+ FreeplayState.songData.set(songId, diffs);
+ trace('loaded diffs for ' + songId);
+ FreeplayState.songs.push(meta);
+
+ sys.thread.Thread.create(() ->
+ {
+ FlxG.sound.cache(Paths.inst(songId));
+ });
+ }
+ }
}
public function addSong(songName:String, weekNum:Int, songCharacter:String)
{
- songs.push(new SongMetadata(songName, weekNum, songCharacter));
+ songs.push(new FreeplaySongMetadata(songName, weekNum, songCharacter));
}
public function addWeek(songs:Array, weekNum:Int, ?songCharacters:Array)
@@ -299,7 +293,7 @@ class FreeplayState extends MusicBeatState
num++;
}
}
-
+
override function update(elapsed:Float)
{
super.update(elapsed);
@@ -325,12 +319,14 @@ class FreeplayState extends MusicBeatState
var upP = FlxG.keys.justPressed.UP;
var downP = FlxG.keys.justPressed.DOWN;
var accepted = FlxG.keys.justPressed.ENTER;
+ var dadDebug = FlxG.keys.justPressed.SIX;
+ var charting = FlxG.keys.justPressed.SEVEN;
+ var bfDebug = FlxG.keys.justPressed.ZERO;
var gamepad:FlxGamepad = FlxG.gamepads.lastActive;
if (gamepad != null)
{
-
if (gamepad.justPressed.DPAD_UP)
{
changeSelection(-1);
@@ -348,8 +344,8 @@ class FreeplayState extends MusicBeatState
changeDiff(1);
}
- //if (gamepad.justPressed.X && !openedPreview)
- //openSubState(new DiffOverview());
+ // if (gamepad.justPressed.X && !openedPreview)
+ // openSubState(new DiffOverview());
}
if (upP)
@@ -361,8 +357,8 @@ class FreeplayState extends MusicBeatState
changeSelection(1);
}
- //if (FlxG.keys.justPressed.SPACE && !openedPreview)
- //openSubState(new DiffOverview());
+ // if (FlxG.keys.justPressed.SPACE && !openedPreview)
+ // openSubState(new DiffOverview());
if (FlxG.keys.pressed.SHIFT)
{
@@ -377,6 +373,12 @@ class FreeplayState extends MusicBeatState
diffCalcText.text = 'RATING: ${DiffCalc.CalculateDiff(songData.get(songs[curSelected].songName)[curDifficulty])}';
}
+ if (FlxG.keys.justPressed.R)
+ {
+ rate = 1;
+ diffCalcText.text = 'RATING: ${DiffCalc.CalculateDiff(songData.get(songs[curSelected].songName)[curDifficulty])}';
+ }
+
if (rate > 3)
{
rate = 3;
@@ -388,7 +390,7 @@ class FreeplayState extends MusicBeatState
diffCalcText.text = 'RATING: ${DiffCalc.CalculateDiff(songData.get(songs[curSelected].songName)[curDifficulty])}';
}
- previewtext.text = "Rate: " + rate + "x";
+ previewtext.text = "Rate: " + FlxMath.roundDecimal(rate, 2) + "x";
}
else
{
@@ -397,8 +399,7 @@ class FreeplayState extends MusicBeatState
if (FlxG.keys.justPressed.RIGHT)
changeDiff(1);
}
-
-
+
#if cpp
@:privateAccess
{
@@ -413,51 +414,102 @@ class FreeplayState extends MusicBeatState
}
if (accepted)
+ loadSong();
+ else if (charting)
+ loadSong(true);
+
+ // AnimationDebug and StageDebug are only enabled in debug builds.
+ #if debug
+ if (dadDebug)
{
- // adjusting the song name to be compatible
- var songFormat = StringTools.replace(songs[curSelected].songName, " ", "-");
- switch (songFormat) {
- case 'Dad-Battle': songFormat = 'Dadbattle';
- case 'Philly-Nice': songFormat = 'Philly';
- }
- var hmm;
- try
- {
- hmm = songData.get(songs[curSelected].songName)[curDifficulty];
- if (hmm == null)
- return;
- }
- catch(ex)
- {
+ loadAnimDebug(true);
+ }
+ if (bfDebug)
+ {
+ loadAnimDebug(false);
+ }
+ #end
+ }
+
+ function loadAnimDebug(dad:Bool = true)
+ {
+ // First, get the song data.
+ var hmm;
+ try
+ {
+ hmm = songData.get(songs[curSelected].songName)[curDifficulty];
+ if (hmm == null)
return;
- }
+ }
+ catch (ex)
+ {
+ return;
+ }
+ PlayState.SONG = hmm;
+ var character = dad ? PlayState.SONG.player2 : PlayState.SONG.player1;
+ LoadingState.loadAndSwitchState(new AnimationDebug(character));
+ }
- PlayState.SONG = Song.conversionChecks(hmm);
- PlayState.isStoryMode = false;
- PlayState.storyDifficulty = curDifficulty;
- PlayState.storyWeek = songs[curSelected].week;
- trace('CUR WEEK' + PlayState.storyWeek);
- #if sys
- if (songs[curSelected].songCharacter == "sm")
- {
- PlayState.isSM = true;
- PlayState.sm = songs[curSelected].sm;
- PlayState.pathToSm = songs[curSelected].path;
- }
- else
- PlayState.isSM = false;
- #else
- PlayState.isSM = false;
- #end
+ function loadSong(isCharting:Bool = false)
+ {
+ loadSongInFreePlay(songs[curSelected].songName, curDifficulty, isCharting);
- PlayState.songMultiplier = rate;
+ clean();
+ }
- LoadingState.loadAndSwitchState(new PlayState());
+ /**
+ * Load into a song in free play, by name.
+ * This is a static function, so you can call it anywhere.
+ * @param songName The name of the song to load. Use the human readable name, with spaces.
+ * @param isCharting If true, load into the Chart Editor instead.
+ */
+ public static function loadSongInFreePlay(songName:String, difficulty:Int, isCharting:Bool, reloadSong:Bool = false)
+ {
+ // Make sure song data is initialized first.
+ if (songData == null || Lambda.count(songData) == 0)
+ populateSongData();
- clean();
+ var currentSongData;
+ try
+ {
+ if (songData.get(songName) == null)
+ return;
+ currentSongData = songData.get(songName)[difficulty];
+ if (songData.get(songName)[difficulty] == null)
+ return;
}
+ catch (ex)
+ {
+ return;
+ }
+
+ PlayState.SONG = currentSongData;
+ PlayState.isStoryMode = false;
+ PlayState.storyDifficulty = difficulty;
+ PlayState.storyWeek = songs[curSelected].week;
+ Debug.logInfo('Loading song ${PlayState.SONG.songName} from week ${PlayState.storyWeek} into Free Play...');
+ #if FEATURE_STEPMANIA
+ if (songs[curSelected].songCharacter == "sm")
+ {
+ Debug.logInfo('Song is a StepMania song!');
+ PlayState.isSM = true;
+ PlayState.sm = songs[curSelected].sm;
+ PlayState.pathToSm = songs[curSelected].path;
+ }
+ else
+ PlayState.isSM = false;
+ #else
+ PlayState.isSM = false;
+ #end
+
+ PlayState.songMultiplier = rate;
+
+ if (isCharting)
+ LoadingState.loadAndSwitchState(new ChartingState(reloadSong));
+ else
+ LoadingState.loadAndSwitchState(new PlayState());
}
function changeDiff(change:Int = 0)
@@ -472,14 +524,18 @@ class FreeplayState extends MusicBeatState
if (curDifficulty > 2)
curDifficulty = 0;
-
// adjusting the highscore song name to be compatible (changeDiff)
var songHighscore = StringTools.replace(songs[curSelected].songName, " ", "-");
- switch (songHighscore) {
- case 'Dad-Battle': songHighscore = 'Dadbattle';
- case 'Philly-Nice': songHighscore = 'Philly';
+ switch (songHighscore)
+ {
+ case 'Dad-Battle':
+ songHighscore = 'Dadbattle';
+ case 'Philly-Nice':
+ songHighscore = 'Philly';
+ case 'M.I.L.F':
+ songHighscore = 'Milf';
}
-
+
#if !switch
intendedScore = Highscore.getScore(songHighscore, curDifficulty);
combo = Highscore.getCombo(songHighscore, curDifficulty);
@@ -490,15 +546,8 @@ class FreeplayState extends MusicBeatState
function changeSelection(change:Int = 0)
{
- #if !switch
- // NGio.logEvent('Fresh');
- #end
-
- // NGio.logEvent('Fresh');
FlxG.sound.play(Paths.sound('scrollMenu'), 0.4);
-
-
curSelected += change;
if (curSelected < 0)
@@ -508,7 +557,7 @@ class FreeplayState extends MusicBeatState
if (songs[curSelected].diffs.length != 3)
{
- switch(songs[curSelected].diffs[0])
+ switch (songs[curSelected].diffs[0])
{
case "Easy":
curDifficulty = 0;
@@ -520,13 +569,18 @@ class FreeplayState extends MusicBeatState
}
// selector.y = (70 * curSelected) + 30;
-
+
// adjusting the highscore song name to be compatible (changeSelection)
// would read original scores if we didn't change packages
var songHighscore = StringTools.replace(songs[curSelected].songName, " ", "-");
- switch (songHighscore) {
- case 'Dad-Battle': songHighscore = 'Dadbattle';
- case 'Philly-Nice': songHighscore = 'Philly';
+ switch (songHighscore)
+ {
+ case 'Dad-Battle':
+ songHighscore = 'Dadbattle';
+ case 'Philly-Nice':
+ songHighscore = 'Philly';
+ case 'M.I.L.F':
+ songHighscore = 'Milf';
}
#if !switch
@@ -537,7 +591,7 @@ class FreeplayState extends MusicBeatState
diffCalcText.text = 'RATING: ${DiffCalc.CalculateDiff(songData.get(songs[curSelected].songName)[curDifficulty])}';
diffText.text = CoolUtil.difficultyFromInt(curDifficulty).toUpperCase();
-
+
#if PRELOAD_ALL
if (songs[curSelected].songCharacter == "sm")
{
@@ -553,14 +607,24 @@ class FreeplayState extends MusicBeatState
#end
var hmm;
- try
+ try
+ {
+ hmm = songData.get(songs[curSelected].songName)[curDifficulty];
+ if (hmm != null)
{
- hmm = songData.get(songs[curSelected].songName)[curDifficulty];
- if (hmm != null)
- Conductor.changeBPM(hmm.bpm);
+ Conductor.changeBPM(hmm.bpm);
+ GameplayCustomizeState.freeplayBf = hmm.player1;
+ GameplayCustomizeState.freeplayDad = hmm.player2;
+ GameplayCustomizeState.freeplayGf = hmm.gfVersion;
+ GameplayCustomizeState.freeplayNoteStyle = hmm.noteStyle;
+ GameplayCustomizeState.freeplayStage = hmm.stage;
+ GameplayCustomizeState.freeplaySong = hmm.songId;
+ GameplayCustomizeState.freeplayWeek = songs[curSelected].week;
}
- catch(ex)
- {}
+ }
+ catch (ex)
+ {
+ }
if (openedPreview)
{
@@ -592,13 +656,11 @@ class FreeplayState extends MusicBeatState
}
}
}
-}
-
-class SongMetadata
+} class FreeplaySongMetadata
{
public var songName:String = "";
public var week:Int = 0;
- #if sys
+ #if FEATURE_STEPMANIA
public var sm:SMFile;
public var path:String;
#end
@@ -606,7 +668,7 @@ class SongMetadata
public var diffs = [];
- #if sys
+ #if FEATURE_STEPMANIA
public function new(song:String, week:Int, songCharacter:String, ?sm:SMFile = null, ?path:String = "")
{
this.songName = song;
diff --git a/source/GameDimensions.hx b/source/GameDimensions.hx
index db4a62af32..fcdd90a0e7 100644
--- a/source/GameDimensions.hx
+++ b/source/GameDimensions.hx
@@ -4,4 +4,4 @@ class GameDimensions
{
public static var width:Int = 1280;
public static var height:Int = 720;
-}
\ No newline at end of file
+}
diff --git a/source/GameOverState.hx b/source/GameOverState.hx
index 373fc5cba7..e614fa5eaf 100644
--- a/source/GameOverState.hx
+++ b/source/GameOverState.hx
@@ -37,8 +37,8 @@ class GameOverState extends FlxTransitionableState
bf.playAnim('firstDeath');
FlxG.camera.follow(bf, LOCKON, 0.001);
-
- var restart:FlxSprite = new FlxSprite(500, 50).loadGraphic(Paths.image('restart'));
+
+ var restart:FlxSprite = new FlxSprite(500, 50).loadGraphic(Paths.loadImage('restart'));
restart.setGraphicSize(Std.int(restart.width * 0.6));
restart.updateHitbox();
restart.alpha = 0;
@@ -61,7 +61,7 @@ class GameOverState extends FlxTransitionableState
var gamepad:FlxGamepad = FlxG.gamepads.lastActive;
- if(FlxG.save.data.InstantRespawn)
+ if (FlxG.save.data.InstantRespawn)
{
fading = true;
FlxG.sound.music.fadeOut(0.5, 0, function(twn:FlxTween)
diff --git a/source/GameOverSubstate.hx b/source/GameOverSubstate.hx
index 798feb170d..6f1c2cfb80 100644
--- a/source/GameOverSubstate.hx
+++ b/source/GameOverSubstate.hx
@@ -59,7 +59,7 @@ class GameOverSubstate extends MusicBeatSubstate
endBullshit();
}
- if(FlxG.save.data.InstantRespawn)
+ if (FlxG.save.data.InstantRespawn)
{
LoadingState.loadAndSwitchState(new PlayState());
}
@@ -69,10 +69,20 @@ class GameOverSubstate extends MusicBeatSubstate
FlxG.sound.music.stop();
if (PlayState.isStoryMode)
+ {
+ GameplayCustomizeState.freeplayBf = 'bf';
+ GameplayCustomizeState.freeplayDad = 'dad';
+ GameplayCustomizeState.freeplayGf = 'gf';
+ GameplayCustomizeState.freeplayNoteStyle = 'normal';
+ GameplayCustomizeState.freeplayStage = 'stage';
+ GameplayCustomizeState.freeplaySong = 'bopeebo';
+ GameplayCustomizeState.freeplayWeek = 1;
FlxG.switchState(new StoryMenuState());
+ }
else
FlxG.switchState(new FreeplayState());
PlayState.loadRep = false;
+ PlayState.stageTesting = false;
}
if (bf.animation.curAnim.name == 'firstDeath' && bf.animation.curAnim.curFrame == 12)
@@ -119,6 +129,7 @@ class GameOverSubstate extends MusicBeatSubstate
FlxG.camera.fade(FlxColor.BLACK, 2, false, function()
{
LoadingState.loadAndSwitchState(new PlayState());
+ PlayState.stageTesting = false;
});
});
}
diff --git a/source/GameplayCustomizeState.hx b/source/GameplayCustomizeState.hx
index 835ef19b4f..72d76b3c4a 100644
--- a/source/GameplayCustomizeState.hx
+++ b/source/GameplayCustomizeState.hx
@@ -6,289 +6,596 @@ import flixel.math.FlxMath;
import flixel.FlxCamera;
import flixel.math.FlxPoint;
import flixel.FlxObject;
-#if desktop
+#if FEATURE_DISCORD
import Discord.DiscordClient;
-import sys.thread.Thread;
#end
-
+import flixel.addons.effects.FlxTrail;
import flixel.group.FlxGroup.FlxTypedGroup;
import openfl.ui.Keyboard;
import flixel.FlxSprite;
import flixel.FlxG;
+using StringTools;
+
class GameplayCustomizeState extends MusicBeatState
{
-
- var defaultX:Float = FlxG.width * 0.55 - 135;
- var defaultY:Float = FlxG.height / 2 - 50;
-
- var background:FlxSprite;
- var curt:FlxSprite;
- var front:FlxSprite;
-
- var sick:FlxSprite;
-
- var text:FlxText;
- var blackBorder:FlxSprite;
-
- var bf:Boyfriend;
- var dad:Character;
- var gf:Character;
-
- var strumLine:FlxSprite;
- var strumLineNotes:FlxTypedGroup;
- var playerStrums:FlxTypedGroup;
- private var camHUD:FlxCamera;
-
- public override function create() {
- #if desktop
+ var defaultX:Float = FlxG.width * 0.55 - 135;
+ var defaultY:Float = FlxG.height / 2 - 50;
+
+ var sick:FlxSprite;
+
+ var text:FlxText;
+ var blackBorder:FlxSprite;
+
+ var laneunderlay:FlxSprite;
+ var laneunderlayOpponent:FlxSprite;
+
+ var strumLine:FlxSprite;
+ var strumLineNotes:FlxTypedGroup;
+ var playerStrums:FlxTypedGroup;
+ var cpuStrums:FlxTypedGroup;
+
+ var camPos:FlxPoint;
+
+ var pixelShitPart1:String = '';
+ var pixelShitPart2:String = '';
+ var pixelShitPart3:String = 'shared';
+ var pixelShitPart4:String = null;
+
+ private var camHUD:FlxCamera;
+ private var camGame:FlxCamera;
+ private var camFollow:FlxObject;
+ private var dataSuffix:Array = ['LEFT', 'DOWN', 'UP', 'RIGHT'];
+ private var dataColor:Array = ['purple', 'blue', 'green', 'red'];
+
+ public static var dad:Character;
+ public static var gf:Character;
+ public static var boyfriend:Boyfriend;
+ public static var Stage:Stage;
+ public static var freeplayBf:String = 'bf';
+ public static var freeplayDad:String = 'dad';
+ public static var freeplayGf:String = 'gf';
+ public static var freeplayNoteStyle:String = 'normal';
+ public static var freeplayStage:String = 'stage';
+ public static var freeplaySong:String = 'bopeebo';
+ public static var freeplayWeek:Int = 1;
+
+ public override function create()
+ {
+ super.create();
+
+ PlayStateChangeables.Optimize = false;
+
+ #if FEATURE_DISCORD
// Updating Discord Rich Presence
DiscordClient.changePresence("Customizing Gameplay Modules", null);
#end
- sick = new FlxSprite().loadGraphic(Paths.image('sick','shared'));
- sick.antialiasing = FlxG.save.data.antialiasing;
- sick.scrollFactor.set();
- background = new FlxSprite(-1000, -200).loadGraphic(Paths.image('stageback','shared'));
- curt = new FlxSprite(-500, -300).loadGraphic(Paths.image('stagecurtains','shared'));
- front = new FlxSprite(-650, 600).loadGraphic(Paths.image('stagefront','shared'));
- background.antialiasing = FlxG.save.data.antialiasing;
- curt.antialiasing = FlxG.save.data.antialiasing;
- front.antialiasing = FlxG.save.data.antialiasing;
-
- //Conductor.changeBPM(102);
- persistentUpdate = true;
-
- super.create();
-
+ camGame = new FlxCamera();
camHUD = new FlxCamera();
camHUD.bgColor.alpha = 0;
- FlxG.cameras.add(camHUD);
-
- camHUD.zoom = FlxG.save.data.zoom;
- background.scrollFactor.set(0.9,0.9);
- curt.scrollFactor.set(0.9,0.9);
- front.scrollFactor.set(0.9,0.9);
-
- add(background);
- add(front);
- add(curt);
-
- var camFollow = new FlxObject(0, 0, 1, 1);
-
- dad = new Character(100, 100, 'dad');
-
- bf = new Boyfriend(770, 450, 'bf');
-
- gf = new Character(400, 130, 'gf');
- gf.scrollFactor.set(0.95, 0.95);
-
- var camPos:FlxPoint = new FlxPoint(dad.getGraphicMidpoint().x + 400, dad.getGraphicMidpoint().y);
+ FlxG.cameras.reset(camGame);
+ FlxG.cameras.add(camHUD);
+
+ FlxCamera.defaultCameras = [camGame];
+
+ camHUD.zoom = FlxG.save.data.zoom;
+
+ persistentUpdate = persistentDraw = true;
+
+ // defaults if no stage was found in chart
+ var stageCheck:String = 'stage';
+
+ // If the stage isn't specified in the chart, we use the story week value.
+ if (freeplayStage == null)
+ {
+ switch (freeplayWeek)
+ {
+ case 2:
+ stageCheck = 'halloween';
+ case 3:
+ stageCheck = 'philly';
+ case 4:
+ stageCheck = 'limo';
+ case 5:
+ if (freeplaySong == 'winter-horrorland')
+ stageCheck = 'mallEvil';
+ else
+ stageCheck = 'mall';
+ case 6:
+ if (freeplaySong == 'thorns')
+ stageCheck = 'schoolEvil';
+ else
+ stageCheck = 'school';
+ }
+ }
+ else
+ stageCheck = freeplayStage;
+
+ // defaults if no gf was found in chart
+ var gfCheck:String = 'gf';
+
+ if (freeplayGf == null)
+ {
+ switch (freeplayWeek)
+ {
+ case 4:
+ gfCheck = 'gf-car';
+ case 5:
+ gfCheck = 'gf-christmas';
+ case 6:
+ gfCheck = 'gf-pixel';
+ }
+ }
+ else
+ gfCheck = freeplayGf;
+
+ gf = new Character(400, 130, gfCheck);
+
+ if (gf.frames == null)
+ {
+ #if debug
+ FlxG.log.warn(["Couldn't load gf: " + freeplayGf + ". Loading default gf"]);
+ #end
+ gf = new Character(400, 130, 'gf');
+ }
+
+ boyfriend = new Boyfriend(770, 450, freeplayBf);
+
+ if (boyfriend.frames == null)
+ {
+ #if debug
+ FlxG.log.warn(["Couldn't load boyfriend: " + freeplayBf + ". Loading default boyfriend"]);
+ #end
+ boyfriend = new Boyfriend(770, 450, 'bf');
+ }
+
+ dad = new Character(100, 100, freeplayDad);
+
+ if (dad.frames == null)
+ {
+ #if debug
+ FlxG.log.warn(["Couldn't load opponent: " + freeplayDad + ". Loading default opponent"]);
+ #end
+ dad = new Character(100, 100, 'dad');
+ }
+
+ Stage = new Stage(stageCheck);
+
+ var positions = Stage.positions[Stage.curStage];
+ if (positions != null)
+ {
+ for (char => pos in positions)
+ for (person in [boyfriend, gf, dad])
+ if (person.curCharacter == char)
+ person.setPosition(pos[0], pos[1]);
+ }
+ for (i in Stage.toAdd)
+ {
+ add(i);
+ }
+ for (index => array in Stage.layInFront)
+ {
+ switch (index)
+ {
+ case 0:
+ add(gf);
+ gf.scrollFactor.set(0.95, 0.95);
+ for (bg in array)
+ add(bg);
+ case 1:
+ add(dad);
+ for (bg in array)
+ add(bg);
+ case 2:
+ add(boyfriend);
+ for (bg in array)
+ add(bg);
+ }
+ }
+
+ camPos = new FlxPoint(boyfriend.getMidpoint().x - 100, boyfriend.getMidpoint().y - 100);
+
+ switch (dad.curCharacter)
+ {
+ case 'gf':
+ dad.setPosition(gf.x, gf.y);
+ gf.visible = false;
+ case 'spirit':
+ if (FlxG.save.data.distractions)
+ {
+ var evilTrail = new FlxTrail(dad, null, 4, 24, 0.3, 0.069);
+ add(evilTrail);
+ }
+ }
+
+ camFollow = new FlxObject(0, 0, 1, 1);
camFollow.setPosition(camPos.x, camPos.y);
- add(gf);
- add(bf);
- add(dad);
-
- add(sick);
+ switch (stageCheck)
+ {
+ case 'limo':
+ camFollow.x = boyfriend.getMidpoint().x - 300;
+ case 'mall':
+ camFollow.y = boyfriend.getMidpoint().y - 200;
+ case 'school' | 'schoolEvil':
+ camFollow.x = boyfriend.getMidpoint().x - 200;
+ camFollow.y = boyfriend.getMidpoint().y - 200;
+ }
add(camFollow);
FlxG.camera.follow(camFollow, LOCKON, 0.01);
- // FlxG.camera.setScrollBounds(0, FlxG.width, 0, FlxG.height);
- FlxG.camera.zoom = 0.9;
+ FlxG.camera.zoom = Stage.camZoom;
FlxG.camera.focusOn(camFollow.getPosition());
+ FlxG.worldBounds.set(0, 0, FlxG.width, FlxG.height);
+
strumLine = new FlxSprite(0, FlxG.save.data.strumline).makeGraphic(FlxG.width, 14);
strumLine.scrollFactor.set();
- strumLine.alpha = 0.4;
+ strumLine.alpha = 0.4;
+
+ add(strumLine);
- add(strumLine);
-
if (FlxG.save.data.downscroll)
strumLine.y = FlxG.height - 165;
+ laneunderlayOpponent = new FlxSprite(0, 0).makeGraphic(110 * 4 + 50, FlxG.height * 2);
+ laneunderlayOpponent.alpha = 1 - FlxG.save.data.laneTransparency;
+ laneunderlayOpponent.color = FlxColor.BLACK;
+ laneunderlayOpponent.scrollFactor.set();
+ laneunderlayOpponent.cameras = [camHUD];
+
+ laneunderlay = new FlxSprite(0, 0).makeGraphic(110 * 4 + 50, FlxG.height * 2);
+ laneunderlay.alpha = 1 - FlxG.save.data.laneTransparency;
+ laneunderlay.color = FlxColor.BLACK;
+ laneunderlay.scrollFactor.set();
+ laneunderlay.cameras = [camHUD];
+
+ if (FlxG.save.data.laneUnderlay)
+ {
+ if (!FlxG.save.data.middleScroll)
+ {
+ add(laneunderlayOpponent);
+ }
+ add(laneunderlay);
+ }
+
strumLineNotes = new FlxTypedGroup();
add(strumLineNotes);
playerStrums = new FlxTypedGroup();
+ cpuStrums = new FlxTypedGroup();
+
+ if (freeplayNoteStyle == 'pixel')
+ {
+ pixelShitPart1 = 'weeb/pixelUI/';
+ pixelShitPart2 = '-pixel';
+ pixelShitPart3 = 'week6';
+ pixelShitPart4 = 'week6';
+ }
+
+ sick = new FlxSprite().loadGraphic(Paths.loadImage(pixelShitPart1 + 'sick' + pixelShitPart2, pixelShitPart3));
+ sick.setGraphicSize(Std.int(sick.width * 0.7));
+ sick.scrollFactor.set();
+
+ if (freeplayNoteStyle != 'pixel')
+ {
+ sick.setGraphicSize(Std.int(sick.width * 0.7));
+ sick.antialiasing = FlxG.save.data.antialiasing;
+ }
+ else
+ sick.setGraphicSize(Std.int(sick.width * CoolUtil.daPixelZoom * 0.7));
+
+ sick.updateHitbox();
+ add(sick);
+
+ strumLine.cameras = [camHUD];
+ strumLineNotes.cameras = [camHUD];
+ sick.cameras = [camHUD];
- sick.cameras = [camHUD];
- strumLine.cameras = [camHUD];
- playerStrums.cameras = [camHUD];
-
generateStaticArrows(0);
generateStaticArrows(1);
- text = new FlxText(5, FlxG.height + 40, 0, "Click and drag around gameplay elements to customize their positions. Press R to reset. Q/E to change zoom. Press Escape to go back.", 12);
+ laneunderlay.x = playerStrums.members[0].x - 25;
+ laneunderlayOpponent.x = cpuStrums.members[0].x - 25;
+
+ laneunderlay.screenCenter(Y);
+ laneunderlayOpponent.screenCenter(Y);
+
+ text = new FlxText(5, FlxG.height + 40, 0,
+ "Click and drag around gameplay elements to customize their positions. Press R to reset. Q/E to change zoom. C to show combo. Escape to exit.",
+ 12);
text.scrollFactor.set();
text.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
-
- blackBorder = new FlxSprite(-30,FlxG.height + 40).makeGraphic((Std.int(text.width + 900)),Std.int(text.height + 600),FlxColor.BLACK);
- blackBorder.alpha = 0.5;
- background.cameras = [camHUD];
- text.cameras = [camHUD];
+ blackBorder = new FlxSprite(-30, FlxG.height + 40).makeGraphic((Std.int(text.width + 900)), Std.int(text.height + 600), FlxColor.BLACK);
+ blackBorder.alpha = 0.5;
- text.scrollFactor.set();
- background.scrollFactor.set();
+ blackBorder.cameras = [camHUD];
+ text.cameras = [camHUD];
add(blackBorder);
-
add(text);
- FlxTween.tween(text,{y: FlxG.height - 18},2,{ease: FlxEase.elasticInOut});
- FlxTween.tween(blackBorder,{y: FlxG.height - 18},2, {ease: FlxEase.elasticInOut});
+ FlxTween.tween(text, {y: FlxG.height - 18}, 2, {ease: FlxEase.elasticInOut});
+ FlxTween.tween(blackBorder, {y: FlxG.height - 18}, 2, {ease: FlxEase.elasticInOut});
- if (!FlxG.save.data.changedHit)
- {
- FlxG.save.data.changedHitX = defaultX;
- FlxG.save.data.changedHitY = defaultY;
- }
+ if (!FlxG.save.data.changedHit)
+ {
+ FlxG.save.data.changedHitX = defaultX;
+ FlxG.save.data.changedHitY = defaultY;
+ }
- sick.x = FlxG.save.data.changedHitX;
- sick.y = FlxG.save.data.changedHitY;
+ sick.x = FlxG.save.data.changedHitX;
+ sick.y = FlxG.save.data.changedHitY;
+ FlxG.mouse.visible = true;
+ }
- FlxG.mouse.visible = true;
+ override function update(elapsed:Float)
+ {
+ super.update(elapsed);
- }
+ Stage.update(elapsed);
- override function update(elapsed:Float) {
if (FlxG.sound.music != null)
Conductor.songPosition = FlxG.sound.music.time;
- super.update(elapsed);
-
- if (FlxG.save.data.zoom < 0.8)
- FlxG.save.data.zoom = 0.8;
-
- if (FlxG.save.data.zoom > 1.2)
- FlxG.save.data.zoom = 1.2;
-
- FlxG.camera.zoom = FlxMath.lerp(0.9, FlxG.camera.zoom, 0.95);
- camHUD.zoom = FlxMath.lerp(FlxG.save.data.zoom, camHUD.zoom, 0.95);
-
- if (FlxG.mouse.overlaps(sick) && FlxG.mouse.pressed)
- {
- sick.x = (FlxG.mouse.x - sick.width / 2) - 60;
- sick.y = (FlxG.mouse.y - sick.height) - 60;
- }
-
- for (i in playerStrums)
- i.y = strumLine.y;
- for (i in strumLineNotes)
- i.y = strumLine.y;
-
- if (FlxG.keys.justPressed.Q)
- {
- FlxG.save.data.zoom += 0.02;
- camHUD.zoom = FlxG.save.data.zoom;
- }
-
- if (FlxG.keys.justPressed.E)
- {
- FlxG.save.data.zoom -= 0.02;
- camHUD.zoom = FlxG.save.data.zoom;
- }
-
-
- if (FlxG.mouse.overlaps(sick) && FlxG.mouse.justReleased)
- {
- FlxG.save.data.changedHitX = sick.x;
- FlxG.save.data.changedHitY = sick.y;
- FlxG.save.data.changedHit = true;
- }
-
- if (FlxG.keys.justPressed.R)
- {
- sick.x = defaultX;
- sick.y = defaultY;
- FlxG.save.data.zoom = 1;
- camHUD.zoom = FlxG.save.data.zoom;
- FlxG.save.data.changedHitX = sick.x;
- FlxG.save.data.changedHitY = sick.y;
- FlxG.save.data.changedHit = false;
- }
-
- if (controls.BACK)
- {
- FlxG.mouse.visible = false;
- FlxG.sound.play(Paths.sound('cancelMenu'));
- FlxG.switchState(new OptionsMenu());
- }
-
- }
-
- override function beatHit()
- {
- super.beatHit();
-
- bf.playAnim('idle', true);
- dad.dance(true);
- gf.dance();
-
- FlxG.camera.zoom += 0.015;
- camHUD.zoom += 0.010;
-
- trace('beat');
-
- }
-
-
- // ripped from play state cuz im lazy
-
+ if (FlxG.save.data.zoom < 0.8)
+ FlxG.save.data.zoom = 0.8;
+
+ if (FlxG.save.data.zoom > 1.2)
+ FlxG.save.data.zoom = 1.2;
+
+ FlxG.camera.zoom = FlxMath.lerp(Stage.camZoom, FlxG.camera.zoom, 0.95);
+ camHUD.zoom = FlxMath.lerp(FlxG.save.data.zoom, camHUD.zoom, 0.95);
+
+ if (FlxG.mouse.overlaps(sick) && FlxG.mouse.pressed)
+ {
+ sick.x = (FlxG.mouse.x - (sick.width + 145));
+ sick.y = (FlxG.mouse.y - (sick.height + 145));
+ }
+
+ for (i in playerStrums)
+ i.y = strumLine.y;
+ for (i in strumLineNotes)
+ i.y = strumLine.y;
+
+ if (FlxG.keys.justPressed.Q)
+ {
+ FlxG.save.data.zoom += 0.02;
+ camHUD.zoom = FlxG.save.data.zoom;
+ }
+
+ if (FlxG.keys.justPressed.E)
+ {
+ FlxG.save.data.zoom -= 0.02;
+ camHUD.zoom = FlxG.save.data.zoom;
+ }
+
+ if (FlxG.mouse.overlaps(sick) && FlxG.mouse.justReleased)
+ {
+ FlxG.save.data.changedHitX = sick.x;
+ FlxG.save.data.changedHitY = sick.y;
+ FlxG.save.data.changedHit = true;
+ }
+
+ if (FlxG.keys.justPressed.C)
+ {
+ var visibleCombos:Array = [];
+
+ var seperatedScore:Array = [];
+
+ var comboSplit:Array = (FlxG.random.int(10, 420) + "").split('');
+
+ // make sure we have 3 digits to display (looks weird otherwise lol)
+ if (comboSplit.length == 1)
+ {
+ seperatedScore.push(0);
+ seperatedScore.push(0);
+ }
+ else if (comboSplit.length == 2)
+ seperatedScore.push(0);
+
+ for (i in 0...comboSplit.length)
+ {
+ var str:String = comboSplit[i];
+ seperatedScore.push(Std.parseInt(str));
+ }
+
+ var daLoop:Int = 0;
+ for (i in seperatedScore)
+ {
+ var numScore:FlxSprite = new FlxSprite().loadGraphic(Paths.loadImage(pixelShitPart1 + 'num' + Std.int(i) + pixelShitPart2, pixelShitPart4));
+ numScore.screenCenter();
+ numScore.x = sick.x + (43 * daLoop) - 50;
+ numScore.y = sick.y + 100;
+ numScore.cameras = [camHUD];
+
+ if (freeplayNoteStyle != 'pixel')
+ {
+ numScore.antialiasing = FlxG.save.data.antialiasing;
+ numScore.setGraphicSize(Std.int(numScore.width * 0.5));
+ }
+ else
+ numScore.setGraphicSize(Std.int(numScore.width * CoolUtil.daPixelZoom));
+
+ numScore.updateHitbox();
+
+ numScore.acceleration.y = FlxG.random.int(200, 300);
+ numScore.velocity.y -= FlxG.random.int(140, 160);
+ numScore.velocity.x = FlxG.random.float(-5, 5);
+
+ add(numScore);
+
+ visibleCombos.push(numScore);
+
+ FlxTween.tween(numScore, {alpha: 0}, 0.2, {
+ onComplete: function(tween:FlxTween)
+ {
+ visibleCombos.remove(numScore);
+ numScore.destroy();
+ },
+ onUpdate: function(tween:FlxTween)
+ {
+ if (!visibleCombos.contains(numScore))
+ {
+ tween.cancel();
+ numScore.destroy();
+ }
+ },
+ startDelay: Conductor.crochet * 0.002
+ });
+
+ if (visibleCombos.length > seperatedScore.length + 20)
+ {
+ for (i in 0...seperatedScore.length - 1)
+ {
+ visibleCombos.remove(visibleCombos[visibleCombos.length - 1]);
+ }
+ }
+
+ daLoop++;
+ }
+ }
+
+ if (FlxG.keys.justPressed.R)
+ {
+ sick.x = defaultX;
+ sick.y = defaultY;
+ FlxG.save.data.zoom = 1;
+ camHUD.zoom = FlxG.save.data.zoom;
+ FlxG.save.data.changedHitX = sick.x;
+ FlxG.save.data.changedHitY = sick.y;
+ FlxG.save.data.changedHit = false;
+ }
+
+ if (controls.BACK)
+ {
+ FlxG.mouse.visible = false;
+ FlxG.sound.play(Paths.sound('cancelMenu'));
+ FlxG.switchState(new OptionsDirect());
+ }
+ }
+
+ override function beatHit()
+ {
+ super.beatHit();
+
+ if (curBeat % 2 == 0)
+ {
+ boyfriend.dance();
+ dad.dance();
+ }
+ else if (dad.curCharacter == 'spooky' || dad.curCharacter == 'gf')
+ dad.dance();
+
+ gf.dance();
+
+ if (!FlxG.keys.pressed.SPACE)
+ {
+ FlxG.camera.zoom += 0.015;
+ camHUD.zoom += 0.010;
+ }
+
+ trace('beat');
+ }
+
+ // ripped from playstate cuz lol
private function generateStaticArrows(player:Int):Void
- {
- for (i in 0...4)
- {
- // FlxG.log.add(i);
- var babyArrow:FlxSprite = new FlxSprite(0, strumLine.y);
- babyArrow.frames = Paths.getSparrowAtlas('NOTE_assets', 'shared');
- babyArrow.animation.addByPrefix('green', 'arrowUP');
- babyArrow.animation.addByPrefix('blue', 'arrowDOWN');
- babyArrow.animation.addByPrefix('purple', 'arrowLEFT');
- babyArrow.animation.addByPrefix('red', 'arrowRIGHT');
- babyArrow.antialiasing = FlxG.save.data.antialiasing;
- babyArrow.setGraphicSize(Std.int(babyArrow.width * 0.7));
- switch (Math.abs(i))
- {
- case 0:
- babyArrow.x += Note.swagWidth * 0;
- babyArrow.animation.addByPrefix('static', 'arrowLEFT');
- babyArrow.animation.addByPrefix('pressed', 'left press', 24, false);
- babyArrow.animation.addByPrefix('confirm', 'left confirm', 24, false);
- case 1:
- babyArrow.x += Note.swagWidth * 1;
- babyArrow.animation.addByPrefix('static', 'arrowDOWN');
- babyArrow.animation.addByPrefix('pressed', 'down press', 24, false);
- babyArrow.animation.addByPrefix('confirm', 'down confirm', 24, false);
- case 2:
- babyArrow.x += Note.swagWidth * 2;
- babyArrow.animation.addByPrefix('static', 'arrowUP');
- babyArrow.animation.addByPrefix('pressed', 'up press', 24, false);
- babyArrow.animation.addByPrefix('confirm', 'up confirm', 24, false);
- case 3:
- babyArrow.x += Note.swagWidth * 3;
- babyArrow.animation.addByPrefix('static', 'arrowRIGHT');
- babyArrow.animation.addByPrefix('pressed', 'right press', 24, false);
- babyArrow.animation.addByPrefix('confirm', 'right confirm', 24, false);
- }
- babyArrow.updateHitbox();
- babyArrow.scrollFactor.set();
-
- babyArrow.ID = i;
-
- if (player == 1)
- playerStrums.add(babyArrow);
-
- babyArrow.animation.play('static');
- babyArrow.x += 50;
- babyArrow.x += ((FlxG.width / 2) * player);
-
- strumLineNotes.add(babyArrow);
- }
- }
-}
\ No newline at end of file
+ {
+ for (i in 0...4)
+ {
+ var babyArrow:StaticArrow = new StaticArrow(-10, strumLine.y);
+
+ // defaults if no noteStyle was found in chart
+ var noteTypeCheck:String = 'normal';
+
+ if (freeplayNoteStyle == null && FlxG.save.data.overrideNoteskins)
+ {
+ switch (freeplayWeek)
+ {
+ case 6:
+ noteTypeCheck = 'pixel';
+ }
+ }
+ else
+ noteTypeCheck = freeplayNoteStyle;
+
+ switch (noteTypeCheck)
+ {
+ case 'pixel':
+ babyArrow.loadGraphic(Paths.loadImage('weeb/pixelUI/arrows-pixels', 'week6'), true, 17, 17);
+ babyArrow.animation.add('green', [6]);
+ babyArrow.animation.add('red', [7]);
+ babyArrow.animation.add('blue', [5]);
+ babyArrow.animation.add('purplel', [4]);
+
+ babyArrow.setGraphicSize(Std.int(babyArrow.width * CoolUtil.daPixelZoom));
+ babyArrow.updateHitbox();
+ babyArrow.antialiasing = false;
+
+ babyArrow.x += Note.swagWidth * i;
+ babyArrow.animation.add('static', [i]);
+ babyArrow.animation.add('pressed', [4 + i, 8 + i], 12, false);
+ babyArrow.animation.add('confirm', [12 + i, 16 + i], 24, false);
+
+ for (j in 0...4)
+ {
+ babyArrow.animation.add('dirCon' + j, [12 + j, 16 + j], 24, false);
+ }
+
+ default:
+ babyArrow.frames = NoteskinHelpers.generateNoteskinSprite(FlxG.save.data.noteskin);
+ for (j in 0...4)
+ {
+ babyArrow.animation.addByPrefix(dataColor[j], 'arrow' + dataSuffix[j]);
+ babyArrow.animation.addByPrefix('dirCon' + j, dataSuffix[j].toLowerCase() + ' confirm', 24, false);
+ }
+
+ var lowerDir:String = dataSuffix[i].toLowerCase();
+
+ babyArrow.animation.addByPrefix('static', 'arrow' + dataSuffix[i]);
+ babyArrow.animation.addByPrefix('pressed', lowerDir + ' press', 24, false);
+ babyArrow.animation.addByPrefix('confirm', lowerDir + ' confirm', 24, false);
+
+ babyArrow.x += Note.swagWidth * i;
+
+ babyArrow.antialiasing = FlxG.save.data.antialiasing;
+ babyArrow.setGraphicSize(Std.int(babyArrow.width * 0.7));
+ }
+
+ babyArrow.updateHitbox();
+ babyArrow.scrollFactor.set();
+
+ babyArrow.ID = i;
+
+ switch (player)
+ {
+ case 0:
+ babyArrow.visible = !FlxG.save.data.middleScroll;
+ babyArrow.x += 20;
+ cpuStrums.add(babyArrow);
+ case 1:
+ playerStrums.add(babyArrow);
+ }
+
+ babyArrow.playAnim('static');
+ babyArrow.x += 110;
+ babyArrow.x += ((FlxG.width / 2) * player);
+
+ if (FlxG.save.data.middleScroll)
+ babyArrow.x -= 320;
+
+ cpuStrums.forEach(function(spr:FlxSprite)
+ {
+ spr.centerOffsets(); // CPU arrows start out slightly off-center
+ });
+
+ strumLineNotes.add(babyArrow);
+ }
+ }
+}
diff --git a/source/GitarooPause.hx b/source/GitarooPause.hx
index 1e35766d34..cce3c49ad1 100644
--- a/source/GitarooPause.hx
+++ b/source/GitarooPause.hx
@@ -21,7 +21,7 @@ class GitarooPause extends MusicBeatState
if (FlxG.sound.music != null)
FlxG.sound.music.stop();
- var bg:FlxSprite = new FlxSprite().loadGraphic(Paths.image('pauseAlt/pauseBG'));
+ var bg:FlxSprite = new FlxSprite().loadGraphic(Paths.loadImage('pauseAlt/pauseBG'));
bg.antialiasing = FlxG.save.data.antialiasing;
add(bg);
diff --git a/source/GlobalVideo.hx b/source/GlobalVideo.hx
index 2c4f70781f..5ff1434d81 100644
--- a/source/GlobalVideo.hx
+++ b/source/GlobalVideo.hx
@@ -15,33 +15,35 @@ class GlobalVideo
{
video = vid;
}
-
+
public static function getVid():VideoHandler
{
return video;
}
-
+
public static function setWebm(vid:WebmHandler):Void
{
webm = vid;
isWebm = true;
}
-
+
public static function getWebm():WebmHandler
{
return webm;
}
-
+
public static function get():Dynamic
{
if (isWebm)
{
return getWebm();
- } else {
+ }
+ else
+ {
return getVid();
}
}
-
+
public static function calc(ind:Int):Dynamic
{
var stageWidth:Int = Lib.current.stage.stageWidth;
@@ -49,36 +51,36 @@ class GlobalVideo
var width:Float = GameDimensions.width;
var height:Float = GameDimensions.height;
-
- //trace("AH: " + stageWidth);
- //trace(width);
-
+
+ // trace("AH: " + stageWidth);
+ // trace(width);
+
var ratioX:Float = height / width;
var ratioY:Float = width / height;
var appliedWidth:Float = stageHeight * ratioY;
var appliedHeight:Float = stageWidth * ratioX;
- //trace(appliedWidth);
+ // trace(appliedWidth);
var remainingX:Float = stageWidth - appliedWidth;
var remainingY:Float = stageHeight - appliedHeight;
remainingX = remainingX / 2;
remainingY = remainingY / 2;
-
+
appliedWidth = Std.int(appliedWidth);
appliedHeight = Std.int(appliedHeight);
-
+
if (appliedHeight > stageHeight)
{
remainingY = 0;
appliedHeight = stageHeight;
}
-
+
if (appliedWidth > stageWidth)
{
remainingX = 0;
appliedWidth = stageWidth;
}
-
- switch(ind)
+
+ switch (ind)
{
case 0:
return remainingX;
@@ -89,7 +91,7 @@ class GlobalVideo
case 3:
return appliedHeight;
}
-
+
return null;
}
-}
\ No newline at end of file
+}
diff --git a/source/HealthIcon.hx b/source/HealthIcon.hx
index cd380d2ff8..19eafb1b9d 100644
--- a/source/HealthIcon.hx
+++ b/source/HealthIcon.hx
@@ -2,6 +2,7 @@ package;
import flixel.FlxG;
import flixel.FlxSprite;
+import openfl.utils.Assets as OpenFlAssets;
using StringTools;
@@ -25,8 +26,6 @@ class HealthIcon extends FlxSprite
isPlayer = isOldIcon = false;
- antialiasing = FlxG.save.data.antialiasing;
-
changeIcon(char);
scrollFactor.set();
}
@@ -41,11 +40,16 @@ class HealthIcon extends FlxSprite
if (char != 'bf-pixel' && char != 'bf-old')
char = char.split("-")[0];
- loadGraphic(Paths.image('icons/icon-' + char), true, 150, 150);
- if(char.endsWith('-pixel') || char.startsWith('senpai') || char.startsWith('spirit'))
+ if (!OpenFlAssets.exists(Paths.image('icons/icon-' + char)))
+ char = 'face';
+
+ loadGraphic(Paths.loadImage('icons/icon-' + char), true, 150, 150);
+
+ if (char.endsWith('-pixel') || char.startsWith('senpai') || char.startsWith('spirit'))
antialiasing = false
else
antialiasing = FlxG.save.data.antialiasing;
+
animation.add(char, [0, 1], 0, false, isPlayer);
animation.play(char);
}
diff --git a/source/HelperFunctions.hx b/source/HelperFunctions.hx
index e6dc6a94f0..925ac955c0 100644
--- a/source/HelperFunctions.hx
+++ b/source/HelperFunctions.hx
@@ -3,15 +3,16 @@ import flixel.math.FlxMath;
class HelperFunctions
{
- public static function truncateFloat( number : Float, precision : Int): Float {
+ public static function truncateFloat(number:Float, precision:Int):Float
+ {
var num = number;
num = num * Math.pow(10, precision);
- num = Math.round( num ) / Math.pow(10, precision);
+ num = Math.round(num) / Math.pow(10, precision);
return num;
}
- public static function GCD(a, b) {
+ public static function GCD(a, b)
+ {
return b == 0 ? FlxMath.absInt(a) : GCD(b, a % b);
}
-
-}
\ No newline at end of file
+}
diff --git a/source/Highscore.hx b/source/Highscore.hx
index 8d82fcbc6a..a86800d3d0 100644
--- a/source/Highscore.hx
+++ b/source/Highscore.hx
@@ -3,6 +3,7 @@ package;
import flixel.FlxG;
using StringTools;
+
class Highscore
{
#if (haxe >= "4.0.0")
@@ -13,17 +14,11 @@ class Highscore
public static var songCombos:Map = new Map();
#end
-
public static function saveScore(song:String, score:Int = 0, ?diff:Int = 0):Void
{
var daSong:String = formatSong(song, diff);
-
- #if !switch
- NGio.postScore(score, song);
- #end
-
- if(!FlxG.save.data.botplay)
+ if (!FlxG.save.data.botplay)
{
if (songScores.exists(daSong))
{
@@ -32,7 +27,9 @@ class Highscore
}
else
setScore(daSong, score);
- }else trace('BotPlay detected. Score saving is disabled.');
+ }
+ else
+ trace('BotPlay detected. Score saving is disabled.');
}
public static function saveCombo(song:String, combo:String, ?diff:Int = 0):Void
@@ -40,7 +37,7 @@ class Highscore
var daSong:String = formatSong(song, diff);
var finalCombo:String = combo.split(')')[0].replace('(', '');
- if(!FlxG.save.data.botplay)
+ if (!FlxG.save.data.botplay)
{
if (songCombos.exists(daSong))
{
@@ -54,12 +51,7 @@ class Highscore
public static function saveWeekScore(week:Int = 1, score:Int = 0, ?diff:Int = 0):Void
{
-
- #if !switch
- NGio.postScore(score, "Week " + week);
- #end
-
- if(!FlxG.save.data.botplay)
+ if (!FlxG.save.data.botplay)
{
var daWeek:String = formatSong('week' + week, diff);
@@ -70,7 +62,9 @@ class Highscore
}
else
setScore(daWeek, score);
- }else trace('BotPlay detected. Score saving is disabled.');
+ }
+ else
+ trace('BotPlay detected. Score saving is disabled.');
}
/**
@@ -106,7 +100,7 @@ class Highscore
static function getComboInt(combo:String):Int
{
- switch(combo)
+ switch (combo)
{
case 'SDCB':
return 1;
diff --git a/source/HitGraph.hx b/source/HitGraph.hx
index 4b9ed586b9..cb9d5c2ce2 100644
--- a/source/HitGraph.hx
+++ b/source/HitGraph.hx
@@ -55,7 +55,7 @@ class HitGraph extends Sprite
_width = Width;
_height = Height;
- var bm = new BitmapData(Width,Height);
+ var bm = new BitmapData(Width, Height);
bm.draw(this);
bitmap = new Bitmap(bm);
@@ -64,8 +64,8 @@ class HitGraph extends Sprite
ts = Math.floor((PlayState.rep.replay.sf / 60) * 1000) / 166;
- var early = createTextField(10,10,FlxColor.WHITE,12);
- var late = createTextField(10,_height - 20,FlxColor.WHITE,12);
+ var early = createTextField(10, 10, FlxColor.WHITE, 12);
+ var late = createTextField(10, _height - 20, FlxColor.WHITE, 12);
early.text = "Early (" + -166 * ts + "ms)";
late.text = "Late (" + 166 * ts + "ms)";
@@ -97,7 +97,6 @@ class HitGraph extends Sprite
gfx.moveTo(0, _height / 2);
gfx.lineTo(_width, _height / 2);
-
}
public static function createTextField(X:Float = 0, Y:Float = 0, Color:FlxColor = FlxColor.WHITE, Size:Int = 12):TextField
@@ -125,7 +124,6 @@ class HitGraph extends Sprite
function drawJudgementLine(ms:Float):Void
{
-
var gfx:Graphics = graphics;
gfx.lineStyle(1, graphColor, 0.3);
@@ -144,7 +142,7 @@ class HitGraph extends Sprite
var graphX = _axis.x + 1;
- gfx.drawRect(graphX,pointY, _width,1);
+ gfx.drawRect(graphX, pointY, _width, 1);
gfx.lineStyle(1, graphColor, 1);
}
@@ -159,35 +157,35 @@ class HitGraph extends Sprite
gfx.lineStyle(1, graphColor, 1);
gfx.beginFill(0x00FF00);
- drawJudgementLine(45 );
+ drawJudgementLine(45);
gfx.endFill();
gfx.beginFill(0xFF0000);
- drawJudgementLine(90 );
+ drawJudgementLine(90);
gfx.endFill();
gfx.beginFill(0x8b0000);
- drawJudgementLine(135 );
+ drawJudgementLine(135);
gfx.endFill();
gfx.beginFill(0x580000);
- drawJudgementLine(166 );
+ drawJudgementLine(166);
gfx.endFill();
gfx.beginFill(0x00FF00);
- drawJudgementLine(-45 );
+ drawJudgementLine(-45);
gfx.endFill();
gfx.beginFill(0xFF0000);
- drawJudgementLine(-90 );
+ drawJudgementLine(-90);
gfx.endFill();
gfx.beginFill(0x8b0000);
- drawJudgementLine(-135 );
+ drawJudgementLine(-135);
gfx.endFill();
gfx.beginFill(0x580000);
- drawJudgementLine(-166 );
+ drawJudgementLine(-166);
gfx.endFill();
var range:Float = Math.max(maxValue - minValue, maxValue * 0.1);
@@ -203,14 +201,14 @@ class HitGraph extends Sprite
if (ana.hit)
gfx.beginFill(0xFFFF00);
- else
+ else
gfx.beginFill(0xC2B280);
if (ana.hitTime < 0)
continue;
var pointY = (-value * _height - 1) + _height;
- gfx.drawRect(graphX + fitX(ana.hitTime), pointY,2,2);
+ gfx.drawRect(graphX + fitX(ana.hitTime), pointY, 2, 2);
gfx.endFill();
}
}
@@ -220,7 +218,7 @@ class HitGraph extends Sprite
var value = (history[i][0] - minValue) / range;
var judge = history[i][1];
- switch(judge)
+ switch (judge)
{
case "sick":
gfx.beginFill(0x00FFFF);
@@ -238,26 +236,25 @@ class HitGraph extends Sprite
var pointY = ((-value * _height - 1) + _height);
/*if (i == 0)
- gfx.moveTo(graphX, _axis.y + pointY);*/
- gfx.drawRect(fitX(history[i][2]), pointY,4,4);
+ gfx.moveTo(graphX, _axis.y + pointY); */
+ gfx.drawRect(fitX(history[i][2]), pointY, 4, 4);
gfx.endFill();
}
-
- var bm = new BitmapData(_width,_height);
+ var bm = new BitmapData(_width, _height);
bm.draw(this);
bitmap = new Bitmap(bm);
}
public function fitX(x:Float)
{
- return (x / FlxG.sound.music.length) * width;
+ return ((x / (FlxG.sound.music.length / PlayState.songMultiplier)) * width) * PlayState.songMultiplier;
}
-
+
public function addToHistory(diff:Float, judge:String, time:Float)
{
- history.push([diff,judge, time]);
+ history.push([diff, judge, time]);
}
public function update():Void
@@ -278,4 +275,4 @@ class HitGraph extends Sprite
_axis = FlxDestroyUtil.removeChild(this, _axis);
history = null;
}
-}
\ No newline at end of file
+}
diff --git a/source/ImageOutline.hx b/source/ImageOutline.hx
new file mode 100644
index 0000000000..d990982619
--- /dev/null
+++ b/source/ImageOutline.hx
@@ -0,0 +1,161 @@
+// credits, original source https://lassieadventurestudio.wordpress.com/2008/10/07/image-outline/
+import openfl.display.IBitmapDrawable;
+import openfl.display.BitmapData;
+import openfl.display.Bitmap;
+import openfl.display.DisplayObject;
+import openfl.geom.Matrix;
+import openfl.geom.Rectangle;
+import openfl.geom.Point;
+
+class ImageOutline
+{
+ private static var _color:UInt;
+ private static var _hex:String = "";
+ private static var _alpha:Float = 1;
+ private static var _weight:Float = 2;
+ private static var _brush:Float = 4;
+ private static var m:Matrix;
+
+ public function new()
+ {
+ }
+
+ /**
+ * Renders a Bitmap display of any DisplayObject with an outline drawn around it.
+ * @note: see param descriptions on "outline" method below.
+ */
+ public static function renderImage(src:IBitmapDrawable, weight:Int, color:UInt, alpha:Float = 1, antialias:Bool = false, threshold:Int = 150):Bitmap
+ {
+ var w:Int = 0;
+ var h:Int = 0;
+
+ // extract dimensions from actual object type.
+ // (unfortunately, IBitmapDrawable does not include width and height getters.)
+ if (Std.is(src, DisplayObject))
+ {
+ var dsp:DisplayObject = cast(src, DisplayObject);
+ m = dsp.transform.matrix;
+ w = Std.int(dsp.width);
+ h = Std.int(dsp.height);
+ }
+ else if (Std.is(src, BitmapData))
+ {
+ var bmp:BitmapData = cast(src, BitmapData);
+ w = Std.int(bmp.width);
+ h = Std.int(bmp.height);
+ }
+
+ var render:BitmapData = new BitmapData(w, h, true, 0x000000);
+ render.draw(src, m);
+
+ return new Bitmap(ImageOutline.outline(render, weight, color, alpha, antialias, threshold));
+ }
+
+ /**
+ * Renders an outline around a BitmapData image.
+ * Outline is rendered based on image's alpha channel.
+ * @param: src = source BitmapData image to outline.
+ * @param: weight = stroke thickness (in pixels) of outline.
+ * @param: color = color of outline.
+ * @param: alpha = opacity of outline (range of 0 to 1).
+ * @param: antialias = smooth edge (true), or jagged edge (false).
+ * @param: threshold = Alpha sensativity to source image (0 - 255). Used when drawing a jagged edge based on an antialiased source image.
+ * @return: BitmapData of rendered outline image.
+ */
+ public static function outline(src:BitmapData, weight:Int, color:UInt, alpha:Float = 1, antialias:Bool = false, threshold:Int = 150):BitmapData
+ {
+ _color = color;
+ _hex = _toHexString(color);
+ _alpha = alpha;
+ _weight = weight;
+ _brush = (weight * 2) + 1;
+
+ var copy:BitmapData = new BitmapData(Std.int(src.width + _brush), Std.int(src.height + _brush), true, 0x00000000);
+
+ for (iy in 0...src.height)
+ {
+ for (ix in 0...src.width)
+ {
+ // get current pixel's alpha component.
+ var a:Float = (src.getPixel32(ix, iy) >> 24 & 0xFF);
+
+ if (antialias)
+ {
+ // if antialiasing,
+ // draw anti-aliased edge.
+ _antialias(copy, ix, iy, Std.int(a));
+ }
+ else if (a > threshold)
+ {
+ // if aliasing and pixel alpha is above draw threshold,
+ // draw aliased edge.
+ _alias(copy, ix, iy);
+ }
+ }
+ }
+
+ // merge source image display into the outline shape's canvas.
+ copy.copyPixels(src, new Rectangle(0, 0, copy.width, copy.height), new Point(_weight, _weight), null, null, true);
+ return copy;
+ }
+
+ /**
+ * Renders an antialiased pixel block.
+ */
+ private static function _antialias(copy:BitmapData, x:Int, y:Int, a:Int):BitmapData
+ {
+ if (a > 0)
+ {
+ for (iy in y...Std.int(y + _brush))
+ {
+ for (ix in x...Std.int(x + _brush))
+ {
+ // get current pixel's alpha component.
+ var px:Float = (copy.getPixel32(ix, iy) >> 24 & 0xFF);
+
+ // set pixel if it's target adjusted alpha is greater than the current value.
+ if (px < (a * _alpha))
+ copy.setPixel32(ix, iy, _parseARGB(Std.int(a * _alpha)));
+ }
+ }
+ }
+ return copy;
+ }
+
+ /**
+ * Renders an aliased pixel block.
+ */
+ private static function _alias(copy:BitmapData, x:Int, y:Int):BitmapData
+ {
+ copy.fillRect(new Rectangle(x, y, _brush, _brush), _parseARGB(Std.int(_alpha * 255)));
+ return copy;
+ }
+
+ /**
+ * Utility to parse an ARGB value from the current hex value
+ * Hex string is cached on the class so that it does not need to be recalculated for every pixel.
+ */
+ private static function _parseARGB(a:Int):UInt
+ {
+ return Std.parseInt("0x" + StringTools.hex(a) + _hex);
+ }
+
+ /**
+ * Utility to parse a hex string from a hex number.
+ */
+ private static function _toHexString(hex:UInt):String
+ {
+ var r:Int = (hex >> 16);
+ var g:Int = (hex >> 8 ^ r << 8);
+ var b:Int = (hex ^ (r << 16 | g << 8));
+
+ var red:String = StringTools.hex(r);
+ var green:String = StringTools.hex(g);
+ var blue:String = StringTools.hex(b);
+
+ red = (red.length < 2) ? "0" + red : red;
+ green = (green.length < 2) ? "0" + green : green;
+ blue = (blue.length < 2) ? "0" + blue : blue;
+ return (red + green + blue).toUpperCase();
+ }
+}
diff --git a/source/KadeEngineData.hx b/source/KadeEngineData.hx
index 2fc7cc5354..eedd5d560c 100644
--- a/source/KadeEngineData.hx
+++ b/source/KadeEngineData.hx
@@ -4,9 +4,9 @@ import flixel.FlxG;
class KadeEngineData
{
- public static function initSave()
- {
- if (FlxG.save.data.weekUnlocked == null)
+ public static function initSave()
+ {
+ if (FlxG.save.data.weekUnlocked == null)
FlxG.save.data.weekUnlocked = 7;
if (FlxG.save.data.newInput == null)
@@ -23,7 +23,7 @@ class KadeEngineData
if (FlxG.save.data.dfjk == null)
FlxG.save.data.dfjk = false;
-
+
if (FlxG.save.data.accuracyDisplay == null)
FlxG.save.data.accuracyDisplay = true;
@@ -49,9 +49,9 @@ class KadeEngineData
if (FlxG.save.data.fpsCap == null)
FlxG.save.data.fpsCap = 120;
- if (FlxG.save.data.fpsCap > 285 || FlxG.save.data.fpsCap < 60)
+ if (FlxG.save.data.fpsCap > 340 || FlxG.save.data.fpsCap < 60)
FlxG.save.data.fpsCap = 120; // baby proof so you can't hard lock ur copy of kade engine
-
+
if (FlxG.save.data.scrollSpeed == null)
FlxG.save.data.scrollSpeed = 1;
@@ -72,11 +72,11 @@ class KadeEngineData
if (FlxG.save.data.distractions == null)
FlxG.save.data.distractions = true;
-
- if (FlxG.save.data.colour == null)
+
+ if (FlxG.save.data.colour == null)
FlxG.save.data.colour = true;
-
- if (FlxG.save.data.stepMania == null)
+
+ if (FlxG.save.data.stepMania == null)
FlxG.save.data.stepMania = false;
if (FlxG.save.data.flashing == null)
@@ -87,7 +87,7 @@ class KadeEngineData
if (FlxG.save.data.InstantRespawn == null)
FlxG.save.data.InstantRespawn = false;
-
+
if (FlxG.save.data.botplay == null)
FlxG.save.data.botplay = false;
@@ -96,7 +96,7 @@ class KadeEngineData
if (FlxG.save.data.strumline == null)
FlxG.save.data.strumline = false;
-
+
if (FlxG.save.data.customStrumLine == null)
FlxG.save.data.customStrumLine = 0;
@@ -111,18 +111,58 @@ class KadeEngineData
if (FlxG.save.data.optimize == null)
FlxG.save.data.optimize = false;
-
- if (FlxG.save.data.cacheImages == null)
- FlxG.save.data.cacheImages = false;
+
+ FlxG.save.data.cacheImages = false;
+
+ if (FlxG.save.data.middleScroll == null)
+ FlxG.save.data.middleScroll = false;
if (FlxG.save.data.editorBG == null)
FlxG.save.data.editor = false;
-
+
if (FlxG.save.data.zoom == null)
FlxG.save.data.zoom = 1;
+ if (FlxG.save.data.judgementCounter == null)
+ FlxG.save.data.judgementCounter = true;
+
+ if (FlxG.save.data.laneUnderlay == null)
+ FlxG.save.data.laneUnderlay = true;
+
+ if (FlxG.save.data.healthBar == null)
+ FlxG.save.data.healthBar = true;
+
+ if (FlxG.save.data.laneTransparency == null)
+ FlxG.save.data.laneTransparency = 0;
+
+ if (FlxG.save.data.shitMs == null)
+ FlxG.save.data.shitMs = 160.0;
+
+ if (FlxG.save.data.badMs == null)
+ FlxG.save.data.badMs = 135.0;
+
+ if (FlxG.save.data.goodMs == null)
+ FlxG.save.data.goodMs = 90.0;
+
+ if (FlxG.save.data.sickMs == null)
+ FlxG.save.data.sickMs = 45.0;
+
+ Ratings.timingWindows = [
+ FlxG.save.data.shitMs,
+ FlxG.save.data.badMs,
+ FlxG.save.data.goodMs,
+ FlxG.save.data.sickMs
+ ];
+
+ if (FlxG.save.data.noteskin == null)
+ FlxG.save.data.noteskin = 0;
+
+ // Gonna make this an option on another PR
+ if (FlxG.save.data.overrideNoteskins == null)
+ FlxG.save.data.overrideNoteskins = false;
+
var gamepad:FlxGamepad = FlxG.gamepads.lastActive;
-
+
KeyBinds.gamepad = gamepad != null;
Conductor.recalculateTimings();
@@ -131,6 +171,6 @@ class KadeEngineData
Main.watermarks = FlxG.save.data.watermark;
- (cast (Lib.current.getChildAt(0), Main)).setFPSCap(FlxG.save.data.fpsCap);
+ (cast(Lib.current.getChildAt(0), Main)).setFPSCap(FlxG.save.data.fpsCap);
}
}
diff --git a/source/KadeEngineFPS.hx b/source/KadeEngineFPS.hx
new file mode 100644
index 0000000000..9a99ae6c9d
--- /dev/null
+++ b/source/KadeEngineFPS.hx
@@ -0,0 +1,138 @@
+import flixel.math.FlxMath;
+import flixel.util.FlxColor;
+import openfl.Lib;
+import openfl.display.Bitmap;
+import openfl.display.BitmapData;
+import flixel.FlxG;
+import haxe.Timer;
+import openfl.events.Event;
+import openfl.text.TextField;
+import openfl.text.TextFormat;
+#if gl_stats
+import openfl.display._internal.stats.Context3DStats;
+import openfl.display._internal.stats.DrawCallContext;
+#end
+#if flash
+import openfl.Lib;
+#end
+
+/**
+ The FPS class provides an easy-to-use monitor to display
+ the current frame rate of an OpenFL project
+**/
+#if !openfl_debug
+@:fileXml('tags="haxe,release"')
+@:noDebug
+#end
+class KadeEngineFPS extends TextField
+{
+ /**
+ The current frame rate, expressed using frames-per-second
+ **/
+ public var currentFPS(default, null):Int;
+
+ public var bitmap:Bitmap;
+
+ @:noCompletion private var cacheCount:Int;
+ @:noCompletion private var currentTime:Float;
+ @:noCompletion private var times:Array;
+
+ public function new(x:Float = 10, y:Float = 10, color:Int = 0x000000)
+ {
+ super();
+
+ this.x = x;
+ this.y = y;
+
+ currentFPS = 0;
+ selectable = false;
+ mouseEnabled = false;
+ defaultTextFormat = new TextFormat(openfl.utils.Assets.getFont("assets/fonts/vcr.ttf").fontName, 14, color);
+ text = "FPS: ";
+ width += 200;
+
+ cacheCount = 0;
+ currentTime = 0;
+ times = [];
+
+ #if flash
+ addEventListener(Event.ENTER_FRAME, function(e)
+ {
+ var time = Lib.getTimer();
+ __enterFrame(time - currentTime);
+ });
+ #end
+
+ bitmap = ImageOutline.renderImage(this, 1, 0x000000, 1, true);
+ (cast(Lib.current.getChildAt(0), Main)).addChild(bitmap);
+ }
+
+ var array:Array = [
+ FlxColor.fromRGB(148, 0, 211),
+ FlxColor.fromRGB(75, 0, 130),
+ FlxColor.fromRGB(0, 0, 255),
+ FlxColor.fromRGB(0, 255, 0),
+ FlxColor.fromRGB(255, 255, 0),
+ FlxColor.fromRGB(255, 127, 0),
+ FlxColor.fromRGB(255, 0, 0)
+ ];
+
+ var skippedFrames = 0;
+
+ public static var currentColor = 0;
+
+ // Event Handlers
+ @:noCompletion
+ private #if !flash override #end function __enterFrame(deltaTime:Float):Void
+ {
+ if (MusicBeatState.initSave)
+ if (FlxG.save.data.fpsRain)
+ {
+ if (currentColor >= array.length)
+ currentColor = 0;
+ currentColor = Math.round(FlxMath.lerp(0, array.length, skippedFrames / (FlxG.save.data.fpsCap / 3)));
+ (cast(Lib.current.getChildAt(0), Main)).changeFPSColor(array[currentColor]);
+ currentColor++;
+ skippedFrames++;
+ if (skippedFrames > (FlxG.save.data.fpsCap / 3))
+ skippedFrames = 0;
+ }
+
+ currentTime += deltaTime;
+ times.push(currentTime);
+
+ while (times[0] < currentTime - 1000)
+ {
+ times.shift();
+ }
+
+ var currentCount = times.length;
+ currentFPS = Math.round((currentCount + cacheCount) / 2);
+
+ if (currentCount != cacheCount /*&& visible*/)
+ {
+ text = (FlxG.save.data.fps ? "FPS: "
+ + currentFPS
+ + (Main.watermarks ? "\nKE " + "v" + MainMenuState.kadeEngineVer : "") : (Main.watermarks ? "KE " + "v" + MainMenuState.kadeEngineVer : ""));
+
+ #if (gl_stats && !disable_cffi && (!html5 || !canvas))
+ text += "\ntotalDC: " + Context3DStats.totalDrawCalls();
+
+ text += "\nstageDC: " + Context3DStats.contextDrawCalls(DrawCallContext.STAGE);
+ text += "\nstage3DDC: " + Context3DStats.contextDrawCalls(DrawCallContext.STAGE3D);
+ #end
+ }
+
+ visible = true;
+
+ Main.instance.removeChild(bitmap);
+
+ bitmap = ImageOutline.renderImage(this, 2, 0x000000, 1);
+
+ Main.instance.addChild(bitmap);
+
+ visible = false;
+
+ cacheCount = currentCount;
+ }
+}
diff --git a/source/KeyBindMenu.hx b/source/KeyBindMenu.hx
index 12d1a5e35f..4b5fe86f83 100644
--- a/source/KeyBindMenu.hx
+++ b/source/KeyBindMenu.hx
@@ -2,7 +2,6 @@ package;
/// Code created by Rozebud for FPS Plus (thanks rozebud)
// modified by KadeDev for use in Kade Engine/Tricky
-
import flixel.input.gamepad.FlxGamepad;
import flixel.util.FlxAxes;
import flixel.FlxSubState;
@@ -19,409 +18,451 @@ import flixel.text.FlxText;
import flixel.tweens.FlxEase;
import flixel.tweens.FlxTween;
import flixel.util.FlxColor;
-import io.newgrounds.NG;
import lime.app.Application;
-import lime.utils.Assets;
import flixel.math.FlxMath;
import flixel.text.FlxText;
import flixel.input.FlxKeyManager;
-
using StringTools;
class KeyBindMenu extends FlxSubState
{
-
- var keyTextDisplay:FlxText;
- var keyWarning:FlxText;
- var warningTween:FlxTween;
- var keyText:Array = ["LEFT", "DOWN", "UP", "RIGHT"];
- var defaultKeys:Array = ["A", "S", "W", "D", "R"];
- var defaultGpKeys:Array = ["DPAD_LEFT", "DPAD_DOWN", "DPAD_UP", "DPAD_RIGHT"];
- var curSelected:Int = 0;
-
- var keys:Array = [FlxG.save.data.leftBind,
- FlxG.save.data.downBind,
- FlxG.save.data.upBind,
- FlxG.save.data.rightBind];
- var gpKeys:Array = [FlxG.save.data.gpleftBind,
- FlxG.save.data.gpdownBind,
- FlxG.save.data.gpupBind,
- FlxG.save.data.gprightBind];
- var tempKey:String = "";
- var blacklist:Array = ["ESCAPE", "ENTER", "BACKSPACE", "SPACE", "TAB"];
-
- var blackBox:FlxSprite;
- var infoText:FlxText;
-
- var state:String = "select";
+ var keyTextDisplay:FlxText;
+ var keyWarning:FlxText;
+ var warningTween:FlxTween;
+ var keyText:Array = [
+ "LEFT", "DOWN", "UP", "RIGHT", "PAUSE", "RESET", "MUTE", "VOLUME UP", "VOLUME DOWN", "FULLSCREEN"
+ ];
+ var defaultKeys:Array = ["A", "S", "W", "D", "ENTER", "R", "NUMPADZERO", "NUMPADMINUS", "NUMPADPLUS", "F"];
+ var defaultGpKeys:Array = ["DPAD_LEFT", "DPAD_DOWN", "DPAD_UP", "DPAD_RIGHT", "START", "SELECT"];
+ var curSelected:Int = 0;
+
+ var keys:Array = [
+ FlxG.save.data.leftBind, FlxG.save.data.downBind, FlxG.save.data.upBind, FlxG.save.data.rightBind, FlxG.save.data.pauseBind, FlxG.save.data.resetBind,
+ FlxG.save.data.muteBind, FlxG.save.data.volUpBind, FlxG.save.data.volDownBind, FlxG.save.data.fullscreenBind
+ ];
+
+ var gpKeys:Array = [
+ FlxG.save.data.gpleftBind,
+ FlxG.save.data.gpdownBind,
+ FlxG.save.data.gpupBind,
+ FlxG.save.data.gprightBind,
+ FlxG.save.data.gppauseBind,
+ FlxG.save.data.gpresetBind
+ ];
+
+ var tempKey:String = "";
+ var blacklist:Array = ["ESCAPE", "BACKSPACE", "SPACE", "TAB"];
+
+ var blackBox:FlxSprite;
+ var infoText:FlxText;
+
+ var state:String = "select";
override function create()
- {
-
- for (i in 0...keys.length)
- {
- var k = keys[i];
- if (k == null)
- keys[i] = defaultKeys[i];
- }
-
- for (i in 0...gpKeys.length)
- {
- var k = gpKeys[i];
- if (k == null)
- gpKeys[i] = defaultGpKeys[i];
- }
-
- //FlxG.sound.playMusic('assets/music/configurator' + TitleState.soundExt);
+ {
+ for (i in 0...keys.length)
+ {
+ var k = keys[i];
+ if (k == null)
+ keys[i] = defaultKeys[i];
+ }
+
+ for (i in 0...gpKeys.length)
+ {
+ var k = gpKeys[i];
+ if (k == null)
+ gpKeys[i] = defaultGpKeys[i];
+ }
persistentUpdate = true;
- keyTextDisplay = new FlxText(-10, 0, 1280, "", 72);
+ keyTextDisplay = new FlxText(-10, 0, 1280, "", 72);
keyTextDisplay.scrollFactor.set(0, 0);
keyTextDisplay.setFormat("VCR OSD Mono", 42, FlxColor.WHITE, FlxTextAlign.CENTER, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
- keyTextDisplay.borderSize = 2;
- keyTextDisplay.borderQuality = 3;
+ keyTextDisplay.borderSize = 3;
+ keyTextDisplay.borderQuality = 1;
- blackBox = new FlxSprite(0,0).makeGraphic(FlxG.width,FlxG.height,FlxColor.BLACK);
- add(blackBox);
+ blackBox = new FlxSprite(0, 0).makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
+ add(blackBox);
- infoText = new FlxText(-10, 580, 1280, 'Current Mode: ${KeyBinds.gamepad ? 'GAMEPAD' : 'KEYBOARD'}. Press TAB to switch\n(${KeyBinds.gamepad ? 'RIGHT Trigger' : 'Escape'} to save, ${KeyBinds.gamepad ? 'LEFT Trigger' : 'Backspace'} to leave without saving. ${KeyBinds.gamepad ? 'START To change a keybind' : ''})', 72);
+ infoText = new FlxText(-10, 630, 1280,
+ 'Current Mode: ${KeyBinds.gamepad ? 'GAMEPAD' : 'KEYBOARD'}. Press TAB to switch\n(${KeyBinds.gamepad ? 'RIGHT Trigger' : 'Escape'} to save, ${KeyBinds.gamepad ? 'LEFT Trigger' : 'Backspace'} to leave without saving. ${KeyBinds.gamepad ? 'START To change a keybind' : ''})',
+ 72);
infoText.scrollFactor.set(0, 0);
infoText.setFormat("VCR OSD Mono", 24, FlxColor.WHITE, FlxTextAlign.CENTER, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
- infoText.borderSize = 2;
- infoText.borderQuality = 3;
- infoText.alpha = 0;
- infoText.screenCenter(FlxAxes.X);
- add(infoText);
- add(keyTextDisplay);
-
- blackBox.alpha = 0;
- keyTextDisplay.alpha = 0;
+ infoText.borderSize = 3;
+ infoText.borderQuality = 1;
+ infoText.alpha = 0;
+ infoText.screenCenter(FlxAxes.X);
+ add(infoText);
+ add(keyTextDisplay);
- FlxTween.tween(keyTextDisplay, {alpha: 1}, 1, {ease: FlxEase.expoInOut});
- FlxTween.tween(infoText, {alpha: 1}, 1.4, {ease: FlxEase.expoInOut});
- FlxTween.tween(blackBox, {alpha: 0.7}, 1, {ease: FlxEase.expoInOut});
+ blackBox.alpha = 0;
+ keyTextDisplay.alpha = 0;
- OptionsMenu.instance.acceptInput = false;
+ FlxTween.tween(keyTextDisplay, {alpha: 1}, 1, {ease: FlxEase.expoInOut});
+ FlxTween.tween(infoText, {alpha: 1}, 1.4, {ease: FlxEase.expoInOut});
+ FlxTween.tween(blackBox, {alpha: 0.7}, 1, {ease: FlxEase.expoInOut});
- textUpdate();
+ textUpdate();
super.create();
}
- var frames = 0;
+ var frames = 0;
override function update(elapsed:Float)
{
- var gamepad:FlxGamepad = FlxG.gamepads.lastActive;
-
- if (frames <= 10)
- frames++;
-
- infoText.text = 'Current Mode: ${KeyBinds.gamepad ? 'GAMEPAD' : 'KEYBOARD'}. Press TAB to switch\n(${KeyBinds.gamepad ? 'RIGHT Trigger' : 'Escape'} to save, ${KeyBinds.gamepad ? 'LEFT Trigger' : 'Backspace'} to leave without saving. ${KeyBinds.gamepad ? 'START To change a keybind' : ''})\n${lastKey != "" ? lastKey + " is blacklisted!" : ""}';
-
- switch(state){
-
- case "select":
- if (FlxG.keys.justPressed.UP)
- {
- FlxG.sound.play(Paths.sound('scrollMenu'));
- changeItem(-1);
- }
-
- if (FlxG.keys.justPressed.DOWN)
- {
- FlxG.sound.play(Paths.sound('scrollMenu'));
- changeItem(1);
- }
-
- if (FlxG.keys.justPressed.TAB)
- {
- KeyBinds.gamepad = !KeyBinds.gamepad;
- textUpdate();
- }
-
- if (FlxG.keys.justPressed.ENTER){
- FlxG.sound.play(Paths.sound('scrollMenu'));
- state = "input";
- }
- else if(FlxG.keys.justPressed.ESCAPE){
- quit();
- }
- else if (FlxG.keys.justPressed.BACKSPACE){
- reset();
- }
- if (gamepad != null) // GP Logic
- {
- if (gamepad.justPressed.DPAD_UP)
- {
- FlxG.sound.play(Paths.sound('scrollMenu'));
- changeItem(-1);
- textUpdate();
- }
- if (gamepad.justPressed.DPAD_DOWN)
- {
- FlxG.sound.play(Paths.sound('scrollMenu'));
- changeItem(1);
- textUpdate();
- }
-
- if (gamepad.justPressed.START && frames > 10){
- FlxG.sound.play(Paths.sound('scrollMenu'));
- state = "input";
- }
- else if(gamepad.justPressed.LEFT_TRIGGER){
- quit();
- }
- else if (gamepad.justPressed.RIGHT_TRIGGER){
- reset();
- }
- }
-
- case "input":
- if (KeyBinds.gamepad) {
- tempKey = gpKeys[curSelected];
- gpKeys[curSelected] = "?";
- } else {
- tempKey = keys[curSelected];
- keys[curSelected] = "?";
- }
- textUpdate();
- state = "waiting";
-
- case "waiting":
- if (gamepad != null && KeyBinds.gamepad) // GP Logic
- {
- if(FlxG.keys.justPressed.ESCAPE){ // just in case you get stuck
- gpKeys[curSelected] = tempKey;
- state = "select";
- FlxG.sound.play(Paths.sound('confirmMenu'));
- }
-
- if (gamepad.justPressed.START)
- {
- addKeyGamepad(defaultKeys[curSelected]);
- save();
- state = "select";
- }
-
- if (gamepad.justPressed.ANY)
- {
- trace(gamepad.firstJustPressedID());
- addKeyGamepad(gamepad.firstJustPressedID());
- save();
- state = "select";
- textUpdate();
- }
-
- }
- else
- {
- if(FlxG.keys.justPressed.ESCAPE){
- keys[curSelected] = tempKey;
- state = "select";
- FlxG.sound.play(Paths.sound('confirmMenu'));
- }
- else if(FlxG.keys.justPressed.ENTER){
- addKey(defaultKeys[curSelected]);
- save();
- state = "select";
- }
- else if(FlxG.keys.justPressed.ANY){
- addKey(FlxG.keys.getIsDown()[0].ID.toString());
- save();
- state = "select";
- }
- }
-
-
- case "exiting":
-
-
- default:
- state = "select";
-
- }
-
- if(FlxG.keys.justPressed.ANY)
+ var gamepad:FlxGamepad = FlxG.gamepads.lastActive;
+
+ if (frames <= 10)
+ frames++;
+
+ infoText.text = 'Current Mode: ${KeyBinds.gamepad ? 'GAMEPAD' : 'KEYBOARD'}. Press TAB to switch\n(${KeyBinds.gamepad ? 'RIGHT Trigger' : 'Escape'} to save, ${KeyBinds.gamepad ? 'LEFT Trigger' : 'Backspace'} to leave without saving. ${KeyBinds.gamepad ? 'START To change a keybind' : ''})\n${lastKey != "" ? lastKey + " is blacklisted!" : ""}';
+
+ switch (state)
+ {
+ case "select":
+ if (FlxG.keys.justPressed.UP)
+ {
+ FlxG.sound.play(Paths.sound('scrollMenu'));
+ changeItem(-1);
+ }
+
+ if (FlxG.keys.justPressed.DOWN)
+ {
+ FlxG.sound.play(Paths.sound('scrollMenu'));
+ changeItem(1);
+ }
+
+ if (FlxG.keys.justPressed.TAB)
+ {
+ KeyBinds.gamepad = !KeyBinds.gamepad;
+ textUpdate();
+ }
+
+ if (FlxG.keys.justPressed.ENTER)
+ {
+ FlxG.sound.play(Paths.sound('scrollMenu'));
+ state = "input";
+ }
+ else if (FlxG.keys.justPressed.ESCAPE)
+ {
+ quit();
+ }
+ else if (FlxG.keys.justPressed.BACKSPACE)
+ {
+ reset();
+ }
+ if (gamepad != null) // GP Logic
+ {
+ if (gamepad.justPressed.DPAD_UP)
+ {
+ FlxG.sound.play(Paths.sound('scrollMenu'));
+ changeItem(-1);
+ textUpdate();
+ }
+ if (gamepad.justPressed.DPAD_DOWN)
+ {
+ FlxG.sound.play(Paths.sound('scrollMenu'));
+ changeItem(1);
+ textUpdate();
+ }
+
+ if (gamepad.justPressed.START && frames > 10)
+ {
+ FlxG.sound.play(Paths.sound('scrollMenu'));
+ state = "input";
+ }
+ else if (gamepad.justPressed.LEFT_TRIGGER)
+ {
+ quit();
+ }
+ else if (gamepad.justPressed.RIGHT_TRIGGER)
+ {
+ reset();
+ }
+ }
+
+ case "input":
+ if (KeyBinds.gamepad)
+ {
+ tempKey = gpKeys[curSelected];
+ gpKeys[curSelected] = "?";
+ }
+ else
+ {
+ tempKey = keys[curSelected];
+ keys[curSelected] = "?";
+ }
+ textUpdate();
+ state = "waiting";
+
+ case "waiting":
+ if (gamepad != null && KeyBinds.gamepad) // GP Logic
+ {
+ if (FlxG.keys.justPressed.ESCAPE)
+ { // just in case you get stuck
+ gpKeys[curSelected] = tempKey;
+ state = "select";
+ FlxG.sound.play(Paths.sound('confirmMenu'));
+ }
+
+ if (gamepad.justPressed.START)
+ {
+ addKeyGamepad(defaultKeys[curSelected]);
+ save();
+ state = "select";
+ }
+
+ if (gamepad.justPressed.ANY)
+ {
+ trace(gamepad.firstJustPressedID());
+ addKeyGamepad(gamepad.firstJustPressedID());
+ save();
+ state = "select";
+ textUpdate();
+ }
+ }
+ else
+ {
+ if (FlxG.keys.justPressed.ESCAPE)
+ {
+ keys[curSelected] = tempKey;
+ state = "select";
+ FlxG.sound.play(Paths.sound('confirmMenu'));
+ }
+ else if (FlxG.keys.justPressed.ENTER)
+ {
+ addKey(defaultKeys[curSelected]);
+ save();
+ state = "select";
+ }
+ else if (FlxG.keys.justPressed.ANY)
+ {
+ addKey(FlxG.keys.getIsDown()[0].ID.toString());
+ save();
+ state = "select";
+ }
+ }
+
+ case "exiting":
+
+ default:
+ state = "select";
+ }
+
+ if (FlxG.keys.justPressed.ANY)
textUpdate();
super.update(elapsed);
-
}
- function textUpdate(){
-
- keyTextDisplay.text = "\n\n";
-
- if (KeyBinds.gamepad)
- {
- for(i in 0...4){
-
- var textStart = (i == curSelected) ? "> " : " ";
- trace(gpKeys[i]);
- keyTextDisplay.text += textStart + keyText[i] + ": " + gpKeys[i] + "\n";
-
- }
- }
- else
- {
- for(i in 0...4){
-
- var textStart = (i == curSelected) ? "> " : " ";
- keyTextDisplay.text += textStart + keyText[i] + ": " + ((keys[i] != keyText[i]) ? (keys[i] + " / ") : "" ) + keyText[i] + " ARROW\n";
-
- }
- }
-
- keyTextDisplay.screenCenter();
-
- }
-
- function save(){
-
- FlxG.save.data.upBind = keys[2];
- FlxG.save.data.downBind = keys[1];
- FlxG.save.data.leftBind = keys[0];
- FlxG.save.data.rightBind = keys[3];
-
- FlxG.save.data.gpupBind = gpKeys[2];
- FlxG.save.data.gpdownBind = gpKeys[1];
- FlxG.save.data.gpleftBind = gpKeys[0];
- FlxG.save.data.gprightBind = gpKeys[3];
-
- FlxG.save.flush();
-
- PlayerSettings.player1.controls.loadKeyBinds();
-
- }
-
- function reset(){
-
- for(i in 0...5){
- keys[i] = defaultKeys[i];
- }
- quit();
-
- }
-
- function quit(){
-
- state = "exiting";
-
- save();
-
- OptionsMenu.instance.acceptInput = true;
-
- FlxTween.tween(keyTextDisplay, {alpha: 0}, 1, {ease: FlxEase.expoInOut});
- FlxTween.tween(blackBox, {alpha: 0}, 1.1, {ease: FlxEase.expoInOut, onComplete: function(flx:FlxTween){close();}});
- FlxTween.tween(infoText, {alpha: 0}, 1, {ease: FlxEase.expoInOut});
- }
-
-
- function addKeyGamepad(r:String){
+ function textUpdate()
+ {
+ keyTextDisplay.text = "\n\n";
+
+ if (KeyBinds.gamepad)
+ {
+ for (i in 0...6)
+ {
+ var textStart = (i == curSelected) ? "> " : " ";
+ keyTextDisplay.text += textStart + keyText[i] + ": " + gpKeys[i] + "\n";
+ }
+ }
+ else
+ {
+ for (i in 0...4)
+ {
+ var textStart = (i == curSelected) ? "> " : " ";
+ keyTextDisplay.text += textStart + keyText[i] + ": " + ((keys[i] != keyText[i]) ? (keys[i] + " / ") : "") + keyText[i] + " ARROW\n";
+ }
+ var textStartPause = (4 == curSelected) ? "> " : " ";
+ keyTextDisplay.text += textStartPause + keyText[4] + ": " + (keys[4]) + "\n";
+
+ var textStartReset = (5 == curSelected) ? "> " : " ";
+ keyTextDisplay.text += textStartReset + keyText[5] + ": " + (keys[5]) + "\n";
+
+ for (i in 6...9)
+ {
+ var textStart = (i == curSelected) ? "> " : " ";
+ keyTextDisplay.text += textStart + keyText[i] + ": " + keys[i] + "\n";
+ }
+ var textStartReset = (9 == curSelected) ? "> " : " ";
+ keyTextDisplay.text += textStartReset + keyText[9] + ": " + (keys[9]) + "\n";
+ }
+
+ keyTextDisplay.screenCenter();
+ }
- var shouldReturn:Bool = true;
+ function save()
+ {
+ FlxG.save.data.upBind = keys[2];
+ FlxG.save.data.downBind = keys[1];
+ FlxG.save.data.leftBind = keys[0];
+ FlxG.save.data.rightBind = keys[3];
+ FlxG.save.data.pauseBind = keys[4];
+ FlxG.save.data.resetBind = keys[5];
+
+ FlxG.save.data.gpupBind = gpKeys[2];
+ FlxG.save.data.gpdownBind = gpKeys[1];
+ FlxG.save.data.gpleftBind = gpKeys[0];
+ FlxG.save.data.gprightBind = gpKeys[3];
+ FlxG.save.data.gppauseBind = gpKeys[4];
+ FlxG.save.data.gpresetBind = gpKeys[5];
+
+ FlxG.save.data.muteBind = keys[6];
+ FlxG.save.data.volUpBind = keys[7];
+ FlxG.save.data.volDownBind = keys[8];
+ FlxG.save.data.fullscreenBind = keys[9];
+
+ FlxG.sound.muteKeys = [FlxKey.fromString(keys[6])];
+ FlxG.sound.volumeDownKeys = [FlxKey.fromString(keys[8])];
+ FlxG.sound.volumeUpKeys = [FlxKey.fromString(keys[7])];
+
+ FlxG.save.flush();
+
+ PlayerSettings.player1.controls.loadKeyBinds();
+ }
- var notAllowed:Array = ["START"];
- var swapKey:Int = -1;
+ function reset()
+ {
+ for (i in 0...5)
+ {
+ keys[i] = defaultKeys[i];
+ }
+ quit();
+ }
- for(x in 0...gpKeys.length)
- {
- var oK = gpKeys[x];
- if(oK == r) {
- swapKey = x;
- gpKeys[x] = null;
- }
- if (notAllowed.contains(oK))
- {
- gpKeys[x] = null;
- lastKey = r;
- return;
- }
- }
+ function quit()
+ {
+ state = "exiting";
+
+ save();
+
+ FlxTween.tween(keyTextDisplay, {alpha: 0}, 1, {ease: FlxEase.expoInOut});
+ FlxTween.tween(blackBox, {alpha: 0}, 1.1, {
+ ease: FlxEase.expoInOut,
+ onComplete: function(flx:FlxTween)
+ {
+ close();
+ }
+ });
+ FlxTween.tween(infoText, {alpha: 0}, 1, {ease: FlxEase.expoInOut});
+ }
- if (notAllowed.contains(r))
- {
- gpKeys[curSelected] = tempKey;
- lastKey = r;
- return;
- }
+ function addKeyGamepad(r:String)
+ {
+ var shouldReturn:Bool = true;
+
+ var notAllowed:Array = ["START"];
+ var swapKey:Int = -1;
+
+ for (x in 0...gpKeys.length)
+ {
+ var oK = gpKeys[x];
+ if (oK == r)
+ {
+ swapKey = x;
+ gpKeys[x] = null;
+ }
+ if (notAllowed.contains(oK))
+ {
+ gpKeys[x] = null;
+ lastKey = r;
+ return;
+ }
+ }
+
+ if (notAllowed.contains(r))
+ {
+ gpKeys[curSelected] = tempKey;
+ lastKey = r;
+ return;
+ }
+
+ if (shouldReturn)
+ {
+ if (swapKey != -1)
+ {
+ gpKeys[swapKey] = tempKey;
+ }
+ gpKeys[curSelected] = r;
+ FlxG.sound.play(Paths.sound('scrollMenu'));
+ }
+ else
+ {
+ gpKeys[curSelected] = tempKey;
+ lastKey = r;
+ }
+ }
- if(shouldReturn){
- if (swapKey != -1) {
- gpKeys[swapKey] = tempKey;
- }
- gpKeys[curSelected] = r;
- FlxG.sound.play(Paths.sound('scrollMenu'));
- }
- else{
- gpKeys[curSelected] = tempKey;
- lastKey = r;
- }
+ public var lastKey:String = "";
+ function addKey(r:String)
+ {
+ var shouldReturn:Bool = true;
+
+ var notAllowed:Array = [];
+ var swapKey:Int = -1;
+
+ for (x in blacklist)
+ {
+ notAllowed.push(x);
+ }
+
+ trace(notAllowed);
+
+ for (x in 0...keys.length)
+ {
+ var oK = keys[x];
+ if (oK == r)
+ {
+ swapKey = x;
+ keys[x] = null;
+ }
+ if (notAllowed.contains(oK))
+ {
+ keys[x] = null;
+ lastKey = oK;
+ return;
+ }
+ }
+
+ if (notAllowed.contains(r))
+ {
+ keys[curSelected] = tempKey;
+ lastKey = r;
+ return;
+ }
+
+ lastKey = "";
+
+ if (shouldReturn)
+ {
+ // Swap keys instead of setting the other one as null
+ if (swapKey != -1)
+ {
+ keys[swapKey] = tempKey;
+ }
+ keys[curSelected] = r;
+ FlxG.sound.play(Paths.sound('scrollMenu'));
+ }
+ else
+ {
+ keys[curSelected] = tempKey;
+ lastKey = r;
+ }
}
- public var lastKey:String = "";
-
- function addKey(r:String){
-
- var shouldReturn:Bool = true;
-
- var notAllowed:Array = [];
- var swapKey:Int = -1;
-
- for(x in blacklist){notAllowed.push(x);}
-
- trace(notAllowed);
-
- for(x in 0...keys.length)
- {
- var oK = keys[x];
- if(oK == r) {
- swapKey = x;
- keys[x] = null;
- }
- if (notAllowed.contains(oK))
- {
- keys[x] = null;
- lastKey = oK;
- return;
- }
- }
-
- if (notAllowed.contains(r))
- {
- keys[curSelected] = tempKey;
- lastKey = r;
- return;
- }
-
- lastKey = "";
-
- if(shouldReturn){
- // Swap keys instead of setting the other one as null
- if (swapKey != -1) {
- keys[swapKey] = tempKey;
- }
- keys[curSelected] = r;
- FlxG.sound.play(Paths.sound('scrollMenu'));
- }
- else{
- keys[curSelected] = tempKey;
- lastKey = r;
- }
+ function changeItem(_amount:Int = 0)
+ {
+ curSelected += _amount;
+ if (curSelected > 9)
+ curSelected = 0;
+ if (curSelected < 0)
+ curSelected = 9;
}
-
- function changeItem(_amount:Int = 0)
- {
- curSelected += _amount;
-
- if (curSelected > 3)
- curSelected = 0;
- if (curSelected < 0)
- curSelected = 3;
- }
}
diff --git a/source/KeyBinds.hx b/source/KeyBinds.hx
index 7813db5861..02577b2ae0 100644
--- a/source/KeyBinds.hx
+++ b/source/KeyBinds.hx
@@ -11,65 +11,118 @@ import flixel.input.keyboard.FlxKey;
class KeyBinds
{
+ public static var gamepad:Bool = false;
- public static var gamepad:Bool = false;
-
- public static function resetBinds():Void{
-
- FlxG.save.data.upBind = "W";
- FlxG.save.data.downBind = "S";
- FlxG.save.data.leftBind = "A";
- FlxG.save.data.rightBind = "D";
- FlxG.save.data.killBind = "R";
- FlxG.save.data.gpupBind = "DPAD_UP";
- FlxG.save.data.gpdownBind = "DPAD_DOWN";
- FlxG.save.data.gpleftBind = "DPAD_LEFT";
- FlxG.save.data.gprightBind = "DPAD_RIGHT";
- PlayerSettings.player1.controls.loadKeyBinds();
+ public static function resetBinds():Void
+ {
+ FlxG.save.data.upBind = "W";
+ FlxG.save.data.downBind = "S";
+ FlxG.save.data.leftBind = "A";
+ FlxG.save.data.rightBind = "D";
+ FlxG.save.data.muteBind = "ZERO";
+ FlxG.save.data.volUpBind = "PLUS";
+ FlxG.save.data.volDownBind = "MINUS";
+ FlxG.save.data.fullscreenBind = "F";
+ FlxG.save.data.gpupBind = "DPAD_UP";
+ FlxG.save.data.gpdownBind = "DPAD_DOWN";
+ FlxG.save.data.gpleftBind = "DPAD_LEFT";
+ FlxG.save.data.gprightBind = "DPAD_RIGHT";
+ FlxG.save.data.pauseBind = "ENTER";
+ FlxG.save.data.gppauseBind = "START";
+ FlxG.save.data.resetBind = "R";
+ FlxG.save.data.gpresetBind = "SELECT";
+ FlxG.sound.muteKeys = ["ZERO", "NUMPADZERO"];
+ FlxG.sound.volumeDownKeys = ["MINUS", "NUMPADMINUS"];
+ FlxG.sound.volumeUpKeys = ["PLUS", "NUMPADPLUS"];
+ PlayerSettings.player1.controls.loadKeyBinds();
}
- public static function keyCheck():Void
- {
- if(FlxG.save.data.upBind == null){
- FlxG.save.data.upBind = "W";
- trace("No UP");
- }
- if(FlxG.save.data.downBind == null){
- FlxG.save.data.downBind = "S";
- trace("No DOWN");
- }
- if(FlxG.save.data.leftBind == null){
- FlxG.save.data.leftBind = "A";
- trace("No LEFT");
- }
- if(FlxG.save.data.rightBind == null){
- FlxG.save.data.rightBind = "D";
- trace("No RIGHT");
- }
-
- if(FlxG.save.data.gpupBind == null){
- FlxG.save.data.gpupBind = "DPAD_UP";
- trace("No GUP");
- }
- if(FlxG.save.data.gpdownBind == null){
- FlxG.save.data.gpdownBind = "DPAD_DOWN";
- trace("No GDOWN");
- }
- if(FlxG.save.data.gpleftBind == null){
- FlxG.save.data.gpleftBind = "DPAD_LEFT";
- trace("No GLEFT");
- }
- if(FlxG.save.data.gprightBind == null){
- FlxG.save.data.gprightBind = "DPAD_RIGHT";
- trace("No GRIGHT");
- }
- if(FlxG.save.data.killBind == null){
- FlxG.save.data.killBind = "R";
- trace("No KILL");
- }
+ public static function keyCheck():Void
+ {
+ if (FlxG.save.data.upBind == null)
+ {
+ FlxG.save.data.upBind = "W";
+ trace("No UP");
+ }
+ if (FlxG.save.data.downBind == null)
+ {
+ FlxG.save.data.downBind = "S";
+ trace("No DOWN");
+ }
+ if (FlxG.save.data.leftBind == null)
+ {
+ FlxG.save.data.leftBind = "A";
+ trace("No LEFT");
+ }
+ if (FlxG.save.data.rightBind == null)
+ {
+ FlxG.save.data.rightBind = "D";
+ trace("No RIGHT");
+ }
- trace('${FlxG.save.data.leftBind}-${FlxG.save.data.downBind}-${FlxG.save.data.upBind}-${FlxG.save.data.rightBind}');
- }
+ if (FlxG.save.data.gpupBind == null)
+ {
+ FlxG.save.data.gpupBind = "DPAD_UP";
+ trace("No GUP");
+ }
+ if (FlxG.save.data.gpdownBind == null)
+ {
+ FlxG.save.data.gpdownBind = "DPAD_DOWN";
+ trace("No GDOWN");
+ }
+ if (FlxG.save.data.gpleftBind == null)
+ {
+ FlxG.save.data.gpleftBind = "DPAD_LEFT";
+ trace("No GLEFT");
+ }
+ if (FlxG.save.data.gprightBind == null)
+ {
+ FlxG.save.data.gprightBind = "DPAD_RIGHT";
+ trace("No GRIGHT");
+ }
+ if (FlxG.save.data.pauseBind == null)
+ {
+ FlxG.save.data.pauseBind = "ENTER";
+ trace("No ENTER");
+ }
+ if (FlxG.save.data.gppauseBind == null)
+ {
+ FlxG.save.data.gppauseBind = "START";
+ trace("No ENTER");
+ }
+ if (FlxG.save.data.resetBind == null)
+ {
+ FlxG.save.data.resetBind = "R";
+ trace("No RESET");
+ }
+ if (FlxG.save.data.gpresetBind == null)
+ {
+ FlxG.save.data.gpresetBind = "SELECT";
+ trace("No RESET");
+ }
+ // VOLUME CONTROLS !!!!
+ if (FlxG.save.data.muteBind == null)
+ {
+ FlxG.save.data.muteBind = "ZERO";
+ trace("No MUTE");
+ }
+ if (FlxG.save.data.volumeUpKeys == null)
+ {
+ FlxG.save.data.volumeUpKeys = ["PLUS"];
+ trace("No VOLUP");
+ }
+ if (FlxG.save.data.volumeDownKeys == null)
+ {
+ FlxG.save.data.volumeDownKeys = ["MINUS"];
+ trace("No VOLDOWN");
+ }
+ if (FlxG.save.data.fullscreenBind == null)
+ {
+ FlxG.save.data.fullscreenBind = "F";
+ trace("No FULLSCREEN");
+ }
+ trace('${FlxG.save.data.leftBind}-${FlxG.save.data.downBind}-${FlxG.save.data.upBind}-${FlxG.save.data.rightBind}');
+ }
}
diff --git a/source/LoadReplayState.hx b/source/LoadReplayState.hx
index b4df680ac7..627f8e06d0 100644
--- a/source/LoadReplayState.hx
+++ b/source/LoadReplayState.hx
@@ -2,10 +2,8 @@ package;
import haxe.Exception;
import lime.app.Application;
-
-#if sys
+#if FEATURE_STEPMANIA
import smTools.SMFile;
-import sys.FileSystem;
#end
import Controls.KeyboardScheme;
import Controls.Control;
@@ -18,8 +16,8 @@ import flixel.input.keyboard.FlxKey;
import flixel.math.FlxMath;
import flixel.text.FlxText;
import flixel.util.FlxColor;
-import lime.utils.Assets;
-#if sys
+#if FEATURE_FILESYSTEM
+import sys.FileSystem;
import sys.io.File;
#end
@@ -28,44 +26,45 @@ class LoadReplayState extends MusicBeatState
var selector:FlxText;
var curSelected:Int = 0;
- var songs:Array = [];
+ var songs:Array = [];
var controlsStrings:Array = [];
- var actualNames:Array = [];
+ var actualNames:Array = [];
private var grpControls:FlxTypedGroup;
var versionShit:FlxText;
var poggerDetails:FlxText;
+
override function create()
{
- var menuBG:FlxSprite = new FlxSprite().loadGraphic(Paths.image('menuDesat'));
- #if sys
+ var menuBG:FlxSprite = new FlxSprite().loadGraphic(Paths.loadImage('menuDesat'));
+ // TODO: Refactor this to use OpenFlAssets.
+ #if FEATURE_FILESYSTEM
controlsStrings = sys.FileSystem.readDirectory(Sys.getCwd() + "/assets/replays/");
- #end
+ #end
trace(controlsStrings);
- controlsStrings.sort(sortByDate);
+ controlsStrings.sort(sortByDate);
- addWeek(['Bopeebo', 'Fresh', 'Dadbattle'], 1, ['dad']);
- addWeek(['Spookeez', 'South', 'Monster'], 2, ['spooky']);
- addWeek(['Pico', 'Philly', 'Blammed'], 3, ['pico']);
+ addWeek(['Bopeebo', 'Fresh', 'Dadbattle'], 1, ['dad']);
+ addWeek(['Spookeez', 'South', 'Monster'], 2, ['spooky']);
+ addWeek(['Pico', 'Philly', 'Blammed'], 3, ['pico']);
- addWeek(['Satin-Panties', 'High', 'Milf'], 4, ['mom']);
- addWeek(['Cocoa', 'Eggnog', 'Winter-Horrorland'], 5, ['parents-christmas', 'parents-christmas', 'monster-christmas']);
-
- addWeek(['Senpai', 'Roses', 'Thorns'], 6, ['senpai', 'senpai', 'spirit']);
+ addWeek(['Satin-Panties', 'High', 'Milf'], 4, ['mom']);
+ addWeek(['Cocoa', 'Eggnog', 'Winter-Horrorland'], 5, ['parents-christmas', 'parents-christmas', 'monster-christmas']);
+ addWeek(['Senpai', 'Roses', 'Thorns'], 6, ['senpai', 'senpai', 'spirit']);
- for(i in 0...controlsStrings.length)
- {
- var string:String = controlsStrings[i];
- actualNames[i] = string;
+ for (i in 0...controlsStrings.length)
+ {
+ var string:String = controlsStrings[i];
+ actualNames[i] = string;
var rep:Replay = Replay.LoadReplay(string);
- controlsStrings[i] = string.split("time")[0] + " " + CoolUtil.difficultyFromInt(rep.replay.songDiff).toUpperCase();
- }
+ controlsStrings[i] = string.split("time")[0] + " " + CoolUtil.difficultyFromInt(rep.replay.songDiff).toUpperCase();
+ }
- if (controlsStrings.length == 0)
- controlsStrings.push("No Replays...");
+ if (controlsStrings.length == 0)
+ controlsStrings.push("No Replays...");
menuBG.color = 0xFFea71fd;
menuBG.setGraphicSize(Std.int(menuBG.width * 1.1));
@@ -79,20 +78,20 @@ class LoadReplayState extends MusicBeatState
for (i in 0...controlsStrings.length)
{
- var controlLabel:Alphabet = new Alphabet(0, (70 * i) + 30, controlsStrings[i], true, false);
- controlLabel.isMenuItem = true;
- controlLabel.targetY = i;
- grpControls.add(controlLabel);
+ var controlLabel:Alphabet = new Alphabet(0, (70 * i) + 30, controlsStrings[i], true, false);
+ controlLabel.isMenuItem = true;
+ controlLabel.targetY = i;
+ grpControls.add(controlLabel);
// DONT PUT X IN THE FIRST PARAMETER OF new ALPHABET() !!
}
-
- versionShit = new FlxText(5, FlxG.height - 34, 0, "Replay Loader (ESCAPE TO GO BACK)\nNOTICE!!!! Replays are in a beta stage, and they are probably not 100% correct. expect misses and other stuff that isn't there!\n", 12);
+ versionShit = new FlxText(5, FlxG.height - 34, 0,
+ "Replay Loader (ESCAPE TO GO BACK)\nNOTICE!!!! Replays are in a beta stage, and they are probably not 100% correct. expect misses and other stuff that isn't there!\n",
+ 12);
versionShit.scrollFactor.set();
versionShit.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
add(versionShit);
-
poggerDetails = new FlxText(5, 34, 0, "Replay Details - \nnone", 12);
poggerDetails.scrollFactor.set();
poggerDetails.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
@@ -103,148 +102,157 @@ class LoadReplayState extends MusicBeatState
super.create();
}
- function sortByDate(a:String, b:String) {
- var aTime = Std.parseFloat(a.split("time")[1])/1000;
- var bTime = Std.parseFloat(b.split("time")[1])/1000;
+ function sortByDate(a:String, b:String)
+ {
+ var aTime = Std.parseFloat(a.split("time")[1]) / 1000;
+ var bTime = Std.parseFloat(b.split("time")[1]) / 1000;
return Std.int(bTime - aTime); // Newest first
}
- public function getWeekNumbFromSong(songName:String):Int
- {
- var week:Int = 0;
- for (i in 0...songs.length)
- {
- var pog:FreeplayState.SongMetadata = songs[i];
- if (pog.songName == songName)
- week = pog.week;
- }
- return week;
- }
+ public function getWeekNumbFromSong(songName:String):Int
+ {
+ var week:Int = 0;
+ for (i in 0...songs.length)
+ {
+ var pog:FreeplayState.FreeplaySongMetadata = songs[i];
+ if (pog.songName == songName)
+ week = pog.week;
+ }
+ return week;
+ }
public function addSong(songName:String, weekNum:Int, songCharacter:String)
- {
- songs.push(new FreeplayState.SongMetadata(songName, weekNum, songCharacter));
- }
-
- public function addWeek(songs:Array, weekNum:Int, ?songCharacters:Array)
- {
- if (songCharacters == null)
- songCharacters = ['bf'];
-
- var num:Int = 0;
- for (song in songs)
- {
- addSong(song, weekNum, songCharacters[num]);
-
- if (songCharacters.length != 1)
- num++;
- }
- }
-
+ {
+ songs.push(new FreeplayState.FreeplaySongMetadata(songName, weekNum, songCharacter));
+ }
+
+ public function addWeek(songs:Array, weekNum:Int, ?songCharacters:Array)
+ {
+ if (songCharacters == null)
+ songCharacters = ['bf'];
+
+ var num:Int = 0;
+ for (song in songs)
+ {
+ addSong(song, weekNum, songCharacters[num]);
+
+ if (songCharacters.length != 1)
+ num++;
+ }
+ }
override function update(elapsed:Float)
{
super.update(elapsed);
- if (controls.BACK)
- FlxG.switchState(new OptionsMenu());
- if (controls.UP_P)
- changeSelection(-1);
- if (controls.DOWN_P)
- changeSelection(1);
-
+ if (controls.BACK)
+ FlxG.switchState(new OptionsMenu());
+ if (controls.UP_P)
+ changeSelection(-1);
+ if (controls.DOWN_P)
+ changeSelection(1);
- if (controls.ACCEPT && grpControls.members[curSelected].text != "No Replays...")
- {
- trace('loading ' + actualNames[curSelected]);
- PlayState.rep = Replay.LoadReplay(actualNames[curSelected]);
+ if (controls.ACCEPT && grpControls.members[curSelected].text != "No Replays...")
+ {
+ trace('loading ' + actualNames[curSelected]);
+ PlayState.rep = Replay.LoadReplay(actualNames[curSelected]);
- PlayState.loadRep = true;
+ PlayState.loadRep = true;
- if (PlayState.rep.replay.replayGameVer == Replay.version)
+ if (PlayState.rep.replay.replayGameVer == Replay.version)
+ {
+ // adjusting the song name to be compatible
+ var songFormat = StringTools.replace(PlayState.rep.replay.songName, " ", "-");
+ switch (songFormat)
{
+ case 'Dad-Battle':
+ songFormat = 'dadbattle';
+ case 'Philly-Nice':
+ songFormat = 'philly';
+ case 'M.I.L.F':
+ songFormat = 'milf';
+ // Replay v1.0 support
+ case 'dad-battle':
+ songFormat = 'dadbattle';
+ case 'philly-nice':
+ songFormat = 'philly';
+ case 'm.i.l.f':
+ songFormat = 'milf';
+ }
- // adjusting the song name to be compatible
- var songFormat = StringTools.replace(PlayState.rep.replay.songName, " ", "-");
- switch (songFormat) {
- case 'Dad-Battle': songFormat = 'Dadbattle';
- case 'Philly-Nice': songFormat = 'Philly';
- // Replay v1.0 support
- case 'dad-battle': songFormat = 'Dadbattle';
- case 'philly-nice': songFormat = 'Philly';
- }
+ var songPath = "";
- var poop = "";
-
- #if sys
- if (PlayState.rep.replay.sm)
- if (!FileSystem.exists(StringTools.replace(PlayState.rep.replay.chartPath,"converted.json","")))
- {
- Application.current.window.alert("The SM file in this replay does not exist!","SM Replays");
- return;
- }
- #end
-
- PlayState.isSM = PlayState.rep.replay.sm;
- #if sys
- if (PlayState.isSM)
- PlayState.pathToSm = StringTools.replace(PlayState.rep.replay.chartPath,"converted.json","");
- #end
-
- #if sys
- if (PlayState.isSM)
+ #if FEATURE_STEPMANIA
+ if (PlayState.rep.replay.sm)
+ if (!FileSystem.exists(StringTools.replace(PlayState.rep.replay.chartPath, "converted.json", "")))
{
- poop = File.getContent(PlayState.rep.replay.chartPath);
- try
- {
- PlayState.sm = SMFile.loadFile(PlayState.pathToSm + "/" + StringTools.replace(PlayState.rep.replay.songName," ", "_") + ".sm");
- }
- catch(e:Exception)
- {
- Application.current.window.alert("Make sure that the SM file is called " + PlayState.pathToSm + "/" + StringTools.replace(PlayState.rep.replay.songName," ", "_") + ".sm!\nAs I couldn't read it.","SM Replays");
- return;
- }
+ Application.current.window.alert("The SM file in this replay does not exist!", "SM Replays");
+ return;
}
- else
- poop = Highscore.formatSong(songFormat, PlayState.rep.replay.songDiff);
- #else
- poop = Highscore.formatSong(songFormat, PlayState.rep.replay.songDiff);
- #end
+ #end
+
+ PlayState.isSM = PlayState.rep.replay.sm;
+ #if FEATURE_STEPMANIA
+ if (PlayState.isSM)
+ PlayState.pathToSm = StringTools.replace(PlayState.rep.replay.chartPath, "converted.json", "");
+ #end
+ #if FEATURE_STEPMANIA
+ if (PlayState.isSM)
+ {
+ songPath = File.getContent(PlayState.rep.replay.chartPath);
try
{
- if (PlayState.isSM)
- PlayState.SONG = Song.loadFromJsonRAW(poop);
- else
- PlayState.SONG = Song.loadFromJson(poop, PlayState.rep.replay.songName);
+ PlayState.sm = SMFile.loadFile(PlayState.pathToSm + "/" + StringTools.replace(PlayState.rep.replay.songName, " ", "_") + ".sm");
}
- catch(e:Exception)
+ catch (e:Exception)
{
- Application.current.window.alert("Failed to load the song! Does the JSON exist?","Replays");
+ Application.current.window.alert("Make sure that the SM file is called "
+ + PlayState.pathToSm
+ + "/"
+ + StringTools.replace(PlayState.rep.replay.songName, " ", "_")
+ + ".sm!\nAs I couldn't read it.",
+ "SM Replays");
return;
}
- PlayState.isStoryMode = false;
- PlayState.storyDifficulty = PlayState.rep.replay.songDiff;
- PlayState.storyWeek = getWeekNumbFromSong(PlayState.rep.replay.songName);
- LoadingState.loadAndSwitchState(new PlayState());
}
- else
+ #end
+
+ try
{
- PlayState.rep = null;
- PlayState.loadRep = false;
+ if (PlayState.isSM)
+ {
+ PlayState.SONG = Song.loadFromJsonRAW(songPath);
+ }
+ else
+ {
+ var diff:String = ["-easy", "", "-hard"][PlayState.rep.replay.songDiff];
+ PlayState.SONG = Song.loadFromJson(PlayState.rep.replay.songName, diff);
+ }
}
+ catch (e:Exception)
+ {
+ Application.current.window.alert("Failed to load the song! Does the JSON exist?", "Replays");
+ return;
+ }
+ PlayState.isStoryMode = false;
+ PlayState.storyDifficulty = PlayState.rep.replay.songDiff;
+ PlayState.storyWeek = getWeekNumbFromSong(PlayState.rep.replay.songName);
+ LoadingState.loadAndSwitchState(new PlayState());
+ }
+ else
+ {
+ PlayState.rep = null;
+ PlayState.loadRep = false;
}
+ }
}
var isSettingControl:Bool = false;
function changeSelection(change:Int = 0)
{
- #if !switch
- // NGio.logEvent('Fresh');
- #end
-
FlxG.sound.play(Paths.sound('scrollMenu'), 0.4);
curSelected += change;
@@ -256,7 +264,15 @@ class LoadReplayState extends MusicBeatState
var rep:Replay = Replay.LoadReplay(actualNames[curSelected]);
- poggerDetails.text = "Replay Details - \nDate Created: " + rep.replay.timestamp + "\nSong: " + rep.replay.songName + "\nReplay Version: " + rep.replay.replayGameVer + ' (' + (rep.replay.replayGameVer != Replay.version ? "OUTDATED not useable!" : "Latest") + ')\n';
+ poggerDetails.text = "Replay Details - \nDate Created: "
+ + rep.replay.timestamp
+ + "\nSong: "
+ + rep.replay.songName
+ + "\nReplay Version: "
+ + rep.replay.replayGameVer
+ + ' ('
+ + (rep.replay.replayGameVer != Replay.version ? "OUTDATED not useable!" : "Latest")
+ + ')\n';
// selector.y = (70 * curSelected) + 30;
diff --git a/source/LoadingState.hx b/source/LoadingState.hx
index 6ef20fa67d..fd7dad4e8f 100644
--- a/source/LoadingState.hx
+++ b/source/LoadingState.hx
@@ -7,33 +7,31 @@ import flixel.FlxState;
import flixel.FlxSprite;
import flixel.graphics.frames.FlxAtlasFrames;
import flixel.util.FlxTimer;
-
-import openfl.utils.Assets;
+import openfl.utils.Assets as OpenFlAssets;
import lime.utils.Assets as LimeAssets;
import lime.utils.AssetLibrary;
import lime.utils.AssetManifest;
-
import haxe.io.Path;
class LoadingState extends MusicBeatState
{
inline static var MIN_TIME = 1.0;
-
+
var target:FlxState;
var stopMusic = false;
var callbacks:MultiCallback;
-
+
var logo:FlxSprite;
var gfDance:FlxSprite;
var danceLeft = false;
-
+
function new(target:FlxState, stopMusic:Bool)
{
super();
this.target = target;
this.stopMusic = stopMusic;
}
-
+
override function create()
{
logo = new FlxSprite(-150, -100);
@@ -52,71 +50,74 @@ class LoadingState extends MusicBeatState
gfDance.antialiasing = FlxG.save.data.antialiasing;
add(gfDance);
add(logo);
-
- initSongsManifest().onComplete
- (
- function (lib)
- {
- callbacks = new MultiCallback(onLoad);
- var introComplete = callbacks.add("introComplete");
- checkLoadSong(getSongPath());
- if (PlayState.SONG.needsVoices)
- checkLoadSong(getVocalPath());
- checkLibrary("shared");
- if (PlayState.storyWeek > 0)
- checkLibrary("week" + PlayState.storyWeek);
- else
- checkLibrary("tutorial");
-
- var fadeTime = 0.5;
- FlxG.camera.fade(FlxG.camera.bgColor, fadeTime, true);
- new FlxTimer().start(fadeTime + MIN_TIME, function(_) introComplete());
- }
- );
+
+ initSongsManifest().onComplete(function(lib)
+ {
+ callbacks = new MultiCallback(onLoad);
+ var introComplete = callbacks.add("introComplete");
+ checkLoadSong(getSongPath());
+ if (PlayState.SONG.needsVoices)
+ checkLoadSong(getVocalPath());
+ checkLibrary("shared");
+ if (PlayState.storyWeek > 0)
+ checkLibrary("week" + PlayState.storyWeek);
+ else
+ checkLibrary("tutorial");
+
+ var fadeTime = 0.5;
+ FlxG.camera.fade(FlxG.camera.bgColor, fadeTime, true);
+ new FlxTimer().start(fadeTime + MIN_TIME, function(_) introComplete());
+ });
}
-
+
function checkLoadSong(path:String)
{
- if (!Assets.cache.hasSound(path))
+ if (!OpenFlAssets.cache.hasSound(path))
{
- var library = Assets.getLibrary("songs");
+ var library = OpenFlAssets.getLibrary("songs");
final symbolPath = path.split(":").pop();
// @:privateAccess
// library.types.set(symbolPath, SOUND);
// @:privateAccess
// library.pathGroups.set(symbolPath, [library.__cacheBreak(symbolPath)]);
var callback = callbacks.add("song:" + path);
- Assets.loadSound(path).onComplete(function (_) { callback(); });
+ OpenFlAssets.loadSound(path).onComplete(function(_)
+ {
+ callback();
+ });
}
}
-
+
function checkLibrary(library:String)
{
- trace(Assets.hasLibrary(library));
- if (Assets.getLibrary(library) == null)
+ trace(OpenFlAssets.hasLibrary(library));
+ if (OpenFlAssets.getLibrary(library) == null)
{
@:privateAccess
if (!LimeAssets.libraryPaths.exists(library))
throw "Missing library: " + library;
-
+
var callback = callbacks.add("library:" + library);
- Assets.loadLibrary(library).onComplete(function (_) { callback(); });
+ OpenFlAssets.loadLibrary(library).onComplete(function(_)
+ {
+ callback();
+ });
}
}
-
+
override function beatHit()
{
super.beatHit();
-
+
logo.animation.play('bump');
danceLeft = !danceLeft;
-
+
if (danceLeft)
gfDance.animation.play('danceRight');
else
gfDance.animation.play('danceLeft');
}
-
+
override function update(elapsed:Float)
{
super.update(elapsed);
@@ -125,30 +126,30 @@ class LoadingState extends MusicBeatState
trace('fired: ' + callbacks.getFired() + " unfired:" + callbacks.getUnfired());
#end
}
-
+
function onLoad()
{
if (stopMusic && FlxG.sound.music != null)
FlxG.sound.music.stop();
-
+
FlxG.switchState(target);
}
-
+
static function getSongPath()
{
- return Paths.inst(PlayState.SONG.song);
+ return Paths.inst(PlayState.SONG.songId);
}
-
+
static function getVocalPath()
{
- return Paths.voices(PlayState.SONG.song);
+ return Paths.voices(PlayState.SONG.songId);
}
-
+
inline static public function loadAndSwitchState(target:FlxState, stopMusic = false)
{
FlxG.switchState(getNextState(target, stopMusic));
}
-
+
static function getNextState(target:FlxState, stopMusic = false):FlxState
{
Paths.setCurrentLevel("week" + PlayState.storyWeek);
@@ -156,41 +157,43 @@ class LoadingState extends MusicBeatState
var loaded = isSoundLoaded(getSongPath())
&& (!PlayState.SONG.needsVoices || isSoundLoaded(getVocalPath()))
&& isLibraryLoaded("shared");
-
+
if (!loaded)
return new LoadingState(target, stopMusic);
#end
if (stopMusic && FlxG.sound.music != null)
FlxG.sound.music.stop();
-
+
return target;
}
-
+
#if NO_PRELOAD_ALL
static function isSoundLoaded(path:String):Bool
{
- return Assets.cache.hasSound(path);
+ return OpenFlAssets.cache.hasSound(path);
}
-
+
static function isLibraryLoaded(library:String):Bool
{
- return Assets.getLibrary(library) != null;
+ return OpenFlAssets.getLibrary(library) != null;
}
#end
-
+
override function destroy()
{
super.destroy();
-
+
callbacks = null;
}
-
+
static function initSongsManifest()
{
+ // TODO: Hey, wait, does this break ModCore?
+
var id = "songs";
var promise = new Promise();
- var library = LimeAssets.getLibrary(id);
+ var library = OpenFlAssets.getLibrary(id);
if (library != null)
{
@@ -245,7 +248,7 @@ class LoadingState extends MusicBeatState
}
}).onError(function(_)
{
- promise.error("There is no asset library with an ID of \"" + id + "\"");
+ promise.error("There is no asset library with an ID of \"" + id + "\"");
});
return promise.future;
@@ -258,33 +261,33 @@ class MultiCallback
public var logId:String = null;
public var length(default, null) = 0;
public var numRemaining(default, null) = 0;
-
+
var unfired = new MapVoid>();
var fired = new Array();
-
- public function new (callback:Void->Void, logId:String = null)
+
+ public function new(callback:Void->Void, logId:String = null)
{
this.callback = callback;
this.logId = logId;
}
-
+
public function add(id = "untitled")
{
id = '$length:$id';
length++;
numRemaining++;
var func:Void->Void = null;
- func = function ()
+ func = function()
{
if (unfired.exists(id))
{
unfired.remove(id);
fired.push(id);
numRemaining--;
-
+
if (logId != null)
log('fired $id, $numRemaining remaining');
-
+
if (numRemaining == 0)
{
if (logId != null)
@@ -298,13 +301,16 @@ class MultiCallback
unfired[id] = func;
return func;
}
-
+
inline function log(msg):Void
{
if (logId != null)
trace('$logId: $msg');
}
-
- public function getFired() return fired.copy();
- public function getUnfired() return [for (id in unfired.keys()) id];
-}
\ No newline at end of file
+
+ public function getFired()
+ return fired.copy();
+
+ public function getUnfired()
+ return [for (id in unfired.keys()) id];
+}
diff --git a/source/LuaClass.hx b/source/LuaClass.hx
index 375054d1f4..0fb9579ef1 100644
--- a/source/LuaClass.hx
+++ b/source/LuaClass.hx
@@ -1,3 +1,4 @@
+#if FEATURE_LUAMODCHART
import flixel.FlxG;
import llua.Convert;
import llua.Lua;
@@ -7,9 +8,11 @@ import flixel.util.FlxAxes;
import flixel.FlxSprite;
import lime.app.Application;
import openfl.Lib;
+#if FEATURE_FILESYSTEM
import sys.io.File;
-import flash.display.BitmapData;
import sys.FileSystem;
+#end
+import flash.display.BitmapData;
import flixel.graphics.frames.FlxAtlasFrames;
import flixel.FlxCamera;
import flixel.tweens.FlxEase;
@@ -18,1772 +21,1936 @@ import haxe.DynamicAccess;
// completely yoinked from andromeda (thats what you get for stealing my callback inputs you fuckers /j)
-typedef LuaProperty = {
- var defaultValue:Any;
- var getter:(State,Any)->Int;
- var setter:State->Int;
+typedef LuaProperty =
+{
+ var defaultValue:Any;
+ var getter:(State, Any) -> Int;
+ var setter:State->Int;
}
-class LuaStorage {
- public static var ListOfCameras:Array = [];
- public static var objectProperties:Map> = [];
- public static var objects:Map = [];
+class LuaStorage
+{
+ public static var ListOfCameras:Array = [];
+ public static var objectProperties:Map> = [];
+ public static var objects:Map = [];
}
-class LuaClass {
- public var properties:Map = [];
- public var methods:MapInt> > = [];
- public var className:String = "BaseClass";
- private static var state:State;
- public var addToGlobal:Bool=true;
- public function Register(l:State){
- Lua.newtable(l);
- state=l;
- LuaStorage.objectProperties[className]=this.properties;
-
- var classIdx = Lua.gettop(l);
- Lua.pushvalue(l,classIdx);
- if(addToGlobal)
- Lua.setglobal(l,className);
-
- for (k in methods.keys()){
- Lua.pushcfunction(l,methods[k]);
- Lua.setfield(l,classIdx,k);
- }
-
- LuaL.newmetatable(l,className + "Metatable");
- var mtIdx = Lua.gettop(l);
- Lua.pushstring(l, "__index");
- Lua.pushcfunction(l,cpp.Callable.fromStaticFunction(index));
+class LuaClass
+{
+ public var properties:Map = [];
+ public var methods:MapInt>> = [];
+ public var className:String = "BaseClass";
+
+ private static var state:State;
+
+ public var addToGlobal:Bool = true;
+
+ public function Register(l:State)
+ {
+ Lua.newtable(l);
+ state = l;
+ LuaStorage.objectProperties[className] = this.properties;
+
+ var classIdx = Lua.gettop(l);
+ Lua.pushvalue(l, classIdx);
+ if (addToGlobal)
+ Lua.setglobal(l, className);
+
+ for (k in methods.keys())
+ {
+ Lua.pushcfunction(l, methods[k]);
+ Lua.setfield(l, classIdx, k);
+ }
+
+ LuaL.newmetatable(l, className + "Metatable");
+ var mtIdx = Lua.gettop(l);
+ Lua.pushstring(l, "__index");
+ Lua.pushcfunction(l, cpp.Callable.fromStaticFunction(index));
+ Lua.settable(l, mtIdx);
+
+ Lua.pushstring(l, "__newindex");
+ Lua.pushcfunction(l, cpp.Callable.fromStaticFunction(newindex));
+ Lua.settable(l, mtIdx);
+
+ for (k in properties.keys())
+ {
+ Lua.pushstring(l, k + "PropertyData");
+ Convert.toLua(l, properties[k].defaultValue);
+ Lua.settable(l, mtIdx);
+ }
+ Lua.pushstring(l, "_CLASSNAME");
+ Lua.pushstring(l, className);
Lua.settable(l, mtIdx);
- Lua.pushstring(l, "__newindex");
- Lua.pushcfunction(l,cpp.Callable.fromStaticFunction(newindex));
+ Lua.pushstring(l, "__metatable");
+ Lua.pushstring(l, "This metatable is locked.");
Lua.settable(l, mtIdx);
-
- for (k in properties.keys()){
- Lua.pushstring(l,k + "PropertyData");
- Convert.toLua(l,properties[k].defaultValue);
- Lua.settable(l,mtIdx);
- }
- Lua.pushstring(l,"_CLASSNAME");
- Lua.pushstring(l,className);
- Lua.settable(l,mtIdx);
-
- Lua.pushstring(l,"__metatable");
- Lua.pushstring(l,"This metatable is locked.");
- Lua.settable(l,mtIdx);
-
- Lua.setmetatable(l,classIdx);
-
- };
-
-
- public static function index(l:StatePointer):Int{
- var l = state;
- var index = Lua.tostring(l,-1);
- if(Lua.getmetatable(l,-2)!=0){
- var mtIdx = Lua.gettop(l);
- Lua.pushstring(l,index + "PropertyData");
- Lua.rawget(l,mtIdx);
- var data:Any = Convert.fromLua(l,-1);
- if(data!=null){
- Lua.pushstring(l,"_CLASSNAME");
- Lua.rawget(l,mtIdx);
- var clName = Lua.tostring(l,-1);
- if(LuaStorage.objectProperties[clName]!=null && LuaStorage.objectProperties[clName][index]!=null){
- return LuaStorage.objectProperties[clName][index].getter(l,data);
- }
- };
- }else{
- // TODO: throw an error!
- };
- return 0;
- }
-
- public static function newindex(l:StatePointer):Int{
- var l = state;
- var index = Lua.tostring(l,2);
- if(Lua.getmetatable(l,1)!=0){
- var mtIdx = Lua.gettop(l);
- Lua.pushstring(l,index + "PropertyData");
- Lua.rawget(l,mtIdx);
- var data:Any = Convert.fromLua(l,-1);
- if(data!=null){
- Lua.pushstring(l,"_CLASSNAME");
- Lua.rawget(l,mtIdx);
- var clName = Lua.tostring(l,-1);
- if(LuaStorage.objectProperties[clName]!=null && LuaStorage.objectProperties[clName][index]!=null){
- Lua.pop(l,2);
- return LuaStorage.objectProperties[clName][index].setter(l);
- }
- };
- }else{
- // TODO: throw an error!
- };
- return 0;
- }
-
- public static function SetProperty(l:State,tableIndex:Int,key:String,value:Any){
- Lua.pushstring(l,key + "PropertyData");
- Convert.toLua(l,value);
- Lua.settable(l,tableIndex );
-
- Lua.pop(l,2);
- }
-
- public static function DefaultSetter(l:State){
- var key = Lua.tostring(l,2);
-
- Lua.pushstring(l,key + "PropertyData");
- Lua.pushvalue(l,3);
- Lua.settable(l,4);
-
- Lua.pop(l,2);
- };
- public function new(){}
+
+ Lua.setmetatable(l, classIdx);
+ };
+
+ public static function index(l:StatePointer):Int
+ {
+ var l = state;
+ var index = Lua.tostring(l, -1);
+ if (Lua.getmetatable(l, -2) != 0)
+ {
+ var mtIdx = Lua.gettop(l);
+ Lua.pushstring(l, index + "PropertyData");
+ Lua.rawget(l, mtIdx);
+ var data:Any = Convert.fromLua(l, -1);
+ if (data != null)
+ {
+ Lua.pushstring(l, "_CLASSNAME");
+ Lua.rawget(l, mtIdx);
+ var clName = Lua.tostring(l, -1);
+ if (LuaStorage.objectProperties[clName] != null && LuaStorage.objectProperties[clName][index] != null)
+ {
+ return LuaStorage.objectProperties[clName][index].getter(l, data);
+ }
+ };
+ }
+ else
+ {
+ // TODO: throw an error!
+ };
+ return 0;
+ }
+
+ public static function newindex(l:StatePointer):Int
+ {
+ var l = state;
+ var index = Lua.tostring(l, 2);
+ if (Lua.getmetatable(l, 1) != 0)
+ {
+ var mtIdx = Lua.gettop(l);
+ Lua.pushstring(l, index + "PropertyData");
+ Lua.rawget(l, mtIdx);
+ var data:Any = Convert.fromLua(l, -1);
+ if (data != null)
+ {
+ Lua.pushstring(l, "_CLASSNAME");
+ Lua.rawget(l, mtIdx);
+ var clName = Lua.tostring(l, -1);
+ if (LuaStorage.objectProperties[clName] != null && LuaStorage.objectProperties[clName][index] != null)
+ {
+ Lua.pop(l, 2);
+ return LuaStorage.objectProperties[clName][index].setter(l);
+ }
+ };
+ }
+ else
+ {
+ // TODO: throw an error!
+ };
+ return 0;
+ }
+
+ public static function SetProperty(l:State, tableIndex:Int, key:String, value:Any)
+ {
+ Lua.pushstring(l, key + "PropertyData");
+ Convert.toLua(l, value);
+ Lua.settable(l, tableIndex);
+
+ Lua.pop(l, 2);
+ }
+
+ public static function DefaultSetter(l:State)
+ {
+ var key = Lua.tostring(l, 2);
+
+ Lua.pushstring(l, key + "PropertyData");
+ Lua.pushvalue(l, 3);
+ Lua.settable(l, 4);
+
+ Lua.pop(l, 2);
+ };
+
+ public function new()
+ {
+ }
+}
+
+class LuaNote extends LuaClass
+{ // again, stolen from andromeda but improved a lot for better thinking interoperability (I made that up)
+ private static var state:State;
+
+ public var note:Note;
+
+ public function new(connectedNote:Note, index:Int)
+ {
+ super();
+ className = "note_" + index;
+
+ note = connectedNote;
+
+ properties = [
+ "alpha" => {
+ defaultValue: 1,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedNote.alpha);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "angle" => {
+ defaultValue: 1,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedNote.angle);
+ return 1;
+ },
+ setter: function(l:State):Int
+ {
+ // 1 = self
+ // 2 = key
+ // 3 = value
+ // 4 = metatable
+ if (Lua.type(l, 3) != Lua.LUA_TNUMBER)
+ {
+ LuaL.error(l, "invalid argument #3 (number expected, got " + Lua.typename(l, Lua.type(l, 3)) + ")");
+ return 0;
+ }
+
+ var angle = Lua.tonumber(l, 3);
+ connectedNote.modAngle = angle;
+
+ LuaClass.DefaultSetter(l);
+ return 0;
+ }
+ },
+
+ "strumTime" => {
+ defaultValue: 1,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedNote.strumTime);
+ return 1;
+ },
+ setter: function(l:State):Int
+ {
+ // 1 = self
+ // 2 = key
+ // 3 = value
+ // 4 = metatable
+ // mf you can't modify this shit
+ return 0;
+ }
+ },
+
+ "data" => {
+ defaultValue: 1,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedNote.noteData);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "mustPress" => {
+ defaultValue: 1,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushboolean(l, connectedNote.mustPress);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "beat" => {
+ defaultValue: 1,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedNote.beat);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "isSustain" => {
+ defaultValue: 1,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedNote.rawNoteData);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "isParent" => {
+ defaultValue: 1,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushboolean(l, connectedNote.isParent);
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "isParent is read-only.");
+ return 0;
+ }
+ },
+
+ "getParent" => {
+ defaultValue: 1,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushstring(l, "note_" + connectedNote.parent.luaID);
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "getParent is read-only.");
+ return 0;
+ }
+ },
+
+ "getChildren" => {
+ defaultValue: 1,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.newtable(l);
+
+ for (i in 0...connectedNote.children.length)
+ {
+ var note = connectedNote.children[i];
+ Lua.pushstring(l, "note_" + note.luaID);
+ Lua.rawseti(l, -2, i);
+ }
+
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "getChildren is read-only.");
+ return 0;
+ }
+ },
+
+ "getSpotInline" => {
+ defaultValue: 1,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedNote.spotInLine);
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "spot in line is read-only.");
+ return 0;
+ }
+ },
+
+ "x" => {
+ defaultValue: connectedNote.x,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedNote.x);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "tweenPos" => {
+ defaultValue: 0,
+ getter: function(l:State, data:Any)
+ {
+ Lua.pushcfunction(l, tweenPosC);
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "tweenPos is read-only.");
+ return 0;
+ }
+ },
+
+ "tweenAlpha" => {
+ defaultValue: 0,
+ getter: function(l:State, data:Any)
+ {
+ Lua.pushcfunction(l, tweenAlphaC);
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "tweenAlpha is read-only.");
+ return 0;
+ }
+ },
+
+ "tweenAngle" => {
+ defaultValue: 0,
+ getter: function(l:State, data:Any)
+ {
+ Lua.pushcfunction(l, tweenAngleC);
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "tweenAngle is read-only.");
+ return 0;
+ }
+ },
+
+ "y" => {
+ defaultValue: connectedNote.y,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedNote.y);
+ return 1;
+ },
+ setter: SetNumProperty
+ }
+
+ ];
+ }
+
+ private static function findNote(time:Float, data:Int)
+ {
+ for (i in PlayState.instance.notes)
+ {
+ if (i.strumTime == time && i.noteData == data)
+ {
+ return i;
+ }
+ }
+ return null;
+ }
+
+ private static function tweenPos(l:StatePointer):Int
+ {
+ // 1 = self
+ // 2 = x
+ // 3 = y
+ // 4 = time
+ var xp = LuaL.checknumber(state, 2);
+ var yp = LuaL.checknumber(state, 3);
+ var time = LuaL.checknumber(state, 4);
+
+ Lua.getfield(state, 1, "strumTime");
+ var time = Lua.tonumber(state, -1);
+ Lua.getfield(state, 1, "data");
+ var data = Lua.tonumber(state, -1);
+
+ var note = findNote(time, Math.floor(data));
+
+ if (note == null)
+ {
+ LuaL.error(state, "Failure to tween (couldn't find note " + time + ")");
+ return 0;
+ }
+
+ FlxTween.tween(note, {x: xp, y: yp}, time);
+
+ return 0;
+ }
+
+ private static function tweenAngle(l:StatePointer):Int
+ {
+ // 1 = self
+ // 2 = angle
+ // 3 = time
+ var nangle = LuaL.checknumber(state, 2);
+ var time = LuaL.checknumber(state, 3);
+
+ Lua.getfield(state, 1, "strumTime");
+ var time = Lua.tonumber(state, -1);
+ Lua.getfield(state, 1, "data");
+ var data = Lua.tonumber(state, -1);
+
+ var note = findNote(time, Math.floor(data));
+
+ if (note == null)
+ {
+ LuaL.error(state, "Failure to tween (couldn't find note " + time + ")");
+ return 0;
+ }
+
+ FlxTween.tween(note, {modAngle: nangle}, time);
+
+ return 0;
+ }
+
+ private static function tweenAlpha(l:StatePointer):Int
+ {
+ // 1 = self
+ // 2 = alpha
+ // 3 = time
+ var nalpha = LuaL.checknumber(state, 2);
+ var time = LuaL.checknumber(state, 3);
+
+ Lua.getfield(state, 1, "strumTime");
+ var time = Lua.tonumber(state, -1);
+ Lua.getfield(state, 1, "data");
+ var data = Lua.tonumber(state, -1);
+
+ var note = findNote(time, Math.floor(data));
+
+ if (note == null)
+ {
+ LuaL.error(state, "Failure to tween (couldn't find note " + time + ")");
+ return 0;
+ }
+ FlxTween.tween(note, {alpha: nalpha}, time);
+
+ return 0;
+ }
+
+ private static var tweenPosC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenPos);
+ private static var tweenAngleC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenAngle);
+ private static var tweenAlphaC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenAlpha);
+
+ private function SetNumProperty(l:State)
+ {
+ // 1 = self
+ // 2 = key
+ // 3 = value
+ // 4 = metatable
+ if (Lua.type(l, 3) != Lua.LUA_TNUMBER)
+ {
+ LuaL.error(l, "invalid argument #3 (number expected, got " + Lua.typename(l, Lua.type(l, 3)) + ")");
+ return 0;
+ }
+ note.modifiedByLua = true;
+ Reflect.setProperty(note, Lua.tostring(l, 2), Lua.tonumber(l, 3));
+ return 0;
+ }
+
+ override function Register(l:State)
+ {
+ state = l;
+ super.Register(l);
+ }
+}
+
+class LuaReceptor extends LuaClass
+{ // again, stolen from andromeda but improved a lot for better thinking interoperability (I made that up)
+ private static var state:State;
+
+ public var sprite:StaticArrow;
+
+ public function new(connectedSprite:StaticArrow, name:String)
+ {
+ super();
+ var defaultY = connectedSprite.y;
+ var defaultX = connectedSprite.x;
+ var defaultAngle = connectedSprite.angle;
+
+ sprite = connectedSprite;
+
+ className = name;
+
+ properties = [
+ "alpha" => {
+ defaultValue: 1,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedSprite.alpha);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "id" => {
+ defaultValue: name,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushstring(l, name);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "angle" => {
+ defaultValue: 0,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedSprite.angle);
+ return 1;
+ },
+ setter: function(l:State):Int
+ {
+ // 1 = self
+ // 2 = key
+ // 3 = value
+ // 4 = metatable
+ if (Lua.type(l, 3) != Lua.LUA_TNUMBER)
+ {
+ LuaL.error(l, "invalid argument #3 (number expected, got " + Lua.typename(l, Lua.type(l, 3)) + ")");
+ return 0;
+ }
+
+ var angle = Lua.tonumber(l, 3);
+ connectedSprite.modAngle = angle;
+
+ LuaClass.DefaultSetter(l);
+ return 0;
+ }
+ },
+
+ "x" => {
+ defaultValue: connectedSprite.x,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedSprite.x);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "y" => {
+ defaultValue: connectedSprite.y,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedSprite.y);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "defaultAngle" => {
+ defaultValue: defaultAngle,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, defaultAngle);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "defaultX" => {
+ defaultValue: defaultX,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, defaultX);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "tweenPos" => {
+ defaultValue: 0,
+ getter: function(l:State, data:Any)
+ {
+ Lua.pushcfunction(l, tweenPosC);
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "tweenPos is read-only.");
+ return 0;
+ }
+ },
+
+ "tweenAlpha" => {
+ defaultValue: 0,
+ getter: function(l:State, data:Any)
+ {
+ Lua.pushcfunction(l, tweenAlphaC);
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "tweenAlpha is read-only.");
+ return 0;
+ }
+ },
+
+ "tweenAngle" => {
+ defaultValue: 0,
+ getter: function(l:State, data:Any)
+ {
+ Lua.pushcfunction(l, tweenAngleC);
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "tweenAngle is read-only.");
+ return 0;
+ }
+ },
+
+ "defaultY" => {
+ defaultValue: defaultY,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, defaultY);
+ return 1;
+ },
+ setter: function(l:State):Int
+ {
+ // 1 = self
+ // 2 = key
+ // 3 = value
+ // 4 = metatable
+ return 0;
+ }
+ }
+
+ ];
+ }
+
+ private static function findReceptor(index:Int)
+ {
+ for (i in 0...PlayState.strumLineNotes.length)
+ {
+ if (index == i)
+ {
+ return PlayState.strumLineNotes.members[i];
+ }
+ }
+ return null;
+ }
+
+ private static function tweenPos(l:StatePointer):Int
+ {
+ // 1 = self
+ // 2 = x
+ // 3 = y
+ // 4 = time
+ var xp = LuaL.checknumber(state, 2);
+ var yp = LuaL.checknumber(state, 3);
+ var time = LuaL.checknumber(state, 4);
+
+ Lua.getfield(state, 1, "id");
+ var index = Std.parseInt(Lua.tostring(state, -1).split('_')[1]);
+
+ var receptor = findReceptor(index);
+
+ if (receptor == null)
+ {
+ LuaL.error(state, "Failure to tween (couldn't find receptor " + index + ")");
+ return 0;
+ }
+
+ FlxTween.tween(receptor, {x: xp, y: yp}, time);
+
+ return 0;
+ }
+
+ private static function tweenAngle(l:StatePointer):Int
+ {
+ // 1 = self
+ // 2 = angle
+ // 3 = time
+ var nangle = LuaL.checknumber(state, 2);
+ var time = LuaL.checknumber(state, 3);
+
+ Lua.getfield(state, 1, "id");
+ var index = Std.parseInt(Lua.tostring(state, -1).split('_')[1]);
+
+ var receptor = findReceptor(index);
+
+ if (receptor == null)
+ {
+ LuaL.error(state, "Failure to tween (couldn't find receptor " + index + ")");
+ return 0;
+ }
+
+ FlxTween.tween(receptor, {modAngle: nangle}, time);
+
+ return 0;
+ }
+
+ private static function tweenAlpha(l:StatePointer):Int
+ {
+ // 1 = self
+ // 2 = alpha
+ // 3 = time
+ var nalpha = LuaL.checknumber(state, 2);
+ var time = LuaL.checknumber(state, 3);
+
+ Lua.getfield(state, 1, "id");
+ var index = Std.parseInt(Lua.tostring(state, -1).split('_')[1]);
+
+ var receptor = findReceptor(index);
+
+ if (receptor == null)
+ {
+ LuaL.error(state, "Failure to tween (couldn't find receptor " + index + ")");
+ return 0;
+ }
+
+ FlxTween.tween(receptor, {alpha: nalpha}, time);
+
+ return 0;
+ }
+
+ private static var tweenPosC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenPos);
+ private static var tweenAngleC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenAngle);
+ private static var tweenAlphaC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenAlpha);
+
+ private function SetNumProperty(l:State)
+ {
+ // 1 = self
+ // 2 = key
+ // 3 = value
+ // 4 = metatable
+ if (Lua.type(l, 3) != Lua.LUA_TNUMBER)
+ {
+ LuaL.error(l, "invalid argument #3 (number expected, got " + Lua.typename(l, Lua.type(l, 3)) + ")");
+ return 0;
+ }
+
+ sprite.modifiedByLua = true;
+
+ Reflect.setProperty(sprite, Lua.tostring(l, 2), Lua.tonumber(l, 3));
+ return 0;
+ }
+
+ override function Register(l:State)
+ {
+ state = l;
+ super.Register(l);
+ trace("Registered " + className);
+ }
+}
+
+class LuaCamera extends LuaClass
+{ // again, stolen from andromeda but improved a lot for better thinking interoperability (I made that up)
+ private static var state:State;
+
+ public var cam:FlxCamera;
+
+ public function new(connectedCamera:FlxCamera, name:String)
+ {
+ super();
+ cam = connectedCamera;
+
+ className = name;
+
+ properties = [
+ "alpha" => {
+ defaultValue: 1,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedCamera.alpha);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "angle" => {
+ defaultValue: 0,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedCamera.angle);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "x" => {
+ defaultValue: connectedCamera.x,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedCamera.x);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "y" => {
+ defaultValue: connectedCamera.y,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedCamera.y);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "id" => {
+ defaultValue: className,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushstring(l, className);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "tweenZoom" => {
+ defaultValue: 0,
+ getter: function(l:State, data:Any)
+ {
+ Lua.pushcfunction(l, tweenZoomC);
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "tweenZoom is read-only.");
+ return 0;
+ }
+ },
+
+ "tweenPos" => {
+ defaultValue: 0,
+ getter: function(l:State, data:Any)
+ {
+ Lua.pushcfunction(l, tweenPosC);
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "tweenPos is read-only.");
+ return 0;
+ }
+ },
+
+ "tweenAlpha" => {
+ defaultValue: 0,
+ getter: function(l:State, data:Any)
+ {
+ Lua.pushcfunction(l, tweenAlphaC);
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "tweenAlpha is read-only.");
+ return 0;
+ }
+ },
+
+ "tweenAngle" => {
+ defaultValue: 0,
+ getter: function(l:State, data:Any)
+ {
+ Lua.pushcfunction(l, tweenAngleC);
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "tweenAngle is read-only.");
+ return 0;
+ }
+ },
+ ];
+
+ LuaStorage.ListOfCameras.push(this);
+ }
+
+ private function SetNumProperty(l:State)
+ {
+ // 1 = self
+ // 2 = key
+ // 3 = value
+ // 4 = metatable
+ if (Lua.type(l, 3) != Lua.LUA_TNUMBER)
+ {
+ LuaL.error(l, "invalid argument #3 (number expected, got " + Lua.typename(l, Lua.type(l, 3)) + ")");
+ return 0;
+ }
+ Reflect.setProperty(cam, Lua.tostring(l, 2), Lua.tonumber(l, 3));
+ return 0;
+ }
+
+ private static function tweenZoom(l:StatePointer):Int
+ {
+ // 1 = self
+ // 2 = zoom
+ // 3 = time
+ var nzoom = LuaL.checknumber(state, 2);
+ var time = LuaL.checknumber(state, 3);
+
+ Lua.getfield(state, 1, "id");
+ var index = Lua.tostring(state, -1);
+
+ var camera:FlxCamera = null;
+
+ for (i in LuaStorage.ListOfCameras)
+ {
+ if (i.className == index)
+ {
+ camera = i.cam;
+ }
+ }
+
+ if (camera == null)
+ {
+ LuaL.error(state, "Failure to tween (couldn't find camera " + index + ")");
+ return 0;
+ }
+
+ FlxTween.tween(camera, {zoom: nzoom}, time);
+
+ return 0;
+ }
+
+ private static var tweenZoomC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenZoom);
+
+ private static function tweenPos(l:StatePointer):Int
+ {
+ // 1 = self
+ // 2 = x
+ // 3 = y
+ // 4 = time
+ var xp = LuaL.checknumber(state, 2);
+ var yp = LuaL.checknumber(state, 3);
+ var time = LuaL.checknumber(state, 4);
+
+ Lua.getfield(state, 1, "id");
+ var index = Lua.tostring(state, -1);
+
+ var camera:FlxCamera = null;
+
+ for (i in LuaStorage.ListOfCameras)
+ {
+ if (i.className == index)
+ camera = i.cam;
+ }
+
+ if (camera == null)
+ {
+ LuaL.error(state, "Failure to tween (couldn't find camera " + index + ")");
+ return 0;
+ }
+
+ FlxTween.tween(camera, {x: xp, y: yp}, time);
+
+ return 0;
+ }
+
+ private static function tweenAngle(l:StatePointer):Int
+ {
+ // 1 = self
+ // 2 = angle
+ // 3 = time
+ var nangle = LuaL.checknumber(state, 2);
+ var time = LuaL.checknumber(state, 3);
+
+ Lua.getfield(state, 1, "id");
+ var index = Lua.tostring(state, -1);
+
+ var camera:FlxCamera = null;
+
+ for (i in LuaStorage.ListOfCameras)
+ {
+ if (i.className == index)
+ camera = i.cam;
+ }
+
+ if (camera == null)
+ {
+ LuaL.error(state, "Failure to tween (couldn't find camera " + index + ")");
+ return 0;
+ }
+
+ FlxTween.tween(camera, {modAngle: nangle}, time);
+
+ return 0;
+ }
+
+ private static function tweenAlpha(l:StatePointer):Int
+ {
+ // 1 = self
+ // 2 = alpha
+ // 3 = time
+ var nalpha = LuaL.checknumber(state, 2);
+ var time = LuaL.checknumber(state, 3);
+
+ Lua.getfield(state, 1, "id");
+ var index = Lua.tostring(state, -1);
+
+ var camera:FlxCamera = null;
+
+ for (i in LuaStorage.ListOfCameras)
+ {
+ if (i.className == index)
+ camera = i.cam;
+ }
+
+ if (camera == null)
+ {
+ LuaL.error(state, "Failure to tween (couldn't find camera " + index + ")");
+ return 0;
+ }
+
+ FlxTween.tween(camera, {alpha: nalpha}, time);
+
+ return 0;
+ }
+
+ private static var tweenPosC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenPos);
+ private static var tweenAngleC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenAngle);
+ private static var tweenAlphaC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenAlpha);
+
+ override function Register(l:State)
+ {
+ state = l;
+ super.Register(l);
+ trace("Registered " + className);
+ }
+}
+
+class LuaCharacter extends LuaClass
+{ // again, stolen from andromeda but improved a lot for better thinking interoperability (I made that up)
+ private static var state:State;
+
+ public var char:Character;
+ public var isPlayer:Bool = false;
+
+ public static var ListOfCharacters:Array = [];
+
+ public function new(connectedCharacter:Character, name:String)
+ {
+ super();
+ className = name;
+
+ char = connectedCharacter;
+
+ isPlayer = char.isPlayer;
+
+ properties = [
+ "alpha" => {
+ defaultValue: 1,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedCharacter.alpha);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "angle" => {
+ defaultValue: 1,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedCharacter.angle);
+ return 1;
+ },
+ setter: function(l:State):Int
+ {
+ // 1 = self
+ // 2 = key
+ // 3 = value
+ // 4 = metatable
+ if (Lua.type(l, 3) != Lua.LUA_TNUMBER)
+ {
+ LuaL.error(l, "invalid argument #3 (number expected, got " + Lua.typename(l, Lua.type(l, 3)) + ")");
+ return 0;
+ }
+
+ var angle = Lua.tonumber(l, 3);
+ connectedCharacter.angle = angle;
+
+ LuaClass.DefaultSetter(l);
+ return 0;
+ }
+ },
+
+ "x" => {
+ defaultValue: connectedCharacter.x,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedCharacter.x);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "tweenPos" => {
+ defaultValue: 0,
+ getter: function(l:State, data:Any)
+ {
+ Lua.pushcfunction(l, tweenPosC);
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "tweenPos is read-only.");
+ return 0;
+ }
+ },
+
+ "id" => {
+ defaultValue: name,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushstring(l, name);
+ return 1;
+ },
+ setter: SetNumProperty
+ },
+
+ "tweenAlpha" => {
+ defaultValue: 0,
+ getter: function(l:State, data:Any)
+ {
+ Lua.pushcfunction(l, tweenAlphaC);
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "tweenAlpha is read-only.");
+ return 0;
+ }
+ },
+
+ "tweenAngle" => {
+ defaultValue: 0,
+ getter: function(l:State, data:Any)
+ {
+ Lua.pushcfunction(l, tweenAngleC);
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "tweenAngle is read-only.");
+ return 0;
+ }
+ },
+
+ "changeCharacter" => {
+ defaultValue: 0,
+ getter: function(l:State, data:Any)
+ {
+ Lua.pushcfunction(l, changeCharacterC);
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "changeCharacter is read-only.");
+ return 0;
+ }
+ },
+
+ "playAnim" => {
+ defaultValue: 0,
+ getter: function(l:State, data:Any)
+ {
+ Lua.pushcfunction(l, playAnimC);
+ return 1;
+ },
+ setter: function(l:State)
+ {
+ LuaL.error(l, "playAnim is read-only.");
+ return 0;
+ }
+ },
+
+ "y" => {
+ defaultValue: connectedCharacter.y,
+ getter: function(l:State, data:Any):Int
+ {
+ Lua.pushnumber(l, connectedCharacter.y);
+ return 1;
+ },
+ setter: SetNumProperty
+ }
+
+ ];
+
+ ListOfCharacters.push(this);
+ }
+
+ private static function findNote(time:Float, data:Int)
+ {
+ for (i in PlayState.instance.notes)
+ {
+ if (i.strumTime == time && i.noteData == data)
+ {
+ return i;
+ }
+ }
+ return null;
+ }
+
+ private static function tweenPos(l:StatePointer):Int
+ {
+ // 1 = self
+ // 2 = x
+ // 3 = y
+ // 4 = time
+ var xp = LuaL.checknumber(state, 2);
+ var yp = LuaL.checknumber(state, 3);
+ var time = LuaL.checknumber(state, 4);
+
+ Lua.getfield(state, 1, "id");
+ var index = Lua.tostring(state, -1);
+
+ var char:Character = null;
+
+ for (i in ListOfCharacters)
+ {
+ if (i.className == index)
+ char = i.char;
+ }
+
+ if (char == null)
+ {
+ LuaL.error(state, "Failure to tween (couldn't find character " + index + ")");
+ return 0;
+ }
+
+ FlxTween.tween(char, {x: xp, y: yp}, time);
+
+ return 0;
+ }
+
+ private static function tweenAngle(l:StatePointer):Int
+ {
+ // 1 = self
+ // 2 = angle
+ // 3 = time
+ var nangle = LuaL.checknumber(state, 2);
+ var time = LuaL.checknumber(state, 3);
+
+ Lua.getfield(state, 1, "id");
+ var index = Lua.tostring(state, -1);
+
+ var char:Character = null;
+
+ for (i in ListOfCharacters)
+ {
+ if (i.className == index)
+ char = i.char;
+ }
+
+ if (char == null)
+ {
+ LuaL.error(state, "Failure to tween (couldn't find character " + index + ")");
+ return 0;
+ }
+
+ FlxTween.tween(char, {angle: nangle}, time);
+
+ return 0;
+ }
+
+ private static function tweenAlpha(l:StatePointer):Int
+ {
+ // 1 = self
+ // 2 = alpha
+ // 3 = time
+ var nalpha = LuaL.checknumber(state, 2);
+ var time = LuaL.checknumber(state, 3);
+
+ Lua.getfield(state, 1, "id");
+ var index = Lua.tostring(state, -1);
+
+ var char:Character = null;
+
+ for (i in ListOfCharacters)
+ {
+ if (i.className == index)
+ char = i.char;
+ }
+
+ if (char == null)
+ {
+ LuaL.error(state, "Failure to tween (couldn't find character " + index + ")");
+ return 0;
+ }
+
+ FlxTween.tween(char, {alpha: nalpha}, time);
+
+ return 0;
+ }
+
+ private static function changeCharacter(l:StatePointer):Int
+ {
+ // 1 = self
+ // 2 = newName
+ // 3 = x
+ // 4 = y
+ var newName = LuaL.checkstring(state, 2);
+ var x = LuaL.checknumber(state, 3);
+ var y = LuaL.checknumber(state, 4);
+
+ Lua.getfield(state, 1, "id");
+ var index = Lua.tostring(state, -1);
+
+ var char:Character = null;
+ var property:LuaCharacter = null;
+
+ for (i in ListOfCharacters)
+ {
+ if (i.className == index)
+ {
+ char = i.char;
+ property = i;
+ }
+ }
+
+ trace("fuck " + char);
+
+ if (char == null)
+ {
+ LuaL.error(state, "Failure to tween (couldn't find character " + index + ")");
+ return 0;
+ }
+
+ PlayState.instance.remove(char);
+
+ PlayState.dad = new Character(x, y, newName, char.isPlayer);
+
+ property.char = PlayState.dad;
+
+ PlayState.instance.add(PlayState.dad);
+
+ return 0;
+ }
+
+ private static function playAnim(l:StatePointer):Int
+ {
+ // 1 = self
+ // 2 = animation
+ var anim = LuaL.checkstring(state, 2);
+
+ Lua.getfield(state, 1, "id");
+ var index = Lua.tostring(state, -1);
+
+ var char:Character = null;
+
+ for (i in ListOfCharacters)
+ {
+ if (i.className == index)
+ {
+ char = i.char;
+ }
+ }
+
+ if (char == null)
+ {
+ LuaL.error(state, "Failure to tween (couldn't find character " + index + ")");
+ return 0;
+ }
+
+ char.playAnim(anim);
+
+ return 0;
+ }
+
+ private static var playAnimC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(playAnim);
+ private static var changeCharacterC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(changeCharacter);
+ private static var tweenPosC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenPos);
+ private static var tweenAngleC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenAngle);
+ private static var tweenAlphaC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenAlpha);
+
+ private function SetNumProperty(l:State)
+ {
+ // 1 = self
+ // 2 = key
+ // 3 = value
+ // 4 = metatable
+ if (Lua.type(l, 3) != Lua.LUA_TNUMBER)
+ {
+ LuaL.error(l, "invalid argument #3 (number expected, got " + Lua.typename(l, Lua.type(l, 3)) + ")");
+ return 0;
+ }
+ Reflect.setProperty(char, Lua.tostring(l, 2), Lua.tonumber(l, 3));
+ return 0;
+ }
+
+ override function Register(l:State)
+ {
+ state = l;
+ super.Register(l);
+ }
}
-class LuaNote extends LuaClass { // again, stolen from andromeda but improved a lot for better thinking interoperability (I made that up)
- private static var state:State;
- public var note:Note;
- public function new(connectedNote:Note, index:Int){
- super();
- className= "note_" + index;
-
- note = connectedNote;
-
- properties=[
- "alpha"=>{
- defaultValue: 1 ,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedNote.alpha);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "angle"=>{
- defaultValue: 1 ,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedNote.angle);
- return 1;
- },
- setter: function(l:State):Int{
- // 1 = self
- // 2 = key
- // 3 = value
- // 4 = metatable
- if(Lua.type(l,3)!=Lua.LUA_TNUMBER){
- LuaL.error(l,"invalid argument #3 (number expected, got " + Lua.typename(l,Lua.type(l,3)) + ")");
- return 0;
- }
-
- var angle = Lua.tonumber(l,3);
- connectedNote.modAngle = angle;
-
- LuaClass.DefaultSetter(l);
- return 0;
- }
- },
-
- "strumTime"=>{
- defaultValue: 1 ,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedNote.strumTime);
- return 1;
- },
- setter: function(l:State):Int{
- // 1 = self
- // 2 = key
- // 3 = value
- // 4 = metatable
- // mf you can't modify this shit
- return 0;
- }
- },
-
- "data"=>{
- defaultValue: 1 ,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedNote.noteData);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "mustPress"=>{
- defaultValue: 1 ,
- getter: function(l:State,data:Any):Int{
- Lua.pushboolean(l,connectedNote.mustPress);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "beat"=>{
- defaultValue: 1 ,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedNote.beat);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "isSustain"=>{
- defaultValue: 1 ,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedNote.rawNoteData);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "isParent"=>{
- defaultValue: 1 ,
- getter: function(l:State,data:Any):Int{
- Lua.pushboolean(l,connectedNote.isParent);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"isParent is read-only.");
- return 0;
- }
- },
-
- "getParent"=>{
- defaultValue: 1 ,
- getter: function(l:State,data:Any):Int{
- Lua.pushstring(l,"note_" + connectedNote.parent.luaID);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"getParent is read-only.");
- return 0;
- }
- },
-
- "getChildren"=>{
- defaultValue: 1 ,
- getter: function(l:State,data:Any):Int{
- Lua.newtable(l);
-
- for(i in 0...connectedNote.children.length)
- {
- var note = connectedNote.children[i];
- Lua.pushstring(l,"note_" + note.luaID);
- Lua.rawseti(l, -2, i);
- }
-
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"getChildren is read-only.");
- return 0;
- }
- },
-
- "getSpotInline"=>{
- defaultValue: 1 ,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedNote.spotInLine);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"spot in line is read-only.");
- return 0;
- }
- },
-
- "x"=> {
- defaultValue: connectedNote.x,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedNote.x);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "tweenPos"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,tweenPosC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"tweenPos is read-only.");
- return 0;
- }
- },
-
- "tweenAlpha"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,tweenAlphaC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"tweenAlpha is read-only.");
- return 0;
- }
- },
-
- "tweenAngle"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,tweenAngleC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"tweenAngle is read-only.");
- return 0;
- }
- },
-
-
- "y"=> {
- defaultValue: connectedNote.y,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedNote.y);
- return 1;
- },
- setter: SetNumProperty
- }
-
- ];
- }
-
-
- private static function findNote(time:Float,data:Int)
- {
-
- for(i in PlayState.instance.notes)
- {
- if (i.strumTime == time && i.noteData == data)
- {
- return i;
- }
- }
- return null;
- }
-
- private static function tweenPos(l:StatePointer):Int{
- // 1 = self
- // 2 = x
- // 3 = y
- // 4 = time
- var xp = LuaL.checknumber(state,2);
- var yp = LuaL.checknumber(state,3);
- var time = LuaL.checknumber(state,4);
-
- Lua.getfield(state,1,"strumTime");
- var time = Lua.tonumber(state,-1);
- Lua.getfield(state,1,"data");
- var data = Lua.tonumber(state,-1);
-
- var note = findNote(time,Math.floor(data));
-
- if (note == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find note " + time + ")");
- return 0;
-
- }
-
- FlxTween.tween(note,{x: xp,y:yp},time);
-
- return 0;
- }
-
- private static function tweenAngle(l:StatePointer):Int{
- // 1 = self
- // 2 = angle
- // 3 = time
- var nangle = LuaL.checknumber(state,2);
- var time = LuaL.checknumber(state,3);
-
- Lua.getfield(state,1,"strumTime");
- var time = Lua.tonumber(state,-1);
- Lua.getfield(state,1,"data");
- var data = Lua.tonumber(state,-1);
-
- var note = findNote(time,Math.floor(data));
-
- if (note == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find note " + time + ")");
- return 0;
-
- }
-
- FlxTween.tween(note,{modAngle: nangle},time);
-
- return 0;
- }
-
- private static function tweenAlpha(l:StatePointer):Int{
- // 1 = self
- // 2 = alpha
- // 3 = time
- var nalpha = LuaL.checknumber(state,2);
- var time = LuaL.checknumber(state,3);
-
- Lua.getfield(state,1,"strumTime");
- var time = Lua.tonumber(state,-1);
- Lua.getfield(state,1,"data");
- var data = Lua.tonumber(state,-1);
-
- var note = findNote(time,Math.floor(data));
-
- if (note == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find note " + time + ")");
- return 0;
-
- }
- FlxTween.tween(note,{alpha: nalpha},time);
-
- return 0;
- }
-
- private static var tweenPosC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenPos);
- private static var tweenAngleC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenAngle);
- private static var tweenAlphaC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenAlpha);
-
- private function SetNumProperty(l:State){
- // 1 = self
- // 2 = key
- // 3 = value
- // 4 = metatable
- if(Lua.type(l,3)!=Lua.LUA_TNUMBER){
- LuaL.error(l,"invalid argument #3 (number expected, got " + Lua.typename(l,Lua.type(l,3)) + ")");
- return 0;
- }
- note.modifiedByLua = true;
- Reflect.setProperty(note,Lua.tostring(l,2),Lua.tonumber(l,3));
- return 0;
- }
-
- override function Register(l:State){
- state=l;
- super.Register(l);
- }
- }
-
- class LuaReceptor extends LuaClass { // again, stolen from andromeda but improved a lot for better thinking interoperability (I made that up)
- private static var state:State;
- public var sprite:StaticArrow;
- public function new(connectedSprite:StaticArrow, name:String){
- super();
- var defaultY = connectedSprite.y;
- var defaultX = connectedSprite.x;
- var defaultAngle = connectedSprite.angle;
-
- sprite = connectedSprite;
-
- className= name;
-
- properties=[
- "alpha"=>{
- defaultValue: 1 ,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedSprite.alpha);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "id"=>{
- defaultValue: name ,
- getter: function(l:State,data:Any):Int{
- Lua.pushstring(l,name);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "angle"=>{
- defaultValue: 0 ,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedSprite.angle);
- return 1;
- },
- setter: function(l:State):Int{
- // 1 = self
- // 2 = key
- // 3 = value
- // 4 = metatable
- if(Lua.type(l,3)!=Lua.LUA_TNUMBER){
- LuaL.error(l,"invalid argument #3 (number expected, got " + Lua.typename(l,Lua.type(l,3)) + ")");
- return 0;
- }
-
- var angle = Lua.tonumber(l,3);
- connectedSprite.modAngle = angle;
-
- LuaClass.DefaultSetter(l);
- return 0;
- }
- },
-
- "x"=> {
- defaultValue: connectedSprite.x,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedSprite.x);
- return 1;
- },
- setter: SetNumProperty
- },
-
-
- "y"=> {
- defaultValue: connectedSprite.y,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedSprite.y);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "defaultAngle"=>{
- defaultValue: defaultAngle ,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,defaultAngle);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "defaultX"=> {
- defaultValue: defaultX,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,defaultX);
- return 1;
- },
- setter: SetNumProperty
- },
-
-
-
- "tweenPos"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,tweenPosC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"tweenPos is read-only.");
- return 0;
- }
- },
-
- "tweenAlpha"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,tweenAlphaC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"tweenAlpha is read-only.");
- return 0;
- }
- },
-
- "tweenAngle"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,tweenAngleC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"tweenAngle is read-only.");
- return 0;
- }
- },
-
-
- "defaultY"=> {
- defaultValue: defaultY,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,defaultY);
- return 1;
- },
- setter: function(l:State):Int{
- // 1 = self
- // 2 = key
- // 3 = value
- // 4 = metatable
- return 0;
- }
- }
-
- ];
- }
-
- private static function findReceptor(index:Int)
- {
- for(i in 0...PlayState.strumLineNotes.length)
- {
- if (index == i)
- {
- return PlayState.strumLineNotes.members[i];
- }
- }
- return null;
- }
-
- private static function tweenPos(l:StatePointer):Int{
- // 1 = self
- // 2 = x
- // 3 = y
- // 4 = time
- var xp = LuaL.checknumber(state,2);
- var yp = LuaL.checknumber(state,3);
- var time = LuaL.checknumber(state,4);
-
- Lua.getfield(state,1,"id");
- var index = Std.parseInt(Lua.tostring(state,-1).split('_')[1]);
-
- var receptor = findReceptor(index);
-
- if (receptor == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find receptor " + index + ")");
- return 0;
- }
-
- FlxTween.tween(receptor,{x: xp,y:yp},time);
-
- return 0;
- }
-
- private static function tweenAngle(l:StatePointer):Int{
- // 1 = self
- // 2 = angle
- // 3 = time
- var nangle = LuaL.checknumber(state,2);
- var time = LuaL.checknumber(state,3);
-
- Lua.getfield(state,1,"id");
- var index = Std.parseInt(Lua.tostring(state,-1).split('_')[1]);
-
- var receptor = findReceptor(index);
-
- if (receptor == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find receptor " + index + ")");
- return 0;
- }
-
- FlxTween.tween(receptor,{modAngle: nangle},time);
-
- return 0;
- }
-
- private static function tweenAlpha(l:StatePointer):Int{
- // 1 = self
- // 2 = alpha
- // 3 = time
- var nalpha = LuaL.checknumber(state,2);
- var time = LuaL.checknumber(state,3);
-
- Lua.getfield(state,1,"id");
- var index = Std.parseInt(Lua.tostring(state,-1).split('_')[1]);
-
- var receptor = findReceptor(index);
-
- if (receptor == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find receptor " + index + ")");
- return 0;
- }
-
- FlxTween.tween(receptor,{alpha: nalpha},time);
-
- return 0;
- }
-
- private static var tweenPosC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenPos);
- private static var tweenAngleC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenAngle);
- private static var tweenAlphaC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenAlpha);
-
- private function SetNumProperty(l:State){
- // 1 = self
- // 2 = key
- // 3 = value
- // 4 = metatable
- if(Lua.type(l,3)!=Lua.LUA_TNUMBER){
- LuaL.error(l,"invalid argument #3 (number expected, got " + Lua.typename(l,Lua.type(l,3)) + ")");
- return 0;
- }
-
- sprite.modifiedByLua = true;
-
- Reflect.setProperty(sprite,Lua.tostring(l,2),Lua.tonumber(l,3));
- return 0;
- }
-
- override function Register(l:State){
- state=l;
- super.Register(l);
- trace("Registered " + className);
- }
- }
-
- class LuaCamera extends LuaClass { // again, stolen from andromeda but improved a lot for better thinking interoperability (I made that up)
- private static var state:State;
- public var cam:FlxCamera;
-
- public function new(connectedCamera:FlxCamera, name:String){
- super();
- cam = connectedCamera;
-
- className= name;
-
- properties=[
- "alpha"=>{
- defaultValue: 1 ,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedCamera.alpha);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "angle"=>{
- defaultValue: 0 ,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedCamera.angle);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "x"=> {
- defaultValue: connectedCamera.x,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedCamera.x);
- return 1;
- },
- setter: SetNumProperty
- },
-
-
- "y"=> {
- defaultValue: connectedCamera.y,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedCamera.y);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "id"=> {
- defaultValue: className,
- getter: function(l:State,data:Any):Int{
- Lua.pushstring(l,className);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "tweenZoom"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,tweenZoomC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"tweenZoom is read-only.");
- return 0;
- }
- },
-
- "tweenPos"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,tweenPosC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"tweenPos is read-only.");
- return 0;
- }
- },
-
- "tweenAlpha"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,tweenAlphaC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"tweenAlpha is read-only.");
- return 0;
- }
- },
-
- "tweenAngle"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,tweenAngleC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"tweenAngle is read-only.");
- return 0;
- }
- },
- ];
-
- LuaStorage.ListOfCameras.push(this);
- }
-
- private function SetNumProperty(l:State){
- // 1 = self
- // 2 = key
- // 3 = value
- // 4 = metatable
- if(Lua.type(l,3)!=Lua.LUA_TNUMBER){
- LuaL.error(l,"invalid argument #3 (number expected, got " + Lua.typename(l,Lua.type(l,3)) + ")");
- return 0;
- }
- Reflect.setProperty(cam,Lua.tostring(l,2),Lua.tonumber(l,3));
- return 0;
- }
-
- private static function tweenZoom(l:StatePointer):Int{
- // 1 = self
- // 2 = zoom
- // 3 = time
- var nzoom = LuaL.checknumber(state,2);
- var time = LuaL.checknumber(state,3);
-
- Lua.getfield(state,1,"id");
- var index = Lua.tostring(state,-1);
-
- var camera:FlxCamera = null;
-
- for(i in LuaStorage.ListOfCameras)
- {
- if (i.className == index)
- {
- camera = i.cam;
- }
- }
-
- if (camera == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find camera " + index + ")");
- return 0;
- }
-
- FlxTween.tween(camera,{zoom: nzoom},time);
-
- return 0;
- }
-
- private static var tweenZoomC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenZoom);
-
- private static function tweenPos(l:StatePointer):Int{
- // 1 = self
- // 2 = x
- // 3 = y
- // 4 = time
- var xp = LuaL.checknumber(state,2);
- var yp = LuaL.checknumber(state,3);
- var time = LuaL.checknumber(state,4);
-
- Lua.getfield(state,1,"id");
- var index = Lua.tostring(state,-1);
-
- var camera:FlxCamera = null;
-
- for(i in LuaStorage.ListOfCameras)
- {
- if (i.className == index)
- camera = i.cam;
- }
-
- if (camera == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find camera " + index + ")");
- return 0;
- }
-
- FlxTween.tween(camera,{x: xp,y:yp},time);
-
- return 0;
- }
-
- private static function tweenAngle(l:StatePointer):Int{
- // 1 = self
- // 2 = angle
- // 3 = time
- var nangle = LuaL.checknumber(state,2);
- var time = LuaL.checknumber(state,3);
-
- Lua.getfield(state,1,"id");
- var index = Lua.tostring(state,-1);
-
- var camera:FlxCamera = null;
-
- for(i in LuaStorage.ListOfCameras)
- {
- if (i.className == index)
- camera = i.cam;
- }
-
- if (camera == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find camera " + index + ")");
- return 0;
- }
-
- FlxTween.tween(camera,{modAngle: nangle},time);
-
- return 0;
- }
-
- private static function tweenAlpha(l:StatePointer):Int{
- // 1 = self
- // 2 = alpha
- // 3 = time
- var nalpha = LuaL.checknumber(state,2);
- var time = LuaL.checknumber(state,3);
-
- Lua.getfield(state,1,"id");
- var index = Lua.tostring(state,-1);
-
- var camera:FlxCamera = null;
-
- for(i in LuaStorage.ListOfCameras)
- {
- if (i.className == index)
- camera = i.cam;
- }
-
- if (camera == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find camera " + index + ")");
- return 0;
- }
-
- FlxTween.tween(camera,{alpha: nalpha},time);
-
- return 0;
- }
-
- private static var tweenPosC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenPos);
- private static var tweenAngleC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenAngle);
- private static var tweenAlphaC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenAlpha);
-
- override function Register(l:State){
- state=l;
- super.Register(l);
- trace("Registered " + className);
- }
-
- }
-
- class LuaCharacter extends LuaClass { // again, stolen from andromeda but improved a lot for better thinking interoperability (I made that up)
- private static var state:State;
- public var char:Character;
- public var isPlayer:Bool = false;
-
- public static var ListOfCharacters:Array = [];
-
- public function new(connectedCharacter:Character, name:String){
- super();
- className= name;
-
- char = connectedCharacter;
-
- isPlayer = char.isPlayer;
-
- properties=[
- "alpha"=>{
- defaultValue: 1 ,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedCharacter.alpha);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "angle"=>{
- defaultValue: 1 ,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedCharacter.angle);
- return 1;
- },
- setter: function(l:State):Int{
- // 1 = self
- // 2 = key
- // 3 = value
- // 4 = metatable
- if(Lua.type(l,3)!=Lua.LUA_TNUMBER){
- LuaL.error(l,"invalid argument #3 (number expected, got " + Lua.typename(l,Lua.type(l,3)) + ")");
- return 0;
- }
-
- var angle = Lua.tonumber(l,3);
- connectedCharacter.angle = angle;
-
- LuaClass.DefaultSetter(l);
- return 0;
- }
- },
-
- "x"=> {
- defaultValue: connectedCharacter.x,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedCharacter.x);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "tweenPos"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,tweenPosC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"tweenPos is read-only.");
- return 0;
- }
- },
-
- "id"=>{
- defaultValue: name ,
- getter: function(l:State,data:Any):Int{
- Lua.pushstring(l,name);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "tweenAlpha"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,tweenAlphaC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"tweenAlpha is read-only.");
- return 0;
- }
- },
-
- "tweenAngle"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,tweenAngleC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"tweenAngle is read-only.");
- return 0;
- }
- },
-
- "changeCharacter"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,changeCharacterC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"changeCharacter is read-only.");
- return 0;
- }
- },
-
- "playAnim"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,playAnimC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"playAnim is read-only.");
- return 0;
- }
- },
-
- "y"=> {
- defaultValue: connectedCharacter.y,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedCharacter.y);
- return 1;
- },
- setter: SetNumProperty
- }
-
- ];
-
- ListOfCharacters.push(this);
- }
-
-
- private static function findNote(time:Float,data:Int)
- {
-
- for(i in PlayState.instance.notes)
- {
- if (i.strumTime == time && i.noteData == data)
- {
- return i;
- }
- }
- return null;
- }
-
- private static function tweenPos(l:StatePointer):Int{
- // 1 = self
- // 2 = x
- // 3 = y
- // 4 = time
- var xp = LuaL.checknumber(state,2);
- var yp = LuaL.checknumber(state,3);
- var time = LuaL.checknumber(state,4);
-
- Lua.getfield(state,1,"id");
- var index = Lua.tostring(state,-1);
-
- var char:Character = null;
-
- for(i in ListOfCharacters)
- {
- if (i.className == index)
- char = i.char;
- }
-
- if (char == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find character " + index + ")");
- return 0;
- }
-
- FlxTween.tween(char,{x: xp,y:yp},time);
-
- return 0;
- }
-
- private static function tweenAngle(l:StatePointer):Int{
- // 1 = self
- // 2 = angle
- // 3 = time
- var nangle = LuaL.checknumber(state,2);
- var time = LuaL.checknumber(state,3);
-
- Lua.getfield(state,1,"id");
- var index = Lua.tostring(state,-1);
-
- var char:Character = null;
-
- for(i in ListOfCharacters)
- {
- if (i.className == index)
- char = i.char;
- }
-
- if (char == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find character " + index + ")");
- return 0;
- }
-
- FlxTween.tween(char,{angle: nangle},time);
-
- return 0;
- }
-
- private static function tweenAlpha(l:StatePointer):Int{
- // 1 = self
- // 2 = alpha
- // 3 = time
- var nalpha = LuaL.checknumber(state,2);
- var time = LuaL.checknumber(state,3);
-
- Lua.getfield(state,1,"id");
- var index = Lua.tostring(state,-1);
-
- var char:Character = null;
-
- for(i in ListOfCharacters)
- {
- if (i.className == index)
- char = i.char;
- }
-
- if (char == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find character " + index + ")");
- return 0;
- }
-
- FlxTween.tween(char,{alpha: nalpha},time);
-
- return 0;
- }
-
- private static function changeCharacter(l:StatePointer):Int{
- // 1 = self
- // 2 = newName
- // 3 = x
- // 4 = y
- var newName = LuaL.checkstring(state,2);
- var x = LuaL.checknumber(state,3);
- var y = LuaL.checknumber(state,4);
-
- Lua.getfield(state,1,"id");
- var index = Lua.tostring(state,-1);
-
- var char:Character = null;
- var property:LuaCharacter = null;
-
- for(i in ListOfCharacters)
- {
- if (i.className == index)
- {
- char = i.char;
- property = i;
- }
- }
-
- trace("fuck " + char);
-
- if (char == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find character " + index + ")");
- return 0;
- }
-
-
- PlayState.instance.remove(char);
-
- PlayState.dad = new Character(x,y,newName,char.isPlayer);
-
- property.char = PlayState.dad;
-
- PlayState.instance.add(PlayState.dad);
-
- return 0;
- }
-
- private static function playAnim(l:StatePointer):Int{
- // 1 = self
- // 2 = animation
- var anim = LuaL.checkstring(state,2);
-
- Lua.getfield(state,1,"id");
- var index = Lua.tostring(state,-1);
-
- var char:Character = null;
-
- for(i in ListOfCharacters)
- {
- if (i.className == index)
- {
- char = i.char;
- }
- }
-
- if (char == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find character " + index + ")");
- return 0;
- }
-
- char.playAnim(anim);
-
- return 0;
- }
-
- private static var playAnimC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(playAnim);
- private static var changeCharacterC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(changeCharacter);
- private static var tweenPosC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenPos);
- private static var tweenAngleC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenAngle);
- private static var tweenAlphaC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(tweenAlpha);
-
- private function SetNumProperty(l:State){
- // 1 = self
- // 2 = key
- // 3 = value
- // 4 = metatable
- if(Lua.type(l,3)!=Lua.LUA_TNUMBER){
- LuaL.error(l,"invalid argument #3 (number expected, got " + Lua.typename(l,Lua.type(l,3)) + ")");
- return 0;
- }
- Reflect.setProperty(char,Lua.tostring(l,2),Lua.tonumber(l,3));
- return 0;
- }
-
- override function Register(l:State){
- state=l;
- super.Register(l);
- }
- }
-
- class LuaSprite extends LuaClass { // again, stolen from andromeda but improved a lot for better thinking interoperability (I made that up)
- private static var state:State;
- public var sprite:FlxSprite;
-
- public static var ListOfSprites:Array = [];
-
- public function new(connectedSprite:FlxSprite, name:String){
- super();
- className= name;
-
- properties=[
- "alpha"=>{
- defaultValue: 1 ,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedSprite.alpha);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "angle"=>{
- defaultValue: 1 ,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedSprite.angle);
- return 1;
- },
- setter: function(l:State):Int{
- // 1 = self
- // 2 = key
- // 3 = value
- // 4 = metatable
- if(Lua.type(l,3)!=Lua.LUA_TNUMBER){
- LuaL.error(l,"invalid argument #3 (number expected, got " + Lua.typename(l,Lua.type(l,3)) + ")");
- return 0;
- }
-
- var angle = Lua.tonumber(l,3);
- connectedSprite.angle = angle;
-
- LuaClass.DefaultSetter(l);
- return 0;
- }
- },
-
- "x"=> {
- defaultValue: connectedSprite.x,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedSprite.x);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "tweenPos"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,tweenPosC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"tweenPos is read-only.");
- return 0;
- }
- },
-
- "id"=>{
- defaultValue: name ,
- getter: function(l:State,data:Any):Int{
- Lua.pushstring(l,name);
- return 1;
- },
- setter: SetNumProperty
- },
-
- "tweenAlpha"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,tweenAlphaC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"tweenAlpha is read-only.");
- return 0;
- }
- },
-
- "tweenAngle"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,tweenAngleC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"tweenAngle is read-only.");
- return 0;
- }
- },
-
- "destroy"=>{
- defaultValue:0,
- getter:function(l:State,data:Any){
- Lua.pushcfunction(l,destroyC);
- return 1;
- },
- setter:function(l:State){
- LuaL.error(l,"destroy is read-only.");
- return 0;
- }
- },
-
- "y"=> {
- defaultValue: connectedSprite.y,
- getter: function(l:State,data:Any):Int{
- Lua.pushnumber(l,connectedSprite.y);
- return 1;
- },
- setter: SetNumProperty
- }
-
- ];
-
- ListOfSprites.push(this);
- }
-
-
- private static function findNote(time:Float,data:Int)
- {
-
- for(i in PlayState.instance.notes)
- {
- if (i.strumTime == time && i.noteData == data)
- {
- return i;
- }
- }
- return null;
- }
-
- private static function tweenPos(l:StatePointer):Int{
- // 1 = self
- // 2 = x
- // 3 = y
- // 4 = time
- var xp = LuaL.checknumber(state,2);
- var yp = LuaL.checknumber(state,3);
- var time = LuaL.checknumber(state,4);
-
- Lua.getfield(state,1,"id");
- var index = Lua.tostring(state,-1);
-
- var sprite:FlxSprite = null;
-
- for(i in ListOfSprites)
- {
- if (i.className == index)
- sprite = i.sprite;
- }
-
- if (sprite == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find sprite " + index + ")");
- return 0;
- }
-
- FlxTween.tween(sprite,{x: xp,y:yp},time);
-
- return 0;
- }
-
- private static function tweenAngle(l:StatePointer):Int{
- // 1 = self
- // 2 = angle
- // 3 = time
- var nangle = LuaL.checknumber(state,2);
- var time = LuaL.checknumber(state,3);
-
- Lua.getfield(state,1,"id");
- var index = Lua.tostring(state,-1);
-
- var sprite:FlxSprite = null;
-
- for(i in ListOfSprites)
- {
- if (i.className == index)
- sprite = i.sprite;
- }
-
- if (sprite == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find sprite " + index + ")");
- return 0;
- }
-
- FlxTween.tween(sprite,{angle: nangle},time);
-
- return 0;
- }
-
- private static function tweenAlpha(l:StatePointer):Int{
- // 1 = self
- // 2 = alpha
- // 3 = time
- var nalpha = LuaL.checknumber(state,2);
- var time = LuaL.checknumber(state,3);
-
- Lua.getfield(state,1,"id");
- var index = Lua.tostring(state,-1);
-
- var sprite:FlxSprite = null;
-
- for(i in ListOfSprites)
- {
- if (i.className == index)
- sprite = i.sprite;
- }
-
- if (sprite == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find sprite " + index + ")");
- return 0;
- }
-
- FlxTween.tween(sprite,{alpha: nalpha},time);
-
- return 0;
- }
-
-
- private static function destroy(l:StatePointer):Int{
- // 1 = self
-
- Lua.getfield(state,1,"id");
- var index = Lua.tostring(state,-1);
-
- var sprite:FlxSprite = null;
-
- for(i in ListOfSprites)
- {
- if (i.className == index)
- sprite = i.sprite;
- }
-
- if (sprite == null)
- {
- LuaL.error(state,"Failure to tween (couldn't find sprite " + index + ")");
- return 0;
- }
-
- PlayState.instance.remove(sprite);
- sprite.destroy();
-
- return 0;
- }
-
- private static var destroyC:cpp.CallableInt> = cpp.Callable.fromStaticFunction(destroy);
- private static var tweenPosC:cpp.Callable