39 lines
3.4 KiB
JavaScript
39 lines
3.4 KiB
JavaScript
function generate(ctx) {
|
||
const { r, add, addPuzzle, motiveEvs, victim, killer, herring, startingFacts, lair, district } = ctx;
|
||
const motiveId = 'Викуп';
|
||
const rep = ctx.witnessFrom(ctx.citizens.filter(c => c.home !== victim.home));
|
||
startingFacts.push(add({
|
||
id: 'sf_report', side: 'field', at: { type: 'start' },
|
||
title: 'Заява про викрадення', tag: 'жертва',
|
||
detail: `${rep.name} (рідня зниклої особи) ${ctx.g(rep, 'приніс', 'принесла')} записку зі своєї поштової скриньки: «200 000 — і побачите ${ctx.g(victim, 'його', 'її')} ${ctx.g(victim, 'живим', 'живою')}. Поліція = кінець». Зникла особа: ${victim.name}, ${victim.age} р.`,
|
||
gives: { identity: true, motive: true }
|
||
}));
|
||
motiveEvs.push(add({
|
||
id: 'mot_note_exp', side: 'analyst', at: { type: 'sys', sys: 'crim' }, q: { sys: 'crim', kind: 'expert' }, requires: ['sf_report'],
|
||
title: 'Експертиза записки', tag: 'мотив',
|
||
detail: 'Друковані літери через трафарет, папір — зі звичайного офісного стосу. Жодних відбитків: писали в рукавичках. Готувалися заздалегідь і не поспішали.',
|
||
gives: { motive: true }
|
||
}));
|
||
motiveEvs.push(add({
|
||
id: 'mot_supplies', side: 'field', at: { type: 'person', cid: ctx.witnessFrom(ctx.citizens.filter(c => c.workplace === 'shop')).id },
|
||
title: 'Свідчення з мінімаркету', tag: 'мотив',
|
||
detail: `«Дивна закупівля була: стяжки, скотч, брезент, навісний замок — усе разом. Обличчя не пригадаю, але платили карткою — термінал пам'ятає все.»`
|
||
}));
|
||
motiveEvs.push(add({
|
||
id: 'mot_card', side: 'analyst', at: { type: 'sys', sys: 'bank' }, q: { sys: 'bank', match: ['термінал', district.buildings.find(b => b.id === 'shop').name] }, requires: ['mot_supplies'],
|
||
title: 'Термінал мінімаркету', tag: 'мотив',
|
||
detail: `Транзакція за ту закупівлю: ${killer.name}. Стяжки, скотч і новий замок — за два дні до викрадення.`,
|
||
gives: { pointsTo: killer.id, motive: true }
|
||
}));
|
||
add({
|
||
id: 'mot_lairclue', side: 'field', at: { type: 'unit', unit: killer.home, slot: 'письмовий стіл' },
|
||
title: 'Чек і нотатка', tag: 'місце',
|
||
detail: `У кошику для паперів — зіжмаканий чек за замок і аркуш із розрахунком: «200 000 − борги = вистачить». На звороті олівцем — «${lair.label}» і час обходів охорони.`,
|
||
gives: { lair: true, motive: true }
|
||
});
|
||
const recapWhy = `План був простий і холодний: викрасти, сховати, взяти з рідні 200 000. Автор плану — ${killer.name}.`;
|
||
const herringLead = `«${herring.name} нещодавно в барі розпитува${ctx.g(herring, 'в', 'ла')}, хто в районі має гроші і хто живе сам. Тоді здалося балачкою.»`;
|
||
return { motiveId, recapWhy, herringLead };
|
||
}
|
||
|
||
module.exports = { generate };
|