--- id: TASK-0005 title: Реализовать детерминированный спавн врагов по чанкам summary: Построить систему спавна, где состав врагов в чанке строго определяется seed, координатами чанка и правилами биома. priority: Highest area: spawning owner: unassigned created: 2026-03-30 updated: 2026-03-30 execution_time: 1d depends_on: - TASK-0003 canonical_docs: - docs/tasks/Index.md related_files: - Assets/Features/VoxelWorld/Runtime/VoxelWorldGenerator.cs --- # TASK-0005 - Реализовать детерминированный спавн врагов по чанкам ## Status Статус задачи ведется в `docs/tasks/Index.md` и является каноническим там. Допустимые значения статуса: - `BackLog` - `ToDo` - `InProgress` - `Review` - `Done` ## Why Пользователь явно требует, чтобы в одном и том же чанке всегда спавнились одинаковые враги. Это ключевой контракт для save/load и синхронизации между клиентами. ## Expected Outcome Для любого `(worldSeed, chunkCoord)` сервер всегда может вычислить один и тот же набор spawn slots: тип врага, позицию, уровень и другие deterministic параметры. ## Current Context Мир уже разбит на чанки, но у врагов еще нет deterministic spawn layer, связанного с seed и биомами. ## Source Of Truth - `docs/tasks/items/TASK-0003.md` - будущий spawn runtime code ## Read First - `docs/tasks/items/TASK-0003.md` - `Assets/Features/VoxelWorld/Runtime/VoxelWorldGenerator.cs` ## Scope In - deterministic enemy roster на чанк - привязка к seed, biome и chunk coords - deterministic spawn positions внутри чанка - генерация стабильного enemy slot index для битовой маски жив/мертв ## Scope Out - AI и боевое поведение врагов - сохранение kill-state после убийства ## Constraints - состав врагов не должен зависеть от порядка загрузки чанков - клиент не должен быть каноническим источником расчета спавна ## If You Find Drift - если расчет спавна использует runtime randomness без фиксированного seed, это нарушение задачи ## Suggested Approach 1. Определить stable enemy slot model внутри чанка. 2. Привязать spawn rules к biome и difficulty rules. 3. Подготовить API для совместной работы с kill-state и save system. ## Acceptance Criteria - один и тот же чанк всегда получает одинаковый набор врагов - у каждого врага есть стабильный slot/bit index - система не ломается при повторной загрузке мира и чанков ## Verification - повторная генерация одинакового чанка и сравнение spawn roster - ручная проверка нескольких биомов и разных chunk coordinates ## Risks / Open Questions - нужно заранее ограничить максимальное число спавнов на чанк для удобной bitmask модели ## Human Decisions Needed - none currently ## Decision Log - `2026-03-30` - детерминированный спавн выделен в отдельную задачу до kill-state persistence. ## Handoff Notes При реализации закладывать стабильный `enemySlotIndex`, чтобы `TASK-0006` не потребовала пересборки формата сохранения.