diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml
index ec418d9..6cec3c5 100644
--- a/.github/ISSUE_TEMPLATE/bug.yml
+++ b/.github/ISSUE_TEMPLATE/bug.yml
@@ -10,15 +10,26 @@ body:
options:
- label: I have properly named my issue
- label: I have checked the Issues/Discussions pages to see if my issue has already been reported
-
+
- type: dropdown
attributes:
label: Platform
- description: Which platform are you playing on?
+ description: Are you playing on the Executable Build or V-Slice Mod Pack?
+ options:
+ - Executable Build
+ - V-Slice Mod Pack
+ validations:
+ required: true
+
+ - type: dropdown
+ attributes:
+ label: Download Source
+ description: Where did you download the mod from?
options:
- - Gamebanana (Downloadable Build) - Windows
- - Gamejolt (Downloadable Build) - Windows
- - Google Drive (Downloadable Build) - Windows
+ - Gamebanana
+ - Game Jolt
+ - Google Drive
+ - Github Release Assets
- Compiled from GitHub Source Code
validations:
required: true
diff --git a/.github/ISSUE_TEMPLATE/crash.yml b/.github/ISSUE_TEMPLATE/crash.yml
index 2ecb1d9..7538233 100644
--- a/.github/ISSUE_TEMPLATE/crash.yml
+++ b/.github/ISSUE_TEMPLATE/crash.yml
@@ -14,11 +14,22 @@ body:
- type: dropdown
attributes:
label: Platform
- description: Which platform are you playing on?
+ description: Are you playing on the Executable Build or V-Slice Mod Pack?
options:
- - Gamebanana (Downloadable Build) - Windows
- - Gamejolt (Downloadable Build) - Windows
- - Google Drive (Downloadable Build) - Windows
+ - Executable Build
+ - V-Slice Mod Pack
+ validations:
+ required: true
+
+ - type: dropdown
+ attributes:
+ label: Download Source
+ description: Where did you download the mod from?
+ options:
+ - Gamebanana
+ - Game Jolt
+ - Google Drive
+ - Github Release Assets
- Compiled from GitHub Source Code
validations:
required: true
diff --git a/assets/preload/data/characters/pump-playable-dark.json b/assets/preload/data/characters/pump-playable-dark.json
index 1fa05f3..19ab7d8 100644
--- a/assets/preload/data/characters/pump-playable-dark.json
+++ b/assets/preload/data/characters/pump-playable-dark.json
@@ -80,5 +80,8 @@
"assetPath": "characters/Pump_Playable_DEATH",
"offsets": [1114, 138]
}
- ]
+ ],
+ "death": {
+ "cameraOffsets": [-420, 0]
+ }
}
diff --git a/assets/preload/data/characters/pump-playable.json b/assets/preload/data/characters/pump-playable.json
index d09d738..ffd2c06 100644
--- a/assets/preload/data/characters/pump-playable.json
+++ b/assets/preload/data/characters/pump-playable.json
@@ -80,5 +80,8 @@
"assetPath": "characters/Pump_Playable_DEATH",
"offsets": [1114, 138]
}
- ]
+ ],
+ "death": {
+ "cameraOffsets": [-420, 0]
+ }
}
diff --git a/assets/preload/data/characters/skid-opponent-dark.json b/assets/preload/data/characters/skid-opponent-dark.json
index 24785a5..e535754 100644
--- a/assets/preload/data/characters/skid-opponent-dark.json
+++ b/assets/preload/data/characters/skid-opponent-dark.json
@@ -14,7 +14,7 @@
"name": "idle",
"prefix": "skidIdle",
"frameRate": 24,
- "offsets": [0, 0]
+ "offsets": [0, 2]
},
{
"name": "singLEFT",
diff --git a/assets/preload/data/characters/skid-opponent.json b/assets/preload/data/characters/skid-opponent.json
index 11a8977..2b39514 100644
--- a/assets/preload/data/characters/skid-opponent.json
+++ b/assets/preload/data/characters/skid-opponent.json
@@ -14,7 +14,7 @@
"name": "idle",
"prefix": "skidIdle",
"frameRate": 24,
- "offsets": [0, 0]
+ "offsets": [0, 2]
},
{
"name": "singLEFT",
diff --git a/assets/preload/data/characters/skid-playable-dark.json b/assets/preload/data/characters/skid-playable-dark.json
index bc1872e..d010e38 100644
--- a/assets/preload/data/characters/skid-playable-dark.json
+++ b/assets/preload/data/characters/skid-playable-dark.json
@@ -14,7 +14,7 @@
"name": "idle",
"prefix": "skidIdle",
"frameRate": 24,
- "offsets": [0, 0]
+ "offsets": [0, 2]
},
{
"name": "singLEFT",
@@ -80,5 +80,8 @@
"assetPath": "characters/Skid_Playable_DEATH",
"offsets": [1114, 138]
}
- ]
+ ],
+ "death": {
+ "cameraOffsets": [-420, 0]
+ }
}
diff --git a/assets/preload/data/characters/skid-playable.json b/assets/preload/data/characters/skid-playable.json
index 4c840e7..4653b06 100644
--- a/assets/preload/data/characters/skid-playable.json
+++ b/assets/preload/data/characters/skid-playable.json
@@ -14,7 +14,7 @@
"name": "idle",
"prefix": "skidIdle",
"frameRate": 24,
- "offsets": [0, 0]
+ "offsets": [0, 2]
},
{
"name": "singLEFT",
@@ -80,5 +80,8 @@
"assetPath": "characters/Skid_Playable_DEATH",
"offsets": [1114, 138]
}
- ]
+ ],
+ "death": {
+ "cameraOffsets": [-420, 0]
+ }
}
diff --git a/assets/preload/data/characters/spooky-christmas.json b/assets/preload/data/characters/spooky-christmas.json
index 1a3c40c..1ba1769 100644
--- a/assets/preload/data/characters/spooky-christmas.json
+++ b/assets/preload/data/characters/spooky-christmas.json
@@ -78,5 +78,8 @@
"assetPath": "characters/SpookyKids_Christmas_DEATH",
"offsets": [-67, -305]
}
- ]
+ ],
+ "death": {
+ "cameraOffsets": [65, 100]
+ }
}
diff --git a/assets/preload/data/characters/spooky-nogreen.json b/assets/preload/data/characters/spooky-nogreen.json
index c4602bc..00b474c 100644
--- a/assets/preload/data/characters/spooky-nogreen.json
+++ b/assets/preload/data/characters/spooky-nogreen.json
@@ -96,5 +96,8 @@
"assetPath": "characters/SpookyKids_Playable_DEATH",
"offsets": [338, -105]
}
- ]
+ ],
+ "death": {
+ "cameraOffsets": [-40, 120]
+ }
}
diff --git a/assets/preload/data/characters/spooky-playable.json b/assets/preload/data/characters/spooky-playable.json
index 425cbf1..f7f5e80 100644
--- a/assets/preload/data/characters/spooky-playable.json
+++ b/assets/preload/data/characters/spooky-playable.json
@@ -96,5 +96,8 @@
"assetPath": "characters/SpookyKids_Playable_DEATH",
"offsets": [338, -105]
}
- ]
+ ],
+ "death": {
+ "cameraOffsets": [-40, 120]
+ }
}
diff --git a/assets/preload/data/introText.txt b/assets/preload/data/introText.txt
index b913158..a9d99c4 100644
--- a/assets/preload/data/introText.txt
+++ b/assets/preload/data/introText.txt
@@ -30,7 +30,7 @@ a hot dog with no insides?--idk i forgot
hey peter--remember the time
family guy--funny moments
sonic.exe...--spooky mix....
-get all 7--chaos emeralds
+get all seven--chaos emeralds
eat my shorts--bart simpson
this is freaking--chudtastic
Goober alert--Goober alert
@@ -73,6 +73,6 @@ look, ramps--we can use these as ramps
hi kevin hi kevin hi kevin hi kevin hi kevin hi kevin hi kevin hi kevin--bye kevin bye kevin bye kevin bye kevin bye kevin bye kevin bye kevin bye kevin
walk normally--please
hello--my name is car
-play--garn 47
+play--garn fourty seven
turns around slowly--ive been expecting you
sr pelo regalame un pelito fetito--porfis uwuwuwuwu
diff --git a/assets/preload/data/players/spooky.json b/assets/preload/data/players/spooky.json
index 8c16403..714aae2 100644
--- a/assets/preload/data/players/spooky.json
+++ b/assets/preload/data/players/spooky.json
@@ -1,6 +1,6 @@
{
"version": "1.0.0",
- "name": "Spooky",
+ "name": "Spooky Kids",
"ownedChars": [
"spooky",
"spooky-playable",
diff --git a/assets/preload/data/songs/tutorial/tutorial-chart-spooky.json b/assets/preload/data/songs/tutorial/tutorial-chart-spooky.json
index 8e8ff02..2c5a07f 100644
--- a/assets/preload/data/songs/tutorial/tutorial-chart-spooky.json
+++ b/assets/preload/data/songs/tutorial/tutorial-chart-spooky.json
@@ -10,819 +10,966 @@
"t": 0,
"e": "FocusCamera",
"v": {
- "x": 0,
"duration": 32,
+ "x": 0,
"y": 0,
- "char": 2,
- "ease": "expoOut"
+ "ease": "expoOut",
+ "char": 2
}
},
{
"t": 87.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 0.8
+ "duration": 32,
+ "zoom": 0.8,
+ "mode": "stage"
}
},
{
"t": 10300,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 1
+ "char": 1,
+ "ease": "expoOut"
}
},
{
"t": 10387.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1
+ "duration": 32,
+ "zoom": 1,
+ "mode": "stage"
}
},
{
"t": 13129.4117647059,
"e": "FocusCamera",
"v": {
- "x": 0,
"duration": 32,
+ "x": 0,
"y": 0,
- "char": 0,
- "ease": "expoOut"
+ "ease": "expoOut",
+ "char": 0
}
},
{
"t": 13225,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1.2
+ "duration": 32,
+ "zoom": 1.2,
+ "mode": "stage"
}
},
{
"t": 15952.9411764706,
"e": "FocusCamera",
"v": {
- "x": 0,
"duration": 32,
+ "x": 0,
"y": 0,
- "char": 1,
- "ease": "expoOut"
+ "ease": "expoOut",
+ "char": 1
}
},
{
"t": 16062.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1
+ "duration": 32,
+ "zoom": 1,
+ "mode": "stage"
}
},
{
"t": 18776.4705882353,
"e": "FocusCamera",
"v": {
- "x": 0,
"duration": 32,
+ "x": 0,
"y": 0,
- "char": 0,
- "ease": "expoOut"
+ "ease": "expoOut",
+ "char": 0
}
},
{
"t": 18875,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1.2
+ "duration": 32,
+ "zoom": 1.2,
+ "mode": "stage"
}
},
{
"t": 21423.5294117647,
"e": "FocusCamera",
"v": {
- "x": 0,
"duration": 32,
+ "x": 0,
"y": 0,
- "char": 2,
- "ease": "expoOut"
+ "ease": "expoOut",
+ "char": 2
}
},
{
"t": 21512.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 0.8
+ "duration": 32,
+ "zoom": 0.8,
+ "mode": "stage"
}
},
{
"t": 24423.5294117647,
"e": "FocusCamera",
"v": {
- "x": 0,
"duration": 32,
+ "x": 0,
"y": 0,
- "char": 0,
- "ease": "expoOut"
+ "ease": "expoOut",
+ "char": 0
}
},
{
"t": 24512.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1.2
+ "duration": 32,
+ "zoom": 1.2,
+ "mode": "stage"
}
},
{
"t": 27070.5882352941,
"e": "FocusCamera",
"v": {
- "x": 0,
"duration": 32,
+ "x": 0,
"y": 0,
- "char": 1,
- "ease": "expoOut"
+ "ease": "expoOut",
+ "char": 1
}
},
{
"t": 27175,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 0.8
+ "duration": 32,
+ "zoom": 0.8,
+ "mode": "stage"
}
},
{
"t": 30070.5882352941,
"e": "FocusCamera",
"v": {
- "x": 0,
"duration": 32,
+ "x": 0,
"y": 0,
- "char": 0,
- "ease": "expoOut"
+ "ease": "expoOut",
+ "char": 0
}
},
{
"t": 30162.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1.2
+ "duration": 32,
+ "zoom": 1.2,
+ "mode": "stage"
}
},
{
"t": 32717.6470588235,
"e": "FocusCamera",
"v": {
- "x": 0,
"duration": 32,
+ "x": 0,
"y": 0,
- "char": 1,
- "ease": "expoOut"
+ "ease": "expoOut",
+ "char": 1
}
},
{
"t": 32812.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1
+ "duration": 32,
+ "zoom": 1,
+ "mode": "stage"
}
},
{
"t": 36247.0588235294,
"e": "FocusCamera",
"v": {
- "x": 0,
"duration": 32,
+ "x": 0,
"y": 0,
- "char": 0,
- "ease": "expoOut"
+ "ease": "expoOut",
+ "char": 0
}
},
{
"t": 36325,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1.2
+ "duration": 32,
+ "zoom": 1.2,
+ "mode": "stage"
}
},
{
"t": 39776.4705882353,
"e": "FocusCamera",
"v": {
- "x": 0,
"duration": 32,
+ "x": 0,
"y": 0,
- "char": 1,
- "ease": "expoOut"
+ "ease": "expoOut",
+ "char": 1
}
},
{
"t": 39837.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1
+ "duration": 32,
+ "zoom": 1,
+ "mode": "stage"
}
},
{
"t": 43305.8823529412,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 0
+ "char": 0,
+ "ease": "expoOut"
}
},
{
"t": 43400,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1.2
+ "duration": 32,
+ "zoom": 1.2,
+ "mode": "stage"
}
},
{
"t": 52835.2941176471,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 1
+ "char": 1,
+ "ease": "expoOut"
}
},
{
"t": 52900,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1
+ "duration": 32,
+ "zoom": 1,
+ "mode": "stage"
}
},
{
"t": 58658.8235294118,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 0
+ "char": 0,
+ "ease": "expoOut"
}
},
{
"t": 58750,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1.2
+ "duration": 32,
+ "zoom": 1.2,
+ "mode": "stage"
}
},
{
"t": 60070.5882352941,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 1
+ "char": 1,
+ "ease": "expoOut"
}
},
{
"t": 60162.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1
+ "duration": 32,
+ "zoom": 1,
+ "mode": "stage"
}
},
{
"t": 61482.3529411765,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 0
+ "char": 0,
+ "ease": "expoOut"
}
},
{
"t": 61575,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1.2
+ "duration": 32,
+ "zoom": 1.2,
+ "mode": "stage"
}
},
{
"t": 62894.1176470588,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 1
+ "char": 1,
+ "ease": "expoOut"
}
},
{
"t": 62937.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1
+ "duration": 32,
+ "zoom": 1,
+ "mode": "stage"
}
},
{
"t": 64305.8823529412,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 0
+ "char": 0,
+ "ease": "expoOut"
}
},
{
"t": 64387.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1.2
+ "duration": 32,
+ "zoom": 1.2,
+ "mode": "stage"
}
},
{
"t": 65717.6470588235,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 1
+ "char": 1,
+ "ease": "expoOut"
}
},
{
"t": 65787.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1
+ "duration": 32,
+ "zoom": 1,
+ "mode": "stage"
}
},
{
"t": 67129.4117647059,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 0
+ "char": 0,
+ "ease": "expoOut"
}
},
{
"t": 67212.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1.2
+ "duration": 32,
+ "zoom": 1.2,
+ "mode": "stage"
}
},
{
"t": 69775,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 2
+ "char": 2,
+ "ease": "expoOut"
}
},
{
"t": 69837.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 0.8
+ "duration": 32,
+ "zoom": 0.8,
+ "mode": "stage"
}
},
{
"t": 75450,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 1
+ "char": 1,
+ "ease": "expoOut"
}
},
{
"t": 75537.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1
+ "duration": 32,
+ "zoom": 1,
+ "mode": "stage"
}
},
{
"t": 78250,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 0
+ "char": 0,
+ "ease": "expoOut"
}
},
{
"t": 78337.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1.2
+ "duration": 32,
+ "zoom": 1.2,
+ "mode": "stage"
}
},
{
"t": 81075,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 1
+ "char": 1,
+ "ease": "expoOut"
}
},
{
"t": 81137.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1
+ "duration": 32,
+ "zoom": 1,
+ "mode": "stage"
}
},
{
"t": 84075,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 0
+ "char": 0,
+ "ease": "expoOut"
}
},
{
"t": 84175,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1.2
+ "duration": 32,
+ "zoom": 1.2,
+ "mode": "stage"
}
},
{
"t": 86775,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 1
+ "char": 1,
+ "ease": "expoOut"
}
},
{
"t": 86850,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1
+ "duration": 32,
+ "zoom": 1,
+ "mode": "stage"
}
},
{
"t": 89725,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 0
+ "char": 0,
+ "ease": "expoOut"
}
},
{
"t": 89787.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1.2
+ "duration": 32,
+ "zoom": 1.2,
+ "mode": "stage"
}
},
{
- "t": 92375,
+ "t": 92362.5,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 4,
"y": 0,
- "ease": "expoOut",
+ "ease": "INSTANT",
"char": 1
}
},
{
- "t": 92462.5,
+ "t": 92362.5,
"e": "ZoomCamera",
"v": {
+ "duration": 1,
+ "ease": "INSTANT",
+ "zoom": 1.1,
+ "mode": "stage"
+}
+ },
+ {
+ "t": 92737.5,
+ "e": "FocusCamera",
+ "v": {
+ "x": 0,
+ "duration": 4,
+ "y": 0,
+ "ease": "INSTANT",
+ "char": 0
+}
+ },
+ {
+ "t": 92737.5,
+ "e": "ZoomCamera",
+ "v": {
+ "duration": 1,
+ "ease": "INSTANT",
+ "zoom": 1.15,
+ "mode": "stage"
+}
+ },
+ {
+ "t": 93075,
+ "e": "FocusCamera",
+ "v": {
+ "x": 0,
+ "duration": 4,
+ "y": 0,
+ "ease": "INSTANT",
+ "char": 1
+}
+ },
+ {
+ "t": 93075,
+ "e": "ZoomCamera",
+ "v": {
+ "duration": 1,
+ "ease": "INSTANT",
+ "zoom": 1.2,
+ "mode": "stage"
+}
+ },
+ {
+ "t": 93825,
+ "e": "FocusCamera",
+ "v": {
+ "x": 0,
"duration": 32,
+ "y": 0,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1
+ "char": 2
}
},
{
- "t": 93925,
- "e": "FocusCamera",
+ "t": 93900,
+ "e": "ZoomCamera",
"v": {
"duration": 32,
+ "ease": "expoOut",
+ "zoom": 0.8,
+ "mode": "stage"
+}
+ },
+ {
+ "t": 98025,
+ "e": "FocusCamera",
+ "v": {
"x": 0,
+ "duration": 4,
+ "y": 0,
+ "ease": "INSTANT",
+ "char": 1
+}
+ },
+ {
+ "t": 98025,
+ "e": "ZoomCamera",
+ "v": {
+ "duration": 1,
+ "ease": "INSTANT",
+ "zoom": 1.1,
+ "mode": "stage"
+}
+ },
+ {
+ "t": 98362.5,
+ "e": "FocusCamera",
+ "v": {
+ "x": 0,
+ "duration": 4,
+ "y": 0,
+ "ease": "INSTANT",
+ "char": 0
+}
+ },
+ {
+ "t": 98362.5,
+ "e": "ZoomCamera",
+ "v": {
+ "duration": 1,
+ "ease": "INSTANT",
+ "zoom": 1.15,
+ "mode": "stage"
+}
+ },
+ {
+ "t": 98700,
+ "e": "FocusCamera",
+ "v": {
+ "x": 0,
+ "duration": 4,
+ "y": 0,
+ "ease": "INSTANT",
+ "char": 1
+}
+ },
+ {
+ "t": 98700,
+ "e": "ZoomCamera",
+ "v": {
+ "duration": 1,
+ "ease": "INSTANT",
+ "zoom": 1.2,
+ "mode": "stage"
+}
+ },
+ {
+ "t": 99075,
+ "e": "FocusCamera",
+ "v": {
+ "x": 0,
+ "duration": 4,
+ "y": 0,
+ "ease": "INSTANT",
+ "char": 0
+}
+ },
+ {
+ "t": 99075,
+ "e": "ZoomCamera",
+ "v": {
+ "duration": 1,
+ "ease": "INSTANT",
+ "zoom": 1.25,
+ "mode": "stage"
+}
+ },
+ {
+ "t": 99450,
+ "e": "FocusCamera",
+ "v": {
+ "x": 0,
+ "duration": 32,
"y": 0,
"ease": "expoOut",
"char": 2
}
},
{
- "t": 94012.5,
+ "t": 99487.5,
"e": "ZoomCamera",
"v": {
"duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 0.8
+ "zoom": 0.8,
+ "mode": "stage"
}
},
{
"t": 105225,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 1
+ "char": 1,
+ "ease": "expoOut"
}
},
{
"t": 105312.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1
+ "duration": 32,
+ "zoom": 1,
+ "mode": "stage"
}
},
{
"t": 108070.588235294,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 0
+ "char": 0,
+ "ease": "expoOut"
}
},
{
"t": 108137.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1.2
+ "duration": 32,
+ "zoom": 1.2,
+ "mode": "stage"
}
},
{
"t": 110894.117647059,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 1
+ "char": 1,
+ "ease": "expoOut"
}
},
{
"t": 110962.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1
+ "duration": 32,
+ "zoom": 1,
+ "mode": "stage"
}
},
{
"t": 113717.647058823,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 0
+ "char": 0,
+ "ease": "expoOut"
}
},
{
"t": 113787.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1.2
+ "duration": 32,
+ "zoom": 1.2,
+ "mode": "stage"
}
},
{
"t": 116364.705882353,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 2
+ "char": 2,
+ "ease": "expoOut"
}
},
{
"t": 116462.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 0.8
+ "duration": 32,
+ "zoom": 0.8,
+ "mode": "stage"
}
},
{
"t": 119364.705882353,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 0
+ "char": 0,
+ "ease": "expoOut"
}
},
{
"t": 119462.5,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1.2
+ "duration": 32,
+ "zoom": 1.2,
+ "mode": "stage"
}
},
{
"t": 122050,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 2
+ "char": 2,
+ "ease": "expoOut"
}
},
{
"t": 122150,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 0.8
+ "duration": 32,
+ "zoom": 0.8,
+ "mode": "stage"
}
},
{
"t": 125011.764705882,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 0
+ "char": 0,
+ "ease": "expoOut"
}
},
{
"t": 125100,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "expoOut",
- "mode": "stage",
- "zoom": 1.2
+ "duration": 32,
+ "zoom": 1.2,
+ "mode": "stage"
}
},
{
"t": 127525,
"e": "FocusCamera",
"v": {
- "duration": 32,
"x": 0,
+ "duration": 32,
"y": 0,
- "ease": "expoOut",
- "char": 2
+ "char": 2,
+ "ease": "expoOut"
}
},
{
"t": 127575,
"e": "ZoomCamera",
"v": {
- "duration": 32,
"ease": "smoothStepInOut",
- "mode": "stage",
- "zoom": 0.8
+ "duration": 32,
+ "zoom": 0.8,
+ "mode": "stage"
}
}
],
@@ -12022,4 +12169,4 @@
]
},
"generatedBy": "Friday Night Funkin' - v0.5.1"
-}
\ No newline at end of file
+}
diff --git a/assets/preload/data/ui/freeplay/styles/spooky.json b/assets/preload/data/ui/freeplay/styles/spooky.json
index f09cc7d..e5494f1 100644
--- a/assets/preload/data/ui/freeplay/styles/spooky.json
+++ b/assets/preload/data/ui/freeplay/styles/spooky.json
@@ -5,5 +5,5 @@
"numbersAsset": "digital_numbers_spooky",
"capsuleAsset": "freeplay/freeplayCapsule/capsule/freeplayCapsule_spooky",
"capsuleTextColors": ["#00CC0D", "#00CC0D"],
- "startDelay": 1.15
+ "startDelay": 1.16
}
diff --git a/assets/preload/images/freeplay/freeplay-pico/pumpco.png b/assets/preload/images/freeplay/freeplay-pico/pumpco.png
new file mode 100644
index 0000000..e91af6d
Binary files /dev/null and b/assets/preload/images/freeplay/freeplay-pico/pumpco.png differ
diff --git a/assets/preload/images/freeplay/freeplay-pico/pumpco.xml b/assets/preload/images/freeplay/freeplay-pico/pumpco.xml
new file mode 100644
index 0000000..d672d67
--- /dev/null
+++ b/assets/preload/images/freeplay/freeplay-pico/pumpco.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/preload/images/freeplay/icons/molochpixel.png b/assets/preload/images/freeplay/icons/molochpixel.png
index 13ce3bc..8fdb395 100644
Binary files a/assets/preload/images/freeplay/icons/molochpixel.png and b/assets/preload/images/freeplay/icons/molochpixel.png differ
diff --git a/assets/preload/images/freeplay/icons/molochpixel.xml b/assets/preload/images/freeplay/icons/molochpixel.xml
index 8f386dd..d5adc79 100644
--- a/assets/preload/images/freeplay/icons/molochpixel.xml
+++ b/assets/preload/images/freeplay/icons/molochpixel.xml
@@ -1,11 +1,11 @@
-
+
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/assets/preload/images/icons/icon-spooky-flipped-old.png b/assets/preload/images/icons/icon-spooky-flipped-old.png
new file mode 100644
index 0000000..accf011
Binary files /dev/null and b/assets/preload/images/icons/icon-spooky-flipped-old.png differ
diff --git a/assets/preload/images/icons/icon-spooky-old.png b/assets/preload/images/icons/icon-spooky-old.png
new file mode 100644
index 0000000..023819c
Binary files /dev/null and b/assets/preload/images/icons/icon-spooky-old.png differ
diff --git a/assets/preload/music/tutorialInstPreview/tutorialInstPreview.ogg b/assets/preload/music/tutorialInstPreview/tutorialInstPreview.ogg
new file mode 100644
index 0000000..ad1ca5a
Binary files /dev/null and b/assets/preload/music/tutorialInstPreview/tutorialInstPreview.ogg differ
diff --git a/assets/preload/scripts/characters/pump-playable-dark.hxc b/assets/preload/scripts/characters/pump-playable-dark.hxc
index 3f8c7ef..869d93a 100644
--- a/assets/preload/scripts/characters/pump-playable-dark.hxc
+++ b/assets/preload/scripts/characters/pump-playable-dark.hxc
@@ -94,10 +94,4 @@ class PumpPlayableDarkCharacter extends MultiSparrowCharacter
PauseSubState.musicSuffix = '-spooky';
}
-
- public override function getDeathCameraOffsets():Array {
- var result = super.getDeathCameraOffsets();
-
- return [result[0] - 420, result[1]];
- }
}
diff --git a/assets/preload/scripts/characters/pump-playable.hxc b/assets/preload/scripts/characters/pump-playable.hxc
index e4bf748..9875534 100644
--- a/assets/preload/scripts/characters/pump-playable.hxc
+++ b/assets/preload/scripts/characters/pump-playable.hxc
@@ -68,10 +68,4 @@ class PumpPlayableCharacter extends MultiSparrowCharacter
this.visible = true;
}
-
- public override function getDeathCameraOffsets():Array {
- var result = super.getDeathCameraOffsets();
-
- return [result[0] - 420, result[1]];
- }
}
diff --git a/assets/preload/scripts/characters/skid-playable-dark.hxc b/assets/preload/scripts/characters/skid-playable-dark.hxc
index 1e55add..2420f41 100644
--- a/assets/preload/scripts/characters/skid-playable-dark.hxc
+++ b/assets/preload/scripts/characters/skid-playable-dark.hxc
@@ -94,10 +94,4 @@ class SkidPlayableDarkCharacter extends MultiSparrowCharacter
PauseSubState.musicSuffix = '-spooky';
}
-
- public override function getDeathCameraOffsets():Array {
- var result = super.getDeathCameraOffsets();
-
- return [result[0] - 420, result[1]];
- }
}
diff --git a/assets/preload/scripts/characters/skid-playable.hxc b/assets/preload/scripts/characters/skid-playable.hxc
index ae43448..c969ae5 100644
--- a/assets/preload/scripts/characters/skid-playable.hxc
+++ b/assets/preload/scripts/characters/skid-playable.hxc
@@ -68,10 +68,4 @@ class SkidPlayableCharacter extends MultiSparrowCharacter
this.visible = true;
}
-
- public override function getDeathCameraOffsets():Array {
- var result = super.getDeathCameraOffsets();
-
- return [result[0] - 420, result[1]];
- }
}
diff --git a/assets/preload/scripts/characters/spooky-christmas.hxc b/assets/preload/scripts/characters/spooky-christmas.hxc
index d908a65..2939db1 100644
--- a/assets/preload/scripts/characters/spooky-christmas.hxc
+++ b/assets/preload/scripts/characters/spooky-christmas.hxc
@@ -68,10 +68,4 @@ class SpookyChristmasCharacter extends MultiSparrowCharacter
this.visible = true;
}
-
- public override function getDeathCameraOffsets():Array {
- var result = super.getDeathCameraOffsets();
-
- return [result[0] + 65, result[1] + 100];
- }
}
diff --git a/assets/preload/scripts/characters/spooky-nogreen.hxc b/assets/preload/scripts/characters/spooky-nogreen.hxc
index 663a153..934f322 100644
--- a/assets/preload/scripts/characters/spooky-nogreen.hxc
+++ b/assets/preload/scripts/characters/spooky-nogreen.hxc
@@ -68,10 +68,4 @@ class SpookyNoGreenCharacter extends MultiSparrowCharacter
this.visible = true;
}
-
- public override function getDeathCameraOffsets():Array {
- var result = super.getDeathCameraOffsets();
-
- return [result[0] - 40, result[1] + 120];
- }
}
diff --git a/assets/preload/scripts/characters/spooky-playable.hxc b/assets/preload/scripts/characters/spooky-playable.hxc
index aec21c0..f9ae525 100644
--- a/assets/preload/scripts/characters/spooky-playable.hxc
+++ b/assets/preload/scripts/characters/spooky-playable.hxc
@@ -68,10 +68,4 @@ class SpookyPlayableCharacter extends MultiSparrowCharacter
this.visible = true;
}
-
- public override function getDeathCameraOffsets():Array {
- var result = super.getDeathCameraOffsets();
-
- return [result[0] - 40, result[1] + 120];
- }
}
diff --git a/assets/preload/scripts/events/FadeInOutBlackScreen.hxc b/assets/preload/scripts/events/FadeInOutBlackScreen.hxc
new file mode 100644
index 0000000..3af03bf
--- /dev/null
+++ b/assets/preload/scripts/events/FadeInOutBlackScreen.hxc
@@ -0,0 +1,195 @@
+import funkin.play.PlayState;
+import funkin.play.PauseSubState;
+import funkin.ui.debug.charting.ChartEditorState;
+import funkin.play.PlayStatePlaylist;
+import funkin.data.song.SongRegistry;
+import funkin.ui.transition.LoadingState;
+import funkin.ui.transition.StickerSubState;
+import flixel.FlxCamera;
+import flixel.math.FlxMath;
+import flixel.FlxSprite;
+import flixel.math.FlxAngle;
+import flixel.math.FlxPoint;
+import flixel.text.FlxText;
+import flixel.text.FlxTextBorderStyle;
+import flixel.tweens.FlxEase;
+import flixel.tweens.FlxTween;
+import flixel.util.FlxSpriteUtil;
+import flixel.util.FlxTimer;
+import funkin.graphics.adobeanimate.FlxAtlasSprite;
+import funkin.graphics.FunkinSprite;
+import funkin.ui.freeplay.charselect.PlayableCharacter;
+import funkin.ui.MusicBeatSubState;
+import funkin.graphics.shaders.AdjustColorShader;
+import flixel.addons.display.FlxTiledSprite;
+import flixel.addons.display.FlxBackdrop;
+import funkin.PlayerSettings;
+import funkin.modding.module.Module;
+import funkin.modding.events.ScriptEvent;
+import funkin.modding.base.ScriptedMusicBeatSubState;
+import funkin.modding.base.ScriptedFlxRuntimeShader;
+import funkin.modding.base.ScriptedMusicBeatState;
+import funkin.util.ReflectUtil;
+import flixel.FlxG;
+import funkin.audio.FunkinSound;
+import funkin.util.Constants;
+import StringTools;
+import funkin.save.Save;
+import funkin.Preferences;
+
+class FadeInOutBlackScreen extends Module
+{
+ //made by Denoohay for FNF: SPOOKY MIX
+
+ var blackScreen:FlxSprite;
+
+ var addedStuff:Bool = false;
+
+ var fadeTween:FlxTween;
+
+ public function new()
+ {
+ super('FadeInOutBlackScreen');
+ }
+
+ override function onStateChangeBegin(event)
+ {
+ super.onStateChangeBegin(event);
+ addedStuff = false;
+ }
+
+ override function onSubStateCloseBegin(event:SubStateScriptEvent)
+ {
+ super.onSubStateCloseBegin(event);
+
+ if (ReflectUtil.getClassNameOf(FlxG.state.subState) != "funkin.play.PauseSubState" && ReflectUtil.getClassNameOf(FlxG.state.subState) == "funkin.play.PlayState" && ReflectUtil.getClassNameOf(FlxG.state) == "funkin.ui.debug.charting.ChartEditorState")
+ {
+ addedStuff = false;
+ }
+ }
+
+ function onSongLoaded(event:SongLoadScriptEvent):Void
+ {
+ super.onSongLoaded(event);
+
+ if (fadeTween != null)
+ {
+ fadeTween.cancel();
+ fadeTween.active = true;
+ }
+
+ if (addedStuff == false)
+ {
+ addedStuff = true;
+
+ blackScreen = new FlxSprite(-100, -100).makeGraphic(FlxG.width * 2, FlxG.height * 2, 0xFF000000);
+ blackScreen.zIndex = 1100;
+ blackScreen.cameras = [PlayState.instance.camCutscene];
+ PlayState.instance.add(blackScreen);
+ }
+
+ if (PlayState.instance.currentVariation == 'spooky' && (PlayState.instance.currentSong.id == 'monster' || PlayState.instance.currentSong.id == 'winter-horrorland'))
+ {
+ blackScreen.alpha = 1;
+ PlayState.instance.camHUD.alpha = 0;
+ }
+ else
+ {
+ blackScreen.alpha = 0;
+ PlayState.instance.camHUD.alpha = 1;
+ }
+ }
+
+ function onSongRetry(event:ScriptEvent)
+ {
+ super.onSongRetry(event);
+
+ if (PlayState.instance.currentVariation == 'spooky' && (PlayState.instance.currentSong.id == 'monster' || PlayState.instance.currentSong.id == 'winter-horrorland'))
+ {
+ blackScreen.alpha = 1;
+ PlayState.instance.camHUD.alpha = 0;
+ }
+ else
+ {
+ blackScreen.alpha = 0;
+ PlayState.instance.camHUD.alpha = 1;
+ }
+ }
+
+ function onGameOver(event:ScriptEvent):Void
+ {
+ super.onGameOver(event);
+
+ if (PlayState.instance.currentVariation == 'spooky' && (PlayState.instance.currentSong.id == 'monster' || PlayState.instance.currentSong.id == 'winter-horrorland'))
+ {
+ blackScreen.alpha = 1;
+ PlayState.instance.camHUD.alpha = 0;
+ }
+ else
+ {
+ blackScreen.alpha = 0;
+ PlayState.instance.camHUD.alpha = 1;
+ }
+ }
+
+ public override function onSongEvent(scriptEvent:SongEventScriptEvent)
+ {
+ super.onSongEvent(scriptEvent);
+
+ if (scriptEvent.eventData.eventKind == "FadeInOut")
+ {
+ if (scriptEvent.eventData.value.inout == 1)
+ {
+ if (scriptEvent.eventData.value.object == 1)
+ {
+ if (scriptEvent.eventData.value.seconds != 0)
+ {
+ fadeTween = FlxTween.tween(PlayState.instance.camHUD, {alpha: 0}, scriptEvent.eventData.value.seconds);
+ }
+ else
+ {
+ PlayState.instance.camHUD.alpha = 0;
+ }
+ }
+ else if (scriptEvent.eventData.value.object == 2) {}
+ else
+ {
+ if (scriptEvent.eventData.value.seconds != 0)
+ {
+ fadeTween = FlxTween.tween(blackScreen, {alpha: 0}, scriptEvent.eventData.value.seconds);
+ }
+ else
+ {
+ blackScreen.alpha = 0;
+ }
+ }
+ }
+ else
+ {
+ if (scriptEvent.eventData.value.object == 1)
+ {
+ if (scriptEvent.eventData.value.seconds != 0)
+ {
+ fadeTween = FlxTween.tween(PlayState.instance.camHUD, {alpha: 1}, scriptEvent.eventData.value.seconds);
+ }
+ else
+ {
+ PlayState.instance.camHUD.alpha = 1;
+ }
+ }
+ else if (scriptEvent.eventData.value.object == 2) {}
+ else
+ {
+ if (scriptEvent.eventData.value.seconds != 0)
+ {
+ fadeTween = FlxTween.tween(blackScreen, {alpha: 1}, scriptEvent.eventData.value.seconds);
+ }
+ else
+ {
+ blackScreen.alpha = 1;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/assets/preload/scripts/events/FadeInOutSongEvent.hxc b/assets/preload/scripts/events/FadeInOutSongEvent.hxc
new file mode 100644
index 0000000..706a261
--- /dev/null
+++ b/assets/preload/scripts/events/FadeInOutSongEvent.hxc
@@ -0,0 +1,79 @@
+import funkin.play.PlayState;
+import funkin.play.PlayStatePlaylist;
+import funkin.data.song.SongRegistry;
+import funkin.ui.transition.LoadingState;
+import funkin.ui.transition.StickerSubState;
+import flixel.FlxCamera;
+import flixel.math.FlxMath;
+import flixel.FlxSprite;
+import flixel.math.FlxAngle;
+import flixel.math.FlxPoint;
+import flixel.text.FlxText;
+import flixel.text.FlxTextBorderStyle;
+import flixel.tweens.FlxEase;
+import flixel.tweens.FlxTween;
+import flixel.util.FlxSpriteUtil;
+import flixel.util.FlxTimer;
+import funkin.graphics.adobeanimate.FlxAtlasSprite;
+import funkin.graphics.FunkinSprite;
+import funkin.ui.freeplay.charselect.PlayableCharacter;
+import funkin.ui.MusicBeatSubState;
+import funkin.graphics.shaders.AdjustColorShader;
+import flixel.addons.display.FlxTiledSprite;
+import flixel.addons.display.FlxBackdrop;
+import funkin.PlayerSettings;
+import funkin.modding.module.Module;
+import funkin.modding.events.ScriptEvent;
+import funkin.modding.base.ScriptedMusicBeatSubState;
+import funkin.modding.base.ScriptedFlxRuntimeShader;
+import funkin.modding.base.ScriptedMusicBeatState;
+import funkin.util.ReflectUtil;
+import flixel.FlxG;
+import funkin.audio.FunkinSound;
+import funkin.util.Constants;
+import StringTools;
+import funkin.save.Save;
+import funkin.play.event.SongEvent;
+
+class FadeInOutSongEvent extends SongEvent
+{
+ public function new()
+ {
+ super('FadeInOut');
+ }
+
+ public override function handleEvent(data) {}
+
+ public function getTitle()
+ {
+ return "Fade In/Out";
+ }
+
+ public function getEventSchema()
+ {
+ return
+ [
+ {
+ name: "inout",
+ title: "Fade",
+ defaultValue: 0,
+ type: "enum",
+ keys: ["In" => 0, "Out" => 1]
+ },
+ {
+ name: "object",
+ title: "Object",
+ defaultValue: 0,
+ type: "enum",
+ keys: ["Black Screen" => 0, "UI" => 1, "Subtitles" => 2]
+ },
+ {
+ name: "seconds",
+ title: "Duration",
+ defaultValue: 0,
+ type: "float",
+ units: 'seconds'
+ }
+ ];
+ }
+}
\ No newline at end of file
diff --git a/assets/preload/scripts/events/LyricsObject.hxc b/assets/preload/scripts/events/LyricsObject.hxc
new file mode 100644
index 0000000..fcbc62e
--- /dev/null
+++ b/assets/preload/scripts/events/LyricsObject.hxc
@@ -0,0 +1,481 @@
+import funkin.play.PlayState;
+import funkin.play.PauseSubState;
+import funkin.ui.debug.charting.ChartEditorState;
+import funkin.play.PlayStatePlaylist;
+import funkin.data.song.SongRegistry;
+import funkin.ui.transition.LoadingState;
+import funkin.ui.transition.StickerSubState;
+import flixel.FlxCamera;
+import flixel.math.FlxMath;
+import flixel.FlxSprite;
+import flixel.math.FlxAngle;
+import flixel.math.FlxPoint;
+import flixel.text.FlxText;
+import flixel.text.FlxTextBorderStyle;
+import flixel.tweens.FlxEase;
+import flixel.tweens.FlxTween;
+import flixel.util.FlxSpriteUtil;
+import flixel.util.FlxTimer;
+import funkin.graphics.adobeanimate.FlxAtlasSprite;
+import funkin.graphics.FunkinSprite;
+import funkin.ui.freeplay.charselect.PlayableCharacter;
+import funkin.ui.MusicBeatSubState;
+import funkin.graphics.shaders.AdjustColorShader;
+import flixel.addons.display.FlxTiledSprite;
+import flixel.addons.display.FlxBackdrop;
+import funkin.PlayerSettings;
+import funkin.modding.module.Module;
+import funkin.modding.events.ScriptEvent;
+import funkin.modding.base.ScriptedMusicBeatSubState;
+import funkin.modding.base.ScriptedFlxRuntimeShader;
+import funkin.modding.base.ScriptedMusicBeatState;
+import funkin.util.ReflectUtil;
+import flixel.FlxG;
+import funkin.audio.FunkinSound;
+import funkin.util.Constants;
+import StringTools;
+import funkin.save.Save;
+import funkin.Preferences;
+
+class LyricsObject extends Module
+{
+ //made by Denoohay for FNF: SPOOKY MIX
+
+ var subtitleText:FlxText;
+ var subtitleTextOVER:FlxText;
+
+ var fadeTween:FlxTween;
+
+ var textAlpha:Float = 1;
+
+ var addedStuff:Bool = false;
+
+ public function new()
+ {
+ super('LyricsObject');
+ }
+
+ override function onStateChangeBegin(event)
+ {
+ super.onStateChangeBegin(event);
+ addedStuff = false;
+ }
+
+ override function onSubStateCloseBegin(event:SubStateScriptEvent)
+ {
+ super.onSubStateCloseBegin(event);
+
+ if (ReflectUtil.getClassNameOf(FlxG.state.subState) != "funkin.play.PauseSubState" && ReflectUtil.getClassNameOf(FlxG.state.subState) == "funkin.play.PlayState" && ReflectUtil.getClassNameOf(FlxG.state) == "funkin.ui.debug.charting.ChartEditorState")
+ {
+ addedStuff = false;
+ }
+ }
+
+ function onSongLoaded(event:SongLoadScriptEvent):Void
+ {
+ super.onSongLoaded(event);
+
+ if (fadeTween != null)
+ {
+ fadeTween.cancel();
+ fadeTween.active = true;
+ }
+
+ if (addedStuff == false)
+ {
+ addedStuff = true;
+
+ subtitleTextOVER = new FlxText(0, 540, FlxG.width, "");
+ subtitleTextOVER.setFormat(Paths.font("vcr.ttf"), 32, 0xFFFFFFFF, "center", FlxTextBorderStyle.OUTLINE, 0xFF000000);
+ subtitleTextOVER.borderSize = 1.25;
+ subtitleTextOVER.alpha = 1;
+ subtitleTextOVER.zIndex = 3000;
+ subtitleTextOVER.cameras = [PlayState.instance.camCutscene];
+ PlayState.instance.add(subtitleTextOVER);
+
+ subtitleText = new FlxText(0, 540, FlxG.width, "");
+ subtitleText.setFormat(Paths.font("vcr.ttf"), 32, 0xFFFFFFFF, "center", FlxTextBorderStyle.OUTLINE, 0xFF000000);
+ subtitleText.borderSize = 1.25;
+ subtitleText.alpha = 1;
+ subtitleText.zIndex = 850;
+ subtitleText.cameras = [PlayState.instance.camHUD];
+ PlayState.instance.add(subtitleText);
+ }
+ }
+
+ function onSongRetry(event:ScriptEvent)
+ {
+ super.onSongRetry(event);
+
+ subtitleText.text = "";
+ subtitleTextOVER.text = "";
+
+ subtitleText.alpha = textAlpha;
+ subtitleTextOVER.alpha = textAlpha;
+ }
+
+ function onGameOver(event:ScriptEvent):Void
+ {
+ super.onGameOver(event);
+
+ subtitleText.text = "";
+ subtitleTextOVER.text = "";
+
+ subtitleText.alpha = textAlpha;
+ subtitleTextOVER.alpha = textAlpha;
+ }
+
+ public override function onSongEvent(scriptEvent:SongEventScriptEvent)
+ {
+ super.onSongEvent(scriptEvent);
+
+ if (scriptEvent.eventData.eventKind == "Lyrics")
+ {
+ if (scriptEvent.eventData.value.lyric != null)
+ {
+ subtitleText.text = scriptEvent.eventData.value.lyric;
+ subtitleTextOVER.text = scriptEvent.eventData.value.lyric;
+ }
+
+ if (scriptEvent.eventData.value.font != null)
+ {
+ subtitleText.font = Paths.font(scriptEvent.eventData.value.font + '.ttf');
+ subtitleTextOVER.font = Paths.font(scriptEvent.eventData.value.font + '.ttf');
+ }
+
+ if (scriptEvent.eventData.value.fontSize != null)
+ {
+ subtitleText.size = scriptEvent.eventData.value.fontSize;
+ subtitleTextOVER.size = scriptEvent.eventData.value.fontSize;
+ }
+
+ if (scriptEvent.eventData.value.letterSpacing != null)
+ {
+ subtitleText.letterSpacing = scriptEvent.eventData.value.letterSpacing;
+ subtitleTextOVER.letterSpacing = scriptEvent.eventData.value.letterSpacing;
+ }
+
+ if (scriptEvent.eventData.value.textColor != null)
+ {
+ if (scriptEvent.eventData.value.textColor == 0)
+ {
+ subtitleText.color = 0xFFFFFFFF;
+ subtitleTextOVER.color = 0xFFFFFFFF;
+ }
+ else if (scriptEvent.eventData.value.textColor == 1)
+ {
+ subtitleText.color = 0xFF000000;
+ subtitleTextOVER.color = 0xFF000000;
+ }
+ else if (scriptEvent.eventData.value.textColor == 2)
+ {
+ subtitleText.color = 0xFF0000FF;
+ subtitleTextOVER.color = 0xFF0000FF;
+ }
+ else if (scriptEvent.eventData.value.textColor == 3)
+ {
+ subtitleText.color = 0xFF8B4513;
+ subtitleTextOVER.color = 0xFF8B4513;
+ }
+ else if (scriptEvent.eventData.value.textColor == 4)
+ {
+ subtitleText.color = 0xFF00FFFF;
+ subtitleTextOVER.color = 0xFF00FFFF;
+ }
+ else if (scriptEvent.eventData.value.textColor == 5)
+ {
+ subtitleText.color = 0xFF808080;
+ subtitleTextOVER.color = 0xFF808080;
+ }
+ else if (scriptEvent.eventData.value.textColor == 6)
+ {
+ subtitleText.color = 0xFF008000;
+ subtitleTextOVER.color = 0xFF008000;
+ }
+ else if (scriptEvent.eventData.value.textColor == 7)
+ {
+ subtitleText.color = 0xFF00FF00;
+ subtitleTextOVER.color = 0xFF00FF00;
+ }
+ else if (scriptEvent.eventData.value.textColor == 8)
+ {
+ subtitleText.color = 0xFFFF00FF;
+ subtitleTextOVER.color = 0xFFFF00FF;
+ }
+ else if (scriptEvent.eventData.value.textColor == 9)
+ {
+ subtitleText.color = 0xFFFFA500;
+ subtitleTextOVER.color = 0xFFFFA500;
+ }
+ else if (scriptEvent.eventData.value.textColor == 10)
+ {
+ subtitleText.color = 0xFFFFC0CB;
+ subtitleTextOVER.color = 0xFFFFC0CB;
+ }
+ else if (scriptEvent.eventData.value.textColor == 11)
+ {
+ subtitleText.color = 0xFF800080;
+ subtitleTextOVER.color = 0xFF800080;
+ }
+ else if (scriptEvent.eventData.value.textColor == 12)
+ {
+ subtitleText.color = 0xFFFF0000;
+ subtitleTextOVER.color = 0xFFFF0000;
+ }
+ else if (scriptEvent.eventData.value.textColor == 13)
+ {
+ subtitleText.color = 0xFFFFFF00;
+ subtitleTextOVER.color = 0xFFFFFF00;
+ }
+ }
+
+ if (scriptEvent.eventData.value.alignment != null)
+ {
+ if (scriptEvent.eventData.value.alignment == 0)
+ {
+ subtitleText.alignment = "center";
+ subtitleTextOVER.alignment = "center";
+ }
+ else if (scriptEvent.eventData.value.alignment == 1)
+ {
+ subtitleText.alignment = "left";
+ subtitleTextOVER.alignment = "left";
+ }
+ else if (scriptEvent.eventData.value.alignment == 2)
+ {
+ subtitleText.alignment = "right";
+ subtitleTextOVER.alignment = "right";
+ }
+ else if (scriptEvent.eventData.value.alignment == 3)
+ {
+ subtitleText.alignment = "justify";
+ subtitleTextOVER.alignment = "justify";
+ }
+ }
+
+ if (scriptEvent.eventData.value.position != null)
+ {
+ if (scriptEvent.eventData.value.position == 0)
+ {
+ if (Preferences.downscroll)
+ {
+ subtitleText.x = 0;
+ subtitleText.y = 130;
+ subtitleTextOVER.x = 0;
+ subtitleTextOVER.y = 130;
+ }
+ else
+ {
+ subtitleText.x = 0;
+ subtitleText.y = 540;
+ subtitleTextOVER.x = 0;
+ subtitleTextOVER.y = 540;
+ }
+ }
+ else if (scriptEvent.eventData.value.position == 1)
+ {
+ if (Preferences.downscroll)
+ {
+ subtitleText.x = 0;
+ subtitleText.y = 540;
+ subtitleTextOVER.x = 0;
+ subtitleTextOVER.y = 540;
+ }
+ else
+ {
+ subtitleText.x = 0;
+ subtitleText.y = 130;
+ subtitleTextOVER.x = 0;
+ subtitleTextOVER.y = 130;
+ }
+ }
+ else if (scriptEvent.eventData.value.position == 2)
+ {
+ subtitleText.screenCenter();
+ subtitleTextOVER.screenCenter();
+ }
+ else if (scriptEvent.eventData.value.position == 3)
+ {
+ if (scriptEvent.eventData.value.customX != null)
+ {
+ subtitleText.x = scriptEvent.eventData.value.customX;
+ subtitleTextOVER.x = scriptEvent.eventData.value.customX;
+ }
+
+ if (scriptEvent.eventData.value.customY != null)
+ {
+ subtitleText.y = scriptEvent.eventData.value.customY;
+ subtitleTextOVER.y = scriptEvent.eventData.value.customY;
+ }
+ }
+ }
+ else
+ {
+ if (Preferences.downscroll)
+ {
+ subtitleText.x = 0;
+ subtitleText.y = 130;
+ subtitleTextOVER.x = 0;
+ subtitleTextOVER.y = 130;
+ }
+ else
+ {
+ subtitleText.x = 0;
+ subtitleText.y = 540;
+ subtitleTextOVER.x = 0;
+ subtitleTextOVER.y = 540;
+ }
+ }
+
+ if (scriptEvent.eventData.value.outlineWidth != null)
+ {
+ if (scriptEvent.eventData.value.outlineWidth == 1.3)
+ {
+ subtitleText.borderSize = 1.25;
+ subtitleTextOVER.borderSize = 1.25;
+ }
+ else
+ {
+ subtitleText.borderSize = scriptEvent.eventData.value.outlineWidth;
+ subtitleTextOVER.borderSize = scriptEvent.eventData.value.outlineWidth;
+ }
+ }
+
+ /*
+ if (scriptEvent.eventData.value.borderColor != null)
+ {
+ if (scriptEvent.eventData.value.borderColor == 0)
+ {
+ subtitleText.borderColor = 0xFFFFFFFF;
+ subtitleTextOVER.borderColor = 0xFFFFFFFF;
+ }
+ else if (scriptEvent.eventData.value.borderColor == 1)
+ {
+ subtitleText.borderColor = 0xFF000000;
+ subtitleTextOVER.borderColor = 0xFF000000;
+ }
+ else if (scriptEvent.eventData.value.borderColor == 2)
+ {
+ subtitleText.borderColor = 0xFF0000FF;
+ subtitleTextOVER.borderColor = 0xFF0000FF;
+ }
+ else if (scriptEvent.eventData.value.borderColor == 3)
+ {
+ subtitleText.borderColor = 0xFF8B4513;
+ subtitleTextOVER.borderColor = 0xFF8B4513;
+ }
+ else if (scriptEvent.eventData.value.borderColor == 4)
+ {
+ subtitleText.borderColor = 0xFF00FFFF;
+ subtitleTextOVER.borderColor = 0xFF00FFFF;
+ }
+ else if (scriptEvent.eventData.value.borderColor == 5)
+ {
+ subtitleText.borderColor = 0xFF808080;
+ subtitleTextOVER.borderColor = 0xFF808080;
+ }
+ else if (scriptEvent.eventData.value.borderColor == 6)
+ {
+ subtitleText.borderColor = 0xFF008000;
+ subtitleTextOVER.borderColor = 0xFF008000;
+ }
+ else if (scriptEvent.eventData.value.borderColor == 7)
+ {
+ subtitleText.borderColor = 0xFF00FF00;
+ subtitleTextOVER.borderColor = 0xFF00FF00;
+ }
+ else if (scriptEvent.eventData.value.borderColor == 8)
+ {
+ subtitleText.borderColor = 0xFFFF00FF;
+ subtitleTextOVER.borderColor = 0xFFFF00FF;
+ }
+ else if (scriptEvent.eventData.value.borderColor == 9)
+ {
+ subtitleText.borderColor = 0xFFFFA500;
+ subtitleTextOVER.borderColor = 0xFFFFA500;
+ }
+ else if (scriptEvent.eventData.value.borderColor == 10)
+ {
+ subtitleText.borderColor = 0xFFFFC0CB;
+ subtitleTextOVER.borderColor = 0xFFFFC0CB;
+ }
+ else if (scriptEvent.eventData.value.borderColor == 11)
+ {
+ subtitleText.borderColor = 0xFF800080;
+ subtitleTextOVER.borderColor = 0xFF800080;
+ }
+ else if (scriptEvent.eventData.value.borderColor == 12)
+ {
+ subtitleText.borderColor = 0xFFFF0000;
+ subtitleTextOVER.borderColor = 0xFFFF0000;
+ }
+ else if (scriptEvent.eventData.value.borderColor == 13)
+ {
+ subtitleText.borderColor = 0xFFFFFF00;
+ subtitleTextOVER.borderColor = 0xFFFFFF00;
+ }
+ }
+ */
+
+ if (scriptEvent.eventData.value.opacity != null)
+ {
+ subtitleText.alpha = scriptEvent.eventData.value.opacity / 100;
+ subtitleTextOVER.alpha = scriptEvent.eventData.value.opacity / 100;
+
+ textAlpha = scriptEvent.eventData.value.opacity / 100;
+ }
+
+ if (scriptEvent.eventData.value.layering != null)
+ {
+ if (scriptEvent.eventData.value.layering == 1)
+ {
+ subtitleText.visible = false;
+ subtitleTextOVER.visible = true;
+ }
+ else
+ {
+ subtitleText.visible = true;
+ subtitleTextOVER.visible = false;
+ }
+ }
+ else
+ {
+ subtitleText.visible = true;
+ subtitleTextOVER.visible = false;
+ }
+ }
+
+ if (scriptEvent.eventData.eventKind == "FadeInOut")
+ {
+ if (scriptEvent.eventData.value.object == 2)
+ {
+ if (scriptEvent.eventData.value.inout == 1)
+ {
+ if (scriptEvent.eventData.value.seconds != 0)
+ {
+ fadeTween = FlxTween.tween(subtitleText, {alpha: 0}, scriptEvent.eventData.value.seconds);
+ fadeTween = FlxTween.tween(subtitleTextOVER, {alpha: 0}, scriptEvent.eventData.value.seconds);
+ }
+ else
+ {
+ subtitleText.alpha = 0;
+ subtitleTextOVER.alpha = 0;
+ }
+ }
+ else
+ {
+ if (scriptEvent.eventData.value.seconds != 0)
+ {
+ fadeTween = FlxTween.tween(subtitleText, {alpha: textAlpha}, scriptEvent.eventData.value.seconds);
+ fadeTween = FlxTween.tween(subtitleTextOVER, {alpha: textAlpha}, scriptEvent.eventData.value.seconds);
+ }
+ else
+ {
+ subtitleText.alpha = textAlpha;
+ subtitleTextOVER.alpha = textAlpha;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/assets/preload/scripts/events/LyricsSongEvent.hxc b/assets/preload/scripts/events/LyricsSongEvent.hxc
new file mode 100644
index 0000000..617d766
--- /dev/null
+++ b/assets/preload/scripts/events/LyricsSongEvent.hxc
@@ -0,0 +1,145 @@
+import funkin.play.PlayState;
+import funkin.play.PlayStatePlaylist;
+import funkin.data.song.SongRegistry;
+import funkin.ui.transition.LoadingState;
+import funkin.ui.transition.StickerSubState;
+import flixel.FlxCamera;
+import flixel.math.FlxMath;
+import flixel.FlxSprite;
+import flixel.math.FlxAngle;
+import flixel.math.FlxPoint;
+import flixel.text.FlxText;
+import flixel.text.FlxTextBorderStyle;
+import flixel.tweens.FlxEase;
+import flixel.tweens.FlxTween;
+import flixel.util.FlxSpriteUtil;
+import flixel.util.FlxTimer;
+import funkin.graphics.adobeanimate.FlxAtlasSprite;
+import funkin.graphics.FunkinSprite;
+import funkin.ui.freeplay.charselect.PlayableCharacter;
+import funkin.ui.MusicBeatSubState;
+import funkin.graphics.shaders.AdjustColorShader;
+import flixel.addons.display.FlxTiledSprite;
+import flixel.addons.display.FlxBackdrop;
+import funkin.PlayerSettings;
+import funkin.modding.module.Module;
+import funkin.modding.events.ScriptEvent;
+import funkin.modding.base.ScriptedMusicBeatSubState;
+import funkin.modding.base.ScriptedFlxRuntimeShader;
+import funkin.modding.base.ScriptedMusicBeatState;
+import funkin.util.ReflectUtil;
+import flixel.FlxG;
+import funkin.audio.FunkinSound;
+import funkin.util.Constants;
+import StringTools;
+import funkin.save.Save;
+import funkin.play.event.SongEvent;
+
+class LyricsSongEvent extends SongEvent
+{
+ public function new()
+ {
+ super('Lyrics');
+ }
+
+ public override function handleEvent(data) {}
+
+ public function getTitle()
+ {
+ return "Lyrics";
+ }
+
+ public function getEventSchema()
+ {
+ return
+ [
+ {
+ name: "lyric",
+ title: "Text",
+ defaultValue: '',
+ type: "string"
+ },
+ {
+ name: "font",
+ title: "Font",
+ defaultValue: 'vcr',
+ type: "string",
+ units: '.ttf'
+ },
+ {
+ name: "fontSize",
+ title: "Font Size",
+ defaultValue: 32,
+ type: "integer"
+ },
+ {
+ name: "letterSpacing",
+ title: "Letter Spacing",
+ defaultValue: 0,
+ type: "float"
+ },
+ {
+ name: "textColor",
+ title: "Text Color",
+ defaultValue: 0,
+ type: "enum",
+ keys: ["White" => 0, "Black" => 1, "Blue" => 2, "Brown" => 3, "Cyan" => 4, "Gray" => 5, "Green" => 6, "Lime" => 7, "Magenta" => 8, "Orange" => 9, "Pink" => 10, "Purple" => 11, "Red" => 12, "Yellow" => 13]
+ },
+ {
+ name: "alignment",
+ title: "Alignment",
+ defaultValue: 0,
+ type: "enum",
+ keys: ["Centered" => 0, "Left" => 1, "Right" => 2, "Justify" => 3]
+ },
+ {
+ name: "position",
+ title: "Position",
+ defaultValue: 0,
+ type: "enum",
+ keys: ["Bottom (Top on Downscroll, Igornes Custom X and Y)" => 0, "Top (Bottom on Downscroll, Igornes Custom X and Y)" => 1, "Centered (Igornes Custom X and Y)" => 2, "Custom (Input Below)" => 3]
+ },
+ {
+ name: "customX",
+ title: "Custom X",
+ defaultValue: 0,
+ type: "float"
+ },
+ {
+ name: "customY",
+ title: "Custom Y",
+ defaultValue: 0,
+ type: "float"
+ },
+ {
+ name: "outlineWidth",
+ title: "Outline Width",
+ defaultValue: 1.3,
+ type: "float"
+ },
+ /*
+ {
+ name: "outlineColor",
+ title: "Outline Color",
+ defaultValue: 1,
+ type: "enum",
+ keys: ["White" => 0, "Black" => 1, "Blue" => 2, "Brown" => 3, "Cyan" => 4, "Gray" => 5, "Green" => 6, "Lime" => 7, "Magenta" => 8, "Orange" => 9, "Pink" => 10, "Purple" => 11, "Red" => 12, "Yellow" => 13]
+ },
+ */
+ {
+ name: "opacity",
+ title: "Opacity",
+ defaultValue: 100,
+ type: "float",
+ units: '%'
+ },
+ {
+ name: "layering",
+ title: "Layering",
+ defaultValue: 0,
+ type: "enum",
+ keys: ["Under UI (Default)" => 0, "Above Everything" => 1]
+ }
+ ];
+ }
+}
\ No newline at end of file
diff --git a/assets/preload/scripts/events/PlaySoundAction.hxc b/assets/preload/scripts/events/PlaySoundAction.hxc
new file mode 100644
index 0000000..7d1f9d6
--- /dev/null
+++ b/assets/preload/scripts/events/PlaySoundAction.hxc
@@ -0,0 +1,58 @@
+import funkin.play.PlayState;
+import funkin.play.PauseSubState;
+import funkin.ui.debug.charting.ChartEditorState;
+import funkin.play.PlayStatePlaylist;
+import funkin.data.song.SongRegistry;
+import funkin.ui.transition.LoadingState;
+import funkin.ui.transition.StickerSubState;
+import flixel.FlxCamera;
+import flixel.math.FlxMath;
+import flixel.FlxSprite;
+import flixel.math.FlxAngle;
+import flixel.math.FlxPoint;
+import flixel.text.FlxText;
+import flixel.text.FlxTextBorderStyle;
+import flixel.tweens.FlxEase;
+import flixel.tweens.FlxTween;
+import flixel.util.FlxSpriteUtil;
+import flixel.util.FlxTimer;
+import funkin.graphics.adobeanimate.FlxAtlasSprite;
+import funkin.graphics.FunkinSprite;
+import funkin.ui.freeplay.charselect.PlayableCharacter;
+import funkin.ui.MusicBeatSubState;
+import funkin.graphics.shaders.AdjustColorShader;
+import flixel.addons.display.FlxTiledSprite;
+import flixel.addons.display.FlxBackdrop;
+import funkin.PlayerSettings;
+import funkin.modding.module.Module;
+import funkin.modding.events.ScriptEvent;
+import funkin.modding.base.ScriptedMusicBeatSubState;
+import funkin.modding.base.ScriptedFlxRuntimeShader;
+import funkin.modding.base.ScriptedMusicBeatState;
+import funkin.util.ReflectUtil;
+import flixel.FlxG;
+import funkin.audio.FunkinSound;
+import funkin.util.Constants;
+import StringTools;
+import funkin.save.Save;
+import funkin.Preferences;
+
+class PlaySoundAction extends Module
+{
+ //made by Denoohay for FNF: SPOOKY MIX
+
+ public function new()
+ {
+ super('PlaySoundAction');
+ }
+
+ public override function onSongEvent(scriptEvent:SongEventScriptEvent)
+ {
+ super.onSongEvent(scriptEvent);
+
+ if (scriptEvent.eventData.eventKind == "playSound")
+ {
+ FunkinSound.playOnce(Paths.sound(scriptEvent.eventData.value.fileName), scriptEvent.eventData.value.volume);
+ }
+ }
+}
diff --git a/assets/preload/scripts/events/PlaySoundSongEvent.hxc b/assets/preload/scripts/events/PlaySoundSongEvent.hxc
new file mode 100644
index 0000000..f0b743b
--- /dev/null
+++ b/assets/preload/scripts/events/PlaySoundSongEvent.hxc
@@ -0,0 +1,71 @@
+import funkin.play.PlayState;
+import funkin.play.PlayStatePlaylist;
+import funkin.data.song.SongRegistry;
+import funkin.ui.transition.LoadingState;
+import funkin.ui.transition.StickerSubState;
+import flixel.FlxCamera;
+import flixel.math.FlxMath;
+import flixel.FlxSprite;
+import flixel.math.FlxAngle;
+import flixel.math.FlxPoint;
+import flixel.text.FlxText;
+import flixel.text.FlxTextBorderStyle;
+import flixel.tweens.FlxEase;
+import flixel.tweens.FlxTween;
+import flixel.util.FlxSpriteUtil;
+import flixel.util.FlxTimer;
+import funkin.graphics.adobeanimate.FlxAtlasSprite;
+import funkin.graphics.FunkinSprite;
+import funkin.ui.freeplay.charselect.PlayableCharacter;
+import funkin.ui.MusicBeatSubState;
+import funkin.graphics.shaders.AdjustColorShader;
+import flixel.addons.display.FlxTiledSprite;
+import flixel.addons.display.FlxBackdrop;
+import funkin.PlayerSettings;
+import funkin.modding.module.Module;
+import funkin.modding.events.ScriptEvent;
+import funkin.modding.base.ScriptedMusicBeatSubState;
+import funkin.modding.base.ScriptedFlxRuntimeShader;
+import funkin.modding.base.ScriptedMusicBeatState;
+import funkin.util.ReflectUtil;
+import flixel.FlxG;
+import funkin.audio.FunkinSound;
+import funkin.util.Constants;
+import StringTools;
+import funkin.save.Save;
+import funkin.play.event.SongEvent;
+
+class PlaySoundSongEvent extends SongEvent
+{
+ public function new()
+ {
+ super('playSound');
+ }
+
+ public override function handleEvent(data) {}
+
+ public function getTitle()
+ {
+ return "Play Sound";
+ }
+
+ public function getEventSchema()
+ {
+ return
+ [
+ {
+ name: "fileName",
+ title: "File Name",
+ defaultValue: "",
+ type: "string",
+ units: ".ogg"
+ },
+ {
+ name: 'volume',
+ title: 'Volume',
+ defaultValue: 1,
+ type: "float"
+ }
+ ];
+ }
+}
\ No newline at end of file
diff --git a/assets/preload/scripts/events/SongVolumeAction.hxc b/assets/preload/scripts/events/SongVolumeAction.hxc
new file mode 100644
index 0000000..1af60a0
--- /dev/null
+++ b/assets/preload/scripts/events/SongVolumeAction.hxc
@@ -0,0 +1,95 @@
+import funkin.play.PlayState;
+import funkin.play.PauseSubState;
+import funkin.ui.debug.charting.ChartEditorState;
+import funkin.play.PlayStatePlaylist;
+import funkin.data.song.SongRegistry;
+import funkin.ui.transition.LoadingState;
+import funkin.ui.transition.StickerSubState;
+import flixel.FlxCamera;
+import flixel.math.FlxMath;
+import flixel.FlxSprite;
+import flixel.math.FlxAngle;
+import flixel.math.FlxPoint;
+import flixel.text.FlxText;
+import flixel.text.FlxTextBorderStyle;
+import flixel.tweens.FlxEase;
+import flixel.tweens.FlxTween;
+import flixel.util.FlxSpriteUtil;
+import flixel.util.FlxTimer;
+import funkin.graphics.adobeanimate.FlxAtlasSprite;
+import funkin.graphics.FunkinSprite;
+import funkin.ui.freeplay.charselect.PlayableCharacter;
+import funkin.ui.MusicBeatSubState;
+import funkin.graphics.shaders.AdjustColorShader;
+import flixel.addons.display.FlxTiledSprite;
+import flixel.addons.display.FlxBackdrop;
+import funkin.PlayerSettings;
+import funkin.modding.module.Module;
+import funkin.modding.events.ScriptEvent;
+import funkin.modding.base.ScriptedMusicBeatSubState;
+import funkin.modding.base.ScriptedFlxRuntimeShader;
+import funkin.modding.base.ScriptedMusicBeatState;
+import funkin.util.ReflectUtil;
+import flixel.FlxG;
+import funkin.audio.FunkinSound;
+import funkin.util.Constants;
+import StringTools;
+import funkin.save.Save;
+import funkin.Preferences;
+
+class SongVolumeAction extends Module
+{
+ //made by Denoohay for FNF: SPOOKY MIX
+
+ public function new()
+ {
+ super('SongVolumeAction');
+ }
+
+ function onSongRetry(event:ScriptEvent)
+ {
+ super.onSongRetry(event);
+
+ PlayState.instance.vocals.playerVolume = 1;
+ PlayState.instance.vocals.opponentVolume = 1;
+ if (FlxG.sound.music != null)
+ {
+ FlxG.sound.music.volume = 1;
+ }
+ }
+
+ function onGameOver(event:ScriptEvent):Void
+ {
+ super.onGameOver(event);
+
+ PlayState.instance.vocals.playerVolume = 1;
+ PlayState.instance.vocals.opponentVolume = 1;
+ if (FlxG.sound.music != null)
+ {
+ FlxG.sound.music.volume = 1;
+ }
+ }
+
+ public override function onSongEvent(scriptEvent:SongEventScriptEvent)
+ {
+ super.onSongEvent(scriptEvent);
+
+ if (scriptEvent.eventData.eventKind == "songVolume")
+ {
+ if (scriptEvent.eventData.value.track == 0 || scriptEvent.eventData.value.track == 3)
+ {
+ PlayState.instance.vocals.playerVolume = scriptEvent.eventData.value.volume;
+ }
+
+ if (scriptEvent.eventData.value.track == 1 || scriptEvent.eventData.value.track == 3)
+ {
+ PlayState.instance.vocals.opponentVolume = scriptEvent.eventData.value.volume;
+ }
+
+ if (scriptEvent.eventData.value.track == 2 || scriptEvent.eventData.value.track == 3)
+ {
+ FlxG.sound.music.volume = scriptEvent.eventData.value.volume;
+ }
+ }
+ }
+}
diff --git a/assets/preload/scripts/events/SongVolumeSongEvent.hxc b/assets/preload/scripts/events/SongVolumeSongEvent.hxc
new file mode 100644
index 0000000..7916650
--- /dev/null
+++ b/assets/preload/scripts/events/SongVolumeSongEvent.hxc
@@ -0,0 +1,71 @@
+import funkin.play.PlayState;
+import funkin.play.PlayStatePlaylist;
+import funkin.data.song.SongRegistry;
+import funkin.ui.transition.LoadingState;
+import funkin.ui.transition.StickerSubState;
+import flixel.FlxCamera;
+import flixel.math.FlxMath;
+import flixel.FlxSprite;
+import flixel.math.FlxAngle;
+import flixel.math.FlxPoint;
+import flixel.text.FlxText;
+import flixel.text.FlxTextBorderStyle;
+import flixel.tweens.FlxEase;
+import flixel.tweens.FlxTween;
+import flixel.util.FlxSpriteUtil;
+import flixel.util.FlxTimer;
+import funkin.graphics.adobeanimate.FlxAtlasSprite;
+import funkin.graphics.FunkinSprite;
+import funkin.ui.freeplay.charselect.PlayableCharacter;
+import funkin.ui.MusicBeatSubState;
+import funkin.graphics.shaders.AdjustColorShader;
+import flixel.addons.display.FlxTiledSprite;
+import flixel.addons.display.FlxBackdrop;
+import funkin.PlayerSettings;
+import funkin.modding.module.Module;
+import funkin.modding.events.ScriptEvent;
+import funkin.modding.base.ScriptedMusicBeatSubState;
+import funkin.modding.base.ScriptedFlxRuntimeShader;
+import funkin.modding.base.ScriptedMusicBeatState;
+import funkin.util.ReflectUtil;
+import flixel.FlxG;
+import funkin.audio.FunkinSound;
+import funkin.util.Constants;
+import StringTools;
+import funkin.save.Save;
+import funkin.play.event.SongEvent;
+
+class SongVolumeSongEvent extends SongEvent
+{
+ public function new()
+ {
+ super('songVolume');
+ }
+
+ public override function handleEvent(data) {}
+
+ public function getTitle()
+ {
+ return "Set Song Volume";
+ }
+
+ public function getEventSchema()
+ {
+ return
+ [
+ {
+ name: "track",
+ title: "Track",
+ defaultValue: 0,
+ type: "enum",
+ keys: ["Player Voice" => 0, "Opponent Voice" => 1, "Instrumental" => 2, "All Tracks" => 3]
+ },
+ {
+ name: 'volume',
+ title: 'Volume',
+ defaultValue: 1,
+ type: "float"
+ }
+ ];
+ }
+}
\ No newline at end of file
diff --git a/assets/shared/images/characters/Pump_Opponent-dark.png b/assets/shared/images/characters/Pump_Opponent-dark.png
index ab5d62a..1a676ff 100644
Binary files a/assets/shared/images/characters/Pump_Opponent-dark.png and b/assets/shared/images/characters/Pump_Opponent-dark.png differ
diff --git a/assets/shared/images/characters/Pump_Opponent.png b/assets/shared/images/characters/Pump_Opponent.png
index d2c8135..d0957ea 100644
Binary files a/assets/shared/images/characters/Pump_Opponent.png and b/assets/shared/images/characters/Pump_Opponent.png differ
diff --git a/assets/shared/images/characters/Pump_Playable-dark.png b/assets/shared/images/characters/Pump_Playable-dark.png
index 74c40c8..ae39c6c 100644
Binary files a/assets/shared/images/characters/Pump_Playable-dark.png and b/assets/shared/images/characters/Pump_Playable-dark.png differ
diff --git a/assets/shared/images/characters/Pump_Playable.png b/assets/shared/images/characters/Pump_Playable.png
index f46d09b..0bc6e69 100644
Binary files a/assets/shared/images/characters/Pump_Playable.png and b/assets/shared/images/characters/Pump_Playable.png differ
diff --git a/assets/shared/images/characters/Skid_Opponent-dark.png b/assets/shared/images/characters/Skid_Opponent-dark.png
index 997e95a..c31291b 100644
Binary files a/assets/shared/images/characters/Skid_Opponent-dark.png and b/assets/shared/images/characters/Skid_Opponent-dark.png differ
diff --git a/assets/shared/images/characters/Skid_Opponent-dark.xml b/assets/shared/images/characters/Skid_Opponent-dark.xml
index 9e00281..21652e0 100644
--- a/assets/shared/images/characters/Skid_Opponent-dark.xml
+++ b/assets/shared/images/characters/Skid_Opponent-dark.xml
@@ -34,22 +34,22 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -66,36 +66,36 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/shared/images/characters/Skid_Opponent.png b/assets/shared/images/characters/Skid_Opponent.png
index 33837b2..2c20f82 100644
Binary files a/assets/shared/images/characters/Skid_Opponent.png and b/assets/shared/images/characters/Skid_Opponent.png differ
diff --git a/assets/shared/images/characters/Skid_Opponent.xml b/assets/shared/images/characters/Skid_Opponent.xml
index 442c308..863a708 100644
--- a/assets/shared/images/characters/Skid_Opponent.xml
+++ b/assets/shared/images/characters/Skid_Opponent.xml
@@ -34,22 +34,22 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -66,36 +66,36 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/shared/images/characters/Skid_Playable-dark.png b/assets/shared/images/characters/Skid_Playable-dark.png
index 5f3fda4..eda6629 100644
Binary files a/assets/shared/images/characters/Skid_Playable-dark.png and b/assets/shared/images/characters/Skid_Playable-dark.png differ
diff --git a/assets/shared/images/characters/Skid_Playable-dark.xml b/assets/shared/images/characters/Skid_Playable-dark.xml
index b0edabd..50d58c1 100644
--- a/assets/shared/images/characters/Skid_Playable-dark.xml
+++ b/assets/shared/images/characters/Skid_Playable-dark.xml
@@ -34,22 +34,22 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -68,98 +68,98 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/shared/images/characters/Skid_Playable.png b/assets/shared/images/characters/Skid_Playable.png
index fec0678..42442d5 100644
Binary files a/assets/shared/images/characters/Skid_Playable.png and b/assets/shared/images/characters/Skid_Playable.png differ
diff --git a/assets/shared/images/characters/Skid_Playable.xml b/assets/shared/images/characters/Skid_Playable.xml
index 521f14a..dbcc43a 100644
--- a/assets/shared/images/characters/Skid_Playable.xml
+++ b/assets/shared/images/characters/Skid_Playable.xml
@@ -34,22 +34,22 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -68,98 +68,98 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/shared/images/characters/scarydaddy.png b/assets/shared/images/characters/scarydaddy.png
index 3ee8ab6..0fbd5ca 100644
Binary files a/assets/shared/images/characters/scarydaddy.png and b/assets/shared/images/characters/scarydaddy.png differ
diff --git a/source/funkin/play/Countdown.hx b/source/funkin/play/Countdown.hx
index 8891950..94a7548 100644
--- a/source/funkin/play/Countdown.hx
+++ b/source/funkin/play/Countdown.hx
@@ -248,12 +248,6 @@ class Countdown
var offsets = noteStyle.getCountdownSpriteOffsets(index);
countdownSprite.x += offsets[0];
countdownSprite.y += offsets[1];
-
-
- if (PlayState.instance.coverscreenW.alpha != 0)
- countdownSprite.alpha = 1 - PlayState.instance.coverscreenW.alpha;
- else if (PlayState.instance.coverscreen.alpha != 0)
- countdownSprite.alpha = 1 - PlayState.instance.coverscreen.alpha;
}
/**
diff --git a/source/funkin/play/PauseSubState.hx b/source/funkin/play/PauseSubState.hx
index 7415d25..b9175e8 100644
--- a/source/funkin/play/PauseSubState.hx
+++ b/source/funkin/play/PauseSubState.hx
@@ -297,11 +297,11 @@ class PauseSubState extends MusicBeatSubState
if (PlayState.instance?.currentChart != null)
{
//this is all stupid coding but it works for showing ??? when you first play monster's songs
- if (Save.instance.hasBeatenSong('monster', ['easy-spooky', 'normal-spooky', 'hard-spooky']) == false && PlayState.instance.currentChart.songName == 'Monster (Spooky Mix)' && (PlayState.instance.coverscreen.alpha != 0 && PlayState.instance.songScore == 0))
+ if (Save.instance.hasBeatenSong('monster', ['easy-spooky', 'normal-spooky', 'hard-spooky']) == false && PlayState.instance.currentChart.songName == 'Monster (Spooky Mix)' && (PlayState.instance.camHUD.alpha != 1 && PlayState.instance.songScore == 0))
{
metadataSong.text = '???';
}
- else if (Save.instance.hasBeatenSong('winter-horrorland', ['easy-spooky', 'normal-spooky', 'hard-spooky']) == false && PlayState.instance.currentChart.songName == 'Winter Horrorland (Spooky Mix)' && (PlayState.instance.coverscreen.alpha != 0 && PlayState.instance.songScore == 0))
+ else if (Save.instance.hasBeatenSong('winter-horrorland', ['easy-spooky', 'normal-spooky', 'hard-spooky']) == false && PlayState.instance.currentChart.songName == 'Winter Horrorland (Spooky Mix)' && (PlayState.instance.camHUD.alpha != 1 && PlayState.instance.songScore == 0))
{
metadataSong.text = '???';
}
@@ -326,7 +326,7 @@ class PauseSubState extends MusicBeatSubState
metadataModArt.setFormat(Paths.font('vcr.ttf'), 32, FlxColor.WHITE, FlxTextAlign.RIGHT);
if (PlayState.instance?.currentChart != null)
{
- metadataModArt.text = 'Mod Artist: ${PlayState.instance.currentChart.modArt}';
+ metadataModArt.text = 'Artwork: ${PlayState.instance.currentChart.modArt}';
}
metadataModArt.scrollFactor.set(0, 0);
metadata.add(metadataModArt);
@@ -601,8 +601,6 @@ class PauseSubState extends MusicBeatSubState
*/
static function resume(state:PauseSubState):Void
{
- if (PlayState.instance.fadeInTween != null) PlayState.instance.fadeInTween.active = true;
-
// Resume a paused video if it exists.
VideoCutscene.resumeVideo();
diff --git a/source/funkin/play/PlayState.hx b/source/funkin/play/PlayState.hx
index 647b108..b5eb7d9 100644
--- a/source/funkin/play/PlayState.hx
+++ b/source/funkin/play/PlayState.hx
@@ -56,6 +56,7 @@ import funkin.play.scoring.Scoring;
import funkin.play.song.Song;
import funkin.play.stage.Stage;
import funkin.save.Save;
+import funkin.ui.debug.latency.LatencyState;
import funkin.ui.debug.charting.ChartEditorState;
import funkin.ui.debug.stage.StageOffsetSubState;
import funkin.ui.mainmenu.MainMenuState;
@@ -251,8 +252,6 @@ class PlayState extends MusicBeatSubState
*/
public var scrollSpeedTweens:Array = [];
- public var fadeInTween:FlxTween;
-
public var theMidPointX:Float = 0;
public var theMidPointY:Float = 0;
@@ -457,14 +456,6 @@ class PlayState extends MusicBeatSubState
var discordRPCAlbum:String = '';
var discordRPCIcon:String = '';
#end
-
- //uhhh black and white rectangles that cover the whole screen
- public var coverscreen:FlxSprite;
- public var coverscreenW:FlxSprite;
-
- //Subtitle text lol
- public var subtitleText:FlxText;
- public var subtitleTextOVER:FlxText;
/**
* RENDER OBJECTS
@@ -511,11 +502,6 @@ class PlayState extends MusicBeatSubState
*/
public var camHUD:FlxCamera;
- /**
- * The camera which contains, and controls visibility of, the user interface elements.
- */
- public var camCover:FlxCamera;
-
/**
* The camera which contains, and controls visibility of, the stage and characters.
*/
@@ -653,6 +639,8 @@ class PlayState extends MusicBeatSubState
*/
public override function create():Void
{
+ LatencyState.inLatencyState = false;
+
if (instance != null)
{
// TODO: Do something in this case? IDK.
@@ -778,39 +766,6 @@ class PlayState extends MusicBeatSubState
FlxG.console.registerObject('playState', this);
#end
- coverscreen = new FlxSprite(-100, -100).makeGraphic(FlxG.width * 2, FlxG.height * 2, FlxColor.BLACK);
- coverscreen.zIndex = 1100;
- if ((currentSong?.id ?? '').toLowerCase() == 'monster' || (currentSong?.id ?? '').toLowerCase() == 'winter-horrorland' )
- {
- coverscreen.alpha = 1;
- }
- else
- {
- coverscreen.alpha = 0;
- }
- coverscreen.cameras = [camCover];
- add(coverscreen);
-
- coverscreenW = new FlxSprite(-100, -100).makeGraphic(FlxG.width * 2, FlxG.height * 2, FlxColor.WHITE);
- coverscreenW.zIndex = 1100;
- coverscreenW.alpha = 0;
- coverscreenW.cameras = [camCover];
- add(coverscreenW);
-
- subtitleTextOVER = new FlxText(0, 540, FlxG.width, "");
- subtitleTextOVER.setFormat(Paths.font("vcr.ttf"), 32, FlxColor.WHITE, CENTER, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
- subtitleTextOVER.borderSize = 1.25;
- subtitleTextOVER.zIndex = 3000;
- subtitleTextOVER.cameras = [camCover];
- add(subtitleTextOVER);
-
- subtitleText = new FlxText(0, 540, FlxG.width, "");
- subtitleText.setFormat(Paths.font("vcr.ttf"), 32, FlxColor.WHITE, CENTER, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
- subtitleText.borderSize = 1.25;
- subtitleText.zIndex = 850;
- subtitleText.cameras = [camHUD];
- add(subtitleText);
-
initialized = true;
// This step ensures z-indexes are applied properly,
@@ -897,8 +852,6 @@ class PlayState extends MusicBeatSubState
// Handle restarting the song when needed (player death or pressing Retry)
if (needsReset)
{
- if (fadeInTween != null) fadeInTween.active = true;
-
if (!assertChartExists()) return;
prevScrollTargets = [];
@@ -1047,8 +1000,6 @@ class PlayState extends MusicBeatSubState
boyfriendPos = currentStage.getBoyfriend().getScreenPosition();
}
- if (fadeInTween != null) fadeInTween.active = false;
-
var pauseSubState:FlxSubState = new PauseSubState({mode: isChartingMode ? Charting : Standard});
FlxTransitionableState.skipNextTransIn = true;
@@ -1099,7 +1050,7 @@ class PlayState extends MusicBeatSubState
if (!isInCutscene && !disableKeys)
{
// RESET = Quick Game Over Screen
- if (controls.RESET && coverscreen.alpha == 0 && camHUD.alpha == 1)
+ if (controls.RESET && camHUD.alpha == 1)
{
health = Constants.HEALTH_MIN;
trace('RESET = True');
@@ -1506,27 +1457,6 @@ class PlayState extends MusicBeatSubState
//PUT THE HARDCODED IN MID-SONG EVENTS Events events DOWN HERE
/*
- if ((currentSong?.id ?? '').toLowerCase() == 'test')
- {
- switch (Conductor.instance.currentStep)
- {
- case 0:
- coverscreenW.alpha = 1;
- coverscreen.alpha = 1;
- case 12:
- FlxTween.tween(coverscreenW, {alpha: 0}, 1, {ease: FlxEase.quadInOut});
- case 20:
- FlxTween.tween(coverscreen, {alpha: 0}, 1, {ease: FlxEase.quadInOut});
- case 50:
- subtitleText.text = "poop poop sigma test";
- case 60:
- subtitleText.text = "test 2 lol";
- case 65:
- subtitleText.text = "";
- }
-
- }
-
if ((currentSong?.id ?? '').toLowerCase() == 'bopeebo')
{
switch (Conductor.instance.currentStep)
@@ -1568,11 +1498,6 @@ class PlayState extends MusicBeatSubState
case 0:
FreeplayState.switchToMonsterSong = '';
Save.instance.addMonsterTranitionsSeen('monster');
- coverscreen.alpha = 1;
- fadeInTween.cancel();
- fadeInTween = FlxTween.tween(coverscreen, {alpha: 1}, 0);
- fadeInTween.cancel();
- coverscreen.alpha = 1;
camHUD.alpha = 0;
case 2:
FreeplayState.switchToMonsterSong = '';
@@ -1591,8 +1516,6 @@ class PlayState extends MusicBeatSubState
camHUD.alpha = 1;
case 156:
camHUD.alpha = 1;
- case 196:
- coverscreen.alpha = 0;
}
}
@@ -1618,10 +1541,6 @@ class PlayState extends MusicBeatSubState
case 0:
FreeplayState.switchToMonsterSong = '';
Save.instance.addMonsterTranitionsSeen('winter-horrorland');
- fadeInTween.cancel();
- fadeInTween = FlxTween.tween(coverscreen, {alpha: 1}, 0);
- fadeInTween.cancel();
- coverscreen.alpha = 1;
camHUD.alpha = 0;
case 1:
FreeplayState.switchToMonsterSong = '';
@@ -1632,11 +1551,8 @@ class PlayState extends MusicBeatSubState
case 3:
FreeplayState.switchToMonsterSong = '';
camHUD.alpha = 0;
- case 160:
- coverscreen.alpha = 0;
case 227:
camHUD.alpha = 1;
- coverscreen.alpha = 0;
}
}
@@ -1777,14 +1693,11 @@ class PlayState extends MusicBeatSubState
camGame.bgColor = BACKGROUND_COLOR; // Show a pink background behind the stage.
camHUD = new FlxCamera();
camHUD.bgColor.alpha = 0; // Show the game scene behind the camera.
- camCover = new FlxCamera();
- camCover.bgColor.alpha = 0; // Show the game scene behind the camera.
camCutscene = new FlxCamera();
camCutscene.bgColor.alpha = 0; // Show the game scene behind the camera.
FlxG.cameras.reset(camGame);
FlxG.cameras.add(camHUD, false);
- FlxG.cameras.add(camCover, false);
FlxG.cameras.add(camCutscene, false);
// Configure camera follow point.
@@ -2800,7 +2713,7 @@ class PlayState extends MusicBeatSubState
*/
function onNoteMiss(note:NoteSprite, playSound:Bool = false, healthChange:Float):Void
{
- if (coverscreen.alpha == 0 && camHUD.alpha == 1)
+ if (camHUD.alpha == 1)
{
// If we are here, we already CALLED the onNoteMiss script hook!
@@ -2869,7 +2782,7 @@ class PlayState extends MusicBeatSubState
*/
function ghostNoteMiss(direction:NoteDirection, hasPossibleNotes:Bool = true):Void
{
- if (coverscreen.alpha == 0 && camHUD.alpha == 1)
+ if (camHUD.alpha == 1)
{
var event:GhostMissNoteScriptEvent = new GhostMissNoteScriptEvent(direction, // Direction missed in.
hasPossibleNotes, // Whether there was a note you could have hit.
@@ -2988,7 +2901,7 @@ class PlayState extends MusicBeatSubState
#end
// 9: Toggle the old icon.
- //if (FlxG.keys.justPressed.NINE) iconP1.toggleOldIcon();
+ if (FlxG.keys.justPressed.NINE) iconP1.toggleOldIcon();
#if FEATURE_DEBUG_FUNCTIONS
// PAGEUP: Skip forward two sections.
@@ -3050,7 +2963,7 @@ class PlayState extends MusicBeatSubState
}
if (combo == null) combo = Highscore.tallies.combo;
- if (!isPracticeMode && coverscreen.alpha == 0 && camHUD.alpha == 1)
+ if (!isPracticeMode && camHUD.alpha == 1)
{
// TODO: Input splitter uses old input system, make it pull from the precise input queue directly.
var pressArray:Array = [
diff --git a/source/funkin/play/components/HealthIcon.hx b/source/funkin/play/components/HealthIcon.hx
index f643045..88c2ed6 100644
--- a/source/funkin/play/components/HealthIcon.hx
+++ b/source/funkin/play/components/HealthIcon.hx
@@ -151,16 +151,32 @@ class HealthIcon extends FunkinSprite
*/
public function toggleOldIcon():Void
{
- if (characterId == 'bf-old')
+ if (isPixel == false)
{
- isPixel = PlayState.instance.currentStage.getBoyfriend().isPixel;
- PlayState.instance.currentStage.getBoyfriend().initHealthIcon(false);
- }
- else
- {
- characterId = 'bf-old';
- isPixel = false;
- loadCharacter(characterId);
+ if (characterId.startsWith('spooky-flipped'))
+ {
+ if (characterId == 'spooky-flipped-old')
+ {
+ PlayState.instance.currentStage.getBoyfriend().initHealthIcon(false);
+ }
+ else
+ {
+ characterId = 'spooky-flipped-old';
+ loadCharacter(characterId);
+ }
+ }
+ else
+ {
+ if (characterId == 'spooky-old')
+ {
+ PlayState.instance.currentStage.getBoyfriend().initHealthIcon(false);
+ }
+ else
+ {
+ characterId = 'spooky-old';
+ loadCharacter(characterId);
+ }
+ }
}
lerpIconSize(true);
diff --git a/source/funkin/play/event/FadeOutInSongEvent.hx b/source/funkin/play/event/FadeOutInSongEvent.hx
deleted file mode 100644
index 55f67ff..0000000
--- a/source/funkin/play/event/FadeOutInSongEvent.hx
+++ /dev/null
@@ -1,195 +0,0 @@
-package funkin.play.event;
-
-import flixel.tweens.FlxTween;
-import flixel.FlxCamera;
-import flixel.tweens.FlxEase;
-// Data from the chart
-import funkin.data.song.SongData;
-import funkin.data.song.SongData.SongEventData;
-// Data from the event schema
-import funkin.play.event.SongEvent;
-import funkin.data.event.SongEventSchema;
-import funkin.data.event.SongEventSchema.SongEventFieldType;
-
-/**
- *
- *
- *
- * ```
- * {
- * 'e': 'FadeInOut',
- * 'v': {
- * 'inout': 0,
- * 'object': 0,
- * 'seconds': 0,
- * }
- * }
- * ```
- *
- * Example: Reset to default values.
- * ```
- * {
- * 'e': 'FadeInOut',
- * 'v': {}
- * }
- * ```
- */
-class FadeInOutSongEvent extends SongEvent
-{
- public function new()
- {
- super('FadeInOut');
- }
-
- public override function handleEvent(data:SongEventData):Void
- {
- // Does nothing if there is no PlayState camera or stage.
- if (PlayState.instance == null) return;
-
- var seconds:Null = data.getFloat('seconds');
- if (seconds == null) seconds = 0;
-
- var object:Null = data.getInt('object');
- if (object == null) object = 0;
-
- var inout:Null = data.getInt('inout');
- if (inout == null) inout = 0;
-
- if (inout == 1) //fade out
- {
- if (object == 1)
- {
- if (seconds != 0)
- {
- PlayState.instance.fadeInTween = FlxTween.tween(PlayState.instance.camHUD, {alpha: 0}, seconds);
- }
- else
- {
- PlayState.instance.camHUD.alpha = 0;
- }
- }
- else if (object == 2)
- {
- if (seconds != 0)
- {
- if (PlayState.instance.subtitleTextOVER.text != "")
- {
- PlayState.instance.fadeInTween = FlxTween.tween(PlayState.instance.subtitleTextOVER, {alpha: 0}, seconds);
- }
- else
- {
- PlayState.instance.fadeInTween = FlxTween.tween(PlayState.instance.subtitleText, {alpha: 0}, seconds);
- }
- }
- else
- {
- PlayState.instance.subtitleText.alpha = 0;
- PlayState.instance.subtitleTextOVER.alpha = 0;
- }
- }
- else
- {
- if (seconds != 0)
- {
- PlayState.instance.fadeInTween = FlxTween.tween(PlayState.instance.coverscreen, {alpha: 0}, seconds);
- }
- else
- {
- PlayState.instance.coverscreen.alpha = 0;
- }
- }
- }
- else //fade in
- {
- if (object == 1)
- {
- if (seconds != 0)
- {
- PlayState.instance.fadeInTween = FlxTween.tween(PlayState.instance.camHUD, {alpha: 1}, seconds);
- }
- else
- {
- PlayState.instance.camHUD.alpha = 1;
- }
- }
- else if (object == 2)
- {
- if (seconds != 0)
- {
- if (PlayState.instance.subtitleTextOVER.text != "")
- {
- PlayState.instance.fadeInTween = FlxTween.tween(PlayState.instance.subtitleTextOVER, {alpha: 1}, seconds);
- }
- else
- {
- PlayState.instance.fadeInTween = FlxTween.tween(PlayState.instance.subtitleText, {alpha: 1}, seconds);
- }
- }
- else
- {
- PlayState.instance.subtitleText.alpha = 1;
- PlayState.instance.subtitleTextOVER.alpha = 1;
- }
- }
- else
- {
- if (seconds != 0)
- {
- PlayState.instance.fadeInTween = FlxTween.tween(PlayState.instance.coverscreen, {alpha: 1}, seconds);
- }
- else
- {
- PlayState.instance.coverscreen.alpha = 1;
- }
- }
- }
- }
-
- public override function getTitle():String
- {
- return 'Fade In/Out';
- }
-
- public override function getIconPath():String
- {
- return 'ui/chart-editor/events/FadeInOut';
- }
-
- /**
- * ```
- * {
- * 'inout': ENUM, // Object
- * 'object': ENUM, // Object
- * 'seconds': FLOAT, // Seconds
- * }
- * ```
- * @return SongEventSchema
- */
- public override function getEventSchema():SongEventSchema
- {
- return new SongEventSchema([
- {
- name: "inout",
- title: "Fade",
- defaultValue: 0,
- type: SongEventFieldType.ENUM,
- keys: ["In" => 0, "Out" => 1]
- },
- {
- name: "object",
- title: "Object",
- defaultValue: 0,
- type: SongEventFieldType.ENUM,
- keys: ["Black Screen" => 0, "UI" => 1, "Subtitles" => 2]
- },
- {
- name: 'seconds',
- title: 'Duration',
- defaultValue: 0,
- step: 0.1,
- type: SongEventFieldType.FLOAT,
- units: 'seconds'
- }
- ]);
- }
-}
diff --git a/source/funkin/play/event/LyricsSongEvent.hx b/source/funkin/play/event/LyricsSongEvent.hx
deleted file mode 100644
index f298648..0000000
--- a/source/funkin/play/event/LyricsSongEvent.hx
+++ /dev/null
@@ -1,109 +0,0 @@
-package funkin.play.event;
-
-import flixel.tweens.FlxTween;
-import flixel.FlxCamera;
-import flixel.tweens.FlxEase;
-// Data from the chart
-import funkin.data.song.SongData;
-import funkin.data.song.SongData.SongEventData;
-// Data from the event schema
-import funkin.play.event.SongEvent;
-import funkin.data.event.SongEventSchema;
-import funkin.data.event.SongEventSchema.SongEventFieldType;
-import flixel.util.FlxColor;
-
-/**
- *
- *
- *
- * ```
- * {
- * 'e': 'Lyrics',
- * 'v': {
- * 'layering': 0,
- * 'lyric': "",
- * }
- * }
- * ```
- *
- * Example: Reset to default values.
- * ```
- * {
- * 'e': 'Lyrics',
- * 'v': {}
- * }
- * ```
- */
-class LyricsSongEvent extends SongEvent
-{
- //Subtitle text lol
-
- public function new()
- {
- super('Lyrics');
- }
-
- public override function handleEvent(data:SongEventData):Void
- {
- // Does nothing if there is no PlayState camera or stage.
- if (PlayState.instance == null) return;
-
- var lyric:Null = data.getString('lyric');
- if (lyric == null) lyric = "";
-
- var layering:Null = data.getInt('layering');
- if (layering == null) layering = 0;
-
- if (layering == 1)
- {
- PlayState.instance.subtitleTextOVER.text = Constants.DEFAULT_LYRIC + lyric;
- PlayState.instance.subtitleText.text = "";
- }
- else
- {
- PlayState.instance.subtitleText.text = Constants.DEFAULT_LYRIC + lyric;
- PlayState.instance.subtitleTextOVER.text = "";
- }
-
- }
-
- public override function getTitle():String
- {
- return 'Lyrics';
- }
-
- public override function getIconPath():String
- {
- return 'ui/chart-editor/events/Lyrics';
- }
-
- /**
- * ```
- * {
- * 'layering': ENUM, // Layering
- * 'lyric': STRING, // Lyric
- * }
- * ```
- * @return SongEventSchema
- */
- public override function getEventSchema():SongEventSchema
- {
- return new SongEventSchema([
- {
- name: "layering",
- title: "Layering",
- defaultValue: 0,
- type: SongEventFieldType.ENUM,
- keys: ["Under UI (Default)" => 0, "Above Everything" => 1]
- },
- {
- name: 'lyric',
- title: 'Lyric',
- defaultValue: "",
- step: 0.1,
- type: SongEventFieldType.STRING,
- units: ''
- }
- ]);
- }
-}
diff --git a/source/funkin/play/event/SongVolumeSongEvent.hx b/source/funkin/play/event/SongVolumeSongEvent.hx
deleted file mode 100644
index a89c9b5..0000000
--- a/source/funkin/play/event/SongVolumeSongEvent.hx
+++ /dev/null
@@ -1,109 +0,0 @@
-package funkin.play.event;
-
-import flixel.tweens.FlxTween;
-import flixel.FlxCamera;
-import flixel.tweens.FlxEase;
-// Data from the chart
-import funkin.data.song.SongData;
-import funkin.data.song.SongData.SongEventData;
-// Data from the event schema
-import funkin.play.event.SongEvent;
-import funkin.data.event.SongEventSchema;
-import funkin.data.event.SongEventSchema.SongEventFieldType;
-
-/**
- *
- *
- *
- * ```
- * {
- * 'e': 'songVolume',
- * 'v': {
- * 'track': 0,
- * 'volume': 0,
- * }
- * }
- * ```
- *
- * Example: Reset to default values.
- * ```
- * {
- * 'e': 'songVolume',
- * 'v': {}
- * }
- * ```
- */
-class SongVolumeSongEvent extends SongEvent
-{
- public function new()
- {
- super('songVolume');
- }
-
- public override function handleEvent(data:SongEventData):Void
- {
- // Does nothing if there is no PlayState camera or stage.
- if (PlayState.instance == null) return;
-
- var track:Null = data.getInt('track');
- if (track == null) track = 0;
-
- var volume:Null = data.getFloat('volume');
- if (volume == null) volume = 1;
-
- if (track == 0 || track == 3)
- {
- PlayState.instance.vocals.playerVolume = volume;
- }
-
- if (track == 1 || track == 3)
- {
- PlayState.instance.vocals.opponentVolume = volume;
- }
-
- if (track == 2 || track == 3)
- {
- FlxG.sound.music.volume = volume;
- }
- }
-
- public override function getTitle():String
- {
- return 'Set Song Volume';
- }
-
- public override function getIconPath():String
- {
- return 'ui/chart-editor/events/songVolume';
- }
-
- /**
- * ```
- * {
- * 'track': ENUM, // Track
- * 'volume': FLOAT, // Volume
- * }
- * ```
- * @return SongEventSchema
- */
- public override function getEventSchema():SongEventSchema
- {
- return new SongEventSchema([
- {
- name: "track",
- title: "Track",
- defaultValue: 0,
- type: SongEventFieldType.ENUM,
- keys: ["Player Voice" => 0, "Opponent Voice" => 1, "Instrumental" => 2, "All Tracks" => 3]
- },
- {
- name: 'volume',
- title: 'Volume',
- defaultValue: 1,
- step: 0.1,
- type: SongEventFieldType.FLOAT,
- units: ''
- }
- ]);
- }
-}
diff --git a/source/funkin/play/notes/Strumline.hx b/source/funkin/play/notes/Strumline.hx
index 8f8629e..5fa0fe0 100644
--- a/source/funkin/play/notes/Strumline.hx
+++ b/source/funkin/play/notes/Strumline.hx
@@ -13,6 +13,7 @@ import funkin.play.notes.NoteSplash;
import funkin.play.notes.NoteSprite;
import funkin.play.notes.SustainTrail;
import funkin.data.song.SongData.SongNoteData;
+import funkin.ui.debug.latency.LatencyState;
import funkin.ui.options.PreferencesMenu;
import funkin.util.SortUtil;
import funkin.modding.events.ScriptEvent;
@@ -688,7 +689,11 @@ class Strumline extends FlxSpriteGroup
public function playPress(direction:NoteDirection):Void
{
- if (PlayState.instance.camHUD.alpha == 1)
+ if (LatencyState.inLatencyState == true)
+ {
+ getByDirection(direction).playPress();
+ }
+ else if (PlayState.instance.camHUD.alpha == 1)
{
getByDirection(direction).playPress();
}
diff --git a/source/funkin/play/scoring/Scoring.hx b/source/funkin/play/scoring/Scoring.hx
index bac659a..bead1d0 100644
--- a/source/funkin/play/scoring/Scoring.hx
+++ b/source/funkin/play/scoring/Scoring.hx
@@ -481,18 +481,17 @@ enum abstract ScoringRank(String)
switch (abstract)
{
case PERFECT_GOLD | PERFECT:
- // return 2.5;
- return 95 / 24;
+ return 0;
case EXCELLENT:
- return 95 / 24;
+ return 0;
case GREAT:
- return 95 / 24;
+ return 0;
case GOOD:
- return 95 / 24;
+ return 0;
case SHIT:
return 2 / 24;
default:
- return 3.5;
+ return 0;
}
}
diff --git a/source/funkin/ui/PixelatedIcon.hx b/source/funkin/ui/PixelatedIcon.hx
index c604a56..25408d0 100644
--- a/source/funkin/ui/PixelatedIcon.hx
+++ b/source/funkin/ui/PixelatedIcon.hx
@@ -75,9 +75,6 @@ class PixelatedIcon extends FlxFilteredSprite
{
case 'parents-christmas':
this.origin.x = 140;
- case 'moloch':
- this.origin.x = 110;
- this.origin.y = this.origin.y + 10;
default:
this.origin.x = 100;
}
@@ -86,17 +83,9 @@ class PixelatedIcon extends FlxFilteredSprite
{
this.active = true;
- switch (char)
- {
- case 'moloch':
- this.animation.addByPrefix('idle', 'idle0', 20, true);
- this.animation.addByPrefix('confirm', 'confirm0', 20, false);
- this.animation.addByPrefix('confirm-hold', 'confirm-hold0', 20, true);
- default:
- this.animation.addByPrefix('idle', 'idle0', 10, true);
- this.animation.addByPrefix('confirm', 'confirm0', 10, false);
- this.animation.addByPrefix('confirm-hold', 'confirm-hold0', 10, true);
- }
+ this.animation.addByPrefix('idle', 'idle0', 10, true);
+ this.animation.addByPrefix('confirm', 'confirm0', 10, false);
+ this.animation.addByPrefix('confirm-hold', 'confirm-hold0', 10, true);
this.animation.finishCallback = function(name:String):Void {
trace('Finish pixel animation: ${name}');
diff --git a/source/funkin/ui/debug/latency/LatencyState.hx b/source/funkin/ui/debug/latency/LatencyState.hx
index 6359565..c243036 100644
--- a/source/funkin/ui/debug/latency/LatencyState.hx
+++ b/source/funkin/ui/debug/latency/LatencyState.hx
@@ -1,3 +1,4 @@
+
package funkin.ui.debug.latency;
import funkin.data.notestyle.NoteStyleRegistry;
@@ -46,6 +47,8 @@ class LatencyState extends MusicBeatSubState
var stateCamera:FlxCamera;
+ public static var inLatencyState:Bool = true;
+
/**
* A local conductor instance for this testing class, in-case we are in a PlayState
* because I'm too lazy to set the old variables for conductor stuff !
@@ -61,6 +64,8 @@ class LatencyState extends MusicBeatSubState
{
super.create();
+ inLatencyState = true;
+
prevPersistentDraw = FlxG.state.persistentDraw;
prevPersistentUpdate = FlxG.state.persistentUpdate;
@@ -199,7 +204,11 @@ class LatencyState extends MusicBeatSubState
PreciseInputManager.instance.onInputPressed.remove(preciseInputPressed);
PreciseInputManager.instance.onInputReleased.remove(preciseInputReleased);
- FlxG.sound.music.volume = previousVolume;
+ if (FlxG.sound.music != null)
+ {
+ FlxG.sound.music.volume = previousVolume;
+ }
+
swagSong.stop();
FlxG.sound.list.remove(swagSong);
@@ -319,6 +328,7 @@ class LatencyState extends MusicBeatSubState
{
// close();
cleanup();
+ inLatencyState = false;
FlxG.switchState(() -> new MainMenuState());
}
diff --git a/source/funkin/ui/freeplay/FreeplayState.hx b/source/funkin/ui/freeplay/FreeplayState.hx
index bf99179..4e1d057 100644
--- a/source/funkin/ui/freeplay/FreeplayState.hx
+++ b/source/funkin/ui/freeplay/FreeplayState.hx
@@ -799,7 +799,6 @@ class FreeplayState extends MusicBeatSubState
{
FlxG.sound.music.volume = 0;
FlxG.sound.music.stop();
- //coverscreen.alpha = 1;
funnyCam.alpha = 0;
rankCamera.alpha = 0;
busy = true;
@@ -2339,20 +2338,12 @@ class FreeplayState extends MusicBeatSubState
if (previewSongId == 'tutorial')
{
- FunkinSound.playMusic(previewSongId,
+ FunkinSound.playMusic('tutorialInstPreview',
{
startingVolume: 0.0,
overrideExisting: true,
restartTrack: false,
- mapTimeChanges: false, // The music metadata is not alongside the audio file so this won't work.
- pathsFunction: INST,
- suffix: instSuffix,
- partialParams:
- {
- loadPartial: true,
- start: 0,
- end: 0.065
- },
+ mapTimeChanges: false,
onLoad: function() {
if (switchToMonsterSong != '')
{
diff --git a/source/funkin/ui/mainmenu/MainMenuState.hx b/source/funkin/ui/mainmenu/MainMenuState.hx
index 330a77a..887bf32 100644
--- a/source/funkin/ui/mainmenu/MainMenuState.hx
+++ b/source/funkin/ui/mainmenu/MainMenuState.hx
@@ -169,7 +169,7 @@ class MainMenuState extends MusicBeatState
super.create();
// This has to come AFTER!
- this.leftWatermarkText.text = "FUNKIN' " + Constants.VERSION + " - SPOOKY MIX v1.0.1";
+ this.leftWatermarkText.text = "FUNKIN' " + Constants.VERSION + " - SPOOKY MIX v1.0.2";
// this.rightWatermarkText.text = "blablabla test";
// NG.core.calls.event.logEvent('swag').send();
diff --git a/source/funkin/ui/title/TitleState.hx b/source/funkin/ui/title/TitleState.hx
index eb7fdc6..426fbbc 100644
--- a/source/funkin/ui/title/TitleState.hx
+++ b/source/funkin/ui/title/TitleState.hx
@@ -401,7 +401,7 @@ class TitleState extends MusicBeatState
case 4:
deleteCoolText();
case 5:
- createCoolText(['(Not) in association', 'with']);
+ createCoolText(['in association', 'with']);
case 7:
addMoreText('newgrounds');
if (ngSpr != null) ngSpr.visible = true;
diff --git a/source/funkin/util/Constants.hx b/source/funkin/util/Constants.hx
index 300e390..e3375ba 100644
--- a/source/funkin/util/Constants.hx
+++ b/source/funkin/util/Constants.hx
@@ -238,12 +238,6 @@ class Constants
*/
public static final DEFAULT_BOP_INTENSITY:Float = 1.015;
- public static final DEFAULT_COVERSCREEN_ALPHA:Float = 0;
-
- public static final DEFAULT_LYRIC:String = "";
-
- public static final DEFAULT_FADEIN_SECONDS:Float = 0;
-
/**
* The default rate for camera zooms (in beats per zoom).
*/