คำถามที่พบบ่อย:
อะไร
โครงการนี้มีจุดมุ่งหมายที่จะเป็นโครงการวิศวกรรมย้อนกลับแบบเต็มรูปแบบของ Metal Gear Solid Integral PC ซึ่งหมายถึง "แปลง" mgsi.exe ทั้งหมดเป็นซอร์สโค้ดที่คอมไพล์ได้
ยังไง?
โดยใช้ DLL ซึ่งเกมโหลดเป็นไปได้ที่จะแทนที่ฟังก์ชั่นในเวลาทำงาน เกมดังกล่าวโหลด DLL ของเจตจำนงเสรีของตัวเองแล้ว ดังนั้น DLL นี้สามารถแทนที่ด้วยรหัสซึ่งใช้เวลาเหนือจุดเข้าร่วม Winmain
เช่น:
- mgsi.exe เริ่มต้นขึ้น
- ฟังก์ชั่น winmain ของมันทำ loadlibrary บน libeula.dll เพื่อแสดงกล่องโต้ตอบ EULA
- เนื่องจาก DLL นี้ถูกแทนที่ด้วยรหัสของเราตอนนี้เราจึงมี DLL โหลดและเรียกใช้รหัสในเนื้อหาของ mgsi.exe
- จากที่นี่เราสามารถดำเนินการ winmain ทดแทนของเรา (โดยไม่ต้อง libeula.dll ส่วนโหลดชิ้นส่วนเพื่อหลีกเลี่ยงการเรียกซ้ำ) และเชื่อมต่อฟังก์ชั่นทั้งหมดที่ได้รับการปรับปรุงใหม่
ตัวอย่างเช่น:
void CC Actor_DestroyOnNextUpdate(Actor* pActor)
{
pActor->mFnUpdate = Actor_Destroy;
}
MGS_FUNC_IMPLEX(0x0040A3ED, Actor_DestroyOnNextUpdate, true);
จะทำให้ฟังก์ชั่นใน mgsi.exe ที่ที่อยู่ 0x0040a3ed เพื่อเรียกฟังก์ชั่นการแทนที่ actor_destroyonnextupdate สิ่งนี้จะช่วยให้การตรวจสอบฟังก์ชั่นเดียวนี้โดยไม่ต้องทำการปรับปรุงทุกอย่างจนถึงจุดเรียก
ทำไม
- ความรู้.
- mods (การรู้รูปแบบไฟล์เกมและการทำงานภายในจะปลดล็อคสิ่งนี้การเพิ่มคุณสมบัติที่จำเป็นใด ๆ จะเป็นไปได้)
- COMPATIBLITY/FIXES (LEGACY API สามารถลบ/แทนที่ได้เช่นการใช้ DirectInput หรือ DirectX7)
- PORTABLITY (เมื่อเสร็จสมบูรณ์คุณสามารถพอร์ตไปยัง Linux, OSX, Android, XYZ)
- คุณสมบัติ (การสั่นสะเทือนของคอนโทรลเลอร์สามารถกู้คืนได้แก้ไขการจำลองกราฟิก PSX เพื่อแก้ไขปัญหา Z-fight/ความลึกได้รับการแก้ไข)
ฉันต้องการอะไร/ฉันจะมีส่วนร่วมได้อย่างไร?
- สำเนาเต็มรูปแบบของ Metal Gear Solid Integral PC
- ความรู้เกี่ยวกับการประกอบ C/C ++ และ X86
- สำเนาฐานข้อมูล IDA ล่าสุด
- Visual Studio (จะเปลี่ยนไปในอนาคตเมื่อเกมกลับรายการอย่างเต็มที่และทำงานแบบสแตนด์อโลนตอนนี้จำเป็นต้องใช้ MSVC ABI สำหรับฟังก์ชั่นการเปลี่ยนที่เข้ากันได้
- บ้าพอที่จะทำโครงการแบบนี้
เพื่อให้รู้สึกถึงสิ่งที่ต้องการงานแรกที่ดีคือการเลือกฟังก์ชั่นที่ไม่ได้รับการรับรองอย่างง่าย เข้าใจว่ามันทำอะไรและส่งใน PR เพื่อนำไปใช้
irc/discord ฯลฯ ?
Discord ที่นี่: https://discord.gg/ttvhq8w