Интеграционная ветка 3D (решения команды 04–06.11). Без конфликтов с develop: develop целиком входит в ветку (59 коммитов вперёд, 0 позади).
Что вошло
3D-поселение (решение 05.11: только 3D)
Сцена City3D: местность, зоны по уровню Ратуши, расчистка, стройка на сетке (SettlementMap), общий HUD.
Все 12 зданий 2D есть в 3D с теми же ценами и уровнями Ратуши: + Золотой рудник, Кристалл, Терем.
Стройка и улучшение по таймеру (BuildTimer), офлайн-завершение (ConstructionClock), сохранение settlement3d.
Перенос 2D-города при первом входе: Ратуша с уровнем и улучшением, здания с уровнями и стройками; деревья под зданием расчищаются, без места — здание ждёт (pendingFrom2D). Секция settlement не меняется.
MVP1 выключена в Build Settings; с карты мира — в City3D. Сцена и код 2D остаются до конца проверки.
Камера
Перспективная (ТЕСТ: наклон 52°, поле зрения 40°). В пределах открытых зон, при отдалении видна вся зона, плавный зум «+ / −», щипок.
DEV → «Камера»: ползунки для подбора на телефоне.
Исправления по проверке
Строящееся здание видно (серое + таймер); «Войска» знают о строящихся Казармах.
Цена и «Улучшить» в окне здания обновляются сами.
Ввод: HUD блокирует карту только кнопками и окнами; после щипка нет ложного тапа.
Стройки не висят на 00:00 после «Сбросить перемотку» (Население, без двойного начисления).
Чат: клавиатура на телефоне не мигает после «Отправить».
Синие кристаллы (регламент валют 05.11, ответ 06.11)
Не сверх вместимости и без потерь: награды заданий ждут места (не больше 2), остальное — письмом «Кристаллы ждут места» (CrystalRewards, 6 тестов).
Убраны старые раздачи: вход, письма, уровень, арена, задания, сундук. Кристаллы только за верхнюю ступень недельного события и каждый 10-й этап боя (по 1, ТЕСТ).
Магазин за золото; убраны пакеты за кристаллы, обмен золота на кристаллы, «Горсть» и «Сундук».
Ещё: Разведка М1–М2, раненые и госпиталь, очередь обучения в Армии, пропавшие без вести, еда по типам войск, сборка APK одной кнопкой (Tools → Bogatyri).
Проверено
Сборка без ошибок, 157 автотестов проходят
Сохранение / загрузка 3D-города, экономика и население, армия, таймеры и офлайн, переходы город ↔ карта мира
Перенос старого 2D-сохранения в 3D
APK на телефоне: камера, щипок, клавиатура чата
Открытые вопросы
Числа камеры — ТЕСТ, подбираем на телефоне.
Кристаллы: цены расширения хранилища, компенсация сверх недельного предела, уровень второй шахты, ускорения за кристаллы.
Фигурки героя у Терема в 3D пока нет.
Документы: Docs/Modules/*.md (журналы изменений), отчёт команде за 05.11.
Интеграционная ветка 3D (решения команды 04–06.11). Без конфликтов с develop: develop целиком входит в ветку (59 коммитов вперёд, 0 позади).
## Что вошло
**3D-поселение (решение 05.11: только 3D)**
- Сцена City3D: местность, зоны по уровню Ратуши, расчистка, стройка на сетке (SettlementMap), общий HUD.
- Все 12 зданий 2D есть в 3D с теми же ценами и уровнями Ратуши: + Золотой рудник, Кристалл, Терем.
- Стройка и улучшение по таймеру (BuildTimer), офлайн-завершение (ConstructionClock), сохранение `settlement3d`.
- Перенос 2D-города при первом входе: Ратуша с уровнем и улучшением, здания с уровнями и стройками; деревья под зданием расчищаются, без места — здание ждёт (`pendingFrom2D`). Секция `settlement` не меняется.
- MVP1 выключена в Build Settings; с карты мира — в City3D. Сцена и код 2D остаются до конца проверки.
**Камера**
- Перспективная (ТЕСТ: наклон 52°, поле зрения 40°). В пределах открытых зон, при отдалении видна вся зона, плавный зум «+ / −», щипок.
- DEV → «Камера»: ползунки для подбора на телефоне.
**Исправления по проверке**
- Строящееся здание видно (серое + таймер); «Войска» знают о строящихся Казармах.
- Цена и «Улучшить» в окне здания обновляются сами.
- Ввод: HUD блокирует карту только кнопками и окнами; после щипка нет ложного тапа.
- Стройки не висят на 00:00 после «Сбросить перемотку» (Население, без двойного начисления).
- Чат: клавиатура на телефоне не мигает после «Отправить».
**Синие кристаллы (регламент валют 05.11, ответ 06.11)**
- Не сверх вместимости и без потерь: награды заданий ждут места (не больше 2), остальное — письмом «Кристаллы ждут места» (`CrystalRewards`, 6 тестов).
- Убраны старые раздачи: вход, письма, уровень, арена, задания, сундук. Кристаллы только за верхнюю ступень недельного события и каждый 10-й этап боя (по 1, ТЕСТ).
- Магазин за золото; убраны пакеты за кристаллы, обмен золота на кристаллы, «Горсть» и «Сундук».
**Ещё:** Разведка М1–М2, раненые и госпиталь, очередь обучения в Армии, пропавшие без вести, еда по типам войск, сборка APK одной кнопкой (Tools → Bogatyri).
## Проверено
- [x] Сборка без ошибок, 157 автотестов проходят
- [x] Сохранение / загрузка 3D-города, экономика и население, армия, таймеры и офлайн, переходы город ↔ карта мира
- [ ] Перенос старого 2D-сохранения в 3D
- [ ] APK на телефоне: камера, щипок, клавиатура чата
## Открытые вопросы
- Числа камеры — ТЕСТ, подбираем на телефоне.
- Кристаллы: цены расширения хранилища, компенсация сверх недельного предела, уровень второй шахты, ускорения за кристаллы.
- Фигурки героя у Терема в 3D пока нет.
Документы: `Docs/Modules/*.md` (журналы изменений), отчёт команде за 05.11.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Alexander
added 59 commits 2026-11-06 18:07:10 +03:00
Решения №11–13 (документ 01 комплекта):
- №11: прогноз показывает точный шанс победы (BattleForecast.WinChancePermille) —
перебор всех 101×101 равновероятных сочетаний удачи; в окне атаки «шанс победы 27%»
- №12: сила считается точной дробью (BigInteger), удача — после всех модификаторов,
округление одно и только для показа (3 пехоты против 1 кав. и 2 пех.: 13,00 вместо 12,96)
- №13: потери — целая часть гарантирована, дробная — шанс ещё одной потери из отдельного
потока случайности (своя соль на сторону и тип), воспроизводимо по номеру боя;
одиночка-проигравший теперь может погибнуть
- версия правил боя 3 (BattleRules, BattleConfig)
Голод на момент боя (№9, документ 02 — офлайн в причинно-следственном порядке):
- MarchManager спрашивает IPopulation.WasStarvingAt(время прихода войска)
- перед боем, прошедшим в прошлом, просит Население досчитать время (публичный Tick);
модуль Населения не менялся
Формула потерь (№14) и раненые (№15) не тронуты — ждут чисел от команды.
Тесты: шанс победы совпадает с 20 000 настоящих боёв (±2%), сила без промежуточного округления,
округление потерь (одиночка гибнет ~50%, 1,5 → 1 или 2). Все 42 теста ModuleTests проходят вне Unity.
Документы Battle, World, Core, README обновлены (только наши строки).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Порядок событий (офлайн — в причинно-следственном порядке):
- WorldSimulation.Advance каждый раз берёт самое раннее событие — бой или возвращение;
раньше за один вызов шли сначала все бои, потом все возвращения, и войско,
вернувшееся раньше чужого боя, попадало в события после него
- при равном времени — бой раньше возвращения, затем по номеру похода
- WorldEvent.TimeMs — когда событие случилось, а не когда его заметили
События похода (ядро):
- TimeMs у MarchStartedEvent, MarchBattleResolvedEvent, MarchReturnedEvent
- BattleId у MarchBattleResolvedEvent
Таймеры: явные единицы (реальные секунды/минуты часов GameClock), таблица в World.md;
скорость игрового календаря (№7) не утверждена — ускорения нет.
Тесты «Готово, когда» (документ 02), наша часть: порядок после офлайна, повторный вызов
без дублей, границы таймеров (ровно в срок, не раньше), 0 и 1 солдат.
Все 46 тестов ModuleTests проходят вне Unity.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Бой (модуль Battle):
- доля выбывших каждого типа — плавная функция соотношения итоговых сил (сильная / слабая)
по опорным точкам регламента: 1:1 — 45% / 45%, 3:1 — 16% / 74%, 5:1 — 11% / 88% (ТЕСТ);
между точками линейно, без порогов-переключателей; одинаково для PvE, PvP и Круга
- заменяет «проигравший теряет 50%, победитель до 50%»
- считается точной дробью, округление потерь — как прежде шансом (№13)
- за 5:1 — значения последней точки (рост разгрома дальше не задан — вопрос команде)
Таблица BattleConfig: точки кривой (lossRatioPermille, strongLossPermille, weakLossPermille)
вместо loserLossPercent; некорректная таблица — значения по умолчанию. Версия правил 4.
Раненых пока нет: все выбывшие — погибшие. Раненые (№15) — следующим шагом вместе с госпиталем,
нужен контракт с Населением (Валдемар), чтобы раненые учитывались среди людей города.
Тесты: опорные точки, симметрия, плавность и монотонность, кривая из таблицы и защита от ошибки;
тесты округления пересчитаны под кривую. Все 47 тестов ModuleTests проходят вне Unity.
Код Валдемара не менялся.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Мир (Bogatyri.World.Simulation):
- MarchSpeedRules: скорость по типам — пехота 8, лучники 9, кавалерия 12, осадные 4 клетки
за реальный час (ТЕСТ); марш идёт в реальном времени
- смешанное войско — по самому медленному типу (настройка mixedUsesSlowest: средняя по числу воинов);
правило для одной армии в регламенте не задано — вопрос команде
- WorldSimulation.TravelTimeMs, AssignUnits: время прихода пересчитывается по составу похода;
обратный путь — по составу выживших
- MarchRules.GetTravelTimeMs — для похода без состава (как пехота)
Армия (Bogatyri.Army):
- слоты похода: IArmy.MarchSlots (база 2, ТЕСТ), ActiveMarches; TakeForMarch отказывает при занятых слотах;
походы из старых сохранений сверх лимита дойдут, новых не будет
Таблица MarchConfig (Assets/Resources/MarchConfig.asset): скорости, режим смешанного войска, база слотов.
Карта мира: путь в окне атаки — по составу при выбранном числе воинов, «Все слоты похода заняты»,
верхняя строка «отрядов: 1 из 2».
Тесты: скорости по типам, смешанное войско, обратный путь, слоты; старые тесты мира переведены
на часовые марши. Все 49 тестов ModuleTests проходят вне Unity. Код Валдемара не менялся.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Мир (Bogatyri.World.Simulation, WorldSimulation.Points.cs):
- точки дерева, камня, металла, золота трёх размеров; запас, добыча воина за игровой час
(1 игровой час = 5 реальных минут), груз на воина, срок жизни 12/24/48 реальных часов — ТЕСТ
- сбор: дошли → стоят на точке (MarchState.Gathering) до полного груза, истощения или исчезновения точки,
затем физический возврат с грузом; всё считается в момент прихода — работает и офлайн
- осадные груза не несут; одна точка — одно войско; точка исчезла до прихода — возврат без добычи
- истощённая/исчезнувшая точка заменяется новой того же ресурса в другом месте (детерминированно)
- события GatherStarted, GatherFinished; порядок событий по времени с учётом сбора и исчезновения точек
- сохранение в секции world (points); старые сохранения без точек читаются
Зачисление груза — Экономика через IEconomy (как трофеи боя), код Валдемара не менялся.
Таблица WorldResourceConfig (Assets/Resources/WorldResourceConfig.asset).
Карта мира: точки — ромбы цвета ресурса с запасом и сроком; окно отправки с запасом, добычей,
грузом и прогнозом «унесут N за T»; окно «ТОЧКИ НЕТ»; подпись отряда «сбор», время с часами.
Город: окно «ВОЙСКО ВЕРНУЛОСЬ» пишет «Сбор … ресурсы собраны».
Открыто (не задано регламентом): число точек на карте (сейчас по 2 каждого ресурса), выбор размера,
предел добычи на точку. Позже: нападение на занятую точку, «Связь Волхвов», переполнение склада.
Тесты: появление и расстановка, сбор и груз, истощение и новая точка, осадные без груза, исчезновение
до прихода и во время сбора, одна точка — одно войско, сохранение посреди сбора. Все 54 теста проходят вне Unity.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
При перемотке войско могло дойти, истощить точку и вернуться за один расчёт мира —
точка убиралась с карты раньше, чем показывались сообщения, и название было пустым.
MarchData.targetName запоминается при выступлении, WorldSimulation.TargetName.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Кнопка «Армии» под «Рейтингом» открывает окно WorldMap/ArmiesWindow.cs:
- вверху: дома свободно, гарнизон, походов N из M
- по каждому войску: куда и что делает (в бой / на сбор / собирает / возвращается),
состав по типам, груз, время до цели или до конца сбора и когда будет дома
- таймеры обновляются сами, пока окно открыто
Окно атаки: для боя — длительность всего задания «туда и обратно ~X» (для сбора уже была).
Только наш слой карты мира; модули и код Валдемара не менялись.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Новый модуль Bogatyri.Intelligence (без Unity): туман в трёх состояниях,
обзор поселения 5 / армии 1 клетка, «Обзор» +10/20/30% (заменяет),
примерная численность ±20%, опознание 50% на событие наблюдения,
последний контакт 10 реальных минут, офлайн-досчёт шагами 10 с,
сохранение в секции intelligence.
- Мир: IWorldMap (армии в момент времени), WorldAdvancingEvent,
патрули-заглушки соседей (временно, выключаются в MarchConfig).
- Карта: IntelligenceOverlay — туман и метки чужих армий.
- Таблица IntelligenceConfig, 11 новых тестов, документы.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Мир досчитывается по событиям (AdvanceInSteps), Разведка -- до каждого:
до расчёта боя войско считалось стоящим у цели всё время возвращения.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Конфликты только в документах (Core.md, README.md) — сохранены обе стороны,
в «Кто отвечает» у Саши добавлена Разведка.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
V = Σ(Nᵢ·Vᵢ·Mᵢ)/ΣNᵢ, общий модификатор -- один раз, без промежуточного округления.
MarchConfig: mixedUsesSlowest убран, добавлены typeSpeedBonusPercent и armySpeedBonusPercent.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Число по ресурсу и размеру -- в WorldResourceConfig; новая точка -- того же размера;
старые сохранения дополняются до таблицы.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
IWorld.TryStartScout, MarchData.scout, WorldEventType.ScoutArrived; кнопка «Разведка» в окне атаки;
разведка не разбивает лагерь и не занимает точку.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Армия: заказы, сроки по часам игры, завершение один раз (TroopsTrainedEvent), сохранение train=.
Население отдаёт жителей и принимает новобранцев через свой контракт.
GameProgress (код Вальдемара, с разрешения команды): только цена, Казармы, окна и статистика;
старая очередь из progress.json переносится один раз с тем же оставшимся временем.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Бой делит выбывших на погибших и раненых по соотношению сил стороны (70/45/30/20%), версия правил 6.
Раненые идут домой с войском; Армия кладёт их в госпиталь, лечит 4/4/6/8 игровых часов, лишние ждут места.
Места -- от IHospital (здания пока нет -- HospitalConfig.temporaryBeds), цена -- через Экономику (не утверждена).
Население считает раненых людьми. Здание госпиталя -- следующий шаг.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Места -- модулю Армии через IHospital (HospitalBeds); без госпиталя мест нет, раненые ждут.
Добавляется в список стройки кодом, как Казармы. Числа -- HospitalConfig (ТЕСТ).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bogatyri.Settlement.Placement (без Unity): сетка, зоны по Ратуше, река/скалы/деревья/валуны,
отступ, уклон и фундамент, поворот 0/90/180/270, атомарный перенос с тем же id, расчистка один раз; 7 тестов.
Сцена City3D (Tools -> Bogatyri -> 3D-город): местность, призрак, перенос, расчистка, камера 2.5D,
второй рендерер URP (3D) только для её камеры -- 2D-сцены не тронуты.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Карта на земле (X/Z): замок, города, лагеря, ресурсные точки, отряды и метки разведки -- примитивы,
подписи смотрят в камеру; наклонная перспективная камера с тем же поведением (перетаскивание, щипок, тап);
туман -- в текстуре земли; солнце и 3D-рендерер URP для камеры (Map3D). Логика и окна не менялись.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Цвет -- в _BaseColor (URP), раньше всё было белым. Настройка 3D-рендерера добавляет его в URP Asset
каждого уровня качества (в проекте URP задан только в Quality) + отдельная команда меню.
Карта мира: замок со стенами и башнями, города -- домики, лагеря -- шатры с костром, кристаллы точек, рощи.
3D-поселение: здания с двускатными крышами и приметами, ели и лиственные, песчаные берега, снег на скалах.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
IArmy.GetAllTroops; PopulationRules.FoodPerTroopTypePerHour (без таблицы -- как раньше);
EconomyConfig.population.foodPerTroopTypePerHour.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Бой: отдельный статус среди выбывших (доля не утверждена -- 0, выключено), версия правил 8.
Армия: пропавшие из похода -- в группу; окно 6 игровых часов после обратного пути, возвращение 2-4 группами,
70% здоровыми / 30% ранеными, остальные списываются; сохранение без повторного возвращения.
Население: занимают места, но не едят. Окна: сколько пропало и сколько ещё может вернуться.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Отряд идёт маршем, наблюдает 2/4 (поселение, лагерь) или 3/6 (замок) игровых часов, отчёт на конец наблюдения,
потом домой. Уровень II -- точные войска, герой, стены; III -- плюс защита и ресурсы ±15%. Один отчёт на операцию,
сохранение. Карта: кнопки «Разведка II/III», окно отчёта, «Отчёты», прогноз по отчёту вне обзора.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Раньше он создавался только локально командой меню, и в свежем клоне или APK 3D-камеры
рисовали 2D-рендерером -- без света и теней. Map3DLit.mat -- пересохранён Unity.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CaptureState до ApplySaved отдаёт загруженное состояние (поход, вернувшийся офлайн, сохранял пустой город).
ISettlement.TownHallLevel вне города -- уровень Ратуши последнего открытого города (2D или 3D).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Тап, перетаскивание, стройка и зум в 3D-поселении блокировались проверкой UIBlocker. Такой слой и открытая
панель HUD пишутся в Console один раз -- чтобы найти виновника.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- BuildTimer затемнял только 2D-спрайты: в 3D строящиеся Казармы выглядели готовыми, а окно «Войска» писало «казарм: 0»
- «Войска»: «Казармы строятся, осталось …»; перерисовка, когда достроились; «Построить Казармы» в 3D ставит призрак
- «+ / −» справа: в Device Simulator колесо мыши не доходит до игры
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Золотой рудник, Кристалл, Терем: цены, уровни Ратуши и компоненты как в 2D
- Перенос: нет 3D-города в сохранении, есть 2D -- Ратуша с уровнем и улучшением, здания с уровнями и стройками; секция settlement не меняется
- Камера перспективная (City3DCamera.perspective, поле зрения 40 -- ТЕСТ)
- Город -- City3D; MVP1 выключена в Build Settings, код и сцена 2D остаются
- Меню стройки в два столбца
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- CrystalRewards (без Unity) + 6 тестов из раздела 6 регламента
- Задания: сколько помещается, остаток ждёт в задании («Забрать»); третья не помещающаяся награда не выдаётся
- Остальные награды: не поместившееся -- письмом «Кристаллы ждут места», из письма -- сколько помещается
- Награды заданий 1-2 вместо 20-250, ежедневные -- без кристаллов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Кристаллы только: верхняя ступень недельного события (1), каждый 10-й этап боя (1) -- ТЕСТ
- Задания, вход, письма, подарок за уровень, арена, сундук -- золото и ресурсы
- Магазин: пакеты за золото; убраны пакеты за кристаллы, обмен золота на кристаллы, «Горсть» и «Сундук»
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Интеграционная ветка 3D (решения команды 04–06.11). Без конфликтов с develop: develop целиком входит в ветку (59 коммитов вперёд, 0 позади).
Что вошло
3D-поселение (решение 05.11: только 3D)
settlement3d.pendingFrom2D). Секцияsettlementне меняется.Камера
Исправления по проверке
Синие кристаллы (регламент валют 05.11, ответ 06.11)
CrystalRewards, 6 тестов).Ещё: Разведка М1–М2, раненые и госпиталь, очередь обучения в Армии, пропавшие без вести, еда по типам войск, сборка APK одной кнопкой (Tools → Bogatyri).
Проверено
Открытые вопросы
Документы:
Docs/Modules/*.md(журналы изменений), отчёт команде за 05.11.🤖 Generated with Claude Code