Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
  • Страница 1 из 1
  • 1
Модератор форума: denis2000, FantomICW  
Форум » Моды для игр » Модостроение » Азбука модмейкера (Для начинающих модмейкеров)
Азбука модмейкера
XOBAHДата: Сб, 28.01.2012, 16:42 | Сообщение # 1
Техник Вольных
Вольные сталкеры
Сообщений: 912
Награды: 21
Репутация: [ 984 ]

Эта тема поможет Вам влиться в мир моддинга последней вышедшей игры серии S.T.A.L.K.E.R. – Call of Pripyat, или же по-русски: Зов Припяти.
Перед созданием своего мода Вам стоит определиться, что Вы хотите получить в итоге: текстурный, сюжетный, геймплейный или же глобальный мод. Определите его идею, концепцию. Запишите задачи, если работаете в команде, то разделите их на всех, чтобы никто не делал одну и туже задачу. Строгой очередности при создании мода – нету, и быть не может, потому что все зависит только от Вас.
Не изобретайте велосипеды, посмотрите на другие моды и достаньте «велосипед» оттуда, только не забывайте указывать авторов мода, откуда была взята наработка. Но и не стоит просто копировать «велосипед», проверьте его на лишние, неправильные запчасти. Велосипед будет ездить с тремя педалями и погнутым колесом, но нужна ли нам третья педаль, и хорошо ли ездить с погнутым колесом? Однозначно нет, поэтому проверяйте.
По выпуску мода не спешите его выкладывать в сеть, организуйте своему моду ЗБТ (Закрытое Бета Тестирование) или ОБТ (Открытое Бета Тестирование). Не стоит полагаться на то, что Вы прошли мод и багов нету, потому что у всех игроков своя манера прохождения игры, и то, что Вы никогда бы не сделали, может постоянно делать Вася Пупкин из Зеленогорска. И Вася потеряет интерес к моду, если он будет вылетать каждый час. Поэтому устраивайте тестирование своим продуктам.

[cut=Начало работы]Все игровые ресурсы хранятся в db-архивах, и для начала их нужно распаковать. Для их распаковки можно использовать программу S.T.A.L.K.E.R. Universal Extractor (SUE) от товарища Dordex.
Использовать ее просто: Запускаете программу, выбираете игру (у нас это Зов Припяти) и выбираете корневую папку. После этого программа все распакует в папку gamedataUE (папка будет лежать в корневой директории игры).
Так как эта папка игрой никак не воспринимается, мы будем брать из нее необходимые файлы и ложить их по тому-же пути, но в папку gamedata.[/cut][cut=Содержимое архивов]
  • Ai – Содержит файлы отвечающие за коэффициенты вероятностей игровых событий, но это не факт. Не редактируются, за неимением средств для редактирования.
  • Anims – Содержит файлы пост эффектов, анимаций камеры и некоторых объектов. Содержат 2 вида файлов:
    [indent]
    • *.ppe – Файлы пост эффектов, редактируются утилитой PostProcess Editor из состава X-Ray SDK COP;
    • *.anm – Файлы анимаций камеры и объектов, компилируются и декомпилируются утилитой anm2ltx. Также создаются программой Level Editor из состава X-Ray SDK COP
    [/indent]
  • Configs – Содержит файлы с параметрами практически всех объектов в игре. Содержат 2 вида файлов:
    [indent]
    • *.xml – Файлы со стандартным XML синтаксисом, можно редактировать любым текстовым (но не офисным) редактором, но лучше для этих целей подобрать редактор с подсветкой синтаксиса, например: Sublime Text 2, Notepad++; Также, для проверки может послужить и браузер Opera: Если он найдет ошибку, он вежливо укажет нам на нее.
    • *.ltx – Файлы с MS-INI синтаксисом, подойдут программы представленные выше.
    [/indent]
  • Levels – Содержит папки игровых локаций. Редактируются посредством компилятора\декомпилятора X-Ray Game Asset Tool Converter и X-Ray SDK COP
  • Meshes – Содержит 3D-модели игры в формате *.ogf. Посмотреть их можно в программе OGFViewer. Редактировать их можно в 3D-редакторах со специальными плагинами импорта\экспорта. Такие плагины есть для Maya (7.0, 8.0, 8.5, 2008, 2009, 2010, 2011, 2012), 3DS Max (8.0, 9.0, 2008, 2009, 2010, 2011, 2012), Milkshape и LightWave 8.0
  • Scripts – Содержит скриптовые файлы игры, написанные на языке LUA. Для редактирования сгодятся выше представленные утилиты - Sublime Text 2, Notepad++.
  • Shaders – Содержит файлы шейдеров для рендеров (r1 - статическое освещение, r2 - динамическое, r3 - улучшенное динамическое). Редактируются утилитой ShaderEditor из состава X-Ray SDK COP
  • Sounds – Содержит все звуковые файлы игры в формате *.ogg. Этот формат поддерживают множество конвертеров, но обычной конвертации не хватает. Файлы необходимо еще прокомментировать в ActorEditor из состава X-Ray SDK COP, делается это для того чтобы игра (точнее ее объекты) правильно обрабатывали эти звуки.
  • Spawns – Содержит один единственный файл, сердце всей игры - all.spawn. В этом файле хранятся данные о местоположении всех динамических (не "приклеенных" к карте) объектов в игре, за исключением скриптовых. Этот файл считывается всего один раз - при новой игре, поэтому после малейшего его изменения нужно начинать новую игру, за исключением правок вейпоинтов (точек путей). Декомпилировать и компилировать его может только одна утилита – ACDC.
  • Textures – Содержит текстуры и видеоролики игры, а также файлы *.seq, которые используются при создании анимаций
    [indent]
    • *.dds – Текстуры. Смотреть можно через XnView и Windows Texture View (WTV), а редактировать можно в Adobe Photoshop, Paint.NET, GIMP - но для всех необходимо скачивать дополнительный плагин для работы с форматом DDS (подробнее о формате DDS)
    • *.thm – Файл параметров текстур. Создается в ActorEditor из состава X-Ray SDK COP
    • *.seq – Файл для создания последовательности кадров из текстур. Редактируется любым текстовым редактором.
    • *.ogm – Видеофайл формата *.ogv (OGG Theora Video), можно переконвертировать с помощью Xilisoft Video Converter Ultimate
    [/indent]
    [/cut]

 
XOBAHДата: Сб, 28.01.2012, 23:54 | Сообщение # 2
Техник Вольных
Вольные сталкеры
Сообщений: 912
Награды: 21
Репутация: [ 984 ]

Поподробнее о...
[cut=Файлах формата LTX]Файл состоит из секций, их параметров и комментариев.
Секция – это блок свойств одного объекта, которыми будет манипулировать игра
Параметр – это переменная характеризующая то или иное свойство объекта.
Комментарий – это строка, помогающая улучшить читабельность кода, в игре она никоим образом не учитывается. Комментарии идут за знаком “;” до конца строки.
Помимо этих трех терминов существует еще 2 операции:
  • #include "file_path" - Отвечает за включение дополнительного файла для обработки, его использование рассмотрим чуть ниже
  • Наследование родительских секций (об использовании чуть ниже) – Чтобы не писать кучу параметров, можно их унаследовать от ранее заявленной секции и чем больше они схожи, тем меньше придется заполнять новую секцию.
Мы рассмотрели термины и операции, но не увидели как они выглядят вживую, давайте это исправим.
[table][tr][td]#include "addition/file.ltx"
; Первая секция
[section_parent]
$class = WP_LR300

[section_first]
$class = WP_SVD ; Класс объекта
cost = 2000 ; Номинальная цена
name = section_first_name ; Ссылка на имя отображаемое в игре (ссылка ведет на файлы локализаций)

[section_second]:section_parent
cost = 2500
descr = section_second_descr ; Ссылка на описание отображаемое в игре

[section_third]:section_first,section_second
name = section_third_name[/td][/tr][/table]
В вышепредставленном листинге можно увидеть добавление доп. файла (1 строка), 4 секции (section_first, section_second, section_third, section_parent), параметры с их значениями ($class, cost, name, descr), использование родительских секций (section_first и section_second для section_third, section_parent для section_second).
Из вышеперечисленного следует объяснить пожалуй использование нескольких родительских секций у section_third:
Первоначальные значения секция наследует от section_first (т.е. мы получаем переменные: $class = WP_SVD, cost = 2000, name = section_first_name), но затем наследует параметры section_second, который в свою очередь наследует параметры от section_parent (мы получаем параметры: $class = WP_LR300, cost = 2500, descr = section_second_descr). Теперь наложим друг на друга эти параметры (не забываем параметры из самой section_third), я представлю это Вам в виде таблицы:
[table][tr][td]
section
[/td][td]
$class
[/td][td]
cost
[/td][td]
name
[/td][td]
descr
[/td][/tr][tr][td]section_first[/td][td]WP_SVD[/td][td]2000[/td][td]section_first_name[/td][td][/td][/tr][tr][td]section_second[/td][td]WP_LR300[/td][td]2500[/td][td][/td][td]section_second_descr[/td][/tr][tr][td]section_third[/td][td][/td][td][/td][td]section_third_name[/td][td][tr][td]На выходе имеем:[/td][td]WP_LR300[/td][td]2500[/td][td]section_third_name[/td][td]section_second_descr[/td][/tr][/table]
Как можно заметить из таблицы, использование первой родительской секции (section_first) не оправдано, ибо все параметры были изменены в ходе операций.[/cut][cut=Файлах формата XML]Файл XML визуально можно представить как дерево. В XML файле должны обязательно присутствовать:
  • Строка объявления кодировки текста. Для “Зов Припяти” эта строка выглядит так:[indent]
    • <?xml version='1.0' encoding="windows-1251"?>
    [/indent]
  • Корневой элемент – это главная “нода”, единственная на весь файл (и на все включенные в него файлы), в которую “вкладываются” остальные ноды
Выше мы затронули слово “нода”, давайте объясню что это:
Нода – (от англ. node - узел) это совокупность тегов, их атрибутов и содержимого.
Рассмотрим одну ноду: <tag attrib_1=”value_1” attrib_2=”value_2”>content</tag>
Здесь tag – тег, attrib_1 и attrib_2 – атрибуты тега tag, value_1 и value_2 – значения атрибутов attrib_1 и attrib_2 соответсвенно, content – содержимое тега определяемое началом тега (<tag>) и его концом (</tag>)
В XML-файлах тоже есть комментарии, они являются многострочными, т.е. их необходимо закрывать. Открываются комментарии этим сочетанием “<!--”, закрываются “-->”. Приведу пример: <!-- Тут может быть Ваш комментарий] -->
Также, в XML-файлах есть возможность добавлять внешние файлы операцией #include, но тут есть одна особенность: В дочернем файле (файл который вы добавили) нужно писать теги от ноды родительского файла. Как пример могу привести следующий листинг:
[table][tr][td]
Родительский файл
[/td][td]
Дочерний файл (file_2.xml)
[/td][/tr][tr][td]<?xml version='1.0' encoding="windows-1251"?>
<root>
#include "file_2.xml"
<node_1>
<tag_1>Tag number 2</tag_1>
<tag_2 />
</node_1>
</root>[/td][td]<node_2>
<tag_1>Tag Second</tag_1>
<tag_2 />
</node_2>[/td][/tr][/table]
Как вы заметили, ноды наследуются друг от друга (tag_1 и tag_2 от node_1 и node_2), обязательно закрываются (в листинге использовался новый тип закрытия - <tag /> – его полезно применять когда содержимое тега отсутствует, ну и мы увидели цель листинга – использование внешних файлов. В дочернем файле мы не писали ни корневой элемент (root), ни строку объявления кодировки файла.[/cut][cut=Файлах формата SCRIPT]В скриптах игры используется такой язык программирования, как Lua.
Следует отметить его особенности:
  • Регистрозависимость – это означает, что слова “word” и “Word” будут разными, следует это уяснить раз и навсегда, иначе Вы можете долго искать свою ошибку.
  • Динамическая идентификация типа переменной – это означает, что нам не нужно ассоциировать переменную с ее типом, интепретатор сделает это за Вас.[indent]
    • Как понять “ассоциировать переменную”: Это значит, что одна переменная может воспринимать в различных ситуациях с различным типом. То есть имея переменную со значением 765 при математических выражениях (например: сложения) она будет воспринимать как integer (целочисленное значение), а при выводе переменной, допустим, в лог, она уже будет обрабатываться как string (строка)
    [/indent]
В Lua функции, по строению, отличаются от процедур только наличием оператора “return” в своем теле, остальное аналогично процедурам. А по смыслу, функции возвращают информацию движку (проверка, результат подсчета), а процедуры являются последовательностью команд (создание объектов).
Давайте разберем код:[table][tr][td]-- Функция получающая 2 аргумента
function listing_script(item, item_2)
local actor = db.actor
object = actor:object(item)
return object
end[/td][/tr][/table]
Итак, первая строка в листинге является однострочным комментарием (“--”), есть еще и многострочные, начинаются они с “--[[“, а заканчиваются знаками “]]
Далее идет создание функции listing_script с двумя аргументами item и item_2, item_2 я создал специально для того, чтобы продемонстрировать передачу нескольких аргументов. Третья строка, начинающаяся с оператора local, будет объявлением локальной переменной объекта (эта переменная будет недоступна для внешних обращений, т.е. для внешних функций), за ней идет простое объявление переменной object, которая вернет Булево значение (true - истина, false - ложь) в зависимости от наличия предмета, переданного в первом аргументе, у ГГ. Также стоит отметить, что db.actor – вызов функции actor из файла db.script, синтаксически это показано точкой. Двоеточие же в actor:object() говорит о том, что вызывается метод класса actor (функция, с помощью которой можно обращаться к параметру класса). Ну и последняя функция
вернёт наше true или false туда, где функция вызывалась. Пример, local a = listing_script("af_medusa"). Переменная “a” будет истинной, если у героя есть артефакт "Медуза" (af_medusa).
Теперь касаемо использования этих самых скриптов в игре S.T.A.L.K.E.R.:
  • Глобальные функции и процедуры хранятся в файле _g.script – Глобальность этих функций состоит в том, что их можно использовать не вводя имя файла.
  • Функции для использования из логики объектов хранятся в файле xr_conditions.script – Их используют в логике со специальными знаками: “!” - отрицание (то есть неравно) и “=” - равно
    [indent]
    • Проверка организуется в фигурных скобках (“{” и “}”), приведу пример на основе того-же скрипта из листинга: “{=listing_script("af_medusa")}”. Условие выполнится только если у ГГ будет артефакт.
    [/indent]
  • Процедуры для использования из логики объектов хранятся в файле xr_effects.script – Их используют из логики со знаком “=
    [indent]
    • Использование процедур организуется знаками процента (“%”), приведу пример (скрипта нету, ну ладно, главное показать использование): “%=spawn_object("af_medusa") =spawn_object("wpn_pm")%”. Тут будут выполняться сразу 2 процедуры spawn_object с разными аргументами, конечно-же можно использовать и разные процедуры. Использование нескольких процедур будет аналогично использованию нескольких функций.
    [/indent]

Остальные скрипты можно писать в любом файле (можно создавать и свои) и их использование будет следующим: <имя_файла>.<имя_функции|имя_процедуры>(<передаваемые_аргументы_если_есть>)
Обратите внимание, что при вызове функций и процедур из диалогов невозможно передавать аргументы, т.е. вызов будет следующим: <имя_файла>.<имя_функции|имя_процедуры>
Об lua можно подробно почитать на оф. сайте, а также, на сайте AMK-Team есть очень полезная информация по функциям и классам в этой теме[/cut][cut=Файле all.spawn]С этим файлом возможно работать только после его декомпиляции perl-утилитой ACDC. Для работы ACDC необходимо установить библиотеку AcrivePerl.
Мало того, что для каждой игры необходима своя версия утилиты, так ее еще и правят под свои нужды моддеры, но есть выход – Universal ACDC. Сия утилита способна распаковать любую часть игры, а также подавляющего большинства модов. Ей мы и будем пользоваться.
После декомпиляции мы получим по два файла к каждой локации (alife – хранящим в себе все спавн-элементы игры и way, содержащим в себе точки путей для объектов), “all.ltx” – связывающий файл для последующей компиляции, “section4.bin” – хранящий в себе графпоинты игровых локаций, “section2.bin”[/cut][cut=Файлах формата DDS]В этих файлах хранятся текстуры игры.
В файлах вида название_текстуры_bump.dds хранятся карты высот. Они отвечают за реализацию эффекта рельефности на плоскостях (поподробнее о bump-mapping’e).
Файлы вида название_текстуры_#bump.dds хранят карты бликов, отвечающие за интенсивность отражения света поверхностью.
Чаще всего одному объекту соответствуют две или три текстуры.[/cut][cut=Файлах формата OGM]В этих файлах хранятся все ролики игры. Стоит учесть, что эти ролики идут без звуков, звуки к роликам присоединяются в игре самостоятельно (по ранее указанным наводкам в конфигах).[/cut][cut=Файлах формата THM]В этих файлах соотносятся параметры для текстур (такие как: бампы, материал, шейдер...). Создать их можно только в ActorEditor[/cut][cut=Файлах формата OGG]Распространенный аудио формат файлов в играх. Многие конвертеры с ним справляются, но нам нужно перегонять в формат WAV, с которым справляются все приличные конвертеры. Зачем перегонять в WAV если игра читает только OGG? Как уже писалось выше – Нам необходимо выставлять параметры в SDK, чтобы звуки правильно обрабатывались игрой, а SDK понимает только “вавки”.[/cut]


 
XOBAHДата: Вс, 29.01.2012, 00:43 | Сообщение # 3
Техник Вольных
Вольные сталкеры
Сообщений: 912
Награды: 21
Репутация: [ 984 ]

Тривиальные задачи
[cut=Скопировать иконку объекта из одного мода в другой]Для упрощения задачи мы будем использовать S.T.A.L.K.E.R. Icon Editor 0.6.3 (SIE), скачать его можно здесь
Итак, запускаем программу и открываем файл (File → Open → mod_gamedata\textures\ui\ui_icon_equipment.dds) из которого мы будем брать иконку объекта, после открытия первого файла открываем наш (File → Open → gamedata\textures\ui\ui_icon_equipment.dds). В итоге мы имеем две вкладки: Первая - файл с необходимым нам ресурсом, а вторая - Наш файл).
Переходим в первую вкладку и выделяем интересующую нас иконку, затем жмем правой кнопкой по выделенному участку и жмем “Копировать”.
Переходим во вторую вкладку, ищем свободный участок под скопированную иконку, щелкаем правой кнопкой и выбираем “Вставить”, затем окончательно подгоняем иконку на положенное ей место и щелкаем ЛКМ.
Для получения координат положения иконки выделяем ее, жмем ПКМ и выбираем “Информация о выделении...”. Выведется отдельное окошко с необходимыми нам данными, которые затем нужно будет подставить в секцию предмета.
Сохраняем наш файл и всё готово

[/cut][cut=Найти имя секции предмета или персонажа, по его имени\названию]В игре запоминаем название предмета, для примера будем искать “Хлеб”.
Итак, выходим из игры и запускаем NotePad++\SublimeText2 и нажимаем хоткей “ctrl+shift+f”, который запустит нам “Поиск по файлам”.
В строку поиска вводим наш предмет в тегах text – будет выглядеть вот так: “<text>Хлеб</text>” (можно искать и без тегов, но тогда вы получите больше мусора), где искать указываем “configs\text\rus\” и нажимаем “Поиск”.
Итак, мы нашли ноду:
[table][tr][td]<string id="st_bread">
<text>Хлеб</text>
</string>
[/td][/tr][/table]
Нам нужен отсюда идентификатор – st_bread, копируем его и ищем далее:
В строку поиска вводим наш идентификатор (st_bread), где искать:
  • Персонажей – configs\gameplay
  • Артефакты, квестовые предметы, приборы, детекторы, броню – configs\misc
  • Оружие – configs\weapons

Но, если вы не можете найти ID в этих папках – Ищите по всей папке configs.
[indent]Также полезность: Если вы используете для поиска редактор с поддержкой регэкспов (т.е. регулярных выражений) то можете искать для:
  • Персонажей – <name>ID</name> (регэкспы не нужны, поэтому подойдет для всех редакторов)
  • Предметов – name\s+\=\s+ID (тут пошел простой регэксп “\s+” обозначающий повторение любого пробельного символа)
[/indent]Вот Вы и нашли свой драгоценный файл, теперь для:
  • Предметов – Листайте файл вверх, ища секцию этого параметра (у нас это “bread”)
  • Неписей – Ищите родительскую ноду “specific_character”, найдя ее, посмотрите на значение аттрибута id – это и есть, то, что Вы искали.

Также, у той-же ноды “specific_character” есть дочерний тег supplies, содержащий предметы в инвентаре NPC (также посмотрите содержимое файлов, что добавлены инклюдом)
Возможно, найдя NPC вам потребуется файл его логики, что-ж, ищем дальше.
Различают два вида подключения логики к NPC: Через смарт-террейн и через спавн-секцию, к сожалению, узнать из игры как подключен NPC можно только дедукцией Шерлока Холмса, поэтому пробуйте два:
  • Смарт-террейн. Логика неписю присваивается посредством проверки “тот или не тот NPC”, поэтому искать будем эту самую проверку с необходимым нам аргументом. Найденный файл и есть его логика:[indent]
    • Что: check_npc_name(ID); Где: configs\scripts\
    [/indent]
  • Спавн-секция. Логика неписю присваивается посредством значения custom_data, в которой указывается путь к логике относительно папки configs. Поэтому будем искать ID непися в папке configs\creatures\[indent]
    • С помощью регэкспов будем искать: character_profile\s+\=\s+ID
    [/indent]

Вот наши поиски и окончились
[/cut][cut=Как узнать какие текстуры и анимации использует модель, а также, как их изменить]Можно пойти 3-мя вариантами – Через SDK, через Milkshape, через HEX-редактор.
Пойдем от наиболее правильного способа.
[cut=X-Ray SDK]Для того чтобы работать с моделью в SDK нам потребуется ее декомпилировать.
Декомпилировать будем утилитой X-Ray game asset converter (11 jan 2012)
Создаем папку, кладем в нее файл converter.exe из архива и копируем файл модели, текстуры которой мы хотим узнать\изменить.
Создаем bat-файл (обычный txt файл с расширением bat), или-же запускаем командную строку, кому как удобнее. Я буду работать с батником, поэтому заполняю его:[table][tr][td]converter.exe -ogf -object <source_file>[/td][/tr][/table]Я буду работать с обрезом “wpn_bm16.ogf”:[table][tr][td]converter.exe -ogf -object wpn_bm16.ogf[/td][/tr][/table]Теперь запускаем батник и получаем нашу модель в формате object. Копируем ее в папку import установленного SDK (это необязательно, просто для удобства открытия).
Открываем модель в ActorEditor из состава SDK 0.6 (да-да, 0.6 – это SDK 0.5 + Patch, делаем это из-за того, что SDK COP покорежит нашу модель при экспорте в OGF-файл, но если вы не собираетесь править текстуры, то это необязательно): File → Load → /import/wpn_bm16.object
Если хотите использовать SDK младше 0.7 версии в WinVista, Win7 то следует дописать в батник запуска редактора параметр -editor
Далее, смотрим раздел “Object Items” и в этом разделе открываем ветку “Surfaces”. В этой ветке хранятся все текстуры объекта, в моем случае она всего-лишь одна. Переходим на любой элемент ветки и смотрим значение параметра “Texture” – это и есть путь к текстуре. Чтобы его изменить нужно произвести двойной щелчок по строке (или нажать 1 раз на многоточие) и выбрать новую текстуру, но сначала их нужно еще и скопировать в папку gamedata вашего SDK.
После всех манипуляций экспортируйте Ваш файл в формате OGF: File → Export → Export OGF...
Ваше дело сделано, осталось воткнуть файл на его положенное место в Вашей папке мода.
Анимации можно посмотреть в ветке “Motions” раздела “Object Items”. В этой ветке есть параметр «Motions Reference», который и содержит в себе ссылки на подключенные анимации. В том-же окошке можно подключать и свои анимации (с учетом того, что эти файлы есть в папке SDK\gamedata\meshes\).
[/cut][cut=MilkShape 3D]Работать мы будем в MilkShape 3D 1.8.5b1beta2 у меня вылет на рабочий стол при использовании плагина), а также плагин импорта\экспорта объектов S.T.A.L.K.E.R
Программу необходимо зарегистрировать для использования плагинов, поэтому идем и регистрируемся (Help → About → Register)
Итак, открываем наш файл File → Import → S.T.A.L.K.E.R.;
Переходим в Tools → Model Information 1.7
Смотрим там ветку Material (Textures), из этой ветки выбираем один из материалов и смотрим параметр Diffuse Texture (обычная текстура), Alpha Texture (текстура канала прозрачности, вроде в игре не используются, т.к. это делается через обычную текстуру). Путь из этих параметров будет формироваться из содержимого файла xray_path.ltx, но Вы все равно определите относительный путь к текстуре.
Если все-же Вы решили что-то поправить и сохранить текстуру – то экспортировать модель в SDK нужно через File → Export → S.T.A.L.K.E.R и указать имя сохраняемого файла с расширением object!
Просмотр анимаций не предусмотрен.
[/cut][cut=HEX-Редактор]Будем работать с программой WinHex 16, на примере артефакта af_blood.ogf
Открываем модель с помощью этой программы (не забудьте ее зарегистрировать, а то Вы не сможете сохранять файлы весящие больше 200 кб) и ищем там строку “models\model” (это материал текстуры, в большинстве своем он указан как models\model).
Найдя эту строку, смотрим не на нее, а на слова перед ней – От пробела (в хексе 00) до пробела перед models\model и будет написан путь к нашей текстуре.
Изменять путь можно путем замены символов в существующем пути, т.е. Вы не должны изменить количество символов в пути, иначе вы сломаете модель и она не будет работать.
Увидеть подключенные анимации можно в самом конце файла.
[/cut][/cut]


 
XOBAHДата: Пн, 13.02.2012, 21:06 | Сообщение # 4
Техник Вольных
Вольные сталкеры
Сообщений: 912
Награды: 21
Репутация: [ 984 ]

[cut=Получение координат]Рассмотрим два способа. Первый будет получением координат в реальном времени (координаты будут выводиться на экран в игре), а второй будет выводиться к нам в новости (если чуть подредактировать скрипт, можно будет добиться того, чтобы он выводился еще и в файл).
[cut=Способ #1]Находим в файле scripts/bind_stalker.script функцию actor_binder:update(delta) и добавляем в ее конец (перед словом end) название будущей функции: actor_pos()
Получилось так:[table][tr][td]pda.fill_sleep_zones()
actor_pos()
end
[/td][/tr][/table]
[cut noguest=.]
[/cut]
Далее, добавим саму функцию в конец файла:[table][tr][td]function actor_pos()
local lvid, gvid, pos, dir = db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor: position(), device().cam_dir -- Объявление и назначение переменных
local apos_string = string.format("lvid: %d gvid: %d pos: %1.6f, %1.6f, %1.6f dir: %1.6f, %1.6f, %1.6f\\n", lvid, gvid, pos.x, pos.y, pos.z, dir.x, dir.y, dir.z) -- Текст сообщения
local hud = get_hud()
local apos = hud:GetCustomStatic("apos_text")
if apos == nil then
hud:AddCustomStatic("apos_text", true)
apos = hud:GetCustomStatic("apos_text")
else apos:wnd():TextControl():SetText(apos_string)
end
end
[/td][/tr][/table]Содержимое и обновление этого самого содержимого готово, осталось вывести его на экран. Лезем теперь в configs/ui/ui_custom_msgs.xml и добавляем в конец:[table][tr][td]<apos_text x="300" y="10" width="700" height="30" complex_mode="1">
<text font="letterica16" r="255" g="220" b="30" a="255" align="l"/>
</apos_text>
[/td][/tr][/table]Разберем структуру последней вставки:
Первая строка содержит информацию о блоке (фрейме), где будет храниться наш текст:
  • x, y – Координаты верхнего левого угла фрейма для нашего текста
  • Width, height – Ширина и высота соответственно, нашего фрейма
Вторая строка содержит информацию о виде текста:
  • Font – Название шрифта
  • Rgba – Цвет текста в формате RGBA
  • Align – Выравнивание (l\c\r)
[/cut][cut=Способ #2]Второй способ более удобен в получении координат (конкретно для меня), поэтому пишем функцию аналогичную вышеприведенной:[table][tr][td]function actor_pos()
local lvid, gvid, pos, dir = db.actor:level_vertex_id(),db.actor:game_vertex(),db.actor tongue osition(), device().cam_dir
local text = string.format(“position: %1.6f, %1.6f, %1.6f\\nlevel_vertex: %d\\ngame_vertex:%d\\ndirection: %1.6f, %1.6f, %1.6f”, pos.x, pos.y, pos.z, lvid, gvid, dir.x, dir.y, dir.z)
news_manager.send_tip(db.actor, text, nil, "recent_surge", nil, nil)
end
[/td][/tr][/table]Функцию запишем в новый файл scripts/mod.script (можете воткнуть и в другое место, если разбираетесь)
Далее, эту функцию нужно вызывать откуда-то... Давайте повесим обработчик на нажатие клавиши F6 в главном меню.
Открываем файл scripts/ui_main_menu.script и ищем в нем следующие строки:[table][tr][td]if dik == DIK_keys.DIK_Q then
self:OnMessageQuitWin()
end
[/td][/tr][/table]Добавим в конец этого условия (т.е. до end) следующие строки:[table][tr][td]elseif dik == DIK_keys.DIK_F6 and db.actor~=nil then
self.OnButton_return_game() -- Выходим из меню
mod.actor_pos() -- Вызываем функцию получения координат (actor_pos) из файла scripts/mod.script
[/td][/tr][/table]Все готово, захотите получить координаты – заходите в игру, нажимайте ESC->F6 и координаты на экране.[/cut]
[/cut][cut=Читерим ГГ]Большинство параметров ГГ хранится в файле configs\creatures\actor.ltx;
Давайте рассмотрим параметры защиты ГГ на разных уровнях сложностях.
За это отвечают значения параметров секций вида actor_immunities_gd_(novice|stalker|veteran|master), чем они больше, тем больше урона получает ГГ. Давайте посмотрим, что за что отвечает:[table][tr][td]burn_immunity
strike_immunity
shock_immunity
wound_immunity
radiation_immunity
telepatic_immunity
chemical_burn_immunity
explosion_immunity
fire_wound_immunity[/td]
[td]Термо-защита
Гашение удара
Электрозащита
Защита от разрывов
Радио-защита
Пси-защита
Химзащита
Защита от взрывов
Пулестойкость
[/td][/tr][/table]Также, посмотрим как изменить макс. переносимый вес ГГ:
Для этого нам нужно 2 файла: файл взятый выше и файл configs\system.ltx
В actor.ltx отредактируем параметр max_walk_weight который отвечает за максимальный вес при котором ГГ может двигаться, а в файле system.ltx поправим вес, который ГГ может таскать не напрягаясь, за это отвечает параметр max_weight
[/cut][cut=Получаем полезную информацию из лога]Лог-файл помогает нам узнать полезную информацию не только об фатальных ошибках, но и от простеньких ошибках, из-за которых игра даже не вылетает, но есть и еще одно использование, оно скорее статистическое – получение информации об размере использованных текстур (напрямую влияет на размер занимаемой ОЗУ компьютера), и скриптов мода.
Найти лог-файл можно посмотрев файл fsgame.ltx который лежит в корне игры. За место сохранения там отвечает переменная $logs$ ($logs$ = true| false| $app_data_root$ |logs\), за путь к папке отвечает последние два участка (может быть и один, лучше опустите все true и false, и останется только путь к папке), здесь - $app_data_root$\logs\; смотрим выше на значение переменной $app_data_root$, у меня путь уже отредактированный, там просто написано users\, следовательно, путь к логам у меня будет таков: STALKER COP\users\logs\, т.е. в корне игры, что очень удобно.
Вид вылета критического:[table][tr][td]Expression : Тип ошибки, обычно fatal error, что означает фатальная ошибка
Function : Функция движка приведшая к вылету
File : В каком модуле (движка) произошел вылет
Line : Линия модуля движка с ошибкой
Description : Описание ошибки
Arguments : Основная информация о вылете, содержит информацию об ошибке мода, такие как файл в котором допущена ошибка, строка с допущенной ошибкой, объект или иные аргументы…[/td][/tr][/table]Мододелам, как правило более всего интересна последняя строчка arguments, но и из верхних строчек тоже можно выяснить информацию об вылете, поэтому часто требуют весь блок вылета.
Например, несколько вылетов:[table][tr][td]Can't open section 'cost_wpn_ak74'[/td][td]Движок не может найти секцию cost_wpn_ak74[/td][td]Необходимо создать эту секцию, или же исключить ее использование[/td][/tr]
[tr][td]Not enough storage is available to process this command.[/td][td]Движку не хватает памяти для обработки команды[/td][td]Оптимизировать компьютер, или же отредактировать скрипты приведшие к вылету[/td][/tr]
[tr][td]scripts\sgm_blackday.script:119: attempt to index local 'g_selected_point' (a nil value)[/td][td]В файле scripts\sgm_blackday.script на 119 строке идет попытка обратиться к переменной g_selected_point, а она неопределенна (равна nil)[/td][td]Отредактировать скрипт, добавить проверки перед использованием[/td][/tr][/table]Теперь несколько некритичных вылетов:[table][tr][td]! Can't find texture 'amk\amk_ballon_texture'[/td][td]Движок не может найти текстуру, поэтому будет использовать модель без текстур (модель будет темно-синей)[/td][td]Добавить текстуру в мод, отредактировать объект который использует эту модель[/td][/tr]
[tr][td]! Unknown command: dump_infos[/td][td]Командной консоли дали на обработку неизвестную команду[/td][td]Удалить передачу этой команды[/td][/tr][/table]Статистическая информация:[table][tr][td]* [win32]: free[2093476 K], reserved[203320 K], committed[1897444 K]
* [ D3D ]: textures[672247 K]
* [x-ray]: crt heap[428103 K], process heap[10829 K], game lua[90979 K], render[5505 K]
* [x-ray]: economy: strings[63567 K], smem[10671 K][/td][/tr][/table]Строка 1 содержит информацию о занимаемой памяти ОЗУ процессом игры:
  • free – Свободные килобайты ОЗУ
  • reserved – В резерве кб ОЗУ
  • committed – Занято движком кб ОЗУ
Строка 2 содержит информацию о памяти выделенной на обработку текстур
Строки 3 и 4 содержит информацию о занимаемой памяти на обработку информации\скриптов в игре:
  • crt heap, process heap – Информация о куче (нераспределенная память)
  • game lua – Выделенная память на обработку скриптов
  • render – Выделенная память на рендеринг
  • strings – Сэкономленная память на строчках
  • smem – Сэкономленная память на совместно используемых скриптах\функциях[/cut]
 
XOBAHДата: Ср, 15.02.2012, 20:13 | Сообщение # 5
Техник Вольных
Вольные сталкеры
Сообщений: 912
Награды: 21
Репутация: [ 984 ]

[cut=Путеводитель по разделу “Модостроение”]Раздел модостроения делится на 2 ветки (вообще-то на 3, но так как третья доступна только узкому кругу лиц, действующих веток две).
[cut=Основной раздел]Раздел полностью посвящен знаниям о редактировании игры. В этом разделе Вы можете задавать свои и отвечать на вопросы пользователей, читать, а возможно и делать, уроки по редактированию игры.
Настоятельно рекомендую писать свои посты в соответсвующие темы, так как пост не по теме будет перенес в соответсвующую тему (или удален без предупреждения), запостивший получит “Устное предупреждение” (Собираете 3 таких - и Ваш профиль будет отправлен на рассмотрение Правительству сайта). Также, при переносе поста часто теряется его смысл - поэтому думайте перед тем, как постить.
В ветке 11 тем, из них 7 важных:

  • Курс Молодого Бойца (КМБ) – Если Вы только начинаете делать моды, Вам определенно нужно прочитать, не просто прочитать, но и понять и сделать! уроки оттуда. Эта тема также будет полезна и не совсем новичкам в этом деле. Если Вы хотите дополнить тему своим уроком, то пожалуйста напишите в ЛС этот урок одному из кураторов темы и он добавит его, или же скажет что нужно поправить в этом уроке.
  • Редактирование и создание скриптов – Если у Вас проблемы и вопросы по скриптовой составляющей игры, то пишите их сюда.
  • Создание и редактирование локаций – Если у Вас проблемы и вопросы по редактированию и созданию локаций через SDK, или же при переносе локаций, то ждем Вас здесь
  • Конфигурационные файлы – Если у Вас возникли вопросы по конфигурационной составляющей игры (Создание персонажей, еды, оружия...; А также редактирования существующих) Вам сюда
  • Визуальный уровень – Если у Вас возникли проблемы с текстурами, видео, а также их описателями (дескрипторами) в папочке configs\ui\, Ваш путь закончится здесь
  • Создание и редактирование квестов – Если у Вас возникли вопросы во время создания или редактирования квестов (Подправить награду, заспавнить с определенными условиями...) Вам сюда
  • Спавн и Логика – Если у Вас возникли вопросы касающиеся файла all.spawn, спавна объектов (от персонажа до телевизора) или их логики, то будем рады видеть Ваши посты здесь
И 4 обычных:

  • Поделки, наработки для вставки в моды – Если у Вас есть хороший материал (маленький мод, наработки), которым Вам не жалко поделится, можете выложить его здесь, чтобы он попал в более крупный мод (естественно с указанием авторства использованного материала)
  • Анкеты модмейкеров – Если Вы набираете команду, или-же сами хотите вступить, то оставляйте заявки в данной теме
  • Читер-Клуб – Если Вы не хотите вникать в модостроение, а просто подправить несколько параметров в целях облегчения игры или с целью облегчить себе игру - можете подсмотреть тут
  • Общие вопросы и ответы – Если Ваш вопрос или проблема, не попадает ни под одну из важных тем - пишите его здесь. Вопросы, для которых есть четко обозначенная тема, будут удалены.
[/cut][cut=Программное обеспечение]В ветке всего одна тема:
  • Программы для моддинга – Если Вы не можете найти программу для тех или иных целей, касающихся моддинга - пишите запрос здесь.
[/cut]
[/cut][cut=Полезные ссылки]
[/cut][cut=Благодарности]Выражаю благодарность за проверку, корректировку, неоценимые поддержку и идеи при написании этой темы следующим Людям: Niafa, denis2000, Vaiteria, tracker, Hemul.
Спасибо пользователям GeJorge и GEONEZIS за проверку текста с технической стороны вопроса.
Выражаю благодарность также пользователю Spectr за то, что он запостил копипаст разбора содержимого папки SHOC\gamedata Неизвестного Автора - Неизвестному Автору, тоже Respect, за хороший пример разбора
[/cut]

PS: Идеи, правки и объективную критику принимаю в ЛС
XOBAH © 2012
 
Форум » Моды для игр » Модостроение » Азбука модмейкера (Для начинающих модмейкеров)
  • Страница 1 из 1
  • 1
Поиск: