Este projeto faz engenharia reversa do clássico jogo ZX Spectrum 48K da Denton Designs, The Great Escape, de uma imagem de fita do jogo original em uma desmontagem HTML com referência cruzada e anotada e código-fonte de montagem completo, usando o SkoolKit.
The Great Escape é um jogo isométrico de prisão em 3D de 1986 para o 48K ZX Spectrum, onde você joga como um prisioneiro de guerra tentando escapar de um campo de prisioneiros nazista. É um dos jogos Spectrum mais conceituados e quero saber como os autores conseguiram colocar toda essa magia no 48K ZX Spectrum.
Leia a versão atual da desmontagem aqui. Não é apenas uma listagem de montagem: ela decodificou gráficos do jogo, personagens, itens, animações e vários outros detalhes sobre o funcionamento do jogo.
Observe que a desmontagem pode ficar atrás do topo da árvore de origem: ela pode não apresentar as alterações mais recentes até que eu envie uma compilação atualizada.
Meu primeiro objetivo é construir uma desmontagem do jogo totalmente documentada. O SkoolKit nos permite construir uma lista de montagem anotada adequada para reconstruir uma imagem exata do jogo original e uma desmontagem detalhada com referências cruzadas em formato HTML.
A segunda é transformar o assembly anotado em código-fonte C que se comporta exatamente como o jogo original. O projeto de reimplementação em andamento reside neste repositório e os dois projetos prosseguem em conjunto.
SkoolKit é o kit de ferramentas Python incomparável para desmontar o software ZX Spectrum escrito por Richard Dymond.
Além de produzir a desmontagem HTML com referência cruzada, o SkoolKit também pode produzir uma listagem de montagem anotada. Podemos usar isso para remontar o jogo em um arquivo .TAP que você pode carregar em um emulador. Você pode usá-lo para alterar o jogo e corrigir bugs de 30 anos!
git clone https://github.com/dpt/The-Great-Escape.git
cd <cloned repo>
make disasm
Se tudo estiver bem, você verá uma saída como:
$ make disasm
tap2sna.py --output-dir build @TheGreatEscape.t2s && mv build/TheGreatEscape.z80 build/TheGreatEscape.pristine.z80
Downloading http://www.worldofspectrum.org/pub/sinclair/games/g/GreatEscapeThe.tzx.zip
Extracting The Great Escape.tzx
Writing build/TheGreatEscape.z80
mkdir -p build
sna2skool.py --hex --sft TheGreatEscape.sft build/TheGreatEscape.pristine.z80 > TheGreatEscape.skool
Using skool file template: TheGreatEscape.sft
skool2html.py --hex --asm-labels --rebuild-images TheGreatEscape.skool
Using ref files: TheGreatEscape.ref, TheGreatEscapeBugs.ref, TheGreatEscapeChangelog.ref, TheGreatEscapeFacts.ref, TheGreatEscapeGame.ref, TheGreatEscapeGlossary.ref, TheGreatEscapeGraphics.ref
Parsing TheGreatEscape.skool
Output directory: build/TheGreatEscape
Copying /usr/local/lib/python3.7/site-packages/skoolkit/resources/skoolkit.css to skoolkit.css
Copying TheGreatEscape.css to TheGreatEscape.css
Copying static-images/BarbedWire.png to static-images/BarbedWire.png
Copying static-images/GameWindow.png to static-images/GameWindow.png
Copying static-images/JoystickControls.png to static-images/JoystickControls.png
Writing disassembly files in asm
Writing maps/all.html
Writing maps/routines.html
Writing maps/data.html
Writing maps/messages.html
Writing maps/unused.html
Writing buffers/gbuffer.html
Writing reference/bugs.html
Writing reference/changelog.html
Writing reference/facts.html
Writing reference/glossary.html
Writing graphics/glitches.html
Writing Intro.html
Writing Controls.html
Writing Completion.html
Writing Characters.html
Writing Items.html
Writing Masks.html
suggested width 17 > actual 16
Writing RoomObjects.html
Writing Rooms.html
Writing Map.html
Writing index.html
build/TheGreatEscape/index.html
em seu navegador e mergulhe. make tap
irá construir build/TheGreatEscape.tap
make z80
para construir uma imagem .z80, se preferir.Qualquer uma das etapas acima invocará automaticamente a etapa anterior.
make skool
- para construir o arquivo .skoolTheGreatEscape.skool
make tap
build/TheGreatEscape.tap
em seu emulador Se os arquivos skool não são do seu gosto e você prefere uma listagem de montagem normal: make asm
irá construir build/TheGreatEscape.asm
. Isso pode então ser passado para o Pasmo, por exemplo, para construir um binário.
A engenharia reversa do jogo está concluída, mas o trabalho continuará para melhorar a precisão e a legibilidade da desmontagem.
Aqui estão os slides de uma apresentação que fiz aos meus colegas sobre o projeto em janeiro de 2016.
Há também uma versão atualizada mais recentemente que foi escrita para uma apresentação de 2020 sobre o projeto para o grupo de usuários ABug: http://abug.org.uk/index.php/2020/07/04/the-great-escape-risc -os-conversion-david-thomas/
Em 2019 fiz um grande artigo sobre o projeto no meu site: http://www.davespace.co.uk/the.great.escape/