From 94b35239b8e0e404e1cdd6e9e3e1ab33880e6fe2 Mon Sep 17 00:00:00 2001 From: sdburns1998 Date: Sat, 29 Jun 2019 00:25:41 +0200 Subject: [PATCH] interface styles: add RuneScape cross sprites option --- .../main/java/net/runelite/api/Client.java | 4 + .../InterfaceStylesConfig.java | 10 +++ .../InterfaceStylesPlugin.java | 78 ++++++++++++++++++ .../interfacestyles/rs3/cross_sprites/0.png | Bin 0 -> 15717 bytes .../interfacestyles/rs3/cross_sprites/1.png | Bin 0 -> 15729 bytes .../interfacestyles/rs3/cross_sprites/2.png | Bin 0 -> 15819 bytes .../interfacestyles/rs3/cross_sprites/3.png | Bin 0 -> 15896 bytes .../interfacestyles/rs3/cross_sprites/4.png | Bin 0 -> 15689 bytes .../interfacestyles/rs3/cross_sprites/5.png | Bin 0 -> 15691 bytes .../interfacestyles/rs3/cross_sprites/6.png | Bin 0 -> 15701 bytes .../interfacestyles/rs3/cross_sprites/7.png | Bin 0 -> 15684 bytes .../java/net/runelite/rs/api/RSClient.java | 4 + 12 files changed, 96 insertions(+) create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/0.png create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/1.png create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/2.png create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/3.png create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/4.png create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/5.png create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/6.png create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/7.png 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 604478d6f3..d03116c58d 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -1626,6 +1626,10 @@ public interface Client extends GameShell * Returns client item composition cache */ NodeCache getItemDefinitionCache(); + /** + * Returns the array of cross sprites that appear and animate when left-clicking + */ + Sprite[] getCrossSprites(); EnumDefinition getEnum(int id); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesConfig.java index 540186558c..3f64778e52 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesConfig.java @@ -62,4 +62,14 @@ public interface InterfaceStylesConfig extends Config { return false; } + + @ConfigItem( + keyName = "rsCrossSprites", + name = "RuneScape cross sprites", + description = "Replaces left-click cross sprites with the ones in RuneScape" + ) + default boolean rsCrossSprites() + { + return false; + } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java index fa70dff0fc..17093f237e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java @@ -31,11 +31,13 @@ import java.awt.image.BufferedImage; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; +import net.runelite.api.GameState; import net.runelite.api.HealthBar; import net.runelite.api.SpriteID; import net.runelite.api.Sprite; import net.runelite.api.events.BeforeMenuRender; import net.runelite.api.events.ConfigChanged; +import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.PostHealthBar; import net.runelite.api.events.WidgetPositioned; import net.runelite.api.widgets.Widget; @@ -69,6 +71,8 @@ public class InterfaceStylesPlugin extends Plugin @Inject private SpriteManager spriteManager; + private SpritePixels[] defaultCrossSprites; + @Provides InterfaceStylesConfig provideConfig(ConfigManager configManager) { @@ -89,6 +93,7 @@ public class InterfaceStylesPlugin extends Plugin restoreWidgetDimensions(); removeGameframe(); restoreHealthBars(); + restoreCrossSprites(); }); } @@ -126,6 +131,22 @@ public class InterfaceStylesPlugin extends Plugin } } + @Subscribe + public void onGameStateChanged(GameStateChanged gameStateChanged) + { + if (gameStateChanged.getGameState() != GameState.LOGIN_SCREEN) + { + return; + } + + /* + * The cross sprites aren't loaded yet when the initial config change event is received. + * So run the overriding for cross sprites when we reach the login screen, + * at which point the cross sprites will have been loaded. + */ + overrideCrossSprites(); + } + private void updateAllOverrides() { removeGameframe(); @@ -134,6 +155,7 @@ public class InterfaceStylesPlugin extends Plugin restoreWidgetDimensions(); adjustWidgetDimensions(); overrideHealthBars(); + overrideCrossSprites(); } @Subscribe @@ -283,6 +305,62 @@ public class InterfaceStylesPlugin extends Plugin clientThread.invokeLater(client::resetHealthBarCaches); } + private void overrideCrossSprites() + { + if (config.rsCrossSprites()) + { + // If we've already replaced them, + // we don't need to replace them again + if (defaultCrossSprites != null) + { + return; + } + + SpritePixels[] crossSprites = client.getCrossSprites(); + + if (crossSprites == null) + { + return; + } + + defaultCrossSprites = new SpritePixels[crossSprites.length]; + System.arraycopy(crossSprites, 0, defaultCrossSprites, 0, defaultCrossSprites.length); + + for (int i = 0; i < crossSprites.length; i++) + { + SpritePixels newSprite = getFileSpritePixels("rs3/cross_sprites/" + i + ".png"); + + if (newSprite == null) + { + continue; + } + + crossSprites[i] = newSprite; + } + } + else + { + restoreCrossSprites(); + } + } + + private void restoreCrossSprites() + { + if (defaultCrossSprites == null) + { + return; + } + + SpritePixels[] crossSprites = client.getCrossSprites(); + + if (crossSprites != null && defaultCrossSprites.length == crossSprites.length) + { + System.arraycopy(defaultCrossSprites, 0, crossSprites, 0, defaultCrossSprites.length); + } + + defaultCrossSprites = null; + } + private void restoreWidgetDimensions() { for (WidgetOffset widgetOffset : WidgetOffset.values()) diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/0.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/0.png new file mode 100644 index 0000000000000000000000000000000000000000..b817c474c04ce529e239bb864c3c823625600dca GIT binary patch literal 15717 zcmeI3Ply{;7{Es>i`~-VpF&wC%)DfWCNtBS zNt0a=sy%2yPz1q)BB%(Wh!-z<&|)ii(TfN1B!UOMco0FotZ!zL%;atISlWUpFOWaq z``-6`@B4l4eKT{&_0@Av9-Mz@o?)1SE6cSt^!-5mzJCsVKJxnxKwta)<&BVG4&993 z_q=xU&{2jlpLH7R(R%%?VR_vmu)QWM4!S;?jdZ65KCmvqh;72Q<5mj4efD{Qb?i#v zf>Iai{vzCTmbU|Ve*0X*+P-AzcHvZY-W(XnK^I1V9dtWxXbdWa#IJ#V$HRPqO{PSb zDusnOAiG{)Wf#2wvPx0qEU{E(HN7Y*dRdYmXC*;Yc|qqznG-}q&<#Okhp$3)9{n-{ zyJf7^&J4pLsZ!XCBH!Toe!pMrmx^A{=0#oCc|qbOi9<8EaLbLrfOErRsgseP8Vs$# z@gv7`+1M{=dcCMpD8zxruVG$Ye;mjShwKnVegJ%4EDHQIBikC=_`RT$EX}rf*nwT> zMj^5jr`q|OUgU+F-i(lA^~}JiCiVI__SE%uyHi7l(b5%!V2E_8W!TvAA-@JguNPQw z=?Y5a*tF~;rgx}Xht-)){IubzRyEJ+#oKzpwP1*f5$1}7N|hYk)1W;$I#P6;YT7nz&vI-d3u?7Q z0Cl;og|*F zGv{nqpr--{wR6zP&53idQ7%A$s-|for>kYaK`3jSu9PKC)Krv+CIC?_k8+vfW>=_X zC$9SzR))AX=i%ka(X8%CY;7&6QkL( za5HCjIroMj^`A4J9izVqT~gObT_v+-I|;p3)CU1vXruGAmxh*loixMUPd_DyQF1an z&K(pY1Xu2?3?{5KHWLxDFL6$fmwVIp-T6(DjEd_}3sLZ!f2Gn>3LzE0@+<5=J zGQ_~s=+-81+t9A^qs&GF|E0?9tskZd-(KagOXmNea_LE&?1`g3ySs;)@!gVv`Y-AQ zAnALe$?qD=_Dni|J?^8OUNT=-1@z*@_;YBQSL3D|WYfGFH_a@ccAcmy4WnVhIji`V zF1_D4kDfkYRaKOdV)FPfZn5eNU}wGNp!NSS>3yodz$(yFE^E&Yu64GUk1#l_nw}+ zIC$=R|BDmfKJm%=krQ*PhhIFrbnMpt>p#7F_Hyg(`}WN-_B$WEaNzSdkDzGG%F?;o JN2f17{|_DZ1xWw^ literal 0 HcmV?d00001 diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/1.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/1.png new file mode 100644 index 0000000000000000000000000000000000000000..a6add2616dc8bf19a883048ea72f95258e1beedc GIT binary patch literal 15729 zcmeI3O^6&t6o6YJYqBIEO2FU`HnYSZVo(3iOgA%=Y<4#8f)kg`YIeOOHPzL#ZDzXL z?w+051xYj@21F#FD4r#^oIC_Pgh+Dprl5Eb!IM$&;6*R4)zkCSQ#(^Ei6BZf%yhqc z_1>%cUe)XFLtj}s{o;Y?$EP`tJFvJ=S;pr>@o(=G{(t)SZGcbv{DrlU;||`Ae-C_k z?BEj|SA5f1S&de!FPYG5W`X6^P`1W*8={PxAo4DVQ_%vrrE zRsA`%?ksEt=*-sX6}WW)8dm0bdAis!v4bXx0N-gg+|cZlGF`tWzK)y44Bzb%T_|N{ ztatoB(CDz~_yutQ!SIdx2LZIVVbnC~JZwo04HlGT%EgitTng+g7t)P#0yxFhofa6-B^3gmBZ1Ku2)HnZ!xoPX&cAaQw*e zTt4;-YF;ZUWioM~!O@#n(;ozK!yY?KQS1O;l(UjJ&d7oT8^0Aaxn~6-HW_%-J1|{pq>~Q=cHO4#2!1|W^-)lFq+@M2zp4zT81l|J`$Hv=(Pff<~Q(E zX2#7va_nJpMm)uuiDO3{XM$O*NzA%SA<0k?&()j@5Qw~B#q%2FWR)%T5%P0$@v6%6 z&z*H#%WH?v7e&%!nD3!CQ~?nxV@pGja)P9-D5@zJOkFxADW)W)oFqL7A63tC?9EXh z`U+mtvS#Y}w2xFz(g)r@7Kp&Eyrlc4{8-Smy`TxAveN{0B>HZ>C=MG_JqN4Gobwu9 zfQN<3YEc~5Jl3k>!B)JiXI+RwoQyD)B%G@5#ytt@qpf{K!zm|a!}6eGnZuyamH{#} zRVd_TU65sD2nMpC0CN!P(8>cvs};p~^I{jnam9YSt)mgs)1i$wUIx{wx#)%wz|&c* zlyO7W!6Vaw4WWjRP%GGZ!N_TfP{qsfo zYBGJ|$v9Kab_9AkaBw*XjZ~j_E*74PhUA(8bE=@p$QBG$s|f{320}r#Gzm%uuywt= z&hcEvxY-eE!HM&}Nu(jp%^CE@XzMWV-NNgGAVhIlDP{U~Wl*Vc*TGTjmM0UyxMY`M zyz7xw6h~Tz!y?U`o$1^ig2aEyd~%HTI&x`MBXQO3HQ7n%*-;w=Xts{`({2h{;&s%F zbU%KVU`E}Y*>LV75h2*Pzche?1#C^O394iPA#Z8A0JMT4KsBGYRof~k7VM|_9@2md zuVl)qsSb+wzn6v>coH411GkQ>ve=(lzu~`>x!u*nWWx8BIpUW2Kge9N6Gv-ezs~Ng zp~d)VDXzb`7JzQulZ)bxw&9vd`me@yw9)GJH*yj_L^=NNnWojG=^EWMttL%}man)@ zR91S?h~|`4{79EPZ=AtzAE=zubrs)p$Y#=F$?2fRYQ@3N8)1AWkaIm7QZd$WZIWS1 z(KAd^m3mL;-o}zv{1$>=fW*NY(2hIY;QsSZUJPgSPkJSMu^Ld$RwKTdbp=G!TAas%8qVplN3>N`} zE;3wnK7^LxB7o3EhKtUJ&@x;E5W2{4(fJTshKm3~7a1-(A41D;5kTl7!$s#qXc;a7 z2wh~j=zIt*!$kn0iwqZ?520na2q1Kk;iB^)vIv+yIa1lW0BEv=JLueT;0tj8C;+h_QQ;b~vA#odjF+6YH zJ&3u~UJ74_ZwzD_eI`Zgu z`)^&Fy7pkS$6vej^_3g@Pqd%<;m|Xu-hXT9^GCk?M!%F1mkz&scz)*2zALXUe)8*A d6=!2=KX>aUd={NMdICr07Uxe_uAe;r_TPdo2FU;b literal 0 HcmV?d00001 diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/2.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/2.png new file mode 100644 index 0000000000000000000000000000000000000000..015b85e5a0ea4be8083f5c65d9ed379a045694bb GIT binary patch literal 15819 zcmeI3&5zqe6u`}g+Oo7&)k;tmP_0x*t%_qiwv*UOvfABj*_B9HZ9}`|0G-&AthI@4 zY-f|*OM!|?tvFPb_!5_15aQAUCn^q5sqhCNAqpoXxImFW;sP94#&!}rlVn(E4+u@9 ze7t${-kbTo=Qs8tmzGXGy=Uss6vHrk78lCP=zCxA-n9dL9{zO;ps$CVg|i;R?7bDd z?|b9;-p3fGaNDe|_$!rXG~I5cfnnERy4!NlY^0m+IzV58K3jtg(<-KZ{`iv=YZ}GW z8KojroH@8^E^NB+)aJ>mzPYBWMryh=Rp@HSK@0kT?Y5ehr*(^|(65Gm2g7`d4X5~P z#nem?kX@-Pv2(TyStXt2bWzH)IW;XRYCa=B#byLC%L^(m%A6o-f~pB3+k2%-Q|MR0 zHR{@O`9v=ql8UKS-*+^g?{qrpj+D0D1~00r$_p7jli|<|&fBnj(B&-eNaUpNrwl#a zH67oyEjI8AYIfT%rcyzm!K=5gmNN)sc|CTBBHslLFQx^4oROgqY@D{+43}o;JZ!=i zw0sZQiDT`YRol0{ReM6nfqG(Kl#@zj5PR%;TdlF7J%4^3A?P6;Yw1-t9LO(2&u+Uq zoL@&< zoZYltv@BSX3jDa?u~ubUZwF;PW9iUC$?y_MLa7Qb+*!~V9_=fdW+`eLhOL{176;Yq zB7mwaarvC6aH0rRPKAcf=~-P@bR!2ca;?Az7cX)Vud7!Zz47s`>k7=|Yc=toyN&`5 zZzf5Kgd(W0N<~|=JRcxZi{%m;NSkQWVjT*o{mC2vvcbtUS>S3AN}MDMl9U5#R#fz` z?1s(bP4`^)qa)YjH?Asb#xM+(yzywA31=gLo^?%hQh;V+POujP?FHm(0@URk2c^8q zLNvh~P3QIyjF?Z3(OHESsUbzK!da7@ zcy`_I02j_Q(51SaUKx2EHpAWj-353TiSWSs-K9Z=*?LxyM9z>=0}%vSA|!bGRq=`|M~BEd)1W8tT8O7l5$ui3NUSEUuYo z{z}kCo9%GEnibHC7lY59X;O`wo+XVor!L$??281jUaZSa4SB4h)k8%h78Tr#2Z(T=!WM=h+Kl_NV@59%w-1+5? z15fA=AKo$h%KTC1gEeOUg={&ZRGY+I^7u{?O^2r$0Y@2?b^r M=TDZe&z^hrFCj}I8~^|S literal 0 HcmV?d00001 diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/3.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/3.png new file mode 100644 index 0000000000000000000000000000000000000000..e62c91b16c78c4fdc4d2c8218852925f6a6b35b4 GIT binary patch literal 15896 zcmeI3Ply{;7{Es=wXSUOP_$amA*Euellec%3`xrFrgaxgUAB>Kq0qj}d&!PXW~MW< zO?DBiRjYy*g+h+$=( z%ZGOFje!_HceBM6j4zGJVOXK+z508H{72%>H8_8&<-3w zay*xh{eqge9u+g0IMCqL+gHmU1aiY3J4{jR0AG}|k~ql-+5;PZJ!p2925k{FQ46_I zi0$NwcK(_ddEuHjCFDRoH89Rer80;;alNh9#L!`MGJjI%+YeyYtidn2l%(|tJWT=4mYApl^L|#z!yk;q>vgJNPeqkZ5 zsvQ6H3CD$AJ3LqrNt0o|hu%;bM5u%iHFZ;g z5Sl_hC+mVNBU3ODv<2I+ZQX`BplG#%82@;&i{ZL@wb2`&?Aor&0GXQlFSxGjNXge~ z^51uz>}8ZwItet&aq(6v){+}W04HIoT*3oc2lG@gH@%LaVA`f3Xqtwv|yT8w>P&;NU|DG*ffpy+FJd&8R76 z&Q=6NRZYRb%NOz*)C7oB4L}v<>In4rGQrJQs6{8P){W8P=~nA;bZ&HXSgqaT!UsW! z;$~RP^t<8Ud`SwhSBBlDY5_YwXi9e6s}L-RBcsD*4J-@E1ZO;*+e0vBK0QWz4Y{;l zm$>TAn(id@>QNg6Xs&^~z;@bj;&s%FbpKbs?Yl@s2+rSK8Vm^m3FQnySCE4154RFi zlk0*}134Q?xw@fh{WPbtNNzE%subYCk%Ny5$&xiomios@BKU)&2ox9`aX zacpc@Gs*nbxQ{m1yYo#$!Y@&dKYONWHEDX1Zkkq;rbEjYTqi0iy=cU6$}0XNn*2*T zj_;XJ$N`}E;3wnK7^LxB7o3EhKtUJ z&@x;E5W2{4(fJTshKm3~7a1-(A41D;5kTl7!$s#qXc;a72wh~j=zIt*!$kn0iwqZ? z520na2q1Kk;iB^)v zIv+yIa1lW0BEv=JLueT;0tj7XxafQcEyG0sp^FR`oe!a9xCkJ0k>R5AA+!t^0fa6x zTy#E!mf<3R&_#xe&WF%4Tm%rhNX0cXd=eVD`0?j9e$M&!jo+`~XQX+1aizj>n+G`V z!mAv2XA6J-#Bu8q$NhYU|#Z|J^S8Q5AAs%bMyUoetE5YZsm!OzuUE!`|QS>w?4SO?`s^2TRL*A{L%cGi+=*y CQ#i%| literal 0 HcmV?d00001 diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/4.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/4.png new file mode 100644 index 0000000000000000000000000000000000000000..695cc03088eeab56a7bee600787fed85b0640821 GIT binary patch literal 15689 zcmeI3&5zqe6u{kXSzy&xy;0f&Zc0T_>)4L-Wh+U$-E6xnk+R(`>Xr)~+mpoI#5T6K z$*wrGaN>#pRpr1R0OEjLlS16sy*KAe|iw6v8FXuQfMZ{EE3 zW`1wxjeYRjD;F;um^(7ZaomCBrRpmAJ`{eQnkE0A`+WzIuczImt3Jma{3iVDdGFN0 zqa0U4*4lcoUVBM1oOT+Sj*ipawo7^w-I=b7j13&{I&N5YIrZz8U!{1$Mer!SOJkOXmecR*HNV1kywBx9k9Q1=~L!JL&tWV&CvAH?SO= z5B(zD*$m35R2XP*_2$)f2Z3zA$Bs}GyT}#gv?NY4GL3o*3E>7H<#)J){#Y{k1I@i>ugoHa!C`-XK#s zK56!WRUam2#8ar5I(FQ(rkI7A*eqHKafV7{uG)f!QQ&xMj?=2dt8Ar@kY88`S5<*O zdBw6#r{lj^5~0a3-$QS>iUM3AmZ~7-1u3@{u17^v3a6xuCP@h=aZli*=9pG}Ys`nD zNd>a3lRgqXp%1cuOcbD9c}ez7_%RKw?s#n!RID~?V9~W3C2`o8=s8$b+Je(^JTfd? zQA*;Z=80BS$Jh*)^}KChpCrRiB#ERd+PLRXW3;ueXjv7Kl(cD?nyIT;sTXuXmsLej za5gWXtZoX$dOa%@idjR!g_0Oc0y`VIf3%fg|}_-J;i16gn=vhTu#ZAMA!^1R;(^=tye8_PvM6rft>HzK*dDE ztJ4eHKEbd1HVu3>Tdb&@x;A2wh~j=zM^d;Q~PDBEv=J1GEem z074fTE;=8eWw-zky2xR5A0a}I& z0HKQv7o88#GF$)%U1YfEe1MkW0zl{@!$s!Iv=2AxBw8k$Z*m504>7> zfY3#Ti_QmV87=^XE;3wnK0wQG0U&gd;iB^aT80Y%p^H>pbHn$Bu}xkU?vS^FKmS%1 z$Q#AHv9wy_xa|`hck?Zd`*VkU|IBfl636{=jpMZ29QTa#&TIG2lfL?Lb$+e;z5d6} z&Y77Lw{KmaUBB+i1$n_Q$(l>_01; z_hyzqZoPqSes`#K=fShTeW=fze6aWat)(BD&%bc&();f|dAhK7mOJ{{k?q4zTzHj4 P zJ56@g11&w!QxW3pz#o8wgb)%Z4zv;+IB@F)BqYQI0S6>FfrQG~&WAHeMoU`>fyPok z-n@D5&HUcX8~fnvtEZovpF1?iFwFeQa%~O$J{EuWJdD1d{QV9e>tK<^D8u}kM^Eo!@5?!d| z7UF>HMtzlC^a98#`66eEQkgBOc~Mcz1^F0T5X2%csJtk1f~X0qCWvhR%2nskKRvK) zZLM~)9}Y>C+-4N{8qasT-F#QddqI;IRaNDM0$(U_s0SBrxe@4bZg@C#GVoJ_p&2-S z%%P3n30ld}ER%;V*oJNt zB0F)aoxkZtUbyMa2su>G42*J8uMcBS9dElmHFOv)T|x-@NT*tcjV&MYYcTXWfeDu` zp{X36Hv7o2N68uU6l-RV9rm0VX0awUOO`^KAsx+CTMQtGyrAKEt!lc;RtE^##l?74 zmDnR^9M|%?;WIjqn~d^3@&;=lf>mUxazc?4lt#QBB~6x(3I$CNGEUN-n2)+=Iri3s z4@nbBnlR=g(-ZfB_KyW3up=+oz8OE3so7r822s^%gC^vCx2f}^#!S!Qs?rv{mKUI5 z!K$S5)0(GR)jYEkFY5)@gds{sm`M^!RkCqUfaZAXK+$rlC@Fc%u{6t2p=6f~&Jb0J zlb~GWfNWS?*|ue&RF+K%mUKSeuE=OKlGszyIvyiC0n!NL#MkTEiW^1%O<<*#jK@La zfj|_BWm`eZKu|at$bd7-io_|B1Xa<5iXs)0)i7>88d=}&3Em&ovjOJF7 zxe}TtrwTyeM9EOgielTQZ46vz%qLvG5ICr0gI1=`faX65F~!Y9sAVV4?G^?;&c-^t zINmzSZBkr)5QH!;9hKamb_}aA>N>piqy%ZejLUM>jCVG)bbhRLG%VcAnM~l$5TyPy z=CfmTH=#?a45_Q6*K8-DXGdKSz=bB-Gdn3-sn>Bc-2L=@ffyybujSlBB0_NK-qN5N zA}H9F$O&rMY@-O;82}`rk`K3_Oi)ZUVOnttvm5 z*`VRSl)0T%z;wcQmpSZM{2yd4-HGEhaZt)9Yp5RI5oxIYqFMlwx+m)VMB8Z1r2RMI zI@;auC#s@7n+z0d&RE5_ZRtJ5I(ou@)gn4E z6`jYMaf?-_2U{C82i;SI@kt<}Q#P@|6;ln*&N9p>`i5z$GS33ZF_yNXCk^zF!w;Ww zCQi8F`Ex)2jAnE{y<)y-5DW-eq`1g@FfGM}0U?VN7nu*HrMNI4WRc<`^TD(f7Y2kZ zQe0#{n3m$gfRIIsi_8bpQd}4ivPf}}`CwX#3j;zHDK0V}OiOWLK*%D+MdpKPDJ~2M zS){ngd@wD=g#jUp6c?Efrlq(rAY_r^BJ;tt6c+}BEK*!#KA4u`!hn!Pii^w#(^6a* z5VA;dk@;X+iVFim7AY<=A52SeVL-?t#YN_WX(=uY2w9}K$b2v@#f1SOixd}`52mHK zFd$@+;v)0Gv=kQxge($q&5hn0hAw(pxQpHj{tgt2=#665Twbd)%=Xg^^Xh91^T!?Z z`xC=-1cv$fJi}=3G0fxMo3DI%67{uKY733tx5me}zmGqE-ne#f&-wkIKJw0?b9a99 zKe;9DS`=;@dwvjif2i%hKL6-b7Y|-tpI>t7Q~P1_CL_H3Y(vt)4HS=ASvp<&=*0P}e*pO!hE;wquxk&wCe-w9E?~Kt~qWw_s5stIC9rQ5lqmFZH~Kn~h40&KV4azmqA&Lw^gbR9SIIX3AMoh#>N z z*N*qXA*q~eMv-sue5cdNcci=*tns3*>%36l3k44K;KEHe0$t7x52sH0erhnZ0>_UW z&t+r3!1UImaxNDK8XUcOwf#XLH|()P6!|Xjc`+~WAn#lseCLpKVM zojBIcZ+ejzHoXZU2kMD|QBLahLF}>PZMVmU4x_mZgrJ9XtYx^e=|g@QhTeK$!MP1I zmBZs^A32R-az;GGnu%kFU1x$>tVzw1rI2Q*gyw2g0|+87Sn<48C0%7peS~ba8n3D% z`@|{7wY^UGWQoU3hWQ?PgEbJr3bNEWLFEKxC0>uRA*e@$f*}YQCuvX2N8PiX#^yF3 z5^`WDde%p#C+-979~(qqM_#ghGk$E#Xm~*zL=~qE)*$b@YbAcznCUrKRYuioc>x+0 ztVkt(T=Q6~nrE%Y%X-$eV2F|tW|D+bm2BK&U~ROuuV^_Hl$5;f*oJNDP-+xS&J=Zt zlc20}KsIeoYcyn`sL7TDizPnZuE=OOlGszyIvOK80n!NL#MkS_f*VEvO<kf24N$Z-wICGiWHpSM4@cH>-H+aL9Zyx(G*gvTjgvH` zz(GmY(4-}WlSIK%HAw|U*yy{?m~V6aT;QOR4O*E#eVYFy#27c*Ld`pIZZ|RTaW+oE zmquHMxlM|z4}uWJrK6nd*N#CoMqLL-DJek)u;Q{@vErQ#5#W*5;jnNsXG{WjL^<`J zF`pcx(}XUmGNi7OUXz`KUL)#&0M4$VJ+qUdm3kdD!`+YH7l=`^`&!OzBq9VGx0eRV zv@H_=le28S$SJ05a=HpsPEr~o)CAjBbhV%6TTVmKD2V;y`tPM72A)Q@n!sIyc7^ZH ztl#io%G}N>U^?Mj%N%xF{2yd4-HD?$v0uu!*U(b@L}Z})i)sN#>YiBQx3vw|Oxk}n zuA{B>q`$5T=-|cpzh|0NwCIHNo174t=dU_i(s#YN_WX(=uY2w9}K$b2v@#f1SOixd}`52mHKFd$@+ z;v)0Gv=kQxge+2AWImXd;=+KCMT(2e2h&nq7!a~Zagq68T8aw;LKZ15G9OG!abZBn zBE?1KgJ~%)3Vor!L$??281k9Tx33&mg2&I zkVT4%%m>p_To@3tNO6(*U|Na`140%lE;1iXOL1X9$Rfo>=7VV|E({1+q`1g@FfGM} z0U?VN7nu*HrMNI4WRZw#didQibkWDc9rRW3%=LpGp)ZPAYks-TFk6o^%*(GZ%wIRr z`5MEl3k>u7S%xv*XPEoFcV4`59QAbni>g<8fXWlz>=H_qy zXWxpus>0Rpb{9);KW0yzdHCb|t}xNX#?+#s-MhcQ=rjI}OAqK@J$kYF(A-<+UvGZ@ z<|i)m^<8s6-E&}fZtmy#7mi)neC@`<2Os`eJF&56hB@)YzNZgg`|~`C%q+|;);>LU G_QKysfA?ts literal 0 HcmV?d00001 diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/7.png b/runelite-client/src/main/resources/net/runelite/client/plugins/interfacestyles/rs3/cross_sprites/7.png new file mode 100644 index 0000000000000000000000000000000000000000..c17114ae828d3f89b6b216099a54c12ce1abad53 GIT binary patch literal 15684 zcmeI3O^n+_6o9>gqOxi$Zis@wN+~KTj>qv&Vk=3t-E7%KWC`1?x|Kk5Y>yMu#16K% z$?l1^5)wCr09AquTq|+p!T~Da!ig)KsF0B0!T}+{DU9v>IFn?ww3QHOEG71vH}Acf z@69~h2fy9eeE#V2@nw$Vj&7{iw($9p_;>gr{QuPN1Bg!#ch@h49Cz&N__y@_>0^&` zTp7CCJJC-4MZ@wtd1(74%J(~6+#Bo8^t;fyf+F5TP1mdBe*6539Piqd+(oqx>fKe; za@Y3*bbfzx+uFZk>2~f+b-CO(u!9bYAm8t_z0l}aa*1C9U&qa2j!(KoS1P%cI3T}M zZ}6*rfOs{p36><6_@bVdRJ~MCp5qHZ(nO$(k|F@f0J;Gret6`n%lN7s*p9JPJ2wo6 zrAn?9MO{M_d%a%1C+Gd3DN4Goi=ZGD3IgsSgnM2D`+^sqNS%!Q)KF*zZZ~p$kB|LA z)8CCMxm+A*d<^H+>5c<=;gB7sDE47jl=48FXJlJro9=GVPKIV%B5I=!@}dyiNptPG zEkE+ZmcJn6SiLYX&PlyKjy-q0ozC3QVYGG?BN!r`YZ-3ub&b~tddow;{189aS zXMJRPl0NYMv0(%cb9rssH78LNKV5Ad*1RW6J3 zn&(>8d}}ve)+?TcLY#~+lO&v~WaFNN&FR*WqU~03Qu4NI8@8z<*(sWWDe1BxBSjOS zV%kEf2xPB>camj}5OrH_We-dJjo0(ASZk*da0(_i}^XQG~)=6%Y z;@X8lh~m;w$&G5qxEkZGHLssD`m;uyUa z@@SPIb(Qp5>?HJ^s0RbI(!_h_AVn+nI&DU}pT93Kqh$BB-Frwx2(R8-8dL~%$CP!! zv2{~`mSPJ!k`UhEvIbOHl7VWD(tOux&(xTz^ zQG2K6;%AC5z7t5=(1ujZHN3RQFrye6rm4!j3naI(v=zT;;Flb6{FXCwha2C2?&rm1 zM)%Vz;fnLd$RwKTdbp=G!TAas%8qVplN3>N`}E;3wnK7^LxB7o3EhKtUJ&@x;E z5W2{4(fJTshKm3~7a1-(A41D;5kTl7!$s#qXc;a72wh~j=zIt*!$kn0iwqZ?520na z2q1Kk;iB^)vIv+yI za1lW0A{E#2Yj zGj4L+qyD?EeRB@?eRZR@vfcl|{Btlk^T5fQcLsyOkq?f)68{Dt-@L}Xb!%1oaqz_E zXM?cx{o%*1e{$^BQvb;9#*I6N%%flae8~K2Y3<1mm!7@@U+31Yt-q{nee}+$&2QgB d&%6LGb3e5j5B_nXf#Y!8#@c4>)3cYa{|(ic^*I0l literal 0 HcmV?d00001 diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java index d33785c9e7..17a61f3b48 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java @@ -1034,4 +1034,8 @@ public interface RSClient extends RSGameShell, Client @Import("viewportWalking") void setViewportWalking(boolean viewportWalking); + + @Import("crossSprites") + @Override + RSSpritePixels[] getCrossSprites(); }