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