IPB

Помощь по разделу

Сайт S.T.A.L.K.E.R. Inside / [ЗП] Параметры командной строки / Распаковщик ресурсов

>

Редактирование движка

 
 RayTwitty
сообщение 22.01.2016, 17:22
Сообщение #2361


Магистр Игры
****************

Группа: Участник
Сообщений: 2656
Регистрация: 24.09.2010
Пользователь №: 14086




Редактирование собранного движка
Проект X-Ray extensions и его вики
Lua-перехватчик от alpet
xrLuaFix от RvP
xrLuaFix в редакции от Artos
xrLuaFix в редакции от svarog2741
LuaXML библиотека парсинга xml-файлов из скриптов (подключается при помощи функции require, которая есть в xrLuaFix)
NoProtect 1.0006 исполнительные файлы из Steam-версии без защиты
Документация к X-Ray (11.10.2004)
Файл заголовков от отладочного 6 патча
Cut X-Ray
Цель проекта - создание отдельных изменений движка игры с их последующей комбинацией с другими правками.
Авторы: SkyLoader, _призрак_
Для платформ: ТЧ 1.0004 и 1.0006, ЧН 1.5.10, ЗП 1.6.02
Адрес проекта на Google Code: https://code.google.com/p/cut-x-ray-project/
Страница на Moddb: http://www.moddb.com/mods/cut-x-ray-project-soc-cs-cop
Пак 1
1. Исправление вылета "can't find rank" для оружий.

2. Смерть от первого лица.
Видео: http://www.youtube.com/watch?v=c-4dNyvizxY

3. Collide
Возвращена коллизия мертвых тел с неписями и актором, как она сделана в старой физике билдов.
Видео: http://www.youtube.com/watch?v=1xNn04f3djc

4. Круглый прицел.
Возвращен круглый прицел вместо перекрестья, как билдах.

5. Исправление вида от 3-го лица.
Изменено положение камеры от 3-го лица (1). Стрельба идет по перекрестью, а не по направлению актора. Если включить вид от 3-го лица (1) и удерживать Shift, то ГГ будет автоматически целиться в ближайшего непися или монстра.
Проблемы: Стрельба по перекрестью идет также при виде от 3-го лица (2). Если при автоматическом нацеливании непись/монстр удалится или перейдет в оффлайн, будет движковый безлоговый вылет. Я думал вырезать это нацеливание, но решил оставить.
Пак 2
1. Luminosity progress (только ТЧ)
Возвращение шкалы освещения вместо шкалы "заметности" ГГ, как в билдах.

2. Запрет на доставание оружия в машине (только ТЧ и ЧН) и на лестнице (ТЧ, ЧН, ЗП).

3. Руки на руле в машине. (только ТЧ и ЧН)
Видео: http://www.youtube.com/watch?v=nYrnrfGkO7Y

4. Отсутствие распознавания неписей перекрестием:
При наведении на непися перекрестье имеет дефолтный цвет. Также не показывает информацию о неписе, если смотреть на него.

5. Bind_object:
Возможность использовать скрипты в мультиплеере.

6. Из оружия на классе бинокля можно стрелять (только ТЧ)
Пак 3
1. Включение некоторых команд без использования ярлыка. Можно патчить по отдельности. Команды: -smap_4096 (максимально улучшенные карты теней), -mblur (включение блюра).

2. Измененная анимация безоружного гг.

3. Увеличение дистанции диалога с неписями (для создания сценок на расстоянии)

4. Исправление вылета при использовании предметов из трупов неписей.
В отличии от версии Kolmogor'а, здесь отключено само меню использования.

5. Возможность поднимать болты как обычные инвентарные предметы (комбинировать с модом Charsi "Заканчивающиеся болты")
Скачать все паки
Правки от RayTwitty aka Shadows
Geometry LOD fix (CS 1.5.10) – расширение диапазона консольной команды r__geometry_lod
Camblu crosshair for build 1865 – замена перекрестия прицела на кружок в билде 1865
Vertex buffer fix for NC Project – исправление вылета по переполнению буфера в NC Project
NO 100 sovetov fix (COP 1.6.02) – убирает надписи "100 советов" с экрана загрузки
Demo Record fix (SOC 1.0006) – убирает красные надписи в режиме demo_record
Weapon Bobbing Beta (SOC 1.0006) – раскачка оружия при ходьбе (бета-версия)
Build Loadscreen (SOC 1.0006) – билдовский экран загрузки со статичным изображением
Detail Density fix (SOC 1.0006) – расширение диапазона консольной команды r__detail_density
Mipbias fix (SOC 1.0006) – расширение диапазона консольных команд r1_tf_mipbias и r2_tf_mipbias
No Quick Use fix (SOC 1.0006) – запрет на использование аптечек и бинтов по быстрым клавишам
Sun Near fix (SOC 1.0006) – расширение диапазона консольной команды r2_sun_near
Target Font (SOC 1.0006) – замена шрифта под перекрестием прицела на шрифт DI
Unload Magazine fix (SOC 1.0006) – фикс скриптовой функции unload_magazine - теперь патроны разряжаются в инвентарь
PNG Screenshots (SOC 1.0006) – игра теперь делает качественные скриншоты в формате png

Скачать все правки
Правки от K.D.
xrPatch v0.8 – патчер для увеличения радиуса прорисовки травы
detail radius+density fix [SOC 1.0006] – добавляет регулировку радиуса отрисовки травы через консольную команду и расширяет диапазон регулировки плотности травы до 0.02
Правки от macron
Исправленный экзешник для SoC 1.0006
Доработанный и исправленный экзешник для ТЧ 1.0006 (на основе Steam-версии без защиты)
Включает в себя исправления вылетов, а также очистку лога игры от засоряющих сообщений. Более подробное описание внутри архива.

Ссылка: https://yadi.sk/d/At9Tw0ueSaDyS
X-Ray extensions portable
Портативная версия расширений движка "X-Ray extensions"
Платформы: ТЧ 1.0006, ЧН 1.5.10, ЗП 1.6.02
Эта версия имеет все нужные библиотеки и патчеры, а также настроенные bat-файлы для успешной компиляции. Более подробное описание внутри архива.

Ссылка: https://yadi.sk/d/z3H21jJviesuh
Правки от Kolmogor
Правленный xrGame для SoC 1.0004
Изменения:
1. Добавлена консольная команда fov [5.0, 180.0] - изменяет глобальный FOV камеры.
2. Добавлена консольная команда k_ammo_on_belt [on\off] - включает\выключает использование патронов с пояса.
3. Артефакты работают из рюкзака, а пояс служит контейнером.

Ссылка: http://rusfolder.com/42636653
Правки от Kontro-zzz
Изменение значения hud_fov
Правки фиксированных значений параметра hud_fov - 0.37 либо 0.53, для CS 1.5.10 и для билда 3120.
Должно работать на GOG версии и no DVD.
Редактирование исходников
Скачать все исходники отсюда или с оригинальных постов SoC 1.0007rc1 SoC и CS CoP X-Ray 2
Репозитории: xray (SoC 1.0007rc1) OpenXRay xrDev x-ray 1.0
Компиляторы x64: SoC CS CoP
NDA GSC
Оригинальные версии движков
Могут понадобиться для восстановления оригинальных библиотек.
SoC SoC ENG CS CoP
Официальный мультиплеерный (невышедший) патч для SoC 1.0007rc1.
Уроки
Изменение плотности травы и создание патча через IDA Pro
Автор: _призрак_
Редактирование: RayTwitty aka Shadows

Для редактирования нам понадобится программа IDA Pro.

1. Запускаем IDA Pro.
2. Загружаем бинарник рендера xrRender_R1.dll или xrRender_R2.dll.
3. Теперь необходимо найти, где регистрируется консольная команда. Жмем Ctrl+T и вводим r__detail_density.
4. Находим функцию и тщательно ее разбираем (я ее полностью разбирать не буду, только укажу, где задаются параметры:
Код регистрации консольной команды
Код
fld ds:flt_10064400 -- нижнее ограничение равное 0.6
or dword_1007CACC, 8
sub esp, 8
fstp [esp+30h+var_2C]
mov ecx, offset unk_1007CA9C
fld ds:flt_10064380 -- верхнее ограничение равное 0.2
fstp [esp+30h+var_30]
push offset aSs; "ЪЩЩ>"
push offset aR__detail_dens; "r__detail_density"
call ds:??0CCC_Float@@[email protected]@Z; CCC_Float::CCC_Float(char const *,float *,float,float)
push offset sub_1005E080; void (__cdecl *)()
call _atexit
add esp, 4
Если вы заметили, чтобы трава стала плотней нужно уменьшить параметр, а чтобы травы стало меньше, нужно параметр увеличить
5. Нам нужно увеличить плотность травы: следовательно нужно изменить верхнее ограничение. Как это сделать? Есть три варианта:

Первый и самый логичный вариант: изменить переменную. Но тут есть небольшой подвох на котором я попался - этой переменной может пользоваться не одна функция, а несколько. И не ясно, что вы можете сломать, поменяв одну циферку на другую.

Второй: взять другую, уже существующую переменную с подходящим значением. Хороший вариант которым я и воспользовался. Но и тут есть недостаток - переменных в бинарнике не так уж и много и можно просто не найти нужную.

Третий: создать переменную. Отличный вариант. Единственный минус - я не знаю как это сделать (IMG:style_emoticons/default/smile.gif)

Я пошел по второму пути. Два раза щелкнув на ds:flt_10064380, IDA отправила меня в дебри под названием .rdata. Там я нашел переменную, которая называлась - flt_1006452C и которая имела значение 0.0720999.
Насколько я понял, flt_1006452C - не является названием переменной, это сборка из двух показателей - (тип числа)_(смещение). В нашем случае это число типа float, которое находится по адресу 1006452C. Ну что же, приступим к редактированию!
6. Отправляемся в самое начало файла. Как? Сверху есть что-то типа статус-бара - строка состоящая из синего, серого, черного цвета. Нажимаем там в любом месте мышкой и ведем влево до конца.
7. Опять ищем r__detail_density. Находим в этой функции строку fld ds:flt_10064338. Дальше самое интересное - жмем на вкладку Hex View и там у нас выделяются какие-то цифры. Это наша переменная 10064338, только написано наоборот. Сравните:
Код
38 43 06 10
10 06 43 38
Похоже, не правда ли? (IMG:style_emoticons/default/smile.gif)
8. Начинаем редактировать. Нам нужно поменять 4338 на 452C (т.е. заменить ссылку с одной переменной на другую). Жмем правой кнопкой мыши на этих цифрах и выбираем пункт Edit. Меняем 38 43 на 2С 45. Дальше жмем где-нибудь в коде (это нужно сделать обязательно!).
9. После этого жмем правой кнопкой мыши и выбираем commit changes. Таким образом, мы поменяли ссылку на переменную и теперь верхнее ограничение будет равно значению из другой переменной.
Но IDA не меняет исходный файл. В нашем случае мы можем только создать файл изменений. Делается это так: File -> Produce file -> Create DIF file. Назовем его test. Этот файл можно открыть при помощи блокнота и посмотреть, что получилось.
10. Теперь необходимо внести изменения из этого файла в движок. Это можно сделать при помощи патчера bpatch. Качаем, смотрим и запускаем bpatch.cmd. Я думаю, что батник вы сможете изменить самостоятельно (настроить пути файлов и т.п.) - там все элементарно.
11. Все! Изменения внесены в движок, можно тестировать (IMG:style_emoticons/default/smile.gif)

Огромное спасибо Kolmogor'у и malandrinus'у. Если бы не они, я бы ничего не сделал. Спасибо вам еще раз.
Спасибо и Rolan'у, с которым я очень много беседовал и тоже узнал много чего (IMG:style_emoticons/default/smile.gif)


Сообщение отредактировал RayTwitty - 06.01.2017, 17:50
Перейти в начало страницы
 
 
 
Ответов
 AndreySol
сообщение 19.03.2017, 12:14
Сообщение #2362


Опытный Игрок
****

Группа: Участник
Сообщений: 68
Регистрация: 16.02.2014
Пользователь №: 19339



Цитата(abramcumner @ 19.03.2017, 12:03) *
Тогда тебе больше подойдет xr_map<xr_string, xr_string> table.
Операции:
- добавить: table[ключ] = строка

Вылетает:
xr_map<xr_string, xr_string> table;
table["first"] = "second";
Что опять не так? Как правильно?
Перейти в начало страницы
 
 
 STALKER2011x
сообщение 19.03.2017, 12:24
Сообщение #2363


Высший Игровой Бог
************************

Группа: Супермодератор
Сообщений: 11511
Регистрация: 05.11.2009
Пользователь №: 12882



AndreySol, либо посмотри как устроен xr_map и как его используют (поиском по коду), либо попробуй использовать map из c++.
Перейти в начало страницы
 
 
 abramcumner
сообщение 19.03.2017, 12:59
Сообщение #2364


Архимагистр Игры
*****************

Группа: Участник
Сообщений: 2946
Регистрация: 27.04.2011
Из: Россия
Пользователь №: 14366



Цитата(AndreySol @ 19.03.2017, 12:14) *
Вылетает:
xr_map<xr_string, xr_string> table;
table["first"] = "second";
Что опять не так? Как правильно?

Ну ты хотя бы текст ошибки скопируй (IMG:style_emoticons/default/smile.gif) Код отлично работает.


Сообщение отредактировал abramcumner - 19.03.2017, 13:18
Перейти в начало страницы
 
 
 AndreySol
сообщение 19.03.2017, 13:27
Сообщение #2365


Опытный Игрок
****

Группа: Участник
Сообщений: 68
Регистрация: 16.02.2014
Пользователь №: 19339



Я тут ситуацию не полностью описал:
xr_map<xr_string, xr_string> table; - если объявлено в хедере, то table["first"] = "second"; в коде вылетает. А если все в коде, и объявить и присвоить значения - вылета нет. Блин, зачем все так мутно наворочено ???
Перейти в начало страницы
 
 
 abramcumner
сообщение 19.03.2017, 13:41
Сообщение #2366


Архимагистр Игры
*****************

Группа: Участник
Сообщений: 2946
Регистрация: 27.04.2011
Из: Россия
Пользователь №: 14366



Цитата(AndreySol @ 19.03.2017, 13:27) *
Я тут ситуацию не полностью описал:
xr_map<xr_string, xr_string> table; - если объявлено в хедере, то table["first"] = "second"; в коде вылетает. А если все в коде, и объявить и присвоить значения - вылета нет. Блин, зачем все так мутно наворочено ???

По-прежнему не полностью (IMG:style_emoticons/default/smile.gif)
Перейти в начало страницы
 
 
 Shoкer
сообщение 19.03.2017, 13:43
Сообщение #2367


Кандидат Игровых Наук
******************

Группа: Участник
Сообщений: 3420
Регистрация: 27.07.2009
Пользователь №: 11447



1) Ты объявляешь xr_map<xr_string, xr_string> table как члена класса (внутри class), или снаружи в глобальной области видимости?
2) В хедере (заголовке) нельзя присваивать значения сложным объектам. (возможно есть исключения, но точно не так как ты пытаешься это сделать) Это не Lua. В заголовке ты только описываешь объект, а заполнять его должен внутри конструктора или любой другой функции, потому что до момента вызова конструктора объекта ещё не существует.
3) После сборки как ты запускаешь игру? По ярлыку? Нужно запускать либо через студию (Run), либо присоединять её к процессу уже после запуска игры (Attach). Тогда в момент вылета узнаешь где он случился.

PS: Не припомню в движке ЗП xr_string, это ТЧ?

Сообщение отредактировал Shoкer - 19.03.2017, 13:45
Перейти в начало страницы
 
 
 SkyLoader
сообщение 19.03.2017, 13:52
Сообщение #2368


Продвинутый геймер
********

Группа: Участник
Сообщений: 337
Регистрация: 03.05.2012
Пользователь №: 14742



Цитата(Shoкer @ 19.03.2017, 13:43) *
PS: Не припомню в движке ЗП xr_string, это ТЧ?

Это std::string.

Перейти в начало страницы
 
 
 Shoкer
сообщение 19.03.2017, 13:53
Сообщение #2369


Кандидат Игровых Наук
******************

Группа: Участник
Сообщений: 3420
Регистрация: 27.07.2009
Пользователь №: 11447



Я в принципе так и подумал, просто обычно они там везде или чистый char* юзают или shared_str для строк.
Хотя хз что выгоднее применять в данном примере. xr_string тоже есть, просто я реже его видел %)

Сообщение отредактировал Shoкer - 19.03.2017, 13:56
Перейти в начало страницы
 
 
 SkyLoader
сообщение 19.03.2017, 13:59
Сообщение #2370


Продвинутый геймер
********

Группа: Участник
Сообщений: 337
Регистрация: 03.05.2012
Пользователь №: 14742



Часто его используют для сдк, удобнее в AnsiString конвертировать.
Перейти в начало страницы
 
 
 AndreySol
сообщение 19.03.2017, 14:28
Сообщение #2371


Опытный Игрок
****

Группа: Участник
Сообщений: 68
Регистрация: 16.02.2014
Пользователь №: 19339



Цитата(abramcumner @ 19.03.2017, 14:41) *
По-прежнему не полностью

В h-файле, внутри объявления класса:
xr_map<xr_string, xr_string> table;
в cpp-файле, в одной из ф-ций класса:
table["first"] = "second";
в результате - стандартное виндовое окно ошибки
Цитата
Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: XR_3DA.exe
Версия приложения: 0.0.0.0
Отметка времени приложения: 586df4ff
Имя модуля с ошибкой: xrCore.dll
Версия модуля с ошибкой: 0.0.0.0
Отметка времени модуля с ошибкой: 58ce6ae4
Код исключения: c0000005
.........
.........

в логе естественно пусто...

Сообщение отредактировал AndreySol - 19.03.2017, 14:30
Перейти в начало страницы
 
 
 abramcumner
сообщение 19.03.2017, 14:38
Сообщение #2372


Архимагистр Игры
*****************

Группа: Участник
Сообщений: 2946
Регистрация: 27.04.2011
Из: Россия
Пользователь №: 14366



Цитата(AndreySol @ 19.03.2017, 14:28) *
В h-файле, внутри объявления класса:

Возможно заголовочный файл используют и другие длл, а ты их не пересобрал.
Перейти в начало страницы
 
 
 AndreySol
сообщение 19.03.2017, 22:17
Сообщение #2373


Опытный Игрок
****

Группа: Участник
Сообщений: 68
Регистрация: 16.02.2014
Пользователь №: 19339



Запутался я вконец с этими xr_map, xr_string, массивами и векторами.
Может кто набросать пример, как сделать сохранение данных типа "строка_ключ = строка_значение" произвольного кол-ва? Именно применительно к движку. С объявлением того объекта, в котором данные будут храниться в хедере и с заполнением\чтением в cpp-файле.
Перейти в начало страницы
 
 
 1001v
сообщение 20.03.2017, 02:01
Сообщение #2374


Магистр Игры
****************

Группа: Участник
Сообщений: 2649
Регистрация: 24.08.2010
Из: Москва
Пользователь №: 14054



У вас ссылки на яд мертвые
Перейти в начало страницы
 
 
 AndreySol
сообщение 20.03.2017, 12:24
Сообщение #2375


Опытный Игрок
****

Группа: Участник
Сообщений: 68
Регистрация: 16.02.2014
Пользователь №: 19339



"Утро вечера мудренее" @народ.
Вроде смог разобраться как использовать xr_map, но осталась одна проблемка: если объявляю xr_map <shared_str, shared_str> table в cpp-файле - все нормально, все сохраняется\получается, но если выношу объявление в h-файл
public:
xr_map <shared_str, shared_str> table;
то игра вылетает с логом:
Цитата
0023:599609D1 xrCore.dll, std::_Lower_bound<CInifile::Sect * *,char const [256],int,bool (__cdecl*)(CInifile::Sect const *,char const *)>(), c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm, 2514
..........
..........
..........
Посмотрел как у ПЫСов сделано - практически все, что начинается с xr_(или связано с таковым) у них в хедерах объявлено как typedef. Попробовал сделать для своей переменной - в cpp-файле студия подчеркивает красным и ругается "Идентификатор "table" не определен". С этим как быть ?

Сообщение отредактировал AndreySol - 20.03.2017, 13:21
Перейти в начало страницы
 
 
 Winsor
сообщение 20.03.2017, 15:15
Сообщение #2376


Игрок
***

Группа: Участник
Сообщений: 44
Регистрация: 02.02.2016
Пользователь №: 23649



Уважаемые знающие... ТЧ.
Возник вопрос по UI классу - CUIComboBox. Если добавлять этот класс (AttachChild), например, в обычный CUIWindow - то выпадающее окно рисуется поверх остальных чилдов CUIWindow. Если же аналогичную операцию делать в ScrollView (AddWindow) - то что бы я не делал с выпадающим окном - оно рисуется позади всех элементов в ScrollView.
GetParent()->BringToTop и аналогичные - не помогают. сталкивался ли кто с этим и как побороли?
Благодарю!
Перейти в начало страницы
 
 
 Roman
сообщение 20.03.2017, 22:19
Сообщение #2377


Почти Игроман
*********

Группа: Участник
Сообщений: 735
Регистрация: 08.03.2009
Из: Радары
Пользователь №: 10225



А правки движка из Lost Alpha вернутся в основной репозиторий, или это в принципе не имеет смысла?
Перейти в начало страницы
 
 
 abramcumner
сообщение 20.03.2017, 22:30
Сообщение #2378


Архимагистр Игры
*****************

Группа: Участник
Сообщений: 2946
Регистрация: 27.04.2011
Из: Россия
Пользователь №: 14366



Цитата(Roman @ 20.03.2017, 22:19) *
А правки движка из Lost Alpha вернутся в основной репозиторий, или это в принципе не имеет смысла?

"Основной репозиторий" - это на компе Григоровича? (IMG:style_emoticons/default/smile.gif) Как там было: "все программы приходят умирать к источнику"?

Сами правки не возвращаются пока, для этого нужен человек - заведи основной репозиторий и верни в него правки из ЛА.
Перейти в начало страницы
 
 
 Forser
сообщение 20.03.2017, 22:50
Сообщение #2379


Геймер
******

Группа: Участник
Сообщений: 147
Регистрация: 19.07.2015
Пользователь №: 22151



Цитата(abramcumner @ 20.03.2017, 22:30) *
Цитата(Roman @ 20.03.2017, 22:19) *
А правки движка из Lost Alpha вернутся в основной репозиторий, или это в принципе не имеет смысла?

"Основной репозиторий" - это на компе Григоровича? (IMG:style_emoticons/default/smile.gif) Как там было: "все программы приходят умирать к источнику"?

Сами правки не возвращаются пока, для этого нужен человек - заведи основной репозиторий и верни в него правки из ЛА.

Форков на основе сорцев ЛА я ещё не видел. Интересно будет посмотреть, что из этого получится.
Перейти в начало страницы
 
 
 Roman
сообщение 21.03.2017, 01:16
Сообщение #2380


Почти Игроман
*********

Группа: Участник
Сообщений: 735
Регистрация: 08.03.2009
Из: Радары
Пользователь №: 10225



Ну я имел ввиду Open-xRay или где сейчас ведется основная разработка и правка движка?
Перейти в начало страницы
 
 
 
 

 
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 26.03.2017, 23:47