/**
* Реестр предметов (контент по docs/world.md). Id — стабильные ключи сейва.
* Описания — стиль сеттинга: кратко, меланхолично.
*/
export interface ItemDef {
id: ItemId;
name: string;
desc: string;
}
export type ItemId = 'cloth' | 'bellflower' | 'salt' | 'water_flask' | 'mote' | 'clock';
export const ITEMS: Record<ItemId, ItemDef> = {
clock: {
id: 'clock',
name: 'Медные часы',
desc: 'Старые, с одной стрелкой. Ирвин: «Стрелка не врёт — темнота по ней приходит».'
},
cloth: {
id: 'cloth',
name: 'Вощёное полотно',
desc: 'Маска от наката. Дышать поверх свежего пепла — потерять голос.'
},
bellflower: {
id: 'bellflower',
name: 'Лунный колокольчик',
desc: 'Трава-возвращенец. Вытягивает пепел из земли. Посаженный — надежда.'
},
salt: {
id: 'salt',
name: 'Соль',
desc: 'Край держится на обмене. Соль здесь дороже золота.'
},
water_flask: {
id: 'water_flask',
name: 'Вода в медном бутле',
desc: 'Мутная, но чистая. Пруды отдают воду неохотно.'
},
mote: {
id: 'mote',
name: 'Пепельный мот',
desc: 'Сгусток серой земли с тёплой искрой — то, что колокольчик вытянул из пепла. Мила меняет моты на товар.'
}
};
/** Безопасное имя по id (незнакомый id — сам id). */
export function itemName(id: string): string {
return ITEMS[id as ItemId]?.name ?? id;
}
/**
* Строка от «применения» предмета (юза́бельные — только часы). Чистая функция:
* null — предмет без эффекта (сумка молчит). label — текущее время сумки
* (в сумке время заморожено — LocationScene не тикается).
*/
export function useItemLine(id: string, ctx: { label: string }): string | null {
return id === 'clock' ? `Время: ${ctx.label}` : null;
}