diff --git a/appveyor-linux.yml b/appveyor-linux.yml index dc06bb0..6dfee0f 100644 --- a/appveyor-linux.yml +++ b/appveyor-linux.yml @@ -9,7 +9,7 @@ install: - cd /home/appveyor - sudo add-apt-repository ppa:haxe/releases -y - sudo apt update - - sudo apt install neko tar gcc-multilib g++-multilib -y + - sudo apt install neko tar gcc-7 g++-7 gcc-7-multilib g++-7-multilib -y - wget https://github.com/HaxeFoundation/haxe/releases/download/4.1.5/haxe-4.1.5-linux64.tar.gz - mkdir $HAXE_INSTALLDIR - tar -xf haxe-4.1.5-linux64.tar.gz -C $HAXE_INSTALLDIR diff --git a/appveyor-windows.yml b/appveyor-windows.yml index f1d47f5..58d5d98 100644 --- a/appveyor-windows.yml +++ b/appveyor-windows.yml @@ -36,7 +36,10 @@ install: - haxelib git extension-webm https://github.com/KadeDev/extension-webm - haxelib run lime rebuild extension-webm windows - haxelib install linc_luajit - - haxelib install actuate + - haxelib install actuate + #- haxelib git extension-webm https://github.com/KadeDev/extension-webm + #- haxelib run lime rebuild extension-webm windows + #why here's dublicate lmao - haxelib list # No tests idk lol diff --git a/assets/preload/data/freeplaySonglist.txt b/assets/preload/data/freeplaySonglist.txt index a5939ad..7af8115 100644 --- a/assets/preload/data/freeplaySonglist.txt +++ b/assets/preload/data/freeplaySonglist.txt @@ -1,4 +1,4 @@ -Tutorial:gf:1 +Tutorial:gf:0 Bopeebo:dad:1 Fresh:dad:1 Dad Battle:dad:1 diff --git a/assets/preload/data/test/test.json b/assets/preload/data/test/test.json new file mode 100644 index 0000000..6ccba5e --- /dev/null +++ b/assets/preload/data/test/test.json @@ -0,0 +1 @@ +{"song": {"song": "Test", "notes": [{"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[668.578947368421, 3, 947.3684210526317], [1615.9473684210527, 1, 631.578947368421], [2247.5263157894738, 0, 315.7894736842104]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[2563.315789473684, 3, 631.5789473684213], [3194.8947368421054, 2, 631.5789473684208], [3826.4736842105262, 1, 631.5789473684213], [4773.8421052631575, 1, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[5089.631578947368, 2, 0], [5563.315789473684, 1, 0], [5879.105263157895, 3, 0], [6037.0, 1, 0], [6194.894736842105, 0, 0], [6352.789473684211, 2, 315.78947368420995], [6668.578947368421, 1, 315.78947368421086], [6984.368421052632, 0, 0], [7142.263157894737, 1, 0], [7300.1578947368425, 2, 0], [7458.0526315789475, 0, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[7615.9473684210525, 1, 1578.9473684210525], [7615.9473684210525, 3, 947.3684210526326], [8721.21052631579, 3, 0], [8879.105263157895, 0, 0], [9194.894736842105, 2, 0], [9352.78947368421, 1, 0], [9352.78947368421, 3, 0], [9510.684210526315, 0, 0], [9510.684210526315, 2, 0], [9668.578947368422, 0, 0], [9668.578947368422, 2, 0], [9826.473684210527, 1, 0], [9826.473684210527, 3, 0], [9984.368421052632, 0, 0], [9984.368421052632, 2, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[10142.263157894737, 3, 0], [10458.052631578947, 3, 0], [10773.842105263158, 3, 0], [11089.631578947368, 1, 0], [11247.526315789473, 2, 0], [11405.421052631578, 0, 0], [11721.21052631579, 0, 0], [12037.0, 0, 0], [12194.894736842105, 2, 0], [12352.78947368421, 1, 0], [12510.684210526315, 2, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[12668.578947368422, 3, 0], [12984.368421052632, 1, 0], [13300.157894736842, 2, 315.78947368421177], [13615.947368421053, 0, 0], [13773.842105263158, 1, 0], [13931.736842105263, 3, 1263.1578947368416], [14563.315789473685, 0, 0], [14721.21052631579, 1, 0], [14879.105263157895, 2, 0], [15037.0, 1, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[15194.894736842105, 0, 0], [15352.78947368421, 2, 0], [15510.684210526315, 0, 631.5789473684217], [16142.263157894737, 2, 0], [16300.157894736842, 1, 0], [16458.052631578947, 0, 0], [16773.842105263157, 0, 0], [17089.63157894737, 0, 0], [17405.42105263158, 1, 315.78947368420995]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[17721.21052631579, 0, 1263.1578947368398], [17721.21052631579, 3, 1263.1578947368398], [18984.36842105263, 1, 0], [18984.36842105263, 2, 0], [19300.157894736843, 1, 0], [19300.157894736843, 2, 0], [19615.947368421053, 1, 0], [19615.947368421053, 2, 0], [19826.473684210527, 1, 0], [19826.473684210527, 2, 0], [20037.0, 1, 0], [20037.0, 2, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[20247.526315789473, 3, 631.5789473684199], [20879.105263157893, 1, 0], [21194.894736842107, 1, 0], [21510.684210526317, 1, 0], [21826.473684210527, 1, 0], [22142.263157894737, 1, 0], [22300.157894736843, 2, 0], [22458.052631578947, 0, 0], [22615.947368421053, 2, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[22773.842105263157, 3, 0], [22931.736842105263, 1, 0], [23089.63157894737, 2, 0], [23405.42105263158, 1, 0], [23721.21052631579, 1, 0], [24037.0, 1, 0], [24352.78947368421, 2, 0], [24510.684210526317, 3, 0], [24668.57894736842, 1, 0], [24826.473684210527, 2, 0], [24984.36842105263, 1, 0], [25142.263157894737, 0, 473.68421052631675]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[25773.842105263157, 2, 0], [25931.736842105263, 3, 0], [26089.63157894737, 1, 0], [26247.526315789473, 2, 0], [26563.315789473683, 1, 0], [26879.105263157893, 0, 0], [27194.894736842107, 0, 0], [27352.78947368421, 1, 0], [27510.684210526317, 2, 0], [27668.57894736842, 3, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[27826.473684210527, 2, 0], [28142.263157894737, 2, 0], [28458.052631578947, 3, 1894.7368421052633], [28615.947368421053, 2, 0], [28773.842105263157, 1, 0], [28931.736842105263, 0, 0], [29089.63157894737, 2, 0], [29247.526315789473, 1, 0], [29405.42105263158, 0, 0], [29563.315789473683, 1, 0], [29879.105263157893, 2, 0], [30037.0, 1, 0], [30194.894736842107, 0, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[30352.78947368421, 2, 0], [30431.736842105263, 1, 0], [30510.684210526317, 0, 0], [30668.57894736842, 0, 0], [30826.473684210527, 0, 0], [30905.42105263158, 1, 0], [30984.36842105263, 2, 0], [31142.263157894737, 3, 0], [31300.157894736843, 1, 0], [31458.052631578947, 2, 0], [31615.947368421053, 0, 0], [31773.842105263157, 2, 0], [31931.736842105263, 1, 0], [32089.63157894737, 2, 0], [32405.42105263158, 2, 0], [32721.21052631579, 2, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[32879.10526315789, 2, 0], [32958.05263157895, 3, 0], [33037.0, 1, 0], [33194.89473684211, 0, 0], [33352.78947368421, 2, 0], [33510.68421052631, 1, 0], [33668.57894736842, 2, 0], [33826.47368421053, 3, 0], [33984.36842105263, 1, 0], [34063.31578947369, 2, 0], [34142.26315789474, 0, 0], [34300.15789473684, 0, 0], [34458.05263157895, 1, 0], [34615.94736842105, 2, 0], [34694.89473684211, 1, 0], [34773.84210526316, 2, 0], [34931.73684210526, 3, 0], [35089.63157894737, 1, 0], [35247.52631578947, 2, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[35405.42105263158, 0, 0], [35563.31578947369, 1, 0], [35721.21052631579, 2, 0], [35879.10526315789, 3, 0], [36194.89473684211, 2, 0], [36352.78947368421, 1, 0], [36510.68421052631, 0, 0], [36826.47368421053, 2, 0], [36984.36842105263, 1, 0], [37142.26315789474, 0, 236.84210526315292], [37458.05263157895, 0, 236.8421052631602], [37773.84210526316, 0, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[37931.73684210526, 2, 0], [38089.63157894737, 1, 0], [38247.52631578947, 0, 0], [38405.42105263158, 1, 0], [38563.31578947369, 3, 0], [38721.21052631579, 3, 0], [38879.10526315789, 2, 552.6315789473665], [39510.68421052631, 1, 315.7894736842136], [39826.47368421053, 3, 1263.1578947368398]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[41721.21052631579, 1, 631.5789473684272], [42431.73684210526, 0, 0], [42510.68421052631, 1, 0], [42589.63157894737, 2, 0], [42668.57894736842, 3, 0], [42747.52631578947, 2, 0], [42826.47368421053, 1, 0], [42905.42105263158, 0, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[42984.36842105263, 3, 631.5789473684199], [43615.94736842105, 1, 552.6315789473665], [44247.52631578947, 1, 631.5789473684199], [44958.05263157895, 0, 0], [45037.0, 1, 0], [45115.94736842105, 2, 0], [45194.89473684211, 3, 0], [45273.84210526316, 1, 0], [45352.78947368421, 2, 0], [45431.73684210526, 1, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[45510.68421052631, 3, 631.5789473684272], [46142.26315789474, 1, 0], [46142.26315789474, 2, 631.5789473684199], [46300.15789473684, 0, 0], [46458.05263157895, 1, 0], [46615.94736842105, 0, 0], [46773.84210526316, 1, 0], [46773.84210526316, 3, 631.5789473684199], [46931.73684210526, 0, 0], [47089.63157894737, 1, 0], [47247.52631578947, 0, 0], [47405.42105263158, 1, 0], [47405.42105263158, 2, 631.5789473684199], [47484.36842105263, 0, 0], [47563.31578947369, 1, 0], [47642.26315789474, 0, 0], [47721.21052631579, 1, 0], [47800.15789473684, 0, 0], [47879.10526315789, 1, 0], [47958.05263157895, 0, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[48037.0, 1, 0], [48194.89473684211, 2, 0], [48352.78947368421, 1, 315.7894736842063], [48668.57894736842, 2, 236.8421052631602], [48984.36842105263, 1, 0], [49063.31578947369, 2, 0], [49142.26315789474, 3, 0], [49221.21052631579, 2, 0], [49300.15789473684, 0, 631.5789473684199], [49458.05263157895, 1, 0], [49615.94736842105, 2, 0], [49773.84210526316, 1, 0], [49931.73684210526, 2, 0], [50010.68421052631, 0, 0], [50089.63157894737, 1, 0], [50168.57894736842, 2, 0], [50247.52631578947, 1, 0], [50326.47368421053, 2, 0], [50405.42105263158, 3, 0], [50484.36842105263, 2, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[50563.31578947369, 1, 631.5789473684199], [50563.31578947369, 3, 631.5789473684199], [51194.89473684211, 0, 631.5789473684199], [51194.89473684211, 2, 631.5789473684199], [51826.47368421053, 3, 0], [51984.36842105263, 2, 0], [52142.26315789474, 1, 0], [52300.15789473684, 3, 0], [52458.05263157895, 2, 0], [52615.94736842105, 1, 0], [52773.84210526316, 3, 0], [52931.73684210526, 2, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[53089.63157894737, 1, 0], [53247.52631578947, 3, 0], [53405.42105263158, 2, 0], [53563.31578947369, 1, 0], [53721.21052631579, 3, 0], [53879.10526315789, 2, 0], [54037.0, 1, 0], [54194.89473684211, 0, 0], [54352.78947368421, 1, 0], [54510.68421052631, 2, 0], [54668.57894736842, 3, 0], [54826.47368421053, 2, 0], [54984.36842105263, 1, 0], [55142.26315789474, 3, 0], [55300.15789473684, 2, 0], [55458.05263157895, 1, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[55615.94736842105, 3, 0], [55773.84210526316, 2, 0], [55931.73684210526, 1, 0], [56089.63157894737, 3, 0], [56247.52631578947, 2, 0], [56405.42105263158, 1, 0], [56563.31578947369, 3, 0], [56721.21052631579, 2, 0], [56879.10526315789, 1, 0], [57037.0, 0, 0], [57194.89473684211, 1, 0], [57352.78947368421, 0, 0], [57510.68421052631, 1, 0], [57668.57894736842, 2, 0], [57826.47368421053, 0, 0], [57984.36842105263, 1, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[58142.26315789474, 2, 0], [58300.15789473684, 3, 0], [58458.05263157895, 2, 0], [58615.94736842105, 1, 0], [58773.84210526316, 0, 0], [58931.73684210526, 1, 0], [59089.63157894737, 2, 0], [59247.52631578947, 3, 0], [59405.42105263158, 2, 0], [59563.31578947369, 3, 0], [59721.21052631579, 0, 0], [59879.10526315789, 1, 0], [60037.0, 2, 0], [60194.89473684211, 0, 0], [60352.78947368421, 1, 0], [60510.68421052631, 2, 0]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": [[60668.57894736842, 3, 0], [60826.47368421053, 2, 0], [60984.36842105263, 0, 0], [61142.26315789474, 1, 0], [61300.15789473684, 2, 0], [61458.05263157895, 0, 0], [61615.94736842105, 1, 0], [61773.84210526316, 2, 0], [61931.73684210526, 3, 0], [62089.63157894737, 2, 0], [62247.52631578947, 1, 2210.5263157894733]]}, {"lengthInSteps": 16, "bpm": 95.0, "changeBPM": false, "mustHitSection": true, "typeOfSection": 0, "sectionNotes": []}], "bpm": 95.0, "sections": 0, "needsVoices": false, "player1": "bf", "player2": "gf", "sectionLengths": [], "speed": 3}} \ No newline at end of file diff --git a/assets/preload/music/freakyMenu.mp3 b/assets/preload/music/freakyMenu.mp3 deleted file mode 100644 index 8132bfe..0000000 Binary files a/assets/preload/music/freakyMenu.mp3 and /dev/null differ diff --git a/assets/preload/music/freakyMenu.ogg b/assets/preload/music/freakyMenu.ogg index 372111d..38abc15 100644 Binary files a/assets/preload/music/freakyMenu.ogg and b/assets/preload/music/freakyMenu.ogg differ diff --git a/assets/shared/images/NOTE_assets.png b/assets/shared/images/NOTE_assets.png index 8e9f3a0..3259d0b 100644 Binary files a/assets/shared/images/NOTE_assets.png and b/assets/shared/images/NOTE_assets.png differ diff --git a/assets/shared/images/NOTE_assets.xml b/assets/shared/images/NOTE_assets.xml index 6e80b13..76224ce 100644 --- a/assets/shared/images/NOTE_assets.xml +++ b/assets/shared/images/NOTE_assets.xml @@ -1,92 +1,45 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/shared/images/characters/bf-carOffsets.txt b/assets/shared/images/characters/bf-carOffsets.txt new file mode 100644 index 0000000..5bbfae1 --- /dev/null +++ b/assets/shared/images/characters/bf-carOffsets.txt @@ -0,0 +1,9 @@ +idle -5 0 +singUP -29 27 +singRIGHT -38 -7 +singLEFT 12 -6 +singDOWN -10 -50 +singUPmiss -29 27 +singRIGHTmiss -30 21 +singLEFTmiss 12 24 +singDOWNmiss -11 -19 diff --git a/assets/shared/images/characters/bf-christmasOffsets.txt b/assets/shared/images/characters/bf-christmasOffsets.txt new file mode 100644 index 0000000..0142844 --- /dev/null +++ b/assets/shared/images/characters/bf-christmasOffsets.txt @@ -0,0 +1,10 @@ +idle -5 0 +singUP -29 27 +singRIGHT -38 -7 +singLEFT 12 -6 +singDOWN -10 -50 +singUPmiss -29 27 +singRIGHTmiss -30 21 +singLEFTmiss 12 24 +singDOWNmiss -11 -19 +hey 7 4 diff --git a/assets/shared/images/characters/bf-pixel-deadOffsets.txt b/assets/shared/images/characters/bf-pixel-deadOffsets.txt new file mode 100644 index 0000000..3544a2c --- /dev/null +++ b/assets/shared/images/characters/bf-pixel-deadOffsets.txt @@ -0,0 +1,3 @@ +firstDeath 0 0 +deathLoop -30 -12 +deathConfirm -30 -12 diff --git a/assets/shared/images/characters/bf-pixelOffsets.txt b/assets/shared/images/characters/bf-pixelOffsets.txt new file mode 100644 index 0000000..b8a8292 --- /dev/null +++ b/assets/shared/images/characters/bf-pixelOffsets.txt @@ -0,0 +1,9 @@ +idle 0 0 +singUP 0 0 +singRIGHT 0 0 +singLEFT 0 0 +singDOWN 0 0 +singUPmiss 0 0 +singRIGHTmiss 0 0 +singLEFTmiss 0 0 +singDOWNmiss 0 0 diff --git a/assets/shared/images/characters/bfOffsets.txt b/assets/shared/images/characters/bfOffsets.txt new file mode 100644 index 0000000..6ec2321 --- /dev/null +++ b/assets/shared/images/characters/bfOffsets.txt @@ -0,0 +1,14 @@ +idle -5 0 +singUP -29 27 +singRIGHT -38 -7 +singLEFT 12 -6 +singDOWN -10 -50 +singUPmiss -29 27 +singRIGHTmiss -30 21 +singLEFTmiss 12 24 +singDOWNmiss -11 -19 +hey 7 4 +firstDeath 37 11 +deathLoop 37 5 +deathConfirm 37 69 +scared -4 0 diff --git a/assets/shared/images/characters/bfPixelsDEAD.xml b/assets/shared/images/characters/bfPixelsDEAD.xml index 2d741ca..be3478c 100644 --- a/assets/shared/images/characters/bfPixelsDEAD.xml +++ b/assets/shared/images/characters/bfPixelsDEAD.xml @@ -1,7 +1,7 @@  - - + + @@ -58,8 +58,8 @@ - - + + diff --git a/assets/shared/images/characters/dadOffsets.txt b/assets/shared/images/characters/dadOffsets.txt new file mode 100644 index 0000000..69ba153 --- /dev/null +++ b/assets/shared/images/characters/dadOffsets.txt @@ -0,0 +1,5 @@ +idle 0 0 +singUP -6 50 +singRIGHT 0 27 +singLEFT -10 10 +singDOWN 0 -30 diff --git a/assets/shared/images/characters/gf-carOffsets.txt b/assets/shared/images/characters/gf-carOffsets.txt new file mode 100644 index 0000000..9862aae --- /dev/null +++ b/assets/shared/images/characters/gf-carOffsets.txt @@ -0,0 +1,2 @@ +danceLeft 0 0 +danceRight 0 0 diff --git a/assets/shared/images/characters/gf-christmasOffsets.txt b/assets/shared/images/characters/gf-christmasOffsets.txt new file mode 100644 index 0000000..05abb7a --- /dev/null +++ b/assets/shared/images/characters/gf-christmasOffsets.txt @@ -0,0 +1,11 @@ +cheer 0 0 +sad -2 -21 +danceLeft 0 -9 +danceRight 0 -9 +singUP 0 4 +singRIGHT 0 -20 +singLEFT 0 -19 +singDOWN 0 -20 +hairBlow 45 -8 +hairFall 0 -9 +scared -2 -17 diff --git a/assets/shared/images/characters/gf-pixelOffsets.txt b/assets/shared/images/characters/gf-pixelOffsets.txt new file mode 100644 index 0000000..9862aae --- /dev/null +++ b/assets/shared/images/characters/gf-pixelOffsets.txt @@ -0,0 +1,2 @@ +danceLeft 0 0 +danceRight 0 0 diff --git a/assets/shared/images/characters/gfOffsets.txt b/assets/shared/images/characters/gfOffsets.txt new file mode 100644 index 0000000..05abb7a --- /dev/null +++ b/assets/shared/images/characters/gfOffsets.txt @@ -0,0 +1,11 @@ +cheer 0 0 +sad -2 -21 +danceLeft 0 -9 +danceRight 0 -9 +singUP 0 4 +singRIGHT 0 -20 +singLEFT 0 -19 +singDOWN 0 -20 +hairBlow 45 -8 +hairFall 0 -9 +scared -2 -17 diff --git a/assets/shared/images/characters/mom-carOffsets.txt b/assets/shared/images/characters/mom-carOffsets.txt new file mode 100644 index 0000000..65cbecd --- /dev/null +++ b/assets/shared/images/characters/mom-carOffsets.txt @@ -0,0 +1,5 @@ +idle 0 0 +singUP 14 71 +singRIGHT 10 -60 +singLEFT 250 -23 +singDOWN 20 -160 diff --git a/assets/shared/images/characters/momOffsets.txt b/assets/shared/images/characters/momOffsets.txt new file mode 100644 index 0000000..65cbecd --- /dev/null +++ b/assets/shared/images/characters/momOffsets.txt @@ -0,0 +1,5 @@ +idle 0 0 +singUP 14 71 +singRIGHT 10 -60 +singLEFT 250 -23 +singDOWN 20 -160 diff --git a/assets/shared/images/characters/monster-christmasOffsets.txt b/assets/shared/images/characters/monster-christmasOffsets.txt new file mode 100644 index 0000000..a357046 --- /dev/null +++ b/assets/shared/images/characters/monster-christmasOffsets.txt @@ -0,0 +1,5 @@ +idle 0 0 +singUP -20 50 +singRIGHT -51 0 +singLEFT -30 0 +singDOWN -40 -94 diff --git a/assets/shared/images/characters/monsterOffsets.txt b/assets/shared/images/characters/monsterOffsets.txt new file mode 100644 index 0000000..e211a5f --- /dev/null +++ b/assets/shared/images/characters/monsterOffsets.txt @@ -0,0 +1,5 @@ +idle 0 0 +singUP -20 94 +singRIGHT -51 30 +singLEFT -30 20 +singDOWN -50 -80 diff --git a/assets/shared/images/characters/parents-christmasOffsets.txt b/assets/shared/images/characters/parents-christmasOffsets.txt new file mode 100644 index 0000000..bdee13c --- /dev/null +++ b/assets/shared/images/characters/parents-christmasOffsets.txt @@ -0,0 +1,9 @@ +idle 0 0 +singUP -47 24 +singRIGHT -1 -23 +singLEFT -30 16 +singDOWN -31 -29 +singUP-alt -47 24 +singRIGHT-alt -1 -24 +singLEFT-alt -30 15 +singDOWN-alt -30 -27 diff --git a/assets/shared/images/characters/picoOffsets.txt b/assets/shared/images/characters/picoOffsets.txt new file mode 100644 index 0000000..e209da7 --- /dev/null +++ b/assets/shared/images/characters/picoOffsets.txt @@ -0,0 +1,9 @@ +idle 0 0 +singUP -29 27 +singRIGHT -68 -7 +singLEFT 65 9 +singDOWN 200 -70 +singUPmiss -19 67 +singRIGHTmiss -60 41 +singLEFTmiss 62 64 +singDOWNmiss 210 -28 diff --git a/assets/shared/images/characters/senpai-angryOffsets.txt b/assets/shared/images/characters/senpai-angryOffsets.txt new file mode 100644 index 0000000..c118259 --- /dev/null +++ b/assets/shared/images/characters/senpai-angryOffsets.txt @@ -0,0 +1,5 @@ +idle 0 0 +singUP 5 37 +singRIGHT 0 0 +singLEFT 40 0 +singDOWN 14 0 diff --git a/assets/shared/images/characters/senpaiOffsets.txt b/assets/shared/images/characters/senpaiOffsets.txt new file mode 100644 index 0000000..c118259 --- /dev/null +++ b/assets/shared/images/characters/senpaiOffsets.txt @@ -0,0 +1,5 @@ +idle 0 0 +singUP 5 37 +singRIGHT 0 0 +singLEFT 40 0 +singDOWN 14 0 diff --git a/assets/shared/images/characters/spiritOffsets.txt b/assets/shared/images/characters/spiritOffsets.txt new file mode 100644 index 0000000..ed2442d --- /dev/null +++ b/assets/shared/images/characters/spiritOffsets.txt @@ -0,0 +1,5 @@ +idle -220 -280 +singUP -220 -240 +singRIGHT -220 -280 +singLEFT -200 -280 +singDOWN 170 110 diff --git a/assets/shared/images/characters/spookyOffsets.txt b/assets/shared/images/characters/spookyOffsets.txt new file mode 100644 index 0000000..c14c5e7 --- /dev/null +++ b/assets/shared/images/characters/spookyOffsets.txt @@ -0,0 +1,6 @@ +danceLeft 0 0 +danceRight 0 0 +singUP -20 26 +singRIGHT -130 -14 +singLEFT 130 -10 +singDOWN -50 -130 diff --git a/assets/songs/test/Inst.mp3 b/assets/songs/test/Inst.mp3 deleted file mode 100644 index 87d9932..0000000 Binary files a/assets/songs/test/Inst.mp3 and /dev/null differ diff --git a/assets/songs/test/Inst.ogg b/assets/songs/test/Inst.ogg index f39e2b1..7a16671 100644 Binary files a/assets/songs/test/Inst.ogg and b/assets/songs/test/Inst.ogg differ diff --git a/assets/songs/test/Voices.mp3 b/assets/songs/test/Voices.mp3 deleted file mode 100644 index 9625266..0000000 Binary files a/assets/songs/test/Voices.mp3 and /dev/null differ diff --git a/assets/songs/test/Voices.ogg b/assets/songs/test/Voices.ogg deleted file mode 100644 index 49f0f5d..0000000 Binary files a/assets/songs/test/Voices.ogg and /dev/null differ diff --git a/docs/guides/weeks.md b/docs/guides/weeks.md index 90b89ca..f2097cb 100644 --- a/docs/guides/weeks.md +++ b/docs/guides/weeks.md @@ -15,8 +15,10 @@ Scroll down to Line 26, or Search (Windows/Linux: `Ctrl+F`, Mac: `Cmd+F`) for "w --- ```haxe -var weekData:Array = [ - +static function weekData():Array +{ + return [ + ['Tutorial'], ['Bopeebo', 'Fresh', 'Dadbattle'], @@ -30,8 +32,9 @@ var weekData:Array = [ ['Cocoa', 'Eggnog', 'Winter-Horrorland'], ['Senpai', 'Roses', 'Thorns'] - -]; + + ]; +} ``` --- @@ -45,8 +48,10 @@ Example --- ```haxe -var weekData:Array = [ - +static function weekData():Array +{ + return [ + ['Tutorial'], ['Bopeebo', 'Fresh', 'Dadbattle'], @@ -58,12 +63,13 @@ var weekData:Array = [ ['Satin-Panties', "High", "Milf"], ['Cocoa', 'Eggnog', 'Winter-Horrorland'], - + ['Senpai', 'Roses', 'Thorns'], ['Ugh', 'Guns', 'Stress'] - -]; + + ]; +} ``` --- diff --git a/source/Caching.hx b/source/Caching.hx index 2c6fb50..1cbbcd6 100644 --- a/source/Caching.hx +++ b/source/Caching.hx @@ -83,6 +83,7 @@ class Caching extends MusicBeatState var images = []; var music = []; + var charts = []; trace("caching images..."); @@ -99,6 +100,7 @@ class Caching extends MusicBeatState { music.push(i); } + toBeDone = Lambda.count(images) + Lambda.count(music); @@ -120,6 +122,7 @@ class Caching extends MusicBeatState done++; } + trace("Finished caching..."); FlxG.switchState(new TitleState()); diff --git a/source/Character.hx b/source/Character.hx index f9df179..73ff66c 100644 --- a/source/Character.hx +++ b/source/Character.hx @@ -46,19 +46,7 @@ class Character extends FlxSprite animation.addByIndices('hairFall', "GF Dancing Beat Hair Landing", [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "", 24, false); animation.addByPrefix('scared', 'GF FEAR', 24); - addOffset('cheer'); - addOffset('sad', -2, -2); - addOffset('danceLeft', 0, -9); - addOffset('danceRight', 0, -9); - - addOffset("singUP", 0, 4); - addOffset("singRIGHT", 0, -20); - addOffset("singLEFT", 0, -19); - addOffset("singDOWN", 0, -20); - addOffset('hairBlow', 45, -8); - addOffset('hairFall', 0, -9); - - addOffset('scared', -2, -17); + loadOffsetFile(curCharacter); playAnim('danceRight'); @@ -77,19 +65,7 @@ class Character extends FlxSprite animation.addByIndices('hairFall', "GF Dancing Beat Hair Landing", [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "", 24, false); animation.addByPrefix('scared', 'GF FEAR', 24); - addOffset('cheer'); - addOffset('sad', -2, -2); - addOffset('danceLeft', 0, -9); - addOffset('danceRight', 0, -9); - - addOffset("singUP", 0, 4); - addOffset("singRIGHT", 0, -20); - addOffset("singLEFT", 0, -19); - addOffset("singDOWN", 0, -20); - addOffset('hairBlow', 45, -8); - addOffset('hairFall', 0, -9); - - addOffset('scared', -2, -17); + loadOffsetFile(curCharacter); playAnim('danceRight'); @@ -101,8 +77,7 @@ class Character extends FlxSprite animation.addByIndices('danceRight', 'GF Dancing Beat Hair blowing CAR', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false); - addOffset('danceLeft', 0); - addOffset('danceRight', 0); + loadOffsetFile(curCharacter); playAnim('danceRight'); @@ -113,8 +88,7 @@ class Character extends FlxSprite animation.addByIndices('danceLeft', 'GF IDLE', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false); animation.addByIndices('danceRight', 'GF IDLE', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false); - addOffset('danceLeft', 0); - addOffset('danceRight', 0); + loadOffsetFile(curCharacter); playAnim('danceRight'); @@ -132,11 +106,7 @@ class Character extends FlxSprite animation.addByPrefix('singDOWN', 'Dad Sing Note DOWN', 24); animation.addByPrefix('singLEFT', 'Dad Sing Note LEFT', 24); - addOffset('idle'); - addOffset("singUP", -6, 50); - addOffset("singRIGHT", 0, 27); - addOffset("singLEFT", -10, 10); - addOffset("singDOWN", 0, -30); + loadOffsetFile(curCharacter); playAnim('idle'); case 'spooky': @@ -149,13 +119,7 @@ class Character extends FlxSprite animation.addByIndices('danceLeft', 'spooky dance idle', [0, 2, 6], "", 12, false); animation.addByIndices('danceRight', 'spooky dance idle', [8, 10, 12, 14], "", 12, false); - addOffset('danceLeft'); - addOffset('danceRight'); - - addOffset("singUP", -20, 26); - addOffset("singRIGHT", -130, -14); - addOffset("singLEFT", 130, -10); - addOffset("singDOWN", -50, -130); + loadOffsetFile(curCharacter); playAnim('danceRight'); case 'mom': @@ -170,11 +134,7 @@ class Character extends FlxSprite // CUZ DAVE IS DUMB! animation.addByPrefix('singRIGHT', 'Mom Pose Left', 24, false); - addOffset('idle'); - addOffset("singUP", 14, 71); - addOffset("singRIGHT", 10, -60); - addOffset("singLEFT", 250, -23); - addOffset("singDOWN", 20, -160); + loadOffsetFile(curCharacter); playAnim('idle'); @@ -190,11 +150,7 @@ class Character extends FlxSprite // CUZ DAVE IS DUMB! animation.addByPrefix('singRIGHT', 'Mom Pose Left', 24, false); - addOffset('idle'); - addOffset("singUP", 14, 71); - addOffset("singRIGHT", 10, -60); - addOffset("singLEFT", 250, -23); - addOffset("singDOWN", 20, -160); + loadOffsetFile(curCharacter); playAnim('idle'); case 'monster': @@ -206,11 +162,7 @@ class Character extends FlxSprite animation.addByPrefix('singLEFT', 'Monster left note', 24, false); animation.addByPrefix('singRIGHT', 'Monster Right note', 24, false); - addOffset('idle'); - addOffset("singUP", -20, 50); - addOffset("singRIGHT", -51); - addOffset("singLEFT", -30); - addOffset("singDOWN", -30, -40); + loadOffsetFile(curCharacter); playAnim('idle'); case 'monster-christmas': tex = Paths.getSparrowAtlas('characters/monsterChristmas'); @@ -221,11 +173,7 @@ class Character extends FlxSprite animation.addByPrefix('singLEFT', 'Monster left note', 24, false); animation.addByPrefix('singRIGHT', 'Monster Right note', 24, false); - addOffset('idle'); - addOffset("singUP", -20, 50); - addOffset("singRIGHT", -51); - addOffset("singLEFT", -30); - addOffset("singDOWN", -40, -94); + loadOffsetFile(curCharacter); playAnim('idle'); case 'pico': tex = Paths.getSparrowAtlas('characters/Pico_FNF_assetss'); @@ -252,15 +200,7 @@ class Character extends FlxSprite animation.addByPrefix('singUPmiss', 'pico Up note miss', 24); animation.addByPrefix('singDOWNmiss', 'Pico Down Note MISS', 24); - addOffset('idle'); - addOffset("singUP", -29, 27); - addOffset("singRIGHT", -68, -7); - addOffset("singLEFT", 65, 9); - addOffset("singDOWN", 200, -70); - addOffset("singUPmiss", -19, 67); - addOffset("singRIGHTmiss", -60, 41); - addOffset("singLEFTmiss", 62, 64); - addOffset("singDOWNmiss", 210, -28); + loadOffsetFile(curCharacter); playAnim('idle'); @@ -289,20 +229,7 @@ class Character extends FlxSprite animation.addByPrefix('scared', 'BF idle shaking', 24); - addOffset('idle', -5); - addOffset("singUP", -29, 27); - addOffset("singRIGHT", -38, -7); - addOffset("singLEFT", 12, -6); - addOffset("singDOWN", -10, -50); - addOffset("singUPmiss", -29, 27); - addOffset("singRIGHTmiss", -30, 21); - addOffset("singLEFTmiss", 12, 24); - addOffset("singDOWNmiss", -11, -19); - addOffset("hey", 7, 4); - addOffset('firstDeath', 37, 11); - addOffset('deathLoop', 37, 5); - addOffset('deathConfirm', 37, 69); - addOffset('scared', -4); + loadOffsetFile(curCharacter); playAnim('idle'); @@ -322,16 +249,7 @@ class Character extends FlxSprite animation.addByPrefix('singDOWNmiss', 'BF NOTE DOWN MISS', 24, false); animation.addByPrefix('hey', 'BF HEY', 24, false); - addOffset('idle', -5); - addOffset("singUP", -29, 27); - addOffset("singRIGHT", -38, -7); - addOffset("singLEFT", 12, -6); - addOffset("singDOWN", -10, -50); - addOffset("singUPmiss", -29, 27); - addOffset("singRIGHTmiss", -30, 21); - addOffset("singLEFTmiss", 12, 24); - addOffset("singDOWNmiss", -11, -19); - addOffset("hey", 7, 4); + loadOffsetFile(curCharacter); playAnim('idle'); @@ -349,15 +267,7 @@ class Character extends FlxSprite animation.addByPrefix('singRIGHTmiss', 'BF NOTE RIGHT MISS', 24, false); animation.addByPrefix('singDOWNmiss', 'BF NOTE DOWN MISS', 24, false); - addOffset('idle', -5); - addOffset("singUP", -29, 27); - addOffset("singRIGHT", -38, -7); - addOffset("singLEFT", 12, -6); - addOffset("singDOWN", -10, -50); - addOffset("singUPmiss", -29, 27); - addOffset("singRIGHTmiss", -30, 21); - addOffset("singLEFTmiss", 12, 24); - addOffset("singDOWNmiss", -11, -19); + loadOffsetFile(curCharacter); playAnim('idle'); flipX = true; @@ -373,15 +283,7 @@ class Character extends FlxSprite animation.addByPrefix('singRIGHTmiss', 'BF RIGHT MISS', 24, false); animation.addByPrefix('singDOWNmiss', 'BF DOWN MISS', 24, false); - addOffset('idle'); - addOffset("singUP"); - addOffset("singRIGHT"); - addOffset("singLEFT"); - addOffset("singDOWN"); - addOffset("singUPmiss"); - addOffset("singRIGHTmiss"); - addOffset("singLEFTmiss"); - addOffset("singDOWNmiss"); + loadOffsetFile(curCharacter); setGraphicSize(Std.int(width * 6)); updateHitbox(); @@ -402,9 +304,7 @@ class Character extends FlxSprite animation.addByPrefix('deathConfirm', "RETRY CONFIRM", 24, false); animation.play('firstDeath'); - addOffset('firstDeath'); - addOffset('deathLoop', -37); - addOffset('deathConfirm', -37); + loadOffsetFile(curCharacter); playAnim('firstDeath'); // pixel bullshit setGraphicSize(Std.int(width * 6)); @@ -420,11 +320,7 @@ class Character extends FlxSprite animation.addByPrefix('singRIGHT', 'SENPAI RIGHT NOTE', 24, false); animation.addByPrefix('singDOWN', 'SENPAI DOWN NOTE', 24, false); - addOffset('idle'); - addOffset("singUP", 5, 37); - addOffset("singRIGHT"); - addOffset("singLEFT", 40); - addOffset("singDOWN", 14); + loadOffsetFile(curCharacter); playAnim('idle'); @@ -440,11 +336,7 @@ class Character extends FlxSprite animation.addByPrefix('singRIGHT', 'Angry Senpai RIGHT NOTE', 24, false); animation.addByPrefix('singDOWN', 'Angry Senpai DOWN NOTE', 24, false); - addOffset('idle'); - addOffset("singUP", 5, 37); - addOffset("singRIGHT"); - addOffset("singLEFT", 40); - addOffset("singDOWN", 14); + loadOffsetFile(curCharacter); playAnim('idle'); setGraphicSize(Std.int(width * 6)); @@ -460,11 +352,7 @@ class Character extends FlxSprite animation.addByPrefix('singLEFT', "left_", 24, false); animation.addByPrefix('singDOWN', "spirit down_", 24, false); - addOffset('idle', -220, -280); - addOffset('singUP', -220, -240); - addOffset("singRIGHT", -220, -280); - addOffset("singLEFT", -200, -280); - addOffset("singDOWN", 170, 110); + loadOffsetFile(curCharacter); setGraphicSize(Std.int(width * 6)); updateHitbox(); @@ -487,15 +375,7 @@ class Character extends FlxSprite animation.addByPrefix('singLEFT-alt', 'Parent Left Note Mom', 24, false); animation.addByPrefix('singRIGHT-alt', 'Parent Right Note Mom', 24, false); - addOffset('idle'); - addOffset("singUP", -47, 24); - addOffset("singRIGHT", -1, -23); - addOffset("singLEFT", -30, 16); - addOffset("singDOWN", -31, -29); - addOffset("singUP-alt", -47, 24); - addOffset("singRIGHT-alt", -1, -24); - addOffset("singLEFT-alt", -30, 15); - addOffset("singDOWN-alt", -30, -27); + loadOffsetFile(curCharacter); playAnim('idle'); } @@ -525,6 +405,17 @@ class Character extends FlxSprite } } + public function loadOffsetFile(character:String) + { + var offset:Array = CoolUtil.coolTextFile(Paths.txt('images/characters/' + character + "Offsets")); + + for (i in 0...offset.length) + { + var data:Array = offset[i].split(' '); + addOffset(data[0], Std.parseInt(data[1]), Std.parseInt(data[2])); + } + } + override function update(elapsed:Float) { if (!curCharacter.startsWith('bf')) diff --git a/source/ChartingState.hx b/source/ChartingState.hx index 4371fad..154ac67 100644 --- a/source/ChartingState.hx +++ b/source/ChartingState.hx @@ -309,10 +309,10 @@ class ChartingState extends MusicBeatState shiftNotes(Std.int(stepperShiftNoteDial.value),Std.int(stepperShiftNoteDialstep.value),Std.int(stepperShiftNoteDialms.value)); }); - var characters:Array = CoolUtil.coolTextFile(Paths.txt('characterList')); - var gfVersions:Array = CoolUtil.coolTextFile(Paths.txt('gfVersionList')); - var stages:Array = CoolUtil.coolTextFile(Paths.txt('stageList')); - var noteStyles:Array = CoolUtil.coolTextFile(Paths.txt('noteStyleList')); + var characters:Array = CoolUtil.coolTextFile(Paths.txt('data/characterList')); + var gfVersions:Array = CoolUtil.coolTextFile(Paths.txt('data/gfVersionList')); + var stages:Array = CoolUtil.coolTextFile(Paths.txt('data/stageList')); + var noteStyles:Array = CoolUtil.coolTextFile(Paths.txt('data/noteStyleList')); var player1DropDown = new FlxUIDropDownMenu(10, 100, FlxUIDropDownMenu.makeStrIdLabelArray(characters, true), function(character:String) { @@ -1240,6 +1240,7 @@ class ChartingState extends MusicBeatState var daSus = i[2]; var note:Note = new Note(daStrumTime, daNoteInfo % 4,null,false,true); + note.rawNoteData = daNoteInfo; note.sustainLength = daSus; note.setGraphicSize(GRID_SIZE, GRID_SIZE); note.updateHitbox(); @@ -1282,7 +1283,7 @@ class ChartingState extends MusicBeatState for (i in _song.notes[curSection].sectionNotes) { - if (i.strumTime == note.strumTime && i.noteData % 4 == note.noteData) + if (i[0] == note.strumTime && i[1] == note.rawNoteData) { curSelectedNote = _song.notes[curSection].sectionNotes[swagNum]; } @@ -1300,7 +1301,7 @@ class ChartingState extends MusicBeatState lastNote = note; for (i in _song.notes[curSection].sectionNotes) { - if (i[0] == note.strumTime && i[1] % 4 == note.noteData) + if (i[0] == note.strumTime && i[1] == note.rawNoteData) { _song.notes[curSection].sectionNotes.remove(i); } diff --git a/source/DialogueBox.hx b/source/DialogueBox.hx index d52358c..07363c6 100644 --- a/source/DialogueBox.hx +++ b/source/DialogueBox.hx @@ -155,7 +155,7 @@ class DialogueBox extends FlxSpriteGroup portraitLeft.visible = false; if (PlayState.SONG.song.toLowerCase() == 'thorns') { - portraitLeft.color = FlxColor.BLACK; + portraitLeft.visible = false; swagDialogue.color = FlxColor.WHITE; dropText.color = FlxColor.BLACK; } diff --git a/source/DiffCalc.hx b/source/DiffCalc.hx new file mode 100644 index 0000000..a1c7a7a --- /dev/null +++ b/source/DiffCalc.hx @@ -0,0 +1,140 @@ +import Song.SwagSong; + +class SmallNote // basically Note.hx but small as fuck +{ + public var strumTime:Float; + public var noteData:Int; + + public function new(strum,data) + { + strumTime = strum; + noteData = data; + } +} + +class DiffCalc +{ + public static function CalculateDiff(song:SwagSong) + { + // cleaned notes + var cleanedNotes:Array = []; + + // find all of the notes + for(i in song.notes) // sections + { + for (ii in i.sectionNotes) // notes + { + if (ii[2] != 0) // skip helds + continue; + var gottaHitNote:Bool = i.mustHitSection; + + if (ii[1] > 3) + gottaHitNote = !i.mustHitSection; + + if (gottaHitNote) + cleanedNotes.push(new SmallNote(ii[0],Math.floor(Math.abs(ii[1])))); + } + } + + var handOne:Array = []; + var handTwo:Array = []; + + cleanedNotes.sort((a, b) -> Std.int(a.strumTime - b.strumTime)); + + var firstNoteTime = cleanedNotes[0].strumTime; + + // normalize the notes + + for(i in cleanedNotes) + { + i.strumTime = (i.strumTime - firstNoteTime) * 2; + } + + for (i in cleanedNotes) + { + switch(i.noteData) + { + case 0: + handOne.push(i); + case 1: + handTwo.push(i); + case 2: + handTwo.push(i); + case 3: + handOne.push(i); + } + } + + + // length in segments of the song + var length = ((cleanedNotes[cleanedNotes.length - 1].strumTime / 1000) / 0.5); + + // hackey way of creating a array with a length + var segmentsOne:Array = new_Array(1,Std.int(length)); + var segmentsTwo:Array = new_Array(1,Std.int(length)); + + // algo loop + for(i in handOne) + { + var index = Std.int(((i.strumTime / 1000))); + if (index + 1 > segmentsOne.length) + continue; + segmentsOne[index] = segmentsOne[index] + 1; + } + + for(i in handTwo) + { + var index = Std.int(((i.strumTime / 1000))); + if (index + 1 > segmentsTwo.length) + continue; + segmentsTwo[index] = segmentsTwo[index] + 1; + } + + // get the average of all of the segments + var sumOne:Float = 0; + var sumTwo:Float = 0; + + + var lone = segmentsOne.length; + var ltwo = segmentsOne.length; + + for (i in segmentsOne) + { + if (i == 0) // remove empty/breaks + { + lone--; + continue; + } + //trace(i); + sumOne += i / .5; // half it because otherwise instead of nps its just fucking notes per half second which is dumb and stupid + } + + for (i in segmentsTwo) + { + if (i == 0) // remove empty/breaks + { + ltwo--; + continue; + } + //trace(i); + sumTwo += i / .5; // half it because otherwise instead of nps its just fucking notes per half second which is dumb and stupid + } + + + var handOneAvg = sumOne / lone; + var handTwoAvg = sumTwo / ltwo; + + return HelperFunctions.truncateFloat(handOneAvg > handTwoAvg ? handOneAvg : handTwoAvg,2); + } + + static public function new_Array( ArrayType:T, Length:Int ):Array { + var empty:Null = null; + var newArray:Array = new Array(); + + for ( i in 0...Length ) { + newArray.push( empty ); + } + + return newArray; + } +} \ No newline at end of file diff --git a/source/FreeplayState.hx b/source/FreeplayState.hx index 243d970..d62c538 100644 --- a/source/FreeplayState.hx +++ b/source/FreeplayState.hx @@ -1,5 +1,6 @@ package; +import Song.SwagSong; import flixel.input.gamepad.FlxGamepad; import flash.text.TextField; import flixel.FlxG; @@ -29,6 +30,7 @@ class FreeplayState extends MusicBeatState var scoreText:FlxText; var comboText:FlxText; var diffText:FlxText; + var diffCalcText:FlxText; var lerpScore:Int = 0; var intendedScore:Int = 0; var combo:String = ''; @@ -38,16 +40,66 @@ class FreeplayState extends MusicBeatState private var iconArray:Array = []; + public static var songData:Map> = []; + + public static function loadDiff(diff:Int, format:String, name:String, array:Array) + { + try + { + array.push(Song.loadFromJson(Highscore.formatSong(format, diff), name)); + } + catch(ex) + { + // do nada + } + } + override function create() { - var initSonglist = CoolUtil.coolTextFile(Paths.txt('freeplaySonglist')); + var initSonglist = CoolUtil.coolTextFile(Paths.txt('data/freeplaySonglist')); + + //var diffList = ""; for (i in 0...initSonglist.length) { var data:Array = initSonglist[i].split(':'); - songs.push(new SongMetadata(data[0], Std.parseInt(data[2]), data[1])); + var meta = new SongMetadata(data[0], Std.parseInt(data[2]), data[1]); + #if debug + songs.push(meta); + var format = StringTools.replace(meta.songName, " ", "-"); + switch (format) { + case 'Dad-Battle': format = 'Dadbattle'; + case 'Philly-Nice': format = 'Philly'; + } + + var diffs = []; + FreeplayState.loadDiff(0,format,meta.songName,diffs); + FreeplayState.loadDiff(1,format,meta.songName,diffs); + FreeplayState.loadDiff(2,format,meta.songName,diffs); + FreeplayState.songData.set(meta.songName,diffs); + trace('loaded diffs for ' + meta.songName); + #else + if(Std.parseInt(data[2]) <= FlxG.save.data.weekUnlocked - 1) + { + songs.push(meta); + var format = StringTools.replace(meta.songName, " ", "-"); + switch (format) { + case 'Dad-Battle': format = 'Dadbattle'; + case 'Philly-Nice': format = 'Philly'; + } + + var diffs = []; + FreeplayState.loadDiff(0,format,meta.songName,diffs); + FreeplayState.loadDiff(1,format,meta.songName,diffs); + FreeplayState.loadDiff(2,format,meta.songName,diffs); + FreeplayState.songData.set(meta.songName,diffs); + trace('loaded diffs for ' + meta.songName); + } + #end } + //trace("\n" + diffList); + /* if (FlxG.sound.music != null) { @@ -101,7 +153,7 @@ class FreeplayState extends MusicBeatState scoreText.setFormat(Paths.font("vcr.ttf"), 32, FlxColor.WHITE, RIGHT); // scoreText.alignment = RIGHT; - var scoreBG:FlxSprite = new FlxSprite(scoreText.x - 6, 0).makeGraphic(Std.int(FlxG.width * 0.35), 66, 0xFF000000); + var scoreBG:FlxSprite = new FlxSprite(scoreText.x - 6, 0).makeGraphic(Std.int(FlxG.width * 0.35), 105, 0xFF000000); scoreBG.alpha = 0.6; add(scoreBG); @@ -109,6 +161,10 @@ class FreeplayState extends MusicBeatState diffText.font = scoreText.font; add(diffText); + diffCalcText = new FlxText(scoreText.x, scoreText.y + 66, 0, "", 24); + diffCalcText.font = scoreText.font; + add(diffCalcText); + comboText = new FlxText(diffText.x + 100, diffText.y, 0, "", 24); comboText.font = diffText.font; add(comboText); @@ -238,14 +294,20 @@ class FreeplayState extends MusicBeatState case 'Dad-Battle': songFormat = 'Dadbattle'; case 'Philly-Nice': songFormat = 'Philly'; } - - trace(songs[curSelected].songName); + var hmm; + try + { + hmm = songData.get(songs[curSelected].songName)[curDifficulty]; + if (hmm == null) + return; + } + catch(ex) + { + return; + } - var poop:String = Highscore.formatSong(songFormat, curDifficulty); - trace(poop); - - PlayState.SONG = Song.loadFromJson(poop, songs[curSelected].songName); + PlayState.SONG = hmm; PlayState.isStoryMode = false; PlayState.storyDifficulty = curDifficulty; PlayState.storyWeek = songs[curSelected].week; @@ -274,7 +336,7 @@ class FreeplayState extends MusicBeatState intendedScore = Highscore.getScore(songHighscore, curDifficulty); combo = Highscore.getCombo(songHighscore, curDifficulty); #end - + diffCalcText.text = 'RATING: ${DiffCalc.CalculateDiff(songData.get(songs[curSelected].songName)[curDifficulty])}'; diffText.text = CoolUtil.difficultyFromInt(curDifficulty).toUpperCase(); } @@ -310,6 +372,8 @@ class FreeplayState extends MusicBeatState // lerpScore = 0; #end + diffCalcText.text = 'RATING: ${DiffCalc.CalculateDiff(songData.get(songs[curSelected].songName)[curDifficulty])}'; + #if PRELOAD_ALL FlxG.sound.playMusic(Paths.inst(songs[curSelected].songName), 0); #end diff --git a/source/KadeEngineData.hx b/source/KadeEngineData.hx index 0a26829..2e5b424 100644 --- a/source/KadeEngineData.hx +++ b/source/KadeEngineData.hx @@ -6,7 +6,10 @@ class KadeEngineData { public static function initSave() { - if (FlxG.save.data.newInput == null) + if (FlxG.save.data.weekUnlocked == null) + FlxG.save.data.weekUnlocked = 7; + + if (FlxG.save.data.newInput == null) FlxG.save.data.newInput = true; if (FlxG.save.data.downscroll == null) diff --git a/source/KeyBindMenu.hx b/source/KeyBindMenu.hx index d5a3d41..ff826bb 100644 --- a/source/KeyBindMenu.hx +++ b/source/KeyBindMenu.hx @@ -320,7 +320,7 @@ class KeyBindMenu extends FlxSubState var shouldReturn:Bool = true; - var notAllowed:Array = ["START", "RIGHT_TRIGGER", "LEFT_TRIGGER"]; + var notAllowed:Array = ["START"]; for(x in 0...gpKeys.length) { diff --git a/source/Main.hx b/source/Main.hx index a065da2..6c06d39 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -23,7 +23,7 @@ class Main extends Sprite var skipSplash:Bool = true; // Whether to skip the flixel splash screen that appears in release mode. var startFullscreen:Bool = false; // Whether to start the game in fullscreen on desktop targets - public static var watermarks = true; // Whether to put Kade Engine liteartly anywhere + public static var watermarks = true; // Whether to put Kade Engine literally anywhere // You can pretty much ignore everything from here on - your code should go in your states. diff --git a/source/ModchartState.hx b/source/ModchartState.hx index 6e194d1..571edbf 100644 --- a/source/ModchartState.hx +++ b/source/ModchartState.hx @@ -250,7 +250,7 @@ class ModchartState PlayState.instance.removeObject(PlayState.boyfriend); PlayState.boyfriend = new Boyfriend(oldboyfriendx, oldboyfriendy, id); PlayState.instance.addObject(PlayState.boyfriend); - PlayState.instance.iconP2.animation.play(id); + PlayState.instance.iconP1.animation.play(id); } function makeAnimatedLuaSprite(spritePath:String,names:Array,prefixes:Array,startAnim:String, id:String) diff --git a/source/Note.hx b/source/Note.hx index ec67490..d4c4a76 100644 --- a/source/Note.hx +++ b/source/Note.hx @@ -19,6 +19,7 @@ class Note extends FlxSprite public var mustPress:Bool = false; public var noteData:Int = 0; + public var rawNoteData:Int = 0; public var canBeHit:Bool = false; public var tooLate:Bool = false; public var wasGoodHit:Bool = false; @@ -99,20 +100,20 @@ class Note extends FlxSprite default: frames = Paths.getSparrowAtlas('NOTE_assets'); - animation.addByPrefix('greenScroll', 'green instance 1'); - animation.addByPrefix('redScroll', 'red instance 1'); - animation.addByPrefix('blueScroll', 'blue instance 1'); - animation.addByPrefix('purpleScroll', 'purple instance 1'); + animation.addByPrefix('greenScroll', 'green0'); + animation.addByPrefix('redScroll', 'red0'); + animation.addByPrefix('blueScroll', 'blue0'); + animation.addByPrefix('purpleScroll', 'purple0'); - animation.addByPrefix('purpleholdend', 'pruple end hold instance 1'); - animation.addByPrefix('greenholdend', 'green hold end instance 1'); - animation.addByPrefix('redholdend', 'red hold end instance 1'); - animation.addByPrefix('blueholdend', 'blue hold end instance 1'); + animation.addByPrefix('purpleholdend', 'pruple end hold'); + animation.addByPrefix('greenholdend', 'green hold end'); + animation.addByPrefix('redholdend', 'red hold end'); + animation.addByPrefix('blueholdend', 'blue hold end'); - animation.addByPrefix('purplehold', 'purple hold piece instance 1'); - animation.addByPrefix('greenhold', 'green hold piece instance 1'); - animation.addByPrefix('redhold', 'red hold piece instance 1'); - animation.addByPrefix('bluehold', 'blue hold piece instance 1'); + animation.addByPrefix('purplehold', 'purple hold piece'); + animation.addByPrefix('greenhold', 'green hold piece'); + animation.addByPrefix('redhold', 'red hold piece'); + animation.addByPrefix('bluehold', 'blue hold piece'); setGraphicSize(Std.int(width * 0.7)); updateHitbox(); @@ -166,7 +167,7 @@ class Note extends FlxSprite x -= width / 2; - if (PlayState.curStage.startsWith('school')) + if (noteTypeCheck == 'pixel') x += 30; if (prevNote.isSustainNote) diff --git a/source/Options.hx b/source/Options.hx index 7c8f411..8be193e 100644 --- a/source/Options.hx +++ b/source/Options.hx @@ -698,3 +698,127 @@ class CamZoomOption extends Option return "Camera Zoom " + (!FlxG.save.data.camzoom ? "off" : "on"); } } + +class LockWeeksOption extends Option +{ + var confirm:Bool = false; + + public function new(desc:String) + { + super(); + description = desc; + } + public override function press():Bool + { + if(!confirm) + { + confirm = true; + display = updateDisplay(); + return true; + } + FlxG.save.data.weekUnlocked = 1; + StoryMenuState.weekUnlocked = [true, true]; + trace('Weeks Locked'); + display = updateDisplay(); + return true; + } + + private override function updateDisplay():String + { + return confirm ? "Confirm Story Reset" : "Reset Story Progress"; + } +} + +class ResetScoreOption extends Option +{ + var confirm:Bool = false; + + public function new(desc:String) + { + super(); + description = desc; + } + public override function press():Bool + { + if(!confirm) + { + confirm = true; + display = updateDisplay(); + return true; + } + FlxG.save.data.songScores = null; + for(key in Highscore.songScores.keys()) + { + Highscore.songScores[key] = 0; + } + FlxG.save.data.songCombos = null; + for(key in Highscore.songCombos.keys()) + { + Highscore.songCombos[key] = ''; + } + confirm = false; + trace('Highscores Wiped'); + display = updateDisplay(); + return true; + } + + private override function updateDisplay():String + { + return confirm ? "Confirm Score Reset" : "Reset Score"; + } +} + +class ResetSettings extends Option +{ + var confirm:Bool = false; + + public function new(desc:String) + { + super(); + description = desc; + } + public override function press():Bool + { + if(!confirm) + { + confirm = true; + display = updateDisplay(); + return true; + } + FlxG.save.data.weekUnlocked = null; + FlxG.save.data.newInput = null; + FlxG.save.data.downscroll = null; + FlxG.save.data.dfjk = null; + FlxG.save.data.accuracyDisplay = null; + FlxG.save.data.offset = null; + FlxG.save.data.songPosition = null; + FlxG.save.data.fps = null; + FlxG.save.data.changedHit = null; + FlxG.save.data.fpsRain = null; + FlxG.save.data.fpsCap = null; + FlxG.save.data.scrollSpeed = null; + FlxG.save.data.npsDisplay = null; + FlxG.save.data.frames = null; + FlxG.save.data.accuracyMod = null; + FlxG.save.data.watermark = null; + FlxG.save.data.ghost = null; + FlxG.save.data.distractions = null; + FlxG.save.data.flashing = null; + FlxG.save.data.resetButton = null; + FlxG.save.data.botplay = null; + FlxG.save.data.cpuStrums = null; + FlxG.save.data.strumline = null; + FlxG.save.data.customStrumLine = null; + FlxG.save.data.camzoom = null; + KadeEngineData.initSave(); + confirm = false; + trace('All settings have been reset'); + display = updateDisplay(); + return true; + } + + private override function updateDisplay():String + { + return confirm ? "Confirm Settings Reset" : "Reset Settings"; + } +} diff --git a/source/OptionsMenu.hx b/source/OptionsMenu.hx index 6581771..c46f81e 100644 --- a/source/OptionsMenu.hx +++ b/source/OptionsMenu.hx @@ -42,18 +42,16 @@ class OptionsMenu extends MusicBeatState new OptionCategory("Appearance", [ new DistractionsAndEffectsOption("Toggle stage distractions that can hinder your gameplay."), new CamZoomOption("Toggle the camera zoom in-game."), - #if desktop new RainbowFPSOption("Make the FPS Counter Rainbow"), new AccuracyOption("Display accuracy information."), new NPSDisplayOption("Shows your current Notes Per Second."), new SongPositionOption("Show the songs current position (as a bar)"), new CpuStrums("CPU's strumline lights up when a note hits it."), - #end ]), new OptionCategory("Misc", [ - #if desktop new FPSOption("Toggle the FPS Counter"), + #if desktop new ReplayOption("View replays"), #end new FlashingLightsOption("Toggle flashing lights that can cause epileptic seizures and strain."), @@ -61,7 +59,13 @@ class OptionsMenu extends MusicBeatState new ScoreScreen("Show the score screen after the end of a song"), new ShowInput("Display every single input in the score screen."), new Optimization("No backgrounds, no characters, centered notes, no player 2."), - new BotPlay("Showcase your charts and mods with autoplay."), + new BotPlay("Showcase your charts and mods with autoplay.") + ]), + + new OptionCategory("Manage Save Data", [ + new ResetScoreOption("Reset your score on all songs and weeks."), + new LockWeeksOption("Reset your storymode progress. (only Tutorial + Week 1 will be unlocked)"), + new ResetSettings("Reset ALL your settings.") ]) ]; diff --git a/source/Paths.hx b/source/Paths.hx index 075adbd..71b4b8b 100644 --- a/source/Paths.hx +++ b/source/Paths.hx @@ -67,7 +67,7 @@ class Paths inline static public function txt(key:String, ?library:String) { - return getPath('data/$key.txt', TEXT, library); + return getPath('$key.txt', TEXT, library); } inline static public function xml(key:String, ?library:String) diff --git a/source/PlayState.hx b/source/PlayState.hx index af3babe..960af79 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -253,6 +253,8 @@ class PlayState extends MusicBeatState } misses = 0; + + highestCombo = 0; repPresses = 0; repReleases = 0; @@ -360,11 +362,11 @@ class PlayState extends MusicBeatState "Only then I will even CONSIDER letting you\ndate my daughter!" ]; case 'senpai': - dialogue = CoolUtil.coolTextFile(Paths.txt('senpai/senpaiDialogue')); + dialogue = CoolUtil.coolTextFile(Paths.txt('data/senpai/senpaiDialogue')); case 'roses': - dialogue = CoolUtil.coolTextFile(Paths.txt('roses/rosesDialogue')); + dialogue = CoolUtil.coolTextFile(Paths.txt('data/roses/rosesDialogue')); case 'thorns': - dialogue = CoolUtil.coolTextFile(Paths.txt('thorns/thornsDialogue')); + dialogue = CoolUtil.coolTextFile(Paths.txt('data/thorns/thornsDialogue')); } //defaults if no stage was found in chart @@ -1127,6 +1129,7 @@ class PlayState extends MusicBeatState rep = new Replay("na"); FlxG.stage.addEventListener(KeyboardEvent.KEY_DOWN,handleInput); + FlxG.stage.addEventListener(KeyboardEvent.KEY_UP,releaseInput); super.create(); } @@ -1366,6 +1369,41 @@ class PlayState extends MusicBeatState return null; } + var keys = [false,false,false,false]; + + private function releaseInput(evt:KeyboardEvent):Void // handles releases + { + @:privateAccess + var key = FlxKey.toStringMap.get(Keyboard.__convertKeyCode(evt.keyCode)); + + var binds:Array = [FlxG.save.data.leftBind,FlxG.save.data.downBind, FlxG.save.data.upBind, FlxG.save.data.rightBind]; + + var data = -1; + + switch(evt.keyCode) // arrow keys + { + case 37: + data = 0; + case 40: + data = 1; + case 38: + data = 2; + case 39: + data = 3; + } + + for (i in 0...binds.length) // binds + { + if (binds[i].toLowerCase() == key.toLowerCase()) + data = i; + } + + if (data == -1) + return; + + keys[data] = false; + } + private function handleInput(evt:KeyboardEvent):Void { // this actually handles press inputs if (PlayStateChangeables.botPlay || loadRep || paused) @@ -1399,15 +1437,16 @@ class PlayState extends MusicBeatState if (binds[i].toLowerCase() == key.toLowerCase()) data = i; } - - if (evt.keyLocation == KeyLocation.NUM_PAD) - { - trace(String.fromCharCode(evt.charCode) + " " + key); - } - if (data == -1) return; + if (keys[data]) + { + return; + } + + keys[data] = true; + var ana = new Ana(Conductor.songPosition, null, false, "miss", data); var dataNotes = []; @@ -1419,7 +1458,7 @@ class PlayState extends MusicBeatState dataNotes.sort((a, b) -> Std.int(a.strumTime - b.strumTime)); // sort by the earliest note - + if (dataNotes.length != 0) { var coolNote = dataNotes[0]; @@ -1592,6 +1631,7 @@ class PlayState extends MusicBeatState swagNote.sustainLength = songNotes[2]; swagNote.scrollFactor.set(0, 0); + var susLength:Float = swagNote.sustainLength; susLength = susLength / Conductor.stepCrochet; @@ -1695,70 +1735,70 @@ class PlayState extends MusicBeatState case 'normal': babyArrow.frames = Paths.getSparrowAtlas('NOTE_assets'); - babyArrow.animation.addByPrefix('green', 'arrow static instance 1'); - babyArrow.animation.addByPrefix('blue', 'arrow static instance 2'); - babyArrow.animation.addByPrefix('purple', 'arrow static instance 3'); - babyArrow.animation.addByPrefix('red', 'arrow static instance 4'); - + babyArrow.animation.addByPrefix('green', 'arrowUP'); + babyArrow.animation.addByPrefix('blue', 'arrowDOWN'); + babyArrow.animation.addByPrefix('purple', 'arrowLEFT'); + babyArrow.animation.addByPrefix('red', 'arrowRIGHT'); + babyArrow.antialiasing = true; babyArrow.setGraphicSize(Std.int(babyArrow.width * 0.7)); - + switch (Math.abs(i)) { - case 0: - babyArrow.x += Note.swagWidth * 0; - babyArrow.animation.addByPrefix('static', 'arrow static instance 1'); - babyArrow.animation.addByPrefix('pressed', 'left press instance 1', 24, false); - babyArrow.animation.addByPrefix('confirm', 'left confirm instance 1', 24, false); - case 1: - babyArrow.x += Note.swagWidth * 1; - babyArrow.animation.addByPrefix('static', 'arrow static instance 2'); - babyArrow.animation.addByPrefix('pressed', 'down press instance 1', 24, false); - babyArrow.animation.addByPrefix('confirm', 'down confirm instance 1', 24, false); case 2: babyArrow.x += Note.swagWidth * 2; - babyArrow.animation.addByPrefix('static', 'arrow static instance 4'); - babyArrow.animation.addByPrefix('pressed', 'up press instance 1', 24, false); - babyArrow.animation.addByPrefix('confirm', 'up confirm instance 1', 24, false); + babyArrow.animation.addByPrefix('static', 'arrowUP'); + babyArrow.animation.addByPrefix('pressed', 'up press', 24, false); + babyArrow.animation.addByPrefix('confirm', 'up confirm', 24, false); case 3: babyArrow.x += Note.swagWidth * 3; - babyArrow.animation.addByPrefix('static', 'arrow static instance 3'); - babyArrow.animation.addByPrefix('pressed', 'right press instance 1', 24, false); - babyArrow.animation.addByPrefix('confirm', 'right confirm instance 1', 24, false); - } + babyArrow.animation.addByPrefix('static', 'arrowRIGHT'); + babyArrow.animation.addByPrefix('pressed', 'right press', 24, false); + babyArrow.animation.addByPrefix('confirm', 'right confirm', 24, false); + case 1: + babyArrow.x += Note.swagWidth * 1; + babyArrow.animation.addByPrefix('static', 'arrowDOWN'); + babyArrow.animation.addByPrefix('pressed', 'down press', 24, false); + babyArrow.animation.addByPrefix('confirm', 'down confirm', 24, false); + case 0: + babyArrow.x += Note.swagWidth * 0; + babyArrow.animation.addByPrefix('static', 'arrowLEFT'); + babyArrow.animation.addByPrefix('pressed', 'left press', 24, false); + babyArrow.animation.addByPrefix('confirm', 'left confirm', 24, false); + } default: babyArrow.frames = Paths.getSparrowAtlas('NOTE_assets'); - babyArrow.animation.addByPrefix('green', 'arrow static instance 1'); - babyArrow.animation.addByPrefix('blue', 'arrow static instance 2'); - babyArrow.animation.addByPrefix('purple', 'arrow static instance 3'); - babyArrow.animation.addByPrefix('red', 'arrow static instance 4'); + babyArrow.animation.addByPrefix('green', 'arrowUP'); + babyArrow.animation.addByPrefix('blue', 'arrowDOWN'); + babyArrow.animation.addByPrefix('purple', 'arrowLEFT'); + babyArrow.animation.addByPrefix('red', 'arrowRIGHT'); babyArrow.antialiasing = true; babyArrow.setGraphicSize(Std.int(babyArrow.width * 0.7)); switch (Math.abs(i)) { - case 0: - babyArrow.x += Note.swagWidth * 0; - babyArrow.animation.addByPrefix('static', 'arrow static instance 1'); - babyArrow.animation.addByPrefix('pressed', 'left press instance 1', 24, false); - babyArrow.animation.addByPrefix('confirm', 'left confirm instance 1', 24, false); - case 1: - babyArrow.x += Note.swagWidth * 1; - babyArrow.animation.addByPrefix('static', 'arrow static instance 2'); - babyArrow.animation.addByPrefix('pressed', 'down press instance 1', 24, false); - babyArrow.animation.addByPrefix('confirm', 'down confirm instance 1', 24, false); case 2: babyArrow.x += Note.swagWidth * 2; - babyArrow.animation.addByPrefix('static', 'arrow static instance 4'); - babyArrow.animation.addByPrefix('pressed', 'up press instance 1', 24, false); - babyArrow.animation.addByPrefix('confirm', 'up confirm instance 1', 24, false); + babyArrow.animation.addByPrefix('static', 'arrowUP'); + babyArrow.animation.addByPrefix('pressed', 'up press', 24, false); + babyArrow.animation.addByPrefix('confirm', 'up confirm', 24, false); case 3: babyArrow.x += Note.swagWidth * 3; - babyArrow.animation.addByPrefix('static', 'arrow static instance 3'); - babyArrow.animation.addByPrefix('pressed', 'right press instance 1', 24, false); - babyArrow.animation.addByPrefix('confirm', 'right confirm instance 1', 24, false); + babyArrow.animation.addByPrefix('static', 'arrowRIGHT'); + babyArrow.animation.addByPrefix('pressed', 'right press', 24, false); + babyArrow.animation.addByPrefix('confirm', 'right confirm', 24, false); + case 1: + babyArrow.x += Note.swagWidth * 1; + babyArrow.animation.addByPrefix('static', 'arrowDOWN'); + babyArrow.animation.addByPrefix('pressed', 'down press', 24, false); + babyArrow.animation.addByPrefix('confirm', 'down confirm', 24, false); + case 0: + babyArrow.x += Note.swagWidth * 0; + babyArrow.animation.addByPrefix('static', 'arrowLEFT'); + babyArrow.animation.addByPrefix('pressed', 'left press', 24, false); + babyArrow.animation.addByPrefix('confirm', 'left confirm', 24, false); } } @@ -2039,6 +2079,7 @@ class PlayState extends MusicBeatState #end FlxG.switchState(new ChartingState()); FlxG.stage.removeEventListener(KeyboardEvent.KEY_DOWN,handleInput); + FlxG.stage.removeEventListener(KeyboardEvent.KEY_UP,releaseInput); #if windows if (luaModchart != null) { @@ -2091,6 +2132,7 @@ class PlayState extends MusicBeatState FlxG.switchState(new AnimationDebug(SONG.player2)); FlxG.stage.removeEventListener(KeyboardEvent.KEY_DOWN,handleInput); + FlxG.stage.removeEventListener(KeyboardEvent.KEY_UP,releaseInput); #if windows if (luaModchart != null) { @@ -2104,6 +2146,7 @@ class PlayState extends MusicBeatState { FlxG.switchState(new AnimationDebug(SONG.player1)); FlxG.stage.removeEventListener(KeyboardEvent.KEY_DOWN,handleInput); + FlxG.stage.removeEventListener(KeyboardEvent.KEY_UP,releaseInput); #if windows if (luaModchart != null) { @@ -2275,18 +2318,12 @@ class PlayState extends MusicBeatState switch (dad.curCharacter) { - case 'mom': + case 'mom' | 'mom-car': camFollow.y = dad.getMidpoint().y; - case 'senpai': - camFollow.y = dad.getMidpoint().y - 430; - camFollow.x = dad.getMidpoint().x - 100; - case 'senpai-angry': + case 'senpai' | 'senpai-angry': camFollow.y = dad.getMidpoint().y - 430; camFollow.x = dad.getMidpoint().x - 100; } - - if (dad.curCharacter == 'mom') - vocals.volume = 1; } if (PlayState.SONG.notes[Std.int(curStep / 16)].mustHitSection && camFollow.x != boyfriend.getMidpoint().x - 100) @@ -2645,7 +2682,7 @@ class PlayState extends MusicBeatState }); } - if (!inCutscene) + if (!inCutscene && songStarted) keyShit(); @@ -2658,6 +2695,7 @@ class PlayState extends MusicBeatState function endSong():Void { FlxG.stage.removeEventListener(KeyboardEvent.KEY_DOWN,handleInput); + FlxG.stage.removeEventListener(KeyboardEvent.KEY_UP,releaseInput); if (useVideo) { GlobalVideo.get().stop(); @@ -2750,17 +2788,13 @@ class PlayState extends MusicBeatState } #end - // if () - StoryMenuState.weekUnlocked[Std.int(Math.min(storyWeek + 1, StoryMenuState.weekUnlocked.length - 1))] = true; - if (SONG.validScore) { NGio.unlockMedal(60961); Highscore.saveWeekScore(storyWeek, campaignScore, storyDifficulty); } - FlxG.save.data.weekUnlocked = StoryMenuState.weekUnlocked; - FlxG.save.flush(); + StoryMenuState.unlockNextWeek(storyWeek); } else { @@ -3147,6 +3181,8 @@ class PlayState extends MusicBeatState }; #end + var nonCpp = false; + // Prevent player input if botplay is on if(PlayStateChangeables.botPlay) @@ -3156,6 +3192,10 @@ class PlayState extends MusicBeatState releaseArray = [false, false, false, false]; } + #if !cpp + nonCpp = true; + #end + var anas:Array = [null,null,null,null]; for (i in 0...pressArray.length) @@ -3172,7 +3212,7 @@ class PlayState extends MusicBeatState }); } - if (KeyBinds.gamepad && !FlxG.keys.justPressed.ANY) + if ((KeyBinds.gamepad && !FlxG.keys.justPressed.ANY) || nonCpp) { // PRESSES, check for note hits if (pressArray.contains(true) && generatedMusic) @@ -3876,6 +3916,10 @@ class PlayState extends MusicBeatState boyfriend.playAnim('idle'); } + if (!dad.animation.curAnim.name.startsWith("sing")) + { + dad.dance(); + } if (curBeat % 8 == 7 && curSong == 'Bopeebo') { diff --git a/source/Section.hx b/source/Section.hx index f153da5..c1af6ac 100644 --- a/source/Section.hx +++ b/source/Section.hx @@ -2,7 +2,7 @@ package; typedef SwagSection = { - var sectionNotes:Array; + var sectionNotes:Array>; var lengthInSteps:Int; var typeOfSection:Int; var mustHitSection:Bool; @@ -13,7 +13,7 @@ typedef SwagSection = class Section { - public var sectionNotes:Array = []; + public var sectionNotes:Array> = []; public var lengthInSteps:Int = 16; public var typeOfSection:Int = 0; diff --git a/source/StoryMenuState.hx b/source/StoryMenuState.hx index 5957720..b842c98 100644 --- a/source/StoryMenuState.hx +++ b/source/StoryMenuState.hx @@ -24,18 +24,21 @@ class StoryMenuState extends MusicBeatState { var scoreText:FlxText; - var weekData:Array = [ - ['Tutorial'], - ['Bopeebo', 'Fresh', 'Dad Battle'], - ['Spookeez', 'South', "Monster"], - ['Pico', 'Philly Nice', "Blammed"], - ['Satin Panties', "High", "Milf"], - ['Cocoa', 'Eggnog', 'Winter Horrorland'], - ['Senpai', 'Roses', 'Thorns'] - ]; + static function weekData():Array + { + return [ + ['Tutorial'], + ['Bopeebo', 'Fresh', 'Dad Battle'], + ['Spookeez', 'South', "Monster"], + ['Pico', 'Philly Nice', "Blammed"], + ['Satin Panties', "High", "Milf"], + ['Cocoa', 'Eggnog', 'Winter Horrorland'], + ['Senpai', 'Roses', 'Thorns'] + ]; + } var curDifficulty:Int = 1; - public static var weekUnlocked:Array = [true, true, true, true, true, true, true]; + public static var weekUnlocked:Array = []; var weekCharacters:Array = [ ['', 'bf', 'gf'], @@ -73,8 +76,28 @@ class StoryMenuState extends MusicBeatState var leftArrow:FlxSprite; var rightArrow:FlxSprite; + function unlockWeeks():Array + { + var weeks:Array = []; + #if debug + for(i in 0...weekNames.length) + weeks.push(true); + return weeks; + #end + + weeks.push(true); + + for(i in 0...FlxG.save.data.weekUnlocked) + { + weeks.push(true); + } + return weeks; + } + override function create() { + weekUnlocked = unlockWeeks(); + #if windows // Updating Discord Rich Presence DiscordClient.changePresence("In the Story Mode Menu", null); @@ -110,17 +133,17 @@ class StoryMenuState extends MusicBeatState grpWeekText = new FlxTypedGroup(); add(grpWeekText); + grpLocks = new FlxTypedGroup(); + add(grpLocks); + var blackBarThingie:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, 56, FlxColor.BLACK); add(blackBarThingie); grpWeekCharacters = new FlxTypedGroup(); - grpLocks = new FlxTypedGroup(); - add(grpLocks); - trace("Line 70"); - for (i in 0...weekData.length) + for (i in 0...weekData().length) { var weekThing:MenuItem = new MenuItem(0, yellowBG.y + yellowBG.height + 10, i); weekThing.y += ((weekThing.height + 20) * i); @@ -134,6 +157,7 @@ class StoryMenuState extends MusicBeatState // Needs an offset thingie if (!weekUnlocked[i]) { + trace('locking week ' + i); var lock:FlxSprite = new FlxSprite(weekThing.width + 10 + weekThing.x); lock.frames = ui_tex; lock.animation.addByPrefix('lock', 'lock'); @@ -195,6 +219,19 @@ class StoryMenuState extends MusicBeatState updateText(); + + var bullShit:Int = 0; + + for (item in grpWeekText.members) + { + item.targetY = bullShit - curWeek; + if (item.targetY == Std.int(0) && weekUnlocked[curWeek]) + item.alpha = 1; + else + item.alpha = 0.6; + bullShit++; + } + trace("Line 165"); super.create(); @@ -314,7 +351,7 @@ class StoryMenuState extends MusicBeatState stopspamming = true; } - PlayState.storyPlaylist = weekData[curWeek]; + PlayState.storyPlaylist = weekData()[curWeek]; PlayState.isStoryMode = true; selectedWeek = true; @@ -388,10 +425,10 @@ class StoryMenuState extends MusicBeatState { curWeek += change; - if (curWeek >= weekData.length) + if (curWeek >= weekData().length) curWeek = 0; if (curWeek < 0) - curWeek = weekData.length - 1; + curWeek = weekData().length - 1; var bullShit:Int = 0; @@ -417,7 +454,7 @@ class StoryMenuState extends MusicBeatState grpWeekCharacters.members[2].setCharacter(weekCharacters[curWeek][2]); txtTracklist.text = "Tracks\n"; - var stringThing:Array = weekData[curWeek]; + var stringThing:Array = weekData()[curWeek]; for (i in stringThing) txtTracklist.text += "\n" + i; @@ -433,4 +470,16 @@ class StoryMenuState extends MusicBeatState intendedScore = Highscore.getWeekScore(curWeek, curDifficulty); #end } + + public static function unlockNextWeek(week:Int):Void + { + if(week <= weekData().length - 1 && FlxG.save.data.weekUnlocked == week) + { + weekUnlocked.push(true); + trace('Week ' + week + ' beat (Week ' + (week + 1) + ' unlocked)'); + } + + FlxG.save.data.weekUnlocked = weekUnlocked.length - 1; + FlxG.save.flush(); + } } diff --git a/source/TitleState.hx b/source/TitleState.hx index 4a30c1a..f716247 100644 --- a/source/TitleState.hx +++ b/source/TitleState.hx @@ -102,29 +102,19 @@ class TitleState extends MusicBeatState Highscore.load(); - if (FlxG.save.data.weekUnlocked != null) - { - // FIX LATER!!! - // WEEK UNLOCK PROGRESSION!! - // StoryMenuState.weekUnlocked = FlxG.save.data.weekUnlocked; - - if (StoryMenuState.weekUnlocked.length < 4) - StoryMenuState.weekUnlocked.insert(0, true); - - // QUICK PATCH OOPS! - if (!StoryMenuState.weekUnlocked[0]) - StoryMenuState.weekUnlocked[0] = true; - } - #if FREEPLAY FlxG.switchState(new FreeplayState()); #elseif CHARTING FlxG.switchState(new ChartingState()); #else + #if !cpp new FlxTimer().start(1, function(tmr:FlxTimer) { startIntro(); }); + #else + startIntro(); + #end #end } @@ -172,7 +162,7 @@ class TitleState extends MusicBeatState add(bg); if(Main.watermarks) { - logoBl = new FlxSprite(-150, -100); + logoBl = new FlxSprite(-150, 1500); logoBl.frames = Paths.getSparrowAtlas('KadeEngineLogoBumpin'); logoBl.antialiasing = true; logoBl.animation.addByPrefix('bump', 'logo bumpin', 24); @@ -253,7 +243,7 @@ class TitleState extends MusicBeatState function getIntroTextShit():Array> { - var fullText:String = Assets.getText(Paths.txt('introText')); + var fullText:String = Assets.getText(Paths.txt('data/introText')); var firstArray:Array = fullText.split('\n'); var swagGoodArray:Array> = []; @@ -468,6 +458,19 @@ class TitleState extends MusicBeatState FlxG.camera.flash(FlxColor.WHITE, 4); remove(credGroup); + + FlxTween.tween(logoBl,{y: -100}, 1.4, {ease: FlxEase.expoInOut}); + + logoBl.angle = -4; + + new FlxTimer().start(0.01, function(tmr:FlxTimer) + { + if(logoBl.angle == -4) + FlxTween.angle(logoBl, logoBl.angle, 4, 4, {ease: FlxEase.quartInOut}); + if (logoBl.angle == 4) + FlxTween.angle(logoBl, logoBl.angle, -4, 4, {ease: FlxEase.quartInOut}); + }, 0); + skippedIntro = true; } }