"Офигенный" рассказ как я победила софтлок в Star Wars Jedi: Survivor и немного прифигела с "оптимизации" игры

Третьего дня играя в Star Wars Jedi: Survivor я получила софтлок в локации Поющие руины. Ворота на видео должны быть открыты. Из-за чего игра стала непроходимой.

Софтлок, поиск адресов и победа в конце.

А в игре один сейв на игру... Откатиться на более ранний сейв нельзя.¯\_(ツ)_/¯

Имаджинируйте мое еб*ло, когда ты потратила на игру 25 часов.
Имаджинируйте мое еб*ло, когда ты потратила на игру 25 часов.

И выбор стоит либо искать сейв после этого места в Интернета, либо проходить игру на YouTube. Так себе варианты...

А потом я внезапно вспомнила, что я немного программист. И всего то надо найти переменную в оперативке отвечающую за локацию актора игрока на уровне, изменить её на 10 метров в нужную сторону и всё: софтлок побеждён!

В общем, вооружившись Cheat Engine и Artmoney я нашла адреса памяти хранящие локацию игрока на уровне. Таких адресов оказалось 354...

Триста пятьдесят четыре, Карл.
Триста пятьдесят четыре, Карл.

Надо объяснить непрограммистам что объекты в видеоиграх хранят ссылки друг на друга в специальных переменных, указателях. И для расчёта состояния объекта, зависящего от локации игрока нет необходимости держать в этом объекте значение этой локации: хватит указателя.
Да, редко значение одной и той же переменной в ОЗУ может использоваться по несколько раз. Например когда объект отвечающий за UI копирует в своё поле значение здоровья игрока из соответствующего объекта, а не ссылается на него указателем. Но это случается редко.

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

Но не 354 раза! Да, у меня бомбит.<br />
Но не 354 раза! Да, у меня бомбит.

Для каких целей надо каждый тик копировать локацию игрока в 353 объекта? В чём смысл? Программисты Respawn не знают про указатели и референсы в C++?

А потом кто-то удивляется плохой оптимизации этой игры.

2424
11
11
11
42 комментария

Я ничего не понял

7
Ответить

Разработчики Джедаев не очень хорошие.

2
1
Ответить

Артмани пользовался?

1
Ответить

Какая конкретно часть постулата "324 копии одного значения в памяти - это плохо" была непонятна?

1
Ответить

Я тоже.. 🥲

1
Ответить

Ничего, так бывает

1
Ответить

А я все понял...

1
Ответить