Сегодня исправил несколько багов, обнаруженных Yellow Rabbit и мной:
иногда некорректно определялось место для повешения на шипах
новые игровые часы продолжали идти и во время паузы 🙂
звездочка при заколе иногда выводилась не там, где надо
А также занимался грандиозным делом — подбирал на железной БК задержки для смены палитр «на лету». Занятие не для слабонервных. Но мне удалось их подобрать! Теперь надо сделать определение среды запуска «эмулятор/железо» и применять те или иные тайминги. Так как я весь вечер гонял Принца на железной БК, то могу сказать, что Принц на железе работает шустрее, чем в эмуляторе. Очень заметно 🙂 Прям радует.
приземление с большой высоты с ударом об стену проходило без анимации контузии
при падении с большой высоты и ударе о «ветхую» плиту Принц помирал, но продолжал падать (и это правильно) и при этом мог зацепиться и повиснуть, раскачиваясь как живой (вот это неправильно)
поправлены некоторые новые спрайты во дворцах
игровое время теперь считается по таймеру, так что на игру реально выделяется час
по совету Yellow Rabbit сделал микширование шума поприличнее. Артефактов стало поменьше.
поправил некоторые лабиринты (в паре мест обрывался узор, а в демо-лабиринт закрался дворцовый кирпич)
пришлось править сценарии демо-битв, т.к. с новым RND стражники стали драться активнее
увеличил паузу в срабатывании пил, почему там было 6 кадров вместо положеных 8 — неясно. Теперь пила работает как в оригинале. Но в итоге в демо пришлось править сценарий прохода через пилу, т.к. вместо «как надо переходить через пилу» с новой пилой получилась демка «как Принц запиливается»
Что осталось сделать:
у зеркала осталась синяя плита (от старой обстановки дворцов)
иногда муз.процессор не выключается и продолжает шуршать или свистеть
у стражника остались удары-промахи без звука
в падении с большой высоты Принц может помереть два раза, если упадет на «ветхую» плиту
маски на дохлого Принца надо накладывать иначе
добавить внезапный музон в 6-м
сделать подсчет времени по таймеру, а не по кадрам (раз Принц теперь бегает как на PC)
попытаться оптимизировать вывод решеток — они (в большом количестве) все-таки тормозят Принца. Может там тоже найдется что ускорить.
Звуки на спикер еще не выброшены из Принца, они вполне прилично звучат. Пробовал даже включать одновременный вывод звука и на AY и на спикер — прикольно. Наверное стоит их доделать, теперь они не тормозят принца. Неясно что делать с музыкой на спикер, правда. Попробовал несколько музыкальных редакторов («Маэстро», еще какой-то) — как-то фальшиво звучит в эмуляторе. Не знаю, может дело в эмуляторе, а может в тех демо-музонах, которые с ним идут. «Клавесин» на железе вроде звучал прилично, но та версия, что мне удалось найти, в эмуляторе виснет при старте.
Продолжаю чистить баги по списку. Одна из записей гласила «в 8м лабиринте, при работающих пилах нажатие плиты вызывает бесконечный дикий скрежет». Вылез, думаю, как раз тот случай, когда несколько звуков, звучащих одновременно, содержат данные шума. А регистр шума-то всего один! Естественно, шум от трех каналов просто так не выведешь. Я надеялся, что шум из нескольких каналов не вызовет особого конфликта — шум да и шум. Нифига. Пришлось делать обработку этого случая. Сделал. Прихожу снова в то место, нажимаю плиту — опять тот же самый дикий скрежет. WTF?? Начинаю смотреть детально — причина диких звуков вообще не в этом. Никакие шумы не конфликтуют, просто плита там хитрая и не освобождается от Принца до конца, в итоге генерируя бесконечное событие «нового нажатия». А система приоритета шума уже сделана. Хрен с ней, авось пригодится 🙂
А также:
исправлен звук открывающейся двери
исправлен RND стражника (был сломан новым циклом таймера из-за динамической задержки)
освобожден кусок памяти
С новой задержкой играть в Принца стало значительно приятней, все равномерное и плавное, прямо не верится )) Старые дергания и тормоза порядком бесили.
Начал разбираться с динамической задержкой и просто офигел )) Оказывается, она все-таки все еще встроена, с тех самых 90-х. И я вспомнил, как именно Женя ее реализовал — задержка вычисляется в зависимости от размера спрайта Принца. Женя тогда делал движок, который выводил только спрайты самого Принца. В каждом движении куча спрайтов и все они разных размеров. Чтобы фазы менялись с одной скоростью, Женя сделал расчет задержки на каждом такте именно относительно размера только что выведенного спрайта Принца. Так это все дело и осталось. Но потом-то добавились другие двигающиеся штуки — всякие там пилы, шипы, решетки и самое страшное — второй персонаж, стражник! Все это, конечно, внесло дополнительные тормоза, а вот их никто не учитывал и не вычитал из посчитанной задержки, которая продолжала вноситься лишь на базе размера спрайта Принца.
Выкинув задержку вообще (для теста) я получил вот такую скорость работы движка:
Сделал пример для фехтования. В начале ролика записано как работало раньше, потом идет запись работы опять без какой-либо задержки. Фехтование-то, оказывается, может быть куда живее!
Оказывается, был запас по скорости-то! Теперь осталось выровнять все с помощью новой динамической задержки, по таймеру.
А также, сегодня я исправил самый злостный глюк, который меня уже год бесил, наверное 🙂 Иногда, когда Принц падал вместе с двумя плитами одновременно, на экране оставался мусор. И теперь это пофикшено! Сегодня определенно удачный день.
Пройдясь по новому варианту Принца, быстро насобирал список старых и новых багов и недоделок. Постепенно исправляю:
у Принца была возможность избежать боя со скелетом, поправил
если плита падала слева от шипов, то при срабатывании они затирали лежащие обломки. Разбирательство с этим багом привело к полному переписыванию вывода шипов, выкидыванию куска кода и ускорению их работы.
исправлено слишком быстрое убирание шипов, когда Принц от них отходит
Как ни странно, надо вернуть динамическую задержку в Принца, иначе он слишком быстро бегает, когда на экране мало всего происходит. Это, конечно, классно, но пила срабатывает слишком быстро и прыгать через нее в этом случае уже затруднительно. Причем задержка такая раньше была, но была выкинута с проклятьями «пусть хоть иногда он шевелится быстро». Но оптимизация и переработка Принца, видимо, принесли ощутимые результаты 🙂
при отключении звука стражники переставали слышать шаги Принца и вовремя разворачиваться к нему. Логично, звука шагов же нет))
при повторном просмотре заставки целиком портился один спрайт
вместо меча начинал бликовать один из элементов обстановки дворца — у них с мечом один код.
А так же продолжаю мучать мигание. Полноэкранное блымкание прикольное, но имеет задержку, обусловленную подготовкой скрытого экрана. Это не подходит для быстрого мигания при падении или получения удара в бою…
Точнее, исправлена работа с памятью. Для этого пришлось сделать следующее:
все данные заново перетасовать по страницам-сегментам (в итоге используемых страниц стало меньше, что характерно)
переделать работу с памятью, т.к. теперь уже не получится просто подключить спрайты фехтования в окно 100000, надо их копировать, как раньше, поверх спрайтов, не используемых при фехтовании. И обратно.
процедуру свопа пришлось вынести в основную память, т.к. код, работающий в расширенном ОЗУ на адресах 100000-140000 норовит отключить сам себя
В результате Принц заработал на реплике БК11М с SMK-512.
Попутно выяснились две вещи:
Все сложные прыжки на бегу вполне успешно выполняются на родной клавиатуре БК11М, без всяких проблем
На железной БКшке с SMK-512 действительно есть прирост скорости за счет использования быстрого ОЗУ в SMK
Свежие комментарии