Разрешите показать ASCII мета-шрифт. Сделал пока латинские заглавные. Фишка - каждая буква включает саму себя.

Как вам? Использую в своих ASCII играх и в книжке про “невозможную” ASCII графику.
Разрешите показать ASCII мета-шрифт. Сделал пока латинские заглавные. Фишка - каждая буква включает саму себя.

Как вам? Использую в своих ASCII играх и в книжке про “невозможную” ASCII графику.
ASCII Sandbox для красивого рассыпания в игре // Как сделано
Для того чтобы спрайты, боссы и другие объекты в игре красиво рассыпались, я сделал простой ASCII Sandbox движок. В отличие от самой игры, где символы могут рисоваться в произвольных координатах, ячейки в sandbox‑е строго выровнены по сетке. Это дает прикольный визуальный эффект. Алгоритм очень простой — вот схема:
─┼─┼─┼─┼─┼─┼─┼─┼─ │ │ │ │@│ │ │ │ ─┼─┼─┼─┼─┼─┼─┼─┼─ │ │4│2│1│3│5│ │ ─┼─┼─┼─┼─┼─┼─┼─┼─
А. Обходим все ячейки сетки снизу вверх (если гравитация направлена вниз).
Б. Если в ячейке есть символ, и он не в полете, то пытаемся его уронить.
В. Сначала проверяем ячейку снизу (1), если пустая — запускаем символ в полет в нее.
Г. Если снизу занято, то проверяем диагональные ячейки (2) и (3). Если обе пустые, то выбираем случайно. Запускаем символ в полет.
Д. Sandbox у меня скользкий, т.ч. символы могут скатиться и под большим углом. Поэтому проверяем еще и соседние к диагональным ячейки (4) и (5). Если там пусто, то запускаем символ в полет, как в предыдущем пункте.
Этого достаточно — символы сыпяться. Для красоты я добавил еще две штуки: ускорение и саморазрушение.
Если символ без задержек летит по ячейкам сетки вниз, то было бы красиво сделать движение с ускорением. Сделать это просто — нужно только накапливать для каждого символа время непрерывного полета. Наткнулся на другой символ — обнуляем время и ускоряемся заново.
Еще одна штука — саморазрушение. Когда спрайт помещается в sandbox, то в случае, если снизу пустые ячейки, он летит целиком. Это иногда не так эффектно. Поэтому я сделал параметр саморазрушения. Даже если снизу пустота, то отдельные частички‑символы спрайта все равно начинают взаимодействовать друг с другом. На видео я показал сравнение разных степеней саморазрушения.
Как вам эффект? Буду рад, если вам понравился стиль и вы решите поддержите мой проект на Steam страничке игры.
Сделал процедурное сердечко на движке игры - получилось прикольно!
Как обычно, используются только символы с обычной клавиатуры. Не вращаются, не масштабируются и не искажаются. Почти текстовый режим с единственным исключением - вывод в произвольных координатах.
Новый вариант движка игры отрабатывает отлично! На этой сцене у меня стабильно 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.
Делимся цифрами Next Fest: смотрите динамику и делайте выводы для своей игры

Я и еще два человека решили открыть данные игры на время Steam Next Fest. Мы отслеживаем:
1. Количество вишлистов
2. Количество уникальных игроков (сколько людей реально запустило игру)
3. Количество показов банера демо версии
4. Пик игроков за день
Интересно посмотреть на динамику этих показателей - как отработают алгоритмы Steam во время фестиваля. Если интересно мониторить, то вот ссылка на Google Sheets. Мы решили сделать для себя, но вдруг кому будет полезно.
Через пару дней после фестиваля документ закроем скорее всего.
П.С. На графике выводятся не абсолютные значения, а разница день ко дню.
Динамическое отражение в воде из текстовых символов
Сделал новый фон для боевых локаций: динамические отражения в воде из одних только ASCII-символов. Думаю использовать эту визуальную фичу в нескольких локациях. Как обычно, кроме текстовых символов (которые есть на любой клавиатуре) ничего не используется. Символы не масштабируются и не вращаются. Почти текстовый режим)) Алгоритм волн - упрощенный алгоритм Герстнера с двумя трохоидальными волнами. Чтобы считалось порезвее. Если вам нравится стиль, заходите на страничку игры в Стиме!
Сделал новую планету из текстовых символов с локациями для исследования.
После первого плейтеста игры поступила критика - не хватает интерактивной планеты. Сделал! Теперь есть шарик с локациями, где можно посражаться, закупить полезное, получить квест, полечиться, и т.д. Открывается постепенно (когда проходишь боевую локацию).
Как обычно все сделано из тестовых символов, которые есть на обычной клавиатуре. Символы не масштабируются и не вращаются. Почти текстовый режим)) Картинка рисуется посимвольно - я буквально пишу какой символ, какого цвета и в каких координатах нарисовать.
Не удержался и сделал эффекты освещения (два источника света) и тени. Так как у меня нет тут обычных полигонов и все надо считать самому, то пришлось повозиться))
Интересно получилось? Заходите на страничку Effulgence RPG на Steam-е добавить в список желаемого и записаться на плейтест.
Додекаэдр из символов для мини-игры "Игра с Нулём»".
Бросаешь 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 }};Сделал и возвращаюсь к допилу версии для плейтеста. Чуть-чуть осталось. Заходите добавить в желаемое и записаться на плейтест.
Как сделать монстра, используя только клавиатуру?
Простого текстового редактора порой хватает, чтобы сделать монстров из текстовых символов в трехмерном пространстве. Нужно задать символы, их цвета и высоту. Дальше уже C# код, и Unity сделают всю работу. Заходите на страничку в Steam моего проекта Effulgence RPG, чтобы добавить в вишлист и/или записаться на плейтест.
Сражение на море электролиза
Когда-то на берегах моря стоял громадный алюминиевый завод. Сейчас же только название моря напоминает о былом промышленном буме. И еще тут водятся едкие и вредные пузыри.
Сделал битву в самой первой локации игры. Не смотря на то, что битва пошаговая, при выстрелах можно подкарауливать удачные моменты для более точного попадания. Такая вот реал-тайм фишка.
Заходите посмотреть проект и добавить в вишлист.
Лишь обрывки сигнала в виде текстовых символов передают трагические события из удаленной космической колонии “Последняя надежда”.
Сделал планету с локациями для демо версии.
Прохождение одной локации открывает доступ к соседним.
Проходить локации можно в любом порядке.
В любой момент выйти из одной локации, проапгрейдиться, пройти другую, а потом вернуться.
Плейтест запускаю в феврале! Записаться можно вот тут. Всем хороших выходных!
Сделал локацию "Отдых и прокачка" для моей игры Effulgence, созданной из текстовых символов. Нахождение в ней медленно восстанавливает HP. Можно заселиться в гостиницу, чтобы моментально восстановить 100% HP.
Все объекты в игре - лишь тонкая пленка формы, с трудом удерживающая хаос текстовых символов)) Поэтому полное восстановление - это разрушение и пересборка.
Также в этой локации можно прокачивать навыки. Для этого в каждом навыке нужно накопить определенное количество опыта. Например, стреляем определенным героем из бластера - копится опыт в навыке стрельбы. Набираем нужное количества опыта - идем улучшать этому герою навык стрельбы. После этого он стреляет точнее.
Заходите посмотреть на проект в Steam и добавить в вишлист, если вам понравился стиль.
Собрал экран инвентаря для своей ASCII RPG игры Effulgence, сделанной из текстовых символов. Предметы печатаются на принтере с использованием ресурсов. Механизмы и питомцы - тоже. Три вида валюты, да и сами персонажи - тоже можно напечатать на принтере. Думаю сделать, чтобы и принтер можно было печатать на принтере.
У каждого персонажа есть несколько счетчиков опыта. Если, например, персонажем кидать гранаты, то будет копиться метательный опыт. При достижении определенных значений, уровень метательного мастерства можно увеличить (в специальных заведениях). Тогда персонаж будет более метко кидать.
Заходите добавить в список желаемого на страничку проекта в Стиме, если вам нравится стиль. С Новым Годом, кстати! А то что-то заработался.
Дерево на ветру для главного меню игры Effulgence, полностью созданной из текстовых символов. В опциях доступны три уровня свечения символов. Есть ли среди них тот, который вам нравится?
Пытаюсь выбрать дефолтный уровень свечения (который потом можно будет сменить в настройках).
Заходите на страничку проекта в Стиме, если вам нравится стиль.
Сделал струю огня из символов. Нормально получилось?
Геймплей битвы пока такой: все стреляют сами. Надо просто смотреть, перезаряжать, может прям во время боя скрафтить что-нибудь. Щит, например. Дрон выставить в помощь. И вовремя сбежать.
Но может переделаю еще битву - дам больше контроля игроку. Пока не решил.
Заходите в Стим глянуть на игру и добавить в вишлист если понравится стиль.
Дизайн экран печати механизмов на принтере в игре Effulgence, сделанной из текстовых символов.
Экран печати механизмов на принтере. Печатается "болтливая голова робота". Говорит постоянно - не заткнуть. Если поместить на экран, то заболтает оппонентов, и те пропустят ход.
Сложный экран с точки зрения UI. Тут и ресурсы все, и схемы печати, разделенные на категории. Собрал первый вариант. Норм?
Заходите в Стим глянуть на игру и добавить в вишлист если понравится стиль.
Единственный способ получить ресурсы для крафта в игре - это мочить обитателей, рассыпая их на отдельные частицы. Примеряюсь, как это может выглядеть. Норм?
Каждый босс в игре состоит из набора ресурсов. Замочил босса - получил ресурсы. Ресурсы бывают десяти типов:
[M] Метал
<P> Пластик
{@} Оптоволокно
}&{ Биоматериал
*.* Звездная пыль
|+| Радионуклиды
\V/ Минералы
!?! Пси-вещество
:~: Топливо
#S# Чипы
Дизайн больших боссов делается комбинированной техникой. Сначала вручную создаю все кадры ASCII анимации. Затем в коде добавляю алгоритмы плавного движения с параллаксом.
Позицию каждого символа рассчитываю тоже в коде. Так как все символы у меня хранятся на одной текстуре, то удается отображать всю сцену за один Draw Call, что позволяет держать 120fps почти всегда.
Такая вот новая схема расширенного текстового режима. Загляните на страничку игры Effulgence в Steam, если вам понравился стиль.
Давно хотел сделать из текстовой строчки "Морские волны" (Sea Waves) собственно морские волны. Интересно получилось?
Координаты каждого символа рассчитываются real-time в коде. Только что запустил страничку игры Effulgence в Steam. Заходите посмотреть и оценить необычный дизайн.
[Микро-Пост-Мортем] После двух лет разработки зарелизил свою ретро экшн игру. Получился Action Roguelike Deckbuilder с сотней мини-игр.

С год назад сильно поменял концепцию. Первоначально игра задумывалась, как линейное прохождение около ста уровней. Однако первые бета-тесты показали, что по сегодняшним меркам игре не хватает глубины. Сами мини-игры воспринимались отлично. Однако их линейное чередование - это слишком просто.
Пришлось принимать сложное решение - добавлять "мета-игру". Отдельную игровую механику, связывающую разрозненные аркады (2.5D Top-Down). За прохождение мини-игр стали выдаваться картриджи, наделяющие способностями и дающие разнообразное оружие. Игра превратилась в Action Roguelike Deckbuilder с сотней мини-игр.
Игра стала сложнее. Пришлось основательно заниматься балансом, ведь за прохождение каждой аркады выдаются картриджи, из которых собирается колода. Максимальное количество картриджей в колоде, кстати, зависит от прокачки самого героя.
Один год заняла разработка ста аркадных мини-игр и еще один год - 2.5D Top-Down мета-игра. Такой вот вышел проект. Решил поделиться эмоцией. Steam страничка: https://store.steampowered.com/app/2722640/CoinOp_Vice/
Пятерка пиксельных игр фестиваля PixElated Adventures (с бесплатными демоверсиями)

Всем привет! Прямо сейчас в Steam идет фестиваль пиксельных игр. Скидки, анонсы, демки. Решил сделать подборку из еще не вышедших игр, у которых тем не менее уже есть бесплатные демки. Напишу про игры, которые заинтересовали необычным сочетанием механик и графическим стилем.
Исследуем 2D подземелье с помощью пинбол-механики. По уровню расставлено множество флипперов, с помощью которых продвигаем шарик. Получилась такая pinballvania.
Еще один гибрид пинбола, но уже с жанром action roguellike. С помощью различных пинбол шариков мочим толпы монстров и боссов. Шарики прикольно отскакивают как от стен так и от монстров.
Игра про пиксельного прокурора! Нужно судить преступников. Кого-то отправлять в тюрьму, а кого-то прямо на висельницу.
Пошаговая тактика, где вместо управления юнитами нужно управлять полем битвы. Юниты сражаются сами по себе, а вот местность можно менять. Хотя магией все-таки можно кастануть!
Играем шахматными фигурами в большом открытом мире. Противники - тоже шахматные фигуры. Приключение с интересным миксом игровых механик.
Как вам подборка необычных игр? Есть которые вас заинтересовали? Сам я тоже участвую в фестивале. Моя игра Coin-Op VICE - это Hotline Miami с мини-играми и построением колоды. Заходите посмотреть и сыграть в демку на страничке в Стиме.
Как сделать крутую стрелочку под кнопкой Wishlist на Steam-е
Увидел на какой‑то страничке игры в Steam прикольную идею. Прыгающая стрелочка показывает на кнопку Wishlist. Классно подталкивает к правильному действию, на мой взгляд. Сделал себе так же. Способ очень простой:
В начале длинного описания вставить ссылку на страничку игры.
Сразу после — гифка со стрелкой.

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