Category: Разработка

21
Фев
2021

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

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

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

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

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

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

 

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

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

Вуаля:

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

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

И пилим!

Сегодня сделал кувшин левитации, ура! Попутно выяснилось, что решетки держат паузу перед опусканием слишком долго — в три раза дольше, чем надо. Исправил. Еще исправил:

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

    А также нашел еще несколько глюков:

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

 

30
Янв
2021

Пилите, Шура, пилите

Сегодня доделывал «высотомер», который определяет как низко пал принц. Рано я вчера радовался — как выяснилось, не всегда высота измерялась правильно. Принц ведь умеет не только вертикально падать, он еще и со смещением вперед летает, если прыгнул с ускорением. Выкинул этот костыльный счетчик, сделал другой. И он работает.

В некоторых случаях принц вроде бы и убивался, но вставал, как ни в чем не бывало. При этом жизней у него уже не было и надпись «Press any key» выводилась. Но трупа не было. Оказалось, это последствия того, что труп все-таки ищет под собой яму или кнопку. В оригинале он ищет только кнопки, так что если там принц упадет на «ветхий» пол, то плита под ним упадет, а труп останется висеть в воздухе. А я когда делал определение кнопок под трупом (должен же он своим весом ее нажать), то стала срабатывать и проверка на яму. В итоге труп стал падать вместе с «ветхим» полом, потом еще может на шипах заколоться — такой затейник этот труп… Решил так и оставить. Но вот и последствия этих зомби-развлечений: труп иногда еще и вставал! Пришлось отучать.

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

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

Осталось что? Вот что:

  • сделать отдельную раскраску для стражника в 8-м
  • кровища на пиле
  • кувшин левитации
  • звуки
  • музыка
  • загрузка из любой БК-шной OS
  • заставки
  • демо-режим
  • задание управления от джойстика
  • сплясать в ластах на столе
28
Янв
2021

Скелет — читер!

Разбираюсь со скелетом, и вдруг обнаруживаю, что он в оригинале ведет себя довольно странно. Если его спихнуть в пропасть вправо — он не будет стоять под стеной, он почему-то окажется в середине экрана! Но это еще ерунда. Если скелета спихнуть влево, то он вообще должен упасть на самый нижний уровень (как он и падал у меня). Но он все равно будет ждать принца посреди экрана. Т.е., в оригинале скелет залезает на уровень вверх, чтобы там поджидать принца, хотя ни один стражник такого не умеет ))

 

Реализовал все это дело, теперь скелет (чуть не написал «мой скелет») в нашем принце тоже ждет принца где положено.

 

27
Янв
2021

Изворотливый скелет

Проявился-таки старый глюк с проваливанием под землю стражника, стоящего на краю. Все никак не могу отловить его в повторяемом виде. На этот раз уже скелет решил, что ему-то можно перемещаться под землей ))

27
Янв
2021

Конечно же стражники

  • Сделал загрузку стражника второго типа в 8-м лабиринте. Потому что первый стражник там круче других. Выглядят они пока одинаково. Надо крутому сделать другой прикид.
  • Сделал в третьем лабиринте альтернативное начало после прохождения дальней решетки, как и положено.
  • Установил скелета куда ему положено.
  • Отучил его помирать при падении с большой высоты.

    Теперь надо его научить вставать когда положено.

26
Янв
2021

Обучение стражника

Несколько месяцев назад стражник был обучен преследовать принца в бою. В том числе, прыгая для этого вниз. Но вот высоту стражник при этом не учитывал, потому норовил сигануть во всякие пропасти. Сегодня я решил его научить быть умнее. Сначала стражник вел себя так: пока принц был на два уровня ниже, стражник за ним не следовал. Но как только принц поднимался — стражник прыгал к принцу (ведь он ждет!), но пролетал мимо.

Я научил стражника оценивать высоту ямы, прежде чем прыгать в нее. И стражник стал останавливаться на краю, заглядывать вниз, говорить «Да ну нафиг!» и успокаивался. Что же будет если принц залезет на уровень стражника? А вот что:

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

Это никак не устраивало, конечно. Попытался добавить интеллекта стражнику. И тот нашел выход проще:

 

26
Янв
2021

Мальчик квадратный ковер выбивает

Сегодня боролся с коврами. Точнее, с декоративными панелями в дворцовых лабиринтах, которые мы обозвали коврами. Так что с коврами. Дело в том, что эти самые ковры являются препятствием и принц не должен сквозь них проходить, пролетать и т.д. А он, конечно, только этим и занимался. Да еще и норовил качаться сквозь них, а заодно и сквозь закрытыми решетки. Повиснет, бывало, на решетке, и давай всячески ноги свои в нее, значится, пихать. Пришлось отучать, туды яво в качель.

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

Потом выяснилось, что принц, когда тормозит с заносом (как кот на паркете), умудряется при этом дрифте сквозь закрытую решетку проехать и встать с другой стороны, сделав вид, что читает газету. Опять же пришлось ему вправлять мозги.

В процессе всех этих мытарств выяснилось, что два места в 5-м лабиринте сделаны неверно. Плиты обваливались не там, где должны. А где должны — не обваливались. Пришлось переделывать лабиринт, чтобы должны было там где должны. И наоборот, что характерно, тоже.

Ну и напоследок, я решил быстренько поправить обмен местами стражника и принца при фехтовании. А то там беспредел какой-то был: то отскочат друг от друга на три метра, то спинами друг другу повернутся. Хаос и аквадискотека, короче. Пришлось отучать.  «Быстренько» вылилось в три часа скрипения мозгами. Вроде получилось.

 

18
Янв
2021

Байки из склепа

Начал делать потерю «жизни» стражником при падении его с большой высоты. Т.е. если стражника спихнуть вниз, то он должен потерять одну «жизнь» или вообще убиться, если высота была слишком большой. Сделал примерно, решил проверить как это работает. Нашел удобное место в 9-м лабиринте, иду к нему. По пути попадаются другие стражники, одного просто убил, другого запихнул в пилу. Прохожу обратно мимо «просто убитого», а он почему-то лежит в виде запиленного, хотя пилы рядом нет. Записал в список глюков, требующих исправления «не сохраняется тип трупа».  Иду дальше, попадается еще стражник. Скидываю его на шипы. Захожу в нужное окно — и все виснет. Хмм… Давненько такого не было.

Начинаю все снова. Иду, расправляюсь со стражниками, опять вижу, что надо исправить эту фигню с не тем видом трупов. В оригинале, кстати, трупы вообще просто исчезают, и я начинаю понимать почему. Но это потом, сначала надо понять, почему все виснет в том окне. Дохожу до проблемного окна — ничего не виснет. Интересно. С чем же был связан глюк? Неужто с новой обработкой падения стражника? Проверяю — вроде ничего там криминального.

Ок, иду снова. Убиваю стражников, скидываю одного на шипы, т.к. шипы глубоко внизу и, может быть, в процессе полета новая обработка падения портит память? Вроде осталось все в норме. Только вот эти трупы несовпадающего вида… Но это потом.

Дохожу до проблемного окна. Не вхожу в него, сохраняю состояние памяти, чтобы сравнить. И тут вижу, что внизу торчит башка стражника. А чего он там торчит? Там был убитый стражник, но почему он забит в землю? А потому что спрайт «нормального трупа» лежит на плите, а тот, что на шипах — он гораздо выше над плитой выводится… И так как адрес вывода этого «обычного трупа» сохранен, а «вид трупа» — нет, то тупо берется состояние последнего убитого стражника. А последний был на шипах. И вот «заколотый на шипах» стражник выведен в самом низу в полную высоту, вместо обычного спрайта, затирая память.

Т.е. всю дорогу я наблюдал причину того самого глюка с зависанием, который хотел исправить и это было именно отсутствие сохранения «типа трупа». Но оставлял на потом 🙂

В оригинале все нелогично — исчезают все трупы, кроме тех, что лежат на плитах, управляющих решетками. Потому что лежание на плите оставляет решетку открытой.