From ddc509441eb57773b4df0c9b7b81d25430e889e9 Mon Sep 17 00:00:00 2001
From: Marko Lindqvist <cazfi74@gmail.com>
Date: Thu, 12 Jun 2025 10:24:05 +0300
Subject: [PATCH 99/99] Support animated "River" extras

See RM #1520

Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
---
 client/tilespec.c             |  16 +--
 data/alio/riversbrown.spec    | 142 +++++++++----------
 data/alio/riversgreen.spec    | 142 +++++++++----------
 data/amplio/water.spec        |  40 +++---
 data/amplio2/water.spec       |  40 +++---
 data/hex2t/overlays.spec      | 162 ++++++++++-----------
 data/hexemplio/rivers.spec    | 188 ++++++++++++-------------
 data/hexemplio/terrain.spec   | 256 +++++++++++++++++-----------------
 data/isophex/rivers.spec      | 128 ++++++++---------
 data/isophex/terrain2.spec    |  12 +-
 data/isotrident/terrain2.spec |  46 +++---
 data/trident/tiles.spec       |  40 +++---
 12 files changed, 606 insertions(+), 606 deletions(-)

diff --git a/client/tilespec.c b/client/tilespec.c
index 85de2c9402..31ca01002e 100644
--- a/client/tilespec.c
+++ b/client/tilespec.c
@@ -221,7 +221,7 @@ struct city_sprite {
 };
 
 struct river_sprites {
-  struct sprite
+  struct anim
     *spec[MAX_INDEX_CARDINAL],
     *outlet[MAX_INDEX_CARDINAL];
 };
@@ -3777,8 +3777,8 @@ static bool load_river_sprites(struct tileset *t,
   for (i = 0; i < t->num_index_cardinal; i++) {
     fc_snprintf(buffer, sizeof(buffer), "%s_s_%s",
                 tag_pfx, cardinal_index_str(t, i));
-    store->spec[i] = load_sprite(t, buffer, TRUE, TRUE, FALSE);
-    if (store->spec[i] == NULL) {
+    store->spec[i] = anim_load(t, buffer, 0);
+    if (store->spec[i] == nullptr) {
       return FALSE;
     }
   }
@@ -3786,8 +3786,8 @@ static bool load_river_sprites(struct tileset *t,
   for (i = 0; i < t->num_cardinal_tileset_dirs; i++) {
     fc_snprintf(buffer, sizeof(buffer), "%s_outlet_%s",
                 tag_pfx, dir_get_tileset_name(t->cardinal_tileset_dirs[i]));
-    store->outlet[i] = load_sprite(t, buffer, TRUE, TRUE, FALSE);
-    if (store->outlet[i] == NULL) {
+    store->outlet[i] = anim_load(t, buffer, 0);
+    if (store->outlet[i] == nullptr) {
       log_error("Missing \"%s\" for \"%s\".", buffer, tag_pfx);
       return FALSE;
     }
@@ -6139,7 +6139,7 @@ int fill_sprite_array(struct tileset *t,
               int idx = extra_index(priver);
 
               if (BV_ISSET(textras_near[didx], idx)) {
-                ADD_SPRITE_SIMPLE(t->sprites.extras[idx].u.road.ru.rivers.outlet[dir]);
+                ADD_ANIM_SPRITE_SIMPLE(t->sprites.extras[idx].u.road.ru.rivers.outlet[dir]);
               }
             }
           } extra_type_list_iterate_end;
@@ -6177,7 +6177,7 @@ int fill_sprite_array(struct tileset *t,
                 }
               }
 
-              ADD_SPRITE_SIMPLE(t->sprites.extras[idx].u.road.ru.rivers.spec[tileno]);
+              ADD_ANIM_SPRITE_SIMPLE(t->sprites.extras[idx].u.road.ru.rivers.spec[tileno]);
             }
           }
         } extra_type_list_iterate_end;
@@ -7502,7 +7502,7 @@ int fill_basic_road_sprite_array(const struct tileset *t,
   extrastyle = t->sprites.extras[idx].extrastyle;
 
   if (extrastyle == ESTYLE_RIVER) {
-    ADD_SPRITE_SIMPLE(t->sprites.extras[idx].u.road.ru.rivers.spec[0]);
+    ADD_FRAME0_SIMPLE(t->sprites.extras[idx].u.road.ru.rivers.spec[0]);
   } else {
     for (i = 0; i < t->num_valid_tileset_dirs; i++) {
       if (!t->valid_tileset_dirs[i]) {
diff --git a/data/alio/riversbrown.spec b/data/alio/riversbrown.spec
index 8313e3e2e4..3c08a97234 100644
--- a/data/alio/riversbrown.spec
+++ b/data/alio/riversbrown.spec
@@ -26,81 +26,81 @@ tiles = { "row", "column","tag"
 ; Rivers (as special type), and whether north, south, east, west
 ; also has river or is ocean:
 
- 0,  0, "road.brown_river_s_n0e0se0s0w0nw0"
- 0,  1, "road.brown_river_s_n1e0se0s0w0nw0"
- 0,  2, "road.brown_river_s_n0e1se0s0w0nw0"
- 0,  3, "road.brown_river_s_n1e1se0s0w0nw0"
- 0,  4, "road.brown_river_s_n0e0se0s1w0nw0"
- 0,  5, "road.brown_river_s_n1e0se0s1w0nw0"
- 0,  6, "road.brown_river_s_n0e1se0s1w0nw0"
- 0,  7, "road.brown_river_s_n1e1se0s1w0nw0"
- 1,  0, "road.brown_river_s_n0e0se0s0w1nw0"
- 1,  1, "road.brown_river_s_n1e0se0s0w1nw0"
- 1,  2, "road.brown_river_s_n0e1se0s0w1nw0"
- 1,  3, "road.brown_river_s_n1e1se0s0w1nw0"
- 1,  4, "road.brown_river_s_n0e0se0s1w1nw0"
- 1,  5, "road.brown_river_s_n1e0se0s1w1nw0"
- 1,  6, "road.brown_river_s_n0e1se0s1w1nw0"
- 1,  7, "road.brown_river_s_n1e1se0s1w1nw0"
+ 0,  0, "road.brown_river_s_n0e0se0s0w0nw0:0"
+ 0,  1, "road.brown_river_s_n1e0se0s0w0nw0:0"
+ 0,  2, "road.brown_river_s_n0e1se0s0w0nw0:0"
+ 0,  3, "road.brown_river_s_n1e1se0s0w0nw0:0"
+ 0,  4, "road.brown_river_s_n0e0se0s1w0nw0:0"
+ 0,  5, "road.brown_river_s_n1e0se0s1w0nw0:0"
+ 0,  6, "road.brown_river_s_n0e1se0s1w0nw0:0"
+ 0,  7, "road.brown_river_s_n1e1se0s1w0nw0:0"
+ 1,  0, "road.brown_river_s_n0e0se0s0w1nw0:0"
+ 1,  1, "road.brown_river_s_n1e0se0s0w1nw0:0"
+ 1,  2, "road.brown_river_s_n0e1se0s0w1nw0:0"
+ 1,  3, "road.brown_river_s_n1e1se0s0w1nw0:0"
+ 1,  4, "road.brown_river_s_n0e0se0s1w1nw0:0"
+ 1,  5, "road.brown_river_s_n1e0se0s1w1nw0:0"
+ 1,  6, "road.brown_river_s_n0e1se0s1w1nw0:0"
+ 1,  7, "road.brown_river_s_n1e1se0s1w1nw0:0"
 
- 2,  0, "road.brown_river_s_n0e0se1s0w0nw0"
- 2,  1, "road.brown_river_s_n1e0se1s0w0nw0"
- 2,  2, "road.brown_river_s_n0e1se1s0w0nw0"
- 2,  3, "road.brown_river_s_n1e1se1s0w0nw0"
- 2,  4, "road.brown_river_s_n0e0se1s1w0nw0"
- 2,  5, "road.brown_river_s_n1e0se1s1w0nw0"
- 2,  6, "road.brown_river_s_n0e1se1s1w0nw0"
- 2,  7, "road.brown_river_s_n1e1se1s1w0nw0"
- 3,  0, "road.brown_river_s_n0e0se1s0w1nw0"
- 3,  1, "road.brown_river_s_n1e0se1s0w1nw0"
- 3,  2, "road.brown_river_s_n0e1se1s0w1nw0"
- 3,  3, "road.brown_river_s_n1e1se1s0w1nw0"
- 3,  4, "road.brown_river_s_n0e0se1s1w1nw0"
- 3,  5, "road.brown_river_s_n1e0se1s1w1nw0"
- 3,  6, "road.brown_river_s_n0e1se1s1w1nw0"
- 3,  7, "road.brown_river_s_n1e1se1s1w1nw0"
+ 2,  0, "road.brown_river_s_n0e0se1s0w0nw0:0"
+ 2,  1, "road.brown_river_s_n1e0se1s0w0nw0:0"
+ 2,  2, "road.brown_river_s_n0e1se1s0w0nw0:0"
+ 2,  3, "road.brown_river_s_n1e1se1s0w0nw0:0"
+ 2,  4, "road.brown_river_s_n0e0se1s1w0nw0:0"
+ 2,  5, "road.brown_river_s_n1e0se1s1w0nw0:0"
+ 2,  6, "road.brown_river_s_n0e1se1s1w0nw0:0"
+ 2,  7, "road.brown_river_s_n1e1se1s1w0nw0:0"
+ 3,  0, "road.brown_river_s_n0e0se1s0w1nw0:0"
+ 3,  1, "road.brown_river_s_n1e0se1s0w1nw0:0"
+ 3,  2, "road.brown_river_s_n0e1se1s0w1nw0:0"
+ 3,  3, "road.brown_river_s_n1e1se1s0w1nw0:0"
+ 3,  4, "road.brown_river_s_n0e0se1s1w1nw0:0"
+ 3,  5, "road.brown_river_s_n1e0se1s1w1nw0:0"
+ 3,  6, "road.brown_river_s_n0e1se1s1w1nw0:0"
+ 3,  7, "road.brown_river_s_n1e1se1s1w1nw0:0"
 
- 4,  0, "road.brown_river_s_n0e0se0s0w0nw1"
- 4,  1, "road.brown_river_s_n1e0se0s0w0nw1"
- 4,  2, "road.brown_river_s_n0e1se0s0w0nw1"
- 4,  3, "road.brown_river_s_n1e1se0s0w0nw1"
- 4,  4, "road.brown_river_s_n0e0se0s1w0nw1"
- 4,  5, "road.brown_river_s_n1e0se0s1w0nw1"
- 4,  6, "road.brown_river_s_n0e1se0s1w0nw1"
- 4,  7, "road.brown_river_s_n1e1se0s1w0nw1"
- 5,  0, "road.brown_river_s_n0e0se0s0w1nw1"
- 5,  1, "road.brown_river_s_n1e0se0s0w1nw1"
- 5,  2, "road.brown_river_s_n0e1se0s0w1nw1"
- 5,  3, "road.brown_river_s_n1e1se0s0w1nw1"
- 5,  4, "road.brown_river_s_n0e0se0s1w1nw1"
- 5,  5, "road.brown_river_s_n1e0se0s1w1nw1"
- 5,  6, "road.brown_river_s_n0e1se0s1w1nw1"
- 5,  7, "road.brown_river_s_n1e1se0s1w1nw1"
+ 4,  0, "road.brown_river_s_n0e0se0s0w0nw1:0"
+ 4,  1, "road.brown_river_s_n1e0se0s0w0nw1:0"
+ 4,  2, "road.brown_river_s_n0e1se0s0w0nw1:0"
+ 4,  3, "road.brown_river_s_n1e1se0s0w0nw1:0"
+ 4,  4, "road.brown_river_s_n0e0se0s1w0nw1:0"
+ 4,  5, "road.brown_river_s_n1e0se0s1w0nw1:0"
+ 4,  6, "road.brown_river_s_n0e1se0s1w0nw1:0"
+ 4,  7, "road.brown_river_s_n1e1se0s1w0nw1:0"
+ 5,  0, "road.brown_river_s_n0e0se0s0w1nw1:0"
+ 5,  1, "road.brown_river_s_n1e0se0s0w1nw1:0"
+ 5,  2, "road.brown_river_s_n0e1se0s0w1nw1:0"
+ 5,  3, "road.brown_river_s_n1e1se0s0w1nw1:0"
+ 5,  4, "road.brown_river_s_n0e0se0s1w1nw1:0"
+ 5,  5, "road.brown_river_s_n1e0se0s1w1nw1:0"
+ 5,  6, "road.brown_river_s_n0e1se0s1w1nw1:0"
+ 5,  7, "road.brown_river_s_n1e1se0s1w1nw1:0"
 
- 6,  0, "road.brown_river_s_n0e0se1s0w0nw1"
- 6,  1, "road.brown_river_s_n1e0se1s0w0nw1"
- 6,  2, "road.brown_river_s_n0e1se1s0w0nw1"
- 6,  3, "road.brown_river_s_n1e1se1s0w0nw1"
- 6,  4, "road.brown_river_s_n0e0se1s1w0nw1"
- 6,  5, "road.brown_river_s_n1e0se1s1w0nw1"
- 6,  6, "road.brown_river_s_n0e1se1s1w0nw1"
- 6,  7, "road.brown_river_s_n1e1se1s1w0nw1"
- 7,  0, "road.brown_river_s_n0e0se1s0w1nw1"
- 7,  1, "road.brown_river_s_n1e0se1s0w1nw1"
- 7,  2, "road.brown_river_s_n0e1se1s0w1nw1"
- 7,  3, "road.brown_river_s_n1e1se1s0w1nw1"
- 7,  4, "road.brown_river_s_n0e0se1s1w1nw1"
- 7,  5, "road.brown_river_s_n1e0se1s1w1nw1"
- 7,  6, "road.brown_river_s_n0e1se1s1w1nw1"
- 7,  7, "road.brown_river_s_n1e1se1s1w1nw1"
+ 6,  0, "road.brown_river_s_n0e0se1s0w0nw1:0"
+ 6,  1, "road.brown_river_s_n1e0se1s0w0nw1:0"
+ 6,  2, "road.brown_river_s_n0e1se1s0w0nw1:0"
+ 6,  3, "road.brown_river_s_n1e1se1s0w0nw1:0"
+ 6,  4, "road.brown_river_s_n0e0se1s1w0nw1:0"
+ 6,  5, "road.brown_river_s_n1e0se1s1w0nw1:0"
+ 6,  6, "road.brown_river_s_n0e1se1s1w0nw1:0"
+ 6,  7, "road.brown_river_s_n1e1se1s1w0nw1:0"
+ 7,  0, "road.brown_river_s_n0e0se1s0w1nw1:0"
+ 7,  1, "road.brown_river_s_n1e0se1s0w1nw1:0"
+ 7,  2, "road.brown_river_s_n0e1se1s0w1nw1:0"
+ 7,  3, "road.brown_river_s_n1e1se1s0w1nw1:0"
+ 7,  4, "road.brown_river_s_n0e0se1s1w1nw1:0"
+ 7,  5, "road.brown_river_s_n1e0se1s1w1nw1:0"
+ 7,  6, "road.brown_river_s_n0e1se1s1w1nw1:0"
+ 7,  7, "road.brown_river_s_n1e1se1s1w1nw1:0"
 
-;river outlets
+; Brown River outlets
 
- 8, 0, "road.brown_river_outlet_n"
- 8, 1, "road.brown_river_outlet_e"
- 8, 2, "road.brown_river_outlet_s"
- 8, 3, "road.brown_river_outlet_w"
- 8, 4, "road.brown_river_outlet_nw"
- 8, 5, "road.brown_river_outlet_se"
+ 8, 0, "road.brown_river_outlet_n:0"
+ 8, 1, "road.brown_river_outlet_e:0"
+ 8, 2, "road.brown_river_outlet_s:0"
+ 8, 3, "road.brown_river_outlet_w:0"
+ 8, 4, "road.brown_river_outlet_nw:0"
+ 8, 5, "road.brown_river_outlet_se:0"
 
 }
diff --git a/data/alio/riversgreen.spec b/data/alio/riversgreen.spec
index 81f2195cee..d30c92a543 100644
--- a/data/alio/riversgreen.spec
+++ b/data/alio/riversgreen.spec
@@ -26,81 +26,81 @@ tiles = { "row", "column","tag"
 ; Rivers (as special type), and whether north, south, east, west
 ; also has river or is ocean:
 
- 0,  0, "road.green_river_s_n0e0se0s0w0nw0"
- 0,  1, "road.green_river_s_n1e0se0s0w0nw0"
- 0,  2, "road.green_river_s_n0e1se0s0w0nw0"
- 0,  3, "road.green_river_s_n1e1se0s0w0nw0"
- 0,  4, "road.green_river_s_n0e0se0s1w0nw0"
- 0,  5, "road.green_river_s_n1e0se0s1w0nw0"
- 0,  6, "road.green_river_s_n0e1se0s1w0nw0"
- 0,  7, "road.green_river_s_n1e1se0s1w0nw0"
- 1,  0, "road.green_river_s_n0e0se0s0w1nw0"
- 1,  1, "road.green_river_s_n1e0se0s0w1nw0"
- 1,  2, "road.green_river_s_n0e1se0s0w1nw0"
- 1,  3, "road.green_river_s_n1e1se0s0w1nw0"
- 1,  4, "road.green_river_s_n0e0se0s1w1nw0"
- 1,  5, "road.green_river_s_n1e0se0s1w1nw0"
- 1,  6, "road.green_river_s_n0e1se0s1w1nw0"
- 1,  7, "road.green_river_s_n1e1se0s1w1nw0"
+ 0,  0, "road.green_river_s_n0e0se0s0w0nw0:0"
+ 0,  1, "road.green_river_s_n1e0se0s0w0nw0:0"
+ 0,  2, "road.green_river_s_n0e1se0s0w0nw0:0"
+ 0,  3, "road.green_river_s_n1e1se0s0w0nw0:0"
+ 0,  4, "road.green_river_s_n0e0se0s1w0nw0:0"
+ 0,  5, "road.green_river_s_n1e0se0s1w0nw0:0"
+ 0,  6, "road.green_river_s_n0e1se0s1w0nw0:0"
+ 0,  7, "road.green_river_s_n1e1se0s1w0nw0:0"
+ 1,  0, "road.green_river_s_n0e0se0s0w1nw0:0"
+ 1,  1, "road.green_river_s_n1e0se0s0w1nw0:0"
+ 1,  2, "road.green_river_s_n0e1se0s0w1nw0:0"
+ 1,  3, "road.green_river_s_n1e1se0s0w1nw0:0"
+ 1,  4, "road.green_river_s_n0e0se0s1w1nw0:0"
+ 1,  5, "road.green_river_s_n1e0se0s1w1nw0:0"
+ 1,  6, "road.green_river_s_n0e1se0s1w1nw0:0"
+ 1,  7, "road.green_river_s_n1e1se0s1w1nw0:0"
 
- 2,  0, "road.green_river_s_n0e0se1s0w0nw0"
- 2,  1, "road.green_river_s_n1e0se1s0w0nw0"
- 2,  2, "road.green_river_s_n0e1se1s0w0nw0"
- 2,  3, "road.green_river_s_n1e1se1s0w0nw0"
- 2,  4, "road.green_river_s_n0e0se1s1w0nw0"
- 2,  5, "road.green_river_s_n1e0se1s1w0nw0"
- 2,  6, "road.green_river_s_n0e1se1s1w0nw0"
- 2,  7, "road.green_river_s_n1e1se1s1w0nw0"
- 3,  0, "road.green_river_s_n0e0se1s0w1nw0"
- 3,  1, "road.green_river_s_n1e0se1s0w1nw0"
- 3,  2, "road.green_river_s_n0e1se1s0w1nw0"
- 3,  3, "road.green_river_s_n1e1se1s0w1nw0"
- 3,  4, "road.green_river_s_n0e0se1s1w1nw0"
- 3,  5, "road.green_river_s_n1e0se1s1w1nw0"
- 3,  6, "road.green_river_s_n0e1se1s1w1nw0"
- 3,  7, "road.green_river_s_n1e1se1s1w1nw0"
+ 2,  0, "road.green_river_s_n0e0se1s0w0nw0:0"
+ 2,  1, "road.green_river_s_n1e0se1s0w0nw0:0"
+ 2,  2, "road.green_river_s_n0e1se1s0w0nw0:0"
+ 2,  3, "road.green_river_s_n1e1se1s0w0nw0:0"
+ 2,  4, "road.green_river_s_n0e0se1s1w0nw0:0"
+ 2,  5, "road.green_river_s_n1e0se1s1w0nw0:0"
+ 2,  6, "road.green_river_s_n0e1se1s1w0nw0:0"
+ 2,  7, "road.green_river_s_n1e1se1s1w0nw0:0"
+ 3,  0, "road.green_river_s_n0e0se1s0w1nw0:0"
+ 3,  1, "road.green_river_s_n1e0se1s0w1nw0:0"
+ 3,  2, "road.green_river_s_n0e1se1s0w1nw0:0"
+ 3,  3, "road.green_river_s_n1e1se1s0w1nw0:0"
+ 3,  4, "road.green_river_s_n0e0se1s1w1nw0:0"
+ 3,  5, "road.green_river_s_n1e0se1s1w1nw0:0"
+ 3,  6, "road.green_river_s_n0e1se1s1w1nw0:0"
+ 3,  7, "road.green_river_s_n1e1se1s1w1nw0:0"
 
- 4,  0, "road.green_river_s_n0e0se0s0w0nw1"
- 4,  1, "road.green_river_s_n1e0se0s0w0nw1"
- 4,  2, "road.green_river_s_n0e1se0s0w0nw1"
- 4,  3, "road.green_river_s_n1e1se0s0w0nw1"
- 4,  4, "road.green_river_s_n0e0se0s1w0nw1"
- 4,  5, "road.green_river_s_n1e0se0s1w0nw1"
- 4,  6, "road.green_river_s_n0e1se0s1w0nw1"
- 4,  7, "road.green_river_s_n1e1se0s1w0nw1"
- 5,  0, "road.green_river_s_n0e0se0s0w1nw1"
- 5,  1, "road.green_river_s_n1e0se0s0w1nw1"
- 5,  2, "road.green_river_s_n0e1se0s0w1nw1"
- 5,  3, "road.green_river_s_n1e1se0s0w1nw1"
- 5,  4, "road.green_river_s_n0e0se0s1w1nw1"
- 5,  5, "road.green_river_s_n1e0se0s1w1nw1"
- 5,  6, "road.green_river_s_n0e1se0s1w1nw1"
- 5,  7, "road.green_river_s_n1e1se0s1w1nw1"
+ 4,  0, "road.green_river_s_n0e0se0s0w0nw1:0"
+ 4,  1, "road.green_river_s_n1e0se0s0w0nw1:0"
+ 4,  2, "road.green_river_s_n0e1se0s0w0nw1:0"
+ 4,  3, "road.green_river_s_n1e1se0s0w0nw1:0"
+ 4,  4, "road.green_river_s_n0e0se0s1w0nw1:0"
+ 4,  5, "road.green_river_s_n1e0se0s1w0nw1:0"
+ 4,  6, "road.green_river_s_n0e1se0s1w0nw1:0"
+ 4,  7, "road.green_river_s_n1e1se0s1w0nw1:0"
+ 5,  0, "road.green_river_s_n0e0se0s0w1nw1:0"
+ 5,  1, "road.green_river_s_n1e0se0s0w1nw1:0"
+ 5,  2, "road.green_river_s_n0e1se0s0w1nw1:0"
+ 5,  3, "road.green_river_s_n1e1se0s0w1nw1:0"
+ 5,  4, "road.green_river_s_n0e0se0s1w1nw1:0"
+ 5,  5, "road.green_river_s_n1e0se0s1w1nw1:0"
+ 5,  6, "road.green_river_s_n0e1se0s1w1nw1:0"
+ 5,  7, "road.green_river_s_n1e1se0s1w1nw1:0"
 
- 6,  0, "road.green_river_s_n0e0se1s0w0nw1"
- 6,  1, "road.green_river_s_n1e0se1s0w0nw1"
- 6,  2, "road.green_river_s_n0e1se1s0w0nw1"
- 6,  3, "road.green_river_s_n1e1se1s0w0nw1"
- 6,  4, "road.green_river_s_n0e0se1s1w0nw1"
- 6,  5, "road.green_river_s_n1e0se1s1w0nw1"
- 6,  6, "road.green_river_s_n0e1se1s1w0nw1"
- 6,  7, "road.green_river_s_n1e1se1s1w0nw1"
- 7,  0, "road.green_river_s_n0e0se1s0w1nw1"
- 7,  1, "road.green_river_s_n1e0se1s0w1nw1"
- 7,  2, "road.green_river_s_n0e1se1s0w1nw1"
- 7,  3, "road.green_river_s_n1e1se1s0w1nw1"
- 7,  4, "road.green_river_s_n0e0se1s1w1nw1"
- 7,  5, "road.green_river_s_n1e0se1s1w1nw1"
- 7,  6, "road.green_river_s_n0e1se1s1w1nw1"
- 7,  7, "road.green_river_s_n1e1se1s1w1nw1"
+ 6,  0, "road.green_river_s_n0e0se1s0w0nw1:0"
+ 6,  1, "road.green_river_s_n1e0se1s0w0nw1:0"
+ 6,  2, "road.green_river_s_n0e1se1s0w0nw1:0"
+ 6,  3, "road.green_river_s_n1e1se1s0w0nw1:0"
+ 6,  4, "road.green_river_s_n0e0se1s1w0nw1:0"
+ 6,  5, "road.green_river_s_n1e0se1s1w0nw1:0"
+ 6,  6, "road.green_river_s_n0e1se1s1w0nw1:0"
+ 6,  7, "road.green_river_s_n1e1se1s1w0nw1:0"
+ 7,  0, "road.green_river_s_n0e0se1s0w1nw1:0"
+ 7,  1, "road.green_river_s_n1e0se1s0w1nw1:0"
+ 7,  2, "road.green_river_s_n0e1se1s0w1nw1:0"
+ 7,  3, "road.green_river_s_n1e1se1s0w1nw1:0"
+ 7,  4, "road.green_river_s_n0e0se1s1w1nw1:0"
+ 7,  5, "road.green_river_s_n1e0se1s1w1nw1:0"
+ 7,  6, "road.green_river_s_n0e1se1s1w1nw1:0"
+ 7,  7, "road.green_river_s_n1e1se1s1w1nw1:0"
 
-;river outlets
+; Green River outlets
 
- 8, 0, "road.green_river_outlet_n"
- 8, 1, "road.green_river_outlet_e"
- 8, 2, "road.green_river_outlet_s"
- 8, 3, "road.green_river_outlet_w"
- 8, 4, "road.green_river_outlet_nw"
- 8, 5, "road.green_river_outlet_se"
+ 8, 0, "road.green_river_outlet_n:0"
+ 8, 1, "road.green_river_outlet_e:0"
+ 8, 2, "road.green_river_outlet_s:0"
+ 8, 3, "road.green_river_outlet_w:0"
+ 8, 4, "road.green_river_outlet_nw:0"
+ 8, 5, "road.green_river_outlet_se:0"
 
 }
diff --git a/data/amplio/water.spec b/data/amplio/water.spec
index e0cfa60306..c7dfc55905 100644
--- a/data/amplio/water.spec
+++ b/data/amplio/water.spec
@@ -30,29 +30,29 @@ tiles = { "row", "column", "tag"
 ; Rivers (as special type), and whether north, south, east, west
 ; also has river or is ocean:
 
- 2,  0, "road.river_s_n0e0s0w0"
- 2,  1, "road.river_s_n0e0s0w1"
- 2,  2, "road.river_s_n0e0s1w0"
- 2,  3, "road.river_s_n0e0s1w1"
- 2,  4, "road.river_s_n0e1s0w0"
- 2,  5, "road.river_s_n0e1s0w1"
- 2,  6, "road.river_s_n0e1s1w0"
- 2,  7, "road.river_s_n0e1s1w1"
- 3,  0, "road.river_s_n1e0s0w0"
- 3,  1, "road.river_s_n1e0s0w1"
- 3,  2, "road.river_s_n1e0s1w0"
- 3,  3, "road.river_s_n1e0s1w1"
- 3,  4, "road.river_s_n1e1s0w0"
- 3,  5, "road.river_s_n1e1s0w1"
- 3,  6, "road.river_s_n1e1s1w0"
- 3,  7, "road.river_s_n1e1s1w1"
+ 2,  0, "road.river_s_n0e0s0w0:0"
+ 2,  1, "road.river_s_n0e0s0w1:0"
+ 2,  2, "road.river_s_n0e0s1w0:0"
+ 2,  3, "road.river_s_n0e0s1w1:0"
+ 2,  4, "road.river_s_n0e1s0w0:0"
+ 2,  5, "road.river_s_n0e1s0w1:0"
+ 2,  6, "road.river_s_n0e1s1w0:0"
+ 2,  7, "road.river_s_n0e1s1w1:0"
+ 3,  0, "road.river_s_n1e0s0w0:0"
+ 3,  1, "road.river_s_n1e0s0w1:0"
+ 3,  2, "road.river_s_n1e0s1w0:0"
+ 3,  3, "road.river_s_n1e0s1w1:0"
+ 3,  4, "road.river_s_n1e1s0w0:0"
+ 3,  5, "road.river_s_n1e1s0w1:0"
+ 3,  6, "road.river_s_n1e1s1w0:0"
+ 3,  7, "road.river_s_n1e1s1w1:0"
 
 ; River outlets
 
- 4,  0, "road.river_outlet_n"
- 4,  1, "road.river_outlet_e"
- 4,  2, "road.river_outlet_s"
- 4,  3, "road.river_outlet_w"
+ 4,  0, "road.river_outlet_n:0"
+ 4,  1, "road.river_outlet_e:0"
+ 4,  2, "road.river_outlet_s:0"
+ 4,  3, "road.river_outlet_w:0"
 }
 
 
diff --git a/data/amplio2/water.spec b/data/amplio2/water.spec
index a0a2236523..420cdb84c1 100644
--- a/data/amplio2/water.spec
+++ b/data/amplio2/water.spec
@@ -30,29 +30,29 @@ tiles = { "row", "column", "tag"
 ; Rivers (as special type), and whether north, south, east, west
 ; also has river or is ocean:
 
- 2,  0, "road.river_s_n0e0s0w0"
- 2,  1, "road.river_s_n0e0s0w1"
- 2,  2, "road.river_s_n0e0s1w0"
- 2,  3, "road.river_s_n0e0s1w1"
- 2,  4, "road.river_s_n0e1s0w0"
- 2,  5, "road.river_s_n0e1s0w1"
- 2,  6, "road.river_s_n0e1s1w0"
- 2,  7, "road.river_s_n0e1s1w1"
- 3,  0, "road.river_s_n1e0s0w0"
- 3,  1, "road.river_s_n1e0s0w1"
- 3,  2, "road.river_s_n1e0s1w0"
- 3,  3, "road.river_s_n1e0s1w1"
- 3,  4, "road.river_s_n1e1s0w0"
- 3,  5, "road.river_s_n1e1s0w1"
- 3,  6, "road.river_s_n1e1s1w0"
- 3,  7, "road.river_s_n1e1s1w1"
+ 2,  0, "road.river_s_n0e0s0w0:0"
+ 2,  1, "road.river_s_n0e0s0w1:0"
+ 2,  2, "road.river_s_n0e0s1w0:0"
+ 2,  3, "road.river_s_n0e0s1w1:0"
+ 2,  4, "road.river_s_n0e1s0w0:0"
+ 2,  5, "road.river_s_n0e1s0w1:0"
+ 2,  6, "road.river_s_n0e1s1w0:0"
+ 2,  7, "road.river_s_n0e1s1w1:0"
+ 3,  0, "road.river_s_n1e0s0w0:0"
+ 3,  1, "road.river_s_n1e0s0w1:0"
+ 3,  2, "road.river_s_n1e0s1w0:0"
+ 3,  3, "road.river_s_n1e0s1w1:0"
+ 3,  4, "road.river_s_n1e1s0w0:0"
+ 3,  5, "road.river_s_n1e1s0w1:0"
+ 3,  6, "road.river_s_n1e1s1w0:0"
+ 3,  7, "road.river_s_n1e1s1w1:0"
 
 ; River outlets
 
- 4,  0, "road.river_outlet_n"
- 4,  1, "road.river_outlet_e"
- 4,  2, "road.river_outlet_s"
- 4,  3, "road.river_outlet_w"
+ 4,  0, "road.river_outlet_n:0"
+ 4,  1, "road.river_outlet_e:0"
+ 4,  2, "road.river_outlet_s:0"
+ 4,  3, "road.river_outlet_w:0"
 }
 
 
diff --git a/data/hex2t/overlays.spec b/data/hex2t/overlays.spec
index 7abfd174c6..0a2186e594 100644
--- a/data/hex2t/overlays.spec
+++ b/data/hex2t/overlays.spec
@@ -39,87 +39,87 @@ tiles = { "row", "column","tag"
 ; at the top-right, right and left sides.
 
 
-; river mouths:
-; currently _ne and _sw don't seem to be implemented (2.0.0-rc1)
-
- 1,  16, "road.river_outlet_n"
- 1,  17, "road.river_outlet_ne"
- 1,  18, "road.river_outlet_e"
- 1,  19, "road.river_outlet_s"
- 1,  20, "road.river_outlet_sw"
- 1,  21, "road.river_outlet_w"
-
-; river tiles:
-
- 0,  0, "road.river_s_n0ne0e0s0sw0w0"
- 0,  1, "road.river_s_n1ne0e0s0sw0w0"
- 0,  2, "road.river_s_n0ne1e0s0sw0w0"
- 0,  3, "road.river_s_n1ne1e0s0sw0w0"
- 0,  4, "road.river_s_n0ne0e1s0sw0w0"
- 0,  5, "road.river_s_n1ne0e1s0sw0w0"
- 0,  6, "road.river_s_n0ne1e1s0sw0w0"
- 0,  7, "road.river_s_n1ne1e1s0sw0w0"
- 0,  8, "road.river_s_n0ne0e0s1sw0w0"
- 0,  9, "road.river_s_n1ne0e0s1sw0w0"
- 0, 10, "road.river_s_n0ne1e0s1sw0w0"
- 0, 11, "road.river_s_n1ne1e0s1sw0w0"
- 0, 12, "road.river_s_n0ne0e1s1sw0w0"
- 0, 13, "road.river_s_n1ne0e1s1sw0w0"
- 0, 14, "road.river_s_n0ne1e1s1sw0w0"
- 0, 15, "road.river_s_n1ne1e1s1sw0w0"
-
- 1,  0, "road.river_s_n0ne0e0s0sw1w0"
- 1,  1, "road.river_s_n1ne0e0s0sw1w0"
- 1,  2, "road.river_s_n0ne1e0s0sw1w0"
- 1,  3, "road.river_s_n1ne1e0s0sw1w0"
- 1,  4, "road.river_s_n0ne0e1s0sw1w0"
- 1,  5, "road.river_s_n1ne0e1s0sw1w0"
- 1,  6, "road.river_s_n0ne1e1s0sw1w0"
- 1,  7, "road.river_s_n1ne1e1s0sw1w0"
- 1,  8, "road.river_s_n0ne0e0s1sw1w0"
- 1,  9, "road.river_s_n1ne0e0s1sw1w0"
- 1, 10, "road.river_s_n0ne1e0s1sw1w0"
- 1, 11, "road.river_s_n1ne1e0s1sw1w0"
- 1, 12, "road.river_s_n0ne0e1s1sw1w0"
- 1, 13, "road.river_s_n1ne0e1s1sw1w0"
- 1, 14, "road.river_s_n0ne1e1s1sw1w0"
- 1, 15, "road.river_s_n1ne1e1s1sw1w0"
-
- 2,  0, "road.river_s_n0ne0e0s0sw0w1"
- 2,  1, "road.river_s_n1ne0e0s0sw0w1"
- 2,  2, "road.river_s_n0ne1e0s0sw0w1"
- 2,  3, "road.river_s_n1ne1e0s0sw0w1"
- 2,  4, "road.river_s_n0ne0e1s0sw0w1"
- 2,  5, "road.river_s_n1ne0e1s0sw0w1"
- 2,  6, "road.river_s_n0ne1e1s0sw0w1"
- 2,  7, "road.river_s_n1ne1e1s0sw0w1"
- 2,  8, "road.river_s_n0ne0e0s1sw0w1"
- 2,  9, "road.river_s_n1ne0e0s1sw0w1"
- 2, 10, "road.river_s_n0ne1e0s1sw0w1"
- 2, 11, "road.river_s_n1ne1e0s1sw0w1"
- 2, 12, "road.river_s_n0ne0e1s1sw0w1"
- 2, 13, "road.river_s_n1ne0e1s1sw0w1"
- 2, 14, "road.river_s_n0ne1e1s1sw0w1"
- 2, 15, "road.river_s_n1ne1e1s1sw0w1"
-
- 3,  0, "road.river_s_n0ne0e0s0sw1w1"
- 3,  1, "road.river_s_n1ne0e0s0sw1w1"
- 3,  2, "road.river_s_n0ne1e0s0sw1w1"
- 3,  3, "road.river_s_n1ne1e0s0sw1w1"
- 3,  4, "road.river_s_n0ne0e1s0sw1w1"
- 3,  5, "road.river_s_n1ne0e1s0sw1w1"
- 3,  6, "road.river_s_n0ne1e1s0sw1w1"
- 3,  7, "road.river_s_n1ne1e1s0sw1w1"
- 3,  8, "road.river_s_n0ne0e0s1sw1w1"
- 3,  9, "road.river_s_n1ne0e0s1sw1w1"
- 3, 10, "road.river_s_n0ne1e0s1sw1w1"
- 3, 11, "road.river_s_n1ne1e0s1sw1w1"
- 3, 12, "road.river_s_n0ne0e1s1sw1w1"
- 3, 13, "road.river_s_n1ne0e1s1sw1w1"
- 3, 14, "road.river_s_n0ne1e1s1sw1w1"
- 3, 15, "road.river_s_n1ne1e1s1sw1w1"
-
-; forest
+; River mouths:
+; Currently _ne and _sw don't seem to be implemented (2.0.0-rc1)
+
+ 1,  16, "road.river_outlet_n:0"
+ 1,  17, "road.river_outlet_ne:0"
+ 1,  18, "road.river_outlet_e:0"
+ 1,  19, "road.river_outlet_s:0"
+ 1,  20, "road.river_outlet_sw:0"
+ 1,  21, "road.river_outlet_w:0"
+
+; River tiles:
+
+ 0,  0, "road.river_s_n0ne0e0s0sw0w0:0"
+ 0,  1, "road.river_s_n1ne0e0s0sw0w0:0"
+ 0,  2, "road.river_s_n0ne1e0s0sw0w0:0"
+ 0,  3, "road.river_s_n1ne1e0s0sw0w0:0"
+ 0,  4, "road.river_s_n0ne0e1s0sw0w0:0"
+ 0,  5, "road.river_s_n1ne0e1s0sw0w0:0"
+ 0,  6, "road.river_s_n0ne1e1s0sw0w0:0"
+ 0,  7, "road.river_s_n1ne1e1s0sw0w0:0"
+ 0,  8, "road.river_s_n0ne0e0s1sw0w0:0"
+ 0,  9, "road.river_s_n1ne0e0s1sw0w0:0"
+ 0, 10, "road.river_s_n0ne1e0s1sw0w0:0"
+ 0, 11, "road.river_s_n1ne1e0s1sw0w0:0"
+ 0, 12, "road.river_s_n0ne0e1s1sw0w0:0"
+ 0, 13, "road.river_s_n1ne0e1s1sw0w0:0"
+ 0, 14, "road.river_s_n0ne1e1s1sw0w0:0"
+ 0, 15, "road.river_s_n1ne1e1s1sw0w0:0"
+
+ 1,  0, "road.river_s_n0ne0e0s0sw1w0:0"
+ 1,  1, "road.river_s_n1ne0e0s0sw1w0:0"
+ 1,  2, "road.river_s_n0ne1e0s0sw1w0:0"
+ 1,  3, "road.river_s_n1ne1e0s0sw1w0:0"
+ 1,  4, "road.river_s_n0ne0e1s0sw1w0:0"
+ 1,  5, "road.river_s_n1ne0e1s0sw1w0:0"
+ 1,  6, "road.river_s_n0ne1e1s0sw1w0:0"
+ 1,  7, "road.river_s_n1ne1e1s0sw1w0:0"
+ 1,  8, "road.river_s_n0ne0e0s1sw1w0:0"
+ 1,  9, "road.river_s_n1ne0e0s1sw1w0:0"
+ 1, 10, "road.river_s_n0ne1e0s1sw1w0:0"
+ 1, 11, "road.river_s_n1ne1e0s1sw1w0:0"
+ 1, 12, "road.river_s_n0ne0e1s1sw1w0:0"
+ 1, 13, "road.river_s_n1ne0e1s1sw1w0:0"
+ 1, 14, "road.river_s_n0ne1e1s1sw1w0:0"
+ 1, 15, "road.river_s_n1ne1e1s1sw1w0:0"
+
+ 2,  0, "road.river_s_n0ne0e0s0sw0w1:0"
+ 2,  1, "road.river_s_n1ne0e0s0sw0w1:0"
+ 2,  2, "road.river_s_n0ne1e0s0sw0w1:0"
+ 2,  3, "road.river_s_n1ne1e0s0sw0w1:0"
+ 2,  4, "road.river_s_n0ne0e1s0sw0w1:0"
+ 2,  5, "road.river_s_n1ne0e1s0sw0w1:0"
+ 2,  6, "road.river_s_n0ne1e1s0sw0w1:0"
+ 2,  7, "road.river_s_n1ne1e1s0sw0w1:0"
+ 2,  8, "road.river_s_n0ne0e0s1sw0w1:0"
+ 2,  9, "road.river_s_n1ne0e0s1sw0w1:0"
+ 2, 10, "road.river_s_n0ne1e0s1sw0w1:0"
+ 2, 11, "road.river_s_n1ne1e0s1sw0w1:0"
+ 2, 12, "road.river_s_n0ne0e1s1sw0w1:0"
+ 2, 13, "road.river_s_n1ne0e1s1sw0w1:0"
+ 2, 14, "road.river_s_n0ne1e1s1sw0w1:0"
+ 2, 15, "road.river_s_n1ne1e1s1sw0w1:0"
+
+ 3,  0, "road.river_s_n0ne0e0s0sw1w1:0"
+ 3,  1, "road.river_s_n1ne0e0s0sw1w1:0"
+ 3,  2, "road.river_s_n0ne1e0s0sw1w1:0"
+ 3,  3, "road.river_s_n1ne1e0s0sw1w1:0"
+ 3,  4, "road.river_s_n0ne0e1s0sw1w1:0"
+ 3,  5, "road.river_s_n1ne0e1s0sw1w1:0"
+ 3,  6, "road.river_s_n0ne1e1s0sw1w1:0"
+ 3,  7, "road.river_s_n1ne1e1s0sw1w1:0"
+ 3,  8, "road.river_s_n0ne0e0s1sw1w1:0"
+ 3,  9, "road.river_s_n1ne0e0s1sw1w1:0"
+ 3, 10, "road.river_s_n0ne1e0s1sw1w1:0"
+ 3, 11, "road.river_s_n1ne1e0s1sw1w1:0"
+ 3, 12, "road.river_s_n0ne0e1s1sw1w1:0"
+ 3, 13, "road.river_s_n1ne0e1s1sw1w1:0"
+ 3, 14, "road.river_s_n0ne1e1s1sw1w1:0"
+ 3, 15, "road.river_s_n1ne1e1s1sw1w1:0"
+
+; Forest
 
  5,  0, "t.l1.forest_n0ne0e0s0sw0w0"
  5,  1, "t.l1.forest_n1ne0e0s0sw0w0"
diff --git a/data/hexemplio/rivers.spec b/data/hexemplio/rivers.spec
index ff5834b8b5..b18a6c2159 100644
--- a/data/hexemplio/rivers.spec
+++ b/data/hexemplio/rivers.spec
@@ -26,99 +26,99 @@ tiles = { "row", "column","tag"
 ; Rivers (as special type), and whether north, south, east, west
 ; also has river or is ocean:
 
- 0,  0, "road.river_s_n0e0se0s0w0nw0"
- 0,  1, "road.river_s_n1e0se0s0w0nw0"
- 0,  2, "road.river_s_n0e1se0s0w0nw0"
- 0,  3, "road.river_s_n1e1se0s0w0nw0"
- 0,  4, "road.river_s_n0e0se0s1w0nw0"
- 0,  5, "road.river_s_n1e0se0s1w0nw0"
- 0,  6, "road.river_s_n0e1se0s1w0nw0"
- 0,  7, "road.river_s_n1e1se0s1w0nw0"
- 1,  0, "road.river_s_n0e0se0s0w1nw0"
- 1,  1, "road.river_s_n1e0se0s0w1nw0"
- 1,  2, "road.river_s_n0e1se0s0w1nw0"
- 1,  3, "road.river_s_n1e1se0s0w1nw0"
- 1,  4, "road.river_s_n0e0se0s1w1nw0"
- 1,  5, "road.river_s_n1e0se0s1w1nw0"
- 1,  6, "road.river_s_n0e1se0s1w1nw0"
- 1,  7, "road.river_s_n1e1se0s1w1nw0"
-
- 2,  0, "road.river_s_n0e0se1s0w0nw0"
- 2,  1, "road.river_s_n1e0se1s0w0nw0"
- 2,  2, "road.river_s_n0e1se1s0w0nw0"
- 2,  3, "road.river_s_n1e1se1s0w0nw0"
- 2,  4, "road.river_s_n0e0se1s1w0nw0"
- 2,  5, "road.river_s_n1e0se1s1w0nw0"
- 2,  6, "road.river_s_n0e1se1s1w0nw0"
- 2,  7, "road.river_s_n1e1se1s1w0nw0"
- 3,  0, "road.river_s_n0e0se1s0w1nw0"
- 3,  1, "road.river_s_n1e0se1s0w1nw0"
- 3,  2, "road.river_s_n0e1se1s0w1nw0"
- 3,  3, "road.river_s_n1e1se1s0w1nw0"
- 3,  4, "road.river_s_n0e0se1s1w1nw0"
- 3,  5, "road.river_s_n1e0se1s1w1nw0"
- 3,  6, "road.river_s_n0e1se1s1w1nw0"
- 3,  7, "road.river_s_n1e1se1s1w1nw0"
-
- 4,  0, "road.river_s_n0e0se0s0w0nw1"
- 4,  1, "road.river_s_n1e0se0s0w0nw1"
- 4,  2, "road.river_s_n0e1se0s0w0nw1"
- 4,  3, "road.river_s_n1e1se0s0w0nw1"
- 4,  4, "road.river_s_n0e0se0s1w0nw1"
- 4,  5, "road.river_s_n1e0se0s1w0nw1"
- 4,  6, "road.river_s_n0e1se0s1w0nw1"
- 4,  7, "road.river_s_n1e1se0s1w0nw1"
- 5,  0, "road.river_s_n0e0se0s0w1nw1"
- 5,  1, "road.river_s_n1e0se0s0w1nw1"
- 5,  2, "road.river_s_n0e1se0s0w1nw1"
- 5,  3, "road.river_s_n1e1se0s0w1nw1"
- 5,  4, "road.river_s_n0e0se0s1w1nw1"
- 5,  5, "road.river_s_n1e0se0s1w1nw1"
- 5,  6, "road.river_s_n0e1se0s1w1nw1"
- 5,  7, "road.river_s_n1e1se0s1w1nw1"
-
- 6,  0, "road.river_s_n0e0se1s0w0nw1"
- 6,  1, "road.river_s_n1e0se1s0w0nw1"
- 6,  2, "road.river_s_n0e1se1s0w0nw1"
- 6,  3, "road.river_s_n1e1se1s0w0nw1"
- 6,  4, "road.river_s_n0e0se1s1w0nw1"
- 6,  5, "road.river_s_n1e0se1s1w0nw1"
- 6,  6, "road.river_s_n0e1se1s1w0nw1"
- 6,  7, "road.river_s_n1e1se1s1w0nw1"
- 7,  0, "road.river_s_n0e0se1s0w1nw1"
- 7,  1, "road.river_s_n1e0se1s0w1nw1"
- 7,  2, "road.river_s_n0e1se1s0w1nw1"
- 7,  3, "road.river_s_n1e1se1s0w1nw1"
- 7,  4, "road.river_s_n0e0se1s1w1nw1"
- 7,  5, "road.river_s_n1e0se1s1w1nw1"
- 7,  6, "road.river_s_n0e1se1s1w1nw1"
- 7,  7, "road.river_s_n1e1se1s1w1nw1"
-
-;river outlets
-
- 8, 0, "road.river_outlet_n"
- 8, 1, "road.river_outlet_e"
- 8, 2, "road.river_outlet_s"
- 8, 3, "road.river_outlet_w"
- 8, 4, "road.river_outlet_nw"
- 8, 5, "road.river_outlet_se"
-
-;irrigation outlets
-
- 8, 0, "tx.irrigation_outlet_n"
- 8, 1, "tx.irrigation_outlet_e"
- 8, 2, "tx.irrigation_outlet_s"
- 8, 3, "tx.irrigation_outlet_w"
- 8, 4, "tx.irrigation_outlet_nw"
- 8, 5, "tx.irrigation_outlet_se"
-
-;farmland outlets
-
- 8, 0, "tx.farmland_outlet_n"
- 8, 1, "tx.farmland_outlet_e"
- 8, 2, "tx.farmland_outlet_s"
- 8, 3, "tx.farmland_outlet_w"
- 8, 4, "tx.farmland_outlet_nw"
- 8, 5, "tx.farmland_outlet_se"
+ 0,  0, "road.river_s_n0e0se0s0w0nw0:0"
+ 0,  1, "road.river_s_n1e0se0s0w0nw0:0"
+ 0,  2, "road.river_s_n0e1se0s0w0nw0:0"
+ 0,  3, "road.river_s_n1e1se0s0w0nw0:0"
+ 0,  4, "road.river_s_n0e0se0s1w0nw0:0"
+ 0,  5, "road.river_s_n1e0se0s1w0nw0:0"
+ 0,  6, "road.river_s_n0e1se0s1w0nw0:0"
+ 0,  7, "road.river_s_n1e1se0s1w0nw0:0"
+ 1,  0, "road.river_s_n0e0se0s0w1nw0:0"
+ 1,  1, "road.river_s_n1e0se0s0w1nw0:0"
+ 1,  2, "road.river_s_n0e1se0s0w1nw0:0"
+ 1,  3, "road.river_s_n1e1se0s0w1nw0:0"
+ 1,  4, "road.river_s_n0e0se0s1w1nw0:0"
+ 1,  5, "road.river_s_n1e0se0s1w1nw0:0"
+ 1,  6, "road.river_s_n0e1se0s1w1nw0:0"
+ 1,  7, "road.river_s_n1e1se0s1w1nw0:0"
+
+ 2,  0, "road.river_s_n0e0se1s0w0nw0:0"
+ 2,  1, "road.river_s_n1e0se1s0w0nw0:0"
+ 2,  2, "road.river_s_n0e1se1s0w0nw0:0"
+ 2,  3, "road.river_s_n1e1se1s0w0nw0:0"
+ 2,  4, "road.river_s_n0e0se1s1w0nw0:0"
+ 2,  5, "road.river_s_n1e0se1s1w0nw0:0"
+ 2,  6, "road.river_s_n0e1se1s1w0nw0:0"
+ 2,  7, "road.river_s_n1e1se1s1w0nw0:0"
+ 3,  0, "road.river_s_n0e0se1s0w1nw0:0"
+ 3,  1, "road.river_s_n1e0se1s0w1nw0:0"
+ 3,  2, "road.river_s_n0e1se1s0w1nw0:0"
+ 3,  3, "road.river_s_n1e1se1s0w1nw0:0"
+ 3,  4, "road.river_s_n0e0se1s1w1nw0:0"
+ 3,  5, "road.river_s_n1e0se1s1w1nw0:0"
+ 3,  6, "road.river_s_n0e1se1s1w1nw0:0"
+ 3,  7, "road.river_s_n1e1se1s1w1nw0:0"
+
+ 4,  0, "road.river_s_n0e0se0s0w0nw1:0"
+ 4,  1, "road.river_s_n1e0se0s0w0nw1:0"
+ 4,  2, "road.river_s_n0e1se0s0w0nw1:0"
+ 4,  3, "road.river_s_n1e1se0s0w0nw1:0"
+ 4,  4, "road.river_s_n0e0se0s1w0nw1:0"
+ 4,  5, "road.river_s_n1e0se0s1w0nw1:0"
+ 4,  6, "road.river_s_n0e1se0s1w0nw1:0"
+ 4,  7, "road.river_s_n1e1se0s1w0nw1:0"
+ 5,  0, "road.river_s_n0e0se0s0w1nw1:0"
+ 5,  1, "road.river_s_n1e0se0s0w1nw1:0"
+ 5,  2, "road.river_s_n0e1se0s0w1nw1:0"
+ 5,  3, "road.river_s_n1e1se0s0w1nw1:0"
+ 5,  4, "road.river_s_n0e0se0s1w1nw1:0"
+ 5,  5, "road.river_s_n1e0se0s1w1nw1:0"
+ 5,  6, "road.river_s_n0e1se0s1w1nw1:0"
+ 5,  7, "road.river_s_n1e1se0s1w1nw1:0"
+
+ 6,  0, "road.river_s_n0e0se1s0w0nw1:0"
+ 6,  1, "road.river_s_n1e0se1s0w0nw1:0"
+ 6,  2, "road.river_s_n0e1se1s0w0nw1:0"
+ 6,  3, "road.river_s_n1e1se1s0w0nw1:0"
+ 6,  4, "road.river_s_n0e0se1s1w0nw1:0"
+ 6,  5, "road.river_s_n1e0se1s1w0nw1:0"
+ 6,  6, "road.river_s_n0e1se1s1w0nw1:0"
+ 6,  7, "road.river_s_n1e1se1s1w0nw1:0"
+ 7,  0, "road.river_s_n0e0se1s0w1nw1:0"
+ 7,  1, "road.river_s_n1e0se1s0w1nw1:0"
+ 7,  2, "road.river_s_n0e1se1s0w1nw1:0"
+ 7,  3, "road.river_s_n1e1se1s0w1nw1:0"
+ 7,  4, "road.river_s_n0e0se1s1w1nw1:0"
+ 7,  5, "road.river_s_n1e0se1s1w1nw1:0"
+ 7,  6, "road.river_s_n0e1se1s1w1nw1:0"
+ 7,  7, "road.river_s_n1e1se1s1w1nw1:0"
+
+; River outlets
+
+ 8, 0, "road.river_outlet_n:0"
+ 8, 1, "road.river_outlet_e:0"
+ 8, 2, "road.river_outlet_s:0"
+ 8, 3, "road.river_outlet_w:0"
+ 8, 4, "road.river_outlet_nw:0"
+ 8, 5, "road.river_outlet_se:0"
+
+; Irrigation outlets
+
+ 8, 0, "tx.irrigation_outlet_n:0"
+ 8, 1, "tx.irrigation_outlet_e:0"
+ 8, 2, "tx.irrigation_outlet_s:0"
+ 8, 3, "tx.irrigation_outlet_w:0"
+ 8, 4, "tx.irrigation_outlet_nw:0"
+ 8, 5, "tx.irrigation_outlet_se:0"
+
+; Farmland outlets
+
+ 8, 0, "tx.farmland_outlet_n:0"
+ 8, 1, "tx.farmland_outlet_e:0"
+ 8, 2, "tx.farmland_outlet_s:0"
+ 8, 3, "tx.farmland_outlet_w:0"
+ 8, 4, "tx.farmland_outlet_nw:0"
+ 8, 5, "tx.farmland_outlet_se:0"
 
 }
diff --git a/data/hexemplio/terrain.spec b/data/hexemplio/terrain.spec
index 52d7a3a36d..fb43322cbb 100644
--- a/data/hexemplio/terrain.spec
+++ b/data/hexemplio/terrain.spec
@@ -135,136 +135,136 @@ tiles = { "row", "column","tag"
 
 ; Irrigation (as special type), and whether north, south, east, west
 
- 4,  3, "tx.irrigation_s_n0e0se0s0w0nw0"
- 4,  3, "tx.irrigation_s_n1e0se0s0w0nw0"
- 4,  3, "tx.irrigation_s_n0e1se0s0w0nw0"
- 4,  3, "tx.irrigation_s_n1e1se0s0w0nw0"
- 4,  3, "tx.irrigation_s_n0e0se0s1w0nw0"
- 4,  3, "tx.irrigation_s_n1e0se0s1w0nw0"
- 4,  3, "tx.irrigation_s_n0e1se0s1w0nw0"
- 4,  3, "tx.irrigation_s_n1e1se0s1w0nw0"
- 4,  3, "tx.irrigation_s_n0e0se0s0w1nw0"
- 4,  3, "tx.irrigation_s_n1e0se0s0w1nw0"
- 4,  3, "tx.irrigation_s_n0e1se0s0w1nw0"
- 4,  3, "tx.irrigation_s_n1e1se0s0w1nw0"
- 4,  3, "tx.irrigation_s_n0e0se0s1w1nw0"
- 4,  3, "tx.irrigation_s_n1e0se0s1w1nw0"
- 4,  3, "tx.irrigation_s_n0e1se0s1w1nw0"
- 4,  3, "tx.irrigation_s_n1e1se0s1w1nw0"
- 4,  3, "tx.irrigation_s_n0e0se1s0w0nw0"
- 4,  3, "tx.irrigation_s_n1e0se1s0w0nw0"
- 4,  3, "tx.irrigation_s_n0e1se1s0w0nw0"
- 4,  3, "tx.irrigation_s_n1e1se1s0w0nw0"
- 4,  3, "tx.irrigation_s_n0e0se1s1w0nw0"
- 4,  3, "tx.irrigation_s_n1e0se1s1w0nw0"
- 4,  3, "tx.irrigation_s_n0e1se1s1w0nw0"
- 4,  3, "tx.irrigation_s_n1e1se1s1w0nw0"
- 4,  3, "tx.irrigation_s_n0e0se1s0w1nw0"
- 4,  3, "tx.irrigation_s_n1e0se1s0w1nw0"
- 4,  3, "tx.irrigation_s_n0e1se1s0w1nw0"
- 4,  3, "tx.irrigation_s_n1e1se1s0w1nw0"
- 4,  3, "tx.irrigation_s_n0e0se1s1w1nw0"
- 4,  3, "tx.irrigation_s_n1e0se1s1w1nw0"
- 4,  3, "tx.irrigation_s_n0e1se1s1w1nw0"
- 4,  3, "tx.irrigation_s_n1e1se1s1w1nw0"
- 4,  3, "tx.irrigation_s_n0e0se0s0w0nw1"
- 4,  3, "tx.irrigation_s_n1e0se0s0w0nw1"
- 4,  3, "tx.irrigation_s_n0e1se0s0w0nw1"
- 4,  3, "tx.irrigation_s_n1e1se0s0w0nw1"
- 4,  3, "tx.irrigation_s_n0e0se0s1w0nw1"
- 4,  3, "tx.irrigation_s_n1e0se0s1w0nw1"
- 4,  3, "tx.irrigation_s_n0e1se0s1w0nw1"
- 4,  3, "tx.irrigation_s_n1e1se0s1w0nw1"
- 4,  3, "tx.irrigation_s_n0e0se0s0w1nw1"
- 4,  3, "tx.irrigation_s_n1e0se0s0w1nw1"
- 4,  3, "tx.irrigation_s_n0e1se0s0w1nw1"
- 4,  3, "tx.irrigation_s_n1e1se0s0w1nw1"
- 4,  3, "tx.irrigation_s_n0e0se0s1w1nw1"
- 4,  3, "tx.irrigation_s_n1e0se0s1w1nw1"
- 4,  3, "tx.irrigation_s_n0e1se0s1w1nw1"
- 4,  3, "tx.irrigation_s_n1e1se0s1w1nw1"
- 4,  3, "tx.irrigation_s_n0e0se1s0w0nw1"
- 4,  3, "tx.irrigation_s_n1e0se1s0w0nw1"
- 4,  3, "tx.irrigation_s_n0e1se1s0w0nw1"
- 4,  3, "tx.irrigation_s_n1e1se1s0w0nw1"
- 4,  3, "tx.irrigation_s_n0e0se1s1w0nw1"
- 4,  3, "tx.irrigation_s_n1e0se1s1w0nw1"
- 4,  3, "tx.irrigation_s_n0e1se1s1w0nw1"
- 4,  3, "tx.irrigation_s_n1e1se1s1w0nw1"
- 4,  3, "tx.irrigation_s_n0e0se1s0w1nw1"
- 4,  3, "tx.irrigation_s_n1e0se1s0w1nw1"
- 4,  3, "tx.irrigation_s_n0e1se1s0w1nw1"
- 4,  3, "tx.irrigation_s_n1e1se1s0w1nw1"
- 4,  3, "tx.irrigation_s_n0e0se1s1w1nw1"
- 4,  3, "tx.irrigation_s_n1e0se1s1w1nw1"
- 4,  3, "tx.irrigation_s_n0e1se1s1w1nw1"
- 4,  3, "tx.irrigation_s_n1e1se1s1w1nw1"
+ 4,  3, "tx.irrigation_s_n0e0se0s0w0nw0:0"
+ 4,  3, "tx.irrigation_s_n1e0se0s0w0nw0:0"
+ 4,  3, "tx.irrigation_s_n0e1se0s0w0nw0:0"
+ 4,  3, "tx.irrigation_s_n1e1se0s0w0nw0:0"
+ 4,  3, "tx.irrigation_s_n0e0se0s1w0nw0:0"
+ 4,  3, "tx.irrigation_s_n1e0se0s1w0nw0:0"
+ 4,  3, "tx.irrigation_s_n0e1se0s1w0nw0:0"
+ 4,  3, "tx.irrigation_s_n1e1se0s1w0nw0:0"
+ 4,  3, "tx.irrigation_s_n0e0se0s0w1nw0:0"
+ 4,  3, "tx.irrigation_s_n1e0se0s0w1nw0:0"
+ 4,  3, "tx.irrigation_s_n0e1se0s0w1nw0:0"
+ 4,  3, "tx.irrigation_s_n1e1se0s0w1nw0:0"
+ 4,  3, "tx.irrigation_s_n0e0se0s1w1nw0:0"
+ 4,  3, "tx.irrigation_s_n1e0se0s1w1nw0:0"
+ 4,  3, "tx.irrigation_s_n0e1se0s1w1nw0:0"
+ 4,  3, "tx.irrigation_s_n1e1se0s1w1nw0:0"
+ 4,  3, "tx.irrigation_s_n0e0se1s0w0nw0:0"
+ 4,  3, "tx.irrigation_s_n1e0se1s0w0nw0:0"
+ 4,  3, "tx.irrigation_s_n0e1se1s0w0nw0:0"
+ 4,  3, "tx.irrigation_s_n1e1se1s0w0nw0:0"
+ 4,  3, "tx.irrigation_s_n0e0se1s1w0nw0:0"
+ 4,  3, "tx.irrigation_s_n1e0se1s1w0nw0:0"
+ 4,  3, "tx.irrigation_s_n0e1se1s1w0nw0:0"
+ 4,  3, "tx.irrigation_s_n1e1se1s1w0nw0:0"
+ 4,  3, "tx.irrigation_s_n0e0se1s0w1nw0:0"
+ 4,  3, "tx.irrigation_s_n1e0se1s0w1nw0:0"
+ 4,  3, "tx.irrigation_s_n0e1se1s0w1nw0:0"
+ 4,  3, "tx.irrigation_s_n1e1se1s0w1nw0:0"
+ 4,  3, "tx.irrigation_s_n0e0se1s1w1nw0:0"
+ 4,  3, "tx.irrigation_s_n1e0se1s1w1nw0:0"
+ 4,  3, "tx.irrigation_s_n0e1se1s1w1nw0:0"
+ 4,  3, "tx.irrigation_s_n1e1se1s1w1nw0:0"
+ 4,  3, "tx.irrigation_s_n0e0se0s0w0nw1:0"
+ 4,  3, "tx.irrigation_s_n1e0se0s0w0nw1:0"
+ 4,  3, "tx.irrigation_s_n0e1se0s0w0nw1:0"
+ 4,  3, "tx.irrigation_s_n1e1se0s0w0nw1:0"
+ 4,  3, "tx.irrigation_s_n0e0se0s1w0nw1:0"
+ 4,  3, "tx.irrigation_s_n1e0se0s1w0nw1:0"
+ 4,  3, "tx.irrigation_s_n0e1se0s1w0nw1:0"
+ 4,  3, "tx.irrigation_s_n1e1se0s1w0nw1:0"
+ 4,  3, "tx.irrigation_s_n0e0se0s0w1nw1:0"
+ 4,  3, "tx.irrigation_s_n1e0se0s0w1nw1:0"
+ 4,  3, "tx.irrigation_s_n0e1se0s0w1nw1:0"
+ 4,  3, "tx.irrigation_s_n1e1se0s0w1nw1:0"
+ 4,  3, "tx.irrigation_s_n0e0se0s1w1nw1:0"
+ 4,  3, "tx.irrigation_s_n1e0se0s1w1nw1:0"
+ 4,  3, "tx.irrigation_s_n0e1se0s1w1nw1:0"
+ 4,  3, "tx.irrigation_s_n1e1se0s1w1nw1:0"
+ 4,  3, "tx.irrigation_s_n0e0se1s0w0nw1:0"
+ 4,  3, "tx.irrigation_s_n1e0se1s0w0nw1:0"
+ 4,  3, "tx.irrigation_s_n0e1se1s0w0nw1:0"
+ 4,  3, "tx.irrigation_s_n1e1se1s0w0nw1:0"
+ 4,  3, "tx.irrigation_s_n0e0se1s1w0nw1:0"
+ 4,  3, "tx.irrigation_s_n1e0se1s1w0nw1:0"
+ 4,  3, "tx.irrigation_s_n0e1se1s1w0nw1:0"
+ 4,  3, "tx.irrigation_s_n1e1se1s1w0nw1:0"
+ 4,  3, "tx.irrigation_s_n0e0se1s0w1nw1:0"
+ 4,  3, "tx.irrigation_s_n1e0se1s0w1nw1:0"
+ 4,  3, "tx.irrigation_s_n0e1se1s0w1nw1:0"
+ 4,  3, "tx.irrigation_s_n1e1se1s0w1nw1:0"
+ 4,  3, "tx.irrigation_s_n0e0se1s1w1nw1:0"
+ 4,  3, "tx.irrigation_s_n1e0se1s1w1nw1:0"
+ 4,  3, "tx.irrigation_s_n0e1se1s1w1nw1:0"
+ 4,  3, "tx.irrigation_s_n1e1se1s1w1nw1:0"
 
 ; Farmland (as special type), and whether north, south, east, west
 
- 4,  4, "tx.farmland_s_n0e0se0s0w0nw0"
- 4,  4, "tx.farmland_s_n1e0se0s0w0nw0"
- 4,  4, "tx.farmland_s_n0e1se0s0w0nw0"
- 4,  4, "tx.farmland_s_n1e1se0s0w0nw0"
- 4,  4, "tx.farmland_s_n0e0se0s1w0nw0"
- 4,  4, "tx.farmland_s_n1e0se0s1w0nw0"
- 4,  4, "tx.farmland_s_n0e1se0s1w0nw0"
- 4,  4, "tx.farmland_s_n1e1se0s1w0nw0"
- 4,  4, "tx.farmland_s_n0e0se0s0w1nw0"
- 4,  4, "tx.farmland_s_n1e0se0s0w1nw0"
- 4,  4, "tx.farmland_s_n0e1se0s0w1nw0"
- 4,  4, "tx.farmland_s_n1e1se0s0w1nw0"
- 4,  4, "tx.farmland_s_n0e0se0s1w1nw0"
- 4,  4, "tx.farmland_s_n1e0se0s1w1nw0"
- 4,  4, "tx.farmland_s_n0e1se0s1w1nw0"
- 4,  4, "tx.farmland_s_n1e1se0s1w1nw0"
- 4,  4, "tx.farmland_s_n0e0se1s0w0nw0"
- 4,  4, "tx.farmland_s_n1e0se1s0w0nw0"
- 4,  4, "tx.farmland_s_n0e1se1s0w0nw0"
- 4,  4, "tx.farmland_s_n1e1se1s0w0nw0"
- 4,  4, "tx.farmland_s_n0e0se1s1w0nw0"
- 4,  4, "tx.farmland_s_n1e0se1s1w0nw0"
- 4,  4, "tx.farmland_s_n0e1se1s1w0nw0"
- 4,  4, "tx.farmland_s_n1e1se1s1w0nw0"
- 4,  4, "tx.farmland_s_n0e0se1s0w1nw0"
- 4,  4, "tx.farmland_s_n1e0se1s0w1nw0"
- 4,  4, "tx.farmland_s_n0e1se1s0w1nw0"
- 4,  4, "tx.farmland_s_n1e1se1s0w1nw0"
- 4,  4, "tx.farmland_s_n0e0se1s1w1nw0"
- 4,  4, "tx.farmland_s_n1e0se1s1w1nw0"
- 4,  4, "tx.farmland_s_n0e1se1s1w1nw0"
- 4,  4, "tx.farmland_s_n1e1se1s1w1nw0"
- 4,  4, "tx.farmland_s_n0e0se0s0w0nw1"
- 4,  4, "tx.farmland_s_n1e0se0s0w0nw1"
- 4,  4, "tx.farmland_s_n0e1se0s0w0nw1"
- 4,  4, "tx.farmland_s_n1e1se0s0w0nw1"
- 4,  4, "tx.farmland_s_n0e0se0s1w0nw1"
- 4,  4, "tx.farmland_s_n1e0se0s1w0nw1"
- 4,  4, "tx.farmland_s_n0e1se0s1w0nw1"
- 4,  4, "tx.farmland_s_n1e1se0s1w0nw1"
- 4,  4, "tx.farmland_s_n0e0se0s0w1nw1"
- 4,  4, "tx.farmland_s_n1e0se0s0w1nw1"
- 4,  4, "tx.farmland_s_n0e1se0s0w1nw1"
- 4,  4, "tx.farmland_s_n1e1se0s0w1nw1"
- 4,  4, "tx.farmland_s_n0e0se0s1w1nw1"
- 4,  4, "tx.farmland_s_n1e0se0s1w1nw1"
- 4,  4, "tx.farmland_s_n0e1se0s1w1nw1"
- 4,  4, "tx.farmland_s_n1e1se0s1w1nw1"
- 4,  4, "tx.farmland_s_n0e0se1s0w0nw1"
- 4,  4, "tx.farmland_s_n1e0se1s0w0nw1"
- 4,  4, "tx.farmland_s_n0e1se1s0w0nw1"
- 4,  4, "tx.farmland_s_n1e1se1s0w0nw1"
- 4,  4, "tx.farmland_s_n0e0se1s1w0nw1"
- 4,  4, "tx.farmland_s_n1e0se1s1w0nw1"
- 4,  4, "tx.farmland_s_n0e1se1s1w0nw1"
- 4,  4, "tx.farmland_s_n1e1se1s1w0nw1"
- 4,  4, "tx.farmland_s_n0e0se1s0w1nw1"
- 4,  4, "tx.farmland_s_n1e0se1s0w1nw1"
- 4,  4, "tx.farmland_s_n0e1se1s0w1nw1"
- 4,  4, "tx.farmland_s_n1e1se1s0w1nw1"
- 4,  4, "tx.farmland_s_n0e0se1s1w1nw1"
- 4,  4, "tx.farmland_s_n1e0se1s1w1nw1"
- 4,  4, "tx.farmland_s_n0e1se1s1w1nw1"
- 4,  4, "tx.farmland_s_n1e1se1s1w1nw1"
+ 4,  4, "tx.farmland_s_n0e0se0s0w0nw0:0"
+ 4,  4, "tx.farmland_s_n1e0se0s0w0nw0:0"
+ 4,  4, "tx.farmland_s_n0e1se0s0w0nw0:0"
+ 4,  4, "tx.farmland_s_n1e1se0s0w0nw0:0"
+ 4,  4, "tx.farmland_s_n0e0se0s1w0nw0:0"
+ 4,  4, "tx.farmland_s_n1e0se0s1w0nw0:0"
+ 4,  4, "tx.farmland_s_n0e1se0s1w0nw0:0"
+ 4,  4, "tx.farmland_s_n1e1se0s1w0nw0:0"
+ 4,  4, "tx.farmland_s_n0e0se0s0w1nw0:0"
+ 4,  4, "tx.farmland_s_n1e0se0s0w1nw0:0"
+ 4,  4, "tx.farmland_s_n0e1se0s0w1nw0:0"
+ 4,  4, "tx.farmland_s_n1e1se0s0w1nw0:0"
+ 4,  4, "tx.farmland_s_n0e0se0s1w1nw0:0"
+ 4,  4, "tx.farmland_s_n1e0se0s1w1nw0:0"
+ 4,  4, "tx.farmland_s_n0e1se0s1w1nw0:0"
+ 4,  4, "tx.farmland_s_n1e1se0s1w1nw0:0"
+ 4,  4, "tx.farmland_s_n0e0se1s0w0nw0:0"
+ 4,  4, "tx.farmland_s_n1e0se1s0w0nw0:0"
+ 4,  4, "tx.farmland_s_n0e1se1s0w0nw0:0"
+ 4,  4, "tx.farmland_s_n1e1se1s0w0nw0:0"
+ 4,  4, "tx.farmland_s_n0e0se1s1w0nw0:0"
+ 4,  4, "tx.farmland_s_n1e0se1s1w0nw0:0"
+ 4,  4, "tx.farmland_s_n0e1se1s1w0nw0:0"
+ 4,  4, "tx.farmland_s_n1e1se1s1w0nw0:0"
+ 4,  4, "tx.farmland_s_n0e0se1s0w1nw0:0"
+ 4,  4, "tx.farmland_s_n1e0se1s0w1nw0:0"
+ 4,  4, "tx.farmland_s_n0e1se1s0w1nw0:0"
+ 4,  4, "tx.farmland_s_n1e1se1s0w1nw0:0"
+ 4,  4, "tx.farmland_s_n0e0se1s1w1nw0:0"
+ 4,  4, "tx.farmland_s_n1e0se1s1w1nw0:0"
+ 4,  4, "tx.farmland_s_n0e1se1s1w1nw0:0"
+ 4,  4, "tx.farmland_s_n1e1se1s1w1nw0:0"
+ 4,  4, "tx.farmland_s_n0e0se0s0w0nw1:0"
+ 4,  4, "tx.farmland_s_n1e0se0s0w0nw1:0"
+ 4,  4, "tx.farmland_s_n0e1se0s0w0nw1:0"
+ 4,  4, "tx.farmland_s_n1e1se0s0w0nw1:0"
+ 4,  4, "tx.farmland_s_n0e0se0s1w0nw1:0"
+ 4,  4, "tx.farmland_s_n1e0se0s1w0nw1:0"
+ 4,  4, "tx.farmland_s_n0e1se0s1w0nw1:0"
+ 4,  4, "tx.farmland_s_n1e1se0s1w0nw1:0"
+ 4,  4, "tx.farmland_s_n0e0se0s0w1nw1:0"
+ 4,  4, "tx.farmland_s_n1e0se0s0w1nw1:0"
+ 4,  4, "tx.farmland_s_n0e1se0s0w1nw1:0"
+ 4,  4, "tx.farmland_s_n1e1se0s0w1nw1:0"
+ 4,  4, "tx.farmland_s_n0e0se0s1w1nw1:0"
+ 4,  4, "tx.farmland_s_n1e0se0s1w1nw1:0"
+ 4,  4, "tx.farmland_s_n0e1se0s1w1nw1:0"
+ 4,  4, "tx.farmland_s_n1e1se0s1w1nw1:0"
+ 4,  4, "tx.farmland_s_n0e0se1s0w0nw1:0"
+ 4,  4, "tx.farmland_s_n1e0se1s0w0nw1:0"
+ 4,  4, "tx.farmland_s_n0e1se1s0w0nw1:0"
+ 4,  4, "tx.farmland_s_n1e1se1s0w0nw1:0"
+ 4,  4, "tx.farmland_s_n0e0se1s1w0nw1:0"
+ 4,  4, "tx.farmland_s_n1e0se1s1w0nw1:0"
+ 4,  4, "tx.farmland_s_n0e1se1s1w0nw1:0"
+ 4,  4, "tx.farmland_s_n1e1se1s1w0nw1:0"
+ 4,  4, "tx.farmland_s_n0e0se1s0w1nw1:0"
+ 4,  4, "tx.farmland_s_n1e0se1s0w1nw1:0"
+ 4,  4, "tx.farmland_s_n0e1se1s0w1nw1:0"
+ 4,  4, "tx.farmland_s_n1e1se1s0w1nw1:0"
+ 4,  4, "tx.farmland_s_n0e0se1s1w1nw1:0"
+ 4,  4, "tx.farmland_s_n1e0se1s1w1nw1:0"
+ 4,  4, "tx.farmland_s_n0e1se1s1w1nw1:0"
+ 4,  4, "tx.farmland_s_n1e1se1s1w1nw1:0"
 
 }
diff --git a/data/isophex/rivers.spec b/data/isophex/rivers.spec
index 6b33e81cc8..339bad98cb 100644
--- a/data/isophex/rivers.spec
+++ b/data/isophex/rivers.spec
@@ -31,72 +31,72 @@ tiles = { "row", "column","tag"
 ; Rivers (as special type), and whether north, south, east, west
 ; also has river or is ocean:
 
- 0,  0, "road.river_s_n0e0se0s0w0nw0"
- 0,  1, "road.river_s_n1e0se0s0w0nw0"
- 0,  2, "road.river_s_n0e1se0s0w0nw0"
- 0,  3, "road.river_s_n1e1se0s0w0nw0"
- 0,  4, "road.river_s_n0e0se0s1w0nw0"
- 0,  5, "road.river_s_n1e0se0s1w0nw0"
- 0,  6, "road.river_s_n0e1se0s1w0nw0"
- 0,  7, "road.river_s_n1e1se0s1w0nw0"
- 1,  0, "road.river_s_n0e0se0s0w1nw0"
- 1,  1, "road.river_s_n1e0se0s0w1nw0"
- 1,  2, "road.river_s_n0e1se0s0w1nw0"
- 1,  3, "road.river_s_n1e1se0s0w1nw0"
- 1,  4, "road.river_s_n0e0se0s1w1nw0"
- 1,  5, "road.river_s_n1e0se0s1w1nw0"
- 1,  6, "road.river_s_n0e1se0s1w1nw0"
- 1,  7, "road.river_s_n1e1se0s1w1nw0"
+ 0,  0, "road.river_s_n0e0se0s0w0nw0:0"
+ 0,  1, "road.river_s_n1e0se0s0w0nw0:0"
+ 0,  2, "road.river_s_n0e1se0s0w0nw0:0"
+ 0,  3, "road.river_s_n1e1se0s0w0nw0:0"
+ 0,  4, "road.river_s_n0e0se0s1w0nw0:0"
+ 0,  5, "road.river_s_n1e0se0s1w0nw0:0"
+ 0,  6, "road.river_s_n0e1se0s1w0nw0:0"
+ 0,  7, "road.river_s_n1e1se0s1w0nw0:0"
+ 1,  0, "road.river_s_n0e0se0s0w1nw0:0"
+ 1,  1, "road.river_s_n1e0se0s0w1nw0:0"
+ 1,  2, "road.river_s_n0e1se0s0w1nw0:0"
+ 1,  3, "road.river_s_n1e1se0s0w1nw0:0"
+ 1,  4, "road.river_s_n0e0se0s1w1nw0:0"
+ 1,  5, "road.river_s_n1e0se0s1w1nw0:0"
+ 1,  6, "road.river_s_n0e1se0s1w1nw0:0"
+ 1,  7, "road.river_s_n1e1se0s1w1nw0:0"
 
- 2,  0, "road.river_s_n0e0se1s0w0nw0"
- 2,  1, "road.river_s_n1e0se1s0w0nw0"
- 2,  2, "road.river_s_n0e1se1s0w0nw0"
- 2,  3, "road.river_s_n1e1se1s0w0nw0"
- 2,  4, "road.river_s_n0e0se1s1w0nw0"
- 2,  5, "road.river_s_n1e0se1s1w0nw0"
- 2,  6, "road.river_s_n0e1se1s1w0nw0"
- 2,  7, "road.river_s_n1e1se1s1w0nw0"
- 3,  0, "road.river_s_n0e0se1s0w1nw0"
- 3,  1, "road.river_s_n1e0se1s0w1nw0"
- 3,  2, "road.river_s_n0e1se1s0w1nw0"
- 3,  3, "road.river_s_n1e1se1s0w1nw0"
- 3,  4, "road.river_s_n0e0se1s1w1nw0"
- 3,  5, "road.river_s_n1e0se1s1w1nw0"
- 3,  6, "road.river_s_n0e1se1s1w1nw0"
- 3,  7, "road.river_s_n1e1se1s1w1nw0"
+ 2,  0, "road.river_s_n0e0se1s0w0nw0:0"
+ 2,  1, "road.river_s_n1e0se1s0w0nw0:0"
+ 2,  2, "road.river_s_n0e1se1s0w0nw0:0"
+ 2,  3, "road.river_s_n1e1se1s0w0nw0:0"
+ 2,  4, "road.river_s_n0e0se1s1w0nw0:0"
+ 2,  5, "road.river_s_n1e0se1s1w0nw0:0"
+ 2,  6, "road.river_s_n0e1se1s1w0nw0:0"
+ 2,  7, "road.river_s_n1e1se1s1w0nw0:0"
+ 3,  0, "road.river_s_n0e0se1s0w1nw0:0"
+ 3,  1, "road.river_s_n1e0se1s0w1nw0:0"
+ 3,  2, "road.river_s_n0e1se1s0w1nw0:0"
+ 3,  3, "road.river_s_n1e1se1s0w1nw0:0"
+ 3,  4, "road.river_s_n0e0se1s1w1nw0:0"
+ 3,  5, "road.river_s_n1e0se1s1w1nw0:0"
+ 3,  6, "road.river_s_n0e1se1s1w1nw0:0"
+ 3,  7, "road.river_s_n1e1se1s1w1nw0:0"
 
- 4,  0, "road.river_s_n0e0se0s0w0nw1"
- 4,  1, "road.river_s_n1e0se0s0w0nw1"
- 4,  2, "road.river_s_n0e1se0s0w0nw1"
- 4,  3, "road.river_s_n1e1se0s0w0nw1"
- 4,  4, "road.river_s_n0e0se0s1w0nw1"
- 4,  5, "road.river_s_n1e0se0s1w0nw1"
- 4,  6, "road.river_s_n0e1se0s1w0nw1"
- 4,  7, "road.river_s_n1e1se0s1w0nw1"
- 5,  0, "road.river_s_n0e0se0s0w1nw1"
- 5,  1, "road.river_s_n1e0se0s0w1nw1"
- 5,  2, "road.river_s_n0e1se0s0w1nw1"
- 5,  3, "road.river_s_n1e1se0s0w1nw1"
- 5,  4, "road.river_s_n0e0se0s1w1nw1"
- 5,  5, "road.river_s_n1e0se0s1w1nw1"
- 5,  6, "road.river_s_n0e1se0s1w1nw1"
- 5,  7, "road.river_s_n1e1se0s1w1nw1"
+ 4,  0, "road.river_s_n0e0se0s0w0nw1:0"
+ 4,  1, "road.river_s_n1e0se0s0w0nw1:0"
+ 4,  2, "road.river_s_n0e1se0s0w0nw1:0"
+ 4,  3, "road.river_s_n1e1se0s0w0nw1:0"
+ 4,  4, "road.river_s_n0e0se0s1w0nw1:0"
+ 4,  5, "road.river_s_n1e0se0s1w0nw1:0"
+ 4,  6, "road.river_s_n0e1se0s1w0nw1:0"
+ 4,  7, "road.river_s_n1e1se0s1w0nw1:0"
+ 5,  0, "road.river_s_n0e0se0s0w1nw1:0"
+ 5,  1, "road.river_s_n1e0se0s0w1nw1:0"
+ 5,  2, "road.river_s_n0e1se0s0w1nw1:0"
+ 5,  3, "road.river_s_n1e1se0s0w1nw1:0"
+ 5,  4, "road.river_s_n0e0se0s1w1nw1:0"
+ 5,  5, "road.river_s_n1e0se0s1w1nw1:0"
+ 5,  6, "road.river_s_n0e1se0s1w1nw1:0"
+ 5,  7, "road.river_s_n1e1se0s1w1nw1:0"
 
- 6,  0, "road.river_s_n0e0se1s0w0nw1"
- 6,  1, "road.river_s_n1e0se1s0w0nw1"
- 6,  2, "road.river_s_n0e1se1s0w0nw1"
- 6,  3, "road.river_s_n1e1se1s0w0nw1"
- 6,  4, "road.river_s_n0e0se1s1w0nw1"
- 6,  5, "road.river_s_n1e0se1s1w0nw1"
- 6,  6, "road.river_s_n0e1se1s1w0nw1"
- 6,  7, "road.river_s_n1e1se1s1w0nw1"
- 7,  0, "road.river_s_n0e0se1s0w1nw1"
- 7,  1, "road.river_s_n1e0se1s0w1nw1"
- 7,  2, "road.river_s_n0e1se1s0w1nw1"
- 7,  3, "road.river_s_n1e1se1s0w1nw1"
- 7,  4, "road.river_s_n0e0se1s1w1nw1"
- 7,  5, "road.river_s_n1e0se1s1w1nw1"
- 7,  6, "road.river_s_n0e1se1s1w1nw1"
- 7,  7, "road.river_s_n1e1se1s1w1nw1"
+ 6,  0, "road.river_s_n0e0se1s0w0nw1:0"
+ 6,  1, "road.river_s_n1e0se1s0w0nw1:0"
+ 6,  2, "road.river_s_n0e1se1s0w0nw1:0"
+ 6,  3, "road.river_s_n1e1se1s0w0nw1:0"
+ 6,  4, "road.river_s_n0e0se1s1w0nw1:0"
+ 6,  5, "road.river_s_n1e0se1s1w0nw1:0"
+ 6,  6, "road.river_s_n0e1se1s1w0nw1:0"
+ 6,  7, "road.river_s_n1e1se1s1w0nw1:0"
+ 7,  0, "road.river_s_n0e0se1s0w1nw1:0"
+ 7,  1, "road.river_s_n1e0se1s0w1nw1:0"
+ 7,  2, "road.river_s_n0e1se1s0w1nw1:0"
+ 7,  3, "road.river_s_n1e1se1s0w1nw1:0"
+ 7,  4, "road.river_s_n0e0se1s1w1nw1:0"
+ 7,  5, "road.river_s_n1e0se1s1w1nw1:0"
+ 7,  6, "road.river_s_n0e1se1s1w1nw1:0"
+ 7,  7, "road.river_s_n1e1se1s1w1nw1:0"
 
 }
diff --git a/data/isophex/terrain2.spec b/data/isophex/terrain2.spec
index 1c6e7c3845..b1ead205a9 100644
--- a/data/isophex/terrain2.spec
+++ b/data/isophex/terrain2.spec
@@ -242,12 +242,12 @@ tiles = { "row", "column","tag"
 
 ; River outlets
 
- 6,  0, "road.river_outlet_n"
- 6,  1, "road.river_outlet_e"
- 6,  2, "road.river_outlet_s"
- 6,  3, "road.river_outlet_w"
- 6,  4, "road.river_outlet_se"
- 6,  5, "road.river_outlet_nw"
+ 6,  0, "road.river_outlet_n:0"
+ 6,  1, "road.river_outlet_e:0"
+ 6,  2, "road.river_outlet_s:0"
+ 6,  3, "road.river_outlet_w:0"
+ 6,  4, "road.river_outlet_se:0"
+ 6,  5, "road.river_outlet_nw:0"
 
 }
 
diff --git a/data/isotrident/terrain2.spec b/data/isotrident/terrain2.spec
index 0c72307c9a..bb7bc06e6f 100644
--- a/data/isotrident/terrain2.spec
+++ b/data/isotrident/terrain2.spec
@@ -26,24 +26,24 @@ tiles = { "row", "column","tag"
 ; Rivers (as special type), and whether north, south, east, west
 ; also has river or is ocean:
 
- 2,  0, "road.river_s_n0e0s0w0"
- 2,  1, "road.river_s_n1e0s0w0"
- 2,  2, "road.river_s_n0e1s0w0"
- 2,  3, "road.river_s_n1e1s0w0"
- 2,  4, "road.river_s_n0e0s1w0"
- 2,  5, "road.river_s_n1e0s1w0"
- 2,  6, "road.river_s_n0e1s1w0"
- 2,  7, "road.river_s_n1e1s1w0"
- 3,  0, "road.river_s_n0e0s0w1"
- 3,  1, "road.river_s_n1e0s0w1"
- 3,  2, "road.river_s_n0e1s0w1"
- 3,  3, "road.river_s_n1e1s0w1"
- 3,  4, "road.river_s_n0e0s1w1"
- 3,  5, "road.river_s_n1e0s1w1"
- 3,  6, "road.river_s_n0e1s1w1"
- 3,  7, "road.river_s_n1e1s1w1"
-
-;forests as overlay
+ 2,  0, "road.river_s_n0e0s0w0:0"
+ 2,  1, "road.river_s_n1e0s0w0:0"
+ 2,  2, "road.river_s_n0e1s0w0:0"
+ 2,  3, "road.river_s_n1e1s0w0:0"
+ 2,  4, "road.river_s_n0e0s1w0:0"
+ 2,  5, "road.river_s_n1e0s1w0:0"
+ 2,  6, "road.river_s_n0e1s1w0:0"
+ 2,  7, "road.river_s_n1e1s1w0:0"
+ 3,  0, "road.river_s_n0e0s0w1:0"
+ 3,  1, "road.river_s_n1e0s0w1:0"
+ 3,  2, "road.river_s_n0e1s0w1:0"
+ 3,  3, "road.river_s_n1e1s0w1:0"
+ 3,  4, "road.river_s_n0e0s1w1:0"
+ 3,  5, "road.river_s_n1e0s1w1:0"
+ 3,  6, "road.river_s_n0e1s1w1:0"
+ 3,  7, "road.river_s_n1e1s1w1:0"
+
+; Forests as overlay
 
  4,  0, "t.l1.forest_n0e0s0w0"
  4,  1, "t.l1.forest_n1e0s0w0"
@@ -100,12 +100,12 @@ tiles = { "row", "column","tag"
  9,  6, "t.l1.hills_n0e1s1w1"
  9,  7, "t.l1.hills_n1e1s1w1"
 
-;river outlets
+; River outlets
 
- 10, 0, "road.river_outlet_n"
- 10, 1, "road.river_outlet_e"
- 10, 2, "road.river_outlet_s"
- 10, 3, "road.river_outlet_w"
+ 10, 0, "road.river_outlet_n:0"
+ 10, 1, "road.river_outlet_e:0"
+ 10, 2, "road.river_outlet_s:0"
+ 10, 3, "road.river_outlet_w:0"
 
 }
 
diff --git a/data/trident/tiles.spec b/data/trident/tiles.spec
index 4063422c73..34e1571c60 100644
--- a/data/trident/tiles.spec
+++ b/data/trident/tiles.spec
@@ -427,29 +427,29 @@ tiles = { "row", "column", "tag"
 ; Rivers (as special type), and whether north, south, east, west
 ; also has river or is ocean:
 
- 13,  0, "road.river_s_n0e0s0w0"
- 13,  1, "road.river_s_n1e0s0w0"
- 13,  2, "road.river_s_n0e1s0w0"
- 13,  3, "road.river_s_n1e1s0w0"
- 13,  4, "road.river_s_n0e0s1w0"
- 13,  5, "road.river_s_n1e0s1w0"
- 13,  6, "road.river_s_n0e1s1w0"
- 13,  7, "road.river_s_n1e1s1w0"
- 13,  8, "road.river_s_n0e0s0w1"
- 13,  9, "road.river_s_n1e0s0w1"
- 13, 10, "road.river_s_n0e1s0w1"
- 13, 11, "road.river_s_n1e1s0w1"
- 13, 12, "road.river_s_n0e0s1w1"
- 13, 13, "road.river_s_n1e0s1w1"
- 13, 14, "road.river_s_n0e1s1w1"
- 13, 15, "road.river_s_n1e1s1w1"
+ 13,  0, "road.river_s_n0e0s0w0:0"
+ 13,  1, "road.river_s_n1e0s0w0:0"
+ 13,  2, "road.river_s_n0e1s0w0:0"
+ 13,  3, "road.river_s_n1e1s0w0:0"
+ 13,  4, "road.river_s_n0e0s1w0:0"
+ 13,  5, "road.river_s_n1e0s1w0:0"
+ 13,  6, "road.river_s_n0e1s1w0:0"
+ 13,  7, "road.river_s_n1e1s1w0:0"
+ 13,  8, "road.river_s_n0e0s0w1:0"
+ 13,  9, "road.river_s_n1e0s0w1:0"
+ 13, 10, "road.river_s_n0e1s0w1:0"
+ 13, 11, "road.river_s_n1e1s0w1:0"
+ 13, 12, "road.river_s_n0e0s1w1:0"
+ 13, 13, "road.river_s_n1e0s1w1:0"
+ 13, 14, "road.river_s_n0e1s1w1:0"
+ 13, 15, "road.river_s_n1e1s1w1:0"
 
 ; River outlets, river to north, south, east, west
 
-  14, 12, "road.river_outlet_n"
-  14, 13, "road.river_outlet_w"
-  14, 14, "road.river_outlet_s"
-  14, 15, "road.river_outlet_e"
+  14, 12, "road.river_outlet_n:0"
+  14, 13, "road.river_outlet_w:0"
+  14, 14, "road.river_outlet_s:0"
+  14, 15, "road.river_outlet_e:0"
 
 ; Terrain special resources:
 
-- 
2.47.2

