Merge branch 'master' into tasks
This commit is contained in:
commit
72d800581a
@ -66,3 +66,4 @@ This game was made with love to Newgrounds and its community. Extra love to Tom
|
|||||||
- [GWebDev](https://github.com/GrowtopiaFli) - Video Code
|
- [GWebDev](https://github.com/GrowtopiaFli) - Video Code
|
||||||
- [Rozebud](https://github.com/ThatRozebudDude) - Ideas (that I stole)
|
- [Rozebud](https://github.com/ThatRozebudDude) - Ideas (that I stole)
|
||||||
- [Puyo](https://github.com/daniel11420) - Setting up appveyor and a lot of other help
|
- [Puyo](https://github.com/daniel11420) - Setting up appveyor and a lot of other help
|
||||||
|
- [Smokey](https://twitter.com/Smokey_5_) - telling me that I should do the tricky asset loading
|
@ -9,7 +9,7 @@ install:
|
|||||||
- cd /home/appveyor
|
- cd /home/appveyor
|
||||||
- sudo add-apt-repository ppa:haxe/releases -y
|
- sudo add-apt-repository ppa:haxe/releases -y
|
||||||
- sudo apt update
|
- 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
|
- wget https://github.com/HaxeFoundation/haxe/releases/download/4.1.5/haxe-4.1.5-linux64.tar.gz
|
||||||
- mkdir $HAXE_INSTALLDIR
|
- mkdir $HAXE_INSTALLDIR
|
||||||
- tar -xf haxe-4.1.5-linux64.tar.gz -C $HAXE_INSTALLDIR
|
- tar -xf haxe-4.1.5-linux64.tar.gz -C $HAXE_INSTALLDIR
|
||||||
|
@ -37,6 +37,9 @@ install:
|
|||||||
- haxelib run lime rebuild extension-webm windows
|
- haxelib run lime rebuild extension-webm windows
|
||||||
- haxelib install linc_luajit
|
- 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
|
- haxelib list
|
||||||
|
|
||||||
# No tests idk lol
|
# No tests idk lol
|
||||||
|
Binary file not shown.
@ -1,4 +1,4 @@
|
|||||||
Tutorial:gf:1
|
Tutorial:gf:0
|
||||||
Bopeebo:dad:1
|
Bopeebo:dad:1
|
||||||
Fresh:dad:1
|
Fresh:dad:1
|
||||||
Dad Battle:dad:1
|
Dad Battle:dad:1
|
||||||
|
1
assets/preload/data/test/test.json
Normal file
1
assets/preload/data/test/test.json
Normal file
File diff suppressed because one or more lines are too long
7
assets/preload/data/weekNames.txt
Normal file
7
assets/preload/data/weekNames.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
Tutorial
|
||||||
|
Daddy Dearest
|
||||||
|
Spooky Month
|
||||||
|
PICO
|
||||||
|
MOMMY MUST MURDER
|
||||||
|
RED SNOW
|
||||||
|
Hating Simulator ft. Moawling
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 127 KiB After Width: | Height: | Size: 696 KiB |
@ -1,92 +1,92 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<TextureAtlas imagePath="NOTE_assets.png">
|
<TextureAtlas imagePath="NOTE_assets.png">
|
||||||
<!-- Created with Adobe Animate version 21.0.0.35450 -->
|
<!-- Created with Adobe Animate version 21.0.0.35450 -->
|
||||||
<!-- http://www.adobe.com/products/animate.html -->
|
<!-- http://www.adobe.com/products/animate.html -->
|
||||||
<SubTexture name="arrow static instance 10000" x="488" y="238" width="155" height="158"/>
|
<SubTexture name="arrowDOWN0000" x="10" y="255" width="157" height="154"/>
|
||||||
<SubTexture name="arrow static instance 20000" x="647" y="238" width="157" height="155"/>
|
<SubTexture name="arrowLEFT0000" x="672" y="416" width="154" height="157"/>
|
||||||
<SubTexture name="arrow static instance 30000" x="808" y="238" width="155" height="157"/>
|
<SubTexture name="arrowRIGHT0000" x="10" y="419" width="154" height="157"/>
|
||||||
<SubTexture name="arrow static instance 40000" x="323" y="240" width="157" height="154"/>
|
<SubTexture name="arrowUP0000" x="177" y="255" width="157" height="154"/>
|
||||||
<SubTexture name="blue hold end instance 10000" x="1062" y="452" width="51" height="64"/>
|
<SubTexture name="blue alone0000" x="506" y="252" width="157" height="154"/>
|
||||||
<SubTexture name="blue hold piece instance 10000" x="1282" y="457" width="51" height="44"/>
|
<SubTexture name="blue hold0000" x="1940" y="306" width="50" height="44"/>
|
||||||
<SubTexture name="blue instance 10000" x="0" y="240" width="158" height="154"/>
|
<SubTexture name="blue tail0000" x="1940" y="10" width="50" height="64"/>
|
||||||
<SubTexture name="down confirm instance 10000" x="0" y="0" width="240" height="236"/>
|
<SubTexture name="down confirm0000" x="10" y="10" width="238" height="235"/>
|
||||||
<SubTexture name="down confirm instance 10001" x="244" y="0" width="240" height="236"/>
|
<SubTexture name="down confirm0001" x="258" y="10" width="238" height="235"/>
|
||||||
<SubTexture name="down confirm instance 10002" x="1206" y="235" width="221" height="218" frameX="-6" frameY="-12" frameWidth="240" frameHeight="236"/>
|
<SubTexture name="down confirm0002" x="1236" y="250" width="220" height="217" frameX="-6" frameY="-12" frameWidth="238" frameHeight="235"/>
|
||||||
<SubTexture name="down confirm instance 10003" x="1206" y="235" width="221" height="218" frameX="-6" frameY="-12" frameWidth="240" frameHeight="236"/>
|
<SubTexture name="down confirm0003" x="1236" y="250" width="220" height="217" frameX="-6" frameY="-12" frameWidth="238" frameHeight="235"/>
|
||||||
<SubTexture name="down press instance 10000" x="805" y="399" width="143" height="139" frameX="-4" frameY="-3" frameWidth="150" frameHeight="146"/>
|
<SubTexture name="down press0000" x="1150" y="477" width="142" height="140" frameX="-4" frameY="-2" frameWidth="149" frameHeight="146"/>
|
||||||
<SubTexture name="down press instance 10001" x="805" y="399" width="143" height="139" frameX="-4" frameY="-3" frameWidth="150" frameHeight="146"/>
|
<SubTexture name="down press0001" x="1150" y="477" width="142" height="140" frameX="-4" frameY="-2" frameWidth="149" frameHeight="146"/>
|
||||||
<SubTexture name="down press instance 10002" x="1898" y="0" width="150" height="146"/>
|
<SubTexture name="down press0002" x="344" y="255" width="149" height="146"/>
|
||||||
<SubTexture name="down press instance 10003" x="1898" y="0" width="150" height="146"/>
|
<SubTexture name="down press0003" x="344" y="255" width="149" height="146"/>
|
||||||
<SubTexture name="green hold end instance 10000" x="1007" y="452" width="51" height="64"/>
|
<SubTexture name="green alone0000" x="673" y="252" width="157" height="154"/>
|
||||||
<SubTexture name="green hold piece instance 10000" x="1227" y="457" width="51" height="44"/>
|
<SubTexture name="green hold0000" x="1940" y="360" width="50" height="44"/>
|
||||||
<SubTexture name="green instance 10000" x="162" y="240" width="157" height="154"/>
|
<SubTexture name="green tail0000" x="1940" y="84" width="50" height="64"/>
|
||||||
<SubTexture name="left confirm instance 10000" x="972" y="0" width="230" height="232"/>
|
<SubTexture name="left confirm0000" x="998" y="10" width="228" height="231"/>
|
||||||
<SubTexture name="left confirm instance 10001" x="1438" y="233" width="220" height="222" frameX="-5" frameY="-5" frameWidth="230" frameHeight="232"/>
|
<SubTexture name="left confirm0001" x="1472" y="248" width="218" height="221" frameX="-5" frameY="-5" frameWidth="228" frameHeight="231"/>
|
||||||
<SubTexture name="left confirm instance 10002" x="1438" y="0" width="227" height="229" frameX="-2" frameY="-1" frameWidth="230" frameHeight="232"/>
|
<SubTexture name="left confirm0002" x="1472" y="10" width="225" height="228" frameX="-2" frameY="-1" frameWidth="228" frameHeight="231"/>
|
||||||
<SubTexture name="left confirm instance 10003" x="1438" y="0" width="227" height="229" frameX="-2" frameY="-1" frameWidth="230" frameHeight="232"/>
|
<SubTexture name="left confirm0003" x="1472" y="10" width="225" height="228" frameX="-2" frameY="-1" frameWidth="228" frameHeight="231"/>
|
||||||
<SubTexture name="left press instance 10000" x="1898" y="449" width="139" height="142" frameX="-4" frameY="-3" frameWidth="146" frameHeight="149"/>
|
<SubTexture name="left press0000" x="1302" y="477" width="140" height="142" frameX="-3" frameY="-3" frameWidth="146" frameHeight="149"/>
|
||||||
<SubTexture name="left press instance 10001" x="1898" y="449" width="139" height="142" frameX="-4" frameY="-3" frameWidth="146" frameHeight="149"/>
|
<SubTexture name="left press0001" x="1302" y="477" width="140" height="142" frameX="-3" frameY="-3" frameWidth="146" frameHeight="149"/>
|
||||||
<SubTexture name="left press instance 10002" x="1898" y="150" width="146" height="149"/>
|
<SubTexture name="left press0002" x="840" y="413" width="146" height="149"/>
|
||||||
<SubTexture name="left press instance 10003" x="1898" y="150" width="146" height="149"/>
|
<SubTexture name="left press0003" x="840" y="413" width="146" height="149"/>
|
||||||
<SubTexture name="left press instance 10004" x="1898" y="150" width="146" height="149"/>
|
<SubTexture name="left press0004" x="840" y="413" width="146" height="149"/>
|
||||||
<SubTexture name="left press instance 10005" x="1898" y="150" width="146" height="149"/>
|
<SubTexture name="left press0005" x="840" y="413" width="146" height="149"/>
|
||||||
<SubTexture name="left press instance 10006" x="1898" y="150" width="146" height="149"/>
|
<SubTexture name="left press0006" x="840" y="413" width="146" height="149"/>
|
||||||
<SubTexture name="left press instance 10007" x="1898" y="150" width="146" height="149"/>
|
<SubTexture name="left press0007" x="840" y="413" width="146" height="149"/>
|
||||||
<SubTexture name="left press instance 10008" x="1898" y="150" width="146" height="149"/>
|
<SubTexture name="left press0008" x="840" y="413" width="146" height="149"/>
|
||||||
<SubTexture name="left press instance 10009" x="1898" y="150" width="146" height="149"/>
|
<SubTexture name="left press0009" x="840" y="413" width="146" height="149"/>
|
||||||
<SubTexture name="left press instance 10010" x="1898" y="150" width="146" height="149"/>
|
<SubTexture name="left press0010" x="840" y="413" width="146" height="149"/>
|
||||||
<SubTexture name="left press instance 10011" x="1898" y="150" width="146" height="149"/>
|
<SubTexture name="left press0011" x="840" y="413" width="146" height="149"/>
|
||||||
<SubTexture name="left press instance 10012" x="1898" y="150" width="146" height="149"/>
|
<SubTexture name="left press0012" x="840" y="413" width="146" height="149"/>
|
||||||
<SubTexture name="left press instance 10013" x="1898" y="150" width="146" height="149"/>
|
<SubTexture name="left press0013" x="840" y="413" width="146" height="149"/>
|
||||||
<SubTexture name="left press instance 10014" x="1898" y="150" width="146" height="149"/>
|
<SubTexture name="left press0014" x="840" y="413" width="146" height="149"/>
|
||||||
<SubTexture name="left press instance 10015" x="1898" y="150" width="146" height="149"/>
|
<SubTexture name="left press0015" x="840" y="413" width="146" height="149"/>
|
||||||
<SubTexture name="left press instance 10016" x="1898" y="150" width="146" height="149"/>
|
<SubTexture name="left press0016" x="840" y="413" width="146" height="149"/>
|
||||||
<SubTexture name="left press instance 10017" x="1898" y="150" width="146" height="149"/>
|
<SubTexture name="left press0017" x="840" y="413" width="146" height="149"/>
|
||||||
<SubTexture name="left press instance 10018" x="1898" y="150" width="146" height="149"/>
|
<SubTexture name="left press0018" x="840" y="413" width="146" height="149"/>
|
||||||
<SubTexture name="left press instance 10019" x="1898" y="150" width="146" height="149"/>
|
<SubTexture name="left press0019" x="840" y="413" width="146" height="149"/>
|
||||||
<SubTexture name="pruple end hold instance 10000" x="1117" y="452" width="51" height="64"/>
|
<SubTexture name="purple alone0000" x="344" y="416" width="154" height="157"/>
|
||||||
<SubTexture name="purple hold piece instance 10000" x="1337" y="457" width="51" height="44"/>
|
<SubTexture name="purple hold0000" x="1940" y="414" width="50" height="44"/>
|
||||||
<SubTexture name="purple instance 10000" x="0" y="398" width="154" height="157"/>
|
<SubTexture name="purple tail0000" x="1940" y="158" width="50" height="64"/>
|
||||||
<SubTexture name="red hold end instance 10000" x="952" y="452" width="51" height="64"/>
|
<SubTexture name="red alone0000" x="508" y="416" width="154" height="157"/>
|
||||||
<SubTexture name="red hold piece instance 10000" x="1172" y="457" width="51" height="44"/>
|
<SubTexture name="red hold0000" x="1940" y="468" width="50" height="44"/>
|
||||||
<SubTexture name="red instance 10000" x="647" y="397" width="154" height="157"/>
|
<SubTexture name="red tail0000" x="1940" y="232" width="50" height="64"/>
|
||||||
<SubTexture name="right confirm instance 10000" x="1669" y="0" width="225" height="228" frameX="-1" frameY="-2" frameWidth="228" frameHeight="231"/>
|
<SubTexture name="right confirm0000" x="1707" y="10" width="223" height="226" frameX="-1" frameY="-3" frameWidth="226" frameHeight="230"/>
|
||||||
<SubTexture name="right confirm instance 10001" x="1669" y="232" width="225" height="228" frameX="-1" frameY="-2" frameWidth="228" frameHeight="231"/>
|
<SubTexture name="right confirm0001" x="1707" y="246" width="223" height="226" frameX="-1" frameY="-3" frameWidth="226" frameHeight="230"/>
|
||||||
<SubTexture name="right confirm instance 10002" x="1206" y="0" width="228" height="231"/>
|
<SubTexture name="right confirm0002" x="1236" y="10" width="226" height="230"/>
|
||||||
<SubTexture name="right confirm instance 10003" x="1206" y="0" width="228" height="231"/>
|
<SubTexture name="right confirm0003" x="1236" y="10" width="226" height="230"/>
|
||||||
<SubTexture name="right press instance 10000" x="469" y="400" width="139" height="142" frameX="-3" frameY="-7" frameWidth="149" frameHeight="152"/>
|
<SubTexture name="right press0000" x="1452" y="479" width="138" height="141" frameX="-3" frameY="-7" frameWidth="148" frameHeight="151"/>
|
||||||
<SubTexture name="right press instance 10001" x="469" y="400" width="139" height="142" frameX="-3" frameY="-7" frameWidth="149" frameHeight="152"/>
|
<SubTexture name="right press0001" x="1452" y="479" width="138" height="141" frameX="-3" frameY="-7" frameWidth="148" frameHeight="151"/>
|
||||||
<SubTexture name="right press instance 10002" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0002" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10003" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0003" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10004" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0004" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10005" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0005" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10006" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0006" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10007" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0007" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10008" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0008" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10009" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0009" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10010" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0010" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10011" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0011" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10012" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0012" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10013" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0013" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10014" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0014" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10015" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0015" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10016" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0016" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10017" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0017" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10018" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0018" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10019" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0019" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10020" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0020" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10021" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0021" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10022" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0022" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10023" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0023" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10024" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0024" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10025" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0025" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="right press instance 10026" x="316" y="398" width="149" height="152"/>
|
<SubTexture name="right press0026" x="840" y="252" width="148" height="151"/>
|
||||||
<SubTexture name="up confirm instance 10000" x="488" y="0" width="238" height="234"/>
|
<SubTexture name="up confirm0000" x="506" y="10" width="236" height="232"/>
|
||||||
<SubTexture name="up confirm instance 10001" x="730" y="0" width="238" height="234"/>
|
<SubTexture name="up confirm0001" x="752" y="10" width="236" height="232"/>
|
||||||
<SubTexture name="up confirm instance 10002" x="972" y="236" width="216" height="212" frameX="-11" frameY="-11" frameWidth="238" frameHeight="234"/>
|
<SubTexture name="up confirm0002" x="998" y="251" width="214" height="211" frameX="-11" frameY="-10" frameWidth="236" frameHeight="232"/>
|
||||||
<SubTexture name="up confirm instance 10003" x="972" y="236" width="216" height="212" frameX="-11" frameY="-11" frameWidth="238" frameHeight="234"/>
|
<SubTexture name="up confirm0003" x="998" y="251" width="214" height="211" frameX="-11" frameY="-10" frameWidth="236" frameHeight="232"/>
|
||||||
<SubTexture name="up press instance 10000" x="1898" y="303" width="144" height="142" frameX="-6" frameY="-4" frameWidth="154" frameHeight="151"/>
|
<SubTexture name="up press0000" x="996" y="472" width="144" height="141" frameX="-5" frameY="-4" frameWidth="153" frameHeight="150"/>
|
||||||
<SubTexture name="up press instance 10001" x="1898" y="303" width="144" height="142" frameX="-6" frameY="-4" frameWidth="154" frameHeight="151"/>
|
<SubTexture name="up press0001" x="996" y="472" width="144" height="141" frameX="-5" frameY="-4" frameWidth="153" frameHeight="150"/>
|
||||||
<SubTexture name="up press instance 10002" x="158" y="398" width="154" height="151"/>
|
<SubTexture name="up press0002" x="174" y="419" width="153" height="150"/>
|
||||||
<SubTexture name="up press instance 10003" x="158" y="398" width="154" height="151"/>
|
<SubTexture name="up press0003" x="174" y="419" width="153" height="150"/>
|
||||||
</TextureAtlas>
|
</TextureAtlas>
|
||||||
|
9
assets/shared/images/characters/bf-carOffsets.txt
Normal file
9
assets/shared/images/characters/bf-carOffsets.txt
Normal file
@ -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
|
10
assets/shared/images/characters/bf-christmasOffsets.txt
Normal file
10
assets/shared/images/characters/bf-christmasOffsets.txt
Normal file
@ -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
|
3
assets/shared/images/characters/bf-pixel-deadOffsets.txt
Normal file
3
assets/shared/images/characters/bf-pixel-deadOffsets.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
firstDeath 0 0
|
||||||
|
deathLoop -30 -12
|
||||||
|
deathConfirm -30 -12
|
9
assets/shared/images/characters/bf-pixelOffsets.txt
Normal file
9
assets/shared/images/characters/bf-pixelOffsets.txt
Normal file
@ -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
|
14
assets/shared/images/characters/bfOffsets.txt
Normal file
14
assets/shared/images/characters/bfOffsets.txt
Normal file
@ -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
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<TextureAtlas imagePath="bfPixelsDEAD.png">
|
<TextureAtlas imagePath="bfPixelsDEAD.png">
|
||||||
<!-- Created with Adobe Animate version 20.0.0.17400 -->
|
<!-- if you read this you're epic. -->
|
||||||
<!-- http://www.adobe.com/products/animate.html -->
|
<!-- manual tweaks done on BF Dies pixel last 2 frames -->
|
||||||
<SubTexture name="BF Dies pixel0000" x="0" y="0" width="90" height="81"/>
|
<SubTexture name="BF Dies pixel0000" x="0" y="0" width="90" height="81"/>
|
||||||
<SubTexture name="BF Dies pixel0001" x="100" y="0" width="90" height="81"/>
|
<SubTexture name="BF Dies pixel0001" x="100" y="0" width="90" height="81"/>
|
||||||
<SubTexture name="BF Dies pixel0002" x="200" y="0" width="90" height="81"/>
|
<SubTexture name="BF Dies pixel0002" x="200" y="0" width="90" height="81"/>
|
||||||
@ -58,8 +58,8 @@
|
|||||||
<SubTexture name="BF Dies pixel0053" x="300" y="273" width="90" height="81"/>
|
<SubTexture name="BF Dies pixel0053" x="300" y="273" width="90" height="81"/>
|
||||||
<SubTexture name="BF Dies pixel0054" x="400" y="273" width="90" height="81"/>
|
<SubTexture name="BF Dies pixel0054" x="400" y="273" width="90" height="81"/>
|
||||||
<SubTexture name="BF Dies pixel0055" x="500" y="273" width="90" height="81"/>
|
<SubTexture name="BF Dies pixel0055" x="500" y="273" width="90" height="81"/>
|
||||||
<SubTexture name="BF Dies pixel0056" x="696" y="450" width="77" height="76"/>
|
<SubTexture name="BF Dies pixel0056" x="691" y="448" width="90" height="81"/>
|
||||||
<SubTexture name="BF Dies pixel0057" x="696" y="450" width="77" height="76"/>
|
<SubTexture name="BF Dies pixel0057" x="691" y="448" width="90" height="81"/>
|
||||||
<SubTexture name="RETRY CONFIRM0000" x="600" y="273" width="77" height="76"/>
|
<SubTexture name="RETRY CONFIRM0000" x="600" y="273" width="77" height="76"/>
|
||||||
<SubTexture name="RETRY CONFIRM0001" x="687" y="273" width="77" height="76"/>
|
<SubTexture name="RETRY CONFIRM0001" x="687" y="273" width="77" height="76"/>
|
||||||
<SubTexture name="RETRY CONFIRM0002" x="687" y="273" width="77" height="76"/>
|
<SubTexture name="RETRY CONFIRM0002" x="687" y="273" width="77" height="76"/>
|
||||||
|
5
assets/shared/images/characters/dadOffsets.txt
Normal file
5
assets/shared/images/characters/dadOffsets.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
idle 0 0
|
||||||
|
singUP -6 50
|
||||||
|
singRIGHT 0 27
|
||||||
|
singLEFT -10 10
|
||||||
|
singDOWN 0 -30
|
2
assets/shared/images/characters/gf-carOffsets.txt
Normal file
2
assets/shared/images/characters/gf-carOffsets.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
danceLeft 0 0
|
||||||
|
danceRight 0 0
|
11
assets/shared/images/characters/gf-christmasOffsets.txt
Normal file
11
assets/shared/images/characters/gf-christmasOffsets.txt
Normal file
@ -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
|
2
assets/shared/images/characters/gf-pixelOffsets.txt
Normal file
2
assets/shared/images/characters/gf-pixelOffsets.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
danceLeft 0 0
|
||||||
|
danceRight 0 0
|
11
assets/shared/images/characters/gfOffsets.txt
Normal file
11
assets/shared/images/characters/gfOffsets.txt
Normal file
@ -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
|
5
assets/shared/images/characters/mom-carOffsets.txt
Normal file
5
assets/shared/images/characters/mom-carOffsets.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
idle 0 0
|
||||||
|
singUP 14 71
|
||||||
|
singRIGHT 10 -60
|
||||||
|
singLEFT 250 -23
|
||||||
|
singDOWN 20 -160
|
5
assets/shared/images/characters/momOffsets.txt
Normal file
5
assets/shared/images/characters/momOffsets.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
idle 0 0
|
||||||
|
singUP 14 71
|
||||||
|
singRIGHT 10 -60
|
||||||
|
singLEFT 250 -23
|
||||||
|
singDOWN 20 -160
|
@ -0,0 +1,5 @@
|
|||||||
|
idle 0 0
|
||||||
|
singUP -20 50
|
||||||
|
singRIGHT -51 0
|
||||||
|
singLEFT -30 0
|
||||||
|
singDOWN -40 -94
|
5
assets/shared/images/characters/monsterOffsets.txt
Normal file
5
assets/shared/images/characters/monsterOffsets.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
idle 0 0
|
||||||
|
singUP -20 94
|
||||||
|
singRIGHT -51 30
|
||||||
|
singLEFT -30 20
|
||||||
|
singDOWN -50 -80
|
@ -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
|
9
assets/shared/images/characters/picoOffsets.txt
Normal file
9
assets/shared/images/characters/picoOffsets.txt
Normal file
@ -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
|
5
assets/shared/images/characters/senpai-angryOffsets.txt
Normal file
5
assets/shared/images/characters/senpai-angryOffsets.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
idle 0 0
|
||||||
|
singUP 5 37
|
||||||
|
singRIGHT 0 0
|
||||||
|
singLEFT 40 0
|
||||||
|
singDOWN 14 0
|
5
assets/shared/images/characters/senpaiOffsets.txt
Normal file
5
assets/shared/images/characters/senpaiOffsets.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
idle 0 0
|
||||||
|
singUP 5 37
|
||||||
|
singRIGHT 0 0
|
||||||
|
singLEFT 40 0
|
||||||
|
singDOWN 14 0
|
5
assets/shared/images/characters/spiritOffsets.txt
Normal file
5
assets/shared/images/characters/spiritOffsets.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
idle -220 -280
|
||||||
|
singUP -220 -240
|
||||||
|
singRIGHT -220 -280
|
||||||
|
singLEFT -200 -280
|
||||||
|
singDOWN 170 110
|
6
assets/shared/images/characters/spookyOffsets.txt
Normal file
6
assets/shared/images/characters/spookyOffsets.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
danceLeft 0 0
|
||||||
|
danceRight 0 0
|
||||||
|
singUP -20 26
|
||||||
|
singRIGHT -130 -14
|
||||||
|
singLEFT 130 -10
|
||||||
|
singDOWN -50 -130
|
BIN
assets/shared/sounds/CLAP.mp3
Normal file
BIN
assets/shared/sounds/CLAP.mp3
Normal file
Binary file not shown.
BIN
assets/shared/sounds/SNAP.mp3
Normal file
BIN
assets/shared/sounds/SNAP.mp3
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -30,26 +30,19 @@
|
|||||||
- `haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc`
|
- `haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc`
|
||||||
- `haxelib install actuate`
|
- `haxelib install actuate`
|
||||||
- `haxelib git extension-webm https://github.com/KadeDev/extension-webm`
|
- `haxelib git extension-webm https://github.com/KadeDev/extension-webm`
|
||||||
- `lime rebuild extension-webm windows`
|
- `lime rebuild extension-webm <ie. windows, macos, linux>`
|
||||||
|
|
||||||
### Windows-only dependencies (only for building *to* Windows. Building html5 on Windows does not require this)
|
### Windows-only dependencies (only for building *to* Windows. Building html5 on Windows does not require this)
|
||||||
If you are planning to build for Windows, you also need to install **Visual Studio 2019**. While installing it, *don't click on any of the options to install workloads*. Instead, go to the **individual components** tab and choose the following:
|
If you are planning to build for Windows, you also need to install **Visual Studio 2019**. While installing it, *don't click on any of the options to install workloads*. Instead, go to the **individual components** tab and choose the following:
|
||||||
|
|
||||||
- MSVC v142 - VS 2019 C++ x64/x86 build tools
|
- MSVC v142 - VS 2019 C++ x64/x86 build tools
|
||||||
|
- MSVC v141 - VS 2017 C++ x64/x86 build tools
|
||||||
- Windows SDK (10.0.17763.0)
|
- Windows SDK (10.0.17763.0)
|
||||||
- C++ Profiling tools
|
- C++ Profiling tools
|
||||||
- C++ CMake tools for windows
|
- C++ CMake tools for windows
|
||||||
- C++ ATL for v142 build tools (x86 & x64)
|
- C++ ATL for v142 build tools (x86 & x64)
|
||||||
- C++ MFC for v142 build tools (x86 & x64)
|
|
||||||
- C++/CLI support for v142 build tools (14.21)
|
|
||||||
- C++ Modules for v142 build tools (x64/x86)
|
|
||||||
- Clang Compiler for Windows
|
|
||||||
- Windows 10 SDK (10.0.17134.0)
|
|
||||||
- Windows 10 SDK (10.0.16299.0)
|
|
||||||
- MSVC v141 - VS 2017 C++ x64/x86 build tools
|
|
||||||
- MSVC v140 - VS 2015 C++ build tools (v14.00)
|
|
||||||
|
|
||||||
This will install about 22 GB of crap, but is necessary to build for Windows.
|
This will install about 7 GB of crap, but is necessary to build for Windows.
|
||||||
|
|
||||||
### macOS-only dependencies (these are required for building on macOS at all, including html5.)
|
### macOS-only dependencies (these are required for building on macOS at all, including html5.)
|
||||||
If you are running macOS, you'll need to install Xcode. You can download it from the macOS App Store or from the [Xcode website](https://developer.apple.com/xcode/).
|
If you are running macOS, you'll need to install Xcode. You can download it from the macOS App Store or from the [Xcode website](https://developer.apple.com/xcode/).
|
||||||
|
@ -15,7 +15,9 @@ Scroll down to Line 26, or Search (Windows/Linux: `Ctrl+F`, Mac: `Cmd+F`) for "w
|
|||||||
---
|
---
|
||||||
|
|
||||||
```haxe
|
```haxe
|
||||||
var weekData:Array<Dynamic> = [
|
static function weekData():Array<Dynamic>
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
|
||||||
['Tutorial'],
|
['Tutorial'],
|
||||||
|
|
||||||
@ -31,7 +33,8 @@ var weekData:Array<Dynamic> = [
|
|||||||
|
|
||||||
['Senpai', 'Roses', 'Thorns']
|
['Senpai', 'Roses', 'Thorns']
|
||||||
|
|
||||||
];
|
];
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -45,7 +48,9 @@ Example
|
|||||||
---
|
---
|
||||||
|
|
||||||
```haxe
|
```haxe
|
||||||
var weekData:Array<Dynamic> = [
|
static function weekData():Array<Dynamic>
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
|
||||||
['Tutorial'],
|
['Tutorial'],
|
||||||
|
|
||||||
@ -63,7 +68,8 @@ var weekData:Array<Dynamic> = [
|
|||||||
|
|
||||||
['Ugh', 'Guns', 'Stress']
|
['Ugh', 'Guns', 'Stress']
|
||||||
|
|
||||||
];
|
];
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -103,32 +109,21 @@ var weekCharacters:Array<Dynamic> = [
|
|||||||
|
|
||||||
### Step 4. Week Names
|
### Step 4. Week Names
|
||||||
|
|
||||||
Underneath the song list, there should be another array called `weekNames`. Creating a new line in that array, just enter a string that represents what you want the week to be called.
|
In `assets/preload/data`, there should be a .txt file called `weekNames`. Creating a new line in that file, just enter a string that represents what you want the week to be called.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
---
|
---
|
||||||
|
|
||||||
---
|
---
|
||||||
```haxe
|
```
|
||||||
var weekNames:Array<String> = [
|
Tutorial
|
||||||
|
Daddy Dearest
|
||||||
"How to Funk",
|
Spooky Month
|
||||||
|
PICO
|
||||||
"Daddy dearest",
|
MOMMY MUST MURDER
|
||||||
|
RED SNOW
|
||||||
"Spooky Month",
|
Hating Simulator ft. Moawling
|
||||||
|
TANKMAN
|
||||||
"PICO",
|
|
||||||
|
|
||||||
"Mommy Must Murder",
|
|
||||||
|
|
||||||
"Red Snow",
|
|
||||||
|
|
||||||
"Hating Simulator ft. Moawlings",
|
|
||||||
|
|
||||||
"Tankman"
|
|
||||||
|
|
||||||
];
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -137,23 +132,29 @@ var weekNames:Array<String> = [
|
|||||||
|
|
||||||
### Step 5. Graphics
|
### Step 5. Graphics
|
||||||
|
|
||||||
Displaying a week icon for your custom week is as simple as dropping a .png into `assets/images/storymenu`. Rename the file to `week7.png`, `week8.png`, etc.
|
Displaying a week icon for your custom week is as simple as dropping a .png into `assets/preload/images/storymenu`. Rename the file to `week7.png`, `week8.png`, etc.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
---
|
---
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|

|
||||||
|
=======
|
||||||
|

|
||||||
|
|
||||||
NOTE: You will have to add a new item to `weekUnlocked`, so that the week is playable.
|
NOTE: You will have to add a new item to `weekUnlocked`, so that the week is playable.
|
||||||
Locate to line 39 and add in a new boolean called True so that the week can be playable.
|
Locate to line 39 and add in a new boolean called True so that the week can be playable.
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 \* *for this screenshot I removed tankman from weekCharacters as it would crash because I don't have a tankman character added*
|
||||||
### Conclusion
|
### Conclusion
|
||||||
|
|
||||||
If you followed all of the steps correctly, you have successfully created a new week in the Story Mode.
|
If you followed all of the steps correctly, you have successfully created a new week in the Story Mode.
|
||||||
|
@ -1,5 +1,12 @@
|
|||||||
package;
|
package;
|
||||||
|
|
||||||
|
import lime.app.Application;
|
||||||
|
#if windows
|
||||||
|
import Discord.DiscordClient;
|
||||||
|
#end
|
||||||
|
import openfl.display.BitmapData;
|
||||||
|
import openfl.utils.Assets;
|
||||||
|
import flixel.ui.FlxBar;
|
||||||
import haxe.Exception;
|
import haxe.Exception;
|
||||||
import flixel.tweens.FlxEase;
|
import flixel.tweens.FlxEase;
|
||||||
import flixel.tweens.FlxTween;
|
import flixel.tweens.FlxTween;
|
||||||
@ -25,15 +32,26 @@ class Caching extends MusicBeatState
|
|||||||
var toBeDone = 0;
|
var toBeDone = 0;
|
||||||
var done = 0;
|
var done = 0;
|
||||||
|
|
||||||
|
var loaded = false;
|
||||||
|
|
||||||
var text:FlxText;
|
var text:FlxText;
|
||||||
var kadeLogo:FlxSprite;
|
var kadeLogo:FlxSprite;
|
||||||
|
|
||||||
|
public static var bitmapData:Map<String,FlxGraphic>;
|
||||||
|
|
||||||
|
var images = [];
|
||||||
|
var music = [];
|
||||||
|
var charts = [];
|
||||||
|
|
||||||
|
|
||||||
override function create()
|
override function create()
|
||||||
{
|
{
|
||||||
FlxG.mouse.visible = false;
|
FlxG.mouse.visible = false;
|
||||||
|
|
||||||
FlxG.worldBounds.set(0,0);
|
FlxG.worldBounds.set(0,0);
|
||||||
|
|
||||||
|
bitmapData = new Map<String,FlxGraphic>();
|
||||||
|
|
||||||
text = new FlxText(FlxG.width / 2, FlxG.height / 2 + 300,0,"Loading...");
|
text = new FlxText(FlxG.width / 2, FlxG.height / 2 + 300,0,"Loading...");
|
||||||
text.size = 34;
|
text.size = 34;
|
||||||
text.alignment = FlxTextAlign.CENTER;
|
text.alignment = FlxTextAlign.CENTER;
|
||||||
@ -48,42 +66,27 @@ class Caching extends MusicBeatState
|
|||||||
|
|
||||||
kadeLogo.alpha = 0;
|
kadeLogo.alpha = 0;
|
||||||
|
|
||||||
add(kadeLogo);
|
PlayerSettings.init();
|
||||||
add(text);
|
|
||||||
|
|
||||||
trace('starting caching..');
|
#if windows
|
||||||
|
DiscordClient.initialize();
|
||||||
|
|
||||||
sys.thread.Thread.create(() -> {
|
Application.current.onExit.add (function (exitCode) {
|
||||||
cache();
|
DiscordClient.shutdown();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
#end
|
||||||
|
|
||||||
super.create();
|
|
||||||
}
|
|
||||||
|
|
||||||
var calledDone = false;
|
Highscore.load();
|
||||||
|
|
||||||
override function update(elapsed)
|
FlxG.save.bind('funkin', 'ninjamuffin99');
|
||||||
|
|
||||||
|
KadeEngineData.initSave();
|
||||||
|
|
||||||
|
|
||||||
|
if (FlxG.save.data.cacheImages)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (toBeDone != 0 && done != toBeDone)
|
|
||||||
{
|
|
||||||
var alpha = HelperFunctions.truncateFloat(done / toBeDone * 100,2) / 100;
|
|
||||||
kadeLogo.alpha = alpha;
|
|
||||||
text.alpha = alpha;
|
|
||||||
text.text = "Loading... (" + done + "/" + toBeDone + ")";
|
|
||||||
}
|
|
||||||
|
|
||||||
super.update(elapsed);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function cache()
|
|
||||||
{
|
|
||||||
|
|
||||||
var images = [];
|
|
||||||
var music = [];
|
|
||||||
|
|
||||||
trace("caching images...");
|
trace("caching images...");
|
||||||
|
|
||||||
for (i in FileSystem.readDirectory(FileSystem.absolutePath("assets/shared/images/characters")))
|
for (i in FileSystem.readDirectory(FileSystem.absolutePath("assets/shared/images/characters")))
|
||||||
@ -92,6 +95,7 @@ class Caching extends MusicBeatState
|
|||||||
continue;
|
continue;
|
||||||
images.push(i);
|
images.push(i);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
trace("caching music...");
|
trace("caching music...");
|
||||||
|
|
||||||
@ -100,15 +104,66 @@ class Caching extends MusicBeatState
|
|||||||
music.push(i);
|
music.push(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
toBeDone = Lambda.count(images) + Lambda.count(music);
|
toBeDone = Lambda.count(images) + Lambda.count(music);
|
||||||
|
|
||||||
|
var bar = new FlxBar(10,FlxG.height - 50,FlxBarFillDirection.LEFT_TO_RIGHT,FlxG.width,40,null,"done",0,toBeDone);
|
||||||
|
bar.color = FlxColor.PURPLE;
|
||||||
|
|
||||||
|
add(bar);
|
||||||
|
|
||||||
|
add(kadeLogo);
|
||||||
|
add(text);
|
||||||
|
|
||||||
|
trace('starting caching..');
|
||||||
|
|
||||||
|
// update thread
|
||||||
|
|
||||||
|
sys.thread.Thread.create(() -> {
|
||||||
|
while(!loaded)
|
||||||
|
{
|
||||||
|
if (toBeDone != 0 && done != toBeDone)
|
||||||
|
{
|
||||||
|
var alpha = HelperFunctions.truncateFloat(done / toBeDone * 100,2) / 100;
|
||||||
|
kadeLogo.alpha = alpha;
|
||||||
|
text.alpha = alpha;
|
||||||
|
text.text = "Loading... (" + done + "/" + toBeDone + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
// cache thread
|
||||||
|
|
||||||
|
sys.thread.Thread.create(() -> {
|
||||||
|
cache();
|
||||||
|
});
|
||||||
|
|
||||||
|
super.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
var calledDone = false;
|
||||||
|
|
||||||
|
override function update(elapsed)
|
||||||
|
{
|
||||||
|
super.update(elapsed);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function cache()
|
||||||
|
{
|
||||||
|
|
||||||
trace("LOADING: " + toBeDone + " OBJECTS.");
|
trace("LOADING: " + toBeDone + " OBJECTS.");
|
||||||
|
|
||||||
for (i in images)
|
for (i in images)
|
||||||
{
|
{
|
||||||
var replaced = i.replace(".png","");
|
var replaced = i.replace(".png","");
|
||||||
FlxG.bitmap.add(Paths.image("characters/" + replaced,"shared"));
|
var data:BitmapData = BitmapData.fromFile("assets/shared/images/characters/" + i);
|
||||||
trace("cached " + replaced);
|
trace('id ' + replaced + ' file - assets/shared/images/characters/' + i + ' ${data.width}');
|
||||||
|
var graph = FlxGraphic.fromBitmapData(data);
|
||||||
|
graph.persist = true;
|
||||||
|
graph.destroyOnNoUse = false;
|
||||||
|
bitmapData.set(replaced,graph);
|
||||||
done++;
|
done++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,8 +175,13 @@ class Caching extends MusicBeatState
|
|||||||
done++;
|
done++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
trace("Finished caching...");
|
trace("Finished caching...");
|
||||||
|
|
||||||
|
loaded = true;
|
||||||
|
|
||||||
|
trace(Assets.cache.hasBitmapData('GF_assets'));
|
||||||
|
|
||||||
FlxG.switchState(new TitleState());
|
FlxG.switchState(new TitleState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ class Character extends FlxSprite
|
|||||||
{
|
{
|
||||||
case 'gf':
|
case 'gf':
|
||||||
// GIRLFRIEND CODE
|
// GIRLFRIEND CODE
|
||||||
tex = Paths.getSparrowAtlas('characters/GF_assets');
|
tex = Paths.getSparrowAtlas('GF_assets','shared',true);
|
||||||
frames = tex;
|
frames = tex;
|
||||||
animation.addByPrefix('cheer', 'GF Cheer', 24, false);
|
animation.addByPrefix('cheer', 'GF Cheer', 24, false);
|
||||||
animation.addByPrefix('singLEFT', 'GF left note', 24, false);
|
animation.addByPrefix('singLEFT', 'GF left note', 24, false);
|
||||||
@ -46,24 +46,12 @@ 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.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);
|
animation.addByPrefix('scared', 'GF FEAR', 24);
|
||||||
|
|
||||||
addOffset('cheer');
|
loadOffsetFile(curCharacter);
|
||||||
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);
|
|
||||||
|
|
||||||
playAnim('danceRight');
|
playAnim('danceRight');
|
||||||
|
|
||||||
case 'gf-christmas':
|
case 'gf-christmas':
|
||||||
tex = Paths.getSparrowAtlas('characters/gfChristmas');
|
tex = Paths.getSparrowAtlas('gfChristmas','shared',true);
|
||||||
frames = tex;
|
frames = tex;
|
||||||
animation.addByPrefix('cheer', 'GF Cheer', 24, false);
|
animation.addByPrefix('cheer', 'GF Cheer', 24, false);
|
||||||
animation.addByPrefix('singLEFT', 'GF left note', 24, false);
|
animation.addByPrefix('singLEFT', 'GF left note', 24, false);
|
||||||
@ -77,44 +65,30 @@ 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.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);
|
animation.addByPrefix('scared', 'GF FEAR', 24);
|
||||||
|
|
||||||
addOffset('cheer');
|
loadOffsetFile(curCharacter);
|
||||||
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);
|
|
||||||
|
|
||||||
playAnim('danceRight');
|
playAnim('danceRight');
|
||||||
|
|
||||||
case 'gf-car':
|
case 'gf-car':
|
||||||
tex = Paths.getSparrowAtlas('characters/gfCar');
|
tex = Paths.getSparrowAtlas('gfCar','shared',true);
|
||||||
frames = tex;
|
frames = tex;
|
||||||
animation.addByIndices('singUP', 'GF Dancing Beat Hair blowing CAR', [0], "", 24, false);
|
animation.addByIndices('singUP', 'GF Dancing Beat Hair blowing CAR', [0], "", 24, false);
|
||||||
animation.addByIndices('danceLeft', 'GF Dancing Beat Hair blowing CAR', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false);
|
animation.addByIndices('danceLeft', 'GF Dancing Beat Hair blowing CAR', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false);
|
||||||
animation.addByIndices('danceRight', 'GF Dancing Beat Hair blowing CAR', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24,
|
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);
|
false);
|
||||||
|
|
||||||
addOffset('danceLeft', 0);
|
loadOffsetFile(curCharacter);
|
||||||
addOffset('danceRight', 0);
|
|
||||||
|
|
||||||
playAnim('danceRight');
|
playAnim('danceRight');
|
||||||
|
|
||||||
case 'gf-pixel':
|
case 'gf-pixel':
|
||||||
tex = Paths.getSparrowAtlas('characters/gfPixel');
|
tex = Paths.getSparrowAtlas('gfPixel','shared',true);
|
||||||
frames = tex;
|
frames = tex;
|
||||||
animation.addByIndices('singUP', 'GF IDLE', [2], "", 24, false);
|
animation.addByIndices('singUP', 'GF IDLE', [2], "", 24, false);
|
||||||
animation.addByIndices('danceLeft', 'GF IDLE', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false);
|
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);
|
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);
|
loadOffsetFile(curCharacter);
|
||||||
addOffset('danceRight', 0);
|
|
||||||
|
|
||||||
playAnim('danceRight');
|
playAnim('danceRight');
|
||||||
|
|
||||||
@ -124,7 +98,7 @@ class Character extends FlxSprite
|
|||||||
|
|
||||||
case 'dad':
|
case 'dad':
|
||||||
// DAD ANIMATION LOADING CODE
|
// DAD ANIMATION LOADING CODE
|
||||||
tex = Paths.getSparrowAtlas('characters/DADDY_DEAREST', 'shared');
|
tex = Paths.getSparrowAtlas('DADDY_DEAREST','shared',true);
|
||||||
frames = tex;
|
frames = tex;
|
||||||
animation.addByPrefix('idle', 'Dad idle dance', 24);
|
animation.addByPrefix('idle', 'Dad idle dance', 24);
|
||||||
animation.addByPrefix('singUP', 'Dad Sing Note UP', 24);
|
animation.addByPrefix('singUP', 'Dad Sing Note UP', 24);
|
||||||
@ -132,15 +106,11 @@ class Character extends FlxSprite
|
|||||||
animation.addByPrefix('singDOWN', 'Dad Sing Note DOWN', 24);
|
animation.addByPrefix('singDOWN', 'Dad Sing Note DOWN', 24);
|
||||||
animation.addByPrefix('singLEFT', 'Dad Sing Note LEFT', 24);
|
animation.addByPrefix('singLEFT', 'Dad Sing Note LEFT', 24);
|
||||||
|
|
||||||
addOffset('idle');
|
loadOffsetFile(curCharacter);
|
||||||
addOffset("singUP", -6, 50);
|
|
||||||
addOffset("singRIGHT", 0, 27);
|
|
||||||
addOffset("singLEFT", -10, 10);
|
|
||||||
addOffset("singDOWN", 0, -30);
|
|
||||||
|
|
||||||
playAnim('idle');
|
playAnim('idle');
|
||||||
case 'spooky':
|
case 'spooky':
|
||||||
tex = Paths.getSparrowAtlas('characters/spooky_kids_assets');
|
tex = Paths.getSparrowAtlas('spooky_kids_assets','shared',true);
|
||||||
frames = tex;
|
frames = tex;
|
||||||
animation.addByPrefix('singUP', 'spooky UP NOTE', 24, false);
|
animation.addByPrefix('singUP', 'spooky UP NOTE', 24, false);
|
||||||
animation.addByPrefix('singDOWN', 'spooky DOWN note', 24, false);
|
animation.addByPrefix('singDOWN', 'spooky DOWN note', 24, false);
|
||||||
@ -149,17 +119,11 @@ class Character extends FlxSprite
|
|||||||
animation.addByIndices('danceLeft', 'spooky dance idle', [0, 2, 6], "", 12, false);
|
animation.addByIndices('danceLeft', 'spooky dance idle', [0, 2, 6], "", 12, false);
|
||||||
animation.addByIndices('danceRight', 'spooky dance idle', [8, 10, 12, 14], "", 12, false);
|
animation.addByIndices('danceRight', 'spooky dance idle', [8, 10, 12, 14], "", 12, false);
|
||||||
|
|
||||||
addOffset('danceLeft');
|
loadOffsetFile(curCharacter);
|
||||||
addOffset('danceRight');
|
|
||||||
|
|
||||||
addOffset("singUP", -20, 26);
|
|
||||||
addOffset("singRIGHT", -130, -14);
|
|
||||||
addOffset("singLEFT", 130, -10);
|
|
||||||
addOffset("singDOWN", -50, -130);
|
|
||||||
|
|
||||||
playAnim('danceRight');
|
playAnim('danceRight');
|
||||||
case 'mom':
|
case 'mom':
|
||||||
tex = Paths.getSparrowAtlas('characters/Mom_Assets');
|
tex = Paths.getSparrowAtlas('Mom_Assets','shared',true);
|
||||||
frames = tex;
|
frames = tex;
|
||||||
|
|
||||||
animation.addByPrefix('idle', "Mom Idle", 24, false);
|
animation.addByPrefix('idle', "Mom Idle", 24, false);
|
||||||
@ -170,16 +134,12 @@ class Character extends FlxSprite
|
|||||||
// CUZ DAVE IS DUMB!
|
// CUZ DAVE IS DUMB!
|
||||||
animation.addByPrefix('singRIGHT', 'Mom Pose Left', 24, false);
|
animation.addByPrefix('singRIGHT', 'Mom Pose Left', 24, false);
|
||||||
|
|
||||||
addOffset('idle');
|
loadOffsetFile(curCharacter);
|
||||||
addOffset("singUP", 14, 71);
|
|
||||||
addOffset("singRIGHT", 10, -60);
|
|
||||||
addOffset("singLEFT", 250, -23);
|
|
||||||
addOffset("singDOWN", 20, -160);
|
|
||||||
|
|
||||||
playAnim('idle');
|
playAnim('idle');
|
||||||
|
|
||||||
case 'mom-car':
|
case 'mom-car':
|
||||||
tex = Paths.getSparrowAtlas('characters/momCar');
|
tex = Paths.getSparrowAtlas('momCar','shared',true);
|
||||||
frames = tex;
|
frames = tex;
|
||||||
|
|
||||||
animation.addByPrefix('idle', "Mom Idle", 24, false);
|
animation.addByPrefix('idle', "Mom Idle", 24, false);
|
||||||
@ -190,15 +150,11 @@ class Character extends FlxSprite
|
|||||||
// CUZ DAVE IS DUMB!
|
// CUZ DAVE IS DUMB!
|
||||||
animation.addByPrefix('singRIGHT', 'Mom Pose Left', 24, false);
|
animation.addByPrefix('singRIGHT', 'Mom Pose Left', 24, false);
|
||||||
|
|
||||||
addOffset('idle');
|
loadOffsetFile(curCharacter);
|
||||||
addOffset("singUP", 14, 71);
|
|
||||||
addOffset("singRIGHT", 10, -60);
|
|
||||||
addOffset("singLEFT", 250, -23);
|
|
||||||
addOffset("singDOWN", 20, -160);
|
|
||||||
|
|
||||||
playAnim('idle');
|
playAnim('idle');
|
||||||
case 'monster':
|
case 'monster':
|
||||||
tex = Paths.getSparrowAtlas('characters/Monster_Assets');
|
tex = Paths.getSparrowAtlas('Monster_Assets','shared',true);
|
||||||
frames = tex;
|
frames = tex;
|
||||||
animation.addByPrefix('idle', 'monster idle', 24, false);
|
animation.addByPrefix('idle', 'monster idle', 24, false);
|
||||||
animation.addByPrefix('singUP', 'monster up note', 24, false);
|
animation.addByPrefix('singUP', 'monster up note', 24, false);
|
||||||
@ -206,14 +162,10 @@ class Character extends FlxSprite
|
|||||||
animation.addByPrefix('singLEFT', 'Monster left note', 24, false);
|
animation.addByPrefix('singLEFT', 'Monster left note', 24, false);
|
||||||
animation.addByPrefix('singRIGHT', 'Monster Right note', 24, false);
|
animation.addByPrefix('singRIGHT', 'Monster Right note', 24, false);
|
||||||
|
|
||||||
addOffset('idle');
|
loadOffsetFile(curCharacter);
|
||||||
addOffset("singUP", -20, 50);
|
|
||||||
addOffset("singRIGHT", -51);
|
|
||||||
addOffset("singLEFT", -30);
|
|
||||||
addOffset("singDOWN", -30, -40);
|
|
||||||
playAnim('idle');
|
playAnim('idle');
|
||||||
case 'monster-christmas':
|
case 'monster-christmas':
|
||||||
tex = Paths.getSparrowAtlas('characters/monsterChristmas');
|
tex = Paths.getSparrowAtlas('monsterChristmas','shared',true);
|
||||||
frames = tex;
|
frames = tex;
|
||||||
animation.addByPrefix('idle', 'monster idle', 24, false);
|
animation.addByPrefix('idle', 'monster idle', 24, false);
|
||||||
animation.addByPrefix('singUP', 'monster up note', 24, false);
|
animation.addByPrefix('singUP', 'monster up note', 24, false);
|
||||||
@ -221,14 +173,10 @@ class Character extends FlxSprite
|
|||||||
animation.addByPrefix('singLEFT', 'Monster left note', 24, false);
|
animation.addByPrefix('singLEFT', 'Monster left note', 24, false);
|
||||||
animation.addByPrefix('singRIGHT', 'Monster Right note', 24, false);
|
animation.addByPrefix('singRIGHT', 'Monster Right note', 24, false);
|
||||||
|
|
||||||
addOffset('idle');
|
loadOffsetFile(curCharacter);
|
||||||
addOffset("singUP", -20, 50);
|
|
||||||
addOffset("singRIGHT", -51);
|
|
||||||
addOffset("singLEFT", -30);
|
|
||||||
addOffset("singDOWN", -40, -94);
|
|
||||||
playAnim('idle');
|
playAnim('idle');
|
||||||
case 'pico':
|
case 'pico':
|
||||||
tex = Paths.getSparrowAtlas('characters/Pico_FNF_assetss');
|
tex = Paths.getSparrowAtlas('Pico_FNF_assetss','shared',true);
|
||||||
frames = tex;
|
frames = tex;
|
||||||
animation.addByPrefix('idle', "Pico Idle Dance", 24);
|
animation.addByPrefix('idle', "Pico Idle Dance", 24);
|
||||||
animation.addByPrefix('singUP', 'pico Up note0', 24, false);
|
animation.addByPrefix('singUP', 'pico Up note0', 24, false);
|
||||||
@ -252,22 +200,14 @@ class Character extends FlxSprite
|
|||||||
animation.addByPrefix('singUPmiss', 'pico Up note miss', 24);
|
animation.addByPrefix('singUPmiss', 'pico Up note miss', 24);
|
||||||
animation.addByPrefix('singDOWNmiss', 'Pico Down Note MISS', 24);
|
animation.addByPrefix('singDOWNmiss', 'Pico Down Note MISS', 24);
|
||||||
|
|
||||||
addOffset('idle');
|
loadOffsetFile(curCharacter);
|
||||||
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);
|
|
||||||
|
|
||||||
playAnim('idle');
|
playAnim('idle');
|
||||||
|
|
||||||
flipX = true;
|
flipX = true;
|
||||||
|
|
||||||
case 'bf':
|
case 'bf':
|
||||||
var tex = Paths.getSparrowAtlas('characters/BOYFRIEND', 'shared');
|
var tex = Paths.getSparrowAtlas('BOYFRIEND','shared',true);
|
||||||
frames = tex;
|
frames = tex;
|
||||||
|
|
||||||
trace(tex.frames.length);
|
trace(tex.frames.length);
|
||||||
@ -289,27 +229,14 @@ class Character extends FlxSprite
|
|||||||
|
|
||||||
animation.addByPrefix('scared', 'BF idle shaking', 24);
|
animation.addByPrefix('scared', 'BF idle shaking', 24);
|
||||||
|
|
||||||
addOffset('idle', -5);
|
loadOffsetFile(curCharacter);
|
||||||
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);
|
|
||||||
|
|
||||||
playAnim('idle');
|
playAnim('idle');
|
||||||
|
|
||||||
flipX = true;
|
flipX = true;
|
||||||
|
|
||||||
case 'bf-christmas':
|
case 'bf-christmas':
|
||||||
var tex = Paths.getSparrowAtlas('characters/bfChristmas');
|
var tex = Paths.getSparrowAtlas('bfChristmas','shared',true);
|
||||||
frames = tex;
|
frames = tex;
|
||||||
animation.addByPrefix('idle', 'BF idle dance', 24, false);
|
animation.addByPrefix('idle', 'BF idle dance', 24, false);
|
||||||
animation.addByPrefix('singUP', 'BF NOTE UP0', 24, false);
|
animation.addByPrefix('singUP', 'BF NOTE UP0', 24, false);
|
||||||
@ -322,22 +249,13 @@ class Character extends FlxSprite
|
|||||||
animation.addByPrefix('singDOWNmiss', 'BF NOTE DOWN MISS', 24, false);
|
animation.addByPrefix('singDOWNmiss', 'BF NOTE DOWN MISS', 24, false);
|
||||||
animation.addByPrefix('hey', 'BF HEY', 24, false);
|
animation.addByPrefix('hey', 'BF HEY', 24, false);
|
||||||
|
|
||||||
addOffset('idle', -5);
|
loadOffsetFile(curCharacter);
|
||||||
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);
|
|
||||||
|
|
||||||
playAnim('idle');
|
playAnim('idle');
|
||||||
|
|
||||||
flipX = true;
|
flipX = true;
|
||||||
case 'bf-car':
|
case 'bf-car':
|
||||||
var tex = Paths.getSparrowAtlas('characters/bfCar');
|
var tex = Paths.getSparrowAtlas('bfCar','shared',true);
|
||||||
frames = tex;
|
frames = tex;
|
||||||
animation.addByPrefix('idle', 'BF idle dance', 24, false);
|
animation.addByPrefix('idle', 'BF idle dance', 24, false);
|
||||||
animation.addByPrefix('singUP', 'BF NOTE UP0', 24, false);
|
animation.addByPrefix('singUP', 'BF NOTE UP0', 24, false);
|
||||||
@ -349,20 +267,12 @@ class Character extends FlxSprite
|
|||||||
animation.addByPrefix('singRIGHTmiss', 'BF NOTE RIGHT MISS', 24, false);
|
animation.addByPrefix('singRIGHTmiss', 'BF NOTE RIGHT MISS', 24, false);
|
||||||
animation.addByPrefix('singDOWNmiss', 'BF NOTE DOWN MISS', 24, false);
|
animation.addByPrefix('singDOWNmiss', 'BF NOTE DOWN MISS', 24, false);
|
||||||
|
|
||||||
addOffset('idle', -5);
|
loadOffsetFile(curCharacter);
|
||||||
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);
|
|
||||||
playAnim('idle');
|
playAnim('idle');
|
||||||
|
|
||||||
flipX = true;
|
flipX = true;
|
||||||
case 'bf-pixel':
|
case 'bf-pixel':
|
||||||
frames = Paths.getSparrowAtlas('characters/bfPixel');
|
frames = Paths.getSparrowAtlas('bfPixel','shared',true);
|
||||||
animation.addByPrefix('idle', 'BF IDLE', 24, false);
|
animation.addByPrefix('idle', 'BF IDLE', 24, false);
|
||||||
animation.addByPrefix('singUP', 'BF UP NOTE', 24, false);
|
animation.addByPrefix('singUP', 'BF UP NOTE', 24, false);
|
||||||
animation.addByPrefix('singLEFT', 'BF LEFT NOTE', 24, false);
|
animation.addByPrefix('singLEFT', 'BF LEFT NOTE', 24, false);
|
||||||
@ -373,15 +283,7 @@ class Character extends FlxSprite
|
|||||||
animation.addByPrefix('singRIGHTmiss', 'BF RIGHT MISS', 24, false);
|
animation.addByPrefix('singRIGHTmiss', 'BF RIGHT MISS', 24, false);
|
||||||
animation.addByPrefix('singDOWNmiss', 'BF DOWN MISS', 24, false);
|
animation.addByPrefix('singDOWNmiss', 'BF DOWN MISS', 24, false);
|
||||||
|
|
||||||
addOffset('idle');
|
loadOffsetFile(curCharacter);
|
||||||
addOffset("singUP");
|
|
||||||
addOffset("singRIGHT");
|
|
||||||
addOffset("singLEFT");
|
|
||||||
addOffset("singDOWN");
|
|
||||||
addOffset("singUPmiss");
|
|
||||||
addOffset("singRIGHTmiss");
|
|
||||||
addOffset("singLEFTmiss");
|
|
||||||
addOffset("singDOWNmiss");
|
|
||||||
|
|
||||||
setGraphicSize(Std.int(width * 6));
|
setGraphicSize(Std.int(width * 6));
|
||||||
updateHitbox();
|
updateHitbox();
|
||||||
@ -395,16 +297,14 @@ class Character extends FlxSprite
|
|||||||
|
|
||||||
flipX = true;
|
flipX = true;
|
||||||
case 'bf-pixel-dead':
|
case 'bf-pixel-dead':
|
||||||
frames = Paths.getSparrowAtlas('characters/bfPixelsDEAD');
|
frames = Paths.getSparrowAtlas('bfPixelsDEAD','shared',true);
|
||||||
animation.addByPrefix('singUP', "BF Dies pixel", 24, false);
|
animation.addByPrefix('singUP', "BF Dies pixel", 24, false);
|
||||||
animation.addByPrefix('firstDeath', "BF Dies pixel", 24, false);
|
animation.addByPrefix('firstDeath', "BF Dies pixel", 24, false);
|
||||||
animation.addByPrefix('deathLoop', "Retry Loop", 24, true);
|
animation.addByPrefix('deathLoop', "Retry Loop", 24, true);
|
||||||
animation.addByPrefix('deathConfirm', "RETRY CONFIRM", 24, false);
|
animation.addByPrefix('deathConfirm', "RETRY CONFIRM", 24, false);
|
||||||
animation.play('firstDeath');
|
animation.play('firstDeath');
|
||||||
|
|
||||||
addOffset('firstDeath');
|
loadOffsetFile(curCharacter);
|
||||||
addOffset('deathLoop', -37);
|
|
||||||
addOffset('deathConfirm', -37);
|
|
||||||
playAnim('firstDeath');
|
playAnim('firstDeath');
|
||||||
// pixel bullshit
|
// pixel bullshit
|
||||||
setGraphicSize(Std.int(width * 6));
|
setGraphicSize(Std.int(width * 6));
|
||||||
@ -413,18 +313,14 @@ class Character extends FlxSprite
|
|||||||
flipX = true;
|
flipX = true;
|
||||||
|
|
||||||
case 'senpai':
|
case 'senpai':
|
||||||
frames = Paths.getSparrowAtlas('characters/senpai');
|
frames = Paths.getSparrowAtlas('senpai','shared',true);
|
||||||
animation.addByPrefix('idle', 'Senpai Idle', 24, false);
|
animation.addByPrefix('idle', 'Senpai Idle', 24, false);
|
||||||
animation.addByPrefix('singUP', 'SENPAI UP NOTE', 24, false);
|
animation.addByPrefix('singUP', 'SENPAI UP NOTE', 24, false);
|
||||||
animation.addByPrefix('singLEFT', 'SENPAI LEFT NOTE', 24, false);
|
animation.addByPrefix('singLEFT', 'SENPAI LEFT NOTE', 24, false);
|
||||||
animation.addByPrefix('singRIGHT', 'SENPAI RIGHT NOTE', 24, false);
|
animation.addByPrefix('singRIGHT', 'SENPAI RIGHT NOTE', 24, false);
|
||||||
animation.addByPrefix('singDOWN', 'SENPAI DOWN NOTE', 24, false);
|
animation.addByPrefix('singDOWN', 'SENPAI DOWN NOTE', 24, false);
|
||||||
|
|
||||||
addOffset('idle');
|
loadOffsetFile(curCharacter);
|
||||||
addOffset("singUP", 5, 37);
|
|
||||||
addOffset("singRIGHT");
|
|
||||||
addOffset("singLEFT", 40);
|
|
||||||
addOffset("singDOWN", 14);
|
|
||||||
|
|
||||||
playAnim('idle');
|
playAnim('idle');
|
||||||
|
|
||||||
@ -433,18 +329,14 @@ class Character extends FlxSprite
|
|||||||
|
|
||||||
antialiasing = false;
|
antialiasing = false;
|
||||||
case 'senpai-angry':
|
case 'senpai-angry':
|
||||||
frames = Paths.getSparrowAtlas('characters/senpai');
|
frames = Paths.getSparrowAtlas('senpai','shared',true);
|
||||||
animation.addByPrefix('idle', 'Angry Senpai Idle', 24, false);
|
animation.addByPrefix('idle', 'Angry Senpai Idle', 24, false);
|
||||||
animation.addByPrefix('singUP', 'Angry Senpai UP NOTE', 24, false);
|
animation.addByPrefix('singUP', 'Angry Senpai UP NOTE', 24, false);
|
||||||
animation.addByPrefix('singLEFT', 'Angry Senpai LEFT NOTE', 24, false);
|
animation.addByPrefix('singLEFT', 'Angry Senpai LEFT NOTE', 24, false);
|
||||||
animation.addByPrefix('singRIGHT', 'Angry Senpai RIGHT NOTE', 24, false);
|
animation.addByPrefix('singRIGHT', 'Angry Senpai RIGHT NOTE', 24, false);
|
||||||
animation.addByPrefix('singDOWN', 'Angry Senpai DOWN NOTE', 24, false);
|
animation.addByPrefix('singDOWN', 'Angry Senpai DOWN NOTE', 24, false);
|
||||||
|
|
||||||
addOffset('idle');
|
loadOffsetFile(curCharacter);
|
||||||
addOffset("singUP", 5, 37);
|
|
||||||
addOffset("singRIGHT");
|
|
||||||
addOffset("singLEFT", 40);
|
|
||||||
addOffset("singDOWN", 14);
|
|
||||||
playAnim('idle');
|
playAnim('idle');
|
||||||
|
|
||||||
setGraphicSize(Std.int(width * 6));
|
setGraphicSize(Std.int(width * 6));
|
||||||
@ -453,18 +345,14 @@ class Character extends FlxSprite
|
|||||||
antialiasing = false;
|
antialiasing = false;
|
||||||
|
|
||||||
case 'spirit':
|
case 'spirit':
|
||||||
frames = Paths.getPackerAtlas('characters/spirit');
|
frames = Paths.getPackerAtlas('spirit','shared',true);
|
||||||
animation.addByPrefix('idle', "idle spirit_", 24, false);
|
animation.addByPrefix('idle', "idle spirit_", 24, false);
|
||||||
animation.addByPrefix('singUP', "up_", 24, false);
|
animation.addByPrefix('singUP', "up_", 24, false);
|
||||||
animation.addByPrefix('singRIGHT', "right_", 24, false);
|
animation.addByPrefix('singRIGHT', "right_", 24, false);
|
||||||
animation.addByPrefix('singLEFT', "left_", 24, false);
|
animation.addByPrefix('singLEFT', "left_", 24, false);
|
||||||
animation.addByPrefix('singDOWN', "spirit down_", 24, false);
|
animation.addByPrefix('singDOWN', "spirit down_", 24, false);
|
||||||
|
|
||||||
addOffset('idle', -220, -280);
|
loadOffsetFile(curCharacter);
|
||||||
addOffset('singUP', -220, -240);
|
|
||||||
addOffset("singRIGHT", -220, -280);
|
|
||||||
addOffset("singLEFT", -200, -280);
|
|
||||||
addOffset("singDOWN", 170, 110);
|
|
||||||
|
|
||||||
setGraphicSize(Std.int(width * 6));
|
setGraphicSize(Std.int(width * 6));
|
||||||
updateHitbox();
|
updateHitbox();
|
||||||
@ -474,7 +362,7 @@ class Character extends FlxSprite
|
|||||||
antialiasing = false;
|
antialiasing = false;
|
||||||
|
|
||||||
case 'parents-christmas':
|
case 'parents-christmas':
|
||||||
frames = Paths.getSparrowAtlas('characters/mom_dad_christmas_assets');
|
frames = Paths.getSparrowAtlas('mom_dad_christmas_assets','shared',true);
|
||||||
animation.addByPrefix('idle', 'Parent Christmas Idle', 24, false);
|
animation.addByPrefix('idle', 'Parent Christmas Idle', 24, false);
|
||||||
animation.addByPrefix('singUP', 'Parent Up Note Dad', 24, false);
|
animation.addByPrefix('singUP', 'Parent Up Note Dad', 24, false);
|
||||||
animation.addByPrefix('singDOWN', 'Parent Down Note Dad', 24, false);
|
animation.addByPrefix('singDOWN', 'Parent Down Note Dad', 24, false);
|
||||||
@ -487,15 +375,7 @@ class Character extends FlxSprite
|
|||||||
animation.addByPrefix('singLEFT-alt', 'Parent Left Note Mom', 24, false);
|
animation.addByPrefix('singLEFT-alt', 'Parent Left Note Mom', 24, false);
|
||||||
animation.addByPrefix('singRIGHT-alt', 'Parent Right Note Mom', 24, false);
|
animation.addByPrefix('singRIGHT-alt', 'Parent Right Note Mom', 24, false);
|
||||||
|
|
||||||
addOffset('idle');
|
loadOffsetFile(curCharacter);
|
||||||
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);
|
|
||||||
|
|
||||||
playAnim('idle');
|
playAnim('idle');
|
||||||
}
|
}
|
||||||
@ -525,6 +405,17 @@ class Character extends FlxSprite
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function loadOffsetFile(character:String)
|
||||||
|
{
|
||||||
|
var offset:Array<String> = CoolUtil.coolTextFile(Paths.txt('images/characters/' + character + "Offsets"));
|
||||||
|
|
||||||
|
for (i in 0...offset.length)
|
||||||
|
{
|
||||||
|
var data:Array<String> = offset[i].split(' ');
|
||||||
|
addOffset(data[0], Std.parseInt(data[1]), Std.parseInt(data[2]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override function update(elapsed:Float)
|
override function update(elapsed:Float)
|
||||||
{
|
{
|
||||||
if (!curCharacter.startsWith('bf'))
|
if (!curCharacter.startsWith('bf'))
|
||||||
|
@ -75,7 +75,7 @@ class ChartingState extends MusicBeatState
|
|||||||
|
|
||||||
var gridBG:FlxSprite;
|
var gridBG:FlxSprite;
|
||||||
|
|
||||||
var _song:SwagSong;
|
public static var _song:SwagSong;
|
||||||
|
|
||||||
var typingShit:FlxInputText;
|
var typingShit:FlxInputText;
|
||||||
/*
|
/*
|
||||||
@ -129,7 +129,7 @@ class ChartingState extends MusicBeatState
|
|||||||
|
|
||||||
blackBorder.alpha = 0.3;
|
blackBorder.alpha = 0.3;
|
||||||
|
|
||||||
snapText = new FlxText(60,10,0,"Snap: 1/" + snap + " (Press Control to unsnap the cursor)\nAdd Notes: 1-8 (or click)\n", 14);
|
snapText = new FlxText(60,10,0,"Snap: 1/" + snap + " (Press SHIFT to unsnap the cursor)\nAdd Notes: 1-8 (or click)\nDiff: 0", 14);
|
||||||
snapText.scrollFactor.set();
|
snapText.scrollFactor.set();
|
||||||
|
|
||||||
gridBlackLine = new FlxSprite(gridBG.x + gridBG.width / 2).makeGraphic(2, Std.int(gridBG.height), FlxColor.BLACK);
|
gridBlackLine = new FlxSprite(gridBG.x + gridBG.width / 2).makeGraphic(2, Std.int(gridBG.height), FlxColor.BLACK);
|
||||||
@ -309,10 +309,10 @@ class ChartingState extends MusicBeatState
|
|||||||
shiftNotes(Std.int(stepperShiftNoteDial.value),Std.int(stepperShiftNoteDialstep.value),Std.int(stepperShiftNoteDialms.value));
|
shiftNotes(Std.int(stepperShiftNoteDial.value),Std.int(stepperShiftNoteDialstep.value),Std.int(stepperShiftNoteDialms.value));
|
||||||
});
|
});
|
||||||
|
|
||||||
var characters:Array<String> = CoolUtil.coolTextFile(Paths.txt('characterList'));
|
var characters:Array<String> = CoolUtil.coolTextFile(Paths.txt('data/characterList'));
|
||||||
var gfVersions:Array<String> = CoolUtil.coolTextFile(Paths.txt('gfVersionList'));
|
var gfVersions:Array<String> = CoolUtil.coolTextFile(Paths.txt('data/gfVersionList'));
|
||||||
var stages:Array<String> = CoolUtil.coolTextFile(Paths.txt('stageList'));
|
var stages:Array<String> = CoolUtil.coolTextFile(Paths.txt('data/stageList'));
|
||||||
var noteStyles:Array<String> = CoolUtil.coolTextFile(Paths.txt('noteStyleList'));
|
var noteStyles:Array<String> = CoolUtil.coolTextFile(Paths.txt('data/noteStyleList'));
|
||||||
|
|
||||||
var player1DropDown = new FlxUIDropDownMenu(10, 100, FlxUIDropDownMenu.makeStrIdLabelArray(characters, true), function(character:String)
|
var player1DropDown = new FlxUIDropDownMenu(10, 100, FlxUIDropDownMenu.makeStrIdLabelArray(characters, true), function(character:String)
|
||||||
{
|
{
|
||||||
@ -660,13 +660,15 @@ class ChartingState extends MusicBeatState
|
|||||||
}
|
}
|
||||||
|
|
||||||
var writingNotes:Bool = false;
|
var writingNotes:Bool = false;
|
||||||
var doSnapShit:Bool = true;
|
var doSnapShit:Bool = false;
|
||||||
|
|
||||||
|
public var diff:Float = 0;
|
||||||
|
|
||||||
override function update(elapsed:Float)
|
override function update(elapsed:Float)
|
||||||
{
|
{
|
||||||
updateHeads();
|
updateHeads();
|
||||||
|
|
||||||
snapText.text = "Snap: 1/" + snap + " (" + (doSnapShit ? "Control to disable" : "Snap Disabled, Control to renable") + ")\nAdd Notes: 1-8 (or click)\n";
|
snapText.text = "Snap: 1/" + snap + " (" + (doSnapShit ? "Shift to disable" : "Snap Disabled, Shift to renable. It's a bit buggy") + ")\nAdd Notes: 1-8 (or click)";
|
||||||
|
|
||||||
curStep = recalculateSteps();
|
curStep = recalculateSteps();
|
||||||
|
|
||||||
@ -679,7 +681,7 @@ class ChartingState extends MusicBeatState
|
|||||||
if (snap <= 1)
|
if (snap <= 1)
|
||||||
snap = 1;*/
|
snap = 1;*/
|
||||||
|
|
||||||
if (FlxG.keys.justPressed.CONTROL)
|
if (FlxG.keys.justPressed.SHIFT)
|
||||||
doSnapShit = !doSnapShit;
|
doSnapShit = !doSnapShit;
|
||||||
|
|
||||||
Conductor.songPosition = FlxG.sound.music.time;
|
Conductor.songPosition = FlxG.sound.music.time;
|
||||||
@ -959,17 +961,30 @@ class ChartingState extends MusicBeatState
|
|||||||
vocals.pause();
|
vocals.pause();
|
||||||
claps.splice(0, claps.length);
|
claps.splice(0, claps.length);
|
||||||
|
|
||||||
var stepMs = curStep * Conductor.stepCrochet;
|
var amount = FlxG.mouse.wheel;
|
||||||
|
|
||||||
|
if(amount > 0 && strumLine.y < gridBG.y)
|
||||||
trace(Conductor.stepCrochet / snap);
|
amount = 0;
|
||||||
|
|
||||||
if (doSnapShit)
|
if (doSnapShit)
|
||||||
FlxG.sound.music.time = stepMs - (FlxG.mouse.wheel * Conductor.stepCrochet / snap);
|
{
|
||||||
else
|
var increase:Int = 0;
|
||||||
FlxG.sound.music.time -= (FlxG.mouse.wheel * Conductor.stepCrochet * 0.4);
|
|
||||||
trace(stepMs + " + " + Conductor.stepCrochet / snap + " -> " + FlxG.sound.music.time);
|
|
||||||
|
|
||||||
|
if (amount < 0)
|
||||||
|
increase = 1;
|
||||||
|
else
|
||||||
|
increase = -1;
|
||||||
|
|
||||||
|
trace(increase + " - " + curStep + " - " + (curStep + increase));
|
||||||
|
|
||||||
|
curStep += increase;
|
||||||
|
|
||||||
|
var stepMs = curStep * Conductor.stepCrochet;
|
||||||
|
|
||||||
|
FlxG.sound.music.time = stepMs;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
FlxG.sound.music.time -= (amount * Conductor.stepCrochet * 0.4);
|
||||||
vocals.time = FlxG.sound.music.time;
|
vocals.time = FlxG.sound.music.time;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1185,7 +1200,7 @@ class ChartingState extends MusicBeatState
|
|||||||
function updateGrid():Void
|
function updateGrid():Void
|
||||||
{
|
{
|
||||||
remove(gridBG);
|
remove(gridBG);
|
||||||
gridBG = FlxGridOverlay.create(GRID_SIZE, GRID_SIZE, GRID_SIZE * 8, GRID_SIZE * _song.notes[curSection].lengthInSteps);
|
gridBG = FlxGridOverlay.create(GRID_SIZE, GRID_SIZE, GRID_SIZE * 8, GRID_SIZE * 16);
|
||||||
add(gridBG);
|
add(gridBG);
|
||||||
|
|
||||||
remove(gridBlackLine);
|
remove(gridBlackLine);
|
||||||
@ -1240,6 +1255,7 @@ class ChartingState extends MusicBeatState
|
|||||||
var daSus = i[2];
|
var daSus = i[2];
|
||||||
|
|
||||||
var note:Note = new Note(daStrumTime, daNoteInfo % 4,null,false,true);
|
var note:Note = new Note(daStrumTime, daNoteInfo % 4,null,false,true);
|
||||||
|
note.rawNoteData = daNoteInfo;
|
||||||
note.sustainLength = daSus;
|
note.sustainLength = daSus;
|
||||||
note.setGraphicSize(GRID_SIZE, GRID_SIZE);
|
note.setGraphicSize(GRID_SIZE, GRID_SIZE);
|
||||||
note.updateHitbox();
|
note.updateHitbox();
|
||||||
@ -1259,6 +1275,7 @@ class ChartingState extends MusicBeatState
|
|||||||
curRenderedSustains.add(sustainVis);
|
curRenderedSustains.add(sustainVis);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function addSection(lengthInSteps:Int = 16):Void
|
private function addSection(lengthInSteps:Int = 16):Void
|
||||||
@ -1282,7 +1299,7 @@ class ChartingState extends MusicBeatState
|
|||||||
|
|
||||||
for (i in _song.notes[curSection].sectionNotes)
|
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];
|
curSelectedNote = _song.notes[curSection].sectionNotes[swagNum];
|
||||||
}
|
}
|
||||||
@ -1300,7 +1317,7 @@ class ChartingState extends MusicBeatState
|
|||||||
lastNote = note;
|
lastNote = note;
|
||||||
for (i in _song.notes[curSection].sectionNotes)
|
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);
|
_song.notes[curSection].sectionNotes.remove(i);
|
||||||
}
|
}
|
||||||
@ -1487,7 +1504,7 @@ class ChartingState extends MusicBeatState
|
|||||||
"song": _song
|
"song": _song
|
||||||
};
|
};
|
||||||
|
|
||||||
var data:String = Json.stringify(json);
|
var data:String = Json.stringify(json,null," ");
|
||||||
|
|
||||||
if ((data != null) && (data.length > 0))
|
if ((data != null) && (data.length > 0))
|
||||||
{
|
{
|
||||||
|
@ -28,6 +28,8 @@ class Conductor
|
|||||||
public static var safeZoneOffset:Float = Math.floor((safeFrames / 60) * 1000); // is calculated in create(), is safeFrames in milliseconds
|
public static var safeZoneOffset:Float = Math.floor((safeFrames / 60) * 1000); // is calculated in create(), is safeFrames in milliseconds
|
||||||
public static var timeScale:Float = Conductor.safeZoneOffset / 166;
|
public static var timeScale:Float = Conductor.safeZoneOffset / 166;
|
||||||
|
|
||||||
|
public static var lengthInSteps:Float = 0;
|
||||||
|
|
||||||
public static var bpmChangeMap:Array<BPMChangeEvent> = [];
|
public static var bpmChangeMap:Array<BPMChangeEvent> = [];
|
||||||
|
|
||||||
public function new()
|
public function new()
|
||||||
@ -74,5 +76,9 @@ class Conductor
|
|||||||
|
|
||||||
crochet = ((60 / bpm) * 1000);
|
crochet = ((60 / bpm) * 1000);
|
||||||
stepCrochet = crochet / 4;
|
stepCrochet = crochet / 4;
|
||||||
|
|
||||||
|
lengthInSteps = (FlxG.sound.music.length / stepCrochet);
|
||||||
|
|
||||||
|
trace("\nLength in in steps: " + lengthInSteps);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -155,7 +155,7 @@ class DialogueBox extends FlxSpriteGroup
|
|||||||
portraitLeft.visible = false;
|
portraitLeft.visible = false;
|
||||||
if (PlayState.SONG.song.toLowerCase() == 'thorns')
|
if (PlayState.SONG.song.toLowerCase() == 'thorns')
|
||||||
{
|
{
|
||||||
portraitLeft.color = FlxColor.BLACK;
|
portraitLeft.visible = false;
|
||||||
swagDialogue.color = FlxColor.WHITE;
|
swagDialogue.color = FlxColor.WHITE;
|
||||||
dropText.color = FlxColor.BLACK;
|
dropText.color = FlxColor.BLACK;
|
||||||
}
|
}
|
||||||
|
366
source/DiffCalc.hx
Normal file
366
source/DiffCalc.hx
Normal file
@ -0,0 +1,366 @@
|
|||||||
|
import openfl.system.System;
|
||||||
|
import flixel.math.FlxMath;
|
||||||
|
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 var scale = 3 * 1.8;
|
||||||
|
|
||||||
|
public static function CalculateDiff(song:SwagSong, ?accuracy:Float = .93)
|
||||||
|
{
|
||||||
|
trace('calcuilafjwaf');
|
||||||
|
// cleaned notes
|
||||||
|
var cleanedNotes:Array<SmallNote> = [];
|
||||||
|
|
||||||
|
if (song.notes == null)
|
||||||
|
return 0.0;
|
||||||
|
|
||||||
|
if (song.notes.length == 0)
|
||||||
|
return 0.0;
|
||||||
|
|
||||||
|
// find all of the notes
|
||||||
|
for(i in song.notes) // sections
|
||||||
|
{
|
||||||
|
for (ii in i.sectionNotes) // notes
|
||||||
|
{
|
||||||
|
var gottaHitNote:Bool = i.mustHitSection;
|
||||||
|
|
||||||
|
if (ii[1] > 3)
|
||||||
|
gottaHitNote = !i.mustHitSection;
|
||||||
|
|
||||||
|
if (gottaHitNote)
|
||||||
|
cleanedNotes.push(new SmallNote(ii[0],Math.floor(Math.abs(ii[1]))));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var handOne:Array<SmallNote> = [];
|
||||||
|
var handTwo:Array<SmallNote> = [];
|
||||||
|
|
||||||
|
cleanedNotes.sort((a, b) -> Std.int(a.strumTime - b.strumTime));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var firstNoteTime = cleanedNotes[0].strumTime;
|
||||||
|
|
||||||
|
// normalize the notes
|
||||||
|
|
||||||
|
for(i in cleanedNotes)
|
||||||
|
{
|
||||||
|
i.strumTime = (i.strumTime - firstNoteTime) * 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i in cleanedNotes)
|
||||||
|
{
|
||||||
|
switch(i.noteData)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
handOne.push(i);
|
||||||
|
case 1:
|
||||||
|
handOne.push(i);
|
||||||
|
case 2:
|
||||||
|
handTwo.push(i);
|
||||||
|
case 3:
|
||||||
|
handTwo.push(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// collect all of the notes in each col
|
||||||
|
|
||||||
|
var leftHandCol:Array<Float> = []; // d 0
|
||||||
|
var leftMHandCol:Array<Float> = []; // f 1
|
||||||
|
var rightMHandCol:Array<Float> = []; // j 2
|
||||||
|
var rightHandCol:Array<Float> = []; // k 3
|
||||||
|
|
||||||
|
for(i in 0...handOne.length - 1)
|
||||||
|
{
|
||||||
|
if (handOne[i].noteData == 0)
|
||||||
|
leftHandCol.push(handOne[i].strumTime);
|
||||||
|
else
|
||||||
|
leftMHandCol.push(handOne[i].strumTime);
|
||||||
|
}
|
||||||
|
for(i in 0...handTwo.length - 1)
|
||||||
|
{
|
||||||
|
if (handTwo[i].noteData == 3)
|
||||||
|
rightHandCol.push(handTwo[i].strumTime);
|
||||||
|
else
|
||||||
|
rightMHandCol.push(handTwo[i].strumTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// length in segments of the song
|
||||||
|
var length = ((cleanedNotes[cleanedNotes.length - 1].strumTime / 1000) / 0.5);
|
||||||
|
|
||||||
|
// hackey way of creating a array with a length
|
||||||
|
var segmentsOne = new haxe.ds.Vector(Math.floor(length));
|
||||||
|
|
||||||
|
var segmentsTwo = new haxe.ds.Vector(Math.floor(length));
|
||||||
|
|
||||||
|
// set em all to array's (so no null's)
|
||||||
|
|
||||||
|
for(i in 0...segmentsOne.length)
|
||||||
|
segmentsOne[i] = new Array<SmallNote>();
|
||||||
|
for(i in 0...segmentsTwo.length)
|
||||||
|
segmentsTwo[i] = new Array<SmallNote>();
|
||||||
|
|
||||||
|
// algo loop
|
||||||
|
for(i in handOne)
|
||||||
|
{
|
||||||
|
var index = Std.int((((i.strumTime * 2) / 1000)));
|
||||||
|
if (index + 1 > length)
|
||||||
|
continue;
|
||||||
|
segmentsOne[index].push(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i in handTwo)
|
||||||
|
{
|
||||||
|
var index = Std.int((((i.strumTime * 2) / 1000)));
|
||||||
|
if (index + 1 > length)
|
||||||
|
continue;
|
||||||
|
segmentsTwo[index].push(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 0 intervals
|
||||||
|
/*for(i in 0...segmentsOne.length)
|
||||||
|
{
|
||||||
|
if (segmentsOne[i].length == 0)
|
||||||
|
segmentsOne[i] = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i in 0...segmentsTwo.length)
|
||||||
|
{
|
||||||
|
if (segmentsTwo[i].length == 0)
|
||||||
|
segmentsTwo[i] = null;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
// get nps for both hands
|
||||||
|
|
||||||
|
var hand_npsOne:Array<Float> = new Array<Float>();
|
||||||
|
var hand_npsTwo:Array<Float> = new Array<Float>();
|
||||||
|
|
||||||
|
for(i in segmentsOne)
|
||||||
|
{
|
||||||
|
if (i == null)
|
||||||
|
continue;
|
||||||
|
hand_npsOne.push(i.length * scale * 1.6);
|
||||||
|
}
|
||||||
|
for(i in segmentsTwo)
|
||||||
|
{
|
||||||
|
if (i == null)
|
||||||
|
continue;
|
||||||
|
hand_npsTwo.push(i.length * scale * 1.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
// get the diff vector's for all of the hands
|
||||||
|
|
||||||
|
var hand_diffOne:Array<Float> = new Array<Float>();
|
||||||
|
var hand_diffTwo:Array<Float> = new Array<Float>();
|
||||||
|
|
||||||
|
for(i in 0...segmentsOne.length)
|
||||||
|
{
|
||||||
|
var ve = segmentsOne[i];
|
||||||
|
if (ve == null)
|
||||||
|
continue;
|
||||||
|
var fuckYouOne:Array<SmallNote> = [];
|
||||||
|
var fuckYouTwo:Array<SmallNote> = [];
|
||||||
|
for(note in ve)
|
||||||
|
{
|
||||||
|
switch(note.noteData)
|
||||||
|
{
|
||||||
|
case 0: // fingie 1
|
||||||
|
fuckYouOne.push(note);
|
||||||
|
case 1: // fingie 2
|
||||||
|
fuckYouTwo.push(note);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var one = fingieCalc(fuckYouOne,leftHandCol);
|
||||||
|
var two = fingieCalc(fuckYouTwo,leftMHandCol);
|
||||||
|
|
||||||
|
|
||||||
|
var bigFuck = ((((one > two ? one : two) * 8) + (hand_npsOne[i] / scale) * 5) / 13) * scale;
|
||||||
|
|
||||||
|
//trace(bigFuck + " - hand one [" + i + "]");
|
||||||
|
|
||||||
|
|
||||||
|
hand_diffOne.push(bigFuck);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i in 0...segmentsTwo.length)
|
||||||
|
{
|
||||||
|
var ve = segmentsTwo[i];
|
||||||
|
if (ve == null)
|
||||||
|
continue;
|
||||||
|
var fuckYouOne:Array<SmallNote> = [];
|
||||||
|
var fuckYouTwo:Array<SmallNote> = [];
|
||||||
|
for(note in ve)
|
||||||
|
{
|
||||||
|
switch(note.noteData)
|
||||||
|
{
|
||||||
|
case 2: // fingie 1
|
||||||
|
fuckYouOne.push(note);
|
||||||
|
case 3: // fingie 2
|
||||||
|
fuckYouTwo.push(note);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var one = fingieCalc(fuckYouOne,rightMHandCol);
|
||||||
|
var two = fingieCalc(fuckYouTwo,rightHandCol);
|
||||||
|
|
||||||
|
var bigFuck = ((((one > two ? one : two) * 8) + (hand_npsTwo[i] / scale) * 5) / 13) * scale;
|
||||||
|
|
||||||
|
hand_diffTwo.push(bigFuck);
|
||||||
|
|
||||||
|
// trace(bigFuck + " - hand two [" + i + "]");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i in 0...4)
|
||||||
|
{
|
||||||
|
smoothBrain(hand_npsOne,0);
|
||||||
|
smoothBrain(hand_npsTwo,0);
|
||||||
|
|
||||||
|
smoothBrainTwo(hand_diffOne);
|
||||||
|
smoothBrainTwo(hand_diffTwo);
|
||||||
|
}
|
||||||
|
|
||||||
|
//trace(hand_diffOne);
|
||||||
|
//trace(hand_diffTwo);
|
||||||
|
|
||||||
|
//trace(hand_npsOne);
|
||||||
|
//trace(hand_npsTwo);
|
||||||
|
|
||||||
|
var point_npsOne:Array<Float> = new Array<Float>();
|
||||||
|
var point_npsTwo:Array<Float> = new Array<Float>();
|
||||||
|
|
||||||
|
for(i in segmentsOne)
|
||||||
|
{
|
||||||
|
if (i == null)
|
||||||
|
continue;
|
||||||
|
point_npsOne.push(i.length);
|
||||||
|
}
|
||||||
|
for(i in segmentsTwo)
|
||||||
|
{
|
||||||
|
if (i == null)
|
||||||
|
continue;
|
||||||
|
point_npsTwo.push(i.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
var maxPoints:Float = 0;
|
||||||
|
|
||||||
|
for(i in point_npsOne)
|
||||||
|
maxPoints += i;
|
||||||
|
for(i in point_npsTwo)
|
||||||
|
maxPoints += i;
|
||||||
|
|
||||||
|
if (accuracy > .965)
|
||||||
|
accuracy = .965;
|
||||||
|
|
||||||
|
return HelperFunctions.truncateFloat(chisel(accuracy,hand_diffOne,hand_diffTwo,point_npsOne,point_npsTwo,maxPoints),2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function chisel(scoreGoal:Float,diffOne:Array<Float>,diffTwo:Array<Float>,pointsOne:Array<Float>,pointsTwo:Array<Float>,maxPoints:Float)
|
||||||
|
{
|
||||||
|
var lowerBound:Float = 0;
|
||||||
|
var upperBound:Float = 100;
|
||||||
|
|
||||||
|
while(upperBound - lowerBound > 0.01)
|
||||||
|
{
|
||||||
|
var average:Float = (upperBound + lowerBound) / 2;
|
||||||
|
var amtOfPoints:Float = calcuate(average,diffOne,pointsOne) + calcuate(average,diffTwo,pointsTwo);
|
||||||
|
if (amtOfPoints / maxPoints < scoreGoal)
|
||||||
|
lowerBound = average;
|
||||||
|
else
|
||||||
|
upperBound = average;
|
||||||
|
|
||||||
|
}
|
||||||
|
return upperBound;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function calcuate(midPoint:Float,diff:Array<Float>,points:Array<Float>)
|
||||||
|
{
|
||||||
|
var output:Float = 0;
|
||||||
|
|
||||||
|
for (i in 0...diff.length)
|
||||||
|
{
|
||||||
|
var res = diff[i];
|
||||||
|
if (midPoint > res)
|
||||||
|
output += points[i];
|
||||||
|
else
|
||||||
|
output += points[i] * Math.pow(midPoint / res,1.2);
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function findStupid(strumTime:Float, array:Array<Float>)
|
||||||
|
{
|
||||||
|
for(i in 0...array.length)
|
||||||
|
if (array[i] == strumTime)
|
||||||
|
return i;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function fingieCalc(floats:Array<SmallNote>, columArray:Array<Float>):Float
|
||||||
|
{
|
||||||
|
var sum:Float = 0;
|
||||||
|
if (floats.length == 0)
|
||||||
|
return 0;
|
||||||
|
var startIndex = findStupid(floats[0].strumTime,columArray);
|
||||||
|
if (startIndex == -1)
|
||||||
|
return 0;
|
||||||
|
for(i in floats)
|
||||||
|
{
|
||||||
|
sum += columArray[startIndex + 1] - columArray[startIndex];
|
||||||
|
startIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sum == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return (1375 * (floats.length)) / sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
// based arrayer
|
||||||
|
// basicily smmoth the shit
|
||||||
|
public static function smoothBrain(npsVector:Array<Float>, weirdchamp:Float)
|
||||||
|
{
|
||||||
|
var floatOne = weirdchamp;
|
||||||
|
var floatTwo = weirdchamp;
|
||||||
|
|
||||||
|
for (i in 0...npsVector.length)
|
||||||
|
{
|
||||||
|
var result = npsVector[i];
|
||||||
|
|
||||||
|
var chunker = floatOne;
|
||||||
|
floatOne = floatTwo;
|
||||||
|
floatTwo = result;
|
||||||
|
|
||||||
|
npsVector[i] = (chunker + floatOne + floatTwo) / 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Smooth the shit but less
|
||||||
|
public static function smoothBrainTwo(diffVector:Array<Float>)
|
||||||
|
{
|
||||||
|
var floatZero:Float = 0;
|
||||||
|
|
||||||
|
for(i in 0...diffVector.length)
|
||||||
|
{
|
||||||
|
var result = diffVector[i];
|
||||||
|
|
||||||
|
var fuck = floatZero;
|
||||||
|
floatZero = result;
|
||||||
|
diffVector[i] = (fuck + floatZero) / 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package;
|
package;
|
||||||
|
|
||||||
|
import Song.SwagSong;
|
||||||
import flixel.input.gamepad.FlxGamepad;
|
import flixel.input.gamepad.FlxGamepad;
|
||||||
import flash.text.TextField;
|
import flash.text.TextField;
|
||||||
import flixel.FlxG;
|
import flixel.FlxG;
|
||||||
@ -29,6 +30,7 @@ class FreeplayState extends MusicBeatState
|
|||||||
var scoreText:FlxText;
|
var scoreText:FlxText;
|
||||||
var comboText:FlxText;
|
var comboText:FlxText;
|
||||||
var diffText:FlxText;
|
var diffText:FlxText;
|
||||||
|
var diffCalcText:FlxText;
|
||||||
var lerpScore:Int = 0;
|
var lerpScore:Int = 0;
|
||||||
var intendedScore:Int = 0;
|
var intendedScore:Int = 0;
|
||||||
var combo:String = '';
|
var combo:String = '';
|
||||||
@ -38,16 +40,48 @@ class FreeplayState extends MusicBeatState
|
|||||||
|
|
||||||
private var iconArray:Array<HealthIcon> = [];
|
private var iconArray:Array<HealthIcon> = [];
|
||||||
|
|
||||||
|
public static var songData:Map<String,Array<SwagSong>> = [];
|
||||||
|
|
||||||
|
public static function loadDiff(diff:Int, format:String, name:String, array:Array<SwagSong>)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
array.push(Song.loadFromJson(Highscore.formatSong(format, diff), name));
|
||||||
|
}
|
||||||
|
catch(ex)
|
||||||
|
{
|
||||||
|
// do nada
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override function create()
|
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)
|
for (i in 0...initSonglist.length)
|
||||||
{
|
{
|
||||||
var data:Array<String> = initSonglist[i].split(':');
|
var data:Array<String> = 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]);
|
||||||
|
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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//trace("\n" + diffList);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if (FlxG.sound.music != null)
|
if (FlxG.sound.music != null)
|
||||||
{
|
{
|
||||||
@ -101,7 +135,7 @@ class FreeplayState extends MusicBeatState
|
|||||||
scoreText.setFormat(Paths.font("vcr.ttf"), 32, FlxColor.WHITE, RIGHT);
|
scoreText.setFormat(Paths.font("vcr.ttf"), 32, FlxColor.WHITE, RIGHT);
|
||||||
// scoreText.alignment = 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;
|
scoreBG.alpha = 0.6;
|
||||||
add(scoreBG);
|
add(scoreBG);
|
||||||
|
|
||||||
@ -109,6 +143,10 @@ class FreeplayState extends MusicBeatState
|
|||||||
diffText.font = scoreText.font;
|
diffText.font = scoreText.font;
|
||||||
add(diffText);
|
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 = new FlxText(diffText.x + 100, diffText.y, 0, "", 24);
|
||||||
comboText.font = diffText.font;
|
comboText.font = diffText.font;
|
||||||
add(comboText);
|
add(comboText);
|
||||||
@ -238,14 +276,20 @@ class FreeplayState extends MusicBeatState
|
|||||||
case 'Dad-Battle': songFormat = 'Dadbattle';
|
case 'Dad-Battle': songFormat = 'Dadbattle';
|
||||||
case 'Philly-Nice': songFormat = 'Philly';
|
case 'Philly-Nice': songFormat = 'Philly';
|
||||||
}
|
}
|
||||||
|
var hmm;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
hmm = songData.get(songs[curSelected].songName)[curDifficulty];
|
||||||
|
if (hmm == null)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch(ex)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
trace(songs[curSelected].songName);
|
|
||||||
|
|
||||||
var poop:String = Highscore.formatSong(songFormat, curDifficulty);
|
PlayState.SONG = hmm;
|
||||||
|
|
||||||
trace(poop);
|
|
||||||
|
|
||||||
PlayState.SONG = Song.loadFromJson(poop, songs[curSelected].songName);
|
|
||||||
PlayState.isStoryMode = false;
|
PlayState.isStoryMode = false;
|
||||||
PlayState.storyDifficulty = curDifficulty;
|
PlayState.storyDifficulty = curDifficulty;
|
||||||
PlayState.storyWeek = songs[curSelected].week;
|
PlayState.storyWeek = songs[curSelected].week;
|
||||||
@ -274,7 +318,7 @@ class FreeplayState extends MusicBeatState
|
|||||||
intendedScore = Highscore.getScore(songHighscore, curDifficulty);
|
intendedScore = Highscore.getScore(songHighscore, curDifficulty);
|
||||||
combo = Highscore.getCombo(songHighscore, curDifficulty);
|
combo = Highscore.getCombo(songHighscore, curDifficulty);
|
||||||
#end
|
#end
|
||||||
|
diffCalcText.text = 'RATING: ${DiffCalc.CalculateDiff(songData.get(songs[curSelected].songName)[curDifficulty])}';
|
||||||
diffText.text = CoolUtil.difficultyFromInt(curDifficulty).toUpperCase();
|
diffText.text = CoolUtil.difficultyFromInt(curDifficulty).toUpperCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -310,10 +354,22 @@ class FreeplayState extends MusicBeatState
|
|||||||
// lerpScore = 0;
|
// lerpScore = 0;
|
||||||
#end
|
#end
|
||||||
|
|
||||||
|
diffCalcText.text = 'RATING: ${DiffCalc.CalculateDiff(songData.get(songs[curSelected].songName)[curDifficulty])}';
|
||||||
|
|
||||||
#if PRELOAD_ALL
|
#if PRELOAD_ALL
|
||||||
FlxG.sound.playMusic(Paths.inst(songs[curSelected].songName), 0);
|
FlxG.sound.playMusic(Paths.inst(songs[curSelected].songName), 0);
|
||||||
#end
|
#end
|
||||||
|
|
||||||
|
var hmm;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
hmm = songData.get(songs[curSelected].songName)[curDifficulty];
|
||||||
|
if (hmm != null)
|
||||||
|
Conductor.changeBPM(hmm.bpm);
|
||||||
|
}
|
||||||
|
catch(ex)
|
||||||
|
{}
|
||||||
|
|
||||||
var bullShit:Int = 0;
|
var bullShit:Int = 0;
|
||||||
|
|
||||||
for (i in 0...iconArray.length)
|
for (i in 0...iconArray.length)
|
||||||
|
@ -6,6 +6,9 @@ class KadeEngineData
|
|||||||
{
|
{
|
||||||
public static function initSave()
|
public static function initSave()
|
||||||
{
|
{
|
||||||
|
if (FlxG.save.data.weekUnlocked == null)
|
||||||
|
FlxG.save.data.weekUnlocked = 7;
|
||||||
|
|
||||||
if (FlxG.save.data.newInput == null)
|
if (FlxG.save.data.newInput == null)
|
||||||
FlxG.save.data.newInput = true;
|
FlxG.save.data.newInput = true;
|
||||||
|
|
||||||
@ -94,6 +97,9 @@ class KadeEngineData
|
|||||||
if (FlxG.save.data.optimize == null)
|
if (FlxG.save.data.optimize == null)
|
||||||
FlxG.save.data.optimize = false;
|
FlxG.save.data.optimize = false;
|
||||||
|
|
||||||
|
if (FlxG.save.data.cacheImages == null)
|
||||||
|
FlxG.save.data.cacheImages = false;
|
||||||
|
|
||||||
var gamepad:FlxGamepad = FlxG.gamepads.lastActive;
|
var gamepad:FlxGamepad = FlxG.gamepads.lastActive;
|
||||||
|
|
||||||
KeyBinds.gamepad = gamepad != null;
|
KeyBinds.gamepad = gamepad != null;
|
||||||
|
@ -320,7 +320,7 @@ class KeyBindMenu extends FlxSubState
|
|||||||
|
|
||||||
var shouldReturn:Bool = true;
|
var shouldReturn:Bool = true;
|
||||||
|
|
||||||
var notAllowed:Array<String> = ["START", "RIGHT_TRIGGER", "LEFT_TRIGGER"];
|
var notAllowed:Array<String> = ["START"];
|
||||||
|
|
||||||
for(x in 0...gpKeys.length)
|
for(x in 0...gpKeys.length)
|
||||||
{
|
{
|
||||||
|
@ -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 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
|
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.
|
// You can pretty much ignore everything from here on - your code should go in your states.
|
||||||
|
|
||||||
|
@ -250,7 +250,7 @@ class ModchartState
|
|||||||
PlayState.instance.removeObject(PlayState.boyfriend);
|
PlayState.instance.removeObject(PlayState.boyfriend);
|
||||||
PlayState.boyfriend = new Boyfriend(oldboyfriendx, oldboyfriendy, id);
|
PlayState.boyfriend = new Boyfriend(oldboyfriendx, oldboyfriendy, id);
|
||||||
PlayState.instance.addObject(PlayState.boyfriend);
|
PlayState.instance.addObject(PlayState.boyfriend);
|
||||||
PlayState.instance.iconP2.animation.play(id);
|
PlayState.instance.iconP1.animation.play(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
function makeAnimatedLuaSprite(spritePath:String,names:Array<String>,prefixes:Array<String>,startAnim:String, id:String)
|
function makeAnimatedLuaSprite(spritePath:String,names:Array<String>,prefixes:Array<String>,startAnim:String, id:String)
|
||||||
|
@ -19,6 +19,7 @@ class Note extends FlxSprite
|
|||||||
|
|
||||||
public var mustPress:Bool = false;
|
public var mustPress:Bool = false;
|
||||||
public var noteData:Int = 0;
|
public var noteData:Int = 0;
|
||||||
|
public var rawNoteData:Int = 0;
|
||||||
public var canBeHit:Bool = false;
|
public var canBeHit:Bool = false;
|
||||||
public var tooLate:Bool = false;
|
public var tooLate:Bool = false;
|
||||||
public var wasGoodHit:Bool = false;
|
public var wasGoodHit:Bool = false;
|
||||||
@ -37,6 +38,8 @@ class Note extends FlxSprite
|
|||||||
|
|
||||||
public var rating:String = "shit";
|
public var rating:String = "shit";
|
||||||
|
|
||||||
|
public var dataColor:Array<String> = ['purple', 'blue', 'green', 'red'];
|
||||||
|
|
||||||
public function new(strumTime:Float, noteData:Int, ?prevNote:Note, ?sustainNote:Bool = false, ?inCharter:Bool = false)
|
public function new(strumTime:Float, noteData:Int, ?prevNote:Note, ?sustainNote:Bool = false, ?inCharter:Bool = false)
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
@ -72,26 +75,15 @@ class Note extends FlxSprite
|
|||||||
switch (noteTypeCheck)
|
switch (noteTypeCheck)
|
||||||
{
|
{
|
||||||
case 'pixel':
|
case 'pixel':
|
||||||
loadGraphic(Paths.image('weeb/pixelUI/arrows-pixels','week6'), true, 17, 17);
|
loadGraphic(Paths.image('weeb/pixelUI/arrows-pixels', 'week6'), true, 17, 17);
|
||||||
|
|
||||||
animation.add('greenScroll', [6]);
|
|
||||||
animation.add('redScroll', [7]);
|
|
||||||
animation.add('blueScroll', [5]);
|
|
||||||
animation.add('purpleScroll', [4]);
|
|
||||||
|
|
||||||
if (isSustainNote)
|
if (isSustainNote)
|
||||||
|
loadGraphic(Paths.image('weeb/pixelUI/arrowEnds', 'week6'), true, 7, 6);
|
||||||
|
|
||||||
|
for (i in 0...4)
|
||||||
{
|
{
|
||||||
loadGraphic(Paths.image('weeb/pixelUI/arrowEnds','week6'), true, 7, 6);
|
animation.add(dataColor[i] + 'Scroll', [i + 4]); // Normal notes
|
||||||
|
animation.add(dataColor[i] + 'hold', [i]); // Holds
|
||||||
animation.add('purpleholdend', [4]);
|
animation.add(dataColor[i] + 'holdend', [i + 4]); // Tails
|
||||||
animation.add('greenholdend', [6]);
|
|
||||||
animation.add('redholdend', [7]);
|
|
||||||
animation.add('blueholdend', [5]);
|
|
||||||
|
|
||||||
animation.add('purplehold', [0]);
|
|
||||||
animation.add('greenhold', [2]);
|
|
||||||
animation.add('redhold', [3]);
|
|
||||||
animation.add('bluehold', [1]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setGraphicSize(Std.int(width * PlayState.daPixelZoom));
|
setGraphicSize(Std.int(width * PlayState.daPixelZoom));
|
||||||
@ -99,47 +91,27 @@ class Note extends FlxSprite
|
|||||||
default:
|
default:
|
||||||
frames = Paths.getSparrowAtlas('NOTE_assets');
|
frames = Paths.getSparrowAtlas('NOTE_assets');
|
||||||
|
|
||||||
animation.addByPrefix('greenScroll', 'green instance 1');
|
for (i in 0...4)
|
||||||
animation.addByPrefix('redScroll', 'red instance 1');
|
{
|
||||||
animation.addByPrefix('blueScroll', 'blue instance 1');
|
animation.addByPrefix(dataColor[i] + 'Scroll', dataColor[i] + ' alone'); // Normal notes
|
||||||
animation.addByPrefix('purpleScroll', 'purple instance 1');
|
animation.addByPrefix(dataColor[i] + 'hold', dataColor[i] + ' hold'); // Hold
|
||||||
|
animation.addByPrefix(dataColor[i] + 'holdend', dataColor[i] + ' tail'); // Tails
|
||||||
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('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');
|
|
||||||
|
|
||||||
setGraphicSize(Std.int(width * 0.7));
|
setGraphicSize(Std.int(width * 0.7));
|
||||||
updateHitbox();
|
updateHitbox();
|
||||||
antialiasing = true;
|
antialiasing = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (noteData)
|
x += swagWidth * noteData;
|
||||||
{
|
animation.play(dataColor[noteData] + 'Scroll');
|
||||||
case 0:
|
|
||||||
x += swagWidth * 0;
|
|
||||||
animation.play('purpleScroll');
|
|
||||||
case 1:
|
|
||||||
x += swagWidth * 1;
|
|
||||||
animation.play('blueScroll');
|
|
||||||
case 2:
|
|
||||||
x += swagWidth * 2;
|
|
||||||
animation.play('greenScroll');
|
|
||||||
case 3:
|
|
||||||
x += swagWidth * 3;
|
|
||||||
animation.play('redScroll');
|
|
||||||
}
|
|
||||||
|
|
||||||
// trace(prevNote);
|
// trace(prevNote);
|
||||||
|
|
||||||
// we make sure its downscroll and its a SUSTAIN NOTE (aka a trail, not a note)
|
// we make sure its downscroll and its a SUSTAIN NOTE (aka a trail, not a note)
|
||||||
// and flip it so it doesn't look weird.
|
// and flip it so it doesn't look weird.
|
||||||
// THIS DOESN'T FUCKING FLIP THE NOTE, CONTRIBUTERS DON'T JUST COMMENT THIS OUT JESUS
|
// THIS DOESN'T FUCKING FLIP THE NOTE, CONTRIBUTERS DON'T JUST COMMENT THIS OUT JESUS
|
||||||
|
// then what is this lol
|
||||||
if (FlxG.save.data.downscroll && sustainNote)
|
if (FlxG.save.data.downscroll && sustainNote)
|
||||||
flipY = true;
|
flipY = true;
|
||||||
|
|
||||||
@ -150,39 +122,18 @@ class Note extends FlxSprite
|
|||||||
|
|
||||||
x += width / 2;
|
x += width / 2;
|
||||||
|
|
||||||
switch (noteData)
|
animation.play(dataColor[noteData] + 'holdend');
|
||||||
{
|
|
||||||
case 2:
|
|
||||||
animation.play('greenholdend');
|
|
||||||
case 3:
|
|
||||||
animation.play('redholdend');
|
|
||||||
case 1:
|
|
||||||
animation.play('blueholdend');
|
|
||||||
case 0:
|
|
||||||
animation.play('purpleholdend');
|
|
||||||
}
|
|
||||||
|
|
||||||
updateHitbox();
|
updateHitbox();
|
||||||
|
|
||||||
x -= width / 2;
|
x -= width / 2;
|
||||||
|
|
||||||
if (PlayState.curStage.startsWith('school'))
|
if (noteTypeCheck == 'pixel')
|
||||||
x += 30;
|
x += 30;
|
||||||
|
|
||||||
if (prevNote.isSustainNote)
|
if (prevNote.isSustainNote)
|
||||||
{
|
{
|
||||||
switch (prevNote.noteData)
|
prevNote.animation.play(dataColor[prevNote.noteData] + 'hold');
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
prevNote.animation.play('purplehold');
|
|
||||||
case 1:
|
|
||||||
prevNote.animation.play('bluehold');
|
|
||||||
case 2:
|
|
||||||
prevNote.animation.play('greenhold');
|
|
||||||
case 3:
|
|
||||||
prevNote.animation.play('redhold');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(FlxG.save.data.scrollSpeed != 1)
|
if(FlxG.save.data.scrollSpeed != 1)
|
||||||
prevNote.scale.y *= Conductor.stepCrochet / 100 * 1.5 * FlxG.save.data.scrollSpeed;
|
prevNote.scale.y *= Conductor.stepCrochet / 100 * 1.5 * FlxG.save.data.scrollSpeed;
|
||||||
|
@ -119,6 +119,29 @@ class CpuStrums extends Option
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class GraphicLoading extends Option
|
||||||
|
{
|
||||||
|
public function new(desc:String)
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
description = desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override function press():Bool
|
||||||
|
{
|
||||||
|
FlxG.save.data.cacheImages = !FlxG.save.data.cacheImages;
|
||||||
|
|
||||||
|
display = updateDisplay();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private override function updateDisplay():String
|
||||||
|
{
|
||||||
|
return FlxG.save.data.cacheImages ? "Preload Characters" : "Do not Preload Characters";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
class DownscrollOption extends Option
|
class DownscrollOption extends Option
|
||||||
{
|
{
|
||||||
public function new(desc:String)
|
public function new(desc:String)
|
||||||
@ -698,3 +721,127 @@ class CamZoomOption extends Option
|
|||||||
return "Camera Zoom " + (!FlxG.save.data.camzoom ? "off" : "on");
|
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";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -42,18 +42,16 @@ class OptionsMenu extends MusicBeatState
|
|||||||
new OptionCategory("Appearance", [
|
new OptionCategory("Appearance", [
|
||||||
new DistractionsAndEffectsOption("Toggle stage distractions that can hinder your gameplay."),
|
new DistractionsAndEffectsOption("Toggle stage distractions that can hinder your gameplay."),
|
||||||
new CamZoomOption("Toggle the camera zoom in-game."),
|
new CamZoomOption("Toggle the camera zoom in-game."),
|
||||||
#if desktop
|
|
||||||
new RainbowFPSOption("Make the FPS Counter Rainbow"),
|
new RainbowFPSOption("Make the FPS Counter Rainbow"),
|
||||||
new AccuracyOption("Display accuracy information."),
|
new AccuracyOption("Display accuracy information."),
|
||||||
new NPSDisplayOption("Shows your current Notes Per Second."),
|
new NPSDisplayOption("Shows your current Notes Per Second."),
|
||||||
new SongPositionOption("Show the songs current position (as a bar)"),
|
new SongPositionOption("Show the songs current position (as a bar)"),
|
||||||
new CpuStrums("CPU's strumline lights up when a note hits it."),
|
new CpuStrums("CPU's strumline lights up when a note hits it."),
|
||||||
#end
|
|
||||||
]),
|
]),
|
||||||
|
|
||||||
new OptionCategory("Misc", [
|
new OptionCategory("Misc", [
|
||||||
#if desktop
|
|
||||||
new FPSOption("Toggle the FPS Counter"),
|
new FPSOption("Toggle the FPS Counter"),
|
||||||
|
#if desktop
|
||||||
new ReplayOption("View replays"),
|
new ReplayOption("View replays"),
|
||||||
#end
|
#end
|
||||||
new FlashingLightsOption("Toggle flashing lights that can cause epileptic seizures and strain."),
|
new FlashingLightsOption("Toggle flashing lights that can cause epileptic seizures and strain."),
|
||||||
@ -61,7 +59,14 @@ class OptionsMenu extends MusicBeatState
|
|||||||
new ScoreScreen("Show the score screen after the end of a song"),
|
new ScoreScreen("Show the score screen after the end of a song"),
|
||||||
new ShowInput("Display every single input in the score screen."),
|
new ShowInput("Display every single input in the score screen."),
|
||||||
new Optimization("No backgrounds, no characters, centered notes, no player 2."),
|
new Optimization("No backgrounds, no characters, centered notes, no player 2."),
|
||||||
new BotPlay("Showcase your charts and mods with autoplay."),
|
new GraphicLoading("On startup, cache every character. Significantly decrease load times. (HIGH MEMORY)"),
|
||||||
|
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.")
|
||||||
])
|
])
|
||||||
|
|
||||||
];
|
];
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package;
|
package;
|
||||||
|
|
||||||
|
import openfl.utils.Assets;
|
||||||
|
import flixel.graphics.FlxGraphic;
|
||||||
|
import flixel.system.FlxAssets.FlxGraphicAsset;
|
||||||
import flixel.FlxG;
|
import flixel.FlxG;
|
||||||
import flixel.graphics.frames.FlxAtlasFrames;
|
import flixel.graphics.frames.FlxAtlasFrames;
|
||||||
import openfl.utils.AssetType;
|
import openfl.utils.AssetType;
|
||||||
@ -67,7 +70,7 @@ class Paths
|
|||||||
|
|
||||||
inline static public function txt(key:String, ?library:String)
|
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)
|
inline static public function xml(key:String, ?library:String)
|
||||||
@ -125,13 +128,30 @@ class Paths
|
|||||||
return 'assets/fonts/$key';
|
return 'assets/fonts/$key';
|
||||||
}
|
}
|
||||||
|
|
||||||
inline static public function getSparrowAtlas(key:String, ?library:String)
|
inline static public function getSparrowAtlas(key:String, ?library:String, ?isCharacter:Bool = false)
|
||||||
{
|
{
|
||||||
|
if (isCharacter)
|
||||||
|
if (FlxG.save.data.cacheImages)
|
||||||
|
return FlxAtlasFrames.fromSparrow(imageCached(key), file('images/characters/$key.xml', library));
|
||||||
|
else
|
||||||
|
return FlxAtlasFrames.fromSparrow(image('characters/$key'), file('images/characters/$key.xml'));
|
||||||
return FlxAtlasFrames.fromSparrow(image(key, library), file('images/$key.xml', library));
|
return FlxAtlasFrames.fromSparrow(image(key, library), file('images/$key.xml', library));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline static public function getPackerAtlas(key:String, ?library:String)
|
inline static public function imageCached(key:String):FlxGraphic
|
||||||
{
|
{
|
||||||
|
var data = Caching.bitmapData.get(key);
|
||||||
|
trace('finding ${key} - ${data.bitmap}');
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static public function getPackerAtlas(key:String, ?library:String, ?isCharacter:Bool = false)
|
||||||
|
{
|
||||||
|
if (isCharacter)
|
||||||
|
if (FlxG.save.data.cacheImages)
|
||||||
|
return FlxAtlasFrames.fromSpriteSheetPacker(imageCached(key), file('images/$key.txt', library));
|
||||||
|
else
|
||||||
|
return FlxAtlasFrames.fromSpriteSheetPacker(image('characters/$key'), file('images/characters/$key.txt'));
|
||||||
return FlxAtlasFrames.fromSpriteSheetPacker(image(key, library), file('images/$key.txt', library));
|
return FlxAtlasFrames.fromSpriteSheetPacker(image(key, library), file('images/$key.txt', library));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -240,7 +240,10 @@ class PauseSubState extends MusicBeatSubstate
|
|||||||
if (FlxG.save.data.fpsCap > 290)
|
if (FlxG.save.data.fpsCap > 290)
|
||||||
(cast (Lib.current.getChildAt(0), Main)).setFPSCap(290);
|
(cast (Lib.current.getChildAt(0), Main)).setFPSCap(290);
|
||||||
|
|
||||||
FlxG.switchState(new MainMenuState());
|
if (PlayState.isStoryMode)
|
||||||
|
FlxG.switchState(new StoryMenuState());
|
||||||
|
else
|
||||||
|
FlxG.switchState(new FreeplayState());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,6 +228,9 @@ class PlayState extends MusicBeatState
|
|||||||
|
|
||||||
private var executeModchart = false;
|
private var executeModchart = false;
|
||||||
|
|
||||||
|
// Animation common suffixes
|
||||||
|
private var dataSuffix:Array<String> = ['LEFT', 'DOWN', 'UP', 'RIGHT'];
|
||||||
|
|
||||||
// API stuff
|
// API stuff
|
||||||
|
|
||||||
public function addObject(object:FlxBasic) { add(object); }
|
public function addObject(object:FlxBasic) { add(object); }
|
||||||
@ -253,6 +256,8 @@ class PlayState extends MusicBeatState
|
|||||||
}
|
}
|
||||||
misses = 0;
|
misses = 0;
|
||||||
|
|
||||||
|
|
||||||
|
highestCombo = 0;
|
||||||
repPresses = 0;
|
repPresses = 0;
|
||||||
repReleases = 0;
|
repReleases = 0;
|
||||||
|
|
||||||
@ -360,11 +365,11 @@ class PlayState extends MusicBeatState
|
|||||||
"Only then I will even CONSIDER letting you\ndate my daughter!"
|
"Only then I will even CONSIDER letting you\ndate my daughter!"
|
||||||
];
|
];
|
||||||
case 'senpai':
|
case 'senpai':
|
||||||
dialogue = CoolUtil.coolTextFile(Paths.txt('senpai/senpaiDialogue'));
|
dialogue = CoolUtil.coolTextFile(Paths.txt('data/senpai/senpaiDialogue'));
|
||||||
case 'roses':
|
case 'roses':
|
||||||
dialogue = CoolUtil.coolTextFile(Paths.txt('roses/rosesDialogue'));
|
dialogue = CoolUtil.coolTextFile(Paths.txt('data/roses/rosesDialogue'));
|
||||||
case 'thorns':
|
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
|
//defaults if no stage was found in chart
|
||||||
@ -830,6 +835,15 @@ class PlayState extends MusicBeatState
|
|||||||
dad.y += 360;
|
dad.y += 360;
|
||||||
camPos.set(dad.getGraphicMidpoint().x + 300, dad.getGraphicMidpoint().y);
|
camPos.set(dad.getGraphicMidpoint().x + 300, dad.getGraphicMidpoint().y);
|
||||||
case 'spirit':
|
case 'spirit':
|
||||||
|
if(FlxG.save.data.distractions){
|
||||||
|
// trailArea.scrollFactor.set();
|
||||||
|
var evilTrail = new FlxTrail(dad, null, 4, 24, 0.3, 0.069);
|
||||||
|
// evilTrail.changeValuesEnabled(false, false, false, false);
|
||||||
|
// evilTrail.changeGraphic()
|
||||||
|
add(evilTrail);
|
||||||
|
// evilTrail.scrollFactor.set(1.1, 1.1);
|
||||||
|
}
|
||||||
|
|
||||||
dad.x -= 150;
|
dad.x -= 150;
|
||||||
dad.y += 100;
|
dad.y += 100;
|
||||||
camPos.set(dad.getGraphicMidpoint().x + 300, dad.getGraphicMidpoint().y);
|
camPos.set(dad.getGraphicMidpoint().x + 300, dad.getGraphicMidpoint().y);
|
||||||
@ -862,16 +876,6 @@ class PlayState extends MusicBeatState
|
|||||||
gf.x += 180;
|
gf.x += 180;
|
||||||
gf.y += 300;
|
gf.y += 300;
|
||||||
case 'schoolEvil':
|
case 'schoolEvil':
|
||||||
if(FlxG.save.data.distractions){
|
|
||||||
// trailArea.scrollFactor.set();
|
|
||||||
var evilTrail = new FlxTrail(dad, null, 4, 24, 0.3, 0.069);
|
|
||||||
// evilTrail.changeValuesEnabled(false, false, false, false);
|
|
||||||
// evilTrail.changeGraphic()
|
|
||||||
add(evilTrail);
|
|
||||||
// evilTrail.scrollFactor.set(1.1, 1.1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
boyfriend.x += 200;
|
boyfriend.x += 200;
|
||||||
boyfriend.y += 220;
|
boyfriend.y += 220;
|
||||||
gf.x += 180;
|
gf.x += 180;
|
||||||
@ -1127,6 +1131,7 @@ class PlayState extends MusicBeatState
|
|||||||
rep = new Replay("na");
|
rep = new Replay("na");
|
||||||
|
|
||||||
FlxG.stage.addEventListener(KeyboardEvent.KEY_DOWN,handleInput);
|
FlxG.stage.addEventListener(KeyboardEvent.KEY_DOWN,handleInput);
|
||||||
|
FlxG.stage.addEventListener(KeyboardEvent.KEY_UP,releaseInput);
|
||||||
|
|
||||||
super.create();
|
super.create();
|
||||||
}
|
}
|
||||||
@ -1366,6 +1371,41 @@ class PlayState extends MusicBeatState
|
|||||||
return null;
|
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<String> = [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
|
private function handleInput(evt:KeyboardEvent):Void { // this actually handles press inputs
|
||||||
|
|
||||||
if (PlayStateChangeables.botPlay || loadRep || paused)
|
if (PlayStateChangeables.botPlay || loadRep || paused)
|
||||||
@ -1399,15 +1439,16 @@ class PlayState extends MusicBeatState
|
|||||||
if (binds[i].toLowerCase() == key.toLowerCase())
|
if (binds[i].toLowerCase() == key.toLowerCase())
|
||||||
data = i;
|
data = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (evt.keyLocation == KeyLocation.NUM_PAD)
|
|
||||||
{
|
|
||||||
trace(String.fromCharCode(evt.charCode) + " " + key);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data == -1)
|
if (data == -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (keys[data])
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
keys[data] = true;
|
||||||
|
|
||||||
var ana = new Ana(Conductor.songPosition, null, false, "miss", data);
|
var ana = new Ana(Conductor.songPosition, null, false, "miss", data);
|
||||||
|
|
||||||
var dataNotes = [];
|
var dataNotes = [];
|
||||||
@ -1422,14 +1463,43 @@ class PlayState extends MusicBeatState
|
|||||||
|
|
||||||
if (dataNotes.length != 0)
|
if (dataNotes.length != 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
var coolNote = dataNotes[0];
|
var coolNote = dataNotes[0];
|
||||||
|
|
||||||
|
if (dataNotes.length > 1) // stacked notes or really close ones
|
||||||
|
{
|
||||||
|
for(i in 0...dataNotes.length)
|
||||||
|
{
|
||||||
|
if (i == 0) // skip the first note
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var note = dataNotes[i];
|
||||||
|
|
||||||
|
if (!note.isSustainNote && (note.strumTime - coolNote.strumTime) < 2)
|
||||||
|
{
|
||||||
|
trace('found a stacked/really close note ' + (note.strumTime - coolNote.strumTime));
|
||||||
|
// just fuckin remove it since it's a stacked note and shouldn't be there
|
||||||
|
note.kill();
|
||||||
|
notes.remove(note, true);
|
||||||
|
note.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
goodNoteHit(coolNote);
|
goodNoteHit(coolNote);
|
||||||
var noteDiff:Float = -(coolNote.strumTime - Conductor.songPosition);
|
var noteDiff:Float = -(coolNote.strumTime - Conductor.songPosition);
|
||||||
ana.hit = true;
|
ana.hit = true;
|
||||||
ana.hitJudge = Ratings.CalculateRating(noteDiff, Math.floor((PlayStateChangeables.safeFrames / 60) * 1000));
|
ana.hitJudge = Ratings.CalculateRating(noteDiff, Math.floor((PlayStateChangeables.safeFrames / 60) * 1000));
|
||||||
ana.nearestNote = [coolNote.strumTime,coolNote.noteData,coolNote.sustainLength];
|
ana.nearestNote = [coolNote.strumTime,coolNote.noteData,coolNote.sustainLength];
|
||||||
}
|
}
|
||||||
|
else if (!FlxG.save.data.ghost)
|
||||||
|
{
|
||||||
|
noteMiss(data,null);
|
||||||
|
ana.hit = false;
|
||||||
|
ana.hitJudge = "shit";
|
||||||
|
ana.nearestNote = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1592,6 +1662,7 @@ class PlayState extends MusicBeatState
|
|||||||
swagNote.sustainLength = songNotes[2];
|
swagNote.sustainLength = songNotes[2];
|
||||||
swagNote.scrollFactor.set(0, 0);
|
swagNote.scrollFactor.set(0, 0);
|
||||||
|
|
||||||
|
|
||||||
var susLength:Float = swagNote.sustainLength;
|
var susLength:Float = swagNote.sustainLength;
|
||||||
|
|
||||||
susLength = susLength / Conductor.stepCrochet;
|
susLength = susLength / Conductor.stepCrochet;
|
||||||
@ -1695,70 +1766,70 @@ class PlayState extends MusicBeatState
|
|||||||
|
|
||||||
case 'normal':
|
case 'normal':
|
||||||
babyArrow.frames = Paths.getSparrowAtlas('NOTE_assets');
|
babyArrow.frames = Paths.getSparrowAtlas('NOTE_assets');
|
||||||
babyArrow.animation.addByPrefix('green', 'arrow static instance 1');
|
babyArrow.animation.addByPrefix('green', 'arrowUP');
|
||||||
babyArrow.animation.addByPrefix('blue', 'arrow static instance 2');
|
babyArrow.animation.addByPrefix('blue', 'arrowDOWN');
|
||||||
babyArrow.animation.addByPrefix('purple', 'arrow static instance 3');
|
babyArrow.animation.addByPrefix('purple', 'arrowLEFT');
|
||||||
babyArrow.animation.addByPrefix('red', 'arrow static instance 4');
|
babyArrow.animation.addByPrefix('red', 'arrowRIGHT');
|
||||||
|
|
||||||
babyArrow.antialiasing = true;
|
babyArrow.antialiasing = true;
|
||||||
babyArrow.setGraphicSize(Std.int(babyArrow.width * 0.7));
|
babyArrow.setGraphicSize(Std.int(babyArrow.width * 0.7));
|
||||||
|
|
||||||
switch (Math.abs(i))
|
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:
|
case 2:
|
||||||
babyArrow.x += Note.swagWidth * 2;
|
babyArrow.x += Note.swagWidth * 2;
|
||||||
babyArrow.animation.addByPrefix('static', 'arrow static instance 4');
|
babyArrow.animation.addByPrefix('static', 'arrowUP');
|
||||||
babyArrow.animation.addByPrefix('pressed', 'up press instance 1', 24, false);
|
babyArrow.animation.addByPrefix('pressed', 'up press', 24, false);
|
||||||
babyArrow.animation.addByPrefix('confirm', 'up confirm instance 1', 24, false);
|
babyArrow.animation.addByPrefix('confirm', 'up confirm', 24, false);
|
||||||
case 3:
|
case 3:
|
||||||
babyArrow.x += Note.swagWidth * 3;
|
babyArrow.x += Note.swagWidth * 3;
|
||||||
babyArrow.animation.addByPrefix('static', 'arrow static instance 3');
|
babyArrow.animation.addByPrefix('static', 'arrowRIGHT');
|
||||||
babyArrow.animation.addByPrefix('pressed', 'right press instance 1', 24, false);
|
babyArrow.animation.addByPrefix('pressed', 'right press', 24, false);
|
||||||
babyArrow.animation.addByPrefix('confirm', 'right confirm instance 1', 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:
|
default:
|
||||||
babyArrow.frames = Paths.getSparrowAtlas('NOTE_assets');
|
babyArrow.frames = Paths.getSparrowAtlas('NOTE_assets');
|
||||||
babyArrow.animation.addByPrefix('green', 'arrow static instance 1');
|
babyArrow.animation.addByPrefix('green', 'arrowUP');
|
||||||
babyArrow.animation.addByPrefix('blue', 'arrow static instance 2');
|
babyArrow.animation.addByPrefix('blue', 'arrowDOWN');
|
||||||
babyArrow.animation.addByPrefix('purple', 'arrow static instance 3');
|
babyArrow.animation.addByPrefix('purple', 'arrowLEFT');
|
||||||
babyArrow.animation.addByPrefix('red', 'arrow static instance 4');
|
babyArrow.animation.addByPrefix('red', 'arrowRIGHT');
|
||||||
|
|
||||||
babyArrow.antialiasing = true;
|
babyArrow.antialiasing = true;
|
||||||
babyArrow.setGraphicSize(Std.int(babyArrow.width * 0.7));
|
babyArrow.setGraphicSize(Std.int(babyArrow.width * 0.7));
|
||||||
|
|
||||||
switch (Math.abs(i))
|
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:
|
case 2:
|
||||||
babyArrow.x += Note.swagWidth * 2;
|
babyArrow.x += Note.swagWidth * 2;
|
||||||
babyArrow.animation.addByPrefix('static', 'arrow static instance 4');
|
babyArrow.animation.addByPrefix('static', 'arrowUP');
|
||||||
babyArrow.animation.addByPrefix('pressed', 'up press instance 1', 24, false);
|
babyArrow.animation.addByPrefix('pressed', 'up press', 24, false);
|
||||||
babyArrow.animation.addByPrefix('confirm', 'up confirm instance 1', 24, false);
|
babyArrow.animation.addByPrefix('confirm', 'up confirm', 24, false);
|
||||||
case 3:
|
case 3:
|
||||||
babyArrow.x += Note.swagWidth * 3;
|
babyArrow.x += Note.swagWidth * 3;
|
||||||
babyArrow.animation.addByPrefix('static', 'arrow static instance 3');
|
babyArrow.animation.addByPrefix('static', 'arrowRIGHT');
|
||||||
babyArrow.animation.addByPrefix('pressed', 'right press instance 1', 24, false);
|
babyArrow.animation.addByPrefix('pressed', 'right press', 24, false);
|
||||||
babyArrow.animation.addByPrefix('confirm', 'right confirm instance 1', 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 +2110,7 @@ class PlayState extends MusicBeatState
|
|||||||
#end
|
#end
|
||||||
FlxG.switchState(new ChartingState());
|
FlxG.switchState(new ChartingState());
|
||||||
FlxG.stage.removeEventListener(KeyboardEvent.KEY_DOWN,handleInput);
|
FlxG.stage.removeEventListener(KeyboardEvent.KEY_DOWN,handleInput);
|
||||||
|
FlxG.stage.removeEventListener(KeyboardEvent.KEY_UP,releaseInput);
|
||||||
#if windows
|
#if windows
|
||||||
if (luaModchart != null)
|
if (luaModchart != null)
|
||||||
{
|
{
|
||||||
@ -2091,6 +2163,7 @@ class PlayState extends MusicBeatState
|
|||||||
|
|
||||||
FlxG.switchState(new AnimationDebug(SONG.player2));
|
FlxG.switchState(new AnimationDebug(SONG.player2));
|
||||||
FlxG.stage.removeEventListener(KeyboardEvent.KEY_DOWN,handleInput);
|
FlxG.stage.removeEventListener(KeyboardEvent.KEY_DOWN,handleInput);
|
||||||
|
FlxG.stage.removeEventListener(KeyboardEvent.KEY_UP,releaseInput);
|
||||||
#if windows
|
#if windows
|
||||||
if (luaModchart != null)
|
if (luaModchart != null)
|
||||||
{
|
{
|
||||||
@ -2104,6 +2177,7 @@ class PlayState extends MusicBeatState
|
|||||||
{
|
{
|
||||||
FlxG.switchState(new AnimationDebug(SONG.player1));
|
FlxG.switchState(new AnimationDebug(SONG.player1));
|
||||||
FlxG.stage.removeEventListener(KeyboardEvent.KEY_DOWN,handleInput);
|
FlxG.stage.removeEventListener(KeyboardEvent.KEY_DOWN,handleInput);
|
||||||
|
FlxG.stage.removeEventListener(KeyboardEvent.KEY_UP,releaseInput);
|
||||||
#if windows
|
#if windows
|
||||||
if (luaModchart != null)
|
if (luaModchart != null)
|
||||||
{
|
{
|
||||||
@ -2275,18 +2349,12 @@ class PlayState extends MusicBeatState
|
|||||||
|
|
||||||
switch (dad.curCharacter)
|
switch (dad.curCharacter)
|
||||||
{
|
{
|
||||||
case 'mom':
|
case 'mom' | 'mom-car':
|
||||||
camFollow.y = dad.getMidpoint().y;
|
camFollow.y = dad.getMidpoint().y;
|
||||||
case 'senpai':
|
case 'senpai' | 'senpai-angry':
|
||||||
camFollow.y = dad.getMidpoint().y - 430;
|
|
||||||
camFollow.x = dad.getMidpoint().x - 100;
|
|
||||||
case 'senpai-angry':
|
|
||||||
camFollow.y = dad.getMidpoint().y - 430;
|
camFollow.y = dad.getMidpoint().y - 430;
|
||||||
camFollow.x = dad.getMidpoint().x - 100;
|
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)
|
if (PlayState.SONG.notes[Std.int(curStep / 16)].mustHitSection && camFollow.x != boyfriend.getMidpoint().x - 100)
|
||||||
@ -2518,17 +2586,9 @@ class PlayState extends MusicBeatState
|
|||||||
altAnim = '-alt';
|
altAnim = '-alt';
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (Math.abs(daNote.noteData))
|
// Accessing the animation name directly to play it
|
||||||
{
|
var singData:Int = Std.int(Math.abs(daNote.noteData));
|
||||||
case 2:
|
dad.playAnim('sing' + dataSuffix[singData] + altAnim, true);
|
||||||
dad.playAnim('singUP' + altAnim, true);
|
|
||||||
case 3:
|
|
||||||
dad.playAnim('singRIGHT' + altAnim, true);
|
|
||||||
case 1:
|
|
||||||
dad.playAnim('singDOWN' + altAnim, true);
|
|
||||||
case 0:
|
|
||||||
dad.playAnim('singLEFT' + altAnim, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (FlxG.save.data.cpuStrums)
|
if (FlxG.save.data.cpuStrums)
|
||||||
{
|
{
|
||||||
@ -2645,7 +2705,7 @@ class PlayState extends MusicBeatState
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!inCutscene)
|
if (!inCutscene && songStarted)
|
||||||
keyShit();
|
keyShit();
|
||||||
|
|
||||||
|
|
||||||
@ -2658,6 +2718,7 @@ class PlayState extends MusicBeatState
|
|||||||
function endSong():Void
|
function endSong():Void
|
||||||
{
|
{
|
||||||
FlxG.stage.removeEventListener(KeyboardEvent.KEY_DOWN,handleInput);
|
FlxG.stage.removeEventListener(KeyboardEvent.KEY_DOWN,handleInput);
|
||||||
|
FlxG.stage.removeEventListener(KeyboardEvent.KEY_UP,releaseInput);
|
||||||
if (useVideo)
|
if (useVideo)
|
||||||
{
|
{
|
||||||
GlobalVideo.get().stop();
|
GlobalVideo.get().stop();
|
||||||
@ -2739,7 +2800,7 @@ class PlayState extends MusicBeatState
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
FlxG.sound.playMusic(Paths.music('freakyMenu'));
|
FlxG.sound.playMusic(Paths.music('freakyMenu'));
|
||||||
FlxG.switchState(new MainMenuState());
|
FlxG.switchState(new StoryMenuState());
|
||||||
}
|
}
|
||||||
|
|
||||||
#if windows
|
#if windows
|
||||||
@ -2750,17 +2811,13 @@ class PlayState extends MusicBeatState
|
|||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
|
||||||
// if ()
|
|
||||||
StoryMenuState.weekUnlocked[Std.int(Math.min(storyWeek + 1, StoryMenuState.weekUnlocked.length - 1))] = true;
|
|
||||||
|
|
||||||
if (SONG.validScore)
|
if (SONG.validScore)
|
||||||
{
|
{
|
||||||
NGio.unlockMedal(60961);
|
NGio.unlockMedal(60961);
|
||||||
Highscore.saveWeekScore(storyWeek, campaignScore, storyDifficulty);
|
Highscore.saveWeekScore(storyWeek, campaignScore, storyDifficulty);
|
||||||
}
|
}
|
||||||
|
|
||||||
FlxG.save.data.weekUnlocked = StoryMenuState.weekUnlocked;
|
StoryMenuState.unlockNextWeek(storyWeek);
|
||||||
FlxG.save.flush();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -3147,6 +3204,8 @@ class PlayState extends MusicBeatState
|
|||||||
};
|
};
|
||||||
#end
|
#end
|
||||||
|
|
||||||
|
var nonCpp = false;
|
||||||
|
|
||||||
|
|
||||||
// Prevent player input if botplay is on
|
// Prevent player input if botplay is on
|
||||||
if(PlayStateChangeables.botPlay)
|
if(PlayStateChangeables.botPlay)
|
||||||
@ -3156,6 +3215,10 @@ class PlayState extends MusicBeatState
|
|||||||
releaseArray = [false, false, false, false];
|
releaseArray = [false, false, false, false];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !cpp
|
||||||
|
nonCpp = true;
|
||||||
|
#end
|
||||||
|
|
||||||
var anas:Array<Ana> = [null,null,null,null];
|
var anas:Array<Ana> = [null,null,null,null];
|
||||||
|
|
||||||
for (i in 0...pressArray.length)
|
for (i in 0...pressArray.length)
|
||||||
@ -3172,7 +3235,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
|
// PRESSES, check for note hits
|
||||||
if (pressArray.contains(true) && generatedMusic)
|
if (pressArray.contains(true) && generatedMusic)
|
||||||
@ -3293,7 +3356,7 @@ class PlayState extends MusicBeatState
|
|||||||
|
|
||||||
if (boyfriend.holdTimer > Conductor.stepCrochet * 4 * 0.001 && (!holdArray.contains(true) || PlayStateChangeables.botPlay))
|
if (boyfriend.holdTimer > Conductor.stepCrochet * 4 * 0.001 && (!holdArray.contains(true) || PlayStateChangeables.botPlay))
|
||||||
{
|
{
|
||||||
if (boyfriend.animation.curAnim.name.startsWith('sing') && !boyfriend.animation.curAnim.name.endsWith('miss'))
|
if (boyfriend.animation.curAnim.name.startsWith('sing') && !boyfriend.animation.curAnim.name.endsWith('miss') && boyfriend.animation.curAnim.curFrame >= 10)
|
||||||
boyfriend.playAnim('idle');
|
boyfriend.playAnim('idle');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3462,17 +3525,8 @@ class PlayState extends MusicBeatState
|
|||||||
// FlxG.sound.play(Paths.sound('missnote1'), 1, false);
|
// FlxG.sound.play(Paths.sound('missnote1'), 1, false);
|
||||||
// FlxG.log.add('played imss note');
|
// FlxG.log.add('played imss note');
|
||||||
|
|
||||||
switch (direction)
|
// Hole switch statement replaced with a single line :)
|
||||||
{
|
boyfriend.playAnim('sing' + dataSuffix[direction] + 'miss', true);
|
||||||
case 0:
|
|
||||||
boyfriend.playAnim('singLEFTmiss', true);
|
|
||||||
case 1:
|
|
||||||
boyfriend.playAnim('singDOWNmiss', true);
|
|
||||||
case 2:
|
|
||||||
boyfriend.playAnim('singUPmiss', true);
|
|
||||||
case 3:
|
|
||||||
boyfriend.playAnim('singRIGHTmiss', true);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if windows
|
#if windows
|
||||||
if (luaModchart != null)
|
if (luaModchart != null)
|
||||||
@ -3621,18 +3675,8 @@ class PlayState extends MusicBeatState
|
|||||||
else
|
else
|
||||||
totalNotesHit += 1;
|
totalNotesHit += 1;
|
||||||
|
|
||||||
|
var singData:Int = Std.int(note.noteData);
|
||||||
switch (note.noteData)
|
boyfriend.playAnim('sing' + dataSuffix[singData], true);
|
||||||
{
|
|
||||||
case 2:
|
|
||||||
boyfriend.playAnim('singUP', true);
|
|
||||||
case 3:
|
|
||||||
boyfriend.playAnim('singRIGHT', true);
|
|
||||||
case 1:
|
|
||||||
boyfriend.playAnim('singDOWN', true);
|
|
||||||
case 0:
|
|
||||||
boyfriend.playAnim('singLEFT', true);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if windows
|
#if windows
|
||||||
if (luaModchart != null)
|
if (luaModchart != null)
|
||||||
@ -3876,6 +3920,10 @@ class PlayState extends MusicBeatState
|
|||||||
boyfriend.playAnim('idle');
|
boyfriend.playAnim('idle');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!dad.animation.curAnim.name.startsWith("sing"))
|
||||||
|
{
|
||||||
|
dad.dance();
|
||||||
|
}
|
||||||
|
|
||||||
if (curBeat % 8 == 7 && curSong == 'Bopeebo')
|
if (curBeat % 8 == 7 && curSong == 'Bopeebo')
|
||||||
{
|
{
|
||||||
|
@ -57,6 +57,7 @@ class ResultsScreen extends FlxSubState
|
|||||||
music = new FlxSound().loadEmbedded(Paths.music('breakfast'), true, true);
|
music = new FlxSound().loadEmbedded(Paths.music('breakfast'), true, true);
|
||||||
music.volume = 0;
|
music.volume = 0;
|
||||||
music.play(false, FlxG.random.int(0, Std.int(music.length / 2)));
|
music.play(false, FlxG.random.int(0, Std.int(music.length / 2)));
|
||||||
|
FlxG.sound.list.add(music);
|
||||||
|
|
||||||
background.alpha = 0;
|
background.alpha = 0;
|
||||||
|
|
||||||
@ -74,7 +75,7 @@ class ResultsScreen extends FlxSubState
|
|||||||
text.text = "Week Cleared!";
|
text.text = "Week Cleared!";
|
||||||
}
|
}
|
||||||
|
|
||||||
comboText = new FlxText(20,-75,0,'Judgements:\nSicks - ${PlayState.sicks}\nGoods - ${PlayState.goods}\nBads - ${PlayState.bads}\n\nCombo Breaks: ${(PlayState.isStoryMode ? PlayState.campaignMisses : PlayState.misses)}\nHighest Combo: ${PlayState.highestCombo + 1}\n\nScore: ${PlayState.instance.songScore}\nAccuracy: ${HelperFunctions.truncateFloat(PlayState.instance.accuracy,2)}%\n\n${Ratings.GenerateLetterRank(PlayState.instance.accuracy)}\n\nF1 - View replay\nF2 - Replay song
|
comboText = new FlxText(20,-75,0,'Judgements:\nSicks - ${PlayState.sicks}\nGoods - ${PlayState.goods}\nBads - ${PlayState.bads}\n\nCombo Breaks: ${(PlayState.isStoryMode ? PlayState.campaignMisses : PlayState.misses)}\nHighest Combo: ${PlayState.highestCombo + 1}\nScore: ${PlayState.instance.songScore}\nAccuracy: ${HelperFunctions.truncateFloat(PlayState.instance.accuracy,2)}%\n\n${Ratings.GenerateLetterRank(PlayState.instance.accuracy)}\n\nF1 - View replay\nF2 - Replay song
|
||||||
');
|
');
|
||||||
comboText.size = 28;
|
comboText.size = 28;
|
||||||
comboText.setBorderStyle(FlxTextBorderStyle.OUTLINE,FlxColor.BLACK,4,1);
|
comboText.setBorderStyle(FlxTextBorderStyle.OUTLINE,FlxColor.BLACK,4,1);
|
||||||
|
@ -2,7 +2,7 @@ package;
|
|||||||
|
|
||||||
typedef SwagSection =
|
typedef SwagSection =
|
||||||
{
|
{
|
||||||
var sectionNotes:Array<Dynamic>;
|
var sectionNotes:Array<Array<Dynamic>>;
|
||||||
var lengthInSteps:Int;
|
var lengthInSteps:Int;
|
||||||
var typeOfSection:Int;
|
var typeOfSection:Int;
|
||||||
var mustHitSection:Bool;
|
var mustHitSection:Bool;
|
||||||
@ -13,7 +13,7 @@ typedef SwagSection =
|
|||||||
|
|
||||||
class Section
|
class Section
|
||||||
{
|
{
|
||||||
public var sectionNotes:Array<Dynamic> = [];
|
public var sectionNotes:Array<Array<Dynamic>> = [];
|
||||||
|
|
||||||
public var lengthInSteps:Int = 16;
|
public var lengthInSteps:Int = 16;
|
||||||
public var typeOfSection:Int = 0;
|
public var typeOfSection:Int = 0;
|
||||||
|
@ -24,7 +24,9 @@ class StoryMenuState extends MusicBeatState
|
|||||||
{
|
{
|
||||||
var scoreText:FlxText;
|
var scoreText:FlxText;
|
||||||
|
|
||||||
var weekData:Array<Dynamic> = [
|
static function weekData():Array<Dynamic>
|
||||||
|
{
|
||||||
|
return [
|
||||||
['Tutorial'],
|
['Tutorial'],
|
||||||
['Bopeebo', 'Fresh', 'Dad Battle'],
|
['Bopeebo', 'Fresh', 'Dad Battle'],
|
||||||
['Spookeez', 'South', "Monster"],
|
['Spookeez', 'South', "Monster"],
|
||||||
@ -33,9 +35,10 @@ class StoryMenuState extends MusicBeatState
|
|||||||
['Cocoa', 'Eggnog', 'Winter Horrorland'],
|
['Cocoa', 'Eggnog', 'Winter Horrorland'],
|
||||||
['Senpai', 'Roses', 'Thorns']
|
['Senpai', 'Roses', 'Thorns']
|
||||||
];
|
];
|
||||||
|
}
|
||||||
var curDifficulty:Int = 1;
|
var curDifficulty:Int = 1;
|
||||||
|
|
||||||
public static var weekUnlocked:Array<Bool> = [true, true, true, true, true, true, true];
|
public static var weekUnlocked:Array<Bool> = [];
|
||||||
|
|
||||||
var weekCharacters:Array<Dynamic> = [
|
var weekCharacters:Array<Dynamic> = [
|
||||||
['', 'bf', 'gf'],
|
['', 'bf', 'gf'],
|
||||||
@ -47,15 +50,7 @@ class StoryMenuState extends MusicBeatState
|
|||||||
['senpai', 'bf', 'gf']
|
['senpai', 'bf', 'gf']
|
||||||
];
|
];
|
||||||
|
|
||||||
var weekNames:Array<String> = [
|
var weekNames:Array<String> = CoolUtil.coolTextFile(Paths.txt('data/weekNames'));
|
||||||
"",
|
|
||||||
"Daddy Dearest",
|
|
||||||
"Spooky Month",
|
|
||||||
"PICO",
|
|
||||||
"MOMMY MUST MURDER",
|
|
||||||
"RED SNOW",
|
|
||||||
"Hating Simulator ft. Moawling"
|
|
||||||
];
|
|
||||||
|
|
||||||
var txtWeekTitle:FlxText;
|
var txtWeekTitle:FlxText;
|
||||||
|
|
||||||
@ -73,8 +68,28 @@ class StoryMenuState extends MusicBeatState
|
|||||||
var leftArrow:FlxSprite;
|
var leftArrow:FlxSprite;
|
||||||
var rightArrow:FlxSprite;
|
var rightArrow:FlxSprite;
|
||||||
|
|
||||||
|
function unlockWeeks():Array<Bool>
|
||||||
|
{
|
||||||
|
var weeks:Array<Bool> = [];
|
||||||
|
#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()
|
override function create()
|
||||||
{
|
{
|
||||||
|
weekUnlocked = unlockWeeks();
|
||||||
|
|
||||||
#if windows
|
#if windows
|
||||||
// Updating Discord Rich Presence
|
// Updating Discord Rich Presence
|
||||||
DiscordClient.changePresence("In the Story Mode Menu", null);
|
DiscordClient.changePresence("In the Story Mode Menu", null);
|
||||||
@ -110,17 +125,17 @@ class StoryMenuState extends MusicBeatState
|
|||||||
grpWeekText = new FlxTypedGroup<MenuItem>();
|
grpWeekText = new FlxTypedGroup<MenuItem>();
|
||||||
add(grpWeekText);
|
add(grpWeekText);
|
||||||
|
|
||||||
|
grpLocks = new FlxTypedGroup<FlxSprite>();
|
||||||
|
add(grpLocks);
|
||||||
|
|
||||||
var blackBarThingie:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, 56, FlxColor.BLACK);
|
var blackBarThingie:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, 56, FlxColor.BLACK);
|
||||||
add(blackBarThingie);
|
add(blackBarThingie);
|
||||||
|
|
||||||
grpWeekCharacters = new FlxTypedGroup<MenuCharacter>();
|
grpWeekCharacters = new FlxTypedGroup<MenuCharacter>();
|
||||||
|
|
||||||
grpLocks = new FlxTypedGroup<FlxSprite>();
|
|
||||||
add(grpLocks);
|
|
||||||
|
|
||||||
trace("Line 70");
|
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);
|
var weekThing:MenuItem = new MenuItem(0, yellowBG.y + yellowBG.height + 10, i);
|
||||||
weekThing.y += ((weekThing.height + 20) * i);
|
weekThing.y += ((weekThing.height + 20) * i);
|
||||||
@ -134,6 +149,7 @@ class StoryMenuState extends MusicBeatState
|
|||||||
// Needs an offset thingie
|
// Needs an offset thingie
|
||||||
if (!weekUnlocked[i])
|
if (!weekUnlocked[i])
|
||||||
{
|
{
|
||||||
|
trace('locking week ' + i);
|
||||||
var lock:FlxSprite = new FlxSprite(weekThing.width + 10 + weekThing.x);
|
var lock:FlxSprite = new FlxSprite(weekThing.width + 10 + weekThing.x);
|
||||||
lock.frames = ui_tex;
|
lock.frames = ui_tex;
|
||||||
lock.animation.addByPrefix('lock', 'lock');
|
lock.animation.addByPrefix('lock', 'lock');
|
||||||
@ -195,6 +211,19 @@ class StoryMenuState extends MusicBeatState
|
|||||||
|
|
||||||
updateText();
|
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");
|
trace("Line 165");
|
||||||
|
|
||||||
super.create();
|
super.create();
|
||||||
@ -314,7 +343,7 @@ class StoryMenuState extends MusicBeatState
|
|||||||
stopspamming = true;
|
stopspamming = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayState.storyPlaylist = weekData[curWeek];
|
PlayState.storyPlaylist = weekData()[curWeek];
|
||||||
PlayState.isStoryMode = true;
|
PlayState.isStoryMode = true;
|
||||||
selectedWeek = true;
|
selectedWeek = true;
|
||||||
|
|
||||||
@ -388,10 +417,10 @@ class StoryMenuState extends MusicBeatState
|
|||||||
{
|
{
|
||||||
curWeek += change;
|
curWeek += change;
|
||||||
|
|
||||||
if (curWeek >= weekData.length)
|
if (curWeek >= weekData().length)
|
||||||
curWeek = 0;
|
curWeek = 0;
|
||||||
if (curWeek < 0)
|
if (curWeek < 0)
|
||||||
curWeek = weekData.length - 1;
|
curWeek = weekData().length - 1;
|
||||||
|
|
||||||
var bullShit:Int = 0;
|
var bullShit:Int = 0;
|
||||||
|
|
||||||
@ -417,7 +446,7 @@ class StoryMenuState extends MusicBeatState
|
|||||||
grpWeekCharacters.members[2].setCharacter(weekCharacters[curWeek][2]);
|
grpWeekCharacters.members[2].setCharacter(weekCharacters[curWeek][2]);
|
||||||
|
|
||||||
txtTracklist.text = "Tracks\n";
|
txtTracklist.text = "Tracks\n";
|
||||||
var stringThing:Array<String> = weekData[curWeek];
|
var stringThing:Array<String> = weekData()[curWeek];
|
||||||
|
|
||||||
for (i in stringThing)
|
for (i in stringThing)
|
||||||
txtTracklist.text += "\n" + i;
|
txtTracklist.text += "\n" + i;
|
||||||
@ -433,4 +462,16 @@ class StoryMenuState extends MusicBeatState
|
|||||||
intendedScore = Highscore.getWeekScore(curWeek, curDifficulty);
|
intendedScore = Highscore.getWeekScore(curWeek, curDifficulty);
|
||||||
#end
|
#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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,16 +67,7 @@ class TitleState extends MusicBeatState
|
|||||||
trace("Loaded " + openfl.Assets.getLibrary("default").assetsLoaded + " assets (DEFAULT)");
|
trace("Loaded " + openfl.Assets.getLibrary("default").assetsLoaded + " assets (DEFAULT)");
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerSettings.init();
|
|
||||||
|
|
||||||
#if windows
|
|
||||||
DiscordClient.initialize();
|
|
||||||
|
|
||||||
Application.current.onExit.add (function (exitCode) {
|
|
||||||
DiscordClient.shutdown();
|
|
||||||
});
|
|
||||||
|
|
||||||
#end
|
|
||||||
|
|
||||||
curWacky = FlxG.random.getObject(getIntroTextShit());
|
curWacky = FlxG.random.getObject(getIntroTextShit());
|
||||||
|
|
||||||
@ -93,38 +84,22 @@ class TitleState extends MusicBeatState
|
|||||||
trace('NEWGROUNDS LOL');
|
trace('NEWGROUNDS LOL');
|
||||||
#end
|
#end
|
||||||
|
|
||||||
FlxG.save.bind('funkin', 'ninjamuffin99');
|
|
||||||
|
|
||||||
KadeEngineData.initSave();
|
|
||||||
|
|
||||||
// var file:SMFile = SMFile.loadFile("file.sm");
|
// var file:SMFile = SMFile.loadFile("file.sm");
|
||||||
// this was testing things
|
// this was testing things
|
||||||
|
|
||||||
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
|
#if FREEPLAY
|
||||||
FlxG.switchState(new FreeplayState());
|
FlxG.switchState(new FreeplayState());
|
||||||
#elseif CHARTING
|
#elseif CHARTING
|
||||||
FlxG.switchState(new ChartingState());
|
FlxG.switchState(new ChartingState());
|
||||||
#else
|
#else
|
||||||
|
#if !cpp
|
||||||
new FlxTimer().start(1, function(tmr:FlxTimer)
|
new FlxTimer().start(1, function(tmr:FlxTimer)
|
||||||
{
|
{
|
||||||
startIntro();
|
startIntro();
|
||||||
});
|
});
|
||||||
|
#else
|
||||||
|
startIntro();
|
||||||
|
#end
|
||||||
#end
|
#end
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,34 +110,6 @@ class TitleState extends MusicBeatState
|
|||||||
|
|
||||||
function startIntro()
|
function startIntro()
|
||||||
{
|
{
|
||||||
if (!initialized)
|
|
||||||
{
|
|
||||||
var diamond:FlxGraphic = FlxGraphic.fromClass(GraphicTransTileDiamond);
|
|
||||||
diamond.persist = true;
|
|
||||||
diamond.destroyOnNoUse = false;
|
|
||||||
|
|
||||||
FlxTransitionableState.defaultTransIn = new TransitionData(FADE, FlxColor.BLACK, 1, new FlxPoint(0, -1), {asset: diamond, width: 32, height: 32},
|
|
||||||
new FlxRect(-200, -200, FlxG.width * 1.4, FlxG.height * 1.4));
|
|
||||||
FlxTransitionableState.defaultTransOut = new TransitionData(FADE, FlxColor.BLACK, 0.7, new FlxPoint(0, 1),
|
|
||||||
{asset: diamond, width: 32, height: 32}, new FlxRect(-200, -200, FlxG.width * 1.4, FlxG.height * 1.4));
|
|
||||||
|
|
||||||
transIn = FlxTransitionableState.defaultTransIn;
|
|
||||||
transOut = FlxTransitionableState.defaultTransOut;
|
|
||||||
|
|
||||||
// HAD TO MODIFY SOME BACKEND SHIT
|
|
||||||
// IF THIS PR IS HERE IF ITS ACCEPTED UR GOOD TO GO
|
|
||||||
// https://github.com/HaxeFlixel/flixel-addons/pull/348
|
|
||||||
|
|
||||||
// var music:FlxSound = new FlxSound();
|
|
||||||
// music.loadStream(Paths.music('freakyMenu'));
|
|
||||||
// FlxG.sound.list.add(music);
|
|
||||||
// music.play();
|
|
||||||
FlxG.sound.playMusic(Paths.music('freakyMenu'), 0);
|
|
||||||
|
|
||||||
FlxG.sound.music.fadeIn(4, 0, 0.7);
|
|
||||||
}
|
|
||||||
|
|
||||||
Conductor.changeBPM(102);
|
|
||||||
persistentUpdate = true;
|
persistentUpdate = true;
|
||||||
|
|
||||||
var bg:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
|
var bg:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
|
||||||
@ -171,25 +118,17 @@ class TitleState extends MusicBeatState
|
|||||||
// bg.updateHitbox();
|
// bg.updateHitbox();
|
||||||
add(bg);
|
add(bg);
|
||||||
|
|
||||||
|
logoBl = new FlxSprite(-150, 1500);
|
||||||
if(Main.watermarks) {
|
if(Main.watermarks) {
|
||||||
logoBl = new FlxSprite(-150, -100);
|
|
||||||
logoBl.frames = Paths.getSparrowAtlas('KadeEngineLogoBumpin');
|
logoBl.frames = Paths.getSparrowAtlas('KadeEngineLogoBumpin');
|
||||||
logoBl.antialiasing = true;
|
|
||||||
logoBl.animation.addByPrefix('bump', 'logo bumpin', 24);
|
|
||||||
logoBl.animation.play('bump');
|
|
||||||
logoBl.updateHitbox();
|
|
||||||
// logoBl.screenCenter();
|
|
||||||
// logoBl.color = FlxColor.BLACK;
|
|
||||||
} else {
|
} else {
|
||||||
logoBl = new FlxSprite(-150, -100);
|
|
||||||
logoBl.frames = Paths.getSparrowAtlas('logoBumpin');
|
logoBl.frames = Paths.getSparrowAtlas('logoBumpin');
|
||||||
|
}
|
||||||
logoBl.antialiasing = true;
|
logoBl.antialiasing = true;
|
||||||
logoBl.animation.addByPrefix('bump', 'logo bumpin', 24);
|
logoBl.animation.addByPrefix('bump', 'logo bumpin', 24, false);
|
||||||
logoBl.animation.play('bump');
|
|
||||||
logoBl.updateHitbox();
|
logoBl.updateHitbox();
|
||||||
// logoBl.screenCenter();
|
// logoBl.screenCenter();
|
||||||
// logoBl.color = FlxColor.BLACK;
|
// logoBl.color = FlxColor.BLACK;
|
||||||
}
|
|
||||||
|
|
||||||
gfDance = new FlxSprite(FlxG.width * 0.4, FlxG.height * 0.07);
|
gfDance = new FlxSprite(FlxG.width * 0.4, FlxG.height * 0.07);
|
||||||
gfDance.frames = Paths.getSparrowAtlas('gfDanceTitle');
|
gfDance.frames = Paths.getSparrowAtlas('gfDanceTitle');
|
||||||
@ -245,15 +184,40 @@ class TitleState extends MusicBeatState
|
|||||||
|
|
||||||
if (initialized)
|
if (initialized)
|
||||||
skipIntro();
|
skipIntro();
|
||||||
else
|
else {
|
||||||
|
var diamond:FlxGraphic = FlxGraphic.fromClass(GraphicTransTileDiamond);
|
||||||
|
diamond.persist = true;
|
||||||
|
diamond.destroyOnNoUse = false;
|
||||||
|
|
||||||
|
FlxTransitionableState.defaultTransIn = new TransitionData(FADE, FlxColor.BLACK, 1, new FlxPoint(0, -1), {asset: diamond, width: 32, height: 32},
|
||||||
|
new FlxRect(-200, -200, FlxG.width * 1.4, FlxG.height * 1.4));
|
||||||
|
FlxTransitionableState.defaultTransOut = new TransitionData(FADE, FlxColor.BLACK, 0.7, new FlxPoint(0, 1),
|
||||||
|
{asset: diamond, width: 32, height: 32}, new FlxRect(-200, -200, FlxG.width * 1.4, FlxG.height * 1.4));
|
||||||
|
|
||||||
|
transIn = FlxTransitionableState.defaultTransIn;
|
||||||
|
transOut = FlxTransitionableState.defaultTransOut;
|
||||||
|
|
||||||
|
// HAD TO MODIFY SOME BACKEND SHIT
|
||||||
|
// IF THIS PR IS HERE IF ITS ACCEPTED UR GOOD TO GO
|
||||||
|
// https://github.com/HaxeFlixel/flixel-addons/pull/348
|
||||||
|
|
||||||
|
// var music:FlxSound = new FlxSound();
|
||||||
|
// music.loadStream(Paths.music('freakyMenu'));
|
||||||
|
// FlxG.sound.list.add(music);
|
||||||
|
// music.play();
|
||||||
|
FlxG.sound.playMusic(Paths.music('freakyMenu'), 0);
|
||||||
|
|
||||||
|
FlxG.sound.music.fadeIn(4, 0, 0.7);
|
||||||
|
Conductor.changeBPM(102);
|
||||||
initialized = true;
|
initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
// credGroup.add(credTextShit);
|
// credGroup.add(credTextShit);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getIntroTextShit():Array<Array<String>>
|
function getIntroTextShit():Array<Array<String>>
|
||||||
{
|
{
|
||||||
var fullText:String = Assets.getText(Paths.txt('introText'));
|
var fullText:String = Assets.getText(Paths.txt('data/introText'));
|
||||||
|
|
||||||
var firstArray:Array<String> = fullText.split('\n');
|
var firstArray:Array<String> = fullText.split('\n');
|
||||||
var swagGoodArray:Array<Array<String>> = [];
|
var swagGoodArray:Array<Array<String>> = [];
|
||||||
@ -388,7 +352,7 @@ class TitleState extends MusicBeatState
|
|||||||
{
|
{
|
||||||
super.beatHit();
|
super.beatHit();
|
||||||
|
|
||||||
logoBl.animation.play('bump');
|
logoBl.animation.play('bump', true);
|
||||||
danceLeft = !danceLeft;
|
danceLeft = !danceLeft;
|
||||||
|
|
||||||
if (danceLeft)
|
if (danceLeft)
|
||||||
@ -468,6 +432,19 @@ class TitleState extends MusicBeatState
|
|||||||
|
|
||||||
FlxG.camera.flash(FlxColor.WHITE, 4);
|
FlxG.camera.flash(FlxColor.WHITE, 4);
|
||||||
remove(credGroup);
|
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;
|
skippedIntro = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user