diff --git a/Project.xml b/Project.xml
index 4536d8c..b40d81b 100644
--- a/Project.xml
+++ b/Project.xml
@@ -94,5 +94,5 @@
-
+
diff --git a/art/halloween_bg.fla b/art/halloween_bg.fla
new file mode 100644
index 0000000..2fcd37b
Binary files /dev/null and b/art/halloween_bg.fla differ
diff --git a/assets/images/alphabet.xml b/assets/images/alphabet.xml
index ca5eecc..a473eed 100644
--- a/assets/images/alphabet.xml
+++ b/assets/images/alphabet.xml
@@ -2,14 +2,14 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -106,10 +106,10 @@
-
-
-
-
+
+
+
+
@@ -178,10 +178,10 @@
-
-
-
-
+
+
+
+
diff --git a/assets/images/halloween_bg.png b/assets/images/halloween_bg.png
new file mode 100644
index 0000000..af6893c
Binary files /dev/null and b/assets/images/halloween_bg.png differ
diff --git a/assets/images/halloween_bg.xml b/assets/images/halloween_bg.xml
new file mode 100644
index 0000000..21c788d
--- /dev/null
+++ b/assets/images/halloween_bg.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/source/Alphabet.hx b/source/Alphabet.hx
index 20556e3..571da27 100644
--- a/source/Alphabet.hx
+++ b/source/Alphabet.hx
@@ -34,20 +34,26 @@ class Alphabet extends FlxSpriteGroup
var splitWords:Array = [];
+ var isBold:Bool = false;
+
public function new(x:Float, y:Float, text:String = "", ?bold:Bool = false, typed:Bool = false)
{
super(x, y);
_finalText = text;
this.text = text;
+ isBold = bold;
- if (typed)
+ if (text != "")
{
- startTypedText();
- }
- else
- {
- addText();
+ if (typed)
+ {
+ startTypedText();
+ }
+ else
+ {
+ addText();
+ }
}
}
@@ -71,7 +77,7 @@ class Alphabet extends FlxSpriteGroup
var xPos:Float = 0;
if (lastSprite != null)
{
- xPos = lastSprite.x + lastSprite.frameWidth;
+ xPos = lastSprite.x + lastSprite.width - 40;
}
if (lastWasSpace)
@@ -82,7 +88,12 @@ class Alphabet extends FlxSpriteGroup
// var letter:AlphaCharacter = new AlphaCharacter(30 * loopNum, 0);
var letter:AlphaCharacter = new AlphaCharacter(xPos, 0);
- letter.createBold(character);
+
+ if (isBold)
+ letter.createBold(character);
+ else
+ letter.createLetter(character);
+
add(letter);
lastSprite = letter;
@@ -106,10 +117,10 @@ class Alphabet extends FlxSpriteGroup
var loopNum:Int = 0;
+ var xPos:Float = 0;
+
new FlxTimer().start(0.05, function(tmr:FlxTimer)
{
- var xPos:Float = 0;
-
// trace(_finalText.fastCodeAt(loopNum) + " " + _finalText.charAt(loopNum));
if (_finalText.fastCodeAt(loopNum) == "\n".code)
{
@@ -118,22 +129,44 @@ class Alphabet extends FlxSpriteGroup
// xPos = 0;
}
+ if (splitWords[loopNum] == " ")
+ {
+ lastWasSpace = true;
+ }
+
if (AlphaCharacter.alphabet.contains(splitWords[loopNum].toLowerCase()))
{
if (lastSprite != null && !xPosResetted)
{
- xPos = lastSprite.x + lastSprite.frameWidth - 40;
+ lastSprite.updateHitbox();
+ xPos += lastSprite.width + 3;
+ // if (isBold)
+ // xPos -= 80;
}
else
{
xPosResetted = false;
}
+ if (lastWasSpace)
+ {
+ xPos += 20;
+ lastWasSpace = false;
+ }
// trace(_finalText.fastCodeAt(loopNum) + " " + _finalText.charAt(loopNum));
// var letter:AlphaCharacter = new AlphaCharacter(30 * loopNum, 0);
var letter:AlphaCharacter = new AlphaCharacter(xPos, 55 * yMulti);
- letter.createBold(splitWords[loopNum]);
+ if (isBold)
+ {
+ letter.createBold(splitWords[loopNum]);
+ }
+ else
+ {
+ letter.createLetter(splitWords[loopNum]);
+ letter.x += 90;
+ }
+
add(letter);
lastSprite = letter;
@@ -141,7 +174,7 @@ class Alphabet extends FlxSpriteGroup
loopNum += 1;
- tmr.time = FlxG.random.float(0.03, 0.09);
+ tmr.time = FlxG.random.float(0.05, 0.12);
}, splitWords.length);
}
@@ -184,5 +217,6 @@ class AlphaCharacter extends FlxSprite
animation.addByPrefix(letter, letter + " " + letterCase, 24);
animation.play(letter);
+ updateHitbox();
}
}
diff --git a/source/DialogueBox.hx b/source/DialogueBox.hx
new file mode 100644
index 0000000..488fe35
--- /dev/null
+++ b/source/DialogueBox.hx
@@ -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 = [];
+
+ public var finishThing:Void->Void;
+
+ public function new(talkingRight:Bool = true, ?dialogueList:Array)
+ {
+ 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);
+ }
+}
diff --git a/source/PlayState.hx b/source/PlayState.hx
index 8f08c4f..1fd7bc4 100644
--- a/source/PlayState.hx
+++ b/source/PlayState.hx
@@ -38,6 +38,8 @@ class PlayState extends MusicBeatState
public static var isStoryMode:Bool = false;
public static var storyPlaylist:Array = [];
+ var halloweenLevel:Bool = false;
+
private var vocals:FlxSound;
private var dad:Character;
@@ -71,6 +73,10 @@ class PlayState extends MusicBeatState
private var camHUD:FlxCamera;
private var camGame:FlxCamera;
+ var dialogue:Array = ['blah blah blah', 'coolswag'];
+
+ var halloweenBG:FlxSprite;
+
override public function create()
{
// var gameCam:FlxCamera = FlxG.camera;
@@ -91,28 +97,47 @@ class PlayState extends MusicBeatState
Conductor.changeBPM(SONG.bpm);
- 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);
+ if (SONG.song.toLowerCase() == 'spookeez' || SONG.song.toLowerCase() == 'monster' || SONG.song.toLowerCase() == 'south')
+ {
+ halloweenLevel = true;
- 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 hallowTex = FlxAtlasFrames.fromSparrow(AssetPaths.halloween_bg__png, AssetPaths.halloween_bg__xml);
- 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;
+ halloweenBG = new FlxSprite(-200, -100);
+ halloweenBG.frames = hallowTex;
+ halloweenBG.animation.addByPrefix('idle', 'halloweem bg0');
+ 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.scrollFactor.set(0.95, 0.95);
@@ -136,7 +161,14 @@ class PlayState extends MusicBeatState
boyfriend = new Boyfriend(770, 450);
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;
+ add(doof);
+
+ Conductor.songPosition = -5000;
strumLine = new FlxSprite(0, 50).makeGraphic(FlxG.width, 10);
strumLine.scrollFactor.set();
@@ -148,7 +180,7 @@ class PlayState extends MusicBeatState
startingSong = true;
- startCountdown();
+ // startCountdown();
generateSong(SONG.song);
diff --git a/source/TitleState.hx b/source/TitleState.hx
index 3b4cdd3..2a64cfe 100644
--- a/source/TitleState.hx
+++ b/source/TitleState.hx
@@ -51,7 +51,7 @@ class TitleState extends MusicBeatState
super.create();
#if SKIP_TO_PLAYSTATE
- FlxG.switchState(new MainMenuState());
+ FlxG.switchState(new PlayState());
#else
startIntro();
#end