โปรเจ็กต์นี้ทำวิศวกรรมย้อนกลับเกม ZX Spectrum 48K สุดคลาสสิกของ Denton Designs The Great Escape จากภาพเทปของเกมต้นฉบับไปเป็นการแยกส่วน HTML ที่มีการอ้างอิงโยงและมีคำอธิบายประกอบและซอร์สโค้ดแอสเซมบลีแบบเต็ม โดยใช้ SkoolKit
The Great Escape เป็นเกมแหกคุก 3 มิติสามมิติสามมิติในปี 1986 สำหรับ 48K ZX Spectrum ที่คุณจะได้เล่นเป็นเชลยศึกที่พยายามหลบหนีจากค่ายกักขังนาซี เป็นเกม Spectrum ที่ได้รับการยกย่องมากที่สุดเกมหนึ่ง และฉันต้องการทราบว่าผู้เขียนจัดการบรรจุเวทย์มนตร์ทั้งหมดลงใน 48K ZX Spectrum ได้อย่างไร
อ่านเวอร์ชันปัจจุบันของการถอดแยกชิ้นส่วนได้ที่นี่ มันไม่ได้เป็นเพียงรายการประกอบเท่านั้น แต่ยังได้ถอดรหัสกราฟิกเกม ตัวละคร ไอเท็ม แอนิเมชั่น และรายละเอียดอื่น ๆ อีกมากมายเกี่ยวกับการทำงานของเกม
โปรดทราบว่าการถอดแยกชิ้นส่วนอาจล่าช้าหลังส่วนหัวของแผนผังต้นทาง: มันอาจไม่แสดงการเปลี่ยนแปลงล่าสุดจนกว่าฉันจะพุชบิลด์ที่อัปเดต
เป้าหมายแรกของฉันคือการสร้างการแยกชิ้นส่วนของเกมที่มีเอกสารครบถ้วน SkoolKit ช่วยให้เราสร้างทั้งรายการประกอบที่มีคำอธิบายประกอบซึ่งเหมาะสำหรับการสร้างอิมเมจของเกมต้นฉบับขึ้นมาใหม่ และการถอดแยกชิ้นส่วนที่มีการอ้างอิงโยงโดยละเอียดในรูปแบบ HTML
อย่างที่สองคือการแปลงแอสเซมบลีที่มีคำอธิบายประกอบเป็นซอร์สโค้ด C ซึ่งมีพฤติกรรมเหมือนกับเกมต้นฉบับทุกประการ โครงการนำกลับมาใช้ใหม่ที่กำลังดำเนินการอยู่ในพื้นที่เก็บข้อมูลนี้ และทั้งสองโครงการดำเนินการควบคู่กันไป
SkoolKit เป็นชุดเครื่องมือ Python ที่ไม่มีใครเทียบได้สำหรับการแยกส่วนซอฟต์แวร์ ZX Spectrum ที่เขียนโดย Richard Dymond
นอกเหนือจากการสร้างการแยกส่วน HTML ที่อ้างอิงโยงแล้ว SkoolKit ยังสามารถสร้างรายการแอสเซมบลีที่มีคำอธิบายประกอบอีกด้วย เราสามารถใช้สิ่งนี้เพื่อประกอบเกมอีกครั้งเป็นไฟล์ .TAP ซึ่งคุณสามารถโหลดลงในโปรแกรมจำลองได้ คุณสามารถใช้มันเพื่อแก้ไขเกมและแก้ไขข้อบกพร่องอายุ 30 ปีได้!
git clone https://github.com/dpt/The-Great-Escape.git
cd <cloned repo>
make disasm
หากทุกอย่างเรียบร้อยดีคุณจะเห็นผลลัพธ์เช่น:
$ 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
ในเบราว์เซอร์ของคุณและดำดิ่งลงไป make tap
จะสร้าง build/TheGreatEscape.tap
make z80
แทนเพื่อสร้างอิมเมจ .z80 หากคุณต้องการขั้นตอนใดๆ ข้างต้นจะเรียกใช้ขั้นตอนก่อนหน้าโดยอัตโนมัติ
make skool
-- เพื่อสร้างไฟล์ .skoolTheGreatEscape.skool
make tap
build/TheGreatEscape.tap
ใหม่ในโปรแกรมจำลองของคุณ หากไฟล์ skool ไม่ถูกใจคุณ และคุณชอบรายการแอสเซมบลีทั่วไป: make asm
will build build/TheGreatEscape.asm
จากนั้นสามารถส่งผ่านไปยัง Pasmo เพื่อสร้างไบนารี่ได้
ขณะนี้วิศวกรรมย้อนกลับของเกมเสร็จสมบูรณ์แล้ว แต่งานจะยังคงปรับปรุงความแม่นยำและความสามารถในการอ่านของการถอดชิ้นส่วนต่อไป
นี่คือสไลด์จากงานนำเสนอที่ฉันส่งให้เพื่อนร่วมงานเกี่ยวกับโครงการนี้ในเดือนมกราคม 2016
มีเวอร์ชันอัปเดตล่าสุดด้วยซึ่งเขียนขึ้นสำหรับการนำเสนอในปี 2020 เกี่ยวกับโครงการไปยังกลุ่มผู้ใช้ ABug: http://abug.org.uk/index.php/2020/07/04/the-great-escape-risc -os-การแปลง-เดวิด-โทมัส/
ในปี 2019 ฉันเขียนบทความสำคัญเกี่ยวกับโครงการนี้บนเว็บไซต์ของฉัน: http://www.davespace.co.uk/the.great.escape/