Решетки!
Сегодня реализовал обработку состояния решеток. Теперь по лабиринтам просто так не побегаешь…
Блог разработчика
Сегодня реализовал обработку состояния решеток. Теперь по лабиринтам просто так не побегаешь…
Сегодня допилил новую систему обнаружения препятствий. Точнее, теперь принц снова умеет все, что умел раньше, и чуть больше. Теперь надо обучать его новым фишкам, таким как «не проходить сквозь решетки», «левитировать». Исправлены старые баги с игнорированием падающего пола в некоторых ситуациях, а также с застреванием шипов в выдвинутом положении (оказывается, они считали, что на них стоит стражник, хотя он торчал в соседнем окне). И еще много мелочей.
Новая система работает шустрей и куда проще отлаживается. «Спагетти» канули в лету.
Задолбавшись обучать принца скучной науке падать в ямы и не лезть на стены, я решил отвлечься и попробовать добавить фоновое воспроизведение музыки на музыкальном процессоре AY-3-8910. Добрые люди на канале БКшников снабдили меня инфой и всякими исходниками проигрывателей, но застрял я на процессе загрузки этого самого файла с музыкой в память СМК-512. Все файлы данных принца читались отлично на нулевую страницу СМК, а вот музыку надо было уже грузить на другую. И тут при загрузке стало все виснуть, заполнять память и экран всяким мусором. Причем каждый раз приколы были разные. Пару раз даже загрузилось! Я уже и на эмулятор грешил, и на прошивку СМК и совместимость режимов памяти с БК10/11. оказалось все проще — грузить данные с винта можно только в нулевую страницу, потому что на ней и сам контроллер HDD хранит свою служебную область. А подключаешь другие страницы — все накрывается медным тазом. Так что надо грузить данные в какую-то БКшную область памяти, а потом уже вливать уже в СМК.
Поборов проблему с СМК, я начал пытаться воспроизвести в принце музыку. Сначала, конечно, принц издавал нечленораздельные звуки, но Владимир ‘KUVO’ Кутяков подсказал в чем проблема и помог встроить свой блок воспроизведения, за что ему огромное спасибо!
Вопрос «насколько затормозится принц, если в фоне играть музыку», который периодически меня мучал, теперь прояснен 🙂 Можно возвращаться к всяким пилам, ямам и шипам…
Сегодня сделал несколько вещей:
Все это было связано с маленьким шагом, т.к. в других случаях принц плюет на все все опасные механизмы и сигает в пропасть не раздумывая.
Много чего сегодня сделал:
Что осталось сделать из обработки препятствий:
Раньше все это было, конечно, кроме решеток, падения плит на голову и выравнивания у опасных механизмов. Но, так как движок новый, то приходится делать все заново…
Что вообще осталось доделать:
Глобальные доработки, которые можно сделать:
Обрабатывал напильником прыжок с места. Обратил внимание, что если прыгнуть через яму, тут же развернуться на месте и прыгнуть назад, то принц не долетает до старого места! Что за ерунда? Неужели прыжок вправо длиннее, чем прыжок влево?
Искал, искал ошибку — вроде все ок. Решил проверить длину прыжка в оригинале.
И вдруг:
Значит так и должно быть 🙂
P.S. AdamBazaroff подсказал, что так и должно быть — после прыжка принц делает шажок, потому в обратную сторону и не долетает. Что я могу сообщить по этому поводу? Ночью надо спать, а не править баги 🙂
Приседания — это вам не просто так. Если игрок нажал клавишу вниз, это еще не значит, что принц должен просто присесть. Если он при этом стоит спиной на краю плиты, а сзади пусто — надо не садиться, а слезать. Если он стоит лицом к яме и на самом краю, то он тоже не должен садиться — он должен спрыгнуть вниз. А вот если не на самом краю, а чуть дальше от края — надо сесть. Но тут тоже есть нюанс: когда принц будет вставать, он наклонится над этой ямой и по его передним координатам определится пустота, но он не должен туда упасть, ведь под ногами есть опора. Но эта опора может и уйти из-под ног, если там падающий пол…
Вот сколько вариантов обработки простого нажатия кнопки «вниз»….
Но в целом, принц движется шустрее, чем на старом движке 🙂
Немного ускорил процедуру, выдающую объект обстановки по координатам — теперь адрес в лабиринте определяется раз в 5 быстрее, благодаря табличке смещений. А процедура эта вызывается несколько раз на каждом кадре для определения объектов, окружающих принца.
Долго не мог понять почему принц не хочет цепляться руками за опору при прыжке. И так и сяк крутил — вроде и опору видит и летит рядом. Чего ж не цепляется? Оказалось, все дело в счетчике высоты — если принц пролетел больше двух этажей, то он уже не должен цепляться за попавшуюся опору. А счетчик показывал неверные данные.
Теперь цепляется 🙂
«Вчера его пигалица перемахнула через куст. Он всю ночь рычал от счастья.» Мультфильм «Что случилось с крокодилом».
Постепенно принц научился заново залезать, слезать, не бегать сквозь стены 🙂 Но впереди самое сложное — подбор шага на краю (который раньше был), и подбор шага перед ловушками (которого раньше не было). А также вечный источник глюков — падение. Это просто россыпь возможностей влететь в стену.
Радует, что теперь вносить изменения в систему обработки препятствий гораааздо проще. Нет миллиона сравений, есть таблица. Не радует, что некоторые движения основаны на особенностях спрайтов. Это немного усложняет задачу.
Но в итоге принц (пока что) бегает шустрей, чем при прежней системе.
Мда, переделка обработки препятствий — это глобально. Всему надо принца заново учить. На новом механизме пока что он может только бегать и падать в ямы. Представляю, как с этим долго мучился Евгений в свое время — 104 движения и для каждого надо найти правильный вариант реакции на обстановку.
Свежие комментарии