На примере CiG
Автор:
Савромат
Дата: 04 янв 2014, 22:44 · Просмотров: 7 194

Дата: 04 янв 2014, 22:44 · Просмотров: 7 194
Календарь в RIITW устроен довольно прихотливым образом. Наверное многие заметили что весна наступает в январе, осень - в июле и т.д. Связано это с тем, что СА как-то интересно увязала нормальный календарь где Новый год с 1 января - с древнеримским, существовавшим до Юлия Цезаря, когда расхождение календарного времени года с фактическим бывало огромным и достигало 3 месяцев. В игре взята "средняя" величина расхождения, действовавшая на III в до н.э. - два месяца. И - римский год, начинавшийся с марта.
Летоисчисление устроено просто - системное время считается A.U.C (ad Urbe Condita, от основания города (Рима)). Комп никаких "до н.э." и "н.э." не знает (и не знает проблемы возникшей в первом Риме когда в начале нашей эры случался критический краш и гамовер) - имхо, СА подсмотрели это дело у авторов мода Roma Surrectum II, которые ввели римское летоисчисление для избежания оного бага. То, что мы видим на экране - 58 г. до н.э. и т.д. - это "перевод" системного времени на историческое. Примерно как в локализации системные имена можно безнаказанно "переводить" какими нам надо. Игра будет считать по-своему в глубине себя, а мы будем видеть как нам нужно.
Новый год начинается по-римски, в марте, то есть с весны. Но прописан на месте марта - январь. То ли чтобы отразить "криворукость"римского доюлианского календаря и его расхождение с реальностью, то ли так получилось при программировании - перетащили январь на март и все.
А дальше идет интересная штука.
Календарь прописан в стартпозе. Так и называется - CAMPAIGN_CALENDAR. Там две таблички:

Вверху значения CAMPAIGN_CALENDAR, ниже - DATE
Что означают эти цифры?
24 - число ходов в год
6 - порядковый номер временного периода (в Цезаре в Галлии равного 2 неделям) с начала года (нашего, с 1 января)
0 - номер хода с начала игры (т.к. это стартпоз, то ход нулевой)
695 - дата A.U.C (= 58 г. до н.э.)
1 - сезон (1 = лето, 2 = осень, 3 = зима, 4 = весна)
3 - апрель (1 = февраль, 2 = март, 4 = май и т.д.)
0 - начало (0 = начало, 2 = конец, других значений в CiG нет)
Чтобы выяснить это я последовательно сохранялся каждый ход на протяжении года и сравнивал значения. А для того, чтобы убедится в правильности расшифровки, поменял в стартпозе значения DATE отвечающие за дату начала игры на 1 января (=1 марта по римскому календар, т.е. на начало года). Они по моим расчетам должны были быть такими:
695
4 (= весна)
12 (= январь)
0 - начало
Результат:

Как видите, все подтвердилось. Игра начинается - весна, начало января.
Обратите внимание что с карты исчезли леса. Связано это с тем, что стартовые карты прописаны скриптами в разных местах и менять там все надо аккуратно. Мне в данном случае нужна была только проверка календаря, поэтому леса меня не интересовали.
Я попробовал изменить в "Цезаре" календарь на 48 ходов в год чтобы совместить его с моей большой кампанией 2TPY с соответствующими сокращениями дальности хода, увеличением времени изучения технологий и т.д. Но игра отказалась понимать стартпоз где поставлено 48 ходов в год - сезоны прекратились, все время шло одно только лето. Попытки найти где в игре определяется количество ходов в год в связи со сменой сезонов пока не увенчались успехом. Дрезден на ТВЦ сам ничего не знает в этом вопросе. Так что тут будем еще изучать. Но в принципе понимание устройства игрового календаря должно помочь в создании модов.

Летоисчисление устроено просто - системное время считается A.U.C (ad Urbe Condita, от основания города (Рима)). Комп никаких "до н.э." и "н.э." не знает (и не знает проблемы возникшей в первом Риме когда в начале нашей эры случался критический краш и гамовер) - имхо, СА подсмотрели это дело у авторов мода Roma Surrectum II, которые ввели римское летоисчисление для избежания оного бага. То, что мы видим на экране - 58 г. до н.э. и т.д. - это "перевод" системного времени на историческое. Примерно как в локализации системные имена можно безнаказанно "переводить" какими нам надо. Игра будет считать по-своему в глубине себя, а мы будем видеть как нам нужно.
Новый год начинается по-римски, в марте, то есть с весны. Но прописан на месте марта - январь. То ли чтобы отразить "криворукость"римского доюлианского календаря и его расхождение с реальностью, то ли так получилось при программировании - перетащили январь на март и все.
А дальше идет интересная штука.
Календарь прописан в стартпозе. Так и называется - CAMPAIGN_CALENDAR. Там две таблички:

Вверху значения CAMPAIGN_CALENDAR, ниже - DATE
Что означают эти цифры?
24 - число ходов в год
6 - порядковый номер временного периода (в Цезаре в Галлии равного 2 неделям) с начала года (нашего, с 1 января)
0 - номер хода с начала игры (т.к. это стартпоз, то ход нулевой)
695 - дата A.U.C (= 58 г. до н.э.)
1 - сезон (1 = лето, 2 = осень, 3 = зима, 4 = весна)
3 - апрель (1 = февраль, 2 = март, 4 = май и т.д.)
0 - начало (0 = начало, 2 = конец, других значений в CiG нет)
Чтобы выяснить это я последовательно сохранялся каждый ход на протяжении года и сравнивал значения. А для того, чтобы убедится в правильности расшифровки, поменял в стартпозе значения DATE отвечающие за дату начала игры на 1 января (=1 марта по римскому календар, т.е. на начало года). Они по моим расчетам должны были быть такими:
695
4 (= весна)
12 (= январь)
0 - начало
Результат:

Как видите, все подтвердилось. Игра начинается - весна, начало января.
Обратите внимание что с карты исчезли леса. Связано это с тем, что стартовые карты прописаны скриптами в разных местах и менять там все надо аккуратно. Мне в данном случае нужна была только проверка календаря, поэтому леса меня не интересовали.
Я попробовал изменить в "Цезаре" календарь на 48 ходов в год чтобы совместить его с моей большой кампанией 2TPY с соответствующими сокращениями дальности хода, увеличением времени изучения технологий и т.д. Но игра отказалась понимать стартпоз где поставлено 48 ходов в год - сезоны прекратились, все время шло одно только лето. Попытки найти где в игре определяется количество ходов в год в связи со сменой сезонов пока не увенчались успехом. Дрезден на ТВЦ сам ничего не знает в этом вопросе. Так что тут будем еще изучать. Но в принципе понимание устройства игрового календаря должно помочь в создании модов.
