quinta-feira, 12 de setembro de 2013

Problema com POKE no Bionic Commando

Para tempo infinito no Bionic Commando 128K, há dois diferentes POKEs sugeridos no The Tipshop.


Desses dois, o que parece funcionar é POKE 34610,0. Disassembly deste trecho do programa revela:

   34607   LD HL,35750  ; HL aponta para o contador de tempo.
   34610   DEC (HL)     ; Diminui o contador de tempo.
   34611   JR Z,34630   ; Salta se o cotador ficou zerado. 

O que o POKE faz é trocar a instrução que diminui o contador de tempo em uma unidade - DEC (HL) - por NOP, que nada faz. Eu prefiro substituir por OR (HL), pois garante que o flag Z fique sempre com valor 0; isto é, uso POKE 34610,182.

Este POKE tem um efeito colateral que deixa todos os inimigos congelados e o jogador fica imune. Investiguei no debugger do emulador Fuse os trechos do programa que fazem leitura ou gravação no endereço do contador (35750).

O trecho seguinte faz a inicialização do contador com o valor 202:
   34783   LD A,202
   34785   LD (35750),A
e o seguinte, aparentemente é o responsável por paralisar os inimigos:
   48403   LD A,(35750)
   48406   CP 202
   48408   RET NC

Enquanto o contador for igual a 202, os códigos depois do endereço 48408 não são executados devido à instrução RET NC.

Uma aparente solução seria desativar a instrução RET NC com POKE 48408,0. Ao fazer isto, os inimigos moviam-se, mas a imunidade continuava. Pelo menos até onde pude investigar, não deu para conseguir POKEs para providenciar somente tempo infinito.

Nenhum comentário:

Postar um comentário

Seu comentário é bem vindo, mas peço que use este espaço adequadamente.