Так как я вышел на тропу борьбы с багами, первым делом решил заняться самым надоевшим багом — Шериф периодически проваливался под землю в самых странных местах. Причем, выглядело это хитро — приходишь в какой-нибудь кусок лабиринта, а Шериф там провалился в «окоп» и бродит из угла в угол, запертый в «канаве». Как он туда попадал? Я пытался поймать его конкретно на этом месте «провала», он приходил и бродил без всяких проблем по этому самому месту, не проваливась. Т.е. дело было не в ошибочном обнаружении какой-то ямы вместо обстановки, он реально нырял в яму только если его никто не видел. У меня уже были мысли, что он смещается туда при какой-то нештатной ситуации, типа «попал под падающую глыбу и отскочил сразу в стену». Но как это выяснить?
В этот раз я решил вывести его на чистую воду — отследить его маршрут. В процедуре вывода Шерифа я прописал «выводить Шерифа на экран всегда, независимо от того, в видимой части лабиринта он в этот момент или нет». И момент провала я увидел:
Т.е. Шериф действительно проваливался, а не телепортировался от каких-то нештатных ситуаций. Осталось выяснить, почему он не находил там землю. Оказалось (как обычно) все просто. На заднем плане в этом месте «шкаф», а шкаф в сжатом лабиринте представлен всего двумя кодами — признаком шкафа и кодом его содержимого. Полноценным шкафом это становится тогда, когда шкаф выводится на экран. А когда он выводится? Когда в окно со шкафом (вот фразочка!) заходит Балбес. Вот и получается, что Балбес своим присутствием делает шкаф полноценным, со стенами и ЗЕМЛЕЙ, а бедные Шерифы и Скелеты вынуждены бродить по лабиринтам, где вместо шкафа нули… Вот они и проваливаются в тартарары то там, то сям…
Как я пофиксил этот глюк? Стал ли я полноценно распаковывать невидимые шкафы, чтобы Шерифы не ныряли в ямы? Нет, теперь упаковщик лабиринтов вместо нулей в нижней линии шкафа пишет код земли, да и все. Шерифы теперь видят землю вместо недораспакованного шкафа, а на сам шкаф им плевать 🙂
Исправлял баг с летающими по воздуху черепами (не искались ямы под «хитрым» типом черепов) — в итоге придумал как упростить вообще поиск препятствий для всех типов черепов. Выкинул кучу кода, ставшего ненужным. Проверяю результат — все ок. Но вот вдруг Шериф в одном из случаев решил закосить под Майкла нашего Джексона:
С выкинутым кодом это никак не было связано, тут поймался редкий случай неправильной коррекции относительно земли при приземлении. Был исправлен. Но прикольно.
Доделал 5 уровень, теперь там все расставлено — нечисть, предметы, секреты. Теперь нужно сделать процесс «взятия» этих предметов и секретов работающим — чтобы в нижней части экрана выводились все взятые предметы, исчезали истраченные. А самое главное, надо чтобы сами артефакты теперь работали, выполняли свои функции.
Перед этой глобальной задачей я решил починить Призрака, который поломался не так давно. Обнаружилось, что сломался он частично из-за ошибки в константе (1000000 вместо 100000), а частично потому что вывод Шерифов был переделан. При этом Призрак в оригинале помирает только от 5 ударов, с каждым полученным ударом меняя цвет. Появилась у меня идея, как реализовать эту смену 5 цветов для спрайта Призрака.
В процессе раскрашивания этого самого Призрака я получил цвет, который вполне подошел бы Вопящему Шерифу, который у меня использует те же спрайты, что и Второй Шериф. Стал я смотреть, есть ли место под еще один набор спрайтов… и обнаружил, что при стрельбе у меня Шерифы используют один спрайт из заготовленных четырех — я умудрился так подобрать смещения в анимации, что остальные три (они просто смещены на один пиксель) оказались не нужны. Выкинул я эти спрайты из всех Шерифов и из масок тоже и освободилось место как раз на еще один набор спрайтов.
Итак, Вопящий Шериф теперь обзавелся своим цветом. А Призраком займусь завтра 🙂
Нечисть расставлена, секреты запрятаны, триггеры взведены. Почему-то поломался Призрак — появился, но сразу все повесил. И скелеты распрыгались, как детишки на лужайке:
«Если уж начал править баги, то сложно остановиться…»
fixed рождающиеся черепа наносят урон, хотя еще не родились!
fixed монета проваливается сквозь пол раньше, чем должна спрыгнуть
fixed шериф не может сойти с мешка вправо при низком потолке
fixed монета должна просто исчезнуть, а не лопаться
А вот так (с помощью Spacedesk) можно использовать планшет в качестве второго монитора. Вывел на него часть окошек эмулятора со всякими дампами/дизасмами:
Для дальнейшего развития игры необходимо избавиться от накопившихся багов, а то пытаешься тут испытать новую фичу, а где-то в невидимой части лабиринта Шериф неправильно убивается мешком и все виснет. Раздражает. Поэтому решил провести работу над ошибками:
fixed: на основной заставке при нажатии клавиши остается линия от головы шерифа
fixed: на промежуточной заставке может не быть рисунка собранных гномов
fixed: промежуточная заставка не должна прерываться клавишей
fixed: монета проваливается в пол — переделана работа со скрытыми триггерами
fixed: шериф неправильно спрыгивал влево при низком потолке
fixed: шериф неправильно залезал в окно выше текущего (остатки глюков от смены размера лабиринта на динамический)
Как обычно, встретились баги, которые вызывают мысль «как оно вообще работало??»
Свежие комментарии