2PlayerGame/chapter3/casegen/motives/witness.js

40 lines
2.9 KiB
JavaScript
Raw Normal View History

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 };