(คุณอาจต้องการทราบเกี่ยวกับคำว่า"การปะของลิง" หรือ "การต่อยเป็ด"หากไม่มีสิ่งใดนอกจากภาพจิตที่มีอารมณ์ขัน)
นอกเหนือจากนั้น: หากเป้าหมายของคุณคือการลดเวลาการทำซ้ำสำหรับการเปลี่ยนแปลง "พฤติกรรม" ลองใช้แนวทางบางอย่างที่จะทำให้คุณได้รับประโยชน์สูงสุดจากที่นั่น
(นี่จะออกไปสักหน่อยแทนเจนต์ แต่ฉันสัญญาว่ามันจะกลับมา!)
- เริ่มต้นด้วยข้อมูลและเริ่มต้นเล็ก ๆ : โหลดซ้ำที่ขอบเขต ("ระดับ" หรือสิ่งที่คล้ายกัน) จากนั้นใช้วิธีการของคุณในการใช้งานฟังก์ชั่นระบบปฏิบัติการเพื่อรับการแจ้งเตือนการเปลี่ยนแปลงไฟล์หรือโพลเป็นประจำ
- (สำหรับคะแนนโบนัสและเวลาในการโหลดลดลง (อีกครั้งลดเวลาการทำซ้ำ) ดูในการอบข้อมูล )
- สคริปต์เป็นข้อมูลและอนุญาตให้คุณทำซ้ำพฤติกรรม หากคุณใช้ภาษาสคริปต์ตอนนี้คุณมีการแจ้งเตือน / ความสามารถในการโหลดสคริปต์เหล่านั้นตีความหรือเรียบเรียงใหม่ นอกจากนี้คุณยังสามารถขอล่ามของคุณไปที่คอนโซลในเกมซ็อกเก็ตเครือข่ายหรือสิ่งที่คล้ายกันเพื่อเพิ่มความยืดหยุ่นของรันไทม์
- โค้ดอาจเป็นข้อมูลด้วยเช่นกันคอมไพเลอร์ของคุณอาจรองรับการซ้อนทับไลบรารีที่ใช้ร่วมกัน DLLs หรือสิ่งที่คล้ายกัน ดังนั้นตอนนี้คุณสามารถเลือกเวลา "ปลอดภัย" เพื่อยกเลิกการโหลดและโหลดโอเวอร์เลย์หรือ DLL ไม่ว่าจะด้วยตนเองหรือโดยอัตโนมัติ คำตอบอื่น ๆ มีรายละเอียดที่นี่ โปรดทราบว่าตัวแปรบางอย่างอาจทำให้ยุ่งเหยิงกับการเข้ารหัสลายเซ็นต์บิต, NX (ไม่มีการดำเนินการ) บิตหรือกลไกความปลอดภัยที่คล้ายกัน
- พิจารณาลึก versioned บันทึกโหลด /ระบบ หากคุณสามารถบันทึกและกู้คืนสถานะของคุณได้อย่างมั่นคงแม้ในขณะที่ต้องเผชิญกับการเปลี่ยนแปลงของรหัสคุณสามารถปิดเกมของคุณและเริ่มต้นใหม่ด้วยตรรกะใหม่ ณ จุดเดียวกัน พูดง่ายกว่าทำเสร็จ แต่สามารถทำได้และทำได้ง่ายกว่าและพกพาง่ายกว่าเปลี่ยนหน่วยความจำเพื่อเปลี่ยนคำแนะนำ
- ทั้งนี้ขึ้นอยู่กับโครงสร้างและชะตาของเกมของคุณคุณอาจจะสามารถที่จะทำบันทึกและการเล่น หากการบันทึกนั้นอยู่เหนือ "คำสั่งเกม" (ลองนึกถึงเกมไพ่ตัวอย่าง) คุณสามารถเปลี่ยนรหัสการแสดงผลทั้งหมดที่คุณต้องการและเล่นการบันทึกซ้ำเพื่อดูการเปลี่ยนแปลงของคุณ สำหรับบางเกมนี่เป็น "ง่าย" เหมือนกับการบันทึกพารามิเตอร์เริ่มต้นบางอย่าง (เช่นการสุ่มเมล็ด) จากนั้นผู้ใช้จะดำเนินการ สำหรับบางคนมันมีความซับซ้อนมากขึ้น
- ทำให้ความพยายามที่จะลดเวลาในการรวบรวม เมื่อใช้ร่วมกับระบบการบันทึก / โหลดหรือการบันทึก / การเล่นข้างต้นหรือแม้กระทั่งการซ้อนทับหรือ DLLs สิ่งนี้อาจลดการตอบสนองของคุณมากกว่าสิ่งอื่นใด
ประเด็นเหล่านี้มีประโยชน์หลายประการแม้ว่าคุณจะไม่สามารถโหลดซ้ำข้อมูลหรือรหัสได้
สนับสนุนเกร็ดเล็กเกร็ดน้อย:
บนพีซี RTS ขนาดใหญ่ (ทีม 120 คนส่วนใหญ่เป็น C ++) มีระบบการบันทึกสถานะที่ล้ำลึกอย่างไม่น่าเชื่อที่ใช้สำหรับวัตถุประสงค์อย่างน้อยสามประการ:
- บันทึก "ตื้น" ไม่ได้ถูกป้อนลงในดิสก์ แต่เป็นเครื่องมือ CRC เพื่อให้แน่ใจว่าเกมแบบผู้เล่นหลายคนยังคงอยู่ในการจำลองขั้นตอนล็อคหนึ่งซีอาร์ซีทุก 10-30 เฟรม; สิ่งนี้ทำให้มั่นใจได้ว่าไม่มีใครโกงและจับข้อผิดพลาด desync ไม่กี่เฟรมในภายหลัง
- หากเกิดข้อผิดพลาด desync แบบผู้เล่นหลายคนการบันทึกที่มีความลึกเป็นพิเศษจะดำเนินการทุกเฟรมและป้อนอีกครั้งไปยังโปรแกรม CRC แต่คราวนี้เอ็นจิ้น CRC จะสร้าง CRC จำนวนมากแต่ละอันสำหรับแบตช์ขนาดเล็ก ในลักษณะนี้สามารถบอกคุณได้อย่างชัดเจนว่าส่วนใดของรัฐที่เริ่มแตกต่างจากเฟรมสุดท้าย เราพบความแตกต่าง "โหมดจุดลอยตัวเริ่มต้น" ที่น่ารังเกียจระหว่างโปรเซสเซอร์ AMD และ Intel ที่ใช้สิ่งนี้
- การบันทึกความลึกปกติอาจไม่ได้รับการบันทึกเช่นกรอบภาพเคลื่อนไหวที่แน่นอนที่หน่วยของคุณกำลังเล่น แต่จะได้รับตำแหน่งสุขภาพ ฯลฯ ของหน่วยทั้งหมดของคุณช่วยให้คุณสามารถบันทึกและเล่นต่อได้ตลอดเวลาในระหว่างการเล่นเกม
ฉันใช้บันทึก / เล่นที่กำหนดไว้แล้วในเกมการ์ด C ++ และ Lua สำหรับ DS เราเชื่อมต่อกับ API ที่เราออกแบบมาสำหรับ AI (ด้าน C ++) และบันทึกการกระทำของผู้ใช้และ AI ทั้งหมด เราใช้ฟังก์ชั่นนี้ในเกม (เพื่อให้เล่นซ้ำสำหรับผู้เล่น) แต่ยังเพื่อวินิจฉัยปัญหา: เมื่อมีความผิดพลาดหรือพฤติกรรมแปลก ๆ สิ่งที่เราต้องทำก็คือรับไฟล์บันทึกและเล่นในบิลด์ debug
ฉันยังได้ใช้การซ้อนทับมากกว่าสองสามครั้งและเรารวมเข้ากับระบบ "สร้างไดเรกทอรีนี้โดยอัตโนมัติและอัปโหลดเนื้อหาใหม่ไปยังอุปกรณ์พกพา" สิ่งที่เราต้องทำคือปล่อยให้ cutscene / level / อะไรก็ตามกลับมาและไม่เพียง แต่ข้อมูลใหม่ (sprites, เลย์เอาต์เลเวล, ฯลฯ ) จะโหลด แต่ยังมีโค้ดใหม่ในโอเวอร์เลย์ด้วย โชคไม่ดีที่การพกพาอุปกรณ์พกพารุ่นใหม่ ๆ มีจำนวนมากขึ้นเนื่องจากกลไกการป้องกันการคัดลอกและการป้องกันการแฮ็กที่ใช้รหัสเป็นพิเศษ เรายังคงทำเพื่อ lua สคริปต์แม้ว่า
ท้ายสุด แต่ไม่ท้ายสุด: คุณสามารถ (และในสถานการณ์ที่เฉพาะเจาะจงเล็ก ๆ น้อย ๆ ) ฉันสามารถเจาะรูเป็ดได้โดยการสั่งการ opcodes โดยตรง วิธีนี้ใช้ได้ผลดีที่สุดถ้าคุณอยู่บนแพลตฟอร์มคงที่และคอมไพเลอร์ แต่เนื่องจากเกือบจะไม่สามารถทำให้เกิดข้อผิดพลาดได้มากและถูก จำกัด ในสิ่งที่คุณสามารถทำได้สำเร็จอย่างรวดเร็ว มันจะสอนคุณเกี่ยวกับสถาปัตยกรรมชุดคำสั่งของคุณอย่างรวดเร็ว