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.graphics.frames.FlxAtlasFrames; import flixel.group.FlxGroup; import flixel.input.gamepad.FlxGamepad; import flixel.math.FlxPoint; import flixel.math.FlxRect; import flixel.system.FlxSound; import flixel.system.ui.FlxSoundTray; import flixel.text.FlxText; import flixel.tweens.FlxEase; import flixel.tweens.FlxTween; import flixel.util.FlxColor; import flixel.util.FlxTimer; class TitleState extends MusicBeatState { static var initialized:Bool = false; static public var soundExt:String = ".mp3"; var blackScreen:FlxSprite; var credGroup:FlxGroup; var credTextShit:Alphabet; var textGroup:FlxGroup; var ngSpr:FlxSprite; var wackyIntros:Array> = [ ['Shoutouts to tom fulp', 'lmao'], ["Ludum dare", "extraordinaire"], ['Cyberzone', 'coming soon'], ['love to thriftman', 'swag'], ['ULTIMATE RHYTHM GAMING', 'probably'], ['DOPE ASS GAME', 'playstation magazine'], ['in loving memory of', 'henryeyes'], ['dancin', 'forever'], ['Ritz dx', 'rest in peace'], ['rate five', 'pls no blam'], ['rhythm gaming', 'ultimate'], ['game of the year', 'forever'], ['you already know', 'we really out here'], ['rise and grind', 'love to luis'], ['like parappa', 'but cooler'], ['album of the year', 'chuckie finster'], ["free gitaroo man", "with love to wandaboy"], ['better than geometry dash', 'fight me robtop'], ['kiddbrute for president', 'vote now'], ['play dead estate', 'on newgrounds'], ['this a god damn prototype', 'we workin on it okay'], ['WOMEN ARE real', 'this is official']]; var curWacky:Array = []; var wackyImage:FlxSprite; override public function create():Void { #if (!web) TitleState.soundExt = '.ogg'; #end PlayerSettings.init(); curWacky = FlxG.random.getObject(wackyIntros); // DEBUG BULLSHIT super.create(); #if (!switch && !debug && NG_LOGIN) var ng:NGio = new NGio(APIStuff.API, APIStuff.EncKey); #end FlxG.save.bind('funkin', 'ninjamuffin99'); Highscore.load(); if (FlxG.save.data.weekUnlocked != null) { StoryMenuState.weekUnlocked = FlxG.save.data.weekUnlocked; if (StoryMenuState.weekUnlocked.length < 3) StoryMenuState.weekUnlocked.insert(0, true); } #if SKIP_TO_PLAYSTATE FlxG.switchState(new StoryMenuState()); #else startIntro(); #end } var logoBl:FlxSprite; var gfDance:FlxSprite; var danceLeft:Bool = false; var titleText:FlxSprite; function startIntro() { if (!initialized) { var diamond:FlxGraphic = FlxGraphic.fromClass(GraphicTransTileDiamond); diamond.persist = true; diamond.destroyOnNoUse = false; FlxTransitionableState.defaultTransIn = new TransitionData(FADE, FlxColor.BLACK, 1, 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, 0.7, new FlxPoint(0, 1), {asset: diamond, width: 32, height: 32}, new FlxRect(0, 0, FlxG.width, FlxG.height)); FlxTransitionableState.defaultTransIn.tileData = {asset: diamond, width: 32, height: 32}; FlxTransitionableState.defaultTransOut.tileData = {asset: diamond, width: 32, height: 32}; transIn = FlxTransitionableState.defaultTransIn; transOut = FlxTransitionableState.defaultTransOut; // var music:FlxSound = new FlxSound(); // music.loadStream('assets/music/freakyMenu' + TitleState.soundExt); // FlxG.sound.list.add(music); // music.play(); FlxG.sound.playMusic('assets/music/freakyMenu' + TitleState.soundExt, 0); FlxG.sound.music.fadeIn(4, 0, 0.7); } Conductor.changeBPM(102); persistentUpdate = true; var bg:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK); // bg.antialiasing = true; // bg.setGraphicSize(Std.int(bg.width * 0.6)); // bg.updateHitbox(); add(bg); logoBl = new FlxSprite(-150, -100); logoBl.frames = FlxAtlasFrames.fromSparrow(AssetPaths.logoBumpin__png, AssetPaths.logoBumpin__xml); logoBl.antialiasing = true; logoBl.animation.addByPrefix('bump', 'logo bumpin', 24); logoBl.animation.play('bump'); logoBl.updateHitbox(); // logoBl.screenCenter(); // logoBl.color = FlxColor.BLACK; gfDance = new FlxSprite(FlxG.width * 0.4, FlxG.height * 0.07); gfDance.frames = FlxAtlasFrames.fromSparrow(AssetPaths.gfDanceTitle__png, AssetPaths.gfDanceTitle__xml); gfDance.animation.addByIndices('danceLeft', 'gfDance', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false); gfDance.animation.addByIndices('danceRight', 'gfDance', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false); gfDance.antialiasing = true; add(gfDance); add(logoBl); titleText = new FlxSprite(100, FlxG.height * 0.8); titleText.frames = FlxAtlasFrames.fromSparrow(AssetPaths.titleEnter__png, AssetPaths.titleEnter__xml); titleText.animation.addByPrefix('idle', "Press Enter to Begin", 24); titleText.animation.addByPrefix('press', "ENTER PRESSED", 24); titleText.antialiasing = true; titleText.animation.play('idle'); titleText.updateHitbox(); // titleText.screenCenter(X); add(titleText); var logo:FlxSprite = new FlxSprite().loadGraphic(AssetPaths.logo__png); logo.screenCenter(); logo.antialiasing = true; // 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}); credGroup = new FlxGroup(); add(credGroup); textGroup = new FlxGroup(); blackScreen = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK); credGroup.add(blackScreen); credTextShit = new Alphabet(0, 0, "ninjamuffin99\nPhantomArcade\nkawaisprite\nevilsk8er", true); credTextShit.screenCenter(); // credTextShit.alignment = CENTER; credTextShit.visible = false; ngSpr = new FlxSprite(0, FlxG.height * 0.52).loadGraphic(AssetPaths.newgrounds_logo__png); add(ngSpr); ngSpr.visible = false; ngSpr.setGraphicSize(Std.int(ngSpr.width * 0.8)); ngSpr.updateHitbox(); ngSpr.screenCenter(X); ngSpr.antialiasing = true; FlxTween.tween(credTextShit, {y: credTextShit.y + 20}, 2.9, {ease: FlxEase.quadInOut, type: PINGPONG}); FlxG.mouse.visible = false; if (initialized) skipIntro(); else initialized = true; // credGroup.add(credTextShit); } var transitioning:Bool = false; override function update(elapsed:Float) { Conductor.songPosition = FlxG.sound.music.time; // FlxG.watch.addQuick('amp', FlxG.sound.music.amplitude); if (FlxG.keys.justPressed.F) { FlxG.fullscreen = !FlxG.fullscreen; } var pressedEnter:Bool = FlxG.keys.justPressed.ENTER; var gamepad:FlxGamepad = FlxG.gamepads.lastActive; if (gamepad != null) { if (gamepad.justPressed.START) pressedEnter = true; } if (pressedEnter && !transitioning && skippedIntro) { #if !switch NGio.unlockMedal(60960); // If it's Friday according to da clock if (Date.now().getDay() == 5) NGio.unlockMedal(61034); #end titleText.animation.play('press'); FlxG.camera.flash(FlxColor.WHITE, 1); FlxG.sound.play('assets/sounds/confirmMenu' + TitleState.soundExt, 0.7); transitioning = true; // FlxG.sound.music.stop(); new FlxTimer().start(2, function(tmr:FlxTimer) { FlxG.switchState(new MainMenuState()); }); // FlxG.sound.play('assets/music/titleShoot' + TitleState.soundExt, 0.7); } if (pressedEnter && !skippedIntro) { skipIntro(); } super.update(elapsed); } function createCoolText(textArray:Array) { for (i in 0...textArray.length) { var money:Alphabet = new Alphabet(0, 0, textArray[i], true, false); money.screenCenter(X); money.y += (i * 60) + 200; credGroup.add(money); textGroup.add(money); } } function addMoreText(text:String) { var coolText:Alphabet = new Alphabet(0, 0, text, true, false); coolText.screenCenter(X); coolText.y += (textGroup.length * 60) + 200; credGroup.add(coolText); textGroup.add(coolText); } function deleteCoolText() { while (textGroup.members.length > 0) { credGroup.remove(textGroup.members[0], true); textGroup.remove(textGroup.members[0], true); } } override function beatHit() { super.beatHit(); logoBl.animation.play('bump'); danceLeft = !danceLeft; if (danceLeft) gfDance.animation.play('danceRight'); else gfDance.animation.play('danceLeft'); FlxG.log.add(curBeat); switch (curBeat) { case 1: createCoolText(['ninjamuffin99', 'phantomArcade', 'kawaisprite', 'evilsk8er']); // credTextShit.visible = true; case 3: addMoreText('present'); // credTextShit.text += '\npresent...'; // credTextShit.addText(); case 4: deleteCoolText(); // credTextShit.visible = false; // credTextShit.text = 'In association \nwith'; // credTextShit.screenCenter(); case 5: createCoolText(['In association', 'with']); case 7: addMoreText('newgrounds'); ngSpr.visible = true; // credTextShit.text += '\nNewgrounds'; case 8: deleteCoolText(); ngSpr.visible = false; // credTextShit.visible = false; // credTextShit.text = 'Shoutouts Tom Fulp'; // credTextShit.screenCenter(); case 9: createCoolText([curWacky[0]]); // credTextShit.visible = true; case 11: addMoreText(curWacky[1]); // credTextShit.text += '\nlmao'; case 12: deleteCoolText(); // credTextShit.visible = false; // credTextShit.text = "Friday"; // credTextShit.screenCenter(); case 13: addMoreText('Friday'); // credTextShit.visible = true; case 14: addMoreText('Night'); // credTextShit.text += '\nNight'; case 15: addMoreText('Funkin'); // credTextShit.text += '\nFunkin'; case 16: skipIntro(); } } var skippedIntro:Bool = false; function skipIntro():Void { if (!skippedIntro) { remove(ngSpr); FlxG.camera.flash(FlxColor.WHITE, 4); remove(credGroup); skippedIntro = true; } } }