PERGUNTAS FREQUENTES:
O que?
Este projeto pretende ser um projeto de engenharia reversa de fonte completa do Metal Gear Solid Integral PC. Isso significa "converter" todo o mgsi.exe em código fonte recompilável.
Como?
Usando uma DLL que o jogo carrega, é possível substituir as funções no tempo de execução. O jogo já carrega uma DLL por vontade própria. Portanto, essa DLL pode ser simplesmente substituída por código que assume o ponto de entrada WinMain.
Por exemplo:
- Mgsi.exe inicia.
- Sua função WinMain faz uma biblioteca de carga no Libeula.dll para exibir a caixa de diálogo EULA.
- Como esta DLL foi substituída pelo nosso código, agora temos um código de DLL e executando no conteúdo de mgsi.exe
- A partir daqui, podemos executar nossa reposição Winmain (sem a parte de carregamento da libeula.dll para evitar a recursão). E conectar todas as funções que foram reimplementadas.
Por exemplo:
void CC Actor_DestroyOnNextUpdate(Actor* pActor)
{
pActor->mFnUpdate = Actor_Destroy;
}
MGS_FUNC_IMPLEX(0x0040A3ED, Actor_DestroyOnNextUpdate, true);
Fará com que a função no mgsi.exe no endereço 0x0040a3ed para chamar a função de substituição ator_destroyonnExtUpdate. Isso permite a verificação dessa função única sem precisar reimplementar tudo até o seu ponto de chamada.
Por que?
- Conhecimento.
- Os mods (sabendo que os formatos de arquivo de jogos e o funcionamento de dentro para fora serão desbloqueados, adicionando os recursos necessários serão possíveis).
- Compatiblity/FIXES (as APIs do Legacy podem ser removidas/substituídas, como o uso do DirectInput ou DirectX7).
- Portabily (quando concluído, você pode portar para Linux, OSX, Android, XYZ).
- Recursos (a vibração do controlador pode ser restaurada, corrigindo a emulação de gráficos PSX para que os problemas de combate/profundidade sejam resolvidos).
O que eu preciso/como faço para contribuir?
- Uma cópia completa do Metal Gear Solid Integral PC.
- Conhecimento da montagem C/C ++ e X86.
- Uma cópia do banco de dados IDA mais recente.
- O Visual Studio (mudará no futuro quando o jogo for totalmente revertido e funciona independente, pois agora o MSVC ABI é necessário para que as funções de reposição sejam compatíveis. Adicionalmente as edições da comunidade/gratuitas são boas).
- Seja louco o suficiente para assumir um projeto como este.
Para ter uma ideia do que é necessário, uma boa primeira tarefa será escolher uma função simples não revertida. Entenda o que faz e envie um PR para implementá -lo.
Algum IRC/Discord etc?
Discord aqui: https://discord.gg/ttvhq8w