6.1 KiB
Schemas — 행동, 명령, 데이터 필드의 설명
Schemas는 라이브러리입니다. 어떤 모드든 자신의 시나리오 행동이 무엇을 받는지, DSL 명령이 어떤 모양인지, 데이터 종류마다 어떤 필드가 있는지를 데이터로 설명할 수 있게 해 줍니다. 도구는 이 설명으로 양식, 선택기, 검사를 만들므로, 작성자는 매개변수 이름을 외우는 대신 양식을 채우고, 실수는 게임을 실행하기 전에 잡힙니다.
이 모드에는 자체 창이 없습니다. 눈에 보이는 부분은 다른 도구가 보여 줍니다:
- Schema Tools — 명령 팔레트와 '데이터 에디터' 창;
- Validator — 보고서의 알 수 없거나 빠진 매개변수, 깨진 참조;
- 아이템·캐릭터 에디터 — 다른 모드가 아이템과 캐릭터에 더하는 필드.
설명에서 양식과 검사로
items_base/schemas/items_base.json 설명. 행동 코드 바로 옆에 둠
│
▼
스키마 카탈로그 (모든 모드, 로드 순서)
│
├──► 명령 팔레트의 양식 매개변수마다 필드 하나
├──► 시나리오 줄 action item.remove id=… count=…
└──► 검사기 팔레트에서도 검증기에서도 같은 판정
Items Engine은 자신의 행동 item.remove을 이렇게 설명합니다:
{
"Id": "item.remove",
"Name": "items/schema/remove",
"Description": "items/schema/remove_desc",
"Category": "items",
"Params": [
{ "Key": "id", "Type": "ref", "Kind": "item", "Required": true, "Name": "items/schema/field/item" },
{ "Key": "count", "Type": "int", "Default": "1", "Name": "items/schema/field/count" }
]
}
RPG Plus의 명령 팔레트는 이것을 양식으로 보여 줍니다: Item은 게임 아이템의 목록(유형 ref, 종류 item), Count는 1이 채워진 숫자입니다. 아이템을 고르기 전까지 검사기는 무엇이 빠졌는지 알려 줍니다:
Stats Engine의 stat.archetype에는 필수 매개변수가 없으므로 같은 빈 양식도 받아들여집니다:
불러온 모드가 설명한 모든 행동과 명령이 팔레트 목록에 카테고리별로 나타나고, 바닥글이 개수를 세어 줍니다:
스키마 파일
모드는 schemas/<mod>.json에 최대 세 개의 목록을 담습니다:
Actions— 시나리오 행동(action <id> key=value …): 그 매개변수;Commands—check나select같은 DSL 명령: 위치 값과 이름 있는 매개변수;Kinds— 데이터 종류(item,character,shop…): 그 엔티티의 필드, 새 파일의 폴더, 새 id의 패턴.
이름과 설명은 모드 자체 로컬라이즈의 번역 키이므로, 양식은 게임의 모든 언어로 말합니다.
필드 유형: text, locale(모든 언어의 텍스트), int, number, bool, choice(Options와 함께), ref와 ref_list(한 종류의 id), who, picture, formula, condition, scene, flag, label, list(자체 필드를 가진 객체의 목록), values, map, json. 알 수 없는 유형은 텍스트로 편집됩니다.
여러 모드가 한 종류를 설명할 때
파일은 모드 로드 순서대로 읽힙니다:
- 행동이나 명령이 다시 설명되면 나중 모드가 통째로 대체합니다;
- 종류는 필드별로 합쳐집니다: 같은 키의 필드는 대체되고, 새 필드는 더해집니다.
그래서 Equipment는 Items Engine의 item에 자신의 필드를, 그 파일을 건드리지 않고 더합니다:
{ "Kind": "item",
"Fields": [
{ "Key": "Equip", "Type": "text", "Name": "equipment/schema/field/equip" },
{ "Key": "Archetypes", "Type": "ref_list", "Kind": "archetype", "Name": "equipment/schema/field/archetypes" }
] }
모든 필드는 어느 모드가 설명했는지 기억합니다(팔레트의 "모드 items_base가 설명함"). 깨진 스키마 파일은 보고되고 건너뛰며, 나머지 파일은 계속 효력을 가집니다.
규칙은 각 모드가 자신의 행동, 명령, 종류를 그 코드 옆에 설명하는 것입니다. 다른 모드의 행동을 고치기 위해 설명할 수도 있고, 그때는 로드 순서가 이깁니다.
검사기가 보고하는 것
- 매개변수 필요 — 필수 매개변수가 없음(오류);
- 알 수 없는 매개변수 — 줄이 설명에 없는 매개변수를 이름으로 지목함(경고);
- 잘못된 값 — 정수가 아님, 숫자가 아님, 선택지에 없음(오류. 예/아니오와 선택지는 경고);
- 알 수 없는 참조 — id가 불러온 어느 모드도 정의하지 않는 아이템, 캐릭터 따위의 엔티티를 가리킴(오류).
검증기는 같은 내용을 SCHEMA_MISSING_PARAM, SCHEMA_UNKNOWN_PARAM, SCHEMA_BAD_VALUE, SCHEMA_UNKNOWN_REF로 보고합니다. 검사기는 설명에 쓰인 것만 압니다: 받아들인 줄이라도 게임 안에서는 뜻밖의 일을 할 수 있습니다.
문제가 생겼을 때
- 행동이 팔레트에 없습니다. 불러온 모드 중 아무도 설명하지 않았습니다. 그래도 행동은 시나리오 안에서 작동합니다.
- 필드가 평범한 텍스트 상자로 보입니다. 유형을 알 수 없거나 필드 설명이 아예 없습니다(이때 데이터 에디터는 그것을 다른 필드 아래 JSON으로 보여 줍니다).
- 양식이 당신의 스키마를 무시합니다. 로드 순서에서 뒤인 모드가 같은 행동을 설명해 당신 것을 대체했습니다.


