Города: население, рост, производство и чудеса
Состояние города
C7Engine/C7GameData/City.cs хранит жителей, их работу и настроение, еду и щиты, предмет производства, здания, культуру по игрокам и коррупцию. Центр города даёт доход отдельно от назначенных жителей. Специалист и работающий на клетке горожанин представлены через CityResident и CitizenType.
Доступные предметы производства строятся через общие проверки. Важны технология, ресурсы, владелец, здания-предпосылки, свойства юнита и особенности города. Наличие записи в ruleset ещё не делает предмет доступным в меню.
Еда и рост
Потребление в изученном коде равно 2 еды на жителя; исключение сопротивляющихся отмечено TODO. За ход запас меняется на чистый доход. Отрицательный запас удаляет последнего жителя и обнуляется. Достижение порога создаёт одного жителя, если позволяют ограничения роста.
В базовых правилах пороги пищи — 20, 40, 60, границы размеров — 6 и 12. Для перехода выше первого уровня нужна пресная вода либо подходящее здание; для третьего уровня — соответствующее разрешение здания. После успешного роста амбар сохраняет половину порога, иначе запас обнуляется. Излишек сверх порога перед этим обрезается.
Источники параметров: C7/Lua/civ3/ruleset.json; рост: HandleCityGrowth, CanGrowPopulationByOne.
Производство
ComputeTurnProduction добавляет полезные щиты. Завершение требует одновременно достаточных щитов и residents.Count > populationCost. Таким образом, поселенец с ценой населения 2 не может завершиться в городе размера 2. Пока населения недостаточно, щиты сохраняются не выше стоимости заказа.
При завершении запас щитов сбрасывается в 0, расходуется население, создаётся объект; затем выбирается следующий заказ. Излишки не переносятся. Нельзя объявлять production rollover работающей возможностью по списку идей wiki.
Великое чудо отмечается в общем наборе построенных чудес; конкурирующие города соперников переводятся на наиболее дорогой доступный предмет. В коде есть TODO: выбор должен быть предложен игроку, а не выполняться автоматически. Эффекты, доступность и устаревание зданий требуют отдельной проверки. Дополнительный источник: C7Engine/C7GameData/Building.cs.
Основание и военные действия
C7Engine/EntryPoints/CityInteractions.cs создаёт и уничтожает города. В OnEnterTile вход обычного врага вызывает DestroyCity, а варвары забирают четверть золота владельца и удаляются. Это важное отличие от нашего уже существующего захвата города и от полноценного режима присоединения Civ3.
Для нашей игры
Сначала добавить еду, население и один производственный заказ, затем жителей, здания и многогородские эффекты. Критерии: объяснимый прогноз роста, сохранение незавершённого заказа, невозможность нулевого населения и отсутствие повторной выдачи юнита после загрузки.