규칙과 수식
메뉴별 아이템·퀘스트·능력 작성 순서는 게임 데이터에 있습니다. 이 페이지는 장면 행동의 조건·판정·효과 수식과 고급 데이터 형식을 설명합니다.
처음 만드는 판정
- 사용할 능력치를 게임 데이터에 정의합니다. 단순 d20 판정의 능력치는 수정치로 사용합니다.
- 장면과 행동에서 행동을 만들고 한 번 적용합니다.
- 행동을 다시 열어 수식 조합에서 사용할 값과 연산을 연결합니다.
- 주사위와 능력치를 더한 결과에 목표값을 지정하고 성공·실패 목적지를 정합니다.
- 저장한 뒤 검사와 미리보기에서 두 결과를 확인합니다.
예를 들어 d20 + 설득 수정치 ≥ 12는 설득 행동의 판정입니다. 열쇠를 가지고 있는지 확인하는 조건에는 주사위를 넣지 않습니다. 효과는 성공이나 행동 이후에 바뀔 값을 정하는 데 사용합니다.
카탈로그와 참조
아이템, 퀘스트, 플레이어 능력치와 초기 인벤토리는 카탈로그의 네이티브 폼에서 작성한다. 아이템/퀘스트/능력치 ID는 생성 뒤 고정된다. 이름·설명·수치는 ID를 보존한 채 바꿀 수 있다. 인벤토리 수량을 0으로 적용하면 해당 초기 소지품 항목을 제거한다. 음수 소지 수량과 음수 회복량은 허용하지 않는다.
장면 조건·효과·판정·수식 또는 캐릭터가 참조하는 카탈로그 항목의 삭제는 거부된다. 먼저 해당 참조를 제거해야 한다. 성공한 폼 변경은 하나의 실행 취소 단계로 기록되고 실패한 입력은 프로젝트를 변경하지 않는다. 게임 실행 중 얻은 아이템과 퀘스트 상태는 별도의 플레이 상태에 저장된다.
조건·수식 AST
Condition.expression, Effect.expression, Check.expression에 데이터 AST를 선택적으로 저장한다. 기존 조건 op, 효과 value, 판정 dice + attribute 형식도 유지된다. expression이 있으면 해당 기존 값 대신 사용한다. 판정 수식 결과는 기존 target과 비교한다. 효과 수식은 inventory, set, add, hp에서만 사용한다.
| 연산 | 인자 | 결과 |
|---|---|---|
int |
value 정수 |
숫자 |
ref |
ref 참조 |
숫자 |
dice |
count, sides |
숫자 |
add, sub |
숫자 인자 2개 | 숫자 |
eq, ne, lt, le, gt, ge |
숫자 인자 2개 | 참/거짓 |
and, or |
참/거짓 인자 2개 | 참/거짓 |
not |
참/거짓 인자 1개 | 참/거짓 |
하위 인자는 args 배열에 저장한다. 참조는 hp, maxHp, stat:<능력치 ID>, variable:<변수명>, inventory:<아이템 ID>를 지원한다. 능력치와 아이템 참조는 프로젝트에 존재해야 하며, 미설정 변수와 미보유 아이템의 값은 0이다. 정수 덧셈·뺄셈의 오버플로는 오류다. 범용 코드나 스크립트를 실행하지 않는다.
예: 2d6 + insight 판정
{
"expression": {
"op": "add",
"args": [
{ "op": "dice", "count": 2, "sides": 6 },
{ "op": "ref", "ref": "stat:insight" }
]
},
"target": 10
}
수식 하나의 최대 깊이는 24, 노드는 256, 총 주사위는 100개다. 각 주사위는 2~100,000면을 지원한다. 조건은 참/거짓을 반환하며 주사위를 포함할 수 없다. 따라서 선택지 표시를 반복해 검사해도 RNG나 게임 상태가 바뀌지 않는다. 무작위 분기는 판정 수식을 사용한다.
전체 AST는 단락 평가 전에 타입·크기를 검증한다. and/or 실행은 단락 평가한다. 게임 명령 내부의 판정과 효과는 저장된 RNG를 사용하므로 저장 복원 후 동일하게 재현된다. 후속 효과나 장면 전환이 실패하면 그 명령의 모든 상태 변화와 RNG 소비를 되돌린다. 동일 명령 ID를 다시 제출해도 주사위를 다시 굴리지 않는다.
현재 AST는 정수와 단일 플레이어 상태를 대상으로 한다. 문자열 연산, 임의 함수 호출, 곱셈·나눗셈, 사용자 코드 실행은 제공하지 않는다.