Здесь я рассказываю о том, как создавать свои моды в Diablo 2: Lord of Destruction
12 постов | 71 комментариев | 2 участников
Все подряд | 2+ | 5+ | 10+ | Лучшие
Создание новых монстров с новым токеном, основы анимации
Анимация персонажей, монстров и НПС находится в файлах формата .dcc. Вся анимация монстров находится в папке Monsters. Каждая папка имеет название, которое соответствует названию Токена или Кода монстра (этот код можно найти в файле monstats.txt в колонке CODE). Например, токен фаллена это «fa». Внутри папки с именем токена, лежат еще папки с названиями части тел (hd – head, tr – torso, lh – left hand, rh – right hand, ra – right arm, la – left arm, lg – legs, sh – shield, s1 – first overlay). Если вы загляните, например, в папку таких монстров как Corrupted Rogues то увидите что их «ra» и «la» анимации содержат различные типы оружия. Таким образом, игра генерирует разновидности монстров, с разным оружием, доспехами шлемами и тд. Но не все монстры состоят из разных частей, некоторые состоят из только одной. Поэтому, с этого момента мы будем разделять два понятия: много-компонентные (multi-part) и одно-компонентные (one-part). Также в папке монстра есть папка cof, где лежат контрольные файлы анимации. Очень важно указывать правильное название файлов, потому что от этого зависит все. Рассмотрим пример опять таки на Фалленах.
Fatrlita1hth.dcc – это название одного из файлов анимации. За что же он отвечает? Если разбить название на части мы увидим: Fa – это название токена Фаллена, tr – указывает что это Тело (Torso), lit – значит Легкий вариант брони (light), a1 – указывает тип анимации (Атака 1), hth – указывает класс оружия (hth – hand to hand, то есть ручной бой). Что мы должны помнить всегда? Что, создавая новых монстров мы будем использовать только часть тела “tr”, только класс брони “lit” и только класс оружия “hth”. Потому что на самом деле не важно, что у нашего нового монстра будет в руках топор или меч, мы сейчас говорим о коде игры, а не о то, что изображено на анимации. Теперь пару слов про .cof файлы. Это контрольные файлы, которые указывают игре, сколько кадров есть в .dcc файлах, сколько направлений у юнита, какой кадр является действием и тд. Название .cof файлов должно состоять из токена монстра, типа анимации и класса оружия (FAA1HTH.cof).
В Diablo 2, монстры имеют 8 направлений. Направления нужно указывать только в таком порядке как на картинке. В каждом направлении должно быть одинаковое количество кадров.
Подготовка .gif анимации и создание .dcc анимации
Допустим у вас уже есть кадры из которых можно создать гифку подходящую для конвертации в Д2. Но этого мало. Нужно еще обработать эти кадры и подготовить гифку для конвертации в .dcc. Для этого вам понадобиться Gamani Gif Movie Gear. Первое что надо это сделать фон прозрачным. Нажимаем Frame > Global Properties ставим галочку возле слова Transparent и назначаем фоновый цвет прозрачным. Далее внизу надо установить Restore to background. Переходим на следующую вкладку Animation и нажимаем на кнопку возле GIF Bk Color – это цвет фона гифки. Здесь необходимо назначить тот же цвет, который мы сделали прозрачным. Теперь нажмите на кнопку Edit возле слов Global Palette и посмотрите на коды красок – здесь наша задача избавиться от красок с кодом 0,1,2 и 3, потому что игра их не читает. Все просто – если увидите где-то 0,1,2 или 3, просто поменяйте его на 4. От этого цвет не изменится, но будет читаться игрой. И последний штрих, надо продублировать первый кадр. Просто скопируйте первый кадр и вставьте его перед вторым (правая кнопка мышки > Paste before). Если все сделали, нажимаем File > Save Gif animation as…, укажите имя, типа файла .Gif и стиль Animation.
Когда гифка готова, можно конвертировать ее в .dcc. Для этого нам надо программку CV5. Откройте программу, найдите свою гифку, установите Frame from = 1, и нажимайте Save. Выберите тип файла .dcc и укажите имя. Перед вами откроется DCC save settings.
Сверху указываем, что у нашего монстра 8 направлений, а внизу надо поставить палитру Units. А теперь самое сложное и самое главное – это могучие Офсеты. Офсеты нужно вводить со знаком минус «-». Картинка с боку позволяет нам подобрать правильные офсеты на глаз. Чтобы понять какие-именно офсеты вводить вот несколько советов:
С помощью CV5 откройте .dcc файлы монстров из Д2 и пересохраните их как .dcc. Вы увидите, как расположены офсеты у стандартных мобов. Не смотрите на числа – смотрите на место, где линии пересекаются.
Почти всегда место пересечения линий – это возле ног юнита.
Включите 3д мышление – моб крутится вокруг одной точки. Эта точка и есть ваша цель. Эта точка, где у Паладина стоит Аура. Вы можете назначить своему мобу Ауру в игре, чтобы сразу увидеть правильно ли вы ввели офсеты. После нескольких попыток вы сможете вводить более-менее правильные офсеты.
Создание .cof файлов
Для создания .cof файла нам понадобится Сof Editor. У этой программы нет интерфейса поэтому придется работать в DOS’е. Для начала откроем файл new.cof.ini и разберемся с функциями:
- dcc_file = здесь нужно указать имя .dcc файла из которого мы делаем .cof. Файл должен лежать в папке программы
- cof_token = это Токен или Код анимации (мы уже обсуждали это выше)
- cof_mode = тип анимации (ходьба, бег и тд.)
- cof_class = класс оружия (у нас будет всегда HTH)
- nb_layers = количество слоев анимации (у нас будет всегда 1)
- xmin = -512, xmax = 512, ymin = -512, ymax = 512 – всегда должно быть так
- trigger_value = является ли данный тип анимации действием (атака или каст). 0=нет, 1=да
- trigger_frame = кадр, в котором происходит действие (вводим номер кадра)
- layer_order = порядок слоев. У нас всегда = 01
И дальше все оставляем как есть:
- layer_composit_01 = 01
- transparency_01 = NO
- layer_class_01 = hth
Теперь открываем DOS и прописываем путь к программе. Когда оказались в папке с файлом .exe, прописываем команду cofedit.exe –generate new.cof.ini
Таким образом, вы создали файл .cof. Перенесите его в папку «cof» своего нового монстра.
Работа с файлом Animdata.d2
Файл Animdata.d2 хранит в себе всю информацию об анимации в игре. Сам файл находится в папке data\global. Для его модификации нам надо скачать программку Animdata_edit_v2.1. Скачайте и скопируйте содержимое в любую папку. Запустите файл Extract.bat. У вас появится файл AnimData.txt. Этот файл нам и надо модифицировать. В этом гайде мы учимся создавать новых монстров с новыми токенами, поэтому мы не будем модифицировать уже существующую информацию, а будем добавлять новую. Теперь рассмотрим, что означают названия колонок:
CofName – надо указать, как называется ваш Cof файл.
FramesPerDirection – количество кадров в одном направлении.
AnimationSpeed – скорость анимации.
FrameData000-FrameData143 – это инфомация о кадрах. Помните мы говорили про кадр, в котором происходит действие? Если данный Cof файл является действием (атака или каст), нужно указать в каком кадре происходит действие. Если при создании Cof файла вы указали что действие происходит, например, в кадре 8, то здесь найдите колонку FrameData008 и поставьте там «1». Все остальное должно быть «0». Нельзя ставить единицы в файлах, где действие не происходит, и нельзя ставить единицы в двух кадрах. Если закончили, сохраняйте файл, и запустите файл Pack.bat в папке с программой. Теперь найдите файл AnimData.d2 в той же папке и скопируйте его с заменой в data\global. Все, вы создали новый токен для монстра.
Есть еще одна полезная программка COFTXT, которая извлекает информацию из ваших Cof файлов и генерирует строки для файла AnimData.txt. Я ней не особо пользуюсь, но полезно ее иметь при себе и знать, как она работает.
Создание нового монстра в monstats.txt и monstats2.txt
Откроем monstats.txt и создадим новую строку внизу. Всегда лучше копировать какую-нибудь строку из уже готовых и вставить внизу. Здесь главное указать в колонке Code токен вашего нового монстра. Функции остальных строк можно найти в полном описании файла monstats.txt, но пару советов все же дам.
- Название в колонке MonStatsEx всегда должно соответствовать названию в файле monstats2.txt;
- Не забудьте выбрать подходящий AI для своего монстра, здесь можно много эксперементировать;
- В колонке enabled всегда ставьте 1;
Теперь откройте monstats2.txt. Id должно соответствовать имени в колонке MonStatsEx в файле monstats.txt. Скопируйте первую строку и вставьте внизу как новую. Нас интересуют только следующие колонки:
MeleeRng – дистанция, из которой монстр сможет вас атаковать;
TRv = «lit» (остальные пустые)
TR = 1 (остальные пустые)
TotalPieces =1
Колонки mDT mNU mWL mGH mA1 mA2 mBL mSC mS1 mS2 mS3 mS4 mDD mKB mSQ mRN – это типы анимации вашего монстра. Я же не знаю, сколько их у вас будет. Если например, у вашего монстра есть анимация ходьбы, то поставьте «1» в колонке mWL. И так далее.
Restore – всегда «1»!!! (О, Боже, сколько проблем мне доставила эта колонка).
isSel – позволяет навести на монстра мышкой.
corpseSel – позволяет навести на труп мышкой.
isAtt – позволяет атаковать.
Revive – позволяет оживить.
Если все готово, откройте файл levels.txt, найдите строку Act 1 - Wilderness 1, найдите колонки mon1-25 и вставьте здесь имя своего нового монстра. Он должен появиться на Кровавом Болоте. Пойдите, посмотрите что получилось.
P.S.
В данном архиве вы сможете найти кадры анимации юнита из игры Златогорье 2. Вы можете испольовать их чтобы потренироваться использовать советы в гайде на практике.
Список статей
Здесь находятся актуальные руководства по созданию своих модов для Diablo 2, написанные в 2015-2018 годах человеком, который сам увлекается моддингом и делает свой мод.
Гайды
- Создание Модов для Diablo 2, Часть 1
- Создание Модов для Diablo 2, Часть 2
- Как призывать всех големов Некроманта одновременно
Статьи
- Лимиты TXT-файлов
- Полное описание файла Monstats.txt
- Полное описание Weapons.txt
- Полное описание Armor.txt
- Полное описание Misc.txt
- Создание новых монстров с новым токеном, основы анимации
- Основы редактирования навыков
- Создание новых пассивных навыков
- Продвинутая информация о формате .DT1
Руководства-рисунки
Автор: Zelibobo
Полное описание Misc.txt
О том, что такое txt-файлы и как с ними работать читайте в первом и втором гайде по созданию своих модов для Diablo 2. Файл Misc.txt отвечает за свойства и параметры всех предметов, кроме оружия и брони.
- Name: просто имя, не влияет ни на что
- szFlavortext: не известно
- Compactsave: 1=использовать, 0=нет. Это используется для получения меньшего размера сэйвфайла. Эта функция не будет сохранять статы на предмете, такие как количество, префиксы, суфиксы, урон, броню, прочность и тд. Это используется для предметов что не имеют статов, типа баночки, камни
- Version: 0=классика, 100=ЛОД
- Level: базовый уровень предмета
- Levelreq: необходимый уровень для использования предмета
- Rarity: 0=убрать этот предмет из стойки с броней. 1 и выше= частота выпадения предмета из стойки с броней. Хотя бы один предмет должен иметь здесь 1 или игра вылетит
- Spawnable: 1=продается в НПС; 0=не продается в НПС
- Nodurability: 1=неуничтожимая; 0=использовать прочность
- Gamble cost: используется только амулетами и кольцами
- Code: трёхзначное слово/число, которое должно быть уникальное для каждого предмета
- Alternategfx: это код файла DCC предмета для анимации персонажа
- Namestr: это код для .tbl файла, в котором вы указываете название предмета в игре
- Component: это означает какой слой анимации использовать из файла composit.txt чтобы показать предмет на персонаже
Часть брони | Номер |
Head | HD #00 |
Torso | TR #01 |
Legs | LG #02 |
RightArm | RA #03 |
LeftArm | LA #04 |
RightHand | RH #05 |
LeftHand | LH #06 |
Shield | SH #07 |
Special1 | S1 #08 |
Special2 | S2 #09 |
Special3 | S3 #10 |
Special4 | S4 #11 |
Special5 | S5 #12 |
Special6 | S6 #13 |
Special7 | S7 #14 |
Special8 | S8 #15 |
- Invwidth: ширина в клетках инвентаря
- Invheight: высота в клетках инвентаря
- Hasinv: 1=может иметь дырки, 0 не может иметь дырки (в файле itemtypes.txt нужно поставить хотя бы 1 в строках maxsock1/25/40)
- Gemsockets: максимальное количесто сокетов
- Gemapplytype: эффект камня 0=оружие; 1=броня, шлем; 2= щит
- Flippyfile: файл анимации когда предмет падает на землю
- Invfile: файл изображения предмета в инвентаре
- Uniqueinvfile: файл изображения уникльного предмета в инвентаре
- Special: не используется
- Transmogrify: позволяет нажимать на предмет право кнопкой мыши, чтобы превратить в другой предмет
- TMogType: код предмета в который мы хотим превратить наш базовый предмет
- TMogMin: минимальное количество предметов которые появляются при Transmogrify
- TMogMax: максимальное количество предметов которые появляются при Transmogrify
- Useable: 0=нельзя активировать правым щелчок; 1=можно
- Throwable: можно ли бросать предмет 1=да; 0=нет
- Type: первый базовый тип (код из itemtypes.txt)
- Type2: второй базовый тип (код из itemtypes.txt)
- Dropsound: звук предмета когда он падает
- Dropfxrame: количество кадров которое звук длится
- Usesound: звук когда используется предмет
- Unique: 1=всегда уникальный; 0=не всегда уникальный (используется квестовыми предметами)
- Transparent: неизвестно
- Transtbl: всегда 5
- Lightradius: не используется
- Belt: id из файла belts.txt (количество слотов баночек)
- Autobelt: позволяет автоматически класть предмет в пояс когда вы его подбираете
- Stackable: 1-да, 0-нет. Может ли предмет иметь пачки
- Minstack: минимальное количество в пачке
- Maxstack: максимальное количество в пачке
- Spawnstack: количество когда рандомно выпадает
- Quest: ИД квеста (для квестовых вещей)
- Questdiffcheck: на какой сложности этот предмет есть квестовый
- Missiletype: какой снаряд выпустит оружие если вы его бросите (ИД из missiles.txt)
- Spellicon: какая иконка скила для этого предмета (например: иконка броска для Копей)
- pSpell: этот параметр контролирует все временные предметы. все временные зелья используют pSpell=6
- State: это параметр для эффекта Оверлэя (State и Cstate1 должны иметь одинаковый ИД из States.txt)
- Cstate1: это параметр для эффекта Оверлэя из файла States.txt
- Cstate2: это второй параметр. Вы можете добавить два разных эффекта для предмета
- Len: время действия временных предметов. Нельзя ставить 0
- Stat1: контролирует какой параметр добавить игроку
- Calc1: значение параметра
- Stat2: контролирует какой параметр добавить игроку
- Calc2: значение параметра
- Stat3: контролирует какой параметр добавить игроку
- Calc4: значение параметра
- Spelldesc: 0=не использовать описание и расчет; 1=только описание (Spelldescstr); 2=описание и расчет (Spelldescstr и Spelldesccalc)
- Spelldescstr: код вывода текста описания предмета
- Spelldesccalc: код вывода чисел расчета общего эффекта всех параметров предмета в Stat1-3
- Durwarning: иконка предупреждения когда предмет ломается
- Qntwarning: иконка предупреждения когда заканчивается аммуниция
- Nameable: 1=может быть персонализован; 0=не может
- Bettergem: (только для камней) код следующего камня в цепочке апгрейда
- Bitfield: 1 для кожаных веще; 3 для металических
- Quivered: является ли предмет пачкой аммуниции 1=да, 0=нет
- Mindam: минимальный урон (если на щитах то урон Смайтом, если на ботинках то урон Пинком)
- Maxdam: максимальный урон (если на щитах то урон Смайтом, если на ботинках то урон Пинком)
- Gemoffset: неизвестно
Функции продавцов
Везде вместо слова Vendors ставим имя продавца.
- Vendorsmin: минимальное количество данного предмета которое этот продавец может подать
- Vendorsmax: максимальное количество данного предмета которое этот продавец может подать
- Vendorsmagicmin: минимальное количество данного магического предмета которое этот продавец может подать
- Vendorsmagicmax: максимальное количество данного магического предмета которое этот продавец может подать
- Vendorsmagilvl: максимальный уровень магической вещи и статов
- PermstoreItem: всегда продавать у продавцов
- Transform: изменение цвета предмета на анимации персонажа
- Invtrans: изменение цвета предмета в инвентаре
- Skipname: пропустить базовое имя
- Nightmareupgrade: код предмета который будет продаваться вместо этого на Кошмаре; (ххх=без изменений)
- HellUpgrade: код предмета который будет продаваться вместо этого на Аду; (ххх=без изменений)
Создание новых пассивных навыков
Нам понадобятся следующие файлы:
Skills.txt
Skilldesc.txt
States.txt
String.tbl
Сначала надо создать сам навык. Для этого урока мы создадим Паладину навык, который будет давать ему «crushing blow». Назовем этот навык просто - Crush.
Открываем skills.txt, ищем строку 147 (навык «Iron Skin»), копируем целую строку, и вставляем как новую в самом низу файла.
Изменяем поля skill, skilldesc и passivestate на что хотите, в нашем случае - Crush. Очень важно помнить, что то у вас записано в этих полях должно соответствовать и в других файлах – код в поле skilldesc должен соответствовать коду в файле skilldesc.txt, а поле passivestate должно соответствовать коду в файле states.txt.
Измените Id на следующий номер по списку, а в поле charclass укажите, кто будет использовать скил.
Коды персонажей:
ama -> Amazon
ass -> Assassin
bar -> Barbarian
dru -> Druid
nec -> Necromancer
pal -> Paladin
sor -> Sorceress
Идем дальше к полю passivestat1, где мы указываем, на что именно влияет навык. Эти коды находятся в файле Properties.txt в колонке stat1, и они отличаются от кодов, которые мы используем для статов в вещах. Колонки stat отсылаются на itemstatcost.txt, и для некоторых бонусов, напиример «+ ко всем резистам (res-all)» требуется больше чем один пассивный passivestat. Если взглянуть на навык Варвара Natural Resistance, который дает бонусы ко всем резистам, мы увидим, что у него заняты четыре из пяти возможный слотов passivestat, и у каждого стата применяестя одинаковый расчет (более детально дальше).
passivestat1 -> poisonresist
passivecalc1 -> dm12
passivestat2 -> fireresist
passivecalc2 -> dm12
passivestat3 -> coldresist
passivecalc3 -> dm12
passivestat4 -> lightresist
passivecalc4 -> dm12
Итак, здесь мы пропишем item_crushingblow
Далее, в колонке passivecalc1 нам надо указать, как бонус будет рассчитываться с каждым уровнем.
Два самых простых способа, которых можно здесь использовать это ln12 и dm12. Есть и другие более сложные расчеты (их можно найти в файле skillcalc.txt), и вы можете создавать свои собственные формулы. Также здесь можно указывать просто число (например «20») если ваш навык имеет один уровень (как у меня в моде).
Когда вы используете расчет ln12, то в колонке param1 вы задаете начальный бонус на первом уровне навыка, а в param2 число на которое будет повышаться бонус на каждом уровне. То есть, одинаковый бонус на каждом уровне. Это выглядит так:
lv 1 - 10% Crushing Blow
lv 2 - 12% Crushing Blow
lv 3 - 14% Crushing Blow
Когда вы используете расчет « dm12 », то в колонке param1 вы задаете начальный бонус на первом уровне, а в param2 максимальное число бонуса, к которому навык может дойти. При таком расчете на первых уровнях бонусы будут большие, а потому немного будут уменьшаться.
lv 1 - 10% Crushing Blow
lv 2 - 18% Crushing Blow
lv 3 - 22% Crushing Blow
lv 4 - 23% Crushing Blow
Далее, идем к колонке reqlevel, и указываем требования уровня персонажа для использования навыка. Рядом, колонка maxlvl указывает на максимальный уровень навыка.
Теперь ищем колонку Param1, о которой я вспоминал раньше, и ставим число, которое желаем назначить начальным бонусом навыка. Param1 Description просто поле для комментариев. В колонке Param2 ставим число, на которое повышается наш навык (если мы используем ln12), или максимальное число к которому навык моет дойти (если мы используем dm12).
Мы закончили с skills.txt, сохраняем и закрываем.
Теперь нам надо сделать стэйт («state»).
Открываем States.txt, просто добавляем внизу новую строку и в поле state укажите название которые вы написали в поле passivestate в файле skills.txt. У меня это Crush. Не забудьте поставить «0» в конце, в колонке Eol.
Сохраняем и выходим.
Открываем skilldesc.txt.
Копируем строку Ironskin и вставляем внизу, переименовываем на то, что вы указали в поле skilldesc в файле skills.txt. У меня это Crush.
Колонка «Skillpage» решает, на какой странице навыков будет находиться навык (1, 2 или 3). Счет идет снизу, то есть нижняя страница это первая.
Колонка Skillrow решает, в каком ряду будет навык. Всего есть 6 рядов.
Далее, Skillcolumn решает в какой колонке будет навык: в правой (1), по центру (2), или в левой (3).
ListRow не имеет значения для пасивок, потому что мы их не можем выбрать в панели быстрого выбора навыков.
IconCel это число картинки для навыка. Можно использовать классические иконки, а можно и добавлять свои с помощью DC6 Creator.
Четыре клонки Str name, Str short, str long и str alt это описания навыков. Здесь нужно ввести коды с учитыванием последнего числа (то есть если в последнем навыке стоит Skillname281, мы пишем Skillname282). И так для всех четырех колонок.
Str name это само название навыка. Str short это краткое описание навыка, когда мы наводим на него в быстрой панели. Str long это длинное описание навыка в дереве. Str alt это название навыка на экране персонажа. Помните, что здесь мы вводим только коды, а сам текст будем вводить позже в .tbl файлах.
Двигаемся дальше, к колонке descline1. Здесь надо указать код, как именно игра будет отображать текстовую информацию. Этих кодов всего 75! В следующих гайдах я расскажу про них более детально. Пока поставьте здесь 2.
В ячейке desctextb1 мы пишем код-строку символа, который игра показывает после числа. Здесь пишем StrSkill23 – этот код выводит в игре символ процентов «%».
В ячейке desctexta1 мы пишем код-строку характеристики (я создам свою, но можно использовать и уже существующие). Я напишу здесь «crush», чтобы потом добавить эту код-строку в .tbl файл.
В ячейке desccalca1 пишем то же что и в ячейке Passivecalc1 в skills.txt.
Текст, который выводится в игре:
+25% Crushing blow
+25 | % | Crushing blow |
Формула в desccalca1 | «StrSkill23» код в desctextb1 | «Crush» код в desctexta1 |
Сохраняем и выходим.
Теперь время заняться кодами-строками. Откройте string.tbl и добавьте следующие коды-сроки и их описания.
Код | Описание |
str name | Название вашего навыка |
str short | Краткое описание вашего навыка |
str long | Длинное описание вашего навыка |
str alt | Название вашего навыка |
Crush (код из desctexta1) | Crushing blow (с пробелом после слова) |
Вот что получилось у меня в результате:
Помните, что у всех персонажей должно быть одинаковое количество навыков, иначе будет работать только тот у которого наибольше.
Архив с готовыми файлами Skills.txt, Skilldesc.txt, States.txt, String.tbl из данного руководства.
Создание Модов для Diablo 2, Часть 1
Привет. Меня зовут JetaMan и в этой статье я попытаюсь рассказать вам про основные программы, которые используются в создании модов для Diablo 2. Нормальных статей на эту тему нет на русском языке, а те, что есть уже давно не актуальны. Это мой первый гайд поэтому он будет постоянно редактироваться, и будет добавляться новая информация. Итак начнем.
Создание Модов для Diablo 2
Часть 1
В прошлом, для того чтобы внести изменения в игру модмейкерам приходилось извлекать файлы из архивов, изменять их по своему усмотрению, а потом запихать снова в архив. Потом умные люди придумали команды –direct –txt, с помощью которых игра читала файлы не с архива, а с самих txt файлов в папке с игрой. Но это тоже было не очень удобно, так как не все знали, где и как правильно их прописывать. Сегодня я вам расскажу, как легко начать создавать мод, без выше перечислимых сложностей.
D2SE Modmanager v2.2.0
Для начала скачайте программу D2SE Modmanager v2.2.0. Это наш основной инструмент, через который мы получаем доступ к оригинальному Diablo 2, чужим модам и к своему моду одновременно. Я думаю уже многие слышали про эту программу по этому не буду рассказывать как она работает (если не знаете – вам сюда). Скачиваем программу и устанавливаем. Далее переходим по этой ссылке и скачиваем архив. В архиве есть папка под названием “MyMod”. Эту папку кидаем в папку MODS, в каталоге с игрой. Что в папке? Это плагин, который работает, так же как и остальные моды в D2SE Modmanager. Это чистые, не измененные .txt и .tbl файлы, которые находятся в папке DATA\Global\Excel. Когда вы запустите D2SE Modmanager и увидите синюю иконку “MyMod” это означает что вы все сделали правильно.
В правом нижнем угле вы видите две строчки:
Это как раз и есть те самые команды –direct –txt но уже встроены в плагин. Первая команда –direct позволяет сначала считывать информацию с папки DATA а потом уже с архивов .mpq.
Вторя команда создает .bin файлы из .txt файлов при запуске игры.
Чтобы запустить плагин нажмите Start Plugin в правом верхнем углу.
Вот и все. Вы можете спокойно изменять .txt и .tbl файлы и сразу видеть изменения в игре.
Редактор .txt файлов
Итак, мы получили возможность работать с .txt файлами. Здесь хранятся наиболее редактируемые данные игры. Ни в коем случае не открывайте эти файлы в блокноте, потому что вы рискуете повредить информацию. Существует немало разных программ, которые вы можете использовать для работы с .txt файлами. Я расскажу несколько слов о той программе, которую использую я, а ниже перейдя по ссылке, вы можете посмотреть на другие программы и выбрать, что вам нравится больше.
Я использую программу AFJ Sheet Edit 0.61b.
Преимущества:
- все .txt файлы в одном у нас в одном окне;
- есть очень удобные функции «Зафиксировать первую строку» и «Зафиксировать первый столбец»;
- есть поиск если вам надо быстро найти конкретную ячейку среди большого количества текста;
- в опциях можно изменить размер ячеек, шрифта и сам шрифт;
- автоматически делает резервную копию ваших .txt файлов (регулируется в опциях);
Если когда вы открываете .txt файл все ячейки появляются с минимальным размером, просто в опциях поставьте «Resize Column On Load», и при запуске ячейки будут нормального размера.
Здесь вы можете ознакомиться с другими редакторами.
Запаковка/Распаковка файлов. Программы предназначены для работы с MPQ архивами
У нас уже имеются распакованные txt и .tbl файлы, но в .mpq архивах все еще содержатся файлы, которые могут нам понадобится в работе, например файлы карт, тайлсэтов, анимация, звуковые эффекты и тд. Лично я использовал MPQView, но опять-таки вы можете выбрать себе по вкусу любую другу. Для того чтобы программа смогла найти и распаковать файлы вам надо иметь List File или другими словами Data File, который указывает где лежат нужные нам файлы. Сначала запустите программу, нажмите Open Data File и выберите Data File который вы скачали, после этого нажмите Open Archive и выберите тот архив, который хотите распаковать.
Все Data File'ы и другие программы для распаковки mpq архивов – здесь.
Также к слову, в MPQView есть полезная фича в правом нижнем углу – это фильтр форматов файлов. Если вам нужно распаковать не все а некоторые конкретные файлы выберите формат который вам нужен и программа выдаст файлы только с этим форматом.
Редактирование строк (Strings)
Работая с .txt файлами вы можете обратить внимание, что очень часто там присутствует слово “strings” или сокращенно “str”. Это коды, которые передают информацию в .tbl файлы которые используются игрой для вывода текста. Здесь находятся тексты NPC, тексты квестов, названия уровней, предметов, название скилов и их описание, короче весь весь текст который мы видим в игре. Это надо помнить, когда вы работаете с .txt файлами. Тxt файлы не выводят текст в игре – это делают .tbl файлы, которые находятся в data\local\LNG\ENG\. Для работы я использую AFJ Table Edit 1.11u. Вы можете посмотреть на другие программы за этой ссылкой. Работа с .tbl файлами довольно проста и не требует больших усилий. В левом окошке расположены коды, а в правом – текст который они выдают. Нажмите «+» чтобы добавить код, «-» чтобы удалить код. Когда вы добавляете код, в большом окне вводите текст, который надо отобразить в игре.
На этом первая часть закончена. Работая с .TXT и .TBL файлами можно добиться огромных результатов. Даже великий Brother Laz, автор, по моему мнению, лучшего мода Median XL, почти все свои идеи воплотил именно так. Пожалуйста, пишите в комментариях, что бы вы хотели увидеть в последующих гайдах.
Лимиты TXT-файлов
- Armor.txt – 1024 строк
- Misc.txt – 32768 строк
- Weapons.txt – 1024 строк
Эти три файла есть частями одного большого файла, который генерируется при запуске игры. Сума строк всех трёх файлов не должна превышать 65536 строк (но на всякий случай не превышайте 32768)
- Automagic.txt – примерно 4096 строк
- Itemstatcost.txt – 512 строк
- Gems.txt – 256 строк
- Itemtypes.txt – 65536 строк
- Levels.txt – 133 строки (можно увеличить с помощью плагинов)
- Lvlprest.txt – 1091 строка (в версиях 1.11+ лимит 32767 строк) (также можно увеличить с помощью плагинов)
- Magicprefix.txt – 2048 строк
- Magicsuffix.txt – 2048 строк
- Missiles.txt – скорее всего 32768 строк
- Monprop.txt – скорее всего 32768 строк
- Monstats.txt – 32768 строк
- Monstats2.txt – скорее всего 32768 строк
- Objects.txt – 574 строки (также можно увеличить с помощью плагинов)
- objType.txt – 574 строки (также можно увеличить с помощью плагинов)
- rareprefix.txt – 256 строк
- raresuffix.txt – 256 строк
- runes.txt – 4096 строк
- setitems.txt – 32768 строк
- sets.txt – 4096 строк
- skills.txt – 32768 строк
- skilldesc.txt – 32768 строк
- states.txt – 256 строк
- superuniques.txt – 512 строк
- uniqueitems.txt – 4096 строк
Создание Модов для Diablo 2, Часть 2
В предыдущем гайде, мы узнали, как распаковать файлы из архивов .mpq. В этой части я расскажу, где какие файлы лежат и чем их редактировать. Часть этой информации уже была опубликована в одной теме, но я решил также написать про это здесь для удобства.
- d2char.mpq – архив файлов анимации персонажей классической версий (не LOD);
- d2data.mpq – архив, содержащий текстовые файлы, изображения предметов, анимацию скилов, анимацию монстров, объекты и карты, интерфейс и шрифты;
- d2music.mpq – архив с файлами музыки и рекламных заставок Blizzard;
- d2sfx.mpq – архив содержащий звуки спецэффектов;
- d2speech.mpq – архив с файлами озвучки диалогов;
- d2video.mpq – архив с файлами видео клипов;
- d2exp.mpq – архив, содержащий все файлы для дополнения LOD;
- D2XMUSIC – архив с файлами музыки LOD;
- d2xtalk.mpq – архив с файлами озвучки диалогов LOD;
- D2XVIDEO.MPQ – архив с файлами видео клипов LOD;
Далее речь пойдет о трёх наиболее обширных сферах моддинга, это редактирование изображений, анимации и карт. Эта статья будет дольше предыдущей, потому, что здесь есть много, о чем рассказать.
DC6 Creator
Програма для просмотра и создания файлов изображений в формате .dc6
Один из первых аспектов игры, которые люди начинают изменять – это предметы. Вернее изображения предметов. Это неверное самое легкое дело в создании мода. Я использую DC6 Creator для этого. Эта программа имеет удобный интерфейс и много хороших функций. Например:
Можно легко выбрать палитру для изображения (все изображения предметов должны быть в палитре “units”)
Можно устанавливать свои офсеты (местоположение изображения в окне);
А также эта программа может открыть и разбить на кадры файлы анимации .gif, что позволяет нам… внимание… создавать анимированные предметы инвентаря!!!
Недостаток это программы в том, что она не поддерживает массовую конвертацию изображений в .dc6. Но это не есть беда, потому что для массовой конвертации есть другая программа CellConv. У нее менее удобный интерфейс, потому как надо прописывать нужные нам параметры в .ini файле.
Анимация персонажей и монстров
Программы для просмотра и редактирования файлов анимации в формате .dcc
Просматривать и извлекать файлы анимации можно программами SixDice и CV5 (скачайте также аддон для CV5). Обе программы имеют плюсы и минусы. CV5 имеет очень много багов, и вылетает почти после каждого сохранения. SixDice имеет работает стабильнее, но у нее отсутствуют некоторые функции. Я лично работаю с CV5, а SixDice мне не нравится. В общем, через CV5 можно сохранить файл в формате .gif а для работы с .gif файлами есть отличная программа Gamani Gif Movie Gear.
Когда откроете CV5, вы увидите два окна: Верхнее – это панель для работы с анимацией, а нижняя это браузер по папкам. Также в верхней панели есть отдельный раздел «Аниматор», где расположены инструменты для работы с анимацией: можно выбирать из какого кадра начать сохранять файл, скорость просмотра анимации, «Играть» и «Сохранить».
Нижняя панель как я уже сказал это браузер. Он тоже делится на две части – слева вид папок, справа кадры анимации. Выберите файл анимации в формате .gif и вы увидите все его кадры. Затем нажмите «Save» в панели «Аниматор», в появившееся окне выберите формат файла для сохранения .dcc и нажмите «Сохранить». Перед вами появится новое окно, которое называется «DCC Save Settings». Другими словами здесь нам надо выставить офсеты для правильного отображения анимации. Офсеты нужно вводить со знаком минус «-». Картинка с боку позволяет нам подобрать правильные офсеты на глаз. Внизу в графе “Trasform to Palette” можно выбрать цветовую палитру для анимации. К слову, все монстры и персонажи должны быть в палитре “Units”.
Win_Ds1_Edit
Программа для просмотра и редактирования карт в формате .ds1
Установка
Для редактирования карт у нас имеется несколько программ, но я расскажу только об одной, по моему мнению, лучшей из всех, так как остальные уже устарели. Она называется win_ds1edit. Для полноценной и удобной работы нам надо скачать два архива – саму программу и GUI интерфейс для нее. Скачайте все и скиньте в одну папку. Запускается программа через ds1edit_loader.exe. Когда вы ее запустите вам скажут что программа не настроена и предложат настроить вручную. Нам нужно настроить загрузчик (loader) и редактор (editor). Если вы настройку пропустили, можно потом еще раз запустить через Options -> Configure Loader и Configure Editor. В окне Configure Editor вам нужно указать папки, где хранятся архивы .mpq (d2char.mpq, d2data.mpq, d2exp.mpq) а в графе Patch_D2 укажите путь на файл на Patch_D2.mpq вашего мода. Графа Mod_dir это путь к вашей папке с модом. Во вкладке Screen можно включить или выключить полный экран. И очень важно – в графе Depth установите 32, это глубина цвета. Если оставить как есть, картинка будет искажена. Также, в вкладке Misc поставьте галочку в графе Allow type 2 objects of higher acts – это позволит вам использовать объекты из высших актов (например из Пятого в Первом), потому что по умолчанию это запрещено.
Далее, нам нужно настроить Загрузчик (loader). Нажмите Options -> Configure Loader. В открывшемся окне вам нужно указать путь к файлу редактора.
Теперь нажмите Options -> Register Extension. Эта функция позволяет ассоциировать .ds1 файлы с этой программой и сразу открывать их в редакторе.
Работа с программой
Запуск
Запускать программу можно с файла .exe в папке или двойным нажатием на файл .ds1.
Добавить или Удалить файлы в списке
Вы можете использовать функцию File -> Add или перетащить файл в список вручную. Также ели в списке уже имеется одна карта, двойное нажатие на другой файл автоматически добавит второй файл в список к первому. Если несколько карт имеют одинаковое имя, откроется окно, где вам предложат выбор. Чтобы удалить карты из списка выделите файл или файлы, которые желаете удалить и нажмите File -> Remove.
Параметры редактора
Ели выберите View -> Show Parameters вы увидите список дополнительных параметров запуска для редактора.
- Resize – изменить размер карты; Работают числа 1-255 (желательно не использовать никакие другие способы измена размера, этот самый надёжный);
- Force DT1 – активация данного параметра заставляет редактор загружать .dt1 файлы из списка, который можно изменять нажав кнопку. Configure .dt1 List. Максимум файлов в списке – 32;
- Force Palette – активация данного параметра заставляет редактор использовать цветовую палитру из Акта указанного в ячейке ниже;
- Don’t check act – этот параметр позволяет редактору не проверять одинаковые ли номера Актов в самом файле .ds1 и в Lvltypes.txt;
- Auto-Detect LvlPrest Def – активация данного параметра заставляет редактор самостоятельно искать число LvlPrest Def, в файле LvlPrest.txt.
Список всех карт, которые Редактор может открыть находится в файле maplist.txt в папке с редактором. Чтобы добавить новые карты в список нажмите Settings -> Configure Loader и потом внизу увидите кнопки Add/Modify/Duplicate/Remove. Нажмите Add чтобы начать процесс добавления новой карты, Modify для изменения данных в уже существующем файле.
Нужно заполнить следующие поля:
- File: название файла целиком с расширением
- Name: Название файла которые вы хотите дать
- Path: путь к файлу
- LvlType Id: Номер Id вашей карты в файле Lvltypes.txt
- LvlPrest Def: Число LvlPrest Def вашей карты в файле LvlPrest.txt
- Comment: Чисто комментарий – не обязательно
Для запуска редактора нажмите File -> Run
Полное описание Armor.txt
О том, что такое txt-файлы и как с ними работать читайте в первом и втором гайде по созданию своих модов для Diablo 2. Armor.txt отвечает за все параметры и свойства брони.
- Name: просто имя, не влияет ни на что
- Version: 0=классика, 100=ЛОД
- Compactsave: 1=использовать, 0=нет. Это используется для получения меньшего размера сэйвфайла. Эта функция не будет сохранять статы на предмете, такие как количество, префиксы, суфиксы, урон, броню, прочность и тд. Это используется для предметов что не имеют статов, типа баночки, камни
- Rarity: 0=убрать этот предмет из стойки с броней. 1 и выше= частота выпадения предмета из стойки с броней. Хотя бы один предмет должен иметь здесь 1 или игра вылетит
- Spawnable: 1=продается в НПС; 0=не продается в НПС
- Minac: минимальный класс брони который предмет может иметь
- Maxac: максимальный класс брони который предмет может иметь
- Speed: позитивные числа=медленная скорость ходьбы; негативные числа= быстрая скорость ходьбы
- Reqstr: необходимая сила для одевания предмета
- Levelreq: необходимый уровень для одевания предмета
- Block: вероятность блока в %
- Durability: базовая прочность (255 макс)
- Nodurability: 1=неуничтожимая; 0=использовать прочность
- Durwarning: количество прочности, когда появляется иконка предупреждения
- Cost: базовая цена
- Gamble cost: не исползуется
- Code: трёхзначное слово/число, которое должно быть уникальное для каждого предмета
- Namestr: это код для .tbl файла, в котором вы указываете название предмета в игре
- Normcode: код нормального предмета
- Ubercode: код исключительного предмета
- Ultracode: код элитного предмета
- Level: базовый уровень предмета
- Magiclvl: дополнительный магический уровень когда находишь предмет (Пример: если поставить 10, то при гембле на 10 уровне вы можете получить предмет со статами 20 уровня)
- Autoprefix: номер группы из automagic.txt
- Alternategfx: это код файла DCC предмета для анимации персонажа
- Component: это означает какой слой анимации использовать из файла composit.txt чтобы показать предмет на персонаже
Часть брони | Номер |
Head | HD #00 |
Torso | TR #01 |
Legs | LG #02 |
RightArm | RA #03 |
LeftArm | LA #04 |
RightHand | RH #05 |
LeftHand | LH #06 |
Shield | SH #07 |
Special1 | S1 #08 |
Special2 | S2 #09 |
Special3 | S3 #10 |
Special4 | S4 #11 |
Special5 | S5 #12 |
Special6 | S6 #13 |
Special7 | S7 #14 |
Special8 | S8 #15 |
- rArm, lArm, Torso, Legs, rSPad, lSPad: композиция брони. rArm=правая рука, lArm=левая рука, Torso=тело, Legs=ноги, rSPad=правое плечо, lSPad=левое плечо. Каждый компонент имеет три варианта: 0=Light, 1=Medium, 2=Heavy. Когда вы одеваете броню, игра рисует комбинацию компонентов, которую вы выставите. Например, Quilted armor имеет rSPad и lSPad =1. Это значит, что когда вы одеваете эту броню, все останется как есть кроме, наплечников, которые станут вариантом Medium
- Flippyfile: файл анимации когда предмет падает на землю
- Invfile: файл изображения предмета в инвентаре
- Uniqueinvfile: файл изображения уникльного предмета в инвентаре
- Setinvfile: файл изображения сэтового предмета в инвентаре
- Invwidth: ширина в клетках инвентаря
- Invheight: высота в клетках инвентаря
- Hasinv: 1=может иметь дырки, 0 не может иметь дырки (в файле itemtypes.txt нужно поставить хотя бы 1 в строках maxsock1/25/40)
- Gemsockets: максимальное количесто сокетов
- Gemapplytype: эффект камня 0=оружие; 1=броня, шлем; 2= щит
- Useable: 0=нельзя активировать правым щелчок; 1=можно
- Missiletype: какой снаряд выпустит оружие если вы его бросите (ИД из missiles.txt)
- Stackable: 1-да, 0-нет. Может ли предмет иметь пачки
- Minstack: минимальное количество в пачке
- Maxstack: максимальное количество в пачке
- Qntwarning: иконка предупреждения когда заканчивается аммуниция
- Type: первый базовый тип (код из itemtypes.txt)
- Type2: второй базовый тип (код из itemtypes.txt)
- Dropsound: звук предмета когда он падает
- Dropfxrame: количество кадров которое звук длится
- Usesound: звук когда используется предмет
- Quest: ИД квеста (для квестовых вещей)
- Questdiffcheck: на какой сложности этот предмет есть квестовый
- Unique: 1=всегда уникальный; 0=не всегда уникальный (используется квестовыми предметами)
- Quivered: является ли предмет пачкой аммуниции 1=да, 0=нет
- Transparent: неизвестно
- Transtbl: всегда 5
- Lightradius: не используется
- Belt: id из файла belts.txt (количество слотов баночек)
- Mindam: минимальный урон (если на щитах то урон Смайтом, если на ботинках то урон Пинком)
- Maxdam: максимальный урон (если на щитах то урон Смайтом, если на ботинках то урон Пинком)
- Strbonus: процент Силы который считается как Бонус к Урону
- Dexbonus: процент Ловкости который считается как Бонус к Урону
- Bitfield: 1 для кожаных веще; 3 для металических
- Durwarning: иконка предупреждения когда предмет ломается
- Gemoffset: неизвестно
Функции продавцов
Везде вместо слова Vendors ставим имя продавца.
- Vendorsmin: минимальное количество данного предмета которое этот продавец может подать
- Vendorsmax: максимальное количество данного предмета которое этот продавец может подать
- Vendorsmagicmin: минимальное количество данного магического предмета которое этот продавец может подать
- Vendorsmagicmax: максимальное количество данного магического предмета которое этот продавец может подать
- Vendorsmagilvl: максимальный уровень магической вещи и статов
- PermstoreItem: всегда продавать у продавцов
- Transform: изменение цвета предмета на анимации персонажа
- Invtrans: изменение цвета предмета в инвентаре
- Skipname: пропустить базовое имя
- Nightmareupgrade: код предмета который будет продаваться вместо этого на Кошмаре; (ххх=без изменений)
- HellUpgrade: код предмета который будет продаваться вместо этого на Аду; (ххх=без изменений)
- Nameable: 1=может быть персонализован; 0=не может
Полное описание файла Monstats.txt
Терминология
- ИИ (англ. AI) – Искусственный Интеллект. Каждый юнит имеет ИИ, который состоит из набора действий. Каждый ИИ имеет набор слотов, типа Атака1, Бег, Скил1 и тд.
- Токен (англ. Token) – очень распространенный термин, который обозначает графический код юнита. В файле Monstats.txt находится в колонке под названием “CODE”, но в среде модмэйкеров привыкли применять именно Токен. Название кода также является названием папки, в которой находятся файлы анимации юнита.
- Харкод (англ. Hardcode) – Функции или параметры, которые записаны в форме кода в .DLL файлах игры и которые невозможно редактировать через текстовые файлы.
- Юнит (англ. Unit) – общее название для монстра, нпс, мерка, саммона, т.е. всего движущегося.
- Код-строка (англ. String-key) – код который ми заносим в .tbl файлы, который отвечает за отображение текста в игре.
- Булев (англ. Boolean) – примитивный тип данных в информатике, который может принимать два возможных значения, иногда называемых истиной (true) и ложью (false).
- Мили (англ. Melee) – термин обозначающий ближний бой. Обычно используется для определения типа сражения – мили бой.
- Спаунеры (англ. Spawner/Nest) – тип юнитов которые призывают других юнитов (гнезда).
- НаградКлас © (англ. TreasureClass) – я нигде не нашел перевода данного термина поэтому решил создать свое слово. НаградКлас не встречается нигде в игре, но это один из самых важных моментов в создании мода, который необходимо знать. Наградклас это группы предметов со схожими уровнями, один из которых выбирается для дропа тогда, когда выбирается определённый НК. Здесь коротко изложен поцес дропа а также другая полезная информация. Подробнее о генерации предметов.
Параметры ИД
- ID – этот столбец содержит указатель который используется в других текстовых файлах, таких как levels.txt и superuniques.txt
- HCIDX – это фактический ИД юнита. Каждый юнит должен иметь свой уникальный ИД. Означает “HardCodedInDeX. Он используется и для других функций: например, определить использует ли юнит DCC или DC6 анимацию (как Мефисто и анимация смерти Диабло, Королевы Личинок). Также эта колонка соединяет другие хардкодные эффекты юнита, такие как прозрачность на скелетах Некроманта и изменение цвета имени у уникальных боссов.
- BASEID – этот столбец содержит ИД указатель «базового» юнита для этого конкретного типа монстра (например: есть пять типов монстров «Fallen»; все они используют fallen1 как их «базовый» юнит). Эта колонка также отвечает за некоторые харкодные поведения, например проходимость сквозь стены (Призраки), распознает каких именно монстров воскресить, или сотворить (шаманы) и еще эффект взрыва у монсторв-камикадзе.
- NEXTINCLASS – этот столбец содержит ИД следующего юнита в цепочке. (Как в предыдущем примере, fallen1 будет иметь следующий ИД fallen2). Если вы хотите укоротить цепочку, вам нужно просто оставить эту колонку пустой, а BASEID указать такой же, как и ID.
Параметры отображения 1
- Translvl – указывает какой цвет использовать в перекраске монстров. Большинство монстров имеют файл palshift.dat в папке COF, который имеет 8 палитр (обычно используются 5 из них). Эти палитры используются игрой, чтобы представить монстров в «новом свете». Учтите, некоторые токены такие как FC не принимают никаких изменений палитр вообще.
- Namestr – этот столбец содержит код-строку который используется в .tbl файлах чтобы отобразить имя монстра когда вы наводите на него мышкой. Учтите, что коды-строки чувствительны к регистру (большие или маленькие буквы), то есть если вы вводите код “Foo” в monstats.txt, вы должны ввести именно такой же код в .tbl файле, иначе появится надпись «an evil force».
- MonStatsEx – этот столбец содержит ИД указатель для файла Monstats2.txt.
Другие связи с внешними файлами/кодами
- Monprop – этот столбец содержит ИД указатель на запись в файле MonProp.txt. MonProp.txt контролирует какие специальные атрибуты присваиваются юниту, например случайные резисты или иммунитеты, скилы «при получении повреждений» и много другого.
- Montype – этот столбец содержит групповой ИД «супер группы» к которой принадлежит данный монстр, например все скелеты принадлежат к «супер-группе» скелетов. Относится к файлу MonType.txt.
- AI – этот столбец сообщает игре какой ИИ (исскуственный интелект) использовать для данного монстра. Учтите, что каждый ИИ должен иметь установленное число режимов анимации (GH, A1, A2, S1, WL, RN и тд).
Параметры отображения 2
- Descstr – этот столбец содержит код-строку для описания монстров, то есть текст который отображается под названием монстра (типа, «Крадет Ману»)
- Code – этот параметр контролирует какой графический токен игра использует для данного монстра, тоесть из какой папки брать анимацию. Названия токена это названия папок в data\global\MONSTERS\.
Параметры Булев 1
- Enabled – 1 = задействованный; 0 = незадействованный. Этот параметр контролирует задействованный ли монстр, или незадействованный.
- Rangedtype – 1=дистанционный монстр; 0=мили монтср. Этот параметр сообщает игре когда монстр дистанционный.
Параметры гнезд/спаунеров
- Placespawn – Булев, 1=спаунер, 0=не спаунер. Этот параметр сообщает игре является ли данный юнит «гнездом», то есть монстры которые призывают других монстров. Можно заставить любого монстра призывать монстров, вне зависимости от их ИИ. Все что надо сделать, это настроить эти четыре столбца и дать им скил “Nest” или “Minion Spawner”.
- Spawn – этот столбец сожержит ИД указатель юнита которого призывают. Если хотите чтобы ваш монстр призывал Балрогов, укажите МД Балрогов в этом столбце.
- Spawnx, Spawny – х/у оси места, где появится монстр когда его призывают. Этот параметр позволяет избежать призыва монстра на месте самого призывателя.
- Spawnmode – в какой форме монстр будет призван (то есть анимация при призывании). Если вы например хотите чтобы монстр призывал големов, здесь нужно указать S1 чтобы големы появлялись как у некроманта, в другом случае големы будут просто появляться на земле.
Параметры групп и миньонов
- Minion1, Minion2 – эти столбцы содержат ИД указатели миньонов которые появляются вокруг данного юнита, когда он создается. Скажем, вы хотите создать босса который появляется с пятью Oblivion Knights. Для этого введите ИД Oblivion Knights в столбец Minion, выставите Partymin и Partymax на 5. Этот столбец имеет и другие функции. Если монстр появляется уникальным или супер-уникальным, его миньоны будут монстры из Minion1/Minion2, а не монстры его базового типа. Именно поэтому Лорд Де Сеис больше не появляется с Oblivion Knights. Еще одна функция, которую имеет этот столбец, это какой монстр появится, если данный монстр умрет. Например, после смерти Flayer Shaman на его месте появится обычный Flayer. Чтобы включить данную функцию установите «1» в столбце SPLENDDEATH.
- Setboss – Булев, 1=установить юнита как босса; 0=не устанавливать юнита как босса.
- Bossxfer – Булев, 1-включить; 0=выключить. Назначение неизвестно.
- Partymin, Partymax – определяет количество миньонов, которые появятся вместе с данным юнитом. Не ставить больше 15.
- Mingrp, Maxgrp – работает точно так же как и столбцы выше, но в данном случае, миньоны будут базового типа монстра.
Параметры заселения уровней и динамики 1
- Sparsepopulate – этот столбец контролирует общий шанс появления монстра на уровне (0-100%). Работает как «второй уровень безопасности» когда дело доходит до заселения уровней монстрами. Припустим, вы создали очень сильных монстров и хотите, чтобы они появлялись реже, чем другие монстры на уровне. Вы можете уменьшить параметр MONDEN в файле levels.txt или Mingrp, Maxgrp. Но это не даст именно, то что нам надо. Понижая параметр MONDEN мы уменьшаем саму густоту монстров (а не шанс появления), а изменение количества монстров в группе, наверное, сделает ваши монстров слабее. Так вот, данный параметр контролирует общий шанс появления монстра на уровне (пустая клетка равна 100%). Если здесь ввести число 80, то тогда когда игра решит создать данного монстра, она сначала проверит шансы на появление. Значит, в 2 из 10 случаев монстр не появится. Ставить ниже 50 не рекомендуется. Это не значит что случится что-то плохое. Просто, если игра не создаст монстра, а у него есть миньоны в Minion1, Minion2, то появятся только сами миньоны, без «главаря».
Параметры скорости
- Velocity, Run – контролирует скорость ходьбы и бега. Учтите, что Run используется только если у монстра есть режим RN, и его ИИ использует этот режим. Не ставить тольше 25.
Параметры заселения уровней и динамики 2
- Rarity – этот параметр также позволяет контролировать заселение уровней монстрами. Контролирует общий шанс появления монстра на уровне. Припустим, в файле levels.txt у вас стоит два монстра. Монстр А имеет Rarity параметр 10, а Монстр Б имеет 1, а сам уровень ограниченный на появление только одного типа монстров. Сначала игра суммирует шансы (10+1=11), потом рассчитывает шанс появления монстра. Для Монстра А шанс будет 10/11 (91%), а для Монстра Б 1/11 (9% ). Таким образом Монстр А имеет больший шанс появления чем Монстр Б.
Параметры Уровней
- Level, Level (N), Level (H) – контролирует уровень монстров на определенной сложности. Этот параметр работает только на Нормале, потому что на Кошмаре и на Аду уровень монстров идентичен уровню зоны.
Параметры звука
- Monsound – указывает ИД указатель этого монстра в файле Monsound.txt когда этот монстр обычный.
- Umonsound – указывает ИД указатель этого монстра в файле Monsound.txt когда этот монстр чемпион или уникальный. ИД указатели Суперуникальных монстров находятся в файле Superuniques.txt.
Параметры ИИ
- Threat – этот параметр используется системой Threat Rating System чтобы сказать ИИ какой юнит атаковать первым. Чем выше число, тем выше уровень Threat.
- Aidel, Aidel (N), Aidel (H) – контролирует задержки между ходами ИИ, однако как именно работает данный параметр окутано тайной. В общем, чем больше число, тем медленней юнит будет действовать.
- Aidist, Aidist (N), Aidist (H) – дистанция нужная для «включения» Мефисто на Кошмаре и на Аду.
- Aip1-8, Aip1-8 (N), Aip1-8 (H) – эти данные передают параметры (обычно в процентах) Искусственному Интеллекту. Для описания что означают эти параметры смотрите MonAI.txt. К сожалению, там некоторые ИИ очень плохо или вообще не описаны.
Параметры метательных снарядов
- MissA1, MissA2, MissS1, MissS2, MissS3, MissS4, MissSC, MissSQ, – эти параметры контролируют «не-скиловые» реактивные снаряды дальнобойных монтсров. Если, например, вписать в MissA1 ИД указатель из файла Missiles.txt, тогда, каждый раз когда монстр будет использовать режим Attack1, они будет выстреливать снаряд тот, который вы указали. Для справки: A1 – Attack1, A2 – Attack 2, S1 – Skill1, S2 – Skill2, S3 – Skill3, S4 – Skill4, SC – Cast, SQ – Sequence.
Параметры Булев 2 (особенно параметры NPC)
- Align – 0=враг; 1=союзник; 2=нейтральный. Эти настройки контролируют когда монстр бьется на вашей стороне или против вас (или просто бродит по уровню).
- Isspawn – 1=спаунится; 0=не спаунится; Этот параметр контролирует может ли монстр спаунится через Level.txt.
- Ismelee – 1=мили; 0=не мили; Этот контролирует может ли монстр спаунится с босс-атрибутами, типа Мульти Выстрел. (Если монстр мили, Мульти Выстрел не появится)
- NPC – 1=я NPC; 0-я не NPC;
- Interact – 1=задействованы специальные возможности NPC; 0=специальные возможности не задействованы; Этот параметр контролирует можете ли вы взаимодействовать с данным NPC. Например, открытие диалогового окна, меню.
- Inventory – 1=имеет инвентарь; 2=не имеет инвентаря. Контролирует, может ли данный NPC или юнит носить вещи. В случае с NPC, это означает что вы можете покупать у них вещи, а для монстров это означает что они могут иметь предметы из файла MonEquip.txt.
- Intown – 1=я могу входить в город; 0=я не могу входить в город. Для всех типов юнитов которые могут ходить по городу.
Параметры типов
- Lundead – 1=нежить; 0=не нежить. Близзарды использовали эти параметры для различия между High Undead и Low Undead. Lundead это малая нежить, такие как Зомби, Скелеты. Активация одного из этих параметров делает монстра Нежитью.
- Hundead – 1=нежить; 0=не нежить. Для больших неживых существ (Личи, Анравеллеры). Эти параметры должны быть использованы именно так, потому что Большая нежить воскрешает Малую Нежить.
- Demon – 1=демон; 0=не демон.
Параметры Булев 3
- Flying – 1=я могу летать; 0=не могу летать. Если поставить «1», монстр сможет проходить сквозь непроходимые зоны (преграды, реки, лужы)
- Opendoor – 1=я могу открывать двери; 0=я слишком тупой чтобы отрыть двери;
- Boss – 1=я босс; 0=я не босс; Монстры которые установлены как «боссы», игнорируют настройки уровня на карте, а получают уровень который определенный в Monstats.txt
- Primeevil – 1=я первичное зло; 0=я не первичное зло. Другими словами Актовые Боссы.
- Killable – 1=смертный; 0=бессмертный.
- SwitchAI – 1=может менять стороны; 0=не может менять стороны. Контролирует, может ли монстр переходить на вашу сторону при помощи скилов типа “Conversion” или “Revive”.
- NoAura – 1=не получит ауру; 0=может получить ауру. Контролирует, будут ли дружные ауры влиять на монстра.
- NoMultiShot – 1=не может получить Мульти Шот; 0=может получить Мульти Шот. Это еще один уровень безопасности чтобы предотвратить появление данного атрибута у монстров (кроме параметра Ismelee)
- Nevercount – Неизвестно
- PetIgnore – Не работает
- Deathdmg – 1=наносит урон при смерти; 0=не наносит урон при смерти. Наносит урон окружающим игрокам при смерти (Стигийские куклы).
- Genericspawn – Неизвестно
- Zoo – Неизвестно
Параметры Скилов
- Sendskills – 1=неизвестно; 2=используестя ловушками ассасина; Этот параметр используется только двумя ловушками Ассасина, но что именно он делает неизвестно.
- Skill 1-8 – ИД указатель скила, который монстр будет использовать, когда ИИ использует данный слот (из Skills.txt). Какие именно слоты используются определяет ИИ монстра.
- SK1Mode-SK8Mode – Графический режим который монстр использует для скилов.
- SK1LV – SK8LV – Уровень скила. Получает бонусы на Кошмаре и Аде, которые контролируются в файле DifficultyLevels.txt.
Параметры Резистов
- Drain, Drain(N), Drain(H) – контролирует эффективность кражи Жизни и Маны. 0=не может красть. Также следует помнить, что кроме этого, эффективность кражи также ограничена файлом DifficultyLevels.txt.
- Coldeffect, Coldeffect(N), Coldeffect(H) – контролирует эффективность урона холодом. Чем меньше число – тем больше скорости теряет данный юнит при заморозке. -100 наверное полностью остановит юнит. Позитивные числа будут ускорять юнита, а 0 сделает юнит «незамерзаемым». Данный параметр на влияет на «Длительность обморожения». Для Длительности обморожения и заморозки смотрите DifficultyLevels.txt.
- ResDM, ResDM(N), ResDM(H) – Резисты физическому урону. Негативные числа означает что юнит получит больше урона от этого типа. Числа выше 100 перерастают в Иммунитет.
- ResMA, ResMA(N), ResMa(H) – Резисты магическому урону. Негативные числа означает, что юнит получит больше урона от этого типа. Числа выше 100 перерастают в Иммунитет.
- ResFI, ResFIR(N), ResFI(H) – Резисты урону огнем. Негативные числа означает, что юнит получит больше урона от этого типа. Числа выше 100 перерастают в Иммунитет.
- ResLI, ResLI(N), ResLI(H) – Резисты урону молнией. Негативные числа означает, что юнит получит больше урона от этого типа. Числа выше 100 перерастают в Иммунитет.
- ResCO, ResCO(N), ResCO(H) – Резисты урону холодом. Негативные числа означает, что юнит получит больше урона от этого типа. Числа выше 100 перерастают в Иммунитет.
- ResPO, ResPO (N), ResPO(H) – Резисты урону ядом. Негативные числа означает, что юнит получит больше урона от этого типа. Числа выше 100 перерастают в Иммунитет.
Разнообразные настройки
- Damageregen – сколько жизни регенирирует данный юнит. Иногда редактируется ИИ юнита. В версии 1.09 формула была (REGEN*HP)/4096. Тоесть монстр з 200 хп и числом регенирации 10, регенирировал ~0,5 его хп за каждый фрейм.
- Skilldamage – ИД указатель скила который контролирует урон данного юнита. Это используется для саммонов друида (потому что их урон указывается в Skills.txt, а не в Monstats.txt).
Параметры статов
- Noratio – булев, 1=не использовать Monlvl.txt; 0=использовать Monlvl.txt. Контролирует, использует ли монстр файл Monlvl.txt, или статы указаны в Monstats.txt как есть. «1» может привести к массе проблем, так что не советую.
- Noshldblock – 1=может блокировать без анимации блока, 0=не может блокировать без анимации блока. Чтобы блокировать удар, юнит должен иметь анимации блока (режим BL), но если поставить здесь 1 то юнит буде блокировать атаки вне зависимости от того имеет ли он анимацию блока.
- Toblock, Toblock(N), Toblock(H) – шанс на блок данного юнита. Макс 75%.
- Crit – шанс на критический удар.
Числа приведенные ниже это процентное отношение (если конечно у вас в Noratio стоит «0»). Игра сначала проверяет уровень монстра а потом использует эти проценты чтобы вычислить реальные статы из «общих статов», которые занесены в Monlvl.txt. Это происходит обычным процентным обчислением, т.е. S/100*P, где S=стат, P=процент. Например, если ваш монстр 50 уровня имеет минимальный показатель жизни 200, а «общий стат» для Жизни на уровне 50 это 100, тогда происходит следующие обчисление: 100/100*200, в результате получается 200 ХР.
- MinHP, MaxHP, MinHP(N), MaxHP(N), MinHP(H), MaxHP(H) – минималное и максималное количество жизни на трех сложностях.
- AC, AC(N), AC(H) – класс брони.
- EXP, EXP(N), EXP(H) – количество опыта которое вы получаете от убийства данного юнита.
- A1mind, A1maxd, A1mind(N), A1maxd(N), A1mind(H), A1maxd(H) – минимальный и максимальный урон при использовании режима Attack1.
- A2mind, A2maxd, A2mind(N), A2maxd(N), A2mind(H), A2maxd(H) – минимальный и максимальный урон при использовании режима Attack2.
- S1mind, S1maxd, S1mind(N), S1maxd(N), S1mind(H), S1maxd(H) – минимальный и максимальный урон при использовании режима Special attack 1 (или Skill 1), обычно используется для снарядов типа стрел.
- A1TH, A1TH(N), A1TH(N) – рейтинг атаки для Attack1.
- A2TH, A2TH(N), A2TH(N) – рейтинг атаки для Attack2.
- S1TH, S1TH(N), S1TH(N) – рейтинг атаки для режима Special attack 1 (или Skill 1), обычно используется для снарядов типа стрел.
Параметры елементального урона
- EL1Mode-EL3Mode – режим к которому прибавляется елементальный урон (A1, A2, S1, S2, S3, S4, SC, SQ).
- El1TYPE-EL3TYPE – тип елементального урона который прибавляется к атаке. Fire=огненный урон, ltng=урон молнией, cold=урон холодом (использует длительность), pois=урон ядом (использует длительность), mag=урон магией, life=кража жизни (монстр будет лечить себя при атаке вас), mana=кража маны, stam=кража выносливости, stun=оглушение песронажа (использует длительность, урон не наносится, действует только на саммонов и мерков), rand=рандомный удар (использует длительность, каждая атака будет случайно наносить урон огнем или холодом или ядом или молнией), burn=горение (использует длительность, к этому типу урона нету резиста, и следовательно его не стоит использовать), frze=замораживающий урон (использует длительность, на персов работает как урон холодом, но разобьет в дребезги саммонов).
- EL1PCT-EL3PCT, EL1PCT(N)-EL3PCT(N), EL1PCT(H)-EL3PCT(H), – шанс прибавить елементальный урон к атакам на трех слодностях. 0=никогда, 100=всегда
- EL1MIND-EL3MIND, EL1MAXD-EL3MAXD, EL1MIND(N)-EL3MIND(N), EL1MAXD(N)-EL3MAXD(N), EL1MIND(H)-EL3MIND(H), EL1MAXD(H)-EL3MAXD(H) – количество минимум и максимум елементального урона который прибавляется к атакам.
- EL1DUR-EL3DUR, EL1DUR(N)-EL3DUR(N), EL1DUR(H)-EL3DUR(H) – длительность эффектов заморозки, горения, холода, яда и оглушения.
Параметры наградкласса
Из-за новой системы Наградкласса в версии 1.10 эти данные имеют малую значимость по отношению к тому какой наградкласс выбирается, разве что вы измените систему редактирую TreasureClassEx.txt.
- TreasureClass1, TreasureClass1(N), TreasureClass1(H) – Наградкласс который использует данный монстр, если он обычный, на трех сложностях.
- TreasureClass2, TreasureClass2(N), TreasureClass2(H) – Наградкласс который использует данный монстр, если он чемпион, на трех сложностях.
- TreasureClass3, TreasureClass3(N), TreasureClass3(H) – Наградкласс который использует данный монстр, если он уникальный или суперуникальный, на трех сложностях.
- TreasureClass4, TreasureClass4(N), TreasureClass4(H) – Квестовый Наградкласс который использует данный монстр (например актовые боссы всегда имеют больше шансов дропнуть редкий, сэтовый или уникальный предмет когда вы впервые их убиваете).
- TCQUESTID – ИД квеста который приводит в действие квестовый Наградкласс дроп.
- TCQUESTCP – ИД квеста-состояния которое вам нужно завершить чтобы в действие квестовый Наградкласс дроп.
Осообенные параметры
- Splenddeath – 0=нету особенной смерти; 1=вызвать монстра из столбца MINION1 когда я умру; 2=убить монстра который сидит на мне, когда я умру (используется монстрами и 5 акта)
- Splgetmodechart – Незивестно
- Splendgeneric – 1=включить; 0=выключить. Работает в связи с Splendclientend. Делает юнит ненацеливаемым когда он впервые появляется (для монстров которые в воде, под землей или летают).
- Splendclientend – 1=включить; 0=выключить. Работает в связи с Splendgeneric. Делает юнит невидимым когда он впервые появляется (для монстров которые в воде, под землей или летают).
- EOL – конец линии, всегда ставить «0».
Продвинутая информация о формате .DT1
Всем привет. С вами снова Jetaman. На этот раз хочу вам представить результаты моих исследований в области .dt1 и .ds1 (другими словами тайлсеты и карты).
Во первых, уже существует статья Paul Siramy которая описывает формат .dt1 с точки зрения программиста. Однако эта статья не полная и содержит некоторую неверную информацию. Данная статья, с другой стороны, не описывает код, а нацелена на мэпмейкеров которым нравиться создавать новые карты, локации и тайлсеты. Эта статья поможет вам разобраться со всем, что относиться к картам и тайлсетам.
1. «Ориентации» и «Направления»
Когда вы откроете свой редактор карт, и нажмете правой кнопкой мышки на тайле, вы увидите что каждый тайл имеет три индекса которые делают его уникальным и распределяют его в ту или иную категорию.
1-Основной индекс (Main Index)
2-Ориентация (Orientation)
3-Саб индекс (Sub index)
Всего есть 19 индексов Ориентации:
Ориентация 0 – Пол
Ориентация 1 – Левая стена
Ориентация 2 – Правая стена
Ориентация 3 – Правая часть северного угла
Ориентация 4 – Левая часть северного угла
Ориентация 5 – Левая крайняя стена
Ориентация 6 – Правая крайняя стена
Ориентация 7 – Южный угол
Ориентация 8 – Левая стена проход
Ориентация 9 – Правая стена проход
Ориентация 10, 11 – Специальные тайлы
Ориентация 12 – Единичные объекты, колонны и тд
Ориентация 13 – Тени
Ориентация 14 – Деревья (с собственной тенью)
Ориентация 15 – Крыши
Ориентация 16 – Левая нижняя стена (эквивалент Ориентации 1)
Ориентация 17 – Правая нижняя стена (эквивалент Ориентации 2)
Ориентация 18 – Северный угол нижней стены
Ориентация 19 – Южный угол нижней стены
Есть еще один очень важный индекс, который не распределяет тайл по категориям и не отображается в редакторе. Это «Направление» (Direction). «Направление» решает, как свет будет падать на тайл. Это очень важно, если вы создаете новые тайлсеты. Paul Siramy в своей статье говорит что он нашел 5 индексов Направления и заявляет что они ни на что не влияют, однако я нашел целых 9. «Направление» работает совместно с «Ориентацией». Нужно всегда использовать индекс Ориентации с подходящим индексом Направления. Ниже приведена таблица как нужно их использовать.
Direction 1 | Orientation 1, 5, 8 |
Direction 2 | Orientation 2, 6, 9 |
Direction 3 | Orientation 0, 3, 4, 12, 14 |
Direction 4 | Orientation 7 |
Direction 5 | Orientation 15 |
Direction 6 | Orientation 16 |
Direction 7 | Orientation 17 |
Direction 8 | Orientation 18 |
Direction 9 | Orientation 19 |
2. Комбинации Ориентаций и структура некоторых архитектурных элементов
В этом разделе я предлагаю вам ознакомиться со структурой некоторых зданий в Д2. Я делал это в основном для себя, но позже решил поделиться со всеми. Это поможет вам понять как устроены элементы стен в Д2, если вы захотите создавать новые карты или тайлсеты. После анализа и изучения эти примеров я многому научился, и рекомендую вам. Я немерено не представил здесь все здания Д2, потому что эти примеры демонстрируют все важные аспекты и интересные комбинации.
*** Числа на картинках обозначают Индекс Ориентации.
Акт 1 – Дом + Крыша | ||
Акт 1 – Повозка Гида | ||
Акт 1 – Кузница Чарси | ||
Акт 1 – Палатка Акары | ||
Акт 1 – Длинная Палатка + Крыша | ||
Акт 1 – Мавзолей | ||
Акт 1 – Крипта | ||
Акт 1 – Башня Графини | ||
Акт 3 – Дом Ашеары | ||
Акт 3 – Пирамида | ||
Акт 2 - Таверна |
3. Специальные Тайлы, Крыши и PopPads
Вам когда ни будь было интересно, почему статуи Рыцарей Смерти в Огненной Реке поворачивают головы, когда вы проходите мимо них? Это закодированное поведение? Анимированый объект? Темная магия? Нет. Это тот же самый механизм, который в первом акте заставляет крышу исчезать, когда вы заходите в дом. Это делается с помощью Специальных Тайлов – они убирают один слой и открывают другой. В случай со статуями – 2 статуи стоят поверх друг друга, когда игрок подбегает к ним, одна исчезает, другая появляется. Вот так просто.
Специальные Тайлы это тайлы которые находятся во вкладке «Special» в редакторе карт. Они выполняют разные функции. Вот список их функций.
#00-46, #82, #83 Vis (тайлы которые позволяют переходить с одной зоны в другую)
#47-74 Area (тайлы которые позволяют убирать стены и крыши)
#75 Место появления в городе
#76 Место появления на локации
#77 Место появления в городе 2
#78 Место появления трупа
#79 Место появления портала
#80 Неизвестно
Мы будем говорить о Специальных Тайлах #47-74 более детально. Но сначала нужно понять что такое «Крыши».
Что такое «крыши»?
Крыши это те же саме тайлы пола, но с индексом Направления 5 и Ориентацией 15. Крыши должны стоять выше по оси Y, как бы над землей. Для этого, в параметрах тайлсета (в .ini файле) есть строка “roof_y = ”. Обычно “roof_y = 80”, но другие числа тоже возможны, например 160, 240, 320, 400. Но всегда на 80 пикселей вверх.
Как заставить крышу исчезать?
Пара Специальных Тайлов определяет зону в которой исчезают тайлы. Нужно поставить два идентичных Специальных Тайла так чтобы они сформировали квадрат или прямоугольник над той зоной, которую вы хотите убрать. Как вы видите на примере ниже, если поставить Специальные Тайлы таким образом, красная линия определяет зону где тайлы исчезают.
В файле Lvlprest.txt есть два столбца которые имеют отношение к этому:
Pops – число «исчезаемых зон» которые вы используете на карте. Например, в домике в Акте 1 используется 2 зоны, а в Башня Графини 1 зона.
PopPads – регулирует линию триггера исчезаемой зоны. Другими словами это оффсеты которые измеряются в саб-тайлах
PopPads не определяет размер исчезаемой зоны. Он определяет, где игра приведет в действие механизм исчезания. Если ввести здесь 0, исчезаемость будет точно по линии Специальных Тайлов (красные границы). Если например ввести число 3, тогда зона тригера увеличится на три саб-тайла (синие границы). Если использовать негативное число -3, зона тригера уменьшится на три саб-тайла (зеленые границы).
Очень важно помнить, что зона триггера увеличивается или уменьшается только в двух направлениях: Юг и Восток. Итак, как мы видим на этом изображении, тайлы которые находятся в красной зоне исчезают, когда вы проходите по зеленой или синей границе (в зависимости от числа в PopPads).
Если вы хотите сделать собственные исчезаемые крыши или стены, помните одну очень важную вещь: каждый Специальный Тайл работает со своим собственным Основным индексом. Например, если мы взглянем на крышу дома в Акте 1, мы увидим что крыши имеет Основной Индекс 46, и используются Специальные Тайлы #59 и #62. Это означает что эти два Специальных Тайла не будут работать з другими Основными Индексами. А если Специальный Тайл убирает крышу и стены одновременно (как #47 в городе Акт 4), тогда крыша и стены должны иметь одинаковый Основной Индекс. Если вы посмотрите в городе Акт 4, стены и крыша которые исчезают, имеют Основной Индекс 2 а стены которые остаются, имеют Основной Индекс 4. Детальнее о Специальных Тайлах ниже.
Почти все что было известно о Специальных Тайлах до сейчас было частично неверно. Наши знания основывались на двух предположениях взятых с единственной темы на форуме
1. Специальные Тайлы работают только в одном акте (тайлы из акта 4 не работают в акте 1)
2. Специальные Тайлы убирают конкретный слой стен.
Оба этих предположения оказались неправильными. Акты и слои не имеют значения. Любой Специальный Тайл может использоваться в любом акте и убирать любой слой стен. Единственное что имеет значение это Основной Индекс. Специальные Тайлы проверяет только Основной Индекс тайлов которые стоят в их зоне.
Одна из вечных проблем моддеров была поставить в городе два дома рядом и сделать так чтобы их крыши исчезали отдельно. Всегда они исчезали или вместе или исчезала только одна а вторая вообще никогда не исчезала. Это возможно? – Да. И не только два. Вы можете иметь до 4-ех отдельно исчезаемых зон одновременно.
В редакторе карт специальные тайлы #47-74 распределены по Основному Индексу 8, 9, 10, 12, 13, 16 и 20.
Все эти тайлы нужно разделить на 4 группы:
1. Группа 1 – Специальные Тайлы с Основным индексом 8, 9, и 10.
2. Группа 2 – Специальные Тайлы с Основным индексом 12 и 13.
3. Группа 3 – Специальные Тайлы с Основным индексом 16.
4. Группа 4 – Специальные Тайлы с Основным индексом 20.
Но как нам знать какой Основной индекс убирают Специальные Тайлы? Вот это очень интересно. Саб индекс Специального тайла равняется Основному Индексу которые он убирает. Например, Саб индекс Специального Тайла #47 это 2. Это означает Специальный Тайл #47 убирает все тайлы в которые имеют Основной Индекс 2. Специальный Тайл #48 убирает тайлы с Основным Индексом 7. Специальный Тайл #49 убирает тайлы с Основным Индексом 8 и тд. Теперь, взгяните на Специальные Тайлы #54, #60 и #63 – у них одинаковый Саб Индекс 23. Это означает что все они убирают тайлы с Основным индексом 23. Но зачем нам аж три специальных тайлы с одинаковой функцией? Ответ: для того чтобы иметь возмоножсть формировать сложные фигуры которые нельзя сделать с помощью одного Специального Тайла. С этими тремя Специальными тайлами вы можете создать абсолютно любые сложные фигуры для своих исчезаемых крыш или стен. Эти три Специальных Тайла находятся в одной группе, поэтому они будут убирать все одновременно.
А теперь взгляните на Специальные Тайлы #66 и #74. У них тоже одинаковый Саб индекс 23. Но они принадлежать к разных группам (#54, #60 и #63 из Группы 1, #66 из Группы 2, #74 из Группы 4). Это означает что они будут убирать тайлы отдельно.
Но помните: не используйте Специальные тайлы с одинаковым Основным Индексом вместе (например #47 и #48). Будут глюки!
Подведем итог: если вы будете использовать Специальные Тайлы из 4 разных групп, вы можете иметь 4 исчезаемые зоны одновременно. Вам лишь нужно выставить подходящий Основной индекс для соответствующего Специального Тайла.
В таблице ниже вы можете найти всю информацию о Специальных тайлах #47-74.
Группа | Основной индекс | № Специального Тайла | Убирает Основной Индекс |
Группа 1 | 8 | #47 | 2 |
#49 | 8 | ||
#50 | 12 | ||
#51 | 14 | ||
#52 | 16 | ||
#53 | 22 | ||
#54 | 23 | ||
#55 | 31 | ||
#56 | 40 | ||
#57 | 41 | ||
#58 | 42 | ||
#59 | 46 | ||
9 | #60 | 23 | |
#61 | 40 | ||
#62 | 46 | ||
10 | #63 | 23 | |
Группа 2 | 12 | #64 | 13 |
#65 | 14 | ||
#66 | 23 | ||
#67 | 24 | ||
#68 | 41 | ||
13 | #69 | 13 | |
Группа 3 | 16 | #70 | 25 |
#71 | 40 | ||
#72 | 41 | ||
#73 | 42 | ||
Группа 4 | 20 | #74 | 23 |
4. Прозрачность Стен
Далее, я расскажу об одной вещи которая оставалась в тайне несмотря на 10 с лишним лет Д2 моддинга. Я имею ввиду прозрачность стен. Это происходит когда персонаж стоит за высокой стеной и стена стает немного прозрачной чтобы вы видели своего персонажа за стеной. Для большинства Д2 моддеров это может показаться несущественным, но для тех кто интенсивно работает с картами это очень важно. А также, очень легко пропустить сундук или монстра если его не видно за стеной, а если вы играете не хардкоре то это вообще очень опасно.
Теперь объясним, как это работает на примере карты Inner Cloister. Весь секрет состоит в том, что прозрачность происходит только тогда когда стены соединены в одну непрерывную цепочку. Если удалить один тайл стены и прервать цепочку – прозрачность исчезает.
Цепочка может иметь любой размер. На одной карте можно иметь несколько цепочек.
В файле Lvlprest.txt, есть один важный параметр, столбец Logicals. 0-отключить прозрачност для этого уровня, 1- включить прозрачность для этого уровня.
Также мой знакомый Ogodei узнал что для того чтобы стены исчезали еще нужно чтобы параметр «Tile Sound» в настройках .ini файла имел значение 0. Если у вас что-то другое кроме 0, стены не будут исчезать.
На сегодня все. Надеюсь вам та информация будет полезной.
P.S.
На этих видео вы можете наглядно увидеть демонстрацию всего, что я описал в статье.
*** кстати я выпустил плагин с этими домами. Его можно скачать и вставить в игру. Ссылка
4 отдельно исчезаемые зоны одновременно:
Демонстрация нового города с исчаземой крышей:
Дополнительные ресурсы:
- Коллекция тайлсетов из игры «Арканум» для Д2 (тема постоянно обновляется);
- Горы из Акта 1 переделаны как обрыв скалы
Как призывать всех големов Некроманта одновременно
Примечание: о том, редактировать файлы, читайте в первом гайде
Сначала откройте pettype.txt, скопируйте целую строку golem и поместите ее внизу списка как три новых строки, и переименуйте их в bloodgolem, irongolem и firegolem. Теперь, в той строке, которую вы копировали (та что под «Валкирией»), переименуйте слово golem в столбце “pettype” на claygolem, «idx» оставьте как есть. Теперь, найдите столбец “mclass1” и впишите число 289, а в столбце “micon1” впишите earthgolumicon. После этого удалите все содержимое других столбцов mclass и micon.
Теперь, перейдем к нашим новым строкам. В строке bloodgolem измените idx на 20. В столбце baseicon измените на bloodgolumicon. Теперь, найдите столбец “mclass1” и впишите число 290, а в столбце “micon1” впишите bloodgolumicon. После этого удалите все содержимое других столбцов mclass и micon.
В строке irongolem измените idx на 21. В столбце baseicon измените на metalgolumicon. Теперь, найдите столбец “mclass1” и впишите число 291, а в столбце “micon1” впишите metalgolumicon. После этого удалите все содержимое других столбцов mclass и micon.
В строке firegolem измените idx на 22. В столбце baseicon измените на firegolumicon. Теперь, найдите столбец “mclass1” и впишите число 292, а в столбце “micon1” впишите firegolumicon. После этого удалите все содержимое других столбцов mclass и micon.
Если вы хотите изменить еще и имена големов в игре, вам надо заменить столбец name. Там указаны коды-строки из файла strings.tbl. То есть впишите какоето слово (например «blood» для Кровавого голема) и потом внесите код blood в strings.tbl и в описании напишите Blood Golem или что хотите.
Сохраните Pettype.txt и откройте Skills.txt.
- Найдите строку clay golem (№77) и в столбце Pettype впишите claygolem.
- Найдите строку blood golem (№87) и в столбце Pettype впишите bloodgolem.
- Найдите строку iron golem (№92) и в столбце Pettype впишите irongolem.
- Найдите строку fire golem (№96) и в столбце Pettype впишите firegolem.
- Сохраните Skills.txt и закройте редактор.
А теперь идите, призывайте свою армию Големов и надерите задницу Диабло!
Полное описание Weapons.txt
О том, что такое txt-файлы и как с ними работать читайте в первом и втором гайде по созданию своих модов для Diablo 2. Как не сложно понять из названия файла, Weapons.txt отвечает за все параметры и свойства оружия.
- Name: просто имя, не влияет ни на что
- Type: первый базовый тип (код из itemtypes.txt)
- Type2: второй базовый тип (код из itemtypes.txt)
- Code: трёхзначное слово/число, которое должно быть уникальное для каждого предмета
- Alternategfx: это код файла DCC предмета для анимации персонажа
- Namestr: это код для .tbl файла, в котором вы указываете название предмета в игре
- Version: 0=классика, 100=ЛОД
- Compactsave: 1=использовать, 0=нет. Это используется для получения меньшего размера сэйвфайла. Эта функция не будет сохранять статы на предмете, такие как количество, префиксы, суфиксы, урон, броню, прочность и тд. Это используется для предметов что не имеют статов, типа баночки, камни
- Rarity: 0=убрать этот предмет из стойки с броней. 1 и выше= частота выпадения предмета из стойки с броней. Хотя бы один предмет должен иметь здесь 1 или игра вылетит
- Spawnable: 1=продается в НПС; 0=не продается в НПС
- Mindam: минимальный урон одноручным оружием
- Maxdam: максимальный урон одноручным оружием
- 1or2handed: 1=да, 0=нет. Может ли Варвар носить одну или две такие вещи?
- 2handed: 1=это двуручное оружие; 0=это одноручное оружие;
- 2handmindam: минимальный урон двуручным оружием
- 2handmaxdam: максимальный урон двуручным оружием
- Minmisdam: минимальный урон метательным оружием
- Maxmisdam: максимальный урон метательным оружием
- Rangeadder: добавляет дополнительную дальность для мили атак
- Speed: позитивные числа=медленная скорость оружия; негативные числа= быстрая скорость оружия
- Strbonus: процент Силы который считается как Бонус к Урону
- Dexbonus: процент Ловкости который считается как Бонус к Урону
- Reqstr: необходимая сила для одевания предмета
- ReqDex: необходимая ловкость для одевания предмета
- Durability: базовая прочность (255 макс)
- Nodurability: 1=неуничтожимая; 0=использовать прочность
- Level: базовый уровень предмета
- Levelreq: необходимый уровень для одевания предмета
- Cost: базовая цена
- Gamble cost: не исползуется
- Magiclvl: дополнительный магический уровень когда находишь предмет (Пример: если поставить 10, то при гембле на 10 уровне вы можете получить предмет со статами 20 уровня)
- Autoprefix: номер группы из automagic.txt
- Openbetagfx: ничего
- Normcode: код нормального предмета
- Ubercode: код исключительного предмета
- Ultracode: код элитного предмета
- Wclass: класс одноручного оружия, стиль атаки (1hs, 1ht, hth и тд)
- 2handedwclass: класс двуручного оружия, стиль атаки
- Component: это означает какой слой анимации использовать из файла composit.txt чтобы показать предмет на персонаже
Часть брони | Номер |
Head | HD #00 |
Torso | TR #01 |
Legs | LG #02 |
RightArm | RA #03 |
LeftArm | LA #04 |
RightHand | RH #05 |
LeftHand | LH #06 |
Shield | SH #07 |
Special1 | S1 #08 |
Special2 | S2 #09 |
Special3 | S3 #10 |
Special4 | S4 #11 |
Special5 | S5 #12 |
Special6 | S6 #13 |
Special7 | S7 #14 |
Special8 | S8 #15 |
- Hit class: какой тип эффекта показывается/слышытся когда врага бьют этим оружием
- Invwidth: ширина в клетках инвентаря
- Invheight: высота в клетках инвентаря
- Stackable: 1-да, 0-нет. Может ли предмет иметь пачки
- Minstack: минимальное количество в пачке
- Maxstack: максимальное количество в пачке
- Spawnstack: количество когда рандомно выпадает
- Flippyfile: файл анимации когда предмет падает на землю
- Invfile: файл изображения предмета в инвентаре
- Uniqueinvfile: файл изображения уникльного предмета в инвентаре
- Setinvfile: файл изображения сэтового предмета в инвентаре
- Hasinv: 1=может иметь дырки, 0 не может иметь дырки (в файле itemtypes.txt нужно поставить хотя бы 1 в строках maxsock1/25/40)
- Gemsockets: максимальное количесто сокетов
- Gemapplytype: эффект камня 0=оружие; 1=броня, шлем; 2= щит
- Special: ничего
- Useable: 0=нельзя активировать правым щелчок; 1=можно
- Dropsound: звук предмета когда он падает
- Dropfxrame: количество кадров которое звук длится
- Usesound: звук когда используется предмет
- Unique: 1=всегда уникальный; 0=не всегда уникальный (используется квестовыми предметами)
- Transparent: неизвестно
- Transtbl: всегда 5
- Quivered: является ли предмет пачкой аммуниции 1=да, 0=нет
- Lightradius: не используется
- Belt: id из файла belts.txt (количество слотов баночек)
- Quest: ИД квеста (для квестовых вещей)
- Questdiffcheck: на какой сложности этот предмет есть квестовый
- Missiletype: какой снаряд выпустит оружие если вы его бросите (ИД из missiles.txt)
- Durwarning: иконка предупреждения когда предмет ломается
- Qntwarning: иконка предупреждения когда заканчивается аммуниция
- Gemoffset: неизвестно
- Bitfield: 1 для кожаных веще; 3 для металических
Функции продавцов
Везде вместо слова Vendors ставим имя продавца.
- Vendorsmin: минимальное количество данного предмета которое этот продавец может подать
- Vendorsmax: максимальное количество данного предмета которое этот продавец может подать
- Vendorsmagicmin: минимальное количество данного магического предмета которое этот продавец может подать
- Vendorsmagicmax: максимальное количество данного магического предмета которое этот продавец может подать
- Vendorsmagilvl: максимальный уровень магической вещи и статов
- Transform: изменение цвета предмета на анимации персонажа
- Invtrans: изменение цвета предмета в инвентаре
- Skipname: пропустить базовое имя
- Nightmareupgrade: код предмета который будет продаваться вместо этого на Кошмаре; (ххх=без изменений)
- HellUpgrade: код предмета который будет продаваться вместо этого на Аду; (ххх=без изменений)
- Nameable: 1=может быть персонализован; 0=не может
- PermstoreItem: всегда продавать у продавцов