diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md
index 3b93bab64..54ba396c4 100644
--- a/docs/troubleshooting.md
+++ b/docs/troubleshooting.md
@@ -1,4 +1,4 @@
-# Troubleshooting Common Issues
+# Troubleshooting Common Compilation Issues
 
 - Weird macro error with a very tall call stack: Restart Visual Studio Code
   - NOTE: This is caused by Polymod somewhere, and seems to only occur when there is another compile error somewhere in the program. There is a bounty up for it.
@@ -13,3 +13,11 @@
 
 - `LINK : fatal error LNK1201: error writing to program database ''; check for insufficient disk space, invalid path, or insufficient privilege`
   - This error occurs if the PDB file located in your `export` folder is in use or exceeds 4 GB. Try deleting the `export` folder and building again from scratch.
+
+- `error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)`
+  - This error can happen during cloning as a result of poor network connectivity. A common fix is to run ` git config --global http.postBuffer 4096M` in your terminal.
+
+- Repository is missing an `assets` folder, or `assets` folder is empty.
+  - You did not clone the repository correctly! Copy the path to your `funkin` folder and run `cd the\path\you\copied`. Then follow the compilation guide starting from **Step 4**.
+
+- Other compilation issues may be caused by installing bad library versions. Try deleting the `.haxelib` folder and following the guide starting from **Step 5**.
diff --git a/hmm.json b/hmm.json
index d967a69b3..78c891078 100644
--- a/hmm.json
+++ b/hmm.json
@@ -35,13 +35,6 @@
       "ref": "951a0103a17bfa55eed86703ce50b4fb0d7590bc",
       "url": "https://github.com/FunkinCrew/flixel-text-input"
     },
-    {
-      "name": "flixel-ui",
-      "type": "git",
-      "dir": null,
-      "ref": "27f1ba626f80a6282fa8a187115e79a4a2133dc2",
-      "url": "https://github.com/HaxeFlixel/flixel-ui"
-    },
     {
       "name": "flxanimate",
       "type": "git",
diff --git a/source/funkin/audio/FunkinSound.hx b/source/funkin/audio/FunkinSound.hx
index dae31cd07..54e125ec5 100644
--- a/source/funkin/audio/FunkinSound.hx
+++ b/source/funkin/audio/FunkinSound.hx
@@ -543,7 +543,7 @@ class FunkinSound extends FlxSound implements ICloneable<FunkinSound>
    */
   public static function playOnce(key:String, volume:Float = 1.0, ?onComplete:Void->Void, ?onLoad:Void->Void):Null<FunkinSound>
   {
-    var result = FunkinSound.load(key, volume, false, true, true, onComplete, onLoad);
+    var result:Null<FunkinSound> = FunkinSound.load(key, volume, false, true, true, onComplete, onLoad);
     return result;
   }
 
diff --git a/source/funkin/play/PlayState.hx b/source/funkin/play/PlayState.hx
index 0b2b8846d..1c82eb6b1 100644
--- a/source/funkin/play/PlayState.hx
+++ b/source/funkin/play/PlayState.hx
@@ -1993,6 +1993,7 @@ class PlayState extends MusicBeatSubState
 
     // Skip this if the music is paused (GameOver, Pause menu, start-of-song offset, etc.)
     if (!(FlxG.sound.music?.playing ?? false)) return;
+
     var timeToPlayAt:Float = Conductor.instance.songPosition - Conductor.instance.instrumentalOffset;
     FlxG.sound.music.pause();
     vocals.pause();
diff --git a/source/funkin/play/components/HealthIcon.hx b/source/funkin/play/components/HealthIcon.hx
index c11850b2a..358f39fe5 100644
--- a/source/funkin/play/components/HealthIcon.hx
+++ b/source/funkin/play/components/HealthIcon.hx
@@ -33,7 +33,7 @@ class HealthIcon extends FunkinSprite
    * The character this icon is representing.
    * Setting this variable will automatically update the graphic.
    */
-  public var characterId(default, set):Null<String>;
+  public var characterId(default, set):String = Constants.DEFAULT_HEALTH_ICON;
 
   /**
    * Whether this health icon should automatically update its state based on the character's health.
@@ -116,7 +116,7 @@ class HealthIcon extends FunkinSprite
    */
   static final POSITION_OFFSET:Int = 26;
 
-  public function new(char:String = 'bf', playerId:Int = 0)
+  public function new(char:Null<String>, playerId:Int = 0)
   {
     super(0, 0);
     this.playerId = playerId;
@@ -131,7 +131,7 @@ class HealthIcon extends FunkinSprite
     snapToTargetSize();
   }
 
-  function set_characterId(value:Null<String>):Null<String>
+  function set_characterId(value:Null<String>):String
   {
     if (value == characterId) return value;
 
@@ -412,20 +412,9 @@ class HealthIcon extends FunkinSprite
     }
   }
 
-  function correctCharacterId(charId:Null<String>):String
+  function iconExists(charId:String):Bool
   {
-    if (charId == null)
-    {
-      return Constants.DEFAULT_HEALTH_ICON;
-    }
-
-    if (!Assets.exists(Paths.image('icons/icon-$charId')))
-    {
-      FlxG.log.warn('No icon for character: $charId : using default placeholder face instead!');
-      return Constants.DEFAULT_HEALTH_ICON;
-    }
-
-    return charId;
+    return Assets.exists(Paths.image('icons/icon-$charId'));
   }
 
   function isNewSpritesheet(charId:String):Bool
@@ -435,11 +424,11 @@ class HealthIcon extends FunkinSprite
 
   function loadCharacter(charId:Null<String>):Void
   {
-    if (charId == null || correctCharacterId(charId) != charId)
+    if (charId == null || !iconExists(charId))
     {
-      // This will recursively trigger loadCharacter to be called again.
-      characterId = correctCharacterId(charId);
-      return;
+      FlxG.log.warn('No icon for character: $charId : using default placeholder face instead!');
+      characterId = Constants.DEFAULT_HEALTH_ICON;
+      charId = characterId;
     }
 
     isLegacyStyle = !isNewSpritesheet(charId);
diff --git a/source/funkin/ui/debug/anim/DebugBoundingState.hx b/source/funkin/ui/debug/anim/DebugBoundingState.hx
index 7bb42c89e..19391f8d9 100644
--- a/source/funkin/ui/debug/anim/DebugBoundingState.hx
+++ b/source/funkin/ui/debug/anim/DebugBoundingState.hx
@@ -77,7 +77,7 @@ class DebugBoundingState extends FlxState
   {
     // get the screen position, according to the HUD camera, temp default to FlxG.camera juuust in case?
     var hudMousePos:FlxPoint = FlxG.mouse.getScreenPosition(hudCam ?? FlxG.camera);
-    return Screen.instance.hasSolidComponentUnderPoint(hudMousePos.x, hudMousePos.y);
+    return Screen.instance.hasSolidComponentUnderPoint(hudMousePos.x, hudMousePos.y) || FlxG.mouse.overlaps(animDropDownMenu, hudCam);
   }
 
   override function create()
@@ -239,6 +239,11 @@ class DebugBoundingState extends FlxState
       {
         movingCharacter = false;
       }
+
+      if (FlxG.mouse.justReleased)
+      {
+        movingCharacter = false;
+      }
     }
   }