Feature #1836 ยป 1836.patch
| common/reqtext.c | ||
|---|---|---|
|
#include "reqtext.h"
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_counter(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
if (preq->present) {
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Requires counter %s to achieve at minimum %d value."),
|
||
|
counter_rule_name(preq->source.value.counter),
|
||
|
preq->source.value.counter->checkpoint);
|
||
|
} else {
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Requires counter %s to be less than %d value."),
|
||
|
counter_rule_name(preq->source.value.counter),
|
||
|
preq->source.value.counter->checkpoint - 1);
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_advance(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
switch (preq->range) {
|
||
|
case REQ_RANGE_PLAYER:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Requires knowledge of the technology %s."),
|
||
|
advance_name_translation(preq->source.value.advance));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Prevented by knowledge of the technology %s."),
|
||
|
advance_name_translation(preq->source.value.advance));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_TEAM:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Requires that a player on your team knows the "
|
||
|
"technology %s."),
|
||
|
advance_name_translation(preq->source.value.advance));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Prevented if any player on your team knows the "
|
||
|
"technology %s."),
|
||
|
advance_name_translation(preq->source.value.advance));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_ALLIANCE:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Requires that a player allied to you knows the "
|
||
|
"technology %s."),
|
||
|
advance_name_translation(preq->source.value.advance));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Prevented if any player allied to you knows the "
|
||
|
"technology %s."),
|
||
|
advance_name_translation(preq->source.value.advance));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_WORLD:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->survives) {
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Requires that someone has discovered the "
|
||
|
"technology %s."),
|
||
|
advance_name_translation(preq->source.value.advance));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Requires that no-one has yet discovered the "
|
||
|
"technology %s."),
|
||
|
advance_name_translation(preq->source.value.advance));
|
||
|
}
|
||
|
} else {
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Requires that some player knows the "
|
||
|
"technology %s."),
|
||
|
advance_name_translation(preq->source.value.advance));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Requires that no player knows the "
|
||
|
"technology %s."),
|
||
|
advance_name_translation(preq->source.value.advance));
|
||
|
}
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_LOCAL:
|
||
|
case REQ_RANGE_TILE:
|
||
|
case REQ_RANGE_CADJACENT:
|
||
|
case REQ_RANGE_ADJACENT:
|
||
|
case REQ_RANGE_CITY:
|
||
|
case REQ_RANGE_TRADE_ROUTE:
|
||
|
case REQ_RANGE_CONTINENT:
|
||
|
case REQ_RANGE_COUNT:
|
||
|
/* Not supported. */
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_techflag(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
switch (preq->range) {
|
||
|
case REQ_RANGE_PLAYER:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a (translatable) tech flag. */
|
||
|
_("Requires knowledge of a technology with the "
|
||
|
"\"%s\" flag."),
|
||
|
tech_flag_id_translated_name(preq->source.value.techflag));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a (translatable) tech flag. */
|
||
|
_("Prevented by knowledge of any technology with the "
|
||
|
"\"%s\" flag."),
|
||
|
tech_flag_id_translated_name(preq->source.value.techflag));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_TEAM:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a (translatable) tech flag. */
|
||
|
_("Requires that a player on your team knows "
|
||
|
"a technology with the \"%s\" flag."),
|
||
|
tech_flag_id_translated_name(preq->source.value.techflag));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a (translatable) tech flag. */
|
||
|
_("Prevented if any player on your team knows "
|
||
|
"any technology with the \"%s\" flag."),
|
||
|
tech_flag_id_translated_name(preq->source.value.techflag));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_ALLIANCE:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a (translatable) tech flag. */
|
||
|
_("Requires that a player allied to you knows "
|
||
|
"a technology with the \"%s\" flag."),
|
||
|
tech_flag_id_translated_name(preq->source.value.techflag));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a (translatable) tech flag. */
|
||
|
_("Prevented if any player allied to you knows "
|
||
|
"any technology with the \"%s\" flag."),
|
||
|
tech_flag_id_translated_name(preq->source.value.techflag));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_WORLD:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a (translatable) tech flag. */
|
||
|
_("Requires that some player knows a technology "
|
||
|
"with the \"%s\" flag."),
|
||
|
tech_flag_id_translated_name(preq->source.value.techflag));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a (translatable) tech flag. */
|
||
|
_("Requires that no player knows any technology with "
|
||
|
"the \"%s\" flag."),
|
||
|
tech_flag_id_translated_name(preq->source.value.techflag));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_LOCAL:
|
||
|
case REQ_RANGE_TILE:
|
||
|
case REQ_RANGE_CADJACENT:
|
||
|
case REQ_RANGE_ADJACENT:
|
||
|
case REQ_RANGE_CITY:
|
||
|
case REQ_RANGE_TRADE_ROUTE:
|
||
|
case REQ_RANGE_CONTINENT:
|
||
|
case REQ_RANGE_COUNT:
|
||
|
/* Not supported. */
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_government(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
if (preq->range != REQ_RANGE_PLAYER) {
|
||
|
return FALSE;
|
||
|
}
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz, _("Requires the %s government."),
|
||
|
government_name_translation(preq->source.value.govern));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz, _("Not available under the %s government."),
|
||
|
government_name_translation(preq->source.value.govern));
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_government_flag(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
if (preq->range != REQ_RANGE_PLAYER) {
|
||
|
return FALSE;
|
||
|
}
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz, _("Requires a %s government."),
|
||
|
gov_flag_id_translated_name(preq->source.value.govflag));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz, _("Not available under a %s government."),
|
||
|
gov_flag_id_translated_name(preq->source.value.govflag));
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_achievement(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
switch (preq->range) {
|
||
|
case REQ_RANGE_PLAYER:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz, _("Requires you to have achieved \"%s\"."),
|
||
|
achievement_name_translation(preq->source.value.achievement));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz, _("Not available once you have achieved "
|
||
|
"\"%s\"."),
|
||
|
achievement_name_translation(preq->source.value.achievement));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_TEAM:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz, _("Requires that at least one of your "
|
||
|
"team-mates has achieved \"%s\"."),
|
||
|
achievement_name_translation(preq->source.value.achievement));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz, _("Not available if any of your team-mates "
|
||
|
"has achieved \"%s\"."),
|
||
|
achievement_name_translation(preq->source.value.achievement));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_ALLIANCE:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz, _("Requires that at least one of your allies "
|
||
|
"has achieved \"%s\"."),
|
||
|
achievement_name_translation(preq->source.value.achievement));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz, _("Not available if any of your allies has "
|
||
|
"achieved \"%s\"."),
|
||
|
achievement_name_translation(preq->source.value.achievement));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_WORLD:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz, _("Requires that at least one player "
|
||
|
"has achieved \"%s\"."),
|
||
|
achievement_name_translation(preq->source.value.achievement));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz, _("Not available if any player has "
|
||
|
"achieved \"%s\"."),
|
||
|
achievement_name_translation(preq->source.value.achievement));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_LOCAL:
|
||
|
case REQ_RANGE_TILE:
|
||
|
case REQ_RANGE_CADJACENT:
|
||
|
case REQ_RANGE_ADJACENT:
|
||
|
case REQ_RANGE_CITY:
|
||
|
case REQ_RANGE_TRADE_ROUTE:
|
||
|
case REQ_RANGE_CONTINENT:
|
||
|
case REQ_RANGE_COUNT:
|
||
|
/* Not supported. */
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_action(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
switch (preq->range) {
|
||
|
case REQ_RANGE_LOCAL:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz, _("Applies to the \"%s\" action."),
|
||
|
action_name_translation(preq->source.value.action));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz, _("Doesn't apply to the \"%s\""
|
||
|
" action."),
|
||
|
action_name_translation(preq->source.value.action));
|
||
|
}
|
||
|
return TRUE;
|
||
|
default:
|
||
|
/* Not supported. */
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_impr_genus(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
switch (preq->range) {
|
||
|
case REQ_RANGE_LOCAL:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz, _("Applies to \"%s\" buildings."),
|
||
|
impr_genus_id_translated_name(
|
||
|
preq->source.value.impr_genus));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz, _("Doesn't apply to \"%s\" buildings."),
|
||
|
impr_genus_id_translated_name(
|
||
|
preq->source.value.impr_genus));
|
||
|
}
|
||
|
return TRUE;
|
||
|
default:
|
||
|
/* Not supported. */
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_impr_flag(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
switch (preq->range) {
|
||
|
case REQ_RANGE_LOCAL:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz, _("Applies to \"%s\" buildings."),
|
||
|
impr_flag_id_translated_name(
|
||
|
preq->source.value.impr_flag));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz, _("Doesn't apply to \"%s\" buildings."),
|
||
|
impr_flag_id_translated_name(
|
||
|
preq->source.value.impr_flag));
|
||
|
}
|
||
|
return TRUE;
|
||
|
default:
|
||
|
/* Not supported. */
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_player_flag(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
switch (preq->range) {
|
||
|
case REQ_RANGE_PLAYER:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz, _("Applies to players with \"%s\" flag."),
|
||
|
plr_flag_id_translated_name(
|
||
|
preq->source.value.plr_flag));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz, _("Doesn't apply to players with \"%s\" flag."),
|
||
|
plr_flag_id_translated_name(
|
||
|
preq->source.value.plr_flag));
|
||
|
}
|
||
|
return TRUE;
|
||
|
default:
|
||
|
/* Not supported. */
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_player_state(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
switch (preq->range) {
|
||
|
case REQ_RANGE_PLAYER:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz, _("Applies to \"%s\" players."),
|
||
|
plrstate_type_translated_name(preq->source.value.plrstate));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz, _("Doesn't apply to \"%s\" players."),
|
||
|
plrstate_type_translated_name(preq->source.value.plrstate));
|
||
|
}
|
||
|
return TRUE;
|
||
|
default:
|
||
|
/* Not supported. */
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_improvement(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
switch (preq->range) {
|
||
|
case REQ_RANGE_WORLD:
|
||
|
if (is_great_wonder(preq->source.value.building)) {
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->survives) {
|
||
|
if (preq->present) {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Requires that %s was built at some point, "
|
||
|
"and that it has not yet been rendered "
|
||
|
"obsolete."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Requires that %s was built at some point."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
} else {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if %s has ever been built, "
|
||
|
"unless it would be obsolete."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if %s has ever been built."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
/* Non-surviving requirement */
|
||
|
if (preq->present) {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Requires %s to be owned by any player "
|
||
|
"and not yet obsolete."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Requires %s to be owned by any player."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
} else {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if %s is currently owned by "
|
||
|
"any player, unless it is obsolete."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if %s is currently owned by "
|
||
|
"any player."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/* Non-great-wonder world-ranged requirements not supported */
|
||
|
return FALSE;
|
||
|
case REQ_RANGE_ALLIANCE:
|
||
|
if (is_wonder(preq->source.value.building)) {
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->survives) {
|
||
|
if (preq->present) {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Requires someone who is currently allied to "
|
||
|
"you to have built %s at some point, and for "
|
||
|
"it not to have been rendered obsolete."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Requires someone who is currently allied to "
|
||
|
"you to have built %s at some point."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
} else {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if someone currently allied to you "
|
||
|
"has ever built %s, unless it would be "
|
||
|
"obsolete."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if someone currently allied to you "
|
||
|
"has ever built %s."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
/* Non-surviving requirement */
|
||
|
if (preq->present) {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Requires someone allied to you to own %s, "
|
||
|
"and for it not to have been rendered "
|
||
|
"obsolete."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Requires someone allied to you to own %s."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
} else {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if someone allied to you owns %s, "
|
||
|
"unless it is obsolete."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if someone allied to you owns %s."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/* Non-wonder alliance-ranged requirements not supported */
|
||
|
return FALSE;
|
||
|
case REQ_RANGE_TEAM:
|
||
|
if (is_wonder(preq->source.value.building)) {
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->survives) {
|
||
|
if (preq->present) {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Requires someone on your team to have "
|
||
|
"built %s at some point, and for it not "
|
||
|
"to have been rendered obsolete."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Requires someone on your team to have "
|
||
|
"built %s at some point."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
} else {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if someone on your team has ever "
|
||
|
"built %s, unless it would be obsolete."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if someone on your team has ever "
|
||
|
"built %s."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
/* Non-surviving requirement */
|
||
|
if (preq->present) {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Requires someone on your team to own %s, "
|
||
|
"and for it not to have been rendered "
|
||
|
"obsolete."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Requires someone on your team to own %s."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
} else {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if someone on your team owns %s, "
|
||
|
"unless it is obsolete."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if someone on your team owns %s."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/* Non-wonder team-ranged requirements not supported */
|
||
|
return FALSE;
|
||
|
case REQ_RANGE_PLAYER:
|
||
|
if (is_wonder(preq->source.value.building)) {
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->survives) {
|
||
|
if (preq->present) {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Requires you to have built %s at some point, "
|
||
|
"and for it not to have been rendered "
|
||
|
"obsolete."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Requires you to have built %s at some point."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
} else {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if you have ever built %s, "
|
||
|
"unless it would be obsolete."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if you have ever built %s."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
/* Non-surviving requirement */
|
||
|
if (preq->present) {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Requires you to own %s, which must not "
|
||
|
"be obsolete."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Requires you to own %s."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
} else {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if you own %s, unless it is "
|
||
|
"obsolete."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if you own %s."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/* Non-wonder player-ranged requirements not supported */
|
||
|
return FALSE;
|
||
|
case REQ_RANGE_CONTINENT:
|
||
|
if (is_wonder(preq->source.value.building)) {
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Requires %s in one of your cities on the same "
|
||
|
"continent, and not yet obsolete."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Requires %s in one of your cities on the same "
|
||
|
"continent."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
} else {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if %s is in one of your cities on the "
|
||
|
"same continent, unless it is obsolete."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if %s is in one of your cities on the "
|
||
|
"same continent."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/* Surviving or non-wonder continent-ranged requirements not supported */
|
||
|
return FALSE;
|
||
|
case REQ_RANGE_TRADE_ROUTE:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
/* Should only apply to wonders */
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a building or wonder */
|
||
|
_("Requires %s in the city or a trade partner "
|
||
|
"(and not yet obsolete)."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a building or wonder */
|
||
|
_("Requires %s in the city or a trade partner."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
} else {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
/* Should only apply to wonders */
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a building or wonder */
|
||
|
_("Prevented by %s in the city or a trade partner "
|
||
|
"(unless it is obsolete)."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a building or wonder */
|
||
|
_("Prevented by %s in the city or a trade partner."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_CITY:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
/* Should only apply to wonders */
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a building or wonder */
|
||
|
_("Requires %s in the city (and not yet obsolete)."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a building or wonder */
|
||
|
_("Requires %s in the city."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
} else {
|
||
|
if (preq->source.kind == VUT_IMPROVEMENT
|
||
|
&& can_improvement_go_obsolete(preq->source.value.building)) {
|
||
|
/* Should only apply to wonders */
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a building or wonder */
|
||
|
_("Prevented by %s in the city (unless it is "
|
||
|
"obsolete)."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a building or wonder */
|
||
|
_("Prevented by %s in the city."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_LOCAL:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Only applies to \"%s\" buildings."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Does not apply to \"%s\" buildings."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_TILE:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Requires \"%s\" building in a city on the tile."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Prevented by \"%s\" building in a city on the tile."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_CADJACENT:
|
||
|
case REQ_RANGE_ADJACENT:
|
||
|
case REQ_RANGE_COUNT:
|
||
|
/* Not supported. */
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_extra(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
switch (preq->range) {
|
||
|
case REQ_RANGE_LOCAL:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Only applies to \"%s\" extras."),
|
||
|
extra_name_translation(preq->source.value.extra));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Does not apply to \"%s\" extras."),
|
||
|
extra_name_translation(preq->source.value.extra));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_TILE:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?extra:Requires %s on the tile."),
|
||
|
extra_name_translation(preq->source.value.extra));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?extra:Prevented by %s on the tile."),
|
||
|
extra_name_translation(preq->source.value.extra));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_CADJACENT:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?extra:Requires %s on the tile or a cardinally "
|
||
|
"adjacent tile."),
|
||
|
extra_name_translation(preq->source.value.extra));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?extra:Prevented by %s on the tile or any cardinally "
|
||
|
"adjacent tile."),
|
||
|
extra_name_translation(preq->source.value.extra));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_ADJACENT:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?extra:Requires %s on the tile or an adjacent "
|
||
|
"tile."),
|
||
|
extra_name_translation(preq->source.value.extra));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?extra:Prevented by %s on the tile or any adjacent "
|
||
|
"tile."),
|
||
|
extra_name_translation(preq->source.value.extra));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_CITY:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?extra:Requires %s on a tile within the city "
|
||
|
"radius."),
|
||
|
extra_name_translation(preq->source.value.extra));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?extra:Prevented by %s on any tile within the city "
|
||
|
"radius."),
|
||
|
extra_name_translation(preq->source.value.extra));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_TRADE_ROUTE:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?extra:Requires %s on a tile within the city "
|
||
|
"radius, or the city radius of a trade partner."),
|
||
|
extra_name_translation(preq->source.value.extra));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?extra:Prevented by %s on any tile within the city "
|
||
|
"radius or the city radius of a trade partner."),
|
||
|
extra_name_translation(preq->source.value.extra));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_CONTINENT:
|
||
|
case REQ_RANGE_PLAYER:
|
||
|
case REQ_RANGE_TEAM:
|
||
|
case REQ_RANGE_ALLIANCE:
|
||
|
case REQ_RANGE_WORLD:
|
||
|
case REQ_RANGE_COUNT:
|
||
|
/* Not supported. */
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_good(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
switch (preq->range) {
|
||
|
case REQ_RANGE_CITY:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz, Q_("?good:Requires import of %s."),
|
||
|
goods_name_translation(preq->source.value.good));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz, Q_("?goods:Prevented by import of %s."),
|
||
|
goods_name_translation(preq->source.value.good));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_LOCAL:
|
||
|
case REQ_RANGE_TILE:
|
||
|
case REQ_RANGE_CADJACENT:
|
||
|
case REQ_RANGE_ADJACENT:
|
||
|
case REQ_RANGE_TRADE_ROUTE:
|
||
|
case REQ_RANGE_CONTINENT:
|
||
|
case REQ_RANGE_PLAYER:
|
||
|
case REQ_RANGE_TEAM:
|
||
|
case REQ_RANGE_ALLIANCE:
|
||
|
case REQ_RANGE_WORLD:
|
||
|
case REQ_RANGE_COUNT:
|
||
|
/* Not supported. */
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_tiledef(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
switch (preq->range) {
|
||
|
case REQ_RANGE_LOCAL:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Only applies to \"%s\" tiledef."),
|
||
|
tiledef_name_translation(preq->source.value.tiledef));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Does not apply to \"%s\" tiledef."),
|
||
|
tiledef_name_translation(preq->source.value.tiledef));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_TILE:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?tiledef:Requires %s on the tile."),
|
||
|
tiledef_name_translation(preq->source.value.tiledef));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?tiledef:Prevented by %s on the tile."),
|
||
|
tiledef_name_translation(preq->source.value.tiledef));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_CADJACENT:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?tiledef:Requires %s on the tile or a cardinally "
|
||
|
"adjacent tile."),
|
||
|
tiledef_name_translation(preq->source.value.tiledef));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?tiledef:Prevented by %s on the tile or any cardinally "
|
||
|
"adjacent tile."),
|
||
|
tiledef_name_translation(preq->source.value.tiledef));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_ADJACENT:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?tiledef:Requires %s on the tile or an adjacent "
|
||
|
"tile."),
|
||
|
tiledef_name_translation(preq->source.value.tiledef));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?tiledef:Prevented by %s on the tile or any adjacent "
|
||
|
"tile."),
|
||
|
tiledef_name_translation(preq->source.value.tiledef));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_CITY:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?tiledef:Requires %s on a tile within the city "
|
||
|
"radius."),
|
||
|
tiledef_name_translation(preq->source.value.tiledef));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?tiledef:Prevented by %s on any tile within the city "
|
||
|
"radius."),
|
||
|
tiledef_name_translation(preq->source.value.tiledef));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_TRADE_ROUTE:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?tiledef:Requires %s on a tile within the city "
|
||
|
"radius, or the city radius of a trade partner."),
|
||
|
tiledef_name_translation(preq->source.value.tiledef));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?tiledef:Prevented by %s on any tile within the city "
|
||
|
"radius or the city radius of a trade partner."),
|
||
|
tiledef_name_translation(preq->source.value.tiledef));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_CONTINENT:
|
||
|
case REQ_RANGE_PLAYER:
|
||
|
case REQ_RANGE_TEAM:
|
||
|
case REQ_RANGE_ALLIANCE:
|
||
|
case REQ_RANGE_WORLD:
|
||
|
case REQ_RANGE_COUNT:
|
||
|
/* Not supported. */
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_terrain(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
switch (preq->range) {
|
||
|
case REQ_RANGE_TILE:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz, Q_("?terrain:Requires %s on the tile."),
|
||
|
terrain_name_translation(preq->source.value.terrain));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz, Q_("?terrain:Prevented by %s on the tile."),
|
||
|
terrain_name_translation(preq->source.value.terrain));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_CADJACENT:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?terrain:Requires %s on the tile or a cardinally "
|
||
|
"adjacent tile."),
|
||
|
terrain_name_translation(preq->source.value.terrain));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?terrain:Prevented by %s on the tile or any "
|
||
|
"cardinally adjacent tile."),
|
||
|
terrain_name_translation(preq->source.value.terrain));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_ADJACENT:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?terrain:Requires %s on the tile or an adjacent "
|
||
|
"tile."),
|
||
|
terrain_name_translation(preq->source.value.terrain));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?terrain:Prevented by %s on the tile or any "
|
||
|
"adjacent tile."),
|
||
|
terrain_name_translation(preq->source.value.terrain));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_CITY:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?terrain:Requires %s on a tile within the city "
|
||
|
"radius."),
|
||
|
terrain_name_translation(preq->source.value.terrain));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?terrain:Prevented by %s on any tile within the city "
|
||
|
"radius."),
|
||
|
terrain_name_translation(preq->source.value.terrain));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_TRADE_ROUTE:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?terrain:Requires %s on a tile within the city "
|
||
|
"radius, or the city radius of a trade partner."),
|
||
|
terrain_name_translation(preq->source.value.terrain));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
Q_("?terrain:Prevented by %s on any tile within the city "
|
||
|
"radius or the city radius of a trade partner."),
|
||
|
terrain_name_translation(preq->source.value.terrain));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_CONTINENT:
|
||
|
case REQ_RANGE_PLAYER:
|
||
|
case REQ_RANGE_TEAM:
|
||
|
case REQ_RANGE_ALLIANCE:
|
||
|
case REQ_RANGE_WORLD:
|
||
|
case REQ_RANGE_LOCAL:
|
||
|
case REQ_RANGE_COUNT:
|
||
|
/* Not supported. */
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_nation(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
switch (preq->range) {
|
||
|
case REQ_RANGE_PLAYER:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: "... playing as the Swedes." */
|
||
|
_("Requires that you are playing as the %s."),
|
||
|
nation_plural_translation(preq->source.value.nation));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: "... playing as the Turks." */
|
||
|
_("Requires that you are not playing as the %s."),
|
||
|
nation_plural_translation(preq->source.value.nation));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_TEAM:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: "... same team as the Indonesians." */
|
||
|
_("Requires that you are on the same team as "
|
||
|
"the %s."),
|
||
|
nation_plural_translation(preq->source.value.nation));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: "... same team as the Greeks." */
|
||
|
_("Requires that you are not on the same team as "
|
||
|
"the %s."),
|
||
|
nation_plural_translation(preq->source.value.nation));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_ALLIANCE:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: "... allied with the Koreans." */
|
||
|
_("Requires that you are allied with the %s."),
|
||
|
nation_plural_translation(preq->source.value.nation));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: "... allied with the Danes." */
|
||
|
_("Requires that you are not allied with the %s."),
|
||
|
nation_plural_translation(preq->source.value.nation));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_WORLD:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->survives) {
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: "Requires the Apaches to have ..." */
|
||
|
_("Requires the %s to have been in the game."),
|
||
|
nation_plural_translation(preq->source.value.nation));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: "Requires the Celts never to have ..." */
|
||
|
_("Requires the %s never to have been in the "
|
||
|
"game."),
|
||
|
nation_plural_translation(preq->source.value.nation));
|
||
|
}
|
||
|
} else {
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: "Requires the Belgians in the game." */
|
||
|
_("Requires the %s in the game."),
|
||
|
nation_plural_translation(preq->source.value.nation));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: "Requires that the Russians are not ... */
|
||
|
_("Requires that the %s are not in the game."),
|
||
|
nation_plural_translation(preq->source.value.nation));
|
||
|
}
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_LOCAL:
|
||
|
case REQ_RANGE_TILE:
|
||
|
case REQ_RANGE_CADJACENT:
|
||
|
case REQ_RANGE_ADJACENT:
|
||
|
case REQ_RANGE_CITY:
|
||
|
case REQ_RANGE_TRADE_ROUTE:
|
||
|
case REQ_RANGE_CONTINENT:
|
||
|
case REQ_RANGE_COUNT:
|
||
|
/* Not supported. */
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_nation_group(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
switch (preq->range) {
|
||
|
case REQ_RANGE_PLAYER:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: nation group: "... playing African nation." */
|
||
|
_("Requires that you are playing %s nation."),
|
||
|
nation_group_name_translation(preq->source.value.nationgroup));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: nation group: "... playing Imaginary nation." */
|
||
|
_("Prevented if you are playing %s nation."),
|
||
|
nation_group_name_translation(preq->source.value.nationgroup));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_TEAM:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: nation group: "Requires Medieval nation ..." */
|
||
|
_("Requires %s nation on your team."),
|
||
|
nation_group_name_translation(preq->source.value.nationgroup));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: nation group: "Prevented by Medieval nation ..." */
|
||
|
_("Prevented by %s nation on your team."),
|
||
|
nation_group_name_translation(preq->source.value.nationgroup));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_ALLIANCE:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: nation group: "Requires Modern nation ..." */
|
||
|
_("Requires %s nation in alliance with you."),
|
||
|
nation_group_name_translation(preq->source.value.nationgroup));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: nation group: "Prevented by Modern nation ..." */
|
||
|
_("Prevented if %s nation is in alliance with you."),
|
||
|
nation_group_name_translation(preq->source.value.nationgroup));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_WORLD:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: nation group: "Requires Asian nation ..." */
|
||
|
_("Requires %s nation in the game."),
|
||
|
nation_group_name_translation(preq->source.value.nationgroup));
|
||
|
} else {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: nation group: "Prevented by Asian nation ..." */
|
||
|
_("Prevented by %s nation in the game."),
|
||
|
nation_group_name_translation(preq->source.value.nationgroup));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_LOCAL:
|
||
|
case REQ_RANGE_TILE:
|
||
|
case REQ_RANGE_CADJACENT:
|
||
|
case REQ_RANGE_ADJACENT:
|
||
|
case REQ_RANGE_CITY:
|
||
|
case REQ_RANGE_TRADE_ROUTE:
|
||
|
case REQ_RANGE_CONTINENT:
|
||
|
case REQ_RANGE_COUNT:
|
||
|
/* Not supported. */
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
static bool req_text_style(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||