Пользователь
0,0
рейтинг
16 сентября 2014 в 01:33

Разработка → Ремейк Caesar III: математическая модель города

Я помню как играл первый раз в Цезарь 3, это удивительно умная и сбалансированная игра, создает чувство, что город живет своей жизнью и после завершения миссии. Можно провести часы, наблюдая за городом и не вмешиваться в его жизнь: плебеи будут бегать по городу в поисках работы, а патриции жаловаться на неважные условия жизни, торговцы, школьники, лодки, жрецы — этот мир замирает лишь в минуты пауз, давая игроку возможность продумать следующий шаг. Исследуя внутренние алгоритмы игры, я не перестаю удивляться с какой точностью авторы сложили кусочки мозаики, под названием «баланс». За время, проведенное над восстановлением кода оригинальной игры скопилось достаточно материала по макромеханике игры, которым я хочу поделиться с хабрасообществом.



Разные походы к моделированию городской суеты


Начинается все с престижности земли, это один из слоев города, которым оперирует игра для расчета параметров миграции и уровня домов. Помимо базовых слоев, взаимосвязь которых показана ниже, каждый слой может дополнительно делиться на части.


В городе люди живут в домах, количество людей и качество жилья меняется с каждым уровнем, у каждого уровня прописан ряд параметров, при достижении которых он переходит на следующий. Как я уже сказал базовым параметром служит престижность земли, другим базовым параметром является снабжение продовольствием: в маленьком городе это может быть незаметно, но в больших городах удаленность амбаров и складов сильно виляет на размещение жилых кварталов на карте. При том, что рынок отрицательно влияет на окружающую территорию и приоритет торговок смещен в сторону снабжения население продуктами, часто возникает ситуация, когда из-за недостатка продовольствия начинает ощущаться дефицит и прочих товаров, прежде всего самых ценных (для развития домов) — глиняной посуды и мебели.Каждый следующий уровень дома требует более дорогостоящих сервисов и ресурсов. Получаем классическую (человеческую) пирамиду потребностей.



На определенном этапе развития дома превращаются в виллы и существенно улучшают рейтинг города, но снижает число рабочих в городе: патриции не работают, что в свою очередь приводит к резкому снижению уровня производства в городе и массовому бегству жителей, и если в какой-то момент игры пропустить эти «качели популяции», то зачастую они приводят к проигрышу миссию. Можно пригласить в город новых поселенцев, но с появлением хижин, из города начинают бежать уже зажиточные жители и снижается рейтинг процветания.



Базовые слои города могут содержать дополнительные подслои, отвечающие за конкретный параметр или предоставляемую услугу. Так например здравоохранение можно разделить на общее(доктора и бани) и специализированное, которое требуется патрициям (клиника), но также замещает функции общих: например клиника предоставляет услуги хирургов и докторов, но стоимость содержания намного превосходит таковую у докторского домика. С развлечениями аналогично, за исключением того, что для развлекательных зданий требуются «ученики»: для театра нужны актеры, для колизея гладиаторы и львы. Вроде бы небольшая деталь, но такое ненавязчивое микроуправление сильно влияет на планировку города в условиях ограниченности зоны действия зданий.



Определившись с составляющими «городской жизни» можно составить математическую модель города. Отмечу, что оригинальная игра использует вероятностно-статистическую модель города, это означает, что в определенные моменты времени (игровой день, неделя, месяц и год) делается снимок параметров города и на основе этих данных и с учетом предшествующих состояний, вычисляется вероятность возникновения события. Упрощенное описание модели показано ниже. Красным отмечено отрицательное влияние одного объекта на другой, зеленым положительное. Положительные стороны статистической модели в том, что при вычисление вероятности возникновения события не нужно учитывать параметры отдельного объекта, считаем «среднюю температуру по больнице», это существенно снижает нагрузку при вычислениях (напомню что игра запускалась на компьютерах с объемом оперативной памяти < 32Мб). Здания хоть и обладают собственными характеристиками, в большинстве случаев они задействуются при вычислении усредненных параметров, а не для обсчета ситуации для конкретного здания.



В ремейке игры с самого начала закладывалась динамическая модель города, похожую можно увидеть в игре «Tropico», где у каждого объекта игры имеется набор собственных характеристик, который используется им для выбора поведения объекта в конкретный момент времени. Набор связей в этом случае сложнее и зависит от конкретного объекта, например параметры дома зависят от количества проживающих людей, от количества работающих людей в этом дом, наличии продуктов и товаров, а также средств на их покупку на рынке. На картинке вы можете увидеть упрощенную модель для расчета параметров дома.



Так как расчет вероятности возникновения события переносится с уровня города, на уровень объекта, то для взаимодействия между объектами нужно вводить дополнительные связи, в ремейке их роль выполняют «поставщики услуг» (носильщики, банщица, торговка с рынка, жрец, школьники и т.д. ). Соответственно меняется и модель поведения объектов в игре, большая часть взаимодействия между которыми происходит через посредника.



Использование динамической модели намного усложняет программирование логики отдельных объектов, т.к. приходится учитывать воздействие и тип источника, положительной стороной такой организации является гибкость настройки поведения как источника события, так и его обработчика. Любое динамическое моделирование, призвано оценить нестационарные процессы ответить на вопрос: «А что если?». А что, если: в городе наступит голод при большом потоке поселенцев, как будет распространяться эпидемия, пожар или землетрясение.

Отличия от оригинальной игры


Мне в личку задавали много раз вопросы делаю ли я клон Цезаря и куда делись декомпилированные исходники. Именно клон (сишный код, который получился после реверс-инжиниринга) я закончил процентов на 90, проект собирается и работает первая миссия. Исходники удалили с гитхаба по просьбе правообладателя. Это про непосредственно клон Цезаря, он располагается в еще более «grey legal area». Что касается ремейка, то CaesarIA — это независимая игра с открытым исходным кодом, попытка возродить игру с более чем 15-летней историей от Impressions Games.

Нет это не Цезарь, я использую идеи из этой игры, но весь код написан с нуля: логика, карты, поиск пути и другие вещи, которые вы привыкли видеть в старом Цезаре, они сделаны с оглядкой на него, но они другие.
Да я использую рипнутые ресурсы для тестовых сборок, если вас мучает вопрос легальности — вы вольны выбрать режим работы с оригинальными архивами из честно купленной копии.

Спросив мнения у хабражителей я решил попробовать легализовать ремейк тем способом, который посчитал доступным на данный момент — собрать средства через crowdfunding, а по русски «с миру по нитке». Выбор пал на площадку Indiegogo.com (и да, я знаю, что многие считают эту площадку помойкой для подозрительных проектов). Пообщавшись с художниками на gamedev.ru и своими знакомыми дизайнерами, была определена средняя цена за создание 3д моделей (и соответственно текстур) зданий и людей: $6к (102 модели здания + анимация) за здания, $4k за людей и окружение. это позволит избежать претензий правообладателей и сделать возможным распространение игры как для настольных компьютеров, так и планшетов под управлением Android и iOS. На данный момент я сделал все, что запланировал с игровым миром к осени этого года, но я всего лишь один человек и надеюсь, что помощь других людей позволит игре обрести свой стиль. Сейчас проект достиг той точки, когда дальнейшее его развитие затруднено без новых текстур, зданий, звуков и других материалов.



Какие задачи решены на данный момент
Это ролик второй обучающей миссии, тогда еще не было сделано воспроизведение игровых роликов (это живой gameplay как есть) видео долгое, я просто играл вторую миссию:



1. Симуляция города
1.1 пожары и старение зданий
1.2 в игре реализованы все здания оригинала, функционал некоторых нуждается в доработке
1.3 реализованы все слои города, которые использовались в оригинале (обучение, здоровье,
здравоохранение, налоги и т.п)
1.4 сделана система сбора налогов на основе форумов
2. Боги и религия, боги могу гневаться или радоваться
2.1 Сделан обсчет области покрытия храмов
3. Расчет распределения вода, товаров, продуктов и услуг
4. Сделано появление недовольных граждан и повстанцев
5. Сделан простой ИИ для управления солдатами, своими и вражескими
6. Планирование и проведение фестивалей
7. Запросы императора и торговля между городами
8. Животные и рыбная ловля
9. Рождение, старение и смерть горожан. Возрастные группы
10. Динамическое обновление путей у объектов, обход препятствий
11. Сюжетные миссии из оригинала (пока до миссии в Тингисе)
12. Добыча ресурсов и и производственные цепочки

Много других мелочей, которые пришлось решить по ходу создания игры
@dalerank
карма
155,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (78)

  • +6
    Очень скоро человечество вас будет благодарить. Может быть создать сайт, где пишите что надо сделать или нарисовать, или какой код. Выкладываете материалы исходные. Затем кто сможет поможет. Или так не бывает?
    • 0
      github?
      • 0
        Github.com/dalerank/caesaria-game зеркало ре по з история, через которое собираются билды для винды, линукса мака и аодной да через travis-ci
        • +4
          блин, т9 все слова переврал (
          www.github.com/dalerank/caesaria-game зеркало репозитория, через которое собираются билды для винды, линукса мака и андроида через travis-ci.сom, а затем выкладываются на sourceforge.net/projects/opencaesar3/files/bin/, сборка происходит при коммите, сразу видно что собралось, а что нет
          • 0
            Деньги очень удобно собирать и использовать через сервисы уже работающие с GitHub:
            tip4commit.com/projects
            prime4commit.com/projects
            Видно как тратиться каждая транзакция для отдельного пул реквеста. Мне кажеться, так удобнее спонсировать проект.
            • 0
              Ух ты, не знал что такое есть, спасибо
    • +1
      Да врядли, вокруг очень много достойных игр, но есть группа людей, которым интересно разбирать старые игры, возможно оттого что есть время, знания и возможность это сделать, а может оттого что это одна из первых игр моего детства, ну и не только моегр
  • +6
    Если Вы дизассемблировали логику игры, то я снимаю шляпу… Огромный труд.
    Интересно, модель взаимодействия и развития может быть перенесена на другие природные условия, Москва, Питер, заснеженная респ. Саха и т.д.?
    • +2
      Угу, както так получилось, я не смог бы этого сделать без помошников, я описал этот процесс тут habrahabr.ru/post/222943/
      • +1
        Не хочется занудствовать (ибо автор действительно большой молодец), но по ссылке выше рассказано слегка не про то, как автор дизассемблировал и разгадывал логику игры, больше про то, как там всё рисуется… в связи с чем вопрос:

        Логика «клона» действительно повторяет один-в-один логику оригинала? Или выглядит похоже (или идентично), а дьявол — в деталях?

        OpenRA, например, тоже выглядит похоже, но это совсем другая игра.

        А про процесс извлечения математической модели из дизассемблированного кода я бы тоже почитал с удовольствием.
        В любом случае, я свидетельствую респект и уважуху автору. Сам в своё время цезаря гонял за милую душу…
        • +1
          Да, извините, дал ссылку на вторую часть разбора. Вот тут про то как получился сишный код из экзешника как будет готово выложу и весь работающий код самого цезаря, но это позже — проблем тогда точно не оберешься )))
  • +4
    Добро дело делаете. Вы большой молодец.
  • +4
    Почему У Вас все так скромненько на www.gamedev.ru? Нашел там только одну Вашу статью, и то в статусе «Этот документ ещё не опубликован».

    Именно на профильном сайте самый высокий шанс найти единомышленников!
    • 0
      Собственно на геймдеве и нашлось большинство людей' готовых помочь и кодом и музыкой и текстурами, но у многих свои проекты и помогают по силам )))
  • +1
    Такой вопрос.: Как известно open-source не подразумевает бесплатность. Так вот, если нужная сумма соберется, будет ли игра распространяться бесплатно?
    К примеру, для меня эта игра — часть для всемирного наследия и фактический вывод ее из под копирайта — стимул вложиться.
    • 0
      Кстати, можно попробовать продавать ее на Steam. Там же через greenlight можно попробовать привлечь внимание к Indiegogo.com.
      • 0
        Упс. Проект и так уже в гринлайте.
        • 0
          Нет, продажа игры означает получение прибыли и автоматом обвинения в воровстве, пока проект находится на поле опенсорса вероятность таких претензий минимальная, хоть и присутствует. Даже если не наберется, в любом случае они пойдут на переделку части текстур — уже будет с чего начинать.
          • 0
            Но, если от оригинального цезаря ничего не останется, в том числе текстуры, то какие могут быть претензии?
            • 0
              Дизайн, механика, названия. И чтоб судиться нужны время и очень много денег.
              • 0
                На алгоритм механики у них прав нет, есть только на код — здесь пролет, все названия в игре, насколько помню — исторические, здесь — тоже, название игры сменить — нет проблем

                Дизайн… не юрист, но его они не патентовали.
                • 0
                  Здесь к сожалению очень скользко и много всяких НО, я не юрист, а тем более в правах интеллектуальной собственности, поэтому я выбрал опенсорс, чтобы было меньше проблем, если они возникнут, с corsix TH, OpenTTD, openXcom, kamremake и еще большим числом проектов это получилось, почему бы не получиться и тут. osgameclones.com/ здесь смотрите список известных опенсорс реализаций старых игр
  • +18
    Brutus III — я бы так игру назвал. Учитывая ваши трения с правообладателем цезаря, было бы иронично.
    • +4
      Идея очень хороша ) да как бы не назвали лишь бы дали доделать
      • 0
        Само собой ждём готовую игру под любым названием, продолжайте в том же духе!
  • +2
    На данный момент я сделал все, что запланировал с игровым миром к осени этого года, но я всего лишь один человек


    Я понимаю, что вы сделали бОльшую часть работы, но как-же все эти люди? Как-то нехорошо, даже если человек просто опечатки исправил.
    • +2
      Извините, если кого забыл)))большая часть комитетов указана в кредитсах (прописано в коде), посмотреть можно из стартового меню, не думайте что я такой неблагодарный
  • 0
    Извините, а вот эти красивые диаграммки Вы вручную рисовали или есть какой-то автороутер для них?
    • 0
      Похоже на MS Visio
    • 0
      Диаграммы рисовал в draw.io' данные для них получились за время работы над ремейком и в основном это наблюдения на основе работы декомпилятора
  • 0
    3-d модели нужны для перевода их потом в 2-d? Т.к. думаю, что без 2-d игра потеряет шарм.
    Какие планы по развитию игры?
    • 0
      Да, но основное их назначение это возможность отображения здания с разных ракурсов (фронт, с боков и вид сзади), также меньше проблем с масштабированием
    • 0
      А мне бы было интересно посмотреть в 3D. Многое зависит от качества реализации.
      • 0
        Гляньте цезаря 4
  • +1
    Сколько же часов было проведено вот за этой игрой:

    image

    Кстати, вопрос, один я строил города по «кольцевой» системе с фактически, полностью изолированными его частями? На внешней стороне кольца жилье, на внутренней культура, все отзеркалено для облегчения контроля и производство за городом? (ну, когда рельеф позволял)
    • 0
      пссс, господа, я знаю, что это разные игры, но есть мнение, что они из одной серии, с, фактически, одинаковой игровой механикой.
      • 0
        После клеопатры они сильно упростили игру.
        • 0
          А мне наоборот кажется что в зевсе перемудрили с экономикой
          • +1
            Когда начинаешь продавать скульптуры денег становилось некуда девать)
            • 0
              Да, мировая экономика там слабая.
  • +3
    На www.indiegogo.com очень тухленько набирается сумма. Вам бы пиар не помешал. Создайте темы на ин. форумах типа pcgamer/
    • 0
      Создавал, два раза… первый удалили по просьбе активижна, второй раз удалил уже сам админ и заданию акк
      • 0
        Запостил на phoronix и отправил новость на omgubuntu.co.uk (вдруг запостят). Надеюсь, это принесет парочку бэйкеров
        • 0
          Благодарю, а что за phoronix? Не слышал о нем
          • 0
            Сайт с новостями о Linux и Ко. Правда, с упором на тестирование железа (разработчики phoronix test suite), но и про игры тоже часто пишут
          • +1
            Центральный сайт по новостям из мира 3д подсистем свободных ОС. Именно там анонсируют последние фичи в Mesa или очередные баги в Каталистах.
            Ну и кроме того обычные тесты процессоров но уже с закосом на Linux (LLVM/GCC и т.д.)
      • 0
        На opennet еще чиркнул пару строк
  • 0
    Респект за проделанный огромный труд.
  • 0
    Мне одному кажется, что вот в этой картинке
    Скрытый текст
    image
    перепутаны эмиграция и иммиграцией?
    • 0
      Да возможно, у меня както давно были попутаны понятия эм(имм)грант, может опять всплыло )))
  • +2
    Paypal'ом не удаётся отправить. Пишет, что между резидентами РФ можно делать только рублёвые переводы (а у вас долларовые).
    Получается, что для взноса нужно пластик вбивать?

    И просто реплика (уже не про платежи):
    Зря вы ждали 10 дней между стартом кампании и постом тут. Первые часы всегда самые важные. Надеюсь, это промедление не скажется на сборе средств, и у нас в итоге будет опенсорсный Цезарь.
    • 0
      Да тут командировка нарисовалась, сборы, испытания в общем все вкупе и четыре дня на корабле просто выпали из жизни )))
    • 0
      Да есть у пейпела такая нестыковка, может со звуками поможете??? Думаю надо выложить чего не хватает из ресурсов на сайте, тогда люди хоть смогут изменить некоторые модели или звуки сами и закомитить.
      • 0
        Сделал взнос с резервной карты. По поводу звуков есть такая идея. Есть огромное количество звуков, лицензированных под Creative Commons. Нужно сначала выделить, какие звуки требуются, а затем отсортировывать их (хотя бы начерно, чтобы было из чего выбирать).

        Но без списка звуков подобный поиск, имхо, не имеет смысла.
  • 0
    Круто, но мне честно говоря этот проект интересен с другой точки зрения — управления городами. Впервый раз вижу наглядное изображение причинно-следственных связей между параметрами города. Как вы все эти закономерности открывали? Это ж целая наука. Только я не пойму какая с одной стороны и менеджемент + математика если описывать параметры и вес каждого из них на модель + что то еще, как раз устанавливающее эти взаимосвязи. Кто то может подсказать?

    Каждому мэру городу бы такую наглядную модель и возможность комплексного моделирования, как раз тот самый вопрос как изменение одного параметра подействует на всю систему. Конечно реалный мир сложнее, но все же всегда и начинается с упращенной модели.

    Возможно так же автор расскажет подробнее про математику? Или статьи посоветует? Не с точки зрения графики, а с точки зрения причинно-следственных связей между параметрами, как вы все это считаете.

    PS: сам занимаюсь моделированием веба, соц сетей, поисковых машин.
    • 0
      В оригинале вся математика считалась в одной функции, здесь raw.githubusercontent.com/AntonBaracuda/caesar3_source/master/main.cpp смотрите функцию doGameWeekTick(), от неё расходятся веточки ко всем остальным параметрам города. Про математику сделаю обязательно, материала хватает… надеюсь удастся подать её как можно понятнее
  • +2
    Хабраэффект ломается, если средства просят?
    • 0
      Не знаю, думаю да, одно дело давать советы, совсем другое свои заработанные деньги, а можно на них пойти пива попить ))) это выбор в любом случае, я показываю то что хочу сделать, в данном случае это ремейк цезаря, вы можете его скачать, посмотреть и поиграть… если вы хотите помочь, это могут быть не обязательно деньги, это может быть текстуры, музыка, код — и это было бы лучшим решением, чем деньги… когда ты приносишь текстуру в игру, ты приносишь туда частичку своей души, когда ты приносишь в игру деньги, частичку себя там оставляет художник, а тебе достается место в кредитсах… сори, это наверно глупо
      • 0
        Не знаю, я не умею рисовать тексуры или писать музыку. Я умею писать программы, но ничего не знаю о С или геймдеве. Мне проще дать денежек, и надеяться, что у вас все получится :-)
        • +1
          Благодарю за поддержку, я тоже не умею рисовать (жаль), поэтому другим проектам (например kamremake.com, не сочтите за рекламу) я тоже даю деньги и вижу как они уже третий год из пепла, втроем на делфи поднимают старую добрую стратегию, даже сетку запилили
          • +1
            Ремейк Knights & Merchants не грешно и прорекламировать немного. Очень разумная игрушка, понравилась больше чем The Settlers, хотябы уже тем, что есть хотят все, а не только шахтеры. В общем, подсобил разработчикам.
  • 0
    блин, начитался, поиграть захотелось =)

    автору респект!
  • 0
    1. А ваши все текстуры, музыка и т.д. будут открытые?
    2. Мне реально было бы интересно подробнее про статистические модели и моделирование в игре.
    Где это можно посмотреть не залезая в дебри кода?
    • 0
      1. Да, изображения будут размещать в основном репозитории по лицензии GNU Free Documentation License (GFDL)
      2. пока к сожалению только в коде, не ожидал «спроса» на такую узкую тему, постараюсь сделать статью о статистической модели города с примерами кода и описанием решений.
      • 0
        Мне это интересно, поскольку для школьников есть тема — «Компьютерное моделирование».
        А это ОЧЕНЬ сложная модель и им скорее всего будет интересно.
        • 0
          Мне кажется, когда писали цезаря авторы больше упирали на играбельность сделанной модели, чем на реалистичность (сложилось такое впечатление), в любом случае уже есть рабочее решение(оригинальной игры и свое), я могу посмотреть как оно себя ведет и не придумывать свои велосипеды.
      • 0
        Тема интересная, пишите.
  • +3
    А у Вас не было желания поработать с сэттингом? Если уж Вы планируете заказывать графику, то почему бы не пойти дальше? Если помните была похожая игра от тех же ребят «Клеопатра» в сэттинге Египта. Пойдите дальше… Средневековье, Киевская Русь и т.д. Или же вообще в фэнтези уйти можно.
  • +1
    Скажите, а инженеры и перфекты и торговки все еще будут ходить на пустыри, вместо городов? Помню как этот рэндом раздражал, когда у тебя виллы начали собирать манатки, потому что торговка пошла не туда.
  • 0
    вообще странно что они так ходили, алгоритм я из оригинала брал… торговка сначала считает путь, где она больше всего нужна и потом по нему идет
    почему они уходят в пустырь непонятно
    • 0
      Это не могло быть какое-нибудь переполнение?
      • 0
        Не могу судить со 100% вероятностью об этом, восстановленный код не всегда правильный, местами приходится его доделывать. Я сам замечал, что при «некормленом» районе торговка идет «не туда», вероятно могут срабатывать приоритеты: торговка в первую очередь снабжает людей едой, а потом уже другими товарами. Буду делать углубленную статью про модель оригинала побольше уделю внимания этому моменту, может и сам какие вещи пойму получше.
        • 0
          А Вы где-нибудь ведёте доки/схемы/описания игровой механики, извлечённые из уже разобранного кода? Не хочу лезть в чужой монастырь со своим усталым, но, наверное, всем, кто хотел бы помочь, было бы приятно сначала глянуть на какую-нибудь wiki с флоучартом и диаграммами, чтобы была видна системность?

          Выше Вы, отвечая на вопрос, указали, что вся реализация математической модели города умещается в одну основную функцию — значит, модель можно визуализировать, а на полученной карте затем отметить «реализовано», «есть расхождения с оригиналом», «не реализовано», и так далее — если у людей появится возможность помогать кодом, тратя меньше времени на «вход в контекст», возможно, число помощников увеличится.
          • 0
            Веду в тетради ((( про вики это вы хорошо придумали, надо будет озадачиться переносом схем в вики
            • 0
              ну, можно сначала разместить фотки тетради желательно таки как-то презентовать модель. Когда виден каждый конкретный кусочек, возможно, его кто-нибудь возьмёт, да и сделает. В худшем случае — Вы сами, но при этом у вас будет близкая и ясная (а не далёкая и размытая) конкретная цель.
  • 0
    А есть DSL в котором все эти схемы в машинно-читаемом формате представлены?
    • 0
      Нет, есть пока в тетради, но постараюсь обработать и выложить на битбакет
  • 0
    :( не видно картинок к статье

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.