Tem algumas diferenças na documentação, mas a maioria dos mods da Versão Europe rodam na versão Americana!(1.03)ArTuRMV escreveu: ↑19 Jul 2019, 16:32Vamo que vamo derrubando as barreiras "impossíveis"! Uma dúvida, entendo que a versão europeia tem maior documentação, mas tem como fazer na americana também? Eu não curto muito ela por causa da tela fora de proporção a não ser que exista alguma correção que desconheço.
Pesquisa resultou em 2 ocorrências
Voltar para “[GTA-PS2] Modificando o código do jogo #1 | IDA Pro e Hex Swapping”
- 19 Jul 2019, 17:09
- Fórum: Tutoriais
- Tópico: [GTA-PS2] Modificando o código do jogo #1 | IDA Pro e Hex Swapping
- Respostas: 4
- Exibições: 4037
- Gênero:
Re: [GTA-PS2] Modificando o código do jogo (Avançado)
- 10 Jul 2019, 00:38
- Fórum: Tutoriais
- Tópico: [GTA-PS2] Modificando o código do jogo #1 | IDA Pro e Hex Swapping
- Respostas: 4
- Exibições: 4037
- Gênero:
[GTA-PS2] Modificando o código do jogo #1 | IDA Pro e Hex Swapping
1. Um mar de possibilidades...
Sabemos que a barreira dos veículos caiu, isso foi interessante, até teve sua repercussão. Mas isto aqui, meus amigos, é o suprassumo do modding nos games, é aqui onde os maiores mods nascem, os mais complexos, inovadores e profundos, nem sempre os mais criativos, mas de onde saem os fixes mais importantes...sim, estou me referindo ao código do jogo, e usamos os Plug-ins .asi para implementar novas funções e corrigí-lo. Então eu venho aqui mais uma vez, apresentar este lindo e único tutorial sobre como criar arquivos .asi para jogos de Playstation 2.
2. Chega de enrolação, ao trabalho!
Para explorar o maravilhoso mundo de crashes e bugs modificações avançadas, nós deveremos ter alguns arquivos e programas de prontidão, eles serão indispensáveis para o andamento do tutorial, então irei citá-los ao longo da explicação para que baixe. Primeiro de tudo, tenha a .iso do GTA SA Europe já baixada (O link está no índice de tutoriais, na primeira linha do post), o .idb da versão de PS2 você encontra aqui: GTA SA Europe IDB. Mas o que diabos é um idb? IDBs são bases de dados que podem ser comentadas e documentadas através do Interactive Disassembler, ou IDA Pro, programa que iremos usar para encontrar funções e códigos a se alterar com nossos .asi. Baixe o IDA Pro nesse tutorial (ignore o tutorial, apenas baixe o programa, nesse caso, seu uso será um pouco diferente).
Abra o ida, clique em "Ok", e depois em "New", após isso, selecione o idb que você baixou e abra, você irá se deparar com essa tela:
Para melhorar um pouco a visualização, clique com o botão direito do mouse qualquer parte do degradê azul e selecione "Text View".
2.1. Entendendo MIPS
Aposto uma caneca de café que você deve estar olhando para a tela principal do IDA e se perguntando: Mas que p**** é essa?! Então, agora vem a parte chata, você vai ter que começar a entender o mínimo de MIPS para poder criar .asi's de ps2. A Arquitetura MIPS foi desenvolvida para os processadores do tipo RISC e está presente tanto no Playstation 2, quanto no saudoso Playstation 1. A partir daí ela criou uma versão customizada do MIPS para os seus consoles, você pode aprender sobre ela nesse pdf aqui e aqui também.
2.2. Utilizando o IDA Pro
Agora que você já um mestre da programação em mips, iremos entender como procurar funções no IDA para que sejam modificadas, e aqui iremos usar como exemplo o MixSets, que comecei a desenvolver a pouco tempo, então veio a calhar. Primeiro de tudo, foque no que você deseja fazer, algo simples, como desativar um efeito ou função do jogo. Aqui tentarei desativar o efeito de calor presente no game, como ele é um postfx, possivelmente o principal do jogo, pesquisarei por "PostEffects" (Lembre-se de marcar "Find all occurences")
Terminada a pesquisa, você irá se deparar com vários resultados, até com nomes parecidos, mas se prestar atenção, sempre vai ter um que irá te orientar.
Selecionei aquele em azul, mas se você prestar atenção, o comando que chama ele é um "jal", ou seja, lá não está a função propriamente dita, mas basta clicar no nome "CPostEffects::Render(void)" no IDA View-A que você será redirecionado a função correta, ou algum lugar perto dela.
Como eu quero desabilitar uma função, você, que leu os pdfs que passei mais acima já deve ter uma noção do que precisarei fazer.
No endereço 00516E70 eu devo usar um comando "jr ra"(que retorna) e no 00516E74, eu irei usar um comando "nop", para desativar a função.
Anote bem esses endereços e os comandos, serão importantes.
2.3. Montando o plug-in .mcl
Vamos falar um pouco do funcionamento dessa "gambiarra". Os plugin-ins .mcl usam o sistema de Hex Swapping, ou seja, basicamente ele determina o tamanho do dado a ser trocado (caractere extended), a posição (endereço de memória) e o comando, e então o PS2 Code Injector faz a troca dos comandos originais do game pelos novos, especificados no plug-in, isso explica o fato de não ser possível criar mods complexos como .asi, não há como adicionar trechos de código, apenas substituir.
Com o notepad++ aberto, vamos cuidar da organização inicial do mod.
Clique na aba "Language", "I", e por último, "INI File". Isto deixará a organização mais fácil e aceitável aos usuários.
Agora vamos lá:
Comigo ficou assim:
Percebeu que eu substituí o primeiro caractere "0" do endereço de memória por um "2"? Então, vamos falar sobre isso:
O padrão "extended" é um comando que facilita a identificação de tipo e tamanho de dados a serem substituídos, segue:
Se o valor do seu comando tiver 1 byte de comprimento (valor de 0-255 (0-FF)) ... use apenas um endereço, você deve colocar 0 no primeiro dígito do endereço.
Se o valor do seu comando tiver 2 bytes (valor de 0-65535 (0-FFFF)) ... usa dois endereços, você deve colocar 1 para o primeiro dígito do endereço.
Se o valor do seu comando tiver 1 byte de comprimento (valor de 0-4294967295 (0-FFFFFFFF)) ... usa 4 endereços, você deve colocar 2 para o primeiro dígito do endereço.
Com byte, short e word é quase o mesmo, mas, para o primeiro dígito, você deve usar 0 ou 2.
Se o valor do seu comando é de 1 byte (valor de 0-255 (0-FF)) ... use apenas um endereço, você deve colocar o byte entre o endereço e o valor.
Se o valor do seu comando é de 2 bytes (valor de 0-65535 (0-FFFF)) ... usa dois endereços, você deve colocar um curto entre o endereço e o valor.
Se o valor do seu comando tiver 1 byte de comprimento (valor de 0-4294967295 (0-FFFFFFFF)) ... usa 4 endereços, você deve colocar uma palavra entre o endereço e o valor.
Note que eu coloquei os endereços de memória abaixo da função, ali diremos ao PS2 ASI Injector onde modificar o comando, mas onde estão os comandos? Agora nós precisamos convertê-los para padrões em hex, e para isso usaremos o MIPS Mini Assembler, programinha prático e rápido. Agora simplesmente digite os comandos e cole a direita dos endereços de memória:
Código ficou assim:
Terminado, apenas salve com o formato .mcl, no meu caso, "ps2.sa.mixsets.mcl" e instale via PS2 Code Injector.
Sabemos que a barreira dos veículos caiu, isso foi interessante, até teve sua repercussão. Mas isto aqui, meus amigos, é o suprassumo do modding nos games, é aqui onde os maiores mods nascem, os mais complexos, inovadores e profundos, nem sempre os mais criativos, mas de onde saem os fixes mais importantes...sim, estou me referindo ao código do jogo, e usamos os Plug-ins .asi para implementar novas funções e corrigí-lo. Então eu venho aqui mais uma vez, apresentar este lindo e único tutorial sobre como criar arquivos .asi para jogos de Playstation 2.
2. Chega de enrolação, ao trabalho!
Para explorar o maravilhoso mundo de crashes e bugs modificações avançadas, nós deveremos ter alguns arquivos e programas de prontidão, eles serão indispensáveis para o andamento do tutorial, então irei citá-los ao longo da explicação para que baixe. Primeiro de tudo, tenha a .iso do GTA SA Europe já baixada (O link está no índice de tutoriais, na primeira linha do post), o .idb da versão de PS2 você encontra aqui: GTA SA Europe IDB. Mas o que diabos é um idb? IDBs são bases de dados que podem ser comentadas e documentadas através do Interactive Disassembler, ou IDA Pro, programa que iremos usar para encontrar funções e códigos a se alterar com nossos .asi. Baixe o IDA Pro nesse tutorial (ignore o tutorial, apenas baixe o programa, nesse caso, seu uso será um pouco diferente).
Abra o ida, clique em "Ok", e depois em "New", após isso, selecione o idb que você baixou e abra, você irá se deparar com essa tela:
Para melhorar um pouco a visualização, clique com o botão direito do mouse qualquer parte do degradê azul e selecione "Text View".
2.1. Entendendo MIPS
Aposto uma caneca de café que você deve estar olhando para a tela principal do IDA e se perguntando: Mas que p**** é essa?! Então, agora vem a parte chata, você vai ter que começar a entender o mínimo de MIPS para poder criar .asi's de ps2. A Arquitetura MIPS foi desenvolvida para os processadores do tipo RISC e está presente tanto no Playstation 2, quanto no saudoso Playstation 1. A partir daí ela criou uma versão customizada do MIPS para os seus consoles, você pode aprender sobre ela nesse pdf aqui e aqui também.
2.2. Utilizando o IDA Pro
Agora que você já um mestre da programação em mips, iremos entender como procurar funções no IDA para que sejam modificadas, e aqui iremos usar como exemplo o MixSets, que comecei a desenvolver a pouco tempo, então veio a calhar. Primeiro de tudo, foque no que você deseja fazer, algo simples, como desativar um efeito ou função do jogo. Aqui tentarei desativar o efeito de calor presente no game, como ele é um postfx, possivelmente o principal do jogo, pesquisarei por "PostEffects" (Lembre-se de marcar "Find all occurences")
Terminada a pesquisa, você irá se deparar com vários resultados, até com nomes parecidos, mas se prestar atenção, sempre vai ter um que irá te orientar.
Selecionei aquele em azul, mas se você prestar atenção, o comando que chama ele é um "jal", ou seja, lá não está a função propriamente dita, mas basta clicar no nome "CPostEffects::Render(void)" no IDA View-A que você será redirecionado a função correta, ou algum lugar perto dela.
Como eu quero desabilitar uma função, você, que leu os pdfs que passei mais acima já deve ter uma noção do que precisarei fazer.
No endereço 00516E70 eu devo usar um comando "jr ra"(que retorna) e no 00516E74, eu irei usar um comando "nop", para desativar a função.
Anote bem esses endereços e os comandos, serão importantes.
2.3. Montando o plug-in .mcl
Vamos falar um pouco do funcionamento dessa "gambiarra". Os plugin-ins .mcl usam o sistema de Hex Swapping, ou seja, basicamente ele determina o tamanho do dado a ser trocado (caractere extended), a posição (endereço de memória) e o comando, e então o PS2 Code Injector faz a troca dos comandos originais do game pelos novos, especificados no plug-in, isso explica o fato de não ser possível criar mods complexos como .asi, não há como adicionar trechos de código, apenas substituir.
Com o notepad++ aberto, vamos cuidar da organização inicial do mod.
Clique na aba "Language", "I", e por último, "INI File". Isto deixará a organização mais fácil e aceitável aos usuários.
Agora vamos lá:
Código: Selecionar tudo
#nomedomod
#autor, versão
[função]
código
código
Código: Selecionar tudo
#PS2 MixSets v 1.0 for GTA: San Andreas
#Created by Daniel69
[No Heat Effect]
20516e70
20516e74
O padrão "extended" é um comando que facilita a identificação de tipo e tamanho de dados a serem substituídos, segue:
Se o valor do seu comando tiver 1 byte de comprimento (valor de 0-255 (0-FF)) ... use apenas um endereço, você deve colocar 0 no primeiro dígito do endereço.
Se o valor do seu comando tiver 2 bytes (valor de 0-65535 (0-FFFF)) ... usa dois endereços, você deve colocar 1 para o primeiro dígito do endereço.
Se o valor do seu comando tiver 1 byte de comprimento (valor de 0-4294967295 (0-FFFFFFFF)) ... usa 4 endereços, você deve colocar 2 para o primeiro dígito do endereço.
Com byte, short e word é quase o mesmo, mas, para o primeiro dígito, você deve usar 0 ou 2.
Se o valor do seu comando é de 1 byte (valor de 0-255 (0-FF)) ... use apenas um endereço, você deve colocar o byte entre o endereço e o valor.
Se o valor do seu comando é de 2 bytes (valor de 0-65535 (0-FFFF)) ... usa dois endereços, você deve colocar um curto entre o endereço e o valor.
Se o valor do seu comando tiver 1 byte de comprimento (valor de 0-4294967295 (0-FFFFFFFF)) ... usa 4 endereços, você deve colocar uma palavra entre o endereço e o valor.
Note que eu coloquei os endereços de memória abaixo da função, ali diremos ao PS2 ASI Injector onde modificar o comando, mas onde estão os comandos? Agora nós precisamos convertê-los para padrões em hex, e para isso usaremos o MIPS Mini Assembler, programinha prático e rápido. Agora simplesmente digite os comandos e cole a direita dos endereços de memória:
Código ficou assim:
Código: Selecionar tudo
#PS2 MixSets v 1.0 for GTA: San Andreas
#Created by Daniel69
[No Heat Effect]
20516e70 03e00008
20516e74 00000000