Голосование

Как вы оцениваете Kingdom Come: Deliverance 2?












Оформление



Пользователей
  • Всего: 29381
  • Последний: JluHk
Сейчас на форуме
Пользователи: 0
Гостей: 683
Всего: 683

0 Пользователей и 1 Гость просматривают эту тему.

Тема: [How to] Отключение автоматического центрирования камеры на глобальной карте  (Прочитано 769 раз)

  • Сообщений: 2
    • Просмотр профиля
Когда-нибудь раздражала эта совершенно не отключаемая "фишка" в игре? Когда мотаешь камеру по карте, думаешь, смотришь, отправляешь отряд в новую точку и.. камера начинает медленно ехать на отряд игрока. Даже если этого совершенно не хочется! Можно кликнуть по WASD и вернуть управление, продолжив высматривать карту, пока отряд куда-то едет, но это начинает жутко выбешивать, если ускорять время по ctrl + space - просто не успеваешь дёрнуть камеру, успевает уехать далеко от точки, куда только-что смотрел. И приходится вести её обратно, из раза в раз, воюя с этой всратой авто-центровкой камеры. И ведь не отключить никак, разрабы не дали такую опцию, всё жёстко прописано в коде и без возможности заскриптовать это. Может как-то по хитрому и можно, но я такого не нашел, только редкие топики от других людей с похожей проблемой и без какого-либо решения..

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

1. Ставим (если уже не стоит) Warband Script Enhancer v2 (WSE2): https://forums.taleworlds.com/index.php?threads/warband-script-enhancer-2-v1-1-3-1.384882/
На rusmnb есть в разделе файлов, но версия устарела. WSE2 обновился буквально пару дней назад - 19 декабря.

2. Качаем пропатченный бинарник (mb_warband_wse2.exe, версия 1.1.3.1) и заменяем в папке с игрой: https://drive.google.com/file/d/1FttoV9wZ8gblmWcxcsatCOe-26w0HNyV/view?usp=sharing
(закинуть во вложение форум почему-то не даёт, даже архивом)

3. Запускаем через wse2_launcher.exe и наслаждаемся.

Желающие могут сравнить оригинальный и пропатченный бинарники - там буквально 5 байтов изменено. Вирусов не докладывал, свои иметь нужно.

-------------------------

Короткая инструкция, как пропатчить игру самому. На случай, если WSE2 опять обновится (я мониторить не буду, обнов не ждите), или если хотите пофиксить оригинальную игру.

Качаем IDA Pro (жутко платная, но есть торренты) или Ghidra (бесплатная, но не факт, что без бэкдоров). IDA проста в использовании, с гидрой разберётся не каждый.

Декомпилим бинарник игры, ищем функцию "updateCamera" в классе "mbMapWindow". Следом ищем проверку переменной "m_cameraFollowingParty" из класса "mbGame". Что-то вроде такого:

  if ( v13 )
  {
    v20 = rglConfig::Campaign::fMapCameraMaxElevation;
    if ( v21 <= rglConfig::Campaign::fMapCameraMaxElevation )
      v20 = v21;
  }
  this->m_cameraVerticalRotation = v20;
  if ( v6->m_cameraFollowingParty ) // вот она, рыба нашей мечты
  {
    m_cameraPartyNo = v6->m_cameraPartyNo;
    p_m_parties = &v6->m_parties;
    if ( m_cameraPartyNo >= 0 && m_cameraPartyNo < v6->m_parties.m_numIndices )
    {

Нашли? Переходим к дизассемблеру и видим (использовал x64dbg дебагер) похожий код:

006FACE5 | 0F28C8 | movaps xmm1, xmm0

006FACE8 | F3:0F118E 6C020000 | movss dword ptr ds:[esi+0x26C], xmm1

006FACF0 | 80BA A4030000 00 | cmp byte ptr ds:[edx+0x3A4], 0x0 // << our check for m_cameraFollowingParty != 0

006FACF7 | 0F84 D0010000 | je org.mb_warband_wse2.6FAECD // conditional jump, taken if m_cameraFollowingParty IS zero

006FACFD | 8B82 A0030000 | mov eax, dword ptr ds:[edx+0x3A0]

006FAD03 | 8DBA 44040000 | lea edi, dword ptr ds:[edx+0x444]

006FAD09 | 85C0 | test eax, eax

006FAD0B | 0F88 9C010000 | js org.mb_warband_wse2.6FAEAD

Меняем JE прыжок на безусловный JMP, патчим бинарник и готово!

001FACF0 | 80BA A4030000 00 | cmp byte ptr ds:[edx+0x3A4], 0x0

001FACF7 | E9 D1010000 | jmp mb_warband_wse2.1FAECD

001FACFC | 90 | nop

Срань та ещё конечно, вот так бинарники патчить, но я не нашел в коде ни одного места, где бы из скриптов можно было обнулить m_cameraFollowingParty переменную, а привязка камеры завязана на неё.
  • Фракция: Империя
  • Сообщений: 2
    • Просмотр профиля
  • Фракция: Империя
 

СиЧЪ Total War
Сайт "Всадники Кальрадии" не является СМИ. Администрация не несет ответственность за высказывания и публикацию каких-либо материалов, сделанные любыми пользователями форума, в том числе посредством личных и публичных сообщений. Материалы, размещенные на ресурсе третьими лицами, могут содержать информацию, не предназначенную для лиц, не достигнувших совершеннолетия. При обнаружении на ресурсе материалов, нарушающих законодательство Российской Федерации, необходимо обращаться к администрации.

Powered by SMF 2.0 | SMF © Simple Machines LLC | Сайт работает на быстром VPS/VDS хостинге от FASTVPS