Compiler comme en 1992 (2014)
(fabiensanglard.net)- Le code source original de Wolfenstein 3D de 1992 n’est pas directement compatible avec les systèmes modernes, mais il peut être recompilé en recréant un environnement DosBox et Borland C++ 3.1
- Les éléments nécessaires sont le code source de Wolfenstein 3D, DosBox, Borland C++ 3.1 et les ressources shareware pour l’exécution
- Pendant la phase de build, il faut corriger manuellement non seulement la configuration du projet Borland C++, mais aussi
PATHainsi que les chemins deSIGNON.OBJetGAMEPAL.OBJ - Si les graphismes sont corrompus au premier lancement, c’est parce que les index graphiques compilés dans le moteur ne correspondent plus à l’emplacement réel des données dans les fichiers de ressources
- En recopiant des ressources VGA régénérées et en activant l’aspect correction de DosBox, on peut exécuter le jeu avec un rendu proche du format CRT de 1992
Recréer l’environnement de build de 1992
- Le code source original de Wolfenstein 3D datant de 1992 est difficile à utiliser tel quel sur un système moderne plus de 20 ans plus tard, mais il reste possible de le compiler en reproduisant les outils et l’environnement d’exécution de l’époque
- Les quatre éléments nécessaires sont les suivants
- le code source de Wolfenstein 3D
- DosBox
- Borland C++ 3.1
- les ressources shareware de Wolfenstein 3D
Préparer des répertoires qui serviront de lecteurs DOS
- Créez en local deux répertoires qui serviront de lecteurs DOS
system/csystem/a
- Téléchargez l’archive de Borland C++ 3.1 dans
system/a - Téléchargez le code source de Wolfenstein 3D et les fichiers VGA dans
system/c - Après extraction, l’agencement des fichiers est le suivant
system/a:BCPP31.zipsystem/c:wolfsrc.zip,vgafiles.zip
Installer le compilateur et les sources dans DosBox
- Lancez DosBox, puis montez les dossiers locaux comme lecteurs DOS
- montez
~/system/csurC: - montez
~/system/asurA:
- montez
- Depuis
A:\BCPP31, exécutezinstallpour installer Borland C++ 3.1- conservez les paramètres par défaut et démarrez l’installation
- l’avertissement indiquant que le dossier Microsoft Windows est introuvable n’est pas important, validez simplement avec Entrée
- Depuis
C:\, lancez le programme d’installation des sources de Wolfenstein 3D et utilisez le chemin par défaut\WOLFSRC
Construire le projet Borland C++
- Lancez Borland C++ 3.1 avec
C:\BORLANDC\BIN\BC.EXE - Ouvrez le projet
..\..\WOLFSRC\WOLF3D.PRJet définissez les répertoires comme suitInclude Directories: C:\BORLANDC\INCLUDELibrary Directories: C:\BORLANDC\LIBOutput Directories: OBJSource Directories: C:\WOLFSRC
- Lors du premier build, l’erreur
Cannot find executable TASMapparaît- quittez Borland C++, définissez
PATH=C:\BORLANDC\BIN, puis relancez-le
- quittez Borland C++, définissez
- Au build suivant, une erreur
Unable to find OBJ fileapparaît à l’étape d’édition des liensSIGNON.OBJetGAMEPAL.OBJpointent à tort versC:\SOURCE\WOLF\dans le projet- supprimez ces deux entrées du projet, puis ajoutez-les de nouveau avec
WOLFSRC\OBJ\SIGNON.OBJetWOLFSRC\OBJ\GAMEPAL.OBJ
- Exécutez ensuite
Compile -> Build Allpour terminer le build avec succès
Ressources d’exécution et origine des graphismes corrompus
- Pour lancer l’exécutable compilé, il faut les ressources Wolfenstein 3D en version shareware ou complète
- Après installation de la version shareware, si vous copiez le
.EXEcompilé dans le dossier du jeu et l’exécutez, l’affichage apparaît anormal - La cause vient du pipeline de production des fichiers graphiques et de la manière dont le moteur accède aux ressources
- Adrian Carmack et Kevin Cloud créaient les fichiers graphiques avant de les regrouper avec l’outil IGRABed
- la sortie se compose de trois fichiers
VGAHEAD.WL1,VGAGRAPH.WL1,VGADICT.WL1et de deux fichiersGRE.H,GRE.EQU
VGAHEAD.WL1est un index qui pointe vers l’emplacement des données à l’intérieur deVGAGRAPH.WL1VGAGRAPH.WL1contient des données compressées avec HuffmanVGADICT.WL1contient le dictionnaire Huffman utilisé pour la décompression
GRE.HetGRE.EQUpermettent au moteur d’accéder aux ressources par leur nom- par exemple, un nom logique comme
L_GUYPICest associé à une valeur d’index réelle - le moteur est compilé avec des index d’images codés en dur
- par exemple, un nom logique comme
- Après la sortie de la version shareware de Wolfenstein 3D, les ressources et la base de code ont évolué avec Spear of Destiny, si bien que les index du jeu recompilé ne correspondent plus aux positions présentes dans les fichiers de ressources existants
Remplacer les ressources VGA et corriger le format d’image
- La solution consiste à copier dans le dossier du jeu des ressources VGA régénérées pour qu’elles correspondent aux index
.Het.EQUinclus dans le code source - Si vous utilisez les ressources shareware, il faut renommer les extensions de
.WL6en.WL1avant la copieVGADICT.WL6→VGADICT.WL1VGAGRAPH.WL6→VGAGRAPH.WL1VGAHEAD.WL6→VGAHEAD.WL1
- Après remplacement, relancez
WOLF3D.EXEet le jeu fonctionne normalement - L’affichage par défaut de DosBox ne correspond pas à ce que voyaient les joueurs en 1992
- le framebuffer VGA est en 320x200
- les moniteurs CRT avaient un format 4:3, ce qui étirait l’image verticalement à l’affichage
- Dans la configuration de DosBox, remplacez
aspect=falseparaspect=truedans[render]pour activer la correction du format d’image - Une fois cette correction activée, Wolfenstein 3D s’exécute avec un rendu proche de celui d’un écran CRT de l’époque
1 commentaires
Avis sur Hacker News
Je recommande vivement le livre sur Wolfenstein 3D mentionné à la fin de l’article. Même s’il s’agit de contenu technique, ce n’est ni aride ni ennuyeux, et on y trouve beaucoup d’optimisations à l’ancienne : 64 fonctions déroulées pour la mise à l’échelle des textures murales, la façon de stocker les sprites « de côté », la gestion de cartes graphiques bizarres, ou encore le bidouillage du mode graphique pour que ça ressemble à un jeu dès le départ
Il ne semble pas encore être sorti, si ?
Ce qui est bien avec les systèmes rétro, c’est qu’une fois les outils réunis, on peut les reconstruire. Récemment, pour le plaisir, j’ai recompilé le vieux jeu Uplink : il ne fallait que Visual Studio 6.0, et l’archive de développement contenait toutes les dépendances nécessaires au build
Il m’a fallu environ une heure pour faire correspondre les dépendances, mais j’ai fini par y arriver et le jeu fonctionne bien. J’ai même corrigé quelques petits défauts et ajouté de petites améliorations ici et là. Quand on pense à bricoler du logiciel moderne, c’est vraiment de la folie
thirdparty/, et la toolchain utilisée était aussi figée, donc la configuration était toujours reproductibleJ’ai appris à programmer avec Borland Turbo C++. L’une des raisons pour lesquelles cette époque me manque, c’est qu’on pouvait faire très facilement des choses qui semblaient complexes. Il suffisait d’appeler des fonctions de formes géométriques pour dessiner à l’écran, et après avoir dessiné une forme, appeler une fonction
xorsur une forme légèrement différente permettait même de faire des animationsAvec des amis, on a utilisé ces techniques pour créer un jeu façon Final Fantasy, avec des sprites faits à la main, des cartes par écran, un monde où l’on passait à la carte voisine en atteignant les bords, et des combats déclenchés quand un 1 naturel sortait à chaque pas. C’était laborieux, mais vraiment amusant pour des lycéens, et le fait de pouvoir simplement appeler
circleau lieu de devoir apprendre d’emblée SFML, ActiveX ou OpenGL, comme aujourd’hui, comptait beaucoupconio.het le BGIgraphics.hde Borland. Aujourd’hui, SDL joue un peu ce rôle, mais ce n’est pas aussi simpleAprès l’avoir vu mentionné plusieurs fois ici au fil des années, j’ai enfin lu Masters of Doom il y a quelques mois, et c’était un excellent livre. Les jeux qu’ils créaient à l’époque étaient déjà incroyablement intéressants à jouer, mais avec le recul, ce qui inspire encore plus, c’est ce qu’une poignée de jeunes développeurs avec peu de moyens a pu construire
Les interfaces textuelles de DOS me manquent vraiment. Je repense à mon fidèle PS/2, que j’ai utilisé jusqu’à environ 1997
Installer ça sur le disque C, quel luxe ! Je n’avais pas de disque dur, donc je passais mon temps à changer les disquettes entre les lecteurs A et B, et le compilateur réclamait sans cesse la partie remplacée. Mais on s’amusait quand même. Les jeunes d’aujourd’hui ne nous croient pas quand on raconte ce genre d’histoires
Borland C++ était vraiment remarquable. Un IDE avec compilateur C++, bibliothèque standard et débogueur tenait dans environ 5 Mo, avec en prime cette confortable palette de couleurs Borland, texte jaune sur fond bleu
Les IDE MS-DOS de Borland sont de doux souvenirs
Je l’ai utilisé pour quelques jours de l’Advent of Code cette année, mais la nostalgie est vite retombée. Une fois habitué aux environnements modernes, les contraintes de l’IDE et la verbosité de Pascal ne sont pas vraiment « amusantes » au quotidien. Les souvenirs restent toutefois bien doux
En particulier, ils ne reconnaissent pas la touche Alt seule, les combinaisons Alt+lettre, ni Ctrl+Maj+flèche gauche/droite
Article lié : Let’s compile like it’s 1992 (2014) - https://news.ycombinator.com/item?id=13750097 - février 2017, 80 commentaires
J’ai eu un problème pour ouvrir l’archive. Avec
wolfsrc.zip, j’obtenais l’erreur End-of-central-directory signature not found, indiquant que ce n’était pas un fichier zip ou que cela pouvait être une partie d’une archive répartie sur plusieurs disquescurl -O [http://fabiensanglard.net/Compile_Like_Its_1992/tools/wolfsr...](<http://fabiensanglard.net/Compile_Like_Its_1992/tools/wolfsrc.zip>), j’ai récupéré un fichier HTMLLe résultat de
$ file wolfsrc.zipétait aussiwolfsrc.zip: HTML document text, ASCII text. En revanche,wgeta bien téléchargé le fichier et j’ai pu le décompresser sans problème