Author: grf

17
Окт
2021

Да не 30 лет мы его писали!

Все почему-то думают, что Принца писали 30 (кто-то уже даже говорит «больше 30») лет. Ну конечно это не так. Что я, по-вашему, с 16 лет его пишу каждый день с утра до ночи? )) Специально прошерстил все исходники, по датам в них можно восстановить хронологию и сроки:

Самые ранние даты, которые мне попались:

; зеркальное копирование 8.4.92

; *** вывод спрайта *** 12.04.92 ;
; ANIMATOR

Само собой, это первые вещи, с которых все началось — без вывода спрайта никуда. Надо учитывать, что начал это все писать Женя, и случилось это после того, как я кучей демок типа «бегущий принц», «горящий факел» убедил его в том, что надо попробовать. Первой был факел, точно. Допустим, недели две я его этим мучал, потом он еще думал о том, с чего начать… значит март 1992 можно считать началом эпопеи.

Дальше видим такую метку:

; обработка клавиатуры 25.07.92 ;

Раз дошло дело до клавиатуры, значит потребовалось управление. Значит это тот период, когда Женя сделал демку с бегающим по экрану принцем. В это время я уже поступил в институт и участие в проекте принимать перестал. Но я нарисовал почти все спрайты, так что было с чем  работать. И дальше дат никаких нет до вот этой:

; таблица управления 01.94

Видимо, Женя решил отдохнуть, пока я учился в институте 🙂 Но через какое-то время отдыхать ему надоело и он взялся за дело (я уже был в армии в 1993-1994 годах). Дальше идут даты:

;редактор лабиринтов дизасс. 15.02.94
;22.02.94

Видимо в январе Женя написал редактор лабиринтов, чтобы было где гонять Принца, но исходники потерял (что было немудрено с дискетами), впал в меланхолию, но в феврале взял себя в руки и сделал все заново, дизассемблировав бинарник редактора.

Дальше дело пошло:

; определение препятствия 21.06.94 ;
;--------------------------------------11.07.94-;

Насколько я помню, где-то летом я как раз приезжал в отпуск и Женя показал мне, как принц бегает уже не по экрану, а по лабиринту, залезая и слезая во всякие ямы. Это уже было круто.

Потом был какой-то застой, видимо. В ноябре 94-го я вернулся из армии (знатно поучился в институте) и записи пошли кучно:

; GRF Обработка движущихся объектов 18.03.95
; GRF Вывод решеток в текущем положении 19.04.95
; GRF Вывод окна и инициализация массивов для обработки 10.05.95
; движущихся объектов 
; GRF Движение фрез 24.05.95 14:27
; GRF Считываем фон для видимых решеток 31.05
; GRF Дым на кувшинами 5.06.95 14:57
; GRF Нажатие плиты 8.06.95 16:56
; GRF Вывод двери в текущем положении 14.06.95 10:07
; GRF Составление списка видимых шипов 20.06.95 9:55
; GRF Считываем фон для видимых шипов 20.06.95 10:47
; GRF Движение шипов 20.06.95 13:55
; GRF конвертор лабиринтов 29.11.95
; GRF Взятие предмета 21.12.95 ;

Блоки мы помечали, чтобы видеть кто накосячил ))

Потом большой перерыв, аж на два года:

;==== управление стражником ========24.5.97===
; нач.14.02.97

;----------------------------------------------------;
;загрузчик 19.03.97 ;
;----------------------------------------------------;

Не помню, с чем это связано. Видимо как раз интерес к БК угас, появились у всех PC по домам. А в 97-м как раз получили письмо из Сочи, от Григория Останина. Оказывается, наша старая демка докатилась до Сочи. Он спрашивал, когда доделаем Принца. Вот тут энтузиазм снова появился и мы стали доделывать. И стало ясно, что памяти не хватит. Тут уже на одном энтузиазме продолжать было сложно. Я делал стражников и у меня не было места под код их АИ. Я видел, что еще надо научить стражников куче вещей — они должны сами бродить по лабиринту в погоне за Принцем, прыгать в неглубокие ямы и т.д., а не просто махать мечом в пределах одного экрана. Чтобы выбить место под код, приходилось оптимизировать уже написанное, как правило в убыток скорости. Нельзя было делать развернутые циклы, таблицы для скорости вычислений… Принц становился тормозным. Сделали мы и обмен на ходу в памяти неиспользуемых на данный момент спрайтов на другие, подгрузки всякие и при этом никакой музыки на AY еще и подавно не было, и звуков на AY тоже. Даже оцифровки для вывода звуков на спикер, которые мы сделали, влезли не все… В итоге снова все заглохло. Аж до 2016 года.

За это время Женя переехал в другой город и еще много чего произошло. В 2016 я достал старые исходники, еще немного их помучал, добился уже полного исчерпания памяти и снова бросил. Потом аж в 2018-19 я вернулся к Принцу уже с вариантом использования СМК, что позволило снять проблему памяти. Циклы развернулись, появились таблицы… В итоге Принц и был доделан.

Так что никаких 30 лет Принца никто не делал долгими вечерами.

 

16
Окт
2021

Релиз!

Внезапно оказалось, что Принц готов. Для теста я прошел его от начала до конца, по пути пофиксил пару косметических багов. И решил, что пора уже его и выложить 🙂

Скачать образ дискеты: "Prince of Persia" для БК-0011М

Запускать можно в эмуляторе, который поддерживает СМК-512, и на железе, конечно.

Клавиши управления (все можно переназначить по АР2+K):

  • Влево, вправо — бег влево и вправо
  • АР2+Влево/Вправо — шаг влево и вправо
  • Вверх — прыжок вверх, прыжок на бегу, зацепиться, блок при фехтовании
  • Вниз — присесть, слезть, сложить меч
  • АР2+Вниз — взять предмет
  • Пробел — прыжок с места, удар при фехтовании

Управление от джойстика (все можно переназначить по АР2+J):

  • Влево, вправо — бег влево и вправо
  • Вверх — прыгнуть прямо вверх, залезть, поставить блок при фехтовании, зацепиться в полете
  • Влево/вправо + вверх — прыжок с места, прыжок на бегу
  • Вниз — слезть, присесть, сложить меч
  • Кнопка 1 — удар при фехтовании
  • Кнопка 1 + влево/вправо — маленький шаг
  • Кнопка 1 + вниз — взять предмет
  • Кнопка 2 — прыжок с места, зацепиться в полете, удар при фехтовании
  • Кнопка 2 + влево/вправо — прыжок на бегу

Общие клавиши управления:

  • КТ — пауза
  • T — показать оставшееся время
  • S — выкл/вкл звука
  • АР2+A — начать уровень заново
  • АР2+R — начать игру заново
  • АР2+K — задать управление от клавиатуры
  • АР2+J — задать управление от джойстика
  • АР2+S — задать звуковое устройство (AY или встроенный динамик БК)
  • АР2+Q — выход из игры

Для работы требуется СМК-512.

В данной версии музыка на заставках играется только на AY. Т.е. звук на пищалку в самой игре выводится, а вот на заставках — нет. Связано это с тем, что в заставках используется переключение палитр по таймеру и в результате пищалка просто не успевает пищать музыку.

14
Окт
2021

Доделываю звук на спикер

Пришлось поизголяться со звуками на пищалку. Звукового редактора для таких звуков нет, так что создание недостающих звуков происходило в редакторе дампа, методом научного тыка 🙂  Ну и старые оцифровки не пропали даром, что самое главное.

Получилось вот что:

Осталось сделать мелодии для заставки и промежуточных роликов. Не знаю, получится ли что-то вменяемое, так как в оригинале всякие триоли, а у меня вывод квадратно-гнездовым способом. Если никто не найдет никаких багов в текущем варианте Принца — значит это будет релиз.

 

09
Окт
2021

Железо рулит!

В процессе работы над звуками для «пищалки» я думал немного подрезать эти самые однобитные оцифровки, сделанные еще в 90х, чтобы они были покороче и не особо тормозили движок. А потом решил проверить как они звучат на «железной» БК… И оказалось, что та самая разница в скорости между эмулятором и реальной БК+СМК с успехом компенсирует «спикерную» нагрузку на проц. На БКшке оцифровки звучат только в путь! Оставлю как есть.

Пока неясно что делать с музыкой на заставках — этот способ воспроизведения музыки (одновременно с игрой) не особо позволяет играться с длительностями нот, а в музыке от Принца те еще навороты. Короткие мелодии (при взятии меча или кувшина) мне еще удалось более-менее выправить, а вот что-то длинное наверное превратится в трешовый ремикс 🙂 Попробую набрать какой-нибудь музон и проверить.

08
Окт
2021

Пищалка

Решил все-таки сделать вывод звука на пищалку. По большей части потому что жалко готовые звуки, которые мы добывали выводом на принтер. Звуки, правда, были не все, пришлось доделать недостающие. А вот музыки для встроенного динамика вообще не было. Решил попробовать использовать редактор Савина «Клавесин». Но вот сам вывод музыки одновременно с игрой… Попытки воспроизводить музыку по прерыванию таймера провалились — в итоге звук был с явным фоном около 50Гц, что и понятно — таймер как раз 48Гц. В итоге я решил попробовать вывод музыки не квантами по таймеру, а все-таки нотами, с каждым кадром движка по одной ноте. Пришлось переписать музыку нотами минимальной длительности. Попробую, думаю, если будет фигня — ну и хрен с ним, пусть музыка остается на AY.

Попробовал и вдруг понял, что такое странное звучание музыки я уже слышал…. в видеороликах «Prince of Persia на Apple 2». Прикольно, конечно))

Вывод на спикер больше нагружает проц и с ним Принц бегает уже не так плавно. Лучше играть с AY 🙂

Вот что получилось у меня:

Вот как звучит на Apple:

06
Окт
2021

Добиваем баги

Фиксим последние (надеюсь) баги:

  • при спрыгивании с больших колонн нужно другое смещение, чем при спрыгивании со стены из висячего положения (баг оказался глубинным, я правил его два дня!)
  • при приземлении с ударом об решетку не сбрасывался высотомер
  • обнаружилось, что при выходе Принца из лабиринта вдруг исчезает труп стражника, если он валяется рядом

 

04
Окт
2021

Автодетект

Сделал автоопределение среды, в которой запущен Принц — эмулятор или реальная БК. Для эмулятора и железа используются разные задержки для смены палитр на лету и переключения экранов. Пришлось повозиться, т.к. процедура «записать в 177702 — прочитать из 177702» почему-то не всегда вызывает прерывание по вектору 4 на моей БК. Особо разбираться не стал, т.к. записанное значение из этого регистра все-таки не читается, а в эмуляторе читается. От этого факта и пляшем. Попутно пофикшены баги:

  • во время демо не блокировались управляющие клавиши, т.е. можно было включить задание управления, например
  • жуткий глюк, который мог приводить к вылетанию игры при перезапуске игры/лабиринта во время фехтования (при старте мог быть текущим профиль стражника, а не принца, а у того спрайты совсем не там….)
  • после задания управления от джойстика Принц делал прыжок — потому что игрок не успевал отпустить последнюю задаваемую кнопку (как раз прыжок). Теперь ждем, пока отпустит, а только потом выходим из процедуры задания управления.