Files
2026-10-25 18:05:36 +03:00

8.8 KiB
Raw Permalink Blame History

PEAK HOUR 97

Час пик. Одна смена. Ни одного свободного места.

Ночной диспетчер узла файлового обмена, 1997 год. Принимайте пакеты, раскладывайте файлы, собирайте запросы клиентов, держите канал и SLA — в интерфейсе, вдохновлённом Kaleidos: тёплая бумага, тонкие контуры и бирюзовый акцент.

Жанр: менеджмент / тайм-менеджмент, retro UI. Платформа: Godot 4.7.2 → Web (HTML5, без threads), RU-only. Окно: 1920×1080, логический viewport 1280×720, fractional scale. Забег: 9 игровых часов по 5 минут (≈45 минут) + подготовка между часами.

Статус v1.2

Играбельный веб-прототип полного цикла: меню → подготовка → час → итоги часа → … → итоги забега. Девять часов проходят на сидах 1, 42, 777 без потери часов; SLA после магазина — 200.

Реализовано:

  • 4 типа файлов (text/sound/photo/video), буфер приёма, папки и секции.
  • 10 апгрейдов магазина, включая SLA +24; магазин открывается с часа 2 и скрыт во время часа.
  • TCP-слоты и полоска соединения: три попадания; промах закрывает панель без автоповтора.
  • 4 атаки, но час 1 проходит без атак; junk/ddos — с часа 2, phishing — с 3, ransomware — с 4.
  • SLA 128 / 200 на старте; потеря пакета: text 2 / sound 4 / photo 8 / video 16.
  • Мета-награды постепенно по часам: поиск после 3-го часа, щит после 5-го, complete_run после 9-го; итоги показывают «ОТКРЫТО: …», прогресс живёт между забегами. minigame_advanced — резерв под будущий контент.
  • Поиск по имени в текущей папке после открытия; заголовок «N ИЗ M ОБЪЕКТОВ».
  • Автообновление папки/дерева, уникальные имена папок (Имя, Имя 2), удаление пустых папок, attached-галочки, скролл приёма до 8 пакетов.
  • «Уничтожить содержимое» папки удаляет файлы с подтверждением и −5 SLA; пустая папка удаляется без штрафа.
  • «Спокойный фон» — плоская бумага без dither; Esc на итогах забега ведёт в главное меню.
  • UI v2 «Kaleidos», маскот БАЙТ и короткий туториал первого часа.
  • Ambient машинного зала: 4 WAV, автозапуск после первого жеста, mute/пауза/ громкость; генератор audio/generate_ambient.py.
  • Процедурный VHS только в главном меню (настройки → «ЭКРАН»): скан-линии, зерно, виньетка и полоса; рисуется кодом, не блокирует ввод, текст резкий. Игровой UI остаётся чистым, без CRT на весь интерфейс.
  • Handjet + Press Start 2P, 18 SFX + фоновый hum.

Ограничения:

  • Туториал — маскот и несколько подсказок, без пошагового сценария.
  • Сохранение в Web идёт через IndexedDB (user://save.json); проверяйте продолжение после перезагрузки вкладки.
  • Remote push ещё не выполнен; сборка для itch.io готовится локально.

Управление

Действие Ввод
Выбор, меню, перетаскивание ЛКМ
Контекстное меню ПКМ
Пакет из «Приёма» → папка; файл → карточка запроса drag&drop
Поиск по имени в текущей папке после открытия «Поиска»
Мини-игра соединения: три попадания ЛКМ или Space
Мини-игра подготовки: отправить Enter или кнопка
Пауза Esc
Панель соединения: отмена (слот свободен, запрос остаётся) Esc

Запуск

Нужен Godot 4.7.2. В этом окружении:

GODOT=/home/eq/techlb/tools/godot/Godot_v4.7.2-stable_linux.x86_64

# один раз после клона: импорт шрифтов и темы
"$GODOT" --headless --path . --import

# игра
"$GODOT" --path .

# редактор
"$GODOT" -e --path .

Сборка Web

mkdir -p build/web
"$GODOT" --headless --path . \
  --export-release "Web" build/web/index.html

Результат: build/web/index.html, index.wasm, index.pck и служебные .js/.png. Пресет thread_support=false: COOP/COEP не нужны. Локальный просмотр — только по HTTP:

python3 -m http.server 8000 --directory build/web
# http://localhost:8000

Нужны export templates 4.7.2 (web_nothreads_release.zip).

Тесты

Полный прогон (21 набор + parse-check):

bash scripts/run_all_tests.sh

Точечно:

"$GODOT" --headless --path . --script tests/run_tests.gd
"$GODOT" --headless --path . --script tests/test_fuzz.gd
"$GODOT" --headless --path . --script tests/test_full_playthrough.gd
"$GODOT" --headless --path . --script scripts/ui/ui_smoke.gd

Фактический итог: 22/22 PASS (21 набор + parse-check); ключевые счётчики — test_main_prep 92/0, ui_smoke 135/0, test_ambient 74/0. Подробности — в AI_REPORT.

Структура

peak-hour/
├─ project.godot              # 1920×1080 / 1280×720, GL Compatibility
├─ export_presets.cfg         # Web (no threads)
├─ scenes/                    # Main + dev-превью
├─ scripts/
│  ├─ game_controller.gd      # цикл menu → prep → hour → results
│  ├─ run_all_tests.sh        # полный headless-прогон
│  ├─ autoload/               # Game, Data, Audio, Rng, Ambient
│  ├─ core/                   # HourDirector, FileRegistry, SlotManager, Economy
│  ├─ entities/               # файлы, пакеты, запросы, папки, слоты
│  ├─ systems/                # атаки, магазин, сохранения
│  ├─ ui/                     # Theme90 v2, модалки, маскот, VHS-оверлей
│  └─ minigames/              # ConnectionGame, MiniGame
├─ data/                      # balance.json, strings_ru.json, names_ru.json
├─ art/fonts/                 # Handjet, Press Start 2P + OFL
├─ audio/                     # sfx/, music/, amb/, generate_*py
├─ tests/                     # headless-наборы
├─ docs/                      # GDD, DECISIONS, UI_REFRESH, screenshots
└─ build/                     # артефакты экспорта (gitignored)

Требования

  • Godot 4.7.2 (GL Compatibility).
  • Для Web: export templates 4.7.2, web_nothreads_release.zip.
  • Python 3 — только для пересборки SFX.
  • Никаких секретов и внешних сервисов.

Документация

  • GDD — правила и числа v1.2.
  • DECISIONS — решения D01–D25.
  • AI_REPORT — модели, приёмы и проверки.
  • ASSETS — шрифты, звук, лицензии и воспроизведение.
  • UI_REFRESH — UI v2 «Kaleidos».
  • IMPLEMENTATION и TEST_PLAN — контракты и матрица тестов.
  • ITCH_PAGE — текст страницы itch.io.
  • screenshots — кадры меню, подготовки, часа и атак.

Лицензии

Код — MIT (LICENSE). Шрифты — SIL OFL 1.1 (art/fonts/OFL-*.txt). UI и иконка — MIT. SFX и hum.wav — MIT/CC0, сгенерированы audio/generate_sfx.py. Подробности — в ASSETS.md.