mirror of
https://github.com/ninjamuffin99/Funkin.git
synced 2024-10-05 17:00:39 +00:00
latest halloween
This commit is contained in:
parent
4d811189dd
commit
1866069af2
|
@ -34,20 +34,26 @@ class Alphabet extends FlxSpriteGroup
|
||||||
|
|
||||||
var splitWords:Array<String> = [];
|
var splitWords:Array<String> = [];
|
||||||
|
|
||||||
|
var isBold:Bool = false;
|
||||||
|
|
||||||
public function new(x:Float, y:Float, text:String = "", ?bold:Bool = false, typed:Bool = false)
|
public function new(x:Float, y:Float, text:String = "", ?bold:Bool = false, typed:Bool = false)
|
||||||
{
|
{
|
||||||
super(x, y);
|
super(x, y);
|
||||||
|
|
||||||
_finalText = text;
|
_finalText = text;
|
||||||
this.text = text;
|
this.text = text;
|
||||||
|
isBold = bold;
|
||||||
|
|
||||||
if (typed)
|
if (text != "")
|
||||||
{
|
{
|
||||||
startTypedText();
|
if (typed)
|
||||||
}
|
{
|
||||||
else
|
startTypedText();
|
||||||
{
|
}
|
||||||
addText();
|
else
|
||||||
|
{
|
||||||
|
addText();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,6 +61,7 @@ class Alphabet extends FlxSpriteGroup
|
||||||
{
|
{
|
||||||
doSplitWords();
|
doSplitWords();
|
||||||
|
|
||||||
|
var xPos:Float = 0;
|
||||||
for (character in splitWords)
|
for (character in splitWords)
|
||||||
{
|
{
|
||||||
// if (character.fastCodeAt() == " ")
|
// if (character.fastCodeAt() == " ")
|
||||||
|
@ -68,10 +75,9 @@ class Alphabet extends FlxSpriteGroup
|
||||||
|
|
||||||
if (AlphaCharacter.alphabet.contains(character.toLowerCase()))
|
if (AlphaCharacter.alphabet.contains(character.toLowerCase()))
|
||||||
{
|
{
|
||||||
var xPos:Float = 0;
|
|
||||||
if (lastSprite != null)
|
if (lastSprite != null)
|
||||||
{
|
{
|
||||||
xPos = lastSprite.x + lastSprite.frameWidth;
|
xPos = lastSprite.x + lastSprite.width;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lastWasSpace)
|
if (lastWasSpace)
|
||||||
|
@ -82,7 +88,14 @@ class Alphabet extends FlxSpriteGroup
|
||||||
|
|
||||||
// var letter:AlphaCharacter = new AlphaCharacter(30 * loopNum, 0);
|
// var letter:AlphaCharacter = new AlphaCharacter(30 * loopNum, 0);
|
||||||
var letter:AlphaCharacter = new AlphaCharacter(xPos, 0);
|
var letter:AlphaCharacter = new AlphaCharacter(xPos, 0);
|
||||||
letter.createBold(character);
|
|
||||||
|
if (isBold)
|
||||||
|
letter.createBold(character);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
letter.createLetter(character);
|
||||||
|
}
|
||||||
|
|
||||||
add(letter);
|
add(letter);
|
||||||
|
|
||||||
lastSprite = letter;
|
lastSprite = letter;
|
||||||
|
@ -97,6 +110,8 @@ class Alphabet extends FlxSpriteGroup
|
||||||
splitWords = _finalText.split("");
|
splitWords = _finalText.split("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public var personTalking:String = 'gf';
|
||||||
|
|
||||||
public function startTypedText():Void
|
public function startTypedText():Void
|
||||||
{
|
{
|
||||||
_finalText = text;
|
_finalText = text;
|
||||||
|
@ -106,34 +121,79 @@ class Alphabet extends FlxSpriteGroup
|
||||||
|
|
||||||
var loopNum:Int = 0;
|
var loopNum:Int = 0;
|
||||||
|
|
||||||
|
var xPos:Float = 0;
|
||||||
|
var curRow:Int = 0;
|
||||||
|
|
||||||
new FlxTimer().start(0.05, function(tmr:FlxTimer)
|
new FlxTimer().start(0.05, function(tmr:FlxTimer)
|
||||||
{
|
{
|
||||||
var xPos:Float = 0;
|
|
||||||
|
|
||||||
// trace(_finalText.fastCodeAt(loopNum) + " " + _finalText.charAt(loopNum));
|
// trace(_finalText.fastCodeAt(loopNum) + " " + _finalText.charAt(loopNum));
|
||||||
if (_finalText.fastCodeAt(loopNum) == "\n".code)
|
if (_finalText.fastCodeAt(loopNum) == "\n".code)
|
||||||
{
|
{
|
||||||
yMulti += 1;
|
yMulti += 1;
|
||||||
xPosResetted = true;
|
xPosResetted = true;
|
||||||
// xPos = 0;
|
xPos = 0;
|
||||||
|
curRow += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AlphaCharacter.alphabet.contains(splitWords[loopNum].toLowerCase()))
|
if (splitWords[loopNum] == " ")
|
||||||
|
{
|
||||||
|
lastWasSpace = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
if (lastSprite != null && !xPosResetted)
|
||||||
{
|
{
|
||||||
xPos = lastSprite.x + lastSprite.frameWidth - 40;
|
lastSprite.updateHitbox();
|
||||||
|
xPos += lastSprite.width + 3;
|
||||||
|
// if (isBold)
|
||||||
|
// xPos -= 80;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
xPosResetted = false;
|
xPosResetted = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (lastWasSpace)
|
||||||
|
{
|
||||||
|
xPos += 20;
|
||||||
|
lastWasSpace = false;
|
||||||
|
}
|
||||||
// trace(_finalText.fastCodeAt(loopNum) + " " + _finalText.charAt(loopNum));
|
// trace(_finalText.fastCodeAt(loopNum) + " " + _finalText.charAt(loopNum));
|
||||||
|
|
||||||
// var letter:AlphaCharacter = new AlphaCharacter(30 * loopNum, 0);
|
// var letter:AlphaCharacter = new AlphaCharacter(30 * loopNum, 0);
|
||||||
var letter:AlphaCharacter = new AlphaCharacter(xPos, 55 * yMulti);
|
var letter:AlphaCharacter = new AlphaCharacter(xPos, 55 * yMulti);
|
||||||
letter.createBold(splitWords[loopNum]);
|
letter.row = curRow;
|
||||||
|
if (isBold)
|
||||||
|
{
|
||||||
|
letter.createBold(splitWords[loopNum]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
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);
|
add(letter);
|
||||||
|
|
||||||
lastSprite = letter;
|
lastSprite = letter;
|
||||||
|
@ -141,7 +201,7 @@ class Alphabet extends FlxSpriteGroup
|
||||||
|
|
||||||
loopNum += 1;
|
loopNum += 1;
|
||||||
|
|
||||||
tmr.time = FlxG.random.float(0.03, 0.09);
|
tmr.time = FlxG.random.float(0.04, 0.09);
|
||||||
}, splitWords.length);
|
}, splitWords.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,8 +215,11 @@ class AlphaCharacter extends FlxSprite
|
||||||
{
|
{
|
||||||
public static var alphabet:String = "abcdefghijklmnopqrstuvwxyz";
|
public static var alphabet:String = "abcdefghijklmnopqrstuvwxyz";
|
||||||
|
|
||||||
var numbers:String = "1234567890";
|
public static var numbers:String = "1234567890";
|
||||||
var symbols:String = "|~#$%()*+-:;<=>@[]^_";
|
|
||||||
|
public static var symbols:String = "|~#$%()*+-:;<=>@[]^_.,'!?";
|
||||||
|
|
||||||
|
public var row:Int = 0;
|
||||||
|
|
||||||
public function new(x:Float, y:Float)
|
public function new(x:Float, y:Float)
|
||||||
{
|
{
|
||||||
|
@ -184,5 +247,42 @@ class AlphaCharacter extends FlxSprite
|
||||||
|
|
||||||
animation.addByPrefix(letter, letter + " " + letterCase, 24);
|
animation.addByPrefix(letter, letter + " " + letterCase, 24);
|
||||||
animation.play(letter);
|
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ import flixel.group.FlxGroup.FlxTypedGroup;
|
||||||
import flixel.group.FlxGroup;
|
import flixel.group.FlxGroup;
|
||||||
import flixel.math.FlxMath;
|
import flixel.math.FlxMath;
|
||||||
import flixel.math.FlxPoint;
|
import flixel.math.FlxPoint;
|
||||||
|
import flixel.system.FlxSound;
|
||||||
import flixel.text.FlxText;
|
import flixel.text.FlxText;
|
||||||
import flixel.ui.FlxButton;
|
import flixel.ui.FlxButton;
|
||||||
import flixel.ui.FlxSpriteButton;
|
import flixel.ui.FlxSpriteButton;
|
||||||
|
@ -71,6 +72,8 @@ class ChartingState extends MusicBeatState
|
||||||
|
|
||||||
var tempBpm:Int = 0;
|
var tempBpm:Int = 0;
|
||||||
|
|
||||||
|
var vocals:FlxSound;
|
||||||
|
|
||||||
override function create()
|
override function create()
|
||||||
{
|
{
|
||||||
gridBG = FlxGridOverlay.create(GRID_SIZE, GRID_SIZE, GRID_SIZE * 8, GRID_SIZE * 16);
|
gridBG = FlxGridOverlay.create(GRID_SIZE, GRID_SIZE, GRID_SIZE * 8, GRID_SIZE * 16);
|
||||||
|
@ -276,12 +279,24 @@ class ChartingState extends MusicBeatState
|
||||||
function loadSong(daSong:String):Void
|
function loadSong(daSong:String):Void
|
||||||
{
|
{
|
||||||
if (FlxG.sound.music != null)
|
if (FlxG.sound.music != null)
|
||||||
|
{
|
||||||
FlxG.sound.music.stop();
|
FlxG.sound.music.stop();
|
||||||
|
// vocals.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
FlxG.sound.playMusic('assets/music/' + daSong + "_Inst" + TitleState.soundExt, 0.6);
|
||||||
|
|
||||||
|
// WONT WORK FOR TUTORIAL! REDO LATER
|
||||||
|
vocals = new FlxSound().loadEmbedded("assets/music/" + daSong + "_Voices" + TitleState.soundExt);
|
||||||
|
FlxG.sound.list.add(vocals);
|
||||||
|
|
||||||
FlxG.sound.playMusic('assets/music/' + daSong + TitleState.soundExt, 0.6);
|
|
||||||
FlxG.sound.music.pause();
|
FlxG.sound.music.pause();
|
||||||
|
vocals.pause();
|
||||||
|
|
||||||
FlxG.sound.music.onComplete = function()
|
FlxG.sound.music.onComplete = function()
|
||||||
{
|
{
|
||||||
|
vocals.pause();
|
||||||
|
vocals.time = 0;
|
||||||
FlxG.sound.music.pause();
|
FlxG.sound.music.pause();
|
||||||
FlxG.sound.music.time = 0;
|
FlxG.sound.music.time = 0;
|
||||||
};
|
};
|
||||||
|
@ -430,6 +445,7 @@ class ChartingState extends MusicBeatState
|
||||||
{
|
{
|
||||||
PlayState.SONG = _song;
|
PlayState.SONG = _song;
|
||||||
FlxG.sound.music.stop();
|
FlxG.sound.music.stop();
|
||||||
|
vocals.stop();
|
||||||
FlxG.switchState(new PlayState());
|
FlxG.switchState(new PlayState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -440,9 +456,13 @@ class ChartingState extends MusicBeatState
|
||||||
if (FlxG.sound.music.playing)
|
if (FlxG.sound.music.playing)
|
||||||
{
|
{
|
||||||
FlxG.sound.music.pause();
|
FlxG.sound.music.pause();
|
||||||
|
vocals.pause();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
vocals.play();
|
||||||
FlxG.sound.music.play();
|
FlxG.sound.music.play();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FlxG.keys.justPressed.R)
|
if (FlxG.keys.justPressed.R)
|
||||||
|
@ -456,6 +476,7 @@ class ChartingState extends MusicBeatState
|
||||||
if (FlxG.keys.pressed.W || FlxG.keys.pressed.S)
|
if (FlxG.keys.pressed.W || FlxG.keys.pressed.S)
|
||||||
{
|
{
|
||||||
FlxG.sound.music.pause();
|
FlxG.sound.music.pause();
|
||||||
|
vocals.pause();
|
||||||
|
|
||||||
var daTime:Float = 700 * FlxG.elapsed;
|
var daTime:Float = 700 * FlxG.elapsed;
|
||||||
|
|
||||||
|
@ -465,6 +486,8 @@ class ChartingState extends MusicBeatState
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
FlxG.sound.music.time += daTime;
|
FlxG.sound.music.time += daTime;
|
||||||
|
|
||||||
|
vocals.time = FlxG.sound.music.time;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -497,6 +520,7 @@ class ChartingState extends MusicBeatState
|
||||||
if (updateMusic)
|
if (updateMusic)
|
||||||
{
|
{
|
||||||
FlxG.sound.music.pause();
|
FlxG.sound.music.pause();
|
||||||
|
vocals.pause();
|
||||||
|
|
||||||
var daNum:Int = 0;
|
var daNum:Int = 0;
|
||||||
var daLength:Int = 0;
|
var daLength:Int = 0;
|
||||||
|
@ -507,6 +531,7 @@ class ChartingState extends MusicBeatState
|
||||||
}
|
}
|
||||||
|
|
||||||
FlxG.sound.music.time = (daLength - (_song.notes[sec].lengthInSteps)) * Conductor.stepCrochet;
|
FlxG.sound.music.time = (daLength - (_song.notes[sec].lengthInSteps)) * Conductor.stepCrochet;
|
||||||
|
vocals.time = FlxG.sound.music.time;
|
||||||
updateCurStep();
|
updateCurStep();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,8 @@ import flixel.input.gamepad.FlxGamepadButton;
|
||||||
import flixel.input.gamepad.FlxGamepadInputID;
|
import flixel.input.gamepad.FlxGamepadInputID;
|
||||||
import flixel.input.keyboard.FlxKey;
|
import flixel.input.keyboard.FlxKey;
|
||||||
|
|
||||||
@:enum abstract Action(String) to String from String
|
#if (haxe >= "4.0.0")
|
||||||
|
enum abstract Action(String) to String from String
|
||||||
{
|
{
|
||||||
var UP = "up";
|
var UP = "up";
|
||||||
var LEFT = "left";
|
var LEFT = "left";
|
||||||
|
@ -30,6 +31,28 @@ import flixel.input.keyboard.FlxKey;
|
||||||
var PAUSE = "pause";
|
var PAUSE = "pause";
|
||||||
var RESET = "reset";
|
var RESET = "reset";
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
@:enum
|
||||||
|
abstract Action(String) to String from String
|
||||||
|
{
|
||||||
|
var UP = "up";
|
||||||
|
var LEFT = "left";
|
||||||
|
var RIGHT = "right";
|
||||||
|
var DOWN = "down";
|
||||||
|
var UP_P = "up-press";
|
||||||
|
var LEFT_P = "left-press";
|
||||||
|
var RIGHT_P = "right-press";
|
||||||
|
var DOWN_P = "down-press";
|
||||||
|
var UP_R = "up-release";
|
||||||
|
var LEFT_R = "left-release";
|
||||||
|
var RIGHT_R = "right-release";
|
||||||
|
var DOWN_R = "down-release";
|
||||||
|
var ACCEPT = "accept";
|
||||||
|
var BACK = "back";
|
||||||
|
var PAUSE = "pause";
|
||||||
|
var RESET = "reset";
|
||||||
|
}
|
||||||
|
#end
|
||||||
|
|
||||||
enum Device
|
enum Device
|
||||||
{
|
{
|
||||||
|
@ -402,9 +425,9 @@ class Controls extends FlxActionSet
|
||||||
inline bindKeys(Control.DOWN, [S, FlxKey.DOWN]);
|
inline bindKeys(Control.DOWN, [S, FlxKey.DOWN]);
|
||||||
inline bindKeys(Control.LEFT, [A, FlxKey.LEFT]);
|
inline bindKeys(Control.LEFT, [A, FlxKey.LEFT]);
|
||||||
inline bindKeys(Control.RIGHT, [D, FlxKey.RIGHT]);
|
inline bindKeys(Control.RIGHT, [D, FlxKey.RIGHT]);
|
||||||
inline bindKeys(Control.ACCEPT, [Z, SPACE]);
|
inline bindKeys(Control.ACCEPT, [Z, SPACE, ENTER]);
|
||||||
inline bindKeys(Control.BACK, [X]);
|
inline bindKeys(Control.BACK, [BACKSPACE, ESCAPE]);
|
||||||
inline bindKeys(Control.PAUSE, [P, ENTER]);
|
inline bindKeys(Control.PAUSE, [P, ENTER, ESCAPE]);
|
||||||
inline bindKeys(Control.RESET, [R]);
|
inline bindKeys(Control.RESET, [R]);
|
||||||
case Duo(true):
|
case Duo(true):
|
||||||
inline bindKeys(Control.UP, [W]);
|
inline bindKeys(Control.UP, [W]);
|
||||||
|
|
86
source/DialogueBox.hx
Normal file
86
source/DialogueBox.hx
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
package;
|
||||||
|
|
||||||
|
import flixel.FlxG;
|
||||||
|
import flixel.FlxSprite;
|
||||||
|
import flixel.graphics.frames.FlxAtlasFrames;
|
||||||
|
import flixel.group.FlxSpriteGroup;
|
||||||
|
import flixel.input.FlxKeyManager;
|
||||||
|
|
||||||
|
class DialogueBox extends FlxSpriteGroup
|
||||||
|
{
|
||||||
|
var box:FlxSprite;
|
||||||
|
|
||||||
|
var dialogue:Alphabet;
|
||||||
|
var dialogueList:Array<String> = [];
|
||||||
|
|
||||||
|
public var finishThing:Void->Void;
|
||||||
|
|
||||||
|
public function new(talkingRight:Bool = true, ?dialogueList:Array<String>)
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
|
||||||
|
box = new FlxSprite(40);
|
||||||
|
box.frames = FlxAtlasFrames.fromSparrow(AssetPaths.speech_bubble_talking__png, AssetPaths.speech_bubble_talking__xml);
|
||||||
|
box.animation.addByPrefix('normalOpen', 'Speech Bubble Normal Open', 24, false);
|
||||||
|
box.animation.addByPrefix('normal', 'speech bubble normal', 24);
|
||||||
|
box.animation.play('normalOpen');
|
||||||
|
add(box);
|
||||||
|
|
||||||
|
if (!talkingRight)
|
||||||
|
{
|
||||||
|
box.flipX = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
dialogue = new Alphabet(0, 80, "", false, true);
|
||||||
|
// dialogue.x = 90;
|
||||||
|
add(dialogue);
|
||||||
|
|
||||||
|
this.dialogueList = dialogueList;
|
||||||
|
}
|
||||||
|
|
||||||
|
var dialogueOpened:Bool = false;
|
||||||
|
var dialogueStarted:Bool = false;
|
||||||
|
|
||||||
|
override function update(elapsed:Float)
|
||||||
|
{
|
||||||
|
if (box.animation.curAnim != null)
|
||||||
|
{
|
||||||
|
if (box.animation.curAnim.name == 'normalOpen' && box.animation.curAnim.finished)
|
||||||
|
{
|
||||||
|
box.animation.play('normal');
|
||||||
|
dialogueOpened = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dialogueOpened && !dialogueStarted)
|
||||||
|
{
|
||||||
|
startDialogue();
|
||||||
|
dialogueStarted = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (FlxG.keys.justPressed.SPACE)
|
||||||
|
{
|
||||||
|
remove(dialogue);
|
||||||
|
|
||||||
|
if (dialogueList[1] == null)
|
||||||
|
{
|
||||||
|
finishThing();
|
||||||
|
kill();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dialogueList.remove(dialogueList[0]);
|
||||||
|
startDialogue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
super.update(elapsed);
|
||||||
|
}
|
||||||
|
|
||||||
|
function startDialogue():Void
|
||||||
|
{
|
||||||
|
var theDialog:Alphabet = new Alphabet(0, 70, dialogueList[0], false, true);
|
||||||
|
dialogue = theDialog;
|
||||||
|
add(theDialog);
|
||||||
|
}
|
||||||
|
}
|
|
@ -87,6 +87,7 @@ class FreeplayState extends MusicBeatState
|
||||||
if (accepted)
|
if (accepted)
|
||||||
{
|
{
|
||||||
PlayState.SONG = Song.loadFromJson(songs[curSelected].toLowerCase());
|
PlayState.SONG = Song.loadFromJson(songs[curSelected].toLowerCase());
|
||||||
|
PlayState.isStoryMode = false;
|
||||||
FlxG.switchState(new PlayState());
|
FlxG.switchState(new PlayState());
|
||||||
FlxG.sound.music.stop();
|
FlxG.sound.music.stop();
|
||||||
}
|
}
|
||||||
|
@ -95,6 +96,7 @@ class FreeplayState extends MusicBeatState
|
||||||
if (gamepad.anyJustPressed(["B"])) //"B" is swapped with "A" on Switch
|
if (gamepad.anyJustPressed(["B"])) //"B" is swapped with "A" on Switch
|
||||||
{
|
{
|
||||||
PlayState.SONG = Song.loadFromJson(songs[curSelected].toLowerCase());
|
PlayState.SONG = Song.loadFromJson(songs[curSelected].toLowerCase());
|
||||||
|
PlayState.isStoryMode = false;
|
||||||
FlxG.switchState(new PlayState());
|
FlxG.switchState(new PlayState());
|
||||||
FlxG.sound.music.stop();
|
FlxG.sound.music.stop();
|
||||||
}
|
}
|
||||||
|
|
168
source/MainMenuState.hx
Normal file
168
source/MainMenuState.hx
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
package;
|
||||||
|
|
||||||
|
import flixel.FlxG;
|
||||||
|
import flixel.FlxObject;
|
||||||
|
import flixel.FlxSprite;
|
||||||
|
import flixel.effects.FlxFlicker;
|
||||||
|
import flixel.graphics.frames.FlxAtlasFrames;
|
||||||
|
import flixel.group.FlxGroup.FlxTypedGroup;
|
||||||
|
import flixel.tweens.FlxEase;
|
||||||
|
import flixel.tweens.FlxTween;
|
||||||
|
|
||||||
|
class MainMenuState extends MusicBeatState
|
||||||
|
{
|
||||||
|
var curSelected:Int = 0;
|
||||||
|
|
||||||
|
var menuItems:FlxTypedGroup<FlxSprite>;
|
||||||
|
|
||||||
|
var optionShit:Array<String> = ['story mode', 'freeplay', 'donate'];
|
||||||
|
|
||||||
|
var magenta:FlxSprite;
|
||||||
|
var camFollow:FlxObject;
|
||||||
|
|
||||||
|
override function create()
|
||||||
|
{
|
||||||
|
persistentUpdate = persistentDraw = true;
|
||||||
|
|
||||||
|
var bg:FlxSprite = new FlxSprite(-80).loadGraphic(AssetPaths.menuBG__png);
|
||||||
|
bg.scrollFactor.x = 0;
|
||||||
|
bg.scrollFactor.y = 0.18;
|
||||||
|
bg.setGraphicSize(Std.int(bg.width * 1.1));
|
||||||
|
bg.updateHitbox();
|
||||||
|
bg.screenCenter();
|
||||||
|
bg.antialiasing = true;
|
||||||
|
add(bg);
|
||||||
|
|
||||||
|
camFollow = new FlxObject(0, 0, 1, 1);
|
||||||
|
add(camFollow);
|
||||||
|
|
||||||
|
magenta = new FlxSprite(-80).loadGraphic(AssetPaths.menuBGMagenta__png);
|
||||||
|
magenta.scrollFactor.x = 0;
|
||||||
|
magenta.scrollFactor.y = 0.18;
|
||||||
|
magenta.setGraphicSize(Std.int(magenta.width * 1.1));
|
||||||
|
magenta.updateHitbox();
|
||||||
|
magenta.screenCenter();
|
||||||
|
magenta.visible = false;
|
||||||
|
magenta.antialiasing = true;
|
||||||
|
add(magenta);
|
||||||
|
// magenta.scrollFactor.set();
|
||||||
|
|
||||||
|
menuItems = new FlxTypedGroup<FlxSprite>();
|
||||||
|
add(menuItems);
|
||||||
|
|
||||||
|
var tex = FlxAtlasFrames.fromSparrow(AssetPaths.FNF_main_menu_assets__png, AssetPaths.FNF_main_menu_assets__xml);
|
||||||
|
|
||||||
|
for (i in 0...optionShit.length)
|
||||||
|
{
|
||||||
|
var menuItem:FlxSprite = new FlxSprite(0, 60 + (i * 160));
|
||||||
|
menuItem.frames = tex;
|
||||||
|
menuItem.animation.addByPrefix('idle', optionShit[i] + " basic", 24);
|
||||||
|
menuItem.animation.addByPrefix('selected', optionShit[i] + " white", 24);
|
||||||
|
menuItem.animation.play('idle');
|
||||||
|
menuItem.ID = i;
|
||||||
|
menuItem.screenCenter(X);
|
||||||
|
menuItems.add(menuItem);
|
||||||
|
menuItem.scrollFactor.set();
|
||||||
|
menuItem.antialiasing = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
FlxG.camera.follow(camFollow, null, 0.06);
|
||||||
|
|
||||||
|
changeItem();
|
||||||
|
|
||||||
|
super.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
override function update(elapsed:Float)
|
||||||
|
{
|
||||||
|
if (controls.UP_P)
|
||||||
|
{
|
||||||
|
FlxG.sound.play('assets/sounds/scrollMenu' + TitleState.soundExt);
|
||||||
|
changeItem(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (controls.DOWN_P)
|
||||||
|
{
|
||||||
|
FlxG.sound.play('assets/sounds/scrollMenu' + TitleState.soundExt);
|
||||||
|
changeItem(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (controls.BACK)
|
||||||
|
{
|
||||||
|
FlxG.switchState(new TitleState());
|
||||||
|
}
|
||||||
|
|
||||||
|
super.update(elapsed);
|
||||||
|
|
||||||
|
if (controls.ACCEPT)
|
||||||
|
{
|
||||||
|
if (optionShit[curSelected] == 'donate')
|
||||||
|
{
|
||||||
|
FlxG.openURL('https://ninja-muffin24.itch.io/funkin');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FlxG.sound.play('assets/sounds/confirmMenu' + TitleState.soundExt);
|
||||||
|
|
||||||
|
FlxFlicker.flicker(magenta, 1.1, 0.15, false);
|
||||||
|
|
||||||
|
menuItems.forEach(function(spr:FlxSprite)
|
||||||
|
{
|
||||||
|
if (curSelected != spr.ID)
|
||||||
|
{
|
||||||
|
FlxTween.tween(spr, {alpha: 0}, 0.4, {
|
||||||
|
ease: FlxEase.quadOut,
|
||||||
|
onComplete: function(twn:FlxTween)
|
||||||
|
{
|
||||||
|
spr.kill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FlxFlicker.flicker(spr, 1, 0.06, false, false, function(flick:FlxFlicker)
|
||||||
|
{
|
||||||
|
var daChoice:String = optionShit[curSelected];
|
||||||
|
|
||||||
|
switch (daChoice)
|
||||||
|
{
|
||||||
|
case 'story mode':
|
||||||
|
FlxG.switchState(new StoryMenuState());
|
||||||
|
case 'freeplay':
|
||||||
|
FlxG.switchState(new FreeplayState());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
menuItems.forEach(function(spr:FlxSprite)
|
||||||
|
{
|
||||||
|
spr.screenCenter(X);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeItem(huh:Int = 0)
|
||||||
|
{
|
||||||
|
curSelected += huh;
|
||||||
|
|
||||||
|
if (curSelected >= menuItems.length)
|
||||||
|
curSelected = 0;
|
||||||
|
if (curSelected < 0)
|
||||||
|
curSelected = menuItems.length - 1;
|
||||||
|
|
||||||
|
menuItems.forEach(function(spr:FlxSprite)
|
||||||
|
{
|
||||||
|
spr.animation.play('idle');
|
||||||
|
|
||||||
|
if (spr.ID == curSelected)
|
||||||
|
{
|
||||||
|
spr.animation.play('selected');
|
||||||
|
camFollow.setPosition(spr.getGraphicMidpoint().x, spr.getGraphicMidpoint().y);
|
||||||
|
}
|
||||||
|
|
||||||
|
spr.updateHitbox();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
28
source/MenuCharacter.hx
Normal file
28
source/MenuCharacter.hx
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
package;
|
||||||
|
|
||||||
|
import flixel.FlxSprite;
|
||||||
|
import flixel.graphics.frames.FlxAtlasFrames;
|
||||||
|
|
||||||
|
class MenuCharacter extends FlxSprite
|
||||||
|
{
|
||||||
|
public var character:String;
|
||||||
|
|
||||||
|
public function new(x:Float, character:String = 'bf')
|
||||||
|
{
|
||||||
|
super(x);
|
||||||
|
|
||||||
|
this.character = character;
|
||||||
|
|
||||||
|
var tex = FlxAtlasFrames.fromSparrow(AssetPaths.campaign_menu_UI_characters__png, AssetPaths.campaign_menu_UI_characters__xml);
|
||||||
|
frames = tex;
|
||||||
|
|
||||||
|
animation.addByPrefix('bf', "BF idle dance white", 24);
|
||||||
|
animation.addByPrefix('bfConfirm', 'BF HEY!!', 24, false);
|
||||||
|
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.play(character);
|
||||||
|
updateHitbox();
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,6 +8,7 @@ import flixel.math.FlxMath;
|
||||||
class MenuItem extends FlxSpriteGroup
|
class MenuItem extends FlxSpriteGroup
|
||||||
{
|
{
|
||||||
public var targetY:Float = 0;
|
public var targetY:Float = 0;
|
||||||
|
public var week:FlxSprite;
|
||||||
|
|
||||||
public function new(x:Float, y:Float, weekNum:Int = 0, unlocked:Bool = false)
|
public function new(x:Float, y:Float, weekNum:Int = 0, unlocked:Bool = false)
|
||||||
{
|
{
|
||||||
|
@ -15,13 +16,14 @@ class MenuItem extends FlxSpriteGroup
|
||||||
|
|
||||||
var tex = FlxAtlasFrames.fromSparrow(AssetPaths.campaign_menu_UI_assets__png, AssetPaths.campaign_menu_UI_assets__xml);
|
var tex = FlxAtlasFrames.fromSparrow(AssetPaths.campaign_menu_UI_assets__png, AssetPaths.campaign_menu_UI_assets__xml);
|
||||||
|
|
||||||
var week:FlxSprite = new FlxSprite();
|
week = new FlxSprite();
|
||||||
week.frames = tex;
|
week.frames = tex;
|
||||||
week.animation.addByPrefix('week0', "WEEK1 select", 24);
|
week.animation.addByPrefix('week0', "WEEK1 select", 24);
|
||||||
week.animation.addByPrefix('week1', "week2 select", 24);
|
week.animation.addByPrefix('week1', "week2 select", 24);
|
||||||
add(week);
|
add(week);
|
||||||
|
|
||||||
week.animation.play('week' + weekNum);
|
week.animation.play('week' + weekNum);
|
||||||
|
week.animation.pause();
|
||||||
week.updateHitbox();
|
week.updateHitbox();
|
||||||
|
|
||||||
if (!unlocked)
|
if (!unlocked)
|
||||||
|
|
|
@ -16,6 +16,7 @@ import flixel.graphics.atlas.FlxAtlas;
|
||||||
import flixel.graphics.frames.FlxAtlasFrames;
|
import flixel.graphics.frames.FlxAtlasFrames;
|
||||||
import flixel.group.FlxGroup.FlxTypedGroup;
|
import flixel.group.FlxGroup.FlxTypedGroup;
|
||||||
import flixel.math.FlxMath;
|
import flixel.math.FlxMath;
|
||||||
|
import flixel.math.FlxPoint;
|
||||||
import flixel.system.FlxSound;
|
import flixel.system.FlxSound;
|
||||||
import flixel.text.FlxText;
|
import flixel.text.FlxText;
|
||||||
import flixel.tweens.FlxEase;
|
import flixel.tweens.FlxEase;
|
||||||
|
@ -33,8 +34,13 @@ using StringTools;
|
||||||
|
|
||||||
class PlayState extends MusicBeatState
|
class PlayState extends MusicBeatState
|
||||||
{
|
{
|
||||||
public static var curLevel:String = 'Bopeebo';
|
public static var curLevel:String = 'Tutorial';
|
||||||
public static var SONG:SwagSong;
|
public static var SONG:SwagSong;
|
||||||
|
public static var isStoryMode:Bool = false;
|
||||||
|
public static var storyPlaylist:Array<String> = [];
|
||||||
|
public static var storyDifficulty:Int = 1;
|
||||||
|
|
||||||
|
var halloweenLevel:Bool = false;
|
||||||
|
|
||||||
private var vocals:FlxSound;
|
private var vocals:FlxSound;
|
||||||
|
|
||||||
|
@ -69,6 +75,12 @@ class PlayState extends MusicBeatState
|
||||||
private var camHUD:FlxCamera;
|
private var camHUD:FlxCamera;
|
||||||
private var camGame:FlxCamera;
|
private var camGame:FlxCamera;
|
||||||
|
|
||||||
|
var dialogue:Array<String> = ['blah blah blah', 'coolswag'];
|
||||||
|
|
||||||
|
var halloweenBG:FlxSprite;
|
||||||
|
|
||||||
|
var talking:Bool = true;
|
||||||
|
|
||||||
override public function create()
|
override public function create()
|
||||||
{
|
{
|
||||||
// var gameCam:FlxCamera = FlxG.camera;
|
// var gameCam:FlxCamera = FlxG.camera;
|
||||||
|
@ -89,28 +101,68 @@ class PlayState extends MusicBeatState
|
||||||
|
|
||||||
Conductor.changeBPM(SONG.bpm);
|
Conductor.changeBPM(SONG.bpm);
|
||||||
|
|
||||||
var bg:FlxSprite = new FlxSprite(-600, -200).loadGraphic(AssetPaths.stageback__png);
|
switch (SONG.song.toLowerCase())
|
||||||
// bg.setGraphicSize(Std.int(bg.width * 2.5));
|
{
|
||||||
// bg.updateHitbox();
|
case 'tutorial':
|
||||||
bg.antialiasing = true;
|
dialogue = ["Hey you're pretty cute.", 'Use the arrow keys to keep up \nwith me singing.'];
|
||||||
bg.scrollFactor.set(0.9, 0.9);
|
case 'bopeebo':
|
||||||
bg.active = false;
|
dialogue = [
|
||||||
add(bg);
|
'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!"
|
||||||
|
];
|
||||||
|
case 'fresh':
|
||||||
|
dialogue = ["Not too shabby boy.", ""];
|
||||||
|
case 'dadbattle':
|
||||||
|
dialogue = [
|
||||||
|
"gah you think you're hot stuff?",
|
||||||
|
"If you can beat me here...",
|
||||||
|
"Only then I will even CONSIDER letting you\ndate my daughter!"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
var stageFront:FlxSprite = new FlxSprite(-650, 600).loadGraphic(AssetPaths.stagefront__png);
|
if (SONG.song.toLowerCase() == 'spookeez' || SONG.song.toLowerCase() == 'monster' || SONG.song.toLowerCase() == 'south')
|
||||||
stageFront.setGraphicSize(Std.int(stageFront.width * 1.1));
|
{
|
||||||
stageFront.updateHitbox();
|
halloweenLevel = true;
|
||||||
stageFront.antialiasing = true;
|
|
||||||
stageFront.scrollFactor.set(0.9, 0.9);
|
|
||||||
stageFront.active = false;
|
|
||||||
add(stageFront);
|
|
||||||
|
|
||||||
var stageCurtains:FlxSprite = new FlxSprite(-500, -300).loadGraphic(AssetPaths.stagecurtains__png);
|
var hallowTex = FlxAtlasFrames.fromSparrow(AssetPaths.halloween_bg__png, AssetPaths.halloween_bg__xml);
|
||||||
stageCurtains.setGraphicSize(Std.int(stageCurtains.width * 0.9));
|
|
||||||
stageCurtains.updateHitbox();
|
halloweenBG = new FlxSprite(-200, -100);
|
||||||
stageCurtains.antialiasing = true;
|
halloweenBG.frames = hallowTex;
|
||||||
stageCurtains.scrollFactor.set(1.3, 1.3);
|
halloweenBG.animation.addByPrefix('idle', 'halloweem bg0');
|
||||||
stageCurtains.active = false;
|
halloweenBG.animation.addByPrefix('lightning', 'halloweem bg lightning strike', 24, false);
|
||||||
|
halloweenBG.animation.play('idle');
|
||||||
|
halloweenBG.antialiasing = true;
|
||||||
|
add(halloweenBG);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var bg:FlxSprite = new FlxSprite(-600, -200).loadGraphic(AssetPaths.stageback__png);
|
||||||
|
// bg.setGraphicSize(Std.int(bg.width * 2.5));
|
||||||
|
// bg.updateHitbox();
|
||||||
|
bg.antialiasing = true;
|
||||||
|
bg.scrollFactor.set(0.9, 0.9);
|
||||||
|
bg.active = false;
|
||||||
|
add(bg);
|
||||||
|
|
||||||
|
var stageFront:FlxSprite = new FlxSprite(-650, 600).loadGraphic(AssetPaths.stagefront__png);
|
||||||
|
stageFront.setGraphicSize(Std.int(stageFront.width * 1.1));
|
||||||
|
stageFront.updateHitbox();
|
||||||
|
stageFront.antialiasing = true;
|
||||||
|
stageFront.scrollFactor.set(0.9, 0.9);
|
||||||
|
stageFront.active = false;
|
||||||
|
add(stageFront);
|
||||||
|
|
||||||
|
var stageCurtains:FlxSprite = new FlxSprite(-500, -300).loadGraphic(AssetPaths.stagecurtains__png);
|
||||||
|
stageCurtains.setGraphicSize(Std.int(stageCurtains.width * 0.9));
|
||||||
|
stageCurtains.updateHitbox();
|
||||||
|
stageCurtains.antialiasing = true;
|
||||||
|
stageCurtains.scrollFactor.set(1.3, 1.3);
|
||||||
|
stageCurtains.active = false;
|
||||||
|
|
||||||
|
add(stageCurtains);
|
||||||
|
}
|
||||||
|
|
||||||
gf = new Character(400, 130, 'gf');
|
gf = new Character(400, 130, 'gf');
|
||||||
gf.scrollFactor.set(0.95, 0.95);
|
gf.scrollFactor.set(0.95, 0.95);
|
||||||
|
@ -120,21 +172,37 @@ class PlayState extends MusicBeatState
|
||||||
dad = new Character(100, 100, SONG.player2);
|
dad = new Character(100, 100, SONG.player2);
|
||||||
add(dad);
|
add(dad);
|
||||||
|
|
||||||
|
var camPos:FlxPoint = new FlxPoint(dad.getGraphicMidpoint().x, dad.getGraphicMidpoint().y);
|
||||||
|
|
||||||
switch (SONG.player2)
|
switch (SONG.player2)
|
||||||
{
|
{
|
||||||
case 'gf':
|
case 'gf':
|
||||||
dad.setPosition(gf.x, gf.y);
|
dad.setPosition(gf.x, gf.y);
|
||||||
gf.visible = false;
|
gf.visible = false;
|
||||||
|
if (isStoryMode)
|
||||||
|
{
|
||||||
|
camPos.x += 600;
|
||||||
|
tweenCamIn();
|
||||||
|
}
|
||||||
|
|
||||||
case "spooky":
|
case "spooky":
|
||||||
dad.y += 200;
|
dad.y += 200;
|
||||||
case "monster":
|
case "monster":
|
||||||
dad.y += 100;
|
dad.y += 100;
|
||||||
|
case 'dad':
|
||||||
|
camPos.x += 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
boyfriend = new Boyfriend(770, 450);
|
boyfriend = new Boyfriend(770, 450);
|
||||||
add(boyfriend);
|
add(boyfriend);
|
||||||
|
|
||||||
add(stageCurtains);
|
var doof:DialogueBox = new DialogueBox(false, dialogue);
|
||||||
|
// doof.x += 70;
|
||||||
|
doof.y = FlxG.height * 0.5;
|
||||||
|
doof.scrollFactor.set();
|
||||||
|
doof.finishThing = startCountdown;
|
||||||
|
|
||||||
|
Conductor.songPosition = -5000;
|
||||||
|
|
||||||
strumLine = new FlxSprite(0, 50).makeGraphic(FlxG.width, 10);
|
strumLine = new FlxSprite(0, 50).makeGraphic(FlxG.width, 10);
|
||||||
strumLine.scrollFactor.set();
|
strumLine.scrollFactor.set();
|
||||||
|
@ -146,14 +214,15 @@ class PlayState extends MusicBeatState
|
||||||
|
|
||||||
startingSong = true;
|
startingSong = true;
|
||||||
|
|
||||||
startCountdown();
|
// startCountdown();
|
||||||
|
|
||||||
generateSong(SONG.song);
|
generateSong(SONG.song);
|
||||||
|
|
||||||
// add(strumLine);
|
// add(strumLine);
|
||||||
|
|
||||||
camFollow = new FlxObject(0, 0, 1, 1);
|
camFollow = new FlxObject(0, 0, 1, 1);
|
||||||
camFollow.setPosition(dad.getGraphicMidpoint().x, dad.getGraphicMidpoint().y);
|
|
||||||
|
camFollow.setPosition(camPos.x, camPos.y);
|
||||||
add(camFollow);
|
add(camFollow);
|
||||||
|
|
||||||
FlxG.camera.follow(camFollow, LOCKON, 0.04);
|
FlxG.camera.follow(camFollow, LOCKON, 0.04);
|
||||||
|
@ -186,11 +255,22 @@ class PlayState extends MusicBeatState
|
||||||
healthHeads.antialiasing = true;
|
healthHeads.antialiasing = true;
|
||||||
add(healthHeads);
|
add(healthHeads);
|
||||||
|
|
||||||
|
// healthBar.visible = healthHeads.visible = healthBarBG.visible = false;
|
||||||
|
if (isStoryMode)
|
||||||
|
{
|
||||||
|
// TEMP for now, later get rid of startCountdown()
|
||||||
|
// add(doof);
|
||||||
|
startCountdown();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
startCountdown();
|
||||||
|
|
||||||
strumLineNotes.cameras = [camHUD];
|
strumLineNotes.cameras = [camHUD];
|
||||||
notes.cameras = [camHUD];
|
notes.cameras = [camHUD];
|
||||||
healthBar.cameras = [camHUD];
|
healthBar.cameras = [camHUD];
|
||||||
healthBarBG.cameras = [camHUD];
|
healthBarBG.cameras = [camHUD];
|
||||||
healthHeads.cameras = [camHUD];
|
healthHeads.cameras = [camHUD];
|
||||||
|
doof.cameras = [camHUD];
|
||||||
|
|
||||||
// if (SONG.song == 'South')
|
// if (SONG.song == 'South')
|
||||||
// FlxG.camera.alpha = 0.7;
|
// FlxG.camera.alpha = 0.7;
|
||||||
|
@ -205,6 +285,10 @@ class PlayState extends MusicBeatState
|
||||||
|
|
||||||
function startCountdown():Void
|
function startCountdown():Void
|
||||||
{
|
{
|
||||||
|
generateStaticArrows(0);
|
||||||
|
generateStaticArrows(1);
|
||||||
|
|
||||||
|
talking = false;
|
||||||
startedCountdown = true;
|
startedCountdown = true;
|
||||||
Conductor.songPosition = 0;
|
Conductor.songPosition = 0;
|
||||||
Conductor.songPosition -= Conductor.crochet * 5;
|
Conductor.songPosition -= Conductor.crochet * 5;
|
||||||
|
@ -278,7 +362,8 @@ class PlayState extends MusicBeatState
|
||||||
lastReportedPlayheadPosition = 0;
|
lastReportedPlayheadPosition = 0;
|
||||||
|
|
||||||
startingSong = false;
|
startingSong = false;
|
||||||
FlxG.sound.playMusic("assets/music/" + SONG.song + "_Inst" + TitleState.soundExt);
|
FlxG.sound.playMusic("assets/music/" + SONG.song + "_Inst" + TitleState.soundExt, 1, false);
|
||||||
|
FlxG.sound.music.onComplete = endSong;
|
||||||
vocals.play();
|
vocals.play();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -288,9 +373,6 @@ class PlayState extends MusicBeatState
|
||||||
{
|
{
|
||||||
// FlxG.log.add(ChartParser.parse());
|
// FlxG.log.add(ChartParser.parse());
|
||||||
|
|
||||||
generateStaticArrows(0);
|
|
||||||
generateStaticArrows(1);
|
|
||||||
|
|
||||||
var songData = SONG;
|
var songData = SONG;
|
||||||
Conductor.changeBPM(songData.bpm);
|
Conductor.changeBPM(songData.bpm);
|
||||||
|
|
||||||
|
@ -448,6 +530,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)
|
override function openSubState(SubState:FlxSubState)
|
||||||
{
|
{
|
||||||
if (paused)
|
if (paused)
|
||||||
|
@ -495,7 +582,7 @@ class PlayState extends MusicBeatState
|
||||||
// trace("SONG POS: " + Conductor.songPosition);
|
// trace("SONG POS: " + Conductor.songPosition);
|
||||||
// FlxG.sound.music.pitch = 2;
|
// FlxG.sound.music.pitch = 2;
|
||||||
|
|
||||||
if (FlxG.keys.justPressed.ENTER)
|
if (FlxG.keys.justPressed.ENTER && startedCountdown)
|
||||||
{
|
{
|
||||||
persistentUpdate = false;
|
persistentUpdate = false;
|
||||||
persistentDraw = true;
|
persistentDraw = true;
|
||||||
|
@ -570,7 +657,7 @@ class PlayState extends MusicBeatState
|
||||||
|
|
||||||
if (SONG.song.toLowerCase() == 'tutorial')
|
if (SONG.song.toLowerCase() == 'tutorial')
|
||||||
{
|
{
|
||||||
FlxTween.tween(FlxG.camera, {zoom: 1.3}, (Conductor.stepCrochet * 4 / 1000), {ease: FlxEase.elasticInOut});
|
tweenCamIn();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -606,9 +693,9 @@ class PlayState extends MusicBeatState
|
||||||
case 112:
|
case 112:
|
||||||
gfSpeed = 1;
|
gfSpeed = 1;
|
||||||
case 163:
|
case 163:
|
||||||
FlxG.sound.music.stop();
|
// FlxG.sound.music.stop();
|
||||||
curLevel = 'Bopeebo';
|
// curLevel = 'Bopeebo';
|
||||||
FlxG.switchState(new TitleState());
|
// FlxG.switchState(new TitleState());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -617,9 +704,9 @@ class PlayState extends MusicBeatState
|
||||||
switch (totalBeats)
|
switch (totalBeats)
|
||||||
{
|
{
|
||||||
case 127:
|
case 127:
|
||||||
FlxG.sound.music.stop();
|
// FlxG.sound.music.stop();
|
||||||
curLevel = 'Fresh';
|
// curLevel = 'Fresh';
|
||||||
FlxG.switchState(new PlayState());
|
// FlxG.switchState(new PlayState());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// better streaming of shit
|
// better streaming of shit
|
||||||
|
@ -697,7 +784,7 @@ class PlayState extends MusicBeatState
|
||||||
{
|
{
|
||||||
if (daNote.tooLate)
|
if (daNote.tooLate)
|
||||||
{
|
{
|
||||||
health -= 0.03;
|
health -= 0.04;
|
||||||
vocals.volume = 0;
|
vocals.volume = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -714,6 +801,42 @@ class PlayState extends MusicBeatState
|
||||||
keyShit();
|
keyShit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function endSong():Void
|
||||||
|
{
|
||||||
|
trace('SONG DONE' + isStoryMode);
|
||||||
|
|
||||||
|
if (isStoryMode)
|
||||||
|
{
|
||||||
|
storyPlaylist.remove(storyPlaylist[0]);
|
||||||
|
|
||||||
|
if (storyPlaylist.length <= 0)
|
||||||
|
{
|
||||||
|
FlxG.switchState(new TitleState());
|
||||||
|
|
||||||
|
StoryMenuState.weekUnlocked[1] = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var difficulty:String = "";
|
||||||
|
|
||||||
|
if (storyDifficulty == 0)
|
||||||
|
difficulty = '-easy';
|
||||||
|
|
||||||
|
if (storyDifficulty == 2)
|
||||||
|
difficulty == '-hard';
|
||||||
|
|
||||||
|
PlayState.SONG = Song.loadFromJson(PlayState.storyPlaylist[0].toLowerCase() + difficulty, PlayState.storyPlaylist[0]);
|
||||||
|
FlxG.switchState(new PlayState());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FlxG.switchState(new FreeplayState());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var endingSong:Bool = false;
|
||||||
|
|
||||||
private function popUpScore(strumtime:Float):Void
|
private function popUpScore(strumtime:Float):Void
|
||||||
{
|
{
|
||||||
var noteDiff:Float = Math.abs(strumtime - Conductor.songPosition);
|
var noteDiff:Float = Math.abs(strumtime - Conductor.songPosition);
|
||||||
|
@ -972,7 +1095,7 @@ class PlayState extends MusicBeatState
|
||||||
{
|
{
|
||||||
if (!boyfriend.stunned)
|
if (!boyfriend.stunned)
|
||||||
{
|
{
|
||||||
health -= 0.055;
|
health -= 0.06;
|
||||||
if (combo > 5)
|
if (combo > 5)
|
||||||
{
|
{
|
||||||
gf.playAnim('sad');
|
gf.playAnim('sad');
|
||||||
|
@ -1068,9 +1191,9 @@ class PlayState extends MusicBeatState
|
||||||
}
|
}
|
||||||
|
|
||||||
if (note.noteData >= 0)
|
if (note.noteData >= 0)
|
||||||
health += 0.03;
|
health += 0.023;
|
||||||
else
|
else
|
||||||
health += 0.007;
|
health += 0.004;
|
||||||
|
|
||||||
switch (note.noteData)
|
switch (note.noteData)
|
||||||
{
|
{
|
||||||
|
@ -1131,22 +1254,25 @@ class PlayState extends MusicBeatState
|
||||||
notes.sort(FlxSort.byY, FlxSort.DESCENDING);
|
notes.sort(FlxSort.byY, FlxSort.DESCENDING);
|
||||||
}
|
}
|
||||||
|
|
||||||
FlxG.log.add('change bpm' + SONG.notes[Std.int(curStep / 16)].changeBPM);
|
if (SONG.notes[Math.floor(curStep / 16)] != null)
|
||||||
if (SONG.notes[Std.int(curStep / 16)].changeBPM)
|
|
||||||
{
|
{
|
||||||
Conductor.changeBPM(SONG.notes[Std.int(curStep / 16)].bpm);
|
if (SONG.notes[Math.floor(curStep / 16)].changeBPM)
|
||||||
FlxG.log.add('CHANGED BPM!');
|
{
|
||||||
|
Conductor.changeBPM(SONG.notes[Math.floor(curStep / 16)].bpm);
|
||||||
|
FlxG.log.add('CHANGED BPM!');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Conductor.changeBPM(SONG.bpm);
|
||||||
|
|
||||||
|
// Dad doesnt interupt his own notes
|
||||||
|
if (SONG.notes[Math.floor(curStep / 16)].mustHitSection)
|
||||||
|
dad.dance();
|
||||||
}
|
}
|
||||||
else
|
// FlxG.log.add('change bpm' + SONG.notes[Std.int(curStep / 16)].changeBPM);
|
||||||
Conductor.changeBPM(SONG.bpm);
|
|
||||||
|
|
||||||
if (camZooming && FlxG.camera.zoom < 1.35 && totalBeats % 4 == 0)
|
if (camZooming && FlxG.camera.zoom < 1.35 && totalBeats % 4 == 0)
|
||||||
FlxG.camera.zoom += 0.025;
|
FlxG.camera.zoom += 0.025;
|
||||||
|
|
||||||
// Dad doesnt interupt his own notes
|
|
||||||
if (SONG.notes[Std.int(curStep / 16)].mustHitSection)
|
|
||||||
dad.dance();
|
|
||||||
|
|
||||||
healthHeads.setGraphicSize(Std.int(healthHeads.width + 20));
|
healthHeads.setGraphicSize(Std.int(healthHeads.width + 20));
|
||||||
|
|
||||||
if (totalBeats % gfSpeed == 0)
|
if (totalBeats % gfSpeed == 0)
|
||||||
|
|
|
@ -47,9 +47,9 @@ class Song
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function loadFromJson(jsonInput:String):SwagSong
|
public static function loadFromJson(jsonInput:String, ?folder:String):SwagSong
|
||||||
{
|
{
|
||||||
var rawJson = Assets.getText('assets/data/' + jsonInput.toLowerCase() + '/' + jsonInput.toLowerCase() + '.json').trim();
|
var rawJson = Assets.getText('assets/data/' + folder.toLowerCase() + '/' + jsonInput.toLowerCase() + '.json').trim();
|
||||||
|
|
||||||
while (!rawJson.endsWith("}"))
|
while (!rawJson.endsWith("}"))
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,6 +6,9 @@ import flixel.graphics.frames.FlxAtlasFrames;
|
||||||
import flixel.group.FlxGroup.FlxTypedGroup;
|
import flixel.group.FlxGroup.FlxTypedGroup;
|
||||||
import flixel.group.FlxGroup;
|
import flixel.group.FlxGroup;
|
||||||
import flixel.text.FlxText;
|
import flixel.text.FlxText;
|
||||||
|
import flixel.tweens.FlxTween;
|
||||||
|
import flixel.util.FlxTimer;
|
||||||
|
import lime.net.curl.CURLCode;
|
||||||
|
|
||||||
using StringTools;
|
using StringTools;
|
||||||
|
|
||||||
|
@ -13,31 +16,38 @@ class StoryMenuState extends MusicBeatState
|
||||||
{
|
{
|
||||||
var scoreText:FlxText;
|
var scoreText:FlxText;
|
||||||
|
|
||||||
var weekData:Array<Dynamic> = [['Tutorial', 'Bopeebo', 'Fresh', 'Dad Battle'], ['Spookeez', 'South', 'Monster']];
|
var weekData:Array<Dynamic> = [['Tutorial', 'Bopeebo', 'Fresh', 'Dadbattle'], ['Spookeez', 'South', 'Monster']];
|
||||||
var weekUnlocked:Array<Bool> = [true, false];
|
var curDifficulty:Int = 1;
|
||||||
|
|
||||||
|
public static var weekUnlocked:Array<Bool> = [true, false];
|
||||||
|
|
||||||
|
var weekCharacters:Array<Dynamic> = [['dad', 'bf', 'gf'], ['spooky', 'bf', 'gf']];
|
||||||
var curWeek:Int = 0;
|
var curWeek:Int = 0;
|
||||||
|
|
||||||
var txtTracklist:FlxText;
|
var txtTracklist:FlxText;
|
||||||
|
|
||||||
var grpWeekText:FlxTypedGroup<MenuItem>;
|
var grpWeekText:FlxTypedGroup<MenuItem>;
|
||||||
|
var grpWeekCharacters:FlxTypedGroup<MenuCharacter>;
|
||||||
|
|
||||||
var grpLocks:FlxTypedGroup<FlxSprite>;
|
var grpLocks:FlxTypedGroup<FlxSprite>;
|
||||||
|
|
||||||
var difficultySelectors:FlxGroup;
|
var difficultySelectors:FlxGroup;
|
||||||
|
var sprDifficulty:FlxSprite;
|
||||||
|
var leftArrow:FlxSprite;
|
||||||
|
var rightArrow:FlxSprite;
|
||||||
|
|
||||||
override function create()
|
override function create()
|
||||||
{
|
{
|
||||||
|
persistentUpdate = persistentDraw = true;
|
||||||
|
|
||||||
scoreText = new FlxText(10, 10, 0, "SCORE: 49324858", 36);
|
scoreText = new FlxText(10, 10, 0, "SCORE: 49324858", 36);
|
||||||
scoreText.setFormat("VCR OSD Mono", 32);
|
scoreText.setFormat("VCR OSD Mono", 32);
|
||||||
add(scoreText);
|
|
||||||
|
|
||||||
var rankText:FlxText = new FlxText(0, 10);
|
var rankText:FlxText = new FlxText(0, 10);
|
||||||
rankText.text = 'RANK: GREAT';
|
rankText.text = 'RANK: GREAT';
|
||||||
rankText.setFormat("assets/fonts/vcr.ttf", 32);
|
rankText.setFormat("assets/fonts/vcr.ttf", 32);
|
||||||
rankText.size = scoreText.size;
|
rankText.size = scoreText.size;
|
||||||
rankText.screenCenter(X);
|
rankText.screenCenter(X);
|
||||||
add(rankText);
|
|
||||||
|
|
||||||
var ui_tex = FlxAtlasFrames.fromSparrow(AssetPaths.campaign_menu_UI_assets__png, AssetPaths.campaign_menu_UI_assets__xml);
|
var ui_tex = FlxAtlasFrames.fromSparrow(AssetPaths.campaign_menu_UI_assets__png, AssetPaths.campaign_menu_UI_assets__xml);
|
||||||
var yellowBG:FlxSprite = new FlxSprite(0, 56).makeGraphic(FlxG.width, 400, 0xFFF9CF51);
|
var yellowBG:FlxSprite = new FlxSprite(0, 56).makeGraphic(FlxG.width, 400, 0xFFF9CF51);
|
||||||
|
@ -45,6 +55,8 @@ class StoryMenuState extends MusicBeatState
|
||||||
grpWeekText = new FlxTypedGroup<MenuItem>();
|
grpWeekText = new FlxTypedGroup<MenuItem>();
|
||||||
add(grpWeekText);
|
add(grpWeekText);
|
||||||
|
|
||||||
|
grpWeekCharacters = new FlxTypedGroup<MenuCharacter>();
|
||||||
|
|
||||||
grpLocks = new FlxTypedGroup<FlxSprite>();
|
grpLocks = new FlxTypedGroup<FlxSprite>();
|
||||||
add(grpLocks);
|
add(grpLocks);
|
||||||
|
|
||||||
|
@ -76,36 +88,65 @@ class StoryMenuState extends MusicBeatState
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (char in 0...3)
|
||||||
|
{
|
||||||
|
var weekCharacterThing:MenuCharacter = new MenuCharacter((FlxG.width * 0.25) * (1 + char) - 150, weekCharacters[curWeek][char]);
|
||||||
|
weekCharacterThing.y += 70;
|
||||||
|
weekCharacterThing.antialiasing = true;
|
||||||
|
switch (weekCharacterThing.character)
|
||||||
|
{
|
||||||
|
case 'dad':
|
||||||
|
weekCharacterThing.setGraphicSize(Std.int(weekCharacterThing.width * 0.5));
|
||||||
|
weekCharacterThing.updateHitbox();
|
||||||
|
|
||||||
|
case 'bf':
|
||||||
|
weekCharacterThing.setGraphicSize(Std.int(weekCharacterThing.width * 0.9));
|
||||||
|
weekCharacterThing.updateHitbox();
|
||||||
|
case 'gf':
|
||||||
|
weekCharacterThing.setGraphicSize(Std.int(weekCharacterThing.width * 0.5));
|
||||||
|
weekCharacterThing.updateHitbox();
|
||||||
|
}
|
||||||
|
|
||||||
|
grpWeekCharacters.add(weekCharacterThing);
|
||||||
|
}
|
||||||
|
|
||||||
difficultySelectors = new FlxGroup();
|
difficultySelectors = new FlxGroup();
|
||||||
add(difficultySelectors);
|
add(difficultySelectors);
|
||||||
|
|
||||||
var leftArrow:FlxSprite = new FlxSprite(grpWeekText.members[0].x + 400, grpWeekText.members[0].y + 10);
|
leftArrow = new FlxSprite(grpWeekText.members[0].x + 370, grpWeekText.members[0].y + 10);
|
||||||
leftArrow.frames = ui_tex;
|
leftArrow.frames = ui_tex;
|
||||||
leftArrow.animation.addByPrefix('idle', "arrow left");
|
leftArrow.animation.addByPrefix('idle', "arrow left");
|
||||||
|
leftArrow.animation.addByPrefix('press', "arrow push left");
|
||||||
leftArrow.animation.play('idle');
|
leftArrow.animation.play('idle');
|
||||||
difficultySelectors.add(leftArrow);
|
difficultySelectors.add(leftArrow);
|
||||||
|
|
||||||
var sprDifficulty:FlxSprite = new FlxSprite(leftArrow.x + 70, leftArrow.y);
|
sprDifficulty = new FlxSprite(leftArrow.x + 130, leftArrow.y);
|
||||||
sprDifficulty.frames = ui_tex;
|
sprDifficulty.frames = ui_tex;
|
||||||
sprDifficulty.animation.addByPrefix('easy', 'EASY');
|
sprDifficulty.animation.addByPrefix('easy', 'EASY');
|
||||||
sprDifficulty.animation.addByPrefix('normal', 'NORMAL');
|
sprDifficulty.animation.addByPrefix('normal', 'NORMAL');
|
||||||
sprDifficulty.animation.addByPrefix('hard', 'HARD');
|
sprDifficulty.animation.addByPrefix('hard', 'HARD');
|
||||||
sprDifficulty.animation.play('easy');
|
sprDifficulty.animation.play('easy');
|
||||||
|
changeDifficulty();
|
||||||
|
|
||||||
difficultySelectors.add(sprDifficulty);
|
difficultySelectors.add(sprDifficulty);
|
||||||
|
|
||||||
var rightArrow:FlxSprite = new FlxSprite(sprDifficulty.x + sprDifficulty.width + 20, sprDifficulty.y);
|
rightArrow = new FlxSprite(sprDifficulty.x + sprDifficulty.width + 50, leftArrow.y);
|
||||||
rightArrow.frames = ui_tex;
|
rightArrow.frames = ui_tex;
|
||||||
rightArrow.animation.addByPrefix('idle', 'arrow right');
|
rightArrow.animation.addByPrefix('idle', 'arrow right');
|
||||||
|
rightArrow.animation.addByPrefix('press', "arrow push right", 24, false);
|
||||||
rightArrow.animation.play('idle');
|
rightArrow.animation.play('idle');
|
||||||
difficultySelectors.add(rightArrow);
|
difficultySelectors.add(rightArrow);
|
||||||
|
|
||||||
add(yellowBG);
|
add(yellowBG);
|
||||||
|
add(grpWeekCharacters);
|
||||||
|
|
||||||
txtTracklist = new FlxText(FlxG.width * 0.05, yellowBG.x + yellowBG.height + 100, 0, "Tracks", 32);
|
txtTracklist = new FlxText(FlxG.width * 0.05, yellowBG.x + yellowBG.height + 100, 0, "Tracks", 32);
|
||||||
txtTracklist.alignment = CENTER;
|
txtTracklist.alignment = CENTER;
|
||||||
txtTracklist.font = rankText.font;
|
txtTracklist.font = rankText.font;
|
||||||
txtTracklist.color = 0xFFe55777;
|
txtTracklist.color = 0xFFe55777;
|
||||||
add(txtTracklist);
|
add(txtTracklist);
|
||||||
|
add(rankText);
|
||||||
|
add(scoreText);
|
||||||
|
|
||||||
updateText();
|
updateText();
|
||||||
|
|
||||||
|
@ -125,14 +166,119 @@ class StoryMenuState extends MusicBeatState
|
||||||
lock.y = grpWeekText.members[lock.ID].y;
|
lock.y = grpWeekText.members[lock.ID].y;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (controls.UP_P)
|
if (!movedBack)
|
||||||
changeWeek(-1);
|
{
|
||||||
if (controls.DOWN_P)
|
if (!selectedWeek)
|
||||||
changeWeek(1);
|
{
|
||||||
|
if (controls.UP_P)
|
||||||
|
{
|
||||||
|
changeWeek(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (controls.DOWN_P)
|
||||||
|
{
|
||||||
|
changeWeek(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (controls.RIGHT)
|
||||||
|
rightArrow.animation.play('press')
|
||||||
|
else
|
||||||
|
rightArrow.animation.play('idle');
|
||||||
|
|
||||||
|
if (controls.LEFT)
|
||||||
|
leftArrow.animation.play('press');
|
||||||
|
else
|
||||||
|
leftArrow.animation.play('idle');
|
||||||
|
|
||||||
|
if (controls.RIGHT_P)
|
||||||
|
changeDifficulty(1);
|
||||||
|
if (controls.LEFT_P)
|
||||||
|
changeDifficulty(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (controls.ACCEPT)
|
||||||
|
{
|
||||||
|
selectWeek();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (controls.BACK && !movedBack && !selectedWeek)
|
||||||
|
{
|
||||||
|
FlxG.sound.play('assets/sounds/cancelMenu' + TitleState.soundExt);
|
||||||
|
movedBack = true;
|
||||||
|
FlxG.switchState(new MainMenuState());
|
||||||
|
}
|
||||||
|
|
||||||
super.update(elapsed);
|
super.update(elapsed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var movedBack:Bool = false;
|
||||||
|
var selectedWeek:Bool = false;
|
||||||
|
|
||||||
|
function selectWeek()
|
||||||
|
{
|
||||||
|
if (weekUnlocked[curWeek])
|
||||||
|
{
|
||||||
|
FlxG.sound.play('assets/sounds/confirmMenu' + TitleState.soundExt);
|
||||||
|
|
||||||
|
grpWeekText.members[curWeek].week.animation.resume();
|
||||||
|
grpWeekCharacters.members[1].animation.play('bfConfirm');
|
||||||
|
|
||||||
|
PlayState.storyPlaylist = weekData[curWeek];
|
||||||
|
PlayState.isStoryMode = true;
|
||||||
|
selectedWeek = true;
|
||||||
|
|
||||||
|
var diffic = "";
|
||||||
|
|
||||||
|
switch (curDifficulty)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
diffic = '-easy';
|
||||||
|
case 2:
|
||||||
|
diffic = '-hard';
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayState.storyDifficulty = curDifficulty;
|
||||||
|
|
||||||
|
PlayState.SONG = Song.loadFromJson(PlayState.storyPlaylist[0].toLowerCase() + diffic, PlayState.storyPlaylist[0].toLowerCase());
|
||||||
|
new FlxTimer().start(1, function(tmr:FlxTimer)
|
||||||
|
{
|
||||||
|
FlxG.sound.music.stop();
|
||||||
|
FlxG.switchState(new PlayState());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeDifficulty(change:Int = 0):Void
|
||||||
|
{
|
||||||
|
curDifficulty += change;
|
||||||
|
|
||||||
|
if (curDifficulty < 0)
|
||||||
|
curDifficulty = 2;
|
||||||
|
if (curDifficulty > 2)
|
||||||
|
curDifficulty = 0;
|
||||||
|
|
||||||
|
sprDifficulty.offset.x = 0;
|
||||||
|
|
||||||
|
switch (curDifficulty)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
sprDifficulty.animation.play('easy');
|
||||||
|
sprDifficulty.offset.x = 20;
|
||||||
|
case 1:
|
||||||
|
sprDifficulty.animation.play('normal');
|
||||||
|
sprDifficulty.offset.x = 70;
|
||||||
|
case 2:
|
||||||
|
sprDifficulty.animation.play('hard');
|
||||||
|
sprDifficulty.offset.x = 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprDifficulty.alpha = 0;
|
||||||
|
sprDifficulty.y -= 15;
|
||||||
|
|
||||||
|
FlxTween.tween(sprDifficulty, {y: sprDifficulty.y + 15, alpha: 1}, 0.07);
|
||||||
|
}
|
||||||
|
|
||||||
function changeWeek(change:Int = 0):Void
|
function changeWeek(change:Int = 0):Void
|
||||||
{
|
{
|
||||||
curWeek += change;
|
curWeek += change;
|
||||||
|
@ -150,11 +296,16 @@ class StoryMenuState extends MusicBeatState
|
||||||
bullShit++;
|
bullShit++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FlxG.sound.play('assets/sounds/scrollMenu' + TitleState.soundExt);
|
||||||
|
|
||||||
updateText();
|
updateText();
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateText()
|
function updateText()
|
||||||
{
|
{
|
||||||
|
grpWeekCharacters.members[0].animation.play(weekCharacters[curWeek][0]);
|
||||||
|
grpWeekCharacters.members[1].animation.play(weekCharacters[curWeek][1]);
|
||||||
|
grpWeekCharacters.members[2].animation.play(weekCharacters[curWeek][2]);
|
||||||
txtTracklist.text = "Tracks\n";
|
txtTracklist.text = "Tracks\n";
|
||||||
|
|
||||||
var stringThing:Array<String> = weekData[curWeek];
|
var stringThing:Array<String> = weekData[curWeek];
|
||||||
|
|
|
@ -27,6 +27,17 @@ class TitleState extends MusicBeatState
|
||||||
var credGroup:FlxGroup;
|
var credGroup:FlxGroup;
|
||||||
var credTextShit:Alphabet;
|
var credTextShit:Alphabet;
|
||||||
var textGroup:FlxGroup;
|
var textGroup:FlxGroup;
|
||||||
|
var ngSpr:FlxSprite;
|
||||||
|
|
||||||
|
var wackyIntros:Array<Array<String>> = [
|
||||||
|
['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']];
|
||||||
|
|
||||||
|
var curWacky:Array<String> = [];
|
||||||
|
|
||||||
override public function create():Void
|
override public function create():Void
|
||||||
{
|
{
|
||||||
|
@ -36,6 +47,8 @@ class TitleState extends MusicBeatState
|
||||||
|
|
||||||
PlayerSettings.init();
|
PlayerSettings.init();
|
||||||
|
|
||||||
|
curWacky = FlxG.random.getObject(wackyIntros);
|
||||||
|
|
||||||
// DEBUG BULLSHIT
|
// DEBUG BULLSHIT
|
||||||
|
|
||||||
super.create();
|
super.create();
|
||||||
|
@ -55,18 +68,20 @@ class TitleState extends MusicBeatState
|
||||||
diamond.persist = true;
|
diamond.persist = true;
|
||||||
diamond.destroyOnNoUse = false;
|
diamond.destroyOnNoUse = false;
|
||||||
|
|
||||||
FlxTransitionableState.defaultTransIn = new TransitionData(FADE, FlxColor.BLACK, 2, new FlxPoint(0, -1), {asset: diamond, width: 32, height: 32},
|
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));
|
new FlxRect(0, 0, FlxG.width, FlxG.height));
|
||||||
FlxTransitionableState.defaultTransOut = new TransitionData(FADE, FlxColor.BLACK, 1.3, new FlxPoint(0, 1),
|
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));
|
{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.defaultTransIn.tileData = {asset: diamond, width: 32, height: 32};
|
||||||
FlxTransitionableState.defaultTransOut.tileData = {asset: diamond, width: 32, height: 32};
|
FlxTransitionableState.defaultTransOut.tileData = {asset: diamond, width: 32, height: 32};
|
||||||
|
|
||||||
transIn = FlxTransitionableState.defaultTransIn;
|
transIn = FlxTransitionableState.defaultTransIn;
|
||||||
transOut = FlxTransitionableState.defaultTransOut;
|
transOut = FlxTransitionableState.defaultTransOut;
|
||||||
|
|
||||||
|
FlxG.sound.playMusic('assets/music/freakyMenu' + TitleState.soundExt, 0);
|
||||||
|
|
||||||
|
FlxG.sound.music.fadeIn(4, 0, 0.7);
|
||||||
}
|
}
|
||||||
|
|
||||||
persistentUpdate = true;
|
persistentUpdate = true;
|
||||||
|
@ -104,13 +119,22 @@ class TitleState extends MusicBeatState
|
||||||
|
|
||||||
credTextShit.visible = false;
|
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});
|
FlxTween.tween(credTextShit, {y: credTextShit.y + 20}, 2.9, {ease: FlxEase.quadInOut, type: PINGPONG});
|
||||||
|
|
||||||
|
if (initialized)
|
||||||
|
skipIntro();
|
||||||
|
else
|
||||||
|
initialized = true;
|
||||||
|
|
||||||
// credGroup.add(credTextShit);
|
// credGroup.add(credTextShit);
|
||||||
|
|
||||||
FlxG.sound.playMusic('assets/music/freakyMenu' + TitleState.soundExt, 0, false);
|
|
||||||
|
|
||||||
FlxG.sound.music.fadeIn(4, 0, 0.7);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var transitioning:Bool = false;
|
var transitioning:Bool = false;
|
||||||
|
@ -129,23 +153,24 @@ class TitleState extends MusicBeatState
|
||||||
pressedEnter = true;
|
pressedEnter = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pressedEnter && !skippedIntro)
|
|
||||||
{
|
|
||||||
skipIntro();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pressedEnter && !transitioning && skippedIntro)
|
if (pressedEnter && !transitioning && skippedIntro)
|
||||||
{
|
{
|
||||||
FlxG.camera.flash(FlxColor.WHITE, 1);
|
FlxG.camera.flash(FlxColor.WHITE, 1);
|
||||||
|
FlxG.sound.play('assets/sounds/confirmMenu' + TitleState.soundExt, 0.7);
|
||||||
|
|
||||||
transitioning = true;
|
transitioning = true;
|
||||||
FlxG.sound.music.stop();
|
// FlxG.sound.music.stop();
|
||||||
|
|
||||||
new FlxTimer().start(2, function(tmr:FlxTimer)
|
new FlxTimer().start(2, function(tmr:FlxTimer)
|
||||||
{
|
{
|
||||||
FlxG.switchState(new FreeplayState());
|
FlxG.switchState(new MainMenuState());
|
||||||
});
|
});
|
||||||
FlxG.sound.play('assets/music/titleShoot' + TitleState.soundExt, 0.7);
|
// FlxG.sound.play('assets/music/titleShoot' + TitleState.soundExt, 0.7);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pressedEnter && !skippedIntro)
|
||||||
|
{
|
||||||
|
skipIntro();
|
||||||
}
|
}
|
||||||
|
|
||||||
super.update(elapsed);
|
super.update(elapsed);
|
||||||
|
@ -205,18 +230,20 @@ class TitleState extends MusicBeatState
|
||||||
createCoolText(['In association', 'with']);
|
createCoolText(['In association', 'with']);
|
||||||
case 7:
|
case 7:
|
||||||
addMoreText('newgrounds');
|
addMoreText('newgrounds');
|
||||||
|
ngSpr.visible = true;
|
||||||
// credTextShit.text += '\nNewgrounds';
|
// credTextShit.text += '\nNewgrounds';
|
||||||
case 8:
|
case 8:
|
||||||
deleteCoolText();
|
deleteCoolText();
|
||||||
|
ngSpr.visible = false;
|
||||||
// credTextShit.visible = false;
|
// credTextShit.visible = false;
|
||||||
|
|
||||||
// credTextShit.text = 'Shoutouts Tom Fulp';
|
// credTextShit.text = 'Shoutouts Tom Fulp';
|
||||||
// credTextShit.screenCenter();
|
// credTextShit.screenCenter();
|
||||||
case 9:
|
case 9:
|
||||||
createCoolText(['Shoutouts Tom Fulp']);
|
createCoolText([curWacky[0]]);
|
||||||
// credTextShit.visible = true;
|
// credTextShit.visible = true;
|
||||||
case 11:
|
case 11:
|
||||||
addMoreText('lmao');
|
addMoreText(curWacky[1]);
|
||||||
// credTextShit.text += '\nlmao';
|
// credTextShit.text += '\nlmao';
|
||||||
case 12:
|
case 12:
|
||||||
deleteCoolText();
|
deleteCoolText();
|
||||||
|
@ -243,6 +270,8 @@ class TitleState extends MusicBeatState
|
||||||
{
|
{
|
||||||
if (!skippedIntro)
|
if (!skippedIntro)
|
||||||
{
|
{
|
||||||
|
remove(ngSpr);
|
||||||
|
|
||||||
FlxG.camera.flash(FlxColor.WHITE, 4);
|
FlxG.camera.flash(FlxColor.WHITE, 4);
|
||||||
remove(credGroup);
|
remove(credGroup);
|
||||||
skippedIntro = true;
|
skippedIntro = true;
|
||||||
|
|
Loading…
Reference in a new issue