diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index 4653594102..3415a670cf 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -2270,6 +2270,16 @@ public interface Client extends GameEngine */ void setLoginScreen(SpritePixels pixels); + /** + * Low level control over the login screen background. + * Useful when changing the login screen background every frame, for example for playing a video. + * A typical update cycle would be: + * 1. setLoginScreenBackground(pixels) 2. setLoginScreenLeftTitleSprite() 3. setLoginScreenRightTitleSprite() + */ + void setLoginScreenBackground(SpritePixels pixels); + void setLoginScreenLeftTitleSprite(); + void setLoginScreenRightTitleSprite(); + /** * Sets whether the flames on the login screen should be rendered */ diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/LoginScreenMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/LoginScreenMixin.java index 7380542657..c1462b49bc 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/LoginScreenMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/LoginScreenMixin.java @@ -76,6 +76,26 @@ public abstract class LoginScreenMixin implements RSClient } } + @Inject + public void setLoginScreenBackground(SpritePixels background) + { + assert client.isClientThread() : "setLoginScreen must be called on client thread"; + loginScreenBackground = background; + client.clearLoginScreen(false); + } + + @Inject + public void setLoginScreenLeftTitleSprite() + { + setLeftTitleSprite(0); + } + + @Inject + public void setLoginScreenRightTitleSprite() + { + setRightTitleSprite(0); + } + @Inject @FieldHook("leftTitleSprite") static void setLeftTitleSprite(int idx)