Files
chicken-game/docs/REQUIREMENTS.md
2026-01-17 11:49:36 +03:00

413 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Game Requirements
## Overview
Хардкорный roguelite-платформер с процедурной генерацией уровней. Игрок собирает монетки, избегая врагов и ловушек. Уникальная механика оружия — оглушающие "газовые" снаряды. Между забегами игрок тратит накопленную валюту на апгрейды в магазине.
---
## Core Gameplay
### Цель игры
- Собрать все монетки на уровне
- Избегать контакта с врагами и ловушками
- Пройти как можно больше уровней
- Накопить валюту для покупки апгрейдов
### Персонаж
- Базовое управление: движение влево/вправо, прыжок
- Оружие: выпускает оглушающие снаряды ("пуки")
- Смерть при любом контакте с активным врагом (one-hit kill по умолчанию)
### Система снарядов
- Максимум **3 снаряда** в запасе (базовое значение)
- После использования снаряд **восстанавливается через время** (~3 сек)
- Нельзя "спамить" — требуется тактическое использование
- Снаряд оглушает врага при попадании
- Направление выстрела: в сторону движения персонажа
### Враги
#### Типы врагов
| Тип | Поведение | Появляется с уровня |
|-----|-----------|---------------------|
| **Патрульный** | Ходит туда-сюда по платформе | 1 |
| **Прыгун** | Прыгает по платформам вертикально | 3 |
| **Летун** | Летает по фиксированной траектории | 5 |
| **Преследователь** | Медленно движется к игроку | 7 |
| **Спринтер** | Патрульный, но быстрый | 10 |
#### Состояния врагов
- **Активное**: опасны, убивают при контакте
- **Оглушённое**: безопасны, можно проходить сквозь
- Оглушение действует **3 секунды** (базовое значение), затем враг восстанавливается
- Визуальный индикатор времени оглушения над врагом (круговой таймер)
### Ловушки
| Тип | Поведение | Появляется с уровня |
|-----|-----------|---------------------|
| **Шипы** | Статичные, мгновенная смерть | 2 |
| **Падающая платформа** | Падает через 0.5сек после наступания | 4 |
| **Пила** | Движется по траектории | 6 |
| **Турель** | Стреляет снарядами с интервалом | 8 |
| **Лазер** | Включается/выключается по таймеру | 10 |
### Прогрессия уровней
- После сбора всех монеток — переход на следующий уровень
- С каждым уровнем сложность увеличивается:
- Больше врагов
- Новые типы врагов
- Появляются ловушки
- Больше монеток (нужно больше собрать)
- Сложнее структура уровня
---
## Game Feel (Критически важно)
### Coyote Time
- Игрок может прыгнуть в течение **100мс** после схода с платформы
- Незаметно для игрока, но убирает фрустрацию от "несправедливых" смертей
### Input Buffering (Jump Buffer)
- Если прыжок нажат за **100мс** до приземления — прыжок выполнится автоматически
- Предотвращает ощущение "съеденных" инпутов
### Variable Jump Height
- Короткое нажатие = низкий прыжок
- Длинное нажатие = высокий прыжок
- Даёт точный контроль над персонажем
### Edge Correction
- Если персонаж чуть-чуть не допрыгнул до края платформы — подтянуть на ~4 пикселя
- Работает только для небольших расстояний
### Responsive Controls
- Минимальное время разгона/торможения
- Мгновенная смена направления
- Никакой "скользкости"
---
## Visual Juice
### Частицы
- Пыль при приземлении
- Пыль при беге (каждые N кадров)
- Облачко при выстреле снарядом
- "Звёздочки" при оглушении врага
- Блеск/свечение монеток
- Взрыв частиц при смерти персонажа
### Screen Shake
- Лёгкая тряска при смерти
- Микро-тряска при оглушении врага
- **Обязательно**: опция отключения в настройках
### Squash & Stretch
- Персонаж вытягивается вертикально при прыжке
- Сжимается горизонтально при приземлении
- Враги "сплющиваются" при оглушении
- Монетки слегка пульсируют
### Хитстоп (Freeze Frame)
- Микро-пауза (2-3 кадра) при попадании снарядом во врага
- Усиливает ощущение импакта
---
## Meta-Progression System
### Валюта
- **Газокоины** — основная мета-валюта
- Все монетки собранные за забег конвертируются в газокоины после смерти
- Конверсия: 1 монетка = 1 газокоин
- Бонус за пройденные уровни: +10% за каждый уровень
### Магазин апгрейдов
Философия: апгрейды **разнообразят** игру и дают **небольшие** преимущества, но НЕ делают её лёгкой. Многие апгрейды — это tradeoff'ы (плюс в одном, минус в другом).
#### Категория: Персонаж
| Апгрейд | Эффект | Цена | Примечание |
|---------|--------|------|------------|
| **Лёгкие ботинки** | +10% скорость бега | 100 | — |
| **Пружинные ботинки** | +15% высота прыжка | 150 | — |
| **Тяжёлая броня** | +1 жизнь за забег | 500 | -15% скорость |
| **Двойной прыжок** | Можно прыгнуть в воздухе | 800 | — |
| **Dash** | Рывок по нажатию, 2сек кулдаун | 600 | — |
| **Скользкий** | Неуязвим 0.5сек после урона | 400 | Работает только с доп. жизнями |
#### Категория: Оружие
| Апгрейд | Эффект | Цена | Примечание |
|---------|--------|------|------------|
| **Большой запас** | +1 снаряд (макс. 4) | 300 | — |
| **Быстрая перезарядка** | -20% время восстановления | 250 | — |
| **Дальнобойность** | +30% дальность полёта снаряда | 200 | — |
| **Мощное оглушение** | +1сек время оглушения | 350 | — |
| **Разрывной снаряд** | Снаряд оглушает врагов в радиусе | 700 | -1 снаряд в запасе |
| **Рикошет** | Снаряд отскакивает от стен 1 раз | 450 | — |
| **Скорострел** | -40% время перезарядки | 400 | -30% время оглушения |
#### Категория: Выживание
| Апгрейд | Эффект | Цена | Примечание |
|---------|--------|------|------------|
| **Второй шанс** | 1 раз за забег: воскрешение на месте | 1000 | Одноразовый за забег |
| **Магнит** | Монетки притягиваются с расстояния | 200 | — |
| **Орлиный глаз** | Видно весь уровень на мини-карте | 300 | — |
| **Чутьё опасности** | Враги подсвечиваются за экраном | 250 | — |
| **Ловкач** | Hitbox персонажа уменьшен на 10% | 600 | — |
#### Категория: Риск/Награда
| Апгрейд | Эффект | Цена | Примечание |
|---------|--------|------|------------|
| **Жадность** | +50% монеток на уровне | 400 | +25% врагов |
| **Хардкор** | x2 очки | 300 | Нет coyote time |
| **Берсерк** | +30% скорость, бесконечные снаряды | 500 | Активируется на 10сек при 0 HP (перед смертью) |
| **Пацифист** | x3 очки за уровень | 350 | Нельзя использовать снаряды |
| **Спидран** | +100 очков за каждые 10сек до таймера | 200 | Таймер 60сек на уровень, смерть по истечении |
#### Категория: Косметика (не влияет на геймплей)
| Апгрейд | Эффект | Цена |
|---------|--------|------|
| **Скин: Космонавт** | Новый вид персонажа | 150 |
| **Скин: Рыцарь** | Новый вид персонажа | 150 |
| **Скин: Ниндзя** | Новый вид персонажа | 150 |
| **След: Радуга** | Радужный след при беге | 100 |
| **След: Огонь** | Огненный след | 100 |
| **Снаряд: Облачко** | Другой вид снаряда | 50 |
| **Снаряд: Сердечко** | Другой вид снаряда | 50 |
### Система разблокировок
Некоторые апгрейды требуют достижений для разблокировки покупки:
| Апгрейд | Требование |
|---------|------------|
| Двойной прыжок | Дойти до уровня 5 |
| Dash | Собрать 500 монеток за один забег |
| Второй шанс | Умереть 50 раз |
| Хардкор | Пройти уровень без использования снарядов |
| Берсерк | Оглушить 100 врагов |
| Пацифист | Дойти до уровня 3 без снарядов |
### Баланс хардкорности
Принципы сохранения сложности:
1. **Базовая игра остаётся one-hit kill** — доп. жизни дорогие и имеют штрафы
2. **Tradeoff'ы** — большинство сильных апгрейдов имеют минусы
3. **Сложность масштабируется** — чем больше апгрейдов, тем сложнее уровни
4. **Потолок силы** — апгрейды не стакаются бесконечно
5. **Риск/награда** — самые выгодные апгрейды усложняют игру
---
## Level Generation
### Подход: комнатная генерация (Spelunky-style)
- Уровень — сетка из "комнат" (например, 4x4)
- Каждая комната — готовый шаблон
- Алгоритм гарантирует путь от входа до всех монеток
- Шаблоны подбираются по сложности уровня
### Параметры генерации по уровням
| Уровень | Комнат | Монеток | Врагов | Ловушек |
|---------|--------|---------|--------|---------|
| 1-2 | 6-8 | 5-8 | 2-3 | 0 |
| 3-5 | 8-10 | 8-12 | 4-6 | 1-2 |
| 6-9 | 10-12 | 12-16 | 6-8 | 3-4 |
| 10+ | 12-16 | 16-20 | 8-12 | 5-6 |
### Seed система
- Каждый уровень имеет seed
- Seed отображается на экране паузы
- Можно ввести seed для воспроизведения уровня (отдельный режим, без влияния на лидерборд)
---
## Scoring System
### Базовые очки
- Монетка: **10 очков**
- Завершение уровня: **100 очков × номер уровня**
- Оглушение врага: **5 очков**
### Комбо-система
- Сбор монеток без паузы увеличивает множитель
- Пауза >2сек сбрасывает комбо
- Множители: x1 → x2 → x3 → x5 → x10 (макс)
- Попадание снарядом во врага не сбрасывает комбо
### Бонусы за уровень
- **Быстрое прохождение** (<30 сек): +50% очков за уровень
- **Без урона** (если есть доп. жизни): +25% очков
- **Без снарядов**: +100% очков
---
## UI/UX
### HUD (во время игры)
- Счётчик монеток: "собрано / всего"
- Индикатор снарядов (иконки с cooldown-анимацией)
- Текущее комбо (если активно)
- Номер уровня
- Очки
- Мини-карта (если куплен апгрейд)
- HP (если есть доп. жизни)
### Экран паузы
- Продолжить
- Настройки
- Seed уровня
- Выход в меню (с подтверждением)
### Game Over экран
- Финальный счёт
- Статистика забега:
- Пройдено уровней
- Собрано монеток
- Оглушено врагов
- Время игры
- Заработано газокоинов
- Кнопка "В магазин"
- Кнопка "Играть снова"
- Таблица лидеров
### Главное меню
- Играть
- Магазин
- Лидерборд
- Настройки
- Достижения
### Настройки
- Громкость музыки
- Громкость звуков
- Screen shake: вкл/выкл
- Показывать FPS
- Сбросить прогресс (с подтверждением)
---
## Power-ups (внутри забега)
Редкие предметы, появляющиеся на уровнях:
| Power-up | Эффект | Длительность |
|----------|--------|--------------|
| **Щит** | Защита от 1 удара | До использования |
| **Магнит** | Притягивает монетки | 15 сек |
| **Часы** | Замедляет врагов на 50% | 10 сек |
| **Кофе** | +50% скорость персонажа | 10 сек |
| **Бесконечность** | Бесконечные снаряды | 8 сек |
| **Призрак** | Проход сквозь врагов | 5 сек |
Появление: 10% шанс на уровне, максимум 1 power-up на уровень.
---
## Technical Requirements
### Платформа
- Браузер (desktop)
- Поддержка клавиатуры
- Возможно: геймпад (future)
### Управление
| Действие | Клавиатура | Геймпад (future) |
|----------|------------|------------------|
| Движение | A/D или ←/→ | Left Stick / D-Pad |
| Прыжок | W / / Space | A / X |
| Стрельба | F / J / Enter | B / Square |
| Dash (если куплен) | Shift / K | RB / R1 |
| Пауза | Escape / P | Start |
### Производительность
- 60 FPS на современных браузерах
- Минимальное разрешение: 800x600
- Рекомендуемое: 1280x720
### Хранение данных (MVP)
- localStorage для:
- Газокоины (валюта)
- Купленные апгрейды
- Активные апгрейды
- Лидерборд (топ-10)
- Достижения
- Настройки
---
## MVP Scope
### Фаза 1: Core Loop
- [ ] Движение персонажа с game feel (coyote time, input buffer, variable jump)
- [ ] Система снарядов
- [ ] Базовый враг (патрульный)
- [ ] Механика оглушения
- [ ] Сбор монеток
- [ ] Процедурная генерация (простая)
- [ ] Переход между уровнями
- [ ] Game Over
### Фаза 2: Juice & Polish
- [ ] Частицы (пыль, эффекты)
- [ ] Squash & stretch анимации
- [ ] Screen shake (с опцией отключения)
- [ ] Звуковые эффекты
- [ ] Базовая музыка
### Фаза 3: Meta-Progression
- [ ] Система газокоинов
- [ ] Магазин с апгрейдами (5-10 базовых)
- [ ] Сохранение прогресса
- [ ] Экран Game Over со статистикой
### Фаза 4: Content
- [ ] Дополнительные типы врагов (3-4)
- [ ] Ловушки (2-3 типа)
- [ ] Power-ups (3-4 типа)
- [ ] Больше апгрейдов в магазине
- [ ] Достижения
### Фаза 5: Polish
- [ ] Комбо-система
- [ ] Лидерборд
- [ ] Полный UI/UX
- [ ] Баланс сложности
- [ ] Seed система
### Отложено на будущее
- [ ] Бекенд для глобального лидерборда
- [ ] Ежедневные челленджи (один seed на день)
- [ ] Боссы
- [ ] Мобильная версия
- [ ] Мультиплеер (гонка)
- [ ] Steam-релиз
---
## Достижения
| Достижение | Условие | Награда |
|------------|---------|---------|
| Первые шаги | Пройти уровень 1 | 10 газокоинов |
| Коллекционер | Собрать 1000 монеток (всего) | 50 газокоинов |
| Мастер оглушения | Оглушить 100 врагов | Разблокировка "Берсерк" |
| Пацифист | Пройти уровень без снарядов | Разблокировка "Пацифист" |
| Марафонец | Дойти до уровня 10 | 100 газокоинов |
| Скоростной забег | Пройти 5 уровней за 3 минуты | 75 газокоинов |
| Неубиваемый | Пройти 3 уровня с 1HP без урона | 150 газокоинов |
| Богач | Накопить 5000 газокоинов | Скин "Золотой" |
| Комбо-мастер | Собрать x10 комбо | 50 газокоинов |
| Умер 100 раз | Умереть 100 раз | Скин "Призрак" |