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:
Postar um comentário