Новости по выпуску физических копий!
Братец Кролик прислал новую инфу по созданию боксов для физических копий моего софта для БК. Вот так выглядит бокс «с пылу, с жару» для 3-х дюймовой дискеты.
Блог разработчика
Братец Кролик прислал новую инфу по созданию боксов для физических копий моего софта для БК. Вот так выглядит бокс «с пылу, с жару» для 3-х дюймовой дискеты.
Сегодня доделал открытие дверей и переход между локациями:
— «дверь назначения» теперь автоматически выводится открытой при телепортации
— сделана коррекция Дейва в дверь при уходе
— переделано управление бегом, теперь Дейв сразу останавливается, если отжата клавиша бега на клавиатуре или джойстике. Раньше у Дейва были принцевские замашки, т.е. движение должно было доиграться до конца
Потихоньку пополняю список того, что можно добавить или исправить в Goonies:
— задание кнопок паузы и меню на джойстике
— сохранение настроек игры на диск
— публикация рекорда и открытых секретов по сети (если обнаружен AZBK)
— исправить затирание части «табло» максимально набранным шмотом
— исправить провал сквозь пол (Alex Shestipaloff снова умудрился провалиться)
Игроки нашли еще один баг — при приземлении из прыжка «наискосок» иногда Балбес проваливался сквозь пол. Дело было в одновременном обнаружении и стены в полете и пола, но первой срабатывала обработка обнаружения стены, хотя пора было уже приземляться на пол. Исправлено.
Исправил кучу багов:
Добавлено:
Под конец нарвался на самый мерзкий тип бага — портится память, причем неясно в какой момент. Причем портится всего одна ячейка, а не какой-то там глобальный участок. Но этого хватает, чтобы уже потом все зависло в какой-то момент. Искать такие баги можно долго. Приходится сидеть и вспоминать что из последних правок могло так повлиять. А если не из последних? Если это вообще древняя ошибка и вылезла она только сейчас, потому что начались попытки пройти всю игру от начала до конца и задействована целая куча механизмов… Но мне повезло — ошибка вылезла на экран в прямом смысле: в одном из спрайтов Балбеса появилась лишняя точка. Синяя. Причем в левом спрайте, которые я добавил на днях.
Сначала я подумал, что ошибся при сохранении спрайтов из редактора или в маске — но нет, все там было ОК. Нашел этот спрайт в памяти при загруженной игре — при старте он был в норме. Сравнил с записанным состоянием эмулятора, где спрайт был уже запорчен, таким образом нашел конкретный адрес в памяти, который портился. Адрес 130716 на странице ОЗУ с номером 1. И что с этим делать дальше?
Гружу игру, гоняю — спрайт не портится. Прохожу пару уровней, беру всякие предметы — не портится, зараза. Начинаю вспоминать что я такого делал в прошлый раз. А я прошел там со второго уровня до пятого! Много чего делал. Жаль, что в эмуляторе нет отладочной фичи «останов при записи в выбранный адрес памяти», тогда бы можно было отловить этот момент. Написал автору эмулятора, авось добавит такое в будущей версии. Но баг-то надо искать сейчас, собирался же релиз выпустить, а тут такое.
Долго я мучал игру — спрайт не портился, хоть убей… Что за адрес такой? Там раньше вообще было пусто, потому я туда и добавил новые спрайты. Посмотрю таблицу меток, авось есть что по этому адресу на других страницах. Наверное где-то страница не переключается перед записью в этот адрес и попадает на спрайт. Но такого адреса в таблице меток не нашлось. Зато нашелся адрес 30716 и это переменная offset от самого Балбеса. При каждом новом спрайте туда пишется смещение относительно старого положения на экране, таких мест куча, но ведь это не 130716, это вообще на 0-й странице, которая не переключается…
В запорченных вариантах спрайта в этом месте было значение то 2, то -2. Что-то мне это напоминает. Перелопатив исходники, я нашел-таки место, где была строчка mov #2,@#offset. И да, это была та самая ошибка! Потому что процедура работала в расширенной памяти и при линковке тут получилось значение offset+100000. Таким макаром значение писалось не в 30716, а в 130716, где и был спрайт.
И что это была за процедура? Это была обработка столкновения Шерифа с Балбесом, когда Шериф толкает Балбеса и отпихивает его на 2 байта вперед или назад (-2). То есть я мог бы долго бродить по игре, но так и не нашел бы ошибку, пока не столкнулся бы с Шерифом…
Едем дальше!
Сегодня удачно поработал:
Оптимизация «всего понемногу» в итоге дала кумулятивный эффект — в самых нагруженных местах все стало бегать вполне весело! И это очень радует, потому как именно эти тормозные места и были основной причиной задержки релиза.
Теперь надо довылавливать баги (нашел пару штук сам), утоптать код в нулевую страницу (сейчас он вылезает в экран при загрузке) и сделать загрузку игры в MKDOS.
Т.к. весь функционал игры уже готов и осталась свободная память, пришел момент для использования ее в борьбе за скорость:
Нужно еще сделать вывод «газа» из труб по такому же принципу, как и водопады — вывести две фазы анимации на разные экранные страницы и дальше вся анимация уже только за счет переключения страниц, а вывода спрайтов нет. Этим еще дополнительно разгрузятся «тяжелые» места.
Вот так начнешь рассматривать старинные портреты… Оказывается, идею с выводом водопадов не постоянно, а путем однократного вывода и последующей анимацией потока только за счет переключения страниц экрана я так и не реализовал! Сегодня начал борьбу за общую оптимизацию и обнаружил это дело. Реализовал старую задумку, теперь водопады никак не влияют на общую скорость:
А также, сегодня доделал все, что связано с «пасхальной» локацией: вход, выход с возвратом в игру и на этом хватит терять на ней время.
Прописал скрипт демо-режима. Тут пришлось отрубать ИИ Шерифу (как и стражнику в демо-режиме Принца), т.к. Балбес-то ходил и прыгал по скрипту, а вот Шериф мог и не явиться на встречу, т.к. у него каждый раз могут быть разные соображения насчет того как и куда идти. Собрал вместе заставку и демо:
Свежие комментарии