diff -Nur -Xpatches/no.freeciv freeciv/client/packhand.c my_freeciv/client/packhand.c --- freeciv/client/packhand.c Fri Oct 27 18:20:00 2000 +++ my_freeciv/client/packhand.c Sun Dec 10 04:14:34 2000 @@ -977,6 +977,8 @@ game.rgame.pillage_select = 1; } game.rgame.nuke_contamination = CONTAMINATION_POLLUTION; +game.rgame.worker_at_city_center = 0; +game.rgame.city_center_food_extra = 0; } /* REMOVE TO HERE */ @@ -2036,6 +2038,8 @@ game.rgame.hut_overflight = packet->hut_overflight; game.rgame.pillage_select = packet->pillage_select; game.rgame.nuke_contamination = packet->nuke_contamination; + game.rgame.worker_at_city_center = packet->worker_at_city_center; + game.rgame.city_center_food_extra = packet->city_center_food_extra; } /************************************************************************** diff -Nur -Xpatches/no.freeciv freeciv/common/city.c my_freeciv/common/city.c --- freeciv/common/city.c Fri Oct 27 18:20:07 2000 +++ my_freeciv/common/city.c Sun Dec 10 03:50:50 2000 @@ -690,6 +690,8 @@ if (finit_vis_radius_sq); cptr=put_uint8(cptr, packet->hut_overflight); cptr=put_uint8(cptr, packet->pillage_select); -if (pc && has_capability("nuclear_fallout", pc->capability)) { - cptr=put_uint8(cptr, packet->nuke_contamination); -} + if (pc && has_capability("nuclear_fallout", pc->capability)) { + cptr=put_uint8(cptr, packet->nuke_contamination); + } + cptr=put_uint8(cptr, packet->worker_at_city_center); + cptr=put_uint8(cptr, packet->city_center_food_extra); put_uint16(buffer, cptr-buffer); return send_connection_data(pc, buffer, cptr-buffer); @@ -3825,11 +3827,13 @@ iget_uint8(&iter, &packet->init_vis_radius_sq); iget_uint8(&iter, &packet->hut_overflight); iget_uint8(&iter, &packet->pillage_select); -if (pc && has_capability("nuclear_fallout", pc->capability)) { - iget_uint8(&iter, &packet->nuke_contamination); -} else { - packet->nuke_contamination = CONTAMINATION_POLLUTION; -} + if (pc && has_capability("nuclear_fallout", pc->capability)) { + iget_uint8(&iter, &packet->nuke_contamination); + } else { + packet->nuke_contamination = CONTAMINATION_POLLUTION; + } + iget_uint8(&iter, &packet->worker_at_city_center); + iget_uint8(&iter, &packet->city_center_food_extra); pack_iter_end(&iter, pc); remove_packet_from_buffer(pc->buffer); diff -Nur -Xpatches/no.freeciv freeciv/common/packets.h my_freeciv/common/packets.h --- freeciv/common/packets.h Fri Oct 27 18:20:09 2000 +++ my_freeciv/common/packets.h Sun Dec 10 03:51:49 2000 @@ -768,6 +768,8 @@ int hut_overflight; int pillage_select; int nuke_contamination; + int worker_at_city_center; + int city_center_food_extra; }; /********************************************************* diff -Nur -Xpatches/no.freeciv freeciv/data/civ1/game.ruleset my_freeciv/data/civ1/game.ruleset --- freeciv/data/civ1/game.ruleset Sun Jul 9 21:48:07 2000 +++ my_freeciv/data/civ1/game.ruleset Sun Dec 10 04:18:00 2000 @@ -38,3 +38,14 @@ ; "Pollution" - Pollution (same as industrial/population-generated). ; "Fallout" - Nuclear Fallout (distinct from industrial/population). nuke_contamination = "Pollution" + +;Whether to assign a worker for city center +;(Default value 0, which means city center is worked for free. +; The only other choice is 1, which means city center takes one real +; citizen to work on it. This is a departure from Civ1/2 behavior, +; meant to discourage the use of ICS (Infinite City Sleaze) strategy +; and encourage city development.) +worker_at_city_center = 0 +;If the above is set to 1, extra food is needed at the city center +;to allow normal city growth +city_center_food_extra = 0 diff -Nur -Xpatches/no.freeciv freeciv/data/civ2/game.ruleset my_freeciv/data/civ2/game.ruleset --- freeciv/data/civ2/game.ruleset Sun Jul 9 21:48:08 2000 +++ my_freeciv/data/civ2/game.ruleset Sun Dec 10 04:18:34 2000 @@ -38,3 +38,14 @@ ; "Pollution" - Pollution (same as industrial/population-generated). ; "Fallout" - Nuclear Fallout (distinct from industrial/population). nuke_contamination = "Pollution" + +;Whether to assign a worker for city center +;(Default value 0, which means city center is worked for free. +; The only other choice is 1, which means city center takes one real +; citizen to work on it. This is a departure from Civ1/2 behavior, +; meant to discourage the use of ICS (Infinite City Sleaze) strategy +; and encourage city development.) +worker_at_city_center = 0 +;If the above is set to 1, extra food is needed at the city center +;to allow normal city growth +city_center_food_extra = 0 diff -Nur -Xpatches/no.freeciv freeciv/data/default/game.ruleset my_freeciv/data/default/game.ruleset --- freeciv/data/default/game.ruleset Sun Jul 9 21:48:10 2000 +++ my_freeciv/data/default/game.ruleset Sun Dec 10 03:50:05 2000 @@ -38,3 +38,14 @@ ; "Pollution" - Pollution (same as industrial/population-generated). ; "Fallout" - Nuclear Fallout (distinct from industrial/population). nuke_contamination = "Fallout" + +;Whether to assign a worker for city center +;(Default value 0, which means city center is worked for free. +; The only other choice is 1, which means city center takes one real +; citizen to work on it. This is a departure from Civ1/2 behavior, +; meant to discourage the use of ICS (Infinite City Sleaze) strategy +; and encourage city development.) +worker_at_city_center = 1 +;If the above is set to 1, extra food is needed at the city center +;to allow normal city growth +city_center_food_extra = 2 diff -Nur -Xpatches/no.freeciv freeciv/server/cityhand.c my_freeciv/server/cityhand.c --- freeciv/server/cityhand.c Fri Sep 22 03:24:25 2000 +++ my_freeciv/server/cityhand.c Sat Dec 9 19:55:00 2000 @@ -162,7 +162,7 @@ pcity->y=y; sz_strlcpy(pcity->name, name); pcity->size=1; - pcity->ppl_elvis=1; + pcity->ppl_elvis=1-game.rgame.worker_at_city_center; pcity->ppl_scientist=pcity->ppl_taxman=0; pcity->ppl_happy[4]=0; pcity->ppl_content[4]=1; diff -Nur -Xpatches/no.freeciv freeciv/server/cityturn.c my_freeciv/server/cityturn.c --- freeciv/server/cityturn.c Sun Sep 17 22:43:05 2000 +++ my_freeciv/server/cityturn.c Sat Dec 9 21:33:43 2000 @@ -619,6 +619,8 @@ conflict[x][y] = -1 - minimap[map_adjust_x(pcity->x+x-2)][map_adjust_y(pcity->y+y-2)]; } /* better than nothing, not as good as a global worker allocation -- Syela */ + if (*workers <= 0) return; + do { bx=0; by=0; @@ -654,7 +656,7 @@ **************************************************************************/ int add_adjust_workers(struct city *pcity) { - int workers=pcity->size; + int workers=pcity->size-game.rgame.worker_at_city_center; int iswork=0; int toplace; int foodneed; @@ -686,7 +688,7 @@ void auto_arrange_workers(struct city *pcity) { struct government *g = get_gov_pcity(pcity); - int workers = pcity->size; + int workers = pcity->size-game.rgame.worker_at_city_center; int taxwanted,sciwanted; int x,y; int foodneed, prodneed; @@ -1510,6 +1512,7 @@ iswork++; } iswork--; + iswork+=game.rgame.worker_at_city_center; if (iswork+city_specialists(pcity)!=size) { freelog(LOG_ERROR, "%s is bugged: size:%d workers:%d elvis: %d tax:%d sci:%d", diff -Nur -Xpatches/no.freeciv freeciv/server/ruleset.c my_freeciv/server/ruleset.c --- freeciv/server/ruleset.c Fri Nov 10 14:47:26 2000 +++ my_freeciv/server/ruleset.c Sun Dec 10 03:42:03 2000 @@ -2128,6 +2128,17 @@ game.rgame.nuke_contamination = CONTAMINATION_POLLUTION; } + game.rgame.worker_at_city_center = + secfile_lookup_int(&file, "civstyle.worker_at_city_center"); + if((game.rgame.worker_at_city_center<0) || + (game.rgame.worker_at_city_center>1)) { + freelog(LOG_ERROR, "Bad value %i for worker_at_city_center. Using 0.", + game.rgame.worker_at_city_center); + game.rgame.worker_at_city_center=0; + } + game.rgame.city_center_food_extra = + secfile_lookup_int(&file, "civstyle.city_center_food_extra"); + section_file_check_unused(&file, filename); section_file_free(&file); } @@ -2442,6 +2453,8 @@ misc_p.hut_overflight = game.rgame.hut_overflight; misc_p.pillage_select = game.rgame.pillage_select; misc_p.nuke_contamination = game.rgame.nuke_contamination; + misc_p.worker_at_city_center = game.rgame.worker_at_city_center; + misc_p.city_center_food_extra = game.rgame.city_center_food_extra; lsend_packet_ruleset_game(dest, &misc_p); }