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

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

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

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

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

 

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

 

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