Однопользовательская RPG-симуляция живого мира с автоматическими боями. Игрок создаёт одного главного героя, выбирает ему снаряжение и решает, куда отправиться. Тактику боя герой исполняет самостоятельно.
Проект работает как статический SPA и подходит для GitHub Pages. Прогресс конкретного посетителя хранится в localStorage его браузера.
При запуске и SPA, и CMD предлагают одинаковый выбор:
- Базовый турнир — короткая партия по исходным правилам проекта. Общая
PlayerFactoryсоздаёт 8, 16 или 32 бойца,Gameведёт сетку на выбывание, а стратегииIArenaменяют расчёт урона. - Живой мир — постоянная RPG-кампания с обязательным главным героем, экипировкой, календарными турнирами, данжами, тренировками, дуэлями и фоновой жизнью противников.
Это два режима одного приложения, а не две несвязанные реализации: все шесть классов являются подклассами общего Player, создаются одной фабрикой и отдают свои боевые модификаторы обоим симуляторам через полиморфные методы.
- При первом запуске игрок обязательно создаёт героя и выбирает один из шести классов.
- На карте игрок заранее записывается на ближайший турнир либо выбирает занятие на текущий день: данж, тренировку или рейтинговую дуэль.
- В назначенный день проходит турнир на 8, 16 или 32 участника. Все раунды сетки рассчитываются автоматически; скорость журнала боёв героя можно менять или сразу показать итог.
- Герой получает опыт, валюту и снаряжение.
- В инвентаре и лавке игрок сравнивает предметы с надетыми, меняет экипировку и относит лучшие находки в кузницу.
- Чем престижнее турнир, тем реже он проходит, тем больше его сетка и ценнее чемпионская награда. Победа открывает следующую арену.
- Остальные бойцы продолжают жить и ежедневно участвуют в десятках фоновых боёв, турниров и походов в данжи.
- Рыцарь — меч и щит, снижение входящего урона.
- Лучник — усиление каждого третьего выстрела.
- Маг — лечение после применения навыка.
- Монах — рукопашное комбо и уклонение.
- Оружейник — две пистоли и второй выстрел.
- Мечник — два клинка и рискованный стиль при низком здоровье.
В каталоге находится 42 навыка. У каждого класса собственная линейка приёмов и общие навыки. Они открываются автоматически на заданных уровнях; легендарные и мифические предметы могут давать дополнительный навык.
Предметы занимают шесть слотов: оружие, вторая рука, голова, корпус, руки и обувь. Доступны пять редкостей:
- обычная;
- редкая;
- эпическая;
- легендарная;
- мифическая.
С легендарной редкости предмет получает дополнительное свойство и навык. В разделе «Коллекции» находка отмечается навсегда, даже если экземпляр позже продан.
Тридцать семь комплектов содержат 222 коллекционных элемента. Среди них есть классовые, смежные и универсальные наборы. Бонусы открываются за 2, 4 и 6 частей; справочник показывает недостающие элементы и объясняет назначение каждого комплекта.
Предмет можно усилить в отдельной кузнице до +5. Для этого нужны редкие печати закалки: они выдаются за поздние турнирные чемпионства, особых дуэльных противников и лишь изредка встречаются в сложных данжах. Купить их за обычные монеты нельзя.
На отдельном экране героя показан силуэт персонажа со всеми шестью надетыми предметами. Цвет, знак и подпись каждого элемента отражают его редкость, комплект и слот, поэтому экипировку можно оценить не только по цифрам.
В мире есть шесть последовательных турнирных арен и пять данжей. Турниры проходят по календарю с интервалом от 2 до 14 игровых дней, требуют предварительной записи и собирают сетку минимум из восьми бойцов. Более престижные события проходят реже, используют сетки на 16 или 32 участника и дают более крупные награды. Данжи дополнительно зависят от прожитых миром дней, достигнутой арены и времени восстановления после прохождения.
Между турнирами герой может тренироваться, проходить доступные данжи и участвовать в нелетальных дуэлях с соперниками близкого рейтинга. Любое такое действие завершает игровой день и продвигает календарь.
Данжи дают гарантированную добычу заданной минимальной редкости. Ассортимент магазина обновляется каждые два игровых дня.
При создании сохранения мир получает больше ста постоянных бойцов. Каждый из них имеет имя, происхождение, класс, уровень, рейтинг, экипировку и историю.
Фоновая симуляция работает после действий игрока и при возвращении в игру. За один игровой день мир обрабатывает события на всех открытых аренах и во всех данжах:
- противники проводят десятки боёв с бойцами своей арены;
- в календарные дни автоматически разыгрываются фоновые турнирные сетки;
- отряды соперников отправляются в данжи за опытом и добычей;
- победители получают опыт и предметы;
- после нужной серии побед и уровня они переходят выше;
- часть поражений на продвинутых аренах летальна;
- погибший противник больше не появляется;
- на каждой арене поддерживается популяция новичков соответствующего диапазона силы.
Поэтому ранний слабый противник может пережить много турниров, подняться через весь мир и встретить героя значительно позже. Одновременно стартовые арены не заполняются бойцами финального уровня.
Рейтинг «Сотня лучших» строится из текущего состояния мира и включает главного героя. Само открытие следующей арены не поднимает место: новый уровень престижа учитывается только после победы в турнире на этой арене. В таблице также видны общие победы, поражения и смертельные победы бойцов.
На странице героя ведётся история личных встреч: кого он побеждал, кому проигрывал и сколько раз. Летальные победы попадают в отдельный некролог и не исчезают вместе с противником из живого состава мира.
npm ci
npm run devProduction-сборка:
npm run buildПроверки:
npm run typecheck
npm test -- --runInBandКонсольный запуск также открывает меню выбора базового турнира или живого мира:
npm run dev_consrc/classesиsrc/factories/PlayerFactory.ts— шесть подклассов бойца и их единая фабрика для обоих режимов.src/catalogs/WorldCatalog.ts— навыки, календарные арены, данжи, предметы и комплекты живого мира.src/factories/ItemFactory.ts— генерация предметов, редкостей и легендарных свойств.src/gameplay/Game.ts— быстрый базовый турнир из исходной версии игры.src/gameplay/AdvancedBattle.tsиsrc/gameplay/WorldGame.ts— автоматический бой, постоянный прогресс и фоновая симуляция расширенного режима.src/web/ui.ts— контроллер постоянной кампании и связывание экранов SPA.src/web/BasicTournamentUi.ts— изолированный интерфейс короткого базового турнира.src/web/CharacterIllustration.ts— составная 2D-визуализация героя и предметов.src/web/styles/— стили, разделённые по режимам и экранам;styles.cssтолько задаёт порядок их подключения.
Сохранение локальное: оно не синхронизируется между устройствами и может быть очищено вместе с данными сайта. Для настоящих аккаунтов, общей таблицы лидеров между игроками и серверной фоновой симуляции следующим этапом понадобится backend и база данных. Доменное состояние уже сериализуемо, поэтому его можно перенести на API без замены боевой модели.