summaryrefslogtreecommitdiff
path: root/table/autorail.h
diff options
context:
space:
mode:
authordominik <dominik@openttd.org>2005-01-19 20:55:23 +0000
committerdominik <dominik@openttd.org>2005-01-19 20:55:23 +0000
commitaaf09ceb268cc79fde648ab0bba8026c5277d77e (patch)
tree4721eddc93c76f7d2ab9c04a82bbb528732eeda1 /table/autorail.h
parent28df4a0e25d3f66dad54cee776a2b39821c686f0 (diff)
downloadopenttd-aaf09ceb268cc79fde648ab0bba8026c5277d77e.tar.xz
(svn r1571) Feature: Visually enhanced autorail placing
When using the autorail tool, the rail pieces which are going to be build are highlighted. If a piece is shown in red, this indicates that the slope/rail combination is impossible. It does not tell you if the rail line construction might not be possible because of other obstacles, e.g. houses or water.
Diffstat (limited to 'table/autorail.h')
-rw-r--r--table/autorail.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/table/autorail.h b/table/autorail.h
new file mode 100644
index 000000000..f219f1c7d
--- /dev/null
+++ b/table/autorail.h
@@ -0,0 +1,70 @@
+/* Rail selection types (directions):
+ / \ / \ / \ / \ / \ / \
+/ /\ /\ \ /===\ / \ /| \ / |\
+\/ / \ \/ \ / \===/ \| / \ |/
+ \ / \ / \ / \ / \ / \ /
+ 0 1 2 3 4 5
+*/
+
+// mark invalid tiles red
+#define RED(c) c | PALETTE_SEL_TILE_RED
+
+// table maps each of the six rail directions and tileh combinations to a sprite
+// invalid entries are required to make sure that this array can be quickly accessed
+const int AutorailTilehSprite[31][6] = {
+// type 0 1 2 3 4 5
+ { 0, 8, 16, 25, 34, 42 }, // tileh = 0
+ { 5, 13, RED(22), RED(31), 35, 42 }, // tileh = 1
+ { 5, 10, 16, 26, RED(38), RED(46) }, // tileh = 2
+ { 5, 9, RED(23), 26, 35, RED(46) }, // tileh = 3
+ { 2, 10, RED(19), RED(28), 34, 43 }, // tileh = 4
+ { 1, 9, 17, 26, 35, 43 }, // tileh = 5
+ { 1, 10, RED(20), 26, RED(38), 43 }, // tileh = 6
+ { 1, 9, 17, 26, 35, 43 }, // tileh = 7
+ { 2, 13, 17, 25, RED(40), RED(48) }, // tileh = 8
+ { 1, 13, 17, RED(32), 35, RED(48) }, // tileh = 9
+ { 2, 9, 17, 26, 35, 43 }, // tileh = 10
+ { 1, 9, 17, 26, 35, 43 }, // tileh = 11
+ { 2, 9, 17, RED(29), RED(40), 43 }, // tileh = 12
+ { 1, 9, 17, 26, 35, 43 }, // tileh = 13
+ { 1, 9, 17, 26, 35, 43 }, // tileh = 14
+ { 0, 1, 2, 3, 4, 5 }, // invalid (15)
+ { 0, 1, 2, 3, 4, 5 }, // invalid (16)
+ { 0, 1, 2, 3, 4, 5 }, // invalid (17)
+ { 0, 1, 2, 3, 4, 5 }, // invalid (18)
+ { 0, 1, 2, 3, 4, 5 }, // invalid (19)
+ { 0, 1, 2, 3, 4, 5 }, // invalid (20)
+ { 0, 1, 2, 3, 4, 5 }, // invalid (21)
+ { 0, 1, 2, 3, 4, 5 }, // invalid (22)
+ { RED(6), RED(11), RED(17), RED(27), RED(39), RED(47) }, // tileh = 23
+ { 0, 1, 2, 3, 4, 5 }, // invalid (24)
+ { 0, 1, 2, 3, 4, 5 }, // invalid (25)
+ { 0, 1, 2, 3, 4, 5 }, // invalid (26)
+ { RED(7), RED(15), RED(24), RED(33), RED(36), RED(44) }, // tileh = 27
+ { 0, 1, 2, 3, 4, 5 }, // invalid (28)
+ { RED(3), RED(14), RED(18), RED(26), RED(41), RED(49) }, // tileh = 29
+ { RED(4), RED(12), RED(21), RED(30), RED(37), RED(45) }, // tileh = 30
+};
+#undef RED
+
+
+// maps each pixel of a tile (16x16) to a selection type
+// (0,0) is the top corner, (16,16) the bottom corner
+const int AutorailPiece[16][16] = {
+ { 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5 },
+ { 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5 },
+ { 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5 },
+ { 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5 },
+ { 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5 },
+ { 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5 },
+ { 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1 },
+ { 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1 },
+ { 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1 },
+ { 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1 },
+ { 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3 },
+ { 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3 },
+ { 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3 },
+ { 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3 },
+ { 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3 },
+ { 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3 }
+};