Tagged: видео

02
Апр
2021

Плеер музыки в Принце заработал!

Сегодня внедрял плеер музыки в принца. Возникла странная проблема с проигрыванием упакованных psg – почему-то у одного файла был заголовок в 64 байта, а у других он в упор не создается. Т.е. звук выпивания большого кувшина играется нормально, т.к. у него есть заголовок, а звук для малого кувшина хоть убейся создается без такого заголовка. Плеер его, конечно, играть не хочет, потому что там первым делом пропускается 64 байта с начала звука. Ок, прицепил к нему эти 64 байта от звука большого кувшина – оба звука стали играться. Думаю, может он вообще нафиг не нужен? Убрал в плеере это смещение на 64 байта, подсунул ему звук малого кувшина без заголовка – играется! Отрезал заголовок и от мелодии большого кувшина – фигушки, не играется. Пока что неясно, будем разбираться.

Ну и ладно, прицепил к обоим звукам заголовки, встроил плеер в принца. Пришлось повозиться с процедурой начала воспроизведения музыки, ведь музыка выпивания кувшина должна начаться ПОСЛЕ окончания звука “Буль-буль-буль”, а не вместо )) Хотя событие это одно. Сделал процедуру определения конца звука. Музыкальный плеер ждет, когда закончится какой-либо звук, потом выставляет максимальный приоритет во все каналы и начинает играть музон. Тут уже плеер звука ждет, когда закончится музыка. Ну и все получилось:

02
Апр
2021

А вот и музыку подвезли

Набрал музон выпивания большого кувшина в Vortex Tracker, пытаясь сделать его похожим на оригинальный. Затем сохранил его в формате pt3. Потом преобразовал его в PackedPSG с помощью утилит Владимира ‘KUVO’ Кутякова, за что ему огромное мерси. Потом взял исходник его же плеера psgplay, переписал его в формате micro1103, развернув макросы. Скомпилировал на БК. Прицепил к полученному плееру файл музона и вот результат:

 

Ура, товарищи! Теперь буду встраивать плеер в принца и скрещивать его с моим блоком воспроизведения звуков. Там уже есть система приоритетов, для воспроизведения конкурирующих звуков, так что я надеюсь, что все пройдет просто: плеер музыки выставит приоритеты в каналах больше, чем имеющиеся у звуков, и таким образом звуки не прервут музыку. Это “Я так думаю!” (с) Мимино

 

 

26
Мар
2021

Стерео!

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

26
Мар
2021

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

 

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

 

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

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

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

23
Мар
2021

Долой очереди!

Сегодня сделал новый звуковой движок: очереди выкинуты, сделаны три вида приоритетов. Важные звуки могут прерывать любые звуки (пила должна всегда быть слышна), средней важности могут быть заглушены важными (пила заглушает решетку, но решетка глушит шаги). И он заработал! Теперь надо делать звуки более похожими и соблюдать стерео при выводе звуков, чтобы правая решетка звучала справа и т.д.

Пока что выглядит так:

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. Исправляем, запускаем:

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

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

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

 

 

26
Фев
2021

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

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

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

 

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

 

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

28
Янв
2021

Скелет – читер!

Разбираюсь со скелетом, и вдруг обнаруживаю, что он в оригинале ведет себя довольно странно. Если его спихнуть в пропасть вправо – он не будет стоять под стеной, он почему-то окажется в середине экрана! Но это еще ерунда. Если скелета спихнуть влево, то он вообще должен упасть на самый нижний уровень (как он и падал у меня). Но он все равно будет ждать принца посреди экрана. Т.е., в оригинале скелет залезает на уровень вверх, чтобы там поджидать принца, хотя ни один стражник такого не умеет ))

 

Реализовал все это дело, теперь скелет (чуть не написал “мой скелет”) в нашем принце тоже ждет принца где положено.

 

27
Янв
2021

Изворотливый скелет

Проявился-таки старый глюк с проваливанием под землю стражника, стоящего на краю. Все никак не могу отловить его в повторяемом виде. На этот раз уже скелет решил, что ему-то можно перемещаться под землей ))