Исходный код cyberpunk 2077

Обновлено: 29.06.2024


По информации Telegram-канал «Утечки информации», в открытый доступ попали исходные коды уже почти культовой игры Cyberpunk 2077. Судя по датам файлов в архиве, 5 февраля 2021 года данные были похищены злоумышленниками c серверов разработчиков студии CD Projekt Red.

На форуме в дарквебе автор публикации привел пример с заголовками и содержимым утекших файлов. Telegram-канал «Утечки информации» пояснил, что архив с исходными кодами игры имеет размер 96 ГБ, а в распакованном виде там 161 ГБ информации и 787 129 файлов. Фактически, исходный код относится к версии игры 1.0, сейчас после все патчей и фиксов у игры версия 1.22.



Сторонние разработчики уже начали собирать игру из исходников.



И «Ах, гравитация, бессердечная ты ****!» Шелдон из Теории Большого Взрыва.


Цензура и разработчики. В censorshipSystem.h есть опция «Censor_WinnieThePooh».

Обновление публикации: На onion-сайте «Payload Bin», принадлежащем группировке «Babuk» (известна тем, что шантажировала департамент полиции Вашингтона) были выложены все исходные коды, включая Cyberpunk 2077, украденные у польского разработчика компьютерных игр CD Projekt Red. Размер архива более 360 ГБ данных.


9 февраля CD Projekt Red сообщила, что хакеры украли ее данные и требуют за них выкуп. В утечку попали: исходный код Cyberpunk 2077, «Ведьмака 3», «Гвинта», а также пока не вышедшей версии третьего «Ведьмака». Кроме того, злоумышленники скачали файлы бухгалтерии и административную информацию.

10 февраля 2021 года хакеры через посредника выставили на аукционе украденные данные студии CD Projekt Red. Стартовая цена составляла $1 млн, шаг $500 тыс. Выкупить все данные сразу было можно за $7 млн. Предполагалось, что торги должны были длиться 48 часов. По факту ни одной ставки покупатели не сделали, лот был снят с торгов продавцом и продан вне рамок аукциона.

В конце февраля СМИ сообщили, что инцидент с атакой вируса-криптовымогателя на ресурсы студии CD Projekt Red серьезно изменил график выхода обновлений Cyberpunk 2077, а многие разработчики лишились доступа к внутренней сети компании и своим инструментам, даже со своих рабочих станций внутри офиса студии, а не работая удаленно. CD Projekt Red попросила своих программистов заблокировать банковские счета до окончания расследования и предупредила их, что персональная информация многих членов команд была скомпрометирована, включая их паспортные и банковские данные.

image

Если вы хотя бы отдалённо интересуетесь играми и не прожили последнюю пару лет в тайге, то, вероятно, слышали что-нибудь о Cyberpunk 2077. После долгого ожидания она наконец вышла! И в ней есть мини-игра про взлом! И чем больше получишь в ней очков, тем ценнее приз! Может ли магия Python дать нам преимущество в этом жестоком Нете? Разумеется.

Краткое описание мини-игры: игроку даётся квадратная матрица и одна или несколько последовательностей шестнадцатеричных чисел, а также буфер определённой длины. Цель игрока — завершить наибольшее количество последовательностей, выбирая столько узлов, сколько позволяет буфер. Каждая последовательность заполняется значением, если выбранный узел является следующим узлом последовательности. В начале игры можно выбрать любое из значений в первой строке матрицы. После этого в каждом ходе можно попеременно выбирать N-ный столбец/строку, где N — индекс последнего выбранного значения. Если это ужасное описание вам не помогло, то более подробное можно прочитать здесь.

Учитываются все допустимые пути, а окончательное количество очков каждого пути вычисляется в зависимости от того, сколько последовательностей было завершено при его прохождении. Путь с наибольшим количеством очков затем выводится на экран. К сожалению, мой алгоритм не особо интересен и эффективен. Однако он должен быть достаточно быстр, чтобы решить любую из мини-игр Cyberpunk за несколько секунд, и этого вполне хватает! Уверен, что есть какие-то простые способы ускорения выполнения скрипта, но я решил поделиться уже имеющимися результатами, и обновлять пост по мере поступления новых идей и предложений.

Начнём с компонентов игры:

    Матрица кода: многомерный массив, содержащий шестнадцатеричные значения (узлы) — «игровое поле»


Давайте запустим код и убедимся, что всё работает правильно. Хотя большинство мини-игр со взломом протокола имеют рандомизированные значения, в квесте «Spellbound» используется фиксированное состояние, и наилучшее решение уже известно. Оно создано GamerJournalist:

Успех! Из любопытства я решил увеличивать размер буфера, пока не смогу найти путь, выполняющий все последовательности. Учтите, что для вычисления результата может понадобиться какое-то время, поскольку алгоритм проходит по всем возможным путям длиной 11.


Хорошо, а теперь займёмся оптимизацией! Будем предполагать, что существует хотя бы один путь с неотрицательным количеством очков. Благодаря этому мы можем прерывать обхождение частичного пути, если его текущее количество очков (скорректированное в соответствии с размером буфера и текущим ходом) меньше 0.


Давайте попробуем получить исходный результат заново с буфером длиной 7:


Сработало! Новое решение заметно быстрее, но буфер длиной 7 уже и так вычислен довольно быстро, поэтому трудно ощутить ускорение. Посмотрим, как проявляет себя оптимизация при вычислении пути с наибольшей наградой.


Ускорение почти в три раза благодаря добавлению двух строк кода. Совсем неплохо. Вероятно, существуют и другие простые возможности оптимизации, поэтому я, может быть, через неделю дополню пост. Ну а на этом всё. Присылайте свои предложения по улучшению качества/производительности кода!

Читайте также: