nzeemin.github.io / Сталкер/Зона/Пикник

Оригинальная игра

Запустить в онлайн-эмуляторе UKNCBTL

Это игра в жанре «рогалик» (Rogue-like), бродилка по подземельям, по мотивам повести Стругацких «Пикник на обочине». Игра называлась «Зона», «Сталкер» или «Пикник» – файл игры назывался STALK.SAV, PIKNIK.SAV или ZONA.SAV, и предназначался для советских PDP11-совместимых машин – таких как ДВК и УКНЦ.

По-видимому, игра создана в конце 1980-х, автор – неизвестный программист из Ульяновска – первоначально программа выводила копирайт:
*** (С)УЛЬЯНОВСК УЛПИ "ГОЛОГРАФИЯ"***

На основе оригинала было создано множество вариаций игры, чаще всего они различались только выводимыми сообщениями – файл игры редактировался бинарным редактором DESS, логика игры, по-видимому, оставалась почти неизменной.

Дизасм в MACRO-11

За пару недель я получил дизассемблированный исходник игры на MACRO-11, который при компиляции давал исполнимый файл, совпадающий до байта с оригиналом. С самого начала было понятно, что оригинал написан на Паскале ДВК (судя по блоку сообщений Паскаля). Я определил начало паскалевских процедур/функций, отделил данные от кода, определил назначение части переменных игры. Эта работа была проделана с середины марта по начало апреля 2021 года.

Восстановление кода на Паскале

Используя код на MACRO-11 как основу, я стал восстанавливать код на Паскале ДВК (этот вариант Паскаля основан на OMSI Pascal). В результате компиляции с Паскаля, получается файл на MACRO-11, который затем компилируется и линкуется обычными средствами RT-11 – через MACRO и LINK.

Я продолжал комментировать код игры на ассемблере, выделял в нём паттерны паскалевских конструкций, и параллельно выписывал исходник на Паскале, компилируя и проверяя, что код получается именно таким, как в бинарнике игры. В целом конечно это была довольно большая работа, в которой мне сильно помогли участники форума zx-pk.ru, особенно Алексей Кислый (Alex_K). Мы узнали для себя много нового об этом варианте Паскаля, в том числе вещи, выходящие за стандартную документацию – например, использование конструкции GOTO.

В итоге мне удалось получить исходный код на Паскале ДВК, полностью «идентичный натуральному», но для этого пришлось ещё написать отдельную программу-«патчер» строк на C#. Дело в том, что использованный мной бинарный файл «оригинала» игры был сильно изменён – строки были переведены в 8-битную кодировку КОИ-8. Но Паскаль ДВК может работать только с 7-битной кодировкой КОИ-7. Поэтому, я компилировал паскалевский код в .MAC-файл, который затем патчил, и уже патченный файл проходил дальнейшую компиляцию.

В конце концов, бинарник, получаемый мной при компиляции с Паскаля, стал отличатся от «оригинала» всего на один байт в заголовке файла, что в общем доказывало, что паскалевский исходник полностью соответствует тому, что было в оригинале. Эту работу я завершил 17 апреля 2021 года.

Веб-версия игры на HTML/JavaScript

Запустить веб-версию STALK