БК-11М в 21м веке

26
Янв
2021

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

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

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

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

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

 

26
Янв
2021

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

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

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

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

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

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

 

19
Янв
2021

Неплохая охота

Сегодня исправил много глюков:

  • BUG: принца спиной можно запихать влево в решетку
  • BUG: стражника спиной можно запихать в кирпич
  • BUG: при переключении окна вниз и повисании на нижней fly-плите, она должна становиться верхней
  • BUG: один стражник на шипах убился, а совершенно другой труп показывается тоже «зашипленным»
  • BUG: при фехтовании принц, отскакивая от решетки, переходит в base
  • BUG: стражник жмет крайний правый fly и он рисуется на полную ширину
  • BUG: принц приседает и теряет меч пропуская удар на краю пропасти

А также добавил корректную потерю жизни стражником при падении с различной высоты.

18
Янв
2021

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

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

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

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

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

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

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

14
Янв
2021

Кстати о замыливании глаза

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

И наконец-то научил стражника не проходить сквозь решетки аки жидкий терминатор!

 

10
Янв
2021

Немного о стражниках и решетках

Недавно я обнаружил, что некоторые решетки открываются не в том порядке, в каком должны. Точнее, не теми плитами управляются. Загнал нужный лабиринт в редактор и понял, что редактировать привязку решеток к управляющим плитам невозможно. Можно только задать все связи заново. Ошибся — задавай все снова. Почему так сделано и как я умудрился все их связать? Ведь никаких записей на этот счет я не делал, это точно. Видимо, по памяти. И это неудивительно: чтобы перенести лабиринты на БК, мне приходилось заходить в КАЖДЫЙ экран каждого лабиринта. Буквально в каждый. Это означает, что я падал во все пропасти, на лету нажимая паузу и печатая экран на матричном принтере (бжжж…бжжжж..). А если по пути попадались падающие плиты? Надо было выяснить, какие падают, а какие нет. Это тоже добавляло повторных проходов. Конечно у меня все эти решетки отпечатались в памяти, ведь я прошел их по сто раз. Но некоторые связи были неочевидны — если по пути ты нажимал несколько открывающих плит, то уже не был уверен, какая именно плита какую решетку открыла, ведь одна плита может открыть их сразу несколько.

В итоге так и вышло — в нескольких решетках я ошибся. Исправляю теперь их прямо в дампе, так проще 🙂

Распечатанные листы А4 мы склеивали в огромные лабиринты, которые едва помещались на полу комнаты)) Долгое время одна такая распечатка в свернутом виде хранилась у меня. Но сейчас я ее не нашел. Наверное все-таки выкинул, или использовал при ремонте для закрывания пола…

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

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

Потом оказалось, что и у принца есть такая фаза…

Все эти спрайты было уже почти некуда размещать, и это не придавало энтузиазма.

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