diff --git a/assets/data/stages/limo.xml b/assets/data/stages/limo.xml
index 502b9b59..64f8b0c8 100644
--- a/assets/data/stages/limo.xml
+++ b/assets/data/stages/limo.xml
@@ -37,7 +37,7 @@
-
+
diff --git a/source/funkin/backend/utils/XMLUtil.hx b/source/funkin/backend/utils/XMLUtil.hx
index 66464dd2..d6ed7091 100644
--- a/source/funkin/backend/utils/XMLUtil.hx
+++ b/source/funkin/backend/utils/XMLUtil.hx
@@ -114,6 +114,9 @@ class XMLUtil {
spr.zoomFactor = Std.parseFloat(node.getAtt("zoomfactor")).getDefault(spr.zoomFactor);
+ if (node.has.alpha)
+ spr.alpha = Std.parseFloat(node.getAtt("alpha")).getDefault(spr.alpha);
+
for(anim in node.nodes.anim)
addXMLAnimation(spr, anim);
diff --git a/source/funkin/game/Stage.hx b/source/funkin/game/Stage.hx
index 695961b5..4ec0fa45 100644
--- a/source/funkin/game/Stage.hx
+++ b/source/funkin/game/Stage.hx
@@ -195,6 +195,7 @@ class Stage extends FlxBasic implements IBeatReceiver {
charPos.camyoffset = Std.parseFloat(node.getAtt("camyoffset")).getDefault(charPos.camyoffset);
charPos.skewX = Std.parseFloat(node.getAtt("skewx")).getDefault(charPos.skewX);
charPos.skewY = Std.parseFloat(node.getAtt("skewy")).getDefault(charPos.skewY);
+ charPos.alpha = Std.parseFloat(node.getAtt("alpha")).getDefault(charPos.alpha);
charPos.flipX = (node.has.flip || node.has.flipX) ? (node.getAtt("flip") == "true" || node.getAtt("flipX") == "true") : charPos.flipX;
var scale = Std.parseFloat(node.getAtt("scale")).getDefault(charPos.scale.x);
@@ -246,6 +247,7 @@ class StageCharPos extends FlxObject {
public var camyoffset:Float = 0;
public var skewX:Float = 0;
public var skewY:Float = 0;
+ public var alpha:Float = 1;
public var flipX:Bool = false;
public var scale:FlxPoint = FlxPoint.get(1, 1);
@@ -266,6 +268,7 @@ class StageCharPos extends FlxObject {
char.scale.x *= scale.x; char.scale.y *= scale.y;
char.cameraOffset += FlxPoint.weak(camxoffset, camyoffset);
char.skew.x += skewX; char.skew.y += skewY;
+ char.alpha *= alpha;
}
}
typedef StageCharPosInfo = {