update hd minimap

This commit is contained in:
Dennis
2018-12-20 03:07:00 +01:00
committed by Lucwousin
parent e75968ce9f
commit e49964ee1e
2 changed files with 104 additions and 103 deletions

View File

@@ -634,15 +634,15 @@ public abstract class RSSceneMixin implements RSScene
return; return;
} }
RSTileModel TileModel = (RSTileModel) tile; RSTileModel tileModel = (RSTileModel) tile;
final int[] faceX = TileModel.getFaceX(); final int[] faceX = tileModel.getFaceX();
final int[] faceY = TileModel.getFaceY(); final int[] faceY = tileModel.getFaceY();
final int[] faceZ = TileModel.getFaceZ(); final int[] faceZ = tileModel.getFaceZ();
final int[] vertexX = TileModel.getVertexX(); final int[] vertexX = tileModel.getVertexX();
final int[] vertexY = TileModel.getVertexY(); final int[] vertexY = tileModel.getVertexY();
final int[] vertexZ = TileModel.getVertexZ(); final int[] vertexZ = tileModel.getVertexZ();
final int vertexCount = vertexX.length; final int vertexCount = vertexX.length;
final int faceCount = faceX.length; final int faceCount = faceX.length;
@@ -794,25 +794,25 @@ public abstract class RSSceneMixin implements RSScene
@MethodHook(value = "addTile", end = true) @MethodHook(value = "addTile", end = true)
@Inject @Inject
public void rl$addTile(int z, int x, int y, int shape, int rotation, int texture, int heightSw, int heightSe, public void rl$addTile(int z, int x, int y, int shape, int rotation, int texture, int heightSw, int heightNw,
int heightNe, int heightNw, int underlaySwColor, int underlaySeColor, int underlayNeColor, int heightNe, int heightSe, int underlaySwColor, int underlayNwColor, int underlayNeColor,
int underlayNwColor, int overlaySwColor, int overlaySeColor, int overlayNeColor, int underlaySeColor, int overlaySwColor, int overlayNwColor, int overlayNeColor,
int overlayNwColor, int underlayRgb, int overlayRgb) int overlaySeColor, int underlayRgb, int overlayRgb)
{ {
if (shape != 0 && shape != 1) if (shape != 0 && shape != 1)
{ {
Tile tile = getTiles()[z][x][y]; Tile tile = getTiles()[z][x][y];
TileModel TileModel = tile.getTileModel(); TileModel tileModel = tile.getTileModel();
TileModel.setUnderlaySwColor(underlaySwColor); tileModel.setUnderlaySwColor(underlaySwColor);
TileModel.setUnderlaySeColor(underlaySeColor); tileModel.setUnderlayNwColor(underlayNwColor);
TileModel.setUnderlayNeColor(underlayNeColor); tileModel.setUnderlayNeColor(underlayNeColor);
TileModel.setUnderlayNwColor(underlayNwColor); tileModel.setUnderlaySeColor(underlaySeColor);
TileModel.setOverlaySwColor(overlaySwColor); tileModel.setOverlaySwColor(overlaySwColor);
TileModel.setOverlaySeColor(overlaySeColor); tileModel.setOverlayNwColor(overlayNwColor);
TileModel.setOverlayNeColor(overlayNeColor); tileModel.setOverlayNeColor(overlayNeColor);
TileModel.setOverlayNwColor(overlayNwColor); tileModel.setOverlaySeColor(overlaySeColor);
} }
} }
@@ -830,42 +830,42 @@ public abstract class RSSceneMixin implements RSScene
Tile tile = getTiles()[z][x][y]; Tile tile = getTiles()[z][x][y];
if (tile != null) if (tile != null)
{ {
TilePaint TilePaint = tile.getTilePaint(); TilePaint tilePaint = tile.getTilePaint();
if (TilePaint != null) if (tilePaint != null)
{ {
int rgb = TilePaint.getRBG(); int rgb = tilePaint.getRBG();
if (TilePaint.getSwColor() != INVALID_HSL_COLOR) if (tilePaint.getSwColor() != INVALID_HSL_COLOR)
{ {
// hue and saturation // hue and saturation
int hs = TilePaint.getSwColor() & ~0x7f; int hs = tilePaint.getSwColor() & ~0x7F;
int nwLightness = TilePaint.getNwColor() & 0x7f; int seLightness = tilePaint.getSeColor() & 0x7F;
int neLightness = TilePaint.getNeColor() & 0x7f; int neLightness = tilePaint.getNeColor() & 0x7F;
int deltaSwLightness = (TilePaint.getSwColor() & 0x7f) - nwLightness; int southDeltaLightness = (tilePaint.getSwColor() & 0x7F) - seLightness;
int deltaSeLightness = (TilePaint.getSeColor() & 0x7f) - neLightness; int northDeltaLightness = (tilePaint.getNwColor() & 0x7F) - neLightness;
nwLightness <<= 2; seLightness <<= 2;
neLightness <<= 2; neLightness <<= 2;
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
if (TilePaint.getTexture() == -1) if (tilePaint.getTexture() == -1)
{ {
pixels[pixelOffset] = colorPalette[hs | nwLightness >> 2]; pixels[pixelOffset] = colorPalette[hs | seLightness >> 2];
pixels[pixelOffset + 1] = colorPalette[hs | nwLightness * 3 + neLightness >> 4]; pixels[pixelOffset + 1] = colorPalette[hs | seLightness * 3 + neLightness >> 4];
pixels[pixelOffset + 2] = colorPalette[hs | nwLightness + neLightness >> 3]; pixels[pixelOffset + 2] = colorPalette[hs | seLightness + neLightness >> 3];
pixels[pixelOffset + 3] = colorPalette[hs | nwLightness + neLightness * 3 >> 4]; pixels[pixelOffset + 3] = colorPalette[hs | seLightness + neLightness * 3 >> 4];
} }
else else
{ {
int lig = 0xff - ((nwLightness >> 1) * (nwLightness >> 1) >> 8); int lig = 0xFF - ((seLightness >> 1) * (seLightness >> 1) >> 8);
pixels[pixelOffset] = ((rgb & 0xff00ff) * lig & ~0xff00ff) + ((rgb & 0xff00) * lig & 0xff0000) >> 8; pixels[pixelOffset] = ((rgb & 0xFF00FF) * lig & ~0xFF00FF) + ((rgb & 0xFF00) * lig & 0xFF0000) >> 8;
lig = 0xff - ((nwLightness * 3 + neLightness >> 3) * (nwLightness * 3 + neLightness >> 3) >> 8); lig = 0xFF - ((seLightness * 3 + neLightness >> 3) * (seLightness * 3 + neLightness >> 3) >> 8);
pixels[pixelOffset + 1] = ((rgb & 0xff00ff) * lig & ~0xff00ff) + ((rgb & 0xff00) * lig & 0xff0000) >> 8; pixels[pixelOffset + 1] = ((rgb & 0xFF00FF) * lig & ~0xFF00FF) + ((rgb & 0xFF00) * lig & 0xFF0000) >> 8;
lig = 0xff - ((nwLightness + neLightness >> 2) * (nwLightness + neLightness >> 2) >> 8); lig = 0xFF - ((seLightness + neLightness >> 2) * (seLightness + neLightness >> 2) >> 8);
pixels[pixelOffset + 2] = ((rgb & 0xff00ff) * lig & ~0xff00ff) + ((rgb & 0xff00) * lig & 0xff0000) >> 8; pixels[pixelOffset + 2] = ((rgb & 0xFF00FF) * lig & ~0xFF00FF) + ((rgb & 0xFF00) * lig & 0xFF0000) >> 8;
lig = 0xff - ((nwLightness + neLightness * 3 >> 3) * (nwLightness + neLightness * 3 >> 3) >> 8); lig = 0xFF - ((seLightness + neLightness * 3 >> 3) * (seLightness + neLightness * 3 >> 3) >> 8);
pixels[pixelOffset + 3] = ((rgb & 0xff00ff) * lig & ~0xff00ff) + ((rgb & 0xff00) * lig & 0xff0000) >> 8; pixels[pixelOffset + 3] = ((rgb & 0xFF00FF) * lig & ~0xFF00FF) + ((rgb & 0xFF00) * lig & 0xFF0000) >> 8;
} }
nwLightness += deltaSwLightness; seLightness += southDeltaLightness;
neLightness += deltaSeLightness; neLightness += northDeltaLightness;
pixelOffset += width; pixelOffset += width;
} }
@@ -884,115 +884,115 @@ public abstract class RSSceneMixin implements RSScene
} }
else else
{ {
TileModel TileModel = tile.getTileModel(); TileModel tileModel = tile.getTileModel();
if (TileModel != null) if (tileModel != null)
{ {
int shape = TileModel.getShape(); int shape = tileModel.getShape();
int rotation = TileModel.getRotation(); int rotation = tileModel.getRotation();
int overlayRgb = TileModel.getModelOverlay(); int overlayRgb = tileModel.getModelOverlay();
int underlayRgb = TileModel.getModelUnderlay(); int underlayRgb = tileModel.getModelUnderlay();
int[] points = getTileShape2D()[shape]; int[] points = getTileShape2D()[shape];
int[] indices = getTileRotation2D()[rotation]; int[] indices = getTileRotation2D()[rotation];
int shapeOffset = 0; int shapeOffset = 0;
if (TileModel.getOverlaySwColor() != INVALID_HSL_COLOR) if (tileModel.getOverlaySwColor() != INVALID_HSL_COLOR)
{ {
// hue and saturation // hue and saturation
int hs = TileModel.getOverlaySwColor() & ~0x7f; int hs = tileModel.getOverlaySwColor() & ~0x7F;
int nwLightness = TileModel.getOverlayNwColor() & 0x7f; int seLightness = tileModel.getOverlaySeColor() & 0x7F;
int neLightness = TileModel.getOverlayNeColor() & 0x7f; int neLightness = tileModel.getOverlayNeColor() & 0x7F;
int deltaSwLightness = (TileModel.getOverlaySwColor() & 0x7f) - nwLightness; int southDeltaLightness = (tileModel.getOverlaySwColor() & 0x7F) - seLightness;
int deltaSeLightness = (TileModel.getOverlaySeColor() & 0x7f) - neLightness; int northDeltaLightness = (tileModel.getOverlayNwColor() & 0x7F) - neLightness;
nwLightness <<= 2; seLightness <<= 2;
neLightness <<= 2; neLightness <<= 2;
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
if (TileModel.getTriangleTextureId() == null) if (tileModel.getTriangleTextureId() == null)
{ {
if (points[indices[shapeOffset++]] != 0) if (points[indices[shapeOffset++]] != 0)
{ {
pixels[pixelOffset] = colorPalette[hs | (nwLightness >> 2)]; pixels[pixelOffset] = colorPalette[hs | (seLightness >> 2)];
} }
if (points[indices[shapeOffset++]] != 0) if (points[indices[shapeOffset++]] != 0)
{ {
pixels[pixelOffset + 1] = colorPalette[hs | (nwLightness * 3 + neLightness >> 4)]; pixels[pixelOffset + 1] = colorPalette[hs | (seLightness * 3 + neLightness >> 4)];
} }
if (points[indices[shapeOffset++]] != 0) if (points[indices[shapeOffset++]] != 0)
{ {
pixels[pixelOffset + 2] = colorPalette[hs | (nwLightness + neLightness >> 3)]; pixels[pixelOffset + 2] = colorPalette[hs | (seLightness + neLightness >> 3)];
} }
if (points[indices[shapeOffset++]] != 0) if (points[indices[shapeOffset++]] != 0)
{ {
pixels[pixelOffset + 3] = colorPalette[hs | (nwLightness + neLightness * 3 >> 4)]; pixels[pixelOffset + 3] = colorPalette[hs | (seLightness + neLightness * 3 >> 4)];
} }
} }
else else
{ {
if (points[indices[shapeOffset++]] != 0) if (points[indices[shapeOffset++]] != 0)
{ {
int lig = 0xff - ((nwLightness >> 1) * (nwLightness >> 1) >> 8); int lig = 0xFF - ((seLightness >> 1) * (seLightness >> 1) >> 8);
pixels[pixelOffset] = ((overlayRgb & 0xff00ff) * lig & ~0xff00ff) + pixels[pixelOffset] = ((overlayRgb & 0xFF00FF) * lig & ~0xFF00FF) +
((overlayRgb & 0xff00) * lig & 0xff0000) >> 8; ((overlayRgb & 0xFF00) * lig & 0xFF0000) >> 8;
} }
if (points[indices[shapeOffset++]] != 0) if (points[indices[shapeOffset++]] != 0)
{ {
int lig = 0xff - ((nwLightness * 3 + neLightness >> 3) * int lig = 0xFF - ((seLightness * 3 + neLightness >> 3) *
(nwLightness * 3 + neLightness >> 3) >> 8); (seLightness * 3 + neLightness >> 3) >> 8);
pixels[pixelOffset + 1] = ((overlayRgb & 0xff00ff) * lig & ~0xff00ff) + pixels[pixelOffset + 1] = ((overlayRgb & 0xFF00FF) * lig & ~0xFF00FF) +
((overlayRgb & 0xff00) * lig & 0xff0000) >> 8; ((overlayRgb & 0xFF00) * lig & 0xFF0000) >> 8;
} }
if (points[indices[shapeOffset++]] != 0) if (points[indices[shapeOffset++]] != 0)
{ {
int lig = 0xff - ((nwLightness + neLightness >> 2) * int lig = 0xFF - ((seLightness + neLightness >> 2) *
(nwLightness + neLightness >> 2) >> 8); (seLightness + neLightness >> 2) >> 8);
pixels[pixelOffset + 2] = ((overlayRgb & 0xff00ff) * lig & ~0xff00ff) + pixels[pixelOffset + 2] = ((overlayRgb & 0xFF00FF) * lig & ~0xFF00FF) +
((overlayRgb & 0xff00) * lig & 0xff0000) >> 8; ((overlayRgb & 0xFF00) * lig & 0xFF0000) >> 8;
} }
if (points[indices[shapeOffset++]] != 0) if (points[indices[shapeOffset++]] != 0)
{ {
int lig = 0xff - ((nwLightness + neLightness * 3 >> 3) * int lig = 0xFF - ((seLightness + neLightness * 3 >> 3) *
(nwLightness + neLightness * 3 >> 3) >> 8); (seLightness + neLightness * 3 >> 3) >> 8);
pixels[pixelOffset + 3] = ((overlayRgb & 0xff00ff) * lig & ~0xff00ff) + pixels[pixelOffset + 3] = ((overlayRgb & 0xFF00FF) * lig & ~0xFF00FF) +
((overlayRgb & 0xff00) * lig & 0xff0000) >> 8; ((overlayRgb & 0xFF00) * lig & 0xFF0000) >> 8;
} }
} }
nwLightness += deltaSwLightness; seLightness += southDeltaLightness;
neLightness += deltaSeLightness; neLightness += northDeltaLightness;
pixelOffset += width; pixelOffset += width;
} }
if (underlayRgb != 0 && TileModel.getUnderlaySwColor() != INVALID_HSL_COLOR) if (underlayRgb != 0 && tileModel.getUnderlaySwColor() != INVALID_HSL_COLOR)
{ {
pixelOffset -= width << 2; pixelOffset -= width << 2;
shapeOffset -= 16; shapeOffset -= 16;
hs = TileModel.getUnderlaySwColor() & ~0x7f; hs = tileModel.getUnderlaySwColor() & ~0x7F;
nwLightness = TileModel.getUnderlayNwColor() & 0x7f; seLightness = tileModel.getUnderlaySeColor() & 0x7F;
neLightness = TileModel.getUnderlayNeColor() & 0x7f; neLightness = tileModel.getUnderlayNeColor() & 0x7F;
deltaSwLightness = (TileModel.getUnderlaySwColor() & 0x7f) - nwLightness; southDeltaLightness = (tileModel.getUnderlaySwColor() & 0x7F) - seLightness;
deltaSeLightness = (TileModel.getUnderlaySeColor() & 0x7f) - neLightness; northDeltaLightness = (tileModel.getUnderlayNwColor() & 0x7F) - neLightness;
nwLightness <<= 2; seLightness <<= 2;
neLightness <<= 2; neLightness <<= 2;
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
if (points[indices[shapeOffset++]] == 0) if (points[indices[shapeOffset++]] == 0)
{ {
pixels[pixelOffset] = colorPalette[hs | (nwLightness >> 2)]; pixels[pixelOffset] = colorPalette[hs | (seLightness >> 2)];
} }
if (points[indices[shapeOffset++]] == 0) if (points[indices[shapeOffset++]] == 0)
{ {
pixels[pixelOffset + 1] = colorPalette[hs | (nwLightness * 3 + neLightness >> 4)]; pixels[pixelOffset + 1] = colorPalette[hs | (seLightness * 3 + neLightness >> 4)];
} }
if (points[indices[shapeOffset++]] == 0) if (points[indices[shapeOffset++]] == 0)
{ {
pixels[pixelOffset + 2] = colorPalette[hs | (nwLightness + neLightness >> 3)]; pixels[pixelOffset + 2] = colorPalette[hs | (seLightness + neLightness >> 3)];
} }
if (points[indices[shapeOffset++]] == 0) if (points[indices[shapeOffset++]] == 0)
{ {
pixels[pixelOffset + 3] = colorPalette[hs | (nwLightness + neLightness * 3 >> 4)]; pixels[pixelOffset + 3] = colorPalette[hs | (seLightness + neLightness * 3 >> 4)];
} }
nwLightness += deltaSwLightness; seLightness += southDeltaLightness;
neLightness += deltaSeLightness; neLightness += northDeltaLightness;
pixelOffset += width; pixelOffset += width;
} }

View File

@@ -145,16 +145,16 @@ public abstract class RSSpriteMixin implements RSSprite
} }
@Copy("drawRotatedMaskedCenteredAround") @Copy("drawRotatedMaskedCenteredAround")
abstract void rs$drawAsCircleAt(int x, int y, int width, int height, int xOffset, int yOffset, abstract void rs$drawAlphaMapped(int x, int y, int width, int height, int xOffset, int yOffset,
int rotation, int zoom, int[] xOffsets, int[] yOffsets); int rotation, int zoom, int[] xOffsets, int[] yOffsets);
@Replace("drawRotatedMaskedCenteredAround") @Replace("drawRotatedMaskedCenteredAround")
public void rl$drawAsCircleAt(int x, int y, int width, int height, int xOffset, int yOffset, int rotation, public void rl$drawAlphaMapped(int x, int y, int width, int height, int xOffset, int yOffset, int rotation,
int zoom, int[] xOffsets, int[] yOffsets) int zoom, int[] xOffsets, int[] yOffsets)
{ {
if (!hdMinimapEnabled) if (!hdMinimapEnabled)
{ {
rs$drawAsCircleAt(x, y, width, height, xOffset, yOffset, rotation, zoom, xOffsets, yOffsets); rs$drawAlphaMapped(x, y, width, height, xOffset, yOffset, rotation, zoom, xOffsets, yOffsets);
return; return;
} }
try try
@@ -184,6 +184,7 @@ public abstract class RSSpriteMixin implements RSSprite
for (x = -yOffsets[y]; x < 0; ++x) for (x = -yOffsets[y]; x < 0; ++x)
{ {
// bilinear interpolation // bilinear interpolation
// Thanks to Bubletan
int x1 = spriteX >> 16; int x1 = spriteX >> 16;
int y1 = spriteY >> 16; int y1 = spriteY >> 16;
int x2 = x1 + 1; int x2 = x1 + 1;
@@ -200,13 +201,13 @@ public abstract class RSSpriteMixin implements RSSprite
int a2 = u1 * v2; int a2 = u1 * v2;
int a3 = u2 * v1; int a3 = u2 * v1;
int a4 = u1 * v1; int a4 = u1 * v1;
int r = (c1 >> 16 & 0xff) * a1 + (c2 >> 16 & 0xff) * a2 + int r = (c1 >> 16 & 0xFF) * a1 + (c2 >> 16 & 0xFF) * a2 +
(c3 >> 16 & 0xff) * a3 + (c4 >> 16 & 0xff) * a4 & 0xff0000; (c3 >> 16 & 0xFF) * a3 + (c4 >> 16 & 0xFF) * a4 & 0xFF0000;
int g = (c1 >> 8 & 0xff) * a1 + (c2 >> 8 & 0xff) * a2 + int g = (c1 >> 8 & 0xFF) * a1 + (c2 >> 8 & 0xFF) * a2 +
(c3 >> 8 & 0xff) * a3 + (c4 >> 8 & 0xff) * a4 >> 8 & 0xff00; (c3 >> 8 & 0xFF) * a3 + (c4 >> 8 & 0xFF) * a4 >> 8 & 0xFF00;
int b = (c1 & 0xff) * a1 + (c2 & 0xff) * a2 + int b = (c1 & 0xFF) * a1 + (c2 & 0xFF) * a2 +
(c3 & 0xff) * a3 + (c4 & 0xff) * a4 >> 16; (c3 & 0xFF) * a3 + (c4 & 0xFF) * a4 >> 16;
graphicsPixels[graphicsPixelIndex++] = r | g | b; // XXX: Might need "| 0xFF000000" graphicsPixels[graphicsPixelIndex++] = r | g | b;
spriteX += rotCos; spriteX += rotCos;
spriteY -= rotSin; spriteY -= rotSin;
} }