Category: Баги

08
Дек
2020

Да будет звук!

Задолбавшись обучать принца скучной науке падать в ямы и не лезть на стены, я решил отвлечься и попробовать добавить фоновое воспроизведение музыки на музыкальном процессоре AY-3-8910. Добрые люди на канале БКшников снабдили меня инфой и всякими исходниками проигрывателей, но застрял я на процессе загрузки этого самого файла с музыкой в память СМК-512. Все файлы данных принца читались отлично на нулевую страницу СМК, а вот музыку надо было уже грузить на другую. И тут при загрузке стало все виснуть, заполнять память и экран всяким мусором. Причем каждый раз приколы были разные. Пару раз даже загрузилось! Я уже и на эмулятор грешил, и на прошивку СМК и совместимость режимов памяти с БК10/11. оказалось все проще — грузить данные с винта можно только в нулевую страницу, потому что на ней и сам контроллер HDD хранит свою служебную область. А подключаешь другие страницы — все накрывается медным тазом. Так что надо грузить данные в какую-то БКшную область памяти,  а потом уже вливать уже в СМК.

Поборов проблему с СМК, я начал пытаться воспроизвести в принце музыку. Сначала, конечно, принц издавал нечленораздельные звуки, но Владимир ‘KUVO’ Кутяков подсказал в чем проблема и помог встроить свой блок воспроизведения, за что ему огромное спасибо!

Вопрос «насколько затормозится принц, если в фоне играть музыку», который периодически меня мучал, теперь прояснен 🙂 Можно возвращаться к всяким пилам, ямам и шипам…

07
Дек
2020

И животноводство!

Купил я как-то новые джинсы. Синие, классные. На рынке, в лихие 90-е. Оторвал от них всякие там бирки, нацепил и довольный пошел домой. Дело было часов в 11 утра, проходя мимо места работы Евгения Пашигорова, я решил зайти к нему, узнать новости из мира БК и попить чаю. Женя был на работе. Как всегда крутил ус, пил чай и делал вид, что работает как минимум над запуском ракеты с телетайпом на Марс, бурча под нос «Этой отверткой только жаб стрекать». Это его любимая фраза по поводу разных некачественных предметов, но чаще всего ее удостаивались отвертки и кусачки. Что такое «стрекать», я так и не выяснил, но однажды я его любимыми кусачками перекусил что-то типа мелкого гвоздя и узнал много нового о разных процессах, грозивших не только жабам.

Но к делу это не относится. В коридоре у него стоял велосипед «Турист», с системой переключения передач — круть. Женя на нем на работу ездил. Я же в последний раз катался на велике в детстве и захотелось мне заценить правдивость теории о том, что разучиться кататься на велосипеде невозможно.

Велосипед вынесли на улицу, я оседлал его, успешно тронулся и резво набрал скорость давя на все гашетки. заезд был недолгим — через 30 метров навстречу мне выехал уазик. Я попытался тормозить педалями, как в детстве — фиг там. Нажал на все ручки тормозов, что попались и совершил перелет через руль. Поднявшись с земли, я оценил потери — дыра на новых джинсах в районе колена и кровища на самом колене. Женя, конечно, угорал.

Так я в сжатые сроки обновил джинсы и навыки езды на велосипедах с передним тормозом. А к чему все это? Я починил в принце движение «пролезание под решетку» и теперь принц не скачет после приземления, как безумный плясун.

 

06
Дек
2020

Маленький шаг для принца…

Сегодня сделал несколько вещей:

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

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

04
Дек
2020

Прыжки

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

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

И вдруг:

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

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

28
Ноя
2020

И еще шаг

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

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

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

 

19
Ноя
2020

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

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

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

16
Ноя
2020

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

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

 

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

16
Ноя
2020

Алилуйя!

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

Решетка курильщика:

 

Решетка здорового человека:

 

P.S. Да, принц проходит сквозь решетку в отладочных целях, иначе я заколебался бы попадать в нужные для тестов локации.

P.P.S. Пофиксил затирание арки неверной маской столба:

15
Ноя
2020

Старые грабли

Продолжаю работу над падающими плитами.  Обнаружилось, что если такая плита лежит перед закрытой решеткой, то после падения плиты, решетка выводится с куском уже несуществующей плиты. Это происходило потому что фон под решеткой запомнился тогда, когда плита еще была перед ней нарисована. Надо было это фиксить, конечно. Придумал как — надо читать фон еще когда этой плиты нет перед решеткой, при выводе окна. Ок, прочитал. Пропал верхний уголок над решеткой — потому что фон запомнился когда плиты еще нет, но при этом еще и нет обстановки над решеткой. В итоге потом черный кусок над решеткой. Ок, при выводе решетки читаем нижнюю треть фона, где уже нарисовано все без плиты, а после вывода всего окна — дочитываем верхнюю часть фона. Начинаю тестить — жуть, принц проваливается в пол, вместо решеток — куски памяти, вместо обстановки рисуется шизофрения. Ого! Такого размаха глюководства давненько я не наблюдал!

Если глюки такие масштабные, значит поверх памяти вкатил, наверное, эти половинки фона или стек, может, запортился. В общем, что-то типа этого начинаю искать. Ищу и не нахожу ничего криминального. Как обычно. Плюнул на все, лег спать. Утро вечера всякоразней.

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

Но пока я все это делал, то решил, что надо все делать по-другому )))

 

14
Ноя
2020

Ночная шиза

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

Попил чаю, подумал о вечном.

Смотрю еще раз и вдруг вижу, что старый фон шипов выводится не командами MOV, а BIS! Т.е. вместо затирания старых фаз сохраненным фоном, этот фон накладывается на выведенные шипы. И новые фазы так удачно рисуются, что не вылезают за пределы старых. На экране выглядит так, как будто шипы торчат, а на самом деле там уже нарисовалось еще кучу фаз убирания и шипы убрались.

Ну и откуда там взялся BIS? В исходниках недельной давности там MOV. А потому что нефиг в три часа ночи оптимизировать вывод спрайтов!