- วิเคราะห์ย้อนรอยระบบลงจอดบนเรือบรรทุกเครื่องบินของ Top Gun บน NES และเผย เงื่อนไขการตัดสินการลงจอดที่แม่นยำ
- การลงจอดให้สำเร็จต้องมี ระดับความสูง 100~299, ความเร็ว 238~337 และ เล็งตรงไปยังหัวเรือบรรทุกเครื่องบิน
- ข้อความ “Alt. 200 / Speed 288” บน MFD ในเกม แท้จริงแล้วแสดง ค่ากลางของช่วงที่ยอมรับได้
- ความเร็วและระดับความสูงถูกเก็บในหน่วยความจำในรูปแบบ BCD(Binary Coded Decimal) และมีการเรียกใช้ฟังก์ชันตัดสินที่แอดเดรสเฉพาะ
- เป็นกรณีตัวอย่างของการ ถอดรหัสลอจิกภายในที่ละเอียดของเกมเก่า ซึ่งมีประโยชน์ต่อการเรียนรู้การวิเคราะห์และดีบักเกมเรโทร
เงื่อนไขพื้นฐานของการตัดสินการลงจอด
- การลงจอดจะสำเร็จได้ต้องมี ระดับความสูง 100~299, ความเร็ว 238~337 และ ทิศทางที่แม่นยำไปยังเรือบรรทุกเครื่องบิน
- เงื่อนไขทั้งสามข้อนี้จะถูกตรวจเมื่อสิ้นสุดลำดับการลงจอด
- ข้อความ “Alt. 200 / Speed 288” บนหน้าจอเกมคือค่ากลางของช่วงที่ยอมรับได้จริง จึงเป็นตัวเลขที่เหมาะให้ผู้เล่นใช้เป็นเป้าหมาย
- ระดับความสูงและความเร็วปรับได้ด้วย การกดคันเร่งและมุม pitch ส่วนทิศทางไม่มีตัวบอกแยกต่างหาก นอกจากการแจ้งเตือน “Right! Right!” เท่านั้น
โครงสร้างหน่วยความจำและตัวแปรภายใน
- แอดเดรสหน่วยความจำหลักและข้อมูลที่เก็บ
- $40–$41: ความเร็ว(BSD format), ช่วงที่ยอมรับได้ 238–337
- $3D–$3E: ระดับความสูง(BSD format), ช่วงที่ยอมรับได้ 100–299
- $FD: ทิศทาง(Heading), ในช่วง -32 ~ +32 โดยค่า 0–7 สามารถลงจอดได้
- $9E: เก็บผลการตัดสินการลงจอด โดยค่า 0 หมายถึงสำเร็จ
- ความเร็วและระดับความสูงถูกเก็บเป็น BCD(Binary Coded Decimal) เพื่อให้การแสดงผลบนหน้าจอง่ายขึ้น
- ตัวอย่าง: 1234 จะถูกเก็บในรูป 0x1234(เลขฐานสิบ 4660)
รูทีนตัดสินการลงจอด
- ฟังก์ชันที่แอดเดรส $B6EA จะตรวจสถานะการลงจอดและบันทึกผลลงใน $9E
- รูทีนจะเปรียบเทียบระดับความสูง·ความเร็ว·ทิศทางตามลำดับ และหากไม่ผ่านเงื่อนไขจะคืนค่าโค้ดที่ต่างกัน
- ตัวอย่าง: หากสูงหรือเร็วเกินไปจะได้โค้ด 8 หากต่ำหรือช้าเกินไปจะได้โค้ด 4
- หากผ่านทุกเงื่อนไข จะถูกตั้งค่าเป็น LDX #00 เพื่อประมวลผลว่าสำเร็จ
การดีบักและโค้ดโกง
- หากใช้ Game Genie code AEPETA จะถูกตัดสินว่าเป็นการลงจอดสำเร็จเสมอ
- โค้ดนี้จะข้ามรูทีนตัดสินจริง และบันทึกผลเป็นสถานะสำเร็จแบบบังคับ
บทสรุป
- ระบบลงจอดใน NES Top Gun ไม่ได้เป็นเพียงการบังคับแบบง่าย ๆ แต่ประกอบด้วย ลอจิกการตัดสินที่อิงค่าตัวเลขอย่างแม่นยำ
- การทำวิศวกรรมย้อนกลับทำให้สามารถยืนยันได้อย่างชัดเจนถึง โครงสร้างหน่วยความจำภายในและวิธีแยกเงื่อนไขของเกมเรโทร
- เป็นตัวอย่างที่แสดงให้เห็นความละเอียดในการออกแบบเกมคลาสสิก และมีคุณค่าสำหรับใช้เป็นข้อมูลอ้างอิงใน การวิเคราะห์ลอจิกเกมและการศึกษาการกู้คืนระบบ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ข้อมูล สำหรับการลงจอดเครื่องบินอย่างถูกต้องนั้น มีอยู่ในคู่มือครบถ้วน
ความเร็วและระดับความสูงที่ต้องการไม่ใช่ความลับ เพียงแต่เด็กส่วนใหญ่ไม่ได้อ่านคู่มือ
ความยากที่แท้จริงของเกมมาจาก เอนจินฟิสิกส์ที่สมจริงครึ่งหนึ่ง พี่ชายที่เคยเรียนการบินลงจอดได้อย่างง่ายดาย แล้วก็สอนวิธีให้ฉันด้วย
ต้องควบคุมความเร็วและระดับความสูงด้วยคันเร่งและมุมกดเงย ไม่ใช่แค่กดปุ่มเครื่องยนต์หรือปุ่มแอร์เบรกอย่างเดียว
เคล็ดลับที่พี่สอนคือ ตอนกำลังดิ่งลง ความเร็วจะไม่ลดลง จึงต้องเชิดหัวขึ้นเล็กน้อย เปิดแอร์เบรกเพื่อลดความเร็ว แล้วค่อยปรับให้เครื่องกลับมาระนาบ ซึ่งเกมนี้จำลองเรื่องนี้ได้ค่อนข้างแม่นยำ
บล็อกนี้ถูกทำให้ ค้นดูคลังบทความได้ยาก
ไม่มีลิงก์ไปยังโพสต์อื่น และนอกจากโพสต์นี้แล้วก็แทบเข้าไม่ได้เลย
blag/posts หรือ blag ขึ้น 403 ส่วนหน้า root มีแค่รูปภูเขารูปเดียว
RSS feed ก็ไม่มี ไม่ได้บ่นนะ ถ้านี่เป็นดีไซน์ที่ตั้งใจก็เคารพได้
การลงจอดบนเรือบรรทุกเครื่องบินไม่ยากนัก แต่ การเติมเชื้อเพลิงกลางอากาศ นี่สิยากจริง ทำสำเร็จได้แค่ไม่กี่ครั้ง
วิดีโอเกมเพลย์
นึกถึง ประโยคคลาสสิก “This business will get out of control…” ขึ้นมาเลย
เกมนี้เคยถูกพูดถึงในวิดีโอของ Angry Video Game Nerd ด้วย
วิดีโอที่เกี่ยวข้อง
ลิงก์ YouTube
ฉันไม่ได้เล่น Top Gun แต่เล่น Turn and Burn: No Fly Zone บน SNES บ่อยมาก
ทุกครั้งที่มีการเปลี่ยนรุ่นเครื่อง พอย้อนกลับไปดูก็ยังทึ่งเสมอว่ากราฟิกพัฒนาไปได้มากแค่ไหน
การเปลี่ยนจาก NES→SNES ก็ใกล้เคียงกัน ส่วนยุค PS1→PS2→PS3 นั้น พอ 3D เริ่มลงหลักปักฐานแล้ว การเปลี่ยนแปลงก็เลยค่อยๆ เป็นไปทีละน้อย มากขึ้น
หลายคนบอกว่า Top Gun ลงจอดยาก แต่ การด็อกกิงกับดาวเทียมใน Captain Skyhawk ยากกว่ามาก
ต้องด็อกท่ามกลางเอฟเฟกต์แบบ demoscene ของ RARE ที่ระเบิดใส่เต็มจอ
เพื่อใช้เปรียบเทียบ มีคนแชร์ ตัวอย่างโค้ดตัดสินการลงจอด ที่เขียนด้วย Python
โดยจะคืนค่าอย่าง TOO_SLOW_OR_TOO_LOW, TOO_FAST_OR_TOO_HIGH ตามระดับความสูง ความเร็ว และทิศทาง
ฉันชอบ การเล่นซนกับซิมูเลเตอร์ แบบนี้มาก
ใน X‑Plane คุณสามารถเอา 737 ไปลงบนเรือบรรทุกเครื่องบินได้ด้วย แค่บรรทุกเชื้อเพลิงสำหรับ 30 นาที ปรับ flaps ลงสุด และดึงเบรกมือก่อนแตะพื้น
แน่นอนว่าตามสเปกทางการ 737 ต้องใช้รันเวย์ยาวกว่านั้นมาก แต่ถ้าเรือบรรทุกแล่นสวนลม ก็อาจได้ ลมปะทะเกิน 40 นอต
ตอนเด็กฉันเล่นเกมนี้ แต่ไม่เคยลงบนเรือบรรทุกเครื่องบินสำเร็จเลย นั่นเป็น หน้าที่ของพี่ๆ
วันหนึ่งที่ศูนย์ดูแลหลังเลิกเรียน มีเพื่อนคนหนึ่งบอกว่าเขาลงเกมนี้ได้เก่งมาก เราเลยวาง แผนร่วมมือ กัน
ฉันรับหน้าที่สู้รบ เขารับหน้าที่ลงจอด แล้วเราก็ช่วยกันเคลียร์ Top Gun กับ The Second Mission ได้ภายในไม่กี่ชั่วโมง
จนถึงตอนนี้ก็ยังเป็นหนึ่งในความทรงจำที่ดีที่สุดของเกม NES ไม่กี่เกมที่ฉันกับเพื่อนเล่นจบด้วยกันโดยไม่ใช้สูตรหรือ Game Genie เลย