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

10
Май
2024

«Почему в вашем творчестве так много ремейков?»

Неоднократно задавали мне вопрос, почему я делаю именно ремейки известных игр, вместо того, чтобы создать что-то свое. Тут два момента.
Во-первых, я моделист. Мне нравится делать модели техники в масштабе 1/35. Пока ты ее собираешь, то становится ясно, как на самом деле устроена эта машина.  И потом покраской и везерингом можно доводить их до состояния похожести на настоящие. Вот пример моего модельного увлечения:

Музыкантам тоже интересно разобраться в какой-то сложной партии — «Как же он умудряется это сыграть? Ведь у него тоже две руки!». И когда разобрался и у тебя самого получилось так сыграть — это кайф. Вместе с этим ты получаешь опыт и пополняешь багаж удачных решений разных задачек.

Тоже самое и с ремейками игр — в процессе работы над игрой ты узнаешь о ней и ее механизмах гораздо больше, чем просто в процессе игры. Когда я играл в Дейва, я не задумывался как именно монстры реагируют на происходящее. Там некогда особо думать, стрелять надо! 🙂 Тоже самое было и с Принцем — кто обращал внимание на то, что в третьем лабиринте есть одна-единственная решетка на всю игру, которая издает звук опускания, когда ее не видно? Остальные решетки «звучат» только когда они видны на текущем экране. А ту решетку слышно всегда. А почему? Потому что она важна, к ней трудно успеть добежать, пока она не закрылась. И автор не поленился сделать так, чтобы сразу было слышно, что она начала опускаться и надо спешить. Весьма продуманная игра.
Именно поэтому мне интересно делать ремейки — я моделист. Я смотрю на Metal Gear (MSX) и думаю «Когда я буду ее делать, то наконец-то я разберусь что там к чему, во всех этих запутанных лабиринтах и радиопереговорах непонятно с кем!» 🙂
А сюжет для своей игры у меня тоже постепенно зреет. Придет время — сделаю и ее.
10
Май
2024

Обучаем Бабуляторов

Создание интеллекта монстров — одна из интересных задач в ремейках игр. Кто-то вооружается дизассемблерами и ищет в коде оригинальной игры такие процедуры. У меня другой метод — я просто изучаю логику поведения этих самых монстров в оригинальной игре  и потом делаю свои алгоримы на основе этих наблюдений. Если в итоге мои монстры ведут себя также как в оригинале — значит мне удалось разгадать задумку автора.
Первым делом я обучил Бабок и Зомби обнаруживать ямы и стены, это само собой. Затем стал смотреть, как они реагируют на Дейва. Зомби — самые простые в этом плане. Они бродят от стены к стене, ожидая появления Дейва на своей горизонтали или ниже. Если Дейв появился на их горизонтали — Зомби сразу же поворачиваются в его сторону и бредут к нему. Если на пути им вдруг встретилась яма или стена, то Зомби поворачивают назад и делают от 1 до 5 шагов в обратном направлении, уже не обращая внимания на Дейва. Иначе монстр просто зациклится в бесконечных поворотах у стены — «Дейв в переди! Блин, стена, разворот. Но Дейв на этом уровне, поворачиваем  к нему! Блин, стена…»
Изначально, кстати, я по привычке сделал обнаружение стены между Дейвом и монстром, чтобы монстр не реагировал на Дейва, если между ними стена. Но оказалось, что в оригинале монстры видят Дейва сквозь стены и реагируют на него. Бабки даже ножи кидают в такие стены. Пришлось процедуру выкинуть пока.
Бабки ведут себя гораздо хитрее, чем Зомби. Во-первых, они не приближаются к Дейву, если есть такая возможность, а поворачивают назад, отходят и потом уже кидают нож. Но могут и не кинуть, тут уже явно применен генератор случайных чисел. Пришлось подбирать подбирать подходящее значение порога и для генератора случайных чисел, чтобы Бабка не кидалась ножами как пулемет, но и не делала это раз в пятилетку. Во-вторых, Бабка не сразу реагирует на то, что Дейв появился на ее горизонтали. Она вполне может пройти шагов пять и не обернуться, даже если Дейв идет у нее за спиной. Но при встрече с препятствием Бабуляторы поступают также, как Зомби — поворачивают назад и делают случайное количество шагов.
Таким образом, в алгоритме есть коллизия — если Бабка находится слишком близко к стене и при этом слишком близко к Дейву, то она тоже может зациклиться в своих попытках и от Дейва отойти на расстояние броска, и от стены удалиться после разворота. В оригинале такое происходит — Бабка начинает вертеться вокруг Дейва бесконечно на одном месте. Не думаю, что это стоит копировать, поможем Бабуле разобраться в ситуации 🙂
На данный момент Бабки уже почти все делают как надо и даже делают движения броска. Осталось выдать им ножи…
07
Май
2024

Бабуляторы!

Все время думал, что в Дейве ножами кидаются Бабки. Как оказалось, так думал не один я, но и многие другие игроки. В своем время Джона Ромера даже специально спрашивали об этом персонаже и оказалось, что это мужик-горбун, да еще и Игорь:

«Old lady»

The knife-throwing creature which is first encountered on upper floors of the first level was affectionately called «old lady» by many fans, though it is actually a male hunchback, similar to classical Igor from Frankenstein movies.

Итак, сегодня Бабуляторы появились и в моем ремейке Дейва:

Спрайты все еще мигают, так как фикса эмулятора пока еще нет. Честно говоря, они мигают куда мощнее, это я уже изголяюсь, чтобы ролик записать более-менее прилично 🙂 Когда-нибудь проблема будет пофикшена и сразу все перестанет мигать. А пока — пишу дальше так.

 

 

06
Май
2024

Зомби обзаводятся мозгами

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

 

30
Апр
2024

Накрылось видео — займусь пока звуками

Так как с выводом на блиттер возникли проблемы (подробно описанные в предыдущем посте), решил пока заняться звуками из Dave. Формат оригинальных файлов звука уже нашел, изучаю. В AZBK можно выводить звук и на AY и на 2AY и на Covox…

30
Апр
2024

Внезапные грабли

Графика в текущем проекте (Dave) выводится с помощью AZBK, а точнее с помощью одной из графических фич AZBK — блиттера. Суть «азбучного» блиттера состоит в том, что ему можно давать пакет команд, который он читает себе в буфер и потом выполняет уже самостоятельно, не отнимая процессорного времени.

Читать далее