БК-11М в 21м веке

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

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

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

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

 

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

 

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

26
Фев
2021

Столбы и решетки

Стыковал сегодня спрайты: арки и плиты, столбы и решетки, а также столбы и столбы. Избавлялся от надоевших черных прочерков между столбами. Оказалось, не так все просто — из-за использования псевдоцвета столб стыковался с решеткой, но не стыковался сам с собой. Хорошо, что в таблице элементов обстановки для подвалов есть пустые места (потому как в дворцах больше элементов, чем в подвалах), там я и добавил новый элемент «смещенный столб», который теперь стыкуется с нормальным столбом. Починил недавно поломанный механизм нажимания кнопок упавшими плитами.

23
Фев
2021

Снова неплохо поохотился

Сегодня неплохо поохотился на баги и недоделки:

  • FIX не уменьшаются жизни, если стражник теряет их в другом окне
  • FIX стражник улетел и закололся, а жизни все равно есть
  • FIX у стражника нет «пустых» жизней, они сразу стираются
  • FIX при приземлении после прыжка принц не издает звука и стражник его не слышит
  • FIX в 13м плита, падающая на плиту, не сразу ее уносит, а начинает качать. Или это принц
  • FIX после смерти визиря должна открыться дверь
  • FIX в 10м плита падает на кнопку и решетка начинает открываться с самого закрытого состояния, хотя итак была открыта
  • FIX при фехтовании принц на шипах сразу убивается
  • FIX при входе в третий у скелета и в 13м звук двери не нужен!
  • FIX при вставании скелета черные дыры! видимо выводится только полплиты
  • FIX при блоке удара стражником раздается звук нажатия плиты и потом звон
  • FIX звуки фехтования отстают на кадр
  • FIX шипы в крайнем положении все время выдают звук, пока на них сверху летит стражник или принц
  • FIX не проваливается, пока сидит в контузии, а под ним ушла плита
  • FIX у визиря не выводятся жизни
  • FIX в 12м дверь сразу закрыта!
  • FIX обвал плит в 13м должен быть однократным
21
Фев
2021

Ох уж эти персы со своими коврами

Взял очередную запись о баге: «в 10м лабиринте две решетки друг над другом и падающая плита при падении портит вторую решетку». Ок, посмотрим!

Итак, действительно, решетки две, одна над другой:

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

Надо быстро загуглить карту лабиринтов принца да и глянуть. Гуглю. Что-то карт досовского принца не попадается, только карты клонов. И что там в этом месте? А вот что:

Какая-то ересь, однако. Небось чуваки тоже столкнулись с этой проблемой и решили не заморачиваться с такой сложной комбинацией решеток, просто убрав ее. Может и мне выкинуть ее нафиг? Авось никто и не заметит )) А что там в оригинале-то?

 

Е-мое… Да как так-то??  В оригинале тоже нет решетки здесь! Ковер повесили! А почему я весь день мучаюсь с этими долбаными фонами?? Надо тоже поставить там ковер!

Запускаю редактор, ставлю ковер, ааа….. ага…. вот почему тут решетка — потому что нет у нас такого элемента «столб с плитой». Есть только столб. И есть решетка, где все это в комплекте. И, судя по всему, в далекие 90-е, я решил добавить элемент потом, а пока просто впендюрил туда решетку. И вот теперь сам же и мучаюсь, изобретая механизмы подмены фонов для всяких там углов решеток. Добавлять элемент — это лишняя память опять. А не состряпать ли нам его из имеющихся запчастей? Можно же вывести просто левую часть решетки и на нее ковер нацепить.

Вуаля:

Ну и дополнительно поправил пару багов:

  • вывод падающих плит и решеток был не в той последовательности.
  • буферы фона для шипов и падающих плит пересекались, в итоге они не могли быть одновременно на экране, если с ними одновременно взаимодействовал принц
  • принц застревал у решетки в определенных условиях