<URL: http://bugs.freeciv.org/Ticket/Display.html?id=39381 >

Here is my second pass at the code.  Amplio is ready, but everything else
is broken.  Have to keep the name "Ocean" for various nations to work, so
that is assigned to "Coast", as differentiated from "Lake" and "Sea".

Of course, this doesn't make the graphics any prettier.  I've tried, but
I'm not much good at using GIMP.

Index: server/maphand.c
===================================================================
--- server/maphand.c    (revision 12966)
+++ server/maphand.c    (working copy)
@@ -120,6 +120,108 @@
 }
 
 /**************************************************************************
+  Regenerate bare ocean tiles with coasts, lakes, and deeper oceans
+**************************************************************************/
+static void regenerate_water(void)
+{
+  struct terrain *lake = get_terrain_by_identifier(LAKE_TERRAIN_IDENTIFIER);
+  struct terrain *coast = get_terrain_by_identifier(COAST_TERRAIN_IDENTIFIER);
+  struct terrain *shelf = get_terrain_by_identifier(SHELF_TERRAIN_IDENTIFIER);
+  struct terrain *floor = get_terrain_by_identifier(FLOOR_TERRAIN_IDENTIFIER);
+
+  /* coasts and lakes */
+  whole_map_iterate(ptile) {
+    Continent_id here = tile_get_continent(ptile);
+
+    if (T_UNKNOWN == ptile->terrain)
+      continue;
+
+    if (WATER_TERRAIN_IDENTIFIER != ptile->terrain->identifier)
+      continue;
+
+    if (0 < lake_surrounders[-here]) {
+      tile_set_terrain(ptile,lake);
+      continue;
+    }
+
+    adjc_iterate(ptile, tile2) {
+      if (T_UNKNOWN == tile2->terrain)
+        continue;
+
+      /* glacier not otherwise near land is not coast */
+      if (GLACIER_TERRAIN_IDENTIFIER == tile2->terrain->identifier)
+        continue;
+
+      if (!is_ocean(tile2->terrain)) {
+        tile_set_terrain(ptile,coast);
+        break;
+      }
+    } adjc_iterate_end;
+  } whole_map_iterate_end;
+
+  /* continental shelf */
+  whole_map_iterate(ptile) {
+    int near = 0;
+
+    if (T_UNKNOWN == ptile->terrain)
+      continue;
+
+    if (WATER_TERRAIN_IDENTIFIER != ptile->terrain->identifier)
+      continue;
+
+    adjc_iterate(ptile, tile2) {
+      if (T_UNKNOWN == tile2->terrain)
+        continue;
+
+      switch (tile2->terrain->identifier) {
+      case GLACIER_TERRAIN_IDENTIFIER:
+      case COAST_TERRAIN_IDENTIFIER:
+        near++;
+        break;
+      };
+    } adjc_iterate_end;
+
+    if (6 < near) {
+      /* smooth with neighbors */
+      tile_set_terrain(ptile,coast);
+    } else if (0 < near) {
+      tile_set_terrain(ptile,shelf);
+    }
+  } whole_map_iterate_end;
+
+  /* deep ocean floor */
+  whole_map_iterate(ptile) {
+    int near = 0;
+
+    if (T_UNKNOWN == ptile->terrain)
+      continue;
+
+    if (WATER_TERRAIN_IDENTIFIER != ptile->terrain->identifier)
+      continue;
+
+    adjc_iterate(ptile, tile2) {
+      if (T_UNKNOWN == tile2->terrain)
+        continue;
+
+      switch (tile2->terrain->identifier) {
+      case GLACIER_TERRAIN_IDENTIFIER:
+      case COAST_TERRAIN_IDENTIFIER:
+      case SHELF_TERRAIN_IDENTIFIER:
+        near++;
+        break;
+      };
+    } adjc_iterate_end;
+
+    if (6 < near) {
+      /* smooth with neighbors */
+      tile_set_terrain(ptile,shelf);
+    } else {
+      tile_set_terrain(ptile,floor);
+    }
+  } whole_map_iterate_end;
+}
+
+/**************************************************************************
   Assigns continent and ocean numbers to all tiles, and set
   map.num_continents and map.num_oceans.  Recalculates continent and
   ocean sizes, and lake_surrounders[] arrays.
@@ -167,6 +269,7 @@
   } whole_map_iterate_end;
 
   recalculate_lake_surrounders();
+  regenerate_water();
 
   freelog(LOG_VERBOSE, "Map has %d continents and %d oceans", 
          map.num_continents, map.num_oceans);
Index: data/amplio/terrain2.spec
===================================================================
--- data/amplio/terrain2.spec   (revision 12966)
+++ data/amplio/terrain2.spec   (working copy)
@@ -66,62 +66,62 @@
  3,  7, "t.t_river_n1e1s1w1"
 
 
-;forrests as overlay
+;forests as overlay
 
- 4,  0, "t.l1.forest_n0e0s0w0"
- 4,  1, "t.l1.forest_n1e0s0w0"
- 4,  2, "t.l1.forest_n0e1s0w0"
- 4,  3, "t.l1.forest_n1e1s0w0"
- 4,  4, "t.l1.forest_n0e0s1w0"
- 4,  5, "t.l1.forest_n1e0s1w0"
- 4,  6, "t.l1.forest_n0e1s1w0"
- 4,  7, "t.l1.forest_n1e1s1w0"
- 5,  0, "t.l1.forest_n0e0s0w1"
- 5,  1, "t.l1.forest_n1e0s0w1"
- 5,  2, "t.l1.forest_n0e1s0w1"
- 5,  3, "t.l1.forest_n1e1s0w1"
- 5,  4, "t.l1.forest_n0e0s1w1"
- 5,  5, "t.l1.forest_n1e0s1w1"
- 5,  6, "t.l1.forest_n0e1s1w1"
- 5,  7, "t.l1.forest_n1e1s1w1"
+ 4,  0, "t.l2.forest_n0e0s0w0"
+ 4,  1, "t.l2.forest_n1e0s0w0"
+ 4,  2, "t.l2.forest_n0e1s0w0"
+ 4,  3, "t.l2.forest_n1e1s0w0"
+ 4,  4, "t.l2.forest_n0e0s1w0"
+ 4,  5, "t.l2.forest_n1e0s1w0"
+ 4,  6, "t.l2.forest_n0e1s1w0"
+ 4,  7, "t.l2.forest_n1e1s1w0"
+ 5,  0, "t.l2.forest_n0e0s0w1"
+ 5,  1, "t.l2.forest_n1e0s0w1"
+ 5,  2, "t.l2.forest_n0e1s0w1"
+ 5,  3, "t.l2.forest_n1e1s0w1"
+ 5,  4, "t.l2.forest_n0e0s1w1"
+ 5,  5, "t.l2.forest_n1e0s1w1"
+ 5,  6, "t.l2.forest_n0e1s1w1"
+ 5,  7, "t.l2.forest_n1e1s1w1"
 
 ;mountains as overlay
 
- 6,  0, "t.l1.mountains_n0e0s0w0"
- 6,  1, "t.l1.mountains_n0e0s0w1"
- 6,  2, "t.l1.mountains_n0e0s1w0"
- 6,  3, "t.l1.mountains_n0e0s1w1"
- 6,  4, "t.l1.mountains_n0e1s0w0"
- 6,  5, "t.l1.mountains_n0e1s0w1"
- 6,  6, "t.l1.mountains_n0e1s1w0"
- 6,  7, "t.l1.mountains_n0e1s1w1"
- 7,  0, "t.l1.mountains_n1e0s0w0"
- 7,  1, "t.l1.mountains_n1e0s0w1"
- 7,  2, "t.l1.mountains_n1e0s1w0"
- 7,  3, "t.l1.mountains_n1e0s1w1"
- 7,  4, "t.l1.mountains_n1e1s0w0"
- 7,  5, "t.l1.mountains_n1e1s0w1"
- 7,  6, "t.l1.mountains_n1e1s1w0"
- 7,  7, "t.l1.mountains_n1e1s1w1"
+ 6,  0, "t.l2.mountains_n0e0s0w0"
+ 6,  1, "t.l2.mountains_n0e0s0w1"
+ 6,  2, "t.l2.mountains_n0e0s1w0"
+ 6,  3, "t.l2.mountains_n0e0s1w1"
+ 6,  4, "t.l2.mountains_n0e1s0w0"
+ 6,  5, "t.l2.mountains_n0e1s0w1"
+ 6,  6, "t.l2.mountains_n0e1s1w0"
+ 6,  7, "t.l2.mountains_n0e1s1w1"
+ 7,  0, "t.l2.mountains_n1e0s0w0"
+ 7,  1, "t.l2.mountains_n1e0s0w1"
+ 7,  2, "t.l2.mountains_n1e0s1w0"
+ 7,  3, "t.l2.mountains_n1e0s1w1"
+ 7,  4, "t.l2.mountains_n1e1s0w0"
+ 7,  5, "t.l2.mountains_n1e1s0w1"
+ 7,  6, "t.l2.mountains_n1e1s1w0"
+ 7,  7, "t.l2.mountains_n1e1s1w1"
 
 ;hills as overlay
 
- 8,  0, "t.l1.hills_n0e0s0w0"
- 8,  1, "t.l1.hills_n0e0s0w1"
- 8,  2, "t.l1.hills_n0e0s1w0"
- 8,  3, "t.l1.hills_n0e0s1w1"
- 8,  4, "t.l1.hills_n0e1s0w0"
- 8,  5, "t.l1.hills_n0e1s0w1"
- 8,  6, "t.l1.hills_n0e1s1w0"
- 8,  7, "t.l1.hills_n0e1s1w1"
- 9,  0, "t.l1.hills_n1e0s0w0"
- 9,  1, "t.l1.hills_n1e0s0w1"
- 9,  2, "t.l1.hills_n1e0s1w0"
- 9,  3, "t.l1.hills_n1e0s1w1"
- 9,  4, "t.l1.hills_n1e1s0w0"
- 9,  5, "t.l1.hills_n1e1s0w1"
- 9,  6, "t.l1.hills_n1e1s1w0"
- 9,  7, "t.l1.hills_n1e1s1w1"
+ 8,  0, "t.l2.hills_n0e0s0w0"
+ 8,  1, "t.l2.hills_n0e0s0w1"
+ 8,  2, "t.l2.hills_n0e0s1w0"
+ 8,  3, "t.l2.hills_n0e0s1w1"
+ 8,  4, "t.l2.hills_n0e1s0w0"
+ 8,  5, "t.l2.hills_n0e1s0w1"
+ 8,  6, "t.l2.hills_n0e1s1w0"
+ 8,  7, "t.l2.hills_n0e1s1w1"
+ 9,  0, "t.l2.hills_n1e0s0w0"
+ 9,  1, "t.l2.hills_n1e0s0w1"
+ 9,  2, "t.l2.hills_n1e0s1w0"
+ 9,  3, "t.l2.hills_n1e0s1w1"
+ 9,  4, "t.l2.hills_n1e1s0w0"
+ 9,  5, "t.l2.hills_n1e1s0w1"
+ 9,  6, "t.l2.hills_n1e1s1w0"
+ 9,  7, "t.l2.hills_n1e1s1w1"
 
 ;river outlets
 
@@ -143,77 +143,77 @@
 
 tiles = { "row", "column","tag"
 
-; ocean cell sprites.  See doc/README.graphics
- 0, 0,  "t.l0.ocean_cell_u000"
- 0, 2,  "t.l0.ocean_cell_u100"
- 0, 4,  "t.l0.ocean_cell_u010"
- 0, 6,  "t.l0.ocean_cell_u110"
- 0, 8,  "t.l0.ocean_cell_u001"
- 0, 10, "t.l0.ocean_cell_u101"
- 0, 12, "t.l0.ocean_cell_u011"
- 0, 14, "t.l0.ocean_cell_u111"
- 
- 1, 0,  "t.l0.ocean_cell_d000"
- 1, 2,  "t.l0.ocean_cell_d100"
- 1, 4,  "t.l0.ocean_cell_d010"
- 1, 6,  "t.l0.ocean_cell_d110"
- 1, 8,  "t.l0.ocean_cell_d001"
- 1, 10, "t.l0.ocean_cell_d101"
- 1, 12, "t.l0.ocean_cell_d011"
- 1, 14, "t.l0.ocean_cell_d111"
-
- 2, 0,  "t.l0.ocean_cell_l000"
- 2, 2,  "t.l0.ocean_cell_l100"
- 2, 4,  "t.l0.ocean_cell_l010"
- 2, 6,  "t.l0.ocean_cell_l110"
- 2, 8,  "t.l0.ocean_cell_l001"
- 2, 10, "t.l0.ocean_cell_l101"
- 2, 12, "t.l0.ocean_cell_l011"
- 2, 14, "t.l0.ocean_cell_l111"
-
- 2, 1,  "t.l0.ocean_cell_r000"
- 2, 3,  "t.l0.ocean_cell_r100"
- 2, 5,  "t.l0.ocean_cell_r010"
- 2, 7,  "t.l0.ocean_cell_r110"
- 2, 9,  "t.l0.ocean_cell_r001"
- 2, 11, "t.l0.ocean_cell_r101"
- 2, 13, "t.l0.ocean_cell_r011"
- 2, 15, "t.l0.ocean_cell_r111"
-
-; Deep Ocean sprites.
- 3, 0,  "t.l0.deep_cell_u000"
- 3, 2,  "t.l0.deep_cell_u100"
- 3, 4,  "t.l0.deep_cell_u010"
- 3, 6,  "t.l0.deep_cell_u110"
- 3, 8,  "t.l0.deep_cell_u001"
- 3, 10, "t.l0.deep_cell_u101"
- 3, 12, "t.l0.deep_cell_u011"
- 3, 14, "t.l0.deep_cell_u111"
- 
- 4, 0,  "t.l0.deep_cell_d000"
- 4, 2,  "t.l0.deep_cell_d100"
- 4, 4,  "t.l0.deep_cell_d010"
- 4, 6,  "t.l0.deep_cell_d110"
- 4, 8,  "t.l0.deep_cell_d001"
- 4, 10, "t.l0.deep_cell_d101"
- 4, 12, "t.l0.deep_cell_d011"
- 4, 14, "t.l0.deep_cell_d111"
-
- 5, 0,  "t.l0.deep_cell_l000"
- 5, 2,  "t.l0.deep_cell_l100"
- 5, 4,  "t.l0.deep_cell_l010"
- 5, 6,  "t.l0.deep_cell_l110"
- 5, 8,  "t.l0.deep_cell_l001"
- 5, 10, "t.l0.deep_cell_l101"
- 5, 12, "t.l0.deep_cell_l011"
- 5, 14, "t.l0.deep_cell_l111"
-
- 5, 1,  "t.l0.deep_cell_r000"
- 5, 3,  "t.l0.deep_cell_r100"
- 5, 5,  "t.l0.deep_cell_r010"
- 5, 7,  "t.l0.deep_cell_r110"
- 5, 9,  "t.l0.deep_cell_r001"
- 5, 11, "t.l0.deep_cell_r101"
- 5, 13, "t.l0.deep_cell_r011"
- 5, 15, "t.l0.deep_cell_r111"
+;; ocean cell sprites.  See doc/README.graphics
+; 0, 0,  "t.l0.ocean_cell_u000"
+; 0, 2,  "t.l0.ocean_cell_u100"
+; 0, 4,  "t.l0.ocean_cell_u010"
+; 0, 6,  "t.l0.ocean_cell_u110"
+; 0, 8,  "t.l0.ocean_cell_u001"
+; 0, 10, "t.l0.ocean_cell_u101"
+; 0, 12, "t.l0.ocean_cell_u011"
+; 0, 14, "t.l0.ocean_cell_u111"
+; 
+; 1, 0,  "t.l0.ocean_cell_d000"
+; 1, 2,  "t.l0.ocean_cell_d100"
+; 1, 4,  "t.l0.ocean_cell_d010"
+; 1, 6,  "t.l0.ocean_cell_d110"
+; 1, 8,  "t.l0.ocean_cell_d001"
+; 1, 10, "t.l0.ocean_cell_d101"
+; 1, 12, "t.l0.ocean_cell_d011"
+; 1, 14, "t.l0.ocean_cell_d111"
+;
+; 2, 0,  "t.l0.ocean_cell_l000"
+; 2, 2,  "t.l0.ocean_cell_l100"
+; 2, 4,  "t.l0.ocean_cell_l010"
+; 2, 6,  "t.l0.ocean_cell_l110"
+; 2, 8,  "t.l0.ocean_cell_l001"
+; 2, 10, "t.l0.ocean_cell_l101"
+; 2, 12, "t.l0.ocean_cell_l011"
+; 2, 14, "t.l0.ocean_cell_l111"
+;
+; 2, 1,  "t.l0.ocean_cell_r000"
+; 2, 3,  "t.l0.ocean_cell_r100"
+; 2, 5,  "t.l0.ocean_cell_r010"
+; 2, 7,  "t.l0.ocean_cell_r110"
+; 2, 9,  "t.l0.ocean_cell_r001"
+; 2, 11, "t.l0.ocean_cell_r101"
+; 2, 13, "t.l0.ocean_cell_r011"
+; 2, 15, "t.l0.ocean_cell_r111"
+;
+;; Deep Ocean sprites.
+; 3, 0,  "t.l0.deep_cell_u000"
+; 3, 2,  "t.l0.deep_cell_u100"
+; 3, 4,  "t.l0.deep_cell_u010"
+; 3, 6,  "t.l0.deep_cell_u110"
+; 3, 8,  "t.l0.deep_cell_u001"
+; 3, 10, "t.l0.deep_cell_u101"
+; 3, 12, "t.l0.deep_cell_u011"
+; 3, 14, "t.l0.deep_cell_u111"
+; 
+; 4, 0,  "t.l0.deep_cell_d000"
+; 4, 2,  "t.l0.deep_cell_d100"
+; 4, 4,  "t.l0.deep_cell_d010"
+; 4, 6,  "t.l0.deep_cell_d110"
+; 4, 8,  "t.l0.deep_cell_d001"
+; 4, 10, "t.l0.deep_cell_d101"
+; 4, 12, "t.l0.deep_cell_d011"
+; 4, 14, "t.l0.deep_cell_d111"
+;
+; 5, 0,  "t.l0.deep_cell_l000"
+; 5, 2,  "t.l0.deep_cell_l100"
+; 5, 4,  "t.l0.deep_cell_l010"
+; 5, 6,  "t.l0.deep_cell_l110"
+; 5, 8,  "t.l0.deep_cell_l001"
+; 5, 10, "t.l0.deep_cell_l101"
+; 5, 12, "t.l0.deep_cell_l011"
+; 5, 14, "t.l0.deep_cell_l111"
+;
+; 5, 1,  "t.l0.deep_cell_r000"
+; 5, 3,  "t.l0.deep_cell_r100"
+; 5, 5,  "t.l0.deep_cell_r010"
+; 5, 7,  "t.l0.deep_cell_r110"
+; 5, 9,  "t.l0.deep_cell_r001"
+; 5, 11, "t.l0.deep_cell_r101"
+; 5, 13, "t.l0.deep_cell_r011"
+; 5, 15, "t.l0.deep_cell_r111"
 }
Index: data/amplio/ocean.spec
===================================================================
--- data/amplio/ocean.spec      (revision 12966)
+++ data/amplio/ocean.spec      (working copy)
@@ -25,85 +25,91 @@
 
 tiles = { "row", "column", "tag"
 
-  8, 8, "t.l0.cellgroup_d_d_d_d"
-  8, 7, "t.l0.cellgroup_o_d_d_d"
-  8, 6, "t.l0.cellgroup_c_d_d_d"
-  8, 5, "t.l0.cellgroup_d_d_d_o"
-  8, 4, "t.l0.cellgroup_o_d_d_o"
-  8, 3, "t.l0.cellgroup_c_d_d_o"
-  8, 2, "t.l0.cellgroup_d_d_d_c"
-  8, 1, "t.l0.cellgroup_o_d_d_c"
-  8, 0, "t.l0.cellgroup_c_d_d_c"
-  7, 8, "t.l0.cellgroup_d_o_d_d"
-  7, 7, "t.l0.cellgroup_o_o_d_d"
-  7, 6, "t.l0.cellgroup_c_o_d_d"
-  7, 5, "t.l0.cellgroup_d_o_d_o"
-  7, 4, "t.l0.cellgroup_o_o_d_o"
-  7, 3, "t.l0.cellgroup_c_o_d_o"
-  7, 2, "t.l0.cellgroup_d_o_d_c"
-  7, 1, "t.l0.cellgroup_o_o_d_c"
-  7, 0, "t.l0.cellgroup_c_o_d_c"
-  6, 8, "t.l0.cellgroup_d_c_d_d"
-  6, 7, "t.l0.cellgroup_o_c_d_d"
-  6, 6, "t.l0.cellgroup_c_c_d_d"
-  6, 5, "t.l0.cellgroup_d_c_d_o"
-  6, 4, "t.l0.cellgroup_o_c_d_o"
-  6, 3, "t.l0.cellgroup_c_c_d_o"
-  6, 2, "t.l0.cellgroup_d_c_d_c"
-  6, 1, "t.l0.cellgroup_o_c_d_c"
-  6, 0, "t.l0.cellgroup_c_c_d_c"
-  5, 8, "t.l0.cellgroup_d_d_o_d"
-  5, 7, "t.l0.cellgroup_o_d_o_d"
-  5, 6, "t.l0.cellgroup_c_d_o_d"
-  5, 5, "t.l0.cellgroup_d_d_o_o"
-  5, 4, "t.l0.cellgroup_o_d_o_o"
-  5, 3, "t.l0.cellgroup_c_d_o_o"
-  5, 2, "t.l0.cellgroup_d_d_o_c"
-  5, 1, "t.l0.cellgroup_o_d_o_c"
-  5, 0, "t.l0.cellgroup_c_d_o_c"
-  4, 8, "t.l0.cellgroup_d_o_o_d"
-  4, 7, "t.l0.cellgroup_o_o_o_d"
-  4, 6, "t.l0.cellgroup_c_o_o_d"
-  4, 5, "t.l0.cellgroup_d_o_o_o"
-  4, 4, "t.l0.cellgroup_o_o_o_o"
-  4, 3, "t.l0.cellgroup_c_o_o_o"
-  4, 2, "t.l0.cellgroup_d_o_o_c"
-  4, 1, "t.l0.cellgroup_o_o_o_c"
-  4, 0, "t.l0.cellgroup_c_o_o_c"
-  3, 8, "t.l0.cellgroup_d_c_o_d"
-  3, 7, "t.l0.cellgroup_o_c_o_d"
-  3, 6, "t.l0.cellgroup_c_c_o_d"
-  3, 5, "t.l0.cellgroup_d_c_o_o"
-  3, 4, "t.l0.cellgroup_o_c_o_o"
-  3, 3, "t.l0.cellgroup_c_c_o_o"
-  3, 2, "t.l0.cellgroup_d_c_o_c"
-  3, 1, "t.l0.cellgroup_o_c_o_c"
-  3, 0, "t.l0.cellgroup_c_c_o_c"
-  2, 8, "t.l0.cellgroup_d_d_c_d"
-  2, 7, "t.l0.cellgroup_o_d_c_d"
-  2, 6, "t.l0.cellgroup_c_d_c_d"
-  2, 5, "t.l0.cellgroup_d_d_c_o"
-  2, 4, "t.l0.cellgroup_o_d_c_o"
-  2, 3, "t.l0.cellgroup_c_d_c_o"
-  2, 2, "t.l0.cellgroup_d_d_c_c"
-  2, 1, "t.l0.cellgroup_o_d_c_c"
-  2, 0, "t.l0.cellgroup_c_d_c_c"
-  1, 8, "t.l0.cellgroup_d_o_c_d"
-  1, 7, "t.l0.cellgroup_o_o_c_d"
-  1, 6, "t.l0.cellgroup_c_o_c_d"
-  1, 5, "t.l0.cellgroup_d_o_c_o"
-  1, 4, "t.l0.cellgroup_o_o_c_o"
-  1, 3, "t.l0.cellgroup_c_o_c_o"
-  1, 2, "t.l0.cellgroup_d_o_c_c"
-  1, 1, "t.l0.cellgroup_o_o_c_c"
-  1, 0, "t.l0.cellgroup_c_o_c_c"
-  0, 8, "t.l0.cellgroup_d_c_c_d"
-  0, 7, "t.l0.cellgroup_o_c_c_d"
-  0, 6, "t.l0.cellgroup_c_c_c_d"
-  0, 5, "t.l0.cellgroup_d_c_c_o"
-  0, 4, "t.l0.cellgroup_o_c_c_o"
-  0, 3, "t.l0.cellgroup_c_c_c_o"
-  0, 2, "t.l0.cellgroup_d_c_c_c"
-  0, 1, "t.l0.cellgroup_o_c_c_c"
-  0, 0, "t.l0.cellgroup_c_c_c_c"
+  8,  8, "t.l0.floor1"
+  4,  4, "t.l0.ridge1"
+  8,  8, "t.l0.trench1"
+  4,  4, "t.l0.vent1"
+
+; land/coast/ridge/vent, shelf, floor/trench
+  8, 8, "t.l0.cellgroup_f_f_f_f"
+  8, 7, "t.l0.cellgroup_s_f_f_f"
+  8, 6, "t.l0.cellgroup_l_f_f_f"
+  8, 5, "t.l0.cellgroup_f_f_f_s"
+  8, 4, "t.l0.cellgroup_s_f_f_s"
+  8, 3, "t.l0.cellgroup_l_f_f_s"
+  8, 2, "t.l0.cellgroup_f_f_f_l"
+  8, 1, "t.l0.cellgroup_s_f_f_l"
+  8, 0, "t.l0.cellgroup_l_f_f_l"
+  7, 8, "t.l0.cellgroup_f_s_f_f"
+  7, 7, "t.l0.cellgroup_s_s_f_f"
+  7, 6, "t.l0.cellgroup_l_s_f_f"
+  7, 5, "t.l0.cellgroup_f_s_f_s"
+  7, 4, "t.l0.cellgroup_s_s_f_s"
+  7, 3, "t.l0.cellgroup_l_s_f_s"
+  7, 2, "t.l0.cellgroup_f_s_f_l"
+  7, 1, "t.l0.cellgroup_s_s_f_l"
+  7, 0, "t.l0.cellgroup_l_s_f_l"
+  6, 8, "t.l0.cellgroup_f_l_f_f"
+  6, 7, "t.l0.cellgroup_s_l_f_f"
+  6, 6, "t.l0.cellgroup_l_l_f_f"
+  6, 5, "t.l0.cellgroup_f_l_f_s"
+  6, 4, "t.l0.cellgroup_s_l_f_s"
+  6, 3, "t.l0.cellgroup_l_l_f_s"
+  6, 2, "t.l0.cellgroup_f_l_f_l"
+  6, 1, "t.l0.cellgroup_s_l_f_l"
+  6, 0, "t.l0.cellgroup_l_l_f_l"
+  5, 8, "t.l0.cellgroup_f_f_s_f"
+  5, 7, "t.l0.cellgroup_s_f_s_f"
+  5, 6, "t.l0.cellgroup_l_f_s_f"
+  5, 5, "t.l0.cellgroup_f_f_s_s"
+  5, 4, "t.l0.cellgroup_s_f_s_s"
+  5, 3, "t.l0.cellgroup_l_f_s_s"
+  5, 2, "t.l0.cellgroup_f_f_s_l"
+  5, 1, "t.l0.cellgroup_s_f_s_l"
+  5, 0, "t.l0.cellgroup_l_f_s_l"
+  4, 8, "t.l0.cellgroup_f_s_s_f"
+  4, 7, "t.l0.cellgroup_s_s_s_f"
+  4, 6, "t.l0.cellgroup_l_s_s_f"
+  4, 5, "t.l0.cellgroup_f_s_s_s"
+  4, 4, "t.l0.cellgroup_s_s_s_s"
+  4, 3, "t.l0.cellgroup_l_s_s_s"
+  4, 2, "t.l0.cellgroup_f_s_s_l"
+  4, 1, "t.l0.cellgroup_s_s_s_l"
+  4, 0, "t.l0.cellgroup_l_s_s_l"
+  3, 8, "t.l0.cellgroup_f_l_s_f"
+  3, 7, "t.l0.cellgroup_s_l_s_f"
+  3, 6, "t.l0.cellgroup_l_l_s_f"
+  3, 5, "t.l0.cellgroup_f_l_s_s"
+  3, 4, "t.l0.cellgroup_s_l_s_s"
+  3, 3, "t.l0.cellgroup_l_l_s_s"
+  3, 2, "t.l0.cellgroup_f_l_s_l"
+  3, 1, "t.l0.cellgroup_s_l_s_l"
+  3, 0, "t.l0.cellgroup_l_l_s_l"
+  2, 8, "t.l0.cellgroup_f_f_l_f"
+  2, 7, "t.l0.cellgroup_s_f_l_f"
+  2, 6, "t.l0.cellgroup_l_f_l_f"
+  2, 5, "t.l0.cellgroup_f_f_l_s"
+  2, 4, "t.l0.cellgroup_s_f_l_s"
+  2, 3, "t.l0.cellgroup_l_f_l_s"
+  2, 2, "t.l0.cellgroup_f_f_l_l"
+  2, 1, "t.l0.cellgroup_s_f_l_l"
+  2, 0, "t.l0.cellgroup_l_f_l_l"
+  1, 8, "t.l0.cellgroup_f_s_l_f"
+  1, 7, "t.l0.cellgroup_s_s_l_f"
+  1, 6, "t.l0.cellgroup_l_s_l_f"
+  1, 5, "t.l0.cellgroup_f_s_l_s"
+  1, 4, "t.l0.cellgroup_s_s_l_s"
+  1, 3, "t.l0.cellgroup_l_s_l_s"
+  1, 2, "t.l0.cellgroup_f_s_l_l"
+  1, 1, "t.l0.cellgroup_s_s_l_l"
+  1, 0, "t.l0.cellgroup_l_s_l_l"
+  0, 8, "t.l0.cellgroup_f_l_l_f"
+  0, 7, "t.l0.cellgroup_s_l_l_f"
+  0, 6, "t.l0.cellgroup_l_l_l_f"
+  0, 5, "t.l0.cellgroup_f_l_l_s"
+  0, 4, "t.l0.cellgroup_s_l_l_s"
+  0, 3, "t.l0.cellgroup_l_l_l_s"
+  0, 2, "t.l0.cellgroup_f_l_l_l"
+  0, 1, "t.l0.cellgroup_s_l_l_l"
+  0, 0, "t.l0.cellgroup_l_l_l_l"
 }
Index: data/amplio/terrain1.spec
===================================================================
--- data/amplio/terrain1.spec   (revision 12966)
+++ data/amplio/terrain1.spec   (working copy)
@@ -27,27 +27,27 @@
 tiles = { "row", "column","tag"
 
 ; terrain
- 0,  0, "t.l0.desert1"
+ 0,  0, "t.l1.desert1"
 
- 1,  0, "t.l0.plains1"
+ 1,  0, "t.l1.plains1"
 
- 2,  0, "t.l0.grassland1"
+ 2,  0, "t.l1.grassland1"
 
  2,  0, "t.l0.t_river1"
 
- 3,  0, "t.l0.forest1"
+ 3,  0, "t.l1.forest1"
 
- 4,  0, "t.l0.hills1"
+ 4,  0, "t.l1.hills1"
 
- 5,  0, "t.l0.mountains1"
+ 6,  0, "t.l1.mountains1"
 
- 6,  0, "t.l0.tundra1"
+ 6,  0, "t.l1.tundra1"
 
- 7,  0, "t.l0.arctic1"
+ 7,  0, "t.l1.arctic1"
 
- 8,  0, "t.l0.swamp1"
+ 8,  0, "t.l1.swamp1"
 
- 9,  0, "t.l0.jungle1"
+ 9,  0, "t.l1.jungle1"
 
 ; Terrain special resources:
 
@@ -122,8 +122,14 @@
  15,  0, "tx.darkness"
  15,  2, "mask.tile"
  15,  2, "t.unknown1"
- 15,  3, "t.l0.ocean1"
- 15,  3, "t.l0.deep1"
+;15,  3, "t.l1.ocean1"
+ 15,  3, "t.l1.coast1"
+ 15,  3, "t.l1.shelf1"
+ 15,  3, "t.l1.floor1"
+ 15,  3, "t.l1.ridge1"
+ 15,  3, "t.l1.trench1"
+ 15,  3, "t.l1.vent1"
+;15,  3, "t.l1.deep1"
  15,  4, "user.attention"
  15,  5, "tx.fog"
 }
Index: data/amplio.tilespec
===================================================================
--- data/amplio.tilespec        (revision 12966)
+++ data/amplio.tilespec        (working copy)
@@ -41,7 +41,7 @@
 unit_offset_y = 18
 
 ; The layer in which blending is used (see terrains below)
-blend_layer = 0
+blend_layer = 1
 
 ;Enable citybar
 is_full_citybar = 1
@@ -64,6 +64,7 @@
 files = 
   "amplio/terrain1.spec",
   "amplio/terrain2.spec",
+  "amplio/ocean.spec",
   "amplio/tiles.spec",
   "amplio/fog.spec",
   "misc/small.spec",
@@ -94,101 +95,150 @@
 ; Terrain info - see README.graphics
 
 [layer0]
-match_style = "BOOL"
-match_types = "ocean", "land"
+match_style = "FULL"
+match_types = "l", "s", "f" ;land/coast/ridge/vent, shelf, floor/trench
 
 [layer1]
+match_style = "NONE"
+
+[layer2]
 match_style = "BOOL"
-match_types = "forest", "hills", "mountains", "deep"
+match_types = "forest", "hills", "mountains"
 
+; Water graphics in terrain.ruleset
+;
+[terrain_coast]
+is_blended = 0
+num_layers = 1
+layer0_match_style = "full"
+layer0_match_type = "s"
+layer0_cell_type = "rect"
+
+[terrain_shelf]
+; counterintuitively, use "f"; the graphics draw the edge in the middle
+is_blended = 0
+num_layers = 1
+layer0_match_style = "full"
+layer0_match_type  = "f"
+layer0_cell_type   = "rect"
+
+[terrain_floor]
+is_blended = 0
+num_layers = 1
+layer0_match_style = "full"
+layer0_match_type  = "f"
+layer0_cell_type   = "rect"
+
+[terrain_trench]
+is_blended = 0
+num_layers = 1
+layer0_match_style = "full"
+layer0_match_type  = "f"
+layer0_cell_type   = "rect"
+
+[terrain_ridge]
+is_blended = 0
+num_layers = 1
+layer0_match_style = "full"
+layer0_match_type = "l"
+layer0_cell_type = "rect"
+
+[terrain_vent]
+is_blended = 0
+num_layers = 1
+layer0_match_style = "full"
+layer0_match_type  = "l"
+layer0_cell_type   = "rect"
+
+; Land graphics in terrain.ruleset
+;
 [terrain_arctic]
 is_blended = 1
-num_layers = 1
-layer0_match_type = "land"
+num_layers = 2
+layer0_match_style = "full"
+layer0_match_type = "l"
+layer0_cell_type = "rect"
+layer1_match_style = "none"
 mine_sprite = "tx.oil_mine"
 
 [terrain_desert]
 is_blended = 1
-num_layers = 1
-layer0_match_type = "land"
+num_layers = 2
+layer0_match_style = "full"
+layer0_match_type = "l"
+layer0_cell_type = "rect"
+layer1_match_style = "none"
 mine_sprite = "tx.oil_mine"
 
 [terrain_forest]
 is_blended = 1
-num_layers = 2
-layer0_match_type = "land"
-layer1_match_type = "forest"
-layer1_match_style = "bool"
+num_layers = 3
+layer0_match_style = "full"
+layer0_match_type = "l"
+layer0_cell_type = "rect"
+layer1_match_style = "none"
+layer2_match_type = "forest"
+layer2_match_style = "bool"
 
 [terrain_grassland]
 is_blended = 1
-num_layers = 1
-layer0_match_type = "land"
+num_layers = 2
+layer0_match_style = "full"
+layer0_match_type = "l"
+layer0_cell_type = "rect"
+layer1_match_style = "none"
 
 [terrain_hills]
 is_blended = 1
-num_layers = 2
-layer0_match_type = "land"
-layer1_match_type = "hills"
-layer1_match_style = "bool"
+num_layers = 3
+layer0_match_style = "full"
+layer0_match_type = "l"
+layer0_cell_type = "rect"
+layer1_match_style = "none"
+layer2_match_type = "hills"
+layer2_match_style = "bool"
 mine_sprite = "tx.mine"
 
 [terrain_jungle]
 is_blended = 1
-num_layers = 1
-layer0_match_type = "land"
+num_layers = 2
+layer0_match_style = "full"
+layer0_match_type = "l"
+layer0_cell_type = "rect"
+layer1_match_style = "none"
 
 [terrain_mountains]
 is_blended = 1
-num_layers = 2
-layer0_match_type = "land"
-layer1_match_type = "mountains"
-layer1_match_style = "bool"
+num_layers = 3
+layer0_match_style = "full"
+layer0_match_type = "l"
+layer0_cell_type = "rect"
+layer1_match_style = "none"
+layer2_match_type = "mountains"
+layer2_match_style = "bool"
 mine_sprite = "tx.mine"
 
-[terrain_ocean]
+[terrain_plains]
 is_blended = 1
-num_layers = 1
-layer0_match_style = "bool"
-layer0_match_type = "ocean"
+num_layers = 2
+layer0_match_style = "full"
+layer0_match_type = "l"
 layer0_cell_type = "rect"
+layer1_match_style = "none"
 
-; Deep Ocean is currently quite a hack:
-; - Blending is disabled so there will be no blending
-;   between Ocean and Deep Ocean. Ocean blending tile
-;   is of land colour and we don't want that to appear
-;   in the middle of the ocean.
-; - Deep Ocean is in two layers. Layer0 is setup just
-;   for match_type = "ocean". Ocean will match this
-;   and will not draw coast sprites between Ocean and
-;   Deep Ocean. Layer1 is for actual Deep Ocean drawing.
-;   Ocean will not match this, so Deep Ocean to Ocean
-;   sprites will be drawn.
-;
-; Problems:
-; - There is no blending between Deep Ocean and land tiles
-; - There is no coast drawn beteen Deep Ocean and land tiles
-[terrain_deep]
-is_blended = 0
-num_layers = 2
-layer0_match_style = "bool"
-layer0_match_type  = "ocean"
-layer0_cell_type   = "rect"
-layer1_match_style = "bool"
-layer1_match_type  = "deep"
-layer1_cell_type   = "rect"
-
-[terrain_plains]
-is_blended = 1
-num_layers = 1
-layer0_match_type = "land"
-
 [terrain_swamp]
 is_blended = 1
-num_layers = 1
-layer0_match_type = "land"
+num_layers = 2
+layer0_match_style = "full"
+layer0_match_type = "l"
+layer0_cell_type = "rect"
+layer1_match_style = "none"
 
 [terrain_tundra]
 is_blended = 1
-num_layers = 1
-layer0_match_type = "land"
+num_layers = 2
+layer0_match_style = "full"
+layer0_match_type = "l"
+layer0_cell_type = "rect"
+layer1_match_style = "none"
+
Index: data/default/terrain.ruleset
===================================================================
--- data/default/terrain.ruleset        (revision 12966)
+++ data/default/terrain.ruleset        (working copy)
@@ -22,11 +22,11 @@
 
 [parameters]
 
-; Percentage of "land" tiles required to be adjacent to an ocean tile before
+; Percentage of "land" tiles required to be adjacent to a water tile before
 ; it may be "reclaimed" into a land tile (0-101; 0=anywhere, 101=nowhere)
 ocean_reclaim_requirement_pct = 30
 
-; Percentage of "ocean" tiles required to be adjacent to a land tile before
+; Percentage of "water" tiles required to be adjacent to a land tile before
 ; it may be "channeled" into an ocean tile (0-101; 0=anywhere, 101=nowhere)
 land_channel_requirement_pct = 10
 
@@ -91,9 +91,11 @@
 fallout_trade_penalty=50
 
 ; Below: The individual terrain types, one per section.
+; <PRESUMED OBSOLETE>
 ; For now, the number of such sections must be kept the same (=12).
 ; Also, terrains should be in the same order as defined in common/map.h,
 ; and have similar roles/effects, as some things are still hardwired.
+; </PRESUMED OBSOLETE>
 ; The actual tag used (the * in [terrain_*]) does not matter, except 
 ; it must be unique for each terrain, and it may be used in debug 
 ; output when reading this file.
@@ -152,8 +154,10 @@
 ;   - CanHaveRiver     = Set to 1 if this terrain can have river on it (the
 ;                        actual chance of river generation is controlled
 ;                        separately).
-;   - UnsafeCoast      = This terrain does not provide a safe coast for
+;   - UnsafeCoast      = This terrain does not provide a safe voyage for
 ;                        F_TRIRIEME units.
+;   - UnsafeOcean      = This terrain does not provide a safe voyage for
+;                        F_COASTAL or F_SEAWORTHY units.
 ;   - Oceanic          = This is an "ocean" terrain.  This has a big effect
 ;                        on gameplay.  Naval units can move on oceanic terrain,
 ;                        while land units cannot.  Oceanic tiles can be used
@@ -177,6 +181,367 @@
 ; helptext            = optional help text string; should escape all raw 
 ;                       newlines so that xgettext parsing works
 
+[terrain_legacy_water]
+; undifferentiated open water from old savefiles
+name                 = _("Water")
+graphic              = "floor"
+graphic_alt         = "-"
+identifier          = " "
+movement_cost        = 1
+defense_bonus        = 0
+food                 = 1
+shield               = 0
+trade                = 2
+resources            = "Fish", "Whales"
+road_trade_incr      = 0
+road_time            = 0
+irrigation_result    = "no"
+irrigation_food_incr = 0
+irrigation_time      = 0
+mining_result        = "no"
+mining_shield_incr   = 0
+mining_time          = 0
+transform_result     = "Swamp"
+transform_time       = 36
+rail_time            = 3
+airbase_time         = 3
+fortress_time        = 3
+clean_pollution_time = 3
+clean_fallout_time   = 3
+warmer_wetter_result = "no"
+warmer_drier_result  = "no"
+cooler_wetter_result = "no"
+cooler_drier_result  = "no"
+native_to            = "Sea", "Air", "Missile", "Helicopter"
+flags                = "Oceanic", "NoCities", "NoPollution", "UnsafeCoast"
+property_ocean_depth = 10
+helptext            = _("\
+Oceans cover much of the world, and only sea units (Triremes and\
+ other boats) can travel on them.\
+\n\n\
+Ocean squares can never be polluted or subjected to fallout.\
+")
+
+[terrain_fresh_water]
+name                 = _("Lake")
+graphic              = "coast"
+graphic_alt         = "-"
+identifier          = "+"
+movement_cost        = 1
+defense_bonus        = 0
+food                 = 1
+shield               = 0
+trade                = 2
+resources            = "Fish"
+road_trade_incr      = 0
+road_time            = 0
+irrigation_result    = "no"
+irrigation_food_incr = 0
+irrigation_time      = 0
+mining_result        = "no"
+mining_shield_incr   = 0
+mining_time          = 0
+transform_result     = "Swamp"
+transform_time       = 36
+rail_time            = 3
+airbase_time         = 3
+fortress_time        = 3
+clean_pollution_time = 3
+clean_fallout_time   = 3
+warmer_wetter_result = "no"
+warmer_drier_result  = "no"
+cooler_wetter_result = "no"
+cooler_drier_result  = "no"
+native_to            = "Sea", "Air", "Missile", "Helicopter"
+flags                = "Oceanic", "NoCities", "NoPollution"
+property_ocean_depth = 0
+helptext            = _("\
+Oceans cover much of the world, and only sea units (Triremes and\
+ other boats) can travel on them.\
+\n\n\
+Ocean squares can never be polluted or subjected to fallout.\
+")
+
+[terrain_salt_water]
+name                 = _("Sea")
+graphic              = "coast"
+graphic_alt         = "-"
+identifier          = "-"
+movement_cost        = 1
+defense_bonus        = 0
+food                 = 1
+shield               = 0
+trade                = 2
+resources            = "Fish"
+road_trade_incr      = 0
+road_time            = 0
+irrigation_result    = "no"
+irrigation_food_incr = 0
+irrigation_time      = 0
+mining_result        = "no"
+mining_shield_incr   = 0
+mining_time          = 0
+transform_result     = "Swamp"
+transform_time       = 36
+rail_time            = 3
+airbase_time         = 3
+fortress_time        = 3
+clean_pollution_time = 3
+clean_fallout_time   = 3
+warmer_wetter_result = "no"
+warmer_drier_result  = "no"
+cooler_wetter_result = "no"
+cooler_drier_result  = "no"
+native_to            = "Sea", "Air", "Missile", "Helicopter"
+flags                = "Oceanic", "NoCities", "NoPollution"
+property_ocean_depth = 10
+helptext            = _("\
+Oceans cover much of the world, and only sea units (Triremes and\
+ other boats) can travel on them.\
+\n\n\
+Ocean squares can never be polluted or subjected to fallout.\
+")
+
+[terrain_ocean_coast]
+name                 = _("Ocean")
+graphic              = "coast"
+graphic_alt         = "-"
+identifier          = "."
+movement_cost        = 1
+defense_bonus        = 0
+food                 = 1
+shield               = 0
+trade                = 2
+resources            = "Fish"
+road_trade_incr      = 0
+road_time            = 0
+irrigation_result    = "no"
+irrigation_food_incr = 0
+irrigation_time      = 0
+mining_result        = "no"
+mining_shield_incr   = 0
+mining_time          = 0
+transform_result     = "Swamp"
+transform_time       = 36
+rail_time            = 3
+airbase_time         = 3
+fortress_time        = 3
+clean_pollution_time = 3
+clean_fallout_time   = 3
+warmer_wetter_result = "no"
+warmer_drier_result  = "no"
+cooler_wetter_result = "no"
+cooler_drier_result  = "no"
+native_to            = "Sea", "Air", "Missile", "Helicopter"
+flags                = "Oceanic", "NoCities", "NoPollution"
+property_ocean_depth = 10
+helptext            = _("\
+Oceans cover much of the world, and only sea units (Triremes and\
+ other boats) can travel on them.\
+\n\n\
+Ocean squares can never be polluted or subjected to fallout.\
+")
+
+[terrain_ocean_shelf]
+name                 = _("Shelf")
+graphic              = "shelf"
+graphic_alt         = "-"
+identifier          = ","
+movement_cost        = 1
+defense_bonus        = 0
+food                 = 1
+shield               = 0
+trade                = 2
+resources            = "Fish", "Whales"
+road_trade_incr      = 0
+road_time            = 0
+irrigation_result    = "no"
+irrigation_food_incr = 0
+irrigation_time      = 0
+mining_result        = "no"
+mining_shield_incr   = 0
+mining_time          = 0
+transform_result     = "no"
+transform_time       = 0
+rail_time            = 3
+airbase_time         = 3
+fortress_time        = 3
+clean_pollution_time = 3
+clean_fallout_time   = 3
+warmer_wetter_result = "no"
+warmer_drier_result  = "no"
+cooler_wetter_result = "no"
+cooler_drier_result  = "no"
+native_to            = "Sea", "Air", "Missile", "Helicopter"
+flags                = "Oceanic", "NoCities", "NoPollution", "UnsafeCoast"
+property_ocean_depth = 20
+helptext            = _("\
+Oceans cover much of the world, and only sea units (Triremes and\
+ other boats) can travel on them.\
+\n\n\
+Ocean squares can never be polluted or subjected to fallout.\
+")
+
+[terrain_ocean_floor]
+name                 = _("Briny Deep")
+graphic              = "floor"
+graphic_alt         = "-"
+identifier          = ":"
+movement_cost        = 1
+defense_bonus        = 0
+food                 = 1
+shield               = 0
+trade                = 2
+;resources            = "none"
+road_trade_incr      = 0
+road_time            = 0
+irrigation_result    = "no"
+irrigation_food_incr = 0
+irrigation_time      = 0
+mining_result        = "no"
+mining_shield_incr   = 0
+mining_time          = 0
+transform_result     = "no"
+transform_time       = 0
+rail_time            = 3
+airbase_time         = 3
+fortress_time        = 3
+clean_pollution_time = 3
+clean_fallout_time   = 3
+warmer_wetter_result = "no"
+warmer_drier_result  = "no"
+cooler_wetter_result = "no"
+cooler_drier_result  = "no"
+native_to            = "Sea", "Air", "Missile", "Helicopter"
+flags                = "Oceanic", "NoCities", "NoPollution", "UnsafeCoast"; 
"UnsafeOcean"
+property_ocean_depth = 40
+helptext            = _("\
+Oceans cover much of the world, and only sea units (Triremes and\
+ other boats) can travel on them.\
+\n\n\
+Ocean squares can never be polluted or subjected to fallout.\
+")
+
+[terrain_ocean_trench]
+name                 = _("Abyss")
+graphic              = "trench"
+graphic_alt         = "-"
+identifier          = ";"
+movement_cost        = 1
+defense_bonus        = 0
+food                 = 1
+shield               = 0
+trade                = 2
+;resources            = "none"
+road_trade_incr      = 0
+road_time            = 0
+irrigation_result    = "no"
+irrigation_food_incr = 0
+irrigation_time      = 0
+mining_result        = "no"
+mining_shield_incr   = 0
+mining_time          = 0
+transform_result     = "no"
+transform_time       = 0
+rail_time            = 3
+airbase_time         = 3
+fortress_time        = 3
+clean_pollution_time = 3
+clean_fallout_time   = 3
+warmer_wetter_result = "no"
+warmer_drier_result  = "no"
+cooler_wetter_result = "no"
+cooler_drier_result  = "no"
+native_to            = "Sea", "Air", "Missile", "Helicopter"
+flags                = "Oceanic", "NoCities", "NoPollution", "UnsafeCoast"; 
"UnsafeOcean"
+property_ocean_depth = 80
+helptext            = _("\
+Oceans cover much of the world, and only sea units (Triremes and\
+ other boats) can travel on them.\
+\n\n\
+Ocean squares can never be polluted or subjected to fallout.\
+")
+
+[terrain_ocean_ridge]
+name                 = _("Oceanic Ridge")
+graphic              = "ridge"
+graphic_alt         = "-"
+identifier          = "^"
+movement_cost        = 1
+defense_bonus        = 0
+food                 = 1
+shield               = 0
+trade                = 2
+;resources            = "none"
+road_trade_incr      = 0
+road_time            = 0
+irrigation_result    = "no"
+irrigation_food_incr = 0
+irrigation_time      = 0
+mining_result        = "no"
+mining_shield_incr   = 0
+mining_time          = 0
+transform_result     = "no"
+transform_time       = 0
+rail_time            = 3
+airbase_time         = 3
+fortress_time        = 3
+clean_pollution_time = 3
+clean_fallout_time   = 3
+warmer_wetter_result = "no"
+warmer_drier_result  = "no"
+cooler_wetter_result = "no"
+cooler_drier_result  = "no"
+native_to            = "Sea", "Air", "Missile", "Helicopter"
+flags                = "Oceanic", "NoCities", "NoPollution", "UnsafeCoast"; 
"UnsafeOcean"
+property_ocean_depth = 30
+helptext            = _("\
+Oceans cover much of the world, and only sea units (Triremes and\
+ other boats) can travel on them.\
+\n\n\
+Ocean squares can never be polluted or subjected to fallout.\
+")
+
+[terrain_ocean_vent]
+name                 = _("Oceanic Vent")
+graphic              = "vent"
+graphic_alt         = "-"
+identifier          = "!"
+movement_cost        = 1
+defense_bonus        = 0
+food                 = 1
+shield               = 0
+trade                = 2
+;resources            = "none"
+road_trade_incr      = 0
+road_time            = 0
+irrigation_result    = "no"
+irrigation_food_incr = 0
+irrigation_time      = 0
+mining_result        = "no"
+mining_shield_incr   = 0
+mining_time          = 0
+transform_result     = "no"
+transform_time       = 0
+rail_time            = 3
+airbase_time         = 3
+fortress_time        = 3
+clean_pollution_time = 3
+clean_fallout_time   = 3
+warmer_wetter_result = "no"
+warmer_drier_result  = "no"
+cooler_wetter_result = "no"
+cooler_drier_result  = "no"
+native_to            = "Sea", "Air", "Missile", "Helicopter"
+flags                = "Oceanic", "NoCities", "NoPollution", "UnsafeCoast"; 
"UnsafeOcean"
+property_ocean_depth = 30
+helptext            = _("\
+Oceans cover much of the world, and only sea units (Triremes and\
+ other boats) can travel on them.\
+\n\n\
+Ocean squares can never be polluted or subjected to fallout.\
+")
+
 [terrain_glacier]
 name                 = _("Glacier")
 graphic              = "arctic"
@@ -449,46 +814,6 @@
  trade very difficult.\
 ")
 
-[terrain_ocean]
-name                 = _("Ocean")
-graphic              = "ocean"
-graphic_alt         = "-"
-identifier          = " "
-movement_cost        = 1
-defense_bonus        = 0
-food                 = 1
-shield               = 0
-trade                = 2
-resources            = "Fish", "Whales"
-road_trade_incr      = 0
-road_time            = 0
-irrigation_result    = "no"
-irrigation_food_incr = 0
-irrigation_time      = 0
-mining_result        = "no"
-mining_shield_incr   = 0
-mining_time          = 0
-transform_result     = "Swamp"
-transform_time       = 36
-rail_time            = 3
-airbase_time         = 3
-fortress_time        = 3
-clean_pollution_time = 3
-clean_fallout_time   = 3
-warmer_wetter_result = "no"
-warmer_drier_result  = "no"
-cooler_wetter_result = "no"
-cooler_drier_result  = "no"
-native_to            = "Sea", "Air", "Missile", "Helicopter"
-flags                = "Oceanic", "NoPollution", "UnsafeCoast", "NoCities"
-property_ocean_depth = 10
-helptext            = _("\
-Oceans cover much of the world, and only sea units (Triremes and\
- other boats) can travel on them.\
-\n\n\
-Ocean squares can never be polluted or subjected to fallout.\
-")
-
 [terrain_plains]
 name                 = _("Plains")
 graphic              = "plains"
Index: data/misc/colors.tilespec
===================================================================
--- data/misc/colors.tilespec   (revision 12966)
+++ data/misc/colors.tilespec   (working copy)
@@ -31,7 +31,15 @@
   142, 121,  63, "Hills"
   167,  77,  38, "Mountains"
     0,   0, 220, "Ocean"
+    0,   0, 220, "Coast"
+    0,   0, 220, "Lake"
+    0,   0, 220, "Sea"
+    0,   0, 200, "Shelf"
     0,   0, 170, "Deep Ocean"
+    0,   0, 170, "Briny Deep"
+    0,   0, 170, "Abyss"
+    0,   0, 170, "Oceanic Ridge"
+    0,   0, 170, "Oceanic Vent"
 }
 
 ; Mapview
Index: common/terrain.c
===================================================================
--- common/terrain.c    (revision 12966)
+++ common/terrain.c    (working copy)
@@ -79,6 +79,20 @@
 }
 
 /****************************************************************************
+  Return the terrain type matching the identifier, or T_UNKNOWN if none 
matches.
+****************************************************************************/
+struct terrain *get_terrain_by_identifier(const char identifier)
+{
+  terrain_type_iterate(pterrain) {
+    if (pterrain->identifier == identifier) {
+      return pterrain;
+    }
+  } terrain_type_iterate_end;
+
+  return T_UNKNOWN;
+}
+
+/****************************************************************************
   Return the terrain type matching the name, or T_UNKNOWN if none matches.
 ****************************************************************************/
 struct terrain *get_terrain_by_name(const char *name)
Index: common/terrain.h
===================================================================
--- common/terrain.h    (revision 12966)
+++ common/terrain.h    (working copy)
@@ -125,6 +125,16 @@
 
   /* Server-only. */
   char identifier; /* Single-character identifier used in savegames. */
+#define WATER_TERRAIN_IDENTIFIER ' '
+#define LAKE_TERRAIN_IDENTIFIER '+'
+#define SEA_TERRAIN_IDENTIFIER '-'
+#define COAST_TERRAIN_IDENTIFIER '.'
+#define SHELF_TERRAIN_IDENTIFIER ','
+#define FLOOR_TERRAIN_IDENTIFIER ':'
+#define TRENCH_TERRAIN_IDENTIFIER ';'
+#define RIDGE_TERRAIN_IDENTIFIER '^'
+#define VENT_TERRAIN_IDENTIFIER '!'
+#define GLACIER_TERRAIN_IDENTIFIER 'a'
 #define UNKNOWN_TERRAIN_IDENTIFIER 'u'
 
   int movement_cost;
@@ -195,6 +205,7 @@
 
 /* General terrain accessor functions. */
 struct terrain *get_terrain(Terrain_type_id type);
+struct terrain *get_terrain_by_identifier(const char identifier);
 struct terrain *get_terrain_by_name(const char *name);
 const char *get_name(const struct terrain *pterrain);
 enum terrain_flag_id terrain_flag_from_str(const char *s);
_______________________________________________
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev

Reply via email to