From 0acde2bd0654f475c766734c41482699a78803e7 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 14 May 2018 18:22:23 -0400 Subject: [PATCH] runelite-mixins: wrap drawTileUnderlay in try/catch The rasterizer crashes on certain tiles ingame with specific camera angles. java.lang.ArrayIndexOutOfBoundsException: -1 at Graphics3D.rasterGouraudLine(Graphics3D.java:797) at Graphics3D.rasterGouraud(Graphics3D.java:680) at Region.drawTileUnderlay(Region.java:1853) at Region.draw(Region.java:1376) at Region.drawRegion(Region.java:1187) at class35.method682(class35.java:808) at WorldMapType3.gameDraw(WorldMapType3.java:448) at class218.method4359(class218.java:1069) at Client.method1268(Client.java:3922) at Client.methodDraw(Client.java:2239) at GameEngine.method914(GameEngine.java:605) at GameEngine.run(GameEngine.java:1027) at java.lang.Thread.run(Thread.java:748) --- .../net/runelite/mixins/RSRegionMixin.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSRegionMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSRegionMixin.java index e29dcb2b36..27a0bb3647 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSRegionMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSRegionMixin.java @@ -25,11 +25,13 @@ package net.runelite.mixins; import net.runelite.api.Renderable; +import net.runelite.api.SceneTilePaint; import net.runelite.api.Tile; import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Replace; +import static net.runelite.client.callback.Hooks.log; import net.runelite.rs.api.RSDecorativeObject; import net.runelite.rs.api.RSGroundObject; import net.runelite.rs.api.RSItemLayer; @@ -130,4 +132,20 @@ public abstract class RSRegionMixin implements RSRegion } } } + + @Copy("drawTileUnderlay") + abstract public void rs$drawTileUnderlay(SceneTilePaint tile, int z, int pitchSin, int pitchCos, int yawSin, int yawCos, int x, int y); + + @Replace("drawTileUnderlay") + public void rl$drawTileUnderlay(SceneTilePaint tile, int z, int pitchSin, int pitchCos, int yawSin, int yawCos, int x, int y) + { + try + { + rs$drawTileUnderlay(tile, z, pitchSin, pitchCos, yawSin, yawCos, x, y); + } + catch (Exception ex) + { + log.warn("error during tile underlay rendering", ex); + } + } }