Goonies, new fix
Образ обновлен:
- исправлено задание управление от джойстика (блокировка дребезга кнопок)
- исправлены ошибки при ударах с ускорителем
Блог разработчика
Образ обновлен:
В Новый Год — с новым проектом!
Zeliard мне всегда нравился, проходил его с удовольствием. Почему не сделать его для БК?
Проблем тут две — скроллинг в окне и многоцветные спрайты. Скроллинг я решил потестить первым делом. В редакторе лабиринтов от Goonies набил примерный лабиринт (за основу взят уровень «Cavern of Riza»), получилось вот так:
Измерения по таймеру БК показывают, что после вывода окна счетчик от 40000 успевает досчитать до 36617. Это, конечно, много. В Goonies он достигает таких значений уже после обсчета и вывода всех объектов. Значит, чем больше будет потрачено на обработку объектов, тем медленее будет итоговый скроллинг. Ну, запас небольшой есть 🙂
С цветастыми спрайтами сложнее — тут надо прикидывать что можно нарисовать и как это будет смотреться в итоге. А также какую палитру использовать — опять ограничение «белых штанов Принца» — тут есть статуи по бокам, которые должны оставаться одного цвета, если будет меняться палитра. Сам Zeliard работает и в CGA и вообще в монохромном режиме, выглядит оно там, правда, не очень. На БК в CGA-палитре смотрится так:
Все эти проблемы решаются легко и просто c помощью магического девайса AZBK — там и цвета и блиттер уже есть. Но хочется и на обычной БКшке чтобы работало в каком-то виде.
Посмотрим, что из всего этого получится.
С Наступающим!
Картинка в заголовке отсюда: https://www.boredpanda.com/pixelated-christmas-ornaments-adam-crockett
Manwe Sands нашел ошибку — в MKDOS загрузка не работала как надо. Исправлено. По старой ссылке доступна исправленная версия.
Manwe — спасибо! Всех с наступающим!
Итак, сегодня игра готова к публикации.
Скачать образ диска: "The Goonies" для БК-0011М
Последние изменения:
Исправил кучу багов:
Добавлено:
Отловил баг, который возникал при исчерпании жизни Балбеса. Вредный баг, я на него напарывался редко, но @shestipaloff нашел его сразу. Повторить его не удавалось, т.к. возникал он при смерти в куче врагов. Как выяснилось, он вообще был не связан с врагами, так помереть можно было и в водопаде, в момент вывода спрайта с ударом. В этот момент я его и поймал за хвост.
Завтра буду его править, а то уже 2:22 на часах…
Под конец нарвался на самый мерзкий тип бага — портится память, причем неясно в какой момент. Причем портится всего одна ячейка, а не какой-то там глобальный участок. Но этого хватает, чтобы уже потом все зависло в какой-то момент. Искать такие баги можно долго. Приходится сидеть и вспоминать что из последних правок могло так повлиять. А если не из последних? Если это вообще древняя ошибка и вылезла она только сейчас, потому что начались попытки пройти всю игру от начала до конца и задействована целая куча механизмов… Но мне повезло — ошибка вылезла на экран в прямом смысле: в одном из спрайтов Балбеса появилась лишняя точка. Синяя. Причем в левом спрайте, которые я добавил на днях.
Сначала я подумал, что ошибся при сохранении спрайтов из редактора или в маске — но нет, все там было ОК. Нашел этот спрайт в памяти при загруженной игре — при старте он был в норме. Сравнил с записанным состоянием эмулятора, где спрайт был уже запорчен, таким образом нашел конкретный адрес в памяти, который портился. Адрес 130716 на странице ОЗУ с номером 1. И что с этим делать дальше?
Гружу игру, гоняю — спрайт не портится. Прохожу пару уровней, беру всякие предметы — не портится, зараза. Начинаю вспоминать что я такого делал в прошлый раз. А я прошел там со второго уровня до пятого! Много чего делал. Жаль, что в эмуляторе нет отладочной фичи «останов при записи в выбранный адрес памяти», тогда бы можно было отловить этот момент. Написал автору эмулятора, авось добавит такое в будущей версии. Но баг-то надо искать сейчас, собирался же релиз выпустить, а тут такое.
Долго я мучал игру — спрайт не портился, хоть убей… Что за адрес такой? Там раньше вообще было пусто, потому я туда и добавил новые спрайты. Посмотрю таблицу меток, авось есть что по этому адресу на других страницах. Наверное где-то страница не переключается перед записью в этот адрес и попадает на спрайт. Но такого адреса в таблице меток не нашлось. Зато нашелся адрес 30716 и это переменная offset от самого Балбеса. При каждом новом спрайте туда пишется смещение относительно старого положения на экране, таких мест куча, но ведь это не 130716, это вообще на 0-й странице, которая не переключается…
В запорченных вариантах спрайта в этом месте было значение то 2, то -2. Что-то мне это напоминает. Перелопатив исходники, я нашел-таки место, где была строчка mov #2,@#offset. И да, это была та самая ошибка! Потому что процедура работала в расширенной памяти и при линковке тут получилось значение offset+100000. Таким макаром значение писалось не в 30716, а в 130716, где и был спрайт.
И что это была за процедура? Это была обработка столкновения Шерифа с Балбесом, когда Шериф толкает Балбеса и отпихивает его на 2 байта вперед или назад (-2). То есть я мог бы долго бродить по игре, но так и не нашел бы ошибку, пока не столкнулся бы с Шерифом…
Едем дальше!
Свободная память осталась, так что можно слегка разгуляться:
Исправил баги, добавленные при последних изменениях в процедурах вывода, а также некоторые старые:
Осталось еще пару глюков победить, сделать работу из MKDOS и буду релизить. Есть еще идеи по ускорению, но может потом выпущу вторую версию, если эффект ускорения будет ощутимым.
Сегодня удачно поработал:
Оптимизация «всего понемногу» в итоге дала кумулятивный эффект — в самых нагруженных местах все стало бегать вполне весело! И это очень радует, потому как именно эти тормозные места и были основной причиной задержки релиза.
Теперь надо довылавливать баги (нашел пару штук сам), утоптать код в нулевую страницу (сейчас он вылезает в экран при загрузке) и сделать загрузку игры в MKDOS.
Свежие комментарии