# Characters Engine — персонажи, их действия и отряд Characters Engine определяет, кто участвует в боях: герой, спутники и враги — со здоровьем, атакой, защитой, очками действий и карточками действий, которые они могут применять. Мод также показывает панель **Действия персонажей**, где виден ваш отряд и где решается, какие карточки возьмёт в бой каждый персонаж, и поставляет портреты, которые появляются рядом с репликами диалогов. Он входит в Cthangover и RPG Plus, а боевые моды, recruiting и редакторы строятся поверх него. ## Панель «Действия персонажей» Открывается иконкой карт на панели инструментов. ![Панель «Действия персонажей» в Cthangover: Марао и Мураками с HP, AP, ATK и DEF, их карточки действий («Базовая атака», «Защита», «Оглушение») с целями, стоимостью и значениями, у каждого пустой третий слот, справа — пустой пул действий.](assets/character-panel.jpg) - **Отряд** — все персонажи вашего отряда с портретом, здоровьем (HP), очками действий за ход (AP), атакой (ATK) и защитой (DEF). - **Слоты** — у каждого персонажа три слота для карточек действий. Карточка показывает цель (враг, союзник, сам персонаж), стоимость в AP и свои значения. - **Пул действий** — карточки, которые у вас есть, но ещё не раздали. Перетащите карточку в слот или выберите карточку, а затем слот; перетаскивание между слотами меняет их местами. Поиск и фильтры сужают пул. - **Сброс** возвращает в слоты первые три действия из описания каждого персонажа; остальные его действия уходят в пул. ## Три разные картинки Персонаж может появиться тремя способами, и каждый берётся из своего места: ![Слева: диалоговый портрет Марао (аватар «marao/sad»). В центре: изображение персонажа на его карточке. Справа: спрайт для карты (charset) героя RPG Plus — он принадлежит другой системе.](assets/three-pictures.jpg) 1. **Диалоговый портрет (аватар)** — картинка из папки `avatars/` мода, выбирается для каждой реплики в сценарии: `text "…" first=marao/sad` занимает первое место портрета, `second=…` — второе (для диалога двух людей). К описанию персонажа он не привязан. 2. **Изображение персонажа** — поле `Image` из описания персонажа; показывается на карточках в этой панели и в боях. 3. **Спрайт для карты (charset)** — шагающий спрайт на тайловых картах; его выбирает мод RPG (настройка **Внешность** игры или поле `Sprite` события), а не этот мод. ## Описание персонажа Персонажи — это JSON-файлы вида `character` в папке `characters/` мода. Вот Марао из Cthangover — сравните с его карточкой на панели выше: ```json { "Kind": "character", "Items": [ { "Id": "Marao", "Name": "characters/player/marao", "Image": "characters/player/marao", "Level": 1, "Point": 1, "Health": 16, "Defence": 0, "Attack": 5, "Actions": ["physics/attack", "physics/defence"] } ] } ``` `Health 16` — это его **HP 16/16**, `Point 1` — **AP 1**, `Attack 5` — **ATK 5**, а два `Actions` — карточки **Базовая атака** и **Защита** в его слотах. Прочие поля: `Behaviour` (боевой ИИ врага, например `base`), `Exp` (опыт за победу над ним), `RecruitmentChance` и `Loot` — список из `ItemId`, `MinCount`, `MaxCount` и `Probability`, что выпадает при победе над персонажем. ## Карточки действий Действия — это JSON-файлы вида `action`. Этот мод кладёт в игру базовые физические — **Базовая атака**, **Защита** и **Оглушение**: ```json { "Id": "physics/attack", "Name": "characters/action/physics_attack/name", "Description": "characters/action/physics_attack/description", "Image": "characters/actions/physics_attack", "Type": "ToEnemy", "Values": ["RequiredPoint=1", "Attack=1.0", "AttackType=Physics"] } ``` `Type` задаёт цель (враг, союзник, сам персонаж) или делает карточку пассивной или активной; `RequiredPoint` — стоимость в AP. Что остальные значения делают в бою, решает используемый боевой мод. ## Добавить персонажа в отряд из сценария ```scenario action party.add id=rpg_hero ``` Персонаж входит в отряд и в боевой состав. Тот, кто уже числится, сохраняет уровень и здоровье. RPG Demo использует эту строку, чтобы отдать игроку героя при первом входе в деревню. ## Если что-то пошло не так 1. **Персонаж показывает id вместо имени.** `Name` — ключ перевода; добавьте его в файлы `locale` мода. 2. **Рядом с репликой нет портрета.** Имя аватара после `first=` / `second=` должно совпадать с картинкой в папке `avatars/` какого-нибудь мода, например `avatars/marao/sad.png` для `marao/sad`. 3. **Карточку нельзя применить в бою.** У персонажа меньше AP, чем `RequiredPoint` карточки.