diff --git a/CHANGELOG.md b/CHANGELOG.md
index 758bc18..3898230 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,7 +6,9 @@ All notable changes will be documented in this file.
- 32bit support
- Controller (dancepads) support
- Pause screen
+- Main Menu overhaul
+- Cool intro screen thing
-## [1.0.0] - 2020-10-05
+## [0.1.0] - 2020-10-05
### Added
- Uh, everything. This the game's initial gamejam release. We put it out
\ No newline at end of file
diff --git a/art/build-Itch-HTML.bat b/art/build-Itch-HTML.bat
index b3d1793..69c8f0d 100644
--- a/art/build-Itch-HTML.bat
+++ b/art/build-Itch-HTML.bat
@@ -3,9 +3,9 @@ color 0a
cd ..
@echo on
echo BUILDING GAME
-lime build html5 -final
+lime build html5 -debug
echo UPLOADING TO ITCH
-butler push ./export/release/html5/bin ninja-muffin24/friday-night-funkin:html5
-butler status ninja-muffin24/ld47:html5
+butler push ./export/release/html5/bin ninja-muffin24/funkin:html5
+butler status ninja-muffin24/funkin:html5
echo ITCH SHIT UPDATED LMAOOOOO
pause
\ No newline at end of file
diff --git a/art/build-Itch-WINDOWS.bat b/art/build-Itch-WINDOWS.bat
index cf966b2..e09c4aa 100644
--- a/art/build-Itch-WINDOWS.bat
+++ b/art/build-Itch-WINDOWS.bat
@@ -3,12 +3,12 @@ color 0a
cd ..
@echo on
echo BUILDING GAME
-lime build windows -final
+lime build windows -debug
echo UPLOADING 64 BIT VERSION TO ITCH
-butler push ./export/release/windows/bin ninja-muffin24/friday-night-funkin:windows-64bit
-lime build windows -final -32
+butler push ./export/debug/windows/bin ninja-muffin24/funkin:windows-64bit
+lime build windows -debug -32
echo UPLOADING 32 BIT VERSION TO ITCH
-butler push ./export/release/windows/bin ninja-muffin24/friday-night-funkin:windows-32bit
+butler push ./export/debug/windows/bin ninja-muffin24/funkin:windows-32bit
butler status ninja-muffin24/friday-night-funkin:windows-32bit
butler status ninja-muffin24/friday-night-funkin:windows-64bit
echo ITCH SHIT UPDATED LMAOOOOO
diff --git a/art/speech_bubble_talking.fla b/art/speech_bubble_talking.fla
new file mode 100644
index 0000000..6144292
Binary files /dev/null and b/art/speech_bubble_talking.fla differ
diff --git a/art/spooky_kids_assets.fla b/art/spooky_kids_assets.fla
new file mode 100644
index 0000000..eeae1b3
Binary files /dev/null and b/art/spooky_kids_assets.fla differ
diff --git a/assets/images/speech_bubble_talking.png b/assets/images/speech_bubble_talking.png
new file mode 100644
index 0000000..bb8f56b
Binary files /dev/null and b/assets/images/speech_bubble_talking.png differ
diff --git a/assets/images/speech_bubble_talking.xml b/assets/images/speech_bubble_talking.xml
new file mode 100644
index 0000000..e36bc2e
--- /dev/null
+++ b/assets/images/speech_bubble_talking.xml
@@ -0,0 +1,537 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/spooky_kids_assets.png b/assets/images/spooky_kids_assets.png
new file mode 100644
index 0000000..1400e96
Binary files /dev/null and b/assets/images/spooky_kids_assets.png differ
diff --git a/assets/images/spooky_kids_assets.xml b/assets/images/spooky_kids_assets.xml
new file mode 100644
index 0000000..c8396e5
--- /dev/null
+++ b/assets/images/spooky_kids_assets.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/source/AnimationDebug.hx b/source/AnimationDebug.hx
index 6a938d6..ae3ca51 100644
--- a/source/AnimationDebug.hx
+++ b/source/AnimationDebug.hx
@@ -21,13 +21,14 @@ class AnimationDebug extends FlxState
var dumbTexts:FlxTypedGroup;
var animList:Array = [];
var curAnim:Int = 0;
- var isDad:Bool = false;
+ var isDad:Bool = true;
+ var daAnim:String = 'spooky';
var camFollow:FlxObject;
- public function new(isDad:Bool = false)
+ public function new(daAnim:String = 'spooky')
{
super();
- this.isDad = isDad;
+ this.daAnim = daAnim;
}
override function create()
@@ -40,7 +41,7 @@ class AnimationDebug extends FlxState
if (isDad)
{
- dad = new Character(0, 0);
+ dad = new Character(0, 0, daAnim);
dad.screenCenter();
dad.debugMode = true;
add(dad);
diff --git a/source/Character.hx b/source/Character.hx
index ca9211d..85df326 100644
--- a/source/Character.hx
+++ b/source/Character.hx
@@ -39,14 +39,14 @@ class Character extends FlxSprite
animation.addByIndices('danceRight', 'GF Dancing Beat', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false);
addOffset('cheer');
- addOffset('sad');
- addOffset('danceLeft');
- addOffset('danceRight');
+ addOffset('sad', -2, -2);
+ addOffset('danceLeft', 0, -9);
+ addOffset('danceRight', 0, -9);
- addOffset("singUP");
- addOffset("singRIGHT");
- addOffset("singLEFT");
- addOffset("singDOWN");
+ addOffset("singUP", 0, 4);
+ addOffset("singRIGHT", 0, -20);
+ addOffset("singLEFT", 0, -19);
+ addOffset("singDOWN", 0, -20);
playAnim('danceRight');
@@ -66,6 +66,25 @@ class Character extends FlxSprite
addOffset("singRIGHT", 0, 27);
addOffset("singLEFT", -10, 10);
addOffset("singDOWN", 0, -30);
+ case 'spooky':
+ tex = FlxAtlasFrames.fromSparrow(AssetPaths.spooky_kids_assets__png, AssetPaths.spooky_kids_assets__xml);
+ frames = tex;
+ animation.addByPrefix('singUP', 'spooky UP NOTE', 24, false);
+ animation.addByPrefix('singDOWN', 'spooky DOWN note', 24, false);
+ animation.addByPrefix('singLEFT', 'note sing left', 24, false);
+ animation.addByPrefix('singRIGHT', 'spooky sing right', 24, false);
+ animation.addByIndices('danceLeft', 'spooky dance idle', [16, 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);
+
+ playAnim('danceRight');
}
}
@@ -81,6 +100,13 @@ class Character extends FlxSprite
case 'gf':
danced = !danced;
+ if (danced)
+ playAnim('danceRight');
+ else
+ playAnim('danceLeft');
+ case 'spooky':
+ danced = !danced;
+
if (danced)
playAnim('danceRight');
else
diff --git a/source/ChartingState.hx b/source/ChartingState.hx
index 7dcfca6..7f079f7 100644
--- a/source/ChartingState.hx
+++ b/source/ChartingState.hx
@@ -153,15 +153,15 @@ class ChartingState extends MusicBeatState
loadJson(_song.song.toLowerCase());
});
- var stepperSpeed:FlxUINumericStepper = new FlxUINumericStepper(10, 80, 0.1, 1, 0.1, 10, 1, null);
+ var stepperSpeed:FlxUINumericStepper = new FlxUINumericStepper(10, 80, 0.1, 1, 0.1, 10, 1);
stepperSpeed.value = _song.speed;
stepperSpeed.name = 'song_speed';
- var stepperBPM:FlxUINumericStepper = new FlxUINumericStepper(10, 65, 1, 1, 1, 250, 0, null);
+ var stepperBPM:FlxUINumericStepper = new FlxUINumericStepper(10, 65, 1, 1, 1, 250, 0);
stepperBPM.value = Conductor.bpm;
stepperBPM.name = 'song_bpm';
- var characters:Array = ["bf", 'dad', 'gf'];
+ var characters:Array = ["bf", 'dad', 'gf', 'spooky'];
var player1DropDown = new FlxUIDropDownMenu(10, 100, FlxUIDropDownMenu.makeStrIdLabelArray(characters, true), function(character:String)
{
diff --git a/source/PlayState.hx b/source/PlayState.hx
index ee8660e..9980fb6 100644
--- a/source/PlayState.hx
+++ b/source/PlayState.hx
@@ -61,7 +61,7 @@ class PlayState extends MusicBeatState
private var healthBar:FlxBar;
private var generatedMusic:Bool = false;
- private var countingDown:Bool = false;
+ private var startingSong:Bool = false;
private var healthHeads:FlxSprite;
@@ -111,10 +111,13 @@ class PlayState extends MusicBeatState
dad = new Character(100, 100, SONG.player2);
add(dad);
- if (SONG.player2 == 'gf')
+ switch (SONG.player2)
{
- dad.setPosition(gf.x, gf.y);
- gf.visible = false;
+ case 'gf':
+ dad.setPosition(gf.x, gf.y);
+ gf.visible = false;
+ case "spooky":
+ dad.y += 200;
}
boyfriend = new Boyfriend(770, 450);
@@ -130,13 +133,59 @@ class PlayState extends MusicBeatState
playerStrums = new FlxTypedGroup();
- var swagCounter:Int = 0;
+ startingSong = true;
+
+ startCountdown();
generateSong(SONG.song);
- countingDown = true;
+
+ // add(strumLine);
+
+ camFollow = new FlxObject(0, 0, 1, 1);
+ camFollow.setPosition(dad.getGraphicMidpoint().x, dad.getGraphicMidpoint().y);
+ add(camFollow);
+
+ FlxG.camera.follow(camFollow, LOCKON, 0.04);
+ // FlxG.camera.setScrollBounds(0, FlxG.width, 0, FlxG.height);
+ FlxG.camera.zoom = 1.05;
+
+ FlxG.worldBounds.set(0, 0, FlxG.width, FlxG.height);
+
+ FlxG.fixedTimestep = false;
+
+ healthBarBG = new FlxSprite(0, FlxG.height * 0.9).loadGraphic(AssetPaths.healthBar__png);
+ healthBarBG.screenCenter(X);
+ healthBarBG.scrollFactor.set();
+ add(healthBarBG);
+
+ healthBar = new FlxBar(healthBarBG.x + 4, healthBarBG.y + 4, RIGHT_TO_LEFT, Std.int(healthBarBG.width - 8), Std.int(healthBarBG.height - 8), this,
+ 'health', 0, 2);
+ healthBar.scrollFactor.set();
+ healthBar.createFilledBar(0xFFFF0000, 0xFF66FF33);
+ // healthBar
+ add(healthBar);
+
+ healthHeads = new FlxSprite();
+ var headTex = FlxAtlasFrames.fromSparrow(AssetPaths.healthHeads__png, AssetPaths.healthHeads__xml);
+ healthHeads.frames = headTex;
+ healthHeads.animation.add('healthy', [0]);
+ healthHeads.animation.add('unhealthy', [1]);
+ healthHeads.y = healthBar.y - (healthHeads.height / 2);
+ healthHeads.scrollFactor.set();
+ healthHeads.antialiasing = true;
+ add(healthHeads);
+
+ super.create();
+ }
+
+ function startCountdown():Void
+ {
+ startedCountdown = true;
Conductor.songPosition = 0;
Conductor.songPosition -= Conductor.crochet * 5;
+ var swagCounter:Int = 0;
+
new FlxTimer().start(Conductor.crochet / 1000, function(tmr:FlxTimer)
{
switch (swagCounter)
@@ -188,49 +237,11 @@ class PlayState extends MusicBeatState
swagCounter += 1;
// generateSong('fresh');
}, 5);
-
- // add(strumLine);
-
- camFollow = new FlxObject(0, 0, 1, 1);
- camFollow.setPosition(dad.getGraphicMidpoint().x, dad.getGraphicMidpoint().y);
- add(camFollow);
-
- FlxG.camera.follow(camFollow, LOCKON, 0.04);
- // FlxG.camera.setScrollBounds(0, FlxG.width, 0, FlxG.height);
- FlxG.camera.zoom = 1.05;
-
- FlxG.worldBounds.set(0, 0, FlxG.width, FlxG.height);
-
- FlxG.fixedTimestep = false;
-
- healthBarBG = new FlxSprite(0, FlxG.height * 0.9).loadGraphic(AssetPaths.healthBar__png);
- healthBarBG.screenCenter(X);
- healthBarBG.scrollFactor.set();
- add(healthBarBG);
-
- healthBar = new FlxBar(healthBarBG.x + 4, healthBarBG.y + 4, RIGHT_TO_LEFT, Std.int(healthBarBG.width - 8), Std.int(healthBarBG.height - 8), this,
- 'health', 0, 2);
- healthBar.scrollFactor.set();
- healthBar.createFilledBar(0xFFFF0000, 0xFF66FF33);
- // healthBar
- add(healthBar);
-
- healthHeads = new FlxSprite();
- var headTex = FlxAtlasFrames.fromSparrow(AssetPaths.healthHeads__png, AssetPaths.healthHeads__xml);
- healthHeads.frames = headTex;
- healthHeads.animation.add('healthy', [0]);
- healthHeads.animation.add('unhealthy', [1]);
- healthHeads.y = healthBar.y - (healthHeads.height / 2);
- healthHeads.scrollFactor.set();
- healthHeads.antialiasing = true;
- add(healthHeads);
-
- super.create();
}
function startSong():Void
{
- countingDown = false;
+ startingSong = false;
FlxG.sound.playMusic("assets/music/" + SONG.song + "_Inst" + TitleState.soundExt);
vocals.play();
}
@@ -458,6 +469,7 @@ class PlayState extends MusicBeatState
}
private var paused:Bool = false;
+ var startedCountdown:Bool = false;
override public function update(elapsed:Float)
{
@@ -491,14 +503,16 @@ class PlayState extends MusicBeatState
/* if (FlxG.keys.justPressed.NINE)
FlxG.switchState(new Charting()); */
if (FlxG.keys.justPressed.EIGHT)
- FlxG.switchState(new AnimationDebug(true));
+ FlxG.switchState(new AnimationDebug(SONG.player2));
- if (countingDown)
+ if (startingSong)
{
- Conductor.songPosition += FlxG.elapsed * 1000;
-
- if (Conductor.songPosition >= 0)
- startSong();
+ if (startedCountdown)
+ {
+ Conductor.songPosition += FlxG.elapsed * 1000;
+ if (Conductor.songPosition >= 0)
+ startSong();
+ }
}
else
Conductor.songPosition = FlxG.sound.music.time;
@@ -941,6 +955,14 @@ class PlayState extends MusicBeatState
});
}
+ if (upR || leftR || rightR || downR)
+ {
+ if (boyfriend.animation.curAnim.name.startsWith('sing'))
+ {
+ boyfriend.playAnim('idle');
+ }
+ }
+
playerStrums.forEach(function(spr:FlxSprite)
{
switch (spr.ID)
diff --git a/source/Song.hx b/source/Song.hx
index c2629b0..6134c10 100644
--- a/source/Song.hx
+++ b/source/Song.hx
@@ -39,7 +39,7 @@ class Song
var daSong:String = '';
var daSectionLengths:Array = [];
- var rawJson = Assets.getText('assets/data/' + jsonInput + '/' + jsonInput + '.json').trim();
+ var rawJson = Assets.getText('assets/data/' + jsonInput.toLowerCase() + '/' + jsonInput.toLowerCase() + '.json').trim();
while (!rawJson.endsWith("}"))
{
@@ -47,23 +47,23 @@ class Song
// LOL GOING THROUGH THE BULLSHIT TO CLEAN IDK WHATS STRANGE
}
- trace(rawJson);
-
- var songData:Song = Json.parse(rawJson).song;
+ // FIX THE CASTING ON WINDOWS/NATIVE
+ var songData:Song = Json.parse(rawJson).song; // Windows???
+ trace(songData);
// trace('LOADED FROM JSON: ' + songData.notes);
-
- for (i in 0...songData.notes.length)
- {
- trace('LOADED FROM JSON: ' + songData.notes[i].sectionNotes);
- // songData.notes[i].sectionNotes = songData.notes[i].sectionNotes
- }
/*
- daNotes = songData.notes;
- daSong = songData.song;
- daSections = songData.sections;
- daBpm = songData.bpm;
- daSectionLengths = songData.sectionLengths; */
+ for (i in 0...songData.notes.length)
+ {
+ trace('LOADED FROM JSON: ' + songData.notes[i].sectionNotes);
+ // songData.notes[i].sectionNotes = songData.notes[i].sectionNotes
+ }
+
+ daNotes = songData.notes;
+ daSong = songData.song;
+ daSections = songData.sections;
+ daBpm = songData.bpm;
+ daSectionLengths = songData.sectionLengths; */
return songData;
}