Гасит лодку патч по адресу #5CED, который срабатывает при попадании предмета в место использования, если только в #E3DC находится #FF (это для ключа зажигания признак отсутствия в месте использования, в частности, когда использованный ключ исчезает с карты). При использовании деталей плавсредства, даже после срабатывания патча, очередная разновидность лодки будет включена другими процедурами. Но патч срабатывает при использовании вообще любых предметов, и вот почему:
Байт 0 описателя предмета для многих предметов сразу равен FF. Для ключа, во всяком случае, так вообще почти всегда - пока предмет не замечен на своем месте, там сидит FF, и сменяется оно на другое значение только на короткое время, в момент отработки действий при использовании предмета.
При попадании в место ниже IX указывает на описатель используемого предмета (для ключа - E3DC), и по адресу IX временно находится байт, отличный от FF:
Код:
EE33 LD A,FF ; предмет использован, и в байт 0 описателя снова записывается FF
EE35 CALL 5CED ; вызов патча, подменяющий LD (IX),A
...
5CED LD (IX),A ; команда, которую заменил вызов патча.
5CF0 LD A,(E3DC) ; признак наличия ключа в нужном месте
5CF3 CP FF ; ключ в точке использования?
5CF5 RET NZ ; RET не сработает, т.к. в E3DC либо еще FF, либо уже снова FF
5CF6 LD HL,E488
...
Если наоборот - поймать момент, когда там не FF, иначе говоря, если проверку на использование ключа перенести до стирания признака использования, а RET NZ заменить на RET Z, патч сработает только однажды - для ключа.
[свернуть]