Category: Разработка

01
Апр
2021

Стражники — это не только ценный мех

Пришло время убрать лишнее смещение стражника при блоке, которым я их пихал в пропасти и шипы для отладки. Шаг я убрал и тут поломался цикл «удар-блок-удар» которым можно было бесконечно обмениваться с крутыми стражниками. Я начал смотреть почему и выяснилось, что принц не всегда делает после блока шаг назад в оригинале, а только если за его блоком не следует удар. Сделал так же. Цикл «удар-блок-удар» начал получаться, НО ТОЛЬКО ОДИН РАЗ, на второй раз стражник почему-то не ставил блок и пропускал удар. Нашел две ошибки в программе определения расстояния между принцем и стражником. Стражник, оказывается, после первого блока оказывался ближе, чем раньше, и получал команду «делай шаг назад, принц слишком близко», не смотря на то, что принц наносил удар и потому и был близко, собственно. К тому же, решив проверить как ведет себя стражник 8-го лабиринта в оригинале, я с удивлением обнаружил, что он часто и вовсе не вступает в этот цикл «удар-блок-удар», а может просто назад отойти. И потому его можно там скинуть в пропасть. А у меня его невозможно было назад заставить идти, он сам всегда принца уталкивал в яму. Я добавил стражнику случайных чисел и теперь он иногда отскакивает. И стало очень похоже на оригинальное поведение 🙂 Ну, а визирь в итоге получил весь арсенал и вообще окрутел ))

Пофикшены баги:

  • приседание на шипах вело к смерти
  • выталкивание за решетку при прыжке спиной к решетке
  • двойник снова  умеет падать в пропасти
  • убрано впадение не в то окно в начале уровня 1 и 8
  • отталкивание от стены при фехтовании починено
  • пила делалась внезапно кровавой. Оказалось, она «пилила» стражника в соседнем окне, лежащего на этом же месте!

Yellow Rabbit взялся за ежедневное тестирование принца, это отлично. Два первых бага из списка нашел именно он.

26
Мар
2021

Стерео!

Два дня правил звуки, расставил вызовы событий, в которых временно вручную указывал канал для воспроизведения (левый/центр/правый). Все звучало. И вот пришло время все-таки написать процедуру автоматического определения канала для звука. И тут мне в голову пришло, что все данные у меня уже есть — в любой точке вызова звука всегда известен адрес в экране того объекта, который издает звук. Просто надо передать его подпрограмме добавления нового звука в очередь, а та сама вычислит в какой канал этот звук разместить. Пришлось снова пройтись по всем исходникам и поменять при вызове звука номер канала на адрес в экране. И, конечно, добавить вычисление канала в саму подпрограмму добавления звука в очередь. И все зазвучало!

26
Мар
2021

Интересные моменты

 

Когда я добавил звуки поднимающихся и опускающихся решеток, то сразу заметил, что как-то много звуков стало. Решил посмотреть, как в оригинале все это звучит. И выяснилось, что в оригинале звук опускающейся решетки слышен только тогда, когда она видна. А вот поднимающуюся решетку слышно всегда и везде. Но есть один момент — решетка в третьем лабиринте (кто знает, тот поймет) все-таки тоже везде слышна при опускании. Реализовал все это дело и сразу стало гораздо тише. Сегодня исправил кучу звуков и сделал новые. Теперь мне прям нравится как все звучит, даже заигрался в принца )) Не совсем нравятся шипы, но может еще исправлю. И совсем не нравятся звуки качающегося пола. Как выяснилось, в оригинале сделано вообще хитро — если прыгать на одном и том же месте, то каждый раз качающийся пол издает разные звуки:

 

Мне пока не удалось получить такие звуки для AY. Тем более как-то их перемешивать. Завтра помучаю этот вопрос.

Alexander «Sandro» Tishin подсказал, что в первом лабиринте существует скрытый способ пройти мимо стражника без меча. Оказалось, что у меня этот вариант был невозможен — отсутствовала одна падающая плита. Поставил плиту, теперь все стало возможно.

Вот такие особенности вдруг выясняются. Раньше на них и внимания не обращал никогда.

18
Мар
2021

Да будет звук!

Итак, занялся вплотную звуками. Как сделать звуки? Как обычно: записать с микрофона удары молотком по рельсу на фоне отбойного молотка, в лучших традициях ранних Депешей. Но вот незадача — нужны звуки на AY, в виде всяких там периодов и частот шума. Поискал софт для создания звуков, нашел несколько редакторов. Но мои синусоиды, нарисованные в стиле импрессионизма, никаких вменяемых звуков не выдавали. Пришлось смотреть как сделаны другие «сэмплы», звучащие круто. Математический смысл вроде понятен. Но вот как взять и нарисовать звук «железных челюстей, с грохотом смыкающихся, с низкочастотным ударом и металлический звоном»? Фиг его знает. Но я в итоге нарисовал:

Замечательный редактор AY FX Editor крутого Shiru

Ок, звучание меня устроило. Вроде бы очень даже похоже и на удар и на звон такой с легким эхом:

Что с этим делать дальше? Редактор позволяет выгрузить звук в нескольких форматах: afx и двух вариантах текстового формата. В доке есть описание формата afx:

Формат одиночного эффекта, расширение .afx
Каждое прерывание кодируется последовательностью байт, их количество может изменяться в зависимости от изменений значений тона/шума/громкости в текущем прерывании. Сначала идёт информационный байт:

 bit0..3  Громкость
 bit4     Запрещение T
 bit5     Изменение T
 bit6     Изменение N
 bit7     Запрещение N

Если установлен bit5, далее следуют два байта со значением тона; если установлен bit6 - байт со значением шума; если установлены оба этих бита - сначала идёт значение тона, потом шума; если не установлен ни один - сразу идёт следующий информационный байт.
Конец эффекта помечается последовательностью байт #D0,#20. Плеер должен определять её до вывода в регистры (сравнением значения шума на = #20). В редакторе за признак конца эффекта считается последнее ненулевое значение громкости, вне зависимости от остальных параметров.

Как я уже знал из различных док, примеров и ценных советов гуру, самый быстрый способ выводить звук на AY — писать в его регистры уже готовые данные, не вычисляя ничего на ходу. Иначе говоря, мне нужно было преобразовать мой AFX в PSG-формат. Порылся на просторах интернета — конвертера не обнаружил. Придется самому. Берем блокнот и декодируем:

-- 000
EF Инф байт 1110 1111
Громкость F (17)
bit 4=0 разрешено Т
bit 5=1 далее значит два байта со значением тона
bit 6=1 и еще байт шума
bit 7=1 запрещение шума 
88 байт тона 210
0B байт тона 13
17 байт шума 27

-- 001
EE Инф байт 1110 1110
Громкость E (16)
bit 4=0 разрешено Т
bit 5=1 далее значит два байта со значением тона
bit 6=1 и еще байт шума
bit 7=1 запрещение шума 
83 байт тона 203
0C байт тона 14
10 байт шума 20

Вколачиваю полученные значения в таблицу в исходник тестового «плеера», накиданного за 5 минут, которые просто хватает данные из этой таблицы и пишет в регистры 4,5,6,7,10 AY. Компилирую, запускаю — какое-то хрипение. Ну, особо никто и не надеялся, как всегда какой-то косяк. Ага, перепутал биты в канале управления регистра C. Исправляем, запускаем:

Оуууууееее!!

Теперь, правда, надо создать все другие звуки принца… А там, помимо бряцания  и клацания, есть весьма непростые, типа перерубаемого принца, воплей падения и прочих звуков органического происхождения. Будем, значит, сочинять ))

Ну, и конвертер написать придется, а то на бумажке конвертить не очень интересно ))

 

 

17
Мар
2021

Снова в бой

Потребовалось некоторое время отвлечься на работу, бывает! Сегодня снова занялся принцем. Наконец-то исправил старейший баг с обрезанием рук принца при выходе их в верхний экран. Теперь принц висит на стене как положено:

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

Исправил глюк, возникший после переделки вывода падающих плит (в сотый раз уже).

Заметил, что в принца уже можно играть как вполне в рабочую игру ))

Пора вплотную заняться звуком на AY.

06
Мар
2021

Продолжаю править баги и не баги

Исправлено:

  • BUG: если стражник дохнет на кнопке то заменяет ее на фрезу!
  • BUG: двойник из зеркала вылезает в экран слева
  • BUG: взятие меча с глюками при складывании после отказа от свопа
  • BUG: после двойника в 4-м стражник тоже как двойник
  • BUG: после прыжка сквозь зеркало должна остаться одна жизнь
  • BUG: у зеркала должна быть маска
  • BUG: у ковра тоже должна быть маска
  • BUG: в 10м можно впрыгнуть сквозь решетку слева внизу
  • BUG: принц уходит с кнопки, на которую упали обломки, и она поднимается
  • BUG: стражник не реагирует на звук прыжка с высоты
  • BUG: если на экране несколько фрез, то кровавыми становятся все, а не только та, которая запилила
  • BUG: при входе в первый лабиринт контузия быть должна, а жизнь теряться не должна
  • BUG: при входе должно быть 3 жизни
  • BUG: неверно было распределены лабиринты по двум файлам

Ну и теперь принц уже должен сам брать меч, изначально его нет.

Переход на загрузку всего в SMK позволил убрать загрузку спрайтов фехтования, теперь просто подключается страница с ними. Раньше при начале боя грузились спрайты с винчестера, для этого приходилось подключать ПЗУ контроллера винта. После боя снова грузились спрайты бегающего принца. Это позволяло экономить память, но больше такой своп особо применить было негде: все остальные спрайты принца и текущего лабиринта могут понадобиться в любой момент.

 

04
Мар
2021

Полное погружение

Для того, чтобы отвязать принца от ANDOS-зависимости, я переделал загрузчик. Теперь все данные при старте грузятся в доп.память SMK и больше обращений к жесткому диску нет. Все грузится через стандартное ЕМТ 36, больше нет никаких поисков по FAT и блочного чтения напрямую с винта. Пришлось поломать голову над неочевидными вещами в SMK. А в CSI-DOS еще и каталоги оказались реальными, от чего я давно отвык на ANDOS ))

28
Фев
2021

AY!

Сегодня было немного фиксов:

  • исправил кровищу на фрезах — после первого запила она потом была на всех фрезах
  • перерисовал спрайты заколотого шипами и запиленного фрезой стражника — у них была чалма от визиря
  • исправил фехтование «простых» стражников в 8-м лабиринте,  у них стоял флаг крутости
  • стражник на шипах теперь выводится правильно, если выйти из окна с ним и снова войти (раньше шипы исчезали, а стражник висел в воздухе)
  • при фехтовании принц терял меч, если упирался спиной в решетку
  • стражник игнорировал звуки принца (было поломано при разборках со звуками на кадр позже)

 

А также сегодня начал делать звуки для AY. И вот первый звук:

Потом все повешалось, но это уже неважно ))

26
Фев
2021

Маскарад и кровища

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

Выглядело это так:

 

Теперь вот так:

 

Сделал кровищу на пиле. Т.к. в палитре подвала нет красного цвета, пришлось сделать кровь черной.