Однопользовательская RPG-симуляция живого мира. Игрок создаёт главного героя, выбирает снаряжение, сборку навыков и занятия. Бои можно рассчитывать автоматически либо проходить с ручным выбором доступных действий.
Браузерный интерфейс написан на React и TypeScript, собирается Vite в статический SPA и подходит для GitHub Pages. Сервер для игры не нужен. Прогресс конкретного посетителя хранится в localStorage его браузера.
При запуске и SPA, и CMD предлагают одинаковый выбор:
- Базовый турнир — короткая партия по исходным правилам проекта. Общая
PlayerFactoryсоздаёт 8, 16 или 32 бойца,Gameведёт сетку на выбывание, а стратегииIArenaменяют расчёт урона. - Живой мир — постоянная RPG-кампания с обязательным главным героем, экипировкой, календарными турнирами, данжами, тренировками, дуэлями и фоновой жизнью противников.
Это два режима одного приложения, а не две несвязанные реализации: все шесть классов являются подклассами общего Player, создаются одной фабрикой и отдают свои боевые модификаторы обоим симуляторам через полиморфные методы.
- При первом запуске игрок обязательно создаёт героя и выбирает один из шести классов.
- На карте игрок заранее записывается на ближайший турнир либо выбирает занятие на текущий день: многоэтапный поход, тренировку или дуэль. Дуэли развивают отдельный прогресс и не повышают мировой турнирный рейтинг.
- В назначенный день проходит турнир с сеткой на выбывание. Бои остальных участников рассчитываются в фоне; свои бои можно смотреть, пропускать или проходить вручную.
- Герой получает опыт, валюту и снаряжение.
- В инвентаре и лавке игрок сравнивает предметы с надетыми, меняет экипировку и относит лучшие находки в кузницу.
- Чем престижнее турнир, тем реже он проходит и ценнее чемпионская награда. Для открытия следующих арен нужны заданные уровни и результаты выступлений.
- Остальные бойцы продолжают жить и ежедневно участвуют в десятках фоновых боёв, турниров и походов в данжи.
- Между боями игрок выбирает тактический профиль, берёт контракты фракций и развивает заслужившие имя реликвии.
- Рыцарь — меч и щит, снижение входящего урона.
- Лучник — усиление каждого третьего выстрела.
- Маг — лечение после применения навыка.
- Монах — рукопашное комбо и уклонение.
- Оружейник — две пистоли и второй выстрел.
- Мечник — два клинка и рискованный стиль при низком здоровье.
У каждого класса собственная линейка приёмов, пассивные особенности и боевой ресурс. Навыки открываются на заданных уровнях; легендарные и мифические предметы могут давать дополнительный навык. Для боя выбирается ограниченная сборка: вручную либо автоматически. Книга навыков описывает в том числе приёмы от предметов.
Автосборка сохраняет атакующие приёмы и выбирает не больше одного лечения. Решение о лечении учитывает реально восстанавливаемое здоровье; ручной выбор сохраняется отдельно. Если часть ручной сборки временно недоступна из-за ограничения уровня арены, на этот бой подбирается замена без изменения сохранённых предпочтений.
Скорость увеличивает частоту действий с убывающей отдачей. Усталость нарастает после действий обоих бойцов, а не от количества ходов быстрого соперника: в затяжном бою усиливается натиск и слабеет лечение, но защита продолжает снижать урон. Прямой урон за действие ограничен 35% максимального здоровья цели; состояния рассчитываются отдельно.
Предметы занимают шесть слотов: оружие, вторая рука, голова, корпус, руки и обувь. Доступны пять редкостей:
- обычная;
- редкая;
- эпическая;
- легендарная;
- мифическая.
С легендарной редкости предмет получает дополнительное свойство и навык. В разделе «Коллекции» находка отмечается навсегда, даже если экземпляр позже продан.
В каталоге есть классовые, смежные и универсальные комплекты, награды особых противников, фракционных цепочек и элитной лиги. Бонусы открываются за 2, 4 и 6 частей; справочник показывает недостающие элементы и объясняет назначение каждого комплекта. Актуальный состав каталога отображается в коллекциях.
В общий пул добычи входят, в частности, новые комплекты «Фонарщики трясины», «Хор белой кости», «Угольные драгуны» и «Чёрный прилив». Каждый состоит из шести предметов и имеет собственные силуэт, палитру и набор допустимых классов.
Предмет можно усилить в отдельной кузнице до +5. Для этого нужны печати закалки: они выдаются за поздние турнирные чемпионства, особых дуэльных противников и изредка встречаются в сложных данжах. В лавке печати также продаются постоянно, по одной или по пять, с базовой ценой 20 000 монет за штуку и обычной поправкой на фракцию и репутацию. Покупки не продвигают календарь и не ограничены дневным запасом. Печати закалки не связаны с печатями летописи для новой эпохи.
Легендарные и мифические вещи запоминают победы владельца. Надетая вещь получает известность, проходит три ступени наследия и открывает один постоянный путь — силы, защиты или темпа. Ненужные вещи можно разобрать на реликтовую пыль, необходимую для пробуждения заслужившего имя предмета.
Финалы, смертельные победы, выживание на грани гибели и победы над легендами записываются в историю предмета и развивают его свойства. Ступень, путь и подвиги отражаются гравировкой на 2D-модели и иконке. Несколько развитых вещей одного комплекта могут включить боевой резонанс: условное усиление урона, защитный ответ или сокращение перезарядок.
Мировые реликвии имеют собственную историю владельцев. Ненадетую пробуждённую мировую реликвию можно передать подходящему живому NPC: она действительно удаляется из инвентаря героя и переходит к новому владельцу. Потерянные реликвии могут снова появляться в обороте мира; это не создание копии исходного предмета.
На отдельном экране героя показан силуэт персонажа со всеми шестью надетыми предметами. Цвет, знак и подпись каждого элемента отражают его редкость, комплект и слот, поэтому экипировку можно оценить не только по цифрам.
«Надеть лучшее» оценивает всю сборку, включая комплекты, свойства предметов, темп и предел критического шанса 60%. Сравнение тоже показывает итоговые характеристики героя, поэтому избыток крита не выдаётся за улучшение. При выключенной автоматической экипировке предметы не заменяются без действия игрока.
Турнирные арены открываются последовательно. Турниры проходят по календарю, требуют предварительной записи и собирают сетку минимум из восьми бойцов. Более престижные события проходят реже и дают более крупные награды; точные сроки и условия видны в карточке события. Данжи дополнительно зависят от прожитых миром дней, достигнутой арены и времени восстановления после прохождения.
Между турнирами герой может тренироваться, проходить доступные данжи и участвовать в нелетальных дуэлях с постоянными бойцами мира. Тренировки ограничены продвижением по аренам. Занятия продвигают игровой календарь; промежуточные решения внутри похода не равнозначны отдельной тренировке.
Данж проходит в отдельном окне с разветвлённым маршрутом. Узлы включают обычные и элитные бои, тайники, лагерь, святилища, ловушки, торговца и встречи с соперниками. Изучение подземелья сохраняется: повторные походы и найденные подсказки открывают скрытые ветви и альтернативного босса. Силы расходуются по ходу экспедиции и восстанавливаются предусмотренными событиями. Торговец использует монеты текущего похода. Раннее отступление сохраняет часть накопленного, а завершение показывает отдельное окно наград. Ассортимент городской лавки обновляется по игровым дням.
Каждый календарный турнир получает устойчивый для своей даты набор правил: запрет лечения, тяжёлый песок, усиленную защиту, повышенный критический шанс и другие модификаторы. Они заранее видны в карточке события и применяются к реальному расчёту всех боёв сетки.
У героя есть четыре профиля автоматического боя: ровный бой, давление, выжидание и срыв темпа. Профиль меняет порог лечения, момент добивающего навыка, отношение к сильным приёмам и приоритет контроля — это не только подпись в интерфейсе.
Во время боя показываются классовый ресурс, действующие состояния и причины автоматического выбора. Сочетания состояний и навыков могут давать дополнительные эффекты. Итоговая аналитика включает нанесённый урон, лечение, критические удары, применённые навыки и значимые взаимодействия.
Бойцы получают постоянные черты, временные травмы и шрамы. Травмы заживают с игровыми днями, шрамы остаются и одновременно дают преимущество и напоминают о тяжёлом поражении.
Постоянные соперники запоминают не только число встреч, но и класс, тактику, реально применённые навыки и рисунок боя. Пять стадий памяти открывают условные контрмеры против натиска, критов, лечения, контроля, коронного приёма и добивания. Смена сборки даёт эффект неожиданности и ослабляет подготовленные ответы; старый стиль не стирается мгновенно и при возврате узнаётся быстрее. После четырёх дней без встречи активная изученность постепенно угасает, но слабый след остаётся.
После завершения эпохи герой сохраняется в архиве. Его роль в следующем мире определяется итогами карьеры, а не единым случайным шансом: титулы и защиты ведут к легенде, смертельные победы и вражда — к особому противнику, длительная карьера и встречи — к наставнику, высокая фракционная репутация — к основателю традиции. Роль влияет на доступных противников, учеников или положение фракции. Архив показывает полученную роль.
В новую эпоху гарантированно переходят до трёх самых памятных живых NPC-соперников. Они получают эпическую экипировку, часть прежней статистики и дальше живут по обычным правилам мира. Погибшие остаются только в некрологе и не возвращаются.
При переходе выбираются наследие, передаваемый предмет и законы нового мира. Поздние эпохи имеют обязательную финальную цель, зависящую от наследия предыдущего героя, и дополнительные испытания. Условия завершения показываются в интерфейсе; для ролей противника и легенды среди них есть победа над предшественником.
Три фракции предлагают контракты на уже существующие активности: тренировку, дуэли, походы, турниры и особых противников. При принятии выбирается подход — честь повышает репутацию, выгода увеличивает выплату. Репутация каждой фракции развивается отдельно: статусы на 8, 20 и 45 очках повышают монеты и опыт в её новых контрактах на 5%, 12% и 20%. Предложения имеют срок действия, прогресс отображается в навигации и отдельном разделе.
Помимо обычных контрактов у каждой фракции есть последовательная цепочка заданий с порогами репутации. Награды этапов включают монеты, печати и части собственного комплекта; первый завершённый этап открывает наставника с прибавкой к опыту тренировки. Он не отменяет ограничения тренировок по арене.
Фракции конкурируют за арены, подземелья и поставки лавки. Контроль влияет на условия наград и торговли; состояние владений видно в разделе мира. Враждебность может привести к появлению фракционного охотника с отдельными условиями вызова.
Экономика обычно пересматривается раз в семь дней, а в сезон войны фракций — раз в четыре. Влияние и контроль конкретной арены обновляются только за прошедшие турнирные окна. Пока новая сетка на ней не состоялась, накопленное влияние не обнуляется и не затухает из-за недельной проверки. В летописи доступны полные списки реликвий, наставников, школ и ветеранов с постраничным просмотром; фракции бойцов видны и в элитном рейтинге.
При создании сохранения мир получает больше ста постоянных бойцов. Каждый из них имеет имя, происхождение, класс, уровень, рейтинг, экипировку и историю.
Фоновая симуляция работает после действий игрока и при возвращении в игру. За один игровой день мир обрабатывает события на всех открытых аренах и во всех данжах:
- противники проводят десятки боёв с бойцами своей арены;
- в календарные дни автоматически разыгрываются фоновые турнирные сетки;
- отряды соперников отправляются в данжи за опытом и добычей;
- победители получают опыт и предметы;
- бойцы расходуют собственные монеты на покупки и улучшение подходящей экипировки;
- цели, характер и отношения влияют на выбор занятия и дальнейшую карьеру;
- после нужной серии побед и уровня они переходят выше;
- часть поражений на продвинутых аренах летальна;
- погибший противник больше не появляется;
- на каждой арене поддерживается популяция новичков соответствующего диапазона силы.
Поэтому ранний слабый противник может пережить много турниров, подняться через весь мир и встретить героя значительно позже. Одновременно стартовые арены не заполняются бойцами финального уровня.
Мир разделён на сезоны с временными правилами: они меняют, например, смертность, доходы, награды походов или влияние фракций. Сезон отдельно хранит результаты арен и элиты; при завершении определяются чемпионы, происходят карьерные переходы и пополнение состава. Личные дуэли и походы не дают сезонных очков арены. История сезонов доступна в летописи.
У NPC есть цели, связи, династии и история решений. Часть ветеранов становится наставниками и передаёт опыт ученикам; карьера других может привести к роли будущего босса. Это конечные правила локальной симуляции, а не самостоятельный ИИ-сервис. Летопись показывает цели, школы, отношения и доступные особые встречи.
За реальные достижения NPC получают прозвища и дополнительные черты: турнирные чемпионства, опыт дуэлей и выживание в долгой карьере. Важные встречи проходят через общий пошаговый боевой движок, массовые — через упрощённую оценку силы. Даже эта оценка учитывает классовые характеристики, снаряжение, навыки, травмы, черты и правила турнира.
Рейтинг «Сотня лучших» строится из текущего состояния мира и включает главного героя. Само открытие следующей арены не поднимает место: новый уровень престижа учитывается только после победы в турнире на этой арене. В таблице также видны общие победы, поражения и смертельные победы бойцов.
На странице героя ведётся история личных встреч: кого он побеждал, кому проигрывал и сколько раз. Летальные победы попадают в отдельный некролог и не исчезают вместе с противником из живого состава мира.
Элита ведёт отдельный рейтинг. Лига короны проходит каждые 10 игровых дней (каждые 8 при законе «Раздор короны») и служит турнирным путём в элиту. Предварительная запись сохраняется; будущие записи из старых сохранений переносятся на ближайшую более раннюю Лигу. Охота на легенд — последовательное оспаривание верхних мест. Защита титула может проходить вручную либо автоматически по выбранной настройке.
npm ci
npm run devProduction-сборка:
npm run buildПроверки:
npm run typecheck
npm test -- --runInBandКонсольный запуск также открывает меню выбора базового турнира или живого мира:
npm run dev_conReact управляет обоими режимами, навигацией, окнами боя, экипировкой, обучением и уведомлениями. Правила игры остаются в независимом TypeScript-движке. Существующие сохранения загружаются без начала новой кампании.
- Обновления уведомлений отделены от обновлений мира. Отдельный ход боя не пересоздаёт страницу карты или инвентаря; карточки сохраняют свои DOM-узлы и фокус.
- Экраны и тяжёлые окна загружаются по необходимости. Длинные списки отображаются страницами, а подробные досье строятся только при раскрытии. Рейтинг по-прежнему показывает всю сотню.
- Подготовка и сжатие сохранения выполняются в Web Worker. Частые изменения объединяются до актуального состояния, а прогресс отдельного хода записывается небольшим контрольным снимком.
- При закрытии страницы или переключении режима выполняется синхронное сохранение. Ошибки хранилища показывают экран восстановления; неверный импорт не заменяет текущий прогресс.
- Данные для ежедневных решений NPC индексируются один раз на день. Завершённые звуки, таймеры, наблюдатели и подписки освобождаются.
Для GitHub Pages остаётся прежняя схема: workflow .github/workflows/deploy.yaml устанавливает зависимости, проверяет проект, собирает его и публикует dist. В vite.config.ts указан базовый путь /Game/; при другом имени репозитория его нужно изменить. Переходы между экранами используют hash-маршруты, поэтому серверная обработка адресов не требуется.
src/classesиsrc/factories/PlayerFactory.ts— шесть подклассов бойца и их единая фабрика для обоих режимов.src/catalogs/WorldCatalog.ts— навыки, календарные арены, данжи, предметы и комплекты живого мира; числовые бонусы комплектов также задаются здесь.src/catalogs/WorldExpansionCatalog.ts— черты, шрамы, тактики, правила турниров, фракции и пути реликвий.src/catalogs/NewGamePlusCatalog.ts— наследие, законы эпох и титулы новой игры+.src/factories/ItemFactory.ts— генерация предметов, редкостей и легендарных свойств.src/gameplay/core/— главный движок, часы, типы и генераторы случайности.src/gameplay/combat/— бой, тактики, аналитика, баланс и память соперников.src/gameplay/equipment/— подбор, развитие, сравнение и наследие снаряжения.src/gameplay/world/— фракции, сезоны, рейтинги, события и самостоятельная жизнь NPC.src/gameplay/progression/,dungeons/,tournaments/— переходы эпох, походы и турнирные сетки.src/gameplay/save/— проверка, миграция, сжатие и фоновая запись сохранений.src/web/main.tsx— минимальная точка входа браузерной версии.src/web/react/app/— каркас приложения, маршрутизация, состояние, глобальные сервисы и общие стили.src/web/react/features/— самостоятельные игровые области: карта, экипировка, бои, мир, рейтинги, контракты, прогрессия и обучение. Стили каждой области хранятся рядом с ней.src/web/react/shared/— переиспользуемые UI-элементы и небольшие утилиты без игровой логики.
Сохранение локальное: оно не синхронизируется между устройствами и может быть очищено вместе с данными сайта. В интерфейсе доступны экспорт и импорт сохранения; перед обновлениями полезно сохранить копию.
GitHub Pages раздаёт только статические файлы. Каждый посетитель играет в собственном мире: NPC действительно имеют сохраняемые характеристики, предметы и историю, но расчёты выполняются в браузере при действиях и возвращении игрока, а не непрерывно на сервере. Таблицы содержат героя и NPC его сохранения, не других посетителей сайта.
Аккаунтов, сетевых боёв, общего рейтинга реальных людей и серверной проверки прогресса в этой версии нет. Для них потребуется отдельный backend и база данных; одного размещения на GitHub Pages недостаточно.