Я помню как играл первый раз в Цезарь 3, это удивительно умная и сбалансированная игра, создает чувство, что город живет своей жизнью и после завершения миссии. Можно провести часы, наблюдая за городом и не вмешиваться в его жизнь: плебеи будут бегать по городу в поисках работы, а патриции жаловаться на неважные условия жизни, торговцы, школьники, лодки, жрецы — этот мир замирает лишь в минуты пауз, давая игроку возможность продумать следующий шаг. Исследуя внутренние алгоритмы игры, я не перестаю удивляться с какой точностью авторы сложили кусочки мозаики, под названием «баланс». За время, проведенное над восстановлением кода оригинальной игры скопилось достаточно материала по макромеханике игры, которым я хочу поделиться с хабрасообществом.
Начинается все с престижности земли, это один из слоев города, которым оперирует игра для расчета параметров миграции и уровня домов. Помимо базовых слоев, взаимосвязь которых показана ниже, каждый слой может дополнительно делиться на части.
![](https://habrastorage.org/r/w780q1/files/630/8e1/195/6308e1195146434fbf10d2413640c98e.jpg)
В городе люди живут в домах, количество людей и качество жилья меняется с каждым уровнем, у каждого уровня прописан ряд параметров, при достижении которых он переходит на следующий. Как я уже сказал базовым параметром служит престижность земли, другим базовым параметром является снабжение продовольствием: в маленьком городе это может быть незаметно, но в больших городах удаленность амбаров и складов сильно виляет на размещение жилых кварталов на карте. При том, что рынок отрицательно влияет на окружающую территорию и приоритет торговок смещен в сторону снабжения население продуктами, часто возникает ситуация, когда из-за недостатка продовольствия начинает ощущаться дефицит и прочих товаров, прежде всего самых ценных (для развития домов) — глиняной посуды и мебели.Каждый следующий уровень дома требует более дорогостоящих сервисов и ресурсов. Получаем классическую (человеческую) пирамиду потребностей.
![](https://habrastorage.org/r/w780q1/files/c4b/027/4e7/c4b0274e77784e2b96f90419218691cb.jpg)
На определенном этапе развития дома превращаются в виллы и существенно улучшают рейтинг города, но снижает число рабочих в городе: патриции не работают, что в свою очередь приводит к резкому снижению уровня производства в городе и массовому бегству жителей, и если в какой-то момент игры пропустить эти «качели популяции», то зачастую они приводят к проигрышу миссию. Можно пригласить в город новых поселенцев, но с появлением хижин, из города начинают бежать уже зажиточные жители и снижается рейтинг процветания.
![](https://habrastorage.org/r/w780q1/files/206/8f6/768/2068f676845442d3a55b55729bdafe44.jpg)
![](https://habrastorage.org/r/w780q1/files/c65/a19/6b5/c65a196b5a4343ae8af241da3b79a589.jpg)
![](https://habrastorage.org/r/w780q1/files/7de/5a8/210/7de5a821065f48c1a2306487bb3a7a77.jpg)
![](https://habrastorage.org/r/w780q1/files/f04/eb4/3be/f04eb43be267474396b173b8c6b74582.jpg)
![](https://habrastorage.org/r/w780q1/files/f63/518/018/f635180188174d86a954930d423334d3.jpg)
![](https://habrastorage.org/r/w780q1/files/5dc/1e5/5ce/5dc1e55ce0ad4b6c9ed4d921be3003fe.jpg)
![](https://habrastorage.org/r/w780q1/files/01b/029/33e/01b02933e2f946a8a254e5adccbfc55c.jpg)
![](https://habrastorage.org/r/w780q1/files/da7/971/c09/da7971c09e474024b894aace1ce5a4d3.jpg)
![](https://habrastorage.org/r/w780q1/files/e1e/09d/367/e1e09d36774b4d3e8496fb387fdbd721.jpg)
Базовые слои города могут содержать дополнительные подслои, отвечающие за конкретный параметр или предоставляемую услугу. Так например здравоохранение можно разделить на общее(доктора и бани) и специализированное, которое требуется патрициям (клиника), но также замещает функции общих: например клиника предоставляет услуги хирургов и докторов, но стоимость содержания намного превосходит таковую у докторского домика. С развлечениями аналогично, за исключением того, что для развлекательных зданий требуются «ученики»: для театра нужны актеры, для колизея гладиаторы и львы. Вроде бы небольшая деталь, но такое ненавязчивое микроуправление сильно влияет на планировку города в условиях ограниченности зоны действия зданий.
![](https://habrastorage.org/r/w780q1/files/8ab/84c/136/8ab84c13649745d28abe8bd65c19ee5f.jpg)
Определившись с составляющими «городской жизни» можно составить математическую модель города. Отмечу, что оригинальная игра использует вероятностно-статистическую модель города, это означает, что в определенные моменты времени (игровой день, неделя, месяц и год) делается снимок параметров города и на основе этих данных и с учетом предшествующих состояний, вычисляется вероятность возникновения события. Упрощенное описание модели показано ниже. Красным отмечено отрицательное влияние одного объекта на другой, зеленым положительное. Положительные стороны статистической модели в том, что при вычисление вероятности возникновения события не нужно учитывать параметры отдельного объекта, считаем «среднюю температуру по больнице», это существенно снижает нагрузку при вычислениях (напомню что игра запускалась на компьютерах с объемом оперативной памяти < 32Мб). Здания хоть и обладают собственными характеристиками, в большинстве случаев они задействуются при вычислении усредненных параметров, а не для обсчета ситуации для конкретного здания.
![](//habrastorage.org/r/w1560/files/669/642/583/66964258392f4c35a1b1b3042dfc0fd1.png)
В ремейке игры с самого начала закладывалась динамическая модель города, похожую можно увидеть в игре «Tropico», где у каждого объекта игры имеется набор собственных характеристик, который используется им для выбора поведения объекта в конкретный момент времени. Набор связей в этом случае сложнее и зависит от конкретного объекта, например параметры дома зависят от количества проживающих людей, от количества работающих людей в этом дом, наличии продуктов и товаров, а также средств на их покупку на рынке. На картинке вы можете увидеть упрощенную модель для расчета параметров дома.
![](https://habrastorage.org/r/w780q1/files/ed3/960/64a/ed396064a40d4bce846e2ab857aced05.jpg)
Так как расчет вероятности возникновения события переносится с уровня города, на уровень объекта, то для взаимодействия между объектами нужно вводить дополнительные связи, в ремейке их роль выполняют «поставщики услуг» (носильщики, банщица, торговка с рынка, жрец, школьники и т.д. ). Соответственно меняется и модель поведения объектов в игре, большая часть взаимодействия между которыми происходит через посредника.
![](https://habrastorage.org/r/w1560/files/9ea/4b3/307/9ea4b330781a46fba0d6876ac9fdeeb7.png)
Использование динамической модели намного усложняет программирование логики отдельных объектов, т.к. приходится учитывать воздействие и тип источника, положительной стороной такой организации является гибкость настройки поведения как источника события, так и его обработчика. Любое динамическое моделирование, призвано оценить нестационарные процессы ответить на вопрос: «А что если?». А что, если: в городе наступит голод при большом потоке поселенцев, как будет распространяться эпидемия, пожар или землетрясение.
Мне в личку задавали много раз вопросы делаю ли я клон Цезаря и куда делись декомпилированные исходники. Именно клон (сишный код, который получился после реверс-инжиниринга) я закончил процентов на 90, проект собирается и работает первая миссия. Исходники удалили с гитхаба по просьбе правообладателя. Это про непосредственно клон Цезаря, он располагается в еще более «grey legal area». Что касается ремейка, то CaesarIA — это независимая игра с открытым исходным кодом, попытка возродить игру с более чем 15-летней историей от Impressions Games.
Нет это не Цезарь, я использую идеи из этой игры, но весь код написан с нуля: логика, карты, поиск пути и другие вещи, которые вы привыкли видеть в старом Цезаре, они сделаны с оглядкой на него, но они другие.
Да я использую рипнутые ресурсы для тестовых сборок, если вас мучает вопрос легальности — вы вольны выбрать режим работы с оригинальными архивами из честно купленной копии.
Спросив мнения у хабражителей я решил попробовать легализовать ремейк тем способом, который посчитал доступным на данный момент — собрать средства через crowdfunding, а по русски «с миру по нитке». Выбор пал на площадку Indiegogo.com (и да, я знаю, что многие считают эту площадку помойкой для подозрительных проектов). Пообщавшись с художниками на gamedev.ru и своими знакомыми дизайнерами, была определена средняя цена за создание 3д моделей (и соответственно текстур) зданий и людей: $6к (102 модели здания + анимация) за здания, $4k за людей и окружение. это позволит избежать претензий правообладателей и сделать возможным распространение игры как для настольных компьютеров, так и планшетов под управлением Android и iOS. На данный момент я сделал все, что запланировал с игровым миром к осени этого года, но я всего лишь один человек и надеюсь, что помощь других людей позволит игре обрести свой стиль. Сейчас проект достиг той точки, когда дальнейшее его развитие затруднено без новых текстур, зданий, звуков и других материалов.
![](https://habrastorage.org/r/w780q1/files/5fd/dbc/d20/5fddbcd20dfd43f3a233d13f2ea499c3.jpg)
Разные походы к моделированию городской суеты
Начинается все с престижности земли, это один из слоев города, которым оперирует игра для расчета параметров миграции и уровня домов. Помимо базовых слоев, взаимосвязь которых показана ниже, каждый слой может дополнительно делиться на части.
![](https://habrastorage.org/files/630/8e1/195/6308e1195146434fbf10d2413640c98e.jpg)
В городе люди живут в домах, количество людей и качество жилья меняется с каждым уровнем, у каждого уровня прописан ряд параметров, при достижении которых он переходит на следующий. Как я уже сказал базовым параметром служит престижность земли, другим базовым параметром является снабжение продовольствием: в маленьком городе это может быть незаметно, но в больших городах удаленность амбаров и складов сильно виляет на размещение жилых кварталов на карте. При том, что рынок отрицательно влияет на окружающую территорию и приоритет торговок смещен в сторону снабжения население продуктами, часто возникает ситуация, когда из-за недостатка продовольствия начинает ощущаться дефицит и прочих товаров, прежде всего самых ценных (для развития домов) — глиняной посуды и мебели.Каждый следующий уровень дома требует более дорогостоящих сервисов и ресурсов. Получаем классическую (человеческую) пирамиду потребностей.
![](https://habrastorage.org/files/c4b/027/4e7/c4b0274e77784e2b96f90419218691cb.jpg)
На определенном этапе развития дома превращаются в виллы и существенно улучшают рейтинг города, но снижает число рабочих в городе: патриции не работают, что в свою очередь приводит к резкому снижению уровня производства в городе и массовому бегству жителей, и если в какой-то момент игры пропустить эти «качели популяции», то зачастую они приводят к проигрышу миссию. Можно пригласить в город новых поселенцев, но с появлением хижин, из города начинают бежать уже зажиточные жители и снижается рейтинг процветания.
![](https://habrastorage.org/files/206/8f6/768/2068f676845442d3a55b55729bdafe44.jpg)
![](https://habrastorage.org/files/c65/a19/6b5/c65a196b5a4343ae8af241da3b79a589.jpg)
![](https://habrastorage.org/files/7de/5a8/210/7de5a821065f48c1a2306487bb3a7a77.jpg)
![](https://habrastorage.org/files/f04/eb4/3be/f04eb43be267474396b173b8c6b74582.jpg)
![](https://habrastorage.org/files/f63/518/018/f635180188174d86a954930d423334d3.jpg)
![](https://habrastorage.org/files/5dc/1e5/5ce/5dc1e55ce0ad4b6c9ed4d921be3003fe.jpg)
![](https://habrastorage.org/files/01b/029/33e/01b02933e2f946a8a254e5adccbfc55c.jpg)
![](https://habrastorage.org/files/da7/971/c09/da7971c09e474024b894aace1ce5a4d3.jpg)
![](https://habrastorage.org/files/e1e/09d/367/e1e09d36774b4d3e8496fb387fdbd721.jpg)
Базовые слои города могут содержать дополнительные подслои, отвечающие за конкретный параметр или предоставляемую услугу. Так например здравоохранение можно разделить на общее(доктора и бани) и специализированное, которое требуется патрициям (клиника), но также замещает функции общих: например клиника предоставляет услуги хирургов и докторов, но стоимость содержания намного превосходит таковую у докторского домика. С развлечениями аналогично, за исключением того, что для развлекательных зданий требуются «ученики»: для театра нужны актеры, для колизея гладиаторы и львы. Вроде бы небольшая деталь, но такое ненавязчивое микроуправление сильно влияет на планировку города в условиях ограниченности зоны действия зданий.
![](https://habrastorage.org/files/8ab/84c/136/8ab84c13649745d28abe8bd65c19ee5f.jpg)
Определившись с составляющими «городской жизни» можно составить математическую модель города. Отмечу, что оригинальная игра использует вероятностно-статистическую модель города, это означает, что в определенные моменты времени (игровой день, неделя, месяц и год) делается снимок параметров города и на основе этих данных и с учетом предшествующих состояний, вычисляется вероятность возникновения события. Упрощенное описание модели показано ниже. Красным отмечено отрицательное влияние одного объекта на другой, зеленым положительное. Положительные стороны статистической модели в том, что при вычисление вероятности возникновения события не нужно учитывать параметры отдельного объекта, считаем «среднюю температуру по больнице», это существенно снижает нагрузку при вычислениях (напомню что игра запускалась на компьютерах с объемом оперативной памяти < 32Мб). Здания хоть и обладают собственными характеристиками, в большинстве случаев они задействуются при вычислении усредненных параметров, а не для обсчета ситуации для конкретного здания.
![](http://habrastorage.org/files/669/642/583/66964258392f4c35a1b1b3042dfc0fd1.png)
В ремейке игры с самого начала закладывалась динамическая модель города, похожую можно увидеть в игре «Tropico», где у каждого объекта игры имеется набор собственных характеристик, который используется им для выбора поведения объекта в конкретный момент времени. Набор связей в этом случае сложнее и зависит от конкретного объекта, например параметры дома зависят от количества проживающих людей, от количества работающих людей в этом дом, наличии продуктов и товаров, а также средств на их покупку на рынке. На картинке вы можете увидеть упрощенную модель для расчета параметров дома.
![](https://habrastorage.org/files/ed3/960/64a/ed396064a40d4bce846e2ab857aced05.jpg)
Так как расчет вероятности возникновения события переносится с уровня города, на уровень объекта, то для взаимодействия между объектами нужно вводить дополнительные связи, в ремейке их роль выполняют «поставщики услуг» (носильщики, банщица, торговка с рынка, жрец, школьники и т.д. ). Соответственно меняется и модель поведения объектов в игре, большая часть взаимодействия между которыми происходит через посредника.
![](https://habrastorage.org/files/9ea/4b3/307/9ea4b330781a46fba0d6876ac9fdeeb7.png)
Использование динамической модели намного усложняет программирование логики отдельных объектов, т.к. приходится учитывать воздействие и тип источника, положительной стороной такой организации является гибкость настройки поведения как источника события, так и его обработчика. Любое динамическое моделирование, призвано оценить нестационарные процессы ответить на вопрос: «А что если?». А что, если: в городе наступит голод при большом потоке поселенцев, как будет распространяться эпидемия, пожар или землетрясение.
Отличия от оригинальной игры
Мне в личку задавали много раз вопросы делаю ли я клон Цезаря и куда делись декомпилированные исходники. Именно клон (сишный код, который получился после реверс-инжиниринга) я закончил процентов на 90, проект собирается и работает первая миссия. Исходники удалили с гитхаба по просьбе правообладателя. Это про непосредственно клон Цезаря, он располагается в еще более «grey legal area». Что касается ремейка, то CaesarIA — это независимая игра с открытым исходным кодом, попытка возродить игру с более чем 15-летней историей от Impressions Games.
Нет это не Цезарь, я использую идеи из этой игры, но весь код написан с нуля: логика, карты, поиск пути и другие вещи, которые вы привыкли видеть в старом Цезаре, они сделаны с оглядкой на него, но они другие.
Да я использую рипнутые ресурсы для тестовых сборок, если вас мучает вопрос легальности — вы вольны выбрать режим работы с оригинальными архивами из честно купленной копии.
Спросив мнения у хабражителей я решил попробовать легализовать ремейк тем способом, который посчитал доступным на данный момент — собрать средства через crowdfunding, а по русски «с миру по нитке». Выбор пал на площадку Indiegogo.com (и да, я знаю, что многие считают эту площадку помойкой для подозрительных проектов). Пообщавшись с художниками на gamedev.ru и своими знакомыми дизайнерами, была определена средняя цена за создание 3д моделей (и соответственно текстур) зданий и людей: $6к (102 модели здания + анимация) за здания, $4k за людей и окружение. это позволит избежать претензий правообладателей и сделать возможным распространение игры как для настольных компьютеров, так и планшетов под управлением Android и iOS. На данный момент я сделал все, что запланировал с игровым миром к осени этого года, но я всего лишь один человек и надеюсь, что помощь других людей позволит игре обрести свой стиль. Сейчас проект достиг той точки, когда дальнейшее его развитие затруднено без новых текстур, зданий, звуков и других материалов.
![](https://habrastorage.org/files/5fd/dbc/d20/5fddbcd20dfd43f3a233d13f2ea499c3.jpg)
Какие задачи решены на данный момент
Это ролик второй обучающей миссии, тогда еще не было сделано воспроизведение игровых роликов (это живой gameplay как есть) видео долгое, я просто играл вторую миссию:
1. Симуляция города
1.1 пожары и старение зданий
1.2 в игре реализованы все здания оригинала, функционал некоторых нуждается в доработке
1.3 реализованы все слои города, которые использовались в оригинале (обучение, здоровье,
здравоохранение, налоги и т.п)
1.4 сделана система сбора налогов на основе форумов
2. Боги и религия, боги могу гневаться или радоваться
2.1 Сделан обсчет области покрытия храмов
3. Расчет распределения вода, товаров, продуктов и услуг
4. Сделано появление недовольных граждан и повстанцев
5. Сделан простой ИИ для управления солдатами, своими и вражескими
6. Планирование и проведение фестивалей
7. Запросы императора и торговля между городами
8. Животные и рыбная ловля
9. Рождение, старение и смерть горожан. Возрастные группы
10. Динамическое обновление путей у объектов, обход препятствий
11. Сюжетные миссии из оригинала (пока до миссии в Тингисе)
12. Добыча ресурсов и и производственные цепочки
Много других мелочей, которые пришлось решить по ходу создания игры
1. Симуляция города
1.1 пожары и старение зданий
1.2 в игре реализованы все здания оригинала, функционал некоторых нуждается в доработке
1.3 реализованы все слои города, которые использовались в оригинале (обучение, здоровье,
здравоохранение, налоги и т.п)
1.4 сделана система сбора налогов на основе форумов
2. Боги и религия, боги могу гневаться или радоваться
2.1 Сделан обсчет области покрытия храмов
3. Расчет распределения вода, товаров, продуктов и услуг
4. Сделано появление недовольных граждан и повстанцев
5. Сделан простой ИИ для управления солдатами, своими и вражескими
6. Планирование и проведение фестивалей
7. Запросы императора и торговля между городами
8. Животные и рыбная ловля
9. Рождение, старение и смерть горожан. Возрастные группы
10. Динамическое обновление путей у объектов, обход препятствий
11. Сюжетные миссии из оригинала (пока до миссии в Тингисе)
12. Добыча ресурсов и и производственные цепочки
Много других мелочей, которые пришлось решить по ходу создания игры