1 คะแนน โดย GN⁺ 2025-12-16 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • วิเคราะห์ย้อนรอยระบบลงจอดบนเรือบรรทุกเครื่องบินของ 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 ความคิดเห็น

 
GN⁺ 2025-12-16
ความคิดเห็นจาก Hacker News
  • ข้อมูล สำหรับการลงจอดเครื่องบินอย่างถูกต้องนั้น มีอยู่ในคู่มือครบถ้วน
    ความเร็วและระดับความสูงที่ต้องการไม่ใช่ความลับ เพียงแต่เด็กส่วนใหญ่ไม่ได้อ่านคู่มือ
    ความยากที่แท้จริงของเกมมาจาก เอนจินฟิสิกส์ที่สมจริงครึ่งหนึ่ง พี่ชายที่เคยเรียนการบินลงจอดได้อย่างง่ายดาย แล้วก็สอนวิธีให้ฉันด้วย
    ต้องควบคุมความเร็วและระดับความสูงด้วยคันเร่งและมุมกดเงย ไม่ใช่แค่กดปุ่มเครื่องยนต์หรือปุ่มแอร์เบรกอย่างเดียว
    เคล็ดลับที่พี่สอนคือ ตอนกำลังดิ่งลง ความเร็วจะไม่ลดลง จึงต้องเชิดหัวขึ้นเล็กน้อย เปิดแอร์เบรกเพื่อลดความเร็ว แล้วค่อยปรับให้เครื่องกลับมาระนาบ ซึ่งเกมนี้จำลองเรื่องนี้ได้ค่อนข้างแม่นยำ

    • เด็กส่วนใหญ่ไม่ได้อ่านคู่มือเหรอ? ถ้าฉันซื้อเกมใหม่มา ฉันจะอ่านคู่มือ ระหว่างนั่งรถกลับบ้าน หลายรอบเลย ถ้าซื้อจาก Toys“R”Us กว่าจะถึงบ้านคงอ่านไปสิบสองรอบแล้ว
    • คติประจำใจตอนลงจอดคือ “ใช้คันเร่งควบคุมระดับความสูง ใช้พิตช์ควบคุมความเร็ว” แต่คนส่วนใหญ่มักทำตรงกันข้าม
    • ฉันก็มีคู่มือ และตอนเด็กก็ชอบอ่านคู่มือมากเหมือนกัน แต่การ ลงจอดบนเรือบรรทุกเครื่องบิน เป็นหนึ่งในประสบการณ์เกมที่ยากที่สุดในชีวิต อัตราสำเร็จน่าจะราว 1% และฉันไม่เคยเข้าใจเลยว่าความต่างระหว่างสำเร็จกับล้มเหลวคืออะไร
    • ไม่ใช่แค่ในคู่มือ บนหน้าจอก็มีข้อมูลแสดงอยู่ด้วย เพียงแต่ไม่มีการบอกช่วงค่าความคลาดเคลื่อน ถ้ารู้ว่ามีระยะเผื่อประมาณ ระดับความสูง ±100 และความเร็ว ±50 ก็คงช่วยได้มาก
    • ถ้าเป็นเกมที่ยืมเพื่อนมาหรือเช่ามา ก็จะไม่มีคู่มือ สุดท้ายฉันจำไม่ได้แล้วว่ารู้วิธีลงจอดมาได้อย่างไร แต่แน่ๆ คือ คำแนะนำการลงจอดกลับทำให้งงมากกว่าเดิม
  • บล็อกนี้ถูกทำให้ ค้นดูคลังบทความได้ยาก
    ไม่มีลิงก์ไปยังโพสต์อื่น และนอกจากโพสต์นี้แล้วก็แทบเข้าไม่ได้เลย
    blag/posts หรือ blag ขึ้น 403 ส่วนหน้า root มีแค่รูปภูเขารูปเดียว
    RSS feed ก็ไม่มี ไม่ได้บ่นนะ ถ้านี่เป็นดีไซน์ที่ตั้งใจก็เคารพได้

    • ตามผลการค้นหาบน Google ดูเหมือนจะมีเพียงบทความนี้กับหน้ารูปภูเขาเท่านั้นที่ถูกจัดทำดัชนี จึงอาจเป็นไปได้ว่าเป็น โพสต์แรกของเว็บไซต์
    • ในเครือข่ายบริษัทของฉัน (ZScaler) เว็บไซต์นี้ถูกจัดอยู่ในหมวด อาวุธ/ระเบิด เลยโดนบล็อก เปิดลิงก์นี้ไม่ได้
  • การลงจอดบนเรือบรรทุกเครื่องบินไม่ยากนัก แต่ การเติมเชื้อเพลิงกลางอากาศ นี่สิยากจริง ทำสำเร็จได้แค่ไม่กี่ครั้ง
    วิดีโอเกมเพลย์

    • เพลงประกอบในฉากเติมเชื้อเพลิงนี่ ยอดเยี่ยมมาก แต่ไม่มีในวิดีโอที่ลิงก์มา เป็นคนละเวอร์ชันหรือเปล่า? เวอร์ชันนี้มีนะ
    • พอกดลิงก์ปุ๊บความทรงจำก็ถาโถมเข้ามา จนต้องปิดแท็บทันที การลงจอดบนเรือก็น่าหงุดหงิดอยู่แล้ว แต่การเติมเชื้อเพลิงนั้นหนักกว่าอีก คิดถึงช่วงเวลาที่ไปบ้านเพื่อน กินพิซซ่า แล้วเล่น NES กันทั้งคืน
    • เวลาที่เติมเชื้อเพลิงแล้วกระสุนมิสไซล์ถูกเติมไปด้วยนี่เป็นระบบที่ สะดวกดีจริงๆ
    • แต่ว่าเครื่องเติมเชื้อเพลิงบินที่ 1,400 ไมล์ต่อชั่วโมงเลยเหรอ นั่นแทบจะ Mach 2 แล้วนะ!
    • ฉันก็เป็นเหมือนกัน :) ถึงอย่างนั้นการพยายามทำเรื่องพวกนี้ซ้ำๆ ก็ยังสนุกอยู่ดี
  • นึกถึง ประโยคคลาสสิก “This business will get out of control…” ขึ้นมาเลย

    • ฉันหยิบประโยคนี้มาใช้ซ้ำไม่รู้กี่ครั้งตลอด 12 ปีที่ผ่านมา คลิป YouTube
  • เกมนี้เคยถูกพูดถึงในวิดีโอของ Angry Video Game Nerd ด้วย
    วิดีโอที่เกี่ยวข้อง

    • ในตอนต่อมา AVGN มี ฉากที่พยายามลงจอด อยู่ด้วย เป็นเทคนิคระดับแทบถอดชิ้นส่วนเกมเลยทีเดียว
      ลิงก์ YouTube
  • ฉันไม่ได้เล่น Top Gun แต่เล่น Turn and Burn: No Fly Zone บน SNES บ่อยมาก
    ทุกครั้งที่มีการเปลี่ยนรุ่นเครื่อง พอย้อนกลับไปดูก็ยังทึ่งเสมอว่ากราฟิกพัฒนาไปได้มากแค่ไหน

    • ถ้าพูดถึงช่องว่างด้านกราฟิกระหว่างรุ่น ฉันคิดว่าความต่างระหว่าง Super Mario 64(N64) กับ Resident Evil 4(GameCube) ใหญ่มากที่สุด
      การเปลี่ยนจาก NES→SNES ก็ใกล้เคียงกัน ส่วนยุค PS1→PS2→PS3 นั้น พอ 3D เริ่มลงหลักปักฐานแล้ว การเปลี่ยนแปลงก็เลยค่อยๆ เป็นไปทีละน้อย มากขึ้น
  • หลายคนบอกว่า Top Gun ลงจอดยาก แต่ การด็อกกิงกับดาวเทียมใน Captain Skyhawk ยากกว่ามาก
    ต้องด็อกท่ามกลางเอฟเฟกต์แบบ demoscene ของ RARE ที่ระเบิดใส่เต็มจอ

    • เคล็ดลับมีอย่างเดียว ตอนด็อกให้ ขยับแค่ขึ้นลง เท่านั้น
  • เพื่อใช้เปรียบเทียบ มีคนแชร์ ตัวอย่างโค้ดตัดสินการลงจอด ที่เขียนด้วย Python
    โดยจะคืนค่าอย่าง TOO_SLOW_OR_TOO_LOW, TOO_FAST_OR_TOO_HIGH ตามระดับความสูง ความเร็ว และทิศทาง

    • ของจริงอาจหน้าตาแบบนี้ก็ได้แฮะ แค่อยากรู้ว่าใช้ LLM ตัวไหนสร้างโค้ดนี้
    • แต่โค้ดนี้จะคืนค่า TOO_SLOW_OR_TOO_LOW แม้ในกรณีที่เยื้องไปทางขวามากเกินไป ขณะที่ในดิแอสเซมบลีต้นฉบับจะกระโดดไปที่ too_far_right
  • ฉันชอบ การเล่นซนกับซิมูเลเตอร์ แบบนี้มาก
    ใน X‑Plane คุณสามารถเอา 737 ไปลงบนเรือบรรทุกเครื่องบินได้ด้วย แค่บรรทุกเชื้อเพลิงสำหรับ 30 นาที ปรับ flaps ลงสุด และดึงเบรกมือก่อนแตะพื้น

    • ในโลกจริงอาจทำได้เหมือนกัน กองทัพเรือสหรัฐฯ เคยเอา C‑130 ไปลงบน USS Forrestal มาแล้ว
      แน่นอนว่าตามสเปกทางการ 737 ต้องใช้รันเวย์ยาวกว่านั้นมาก แต่ถ้าเรือบรรทุกแล่นสวนลม ก็อาจได้ ลมปะทะเกิน 40 นอต
  • ตอนเด็กฉันเล่นเกมนี้ แต่ไม่เคยลงบนเรือบรรทุกเครื่องบินสำเร็จเลย นั่นเป็น หน้าที่ของพี่ๆ

    • ฉันก็เหมือนกัน ฉันชอบเกมนี้มาก แต่พอถึงช่วงลงจอดก็ตกทุกครั้ง
      วันหนึ่งที่ศูนย์ดูแลหลังเลิกเรียน มีเพื่อนคนหนึ่งบอกว่าเขาลงเกมนี้ได้เก่งมาก เราเลยวาง แผนร่วมมือ กัน
      ฉันรับหน้าที่สู้รบ เขารับหน้าที่ลงจอด แล้วเราก็ช่วยกันเคลียร์ Top Gun กับ The Second Mission ได้ภายในไม่กี่ชั่วโมง
      จนถึงตอนนี้ก็ยังเป็นหนึ่งในความทรงจำที่ดีที่สุดของเกม NES ไม่กี่เกมที่ฉันกับเพื่อนเล่นจบด้วยกันโดยไม่ใช้สูตรหรือ Game Genie เลย