Многопользовательская пошаговая стратегия в 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>.пул = индустрия + (pop_units − индустрия) / 4
где pop_units = млн жителей (вниз). Пул обновляется каждый ход. Индустрия — это фабрики: при постройке она не тратится, только даёт пул. Население тоже помогает — каждый млн жителей сверх индустрии добавляет 0.25 к пулу. Индустрию можно качать только до потолка pop_units.
Постройки платят двумя ресурсами: пулом и материалом.
Материал (📦) лежит на складе. Если на складе не хватает — движок чеканит недостающее из пула по курсу 10 материала = 1 пул (вверх). Так что в итоге всё упирается в пул, а склад просто экономит его.
Сколько стоит одна штука:
• индустрия: 1 пул + 5 материала.
• материал: 1 пул → +10 материала на склад.
• корабль: пул = drive+weapons+shields; материал = 5×(drive+weapons+shields) + cargo.
Боевые статы (drive/weapons/shields) поднимают и пул, и материал. Cargo (трюм) идёт только в материал — 1 трюм = +1 материала, на пул-часть не влияет. Но материал может чеканиться из пула, поэтому большой трюм всё равно дорого обходится.
Полная цена корабля в пуле (если материал чеканить с нуля):
пул = (d+w+s) + ⌈(5×(d+w+s) + cargo) / 10⌉
• Scout d3 w1 s1 c50: статы 5 + ⌈75/10⌉ = 13 пула.
• Hunter d1 w3 s2 c5: статы 6 + ⌈35/10⌉ = 10 пула.
• Transport d1 w1 s1 c500: статы 3 + ⌈515/10⌉ = 55 пула — дёшев по статам, но трюм 500 гонит цену вверх.
max — позиция берёт весь доступный пул на своём месте в очереди (не фиксированное число). Помни про порядок: «корабли·max» выше заберут пул раньше того, что ниже.
Цель склада (что со складом в конце хода):
• сохранить (по умолчанию) — запас не трогаем, постройки кормятся свежим пулом.
• полный — после всей очереди остаток пула добивает склад до потолка. Это последний шаг, так что «корабли·max» выше заберут пул раньше склада. Нужен запас раньше — поставь «материал» явной позицией.
• в ноль — постройкам разрешено тратить накопленный склад (бёрст: за ход успеешь больше).
Как редактировать:
• Кнопочный билдер: на карточке планеты — «📝 Производство». Открывает текущую очередь из БД, можно добавить/удалить позиции и сохранить.
• Текстом: /produce_<planet_id>_<item>_<count|max>_...[_keep|full], где item — industry, material или имя ship-шаблона; max занимает весь остаток пула; в конце можно указать цель склада full/keep. Пример: /produce_42_industry_5_falcon_max_full.
Что важно знать:
• Перенос на следующий ход: точные количества (например «корабли × 3») переносят недостроенный остаток; max-позиции материала и кораблей одноразовые — тратят остаток пула в этот ход и не копятся; индустрия·max переносится, только если пула не хватило докачать индустрию до потолка населения.
• Пустая очередь = планета не строит ничего. Индустрия и материал на ней не растут сами по себе — без приказа 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, население — в pop-units (1 млн жителей = 1 очко), как и на планете. Ресурсы в полёте не пропадают из подсчёта.
Захват планеты — это присутствие твоей группы на её орбите при отсутствии живых врагов: на фазе 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 = индустрия + материал + население в трюме в pop-units.
Население (и на планете, и в трюме) считается в миллионах: 1 млн жителей = 1 очко.
Когда обновляется:
Каждый ход после фазы scoring. Видеть текущий счёт всей сессии — /score.
Условия завершения сессии:
• Остался один живой игрок — сессия закрывается, он автоматически победитель.
• Достигнут max_turns — сессия закрывается, побеждает игрок с наибольшим счётом.
• Все игроки выбыли (теоретически невозможно, но проверка есть) — сессия закрывается без победителя.
Что значит «выбыть»:
У игрока 0 планет И 0 кораблей-транспортов с населением в трюме. Если есть хотя бы один шанс восстановиться (есть транспорт с населением) — игрок жив.
Лидерборд:
По итогам сессии данные попадают в глобальный /leaderboard: сколько сессий сыграно, сколько выиграно, средний счёт. Это перманентно.
Команда /score покажет текущий счёт всех игроков в твоей сессии.