Многопользовательская пошаговая стратегия в Telegram
Galaxy — это стратегия про колонизацию галактики. Ты начинаешь с одной планетой-хоумволдом и одним шаблоном корабля. Развивай экономику, проектируй флот, изучай технологии, отправляй разведку через туман войны, заключай альянсы и сражайся с другими игроками за победу — по доминированию или по очкам.
🚀 Начать игру в Telegram@galtgbot
Полные правила игры. Открой нужный раздел.
size × 1 млн, где size — фиксированный атрибут планеты (генерируется случайно в диапазоне 100..1000). Когда население упёрлось — рост останавливается. Дополнительно население даёт потолок индустрии: industry на планете не может расти выше pop_units (где 1 ед. = 1 млн жителей). И добавляет «бонус» к пулу производства за ход — см. раздел Производство.
• 🏭 Индустрия — основа пула производства за ход. Каждый билд тратит из пула. Сама индустрия растёт только через очередь, и не выше потолка от населения.
• 📦 Материал — сырьё для построек. Это «забанканный пул»: 1 пул ⇄ 10 материала, без потерь. Движок сам чеканит материал под крафт из пула, так что производство не встаёт из-за пустого склада. У каждой планеты есть жёсткий потолок хранилища max_material (генерируется в диапазоне 100..1000, виден как второе число 📦 N/M). Потолок ограничивает только накопление запаса, не производство за ход. Материал можно возить транспортом на другие планеты.
• 🏗 Очередь производства — задаётся через /produce. Что не успели построить — переносится на следующий ход.
Среда (фиксирована при генерации):
• 🌡 Температура 0..100, оптимум — 50.
• ⚖️ Гравитация 0..100, оптимум — 50.
Чем дальше от 50 — тем медленнее растёт население. Хоумворлды генерируются близко к оптимуму, прочие планеты могут оказаться экстремальными — на них население упирается в низкий потолок (и значит индустрия тоже), но они нужны как форпосты.
Список своих планет — /planets, карточка конкретной — /planet_<id>.pool = industry + max(0, pop_units − industry) / 4
Где pop_units = миллионов жителей на планете (округление вниз). Каждый билд снимает с пула industry-стоимость (см. ниже). Пул восполняется в начале каждого хода.
Industry — это перманентный стат, не расходник. Постройка корабля или материала не уменьшает industry — она тратит только пул и материал. Думай об industry как о фабриках: фабрика не исчезает после того, как произвела ракету.
Это значит:
• Население участвует в производстве напрямую: даже если индустрия маленькая, миллионы жителей дают четверть своей величины как «бонус» к пулу.
• Industry в 4 раза эффективнее за единицу: каждая ед. industry даёт +1 к пулу, каждый pop_unit без industry — только +0.25. Поэтому имеет смысл вкладывать материал в industry: один раз потратишь 5 mat и +1 industry будет давать +0.75 пула каждый ход поверх «сырого» населения.
• Индустрия не может расти выше pop_units — потолок жёсткий. Чтобы расширить производство выше — сначала вырасти население.
• На пустой планете (industry=0) можно бутстрапить себя за счёт населения: pop_units=100 даёт pool=25, этого хватит, чтобы поставить первые индустрии.
Типы позиций:
• индустрия — расширить производственную мощность. Стоимость: 1 пул + 5 mat (mat движок добывает сам из пула, если на складе нет). Если industry ≥ pop_units — заблокировано (нужно сначала растить население).
• материал — явно отложить сырьё в склад. Стоимость: 1 пул → +10 mat. Обычно достаточно цели склада «полный» (см. ниже) — отдельная позиция нужна редко.
• корабль по твоему шаблону — указывай имя шаблона. Стоимость одного корабля: (drive+weapons+shields) пула + (5×(drive+weapons+shields) + cargo) материала (материал чеканится из пула).
• max — позиция занимает весь остаток пула за ход (динамически, не фиксированное число). Например, «корабли X · max».
Цель склада (что станет со складом в конце хода):
• сохранить (по умолчанию) — склад остаётся как есть; крафт кормится свежим пулом.
• полный — остаток пула докидывает склад до потолка, запас не тратится. Так делается «max кораблей, но склад в конце полон».
• в ноль — разрешает тратить накопленный склад на крафт сверх пула этого хода (бёрст: успеваешь больше за ход).
Примеры расчёта стоимости корабля:
• /ship_3_1_1_50_Scout (d=3, w=1, s=1, c=50): пул = 3+1+1 = 5, материал = 5×5 + 50 = 75.
• /ship_1_3_2_5_Hunter (d=1, w=3, s=2, c=5): пул = 1+3+2 = 6, материал = 5×6 + 5 = 35.
• /ship_1_1_1_500_Transport (d=1, w=1, s=1, c=500): пул = 1+1+1 = 3, материал = 5×3 + 500 = 515. (Транспорт дешёвый по пулу, но трюм гонит material наверх.)
Как редактировать:
• Кнопочный билдер: на карточке планеты — «📝 Производство». Открывает текущую очередь из БД, можно добавить/удалить позиции и сохранить.
• Текстом: /produce_<planet_id>_<item>_<count|max>_...[_keep|full], где item — industry, material или имя ship-шаблона; max занимает весь остаток пула; в конце можно указать цель склада full/keep. Пример: /produce_42_industry_5_falcon_max_full.
Что важно знать:
• Невыполненное переносится на следующий ход — переписывать очередь каждый ход не нужно.
• Пустая очередь = планета не строит ничего. Индустрия и материал на ней не растут сами по себе — без приказа industry/material запасы стоят на месте. Растёт только население (отдельная фаза, зависит только от температуры и гравитации).
• Текстовая команда /produce заменяет очередь целиком. Кнопочный билдер догружает текущую и сохраняет результат — менее опасный путь./ship_<drive>_<weapons>_<shields>_<cargo>_<name>
Параметры:
• drive — двигатель. Скорость в полёте = drive² клеток за ход. Также определяет радиус скана у групп.
• weapons — оружие. Шанс попадания в бою = weapons² / (weapons² + shields² цели).
• shields — щиты. Снижают шанс попадания врага (см. формулу выше).
• cargo — трюм. Вместимость на один корабль; используется для перевозки населения, индустрии и материала.
• name — имя класса (произвольное, латиница/кириллица, до 24 символов).
Ограничения:
• Значения drive/weapons/shields не могут превышать твой текущий уровень соответствующей технологии.
• Cargo не зависит от технологий, но удорожает корабль.
Примеры:
• /ship_3_1_1_50_Scout — быстрый разведчик с большим трюмом.
• /ship_1_3_2_5_Hunter — боевой фрегат.
• /ship_1_1_1_500_Transport — тяжёлый транспорт.
Список шаблонов — /ship_list. Команда /ship без параметров покажет справку. Удалить шаблон, по которому уже построены корабли, нельзя.size × 1 млн, индустрия ≤ pop_units, материал ≤ max_material. Кнопки «Max» уже учитывают свободное место на планете, так что вручную считать не нужно. Излишки оставь в трюме или вези на другую планету.
Зачем нужно возить:
• Бутстрап новой колонии. Индустрия и материал на планете не растут сами по себе. Свежезахваченная планета остаётся с 50% индустрии — этого может быть мало для быстрого старта. Привезти стартовый запас индустрии/материала транспортом — быстрее, чем поднимать с нуля.
• Поднять потолок производства на форпостах. Industry не может расти выше pop_units (см. Планеты). На планете с экстремальной температурой/гравитацией население почти не растёт само — значит и потолок индустрии низкий. Десантировать туда население транспортом — единственный способ поднять потолок.
• Концентрация ресурсов. Перебросить материал с тыловой планеты на фронтовую с большим пулом — там за ход построится больше флота.
• Спасение империи. Игрок выбывает только если у него 0 планет И 0 транспортов с населением в трюме (см. Победа и счёт). Пока есть хотя бы один транспорт с населением — ты жив, даже без планет.
• Сохранение очков. Cargo учитывается в счёте: индустрия и материал в трюме идут по 1:1, население — по 0.001 за единицу. Ресурсы в полёте не пропадают из подсчёта.
Захват планеты — это присутствие твоей группы на её орбите при отсутствии живых врагов: на фазе capture планета переходит к тебе. Десантировать население дополнительно не нужно — но при захвате чужой остаётся только 50% населения и 50% индустрии.P = weapons² / (weapons² + shields²)
Где weapons — у атакующего корабля, shields — у цели. Попадание уничтожает корабль (HP=1 в classic-режиме).
Бой длится, пока среди живых кораблей остаётся хотя бы одна пара врагов (не союзников). Как только все уцелевшие — союзники друг другу (или остался один игрок), бой прекращается. Жёсткий предел — 20 раундов: если за это время никто не победил, оставшиеся расходятся.
Логи:
После каждого боя ты получаешь короткое событие в /events со ссылкой на полный лог (/log_combat_<id>). Полный лог — кнопка «🌐 Открыть в браузере» открывает Telegram WebApp с пораундовым реплеем: видно, кто кого подбил и в каком раунде.
Захват планеты:
После боя планета достаётся тому из присутствующих на орбите игроков, у кого больше всего кораблей. Но есть оговорки для альянсов:
• Если среди присутствующих есть сам владелец — планета остаётся за ним. Союзники не отбирают планеты друг у друга, даже если кораблей у союзника больше.
• Если на орбите несколько не-союзных игроков и бой по какой-то причине не разрешил конфликт — захват пропускается, планета остаётся за прежним владельцем до следующего хода.
При захвате чужой планеты сохраняется 50% населения и 50% индустрии, материал остаётся целиком, очередь производства сбрасывается.L² × 100 очков. То есть 1→2 — 100, 2→3 — 400, 5→6 — 2 500. Максимум — 100.
Переключение фокуса:
Меняется мгновенно через /tech (не требует ожидания хода). Накопленные очки текущего направления не теряются — просто перестают расти, пока ты не вернёшься.
Влияние:
• Уровень технологии действует на новые корабли при постройке. Уже построенные сохраняют старый уровень — не апгрейдятся.
• Новый шаблон корабля можно создать с уровнями не выше текущих технологий.ceil(drive × 1.4). То есть drive=1 → 2, drive=2 → 3, drive=3 → 5 клеток. Группа сканирует и в полёте — это полезно для разведки.
Туман войны:
• Планета, которую ты видел раньше, но сейчас вне скана — отображается в последнем известном состоянии, помечена как «устаревшие данные».
• Планета, которую ты ни разу не видел, — '?' на карте.
• Бывшие свои планеты после потери — устаревший снимок.
Активный скан планеты — /scan_<id> — единичная команда, дающая полные данные о цели, если она в радиусе.score = Σ(population_k + industry_k + material_k) по всем своим планетам
+ Σ(cargo_value_k) по всем своим группам в полёте
Где cargo_value = индустрия + материал + (население в трюме × 0.001).
Когда обновляется:
Каждый ход после фазы scoring. Видеть текущий счёт всей сессии — /score.
Условия завершения сессии:
• Остался один живой игрок — сессия закрывается, он автоматически победитель.
• Достигнут max_turns — сессия закрывается, побеждает игрок с наибольшим счётом.
• Все игроки выбыли (теоретически невозможно, но проверка есть) — сессия закрывается без победителя.
Что значит «выбыть»:
У игрока 0 планет И 0 кораблей-транспортов с населением в трюме. Если есть хотя бы один шанс восстановиться (есть транспорт с населением) — игрок жив.
Лидерборд:
По итогам сессии данные попадают в глобальный /leaderboard: сколько сессий сыграно, сколько выиграно, средний счёт. Это перманентно.
Команда /score покажет текущий счёт всех игроков в твоей сессии.