Compare commits

..
5 Commits
29 changed files with 959 additions and 3 deletions

No files matched your search

+1
View File
@@ -12,6 +12,7 @@ obj/
gen/
obj/
bin/
art_sources/
*.tres~
*.tscn~
Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

+84
View File
@@ -0,0 +1,84 @@
# Characters Engine — characters, their actions and the party
Characters Engine defines who takes part in battles: the hero, companions and enemies, with their health, attack, defence, action points and the action cards they can use. It also shows the **Character actions** panel, where you see your party and decide which cards each character takes into battle, and it supplies the portraits that appear next to dialog lines.
It is part of Cthangover and RPG Plus, and battle mods, recruiting and the editors build on it.
## The Character actions panel
Open it with the cards icon on the toolbar.
![The Character actions panel in Cthangover: Marao and Murakami with HP, AP, ATK and DEF, their action cards (Basic attack, Defence, Stun) with targets, costs and values, an empty third slot each, and the empty action pool on the right.](assets/character-panel.jpg)
- **Party** — every character in your party with their portrait, health (HP), action points per turn (AP), attack (ATK) and defence (DEF).
- **Slots** — each character has three slots for action cards. A card shows its target (enemy, ally, self), its cost in AP and its values.
- **Action pool** — cards you own but have not assigned. Drag a card into a slot, or select a card and then a slot; dragging between slots swaps them. Search and filters narrow the pool.
- **Reset** puts the first three actions of each character's definition back into the slots; their other actions go to the pool.
## Three different pictures
A character can appear in three ways, and each comes from a different place:
![Left: Marao's dialog portrait (avatar "marao/sad"). Middle: Marao's character image on his card. Right: a map sprite (charset) of the RPG Plus hero, which belongs to a different system.](assets/three-pictures.jpg)
1. **Dialog portrait (avatar)** — a picture in a mod's `avatars/` folder, chosen per line in a scenario: `text "…" first=marao/sad` fills the first portrait place, `second=…` the second (for a dialog between two people). It is not tied to a character definition.
2. **Character image** — the `Image` of the character definition, shown on cards in this panel and in battles.
3. **Map sprite (charset)** — the walking sprite on tile maps, chosen by the RPG mod (the game's **Appearance** setting or an event's `Sprite`), not by this mod.
## A character definition
Characters are JSON files of kind `character` in a mod's `characters/` folder. This is Marao from Cthangover — compare it with his card in the panel above:
```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` is his **HP 16/16**, `Point 1` his **AP 1**, `Attack 5` his **ATK 5**, and the two `Actions` are the **Basic attack** and **Defence** cards in his slots.
Other fields: `Behaviour` (the enemy's battle AI, such as `base`), `Exp` (experience given when beaten), `RecruitmentChance`, and `Loot` — a list of `ItemId`, `MinCount`, `MaxCount` and `Probability` dropped when the character is defeated.
## Action cards
Actions are JSON files of kind `action`. This mod ships the basic physical ones — **Basic attack**, **Defence** and **Stun**:
```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` sets the target (enemy, ally, self) or makes it passive or active; `RequiredPoint` is the AP cost. What the other values do in a fight is decided by the battle mod in use.
## Add a character to the party from a scenario
```scenario
action party.add id=rpg_hero
```
The character joins the party and the battle set. Someone already in the roster keeps their level and health. RPG Demo uses this line to give the player the hero when the village is first entered.
## If something goes wrong
1. **A character shows its id instead of a name.** The `Name` is a translation key; add it to the mod's `locale` files.
2. **No portrait next to a line.** The avatar name after `first=` / `second=` must match a picture in some mod's `avatars/` folder, for example `avatars/marao/sad.png` for `marao/sad`.
3. **A card cannot be used in battle.** The character has fewer AP than the card's `RequiredPoint`.
+84
View File
@@ -0,0 +1,84 @@
# Characters Engine — personajes, sus acciones y el grupo
Characters Engine define quién participa en los combates: el héroe, los compañeros y los enemigos, con su salud, ataque, defensa, puntos de acción y las cartas de acción que pueden usar. También muestra el panel **Acciones de personaje**, donde ves tu grupo y decides qué cartas lleva cada personaje al combate, y proporciona los retratos que aparecen junto a las líneas de diálogo.
Forma parte de Cthangover y RPG Plus, y sobre él se construyen los mods de combate, recruiting y los editores.
## El panel Acciones de personaje
Se abre con el icono de cartas en la barra de herramientas.
![El panel Acciones de personaje en Cthangover: Marao y Murakami con HP, AP, ATK y DEF, sus cartas de acción (Ataque básico, Defensa, Aturdir) con objetivos, costes y valores, un tercer hueco vacío en cada uno, y la reserva de acciones vacía a la derecha.](assets/character-panel.jpg)
- **Grupo** — todos los personajes de tu grupo con su retrato, salud (HP), puntos de acción por turno (AP), ataque (ATK) y defensa (DEF).
- **Huecos** — cada personaje tiene tres huecos para cartas de acción. Una carta muestra su objetivo (enemigo, aliado, uno mismo), su coste en AP y sus valores.
- **Reserva de acciones** — cartas que posees pero no has asignado. Arrastra una carta a un hueco, o selecciona una carta y luego un hueco; arrastrar entre huecos los intercambia. La búsqueda y los filtros reducen la reserva.
- **Restablecer** devuelve a los huecos las tres primeras acciones de la definición de cada personaje; sus demás acciones van a la reserva.
## Tres imágenes distintas
Un personaje puede aparecer de tres maneras, y cada una viene de un sitio diferente:
![Izquierda: el retrato de diálogo de Marao (avatar «marao/sad»). Centro: la imagen de personaje de Marao en su carta. Derecha: un sprite de mapa (charset) del héroe de RPG Plus, que pertenece a otro sistema.](assets/three-pictures.jpg)
1. **Retrato de diálogo (avatar)** — una imagen en la carpeta `avatars/` de un mod, elegida línea a línea en el escenario: `text "…" first=marao/sad` ocupa el primer puesto de retrato y `second=…` el segundo (para un diálogo entre dos personas). No está ligado a la definición del personaje.
2. **Imagen de personaje** — el `Image` de la definición, mostrado en las cartas de este panel y en los combates.
3. **Sprite de mapa (charset)** — el sprite que camina por los mapas de tiles; lo elige el mod RPG (el ajuste **Appearance** del juego o el `Sprite` de un evento), no este mod.
## Una definición de personaje
Los personajes son archivos JSON de tipo `character` en la carpeta `characters/` de un mod. Este es Marao, de Cthangover; compáralo con su carta en el panel de arriba:
```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` es su **HP 16/16**, `Point 1` su **AP 1** y `Attack 5` su **ATK 5**; las dos `Actions` son las cartas **Ataque básico** y **Defensa** de sus huecos.
Otros campos: `Behaviour` (la IA de combate del enemigo, por ejemplo `base`), `Exp` (la experiencia que da al caer), `RecruitmentChance` y `Loot` — una lista de `ItemId`, `MinCount`, `MaxCount` y `Probability` que suelta el personaje al ser derrotado.
## Cartas de acción
Las acciones son archivos JSON de tipo `action`. Este mod incluye las físicas básicas — **Ataque básico**, **Defensa** y **Aturdir**:
```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` fija el objetivo (enemigo, aliado, uno mismo) o lo vuelve pasiva o activa; `RequiredPoint` es el coste en AP. Lo que hacen los demás valores en un combate lo decide el mod de combate en uso.
## Añadir un personaje al grupo desde un escenario
```scenario
action party.add id=rpg_hero
```
El personaje se une al grupo y al equipo de combate. Quien ya estaba en la plantilla conserva su nivel y su salud. RPG Demo usa esta línea para darte el héroe al entrar por primera vez en el pueblo.
## Si algo falla
1. **Un personaje muestra su id en vez de un nombre.** El `Name` es una clave de traducción; añádela a los archivos `locale` del mod.
2. **No hay retrato junto a una línea.** El nombre del avatar tras `first=` / `second=` debe coincidir con una imagen en la carpeta `avatars/` de algún mod, por ejemplo `avatars/marao/sad.png` para `marao/sad`.
3. **Una carta no se puede usar en combate.** El personaje tiene menos AP que el `RequiredPoint` de la carta.
+84
View File
@@ -0,0 +1,84 @@
# Characters Engine — キャラクター、そのアクション、パーティ
Characters Engine は、誰が戦闘に参加するかを定義します。主人公・仲間・敵に、HP・攻撃・防御・アクションポイント、そして使えるアクションカードを持たせるものです。さらに**キャラクターアクション**パネルを表示します。ここでパーティを見ながら、どのカードを各キャラクターが戦闘に持っていくか決めます。会話の台詞のそばに出るポートレートも、この mod が供給します。
Cthangover と RPG Plus の一部であり、戦闘 mod、recruiting、各エディターがこの上に作られています。
## キャラクターアクションパネル
ツールバーのカード・アイコンで開きます。
![Cthangover のキャラクターアクションパネル: HP・AP・ATK・DEF を持つ Marao と Murakami、目標・コスト・値つきのアクションカード(基本攻撃、防御、スタン)、それぞれの空いた三つ目のスロット、右側の空のアクションプール。](assets/character-panel.jpg)
- **パーティ** — パーティの全キャラクターを、ポートレート・HP(体力)・ターンごとの AP(アクションポイント)・ATK(攻撃)・DEF(防御)つきで一覧にします。
- **スロット** — 各キャラクターにはアクションカード用のスロットが三つあります。カードには目標(敵・味方・自分)、AP コスト、値が表示されます。
- **アクションプール** — 持っているけれどまだ割り当てていないカード。カードをスロットへドラッグするか、カードを選んでからスロットを選びます。スロット間のドラッグは入れ替えになります。検索とフィルターでプールを絞り込めます。
- **リセット** は、各キャラクターの定義の先頭三つのアクションをスロットへ戻します。残りはプールへ移ります。
## 三つの異なる絵
キャラクターは三つの姿で現れ、それぞれ別の場所から来ます。
![左: Marao の会話ポートレート(アバター「marao/sad」)。中央: カードに映る Marao のキャラクター画像。右: RPG Plus の主人公のマップスプライト(charset)で、これは別のシステムのもの。](assets/three-pictures.jpg)
1. **会話ポートレート(アバター)** — mod の `avatars/` フォルダーに入る画像で、シナリオの行ごとに選びます。`text "…" first=marao/sad` が一つ目のポートレート位置を、`second=…` が二つ目(二人の会話)を埋めます。キャラクターの定義とは結びついていません。
2. **キャラクター画像** — 定義の `Image`。このパネルのカードと戦闘で表示されます。
3. **マップスプライト(charset)** — タイルマップを歩くスプライト。選ぶのは RPG mod(ゲームの**外見**設定かイベントの `Sprite`)で、この mod ではありません。
## キャラクターの定義
キャラクターは、mod の `characters/` フォルダーに入る kind `character` の JSON ファイルです。こちらは Cthangover の Marao。上のパネルのカードと見比べてください。
```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`(敵の戦闘 AI。例は `base`)、`Exp`(倒したときの経験値)、`RecruitmentChance`、そして `Loot` — キャラクターを倒したときに落ちる `ItemId`・`MinCount`・`MaxCount`・`Probability` の一覧です。
## アクションカード
アクションは kind `action` の JSON ファイルです。この mod は基本的な物理アクション — **基本攻撃**・**防御**・**スタン** — を同梱しています。
```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 コストです。ほかの値が戦闘で何をするかは、使われている戦闘 mod が決めます。
## シナリオからパーティにキャラクターを加える
```scenario
action party.add id=rpg_hero
```
キャラクターはパーティと戦闘メンバーに入ります。すでに名簿にいる者はレベルと HP を保ちます。RPG Demo はこの行で、村に初めて入ったときに主人公をプレイヤーに渡します。
## うまく動かないとき
1. **キャラクターが名前ではなく id を表示する。** `Name` は翻訳キーです。mod の `locale` ファイルに追加してください。
2. **台詞のそばにポートレートがない。** `first=` / `second=` の後のアバター名が、いずれかの mod の `avatars/` フォルダーにある画像と一致する必要があります。例は `marao/sad` に対する `avatars/marao/sad.png`。
3. **カードが戦闘で使えない。** キャラクターの AP がカードの `RequiredPoint` に足りていません。
+84
View File
@@ -0,0 +1,84 @@
# Characters Engine — 캐릭터, 액션, 파티
Characters Engine은 누가 전투에 참가하는지를 정의합니다. 주인공, 동료, 적에게 체력, 공격, 방어, 액션 포인트, 그리고 사용할 수 있는 액션 카드를 지니게 하는 모드입니다. 또한 **캐릭터 액션** 패널을 보여 주어 파티를 확인하고 각 캐릭터가 전투에 어떤 카드를 가져갈지 정하게 하며, 대화 대사 옆에 나타나는 초상화도 공급합니다.
Cthangover와 RPG Plus의 일부이며, 전투 mod, recruiting, 편집기들이 이 위에 세워집니다.
## 캐릭터 액션 패널
툴바의 카드 아이콘으로 엽니다.
![Cthangover의 캐릭터 액션 패널: HP, AP, ATK, DEF를 지닌 Marao와 Murakami, 대상·비용·수치가 표시된 액션 카드(기본 공격, 방어, 기절), 각자의 빈 세 번째 슬롯, 오른쪽의 빈 액션 풀.](assets/character-panel.jpg)
- **파티** — 파티의 모든 캐릭터를 초상화, 체력(HP), 턴당 액션 포인트(AP), 공격(ATK), 방어(DEF)와 함께 보여 줍니다.
- **슬롯** — 캐릭터마다 액션 카드용 슬롯이 세 개 있습니다. 카드는 대상(적, 아군, 자신), AP 비용, 수치를 표시합니다.
- **액션 풀** — 가지고 있지만 아직 배정하지 않은 카드. 카드를 슬롯으로 끌어 놓거나, 카드를 고른 뒤 슬롯을 고릅니다. 슬롯 사이의 드래그는 자리를 바꿉니다. 검색과 필터로 풀을 좁힐 수 있습니다.
- **초기화**는 각 캐릭터 정의의 처음 세 액션을 슬롯으로 되돌립니다. 나머지 액션은 풀로 갑니다.
## 서로 다른 세 가지 그림
캐릭터는 세 가지 모습으로 나타나며, 각각 다른 곳에서 옵니다.
![왼쪽: Marao의 대화 초상화(아바타 "marao/sad"). 가운데: 카드에 나타난 Marao의 캐릭터 이미지. 오른쪽: RPG Plus 주인공의 맵 스프라이트(charset)로, 다른 시스템에 속합니다.](assets/three-pictures.jpg)
1. **대화 초상화(아바타)** — mod의 `avatars/` 폴더에 있는 그림으로, 시나리오에서 줄마다 고릅니다. `text "…" first=marao/sad`가 첫 번째 초상화 자리를, `second=…`가 두 번째 자리(두 사람의 대화)를 채웁니다. 캐릭터 정의와 묶여 있지 않습니다.
2. **캐릭터 이미지** — 정의의 `Image`. 이 패널의 카드와 전투에서 표시됩니다.
3. **맵 스프라이트(charset)** — 타일 맵을 걷는 스프라이트. 고르는 것은 RPG mod(게임의 **외형** 설정이나 이벤트의 `Sprite`)이며 이 모드가 아닙니다.
## 캐릭터 정의
캐릭터는 mod의 `characters/` 폴더에 있는 kind `character` JSON 파일입니다. Cthangover의 Marao입니다. 위 패널의 카드와 비교해 보세요.
```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`(적의 전투 AI, 예: `base`), `Exp`(물리쳤을 때 주는 경험치), `RecruitmentChance`, 그리고 `Loot` — 캐릭터를 쓰러뜨렸을 때 떨어지는 `ItemId`, `MinCount`, `MaxCount`, `Probability` 목록입니다.
## 액션 카드
액션은 kind `action` JSON 파일입니다. 이 모드는 기본 물리 액션 — **기본 공격**, **방어**, **기절** — 을 함께 제공합니다.
```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 비용입니다. 나머지 값이 전투에서 하는 일은 사용 중인 전투 mod가 결정합니다.
## 시나리오에서 파티에 캐릭터 추가하기
```scenario
action party.add id=rpg_hero
```
캐릭터는 파티와 전투 명단에 들어옵니다. 이미 명단에 있는 자는 레벨과 체력을 유지합니다. RPG Demo는 이 줄로 마을에 처음 들어섰을 때 주인공을 플레이어에게 줍니다.
## 문제가 생겼을 때
1. **캐릭터가 이름 대신 id를 보여 줍니다.** `Name`은 번역 키입니다. mod의 `locale` 파일에 추가하세요.
2. **대사 옆에 초상화가 없습니다.** `first=` / `second=` 뒤의 아바타 이름이 어느 mod의 `avatars/` 폴더에 있는 그림과 일치해야 합니다. 예: `marao/sad`에는 `avatars/marao/sad.png`.
3. **카드를 전투에서 쓸 수 없습니다.** 캐릭터의 AP가 카드의 `RequiredPoint`보다 적습니다.
+84
View File
@@ -0,0 +1,84 @@
# 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` карточки.
+84
View File
@@ -0,0 +1,84 @@
# Characters Engine — nhân vật, hành động của họ và đội
Characters Engine quy định ai tham chiến: anh hùng, đồng đội và kẻ địch, cùng máu, tấn công, phòng thủ, điểm hành động và các thẻ hành động họ có thể dùng. Mod còn mở bảng **Hành động nhân vật**, nơi bạn xem đội của mình và quyết định mỗi nhân vật mang những thẻ nào vào trận, đồng thời cung cấp các chân dung xuất hiện bên cạnh câu thoại.
Mod là một phần của Cthangover và RPG Plus; các mod chiến đấu, recruiting và các trình soạn thảo đều xây trên nó.
## Bảng Hành động nhân vật
Mở bằng biểu tượng thẻ bài trên thanh công cụ.
![Bảng Hành động nhân vật trong Cthangover: Marao và Murakami với HP, AP, ATK, DEF, các thẻ hành động (Tấn công cơ bản, Phòng thủ, Choáng) kèm mục tiêu, giá và giá trị, mỗi người một ô trống thứ ba, bên phải là kho hành động trống.](assets/character-panel.jpg)
- **Đội** — mọi nhân vật trong đội của bạn cùng chân dung, máu (HP), điểm hành động mỗi lượt (AP), tấn công (ATK) và phòng thủ (DEF).
- **Ô chứa** — mỗi nhân vật có ba ô cho thẻ hành động. Một thẻ hiển thị mục tiêu (địch, đồng đội, bản thân), giá AP và các giá trị của nó.
- **Kho hành động** — các thẻ bạn sở hữu nhưng chưa phân chỗ. Kéo thẻ vào một ô, hoặc chọn thẻ rồi chọn ô; kéo giữa hai ô là đổi chỗ. Ô tìm kiếm và bộ lọc thu hẹp kho.
- **Đặt lại** đưa ba hành động đầu trong định nghĩa của từng nhân vật về các ô; các hành động còn lại chuyển vào kho.
## Ba kiểu hình khác nhau
Một nhân vật có thể xuất hiện theo ba cách, và mỗi cách đến từ một nơi khác:
![Trái: chân dung hội thoại của Marao (avatar "marao/sad"). Giữa: ảnh nhân vật của Marao trên thẻ của anh ta. Phải: sprite bản đồ (charset) của nhân vật chính RPG Plus, thuộc một hệ thống khác.](assets/three-pictures.jpg)
1. **Chân dung hội thoại (avatar)** — một ảnh trong thư mục `avatars/` của mod, chọn theo từng câu trong kịch bản: `text "…" first=marao/sad` chiếm chỗ chân dung thứ nhất, `second=…` chỗ thứ hai (hội thoại hai người). Nó không dính vào định nghĩa nhân vật.
2. **Ảnh nhân vật** — trường `Image` của định nghĩa, hiện trên các thẻ trong bảng này và trong trận chiến.
3. **Sprite bản đồ (charset)** — sprite biết đi trên bản đồ tile; do mod RPG chọn (thiết lập **Diện mạo** của game hoặc trường `Sprite` của sự kiện), không phải mod này.
## Định nghĩa nhân vật
Nhân vật là tệp JSON kind `character` trong thư mục `characters/` của mod. Đây là Marao của Cthangover — hãy so với thẻ của cậu ấy trong bảng phía trên:
```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` chính là **HP 16/16** trên thẻ, `Point 1` là **AP 1**, `Attack 5` là **ATK 5**, còn hai `Actions` là thẻ **Tấn công cơ bản** và **Phòng thủ** trong các ô của cậu ấy.
Các trường khác: `Behaviour` (AI chiến đấu của kẻ địch, ví dụ `base`), `Exp` (kinh nghiệm nhận được khi hạ được), `RecruitmentChance`, và `Loot` — danh sách `ItemId`, `MinCount`, `MaxCount`, `Probability` rơi ra khi nhân vật bị hạ.
## Thẻ hành động
Hành động là tệp JSON kind `action`. Mod này có sẵn các hành động vật lý cơ bản — **Tấn công cơ bản**, **Phòng thủ** và **Choáng**:
```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` đặt mục tiêu (địch, đồng đội, bản thân) hoặc biến thẻ thành bị động hay chủ động; `RequiredPoint` là giá AP. Các giá trị còn lại làm gì trong trận chiến do mod chiến đấu đang dùng quyết định.
## Thêm nhân vật vào đội từ kịch bản
```scenario
action party.add id=rpg_hero
```
Nhân vật gia nhập đội và danh sách ra trận. Ai đã có trong danh sách thì giữ nguyên cấp và máu. RPG Demo dùng dòng này để trao nhân vật chính cho người chơi khi lần đầu bước vào ngôi làng.
## Khi có trục trặc
1. **Nhân vật hiện id thay vì tên.** `Name` là khóa dịch; hãy thêm nó vào các tệp `locale` của mod.
2. **Không có chân dung bên cạnh câu thoại.** Tên avatar sau `first=` / `second=` phải khớp với một ảnh trong thư mục `avatars/` của mod nào đó, ví dụ `avatars/marao/sad.png` cho `marao/sad`.
3. **Không dùng được thẻ trong trận.** Nhân vật có ít AP hơn `RequiredPoint` của thẻ.
+84
View File
@@ -0,0 +1,84 @@
# Characters Engine — 角色、角色行动与队伍
Characters Engine 决定谁参加战斗:主角、同伴和敌人,以及他们的生命值、攻击、防御、行动点数和可以使用的行动卡。它还提供**角色行动**面板,让你查看队伍并决定每个角色带上哪些卡参战,同时提供对话台词旁出现的肖像。
它是 Cthangover 和 RPG Plus 的一部分,战斗 mod、recruiting 和各个编辑器都构建在它之上。
## 角色行动面板
用工具栏上的卡片图标打开。
![Cthangover 中的角色行动面板:Marao 和 Murakami 的 HP、AP、ATK、DEF,他们的行动卡(基础攻击、防御、眩晕)带目标、消耗和数值,每人一个空的第三栏,右侧是空的行动卡池。](assets/character-panel.jpg)
- **队伍** — 队伍里的每个角色,带肖像、生命值(HP)、每回合行动点(AP)、攻击(ATK)和防御(DEF)。
- **栏位** — 每个角色有三个行动卡栏位。卡片显示目标(敌人、队友、自身)、AP 消耗和自身数值。
- **卡池** — 已拥有但尚未分配的卡片。把卡拖进栏位,或先选卡再选栏位;在栏位之间拖动可以交换位置。搜索和筛选可以缩小卡池范围。
- **重置** 把每个角色定义中的前三个行动放回栏位;其余行动进入卡池。
## 三种不同的图片
一个角色可以以三种面目出现,每种来自不同的地方:
![左:Marao 的对话肖像(头像 "marao/sad")。中:Marao 在卡片上的角色图。右:RPG Plus 主角的地图精灵(charset),属于另一套系统。](assets/three-pictures.jpg)
1. **对话肖像(头像)** — 某个 mod 的 `avatars/` 文件夹里的图片,在剧本中按台词选用:`text "…" first=marao/sad` 填入第一个肖像位,`second=…` 填入第二个(两人对话时)。它与角色定义没有绑定。
2. **角色图** — 角色定义中的 `Image`,显示在本面板的卡片上和战斗中。
3. **地图精灵(charset)** — 在图块地图上行走的精灵,由 RPG mod 决定(游戏的**外观**设置或事件的 `Sprite` 字段),本 mod 不管这件事。
## 角色定义
角色是 mod 的 `characters/` 文件夹里类型为 `character` 的 JSON 文件。这是 Cthangover 的 Marao——可与上面面板中他的卡片对照:
```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`(敌人的战斗 AI,例如 `base`)、`Exp`(被打败时给予的经验)、`RecruitmentChance`,以及 `Loot`——角色被击败时掉落的 `ItemId`、`MinCount`、`MaxCount`、`Probability` 列表。
## 行动卡
行动是类型为 `action` 的 JSON 文件。本 mod 自带基础物理行动——**基础攻击**、**防御**和**眩晕**:
```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 消耗。其余数值在战斗中的效果由所用的战斗 mod 决定。
## 用剧本把角色加进队伍
```scenario
action party.add id=rpg_hero
```
角色加入队伍和出战名单。已在名单中的角色保留等级和生命值。RPG Demo 用这一行在玩家首次进入村庄时把主角交给玩家。
## 出问题时
1. **角色显示的是 id 而不是名字。** `Name` 是翻译键;把它加进 mod 的 `locale` 文件。
2. **台词旁没有肖像。** `first=` / `second=` 后面的头像名必须对应某个 mod 的 `avatars/` 文件夹里的图片,例如 `marao/sad` 对应 `avatars/marao/sad.png`。
3. **战斗中用不了某张卡。** 角色的 AP 少于卡片的 `RequiredPoint`。
+1 -1
View File
@@ -1,5 +1,5 @@
mod_characters_base_name = Characters Engine
mod_characters_base_desc = Engine characters subsystem: character and action-card factories, the avatar factory and the character panel UI. Kernel resolves templates through ICharacterTemplateProvider/IActionTemplateProvider/IAvatarProvider contracts.
mod_characters_base_desc = Characters engine: heroes, companions and enemies with their battle attributes and action cards, the character actions panel and dialog portraits.
characters/action/physics_attack/name = Basic attack
characters/action/physics_attack/description = Attacks an enemy with a weapon, with a damage multiplier of <g>1.0</g>
characters/action/defence/name = Defence
+8
View File
@@ -0,0 +1,8 @@
mod_characters_base_name = Motor de personajes
mod_characters_base_desc = Motor de personajes: héroes, compañeros y enemigos con sus atributos de combate y cartas de acción, el panel de acciones de personajes y los retratos de diálogo.
characters/action/physics_attack/name = Ataque básico
characters/action/physics_attack/description = Ataca a un enemigo con un arma, con un multiplicador de daño de <g>1.0</g>
characters/action/defence/name = Defensa
characters/action/defence/description = Protege al objetivo con un multiplicador de defensa de <g>1.0</g>
characters/action/stun/name = Aturdir
characters/action/stun/description = Aturde al objetivo durante 2 turnos
+8
View File
@@ -0,0 +1,8 @@
mod_characters_base_name = キャラクターエンジン
mod_characters_base_desc = キャラクターエンジン: 戦闘ステータスとアクションカードを持つ主人公・仲間・敵、キャラクターアクションパネル、会話のポートレート。
characters/action/physics_attack/name = 通常攻撃
characters/action/physics_attack/description = 武器で敵を攻撃する。ダメージ倍率 <g>1.0</g>
characters/action/defence/name = 防御
characters/action/defence/description = 防御倍率 <g>1.0</g> で対象を守る
characters/action/stun/name = スタン
characters/action/stun/description = 対象を 2 ターンの間スタンさせる
+8
View File
@@ -0,0 +1,8 @@
mod_characters_base_name = 캐릭터 엔진
mod_characters_base_desc = 캐릭터 엔진: 전투 스탯과 액션 카드를 지닌 영웅, 동료, 적, 캐릭터 액션 패널, 그리고 대화 초상화.
characters/action/physics_attack/name = 기본 공격
characters/action/physics_attack/description = 무기로 적을 공격한다. 피해 배율 <g>1.0</g>
characters/action/defence/name = 방어
characters/action/defence/description = 방어 배율 <g>1.0</g>로 대상을 보호한다
characters/action/stun/name = 기절
characters/action/stun/description = 대상을 2턴 동안 기절시킨다
+1 -1
View File
@@ -1,5 +1,5 @@
mod_characters_base_name = Движок персонажей
mod_characters_base_desc = Подсистема персонажей движка: фабрики персонажей и боевых карточек, фабрика аватаров и панель персонажа. Ядро получает шаблоны через контракты ICharacterTemplateProvider/IActionTemplateProvider/IAvatarProvider.
mod_characters_base_desc = Движок персонажей: герои, спутники и враги с боевыми характеристиками и карточками действий, панель действий персонажей и портреты для диалогов.
characters/action/physics_attack/name = Простая атака
characters/action/physics_attack/description = Атакует врага оружием, с коэффициентом урона <g>1.0</g>
characters/action/defence/name = Защита
+7
View File
@@ -0,0 +1,7 @@
characters/schema/field/loot = Loot
characters/schema/field/loot_desc = What drops from the character when it is defeated as an enemy: an item, a count and a chance.
characters/schema/field/loot_item = Item
characters/schema/field/loot_min = At least
characters/schema/field/loot_max = At most
characters/schema/field/loot_probability = Chance, %
characters/schema/field/loot_probability_desc = From 0 to 100: how likely the item drops.
+7
View File
@@ -0,0 +1,7 @@
characters/schema/field/loot = Добыча
characters/schema/field/loot_desc = Что выпадает из персонажа, когда его побеждают как врага: предмет, число и шанс.
characters/schema/field/loot_item = Предмет
characters/schema/field/loot_min = Не меньше
characters/schema/field/loot_max = Не больше
characters/schema/field/loot_probability = Шанс, %
characters/schema/field/loot_probability_desc = От 0 до 100: с каким шансом предмет выпадет.
+20
View File
@@ -0,0 +1,20 @@
characters/schema/builtin/party_add = Join the party
characters/schema/builtin/party_add_desc = The character becomes a party member
characters/schema/field/character = Character
characters/schema/builtin/send_notification = Announce a party member
characters/schema/builtin/send_notification_desc = The "joined the party" toast for a character
characters/schema/kind/character = Characters
characters/schema/kind/character_desc = Heroes, NPCs and enemies
characters/schema/field/name = Name
characters/schema/field/picture = Picture
characters/schema/field/level = Level
characters/schema/field/health = Health
characters/schema/field/attack = Attack
characters/schema/field/defence = Defence
characters/schema/field/points = Points
characters/schema/field/exp = Exp reward
characters/schema/field/actions = Battle actions
characters/schema/kind/action = Battle actions
characters/schema/kind/action_desc = Battle cards and commands; with a formula — no code
characters/schema/field/description = Description
characters/schema/field/target = Target
+20
View File
@@ -0,0 +1,20 @@
characters/schema/builtin/party_add = Unirse al grupo
characters/schema/builtin/party_add_desc = El personaje pasa a ser del grupo
characters/schema/field/character = Personaje
characters/schema/builtin/send_notification = Anunciar un miembro del grupo
characters/schema/builtin/send_notification_desc = El aviso de «se unió al grupo» de un personaje
characters/schema/kind/character = Personajes
characters/schema/kind/character_desc = Héroes, PNJ y enemigos
characters/schema/field/name = Nombre
characters/schema/field/picture = Imagen
characters/schema/field/level = Nivel
characters/schema/field/health = Salud
characters/schema/field/attack = Ataque
characters/schema/field/defence = Defensa
characters/schema/field/points = Puntos
characters/schema/field/exp = Experiencia al vencer
characters/schema/field/actions = Acciones de combate
characters/schema/kind/action = Acciones de combate
characters/schema/kind/action_desc = Cartas y órdenes de combate; con fórmula, sin código
characters/schema/field/description = Descripción
characters/schema/field/target = Objetivo
+20
View File
@@ -0,0 +1,20 @@
characters/schema/builtin/party_add = パーティーに加える
characters/schema/builtin/party_add_desc = キャラクターがパーティーの一員になる
characters/schema/field/character = キャラクター
characters/schema/builtin/send_notification = 仲間加入を知らせる
characters/schema/builtin/send_notification_desc = キャラクターの「仲間になった」通知
characters/schema/kind/character = キャラクター
characters/schema/kind/character_desc = 主人公、NPC、敵
characters/schema/field/name = 名前
characters/schema/field/picture = 画像
characters/schema/field/level = レベル
characters/schema/field/health = HP
characters/schema/field/attack = 攻撃
characters/schema/field/defence = 防御
characters/schema/field/points = ポイント
characters/schema/field/exp = 撃破経験値
characters/schema/field/actions = 戦闘行動
characters/schema/kind/action = 戦闘行動
characters/schema/kind/action_desc = 戦闘のカードとコマンド。式があればコード不要
characters/schema/field/description = 説明
characters/schema/field/target = 対象
+20
View File
@@ -0,0 +1,20 @@
characters/schema/builtin/party_add = 파티에 합류
characters/schema/builtin/party_add_desc = 캐릭터가 파티원이 됩니다
characters/schema/field/character = 캐릭터
characters/schema/builtin/send_notification = 파티원 알림
characters/schema/builtin/send_notification_desc = 캐릭터의 ‘파티 합류’ 알림
characters/schema/kind/character = 캐릭터
characters/schema/kind/character_desc = 영웅, NPC, 적
characters/schema/field/name = 이름
characters/schema/field/picture = 그림
characters/schema/field/level = 레벨
characters/schema/field/health = 체력
characters/schema/field/attack = 공격
characters/schema/field/defence = 방어
characters/schema/field/points = 포인트
characters/schema/field/exp = 처치 경험치
characters/schema/field/actions = 전투 행동
characters/schema/kind/action = 전투 행동
characters/schema/kind/action_desc = 전투 카드와 명령. 공식이 있으면 코드 불필요
characters/schema/field/description = 설명
characters/schema/field/target = 대상
+20
View File
@@ -0,0 +1,20 @@
characters/schema/builtin/party_add = В отряд
characters/schema/builtin/party_add_desc = Персонаж становится бойцом отряда
characters/schema/field/character = Персонаж
characters/schema/builtin/send_notification = Уведомить о новом в отряде
characters/schema/builtin/send_notification_desc = Всплывающее «в отряде — …» для персонажа
characters/schema/kind/character = Персонажи
characters/schema/kind/character_desc = Герои, NPC и враги
characters/schema/field/name = Название
characters/schema/field/picture = Картинка
characters/schema/field/level = Уровень
characters/schema/field/health = Здоровье
characters/schema/field/attack = Атака
characters/schema/field/defence = Защита
characters/schema/field/points = Очки
characters/schema/field/exp = Опыт за победу
characters/schema/field/actions = Действия в бою
characters/schema/kind/action = Боевые действия
characters/schema/kind/action_desc = Карты и команды боя; с формулой — без кода
characters/schema/field/description = Описание
characters/schema/field/target = Цель
+20
View File
@@ -0,0 +1,20 @@
characters/schema/builtin/party_add = Vào đội
characters/schema/builtin/party_add_desc = Nhân vật trở thành thành viên đội
characters/schema/field/character = Nhân vật
characters/schema/builtin/send_notification = Báo thành viên mới
characters/schema/builtin/send_notification_desc = Thông báo “vào đội” cho một nhân vật
characters/schema/kind/character = Nhân vật
characters/schema/kind/character_desc = Anh hùng, NPC và kẻ địch
characters/schema/field/name = Tên
characters/schema/field/picture = Hình ảnh
characters/schema/field/level = Cấp
characters/schema/field/health = Máu
characters/schema/field/attack = Tấn công
characters/schema/field/defence = Phòng thủ
characters/schema/field/points = Điểm
characters/schema/field/exp = Kinh nghiệm khi thắng
characters/schema/field/actions = Hành động chiến đấu
characters/schema/kind/action = Hành động chiến đấu
characters/schema/kind/action_desc = Thẻ và lệnh chiến đấu; có công thức thì không cần mã
characters/schema/field/description = Mô tả
characters/schema/field/target = Mục tiêu
+20
View File
@@ -0,0 +1,20 @@
characters/schema/builtin/party_add = 加入队伍
characters/schema/builtin/party_add_desc = 角色成为队伍成员
characters/schema/field/character = 角色
characters/schema/builtin/send_notification = 提示新队员
characters/schema/builtin/send_notification_desc = 角色“加入队伍”的提示
characters/schema/kind/character = 角色
characters/schema/kind/character_desc = 英雄、NPC 和敌人
characters/schema/field/name = 名称
characters/schema/field/picture = 图片
characters/schema/field/level = 等级
characters/schema/field/health = 生命
characters/schema/field/attack = 攻击
characters/schema/field/defence = 防御
characters/schema/field/points = 行动点
characters/schema/field/exp = 击败经验
characters/schema/field/actions = 战斗动作
characters/schema/kind/action = 战斗动作
characters/schema/kind/action_desc = 战斗卡牌与指令;有公式就不需要代码
characters/schema/field/description = 描述
characters/schema/field/target = 目标
+8
View File
@@ -0,0 +1,8 @@
mod_characters_base_name = Engine nhân vật
mod_characters_base_desc = Engine nhân vật: anh hùng, đồng đội và kẻ địch với chỉ số chiến đấu cùng thẻ hành động, bảng hành động nhân vật và chân dung hội thoại.
characters/action/physics_attack/name = Đòn đánh cơ bản
characters/action/physics_attack/description = Tấn công kẻ địch bằng vũ khí, hệ số sát thương <g>1.0</g>
characters/action/defence/name = Phòng thủ
characters/action/defence/description = Bảo vệ mục tiêu với hệ số phòng thủ <g>1.0</g>
characters/action/stun/name = Choáng
characters/action/stun/description = Làm mục tiêu choáng trong 2 lượt
+8
View File
@@ -0,0 +1,8 @@
mod_characters_base_name = 角色引擎
mod_characters_base_desc = 角色引擎:拥有战斗属性与行动卡的英雄、同伴和敌人,角色行动面板,以及对话肖像。
characters/action/physics_attack/name = 普通攻击
characters/action/physics_attack/description = 用武器攻击敌人,伤害倍率 <g>1.0</g>
characters/action/defence/name = 防御
characters/action/defence/description = 以 <g>1.0</g> 的防御倍率保护目标
characters/action/stun/name = 眩晕
characters/action/stun/description = 使目标眩晕 2 回合
+1 -1
View File
@@ -3,7 +3,7 @@
"name": "Characters Engine",
"version": "1.0.0",
"author": "ct",
"description": "Engine characters subsystem: the character and action-card factories (entity kinds 'character' and 'action'), the avatar factory and the character panel UI. Replaces the former Core/Characters factories and Core/UI/CharacterPanel — the CharactersModInitializer publishes kernel contracts (ICharacterTemplateProvider, IActionTemplateProvider, IAvatarProvider) so core code resolves templates without referencing this assembly.",
"description": "Characters engine: heroes, companions and enemies with their battle attributes and action cards, the character actions panel and dialog portraits.",
"category": "engine, library",
"sources": [
"src/**/*.cs"
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 225 KiB

+173
View File
@@ -0,0 +1,173 @@
{
"Actions": [
{
"Id": "party.add",
"Name": "characters/schema/builtin/party_add",
"Description": "characters/schema/builtin/party_add_desc",
"Category": "characters",
"Params": [
{
"Key": "id",
"Type": "ref",
"Kind": "character",
"Required": true,
"Name": "characters/schema/field/character"
}
]
},
{
"Id": "character.send_notification",
"Name": "characters/schema/builtin/send_notification",
"Description": "characters/schema/builtin/send_notification_desc",
"Category": "characters",
"Params": [
{
"Key": "type",
"Type": "ref",
"Kind": "character",
"Required": true,
"Name": "characters/schema/field/character"
}
]
}
],
"Kinds": [
{
"Kind": "character",
"Name": "characters/schema/kind/character",
"Description": "characters/schema/kind/character_desc",
"Folder": "characters",
"NewId": "{mod}/new_character",
"Order": 11,
"Fields": [
{
"Key": "Name",
"Type": "locale",
"KeyPattern": "{mod}/character/{id}",
"Name": "characters/schema/field/name"
},
{
"Key": "Image",
"Type": "picture",
"Group": "characters",
"Name": "characters/schema/field/picture"
},
{
"Key": "Level",
"Type": "int",
"Default": "1",
"Name": "characters/schema/field/level"
},
{
"Key": "Health",
"Type": "int",
"Default": "10",
"Name": "characters/schema/field/health"
},
{
"Key": "Attack",
"Type": "int",
"Default": "2",
"Name": "characters/schema/field/attack"
},
{
"Key": "Defence",
"Type": "int",
"Name": "characters/schema/field/defence"
},
{
"Key": "Point",
"Type": "int",
"Default": "1",
"Name": "characters/schema/field/points"
},
{
"Key": "Exp",
"Type": "int",
"Name": "characters/schema/field/exp"
},
{
"Key": "Actions",
"Type": "ref_list",
"Kind": "action",
"Name": "characters/schema/field/actions"
},
{
"Key": "Loot",
"Type": "list",
"Name": "characters/schema/field/loot",
"Description": "characters/schema/field/loot_desc",
"Of": [
{
"Key": "ItemId",
"Type": "ref",
"Kind": "item",
"Required": true,
"Name": "characters/schema/field/loot_item"
},
{
"Key": "MinCount",
"Type": "int",
"Default": "1",
"Name": "characters/schema/field/loot_min"
},
{
"Key": "MaxCount",
"Type": "int",
"Default": "1",
"Name": "characters/schema/field/loot_max"
},
{
"Key": "Probability",
"Type": "int",
"Default": "100",
"Name": "characters/schema/field/loot_probability",
"Description": "characters/schema/field/loot_probability_desc"
}
]
}
]
},
{
"Kind": "action",
"Name": "characters/schema/kind/action",
"Description": "characters/schema/kind/action_desc",
"Folder": "characters/actions",
"NewId": "{mod}/new_action",
"Order": 12,
"Fields": [
{
"Key": "Name",
"Type": "locale",
"KeyPattern": "{mod}/action/{id}/name",
"Name": "characters/schema/field/name"
},
{
"Key": "Description",
"Type": "locale",
"KeyPattern": "{mod}/action/{id}/desc",
"Name": "characters/schema/field/description"
},
{
"Key": "Image",
"Type": "picture",
"Group": "characters",
"Name": "characters/schema/field/picture"
},
{
"Key": "Type",
"Type": "choice",
"Options": [
"ToEnemy",
"ToSelf",
"ToAlias",
"Passive",
"Active"
],
"Default": "ToEnemy",
"Name": "characters/schema/field/target"
}
]
}
]
}