Wake of Gods Forum | Форум Во Имя Богов
Добавление новых городов - эмуляция - Printable Version

+- Wake of Gods Forum | Форум Во Имя Богов (http://wforum.heroes35.net)
+-- Forum: Герои Меча и Магии 3.5 WoG/ERA (/forumdisplay.php?fid=99)
+--- Forum: Новые города (/forumdisplay.php?fid=157)
+--- Thread: Добавление новых городов - эмуляция (/showthread.php?tid=6454)


Добавление новых городов - эмуляция - AnT - 03.01.2022 15:24

Основная идея для добавления новых городов в игру заключается в замене всех построек дефолтного города и его существ на лету в самой игре с помощью ресивера !!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

По ссылке доступен мод и карта:
скачать


RE: Добавление новых городов - эмуляция - daemon_n - 03.01.2022 15:45

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

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

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

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

Ну и самое сладкое - как сказать ИИ, что не в Замке


RE: Добавление новых городов - эмуляция - Raistlin - 03.01.2022 19:23

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

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


RE: Добавление новых городов - эмуляция - AnT - 05.01.2022 09:08

ограничения по заклинаниям
машина в кузнице


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


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


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


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


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


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


RE: Добавление новых городов - эмуляция - daemon_n - 05.01.2022 09:10

AnT, а остальное?

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

Ну и что касается текстов описаний?


RE: Добавление новых городов - эмуляция - AnT - 05.01.2022 09:20

Почему не решение?
у каждого города у каждого строения есть pcx файлы обводки и области клика мышкой. Они все и меняются.
Если речь про то как это сделать по шаблону то (например):
!!SN:R^TZELDw_0.pcx^/^TZxxDw_0.pcx^; где xx- аббревиатура нового города
!!SN:R^TOELDw_0.pcx^/^TOxxDw_0.pcx^;


RE: Добавление новых городов - эмуляция - Raistlin - 05.01.2022 12:12

Это возможно, но очень долго. Даже на С++/Delphi долго, не то, что на erm.
Кстати, поменяв ресурс в хранилище, надо изменить и его описание, а это, если не использовать текстовики, означает, что понадобится хук перед отображением этого текста. Придется найти адреса для всех таких вещей.


RE: Добавление новых городов - эмуляция - AnT - 05.01.2022 12:47

Я как раз сейчас думал над изменением названий и описаний строений в городе.
Первым делом приходит на ум динамическая замена Dwelling.txt (на каждый город отдельный DwellingXX.txt).
Уже в новом Dwelling2.txt отредактировать названия строений и описания.

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

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

Если кто знает, как динамически менять Dwelling.txt в игре - просьба написать.


RE: Добавление новых городов - эмуляция - Bes - 05.01.2022 15:31

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

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


RE: Добавление новых городов - эмуляция - AnT - 05.01.2022 16:07

А вот к этой функции есть расшифровка с примером? Может ее как-то можно использовать совместно с !!UN:R

   
FUNCTION LoadTxt (Name: PCHAR): {n} PTxtFile; STDCALL;
Загружает txt-таблицу средствами игры.


RE: Добавление новых городов - эмуляция - Bes - 05.01.2022 16:30

AnT, а что там уже с примером, это и есть готовый пример... вешаешь этот код на нажатие кнопки любой, пишешь для !!VRz1:S^dwelling.txt^; и игра перегружает эту таблицу в память...


RE: Добавление новых городов - эмуляция - AnT - 05.01.2022 16:40

После примера - часть названий зданий стало пустым. Если менять названия зданий - то у всех строений, т.к. в модах здания на увеличение прироста будут именоваться по-разному.
Да и, к тому же, способ подмены текстовика вне игры - совсем не выход...
Image: FK1XQ.png


RE: Добавление новых городов - эмуляция - Bes - 05.01.2022 17:01

(05.01.2022 15:31)Bes Wrote:  как я понял, если использовать этот код, можно обновлять любой указанный текстовик в памяти игры
как я и сказал, не был уверен что для любого текстовика такое подходит... для DL-шаблонов идеально подходилоSorry