commit a46a9a97182908425f7ebedfd59febbdad36a9fb Author: Toutsu Date: Fri May 22 07:53:41 2026 +0300 v0.1.0: Session 0 module with maps, scenes, journals, NPCs, tables diff --git a/README.md b/README.md new file mode 100644 index 0000000..aa5e3ba --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +# PF2e: Багровый Караван + +Foundry VTT модуль для Pathfinder 2e кампании «Багровый Караван». + +## Установка + +1. Foundry VTT → Модули → Установить модуль +2. Вставить манифест-ссылку: + ``` + https://git.codeanddice.ru/Toutsu/pf2e-bagrovy-karavan/raw/branch/main/module.json + ``` +3. Нажать «Установить» + +## Содержимое + +### Сцены (Session 0) +- **Кадир — Базарный квартал** — встреча с Омаром +- **Каравансарай Омара** — набор в караван +- **Костёр Омара** — первые разговоры +- **Улицы Кадыра** — случайные встречи (таблица 1d6) +- **Комната Амиры** — предрасследование + +### Карты +Placeholder SVG-карты в `assets/maps/`. Замените на готовые battlemaps. +Рекомендуемый размер: 2048×2048 px, сетка 256 px. + +### Журналы +- Сессия 0 — полное описание с DC, NPC, выборами +- NPC: Омар, Амира, Захир, Фенек +- Ключевые события + +### NPC (Actors) +Заготовки для Омара, Амиры, Захира, Фенека. + +### Таблицы +Случайные встречи в Кадыре (1d6). + +## Замена карт +1. Подготовьте карту (JPG/PNG/WebP), желательно 2048×2048 +2. Замените файл в `assets/maps/` +3. Перезапустите модуль в Foundry + +## Лицензия +Фан-контент для PF2e. Pathfinder 2e © Paizo Inc. diff --git a/assets/maps/amira-room.svg b/assets/maps/amira-room.svg new file mode 100644 index 0000000..07ebee9 --- /dev/null +++ b/assets/maps/amira-room.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + Комната Амиры + + [PLACEHOLDER] + Заменить на готовую карту + Тайная комната в каравансарае. Сцена 4 — предрасследование. + Размер: 2048×2048 px | Сетка: 256 px (≈ 5 футов) + Модуль: PF2e Багровый Караван v0.1.0 + \ No newline at end of file diff --git a/assets/maps/kadir-bazaar.svg b/assets/maps/kadir-bazaar.svg new file mode 100644 index 0000000..59585d6 --- /dev/null +++ b/assets/maps/kadir-bazaar.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + Кадир — Базарный квартал + + [PLACEHOLDER] + Заменить на готовую карту + Извилистые улочки, палатки с пряностями, звон кузнецов. Сцена 1 — встреча с Омаром. + Размер: 2048×2048 px | Сетка: 256 px (≈ 5 футов) + Модуль: PF2e Багровый Караван v0.1.0 + \ No newline at end of file diff --git a/assets/maps/kadir-caravanserai.svg b/assets/maps/kadir-caravanserai.svg new file mode 100644 index 0000000..9cd9ca3 --- /dev/null +++ b/assets/maps/kadir-caravanserai.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + Каравансарай Омара аль-Фахима + + [PLACEHOLDER] + Заменить на готовую карту + Внутренний двор с арками, колодец, повозки и мешки. Сцена 2 — набор в караван. + Размер: 2048×2048 px | Сетка: 256 px (≈ 5 футов) + Модуль: PF2e Багровый Караван v0.1.0 + \ No newline at end of file diff --git a/assets/maps/kadir-streets.svg b/assets/maps/kadir-streets.svg new file mode 100644 index 0000000..81a61e6 --- /dev/null +++ b/assets/maps/kadir-streets.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + Улицы Кадыра — Случайные встречи + + [PLACEHOLDER] + Заменить на готовую карту + Тёмные переулки, фонари, шорохи. Таблица случайных встреч 1d6. + Размер: 2048×2048 px | Сетка: 256 px (≈ 5 футов) + Модуль: PF2e Багровый Караван v0.1.0 + \ No newline at end of file diff --git a/assets/maps/omars-fire.svg b/assets/maps/omars-fire.svg new file mode 100644 index 0000000..1db8c7c --- /dev/null +++ b/assets/maps/omars-fire.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + Костёр Омара + + [PLACEHOLDER] + Заменить на готовую карту + Ночь, костёр, сидячие места. Сцена 3 — первые разговоры и истории. + Размер: 2048×2048 px | Сетка: 256 px (≈ 5 футов) + Модуль: PF2e Багровый Караван v0.1.0 + \ No newline at end of file diff --git a/lang/ru.json b/lang/ru.json new file mode 100644 index 0000000..6013f6e --- /dev/null +++ b/lang/ru.json @@ -0,0 +1,7 @@ +{ + "PF2E_BAGROVY_KARAVAN": { + "ModuleTitle": "PF2e: Багровый Караван", + "Session0": "Сессия 0 — Подготовка", + "RandomEncounters": "Случайные встречи Кадыра" + } +} \ No newline at end of file diff --git a/packs/actors.db b/packs/actors.db new file mode 100644 index 0000000..240b766 --- /dev/null +++ b/packs/actors.db @@ -0,0 +1,4 @@ +{"_id": "act_omar", "name": "Омар аль-Фахим", "type": "npc", "img": "icons/svg/mystery-man.svg", "system": {"attributes": {"ac": {"value": 16}, "hp": {"value": 28, "max": 28}}, "level": {"value": 2}, "traits": {"size": {"value": "med"}, "rarity": "unique", "value": ["humanoid", "human"]}, "abilities": {"str": {"mod": 0}, "dex": {"mod": 1}, "con": {"mod": 1}, "int": {"mod": 2}, "wis": {"mod": 2}, "cha": {"mod": 3}}}, "items": [], "token": {"name": "Омар", "actorLink": true}} +{"_id": "act_amira", "name": "Амира", "type": "npc", "img": "icons/svg/mystery-man.svg", "system": {"attributes": {"ac": {"value": 15}, "hp": {"value": 22, "max": 22}}, "level": {"value": 1}, "traits": {"size": {"value": "med"}, "rarity": "unique", "value": ["humanoid", "human"]}, "abilities": {"str": {"mod": 0}, "dex": {"mod": 2}, "con": {"mod": 0}, "int": {"mod": 1}, "wis": {"mod": 2}, "cha": {"mod": 2}}}, "items": [], "token": {"name": "Амира", "actorLink": true}} +{"_id": "act_zahir", "name": "Захир", "type": "npc", "img": "icons/svg/mystery-man.svg", "system": {"attributes": {"ac": {"value": 17}, "hp": {"value": 32, "max": 32}}, "level": {"value": 3}, "traits": {"size": {"value": "med"}, "rarity": "unique", "value": ["humanoid", "human"]}, "abilities": {"str": {"mod": 2}, "dex": {"mod": 3}, "con": {"mod": 1}, "int": {"mod": 0}, "wis": {"mod": 1}, "cha": {"mod": 1}}}, "items": [], "token": {"name": "Захир", "actorLink": true}} +{"_id": "act_fenek", "name": "Фенек", "type": "npc", "img": "icons/svg/mystery-man.svg", "system": {"attributes": {"ac": {"value": 14}, "hp": {"value": 18, "max": 18}}, "level": {"value": 1}, "traits": {"size": {"value": "sm"}, "rarity": "unique", "value": ["humanoid", "gnome"]}, "abilities": {"str": {"mod": -1}, "dex": {"mod": 2}, "con": {"mod": 0}, "int": {"mod": 2}, "wis": {"mod": 1}, "cha": {"mod": 3}}}, "items": [], "token": {"name": "Фенек", "actorLink": true}} diff --git a/packs/journal.db b/packs/journal.db new file mode 100644 index 0000000..1053158 --- /dev/null +++ b/packs/journal.db @@ -0,0 +1,2 @@ +{"_id": "j_session0", "name": "Сессия 0 — Подготовка к Багровому Каравану", "folder": null, "pages": [{"name": "Обзор", "type": "text", "text": {"content": "

Сессия 0 — Багровый Караван

Вечер. Кадир. Жара спала...

Сцены:

  1. Базар — встреча с Омаром
  2. Каравансарай — набор
  3. Костёр — разговоры
  4. Предрасследование — комната Амиры
"}}, {"name": "Сцена 1 — Базар", "type": "text", "text": {"content": "

Сцена 1: Базарный квартал Кадыра

Омар прячется за лавкой специй. Sense Motive DC 16.

Выборы:

"}}, {"name": "Сцена 2 — Каравансарай", "type": "text", "text": {"content": "

Сцена 2: Каравансарай Омара

Проверка персонала. Pre-hire investigation: Perception DC 15, Society DC 14.

Таблица случайных встреч 1d6 приведена в разделе 'Таблицы'.

"}}, {"name": "NPC", "type": "text", "text": {"content": "

NPC

Омар аль-Фахим — торговец, скрывает миссию.

Амира — маска беспокойства, знает больше, чем говорит.

Захир — проводник, 'волк в овечьей шкуре'. Sense Motive DC 18 чтобы подметить натяжку.

Фенек — комичный агент Следопытов.

"}}, {"name": "DC-таблица", "type": "text", "text": {"content": "

DC проверок (Party Level 1)

ПроверкаDCКонтекст
Sense Motive (Омар)16Он скрывает что-то важное
Sense Motive (Амира)14Беспокойство видно
Sense Motive (Захир)18Мастер маскировки
Diplomacy (торг)18Омар твёрд в цене
Perception (н.р. ритуал Захира)17+2 за dim light
Perception (предрасследование)15Обыск комнаты Амиры
Society (предрасследование)14Слухи о караване
Stealth (следить за Захиром)16Он бдителен

Стартовое богатство: 15 gp на персонажа + набор путешественника.

"}}, {"name": "Ветка отказа", "type": "text", "text": {"content": "

Если игроки говорят «нет»

Омар не настаивает, но даёт имя контактного лица. Через 1d4 дня в городе начинаются слухи о пропавшем караване. Культ Раскалённого Солнца набирает силу — мир меняется независимо от решения игроков.

Игроки могут присоединиться позже через другой крючок (спасение Амиры, контракт стражи).

"}}]} +{"_id": "j_lore", "name": "Лор — Кадир и мир", "folder": null, "pages": [{"name": "Кадир", "type": "text", "text": {"content": "

Кадир

Торговый город на перекрёстке путей между Келешем и Осирионом. Базарный квартал, каравансараи, храм Саренрэ.

"}}, {"name": "Культ Раскалённого Солнца", "type": "text", "text": {"content": "

Культ Раскалённого Солнца

Маскируют ритуалы под обряды Саренрэ. Стремятся пробудить древнюю силу в Гробнице-Тюрьме Малакара.

"}}]} diff --git a/packs/scenes.db b/packs/scenes.db new file mode 100644 index 0000000..bdce95f --- /dev/null +++ b/packs/scenes.db @@ -0,0 +1,5 @@ +{"_id": "sc_bazaar", "name": "1. Базарный квартал Кадыра", "background": {"src": "modules/pf2e-bagrovy-karavan/assets/maps/kadir-bazaar.svg", "width": 2048, "height": 2048, "offsetX": 0, "offsetY": 0}, "grid": {"size": 256, "type": 1, "color": "#000000", "alpha": 0.3, "distance": 5, "units": "ft"}, "walls": [], "lights": [], "notes": [], "tokens": [], "navName": "Базар"} +{"_id": "sc_caravanserai", "name": "2. Каравансарай Омара", "background": {"src": "modules/pf2e-bagrovy-karavan/assets/maps/kadir-caravanserai.svg", "width": 2048, "height": 2048, "offsetX": 0, "offsetY": 0}, "grid": {"size": 256, "type": 1, "color": "#000000", "alpha": 0.3, "distance": 5, "units": "ft"}, "walls": [], "lights": [], "notes": [], "tokens": [], "navName": "Каравансарай"} +{"_id": "sc_fire", "name": "3. Костёр Омара", "background": {"src": "modules/pf2e-bagrovy-karavan/assets/maps/omars-fire.svg", "width": 2048, "height": 2048, "offsetX": 0, "offsetY": 0}, "grid": {"size": 256, "type": 1, "color": "#000000", "alpha": 0.3, "distance": 5, "units": "ft"}, "walls": [], "lights": [{"x": 1024, "y": 1024, "radius": 400, "color": "#ffaa00", "alpha": 0.6, "animation": "torch"}], "notes": [], "tokens": [], "navName": "Костёр"} +{"_id": "sc_streets", "name": "4. Улицы Кадыра (случайные встречи)", "background": {"src": "modules/pf2e-bagrovy-karavan/assets/maps/kadir-streets.svg", "width": 2048, "height": 2048, "offsetX": 0, "offsetY": 0}, "grid": {"size": 256, "type": 1, "color": "#000000", "alpha": 0.3, "distance": 5, "units": "ft"}, "walls": [], "lights": [], "notes": [], "tokens": [], "navName": "Улицы"} +{"_id": "sc_amira", "name": "5. Комната Амиры (предрасследование)", "background": {"src": "modules/pf2e-bagrovy-karavan/assets/maps/amira-room.svg", "width": 2048, "height": 2048, "offsetX": 0, "offsetY": 0}, "grid": {"size": 256, "type": 1, "color": "#000000", "alpha": 0.3, "distance": 5, "units": "ft"}, "walls": [], "lights": [{"x": 500, "y": 500, "radius": 300, "color": "#ffeeaa", "alpha": 0.5, "animation": "none"}], "notes": [], "tokens": [], "navName": "Комната Амиры"} diff --git a/packs/tables.db b/packs/tables.db new file mode 100644 index 0000000..215123e --- /dev/null +++ b/packs/tables.db @@ -0,0 +1 @@ +{"_id": "tbl_encounters", "name": "Случайные встречи в Кадыре", "formula": "1d6", "results": [{"range": [1, 1], "type": 0, "text": "Стража проверяет документы — Diplomacy DC 12 или тюремная камера"}, {"range": [2, 2], "type": 0, "text": "Карманник — Perception DC 14 или потеря 1d4 gp"}, {"range": [3, 3], "type": 0, "text": "Торговец предлагает подозрительно дешёвую карту — Survival DC 13"}, {"range": [4, 4], "type": 0, "text": "Пилигрим Саренрэ просит помощи — Medicine DC 12"}, {"range": [5, 5], "type": 0, "text": "Шепчущий голос из переулка — Intimidation DC 15"}, {"range": [6, 6], "type": 0, "text": "Мальчишка бежит с вестью о караване — погоня Athletics DC 13"}], "replacement": true, "displayRoll": true}