<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
[email protected]
https://mail.gna.org/listinfo/freeciv-dev