diff --git a/source/Boyfriend.hx b/source/Boyfriend.hx index a6beb1aab..4796b8549 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 e6161da02..cba97ce80 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 d42fcc8ff..f3888af62 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)