Index: src/table/build_industry.h =================================================================== --- src/table/build_industry.h (revision 27136) +++ src/table/build_industry.h (working copy) @@ -254,7 +254,6 @@ MK(1, 0, 26), MK(1, 1, 27), MK(1, 2, 28), - MK(-4, -5, 255), MK(-4, -4, 255), MK(-4, -3, 255), MK(-4, -2, 255), @@ -265,9 +264,10 @@ MK(-4, 3, 255), MK(-4, 4, 255), MK(-4, 5, 255), - MK(-3, 5, 255), - MK(-2, 5, 255), - MK(-1, 5, 255), + MK(-4, 6, 255), + MK(-3, 6, 255), + MK(-2, 6, 255), + MK(-1, 6, 255), MK(0, 6, 255), MK(1, 6, 255), MK(2, 6, 255), @@ -289,9 +289,9 @@ MK(2, -4, 255), MK(1, -4, 255), MK(0, -4, 255), - MK(-1, -5, 255), - MK(-2, -5, 255), - MK(-3, -5, 255), + MK(-1, -4, 255), + MK(-2, -4, 255), + MK(-3, -4, 255), MK(2, 0, 255), MKEND }; Index: src/newgrf.cpp =================================================================== --- src/newgrf.cpp (revision 27136) +++ src/newgrf.cpp (working copy) @@ -3471,6 +3471,15 @@ } else if (itt[k].gfx == 0xFF) { itt[k].ti.x = (int8)GB(itt[k].ti.x, 0, 8); itt[k].ti.y = (int8)GB(itt[k].ti.y, 0, 8); + + /* When there were only 256x256 maps, TileIndex was a uint16 and + * itt[k].ti was just a TileIndexDiff that was added to it. + * As such negative "x" values were shifted into the "y" position. + * x = -1, y = 1 -> x = 255, y = 0 + * Since GRF version 8 the position is interpreted as pair of independent int8. + * For GRF version < 8 we need to emulate the old shifting behaviour. + */ + if (_cur.grffile->grf_version < 8 && itt[k].ti.x < 0) itt[k].ti.y += 1; } }