diff --git a/source/ChartingState.hx b/source/ChartingState.hx index 1ea9650..56aa33e 100644 --- a/source/ChartingState.hx +++ b/source/ChartingState.hx @@ -90,6 +90,9 @@ class ChartingState extends MusicBeatState private var lastNote:Note; + var player1Icon:String; + var player2Icon:String; + override function create() { @@ -98,20 +101,6 @@ class ChartingState extends MusicBeatState gridBG = FlxGridOverlay.create(GRID_SIZE, GRID_SIZE, GRID_SIZE * 8, GRID_SIZE * 16); add(gridBG); - leftIcon = new HealthIcon('bf'); - rightIcon = new HealthIcon('dad'); - leftIcon.scrollFactor.set(1, 1); - rightIcon.scrollFactor.set(1, 1); - - leftIcon.setGraphicSize(0, 45); - rightIcon.setGraphicSize(0, 45); - - add(leftIcon); - add(rightIcon); - - leftIcon.setPosition(0, -100); - rightIcon.setPosition(gridBG.width / 2, -100); - gridBlackLine = new FlxSprite(gridBG.x + gridBG.width / 2).makeGraphic(2, Std.int(gridBG.height), FlxColor.BLACK); add(gridBlackLine); @@ -134,6 +123,23 @@ class ChartingState extends MusicBeatState }; } + player1Icon = _song.player1; + player2Icon = _song.player2; + + leftIcon = new HealthIcon(_song.player1); + rightIcon = new HealthIcon(_song.player2); + leftIcon.scrollFactor.set(1, 1); + rightIcon.scrollFactor.set(1, 1); + + leftIcon.setGraphicSize(0, 45); + rightIcon.setGraphicSize(0, 45); + + add(leftIcon); + add(rightIcon); + + leftIcon.setPosition(0, -100); + rightIcon.setPosition(gridBG.width / 2, -100); + FlxG.mouse.visible = true; FlxG.save.bind('funkin', 'ninjamuffin99'); @@ -527,6 +533,8 @@ class ChartingState extends MusicBeatState { curStep = recalculateSteps(); + changeIcon(); + if (FlxG.keys.justPressed.ALT && UI_box.selected_tab == 0) { writingNotes = !writingNotes; @@ -1011,7 +1019,7 @@ class ChartingState extends MusicBeatState { remove(gridBG); gridBG = FlxGridOverlay.create(GRID_SIZE, GRID_SIZE, GRID_SIZE * 8, GRID_SIZE * _song.notes[curSection].lengthInSteps); - add(gridBG); + add(gridBG); remove(gridBlackLine); gridBlackLine = new FlxSprite(gridBG.x + gridBG.width / 2).makeGraphic(2, Std.int(gridBG.height), FlxColor.BLACK); @@ -1119,6 +1127,38 @@ class ChartingState extends MusicBeatState updateNoteUI(); } + function changeIcon():Void + { + if (_song.player1 != player1Icon) + { + remove(leftIcon); + + player1Icon = _song.player1; + leftIcon = new HealthIcon(player1Icon); + leftIcon.scrollFactor.set(1, 1); + + leftIcon.setGraphicSize(0, 45); + + add(leftIcon); + + leftIcon.setPosition(0, -100); + } + + if (_song.player2 != player2Icon) + { + remove(rightIcon); + + player2Icon = _song.player2; + rightIcon = new HealthIcon(player2Icon); + rightIcon.scrollFactor.set(1, 1); + + rightIcon.setGraphicSize(0, 45); + + add(rightIcon); + + rightIcon.setPosition(gridBG.width / 2, -100); + } + } function deleteNote(note:Note):Void { diff --git a/source/FreeplayState.hx b/source/FreeplayState.hx index 59ecc70..4507b72 100644 --- a/source/FreeplayState.hx +++ b/source/FreeplayState.hx @@ -8,6 +8,9 @@ import flixel.group.FlxGroup.FlxTypedGroup; import flixel.math.FlxMath; import flixel.text.FlxText; import flixel.util.FlxColor; +import flixel.util.FlxTimer; +import flixel.tweens.FlxEase; +import flixel.tweens.FlxTween; import lime.utils.Assets; @@ -35,6 +38,8 @@ class FreeplayState extends MusicBeatState private var iconArray:Array = []; + var bg:FlxSprite; + override function create() { var initSonglist = CoolUtil.coolTextFile(Paths.txt('freeplaySonglist')); @@ -68,7 +73,7 @@ class FreeplayState extends MusicBeatState // LOAD CHARACTERS - var bg:FlxSprite = new FlxSprite().loadGraphic(Paths.image('menuBGBlue')); + bg = new FlxSprite().loadGraphic(Paths.image('menuDesat')); add(bg); grpSongs = new FlxTypedGroup(); @@ -161,6 +166,8 @@ class FreeplayState extends MusicBeatState } } + var lockedIn:Bool = false; + override function update(elapsed:Float) { super.update(elapsed); @@ -206,6 +213,8 @@ class FreeplayState extends MusicBeatState trace(poop); + lockedIn = true; + PlayState.SONG = Song.loadFromJson(poop, songs[curSelected].songName.toLowerCase()); PlayState.isStoryMode = false; PlayState.storyDifficulty = curDifficulty; @@ -250,6 +259,7 @@ class FreeplayState extends MusicBeatState curSelected += change; + if (curSelected < 0) curSelected = songs.length - 1; if (curSelected >= songs.length) @@ -257,24 +267,57 @@ class FreeplayState extends MusicBeatState // selector.y = (70 * curSelected) + 30; - #if !switch - intendedScore = Highscore.getScore(songs[curSelected].songName, curDifficulty); - // lerpScore = 0; - #end - - #if PRELOAD_ALL - FlxG.sound.playMusic(Paths.inst(songs[curSelected].songName), 0); - #end - - var bullShit:Int = 0; - for (i in 0...iconArray.length) { iconArray[i].alpha = 0.6; } + + var bullShit:Int = 0; + + iconArray[curSelected].alpha = 1; + if (curSelected >= 0) + { + if (curSelected >= 4) + { + if (curSelected >= 7) + { + if (curSelected >= 10) + { + if (curSelected >= 13) + { + if (curSelected >= 16) + { + FlxTween.color(bg, 0.5, bg.color, FlxColor.fromRGB(219, 101, 217)); + } + else + { + FlxTween.color(bg, 0.5, bg.color, FlxColor.fromRGB(161, 212, 230)); + } + } + else + { + FlxTween.color(bg, 0.5, bg.color, FlxColor.fromRGB(230, 129, 221)); + } + } + else + { + FlxTween.color(bg, 0.5, bg.color, FlxColor.fromRGB(99, 12, 22)); + } + } + else + { + FlxTween.color(bg, 0.5, bg.color, FlxColor.fromRGB(39, 46, 66)); + } + } + else + { + FlxTween.color(bg, 0.5, bg.color, FlxColor.fromRGB(96, 66, 245)); + } + } + for (item in grpSongs.members) { item.targetY = bullShit - curSelected; @@ -289,6 +332,23 @@ class FreeplayState extends MusicBeatState // item.setGraphicSize(Std.int(item.width)); } } + + var temp:Int = curSelected; + + new FlxTimer().start(FlxG.random.float(0.7), function(tmr:FlxTimer) + { + if (curSelected == temp && !lockedIn) + { + #if !switch + intendedScore = Highscore.getScore(songs[curSelected].songName, curDifficulty); + // lerpScore = 0; + #end + + #if PRELOAD_ALL + FlxG.sound.playMusic(Paths.inst(songs[curSelected].songName), 0); + #end + } + }); } } diff --git a/source/PlayState.hx b/source/PlayState.hx index a43bd9a..d1fd308 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -74,6 +74,27 @@ using StringTools; class PlayState extends MusicBeatState { + var characterCol:Array = CoolUtil.coolTextFile(Paths.txt('characterList')); + var col:Array = [ + 0xFF51d8fb, // BF + 0xFFc885e5, // DAD + 0xFFca1f6f, // GF + 0xFFf9a326, // SPOOKY + 0xFFceec75, // PICO + 0xFFec7aac, // MOM + 0xFFec7aac, // MOM-CAR + 0xFF51d8fb, // BF-CAR + 0xFFffffff, // PARENTS-CHRISTMAS + 0xFFf5ff8a, // MONSTER-CHRISTMAS + 0xFF51d8fb, // BF-CHRISTMAS + 0xFFca1f6f, // GF-CHRISTMAS + 0xFFf5ff8a, // MONSTER + 0xFF9fe6ff, // BF-PIXEL + 0xFFffaa6f, // SENPAI + 0xFFffaa6f, // SENPAI-ANGRY + 0xFFff5d87 // SPIRIT + ]; + public static var curStage:String = ''; public static var SONG:SwagSong; public static var isStoryMode:Bool = false; @@ -125,6 +146,9 @@ class PlayState extends MusicBeatState private var strumLineNotes:FlxTypedGroup; private var playerStrums:FlxTypedGroup; + private var player2Strums:FlxTypedGroup; + + private var strumming2:Array = [false, false, false, false]; private var camZooming:Bool = false; private var curSong:String = ""; @@ -998,6 +1022,7 @@ class PlayState extends MusicBeatState add(strumLineNotes); playerStrums = new FlxTypedGroup(); + player2Strums = new FlxTypedGroup(); // startCountdown(); @@ -1027,28 +1052,29 @@ class PlayState extends MusicBeatState FlxG.fixedTimestep = false; if (FlxG.save.data.songPosition) // I dont wanna talk about this code :( - { - songPosBG = new FlxSprite(0, 10).loadGraphic(Paths.image('healthBar')); - if (FlxG.save.data.downscroll) - songPosBG.y = FlxG.height * 0.9 + 45; - songPosBG.screenCenter(X); - songPosBG.scrollFactor.set(); - add(songPosBG); - - songPosBar = new FlxBar(songPosBG.x + 4, songPosBG.y + 4, LEFT_TO_RIGHT, Std.int(songPosBG.width - 8), Std.int(songPosBG.height - 8), this, - 'songPositionBar', 0, 90000); - songPosBar.scrollFactor.set(); - songPosBar.createFilledBar(FlxColor.GRAY, FlxColor.LIME); - add(songPosBar); - - var songName = new FlxText(songPosBG.x + (songPosBG.width / 2) - 20,songPosBG.y,0,SONG.song, 16); - if (FlxG.save.data.downscroll) - songName.y -= 3; - songName.setFormat(Paths.font("vcr.ttf"), 16, FlxColor.WHITE, RIGHT, FlxTextBorderStyle.OUTLINE,FlxColor.BLACK); - songName.scrollFactor.set(); - add(songName); - songName.cameras = [camHUD]; - } + { + songPosBG = new FlxSprite(0, 10).loadGraphic(Paths.image('healthBar')); + if (FlxG.save.data.downscroll) + songPosBG.y = FlxG.height * 0.9 + 45; + songPosBG.screenCenter(X); + songPosBG.scrollFactor.set(); + add(songPosBG); + + songPosBar = new FlxBar(songPosBG.x + 4, songPosBG.y + 4, LEFT_TO_RIGHT, Std.int(songPosBG.width - 8), Std.int(songPosBG.height - 8), this, + 'songPositionBar', 0, 90000); + songPosBar.scrollFactor.set(); + songPosBar.createFilledBar(FlxColor.GRAY, FlxColor.LIME); + add(songPosBar); + + var songName = new FlxText(songPosBG.x + (songPosBG.width / 2) - 20,songPosBG.y,0,SONG.song, 16); + if (FlxG.save.data.downscroll) + songName.y -= 3; + songName.setFormat(Paths.font("vcr.ttf"), 16, FlxColor.WHITE, RIGHT, FlxTextBorderStyle.OUTLINE,FlxColor.BLACK); + songName.scrollFactor.set(); + add(songName); + songName.cameras = [camHUD]; + } + healthBarBG = new FlxSprite(0, FlxG.height * 0.9).loadGraphic(Paths.image('healthBar')); if (FlxG.save.data.downscroll) @@ -1060,10 +1086,15 @@ class PlayState extends MusicBeatState 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); + var curcol:FlxColor = col[characterCol.indexOf(dad.curCharacter)]; // Dad Icon + var curcol2:FlxColor = col[characterCol.indexOf(boyfriend.curCharacter)]; // Bf Icon + healthBar.createFilledBar(curcol, curcol2); // Use those colors // healthBar add(healthBar); + + + // Add Kade Engine watermark kadeEngineWatermark = new FlxText(4,healthBarBG.y + 50,0,SONG.song + " " + (storyDifficulty == 2 ? "Hard" : storyDifficulty == 1 ? "Normal" : "Easy") + (Main.watermarks ? " - KE " + MainMenuState.kadeEngineVer : ""), 16); kadeEngineWatermark.setFormat(Paths.font("vcr.ttf"), 16, FlxColor.WHITE, RIGHT, FlxTextBorderStyle.OUTLINE,FlxColor.BLACK); @@ -2031,6 +2062,10 @@ class PlayState extends MusicBeatState { playerStrums.add(babyArrow); } + else + { + player2Strums.add(babyArrow); + } babyArrow.animation.play('static'); babyArrow.x += 50; @@ -2620,6 +2655,15 @@ class PlayState extends MusicBeatState case 0: dad.playAnim('singLEFT' + altAnim, true); } + + player2Strums.forEach(function(spr:FlxSprite) + { + if (Math.abs(daNote.noteData) == spr.ID) + { + spr.animation.play('confirm'); + sustainplayer2(spr.ID, spr, daNote); + } + }); #if cpp if (lua != null) @@ -2637,6 +2681,23 @@ class PlayState extends MusicBeatState notes.remove(daNote, true); daNote.destroy(); } + + player2Strums.forEach(function(spr:FlxSprite) + { + if (strumming2[spr.ID]) + { + spr.animation.play("confirm"); + } + + if (spr.animation.curAnim.name == 'confirm' && !curStage.startsWith('school')) + { + spr.centerOffsets(); + spr.offset.x -= 13; + spr.offset.y -= 13; + } + else + spr.centerOffsets(); + }); if (!daNote.modifiedByLua) { @@ -2710,6 +2771,34 @@ class PlayState extends MusicBeatState #end } + function sustainplayer2(strum:Int, spr:FlxSprite, note:Note):Void + { + var length:Float = note.sustainLength; + var tempo:Float = Conductor.bpm / 60; + var temp:Float = 1 / tempo; + + if (length > 0) + { + strumming2[strum] = true; + } + + if (!note.isSustainNote) + { + new FlxTimer().start(length == 0 ? 0.2 : (length / Conductor.crochet * temp) + 0.1, function(tmr:FlxTimer) + { + if (!strumming2[strum]) + { + spr.animation.play("static", true); + } + else if (length > 0) + { + strumming2[strum] = false; + spr.animation.play("static", true); + } + }); + } + } + function endSong():Void { if (!loadRep) @@ -3881,16 +3970,18 @@ class PlayState extends MusicBeatState // Conductor.changeBPM(SONG.bpm); // Dad doesnt interupt his own notes - - // Commented out until a reason to bring this back arises in the future - /* if (SONG.notes[Math.floor(curStep / 16)].mustHitSection) - dad.dance(); */ - - if(dad.animation.curAnim.name.startsWith('sing')) - if(dad.animation.finished) + if (dad.animation.curAnim.name.startsWith('sing')) + { + if (dad.animation.finished) + { dad.dance(); + } + + } else + { dad.dance(); + } } // FlxG.log.add('change bpm' + SONG.notes[Std.int(curStep / 16)].changeBPM); wiggleShit.update(Conductor.crochet); diff --git a/source/StoryMenuState.hx b/source/StoryMenuState.hx index 3d99237..870c2aa 100644 --- a/source/StoryMenuState.hx +++ b/source/StoryMenuState.hx @@ -305,6 +305,10 @@ class StoryMenuState extends MusicBeatState LoadingState.loadAndSwitchState(new PlayState(), true); }); } + else + { + FlxG.camera.shake(0.02, 0.02); + } } function changeDifficulty(change:Int = 0):Void