Город. Устройство, рост, перспективы разработки.

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

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

Город. Устройство, рост, перспективы разработки.

Сообщение Dictu » Вс дек 16, 2007 02:22

Уже очень давно досточтимый Neko посоветовал мне вынести идеи касательно городского развития в отдельную тему. Что я наконец делаю.

Опишу вкратце текущую ситуацию, если ошибусь – меня поправят. В технические тонкости вдаваться не стану, опишу принцип. Далее, определившись с терминами и диспозицией, предложу что-то новое.

Устройство города.

Город растёт от центра (клетки с названием) в виде правильного круга. Если круг неправильный – то только и единственно потому, что ему мешает рельеф местности. Со временем выправится. Единственное, что игра знает о городе – его радиус, определяемый общим количеством домов по простой формуле зависимости радиуса от площади круга. Этот радиус делится на зоны, от двух до пяти:
    Зона 4. Это центр города. Именно туда (как много где написано) надо возить товары, еду, воду (в зависимости от климата), чтобы город рос. Кстати, сгодится вообще любой продукт, главное, чтобы происходила какая-то транспортная активность. Традиционно именно в четвёртой зоне располагаются все здания, принимающие товары. Там в основном располагаются офисы и магазины. Если город принимает товары – значит, в нём есть четвёртая зона. Там на улицах стоят фонари, а под зданиями всё замощено каменными плитами.
    Зона 3. Тонким кольцом окружает четвёртую. Являет собой «Бульварное кольцо». Дорожное полотно обсажено деревьями. Из зданий в стандартном наборе там строится только некий «парк с аллеей». Появляется, когда в городе есть 50 зданий.
    Зона 2. Есть всегда. Это жилые кварталы, многоэтажная застройка. По сторонам дорог есть тротуары.
    Зона 1. Вокруг второй зоны. Более-менее респектабельная малоэтажная застройка.
    Зона 0. Окраины. Визуально не отличаются от зоны 1. И строятся там те же сараи.


С ростом радиуса города пропорционально растут радиусы зон.

Для каждого здания прямо в файле .grf прописано, в какой зоне город может его строить. Большинство зданий можно строить в нескольких зонах, в результате застройка зон 0-2 довольно единообразна.

Отдельно, как функция от количества домов, считается транспортная зона - количество активно действующих станций (1-4) в ней влияет на скорость роста города. Её радиус изменяется от 2 до 9, после постройки 71 дома она исчезает, если не включён ключ towngrowthlimit. Если включён - она продолжает расти.
Последний раз редактировалось Dictu Вс дек 16, 2007 04:53, всего редактировалось 2 раз(а).
Аватара пользователя
Dictu
Директор
Директор
 
Сообщения: 260
Зарегистрирован: Пн окт 31, 2005 17:02
Откуда: Москва

Сообщение Dictu » Вс дек 16, 2007 03:11

Рост города: обратная связь с игроком.

Касательно этого вопроса у меня довольно сумбурные познания, т.к. народ обожает ваять патчи, но ненавидит их документировать. Поэтому зачастую я путаю, что было в ТТД, что - в оТТД, а что в New Town Growth Mechanism, какие фичи были унаследованы, а какие выкинуты. Опять же, ошибусь - поправят.

Сама идея роста городов такова, что города, не затронутые деятельностью игрока, растут едва-едва, если ещё не уменьшаются, а те, в которых мы что-то возим - растут как на дрожжах. Типа, наша деятельность благотворна.

Желающие точных сведений на английском могут посмотреть старый алгоритм роста города вот здесь.

Мы же рассмотрим новый, дополняющий прежний и лечащий его баги. Если играть с New Town Growth механизмом (что разумно), скорость роста города зависит от того, сколько и каких стратежных грузов город принимает от нас и отдаёт нам. Для каждого груза есть место в большой, но несложной формуле скорости роста города, для каждого груза есть свой весовой коэффициент, означающий его значимость для этого роста. Идеально для роста города возить всё, что город может принять-отдать, да побольше. Это пассажиры, почта, товары, еда, вода. Маньякам в тойланде - надо возить конфеты и шипучку.

Для городов выше снеговой линии необходимо возить еду, для городов в пустыне - воду. Это триггеры роста, без них ничто в городе не заколосится. Конечно же, количества воды-еды входят в формулу роста наряду с другими, не столь стратежными грузами.

Также в формуле считается количество активных станций игрока в городе - от 0 до 4, свыше 4 на скорость роста уже не влияют. Тоже перемножается на свой весовой коэффициент. Активные станции - это такие, где за последние 50 дней что-то погружали-сгружали. Причём неважно что - хоть дрова. Через это место в формуле на рост города влияют даже "нестратежные" грузы.

Особо замечу, что городу вообще пофиг, кто из игроков возит грузы - в формуле этого просто нет.

Вся эта машинерия определяет только одно: насколько часто город будет пытаться строить новые здания.
Последний раз редактировалось Dictu Вс дек 16, 2007 04:02, всего редактировалось 1 раз.
Аватара пользователя
Dictu
Директор
Директор
 
Сообщения: 260
Зарегистрирован: Пн окт 31, 2005 17:02
Откуда: Москва

Сообщение Dictu » Вс дек 16, 2007 03:51

Постройка нового здания: как строится город.

Когда все формулы посчитаны, кости брошены, и городу наконец-то выпало строить новое, электронный строитель находит поблизости от центра города кусок дороги или строит его. По этой дороге он движется, отыскивая свободное место для постройки дома или ответвления дороги. Расстояние, на которое наш архитектор убежит по дороге, не может превышать указанное в ключе towngrowthlimit. Это и есть максимальный радиус нашего города. По дефолту это 20 клеток. Тоннель считается за одну.

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

Далее здание уже живёт своей жизнью, вовсе не относящейся к столь тщательно описанному выше механизму роста города. Каждые 256 тиков оно меняет фазы постройки, пока совсем не построится, отгружает производимые им грузы, и с какой-то (малой?) вероятностью решает, не снестись ли ему. Если снестись, то на расчищенном месте с вероятностью 61/64, что значит "стопудово", тут же построится новое.

ИМХО, именно таким образом растут внутренние городские зоны (1-4). В манах это не указано, но я думаю, что для здания, оказавшегося в "чужой" городской зоне засчёт её расширения, вероятность сноса становится гораздо выше, а на месте снесённого возникнет уже присущее данной зоне.
Аватара пользователя
Dictu
Директор
Директор
 
Сообщения: 260
Зарегистрирован: Пн окт 31, 2005 17:02
Откуда: Москва

Сообщение Dictu » Вс дек 16, 2007 04:46

Что можно улучшить, ограничившись минимальным вмешательством в код игры и не меняя, но дополняя все вышеописанные правила? Рассмотрим возможные модификации.

1) "Многополис"

Один город - много центров, от которых считаются зоны застройки. Скажем, по достижении "городом-0" некоего радиуса(или какого-то количества зданий?) где-то в его второй зоне образуется ещё один центр города, город-1. Для игрока это выглядит так, словно центральная(четвёртая) зона дала аппендикс вбок, соответственно расширятся и окружающие её зоны. Город-донор отдаёт городу-акцептору какое-то количество зданий вне своей четвёртой зоны. Желательно, чтобы они вообще поделили свои строения по линии между центрами - это позволит им не мешать застройке друг друга. Далее их здания считаются уже самостоятельно, хотя для игрока являют собой один город.

Маленький минус этой схемы - пересчёт радиусов городских зон, ибо он считается тупо от количества домов в городе. Радиус центра города-0 (донора) временно уменьшится.

Выбор места для нового центра должен быть не случаен. Предпочтительными местами для такого центра должны быть:
    1) побережья;
    2) долины;
    3) зоны охвата активных станций игрока;
    4) окрестности транспортных магистралей, ведущих из города.


Всё, что касается того, когда растёт город, считается для многополиса в целом. Статистика в формулы суммируется со всех городков и их транспортных зон.

Наш "электронный строитель", получив добро на постройку здания в городе в целом, рандомом выбирает городок 0, 1, ..., от центра которого производит процедуру застройки - уже обычным порядком. В этом рандоме каждому центру можно присвоить свой весовой коэффициент, растущий при наличии активности в его транспортной зоне.

Таким образом самостоятельно, да ещё демонстрируя обратную связь с игроком, станут расти реальные жизненные конфигурации городов: город-звезда вдоль радиальных шоссе и жд (Москва), город-кишка вдоль шоссе (Покров) или реки (Волгоград), город-подкова вокруг бухты (Керчь), в холмистой-гористой же местности город станет стелиться капитальной застройкой по долинами, покрывая склоны возвышенностей малоэтажной застройкой (опять Керчь)
Аватара пользователя
Dictu
Директор
Директор
 
Сообщения: 260
Зарегистрирован: Пн окт 31, 2005 17:02
Откуда: Москва

Сообщение Dictu » Вс дек 16, 2007 05:09

Что можно улучшить, ограничившись минимальным вмешательством в код игры и не меняя, но дополняя все вышеописанные правила? Рассмотрим возможные модификации.

2) "Вокзальная площадь"

Хорошо бы, чтобы зона охвата станции повышала бы на один уровень зону городской застройки. Даже не вся зона, а, скажем, каёмка в две, на крупных станциях - три клетки. Скажем, станция у нас во второй зоне, а вокруг неё - каёмка третьей зоны, а ещё лучше-четвёртой. В жизни так бывает.

и, в продолжение:

3) "Умный строитель"


Вдоль железных дорог - индастриал, пустыри. В жизни это называется "зона деградации городских земель".

Железные дороги в зоне 4 отделены от города понтовыми шумозащитными барьерами, в зоде 2 - бетонными заборами с графитти, в зоне 1-0 - ничем.

Вплотную к нашим ЖД станциям город норовит строить вокзал, вокзальную площадь, водокачку, базар.

В файлике грф для каждого спрайта прописать, в какую сторону он смотрит фасадом - должно хватить одного байта. В зависимости от того, с какой стороны дорога, игра может выбирать лишь из зданий, имеющих фасад с этой стороны.
Аватара пользователя
Dictu
Директор
Директор
 
Сообщения: 260
Зарегистрирован: Пн окт 31, 2005 17:02
Откуда: Москва

Сообщение George » Пн дек 17, 2007 10:36

Dictu писал(а):3) "Умный строитель"
В файлике грф для каждого спрайта прописать, в какую сторону он смотрит фасадом - должно хватить одного байта. В зависимости от того, с какой стороны дорога, игра может выбирать лишь из зданий, имеющих фасад с этой стороны.
А вот эта интересная тема обсуждалась уже очень давно. Я просил callback, который укажет, как здание влияет на окружающий мир. Оно может (предлагалось и описывалось, с учётом механизмов) добавить/удалить дорогу/дерево/воду/другое здание. Аналогично сделать доступные проверки (тогда здание сможет отказаться от строительства, если не с той стороны дорога или повернуться фасадом в нужную сторону). Надо учитывать, что движок самого TTD позволяет зданиям в некотором случае изменить окружающий мир. Это поведение может быть проверено следующим образом: создаёте здание 2х2, а делаете его 1х1. Тогда при его строительстве вы можете получить на недоопределённых клетках деревья, дороги, может разнести станцию. Соотвественно неоднократно высказывалось пожелание этой мощью управлять :)
Когда буду дома, поищу письма.
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1384
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Сообщение Sky-Clad » Вт дек 18, 2007 06:50

Всё таки я так и не понял, как добиться того, чтобы город строил здания, которые дают требование к товарам и продуктам.
Аватара пользователя
Sky-Clad
Директор
Директор
 
Сообщения: 314
Зарегистрирован: Чт июн 28, 2007 18:06

Сообщение Pk » Вт дек 18, 2007 23:35

как-как... if-then и рейтинг.
Анализируй то, как ты делаешь сам. Потом объясни это компьютеру.
Кладу асфальт, гружу Лейланды.
новый вариант мышления ИИ
Pk
Директор
Директор
 
Сообщения: 320
Зарегистрирован: Пт сен 30, 2005 06:50
Откуда: Москва

Сообщение Dictu » Ср дек 19, 2007 00:06

George писал(а):Я просил callback, который укажет, как здание влияет на окружающий мир... Соответственно неоднократно высказывалось пожелание этой мощью управлять :)
Когда буду дома, поищу письма.
:::) К сожалению, мы исследуем код ТТД как поверхность Луны в телескоп. Луч поноса кодерам, не продокументировавшим свои действия.
Аватара пользователя
Dictu
Директор
Директор
 
Сообщения: 260
Зарегистрирован: Пн окт 31, 2005 17:02
Откуда: Москва

Сообщение George » Ср дек 19, 2007 09:19

Dictu писал(а):
George писал(а):Я просил callback, который укажет, как здание влияет на окружающий мир... Соответственно неоднократно высказывалось пожелание этой мощью управлять :)
Когда буду дома, поищу письма.
:::) К сожалению, мы исследуем код ТТД как поверхность Луны в телескоп. Луч поноса кодерам, не продокументировавшим свои действия.
Можно подумать мы свои действия хорошо документируем :?
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1384
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia


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

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

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

cron