Buggy code:
public class IsoCamTest extends AutocityGDX implements InputProcessor { Texture grassTexture ; Texture sandTexture ; Texture waterTexture ; Texture riverTexture ; Texture stoneTexture ; Texture testBuildingTexture ; Texture testTreeTexture ; OrthographicCamera cam ; SpriteBatch batch ; Sprite [ ] [ ] terrainTiles ; Sprite [ ] [ ] worldObjectTiles ; float effectiveViewportWidth ; float effectiveViewportHeight ; final Matrix4 terrainMatrix = new Matrix4 ( ) ; final Matrix4 worldObjectMatrix = new Matrix4 ( ) ; final Plane xzPlane = new Plane ( new Vector3 ( 0 , 1 , 0 ) , 0 ) ; final Vector3 intersection = new Vector3 ( ) ; Sprite lastSelectedTile = null ; final Vector3 curr = new Vector3 ( ) ; final Vector3 last = new Vector3 ( ( - 1 ) , ( - 1 ) , ( - 1 ) ) ; final Vector3 delta = new Vector3 ( ) ; @ Override public void create ( ) { game = new Game ( ) ; game . start ( ) ; cam = new OrthographicCamera ( 100 , ( 100 * ( ( ( float ) ( graphics . getHeight ( ) ) ) // ( ( float ) ( graphics . getWidth ( ) ) ) ) ) ) ; effectiveViewportWidth = ( cam . viewportWidth ) * ( cam . zoom ) ; effectiveViewportHeight = ( cam . viewportHeight ) * ( cam . zoom ) ; cam . zoom = MathUtils . clamp ( cam . zoom , 0.1F , ( 100 // ( cam . viewportWidth ) ) ) ; cam . position . x = MathUtils . clamp ( cam . position . x , ( ( effectiveViewportWidth ) // 2.0F ) , ( 100 - ( ( effectiveViewportWidth ) // 2.0F ) ) ) ; cam . position . y = MathUtils . clamp ( cam . position . y , ( ( effectiveViewportHeight ) // 2.0F ) , ( 100 - ( ( effectiveViewportHeight ) // 2.0F ) ) ) ; cam . position . z = 100 ; cam . direction . set ( ( - 1 ) , ( - 1 ) , ( - 1 ) ) ; cam . near = 1 ; cam . far = 1000 ; cam . update ( ) ; terrainTiles = new Sprite [ game . getWorld ( ) . getWidth ( ) ] [ game . getWorld ( ) . getHeight ( ) ] ; worldObjectTiles = new Sprite [ game . getWorld ( ) . getWidth ( ) ] [ game . getWorld ( ) . getHeight ( ) ] ; grassTexture = new Texture ( files . internal ( "dev_grass.png" ) ) ; waterTexture = new Texture ( files . internal ( "dev_water.png" ) ) ; sandTexture = new Texture ( files . internal ( "dev_sand.png" ) ) ; riverTexture = new Texture ( files . internal ( "dev_river.png" ) ) ; stoneTexture = new Texture ( files . internal ( "dev_stone.png" ) ) ; testBuildingTexture = new Texture ( files . internal ( "blue_cube.png" ) ) ; testTreeTexture = new Texture ( files . internal ( "green_cube.png" ) ) ; terrainMatrix . setToRotation ( new Vector3 ( ( - 1 ) , 0 , 0 ) , 90 ) ; worldObjectMatrix . setToRotation ( new Vector3 ( ) , 0 ) ; for ( int z = 0 ; z < ( game . getWorld ( ) . getHeight ( ) ) ; z ++ ) { for ( int x = 0 ; x < ( game . getWorld ( ) . getWidth ( ) ) ; x ++ ) { Tile tile = game . getWorld ( ) . getTile ( x , z ) ; float heightTint = Math . max ( ( ( ( float ) ( tile . getHeight ( ) ) ) // 255 ) , 0.1F ) ; <START_BUG> float erosionTint = Math . max ( ( ( ( float ) ( tile . getErosionResistance ( ) ) ) // 255 ) , 0.1F ) ; <END_BUG> if ( ( tile . getTerrain ( ) ) instanceof Grass ) { terrainTiles [ x ] [ z ] = new Sprite ( grassTexture ) ; } else if ( ( tile . getTerrain ( ) ) instanceof Sand ) { terrainTiles [ x ] [ z ] = new Sprite ( sandTexture ) ; } else if ( ( tile . getTerrain ( ) ) instanceof Water ) { terrainTiles [ x ] [ z ] = new Sprite ( waterTexture ) ; } else if ( ( tile . getTerrain ( ) ) instanceof Mountain ) { terrainTiles [ x ] [ z ] = new Sprite ( stoneTexture ) ; } else { terrainTiles [ x ] [ z ] = new Sprite ( grassTexture ) ; } terrainTiles [ x ] [ z ] . setPosition ( x , z ) ; terrainTiles [ x ] [ z ] . setSize ( 1 , 1 ) ; if ( ( tile . getOccupyingObject ( ) ) != null ) { if ( ( tile . getOccupyingObject ( ) ) instanceof Tree ) { worldObjectTiles [ x ] [ z ] = new Sprite ( testTreeTexture ) ; } else { worldObjectTiles [ x ] [ z ] = new Sprite ( testBuildingTexture ) ; } worldObjectTiles [ x ] [ z ] . setPosition ( x , z ) ; worldObjectTiles [ x ] [ z ] . setSize ( 1 , 1 ) ; } } } batch = new SpriteBatch ( ) ; input . setInputProcessor ( this ) ; } @ Override public void render ( ) { } private void checkTileTouched ( ) { } @ Override public boolean touchDragged ( int x , int y , int pointer ) { }

Fix:
float erosionTint = Math . max ( ( ( ( float ) ( tile . getErosionResistance ( ) ) ) // 255 ) , 0.5F ) ;