Category: Prince of Persia

05
Дек
2020

Двигаемся!

Много чего сегодня сделал:

  • прыжок с разбега
  • отталкивание от стены при падении
  • теперь сразу падаем, если в прыжке вперед попали в стену и внизу нет опоры (раньше принц останавливался в воздухе, чесал репу и только потом обнаруживал, что стоит на пустоте)
  • разворот на месте правильно ищет опору
  • разворот с заносом правильно ищет дыры и стены
  • поломано измерение высоты при падении, т.к. теперь принц падает не так, как раньше

Что осталось сделать из обработки препятствий:

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

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

Что вообще осталось доделать:

  • новый формат данных о стражниках, т.к. все-таки надо изначально задавать в какую сторону смотрит каждый стражник
  • в 8-м лабиринте сразу ДВА разных по интеллекту стражника, а пока что подразумевался только один алгоритм боя на лабиринт
  • в третьем лабиринте скелет вернуть на место и сделать все, что связано с его подлым возникновением
  • распилить движение начала бега на два, т.к. принц в оригинале может остановиться быстрей, чем у нас
  • сделать “левитацию”
  • реализовать кровищу на пиле?
  • перерисовать спрайты дворцов для другой палитры
  • звук на AY
  • исправить маски обломков и арки

Глобальные доработки, которые можно сделать:

  • сделать маски ко всем спрайтам принца и стражников, перестать их вычислять на лету и надеяться на ускорение
  • грузить сразу все спрайты в память СМК и больше не обращаться к диску при фехтовании

 

 

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. Сделал такой флаг, посмотрим, всегда ли логично будет работать.