Devilution: projet de reverse engineering Diablo

image

Comme les années le montrent, nous n'avons pratiquement aucune chance de voir le code source original - ou du moins un remake - de la première partie de Diablo (l'événement The Darkening of Tristram in Diablo III en l'honneur du 20e anniversaire de la sortie de la première partie est, bien sûr, bon, mais encore un peu pas ce que les fans attendaient). Et laissez la dernière mise à jour du jeu sortir en 2001, et Blizzard lui-même a depuis longtemps cessé de le soutenir et de le vendre - le souvenir de celui-ci est toujours vivant dans nos cœurs. Ce qui a encore une fois été confirmé par un certain GalaXyHaXz, qui a décidé de procéder à une rétro-ingénierie du jeu.

Le code source est disponible sur Github . Le projet Devilution, que son auteur GalaXyHaXz a surnommé «Diablo Devolution», a nécessité plus de 1 200 heures - 4 mois de travail. Ne manquez pas non plus les commentaires volumineux de l'auteur qui mettent en lumière le code source du jeu et situé dans un autre référentiel . Le code lui-même ne semble pas avoir d'importance jusqu'à présent, mais il continuera à être mis en ordre à mesure que le travail progresse sur d'autres modules du jeu.

L'idée de la rétro-ingénierie d'un si grand projet a d'abord semblé une tâche fantastique, sinon pour un accident chanceux - ou, en d'autres termes, un petit oubli qui s'est produit il y a 20 ans.

En 1998, Blizzard a donné le code source de Diablo à deux studios: Synergestic Software, qui développait le module complémentaire Hellfire, et Climax Studios, qui a travaillé sur le portage de la Playstation. Ce n'est pas la première fois que le département Sony QA au Japon est «satisfait» de ses fuites , ils se sont également distingués cette fois - dans la version japonaise du port, un fichier symbolique a été accidentellement oublié, qui comprenait des fonctions, des données, des types et bien plus encore. Cela nous a permis de restaurer les fonctions d'origine, les variables globales, les structures de données, etc. La version bêta du port pour la Playstation a également fuité, et elle contenait un autre fichier similaire, ce qui a grandement simplifié la tâche.

Pour couronner le tout, la version de débogage de la version PC du jeu reposait toujours directement sur vos disques de jeu, cachée dans l'archive DIABDAT.MPQ -> D1221A.MPQ -> DIABLO.EXE. La construction contient des outils de débogage qui ne sont pas disponibles dans la version finale, ainsi qu'un grand nombre d'assertions de ligne, grâce auxquelles il a été possible de recréer des noms de fichiers, des fonctions - même les numéros de ligne du code sont aussi proches que possible de l'original.

Le développement de Diablo a commencé au moment de la sortie de Windows 95. En conséquence, le jeu a été optimisé pour cela. Pour compiler le jeu, Microsoft Visual C ++ 4.20 a été utilisé, qui a été mis à jour dans la version 5.10 dans les correctifs suivants . Afin de reproduire avec précision le code d'origine, le projet a conservé la compatibilité avec ces versions de compilateurs, cependant des Makefiles sont disponibles pour les compilateurs modernes. Les binaires exécutables résultant de la compilation, selon les rapports, s'exécutent sur Windows 7, Linux-WINE et Windows 10.

C'est un fait bien connu que le jeu changeait sérieusement tout au long du projet, et de nombreuses idées ont été supprimées juste avant la sortie - et le multijoueur a été ajouté à la hâte.


De nombreux créateurs de modifications pour le jeu (par exemple, les auteurs de The Hell mod) sont déjà allés assez loin dans leurs recherches sur la recherche de code, notamment par la mise en place d'une mémoire de processus; cependant, ils n'ont pas publié les résultats de leur travail, et beaucoup de ces mods ont été abandonnés à mi-chemin. Si Devilution peut être amené à un certain degré de préparation, un problème similaire peut être évité - en plus d'apprendre quelque chose de nouveau sur le jeu lui-même.

À l'heure actuelle, la rétro-ingénierie Diablo.exe. Il reste quelques bibliothèques à gérer: Battle.snp (protocole Battle.Net obsolète), DiabloUI.dll (code du menu principal du jeu, entièrement basé sur Windows et mal écrit), Standard.snp (code multijoueur local, obsolète, similaire à celui utilisé) dans Starcraft) et quelques autres modules.

Théoriquement, dans un avenir proche (après avoir inversé DiabloUI.dll ), le jeu peut devenir multiplateforme - à moins, bien sûr, que Blizzard ne se dépêche de fermer la boutique avant que l'auteur puisse attirer suffisamment de passionnés pour résoudre ce problème.

PS Et comme pour Diablo II, tout n'est pas si clair: le jeu continue d'être vendu et pris en charge par Blizzard, sa base de code est environ 8 fois plus grande que l'original, et il y a des rumeurs selon lesquelles le remaster officiel est juste autour du coin - donc son inverse complet l'ingénierie dans un avenir prévisible ne doit pas attendre.

Source: https://habr.com/ru/post/fr414577/


All Articles