Vamos compilar como se fosse 1992 (2014)
(fabiensanglard.net)- O código-fonte original de Wolfenstein 3D de 1992 não se encaixa diretamente em sistemas modernos, mas pode ser compilado novamente ao recriar o ambiente com DosBox e Borland C++ 3.1
- Os componentes necessários se resumem ao código-fonte de Wolfenstein 3D, DosBox, Borland C++ 3.1 e os assets shareware para execução
- No processo de build, além das configurações do projeto no Borland C++, é preciso corrigir manualmente
PATHe os caminhos deSIGNON.OBJeGAMEPAL.OBJ - O motivo de os gráficos aparecerem corrompidos na primeira execução é que o índice gráfico compilado no engine não corresponde às posições internas dos arquivos de assets
- Ao copiar os assets VGA regenerados e ativar a aspect correction do DosBox, é possível executar o jogo com uma aparência próxima da proporção de tela CRT de 1992
Recriando o ambiente de build de 1992
- O código-fonte original de Wolfenstein 3D de 1992 é difícil de usar diretamente em sistemas modernos, mais de 20 anos depois, mas pode ser compilado se você alinhar as ferramentas e o ambiente de execução da época
- São necessários os quatro componentes a seguir
- código-fonte de Wolfenstein 3D
- DosBox
- Borland C++ 3.1
- assets shareware de Wolfenstein 3D
Preparando diretórios para usar como unidades DOS
- Crie localmente 2 diretórios para usar como unidades DOS
system/csystem/a
- Em
system/a, baixe o arquivo compactado do Borland C++ 3.1 - Em
system/c, baixe o código-fonte de Wolfenstein 3D e os arquivos VGA - Após descompactar, a disposição dos arquivos fica assim
system/a:BCPP31.zipsystem/c:wolfsrc.zip,vgafiles.zip
Instalando o compilador e o código-fonte no DosBox
- Execute o DosBox e monte as pastas locais como unidades DOS
- monte
~/system/ccomoC: - monte
~/system/acomoA:
- monte
- Em
A:\BCPP31, executeinstallpara instalar o Borland C++ 3.1- mantenha as configurações padrão e inicie a instalação
- o aviso de que não foi possível encontrar a pasta do Microsoft Windows não é necessário; pressione Enter para continuar
- Em
C:\, execute o instalador do código-fonte de Wolfenstein 3D e use o caminho padrão\WOLFSRC
Fazendo o build do projeto no Borland C++
- Execute o Borland C++ 3.1 em
C:\BORLANDC\BIN\BC.EXE - Abra o projeto
..\..\WOLFSRC\WOLF3D.PRJe configure os diretórios da seguinte formaInclude Directories: C:\BORLANDC\INCLUDELibrary Directories: C:\BORLANDC\LIBOutput Directories: OBJSource Directories: C:\WOLFSRC
- No primeiro build, ocorre o erro
Cannot find executable TASM- feche o Borland C++ e defina
PATH=C:\BORLANDC\BIN, depois execute-o novamente
- feche o Borland C++ e defina
- No build seguinte, ocorre o erro
Unable to find OBJ filena etapa de linkediçãoSIGNON.OBJeGAMEPAL.OBJestão apontando incorretamente para o caminhoC:\SOURCE\WOLF\no projeto- remova os dois itens do projeto e adicione-os novamente como
WOLFSRC\OBJ\SIGNON.OBJeWOLFSRC\OBJ\GAMEPAL.OBJ
- Depois disso, execute
Compile -> Build Alle o build será concluído com sucesso
Assets de execução e a causa dos gráficos corrompidos
- Para executar o binário compilado, são necessários os assets shareware ou da versão completa de Wolfenstein 3D
- Após instalar a versão shareware, se você copiar o
.EXEcompilado para a pasta do jogo e executá-lo, a tela será exibida de forma incorreta - A causa está no pipeline de produção que gera os arquivos gráficos e na forma como o engine acessa os assets
- Adrian Carmack e Kevin Cloud criavam os arquivos gráficos e depois os empacotavam com a ferramenta IGRABed
- a saída é composta por 3 arquivos,
VGAHEAD.WL1,VGAGRAPH.WL1,VGADICT.WL1, e 2 arquivos,GRE.H,GRE.EQU
VGAHEAD.WL1é um índice que aponta para as posições dos dados dentro deVGAGRAPH.WL1- em
VGAGRAPH.WL1ficam armazenados os dados comprimidos com Huffman - em
VGADICT.WL1está o dicionário Huffman usado para descompressão
- em
GRE.HeGRE.EQUsão arquivos que permitem ao engine acessar os assets por nome- por exemplo, um nome lógico como
L_GUYPICé associado ao valor real do índice - o engine é compilado com os índices de imagem hardcoded
- por exemplo, um nome lógico como
- Depois do lançamento shareware de Wolfenstein 3D, os assets e a base de código evoluíram junto com Spear of Destiny, fazendo com que os índices do jogo recém-compilado não coincidam com as posições dos arquivos de assets existentes
Trocando os assets VGA e corrigindo a proporção de tela
- A solução é copiar para a pasta do jogo os assets VGA regenerados, compatíveis com os índices
.He.EQUincluídos no código-fonte - Ao usar os assets shareware, é preciso copiar os arquivos trocando a extensão de
.WL6para.WL1VGADICT.WL6→VGADICT.WL1VGAGRAPH.WL6→VGAGRAPH.WL1VGAHEAD.WL6→VGAHEAD.WL1
- Depois da substituição, execute
WOLF3D.EXEnovamente e o jogo funcionará normalmente - A tela padrão do DosBox é diferente da tela original que as pessoas viam em 1992
- o framebuffer VGA é 320x200
- monitores CRT tinham proporção 4:3, então a imagem aparecia esticada verticalmente na saída
- Nas configurações do DosBox, troque
aspect=falseporaspect=trueem[render]para aplicar a correção de proporção - Com a correção de proporção aplicada, Wolfenstein 3D roda com uma aparência próxima à forma como era exibido em CRTs da época
1 comentários
Opiniões no Hacker News
Recomendo muito o livro sobre Wolfenstein 3D mencionado no fim do texto. Mesmo sendo técnico, não é rígido nem entediante, e traz muitas otimizações à moda antiga, como 64 funções desenroladas para escalonamento de texturas de parede, a forma de armazenar sprites “de lado”, lidar com placas de vídeo esquisitas e hackear modos gráficos para que, antes de tudo, aquilo parecesse um jogo
Parece que ainda não saiu; é isso mesmo?
O bom dos sistemas retrô é que, se você juntar as ferramentas, dá para compilá-los de novo. Recentemente recompilei por diversão o velho jogo Uplink, e tudo de que precisei foi o Visual Studio 6.0; o arquivo de desenvolvimento continha todas as dependências necessárias para o build
Levei mais ou menos uma hora para acertar as dependências, mas no fim funcionou, e o jogo rodou bem. Corrigi até alguns pequenos defeitos e fiz pequenas melhorias aqui e ali. Imaginar fazer isso com software de hoje é uma loucura
thirdparty/, e a toolchain usada também ficava fixa, então a configuração era sempre reproduzívelAprendi a programar com Borland Turbo C++. Uma das coisas de que sinto falta daquela época é que dava para fazer coisas aparentemente complexas com muita facilidade. Bastava chamar funções de formas geométricas para desenhar na tela e, depois de desenhar uma forma, chamar a função
xorem uma forma um pouco diferente para criar animaçõesCom amigos, fiz um jogo parecido com Final Fantasy usando essas técnicas, com sprites feitos à mão, mapas por tela, um mundo em que ao chegar na borda você passava para o mapa adjacente e um sistema em que, se saísse o número natural 1 a cada passo, você entrava em combate. Era trabalhoso, mas para estudantes do ensino médio era realmente divertido, e o grande ponto era que, em vez de ter que aprender SFML, ActiveX ou OpenGL logo de início como hoje, bastava chamar
circleconio.he o BGIgraphics.hda Borland. Hoje o SDL cumpre um pouco esse papel, mas não é tão simplesDepois de ver o livro ser mencionado várias vezes aqui ao longo dos anos, finalmente li Masters of Doom alguns meses atrás, e foi um livro excelente. Os jogos que eles faziam na época eram extremamente interessantes de jogar, mas, olhando para trás, o que inspira ainda mais é ver o que alguns jovens desenvolvedores com poucos recursos conseguiram criar
Sinto muita falta das UIs baseadas em texto do DOS. Lembro do confiável PS/2 que continuei usando até por volta de 1997
Instalar no drive C? Que luxo! Eu não tinha disco rígido, então ficava trocando disquetes entre os drives A e B, e o compilador vivia pedindo as partes trocadas. Mesmo assim, a gente se divertia. A garotada de hoje não acredita quando contamos essas histórias
O Borland C++ era realmente excelente. Um IDE com compilador C++, biblioteca padrão e depurador cabia em cerca de 5 MB, além daquela paleta de cores aconchegante da Borland, com letras amarelas sobre fundo azul
Os IDEs MS-DOS da Borland são lembranças deliciosas
Usei em alguns dias do Advent of Code deste ano, mas a nostalgia passou rápido. Depois de se acostumar com ambientes modernos, as limitações do IDE e a verbosidade do Pascal não são “divertidas” para uso diário. Ainda assim, as lembranças são mesmo doces
Em especial, não conseguem reconhecer a tecla Alt sozinha, combinações Alt+letra nem Ctrl+Shift+setas esquerda/direita
Texto relacionado: Let’s compile like it’s 1992 (2014) - https://news.ycombinator.com/item?id=13750097 - fevereiro de 2017, 80 comentários
Tive problemas para abrir o arquivo. Em
wolfsrc.zip, apareceu o erro End-of-central-directory signature not found, dizendo que talvez não fosse um arquivo zip ou que pudesse ser parte de um arquivo dividido em vários discoscurl -O [http://fabiensanglard.net/Compile_Like_Its_1992/tools/wolfsr...](<http://fabiensanglard.net/Compile_Like_Its_1992/tools/wolfsrc.zip>), baixei um arquivo HTMLO resultado de
$ file wolfsrc.ziptambém foiwolfsrc.zip: HTML document text, ASCII text. Já owgetbaixou o arquivo corretamente, e consegui descompactá-lo sem problemas