Как показывают годы, шансов увидеть оригинальный исходный код — или хотя бы ремейк — первой части Diablo у нас практически нет (событие The Darkening of Tristram в Diablo III в честь 20-летия выхода первой части — это, конечно, хорошо, но все же немного не то, чего ожидали поклонники). И пусть последнее обновление для игры вышло в 2001 году, и сама Blizzard давно перестала поддерживать и продавать ее — память о ней по-прежнему остается жива в наших сердцах. Что лишний раз и подтвердил некий GalaXyHaXz, решивший произвести реверс-инжиниринг игры.
Исходный код доступен на Github. Проект Devilution, который его автор GalaXyHaXz окрестил «деволюцией Diablo», занял у него свыше 1,200 часов — 4 месяца работы. Также не пропустите объемные комментарии автора, проливающие свет на исходный код игры, и расположенные в другом репозитории. Сам код пока выглядит неважно, но будет продолжать приводится в порядок по мере прогресса работы над другими модулями игры.
Идея реверс-инжиниринга настолько большого проекта поначалу казалась фантастической задачей, если бы не одна счастливая случайность — или, другими словами, небольшой недосмотр, приключившийся 20 лет назад.
B 1998 году Blizzard отдала исходный код Diablo двум студиям: Synergestic Software, которая занималась разработкой дополнения Hellfire, и Climax Studios, работавшей над портом для Playstation. Отдел QA Sony в Японии не в первый раз «радует» своими утечками, отличились они и на этот раз — в японской версии порта был случайно забыт символический файл (a symbolic file), который включал в себя функции, данные, типы и многое другое. Это и позволило восстановить оригинальные функции, глобальные переменные, структуры данных и прочее. Бета-версия порта для Playstation также утекла, и в ней лежал еще один подобный файл, что значительно упростило задачу.
В довершение всего, отладочный билд PC-версии игры всегда лежал прямо на ваших дисках с игрой, спрятанный в архиве DIABDAT.MPQ -> D1221A.MPQ -> DIABLO.EXE. Билд содержит инструменты для отладки, которые отсутствуют в релизной версии, а также большое количество ассертов строк, благодаря которым удалось воссоздать имена файлов, функций — даже номера строк кода максимально приближены к оригиналу.
Разработка Diablo началась примерно в то время, когда вышла Windows 95. Соответственно, под нее игру и оптимизировали. Для компиляции игры был использован Microsoft Visual C++ 4.20, который в последующих патчах обновили до версии 5.10. С целью точного воспроизведения оригинального кода, в проекте была сохранена совместимость с этими версиями компиляторов, однако доступны Makefile для современных компиляторов. Исполняемые бинарные файлы, получившиеся по итогам компиляции, согласно отчетам работают на Windows 7, Linux-WINE и Windows 10.
Небезызвестный факт, что игра серьезно менялась на протяжении проекта, и многие идеи были вырезаны из нее прямо перед релизом — а мультиплеер был добавлен на скорую руку.
Многие создатели модификаций для игры (например, авторы мода The Hell) уже заходили достаточно далеко в своих изысканиях по исследованию кода, в том числе при помощи внедрения в память процесса; однако, результаты своего труда они не публиковали, и многие из подобных модов были заброшены на полпути. Если Devilution удастся довести до определенной степени готовности, подобной проблемы можно будет избежать — плюс узнать что-то новое про саму игру.
На данный момент произведен реверс-инжениринг Diablo.exe. Остаются еще несколько библиотек, которыми предстоит заняться: Battle.snp (устаревший протокол Battle.Net), DiabloUI.dll (код главного меню игры, целиком завязан на Windows и плохо написан), Standard.snp (код локального мультиплеера, устаревший, аналогичен используемому в Starcraft) и еще пара модулей.
Теоретически, в ближайшем будущем (после реверсинга DiabloUI.dll) игра может стать кросс-платформенной — если, конечно, Blizzard не поспешит прикрыть лавочку раньше, чем автор сможет привлечь к решению этой задачи достаточно энтузиастов.
P.S. А вот насчет Diablo II все не так однозначно: игра продолжает продаваться и поддерживаться Blizzard, объем ее кодовой базы — примерно в 8 раз больше, чем у оригинала, да и ходят слухи, что официальный ремастер не за горами — поэтому ее полноценного реверс-инжиниринга в обозримом будущем ждать не приходится.
k12th
Если сделают на этой основе OpenDiablo (как сделали OpenTTD), будет очень круто. Всё-таки во 2 части атмосфера уже не такая густая, ну а про 3 в приличном обществе и говорить нечего.
GeMir
Первая Diablo и без Hellfire была настолько мрачной, что невольно хотелось сохраниться лишний раз перед спуском на следующий уровень, не говоря уже о местах вроде логова Мясника или «Зала слепых».
rtzra
Мрачно было бегать компанией на сложных уровнях — сложные монстры и слишком много дури в персонажах, можно было легко поубивать друг друга. Если играешь за прокачанного мага и кастуешь Lighting — на другом краю карты напарники легко погибали. Приходилось их вытаскивать. А уж какая коллекция ушей была собрана… :-)
vaniacer
Fresh meat!
Raftko
Да, причём, логово Мясника в самом начале игры, где всё относительно спокойно. Моя реакция:
firk
А вы не вводитесь в заблуждение похожим названием — это разные игры разных жанров. Diablo I — полуаркадный слешер с элементами рпг и мультиплеера, Diablo II — онлайн-рпг с элементами слешера, Diablo III — не знаю что, но тоже что-то другое.
k12th
Ну я во 2 часть играл как в сингл:)
sumanai
А я вообще впервые про онлайн во второй части услышал.
Black_Zerg
с каких пор второй Дьявол стал онлайн рпг???? Второй был прямым продолжением первого с возможностью совместного прохождения, добавлены новые локации и улучшена графика. А вот третий уже пошел по стопам ВоВ'а и на мой взгляд, полный отстой
firk
Возможно в начале 2000-х он и рассматривался как продолжение первого, но уже году в 2005-2006 стало ясно, что главный его аспект (тот, которому игра обязана своей огромной популярностью) это именно мультиплеер. И именно под мультиплеер доделывался баланс начиная с 2003 года (патч 1.10), на сингл при этом тоже смотрели, но только с целью не испортить его ненароком до неиграбельного состояния. Более того, начиная с того же 1.10 официально заметная часть игрового контента недоступна в сингле и при игре по локалке, а доступна только через сервер.
По-моему вы в неё мало играли (мало — это например меньше года онлайн). Это гораздо больше, чем "апгрейднутое d1", но если её рассматривать только так, то я не удивлён, что некоторые её считают неатмосферной итд.
Black_Zerg
Я в нее играл достаточно и продолжаю до сих пор играть в лицензию. Прошел первую, прошел вторую (играли по локалку с друзьями и ее можно было точно также играть и в сингл, тем же персом). Очень ждал третий, мне его дали бесплатно за подписку на WoW, но очень разочаровал… И все же второй это не онлайн РПГ, это хак энд слеш рпг, а онлайн это фишка близов, которые развили свой батлнет, до огромной империи
daggert
Вроде как метелица весьма ревностно относится к своим детищам. Боюсь что у «опен диабло» будут проблемы уже из-за сеттинга. И да, согласен, первая диабла была лучшая по атмосфере.
k12th
Скорее всего да, будут проблемы.
gohan
Не забудьте посмотреть мод к первой части Diablo: The Hell, если ещё не видели. Сейчас я вижу, что там расплодились его версии. У меня какая-то установлена была, играл с большим удовольствием. Автор вроде русский (чеченец).
daggert
К сожалению старая диабла по управлению уже не удобна, привычка wasd стала диктовать свои условия (:
rezdm
1200 часов = 4 месяца? По 300 часов в месяц?
Сурово.
Dvlbug
Он просто предан своему делу и двадцать часов сна в месяц для него вполне достаточны)
Линусу Торвальдсу бы его упорство и Linux, превосходящий Windows 7, был бы написан в 93-м году
vesper-bot
Я джвадцать лет ждал такую игру :)
TonyLorencio
Жалко, что возможность грабить корованы появилась только во втором диабло (ЕМНИП)
perlestius
Корован — это фургон с коровами?
Lirein
Это паравозик из коров на «The Secret Cow Level»
vesper-bot
Да, в первой можно было только пнуть корову, и она говорила «мууу». (В Хеллфайр не играл). А во второй — красота, титаны в руку, LF по площади — экран дохлых коров. С бердышами.
bro-dev0
Ну недавно близы варик 3 довольна таки серьезно прокачали, мб и за дьяблу возмутится, я тока не понял какая итоговая цель то, просто модов наделать?
YuriM1983
Эх, приделать бы:
и была бы отличная игрушка.
hardkotian
Круто. Интересно, а найдутся ли умельцы, которые смогут такое проделать с Disciples 2?..
almarc
Было бы интересно увидеть первую диаблу с обновленной графикой. Ждем :)
pavlushk0
Тоже хочу восхититься огромной работой и задать пару вопросов сведующим.
и вообще везде вплоть до, на мой взгляд невинного:1) Бегло окинул взглядом код и бросилось сразу в глаза обилие деклараций о соглашении вызовов —
2) И второй вопрос — а не зашквар ли писать в c-style нынче (ну и тогда в 1995)?
vesper-bot
Ради производительности (тогда) — точно не зашквар. Сейчас, скорее всего, низкоуровневую логику все равно будут писать на структурах, как раз чтобы сэкономить такты на работе фреймворков, а высокоуровневую уже можно писать на скриптовых языках.