Hexen 2 Russian Fans Четверг
2024-04-18
14:30:06
Приветствую Вас Гость | RSS Главная страница | Каталог статей | Регистрация | Вход
Меню сайта

Категории каталога
Прохождения [7]
Пароли [3]
FAQ [10]
Редактирование игр [6]
Разное [9]

Начало » Статьи » Статьи » FAQ

Экспорт спрайтов и звуков из Diablo II и импорт их в Doom-движок
Экспорт спрайтов и звуков из Diablo II и импорт их в Doom-движок (на примере Hexen)

Предисловие: хоть в Diablo II панорама несколько отличается от вида "от первого лица", опыт показывает, что монстры Diablo II, портированные под Doom-движок, смотрятся вполне неплохо.

Для справки:
Список полезных MPQ файлов
- Diablo II:

  • D2CHAR.MPQ
  • D2DATA.MPQ
  • D2MUSIC.MPQ
  • D2SFX.MPQ
  • D2SPEECH.MPQ

- Diablo II Expansion:
  • D2EXP.MPQ
  • D2XMUSIC.MPQ
  • D2XTALK.MPQ

В этой статье мы посмотрим, как же перетянуть монстров из одной игры в другую. Главная сложность естественно заключается в извлечении спрайтов, однако мы коснемся и ряда других моментов.

Необходимый софт (прежде всего, для работы с графикой): CV 5.2, MERGE_DCC v. 1.8, MPQ Editor v 1.8, Slade3, Diablo II (нам нужны файлы MPQ, чем больше ваши амбиции, тем больше файлов, если нужна только графика из оригинальной д2, хватит и D2DATA.MPQ)

Распаковка ресурсов

Итак, начнем с самого начала -- придумаем, что мы будем портировать. Допустим, это будет Yeti, с анимацией, звуками и т.п. Первое что надо сделать -- запускаем MPQ Editor (или любой другой mpq распаковщик), открываем D2DATA.MPQ и распаковываем все! (надеюсь, места на HDD вам не жалко). В MPQ Editor это делается командой "Extract whole archive" в меню Operations (в Options можно скорректировать путь распаковки). Если нам нужен будет не один моб, то это явно хорошая тактика. Сразу же, поскольку нам нужны и звуки, распаковываем тем же способом D2SFX.MPQ. При распаковке архиватор предлагает использовать обнаруженный список файлов -- выделяйте его в окошке и жмите ок, тоже самое будет если нажать autodetect и далее use internal file list. Иначе не разберетесь потом в содержимом.

Теперь нам надо найти спрайты несчастного Ёети. Идем туда, куда распаковали mpq, далее data >> global >> excel и находим файл MonType.txt. Ищем там нашего Йети, находим и видим у него, как и прочих его морф, в графе Token написано YE. Запомним это!

Экспорт спрайтов целикового монстра

Открываем программу CV 5.2, в browser находим место с распакованным mpq, далее data >> global >> monsters >> YE (Наш Token) >> TR и видим там файлы с зелененьким кружочком. Сразу рассмотрим структуру MPQ-архива. В каталоге monsters хранятся все спрайты мобов в двухбуквенных каталогах. Как я уже сказал, большинство аббревиатур можно пропалить по файлу montype, но в редких случаях придется смотреть все подряд. В каталоге по каждому монстру есть папки, обозначающие разные части его тела/модельки. Папки COF и TR есть практически всегда. В COF хранится всякая служебная инфа (об этом позже), а в TR (от слова "торс") хранится средняя часть составного моба, или в случае с йети, крысой и рядом других -- весь моб целиком.

Для справки:
Рашифровки акронимов указаны в следующих файлах:
  • ArmType.txt - броня
  • Composit.txt - запчасти составной фигуры
  • MonMode.txt - состояния активности монстра
  • MonType.txt - названия монстра
  • ObjMode.txt - аналог MonMode по объектам
  • ObjType.txt - названия объектов
  • PlrMode.txt - аналог MonMode по персам
  • PlrType.txt - названия персов

Зелененьких файлов тоже несколько, разберемся что это. YETRLITA1HTH.dcc -- типичное название таких файлов. Первые 2 буквы YE -- тип моба, вторые TR -- часть тела, далее три буквы LIT -- мощь брони (ну йети голышом бегает, поэтому от слова light -- легкий), далее тип анимации , A1 и A2 означает атака, DD дохлый трупик, DT анимация смерти, GH (get hit) -- Pain state в нашем думе, NU -- состояние покоя, и WL -- ходьба. HTH -- заключительные три буквы, имеющие отношение к вооружению моба. Расшифровку многих аббревиатур можно почитать в global >> excel.

Допустим мы собираемся выдрать спрайты атаки. Кликаем на YETRLITA1HTH.dcc, в правой части окна появляются фреймы, все выделены. Можем сразу нажать PLAY наверху и помотреть что там происходит (:. Если слишком быстро, ставим speed поменьше и снова смотрим. Если это то что мы так давно ждали, можем начать вынимать спрайты. Следим, чтобы все фреймы были выделены, и жмем SAVE (ту, которая слева вверху). Ищем папку куда сейвить, вводим шаблонное название (лучше сразу придумать нечно вроде YETA (Йети атакуе!!11), чтоб потом в слейде меньше переименовывать), выбираем GIF (палитровое, да и возни с фоном нет), и сейвим. Программа сохраняет сразу все выделенные фреймы.

Все, спрайты атаки вынуты. Можем их теперь и запостить куда-нить в фейсбук, и в дум вставлять. Кстати, сразу скажу о нумерации файлов -- нумерация спрайтов в CV 5.2 сплошная, первыми экстрагируются виды 2, 4, 6 и 8, далее 1, 3, 5, 7 -- это по системе Doom'а. Т.е. первые виды смотрят под углами 45 град, вторые строго на нас, налево, от нас , направо. Если не очень понятно, посмотрите сами файлы, думаю разберетесь.

Стоит оговориться, что даже если моб состоит только из торса, иногда приходится применять подход описанный ниже для получения разных цветовых оттенков монстра (т.к. CV 5.2 это не позволяет). С другой стороны, можно попробовать получить нужные оттенки трансляцией в декорейте, хотя это может быть непросто в случае d2 монстров.

Экспорт спрайтов составного монстра

Разберем теперь сложный случай, например скелет-лучник (сразу скажу, что большинство мобов -- составные). По вышеописанной схеме ИЩЕМ нужные нам файлы. Находим, что скелеты всех разновидностей хранятся в папке SK. Теперь будем работать паралельно в программе CV и merge_dcc, чтобы понять какие запчасти нам нужны.

Для начала, подготовим программу merge_dcc. Скопируем в папку tokens внутри этой проги папку SK со всем содержимым. Т.е. у нас в merge_dcc есть папка tokens, а в ней теперь лежит папка SK из mpq'ушника. Теперь откроем в текстовом редакторе (напр в блокноте) файл Merge_dcc.ini лежащий в корне merge_dcc. Формат работы программы описан в ReadMe, так что я приступлю сразу к практике, и вы все поймете. Запишем в ini первую строчку:

format=bmp

Поскольку там на выходе либо bmp либо pcx, выбираем меньшее из двух зол. Кстати если файл непустой, можете просто отредактить нужные строки.

CV 5.2 сейчас используем чисто как просмотрщик, экстрагировать файлы будем мерджем. Сразу надо решить, какую анимацию мы делаем, к примеру, что делаем анимацию атаки из лука. Кстати запишем это, про лучника я имею ввиду. Зайдем в папку COF в SK (можно и через CV 5.2) и увижим много файлов cof. Видим SKA1BOW -- это скелет стреляет (A1 -- атака, BOW -- лук). То что надо. Идем в блокнот и пишем вторую строчку:

cof=SKA1BOW

Это скажет проге какой набор мы выбрали.

Теперь собственно спрайты. Как я и говорил, вложенные папки (в SK) обозначают различные части тела (ну кроме COF понятное дело). Начнем с головы. Заходим в CV 5.2 в папку HD (head) и видим несколько файлов с куском имени A1BOW. А именно ...DESA1BOW (видим мегакрутой шлемак), ...HVY...(heavy -- тоже тяжелая броня), ...LIT... (light -- лысая черепушка), ...MED.. (medium -- чтото среднее). Сразу наверно стоит определиться с броней и выбирать впоследствии однотипные спрайты (чтобы не было на бошке мегашлем, а тело голое -- как то некузяво (: хотя можно). Итак, выбрали спрайт, допустим medium, идем в наш блокнот и добавляем еще строчку:

hd=med:0

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

Точно также подбираем остальные спрайты. В какой папочке видим слово A1BOW, такую строчку и прописываем. С соотв. обозначением типа спрайта (например, med). Можете также подглядывать в CV 5.2, если там допустим вы щит вставляете скелету-лучнику, то явно чтото не то (: Про смысл названий папочек я думаю вы уже поняли, HD голова, TR торс, LA и RA руки, LG ноги , LH ладошки (: В папках S1 - S# в случае скелетов хранятся всякие дополнительные штуки, типа наплечники какиенибудь или стрелы, воткнутые в щит. Но вернемся к нашим баранам, получаем в итоге:

format=bmp
cof=SKA1BOW
hd=med:0
la=med:0
lg=med:0
lh=sbw:0
ra=med:0
s1=med:0
s2=med:0
tr=med:0

Единственная запара была с левой кистью (LH), там не было med, но на этом месте там стояли другие три буквы -- SBW, их и пишем. Если будете писать неверные (лишние) состояния, программа заругается и напишет баг-репорт. Почитаете его, и выкините лишку. А вообще надо просто внимательно "изучать" названия файлов по слогам (: и все будет хорошо.

Итак, инструкция для проги написана, можно засейвить Merge_dcc.ini, закрыть блокнот и запустить merge_dcc.exe. В папочке появилось куча файликов (если как-нибудь не появится, то смотрите stderr.txt -- это баг-репорт). Сразу видите, что файлы Merge_dcc называет подругому, все спрайты одной проекции вместе. D00 -- это первый набор фреймов, смотрит прямо на нас, D01 смотрит где-то на 7-8 часов (т.е. левее), D02 смотрит строго влево и т.п. по часовой стрелке. Хотя порядок извлечения фреймов (видно по первым цифрам) такой же как в CV 5.2. Посмотрим теперь сами спрайты. Чтото какието зеленоватые вышли. Попробуем покрутить цыферки в конфиге. Удаляем спрайты, открываем ini файл, рисуем к примеру цифру 3 (везде вместо 0 пишем 3). Сейвим, закрываем, получаем слегка коричневых скелетов. Ну пусть будут. Можете поразвлекаться с цветами, а так же посмотреть прочие возможности merge_dcc, почитав readme файл.

Мы сделали анимации атак, но этого мало. Еще минимум надо сделать ходьбу (WL), боль (GH), и анимацию смерти (DT). Для состояния покоя можем взять спрайты ходьбы, а трупик нам нафиг не надо, трупиком будет последний фрейм анимации смерти (хотя у некоторых мобов изза кривости DT придется и DD спрайты тоже взять, но йети это не касается). По образу и подобию это сделать несложно. В случае с Йети просто юзаем CV 5.2, а для скелета ничего другого не меняя, просто прописываем разные COF в заголовке инишника -- SKDTBOW, SKGHBOW и SKWLBOW. И компилим, компилим, компилим (:

Импорт монстра в Hexen (Спрайты и Звуки)

Теперь у нас есть полноценный набор спрайтов. Приступим к адаптации этого добра допустим под Hexen. Открываем Slade3, создаем новый WAD файл. В нем создаем два новых entry: S_START и S_END. Между ними импортируем српайты. Желательно это делать небольшими порциями, переименовывая их по ходу парохода в читаемые декорейтом названия (напрмер, YETAA1, YETAA2 и т.д. -- это кстати надолго, б.ч. моего времени возни с d2 модом (кроме картостроительства) ушла на это). Напомню, что спрайт состоит из четырехбуквенного имени, буквы кадра и цифры проекции (либо 0, если со всех сторон одно и то же). Редактировать надо две вещи. Первое -- если спрайт был не гифовский, его надо сделать палитровым без фона (либо правой кнопкой на файле, GFX >> convert to, либо сразу группу спрайтов выделяем и справа жмем "convert GFX to", далее выбираем transparent color, жмем на цветной квадратик, определить цвет, и пишем цифры -- у merge_dcc этот цвет #AAAAAA (или Красный 170, Зеленый 170, Синий 170 -- серый)). Если видите что есть черный цвет допустим у призраков -- не парьтесь, его можно сделать прозрачным потом. Также в случае если интересна трансляция средствами движка, то даже если это gif из CV 5.2, выставьте получаемую палитру (справа) Hexen. Цвета чуть изменятся, зато translation будет делать намного проще (ибо палитра DiabloII ужасная). Не забудьте выставить чтоб это был paletted PNG, и конвертируйте.

Второе что надо редактировать -- это offset. Сначала можно сделать это автоматически (modify gfx offsets >> automatic offset - monster). Затем вы увидите, что моб м.б. летает над землей или его труп сильно торчит. Точно в том же меню теперь не ставите автомат, а пишете в ВТОРОМ поле (это координата высоты) к примеру -10 и ставите птицу relative -- это значит относительно уменьшить на 10. конвертите идете в игру смотрите как, потом повторяете если надо. Но это есесно когда уже декорейт написан. А пока хватит и автомата. Кстати, если моб летает, то редактить лучше всю серию спрайтов, а если труп торчит из земли, а так все ок, то можно только последние несколько спрайтов DT или вообще самый последний.

Предположим теперь, что у нас есть wad файл, а в нем куча правильно названных и сконвертированных картинок. Теперь озаботимся декорейтом. Я не буду тут по нему лекции читать, только кратенько. За полными мануалами обращайтесь сюда или на форум.

Для справки:
Что почитать про Decorate:

Создаем в WADе (не в рамках маркеров s_start/s_end, а лучше гденить в начале) entry DECORATE. В этот lump добавляем следующие строчки (если боителсь лажануть где-нибудь в синтаксисе или что-нибудь забыть, можно скопировать decorate-код например мумии из Heretic, и потом уже обстреляв ее из бфг (: увеличить ее размеры под спрайт):

Actor Yeti {
Monster
+FLOORCLIP
Health 280 // -- это определите эмпирически
Radius 30
Height 100
Mass 150
Speed 4 // -- эта и строчки выше отвечают за физику моба, опять же по результатам обстрела редактируем размеры.
PainChance 128 // -- как часто моб будет входит в pain state, сначала можно поставить такой чтобы потестить pain state
States // -- например такие состояния -- все зависит от названий ваших спрайтов
{
Spawn:
YETW A 10 A_Look // как видно, юзаем 1 фрейм ходьбы и не паримся
Loop
See:
YETW ABCDEFGHIJKL 2 A_Chase // здесь пишем все наши спрайты и ставим эту функцию
Loop
Melee:
YETA ABCDE 2 A_FaceTarget // а вот здесь уже придется подгадывать на каком фремя произвести удар
YETA F 2 A_CustomMeleeAttack(random(1,8)*2) // решили что это будет F фрейм
YETA GHIJKL 2
Goto See
Pain:
YETP ABCDE 2
YETP F 2 A_Pain
Goto See
Death:
YETD A 2
YETD B 2 A_Scream
YETD CDEFGHI 2
YETD J 2 A_NoBlocking
YETD KLMNOPQ 2
YETD R -1
Stop
Ice:
"----" A 5 A_GenericFreezeDeath // ну в случае Hexen еще допишем обморожение (:
"----" A 1 A_FreezeDeathChunks
Wait
}
}

Теперь можем проверить это чудо в игре. Запускаем в какомнить gzdoom или зандронуме и пишем в консоли summon yeti. Наверно, все хорошо работает, но хочется еще и звуков. Для этого пойдем туда, куда вы распаковали D2SFX.MPQ. Заходим в global >> sfx >> Monster >> Yeti. Выбираем теперь любой понравившийся звук из каждой группы (attack, neutral, death, gethit). Из neutral можно взять 2, один будет seesound, другой activesound. Теперь импортируем эти файлы в WAD с помощью Slade, ЗА ПРЕДЕЛАМИ маркеров S_START и S_END! Создадим теперь entry SNDINFO. Там пишем по-строчно слева идентификатор в игре, справа название звукового файла (поскольку все равно в wad короткие имена файлов, можете просто дублировать их и обращаться по этим же именам. Если не запутаетесь). К примеру:

yetn1 yetn1
yeta yeta
yetd yetd
yetp yetp
yetn2 yetn2

Далее прописываем эти звуки в декорейте, добавляем строчки в нашего actor'а:

SeeSound "yetn1"
AttackSound "yeta"
PainSound "yetp"
DeathSound "yetd"
ActiveSound "yetn2"

Все можно идти в игру и тестировать, все должно звучать.

Прочие моменты

Коснусь еще пары моментов. Во-первых, есть ведь не только монстры, скажете вы, а еще и снаряды, эффекты и т.п. Отвечаю -- да есть, но к примеру, многие снаряды смотрятся в doom уже не так хорошо как мобы (сказывается высота птичьего полета). Кроме того, учтите что снаряды в D2 имеют не 8 измерений, а гораздо больше. Тем не менее, технически все делается по тому же образу и подобию. Поэтому в данной статье укажу лишь места хранения ресурсов: global >> missiles (снаряды), global >> overlays (всякие ауры и скилы), global >> items (шмотки -- вряд ли полезно для нас, но можно потырить иконки), global >> objects (ряд полезных вещей типа городского портала) и global >> uncompoverlays (не оч надо). Звуки к прочим штукам соотв также хранятся в global >> sfx. Если вас интересуют всякие речевые обороты, taunts типа "Not even death can save you from me", то для этого распакуйте D2SPEECH.MPQ, оно все там, в соотв. акте в папке Monster.

Во-вторых -- а что же насчет изобилущих в Д2 спрайтов с черной каймой?! Эта проблема решается очень легко - пишите в DECORATE в свойствах актора:

RenderStyle "Add"
Alpha 1.0

Как можно видеть на примере первого скриншота в начале статьи, движок отрендерил спрайты молнии сходным с Д2 образом (Ремарка -- еще спрайты подсвечены динамическим светом, который задается лумпом GLDEFS). Конечно можно было бы делать rgb спрайты с прозрачностью, но во-первых их дольше делать, во-вторых они больше весят, а в третьих если это моб, то анимация заморозки в Хексен работать не будет, если спрайт непалитровый (т.к. движку не провести трансляцию).

В данном руководстве я намеренно очень поверхностно коснулся импорта в игру, сфокусировавшись в первую очередь на вынимании ресурсов из D2. Если у вас есть вопросы по второй части балета, вы также можете задать их здесь или на форуме.

Категория: FAQ | Добавил: Heretic (2013-07-27) | Автор: Alex
Просмотров: 7912 | Комментарии: 1
Всего комментариев: 1
1 TancreDim  
Гайд шикарный, жаль только что ты не наткнулся тогда на ReNamer - как раз сэкономил бы уйму времени. Идеальная прога для сложных переименований.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Логин:
Пароль:

Статистика
Locations of visitors to this page


Статистика


Hexen 2 Russian Fans © 2006-2024 Хостинг от uCoz