domingo, 29 de novembro de 2015

Convertendo jogos para uso com Paddles (5)

Pesquisa do(s) endereço(s) de memória que armazenam as coordenadas do personagem na tela

Recapitulando do artigo anterior, descobrimos que a função localizada no endereço 0x4f1c é responsável pela leitura dos comandos do jogador, seja via teclado ou via joystick. Também descobirmos que esta função recebe um parâmetro contido no registrador A.

Endereço: 0x4f1c

Função:   Le_controles

Entrada: A = 0xff -> Lê joystick 2 ou teclas 'Z' e 'C'
         A<> 0xff -> Lê joystick 1 ou setas direcionais

Retorno: A = Direção
         A = 
                7  1  3
                 \ | /
          (Z) 7 -- 0 -- 3 (C)
                 / | \      
                7  5  3
           
Agora precisamos rastrear os trechos do jogo que chamam e função 0x4f1c e ver o que acontece quando os valores 7 e 3 são retornados, o que corresponde aos comandos de 'esquerda' e 'direita' respectivamente.


Analisando a primeira chamada, a partir de 0x4cc3 temos que quando a chamada a 0x4f1c retorna 3, o endereço 0x4f03 é chamado

E quando a chamada a 0x4f1c retorna 7 o endereço 0x4f10 é chamado

Vamos então analisar estes dois endereços:


O que encontramos nesta chamada é um bom indício de que estamos perto, pois ambas as chamadas limitam o valor da variável contida em 0xd010. Para a direita o valor é limitado a 100 (0x64 em hexadecimal). Se o valor for menor do que 100 então o conteúdo da posição de memória em 0xd010 é incrementado. Já para a esquerda o valor é limitado a 10 (0x0A).

Em ambos os casos, caso a posição em oxd010 seja alterada a função salta para 0x4ddc. Vamos ver o que tem lá:


Em 0x4ddc acontece o seguinte:
- A posição em 0xd012 é incrementada com módulo 2. Isso talvez sirva para comandar o sprite do personagem conforme ele se movimenta, mas por enquanto não importa.
- A posição de memória em 0xd015 é zerada. Isso pode ser um flag ou algo assim.

Vamos voltar um pouco e retomar a pista do endereço de memória 0xd010 e ver onde este endereço é usado e como é usado:

Bom, este endereço é utilizado em 18 lugares! São dezesseis lugares a mais para pesquisar (dois nós já vimos). Isso fica para o próximo artigo.







Nenhum comentário: