Данный сайт содержит в себе лучшие статьи сайта stalkerin.gameru.net, а также много новых статей, созданных автором канала "Сталкер ТЧ Модострой" и участниками чата Мододельское в телеграм
Эта страница должна помочь новичкам, познакомив их с программами для облегчения процесса создания мода, а также ввести в курс дела, то есть помочь начать делать мод с нуля.
Во кладке "Туториалы" можно ознакомится с новыми статьями, остальное относится к статьям с сайта stalkerin.gameru.net
Некоторые гайды удобнее вести на гитхабе, это касается скриптов и функций для них, но гайды постепенно переносятся на сайт
appdata - папка сохранения прогресса игры, в ней:
logs - логи хранят хронологические записи событий
savedgames - сохранения игры
screenshots - скриншоты
user.ltx - файл с настройками
bin - движок игры
fsgame.ltx - файл, который показывает движку где брать файлы
gamedata - это основной архив игры, содержащий все данные: модели, текстуры, скрипты, диалоги, параметры оружия и многое другое. Вот папки на которые будет идти упор первое время:
config - Настройки игры (оружие, монстры, звуки и т.д.)
scripts - Lua-скрипты, отвечающие за логику игры
meshes - 3D-модели персонажей, предметов и окружения
spawns - спавн сюжетных и не только нпс, зон усправления сюжетом и т.д.
textures - Текстуры (обложки, материалы, UI)
Изначально этой папки нет при установке, её можно получить распаковав дб архивы, про это в Софте.
*.db Архивы игры, из них движок берет все необходимые файлы, если их нет в папке gamedata или нет самой папки gamedata. Также имя архивов должно совпадать с именем геймдаты, то есть если сделать две папки gamedata1 и gamedata2, то движок не увидит дб архивы, пока они не будут с именами gamedata1.db* или gamedata2.db*
находятся по пути:
gamedata/sapwns/all.spawn
gamedata/game.graph
в них находятся спавн элементы каждой локации и точки графа, образующие связь между локациями
имя all достаточно условное, вместо него может быть любое другое, но из-за того что в скрипте ui_main_menu.script указано так:
console:execute("start server(all/single/alife/new) client(localhost)")
идёт поиск именно all.spawn
Появление файлов происходит следующим образом:
1.нажимается кнопка Make Game во всех сценах нужных локаций в левел эдиторе сдк - это создаёт файлы level.spawn и level.game(точки путей)
2. После этого происходит сборка графов и спавна компилятором), она создаёт файлы all.spawn, game.graph и level.gct
для внесения изменений в уже собранный all.spawn используется программа acdc, она распаковывает спавн на ltx файлы с именем каждой локации, для распаковки так же нужен файл game.graph
В тоже время для распаковки локации в формат сдк через converter.exe, берутся файлы исключительно из папки gamedata/levels/
то есть all.spawn и game.graph никак не участвуют в распаковке, по этой причине распакованные локации незначительно отличаются от версий из игры(комбез в деревне новичков, отсутствие множества броников на армейских складах и тд), так как разработчики после релиза в патчах вносили изменения именно в all.sapwn, не изменяя файлы level.spawn
Так что если вы изначально работали в acdc и захотели продолжить работу в сдк придётся распаковать all.spawn на level.spawn'ы каждой локации с помощью декомпиляции с определённым ключом в acdc
после перенести все эти левел спавны в сдк и произвести декомпиляцию конвертером, тогда все ваши изменения отобразятся
Показал в этом ролике:
Обычно логи хранятся по пути C:\S.T.A.L.K.E.R.\appdata\logs\xray_Слава.log
папка аппдата может иметь и такой вид _appdata_, также аппдата иногда лежит по пути C:\Users\Public\Documents
Как только игра вылетает, вам сразу в буфер обмена копируется такая запись, далее открываем браузер или блокнот и нажимаем вставить или Ctrl+V . По логу уже можно делать вывод:
FATAL ERROR
[error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line : 73
[error]Description : <no expression>
[error]Arguments : LUA error: ....l.k.e.r.1.0006\gamedata\scripts\bind_stalker.script:407: attempt to concatenate field '?' (a nil value)
Чаще всего указан проблемный файл тут это bind_stalker.script и ошибка в 407 строке
мой видосик про старый распаковщик - https://www.youtube.com/watch?v=WLZAjQbXM5I
S.T.A.L.K.E.R. *.xr Decompilers — это набор скриптов для работы с *.xr файлами S.T.A.L.K.E.R. - Тень Чернобыля, Чистое Небо и Зов Припяти.
Возможности
Полная распаковка:
gamemtl.xr
lanims.xr
shaders.xr
shaders_xrlc.xr
senvironment.xr
Только распаковка на бинарные файлы:
particles.xr
Ссылки на скачивание
gamemtl_xr_cdc
https://yadi.sk/d/hR79KfSn3PLtSK
lanims_xr_cdc
https://yadi.sk/d/qKhybMU-3PLtTj
shaders_xr_cdc
https://yadi.sk/d/RcMprj9W3PLtdj
shaders_xrlc_xr_cdc
https://yadi.sk/d/FoQnY1VV3PLteX
senvironment_xr_cdc
https://yadi.sk/d/jBnrr3Xg3PLtcc
particles_xr_cdc
https://yadi.sk/d/LCkINfLw3PLtV5
Stkutils
это браузерный скрипт для компоновки локальных карт уровней игр серии S.T.A.L.K.E.R. в одну глобальную карту.
Позволяет вычислять координаты каждого изображения, и т.д.
https://disk.yandex.ru/d/hE9V8DTW3PSPAA
Разработчик XiaNi
Версия 0.1 от 8 декабря 2010 года
Тип координатор
Платформа Браузер
https://modfaq.ru/STALKER_Icon_Editor
неплохой вариант , но как я слышал портит качество, однако позволяет удобно получать координаты:
<texture x="0" y="768" width="497" height="171">ui\ui_static_mm_back_04</texture>
или
inv_grid_width = 2
inv_grid_height = 2
inv_grid_x = 0
inv_grid_y = 18
Программа, упрощающая создание скриптовых окон.
С её помощью можно быстро и наглядно создавать скриптовые окна, при этом код самому писать не нужно.
Программа сама генерирует скрипт и файл-описатель элементов(xml).
Остается лишь положить сгенерированные файлы в игру и вызвать запуск меню.
Редактирование конфигов и скриптов
Перед тем как мы начнем работу с файлами я бы рекомендовал поставить:
https://drive.google.com/drive/folfoldersders/1W6cNXPpykIegaLhv10G7-JMgnskh5DLx?usp=drive_link
Пример как это выглядит можете увидеть на фото, но лучше посмотреть видео и изменить под себя:
https://youtu.be/ko_9NSbjPbM
Теперь касательно того, чтобы Lua синтаксис сразу врубался при открытии скриптов, это будет нужно, заходим в опции, определение стилей..., выбираем Lua и ниже в: "Польз. разрешение" пишем: "script", как показано на скрине.
Синтаксис может быть как для светлой темы, так и для темной, как на скринах.
прога от ГСК для создания и редактирования диалогов
https://drive.google.com/open?id=1IzCTg7IDKPLmqw0t1jfT5Qn39_DnfrAI&usp=drive_fs
https://www.playground.ru/stalker_clear_sky/file/s_t_a_l_k_e_r_chistoe_nebo_redaktor_dialoga-895252
https://ap-pro.ru/forums/topic/3743-dialog-editor-by-ray-of-hope/
еще один редактор диалогов.
настройка параметров оружия, брони, артефактов и прочего
прога для просмотра моделей .ogf
прога для просмотра и редактирования моделей .ogf
(анимации, кости, текстуры)
Небольшой инструмент для редактирования OMF файлов без декомпиляции
Основные возможности:
* Переименование анимаций
* Удаление анимаций
* Объединение двух OMF файлов в один
* Добавление анимаций из другого OMF файла по списку
* Редактирование параметров анимаций ( почти все параметры доступные из СДК )
* Редактирование Motion Marks
Blender - это бесплатный профессиональный пакет с открытым исходным кодом для создания 3D-графики, анимации, визуализации и монтажа.
https://github.com/PavelBlend/blender-xray
Слева мой опыт с этим, а узнал об этом из:
прога что-бы удобно делать скриншоты. А так же сразу их редактировать. К моддингу никак не относится.
прога для распаковки и редактирования all.spwan в виде текста
Позволит нам создавать лагеря мутантов и нпс, аномалии и много прочего
https://modfaq.ru/Universal_ACDC
Все уроки по ACDC https://www.youtube.com/playlist?list=PLONawgtVvphyWMwzCmZxNqdK1povowvUR
Level editor, если ACDC позволял редактировать только all.spawn, то тут есть возможность редактирования всего, начиная со спавна и заканчивая редактированием зданий, это лишь небольшой пример.
Установка поверх этого апдейта с фичами https://youtu.be/x4rMS7ea_GA
ВСЁ ПРО ОПЦИИ LEVEL EDITOR СДК 0.4 https://youtu.be/7INs5t34AQ4
Видео связанные с установкой сдк или компонентов
https://www.youtube.com/playlist?list=PLONawgtVvphx3ZBLkcJmohGfJEeRcSbNv
Все видео от меня по сборке локации
https://www.youtube.com/playlist?list=PLONawgtVvphziVp_cn9rXbY-YLp9RErGs
Статья по установке СДК:
Бот присылает видео с канала по ключевому слову или набору слов. Минимум 2 символа, например ui
свободное ПО с открытым исходным кодом для сравнения и синхронизации файлов и каталогов .
https://winmerge.org
Очень поможет вам в поиске ошибок при вылетах.
Для того, чтобы добавить новые объекты на локацию - деревья, постройки нужен СДК, там же можно добавлять аномалии и мутантов, или можно использовать АСДС, но с ним все изменения ограничиваются файлом all.spawn
Немного предыстории, как я начинал модить.
Задачей для меня стояло создать НПС, с которым бы можно было поговорить, взять задание,
так вот сначала я нашел такой способ спавна:
function spawn()
alife():create("my_test_stalker",vector():set(-152.0,-18.0,-144.3),98126,45)
end
Но этот способ оказался со своими изъянами, поэтому рекомендую ознакомится и с другими способами
Однако мало было найти способ, нужно было ещё и куда-то его вставить. Так вот почти в каждом гайде на ютубе все делают это через диалог с Волком, потому что это доступно, легко, да и человек знает что нужно сделать для получения оригинальной фразы. Но это не лучший вариант.
На этом вы должны были посмотреть видео по спавну нпс https://youtu.be/TC87bRgelHM и там показано, что функцию спавна нужно вставлять в \gamedata\scripts\bind_stalker.script
находим if self.bCheckStart then
и строкой ниже printf("SET DEFAULT INFOS")
вставляем alife():create("my_test_stalker",vector():set(-152.0,-18.0,-144.3),98126,45)
Это будет работать при начале новой игры, после каждой перезагрузки уровня\перехода на локацию.
--------------------------------------------------------------------------------------------------------------
Чтобы сделать запуск функции один раз при начале игры нужно вставить её в if not has_alife_info("global_dialogs") then чтобы получилось так
if not has_alife_info("global_dialogs") then
alife():create("my_test_stalker",vector():set(-152.0,-18.0,-144.3),98126,45) -- ваше действие
self.object:give_info_portion("global_dialogs")
end
Создав нпс, у вас наверняка появляются вопросы, а чего он уходит?
Для этого надо писать нпс логику, смотрим видео про точки путей и переходим в плейлист, рекомендую начать со схемы [WALKER]
https://www.youtube.com/playlist?list=PLONawgtVvphznRkt4Y3S5nWOl_1FJo4re
Либо сделайте нпс точки по статье
находясь в меню можно будет жать Ф1 и появятся коорды
Откройте файл \gamedata\scripts\ui_main_menu.script
Через поиск найдите function main_menu:OnKeyboard(dik, keyboard_action)
в этот участок if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
добавим это
if dik == DIK_keys.DIK_F1 then
local gv = db.actor:game_vertex_id()
local lv = db.actor:level_vertex_id()
local pos = db.actor:position()
local posx = pos.x
local posy = pos.y
local posz = pos.z
local dir = db.actor:direction()
local dirx = dir.x
local diry = dir.y
local dirz = dir.z
news_manager.send_tip(db.actor, "Position:".."\\n".."X: "..posx.."\\n".."Y: "..posy.."\\n".."Z: "..posz.."\\n".."Direction: ".."\\n".."X: "..dirx.."\\n".."Y: "..diry.."\\n".."Z: "..dirz.."\\n".."Game Vertex ID: "..gv.."\\n".."Level Vertex ID: "..lv.."\\n".."That's all.", nil, nil, 100000)
console:execute("main_menu off")
end
находясь в меню можно будет жать ПОБЕЛ и начется новая игра
Откройте файл \gamedata\scripts\ui_main_menu.script
Через поиск найдите
function main_menu:OnKeyboard(dik, keyboard_action)
в этот участок
if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
добавить
if (dik == DIK_keys.DIK_SPACE) then
self:StartGame("gd_master")
end
Вы наверняка знали про ключ -nointro , который позволяет запускать игру пропуская интро
через пробел можно указать такой ключ
-start server(all/single/alife/new) client(localhost)
будет каждый раз пропуская меню запускать новую игру
Если вы используйте СДК, вам наверняка хочется так же запускать игру, Левел эдитор через ярлыки или панель задач
Вот инструкция:
https://t.me/stalker_soc_moding/16
Да, этот пример со спавном нпс должен быть для вас полезен, вы сможете выдать себе квест или необходимые инфопоршни, но нужно разобраться как двигать сюжет и после начала игры. Для этого ознакомьтесь с гайдом по скриптам.
Плейлист с примерами использования функций
https://www.youtube.com/playlist?list=PLONawgtVvphycpsDyU2KaM8zmiSQfuNT5
Пока что продолжим крутиться вокруг нашего нпс, сделаем с ним простенький диалог через редакторы, показанные выше
Плейлист по созданию диалогов
https://www.youtube.com/playlist?list=PLONawgtVvphz9rU1pNUeBR7dNVachAeQ8
В выше упомянутых файлах фигурирует слово инфопоршн, о них рекомендую посмотреть ролик, в нем есть и понятие рестриктора, думаю тоже будет полезно.
Пощупали функции, послушали что такое инфопоршнс, пора бы уже и сделать свое задание или же квест, для этого рекомендую глянуть данный ролик, а так же текстовый гайд на гитхабе, в котором достаточно понятно всё описал.
Плейлист с реализацией различных квестов https://www.youtube.com/playlist?list=PLONawgtVvphxTROdpqlJ3FJUGtv5rvJVn
Для создания квестов не обязательно использовать ACDC или СДК, раньше я использовал их только из-за не знания того, как присвоить НПС или предмету стори айди иным способом, что такое стори айди https://youtu.be/awLh12rz08E
но способы были найдены, первый это правки движка через XRAY-EXTENSIONS, что это рекомендую посмотреть вам самим.
Второй способ это использовать движок OGSR
https://github.com/OGSR/OGSR-Engine?tab=readme-ov-file#%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9
Так или иначе оба метода дают нам метод alife():assign_story_id ,
который в оригинале не работает.
Иные правки движка
https://www.youtube.com/playlist?list=PLONawgtVvphwBMMEfRwO8RPCn0exusuf_
Касаемо модулей от Артоса https://www.amk-team.ru/forum/topic/13216-sborochnyj-ceh/page/2/#comment-971137
Состав:
lua_helper - различные часто употребляемые и/или полезные функции которые могут использоваться модмейкерами.
m_netpk - интерфейс чтения/записи net-пакетов.
m_timers - менеджер универсальных таймеров.
se_stor - универсальное хранилище данных произвольного размера.
Зачем они нужны? С этими модулями можно будет делать, спавн предмета без привязки к АИ сетке, изменение позиции объектов из all.spawn, спавн с определённым направлением, изменение размеров перехода между локациями, спавн неподвижных предметов, спавн аномалии, вертолета и бтр,.
Изначально без АСДС или СДК это не возможно сделать, вся работа идёт через net_packet, но это всё уже для смешариков на самом деле, потому что новичкам трудно будет такое освоить.
Пример таких функций в сборнике Функции m_netpk.txt
Хочу отметить что они сразу работают на ОГСР, так как там модуль m_netpk подключен, а вот для оригинала придётся подключать самим.
Вот вы сделали квесты, у вас есть нпс, но стало не хватать лагерей для них, пришло время создавать смарты, они бывают двух видов, первый general или динамические смарты и второй, как я люблю говорить "полноценные смарты"
Плейлист по СМАРТАМ
https://www.youtube.com/playlist?list=PLONawgtVvphwFoJcccJlmmGIjk-K59Dt0
Но дорогие друзья, для создания смартов для нпс или мутантов уже придётся выбирать между ACDC или СДК, т.к. скриптами этого не сделать, так как не рассчитано.
Проработка группировки, через смарты, респавны и т.д.
https://www.youtube.com/playlist?list=PLONawgtVvphyT-6RoB5GvR60jGf2zkNB_
Если вы выбрали использовать СДК, то вот для вас целый плейлист
https://www.youtube.com/playlist?list=PLONawgtVvphzkjEQTB7uY7_8g-JWhkw71
Но если вы используете АСДС то одно видео для вас тоже есть https://youtu.be/mANNX3ZmBbM
Хотелось бы отметить плейлист, в который помещаются очень полезные решения, которые иногда трудно найти в интнрнете.
https://www.youtube.com/playlist?list=PLONawgtVvphx9oRJNMzJkR23RFaxa2WZc