diff --git a/source/funkin/TitleState.hx b/source/funkin/TitleState.hx
index cf8c6ea80..465b2ddeb 100644
--- a/source/funkin/TitleState.hx
+++ b/source/funkin/TitleState.hx
@@ -10,6 +10,7 @@ import flixel.tweens.FlxTween;
 import flixel.util.FlxColor;
 import flixel.util.FlxTimer;
 import funkin.audiovis.SpectogramSprite;
+import funkin.noteStuff.NoteUtil;
 import funkin.shaderslmfao.BuildingShaders;
 import funkin.shaderslmfao.ColorSwap;
 import funkin.shaderslmfao.TitleOutline;
@@ -53,6 +54,10 @@ class TitleState extends MusicBeatState
 		curWacky = FlxG.random.getObject(getIntroTextShit());
 		FlxG.sound.cache(Paths.music('freakyMenu'));
 
+		var jsonThing:String = Paths.file('data/songs/bopeebo/bopeebo-events.json');
+		var songstuffLol = NoteUtil.loadSongEvents(jsonThing);
+		trace(songstuffLol);
+
 		// DEBUG BULLSHIT
 
 		super.create();
diff --git a/source/funkin/noteStuff/NoteUtil.hx b/source/funkin/noteStuff/NoteUtil.hx
new file mode 100644
index 000000000..71507355c
--- /dev/null
+++ b/source/funkin/noteStuff/NoteUtil.hx
@@ -0,0 +1,86 @@
+package funkin.noteStuff;
+
+import haxe.Json;
+import openfl.Assets;
+
+/**
+ * Just various functions that IDK where to put em!!!
+ * Semi-temp for now? the note stuff is super clutter-y right now
+ * so I am putting this new stuff here right now XDD
+ * 
+ * A lot of this stuff can probably be moved to where appropriate!
+ * i dont care about NoteUtil.hx at all!!!
+ */
+class NoteUtil
+{
+	/**
+	 * IDK THING FOR BOTH LOL! DIS SHIT HACK-Y
+	 * @param jsonPath 
+	 * @return Map<Int, Array<SongEventInfo>>
+	 */
+	public static function loadSongEvents(jsonPath:String):Map<Int, Array<SongEventInfo>>
+	{
+		return parseSongEvents(loadSongEventFromJson(jsonPath));
+	}
+
+	public static function loadSongEventFromJson(jsonPath:String):Array<SongEvent>
+	{
+		var daEvents:Array<SongEvent>;
+		daEvents = cast Json.parse(Assets.getText(jsonPath)).events; // DUMB LIL DETAIL HERE: MAKE SURE THAT .events IS THERE??
+		trace('GET JSON SONG EVENTS:');
+		trace(daEvents);
+		return daEvents;
+	}
+
+	/**
+	 * Parses song event json stuff into a neater lil map grouping?
+	 * @param songEvents 
+	 */
+	public static function parseSongEvents(songEvents:Array<SongEvent>):Map<Int, Array<SongEventInfo>>
+	{
+		var songData:Map<Int, Array<SongEventInfo>> = new Map();
+
+		for (songEvent in songEvents)
+		{
+			trace(songEvent);
+			if (songData[songEvent.t] == null)
+				songData[songEvent.t] = [];
+
+			songData[songEvent.t].push({songEventType: songEvent.e, value: songEvent.v, activated: false});
+		}
+
+		trace("FINISH SONG EVENTS!");
+		trace(songData);
+
+		return songData;
+	}
+
+	public static function checkSongEvents(songData:Map<Int, Array<SongEventInfo>>, time:Float)
+	{
+		for (eventGrp in songData.keys())
+		{
+			trace(eventGrp);
+		}
+	}
+}
+
+typedef SongEventInfo =
+{
+	var songEventType:SongEventType;
+	var value:Dynamic;
+	var activated:Bool;
+}
+
+typedef SongEvent =
+{
+	var t:Int;
+	var e:SongEventType;
+	var v:Dynamic;
+}
+
+enum abstract SongEventType(String)
+{
+	var FocusCamera;
+	var PlayCharAnim;
+	var Trace;
+}