Category: Разработка

27
Мар
2025

Релиз Дейва!

Dangerous Dave in the Haunted Mansion для БК0011М+AZBK опубликован!
Образ диска доступен к скачиванию после регистрации:

https://hof.maxiol.com/top/10

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

Прошивка AZBK должна быть свежей.

Последняя версия эмулятора GID поддерживает конфигурацию БК0011М+AZBK, пока что с небольшим глюком звука на заставке (на железе такого глюка нет).

Игра поддерживает:

  • стереозвук на AY (если Бабка кинет нож слева, то игрок и услышит это слева, и т.д.)
  • управление как от джойстика, так и от клавиатуры
  • скриншоты по клавише ШАГ или по заданной комбинации на джойстике
  • рекорды/аналитику игры/ачивки на сервере HOF

В игру добавлена секретная область, которой нет в оригинале, а также новый монстр — «МегаЛипучка», встретить которого еще надо постараться 🙂

 

15
Мар
2025

Dave готов!

Вчера я доделал Дейва, так что проект успешно завершен. Наверняка будут еще правки, как это было с Goonies, так как реальная «эксплуатация» выявляет баги всегда. Но в целом все готово.
На финальном этапе я переделал переназначение управления от джойстика, т.к. понадобилась еще одна кнопка — для создания скриншотов текущего экрана игры. Скриншоты создаются на лету и пишутся на карту памяти AZBK, оттуда их можно забрать по сети или просто воткнув карту в PC. С клавиатуры скриншот тоже можно сделать — я отвел для этого клавишу СБР. Добавление новой кнопки для джойстика потребовало изменения интерфейса и я изменил его более глобально, как давно хотел, но было лень. Я добавил в окно Joystick Setup вывод текущего состояния порта 177714 в восьмеричном виде. Это позволило наглядно показать какие же там биты поднимаются при нажатии различных кнопок джойстика, а заодно получился инструмент для теста джойстиков:

Я использую с БК джойстик от PS/3, подключенный к БК по Bluetooth (мерси, Братец Кролик!!). И этот джойстик — лучшее, что было у меня за всю историю БК 🙂 Куча кнопок, которые можно назначить на разные действия, плавный ход, никаких дурацких «палок» — просто песня! И вот теперь с этого манипулятора стало возможно делать скриншоты игры в любой момент просто нажатием пальца.

Получение скриншота это просто одна из команд AZBK, по ней записывается текущий экран с учетом видеорежима, слоев и палитры. В дальнейшем этот файл нужно декодировать в понятный вид с помощью отдельной утилиты, которая пока не доделана автором. Но игра скриншоты делает успешно.
Другими последними доделками были разборки с сетью, оказалось, что если из контроллера не прочитать ответ на свой сетевой запрос, то контроллер отрубает сеть. А потом включает ее при поступлении следующей команды. Так что тут пришлось приделать костыль, а в дальнейшем в AZBK будет команда «послать пакет по сети и не ждать ответа», которая таких проблем не вызовет.

Дейв посылает на сервер HOF довольно много инфы в течении игрового процесса:

— какого монстра убил Дейв
— какой монстр убил Дейва
— время прохождения уровня
— каким дейвасом пользуется игрок — джойстиком или клавой
— очки-рекорды
— с каким количеством жизней вышел из уровня
— сколько всего убито монстров за уровень
— сколько собрано предметов
— сколько раз выстрелил
— сколько раз попал

Это позволит набрать интересной статистики, я надеюсь. И все это пока не до конца поддержано на сервере HOF, пока что нет возможности просмотреть эти данные в удобном виде. Это одна из причин, почему я пока не выкладываю Дейва в общий доступ, тогда часть инфы будет потеряна. Также на подходе поддержка сетевых фич в самом крутом эмуляторе БК — gid. Не у всех есть аппаратный AZBK, а этот эмуль успешно эмулирует все его фичи, кроме сетевых (пока что), но автор над этим работает. Помимо отсутствия сетевых фич в эмуляторе пока еще не исправлена ошибка с воспроизведением звука через DMA, которая уже исправлена в новой прошивке AZBK. Эта фича используется только на заставке, в остальной игре весь звук играется с помощью обычного AY-8910, так что это не особо критично.

Так что Дейв готов, но я вам его пока не отдам (с) Почтальон Печкин

05
Мар
2025

Дейв. Финишная прямая.

Внезапно (как обычно) Дейв оказался почти готов. Небольшая задержка произошла из-за внедрения сетевых функций, которые оказались не совсем готовыми в самом контроллере AZBK. Вот как это происходило.

Взяв в качестве примера игру «Тетрис», модифицированную Максом для работы с сервером HOF (Hall Of Glory), я стал внедрять сетевые фичи в Дейва. Сервер HOF представляет собой сайт https://hof.maxiol.com/ , базу данных с учетками игроков и таблицами их рекордов, данными всех игр, которые поддерживают AZ (эти контроллеры есть для различных платформ, не только БК, но и ДВК, MSX, УКНЦ) и т.д. Модифицированнй тетрис — первая игра, которая обучена хранить рекорды на этом сервере, а также регистрировать игроков и авторизоваться. Дейв, похоже, будет второй такой игрой.

Далее.

 

14
Фев
2025

Тятя, тятя, наши сети…

AZBK помимо прочих фич добавил БКшке сетевые функции. Наконец-то стало возможным сделать в играх онлайн-таблицы рекордов. Прикручивать эти фичи я стал постепенно — взял с из доки примеры кода и описания команд и решил сначала сделать отдельную программку, которая бы эти функции использовала так, как мне нужно в Дейве.

Читать дальше

22
Янв
2025

Призрак, стирающий память

Заголовок вполне подойдет для рассказа ужасов 🙂 Но на самом деле речь о Призраках в Дейве. Алекс нашел баг, который проявлялся только в 5-м уровне, да и то не всегда. Выглядело это так: Дейв появляется в начале уровня, к нему подлетает Призрак, Дейв его убивает, идет дальше и там его душит Зомби. Все ок (хмм), но после повторной загрузки уровня наблюдаем или черный экран или Дейв появляется черт знает где, но не в начале уровня.
Так как проявлялось это только в 5-м уровне, то сначала я грешил на какие-то проблемы в данных. Но сам я по этому лабиринту бегал неоднократно и никаких проблем не замечал, хотя Призраков этих там валом и убивал я их пачками и Зомби тем более сто раз душили. Но в том и суть бета-тестинга, что другой человек делает все по-другому и может найти баги, которые только при его стиле игры вылезут.
Проблем с данными никаких не обнаружилось. Вдобавок, сам я никак не мог повторить этого эффекта. Ну, идем, ну убиваем Призрака, ну душит Зомби — и все ок, никаких черных экранов. Выяснилось, что Алекс использует в игре управление от клавиатуры, хотя я все время играл с джойстика. Ок, пробую с клавиатуры. Несколько раз все ок, но потом все-таки я напарываюсь на черный экран. Бинго!
Почему возник черный экран стало ясно сразу — код инициализации лабиринта при рестарте был тупо запорчен. Нашел адрес, по которому была испорчена память, поставил точку остановки на факт записи по этому адресу. Теперь, если вдруг возникнет запись в этот адрес — эмулятор остановится и покажет кусок кода, который пытается это сделать. Это ж круто!
Играю снова, снова добиваюсь глюка и черного экрана, но никакой остановки не возникло. Почему? Потому что теперь память запорчена по другому адресу. Отлично. Терпеть не могу подобные глюки. Это может делать какая угодно процедура, сбившаяся с пути истинного…
Начинаю изучать КАК, собственно, запорчена память. В обоих случаях одинаково — по одному адресу записано число 12, а содержимое следующей ячейки памяти декрементировано. Это уже зацепка. Беру и наудачу ищу в исходниках текст MOV #12, — и нахожу MOV #12,124(R0) ! Хотя, конечно, это удача, ведь такой команды могло и не быть, число могло быть получено в результате каких-то операций, а не прямо вот записью конкретно 12. И что нашлось рядом? Команда DEC 126(R0). Это попадание в десятку.
Так-с, и что это за подпрограмма? Это обработка попадания в монстра. Все-таки дело в убийстве Призрака, а не в последующей смерти от рук Зомби. Очевидно, что в R0 образовался какой-то левый адрес. Но почему? Это уже второй этап. Ставлю точку остановки на эту подпрограмму и иду стрелять Призраков.
И фигушки — остановки происходят, но все данные нормальные. Призраки помирают как положено и никаких глюков не возникает. Как так-то? Пришлось смотреть видос от Алекса и изучать как именно он расправляется с Призраком. И тут я понимаю, что стреляет он их неправильно, ведь изначально Призрак нематериален и стрелять в него бесполезно. Уязвимым он становится лишь после того, как коснется Дейва и материализуется. Но Алекс палит в Призрака стоя на месте в то время, а ведь надо отойти! И что в итоге получается? Пробую сам так же сделать и на какой-то раз ловлю момент, когда в R0 явно левое значение — 1557, ведь это адреса в нулевой странице, где код и никаких данных монстров. Смотрю пошагово как он там образовался и нахожу чтение из таблицы, которая в переключаемой странице AZBK. Но таблица содержит корретные данные, а прочитана ерунда. Значит, эта страница не было подключена в нужный адрес в нужное время. И как же так, ведь в начале цикла включаются нужные страницы, пусть во время цикла и включаются туда же другие… А… не в начале цикла включаются, а перед началом цикла…. А в самом цикле там черт знает что творится….
И как оно раньше работало???
Ну, так и  работало — просто я убивал Призрака как положено и этот цикл просто исполнялся только один раз. А вот Алекс умудрился убить по-другому. А Призрак, в отместку, стер память.
19
Дек
2024

Глюк AZBK исправлен, клавиатуда и т.д.

Вчера @maxiol вплотную занялся изучением причин глюка с несинхронным применением изменений регистров скролла, сменой адреса отображаемой видеопамяти и, собственно, отображением этой видеопамяти.

Далее

 

18
Дек
2024

Мультики и оптимизация

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

Далее

13
Дек
2024

Начальная заставка и приколы эмулятора

Доделал начальную широкоэкранную заставку и прицепил ее к игре. Написал код, который крутит заставку вправо-влево изменяя регистр горизонтального скролла AZBK и тут вылезла проблема — картинка дергалась при перемещении. Не постоянно, а иногда застревала

Подробнее