diff -Nur -X/mnt/data/freeciv-dev/freeciv/diff_ignore freeciv/common/player.c codeciv/common/player.c --- freeciv/common/player.c Mon Apr 9 20:29:38 2001 +++ codeciv/common/player.c Mon Apr 9 21:08:46 2001 @@ -14,6 +14,7 @@ #include #endif +#include #include #include @@ -295,30 +296,32 @@ } maxrate = get_government_max_rate(pplayer->government); - + surplus = 0; if (pplayer->economic.luxury > maxrate) { - surplus = pplayer->economic.luxury - maxrate; + surplus += pplayer->economic.luxury - maxrate; pplayer->economic.luxury = maxrate; - if (pplayer->economic.science >= pplayer->economic.tax) - pplayer->economic.science += surplus; - else - pplayer->economic.tax += surplus; } if (pplayer->economic.tax > maxrate) { - surplus = pplayer->economic.tax - maxrate; + surplus += pplayer->economic.tax - maxrate; pplayer->economic.tax = maxrate; - if (pplayer->economic.science >= pplayer->economic.luxury) - pplayer->economic.science += surplus; - else - pplayer->economic.luxury += surplus; } if (pplayer->economic.science > maxrate) { - surplus = pplayer->economic.science - maxrate; + surplus += pplayer->economic.science - maxrate; pplayer->economic.science = maxrate; - if (pplayer->economic.tax >= pplayer->economic.luxury) - pplayer->economic.tax += surplus; - else - pplayer->economic.luxury += surplus; + } + + assert(surplus % 10 == 0); + while (surplus > 0) { + if (pplayer->economic.science < maxrate) { + pplayer->economic.science += 10; + } else if (pplayer->economic.tax < maxrate) { + pplayer->economic.tax += 10; + } else if (pplayer->economic.luxury < maxrate) { + pplayer->economic.luxury += 10; + } else { + abort(); + } + surplus -= 10; } return; diff -Nur -X/mnt/data/freeciv-dev/freeciv/diff_ignore freeciv/server/plrhand.c codeciv/server/plrhand.c --- freeciv/server/plrhand.c Mon Apr 9 20:29:56 2001 +++ codeciv/server/plrhand.c Mon Apr 9 20:43:23 2001 @@ -629,8 +629,9 @@ /* Keep luxuries if we have any. Try to max out science. -GJW */ pplayer->economic.science = MIN (100 - pplayer->economic.luxury, get_government_max_rate (pplayer->government)); - pplayer->economic.tax = 100 - (pplayer->economic.luxury + - pplayer->economic.science); + pplayer->economic.tax = MIN(100 - (pplayer->economic.luxury + pplayer->economic.science), + get_government_max_rate (pplayer->government)); + pplayer->economic.luxury = 100 - pplayer->economic.science - pplayer->economic.tax; } check_player_government_rates(pplayer);