| .. | ||
| casegen | ||
| public | ||
| .gitignore | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| server.js | ||
| test-server.js | ||
Невпізнаний — детектив на двох, розділ 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(...).
Можна брати в будь-який інший проєкт.