/ Цифровая археология / Музей ASV / Xonix
Пролог: В 1989 году Дмитрий Шеремет написал для Специалиста неплохую версию игры Xonix. Эта версия разошлась среди небольшого количества знакомых и уже буквально лет через пару лет ни у кого не сохранилась.
Через 19 лет было решено написать заново эту игру по-памяти. Так был начат этот проект.
Ссылка на RKS-файл: MST_XON.RKS
В рамках данного проекта ставится задача спроектировать и в соответствии с проектом реализовать игру XONIX.
Игра должна быть реализована на ассемблере микропроцессора i8080 и должна работать на эмуляторах ПК "Специалист".
Игра должна имитировать работу в текстовом режиме с размером знакоместа 8*8 точек.
ТАКИЕ ВЕЩИ ПИШУТСЯ
НА ОДНОМ ДЫХАНИИ!
Сюжет игры происходит на игровом поле, разбитом на клетки. Одно знакоместо - одна клетка. Игроку требуется закрасить как можно большую территорию игрового поля.
Первоначально поле заполнено только по периметру по две клетки с каждой стороны поля.
Для закрашивания территории необходимо, управляя главным персонажем игры, рисовать контуры, замыкающиеся на закрашенном пространстве.
Исходная позиция главного персонажа - на второй клетке снизу, посредине нижней части игрового поля.
Процессу закрашиванию мешают летающие по незакрашенному пространству враждебные создания. Перемещаются они по диагоналям, отскакивая от закрашенных клеток. Также есть не менее враждебные создания, которые перемещаются по такому же принципу, но только по закрашенным клеткам.
После замыкания контура заполняется та область игрового поля, которая не содержит враждебных созданий.
Если создания есть с двух сторон контура, то происходит закраска только клеток контура. В этом случае создания получаются разделёнными по разным незакрашенным областям.
Если при формировании контура закраски получается несколько областей:
то происходит закраска только контура и свободных от созданий областей:
Скорость перемещения по клеткам для всех персонажей одинаковая. Главный персонаж может перемещаться только по горизонтали или вертикали. Враждебные персонажи перемещаются только по диагонали.
Первоначальная позиция и вектор движения враждебных существ, перемещающихся по незакрашенной территории выбирается случайным образом. Первоначальная позиция враждебных существ, перемещающихся по закрашенной территории выбирается случайно, но на удалении от главного персонажа. Вектор движения для последних также выбирается случайно.
В начале игры игроку даётся 5 жизней.
Поводом для отъёма жизни могут быть следующие ситуации:
Если жизнь отнимается из-за встречи с враждебным персонажем, который перемещается только по закрашенной территории, то главный персонаж появляется в том же месте, что и в начале игры.
Если жизнь отнимается в процессе рисования контура, то контур исчезает, а главный персонаж помещается в место на закрашенной территории поля, с которого началось рисование контура.
Поводом для перехода на следующий уровень и получением дополнительной жизни может быть одно из двух событий:
За каждую закрашенную клетку даётся одно очко. За переход на следующий уровень с разделением всех существ - дополнительно 100 очков.
Для того, чтобы написать xonix,
нужен хороший специалист!
Экранная область имеет разрешение 384x256 в монохромном режиме. Байт по адресу 9000H представляет 8 первых точек в первой строке экрана. Байт по адресу 9001H - 8 первых точек во второй строке, а байт по адресу 9100h - точки с 8 по 16 в первой строке и т.д. Старшие биты располагаются слева. Бит, установленный в 1 - светлая точка.
Схематически видеопамять ПК специалист можно представить следующим образом:
Для ввода с клавиатура необходимо использовать стандартную подпрограмму, располагающуюся в BIOS по адресу C337H. Подпрограмма возвращает код клавиши в регистре A. Остальные регистры сохраняются без изменений.
Для игры Xonix используются следующие коды клавиш:
В качестве источника графических образов был взят стандартный набор символов IBM PC:
Поэтому все графические элементы в данной игре имеют размер 8*8 точек.
Всего имеется шесть графических элементов.
Программа представляет из себя конечный автомат, имеющий следующие состояния и переходы между ними:
Эпилог: Не сказать, чтобы мы успели много напрограммировать. Всё упиралось в то, что мы никак не могли собраться вместе. Тем не менее данный проект завершился весьма неожиданно. Далее - от лица Вдовичева А. В.
В те времена единственным носителем для Специалиста была магнитная лента. Когда я подключил дисковод к Специалисту, я перенес все игровые программы на дискеты. Xonix'а среди них не оказалось и было решено, что он утерян безвозвратно.
Несмотря на то, что наиболее интересная на тот момент информация была перенесена на дискеты, все катушки и кассеты я сохранил. А вот все мои магнитофоны вышли из строя.
Я спросил у Владислава Багинского - сохранился-ли у него магнитофон, который он привёз из германии. Он обещал посмотреть, как только появится в Новосибирске.
И вот, как-то поздно вечером, когда я уже собирался спать, позвонил Дмитрий Шеремет и сказал, что сейчас они с Владиславом заедут ко мне. В гости заходить не стали, поскольку у Владислава было мало времени - отдали мне магнитофон и уехали.
Полгода не мог добраться до магнитофона. Но когда получилось добраться, был приятно удивлён тем, что на слух деградация записи оказалась небольшой.
Сначала были попытки чтения при помощи утилиты, входящей в состав эмулятора EMU80, но чтение было очень неустойчивым.
Потом, после визуального анализа сигнала в звуковом редакторе, решил написать свою читалку. На неё ушло порядка 10 вечеров.
Считал всё, что что было на катушках. Местами были ошибки, но практически всё получилось выудить - хорошо, что файлы на ленту записывались как правило в нескольких экземплярах.
И вот поздно вечером, звоню Диме Шеремету по скайпу. Дозвониться не получается, но думаю, что всё-равно обратит внимание. Дальше в чате скайпа происходит следующий диалог:
10.02.2009 22:18 Anatoly Vdovichev Дёма? Дёма?! ДЁЁЁЁМММАААА!!!!! страна должна знать своих героев! http://.../scr.png сорри, что поздно Dmitry Sheremet ААААААААААААААААА! Anatoly Vdovichev но я думаю, что у меня есть веское оправдание Dmitry Sheremet Кидай уже rks Anatoly Vdovichev http://.../MST_XON.RKS я настоящий некромансер Dmitry Sheremet Играет! Anatoly Vdovichev ишшо бы и звуки как надо издаёт вообщем не напишем мы ксоникс этому ксониксу 20 лет в этом году однако... контрольная сумма вродь совпадает - ксоникс аутентичен на все 100 Dmitry Sheremet Можноошибки исправить Anatoly Vdovichev ну пропущенную букву 's' разве что Dmitry Sheremet Есть ошибка в алгоритме заливки Anatoly Vdovichev если исходники захочешь - давай знать я надеюсь ты не против включения его в архив игр на http://www.emu80.org ? я в полном экстазе от результата проделанной работы Catherine мои поздравления! Dmitry Sheremet Не мешайте играть Catherine :D Anatoly Vdovichev :D Dmitry Sheremet Я раньше был умнее чем сейчас Anatoly Vdovichev я тут пока "оцифровкой" занимался - весь испереживался... вообщем сейчас на меня жор напал. пойду поем праздник ёлы-палы... ладно, мне спать пора... надо валерьянки принять, иначе точно не усну Dmitry Sheremet давай! Ваще! Ты монстр! Anatoly Vdovichev передавай привет Лаптеву при случае удачно Влад магнитофон подогнал...
Вот так неожиданно и удачно был завершён этот проект. Оказалось, что при переносе на дискеты по какой-то причине я пропустил Xonix. Может просто пропустил - он был самым последним файлом на катушке или может он тогда не считался. Но в итоге результат оказался превосходящим ожидания.
Есть ленточки с файлами для специалиста, которые не можете считать? Присылайте wav'ки - у меня есть программа, которая вроде бы неплохо умеет выцарапывать из старых записей данные в формате Специалиста.