Complete.Org: Mailing Lists: Archives: freeciv-dev: February 2004:
[Freeciv-Dev] Re: (PR#7440) don't hard-code standard and oil mines
Home

[Freeciv-Dev] Re: (PR#7440) don't hard-code standard and oil mines

[Top] [All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
To: undisclosed-recipients: ;
Subject: [Freeciv-Dev] Re: (PR#7440) don't hard-code standard and oil mines
From: "Jason Short" <jdorje@xxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 18 Feb 2004 20:53:07 -0800
Reply-to: rt@xxxxxxxxxxx

<URL: http://rt.freeciv.org/Ticket/Display.html?id=7440 >

Jason Short wrote:
> <URL: http://rt.freeciv.org/Ticket/Display.html?id=7440 >
> 
> Currently oil mines are drawn on desert and arctic, while "regular" 
> mines are drawn on hills and mountains.  This is hard-coded in tilespec.c.
> 
> With this simple patch, the sprite to use for a mine is put into the 
> tileset terrain data.

This version is a bit safer.  It will simply not show the mine sprite if 
the tileset doesn't include it (through error or incompleteness).

jason

Index: client/tilespec.c
===================================================================
RCS file: /home/freeciv/CVS/freeciv/client/tilespec.c,v
retrieving revision 1.140
diff -u -r1.140 tilespec.c
--- client/tilespec.c   2004/02/19 00:47:15     1.140
+++ client/tilespec.c   2004/02/19 04:50:54
@@ -695,6 +695,8 @@
                                           terrains[i]);
     terr->match_type = secfile_lookup_int(file, "%s.match_type",
                                          terrains[i]);
+    terr->mine_tag = secfile_lookup_str_default(file, NULL, "%s.mine_sprite",
+                                               terrains[i]);
 
     if (terr->is_layered && terr->match_type == 0) {
       freelog(LOG_FATAL, "%s is layered but has no matching type set.",
@@ -1007,8 +1009,6 @@
   SET_SPRITE(user.attention, "user.attention");
 
   SET_SPRITE(tx.fallout,    "tx.fallout");
-  SET_SPRITE(tx.mine,       "tx.mine");
-  SET_SPRITE_ALT(tx.oil_mine, "tx.oil_mine", "tx.mine");
   SET_SPRITE(tx.pollution,  "tx.pollution");
   SET_SPRITE(tx.village,    "tx.village");
   SET_SPRITE(tx.fortress,   "tx.fortress");
@@ -1222,6 +1222,12 @@
     /* should probably do something if NULL, eg generic default? */
   }
 
+  if (draw->mine_tag) {
+    draw->mine = load_sprite(draw->mine_tag);
+  } else {
+    draw->mine = NULL;
+  }
+
   sprites.terrain[terrain] = draw;
 }
 
@@ -2017,18 +2023,10 @@
     if (contains_special(tspecial, S_FORTRESS) && draw_fortress_airbase) {
       ADD_SPRITE_SIMPLE(sprites.tx.fortress_back);
     }
-   
-    if (contains_special(tspecial, S_MINE) && draw_mines
-       && (ttype == T_HILLS || ttype == T_MOUNTAINS)) {
-      /* Oil mines come later. */
-      ADD_SPRITE_SIMPLE(sprites.tx.mine);
-    }
-    
-    if (contains_special(tspecial, S_MINE) && draw_mines
-       && ttype != T_HILLS && ttype != T_MOUNTAINS) {
-      /* Must be Glacier or Dessert. The mine sprite looks better on top
-       * of special. */
-      ADD_SPRITE_SIMPLE(sprites.tx.oil_mine);
+
+    if (draw_mines && contains_special(tspecial, S_MINE)
+       && sprites.terrain[ttype]->mine) {
+      ADD_SPRITE_SIMPLE(sprites.terrain[ttype]->mine);
     }
     
     if (contains_special(tspecial, S_HUT) && draw_specials) {
@@ -2206,11 +2204,9 @@
       ADD_SPRITE_SIMPLE(sprites.terrain[ttype]->special[1]);
   }
 
-  if(contains_special(tspecial, S_MINE) && draw_mines) {
-    if(ttype==T_HILLS || ttype==T_MOUNTAINS)
-      ADD_SPRITE_SIMPLE(sprites.tx.mine);
-    else /* desert */
-      ADD_SPRITE_SIMPLE(sprites.tx.oil_mine);
+  if (draw_mines && contains_special(tspecial, S_MINE)
+      && sprites.terrain[ttype]->mine) {
+    ADD_SPRITE_SIMPLE(sprites.terrain[ttype]->mine);
   }
 
   if(contains_special(tspecial, S_HUT) && draw_specials) {
Index: client/tilespec.h
===================================================================
RCS file: /home/freeciv/CVS/freeciv/client/tilespec.h,v
retrieving revision 1.52
diff -u -r1.52 tilespec.h
--- client/tilespec.h   2004/02/19 00:47:15     1.52
+++ client/tilespec.h   2004/02/19 04:50:55
@@ -97,6 +97,7 @@
 
 struct terrain_drawing_data {
   char *name;
+  char *mine_tag;
 
   bool is_blended;
   bool is_layered;
@@ -105,6 +106,7 @@
   struct Sprite *base;
   struct Sprite *blend[NUM_DIRECTION_NSEW];
   struct Sprite *special[2];
+  struct Sprite *mine;
 };
 
 struct named_sprites {
@@ -200,8 +202,6 @@
     struct Sprite
       *farmland[NUM_DIRECTION_NSEW],
       *irrigation[NUM_DIRECTION_NSEW],
-      *mine,
-      *oil_mine,
       *pollution,
       *village,
       *fortress,
Index: data/isotrident.tilespec
===================================================================
RCS file: /home/freeciv/CVS/freeciv/data/isotrident.tilespec,v
retrieving revision 1.9
diff -u -r1.9 isotrident.tilespec
--- data/isotrident.tilespec    2004/02/17 04:52:59     1.9
+++ data/isotrident.tilespec    2004/02/19 04:50:55
@@ -61,11 +61,13 @@
 is_blended = 1
 is_layered = 0
 match_type = 0
+mine_sprite = "tx.oil_mine"
 
 [terrain_desert]
 is_blended = 1
 is_layered = 0
 match_type = 0
+mine_sprite = "tx.oil_mine"
 
 [terrain_forest]
 is_blended = 1
@@ -81,6 +83,7 @@
 is_blended = 1
 is_layered = 1
 match_type = 2
+mine_sprite = "tx.mine"
 
 [terrain_jungle]
 is_blended = 0
@@ -91,6 +94,7 @@
 is_blended = 1
 is_layered = 1
 match_type = 3
+mine_sprite = "tx.mine"
 
 ; ocean has special handling
 [terrain_ocean]
Index: data/trident.tilespec
===================================================================
RCS file: /home/freeciv/CVS/freeciv/data/trident.tilespec,v
retrieving revision 1.16
diff -u -r1.16 trident.tilespec
--- data/trident.tilespec       2004/02/17 04:52:59     1.16
+++ data/trident.tilespec       2004/02/19 04:50:55
@@ -59,11 +59,13 @@
 is_blended = 0
 is_layered = 0
 match_type = 1
+mine_sprite = "tx.oil_mine"
 
 [terrain_desert]
 is_blended = 0
 is_layered = 0
 match_type = 2
+mine_sprite = "tx.oil_mine"
 
 [terrain_forest]
 is_blended = 0
@@ -79,6 +81,7 @@
 is_blended = 0
 is_layered = 0
 match_type = 4
+mine_sprite = "tx.mine"
 
 [terrain_jungle]
 is_blended = 0
@@ -89,6 +92,7 @@
 is_blended = 0
 is_layered = 0
 match_type = 6
+mine_sprite = "tx.mine"
 
 ; ocean has special handling
 [terrain_ocean]

[Prev in Thread] Current Thread [Next in Thread]
  • [Freeciv-Dev] Re: (PR#7440) don't hard-code standard and oil mines, Jason Short <=