2PlayerGame/detective-game/casegen/anonymous_letter.js

56 lines
3 KiB
JavaScript
Raw Normal View History

// casegen/anonymous_letter.js — генерація анонімного листа
const { pick, chance } = require('./rng');
function generateAnonymousLetter(ctx) {
const { r, killer, victim, citizens, add } = ctx;
const letterType = pick(r, [1, 2, 3]);
let detail = '';
if (letterType === 1) {
const hints = [
`Шукайте серед тих, хто носить ${killer.coat}.`,
`Вбивця — ${killer.sex === 'ч' ? 'чоловік' : 'жінка'} на зріст приблизно ${killer.height} см.`,
`Той, хто це зробив, має татуювання — "${killer.tattoo}".`,
`Вбивця працює ${killer.job === 'тимчасово не працює' ? 'без роботи' : killer.job + 'ом'}.`,
`Слід шукати серед мешканців будинку ${killer.home}.`
].filter(h => !h.includes('undefined') && !h.includes('null'));
if (hints.length === 0) return null;
detail = pick(r, hints) + ' Це все, що я можу сказати.';
} else if (letterType === 2) {
const innocent = pick(r, citizens.filter(c => c.id !== killer.id && c.id !== victim.id));
const falseHints = [
`Шукайте серед тих, хто носить ${innocent.coat}.`,
`Вбивця — ${innocent.sex === 'ч' ? 'чоловік' : 'жінка'} на зріст приблизно ${innocent.height} см.`,
`Той, хто це зробив, має татуювання — "${innocent.tattoo}".`,
`Вбивця працює ${innocent.job === 'тимчасово не працює' ? 'без роботи' : innocent.job + 'ом'}.`,
`Слід шукати серед мешканців будинку ${innocent.home}.`
].filter(h => !h.includes('undefined') && !h.includes('null'));
if (falseHints.length === 0) return null;
detail = pick(r, falseHints) + ' Не дайте йому втекти.';
} else {
const neutralHints = [
'Злочин стався близько півночі, але не раніше.',
'Жертва не була випадковою — її знали.',
'Місце злочину обране не випадково.',
'Слідів більше, ніж здається на перший погляд.',
'Дехто в районі знає більше, ніж говорить.'
];
detail = pick(r, neutralHints);
}
if (!detail) return null;
return add({
id: 'anonymous_letter',
side: 'analyst',
at: { type: 'start' },
title: 'Анонімний лист',
tag: 'підказка',
detail: `Лист без підпису, надісланий до відділку: «${detail}». Походження невідоме.`,
gives: {}
});
}
module.exports = { generateAnonymousLetter };