Feature #1836 » 1836.patch
| common/reqtext.c | ||
|---|---|---|
|
#include "reqtext.h"
|
||
|
/*************************************************************//**
|
||
|
Append text for the requirement. Something like
|
||
|
"Requires knowledge of the technology Communism."
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
pplayer may be nullptr. Note that it must be updated every time
|
||
|
a new requirement type or range is defined.
|
||
|
returns TRUE if success, FALSE if any problem or "Not supported".
|
||
|
*****************************************************************/
|
||
|
bool req_text_insert(char *buf, size_t bufsz, struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
enum rt_verbosity verb, const char *prefix)
|
||
|
static bool req_text_counter(char *buf, size_t bufsz,
|
||
|
struct player *pplayer,
|
||
|
const struct requirement *preq,
|
||
|
const char *prefix)
|
||
|
{
|
||
|
if (preq->quiet && verb != VERB_ACTUAL) {
|
||
|
return FALSE;
|
||
|
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;
|
||
|
}
|
||
|
switch (preq->source.kind) {
|
||
|
case VUT_NONE:
|
||
|
return FALSE;
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
case VUT_COUNTER:
|
||
|
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) {
|
||
|
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);
|
||
|
_("Requires knowledge of the technology %s."),
|
||
|
advance_name_translation(preq->source.value.advance));
|
||
|
} 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);
|
||
|
_("Prevented by knowledge of the technology %s."),
|
||
|
advance_name_translation(preq->source.value.advance));
|
||
|
}
|
||
|
break;
|
||
|
case VUT_ADVANCE:
|
||
|
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);
|
||
|
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 a player on your team knows the "
|
||
|
_("Requires that someone has discovered 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."),
|
||
|
_("Requires that no-one has yet discovered the "
|
||
|
"technology %s."),
|
||
|
advance_name_translation(preq->source.value.advance));
|
||
|
}
|
||
|
return TRUE;
|
||
|
case REQ_RANGE_ALLIANCE:
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
} else {
|
||
|
if (preq->present) {
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
_("Requires that a player allied to you knows the "
|
||
|
_("Requires that some player 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 "
|
||
|
_("Requires that no player 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. */
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
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;
|
||
|
}
|
||
|
case VUT_TECHFLAG:
|
||
|
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. */
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
case VUT_GOVERNMENT:
|
||
|
if (preq->range != REQ_RANGE_PLAYER) {
|
||
|
break;
|
||
|
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, _("Requires the %s government."),
|
||
|
government_name_translation(preq->source.value.govern));
|
||
|
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, _("Not available under the %s government."),
|
||
|
government_name_translation(preq->source.value.govern));
|
||
|
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 VUT_GOVFLAG:
|
||
|
if (preq->range != REQ_RANGE_PLAYER) {
|
||
|
break;
|
||
|
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, _("Requires a %s government."),
|
||
|
gov_flag_id_translated_name(preq->source.value.govflag));
|
||
|
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, _("Not available under a %s government."),
|
||
|
gov_flag_id_translated_name(preq->source.value.govflag));
|
||
|
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 VUT_ACHIEVEMENT:
|
||
|
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. */
|
||
|
break;
|
||
|
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;
|
||
|
}
|
||
|
break;
|
||
|
return TRUE;
|
||
|
}
|
||
|
case VUT_ACTION:
|
||
|
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. */
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
case VUT_IMPR_GENUS:
|
||
|
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. */
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
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;
|
||
|
}
|
||
|
case VUT_IMPR_FLAG:
|
||
|
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. */
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
/*************************************************************//**
|
||
|
Append text for a requirement type.
|
||
|
case VUT_PLAYER_FLAG:
|
||
|
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. */
|
||
|
break;
|
||
|
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));
|
||
|
}
|
||
|
break;
|
||
|
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;
|
||
|
}
|
||
|
case VUT_PLAYER_STATE:
|
||
|
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. */
|
||
|
break;
|
||
|
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));
|
||
|
}
|
||
|
break;
|
||
|
return TRUE;
|
||
|
default:
|
||
|
/* Not supported. */
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
case VUT_IMPROVEMENT:
|
||
|
case VUT_SITE:
|
||
|
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));
|
||
|
}
|
||
|
/*************************************************************//**
|
||
|
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 {
|
||
|
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));
|
||
|
}
|
||
|
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 {
|
||
|
/* 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));
|
||
|
}
|
||
|
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 {
|
||
|
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));
|
||
|
}
|
||
|
cat_snprintf(buf, bufsz,
|
||
|
/* TRANS: %s is a wonder */
|
||
|
_("Prevented if %s has ever been built."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/* Non-great-wonder world-ranged requirements not supported */
|
||
|
break;
|
||
|
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 {
|
||
|
/* 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 {
|
||
|
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));
|
||
|
}
|
||
|
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 {
|
||
|
/* 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));
|
||
|
}
|
||
|
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 {
|
||
|
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));
|
||
|
}
|
||
|
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-wonder alliance-ranged requirements not supported */
|
||
|
break;
|
||
|
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));
|
||
|
}
|
||
|
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 {
|
||
|
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));
|
||
|
}
|
||
|
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 {
|
||
|
/* 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));
|
||
|
}
|
||
|
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 {
|
||
|
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));
|
||
|
}
|
||
|
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));
|
||
|
}
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/* Non-wonder team-ranged requirements not supported */
|
||
|
break;
|
||
|
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 {
|
||
|
/* 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 {
|
||
|
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));
|
||
|
}
|
||
|
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 {
|
||
|
/* 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));
|
||
|
}
|
||
|
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 {
|
||
|
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));
|
||
|
}
|
||
|
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 player-ranged requirements not supported */
|
||
|
break;
|
||
|
case REQ_RANGE_CONTINENT:
|
||
|
if (is_wonder(preq->source.value.building)) {
|
||
|
fc_strlcat(buf, prefix, bufsz);
|
||
|
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 %s in one of your cities on the same "
|
||
|
"continent, and not yet obsolete."),
|
||
|
_("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 %s in one of your cities on the same "
|
||
|
"continent."),
|
||
|
_("Requires someone on your team to have "
|
||
|
"built %s at some point."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
| ... | ... | |
|
&& 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."),
|
||
|
_("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 %s is in one of your cities on the "
|
||
|
"same continent."),
|
||
|
_("Prevented if someone on your team has ever "
|
||
|
"built %s."),
|
||
|
improvement_name_translation
|
||
|
(preq->source.value.building));
|
||
|
}
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
/* Surviving or non-wonder continent-ranged requirements not supported */
|
||
|
break;
|
||
|
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 {
|
||
|
/* 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 {
|
||
|
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));
|
||
|
/* 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 {
|
||
|
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));
|
||
|
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;
|
||
|
case REQ_RANGE_CITY:
|
||
|
}
|
||
- « Previous
- 1
- 2
- 3
- Next »