---
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` не потребовала пересборки формата сохранения.
