From 2158da173acde5bd564155a286efd2ab646f17b0 Mon Sep 17 00:00:00 2001 From: Yoshman29 <81191621+YoshiCrafter29@users.noreply.github.com> Date: Wed, 22 Feb 2023 01:13:40 +0100 Subject: [PATCH] fixed tutorial and additional stuff --- assets/songs/test/charts/normal.json | 2 +- assets/songs/tutorial/charts/easy.json | 2 +- assets/songs/tutorial/charts/hard.json | 2 +- assets/songs/tutorial/charts/normal.json | 2 +- buildnumber.txt | 2 +- source/funkin/chart/Chart.hx | 149 ++++++++---------- source/funkin/chart/ChartData.hx | 89 +++++++++++ source/funkin/cutscenes/DialogueCutscene.hx | 1 - source/funkin/cutscenes/VideoCutscene.hx | 1 - .../funkin/cutscenes/dialogue/DialogueBox.hx | 1 - .../cutscenes/dialogue/DialogueCharacter.hx | 1 - source/funkin/game/Character.hx | 11 +- source/funkin/game/HealthIcon.hx | 1 - source/funkin/game/Note.hx | 4 +- source/funkin/game/PlayState.hx | 15 +- source/funkin/game/SplashGroup.hx | 1 - source/funkin/game/Stage.hx | 1 - source/funkin/game/StrumLine.hx | 9 +- source/funkin/import.hx | 3 +- source/funkin/menus/FreeplayState.hx | 11 +- source/funkin/menus/StoryMenuState.hx | 1 - source/funkin/mods/ModsFolder.hx | 1 - source/funkin/scripting/Script.hx | 1 - source/funkin/system/AssetsLibraryList.hx | 1 - source/funkin/system/Conductor.hx | 1 + source/funkin/system/FunkinSprite.hx | 1 - source/funkin/system/Main.hx | 18 +-- source/funkin/ui/Alphabet.hx | 1 - source/funkin/utils/DiscordUtil.hx | 1 - source/funkin/utils/IniUtil.hx | 1 - source/funkin/utils/NdllUtil.hx | 1 - 31 files changed, 206 insertions(+), 130 deletions(-) create mode 100644 source/funkin/chart/ChartData.hx diff --git a/assets/songs/test/charts/normal.json b/assets/songs/test/charts/normal.json index 58a181eb..b0c475a6 100644 --- a/assets/songs/test/charts/normal.json +++ b/assets/songs/test/charts/normal.json @@ -1 +1 @@ -{"song":{"song":"Test","bpm":150.0,"needsVoices":true,"player1":"bf","player2":"bf-pixel","stage":"tank","speed":1.6,"notes":[{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[12800.0,0,0.0],[13199.999,1,0.0],[13599.999,2,0.0],[13999.999,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[14399.999,0,0.0],[14799.999,1,0.0],[15199.999,2,0.0],[15599.999,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[15999.999,0,0.0],[16199.999,0,0.0],[16400.0,1,0.0],[16600.0,1,0.0],[16800.0,2,0.0],[17000.0,2,0.0],[17200.0,3,0.0],[17400.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[17600.0,0,0.0],[17800.0,0,0.0],[18000.0,1,0.0],[18200.0,1,0.0],[18400.0,2,0.0],[18600.0,2,0.0],[18800.0,3,0.0],[19000.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[19200.0,0,300.0],[19600.0,1,300.0],[20000.0,2,300.0],[20400.0,3,300.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[20800.0,0,300.0],[21200.0,1,300.0],[21600.0,2,300.0],[22000.0,3,300.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[22400.0,0,700.0],[22800.0,1,300.0],[23200.0,2,700.0],[23600.0,3,300.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[24000.0,0,700.0],[24400.0,1,300.0],[24800.0,2,700.0],[25200.0,3,300.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[25600.0,0,0.0],[25600.0,1,0.0],[26399.998,3,0.0],[26399.998,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[27199.998,0,0.0],[27199.998,2,0.0],[27599.998,0,0.0],[27599.998,2,0.0],[27999.998,3,0.0],[27999.998,1,0.0],[28199.998,1,0.0],[28199.998,3,0.0],[28399.998,3,0.0],[28399.998,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[28799.998,0,0.0],[28799.998,1,0.0],[29599.998,3,0.0],[29599.998,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[30399.998,0,0.0],[30399.998,2,0.0],[30799.998,0,0.0],[30799.998,2,0.0],[31199.998,3,0.0],[31199.998,1,0.0],[31399.998,1,0.0],[31399.998,3,0.0],[31599.998,3,0.0],[31599.998,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[31999.998,0,0.0],[32099.998,1,0.0],[32199.998,0,100.0],[32399.998,3,0.0],[32499.998,2,0.0],[32599.998,3,100.0],[32800.0,0,0.0],[32900.0,1,0.0],[33000.0,0,100.0],[33200.0,3,0.0],[33300.0,2,0.0],[33400.0,3,100.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[33600.0,2,0.0],[33700.0,3,0.0],[33800.0,2,100.0],[34000.0,1,0.0],[34100.0,0,0.0],[34200.0,1,100.0],[34400.0,2,0.0],[34500.0,3,0.0],[34600.0,2,100.0],[34800.0,1,0.0],[34900.0,0,0.0],[35000.0,1,100.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[35200.0,0,0.0],[35300.0,1,0.0],[35400.0,0,100.0],[35600.0,3,0.0],[35700.0,2,0.0],[35800.0,3,100.0],[36000.0,0,0.0],[36100.0,1,0.0],[36200.0,0,100.0],[36400.0,3,0.0],[36500.0,2,0.0],[36600.0,3,100.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[36800.0,2,0.0],[36900.0,3,0.0],[37000.0,2,100.0],[37200.0,1,0.0],[37300.0,0,0.0],[37400.0,1,100.0],[37600.0,2,0.0],[37700.0,3,0.0],[37800.0,2,100.0],[38000.0,1,0.0],[38100.0,0,0.0],[38200.0,1,100.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[38400.0,0,0.0],[38600.0,3,0.0],[38800.0,1,0.0],[38900.0,2,0.0],[39000.0,1,0.0],[39100.0,2,0.0],[39200.0,0,0.0],[39400.0,3,0.0],[39600.0,1,0.0],[39700.0,2,0.0],[39800.0,1,0.0],[39900.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[40000.0,3,0.0],[40200.0,0,0.0],[40400.0,1,0.0],[40600.0,3,0.0],[40800.0,0,0.0],[41000.0,2,0.0],[41200.0,3,0.0],[41400.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[41600.0,0,0.0],[41800.0,3,0.0],[42000.0,1,0.0],[42100.0,2,0.0],[42200.0,1,0.0],[42300.0,2,0.0],[42400.0,0,0.0],[42600.0,3,0.0],[42800.0,1,0.0],[42900.0,2,0.0],[43000.0,1,0.0],[43100.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[43200.0,3,0.0],[43400.0,0,0.0],[43600.0,1,0.0],[43800.0,3,0.0],[44000.0,0,0.0],[44200.0,2,0.0],[44400.0,3,0.0],[44600.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[44800.0,0,0.0],[45066.6641,0,0.0],[45333.332,0,0.0],[45600.0,3,0.0],[45866.6641,3,0.0],[46133.332,3,0.0],[46266.6641,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[46400.0,1,100.0],[46800.0,1,200.0],[47200.0,1,300.0],[47600.0,1,400.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[48000.0,0,0.0],[48266.6641,0,0.0],[48533.332,0,0.0],[48800.0,3,0.0],[49066.6641,3,0.0],[49333.332,3,0.0],[49466.6641,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[49600.0,1,100.0],[50000.0,1,200.0],[50400.0,1,300.0],[50800.0,1,400.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[51200.0,0,800.0],[51200.0,1,800.0],[52599.9961,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[52799.9961,3,800.0],[52799.9961,1,800.0],[53599.9961,4,700.0],[53799.9961,5,499.999969],[53999.9961,6,300.0],[53999.9961,1,0.0],[53999.9961,2,0.0],[54199.9961,7,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[54399.9961,7,800.0],[54399.9961,6,800.0],[54399.9961,5,800.0],[54399.9961,4,800.0],[54399.9961,2,800.0],[54399.9961,0,800.0],[55799.9961,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[55999.9961,2,800.0],[55999.9961,3,800.0],[57199.9961,2,0.0],[57199.9961,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[57599.9961,1,800.0],[57599.9961,0,800.0],[58999.9961,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[59199.9961,3,800.0],[59199.9961,1,800.0],[59999.9961,4,700.0],[60199.9961,5,499.999969],[60399.9961,6,300.0],[60399.9961,1,0.0],[60399.9961,2,0.0],[60599.9961,7,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[60799.9961,7,800.0],[60799.9961,6,800.0],[60799.9961,5,800.0],[60799.9961,4,800.0],[60799.9961,0,800.0],[60799.9961,2,800.0],[62199.9961,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[62399.9961,2,800.0],[62399.9961,3,800.0],[63199.9961,6,0.0],[63299.9961,7,0.0],[63399.9961,6,0.0],[63499.9961,7,0.0],[63599.9961,4,0.0],[63599.9961,2,0.0],[63599.9961,1,0.0],[63649.9961,5,0.0],[63699.9961,6,0.0],[63749.9961,7,0.0],[63799.9961,6,0.0],[63849.9961,5,0.0],[63899.9961,4,0.0],[63949.9961,5,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[63999.9961,3,0.0],[64199.9961,2,0.0],[64399.9961,0,0.0],[64599.9961,3,499.999969],[65199.9961,3,0.0],[65399.9961,0,400.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[66000.0,0,0.0],[66200.0,1,0.0],[66400.0,0,0.0],[66666.6641,3,0.0],[66933.33,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[67200.0,3,0.0],[67300.0,2,0.0],[67800.0,2,0.0],[67850.0,0,449.999969],[68400.0,3,100.0],[68600.0,2,0.0],[68700.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[68800.0,0,0.0],[69000.0,1,0.0],[69200.0,0,0.0],[69400.0,3,0.0],[69600.0,2,0.0],[69800.0,3,300.0],[70200.0,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[70400.0,4,0.0],[70400.0,3,0.0],[70600.0,6,0.0],[70600.0,2,0.0],[70800.0,7,0.0],[70800.0,0,0.0],[71000.0,4,499.999969],[71000.0,3,499.999969],[71600.0,4,0.0],[71600.0,3,0.0],[71800.0,7,400.0],[71800.0,0,400.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[72400.0,7,0.0],[72400.0,0,0.0],[72600.0,5,0.0],[72600.0,1,0.0],[72800.0,7,0.0],[72800.0,0,0.0],[73066.6641,4,0.0],[73066.6641,3,0.0],[73333.33,6,0.0],[73333.33,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[73600.0,4,0.0],[73600.0,3,0.0],[73700.0,6,0.0],[73700.0,2,0.0],[74200.0,6,0.0],[74200.0,2,0.0],[74250.0,7,449.999969],[74250.0,0,449.999969],[74800.0,4,100.0],[74800.0,3,100.0],[75000.0,6,0.0],[75000.0,2,0.0],[75100.0,4,0.0],[75100.0,3,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[75200.0,7,0.0],[75200.0,0,0.0],[75400.0,5,0.0],[75400.0,1,0.0],[75600.0,7,0.0],[75600.0,0,0.0],[75800.0,4,0.0],[75800.0,3,0.0],[76000.0,6,0.0],[76000.0,2,0.0],[76200.0,4,300.0],[76200.0,3,300.0],[76600.0,0,0.0],[76600.0,7,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[76800.0,3,0.0],[76900.0,2,0.0],[77000.0,3,0.0],[77100.0,2,0.0],[77200.0,0,0.0],[77300.0,2,0.0],[77400.0,0,0.0],[77500.0,2,0.0],[77600.0,4,700.0],[77600.0,3,0.0],[77700.0,2,0.0],[77800.0,3,0.0],[77900.0,2,0.0],[78000.0,0,0.0],[78100.0,2,0.0],[78200.0,0,0.0],[78300.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[78400.0,7,700.0],[78400.0,3,0.0],[78500.0,1,0.0],[78600.0,3,0.0],[78700.0,1,0.0],[78800.0,0,0.0],[78900.0,1,0.0],[79000.0,0,0.0],[79100.0,1,0.0],[79200.0,5,400.0],[79200.0,3,0.0],[79300.0,1,0.0],[79400.0,3,0.0],[79500.0,1,0.0],[79600.0,0,0.0],[79700.0,1,0.0],[79800.0,0,0.0],[79900.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[80000.0,3,0.0],[80100.0,2,0.0],[80200.0,3,0.0],[80300.0,2,0.0],[80400.0,0,0.0],[80500.0,2,0.0],[80600.0,0,0.0],[80700.0,2,0.0],[80800.0,7,700.0],[80800.0,3,0.0],[80900.0,2,0.0],[81000.0,3,0.0],[81100.0,2,0.0],[81200.0,0,0.0],[81300.0,2,0.0],[81400.0,0,0.0],[81500.0,2,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[81600.0,4,700.0],[81600.0,3,0.0],[81700.0,1,0.0],[81800.0,3,0.0],[81900.0,1,0.0],[82000.0,0,0.0],[82100.0,1,0.0],[82200.0,0,0.0],[82300.0,1,0.0],[82400.0,5,400.0],[82400.0,3,0.0],[82500.0,1,0.0],[82600.0,3,0.0],[82700.0,1,0.0],[82800.0,0,0.0],[82900.0,1,0.0],[83000.0,0,0.0],[83100.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[83200.0,2,0.0],[83300.0,2,0.0],[83400.0,2,0.0],[83500.0,2,0.0],[83600.0,0,0.0],[83700.0,0,0.0],[83800.0,0,0.0],[83900.0,0,0.0],[84000.0,3,0.0],[84100.0,3,0.0],[84200.0,3,0.0],[84300.0,3,0.0],[84400.0,1,0.0],[84500.0,1,0.0],[84600.0,1,0.0],[84700.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[84800.0,0,0.0],[84933.33,0,0.0],[85066.6641,0,0.0],[85200.0,2,0.0],[85333.33,2,0.0],[85466.6641,2,0.0],[85600.0,3,0.0],[85733.33,3,0.0],[85866.6641,3,0.0],[86000.0,0,0.0],[86133.33,0,0.0],[86266.6641,0,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[86400.0,6,600.0],[86400.0,2,0.0],[86500.0,2,0.0],[86600.0,2,0.0],[86700.0,2,0.0],[86800.0,0,0.0],[86900.0,0,0.0],[87000.0,0,0.0],[87100.0,0,0.0],[87200.0,4,600.0],[87200.0,3,0.0],[87300.0,3,0.0],[87400.0,3,0.0],[87500.0,3,0.0],[87600.0,1,0.0],[87700.0,1,0.0],[87800.0,1,0.0],[87900.0,1,0.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[88000.0,7,600.0],[88000.0,0,0.0],[88133.33,0,0.0],[88266.6641,0,0.0],[88400.0,2,0.0],[88533.33,2,0.0],[88666.6641,2,0.0],[88800.0,5,600.0],[88800.0,3,0.0],[88933.33,3,0.0],[89066.6641,3,0.0],[89200.0,0,0.0],[89333.33,0,0.0],[89466.6641,0,0.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[89600.0,0,3200.0],[90000.0,3,300.0],[90400.0,2,300.0],[90800.0,1,300.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[91200.0,2,0.0],[91400.0,3,0.0],[91600.0,2,0.0],[91800.0,1,0.0],[92000.0,2,300.0],[92400.0,3,300.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[92800.0,0,3200.0],[93200.0,3,300.0],[93600.0,2,300.0],[94000.0,1,300.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[94400.0,2,0.0],[94600.0,3,0.0],[94800.0,2,0.0],[95000.0,1,0.0],[95200.0,2,300.0],[95600.0,3,300.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[96000.0,0,2300.0],[96400.0,3,300.0],[96800.0,2,300.0],[97200.0,1,300.0]]},{"lengthInSteps":16,"mustHitSection":false,"sectionNotes":[[97600.0,2,0.0],[97800.0,3,0.0],[98000.0,2,0.0],[98200.0,1,0.0],[98400.0,1,700.0],[98400.0,2,300.0],[98800.0,3,300.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[99200.0,2,300.0],[99200.0,0,700.0],[99600.0,2,0.0],[99800.0,2,0.0],[100000.0,3,300.0],[100000.0,1,300.0],[100400.0,2,300.0],[100400.0,0,300.0]]},{"lengthInSteps":16,"mustHitSection":true,"sectionNotes":[[100800.0,3,300.0],[100800.0,1,700.0],[101200.0,2,300.0],[101600.0,3,300.0],[101600.0,1,700.0],[102000.0,2,300.0]]}]},"generatedBy":"SNIFF ver.6"} \ No newline at end of file +{"events":[{"params":[1],"time":3200,"type":1},{"params":[0],"time":6400,"type":1},{"params":[1],"time":9600,"type":1},{"params":[0],"time":12800,"type":1},{"params":[1],"time":14400,"type":1},{"params":[0],"time":16000,"type":1},{"params":[1],"time":17600,"type":1},{"params":[0],"time":19200,"type":1},{"params":[1],"time":20800,"type":1},{"params":[0],"time":22400,"type":1},{"params":[1],"time":24000,"type":1},{"params":[0],"time":25600,"type":1},{"params":[1],"time":28800,"type":1},{"params":[0],"time":32000,"type":1},{"params":[1],"time":35200,"type":1},{"params":[0],"time":38400,"type":1},{"params":[1],"time":41600,"type":1},{"params":[0],"time":44800,"type":1},{"params":[1],"time":48000,"type":1},{"params":[0],"time":51200,"type":1},{"params":[1],"time":57600,"type":1},{"params":[0],"time":64000,"type":1},{"params":[1],"time":70400,"type":1},{"params":[0],"time":76800,"type":1},{"params":[1],"time":80000,"type":1},{"params":[0],"time":83200,"type":1},{"params":[1],"time":86400,"type":1},{"params":[0],"time":89600,"type":1},{"params":[1],"time":92800,"type":1},{"params":[0],"time":96000,"type":1},{"params":[1],"time":99200,"type":1}],"scrollSpeed":1.6,"strumLines":[{"notes":[{"id":0,"sLen":0,"time":12800,"type":0},{"id":1,"sLen":0,"time":13199.999,"type":0},{"id":2,"sLen":0,"time":13599.999,"type":0},{"id":3,"sLen":0,"time":13999.999,"type":0},{"id":0,"sLen":0,"time":15999.999,"type":0},{"id":0,"sLen":0,"time":16199.999,"type":0},{"id":1,"sLen":0,"time":16400,"type":0},{"id":1,"sLen":0,"time":16600,"type":0},{"id":2,"sLen":0,"time":16800,"type":0},{"id":2,"sLen":0,"time":17000,"type":0},{"id":3,"sLen":0,"time":17200,"type":0},{"id":3,"sLen":0,"time":17400,"type":0},{"id":0,"sLen":300,"time":19200,"type":0},{"id":1,"sLen":300,"time":19600,"type":0},{"id":2,"sLen":300,"time":20000,"type":0},{"id":3,"sLen":300,"time":20400,"type":0},{"id":0,"sLen":700,"time":22400,"type":0},{"id":1,"sLen":300,"time":22800,"type":0},{"id":2,"sLen":700,"time":23200,"type":0},{"id":3,"sLen":300,"time":23600,"type":0},{"id":0,"sLen":0,"time":25600,"type":0},{"id":1,"sLen":0,"time":25600,"type":0},{"id":3,"sLen":0,"time":26399.998,"type":0},{"id":2,"sLen":0,"time":26399.998,"type":0},{"id":0,"sLen":0,"time":27199.998,"type":0},{"id":2,"sLen":0,"time":27199.998,"type":0},{"id":0,"sLen":0,"time":27599.998,"type":0},{"id":2,"sLen":0,"time":27599.998,"type":0},{"id":3,"sLen":0,"time":27999.998,"type":0},{"id":1,"sLen":0,"time":27999.998,"type":0},{"id":1,"sLen":0,"time":28199.998,"type":0},{"id":3,"sLen":0,"time":28199.998,"type":0},{"id":3,"sLen":0,"time":28399.998,"type":0},{"id":1,"sLen":0,"time":28399.998,"type":0},{"id":0,"sLen":0,"time":31999.998,"type":0},{"id":1,"sLen":0,"time":32099.998,"type":0},{"id":0,"sLen":100,"time":32199.998,"type":0},{"id":3,"sLen":0,"time":32399.998,"type":0},{"id":2,"sLen":0,"time":32499.998,"type":0},{"id":3,"sLen":100,"time":32599.998,"type":0},{"id":0,"sLen":0,"time":32800,"type":0},{"id":1,"sLen":0,"time":32900,"type":0},{"id":0,"sLen":100,"time":33000,"type":0},{"id":3,"sLen":0,"time":33200,"type":0},{"id":2,"sLen":0,"time":33300,"type":0},{"id":3,"sLen":100,"time":33400,"type":0},{"id":2,"sLen":0,"time":33600,"type":0},{"id":3,"sLen":0,"time":33700,"type":0},{"id":2,"sLen":100,"time":33800,"type":0},{"id":1,"sLen":0,"time":34000,"type":0},{"id":0,"sLen":0,"time":34100,"type":0},{"id":1,"sLen":100,"time":34200,"type":0},{"id":2,"sLen":0,"time":34400,"type":0},{"id":3,"sLen":0,"time":34500,"type":0},{"id":2,"sLen":100,"time":34600,"type":0},{"id":1,"sLen":0,"time":34800,"type":0},{"id":0,"sLen":0,"time":34900,"type":0},{"id":1,"sLen":100,"time":35000,"type":0},{"id":0,"sLen":0,"time":38400,"type":0},{"id":3,"sLen":0,"time":38600,"type":0},{"id":1,"sLen":0,"time":38800,"type":0},{"id":2,"sLen":0,"time":38900,"type":0},{"id":1,"sLen":0,"time":39000,"type":0},{"id":2,"sLen":0,"time":39100,"type":0},{"id":0,"sLen":0,"time":39200,"type":0},{"id":3,"sLen":0,"time":39400,"type":0},{"id":1,"sLen":0,"time":39600,"type":0},{"id":2,"sLen":0,"time":39700,"type":0},{"id":1,"sLen":0,"time":39800,"type":0},{"id":2,"sLen":0,"time":39900,"type":0},{"id":3,"sLen":0,"time":40000,"type":0},{"id":0,"sLen":0,"time":40200,"type":0},{"id":1,"sLen":0,"time":40400,"type":0},{"id":3,"sLen":0,"time":40600,"type":0},{"id":0,"sLen":0,"time":40800,"type":0},{"id":2,"sLen":0,"time":41000,"type":0},{"id":3,"sLen":0,"time":41200,"type":0},{"id":0,"sLen":0,"time":41400,"type":0},{"id":0,"sLen":0,"time":44800,"type":0},{"id":0,"sLen":0,"time":45066.6641,"type":0},{"id":0,"sLen":0,"time":45333.332,"type":0},{"id":3,"sLen":0,"time":45600,"type":0},{"id":3,"sLen":0,"time":45866.6641,"type":0},{"id":3,"sLen":0,"time":46133.332,"type":0},{"id":3,"sLen":0,"time":46266.6641,"type":0},{"id":1,"sLen":100,"time":46400,"type":0},{"id":1,"sLen":200,"time":46800,"type":0},{"id":1,"sLen":300,"time":47200,"type":0},{"id":1,"sLen":400,"time":47600,"type":0},{"id":0,"sLen":800,"time":51200,"type":0},{"id":1,"sLen":800,"time":51200,"type":0},{"id":1,"sLen":0,"time":52599.9961,"type":0},{"id":3,"sLen":800,"time":52799.9961,"type":0},{"id":1,"sLen":800,"time":52799.9961,"type":0},{"id":1,"sLen":0,"time":53999.9961,"type":0},{"id":2,"sLen":0,"time":53999.9961,"type":0},{"id":2,"sLen":800,"time":54399.9961,"type":0},{"id":0,"sLen":800,"time":54399.9961,"type":0},{"id":3,"sLen":0,"time":55799.9961,"type":0},{"id":2,"sLen":800,"time":55999.9961,"type":0},{"id":3,"sLen":800,"time":55999.9961,"type":0},{"id":2,"sLen":0,"time":57199.9961,"type":0},{"id":1,"sLen":0,"time":57199.9961,"type":0},{"id":0,"sLen":700,"time":59999.9961,"type":0},{"id":1,"sLen":499.999969,"time":60199.9961,"type":0},{"id":2,"sLen":300,"time":60399.9961,"type":0},{"id":3,"sLen":0,"time":60599.9961,"type":0},{"id":3,"sLen":800,"time":60799.9961,"type":0},{"id":2,"sLen":800,"time":60799.9961,"type":0},{"id":1,"sLen":800,"time":60799.9961,"type":0},{"id":0,"sLen":800,"time":60799.9961,"type":0},{"id":2,"sLen":0,"time":63199.9961,"type":0},{"id":3,"sLen":0,"time":63299.9961,"type":0},{"id":2,"sLen":0,"time":63399.9961,"type":0},{"id":3,"sLen":0,"time":63499.9961,"type":0},{"id":0,"sLen":0,"time":63599.9961,"type":0},{"id":1,"sLen":0,"time":63649.9961,"type":0},{"id":2,"sLen":0,"time":63699.9961,"type":0},{"id":3,"sLen":0,"time":63749.9961,"type":0},{"id":2,"sLen":0,"time":63799.9961,"type":0},{"id":1,"sLen":0,"time":63849.9961,"type":0},{"id":0,"sLen":0,"time":63899.9961,"type":0},{"id":1,"sLen":0,"time":63949.9961,"type":0},{"id":3,"sLen":0,"time":63999.9961,"type":0},{"id":2,"sLen":0,"time":64199.9961,"type":0},{"id":0,"sLen":0,"time":64399.9961,"type":0},{"id":3,"sLen":499.999969,"time":64599.9961,"type":0},{"id":3,"sLen":0,"time":65199.9961,"type":0},{"id":0,"sLen":400,"time":65399.9961,"type":0},{"id":0,"sLen":0,"time":66000,"type":0},{"id":1,"sLen":0,"time":66200,"type":0},{"id":0,"sLen":0,"time":66400,"type":0},{"id":3,"sLen":0,"time":66666.6641,"type":0},{"id":2,"sLen":0,"time":66933.33,"type":0},{"id":3,"sLen":0,"time":67200,"type":0},{"id":2,"sLen":0,"time":67300,"type":0},{"id":2,"sLen":0,"time":67800,"type":0},{"id":0,"sLen":449.999969,"time":67850,"type":0},{"id":3,"sLen":100,"time":68400,"type":0},{"id":2,"sLen":0,"time":68600,"type":0},{"id":3,"sLen":0,"time":68700,"type":0},{"id":0,"sLen":0,"time":68800,"type":0},{"id":1,"sLen":0,"time":69000,"type":0},{"id":0,"sLen":0,"time":69200,"type":0},{"id":3,"sLen":0,"time":69400,"type":0},{"id":2,"sLen":0,"time":69600,"type":0},{"id":3,"sLen":300,"time":69800,"type":0},{"id":0,"sLen":0,"time":70200,"type":0},{"id":0,"sLen":0,"time":70400,"type":0},{"id":2,"sLen":0,"time":70600,"type":0},{"id":3,"sLen":0,"time":70800,"type":0},{"id":0,"sLen":499.999969,"time":71000,"type":0},{"id":0,"sLen":0,"time":71600,"type":0},{"id":3,"sLen":400,"time":71800,"type":0},{"id":3,"sLen":0,"time":72400,"type":0},{"id":1,"sLen":0,"time":72600,"type":0},{"id":3,"sLen":0,"time":72800,"type":0},{"id":0,"sLen":0,"time":73066.6641,"type":0},{"id":2,"sLen":0,"time":73333.33,"type":0},{"id":0,"sLen":0,"time":73600,"type":0},{"id":2,"sLen":0,"time":73700,"type":0},{"id":2,"sLen":0,"time":74200,"type":0},{"id":3,"sLen":449.999969,"time":74250,"type":0},{"id":0,"sLen":100,"time":74800,"type":0},{"id":2,"sLen":0,"time":75000,"type":0},{"id":0,"sLen":0,"time":75100,"type":0},{"id":3,"sLen":0,"time":75200,"type":0},{"id":1,"sLen":0,"time":75400,"type":0},{"id":3,"sLen":0,"time":75600,"type":0},{"id":0,"sLen":0,"time":75800,"type":0},{"id":2,"sLen":0,"time":76000,"type":0},{"id":0,"sLen":300,"time":76200,"type":0},{"id":3,"sLen":0,"time":76600,"type":0},{"id":3,"sLen":0,"time":76800,"type":0},{"id":2,"sLen":0,"time":76900,"type":0},{"id":3,"sLen":0,"time":77000,"type":0},{"id":2,"sLen":0,"time":77100,"type":0},{"id":0,"sLen":0,"time":77200,"type":0},{"id":2,"sLen":0,"time":77300,"type":0},{"id":0,"sLen":0,"time":77400,"type":0},{"id":2,"sLen":0,"time":77500,"type":0},{"id":3,"sLen":0,"time":77600,"type":0},{"id":2,"sLen":0,"time":77700,"type":0},{"id":3,"sLen":0,"time":77800,"type":0},{"id":2,"sLen":0,"time":77900,"type":0},{"id":0,"sLen":0,"time":78000,"type":0},{"id":2,"sLen":0,"time":78100,"type":0},{"id":0,"sLen":0,"time":78200,"type":0},{"id":2,"sLen":0,"time":78300,"type":0},{"id":3,"sLen":0,"time":78400,"type":0},{"id":1,"sLen":0,"time":78500,"type":0},{"id":3,"sLen":0,"time":78600,"type":0},{"id":1,"sLen":0,"time":78700,"type":0},{"id":0,"sLen":0,"time":78800,"type":0},{"id":1,"sLen":0,"time":78900,"type":0},{"id":0,"sLen":0,"time":79000,"type":0},{"id":1,"sLen":0,"time":79100,"type":0},{"id":3,"sLen":0,"time":79200,"type":0},{"id":1,"sLen":0,"time":79300,"type":0},{"id":3,"sLen":0,"time":79400,"type":0},{"id":1,"sLen":0,"time":79500,"type":0},{"id":0,"sLen":0,"time":79600,"type":0},{"id":1,"sLen":0,"time":79700,"type":0},{"id":0,"sLen":0,"time":79800,"type":0},{"id":1,"sLen":0,"time":79900,"type":0},{"id":3,"sLen":700,"time":80800,"type":0},{"id":0,"sLen":700,"time":81600,"type":0},{"id":1,"sLen":400,"time":82400,"type":0},{"id":2,"sLen":0,"time":83200,"type":0},{"id":2,"sLen":0,"time":83300,"type":0},{"id":2,"sLen":0,"time":83400,"type":0},{"id":2,"sLen":0,"time":83500,"type":0},{"id":0,"sLen":0,"time":83600,"type":0},{"id":0,"sLen":0,"time":83700,"type":0},{"id":0,"sLen":0,"time":83800,"type":0},{"id":0,"sLen":0,"time":83900,"type":0},{"id":3,"sLen":0,"time":84000,"type":0},{"id":3,"sLen":0,"time":84100,"type":0},{"id":3,"sLen":0,"time":84200,"type":0},{"id":3,"sLen":0,"time":84300,"type":0},{"id":1,"sLen":0,"time":84400,"type":0},{"id":1,"sLen":0,"time":84500,"type":0},{"id":1,"sLen":0,"time":84600,"type":0},{"id":1,"sLen":0,"time":84700,"type":0},{"id":0,"sLen":0,"time":84800,"type":0},{"id":0,"sLen":0,"time":84933.33,"type":0},{"id":0,"sLen":0,"time":85066.6641,"type":0},{"id":2,"sLen":0,"time":85200,"type":0},{"id":2,"sLen":0,"time":85333.33,"type":0},{"id":2,"sLen":0,"time":85466.6641,"type":0},{"id":3,"sLen":0,"time":85600,"type":0},{"id":3,"sLen":0,"time":85733.33,"type":0},{"id":3,"sLen":0,"time":85866.6641,"type":0},{"id":0,"sLen":0,"time":86000,"type":0},{"id":0,"sLen":0,"time":86133.33,"type":0},{"id":0,"sLen":0,"time":86266.6641,"type":0},{"id":2,"sLen":600,"time":86400,"type":0},{"id":0,"sLen":600,"time":87200,"type":0},{"id":3,"sLen":600,"time":88000,"type":0},{"id":1,"sLen":600,"time":88800,"type":0},{"id":0,"sLen":3200,"time":89600,"type":0},{"id":3,"sLen":300,"time":90000,"type":0},{"id":2,"sLen":300,"time":90400,"type":0},{"id":1,"sLen":300,"time":90800,"type":0},{"id":2,"sLen":0,"time":91200,"type":0},{"id":3,"sLen":0,"time":91400,"type":0},{"id":2,"sLen":0,"time":91600,"type":0},{"id":1,"sLen":0,"time":91800,"type":0},{"id":2,"sLen":300,"time":92000,"type":0},{"id":3,"sLen":300,"time":92400,"type":0},{"id":0,"sLen":2300,"time":96000,"type":0},{"id":3,"sLen":300,"time":96400,"type":0},{"id":2,"sLen":300,"time":96800,"type":0},{"id":1,"sLen":300,"time":97200,"type":0},{"id":2,"sLen":0,"time":97600,"type":0},{"id":3,"sLen":0,"time":97800,"type":0},{"id":2,"sLen":0,"time":98000,"type":0},{"id":1,"sLen":0,"time":98200,"type":0},{"id":1,"sLen":700,"time":98400,"type":0},{"id":2,"sLen":300,"time":98400,"type":0},{"id":3,"sLen":300,"time":98800,"type":0}],"position":"dad","opponent":true,"characters":["bf-pixel"]},{"notes":[{"id":0,"sLen":0,"time":14399.999,"type":0},{"id":1,"sLen":0,"time":14799.999,"type":0},{"id":2,"sLen":0,"time":15199.999,"type":0},{"id":3,"sLen":0,"time":15599.999,"type":0},{"id":0,"sLen":0,"time":17600,"type":0},{"id":0,"sLen":0,"time":17800,"type":0},{"id":1,"sLen":0,"time":18000,"type":0},{"id":1,"sLen":0,"time":18200,"type":0},{"id":2,"sLen":0,"time":18400,"type":0},{"id":2,"sLen":0,"time":18600,"type":0},{"id":3,"sLen":0,"time":18800,"type":0},{"id":3,"sLen":0,"time":19000,"type":0},{"id":0,"sLen":300,"time":20800,"type":0},{"id":1,"sLen":300,"time":21200,"type":0},{"id":2,"sLen":300,"time":21600,"type":0},{"id":3,"sLen":300,"time":22000,"type":0},{"id":0,"sLen":700,"time":24000,"type":0},{"id":1,"sLen":300,"time":24400,"type":0},{"id":2,"sLen":700,"time":24800,"type":0},{"id":3,"sLen":300,"time":25200,"type":0},{"id":0,"sLen":0,"time":28799.998,"type":0},{"id":1,"sLen":0,"time":28799.998,"type":0},{"id":3,"sLen":0,"time":29599.998,"type":0},{"id":2,"sLen":0,"time":29599.998,"type":0},{"id":0,"sLen":0,"time":30399.998,"type":0},{"id":2,"sLen":0,"time":30399.998,"type":0},{"id":0,"sLen":0,"time":30799.998,"type":0},{"id":2,"sLen":0,"time":30799.998,"type":0},{"id":3,"sLen":0,"time":31199.998,"type":0},{"id":1,"sLen":0,"time":31199.998,"type":0},{"id":1,"sLen":0,"time":31399.998,"type":0},{"id":3,"sLen":0,"time":31399.998,"type":0},{"id":3,"sLen":0,"time":31599.998,"type":0},{"id":1,"sLen":0,"time":31599.998,"type":0},{"id":0,"sLen":0,"time":35200,"type":0},{"id":1,"sLen":0,"time":35300,"type":0},{"id":0,"sLen":100,"time":35400,"type":0},{"id":3,"sLen":0,"time":35600,"type":0},{"id":2,"sLen":0,"time":35700,"type":0},{"id":3,"sLen":100,"time":35800,"type":0},{"id":0,"sLen":0,"time":36000,"type":0},{"id":1,"sLen":0,"time":36100,"type":0},{"id":0,"sLen":100,"time":36200,"type":0},{"id":3,"sLen":0,"time":36400,"type":0},{"id":2,"sLen":0,"time":36500,"type":0},{"id":3,"sLen":100,"time":36600,"type":0},{"id":2,"sLen":0,"time":36800,"type":0},{"id":3,"sLen":0,"time":36900,"type":0},{"id":2,"sLen":100,"time":37000,"type":0},{"id":1,"sLen":0,"time":37200,"type":0},{"id":0,"sLen":0,"time":37300,"type":0},{"id":1,"sLen":100,"time":37400,"type":0},{"id":2,"sLen":0,"time":37600,"type":0},{"id":3,"sLen":0,"time":37700,"type":0},{"id":2,"sLen":100,"time":37800,"type":0},{"id":1,"sLen":0,"time":38000,"type":0},{"id":0,"sLen":0,"time":38100,"type":0},{"id":1,"sLen":100,"time":38200,"type":0},{"id":0,"sLen":0,"time":41600,"type":0},{"id":3,"sLen":0,"time":41800,"type":0},{"id":1,"sLen":0,"time":42000,"type":0},{"id":2,"sLen":0,"time":42100,"type":0},{"id":1,"sLen":0,"time":42200,"type":0},{"id":2,"sLen":0,"time":42300,"type":0},{"id":0,"sLen":0,"time":42400,"type":0},{"id":3,"sLen":0,"time":42600,"type":0},{"id":1,"sLen":0,"time":42800,"type":0},{"id":2,"sLen":0,"time":42900,"type":0},{"id":1,"sLen":0,"time":43000,"type":0},{"id":2,"sLen":0,"time":43100,"type":0},{"id":3,"sLen":0,"time":43200,"type":0},{"id":0,"sLen":0,"time":43400,"type":0},{"id":1,"sLen":0,"time":43600,"type":0},{"id":3,"sLen":0,"time":43800,"type":0},{"id":0,"sLen":0,"time":44000,"type":0},{"id":2,"sLen":0,"time":44200,"type":0},{"id":3,"sLen":0,"time":44400,"type":0},{"id":0,"sLen":0,"time":44600,"type":0},{"id":0,"sLen":0,"time":48000,"type":0},{"id":0,"sLen":0,"time":48266.6641,"type":0},{"id":0,"sLen":0,"time":48533.332,"type":0},{"id":3,"sLen":0,"time":48800,"type":0},{"id":3,"sLen":0,"time":49066.6641,"type":0},{"id":3,"sLen":0,"time":49333.332,"type":0},{"id":3,"sLen":0,"time":49466.6641,"type":0},{"id":1,"sLen":100,"time":49600,"type":0},{"id":1,"sLen":200,"time":50000,"type":0},{"id":1,"sLen":300,"time":50400,"type":0},{"id":1,"sLen":400,"time":50800,"type":0},{"id":0,"sLen":700,"time":53599.9961,"type":0},{"id":1,"sLen":499.999969,"time":53799.9961,"type":0},{"id":2,"sLen":300,"time":53999.9961,"type":0},{"id":3,"sLen":0,"time":54199.9961,"type":0},{"id":3,"sLen":800,"time":54399.9961,"type":0},{"id":2,"sLen":800,"time":54399.9961,"type":0},{"id":1,"sLen":800,"time":54399.9961,"type":0},{"id":0,"sLen":800,"time":54399.9961,"type":0},{"id":1,"sLen":800,"time":57599.9961,"type":0},{"id":0,"sLen":800,"time":57599.9961,"type":0},{"id":1,"sLen":0,"time":58999.9961,"type":0},{"id":3,"sLen":800,"time":59199.9961,"type":0},{"id":1,"sLen":800,"time":59199.9961,"type":0},{"id":1,"sLen":0,"time":60399.9961,"type":0},{"id":2,"sLen":0,"time":60399.9961,"type":0},{"id":0,"sLen":800,"time":60799.9961,"type":0},{"id":2,"sLen":800,"time":60799.9961,"type":0},{"id":3,"sLen":0,"time":62199.9961,"type":0},{"id":2,"sLen":800,"time":62399.9961,"type":0},{"id":3,"sLen":800,"time":62399.9961,"type":0},{"id":2,"sLen":0,"time":63599.9961,"type":0},{"id":1,"sLen":0,"time":63599.9961,"type":0},{"id":3,"sLen":0,"time":70400,"type":0},{"id":2,"sLen":0,"time":70600,"type":0},{"id":0,"sLen":0,"time":70800,"type":0},{"id":3,"sLen":499.999969,"time":71000,"type":0},{"id":3,"sLen":0,"time":71600,"type":0},{"id":0,"sLen":400,"time":71800,"type":0},{"id":0,"sLen":0,"time":72400,"type":0},{"id":1,"sLen":0,"time":72600,"type":0},{"id":0,"sLen":0,"time":72800,"type":0},{"id":3,"sLen":0,"time":73066.6641,"type":0},{"id":2,"sLen":0,"time":73333.33,"type":0},{"id":3,"sLen":0,"time":73600,"type":0},{"id":2,"sLen":0,"time":73700,"type":0},{"id":2,"sLen":0,"time":74200,"type":0},{"id":0,"sLen":449.999969,"time":74250,"type":0},{"id":3,"sLen":100,"time":74800,"type":0},{"id":2,"sLen":0,"time":75000,"type":0},{"id":3,"sLen":0,"time":75100,"type":0},{"id":0,"sLen":0,"time":75200,"type":0},{"id":1,"sLen":0,"time":75400,"type":0},{"id":0,"sLen":0,"time":75600,"type":0},{"id":3,"sLen":0,"time":75800,"type":0},{"id":2,"sLen":0,"time":76000,"type":0},{"id":3,"sLen":300,"time":76200,"type":0},{"id":0,"sLen":0,"time":76600,"type":0},{"id":0,"sLen":700,"time":77600,"type":0},{"id":3,"sLen":700,"time":78400,"type":0},{"id":1,"sLen":400,"time":79200,"type":0},{"id":3,"sLen":0,"time":80000,"type":0},{"id":2,"sLen":0,"time":80100,"type":0},{"id":3,"sLen":0,"time":80200,"type":0},{"id":2,"sLen":0,"time":80300,"type":0},{"id":0,"sLen":0,"time":80400,"type":0},{"id":2,"sLen":0,"time":80500,"type":0},{"id":0,"sLen":0,"time":80600,"type":0},{"id":2,"sLen":0,"time":80700,"type":0},{"id":3,"sLen":0,"time":80800,"type":0},{"id":2,"sLen":0,"time":80900,"type":0},{"id":3,"sLen":0,"time":81000,"type":0},{"id":2,"sLen":0,"time":81100,"type":0},{"id":0,"sLen":0,"time":81200,"type":0},{"id":2,"sLen":0,"time":81300,"type":0},{"id":0,"sLen":0,"time":81400,"type":0},{"id":2,"sLen":0,"time":81500,"type":0},{"id":3,"sLen":0,"time":81600,"type":0},{"id":1,"sLen":0,"time":81700,"type":0},{"id":3,"sLen":0,"time":81800,"type":0},{"id":1,"sLen":0,"time":81900,"type":0},{"id":0,"sLen":0,"time":82000,"type":0},{"id":1,"sLen":0,"time":82100,"type":0},{"id":0,"sLen":0,"time":82200,"type":0},{"id":1,"sLen":0,"time":82300,"type":0},{"id":3,"sLen":0,"time":82400,"type":0},{"id":1,"sLen":0,"time":82500,"type":0},{"id":3,"sLen":0,"time":82600,"type":0},{"id":1,"sLen":0,"time":82700,"type":0},{"id":0,"sLen":0,"time":82800,"type":0},{"id":1,"sLen":0,"time":82900,"type":0},{"id":0,"sLen":0,"time":83000,"type":0},{"id":1,"sLen":0,"time":83100,"type":0},{"id":2,"sLen":0,"time":86400,"type":0},{"id":2,"sLen":0,"time":86500,"type":0},{"id":2,"sLen":0,"time":86600,"type":0},{"id":2,"sLen":0,"time":86700,"type":0},{"id":0,"sLen":0,"time":86800,"type":0},{"id":0,"sLen":0,"time":86900,"type":0},{"id":0,"sLen":0,"time":87000,"type":0},{"id":0,"sLen":0,"time":87100,"type":0},{"id":3,"sLen":0,"time":87200,"type":0},{"id":3,"sLen":0,"time":87300,"type":0},{"id":3,"sLen":0,"time":87400,"type":0},{"id":3,"sLen":0,"time":87500,"type":0},{"id":1,"sLen":0,"time":87600,"type":0},{"id":1,"sLen":0,"time":87700,"type":0},{"id":1,"sLen":0,"time":87800,"type":0},{"id":1,"sLen":0,"time":87900,"type":0},{"id":0,"sLen":0,"time":88000,"type":0},{"id":0,"sLen":0,"time":88133.33,"type":0},{"id":0,"sLen":0,"time":88266.6641,"type":0},{"id":2,"sLen":0,"time":88400,"type":0},{"id":2,"sLen":0,"time":88533.33,"type":0},{"id":2,"sLen":0,"time":88666.6641,"type":0},{"id":3,"sLen":0,"time":88800,"type":0},{"id":3,"sLen":0,"time":88933.33,"type":0},{"id":3,"sLen":0,"time":89066.6641,"type":0},{"id":0,"sLen":0,"time":89200,"type":0},{"id":0,"sLen":0,"time":89333.33,"type":0},{"id":0,"sLen":0,"time":89466.6641,"type":0},{"id":0,"sLen":3200,"time":92800,"type":0},{"id":3,"sLen":300,"time":93200,"type":0},{"id":2,"sLen":300,"time":93600,"type":0},{"id":1,"sLen":300,"time":94000,"type":0},{"id":2,"sLen":0,"time":94400,"type":0},{"id":3,"sLen":0,"time":94600,"type":0},{"id":2,"sLen":0,"time":94800,"type":0},{"id":1,"sLen":0,"time":95000,"type":0},{"id":2,"sLen":300,"time":95200,"type":0},{"id":3,"sLen":300,"time":95600,"type":0},{"id":2,"sLen":300,"time":99200,"type":0},{"id":0,"sLen":700,"time":99200,"type":0},{"id":2,"sLen":0,"time":99600,"type":0},{"id":2,"sLen":0,"time":99800,"type":0},{"id":3,"sLen":300,"time":100000,"type":0},{"id":1,"sLen":300,"time":100000,"type":0},{"id":2,"sLen":300,"time":100400,"type":0},{"id":0,"sLen":300,"time":100400,"type":0},{"id":3,"sLen":300,"time":100800,"type":0},{"id":1,"sLen":700,"time":100800,"type":0},{"id":2,"sLen":300,"time":101200,"type":0},{"id":3,"sLen":300,"time":101600,"type":0},{"id":1,"sLen":700,"time":101600,"type":0},{"id":2,"sLen":300,"time":102000,"type":0}],"position":"boyfriend","opponent":false,"characters":["bf"]},{"notes":[],"visible":false,"position":"girlfriend","opponent":true,"strumLinePos":0.5,"characters":["gf"]}],"codenameChart":true,"stage":"tank","noteTypes":[]} \ No newline at end of file diff --git a/assets/songs/tutorial/charts/easy.json b/assets/songs/tutorial/charts/easy.json index b5a64ec3..5f3f9113 100644 --- a/assets/songs/tutorial/charts/easy.json +++ b/assets/songs/tutorial/charts/easy.json @@ -1 +1 @@ -{"song":{"song":"Tutorial","notes":[{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[9600,0,0],[10800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[12000,0,0],[13200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[14400,0,0],[15600,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[16800,0,0],[18000,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[19200,2,0],[20400,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[21600,2,0],[22800,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[24000,2,0],[25200,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[26400,2,0],[27600,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[28800,0,0],[30000,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[31200,1,0],[32400,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[33600,0,0],[34800,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[36000,1,0],[37200,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[38400,1,0],[39000,1,0],[39600,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[40800,1,0],[41400,1,0],[42000,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[43200,1,0],[43800,1,0],[44400,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[45600,1,0],[46200,1,0],[46800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[48000,1,0],[48300,2,0],[48600,3,0],[48900,2,0],[49800,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[50400,1,0],[50700,2,0],[51000,3,0],[51300,2,0],[52200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[52800,3,0],[53400,1,0],[54000,0,0],[54600,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[55200,2,0],[55800,3,0],[56400,0,0],[57000,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[57600,1,750]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]}],"bpm":100,"sections":0,"needsVoices":false,"player1":"bf","player2":"gf","sectionLengths":[],"speed":1},"bpm":100,"sections":27,"notes":[{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[9600,0,0],[10800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[12000,0,0],[13200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[14400,0,0],[15600,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[16800,0,0],[18000,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[19200,2,0],[20400,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[21600,2,0],[22800,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[24000,2,0],[25200,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[26400,2,0],[27600,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[28800,0,0],[30000,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[31200,1,0],[32400,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[33600,0,0],[34800,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[36000,1,0],[37200,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[38400,1,0],[39000,1,0],[39600,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[40800,1,0],[41400,1,0],[42000,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[43200,1,0],[43800,1,0],[44400,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[45600,1,0],[46200,1,0],[46800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[48000,1,0],[48300,2,0],[48600,3,0],[48900,2,0],[49800,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[50400,1,0],[50700,2,0],[51000,3,0],[51300,2,0],[52200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[52800,3,0],[53400,1,0],[54000,0,0],[54600,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[55200,2,0],[55800,3,0],[56400,0,0],[57000,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[57600,1,750]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]}]} \ No newline at end of file +{"events":[{"params":[1],"time":0,"type":1},{"params":[0],"time":9600,"type":1},{"params":[1],"time":14400,"type":1},{"params":[0],"time":19200,"type":1},{"params":[1],"time":24000,"type":1},{"params":[0],"time":28800,"type":1},{"params":[1],"time":33600,"type":1},{"params":[0],"time":38400,"type":1},{"params":[1],"time":43200,"type":1},{"params":[0],"time":48000,"type":1},{"params":[1],"time":50400,"type":1}],"strumLines":[{"notes":[{"id":0,"sLen":0,"time":9600,"type":0},{"id":3,"sLen":0,"time":10800,"type":0},{"id":0,"sLen":0,"time":12000,"type":0},{"id":3,"sLen":0,"time":13200,"type":0},{"id":2,"sLen":0,"time":19200,"type":0},{"id":1,"sLen":0,"time":20400,"type":0},{"id":2,"sLen":0,"time":21600,"type":0},{"id":1,"sLen":0,"time":22800,"type":0},{"id":0,"sLen":0,"time":28800,"type":0},{"id":2,"sLen":0,"time":30000,"type":0},{"id":1,"sLen":0,"time":31200,"type":0},{"id":3,"sLen":0,"time":32400,"type":0},{"id":1,"sLen":0,"time":38400,"type":0},{"id":1,"sLen":0,"time":39000,"type":0},{"id":2,"sLen":0,"time":39600,"type":0},{"id":1,"sLen":0,"time":40800,"type":0},{"id":1,"sLen":0,"time":41400,"type":0},{"id":3,"sLen":0,"time":42000,"type":0},{"id":1,"sLen":0,"time":48000,"type":0},{"id":2,"sLen":0,"time":48300,"type":0},{"id":3,"sLen":0,"time":48600,"type":0},{"id":2,"sLen":0,"time":48900,"type":0},{"id":3,"sLen":0,"time":49800,"type":0}],"position":"girlfriend","opponent":true,"characters":["gf"]},{"notes":[{"id":0,"sLen":0,"time":14400,"type":0},{"id":3,"sLen":0,"time":15600,"type":0},{"id":0,"sLen":0,"time":16800,"type":0},{"id":3,"sLen":0,"time":18000,"type":0},{"id":2,"sLen":0,"time":24000,"type":0},{"id":1,"sLen":0,"time":25200,"type":0},{"id":2,"sLen":0,"time":26400,"type":0},{"id":1,"sLen":0,"time":27600,"type":0},{"id":0,"sLen":0,"time":33600,"type":0},{"id":2,"sLen":0,"time":34800,"type":0},{"id":1,"sLen":0,"time":36000,"type":0},{"id":3,"sLen":0,"time":37200,"type":0},{"id":1,"sLen":0,"time":43200,"type":0},{"id":1,"sLen":0,"time":43800,"type":0},{"id":2,"sLen":0,"time":44400,"type":0},{"id":1,"sLen":0,"time":45600,"type":0},{"id":1,"sLen":0,"time":46200,"type":0},{"id":3,"sLen":0,"time":46800,"type":0},{"id":1,"sLen":0,"time":50400,"type":0},{"id":2,"sLen":0,"time":50700,"type":0},{"id":3,"sLen":0,"time":51000,"type":0},{"id":2,"sLen":0,"time":51300,"type":0},{"id":3,"sLen":0,"time":52200,"type":0},{"id":3,"sLen":0,"time":52800,"type":0},{"id":1,"sLen":0,"time":53400,"type":0},{"id":0,"sLen":0,"time":54000,"type":0},{"id":1,"sLen":0,"time":54600,"type":0},{"id":2,"sLen":0,"time":55200,"type":0},{"id":3,"sLen":0,"time":55800,"type":0},{"id":0,"sLen":0,"time":56400,"type":0},{"id":2,"sLen":0,"time":57000,"type":0},{"id":1,"sLen":750,"time":57600,"type":0}],"position":"boyfriend","opponent":false,"characters":["bf"]}],"codenameChart":true,"scrollSpeed":1,"noteTypes":[]} \ No newline at end of file diff --git a/assets/songs/tutorial/charts/hard.json b/assets/songs/tutorial/charts/hard.json index 10d4e0c2..bebcca83 100644 --- a/assets/songs/tutorial/charts/hard.json +++ b/assets/songs/tutorial/charts/hard.json @@ -1 +1 @@ -{"song":{"song":"Tutorial","notes":[{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[9600,0,0],[10800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[12000,0,0],[13200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[14400,0,0],[15600,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[16800,0,0],[18000,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[19200,2,0],[20400,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[21600,2,0],[22800,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[24000,2,0],[25200,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[26400,2,0],[27600,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[28800,0,0],[30000,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[31200,1,0],[32400,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[33600,0,0],[34800,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[36000,1,0],[37200,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[38400,1,0],[39000,1,0],[39600,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[40800,1,0],[41400,1,0],[42000,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[43200,1,0],[43800,1,0],[44400,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[45600,1,0],[46200,1,0],[46800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[48000,1,0],[48300,2,0],[48600,3,0],[48900,2,0],[49800,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[50400,1,0],[50700,2,0],[51000,3,0],[51300,2,0],[52200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[52800,3,0],[53400,1,0],[54000,0,0],[54600,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[55200,2,0],[55800,3,0],[56400,0,0],[57000,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[57600,1,750]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[62400,0,0],[62550,1,0],[62700,2,0],[62850,3,0],[63000,2,0],[63150,1,0],[63300,0,0],[63450,1,0],[63600,2,0],[63750,3,0],[63900,2,0],[64050,3,0],[64200,2,0],[64350,3,0],[64650,0,0],[64500,1,0]]},{"lengthInSteps":16,"bpm":100,"changeBPM":false,"mustHitSection":true,"sectionNotes":[],"typeOfSection":0}],"bpm":100,"sections":0,"needsVoices":false,"player1":"bf","player2":"gf","sectionLengths":[],"speed":1},"bpm":100,"sections":28,"notes":[{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[9600,0,0],[10800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[12000,0,0],[13200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[14400,0,0],[15600,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[16800,0,0],[18000,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[19200,2,0],[20400,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[21600,2,0],[22800,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[24000,2,0],[25200,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[26400,2,0],[27600,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[28800,0,0],[30000,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[31200,1,0],[32400,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[33600,0,0],[34800,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[36000,1,0],[37200,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[38400,1,0],[39000,1,0],[39600,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[40800,1,0],[41400,1,0],[42000,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[43200,1,0],[43800,1,0],[44400,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[45600,1,0],[46200,1,0],[46800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[48000,1,0],[48300,2,0],[48600,3,0],[48900,2,0],[49800,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[50400,1,0],[50700,2,0],[51000,3,0],[51300,2,0],[52200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[52800,3,0],[53400,1,0],[54000,0,0],[54600,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[55200,2,0],[55800,3,0],[56400,0,0],[57000,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[57600,1,750]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[62400,0,0],[62550,1,0],[62700,2,0],[62850,3,0],[63000,2,0],[63150,1,0],[63300,0,0],[63450,1,0],[63600,2,0],[63750,3,0],[63900,2,0],[64050,3,0],[64200,2,0],[64350,3,0],[64650,0,0],[64500,1,0]]},{"lengthInSteps":16,"bpm":100,"changeBPM":false,"mustHitSection":true,"sectionNotes":[],"typeOfSection":0}]} \ No newline at end of file +{"events":[{"params":[1],"time":0,"type":1},{"params":[0],"time":9600,"type":1},{"params":[1],"time":14400,"type":1},{"params":[0],"time":19200,"type":1},{"params":[1],"time":24000,"type":1},{"params":[0],"time":28800,"type":1},{"params":[1],"time":33600,"type":1},{"params":[0],"time":38400,"type":1},{"params":[1],"time":43200,"type":1},{"params":[0],"time":48000,"type":1},{"params":[1],"time":50400,"type":1}],"strumLines":[{"notes":[{"id":0,"sLen":0,"time":9600,"type":0},{"id":3,"sLen":0,"time":10800,"type":0},{"id":0,"sLen":0,"time":12000,"type":0},{"id":3,"sLen":0,"time":13200,"type":0},{"id":2,"sLen":0,"time":19200,"type":0},{"id":1,"sLen":0,"time":20400,"type":0},{"id":2,"sLen":0,"time":21600,"type":0},{"id":1,"sLen":0,"time":22800,"type":0},{"id":0,"sLen":0,"time":28800,"type":0},{"id":2,"sLen":0,"time":30000,"type":0},{"id":1,"sLen":0,"time":31200,"type":0},{"id":3,"sLen":0,"time":32400,"type":0},{"id":1,"sLen":0,"time":38400,"type":0},{"id":1,"sLen":0,"time":39000,"type":0},{"id":2,"sLen":0,"time":39600,"type":0},{"id":1,"sLen":0,"time":40800,"type":0},{"id":1,"sLen":0,"time":41400,"type":0},{"id":3,"sLen":0,"time":42000,"type":0},{"id":1,"sLen":0,"time":48000,"type":0},{"id":2,"sLen":0,"time":48300,"type":0},{"id":3,"sLen":0,"time":48600,"type":0},{"id":2,"sLen":0,"time":48900,"type":0},{"id":3,"sLen":0,"time":49800,"type":0}],"position":"girlfriend","opponent":true,"characters":["gf"]},{"notes":[{"id":0,"sLen":0,"time":14400,"type":0},{"id":3,"sLen":0,"time":15600,"type":0},{"id":0,"sLen":0,"time":16800,"type":0},{"id":3,"sLen":0,"time":18000,"type":0},{"id":2,"sLen":0,"time":24000,"type":0},{"id":1,"sLen":0,"time":25200,"type":0},{"id":2,"sLen":0,"time":26400,"type":0},{"id":1,"sLen":0,"time":27600,"type":0},{"id":0,"sLen":0,"time":33600,"type":0},{"id":2,"sLen":0,"time":34800,"type":0},{"id":1,"sLen":0,"time":36000,"type":0},{"id":3,"sLen":0,"time":37200,"type":0},{"id":1,"sLen":0,"time":43200,"type":0},{"id":1,"sLen":0,"time":43800,"type":0},{"id":2,"sLen":0,"time":44400,"type":0},{"id":1,"sLen":0,"time":45600,"type":0},{"id":1,"sLen":0,"time":46200,"type":0},{"id":3,"sLen":0,"time":46800,"type":0},{"id":1,"sLen":0,"time":50400,"type":0},{"id":2,"sLen":0,"time":50700,"type":0},{"id":3,"sLen":0,"time":51000,"type":0},{"id":2,"sLen":0,"time":51300,"type":0},{"id":3,"sLen":0,"time":52200,"type":0},{"id":3,"sLen":0,"time":52800,"type":0},{"id":1,"sLen":0,"time":53400,"type":0},{"id":0,"sLen":0,"time":54000,"type":0},{"id":1,"sLen":0,"time":54600,"type":0},{"id":2,"sLen":0,"time":55200,"type":0},{"id":3,"sLen":0,"time":55800,"type":0},{"id":0,"sLen":0,"time":56400,"type":0},{"id":2,"sLen":0,"time":57000,"type":0},{"id":1,"sLen":750,"time":57600,"type":0},{"id":0,"sLen":0,"time":62400,"type":0},{"id":1,"sLen":0,"time":62550,"type":0},{"id":2,"sLen":0,"time":62700,"type":0},{"id":3,"sLen":0,"time":62850,"type":0},{"id":2,"sLen":0,"time":63000,"type":0},{"id":1,"sLen":0,"time":63150,"type":0},{"id":0,"sLen":0,"time":63300,"type":0},{"id":1,"sLen":0,"time":63450,"type":0},{"id":2,"sLen":0,"time":63600,"type":0},{"id":3,"sLen":0,"time":63750,"type":0},{"id":2,"sLen":0,"time":63900,"type":0},{"id":3,"sLen":0,"time":64050,"type":0},{"id":2,"sLen":0,"time":64200,"type":0},{"id":3,"sLen":0,"time":64350,"type":0},{"id":0,"sLen":0,"time":64650,"type":0},{"id":1,"sLen":0,"time":64500,"type":0}],"position":"boyfriend","opponent":false,"characters":["bf"]}],"codenameChart":true,"scrollSpeed":1,"noteTypes":[]} \ No newline at end of file diff --git a/assets/songs/tutorial/charts/normal.json b/assets/songs/tutorial/charts/normal.json index b5a64ec3..5f3f9113 100644 --- a/assets/songs/tutorial/charts/normal.json +++ b/assets/songs/tutorial/charts/normal.json @@ -1 +1 @@ -{"song":{"song":"Tutorial","notes":[{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[9600,0,0],[10800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[12000,0,0],[13200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[14400,0,0],[15600,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[16800,0,0],[18000,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[19200,2,0],[20400,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[21600,2,0],[22800,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[24000,2,0],[25200,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[26400,2,0],[27600,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[28800,0,0],[30000,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[31200,1,0],[32400,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[33600,0,0],[34800,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[36000,1,0],[37200,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[38400,1,0],[39000,1,0],[39600,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[40800,1,0],[41400,1,0],[42000,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[43200,1,0],[43800,1,0],[44400,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[45600,1,0],[46200,1,0],[46800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[48000,1,0],[48300,2,0],[48600,3,0],[48900,2,0],[49800,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[50400,1,0],[50700,2,0],[51000,3,0],[51300,2,0],[52200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[52800,3,0],[53400,1,0],[54000,0,0],[54600,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[55200,2,0],[55800,3,0],[56400,0,0],[57000,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[57600,1,750]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]}],"bpm":100,"sections":0,"needsVoices":false,"player1":"bf","player2":"gf","sectionLengths":[],"speed":1},"bpm":100,"sections":27,"notes":[{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[9600,0,0],[10800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[12000,0,0],[13200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[14400,0,0],[15600,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[16800,0,0],[18000,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[19200,2,0],[20400,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[21600,2,0],[22800,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[24000,2,0],[25200,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[26400,2,0],[27600,1,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[28800,0,0],[30000,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[31200,1,0],[32400,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[33600,0,0],[34800,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[36000,1,0],[37200,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[38400,1,0],[39000,1,0],[39600,2,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[40800,1,0],[41400,1,0],[42000,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[43200,1,0],[43800,1,0],[44400,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[45600,1,0],[46200,1,0],[46800,3,0]]},{"mustHitSection":false,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[48000,1,0],[48300,2,0],[48600,3,0],[48900,2,0],[49800,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[50400,1,0],[50700,2,0],[51000,3,0],[51300,2,0],[52200,3,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[52800,3,0],[53400,1,0],[54000,0,0],[54600,1,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[55200,2,0],[55800,3,0],[56400,0,0],[57000,2,0]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[[57600,1,750]]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]},{"mustHitSection":true,"typeOfSection":0,"lengthInSteps":16,"sectionNotes":[]}]} \ No newline at end of file +{"events":[{"params":[1],"time":0,"type":1},{"params":[0],"time":9600,"type":1},{"params":[1],"time":14400,"type":1},{"params":[0],"time":19200,"type":1},{"params":[1],"time":24000,"type":1},{"params":[0],"time":28800,"type":1},{"params":[1],"time":33600,"type":1},{"params":[0],"time":38400,"type":1},{"params":[1],"time":43200,"type":1},{"params":[0],"time":48000,"type":1},{"params":[1],"time":50400,"type":1}],"strumLines":[{"notes":[{"id":0,"sLen":0,"time":9600,"type":0},{"id":3,"sLen":0,"time":10800,"type":0},{"id":0,"sLen":0,"time":12000,"type":0},{"id":3,"sLen":0,"time":13200,"type":0},{"id":2,"sLen":0,"time":19200,"type":0},{"id":1,"sLen":0,"time":20400,"type":0},{"id":2,"sLen":0,"time":21600,"type":0},{"id":1,"sLen":0,"time":22800,"type":0},{"id":0,"sLen":0,"time":28800,"type":0},{"id":2,"sLen":0,"time":30000,"type":0},{"id":1,"sLen":0,"time":31200,"type":0},{"id":3,"sLen":0,"time":32400,"type":0},{"id":1,"sLen":0,"time":38400,"type":0},{"id":1,"sLen":0,"time":39000,"type":0},{"id":2,"sLen":0,"time":39600,"type":0},{"id":1,"sLen":0,"time":40800,"type":0},{"id":1,"sLen":0,"time":41400,"type":0},{"id":3,"sLen":0,"time":42000,"type":0},{"id":1,"sLen":0,"time":48000,"type":0},{"id":2,"sLen":0,"time":48300,"type":0},{"id":3,"sLen":0,"time":48600,"type":0},{"id":2,"sLen":0,"time":48900,"type":0},{"id":3,"sLen":0,"time":49800,"type":0}],"position":"girlfriend","opponent":true,"characters":["gf"]},{"notes":[{"id":0,"sLen":0,"time":14400,"type":0},{"id":3,"sLen":0,"time":15600,"type":0},{"id":0,"sLen":0,"time":16800,"type":0},{"id":3,"sLen":0,"time":18000,"type":0},{"id":2,"sLen":0,"time":24000,"type":0},{"id":1,"sLen":0,"time":25200,"type":0},{"id":2,"sLen":0,"time":26400,"type":0},{"id":1,"sLen":0,"time":27600,"type":0},{"id":0,"sLen":0,"time":33600,"type":0},{"id":2,"sLen":0,"time":34800,"type":0},{"id":1,"sLen":0,"time":36000,"type":0},{"id":3,"sLen":0,"time":37200,"type":0},{"id":1,"sLen":0,"time":43200,"type":0},{"id":1,"sLen":0,"time":43800,"type":0},{"id":2,"sLen":0,"time":44400,"type":0},{"id":1,"sLen":0,"time":45600,"type":0},{"id":1,"sLen":0,"time":46200,"type":0},{"id":3,"sLen":0,"time":46800,"type":0},{"id":1,"sLen":0,"time":50400,"type":0},{"id":2,"sLen":0,"time":50700,"type":0},{"id":3,"sLen":0,"time":51000,"type":0},{"id":2,"sLen":0,"time":51300,"type":0},{"id":3,"sLen":0,"time":52200,"type":0},{"id":3,"sLen":0,"time":52800,"type":0},{"id":1,"sLen":0,"time":53400,"type":0},{"id":0,"sLen":0,"time":54000,"type":0},{"id":1,"sLen":0,"time":54600,"type":0},{"id":2,"sLen":0,"time":55200,"type":0},{"id":3,"sLen":0,"time":55800,"type":0},{"id":0,"sLen":0,"time":56400,"type":0},{"id":2,"sLen":0,"time":57000,"type":0},{"id":1,"sLen":750,"time":57600,"type":0}],"position":"boyfriend","opponent":false,"characters":["bf"]}],"codenameChart":true,"scrollSpeed":1,"noteTypes":[]} \ No newline at end of file diff --git a/buildnumber.txt b/buildnumber.txt index 20f0fef7..bcc059c3 100644 --- a/buildnumber.txt +++ b/buildnumber.txt @@ -1 +1 @@ -2355 \ No newline at end of file +2366 \ No newline at end of file diff --git a/source/funkin/chart/Chart.hx b/source/funkin/chart/Chart.hx index b027fd14..a75e10d8 100644 --- a/source/funkin/chart/Chart.hx +++ b/source/funkin/chart/Chart.hx @@ -1,10 +1,17 @@ package funkin.chart; +import funkin.chart.ChartData; import flixel.util.FlxColor; import haxe.io.Path; import funkin.system.Song.SwagSong; import haxe.Json; -import openfl.utils.Assets; + +#if sys +import sys.io.File; +import sys.FileSystem; +#end + +using StringTools; class Chart { public static function loadChartMeta(songName:String, difficulty:String = "normal") { @@ -90,7 +97,7 @@ class Chart { } if (Reflect.hasField(data, "codenameChart") && Reflect.field(data, "codenameChart") == true) { - return cast data; + base = data; } else { // base fnf chart parsing var data:SwagSong = data; @@ -168,7 +175,7 @@ class Chart { time: daStrumTime, id: daNoteData % 4, type: daNoteType, - sustainLength: note[2] + sLen: note[2] }); } @@ -198,89 +205,61 @@ class Chart { return chart.noteTypes.length; } } -} - -typedef ChartData = { - public var strumLines:Array; - public var events:Array; - public var meta:ChartMetaData; - public var codenameChart:Bool; - public var stage:String; - public var scrollSpeed:Float; - public var fromMods:Bool; - public var noteTypes:Array; -} - -typedef ChartMetaData = { - public var name:String; - public var bpm:Float; - public var ?displayName:String; - public var ?beatsPerMesure:Float; - public var ?stepsPerBeat:Float; - public var ?needsVoices:Bool; - public var ?icon:String; - public var ?color:Dynamic; - public var ?difficulties:Array; - public var ?coopAllowed:Bool; - public var ?opponentModeAllowed:Bool; - - // NOT TO BE EXPORTED - public var ?parsedColor:FlxColor; -} - -typedef ChartStrumLine = { - var characters:Array; - var opponent:Bool; - var notes:Array; - var position:String; - var ?strumLinePos:Float; // 0.25 = default opponent pos, 0.75 = default boyfriend pos - var ?visible:Null; -} - -typedef ChartNote = { - var time:Float; // time at which the note will be hit (ms) - var id:Int; // strum id of the note - var type:Int; // type (int) of the note - var sustainLength:Float; // sustain length of the note (ms) -} - -typedef ChartEvent = { - var time:Float; - var type:ChartEventType; - var params:Array; -} - -@:enum -abstract ChartEventType(Int) from Int to Int { - /** - * CUSTOM EVENT - * Params: - * - Function Name (String) - * - Function Parameters... - */ - var CUSTOM = -1; - /** - * NO EVENT, MADE FOR UNKNOWN EVENTS / EVENTS THAT CANNOT BE PARSED - */ - var NONE = 0; - /** - * CAMERA MOVEMENT EVENT - * Params: - * - Target Strumline ID (Int) - */ - var CAM_MOVEMENT = 1; /** - * BPM CHANGE EVENT - * Params: - * - Target BPM (Float) + * Saves the chart to the specific song folder path. + * @param songFolderPath Path to the song folder (ex: `mods/your mod/songs/song/`) + * @param chart Chart to save + * @param difficulty Name of the difficulty + * @param saveSettings + * @return Filtered chart used for saving. */ - var BPM_CHANGE = 2; - /** - * ALT ANIM TOGGLE - * Params: - * - Strum Line which is going to be toggled (Int) - * - Whenever its going to be toggled or not (Bool) - */ - var ALT_ANIM_TOGGLE = 3; + public static function save(songFolderPath:String, chart:ChartData, difficulty:String = "normal", ?saveSettings:ChartSaveSettings):ChartData { + if (saveSettings == null) saveSettings = {}; + + var filteredChart = filterChartForSaving(chart, saveSettings.saveMetaInChart); + var meta = filteredChart.meta; + + // idk how null reacts to it so better be sure + + #if sys + if (!FileSystem.exists('${songFolderPath}\\charts\\')) + FileSystem.createDirectory('${songFolderPath}\\charts\\'); + + var chartPath = '${songFolderPath}\\charts\\${difficulty.trim()}.json'; + var metaPath = '${songFolderPath}\\meta.json'; + + File.saveContent(chartPath, Json.stringify(filteredChart, null, saveSettings.prettyPrint == true ? "\t" : null)); + + if (saveSettings.overrideExistingMeta == true || !FileSystem.exists(metaPath)) + File.saveContent(metaPath, Json.stringify(meta, null, saveSettings.prettyPrint == true ? "\t" : null)); + #end + return filteredChart; + } + + public static function filterChartForSaving(chart:ChartData, ?saveMetaInChart:Null):ChartData { + var data = Reflect.copy(chart); // make a copy of the chart to leave the OG intact + if (saveMetaInChart != true) { + data.meta = null; + } else { + data.meta = Reflect.copy(chart.meta); // also make a copy of the metadata to leave the OG intact. + if (data.meta != null) data.meta.parsedColor = null; + } + + data.fromMods = null; + + var sortedData:Dynamic = {}; + for(f in Reflect.fields(data)) { + var v = Reflect.field(data, f); + if (v != null) + Reflect.setField(sortedData, f, v); + } + return sortedData; + } +} + +typedef ChartSaveSettings = { + var ?overrideExistingMeta:Bool; + var ?saveMetaInChart:Bool; + var ?prettyPrint:Bool; } \ No newline at end of file diff --git a/source/funkin/chart/ChartData.hx b/source/funkin/chart/ChartData.hx new file mode 100644 index 00000000..b32936f4 --- /dev/null +++ b/source/funkin/chart/ChartData.hx @@ -0,0 +1,89 @@ +package funkin.chart; + +import flixel.util.FlxColor; + +typedef ChartData = { + public var strumLines:Array; + public var events:Array; + public var meta:ChartMetaData; + public var codenameChart:Bool; + public var stage:String; + public var scrollSpeed:Float; + public var noteTypes:Array; + + public var ?fromMods:Bool; +} + +typedef ChartMetaData = { + public var name:String; + public var bpm:Float; + public var ?displayName:String; + public var ?beatsPerMesure:Float; + public var ?stepsPerBeat:Float; + public var ?needsVoices:Bool; + public var ?icon:String; + public var ?color:Dynamic; + public var ?difficulties:Array; + public var ?coopAllowed:Bool; + public var ?opponentModeAllowed:Bool; + + // NOT TO BE EXPORTED + public var ?parsedColor:FlxColor; +} + +typedef ChartStrumLine = { + var characters:Array; + var opponent:Bool; + var notes:Array; + var position:String; + var ?strumLinePos:Float; // 0.25 = default opponent pos, 0.75 = default boyfriend pos + var ?visible:Null; +} + +typedef ChartNote = { + var time:Float; // time at which the note will be hit (ms) + var id:Int; // strum id of the note + var type:Int; // type (int) of the note + var sLen:Float; // sustain length of the note (ms) +} + +typedef ChartEvent = { + var time:Float; + var type:ChartEventType; + var params:Array; +} + +@:enum +abstract ChartEventType(Int) from Int to Int { + /** + * CUSTOM EVENT + * Params: + * - Function Name (String) + * - Function Parameters... + */ + var CUSTOM = -1; + /** + * NO EVENT, MADE FOR UNKNOWN EVENTS / EVENTS THAT CANNOT BE PARSED + */ + var NONE = 0; + /** + * CAMERA MOVEMENT EVENT + * Params: + * - Target Strumline ID (Int) + */ + var CAM_MOVEMENT = 1; + + /** + * BPM CHANGE EVENT + * Params: + * - Target BPM (Float) + */ + var BPM_CHANGE = 2; + /** + * ALT ANIM TOGGLE + * Params: + * - Strum Line which is going to be toggled (Int) + * - Whenever its going to be toggled or not (Bool) + */ + var ALT_ANIM_TOGGLE = 3; +} \ No newline at end of file diff --git a/source/funkin/cutscenes/DialogueCutscene.hx b/source/funkin/cutscenes/DialogueCutscene.hx index 58766b30..90ca5214 100644 --- a/source/funkin/cutscenes/DialogueCutscene.hx +++ b/source/funkin/cutscenes/DialogueCutscene.hx @@ -3,7 +3,6 @@ package funkin.cutscenes; import flixel.system.FlxSound; import flixel.FlxG; import flixel.FlxCamera; -import openfl.utils.Assets; import funkin.cutscenes.dialogue.*; import haxe.xml.Access; diff --git a/source/funkin/cutscenes/VideoCutscene.hx b/source/funkin/cutscenes/VideoCutscene.hx index 75a359e4..b7bff12b 100644 --- a/source/funkin/cutscenes/VideoCutscene.hx +++ b/source/funkin/cutscenes/VideoCutscene.hx @@ -3,7 +3,6 @@ package funkin.cutscenes; import flixel.FlxSprite; import flixel.FlxG; import flixel.FlxCamera; -import openfl.utils.Assets; /** * Substate made for video cutscenes. To use it in a scripted cutscene, call `startVideo`. diff --git a/source/funkin/cutscenes/dialogue/DialogueBox.hx b/source/funkin/cutscenes/dialogue/DialogueBox.hx index a87fb2fb..0e82e30e 100644 --- a/source/funkin/cutscenes/dialogue/DialogueBox.hx +++ b/source/funkin/cutscenes/dialogue/DialogueBox.hx @@ -2,7 +2,6 @@ package funkin.cutscenes.dialogue; import flixel.addons.text.FlxTypeText; import flixel.text.FlxText; -import openfl.utils.Assets; import flixel.FlxG; import flixel.math.FlxPoint; import haxe.xml.Access; diff --git a/source/funkin/cutscenes/dialogue/DialogueCharacter.hx b/source/funkin/cutscenes/dialogue/DialogueCharacter.hx index 3f1c4920..d8c45478 100644 --- a/source/funkin/cutscenes/dialogue/DialogueCharacter.hx +++ b/source/funkin/cutscenes/dialogue/DialogueCharacter.hx @@ -2,7 +2,6 @@ package funkin.cutscenes.dialogue; import flixel.tweens.FlxEase; import flixel.tweens.FlxTween; -import openfl.utils.Assets; import haxe.xml.Access; class DialogueCharacter extends FunkinSprite { diff --git a/source/funkin/game/Character.hx b/source/funkin/game/Character.hx index adbb088a..dd351ebc 100644 --- a/source/funkin/game/Character.hx +++ b/source/funkin/game/Character.hx @@ -14,7 +14,6 @@ import flixel.animation.FlxBaseAnimation; import flixel.graphics.frames.FlxAtlasFrames; import flixel.math.FlxRect; -import openfl.utils.Assets; import haxe.xml.Access; import haxe.Exception; import haxe.io.Path; @@ -258,9 +257,17 @@ class Character extends FunkinSprite implements IBeatReceiver implements IOffset */ public var danceOnBeat:Bool = true; + /** + * Interval at which the character will dance (higher number = slower dance) + */ + public var danceInterval:Int = 1; + public override function beatHit(curBeat:Int) { script.call("beatHit", [curBeat]); - if (danceOnBeat && !__lockAnimThisFrame) { + if (danceInterval < 1) + danceInterval = 1; + + if (danceOnBeat && curBeat % danceInterval == 0 && !__lockAnimThisFrame) { tryDance(); } } diff --git a/source/funkin/game/HealthIcon.hx b/source/funkin/game/HealthIcon.hx index 78f29991..1b3b3b32 100644 --- a/source/funkin/game/HealthIcon.hx +++ b/source/funkin/game/HealthIcon.hx @@ -1,7 +1,6 @@ package funkin.game; import flixel.FlxSprite; -import openfl.utils.Assets; class HealthIcon extends FlxSprite { diff --git a/source/funkin/game/Note.hx b/source/funkin/game/Note.hx index c7900a8a..fdd10341 100644 --- a/source/funkin/game/Note.hx +++ b/source/funkin/game/Note.hx @@ -1,7 +1,7 @@ package funkin.game; -import funkin.chart.Chart.ChartNote; -import openfl.utils.Assets; +import funkin.chart.Chart; +import funkin.chart.ChartData; import flixel.FlxG; import flixel.FlxCamera; import flixel.FlxSprite; diff --git a/source/funkin/game/PlayState.hx b/source/funkin/game/PlayState.hx index 58e0a589..aee876e1 100644 --- a/source/funkin/game/PlayState.hx +++ b/source/funkin/game/PlayState.hx @@ -1,6 +1,7 @@ package funkin.game; import funkin.chart.Chart; +import funkin.chart.ChartData; import funkin.game.SplashHandler; import funkin.scripting.DummyScript; import funkin.menus.StoryMenuState.WeekData; @@ -234,7 +235,7 @@ class PlayState extends MusicBeatState /** * Interval at which Girlfriend dances. */ - public var gfSpeed:Int = 1; + public var gfSpeed(get, set):Int; /** * Current health. Goes from 0 to maxHealth (defaults to 2) @@ -937,7 +938,7 @@ class PlayState extends MusicBeatState * Returns the Discord RPC icon. */ public inline function getIconRPC():String - return (dad != null ? (dad.icon != null ? dad.icon : dad.curCharacter) : null); + return SONG.meta.icon; var __songPlaying:Bool = false; var __wasAutoPause:Bool = false; @@ -1579,9 +1580,6 @@ class PlayState extends MusicBeatState iconP1.updateHitbox(); iconP2.updateHitbox(); - if (gf != null && curBeat % gfSpeed == 0) - gf.tryDance(); - scripts.call("beatHit", [curBeat]); } @@ -1629,6 +1627,13 @@ class PlayState extends MusicBeatState return players[0]; private inline function get_playerStrums():StrumLine return players[1]; + private inline function get_gfSpeed():Int + return (players[2] != null && players[2].characters[0] != null) ? players[2].characters[0].danceInterval : 1; + private inline function set_gfSpeed(v:Int):Int { + if (players[2] != null && players[2].characters[0] != null) + players[2].characters[0].danceInterval = v; + return v; + } } class ComboRating { diff --git a/source/funkin/game/SplashGroup.hx b/source/funkin/game/SplashGroup.hx index 397dab03..851c85af 100644 --- a/source/funkin/game/SplashGroup.hx +++ b/source/funkin/game/SplashGroup.hx @@ -1,7 +1,6 @@ package funkin.game; import flixel.FlxG; -import openfl.utils.Assets; import haxe.xml.Access; import flixel.group.FlxGroup.FlxTypedGroup; diff --git a/source/funkin/game/Stage.hx b/source/funkin/game/Stage.hx index 753d0f62..8371da84 100644 --- a/source/funkin/game/Stage.hx +++ b/source/funkin/game/Stage.hx @@ -4,7 +4,6 @@ import funkin.options.Options; import flixel.FlxG; import flixel.FlxState; import flixel.FlxSprite; -import openfl.utils.Assets; import haxe.xml.Access; import flixel.FlxBasic; import flixel.math.FlxMath; diff --git a/source/funkin/game/StrumLine.hx b/source/funkin/game/StrumLine.hx index 35395884..7245e831 100644 --- a/source/funkin/game/StrumLine.hx +++ b/source/funkin/game/StrumLine.hx @@ -2,7 +2,8 @@ package funkin.game; import funkin.scripting.events.SimpleNoteEvent; import funkin.system.Conductor; -import funkin.chart.Chart.ChartStrumLine; +import funkin.chart.Chart; +import funkin.chart.ChartData; import funkin.system.Controls; import funkin.scripting.events.StrumCreationEvent; import flixel.group.FlxGroup.FlxTypedGroup; @@ -65,12 +66,12 @@ class StrumLine extends FlxTypedGroup { if (strumLine.notes != null) for(note in strumLine.notes) { notes.add(new Note(this, note, false)); - if (note.sustainLength > Conductor.stepCrochet * 0.75) { - var len:Float = note.sustainLength; + if (note.sLen > Conductor.stepCrochet * 0.75) { + var len:Float = note.sLen; var curLen:Float = 0; while(len > 10) { curLen = Math.min(len, Conductor.stepCrochet); - notes.add(new Note(this, note, true, curLen, note.sustainLength - len)); + notes.add(new Note(this, note, true, curLen, note.sLen - len)); len -= curLen; } } diff --git a/source/funkin/import.hx b/source/funkin/import.hx index 297166ca..50b782b7 100644 --- a/source/funkin/import.hx +++ b/source/funkin/import.hx @@ -7,9 +7,10 @@ import funkin.system.FunkinSprite; import funkin.utils.*; import funkin.system.Logs; import funkin.game.PlayState; - import funkin.scripting.EventManager; +import openfl.utils.Assets; + using StringTools; using funkin.utils.CoolUtil; #end diff --git a/source/funkin/menus/FreeplayState.hx b/source/funkin/menus/FreeplayState.hx index dc3bfd7a..1f1895e5 100644 --- a/source/funkin/menus/FreeplayState.hx +++ b/source/funkin/menus/FreeplayState.hx @@ -1,7 +1,7 @@ package funkin.menus; import funkin.chart.Chart; -import funkin.chart.Chart.ChartMetaData; +import funkin.chart.ChartData; import haxe.io.Path; import flash.text.TextField; import flixel.FlxG; @@ -244,6 +244,9 @@ class FreeplayState extends MusicBeatState FlxG.switchState(new MainMenuState()); } + if (FlxG.keys.justPressed.EIGHT && Sys.args().contains("-livereload")) + convertChart(); + if (controls.ACCEPT && !dontPlaySongThisFrame) select(); } @@ -271,6 +274,12 @@ class FreeplayState extends MusicBeatState FlxG.switchState(new PlayState()); } + public function convertChart() { + trace('Converting ${songs[curSelected].name} (${songs[curSelected].difficulties[curDifficulty]}) to Codename format...'); + var chart = Chart.parse(songs[curSelected].name, songs[curSelected].difficulties[curDifficulty]); + Chart.save('${Main.pathBack}assets/songs/${songs[curSelected].name}', chart, songs[curSelected].difficulties[curDifficulty].toLowerCase()); + } + /** * Changes the current difficulty * @param change How much to change. diff --git a/source/funkin/menus/StoryMenuState.hx b/source/funkin/menus/StoryMenuState.hx index 8621abd9..e15da8c3 100644 --- a/source/funkin/menus/StoryMenuState.hx +++ b/source/funkin/menus/StoryMenuState.hx @@ -7,7 +7,6 @@ import flixel.graphics.frames.FlxFramesCollection; import flixel.group.FlxGroup.FlxTypedGroup; import funkin.game.Highscore; import flixel.tweens.FlxTween; -import openfl.utils.Assets; import flixel.FlxG; import flixel.math.FlxMath; import flixel.util.FlxColor; diff --git a/source/funkin/mods/ModsFolder.hx b/source/funkin/mods/ModsFolder.hx index 03c18f8e..acaecbdf 100644 --- a/source/funkin/mods/ModsFolder.hx +++ b/source/funkin/mods/ModsFolder.hx @@ -5,7 +5,6 @@ import funkin.menus.TitleState; import funkin.system.Main; import openfl.utils.AssetCache; import flixel.util.FlxSignal.FlxTypedSignal; -import openfl.utils.Assets; import openfl.utils.AssetManifest; import openfl.utils.AssetLibrary; import flixel.graphics.FlxGraphic; diff --git a/source/funkin/scripting/Script.hx b/source/funkin/scripting/Script.hx index 030a24af..7d3e7283 100644 --- a/source/funkin/scripting/Script.hx +++ b/source/funkin/scripting/Script.hx @@ -4,7 +4,6 @@ import lime.app.Application; import flixel.util.FlxDestroyUtil.IFlxDestroyable; import flixel.FlxBasic; import haxe.io.Path; -import openfl.utils.Assets; /** * Class used for scripting. diff --git a/source/funkin/system/AssetsLibraryList.hx b/source/funkin/system/AssetsLibraryList.hx index 66dc6991..6a7ac7a1 100644 --- a/source/funkin/system/AssetsLibraryList.hx +++ b/source/funkin/system/AssetsLibraryList.hx @@ -1,7 +1,6 @@ package funkin.system; import funkin.mods.ModsAssetLibrary; -import openfl.utils.Assets; import lime.utils.AssetLibrary; class AssetsLibraryList extends AssetLibrary { diff --git a/source/funkin/system/Conductor.hx b/source/funkin/system/Conductor.hx index 5e55f311..a7a01b9c 100644 --- a/source/funkin/system/Conductor.hx +++ b/source/funkin/system/Conductor.hx @@ -1,6 +1,7 @@ package funkin.system; import funkin.chart.Chart; +import funkin.chart.ChartData; import flixel.math.FlxMath; import openfl.Lib; import flixel.FlxState; diff --git a/source/funkin/system/FunkinSprite.hx b/source/funkin/system/FunkinSprite.hx index 70f8cdfa..0f938dfb 100644 --- a/source/funkin/system/FunkinSprite.hx +++ b/source/funkin/system/FunkinSprite.hx @@ -1,7 +1,6 @@ package funkin.system; import flixel.FlxG; -import openfl.utils.Assets; import haxe.io.Path; import funkin.scripting.events.PlayAnimEvent.PlayAnimContext; import funkin.interfaces.IOffsetCompatible; diff --git a/source/funkin/system/Main.hx b/source/funkin/system/Main.hx index 2f4c9f81..e5250b31 100644 --- a/source/funkin/system/Main.hx +++ b/source/funkin/system/Main.hx @@ -116,6 +116,14 @@ class Main extends Sprite public static var audioDisconnected:Bool = false; public static var changeID:Int = 0; + public static var pathBack = #if windows + "../../../../" + #elseif mac + "../../../../../../../" + #else + "" + #end; + public static var startedFromSource:Bool = false; private static var __threadCycle:Int = 0; @@ -156,15 +164,7 @@ class Main extends Sprite #end #if sys - if (Sys.args().contains("-livereload")) { - var pathBack = #if windows - "../../../../" - #elseif mac - "../../../../../../../" - #else - "" - #end; - + if (startedFromSource = Sys.args().contains("-livereload")) { #if USE_SOURCE_ASSETS #if windows trace("Used lime test windows. Switching into source assets."); diff --git a/source/funkin/ui/Alphabet.hx b/source/funkin/ui/Alphabet.hx index da67c575..14e24589 100644 --- a/source/funkin/ui/Alphabet.hx +++ b/source/funkin/ui/Alphabet.hx @@ -1,6 +1,5 @@ package funkin.ui; -import openfl.utils.Assets; import openfl.utils.AssetLibrary; import haxe.xml.Access; import funkin.mods.LimeLibrarySymbol; diff --git a/source/funkin/utils/DiscordUtil.hx b/source/funkin/utils/DiscordUtil.hx index 67f1319a..8e81c272 100644 --- a/source/funkin/utils/DiscordUtil.hx +++ b/source/funkin/utils/DiscordUtil.hx @@ -2,7 +2,6 @@ package funkin.utils; import funkin.scripting.events.DiscordPresenceUpdateEvent; import haxe.Json; -import openfl.utils.Assets; import flixel.system.FlxSound; #if DISCORD_RPC import discord_rpc.DiscordRpc; diff --git a/source/funkin/utils/IniUtil.hx b/source/funkin/utils/IniUtil.hx index d7bded8f..48ebeb16 100644 --- a/source/funkin/utils/IniUtil.hx +++ b/source/funkin/utils/IniUtil.hx @@ -1,6 +1,5 @@ package funkin.utils; -import openfl.utils.Assets; /** * DOESNT SUPPORT CATEGORIES YET!! diff --git a/source/funkin/utils/NdllUtil.hx b/source/funkin/utils/NdllUtil.hx index 466848a4..9780d6d8 100644 --- a/source/funkin/utils/NdllUtil.hx +++ b/source/funkin/utils/NdllUtil.hx @@ -1,6 +1,5 @@ package funkin.utils; -import openfl.utils.Assets; import lime.app.Application; /**