- 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 ความคิดเห็น
ความคิดเห็นบน Hacker News
"_t"ในซอร์สโค้ด Quake II