โครงการรีเวิร์สวิศวกรรมเกม DOS F-15 Strike Eagle II เปิดรับนักบินทดสอบบน DOS
(neuviemeporte.github.io)- โครงการรีเวิร์สวิศวกรรมไบนารีต้นฉบับของเกมปี 1989 F-15 Strike Eagle II เพื่อสร้างซอร์สโค้ด C ขึ้นใหม่ ได้เข้าสู่ขั้นตอนทดสอบการเล่นจริงแล้ว
- โค้ดและข้อมูลของไฟล์รันทั้งหมดรวมถึง
egame,endถูกย้ายมาเป็น C แล้ว และโค้ดส่วนใหญ่ที่เคยมีเฉพาะในแอสเซมบลีก็มี implementation ทดแทนใน C เตรียมไว้แล้ว - รีลีสล่าสุด
v0.9.1สามารถนำไปทดสอบได้โดยแทนที่ไฟล์รันต้นฉบับในเกมเวอร์ชัน451.03และส่วนขยาย Desert Storm - ไฟล์รันตัวใหม่จะไม่ผ่านหน้าตั้งค่า และจะถือว่าเป็น MCGA/VGA, ปิดเสียง, และไม่มีจอยสติ๊ก แต่หน้าสรุปภารกิจก่อนบิน การบิน และหน้าสรุปหลังภารกิจควรทำงานได้
- เนื่องจากเป้าหมายคือการสร้างใหม่แบบ bug-for-bug ที่คงไว้แม้แต่บั๊กเหมือนต้นฉบับ พฤติกรรมที่มีอยู่ในเกมต้นฉบับจึงยังไม่ถือเป็นเป้าหมายของรายงานบั๊กในตอนนี้
ความคืบหน้าของโครงการสร้างใหม่ด้วย C
- การสร้างใหม่ของ F-15 Strike Eagle II เป็นโครงการงานอดิเรกที่ทำการรีเวิร์สเอนจิเนียร์ไบนารีต้นฉบับเพื่อสร้างซอร์สโค้ด C ของเกมปี 1989 ขึ้นมาใหม่
- เมื่อเพียงเดือนกว่า ๆ ก่อนหน้านี้ ยังดูเหมือนว่าจะต้องใช้เวลาอีกหลายปีกว่าจะย้ายไฟล์รันตัวที่สอง
egameมาเป็น C ได้ และยังมีไฟล์รันตัวที่สามendเหลืออยู่ด้วย - ตอนนี้โครงการคืบหน้าไปถึงขั้นต่อไปนี้แล้ว
- สร้างใหม่ โค้ด C ของไฟล์รันทั้งหมด เสร็จแล้ว
- ย้ายข้อมูลทั้งหมดจากแอสเซมบลีมาเป็น C
- เขียน implementation ทดแทนใน C ที่เทียบเท่าการทำงานได้สำหรับโค้ดส่วนใหญ่ที่เคยมีเฉพาะในแอสเซมบลี
- ตั้งชื่อที่มีความหมายให้กับรูทีนและโครงสร้างข้อมูลส่วนใหญ่
- กำลังพิจารณาแยกรีโพซิทอรีสำหรับโครงการพอร์ตในอนาคตอันใกล้
- มีการใช้เครื่องมือตรวจสอบว่า opcode ที่สร้างใหม่นั้นตรงกับต้นฉบับเพียงใด แต่ยังไม่สามารถจับบั๊กที่เกี่ยวข้องกับ data layout ได้ทั้งหมด
- ตอนนี้เลยพ้นขั้นการตรวจว่า opcode ตรงกันหรือไม่ไปแล้ว และจำเป็นต้องทำให้ตัวเกมที่รันได้จริงคงสภาพการทำงานไว้ จึงต้องการการทดสอบจากภายนอก
วิธีทดสอบและปัญหาที่ควรรายงาน
- ตัวที่ใช้ทดสอบคือรีลีสล่าสุด v0.9.1
- เพียงนำไฟล์รันตัวใหม่ไปใส่ในโฟลเดอร์เกมที่มีเกมต้นฉบับเวอร์ชัน
451.03และส่วนขยาย Desert Storm แล้วแทนที่ไฟล์รันต้นฉบับ- ควร สำรองข้อมูล ก่อนแทนที่
- อาจต้องลบ
f15.comต้นฉบับเพื่อไม่ให้f15.comเดิมถูกรันแทนf15.exeตัวใหม่
- ไฟล์รันตัวใหม่จะไม่เข้าสู่หน้าตั้งค่า
- สมมติว่าใช้ จอแสดงผล MCGA/VGA
- ไม่มีเสียง
- ไม่มีจอยสติ๊ก
- หากพบปัญหาระหว่างทดสอบ สามารถรายงานผ่าน GitHub Issues ได้
- แครช
- กราฟิกผิดเพี้ยน
- ปุ่มกดไม่ทำงาน
- หากจำเป็น ให้แนบภาพหน้าจอที่ถ่ายใน dosbox ด้วย
Ctrl+F5 - การระบุว่าได้ทำอะไรไปบ้างก่อนเกิดปัญหาจะช่วยให้การทำซ้ำและแก้ไขทำได้ง่ายขึ้น
- โครงการนี้มีเป้าหมายเป็นการสร้างใหม่แบบ bug-for-bug ดังนั้นพฤติกรรมที่มีอยู่ในเกมต้นฉบับจึงควรถูกคงไว้
- ในเกมต้นฉบับมีปัญหาอย่างวัตถุ 3D หายไป หรือเครื่องบินตกขึ้นไปทางท้องฟ้าเมื่อเชื้อเพลิงหมดขณะอยู่ในสภาพกลับหัว
- ก่อนรายงาน ควรตรวจสอบก่อนว่าปัญหาเดียวกันนี้เกิดขึ้นในต้นฉบับด้วยหรือไม่
1 ความคิดเห็น
ความเห็นจาก Hacker News
มีเวอร์ชัน DOSที่เล่นได้
ขั้นแรกคือทำวิศวกรรมย้อนกลับทั้งหมดเป็นแอสเซมบลี และขั้นที่สองคือแปลงแอสเซมบลีให้เป็นโค้ด C ที่คอมไพล์แล้วได้ไบนารีเหมือนกันทุกประการ งานนี้จะทำต่อบน DOS ไปเรื่อย ๆ จนไม่เหลือโค้ดแอสเซมบลี แล้วจากนั้นจึงจะเริ่มพอร์ตไป Linux และ Windows
การทำวิศวกรรมย้อนกลับมีโอกาสทำให้เกิดบั๊กใหม่ได้ง่าย และก็ไม่ง่ายที่จะหาบั๊กทั้งหมดในโค้ดวิศวกรรมย้อนกลับที่เก่าขนาดนี้ แต่จนถึงตอนนี้ดูเหมือนว่าทุกอย่างจะทำงานได้
ถ้าคุณมี F-15 เวอร์ชัน 451.03 และมี Dosbox หรือ DOS จริง ช่วยลองหาบั๊กที่ยังเปิดอยู่ให้หน่อย
ดาวน์โหลด DOS รีลีสล่าสุดได้ที่นี่: https://github.com/neuviemeporte/f15se2-re/releases
ไฟล์
f15_se2-*.zipมีไฟล์ executable ทดแทนสำหรับเกม DOSAir Force needs YOU!
แค่มีจุดเล็ก ๆ ส่วนตัวนิดเดียวที่จะทำให้เหล่าทัพอื่นเอาไปล้อว่าผมรักเก้าอี้แค่ไหน
Air Force เขียนแยกเป็นสองคำ
ดูเหมือนไม่จำเป็นต้องกดดันตัวเองกับพอร์ต Linuxมากนัก เพราะการรองรับผ่านอีมูเลเตอร์ดีมากและคนใช้กันแพร่หลาย ถ้ารันได้บนนั้นก็ถือว่าประสบความสำเร็จแล้ว
ผมใช้ Lutris(https://lutris.net/) เพราะใช้งานสะดวก
แต่คุณก็ดูเป็นคนที่ชอบงานระดับล่าง ดังนั้นเรื่องนี้อาจเป็นเควสต์ในตัวเองมากกว่าการได้เล่นเกมเรโทรเจ๋ง ๆ
แต่ก็ยังกังวลว่าโดยรวมแล้วมันโอเคทางกฎหมายหรือเปล่า อยากรู้ว่าคุณคิดยังไงกับเรื่องนี้
ขอถามแบบมือใหม่ หวังว่าจะไม่ฟังดูในแง่ลบ
การทุ่มเวลาเพื่อทำให้เกมเก่ากลับมารันได้เป็นเรื่องที่ดีมาก แต่ผมสงสัยว่าทำไมต้องดีคอมไพล์เกมที่จำลองการทำงานได้อยู่แล้วด้วย DOSbox อะไรทำนองนั้น เกมเก่าขนาดนี้ไม่น่าจะรันได้สบาย ๆ บนฮาร์ดแวร์สเปกต่ำมากอยู่แล้วไม่ใช่หรือ?
ถ้ามีซอร์สโค้ด คุณสามารถเพิ่มฟีเจอร์ทั้งชุด พอร์ตไป Windows 10 หรือทำ 4K HDR, เท็กซ์เจอร์, โมเดลใหม่, ภารกิจใหม่ ได้เลย ข้อจำกัดแทบไม่มี
อีกอย่าง การวิเคราะห์เกมจากคำสั่งแอสเซมบลีที่มีแค่ออฟเซ็ตข้อมูลแบบฮาร์ดโค้ดนั้นยากมาก แต่ถ้าเป็นโค้ด C คุณจะอ่านพฤติกรรมได้ตรง ๆ หรือแทรกโค้ดสำหรับ instrument/debug เพื่อทำความเข้าใจก็ได้
ผมอยากทำเอกสารฟอร์แมตไฟล์ ขุดข้อมูลเพื่อหาไฟล์สื่อที่ไม่ได้ใช้ ระบุและแก้บั๊กหนัก ๆ สร้างเครื่องมือม็อด และอยากเข้าใจว่าอะไรบางอย่างจากวัยเด็กที่ติดอยู่ในความทรงจำถูกสร้างขึ้นด้วยเทคนิคแบบไหน
ผมอยากลดแรงเสียดทานในการรันบนระบบสมัยใหม่ และเปิดทางให้มีการปรับปรุงเสริมแบบเลือกได้ เช่น ความละเอียดสูงขึ้นหรือสลับเท็กซ์เจอร์
สุดท้ายผมไม่มีความอดทนพอจะทำจนเสร็จ แต่ตอนนี้ก็รู้สึกว่าอาจจะทำได้แล้ว
อีกทั้งเกมเหล่านี้มักถูกสร้างมาให้รันได้บนฮาร์ดแวร์กราฟิกและเสียงหลายแบบ ทำให้ในทางปฏิบัติไดรเวอร์ถูกคอมไพล์รวมอยู่ในตัวเกมเลย
[0] https://github.com/keirf/greaseweazle
เป็นเกมที่ผมเล่นเยอะมากตอนเด็ก ผมเล่น F-19 Stealth Fighter กับ F-117A Nighthawk Stealth Fighter ด้วย และเพิ่งรู้วันนี้เองว่าสองเกมนั้นออกก่อนและหลังเกมนี้ ผมยังเล่น F-14 Tomcat นิดหน่อยด้วย
ถ้าอ่านถูกต้อง ดูเหมือนว่าการรันเกมนี้ยังต้องใช้ไฟล์เกมต้นฉบับอยู่ ดังนั้นสำหรับผมคงเป็นการอ่านบันทึกการพัฒนามากกว่าจะได้กลับไปขับเครื่องบินลำนี้อีกครั้ง
ผมยังจำได้ว่าไปซื้อจาก Electronics Boutique ช่วงปลายยุค 1980 แล้วเอากลับมาเล่นบน Packard Bell 286 ที่บ้าน ระบบป้องกันการคัดลอกคือให้เปิดคู่มือไปหาเครื่องบินแล้วระบุให้ถูกต้อง สุดท้ายเลยจำเครื่องบินทั้งหมดในเกมได้ขึ้นใจ
ผมยังซื้อจอยสติ๊ก Gravis Analog มาเพื่อเล่นเกมนี้ และยังเก็บแผ่นคีย์บอร์ดโอเวอร์เลย์ไว้อยู่เลย
ผมอยากเห็นเกมนี้ถูกรีบูตแบบสมัยใหม่จริง ๆ
ผมเคยโทรหาเพื่อนทางโทรศัพท์บ้านอยู่นานเพื่อจูนค่าตั้งค่าโมเด็ม แล้วให้เขาวางสายก่อนโทรกลับมา จากนั้นก็เริ่มเกม แล้วก็หลุด แล้วโทรคุยกันใหม่ว่าเมื่อกี้เกิดอะไรขึ้น ทำแบบนี้ซ้ำไปมา
ตอนที่มันใช้การได้ในที่สุด เราเล่นกันหนักมากจนแม่ของเพื่อนสั่งห้ามเล่นผ่านโมเด็ม เพราะมันยึดสายโทรศัพท์เส้นเดียวของบ้านไว้ทีละหลายชั่วโมง
ผมอยากหาเกมจำลองการบินหรืออวกาศเกมอื่นที่มีมัลติเพลเยอร์แบบคล้ายกัน และก็อยากทำให้เกมนี้กลับมารันได้อีกเพื่อหลอกล่อเพื่อนกลับไปหาอดีต
ทุกวันนี้การพอร์ตเกมง่ายแบบน่าเหลือเชื่อ
https://robin.tooclever.org ใช้เวลาไม่ถึงวันในแง่ของเวลา API
ผมสงสัยว่า AI เหมาะกับการอนุมานโครงสร้างของโปรเจ็กต์ที่ถูกดีคอมไพล์ซึ่งไม่มีชื่อสัญลักษณ์หรือไม่
นี่ไม่ใช่สายงานของผม แต่ผมประหลาดใจที่เห็น AI เข้าใจเจตนาของโครงสร้าง JavaScript ที่ไม่มี source map ได้ค่อนข้างดี
ในบางกรณีมันเข้าใจcontrol flowที่ถูกทำให้อ่านยากอย่างหนักได้ด้วยตัวเองโดยไม่ต้องใช้เครื่องมือ
ตอนนี้เรื่องนี้ขึ้น YouTube แล้ว: https://youtu.be/aIPKkOpIiF8
ผมมีเพื่อนที่เคยบิน F15 ก็เลยส่งอันนี้ให้เขา
ชุมชนเกมเก่าแบบนี้ทำสิ่งที่น่าทึ่งมากในการทำให้เกมที่ตัวเองรักมีเสรีภาพสี่ประการครบถ้วน และเป็นแรงบันดาลใจจริง ๆ
ผมไม่เคยเล่นเกมนี้ แต่เคยเล่น Jane's F/A-18 และมันเป็นเกมที่ยอดเยี่ยม
ผมใช้เวลาไปมากกับการสะสมแผนที่ Dopplerระหว่างบินเพื่อใช้ยิง SLAM
มันเป็นซิมูเลเตอร์ที่ยอดเยี่ยมพอ ๆ กับ Tornado ของ Digital Integrations และ Tornado เองก็ควรได้รีบูตจริง ๆ