39 lines
2.9 KiB
JavaScript
39 lines
2.9 KiB
JavaScript
const { md5 } = require('../rng');
|
||
|
||
function generate(ctx) {
|
||
const { r, add, addPuzzle, motiveEvs, victim, killer, herring, atScene } = ctx;
|
||
const motiveId = 'Свідок злочину';
|
||
const pin = String(victim.birthYear);
|
||
const pinPuzzle = addPuzzle({
|
||
id: 'pz_pin', kind: 'pin', prompt: 'Телефон жертви заблоковано 4-значним PIN-кодом.',
|
||
hash: md5(pin), answer: pin, hint: 'Люди ставлять те, що не забудуть: спробуйте рік народження з досьє.'
|
||
});
|
||
add({
|
||
id: 'sf_phone_locked', side: 'field', at: atScene,
|
||
title: 'Телефон жертви (заблокований)', tag: 'мотив',
|
||
detail: 'Екран у павутинні тріщин, але апарат вмикається. PIN. Аналітик може спробувати підібрати.'
|
||
});
|
||
motiveEvs.push(add({
|
||
id: 'mot_photos', side: 'analyst', at: { type: 'lab' }, requires: ['sf_phone_locked'], needsIdentity: true, puzzle: pinPuzzle,
|
||
title: 'Фото в телефоні жертви', tag: 'мотив',
|
||
detail: `Нічні знімки: постать у ${killer.coat} заносить велосипеди в елінг на причалі. Обличчя не видно. Дата — за чотири дні до вбивства.`,
|
||
gives: { filter: { attr: 'coat', val: killer.coat } }
|
||
}));
|
||
motiveEvs.push(add({
|
||
id: 'mot_boathouse', side: 'field', at: { type: 'spot', building: 'pier', spot: 'елінг' }, requires: ['mot_photos'],
|
||
title: 'Обшук елінгу', tag: 'мотив',
|
||
detail: 'Шість велосипедів зі спиляними номерами рам, добрі замки зрізані болторізом. На стіні — оголошення «продам недорого» з номером.',
|
||
gives: { motive: true }
|
||
}));
|
||
motiveEvs.push(add({
|
||
id: 'mot_ads', side: 'analyst', at: { type: 'sys', sys: 'phone' }, q: { sys: 'phone', kind: 'owner', match: killer.phone }, requires: ['mot_boathouse'],
|
||
title: 'Номер з оголошення', tag: 'мотив',
|
||
detail: `Номер з оголошення в елінгу зареєстровано: ${killer.name}, прож. ${killer.home}. Жертва сфотографувала крадія — і крадій це помітив.`,
|
||
gives: { pointsTo: killer.id, motive: true }
|
||
}));
|
||
const recapWhy = `Жертва випадково сфотографувала нічні «рейси» з краденими велосипедами. Крадій — ${killer.name}. Свідка прибрали.`;
|
||
const herringLead = `«Кажуть, ${herring.name} вечорами вічно біля елінгу — разів п'ять там ${ctx.g(herring, 'крутився', 'крутилася')}. Чого — хтозна.»`;
|
||
return { motiveId, recapWhy, herringLead };
|
||
}
|
||
|
||
module.exports = { generate };
|