diff --git a/source/FreeplayState.hx b/source/FreeplayState.hx
index 19a05ed20..8d6fd5a18 100644
--- a/source/FreeplayState.hx
+++ b/source/FreeplayState.hx
@@ -12,7 +12,7 @@ import lime.utils.Assets;
 
 class FreeplayState extends MusicBeatState
 {
-	var songs:Array<String> = ["Pico", "Blammed", "Bopeebo", "Dadbattle", "Fresh", "Tutorial"];
+	var songs:Array<String> = ["Pico", "Philly", "Blammed", "Bopeebo", "Dadbattle", "Fresh", "Tutorial"];
 
 	var selector:FlxText;
 	var curSelected:Int = 0;
diff --git a/source/MenuCharacter.hx b/source/MenuCharacter.hx
index 6835daa9a..b550c330c 100644
--- a/source/MenuCharacter.hx
+++ b/source/MenuCharacter.hx
@@ -21,6 +21,7 @@ class MenuCharacter extends FlxSprite
 		animation.addByPrefix('gf', "GF Dancing Beat WHITE", 24);
 		animation.addByPrefix('dad', "Dad idle dance BLACK LINE", 24);
 		animation.addByPrefix('spooky', "spooky dance idle BLACK LINES", 24);
+		animation.addByPrefix('pico', "Pico Idle Dance", 24);
 
 		animation.play(character);
 		updateHitbox();
diff --git a/source/MenuItem.hx b/source/MenuItem.hx
index e5bf62c9e..32652114c 100644
--- a/source/MenuItem.hx
+++ b/source/MenuItem.hx
@@ -22,6 +22,7 @@ class MenuItem extends FlxSpriteGroup
 		week.animation.addByPrefix('week0', 'tutorial selected', 24);
 		week.animation.addByPrefix('week1', "WEEK1 select", 24);
 		week.animation.addByPrefix('week2', "week2 select", 24);
+		week.animation.addByPrefix('week3', "Week 3 press", 24);
 		add(week);
 
 		week.animation.play('week' + weekNum);
diff --git a/source/PlayState.hx b/source/PlayState.hx
index f4d1b5486..0f420c772 100644
--- a/source/PlayState.hx
+++ b/source/PlayState.hx
@@ -149,7 +149,7 @@ class PlayState extends MusicBeatState
 
 			isHalloween = true;
 		}
-		else if (SONG.song.toLowerCase() == 'pico' || SONG.song.toLowerCase() == 'blammed')
+		else if (SONG.song.toLowerCase() == 'pico' || SONG.song.toLowerCase() == 'blammed' || SONG.song.toLowerCase() == 'philly')
 		{
 			curStage = 'philly';
 
@@ -898,7 +898,7 @@ class PlayState extends MusicBeatState
 				{
 					if (daNote.tooLate || !daNote.wasGoodHit)
 					{
-						health -= 0.04;
+						health -= 0.045;
 						vocals.volume = 0;
 					}
 
@@ -939,7 +939,7 @@ class PlayState extends MusicBeatState
 				FlxG.switchState(new StoryMenuState());
 
 				// if ()
-				StoryMenuState.weekUnlocked[2] = true;
+				StoryMenuState.weekUnlocked[Std.int(Math.min(storyWeek, StoryMenuState.weekUnlocked.length - 1))] = true;
 
 				if (SONG.validScore)
 				{
@@ -1242,7 +1242,7 @@ class PlayState extends MusicBeatState
 	{
 		if (!boyfriend.stunned)
 		{
-			health -= 0.025;
+			health -= 0.035;
 			if (combo > 5)
 			{
 				gf.playAnim('sad');
@@ -1407,7 +1407,7 @@ class PlayState extends MusicBeatState
 					trainFinishing = true;
 			}
 
-			if (phillyTrain.x < 0 && trainFinishing)
+			if (phillyTrain.x < -4000 && trainFinishing)
 				trainReset();
 		}
 	}
diff --git a/source/StoryMenuState.hx b/source/StoryMenuState.hx
index d5338b2af..d0ae3ef06 100644
--- a/source/StoryMenuState.hx
+++ b/source/StoryMenuState.hx
@@ -17,12 +17,22 @@ class StoryMenuState extends MusicBeatState
 {
 	var scoreText:FlxText;
 
-	var weekData:Array<Dynamic> = [['Tutorial'], ['Bopeebo', 'Fresh', 'Dadbattle'], ['Spookeez', 'South']];
+	var weekData:Array<Dynamic> = [
+		['Tutorial'],
+		['Bopeebo', 'Fresh', 'Dadbattle'],
+		['Spookeez', 'South'],
+		['Pico', 'Philly', "Blammed"]
+	];
 	var curDifficulty:Int = 1;
 
-	public static var weekUnlocked:Array<Bool> = [true, true, false];
+	public static var weekUnlocked:Array<Bool> = [true, true, false, false];
 
-	var weekCharacters:Array<Dynamic> = [['dad', 'bf', 'gf'], ['dad', 'bf', 'gf'], ['spooky', 'bf', 'gf']];
+	var weekCharacters:Array<Dynamic> = [
+		['dad', 'bf', 'gf'],
+		['dad', 'bf', 'gf'],
+		['spooky', 'bf', 'gf'],
+		['pico', 'bf', 'gf']
+	];
 	var curWeek:Int = 0;
 
 	var txtTracklist:FlxText;
@@ -113,6 +123,8 @@ class StoryMenuState extends MusicBeatState
 				case 'gf':
 					weekCharacterThing.setGraphicSize(Std.int(weekCharacterThing.width * 0.5));
 					weekCharacterThing.updateHitbox();
+				case 'pico':
+					weekCharacterThing.y += 60;
 			}
 
 			grpWeekCharacters.add(weekCharacterThing);
@@ -231,11 +243,12 @@ class StoryMenuState extends MusicBeatState
 	var movedBack:Bool = false;
 	var selectedWeek:Bool = false;
 	var stopspamming:Bool = false;
+
 	function selectWeek()
 	{
 		if (weekUnlocked[curWeek])
 		{
-			if (stopspamming == false) 
+			if (stopspamming == false)
 			{
 				FlxG.sound.play('assets/sounds/confirmMenu' + TitleState.soundExt);
 
@@ -356,10 +369,9 @@ class StoryMenuState extends MusicBeatState
 
 		txtTracklist.screenCenter(X);
 		txtTracklist.x -= FlxG.width * 0.35;
-    
+
 		#if !switch
 		intendedScore = Highscore.getWeekScore(curWeek, curDifficulty);
 		#end
-
 	}
 }
diff --git a/source/TitleState.hx b/source/TitleState.hx
index ba0012ec6..6d43402c5 100644
--- a/source/TitleState.hx
+++ b/source/TitleState.hx
@@ -64,8 +64,8 @@ class TitleState extends MusicBeatState
 		{
 			StoryMenuState.weekUnlocked = FlxG.save.data.weekUnlocked;
 
-			if (StoryMenuState.weekUnlocked.length < 3)
-				StoryMenuState.weekUnlocked.insert(0, true);
+			if (StoryMenuState.weekUnlocked.length < 4)
+				StoryMenuState.weekUnlocked.insert(0, false);
 		}
 
 		#if SKIP_TO_PLAYSTATE