From 6bab4f99ca878c1e2fb8a5bb19c3b368a92b40a3 Mon Sep 17 00:00:00 2001 From: Marko Lindqvist Date: Sat, 4 Nov 2023 03:40:52 +0200 Subject: [PATCH 24/24] Add "ProvidesRansom" unit type flag See osdn #48934 Signed-off-by: Marko Lindqvist --- common/actres.c | 2 +- common/unittype.h | 222 ++++++++++++++++--------------- data/alien/units.ruleset | 5 +- data/civ1/units.ruleset | 5 +- data/civ2/units.ruleset | 5 +- data/civ2civ3/units.ruleset | 5 +- data/classic/units.ruleset | 6 +- data/goldkeep/units.ruleset | 6 +- data/granularity/units.ruleset | 3 + data/multiplayer/units.ruleset | 6 +- data/ruledit/comments-3.3.txt | 3 + data/sandbox/units.ruleset | 5 +- data/stub/units.ruleset | 3 + data/webperimental/units.ruleset | 5 +- server/rscompat.c | 6 + server/ruleset.c | 4 +- 16 files changed, 169 insertions(+), 122 deletions(-) diff --git a/common/actres.c b/common/actres.c index cc51252da4..a33f260915 100644 --- a/common/actres.c +++ b/common/actres.c @@ -677,7 +677,7 @@ enum fc_tristate actres_possible(enum action_result result, } unit_list_iterate(target->tile->units, punit) { - if (!unit_has_type_role(punit, L_BARBARIAN_LEADER)) { + if (!unit_has_type_flag(punit, UTYF_PROVIDES_RANSOM)) { /* Cannot get ransom when there are other kind of units in the tile */ return FALSE; } diff --git a/common/unittype.h b/common/unittype.h index edc3602016..4113c37e5e 100644 --- a/common/unittype.h +++ b/common/unittype.h @@ -280,58 +280,60 @@ const char *unit_type_flag_id_name_update_cb(const char *old_name); /* Do not show flag for the unit */ #define SPECENUM_VALUE30 UTYF_FLAGLESS #define SPECENUM_VALUE30NAME N_("?unitflag:Flagless") - -#define SPECENUM_VALUE31 UTYF_USER_FLAG_1 -#define SPECENUM_VALUE32 UTYF_USER_FLAG_2 -#define SPECENUM_VALUE33 UTYF_USER_FLAG_3 -#define SPECENUM_VALUE34 UTYF_USER_FLAG_4 -#define SPECENUM_VALUE35 UTYF_USER_FLAG_5 -#define SPECENUM_VALUE36 UTYF_USER_FLAG_6 -#define SPECENUM_VALUE37 UTYF_USER_FLAG_7 -#define SPECENUM_VALUE38 UTYF_USER_FLAG_8 -#define SPECENUM_VALUE39 UTYF_USER_FLAG_9 -#define SPECENUM_VALUE40 UTYF_USER_FLAG_10 -#define SPECENUM_VALUE41 UTYF_USER_FLAG_11 -#define SPECENUM_VALUE42 UTYF_USER_FLAG_12 -#define SPECENUM_VALUE43 UTYF_USER_FLAG_13 -#define SPECENUM_VALUE44 UTYF_USER_FLAG_14 -#define SPECENUM_VALUE45 UTYF_USER_FLAG_15 -#define SPECENUM_VALUE46 UTYF_USER_FLAG_16 -#define SPECENUM_VALUE47 UTYF_USER_FLAG_17 -#define SPECENUM_VALUE48 UTYF_USER_FLAG_18 -#define SPECENUM_VALUE49 UTYF_USER_FLAG_19 -#define SPECENUM_VALUE50 UTYF_USER_FLAG_20 -#define SPECENUM_VALUE51 UTYF_USER_FLAG_21 -#define SPECENUM_VALUE52 UTYF_USER_FLAG_22 -#define SPECENUM_VALUE53 UTYF_USER_FLAG_23 -#define SPECENUM_VALUE54 UTYF_USER_FLAG_24 -#define SPECENUM_VALUE55 UTYF_USER_FLAG_25 -#define SPECENUM_VALUE56 UTYF_USER_FLAG_26 -#define SPECENUM_VALUE57 UTYF_USER_FLAG_27 -#define SPECENUM_VALUE58 UTYF_USER_FLAG_28 -#define SPECENUM_VALUE59 UTYF_USER_FLAG_29 -#define SPECENUM_VALUE60 UTYF_USER_FLAG_30 -#define SPECENUM_VALUE61 UTYF_USER_FLAG_31 -#define SPECENUM_VALUE62 UTYF_USER_FLAG_32 -#define SPECENUM_VALUE63 UTYF_USER_FLAG_33 -#define SPECENUM_VALUE64 UTYF_USER_FLAG_34 -#define SPECENUM_VALUE65 UTYF_USER_FLAG_35 -#define SPECENUM_VALUE66 UTYF_USER_FLAG_36 -#define SPECENUM_VALUE67 UTYF_USER_FLAG_37 -#define SPECENUM_VALUE68 UTYF_USER_FLAG_38 -#define SPECENUM_VALUE69 UTYF_USER_FLAG_39 -#define SPECENUM_VALUE70 UTYF_USER_FLAG_40 -#define SPECENUM_VALUE71 UTYF_USER_FLAG_41 -#define SPECENUM_VALUE72 UTYF_USER_FLAG_42 -#define SPECENUM_VALUE73 UTYF_USER_FLAG_43 -#define SPECENUM_VALUE74 UTYF_USER_FLAG_44 -#define SPECENUM_VALUE75 UTYF_USER_FLAG_45 -#define SPECENUM_VALUE76 UTYF_USER_FLAG_46 -#define SPECENUM_VALUE77 UTYF_USER_FLAG_47 -#define SPECENUM_VALUE78 UTYF_USER_FLAG_48 -#define SPECENUM_VALUE79 UTYF_USER_FLAG_49 -#define SPECENUM_VALUE80 UTYF_USER_FLAG_50 -#define SPECENUM_VALUE81 UTYF_USER_FLAG_51 +#define SPECENUM_VALUE31 UTYF_PROVIDES_RANSOM +#define SPECENUM_VALUE31NAME N_("?unitflag:ProvidesRansom") + +#define SPECENUM_VALUE32 UTYF_USER_FLAG_1 +#define SPECENUM_VALUE33 UTYF_USER_FLAG_2 +#define SPECENUM_VALUE34 UTYF_USER_FLAG_3 +#define SPECENUM_VALUE35 UTYF_USER_FLAG_4 +#define SPECENUM_VALUE36 UTYF_USER_FLAG_5 +#define SPECENUM_VALUE37 UTYF_USER_FLAG_6 +#define SPECENUM_VALUE38 UTYF_USER_FLAG_7 +#define SPECENUM_VALUE39 UTYF_USER_FLAG_8 +#define SPECENUM_VALUE40 UTYF_USER_FLAG_9 +#define SPECENUM_VALUE41 UTYF_USER_FLAG_10 +#define SPECENUM_VALUE42 UTYF_USER_FLAG_11 +#define SPECENUM_VALUE43 UTYF_USER_FLAG_12 +#define SPECENUM_VALUE44 UTYF_USER_FLAG_13 +#define SPECENUM_VALUE45 UTYF_USER_FLAG_14 +#define SPECENUM_VALUE46 UTYF_USER_FLAG_15 +#define SPECENUM_VALUE47 UTYF_USER_FLAG_16 +#define SPECENUM_VALUE48 UTYF_USER_FLAG_17 +#define SPECENUM_VALUE49 UTYF_USER_FLAG_18 +#define SPECENUM_VALUE50 UTYF_USER_FLAG_19 +#define SPECENUM_VALUE51 UTYF_USER_FLAG_20 +#define SPECENUM_VALUE52 UTYF_USER_FLAG_21 +#define SPECENUM_VALUE53 UTYF_USER_FLAG_22 +#define SPECENUM_VALUE54 UTYF_USER_FLAG_23 +#define SPECENUM_VALUE55 UTYF_USER_FLAG_24 +#define SPECENUM_VALUE56 UTYF_USER_FLAG_25 +#define SPECENUM_VALUE57 UTYF_USER_FLAG_26 +#define SPECENUM_VALUE58 UTYF_USER_FLAG_27 +#define SPECENUM_VALUE59 UTYF_USER_FLAG_28 +#define SPECENUM_VALUE60 UTYF_USER_FLAG_29 +#define SPECENUM_VALUE61 UTYF_USER_FLAG_30 +#define SPECENUM_VALUE62 UTYF_USER_FLAG_31 +#define SPECENUM_VALUE63 UTYF_USER_FLAG_32 +#define SPECENUM_VALUE64 UTYF_USER_FLAG_33 +#define SPECENUM_VALUE65 UTYF_USER_FLAG_34 +#define SPECENUM_VALUE66 UTYF_USER_FLAG_35 +#define SPECENUM_VALUE67 UTYF_USER_FLAG_36 +#define SPECENUM_VALUE68 UTYF_USER_FLAG_37 +#define SPECENUM_VALUE69 UTYF_USER_FLAG_38 +#define SPECENUM_VALUE70 UTYF_USER_FLAG_39 +#define SPECENUM_VALUE71 UTYF_USER_FLAG_40 +#define SPECENUM_VALUE72 UTYF_USER_FLAG_41 +#define SPECENUM_VALUE73 UTYF_USER_FLAG_42 +#define SPECENUM_VALUE74 UTYF_USER_FLAG_43 +#define SPECENUM_VALUE75 UTYF_USER_FLAG_44 +#define SPECENUM_VALUE76 UTYF_USER_FLAG_45 +#define SPECENUM_VALUE77 UTYF_USER_FLAG_46 +#define SPECENUM_VALUE78 UTYF_USER_FLAG_47 +#define SPECENUM_VALUE79 UTYF_USER_FLAG_48 +#define SPECENUM_VALUE80 UTYF_USER_FLAG_49 +#define SPECENUM_VALUE81 UTYF_USER_FLAG_50 +#define SPECENUM_VALUE82 UTYF_USER_FLAG_51 /* Note that first role must have value next to last flag */ #define UTYF_LAST_USER_FLAG UTYF_USER_FLAG_51 @@ -357,92 +359,92 @@ const char *unit_type_flag_id_name_update_cb(const char *old_name); #define SPECENUM_NAME unit_role_id /* Built first when city established */ -#define SPECENUM_VALUE82 L_FIRSTBUILD -#define SPECENUM_VALUE82NAME N_("?unitflag:FirstBuild") +#define SPECENUM_VALUE83 L_FIRSTBUILD +#define SPECENUM_VALUE83NAME N_("?unitflag:FirstBuild") /* Explorer unit */ -#define SPECENUM_VALUE83 L_EXPLORER -#define SPECENUM_VALUE83NAME N_("?unitflag:Explorer") +#define SPECENUM_VALUE84 L_EXPLORER +#define SPECENUM_VALUE84NAME N_("?unitflag:Explorer") /* Can be found in hut */ -#define SPECENUM_VALUE84 L_HUT -#define SPECENUM_VALUE84NAME N_("?unitflag:Hut") +#define SPECENUM_VALUE85 L_HUT +#define SPECENUM_VALUE85NAME N_("?unitflag:Hut") /* Can be found in hut, tech required */ -#define SPECENUM_VALUE85 L_HUT_TECH -#define SPECENUM_VALUE85NAME N_("?unitflag:HutTech") +#define SPECENUM_VALUE86 L_HUT_TECH +#define SPECENUM_VALUE86NAME N_("?unitflag:HutTech") /* Created in Partisan circumstances */ -#define SPECENUM_VALUE86 L_PARTISAN -#define SPECENUM_VALUE86NAME N_("?unitflag:Partisan") +#define SPECENUM_VALUE87 L_PARTISAN +#define SPECENUM_VALUE87NAME N_("?unitflag:Partisan") /* Ok on defense (AI) */ -#define SPECENUM_VALUE87 L_DEFEND_OK -#define SPECENUM_VALUE87NAME N_("?unitflag:DefendOk") +#define SPECENUM_VALUE88 L_DEFEND_OK +#define SPECENUM_VALUE88NAME N_("?unitflag:DefendOk") /* Primary purpose is defense (AI) */ -#define SPECENUM_VALUE88 L_DEFEND_GOOD -#define SPECENUM_VALUE88NAME N_("?unitflag:DefendGood") +#define SPECENUM_VALUE89 L_DEFEND_GOOD +#define SPECENUM_VALUE89NAME N_("?unitflag:DefendGood") /* Useful for ferrying (AI) */ -#define SPECENUM_VALUE89 L_FERRYBOAT -#define SPECENUM_VALUE89NAME N_("?unitflag:FerryBoat") +#define SPECENUM_VALUE90 L_FERRYBOAT +#define SPECENUM_VALUE90NAME N_("?unitflag:FerryBoat") /* Barbarians unit, land only */ -#define SPECENUM_VALUE90 L_BARBARIAN -#define SPECENUM_VALUE90NAME N_("?unitflag:Barbarian") +#define SPECENUM_VALUE91 L_BARBARIAN +#define SPECENUM_VALUE91NAME N_("?unitflag:Barbarian") /* Barbarians unit, global tech required */ -#define SPECENUM_VALUE91 L_BARBARIAN_TECH -#define SPECENUM_VALUE91NAME N_("?unitflag:BarbarianTech") +#define SPECENUM_VALUE92 L_BARBARIAN_TECH +#define SPECENUM_VALUE92NAME N_("?unitflag:BarbarianTech") /* Barbarian boat */ -#define SPECENUM_VALUE92 L_BARBARIAN_BOAT -#define SPECENUM_VALUE92NAME N_("?unitflag:BarbarianBoat") +#define SPECENUM_VALUE93 L_BARBARIAN_BOAT +#define SPECENUM_VALUE93NAME N_("?unitflag:BarbarianBoat") /* Barbarians boat, global tech required */ -#define SPECENUM_VALUE93 L_BARBARIAN_BOAT_TECH -#define SPECENUM_VALUE93NAME N_("?unitflag:BarbarianBoatTech") +#define SPECENUM_VALUE94 L_BARBARIAN_BOAT_TECH +#define SPECENUM_VALUE94NAME N_("?unitflag:BarbarianBoatTech") /* What barbarians should build */ -#define SPECENUM_VALUE94 L_BARBARIAN_BUILD -#define SPECENUM_VALUE94NAME N_("?unitflag:BarbarianBuild") +#define SPECENUM_VALUE95 L_BARBARIAN_BUILD +#define SPECENUM_VALUE95NAME N_("?unitflag:BarbarianBuild") /* Barbarians build when global tech */ -#define SPECENUM_VALUE95 L_BARBARIAN_BUILD_TECH -#define SPECENUM_VALUE95NAME N_("?unitflag:BarbarianBuildTech") +#define SPECENUM_VALUE96 L_BARBARIAN_BUILD_TECH +#define SPECENUM_VALUE96NAME N_("?unitflag:BarbarianBuildTech") /* Barbarian leader */ -#define SPECENUM_VALUE96 L_BARBARIAN_LEADER -#define SPECENUM_VALUE96NAME N_("?unitflag:BarbarianLeader") +#define SPECENUM_VALUE97 L_BARBARIAN_LEADER +#define SPECENUM_VALUE97NAME N_("?unitflag:BarbarianLeader") /* Sea raider unit */ -#define SPECENUM_VALUE97 L_BARBARIAN_SEA -#define SPECENUM_VALUE97NAME N_("?unitflag:BarbarianSea") +#define SPECENUM_VALUE98 L_BARBARIAN_SEA +#define SPECENUM_VALUE98NAME N_("?unitflag:BarbarianSea") /* Sea raider unit, global tech required */ -#define SPECENUM_VALUE98 L_BARBARIAN_SEA_TECH -#define SPECENUM_VALUE98NAME N_("?unitflag:BarbarianSeaTech") +#define SPECENUM_VALUE99 L_BARBARIAN_SEA_TECH +#define SPECENUM_VALUE99NAME N_("?unitflag:BarbarianSeaTech") /* StartUnit: Cities */ -#define SPECENUM_VALUE99 L_START_CITIES -#define SPECENUM_VALUE99NAME N_("?unitflag:CitiesStartUnit") +#define SPECENUM_VALUE100 L_START_CITIES +#define SPECENUM_VALUE100NAME N_("?unitflag:CitiesStartUnit") /* StartUnit: Worker */ -#define SPECENUM_VALUE100 L_START_WORKER -#define SPECENUM_VALUE100NAME N_("?unitflag:WorkerStartUnit") +#define SPECENUM_VALUE101 L_START_WORKER +#define SPECENUM_VALUE101NAME N_("?unitflag:WorkerStartUnit") /* StartUnit: Explorer */ -#define SPECENUM_VALUE101 L_START_EXPLORER -#define SPECENUM_VALUE101NAME N_("?unitflag:ExplorerStartUnit") +#define SPECENUM_VALUE102 L_START_EXPLORER +#define SPECENUM_VALUE102NAME N_("?unitflag:ExplorerStartUnit") /* StartUnit: King */ -#define SPECENUM_VALUE102 L_START_KING -#define SPECENUM_VALUE102NAME N_("?unitflag:KingStartUnit") +#define SPECENUM_VALUE103 L_START_KING +#define SPECENUM_VALUE103NAME N_("?unitflag:KingStartUnit") /* StartUnit: Diplomat */ -#define SPECENUM_VALUE103 L_START_DIPLOMAT -#define SPECENUM_VALUE103NAME N_("?unitflag:DiplomatStartUnit") +#define SPECENUM_VALUE104 L_START_DIPLOMAT +#define SPECENUM_VALUE104NAME N_("?unitflag:DiplomatStartUnit") /* StartUnit: Ferryboat */ -#define SPECENUM_VALUE104 L_START_FERRY -#define SPECENUM_VALUE104NAME N_("?unitflag:FerryStartUnit") +#define SPECENUM_VALUE105 L_START_FERRY +#define SPECENUM_VALUE105NAME N_("?unitflag:FerryStartUnit") /* StartUnit: DefendOk */ -#define SPECENUM_VALUE105 L_START_DEFEND_OK -#define SPECENUM_VALUE105NAME N_("?unitflag:DefendOkStartUnit") +#define SPECENUM_VALUE106 L_START_DEFEND_OK +#define SPECENUM_VALUE106NAME N_("?unitflag:DefendOkStartUnit") /* StartUnit: DefendGood */ -#define SPECENUM_VALUE106 L_START_DEFEND_GOOD -#define SPECENUM_VALUE106NAME N_("?unitflag:DefendGoodStartUnit") +#define SPECENUM_VALUE107 L_START_DEFEND_GOOD +#define SPECENUM_VALUE107NAME N_("?unitflag:DefendGoodStartUnit") /* StartUnit: AttackFast */ -#define SPECENUM_VALUE107 L_START_ATTACK_FAST -#define SPECENUM_VALUE107NAME N_("?unitflag:AttackFastStartUnit") +#define SPECENUM_VALUE108 L_START_ATTACK_FAST +#define SPECENUM_VALUE108NAME N_("?unitflag:AttackFastStartUnit") /* StartUnit: AttackStrong */ -#define SPECENUM_VALUE108 L_START_ATTACK_STRONG -#define SPECENUM_VALUE108NAME N_("?unitflag:AttackStrongStartUnit") +#define SPECENUM_VALUE109 L_START_ATTACK_STRONG +#define SPECENUM_VALUE109NAME N_("?unitflag:AttackStrongStartUnit") /* AI hunter type unit */ -#define SPECENUM_VALUE109 L_HUNTER -#define SPECENUM_VALUE109NAME N_("?unitflag:Hunter") +#define SPECENUM_VALUE110 L_HUNTER +#define SPECENUM_VALUE110NAME N_("?unitflag:Hunter") /* Can improve terrain */ -#define SPECENUM_VALUE110 L_SETTLERS -#define SPECENUM_VALUE110NAME N_("?unitflag:Settlers") +#define SPECENUM_VALUE111 L_SETTLERS +#define SPECENUM_VALUE111NAME N_("?unitflag:Settlers") #define L_LAST (L_SETTLERS + 1) #include "specenum_gen.h" diff --git a/data/alien/units.ruleset b/data/alien/units.ruleset index e98644d122..d81665ddbd 100644 --- a/data/alien/units.ruleset +++ b/data/alien/units.ruleset @@ -389,6 +389,9 @@ flags = "Missile", "DoesntOccupyTile" ; the owner. ; Note that currently the information is available for ; the client anyway, so this is not a rule like a feature yet. +; "ProvidesRansom" = Enemies can collect ransom from the unit. This only happens +; if all the units on tile have this flag - any other kind of +; unit protects them. ; ; ; Following actions require extra fields: @@ -682,7 +685,7 @@ uk_shield = 1 uk_food = 0 uk_gold = 0 tp_defense = "Alight" -flags = "Capturer" +flags = "Capturer", "ProvidesRansom" roles = "DefendOk", "Barbarian", "BarbarianSea", "BarbarianLeader" helptext = _("\ Attack power to the early game.\ diff --git a/data/civ1/units.ruleset b/data/civ1/units.ruleset index b20238ab5c..71ace8dcdf 100644 --- a/data/civ1/units.ruleset +++ b/data/civ1/units.ruleset @@ -364,6 +364,9 @@ flags = "Missile", "Unreachable", "HutNothing" ; the owner. ; Note that currently the information is available for ; the client anyway, so this is not a rule like a feature yet. +; "ProvidesRansom" = Enemies can collect ransom from the unit. This only happens +; if all the units on tile have this flag - any other kind of +; unit protects them. ; ; ; Following actions require extra fields: @@ -1583,7 +1586,7 @@ uk_shield = 0 uk_food = 0 uk_gold = 0 tp_defense = "Alight" -flags = "IgZOC", "NonMil", "NoBuild" +flags = "IgZOC", "NonMil", "NoBuild", "ProvidesRansom" roles = "BarbarianLeader" helptext = _("\ One Barbarian Leader appears every time there is a barbarian uprising\ diff --git a/data/civ2/units.ruleset b/data/civ2/units.ruleset index fb89bbffaa..28b9a2fcf0 100644 --- a/data/civ2/units.ruleset +++ b/data/civ2/units.ruleset @@ -382,6 +382,9 @@ flags = "Unreachable", "DoesntOccupyTile", "HutFrighten" ; the owner. ; Note that currently the information is available for ; the client anyway, so this is not a rule like a feature yet. +; "ProvidesRansom" = Enemies can collect ransom from the unit. This only happens +; if all the units on tile have this flag - any other kind of +; unit protects them. ; ; ; Following actions require extra fields: @@ -2512,7 +2515,7 @@ uk_shield = 0 uk_food = 0 uk_gold = 0 tp_defense = "Alight" -flags = "IgZOC", "NonMil", "NoBuild" +flags = "IgZOC", "NonMil", "NoBuild", "ProvidesRansom" roles = "BarbarianLeader" helptext = _("\ One Barbarian Leader appears every time there is a barbarian uprising\ diff --git a/data/civ2civ3/units.ruleset b/data/civ2civ3/units.ruleset index 0bb825ecad..742baca24b 100644 --- a/data/civ2civ3/units.ruleset +++ b/data/civ2civ3/units.ruleset @@ -426,6 +426,9 @@ flags = "Unreachable", "DoesntOccupyTile", "CanPillage", ; the owner. ; Note that currently the information is available for ; the client anyway, so this is not a rule like a feature yet. +; "ProvidesRansom" = Enemies can collect ransom from the unit. This only happens +; if all the units on tile have this flag - any other kind of +; unit protects them. ; ; ; Following actions require extra fields: @@ -2805,7 +2808,7 @@ uk_shield = 0 uk_food = 0 uk_gold = 0 tp_defense = "Alight" -flags = "IgZOC", "NonMil", "Unbribable", +flags = "IgZOC", "NonMil", "Unbribable", "ProvidesRansom", "EvacuateFirst", "SuperSpy", "NoHome", "NoBuild" ; No veteran levels (level name is never displayed) veteran_names = _("green") diff --git a/data/classic/units.ruleset b/data/classic/units.ruleset index b9a451c41d..0fb8bbd2af 100644 --- a/data/classic/units.ruleset +++ b/data/classic/units.ruleset @@ -392,6 +392,9 @@ flags = "Unreachable", "DoesntOccupyTile", "HutFrighten" ; the owner. ; Note that currently the information is available for ; the client anyway, so this is not a rule like a feature yet. +; "ProvidesRansom" = Enemies can collect ransom from the unit. This only happens +; if all the units on tile have this flag - any other kind of +; unit protects them. ; ; ; Following actions require extra fields: @@ -2545,7 +2548,8 @@ uk_food = 0 uk_gold = 0 tp_defense = "Alight" flags = "IgZOC", "NonMil", "HasNoZOC", "Unbribable", - "EvacuateFirst", "SuperSpy", "NoHome", "NoBuild" + "EvacuateFirst", "SuperSpy", "NoHome", "NoBuild", + "ProvidesRansom" ; No veteran levels (level name is never displayed) veteran_names = _("green") veteran_base_raise_chance = 0 diff --git a/data/goldkeep/units.ruleset b/data/goldkeep/units.ruleset index 3d0d5fa62e..0cbe7009fd 100644 --- a/data/goldkeep/units.ruleset +++ b/data/goldkeep/units.ruleset @@ -404,6 +404,9 @@ flags = "Unreachable", "DoesntOccupyTile", "HutFrighten" ; the owner. ; Note that currently the information is available for ; the client anyway, so this is not a rule like a feature yet. +; "ProvidesRansom" = Enemies can collect ransom from the unit. This only happens +; if all the units on tile have this flag - any other kind of +; unit protects them. ; ; ; Following actions require extra fields: @@ -2577,7 +2580,8 @@ uk_food = 0 uk_gold = 0 tp_defense = "Alight" flags = "IgZOC", "NonMil", "HasNoZOC", "Unbribable", - "EvacuateFirst", "SuperSpy", "NoHome", "NoBuild" + "EvacuateFirst", "SuperSpy", "NoHome", "NoBuild", + "ProvidesRansom" ; No veteran levels (level name is never displayed) veteran_names = _("green") veteran_base_raise_chance = 0 diff --git a/data/granularity/units.ruleset b/data/granularity/units.ruleset index 089f3d48f8..5b1aad4d66 100644 --- a/data/granularity/units.ruleset +++ b/data/granularity/units.ruleset @@ -330,6 +330,9 @@ flags = "TerrainSpeed" ; the owner. ; Note that currently the information is available for ; the client anyway, so this is not a rule like a feature yet. +; "ProvidesRansom" = Enemies can collect ransom from the unit. This only happens +; if all the units on tile have this flag - any other kind of +; unit protects them. ; ; ; Following actions require extra fields: diff --git a/data/multiplayer/units.ruleset b/data/multiplayer/units.ruleset index 0002740e62..e2f278e8b3 100644 --- a/data/multiplayer/units.ruleset +++ b/data/multiplayer/units.ruleset @@ -392,6 +392,9 @@ flags = "Unreachable", "DoesntOccupyTile", "HutFrighten" ; the owner. ; Note that currently the information is available for ; the client anyway, so this is not a rule like a feature yet. +; "ProvidesRansom" = Enemies can collect ransom from the unit. This only happens +; if all the units on tile have this flag - any other kind of +; unit protects them. ; ; ; Following actions require extra fields: @@ -2644,7 +2647,8 @@ uk_food = 0 uk_gold = 0 tp_defense = "Alight" flags = "IgZOC", "NonMil", "HasNoZOC", "Unbribable", - "EvacuateFirst", "SuperSpy", "NoHome", "NoBuild" + "EvacuateFirst", "SuperSpy", "NoHome", "NoBuild", + "ProvidesRansom" ; No veteran levels (level name is never displayed) veteran_names = _("green") veteran_base_raise_chance = 0 diff --git a/data/ruledit/comments-3.3.txt b/data/ruledit/comments-3.3.txt index cd7e3ebb3e..07d5e542ac 100644 --- a/data/ruledit/comments-3.3.txt +++ b/data/ruledit/comments-3.3.txt @@ -506,6 +506,9 @@ utypes = "\ ; the owner.\n\ ; Note that currently the information is available for\n\ ; the client anyway, so this is not a rule like a feature yet.\n\ +; \"ProvidesRansom\" = Enemies can collect ransom from the unit. This only happens\n\ +; if all the units on tile have this flag - any other kind of\n\ +; unit protects them.\n\ ;\n\ ; Following actions require extra fields:\n\ ; \"Attack\" and \"Suicide Attack\"\n\ diff --git a/data/sandbox/units.ruleset b/data/sandbox/units.ruleset index 6f5fc32b4a..a705e457ee 100644 --- a/data/sandbox/units.ruleset +++ b/data/sandbox/units.ruleset @@ -439,6 +439,9 @@ flags = "Unreachable", "DoesntOccupyTile", "CanPillage", ; the owner. ; Note that currently the information is available for ; the client anyway, so this is not a rule like a feature yet. +; "ProvidesRansom" = Enemies can collect ransom from the unit. This only happens +; if all the units on tile have this flag - any other kind of +; unit protects them. ; ; ; Following actions require extra fields: @@ -2987,7 +2990,7 @@ uk_gold = 0 tp_defense = "Alight" flags = "IgZOC", "NonMil", "Unbribable", "EvacuateFirst", "SuperSpy", "NoHome", "NoBuild", - "FleshBased" + "FleshBased", "ProvidesRansom" ; No veteran levels (level name is never displayed) veteran_names = _("green") veteran_base_raise_chance = 0 diff --git a/data/stub/units.ruleset b/data/stub/units.ruleset index 9e9c138661..399b50ee66 100644 --- a/data/stub/units.ruleset +++ b/data/stub/units.ruleset @@ -312,6 +312,9 @@ flags = "" ; the owner. ; Note that currently the information is available for ; the client anyway, so this is not a rule like a feature yet. +; "ProvidesRansom" = Enemies can collect ransom from the unit. This only happens +; if all the units on tile have this flag - any other kind of +; unit protects them. ; ; ; Following actions require extra fields: diff --git a/data/webperimental/units.ruleset b/data/webperimental/units.ruleset index 3debc6ed46..4ad41abbea 100644 --- a/data/webperimental/units.ruleset +++ b/data/webperimental/units.ruleset @@ -396,6 +396,9 @@ flags = "Unreachable", "DoesntOccupyTile", "HutFrighten" ; the owner. ; Note that currently the information is available for ; the client anyway, so this is not a rule like a feature yet. +; "ProvidesRansom" = Enemies can collect ransom from the unit. This only happens +; if all the units on tile have this flag - any other kind of +; unit protects them. ; ; ; Following actions require extra fields: @@ -2628,7 +2631,7 @@ uk_gold = 0 tp_defense = "Alight" flags = "IgZOC", "NonMil", "HasNoZOC", "Unbribable", "EvacuateFirst", "SuperSpy", "NoHome", "NoBuild", - "LightWeight" + "LightWeight", "ProvidesRansom" ; No veteran levels (level name is never displayed) veteran_names = _("green") veteran_base_raise_chance = 0 diff --git a/server/rscompat.c b/server/rscompat.c index 2c874c3ea5..73bec63a93 100644 --- a/server/rscompat.c +++ b/server/rscompat.c @@ -409,6 +409,12 @@ void rscompat_postprocess(struct rscompat_info *info) return; } + unit_type_iterate(ptype) { + if (utype_has_role(ptype, L_BARBARIAN_LEADER)) { + BV_SET(ptype->flags, UTYF_PROVIDES_RANSOM); + } + } unit_type_iterate_end; + /* Upgrade existing effects. Done before new effects are added to prevent * the new effects from being upgraded by accident. */ iterate_effect_cache(effect_list_compat_cb, info); diff --git a/server/ruleset.c b/server/ruleset.c index 9d911c391b..85e0f56819 100644 --- a/server/ruleset.c +++ b/server/ruleset.c @@ -2448,7 +2448,7 @@ static bool load_ruleset_units(struct section_file *file, } if (ok) { - /* flags */ + /* Flags */ unit_type_iterate(u) { const int i = utype_index(u); @@ -2488,7 +2488,7 @@ static bool load_ruleset_units(struct section_file *file, } unit_type_iterate_end; } - /* roles */ + /* Roles */ if (ok) { unit_type_iterate(u) { const int i = utype_index(u); -- 2.42.0