diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e9c1933..96ed63c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,39 @@ All notable changes will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [1.0] - 2020-02-15 +## [1.0] - 2021-02-15 ### Added -- Uh, everything. +* Uh, everything + +## [2.0] - 2021-04-25 +### Added: +* multi-preset naming system for modifiers +* _easter eggs_ +* some Kade Engine features +* buffed up dialogue system, everything is **customizable** with **no limits** +* _some leaks_ +* more options for you to mess with, **and I mean way more** +* a couple of new modifiers + +### Changed: +* **pretty much everything, all recoded and redesigned for a new graphical and functional style, for the most part.** + +## [2.0.1] - 2021-04-27 +### Added: +* added Ash237 to the credits +* new chart type: **Stair** - stairs for every chart +* new option: **cutscene toggle** +* new dialogue variable: interruptions +* ranks save now and can be visible both in Story Mode and Freeplay +* little cues of motivation when getting ranked + +### Changed: +* camera zoom on tutorial is way smoother +* character in Story Mode menu has been pushed up a bit +* freeze, lights Out and blinding overlays have been put on a new camera layer +* camera speed from character to character has been slowed down +* changed the way shake time, delay, flash time and delay work + +### Fixed: +* input system no longer eats inputs and is a wee bit more reminiscent of Kade Engine's input +* timing shown didn't disappear sometimes diff --git a/Project.xml b/Project.xml index 54bed210..d963a774 100644 --- a/Project.xml +++ b/Project.xml @@ -2,7 +2,7 @@ - + @@ -143,7 +143,7 @@ - + diff --git a/README.md b/README.md index a95c4711..47f11a47 100644 --- a/README.md +++ b/README.md @@ -30,10 +30,11 @@ Play the Ludum Dare prototype of the original game [here](https://ninja-muffin24

⚙️ Mod Creator:

Verwex
Verwex

🖥 Additional Programmers:

-KadeDev
KadeDeveloper
+KadeDev
KadeDeveloper


+Ash237
Ash237 (temporary link until I find his twitter account)

- +

**This mod was made with love to Friday Night Funkin' and its community. Extra love to the team behind it. 💖** diff --git a/art/Ash.png b/art/Ash.png new file mode 100644 index 00000000..b05b7fb0 Binary files /dev/null and b/art/Ash.png differ diff --git a/art/flashFiles/Cutscene1_ANIMATIC.fla b/art/flashFiles/Cutscene1_ANIMATIC.fla new file mode 100644 index 00000000..782be68f Binary files /dev/null and b/art/flashFiles/Cutscene1_ANIMATIC.fla differ diff --git a/art/flashFiles/FNF_ChartType.fla b/art/flashFiles/FNF_ChartType.fla index ebeef29c..04b24aac 100644 Binary files a/art/flashFiles/FNF_ChartType.fla and b/art/flashFiles/FNF_ChartType.fla differ diff --git a/art/flashFiles/FNF_Options_assets.fla b/art/flashFiles/FNF_Options_assets.fla index 2c14212e..8cce0e48 100644 Binary files a/art/flashFiles/FNF_Options_assets.fla and b/art/flashFiles/FNF_Options_assets.fla differ diff --git a/art/flashFiles/FNF_Rankings.fla b/art/flashFiles/FNF_Rankings.fla index 64600b32..cef8c483 100644 Binary files a/art/flashFiles/FNF_Rankings.fla and b/art/flashFiles/FNF_Rankings.fla differ diff --git a/art/flashFiles/RECOVER_FNF_ChartType.fla b/art/flashFiles/RECOVER_FNF_ChartType.fla new file mode 100644 index 00000000..04b24aac Binary files /dev/null and b/art/flashFiles/RECOVER_FNF_ChartType.fla differ diff --git a/art/flashFiles/RECOVER_FNF_Rankings.fla b/art/flashFiles/RECOVER_FNF_Rankings.fla new file mode 100644 index 00000000..cef8c483 Binary files /dev/null and b/art/flashFiles/RECOVER_FNF_Rankings.fla differ diff --git a/assets/preload/data/DIALOGUE SYSTEM TUTORIAL.txt b/assets/preload/data/DIALOGUE SYSTEM TUTORIAL.txt index f6d7e265..f8ead052 100644 --- a/assets/preload/data/DIALOGUE SYSTEM TUTORIAL.txt +++ b/assets/preload/data/DIALOGUE SYSTEM TUTORIAL.txt @@ -12,13 +12,13 @@ DIALOGUE SYSTEM TUTORIAL: == - shake amount, where your screen shakes for a duration of time. Accepted values are from zero to positive infinity, but 0.001 is the perfect base because it will shake so much when it's set to 1. -++ - shake duration, which is second based. Can be a float. +++ - To calculate this, it takes the writing speed and multiplies it by the number of characters you want it to be shake for, including spaces. So for example, if writing speed is 0.05 and the number of characters is 10, it will shake for 0.5 seconds. --- - shake delay, whenever you want it to occur at a specific moment. Should be accounted for as a latter setting to adjust. +-- - shake delay, whenever you want it to occur at a specific moment. To calculate this, it takes the writing speed and multiplies it by the number of characters you want it to be shake after, including spaces. So for example, if writing speed is 0.05 and the number of characters is 10, it will shake after 0.5 seconds. -<< - flash duration, with a whiplash sound effect coming to it. Is second based. +<< - flash duration, with a whiplash sound effect coming to it. To calculate this, it takes the writing speed and multiplies it by the number of characters you want it to flash for, including spaces. So for example, if writing speed is 0.05 and the number of characters is 10, it will flash for 0.5 seconds. ->> - flash delay, whenever you want it to occur at a specific moment. Should be accounted for as a latter setting to adjust. +>> - flash delay, whenever you want it to occur at a specific moment. To calculate this, it takes the writing speed and multiplies it by the number of characters you want it to be flash after, including spaces. So for example, if writing speed is 0.05 and the number of characters is 10, it will flash after 0.5 seconds. ;; - writing speed of the dialogue, whenever you want to make them speak more intimidatingly or something. Be wary, as it will write another character per the duration you set it to, so it's best to have it around 0.04 as a base. @@ -34,6 +34,8 @@ DIALOGUE SYSTEM TUTORIAL: .. - portrait color, for any special occasions. Can be blank, or filled in a #AARRGGBB fashion. AA - alpha, RR - red, GG - green, BB - blue, all valued in hex. +~~ - time it takes to cut to the next line of dialogue. To calculate this, it takes the writing speed and multiplies it by the number of characters you want it to be skipped after, including spaces. So for example, if writing speed is 0.05 and the number of characters is 10, it will skip to the next dialogue after 0.5 seconds. + DEFAULT VALUES: ]32] *100* @@ -46,6 +48,7 @@ DEFAULT VALUES: !#FF3F2021! ?FFD89494? .. +~~ diff --git a/assets/preload/data/roses/dialogue-depressed.txt b/assets/preload/data/roses/dialogue-depressed.txt index aeb6bba7..d47d4c62 100644 --- a/assets/preload/data/roses/dialogue-depressed.txt +++ b/assets/preload/data/roses/dialogue-depressed.txt @@ -1,5 +1,5 @@ [178[ [179[ [223[ [216[ |Lunchbox| *0* =1= #pixel_mad# <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ -:bf-pixel: !crying! [Pixel Arial 11 Bold[ ]48] *0* =0= +0+ -0- <0< >0> ;1; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ... -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]16] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Keep your cool. We're dealing with someone who is pretty much depressed. -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]12] *0* =0= +0+ -0- <0< >0> ;0.08; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Keep. It. Together, Senpai. -:bf-pixel: !crying! [Pixel Arial 11 Bold[ ]48] *0* =0= +0+ -0- <0< >0> ;1; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ... \ No newline at end of file +:bf-pixel: !crying! [Pixel Arial 11 Bold[ ]48] *0* =0= +0+ -0- <0< >0> ;1; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ ... +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]16] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Keep your cool. We're dealing with someone who is pretty much depressed. +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]12] *0* =0= +0+ -0- <0< >0> ;0.08; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Keep. It. Together, Senpai. +:bf-pixel: !crying! [Pixel Arial 11 Bold[ ]48] *0* =0= +0+ -0- <0< >0> ;1; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ ... \ No newline at end of file diff --git a/assets/preload/data/roses/dialogue-love.txt b/assets/preload/data/roses/dialogue-love.txt index 899e48f9..06ed3450 100644 --- a/assets/preload/data/roses/dialogue-love.txt +++ b/assets/preload/data/roses/dialogue-love.txt @@ -1,8 +1,8 @@ [178[ [179[ [223[ [216[ |Lunchbox| *0* =1= #pixel_mad# <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.06; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Oh you think your love is strong enough? -:bf-pixel: !default! [Pixel Arial 11 Bold[ ]48] *0* =0= +0+ -0- <0.2< >0> ;0.2; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Bah -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.06; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Don't even play games with me! I will take your girlfriend from you! -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]40] *0* =0.005= +2.5+ -0- <0.5< >0> ;0.06; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. She will get my nuts until she chokes on them! -:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Nah. I stay where I stay. With my cutie pie. -:bf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.2; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Bah -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]54] *0* =0= +0+ -0- <0< >0> ;0.09; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. You two are so dead on the spot. \ No newline at end of file +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.06; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Oh you think your love is strong enough? +:bf-pixel: !default! [Pixel Arial 11 Bold[ ]48] *0* =0= +0+ -0- <0.2< >0> ;0.2; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Bah +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.06; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Don't even play games with me! I will take your girlfriend from you! +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]40] *0* =0.005= +16+ -0- <5< >0> ;0.06; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ She will get my nuts until she chokes on them! +:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Nah. I stay where I stay. With my cutie pie. +:bf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.2; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Bah +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]54] *0* =0= +0+ -0- <0< >0> ;0.09; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ You two are so dead on the spot. \ No newline at end of file diff --git a/assets/preload/data/roses/dialogue-perfect.txt b/assets/preload/data/roses/dialogue-perfect.txt index 4249070b..84b3db16 100644 --- a/assets/preload/data/roses/dialogue-perfect.txt +++ b/assets/preload/data/roses/dialogue-perfect.txt @@ -1,4 +1,4 @@ [178[ [179[ [223[ [216[ |Lunchbox| *0* =1= #pixel_mad# <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]54] *0* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Oh I'm so getting you for this. -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0.005= +1.2+ -0- <0< >0> ;0.1; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. I'm not letting myself lose! You WILL get your fate checked! -:bf-pixel: !default! [Pixel Arial 11 Bold[ ]48] *0* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Bah bah \ No newline at end of file +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]54] *0* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Oh I'm so getting you for this. +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0.005= +18+ -0- <0< >0> ;0.1; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ I'm not letting myself lose! You WILL get your fate checked! +:bf-pixel: !default! [Pixel Arial 11 Bold[ ]48] *0* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Bah bah \ No newline at end of file diff --git a/assets/preload/data/roses/dialogue-practice.txt b/assets/preload/data/roses/dialogue-practice.txt index 88689215..f9a65975 100644 --- a/assets/preload/data/roses/dialogue-practice.txt +++ b/assets/preload/data/roses/dialogue-practice.txt @@ -1,9 +1,9 @@ [178[ [179[ [223[ [216[ |Lunchbox| *0* =1= #pixel_mad# <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. You're all doing great, but even if I lose or not... -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]27] *0* =0= +0+ -0- <0< >0> ;0.1; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Excuse me for my funkin nerves. -:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *20* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Is k. -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]12] *0* =0= +0+ -0- <0< >0> ;0.1; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Keep your cool, Senpai. -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]16] *0* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ... -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Not bad for an ugly worm. -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0.005= +6.2+ -1.2- <0.8< >1> ;0.08; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. But this time I'll rip your nuts off right after your girlfriend finishes gargling mine. -:bf-pixel: !default! [Pixel Arial 11 Bold[ ]64] *0* =0= +0+ -0- <0< >0> ;0.2; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Bop beep be be skdoo bep \ No newline at end of file +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ You're all doing great, but even if I lose or not... +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]27] *0* =0= +0+ -0- <0< >0> ;0.1; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Excuse me for my funkin nerves. +:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *20* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Is k. +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]12] *0* =0= +0+ -0- <0< >0> ;0.1; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Keep your cool, Senpai. +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]16] *0* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ ... +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Not bad for an ugly worm. +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0.005= +45+ -19- <6< >19> ;0.08; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ But this time I'll rip your nuts off right after your girlfriend finishes gargling mine. +:bf-pixel: !default! [Pixel Arial 11 Bold[ ]64] *0* =0= +0+ -0- <0< >0> ;0.2; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Bop beep be be skdoo bep \ No newline at end of file diff --git a/assets/preload/data/roses/dialogue-scared.txt b/assets/preload/data/roses/dialogue-scared.txt index 04cb40ad..5abd6641 100644 --- a/assets/preload/data/roses/dialogue-scared.txt +++ b/assets/preload/data/roses/dialogue-scared.txt @@ -1,6 +1,6 @@ [178[ [179[ [223[ [216[ |Lunchbox| *0* =1= #pixel_mad# <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. He is more of a lost cause than anyone can be. -:gf-pixel: !concerned! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.07; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Don't say that. I know it's bad, but- -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]52] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. This is NOT gonna work. -:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Can we just try again? -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]21] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Alright, but if that fails, I'm taking you. \ No newline at end of file +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ He is more of a lost cause than anyone can be. +:gf-pixel: !concerned! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.07; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Don't say that. I know it's bad, but- +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]52] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ This is NOT gonna work. +:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Can we just try again? +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]21] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Alright, but if that fails, I'm taking you. \ No newline at end of file diff --git a/assets/preload/data/roses/dialogue-terrified.txt b/assets/preload/data/roses/dialogue-terrified.txt index 56a4aa7b..0004d6b7 100644 --- a/assets/preload/data/roses/dialogue-terrified.txt +++ b/assets/preload/data/roses/dialogue-terrified.txt @@ -1,6 +1,6 @@ [178[ [179[ [223[ [216[ |Lunchbox| *0* =1= #pixel_mad# <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. I won't be able to hold my anger away. I'm sorry, but I need to. -:gf-pixel: !concerned! [Pixel Arial 11 Bold[ ]17] *0* =0= +0+ -0- <0< >0> ;0.1; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. uh oh -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. I don't care if you are crying. Man up and be happy that you just won a song! -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]64] *0* =0= +0.005+ -0.3- <0.2< >0> ;0.07; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Man the funk up! -:bf-pixel: !crying! [Pixel Arial 11 Bold[ ]64] *0* =0= +0+ -0- <0< >0> ;0.12; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ... \ No newline at end of file +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ I won't be able to hold my anger away. I'm sorry, but I need to. +:gf-pixel: !concerned! [Pixel Arial 11 Bold[ ]17] *0* =0= +0+ -0- <0< >0> ;0.1; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ uh oh +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ I don't care if you are crying. Man up and be happy that you just won a song! +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]64] *0* =0= +0.005+ -10- <5< >0> ;0.07; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Man the funk up! +:bf-pixel: !crying! [Pixel Arial 11 Bold[ ]64] *0* =0= +0+ -0- <0< >0> ;0.12; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ ... \ No newline at end of file diff --git a/assets/preload/data/roses/dialogue-uneasy.txt b/assets/preload/data/roses/dialogue-uneasy.txt index 4fcea930..fe24dccf 100644 --- a/assets/preload/data/roses/dialogue-uneasy.txt +++ b/assets/preload/data/roses/dialogue-uneasy.txt @@ -1,3 +1,3 @@ [178[ [179[ [223[ [216[ |Lunchbox| *0* =1= #pixel_mad# <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. We can still try to calm him down again, however my nerves are taking the better on me. -:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Sounds good. \ No newline at end of file +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ We can still try to calm him down again, however my nerves are taking the better on me. +:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Sounds good. \ No newline at end of file diff --git a/assets/preload/data/roses/dialogue.txt b/assets/preload/data/roses/dialogue.txt index da9e591d..5ad61c07 100644 --- a/assets/preload/data/roses/dialogue.txt +++ b/assets/preload/data/roses/dialogue.txt @@ -1,4 +1,4 @@ [178[ [179[ [223[ [216[ |Lunchbox| *0* =1= #pixel_mad# <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Not bad for an ugly worm. -:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0.005= +6.2+ -1.2- <0.8< >1> ;0.08; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. But this time I'll rip your nuts off right after your girlfriend finishes gargling mine. -:bf-pixel: !default! [Pixel Arial 11 Bold[ ]64] *0* =0= +0+ -0- <0< >0> ;0.2; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Bop beep be be skdoo bep \ No newline at end of file +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Not bad for an ugly worm. +:senpai-angry: !default! [Pixel Arial 11 Bold[ ]32] *0* =0.005= +45+ -19- <6< >19> ;0.08; |true| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ But this time I'll rip your nuts off right after your girlfriend finishes gargling mine. +:bf-pixel: !default! [Pixel Arial 11 Bold[ ]64] *0* =0= +0+ -0- <0< >0> ;0.2; |false| #pixel_mad# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Bop beep be be skdoo bep \ No newline at end of file diff --git a/assets/preload/data/senpai/dialogue-depressed.txt b/assets/preload/data/senpai/dialogue-depressed.txt index b60a09dc..a9c4d869 100644 --- a/assets/preload/data/senpai/dialogue-depressed.txt +++ b/assets/preload/data/senpai/dialogue-depressed.txt @@ -1,5 +1,5 @@ [178[ [179[ [223[ [216[ |Lunchbox| *100* =1= #pixel_normal# <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ -:bf-pixel: !crying! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;1; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ... -:senpai: !worried! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;1; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ... -:gf-pixel: !concerned! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;1; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ... -:senpai: !worried! [Pixel Arial 11 Bold[ ]16] *0* =0= +0+ -0- <0< >0> ;0.05; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. We really need to do something. \ No newline at end of file +:bf-pixel: !crying! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;1; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ ... +:senpai: !worried! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;1; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ ... +:gf-pixel: !concerned! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;1; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ ... +:senpai: !worried! [Pixel Arial 11 Bold[ ]16] *0* =0= +0+ -0- <0< >0> ;0.05; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ We really need to do something. \ No newline at end of file diff --git a/assets/preload/data/senpai/dialogue-love.txt b/assets/preload/data/senpai/dialogue-love.txt index a81364d2..2b7af076 100644 --- a/assets/preload/data/senpai/dialogue-love.txt +++ b/assets/preload/data/senpai/dialogue-love.txt @@ -1,11 +1,11 @@ [178[ [179[ [223[ [216[ |Lunchbox| *100* =1= #pixel_normal# <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ -:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. This place is perfect for romance, dont'cha think? -:bf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Bap -:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Less goooo for it! -:senpai: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Oh I see you two are being love birds, is that correct? -:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Yup. -:bf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Beep skdoo bah de beep bop -:senpai: !pleased! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. How pleasant to see you together. -:senpai: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.06; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. How about a serenade to prove your love to her? ..The winner gets her on their side. -:bf-pixel: !default! [Pixel Arial 11 Bold[ ]64] *100* =0= +0+ -0- <0< >0> ;0.06; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Dee -:senpai: !default! [Pixel Arial 11 Bold[ ]48] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Let it commence. \ No newline at end of file +:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ This place is perfect for romance, dont'cha think? +:bf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Bap +:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Less goooo for it! +:senpai: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Oh I see you two are being love birds, is that correct? +:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Yup. +:bf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Beep skdoo bah de beep bop +:senpai: !pleased! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ How pleasant to see you together. +:senpai: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.06; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ How about a serenade to prove your love to her? ..The winner gets her on their side. +:bf-pixel: !default! [Pixel Arial 11 Bold[ ]64] *100* =0= +0+ -0- <0< >0> ;0.06; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Dee +:senpai: !default! [Pixel Arial 11 Bold[ ]48] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Let it commence. \ No newline at end of file diff --git a/assets/preload/data/senpai/dialogue-perfect.txt b/assets/preload/data/senpai/dialogue-perfect.txt index ae1cdc1f..3e9b4c54 100644 --- a/assets/preload/data/senpai/dialogue-perfect.txt +++ b/assets/preload/data/senpai/dialogue-perfect.txt @@ -1,9 +1,9 @@ [178[ [179[ [223[ [216[ |Lunchbox| *100* =1= #pixel_normal# <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ -:bf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Baah ba bee da bop -:senpai: !neutral! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. I haven't told you what I wanted, and you already stand up to me? -:bf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Bep -:senpai: !neutral! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. I see. An upcoming serenade will have higher stakes for you. -:senpai: !default! [Pixel Arial 11 Bold[ ]56] *100* =0.005= +2.2+ -0- <0.6< >0> ;0.12; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. All or nothing, is that a good deal? -:bf-pixel: !default! [Pixel Arial 11 Bold[ ]48] *100* =0= +0+ -0- <0< >0> ;0.02; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Dee -:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. We accept. -:senpai: !pleased! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Glad we have an agreement on our hands. \ No newline at end of file +:bf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Baah ba bee da bop +:senpai: !neutral! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ I haven't told you what I wanted, and you already stand up to me? +:bf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Bep +:senpai: !neutral! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ I see. An upcoming serenade will have higher stakes for you. +:senpai: !default! [Pixel Arial 11 Bold[ ]56] *100* =0.005= +15+ -0- <7< >0> ;0.12; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ All or nothing, is that a good deal? +:bf-pixel: !default! [Pixel Arial 11 Bold[ ]48] *100* =0= +0+ -0- <0< >0> ;0.02; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Dee +:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ We accept. +:senpai: !pleased! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Glad we have an agreement on our hands. \ No newline at end of file diff --git a/assets/preload/data/senpai/dialogue-practice.txt b/assets/preload/data/senpai/dialogue-practice.txt index 8a2a9a22..1fe39f9c 100644 --- a/assets/preload/data/senpai/dialogue-practice.txt +++ b/assets/preload/data/senpai/dialogue-practice.txt @@ -1,12 +1,12 @@ [178[ [179[ [223[ [216[ |Lunchbox| *100* =1= #pixel_normal# <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ -:senpai: !neutral! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Excuse me. Everyone. Today is the last day of practice before we move on to the big play. -:senpai: !neutral! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Everyone got their roles? -:bf-pixel: !default! [Pixel Arial 11 Bold[ ]48] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Dah -:senpai: !neutral! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Girlfriend? -:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Yo wassup. -:senpai: !pleased! [Pixel Arial 11 Bold[ ]26] *0* =0= +0+ -0- <0< >0> ;0.08; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Alright that's everyone then. -:senpai: !wink! [Pixel Arial 11 Bold[ ]20] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. You know what to do. -:senpai: !neutral! [Pixel Arial 11 Bold[ ]16] *50* =0= +0+ -0- <0< >0> ;1; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ... -:senpai: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Ah, a new fair maiden has come in search of true love! -:senpai: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. A serenade between gentlemen shall decide where her beautiful heart shall reside. -:bf-pixel: !default! [Pixel Arial 11 Bold[ ]48] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Beep bo bop \ No newline at end of file +:senpai: !neutral! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Excuse me. Everyone. Today is the last day of practice before we move on to the big play. +:senpai: !neutral! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Everyone got their roles? +:bf-pixel: !default! [Pixel Arial 11 Bold[ ]48] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Dah +:senpai: !neutral! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Girlfriend? +:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Yo wassup. +:senpai: !pleased! [Pixel Arial 11 Bold[ ]26] *0* =0= +0+ -0- <0< >0> ;0.08; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Alright that's everyone then. +:senpai: !wink! [Pixel Arial 11 Bold[ ]20] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ You know what to do. +:senpai: !neutral! [Pixel Arial 11 Bold[ ]16] *50* =0= +0+ -0- <0< >0> ;1; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ ... +:senpai: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Ah, a new fair maiden has come in search of true love! +:senpai: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ A serenade between gentlemen shall decide where her beautiful heart shall reside. +:bf-pixel: !default! [Pixel Arial 11 Bold[ ]48] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Beep bo bop \ No newline at end of file diff --git a/assets/preload/data/senpai/dialogue-scared.txt b/assets/preload/data/senpai/dialogue-scared.txt index ccd72df2..bce92271 100644 --- a/assets/preload/data/senpai/dialogue-scared.txt +++ b/assets/preload/data/senpai/dialogue-scared.txt @@ -1,9 +1,9 @@ [178[ [179[ [223[ [216[ |Lunchbox| *100* =1= #pixel_normal# <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ -:senpai: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Ah, a ne- -:bf-pixel: !shaking! [Pixel Arial 11 Bold[ ]72] *0* =0.005= +0.2+ -0- <0.2< >0> ;0.02; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. DAH! -:senpai: !worried! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Oh.. What's with that reaction? ..Everything will be alright. -:bf-pixel: !shaking! [Pixel Arial 11 Bold[ ]72] *0* =0.005= +0.2+ -0- <0.2< >0> ;0.02; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. BAH BOOP! -:senpai: !worried! [Pixel Arial 11 Bold[ ]20] *0* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. I see... -:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *20* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. He'll be okay. -:gf-pixel: !concerned! [Pixel Arial 11 Bold[ ]25] *20* =0= +0+ -0- <0< >0> ;0.1; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ..Eventually. -:senpai: !worried! [Pixel Arial 11 Bold[ ]25] *50* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. We can cheer him up for now. \ No newline at end of file +:senpai: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Ah, a ne- +:bf-pixel: !shaking! [Pixel Arial 11 Bold[ ]72] *0* =0.005= +3+ -0- <3< >0> ;0.02; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ DAH! +:senpai: !worried! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Oh.. What's with that reaction? ..Everything will be alright. +:bf-pixel: !shaking! [Pixel Arial 11 Bold[ ]72] *0* =0.005= +9+ -0- <9< >0> ;0.02; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ BAH BOOP! +:senpai: !worried! [Pixel Arial 11 Bold[ ]20] *0* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ I see... +:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *20* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ He'll be okay. +:gf-pixel: !concerned! [Pixel Arial 11 Bold[ ]25] *20* =0= +0+ -0- <0< >0> ;0.1; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ ..Eventually. +:senpai: !worried! [Pixel Arial 11 Bold[ ]25] *50* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ We can cheer him up for now. \ No newline at end of file diff --git a/assets/preload/data/senpai/dialogue-terrified.txt b/assets/preload/data/senpai/dialogue-terrified.txt index ffea6e16..74c5af1b 100644 --- a/assets/preload/data/senpai/dialogue-terrified.txt +++ b/assets/preload/data/senpai/dialogue-terrified.txt @@ -1,7 +1,7 @@ [178[ [179[ [223[ [216[ |Lunchbox| *100* =1= #pixel_normal# <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ -:bf-pixel: !crying! [Pixel Arial 11 Bold[ ]12] *0* =0= +0+ -0- <0< >0> ;0.12; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Please... Stay away from me. -:bf-pixel: !crying! [Pixel Arial 11 Bold[ ]12] *0* =0= +0+ -0- <0< >0> ;0.12; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. I don't want to endure this any longer. -:bf-pixel: !crying! [Pixel Arial 11 Bold[ ]12] *0* =0= +0+ -0- <0< >0> ;0.12; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Someone help me! -:senpai: !worried! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;1; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ... -:gf-pixel: !concerned! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;1; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ... -:senpai: !worried! [Pixel Arial 11 Bold[ ]19] *0* =0= +0+ -0- <0< >0> ;0.05; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. I almost don't want to do this to him. \ No newline at end of file +:bf-pixel: !crying! [Pixel Arial 11 Bold[ ]12] *0* =0= +0+ -0- <0< >0> ;0.12; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Please... Stay away from me. +:bf-pixel: !crying! [Pixel Arial 11 Bold[ ]12] *0* =0= +0+ -0- <0< >0> ;0.12; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ I don't want to endure this any longer. +:bf-pixel: !crying! [Pixel Arial 11 Bold[ ]12] *0* =0= +0+ -0- <0< >0> ;0.12; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Someone help me! +:senpai: !worried! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;1; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ ... +:gf-pixel: !concerned! [Pixel Arial 11 Bold[ ]32] *0* =0= +0+ -0- <0< >0> ;1; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ ... +:senpai: !worried! [Pixel Arial 11 Bold[ ]19] *0* =0= +0+ -0- <0< >0> ;0.05; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ I almost don't want to do this to him. \ No newline at end of file diff --git a/assets/preload/data/senpai/dialogue-uneasy.txt b/assets/preload/data/senpai/dialogue-uneasy.txt index 3e6dda53..be5accb5 100644 --- a/assets/preload/data/senpai/dialogue-uneasy.txt +++ b/assets/preload/data/senpai/dialogue-uneasy.txt @@ -1,10 +1,10 @@ [178[ [179[ [223[ [216[ |Lunchbox| *100* =1= #pixel_normal# <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ -:senpai: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Ah, a new fair maiden has come in search of- -:senpai: !neutral! [Pixel Arial 11 Bold[ ]32] *20* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ... -:bf-pixel: !uneasy! [Pixel Arial 11 Bold[ ]20] *20* =0= +0+ -0- <0< >0> ;0.1; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Bah? -:senpai: !neutral! [Pixel Arial 11 Bold[ ]32] *20* =0= +0+ -0- <0< >0> ;0.06; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Anything going on, little guy? -:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *20* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. He's just a lil' uneasy, but he'll shake it off in no time. -:senpai: !neutral! [Pixel Arial 11 Bold[ ]20] *50* =0= +0+ -0- <0< >0> ;0.06; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. If you say so... Anyways. -:senpai: !default! [Pixel Arial 11 Bold[ ]32] *75* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. A serenade between gentlemen shall decide where her beautiful heart shall reside. -:bf-pixel: !uneasy! [Pixel Arial 11 Bold[ ]20] *75* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ... -:bf-pixel: !default! [Pixel Arial 11 Bold[ ]48] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Beep bo bop \ No newline at end of file +:senpai: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Ah, a new fair maiden has come in search of- +:senpai: !neutral! [Pixel Arial 11 Bold[ ]32] *20* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ ... +:bf-pixel: !uneasy! [Pixel Arial 11 Bold[ ]20] *20* =0= +0+ -0- <0< >0> ;0.1; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Bah? +:senpai: !neutral! [Pixel Arial 11 Bold[ ]32] *20* =0= +0+ -0- <0< >0> ;0.06; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Anything going on, little guy? +:gf-pixel: !default! [Pixel Arial 11 Bold[ ]32] *20* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ He's just a lil' uneasy, but he'll shake it off in no time. +:senpai: !neutral! [Pixel Arial 11 Bold[ ]20] *50* =0= +0+ -0- <0< >0> ;0.06; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ If you say so... Anyways. +:senpai: !default! [Pixel Arial 11 Bold[ ]32] *75* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ A serenade between gentlemen shall decide where her beautiful heart shall reside. +:bf-pixel: !uneasy! [Pixel Arial 11 Bold[ ]20] *75* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ ... +:bf-pixel: !default! [Pixel Arial 11 Bold[ ]48] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Beep bo bop \ No newline at end of file diff --git a/assets/preload/data/senpai/dialogue.txt b/assets/preload/data/senpai/dialogue.txt index 3825308e..09183f98 100644 --- a/assets/preload/data/senpai/dialogue.txt +++ b/assets/preload/data/senpai/dialogue.txt @@ -1,4 +1,4 @@ [178[ [179[ [223[ [216[ |Lunchbox| *100* =1= #pixel_normal# <0.08< >4> (0.2( )5) {0.83{ }5} `hand_textbox` ~clickText~ -:senpai: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Ah, a new fair maiden has come in search of true love! -:senpai: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. A serenade between gentlemen shall decide where her beautiful heart shall reside. -:bf-pixel: !default! [Pixel Arial 11 Bold[ ]48] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. Beep bo bop \ No newline at end of file +:senpai: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Ah, a new fair maiden has come in search of true love! +:senpai: !default! [Pixel Arial 11 Bold[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ A serenade between gentlemen shall decide where her beautiful heart shall reside. +:bf-pixel: !default! [Pixel Arial 11 Bold[ ]48] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_normal# ^pixelText^ !#FF3F2021! ?#FFD89494? .. ~~ Beep bo bop \ No newline at end of file diff --git a/assets/preload/data/thorns/dialogue-depressed.txt b/assets/preload/data/thorns/dialogue-depressed.txt index c9b08fce..626bf76f 100644 --- a/assets/preload/data/thorns/dialogue-depressed.txt +++ b/assets/preload/data/thorns/dialogue-depressed.txt @@ -1,6 +1,6 @@ [178[ [208[ [0[ [46[ |LunchboxScary| *100* =1= #pixel_spirit# <0.08< >4> (0.2( )5) {0.83{ }5} `spirit_button` ~clickText~ -:senpai: !default! [Arial[ ]72] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ... -:senpai: !default! [Arial[ ]49] *100* =0= +0+ -0- <0< >0> ;0.06; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. Good that you are depressed. -:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.08; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. I wish that you were dead where you are so I can take over. -:senpai: !default! [Arial[ ]49] *100* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. I will leave this place, with you dead or alive. -:senpai: !default! [Arial[ ]64] *100* =0= +0+ -0- <0< >0> ;0.12; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. Mark my word \ No newline at end of file +:senpai: !default! [Arial[ ]72] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ ... +:senpai: !default! [Arial[ ]49] *100* =0= +0+ -0- <0< >0> ;0.06; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ Good that you are depressed. +:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.08; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ I wish that you were dead where you are so I can take over. +:senpai: !default! [Arial[ ]49] *100* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ I will leave this place, with you dead or alive. +:senpai: !default! [Arial[ ]64] *100* =0= +0+ -0- <0< >0> ;0.12; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ Mark my word \ No newline at end of file diff --git a/assets/preload/data/thorns/dialogue-love.txt b/assets/preload/data/thorns/dialogue-love.txt index dc4b0360..ab8d2ea4 100644 --- a/assets/preload/data/thorns/dialogue-love.txt +++ b/assets/preload/data/thorns/dialogue-love.txt @@ -1,7 +1,7 @@ [178[ [208[ [0[ [46[ |LunchboxScary| *100* =1= #pixel_spirit# <0.08< >4> (0.2( )5) {0.83{ }5} `spirit_button` ~clickText~ -:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. Direct contact with real humans, all because of true love,,, -:senpai: !default! [Arial[ ]48] *100* =0= +0+ -0- <0< >0> ;0.07; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. It's all based upon lies,, -:senpai: !default! [Arial[ ]48] *100* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. Your love is fake,, You don't deserve each other. -:senpai: !default! [Arial[ ]54] *100* =0= +0+ -0- <0< >0> ;0.13; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. I do and I will take over. -:senpai: !default! [Arial[ ]48] *100* =0= +0+ -0- <0< >0> ;0.16; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. If I can't take your girlfriend over, I will take you over instead. -:senpai: !default! [Arial[ ]64] *100* =0= +0+ -0- <0< >0> ;0.2; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. And then I deal with her dad. \ No newline at end of file +:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ Direct contact with real humans, all because of true love,,, +:senpai: !default! [Arial[ ]48] *100* =0= +0+ -0- <0< >0> ;0.07; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ It's all based upon lies,, +:senpai: !default! [Arial[ ]48] *100* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ Your love is fake,, You don't deserve each other. +:senpai: !default! [Arial[ ]54] *100* =0= +0+ -0- <0< >0> ;0.13; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ I do and I will take over. +:senpai: !default! [Arial[ ]48] *100* =0= +0+ -0- <0< >0> ;0.16; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ If I can't take your girlfriend over, I will take you over instead. +:senpai: !default! [Arial[ ]64] *100* =0= +0+ -0- <0< >0> ;0.2; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ And then I deal with her dad. \ No newline at end of file diff --git a/assets/preload/data/thorns/dialogue-perfect.txt b/assets/preload/data/thorns/dialogue-perfect.txt index ce88768d..d3633f91 100644 --- a/assets/preload/data/thorns/dialogue-perfect.txt +++ b/assets/preload/data/thorns/dialogue-perfect.txt @@ -1,9 +1,9 @@ [178[ [208[ [0[ [46[ |LunchboxScary| *100* =1= #pixel_spirit# <0.08< >4> (0.2( )5) {0.83{ }5} `spirit_button` ~clickText~ -:senpai: !default! [Arial[ ]96] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. YOU. -:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.06; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. Your father will pay for what he has done to me and many others. -:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.08; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. I've been humiliated before, and I am being like that right now. -:senpai: !default! [Arial[ ]48] *100* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. I will take away his spot. -:senpai: !default! [Arial[ ]52] *100* =0= +0+ -0- <0< >0> ;0.13; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. I will do it. -:senpai: !default! [Arial[ ]56] *100* =0= +0+ -0- <0< >0> ;0.16; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. I won't lose. -:senpai: !default! [Arial[ ]16] *100* =0= +0+ -0- <0< >0> ;0.19; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. I won't let you leave without a scar. -:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.23; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. I don't care if you mind your bodies being borrowed, I'm taking them for myself. \ No newline at end of file +:senpai: !default! [Arial[ ]96] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ YOU. +:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.06; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ Your father will pay for what he has done to me and many others. +:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.08; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ I've been humiliated before, and I am being like that right now. +:senpai: !default! [Arial[ ]48] *100* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ I will take away his spot. +:senpai: !default! [Arial[ ]52] *100* =0= +0+ -0- <0< >0> ;0.13; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ I will do it. +:senpai: !default! [Arial[ ]56] *100* =0= +0+ -0- <0< >0> ;0.16; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ I won't lose. +:senpai: !default! [Arial[ ]16] *100* =0= +0+ -0- <0< >0> ;0.19; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ I won't let you leave without a scar. +:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.23; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ I don't care if you mind your bodies being borrowed, I'm taking them for myself. \ No newline at end of file diff --git a/assets/preload/data/thorns/dialogue-practice.txt b/assets/preload/data/thorns/dialogue-practice.txt index f981fff8..e2e68dd8 100644 --- a/assets/preload/data/thorns/dialogue-practice.txt +++ b/assets/preload/data/thorns/dialogue-practice.txt @@ -1,8 +1,8 @@ [178[ [208[ [0[ [46[ |LunchboxScary| *100* =1= #pixel_spirit# <0.08< >4> (0.2( )5) {0.83{ }5} `spirit_button` ~clickText~ -:senpai: !default! [Arial[ ]12] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. Did I do good? ..I think I did well. -:senpai: !default! [Arial[ ]12] *100* =0= +0+ -0- <0< >0> ;1; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ... -:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. Direct contact with real humans, after being trapped in here for so long... -:senpai: !default! [Arial[ ]49] *100* =0= +0+ -0- <0< >0> ;0.05; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. and HER of all people. -:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.07; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. I'll make her father pay for what he's done to me and all the others,,,, -:senpai: !default! [Arial[ ]49] *100* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. I'll beat you and make you take my place. -:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.15; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. You don't mind your bodies being borrowed right? ..It's only fair... \ No newline at end of file +:senpai: !default! [Arial[ ]12] *100* =0= +0+ -0- <0< >0> ;0.04; |false| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ Did I do good? ..I think I did well. +:senpai: !default! [Arial[ ]12] *100* =0= +0+ -0- <0< >0> ;1; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ ... +:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ Direct contact with real humans, after being trapped in here for so long... +:senpai: !default! [Arial[ ]49] *100* =0= +0+ -0- <0< >0> ;0.05; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ and HER of all people. +:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.07; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ I'll make her father pay for what he's done to me and all the others,,,, +:senpai: !default! [Arial[ ]49] *100* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ I'll beat you and make you take my place. +:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.15; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ You don't mind your bodies being borrowed right? ..It's only fair... \ No newline at end of file diff --git a/assets/preload/data/thorns/dialogue-scared.txt b/assets/preload/data/thorns/dialogue-scared.txt index 81bd7e35..0527d9a6 100644 --- a/assets/preload/data/thorns/dialogue-scared.txt +++ b/assets/preload/data/thorns/dialogue-scared.txt @@ -1,3 +1,3 @@ [178[ [208[ [0[ [46[ |LunchboxScary| *100* =1= #pixel_spirit# <0.08< >4> (0.2( )5) {0.83{ }5} `spirit_button` ~clickText~ -:senpai: !default! [Arial[ ]64] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. And that failed... -:senpai: !default! [Arial[ ]64] *100* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. Time to take over,,, \ No newline at end of file +:senpai: !default! [Arial[ ]64] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ And that failed... +:senpai: !default! [Arial[ ]64] *100* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ Time to take over,,, \ No newline at end of file diff --git a/assets/preload/data/thorns/dialogue-terrified.txt b/assets/preload/data/thorns/dialogue-terrified.txt index 34686e82..99736cbe 100644 --- a/assets/preload/data/thorns/dialogue-terrified.txt +++ b/assets/preload/data/thorns/dialogue-terrified.txt @@ -1,4 +1,4 @@ [178[ [208[ [0[ [46[ |LunchboxScary| *100* =1= #pixel_spirit# <0.08< >4> (0.2( )5) {0.83{ }5} `spirit_button` ~clickText~ -:senpai: !default! [Arial[ ]48] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. Your cries won't help you this time. -:senpai: !default! [Arial[ ]48] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. Anger is the only thing you cause me, and I will punish you for it. -:bf-pixel: !crying! [Pixel Arial 11 Bold[ ]96] *0* =0= +0+ -0- <0< >0> ;0.12; |false| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. No... \ No newline at end of file +:senpai: !default! [Arial[ ]48] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ Your cries won't help you this time. +:senpai: !default! [Arial[ ]48] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ Anger is the only thing you cause me, and I will punish you for it. +:bf-pixel: !crying! [Pixel Arial 11 Bold[ ]96] *0* =0= +0+ -0- <0< >0> ;0.12; |false| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ No... \ No newline at end of file diff --git a/assets/preload/data/thorns/dialogue-uneasy.txt b/assets/preload/data/thorns/dialogue-uneasy.txt index 7a583708..3a261e65 100644 --- a/assets/preload/data/thorns/dialogue-uneasy.txt +++ b/assets/preload/data/thorns/dialogue-uneasy.txt @@ -1,3 +1,3 @@ [178[ [208[ [0[ [46[ |LunchboxScary| *100* =1= #pixel_spirit# <0.08< >4> (0.2( )5) {0.83{ }5} `spirit_button` ~clickText~ -:senpai: !default! [Arial[ ]54] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. I am not willing to help anymore. -:senpai: !default! [Arial[ ]32] *0* =0= +0+ -0- <0< >0> ;0.08; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. I will calm him down by force now that I have to. \ No newline at end of file +:senpai: !default! [Arial[ ]54] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ I am not willing to help anymore. +:senpai: !default! [Arial[ ]32] *0* =0= +0+ -0- <0< >0> ;0.08; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ I will calm him down by force now that I have to. \ No newline at end of file diff --git a/assets/preload/data/thorns/dialogue.txt b/assets/preload/data/thorns/dialogue.txt index b25c9193..bad452cb 100644 --- a/assets/preload/data/thorns/dialogue.txt +++ b/assets/preload/data/thorns/dialogue.txt @@ -1,6 +1,6 @@ [178[ [208[ [0[ [46[ |LunchboxScary| *100* =1= #pixel_spirit# <0.08< >4> (0.2( )5) {0.83{ }5} `spirit_button` ~clickText~ -:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. Direct contact with real humans, after being trapped in here for so long... -:senpai: !default! [Arial[ ]49] *100* =0= +0+ -0- <0< >0> ;0.05; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. and HER of all people. -:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.07; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. I'll make her father pay for what he's done to me and all the others,,,, -:senpai: !default! [Arial[ ]49] *100* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. I'll beat you and make you take my place. -:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.15; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. You don't mind your bodies being borrowed right? ..It's only fair... \ No newline at end of file +:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.04; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ Direct contact with real humans, after being trapped in here for so long... +:senpai: !default! [Arial[ ]49] *100* =0= +0+ -0- <0< >0> ;0.05; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ and HER of all people. +:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.07; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ I'll make her father pay for what he's done to me and all the others,,,, +:senpai: !default! [Arial[ ]49] *100* =0= +0+ -0- <0< >0> ;0.1; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ I'll beat you and make you take my place. +:senpai: !default! [Arial[ ]32] *100* =0= +0+ -0- <0< >0> ;0.15; |true| #pixel_spirit# ^pixelText^ !#FFFFFFFF! ?#FF000000? .#FF000000. ~~ You don't mind your bodies being borrowed right? ..It's only fair... \ No newline at end of file diff --git a/assets/preload/images/Options_Buttons.png b/assets/preload/images/Options_Buttons.png index 5dfb4f8f..900c2f93 100644 Binary files a/assets/preload/images/Options_Buttons.png and b/assets/preload/images/Options_Buttons.png differ diff --git a/assets/preload/images/Options_Buttons.xml b/assets/preload/images/Options_Buttons.xml index 9f7944cf..f315154f 100644 --- a/assets/preload/images/Options_Buttons.xml +++ b/assets/preload/images/Options_Buttons.xml @@ -16,46 +16,48 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/preload/images/chartTypes.png b/assets/preload/images/chartTypes.png index 34b202d8..d168cc9a 100644 Binary files a/assets/preload/images/chartTypes.png and b/assets/preload/images/chartTypes.png differ diff --git a/assets/preload/images/chartTypes.xml b/assets/preload/images/chartTypes.xml index 7db816fc..2f72a82b 100644 --- a/assets/preload/images/chartTypes.xml +++ b/assets/preload/images/chartTypes.xml @@ -8,6 +8,8 @@ - - + + + + diff --git a/assets/preload/images/rankings/NA.png b/assets/preload/images/rankings/NA.png new file mode 100644 index 00000000..d3d3dd8d Binary files /dev/null and b/assets/preload/images/rankings/NA.png differ diff --git a/source/DialogueBox.hx b/source/DialogueBox.hx index db909f70..daad4c65 100644 --- a/source/DialogueBox.hx +++ b/source/DialogueBox.hx @@ -69,6 +69,7 @@ class DialogueBox extends FlxSpriteGroup var curBox:String = 'pixel_normal'; var oldBox:String = ''; var curSound:String = 'pixelText'; + var timeCut:Int; @@ -354,15 +355,15 @@ class DialogueBox extends FlxSpriteGroup // swagDialogue.text = ; swagDialogue.resetText(dialogueList[0]); - new FlxTimer().start(Std.parseFloat(curShakeDelay), function(tmr:FlxTimer) + new FlxTimer().start(Std.parseInt(curShakeDelay)*Std.parseFloat(curSpeed), function(tmr:FlxTimer) { - FlxG.cameras.shake(Std.parseFloat(curShake), Std.parseFloat(curShakeTime)); + FlxG.cameras.shake(Std.parseFloat(curShake), Std.parseInt(curShakeTime)*Std.parseFloat(curSpeed)); }); - new FlxTimer().start(Std.parseFloat(curFlashDelay), function(tmr:FlxTimer) + new FlxTimer().start(Std.parseInt(curFlashDelay)*Std.parseFloat(curSpeed), function(tmr:FlxTimer) { - FlxG.cameras.flash(0xFFFFFFFF, Std.parseFloat(curFlashTime)); - if (Std.parseFloat(curFlashTime) > 0) + FlxG.cameras.flash(0xFFFFFFFF, Std.parseInt(curFlashTime)*Std.parseFloat(curSpeed)); + if (Std.parseInt(curFlashTime) > 0) { switch (PlayState.curStage) { @@ -450,6 +451,16 @@ class DialogueBox extends FlxSpriteGroup if (portraitColor != '') portrait.color = FlxColor.fromString(portraitColor); + if (timeCut > 0) + { + new FlxTimer().start(Std.parseFloat(curSpeed)*timeCut, function(tmr:FlxTimer) + { + dialogueList.remove(dialogueList[0]); + FlxG.sound.play(Paths.sound('dialogueClicks/$clickSound'), 0.8* _variables.svolume/100); + startDialogue(); + }, 1); + } + swagDialogue.start(Std.parseFloat(curSpeed), true); } @@ -524,5 +535,9 @@ class DialogueBox extends FlxSpriteGroup splitData = dialogueList[0].split("."); portraitColor = splitData[1]; dialogueList[0] = dialogueList[0].substr(splitData[1].length + 2).trim(); + + splitData = dialogueList[0].split("~"); + timeCut = Std.parseInt(splitData[1]); + dialogueList[0] = dialogueList[0].substr(splitData[1].length + 2).trim(); } } diff --git a/source/Highscore.hx b/source/Highscore.hx index e1f8a182..88158126 100644 --- a/source/Highscore.hx +++ b/source/Highscore.hx @@ -6,8 +6,10 @@ class Highscore { #if (haxe >= "4.0.0") public static var songScores:Map = new Map(); + public static var songRanks:Map = new Map(); #else public static var songScores:Map = new Map(); + public static var songRanks:Map = new Map(); #end @@ -30,6 +32,19 @@ class Highscore setScore(daSong, score); } + public static function saveRank(song:String, score:Int = 0, ?diff:Int = 0):Void + { + var daSong:String = formatSong(song, diff); + + if (songRanks.exists(daSong)) + { + if (songRanks.get(daSong) > score) + setRank(daSong, score); + } + else + setRank(daSong, score); + } + public static function saveWeekScore(week:Int = 1, score:Int = 0, ?diff:Int = 0):Void { @@ -60,6 +75,14 @@ class Highscore FlxG.save.flush(); } + static function setRank(song:String, score:Int):Void + { + // Reminder that I don't need to format this song, it should come formatted! + songRanks.set(song, score); + FlxG.save.data.songRanks = songRanks; + FlxG.save.flush(); + } + public static function formatSong(song:String, diff:Int):String { var daSong:String = song; @@ -86,6 +109,14 @@ class Highscore return songScores.get(formatSong(song, diff)); } + public static function getRank(song:String, diff:Int):Int + { + if (!songRanks.exists(formatSong(song, diff))) + setRank(formatSong(song, diff), 16); + + return songRanks.get(formatSong(song, diff)); + } + public static function getWeekScore(week:Int, diff:Int):Int { if (!songScores.exists(formatSong('week' + week, diff))) @@ -100,5 +131,9 @@ class Highscore { songScores = FlxG.save.data.songScores; } + if (FlxG.save.data.songRanks != null) + { + songRanks = FlxG.save.data.songRanks; + } } } diff --git a/source/MainMenuState.hx b/source/MainMenuState.hx index 83420a94..64e29d9c 100644 --- a/source/MainMenuState.hx +++ b/source/MainMenuState.hx @@ -49,6 +49,7 @@ class MainMenuState extends MusicBeatState transIn = FlxTransitionableState.defaultTransIn; transOut = FlxTransitionableState.defaultTransOut; + if (!FlxG.sound.music.playing) { FlxG.sound.playMusic(Paths.music('freakyMenu'), _variables.mvolume/100); @@ -138,6 +139,7 @@ class MainMenuState extends MusicBeatState { FlxG.sound.music.volume += 0.5 * _variables.mvolume/100 * FlxG.elapsed; } + menuItems.forEach(function(spr:FlxSprite) { diff --git a/source/MainVariables.hx b/source/MainVariables.hx index d18e6590..0bef65d4 100644 --- a/source/MainVariables.hx +++ b/source/MainVariables.hx @@ -43,6 +43,7 @@ typedef Variables = var fpsCounter:Bool; var comboP:Bool; var memory:Bool; + var cutscene:Bool; } class MainVariables @@ -91,6 +92,7 @@ class MainVariables nps: true, comboP: true, memory: true, + cutscene: true, //up to do in week 7 update scroll: 'up' }; diff --git a/source/MenuFreeplay.hx b/source/MenuFreeplay.hx index af607534..cb868219 100644 --- a/source/MenuFreeplay.hx +++ b/source/MenuFreeplay.hx @@ -50,6 +50,9 @@ class MenuFreeplay extends MusicBeatState var sprDifficulty:FlxSprite; + var rankTable:Array = ['P','X','X-','SS+','SS','SS-','S+','S','S-','A+','A','A-','B','C','D','E','NA']; + var rank:FlxSprite = new FlxSprite(0).loadGraphic(Paths.image('rankings/NA')); + private var vocals:FlxSound; override function create() @@ -119,6 +122,16 @@ class MenuFreeplay extends MusicBeatState add(discIcon); discIcon.antialiasing = disc.antialiasing = true; + rank.setGraphicSize(0,90); + rank.updateHitbox(); + rank.scrollFactor.set(); + rank.y = 690 - rank.height; + rank.x = disc.x + disc.width - 50; + add(rank); + rank.antialiasing = true; + + rank.alpha = 0; + grpSongs = new FlxTypedGroup(); add(grpSongs); @@ -191,6 +204,7 @@ class MenuFreeplay extends MusicBeatState scoreText.alpha = sprDifficulty.alpha = 0; FlxTween.tween(scoreText, { alpha:1}, 0.5, { ease: FlxEase.quartInOut}); FlxTween.tween(sprDifficulty, { alpha:1}, 0.5, { ease: FlxEase.quartInOut}); + FlxTween.tween(rank, { alpha:1}, 0.5, { ease: FlxEase.quartInOut}); FlxG.camera.zoom = 0.6; FlxG.camera.alpha = 0; @@ -229,6 +243,8 @@ class MenuFreeplay extends MusicBeatState { super.update(elapsed); + rank.x = disc.x + disc.width - 50; + checker.x -= -0.27/(_variables.fps/60); checker.y -= 0.63/(_variables.fps/60); @@ -285,6 +301,7 @@ class MenuFreeplay extends MusicBeatState FlxTween.tween(side, { alpha:0}, 0.3, { ease: FlxEase.quartInOut}); FlxTween.tween(sprDifficulty, { alpha:0}, 0.3, { ease: FlxEase.quartInOut}); FlxTween.tween(scoreText, { alpha:0}, 0.3, { ease: FlxEase.quartInOut}); + FlxTween.tween(rank, { alpha:0}, 0.3, { ease: FlxEase.quartInOut}); FlxTween.tween(disc, { alpha:0, 'scale.x':0}, 0.3, { ease: FlxEase.quartInOut}); #if desktop @@ -315,6 +332,7 @@ class MenuFreeplay extends MusicBeatState FlxTween.tween(checker, { alpha:0}, 0.6, { ease: FlxEase.quartInOut}); FlxTween.tween(gradientBar, { alpha:0}, 0.6, { ease: FlxEase.quartInOut}); FlxTween.tween(side, { alpha:0}, 0.8, { ease: FlxEase.quartInOut}); + FlxTween.tween(rank, { alpha:0}, 0.8, { ease: FlxEase.quartInOut}); FlxTween.tween(disc, { alpha:0, 'scale.x':0}, 0.8, { ease: FlxEase.quartInOut}); FlxTween.tween(scoreText, { y:750, alpha: 0}, 0.8, { ease: FlxEase.quartInOut}); FlxTween.tween(sprDifficulty, { y:750, alpha: 0}, 0.8, { ease: FlxEase.quartInOut}); @@ -357,6 +375,12 @@ class MenuFreeplay extends MusicBeatState #if !switch intendedScore = Highscore.getScore(songs[curSelected].songName, curDifficulty); + rank.loadGraphic(Paths.image('rankings/'+rankTable[Highscore.getRank(songs[curSelected].songName, curDifficulty)])); + rank.setGraphicSize(0,90); + rank.updateHitbox(); + rank.scrollFactor.set(); + rank.y = 690 - rank.height; + rank.x = disc.x + disc.width - 50; #end switch (curDifficulty) @@ -399,6 +423,12 @@ class MenuFreeplay extends MusicBeatState #if !switch intendedScore = Highscore.getScore(songs[curSelected].songName, curDifficulty); + rank.loadGraphic(Paths.image('rankings/'+rankTable[Highscore.getRank(songs[curSelected].songName, curDifficulty)])); + rank.setGraphicSize(0,90); + rank.updateHitbox(); + rank.scrollFactor.set(); + rank.y = 690 - rank.height; + rank.x = disc.x + disc.width - 50; // lerpScore = 0; #end diff --git a/source/MenuWeek.hx b/source/MenuWeek.hx index 352e7e34..a2f7ef25 100644 --- a/source/MenuWeek.hx +++ b/source/MenuWeek.hx @@ -35,6 +35,9 @@ class MenuWeek extends MusicBeatState ['Cocoa', 'Eggnog', 'Winter-Horrorland'], ['Senpai', 'Roses', 'Thorns'] ]; + + var curWeekData:Array = []; + public static var curDifficulty:Int = 2; public static var weekUnlocked:Array = [true, true, true, true, true, true, true]; @@ -76,6 +79,9 @@ class MenuWeek extends MusicBeatState var bottom:FlxSprite = new FlxSprite(0).loadGraphic(Paths.image('Week_Bottom')); var boombox:FlxSprite = new FlxSprite(0,0).loadGraphic(Paths.image('Boombox')); + var rankTable:Array = ['P','X','X-','SS+','SS','SS-','S+','S','S-','A+','A','A-','B','C','D','E','NA']; + var ranks:FlxTypedGroup; + var characterUI:FlxSprite = new FlxSprite(20, 20); override function create() @@ -85,6 +91,8 @@ class MenuWeek extends MusicBeatState FlxG.game.scaleY = 1; FlxG.game.y = 0; + ranks = new FlxTypedGroup(); + transIn = FlxTransitionableState.defaultTransIn; transOut = FlxTransitionableState.defaultTransOut; @@ -175,6 +183,8 @@ class MenuWeek extends MusicBeatState add(sprDifficulty); sprDifficulty.screenCenter(X); + add(ranks); + trace("Line 150"); txtTracklist = new FlxText(FlxG.width * 0.05, 200, 0, "INCLUDES FAMOUS\n TRACKS LIKE:\n", 32); @@ -335,6 +345,11 @@ class MenuWeek extends MusicBeatState FlxTween.tween(txtWeekTitle, { y:-50, alpha:0}, 0.8, { ease: FlxEase.quartInOut}); FlxTween.tween(sprDifficulty, { y:-120, alpha:0}, 0.8, { ease: FlxEase.quartInOut}); + for (item in ranks.members) + { + FlxTween.tween(item, { x:2600}, 0.6, { ease: FlxEase.quartInOut}); + } + #if desktop DiscordClient.changePresence("Selecting chart types.", null); #end @@ -360,6 +375,8 @@ class MenuWeek extends MusicBeatState if (curDifficulty > 5) curDifficulty = 0; + updateRank(); + sprDifficulty.offset.x = 0; switch (curDifficulty) @@ -407,6 +424,8 @@ class MenuWeek extends MusicBeatState if (curWeek < 0) curWeek = weekData.length - 1; + updateRank(); + var bullShit:Int = 0; for (item in grpWeekText.members) @@ -448,7 +467,7 @@ class MenuWeek extends MusicBeatState characterUI.animation.play(weekCharacters[curWeek]); characterUI.scale.set(300 / characterUI.height, 300 / characterUI.height); characterUI.x = 1240 - characterUI.width; - characterUI.y = 200; + characterUI.y = 150; switch (characterUI.animation.curAnim.name) { @@ -472,4 +491,25 @@ class MenuWeek extends MusicBeatState intendedScore = Highscore.getWeekScore(curWeek, curDifficulty); #end } + + function updateRank():Void + { + ranks.clear(); + + curWeekData = weekData[curWeek]; + + for (i in 0...curWeekData.length) + { + var rank:FlxSprite = new FlxSprite(958, 100); + rank.loadGraphic(Paths.image('rankings/'+rankTable[Highscore.getRank(curWeekData[i], curDifficulty)])); + rank.ID = i; + rank.setGraphicSize(0,80); + rank.updateHitbox(); + rank.antialiasing = true; + rank.scrollFactor.set(); + rank.y = 30 + i*65; + + ranks.add(rank); + } + } } diff --git a/source/Note.hx b/source/Note.hx index 2c316701..093320a7 100644 --- a/source/Note.hx +++ b/source/Note.hx @@ -33,6 +33,10 @@ class Note extends FlxSprite public static var GREEN_NOTE:Int = 2; public static var BLUE_NOTE:Int = 1; public static var RED_NOTE:Int = 3; + public static var canMissLeft:Bool = true; + public static var canMissRight:Bool = true; + public static var canMissUp:Bool = true; + public static var canMissDown:Bool = true; public function new(strumTime:Float, noteData:Int, ?prevNote:Note, ?sustainNote:Bool = false) { @@ -179,19 +183,22 @@ class Note extends FlxSprite if (mustPress) { // The * 0.5 is so that it's easier to hit them too late, instead of too early - if (strumTime >= Conductor.songPosition - Conductor.safeZoneOffset - && strumTime <= Conductor.songPosition + (Conductor.safeZoneOffset * 0.5)) + if (strumTime > Conductor.songPosition - Conductor.safeZoneOffset + && strumTime < Conductor.songPosition + (Conductor.safeZoneOffset * 0.5)) { canBeHit = true; - else + setCanMiss(noteData, false); + } else { canBeHit = false; - - if (strumTime < Conductor.songPosition - Conductor.safeZoneOffset && !wasGoodHit) + setCanMiss(noteData, true); + } + if (strumTime < Conductor.songPosition - Conductor.safeZoneOffset && !wasGoodHit) { tooLate = true; + setCanMiss(noteData, false); + } } else { canBeHit = false; - if (strumTime <= Conductor.songPosition) wasGoodHit = true; } @@ -202,4 +209,18 @@ class Note extends FlxSprite alpha = 0.3; } } + + public static function setCanMiss(data:Int, bool:Bool) + { + switch(data) { + case 0: + canMissLeft = bool; + case 1: + canMissDown = bool; + case 2: + canMissUp = bool; + case 3: + canMissRight = bool; + } + } } diff --git a/source/OutOfDate.hx b/source/OutOfDate.hx new file mode 100644 index 00000000..8700d172 --- /dev/null +++ b/source/OutOfDate.hx @@ -0,0 +1,47 @@ +package; + +import flixel.FlxG; +import flixel.FlxSprite; +import flixel.FlxSubState; +import flixel.text.FlxText; +import flixel.util.FlxColor; +import lime.app.Application; + +class OutOfDate extends MusicBeatState +{ + public static var leftState:Bool = false; + + public static var needVer:String = "IDFK LOL"; + + override function create() + { + super.create(); + var bg:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK); + add(bg); + var txt:FlxText = new FlxText(0, 0, FlxG.width, + "Oh boy... Your micropfone software seems to be outdated.\n" + + "Luckily for you, you can upgrade your software from " + + Application.current.meta.get('version') + + " to " +needVer+ " for free. " + + " All you have to do is press ACCEPT to go to its official patch release and grab the latest build from there." + + "!\nYou can always ignore this by pressing BACK.", + 32); + txt.setFormat("VCR OSD Mono", 32, FlxColor.WHITE, CENTER); + txt.screenCenter(); + add(txt); + } + + override function update(elapsed:Float) + { + if (controls.ACCEPT) + { + FlxG.openURL("https://gamebanana.com/mods/44236"); + } + if (controls.BACK) + { + leftState = true; + FlxG.switchState(new TitleState()); + } + super.update(elapsed); + } +} diff --git a/source/PAGE4settings.hx b/source/PAGE4settings.hx index 86822bd4..88c747eb 100644 --- a/source/PAGE4settings.hx +++ b/source/PAGE4settings.hx @@ -30,7 +30,7 @@ class PAGE4settings extends MusicBeatSubstate { var menuItems:FlxTypedGroup; - var optionShit:Array = ['page', 'offset', 'spam', 'accuType', 'combo+']; + var optionShit:Array = ['page', 'offset', 'spam', 'accuType', 'combo+', 'cutscene']; private var grpSongs:FlxTypedGroup; var selectedSomethin:Bool = false; @@ -47,6 +47,7 @@ class PAGE4settings extends MusicBeatSubstate var acc:Float; var spa:Float; var com:Float; + var cut:Float; public function new() { @@ -112,6 +113,11 @@ class PAGE4settings extends MusicBeatSubstate else acc = 0; + if (_variables.cutscene) + cut = 1; + else + cut = 0; + } function createResults():Void @@ -219,6 +225,9 @@ class PAGE4settings extends MusicBeatSubstate case "combo+": ResultText.text = Std.string(_variables.comboP).toUpperCase(); ExplainText.text = "COMBO+:\nSet if your score should be affected by your combo."; + case "cutscene": + ResultText.text = Std.string(_variables.cutscene).toUpperCase(); + ExplainText.text = "CUTSCENES:\nToggle Story Mode cutscenes on or off."; } menuItems.forEach(function(spr:FlxSprite) @@ -307,6 +316,19 @@ class PAGE4settings extends MusicBeatSubstate else _variables.comboP = true; + FlxG.sound.play(Paths.sound('scrollMenu'), _variables.svolume/100); + case "cutscene": + cut += Change; + if (cut > 1) + cut = 0; + if (cut < 0) + cut = 1; + + if (cut == 0) + _variables.cutscene = false; + else + _variables.cutscene = true; + FlxG.sound.play(Paths.sound('scrollMenu'), _variables.svolume/100); case "accuType": acc += Change; diff --git a/source/PlayState.hx b/source/PlayState.hx index 2782503f..1534df36 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -191,6 +191,7 @@ class PlayState extends MusicBeatState public static var cameraX:Float; public static var cameraY:Float; + var miscLerp:Float = 0.09; var camLerp:Float = 0.14; var zoomLerp:Float = 0.09; @@ -1056,9 +1057,9 @@ class PlayState extends MusicBeatState accuracyTxt.cameras = [camHUD]; npsTxt.cameras = [camHUD]; doof.cameras = [camPAUSE]; - freezeIndicator.cameras = [camHUD]; - LightsOutBG.cameras = [camHUD]; - BlindingBG.cameras = [camHUD]; + freezeIndicator.cameras = [camPAUSE]; + LightsOutBG.cameras = [camPAUSE]; + BlindingBG.cameras = [camPAUSE]; // if (SONG.song == 'South') // FlxG.camera.alpha = 0.7; @@ -1067,7 +1068,7 @@ class PlayState extends MusicBeatState // cameras = [FlxG.cameras.list[1]]; startingSong = true; - if (gameplayArea == "Story") + if (gameplayArea == "Story" && _variables.cutscene) { switch (curSong.toLowerCase()) { @@ -1195,7 +1196,7 @@ class PlayState extends MusicBeatState senpaiEvil.updateHitbox(); senpaiEvil.screenCenter(); - if (SONG.song.toLowerCase() == 'roses' || SONG.song.toLowerCase() == 'thorns') + if (SONG.song.toLowerCase() == 'roses' || SONG.song.toLowerCase() == 'thorns' || SONG.song.toLowerCase() == 'winter-horrorland') { remove(black); @@ -1474,6 +1475,7 @@ class PlayState extends MusicBeatState } var debugNum:Int = 0; + var stair:Int = 0; private function generateSong(dataPath:String):Void { @@ -1587,6 +1589,9 @@ class PlayState extends MusicBeatState } case "onearrow": daNoteData = arrowLane; + case "stair": + daNoteData = stair % 4; + stair++; } var oldNote:Note; @@ -1789,7 +1794,7 @@ class PlayState extends MusicBeatState function tweenCamIn():Void { - FlxTween.tween(FlxG.camera, {zoom: 1.3}, (Conductor.stepCrochet * 4 / 1000), {ease: FlxEase.elasticInOut}); + FlxTween.tween(FlxG.camera, {zoom: 1.3}, (Conductor.stepCrochet * 4 / 1000), {ease: FlxEase.quadInOut}); } override function openSubState(SubState:FlxSubState) @@ -1895,993 +1900,998 @@ class PlayState extends MusicBeatState return num; } - override public function update(elapsed:Float) - { - #if !debug - perfectMode = false; - #end - - if (startedCountdown) - { - if (_modifiers.EarthquakeSwitch) - FlxG.cameras.shake(_modifiers.Earthquake/2000, 0.2); - - if (_modifiers.LoveSwitch) - health += _modifiers.Love / 600000; - - if (_modifiers.FrightSwitch) - health -= _modifiers.Fright / 700000; - - if (_modifiers.PaparazziSwitch && paparazziInt == 0) + override public function update(elapsed:Float) + { + #if !debug + perfectMode = false; + #end + + if (startedCountdown) { - paparazziInt = 1; - new FlxTimer().start(FlxG.random.float(2 / _modifiers.Paparazzi, 6 / _modifiers.Paparazzi), function(tmr:FlxTimer) - { - camHUD.flash(0xFFFFFFFF, FlxG.random.float(0.1, 0.3), null, true); - FlxG.sound.play(Paths.sound('paparazzi'), FlxG.random.float(0.1, 0.3)*_variables.svolume/100); - paparazziInt = 0; - }); + if (_modifiers.EarthquakeSwitch) + FlxG.cameras.shake(_modifiers.Earthquake/2000, 0.2); + + if (_modifiers.LoveSwitch) + health += _modifiers.Love / 600000; + + if (_modifiers.FrightSwitch) + health -= _modifiers.Fright / 700000; + + if (_modifiers.PaparazziSwitch && paparazziInt == 0) + { + paparazziInt = 1; + new FlxTimer().start(FlxG.random.float(2 / _modifiers.Paparazzi, 6 / _modifiers.Paparazzi), function(tmr:FlxTimer) + { + camHUD.flash(0xFFFFFFFF, FlxG.random.float(0.1, 0.3), null, true); + FlxG.sound.play(Paths.sound('paparazzi'), FlxG.random.float(0.1, 0.3)*_variables.svolume/100); + paparazziInt = 0; + }); + } + + if (_modifiers.SeasickSwitch) + { + FlxG.camera.angle += Math.sin(Conductor.songPosition * Conductor.bpm/100 / 500) * (0.008 * _modifiers.Seasick); + camHUD.angle += Math.cos(Conductor.songPosition * Conductor.bpm/100 / 500) * (0.008 * _modifiers.Seasick); + } + + if (_modifiers.CameraSwitch) + { + FlxG.camera.angle += 0.01 * _modifiers.Camera; + camHUD.angle -= 0.01 * _modifiers.Camera; + } } - - if (_modifiers.SeasickSwitch) + + cameraX = camFollow.x; + cameraY = camFollow.y; + + if (FlxG.keys.justPressed.NINE) { - FlxG.camera.angle += Math.sin(Conductor.songPosition * Conductor.bpm/100 / 500) * (0.008 * _modifiers.Seasick); - camHUD.angle += Math.cos(Conductor.songPosition * Conductor.bpm/100 / 500) * (0.008 * _modifiers.Seasick); + if (iconP1.animation.curAnim.name == 'bf-old') + iconP1.animation.play(SONG.player1); + else + iconP1.animation.play('bf-old'); } - - if (_modifiers.CameraSwitch) + + if (currentFrames == _variables.fps) + { + for(i in 0...notesHitArray.length) + { + var cock:Date = notesHitArray[i]; + if (cock != null) + if (cock.getTime() + 2000 < Date.now().getTime()) + notesHitArray.remove(cock); + } + nps = Math.floor(notesHitArray.length / 2); + currentFrames = 0; + } + else + currentFrames++; + + switch (curStage) { - FlxG.camera.angle += 0.01 * _modifiers.Camera; - camHUD.angle -= 0.01 * _modifiers.Camera; + case 'philly': + if (trainMoving) + { + trainFrameTiming += elapsed; + + if (trainFrameTiming >= 1 / 24) + { + updateTrainPos(); + trainFrameTiming = 0; + } + } + // phillyCityLights.members[curLight].alpha -= (Conductor.crochet / 1000) * FlxG.elapsed; } - } - - cameraX = camFollow.x; - cameraY = camFollow.y; - - if (FlxG.keys.justPressed.NINE) - { - if (iconP1.animation.curAnim.name == 'bf-old') - iconP1.animation.play(SONG.player1); - else - iconP1.animation.play('bf-old'); - } - - if (currentFrames == _variables.fps) - { - for(i in 0...notesHitArray.length) + + super.update(elapsed); + + scoreTxt.text = "Score: " + songScore; + missTxt.text = "Misses: " + misses; + accuracyTxt.text = "Accuracy: " + truncateFloat(accuracy, 2) + "%"; + npsTxt.text = "NPS: " + nps; + + if (FlxG.keys.justPressed.ENTER && startedCountdown && canPause) { - var cock:Date = notesHitArray[i]; - if (cock != null) - if (cock.getTime() + 2000 < Date.now().getTime()) - notesHitArray.remove(cock); + persistentUpdate = false; + persistentDraw = true; + paused = true; + + // 1 / 1000 chance for Gitaroo Man easter egg + if (FlxG.random.bool(0.1)) + { + // gitaroo man easter egg + FlxG.switchState(new GitarooPause()); + } + else + { + openSubState(new PauseSubState(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); + } + + #if desktop + DiscordClient.changePresence(detailsPausedText, SONG.song + " (" + storyDifficultyText + ")", iconRPC); + #end } - nps = Math.floor(notesHitArray.length / 2); - currentFrames = 0; - } - else - currentFrames++; - - switch (curStage) - { - case 'philly': - if (trainMoving) + + if (FlxG.keys.justPressed.SEVEN) { - trainFrameTiming += elapsed; - - if (trainFrameTiming >= 1 / 24) + canDie = false; + FlxG.switchState(new ChartingState()); + + #if desktop + DiscordClient.changePresence("Charting a song", null, null, true); + #end + } + + // FlxG.watch.addQuick('VOL', vocals.amplitudeLeft); + // FlxG.watch.addQuick('VOLRight', vocals.amplitudeRight); + + iconP1.setGraphicSize(Std.int(FlxMath.lerp(iconP1.width, 150, zoomLerp/(_variables.fps/60)))); + iconP2.setGraphicSize(Std.int(FlxMath.lerp(iconP2.width, 150, zoomLerp/(_variables.fps/60)))); + + iconP1.updateHitbox(); + iconP2.updateHitbox(); + + var iconOffset:Int = 26; + + iconP1.x = healthBar.x + (healthBar.width * (FlxMath.remapToRange(healthBar.percent, 0, 100, 100, 0) * 0.01) - iconOffset); + iconP2.x = healthBar.x + (healthBar.width * (FlxMath.remapToRange(healthBar.percent, 0, 100, 100, 0) * 0.01)) - (iconP2.width - iconOffset); + + if (health > 2) + health = 2; + + if (healthBar.percent < 20) + iconP1.animation.curAnim.curFrame = 1; + else + iconP1.animation.curAnim.curFrame = 0; + + if (healthBar.percent > 80) + iconP2.animation.curAnim.curFrame = 1; + else + iconP2.animation.curAnim.curFrame = 0; + + /* if (FlxG.keys.justPressed.NINE) + FlxG.switchState(new Charting()); */ + + #if debug + if (FlxG.keys.justPressed.EIGHT) + FlxG.switchState(new AnimationDebug(SONG.player2)); + #end + + if (startingSong) + { + if (startedCountdown) { - updateTrainPos(); - trainFrameTiming = 0; + Conductor.songPosition += FlxG.elapsed * 1000; + if (Conductor.songPosition >= 0) + startSong(); } } - // phillyCityLights.members[curLight].alpha -= (Conductor.crochet / 1000) * FlxG.elapsed; - } - - super.update(elapsed); - - scoreTxt.text = "Score: " + songScore; - missTxt.text = "Misses: " + misses; - accuracyTxt.text = "Accuracy: " + truncateFloat(accuracy, 2) + "%"; - npsTxt.text = "NPS: " + nps; - - if (FlxG.keys.justPressed.ENTER && startedCountdown && canPause) - { - persistentUpdate = false; - persistentDraw = true; - paused = true; - - // 1 / 1000 chance for Gitaroo Man easter egg - if (FlxG.random.bool(0.1)) - { - // gitaroo man easter egg - FlxG.switchState(new GitarooPause()); - } - else - { - openSubState(new PauseSubState(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); - } - - #if desktop - DiscordClient.changePresence(detailsPausedText, SONG.song + " (" + storyDifficultyText + ")", iconRPC); - #end - } - - if (FlxG.keys.justPressed.SEVEN) - { - canDie = false; - FlxG.switchState(new ChartingState()); - - #if desktop - DiscordClient.changePresence("Charting a song", null, null, true); - #end - } - - // FlxG.watch.addQuick('VOL', vocals.amplitudeLeft); - // FlxG.watch.addQuick('VOLRight', vocals.amplitudeRight); - - iconP1.setGraphicSize(Std.int(FlxMath.lerp(iconP1.width, 150, zoomLerp/(_variables.fps/60)))); - iconP2.setGraphicSize(Std.int(FlxMath.lerp(iconP2.width, 150, zoomLerp/(_variables.fps/60)))); - - iconP1.updateHitbox(); - iconP2.updateHitbox(); - - var iconOffset:Int = 26; - - iconP1.x = healthBar.x + (healthBar.width * (FlxMath.remapToRange(healthBar.percent, 0, 100, 100, 0) * 0.01) - iconOffset); - iconP2.x = healthBar.x + (healthBar.width * (FlxMath.remapToRange(healthBar.percent, 0, 100, 100, 0) * 0.01)) - (iconP2.width - iconOffset); - - if (health > 2) - health = 2; - - if (healthBar.percent < 20) - iconP1.animation.curAnim.curFrame = 1; - else - iconP1.animation.curAnim.curFrame = 0; - - if (healthBar.percent > 80) - iconP2.animation.curAnim.curFrame = 1; - else - iconP2.animation.curAnim.curFrame = 0; - - /* if (FlxG.keys.justPressed.NINE) - FlxG.switchState(new Charting()); */ - - #if debug - if (FlxG.keys.justPressed.EIGHT) - FlxG.switchState(new AnimationDebug(SONG.player2)); - #end - - if (startingSong) - { - if (startedCountdown) - { - Conductor.songPosition += FlxG.elapsed * 1000; - if (Conductor.songPosition >= 0) - startSong(); - } - } - else - { - // Conductor.songPosition = FlxG.sound.music.time; - Conductor.songPosition += FlxG.elapsed * 1000; - songPositionBar = Conductor.songPosition; - - if (!paused) - { - songTime += FlxG.game.ticks - previousFrameTime; - previousFrameTime = FlxG.game.ticks; - - // Interpolation type beat - if (Conductor.lastSongPos != Conductor.songPosition) + else { - songTime = (songTime + Conductor.songPosition) / 2; - Conductor.lastSongPos = Conductor.songPosition; - // Conductor.songPosition += FlxG.elapsed * 1000; - // trace('MISSED FRAME'); + // Conductor.songPosition = FlxG.sound.music.time; + Conductor.songPosition += FlxG.elapsed * 1000; + songPositionBar = Conductor.songPosition; + + if (!paused) + { + songTime += FlxG.game.ticks - previousFrameTime; + previousFrameTime = FlxG.game.ticks; + + // Interpolation type beat + if (Conductor.lastSongPos != Conductor.songPosition) + { + songTime = (songTime + Conductor.songPosition) / 2; + Conductor.lastSongPos = Conductor.songPosition; + // Conductor.songPosition += FlxG.elapsed * 1000; + // trace('MISSED FRAME'); + } + } + + // Conductor.lastSongPos = FlxG.sound.music.time; } - } - - // Conductor.lastSongPos = FlxG.sound.music.time; - } - - if (generatedMusic && PlayState.SONG.notes[Std.int(curStep / 16)] != null) - { - // Make sure Girlfriend cheers only for certain songs - if(allowedToHeadbang) - { - // Don't animate GF if something else is already animating her (eg. train passing) - if(gf.animation.curAnim.name == 'danceLeft' || gf.animation.curAnim.name == 'danceRight' || gf.animation.curAnim.name == 'idle') + + if (generatedMusic && PlayState.SONG.notes[Std.int(curStep / 16)] != null) { - // Per song treatment since some songs will only have the 'Hey' at certain times - switch(curSong) + // Make sure Girlfriend cheers only for certain songs + if(allowedToHeadbang) { - case 'Philly': + // Don't animate GF if something else is already animating her (eg. train passing) + if(gf.animation.curAnim.name == 'danceLeft' || gf.animation.curAnim.name == 'danceRight' || gf.animation.curAnim.name == 'idle') { - // General duration of the song - if(curBeat < 250) + // Per song treatment since some songs will only have the 'Hey' at certain times + switch(curSong) { - // Beats to skip or to stop GF from cheering - if(curBeat != 184 && curBeat != 216) + case 'Philly': { - if(curBeat % 16 == 8) + // General duration of the song + if(curBeat < 250) { - // Just a garantee that it'll trigger just once - if(!triggeredAlready) + // Beats to skip or to stop GF from cheering + if(curBeat != 184 && curBeat != 216) { - gf.playAnim('cheer'); - triggeredAlready = true; + if(curBeat % 16 == 8) + { + // Just a garantee that it'll trigger just once + if(!triggeredAlready) + { + gf.playAnim('cheer'); + triggeredAlready = true; + } + }else triggeredAlready = false; } - }else triggeredAlready = false; + } } - } - } - case 'Bopeebo': - { - // Where it starts || where it ends - if(curBeat > 5 && curBeat < 130) - { - if(curBeat % 8 == 7) + case 'Bopeebo': { - if(!triggeredAlready) + // Where it starts || where it ends + if(curBeat > 5 && curBeat < 130) { - gf.playAnim('cheer'); - triggeredAlready = true; + if(curBeat % 8 == 7) + { + if(!triggeredAlready) + { + gf.playAnim('cheer'); + triggeredAlready = true; + } + }else triggeredAlready = false; } - }else triggeredAlready = false; - } - } - case 'Blammed': - { - if(curBeat > 30 && curBeat < 190) - { - if(curBeat < 90 || curBeat > 128) + } + case 'Blammed': { - if(curBeat % 4 == 2) + if(curBeat > 30 && curBeat < 190) { - if(!triggeredAlready) + if(curBeat < 90 || curBeat > 128) { - gf.playAnim('cheer'); - triggeredAlready = true; + if(curBeat % 4 == 2) + { + if(!triggeredAlready) + { + gf.playAnim('cheer'); + triggeredAlready = true; + } + }else triggeredAlready = false; } - }else triggeredAlready = false; + } } - } - } - case 'Cocoa': - { - if(curBeat < 170) - { - if(curBeat < 65 || curBeat > 130 && curBeat < 145) + case 'Cocoa': { - if(curBeat % 16 == 15) + if(curBeat < 170) { - if(!triggeredAlready) + if(curBeat < 65 || curBeat > 130 && curBeat < 145) { - gf.playAnim('cheer'); - triggeredAlready = true; + if(curBeat % 16 == 15) + { + if(!triggeredAlready) + { + gf.playAnim('cheer'); + triggeredAlready = true; + } + }else triggeredAlready = false; } - }else triggeredAlready = false; + } } - } - } - case 'Eggnog': - { - if(curBeat > 10 && curBeat != 111 && curBeat < 220) - { - if(curBeat % 8 == 7) + case 'Eggnog': { - if(!triggeredAlready) + if(curBeat > 10 && curBeat != 111 && curBeat < 220) { - gf.playAnim('cheer'); - triggeredAlready = true; + if(curBeat % 8 == 7) + { + if(!triggeredAlready) + { + gf.playAnim('cheer'); + triggeredAlready = true; + } + }else triggeredAlready = false; } - }else triggeredAlready = false; + } } } } } - } - } - - if (generatedMusic && PlayState.SONG.notes[Std.int(curStep / 16)] != null) - { - if (curBeat % 4 == 0) - { - // trace(PlayState.SONG.notes[Std.int(curStep / 16)].mustHitSection); - } - - if (camFollow.x != dad.getMidpoint().x + 150 && !PlayState.SONG.notes[Std.int(curStep / 16)].mustHitSection) - { - camFollow.x = FlxMath.lerp(camFollow.x, dad.getMidpoint().x + 150, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); - camFollow.y = FlxMath.lerp(camFollow.y, dad.getMidpoint().y - 100, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); - // camFollow.setPosition(lucky.getMidpoint().x - 120, lucky.getMidpoint().y + 210); - - switch (dad.curCharacter) + + if (generatedMusic && PlayState.SONG.notes[Std.int(curStep / 16)] != null) { - case 'mom': - camFollow.y = FlxMath.lerp(camFollow.y, dad.getMidpoint().y, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); - case 'senpai' | 'senpai-angry': - camFollow.x = FlxMath.lerp(camFollow.x, dad.getMidpoint().x - 190, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); - camFollow.y = FlxMath.lerp(camFollow.y, dad.getMidpoint().y - 830, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); + if (curBeat % 4 == 0) + { + // trace(PlayState.SONG.notes[Std.int(curStep / 16)].mustHitSection); + } + + if (camFollow.x != dad.getMidpoint().x + 150 && !PlayState.SONG.notes[Std.int(curStep / 16)].mustHitSection) + { + camFollow.x = FlxMath.lerp(camFollow.x, dad.getMidpoint().x + 150, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); + camFollow.y = FlxMath.lerp(camFollow.y, dad.getMidpoint().y - 100, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); + // camFollow.setPosition(lucky.getMidpoint().x - 120, lucky.getMidpoint().y + 210); + + switch (dad.curCharacter) + { + case 'mom': + camFollow.y = FlxMath.lerp(camFollow.y, dad.getMidpoint().y, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); + case 'senpai' | 'senpai-angry': + camFollow.x = FlxMath.lerp(camFollow.x, dad.getMidpoint().x - 190, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); + camFollow.y = FlxMath.lerp(camFollow.y, dad.getMidpoint().y - 830, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); + } + + if (dad.curCharacter == 'mom') + vocals.volume = _variables.vvolume/100; + + if (SONG.song.toLowerCase() == 'tutorial') + { + tweenCamIn(); + } + } + + if (PlayState.SONG.notes[Std.int(curStep / 16)].mustHitSection && camFollow.x != boyfriend.getMidpoint().x - 100) + { + camFollow.x = FlxMath.lerp(camFollow.x, boyfriend.getMidpoint().x - 100, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); + camFollow.y = FlxMath.lerp(camFollow.y, boyfriend.getMidpoint().y - 100, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); + + switch (curStage) + { + case 'limo': + camFollow.x = FlxMath.lerp(camFollow.x, boyfriend.getMidpoint().x - 300, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); + case 'mall': + camFollow.y = FlxMath.lerp(camFollow.y, boyfriend.getMidpoint().y - 200, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); + case 'school' | 'schoolEvil': + camFollow.x = FlxMath.lerp(camFollow.x, boyfriend.getMidpoint().x - 300, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); + camFollow.y = FlxMath.lerp(camFollow.y, boyfriend.getMidpoint().y - 300, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); + } + + if (SONG.song.toLowerCase() == 'tutorial') + { + FlxTween.tween(FlxG.camera, {zoom: 1}, (Conductor.stepCrochet * 4 / 1000), {ease: FlxEase.quadInOut}); + } + } } - - if (dad.curCharacter == 'mom') - vocals.volume = _variables.vvolume/100; - - if (SONG.song.toLowerCase() == 'tutorial') + + if (camZooming) { - tweenCamIn(); + FlxG.camera.zoom = FlxMath.lerp(FlxG.camera.zoom, defaultCamZoom, zoomLerp/(_variables.fps/60)); + camHUD.zoom = FlxMath.lerp(camHUD.zoom, 1, zoomLerp/(_variables.fps/60)); } - } - - if (PlayState.SONG.notes[Std.int(curStep / 16)].mustHitSection && camFollow.x != boyfriend.getMidpoint().x - 100) + + FlxG.watch.addQuick("beatShit", curBeat); + FlxG.watch.addQuick("stepShit", curStep); + + if (curSong == 'Fresh') { - camFollow.x = FlxMath.lerp(camFollow.x, boyfriend.getMidpoint().x - 100, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); - camFollow.y = FlxMath.lerp(camFollow.y, boyfriend.getMidpoint().y - 100, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); - - switch (curStage) + switch (curBeat) { - case 'limo': - camFollow.x = FlxMath.lerp(camFollow.x, boyfriend.getMidpoint().x - 300, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); - case 'mall': - camFollow.y = FlxMath.lerp(camFollow.y, boyfriend.getMidpoint().y - 200, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); - case 'school' | 'schoolEvil': - camFollow.x = FlxMath.lerp(camFollow.x, boyfriend.getMidpoint().x - 300, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); - camFollow.y = FlxMath.lerp(camFollow.y, boyfriend.getMidpoint().y - 300, (camLerp * _variables.cameraSpeed)/(_variables.fps/60)); + case 16: + camZooming = true; + gfSpeed = 2; + case 48: + gfSpeed = 1; + case 80: + gfSpeed = 2; + case 112: + gfSpeed = 1; + case 163: + // FlxG.sound.music.stop(); + // FlxG.switchState(new TitleState()); } - - if (SONG.song.toLowerCase() == 'tutorial') - { - FlxTween.tween(FlxG.camera, {zoom: 1}, (Conductor.stepCrochet * 4 / 1000), {ease: FlxEase.elasticInOut}); } - } - } - - if (camZooming) - { - FlxG.camera.zoom = FlxMath.lerp(FlxG.camera.zoom, defaultCamZoom, zoomLerp/(_variables.fps/60)); - camHUD.zoom = FlxMath.lerp(camHUD.zoom, 1, zoomLerp/(_variables.fps/60)); - } - - FlxG.watch.addQuick("beatShit", curBeat); - FlxG.watch.addQuick("stepShit", curStep); - - if (curSong == 'Fresh') - { - switch (curBeat) - { - case 16: - camZooming = true; - gfSpeed = 2; - case 48: - gfSpeed = 1; - case 80: - gfSpeed = 2; - case 112: - gfSpeed = 1; - case 163: - // FlxG.sound.music.stop(); - // FlxG.switchState(new TitleState()); - } - } - - if (curSong == 'Bopeebo') - { - switch (curBeat) - { - case 128, 129, 130: - vocals.volume = 0; - // FlxG.sound.music.stop(); - // FlxG.switchState(new PlayState()); - } - } - // better streaming of shit - - // RESET = Quick Game Over Screen - if (controls.RESET) - { - canDie = true; - health = -10; - trace("RESET = True"); - } - - // CHEAT = brandon's a pussy - if (controls.CHEAT) - { - health += 1; - trace("User is cheating!"); - } - - if (health <= -0.00001 && canDie && !_modifiers.Practice && !ended) - { - lives -= 1; - - if (_modifiers.FreezeSwitch) - { - missCounter = 0; - if (frozen) + + if (curSong == 'Bopeebo') + { + switch (curBeat) { - FlxG.sound.play(Paths.sound('Ice_Shatter'), _variables.svolume/100); - frozen = false; - freezeIndicator.alpha = 0; + case 128, 129, 130: + vocals.volume = 0; + // FlxG.sound.music.stop(); + // FlxG.switchState(new PlayState()); } - } - - if (lives <= 0) - { - boyfriend.stunned = true; - - persistentUpdate = false; - persistentDraw = false; - paused = true; - - vocals.stop(); - FlxG.sound.music.stop(); - - openSubState(new GameOverSubstate(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); - camHUD.angle = 0; - FlxG.camera.angle = 0; - - FlxG.game.scaleX = 1; - FlxG.game.x = 0; - FlxG.game.scaleY = 1; - FlxG.game.y = 0; - - // FlxG.switchState(new GameOverState(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); - - #if desktop - // Game Over doesn't get his own variable because it's only used here - DiscordClient.changePresence("Aw man, I died at " + detailsText, SONG.song + " (" + storyDifficultyText + ")", iconRPC); - #end - } - else - { - if (lives > 0) - { - FlxG.camera.flash(0xFFFF0000, 0.3 * SONG.bpm/100); - new FlxTimer().start(5 / 60, function(tmr:FlxTimer) - { - gf.playAnim('sad', true); - }); - FlxG.sound.play(Paths.sound('missnote2'), _variables.svolume/100); - health = 1/_modifiers.Lives * lives; } - } - } - - if (unspawnNotes[0] != null) - { - if (unspawnNotes[0].strumTime - Conductor.songPosition < 1500) - { - var dunceNote:Note = unspawnNotes[0]; - notes.add(dunceNote); - - var index:Int = unspawnNotes.indexOf(dunceNote); - unspawnNotes.splice(index, 1); - } - } - - if (generatedMusic) - { - notes.forEachAlive(function(daNote:Note) - { - if (daNote.y > FlxG.height) + // better streaming of shit + + // RESET = Quick Game Over Screen + if (controls.RESET) { - daNote.active = false; - daNote.visible = false; + canDie = true; + health = -10; + trace("RESET = True"); } - else + + // CHEAT = brandon's a pussy + if (controls.CHEAT) { - if (_modifiers.InvisibleNotes) - daNote.visible = false; - else - daNote.visible = true; - - daNote.active = true; + health += 1; + trace("User is cheating!"); } - - if (_modifiers.NoteSpeedSwitch) - speedNote = 1 + 1 * (_modifiers.NoteSpeed/100); - - if (_modifiers.DrunkNotesSwitch) - noteDrunk = _modifiers.DrunkNotes * 3; - - if (_modifiers.AccelNotesSwitch) - noteAccel += _modifiers.AccelNotes * 0.0001; - - daNote.y = ((strumLine.y - (Conductor.songPosition - daNote.strumTime + noteAccel + (_modifiers.DrunkNotes * Math.sin(Conductor.songPosition/300)))) * (0.45 * FlxMath.roundDecimal(SONG.speed, 2) * speedNote)); - - if (_modifiers.SnakeNotesSwitch) - daNote.x += (_modifiers.SnakeNotes * 0.025) * Math.sin(Conductor.songPosition/300); - - if ((_modifiers.ShortsightedSwitch && daNote.y > FlxG.height - (FlxG.height - strumLine.y) * (_modifiers.Shortsighted/100) - 11 * _modifiers.AccelNotes)) - daNote.alpha = 0; - else if ((_modifiers.ShortsightedSwitch && daNote.y <= FlxG.height - (FlxG.height - strumLine.y) * (_modifiers.Shortsighted/100) - 11 * _modifiers.AccelNotes)) - daNote.alpha = FlxMath.lerp(daNote.alpha, 1, camLerp/(_variables.fps/60)); - - if ((_modifiers.LongsightedSwitch && daNote.y > strumLine.y + (FlxG.height - strumLine.y) * (_modifiers.Longsighted/100) - 11 * _modifiers.AccelNotes)) - daNote.alpha = 1; - else if ((_modifiers.LongsightedSwitch && daNote.y <= strumLine.y + (FlxG.height - strumLine.y) * (_modifiers.Longsighted/100) - 11 * _modifiers.AccelNotes)) - daNote.alpha = FlxMath.lerp(daNote.alpha, 0, camLerp/(_variables.fps/60)); - - if (_modifiers.HyperNotesSwitch) - { - daNote.x += 0.25 * FlxG.random.int(Std.int(_modifiers.HyperNotes * -1), Std.int(_modifiers.HyperNotes)); - daNote.y += 0.25 * FlxG.random.int(Std.int(_modifiers.HyperNotes * -1), Std.int(_modifiers.HyperNotes)); - } - - // i am so fucking sorry for this if condition - if (daNote.isSustainNote - && daNote.y + daNote.offset.y <= strumLine.y + Note.swagWidth / 2 - && (!daNote.mustPress || (daNote.wasGoodHit || (daNote.prevNote.wasGoodHit && !daNote.canBeHit)))) + + if (health <= -0.00001 && canDie && !_modifiers.Practice && !ended) { - var swagRect = new FlxRect(0, strumLine.y + Note.swagWidth / 2 - daNote.y, daNote.width * 2, daNote.height * 2); - swagRect.y /= daNote.scale.y; - swagRect.height -= swagRect.y; - - daNote.clipRect = swagRect; - } - - if (_modifiers.FlippedNotes && !daNote.isSustainNote) + lives -= 1; + + if (_modifiers.FreezeSwitch) { - daNote.flipX = true; - daNote.flipY = true; + missCounter = 0; + if (frozen) + { + FlxG.sound.play(Paths.sound('Ice_Shatter'), _variables.svolume/100); + frozen = false; + freezeIndicator.alpha = 0; + } } - - if (!daNote.mustPress && daNote.wasGoodHit) - { - if (SONG.song != 'Tutorial') - camZooming = true; - - var altAnim:String = ""; - - if (SONG.notes[Math.floor(curStep / 16)] != null) + + if (lives <= 0) { - if (SONG.notes[Math.floor(curStep / 16)].altAnim) - altAnim = '-alt'; + boyfriend.stunned = true; + + persistentUpdate = false; + persistentDraw = false; + paused = true; + + vocals.stop(); + FlxG.sound.music.stop(); + + openSubState(new GameOverSubstate(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); + camHUD.angle = 0; + FlxG.camera.angle = 0; + + FlxG.game.scaleX = 1; + FlxG.game.x = 0; + FlxG.game.scaleY = 1; + FlxG.game.y = 0; + + // FlxG.switchState(new GameOverState(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); + + #if desktop + // Game Over doesn't get his own variable because it's only used here + DiscordClient.changePresence("Aw man, I died at " + detailsText, SONG.song + " (" + storyDifficultyText + ")", iconRPC); + #end } - - switch (Math.abs(daNote.noteData)) + else { - case 0: - dad.playAnim('singLEFT' + altAnim, true); - case 1: - dad.playAnim('singDOWN' + altAnim, true); - case 2: - dad.playAnim('singUP' + altAnim, true); - case 3: - dad.playAnim('singRIGHT' + altAnim, true); + if (lives > 0) + { + FlxG.camera.flash(0xFFFF0000, 0.3 * SONG.bpm/100); + new FlxTimer().start(5 / 60, function(tmr:FlxTimer) + { + gf.playAnim('sad', true); + }); + FlxG.sound.play(Paths.sound('missnote2'), _variables.svolume/100); + health = 1/_modifiers.Lives * lives; + } } - - dad.holdTimer = 0; - - if (SONG.needsVoices) - vocals.volume = _variables.vvolume/100; - - daNote.kill(); - notes.remove(daNote, true); - daNote.destroy(); } - - // WIP interpolation shit? Need to fix the pause issue - // daNote.y = (strumLine.y - (songTime - daNote.strumTime) * (0.45 * PlayState.SONG.speed)); - - if (daNote.y < -daNote.height - 25 * SONG.speed - 70 * _modifiers.NoteSpeed - 1.5 * _modifiers.DrunkNotes - 11 * _modifiers.AccelNotes - 128 * Math.abs(_modifiers.Offbeat/100)) + + if (unspawnNotes[0] != null) { - if (daNote.isSustainNote && daNote.wasGoodHit) + if (unspawnNotes[0].strumTime - Conductor.songPosition < 1500) { - daNote.kill(); - notes.remove(daNote, true); - daNote.destroy(); + var dunceNote:Note = unspawnNotes[0]; + notes.add(dunceNote); + + var index:Int = unspawnNotes.indexOf(dunceNote); + unspawnNotes.splice(index, 1); } - else + } + + if (generatedMusic) + { + notes.forEachAlive(function(daNote:Note) { - if (startedCountdown) + if (daNote.y > FlxG.height) { - if (_modifiers.HPLossSwitch) - health -= 0.0475 * _modifiers.HPLoss; + daNote.active = false; + daNote.visible = false; + } + else + { + if (_modifiers.InvisibleNotes) + daNote.visible = false; else - health -= 0.0475; - - if (_modifiers.Perfect) // if perfect - health = -10; - - if (_variables.muteMiss) - vocals.volume = 0; - - songScore -= Math.floor(10 + (_variables.comboP ? 0.3*combo : 0) * MenuModifiers.fakeMP); - - if ((daNote.isSustainNote && !daNote.wasGoodHit) || !daNote.isSustainNote) + daNote.visible = true; + + daNote.active = true; + } + + if (_modifiers.NoteSpeedSwitch) + speedNote = 1 + 1 * (_modifiers.NoteSpeed/100); + + if (_modifiers.DrunkNotesSwitch) + noteDrunk = _modifiers.DrunkNotes * 3; + + if (_modifiers.AccelNotesSwitch) + noteAccel += _modifiers.AccelNotes * 0.0001; + + daNote.y = ((strumLine.y - (Conductor.songPosition - daNote.strumTime + noteAccel + (_modifiers.DrunkNotes * Math.sin(Conductor.songPosition/300)))) * (0.45 * FlxMath.roundDecimal(SONG.speed, 2) * speedNote)); + + if (_modifiers.SnakeNotesSwitch) + daNote.x += (_modifiers.SnakeNotes * 0.025) * Math.sin(Conductor.songPosition/300); + + if ((_modifiers.ShortsightedSwitch && daNote.y > FlxG.height - (FlxG.height - strumLine.y) * (_modifiers.Shortsighted/100) - 11 * _modifiers.AccelNotes)) + daNote.alpha = 0; + else if ((_modifiers.ShortsightedSwitch && daNote.y <= FlxG.height - (FlxG.height - strumLine.y) * (_modifiers.Shortsighted/100) - 11 * _modifiers.AccelNotes)) + daNote.alpha = FlxMath.lerp(daNote.alpha, 1, miscLerp/(_variables.fps/60)); + + if ((_modifiers.LongsightedSwitch && daNote.y > strumLine.y + (FlxG.height - strumLine.y) * (_modifiers.Longsighted/100) - 11 * _modifiers.AccelNotes)) + daNote.alpha = 1; + else if ((_modifiers.LongsightedSwitch && daNote.y <= strumLine.y + (FlxG.height - strumLine.y) * (_modifiers.Longsighted/100) - 11 * _modifiers.AccelNotes)) + daNote.alpha = FlxMath.lerp(daNote.alpha, 0, miscLerp/(_variables.fps/60)); + + if (_modifiers.HyperNotesSwitch) + { + daNote.x += 0.25 * FlxG.random.int(Std.int(_modifiers.HyperNotes * -1), Std.int(_modifiers.HyperNotes)); + daNote.y += 0.25 * FlxG.random.int(Std.int(_modifiers.HyperNotes * -1), Std.int(_modifiers.HyperNotes)); + } + + // i am so fucking sorry for this if condition + if (daNote.isSustainNote + && daNote.y + daNote.offset.y <= strumLine.y + Note.swagWidth / 2 + && (!daNote.mustPress || (daNote.wasGoodHit || (daNote.prevNote.wasGoodHit && !daNote.canBeHit)))) + { + var swagRect = new FlxRect(0, strumLine.y + Note.swagWidth / 2 - daNote.y, daNote.width * 2, daNote.height * 2); + swagRect.y /= daNote.scale.y; + swagRect.height -= swagRect.y; + + daNote.clipRect = swagRect; + } + + if (_modifiers.FlippedNotes && !daNote.isSustainNote) + { + daNote.flipX = true; + daNote.flipY = true; + } + + if (!daNote.mustPress && daNote.wasGoodHit) + { + if (SONG.song != 'Tutorial') + camZooming = true; + + var altAnim:String = ""; + + if (SONG.notes[Math.floor(curStep / 16)] != null) + { + if (SONG.notes[Math.floor(curStep / 16)].altAnim) + altAnim = '-alt'; + } + + switch (Math.abs(daNote.noteData)) + { + case 0: + dad.playAnim('singLEFT' + altAnim, true); + case 1: + dad.playAnim('singDOWN' + altAnim, true); + case 2: + dad.playAnim('singUP' + altAnim, true); + case 3: + dad.playAnim('singRIGHT' + altAnim, true); + } + + dad.holdTimer = 0; + + if (SONG.needsVoices) + vocals.volume = _variables.vvolume/100; + + daNote.kill(); + notes.remove(daNote, true); + daNote.destroy(); + } + + // WIP interpolation shit? Need to fix the pause issue + // daNote.y = (strumLine.y - (songTime - daNote.strumTime) * (0.45 * PlayState.SONG.speed)); + + if (daNote.y < -daNote.height - 25 * SONG.speed - 70 * _modifiers.NoteSpeed - 1.5 * _modifiers.DrunkNotes - 11 * _modifiers.AccelNotes - 128 * Math.abs(_modifiers.Offbeat/100)) + { + if (daNote.isSustainNote && daNote.wasGoodHit) + { + daNote.kill(); + notes.remove(daNote, true); + daNote.destroy(); + } + else + { + if (startedCountdown) { - updateAccuracy(); - misses ++; - combo = 0; + if (_modifiers.HPLossSwitch) + health -= 0.0475 * _modifiers.HPLoss; + else + health -= 0.0475; + + if (_modifiers.Perfect) // if perfect + health = -10; + switch (daNote.noteData) + { + case 0: + boyfriend.playAnim('singLEFTmiss', true); + case 1: + boyfriend.playAnim('singDOWNmiss', true); + case 2: + boyfriend.playAnim('singUPmiss', true); + case 3: + boyfriend.playAnim('singRIGHTmiss', true); + } + if (_variables.muteMiss) + vocals.volume = 0; + + songScore -= Math.floor(10 + (_variables.comboP ? 0.3*combo : 0) * MenuModifiers.fakeMP); + + if ((daNote.isSustainNote && !daNote.wasGoodHit) || !daNote.isSustainNote) + { + updateAccuracy(); + misses ++; + combo = 0; + } + + if (!frozen && _modifiers.FreezeSwitch) + { + missCounter++; + freezeIndicator.alpha = missCounter / (31 - _modifiers.Freeze); + } + + if (_modifiers.FreezeSwitch && missCounter >= 31 - _modifiers.Freeze) + freezeBF(); } - - if (!frozen && _modifiers.FreezeSwitch) - { - missCounter++; - freezeIndicator.alpha = missCounter / (31 - _modifiers.Freeze); } - - if (_modifiers.FreezeSwitch && missCounter >= 31 - _modifiers.Freeze) - freezeBF(); + + daNote.active = false; + daNote.visible = false; + + daNote.kill(); + notes.remove(daNote, true); + daNote.destroy(); } - } - - daNote.active = false; - daNote.visible = false; - - daNote.kill(); - notes.remove(daNote, true); - daNote.destroy(); + }); } - }); - } - - hearts.forEach(function(heart:FlxSprite) + + hearts.forEach(function(heart:FlxSprite) + { + if (heart.ID > (lives - 1)) + { + heart.angle = FlxMath.lerp(heart.angle, 30, miscLerp/(_variables.fps/60)); + heart.y = FlxMath.lerp(heart.y, FlxG.height + heart.height + 100, miscLerp/(_variables.fps/60)); + if (heart.y >= FlxG.height + heart.height) + heart.kill(); + } + }); + + if (!inCutscene) + keyShit(); + + #if debug + if (FlxG.keys.justPressed.ONE) + endSong(); + #end + } + + function endSong():Void { - if (heart.ID > (lives - 1)) + canPause = false; + FlxG.sound.music.volume = 0; + vocals.volume = 0; + + camHUD.angle = 0; + + canDie = false; + + if (SONG.validScore) { - heart.angle = FlxMath.lerp(heart.angle, 30, camLerp/(_variables.fps/60)); - heart.y = FlxMath.lerp(heart.y, FlxG.height + heart.height + 100, camLerp/(_variables.fps/60)); - if (heart.y >= FlxG.height + heart.height) - heart.kill(); + #if !switch + Highscore.saveScore(SONG.song, songScore, storyDifficulty); + #end } - }); - - if (!inCutscene) - keyShit(); - - #if debug - if (FlxG.keys.justPressed.ONE) - endSong(); - #end - } - - function endSong():Void + ended = true; + + new FlxTimer().start(0.1, function(tmr:FlxTimer) + { + camHUD.alpha -= 1 / 10; + }, 10); + + switch (gameplayArea) + { + case "Story": + campaignScore += songScore; + campaignAccuracy += accuracy; + + storyPlaylist.remove(storyPlaylist[0]); + + if (storyPlaylist.length <= 0) + { + campaignAccuracy /= 3; + + transIn = FlxTransitionableState.defaultTransIn; + transOut = FlxTransitionableState.defaultTransOut; + + // if () + MenuWeek.weekUnlocked[Std.int(Math.min(storyWeek + 1, MenuWeek.weekUnlocked.length - 1))] = true; + + if (SONG.validScore) + { + NGio.unlockMedal(60961); + Highscore.saveWeekScore(storyWeek, campaignScore, storyDifficulty); + } + + FlxG.save.data.weekUnlocked = MenuWeek.weekUnlocked; + FlxG.save.flush(); + } + else + { + if (SONG.song.toLowerCase() == 'eggnog') + { + var blackShit:FlxSprite = new FlxSprite(-FlxG.width * FlxG.camera.zoom, + -FlxG.height * FlxG.camera.zoom).makeGraphic(FlxG.width * 3, FlxG.height * 3, FlxColor.BLACK); + blackShit.scrollFactor.set(); + add(blackShit); + camHUD.visible = false; + + FlxG.sound.play(Paths.sound('Lights_Shut_off'), _variables.svolume/100); + } + + FlxTransitionableState.skipNextTransIn = true; + FlxTransitionableState.skipNextTransOut = true; + prevCamFollow = camFollow; + } + case "Freeplay": + } + + openSubState(new RankingSubstate(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); + } + + var endingSong:Bool = false; + + var hits:Array = []; + var timeShown = 0; + var currentTimingShown:FlxText = null; + +private function popUpScore(strumtime:Float):Void { - canPause = false; - FlxG.sound.music.volume = 0; - vocals.volume = 0; - - camHUD.angle = 0; - - canDie = false; - - if (SONG.validScore) - { - #if !switch - Highscore.saveScore(SONG.song, songScore, storyDifficulty); - #end - } - ended = true; - - new FlxTimer().start(0.1, function(tmr:FlxTimer) - { - camHUD.alpha -= 1 / 10; - }, 10); - - switch (gameplayArea) - { - case "Story": - campaignScore += songScore; - campaignAccuracy += accuracy; - - storyPlaylist.remove(storyPlaylist[0]); - - if (storyPlaylist.length <= 0) + var noteDiff:Float = strumtime - Conductor.songPosition; + // boyfriend.playAnim('hey'); + vocals.volume = _variables.vvolume/100; + + var placement:String = Std.string(combo); + + var coolText:FlxText = new FlxText(0, 0, 0, placement, 32); + coolText.screenCenter(); + coolText.cameras = [camHUD]; + // + + var rating:FlxSprite = new FlxSprite(); + var timing:FlxSprite = new FlxSprite(); + var score:Int = 350; + + var daRating:String = "sick"; + var daTiming:String = ""; + + //Sweet Math.abs + + if (Math.abs(noteDiff) > Conductor.safeZoneOffset * 0.9) { - campaignAccuracy /= 3; - - transIn = FlxTransitionableState.defaultTransIn; - transOut = FlxTransitionableState.defaultTransOut; - - // if () - MenuWeek.weekUnlocked[Std.int(Math.min(storyWeek + 1, MenuWeek.weekUnlocked.length - 1))] = true; - - if (SONG.validScore) - { - NGio.unlockMedal(60961); - Highscore.saveWeekScore(storyWeek, campaignScore, storyDifficulty); - } - - FlxG.save.data.weekUnlocked = MenuWeek.weekUnlocked; - FlxG.save.flush(); + daRating = 'shit'; + score = 50; + shits++; + } + else if (Math.abs(noteDiff) > Conductor.safeZoneOffset * 0.75) + { + daRating = 'bad'; + score = 100; + bads++; + } + else if (Math.abs(noteDiff) > Conductor.safeZoneOffset * 0.2) + { + daRating = 'good'; + score = 200; + goods++; + } + + if (daRating == "sick") + sicks++; + + if (noteDiff > Conductor.safeZoneOffset * 0.1) + daTiming = "early"; + else if (noteDiff < Conductor.safeZoneOffset * -0.1) + daTiming = "late"; + + switch (_variables.accuracyType) + { + case 'simple': + totalNotesHit += 1; + case 'complex': + if (noteDiff > Conductor.safeZoneOffset * Math.abs(0.1)) + totalNotesHit += 1 - Math.abs(noteDiff/200); //seems like the sweet spot + else + totalNotesHit += 1; //this feels so much better than you think, and saves up code space + } + + songScore += Math.floor((score + (_variables.comboP ? 2*combo : 0)) * MenuModifiers.fakeMP); + + /* if (combo > 60) + daRating = 'sick'; + else if (combo > 12) + daRating = 'good' + else if (combo > 4) + daRating = 'bad'; + */ + + var pixelShitPart1:String = ""; + var pixelShitPart2:String = ''; + + if (curStage.startsWith('school')) + { + pixelShitPart1 = 'weeb/pixelUI/'; + pixelShitPart2 = '-pixel'; + } + + rating.loadGraphic(Paths.image(pixelShitPart1 + daRating + pixelShitPart2)); + rating.screenCenter(); + rating.x = coolText.x - 40; + rating.y -= 60; + rating.acceleration.y = 550; + rating.velocity.y -= FlxG.random.int(140, 175); + rating.velocity.x -= FlxG.random.int(0, 10); + rating.cameras = [camHUD]; + + timing.loadGraphic(Paths.image(pixelShitPart1 + daTiming + pixelShitPart2)); + timing.screenCenter(); + timing.x = coolText.x - 80; + timing.y -= 10; + timing.acceleration.y = 550; + timing.velocity.y -= FlxG.random.int(140, 175); + timing.velocity.x -= FlxG.random.int(0, 10); + timing.cameras = [camHUD]; + + var comboSpr:FlxSprite = new FlxSprite().loadGraphic(Paths.image(pixelShitPart1 + 'combo' + pixelShitPart2)); + comboSpr.screenCenter(); + comboSpr.x = coolText.x; + comboSpr.acceleration.y = 600; + comboSpr.velocity.y -= 150; + comboSpr.cameras = [camHUD]; + + comboSpr.velocity.x += FlxG.random.int(1, 10); + + var msTiming = truncateFloat(noteDiff, 3); + + if (currentTimingShown != null) + remove(currentTimingShown); + + currentTimingShown = new FlxText(0,0,0,"0ms"); + timeShown = 0; + + if (Math.abs(noteDiff) > Conductor.safeZoneOffset * 0.75) + currentTimingShown.color = FlxColor.RED; + else if (Math.abs(noteDiff) > Conductor.safeZoneOffset * 0.2) + currentTimingShown.color = FlxColor.GREEN; + else if (Math.abs(noteDiff) <= Conductor.safeZoneOffset * 0.2) + currentTimingShown.color = FlxColor.CYAN; + + currentTimingShown.borderStyle = OUTLINE; + currentTimingShown.borderSize = 1; + currentTimingShown.borderColor = FlxColor.BLACK; + currentTimingShown.text = msTiming + "ms"; + currentTimingShown.size = 20; + currentTimingShown.screenCenter(); + currentTimingShown.x = coolText.x + 70; + currentTimingShown.y = rating.y + 100; + currentTimingShown.acceleration.y = 600; + currentTimingShown.velocity.y -= 150; + comboSpr.velocity.x += FlxG.random.int(1, 10); + + if (currentTimingShown.alpha != 1) + currentTimingShown.alpha = 1; + + currentTimingShown.cameras = [camHUD]; + + if (_variables.ratingDisplay) + add(rating); + + if (daTiming != "" && _variables.timingDisplay) + add(timing); + + if (_variables.timingDisplay) + add(currentTimingShown); + + if (!curStage.startsWith('school')) + { + rating.setGraphicSize(Std.int(rating.width * 0.7)); + rating.antialiasing = true; + comboSpr.setGraphicSize(Std.int(comboSpr.width * 0.7)); + comboSpr.antialiasing = true; + timing.setGraphicSize(Std.int(timing.width * 0.7)); + timing.antialiasing = true; } else { - if (SONG.song.toLowerCase() == 'eggnog') + rating.setGraphicSize(Std.int(rating.width * daPixelZoom * 0.7)); + comboSpr.setGraphicSize(Std.int(comboSpr.width * daPixelZoom * 0.7)); + timing.setGraphicSize(Std.int(timing.width * daPixelZoom * 0.7)); + } + + comboSpr.updateHitbox(); + rating.updateHitbox(); + timing.updateHitbox(); + + var seperatedScore:Array = []; + + var comboSplit:Array = (combo + "").split(''); + + if (comboSplit.length == 2) + seperatedScore.push(0); // make sure theres a 0 in front or it looks weird lol! + + for(i in 0...comboSplit.length) + { + var str:String = comboSplit[i]; + seperatedScore.push(Std.parseInt(str)); + } + + var daLoop:Int = 0; + for (i in seperatedScore) + { + var numScore:FlxSprite = new FlxSprite().loadGraphic(Paths.image(pixelShitPart1 + 'num' + Std.int(i) + pixelShitPart2)); + numScore.screenCenter(); + numScore.x = coolText.x + (43 * daLoop) - 90; + numScore.y += 80; + numScore.cameras = [camHUD]; + + if (!curStage.startsWith('school')) { - var blackShit:FlxSprite = new FlxSprite(-FlxG.width * FlxG.camera.zoom, - -FlxG.height * FlxG.camera.zoom).makeGraphic(FlxG.width * 3, FlxG.height * 3, FlxColor.BLACK); - blackShit.scrollFactor.set(); - add(blackShit); - camHUD.visible = false; - - FlxG.sound.play(Paths.sound('Lights_Shut_off'), _variables.svolume/100); + numScore.antialiasing = true; + numScore.setGraphicSize(Std.int(numScore.width * 0.5)); } - - FlxTransitionableState.skipNextTransIn = true; - FlxTransitionableState.skipNextTransOut = true; - prevCamFollow = camFollow; + else + { + numScore.setGraphicSize(Std.int(numScore.width * daPixelZoom)); + } + numScore.updateHitbox(); + + numScore.acceleration.y = FlxG.random.int(200, 300); + numScore.velocity.y -= FlxG.random.int(140, 160); + numScore.velocity.x = FlxG.random.float(-5, 5); + + if ((combo >= 10 || combo == 0) && _variables.comboDisplay) + add(numScore); + + FlxTween.tween(numScore, {alpha: 0}, 0.2, { + onComplete: function(tween:FlxTween) + { + numScore.destroy(); + }, + startDelay: Conductor.crochet * 0.002 + }); + + daLoop++; } - case "Freeplay": - } - - openSubState(new RankingSubstate(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); - } - - var endingSong:Bool = false; - - var hits:Array = []; - var timeShown = 0; - var currentTimingShown:FlxText = null; - - private function popUpScore(strumtime:Float):Void - { - var noteDiff:Float = strumtime - Conductor.songPosition; - // boyfriend.playAnim('hey'); - vocals.volume = _variables.vvolume/100; - - var placement:String = Std.string(combo); - - var coolText:FlxText = new FlxText(0, 0, 0, placement, 32); - coolText.screenCenter(); - coolText.cameras = [camHUD]; - // - - var rating:FlxSprite = new FlxSprite(); - var timing:FlxSprite = new FlxSprite(); - var score:Int = 350; - - var daRating:String = "sick"; - var daTiming:String = ""; - - //Sweet Math.abs - - if (Math.abs(noteDiff) > Conductor.safeZoneOffset * 0.9) - { - daRating = 'shit'; - score = 50; - shits++; - } - else if (Math.abs(noteDiff) > Conductor.safeZoneOffset * 0.75) - { - daRating = 'bad'; - score = 100; - bads++; - } - else if (Math.abs(noteDiff) > Conductor.safeZoneOffset * 0.2) - { - daRating = 'good'; - score = 200; - goods++; - } - - if (daRating == "sick") - sicks++; - - if (noteDiff > Conductor.safeZoneOffset * 0.1) - daTiming = "early"; - else if (noteDiff < Conductor.safeZoneOffset * -0.1) - daTiming = "late"; - - switch (_variables.accuracyType) - { - case 'simple': - totalNotesHit += 1; - case 'complex': - if (noteDiff > Conductor.safeZoneOffset * Math.abs(0.1)) - totalNotesHit += 1 - Math.abs(noteDiff/200); //seems like the sweet spot - else - totalNotesHit += 1; //this feels so much better than you think, and saves up code space - } - - songScore += Math.floor((score + (_variables.comboP ? 2*combo : 0)) * MenuModifiers.fakeMP); - - /* if (combo > 60) - daRating = 'sick'; - else if (combo > 12) - daRating = 'good' - else if (combo > 4) - daRating = 'bad'; - */ - - var pixelShitPart1:String = ""; - var pixelShitPart2:String = ''; - - if (curStage.startsWith('school')) - { - pixelShitPart1 = 'weeb/pixelUI/'; - pixelShitPart2 = '-pixel'; - } - - rating.loadGraphic(Paths.image(pixelShitPart1 + daRating + pixelShitPart2)); - rating.screenCenter(); - rating.x = coolText.x - 40; - rating.y -= 60; - rating.acceleration.y = 550; - rating.velocity.y -= FlxG.random.int(140, 175); - rating.velocity.x -= FlxG.random.int(0, 10); - rating.cameras = [camHUD]; - - timing.loadGraphic(Paths.image(pixelShitPart1 + daTiming + pixelShitPart2)); - timing.screenCenter(); - timing.x = coolText.x - 80; - timing.y -= 10; - timing.acceleration.y = 550; - timing.velocity.y -= FlxG.random.int(140, 175); - timing.velocity.x -= FlxG.random.int(0, 10); - timing.cameras = [camHUD]; - - var comboSpr:FlxSprite = new FlxSprite().loadGraphic(Paths.image(pixelShitPart1 + 'combo' + pixelShitPart2)); - comboSpr.screenCenter(); - comboSpr.x = coolText.x; - comboSpr.acceleration.y = 600; - comboSpr.velocity.y -= 150; - comboSpr.cameras = [camHUD]; - - comboSpr.velocity.x += FlxG.random.int(1, 10); - - var msTiming = truncateFloat(noteDiff, 3); - - if (currentTimingShown != null) - remove(currentTimingShown); - - currentTimingShown = new FlxText(0,0,0,"0ms"); - timeShown = 0; - - if (Math.abs(noteDiff) > Conductor.safeZoneOffset * 0.75) - currentTimingShown.color = FlxColor.RED; - else if (Math.abs(noteDiff) > Conductor.safeZoneOffset * 0.2) - currentTimingShown.color = FlxColor.GREEN; - else if (Math.abs(noteDiff) <= Conductor.safeZoneOffset * 0.2) - currentTimingShown.color = FlxColor.CYAN; - - currentTimingShown.borderStyle = OUTLINE; - currentTimingShown.borderSize = 1; - currentTimingShown.borderColor = FlxColor.BLACK; - currentTimingShown.text = msTiming + "ms"; - currentTimingShown.size = 20; - currentTimingShown.screenCenter(); - currentTimingShown.x = coolText.x + 70; - currentTimingShown.y = rating.y + 100; - currentTimingShown.acceleration.y = 600; - currentTimingShown.velocity.y -= 150; - comboSpr.velocity.x += FlxG.random.int(1, 10); - - if (currentTimingShown.alpha != 1) - currentTimingShown.alpha = 1; - - currentTimingShown.cameras = [camHUD]; - - if (_variables.ratingDisplay) - add(rating); - - if (daTiming != "" && _variables.timingDisplay) - add(timing); - - if (_variables.timingDisplay) - add(currentTimingShown); - - if (!curStage.startsWith('school')) - { - rating.setGraphicSize(Std.int(rating.width * 0.7)); - rating.antialiasing = true; - comboSpr.setGraphicSize(Std.int(comboSpr.width * 0.7)); - comboSpr.antialiasing = true; - timing.setGraphicSize(Std.int(timing.width * 0.7)); - timing.antialiasing = true; - } - else - { - rating.setGraphicSize(Std.int(rating.width * daPixelZoom * 0.7)); - comboSpr.setGraphicSize(Std.int(comboSpr.width * daPixelZoom * 0.7)); - timing.setGraphicSize(Std.int(timing.width * daPixelZoom * 0.7)); - } - - comboSpr.updateHitbox(); - rating.updateHitbox(); - timing.updateHitbox(); - - var seperatedScore:Array = []; + /* + trace(combo); + trace(seperatedScore); + */ - var comboSplit:Array = (combo + "").split(''); - - if (comboSplit.length == 2) - seperatedScore.push(0); // make sure theres a 0 in front or it looks weird lol! - - for(i in 0...comboSplit.length) - { - var str:String = comboSplit[i]; - seperatedScore.push(Std.parseInt(str)); - } - - var daLoop:Int = 0; - for (i in seperatedScore) - { - var numScore:FlxSprite = new FlxSprite().loadGraphic(Paths.image(pixelShitPart1 + 'num' + Std.int(i) + pixelShitPart2)); - numScore.screenCenter(); - numScore.x = coolText.x + (43 * daLoop) - 90; - numScore.y += 80; - numScore.cameras = [camHUD]; - - if (!curStage.startsWith('school')) - { - numScore.antialiasing = true; - numScore.setGraphicSize(Std.int(numScore.width * 0.5)); - } - else - { - numScore.setGraphicSize(Std.int(numScore.width * daPixelZoom)); - } - numScore.updateHitbox(); - - numScore.acceleration.y = FlxG.random.int(200, 300); - numScore.velocity.y -= FlxG.random.int(140, 160); - numScore.velocity.x = FlxG.random.float(-5, 5); - - if ((combo >= 10 || combo == 0) && _variables.comboDisplay) - add(numScore); - - FlxTween.tween(numScore, {alpha: 0}, 0.2, { - onComplete: function(tween:FlxTween) - { - numScore.destroy(); - }, - startDelay: Conductor.crochet * 0.002 - }); - - daLoop++; - } - /* - trace(combo); - trace(seperatedScore); - */ - - coolText.text = Std.string(seperatedScore); - // add(coolText); - - FlxTween.tween(rating, {alpha: 0}, 0.2, { - startDelay: Conductor.crochet * 0.001, - onUpdate: function(tween:FlxTween) - { - if (currentTimingShown != null) - currentTimingShown.alpha -= 0.02; - timeShown++; - } - }); - - FlxTween.tween(timing, {alpha: 0}, 0.2, { - startDelay: Conductor.crochet * 0.001 - }); - - FlxTween.tween(comboSpr, {alpha: 0}, 0.2, { - onComplete: function(tween:FlxTween) - { - coolText.destroy(); - comboSpr.destroy(); - if (currentTimingShown != null && timeShown >= 20) + coolText.text = Std.string(seperatedScore); + // add(coolText); + + FlxTween.tween(rating, {alpha: 0}, 0.2, { + startDelay: Conductor.crochet * 0.001, + onUpdate: function(tween:FlxTween) { - remove(currentTimingShown); - currentTimingShown = null; + if (currentTimingShown != null) + currentTimingShown.alpha -= 0.02; + timeShown++; } - rating.destroy(); - }, - startDelay: Conductor.crochet * 0.001 - }); - - curSection += 1; + }); + + FlxTween.tween(timing, {alpha: 0}, 0.2, { + startDelay: Conductor.crochet * 0.001 + }); + + FlxTween.tween(comboSpr, {alpha: 0}, 0.2, { + onComplete: function(tween:FlxTween) + { + coolText.destroy(); + comboSpr.destroy(); + if (currentTimingShown != null && timeShown >= 10) + { + remove(currentTimingShown); + currentTimingShown = null; + } + rating.destroy(); + }, + startDelay: Conductor.crochet * 0.001 + }); + + curSection += 1; } - var upHold:Bool = false; - var downHold:Bool = false; - var rightHold:Bool = false; - var leftHold:Bool = false; - - private function keyShit():Void +private function keyShit():Void { // HOLDING var up = controls.UP; @@ -2913,56 +2923,59 @@ class PlayState extends MusicBeatState notes.forEachAlive(function(daNote:Note) { if (daNote.canBeHit && daNote.mustPress && !daNote.tooLate && !daNote.wasGoodHit) - { - // the sorting probably doesn't need to be in here? who cares lol - possibleNotes.push(daNote); - possibleNotes.sort((a, b) -> Std.int(a.strumTime - b.strumTime)); - - ignoreList.push(daNote.noteData); - } + { + // the sorting probably doesn't need to be in here? who cares lol + possibleNotes.push(daNote); + possibleNotes.sort((a, b) -> Std.int(a.strumTime - b.strumTime)); + + ignoreList.push(daNote.noteData); + } }); if (possibleNotes.length > 0) { var daNote = possibleNotes[0]; + if (perfectMode) + noteCheck(true, daNote); + // Jump notes if (possibleNotes.length >= 2) { if (possibleNotes[0].strumTime == possibleNotes[1].strumTime) + { + for (coolNote in possibleNotes) { - for (coolNote in possibleNotes) + if (controlArray[coolNote.noteData]) + goodNoteHit(coolNote); + else { - if (controlArray[coolNote.noteData]) - goodNoteHit(coolNote); - else + var inIgnoreList:Bool = false; + for (shit in 0...ignoreList.length) { - var inIgnoreList:Bool = false; - for (shit in 0...ignoreList.length) - { - if (controlArray[ignoreList[shit]]) - inIgnoreList = true; - } - if (!inIgnoreList && _variables.spamPrevention) - badNoteCheck(); + if (controlArray[ignoreList[shit]]) + inIgnoreList = true; } + if (!inIgnoreList && _variables.spamPrevention) + badNoteCheck(); } } - else if (possibleNotes[0].noteData == possibleNotes[1].noteData) - { - noteCheck(controlArray, daNote); - } - else + } + else if (possibleNotes[0].noteData == possibleNotes[1].noteData) + { + noteCheck(controlArray[daNote.noteData], daNote); + } + else + { + for (coolNote in possibleNotes) { - for (coolNote in possibleNotes) - { - noteCheck(controlArray, daNote); - } + noteCheck(controlArray[coolNote.noteData], coolNote); } + } } else // regular notes? { - noteCheck(controlArray, daNote); + noteCheck(controlArray[daNote.noteData], daNote); } /* if (controlArray[daNote.noteData]) @@ -2970,30 +2983,29 @@ class PlayState extends MusicBeatState */ // trace(daNote.noteData); /* - switch (daNote.noteData) + switch (daNote.noteData) + { + case 2: // NOTES YOU JUST PRESSED + if (upP || rightP || downP || leftP) + noteCheck(upP, daNote); + case 3: + if (upP || rightP || downP || leftP) + noteCheck(rightP, daNote); + case 1: + if (upP || rightP || downP || leftP) + noteCheck(downP, daNote); + case 0: + if (upP || rightP || downP || leftP) + noteCheck(leftP, daNote); + } + //this is already done in noteCheck / goodNoteHit + if (daNote.wasGoodHit) { - case 2: // NOTES YOU JUST PRESSED - if (upP || rightP || downP || leftP) - noteCheck(upP, daNote); - case 3: - if (upP || rightP || downP || leftP) - noteCheck(rightP, daNote); - case 1: - if (upP || rightP || downP || leftP) - noteCheck(downP, daNote); - case 0: - if (upP || rightP || downP || leftP) - noteCheck(leftP, daNote); + daNote.kill(); + notes.remove(daNote, true); + daNote.destroy(); } - - //this is already done in noteCheck / goodNoteHit */ - if (daNote.wasGoodHit) - { - daNote.kill(); - notes.remove(daNote, true); - daNote.destroy(); - } } else { @@ -3002,7 +3014,7 @@ class PlayState extends MusicBeatState } } - if (((up || right || down || left) || (upHold || downHold || leftHold || rightHold)) && !boyfriend.stunned && generatedMusic && !frozen && !ended) + if ((up || right || down || left) && !boyfriend.stunned && generatedMusic && !frozen && !ended || (upP || downP || leftP || rightP) && !boyfriend.stunned && generatedMusic && !frozen && !ended) { notes.forEachAlive(function(daNote:Note) { @@ -3028,24 +3040,24 @@ class PlayState extends MusicBeatState }); } - if (boyfriend.holdTimer > Conductor.stepCrochet * 4 * 0.001 && !up && !down && !right && !left && !frozen && !ended) + if (boyfriend.holdTimer > Conductor.stepCrochet * 4 * 0.001 && !up && !down && !right && !left) { if (boyfriend.animation.curAnim.name.startsWith('sing') && !boyfriend.animation.curAnim.name.endsWith('miss')) - { - if (!frozen) { - boyfriend.playAnim('idle'); - if (_modifiers.FrightSwitch) + if (!frozen) { - if (_modifiers.Fright >= 50 && _modifiers.Fright < 100) - boyfriend.playAnim('scared'); - else if (_modifiers.Fright >= 100) - boyfriend.playAnim('worried'); + boyfriend.playAnim('idle'); + if (_modifiers.FrightSwitch) + { + if (_modifiers.Fright >= 50 && _modifiers.Fright < 100) + boyfriend.playAnim('scared'); + else if (_modifiers.Fright >= 100) + boyfriend.playAnim('worried'); + } } + else + boyfriend.playAnim('frozen'); } - else - boyfriend.playAnim('frozen'); - } } playerStrums.forEach(function(spr:FlxSprite) @@ -3119,6 +3131,14 @@ class PlayState extends MusicBeatState // FlxG.sound.play(Paths.sound('missnote1'), 1, false); // FlxG.log.add('played imss note'); + boyfriend.stunned = true; + + // get stunned for 5 seconds + new FlxTimer().start(5 / 60, function(tmr:FlxTimer) + { + boyfriend.stunned = false; + }); + switch (direction) { case 0: @@ -3164,100 +3184,108 @@ class PlayState extends MusicBeatState { // just double pasting this shit cuz fuk u // REDO THIS SYSTEM! + var doNothing:Bool = false; var upP = controls.UP_P; var rightP = controls.RIGHT_P; var downP = controls.DOWN_P; var leftP = controls.LEFT_P; - - if (leftP) - noteMiss(0); - if (downP) - noteMiss(1); - if (upP) - noteMiss(2); - if (rightP) - noteMiss(3); - - updateAccuracy(); + notes.forEachAlive(function(daNote:Note) + { + if (daNote.canBeHit) + doNothing = true; + }); + if (!doNothing) { + Note.setCanMiss(0, true); + Note.setCanMiss(1, true); + Note.setCanMiss(2, true); + Note.setCanMiss(3, true); + } + //if (canMiss) { + if (leftP && Note.canMissLeft) + noteMiss(0); + if (downP && Note.canMissDown) + noteMiss(1); + if (upP && Note.canMissUp) + noteMiss(2); + if (rightP && Note.canMissRight) + noteMiss(3); + //} } - var mashing:Int = 0; - var mashViolations:Int = 0; - - function noteCheck(controlArray:Array, note:Note):Void + function noteCheck(keyP:Bool, note:Note):Void + { + if (keyP) + goodNoteHit(note); + else { - if (controlArray[note.noteData]) - goodNoteHit(note); - else - { - if (_variables.spamPrevention) - badNoteCheck(); - } + if (_variables.spamPrevention) + badNoteCheck(); } + } function goodNoteHit(note:Note):Void { if (!note.wasGoodHit) { - if (!note.isSustainNote) - { - notesHitArray.push(Date.now()); - popUpScore(note.strumTime); - combo += 1; - } - - if (note.isSustainNote) - totalNotesHit += 1; - - if (note.noteData >= 0) - { - if (_modifiers.HPGainSwitch) - health += 0.023 * _modifiers.HPGain; - else - health += 0.023; - } - else - { - if (_modifiers.HPGainSwitch) - health += 0.004 * _modifiers.HPGain; + if (!note.isSustainNote) + { + notesHitArray.push(Date.now()); + popUpScore(note.strumTime); + combo += 1; + } + + if (note.isSustainNote) + totalNotesHit += 1; + + if (note.noteData >= 0) + { + if (_modifiers.HPGainSwitch) + health += 0.023 * _modifiers.HPGain; + else + health += 0.023; + } else - health += 0.004; - } - - switch (note.noteData) - { - case 0: - boyfriend.playAnim('singLEFT', true); - case 1: - boyfriend.playAnim('singDOWN', true); - case 2: - boyfriend.playAnim('singUP', true); - case 3: - boyfriend.playAnim('singRIGHT', true); - } - - playerStrums.forEach(function(spr:FlxSprite) - { - if (Math.abs(note.noteData) == spr.ID) { - spr.animation.play('confirm', true); + if (_modifiers.HPGainSwitch) + health += 0.004 * _modifiers.HPGain; + else + health += 0.004; } - }); - - note.wasGoodHit = true; - vocals.volume = _variables.vvolume/100; - - if (!note.isSustainNote) - { - note.kill(); - notes.remove(note, true); - note.destroy(); - } - - missCounter = 0; - freezeIndicator.alpha = 0; - - updateAccuracy(); + + switch (note.noteData) + { + case 0: + boyfriend.playAnim('singLEFT', true); + case 1: + boyfriend.playAnim('singDOWN', true); + case 2: + boyfriend.playAnim('singUP', true); + case 3: + boyfriend.playAnim('singRIGHT', true); + } + + playerStrums.forEach(function(spr:FlxSprite) + { + if (Math.abs(note.noteData) == spr.ID) + { + spr.animation.play('confirm', true); + } + }); + + note.wasGoodHit = true; + vocals.volume = _variables.vvolume/100; + + if (!note.isSustainNote) + { + note.kill(); + notes.remove(note, true); + note.destroy(); + } + + missCounter = 0; + freezeIndicator.alpha = 0; + + updateAccuracy(); } } @@ -3273,7 +3301,7 @@ class PlayState extends MusicBeatState function fastCarDrive() { - FlxG.sound.play(Paths.soundRandom('carPass', 0, 1), 0.7*_variables.svolume/100); + FlxG.sound.play(Paths.soundRandom('carPass', 0, 1), 0.7); fastCar.velocity.x = (FlxG.random.int(170, 220) / FlxG.elapsed) * 3; fastCarCanDrive = false; @@ -3295,7 +3323,6 @@ class PlayState extends MusicBeatState trainMoving = true; if (!trainSound.playing) trainSound.play(true); - trainSound.volume = _variables.svolume/100; } var startedMoving:Bool = false; @@ -3340,14 +3367,13 @@ class PlayState extends MusicBeatState function lightningStrikeShit():Void { - FlxG.sound.play(Paths.soundRandom('thunder_', 1, Math.round(2*_variables.svolume/100))); + FlxG.sound.play(Paths.soundRandom('thunder_', 1, 2)); halloweenBG.animation.play('lightning'); lightningStrikeBeat = curBeat; lightningOffset = FlxG.random.int(8, 24); - if (!frozen) - boyfriend.playAnim('scared', true); + boyfriend.playAnim('scared', true); gf.playAnim('scared', true); } @@ -3381,8 +3407,7 @@ class PlayState extends MusicBeatState { if (SONG.notes[Math.floor(curStep / 16)].changeBPM) { - Conductor.changeSongBPM(SONG.notes[Math.floor(curStep / 16)].bpm); - + Conductor.changeBPM(SONG.notes[Math.floor(curStep / 16)].bpm); FlxG.log.add('CHANGED BPM!'); } // else @@ -3396,36 +3421,20 @@ class PlayState extends MusicBeatState wiggleShit.update(Conductor.crochet); // HARDCODING FOR MILF ZOOMS! - if (curSong.toLowerCase() == 'milf' && curBeat >= 168 && curBeat < 200 && camZooming && FlxG.camera.zoom < 1.35 * _variables.cameraZoom) + if (curSong.toLowerCase() == 'milf' && curBeat >= 168 && curBeat < 200 && camZooming && FlxG.camera.zoom < 1.35) { - FlxG.camera.zoom += 0.015 * _variables.cameraZoom; - camHUD.zoom += 0.03 * _variables.cameraZoom; - if (_modifiers.LivesSwitch) - { - hearts.forEach(function(heart:FlxSprite) - { - heart.animation.play('Idle', true); - }); - } + FlxG.camera.zoom += 0.015; + camHUD.zoom += 0.03; } - if (camZooming && FlxG.camera.zoom < 1.35 * _variables.cameraZoom && curBeat % 4 == 0) + if (camZooming && FlxG.camera.zoom < 1.35 && curBeat % 4 == 0) { - FlxG.camera.zoom += 0.015 * _variables.cameraZoom; - camHUD.zoom += 0.03 * _variables.cameraZoom; + FlxG.camera.zoom += 0.015; + camHUD.zoom += 0.03; } - if (_modifiers.LivesSwitch) - { - hearts.forEach(function(heart:FlxSprite) - { - if (curBeat % 2 == 0) - heart.animation.play('Idle', false); - }); - } - - iconP1.setGraphicSize(Std.int(iconP1.width + 30 * _variables.iconZoom)); - iconP2.setGraphicSize(Std.int(iconP2.width + 30 * _variables.iconZoom)); + iconP1.setGraphicSize(Std.int(iconP1.width + 30)); + iconP2.setGraphicSize(Std.int(iconP2.width + 30)); iconP1.updateHitbox(); iconP2.updateHitbox(); @@ -3437,31 +3446,17 @@ class PlayState extends MusicBeatState if (!boyfriend.animation.curAnim.name.startsWith("sing")) { - if (!frozen) - { - boyfriend.playAnim('idle'); - if (_modifiers.FrightSwitch) - { - if (_modifiers.Fright >= 50 && _modifiers.Fright < 100) - boyfriend.playAnim('scared'); - else if (_modifiers.Fright >= 100) - boyfriend.playAnim('worried'); - } - } - else - boyfriend.playAnim('frozen'); + boyfriend.playAnim('idle'); } - if (curBeat % 8 == 7 && curSong == 'Bopeebo' && !frozen) + if (curBeat % 8 == 7 && curSong == 'Bopeebo') { boyfriend.playAnim('hey', true); - } - if (curBeat % 16 == 14 | 15 && SONG.song == 'Tutorial' && dad.curCharacter == 'gf' && curBeat > 16 && curBeat < 48) + if (curBeat % 16 == 15 && SONG.song == 'Tutorial' && dad.curCharacter == 'gf' && curBeat > 16 && curBeat < 48) { - if (!frozen) - boyfriend.playAnim('hey', true); + boyfriend.playAnim('hey', true); dad.playAnim('cheer', true); } @@ -3514,4 +3509,4 @@ class PlayState extends MusicBeatState } var curLight:Int = 0; -} +} \ No newline at end of file diff --git a/source/RankingSubstate.hx b/source/RankingSubstate.hx index 2e5967b0..4cca34c2 100644 --- a/source/RankingSubstate.hx +++ b/source/RankingSubstate.hx @@ -23,13 +23,14 @@ class RankingSubstate extends MusicBeatSubstate var combo:FlxSprite = new FlxSprite(-200, 730); var comboRank:String = "N/A"; var ranking:String = "N/A"; + var rankingNum:Int = 15; public function new(x:Float, y:Float) { super(); generateRanking(); - + Highscore.saveRank(PlayState.SONG.song, rankingNum, PlayState.storyDifficulty); pauseMusic = new FlxSound().loadEmbedded(Paths.music('breakfast'), true, true); pauseMusic.volume = 0; pauseMusic.play(false, FlxG.random.int(0, Std.int(pauseMusic.length / 2))); @@ -65,13 +66,34 @@ class RankingSubstate extends MusicBeatSubstate press.updateHitbox(); add(press); - press.alpha = 0; + var hint:FlxText = new FlxText(20, 15, 0, "You passed. Try getting under 10 misses for SDCB", 32); + hint.scrollFactor.set(); + hint.setFormat(Paths.font("vcr.ttf"), 32); + hint.setBorderStyle(OUTLINE, 0xFF000000, 5, 1); + hint.updateHitbox(); + add(hint); + + switch (comboRank) + { + case 'MFC': + hint.text = "Congrats! You're perfect!"; + case 'GFC': + hint.text = "You're doing great! Try getting only sicks for MFC"; + case 'FC': + hint.text = "Good job. Try getting goods at minimum for GFC."; + case 'SDCB': + hint.text = "Nice. Try not missing at all for FC."; + } + hint.screenCenter(X); + + hint.alpha = press.alpha = 0; press.screenCenter(); press.y = 670 - press.height; FlxTween.tween(bg, {alpha: 0.6}, 0.4, {ease: FlxEase.quartInOut}); FlxTween.tween(press, {alpha: 1, y: 690 - press.height}, 0.4, {ease: FlxEase.quartInOut, startDelay: 0.3}); + FlxTween.tween(hint, {alpha: 1, y: 645 - hint.height}, 0.4, {ease: FlxEase.quartInOut, startDelay: 0.3}); cameras = [FlxG.cameras.list[FlxG.cameras.list.length - 1]]; } @@ -172,6 +194,7 @@ class RankingSubstate extends MusicBeatSubstate var b = wifeConditions[i]; if (b) { + rankingNum = i; switch(i) { case 0: @@ -210,7 +233,6 @@ class RankingSubstate extends MusicBeatSubstate break; } } - return ranking; } } diff --git a/source/Substate_ChartType.hx b/source/Substate_ChartType.hx index df9c7204..38ea6957 100644 --- a/source/Substate_ChartType.hx +++ b/source/Substate_ChartType.hx @@ -27,7 +27,7 @@ using StringTools; class Substate_ChartType extends MusicBeatSubstate { var menuItems:FlxTypedGroup; - var optionShit:Array = ['standard', 'flip', 'chaos', 'onearrow']; + var optionShit:Array = ['standard', 'flip', 'chaos', 'onearrow', 'stair']; var selectedSomethin:Bool = false; public static var curSelected:Int = 0; var camFollow:FlxObject; diff --git a/source/TitleState.hx b/source/TitleState.hx index 89b2ac37..aecb2f9b 100644 --- a/source/TitleState.hx +++ b/source/TitleState.hx @@ -364,7 +364,7 @@ class TitleState extends MusicBeatState switch (curBeat) { case 4: - createCoolText(['Verwex', 'Kadedev', 'present']); + createCoolText(['Verwex, Kadedev', 'Ash237', 'present']); // credTextShit.text += '\npresent...'; // credTextShit.addText(); case 6: