Merge pull request #2 from KadeDev/master
re-merging my patches branch to master and hopefully this doesnt show up on base kade engine
1
.vscode/.temp
vendored
Normal file
@ -0,0 +1 @@
|
||||
TBA: tasks.json
|
21
.vscode/tasks.json
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"type": "lime",
|
||||
"command": "test",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "lime",
|
||||
"command": "build",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
Before Width: | Height: | Size: 560 KiB After Width: | Height: | Size: 443 KiB |
10
Project.xml
@ -7,6 +7,8 @@
|
||||
<!--Switch Export with Unique ApplicationID and Icon-->
|
||||
<set name="APP_ID" value="0x0100f6c013bbc000" />
|
||||
|
||||
<haxedef name="LINC_LUA_RELATIVE_DYNAMIC_LIB"/>
|
||||
|
||||
<!--The flixel preloader is not accurate in Chrome. You can use it regularly if you embed the swf into a html file
|
||||
or you can set the actual size of your file manually at "FlxPreloaderBase-onUpdate-bytesTotal"-->
|
||||
<!-- <app preloader="Preloader" resizable="true" /> -->
|
||||
@ -57,6 +59,7 @@
|
||||
<library name="week4" preload="true" />
|
||||
<library name="week5" preload="true" />
|
||||
<library name="week6" preload="true" />
|
||||
<library name="sm" preload="true" />
|
||||
</section>
|
||||
|
||||
<section if="NO_PRELOAD_ALL">
|
||||
@ -69,6 +72,7 @@
|
||||
<library name="week4" preload="false" />
|
||||
<library name="week5" preload="false" />
|
||||
<library name="week6" preload="false" />
|
||||
<library name="sm" preload="false" />
|
||||
</section>
|
||||
|
||||
<assets path="assets/songs" library="songs" exclude="*.ogg" if="web"/>
|
||||
@ -89,7 +93,9 @@
|
||||
<assets path="assets/week5" library="week5" exclude="*.mp3" unless="web"/>
|
||||
<assets path="assets/week6" library="week6" exclude="*.ogg" if="web"/>
|
||||
<assets path="assets/week6" library="week6" exclude="*.mp3" unless="web"/>
|
||||
|
||||
<assets path="assets/sm" library="sm" exclude="*.ogg" if="web"/>
|
||||
<assets path="assets/sm" library="sm" exclude="*.mp3" unless="web"/>
|
||||
|
||||
<assets path='example_mods' rename='mods' embed='false'/>
|
||||
<assets path='art/readme.txt' rename='do NOT readme.txt' />
|
||||
<assets path='LICENSE' rename='LICENSE.txt' />
|
||||
@ -160,6 +166,8 @@
|
||||
<!--Disable the Flixel core debugger. Automatically gets set whenever you compile in release mode!-->
|
||||
<haxedef name="FLX_NO_DEBUG" unless="debug" />
|
||||
|
||||
<haxedef name="HXCPP_GC_BIG_BLOCKS"/>
|
||||
|
||||
<!--Enable this for Nape release builds for a serious peformance improvement-->
|
||||
<haxedef name="NAPE_RELEASE_BUILD" unless="debug" />
|
||||
|
||||
|
29
README.md
@ -24,17 +24,23 @@ If you're looking for documentation, changelogs, or guides, you can find those o
|
||||
|
||||
# Previews ([skip](#features))
|
||||
|
||||
 
|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
# Features
|
||||
|
||||
@ -43,12 +49,15 @@ If you're looking for documentation, changelogs, or guides, you can find those o
|
||||
- **More information during gameplay**
|
||||
- While you're playing, we show you information about how you're doing, such as your accuracy, combo break count, notes per second, and your grade/rating.
|
||||
- **Customizable keybinds**
|
||||
- Instead of being forced to use WASD and the arrow keys, you can customize the keybinds to any keys you want!
|
||||
- Instead of being forced to use WASD and the arrow keys, you can set any keybinds you want!
|
||||
- **Replays** (in beta)
|
||||
- Have you ever gotten a crazy score but didn't record? The replay system solves that: it automatically saves a "replay" of your gameplay every time you complete a song, which you can play back inside of the game.
|
||||
- Replays just store information about what you're doing, they don't actually record the screen -- so they take up way less space on your disk than videos.
|
||||
- **Audio offset**
|
||||
- If your headphones are delayed, you can set an offset in the options menu to line the game up with the delay and play with synced audio like intended.
|
||||
- If your speakers or headphones are delayed, you can set an offset in the options menu to line the game up with the delay and play with synced audio like intended!
|
||||
- **And much, much more!**
|
||||
- There's so much more in store than just what's listed here! If you can imagine a quality of life feature, it's probably
|
||||
either already included in Kade Engine or is being worked on!
|
||||
|
||||
# Credits
|
||||
### Friday Night Funkin'
|
||||
@ -65,4 +74,6 @@ This game was made with love to Newgrounds and its community. Extra love to Tom
|
||||
### Shoutouts
|
||||
- [GWebDev](https://github.com/GrowtopiaFli) - Video Code
|
||||
- [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/puyoxyz) - Setting up appveyor and a lot of other help
|
||||
- [Smokey](https://github.com/Smokey555) - telling me that I should do the tricky asset loading
|
||||
- [Poco](https://github.com/poco0317) - math degree (aka most of the fucking math in this project)
|
||||
|
@ -9,7 +9,7 @@ install:
|
||||
- cd /home/appveyor
|
||||
- sudo add-apt-repository ppa:haxe/releases -y
|
||||
- sudo apt update
|
||||
- sudo apt install neko tar -y
|
||||
- sudo apt install neko tar gcc-7 g++-7 gcc-7-multilib g++-7-multilib -y
|
||||
- wget https://github.com/HaxeFoundation/haxe/releases/download/4.1.5/haxe-4.1.5-linux64.tar.gz
|
||||
- mkdir $HAXE_INSTALLDIR
|
||||
- tar -xf haxe-4.1.5-linux64.tar.gz -C $HAXE_INSTALLDIR
|
||||
@ -29,8 +29,9 @@ install:
|
||||
- haxelib git polymod https://github.com/larsiusprime/polymod.git
|
||||
- haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc
|
||||
- haxelib git extension-webm https://github.com/KadeDev/extension-webm
|
||||
- lime rebuild extension-webm linux
|
||||
- haxelib run lime rebuild extension-webm linux
|
||||
- haxelib install linc_luajit
|
||||
- haxelib install actuate
|
||||
- haxelib list
|
||||
- cd /home/appveyor/projects/kade-engine-linux
|
||||
|
||||
|
@ -29,8 +29,9 @@ install:
|
||||
- haxelib git polymod https://github.com/larsiusprime/polymod.git
|
||||
- haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc
|
||||
- haxelib git extension-webm https://github.com/KadeDev/extension-webm
|
||||
- lime rebuild extension-webm macos
|
||||
- haxelib run lime rebuild extension-webm macos
|
||||
- haxelib install linc_luajit
|
||||
- haxelib install actuate
|
||||
- haxelib list
|
||||
- cd /Users/appveyor/projects/kade-engine-macos
|
||||
|
||||
|
@ -18,6 +18,7 @@ install:
|
||||
- haxelib setup "%HAXELIB_ROOT%"
|
||||
# Install project dependencies
|
||||
- haxelib install lime 7.9.0
|
||||
- RefreshEnv
|
||||
- haxelib install openfl
|
||||
- haxelib install flixel
|
||||
- haxelib run lime setup flixel
|
||||
@ -32,7 +33,13 @@ install:
|
||||
- haxelib git faxe https://github.com/uhrobots/faxe
|
||||
- haxelib git polymod https://github.com/larsiusprime/polymod.git
|
||||
- haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc
|
||||
- haxelib git extension-webm https://github.com/KadeDev/extension-webm
|
||||
- haxelib run lime rebuild extension-webm windows
|
||||
- haxelib install linc_luajit
|
||||
- haxelib install actuate
|
||||
#- haxelib git extension-webm https://github.com/KadeDev/extension-webm
|
||||
#- haxelib run lime rebuild extension-webm windows
|
||||
#why here's dublicate lmao
|
||||
- haxelib list
|
||||
|
||||
# No tests idk lol
|
||||
|
BIN
art/readme/KadeEngineDialogue.png
Normal file
After Width: | Height: | Size: 243 KiB |
BIN
art/readme/KadeEngineFreeplay.png
Normal file
After Width: | Height: | Size: 1.3 MiB |
BIN
art/readme/KadeEngineOptions.png
Normal file
After Width: | Height: | Size: 1.3 MiB |
BIN
art/readme/KadeEnginePauseScreen.png
Normal file
After Width: | Height: | Size: 348 KiB |
BIN
art/readme/KadeEnginePixelGameplay.png
Normal file
After Width: | Height: | Size: 271 KiB |
BIN
art/readme/KadeEngineReplayLoader.png
Normal file
After Width: | Height: | Size: 1.3 MiB |
BIN
art/readme/KadeEngineResultsScreen.png
Normal file
After Width: | Height: | Size: 753 KiB |
BIN
art/readme/KadeEngineTitleScreen.png
Normal file
After Width: | Height: | Size: 942 KiB |
BIN
art/readme/KadeEngineWeekSelect.png
Normal file
After Width: | Height: | Size: 458 KiB |
@ -1,4 +1,4 @@
|
||||
Tutorial:gf:1
|
||||
Tutorial:gf:0
|
||||
Bopeebo:dad:1
|
||||
Fresh:dad:1
|
||||
Dad Battle:dad:1
|
||||
|
1
assets/preload/data/test/test.json
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
|
@ -13,10 +13,10 @@
|
||||
<SubTexture name="Week 4 press0001" x="365" y="275" width="355" height="89"/>
|
||||
<SubTexture name="Week 60000" x="0" y="374" width="359" height="92"/>
|
||||
<SubTexture name="Week 60001" x="369" y="374" width="359" height="92"/>
|
||||
<SubTexture name="arrow left0000" x="738" y="374" width="48" height="85"/>
|
||||
<SubTexture name="arrow push left0000" x="796" y="374" width="42" height="75"/>
|
||||
<SubTexture name="arrow push right0000" x="848" y="374" width="41" height="74"/>
|
||||
<SubTexture name="arrow right0000" x="899" y="374" width="47" height="85"/>
|
||||
<SubTexture name="arrow push left0000" x="738" y="374" width="48" height="85"/>
|
||||
<SubTexture name="arrow left0000" x="796" y="374" width="42" height="75"/>
|
||||
<SubTexture name="arrow right0000" x="848" y="374" width="41" height="74"/>
|
||||
<SubTexture name="arrow push right0000" x="899" y="374" width="47" height="85"/>
|
||||
<SubTexture name="lock0000" x="956" y="374" width="67" height="93"/>
|
||||
<SubTexture name="tutorial selected0000" x="0" y="477" width="443" height="82"/>
|
||||
<SubTexture name="tutorial selected0001" x="453" y="477" width="443" height="82"/>
|
||||
|
Before Width: | Height: | Size: 144 KiB |
BIN
assets/preload/images/icons/icon-bf-old.png
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
assets/preload/images/icons/icon-bf-pixel.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/preload/images/icons/icon-bf.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
assets/preload/images/icons/icon-dad.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
assets/preload/images/icons/icon-face.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
assets/preload/images/icons/icon-gf.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
assets/preload/images/icons/icon-mom.png
Normal file
After Width: | Height: | Size: 9.3 KiB |
BIN
assets/preload/images/icons/icon-monster.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
assets/preload/images/icons/icon-parents.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
assets/preload/images/icons/icon-pico.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
assets/preload/images/icons/icon-senpai.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
assets/preload/images/icons/icon-sm.png
Normal file
After Width: | Height: | Size: 7.4 KiB |
BIN
assets/preload/images/icons/icon-spirit.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/preload/images/icons/icon-spooky.png
Normal file
After Width: | Height: | Size: 7.0 KiB |
BIN
assets/preload/images/icons/icon-tankman.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 700 KiB After Width: | Height: | Size: 696 KiB |
@ -1,53 +1,92 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TextureAtlas imagePath="NOTE_assets.png">
|
||||
<!-- Created with Adobe Animate version 20.0.0.17400 -->
|
||||
<!-- Created with Adobe Animate version 21.0.0.35450 -->
|
||||
<!-- http://www.adobe.com/products/animate.html -->
|
||||
<SubTexture name="arrowDOWN0000" x="0" y="235" width="157" height="153"/>
|
||||
<SubTexture name="arrowLEFT0000" x="310" y="235" width="153" height="157"/>
|
||||
<SubTexture name="arrowRIGHT0000" x="157" y="235" width="153" height="157"/>
|
||||
<SubTexture name="arrowUP0000" x="784" y="232" width="157" height="153"/>
|
||||
<SubTexture name="blue0000" x="1850" y="154" width="157" height="154"/>
|
||||
<SubTexture name="blue hold end0000" x="1170" y="447" width="50" height="64"/>
|
||||
<SubTexture name="blue hold piece0000" x="1370" y="449" width="50" height="44"/>
|
||||
<SubTexture name="down confirm0000" x="0" y="0" width="238" height="235"/>
|
||||
<SubTexture name="down confirm0001" x="238" y="0" width="238" height="235"/>
|
||||
<SubTexture name="down confirm0002" x="1176" y="230" width="219" height="208" frameX="-6" frameY="-12" frameWidth="238" frameHeight="235"/>
|
||||
<SubTexture name="down confirm0003" x="1176" y="230" width="219" height="208" frameX="-6" frameY="-12" frameWidth="238" frameHeight="235"/>
|
||||
<SubTexture name="down press0000" x="149" y="392" width="142" height="140" frameX="-4" frameY="-2" frameWidth="149" frameHeight="146"/>
|
||||
<SubTexture name="down press0001" x="149" y="392" width="142" height="140" frameX="-4" frameY="-2" frameWidth="149" frameHeight="146"/>
|
||||
<SubTexture name="down press0002" x="0" y="388" width="149" height="146"/>
|
||||
<SubTexture name="down press0003" x="0" y="388" width="149" height="146"/>
|
||||
<SubTexture name="green0000" x="1850" y="0" width="157" height="154"/>
|
||||
<SubTexture name="green hold end0000" x="1120" y="442" width="50" height="64"/>
|
||||
<SubTexture name="green hold piece0000" x="1320" y="447" width="50" height="44"/>
|
||||
<SubTexture name="left confirm0000" x="948" y="0" width="228" height="231"/>
|
||||
<SubTexture name="left confirm0001" x="1402" y="228" width="218" height="221" frameX="-5" frameY="-5" frameWidth="228" frameHeight="231"/>
|
||||
<SubTexture name="left confirm0002" x="1402" y="0" width="225" height="221" frameX="-2" frameY="-1" frameWidth="228" frameHeight="231"/>
|
||||
<SubTexture name="left confirm0003" x="1402" y="0" width="225" height="221" frameX="-2" frameY="-1" frameWidth="228" frameHeight="231"/>
|
||||
<SubTexture name="left press0000" x="291" y="392" width="140" height="142" frameX="-3" frameY="-3" frameWidth="146" frameHeight="149"/>
|
||||
<SubTexture name="left press0001" x="291" y="392" width="140" height="142" frameX="-3" frameY="-3" frameWidth="146" frameHeight="149"/>
|
||||
<SubTexture name="left press0002" x="463" y="389" width="146" height="149"/>
|
||||
<SubTexture name="left press0003" x="463" y="389" width="146" height="149"/>
|
||||
<SubTexture name="pruple end hold0000" x="1220" y="447" width="50" height="64"/>
|
||||
<SubTexture name="purple0000" x="630" y="232" width="154" height="157"/>
|
||||
<SubTexture name="purple hold piece0000" x="1420" y="449" width="50" height="44"/>
|
||||
<SubTexture name="red0000" x="476" y="232" width="154" height="157"/>
|
||||
<SubTexture name="red hold end0000" x="1070" y="442" width="50" height="64"/>
|
||||
<SubTexture name="red hold piece0000" x="1270" y="447" width="50" height="44"/>
|
||||
<SubTexture name="right confirm0000" x="1627" y="0" width="223" height="226" frameX="-1" frameY="-3" frameWidth="226" frameHeight="230"/>
|
||||
<SubTexture name="right confirm0001" x="1627" y="226" width="223" height="226" frameX="-1" frameY="-3" frameWidth="226" frameHeight="230"/>
|
||||
<SubTexture name="right confirm0002" x="1176" y="0" width="226" height="230"/>
|
||||
<SubTexture name="right confirm0003" x="1176" y="0" width="226" height="230"/>
|
||||
<SubTexture name="right press0000" x="932" y="442" width="138" height="141" frameX="-3" frameY="-7" frameWidth="148" frameHeight="151"/>
|
||||
<SubTexture name="right press0001" x="932" y="442" width="138" height="141" frameX="-3" frameY="-7" frameWidth="148" frameHeight="151"/>
|
||||
<SubTexture name="right press0002" x="784" y="385" width="148" height="151"/>
|
||||
<SubTexture name="right press0003" x="784" y="385" width="148" height="151"/>
|
||||
<SubTexture name="up confirm0000" x="476" y="0" width="236" height="232"/>
|
||||
<SubTexture name="up confirm0001" x="712" y="0" width="236" height="232"/>
|
||||
<SubTexture name="up confirm0002" x="948" y="231" width="214" height="206" frameX="-11" frameY="-10" frameWidth="236" frameHeight="232"/>
|
||||
<SubTexture name="up confirm0003" x="948" y="231" width="214" height="206" frameX="-11" frameY="-10" frameWidth="236" frameHeight="232"/>
|
||||
<SubTexture name="up press0000" x="609" y="389" width="144" height="141" frameX="-5" frameY="-4" frameWidth="153" frameHeight="150"/>
|
||||
<SubTexture name="up press0001" x="609" y="389" width="144" height="141" frameX="-5" frameY="-4" frameWidth="153" frameHeight="150"/>
|
||||
<SubTexture name="up press0002" x="1850" y="308" width="153" height="150"/>
|
||||
<SubTexture name="up press0003" x="1850" y="308" width="153" height="150"/>
|
||||
<SubTexture name="arrowDOWN0000" x="10" y="255" width="157" height="154"/>
|
||||
<SubTexture name="arrowLEFT0000" x="672" y="416" width="154" height="157"/>
|
||||
<SubTexture name="arrowRIGHT0000" x="10" y="419" width="154" height="157"/>
|
||||
<SubTexture name="arrowUP0000" x="177" y="255" width="157" height="154"/>
|
||||
<SubTexture name="blue alone0000" x="506" y="252" width="157" height="154"/>
|
||||
<SubTexture name="blue hold0000" x="1940" y="306" width="50" height="44"/>
|
||||
<SubTexture name="blue tail0000" x="1940" y="10" width="50" height="64"/>
|
||||
<SubTexture name="down confirm0000" x="10" y="10" width="238" height="235"/>
|
||||
<SubTexture name="down confirm0001" x="258" y="10" width="238" height="235"/>
|
||||
<SubTexture name="down confirm0002" x="1236" y="250" width="220" height="217" frameX="-6" frameY="-12" frameWidth="238" frameHeight="235"/>
|
||||
<SubTexture name="down confirm0003" x="1236" y="250" width="220" height="217" frameX="-6" frameY="-12" frameWidth="238" frameHeight="235"/>
|
||||
<SubTexture name="down press0000" x="1150" y="477" width="142" height="140" frameX="-4" frameY="-2" frameWidth="149" 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 press0002" x="344" y="255" width="149" height="146"/>
|
||||
<SubTexture name="down press0003" x="344" y="255" width="149" height="146"/>
|
||||
<SubTexture name="green alone0000" x="673" y="252" width="157" height="154"/>
|
||||
<SubTexture name="green hold0000" x="1940" y="360" width="50" height="44"/>
|
||||
<SubTexture name="green tail0000" x="1940" y="84" width="50" height="64"/>
|
||||
<SubTexture name="left confirm0000" x="998" y="10" width="228" height="231"/>
|
||||
<SubTexture name="left confirm0001" x="1472" y="248" width="218" height="221" frameX="-5" frameY="-5" frameWidth="228" frameHeight="231"/>
|
||||
<SubTexture name="left confirm0002" x="1472" y="10" width="225" height="228" frameX="-2" frameY="-1" frameWidth="228" frameHeight="231"/>
|
||||
<SubTexture name="left confirm0003" x="1472" y="10" width="225" height="228" frameX="-2" frameY="-1" frameWidth="228" frameHeight="231"/>
|
||||
<SubTexture name="left press0000" x="1302" y="477" width="140" height="142" frameX="-3" 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 press0002" x="840" y="413" width="146" height="149"/>
|
||||
<SubTexture name="left press0003" x="840" y="413" width="146" height="149"/>
|
||||
<SubTexture name="left press0004" x="840" y="413" width="146" height="149"/>
|
||||
<SubTexture name="left press0005" x="840" y="413" width="146" height="149"/>
|
||||
<SubTexture name="left press0006" x="840" y="413" width="146" height="149"/>
|
||||
<SubTexture name="left press0007" x="840" y="413" width="146" height="149"/>
|
||||
<SubTexture name="left press0008" x="840" y="413" width="146" height="149"/>
|
||||
<SubTexture name="left press0009" x="840" y="413" width="146" height="149"/>
|
||||
<SubTexture name="left press0010" x="840" y="413" width="146" height="149"/>
|
||||
<SubTexture name="left press0011" x="840" y="413" width="146" height="149"/>
|
||||
<SubTexture name="left press0012" x="840" y="413" width="146" height="149"/>
|
||||
<SubTexture name="left press0013" x="840" y="413" width="146" height="149"/>
|
||||
<SubTexture name="left press0014" x="840" y="413" width="146" height="149"/>
|
||||
<SubTexture name="left press0015" x="840" y="413" width="146" height="149"/>
|
||||
<SubTexture name="left press0016" x="840" y="413" width="146" height="149"/>
|
||||
<SubTexture name="left press0017" x="840" y="413" width="146" height="149"/>
|
||||
<SubTexture name="left press0018" x="840" y="413" width="146" height="149"/>
|
||||
<SubTexture name="left press0019" x="840" y="413" width="146" height="149"/>
|
||||
<SubTexture name="purple alone0000" x="344" y="416" width="154" height="157"/>
|
||||
<SubTexture name="purple hold0000" x="1940" y="414" width="50" height="44"/>
|
||||
<SubTexture name="purple tail0000" x="1940" y="158" width="50" height="64"/>
|
||||
<SubTexture name="red alone0000" x="508" y="416" width="154" height="157"/>
|
||||
<SubTexture name="red hold0000" x="1940" y="468" width="50" height="44"/>
|
||||
<SubTexture name="red tail0000" x="1940" y="232" width="50" height="64"/>
|
||||
<SubTexture name="right confirm0000" x="1707" y="10" width="223" height="226" frameX="-1" frameY="-3" frameWidth="226" frameHeight="230"/>
|
||||
<SubTexture name="right confirm0001" x="1707" y="246" width="223" height="226" frameX="-1" frameY="-3" frameWidth="226" frameHeight="230"/>
|
||||
<SubTexture name="right confirm0002" x="1236" y="10" width="226" height="230"/>
|
||||
<SubTexture name="right confirm0003" x="1236" y="10" width="226" height="230"/>
|
||||
<SubTexture name="right press0000" x="1452" y="479" width="138" height="141" frameX="-3" frameY="-7" frameWidth="148" frameHeight="151"/>
|
||||
<SubTexture name="right press0001" x="1452" y="479" width="138" height="141" frameX="-3" frameY="-7" frameWidth="148" frameHeight="151"/>
|
||||
<SubTexture name="right press0002" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0003" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0004" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0005" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0006" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0007" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0008" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0009" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0010" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0011" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0012" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0013" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0014" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0015" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0016" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0017" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0018" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0019" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0020" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0021" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0022" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0023" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0024" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0025" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="right press0026" x="840" y="252" width="148" height="151"/>
|
||||
<SubTexture name="up confirm0000" x="506" y="10" width="236" height="232"/>
|
||||
<SubTexture name="up confirm0001" x="752" y="10" width="236" height="232"/>
|
||||
<SubTexture name="up confirm0002" x="998" y="251" width="214" height="211" frameX="-11" frameY="-10" frameWidth="236" frameHeight="232"/>
|
||||
<SubTexture name="up confirm0003" x="998" y="251" width="214" height="211" frameX="-11" frameY="-10" frameWidth="236" frameHeight="232"/>
|
||||
<SubTexture name="up press0000" x="996" y="472" width="144" height="141" frameX="-5" frameY="-4" frameWidth="153" frameHeight="150"/>
|
||||
<SubTexture name="up press0001" x="996" y="472" width="144" height="141" frameX="-5" frameY="-4" frameWidth="153" frameHeight="150"/>
|
||||
<SubTexture name="up press0002" x="174" y="419" width="153" height="150"/>
|
||||
<SubTexture name="up press0003" x="174" y="419" width="153" height="150"/>
|
||||
</TextureAtlas>
|
||||
|
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 726 KiB |
@ -1,109 +1,109 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TextureAtlas imagePath="Monster_Assets.png">
|
||||
<!-- Created with Adobe Animate version 20.0.0.17400 -->
|
||||
<!-- http://www.adobe.com/products/animate.html -->
|
||||
<SubTexture name="Monster Right note0000" x="0" y="0" width="375" height="674" frameX="-4" frameY="0" frameWidth="381" frameHeight="674"/>
|
||||
<SubTexture name="Monster Right note0001" x="0" y="0" width="375" height="674" frameX="-4" frameY="0" frameWidth="381" frameHeight="674"/>
|
||||
<SubTexture name="Monster Right note0002" x="385" y="0" width="381" height="671" frameX="0" frameY="0" frameWidth="381" frameHeight="674"/>
|
||||
<SubTexture name="Monster Right note0003" x="385" y="0" width="381" height="671" frameX="0" frameY="0" frameWidth="381" frameHeight="674"/>
|
||||
<SubTexture name="Monster Right note0004" x="776" y="0" width="381" height="671" frameX="0" frameY="0" frameWidth="381" frameHeight="674"/>
|
||||
<SubTexture name="Monster Right note0005" x="776" y="0" width="381" height="671" frameX="0" frameY="0" frameWidth="381" frameHeight="674"/>
|
||||
<SubTexture name="Monster Right note0006" x="1167" y="0" width="381" height="671" frameX="0" frameY="0" frameWidth="381" frameHeight="674"/>
|
||||
<SubTexture name="Monster Right note0007" x="1167" y="0" width="381" height="671" frameX="0" frameY="0" frameWidth="381" frameHeight="674"/>
|
||||
<SubTexture name="Monster Right note0008" x="1558" y="0" width="381" height="671" frameX="0" frameY="0" frameWidth="381" frameHeight="674"/>
|
||||
<SubTexture name="Monster Right note0009" x="1558" y="0" width="381" height="671" frameX="0" frameY="0" frameWidth="381" frameHeight="674"/>
|
||||
<SubTexture name="Monster Right note0010" x="1949" y="0" width="381" height="671" frameX="0" frameY="0" frameWidth="381" frameHeight="674"/>
|
||||
<SubTexture name="Monster Right note0011" x="1949" y="0" width="381" height="671" frameX="0" frameY="0" frameWidth="381" frameHeight="674"/>
|
||||
<SubTexture name="Monster Right note0012" x="2340" y="0" width="381" height="671" frameX="0" frameY="0" frameWidth="381" frameHeight="674"/>
|
||||
<SubTexture name="Monster Right note0013" x="2340" y="0" width="381" height="671" frameX="0" frameY="0" frameWidth="381" frameHeight="674"/>
|
||||
<SubTexture name="Monster Right note0014" x="385" y="0" width="381" height="671" frameX="0" frameY="0" frameWidth="381" frameHeight="674"/>
|
||||
<SubTexture name="Monster left note0000" x="2731" y="0" width="460" height="671" frameX="-15" frameY="0" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0001" x="2731" y="0" width="460" height="671" frameX="-15" frameY="0" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0002" x="3201" y="0" width="471" height="668" frameX="0" frameY="-5" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0003" x="3201" y="0" width="471" height="668" frameX="0" frameY="-5" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0004" x="0" y="684" width="471" height="668" frameX="0" frameY="-5" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0005" x="0" y="684" width="471" height="668" frameX="0" frameY="-5" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0006" x="481" y="684" width="471" height="668" frameX="0" frameY="-5" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0007" x="481" y="684" width="471" height="668" frameX="0" frameY="-5" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0008" x="962" y="684" width="471" height="668" frameX="0" frameY="-5" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0009" x="962" y="684" width="471" height="668" frameX="0" frameY="-5" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0010" x="1443" y="684" width="471" height="668" frameX="0" frameY="-5" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0011" x="1443" y="684" width="471" height="668" frameX="0" frameY="-5" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0012" x="1924" y="684" width="471" height="668" frameX="0" frameY="-5" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0013" x="1924" y="684" width="471" height="668" frameX="0" frameY="-5" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0014" x="3201" y="0" width="471" height="668" frameX="0" frameY="-5" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0015" x="3201" y="0" width="471" height="668" frameX="0" frameY="-5" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0016" x="0" y="684" width="471" height="668" frameX="0" frameY="-5" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0017" x="0" y="684" width="471" height="668" frameX="0" frameY="-5" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0018" x="481" y="684" width="471" height="668" frameX="0" frameY="-5" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="Monster left note0019" x="481" y="684" width="471" height="668" frameX="0" frameY="-5" frameWidth="475" frameHeight="673"/>
|
||||
<SubTexture name="monster down0000" x="2405" y="684" width="428" height="599" frameX="-12" frameY="-35" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0001" x="2405" y="684" width="428" height="599" frameX="-12" frameY="-35" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0002" x="2843" y="684" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0003" x="2843" y="684" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0004" x="3287" y="684" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0005" x="3287" y="684" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0006" x="0" y="1362" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0007" x="0" y="1362" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0008" x="444" y="1362" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0009" x="444" y="1362" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0010" x="888" y="1362" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0011" x="888" y="1362" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0012" x="1332" y="1362" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0013" x="1332" y="1362" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0014" x="2843" y="684" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0015" x="2843" y="684" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0016" x="3287" y="684" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0017" x="3287" y="684" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0018" x="0" y="1362" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0019" x="0" y="1362" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0020" x="444" y="1362" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0021" x="444" y="1362" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0022" x="888" y="1362" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0023" x="888" y="1362" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0024" x="1332" y="1362" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0025" x="1332" y="1362" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0026" x="2843" y="684" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0027" x="2843" y="684" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0028" x="3287" y="684" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster down0029" x="3287" y="684" width="434" height="633" frameX="0" frameY="0" frameWidth="440" frameHeight="634"/>
|
||||
<SubTexture name="monster idle0000" x="1776" y="1362" width="424" height="604" frameX="-46" frameY="-73" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0001" x="1776" y="1362" width="424" height="604" frameX="-46" frameY="-73" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0002" x="2210" y="1362" width="422" height="605" frameX="-49" frameY="-69" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0003" x="2210" y="1362" width="422" height="605" frameX="-49" frameY="-69" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0004" x="2642" y="1362" width="439" height="610" frameX="-38" frameY="-61" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0005" x="3091" y="1362" width="439" height="630" frameX="-38" frameY="-41" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0006" x="3540" y="1362" width="481" height="661" frameX="-3" frameY="-11" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0007" x="3540" y="1362" width="481" height="661" frameX="-3" frameY="-11" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0008" x="0" y="2033" width="484" height="670" frameX="0" frameY="-3" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0009" x="0" y="2033" width="484" height="670" frameX="0" frameY="-3" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0010" x="494" y="2033" width="484" height="673" frameX="0" frameY="0" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0011" x="494" y="2033" width="484" height="673" frameX="0" frameY="0" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0012" x="988" y="2033" width="484" height="673" frameX="0" frameY="0" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0013" x="988" y="2033" width="484" height="673" frameX="0" frameY="0" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0014" x="1482" y="2033" width="484" height="673" frameX="0" frameY="0" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster up note0000" x="1976" y="2033" width="410" height="714" frameX="-7" frameY="0" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0001" x="1976" y="2033" width="410" height="714" frameX="-7" frameY="0" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0002" x="2396" y="2033" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0003" x="2396" y="2033" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0004" x="2824" y="2033" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0005" x="2824" y="2033" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0006" x="3252" y="2033" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0007" x="3252" y="2033" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0008" x="0" y="2757" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0009" x="0" y="2757" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0010" x="428" y="2757" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0011" x="428" y="2757" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0012" x="856" y="2757" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0013" x="856" y="2757" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0014" x="2396" y="2033" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0015" x="2396" y="2033" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0016" x="2824" y="2033" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0017" x="2824" y="2033" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0018" x="3252" y="2033" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0019" x="3252" y="2033" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0020" x="0" y="2757" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0021" x="0" y="2757" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0022" x="428" y="2757" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
<SubTexture name="monster up note0023" x="428" y="2757" width="418" height="711" frameX="0" frameY="-9" frameWidth="418" frameHeight="720"/>
|
||||
</TextureAtlas>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TextureAtlas imagePath="Monster_Assets.png">
|
||||
<!-- Created with Adobe Animate version 21.0.0.35450 -->
|
||||
<!-- http://www.adobe.com/products/animate.html -->
|
||||
<SubTexture name="Monster Right note0000" x="0" y="0" width="375" height="691" frameX="-4" frameY="0" frameWidth="381" frameHeight="691"/>
|
||||
<SubTexture name="Monster Right note0001" x="0" y="0" width="375" height="691" frameX="-4" frameY="0" frameWidth="381" frameHeight="691"/>
|
||||
<SubTexture name="Monster Right note0002" x="385" y="0" width="381" height="680" frameX="0" frameY="-8" frameWidth="381" frameHeight="691"/>
|
||||
<SubTexture name="Monster Right note0003" x="776" y="0" width="381" height="679" frameX="0" frameY="-9" frameWidth="381" frameHeight="691"/>
|
||||
<SubTexture name="Monster Right note0004" x="1167" y="0" width="381" height="680" frameX="0" frameY="-8" frameWidth="381" frameHeight="691"/>
|
||||
<SubTexture name="Monster Right note0005" x="1558" y="0" width="381" height="679" frameX="0" frameY="-9" frameWidth="381" frameHeight="691"/>
|
||||
<SubTexture name="Monster Right note0006" x="1949" y="0" width="381" height="680" frameX="0" frameY="-8" frameWidth="381" frameHeight="691"/>
|
||||
<SubTexture name="Monster Right note0007" x="2340" y="0" width="381" height="679" frameX="0" frameY="-9" frameWidth="381" frameHeight="691"/>
|
||||
<SubTexture name="Monster Right note0008" x="2731" y="0" width="381" height="680" frameX="0" frameY="-8" frameWidth="381" frameHeight="691"/>
|
||||
<SubTexture name="Monster Right note0009" x="3122" y="0" width="381" height="679" frameX="0" frameY="-9" frameWidth="381" frameHeight="691"/>
|
||||
<SubTexture name="Monster Right note0010" x="3513" y="0" width="381" height="680" frameX="0" frameY="-8" frameWidth="381" frameHeight="691"/>
|
||||
<SubTexture name="Monster Right note0011" x="3904" y="0" width="381" height="679" frameX="0" frameY="-9" frameWidth="381" frameHeight="691"/>
|
||||
<SubTexture name="Monster Right note0012" x="4295" y="0" width="381" height="680" frameX="0" frameY="-8" frameWidth="381" frameHeight="691"/>
|
||||
<SubTexture name="Monster Right note0013" x="4686" y="0" width="381" height="679" frameX="0" frameY="-9" frameWidth="381" frameHeight="691"/>
|
||||
<SubTexture name="Monster Right note0014" x="385" y="0" width="381" height="680" frameX="0" frameY="-8" frameWidth="381" frameHeight="691"/>
|
||||
<SubTexture name="Monster left note0000" x="5077" y="0" width="460" height="675" frameX="-15" frameY="0" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0001" x="5077" y="0" width="460" height="675" frameX="-15" frameY="0" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0002" x="5547" y="0" width="471" height="669" frameX="0" frameY="-8" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0003" x="6028" y="0" width="471" height="669" frameX="0" frameY="-8" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0004" x="6509" y="0" width="471" height="669" frameX="0" frameY="-8" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0005" x="6990" y="0" width="471" height="669" frameX="0" frameY="-8" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0006" x="7471" y="0" width="471" height="669" frameX="0" frameY="-8" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0007" x="0" y="701" width="471" height="669" frameX="0" frameY="-8" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0008" x="481" y="701" width="471" height="669" frameX="0" frameY="-8" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0009" x="962" y="701" width="471" height="669" frameX="0" frameY="-8" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0010" x="1443" y="701" width="471" height="669" frameX="0" frameY="-8" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0011" x="1924" y="701" width="471" height="669" frameX="0" frameY="-8" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0012" x="2405" y="701" width="471" height="669" frameX="0" frameY="-8" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0013" x="2886" y="701" width="471" height="669" frameX="0" frameY="-8" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0014" x="5547" y="0" width="471" height="669" frameX="0" frameY="-8" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0015" x="6028" y="0" width="471" height="669" frameX="0" frameY="-8" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0016" x="6509" y="0" width="471" height="669" frameX="0" frameY="-8" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0017" x="6990" y="0" width="471" height="669" frameX="0" frameY="-8" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0018" x="7471" y="0" width="471" height="669" frameX="0" frameY="-8" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="Monster left note0019" x="0" y="701" width="471" height="669" frameX="0" frameY="-8" frameWidth="475" frameHeight="677"/>
|
||||
<SubTexture name="monster down0000" x="3367" y="701" width="428" height="571" frameX="-12" frameY="-18" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0001" x="3367" y="701" width="428" height="571" frameX="-12" frameY="-18" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0002" x="3805" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0003" x="4249" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0004" x="4693" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0005" x="5137" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0006" x="5581" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0007" x="6025" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0008" x="6469" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0009" x="6913" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0010" x="7357" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0011" x="0" y="1380" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0012" x="444" y="1380" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0013" x="888" y="1380" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0014" x="3805" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0015" x="4249" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0016" x="4693" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0017" x="5137" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0018" x="5581" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0019" x="6025" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0020" x="6469" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0021" x="6913" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0022" x="4249" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0023" x="4249" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0024" x="6913" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0025" x="6913" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0026" x="4249" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0027" x="4249" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0028" x="6913" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster down0029" x="6913" y="701" width="434" height="588" frameX="0" frameY="0" frameWidth="440" frameHeight="589"/>
|
||||
<SubTexture name="monster idle0000" x="1332" y="1380" width="424" height="603" frameX="-46" frameY="-74" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0001" x="1766" y="1380" width="424" height="602" frameX="-46" frameY="-75" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0002" x="2200" y="1380" width="422" height="607" frameX="-49" frameY="-67" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0003" x="2632" y="1380" width="422" height="607" frameX="-49" frameY="-67" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0004" x="3064" y="1380" width="439" height="610" frameX="-38" frameY="-61" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0005" x="3513" y="1380" width="439" height="630" frameX="-38" frameY="-41" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0006" x="3962" y="1380" width="481" height="660" frameX="-3" frameY="-12" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0007" x="4453" y="1380" width="481" height="660" frameX="-3" frameY="-12" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0008" x="4944" y="1380" width="484" height="671" frameX="0" frameY="-2" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0009" x="5438" y="1380" width="484" height="671" frameX="0" frameY="-2" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0010" x="5932" y="1380" width="484" height="673" frameX="0" frameY="0" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0011" x="6426" y="1380" width="484" height="673" frameX="0" frameY="0" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0012" x="6920" y="1380" width="484" height="673" frameX="0" frameY="0" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0013" x="7414" y="1380" width="484" height="673" frameX="0" frameY="0" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster idle0014" x="0" y="2063" width="484" height="673" frameX="0" frameY="0" frameWidth="484" frameHeight="677"/>
|
||||
<SubTexture name="monster up note0000" x="494" y="2063" width="410" height="753" frameX="-7" frameY="0" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0001" x="494" y="2063" width="410" height="753" frameX="-7" frameY="0" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0002" x="914" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0003" x="1342" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0004" x="1770" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0005" x="2198" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0006" x="2626" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0007" x="3054" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0008" x="3482" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0009" x="3910" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0010" x="4338" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0011" x="4766" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0012" x="5194" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0013" x="5622" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0014" x="914" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0015" x="1342" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0016" x="1770" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0017" x="2198" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0018" x="2626" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0019" x="3054" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0020" x="3482" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0021" x="3910" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0022" x="4338" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
<SubTexture name="monster up note0023" x="4766" y="2063" width="418" height="721" frameX="0" frameY="-38" frameWidth="418" frameHeight="759"/>
|
||||
</TextureAtlas>
|
||||
|
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
@ -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
@ -0,0 +1,3 @@
|
||||
firstDeath 0 0
|
||||
deathLoop -30 -12
|
||||
deathConfirm -30 -12
|
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
@ -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"?>
|
||||
<TextureAtlas imagePath="bfPixelsDEAD.png">
|
||||
<!-- Created with Adobe Animate version 20.0.0.17400 -->
|
||||
<!-- http://www.adobe.com/products/animate.html -->
|
||||
<!-- if you read this you're epic. -->
|
||||
<!-- 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 pixel0001" x="100" 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 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 pixel0056" x="696" y="450" width="77" height="76"/>
|
||||
<SubTexture name="BF Dies pixel0057" 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="691" y="448" width="90" height="81"/>
|
||||
<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 CONFIRM0002" x="687" y="273" width="77" height="76"/>
|
||||
|
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
@ -0,0 +1,2 @@
|
||||
danceLeft 0 0
|
||||
danceRight 0 0
|
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
@ -0,0 +1,2 @@
|
||||
danceLeft 0 0
|
||||
danceRight 0 0
|
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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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/SNAP.mp3
Normal file
5
assets/sm/HOW TO ADD SM FILES.txt
Normal file
@ -0,0 +1,5 @@
|
||||
Put both the .sm and .ogg in the same folder and put the folder in this folder. Launch the game and go into freeplay, it'll load into the song list.
|
||||
|
||||
Limitations:
|
||||
- You can only use songs that have one difficulty, so if a song has more than one. Remove all but the one you want to play. (it doesn't matter if it's challenge or what ever)
|
||||
- The song must be a .ogg
|
@ -26,7 +26,7 @@ hr {
|
||||
<p id="HtmlIsTheWorstThingIHaveEverUsed">
|
||||
<a class="headerlink" href="{{site.url}}changelogs/">Changelogs</a>
|
||||
<a class="headerlink" href="{{site.url}}building">Building</a>
|
||||
<a class="headerlink" href="https://github.com/KadeDev/Kade-Engine/wiki/">Modchart Documentation</a>
|
||||
<a class="headerlink" href="https://github.com/KadeDev/Kade-Engine/wiki/">Modcharts</a>
|
||||
<a class="headerlink" href="{{site.url}}guides">Guides</a>
|
||||
<br>
|
||||
<hr>
|
||||
|
@ -30,26 +30,19 @@
|
||||
- `haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc`
|
||||
- `haxelib install actuate`
|
||||
- `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)
|
||||
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 v141 - VS 2017 C++ x64/x86 build tools
|
||||
- Windows SDK (10.0.17763.0)
|
||||
- C++ Profiling tools
|
||||
- C++ CMake tools for windows
|
||||
- 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.)
|
||||
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/).
|
||||
|
17
docs/changelogs/changelog-1.5.4.md
Normal file
@ -0,0 +1,17 @@
|
||||
# Latest (master) changelog
|
||||
|
||||
Changes marked with 💖 will be listed in the short version of the changelog in `version.downloadMe`.
|
||||
|
||||
### Additions
|
||||
- Controller Support (💖)
|
||||
|
||||
### Changes
|
||||
- KeyBinds don't effect menu screen options anymore.
|
||||
- Updated some image assets
|
||||
- Fixed spookeez audio sync
|
||||
|
||||
### Bugfixes
|
||||
- Fixed Input Drops/Disappering Notes (💖)
|
||||
- Fixed HitGraph/Result Screen bugs
|
||||
- Fixed the chart editor
|
||||
- Fixed HTML5 Build issues
|
35
docs/changelogs/changelog-1.6.md
Normal file
@ -0,0 +1,35 @@
|
||||
# Latest (master) changelog
|
||||
|
||||
Changes marked with 💖 will be listed in the short version of the changelog in `version.downloadMe`.
|
||||
|
||||
### Additions
|
||||
- 💖 Full reworked charter
|
||||
- Note quantization
|
||||
- 💖 BPM Changes & Scroll Speed Change Support
|
||||
- 💖 StepMania File Format support
|
||||
- Anti-Aliasing option for low end pc's
|
||||
- 💖 Pre-loading for characters option
|
||||
- New Logo
|
||||
- 💖 New Main Menu Remix
|
||||
- 💖 Difficulty Calculator
|
||||
- Week Locking
|
||||
- Character Offset Files
|
||||
- Many new options
|
||||
|
||||
### Changes
|
||||
- Reworked Health Drain to be harsher
|
||||
- 💖 Held notes being weird as fuck (completely reworked them)
|
||||
- Many beat based things actually go to the beat (blue balls, title screen, etc)
|
||||
- Losing Icon for Father Dearest & Mommy Mearest together
|
||||
|
||||
### Bugfixes
|
||||
- BF Animation ending too early
|
||||
- Held note end fix (this made me mad)
|
||||
- Up arrow having a 8 pixels next to it
|
||||
- Stop crashes with "R"
|
||||
- Fixed dropped inputs for stacked notes.
|
||||
- Fixed multiple crashes
|
||||
- Fixed spirit being weird
|
||||
- Fixed a lot of desyncs
|
||||
- Ghost Tapping works now
|
||||
- Pressing 7 while dying no longer freezes you in time.
|
@ -15,8 +15,10 @@ Scroll down to Line 26, or Search (Windows/Linux: `Ctrl+F`, Mac: `Cmd+F`) for "w
|
||||
---
|
||||
|
||||
```haxe
|
||||
var weekData:Array<Dynamic> = [
|
||||
|
||||
static function weekData():Array<Dynamic>
|
||||
{
|
||||
return [
|
||||
|
||||
['Tutorial'],
|
||||
|
||||
['Bopeebo', 'Fresh', 'Dadbattle'],
|
||||
@ -30,8 +32,9 @@ var weekData:Array<Dynamic> = [
|
||||
['Cocoa', 'Eggnog', 'Winter-Horrorland'],
|
||||
|
||||
['Senpai', 'Roses', 'Thorns']
|
||||
|
||||
];
|
||||
|
||||
];
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
@ -45,8 +48,10 @@ Example
|
||||
---
|
||||
|
||||
```haxe
|
||||
var weekData:Array<Dynamic> = [
|
||||
|
||||
static function weekData():Array<Dynamic>
|
||||
{
|
||||
return [
|
||||
|
||||
['Tutorial'],
|
||||
|
||||
['Bopeebo', 'Fresh', 'Dadbattle'],
|
||||
@ -58,12 +63,13 @@ var weekData:Array<Dynamic> = [
|
||||
['Satin-Panties', "High", "Milf"],
|
||||
|
||||
['Cocoa', 'Eggnog', 'Winter-Horrorland'],
|
||||
|
||||
|
||||
['Senpai', 'Roses', 'Thorns'],
|
||||
|
||||
['Ugh', 'Guns', 'Stress']
|
||||
|
||||
];
|
||||
|
||||
];
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
@ -103,32 +109,21 @@ var weekCharacters:Array<Dynamic> = [
|
||||
|
||||
### 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
|
||||
---
|
||||
|
||||
---
|
||||
```haxe
|
||||
var weekNames:Array<String> = [
|
||||
|
||||
"How to Funk",
|
||||
|
||||
"Daddy dearest",
|
||||
|
||||
"Spooky Month",
|
||||
|
||||
"PICO",
|
||||
|
||||
"Mommy Must Murder",
|
||||
|
||||
"Red Snow",
|
||||
|
||||
"Hating Simulator ft. Moawlings",
|
||||
|
||||
"Tankman"
|
||||
|
||||
];
|
||||
```
|
||||
Tutorial
|
||||
Daddy Dearest
|
||||
Spooky Month
|
||||
PICO
|
||||
MOMMY MUST MURDER
|
||||
RED SNOW
|
||||
Hating Simulator ft. Moawling
|
||||
TANKMAN
|
||||
```
|
||||
|
||||
---
|
||||
@ -137,22 +132,29 @@ var weekNames:Array<String> = [
|
||||
|
||||
### 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
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||
|
||||
---
|
||||
|
||||
 \* *for this screenshot I removed tankman from weekCharacters as it would crash because I don't have a tankman character added*
|
||||
### Conclusion
|
||||
|
||||
If you followed all of the steps correctly, you have successfully created a new week in the Story Mode.
|
||||
|
@ -44,8 +44,14 @@ class Alphabet extends FlxSpriteGroup
|
||||
|
||||
var isBold:Bool = false;
|
||||
|
||||
var pastX:Float = 0;
|
||||
var pastY:Float = 0;
|
||||
|
||||
public function new(x:Float, y:Float, text:String = "", ?bold:Bool = false, typed:Bool = false, shouldMove:Bool = false)
|
||||
{
|
||||
pastX = x;
|
||||
pastY = y;
|
||||
|
||||
super(x, y);
|
||||
|
||||
_finalText = text;
|
||||
@ -66,6 +72,24 @@ class Alphabet extends FlxSpriteGroup
|
||||
}
|
||||
}
|
||||
|
||||
public function reType(text)
|
||||
{
|
||||
for (i in listOAlphabets)
|
||||
remove(i);
|
||||
_finalText = text;
|
||||
this.text = text;
|
||||
|
||||
lastSprite = null;
|
||||
|
||||
updateHitbox();
|
||||
|
||||
listOAlphabets.clear();
|
||||
x = pastX;
|
||||
y = pastY;
|
||||
|
||||
addText();
|
||||
}
|
||||
|
||||
public function addText()
|
||||
{
|
||||
doSplitWords();
|
||||
@ -254,8 +278,10 @@ class AlphaCharacter extends FlxSprite
|
||||
super(x, y);
|
||||
var tex = Paths.getSparrowAtlas('alphabet');
|
||||
frames = tex;
|
||||
|
||||
antialiasing = true;
|
||||
if(FlxG.save.data.antialiasing)
|
||||
{
|
||||
antialiasing = true;
|
||||
}
|
||||
}
|
||||
|
||||
public function createBold(letter:String)
|
||||
|
@ -118,6 +118,9 @@ class AnimationDebug extends FlxState
|
||||
if (FlxG.keys.justPressed.Q)
|
||||
FlxG.camera.zoom -= 0.25;
|
||||
|
||||
if (FlxG.keys.justPressed.F)
|
||||
char.flipX = !char.flipX;
|
||||
|
||||
if (FlxG.keys.pressed.I || FlxG.keys.pressed.J || FlxG.keys.pressed.K || FlxG.keys.pressed.L)
|
||||
{
|
||||
if (FlxG.keys.pressed.I)
|
||||
|
@ -1,5 +1,6 @@
|
||||
package;
|
||||
|
||||
import flixel.FlxG;
|
||||
import flixel.FlxSprite;
|
||||
import flixel.graphics.frames.FlxAtlasFrames;
|
||||
|
||||
@ -13,7 +14,10 @@ class BackgroundDancer extends FlxSprite
|
||||
animation.addByIndices('danceLeft', 'bg dancer sketch PINK', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false);
|
||||
animation.addByIndices('danceRight', 'bg dancer sketch PINK', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false);
|
||||
animation.play('danceLeft');
|
||||
antialiasing = true;
|
||||
if(FlxG.save.data.antialiasing)
|
||||
{
|
||||
antialiasing = true;
|
||||
}
|
||||
}
|
||||
|
||||
var danceDir:Bool = false;
|
||||
|
@ -1,10 +1,20 @@
|
||||
#if sys
|
||||
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 flixel.tweens.FlxEase;
|
||||
import flixel.tweens.FlxTween;
|
||||
#if cpp
|
||||
import sys.FileSystem;
|
||||
import sys.io.File;
|
||||
#end
|
||||
import flixel.FlxG;
|
||||
import flixel.FlxSprite;
|
||||
import flixel.addons.transition.FlxTransitionSprite.GraphicTransTileDiamond;
|
||||
@ -22,107 +32,152 @@ using StringTools;
|
||||
|
||||
class Caching extends MusicBeatState
|
||||
{
|
||||
var toBeDone = 0;
|
||||
var done = 0;
|
||||
var toBeDone = 0;
|
||||
var done = 0;
|
||||
|
||||
var loaded = false;
|
||||
|
||||
var text:FlxText;
|
||||
var kadeLogo:FlxSprite;
|
||||
|
||||
public static var bitmapData:Map<String,FlxGraphic>;
|
||||
|
||||
var images = [];
|
||||
var music = [];
|
||||
var charts = [];
|
||||
|
||||
var text:FlxText;
|
||||
var kadeLogo:FlxSprite;
|
||||
|
||||
override function create()
|
||||
{
|
||||
FlxG.mouse.visible = false;
|
||||
|
||||
FlxG.worldBounds.set(0,0);
|
||||
FlxG.save.bind('funkin', 'ninjamuffin99');
|
||||
|
||||
text = new FlxText(FlxG.width / 2, FlxG.height / 2 + 300,0,"Loading...");
|
||||
text.size = 34;
|
||||
text.alignment = FlxTextAlign.CENTER;
|
||||
text.alpha = 0;
|
||||
PlayerSettings.init();
|
||||
|
||||
kadeLogo = new FlxSprite(FlxG.width / 2, FlxG.height / 2).loadGraphic(Paths.image('KadeEngineLogo'));
|
||||
kadeLogo.x -= kadeLogo.width / 2;
|
||||
kadeLogo.y -= kadeLogo.height / 2 + 100;
|
||||
text.y -= kadeLogo.height / 2 - 125;
|
||||
text.x -= 170;
|
||||
kadeLogo.setGraphicSize(Std.int(kadeLogo.width * 0.6));
|
||||
KadeEngineData.initSave();
|
||||
|
||||
kadeLogo.alpha = 0;
|
||||
FlxG.mouse.visible = false;
|
||||
|
||||
add(kadeLogo);
|
||||
add(text);
|
||||
FlxG.worldBounds.set(0,0);
|
||||
|
||||
trace('starting caching..');
|
||||
|
||||
sys.thread.Thread.create(() -> {
|
||||
cache();
|
||||
});
|
||||
bitmapData = new Map<String,FlxGraphic>();
|
||||
|
||||
text = new FlxText(FlxG.width / 2, FlxG.height / 2 + 300,0,"Loading...");
|
||||
text.size = 34;
|
||||
text.alignment = FlxTextAlign.CENTER;
|
||||
text.alpha = 0;
|
||||
|
||||
kadeLogo = new FlxSprite(FlxG.width / 2, FlxG.height / 2).loadGraphic(Paths.image('KadeEngineLogo'));
|
||||
kadeLogo.x -= kadeLogo.width / 2;
|
||||
kadeLogo.y -= kadeLogo.height / 2 + 100;
|
||||
text.y -= kadeLogo.height / 2 - 125;
|
||||
text.x -= 170;
|
||||
kadeLogo.setGraphicSize(Std.int(kadeLogo.width * 0.6));
|
||||
kadeLogo.antialiasing = true;
|
||||
|
||||
kadeLogo.alpha = 0;
|
||||
|
||||
#if cpp
|
||||
if (FlxG.save.data.cacheImages)
|
||||
{
|
||||
trace("caching images...");
|
||||
|
||||
for (i in FileSystem.readDirectory(FileSystem.absolutePath("assets/shared/images/characters")))
|
||||
{
|
||||
if (!i.endsWith(".png"))
|
||||
continue;
|
||||
images.push(i);
|
||||
}
|
||||
}
|
||||
|
||||
trace("caching music...");
|
||||
|
||||
for (i in FileSystem.readDirectory(FileSystem.absolutePath("assets/songs")))
|
||||
{
|
||||
music.push(i);
|
||||
}
|
||||
#end
|
||||
|
||||
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..');
|
||||
|
||||
#if cpp
|
||||
// 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();
|
||||
});
|
||||
#end
|
||||
|
||||
super.create();
|
||||
}
|
||||
|
||||
var calledDone = false;
|
||||
|
||||
override function update(elapsed)
|
||||
{
|
||||
super.update(elapsed);
|
||||
}
|
||||
|
||||
|
||||
super.create();
|
||||
}
|
||||
function cache()
|
||||
{
|
||||
trace("LOADING: " + toBeDone + " OBJECTS.");
|
||||
|
||||
var calledDone = false;
|
||||
for (i in images)
|
||||
{
|
||||
var replaced = i.replace(".png","");
|
||||
var data:BitmapData = BitmapData.fromFile("assets/shared/images/characters/" + i);
|
||||
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++;
|
||||
}
|
||||
|
||||
override function update(elapsed)
|
||||
{
|
||||
|
||||
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);
|
||||
}
|
||||
for (i in music)
|
||||
{
|
||||
FlxG.sound.cache(Paths.inst(i));
|
||||
FlxG.sound.cache(Paths.voices(i));
|
||||
trace("cached " + i);
|
||||
done++;
|
||||
}
|
||||
|
||||
|
||||
function cache()
|
||||
{
|
||||
trace("Finished caching...");
|
||||
|
||||
var images = [];
|
||||
var music = [];
|
||||
loaded = true;
|
||||
|
||||
trace("caching images...");
|
||||
trace(Assets.cache.hasBitmapData('GF_assets'));
|
||||
|
||||
for (i in FileSystem.readDirectory(FileSystem.absolutePath("assets/shared/images/characters")))
|
||||
{
|
||||
if (!i.endsWith(".png"))
|
||||
continue;
|
||||
images.push(i);
|
||||
}
|
||||
FlxG.switchState(new TitleState());
|
||||
}
|
||||
|
||||
trace("caching music...");
|
||||
|
||||
for (i in FileSystem.readDirectory(FileSystem.absolutePath("assets/songs")))
|
||||
{
|
||||
music.push(i);
|
||||
}
|
||||
|
||||
toBeDone = Lambda.count(images) + Lambda.count(music);
|
||||
|
||||
trace("LOADING: " + toBeDone + " OBJECTS.");
|
||||
|
||||
for (i in images)
|
||||
{
|
||||
var replaced = i.replace(".png","");
|
||||
FlxG.bitmap.add(Paths.image("characters/" + replaced,"shared"));
|
||||
trace("cached " + replaced);
|
||||
done++;
|
||||
}
|
||||
|
||||
for (i in music)
|
||||
{
|
||||
FlxG.sound.cache(Paths.inst(i));
|
||||
FlxG.sound.cache(Paths.voices(i));
|
||||
trace("cached " + i);
|
||||
done++;
|
||||
}
|
||||
|
||||
trace("Finished caching...");
|
||||
|
||||
FlxG.switchState(new TitleState());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
#end
|
@ -26,13 +26,16 @@ class Character extends FlxSprite
|
||||
this.isPlayer = isPlayer;
|
||||
|
||||
var tex:FlxAtlasFrames;
|
||||
antialiasing = true;
|
||||
if(FlxG.save.data.antialiasing)
|
||||
{
|
||||
antialiasing = true;
|
||||
}
|
||||
|
||||
switch (curCharacter)
|
||||
{
|
||||
case 'gf':
|
||||
// GIRLFRIEND CODE
|
||||
tex = Paths.getSparrowAtlas('characters/GF_assets');
|
||||
tex = Paths.getSparrowAtlas('GF_assets','shared',true);
|
||||
frames = tex;
|
||||
animation.addByPrefix('cheer', 'GF Cheer', 24, false);
|
||||
animation.addByPrefix('singLEFT', 'GF left note', 24, false);
|
||||
@ -46,24 +49,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.addByPrefix('scared', 'GF FEAR', 24);
|
||||
|
||||
addOffset('cheer');
|
||||
addOffset('sad', -2, -2);
|
||||
addOffset('danceLeft', 0, -9);
|
||||
addOffset('danceRight', 0, -9);
|
||||
|
||||
addOffset("singUP", 0, 4);
|
||||
addOffset("singRIGHT", 0, -20);
|
||||
addOffset("singLEFT", 0, -19);
|
||||
addOffset("singDOWN", 0, -20);
|
||||
addOffset('hairBlow', 45, -8);
|
||||
addOffset('hairFall', 0, -9);
|
||||
|
||||
addOffset('scared', -2, -17);
|
||||
loadOffsetFile(curCharacter);
|
||||
|
||||
playAnim('danceRight');
|
||||
|
||||
case 'gf-christmas':
|
||||
tex = Paths.getSparrowAtlas('characters/gfChristmas');
|
||||
tex = Paths.getSparrowAtlas('gfChristmas','shared',true);
|
||||
frames = tex;
|
||||
animation.addByPrefix('cheer', 'GF Cheer', 24, false);
|
||||
animation.addByPrefix('singLEFT', 'GF left note', 24, false);
|
||||
@ -77,44 +68,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.addByPrefix('scared', 'GF FEAR', 24);
|
||||
|
||||
addOffset('cheer');
|
||||
addOffset('sad', -2, -2);
|
||||
addOffset('danceLeft', 0, -9);
|
||||
addOffset('danceRight', 0, -9);
|
||||
|
||||
addOffset("singUP", 0, 4);
|
||||
addOffset("singRIGHT", 0, -20);
|
||||
addOffset("singLEFT", 0, -19);
|
||||
addOffset("singDOWN", 0, -20);
|
||||
addOffset('hairBlow', 45, -8);
|
||||
addOffset('hairFall', 0, -9);
|
||||
|
||||
addOffset('scared', -2, -17);
|
||||
loadOffsetFile(curCharacter);
|
||||
|
||||
playAnim('danceRight');
|
||||
|
||||
case 'gf-car':
|
||||
tex = Paths.getSparrowAtlas('characters/gfCar');
|
||||
tex = Paths.getSparrowAtlas('gfCar','shared',true);
|
||||
frames = tex;
|
||||
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('danceRight', 'GF Dancing Beat Hair blowing CAR', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24,
|
||||
false);
|
||||
|
||||
addOffset('danceLeft', 0);
|
||||
addOffset('danceRight', 0);
|
||||
loadOffsetFile(curCharacter);
|
||||
|
||||
playAnim('danceRight');
|
||||
|
||||
case 'gf-pixel':
|
||||
tex = Paths.getSparrowAtlas('characters/gfPixel');
|
||||
tex = Paths.getSparrowAtlas('gfPixel','shared',true);
|
||||
frames = tex;
|
||||
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('danceRight', 'GF IDLE', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false);
|
||||
|
||||
addOffset('danceLeft', 0);
|
||||
addOffset('danceRight', 0);
|
||||
loadOffsetFile(curCharacter);
|
||||
|
||||
playAnim('danceRight');
|
||||
|
||||
@ -124,7 +101,7 @@ class Character extends FlxSprite
|
||||
|
||||
case 'dad':
|
||||
// DAD ANIMATION LOADING CODE
|
||||
tex = Paths.getSparrowAtlas('characters/DADDY_DEAREST', 'shared');
|
||||
tex = Paths.getSparrowAtlas('DADDY_DEAREST','shared',true);
|
||||
frames = tex;
|
||||
animation.addByPrefix('idle', 'Dad idle dance', 24);
|
||||
animation.addByPrefix('singUP', 'Dad Sing Note UP', 24);
|
||||
@ -132,15 +109,11 @@ class Character extends FlxSprite
|
||||
animation.addByPrefix('singDOWN', 'Dad Sing Note DOWN', 24);
|
||||
animation.addByPrefix('singLEFT', 'Dad Sing Note LEFT', 24);
|
||||
|
||||
addOffset('idle');
|
||||
addOffset("singUP", -6, 50);
|
||||
addOffset("singRIGHT", 0, 27);
|
||||
addOffset("singLEFT", -10, 10);
|
||||
addOffset("singDOWN", 0, -30);
|
||||
loadOffsetFile(curCharacter);
|
||||
|
||||
playAnim('idle');
|
||||
case 'spooky':
|
||||
tex = Paths.getSparrowAtlas('characters/spooky_kids_assets');
|
||||
tex = Paths.getSparrowAtlas('spooky_kids_assets','shared',true);
|
||||
frames = tex;
|
||||
animation.addByPrefix('singUP', 'spooky UP NOTE', 24, false);
|
||||
animation.addByPrefix('singDOWN', 'spooky DOWN note', 24, false);
|
||||
@ -149,17 +122,11 @@ class Character extends FlxSprite
|
||||
animation.addByIndices('danceLeft', 'spooky dance idle', [0, 2, 6], "", 12, false);
|
||||
animation.addByIndices('danceRight', 'spooky dance idle', [8, 10, 12, 14], "", 12, false);
|
||||
|
||||
addOffset('danceLeft');
|
||||
addOffset('danceRight');
|
||||
|
||||
addOffset("singUP", -20, 26);
|
||||
addOffset("singRIGHT", -130, -14);
|
||||
addOffset("singLEFT", 130, -10);
|
||||
addOffset("singDOWN", -50, -130);
|
||||
loadOffsetFile(curCharacter);
|
||||
|
||||
playAnim('danceRight');
|
||||
case 'mom':
|
||||
tex = Paths.getSparrowAtlas('characters/Mom_Assets');
|
||||
tex = Paths.getSparrowAtlas('Mom_Assets','shared',true);
|
||||
frames = tex;
|
||||
|
||||
animation.addByPrefix('idle', "Mom Idle", 24, false);
|
||||
@ -170,16 +137,12 @@ class Character extends FlxSprite
|
||||
// CUZ DAVE IS DUMB!
|
||||
animation.addByPrefix('singRIGHT', 'Mom Pose Left', 24, false);
|
||||
|
||||
addOffset('idle');
|
||||
addOffset("singUP", 14, 71);
|
||||
addOffset("singRIGHT", 10, -60);
|
||||
addOffset("singLEFT", 250, -23);
|
||||
addOffset("singDOWN", 20, -160);
|
||||
loadOffsetFile(curCharacter);
|
||||
|
||||
playAnim('idle');
|
||||
|
||||
case 'mom-car':
|
||||
tex = Paths.getSparrowAtlas('characters/momCar');
|
||||
tex = Paths.getSparrowAtlas('momCar','shared',true);
|
||||
frames = tex;
|
||||
|
||||
animation.addByPrefix('idle', "Mom Idle", 24, false);
|
||||
@ -190,15 +153,11 @@ class Character extends FlxSprite
|
||||
// CUZ DAVE IS DUMB!
|
||||
animation.addByPrefix('singRIGHT', 'Mom Pose Left', 24, false);
|
||||
|
||||
addOffset('idle');
|
||||
addOffset("singUP", 14, 71);
|
||||
addOffset("singRIGHT", 10, -60);
|
||||
addOffset("singLEFT", 250, -23);
|
||||
addOffset("singDOWN", 20, -160);
|
||||
loadOffsetFile(curCharacter);
|
||||
|
||||
playAnim('idle');
|
||||
case 'monster':
|
||||
tex = Paths.getSparrowAtlas('characters/Monster_Assets');
|
||||
tex = Paths.getSparrowAtlas('Monster_Assets','shared',true);
|
||||
frames = tex;
|
||||
animation.addByPrefix('idle', 'monster idle', 24, false);
|
||||
animation.addByPrefix('singUP', 'monster up note', 24, false);
|
||||
@ -206,14 +165,10 @@ class Character extends FlxSprite
|
||||
animation.addByPrefix('singLEFT', 'Monster left note', 24, false);
|
||||
animation.addByPrefix('singRIGHT', 'Monster Right note', 24, false);
|
||||
|
||||
addOffset('idle');
|
||||
addOffset("singUP", -20, 50);
|
||||
addOffset("singRIGHT", -51);
|
||||
addOffset("singLEFT", -30);
|
||||
addOffset("singDOWN", -30, -40);
|
||||
loadOffsetFile(curCharacter);
|
||||
playAnim('idle');
|
||||
case 'monster-christmas':
|
||||
tex = Paths.getSparrowAtlas('characters/monsterChristmas');
|
||||
tex = Paths.getSparrowAtlas('monsterChristmas','shared',true);
|
||||
frames = tex;
|
||||
animation.addByPrefix('idle', 'monster idle', 24, false);
|
||||
animation.addByPrefix('singUP', 'monster up note', 24, false);
|
||||
@ -221,14 +176,10 @@ class Character extends FlxSprite
|
||||
animation.addByPrefix('singLEFT', 'Monster left note', 24, false);
|
||||
animation.addByPrefix('singRIGHT', 'Monster Right note', 24, false);
|
||||
|
||||
addOffset('idle');
|
||||
addOffset("singUP", -20, 50);
|
||||
addOffset("singRIGHT", -51);
|
||||
addOffset("singLEFT", -30);
|
||||
addOffset("singDOWN", -40, -94);
|
||||
loadOffsetFile(curCharacter);
|
||||
playAnim('idle');
|
||||
case 'pico':
|
||||
tex = Paths.getSparrowAtlas('characters/Pico_FNF_assetss');
|
||||
tex = Paths.getSparrowAtlas('Pico_FNF_assetss','shared',true);
|
||||
frames = tex;
|
||||
animation.addByPrefix('idle', "Pico Idle Dance", 24);
|
||||
animation.addByPrefix('singUP', 'pico Up note0', 24, false);
|
||||
@ -252,22 +203,14 @@ class Character extends FlxSprite
|
||||
animation.addByPrefix('singUPmiss', 'pico Up note miss', 24);
|
||||
animation.addByPrefix('singDOWNmiss', 'Pico Down Note MISS', 24);
|
||||
|
||||
addOffset('idle');
|
||||
addOffset("singUP", -29, 27);
|
||||
addOffset("singRIGHT", -68, -7);
|
||||
addOffset("singLEFT", 65, 9);
|
||||
addOffset("singDOWN", 200, -70);
|
||||
addOffset("singUPmiss", -19, 67);
|
||||
addOffset("singRIGHTmiss", -60, 41);
|
||||
addOffset("singLEFTmiss", 62, 64);
|
||||
addOffset("singDOWNmiss", 210, -28);
|
||||
loadOffsetFile(curCharacter);
|
||||
|
||||
playAnim('idle');
|
||||
|
||||
flipX = true;
|
||||
|
||||
case 'bf':
|
||||
var tex = Paths.getSparrowAtlas('characters/BOYFRIEND', 'shared');
|
||||
var tex = Paths.getSparrowAtlas('BOYFRIEND','shared',true);
|
||||
frames = tex;
|
||||
|
||||
trace(tex.frames.length);
|
||||
@ -284,32 +227,19 @@ class Character extends FlxSprite
|
||||
animation.addByPrefix('hey', 'BF HEY', 24, false);
|
||||
|
||||
animation.addByPrefix('firstDeath', "BF dies", 24, false);
|
||||
animation.addByPrefix('deathLoop', "BF Dead Loop", 24, true);
|
||||
animation.addByPrefix('deathLoop', "BF Dead Loop", 24, false);
|
||||
animation.addByPrefix('deathConfirm', "BF Dead confirm", 24, false);
|
||||
|
||||
animation.addByPrefix('scared', 'BF idle shaking', 24);
|
||||
|
||||
addOffset('idle', -5);
|
||||
addOffset("singUP", -29, 27);
|
||||
addOffset("singRIGHT", -38, -7);
|
||||
addOffset("singLEFT", 12, -6);
|
||||
addOffset("singDOWN", -10, -50);
|
||||
addOffset("singUPmiss", -29, 27);
|
||||
addOffset("singRIGHTmiss", -30, 21);
|
||||
addOffset("singLEFTmiss", 12, 24);
|
||||
addOffset("singDOWNmiss", -11, -19);
|
||||
addOffset("hey", 7, 4);
|
||||
addOffset('firstDeath', 37, 11);
|
||||
addOffset('deathLoop', 37, 5);
|
||||
addOffset('deathConfirm', 37, 69);
|
||||
addOffset('scared', -4);
|
||||
loadOffsetFile(curCharacter);
|
||||
|
||||
playAnim('idle');
|
||||
|
||||
flipX = true;
|
||||
|
||||
case 'bf-christmas':
|
||||
var tex = Paths.getSparrowAtlas('characters/bfChristmas');
|
||||
var tex = Paths.getSparrowAtlas('bfChristmas','shared',true);
|
||||
frames = tex;
|
||||
animation.addByPrefix('idle', 'BF idle dance', 24, false);
|
||||
animation.addByPrefix('singUP', 'BF NOTE UP0', 24, false);
|
||||
@ -322,22 +252,13 @@ class Character extends FlxSprite
|
||||
animation.addByPrefix('singDOWNmiss', 'BF NOTE DOWN MISS', 24, false);
|
||||
animation.addByPrefix('hey', 'BF HEY', 24, false);
|
||||
|
||||
addOffset('idle', -5);
|
||||
addOffset("singUP", -29, 27);
|
||||
addOffset("singRIGHT", -38, -7);
|
||||
addOffset("singLEFT", 12, -6);
|
||||
addOffset("singDOWN", -10, -50);
|
||||
addOffset("singUPmiss", -29, 27);
|
||||
addOffset("singRIGHTmiss", -30, 21);
|
||||
addOffset("singLEFTmiss", 12, 24);
|
||||
addOffset("singDOWNmiss", -11, -19);
|
||||
addOffset("hey", 7, 4);
|
||||
loadOffsetFile(curCharacter);
|
||||
|
||||
playAnim('idle');
|
||||
|
||||
flipX = true;
|
||||
case 'bf-car':
|
||||
var tex = Paths.getSparrowAtlas('characters/bfCar');
|
||||
var tex = Paths.getSparrowAtlas('bfCar','shared',true);
|
||||
frames = tex;
|
||||
animation.addByPrefix('idle', 'BF idle dance', 24, false);
|
||||
animation.addByPrefix('singUP', 'BF NOTE UP0', 24, false);
|
||||
@ -349,20 +270,12 @@ class Character extends FlxSprite
|
||||
animation.addByPrefix('singRIGHTmiss', 'BF NOTE RIGHT MISS', 24, false);
|
||||
animation.addByPrefix('singDOWNmiss', 'BF NOTE DOWN MISS', 24, false);
|
||||
|
||||
addOffset('idle', -5);
|
||||
addOffset("singUP", -29, 27);
|
||||
addOffset("singRIGHT", -38, -7);
|
||||
addOffset("singLEFT", 12, -6);
|
||||
addOffset("singDOWN", -10, -50);
|
||||
addOffset("singUPmiss", -29, 27);
|
||||
addOffset("singRIGHTmiss", -30, 21);
|
||||
addOffset("singLEFTmiss", 12, 24);
|
||||
addOffset("singDOWNmiss", -11, -19);
|
||||
loadOffsetFile(curCharacter);
|
||||
playAnim('idle');
|
||||
|
||||
flipX = true;
|
||||
case 'bf-pixel':
|
||||
frames = Paths.getSparrowAtlas('characters/bfPixel');
|
||||
frames = Paths.getSparrowAtlas('bfPixel','shared',true);
|
||||
animation.addByPrefix('idle', 'BF IDLE', 24, false);
|
||||
animation.addByPrefix('singUP', 'BF UP NOTE', 24, false);
|
||||
animation.addByPrefix('singLEFT', 'BF LEFT NOTE', 24, false);
|
||||
@ -373,15 +286,7 @@ class Character extends FlxSprite
|
||||
animation.addByPrefix('singRIGHTmiss', 'BF RIGHT MISS', 24, false);
|
||||
animation.addByPrefix('singDOWNmiss', 'BF DOWN MISS', 24, false);
|
||||
|
||||
addOffset('idle');
|
||||
addOffset("singUP");
|
||||
addOffset("singRIGHT");
|
||||
addOffset("singLEFT");
|
||||
addOffset("singDOWN");
|
||||
addOffset("singUPmiss");
|
||||
addOffset("singRIGHTmiss");
|
||||
addOffset("singLEFTmiss");
|
||||
addOffset("singDOWNmiss");
|
||||
loadOffsetFile(curCharacter);
|
||||
|
||||
setGraphicSize(Std.int(width * 6));
|
||||
updateHitbox();
|
||||
@ -395,16 +300,14 @@ class Character extends FlxSprite
|
||||
|
||||
flipX = true;
|
||||
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('firstDeath', "BF Dies pixel", 24, false);
|
||||
animation.addByPrefix('deathLoop', "Retry Loop", 24, true);
|
||||
animation.addByPrefix('deathLoop', "Retry Loop", 24, false);
|
||||
animation.addByPrefix('deathConfirm', "RETRY CONFIRM", 24, false);
|
||||
animation.play('firstDeath');
|
||||
|
||||
addOffset('firstDeath');
|
||||
addOffset('deathLoop', -37);
|
||||
addOffset('deathConfirm', -37);
|
||||
loadOffsetFile(curCharacter);
|
||||
playAnim('firstDeath');
|
||||
// pixel bullshit
|
||||
setGraphicSize(Std.int(width * 6));
|
||||
@ -413,18 +316,14 @@ class Character extends FlxSprite
|
||||
flipX = true;
|
||||
|
||||
case 'senpai':
|
||||
frames = Paths.getSparrowAtlas('characters/senpai');
|
||||
frames = Paths.getSparrowAtlas('senpai','shared',true);
|
||||
animation.addByPrefix('idle', 'Senpai Idle', 24, false);
|
||||
animation.addByPrefix('singUP', 'SENPAI UP NOTE', 24, false);
|
||||
animation.addByPrefix('singLEFT', 'SENPAI LEFT NOTE', 24, false);
|
||||
animation.addByPrefix('singRIGHT', 'SENPAI RIGHT NOTE', 24, false);
|
||||
animation.addByPrefix('singDOWN', 'SENPAI DOWN NOTE', 24, false);
|
||||
|
||||
addOffset('idle');
|
||||
addOffset("singUP", 5, 37);
|
||||
addOffset("singRIGHT");
|
||||
addOffset("singLEFT", 40);
|
||||
addOffset("singDOWN", 14);
|
||||
loadOffsetFile(curCharacter);
|
||||
|
||||
playAnim('idle');
|
||||
|
||||
@ -433,18 +332,14 @@ class Character extends FlxSprite
|
||||
|
||||
antialiasing = false;
|
||||
case 'senpai-angry':
|
||||
frames = Paths.getSparrowAtlas('characters/senpai');
|
||||
frames = Paths.getSparrowAtlas('senpai','shared',true);
|
||||
animation.addByPrefix('idle', 'Angry Senpai Idle', 24, false);
|
||||
animation.addByPrefix('singUP', 'Angry Senpai UP NOTE', 24, false);
|
||||
animation.addByPrefix('singLEFT', 'Angry Senpai LEFT NOTE', 24, false);
|
||||
animation.addByPrefix('singRIGHT', 'Angry Senpai RIGHT NOTE', 24, false);
|
||||
animation.addByPrefix('singDOWN', 'Angry Senpai DOWN NOTE', 24, false);
|
||||
|
||||
addOffset('idle');
|
||||
addOffset("singUP", 5, 37);
|
||||
addOffset("singRIGHT");
|
||||
addOffset("singLEFT", 40);
|
||||
addOffset("singDOWN", 14);
|
||||
loadOffsetFile(curCharacter);
|
||||
playAnim('idle');
|
||||
|
||||
setGraphicSize(Std.int(width * 6));
|
||||
@ -453,18 +348,14 @@ class Character extends FlxSprite
|
||||
antialiasing = false;
|
||||
|
||||
case 'spirit':
|
||||
frames = Paths.getPackerAtlas('characters/spirit');
|
||||
frames = Paths.getPackerAtlas('spirit','shared',false);
|
||||
animation.addByPrefix('idle', "idle spirit_", 24, false);
|
||||
animation.addByPrefix('singUP', "up_", 24, false);
|
||||
animation.addByPrefix('singRIGHT', "right_", 24, false);
|
||||
animation.addByPrefix('singLEFT', "left_", 24, false);
|
||||
animation.addByPrefix('singDOWN', "spirit down_", 24, false);
|
||||
|
||||
addOffset('idle', -220, -280);
|
||||
addOffset('singUP', -220, -240);
|
||||
addOffset("singRIGHT", -220, -280);
|
||||
addOffset("singLEFT", -200, -280);
|
||||
addOffset("singDOWN", 170, 110);
|
||||
loadOffsetFile(curCharacter);
|
||||
|
||||
setGraphicSize(Std.int(width * 6));
|
||||
updateHitbox();
|
||||
@ -474,7 +365,7 @@ class Character extends FlxSprite
|
||||
antialiasing = false;
|
||||
|
||||
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('singUP', 'Parent Up Note Dad', 24, false);
|
||||
animation.addByPrefix('singDOWN', 'Parent Down Note Dad', 24, false);
|
||||
@ -487,15 +378,7 @@ class Character extends FlxSprite
|
||||
animation.addByPrefix('singLEFT-alt', 'Parent Left Note Mom', 24, false);
|
||||
animation.addByPrefix('singRIGHT-alt', 'Parent Right Note Mom', 24, false);
|
||||
|
||||
addOffset('idle');
|
||||
addOffset("singUP", -47, 24);
|
||||
addOffset("singRIGHT", -1, -23);
|
||||
addOffset("singLEFT", -30, 16);
|
||||
addOffset("singDOWN", -31, -29);
|
||||
addOffset("singUP-alt", -47, 24);
|
||||
addOffset("singRIGHT-alt", -1, -24);
|
||||
addOffset("singLEFT-alt", -30, 15);
|
||||
addOffset("singDOWN-alt", -30, -27);
|
||||
loadOffsetFile(curCharacter);
|
||||
|
||||
playAnim('idle');
|
||||
}
|
||||
@ -525,6 +408,17 @@ class Character extends FlxSprite
|
||||
}
|
||||
}
|
||||
|
||||
public function loadOffsetFile(character:String)
|
||||
{
|
||||
var offset:Array<String> = CoolUtil.coolTextFile(Paths.txt('images/characters/' + character + "Offsets", 'shared'));
|
||||
|
||||
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)
|
||||
{
|
||||
if (!curCharacter.startsWith('bf'))
|
||||
@ -561,13 +455,13 @@ class Character extends FlxSprite
|
||||
/**
|
||||
* FOR GF DANCING SHIT
|
||||
*/
|
||||
public function dance()
|
||||
public function dance(forced:Bool = false)
|
||||
{
|
||||
if (!debugMode)
|
||||
{
|
||||
switch (curCharacter)
|
||||
{
|
||||
case 'gf':
|
||||
case 'gf' | 'gf-christmas' | 'gf-car' | 'gf-pixel':
|
||||
if (!animation.curAnim.name.startsWith('hair'))
|
||||
{
|
||||
danced = !danced;
|
||||
@ -577,39 +471,6 @@ class Character extends FlxSprite
|
||||
else
|
||||
playAnim('danceLeft');
|
||||
}
|
||||
|
||||
case 'gf-christmas':
|
||||
if (!animation.curAnim.name.startsWith('hair'))
|
||||
{
|
||||
danced = !danced;
|
||||
|
||||
if (danced)
|
||||
playAnim('danceRight');
|
||||
else
|
||||
playAnim('danceLeft');
|
||||
}
|
||||
|
||||
case 'gf-car':
|
||||
if (!animation.curAnim.name.startsWith('hair'))
|
||||
{
|
||||
danced = !danced;
|
||||
|
||||
if (danced)
|
||||
playAnim('danceRight');
|
||||
else
|
||||
playAnim('danceLeft');
|
||||
}
|
||||
case 'gf-pixel':
|
||||
if (!animation.curAnim.name.startsWith('hair'))
|
||||
{
|
||||
danced = !danced;
|
||||
|
||||
if (danced)
|
||||
playAnim('danceRight');
|
||||
else
|
||||
playAnim('danceLeft');
|
||||
}
|
||||
|
||||
case 'spooky':
|
||||
danced = !danced;
|
||||
|
||||
@ -618,7 +479,7 @@ class Character extends FlxSprite
|
||||
else
|
||||
playAnim('danceLeft');
|
||||
default:
|
||||
playAnim('idle');
|
||||
playAnim('idle', forced);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -68,7 +68,23 @@ class Conductor
|
||||
trace("new BPM map BUDDY " + bpmChangeMap);
|
||||
}
|
||||
|
||||
public static function changeBPM(newBpm:Float)
|
||||
public static function recalculateTimingStruct(SONG:Song)
|
||||
{
|
||||
for(i in SONG.eventObjects)
|
||||
{
|
||||
/*TimingStruct.addTiming(beat,bpm,endBeat, Std.parseFloat(OFFSET));
|
||||
|
||||
if (changeEvents.length != 0)
|
||||
{
|
||||
var data = TimingStruct.AllTimings[currentIndex - 1];
|
||||
data.endBeat = beat;
|
||||
data.length = (data.endBeat - data.startBeat) / (data.bpm / 60);
|
||||
TimingStruct.AllTimings[currentIndex].startTime = data.startTime + data.length;
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
public static function changeBPM(newBpm:Float, ?recalcLength = true)
|
||||
{
|
||||
bpm = newBpm;
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package;
|
||||
|
||||
import flixel.input.gamepad.FlxGamepad;
|
||||
import flixel.FlxG;
|
||||
import flixel.input.FlxInput;
|
||||
import flixel.input.actions.FlxAction;
|
||||
@ -571,15 +572,29 @@ class Controls extends FlxActionSet
|
||||
//trace(FlxKey.fromString(FlxG.save.data.upBind));
|
||||
|
||||
removeKeyboard();
|
||||
if (gamepadsAdded.length != 0)
|
||||
removeGamepad();
|
||||
KeyBinds.keyCheck();
|
||||
|
||||
|
||||
var buttons = new Map<Control,Array<FlxGamepadInputID>>();
|
||||
|
||||
buttons.set(Control.UP,[FlxGamepadInputID.fromString(FlxG.save.data.gpupBind)]);
|
||||
buttons.set(Control.LEFT,[FlxGamepadInputID.fromString(FlxG.save.data.gpleftBind)]);
|
||||
buttons.set(Control.DOWN,[FlxGamepadInputID.fromString(FlxG.save.data.gpdownBind)]);
|
||||
buttons.set(Control.RIGHT,[FlxGamepadInputID.fromString(FlxG.save.data.gprightBind)]);
|
||||
buttons.set(Control.ACCEPT,[FlxGamepadInputID.A]);
|
||||
buttons.set(Control.BACK,[FlxGamepadInputID.B]);
|
||||
buttons.set(Control.PAUSE,[FlxGamepadInputID.START]);
|
||||
|
||||
addGamepad(0,buttons);
|
||||
|
||||
inline bindKeys(Control.UP, [FlxKey.fromString(FlxG.save.data.upBind), FlxKey.UP]);
|
||||
inline bindKeys(Control.DOWN, [FlxKey.fromString(FlxG.save.data.downBind), FlxKey.DOWN]);
|
||||
inline bindKeys(Control.LEFT, [FlxKey.fromString(FlxG.save.data.leftBind), FlxKey.LEFT]);
|
||||
inline bindKeys(Control.RIGHT, [FlxKey.fromString(FlxG.save.data.rightBind), FlxKey.RIGHT]);
|
||||
inline bindKeys(Control.ACCEPT, [Z, SPACE, ENTER]);
|
||||
inline bindKeys(Control.BACK, [BACKSPACE, ESCAPE]);
|
||||
inline bindKeys(Control.PAUSE, [P, ENTER, ESCAPE]);
|
||||
inline bindKeys(Control.PAUSE, [ENTER, ESCAPE]);
|
||||
inline bindKeys(Control.RESET, [FlxKey.fromString(FlxG.save.data.killBind)]);
|
||||
}
|
||||
|
||||
@ -599,6 +614,9 @@ class Controls extends FlxActionSet
|
||||
|
||||
public function addGamepad(id:Int, ?buttonMap:Map<Control, Array<FlxGamepadInputID>>):Void
|
||||
{
|
||||
if (gamepadsAdded.contains(id))
|
||||
gamepadsAdded.remove(id);
|
||||
|
||||
gamepadsAdded.push(id);
|
||||
|
||||
#if (haxe >= "4.0.0")
|
||||
|
@ -6,11 +6,11 @@ using StringTools;
|
||||
|
||||
class CoolUtil
|
||||
{
|
||||
public static var difficultyArray:Array<String> = ['EASY', "NORMAL", "HARD"];
|
||||
public static var difficultyArray:Array<String> = ['Easy', "Normal", "Hard"];
|
||||
|
||||
public static function difficultyString():String
|
||||
public static function difficultyFromInt(difficulty:Int):String
|
||||
{
|
||||
return difficultyArray[PlayState.storyDifficulty];
|
||||
return difficultyArray[difficulty];
|
||||
}
|
||||
|
||||
public static function coolTextFile(path:String):Array<String>
|
||||
|
@ -155,7 +155,7 @@ class DialogueBox extends FlxSpriteGroup
|
||||
portraitLeft.visible = false;
|
||||
if (PlayState.SONG.song.toLowerCase() == 'thorns')
|
||||
{
|
||||
portraitLeft.color = FlxColor.BLACK;
|
||||
portraitLeft.visible = false;
|
||||
swagDialogue.color = FlxColor.WHITE;
|
||||
dropText.color = FlxColor.BLACK;
|
||||
}
|
||||
@ -177,7 +177,7 @@ class DialogueBox extends FlxSpriteGroup
|
||||
dialogueStarted = true;
|
||||
}
|
||||
|
||||
if (FlxG.keys.justPressed.ANY && dialogueStarted == true)
|
||||
if (PlayerSettings.player1.controls.ACCEPT && dialogueStarted == true)
|
||||
{
|
||||
remove(dialogue);
|
||||
|
||||
|
372
source/DiffCalc.hx
Normal file
@ -0,0 +1,372 @@
|
||||
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 var lastDiffHandOne:Array<Float> = [];
|
||||
public static var lastDiffHandTwo:Array<Float> = [];
|
||||
|
||||
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
|
||||
{
|
||||
if (ii[1] > 3 && !i.mustHitSection)
|
||||
cleanedNotes.push(new SmallNote(ii[0],Math.floor(Math.abs(ii[1]))));
|
||||
else if (ii[1] < 4 && i.mustHitSection)
|
||||
cleanedNotes.push(new SmallNote(ii[0],Math.floor(Math.abs(ii[1]))));
|
||||
}
|
||||
}
|
||||
|
||||
trace(cleanedNotes.length + " - playable notes");
|
||||
|
||||
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;
|
||||
|
||||
lastDiffHandOne = hand_diffOne;
|
||||
lastDiffHandTwo = hand_diffTwo;
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
506
source/DiffOverview.hx
Normal file
@ -0,0 +1,506 @@
|
||||
package;
|
||||
|
||||
import Conductor.BPMChangeEvent;
|
||||
import flixel.FlxCamera;
|
||||
import flixel.math.FlxRect;
|
||||
import Song.SwagSong;
|
||||
import Section.SwagSection;
|
||||
import flixel.system.FlxSound;
|
||||
import flixel.input.gamepad.FlxGamepad;
|
||||
import flixel.util.FlxAxes;
|
||||
import flixel.FlxSubState;
|
||||
import Options.Option;
|
||||
import flixel.input.FlxInput;
|
||||
import flixel.input.keyboard.FlxKey;
|
||||
import flixel.FlxG;
|
||||
import flixel.FlxObject;
|
||||
import flixel.FlxSprite;
|
||||
import flixel.effects.FlxFlicker;
|
||||
import flixel.graphics.frames.FlxAtlasFrames;
|
||||
import flixel.group.FlxGroup.FlxTypedGroup;
|
||||
import flixel.text.FlxText;
|
||||
import flixel.util.FlxSort;
|
||||
import flixel.tweens.FlxEase;
|
||||
import flixel.tweens.FlxTween;
|
||||
import flixel.util.FlxColor;
|
||||
import io.newgrounds.NG;
|
||||
import lime.app.Application;
|
||||
import lime.utils.Assets;
|
||||
import flixel.math.FlxMath;
|
||||
import flixel.text.FlxText;
|
||||
import flixel.input.FlxKeyManager;
|
||||
|
||||
using StringTools;
|
||||
|
||||
class DiffOverview extends FlxSubState
|
||||
{
|
||||
var blackBox:FlxSprite;
|
||||
|
||||
var handOne:Array<Float>;
|
||||
var handTwo:Array<Float>;
|
||||
|
||||
var giantText:FlxText;
|
||||
|
||||
var SONG:SwagSong;
|
||||
var strumLine:FlxSprite;
|
||||
var camHUD:FlxCamera;
|
||||
|
||||
var offset:FlxText;
|
||||
|
||||
public static var playerStrums:FlxTypedGroup<FlxSprite> = null;
|
||||
|
||||
override function create()
|
||||
{
|
||||
Conductor.songPosition = 0;
|
||||
Conductor.lastSongPos = 0;
|
||||
|
||||
camHUD = new FlxCamera();
|
||||
camHUD.bgColor.alpha = 0;
|
||||
var camGame = new FlxCamera();
|
||||
|
||||
FlxG.cameras.add(camGame);
|
||||
|
||||
FlxG.cameras.add(camHUD);
|
||||
|
||||
FlxCamera.defaultCameras = [camGame];
|
||||
|
||||
playerStrums = new FlxTypedGroup<FlxSprite>();
|
||||
|
||||
SONG = FreeplayState.songData.get(FreeplayState.songs[FreeplayState.curSelected].songName)[FreeplayState.curDifficulty];
|
||||
|
||||
strumLine = new FlxSprite(0, (FlxG.height / 2) - 295).makeGraphic(FlxG.width, 10);
|
||||
strumLine.scrollFactor.set();
|
||||
|
||||
blackBox = new FlxSprite(0, 0).makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
|
||||
blackBox.alpha = 0;
|
||||
add(blackBox);
|
||||
|
||||
FreeplayState.openedPreview = true;
|
||||
|
||||
handOne = DiffCalc.lastDiffHandOne;
|
||||
handTwo = DiffCalc.lastDiffHandTwo;
|
||||
for (i in 0...4)
|
||||
{
|
||||
// FlxG.log.add(i);
|
||||
var babyArrow:FlxSprite = new FlxSprite(0, strumLine.y);
|
||||
|
||||
babyArrow.frames = Paths.getSparrowAtlas('NOTE_assets','shared');
|
||||
babyArrow.animation.addByPrefix('green', 'arrowUP');
|
||||
babyArrow.animation.addByPrefix('blue', 'arrowDOWN');
|
||||
babyArrow.animation.addByPrefix('purple', 'arrowLEFT');
|
||||
babyArrow.animation.addByPrefix('red', 'arrowRIGHT');
|
||||
if(FlxG.save.data.antialiasing)
|
||||
{
|
||||
babyArrow.antialiasing = true;
|
||||
}
|
||||
babyArrow.setGraphicSize(Std.int(babyArrow.width * 0.7));
|
||||
|
||||
switch (Math.abs(i))
|
||||
{
|
||||
case 2:
|
||||
babyArrow.x += Note.swagWidth * 2;
|
||||
babyArrow.animation.addByPrefix('static', 'arrowUP');
|
||||
babyArrow.animation.addByPrefix('pressed', 'up press', 24, false);
|
||||
babyArrow.animation.addByPrefix('confirm', 'up confirm', 24, false);
|
||||
case 3:
|
||||
babyArrow.x += Note.swagWidth * 3;
|
||||
babyArrow.animation.addByPrefix('static', 'arrowRIGHT');
|
||||
babyArrow.animation.addByPrefix('pressed', 'right press', 24, false);
|
||||
babyArrow.animation.addByPrefix('confirm', 'right confirm', 24, false);
|
||||
case 1:
|
||||
babyArrow.x += Note.swagWidth * 1;
|
||||
babyArrow.animation.addByPrefix('static', 'arrowDOWN');
|
||||
babyArrow.animation.addByPrefix('pressed', 'down press', 24, false);
|
||||
babyArrow.animation.addByPrefix('confirm', 'down confirm', 24, false);
|
||||
case 0:
|
||||
babyArrow.x += Note.swagWidth * 0;
|
||||
babyArrow.animation.addByPrefix('static', 'arrowLEFT');
|
||||
babyArrow.animation.addByPrefix('pressed', 'left press', 24, false);
|
||||
babyArrow.animation.addByPrefix('confirm', 'left confirm', 24, false);
|
||||
}
|
||||
|
||||
babyArrow.updateHitbox();
|
||||
babyArrow.scrollFactor.set();
|
||||
|
||||
babyArrow.y -= 10;
|
||||
babyArrow.alpha = 1;
|
||||
|
||||
babyArrow.ID = i;
|
||||
|
||||
playerStrums.add(babyArrow);
|
||||
|
||||
babyArrow.animation.play('static');
|
||||
babyArrow.x += 50;
|
||||
babyArrow.x += ((FlxG.width / 2));
|
||||
}
|
||||
|
||||
add(playerStrums);
|
||||
|
||||
generateSong("assItch");
|
||||
|
||||
playerStrums.cameras = [camHUD];
|
||||
notes.cameras = [camHUD];
|
||||
blackBox.cameras = [camHUD];
|
||||
|
||||
blackBox.x = playerStrums.members[0].x;
|
||||
blackBox.y = strumLine.y;
|
||||
|
||||
camHUD.zoom = 0.6;
|
||||
camHUD.alpha = 0;
|
||||
camHUD.height = 5000;
|
||||
blackBox.height = camHUD.height;
|
||||
|
||||
camHUD.x += 280;
|
||||
|
||||
blackBox.y -= 100;
|
||||
blackBox.x -= 100;
|
||||
|
||||
offset = new FlxText(10,FlxG.height - 40,0,"Offset: " + HelperFunctions.truncateFloat(FlxG.save.data.offset,0) + " (LEFT/RIGHT to decrease/increase)",16);
|
||||
offset.setBorderStyle(FlxTextBorderStyle.OUTLINE,FlxColor.BLACK,4,1);
|
||||
offset.color = FlxColor.WHITE;
|
||||
offset.scrollFactor.set();
|
||||
//add(offset);
|
||||
|
||||
FlxTween.tween(blackBox, {alpha: 0.5}, 1, {ease: FlxEase.expoInOut});
|
||||
FlxTween.tween(camHUD, {alpha: 1}, 0.5, {ease: FlxEase.expoInOut});
|
||||
FlxTween.tween(offset, {alpha: 1}, 0.5, {ease: FlxEase.expoInOut});
|
||||
|
||||
trace('pog');
|
||||
|
||||
super.create();
|
||||
}
|
||||
|
||||
function endSong()
|
||||
{
|
||||
if (stopDoingShit)
|
||||
return;
|
||||
}
|
||||
|
||||
function resyncVocals():Void
|
||||
{
|
||||
vocals.pause();
|
||||
|
||||
FlxG.sound.music.play();
|
||||
Conductor.songPosition = FlxG.sound.music.time;
|
||||
vocals.time = Conductor.songPosition;
|
||||
vocals.play();
|
||||
}
|
||||
|
||||
public var stopDoingShit = false;
|
||||
|
||||
public var currentStep = 0;
|
||||
public var oldStep = 0;
|
||||
|
||||
private function updateCurStep():Void
|
||||
{
|
||||
var lastChange:BPMChangeEvent = {
|
||||
stepTime: 0,
|
||||
songTime: 0,
|
||||
bpm: 0
|
||||
}
|
||||
for (i in 0...Conductor.bpmChangeMap.length)
|
||||
{
|
||||
if (Conductor.songPosition >= Conductor.bpmChangeMap[i].songTime)
|
||||
lastChange = Conductor.bpmChangeMap[i];
|
||||
}
|
||||
|
||||
currentStep = lastChange.stepTime + Math.floor((Conductor.songPosition - lastChange.songTime) / Conductor.stepCrochet);
|
||||
}
|
||||
|
||||
function stepHit()
|
||||
{
|
||||
if (FlxG.sound.music.time > Conductor.songPosition + 20 || FlxG.sound.music.time < Conductor.songPosition - 20)
|
||||
{
|
||||
trace("resync");
|
||||
resyncVocals();
|
||||
}
|
||||
oldStep = currentStep;
|
||||
}
|
||||
|
||||
function offsetChange()
|
||||
{
|
||||
for (i in unspawnNotes)
|
||||
i.strumTime = i.baseStrum + FlxG.save.data.offset;
|
||||
for (i in notes)
|
||||
i.strumTime = i.baseStrum + FlxG.save.data.offset;
|
||||
}
|
||||
|
||||
var frames = 0;
|
||||
|
||||
override function update(elapsed:Float)
|
||||
{
|
||||
super.update(elapsed);
|
||||
|
||||
|
||||
// input
|
||||
|
||||
if (frames < 10)
|
||||
{
|
||||
frames++;
|
||||
return;
|
||||
}
|
||||
|
||||
if (stopDoingShit)
|
||||
return;
|
||||
|
||||
updateCurStep();
|
||||
|
||||
if (oldStep != currentStep && currentStep > 0)
|
||||
stepHit();
|
||||
|
||||
if (FlxG.keys.pressed.SPACE)
|
||||
{
|
||||
stopDoingShit = true;
|
||||
quit();
|
||||
}
|
||||
|
||||
var gamepad:FlxGamepad = FlxG.gamepads.lastActive;
|
||||
|
||||
if (gamepad != null)
|
||||
if (gamepad.justPressed.X)
|
||||
{
|
||||
stopDoingShit = true;
|
||||
quit();
|
||||
}
|
||||
|
||||
/*if (FlxG.keys.pressed.RIGHT)
|
||||
{
|
||||
if (FlxG.keys.pressed.SHIFT)
|
||||
{
|
||||
FlxG.save.data.offset++;
|
||||
offsetChange();
|
||||
}
|
||||
}
|
||||
if (FlxG.keys.pressed.LEFT)
|
||||
{
|
||||
if (FlxG.keys.pressed.SHIFT)
|
||||
{
|
||||
FlxG.save.data.offset--;
|
||||
offsetChange();
|
||||
}
|
||||
}
|
||||
|
||||
if (FlxG.keys.justPressed.RIGHT)
|
||||
{
|
||||
FlxG.save.data.offset++;
|
||||
offsetChange();
|
||||
}
|
||||
if (FlxG.keys.justPressed.LEFT)
|
||||
{
|
||||
FlxG.save.data.offset--;
|
||||
offsetChange();
|
||||
}
|
||||
|
||||
|
||||
offset.text = "Offset: " + HelperFunctions.truncateFloat(FlxG.save.data.offset,0) + " (LEFT/RIGHT to decrease/increase, SHIFT to go faster) - Time: " + HelperFunctions.truncateFloat(Conductor.songPosition / 1000,0) + "s - Step: " + currentStep;
|
||||
*/
|
||||
|
||||
if (vocals != null)
|
||||
if (vocals.playing)
|
||||
Conductor.songPosition += FlxG.elapsed * 1000;
|
||||
|
||||
if (unspawnNotes[0] != null)
|
||||
{
|
||||
if (unspawnNotes[0].strumTime - Conductor.songPosition < 3500)
|
||||
{
|
||||
var dunceNote:Note = unspawnNotes[0];
|
||||
notes.add(dunceNote);
|
||||
|
||||
var index:Int = unspawnNotes.indexOf(dunceNote);
|
||||
unspawnNotes.splice(index, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
notes.forEachAlive(function(daNote:Note)
|
||||
{
|
||||
// instead of doing stupid y > FlxG.height
|
||||
// we be men and actually calculate the time :)
|
||||
if (daNote.tooLate)
|
||||
{
|
||||
daNote.active = false;
|
||||
daNote.visible = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
daNote.visible = true;
|
||||
daNote.active = true;
|
||||
}
|
||||
|
||||
daNote.y = (playerStrums.members[Math.floor(Math.abs(daNote.noteData))].y
|
||||
- 0.45 * (Conductor.songPosition - daNote.strumTime) * FlxMath.roundDecimal(SONG.speed,
|
||||
2));
|
||||
|
||||
if (daNote.isSustainNote)
|
||||
{
|
||||
daNote.y -= daNote.height / 2;
|
||||
|
||||
if ((!daNote.mustPress || daNote.wasGoodHit || daNote.prevNote.wasGoodHit && !daNote.canBeHit)
|
||||
&& daNote.y + daNote.offset.y * daNote.scale.y <= (strumLine.y + Note.swagWidth / 2))
|
||||
{
|
||||
// Clip to strumline
|
||||
var swagRect = new FlxRect(0, 0, daNote.width / daNote.scale.x, daNote.height / daNote.scale.y);
|
||||
swagRect.y = (playerStrums.members[Math.floor(Math.abs(daNote.noteData))].y + Note.swagWidth / 2 - daNote.y) / daNote.scale.y;
|
||||
swagRect.height -= swagRect.y;
|
||||
|
||||
daNote.clipRect = swagRect;
|
||||
}
|
||||
}
|
||||
|
||||
daNote.visible = playerStrums.members[Math.floor(Math.abs(daNote.noteData))].visible;
|
||||
daNote.x = playerStrums.members[Math.floor(Math.abs(daNote.noteData))].x;
|
||||
if (!daNote.isSustainNote)
|
||||
daNote.angle = playerStrums.members[Math.floor(Math.abs(daNote.noteData))].angle;
|
||||
daNote.alpha = playerStrums.members[Math.floor(Math.abs(daNote.noteData))].alpha;
|
||||
|
||||
// auto hit
|
||||
|
||||
if(daNote.y < strumLine.y)
|
||||
{
|
||||
// Force good note hit regardless if it's too late to hit it or not as a fail safe
|
||||
if(daNote.canBeHit && daNote.mustPress || daNote.tooLate && daNote.mustPress)
|
||||
{
|
||||
|
||||
daNote.wasGoodHit = true;
|
||||
vocals.volume = 1;
|
||||
|
||||
daNote.kill();
|
||||
notes.remove(daNote, true);
|
||||
daNote.destroy();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function quit()
|
||||
{
|
||||
FlxTween.tween(blackBox, {alpha: 0}, 1, {ease: FlxEase.expoInOut});
|
||||
FlxTween.tween(camHUD, {alpha: 0}, 1, {ease: FlxEase.expoInOut});
|
||||
FlxTween.tween(offset, {alpha: 0}, 1, {ease: FlxEase.expoInOut});
|
||||
|
||||
vocals.fadeOut();
|
||||
|
||||
FreeplayState.openedPreview = false;
|
||||
}
|
||||
|
||||
var vocals:FlxSound;
|
||||
|
||||
var notes:FlxTypedGroup<Note>;
|
||||
var unspawnNotes:Array<Note> = [];
|
||||
|
||||
public function generateSong(dataPath:String):Void
|
||||
{
|
||||
// FlxG.log.add(ChartParser.parse());
|
||||
|
||||
var songData = FreeplayState.songData.get(FreeplayState.songs[FreeplayState.curSelected].songName)[FreeplayState.curDifficulty];
|
||||
Conductor.changeBPM(songData.bpm);
|
||||
|
||||
if (SONG.needsVoices)
|
||||
vocals = new FlxSound().loadEmbedded(Paths.voices(SONG.song));
|
||||
else
|
||||
vocals = new FlxSound();
|
||||
|
||||
trace('loaded vocals');
|
||||
|
||||
FlxG.sound.list.add(vocals);
|
||||
|
||||
notes = new FlxTypedGroup<Note>();
|
||||
add(notes);
|
||||
|
||||
var noteData:Array<SwagSection>;
|
||||
|
||||
// NEW SHIT
|
||||
noteData = songData.notes;
|
||||
|
||||
var playerCounter:Int = 0;
|
||||
|
||||
var daBeats:Int = 0; // Not exactly representative of 'daBeats' lol, just how much it has looped
|
||||
for (section in noteData)
|
||||
{
|
||||
var coolSection:Int = Std.int(section.lengthInSteps / 4);
|
||||
|
||||
for (songNotes in section.sectionNotes)
|
||||
{
|
||||
var daStrumTime:Float = songNotes[0] + FlxG.save.data.offset;
|
||||
if (daStrumTime < 0)
|
||||
daStrumTime = 0;
|
||||
var daNoteData:Int = Std.int(songNotes[1] % 4);
|
||||
|
||||
var gottaHitNote:Bool = section.mustHitSection;
|
||||
|
||||
if (songNotes[1] > 3)
|
||||
{
|
||||
gottaHitNote = !section.mustHitSection;
|
||||
}
|
||||
|
||||
var oldNote:Note;
|
||||
if (unspawnNotes.length > 0)
|
||||
oldNote = unspawnNotes[Std.int(unspawnNotes.length - 1)];
|
||||
else
|
||||
oldNote = null;
|
||||
|
||||
var swagNote:Note = new Note(daStrumTime, daNoteData, oldNote,false, true);
|
||||
|
||||
|
||||
if (!gottaHitNote)
|
||||
continue;
|
||||
|
||||
swagNote.baseStrum = Math.round(songNotes[0]);
|
||||
|
||||
swagNote.sustainLength = songNotes[2];
|
||||
swagNote.scrollFactor.set(0, 0);
|
||||
|
||||
var susLength:Float = swagNote.sustainLength;
|
||||
|
||||
susLength = susLength / Conductor.stepCrochet;
|
||||
unspawnNotes.push(swagNote);
|
||||
|
||||
for (susNote in 0...Math.floor(susLength))
|
||||
{
|
||||
oldNote = unspawnNotes[Std.int(unspawnNotes.length - 1)];
|
||||
|
||||
var sustainNote:Note = new Note(daStrumTime + (Conductor.stepCrochet * susNote) + Conductor.stepCrochet, daNoteData, oldNote, true, true);
|
||||
sustainNote.scrollFactor.set();
|
||||
unspawnNotes.push(sustainNote);
|
||||
|
||||
sustainNote.mustPress = gottaHitNote;
|
||||
|
||||
if (sustainNote.mustPress)
|
||||
{
|
||||
sustainNote.x += FlxG.width / 2; // general offset
|
||||
}
|
||||
}
|
||||
|
||||
swagNote.mustPress = gottaHitNote;
|
||||
|
||||
if (swagNote.mustPress)
|
||||
{
|
||||
swagNote.x += FlxG.width / 2; // general offset
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
daBeats += 1;
|
||||
}
|
||||
|
||||
// trace(unspawnNotes.length);
|
||||
// playerCounter += 1;
|
||||
|
||||
unspawnNotes.sort(sortByShit);
|
||||
|
||||
Conductor.mapBPMChanges(SONG);
|
||||
Conductor.changeBPM(SONG.bpm);
|
||||
|
||||
FlxG.sound.playMusic(Paths.inst(SONG.song), 1, false);
|
||||
FlxG.sound.music.onComplete = endSong;
|
||||
vocals.play();
|
||||
}
|
||||
|
||||
function sortByShit(Obj1:Note, Obj2:Note):Int
|
||||
{
|
||||
return FlxSort.byValues(FlxSort.ASCENDING, Obj1.strumTime, Obj2.strumTime);
|
||||
}
|
||||
}
|
@ -1,5 +1,15 @@
|
||||
package;
|
||||
|
||||
import lime.app.Application;
|
||||
import openfl.utils.Future;
|
||||
import openfl.media.Sound;
|
||||
import flixel.system.FlxSound;
|
||||
#if sys
|
||||
import smTools.SMFile;
|
||||
import sys.FileSystem;
|
||||
import sys.io.File;
|
||||
#end
|
||||
import Song.SwagSong;
|
||||
import flixel.input.gamepad.FlxGamepad;
|
||||
import flash.text.TextField;
|
||||
import flixel.FlxG;
|
||||
import flixel.FlxSprite;
|
||||
@ -19,15 +29,17 @@ using StringTools;
|
||||
|
||||
class FreeplayState extends MusicBeatState
|
||||
{
|
||||
var songs:Array<SongMetadata> = [];
|
||||
public static var songs:Array<SongMetadata> = [];
|
||||
|
||||
var selector:FlxText;
|
||||
var curSelected:Int = 0;
|
||||
var curDifficulty:Int = 1;
|
||||
public static var curSelected:Int = 0;
|
||||
public static var curDifficulty:Int = 1;
|
||||
|
||||
var scoreText:FlxText;
|
||||
var comboText:FlxText;
|
||||
var diffText:FlxText;
|
||||
var diffCalcText:FlxText;
|
||||
var previewtext:FlxText;
|
||||
var lerpScore:Int = 0;
|
||||
var intendedScore:Int = 0;
|
||||
var combo:String = '';
|
||||
@ -37,16 +49,110 @@ class FreeplayState extends MusicBeatState
|
||||
|
||||
private var iconArray:Array<HealthIcon> = [];
|
||||
|
||||
public static var openedPreview = false;
|
||||
|
||||
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()
|
||||
{
|
||||
var initSonglist = CoolUtil.coolTextFile(Paths.txt('freeplaySonglist'));
|
||||
var initSonglist = CoolUtil.coolTextFile(Paths.txt('data/freeplaySonglist'));
|
||||
|
||||
//var diffList = "";
|
||||
|
||||
songData = [];
|
||||
songs = [];
|
||||
|
||||
for (i in 0...initSonglist.length)
|
||||
{
|
||||
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]);
|
||||
var format = StringTools.replace(meta.songName, " ", "-");
|
||||
switch (format) {
|
||||
case 'Dad-Battle': format = 'Dadbattle';
|
||||
case 'Philly-Nice': format = 'Philly';
|
||||
}
|
||||
|
||||
var diffs = [];
|
||||
var diffsThatExist = [];
|
||||
|
||||
|
||||
#if sys
|
||||
if (FileSystem.exists('assets/data/${format}/${format}-hard.json'))
|
||||
diffsThatExist.push("Hard");
|
||||
if (FileSystem.exists('assets/data/${format}/${format}-easy.json'))
|
||||
diffsThatExist.push("Easy");
|
||||
if (FileSystem.exists('assets/data/${format}/${format}.json'))
|
||||
diffsThatExist.push("Normal");
|
||||
|
||||
if (diffsThatExist.length == 0)
|
||||
{
|
||||
Application.current.window.alert("No difficulties found for chart, skipping.",meta.songName + " Chart");
|
||||
continue;
|
||||
}
|
||||
#else
|
||||
diffsThatExist = ["Easy","Normal","Hard"];
|
||||
#end
|
||||
if (diffsThatExist.contains("Easy"))
|
||||
FreeplayState.loadDiff(0,format,meta.songName,diffs);
|
||||
if (diffsThatExist.contains("Normal"))
|
||||
FreeplayState.loadDiff(1,format,meta.songName,diffs);
|
||||
if (diffsThatExist.contains("Hard"))
|
||||
FreeplayState.loadDiff(2,format,meta.songName,diffs);
|
||||
|
||||
meta.diffs = diffsThatExist;
|
||||
|
||||
if (diffsThatExist.length != 3)
|
||||
trace("I ONLY FOUND " + diffsThatExist);
|
||||
|
||||
FreeplayState.songData.set(meta.songName,diffs);
|
||||
trace('loaded diffs for ' + meta.songName);
|
||||
songs.push(meta);
|
||||
|
||||
}
|
||||
|
||||
trace("tryin to load sm files");
|
||||
|
||||
#if sys
|
||||
for(i in FileSystem.readDirectory("assets/sm/"))
|
||||
{
|
||||
trace(i);
|
||||
if (FileSystem.isDirectory("assets/sm/" + i))
|
||||
{
|
||||
trace("Reading SM file dir " + i);
|
||||
for (file in FileSystem.readDirectory("assets/sm/" + i))
|
||||
{
|
||||
if (file.contains(" "))
|
||||
FileSystem.rename("assets/sm/" + i + "/" + file,"assets/sm/" + i + "/" + file.replace(" ","_"));
|
||||
if (file.endsWith(".sm"))
|
||||
{
|
||||
trace("reading " + file);
|
||||
var file:SMFile = SMFile.loadFile("assets/sm/" + i + "/" + file.replace(" ","_"));
|
||||
trace("Converting " + file.header.TITLE);
|
||||
var data = file.convertToFNF("assets/sm/" + i + "/converted.json");
|
||||
var meta = new SongMetadata(file.header.TITLE, 0, "sm",file,"assets/sm/" + i);
|
||||
songs.push(meta);
|
||||
var song = Song.loadFromJsonRAW(data);
|
||||
songData.set(file.header.TITLE, [song,song,song]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#end
|
||||
|
||||
//trace("\n" + diffList);
|
||||
|
||||
/*
|
||||
if (FlxG.sound.music != null)
|
||||
{
|
||||
@ -66,11 +172,17 @@ class FreeplayState extends MusicBeatState
|
||||
isDebug = true;
|
||||
#end
|
||||
|
||||
persistentUpdate = true;
|
||||
|
||||
// LOAD MUSIC
|
||||
|
||||
// LOAD CHARACTERS
|
||||
|
||||
var bg:FlxSprite = new FlxSprite().loadGraphic(Paths.image('menuBGBlue'));
|
||||
if(FlxG.save.data.antialiasing)
|
||||
{
|
||||
bg.antialiasing = true;
|
||||
}
|
||||
add(bg);
|
||||
|
||||
grpSongs = new FlxTypedGroup<Alphabet>();
|
||||
@ -100,7 +212,7 @@ class FreeplayState extends MusicBeatState
|
||||
scoreText.setFormat(Paths.font("vcr.ttf"), 32, FlxColor.WHITE, RIGHT);
|
||||
// scoreText.alignment = RIGHT;
|
||||
|
||||
var scoreBG:FlxSprite = new FlxSprite(scoreText.x - 6, 0).makeGraphic(Std.int(FlxG.width * 0.35), 66, 0xFF000000);
|
||||
var scoreBG:FlxSprite = new FlxSprite(scoreText.x - 6, 0).makeGraphic(Std.int(FlxG.width * 0.35), 105, 0xFF000000);
|
||||
scoreBG.alpha = 0.6;
|
||||
add(scoreBG);
|
||||
|
||||
@ -108,6 +220,14 @@ class FreeplayState extends MusicBeatState
|
||||
diffText.font = scoreText.font;
|
||||
add(diffText);
|
||||
|
||||
diffCalcText = new FlxText(scoreText.x, scoreText.y + 66, 0, "", 24);
|
||||
diffCalcText.font = scoreText.font;
|
||||
add(diffCalcText);
|
||||
|
||||
previewtext = new FlxText(scoreText.x, scoreText.y + 94, 0, "" + (KeyBinds.gamepad ? "X" : "SPACE") + " to preview", 24);
|
||||
previewtext.font = scoreText.font;
|
||||
//add(previewtext);
|
||||
|
||||
comboText = new FlxText(diffText.x + 100, diffText.y, 0, "", 24);
|
||||
comboText.font = diffText.font;
|
||||
add(comboText);
|
||||
@ -166,7 +286,7 @@ class FreeplayState extends MusicBeatState
|
||||
num++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override function update(elapsed:Float)
|
||||
{
|
||||
super.update(elapsed);
|
||||
@ -184,9 +304,40 @@ class FreeplayState extends MusicBeatState
|
||||
scoreText.text = "PERSONAL BEST:" + lerpScore;
|
||||
comboText.text = combo + '\n';
|
||||
|
||||
var upP = controls.UP_P;
|
||||
var downP = controls.DOWN_P;
|
||||
var accepted = controls.ACCEPT;
|
||||
if (FlxG.sound.music.volume > 0.8)
|
||||
{
|
||||
FlxG.sound.music.volume -= 0.5 * FlxG.elapsed;
|
||||
}
|
||||
|
||||
var upP = FlxG.keys.justPressed.UP;
|
||||
var downP = FlxG.keys.justPressed.DOWN;
|
||||
var accepted = FlxG.keys.justPressed.ENTER;
|
||||
|
||||
var gamepad:FlxGamepad = FlxG.gamepads.lastActive;
|
||||
|
||||
if (gamepad != null)
|
||||
{
|
||||
|
||||
if (gamepad.justPressed.DPAD_UP)
|
||||
{
|
||||
changeSelection(-1);
|
||||
}
|
||||
if (gamepad.justPressed.DPAD_DOWN)
|
||||
{
|
||||
changeSelection(1);
|
||||
}
|
||||
if (gamepad.justPressed.DPAD_LEFT)
|
||||
{
|
||||
changeDiff(-1);
|
||||
}
|
||||
if (gamepad.justPressed.DPAD_RIGHT)
|
||||
{
|
||||
changeDiff(1);
|
||||
}
|
||||
|
||||
//if (gamepad.justPressed.X && !openedPreview)
|
||||
//openSubState(new DiffOverview());
|
||||
}
|
||||
|
||||
if (upP)
|
||||
{
|
||||
@ -197,9 +348,12 @@ class FreeplayState extends MusicBeatState
|
||||
changeSelection(1);
|
||||
}
|
||||
|
||||
if (controls.LEFT_P)
|
||||
//if (FlxG.keys.justPressed.SPACE && !openedPreview)
|
||||
//openSubState(new DiffOverview());
|
||||
|
||||
if (FlxG.keys.justPressed.LEFT)
|
||||
changeDiff(-1);
|
||||
if (controls.RIGHT_P)
|
||||
if (FlxG.keys.justPressed.RIGHT)
|
||||
changeDiff(1);
|
||||
|
||||
if (controls.BACK)
|
||||
@ -215,24 +369,45 @@ class FreeplayState extends MusicBeatState
|
||||
case 'Dad-Battle': songFormat = 'Dadbattle';
|
||||
case 'Philly-Nice': songFormat = 'Philly';
|
||||
}
|
||||
|
||||
trace(songs[curSelected].songName);
|
||||
var hmm;
|
||||
try
|
||||
{
|
||||
hmm = songData.get(songs[curSelected].songName)[curDifficulty];
|
||||
if (hmm == null)
|
||||
return;
|
||||
}
|
||||
catch(ex)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var poop:String = Highscore.formatSong(songFormat, curDifficulty);
|
||||
|
||||
trace(poop);
|
||||
|
||||
PlayState.SONG = Song.loadFromJson(poop, songs[curSelected].songName);
|
||||
PlayState.SONG = hmm;
|
||||
PlayState.isStoryMode = false;
|
||||
PlayState.storyDifficulty = curDifficulty;
|
||||
PlayState.storyWeek = songs[curSelected].week;
|
||||
trace('CUR WEEK' + PlayState.storyWeek);
|
||||
#if sys
|
||||
if (songs[curSelected].songCharacter == "sm")
|
||||
{
|
||||
PlayState.isSM = true;
|
||||
PlayState.sm = songs[curSelected].sm;
|
||||
PlayState.pathToSm = songs[curSelected].path;
|
||||
}
|
||||
else
|
||||
PlayState.isSM = false;
|
||||
#else
|
||||
PlayState.isSM = false;
|
||||
#end
|
||||
LoadingState.loadAndSwitchState(new PlayState());
|
||||
}
|
||||
}
|
||||
|
||||
function changeDiff(change:Int = 0)
|
||||
{
|
||||
if (!songs[curSelected].diffs.contains(CoolUtil.difficultyFromInt(curDifficulty + change)))
|
||||
return;
|
||||
|
||||
curDifficulty += change;
|
||||
|
||||
if (curDifficulty < 0)
|
||||
@ -240,6 +415,7 @@ class FreeplayState extends MusicBeatState
|
||||
if (curDifficulty > 2)
|
||||
curDifficulty = 0;
|
||||
|
||||
|
||||
// adjusting the highscore song name to be compatible (changeDiff)
|
||||
var songHighscore = StringTools.replace(songs[curSelected].songName, " ", "-");
|
||||
switch (songHighscore) {
|
||||
@ -251,16 +427,8 @@ class FreeplayState extends MusicBeatState
|
||||
intendedScore = Highscore.getScore(songHighscore, curDifficulty);
|
||||
combo = Highscore.getCombo(songHighscore, curDifficulty);
|
||||
#end
|
||||
|
||||
switch (curDifficulty)
|
||||
{
|
||||
case 0:
|
||||
diffText.text = "EASY";
|
||||
case 1:
|
||||
diffText.text = 'NORMAL';
|
||||
case 2:
|
||||
diffText.text = "HARD";
|
||||
}
|
||||
diffCalcText.text = 'RATING: ${DiffCalc.CalculateDiff(songData.get(songs[curSelected].songName)[curDifficulty])}';
|
||||
diffText.text = CoolUtil.difficultyFromInt(curDifficulty).toUpperCase();
|
||||
}
|
||||
|
||||
function changeSelection(change:Int = 0)
|
||||
@ -272,6 +440,8 @@ class FreeplayState extends MusicBeatState
|
||||
// NGio.logEvent('Fresh');
|
||||
FlxG.sound.play(Paths.sound('scrollMenu'), 0.4);
|
||||
|
||||
|
||||
|
||||
curSelected += change;
|
||||
|
||||
if (curSelected < 0)
|
||||
@ -279,6 +449,19 @@ class FreeplayState extends MusicBeatState
|
||||
if (curSelected >= songs.length)
|
||||
curSelected = 0;
|
||||
|
||||
if (songs[curSelected].diffs.length != 3)
|
||||
{
|
||||
switch(songs[curSelected].diffs[0])
|
||||
{
|
||||
case "Easy":
|
||||
curDifficulty = 0;
|
||||
case "Normal":
|
||||
curDifficulty = 1;
|
||||
case "Hard":
|
||||
curDifficulty = 2;
|
||||
}
|
||||
}
|
||||
|
||||
// selector.y = (70 * curSelected) + 30;
|
||||
|
||||
// adjusting the highscore song name to be compatible (changeSelection)
|
||||
@ -295,10 +478,38 @@ class FreeplayState extends MusicBeatState
|
||||
// lerpScore = 0;
|
||||
#end
|
||||
|
||||
diffCalcText.text = 'RATING: ${DiffCalc.CalculateDiff(songData.get(songs[curSelected].songName)[curDifficulty])}';
|
||||
|
||||
#if PRELOAD_ALL
|
||||
FlxG.sound.playMusic(Paths.inst(songs[curSelected].songName), 0);
|
||||
if (songs[curSelected].songCharacter == "sm")
|
||||
{
|
||||
var data = songs[curSelected];
|
||||
trace("Loading " + data.path + "/" + data.sm.header.MUSIC);
|
||||
var bytes = File.getBytes(data.path + "/" + data.sm.header.MUSIC);
|
||||
var sound = new Sound();
|
||||
sound.loadCompressedDataFromByteArray(bytes.getData(), bytes.length);
|
||||
FlxG.sound.playMusic(sound);
|
||||
}
|
||||
else
|
||||
FlxG.sound.playMusic(Paths.inst(songs[curSelected].songName), 0);
|
||||
#end
|
||||
|
||||
var hmm;
|
||||
try
|
||||
{
|
||||
hmm = songData.get(songs[curSelected].songName)[curDifficulty];
|
||||
if (hmm != null)
|
||||
Conductor.changeBPM(hmm.bpm);
|
||||
}
|
||||
catch(ex)
|
||||
{}
|
||||
|
||||
if (openedPreview)
|
||||
{
|
||||
closeSubState();
|
||||
openSubState(new DiffOverview());
|
||||
}
|
||||
|
||||
var bullShit:Int = 0;
|
||||
|
||||
for (i in 0...iconArray.length)
|
||||
@ -329,12 +540,29 @@ class SongMetadata
|
||||
{
|
||||
public var songName:String = "";
|
||||
public var week:Int = 0;
|
||||
#if sys
|
||||
public var sm:SMFile;
|
||||
public var path:String;
|
||||
#end
|
||||
public var songCharacter:String = "";
|
||||
|
||||
public var diffs = [];
|
||||
|
||||
#if sys
|
||||
public function new(song:String, week:Int, songCharacter:String, ?sm:SMFile = null, ?path:String = "")
|
||||
{
|
||||
this.songName = song;
|
||||
this.week = week;
|
||||
this.songCharacter = songCharacter;
|
||||
this.sm = sm;
|
||||
this.path = path;
|
||||
}
|
||||
#else
|
||||
public function new(song:String, week:Int, songCharacter:String)
|
||||
{
|
||||
this.songName = song;
|
||||
this.week = week;
|
||||
this.songCharacter = songCharacter;
|
||||
}
|
||||
#end
|
||||
}
|
||||
|
@ -41,7 +41,10 @@ class GameOverState extends FlxTransitionableState
|
||||
restart.setGraphicSize(Std.int(restart.width * 0.6));
|
||||
restart.updateHitbox();
|
||||
restart.alpha = 0;
|
||||
restart.antialiasing = true;
|
||||
if(FlxG.save.data.antialiasing)
|
||||
{
|
||||
restart.antialiasing = true;
|
||||
}
|
||||
add(restart);
|
||||
|
||||
FlxG.sound.music.fadeOut(2, FlxG.sound.music.volume * 0.6);
|
||||
|
@ -48,6 +48,8 @@ class GameOverSubstate extends MusicBeatSubstate
|
||||
bf.playAnim('firstDeath');
|
||||
}
|
||||
|
||||
var startVibin:Bool = false;
|
||||
|
||||
override function update(elapsed:Float)
|
||||
{
|
||||
super.update(elapsed);
|
||||
@ -76,6 +78,7 @@ class GameOverSubstate extends MusicBeatSubstate
|
||||
if (bf.animation.curAnim.name == 'firstDeath' && bf.animation.curAnim.finished)
|
||||
{
|
||||
FlxG.sound.playMusic(Paths.music('gameOver' + stageSuffix));
|
||||
startVibin = true;
|
||||
}
|
||||
|
||||
if (FlxG.sound.music.playing)
|
||||
@ -88,6 +91,10 @@ class GameOverSubstate extends MusicBeatSubstate
|
||||
{
|
||||
super.beatHit();
|
||||
|
||||
if (startVibin && !isEnding)
|
||||
{
|
||||
bf.playAnim('deathLoop', true);
|
||||
}
|
||||
FlxG.log.add('beat');
|
||||
}
|
||||
|
||||
@ -97,6 +104,7 @@ class GameOverSubstate extends MusicBeatSubstate
|
||||
{
|
||||
if (!isEnding)
|
||||
{
|
||||
PlayState.startTime = 0;
|
||||
isEnding = true;
|
||||
bf.playAnim('deathConfirm', true);
|
||||
FlxG.sound.music.stop();
|
||||
|
@ -33,6 +33,7 @@ class GameplayCustomizeState extends MusicBeatState
|
||||
|
||||
var bf:Boyfriend;
|
||||
var dad:Character;
|
||||
var gf:Character;
|
||||
|
||||
var strumLine:FlxSprite;
|
||||
var strumLineNotes:FlxTypedGroup<FlxSprite>;
|
||||
@ -42,7 +43,7 @@ class GameplayCustomizeState extends MusicBeatState
|
||||
public override function create() {
|
||||
#if windows
|
||||
// Updating Discord Rich Presence
|
||||
DiscordClient.changePresence("Customizing Gameplay", null);
|
||||
DiscordClient.changePresence("Customizing Gameplay Modules", null);
|
||||
#end
|
||||
|
||||
sick = new FlxSprite().loadGraphic(Paths.image('sick','shared'));
|
||||
@ -51,7 +52,7 @@ class GameplayCustomizeState extends MusicBeatState
|
||||
curt = new FlxSprite(-500, -300).loadGraphic(Paths.image('stagecurtains','shared'));
|
||||
front = new FlxSprite(-650, 600).loadGraphic(Paths.image('stagefront','shared'));
|
||||
|
||||
Conductor.changeBPM(102);
|
||||
//Conductor.changeBPM(102);
|
||||
persistentUpdate = true;
|
||||
|
||||
super.create();
|
||||
@ -74,10 +75,14 @@ class GameplayCustomizeState extends MusicBeatState
|
||||
|
||||
bf = new Boyfriend(770, 450, 'bf');
|
||||
|
||||
gf = new Character(400, 130, 'gf');
|
||||
gf.scrollFactor.set(0.95, 0.95);
|
||||
|
||||
var camPos:FlxPoint = new FlxPoint(dad.getGraphicMidpoint().x + 400, dad.getGraphicMidpoint().y);
|
||||
|
||||
camFollow.setPosition(camPos.x, camPos.y);
|
||||
|
||||
add(gf);
|
||||
add(bf);
|
||||
add(dad);
|
||||
|
||||
@ -111,7 +116,7 @@ class GameplayCustomizeState extends MusicBeatState
|
||||
generateStaticArrows(0);
|
||||
generateStaticArrows(1);
|
||||
|
||||
text = new FlxText(5, FlxG.height + 40, 0, "Drag around gameplay elements, R to reset, Escape to go back.", 12);
|
||||
text = new FlxText(5, FlxG.height + 40, 0, "Click and drag around gameplay elements to customize their positions.\nPress R to reset.\nPress Escape to go back.", 12);
|
||||
text.scrollFactor.set();
|
||||
text.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
|
||||
|
||||
@ -188,8 +193,9 @@ class GameplayCustomizeState extends MusicBeatState
|
||||
{
|
||||
super.beatHit();
|
||||
|
||||
bf.playAnim('idle');
|
||||
dad.dance();
|
||||
bf.playAnim('idle', true);
|
||||
dad.dance(true);
|
||||
gf.dance();
|
||||
|
||||
FlxG.camera.zoom += 0.015;
|
||||
camHUD.zoom += 0.010;
|
||||
|
@ -22,12 +22,20 @@ class GitarooPause extends MusicBeatState
|
||||
FlxG.sound.music.stop();
|
||||
|
||||
var bg:FlxSprite = new FlxSprite().loadGraphic(Paths.image('pauseAlt/pauseBG'));
|
||||
if(FlxG.save.data.antialiasing)
|
||||
{
|
||||
bg.antialiasing = true;
|
||||
}
|
||||
add(bg);
|
||||
|
||||
var bf:FlxSprite = new FlxSprite(0, 30);
|
||||
bf.frames = Paths.getSparrowAtlas('pauseAlt/bfLol');
|
||||
bf.animation.addByPrefix('lol', "funnyThing", 13);
|
||||
bf.animation.play('lol');
|
||||
if(FlxG.save.data.antialiasing)
|
||||
{
|
||||
bf.antialiasing = true;
|
||||
}
|
||||
add(bf);
|
||||
bf.screenCenter(X);
|
||||
|
||||
@ -36,6 +44,10 @@ class GitarooPause extends MusicBeatState
|
||||
replayButton.animation.addByPrefix('selected', 'bluereplay', 0, false);
|
||||
replayButton.animation.appendByPrefix('selected', 'yellowreplay');
|
||||
replayButton.animation.play('selected');
|
||||
if(FlxG.save.data.antialiasing)
|
||||
{
|
||||
replayButton.antialiasing = true;
|
||||
}
|
||||
add(replayButton);
|
||||
|
||||
cancelButton = new FlxSprite(FlxG.width * 0.58, replayButton.y);
|
||||
@ -43,6 +55,10 @@ class GitarooPause extends MusicBeatState
|
||||
cancelButton.animation.addByPrefix('selected', 'bluecancel', 0, false);
|
||||
cancelButton.animation.appendByPrefix('selected', 'cancelyellow');
|
||||
cancelButton.animation.play('selected');
|
||||
if(FlxG.save.data.antialiasing)
|
||||
{
|
||||
cancelButton.antialiasing = true;
|
||||
}
|
||||
add(cancelButton);
|
||||
|
||||
changeThing();
|
||||
|