Техническое задание - Space-Lords-TG/docs GitHub Wiki
1. Предисловие
В данном документе курсивом выделено всё то, что не входит в MVP. Всё остальное же – входит.
1.1 Глоссарий
- MVP (Minimum Viable Product) – минимально жизнеспособный продукт, который включает только основные функции, необходимые для запуска игры.
- MMORPG (Massively Multiplayer Online Role-Playing Game) – многопользовательская ролевая онлайн-игра, где игроки взаимодействуют друг с другом в виртуальном мире.
- Автобатлер – игровая механика, где бои происходят автоматически без прямого участия игрока, на основе заранее заданных параметров.
- Крафт-система – система создания и улучшения предметов (в данном случае – кораблей и их компонентов).
- ПВП (Player versus Player) – игровой режим, где игроки сражаются друг против друга.
- Лидерборд – таблица лидеров, отображающая рейтинг игроков на основе их достижений.
- Ресурсы – игровые материалы, используемые для крафта, улучшений и других действий (металл, газ, кристаллы).
- КД (Кулдаун) – время перезарядки способности или действия.
- Урон – количество здоровья, которое теряет противник при атаке.
- Защита – параметр, уменьшающий получаемый урон.
- Щиты – дополнительный защитный параметр, поглощающий урон до полного истощения.
- Манёвренность – параметр, определяющий шанс уклонения от атаки.
- Инициатива – параметр, определяющий порядок ходов в бою.
2. Описание игры
Текстовая MMORPG, где игроки крафтят себе из доступных частей космические корабли и сражаются на них за территории в пошаговых боях.
2.1. Уникальные фичи
Особенности нашей игры.
- Межпользовательское взаимодействие (бои, лидерборды)
- Крутой космический сеттинг
- Сити-билдинг (хотя бы в виде простейшего управления планетами)
- Система крафта кораблей
- Многоуровневый захват территорий
2.2. MVP
Описание MVP нашей игры.
- Наличие пошаговой боевой системы типа auto battler.
- Арена – подбор игроков для боя друг с другом вне зависимости от расположения на карте.
- Менеджмент корабля (просмотр его конфигурации, установка пушек на корпус)
- Перемещение по “карте” (между планетами и системами)
- Взаимодействие с планетами
- Просмотр информации
- Захват планеты
- Сбор ресурсов с захваченной планеты
- Улучшение планеты
- Какая-то экономика в плане использования ресурсов (улучшение модулей)
- Лидерборд игроков с бОльшим кол-вом захваченных планет
3. Геймплей
3.1. Основы дизайна геймплея
Основа дизайна геймплея — соревнование между игроками на кораблях, которые они сами построили, и захват территорий. Отталкиваясь от этого, нужно сделать упор на крафт–систему кораблей, боёвку, функционал захвата (планет) и прокачки (корабля).
3.2. Игровой цикл
Основной игровой цикл: в чём состоит верхнеуровневый геймплей игрока.
- Постройка/починка корабля
- Перемещение до точки интереса
- Бой (опционально)
- Получение ресурсов
- Улучшение своего корабля/планеты
3.3. Механики
Механики, присутствующие в игре:
- Боевая система
- Крафт–система, управление кораблём (изменение модулей)
- Управление планетами
- Перемещение по карте
3.3.1. Боевая система
Предполагается ПВП.
В MVP единственный способ “подраться” – зайти на Арену. Как только другой игрок с ~такой же мощью зайдёт на неё – начнётся бой.
Перед самим боем можно спрашивать игрока, готов ли он вступить в него, показывать сравнение кораблей и т. д.
Стоит условно рассмотреть два подхода, применимых к нашей задаче: боёвка с каким-то инпутом игрока и автобатлер.
3.3.1.1. Боёвка с инпутом.
Предполагает какую-то синхронизацию и взаимодействие между игроками в рамках одного боя (игрок А нажал кнопку атаки, регнуло урон, прислали уведомление игроку Б, он как-то отреагировал). Игроки также действуют не мгновенно, так или иначе будут какие-то задержки между вводом действий от них.
3.3.1.2. Автобатлер
Предполагает автоматический расчёт на основе параметров двух игроков, логи этого расчета в каком-то виде демонстрируются игроку (немного не наш случай, но к такому описанию сводятся разные авточесы, типо Battlegrounds в Hearthstone и Teamfight Tactics в LoL'е).
В рамках наших ресурсов логичнее выбрать подход автобатлера, например, это можно реализовать так:
Бой идёт до тех пор, пока здоровье одного из кораблей не станет меньше 0, корабли по очереди атакуют друг друга. Урон рассчитывается исходя из мощности орудий атакующего и защиты атакуемого +- какое-то рандомное значение, чтобы у игрока слабее всё равно был какой-то шанс.
Логи этих расчетов присылаются игрокам на манер текстовых и олдовых РПГ, а-ля:
- Vasya666 атакует ZXC_Ghoul, урон: 200, оставшееся здоровье 100.
- ZXC_Ghoul атакует Vasya666, урон: 100, оставшееся здоровье 150.
- Vasya666 атакует ZXC_Ghoul, урон: 137, оставшееся здоровье 0.
- Vasya666 побеждает.
3.3.1.3. Боевые параметры.
- Скорость - кол-во выстрелов за единицу времени.
- Урон – кол-во дамага, которое наносится за один ход.
- Крит. частота – вероятность нанести крит. удар.
- Крит. урон – множитель урона при крит. ударе.
- Защита – кол-во урона, вычитаемое из любой атаки противника.
- Щиты – аналогично защите, только значения поглощаемого урона намного больше.
- Манёвренность – шанс уклониться от атаки.
- Здоровье - при падении до 0 корабль уничтожается.
В бою все значения могут колебаться в диапазоне +-20% от их значения.
3.3.2. Крафт–система, управление кораблём (изменение модулей)
В расширенном MVP по-умолчанию есть три слота под корабли, но только один из них может быть активным (корабль в нём будет использоваться для всех действий). Он может зайти в один из них → попасть в меню управления кораблём, посмотреть его суммарный урон и защиту, слоты и что в них установлено. В MVP предполагается только один единственный слот корабля. Смена содержимого слотов (например, орудия) подразумевает наличие инвентаря, откуда игрок мог бы выбирать доступные для установки орудия/обшивку и т. д.
В рамках MVP предлагается ограничиться двумя крафт--частями: корпусом и пушками. В дальнейшем можно добавить модули (двигатели, защитные пластины, доп. щиты и и т.п.), которые тоже будут влиять на параметры.
Часть корабля | На что влияет |
---|---|
Пушка | Урон, крит. частота, крит. урон, скорость |
Корпус | Защита, манёвренность, щиты |
Пушки и корпуса можно покупать и улучшать за ресурсы.
3.3.3. Управление планетами
Прилетев к планете, игроку доступен просмотр её владельца, уровня планеты, получаемые ресурсы и возможность вступить в бой для захвата планеты. Если планета захвачена игроком (собой) – он может собрать с неё произведённые ресурсы.
Для захвата планеты игроку нужно победить текущего владельца планеты. В качестве корабля владельца выступает его текущий активный корабль (в случае, если слотов у игрока несколько). Перед атакой можно посмотреть информацию о корабле. Бой происходит по описанной боевой системе автобаттла. При победе планета переходит во владение атакующего, при этом накопленные ресурсы на планете не сбрасываются.
Получаемое кол-во ресурсов зависят от уровня планеты так же, как и максимальное кол-во хранимых на ней добытых ресурсов. Уровень планеты можно прокачать за ресурсы. Возможно, стоит сделать управление планеты дистанционным, то есть у игрока будет пул планет в его владении, он может их просматривать. Находиться в той же системе не обязательно.
В MVP есть три вида ресурсов и три вида планет, которые их производят.
Тип планеты | Производимый ресурс |
---|---|
Каменная | Металл |
Газовая | Газ |
Ледяная | Кристаллы |
3.3.4. Перемещение по карте
Организовать карту можно в виде сети (графа): игрок может переместиться из системы, в которой он находится, в соседние (в те, к которым есть путь) за некоторое реальное время, которое зависит от скорости (двигателя) корабля.
Отобразить карту можно в виде:
В текущем примере
Сущность | Обозначение |
---|---|
Корабль | Красный треугольник |
Каменная планета | Жёлтый прямоугольник |
Ледяная планета | Фиолетовый прямоугольник |
Газовая планета | Зелёный прямоугольник |
Можно отобразить карту в виде эмодзи, вот как сделано в @ChatWarsBot:
Красный пин – положение игрока.
Остальные эмодзи – локации.
Можем сделать таким же образом карту системы 8x8. Игрок будет видеть карту системы, а не окружающих его небесных тел в радиусе 8 клеток. Т.е. центр карты привязан к центру системы, а не к положению игрока (поэтому не всего корабль будет отображаться в центре карты). На карте каждой ячейке (эмодзи) будет привязана команда перемещения на неё. Игрок нажимает на эмодзи с планетой – срабатывает команда перемещения – корабль летит в нужную клетку.
Итоговый вариант реализации перемещения представлен в макетах и выглядит следующим образом:
4. UI, арты, системные экраны
Описание UI игры, как пользователь вводит информацию.
Поскольку в выводе информации мы ограничены функциональностью телеграма, то будем использовать в основном inline кнопки (которые меняются при нажатии) и нижнее меню (в нём очень важно не переборщить функционалом, например в @just_fishing_bot оно при каждом действии обновляется, и это раздражает).
Можно для информационных сообщений добавить отправку нарисованных нами стикеров (пример стикер пака) или выводить сообщение с картинкой.
5. Аналитика
5.1. Анализ рынка/конкурентов
В данной секции приведены в качестве референсов аналогичные проекты:
- @ChatWarsBot – текстовая бездонатная (почти) ММОРПГ с механикой передвижения по карте, лута точек интереса, рейдов. Ближе всех по задуманной реализации.
- @StarBattleBot – текстовая RPG в космосе. Самый близкий по сеттингу бот. Крайне перегружен механиками и текстом. Есть крафт–система, боевые параметры, перемещение по карте, разные типы урона, задания, куча боевых маневров, варп–прыжки, добыча ресурсов на астероидах. Хороший пример того, как UI убивает желание играть в проработанную с т.з. механик игру.
- @tower_rpg_bot – дефолтная текстовая ММОРПГ, где нужно подниматься вверх по уровням башни (SAO reference?).
- @just_fishing_bot – простейший кликер в сеттинге рыбалки (сделанный Артёмом Д. в качестве курсача по БД). Всё взаимодействие сделано через меню – можно использовать подход для отображения контекстных меню.
6. Цели
6.1. Целевая аудитория
Так называемые киллеры (соник шедоу.jpeg)
Всякие любители ПВП, захватов чего-либо, конкуренции между игроками, ПВП в дарк соулс, zxc на сфах под фонк.
6.2. Целевая платформа
Телеграм (десктоп и мобилка).
6.3. Целевой бюджет
Две банки “Балтика 9”, пара месяцев семестра.