За вчера-сегодня исправил несколько ошибок.
Написал программу для патчинга строк (на C#) - по сути та работа что была проделана Oleg H. над бинарным файлом, но я её делаю над ассемблерным текстом.
Вообще конечно я себе сильно поднасрал тем что стал разбирать уже патченый файл игры, но что уж теперь сделаешь.
На данный момент между .SAV-файлом, полученным из Паскаля + патчинг строк и файлом STALK.GME - 48 различающихся байт.
В основном это инстркции NOP вставленные там где я не понял почему так.
Верхняя граница памяти программы отличается на 2 байта - пока не понял почему.
В процедуре L03362 (переход на этах вверх/вниз и отрисовк игрового поля) - идут странные манипуляции с регистром R4, как будто в нём запоминают на сколько нужно подобрать стек в L04170, но в R4 всегда ноль. Я пока не понял что вызывает такую обработку.
Перед выходом (exit) из игрового цикла всегда делается сброс стека через MOV 050406, SP - ошчушчение что это генерирует компилятор (но не тот что есть у меня), хотя может это и ассемблерные вставки.
Кое-где есть недостижимый код - как пример, L31036, L31134, L31416 - всё это также около команды exit. Возможно, ошибка в компиляторе, тот что есть у меня такого не делает.
В общем, текущий вариант это "почти готово", но я пока не пробовал его запускать и проверять в деле.
Собираюсь ещё раз пройтись по всем местам отличий - то есть сделать третий проход.
Напомню, паскалевский текст здесь - https://github.com/nzeemin/uknc-vari...CAL/STALK1.PAS




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