2PlayerGame/chapter3/README.md
2026-07-23 17:03:26 +03:00

107 lines
9.1 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.

# Невпізнаний — детектив на двох, розділ 3
Процедурний детектив у дусі Shadows of Doubt: тіло без імені, вбивці немає в списку підозрюваних,
і **кожен код сесії — цілком нова справа**. Кооператив для двох у локальній мережі.
## Запуск
```
npm install # один раз (єдина залежність — ws)
node server.js
```
Порт за замовчуванням — **3002**. Обидва гравці відкривають адресу з консолі, вводять
**однаковий код сесії** і різні ролі. Код сесії — це seed справи: той самий код — та сама
справа та її автозбереження (грати можна кілька вечорів), новий код — нова справа.
## Ролі
- **Польовий детектив** — ходить районом (WASD/стрілки, E — увійти), обшукує місця,
стукає у квартири, говорить з людьми. У приватне житло — лише з ключем або ордером.
- **Аналітик** — база мешканців (пошук за точним ім'ям з клавіатури — помилка в написанні
дасть порожній результат; фільтри за слідами: взуття, зріст, одяг, відбитки), мапа району
з напарником наживо, системи (оператор, банки, камери, криміналістика, лабораторія)
і **шифри**: Цезар, base64, PIN, злам md5-пароля за фактами з досьє.
## Два типи справ
- **Вбивство** (~75%): тіло без імені. Акт I — встановіть особу жертви. Акт II — ХТО, ЯК і ЧОМУ.
- **Викрадення** (~25%): людини нема, але вона ще жива. Особа відома із заяви про зникнення;
з'ясуйте, ХТО забрав людину, **ДЕ її тримають** і ЧОМУ. Фінал — рапорт на штурм:
правильне ім'я і місце = заручника рятують. Помилка = штурм іде не туди.
## Правила
- У справі-вбивстві: Акт I — встановіть особу жертви. Акт II — хто, як і чому.
- Мотивів у пулі — одинадцять: від ревнощів і боргів до спадку, старих гріхів, одержимого
переслідувача, кримінального бізнесу, викупу і серійного патерну з підписом на тілі.
- Обшуки знаходять і докази, і **дрібниці** — чек, запальничку, чужий записник. Що з цього
справа, а що мотлох — вирішуєте самі (викреслюйте і ховайте зайве на дошці).
- Кожен мешканець має **плітки про район** — здебільшого шум, але серед балачок трапляється правда.
- Сліди з місця злочину — це фільтри для бази мешканців. ДНК порівнюють лише зі звуженим колом.
- Ордер дає прокурор — і лише коли доказ прямо вказує на особу.
- Стережіться хибних слідів: вони правдоподібні, але спростовні.
- **Звинувачення одне.** Хто, чим, чому + закріплені 📌 докази; підписують обоє.
Помилка — звільнення і правда, яку ви не розкрили.
## Міні-ігри
- **Польовий**: вилучення доказів твердою рукою (зафіксуй пінцет у зоні; промахи розширюють
зону); **сейф із кодовим замком** — код не підбирається, а виводиться з деталі десь у
квартирі; пошук оголошення-акростиха в місті (див. 3301).
- **Аналітик**: **гель-електрофорез ДНК** — звузьте коло і зіставте смуги доріжок оком;
**дактилоскопія** — відбиток зі знаряддя знято під кутом, порівняйте візерунки;
**архів камер** — оберіть, КОЛИ дивитися плівку (час смерті є в матеріалах);
**тріангуляція** — три вежі, три дуги на мапі: клацніть будинок на їх перетині, щоб
звузити коло до тих, хто там буває. Помилковий вибір у лабораторії чесно каже «ні».
- **Інструменти дешифрування** (вкладка «Шифри»): Base64, перебір усіх зсувів Цезаря,
Hex→текст, Binary→текст. Інструменти механічні — думати, що і куди вставляти, доведеться самим.
**Шифри — в кожній справі й не лише на ноутбуці.** Крім сюжетних (щоденник під Цезарем,
акаунт у Base64, PIN телефона), кожен кейс має ще два: **пошту жертви під md5-паролем** і
**записку-шифр** (ротація Base64/Цезар/Hex/Binary). Це необов'язкові дрібниці — але саме
там ви набиваєте руку на кожному типі.
## Підказки — приховані
Усі підказки сховані за кнопкою **💡 Підказка** (і в шифрах, і в лабораторії, і в сейфі).
Промт описує лише артефакт і дає хеш/рядок — думайте самі, розкривайте підказку, лише
коли справді застрягли.
## Паролі (крек латиницею)
Паролі до пристроїв — завжди **латиницею**, у промті показано md5-хеш: беріть свій
`hashcat`/`john` і будь-який словник (напр. `rockyou.txt`). Алгоритм дає два стилі порівну:
- **Особистий** — виводиться з досьє: кличка собаки чи ім'я жертви, **транслітеровані в
латиницю** (у досьє вони кирилицею — це і є робота), інколи + рік народження. Швидше
здогадатися, ніж брутити (`Барон` → `baron`, `Лола`+рік → `lola1985`).
- **Випадковий** — жодного зв'язку з жертвою, реальний запис зі словника. Тут лише перебір:
`hashcat -m 0 <hash> rockyou.txt` знайде `cookie`, `ginger`, `letmein`
Пароль флешки 3301 теж латиницею: акростих оголошення транслітеруєте й додаєте рік.
## CICADA 3301
У **кожній** справі захована чотиришарова головоломка в дусі Cicada 3301 (прості числа,
шари шифрів, «оголошення в місті» замість плакатів):
скринька з кодовим замком (код — на гравіюванні десь у квартирі) → картка з рядком
Base64-поверх-Цезаря → інструкція веде до оголошення в місті → перші літери рядків +
чотири цифри = пароль до флешки. Нагорода — особистий архів жертви: найкоротший шлях
до правди. Ланцюжок необов'язковий: справа розв'язується і без нього.
## Перевірка
```
npm test
```
Fair-play валідатор ганяє 300 випадкових справ: кожна розв'язна від стартових фактів,
кожен хибний слід спростовний, усі шифри чесні. Інтеграційний тест проходить справжню
справу двома ws-клієнтами до розкриття (і до звільнення).
## Генератор як бібліотека
`casegen/` не залежить від сервера й DOM: `generateCase(seed)` → мешканці, жертва, вбивця,
мотив, граф доказів, шифри; `solve(cs)` — симулятор досяжності; `checkAccusation(...)`.
Можна брати в будь-який інший проєкт.