Новый патч переменной длины дня

Вопросы разработки OpenTTD, обсуждение новых сборок и патчей, решение проблем новых версий.

Модераторы: Smoky555, Группа модераторов

Новый патч переменной длины дня

Сообщение pi1985 » Чт ноя 15, 2012 11:08

Играя в хардпак, столкнулся с тем, что при длине дня больше 1 неправильно работает расписание, а так же неправильно отображаются часы рядом с датой (если установить длину дня 10, а тиков в минуте 37, то в дне должно быть 20 минут, а получается 2).
В общем, в связи с этими изысканиями получился у меня ещё один патч, изменяющий длину дня.
Вложения
day_length.zip
(6.71 Кб) Скачиваний: 271
pi1985
Президент
Президент
 
Сообщения: 675
Зарегистрирован: Вт апр 03, 2012 23:10
Откуда: Донбассъ - Забайкалье

Re: Новый патч переменной длины дня

Сообщение Vaulter » Чт ноя 15, 2012 13:03

работает?
Здоровье приносит ту свободу, которую очень немногие понимают, пока не теряют его.
skype: andrey-zaharov
Аватара пользователя
Vaulter
Директор
Директор
 
Сообщения: 437
Зарегистрирован: Вт авг 02, 2005 14:35
Откуда: Санкт-Петербург

Re: Новый патч переменной длины дня

Сообщение Wowan » Чт ноя 15, 2012 17:58

Хотелось бы услышать на эту тему экспертное мнение Ghost'a, который глубоко копал вопрос длины дня и вытекающих из нее проблем с анимацией и каргодистом.
Аватара пользователя
Wowan
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1382
Зарегистрирован: Вт сен 18, 2007 14:43
Откуда: трасса М1, Минск — Москва

Re: Новый патч переменной длины дня

Сообщение Ghost » Чт ноя 15, 2012 20:37

Wowan писал(а):Хотелось бы услышать на эту тему экспертное мнение Ghost'a, который глубоко копал вопрос длины дня и вытекающих из нее проблем с анимацией и каргодистом.

Так это патч для транка или для хардпака?

На первый взгляд, по концепции не особо сильно отличается от http://www.tt-forums.net/viewtopic.php?t=31657. Можно было бы даже такой огород не городить, а просто DAY_TICKS переобъявить как переменную вместо константы.
Есть вопрос. Что будет с внутренними циклами (рост городов, промышленность, устаревание грузов) при использовании этого патча?
Ghost
Директор
Директор
 
Сообщения: 384
Зарегистрирован: Сб сен 26, 2009 00:21
Откуда: Рыбинск

Re: Новый патч переменной длины дня

Сообщение pi1985 » Пт ноя 16, 2012 13:58

Ghost писал(а):Так это патч для транка или для хардпака?

Собственно, патч писался на последней сборке каргодиста (g30fec19b-cd) и на ней же тестируется. Но должен подойти и для хардпака, если выпилить другой патч длины дня. Накладывал так же и на последний транк - ложится с мелкими изменениями.

Ghost писал(а):просто DAY_TICKS переобъявить как переменную вместо константы

Собственно, так я и хотел сделать. Но потом подумал, и решил, что лучше сделать новую переменную. Не хотелось трогать код сетевой игры.

Ghost писал(а):Что будет с внутренними циклами (рост городов, промышленность, устаревание грузов) при использовании этого патча?

Пассажиры стареют - проверил. Города растут, но скорость роста не могу оценить, т. к. не понял, пока как. Про остальное пока ничего не могу сказать.
pi1985
Президент
Президент
 
Сообщения: 675
Зарегистрирован: Вт апр 03, 2012 23:10
Откуда: Донбассъ - Забайкалье

Re: Новый патч переменной длины дня

Сообщение Ghost » Пт ноя 16, 2012 21:07

Главные проблемы патча длины дня не искоренены: циклы в игре запускаются с той же периодичностью, что и в обычной. Цикл роста городов - 70 тиков, цикл обсчета промышленности 256 тиков, цикл устаревания товаров - 185 тиков. Если не растягивать эти циклы, то в ЕЦС промышленность будет закрываться, т.к. шахты исчерпают себя быстро, а переработка - просто не обеспечена поставками из-за скорости той самой переработки. А еще есть неявные циклы в игре. И часть из них тоже надо, по логике, растягивать.

С городами сложно объяснить. Скорость их роста определяется массивов, из которого в зависимости от разных условий выбирается циферка, через какое количество тиков город должен новый дом сгенерировать, и рассчитывается коэффициент замедления для этой циферки в зависимости от других условий (см. метод UpdateTownGrowRate из town_cmd.cpp). Проверить, наверное, можно, выкрутив коэффициент на максимум. Попробуй дать городу денег на постройку нового дома. В обычных условиях, городу в районе 1500 жителей и перевозках пассажиров на уровне 50% требуется около 3 месяцев, что дом построить. Даешь денег - дорог больше с тротуарами становится, и везде столбы. Через 3 месяца таких дорог меньше, а столбы либо ликвидируются, либо заменяются деревьями. При К порядка 100 одного спонсорства должно хватить где-то на один день.
Ghost
Директор
Директор
 
Сообщения: 384
Зарегистрирован: Сб сен 26, 2009 00:21
Откуда: Рыбинск

Re: Новый патч переменной длины дня

Сообщение pi1985 » Пн ноя 19, 2012 15:47

Переписал патч заново.
Открыл в пропатченом транке старую савку от 1.2 и поставил К = 100. Грузовые поезда остановились, т. к. добыча не успевает за перевозкой.
С городами пока разбираюсь.

Ghost писал(а):А еще есть неявные циклы в игре. И часть из них тоже надо, по логике, растягивать

А что это за циклы?
Вложения
day_length-0.2.zip
(3.18 Кб) Скачиваний: 181
pi1985
Президент
Президент
 
Сообщения: 675
Зарегистрирован: Вт апр 03, 2012 23:10
Откуда: Донбассъ - Забайкалье

Re: Новый патч переменной длины дня

Сообщение Ghost » Пн ноя 19, 2012 19:35

pi1985 писал(а):Переписал патч заново.
Открыл в пропатченом транке старую савку от 1.2 и поставил К = 100. Грузовые поезда остановились, т. к. добыча не успевает за перевозкой.
С городами пока разбираюсь.

По логике, надо все игровые процессы, кроме анимации, увеличивать на этот коэффициент. У меня на старых ЕЦС (версия 0.9) продуктовые заводы стабильно закрываются каждые три игровых года, т.к. при уровне 6% и выше просто не успеваешь снабжать в нужных количествах. В итоге уровень падает, а счетчик до закрытия начинает тикать. Все потому, что неправленный цикл расчета промышленности запускается не каждые ~3 дня, а каждые 40 игровых минут...

По городам, например, в массиве задается количество тиков, через которые город новый дом создает. Если оставить существующие значения, то надо итоговое значение домножать на К. Или значения в массиве увеличивать.
pi1985 писал(а):
Ghost писал(а):А еще есть неявные циклы в игре. И часть из них тоже надо, по логике, растягивать

А что это за циклы?

Например, циклы, запускающиеся по какому-либо условию. Но вот на вскидку не скажу, где именно.

Еще мысль на эту тему. Календарные циклы. Например, ежедневный цикл обсчета городов. При К размером в 8 бит день в игре может длиться почти 9,5 минут. Неинтересно будет, если рейтинг в городе, потребности и т.п. информация будет обновляться редко. При большИх К имеет смысл эти процессы сознательно ускорить. Например, вызывать не каждый день, а каждые 1/2-1/4 дня. Можно даже менять периодичность вызова в зависимости от значения К.

А вот циклы по станциям зря увеличил, они больше нужны для актуализации информации, по сути, и для анимации тоже. Их лучше оставить, как есть. И значение К задавать по полной программе, а то были, помнится, ограничения в 10 и 31 в разных сборках. Логики нет в таком ограничении. Если можно выкрутить значение до упора, найдется тот, кто будет использовать максимальное. Вот дальше его увеличить проблематично, размер и все такое, а в пределах 8 бит нет смысла ограничивать конкретным значением.
Ghost
Директор
Директор
 
Сообщения: 384
Зарегистрирован: Сб сен 26, 2009 00:21
Откуда: Рыбинск

Re: Новый патч переменной длины дня

Сообщение pi1985 » Вт ноя 20, 2012 20:19

Очередной update патча.
Станционные рейтинги оставлены без замедления; К увеличен до 255; рейтинги в городах теперь обновляются раз в месяц (если К <= 5), раз в день (при 5 < К <= 135) или раз в 10000 тиков( К > 135). Такая градация выбрана так, чтобы обновление информации происходило не позднее, чем через 5 минут игры.
Насчёт UpdateTownGrowRate сомневаюсь, нужно её чаще вызывать или нет. Так что оставил её на месте.

Что-то не получается прикрепить файл. Выкладываю так.
Код: Выделить всё
diff -Naur openttd-trunk-r24751/src/date.cpp trunk-r24751-daylength_/src/date.cpp
--- openttd-trunk-r24751/src/date.cpp   2012-10-14 21:00:02.000000000 +0300
+++ trunk-r24751-daylength_/src/date.cpp   2012-11-20 15:59:05.000000000 +0200
@@ -163,6 +163,8 @@
extern void CompaniesMonthlyLoop();
extern void EnginesMonthlyLoop();
extern void TownsMonthlyLoop();
+extern void TownsDailyLoop();
+extern void Towns10kTicksLoop();
extern void IndustryMonthlyLoop();
extern void StationMonthlyLoop();
extern void SubsidyMonthlyLoop();
@@ -254,6 +256,7 @@

   DisasterDailyLoop();
   IndustryDailyLoop();
+   TownsDailyLoop();

   SetWindowWidgetDirty(WC_STATUS_BAR, 0, 0);
   EnginesDailyLoop();
@@ -274,6 +277,10 @@
   if (_game_mode == GM_MENU) return;

   _date_fract++;
+   
+   if(_date_fract % 10000)
+      Towns10kTicksLoop();
+
   if (_date_fract < DAY_TICKS) return;
   _date_fract = 0;

diff -Naur openttd-trunk-r24751/src/date_type.h trunk-r24751-daylength_/src/date_type.h
--- openttd-trunk-r24751/src/date_type.h   2012-07-19 21:46:48.000000000 +0300
+++ trunk-r24751-daylength_/src/date_type.h   2012-11-20 08:36:44.000000000 +0200
@@ -27,16 +27,17 @@
  * 1 tick is approximately 30 ms.
  * 1 day is thus about 2 seconds (74 * 30 = 2220) on a machine that can run OpenTTD normally
  */
-static const int DAY_TICKS         =  74; ///< ticks per day
-static const int DAYS_IN_YEAR      = 365; ///< days per year
-static const int DAYS_IN_LEAP_YEAR = 366; ///< sometimes, you need one day more...
+#define DAY_TICKS_74         74  ///< ticks for network synchronization
+#define DAY_TICKS            (74 * (_settings_game.economy.day_length_factor == 0 ? 1 : _settings_game.economy.day_length_factor))  ///< ticks per day
+#define DAYS_IN_YEAR        365  ///< days per year
+#define DAYS_IN_LEAP_YEAR   366  ///< sometimes, you need one day more...

-static const int STATION_RATING_TICKS     = 185; ///< cycle duration for updating station rating
-static const int STATION_ACCEPTANCE_TICKS = 250; ///< cycle duration for updating station acceptance
-static const int CARGO_AGING_TICKS        = 185; ///< cycle duration for aging cargo
-static const int INDUSTRY_PRODUCE_TICKS   = 256; ///< cycle duration for industry production
-static const int TOWN_GROWTH_TICKS        = 70;  ///< cycle duration for towns trying to grow. (this originates from the size of the town array in TTD
-static const int INDUSTRY_CUT_TREE_TICKS  = INDUSTRY_PRODUCE_TICKS * 2; ///< cycle duration for lumber mill's extra action
+#define STATION_RATING_TICKS       185 ///< cycle duration for updating station rating
+#define STATION_ACCEPTANCE_TICKS   250 ///< cycle duration for updating station acceptance
+#define CARGO_AGING_TICKS          (185 * _settings_game.economy.day_length_factor)  ///< cycle duration for aging cargo
+#define INDUSTRY_PRODUCE_TICKS     (256 * _settings_game.economy.day_length_factor)  ///< cycle duration for industry production
+#define TOWN_GROWTH_TICKS          (70  * _settings_game.economy.day_length_factor)  ///< cycle duration for towns trying to grow. (this originates from the size of the town array in TTD
+#define INDUSTRY_CUT_TREE_TICKS    (INDUSTRY_PRODUCE_TICKS * 2) ///< cycle duration for lumber mill's extra action


/*
diff -Naur openttd-trunk-r24751/src/lang/english.txt trunk-r24751-daylength_/src/lang/english.txt
--- openttd-trunk-r24751/src/lang/english.txt   2012-11-08 21:00:02.000000000 +0200
+++ trunk-r24751-daylength_/src/lang/english.txt   2012-11-20 15:53:57.000000000 +0200
@@ -1240,6 +1240,8 @@
STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES            :{WHITE}Changing this setting is not possible when there are vehicles
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE                   :Infrastructure maintenance: {STRING2}
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT          :When enabled, infrastructure causes maintenance costs. The cost grows over-proportional with the network size, thus affecting bigger companies more than smaller ones
+STR_CONFIG_DAY_LENGTH                                           :Day length factor: {STRING2}
+STR_CONFIG_DAY_LENGTH_HELPTEXT                                  :Day length factor (1 <-> 255)

STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS                        :Airports never expire: {STRING2}
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT               :Enabling this setting makes each airport type stay available forever after its introduction
diff -Naur openttd-trunk-r24751/src/network/network_client.cpp trunk-r24751-daylength_/src/network/network_client.cpp
--- openttd-trunk-r24751/src/network/network_client.cpp   2012-07-19 21:46:47.000000000 +0300
+++ trunk-r24751-daylength_/src/network/network_client.cpp   2012-11-19 14:09:55.000000000 +0200
@@ -895,7 +895,7 @@
   /* Let the server know that we received this frame correctly
    *  We do this only once per day, to save some bandwidth ;) */
   if (!_network_first_time && last_ack_frame < _frame_counter) {
-      last_ack_frame = _frame_counter + DAY_TICKS;
+      last_ack_frame = _frame_counter + DAY_TICKS_74;
      DEBUG(net, 4, "Sent ACK at %d", _frame_counter);
      SendAck();
   }
diff -Naur openttd-trunk-r24751/src/network/network.cpp trunk-r24751-daylength_/src/network/network.cpp
--- openttd-trunk-r24751/src/network/network.cpp   2012-07-19 21:46:47.000000000 +0300
+++ trunk-r24751-daylength_/src/network/network.cpp   2012-11-19 14:09:24.000000000 +0200
@@ -275,8 +275,8 @@
   /* This client has missed his ACK packet after 1 DAY_TICKS..
    *  so we increase his lag for every frame that passes!
    * The packet can be out by a max of _net_frame_freq */
-   if (cs->last_frame_server + DAY_TICKS + _settings_client.network.frame_freq < _frame_counter) {
-      lag += _frame_counter - (cs->last_frame_server + DAY_TICKS + _settings_client.network.frame_freq);
+   if (cs->last_frame_server + DAY_TICKS_74 + _settings_client.network.frame_freq < _frame_counter) {
+      lag += _frame_counter - (cs->last_frame_server + DAY_TICKS_74 + _settings_client.network.frame_freq);
   }
   return lag;
}
diff -Naur openttd-trunk-r24751/src/network/network_server.cpp trunk-r24751-daylength_/src/network/network_server.cpp
--- openttd-trunk-r24751/src/network/network_server.cpp   2012-10-10 21:00:04.000000000 +0300
+++ trunk-r24751-daylength_/src/network/network_server.cpp   2012-11-19 14:09:40.000000000 +0200
@@ -1179,7 +1179,7 @@
   /* The client is trying to catch up with the server */
   if (this->status == STATUS_PRE_ACTIVE) {
      /* The client is not yet catched up? */
-      if (frame + DAY_TICKS < _frame_counter) return NETWORK_RECV_STATUS_OKAY;
+      if (frame + DAY_TICKS_74 < _frame_counter) return NETWORK_RECV_STATUS_OKAY;

      /* Now he is! Unpause the game */
      this->status = STATUS_ACTIVE;
@@ -1802,7 +1802,7 @@
             * did not receive a packet, then the client is not just
             * slow, but the connection is likely severed. Mentioning
             * frame_freq is not useful in this case. */
-            if (lag > (uint)DAY_TICKS && cs->lag_test == 0 && cs->last_packet + 2000 > _realtime_tick) {
+            if (lag > (uint)DAY_TICKS_74 && cs->lag_test == 0 && cs->last_packet + 2000 > _realtime_tick) {
               IConsolePrintF(CC_WARNING, "[%d] Client #%d is slow, try increasing [network.]frame_freq to a higher value!", _frame_counter, cs->client_id);
               cs->lag_test = 1;
            }
diff -Naur openttd-trunk-r24751/src/saveload/saveload.cpp trunk-r24751-daylength_/src/saveload/saveload.cpp
--- openttd-trunk-r24751/src/saveload/saveload.cpp   2012-10-21 21:00:03.000000000 +0300
+++ trunk-r24751-daylength_/src/saveload/saveload.cpp   2012-11-19 13:14:12.000000000 +0200
@@ -242,7 +242,7 @@
  *  176   24446
  *  177   24619
  */
-extern const uint16 SAVEGAME_VERSION = 177; ///< Current savegame version of OpenTTD.
+extern const uint16 SAVEGAME_VERSION = SL_DAY_LENGTH; ///< Current savegame version of OpenTTD.

SavegameType _savegame_type; ///< type of savegame we are loading

diff -Naur openttd-trunk-r24751/src/saveload/saveload.h trunk-r24751-daylength_/src/saveload/saveload.h
--- openttd-trunk-r24751/src/saveload/saveload.h   2012-07-19 21:46:47.000000000 +0300
+++ trunk-r24751-daylength_/src/saveload/saveload.h   2012-11-19 13:31:49.000000000 +0200
@@ -15,6 +15,8 @@
#include "../fileio_type.h"
#include "../strings_type.h"

+#define SL_DAY_LENGTH 200
+
/** Save or load result codes. */
enum SaveOrLoadResult {
   SL_OK     = 0, ///< completed successfully
diff -Naur openttd-trunk-r24751/src/settings_gui.cpp trunk-r24751-daylength_/src/settings_gui.cpp
--- openttd-trunk-r24751/src/settings_gui.cpp   2012-11-15 21:00:04.000000000 +0200
+++ trunk-r24751-daylength_/src/settings_gui.cpp   2012-11-19 13:35:15.000000000 +0200
@@ -1845,6 +1845,7 @@
   SettingEntry("economy.smooth_economy"),
   SettingEntry("economy.feeder_payment_share"),
   SettingEntry("economy.infrastructure_maintenance"),
+   SettingEntry("economy.day_length_factor"),
};
/** Economy sub-page */
static SettingsPage _settings_economy_page = {_settings_economy, lengthof(_settings_economy)};
diff -Naur openttd-trunk-r24751/src/settings_type.h trunk-r24751-daylength_/src/settings_type.h
--- openttd-trunk-r24751/src/settings_type.h   2012-11-08 21:00:03.000000000 +0200
+++ trunk-r24751-daylength_/src/settings_type.h   2012-11-19 13:07:43.000000000 +0200
@@ -426,6 +426,7 @@
   uint16 town_noise_population[3];         ///< population to base decision on noise evaluation (@see town_council_tolerance)
   bool   allow_town_level_crossings;       ///< towns are allowed to build level crossings
   bool   infrastructure_maintenance;       ///< enable monthly maintenance fee for owner infrastructure
+   uint8  day_length_factor;
};

/** Settings related to stations. */
diff -Naur openttd-trunk-r24751/src/sortlist_type.h trunk-r24751-daylength_/src/sortlist_type.h
--- openttd-trunk-r24751/src/sortlist_type.h   2012-07-19 21:46:49.000000000 +0300
+++ trunk-r24751-daylength_/src/sortlist_type.h   2012-11-19 13:19:13.000000000 +0200
@@ -17,6 +17,7 @@
#include "core/sort_func.hpp"
#include "core/smallvec_type.hpp"
#include "date_type.h"
+#include "settings_type.h"

/** Flags of the sort list. */
enum SortListFlags {
diff -Naur openttd-trunk-r24751/src/table/settings.ini trunk-r24751-daylength_/src/table/settings.ini
--- openttd-trunk-r24751/src/table/settings.ini   2012-11-08 21:00:03.000000000 +0200
+++ trunk-r24751-daylength_/src/table/settings.ini   2012-11-20 09:32:18.000000000 +0200
@@ -1434,6 +1434,19 @@
proc     = InvalidateCompanyInfrastructureWindow
cat      = SC_BASIC

+[SDT_VAR]
+base     = GameSettings
+var      = economy.day_length_factor
+type     = SLE_UINT8
+from     = SL_DAY_LENGTH
+def      = 1
+min      = 1
+max      = 255
+cat      = SC_EXPERT
+str      = STR_CONFIG_DAY_LENGTH
+strhelp  = STR_CONFIG_DAY_LENGTH_HELPTEXT
+strval   = STR_JUST_COMMA
+
##
[SDT_VAR]
base     = GameSettings
diff -Naur openttd-trunk-r24751/src/timetable_cmd.cpp trunk-r24751-daylength_/src/timetable_cmd.cpp
--- openttd-trunk-r24751/src/timetable_cmd.cpp   2012-07-19 21:46:48.000000000 +0300
+++ trunk-r24751-daylength_/src/timetable_cmd.cpp   2012-11-19 13:43:16.000000000 +0200
@@ -16,6 +16,7 @@
#include "window_func.h"
#include "vehicle_base.h"
#include "cmd_helper.h"
+#include "settings_type.h"

#include "table/strings.h"

diff -Naur openttd-trunk-r24751/src/town_cmd.cpp trunk-r24751-daylength_/src/town_cmd.cpp
--- openttd-trunk-r24751/src/town_cmd.cpp   2012-07-19 21:46:48.000000000 +0300
+++ trunk-r24751-daylength_/src/town_cmd.cpp   2012-11-20 15:44:04.000000000 +0200
@@ -3057,9 +3057,9 @@
   uint16 m;

   if (t->fund_buildings_months != 0) {
-      m = _grow_count_values[0][min(n, 5)];
+      m = _grow_count_values[0][min(n, 5)] * _settings_game.economy.day_length_factor;
   } else {
-      m = _grow_count_values[1][min(n, 5)];
+      m = _grow_count_values[1][min(n, 5)] * _settings_game.economy.day_length_factor;
      if (n == 0 && !Chance16(1, 12)) return;
   }

@@ -3295,6 +3295,32 @@
   return CommandCost();
}

+void Towns10kTicksLoop()
+{
+   if(_settings_game.economy.day_length_factor > 135) {
+      Town *t;
+
+      FOR_ALL_TOWNS(t) {
+         UpdateTownRating(t);
+         UpdateTownCargoes(t);
+         UpdateTownAmounts(t);
+      }
+   }
+}
+
+void TownsDailyLoop()
+{
+   if(_settings_game.economy.day_length_factor > 5 && _settings_game.economy.day_length_factor <= 135) {
+      Town *t;
+
+      FOR_ALL_TOWNS(t) {
+         UpdateTownRating(t);
+         UpdateTownCargoes(t);
+         UpdateTownAmounts(t);
+      }
+   }
+}
+
void TownsMonthlyLoop()
{
   Town *t;
@@ -3306,11 +3332,14 @@
         if (--t->exclusive_counter == 0) t->exclusivity = INVALID_COMPANY;
      }

-      UpdateTownAmounts(t);
-      UpdateTownRating(t);
-      UpdateTownGrowRate(t);
+      
      UpdateTownUnwanted(t);
-      UpdateTownCargoes(t);
+      UpdateTownGrowRate(t);
+      if(_settings_game.economy.day_length_factor <= 5) {
+         UpdateTownRating(t);
+         UpdateTownCargoes(t);
+         UpdateTownAmounts(t);
+      }
   }

   UpdateTownCargoBitmap();
pi1985
Президент
Президент
 
Сообщения: 675
Зарегистрирован: Вт апр 03, 2012 23:10
Откуда: Донбассъ - Забайкалье

Re: Новый патч переменной длины дня

Сообщение pi1985 » Ср ноя 21, 2012 14:19

Последние испытания показали, что при доставке продуктов в город выше снеговой линии, при коэффициенте длины дня больше 5, продуктов хватает ровно на один день или на 10000 тиков не зависимо от количества доставленных продуктов (как раз два вызова UpdateTownAmounts - первый говорит, что продукты доставлены, а второй - что требуются).
pi1985
Президент
Президент
 
Сообщения: 675
Зарегистрирован: Вт апр 03, 2012 23:10
Откуда: Донбассъ - Забайкалье

Re: Новый патч переменной длины дня

Сообщение pi1985 » Ср ноя 21, 2012 23:24

Исправил ошибку с продуктами. Теперь, правда, их хватает только до конца текущего месяца не зависимо от того, когда продукты были доставлены.
https://dl.dropbox.com/u/62561654/daylength-0.4.patch

Кстати, вопрос. Нужно ли чаще вызывать UpdateTownCargoes?
pi1985
Президент
Президент
 
Сообщения: 675
Зарегистрирован: Вт апр 03, 2012 23:10
Откуда: Донбассъ - Забайкалье

Re: Новый патч переменной длины дня

Сообщение pi1985 » Чт ноя 22, 2012 10:19

Ghost писал(а):По городам, например, в массиве задается количество тиков, через которые город новый дом создает. Если оставить существующие значения, то надо итоговое значение домножать на К. Или значения в массиве увеличивать.

Опытным путём установлено, что тогда скорость роста города становится зависимой от К: при К = 1 город растёт раз в 199 дней, а при 255 - раз в > 19000. Скорее всего потому, что TOWN_GROWTH_TICKS уже помножена на К, получается, что число тиков множится на К^2.
Вернул всё обратно - теперь при любом К число дней стало одинаковым.
Заодно исправил глюк, из-за которого города выше снеговой линии вообще не росли.
https://dl.dropbox.com/u/62561654/daylength-0.5.patch
pi1985
Президент
Президент
 
Сообщения: 675
Зарегистрирован: Вт апр 03, 2012 23:10
Откуда: Донбассъ - Забайкалье

Re: Новый патч переменной длины дня

Сообщение pi1985 » Пн ноя 26, 2012 14:24

Последняя на данный момент редакция патча
https://dl.dropbox.com/u/62561654/daylength-0.6.patch
pi1985
Президент
Президент
 
Сообщения: 675
Зарегистрирован: Вт апр 03, 2012 23:10
Откуда: Донбассъ - Забайкалье

Re: Новый патч переменной длины дня

Сообщение Vaulter » Вт ноя 27, 2012 18:20

pi1985 писал(а):неправильно работает расписание


а расписание то отображается как надо теперь?

зы: патч превратился, собственно, в еще одного монстрика.
зыы: почему в хардпаке именно тот патчик (с глюками) - он дает наименьшее влияния на остальные участки кода = более лучше интегрируется в патчпаки. именно поэтому это его огромный плюс, перевешивающий минусы в плане расписания и анимашек.
Здоровье приносит ту свободу, которую очень немногие понимают, пока не теряют его.
skype: andrey-zaharov
Аватара пользователя
Vaulter
Директор
Директор
 
Сообщения: 437
Зарегистрирован: Вт авг 02, 2005 14:35
Откуда: Санкт-Петербург

Re: Новый патч переменной длины дня

Сообщение pi1985 » Ср ноя 28, 2012 10:35

Vaulter писал(а):а расписание то отображается как надо теперь?

Да, расписание работает правильно.

Vaulter писал(а):патч превратился, собственно, в еще одного монстрика

В принципе, все махинации с town_cmd.cpp нужны только для того, чтобы информация о рейтингах и доставленных грузах обновлялась не раз в месяц (который длится намного дольше), а чаще и не нужны.
А константу DAY_TICKS_74 я сделал для того, чтобы не изменился интервал обмена между машинами в сетевой игре.
Так что я думаю, достаточно такого патча
pi1985
Президент
Президент
 
Сообщения: 675
Зарегистрирован: Вт апр 03, 2012 23:10
Откуда: Донбассъ - Забайкалье


Вернуться в Разработка OpenTTD

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron