Обновить
174
Андрей Фомин@DuhaTheBest

Разработчик

128
Подписчики
Отправить сообщение

ASCII Sandbox для красивого рассыпания в игре // Как сделано

Для того чтобы спрайты, боссы и другие объекты в игре красиво рассыпались, я сделал простой ASCII Sandbox движок. В отличие от самой игры, где символы могут рисоваться в произвольных координатах, ячейки в sandbox‑е строго выровнены по сетке. Это дает прикольный визуальный эффект. Алгоритм очень простой — вот схема:

─┼─┼─┼─┼─┼─┼─┼─┼─
│ │ │ │@│ │ │ │
─┼─┼─┼─┼─┼─┼─┼─┼─
│ │4│2│1│3│5│ │
─┼─┼─┼─┼─┼─┼─┼─┼─

А. Обходим все ячейки сетки снизу вверх (если гравитация направлена вниз).

Б. Если в ячейке есть символ, и он не в полете, то пытаемся его уронить.

В. Сначала проверяем ячейку снизу (1), если пустая — запускаем символ в полет в нее.

Г. Если снизу занято, то проверяем диагональные ячейки (2) и (3). Если обе пустые, то выбираем случайно. Запускаем символ в полет.

Д. Sandbox у меня скользкий, т.ч. символы могут скатиться и под большим углом. Поэтому проверяем еще и соседние к диагональным ячейки (4) и (5). Если там пусто, то запускаем символ в полет, как в предыдущем пункте.

Этого достаточно — символы сыпяться. Для красоты я добавил еще две штуки: ускорение и саморазрушение.

Если символ без задержек летит по ячейкам сетки вниз, то было бы красиво сделать движение с ускорением. Сделать это просто — нужно только накапливать для каждого символа время непрерывного полета. Наткнулся на другой символ — обнуляем время и ускоряемся заново.

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

Как вам эффект? Буду рад, если вам понравился стиль и вы решите поддержите мой проект на Steam страничке игры.

Теги:
Всего голосов 5: ↑3 и ↓2+5
Комментарии0

Сделал процедурное сердечко на движке игры - получилось прикольно!

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

Базовый код очень простой:

    public void GenerateHeart(int n, string str, Color color, float minDistance = 1.01f) {
        float r, y, theta;
        float goldenRatio = (1f + Mathf.Sqrt(5f)) / 2f;
        float offset = 2f / n;

        for (int i = 0; i < n; i++) {
            y = (i * offset - 1) + (offset / 2);
            r = Mathf.Sqrt(1 - y * y);
            theta = 2 * Mathf.PI * i / goldenRatio;
            PutCharToHeart(theta, Mathf.Acos(y), str[i % str.Length], color, minDistance);
        }
    }
    
    public void PutCharToHeart(float u, float v, char ch, Color clr, float minDistance, float scale = 1f, CharAnim chanim = null) {
        float sinV = Mathf.Sin(v);
        float cosV = Mathf.Cos(v);
        float sinU = Mathf.Sin(u);
        float cosU = Mathf.Cos(u);
        float x = sinV * (15 * sinU - 4 * Mathf.Sin(3 * u));
        float z = sinV * (13 * cosU - 5 * Mathf.Cos(2 * u) - 2 * Mathf.Cos(3 * u) - Mathf.Cos(4 * u));
        float heartY = 8 * cosV;
        Vector3 point = new Vector3(x, heartY, z) * scale;
        bool tooClose = false;

        foreach (var existing in points)
            if (Vector3.Distance(point, existing) < minDistance) {tooClose = true; break;}

        // Add
        if (!tooClose) {
            points.Add(point);
            pointsView.Add(point);
            codes.Add(ch);
            colors.Add(clr);

            if (chanim == null) {
                flags.Add(0);
                anims.Add(null);
            } else {
                flags.Add(FLAG_ANIM);
                anims.Add(chanim);
            }
        }
    }

Получилось вроде симпатично! Думаю добавить в игру. Не забудьте поиграть в текущую версию игры на Steam.

Теги:
Всего голосов 3: ↑3 и ↓0+5
Комментарии0

Делимся цифрами Next Fest: смотрите динамику и делайте выводы для своей игры

Я и еще два человека решили открыть данные игры на время Steam Next Fest. Мы отслеживаем:

1. Количество вишлистов

2. Количество уникальных игроков (сколько людей реально запустило игру)

3. Количество показов банера демо версии

4. Пик игроков за день

Интересно посмотреть на динамику этих показателей - как отработают алгоритмы Steam во время фестиваля. Если интересно мониторить, то вот ссылка на Google Sheets. Мы решили сделать для себя, но вдруг кому будет полезно.

Через пару дней после фестиваля документ закроем скорее всего.

П.С. На графике выводятся не абсолютные значения, а разница день ко дню.

Теги:
Всего голосов 4: ↑3 и ↓1+2
Комментарии0

Динамическое отражение в воде из текстовых символов

Сделал новый фон для боевых локаций: динамические отражения в воде из одних только ASCII-символов. Думаю использовать эту визуальную фичу в нескольких локациях. Как обычно, кроме текстовых символов (которые есть на любой клавиатуре) ничего не используется. Символы не масштабируются и не вращаются. Почти текстовый режим)) Алгоритм волн - упрощенный алгоритм Герстнера с двумя трохоидальными волнами. Чтобы считалось порезвее. Если вам нравится стиль, заходите на страничку игры в Стиме!

Теги:
Всего голосов 10: ↑9 и ↓1+14
Комментарии12

Сделал новую планету из текстовых символов с локациями для исследования.

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

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

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

Интересно получилось? Заходите на страничку Effulgence RPG на Steam-е добавить в список желаемого и записаться на плейтест.

Теги:
Всего голосов 6: ↑5 и ↓1+6
Комментарии1

Додекаэдр из символов для мини-игры "Игра с Нулём»".

Бросаешь 12-гранный кубик: на 11 гранях - ресурсы, а на одной - полное обнуление прогресса в основной игре. Рискнули бы?

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

        // Verteсes
        Vector3[] verts = new Vector3[] {
            new Vector3(0.577350f, 0.577350f, 0.577350f),   // v1
            new Vector3(0.577350f, 0.577350f, -0.577350f),  // v2
            new Vector3(0.577350f, -0.577350f, 0.577350f),  // v3
            new Vector3(0.577350f, -0.577350f, -0.577350f), // v4
            new Vector3(-0.577350f, 0.577350f, 0.577350f),  // v5
            new Vector3(-0.577350f, 0.577350f, -0.577350f), // v6
            new Vector3(-0.577350f, -0.577350f, 0.577350f), // v7
            new Vector3(-0.577350f, -0.577350f, -0.577350f),// v8
            new Vector3(0, 0.934172f, 0.356822f),           // v9
            new Vector3(0, 0.934172f, -0.356822f),          // v10
            new Vector3(0, -0.934172f, 0.356822f),          // v11
            new Vector3(0, -0.934172f, -0.356822f),         // v12
            new Vector3(0.356822f, 0, 0.934172f),           // v13
            new Vector3(0.356822f, 0, -0.934172f),          // v14
            new Vector3(-0.356822f, 0, 0.934172f),          // v15
            new Vector3(-0.356822f, 0, -0.934172f),         // v16
            new Vector3(0.934172f, 0.356822f, 0),           // v17
            new Vector3(0.934172f, -0.356822f, 0),          // v18
            new Vector3(-0.934172f, 0.356822f, 0),          // v19
            new Vector3(-0.934172f, -0.356822f, 0)          // v20
        };

        // Calc edges
        const float edgeLength = 0.7136f;
        const float epsilon = 0.0001f;
        var edges = new List<(int a, int b)>();
        Vector3 v1, v2;
        float dx, dy, dz, dist;

        // Check all pairs of vertices
        for (int i = 0; i < verts.Length; i++)
            for (int j = i + 1; j < verts.Length; j++) {
                v1 = verts[i];
                v2 = verts[j];
                dx = v2.x - v1.x;
                dy = v2.y - v1.y;
                dz = v2.z - v1.z;
                dist = Mathf.Sqrt(dx * dx + dy * dy + dz * dz);
                if (Mathf.Abs(dist - edgeLength) < epsilon) 
                    edges.Add((i, j));
            }

        // Faces
        int[,] facesIDS = new int[12, 5] {
            { 0, 16, 1, 9, 8 },
            { 12, 0, 16, 17, 2 },
            { 8, 0, 12, 14, 4 },
            { 1, 16, 17, 3, 13 },
            { 9, 1, 13, 15, 5 },
            { 10, 11, 3, 17, 2 },
            { 2, 12, 14, 6, 10 },
            { 3, 11, 7, 15, 13 },
            { 6, 14, 4, 18, 19 },
            { 4, 8, 9, 5, 18 },
            { 5, 15, 7, 19, 18 },
            { 6, 19, 7, 11, 10 }};

Сделал и возвращаюсь к допилу версии для плейтеста. Чуть-чуть осталось. Заходите добавить в желаемое и записаться на плейтест.

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии0

Как сделать монстра, используя только клавиатуру?

Простого текстового редактора порой хватает, чтобы сделать монстров из текстовых символов в трехмерном пространстве. Нужно задать символы, их цвета и высоту. Дальше уже C# код, и Unity сделают всю работу. Заходите на страничку в Steam моего проекта Effulgence RPG, чтобы добавить в вишлист и/или записаться на плейтест.

Теги:
Всего голосов 5: ↑3 и ↓2+4
Комментарии0

Сражение на море электролиза

Когда-то на берегах моря стоял громадный алюминиевый завод. Сейчас же только название моря напоминает о былом промышленном буме. И еще тут водятся едкие и вредные пузыри.

Сделал битву в самой первой локации игры. Не смотря на то, что битва пошаговая, при выстрелах можно подкарауливать удачные моменты для более точного попадания. Такая вот реал-тайм фишка.

Заходите посмотреть проект и добавить в вишлист.

Теги:
Всего голосов 5: ↑4 и ↓1+5
Комментарии1

Лишь обрывки сигнала в виде текстовых символов передают трагические события из удаленной космической колонии “Последняя надежда”.

Сделал планету с локациями для демо версии. 

  1. Прохождение одной локации открывает доступ к соседним. 

  2. Проходить локации можно в любом порядке. 

  3. В любой момент выйти из одной локации, проапгрейдиться, пройти другую, а потом вернуться.

Плейтест запускаю в феврале! Записаться можно вот тут. Всем хороших выходных!

Теги:
Всего голосов 5: ↑4 и ↓1+6
Комментарии6

Сделал локацию "Отдых и прокачка" для моей игры Effulgence, созданной из текстовых символов. Нахождение в ней медленно восстанавливает HP. Можно заселиться в гостиницу, чтобы моментально восстановить 100% HP.

Все объекты в игре - лишь тонкая пленка формы, с трудом удерживающая хаос текстовых символов)) Поэтому полное восстановление - это разрушение и пересборка.

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

Заходите посмотреть на проект в Steam и добавить в вишлист, если вам понравился стиль.

Теги:
Всего голосов 4: ↑4 и ↓0+7
Комментарии2

Собрал экран инвентаря для своей ASCII RPG игры Effulgence, сделанной из текстовых символов. Предметы печатаются на принтере с использованием ресурсов. Механизмы и питомцы - тоже. Три вида валюты, да и сами персонажи - тоже можно напечатать на принтере. Думаю сделать, чтобы и принтер можно было печатать на принтере.

У каждого персонажа есть несколько счетчиков опыта. Если, например, персонажем кидать гранаты, то будет копиться метательный опыт. При достижении определенных значений, уровень метательного мастерства можно увеличить (в специальных заведениях). Тогда персонаж будет более метко кидать.

Заходите добавить в список желаемого на страничку проекта в Стиме, если вам нравится стиль. С Новым Годом, кстати! А то что-то заработался.

Теги:
Всего голосов 5: ↑4 и ↓1+5
Комментарии2

Дерево на ветру для главного меню игры Effulgence, полностью созданной из текстовых символов. В опциях доступны три уровня свечения символов. Есть ли среди них тот, который вам нравится?

Пытаюсь выбрать дефолтный уровень свечения (который потом можно будет сменить в настройках).

Заходите на страничку проекта в Стиме, если вам нравится стиль.

Теги:
Всего голосов 6: ↑5 и ↓1+7
Комментарии2

Сделал струю огня из символов. Нормально получилось?

Геймплей битвы пока такой: все стреляют сами. Надо просто смотреть, перезаряжать, может прям во время боя скрафтить что-нибудь. Щит, например. Дрон выставить в помощь. И вовремя сбежать.

Но может переделаю еще битву - дам больше контроля игроку. Пока не решил.

Заходите в Стим глянуть на игру и добавить в вишлист если понравится стиль.

Теги:
Всего голосов 5: ↑5 и ↓0+7
Комментарии6

Дизайн экран печати механизмов на принтере в игре Effulgence, сделанной из текстовых символов.

Экран печати механизмов на принтере. Печатается "болтливая голова робота". Говорит постоянно - не заткнуть. Если поместить на экран, то заболтает оппонентов, и те пропустят ход.

Сложный экран с точки зрения UI. Тут и ресурсы все, и схемы печати, разделенные на категории. Собрал первый вариант. Норм?

Заходите в Стим глянуть на игру и добавить в вишлист если понравится стиль.

Теги:
Всего голосов 4: ↑3 и ↓1+3
Комментарии3

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

Каждый босс в игре состоит из набора ресурсов. Замочил босса - получил ресурсы. Ресурсы бывают десяти типов:

  1. [M] Метал

  2. <P> Пластик

  3. {@} Оптоволокно

  4. }&{ Биоматериал

  5. *.* Звездная пыль

  6. |+| Радионуклиды

  7. \V/ Минералы

  8. !?! Пси-вещество

  9. :~: Топливо

  10. #S# Чипы

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

Позицию каждого символа рассчитываю тоже в коде. Так как все символы у меня хранятся на одной текстуре, то удается отображать всю сцену за один Draw Call, что позволяет держать 120fps почти всегда.

Такая вот новая схема расширенного текстового режима. Загляните на страничку игры Effulgence в Steam, если вам понравился стиль.

Теги:
Всего голосов 6: ↑5 и ↓1+7
Комментарии2

Давно хотел сделать из текстовой строчки "Морские волны" (Sea Waves) собственно морские волны. Интересно получилось?

Координаты каждого символа рассчитываются real-time в коде. Только что запустил страничку игры Effulgence в Steam. Заходите посмотреть и оценить необычный дизайн.

Теги:
Всего голосов 5: ↑4 и ↓1+6
Комментарии6

[Микро-Пост-Мортем] После двух лет разработки зарелизил свою ретро экшн игру. Получился Action Roguelike Deckbuilder с сотней мини-игр.

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

Пришлось принимать сложное решение - добавлять "мета-игру". Отдельную игровую механику, связывающую разрозненные аркады (2.5D Top-Down). За прохождение мини-игр стали выдаваться картриджи, наделяющие способностями и дающие разнообразное оружие. Игра превратилась в Action Roguelike Deckbuilder с сотней мини-игр.

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

Один год заняла разработка ста аркадных мини-игр и еще один год - 2.5D Top-Down мета-игра. Такой вот вышел проект. Решил поделиться эмоцией. Steam страничка: https://store.steampowered.com/app/2722640/CoinOp_Vice/

Теги:
Всего голосов 14: ↑14 и ↓0+24
Комментарии4

Пятерка пиксельных игр фестиваля PixElated Adventures (с бесплатными демоверсиями)

Всем привет! Прямо сейчас в Steam идет фестиваль пиксельных игр. Скидки, анонсы, демки. Решил сделать подборку из еще не вышедших игр, у которых тем не менее уже есть бесплатные демки. Напишу про игры, которые заинтересовали необычным сочетанием механик и графическим стилем.

  1. Pinball Spire

Исследуем 2D подземелье с помощью пинбол-механики. По уровню расставлено множество флипперов, с помощью которых продвигаем шарик. Получилась такая pinballvania.

  1. Pinball Storm: Lokanta

Еще один гибрид пинбола, но уже с жанром action roguellike. С помощью различных пинбол шариков мочим толпы монстров и боссов. Шарики прикольно отскакивают как от стен так и от монстров.

  1. Законы Надрагии

Игра про пиксельного прокурора! Нужно судить преступников. Кого-то отправлять в тюрьму, а кого-то прямо на висельницу.

  1. Zero Orders Tactics

Пошаговая тактика, где вместо управления юнитами нужно управлять полем битвы. Юниты сражаются сами по себе, а вот местность можно менять. Хотя магией все-таки можно кастануть!

  1. Super Chesslike Adventure

Играем шахматными фигурами в большом открытом мире. Противники - тоже шахматные фигуры. Приключение с интересным миксом игровых механик.

Как вам подборка необычных игр? Есть которые вас заинтересовали? Сам я тоже участвую в фестивале. Моя игра Coin-Op VICE - это Hotline Miami с мини-играми и построением колоды. Заходите посмотреть и сыграть в демку на страничке в Стиме.

Теги:
Всего голосов 7: ↑7 и ↓0+14
Комментарии9

Как сделать крутую стрелочку под кнопкой Wishlist на Steam-е

Увидел на какой‑то страничке игры в Steam прикольную идею. Прыгающая стрелочка показывает на кнопку Wishlist. Классно подталкивает к правильному действию, на мой взгляд. Сделал себе так же. Способ очень простой:

  1. В начале длинного описания вставить ссылку на страничку игры.

  2. Сразу после — гифка со стрелкой.

Получается, что стрелка показывает на кнопку Wishlist. Понравилась идея.

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии2

Случайное многоэтажное здание на каждый запуск игры

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

Алгоритм построения этажа достаточно простой. Создаются строители, которые могут строить комнаты и коридоры, при этом поворачивая и изменяя свои параметры.

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

Теги:
Всего голосов 4: ↑4 и ↓0+6
Комментарии1
1

Информация

В рейтинге
Не участвует
Откуда
Escaldas, Escaldes-Engordany, Андорра
Дата рождения
Зарегистрирован
Активность