diff --git a/Project.xml b/Project.xml index db1c94888..ff321dd49 100644 --- a/Project.xml +++ b/Project.xml @@ -41,7 +41,7 @@ - + diff --git a/assets/images/GO0001.png b/assets/images/GO0001.png new file mode 100644 index 000000000..5746b8d2e Binary files /dev/null and b/assets/images/GO0001.png differ diff --git a/assets/images/GO0002.png b/assets/images/GO0002.png new file mode 100644 index 000000000..3fbc2d0f2 Binary files /dev/null and b/assets/images/GO0002.png differ diff --git a/assets/images/GO0003.png b/assets/images/GO0003.png new file mode 100644 index 000000000..3fbc2d0f2 Binary files /dev/null and b/assets/images/GO0003.png differ diff --git a/assets/images/GO0004.png b/assets/images/GO0004.png new file mode 100644 index 000000000..c23ed15d0 Binary files /dev/null and b/assets/images/GO0004.png differ diff --git a/assets/images/GO0005.png b/assets/images/GO0005.png new file mode 100644 index 000000000..c23ed15d0 Binary files /dev/null and b/assets/images/GO0005.png differ diff --git a/assets/images/GO0006.png b/assets/images/GO0006.png new file mode 100644 index 000000000..d2c6d75c0 Binary files /dev/null and b/assets/images/GO0006.png differ diff --git a/assets/images/GO0007.png b/assets/images/GO0007.png new file mode 100644 index 000000000..d2c6d75c0 Binary files /dev/null and b/assets/images/GO0007.png differ diff --git a/assets/images/GO0008.png b/assets/images/GO0008.png new file mode 100644 index 000000000..d2c6d75c0 Binary files /dev/null and b/assets/images/GO0008.png differ diff --git a/assets/images/GO0009.png b/assets/images/GO0009.png new file mode 100644 index 000000000..d2c6d75c0 Binary files /dev/null and b/assets/images/GO0009.png differ diff --git a/assets/images/GO0010.png b/assets/images/GO0010.png new file mode 100644 index 000000000..d2c6d75c0 Binary files /dev/null and b/assets/images/GO0010.png differ diff --git a/assets/images/GO0011.png b/assets/images/GO0011.png new file mode 100644 index 000000000..d2c6d75c0 Binary files /dev/null and b/assets/images/GO0011.png differ diff --git a/assets/images/GO0012.png b/assets/images/GO0012.png new file mode 100644 index 000000000..a056c61dc Binary files /dev/null and b/assets/images/GO0012.png differ diff --git a/assets/images/GO0013.png b/assets/images/GO0013.png new file mode 100644 index 000000000..e80c86544 Binary files /dev/null and b/assets/images/GO0013.png differ diff --git a/assets/images/GO0014.png b/assets/images/GO0014.png new file mode 100644 index 000000000..2560f3923 Binary files /dev/null and b/assets/images/GO0014.png differ diff --git a/assets/images/ready.png b/assets/images/ready.png new file mode 100644 index 000000000..20f0dff71 Binary files /dev/null and b/assets/images/ready.png differ diff --git a/assets/images/set.png b/assets/images/set.png new file mode 100644 index 000000000..b6052f71e Binary files /dev/null and b/assets/images/set.png differ diff --git a/assets/music/title.mp3 b/assets/music/title.mp3 new file mode 100644 index 000000000..4fd507eea Binary files /dev/null and b/assets/music/title.mp3 differ diff --git a/assets/music/titleShoot.mp3 b/assets/music/titleShoot.mp3 new file mode 100644 index 000000000..ed124ddeb Binary files /dev/null and b/assets/music/titleShoot.mp3 differ diff --git a/assets/sounds/freshIntro.mp3 b/assets/sounds/freshIntro.mp3 new file mode 100644 index 000000000..9f1686682 Binary files /dev/null and b/assets/sounds/freshIntro.mp3 differ diff --git a/source/Main.hx b/source/Main.hx index a4040a187..13376db44 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -9,7 +9,7 @@ class Main extends Sprite public function new() { super(); - addChild(new FlxGame(0, 0, PlayState)); + addChild(new FlxGame(0, 0, TitleState)); #if !mobile addChild(new FPS(10, 3, 0xFFFFFF)); diff --git a/source/PlayState.hx b/source/PlayState.hx index 5bb1f75bc..d90b22d40 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -5,12 +5,14 @@ import flixel.FlxObject; import flixel.FlxSprite; import flixel.FlxState; import flixel.addons.display.FlxGridOverlay; +import flixel.addons.transition.FlxTransitionableState; import flixel.graphics.atlas.FlxAtlas; import flixel.graphics.frames.FlxAtlasFrames; import flixel.group.FlxGroup.FlxTypedGroup; import flixel.math.FlxMath; import flixel.system.FlxSound; import flixel.text.FlxText; +import flixel.tweens.FlxEase; import flixel.tweens.FlxTween; import flixel.util.FlxCollision; import flixel.util.FlxColor; @@ -22,7 +24,7 @@ import lime.utils.Assets; using StringTools; -class PlayState extends FlxState +class PlayState extends FlxTransitionableState { private var lastBeat:Float = 0; private var lastStep:Float = 0; @@ -55,8 +57,14 @@ class PlayState extends FlxState private var health:Float = 1; private var combo:Int = 0; + private var generatedMusic:Bool = false; + private var countingDown:Bool = false; + override public function create() { + persistentUpdate = true; + persistentDraw = true; + var bg:FlxSprite = new FlxSprite(-600, -200).loadGraphic(AssetPaths.bg__png); bg.setGraphicSize(Std.int(bg.width * 2.5)); bg.updateHitbox(); @@ -85,11 +93,35 @@ class PlayState extends FlxState playerStrums = new FlxTypedGroup(); + var swagCounter:Int = 0; + generateSong('fresh'); + countingDown = true; + Conductor.songPosition -= Conductor.crochet * 4; + + new FlxTimer().start(Conductor.crochet / 1000, function(tmr:FlxTimer) + { + switch (swagCounter) + { + case 0: + FlxG.sound.play('assets/sounds/freshIntro.mp3', 0.6); + case 1: + FlxG.sound.play('assets/sounds/freshIntro.mp3', 0.6); + case 2: + FlxG.sound.play('assets/sounds/freshIntro.mp3', 0.6); + case 3: + FlxG.sound.play('assets/sounds/freshIntro.mp3', 0.6); + case 4: + } + + 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); @@ -103,24 +135,30 @@ class PlayState extends FlxState super.create(); } + function startSong():Void + { + countingDown = false; + FlxG.sound.playMusic("assets/music/" + "Fresh" + "_Inst.mp3"); + vocals.play(); + } + var debugNum:Int = 0; private function generateSong(dataPath:String):Void { // FlxG.log.add(ChartParser.parse()); + generatedMusic = true; generateStaticArrows(0); generateStaticArrows(1); var songData = Json.parse(Assets.getText('assets/data/' + dataPath + '/' + dataPath + '.json')); Conductor.changeBPM(songData.bpm); - FlxG.sound.playMusic("assets/music/" + songData.song + "_Inst.mp3"); curSong = songData.song; - vocals = new FlxSound().loadEmbedded("assets/music/" + songData.song + "_Voices.mp3"); + vocals = new FlxSound().loadEmbedded("assets/music/" + curSong + "_Voices.mp3"); FlxG.sound.list.add(vocals); - vocals.play(); notes = new FlxTypedGroup(); add(notes); @@ -226,6 +264,10 @@ class PlayState extends FlxState babyArrow.updateHitbox(); babyArrow.antialiasing = true; + babyArrow.y -= 10; + babyArrow.alpha = 0; + FlxTween.tween(babyArrow, {y: babyArrow.y + 10, alpha: 1}, 1, {ease: FlxEase.circOut, startDelay: 0.5 + (0.2 * i)}); + babyArrow.ID = i + 1; if (player == 1) @@ -276,7 +318,15 @@ class PlayState extends FlxState if (FlxG.keys.justPressed.EIGHT) FlxG.switchState(new Charting(true)); - Conductor.songPosition = FlxG.sound.music.time; + if (countingDown) + { + Conductor.songPosition += FlxG.elapsed * 1000; + + if (Conductor.songPosition >= 0) + startSong(); + } + else + Conductor.songPosition = FlxG.sound.music.time; var playerTurn:Int = totalBeats % (sectionLengths[curSection] * 8); if (playerTurn == (sectionLengths[curSection] * 8) - 1 && !sectionScored) @@ -285,7 +335,7 @@ class PlayState extends FlxState sectionScored = true; } - if (playerTurn == 0) + if (playerTurn == 0 && generatedMusic) { if (camFollow.x != dad.getGraphicMidpoint().x + 150) camFollow.setPosition(dad.getGraphicMidpoint().x + 150, dad.getGraphicMidpoint().y - 100); @@ -343,59 +393,60 @@ class PlayState extends FlxState } } - notes.forEachAlive(function(daNote:Note) + if (generatedMusic) { - if (daNote.y > FlxG.height) + notes.forEachAlive(function(daNote:Note) { - daNote.active = false; - daNote.visible = false; - } - else - { - daNote.visible = true; - daNote.active = true; - } - - if (!daNote.mustPress && daNote.wasGoodHit) - { - switch (Math.abs(daNote.noteData)) + if (daNote.y > FlxG.height) { - case 1: - dad.playAnim('singUP'); - case 2: - dad.playAnim('singRIGHT'); - case 3: - dad.playAnim('singDOWN'); - case 4: - dad.playAnim('singLEFT'); + daNote.active = false; + daNote.visible = false; + } + else + { + daNote.visible = true; + daNote.active = true; } - daNote.kill(); - notes.remove(daNote, true); - daNote.destroy(); - } + if (!daNote.mustPress && daNote.wasGoodHit) + { + switch (Math.abs(daNote.noteData)) + { + case 1: + dad.playAnim('singUP'); + case 2: + dad.playAnim('singRIGHT'); + case 3: + dad.playAnim('singDOWN'); + case 4: + dad.playAnim('singLEFT'); + } - daNote.y = (strumLine.y - (Conductor.songPosition - daNote.strumTime) * 0.45); + daNote.kill(); + notes.remove(daNote, true); + daNote.destroy(); + } - if (daNote.y < -daNote.height) - { - if (daNote.tooLate) - vocals.volume = 0; + daNote.y = (strumLine.y - (Conductor.songPosition - daNote.strumTime) * 0.45); - daNote.active = false; - daNote.visible = false; + if (daNote.y < -daNote.height) + { + if (daNote.tooLate) + vocals.volume = 0; - daNote.kill(); - notes.remove(daNote, true); - daNote.destroy(); - } + daNote.active = false; + daNote.visible = false; - // one time sort - if (!sortedNotes) - notes.sort(FlxSort.byY, FlxSort.DESCENDING); - }); + daNote.kill(); + notes.remove(daNote, true); + daNote.destroy(); + } - FlxG.watch.addQuick('length', notes.length); + // one time sort + if (!sortedNotes) + notes.sort(FlxSort.byY, FlxSort.DESCENDING); + }); + } keyShit(); } @@ -521,7 +572,7 @@ class PlayState extends FlxState var leftR = FlxG.keys.anyJustReleased([A, LEFT]); FlxG.watch.addQuick('asdfa', upP); - if ((upP || rightP || downP || leftP) && !boyfriend.stunned) + if ((upP || rightP || downP || leftP) && !boyfriend.stunned && generatedMusic) { var possibleNotes:Array = []; @@ -566,7 +617,7 @@ class PlayState extends FlxState } } - if ((up || right || down || left) && !boyfriend.stunned) + if ((up || right || down || left) && !boyfriend.stunned && generatedMusic) { notes.forEach(function(daNote:Note) { @@ -634,7 +685,7 @@ class PlayState extends FlxState if (!boyfriend.stunned) { health -= 0.075; - if (combo > 10) + if (combo > 5) { gf.playAnim('sad'); } diff --git a/source/TitleState.hx b/source/TitleState.hx new file mode 100644 index 000000000..a79b32245 --- /dev/null +++ b/source/TitleState.hx @@ -0,0 +1,86 @@ +package; + +import flixel.FlxG; +import flixel.FlxSprite; +import flixel.FlxState; +import flixel.addons.display.FlxGridOverlay; +import flixel.addons.transition.FlxTransitionSprite.GraphicTransTileDiamond; +import flixel.addons.transition.FlxTransitionableState; +import flixel.addons.transition.TransitionData; +import flixel.graphics.FlxGraphic; +import flixel.math.FlxPoint; +import flixel.math.FlxRect; +import flixel.tweens.FlxEase; +import flixel.tweens.FlxTween; +import flixel.util.FlxColor; +import flixel.util.FlxTimer; + +class TitleState extends FlxTransitionableState +{ + static var initialized:Bool = false; + + override public function create():Void + { + super.create(); + + if (!initialized) + { + var diamond:FlxGraphic = FlxGraphic.fromClass(GraphicTransTileDiamond); + diamond.persist = true; + diamond.destroyOnNoUse = false; + + FlxTransitionableState.defaultTransIn = new TransitionData(FADE, FlxColor.BLACK, 2, new FlxPoint(0, -1), {asset: diamond, width: 32, height: 32}, + new FlxRect(0, 0, FlxG.width, FlxG.height)); + FlxTransitionableState.defaultTransOut = new TransitionData(FADE, FlxColor.BLACK, 1.3, new FlxPoint(0, 1), + {asset: diamond, width: 32, height: 32}, new FlxRect(0, 0, FlxG.width, FlxG.height)); + + initialized = true; + + FlxTransitionableState.defaultTransIn.tileData = {asset: diamond, width: 32, height: 32}; + FlxTransitionableState.defaultTransOut.tileData = {asset: diamond, width: 32, height: 32}; + + transIn = FlxTransitionableState.defaultTransIn; + transOut = FlxTransitionableState.defaultTransOut; + } + + persistentUpdate = true; + + var bg:FlxSprite = FlxGridOverlay.create(20, 20); + add(bg); + + var logoBl:FlxSprite = new FlxSprite().loadGraphic(AssetPaths.logo__png); + logoBl.screenCenter(); + logoBl.color = FlxColor.BLACK; + add(logoBl); + + var logo:FlxSprite = new FlxSprite().loadGraphic(AssetPaths.logo__png); + logo.screenCenter(); + add(logo); + + FlxTween.tween(logoBl, {y: logoBl.y + 50}, 0.6, {ease: FlxEase.quadInOut, type: PINGPONG}); + FlxTween.tween(logo, {y: logoBl.y + 50}, 0.6, {ease: FlxEase.quadInOut, type: PINGPONG, startDelay: 0.1}); + + FlxG.sound.playMusic('assets/music/title.mp3', 0, false); + + FlxG.sound.music.fadeIn(4, 0, 0.7); + } + + var transitioning:Bool = false; + + override function update(elapsed:Float) + { + if (FlxG.keys.justPressed.ENTER && !transitioning) + { + transitioning = true; + FlxG.sound.music.stop(); + + new FlxTimer().start(2, function(tmr:FlxTimer) + { + FlxG.switchState(new PlayState()); + }); + FlxG.sound.play('assets/music/titleShoot.mp3', 0.7); + } + + super.update(elapsed); + } +}