Wake of Gods Forum | Форум Во Имя Богов

Full Version: Добавление новых городов - эмуляция
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Основная идея для добавления новых городов в игру заключается в замене всех построек дефолтного города и его существ на лету в самой игре с помощью ресивера !!SN=:R. Т.е. подтип города (0-8) становится подподтипом.
Было: объект 98/ тип города
Стало: объект 98/ тип города/ стандартный город, новый город, новый город2 и т.д.
т.е. идет замена всех элементов замка.
Новые существа можно добавить через Тифон (общая база существ на все города и моды) или с помощью erm скриптов - если такое возможно.

На данный момент, модель города на карте меняется с помощью параметра "вид города" из Wog (разрушен/частично разрушен и т.д.). Лучше это конечно сделать на базе новой переменной - тогда количество городов будет неограниченным.


Для сгенерированных карт можно создать скрипт, который будет обходить все города:
например, нужно добавить Рощу на базе Замка, и Двор на базе Оплота.
если подтип города =0 (Замок) генерация от 1до2. если 1 - оставить Замок, 2 - сделать Рощей
если подтип города =1 (ОПлот) генерация от 1до2. если 1 - оставить Оплот, 2 - сделать Рощей
если подтип города =3 оставить без изменений и т.д.

При загрузки карты новый город можно выбрать с помощью диалога (1 параметр - какой город заменить, 2 параметр - на какой новый город-мод заменить)

В теории, такую замену можно делать и для героев (чтобы добавить не только город но и фракцию в игру) - меняя портрет, характеристики, навыки героя на лету


В данном примере показан принцип добавления нового города в игру:
Добавлен замок Роща (фон, музыка, жилище 1 уровня и существа 1,2 уровня) на базе Замка. Роща присваивается городу номер 1 на карте (можно заменить на любое другое значение)
Image: FJBIO.png

По ссылке доступен мод и карта:
скачать
AnT, очень интересная задумка мода, но реализация мало продумана.

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

Добавим объекты на карте типа внешних жилищ, почву (ну а вдруг),

Хоть часть из этого можно через un:c исправить/реализовать, но даже не хочу описывать, как много придётся делать правок под каждый новый город. Ну а что нельзя реализовать, то и будет причиной невозможности реализации 166

Ну и самое сладкое - как сказать ИИ, что не в Замке
Идея на самом деле классная, но daemon_n прав - это колоссальная работа. Возможно, будет даже проще поддержку новых городов добавить, чем все это учитывать. Говорю как человек, создавший несколько таких эмуляторов Ab Один эмулятор - не проблема, но вот несколько, и, чтобы они были взаимосовместимыми и в должной степени проработанными, - это очень сложная задача.

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


Города-моды, как правило, основаны на каком-то городе. Например Бастион - на базе Цитадели, где только 3 уровня магии, в кузнице можно брать тележку и машину. Соотв. также на базе Цитадели этот город и стоит добавлять.


ресурс в хранилище ресурсов
цены на постройки


Настроить с помощью erm команд. Один раз, но индивидуально под каждый город. Учитывая, что новые города появляются очень редко (раз в несколько лет) - это не такая сложная задача


позиция зданий
это делается с помощью замены двух pcx файлов на объект (обводка и область для клика мышкой). Например заменой TZELDw_0.pcx TOELDw_0.pcx на новые для жилища ур.1 сопряжения


здания на доп. прирост
это работает уже сейчас, проверял


Возможно, будет даже проще поддержку новых городов добавить, чем все это учитывать.
На данный момент добавить (именно добавить, а не заменить) новый замок в игру может только программист, и это совсем не легко.
Здесь же это может сделать любой желающий, кто разбирается в erm командах. На данный момент можно добавить (именно добавить) 27 городов, на каждый дефолтный по 3 новых. Т.е. всего будет 36 городов
AnT, а остальное?

Что касается позиций - это не решение, так как это не вяжется с принципом "шаблон".

Ну и что касается текстов описаний?
Почему не решение?
у каждого города у каждого строения есть pcx файлы обводки и области клика мышкой. Они все и меняются.
Если речь про то как это сделать по шаблону то (например):
!!SN:R^TZELDw_0.pcx^/^TZxxDw_0.pcx^; где xx- аббревиатура нового города
!!SN:R^TOELDw_0.pcx^/^TOxxDw_0.pcx^;
Это возможно, но очень долго. Даже на С++/Delphi долго, не то, что на erm.
Кстати, поменяв ресурс в хранилище, надо изменить и его описание, а это, если не использовать текстовики, означает, что понадобится хук перед отображением этого текста. Придется найти адреса для всех таких вещей.
Я как раз сейчас думал над изменением названий и описаний строений в городе.
Первым делом приходит на ум динамическая замена Dwelling.txt (на каждый город отдельный DwellingXX.txt).
Уже в новом Dwelling2.txt отредактировать названия строений и описания.

если город = новый
!!SN:R^Dwelling.txt^/^Dwelling2.txt^; замена
если город = дефолтный
!!SN:R^Dwelling.txt^/^^; вернуть как было

Но увы, это не работает. Видимо dwelling.txt загружается до erm и после уже не обновляется.
через SN:H^xxx^… - тоже не вышло

Если кто знает, как динамически менять Dwelling.txt в игре - просьба написать.
как я понял, если использовать этот код, можно обновлять любой указанный текстовик в памяти игры
(05.11.2020 02:40)Bes Wrote: [ -> ]при отлаживании элементов шаблона очень востребовано обновлять txt-файл шаблона без выхода из игры.
Вот код, который можно повесить на любое срабатывание кнопки, или завязать на клик по конкретному месту в игре, и ваш указанный шаблон обновится, после чего можно сразу проверять ваш DL-диалог
P.S. не забывайте и про встроенное обновление всех скриптов по F12 для ERA Yes

проверь, измени, свернув игру, двеллинг.тхт и запусти код в игре... еси норм сработает, то придётся тебе решить способ подмены текстовика вне игры и обновлять уже налету в самой игре
А вот к этой функции есть расшифровка с примером? Может ее как-то можно использовать совместно с !!UN:R

   
FUNCTION LoadTxt (Name: PCHAR): {n} PTxtFile; STDCALL;
Загружает txt-таблицу средствами игры.
AnT, а что там уже с примером, это и есть готовый пример... вешаешь этот код на нажатие кнопки любой, пишешь для !!VRz1:S^dwelling.txt^; и игра перегружает эту таблицу в память...
После примера - часть названий зданий стало пустым. Если менять названия зданий - то у всех строений, т.к. в модах здания на увеличение прироста будут именоваться по-разному.
Да и, к тому же, способ подмены текстовика вне игры - совсем не выход...
Image: FK1XQ.png
(05.01.2022 15:31)Bes Wrote: [ -> ]как я понял, если использовать этот код, можно обновлять любой указанный текстовик в памяти игры
как я и сказал, не был уверен что для любого текстовика такое подходит... для DL-шаблонов идеально подходилоSorry
Попробовал метод, описанный выше, ничего не вышло. Менеджер ресурсов ругается что не найден исходный файл фона "TBcsback.pcx" (фон города замка людей). Кто то знает как это пофиксить, или я чёто не так делаю?Sorry
Reference URL's