63#define BULLET Q_("?bullet:*")
65#define BULLET_SPACE Q_("?bullet:* ")
68#define CATLSTR(_b, _s, _t, ...) cat_snprintf(_b, _s, _t, ## __VA_ARGS__)
72 "(Any)",
"(Text)",
"Units",
"Improvements",
"Wonders",
73 "Techs",
"Terrain",
"Extras",
"Goods",
"Specialists",
"Governments",
74 "Ruleset",
"Tileset",
"Musicset",
"Nations",
"Multipliers",
"Counters",
NULL
77#define SPECLIST_TAG help
78#define SPECLIST_TYPE struct help_item
81#define help_list_iterate(helplist, phelp) \
82 TYPED_LIST_ITERATE(struct help_item, helplist, phelp)
83#define help_list_iterate_end LIST_ITERATE_END
161 if (veteran->
levels == 1) {
181 _(
"Veteran level Power factor Move bonus\n"));
184 _(
"--------------------------------------------"));
194 "\n%s%*s %4d%% %12s",
214 if (0 ==
strcmp(
name,
"TerrainAlterations")) {
240 PL_(
"To transform a water tile to a land tile, the water tile "
241 "must have %d adjacent land tile.\n",
242 "To transform a water tile to a land tile, the water tile "
243 "must have %d adjacent land tiles.\n",
249 PL_(
"To transform a land tile to a water tile, the land tile "
250 "must have %d adjacent water tile.\n",
251 "To transform a land tile to a water tile, the land tile "
252 "must have %d adjacent water tiles.\n",
261 _(
"Terrain Cultivate Plant Transform\n"));
263 "----------------------------------------------------------------\n");
267 const char *
terrain, *cultivate_result,
268 *plant_result,*transform_result;
273 "%d", pterrain->cultivate_time);
275 "%d", pterrain->plant_time);
276 fc_snprintf(transform_time,
sizeof(transform_time),
277 "%d", pterrain->transform_time);
280 (pterrain->cultivate_result ==
T_NONE
285 (pterrain->plant_result ==
T_NONE
290 (pterrain->transform_result == pterrain
291 || pterrain->transform_result ==
T_NONE
298 if (
strcmp(transform_result,
"") != 0
299 && pterrain->transform_result !=
T_NONE) {
306 transform_result =
"";
310 transform_result =
"";
320 "%s%*s %3s %s%*s %3s %s%*s %3s %s\n",
326 (pterrain->plant_result ==
T_NONE) ?
"-" : plant_time,
329 (!
strcmp(transform_result,
"")) ?
"-" : transform_time,
346 if (pillage_time != 0 && pterrain->pillage_time != 0) {
347 if (pillage_time < 0) {
348 pillage_time = pterrain->pillage_time;
350 if (pillage_time != pterrain->pillage_time) {
363 int time = -1, factor = -1;
366 if (pextra->removal_time == 0) {
368 factor = pextra->removal_time_factor;
369 }
else if (factor != pextra->removal_time_factor) {
374 time = pextra->removal_time;
375 }
else if (
time != pextra->removal_time) {
394 }
else if (
time >= 0) {
396 }
else if (factor >= 0) {
405 int time = -1, factor = -1;
408 if (pextra->removal_time == 0) {
410 factor = pextra->removal_time_factor;
411 }
else if (factor != pextra->removal_time_factor) {
416 time = pextra->removal_time;
417 }
else if (
time != pextra->removal_time) {
429 }
else if (pillage_time != 0) {
432 if (
time > 0 && factor > 0 &&
time != pillage_time * factor) {
434 }
else if (
time >= 0) {
436 }
else if (factor >= 0) {
437 pillage_time = pillage_time * factor;
448 if (pextra->buildable && pextra->build_time > 0) {
455 if (pextra->buildable && pextra->build_time > 0) {
466 _(
"Time taken for the following activities is independent of "
472 _(
"Activity Time\n"));
474 "---------------------------");
479 if (pillage_time > 0) {
481 _(
"\nPillage %3d"), pillage_time);
485 if (pextra->buildable && pextra->build_time > 0) {
498 if (pextra->buildable && pextra->build_time > 0) {
512 }
else if (0 ==
strcmp(
name,
"VeteranLevels")) {
514 _(
"In this ruleset, the following veteran levels are defined:"),
515 _(
"This ruleset has no default veteran levels defined."));
516 }
else if (0 ==
strcmp(
name,
"FreecivVersion")) {
527 }
else if (0 ==
strcmp(
name,
"DefaultMetaserver")) {
546 const char *
const *
strs,
630 char *
buf,
size_t bufsz,
const char *prefix)
635 static const char *
const govstrs[] = {
637 N_(
"?gov:Allows %s (with %s but no %s)."),
639 N_(
"?gov:Allows %s (with %s)."),
641 N_(
"?gov:Allows %s (absent %s)."),
643 N_(
"?gov:Allows %s."),
645 N_(
"?gov:Prevents %s.")
654 static const char *
const imprstrs[] = {
656 N_(
"?improvement:Allows %s (with %s but no %s)."),
658 N_(
"?improvement:Allows %s (with %s)."),
660 N_(
"?improvement:Allows %s (absent %s)."),
662 N_(
"?improvement:Allows %s."),
664 N_(
"?improvement:Prevents %s.")
673 static const char *
const utstrs[] = {
675 N_(
"?unittype:Allows %s (with %s but no %s)."),
677 N_(
"?unittype:Allows %s (with %s)."),
679 N_(
"?unittype:Allows %s (absent %s)."),
681 N_(
"?unittype:Allows %s."),
683 N_(
"?unittype:Prevents %s.")
691 static const char *
const estrs[] = {
693 N_(
"?extra:Allows %s (with %s but no %s)."),
695 N_(
"?extra:Allows %s (with %s)."),
697 N_(
"?extra:Allows %s (absent %s)."),
699 N_(
"?extra:Allows %s."),
701 N_(
"?extra:Prevents %s.")
709 static const char *
const gstrs[] = {
711 N_(
"?good:Allows %s (with %s but no %s)."),
713 N_(
"?good:Allows %s (with %s)."),
715 N_(
"?good:Allows %s (absent %s)."),
717 N_(
"?good:Allows %s."),
719 N_(
"?good:Prevents %s.")
753 for (
ta =
ha->topic,
tb =
hb->topic; *
ta !=
'\0' && *
tb !=
'\0';
ta++,
tb++) {
755 if (*
tb ==
' ')
return -1;
757 }
else if (*
tb !=
' ') {
758 if (*
ta ==
' ')
return 1;
773 const char *filename;
802 log_error(
"failed reading help-texts from '%s':\n%s", filename,
1015 const char *
nodesc =
_(
"Current ruleset contains no summary.");
1061 if (description !=
NULL) {
1066 if (summary !=
NULL) {
1067 if (version[0] !=
'\0') {
1089 const char *
nodesc =
_(
"Current tileset contains no summary.");
1091 if (version[0] !=
'\0') {
1115 if (description !=
NULL) {
1135 if (description !=
NULL) {
1140 if (summary !=
NULL) {
1141 if (version !=
NULL && version[0] !=
'\0') {
1163 const char *
nodesc =
_(
"Current musicset contains no summary.");
1165 if (version !=
NULL && version[0] !=
'\0') {
1189 if (description !=
NULL) {
1216 if (pmul->helptext) {
1217 const char *
sep =
"";
1242 "%s%s",
"\n\n", text);
1352 static char vtext[256];
1357 char *p =
ptmp->topic;
1377 _(
"Sorry, no help topic for %s.\n"),
vitem.topic);
1381 _(
"Sorry, no help topic for %s.\n"
1382 "This page was auto-generated.\n\n"),
1445 .value = {.building = pimprove}
1451 if (
NULL == pimprove) {
1473 &&
pobs->present && !
pobs->quiet) {
1475 _(
"%s The discovery of %s will make %s obsolete.\n"),
1481 &&
pobs->present && !
pobs->quiet) {
1484 _(
"%s The presence of %s in the city will make %s "
1494 _(
"%s A 'small wonder': at most one of your cities may "
1495 "possess this improvement.\n"),
BULLET);
1535 _(
"%s Allows all players with knowledge of %s "
1536 "to build %s units.\n"),
BULLET,
1544 _(
"%s Allows all players with knowledge of required "
1545 "techs to build %s units.\n"),
BULLET,
1551 _(
"%s Allows all players to build %s units.\n"),
BULLET,
1589 if (!
preq->present) {
1613 _(
"%s Makes it possible to target the city building it "
1614 "with the action \'%s\'.\n"),
BULLET,
1622 _(
"%s Makes it possible to target its city with the "
1623 "action \'%s\'.\n"),
BULLET,
1631 _(
"%s Makes it possible to target its city and its "
1632 "trade partners with the action \'%s\'.\n"),
1641 _(
"%s Makes it possible to target all cities with its "
1642 "owner on its continent with the action \'%s\'.\n"),
1651 _(
"%s Makes it possible to target all cities with its "
1652 "owner with the action \'%s\'.\n"),
1661 _(
"%s Makes it possible to target all cities on the "
1662 "same team with the action \'%s\'.\n"),
1671 _(
"%s Makes it possible to target all cities owned by "
1672 "or allied to its owner with the action \'%s\'.\n"),
1681 _(
"%s Makes it possible to target all cities with the "
1682 "action \'%s\'.\n"),
1690 log_error(
"The range %s is invalid for buildings.",
1734 if (
preq->present) {
1757 _(
"%s Makes it impossible to do the action \'%s\' to "
1758 "the city building it.\n"),
1765 _(
"%s Makes it impossible to do the action \'%s\' to "
1773 _(
"%s Makes it impossible to do the action \'%s\' to "
1774 "its city or to its city's trade partners.\n"),
1781 _(
"%s Makes it impossible to do the action \'%s\' to "
1782 "any city with its owner on its continent.\n"),
1789 _(
"%s Makes it impossible to do the action \'%s\' to "
1790 "any city with its owner.\n"),
1797 _(
"%s Makes it impossible to do the action \'%s\' to "
1798 "any city on the same team.\n"),
1805 _(
"%s Makes it impossible to do the action \'%s\' to "
1806 "any city allied to or owned by its owner.\n"),
1813 _(
"%s Makes it impossible to do the action \'%s\' to "
1814 "any city in the game.\n"),
1822 log_error(
"The range %s is invalid for buildings.",
1838 _(
"%s All players start with this improvement in their "
1839 "first city.\n"),
BULLET);
1861 _(
"%s The %s start with this improvement in their "
1862 "first city.\n"),
BULLET,
1872 _(
"%s If you lose the city containing this improvement, "
1873 "it will be rebuilt for free in another of your cities "
1874 "(if the 'savepalace' server setting is enabled).\n"),
1963 _(
" %s Is unreachable. Most units cannot attack this one.\n"),
1970 _(
" %s Doesn't prevent enemy cities from working the tile it's on.\n"),
1978 if (helptxt !=
NULL) {
2015 _(
"%s Belongs to %s unit class."),
2045 _(
" %s Gets a %d%% defensive bonus while in cities.\n"),
2053 _(
" %s Doesn't prevent enemy units from attacking other "
2054 "units on its tile.\n"),
BULLET);
2060 _(
" %s Can attack units on non-native tiles.\n"),
BULLET);
2089 _(
"%s %d%% defense bonus if attacked by %s.\n"),
2097 _(
"%s Reduces target's defense to 1 / %d when "
2098 "attacking %s.\n"),
BULLET,
2105 _(
"%s Reduces target's firepower to 1 when "
2106 "attacking %s.\n"),
BULLET,
2112 _(
"%s %d%% defense bonus if attacked by %s.\n"),
2119 _(
"%s Reduces target's defense to 1 / %.2f when "
2120 "attacking %s.\n"),
BULLET,
2121 ((
float)
cbonus->value + 100.0f) / 100.0f,
2127 _(
"%s %d%% defense bonus "
2128 "instead of any bonuses from city improvements "
2129 "if attacked by %s in a city.\n"),
2162 "are allowed.\n"),
BULLET);
2181 if (!pnation->init_units[
i]) {
2183 }
else if (pnation->init_units[
i] == utype) {
2190 PL_(
"%s The %s start the game with %d of these units.\n",
2191 "%s The %s start the game with %d of these units.\n",
2201 if (
utype2->converted_to == utype
2212 _(
"%s May be obtained by conversion of %s.\n"),
2230 _(
"%s Each player may only have one of this type of unit.\n"),
2237 if (helptxt !=
NULL) {
2244 PL_(
"%s Costs %d population to build.\n",
2245 "%s Costs %d population to build.\n", utype->
pop_cost),
2262 PL_(
"%s Can carry and refuel %d %s unit.\n",
2263 "%s Can carry and refuel up to %d %s units.\n",
2291 _(
" %s Some cargo cannot be loaded except in a city or a "
2292 "base native to this transport.\n"),
BULLET);
2297 _(
" %s Cargo cannot be loaded except in a city or a "
2298 "base native to this transport.\n"),
BULLET);
2306 _(
" %s Some cargo cannot be unloaded except in a city or a "
2307 "base native to this transport.\n"),
BULLET);
2312 _(
" %s Cargo cannot be unloaded except in a city or a "
2313 "base native to this transport.\n"),
BULLET);
2377 _(
"%s May load onto and unload from %s transports even "
2378 "when underway.\n"),
2384 _(
"%s May load onto %s transports even when underway.\n"),
2404 _(
"%s May unload from %s transports even when underway.\n"),
2419 CATLSTR(
buf,
bufsz,
_(
"%s Will never lose a diplomat-versus-diplomat fight.\n"),
2428 _(
"%s Is invisible except when next to an enemy unit or city.\n"),
2433 _(
"%s Can only attack units on native tiles.\n"),
BULLET);
2437 _(
"%s Gets double firepower when attacking cities.\n"),
BULLET);
2443 _(
"%s Ignores terrain effects (moving costs at most %s MP "
2455 "by other units.\n"),
BULLET);
2459 _(
"%s A non-military unit:\n"),
BULLET);
2462 _(
" %s Cannot attack.\n"),
BULLET);
2465 _(
" %s Doesn't impose martial law.\n"),
BULLET);
2468 _(
" %s Can enter foreign territory regardless of peace treaty.\n"),
2472 _(
" %s Doesn't prevent enemy cities from working the tile it's on.\n"),
2477 _(
"%s A field unit: one unhappiness applies even when non-aggressive.\n"),
2484 _(
"%s An enemy unit considering to auto attack this unit will "
2485 "choose to do so even if it has better odds when defending "
2486 "against it than when attacking it.\n"),
BULLET);
2493 _(
"%s Under certain conditions the shield upkeep of this unit can "
2494 "be converted to gold upkeep.\n"),
BULLET);
2501 _(
"%s Can attack against %s units, which are usually not "
2522 _(
"%s Unit has to end each turn next to safe coast or"
2523 " in a city or a base.\n"),
BULLET);
2529 PL_(
"%s Unit has to be next to safe coast, in a city or a base"
2530 " after %d turn.\n",
2531 "%s Unit has to be next to safe coast, in a city or a base"
2532 " after %d turns.\n",
2538 PL_(
"%s Unit has to be in a city or a base"
2539 " after %d turn.\n",
2540 "%s Unit has to be in a city or a base"
2541 " after %d turns.\n",
2551 PL_(
"%s Unit has to be next to safe coast, in a city, a base, or on a %s"
2552 " after %d turn.\n",
2553 "%s Unit has to be next to safe coast, in a city, a base, or on a %s"
2554 " after %d turns.\n",
2560 PL_(
"%s Unit has to be in a city, a base, or on a %s"
2561 " after %d turn.\n",
2562 "%s Unit has to be in a city, a base, or on a %s"
2563 " after %d turns.\n",
2591 _(
"%s Will never be forced (by the autoattack server setting)"
2592 " to attack units moving to an adjacent tile.\n"),
BULLET);
2613 _(
"%s Can do the action \'%s\'.\n"),
2641 _(
"extras among "));
2656 _(
" %s is done to %s%s%s.\n"),
BULLET,
2666 _(
" %s uses up the %s.\n"),
BULLET,
2674 _(
" %s can lead to a %s against a defender.\n"),
2683 { .kind =
VUT_UTYPE, .value.utype = utype },
2694 _(
" %s may fail because of a dice throw.\n"),
2704 _(
" %s the %s may be captured while trying to"
2705 " escape after completing the mission.\n"),
2716 _(
" %s ends this unit's turn.\n"),
2726 _(
" %s ending up on a native tile"
2727 " after this action has been performed"
2728 " ends this unit's turn.\n"),
BULLET);
2745 if (
paction->min_distance == 0) {
2749 _(
" %s target must be at the same tile.\n"),
2755 PL_(
" %s target must be exactly %d tile away.\n",
2756 " %s target must be exactly %d tiles away.\n",
2763 if (
paction->min_distance == 0) {
2767 _(
" %s target can be anywhere.\n"),
BULLET);
2772 PL_(
" %s target must be at least %d tile away.\n",
2773 " %s target must be at least %d tiles away.\n",
2777 }
else if (
paction->min_distance == 0) {
2783 PL_(
" %s target can be max %d tile away.\n",
2784 " %s target can be max %d tiles away.\n",
2793 PL_(
" %s target must be between %d and %d tile away.\n",
2794 " %s target must be between %d and %d tiles away.\n",
2803 const enum effect_type
eft;
2858 _(
" %s %s performing this action during %s causes"
2859 " international outrage: the whole world gets "
2860 "Casus Belli against you.\n"),
BULLET,
2870 _(
" %s %s performing this action during %s gives"
2871 " the victim Casus Belli against you.\n"),
2887 _(
" %s adds %d production.\n"),
BULLET,
2894 { .kind =
VUT_UTYPE, .value.utype = utype },
2898 _(
" %s restores up to %d%% of the target unit's"
2899 " hit points.\n"),
BULLET,
2910 _(
" %s is disabled in the current game.\n"),
2915 PL_(
" %s initial population: %d.\n",
2916 " %s initial population: %d.\n",
2923 PL_(
" %s max target size: %d.\n",
2924 " %s max target size: %d.\n",
2929 PL_(
" %s adds %d population.\n",
2930 " %s adds %d population.\n",
2937 _(
" %s %d per turn.\n"),
BULLET,
2941 _(
" %s Will damage all"
2942 " defenders on a tile, and have no risk for the"
2943 " attacker.\n"),
BULLET);
2948 _(
" %s upgraded to %s or, when possible, to the unit "
2949 "type it upgrades to.\n"),
BULLET,
2955 _(
" %s weaker when tired. If performed with less "
2956 "than a single move point left the attack power "
2957 "is reduced accordingly.\n"),
BULLET);
2962 _(
" %s can wipe stack of units with zero defense.\n"),
2968 PL_(
" %s is converted into %s (takes %d MP).\n",
2969 " %s is converted into %s (takes %d MP).\n",
2981 _(
" %s %d%% of the population of each city inside"
2982 " the nuclear blast dies.\n"),
BULLET,
2986 _(
" %s can never destroy city completely "
2987 "(%d%% of size 1 rounds down to 0).\n"),
BULLET,
2991 _(
" %s can even destroy city completely "
2992 "(%d%% of size 1 rounds up to 1).\n"),
BULLET,
2998 _(
" %s all units caught in the open by the nuclear"
2999 " blast die.\n"),
BULLET);
3002 _(
" %s a unit caught in the nuclear blast while"
3003 " inside a city has a %d%% chance of survival.\n"),
3008 _(
" %s all units caught in the nuclear blast"
3014 { .kind =
VUT_UTYPE, .value.utype = utype },
3023 _(
" %s has a squared blast radius of %d.\n"),
3032 _(
" %s converts target tile terrain to another"
3109 { .kind =
VUT_UTYPE, .value = { .utype = utype }},
3119 .value = { .utype = utype }},
3125 _(
" %s to stay put. No defensive bonus.\n"),
3127 }
else if (bonus > 0) {
3131 _(
" %s granting a %d%% defensive bonus.\n"),
3181 _(
" %s if a suitable hut is at the targetet tile it"
3182 " will be entered.\n"),
BULLET);
3188 _(
" %s if a suitable hut is at the targetet tile it"
3189 " will be frightened.\n"),
BULLET);
3196 _(
" %s the %s may end up loaded into a transport if it"
3197 " can't survive on its own at the target tile.\n"),
3203 _(
" %s These attacks will only damage (never kill)"
3204 " defenders.\n"),
BULLET);
3236 _(
" %s can't be done if %s is legal.\n"),
BULLET,
3241 for (;
i > 0;
i--) {
3281 _(
"%s Doing the action \'%s\' to this unit"
3282 " is impossible.\n"),
BULLET,
3309 _(
" %s Veterans have increased strength in combat.\n"),
3317 _(
" %s Veterans have improved chances in diplomatic "
3322 _(
" %s Veterans are more likely to survive missions.\n"),
3329 _(
" %s Veterans work faster.\n"),
BULLET);
3340 _(
"This type of unit has its own veteran levels:"),
NULL)) {
3366 .value = {.advance =
vap}
3387 if (
NULL != pplayer) {
3395 PL_(
"Starting now, researching %s would need %d bulb.",
3396 "Starting now, researching %s would need %d bulbs.",
3407 PL_(
" The whole project will require %d bulb to complete.",
3408 " The whole project will require %d bulbs to complete.",
3413 PL_(
"To research %s you need to research %d other"
3414 " technology first.%s",
3415 "To research %s you need to research %d other"
3416 " technologies first.%s",
3422 _(
"You cannot research this technology."));
3428 _(
" This number may vary depending on what "
3429 "other players research.\n"));
3457 _(
"%s All players start the game with knowledge of this "
3458 "technology.\n"),
BULLET);
3474 if (pnation->init_techs[j] ==
A_LAST) {
3476 }
else if (pnation->init_techs[j] ==
i) {
3479 _(
"%s The %s start the game with knowledge of this "
3480 "technology.\n"),
BULLET,
3534 _(
"%s Only those who know %s can acquire this "
3535 "technology (by any means).\n"),
3544 _(
"%s The first player to learn %s gets"
3545 " an immediate advance.\n"),
BULLET,
3553 if (helptxt !=
NULL) {
3561 _(
"%s To preserve this technology for our nation some bulbs "
3562 "are needed each turn.\n"),
BULLET);
3585 .value = {.terrain = pterrain}
3601 _(
"%s You cannot build cities on this terrain.\n"),
3607 if (pextra->buildable) {
3609 _(
"%s Paths cannot be built on this terrain.\n"),
3618 if (pextra->buildable) {
3620 _(
"%s Bases cannot be built on this terrain.\n"),
3629 _(
"%s The coastline of this terrain is unsafe.\n"),
3653 _(
"%s Units on this terrain neither impose zones of control "
3654 "nor are restricted by them.\n"),
BULLET);
3657 _(
"%s Units on this terrain may impose a zone of control, or "
3658 "be restricted by one.\n"),
BULLET);
3664 if (helptxt !=
NULL) {
3671 if (
buf[0] !=
'\0') {
3693 static char str[64];
3703 int bonus =
proad->tile_bonus[
o];
3710 if (
str[0] !=
'\0') {
3713 if (
incr == 0 && bonus == 0) {
3730 &&
proad->tile_incr[
o] == 0
3731 &&
proad->tile_bonus[
o] == 0);
3751 { .kind =
VUT_TERRAIN, .value.terrain = pterrain },
3778 bonus[
o] +=
proad->tile_incr_const[
o]
3802 if (bonus[
o] > 0 || pterrain->
output[
o] > 0) {
3824 static char buffer[256];
3834 PL_(
", +%d food",
", +%d food", bonus[0]), bonus[0]);
3838 PL_(
", +%d shield",
", +%d shields", bonus[1]), bonus[1]);
3842 PL_(
", +%d trade",
", +%d trade", bonus[2]), bonus[2]);
3862 .value = {.extra = pextra}
3900 _(
"Build by issuing an \"irrigate\" order.\n"));
3904 _(
"Build by issuing a \"mine\" order.\n"));
3908 _(
"Build by issuing a \"road\" order.\n"));
3915 _(
"Build by issuing a \"build base\" order.\n"));
3917 const char *order =
"";
3919 switch (
pbase->gui_type) {
3932 _(
"Build by issuing a \"%s\" order.\n"), order);
3939 _(
"May randomly appear around polluting city.\n"));
3944 _(
"May randomly appear around nuclear blast.\n"));
3952 _(
"Placed by map generator.\n"));
3957 _(
"Can be explored by certain units.\n"));
3962 _(
"May appear spontaneously.\n"));
3994 int pillage_time = -1;
4004 if (pillage_time < 0) {
4014 if (pillage_time < 0) {
4016 _(
"Can be pillaged by units (time is terrain-dependent).\n"));
4017 }
else if (pillage_time > 0) {
4019 PL_(
"Can be pillaged by units (takes %d turn).\n",
4020 "Can be pillaged by units (takes %d turns).\n",
4021 pillage_time), pillage_time);
4050 _(
"Can be cleaned by units (time is terrain-dependent).\n"));
4053 PL_(
"Can be cleaned by units (takes %d turn).\n",
4054 "Can be cleaned by units (takes %d turns).\n",
4092 _(
"%s Visible only if %s known.\n"),
BULLET,
4099 _(
"%s Units inside are hidden from non-allied players.\n"),
4132 _(
" %s Such units can move onto this tile even if it would "
4133 "not normally be suitable terrain.\n"),
BULLET);
4139 PL_(
" %s Such units situated here are not considered aggressive "
4140 "if this tile is within %d tile of a friendly city.\n",
4141 " %s Such units situated here are not considered aggressive "
4142 "if this tile is within %d tiles of a friendly city.\n",
4150 _(
" %s Such units get a %d%% defense bonus on this "
4172 _(
"%s Can be conquered by %s.\n"),
BULLET,
4179 if (
proad->move_cost == 0) {
4185 _(
"%s Movement cost along %s is %s MP.\n"),
4195 _(
"%s Defeat of one unit does not cause death of all other units "
4196 "on this tile.\n"),
BULLET);
4201 _(
"%s Extends national borders of the building nation.\n"),
4204 if (
pbase->vision_main_sq >= 0) {
4206 _(
"%s Grants permanent vision of an area around the tile to "
4207 "its owner.\n"),
BULLET);
4209 if (
pbase->vision_invis_sq >= 0) {
4211 _(
"%s Allows the owner to see normally invisible stealth units "
4212 "in an area around the tile.\n"),
BULLET);
4214 if (
pbase->vision_subs_sq >= 0) {
4216 _(
"%s Allows the owner to see normally invisible subsurface units "
4217 "in an area around the tile.\n"),
BULLET);
4224 if (helptxt !=
NULL) {
4241 if (
proad->tile_incr[
o] > 0) {
4254 _(
"\nTime to build and output bonus depends on terrain:\n\n"));
4258 _(
"Terrain Time Bonus F/P/T\n"
4259 "----------------------------------\n"));
4262 _(
"\nTime to build depends on terrain:\n\n"));
4267 "------------------\n"));
4273 _(
"\nYields an output bonus with some terrains:\n\n"));
4275 _(
"Terrain Bonus F/P/T\n"
4276 "-------------------------\n"));;
4333 if (
pgood->onetime_pct == 0) {
4335 _(
"There's no bonuses paid when trade route gets established.\n\n"));
4336 }
else if (
pgood->onetime_pct != 100) {
4338 _(
"When trade route gets established, %d%% of the normal bonus is paid.\n"),
4339 pgood->onetime_pct);
4406 .value = {.govern = gov}
4449 if (!
preq->present ||
preq->quiet) {
4453 switch (
preq->source.kind) {
4471 unittype =
preq->source.value.utype;
4475 unitflag =
preq->source.value.unitflag;
4524 .unittype = unittype,
4569 PL_(
"%s Military units away from home and field units"
4570 " will each cause %d citizen to become unhappy.\n",
4571 "%s Military units away from home and field units"
4572 " will each cause %d citizens to become unhappy.\n",
4582 _(
"%s Unhappiness from foreign citizens due to "
4583 "war with their home state is %d%% the usual "
4588 _(
"%s No unhappiness from foreign citizens even when "
4589 "at war with their home state.\n"),
BULLET);
4595 _(
"%s Each foreign citizen causes %.2g unhappiness "
4596 "in their city while you are at war with their "
4597 "home state.\n"),
BULLET,
4605 PL_(
"%s Each of your cities will avoid %d unhappiness"
4606 " caused by units.\n",
4607 "%s Each of your cities will avoid %d unhappiness"
4608 " caused by units.\n",
4616 PL_(
"%s Each of your cities will avoid %d unhappiness,"
4617 " not including that caused by aggression.\n",
4618 "%s Each of your cities will avoid %d unhappiness,"
4619 " not including that caused by aggression.\n",
4627 PL_(
"%s Each of your cities will avoid %d unhappiness,"
4628 " including that caused by aggression.\n",
4629 "%s Each of your cities will avoid %d unhappiness,"
4630 " including that caused by aggression.\n",
4642 _(
"%s You pay no %s upkeep for your units.\n"),
4646 _(
"%s You pay no upkeep for your units.\n"),
4655 _(
"%s You pay %.2g times normal %s upkeep for your "
4660 _(
"%s You pay %.2g times normal upkeep for your "
4675 PL_(
"%s Each of your cities will avoid paying %d %s"
4676 " upkeep for your units.\n",
4677 "%s Each of your cities will avoid paying %d %s"
4678 " upkeep for your units.\n",
peffect->value),
4685 PL_(
"%s Each of your cities will avoid paying %d"
4686 " upkeep for your units.\n",
4687 "%s Each of your cities will avoid paying %d"
4688 " upkeep for your units.\n",
peffect->value),
4696 _(
"%s If you lose your capital,"
4697 " the base chance of civil war is %d%%.\n"),
4704 PL_(
"%s You can have %d city before an "
4705 "additional unhappy citizen appears in each city "
4706 "due to civilization size.\n",
4707 "%s You can have up to %d cities before an "
4708 "additional unhappy citizen appears in each city "
4709 "due to civilization size.\n",
net_value),
4716 PL_(
"%s After the first unhappy citizen due to"
4717 " civilization size, for each %d additional city"
4718 " another unhappy citizen will appear.\n",
4719 "%s After the first unhappy citizen due to"
4720 " civilization size, for each %d additional cities"
4721 " another unhappy citizen will appear.\n",
4730 _(
"%s The maximum rate you can set for science,"
4731 " gold, or luxuries is %d%%.\n"),
4735 _(
"%s Has unlimited science/gold/luxuries rates.\n"),
4743 PL_(
"%s Your units may impose martial law."
4744 " Each military unit inside a city will force %d"
4745 " unhappy citizen to become content.\n",
4746 "%s Your units may impose martial law."
4747 " Each military unit inside a city will force %d"
4748 " unhappy citizens to become content.\n",
4756 PL_(
"%s A maximum of %d unit in each city can enforce"
4758 "%s A maximum of %d units in each city can enforce"
4767 _(
"%s You may grow your cities by means of "
4768 "celebrations."),
BULLET);
4773 _(
" (Cities below size %d cannot grow in this way.)"),
4782 PL_(
"%s If a city is in disorder for more than %d turn "
4783 "in a row, government will fall into anarchy.\n",
4784 "%s If a city is in disorder for more than %d turns "
4785 "in a row, government will fall into anarchy.\n",
4793 _(
"%s Has a senate that may prevent declaration of war.\n"),
4800 _(
"%s Allows partisans when cities are taken by the "
4807 _(
"%s Buildings that normally confer bonuses against"
4808 " unhappiness will instead give gold.\n"),
BULLET);
4823 _(
"%s Pays no upkeep for %s.\n"),
BULLET,
4856 Q_(
"?unitclass:* New %s units will be veteran.\n"),
4862 Q_(
"?unitflag:* New %s units will be veteran.\n"),
4864 }
else if (unittype !=
NULL) {
4874 Q_(
"?unittype:%s New %s units will have the rank "
4883 _(
"%s New units will be veteran.\n"),
BULLET);
4893 PL_(
"%s Each worked tile that gives more than %d %s will"
4894 " suffer a -1 penalty, unless the city working it"
4896 "%s Each worked tile that gives more than %d %s will"
4897 " suffer a -1 penalty, unless the city working it"
4904 _(
" (Cities below size %d will not celebrate.)"),
4913 PL_(
"%s Each worked tile with at least 1 %s will yield"
4914 " %d more of it while the city working it is"
4916 "%s Each worked tile with at least 1 %s will yield"
4917 " %d more of it while the city working it is"
4918 " celebrating.",
peffect->value),
4924 _(
" (Cities below size %d will not celebrate.)"),
4932 PL_(
"%s Each worked tile with at least 1 %s will yield"
4933 " %d more of it.\n",
4934 "%s Each worked tile with at least 1 %s will yield"
4935 " %d more of it.\n",
peffect->value),
4943 _(
"%s %s production is increased %d%%.\n"),
4951 _(
"%s %s production will suffer massive losses.\n"),
4956 _(
"%s %s production will suffer some losses.\n"),
4961 _(
"%s %s production will suffer a small amount "
4971 " within your cities.\n"),
BULLET);
4972 }
else if (
peffect->value < 0) {
4974 " within your cities.\n"),
BULLET);
4989 _(
"%s %s losses will increase quickly"
4990 " with distance from capital.\n"),
4995 _(
"%s %s losses will increase"
4996 " with distance from capital.\n"),
5001 _(
"%s %s losses will increase slowly"
5002 " with distance from capital.\n"),
5011 " into your cities.\n"),
BULLET);
5012 }
else if (
peffect->value < 0) {
5014 " into your cities.\n"),
BULLET);
5022 " monitored.\n"),
BULLET);
5047 _(
"%s Makes it impossible to do the action \'%s\'"
5048 " to your %s.\n"),
BULLET,
5064 static char buf[128];
5077 (any > 0 ?
Q_(
"?blistmore:, ") :
""), utype->
upkeep[
o],
5085 (any > 0 ?
Q_(
"?blistmore:, ") :
""), utype->
happy_cost);
5104 .value = {.nation = pnation}
5108#define PRINT_BREAK() do { \
5109 if (print_break) { \
5110 if (buf[0] != '\0') { \
5111 CATLSTR(buf, bufsz, "\n\n"); \
5113 print_break = FALSE; \
5120 if (pnation->
legend[0] !=
'\0') {
5128 _(
"Initial government is %s.\n"),
5148 _(
"Starts with knowledge of %s in addition to the standard "
5160 int i, j,
n = 0, total = 0;
5167 for (j = 0; j <
n; j++) {
5186 for (
i = 0;
i <
n;
i++) {
5201 for (
i = 0;
i <
n;
i++) {
5206 for (
i = 0;
i <
n;
i++) {
5214 PL_(
"Starts with the following additional unit: %s.\n",
5215 "Starts with the following additional units: %s.\n",
5238 _(
"First city will get %s for free in addition to the "
5248 if (
buf[0] !=
'\0') {
5254 if (
buf[0] !=
'\0') {
const char * action_name_translation(const struct action *action)
enum action_actor_kind action_get_actor_kind(const struct action *paction)
const char * action_id_name_translation(action_id act_id)
void action_array_add_all_by_result(action_id *act_array, int *position, enum action_result result)
void action_array_end(action_id *act_array, int size)
bool action_is_in_use(struct action *paction)
enum action_sub_target_kind action_get_sub_target_kind(const struct action *paction)
bool action_would_be_blocked_by(const struct action *blocked, const struct action *blocker)
bool action_immune_government(struct government *gov, action_id act)
int action_dice_roll_initial_odds(const struct action *paction)
const char * action_target_kind_help(enum action_target_kind kind)
enum action_target_kind action_get_target_kind(const struct action *paction)
struct action_enabler_list * action_enablers_for_action(action_id action)
#define action_id_univs_not_blocking(act_id, act_uni, tgt_uni)
#define action_auto_perf_iterate_end
static struct action * action_by_number(action_id act_id)
#define action_array_iterate(_act_array_, _act_id_)
#define action_has_result(_act_, _res_)
#define action_enabler_list_iterate_end
#define action_id_get_role(act_id)
#define ACTION_DISTANCE_UNLIMITED
#define action_array_iterate_end
#define action_iterate_end
#define action_enabler_list_iterate(action_enabler_list, aenabler)
#define action_iterate(_act_)
#define action_id_get_target_kind(act_id)
#define action_auto_perf_iterate(_act_perf_)
#define ACTION_ODDS_PCT_DICE_ROLL_NA
bool actres_removes_extra(enum action_result result, const struct extra_type *pextra)
bool actres_creates_extra(enum action_result result, const struct extra_type *pextra)
enum action_battle_kind actres_get_battle_kind(enum action_result result)
void astr_free(struct astring *astr)
const char * astr_build_or_list(struct astring *astr, const char *const *items, size_t number)
void astr_set(struct astring *astr, const char *format,...)
const char * astr_build_and_list(struct astring *astr, const char *const *items, size_t number)
void astr_init(struct astring *astr)
static const char * astr_str(const struct astring *astr) fc__attribute((nonnull(1)))
bool territory_claiming_base(const struct base_type *pbase)
#define BV_CLR_ALL_FROM(vec_to, vec_from)
#define BV_ARE_EQUAL(vec1, vec2)
#define BV_ISSET(bv, bit)
#define BV_ISSET_ANY(vec)
struct output_type * get_output_type(Output_type_id output)
const char * get_output_name(Output_type_id output)
#define output_type_iterate(output)
#define output_type_iterate_end
enum client_states client_state(void)
bool client_nation_is_in_current_set(const struct nation_type *pnation)
static struct fc_sockaddr_list * list
const char * counter_name_translation(const struct counter *counter)
struct counter * counter_by_id(int id)
static void road(QVariant data1, QVariant data2)
bool effect_universals_value_never_below(enum effect_type type, struct universal *unis, size_t n_unis, int min_value)
int get_target_bonus_effects(struct effect_list *plist, const struct req_context *context, const struct player *other_player, enum effect_type effect_type)
int effect_value_from_universals(enum effect_type type, struct universal *unis, size_t n_unis)
int effect_cumulative_max(enum effect_type type, struct universal *unis, size_t n_unis)
struct effect_list * get_req_source_effects(const struct universal *psource)
bool building_has_effect(const struct impr_type *pimprove, enum effect_type effect_type)
#define effect_list_iterate_end
#define effect_list_iterate(effect_list, peffect)
#define MAX_NUM_BUILDING_LIST
#define CASUS_BELLI_OUTRAGE
#define CASUS_BELLI_VICTIM
#define MAX_NUM_UNIT_LIST
#define MAX_NUM_TECH_LIST
enum output_type_id Output_type_id
size_t get_internal_string_length(const char *text)
#define PL_(String1, String2, n)
const char * government_name_translation(const struct government *pgovern)
#define governments_iterate(NAME_pgov)
#define governments_iterate_end
static GtkWidget * source
const char * client_string
void insert_client_build_info(char *outbuf, size_t outlen)
void popdown_help_dialog(void)
static void extra_bonus_for_terrain(struct extra_type *pextra, struct terrain *pterrain, int *bonus)
void help_iter_start(void)
static int help_item_compar(const struct help_item *const *ppa, const struct help_item *const *ppb)
static bool help_nodes_init
void free_help_texts(void)
void boot_help_texts(void)
static void insert_allows(struct universal *psource, char *buf, size_t bufsz, const char *prefix)
#define CATLSTR(_b, _s, _t,...)
static bool insert_generated_text(char *outbuf, size_t outlen, const char *name)
static struct help_list * help_nodes
static const char *const help_type_names[]
void helptext_government(char *buf, size_t bufsz, struct player *pplayer, const char *user_text, struct government *gov)
void helptext_advance(char *buf, size_t bufsz, struct player *pplayer, const char *user_text, int i)
enum help_page_type help_type_by_requirement(const struct requirement *req)
char * helptext_unit(char *buf, size_t bufsz, struct player *pplayer, const char *user_text, const struct unit_type *utype, bool class_help)
void helptext_extra(char *buf, size_t bufsz, struct player *pplayer, const char *user_text, struct extra_type *pextra)
void helptext_unitclass(struct unit_class *pclass, char *buf, size_t bufsz)
static void check_help_nodes_init(void)
const struct help_item * get_help_item(int pos)
static bool insert_veteran_help(char *outbuf, size_t outlen, const struct veteran_system *veteran, const char *intro, const char *nolevels)
void helptext_goods(char *buf, size_t bufsz, struct player *pplayer, const char *user_text, struct goods_type *pgood)
static bool show_help_for_nation(const struct nation_type *pnation)
const char * helptext_road_bonus_str(const struct terrain *pterrain, const struct road_type *proad)
static const struct help_list_link * help_nodes_iterator
char * helptext_unit_upkeep_str(const struct unit_type *utype)
const char * helptext_extra_for_terrain_str(struct extra_type *pextra, struct terrain *pterrain, enum unit_activity act)
static void insert_allows_single(struct universal *psource, struct requirement_vector *psubjreqs, const char *subjstr, const char *const *strs, char *buf, size_t bufsz, const char *prefix)
#define help_list_iterate_end
static bool utype_may_do_escape_action(const struct unit_type *utype)
void helptext_specialist(char *buf, size_t bufsz, struct player *pplayer, const char *user_text, struct specialist *pspec)
const struct help_item * get_help_item_spec(const char *name, enum help_page_type htype, int *pos)
#define help_list_iterate(helplist, phelp)
const struct help_item * help_iter_next(void)
char * helptext_building(char *buf, size_t bufsz, struct player *pplayer, const char *user_text, const struct impr_type *pimprove)
void helptext_terrain(char *buf, size_t bufsz, struct player *pplayer, const char *user_text, struct terrain *pterrain)
void helptext_nation(char *buf, size_t bufsz, struct nation_type *pnation, const char *user_text)
static struct help_item * new_help_item(int type)
#define HELP_MUSICSET_ITEM
#define HELP_TILESET_ITEM
#define HELP_RULESET_ITEM
const struct impr_type * valid_improvement(const struct impr_type *pimprove)
struct impr_type * improvement_by_number(const Impr_type_id id)
bool is_great_wonder(const struct impr_type *pimprove)
bool improvement_has_flag(const struct impr_type *pimprove, enum impr_flag_id flag)
const char * improvement_name_translation(const struct impr_type *pimprove)
bool is_small_wonder(const struct impr_type *pimprove)
#define improvement_iterate_end
#define improvement_iterate(_p)
#define fc_assert_ret(condition)
#define log_verbose(message,...)
#define fc_assert(condition)
#define fc_assert_ret_val(condition, val)
#define log_error(message,...)
struct terrain_misc terrain_control
const char * move_points_text(int mp, bool reduce)
const char * move_points_text_full(int mp, bool reduce, const char *prefix, const char *none, bool align)
bool is_native_to_class(const struct unit_class *punitclass, const struct terrain *pterrain, const bv_extras *extras)
bool can_unit_type_transport(const struct unit_type *transporter, const struct unit_class *transported)
bool can_attack_non_native(const struct unit_type *utype)
#define multipliers_iterate(_mul_)
#define multipliers_iterate_end
const char * current_musicset_version(void)
const char * current_musicset_name(void)
const char * current_musicset_summary(void)
const char * current_musicset_description(void)
static const char * name_translation_get(const struct name_translation *ptrans)
const char * nation_plural_translation(const struct nation_type *pnation)
#define nations_iterate_end
#define nations_iterate(NAME_pnation)
const char * diplrel_name_translation(int value)
struct section_file * secfile_load(const char *filename, bool allow_duplicates)
const char * secfile_error(void)
const char * section_name(const struct section *psection)
void secfile_destroy(struct section_file *secfile)
void secfile_check_unused(const struct section_file *secfile)
struct section_list * secfile_sections_by_name_prefix(const struct section_file *secfile, const char *prefix)
const char ** secfile_lookup_str_vec(const struct section_file *secfile, size_t *dim, const char *path,...)
const char * secfile_lookup_str(const struct section_file *secfile, const char *path,...)
#define section_list_iterate(seclist, psection)
#define section_list_iterate_end
bool req_text_insert_nl(char *buf, size_t bufsz, struct player *pplayer, const struct requirement *preq, enum rt_verbosity verb, const char *prefix)
bool universal_is_relevant_to_requirement(const struct requirement *req, const struct universal *source)
bool universal_fulfills_requirements(bool check_necessary, const struct requirement_vector *reqs, const struct universal *source)
bool are_universals_equal(const struct universal *psource1, const struct universal *psource2)
const char * universal_name_translation(const struct universal *psource, char *buf, size_t bufsz)
#define requirement_fulfilled_by_unit_type(_ut_, _rqs_)
#define requirement_fulfilled_by_improvement(_imp_, _rqs_)
#define requirement_vector_iterate_end
#define requirement_vector_iterate(req_vec, preq)
int research_goal_unknown_techs(const struct research *presearch, Tech_type_id goal)
bool research_invention_reachable(const struct research *presearch, const Tech_type_id tech)
int research_goal_bulbs_required(const struct research *presearch, Tech_type_id goal)
int research_total_bulbs_required(const struct research *presearch, Tech_type_id tech, bool loss_value)
struct research * research_get(const struct player *pplayer)
enum tech_state research_invention_state(const struct research *presearch, Tech_type_id tech)
bool road_has_flag(const struct road_type *proad, enum road_flag_id flag)
bool road_provides_move_bonus(const struct road_type *proad)
server_setting_id server_setting_by_name(const char *name)
bool server_setting_value_bool_get(server_setting_id id)
struct setting_list * level[OLEVELS_NUM]
int compare_strings(const void *first, const void *second)
const char * fileinfoname(const struct strvec *dirs, const char *filename)
const struct strvec * get_data_dirs(void)
struct specialist * specialist_by_number(const Specialist_type_id id)
const char * specialist_plural_translation(const struct specialist *sp)
#define specialist_type_iterate_end
#define specialist_type_iterate(sp)
void strvec_destroy(struct strvec *psv)
void strvec_append(struct strvec *psv, const char *string)
const char * strvec_to_or_list(const struct strvec *psv, struct astring *astr)
struct strvec * strvec_new(void)
void strvec_clear(struct strvec *psv)
size_t strvec_size(const struct strvec *psv)
const char * strvec_to_and_list(const struct strvec *psv, struct astring *astr)
#define strvec_iterate(psv, str)
#define strvec_iterate_end
struct packet_ruleset_control control
int global_init_techs[MAX_NUM_TECH_LIST]
struct packet_game_info info
int global_init_buildings[MAX_NUM_BUILDING_LIST]
struct packet_scenario_info scenario
char * ruleset_description
struct civ_game::@30 rgame
struct veteran_system * veteran
struct civ_game::@31::@34 client
struct requirement_vector reqs
struct requirement_vector obsolete_by
struct requirement_vector reqs
int init_buildings[MAX_NUM_BUILDING_LIST]
struct government * init_government
struct unit_type * init_units[MAX_NUM_UNIT_LIST]
int init_techs[MAX_NUM_TECH_LIST]
enum borders_mode borders
int nuke_defender_survival_chance_pct
enum tech_upkeep_style tech_upkeep_style
char version[MAX_LEN_NAME]
int road_output_incr_pct[O_LAST]
struct requirement_vector build_reqs
struct veteran_system * veteran
const struct unit_type * obsoleted_by
bv_unit_classes disembarks
const struct unit_type * converted_to
struct combat_bonus_list * bonuses
struct veteran_level * definitions
int fc_snprintf(char *str, size_t n, const char *format,...)
size_t fc_strlcpy(char *dest, const char *src, size_t n)
int fc_strcasecmp(const char *str0, const char *str1)
size_t fc_strlcat(char *dest, const char *src, size_t n)
int cat_snprintf(char *str, size_t n, const char *format,...)
#define sz_strlcpy(dest, src)
#define sz_strlcat(dest, src)
#define fc_strncmp(_s1_, _s2_, _len_)
struct advance * advance_by_number(const Tech_type_id atype)
bool advance_has_flag(Tech_type_id tech, enum tech_flag_id flag)
const char * tech_class_name_translation(const struct tech_class *ptclass)
struct advance * advance_requires(const struct advance *padvance, enum tech_req require)
const char * advance_name_translation(const struct advance *padvance)
struct advance * valid_advance_by_number(const Tech_type_id id)
bool techs_have_fixed_costs(void)
const char * tech_flag_helptxt(enum tech_flag_id id)
Tech_type_id advance_number(const struct advance *padvance)
#define advance_index_iterate_end
#define advance_root_req_iterate_end
#define advance_index_iterate(_start, _index)
#define advance_root_req_iterate(_goal, _padvance)
const char * terrain_name_translation(const struct terrain *pterrain)
const char * terrain_rule_name(const struct terrain *pterrain)
enum terrain_class terrain_type_terrain_class(const struct terrain *pterrain)
const char * terrain_flag_helptxt(enum terrain_flag_id id)
int terrain_extra_build_time(const struct terrain *pterrain, enum unit_activity activity, const struct extra_type *tgt)
#define terrain_type_iterate(_p)
#define terrain_type_iterate_end
#define terrain_has_flag(terr, flag)
const char * tileset_description(struct tileset *t)
const char * tileset_summary(struct tileset *t)
const char * tileset_name_get(struct tileset *t)
const char * tileset_version(struct tileset *t)
const char * goods_name_translation(struct goods_type *pgood)
#define goods_type_iterate_end
#define goods_type_iterate(_p)
const struct impr_type * building
const char * uclass_name_translation(const struct unit_class *pclass)
bool utype_action_takes_all_mp(const struct unit_type *putype, struct action *paction)
bool utype_can_freely_unload(const struct unit_type *pcargotype, const struct unit_type *ptranstype)
const char * unit_class_flag_helptxt(enum unit_class_flag_id id)
Unit_Class_id uclass_count(void)
struct unit_type * get_role_unit(int role, int role_index)
int utype_build_shield_cost_base(const struct unit_type *punittype)
const struct veteran_system * utype_veteran_system(const struct unit_type *punittype)
int num_role_units(int role)
bool utype_can_freely_load(const struct unit_type *pcargotype, const struct unit_type *ptranstype)
Unit_type_id utype_count(void)
int utype_veteran_levels(const struct unit_type *punittype)
bool utype_can_do_action_result(const struct unit_type *putype, enum action_result result)
bool utype_action_takes_all_mp_if_ustate_is(const struct unit_type *putype, struct action *paction, const enum ustate_prop prop)
const struct veteran_level * utype_veteran_level(const struct unit_type *punittype, int level)
bool utype_is_consumed_by_action(const struct action *paction, const struct unit_type *utype)
bool utype_veteran_has_power_bonus(const struct unit_type *punittype)
const char * unit_type_flag_helptxt(enum unit_type_flag_id id)
const char * utype_name_translation(const struct unit_type *punittype)
bool can_utype_do_act_if_tgt_diplrel(const struct unit_type *punit_type, const action_id act_id, const int prop, const bool is_there)
bool utype_can_do_action(const struct unit_type *putype, const action_id act_id)
#define UCF_LAST_USER_FLAG
static bool uclass_has_flag(const struct unit_class *punitclass, enum unit_class_flag_id flag)
#define utype_fuel(ptype)
#define combat_bonus_list_iterate_end
#define combat_bonus_list_iterate(bonuslist, pbonus)
#define unit_tech_reqs_iterate_end
#define unit_class_iterate(_p)
#define unit_tech_reqs_iterate(_utype_, _p)
static bool utype_has_flag(const struct unit_type *punittype, int flag)
#define UTYF_LAST_USER_FLAG
#define unit_type_iterate(_p)
#define uclass_index(_c_)
#define unit_class_iterate_end
#define unit_type_iterate_end
const char * freeciv_name_version(void)