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

25
Ноя
2023

Внезапный индикатор

Попытался пройти игру и, конечно, список багов снова заколосился:

  • зависание при уроне — как оказалось, при переходе в новое окно не освобождались буферы фона для пуль, если пуля не закончила полет до смены окна
  • при уходе в дверь перехода на новый уровень применялись старые спрайты ухода
  • Шериф умудрился застрять в глыбе при выводе окна — на скрытых окнах глыбы не перемещаются, а при выводе окна Шериф как раз оказался впечатанным в такую глыбу. Редкий случай, однако. Мне повезло его отловить.

И хит дня — баг «зависание черт знает почему» при исчезании объекта с экрана. Вроде бы Шерифы давно уже успешно прибиваются глыбами, но тут вдруг такой случай вызвал зависание. Начал смотреть что не так… Оказалось, что при выводе запорчен фиктивный спрайт «пустота» размером 1х1, который я разместил с адреса 300. Ок, пытаюсь выяснить когда же он умудрился запортиться. Как оказалось он портится сразу при загрузке игрой своих файлов данных через EMT 36. Я и забыл, что EMT 36 использует область с адреса 300 не смотря на то, что ей указан другой адрес блока параметров. Как же это вообще работало раньше? А просто раньше файлы грузились без ошибки, а теперь вдруг при чтении через EMT 36 вылезла ошибка при загрузке файла HISUB.DAT, потому что его размер вылез за границу 40000. И EMT 36 гордо прописало байт 4 по адресу 301, в итоге ширина «спрайта» стала равна 2001 вместо 1.

Вот такой внезапный индикатор вылезания файла за границу 16К образовался.

 

24
Ноя
2023

Список багов уменьшается!

Сегодня был день в стиле «Фигаро тут, Фигаро там», так что на ночь глядя прибил только два бага:

+BUG: при отключенной музыке нет паузы после game over
+BUG: скелет убит под землей?? boom был ниже!

И,  внезапно, осталось в списке:

BUG: мешок давит по новым координатам

Так что пора попробовать пройти игру и пополнить список приступать к финальной заставке, начальному демо и внедрению пасхалки!

Музыку!

23
Ноя
2023

А баги летят, баги…

Сегодняшние фиксы:

  • +BUG: если Балбес получал толчок во время удара, то проваливался
  • +BUG: скелет и шерифа нельзя было перепрыгнуть
  • +BUG: Шериф наносил урон, когда на экране он еще дрыгает ногами
  • +BUG: после урона от пули не было обновления «табло»
22
Ноя
2023

Продолжаю битву с багами

Исправил вчерашний баг с переполнением списка изменений. Было два метода решения:

  • красивый метод — оптимизировать само пополнение списка, т.е. искать адрес среди внесенных и править имеющуюся запись
  • тупой — увеличить место под сам список, чтобы хватило в любом случае

Я, конечно, пошел первым путем — оптимизировал работу со списком. И увеличил место под сам список.

А также исправлено:

+BUG: переполнение списка мигающих бонусов (оказалось, их может быть и больше 5 на один уровень)
+BUG: не было проверки на предмет сразу после залезания (не брал бонусы)

21
Ноя
2023

Хитрый баг

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

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

Ставлю точку остановки, смотрю что там — а там прямо в исполняемом коде какая-то чушь вместо одной из команд. Откуда-то взялся байт 367. Что за самомодифицирующийся код, который не заказывали? Отслеживаю момент, когда портится ячейка по этому адресу, начиная от телепорта, конечно же. Портится она при распаковке новой сцены. А чего на портится-то? А при применении списка изменений. При распаковке же сцена получается «свежая», с еще не выпитыми эликсирами, несобранными Гномами и невзятыми ключами. Вот список изменений и применяется.

Оказалось, составляется он неоптимально — если открыт секрет и на экране (и в лабиринте) появился бонус, то в список изменений пишется адрес в лабиринте и код этого бонуса, естественно. А когда бонус взят? В список изменений ДОБАВЛЯЕТСЯ замена этого бонуса на ноль. Итоге, ДВЕ записи изменений одного и того же места лабиринта. Вот список и переполнился, стали «применяться» левые данные по левым адресам, в итоге пострадал уже исполняемый код.

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

19
Ноя
2023

Последние подарочки

Победил баги сегодня:

  • BUG: добавить звук огня в подвальных лабиринтах — добавил
  • BUG: подарки с жизнями и опытом не работают — теперь все работает, можно брать «мешки» с бонусами в виде очков, жизни, опыта
  • BUG: Балбес проваливается в 18-03, во втором через флаг в земле? — исправлено

Осталось:

BUG: кость + пуля = порча фона — это мне видится самым муторным
BUG: при отключенной музыке нет паузы после game over
BUG: нота сзади верхняя пролетела без урона
BUG: если Балбес получает толчок во время удара, то проваливается
BUG: мешок давит по новым координатам
BUG: скелет убит под землей?? boom был ниже!

 

18
Ноя
2023

Снова Тэд из будущего

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

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

+BUG: шерифа давит мешком об потолок, но не давит. Потому что там и нет действия!
+BUG: скелет не запрыгивает? сцена 11-02, начало GOON DOCKS
+BUG: наискосок скелет летит странно
+BUG: увеличить угол нот, увеличить их скорость
+BUG: ноты при вопле выводить ближе
+BUG: скелет после появления в воздухе не сразу проваливается

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

Что осталось исправить:

BUG: Балбес проваливается в 18-03, во втором черем флаг в земле?
BUG: кость + пуля = порча фона
BUG: подарки с жизнями и опытом не работают
BUG: при отключенной музыке нет паузы после game over
BUG: нота сзади верхняя пролетела без урона
BUG: если Балбес получает толчок во время удара, то проваливается
BUG: добавить звук огня в подвальных лабиринтах
BUG: мешок иногда давит по новым координатам
BUG: скелет убит под землей?? boom был ниже!

17
Ноя
2023

Шериф и прерванный полет

Начал я сегодня очередной раунд борьбы с багами. Часть поборол:

+BUG: для призрака координаты пересчитываются раз в пятилетку
+BUG: флаг Призрака не возвращается после его ликвидации
+BUG: в золотом нет призрака?
+BUG: призрак не поражает и в конце он красный

Потом взялся за это:

BUG: скелет в прыжке 137070 не вызывает FIGHT?

Это я заметил, когда пытался стукнуть прыгающего Скелета во время его пребывания в воздухе. И Скелет меня проигнорировал. Потом я проверил это на Шерифах и выяснил, что когда ноги Шерифа выше уровня земли, он игнорирует Балбеса и его удары. Соответствующий комментарий даже был в коде. То ли это было «пусть об этом думает Тэд из будущего», то ли я думал, что в прыжках нечисть сбивать будет только маньяк, т.к. там велика вероятность самому огрести. Попробовал я сделать это на оригинальной игре MSX и открыл для себя новость — оказывается, если поймать Шерифа во время полета и стукнуть, то он падает вниз, но после падения не бежит себе дальше, а именно валяется и дрыгает ногами. Т.е. эта ситуация была авторами предусмотрена. Мне и в голову не приходило охотиться на Шерифов и бить их на взлете — я старался держаться от них подальше. Ну… что делать, пришлось внедрять и мне такой же трюк. Теперь Шерифа можно бить в полете. Вот так это выглядит:

В процессе отладки этого механизма я поймал эпичный скриншот, когда за мной гонялись сразу ДВА Шерифа:

 

Список оставшихся багов (он пополнился):

BUG: Балбес проваливается в 18-03, во втором черем флаг в земле?
BUG: кость + пуля = порча фона
BUG: скелет не запрыгивает? сцена 11-02, начало GOON DOCKS
BUG: подарки с жизнями и опытом не работают
BUG: при отключенной музыке нет паузы после game over
BUG: ноты при вопле выводить ближе
BUG: кости вообще не набиваются!
BUG: нота сзади верхняя пролетела без урона
BUG: если Балбес получает толчок во время удара, то проваливается

16
Ноя
2023

Забытые баги

Почему-то я потерял половину списка багов и сижу радуюсь, что мало осталось работы. А вот фиг там! Но сегодня неплохо пофиксил:

  • BUG: при спуске по лиане клавиша вниз — сделал наконец-то отмену автоповтора при слезании, а то Балбес не останавливался на этаже, если находил сразу же лиану вниз, а продолжал спускаться уже по ней
  • BUG: при пересечении экрана вниз кто-то сталкивается с Балбесом — а точнее, если голова Балбеса была в одном окне, а тело в другом, то нижняя координата считалась неверно. И потому он «занимал» весь экран с Y=0 по Y=25 и первый попавшийся враг в этом диапазоне наносил урон
  • BUG: иногда при сработке щита звук урона — да, при срабатывании щита не сбрасывался флаг и тут же назначался общий звук урона
  • BUG: при наколачивании нечисти удар в прыжке не считается? — удар считался, но набитая нечисть подсчитывалась только при ударе на земле
  • BUG: при накоплении мышь и череп одно и тоже?? — была кривая проверка

Что осталось на данный момент:

BUG: в золотом нет призрака?
BUG: Балбес проваливается в 18-03, во втором через флаг в земле?
BUG: кость + пуля = порча фона
BUG: скелет не запрыгивает? сцена 11-02, начало GOON DOCKS
BUG: подарки с жизнями и опытом не работают
BUG: при отключенной музыке нет паузы после game over
BUG: ноты при вопле выводить ближе

15
Ноя
2023

Движемся по списку багов

Сегодня список уменьшился на три пункта:

+no BUG: МОНЕТА СВЕРХУ НА ГНОМА = ЗАВИС?
+no BUG: монета в стену завис?
+BUG: при падении на череп и ударе проваливается

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

Пока что список багов выглядит так:

BUG: подарки с жизнями и опытом не работают
BUG: при спуске по лиане клавиша вниз !
BUG: при пересечении экрана вниз кто-то сталкивается с Балбесом?
BUG: при отключенной музыке нет паузы после game over
BUG: иногда при сработке щита звук урона