Category: Блог

04
Дек
2020

Прыжки

Обрабатывал напильником прыжок с места. Обратил внимание, что если прыгнуть через яму, тут же развернуться на месте и прыгнуть назад, то принц не долетает до старого места! Что за ерунда? Неужели прыжок вправо длиннее, чем прыжок влево?

Искал, искал ошибку – вроде все ок. Решил проверить длину прыжка в оригинале.

И вдруг:

Значит так и должно быть 🙂

P.S. AdamBazaroff подсказал, что так и должно быть – после прыжка принц делает шажок, потому в обратную сторону и не долетает. Что я могу сообщить по этому поводу? Ночью надо спать, а не править баги 🙂

03
Дек
2020

Начинаем приседания!

Приседания – это вам не просто так. Если игрок нажал клавишу вниз, это еще не значит, что принц должен просто присесть. Если он при этом стоит спиной на краю плиты, а сзади пусто – надо не садиться, а слезать. Если он стоит лицом к яме и на самом краю, то он тоже не должен садиться – он должен спрыгнуть вниз. А вот если не на самом краю, а чуть дальше от края – надо сесть. Но тут тоже есть нюанс: когда принц будет вставать, он наклонится над этой ямой и по его передним координатам определится пустота, но он не должен туда упасть, ведь под ногами есть опора. Но эта опора может и уйти из-под ног, если там падающий пол…

Вот сколько вариантов обработки простого нажатия кнопки “вниз”….

Но в целом, принц движется шустрее, чем на старом движке 🙂

28
Ноя
2020

И еще шаг

Немного ускорил процедуру, выдающую объект обстановки по координатам – теперь адрес в лабиринте определяется раз в 5 быстрее, благодаря табличке смещений. А процедура эта вызывается несколько раз на каждом кадре для определения объектов, окружающих принца.

Долго не мог понять почему принц не хочет цепляться руками за опору при прыжке. И так и сяк крутил – вроде и опору видит и летит рядом. Чего ж не цепляется? Оказалось, все дело в счетчике высоты – если принц пролетел больше двух этажей, то он уже не должен цепляться за попавшуюся опору.  А счетчик показывал неверные данные.

Теперь цепляется 🙂

 

25
Ноя
2020

Понемногу учу принца всему заново

“Вчера его пигалица перемахнула через куст. Он всю ночь рычал от счастья.” Мультфильм “Что случилось с крокодилом”.

Постепенно принц научился заново залезать, слезать, не бегать сквозь стены 🙂 Но впереди самое сложное – подбор шага на краю (который раньше был), и подбор шага перед ловушками (которого раньше не было). А также вечный источник глюков – падение. Это просто россыпь возможностей влететь в стену.

Радует, что теперь вносить изменения в систему обработки препятствий гораааздо проще. Нет миллиона сравений, есть таблица. Не радует, что некоторые движения основаны на особенностях спрайтов. Это немного усложняет задачу.

Но в итоге принц (пока что) бегает шустрей, чем при прежней системе.

23
Ноя
2020

Обработка препятствий

Мда, переделка обработки препятствий – это глобально. Всему надо принца заново учить. На новом механизме пока что  он может только бегать и падать в ямы. Представляю, как с этим долго мучился Евгений в свое время – 104 движения и для каждого надо найти правильный вариант реакции на обстановку.

20
Ноя
2020

Обработка препятствий

Самая страшная подпрограмма в принце – обработка препятствий. Изначально написал ее Евгений, когда обучал принца бегать по лабиринту. Сначала бегать, потом прыгать, потом слезать-залезать и так далее. На каждом этапе добавлялось проверок на то, какие где расположены объекты, можно ли за них зацепиться и надо ли… Потом в эту подпрограмму (OBST) уже я начал добавлять всякие проверки. Потом вдруг выяснилось, что некоторые движения невозможно реализовать, так как они были изначально неправильно попилены на части. Пришлось пилить дополнительно. Добавлять проверок. Женя уже тогда называл все это не иначе чем “спагетти”. Да, страшное там дело в итоге получилось. И самое фиговое, что весь этот макаронный трешак вызывается на КАЖДОМ кадре игры, так как в любой момент принц может провалиться, напороться на стену и т.д. А значит, это все дает нихилый вклад в пожирание быстродействия. Пару раз я уже пытался оптимизировать OBSTacle, но там тронешь одно – рушится все )) Принц начинает сходить с ума, прыгать внутрь стен, проваливается в ПЗУ… Отвратительно себя ведет.

Но пришла мне в голову идея, как все это разом упростить и ускорить. Пока что идея мне нравится, посмотрим, что получится. А то бывает, что красивая идея на самом деле работает медленнее, чем миллион проверок, которые на самом деле срабатывают далеко не все и не всегда и в итоге работают быстрее 🙂

Для начала я решил нарисовать блок-схему имеющейся системы обработки препятствий. Рисовал часа два.

Вот что получилось:

Влезло почти все, что было в исходнике OBST1. Я порадовался. А потом вспомнил, что есть еще файл OBST2…. Рисовать его уже негде, так что придется обойтись тем, что есть.

Итак, завтра я полностью сломаю Принца 🙂 Если заработает новая версия и она будет быстрая, это будет круто. Если же круто не будет – придется вернуть старые спагетти.

 

19
Ноя
2020

Очередной баг изловлен

Исправлен баг с зависанием при “контузии” после падения с двух этажей на падающий пол. Проявлялось редко, т.к. такие ситуации нечасты. Но был замечен и исправлен. А также выяснена причина засорения экрана остатками плит в некоторых случаях. Завтра поправлю. Почему это нельзя сделать днем??

Установил виртуальный джойстик (спасибо Yellow Rabbit), и выяснил, что никакого окна калибровки джойстика в оригинальном принце нет. Видимо, там калибровка это совсем не тот процесс, что на БК. Думаю, джойстик можно сконфигурить и просто выводя надписи в нижнюю строку экрана.

18
Ноя
2020

Инструкция от Prince of Persia

Внезапно нашел инструкцию от “Prince of Persia”. Было интересно почитать 🙂

Во-первых, обнаружилось, что в Принце все-таки можно было записываться! Для этого надо было нажать Ctrl+G в любом месте игры. Загрузиться можно было при новом запуске игры, нажав Ctrl+L. Но не все было так просто – после нажатия выводилось окно “Найдите такое-то слово в такой-то строке на такой-то страницы инструкции” и игрок попадал в “лабиринт”, где ему надо было выпить кувшин с первой буквой этого самого слова. Если кувшин был правильный – открывается дверь и игрок попадает на сохраненный уровень. Если нет – не попадает.

Во-вторых, я нашел там описание управления с джойстика, что, собственно, и искал. Предусмотрен еще процесс калибровки джойстика, должен запускаться по клавишам Ctrl+J. Но запустить этот процесс я не смог, так как джойстик не обнаруживается и все на этом. А джойстика для PC у меня нет. Эмулятор джойстика, что ли, попробовать поискать?
Просто для того, чтобы в игре можно было настраивать свой вариант управления от джойстика, мне нужно сделать какой-то пользовательский интерфейс этой настройки. И я хочу его сделать таким, как он выглядел в оригинале.

Интересная дока, в общем, полезная.

26916_Extra document_Manual

17
Ноя
2020

Джойстик!

Добавил управление от джойстика. Как играть с джойстиком в виде ручки, я слабо представляю, правда. Но вот с джойстиком в виде клавиш должно быть очень удобно. Можно жать кучу кнопок одновременно, а это то, чего не хватает клавиатуре БК. Теперь прыгать с разбегу стало значительно удобнее. Единственное, что пока нелогично – при отпускании на джойстике кнопки “висеть” – принц продолжает висеть, ожидая кнопки “вниз”. Это надо подумать как реализовать. Дело в том, что сейчас клавиатура и джойстик обрабатываются одновременно, и если проверять на “на джойстике ничего не нажато”, то неизвестно, отпустил ли игрок кнопку джойстика или может у него и джойстика-то нет )) Разве что завести флаг “зацепился, используя джойстик”, тогда если в порту 177714 ноль – значит и отцепился на джойстике.

P.S. Сделал такой флаг, посмотрим, всегда ли логично будет работать.

16
Ноя
2020

Падение – еще одна любимая мозоль

Обнаружил, что в 11-м лабиринте невозможно повторить трюк с проваливанием и цеплянием для добычи кувшина. Слишком далеко отталкивало принца от края при падении в яму. Поправил это дело, и трюк успешно заработал.

 

Но предстоит глобальная переделка механизма обнаружения препятствий. С одной стороны, это должно ускорить самого принца, так как обнаружение препятствий проходит на каждом цикле вывода принца. С другой стороны это кропотливая работа, сопровождаемая адскими глюками – то не цепляется, то проваливается на ровном месте, то сквозь стены ходит… Помню, помню…. Но если получится ускорение, то оно того стоит 🙂