Перейти к контенту

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


Rolan

Рекомендуемые сообщения

_Призрак_, снимаю шляпу, как говорится, однако, выглядят блудмарки хуже некуда.

Поделиться этим сообщением


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

Поделиться этим сообщением


Ссылка на сообщение
serega-gamer, это не по графике вылет. К нему приводит большая дальность видимости на равнинных локациях (болота - канонический пример).

Поделиться этим сообщением


Ссылка на сообщение

macron, а где брал локи, портированные из ЗП? Спрашиваю, потому что вылет происходит в движке, в методе VertexStream::Lock, очевидно, связанным с вертексами :). Возникает вылет из-за переполнения некоего буфера (mSize) Если ты брал портированные локи в мап-паке для ТЧ, то там в процессе портирования было сурово урезано количество вертексов на локациях (раз так в 6). Может, как раз поэтому нет переполнения и вылетов не наблюдается.

 

Добавлено через 1 мин.:

Gektor, А что за возможности звукового движка такие? И в ТЧ можно настроить звук, с помощью sound_env, например.

Изменено пользователем KD87

Поделиться этим сообщением


Ссылка на сообщение
Gektor, sound_occlusion для материала - это параметр отражения звука, а не глушения. Соответственно, для глушения звука надо ставить зоны sound_env в LE. Флаг воллмарков надо ставить в материале (Shader Editor -> Material).

Поделиться этим сообщением


Ссылка на сообщение
SibireaStalker, To enable motion blur in STALKER, you first need to add the -mblur switch to your STALKER launch icon. Это еще со времен ТЧ известно.

Поделиться этим сообщением


Ссылка на сообщение
SibireaStalker, да можно и батник, если с ним удобно. А вообще Cyclone правильно написал, добавь -mblur в свойствах ярлыка. Еще нюанс - это только включение возможности включения блюра, так сказать) Сам блюр потом еще надо настраивать в консоли вот такой командой: r2_mblur. Принимает значения от 0 (выкл) до 1 (на максимум). Экспериментируй.

Поделиться этим сообщением


Ссылка на сообщение
SibireaStalker, user.ltx удали. По логу видно же, что не может оттуда что-то прочитать.

Поделиться этим сообщением


Ссылка на сообщение

Erwin Rommel, 001B:0040B289 xrEngine.exe, CCC_LoadCFG_custom::operator=()

Это говорит о том, что еще не применил :)

Поделиться этим сообщением


Ссылка на сообщение
SibireaStalker, таких шейдеров нет, потому что это не шейдеры :). Если по-русски, то в логе написано: "неправильный синтаксис параметра r2_aa_break. Правильный синтаксис: три флоат-значения в интервале [0.000000e+000,0.000000e+000,0.000000e+000]-[1.000000e+000,1.000000e+000,1.000000e+000]". Блокнот в руки - редактируй user.ltx, переделывай проблемные параметры. Или удаляй вовсе.

Поделиться этим сообщением


Ссылка на сообщение
-StalkMen-, pdb - отладочная информация для бинарников. Если не ковыряешься с декомпиляцией - выкинь из головы. Это не имеет отношения к ресурсам игры.

Поделиться этим сообщением


Ссылка на сообщение

SkyLoader, _Призрак_, в CScriptBinder::set_object() есть проверка на сингловый тип игры. Надо не на нуль там заменять, а убрать проверку.

На билде 2947 выглядит вот так:

.text:1006F91F                 call    ?IsGameTypeSingle@@YA_NXZ; IsGameTypeSingle(void)
.text:1006F924                 test    al, al
.text:1006F926                 jz      short loc_1006F92F

Поделиться этим сообщением


Ссылка на сообщение
SkyLoader, билд 2947 - это фактически билд финалки. Для какого патча ты пытаешься что-то поменять?

Поделиться этим сообщением


Ссылка на сообщение

SkyLoader, скажи, а зачем пытаться перенести найденное в билдах 18xx в финалку? тебе недостаточно билдов 29xx с _отладочной информацией_?

Как бы то ни было, я нашел нужную тебе функцию в dll от четвертого патча:

.text:1012B4B0 sub_1012B4B0    proc near        ; DATA XREF: sub_10134FE0+F2Bo
.text:1012B4B0
.text:1012B4B0 arg_0           = dword ptr  4
.text:1012B4B0
.text:1012B4B0                 push    esi
.text:1012B4B1                 mov     esi, ecx
.text:1012B4B3                 push    edi
.text:1012B4B4                 mov     edi, [esi+4]
.text:1012B4B7                 test    edi, edi
.text:1012B4B9                 jz      short loc_1012B4C0
.text:1012B4BB                 call    sub_101CA330
.text:1012B4C0
.text:1012B4C0 loc_1012B4C0:                    ; CODE XREF: sub_1012B4B0+9j
.text:1012B4C0                 mov     eax, ds:?g_pGamePersistent@@3PAVIGame_Persistent@@A; IGame_Persistent * g_pGamePersistent
.text:1012B4C5                 mov     ecx, [eax]
.text:1012B4C7                 mov     eax, [ecx+424h]
.text:1012B4CD                 cmp     eax, 1
.text:1012B4D0                 mov     esi, [esi+4]
.text:1012B4D3                 jz      short loc_1012B4D9
.text:1012B4D5                 test    eax, eax
.text:1012B4D7                 jnz     short loc_1012B4E3
.text:1012B4D9
.text:1012B4D9 loc_1012B4D9:                    ; CODE XREF: sub_1012B4B0+23j
.text:1012B4D9                 mov     edx, [esp+8+arg_0]
.text:1012B4DD                 mov     [esi+114h], edx
.text:1012B4E3
.text:1012B4E3 loc_1012B4E3:                    ; CODE XREF: sub_1012B4B0+27j
.text:1012B4E3                 pop     edi
.text:1012B4E4                 pop     esi
.text:1012B4E5                 retn    4
.text:1012B4E5 sub_1012B4B0    endp

 

На всякий случай - то же самое в псевдокоде:

int __thiscall sub_1012B4B0(int this, int a2)
{
  int v2; // esi@1
  int result; // eax@3
  int v4; // esi@3

  v2 = this;
  if ( *(_DWORD *)(this + 4) )
    sub_101CA330();
  result = *((_DWORD *)g_pGamePersistent + 265);
  v4 = *(_DWORD *)(v2 + 4);
  if ( result == 1 || !result )
    *(_DWORD *)(v4 + 276) = a2;
  return result;
}

 

Чуешь, что надо менять? :)

проверка на тип игры тут:

.text:1012B4CD                 cmp     eax, 1

Для общей информации приведу перечисление для game_id:

enum s_gameid {
   GAME_ANY        => 0;
   GAME_SINGLE        => 0x01;
   GAME_DEATHMATCH    => 0x02;
   GAME_CTF        => 0x03;
   GAME_ASSAULT    => 0x04;
   GAME_CS            => 0x05;
   GAME_TEAMDEATHMATCH    => 0x06;
   GAME_ARTEFACTHUNT    => 0x07;
   GAME_LASTSTANDING    => 0x64;
    GAME_DUMMY        => 0xFF;
}

Изменено пользователем KD87

Поделиться этим сообщением


Ссылка на сообщение

SkyLoader, а чего там искать? имена всех экспортированных функций есть в функциях script_register_... Выполняешь поиск по нужному имени, дальше дело техники. Если отладочной информации нет и нужное имя не находится, можно взять ближайший билд с оной и с умом сравнивать - обычно удается найти то, что нужно (в этом случае так и сделал). Это в данном конкретном случае. В общем случае, конечно, сложнее - когда я составлял список версий спавна по билдам, искал вообще по битовым маскам, применяемым в CAE_Abstract::Spawn_read(). В общем, свой подход каждый раз.

 

Поделиться этим сообщением


Ссылка на сообщение
malandrinus, мне, например, нужны были форматы спавна для universal_acdc. Больше незачем :)

Поделиться этим сообщением


Ссылка на сообщение

_Призрак_, ну не только я так выражаюсь. pdb - контейнер для отладочной информации, разработанный Microsoft. А отладочная информация - это не столько имена функций, сколько их прототипы, указания типов и прочая радость. Конкретный набор данных определяется ключами при компиляции приложения (вроде как). В билдах 29xx отладочных данных настолько богато, что можно восстановить прототипы функций, структуры, перечисления, пользовательские типы, шаблоны. Местами даже имена переменных есть. Думаю, удастся восстановить даже классы - если попотеть.

 

SkyLoader, нет. А почему должно быть? CSE_Abstract::Spawn_read() - начальная часть чтения секции из all.spawn. По прочитанному s_name_replace определяется серверный класс объекта, и дальше запускается соответствующий метод STATE_Read. Кстати, правильно CSE_Abstract::Spawn_read(), это я опечатался.

Изменено пользователем KD87

Поделиться этим сообщением


Ссылка на сообщение
702, через скрипты - однозначно нет. Можно попробовать поковырять скриптовые шейдеры (gamedata/shaders/).

Поделиться этим сообщением


Ссылка на сообщение
dark_stalker, это в общем-то консольный параметр r__wallmark_ttl, он есть даже в ТЧ. Определяет, как долго остаются воллмарки, кажется. А зачем ковырять движок ради размера травы? Его можно изменить и в build.details. Xiani как-то даже делал парсер для этого.

Поделиться этим сообщением


Ссылка на сообщение
dark_stalker, естественно. Запусти игру, подойди к дереву и ударь по нему ножом. Увидишь свои воллмарки.

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...