---
id: TASK-0006
title: Реализовать побитовую систему состояния врагов в чанке
summary: Сохранить состояние врагов чанка через int или расширяемую bitmask, где каждый бит соответствует конкретному deterministic enemy slot.
priority: Highest
area: persistence
owner: unassigned
created: 2026-03-30
updated: 2026-03-30
execution_time: 1d
depends_on:
  - TASK-0004
  - TASK-0005
canonical_docs:
  - docs/tasks/Index.md
related_files:
  - Assets/Features/VoxelWorld/Runtime/VoxelWorldGenerator.cs
---

# TASK-0006 - Реализовать побитовую систему состояния врагов в чанке

## Status

Статус задачи ведется в `docs/tasks/Index.md` и является каноническим там.

Допустимые значения статуса:

- `BackLog`
- `ToDo`
- `InProgress`
- `Review`
- `Done`

## Why

Пользователь описал конкретную механику хранения enemy state через биты. Это позволяет сохранять большой мир компактно и воспроизводимо.

## Expected Outcome

Для каждого чанка можно хранить compact mask, из которой однозначно определяется, какие deterministic slots еще живы, а какие уже убиты и не должны спавниться повторно.

## Current Context

Enemy slot model должна прийти из `TASK-0005`, а общая схема world save из `TASK-0004`.

## Source Of Truth

- `docs/tasks/items/TASK-0004.md`
- `docs/tasks/items/TASK-0005.md`
- runtime code сохранений мира после внедрения

## Read First

- `docs/tasks/items/TASK-0004.md`
- `docs/tasks/items/TASK-0005.md`
- `Assets/Features/VoxelWorld/Runtime/VoxelWorldGenerator.cs`

## Scope In

- формат битовой маски для enemy slots
- правила чтения и записи маски в world save
- применение маски при загрузке и регенерации чанка
- расширяемость на случай числа врагов больше емкости одного int

## Scope Out

- миграции формата сохранений между версиями
- сложная аналитика по прогрессу зачистки мира

## Constraints

- индекс бита должен жестко соответствовать deterministic enemy slot
- нельзя терять совместимость между спавном и сохранением

## If You Find Drift

- если реализация спавна не дает стабильного соответствия slot -> bit, нужно остановиться и исправить основу

## Suggested Approach

1. Определить каноническое значение бита: жив/мертв и правила инициализации.
2. Описать сериализацию маски в world save.
3. Применить маску при загрузке чанка до фактического spawn instantiate.

## Acceptance Criteria

- убийство врага меняет корректный бит в состоянии чанка
- повторный вход в мир не возрождает уже убитых врагов
- система поддерживает сценарий с несколькими врагами на чанк без потери детерминизма

## Verification

- ручной тест: убить часть врагов, сохранить мир, перезагрузить и проверить состав чанка
- сверка битовой маски с фактически заспавненными слотами

## Risks / Open Questions

- нужно определить политику для чанков, где врагов больше, чем можно удобно хранить в одном `int`

## Human Decisions Needed

- none currently

## Decision Log

- `2026-03-30` - пользовательское требование о bitmask сохранено как отдельный канонический task.

## Handoff Notes

Если реализация выберет не один `int`, а массив масок, нужно сохранить семантику user-facing идеи: состояние читается побитово и зависит от slot index.
