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;
}
}