Разбираюсь с L03362 - там тоже что-то наверчено на goto и возможно циклах с exit.
Смысл в том, что процедура проверяет - если мы идём вверх/вниз и стоим НЕ на лестнице - то это исключение, и рисовать игровой экран уже не нужно, выходим на конец процедуры.
Но оператора return у нас нет, поэтому здесь возникает какая-то мешанина.
- - - Updated - - -
Окей, с процедурой L03362 всё получилось, но без ассемблера не обошлось.
И тут либо автор знал как записать оператор выхода (я пробовал в разных комбинациях, не нашёл), либо он сделал примерно так же как и я.
В любом случае, эта процедура теперь совпадает до байта.
Осталось 16 несовпадающих байт.Код:procedure L03362(A:char); begin ... {$C JMP L05114 } { Выход из процедуры } ... {$C L05114: } {метка для выхода из процедуры} end;
- - - Updated - - -
Нашёл все различия кроме одного байта в заголовочном блоке:
Comparing files STALKP.SAV and ..\STALK\STALK.GME
00000028: 0C 0E
Я не особо понимаю почему эта разница на два байта - 0x600E в оригинале и 0x600C у меня, подозреваю что как-то связано с глобальными переменными.
- - - Updated - - -
Переименовал:
L02332 -> RUKSEEK
L02574 -> ZVERX
- - - Updated - - -
В общем, этот этап работы - восстановление исходника игры на Паскале для дальнейшего портирования - можно считать практически завершённым.
Спасибо вам всем огромное за помощь и поддержку!




Ответить с цитированием