Effulgence
13 постов
13 постов
55 постов
8 постов
27 постов
8 постов
31 пост
История в моей ретро-инди-игре ASCIILL предполагает, что все уровни инопланетного храма находятся в зоне сильного радио-магнитного излучения.
В попытке сделать подходящий фоновый эффект пришел к такому матричному эффекту. Дополнительно разместил некоторые объекты параллаксом.
Стал ловить себя на том, что иногда не играю в игру, а смотрю на случайные переливы фонового эффекта. Более того, захотелось вообще убрать уровень и просто смотреть под музыку за трансформациями текстовых узоров.
В результате решил сделать отдельный режим в игре - «скринсейвер». Запустив из главного меню и включив любимую музыку, просто оставляю на мониторе фоном. На видео в начале поста можно посмотреть, что получилось. Как вам?
Саму игру, для которой сделал обновление со скринсейвером, можно посмотреть на страничке на Стиме.
Привет, ребята! Представьте, что несколько десятков лет назад вы включили ЭВМ с алфавитно-цифровым монитором. Может быть, этот компьютер находился в некой лаборатории. В рабочее время он использовался для различных расчетов, но вы дождались, когда все ушли, и запустили игру. Монитор мог отображать лишь символы, однако это не мешало погружению. Полумрак помещения и сиреневый цвет заката за окном шли комплектом к самой игре.
Одна такая игра только что вышла на Стиме. Буду рад показать вам основные ретро компоненты, которые я использовал, а также первую реакцию игроков на них.
Графика
«От графики свело олдскулы :)», — из отзыва на Стиме.
Со временем воспоминания легко могут исказиться. Кажется, что трава раньше была зеленее, а светящиеся буквы на мониторе красивее и волшебнее. Если сейчас включить древний компьютер, то картинка будет не та. Раньше было круче на этом же мониторе!
Моя задача — попробовать передать в игре то самое волшебное ретро чувство. Я аккуратно добавил красок и плавность перемещения в текстовый режим. Как вам?
Механика
«Геймплей интересный - такая смесь action и puzzle. Микс побегать и подумать», — из отзыва на Стиме.
Core-механику игры ASCIILL задумывал, как Metal Gear на Roguelike-поле с ловушками из Сапёра. Возможно, такая смесь звучит диковато, но получилось весьма играбельно, судя по отзывам. В основном режиме на разгадывание ловушек по цифрам тратится в среднем 20 % времени. В режиме «Челленж» (ежедневный случайный уровень, один для всех игроков) — до 70 %.
История
«Да, тексты огонь! Короткие, ненапряжные, и посмеялась местами от души», — из отзыва на Стиме.
Тайный агент Эскилл направляется в инопланетный храм, напичканный ловушками. Сильнейшее электромагнитное излучение препятствует прохождению видеосигнала, поэтому вся информация проходит лишь в виде текстовых символов.
Вот так нарратив объясняет графический стиль. Если бы не это электромагнитное излучение, то игра безусловно была в VR. Но условия, блин, сложные, поэтому пропускной способности канала хватает лишь на передачу картинки в расширенном текстовом режиме.
Задание на каждую миссию выдает Б.О.С.С. Нужно расхищать сокровища, уничтожать инопланетных тварей, нейтрализовывать охранную технику.
С каждым новым уровнем приходит понимание, что Б.О.С.С. не тот, за кого себя выдает, а Земля и агент Эскилл — лишь пешки в игре могущественных сил Вселенной.
Несмотря на пародийный стиль диалогов, решил добавил несколько сюжетных поворотов. Кстати, как бы вы расшифровали аббревиатуру Б.О.С.С.? Расшифровку дает агент Эскилл в финальных титрах.
Название
Графика в игре сделана из символов кодировки ASCII, что и определило первые пять букв названия. Как бы вы произнесли ASCIILL? Возможно как «Эсс Килл» или «Ass Kill». В игре действительно нужно надрать (Kill) кое-кому задницу (Ass). Хотя, возможно это лишь случайность, и такой интерпретации нет. Однако финальная схватка с галактическим гадом точно есть.
Буду очень рад, если вы зайдете на страничку игры в Стиме, чтобы посмотреть на графику/фишки и/или добавить в Wishlist на будущее. Спасибо!
Графика выполнена в ASCII стиле. Символы стилизованы под текстовый режим на CRT мониторе.
Интерфейс и вся графика сделана из символов.
Экран загрузки.
Посмотреть на игру ASCIILL, для которой делалась графика в таком стиле, можно на странице в Стиме.
Всем привет! Уже больше 30 лет я занимаюсь разработкой видеоигр и регулярно экспериментирую с различными игровыми механиками. В результате я пришел к идее создать игру по типу сапёра, но от третьего лица и на roguelike подобном уровне.
Исследуя большое пространство, нужно собирать сокровища, разбираться с обитателями и охранной системой. При этом важно избегать ловушек, которые можно вычислить по цифрам. Как в игре «Сапёр».
Игра получилась на удивление иргабельной, извините за тавтологию. Интересное сочетание экшена/аркады и паззла/адвенчуры. Разрешите рассказать вам о паре алгоритмических задач, возникших при генерации уровней. Сами алгоритмы простые. Однако интересно именно то, что их можно использовать в игре.
По мере написания статьи я делал анимированные иллюстрации и тестовый уровень, который вставил в игру. Получилось, что в результат этой статьи можно поиграть. Буду рад, если вам будет интересно, весело и/или полезно.
Механика
Уже несколько лет я занимаюсь разработкой пазл-платформера с открытым миром в стилистике текстового режима. В различных местах игры расставлены компьютерные консоли, к которым можно подойти и запустить имеющиеся там программы и игры. Одной из таких игр и является ASCIILL. Механику игры можно легко понять по этой анимации:
На поле расставлены ловушки. Каждое число показывает количество ловушек в восьми клетках вокруг него. Ловушки можно вычислить, как в игре «Сапёр». Однако в отличии от последней разминировать ничего не нужно. Главное — не попасться в ловушку! Цели каждого уровня могут быть разными: собрать все монеты, прибить всех инопланетных жуков, разрушить все лазеры и т.д. Таким образом, ловушки — это часть ландшафта, местность, которую надо учитывать при исследовании уровней инопланетного храма.
Генерация ловушек и монет
Что будет, если просто случайно раскидать по полю ловушки и монеты? Вот так, например:
Обозначения на схеме: «@» - персонаж, «$» - монета, «x» - ловушка. Перемещая персонажа по полю, на этом уровне необходимо собрать все монеты. Но случайное расположение ловушек заблокировало проход в правую часть поля. Уровень невозможно пройти.
Алгоритм генерации должен обеспечивать проход к каждой монете вне зависимости от конфигурации поля. Как бы вы это сделали? Уверен, что есть много способов. Мой вариант можно описать одной фразой:
Генерируем случайный лабиринт. На стенах случайно расставляем ловушки, а в проходах — монеты.
Такой способ гарантирует доступ ко всем монетам, минуя ловушки. При этом сам лабиринт игроку не виден. Он не обязан ходить по дорожкам. На картинке сверху, например, можно сразу же взять монету, сдвинувшись на две клетки вправо.
Проходы в лабиринтах помогают разрешить самые сложные ситуации, обеспечивая стопроцентную возможность завершить уровень. Какой же нужен лабиринт и как его генерировать?
Лабиринт
Итак, лабиринт нужен для того, чтобы помечать, в каких клетках генерировать ловушки, а в каких — монеты. Поэтому и стенки, и проходы должны быть клетками. Лабиринты, где стенками являются границы клеток, не подходят.
Главное же требование к структуре лабиринта: он должен быть связанный. В каждую клетку дорожки должна быть возможность попасть из любой другой клетки-дорожки.
Среди множества алгоритмов построения подобного случайного лабиринта внутри заданной формы, наиболее подходящим показался вот такой:
1. Начинаем с ячейки, на которой стоит курсор в начале игры. Закрашиваем ее. Закрашенные клетки будут дорожкой лабиринта.
На каждом шаге:
2. Выбираем случайное направление (вверх, вниз, вправо, влево) по которому свободны две ячейки по прямой.
3. Если такое направление нашлось, то двигаемся на эти две клетки, закрашивая их.
4. Если тупик, то откатываемся назад до того момента, пока не встанем на ячейку, где еще есть варианты направлений движения.
5. Если больше вариантов нет — все, лабиринт построен!
Вот эта анимация хорошо иллюстрирует алгоритм построения:
На этой иллюстрации проходы помечены закрашенными клетками, потому что именно они расставляются алгоритмом. Возможно, это непривычно, так как обычно закрашивают стенки. Прошу прощения!
После того, как я определил такое случайное расположение объектов на уровне для иллюстрации алгоритма, мне захотелось посмотреть, как уровень будет выглядеть в игре. Вот, что получилось:
А теперь давайте добавим на уровень жуков!
Жуки
Жуки — это микро-боссы, которые перемещаются по своим траекториям. Они слепые в отличие от большого босса. Жуки не видят, где находится игрок. Однако если на них наткнуться, то проиграешь.
Траектория жуков состоит из сегментов. Каждый сегмент — отрезок прямой под определенным углом. Так как игра сильно завязана на клетки, то жуки должны перемещаться по клеткам. Игрок должен четко представлять клетку, где в настоящий момент находится жук.
Таким образом, перемещаясь по игровому полю, жуки как бы закрашивают клетки двумерного растра.
Забавно, но для расчета клеток по которым двигаются жуки можно использовать алгоритм Брезенхэма. В Википедии он отлично объясняется с примерами:
Такое вот применение алгоритмов машинной графики из 70-х. Применение кажется, кстати, весьма аутентичным в игре, стилизованной под текстовый режим.
Что ж, жуков добавили, можно и сыграть в уровень. Ниже запись прохождения. Уровень маленький и простой — подойдет для обучения в начале игры!
Как видите, я добавил еще и тротил, чтобы избавляться от инопланетных жуков, двигающихся по алгоритму Брезенхэма.
Заключение
При каждом проигрыше алгоритм генерации ловушек и монет запускается по новой. Ландшафт уровня, видимый в виде чисел на поле, каждый раз разный.
Однако можно генерировать и случайную форму уровня, а также наличие и расположение жуков, лазеров, воды, предметов и т.д. Сделал в игре режим «Челлендж», в котором такой новый случайный уровень генерируется каждый день. Причем, этот уровень одинаковый для всех игроков по всему миру.
Можно сказать, что случайные параметры генерации уровня являются хэшем текущей даты. Дата однозначно определяет параметры датчика случайных чисел, что гарантирует одинаковость случайных уровней на любом устройстве.
Если вам интересно, то буду рад позже поделиться способом, который выбрал для реализации такой генерации, так как это отдельная история.
Игру ASCIILL вынес из основной игры и оформил в виде отдельного проекта. Очень уж прикольно получилось. Вы можете посмотреть на игру вот здесь: https://store.steampowered.com/app/1878770/ASCIILL/
Алгоритм спокойно отрабатывает и на очень больших уровнях в несколько экранов.
Благодарю за прочтение. Пока!
Есть традиция публиковать себя и свои работы под тегом #artvsartist. В этом году участвую со своим KeyboArt-ом.
Эта клавиатура использовалась на одном рыбном предприятии пока ее не списали. Их продукцию можно найти во всех местных супермаркетах - они птицы высокого полета. И вот клавиатура превратилась в такую потрепанную, но довольную птичку, несущую рыбу в их консервы. Как вам?