Skip to content

Список изменений

xrSimpodin edited this page Feb 29, 2024 · 4 revisions

Основные изменения:

  • Полностью рабочий x64
  • Обновлён LuaJIT до актуальной версии 2.1
  • Обновлён Luabind
  • Все модули движка линкуются статически, поэтому оставлен только DX11 рендер
  • Звуковой движок с поддержкой OpenAl Soft и EFX
  • Интегрирован mimalloc - compact general purpose allocator with excellent performance
  • Интегрирован TaskThreadPool для удобной работы с потоками и асинхронными задачами. С его помощью реализован асинхронный расчет дождя (r_mt_rain), травы (r_mt_details), солнца (r_mt_sun).
  • Добавлен внутриигровой редактор погоды и звуковых зон на базе ImGui - включается в игре по двойному нажатию Shift + F10
  • Перенесена большая часть правок оригинального OGSE и Xray Extensions, а так же из X-Ray Engine by Alpet & KD
  • Вырезано огромное кол-во устаревшего и ненужного API, в т.ч. сетевого и мультиплеерного

Введена система настройки опций движка через конфиги

Сделано это для того, чтобы нововведения, ломающие совместимость с оригинальной игрой, можно было включать/выключать по желанию и без необходимости пересборки движка. Лично я для этого использую external.ltx , но можно их же просто в system.ltx добавить, кому как удобнее. Подробную информацию о большинстве опций можно так же найти в этом Wiki.

Общие важные нововведения:

g_console_show_always -- для рендеринга лога консоли всегда
rs_always_active -- включить режим, в котором игра не будет вставать на паузу при переключении на другие окна.
g_zones_dbg -- Включить визуальную отладку рестрикторов, аномалий, переходов, лестниц и прочих зон игре.
g_vertex_dbg -- Включить визуальную отладку АИ-сетки в игре.
g_crosshair_dbg -- Принудительный показ перекрестья прицела, для настройки прицеливания, например.
g_music_tracks -- Включить музыкальный эмбиент.
g_ammunition_on_belt -- Включить использование патронов только с пояса
g_spawn <section_name> -- Спавн предмета по имени секции на землю
g_spawn_to_inventory <section_name> -- Спавн предмета по имени секции в инвентарь актора
hud_draw -- Показать/скрыть худ.
hud_adjust_mode -- Настройка прицеливания для оружия. Вот видео, как ей пользоваться: https://www.youtube.com/watch?v=kIcXzWVR2xI
show_wnd_rect -- Визуальная отладка UI в игре
show_wnd_rect_all -- Визуальная отладка UI в игре
show_wnd_rect_names -- Показывать имена UI статиков в отладке
jump_to_level <level_name> -- быстрый переход на нужный уровень
time_factor -- Команда для перемотки времени. Заоблачные цифры выставлять не рекомендую, движок может заклинить
hud_crosshair_build -- включить круглый курсор, как в билдах.
rs_hw_stats --показ статистики нагрузки CPU
set_weather --команда для изменения погоды
input_exclusive_mode --команда для настройки режима захвата клавиатуры/мыши. По умолчанию должно быть включено. Выключать только тем, кому надо чтобы после запуска движка не блокировались мультимедийные клавиши на клавиатуре. Но при отключении может возникнуть множество различных проблем на системах с несколькими мониторами и не только из-за недозахвата управления. Здесь, в отличие от ЗП, значение этой команды сохраняется в user.ltx.
g_camera_collision -- Вкл/выкл псевдо-коллизию камеры
g_font_scale_x -- Ширина шрифтов
g_font_scale_y -- Высота шрифтов
dbg_draw_skeleton -- Визуальная отладка скелетов объектов в игре
dbg_string_table_error_msg -- Отладочная команда для вывода непереведённых строк в лог
  • Добавлена поддержка спавн файлов со встроенным гейм графом, как в ЗП. Собрать спавн в таком виде можно через универсальные компиляторы с дополнительным ключом -insert_graph. Такие спавны не требуют глобального game.graph и локальных level.gct, level.graph. При отсутствии данного чанка (с графами) в файле спавна, игра будет загружать game.graph и спавн, как раньше.
  • Добавлена поддержка чтения patrol_path из ltx файлов напрямую, вместо all.spawn. Формат файлов такой же, как выдает ACDC при распаковке. Для подключения, добавить куда-нибудь в system.ltx:
[engine_custom_spawn]
waypoints_file = <name_of_file.ltx> ; путь к файлу в $game_config$

При загрузке, пути из файла будут заменять пути из all.spawn с таким же именем. Можно вообще убрать пути из своего all.spawn и все перенести в ltx файлы, для удобства. Если переопределить путь пустой секцией, то этот путь будет удаляться.

  • Добавлена возможность подменять userdata в ogf моделях. Для этого нужно создать файл рядом с файлом модели с таким же именем но с расширением .ltx. Например:
Оригинальная модель:   gamedata\meshes\actors\hero\stalker_novice.ogf
Новый файл с userdata: gamedata\meshes\actors\hero\stalker_novice.ltx
  • Добавлена возможность переопределять файлы omf-анимации в моделях. Для этого в кастомдате, в .ltx например, нужно сделать так:
[omf_override]
stalker_animation1 ;Путь до omf файла относительно папки meshes без расширения
stalker_animation2
...
stalker_animationN

В результате, указанные файлы анимаций будут использоваться вместо тех, что прописаны в ogf. Сделано это чтобы можно было для ЗП моделей использовать анимации из ЗП, не заменяя все ТЧ-модели с их ТЧ-анимациями.

  • Добавил чтение файлов уровня level.ps_static.ltx и level.snd_static.ltx по аналогии с бинарными файлами level.ps_static и level.snd_static для более удобного редактирования. У ltx файлов более высокий приоритет над бинарными. Пример.
  • Добавлена поддержка инверсной кинематики для моделей НПС/актора, чтобы они могли правильно ходить по неровным поверхностям. Для работы нужны omf анимации для НПС с поддержкой кинематики. Бета-версию таких анимаций можно скачать >>здесь<<. Эти анимации правил @D1m0n93. Буду их обновлять, если будут новые версии. Можно так же использовать файлы анимаций из других модов, в которых кинематика работает.
  • Добавлена возможность создавать свои keyboard action через конфиг c возможностью настройки клавиши через меню. Пример:
[custom_keyboard_action]
dlg_quickaction = kDLG_QUICKACTION

в config\ui\ui_keybinding.xml:

<command id="kb_dlg_quickaction" exe="dlg_quickaction" />

в config\ui\carbody_new_16.xml:

<take_all_btn x="765" y="727" width="157" height="48" highlight_text="1" accel_action="dlg_quickaction">
...
</take_all_btn>

НО из-за того, что двиг все кнопки биндит без контекста, это не так удобно. Нельзя например в диалоге повестить туже кнопку что и на бег в игре.

  • Добавлена опция outfit_af. Она включает режим, когда для брони начинают обрабатываться свойства *_restore_speed, как у артефактов. Для того, чтобы у костюмов работали свойства восстановления здоровья и тп.
  • Коллизию с трупами можно включить в секции features параметром corpses_collision. Учитывайте, что если она включена, мобы будут тупить, уперевшись в тушку мутантами, т.к. не умеют обходить препятствия, а также гора трупов будет лагать.
  • Добавил в секцию features параметр gd_master_only, отключающий смену уровня сложности. Будет единственный уровень сложности, тот, который стоит по умолчанию, т.е. мастер.
  • Поправлен баг, когда можно было подобрать предмет, не видя его, т.е из закрытого шкафа, например. Включается опцией pickup_check_overlaped, на всякий случай, чтобы можно было сохранить стандартное поведение ТЧ, если вдруг понадобится.
  • Добавлена телепортация актора в режиме demo_record. Нажатие на Enter телепортирует актора туда, где в данный момент находится камера.
  • Добавлена поддержка полупрозрачного cплэша в формате png. Можно заменить сплэш, положив в папку с движком splash.png. Разрешение сплэша - 804х538.
  • С ключом -multi_instances можно отключить ограничение на запуск нескольких движков одновременно
  • Перенесена система эффекторов камеры из OpenXRay. Добавилась поддержка анимаций движения актора anims\\camera_effects\\actor_move\\*, заработал эффектор приземления после прыжка.
  • Добавлен режим более строгой проверки синтаксиса xml файлов
;Игнорировать ошибки парсинга xml (в ТЧ они встречаются даже в оригинальной игре)
skip_shoc_xml_errors = false
  • Добавлена поддержка Anomaly-style распакованных партиклов. Добавляем в fsgame.ltx:
$game_particles$        = true|     false|  $game_data$|        particles\

Пишем в консоли particles_export - двиг распакует все загруженные партиклы в текстовый формат. После этого двиг будет всегда читать распакованные партиклы из этой папки вместо файлов particles*.xr, если эта папка не пуста. Можно после редактирования распакованных партиклов используя конс. команду particles_import упаковать их обратно в один particles_cop.xr файл в ЗП-формате (это важно, партиклы в ЗП-формате должны быть названы именно так, т.к. имеют отличия от ТЧ-формата партиклов и читаются немного по-другому.) Стоит заметить, что запуск двига с распакованными партиклами происходит немного дольше.

  • Добавлена поддержка распаковки shaders.xr. Чтобы распаковать, в консоли должна быть активирована команда shaders_xr_export. После запуска двига, двиг распакует этот файл в текстовый shaders.ltx и после этого будет читать только этот конфиг вместо .xr файлов. Распакуется как shaders.xr, так и shaders_cop.xr (ЗП-вариант, если он есть).
  • Добавлен редактор для звуковых зон (запускается как и редактор погоды по SHIFT + F10) После редактирования настройки зон сохранятся в текстовом формате senvironment.ltx и после этого двиг будет читать только этот конфиг вместо senvironment.xr. Просто распаковать senvironment.xr можно активировав консольную команду senvironment_xr_export.
  • Добавлена консольная команда dbg_lalib_dump для дампа в лог текущего ELightAnimLibrary. Редачить его в тексте смысла нету - проще в SDK, но каждый раз искать что там - напряжно.

Все остальные нововведения тезисно:

Инвентарь, торговля и тп.:

<string id="st_attach_addon_to_wpn_in_slot_1">
  <text>прикрепить %s к %s в первом слоте</text>
</string>

Если кому не нравится длинный текст, можно просто написать что-то вроде: прикрепить к оружию в первом слоте

  • Включить прятание оружия в диалогах, при открытом инвентаре, ПДА, торговле и обыске, а так же обездвиживание актора при открытом инвентаре можно в секции features параметром more_hide_weapon
  • Добавил флаг FIHiddenForInventory для инвентарных предметов, которым можно скрыть в инвентаре иконку предмета.
  • Добавил возможность задать предмету безусловную негрупперуемость в инвентаре. Делается это в секции предмета:
always_ungroupable = true

Можно и скриптово, через:

obj:get_inventory_item().always_ungroupable = true
  • Добавлена поддержка звуков для окна обыска, чтобы заработало надо добавить action_sounds в carbody_new.xml по аналогии с inventory_new.xml
  • Добавил возможность запрета покупки определённых предметов в окне торговца. Для запрета нужно скриптово установить предмету флаг FIAlwaysUntradable. Этот флаг запрещает покупку предмета актором.
  • Добавлен режим торговли, при котором можно продать вещи сталкеру, даже если у него не хватает денег. Этот режим включается через:
[trade]
others_zero_trade = true ;Если у сталкера меньше денег, что стоимость продаваемого, то все будет ему продано за ту сумму, что у него есть. Если у него 0, то все будет продано за 0.
  • Перенесены из ЗП следующие параметры для dragdrop элементов:

vertical_placement="1" - включает вертикальный слот

cell_sp_x, cell_sp_y - задают отступы после иконки предмета по горизонтали и вертикали.

always_show_scroll="1" - включает постоянный показ скролла.

virtual_cells="1" - включает возможность выравнивания иконки предмета внутри dragdrop с помощью следующих параметров:

vc_vert_align="c|r" - по вертикали центральное или правое.

vc_horiz_align="c|r" - тоже самое по горизонтали.

возможность задать цвет через стандартные a/r/g/b параметры.

  • Добавлены новые параметры для dragdrop элементов:

highlight_cell_sp="0|1" - включает заполнение промежутков, сделанных с помощью cell_sp_x/y, текущей подсветкой. По умолчанию включено. Если выключить, при при использовании cell_sp_x/y будут полоски в подсветке, если предмет занимает несколько ячеек.

highlight_all_cells="1" - включает режим подсветки, при котором подсвечиваются все ячейки dragdrop, а не только те, на которых лежит предмет. Если используется virtual_cells с выравниванием, то этот режим лучше включить, иначе иконка будет сдвинута по отношению к подсвеченным ячейкам.

  • Добавлена новая опция, запрещающая прерывание диалога с НПС:
[features]
; Из начатого диалога можно выйти только выбрав соотв. фразу. Что бы не было такого, жмакнул Esc и побежал, не подтвердив задание. А потом будут удивляться, а чего-то это чего-то там найти не могу. А чего это оно у меня не заспаунилось.
disable_dialog_break = true

Слоты:

  • Добавлено восстановление активного слота после загрузки сейва.
  • Равнозначные слоты. Предметам разрешено находиться не в одном слоте, заданном параметром "slot", а в любых слотах из списка тех, которые заданы в параметре "slot". Например, вот так:
slot = 1,2

Вместе с этим добавились новые опции в секцию [features] в конфигах:

[features]
; Первый и второй слоты у любого оружия будут принудительно равнозначными.
; Сделано для удобства - сделал слоты в инвентаре одинаковыми по размеру, включил этот режим - и всё.
; Не нужно прописывать slot = 1,2 в десятках конфигов оружия.
forcibly_equivalent_slots = true

; Показывать расширенное контекстное меню для равнозначных слотов.
; Добавляет пункты переместить в каждый доступный слот.
slots_extend_menu = true
  • Отключить переключение между слотами колёсиком мыши можно консольной командой g_mouse_wheel_switch_slot. Если отключено, будет работать переключение режимов огня колёсиком мыши. Переключения не циклическое. Т.е. дойдя в одну сторону до одиночного режима, а в другую - до автоматического - далее на другой режим уже переключаться не будет. Таким образом можно быстро переключиться на одиночный или автоматический режим, просто сильно крутанув колёсико.
  • Слоты ножа, бинокля, шлема, биорадара, ПНВ, детектора артефактов, фонаря включаются в секции features параметром ogse_new_slots.
  • Старый вариант отображения слота костюмов в инвентаре можно включить опцией old_outfit_slot_style в секции features.
  • Добавлена опция ruck_flag_preferred, позволяющая для всех предметов реагировать на флаг FRuckDefault. Если флаг установлен, хабар будет подбираться в рюкзак, а не в слот по умолчанию. Что бы все работало нормально, нужно добавить
default_to_ruck = false

как минимум в секцию [bolt]. Иначе не получится доставать и кидать болт. А для надежности, еще в [device_pda], [device_torch] и в секции гранат.

  • Добавил возможность изменять видимость слотов через конфиг секцию [inventory], параметры slot_visible_1-12 (нужно для того что бы активировать слот, по умолчанию в движке часть слотов сделаны не активируемыми). Например:
[inventory]
slot_visible_10 = true ;теперь можно активировать 10й слот
  • Добавлена возможность ускоренного переключения на некоторые слоты. Пример конфигурации:
[inventory]
slot_switch_fast_1 = true ;при переключении на первый слот с другого слота, текущее оружие будет скрываться немедленно, без анимации убирания.
  • Теперь можно указывать для костюма кол-во доступных слотов под арты параметром artefact_count в конфиге костюма. Если костюма нет, используется новый параметр min_belt из секции [inventory]. А если костюму кол-во артов не прописано и/или не прописан min_belt в конфиге инвентаря, то используется старый параметр max_belt, в котором всегда обязательно должно быть прописано максимальное кол-во слотов под арты. Для заблокированных слотов под арты используется седьмой квадрат из текстуры ui_grid.dds. Менять кол-во слотов под арты можно в любое время без требования начинать новую игру, ранее это было невозможно. Обращаю внимание, что для правильной работы этой системы, предметы, размещаемые на поясе должны занимать ровно одну ячейку (inv_grid_width = 1, inv_grid_height = 1), иначе будут вылеты!

ПДА:

  • Добавлена поддержка 3D PDA. Важный нюанс: для его работы слот пда должен быть активируемым:
[inventory]
slot_visible_8 = true ;pda
  • Добавлены пользовательские метки на карте. Активируются дабл-кликом по глобальной карте. Редактировать метку можно нажав по ней ЛКМ. Тип метки можно переопределить в конфигах. По умолчанию используется red_location, но лучше добавить отдельный тип метки, текстура которой уже есть ресурсах ТЧ. Например:
[user_spots]
; Переопределить тип метки, используемой для пользовательских меток на карте. По умолчанию используется red_location
spot_type = yellow_flag_location

Так же не забыть добавить в map_spots.xml:

<yellow_flag_location>
  <level_map spot="yellow_flag_spot" pointer="quest_pointer"/>
</yellow_flag_location>
<yellow_flag_spot x="0" y="0" width="32" height="32" stretch="1" alignment="c" light_anim="ui_slow_blinking_alpha" la_cyclic="0">
  <texture>ui_icons_mapPDA_place_e</texture>
</yellow_flag_spot>
  • Поддержка сортировки статей в энциклопедии. В любом разделе, где есть статьи с атрибутом sort="1", все статьи будут отсортированы по алфавиту. Например:
<article id="enc_amk_recipt_electra_dikoobraz" name="af_dik_2" group="enc_recipts" sort="1">
...
  • Кол-во сообщений в ПДА, которые будут сохраняться и отображаться в ПДА, можно настроить в секции актора:
news_to_show = 500; Сколько сообщений хранить в ПДА. По умолчанию - 500.
; В ПДА, для каждого задания будут показываться только следующее подзадание и все предыдущие. Т.е. подзадания будут открываться по мере выполнения.
show_objectives_ondemand = true

Если эта опция включена, то подзадания будут по умолчанию скрыты, если нет атрибута show_all_objectives="1" в описании задания, в <task>. Если эта опция выключена или отсутствует, то все подзадания будут показаны, если нет show_all_objectives="0".

  • Добавил в секцию [features] опцию keep_inprogress_tasks_only. Если включено, при каждой загрузке сейва будут удаляться выполненные и проваленные задания.
  • Добавил удаление статей при отбирании поршня, которым эти статьи были добавлены. Этот режим включается дефайном REMOVE_ARTICLES_ON_DISABLE_INFO. Допустим, у нас есть
<info_portion id="info1">
  <article>article1</article>
</info_portion>

При его выдаче в ПДА появится статья article1. Если этот поршень потом отобрать, то без REMOVE_ARTICLES_ON_DISABLE_INFO статья article1 в ПДА останется. С этим же дефайном, статья будет из ПДА удалена.

  • Расширенная настройка статистики в ПДА. В левой части можно включить показ кол-ва вместо очков. Это включается аттрибутом show_counts. Вот пример из actor_statistic.xml:
<master_part x="0" y="0" width="250" height="25" id="stalkerkills" show_counts="1">

<!-- В правой части можно включить сортировку списков по кол-ву от большего к меньшему. Вот пример из того же файла: -->

<detail_part_def x="0" y="0" width="390" height="25" sort_by_counts="1">
...
</detail_part_def>

<detail_part_stalkerkills x="0" y="0" width="390" height="25">
...
</detail_part_stalkerkills>

Здесь сортировка включена для всех разделов, кроме списка сталкеров. Отвечает за это аттрибут sort_by_counts.

Шрифты:

  • Переделана система шрифтов и парсер текста для корректной поддержки UTF-8. Шрифты с поддержкой UTF-8 можно генерировать используя Fonts_generator. Обратная совместимость с ANSI-символами, детект UTF-8 BOM и прочие нюансы учтены.
  • Добавлены тени для шрифтов. В будущем надо будет подумать как лучше их настраивать.
  • В меню добавлена настройка размера шрифтов - особенно пригодится обладателям мониторов с сверхвысокими разрешениями. Регулируется ширина и высота шрифтов конс. командами g_font_scale_x, g_font_scale_y.
  • Добавлена поддержка использования любых секций шрифтов для UI через xml & lua без необходимости править движок. Например, создаем где-нибудь в font.ltx шрифт [letterica18_small], и используем в xml: <text font="letterica18_small" r="127" g="127" b="127"/>
  • Добавлен экспорт в скрипты для всех именных шрифтов, которые есть в движке.
  • Починен параметр width_correction у шрифтов, и поэтому переименован в font_width_correction
  • Чтобы не создавать кучу текстур шрифтов для разных размеров текста, можно создать одну текстуру большого размера и уменьшать через конфиг до нужной величины, например:
[ui_font_bender]
shader    = font
texture   = ui\ui_font_bender ;Текстура сгенерированного шрифта большого размера
scale_x   = 0.5 ;Уменьшаем в два раза высоту
scale_y   = 0.5 ;Уменьшаем в два раза ширину
interval  = 1, 0.75 ;Можно регулировать интервал между буквами сверху и сбоку.

UI:

  • При зажатом shift скролл прокручивает в три раза быстрее
  • Добавлена поддержка переключения языка в полях ввода текста
  • Поддержка многострочного ввода текста через CUIEditBoxEx
  • Добавлена поддержка выравнивания текста по двум сторонам (alJustified для скриптов, align="j" для xml)
  • Загрузочный экран вынесен из движка в ui_mm_loading_screen.xml и доступен для редактирования. Можно с лёгкостью менять его как угодно.
  • Добавил приоритеты для худовых статиков из ui_custom_msgs.xml. Атрибут в xml: priority. Необязательный. Статики будут отрисовываться в порядке возрастания priority. Может пригодиться для избежания неправильного наложения статиков друг на друга.
  • Поправлена система худовых подсказок. Теперь они не будут показываться, когда не должны, заодно добавил подсказки для таскания предметов (которое на самом деле работало и на оригинальном движке, если кто не знал, если визуал предмета, ящика например, прописан в [ph_capture_visuals], просто подсказок не было). Соотв. надо добавить в локализацию что-то вроде:
<string id="inventory_item_use_or_drag">
	<text>Поднять предмет ($$ACTION_USE$$) \n Перетащить предмет (SHIFT+$$ACTION_USE$$)</text>
</string>
<string id="game_object_drag">
	<text>Перетащить предмет (SHIFT+$$ACTION_USE$$)</text>
</string>
  • Для CUICheckButton и CUIRadioButton можно менять текстуру через <texture/>
  • Новые режимы для прогрессбаров: mode="from_center" - от центра к краям, mode="horz" - слева направо, mode="back" - справа налево. Так же есть и вертикальные режимы: mode="vert", mode="down", mode="vert_from_center"
  • Добавил поддержку секции [string_table_files]:
;теперь вместо такого формата:
[string_table]
files = ui_st_pda, ui_st_mm_mp, ui_st_inventory, ...

;можно писать вот так, более удобно:
[string_table_files]
ui_st_pda
ui_st_mm_mp
ui_st_inventory
...
  • Для UITrackBar добавил возможность указывать в xml в атрибутах min, max значения, что бы уточнять пределы регулировки настроек. Добавил вывод текущего значения настройки на слайдер.

  • Сделаны отключаемыми кринжовые статики кубиков в ПДА (a_static, anim_static)

  • Поддержка рандомных загрузочных экранов (intro_l01_escape_1.dds, intro_l01_escape_2.dds, 3, 4, ...)

  • Название валюты вынесено в xml: ui_st_money_descr

  • Добавил метод game.stop_tutorial и ЗП-стайл экшены для туториалов типа такого:

<action id="use" finalize="1">xr_effects.pri_a18_use_idol</action>
  • Для статиков можно указывать прозрачность. ogm видео теперь тоже поддерживает регулировку прозрачности, как и обычные текстуры. Примеры: XML:
<!-- color_alpha="192" указывает, что текстура будет иметь 25% прозрачности. Значение от 0 до 255, от полностью прозрачной (не видимой) до полностью оригинальной текстуры. При отсутствии этого параметра текстура показывается как есть, т.е. без доп. прозрачности. -->
<hud_gaz_blue x="0" y="0" width="1024" height="768" stretch="1" color_alpha="192"
  light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1" priority="30">

LUA:

local cs = get_hud():GetCustomStatic( hud_static )
cs:wnd():SetColorA( 128 ) --Здесь SetColorA установить прозрачность статика в 50%.
cs:wnd():SetColorA( 255 ) -- Этот вызов вернет статик к его оригинальному виду, т.е. без доп. прозрачности.
  • Добавлена поддержка круглой миникарты и часов на ней. Пример настройки:
    <minimap rounded="1" alpha="220">
        <level_frame x="75" y="670" width="172" height="172" stretch="1" alignment="c"/>

        <background width="350" height="380" stretch="1" alignment="c">
            <texture></texture>
            <dist_text x="75" y="3" width="100" height="20">
                <text align="r" font="letterica16" color="ui_clr_1" />
            </dist_text>
        </background>

        <clock_wnd x="18" y="170" width="39" height="16" alignment="c">
            <text x="0" y="0" font="letterica16" color="ui_clr_1" align="c" vert_align="c" />
        </clock_wnd>

        <compass x="75" y="670" width="192" height="192" stretch="1" heading="1" alignment="c">
            <texture></texture>
        </compass>

        <center width="4" height="4" alignment="c" stretch="1" heading="1">>
            <texture></texture>
        </center>
    </minimap>

ГГ:

; Оба параметра опциональные, без них все будет работать как и раньше.
satiety_light_limit    = 0.6666
satiety_critical_limit = 0.3334
; Теперь можно разделить состояние голода на 3 зоны:
;   satiety выше satiety_light_limit: параметры satiety_power_v и satiety_health_v - работают в полную силу.
;   satiety ниже satiety_light_limit:
;     satiety_power_v начинает действовать пропорционально меньше, при satiety = 0, сила не будет восстанавливаться вообще.
;     satiety_health_v начинает действовать пропорционально меньше, при satiety меньше satiety_critical_limit здоровье начинает уменьшаться пропорционально голоду.

Схема в виде таблицы:

  • Добавил опциональный альтернативный расчет коэффциента веса для прыжков. Включается через секцию [features]:
[features]
; Этот режим меняет расчет коэффициента веса при прыжках. По умолчанию этот коэффициент рассчитывается с использованием веса, добавляемого броней. При включении этого режима, коэффициент веса будет рассчитываться так же, как он считается для ходьбы, т.е. без учета добавляемого веса от брони, т.е. переносимый вес в свитере + артефакты.
condition_jump_weight_mod = true
  • Добавлен опциональный запрет на прыжки при замедлении после укуса. Включается в:
[actor]
hit_slowmo_jump = true ;Пока действует замедление, прыжок будет заблокирован. Замедление действует в зависимости от хита, но не более секунды.
  • Добавил параметр jump_require_power (по умолчанию false) в секцию [actor_condition]. Если включен - перед прыжком будет проверяться, что ГГ имеет достаточно силы для прыжка с учетом веса рюкзака.
  • Добавил возможность изменения величины угла выглядывания через конфиг. По умолчанию в движке используется 45 градусов. Если нужно изменить, как сильно актор сможет выглядывать, теперь это можно сделать с помощью lookout_angle в секции [actor].
  • Добавил актору ph_box3, ph_box4. Параметры ph_box3_* и ph_box4_* - это размеры боксов актора при движении в присяди и в полном присяде. Если эти параметры не указаны, то будут использоваться ph_box1 и ph_box2 соотв., т.е. никаких изменений. Эти боксы нужны потому, что от третьего лица видно, что высота актора сидя и сидя в движении - разная, а значит и высота камеры тоже должна быть разная. Без этого получается, что сидя за препятствием, актор полностью скрыт, а камера находится над головой, над препятствием, т.к. сидячий бокс настроен по размерам на актора в движении. А раз камера находится над препятствием, то игрок все видит и может стрелять. Вот пример настройки новых боксов:
; Физические размеры героя. Позволяет залезать в тесные пространства, например, в трубы. 2-е значение - высота ГГ.
ph_box0_center = 0.0,  0.9,   0.0
ph_box0_size   = 0.35, 0.9,   0.35
; в присяде
ph_box1_center = 0.0,  0.45,  0.0
ph_box1_size   = 0.35, 0.45,  0.35
; при движении в присяде
ph_box3_center = 0.0,  0.65,  0.0
ph_box3_size   = 0.35, 0.65,  0.35
; в полном присяде
ph_box2_center = 0.0,  0.40,  0.0
ph_box2_size   = 0.30, 0.40,  0.30
; при движении в полном присяде
ph_box4_center = 0.0,  0.5,   0.0
ph_box4_size   = 0.30, 0.5,   0.30

ph_box3 и ph_box4 получили ту высоту, которая была у ph_box1 и ph_box2, а первый и второй стали ниже. Заодно добавил сохранение положения тела между сейвами, что бы не получалось так, что актор заползет под стол и там сохранится, а потом, при загрузке этого сейва, он стоит, застряв в столе.

Мутанты:

  • Добавлена поддержка практически всех монстров из ЗП со всеми их атаками, анимациями, аурами, эффекторами и тп.
  • Ауры мутантов по сравнению с ЗП, немного переделаны:

Переделан способ обнаружения этих аур. В ЗП, мутанты вокруг брались из ПДА. Они не отображались, но в списке имелись. Решение плохое, т.к. радиус обнаружения ПДА конфигурируется и он один. Т.е. если кто-то захочет, что бы ПДА показывал сталкеров только на расстоянии 10 метров, то дополнительно он получит, что все ауры мутантов станут действовать не расстоянии не более 10-ти метров. В нашем же варианте используется свой собственный Feel::Touch, а радиус для него берется, как максимальная дальность ауры у всех мутантов в онлайне.

Поправлена обработка *_enable_for_dead. Этот параметр указывает, нужно-ли продолжать использовать эту ауру для мертвого моба. Для radiation_* он по умолчанию true. Вот только в ЗП, при обновлении состояния актора, этот параметр не учитывается. Т.е. эффектор включаться будет, а вот хит наносится не будет, т.к. там учитываются только живые. В нашем варианте хит будет наноситься.

  • Секцию фантомов для Пси-собаки можно переопределить в её конфиге параметром phantom_section.
  • Добавлены новые опции в конфиг контроллёра:
tube_disable_camera_effect = true ; позволяет отключить перемещение камеры актора во время атаки
tube_disable_actor_block = true ; позволяет отключить блокировку управления актора во время атаки
  • Труп огненного полтергейста можно сделать видимым, указав в его секции:
dead_always_visible = true
  • Научил полтергейстов, бюреров и псевдогигантов не трогать объекты с привязанными костями, а так же объекты у которых в секции есть
ph_heavy = true
;или
quest_item = true
  • Добавил в секцию псевдогигантов опцию HugeKick_Hit_Jumping_Actor. Если включить, то прыжок актора будет проигнорирован и будет нанесен хит.
  • Добавил полтергейстам возможность иметь разные иммунитеты в видимом и невидимом состояниях. В невидимом состоянии полтергейст использует immunities_sect, а в видимом - visible_immunities_sect. Если visible_immunities_sect нет, то всё без изменений. Пример использования
  • Расширены возможности Spawn_Inventory_Item_Section. Теперь в этом параметре может быть список через запятую вида:
Spawn_Inventory_Item_Section = mutant_krovosos_red_jaw, 0.05, mutant_krovosos_jaw, 0.2
; т.е. если рандом меньше 0.05, то у мутанта будет mutant_krovosos_red_jaw. Если нет, то генерируется новое случайное число и проверяется следующая часть и так далее, пока не кончится список или не будет что-то заспаунено. Если в этом списке только один элемент, то все работает по старому и его вероятность берется из Spawn_Inventory_Item_Probability.
; Spawn_Inventory_Item_Probability теперь необязательный параметр и его значение по умолчанию - 0. Это что бы можно было его не указывать, если в Spawn_Inventory_Item_Section находится список с вероятностями.

Погода:

  • Теперь мы не будем поддерживать два вида шейдеров, для тч и зп погоды. Шейдеры в OGSR GA и здесь будут общие. Соотв. корректная работа этих шейдеров на тч-погоде не гарантируется. Рекомендуем использовать зп-погоду, например эту или любую другую.
  • Добавлена поддержка погоды из ЗП. Тип погоды определяется по наличию специфичных для этой погоды строк в fsgame.ltx. Если их нет - используется ТЧ-стайл погода.
$game_weathers$        = true| false| $game_config$| environment\weathers
$game_weather_effects$ = true| false| $game_config$| environment\weather_effects
  • Для ЗП-погоды добавлен параметр для отключения автоматического расчета положения солнца, что бы положение бралось из погодных секций. Параметр берется из config/environment/environment.ltx:
[environment]
; Положение солнца брать из погодных секций. Можно например использовать для Atmosfear 3, чтобы луна работала.
dynamic_sun_movement = false ; по умолчанию - true, т.е. положение солнца расчитывается автоматически.
  • Для ТЧ-погоды автоматический рассчёт положения солнца можно включить в секции features параметром dynamic_sun_movement. Но в этом случае луна во многих погодах может перестать работать.
  • Для работы SSS-стайл ветра в погодных секциях должны быть правильно настроены параметры wind_velocity, wind_direction.

AI:

  • Поправлен баг, когда можно было выкинуть в НПС оружие и оно тут же попадало к нему в инвентарь. Дело в том, что тут были две не зависимые части. Одна часть - это движковая схема, которая приводит непися на позицию предмета. Вторая часть - это подбирание всего, что оказалось в радиусе непися. Теперь вторая часть будет отключена, если отключена первая. Если кто не знает, движковая схема подбирания оружия для НПС отключается вот так:
local manager = npc:motivation_action_manager()
manager:remove_evaluator( stalker_ids.property_items )
manager:add_evaluator( stalker_ids.property_items, property_evaluator_const( false ) )
  • Новый параметр для сталкеров - max_hear_dist, как у мутантов. Значение по умолчанию -1, т.е. не используется. Если значение положительное, то все звуки дальше этого расстояния игнорируются и в память не заносятся.
  • Новый параметр для сталкеров - forget_killer_time. Это кол-во секунд, когда нужно забыть id убийцы. По умолчанию используется оригинальное значение 180 секунд.
  • Добавлено влияние тумана на зрение мобов. Чем глубже объект в тумане, тем медленнее его должны видеть мобы. В [vision_free_section] и [vision_danger_section] добавлены параметры, регулирующие это:
fog_factor = 1 ;Задаёт коэффициент для плотности тумана. По умолчанию 1. В этом случае на расстоянии fog_far точка будет цвета тумана, а не объекта и на этом расстоянии мобы никогда не увидят объект. Если этот коэффициент увеличивать, то расстояние, на котором мобы не рассмотрят объект, будет уменьшаться. Если задать 0, то туман не будет влиять на зрение, т.к. плотность тумана станет тоже 0.
fog_pow = 5 ;Задаёт кривизну зависимости плотности тумана от расстояния. По умолчанию 5. Кривизна плотности тумана рассчитывается по формуле y = x в степени fog_pow.
;График такой функции выглядит примерно вот так:
;      *
;     *
;   **
;***
; т.е. чем дальше, тем сильнее увеличивается плотность тумана. Это для того, что бы туман тем сильнее влиял на зрение, чем дальше объект в тумане. Что бы он как можно меньше влиял на близких и средних дистанциях.
  • Добавлена возможность настроить зависимость скорости разглядывания актора от полунепрозрачных препятствий. Чем больше полунепрозрачных препятствий между мобом и актором, тем медленнее моб будет актора "разглядывать". По умолчанию выключено. Включается в секциях зрения мобов:
; степень замедления разглядывания, в зависимости от густоты полупрозрачных материалов между неписем и актором. Чем меньше значение, тем медленнее разглядывание. При 1 замедление соответствует степени полупрозрачности материалов. Т.е. если у кустов прозрачность 0.7, то и скорость разглядывания будет умножена на 0.7.
transparency_factor = 1
  • Добавлен динамический размер визуальной памяти у мобов. Настраивается вот так вот в секции мобов:
DynamicObjectsCount = 32
; как долго хранить в визуальной памяти объекты, если их кол-во превышает DynamicObjectsCount
DynamicObjectsCount_adaptive = 10000 ;10 сек
  • Если указать в секции сталкера
fast_can_kill_entity = true

то движок не будет тратить ресурсы на проверку Friendly-Fire при рассчёте стрельбы. Это подходит для ОГСЕ, где боевка и обработка FF находятся в скриптах.

Расширения для скриптов:

Прочие изменения, не подходящие ни под одну из категорий выше:

  • Добавлен носимый инвентарный ящик из NLC ветки xp-dev (CInventoryContainer)
  • Добавлено свойство eat_psy_health для съедаемых предметов (для восстановления пси-здоровья).
  • Экспортирован в скрипты (доступен для регистрации в class_registrator.script) и расширен класс CInfoDocument Теперь он умеет выдавать поршень, имя которого указано не только в его нетпакете, но и из custom_data и конфига. В custom_data понимает секцию known_info. Пример:
[known_info]
info1
info2
infon

В конфиге понимает параметр known_info. Пример:

[quest_doc1]
known_info = info1, info2, infon
  • Добавил детекторам возможность трещать от внутренней радиации актора. Включается параметром
detect_actor_radiation = true

в секции детектора.

  • Добавлена поддержка zone_radius_%d для детекторов аномалий. При наличии такого параметра, аномалия будет обнаруживаться на этом расстоянии, а не на том, которое указано в параметре radius. Т.е. для отдельных классов аномалий можно указывать меньшее расстояние обнаружения. Большее - нельзя, т.к. то, что указано в radius - это максимальное расстояние обнаружения.
  • Новые параметры для конфигов аномалий:
idle_light_shadow = true ; Включить тень для idle_light, по умолчанию - включено

light_volumetric_enable			= true
light_volumetric_quality		= 0.9
light_volumetric_intensity		= 0.05
light_volumetric_distance		= 0.3

idle_light_volumetric_enable		= true
idle_light_volumetric_quality		= 0.9
idle_light_volumetric_intensity		= 0.05
idle_light_volumetric_distance		= 0.4

ignore_any = false ; Для игнорирования вообще всего, что попало в радиус действия аномалии. Можно использовать, например, для костров.
blowout_light_shadow = false ;Отключить тень от света активированной аномалии.
DestroyAfterBlowout = true ;Так можно удалить мины после их взрыва. Мины же на классе аномалий сделаны.
  • Для фонарика можно включить объемный свет. Пример настроек:
[torch_definition]
volumetric_enabled   = true
volumetric_for_actor = false ;Чтобы для актора объёмный свет можно было отключить, т.к. он только у НПС красиво выглядит.
volumetric_quality   = 1.0
volumetric_intensity = 0.15
volumetric_distance  = 0.45
  • Добавил поддержку use_ai_locations = true/false в секции предмета. Пример:
[vodka]
use_ai_locations = false

При net_spawn-е этого предмета соотв. флаг будет выключен. Это может понадобиться, например, для квестовых предметов, которые постоянно проваливаются.

  • Для секции [demo_record] добавлен новый параметр show_info, с помощью которого можно убрать красную надпись посреди экрана.
  • Таскаемые визуалы (те что в секции [ph_capture_visuals]) можно указывать в виде префиксов путей. Так же добавил запрет на таскание объектов с привязанными костями.
  • Добавил опциональную инверсию суставов, для кривых моделей, у которых они выгибаются в обратную сторону. Будет использоваться, если в кастомдате визуала есть:
[compat]
fix_cop_joints = true

По уму надо модели править в таком случае, но мало ли, вдруг пригодится.

  • Добавлена поддержка death_anims из ЗП. Для работы нужен stalker_animation.omf с нужными анимациями смерти. (например из OGSE, там уже есть все эти анимации). Пример настройки конфига для этих анимаций: https://gist.github.com/joye-ramone/e1de87a7fdb5fa9a611f3260ae09ae31 - это нужно добавить в секцию сталкера. Все параметры необязательные. Консольная команда для включения: g_cop_death_anim
  • Добавлен третий режим для silent_mode для переходов. Этот режим активируется, если у level changer-а silent_mode = 2. В этом случае, переход будет просто молча отбрасывать актора обратно. Типа аномалия такая.
  • Добавлена возможность указать health_hit_part для разных типов хитов, например:
health_hit_part = 1.0
health_fire_wound_hit_part = 0.5 ;для пулевого хита будет использовано 0.5, по умолчанию для всех хитов используется значение health_hit_part.
  • Если добавить в конфиг объекта keep_visual = true, будет использован его визуал из конфига, а не из нет-пакета. Сделано чтобы можно было менять модели объектов без требования новой игры.
  • Восстановлен зум для мини карты который был в билдах. Работает по Shift + NUM+ \ NUM-.
  • Восстановлен псевдо-респавн артов в аномалиях, который был в ТЧ. Включается опцией enable_spawn_artefacts.
  • Клавиши скрытия/показа худа теперь можно настроить в опциях, т.к. стандартные NUM+/NUM- есть не на каждой клавиатуре
  • При скрытии худа теперь будет скрываться весь UI, включая окно новостей и курсор, что бы было удобнее делать скриншоты
  • Добавлен каллбек, который вызывается перед поднятием предмета ГГ (нужен для анимации подбора предметов)
[engine_callbacks]
; Если вернуть false - движок не будет поднимать предмет
actor_on_item_before_pickup = ogsr_actor_animation.on_item_before_pickup
  • Добавлен параметр запуска -use-work-dir. С ним двиг будет искать fsgame.ltx в рабочей директории.

Исправления ошибок и прочая не очень важная информация:

  • Исправление вылета, когда арт спавнится вне аи-сетки
  • Исправление проигрывания партиклов после удаления аномалии
  • Исправлено поведение визуала при подборе брони
  • Убрано удвоение хита при телепатическом уроне
  • Переписаны полностью script_storage и script_engine, выкинут весь мусор оттуда, добавлена поддержка загрузки скриптов из подпапок в scripts/, включен вывод в лог предупреждений о неинициализированных переменных в скриптах, добавлен ScriptCrashHandler из xrOxygen
  • Исправлен вылет, если в папке ресурсов находится слишком много файлов
  • Исправлена неправильная загрузка памяти НПС
  • Переделан xrDebug: игра сворачивается при ошибках, открывается лог. Логи создаются с уникальными именами, чтобы не терялись. Включены минидампы.
  • Фикс ворон - теперь они не вылетают из одной точки на земле.
  • Правки торговца: звуки торговца теперь идут от торговца, а не проигрываются в голове у ГГ, торговец не крутит головой вслед за ГГ
  • Поправлена система худовых статиков. Теперь они удаляются при загрузке сейвов, а не абы когда. Раньше из-за этого например были проблемы в оригинальном ОГСЕ с окном БТР.
  • Поправлен парсер, который парсит консольную комманду "start server(имя_сейва/single/alife/load)..." Ранее это делал sscanf, который лажал при встрече буквы 'я' в названии сейва. В оригинальной игре это было вроде как незаметно, но позже я при вырезании мультиплеера добавил ASSERT, который контролирует правильность этого парсинга, и поэтому стало вылетать. Может быть оно и не нужно, но пусть будет. Так же типа правильнее.
  • Добавлен сброс состояний при 'error in stalker with visual [...]'
  • Если при выходе в онлайн у объекта будет не валидный level_vertex, будем искать подходящий для его позиции. Мне кажется, это лучше, чем вылетать.
  • При вызове из скриптов sobj:brain():update() апдейт теперь будет делаться сразу, независимо от m_last_search_time
  • Оптимизация: состояние игровых заданий можно проверять реже - два раза в секунду достаточно.
  • normal_time_factor будет всегда использоваться из alife.ltx, а не из сейвов.
  • Фикс пропадающего звука дождя при загрузке.
  • Фикс вечного звука дождя после сна.
  • Исправлено зависание шкалы освещенности/заметности при переходе врага в оффлайн
  • Исправление зависания индикатора видимости при смене отношения. Такая ситуация происходит, к примеру, если вылечить врага и он станет другом. После этого индикатор застынет на полную до загрузки сейва.
  • Поправлен парсинг FVector для user.ltx
  • Fix crash when calling effector.finish script function after effector.start
  • Исправлена утечка памяти в Luabind ( link1 , link2 )
  • Вместо сортировки предметов в инвентаре по id, сделал сортировку по состоянию.
  • Поправлена работа метода CInifile::w_bool при использовании в скриптах.
  • Вес перетаскиваемого трупика и его содержимое теперь учитывается в общем весе актора
  • Теперь аномалия "жгучий пух" наносит урон
  • Поправлена позиция курсора в оконном режиме
  • Убран показ borderless - полноэкранное разрешение теперь доступно и в оконном режиме.
  • Корректная и окончательная очистка реестра отношений при удалении моба сделана в движке. Скриптовые костыли для этого не нужны.
  • Добавлена правильная версия dbghelp.dll из Debugging Tools for Windows version 6.12.2.633. Эта версия не лажает с минидампами и построением стека вызовов в логе.
  • Если у рестриктора нет шейпов, ему теперь принудительно будет добавляться сфера радиусом в метр и в лог ругательство Msg( "! [%s]: %s has no shapes", __FUNCTION__, cName().c_str() );, т.к. рестрикторы без шейпов вообще делать нельзя, движок не рассчитан на такое, но в Солянке в ассортименте имеются аномалии без шейпов. Например, телепорты. Их просто спаунят, а шейпы к ним не добавляют.
  • Добавил игнорирование рестрикторов, у которых не расчитывается граница. Проблема в том, что если у рестриктора по каким-то причинам не рассчитан border, то нельзя его использовать для restrictions, т.к. в этом списке содержатся вертексы на его границе. Если у нас пустой список, значит движок не сможет найти ближайший вертекс. Т.е. такая ситуация просто не предусмотрена.Теперь такие рестрикторы не будут регистрироваться в space_restriction_manager() и их restrictor_type будет принудительно изменен на RestrictionSpace::eRestrictorTypeNone, что бы CAnomalyDetector их игнорировал и вообще, что бы они ни в каких расчетах не участвовали.
  • Поменял сортировку предметов на поясе, что бы сохранялся их порядок, в т.ч. и при сейв-лоадах.
  • Возвращено контекстное меню в окна торговли и обыска.
  • Фикс сброса скролла при обыске трупов
  • Поправлены проблемы со скроллом в окнах, когда, например, при большом кол-ве предметов у актора, скролл не докручивал до низа окна.
  • Фикс растянутых трупов (они - частое явление в НС и модах, на ней базирующихся.)
  • Поправлен баг оригинала, когда миникарта пропадала после изменения разрешения экрана.
  • Поправлен рассчёт позиции точек на миникарте - теперь они не плывут по экрану на широкоформатниках.
  • Поправлены параметры защиты от электрошока и удара, которые были перепутаны в UI
  • Добавлено сохранение состояния прочитанности заметок в журнале ПДА.
  • Фикс неудаления ауры при-собаки при уходе её в оффлайн
  • Поправлены древние баги окна обыска монстров - убрано покраснение изображения монстра и убран глючный статик отношений.
  • Поправлено обновление контактов в ПДА, чтобы туда не могли попасть мёртвые/удалённые сталкеры.
  • Обсчёт пуль вынесен в отдельный поток
  • Переделана система фокуса между окнами/элементами UI. Вроде бы исправлены все проблемы, с ней связанные.
  • Реализовано автоматическое исправление невалидных level_vertex_id в путях.
  • Поправлено отсутствие звуков шагов ГГ при сменах костюма в некоторых случаях.
  • Лимит костей в моделях расширен до 71 (не тестировалось)
  • Поправил музыку в главном меню - теперь треки не будут прерываться.
  • Починена работа параметра wound_2_immunity в секциях иммунитетов. В оригинале банально не читался.
  • Поправил выдачу туториала на перегруз - теперь выдаётся не при НИ, а при первом перегрузе.
  • Фикс не показываемых СМС на худе во многих случаях.
  • Оптимизация: планировщик НПС (эвалуаторы схем и тп.) после их гибели будет остановлен.
  • НПС теперь должны "видеть" актора когда он в транспорте.
  • Артефакты и эффекторы должны работать когда актор находится в транспорте.
  • Включать ПНВ можно находясь в транспорте.
  • ПНВ сохраняет свое состояние при сейв-лоаде.
  • Убран лаг при показе Журнала/Энциклопедии/Истории.
  • Исправлен вылет в ситуации, когда активным в ПДА становится таск, имеющий всего один objective.
  • Если во время загрузки сейва на поясе обнаружится предмет, у которого belt = false, то он будет перенесен в рюкзак.
  • Поправлена регистрация папок в файловой системе. Теперь не нужны танцы с бубнами вокруг папки levels в db архивах из-за вылета [error]Description : folder&&folder->size().
  • Все звуки останавливаются при загрузке сейва. Ранее с этим был баг: можно было услышать приветственную речь сидора уже после перезагрузки например.
  • Когда игра на паузе, диалоги больше не закрываются по ESC, теперь ESC сразу вызывает главное меню.
  • Оптимизирован механизм передачи данных от клиентских объектов к серверным, из него убраны нет-пакеты и им сопутствующие проблемы, вырезано большое кол-во сетевого кода.
  • Проведена большая работа по приведению кода движка в соответствие со стандартом С++
  • Исправлена растянутая иконка патронов на худе и её положение ( #362 )
  • Добавил исправленные текстуры воллмарков от ножа, в ТЧ с ними косяк, когда режешь по металлу, дереву или камню, с расстояния 5-10 метров чернели края. Вес у них очень маленький, так что не помешают.
  • Добавлено кэширование визуалов для уменьшения лагов при приближении к большим скоплениям объектов. Для этой же цели переделан механизм загрузки звуков для НПС. Вкл/выкл консольной командой g_prefetch.
  • Фикс лагов из-за партиклов если застрять на машине в кустах
  • Фикс багов физики - зафиксированные физ. объекты теперь не должны со временем менять своё положение в некоторых случаях

...Список далеко не полный, не вижу смысла тут все баги описывать, т.к. это нескончаемое полотно будет...