4

Як я робив мод на Dark Souls Remastered ⚔️

Я великий фанат ігор FromSoftware, а конкретно серії Dark Souls (так, так, навіть другої частини). В певний момент я зацікавився стримерами, що роблять нестандартні проходження цієї серії ігор. Одним з таких був LilAggy і його проходження з модом, на випадкову зміну зброї у персонажа кожні кілька секунд

Пройшло кілька років, я сам почав стрімити і мені захотілося повторити цей забіг. І хоча на Nexus Mods таки мод був присутній, для моїх потреб він не підходив. На щастя, автор моду зробив його open-source і дав згоду на переробку. Тож не довго думаючи, я почав свою подорож у всесвіт модінгу. Як то було - розповідаю нижче

З чим довелося працювати 🧐

Першою перешкодою на шляху стало те, що оригінальний мод був написаний на Visual Basic. І хоча мої пізнання у .Net були великі, я не мав часу вчитися новій мові програмування
Тож знайшовши спосіб конвертувати все до C# та після виправлення помилок, я отримав на руки повноцінно працюючий C# проєкт, який почав модифікувати
На жаль, його функціонал був абсолютно рудиментарний:

  • Зброя змінювалася тільки у правій руці;
  • Жодного натяку на рівні прокачки зброї;
  • Можливість відфільтрувати тільки по каталізаторам, ближньому бою та дальньому бою;
  • Баги аж до вильотів моду та/або гри. Якщо спростити, то мод взагалі не намагався вирішити проблему, а просто крашився при найменшій незручності для своєї роботи.

Проте він мав 2 величезні плюси:

  • Підготований шаблон під мої задуми, який крім всього іншого міг зберігати налаштування гравця;
  • Базова логіка для читання та запису у пам’ять гри (якось за 6,5 років кар’єри програміста мені не доводилося такого робити ¯\_(ツ)_/¯)

То чого ж хочеться МЕНІ⁉️

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

  • Можливість налаштувати, в якій руці змінюється зброя, ну або в обох руках;
  • Рівні прокачки: дати змогу якимось чином змінювати зброю в руках персонажа на вже прокачану; При чому хотілося як дати змогу відстежувати рівень прокачки гравцем (WeaponMemory, пояснено нижче), так і якісь цікаві варіанти типу рандомного рівня;
  • Сортування по класам: дати змогу гравцеві виключити з переліку зброї ті класи, що він не хоче використовувати;
  • Зберегти функціонал збереження даних;
  • Покращити стабільність.

Окресливши предметну область, я почав втілювати це у життя :)

Знаю, знаю - мої навички  ̶ф̶о̶т̶о̶ш̶о̶п̶у̶ Paint 3D просто космічні, не заздріть 😅

У пошуках даних 🪙🏴‍☠️

Я давно знав про наявність таблиць для Cheat Engine до Dark Souls Remastered, величезних онлайн-екселів зі всіма мислимими та немислимими статами зброї і багато якої ще інформації, яку накопали датамайнери і використовувати можуть тільки найбільш прожжені хардкорщики. Чого я не знав, так те що знайти таблицю з ID кожної зброї з урахуванням рівня прокачи та закалки просто неможливоТочніше я знайшов один такий ексель, який, я майже на 100% впевнений, мав необхідну інформацію. Але його автори не проявили бажання співпрацювати тож довелося створювати милиці 🙂

Chat GPT мені у цьому питанні також не допоміг. Він як зазвичай вирішив галюцінувати замість робити роботу 🫠

Зібравши інфу з файлів оригінального моду та з тієї самої таблиці назви зброї з рвінями прокачки (але без ID) я отримав наступне:

  • Перелік усіх (або ні, я не перевіряв) видів зброї + ID та клас (кинджал, молот, спис) з урахуванням закалки: кинджал, блискавичний кинджал, грубий кинжал тощо;
  • Перелік усіх видів зброї з урахуванням рівня прокачки та закалки: Кинджал, Кинджал + 1, Кинджал +2 і тд.

Поєднання цієї інформації дало мені змогу отримати максимальний і мінімальний рівень зброї для кожної закалки, що дасть змогу спавнити гравцеві вже прокачану зброю. А також клас зброї, що дасть змогу налаштувати сортування. Проте “Кинджал +1” і “Кинджал + 2” це два різні предмети, кожен зі своїм ID. Поки що на руках я маю лише ID для простого "Кинджал" (без прокачки). У цей момент я почав експериментувати, щоб знайти закономірність між ID зброї та рівнем прокачки

Для цього було використано Cheat Engine, таблицю для Dark Souls Remastered з Nexus Mods та трішки часу. Методологія була проста:

  • заспавнив зброю +0;
  • записав ID;
  • заспавнив зброю +1;
  • записав ID;
  • заспавнив зброю +2;
  • записа ID;
  • побачив закономірність;
  • спробував самотужки записати ID для +5;
  • все вийшло;
  • Great Success!

*зауважте українізатор - він також включає озвучку що звісно повний відвал башки *

Ну і останній шматочок пазлу, якого мені не вистачало це адреса у пам’яті для лівої руки та так званої WeaponMemory - значення у файлі збереження, що вказує на максимальний рівень прокачки зброї що гравець будь-коли мав у інвенторі. Це значення мені знадобиться для того, щоб власне відстежувати прогрес гравця і видавати йому відповідну зброю

Для пошуку цих значень я також використав Cheat Engine - а саме “код” таблиць. Це скоріше просто скрипт на чомусь типу Lua, але я не впевнений. Головне що мене там цікавило так це базові значення, з яких цей скрипт починає шукати дані у пам’яті гри та офсети, тобто на скільки ці базові значення треба зсунути щоб отримати секцію пам’яті з моєю інформацією. Також корисно знати розмір даних, що необхідно прочитати

Залишилося всю цю інформацію поєднати до купи, оформити в щось робоче і затестити!

То що, вийшло ⁉️

Вийшло майже бомбічно-ідеально!

Є кілька багів, на які варто звернути увагу. Наприклад, при використанні Естусу (лікування) міцність зброї у правій руці зменшується на кількість відновлених очок здоров’я. Через це зброя ламається посередині битви з босом. Той самий ефект має Людскість та Метальні ножі (?!)

Крім того, вже після розробки я знайшов бібліотеку, яка теоретично має мені спростити роботу з пам’яттю гри і надати можливість поглибити функціонал

Але то можливо якось потім, коли буде час 🙃

Весь той функціонал, що я хотів - я маю і це головне!

Я із величезним задоволенням проходжу гру з цим модом, і звісно стрімлю, тож залітайте і зацініть!

Оцініть пост:
4
Коментарі
AlexTheApple
AlexTheApple
23.06.2025, 21:55

**Дисклеймер** Заходячи на мій канал ви автоматично даєте згоду на отримання величезної дози крінжі Повернення не приймаються Робіть на свій власний острах та ризик 😅🤣

Reply

Відповісти

LLeeepps
LLeeepps (Назарій Семенюк)
24.06.2025, 18:35

Супер крутий пост, дякую. Прочитав і кайфанув 😍

Reply

Відповісти

AlexTheApple
AlexTheApple
25.06.2025, 10:15

Дякую🤗 Ледь стримався щоб не передушнити 😅😅

Reply

Відповісти