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

35 lines
3.1 KiB
JavaScript
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.

const { estRange } = require('../rng');
function generate(ctx) {
const { r, add, addPuzzle, motiveEvs, victim, killer, herring } = ctx;
const motiveId = 'Одержимість';
motiveEvs.push(add({
id: 'mot_letters', side: 'field', at: { type: 'unit', unit: victim.home, slot: 'шафа' }, needsIdentity: true,
title: 'Пачка листів без підпису', tag: 'мотив',
detail: `Перев'язана шпагатом пачка — десятки листів, однаковий почерк, без підпису: «я бачу тебе щодня», «ти всміхаєшся не мені», «я вмію чекати». Найстаріший — дворічної давності. Останній закінчується інакше: «чекати я більше не буду».`,
gives: { motive: true }
}));
motiveEvs.push(add({
id: 'mot_complaint', side: 'analyst', at: { type: 'sys', sys: 'crim' }, q: { sys: 'crim', kind: 'archive', match: [victim.last, victim.name] }, needsIdentity: true,
title: 'Торішня заява жертви', tag: 'мотив',
detail: `Заява про переслідування, торік, руху не дали: «невідома особа стежить, лишає квіти під дверима». Прикмети з заяви: ${killer.coat}, зріст приблизно ${estRange(r, killer.height)} см.`,
gives: { filter: { attr: 'coat', val: killer.coat }, motive: true }
}));
motiveEvs.push(add({
id: 'mot_flowers', side: 'field', at: { type: 'person', cid: ctx.witnessFrom(ctx.citizens.filter(c => c.workplace === 'shop')).id }, requires: ['mot_complaint'],
title: 'Свідчення з мінімаркету', tag: 'мотив',
detail: `«Три гвоздики щоп'ятниці, завжди готівкою, завжди мовчки. Хто? Та ${killer.name} же. От, думаю собі, людина постійна.»`,
gives: { pointsTo: killer.id }
}));
motiveEvs.push(add({
id: 'mot_shrine', side: 'field', at: { type: 'unit', unit: killer.home, slot: 'шафа' },
title: 'Стіна фотографій', tag: 'мотив',
detail: 'На внутрішньому боці дверцят шафи — десятки фото жертви, знятих здалеку: біля дому, на набережній, крізь вітрину. Дати на звороті — два роки спостережень.',
gives: { motive: true }
}));
const recapWhy = `Два роки листів без відповіді, квіти під дверима, фото здалеку. Автор листів — ${killer.name}. Одержимість скінчилась там, де закінчилось «я вмію чекати».`;
const herringLead = `«Хочете про дивних? ${herring.name} вічно сидить біля вікна з біноклем. Каже — «за птахами». Ага, за птахами.»`;
return { motiveId, recapWhy, herringLead };
}
module.exports = { generate };