diff -Nur -Xp1/diff_ignore orig/common/city.c p1/common/city.c --- orig/common/city.c Thu Oct 4 22:34:39 2001 +++ p1/common/city.c Wed Oct 10 18:44:15 2001 @@ -1965,6 +1965,9 @@ city_got_building(pcity, B_PALACE)) val /= 2; val *= g->corruption_level; val /= 100; + + /* trade penalty if city is smaller than fulltradesize */ + val = MAX(val, trade * (game.fulltradesize - pcity->size) * 3 / 2 / game.fulltradesize); if (val > trade) val = trade; return (val); /* how did y'all let me forget this one? -- Syela */ diff -Nur -Xp1/diff_ignore orig/common/game.c p1/common/game.c --- orig/common/game.c Sat Oct 6 15:44:49 2001 +++ p1/common/game.c Wed Oct 10 18:44:15 2001 @@ -715,6 +715,7 @@ game.fogofwar = GAME_DEFAULT_FOGOFWAR; game.fogofwar_old= game.fogofwar; game.auto_ai_toggle = GAME_DEFAULT_AUTO_AI_TOGGLE; + game.fulltradesize = GAME_DEFAULT_FULLTRADESIZE; game.barbarianrate = GAME_DEFAULT_BARBARIANRATE; game.onsetbarbarian = GAME_DEFAULT_ONSETBARBARIAN; game.nbarbarians = 0; diff -Nur -Xp1/diff_ignore orig/common/game.h p1/common/game.h --- orig/common/game.h Sun Sep 16 22:27:13 2001 +++ p1/common/game.h Wed Oct 10 18:44:15 2001 @@ -73,6 +73,7 @@ int diplchance; int cityfactor; int civilwarsize; + int fulltradesize; int min_players, max_players, nplayers; int aifill; int barbarianrate; @@ -377,6 +378,10 @@ #define GAME_DEFAULT_PINGTIMEOUT 60 #define GAME_MIN_PINGTIMEOUT 60 #define GAME_MAX_PINGTIMEOUT 1800 + +#define GAME_DEFAULT_FULLTRADESIZE 1 +#define GAME_MIN_FULLTRADESIZE 1 +#define GAME_MAX_FULLTRADESIZE 150 #define GAME_DEFAULT_BARBARIANRATE 2 #define GAME_MIN_BARBARIANRATE 0 diff -Nur -Xp1/diff_ignore orig/server/savegame.c p1/server/savegame.c --- orig/server/savegame.c Wed Oct 3 11:31:06 2001 +++ p1/server/savegame.c Wed Oct 10 18:44:15 2001 @@ -2004,6 +2004,7 @@ game.warminglevel = secfile_lookup_int(file, "game.warminglevel"); game.nuclearwinter = secfile_lookup_int_default(file, 0, "game.nuclearwinter"); game.coolinglevel = secfile_lookup_int_default(file, 8, "game.coolinglevel"); + game.fulltradesize = secfile_lookup_int_default(file, 1, "game.fulltradesize"); game.unhappysize = secfile_lookup_int(file, "game.unhappysize"); game.angrycitizen = secfile_lookup_int_default(file, 0, "game.angrycitizen"); @@ -2366,6 +2367,7 @@ secfile_insert_int(file, game.warminglevel, "game.warminglevel"); secfile_insert_int(file, game.nuclearwinter, "game.nuclearwinter"); secfile_insert_int(file, game.coolinglevel, "game.coolinglevel"); + secfile_insert_int(file, game.fulltradesize, "game.fulltradesize"); secfile_insert_int(file, game.unhappysize, "game.unhappysize"); secfile_insert_int(file, game.angrycitizen, "game.angrycitizen"); secfile_insert_int(file, game.cityfactor, "game.cityfactor"); diff -Nur -Xp1/diff_ignore orig/server/stdinhand.c p1/server/stdinhand.c --- orig/server/stdinhand.c Sun Sep 16 22:27:55 2001 +++ p1/server/stdinhand.c Wed Oct 10 19:08:25 2001 @@ -489,7 +489,17 @@ N_("If a city would expand, but it can't because it needs an Aqueduct " "(or Sewer System), it loses this percentage of its foodbox " "(or half that amount if it has a Granary).") }, - + + { "fulltradesize", &game.fulltradesize, NULL, NULL, + SSET_RULES, SSET_TO_CLIENT, + GAME_MIN_FULLTRADESIZE, GAME_MAX_FULLTRADESIZE, GAME_DEFAULT_FULLTRADESIZE, + N_("Minimum city size to get full trade"), + N_("There is a trade penalty in all cities smaller than this. " + "The penalty is 100% (no trade at all) for sizes up to " + "fulltradesize/3, and decreases gradually to 0% (no penalty except the " + "normal corruption) for size=fulltradesize. This does not apply under " + "Democracy.") }, + { "unhappysize", &game.unhappysize, NULL, NULL, SSET_RULES, SSET_TO_CLIENT, GAME_MIN_UNHAPPYSIZE, GAME_MAX_UNHAPPYSIZE, GAME_DEFAULT_UNHAPPYSIZE,