diff --git a/assets/images/BOYFRIEND.png b/assets/images/BOYFRIEND.png
index fb0b9a6..ee20654 100644
Binary files a/assets/images/BOYFRIEND.png and b/assets/images/BOYFRIEND.png differ
diff --git a/assets/images/BOYFRIEND.xml b/assets/images/BOYFRIEND.xml
index aa029f6..0008f4c 100644
--- a/assets/images/BOYFRIEND.xml
+++ b/assets/images/BOYFRIEND.xml
@@ -2,161 +2,299 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/source/Boyfriend.hx b/source/Boyfriend.hx
index a6beb1a..4796b85 100644
--- a/source/Boyfriend.hx
+++ b/source/Boyfriend.hx
@@ -4,8 +4,12 @@ import flixel.FlxG;
import flixel.FlxSprite;
import flixel.graphics.frames.FlxAtlasFrames;
+using StringTools;
+
class Boyfriend extends Character
{
+ public var stunned:Bool = false;
+
public function new(x:Float, y:Float)
{
super(x, y);
@@ -13,10 +17,14 @@ class Boyfriend extends Character
var tex = FlxAtlasFrames.fromSparrow(AssetPaths.BOYFRIEND__png, AssetPaths.BOYFRIEND__xml);
frames = tex;
animation.addByPrefix('idle', 'BF idle dance', 24, false);
- animation.addByPrefix('singUP', 'BF NOTE UP', 24, false);
- animation.addByPrefix('singLEFT', 'BF NOTE LEFT', 24, false);
- animation.addByPrefix('singRIGHT', 'BF NOTE RIGHT', 24, false);
- animation.addByPrefix('singDOWN', 'BF NOTE DOWN', 24, false);
+ animation.addByPrefix('singUP', 'BF NOTE UP0', 24, false);
+ animation.addByPrefix('singLEFT', 'BF NOTE LEFT0', 24, false);
+ animation.addByPrefix('singRIGHT', 'BF NOTE RIGHT0', 24, false);
+ animation.addByPrefix('singDOWN', 'BF NOTE DOWN0', 24, false);
+ animation.addByPrefix('singUPmiss', 'BF NOTE UP MISS', 24, false);
+ animation.addByPrefix('singLEFTmiss', 'BF NOTE LEFT MISS', 24, false);
+ animation.addByPrefix('singRIGHTmiss', 'BF NOTE RIGHT MISS', 24, false);
+ animation.addByPrefix('singDOWNmiss', 'BF NOTE DOWN MISS', 24, false);
animation.addByPrefix('hey', 'BF HEY', 24, false);
playAnim('idle');
@@ -27,6 +35,19 @@ class Boyfriend extends Character
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);
}
+
+ override function update(elapsed:Float)
+ {
+ if (animation.curAnim.name.endsWith('miss') && animation.curAnim.finished && !debugMode)
+ {
+ playAnim('idle', true, false, 10);
+ }
+ super.update(elapsed);
+ }
}
diff --git a/source/ChartParser.hx b/source/ChartParser.hx
index e6161da..cba97ce 100644
--- a/source/ChartParser.hx
+++ b/source/ChartParser.hx
@@ -75,9 +75,6 @@ class ChartParser
row++;
}
-
- trace(dopeArray.length);
- trace(dopeArray);
return dopeArray;
}
}
diff --git a/source/PlayState.hx b/source/PlayState.hx
index d42fcc8..f3888af 100644
--- a/source/PlayState.hx
+++ b/source/PlayState.hx
@@ -139,10 +139,6 @@ class PlayState extends FlxState
sectionScores[0].push(0);
sectionScores[1].push(0);
- trace('SECTON');
- trace(daBeats);
- trace(totalLength);
-
if (songNotes != 0)
{
var daStrumTime:Float = ((daStep * Conductor.stepCrochet) + (Conductor.crochet * 8 * totalLength))
@@ -182,7 +178,6 @@ class PlayState extends FlxState
playerCounter += 1;
}
- trace(sectionLengths);
}
private function generateStaticArrows(player:Int):Void
@@ -367,11 +362,21 @@ class PlayState extends FlxState
var downR = FlxG.keys.anyJustReleased([S, DOWN]);
var leftR = FlxG.keys.anyJustReleased([A, LEFT]);
- if (up || right || down || left)
+ if ((up || right || down || left) && !boyfriend.stunned)
{
+ var possibleNotes:Array = [];
+
notes.forEach(function(daNote:Note)
{
- if (daNote.canBeHit)
+ if (daNote.canBeHit && daNote.mustPress)
+ {
+ possibleNotes.push(daNote);
+ }
+ });
+
+ if (possibleNotes.length > 0)
+ {
+ for (daNote in possibleNotes)
{
switch (daNote.noteData)
{
@@ -389,17 +394,13 @@ class PlayState extends FlxState
if (left && daNote.prevNote.wasGoodHit)
goodNoteHit(daNote);
case 1: // NOTES YOU JUST PRESSED
- if (upP)
- goodNoteHit(daNote);
+ noteCheck(upP, daNote);
case 2:
- if (rightP)
- goodNoteHit(daNote);
+ noteCheck(rightP, daNote);
case 3:
- if (downP)
- goodNoteHit(daNote);
+ noteCheck(downP, daNote);
case 4:
- if (leftP)
- goodNoteHit(daNote);
+ noteCheck(leftP, daNote);
}
if (daNote.wasGoodHit)
@@ -407,7 +408,11 @@ class PlayState extends FlxState
daNote.kill();
}
}
- });
+ }
+ else
+ {
+ badNoteCheck();
+ }
}
playerStrums.forEach(function(spr:FlxSprite)
@@ -415,22 +420,22 @@ class PlayState extends FlxState
switch (spr.ID)
{
case 1:
- if (upP && spr.animation.curAnim.name != 'confirm')
+ if (upP && spr.animation.curAnim.name != 'confirm' && !boyfriend.stunned)
spr.animation.play('pressed');
if (upR)
spr.animation.play('static');
case 2:
- if (rightP && spr.animation.curAnim.name != 'confirm')
+ if (rightP && spr.animation.curAnim.name != 'confirm' && !boyfriend.stunned)
spr.animation.play('pressed');
if (rightR)
spr.animation.play('static');
case 3:
- if (downP && spr.animation.curAnim.name != 'confirm')
+ if (downP && spr.animation.curAnim.name != 'confirm' && !boyfriend.stunned)
spr.animation.play('pressed');
if (downR)
spr.animation.play('static');
case 4:
- if (leftP && spr.animation.curAnim.name != 'confirm')
+ if (leftP && spr.animation.curAnim.name != 'confirm' && !boyfriend.stunned)
spr.animation.play('pressed');
if (leftR)
spr.animation.play('static');
@@ -446,6 +451,58 @@ class PlayState extends FlxState
});
}
+ function noteMiss(direction:Int = 1):Void
+ {
+ if (!boyfriend.stunned)
+ {
+ boyfriend.stunned = true;
+
+ // get stunned for 5 seconds
+ new FlxTimer().start(5 / 60, function(tmr:FlxTimer)
+ {
+ boyfriend.stunned = false;
+ });
+
+ switch (direction)
+ {
+ case 1:
+ boyfriend.playAnim('singUPmiss', true);
+ case 2:
+ boyfriend.playAnim('singRIGHTmiss', true);
+ case 3:
+ boyfriend.playAnim('singDOWNmiss', true);
+ case 4:
+ boyfriend.playAnim('singLEFTmiss', true);
+ }
+ }
+ }
+
+ function badNoteCheck()
+ {
+ // just double pasting this shit cuz fuk u
+ var upP = FlxG.keys.anyJustPressed([W, UP]);
+ var rightP = FlxG.keys.anyJustPressed([D, RIGHT]);
+ var downP = FlxG.keys.anyJustPressed([S, DOWN]);
+ var leftP = FlxG.keys.anyJustPressed([A, LEFT]);
+
+ if (leftP)
+ noteMiss(4);
+ if (upP)
+ noteMiss(1);
+ if (rightP)
+ noteMiss(2);
+ if (downP)
+ noteMiss(3);
+ }
+
+ function noteCheck(keyP:Bool, note:Note):Void
+ {
+ if (keyP)
+ goodNoteHit(note);
+ else
+ badNoteCheck();
+ }
+
function goodNoteHit(note:Note):Void
{
if (!note.wasGoodHit)