mars.frontier

mars.frontier

Разработчик с 2000-х. Велосипедист. Автогонщик. Фотограф. Сейчас пилим @mars_frontier_bot в Telegram. Это игра про освоение Марса, добычу ресурсов, производство и торговлю. За короткое время игра стала популярной и ежедневно растет на 5%, вся разработка открыта, есть теплый ламповый чатик, люди делятся идеями, мыслями и лайфхаками :)
Пикабушник
Дата рождения: 1 ноября
220 рейтинг 7 подписчиков 18 подписок 16 постов 1 в горячем
10

Что будет, если снять скафандр на Марсе?

Что будет, если снять скафандр на Марсе?

Это не шутка, а голая физика.
Атмосферное давление на Марсе — примерно в 100 раз ниже, чем на Земле. Даже на вершине Эвереста человеку всё ещё можно выжить (с трудом), а вот на Марсе — уже нет.


Что произойдёт, если снять шлем?

Кислорода нет — это очевидно. Но главное не это.
При таком низком давлении жидкости в организме начнут закипать при температуре тела. В первую очередь — слюна, слёзы и… кровь в капиллярах. Это явление называется вакуумная декомпрессия.

Ты не взорвёшься, как в плохом sci-fi, но… продержаться больше пары минут — нереально.


Почему так мало давления?

  • На Марсе почти нет атмосферы.

  • Там всего около 600 Паскалей, против земных 101 000.

  • Воздух — разреженный углекислый газ, который не способен ни удержать тепло, ни защитить от космической радиации.


Интересный факт:

Чтобы человек мог выйти на поверхность Марса без скафандра, атмосфера должна быть утолщена примерно в 50–100 раз. Теоретически — можно создать купол, накачать его воздухом… но это уже уровень колонизации.


В телеграм-игре Mars Frontier , которую я делаю вместе с увлеченными коллегами, игроки не умирают без скафандров 😄
Но тема выживания, ресурсного ограничения и атмосферы — в прямом смысле задаёт тон. Сейчас мы тестируем механику бурения, а в будущем — возможно, и систему жизнеобеспечения в суровых зонах.

Марс не прощает ошибок. Даже в игре.

Показать полностью
2

Как мы делали мини-игру про ровер на Марсе внутри Telegram WebApp

«Хочется сделать простую карту, чтобы листать её в Telegram». С этого всё и началось. А закончилось — изометрическим движком, авторизацией по WebApp, системой энергии, покупкой участков и боевым ровером с шестью колёсами.

🚀 С чего всё началось?

В начале всё было очень просто.
Мы сделали простенького бота, о котором я уже как-то тут писал, и бэк рендерил картинки с кусочком карты, где ты находишься.

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

Но само собой, что бот - не предел мечтаний, нужно было пилить полноценный мини-апп.

На боте лишь проверили гипотезу, отладили механики, типа уменьшения энергии, подзарядки аккумулятора в течении времени, пока не заходишь в игру.

Первый шаг в сторону мини-аппки - сделали вебстраничку, где можно было листать мышкой или пальцем — просто ради визуализации. Прямоугольная сетка, тайлы, немного стилей. Telegram WebApp проглатывал HTML5 на ура. Тогда не было никакой логики, просто подгрузка текстур и картинка под пальцем.

Вот как это выглядело:

  • Пользователь заходил и видел карту Марса.

  • Никакого взаимодействия — только “глянуть”.

🎮 А потом захотелось интерактивности

Следующим шагом стало добавление изометрии — чтобы выглядело как псевдо-3D. Самое интересное, что даже не потребовалось изменять текстуры. Серьезно :) Они по-прежнему те же самые, квадратные, 64 х 64. И не используется никакой 3д - движок.

вот краткое и понятное объяснение, как строится изометрическая карта из квадратных тайлов:


🧠 Основная идея:

Каждый квадратный тайл поворачивается на 45° и масштабируется по вертикали, чтобы получился ромб (изометрическая проекция). Вместо привычной сетки (x, y) мы рассчитываем экранные координаты (left, top) по формуле:


📐 Формулы для отображения:

При размере одного тайла T:

  • W = T * sqrt(2) — изометрическая ширина (диагональ квадрата).

  • H = W / 2 — изометрическая высота (высота ромба).

  • WX2 = W / 2, HX2 = H / 2 — половинки для смещения от центра.

Переход от логических координат (dx, dy) к пиксельным:

isoX = (dx - dy) * WX2 + centerX; isoY = (dx + dy) * HX2 + centerY;


🧩 Что это даёт:

  • (dx - dy) — смещает тайл по горизонтали.

  • (dx + dy) — смещает тайл по вертикали.

  • centerX, centerY — центр экрана, чтобы карта строилась относительно игрока.


🎯 В результате:

  • Из обычной квадратной сетки (x, y) формируется ромбовидная карта, где видны и горизонтальные, и вертикальные соседние тайлы.

  • Центральная клетка (текущий игрок) — всегда по центру, а остальные располагаются вокруг.

    Ну а дальше уже дело техники - придумали алгоритм перемещения в 8 направлениях: вверх, вниз, влево, вправо, плюс диагонали.

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

    Задали запреты на воду, скалы и занятую клетку, чтобы не было “читов”.

🔐 Само собой - авторизация

Чтобы пользователь не “прыгал” по чужим роверам и участкам, мы внедрили Telegram WebApp InitData (это такая строка с хешем, которую фронт передает нам в бэк, а мы - уже на сервере телеграм с токеном бота валидируем подпись. Если сошлась - то пользователь зашел к нам через телегу. Если нет - скорее всего он просто открыл веб-страницу как сайт, или что-то пытается поломать, подделать :)

Если кратко:

  • Telegram сам отдаёт токен с подписью.

  • Мы проверяем подпись на бэке по HMAC SHA256.

  • Получаем ID пользователя, сохраняем его в сессии.

Теперь всё честно: ровер – только твой, кристаллы – только твои.

🪐 Стало красивее: добавили кристаллы и рамки

Потом появились:

  • Кристаллы на клетках — можно собирать.

  • Подсветка клеток: белая рамка — твоя, красная — чужая.

  • Имена владельцев, чтобы было видно, кто что захватил.

    В планах: Покупка участков за кристаллы. Это было в текстовом боте. И ползая по карте, даже видны купленные тобой (белым) и оппонентами (красным) участки.

⚡️ Оптимизация и загрузка ассетов

Мы поняли, что каждая картинка может тормозить игру на слабом устройстве, и:

  • Добавили прелоадер, который подгружает PNG-шки перед игрой.

  • Сделали показ спиннера на любом действии (движение, загрузка).

  • Кэшируем тайлы и обновляем только при движении.

🤖 Как выглядит сейчас

Игрок:

  • Заходит в Telegram Mini App.

  • Авторизуется за доли секунды.

  • Видит изометрическую карту с ровером, кристаллами, участками, рекламными баннерами.

  • Может двигаться по клеткам, собирать кристаллы (в будущем - бурить и находить ресурсы, торговать ими, покупать землю).

А мы — всё это рисуем прямо в DOM.
Никаких Canvas, WebGL, или тяжелых движков. Только HTML, CSS и немного магии на JS.


💬 Если интересно — покажу, как это выглядит вживую.
Тестить можно тут. А если зайдёт — добавим NFT, фермы и квесты на выживание 😄

Показать полностью 3
62

Самая высокая гора в Солнечной системе — и она не на Земле

Многие удивляются, но высочайшая гора в Солнечной системе — не Эверест, а Олимп (Olympus Mons), расположенный на Марсе.

Самая высокая гора в Солнечной системе — и она не на Земле

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

  • Эверест — 8,8 км,

  • А Олимп — 21,9 км, если измерять от подножия до вершины.

Диаметр основания Олимпа — около 600 км, то есть он бы закрыл всю Францию, если его поставить в центре Европы.


Почему он такой огромный?

На Марсе нет тектонических плит, как на Земле. Вулканы там могут извергаться в одной и той же точке миллионы лет подряд, не «съезжая» со своего источника магмы.
Из-за этого Олимп мог расти бесконечно, пока не остыл.

Кроме того, марсианская гравитация — в 2,5 раза слабее земной, поэтому даже такие циклопические массы породы не «сползают» под собственным весом.


А если бы подняться на него?

  • Подъём занял бы дни, а не часы: склоны пологие, но огромные по протяжённости.

  • На вершине атмосферы почти нет — давление настолько низкое, что вскипела бы ваша слюна.

  • И да, там могут быть облака из замороженного углекислого газа, потому что температура может опускаться до –120 °C.


P.S. Почему мне интересен Марс?

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

А дальше захотелось не просто читать. Хотелось поучаствовать. Даже если не всерьёз, хотя бы на уровне модели. Так и появился наш проект — Mars Frontier , Это не космосим и не очередная «ферма» в телеграме :) Это попытка превратить карту Марса в игровую среду, где можно что‑то построить, что‑то исследовать, найти ресурсы, купить участок.

Так что если вы, как и я, залипаете на темы про Марс — присоединяйтесь. Это просто хобби, но хобби, которое растёт. Как сама гора Олимп.

Марс суров, но удивителен.

Хотели бы Вы побывать на Марсе?
Всего голосов:
Показать полностью 1
3

Как мы добавили «Звезду Победы» за 15 минут на игровую карту

Как мы добавили «Звезду Победы» за 15 минут на игровую карту

В честь 9 мая мы решили устроить мини-ивент: на карте появился один уникальный участок, на котором спрятана «звезда Победы». Кто первым найдёт и встанет на неё — получает приз.

Сделали это без новых моделей, миграций или «ивентового движка». Просто добавили одну строку в базу и использовали то, что уже работало — систему собственности тайлов и отрисовку кастомных текстур.

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


🧱 Что у нас уже было

Каждый участок карты может принадлежать игроку. Собственность хранится в таблице properties, с координатами x, y, ID владельца и (опционально) кастомным изображением.

Вот как мы это обрабатываем в Python (условный пример с использованием SQLAlchemy + Pillow):

tile = db.query(Property).filter_by(x=x, y=y).first() if tile: if tile.user_id == current_user.id: draw_border(img, dx, dy, color='green') else: draw_border(img, dx, dy, color='red') if tile.picture: texture_path = f"./pictures/adv/{tile.picture}" overlay_texture(img, dx, dy, texture_path)

🔹 draw_border() — функция, которая рисует обводку на изображении.
🔹 overlay_texture() — поверх накладывает PNG-текстуру на указанный тайл.


⭐ Что мы добавили для конкурса

1. Загрузили изображение
Файл star.png размером 64×64 положили туда же, где лежат остальные кастомные текстуры.

2. Добавили участок в базу
Просто внесли вручную запись в таблицу properties, где user_id равен 0 (свободный тайл), и picture = 'star.png'.

INSERT INTO properties (x, y, user_id, picture) VALUES (234, -112, 0, 'star.png');

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


🏆 Как определяется победитель

На каждом шаге игрока мы проверяем: не оказался ли он на «звёздном» тайле? Если да — проверяем, не занят ли приз. Если свободен — фиксируем победу:

STAR_COORDS = (234, -112) if (player.x, player.y) == STAR_COORDS: tile = db.query(Property).filter_by(x=234, y=-112).first() if tile and tile.user_id == 0: tile.user_id = player.id db.commit() notify_winner(player)

🟢 Всё. Победитель найден, деньги уходят, лог сохраняется, сообщение в канал готовится.


⚙️ Почему это было просто

Потому что:

  • У нас уже были гибкие свойства у тайлов, включая кастомные текстуры.

  • Уже существовала система проверки координат и принадлежности.

  • Мы сделали только одну вставку в базу, и один блок условий в обработчике движения.

  • Сам конкурс получился таким: https://t.me/terry_game_official


💡 Вывод

Это отличный пример, когда достаточно гибкая внутренняя архитектура позволяет внедрять геймплейные фишки буквально за пару минут — без костылей и трудоемкости.
Один PNG, одна строка в базе, один if. Ивент — готов.

P.s. игроки до сих пор ищут клад :) Энергия не позволяет разом пройти большое расстояние на карте, требуются остановки для подзарядки ровера.

Показать полностью 3
6

«Куда посадить игрока» на бесконечной карте— минизарисовка из продакшна геймдева

«Куда посадить игрока» на бесконечной карте— минизарисовка из продакшна геймдева

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

Проблема единой карты в том, что если она будет фиксированного размера, то в зависимости от числа игроков она будет либо слишком просторной и скучной, либо слишком тесной.

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

1. Стартовый «квадрат»

  • Координаты карты бесконечны (можно уйти в –12 000, 10 348 — не вопрос).

  • Первый игрок рождается в центре (0;0).

  • Далее берём квадрат N × N вокруг нуля, куда и бросаем новичков случайно.

  • N растёт: каждые 500 новых аккаунтов мы увеличиваем половину стороны ещё на 100 тайлов.

    • 1–500 игроков → диапазон ±50

    • 501–1000 → ±150

    • дальше по формуле: spawn_radius = 50 + ⌈players/500⌉ * 100

Так мы поддерживаем плотность: пока людей мало — все рядом, позже прямиком в пустыню не улетают, но столпотворения тоже нет.

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

Вот как выглядела эволюция карты при увеличении числа игроков:

стадии роста масштабов расползания игроков, белые квадраты - это купленные игроками земли


2. Баланс ресурсов
Карта пустая без кристаллов скучна, но «засыпать» её нельзя. Поэтому:

кристаллы_за_час = base_rate * online_players

  • base_rate ≈ 0,04 (подбирали эмпирически).

  • Респавн равномерный, но со случайным смещением, чтобы рядом не появлялись две одинаковые жилы подряд.

  • Если онлайн падает — генерация тоже замедляется: сервер не забит «мертвыми» ресурсами.


3. Диагональное движение
Поначалу был только крест: N/S/E/W. Пара тестеров застряли в симпатичном, но безысходном каньоне (координаты ‑23; ‑17). Добавили шаги NE, NW, SE, SW.
Результат:

  • плотность «тупиковых жалоб» упала < 0,1%

  • средняя длина пути до первой жилы сократилась примерно на треть (игроки теперь режут угол).


Вывод: растущий квадрат + пропорциональный респавн + диагонали держат карту живой и игрока — в движении, а сервер — без лишних процедур расчистки.

Тестовый чат-ботик в Telegram: https://t.me/terry_game_bot?start=4

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

Для тех - кому лень писать коммент
Всего голосов:
Показать полностью 4 1
1

5 живых Telegram-игр с экономикой и «добычей» на май 2025-го

(без «хомяков» и давно спящих ферм)

конечно, картинка с определенной долей сарказма - просто "тапалки" уже давно не в моде.. Сейчас хайп на вещи немного посложнее и поинтереснее по логике и стратегии внутри..

конечно, картинка с определенной долей сарказма - просто "тапалки" уже давно не в моде.. Сейчас хайп на вещи немного посложнее и поинтереснее по логике и стратегии внутри..


Дисклеймер - я не привожу ссылки на проекты, ибо у меня не стоит целью пиарить свои рефералки :) И вообще - мое видение этого своеобразного "топ-5" может отличаться от любого другого топа ))

Дисклеймер 2: если у вас не было опыта заработка на подобных играх, пожалуйста, будьте вежливы в комментариях, не нужно писать "все эти игры - туфта, никто ничего не получил", так как было много и обратных примеров, и я и члены моей семьи, и многие увлеченные друзья хорошо зарабатывали, по 10-15 тысяч рублей с одного аккаунта в телеграм. Всему хайпу сильно "подгадил" хомяк, который ничего никому не дал, но давайте не будем из-за хомяка мыслить стереотипно на всю индустрию )) Это скорее личная просьба. Заранее всем спасибо!

1. TapSwap

Механика проста: тапаем кнопку, собираем виртуальные «токены», потом меняем их на внутреннюю валюту биржи. Фишка 2025‑го — бот регулярно выпускает «пулы» с лимитом по времени: успел‑залил, получил повышенный курс. Отчёты о выплатах свежие, чат живой.

2. Yescoin

Вместо тапов — свайп: монетку надо «протянуть» по экрану, собирая комбо. За собранные цепочки дают бонус‑очки, которые капают даже в офлайне. Раз в неделю открывается «рынок», где эти очки можно обменять на апгрейды, ускоряющие фарм.

3. PixelTap

Мини‑игра формата «пиксельная шахта». Копаем блоки, собираем руду трёх редкостей, из неё крафтим инструменты и продаём на чате‑аукционе. Разработчики в апреле подвезли обновление с авто‑бурильщиками и сезонными квестами, так что онлайна хватает.

4. Space Miners

Idle‑симулятор шахты на орбите астероида. Строим буровые платформы, улучшаем роботов, выводим добытый «космический камень» на внутриигровую биржу. Интересна механика кооператива: можно объединяться в гильдии и шарить бонусы скорости, если все участники заходят каждый день.

5. Mars Frontier (бета)

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


💬 Что ещё живого с экономикой и стройкой видите в Telegram в этом году? Делитесь названиями — пополним список.

Показать полностью 1
3

Куда делись все эти «тапалки» в Telegram?

В прошлом году Telegram буквально разорвало от так называемых тапалок — простых игр, где надо бесконечно нажимать кнопку и собирать монетки, бонусы, «хомяков», фрукты, токены, что угодно. Кто-то даже реально выводил с этого деньги (ну, копейки), кто-то просто залипал, как в idle-игры.

🟡 На пике многие из таких игрушек собрали десятки миллионов пользователей (вопрос- сколько из них - живые, остается открытым :) Telegram-боты с элементами крипты и доната стали новой экосистемой.

Но что сейчас?


⚙️ Что стало с волной?

  1. Ажиотаж спал. Новые «тапалки» выходят, но уже не дают тот же взрывной эффект. Люди подустали от бесконечных кликов за крошки и обещаний «вот-вот залистимся».

  2. Игроки стали избирательнее. Сейчас чаще спрашивают: «А у вас что нового?», «Какой геймплей, кроме тапа?», «NFT? Нет, спасибо». Просто монетку за клик — уже не прокатывает.

  3. Началась сегментация. Кто-то ушел в фермы и симуляторы, кто-то делает RPG-квесты, кто-то интегрирует реальные бренды и товары (типа «отскань чек и покорми монстра»).

  4. Некоторые игры исчезли. И вместе с ними — токены и надежды отдельных игроков. Не все пережили хайп. Случаи «тапалка-схлопнулась» встречаются всё чаще. Урок: не храните «хомяков» в одном боте.


🧠 Что интересного происходит?

  • Появились боты, где геймплей строится вокруг привычек и задач, а не только «покликай и забудь».

  • Разработчики тестируют сложные механики: рынки, крафт, автоматизация — уже ближе к настоящим стратегиям.

  • Telegram сам продвигает формат Web App — полноценные мини-приложения прямо в чате. Это уже почти не бот, а маленькая игра внутри Telegram.


📉 Telegram-игры умерли?

Нет. Они перешли в стадию взросления.

Первые были, как «лихие 90-е»: хаос, раздачи, мемы, заработки. Сейчас — этап фильтрации и развития. Кто-то отвалился, кто-то делает крутые штуки. Тапалка как жанр не умер, но теперь она должна быть умной, красивой и не врать.


🤔 А вы залипали в этих Telegram-играх? Что вспоминается — «прикольно» или «больше никогда»?

Показать полностью
Отличная работа, все прочитано!