Author: jtn Date: Fri Aug 7 00:54:36 2015 New Revision: 29372 URL: http://svn.gna.org/viewcvs/freeciv?rev=29372&view=rev Log: Make city dialog Happiness tab explain Empire_Size_Step and angry citizens better. Clarify Empire_Size_Base description in help.
See gna bug #23611. Modified: trunk/client/helpdata.c trunk/client/text.c Modified: trunk/client/helpdata.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/client/helpdata.c?rev=29372&r1=29371&r2=29372&view=diff ============================================================================== --- trunk/client/helpdata.c (original) +++ trunk/client/helpdata.c Fri Aug 7 00:54:36 2015 @@ -5129,20 +5129,18 @@ case EFT_EMPIRE_SIZE_BASE: if (playerwide) { cat_snprintf(buf, bufsz, - /* TRANS: %d should always be greater than 2. */ - PL_("* When you have %d city, the first unhappy " - "citizen will appear in each city due to " - "civilization size.\n", - "* When you have %d cities, the first unhappy " - "citizen will appear in each city due to " - "civilization size.\n", net_value), + PL_("* You can have %d city before an " + "additional unhappy citizen appears in each city " + "due to civilization size.\n", + "* You can have up to %d cities before an " + "additional unhappy citizen appears in each city " + "due to civilization size.\n", net_value), net_value); } break; case EFT_EMPIRE_SIZE_STEP: if (playerwide) { cat_snprintf(buf, bufsz, - /* TRANS: %d should always be greater than 2. */ PL_("* After the first unhappy citizen due to" " civilization size, for each %d additional city" " another unhappy citizen will appear.\n", Modified: trunk/client/text.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/client/text.c?rev=29372&r1=29371&r2=29372&view=diff ============================================================================== --- trunk/client/text.c (original) +++ trunk/client/text.c Fri Aug 7 00:54:36 2015 @@ -1723,37 +1723,115 @@ /* Special case where penalty is disabled; see * player_content_citizens(). */ astr_add_line(&str, - _("Cities: %d total, but no penalty for empire size."), - cities); - } else { - int excess = cities - basis; - int penalty = 0; + PL_("Cities: %d total, but no penalty for empire size.", + "Cities: %d total, but no penalty for empire size.", + cities), + cities); + astr_add_line(&str, + /* TRANS: %d is number of citizens */ + PL_("%d content per city.", + "%d content per city.", content), + content); + } else { + /* Can have up to and including 'basis' cities without penalty */ + int excess = MAX(cities - basis, 0); + int penalty; + int unhappy, angry; + int last, next; if (excess > 0) { - if (step > 0) + if (step > 0) { penalty = 1 + (excess - 1) / step; - else + } else { penalty = 1; - } else { - excess = 0; + } + } else { penalty = 0; } + unhappy = MIN(penalty, content); + angry = game.info.angrycitizen ? MAX(penalty-content, 0) : 0; + if (penalty >= 1) { + /* 'last' is when last actual malcontent appeared, will saturate + * if no angry citizens */ + last = basis + (unhappy+angry-1)*step; + if (!game.info.angrycitizen && unhappy == content) { + /* Maxed out unhappy citizens, so no more penalties */ + next = 0; + } else { + /* Angry citizens can continue appearing indefinitely */ + next = last + step; + } + } else { + last = 0; + next = basis; + } + astr_add_line(&str, - _("Cities: %d total, %d over threshold of %d cities."), - cities, excess, basis); - astr_add_line(&str, - /* TRANS: 0-21 content [citizen(s)] ... */ - PL_("%d content before penalty.", - "%d content before penalty.", - content), - content); - astr_add_line(&str, - /* TRANS: 0-21 unhappy citizen(s). */ - PL_("%d additional unhappy citizen.", - "%d additional unhappy citizens.", - penalty), - penalty); + /* TRANS: sentence fragment, will have text appended */ + PL_("Cities: %d total:", + "Cities: %d total:", cities), + cities); + if (excess > 0) { + astr_add(&str, + /* TRANS: appended to "Cities: %d total:"; preserve leading + * space. Pluralized in "nearest threshold of %d cities". */ + PL_(" %d over nearest threshold of %d city.", + " %d over nearest threshold of %d cities.", last), + cities - last, last); + astr_add_line(&str, + /* TRANS: Number of content [citizen(s)] ... */ + PL_("%d content before penalty.", + "%d content before penalty.", content), + content); + astr_add_line(&str, + PL_("%d additional unhappy citizen.", + "%d additional unhappy citizens.", unhappy), + unhappy); + if (angry > 0) { + astr_add_line(&str, + PL_("%d angry citizen.", + "%d angry citizens.", angry), + angry); + } + } else { + astr_add(&str, + /* TRANS: appended to "Cities: %d total:"; preserve leading + * space. */ + PL_(" not more than %d, so no empire size penalty.", + " not more than %d, so no empire size penalty.", next), + next); + astr_add_line(&str, + /* TRANS: %d is number of citizens */ + PL_("%d content per city.", + "%d content per city.", content), + content); + } + if (next >= cities && penalty < content) { + astr_add_line(&str, + PL_("With %d more city, another citizen will become " + "unhappy.", + "With %d more cities, another citizen will become " + "unhappy.", + next + 1 - cities), + next + 1 - cities); + } else if (next >= cities) { + /* We maxed out the number of unhappy citizens, but they can get + * angry instead. */ + fc_assert(game.info.angrycitizen); + astr_add_line(&str, + PL_("With %d more city, another citizen will become " + "angry.", + "With %d more cities, another citizen will become " + "angry.", + next + 1 - cities), + next + 1 - cities); + } else { + /* Either no Empire_Size_Step, or we maxed out on unhappy citizens + * and ruleset doesn't allow angry ones. */ + astr_add_line(&str, + _("More cities will not cause more unhappy citizens.")); + } } return astr_str(&str); _______________________________________________ Freeciv-commits mailing list Freeciv-commits@gna.org https://mail.gna.org/listinfo/freeciv-commits