Project

General

Profile

Feature #552 ยป 0072-Factor-helptext_unitclass-out-from-helptext_unit.patch

Marko Lindqvist, 05/04/2024 06:02 PM

View differences:

client/helpdata.c
return FALSE;
}
/************************************************************************//**
Unit class part of the unit helptext
@param pclass Class to add help text about
@param buf Buffer to append help text to
@param bufsz Size of the buffer
****************************************************************************/
static void helptext_unitclass(struct unit_class *pclass,
char *buf, size_t bufsz)
{
int flagid;
if (pclass->helptext != NULL) {
strvec_iterate(pclass->helptext, text) {
cat_snprintf(buf, bufsz, "\n%s\n", _(text));
} strvec_iterate_end;
} else {
CATLSTR(buf, bufsz, "\n");
}
if (!uclass_has_flag(pclass, UCF_TERRAIN_SPEED)) {
/* TRANS: indented unit class property, preserve leading spaces */
CATLSTR(buf, bufsz, _(" %s Speed is not affected by terrain.\n"),
BULLET);
}
if (!uclass_has_flag(pclass, UCF_TERRAIN_DEFENSE)) {
/* TRANS: indented unit class property, preserve leading spaces */
CATLSTR(buf, bufsz, _(" %s Does not get defense bonuses from terrain.\n"),
BULLET);
}
if (!uclass_has_flag(pclass, UCF_ZOC)) {
/* TRANS: indented unit class property, preserve leading spaces */
CATLSTR(buf, bufsz, _(" %s Not subject to zones of control.\n"),
BULLET);
}
if (uclass_has_flag(pclass, UCF_DAMAGE_SLOWS)) {
/* TRANS: indented unit class property, preserve leading spaces */
CATLSTR(buf, bufsz, _(" %s Slowed down while damaged.\n"), BULLET);
}
if (uclass_has_flag(pclass, UCF_UNREACHABLE)) {
CATLSTR(buf, bufsz,
/* TRANS: indented unit class property, preserve leading spaces */
_(" %s Is unreachable. Most units cannot attack this one.\n"),
BULLET);
}
if (uclass_has_flag(pclass, UCF_DOESNT_OCCUPY_TILE)) {
CATLSTR(buf, bufsz,
/* TRANS: Indented unit class property, preserve leading spaces */
_(" %s Doesn't prevent enemy cities from working the tile it's on.\n"),
BULLET);
}
for (flagid = UCF_USER_FLAG_1; flagid <= UCF_LAST_USER_FLAG; flagid++) {
if (uclass_has_flag(pclass, flagid)) {
const char *helptxt = unit_class_flag_helptxt(flagid);
if (helptxt != NULL) {
/* TRANS: Indented unit class property, preserve leading spaces */
CATLSTR(buf, bufsz, " %s %s\n", BULLET, _(helptxt));
}
}
}
}
/************************************************************************//**
Append misc dynamic text for units.
Transport capacity, unit flags, fuel.
......
_("%s Belongs to %s unit class."),
BULLET,
uclass_name_translation(pclass));
if (NULL != pclass->helptext) {
strvec_iterate(pclass->helptext, text) {
cat_snprintf(buf, bufsz, "\n%s\n", _(text));
} strvec_iterate_end;
} else {
CATLSTR(buf, bufsz, "\n");
}
if (!uclass_has_flag(pclass, UCF_TERRAIN_SPEED)) {
/* TRANS: indented unit class property, preserve leading spaces */
CATLSTR(buf, bufsz, _(" %s Speed is not affected by terrain.\n"),
BULLET);
}
if (!uclass_has_flag(pclass, UCF_TERRAIN_DEFENSE)) {
/* TRANS: indented unit class property, preserve leading spaces */
CATLSTR(buf, bufsz, _(" %s Does not get defense bonuses from terrain.\n"),
BULLET);
}
if (!uclass_has_flag(pclass, UCF_ZOC)) {
/* TRANS: indented unit class property, preserve leading spaces */
CATLSTR(buf, bufsz, _(" %s Not subject to zones of control.\n"),
BULLET);
} else if (!utype_has_flag(utype, UTYF_IGZOC)) {
/* TRANS: indented unit class property, preserve leading spaces */
helptext_unitclass(pclass, buf, bufsz);
if (uclass_has_flag(pclass, UCF_ZOC)
&& !utype_has_flag(utype, UTYF_IGZOC)) {
/* TRANS: Indented unit class property, preserve leading spaces */
CATLSTR(buf, bufsz, _(" %s Subject to zones of control.\n"),
BULLET);
}
if (uclass_has_flag(pclass, UCF_DAMAGE_SLOWS)) {
/* TRANS: indented unit class property, preserve leading spaces */
CATLSTR(buf, bufsz, _(" %s Slowed down while damaged.\n"), BULLET);
}
if (utype->defense_strength > 0) {
struct universal unit_is_in_city[] = {
{ .kind = VUT_UTYPE, .value = { .utype = utype }},
......
if (bonus > 0) {
cat_snprintf(buf, bufsz,
/* TRANS: indented unit class property, preserve leading
/* TRANS: Indented unit class property, preserve leading
* spaces */
_(" %s Gets a %d%% defensive bonus while in cities.\n"),
BULLET, bonus);
}
}
if (uclass_has_flag(pclass, UCF_UNREACHABLE)) {
if (uclass_has_flag(pclass, UCF_UNREACHABLE)
&& utype_has_flag(utype, UTYF_NEVER_PROTECTS)) {
CATLSTR(buf, bufsz,
/* TRANS: indented unit class property, preserve leading spaces */
_(" %s Is unreachable. Most units cannot attack this one.\n"),
BULLET);
if (utype_has_flag(utype, UTYF_NEVER_PROTECTS)) {
CATLSTR(buf, bufsz,
/* TRANS: indented twice; preserve leading spaces */
_(" %s Doesn't prevent enemy units from attacking other "
"units on its tile.\n"), BULLET);
}
}
if (uclass_has_flag(pclass, UCF_DOESNT_OCCUPY_TILE)
&& !utype_has_flag(utype, UTYF_CIVILIAN)) {
CATLSTR(buf, bufsz,
/* TRANS: indented unit class property, preserve leading spaces */
_(" %s Doesn't prevent enemy cities from working the tile it's on.\n"),
BULLET);
/* TRANS: Indented twice; preserve leading spaces */
_(" %s Doesn't prevent enemy units from attacking other "
"units on its tile.\n"), BULLET);
}
if (can_attack_non_native(utype)) {
CATLSTR(buf, bufsz,
/* TRANS: indented unit class property, preserve leading spaces */
/* TRANS: Indented unit class property, preserve leading spaces */
_(" %s Can attack units on non-native tiles.\n"), BULLET);
}
for (flagid = UCF_USER_FLAG_1; flagid <= UCF_LAST_USER_FLAG; flagid++) {
if (uclass_has_flag(pclass, flagid)) {
const char *helptxt = unit_class_flag_helptxt(flagid);
if (helptxt != NULL) {
/* TRANS: indented unit class property, preserve leading spaces */
CATLSTR(buf, bufsz, " %s %s\n", BULLET, _(helptxt));
}
}
}
/* The unit's combat bonuses. Won't mention that another unit type has a
* combat bonus against this unit type. Doesn't handle complex cases like
    (1-1/1)