diff --git a/assets/data/tutorial/Tutorial.json b/assets/data/tutorial/Tutorial.json
index 8d8308a60..fa0457e9f 100644
Binary files a/assets/data/tutorial/Tutorial.json and b/assets/data/tutorial/Tutorial.json differ
diff --git a/assets/images/alphabet.png b/assets/images/alphabet.png
new file mode 100644
index 000000000..7c1bddaaa
Binary files /dev/null and b/assets/images/alphabet.png differ
diff --git a/assets/images/alphabet.xml b/assets/images/alphabet.xml
new file mode 100644
index 000000000..ca5eeccd1
--- /dev/null
+++ b/assets/images/alphabet.xml
@@ -0,0 +1,505 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/speech_bubble_talking.png b/assets/images/speech_bubble_talking.png
index bb8f56bc0..b10d26bce 100644
Binary files a/assets/images/speech_bubble_talking.png and b/assets/images/speech_bubble_talking.png differ
diff --git a/assets/images/speech_bubble_talking.xml b/assets/images/speech_bubble_talking.xml
index e36bc2eba..367e31a45 100644
--- a/assets/images/speech_bubble_talking.xml
+++ b/assets/images/speech_bubble_talking.xml
@@ -2,536 +2,35 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/source/Alphabet.hx b/source/Alphabet.hx
new file mode 100644
index 000000000..b5cfff57c
--- /dev/null
+++ b/source/Alphabet.hx
@@ -0,0 +1,85 @@
+package;
+
+import flixel.FlxSprite;
+import flixel.graphics.frames.FlxAtlasFrames;
+import flixel.group.FlxSpriteGroup;
+
+using StringTools;
+
+class Alphabet extends FlxSpriteGroup
+{
+ // custom shit
+ // amp, backslash, question mark, apostrophy, comma, angry faic, period
+ var lastSprite:AlphaCharacter;
+
+ public function new(x:Float, y:Float, text:String = "", ?bold:Bool = false)
+ {
+ super(x, y);
+
+ var arrayShit:Array = text.split("");
+ trace(arrayShit);
+
+ var loopNum:Int = 0;
+
+ for (character in arrayShit)
+ {
+ if (character == " ")
+ {
+ }
+
+ if (AlphaCharacter.alphabet.contains(character.toLowerCase()))
+ {
+ var xPos:Float = 0;
+ if (lastSprite != null)
+ {
+ xPos = lastSprite.x + lastSprite.frameWidth - 40;
+ }
+
+ // var letter:AlphaCharacter = new AlphaCharacter(30 * loopNum, 0);
+ var letter:AlphaCharacter = new AlphaCharacter(xPos, 0);
+ letter.createBold(character);
+ add(letter);
+
+ lastSprite = letter;
+ }
+
+ loopNum += 1;
+ }
+ }
+}
+
+class AlphaCharacter extends FlxSprite
+{
+ public static var alphabet:String = "abcdefghijklmnopqrstuvwxyz";
+
+ var numbers:String = "1234567890";
+ var symbols:String = "|~#$%()*+-:;<=>@[]^_";
+
+ public function new(x:Float, y:Float)
+ {
+ super(x, y);
+ var tex = FlxAtlasFrames.fromSparrow(AssetPaths.alphabet__png, AssetPaths.alphabet__xml);
+ frames = tex;
+
+ antialiasing = true;
+ }
+
+ public function createBold(letter:String)
+ {
+ animation.addByPrefix(letter, letter.toUpperCase() + " bold", 24);
+ animation.play(letter);
+ updateHitbox();
+ }
+
+ public function createLetter(letter:String):Void
+ {
+ var letterCase:String = "lowercase";
+ if (letter.toLowerCase() != letter)
+ {
+ letterCase = 'capital';
+ }
+
+ animation.addByPrefix(letter, letter + " " + letterCase, 24);
+ animation.play(letter);
+ }
+}
diff --git a/source/ChartingState.hx b/source/ChartingState.hx
index 09fd9f684..87d0409f4 100644
--- a/source/ChartingState.hx
+++ b/source/ChartingState.hx
@@ -80,7 +80,17 @@ class ChartingState extends MusicBeatState
_song = PlayState.SONG;
else
{
- _song = Song.loadFromJson('tutorial');
+ _song = {
+ song: 'tutorial',
+ notes: [],
+ bpm: 100,
+ sections: 0,
+ needsVoices: false,
+ player1: 'bf',
+ player2: 'dad',
+ sectionLengths: [],
+ speed: 1
+ };
}
addSection();
diff --git a/source/FreeplayState.hx b/source/FreeplayState.hx
index cfbd52379..91c88adbf 100644
--- a/source/FreeplayState.hx
+++ b/source/FreeplayState.hx
@@ -2,6 +2,7 @@ package;
import flixel.FlxG;
import flixel.FlxSprite;
+import flixel.addons.display.FlxGridOverlay;
import flixel.text.FlxText;
class FreeplayState extends MusicBeatState
@@ -17,17 +18,22 @@ class FreeplayState extends MusicBeatState
// LOAD CHARACTERS
+ var bg:FlxSprite = FlxGridOverlay.create(20, 20);
+ add(bg);
+
for (i in 0...songs.length)
{
- var songText:FlxText = new FlxText(10, (26 * i) + 30, 0, songs[i], 24);
+ var songText:Alphabet = new Alphabet(40, (70 * i) + 30, songs[i]);
add(songText);
}
selector = new FlxText();
- selector.size = 24;
+ selector.size = 40;
selector.text = ">";
add(selector);
+ var swag:Alphabet = new Alphabet(1, 0, "swag");
+
super.create();
}
@@ -47,7 +53,7 @@ class FreeplayState extends MusicBeatState
if (curSelected >= songs.length)
curSelected = 0;
- selector.y = (26 * curSelected) + 30;
+ selector.y = (70 * curSelected) + 30;
if (FlxG.keys.justPressed.ENTER)
{
diff --git a/source/PlayState.hx b/source/PlayState.hx
index f6c760722..56bafce7a 100644
--- a/source/PlayState.hx
+++ b/source/PlayState.hx
@@ -2,6 +2,8 @@ package;
import Section.SwagSection;
import Song.SwagSong;
+import flixel.FlxBasic;
+import flixel.FlxCamera;
import flixel.FlxG;
import flixel.FlxGame;
import flixel.FlxObject;
@@ -67,6 +69,7 @@ class PlayState extends MusicBeatState
private var startingSong:Bool = false;
private var healthHeads:FlxSprite;
+ private var UI_camera:FlxCamera;
var controls(get, never):Controls;
@@ -131,6 +134,10 @@ class PlayState extends MusicBeatState
strumLine = new FlxSprite(0, 50).makeGraphic(FlxG.width, 10);
strumLine.scrollFactor.set();
+ var gameCam:FlxCamera = FlxG.camera;
+
+ UI_camera = new FlxCamera(0, 0, FlxG.width, FlxG.height, 1);
+
strumLineNotes = new FlxTypedGroup();
add(strumLineNotes);
@@ -178,6 +185,10 @@ class PlayState extends MusicBeatState
healthHeads.antialiasing = true;
add(healthHeads);
+ // strumLineNotes.camera = UI_camera;
+ // camera = FlxG.camera;
+ // FlxG.cameras.add(UI_camera);
+
super.create();
}