diff --git a/Project.xml b/Project.xml index b40d81b5c..4536d8c09 100644 --- a/Project.xml +++ b/Project.xml @@ -94,5 +94,5 @@ - + diff --git a/assets/sounds/GF_1.mp3 b/assets/sounds/GF_1.mp3 new file mode 100644 index 000000000..50e4a3051 Binary files /dev/null and b/assets/sounds/GF_1.mp3 differ diff --git a/assets/sounds/GF_1.ogg b/assets/sounds/GF_1.ogg new file mode 100644 index 000000000..b7521ab09 Binary files /dev/null and b/assets/sounds/GF_1.ogg differ diff --git a/assets/sounds/GF_2.mp3 b/assets/sounds/GF_2.mp3 new file mode 100644 index 000000000..d3e11e4ac Binary files /dev/null and b/assets/sounds/GF_2.mp3 differ diff --git a/assets/sounds/GF_2.ogg b/assets/sounds/GF_2.ogg new file mode 100644 index 000000000..32bfea141 Binary files /dev/null and b/assets/sounds/GF_2.ogg differ diff --git a/assets/sounds/GF_3.mp3 b/assets/sounds/GF_3.mp3 new file mode 100644 index 000000000..cdbcf4dc0 Binary files /dev/null and b/assets/sounds/GF_3.mp3 differ diff --git a/assets/sounds/GF_3.ogg b/assets/sounds/GF_3.ogg new file mode 100644 index 000000000..c855a407f Binary files /dev/null and b/assets/sounds/GF_3.ogg differ diff --git a/assets/sounds/GF_4.mp3 b/assets/sounds/GF_4.mp3 new file mode 100644 index 000000000..63c0c07f8 Binary files /dev/null and b/assets/sounds/GF_4.mp3 differ diff --git a/assets/sounds/GF_4.ogg b/assets/sounds/GF_4.ogg new file mode 100644 index 000000000..89c48e0cb Binary files /dev/null and b/assets/sounds/GF_4.ogg differ diff --git a/source/Alphabet.hx b/source/Alphabet.hx index 571da27ee..4e04631ef 100644 --- a/source/Alphabet.hx +++ b/source/Alphabet.hx @@ -61,6 +61,7 @@ class Alphabet extends FlxSpriteGroup { doSplitWords(); + var xPos:Float = 0; for (character in splitWords) { // if (character.fastCodeAt() == " ") @@ -74,10 +75,9 @@ class Alphabet extends FlxSpriteGroup if (AlphaCharacter.alphabet.contains(character.toLowerCase())) { - var xPos:Float = 0; if (lastSprite != null) { - xPos = lastSprite.x + lastSprite.width - 40; + xPos = lastSprite.x + lastSprite.width; } if (lastWasSpace) @@ -92,7 +92,9 @@ class Alphabet extends FlxSpriteGroup if (isBold) letter.createBold(character); else + { letter.createLetter(character); + } add(letter); @@ -108,6 +110,8 @@ class Alphabet extends FlxSpriteGroup splitWords = _finalText.split(""); } + public var personTalking:String = 'gf'; + public function startTypedText():Void { _finalText = text; @@ -118,6 +122,7 @@ class Alphabet extends FlxSpriteGroup var loopNum:Int = 0; var xPos:Float = 0; + var curRow:Int = 0; new FlxTimer().start(0.05, function(tmr:FlxTimer) { @@ -126,7 +131,8 @@ class Alphabet extends FlxSpriteGroup { yMulti += 1; xPosResetted = true; - // xPos = 0; + xPos = 0; + curRow += 1; } if (splitWords[loopNum] == " ") @@ -134,7 +140,9 @@ class Alphabet extends FlxSpriteGroup lastWasSpace = true; } - if (AlphaCharacter.alphabet.contains(splitWords[loopNum].toLowerCase())) + var isNumber:Bool = AlphaCharacter.numbers.contains(splitWords[loopNum]); + var isSymbol:Bool = AlphaCharacter.symbols.contains(splitWords[loopNum]); + if (AlphaCharacter.alphabet.contains(splitWords[loopNum].toLowerCase()) || isNumber || isSymbol) { if (lastSprite != null && !xPosResetted) { @@ -157,16 +165,35 @@ class Alphabet extends FlxSpriteGroup // var letter:AlphaCharacter = new AlphaCharacter(30 * loopNum, 0); var letter:AlphaCharacter = new AlphaCharacter(xPos, 55 * yMulti); + letter.row = curRow; if (isBold) { letter.createBold(splitWords[loopNum]); } else { - letter.createLetter(splitWords[loopNum]); + if (isNumber) + { + letter.createNumber(splitWords[loopNum]); + } + else if (isSymbol) + { + letter.createSymbol(splitWords[loopNum]); + } + else + { + letter.createLetter(splitWords[loopNum]); + } + letter.x += 90; } + if (FlxG.random.bool(40)) + { + var daSound:String = "GF_"; + FlxG.sound.play('assets/sounds/' + daSound + FlxG.random.int(1, 4) + TitleState.soundExt, 0.4); + } + add(letter); lastSprite = letter; @@ -174,7 +201,7 @@ class Alphabet extends FlxSpriteGroup loopNum += 1; - tmr.time = FlxG.random.float(0.05, 0.12); + tmr.time = FlxG.random.float(0.04, 0.09); }, splitWords.length); } @@ -188,8 +215,11 @@ class AlphaCharacter extends FlxSprite { public static var alphabet:String = "abcdefghijklmnopqrstuvwxyz"; - var numbers:String = "1234567890"; - var symbols:String = "|~#$%()*+-:;<=>@[]^_"; + public static var numbers:String = "1234567890"; + + public static var symbols:String = "|~#$%()*+-:;<=>@[]^_.,'!?"; + + public var row:Int = 0; public function new(x:Float, y:Float) { @@ -218,5 +248,41 @@ class AlphaCharacter extends FlxSprite animation.addByPrefix(letter, letter + " " + letterCase, 24); animation.play(letter); updateHitbox(); + + FlxG.log.add('the row' + row); + + y = (110 - height); + y += row * 60; + } + + public function createNumber(letter:String):Void + { + animation.addByPrefix(letter, letter, 24); + animation.play(letter); + + updateHitbox(); + } + + public function createSymbol(letter:String) + { + switch (letter) + { + case '.': + animation.addByPrefix(letter, 'period', 24); + animation.play(letter); + y += 50; + case "'": + animation.addByPrefix(letter, 'apostraphie', 24); + animation.play(letter); + y -= 0; + case "?": + animation.addByPrefix(letter, 'question mark', 24); + animation.play(letter); + case "!": + animation.addByPrefix(letter, 'exclamation point', 24); + animation.play(letter); + } + + updateHitbox(); } } diff --git a/source/MainMenuState.hx b/source/MainMenuState.hx index 6a772421b..aa6cb29cb 100644 --- a/source/MainMenuState.hx +++ b/source/MainMenuState.hx @@ -84,7 +84,7 @@ class MainMenuState extends MusicBeatState } else { - FlxFlicker.flicker(magenta, 0, 0.40); + FlxFlicker.flicker(magenta, 0, 0.30); menuItems.forEach(function(spr:FlxSprite) { diff --git a/source/PlayState.hx b/source/PlayState.hx index 1fd7bc477..1d8a98960 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -16,6 +16,7 @@ import flixel.graphics.atlas.FlxAtlas; import flixel.graphics.frames.FlxAtlasFrames; import flixel.group.FlxGroup.FlxTypedGroup; import flixel.math.FlxMath; +import flixel.math.FlxPoint; import flixel.system.FlxSound; import flixel.text.FlxText; import flixel.tweens.FlxEase; @@ -33,7 +34,7 @@ using StringTools; class PlayState extends MusicBeatState { - public static var curLevel:String = 'Bopeebo'; + public static var curLevel:String = 'Tutorial'; public static var SONG:SwagSong; public static var isStoryMode:Bool = false; public static var storyPlaylist:Array = []; @@ -77,6 +78,8 @@ class PlayState extends MusicBeatState var halloweenBG:FlxSprite; + var talking:Bool = true; + override public function create() { // var gameCam:FlxCamera = FlxG.camera; @@ -97,6 +100,19 @@ class PlayState extends MusicBeatState Conductor.changeBPM(SONG.bpm); + switch (SONG.song.toLowerCase()) + { + case 'tutorial': + dialogue = ["Hey you're pretty cute.", 'Use the arrow keys to keep up \nwith me singing.']; + case 'bopeebo': + dialogue = [ + 'HEY!', + "You think you can just sing\nwith my daughter like that?", + "If you want to date her...", + "You're going to have to go \nthrough ME first!" + ]; + } + if (SONG.song.toLowerCase() == 'spookeez' || SONG.song.toLowerCase() == 'monster' || SONG.song.toLowerCase() == 'south') { halloweenLevel = true; @@ -147,15 +163,25 @@ class PlayState extends MusicBeatState dad = new Character(100, 100, SONG.player2); add(dad); + var camPos:FlxPoint = new FlxPoint(dad.getGraphicMidpoint().x, dad.getGraphicMidpoint().y); + switch (SONG.player2) { case 'gf': dad.setPosition(gf.x, gf.y); gf.visible = false; + if (isStoryMode) + { + camPos.x += 600; + tweenCamIn(); + } + case "spooky": dad.y += 200; case "monster": dad.y += 100; + case 'dad': + camPos.x += 400; } boyfriend = new Boyfriend(770, 450); @@ -166,7 +192,6 @@ class PlayState extends MusicBeatState doof.y = FlxG.height * 0.5; doof.scrollFactor.set(); doof.finishThing = startCountdown; - add(doof); Conductor.songPosition = -5000; @@ -187,7 +212,8 @@ class PlayState extends MusicBeatState // add(strumLine); camFollow = new FlxObject(0, 0, 1, 1); - camFollow.setPosition(dad.getGraphicMidpoint().x, dad.getGraphicMidpoint().y); + + camFollow.setPosition(camPos.x, camPos.y); add(camFollow); FlxG.camera.follow(camFollow, LOCKON, 0.04); @@ -220,11 +246,20 @@ class PlayState extends MusicBeatState healthHeads.antialiasing = true; add(healthHeads); + // healthBar.visible = healthHeads.visible = healthBarBG.visible = false; + if (isStoryMode) + { + add(doof); + } + else + startCountdown(); + strumLineNotes.cameras = [camHUD]; notes.cameras = [camHUD]; healthBar.cameras = [camHUD]; healthBarBG.cameras = [camHUD]; healthHeads.cameras = [camHUD]; + doof.cameras = [camHUD]; // if (SONG.song == 'South') // FlxG.camera.alpha = 0.7; @@ -239,6 +274,10 @@ class PlayState extends MusicBeatState function startCountdown():Void { + generateStaticArrows(0); + generateStaticArrows(1); + + talking = false; startedCountdown = true; Conductor.songPosition = 0; Conductor.songPosition -= Conductor.crochet * 5; @@ -323,9 +362,6 @@ class PlayState extends MusicBeatState { // FlxG.log.add(ChartParser.parse()); - generateStaticArrows(0); - generateStaticArrows(1); - var songData = SONG; Conductor.changeBPM(songData.bpm); @@ -483,6 +519,11 @@ class PlayState extends MusicBeatState } } + function tweenCamIn():Void + { + FlxTween.tween(FlxG.camera, {zoom: 1.3}, (Conductor.stepCrochet * 4 / 1000), {ease: FlxEase.elasticInOut}); + } + override function openSubState(SubState:FlxSubState) { if (paused) @@ -530,7 +571,7 @@ class PlayState extends MusicBeatState // trace("SONG POS: " + Conductor.songPosition); // FlxG.sound.music.pitch = 2; - if (FlxG.keys.justPressed.ENTER) + if (FlxG.keys.justPressed.ENTER && startedCountdown) { persistentUpdate = false; persistentDraw = true; @@ -605,7 +646,7 @@ class PlayState extends MusicBeatState if (SONG.song.toLowerCase() == 'tutorial') { - FlxTween.tween(FlxG.camera, {zoom: 1.3}, (Conductor.stepCrochet * 4 / 1000), {ease: FlxEase.elasticInOut}); + tweenCamIn(); } } diff --git a/source/StoryMenuState.hx b/source/StoryMenuState.hx index a42c20562..23d096a85 100644 --- a/source/StoryMenuState.hx +++ b/source/StoryMenuState.hx @@ -185,6 +185,7 @@ class StoryMenuState extends MusicBeatState PlayState.SONG = Song.loadFromJson(PlayState.storyPlaylist[0].toLowerCase()); new FlxTimer().start(1, function(tmr:FlxTimer) { + FlxG.sound.music.stop(); FlxG.switchState(new PlayState()); }); } diff --git a/source/TitleState.hx b/source/TitleState.hx index 2a64cfea0..bfe18d8c6 100644 --- a/source/TitleState.hx +++ b/source/TitleState.hx @@ -32,7 +32,8 @@ class TitleState extends MusicBeatState ['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', 'do not 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']]; + ['you already know', 'we really out here'], ['rise and grind', 'love to luis'], ['like parappa', 'but cooler'], + ['album of the year', 'chuckie finster']]; var curWacky:Array = [];