Preguntas frecuentes:
¿Qué?
Este proyecto tiene como objetivo ser un proyecto de ingeniería inversa de fuente completa de Metal Gear Solid Integral PC. Esto significa "convertir" todo el mgsi.exe en código fuente recompilable.
¿Cómo?
Al usar una DLL que carga el juego, es posible reemplazar las funciones en el tiempo de ejecución. El juego ya carga una DLL por su propia voluntad. Por lo tanto, esta DLL se puede reemplazar simplemente con un código que se hace cargo del punto de entrada de Winmain.
P.ej:
- MGSI.EXE comienza.
- Su función Winmain hace una carga de carga en Libeula.dll para mostrar el diálogo EULA.
- Dado que esta DLL ha sido reemplazada por nuestro código, ahora tenemos un código DLL cargado y ejecutado en el contenido de MGSI.EXE
- Desde aquí podemos ejecutar nuestro Winmain de reemplazo (sin la parte de carga Libeula.dll para evitar la recursión). Y enganchar todas las funciones que se han vuelto a implementar.
Entonces, por ejemplo:
void CC Actor_DestroyOnNextUpdate(Actor* pActor)
{
pActor->mFnUpdate = Actor_Destroy;
}
MGS_FUNC_IMPLEX(0x0040A3ED, Actor_DestroyOnNextUpdate, true);
Hará que la función en mgsi.exe en la dirección 0x0040a3ed llame a la función de reemplazo actor_destroyonNextUpdate. Esto permite la verificación de esta función única sin tener que volver a implementar todo hasta su punto de llamada.
¿Por qué?
- Conocimiento.
- Mods (conocer los formatos de archivo de juegos y los trabajos de adentro hacia afuera lo desbloqueará, agregando cualquier característica requerida será posible).
- Compatiblity/Fixes (las API heredadas se pueden eliminar/reemplazar, como usar DirectInput o DirectX7).
- PortAblity (cuando se complete puede puerto a Linux, OSX, Android, XYZ).
- Características (se puede restaurar la vibración del controlador, arreglando la emulación de gráficos PSX para que se resuelvan los problemas de lucha z/profundidad).
¿Qué necesito/cómo contribuyo?
- Una copia completa de Metal Gear Solid Integral PC.
- Conocimiento del ensamblaje C/C ++ y X86.
- Una copia de la última base de datos de IDA.
- Visual Studio (cambiará en el futuro cuando el juego esté completamente invertido y funciona independientemente, por ahora se requiere el MSVC ABI para que las funciones de reemplazo sean compatibles. Además, las ediciones comunitarias/libres están bien).
- Esté lo suficientemente loco como para asumir un proyecto como este.
Tener una idea de lo que se requiere, una buena primera tarea será elegir una función simple sin inversiones. Comprenda lo que hace y envía un PR para implementarlo.
¿Algún IRC/Discord, etc.?
Discord aquí: https://discord.gg/ttvhq8w