2 คะแนน โดย GN⁺ 2023-08-11 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Quake II ที่นำกลับมาวางจำหน่ายใหม่ในปี 2023 ได้เพิ่ม API ใหม่สำหรับการสื่อสารระหว่างเซิร์ฟเวอร์กับโมดูลเกม, โปรโตคอลเครือข่ายใหม่ และโมดูล "client game" เพื่อเพิ่มโอกาสในการม็อดเกม
  • โค้ดเบสที่อัปเดตแล้วได้รวมโมดูลเกมที่เดิมแยกออกจากกันของเกมต้นฉบับ และต้องใช้คอมไพเลอร์ C++17
  • เกม DLL รองรับ Clang, VS2019 และ VS2022 และสามารถคอมไพล์ได้ทั้งบน C++17 และ C++20
  • เวอร์ชันวางจำหน่ายใหม่นี้รองรับ tick rate 40hz ซึ่งให้ประสบการณ์การเล่นและความแม่นยำที่ดีกว่าเมื่อเทียบกับ 10hz ของเวอร์ชันต้นฉบับ
  • ตอนนี้เกม DLL ไม่ใช้ varargs ในฟังก์ชันอีกต่อไป และย้ายภาระการจัดรูปแบบไปให้ฝั่งผู้เรียกใช้
  • เวอร์ชันวางจำหน่ายใหม่นี้มีการเปลี่ยนแปลงฟังก์ชันคณิตศาสตร์เพื่อให้ทำงานได้ง่ายขึ้น และใช้ constexpr กับ operator overloading ในจุดที่เหมาะสม
  • การเปลี่ยนแปลงวิธีการเกี่ยวกับ "เอนทิตีมองเห็นได้ในเฟรมสำหรับไคลเอนต์หรือไม่" รวมถึงการรองรับ split screen และการคัดทิ้งการลดทอนเสียง
  • เวอร์ชันวางจำหน่ายใหม่นี้เปิดโอกาสให้ม็อดได้มากขึ้น แต่เนื่องจากมีการเปลี่ยนแปลงโครงสร้างหลัก ม็อดเดิมอาจต้องเขียนใหม่เพื่อให้ใช้กับโค้ดเบสใหม่นี้ได้
  • การเคลื่อนไหวของผู้เล่นถูกปรับแก้ เพื่อให้โมดูลเกมสามารถเปลี่ยนฟิสิกส์ได้โดยยังทำงานร่วมกับ client prediction ได้
  • Configstrings ได้รับการอัปเดต โดยเพิ่มความยาวสูงสุดจาก 64 เป็น 96 และทำให้บางช่วงสามารถขยายต่อได้หลายบรรทัด
  • เวอร์ชันวางจำหน่ายใหม่นี้มีการเปลี่ยนแปลงโครงสร้าง รวมถึงการเพิ่มแฟล็กใหม่ใน svflags และเปลี่ยน effects_t จาก uint32_t เป็น uint64_t เพื่อแสดงเอฟเฟกต์ได้มากขึ้น
  • มีการเพิ่มพารามิเตอร์ _key ใหม่เพื่อป้องกันไม่ให้ส่งเอฟเฟกต์เดียวกันซ้ำหลายครั้งไปยังผู้เล่นแบบ split screen
  • ตอนนี้ระบบบันทึกจะเขียนข้อมูลเลเวลและข้อมูลเกมเป็น UTF-8 JSON ทำให้นักพัฒนาสำรวจได้ง่ายขึ้น
  • ระบบบันทึกไม่ติดต่อกับไฟล์ซิสเต็มโดยตรงอีกต่อไป และม็อดอื่น ๆ ก็ไม่จำเป็นต้องใช้ JSON
  • โปรโตคอลเซิร์ฟเวอร์ของ Quake II ได้รับการอัปเดต รวมถึงการลบ out-of-band challenge, การเปลี่ยนแปลงข้อความเชื่อมต่อ และการอัปเดตแพ็กเก็ต svc หลายรายการ
  • เนื้อหานี้อธิบายอย่างละเอียดเกี่ยวกับปฏิสัมพันธ์ระหว่างเซิร์ฟเวอร์กับไคลเอนต์หลายรูปแบบ วิธีอ่านข้อมูลชนิดต่าง ๆ จากบิตสตรีม และวิธีจัดการแฟล็กกับคีย์เฉพาะในข้อมูล
  • เนื้อหานี้ยังอธิบายฟังก์ชันของแพ็กเก็ตเซิร์ฟเวอร์-ไคลเอนต์หลายชนิด เช่น svc_waitingforplayers, svc_bot_chat, svc_poi, svc_help_path, svc_achievement รวมถึงวิธีอ่านข้อมูลของมัน
  • แพ็กเก็ต clc_stringcmd ใช้สำหรับอ่านคำสั่งสตริงที่ส่งจากไคลเอนต์ไปยังเซิร์ฟเวอร์
  • เนื้อหานี้ยังอธิบายวิธีจัดการกรณีพิเศษ เช่น เมื่อมีการกำหนดคีย์ที่ไม่ใช่ 0 ให้กับ POI หรือเมื่อเวลาของ POI ถูกตั้งเป็น 0xFFFF หรือ 0

1 ความคิดเห็น

 
GN⁺ 2023-08-11
ความคิดเห็นบน Hacker News
  • การนำซอร์สโค้ดของเกม Quake II มาเผยแพร่อีกครั้ง ได้ปลุกกระแสความทรงจำในชุมชนเทคนิค
  • ผู้แสดงความเห็นจำนวนมากแบ่งปันประสบการณ์ว่าพวกเขาเรียนเขียนโค้ดจาก Quake II โดยเน้นว่าซอร์สโค้ดของเกมที่ชัดเจนและสม่ำเสมอเป็นเครื่องมือการเรียนรู้ที่ยอดเยี่ยม
  • Quake II เคยถูกใช้สอนเด็ก ๆ เรื่อง VR ในช่วงปลายทศวรรษ 1990 และต้นทศวรรษ 2000 โดยให้ลองสร้างเลเวลเกมเสมือนจริงของตัวเอง
  • ผู้ใช้บางคนแบ่งปันความทรงจำเกี่ยวกับการทำม็อดสำหรับเกม และมีผู้ใช้รายหนึ่งถึงกับยกความดีความชอบให้ประสบการณ์ช่วงแรกกับ Quake II ว่าเป็นจุดเริ่มต้นเส้นทางอาชีพโปรแกรมเมอร์คอมพิวเตอร์ของตน
  • การเปิดตัวครั้งนี้ยังกระตุ้นการถกเถียงเรื่องการอนุรักษ์เกมเก่า โดยผู้ใช้บางส่วนเสนอว่าเกมที่เลิกขายหรือเลิกสนับสนุนแล้วควรถูกเผยแพร่เป็นโอเพนซอร์สเพื่อรักษาคุณค่าทางวัฒนธรรมของมัน
  • การเผยแพร่ซอร์สโค้ด Quake II อีกครั้งได้รับคำชื่นชมว่าเข้ากันได้กับเครื่องมือเขียนโปรแกรมสมัยใหม่อย่าง clang
  • ผู้ใช้บางคนแสดงความผิดหวังที่การเผยแพร่ครั้งนี้ไม่รวมเวอร์ชัน Linux แต่ก็ยอมรับว่า iD(ผู้พัฒนาเกม) ยังคงยึดมั่นในหลักการของตน
  • การเผยแพร่ครั้งนี้ยังก่อให้เกิดการพูดคุยเกี่ยวกับธรรมเนียมการตั้งชื่อชนิดข้อมูลใน C/C++ ที่ใช้คำต่อท้ายเป็น "_t" ในซอร์สโค้ด Quake II
  • ผู้ใช้แนะนำให้ลอง Quake2Quest บน Oculus Quest 2 เพื่อสัมผัสประสบการณ์เกมสุดคลาสสิกอีกครั้ง