Мануал по моддингу игры Arcanum: Of Steamworks and Magick Obscura
Создаем новые предметы для магазинов
Новый art, pro, торговцы, магазины… От начала — до конца. Размещаем в игре все эти «чудеса».
Важное примечание: Мануал написан давно. Но… Не закончен. Логика создания предположительно правильная, но практически — она не работает не везде и не всегда. Публикация этого материала сделана по «заявкам трудящихся» для «работы над ошибками». Повторяюсь — МАНУАЛ НЕ РАБОЧИЙ. Но можно ознакомиться и высказаться на Форуме.
Пробуем реализовать интересную задачку — создать новый «генерируемые» предмет(ы) с оригинальной, новой графикой и размещаем их в игре таким образом, что б они появились на прилавках магазинов. Кроме того, попробуем создать оригинальный магазин — к примеру — ювелирную и винную лавки с ассортиментом из нами же и созданных товаров… Этапов много, пойдем по порядку.
Прорисовка графики предметов, создание art — файлов и их «прописка».
Подготовка соответствующих разработанной графике прототипов — файлов pro и их «прописка» в игру.
Создание магазина, торговца и формирование «ассортимента» товара.
Испытания.
Этап первый
Прорисовка графики предметов, создание art — файлов и их «прописка».
Графика у меня, конечно, готова заранее и даже «прописана» в моем моде. Как делать art-файлы я довольно подробно написал в мануал 1 и мануал 2. Почитайте еще разок, если подзабыли.
В данных записках я буду использовать графику предметов с рис. 1. Как я и сказал, они уже присутствуют в моде, и art-ы этих предметов присутствуют в файлах item_ground.mes, item_inven.mes, item_paper.mes и item_schematic.mes, что находятся в папке /data/art/item.
Рис. 1
Рис. 2
Но по сути, в игре есть только графика, ей можно пользоваться в редакторе. Но у предметов нет более ничего — ни имен, ни опознавательных «знаков». Как сделать art и прописать их в mes уже подробно расписано. На примере одного файла — item_inven.mes — покажу, как у меня это сделано (все предметы из категории generic, и только камни пока что):
{9191}{i_lizard_leg. ART}
{9192}{i_skeletonkey01.ART}
{9193}{DwarvenTablet. ART}
{9194}{Emerald_big.art} // большой изумруд — две оригинальные проекции
{9195}{Gem_new_01.art} //жемчужина желтая — две
{9196}{Gem_new_02.art} //топаз белый плоский камень — одна
{9197}{Gem_new_03.art} //алмаз — одна
{9198}{Gem_new_04.art} //эльфийский берилл — две
{9199}{Gem_new_05.art} //гранат красный — одна
{9200}{Gem_new_06.art} //жемчужина розовая две
{9201}{Gem_new_07.art} //жемчужина черная — две
Понятно, что с проекциями — одна — в инвентаре или в контейнере, вторая — на земле. Если «земляной» нет — то используется проекция графики игры, но прописывать ее по этим номерам все едино надо. Поясняю — вот кусок кода из item_ground.mes:
{9194}{g_emerald_big.art}
{9195}{g_Gem_new_01.art}
{9196}{g_Gem_new_02.art} // — берем art-файл от базового бриллианта, переименовываем его в g_Gem_new_02.art — и все…
{9197}{g_Gem_new_03.art} // — берем art-файл от базового бриллианта, переименовываем его в g_Gem_new_03.art
{9198}{g_Gem_new_04.art}
{9199}{g_Gem_new_05.art} // — берем art-файл от базового рубина, переименовываем его в g_Gem_new_05.art
{9200}{g_Gem_new_06.art}
{9201}{g_Gem_new_07.art}
Проекций здесь нужно всего две, ведь камней не будет в «в руках».и в item_paper.mes и item_schematic.mes ничего вносить (в данном случае)не надо. Теперь надо прописать имена и номера предметов в /data/mes/description.mes Пусть так:
{15210}{Эссенция ветра}
{15211}{Эссенция ветра Волара}
{15212}{Медицинский паук}
{15213}{Больщой изумруд}
{15214}{Жемчужина желтая}
{15215}{Топаз}
{15216}{Алмаз}
{15216}{Эдьфийский берилл}
{15217}{Гранат}
{15218}{Жемчужина розовая}
{15219}{Жемчужина черная}
Понятно, что названия можно всегда поменять…
Этап второй
Подготовка соответствующих разработанной графике прототипов — файлов pro и их «прописка» в игру.
Для начала найдем образец. У меня это будет изумруд — самый безобидный камень, он не несет нагрузки типа — жертвенный камень. Для этого — открываем файл /data/mes/description.mes и находим номер нужного предмета. В моем случае — {15200}{Изумруд}. Номер 15200. Помятуя о разнице на 20 между номерами названий и pro-файлов — определяю, что номера моих прототипов — 15220 — т. е. это файл 015220 — Generic.pro. Открываю его в hex-редакторе (неплохой hex-редактор лежит здесь на сайте — скачать WinHex 11.5 816 Кб) и сразу записываю все восемь pro как:
015233- Generic new gem1.pro
015240- Generic new gem8.pro
Все файлы сохраняем в папке прототипов /data/proto. Все остальное — имена и т. п. я уже прописал ранее. Теперь посмотрим на код и отредактируем его.
В коде разными цветами помечены разные свойства предмета. Конечно, я подразумеваю, что читатели этих строк хоть чуть-чуть (как и я сам) понимают, что такое hex и как в него пересчитать обычные и привычные нам числа и прочие мелочи. Если нет — попробую отвечать на Форуме, спрашивайте там.
Голубой цвет — номера строк.
Зеленым цветом выделены числа, отвечающие за различные имена и номера. Пояснять буду на основе Рис. 3 (изумруд), а отредактированный hex-код моего второго камня (желтая жемчужина) — на рис. 4 (большой изумруд я приберегу для нетривиальных задач, продавать-покупать в сельпо его не будут).
На строке …00020. 733B — номер прототипа (файла pro). Понятно, что это hex-код. Берете калькулятор Windows, делаете иму «инженерный» вид. Ставите галку на «Dec». Забиваете 15220 (номер вашего pro). Жмете «Hex» — видите 3B74. Искомый код. И не спрашивайте, почему мы прописываем 743B, а не 3B74. Вы ж не программист, а Кузнец. Важно, что понятен принцип — при редактировании pro меняйте цифры местами — две первые с двумя последними. Теперь должно стать понятно, что за цифирь на рис. 4 — 823B — это номер 15234 — прототипа в hex.
На строках …00130 — …0140. E015 — номер предмета в файле /data/oemes/Oname.mes и Вы уже знаете — что это. Проверим с калькулятором. Забиваем в hex 15E0, жмем Dec, имеем — 5600. Смотрим — что это — {5600}{Generic}. То — что надо. У нашего предмета такое же название и номер.
На строке …00140. 603B — номер (имя) предмета в /data/mes/description.mes. Проверим Берем опять калькулятор, жмем «Hex» и вводим 3B60, жмем «Dec» — имеем 15200 — это {15200}{Изумруд}. Напомню лишний раз, что номера pro и номер предмета отличаются на 20. В этом случае — 15234 и 15214. Соответственно, для моего ключа с номером 15234 pro, номер (имя) должно быть 15214. Переведя его в hex — забиваем (см. рис. 4) 6E3B, что будет соответствовать строчке {15214}{Жемчужина желтая}. Надеюсь, что пока все понятно.
На строке …00190. 603B — имя предмета до его идентификации — «неизвестное» имя. Номер (имя) прописаны в /data/mes/description.mes. Проверим. Для тренировки. «Hex» — 3B60 — «Dec» — 15200 — это {15200}{Изумруд}. Все верно. В новом предмете — Жемчужина желтая — я уже прописал в description.mes его номер и имя — {15214}{Жемчужина желтая}. Правим соответственно hex — вставляем 6E3B.
На строке …00190. 603B (второй раз) — описание предмета, эффектов, что он в себе несет. Прописывается в /data/mes/item_effect.mes И это именно — описание, но не сам эффект. Проверим, что там… — опускаю процесс с калькулятором, Вы уже поняли видимо… — результат — 15200 — а там и нет ничего… У меня, по крайней мере. Значит в описании — ничего и нет. А в новом предмете я пропишу что-нибудь, типа, {12063}{Ключ имеет странный зеленый цвет, металл светится изнутри…}. Редактирую hex и прописываю 6E3B.
С именами и номерами, надеюсь — разобрались.
Небольшое лирическое отступление. Конечно, у всех предметов hex выглядит весьма и всегда по разному, разное число строк. Не стоит пугаться. Так и должно быть. Ищите подобие, чуть присмотревшись к коду Вы без труда и безошибочно определите, какие элементы кода за что отвечают. Структура hex сохраняется всегда, а «исчезновение» или «добавление» строк связаны с использованием/неиспользованием им тех или иных эффектов и свойств. Особенно «убивает» вид hex высокотехнологичных предметов с массой прибамбасов и свойств. Я б не рекомендовал делать слишком «навороченные» предметы. Иногда, для поиска «точки отсчета» вычислите hex имени или прототипа и найдите это число в коде. Вот и точка входа…
Возвращаемся к коду. Желтые метки Вся цифирь, отмеченная желтым — отвечает за графику — как предмет выглядит в четырех основных видах — на «земле», в контейнере (или инвентаре), в «руках» и на схематике. Совсем подробно — по ссылке, а в общем-то — правим. В базовом варианте — изумруд — видим всего два варианта кода картинки. Меня это устраивает, земля-инвентарь.
На строке …00040. 0900 6661 — эта строчка отвечает за вид предмета «на полу»
На строке …00140. 0900 6661 — эта строчка отвечает за вид предмета «на полу»
На строке …00180. 0910 6661 — эта строчка отвечает за вид предмета в контейнере или в инвентаре
На строке …001C0. 0000 0000 — эта строчка отвечает за вид предмета в «в руках» — даже не рассматривается, в руках его не бывает — нули…
Далее — чисто эмпирические наблюдения и данные «метода научного тыка»… Поскольку — мы будем лишь переделывать предметы из готовых, присутствующих в игре, то, наверное, и этого хватит… 6661 — непосредственно номер art-файла из документов «прописки» этих файлов, конкретно — item_ground.mes, item_inven.mes, item_paper.mes и item_schematic.mes, что находятся в папке data/art/item. Номер вычисляется по «эмпирической» формуле, после перевода в десятичный вид 6661, что будет 24934. Формула такая: (24934 — 24416) / 2 + 8920 = 239. Почему она такая — потому что. Как понятно, что в ней меняются только значения 24934 и 239, остальное — константа… Сильно смахивает на подгонку задачки под ответ, но мне (лично) нужен результат, а не логика программиста… Данная формула — только для generic. Для остальных категорий — она другая, учитывайте это… Чистый эмпиризм в погоне за результатом. Как использовать. Во всех mes-файлах, отвечающих за art номера предметов одинаковы. Я делаю Жемчужину желтую. Нахожу номер art, открыв (- ранее (прямо здесь) я все уже прописал) item_inven.mes:
{9191}{i_lizard_leg. ART}
{9192}{i_skeletonkey01.ART}
{9193}{DwarvenTablet. ART}
{9194}{Emerald_big.art}
{9195}{Gem_new_01.art} //жемчужина желтая
{9196}{Gem_new_02.art}
{9197}{Gem_new_03.art}
{9198}{Gem_new_04.art}
{9199}{Gem_new_05.art}
{9200}{Gem_new_06.art}
{9201}{Gem_new_07.art}
Её номер 9195. Решаем уравнение 9195=(Х — 24416) / 2 +8920, где Х — искомое число, которое мы переведем в hex и подставим вместо 6661. Чтоб Вам не мучиться с решением задачки первого класса, да и мне — пересчет для большого кол-ва предметов идет, Х= (9195-8920)х2+24416. Получается 24966. Переводим в hex — 6186. Не забываем переставить 61 и 86 местами — при редактировании кода. Редактируем hex, подставляя в код 8661 вместо 6661 и проверяем результат. Как сразу проверить. Открываем игровой редактор — рис. 2 — жмем кнопки — item — I — Select. Находим новые предметы… У меня все ОК — рис. 2, все камни на месте…
C000, C000, C010, C020. Данные цифры отвечают за тип оружия или амуниции или что Вы еще редактируете. Как их считать — не надо их считать. Просто берем готовый номер из образца и не меняем его. Если кто посчитает — как вычислять — пришлите формулу, буду благодарен и закончу этот раздел. А пока — рекомендую поступать аналогично мне, не тратя попусту время. Если в результате проверок что-то не получается — задавайте на Форуме нашем вопросы, попробую разобраться. И (при желании) шлите мне в почту свои pro, что б не на пальцах… Не забывайте «чистить» папку map при проверках и пробах — при запуске игры. Пошли далее.
Забыл о важных для этих предметов свойствах — вес, цена…
Строка …0170 02 — вес предмета, для изумруда, это 2 (фунта? Мне б такой…). Cтавлю вес — 1, а Большой изумруд пусть будет у меня 8 фунтов.
Строка …0170 6400 — стоимость предмета. Изумруд — 100 монет… Ну я везде разную стоимость повешу. Пусть моя желтая жемчужина стоит 130 — в hex это — 0082, забиваю в скрипт 8200. И редактирую остальные каменья по цене. Ну и все.
Я вместе с Вами сделал 8 новых генеренных (псевдо) предметов — камней и прописал их в игру. Их теперь не надо создавать каждый раз, они «прошиты» и, как бы «генерятся» движком игры. Теперь достаточно указать их номера — там где нам надо — и они появятся. Поймем — а где нам надо. В магазине, к примеру. А можем — раскидать их и по всем сундукам в Arcanum, где они будут возникать случайным образом. Но меня интересовало — именно новый магазин, ювелирный — камни и украшения, предметы роскоши. Займемся.
Создание продавца и магазина, нового совсем, торгующего сугубо предметами роскоши.
Вопрос специфичный, но я его расскажу здесь, что б новый мануал не открывать. Поскольку товар и перечень товара — новые, создаем его с нуля. Открываем два файла, отвечающие за ассортимент продаваемых-покупаемых товаров. Это /data/Rules/InvenSource.mes и /data/Rules/InvenSourceBuy.mes. Первый — это список типов торговцев и чем торгуют, второй — тот же список и что покупают. Все просто. Придумаем название торговцу и пропишем его в конец списка с очередным порядковым номером. Получится так:…
На этом всё и закончилось. При испытаниях — ничего не заработало… Позже, на Форуме обсуждался вопрос — Почему? и с некоторыми выводами можно там ознакомиться. Причина ошибки выяснена, поставленная задача — не решаема «в лоб», найдены обходные пути. Если кому интересно — читайте Форум.