ASCII игра — компромисс аутентичности и удобства

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



    1. Набор символов


    Абсолютно вся графика в игре выполнена с помощью символов, которые набираются на клавиатуре. Если быть более точным, то используются символы из таблицы ASCII с 32-го по 126-ой символ.



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



    Диалоги в игре могут содержать символы не из аутентичного диапазона. Однако, эти символы не участвуют в дизайне. Графика — только ASCII.

    2. Субсимвольная точность


    В отличие от текстовых режимов в игре ASCIIDENT используется пиксельная точность перемещения текстовых слоев и движущихся спрайтов.



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

    Для сохранения аутентичности я придерживаюсь следующего правила. Внутри одного текстового слоя все статичные объекты четко выровнены по символьной сетке. Более того, каждый спрайт состоит из символов, также выровненных по символьной сетке.

    Относительно же друг друга слои и движущиеся объекты могут находиться на субсимвольном расстоянии. Это обеспечивает плавность движения и, соответственно, комфортный игровой процесс. Вот такой компромисс.

    3. Параллакс


    В игре присутствует несколько текстовых слоев, которые двигаются с разной скоростью, реализуя эффект параллакса. Символы верхних слоев перекрывают символы нижних. При субсимвольной точности критерий перекрытия — это наложение более 50% от ширины и/или высоты текстовой ячейки. Используя простой z-буффер, легко реализовать это перекрытие.



    Параллакс с плавным движением слоев — очень выразительный графический прием. Да, он, возможно, сильно нарушает аутентичность текстовому режиму. Тем не менее, я решил использовать параллакс. Очень уж красиво получается.

    4. Анимация


    Анимация отдельных спрайтов в игре «честная», выполненная строго в текстовом режиме. Позиция каждого символа выровнена по текстовой сетке. Анимации получаются за счет замещения символов в ячейках.



    Я посчитал это очень важным, сохранить честность анимации спрайтов. Наверное, это основное, что делает игру такой ретро-привлекательной. Более того, при таком типе анимации становится технически очень просто создавать и редактировать анимационные ASCII спрайты. Я не удержался и сделал в игре встроенный ASCII редактор. В любой момент времени любой графический элемент может быть загружен в него и изменен. Можно, например, отредактировать сундук, добавив кадры анимации, и после сохранения все сундуки во всех местах игры станут новыми. Это может сделать любой игрок, создавая тем самым свой мод игры.


    Однако, иногда нужна плавная анимация! Например, в игре есть такое место, где выращивается биологическое оптоволокно. Над грядками летает дрон, который орошает оптоволокно токсичной жидкостью. Жидкость должна капать плавно, иначе некрасиво. Для реализации таких эффектов я сделал генераторы спрайтов и их привязку к любым другим спрайтам в мире игры. Технически каждая капля — это отдельный спрайт, который может двигаться с субпиксельной точностью. Снова разумный компромисс.

    5. Свет, цвет и шрифт


    Многие люди, которым я показываю игру, делают замечание, что слишком уж много цветов у меня в игре. В текстовых режимах не было такого богатства оттенков. Дело в том, что я реализовал полноэкранный lightmap, просчитывающий какое угодно количество источников освещения. При этом, цвет каждого символа 24-битный (16 777 216 различных цветов). Иногда картинка выглядит пестро.



    Для эмуляции ретро цветовых режимов я сделал семь дополнительных опций: три монохромных режима, два 16-цветовых режима (DOS/Mac), 2-битный и режим Game Boy. Также доступен режим LED шрифта. В таком режиме каждый пиксель каждого символа отделен от соседних. На видео ниже демонстрируются все режимы — как они влияют на картинку.


    Алгоритм преобразования цвета для монохромных режимов сделал такой. Сначала рассчитываю яркость цвета (R, G, B):

    V = 0,3 * R + 0,59 * G + 0,11 * B

    Монохромные ретро-мониторы имеют разные цветовые тона для различной яркости символа. Поэтому оттенок также должен изменяться. Использую такую линейную интерполяцию:

    RR = sqrt(V) * (monoR1 * (1 — V) + monoR2 * V)

    GG = sqrt(V) * (monoG1 * (1 — V) + monoG2 * V)

    BB = sqrt(V) * (monoB1 * (1 — V) + monoB2 * V)

    Окончательный цвет (RR, GG, BB)

    Для 16-цветовых режимов я использую другой алгоритм. Для каждого цвета (R, G, B) ищу ближайший цвет в палитре. Вот и все.

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

    d = 1 / max (R, G, B)

    normR = d * R, normG = d * G, normB = d * B

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

    6. Консоль с честным текстовым режимом


    В процессе создания игры пришла идея поместить в игровой мир компьютерные терминалы с честным текстовым режимом. К ним можно подойти, подключиться и поработать/поиграть.

    Если сама игра стилизована под текстовый режим 80x25 с плавным скроллингом и параллаксом текстовых слоев, то экран встроенных терминалов имеет разрешение 72x20 символов без всякой возможности выйти за пределы этой сетки.

    Все приложения для встроенных терминалов (включая загрузчик) написаны на языке программирования DUHASM. Этот язык похож на Ассемблер, но имеет динамические переменные и массивы. Вот, например, кусок кода игры Pi-astre Hanter:



    Забавная особенность — циклы реализованы в рамках условных конструкций, где вместо END ставится LOOP.

    В момент запуска игра подгружает приложения из *.duhasm файлов и компилирует их в байт код. Когда игрок активирует консоль, то запускается честный интерпретатор.

    На данный момент я написал две игры на DUHASM, которые уже доступны в текущей версии. Есть план написать редактор кода (тоже на DUHASM конечно), чтобы каждый игрок мог попробовать создать приложение/игру, которую увидят все другие игроки.


    Надеюсь, что я не зря потратил много усилий и времени для реализации этой фичи и найдутся люди, которым понравится. Язык DUHASM безусловно требует доработки. Мне не очень нравится, как, например, происходит вызов функций с аргументами. По истории игры язык DUHASM придумал полу-разумный киборг, сбежавший из лаборатории космических пиратов. Удивительным образом этот язык программирования прижился на окраинах обитаемой части вселенной.

    ЗАКЛЮЧЕНИЕ


    Что ж, компромиссов набралось немало — набор символов, субсимвольная точность, анимация, цвета. Но и для сохранения чувства аутентичности текстовому режиму я предпринял немало за эти более чем два года разработки. Чтобы получать больше обратной связи и понимать, в правильную ли сторону я двигаюсь, решил запустить игру на раннем доступе в Стиме. Есть что-то магически привлекательное в текстовых режимах. Когда любую картинку можно набрать символами на клавиатуре, то сложно иногда удержаться и не запустить игру со встроенным ASCII редактором, да и не нарисовать прототип новой мини-игры, которую потом и реализовать на языке DUHASM.



    Всем спасибо! Пока!
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 33

      +6
      Вы офигенны!
        +3
        You are awesome!
          –1
          Фонт ужасный (и сам по себе, и для игры особенно). Возьмите нормальный IBM-овский.
            –1
            Раньше шрифты меняли, при возможности, что бы хоть какую-то графику в игру протащить, а теперь текстовый режим эмулируют. :)
            Если честно не очень понимаю концепцию — одно дело разработать честную текстовую игру без всяких читов вроде плавной прокрутки и миллионов цветов, лично для меня это рушит всю аутентичность, друго дело такой гибрид, который как-бы и в графике и как-бы нет — получается ни два, ни полтора.
            А вообще местами интересно выглядит, но я бы уже делал в простенькой графике.
              0
              Возможно автор банально не умеет рисовать в 2d. Но умеет «рисовать» ASCII. И потом решил идти с этим до конца.
                +2
                В ASCII не так просто рисовать как кажется
                  0
                  Что-то вроде Lode Runner (1983) нарисовать не сложнее, но можно уже это делать без ненужных условностей, как по мне.
                  +3
                  А я вижу большой плюс в плавной прокрутке, сабпиксельном перемещении и прочих улучшалках игрового процесса и визуализации.
                  Я очень люблю старые игрушки и время от времени их устанавливаю, дабы вспомнить молодость, но насыщенный новыми технологиями глаз, несколько портит то впечатление, что было раньше.
                  Для примера ставил недавно игрушку Neverhood. В памяти оставалась крутая графика супер видеоролики и прочая красота, но поставив я увидел мутные ролики с кучей артефактов, низкое разрешение и прочее… Это ни сколько не портит саму игру, но немного ставит тебя на место с твоими ламповыми воспоминаниями и дает понять, что раньше было не так то и зелено, как помнилось.
                  Тут же эти небольшие улучшалки хоть и нарушают аутентичность, но делают игру такой, какой ты помнишь эти старые текстовые бродилки.
                    0
                    Спасибо за классный фидбэк!
                      0
                      Я тоже вижу плюс в улучшалках, я не очень понимаю почему сама игра тогда мимикрирует под текстовый режим, чем уже не является и не делает тот маленький оставшийся шаг до простенькой графики.
                        0
                        Может потому что шаг этот не маленький?
                        По видео же видно как легко рисовать символами спрайты, а каково рисовать их попиксельно или тем более в векторе?
                        0

                        Ставьте Armikrog.

                      0
                      Сколько бы я не пытался, а написать игру (текстовою), я не мог. Скажите, на чём игра, может приложите в статье ссылку на репозиторий?
                        0
                        Игра написана на Cocos2d-js т. е. на Java Script. Репозитория нет)
                          0
                          Присоединяюсь.

                          Есть ссылка на гитхаб?

                          Сколько весит бинарник? Ведь один из аргументов такого рода текстового движка — что не нужно хранить графические элементы, а хранится только пару байт текста на каждый игровой объект. Разве нет?
                          +2
                          Кажется видел эту игру уже ранее в фейсбуке, респект. Уже можно поиграть?
                          0
                          А ведь ещё были ASCII nudes. Ламповые донельзя.
                            0
                            На линукс не выйдет?
                              0
                              Движок позволяет компильнуть т.ч. попробую собрать под линукс
                              0
                              В своё время тоже увлекался ASCII-играми, поиграв в ADOM где-то в 95м, но мои обычно были либо пошаговыми, либо квестами, так и недоделанный файтинг не в счет.
                              К третьей игре я все-таки пришёл к использованию «полного» набора ASCII, т.е. к псевдографике, что серьезно улучшило внешний вид и упростило восприятие.
                                +1
                                Впечатляет. Респект.
                                  +1
                                  Напишу новость на один-два игровых портала.
                                    0
                                    Спасибо!!!
                                      +1
                                      Добавьте в подвал этой статьи ссылки на предыдущие — они не менее офигенны!
                                      И спасибо!
                                    +1
                                    Здорово!)

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

                                      +1
                                      выглядит шикарно
                                        +1
                                        Напомнило как в колледже писал змейку на Паскале, притом на двоих. Так как не освоил в должной степени CRT, пришлось выводить символьно, 0 — как элементы. И еще чтоб отлчится написал змейку на двоих. которые дерутся за одну пищу. Единственное была проблема что, так как символы не квадратные, то по вертикали она шла относительно быстрее чем по горизонтали.
                                          +1
                                          Редактирование анимаций в процессе прохождения — супер.
                                          В двубитных цветах задник надо отключать, иначе каша. Ну и в Геймбое всё-таки фон не чёрный.
                                            +1
                                            Хотел купить, но у меня нет винды. Ожидается линукс или мак версия?
                                              0
                                              Да, версии под Мак и Линукс точно будут. Спасибо за интерес!
                                                +2
                                                Очень жду. Уже купил в стиме, но виндового PC к сожалению нет.
                                                И еще в GOG бы ее…
                                              +1

                                              Я сейчас получил огромное эстетическое удовольствие от просмотренного. Очень эффектно. Что делаете со светом? Такое прям неоновое свечение магисеское.

                                              Only users with full accounts can post comments. Log in, please.