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

On 1/16/07, Marko Lindqvist <[EMAIL PROTECTED]> wrote:
>
>  Only F_FIGHER can attack air units. It has been hardcoded to
> AIR_MOVING. This patch turns it into unit class flag.

 - Better helptext for F_FIGHTER
 - Helptext for UCF_UNREACHABLE


 - ML

diff -Nurd -X.diff_ignore freeciv/client/helpdata.c freeciv/client/helpdata.c
--- freeciv/client/helpdata.c	2007-01-17 09:20:24.000000000 +0200
+++ freeciv/client/helpdata.c	2007-01-18 16:38:33.000000000 +0200
@@ -771,6 +771,10 @@
     sprintf(buf + strlen(buf),
 	    _("  * Gets used up in making an attack.\n"));
   }
+  if (unit_class_flag(get_unit_class(utype), UCF_UNREACHABLE)) {
+    sprintf(buf + strlen(buf),
+	    _("  * Is unreachable. Most units cannot attack this one.\n"));
+  }
 
   if (utype->impr_requirement != B_LAST) {
     sprintf(buf + strlen(buf),
@@ -915,7 +919,7 @@
     sprintf(buf + strlen(buf), _("* May not be bribed.\n"));
   }
   if (unit_type_flag(utype, F_FIGHTER)) {
-    sprintf(buf + strlen(buf), _("* Can attack enemy air units.\n"));
+    sprintf(buf + strlen(buf), _("* Can attack otherwise unreachable enemy units.\n"));
   }
   if (unit_type_flag(utype, F_PARTIAL_INVIS)) {
     sprintf(buf + strlen(buf), _("* Is invisible except when next to an"
diff -Nurd -X.diff_ignore freeciv/common/combat.c freeciv/common/combat.c
--- freeciv/common/combat.c	2006-07-21 23:18:09.000000000 +0300
+++ freeciv/common/combat.c	2007-01-18 16:37:07.000000000 +0200
@@ -93,7 +93,8 @@
   }
 
   /* 2. Only fighters can attack planes, except in city or airbase attacks */
-  if (!unit_flag(punit, F_FIGHTER) && is_air_unit(pdefender)
+  if (!unit_flag(punit, F_FIGHTER)
+      && unit_class_flag(get_unit_class(unit_type(pdefender)), UCF_UNREACHABLE)
       && !(pcity || tile_has_special(dest_tile, S_AIRBASE))) {
     return FALSE;
   }
diff -Nurd -X.diff_ignore freeciv/common/unittype.c freeciv/common/unittype.c
--- freeciv/common/unittype.c	2006-08-18 10:52:03.000000000 +0300
+++ freeciv/common/unittype.c	2007-01-18 16:37:07.000000000 +0200
@@ -41,7 +41,7 @@
 
 static const char *unit_class_flag_names[] = {
   "TerrainSpeed", "DamageSlows", "CanOccupy", "Missile",
-  "RoadNative", "BuildAnywhere"
+  "RoadNative", "BuildAnywhere", "Unreachable"
 };
 static const char *flag_names[] = {
   "TradeRoute" ,"HelpWonder", "IgZOC", "NonMil", "IgTer", 
diff -Nurd -X.diff_ignore freeciv/common/unittype.h freeciv/common/unittype.h
--- freeciv/common/unittype.h	2006-08-18 10:52:03.000000000 +0300
+++ freeciv/common/unittype.h	2007-01-18 16:37:07.000000000 +0200
@@ -32,6 +32,7 @@
   UCF_MISSILE,
   UCF_ROAD_NATIVE,
   UCF_BUILD_ANYWHERE,
+  UCF_UNREACHABLE,
   UCF_LAST
 };
 
diff -Nurd -X.diff_ignore freeciv/data/civ1/units.ruleset freeciv/data/civ1/units.ruleset
--- freeciv/data/civ1/units.ruleset	2006-08-18 10:51:28.000000000 +0300
+++ freeciv/data/civ1/units.ruleset	2007-01-18 16:37:07.000000000 +0200
@@ -52,7 +52,7 @@
 ;
 ; name          = Name as used in other rulesets
 ; move_type     = Where unit moves; Land, Sea, Both or Air. Air is special value for
-;                 units which can only be attacked by units with "Fighter" flag
+;                 airplanes
 ; min_speed     = Minimum speed after damage and effects
 ; hp_loss_pct   = Hitpoints lost each turn if unit not in city or airbase
 ; flags         = List of unit class flags
@@ -65,6 +65,8 @@
 ; "Missile"       = Unit is destroyed when it attacks
 ; "RoadNative"    = Road tiles are always considered native terrain
 ; "BuildAnywhere" = Unit can be built even in the middle of non-native terrain
+; "Unreachable"   = Unit can be attacked only by units with "Fighter" flag or on
+;                   city or airbase
 
 [unitclass_land]
 name          = _("Land")
@@ -85,14 +87,14 @@
 move_type     = "Air"
 min_speed     = 1
 hp_loss_pct   = 0
-flags         = ""
+flags         = "Unreachable"
 
 [unitclass_missile]
 name          = _("Missile")
 move_type     = "Air"
 min_speed     = 1
 hp_loss_pct   = 0
-flags         = "Missile"
+flags         = "Missile", "Unreachable"
 
 ; Below: The individual units, one per section.
 ;
diff -Nurd -X.diff_ignore freeciv/data/civ2/units.ruleset freeciv/data/civ2/units.ruleset
--- freeciv/data/civ2/units.ruleset	2006-08-18 10:51:28.000000000 +0300
+++ freeciv/data/civ2/units.ruleset	2007-01-18 16:37:07.000000000 +0200
@@ -52,7 +52,7 @@
 ;
 ; name          = Name as used in other 
 ; move_type     = Where unit moves; Land, Sea, Both or Air. Air is special value for
-;                 units which can only be attacked by units with "Fighter" flag
+;                 airplanes
 ; min_speed     = Minimum speed after damage and effects
 ; hp_loss_pct   = Hitpoints lost each turn if unit not in city or airbase
 ; flags         = List of unit class flags
@@ -65,13 +65,15 @@
 ; "Missile"       = Unit is destroyed when it attacks
 ; "RoadNative"    = Road tiles are always considered native terrain
 ; "BuildAnywhere" = Unit can be built even in the middle of non-native terrain
+; "Unreachable"   = Unit can be attacked only by units with "Fighter" flag or on
+;                   city or airbase
 
 [unitclass_missile]
 name          = _("Missile")
 move_type     = "Air"
 min_speed     = 1
 hp_loss_pct   = 0
-flags         = "Missile"
+flags         = "Missile", "Unreachable"
 
 [unitclass_land]
 name          = _("Land")
@@ -99,7 +101,7 @@
 move_type     = "Air"
 min_speed     = 1
 hp_loss_pct   = 0
-flags         = ""
+flags         = "Unreachable"
 
 ; Below: The individual units, one per section.
 ;
diff -Nurd -X.diff_ignore freeciv/data/default/units.ruleset freeciv/data/default/units.ruleset
--- freeciv/data/default/units.ruleset	2006-08-18 10:51:28.000000000 +0300
+++ freeciv/data/default/units.ruleset	2007-01-18 16:37:07.000000000 +0200
@@ -58,7 +58,7 @@
 ;
 ; name          = Name as used in other rulesets
 ; move_type     = Where unit moves; Land, Sea, Both or Air. Air is special value for
-;                 units which can only be attacked by units with "Fighter" flag
+;                 airplanes
 ; min_speed     = Minimum speed after damage and effects
 ; hp_loss_pct   = Hitpoints lost each turn if unit not in city or airbase
 ; flags         = List of unit class flags
@@ -71,13 +71,15 @@
 ; "Missile"       = Unit is destroyed when it attacks
 ; "RoadNative"    = Road tiles are always considered native terrain
 ; "BuildAnywhere" = Unit can be built even in the middle of non-native terrain
+; "Unreachable"   = Unit can be attacked only by units with "Fighter" flag or on
+;                   city or airbase
 
 [unitclass_missile]
 name          = _("Missile")
 move_type     = "Air"
 min_speed     = 1
 hp_loss_pct   = 0
-flags         = "Missile"
+flags         = "Missile", "Unreachable"
 
 [unitclass_land]
 name          = _("Land")
@@ -105,7 +107,7 @@
 move_type     = "Air"
 min_speed     = 1
 hp_loss_pct   = 0
-flags         = ""
+flags         = "Unreachable"
 
 ; Below: The individual units, one per section.
 ;
@@ -164,7 +166,7 @@
 ; "IgWall"	= ignore effect of city walls
 ; "FieldUnit"	= cause unhappiness even when not being aggressive
 ; "AEGIS"	= fivefold increased defence against "AirUnit" attacks
-; "Fighter"	= can attack air units (no other units can normally do this)
+; "Fighter"	= can attack unreachable units
 ; "Marines"	= (land only) can attack from transports
 ; "Partial_Invis" = visible only to adjancent units; does not hide transported
 ;		  units other than missiles
_______________________________________________
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev

Reply via email to