Certain memory areas are overwritten due to interrupts activated at the wrong time. Because of this, the location of an idol is always lost (thus making the game unfinishable) and the game may also crash randomly. The following patch fixes this problem:
org $e2ca
call $ff99 ; POKE 58059,153: POKE 58060,255
org $f908
call $ff99 ; POKE 63753,153: POKE 63754,255
org $ff99
ld iy,$5c3a ; POKE 65433,253: POKE 65434,33: POKE 65435,58: POKE 65436,92
call $03b5 ; POKE 65437,205: POKE 65438,181: POKE 65439,3
di ; POKE 65440,243
ret ; POKE 65441,201
Enemies on screen are stored in a data table starting at address $e470, using 15 bytes per enemy, for a maximum of 5 enemies. However the current room number is stored at address $e4ba, which corresponds to the last byte of this table. If there are 5 enemies on screen (which is more likely to happen at the last room), the current room number is replaced with data about the 5th enemy. When it happens, the screen gets corrupted and the player reappears at another room. This problem is solved storing the current room number at address $e4bb instead. The following patch fixes this problem:
org $eabd
defb $bb ; POKE 60093,187
org $eae7
defb $bb ; POKE 60135,187
org $eafc
defb $bb ; POKE 60156,187
org $eb3a
defb $bb ; POKE 60218,187
org $ed08
defb $bb ; POKE 60680,187
org $ed69
defb $bb ; POKE 60777,187
org $ed71
defb $bb ; POKE 60785,187
org $f108
defb $bb ; POKE 61704,187
org $f59b
defb $bb ; POKE 62875,187
org $f76f
defb $bb ; POKE 63343,187
org $f806
defb $bb ; POKE 63494,187
org $f818
defb $bb ; POKE 63512,187
org $fa28
defb $bb ; POKE 64040,187
org $fa40
defb $bb ; POKE 64064,187
org $faf4
defb $bb ; POKE 64244,187
org $fb2c
defb $bb ; POKE 64300,187
org $fb3e
defb $bb ; POKE 64318,187
org $fb44
defb $bb ; POKE 64324,187
org $fb5a
defb $bb ; POKE 64346,187
org $fd78
defb $bb ; POKE 64888,187
org $fdcd
defb $bb ; POKE 64973,187
org $fddd
defb $bb ; POKE 64989,187