Tagged: goonies

24
Янв
2024

The Goonies 1v7

  • исправлена работа с “битым” портом джойстика
  • добавлена обработка второй кнопки джойстика – работает как дополнительная кнопка “Вверх/Прыжок”
08
Янв
2024

Goonies, new fix

Игроки нашли еще один баг – при приземлении из прыжка “наискосок” иногда Балбес проваливался сквозь пол. Дело было в одновременном обнаружении и стены в полете и пола, но первой срабатывала обработка обнаружения стены, хотя пора было уже приземляться на пол. Исправлено.

25
Дек
2023

Еще немного, еще чуть-чуть…

Исправил кучу багов:

  • исправлен тот самый противный баг с помиранием во время удара
  • исправлен глюк с Призраком на границе экрана
  • растущая стена переставала расти, если Балбес успевал перейти в соседнее окно
  • донастроен артефакт Часы
  • обнаружено единственное на всю игру место, где можно залезть по канату, который кончается на верхней границе окна, теперь это работает

Добавлено:

  • демо и заставка теперь прерывается и с помощью джойстика
  • поддержка MKDOS
24
Дек
2023

Финальная (надеюсь) битва с багами

Под конец нарвался на самый мерзкий тип бага – портится память, причем неясно в какой момент. Причем портится всего одна ячейка, а не какой-то там глобальный участок. Но этого хватает, чтобы уже потом все зависло в какой-то момент. Искать такие баги можно долго. Приходится сидеть и вспоминать что из последних правок могло так повлиять. А если не из последних? Если это вообще древняя ошибка и вылезла она только сейчас, потому что начались попытки пройти всю игру от начала до конца и задействована целая куча механизмов… Но мне повезло – ошибка вылезла на экран в прямом смысле: в одном из спрайтов Балбеса появилась лишняя точка. Синяя. Причем в левом спрайте, которые я добавил на днях.

Сначала я подумал, что ошибся при сохранении спрайтов из редактора или в маске – но нет, все там было ОК. Нашел этот спрайт в памяти при загруженной игре – при старте он был в норме. Сравнил с записанным состоянием эмулятора, где спрайт был уже запорчен, таким образом нашел конкретный адрес в памяти, который портился. Адрес 130716 на странице ОЗУ с номером 1. И что с этим делать дальше?

Гружу игру, гоняю – спрайт не портится. Прохожу пару уровней, беру всякие предметы – не портится, зараза. Начинаю вспоминать что я такого делал в прошлый раз. А я прошел там со второго уровня до пятого! Много чего делал. Жаль, что в эмуляторе нет отладочной фичи “останов при записи в выбранный адрес памяти”, тогда бы можно было отловить этот момент. Написал автору эмулятора, авось добавит такое в будущей версии. Но баг-то надо искать сейчас, собирался же релиз выпустить, а тут такое.

Долго я мучал игру – спрайт не портился, хоть убей… Что за адрес такой? Там раньше вообще было пусто, потому я туда и добавил новые спрайты. Посмотрю таблицу меток, авось есть что по этому адресу на других страницах. Наверное где-то страница не переключается перед записью в этот адрес и попадает на спрайт. Но такого адреса в таблице меток не нашлось. Зато нашелся адрес 30716 и это переменная offset от самого Балбеса. При каждом новом спрайте туда пишется смещение относительно старого положения на экране, таких мест куча, но ведь это не 130716, это вообще на 0-й странице, которая не переключается…

В запорченных вариантах спрайта в этом месте было значение то 2, то -2. Что-то мне это напоминает. Перелопатив исходники, я нашел-таки место, где была строчка mov #2,@#offset. И да, это была та самая ошибка! Потому что процедура работала в расширенной памяти и при линковке тут получилось значение offset+100000. Таким макаром значение писалось не в 30716, а в 130716, где и был спрайт.

И что это была за процедура? Это была обработка столкновения Шерифа с Балбесом, когда Шериф толкает Балбеса и отпихивает его на 2 байта вперед или назад (-2). То есть я мог бы долго бродить по игре, но так и не нашел бы ошибку, пока не столкнулся бы с Шерифом…

Едем дальше!

 

20
Дек
2023

Получилось!

Сегодня удачно поработал:

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

Оптимизация “всего понемногу” в итоге дала кумулятивный эффект – в самых нагруженных местах все стало бегать вполне весело! И это очень радует, потому как именно эти тормозные места и были основной причиной задержки релиза.

Теперь надо довылавливать баги (нашел пару штук сам), утоптать код в нулевую страницу (сейчас он вылезает в экран при загрузке) и сделать загрузку игры в MKDOS.

17
Дек
2023

Борьба за скорость

Т.к. весь функционал игры уже готов и осталась свободная память, пришел момент для использования ее в борьбе за скорость:

  • отмена разворота черепов, скелетов и мышей удалась и дала нехилый прирост скорости ))
  • при выводе на четный адрес экрана попадается спрайт четной ширины – он выводится пословно
  • отлавливаются и спрайты шириной 3 и 5 байт, причем при выводе как по четным, так и по нечетным адресам экрана и при выводе та часть спрайта, которая может быть выведена пословно – выводится пословно. Прирост скорости налицо – беготня скелетов стала куда активней.

Нужно еще сделать вывод “газа” из труб по такому же принципу, как и водопады – вывести две фазы анимации на разные экранные страницы и дальше вся анимация уже только за счет переключения страниц, а вывода спрайтов нет. Этим еще дополнительно разгрузятся “тяжелые” места.

12
Дек
2023

Вот так начнешь рассматривать старинные портреты…

Вот так начнешь рассматривать старинные портреты… Оказывается, идею с выводом водопадов не постоянно, а путем однократного вывода и последующей анимацией потока только за счет переключения страниц экрана я так и не реализовал! Сегодня начал борьбу за общую оптимизацию и обнаружил это дело. Реализовал старую задумку, теперь водопады никак не влияют на общую скорость:

А также, сегодня доделал все, что связано с “пасхальной” локацией: вход, выход с возвратом в игру и на этом хватит терять на ней время.

 

07
Дек
2023

Заставка+демо

Прописал скрипт демо-режима. Тут пришлось отрубать ИИ Шерифу (как и стражнику в демо-режиме Принца), т.к. Балбес-то ходил и прыгал по скрипту, а вот Шериф мог и не явиться на встречу, т.к. у него каждый раз могут быть разные соображения насчет того как и куда идти. Собрал вместе заставку и демо:

29
Ноя
2023

Добавил звуков

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

  • добито управление воспроизведением фоновой музыки – глюки при рестарте игры обнаружил Alex Shestipaloff
  • добавил звуки рождения невидимых в данный момент Скелетов (сразу добавило похожести на геймплей оригинала)

Понемногу делаю локацию-пасхалку, из имеющихся спрайтов можно создавать всяческие штуки:

 

28
Ноя
2023

Чтоб тебя, Тэд из прошлого!

Отдал игру на бета-тест, уже есть результаты:

  • оказывается, я до сих пор не заблокировал СТОП!
  • при перезапуске игры теперь сохраняется статус вкл/выкл музыки и звуков

Так же добил прошлые баги:

  • +BUG: при выходе из второго в двери что-то мелькало и очки мигали
  • +BUG: приземление наискосок на замок – зависон
  • +BUG: урон от пули при уходе в телепорт
  • +BUG: пули летят сквозь стены?
  • +BUG: замок после открытия нарисовался ниже и потом при убийстве черепа все зависло

Три из них (“приземление наискосок на замок”,”замок нарисовался ниже”,”при выходе из второго…”) были следствием одной ошибки – переполнялся массив отложенного вывода элементов на второй экран. Такие комбо-действия как “открыл замок и тут же взял эликсир, а это вызвало срабатывание флага”,  вызывали больше изменений, чем планировалось. Увеличил место под массив.

Похоже, пришло время делать демо-режим, пасхалки и финальный мультик.