릴 오브 포춘 · 슬롯 머신 턴제 덱빌딩 로그라이크
릴 오브 포춘 전투 시스템 기획서
게임 개요
① 개요01-1게임 소개
| 항목 | 내용 |
|---|---|
| 제목 | 릴 오브 포춘(Reel of Fortune) |
| 장르 | 로그라이크 + 덱빌딩 |
| 진행 방식 | 1대 1 PvE 턴제 전투. 슬롯 머신을 돌려 행동 · 배율 · 부가효과를 무작위로 정한다 |
| 핵심 경험 | "내가 만든 돌림판 안에서 룰렛을 돌리는 재미" — 확률에 따라 결정되는 행동 방식을 가진 채로, 그 확률을 비트는 플레이를 통해 어려움을 헤쳐나가는 재미 |
| 타겟 | "쉽게 즐기는 슬레이 더 스파이어"를 목표로, 운에 맡기는 재미와 단순한 조작, 가벼운 덱빌딩을 좋아하는 플레이어 |
| 플랫폼 · 규모 | PC(빌드 완성) · 4인 팀(기획 2 · 프로그래머 1 · PM 겸 아트 1) · 개발 3주(순수 기획 1주 반) |
01-2용어
일반적인 뜻과 다르게 쓰거나 뜻이 갈릴 수 있는 말
| 용어 | 뜻 |
|---|---|
| 퍽 | 열의 칸에 끼우는 조각. 행동 퍽 · 배율 퍽 · 부가효과 퍽 |
| 열 | 슬롯 머신의 각 세로줄(행동 · 배율 · 부가효과로 나뉨) |
| 행 | 슬롯 머신의 각 가로줄(행동 1회 시의 퍽 한 묶음) |
| 칸 | 슬롯 머신에서 퍽 하나가 차지하는 자리 |
| 결과 칸 | 멈췄을 때 결과가 되는 칸 |
| 효과 | 퍽 · 아이템 · 적 의도 · 인카운터 선택지가 실행하는 동작과 그 양. 패시브 아이템만 정해진 발동 시점에 조건을 검사한 뒤 실행하고, 나머지는 쓰는 순간 바로 실행한다. |
| 의도 | 적이 다음에 할 행동 |
| 랭크 | 퍽 · 아이템 · 적 스탯 · 처치 골드 · 상점 정가가 함께 쓰는 밸런스 척도. F~S까지 7단계로 구성되어 있으며, 랭크마다 기준값이 정해져 있다. |
| 등급 | 같은 종류의 퍽을 나누기 위한 표시법으로, 하급 · 중급 · 상급 단계로 분류. 랭크는 퍽마다 따로 정해진다(하급 F 또는 E · 중급 C 또는 B · 상급 A 또는 S). |
| 토큰 | 액티브 아이템을 발동하기 위해 필요한 자원. 턴마다 1씩 충전된다. |
| 구간 | 전체 맵을 10층 단위로 나눈 단위. 구간마다 등장하는 적의 범위가 정해진다. |
레퍼런스
② 레퍼런스02-1슬레이 더 스파이어
슬레이 더 스파이어
| 항목 | 내용 |
|---|---|
| 장르 | 덱빌딩 로그라이크 |
| 사이클 | 지도에서 갈림길 중 하나를 골라 전투, 이벤트, 상점 등을 들르며 탑을 오른다. |
| 전투 | 턴제로 이루어져 있으며, 매 턴 주어지는 에너지를 이용하여 적 의도에 대응하며 카드를 사용한다. |
| 성장 | 전투 보상으로 카드를 더하고, 상점 · 이벤트에서 카드를 빼며, 휴식처 · 이벤트에서 카드를 강화한다. 추가로 유물을 통해 다양한 패시브 효과를 얻을 수 있다. |
02-2레퍼런스 참고 내역
| 구분 | 슬레이 더 스파이어 | 릴 오브 포춘 |
|---|---|---|
| 가져온 것 | 턴제 전투 | 적과 번갈아 행동한다. |
| 가져온 것 | 적 의도 예고 | 적의 의도에 맞는 대응을 할 수 있도록 적의 다음 행동을 미리 보여 준다. |
| 변경한 것 | 덱빌딩 요소 | 덱 대신 슬롯 머신 열의 퍽을 더하거나 바꾼다. 열에 무엇을 넣을지(확률 분포)를 설계한다. |
| 버린 것 | 에너지 · 손패 운영 | 난이도를 낮추고 전투의 템포를 높인다. |
02-3슬롯 머신(실물)
슬롯 머신(실물)
| 가져온 것 | 적용 방식 |
|---|---|
| 작동 방식 | 열마다 따로 돌다가 무작위 문양이 가운데에 멈추는 작동 방식을 그대로 가져왔다. |
| 잭팟 · 당첨 | 같은 그림이 한 줄로 늘어서는 당첨은 아이템 효과로 따로 넣었다(일정 확률로 큰 이득을 주는 잭팟). |
02-4다키스트 던전
| 구분 | 다키스트 던전 | 릴 오브 포춘 |
|---|---|---|
| 가져온 것 | 죽음의 문턱 | 체력 0에서 죽음을 확률로 유예한다. |
| 변경한 것 | 지속 상태 | 체력이 0이 되는 순간 한 번 확률 판정하고, 성공하면 최대 체력의 30%로 부활한다. 확률은 전투마다 처음으로 돌아간다. |
콘텐츠
③ 콘텐츠03-1콘텐츠 플로우
그림 · 콘텐츠 플로우
03-2전투
전투의 종류
| 종류 | 나오는 적 | 보상 |
|---|---|---|
| 일반 적 | 그 구간의 적 | 골드 + 확률 드롭. 노드가 골드형이면 골드 2배, 퍽형이면 퍽 1개 확정, 아이템형이면 아이템 1개 확정 |
| 엘리트 | 다음 구간의 적 | 골드 + 퍽 1개와 아이템 1개 확정 드롭 |
| 보스 | 10 · 30 · 50층(1 · 3 · 5구간의 마지막 층)의 정해진 보스 | 엘리트와 같은 보상 + 특수 보상(「보스」). 50층 최종 보스는 보상 대신 게임 클리어 |
전투의 경험
| 경험 | 순간 | 느끼게 하려는 것 |
|---|---|---|
| 의도를 읽고 대비한다 | 적의 예고 | 「정답」이 보이는 상태에서 행동한다 — 아이템을 사용할 타이밍을 정할 수 있고, 무엇이 당첨이고 무엇이 꽝인지 인지한 상태로 돌리게 되어 긴장감을 형성한다. |
| 단순한 조작 | 입력 대기(진행 버튼 한 번) | 아이템 사용 타이밍을 제외하고는 부담 없이 슬롯 머신을 돌리는 데만 집중할 수 있다. |
| 돌리면서 느끼는 긴장감 | 돌리기 | 매 열이 한 축을 담당하고 있어 하나가 맞아도 나머지가 잘 맞춰지는 걸 기다려야 하기 때문에 긴장감을 유지할 수 있다. |
| 확률을 마음대로 조정하는 정복감 | 덱빌딩 | 자신이 마음에 드는 방식으로 덱 방향성을 정할 수 있다. 고점과 저점이 확실한 덱, 저점을 보장하는 덱, 물리/마법 공격을 메인으로 한 덱 등 어느 칸에 어떤 퍽을 배치하느냐에 따라 덱의 정체성이 바뀌며, 원하는 대로 덱이 완성되었을 때 정복감을 느낄 수 있다. |
03-3보스
일반 전투와 다른 점
| 항목 | 기획 의도 |
|---|---|
| 보스 전용 의도(예고) | 일반 적과는 다른 고유한 의도로 기존 리소스를 최대한 재사용하면서도 다른 전투의 경험을 만들기 위함 |
| 높은 기본 스탯 | 소위 말하는 당첨이 되어도 한 방에 깨는 경우를 방지함으로 보스의 전투 경험을 온전히 전달하기 위함 |
| 특수 보상 | 슬롯 머신의 추가 기능을 해금시켜줌으로서 단계적 학습과 폭발적 성장을 동시에 이루게 하여 플레이 시의 리듬감을 유지하기 위함 |
| 최대 체력 증가 | 다른 기본 스탯과 다르게 아이템으로 상승할 여지가 거의 없고, 적의 스탯은 구간마다 계속 오르므로 플레이어에게 강한 적들을 상대할 기반을 제공하기 위함 |
보스 종류
| 보스 | 체력(기준값) | 공격력(기준값) | 방어력(기준값) | 보스 전용 의도(첫 턴) | 특수 보상 |
|---|---|---|---|---|---|
| 10층 보스 · 치킨 게이머 | 150(D) | 15(D) | 8(F) | 치킨 게임 — 전투가 끝날 때까지 적과 플레이어 모두 회복 · 방어가 불가능해진다. | 부가효과 열 해금(2 → 3열) |
| 30층 보스 · 광기어린 삐에로 | 650(B) | 34(B) | 62(B) | 뒤죽박죽 — 전투 동안 플레이어 스탯 4종(물리 공격력 · 마법 공격력 · 방어력 · 회복량)의 기본값을 무작위 값으로 바꾸고, 보유 퍽을 같은 퍽의 다른 등급으로 바꿔 열 안에서 섞는다 | 2라인(2줄로 확장 · 열당 7칸 · 새 퍽 6개 제공) |
| 50층 보스 · 균형의 수호자 | 650(B) | 78(S) | 145(S) | 규칙역행 — 전투 동안 적이 한 번에 받는 피해가 50을 넘지 않는다 | X (승리 시 게임 클리어) |
전체 설계
④ 전체 설계04-1전체 구조
그림 · 게임 흐름과 전체 데이터 구조도
04-2설계 원칙
설계 원칙과 근거(「등반」 = 층을 하나씩 오르는 한 판의 진행 · 「운의 관리」 = 운을 없애지 않고, 운에 맡길지 대가를 치르고 확실한 쪽을 고를지 플레이어가 정하게 하는 일)
| 번호 | 원칙 | 근거 |
|---|---|---|
| P1 | 한 턴은 한 번의 돌리기로 정해진다. 개입은 누르기 전에 건다(액티브 사용 · 리롤 걸기). 결과를 본 뒤에 할 수 있는 것은 걸어 둔 리롤로 열을 다시 돌리는 것뿐이고, 조작을 늘리는 요소는 두지 않는다 | 타겟(01) · 돌리면서 느끼는 긴장감(03 「전투」) |
| P2 | 본 것은 그대로 일어나고, 일어난 것은 보인다. 적의 예고 · 발동 시점 · 피해 적용 순서는 도중에 바뀌지 않는다. 멈춘 열 결과는 걸어 둔 리롤로 다시 돌리거나 결과 퍽 등급을 올리는 효과로만 바뀌고, 적의 의도는 플레이어가 액티브로 바꿀 때만 바뀐다. 체력 변화 · 막힌 효과 · 인카운터 결과는 화면에 남긴다 | 돌리면서 느끼는 긴장감(03 「전투」) |
| P3 | 플레이어가 먼저 움직이고 적은 예고한 대로 받아친다. 이번 돌리기로 쓰러뜨리면 반격이 없고, 못 쓰러뜨리면 예고된 공격을 그대로 받는다. 적의 방어만 플레이어보다 먼저 일어난다 | 돌리면서 느끼는 긴장감(03 「전투」) · 전투(03) |
| P4 | 좋은 결과는 여러 열이 한꺼번에 좋은 칸에 멈추기 어렵다는 데서 나온다. 칸의 확률은 균등하고 퍽마다 가중치가 없어, 확률을 움직이는 것은 칸에 무엇을 넣는가와 아이템 효과(리롤 · 최고 계보로 변환 등)뿐이다. 잭팟은 열 추첨과 따로 판정한다 | 돌리면서 느끼는 긴장감(03 「전투」) · 확률을 마음대로 조정하는 정복감(03 「전투」) |
| P5 | 성장은 퍽 구성 · 슬롯 머신 크기 · 아이템 · 보스 처치 때 오르는 최대 체력과 일부 인카운터의 기본 스탯 변화로 쌓인다. 레벨은 없다. 슬롯 머신은 보스 보상으로만 두 번 커진다(부가효과 열 해금 · 2라인) | 확률을 마음대로 조정하는 정복감(03 「전투」) · 등반 · 보스(03) |
| P7 | 개입은 운을 대체하지 않고 조절만 한다. 액티브 아이템과 죽음의 문턱이 최악의 운만 깎고, 스펙이 모자라면 정상적으로 진다 | 운의 관리 |
| P9 | 같은 적도 만날 때마다 조금 다르다. 랭크는 기준값만 정하고, 적 스탯 · 처치 골드(기준값의 80%) · 상점 정가(품목 배율 적용)는 그 값에서 ±15%를 굴린다 | 등반 · 전투(03) |
| P12 | 효과는 한 문법으로 적는다. 퍽 · 아이템 · 적 의도 · 인카운터 선택지가 모두 동작 시트(effect) 한 장을 가리키고 양은 자기 행에 적는다. 효과 데이터 없이 코드가 처리하는 패시브 아이템과 보스 전용 의도는 예외로 동작 시트를 가리키지 않는다. 새 콘텐츠는 행을 더하는 일이고, 발동 시점은 정해진 목록으로만 늘린다 | 플랫폼 · 규모(01) |
04-3전투 화면
그림 · 입력 대기 화면
그림 · 리롤 선택 화면
그림 · 다음 전투 선택 화면
입력 대기 화면
| 번호 | 요소 | 보여 주는 것 |
|---|---|---|
| 1 | 층 표시 | 현재 층 |
| 2 | 설정 | 연출 속도, 음량 설정 및 게임 종료 버튼 표시 |
| 3 | 플레이어 체력 | 현재 / 최대 체력으로 표시 |
| 4 | 적 의도 | 적이 이번 턴에 할 행동과 수치 |
| 5 | 적 체력 | 현재 / 최대 체력으로 표시 |
| 6 | 보유 퍽 패널 | 현재 퍽 배치 확인 |
| 7 | 골드 | 소지한 골드 |
| 8 | 스탯 4종 | 물리 공격력 · 마법 공격력 · 방어력 · 회복량(장착 몫 포함) |
| 9 | 진행 버튼 | 누르면 돌리기 시작. 인카운터 · 리롤 선택 · 다음 전투 선택 · 보상 팝업에서는 확정 · 닫기 |
| 10 | 액티브 사용 버튼 | 장착한 액티브 아이템 발동 |
| 11 | 충전 게이지 | 찬 토큰 / 상한 토큰 |
| 12 | 액티브 아이템 칸 | 장착한 액티브 아이템 1개 |
| 13 | 패시브 칸 | 장착한 패시브 아이템 2개 |
리롤 선택 화면
| 번호 | 요소 | 보여 주는 것 |
|---|---|---|
| 14 | 슬롯 머신 | 무작위로 멈춘 결과 |
| 15 | 남은 리롤 | (리롤을 걸었을 때만 표시) 남은 리롤 횟수 |
| 16 | 리롤 버튼 | 행동 · 배율 · 부가효과 열마다 하나를 지정 |
다음 전투 선택 화면
| 번호 | 요소 | 보여 주는 것 |
|---|---|---|
| 17 | 다음 전투 선택 | 갈 수 있는 길을 표시 |
04-4한 턴의 순서
그림 · 한 턴의 순서
04-5전투 데이터 구조
그림 · 데이터 관계도
04-6효과 문법
퍽 · 액티브 · 패시브 · 적 의도 · 인카운터 선택지의 행(사용처)은 동작 시트(effect)의 한 행(동작)을 가리키고, 양은 자기 행에 적는다. 동작이 수치형이면 수치 항목을 바꾸고, 기능형이면 코드에 정해 둔 동작을 실행한다
그림 · 사용처 · 동작 · 수치 항목 · 값 목록의 참조 관계
04-7전투 데이터와 메타 데이터
그림 · 전투 데이터와 메타 데이터의 구조도
전투 시작
⑤ 전투 시스템05-1전투 시작 순서
| 순서 | 하는 일 | 기획 의도 |
|---|---|---|
| 1 | 받은 적 행으로 적 스프라이트를 걸고, 보스면 배경 · BGM을 바꾼다(「적 데이터」). | |
| 2 | 상태를 초기화한다 — 장착 · 상시 효과(패시브 always)를 다시 계산하고 적 체력을 채운다. | 초기화하지 않았을 때 중복 계산 등의 오류를 방지하기 위함 |
| 3 | 전투 시작 시 발동되는 battle_start 패시브를 발동한다(「패시브 발동」) | 항상 적용되는 패시브와 전투 시에만 적용되는 패시브가 구분되어 있다. |
| 4 | 적의 첫 의도를 예고한다. | 데이터를 모두 읽은 뒤 의도 세트(enemy_ai)로 첫 의도를 정한다. 보스의 첫 의도는 보스 전용 의도다(PART 06 「의도 표시」) |
| 5 | 턴 시작 상태로 이동한다. | 플레이어 입력 전에 모든 준비가 되어 있어야 하므로 전투 시작을 한 단계로 구분함. |
05-2데이터 처리
전투마다 새로 정하는 값은 초기화하고, 그 밖의 값은 메타에서 받은 그대로 쓴다.
초기화 항목
| 항목 | 전투 시작 때 값 |
|---|---|
| 죽음의 문턱 기준 확률 | 기본값(PART 10 죽음의 문턱) |
| 지난 턴 상태(리롤 · 결과 고정 등) | 비움 |
전투 끝까지 잠긴 패시브(lock_until_battle_end) | 잠금 해제 |
| 액티브 골드 비용 | 기본값 |
| 전투 동안만 붙는 효과(강화 · 약화 단계 · 받는 피해 감소 · 적 공격 무효 · 체력 상한 배율 · 차단류 · 방어값) | 모두 초기값 |
| 전투 동안 쌓이는 수치(잭팟 확률 등) | 0 |
| 적 체력 | 최대 |
| 턴 | 1턴 |
메타에서 받는 항목
| 항목 | 가져오는 곳 |
|---|---|
| 현재 · 최대 체력 | 세이브 · 새 게임은 player.max_hp |
| 슬롯 머신 구성 · 해금 상태(부가효과 열 · 2라인) | 세이브 · 새 게임은 player.action_N · multiplier_N · additional_N |
| 장착 아이템 | 세이브의 아이템 번호 → item_active · item_passive 행 · 새 게임은 player.active_item_id · passive_item_N |
| 스탯 4종 | 세이브의 기본 스탯 + 장착 몫(PART 09 「행동 계산」) · 새 게임은 player 네 칸 |
| 골드 | 세이브 · 새 게임은 player.gold |
| 패시브 충전 · 소모 상태 | 세이브 |
| 토큰 | 세이브 |
| 층 · 노드 · 적 정보 | 받은 적 행 → enemy_ai · grade_base · enemy_roll · 노드 종류 · 보스 차수 · 마지막 보스 여부 |
05-3패시브 발동
그림 · 패시브 효과 발동 방식
그림 · 입력 대기 화면
| 요소 | 규칙 |
|---|---|
| 13 패시브 칸 | 2칸 · 아이콘만. 빈 칸은 그림을 끈다. 마우스를 올리면 설명 패널. 같은 패시브 두 개를 장착할 수 있다. 충전 진행 · 전투 끝까지 잠김 · 발동 순간은 칸에 표시하지 않는다 |
| 충전 | charge_actions가 있으면 턴마다 플레이어 행동(두 줄 · "한 번 더")이 모두 끝나면 +1. 전투를 넘어 이어지고, 전투 시작 때는 잠금만 푼다. token_charged 시점은 충전이 막 찬 순간 activate_when_charged인 패시브만 쓴다 |
| 코드 고정 패시브 | 효과 칸이 하나도 없는 패시브는 허용 목록에 있는 것만 받고, timing 칸과 관계없이 코드가 처리한다 |
| 패시브 | timing에 발동. charge_actions만큼 턴이 쌓여야 발동(턴마다 플레이어 행동이 모두 끝나면 +1 · 0이면 충전 없음) · activate_when_charged · consume_on_use(발동한 뒤 사라짐) · lock_until_battle_end(한 전투에 한 번만 발동) |
| 조건 | condition_type(action_is · hp_below · hp_above · battle_won) + condition_value 두 칸. 비면 항상. battle_won은 battle_end에서 이겼을 때만 발동하고 값 칸을 비운다 |
상시(always) | 장착 · 해제 · 복원 · 전투 시작 · 전투 끝 · 플레이어 수치 변화 때 다시 계산. 전투 밖 상점 · 보상에도 적용 |
새 시점은 값 목록 timing 끝에만 추가한다. 번호는 유지하고 삭제된 0 instant는 비운다 | |
발동 시점별 timing 키
| 시점 · 조건 | timing 키 |
|---|---|
| 상시 | always 0 |
| 전투 시작 | battle_start 1 |
| 턴 시작 | turn_start 2 |
| 행동 적용 직전 / 직후(행마다 적용) | before_action 3 · after_action 4 |
| 피해 입힌 직후(타격마다 적용) / 피해 입은 직후 | after_hit 5 · after_hurt 6 |
| 방어로 피해를 경감한 직후 | after_block 7 |
| 플레이어 회복 시 / 적 회복 시 | player_heal 8 · enemy_heal 9 |
패시브가 충전된(charge_actions) 순간 | token_charged 10 |
| 죽음의 문턱(PART 10) 판정 실패 시 | death_threshold 11 |
| 전투 종료(승리 때만 · 패배면 무시) | battle_end 12 |
05-4시작 상태
player.csv의 용도와 역할
player.csv 칸(시작 상태 설정 · 키 칸 없음)
| 칸 | 값 형식 | 설명 | 범위 |
|---|---|---|---|
max_hp | int | 시작 최대 체력 | 1 이상 |
physical_attack | int | 시작 물리 공격력 | 0 이상 |
magical_attack | int | 시작 마법 공격력 | 0 이상 |
defence | int | 시작 방어력 | 0 이상 |
heal_amount | int | 시작 회복량 | 0 이상 |
gold | int | 시작 골드 | 0 이상 |
multiplier_N | ref:puck | 배율 열의 기본 퍽 5칸 | N = 1~5 · 필수 · multiplier만 |
additional_N | ref:puck | 부가효과 열의 기본 퍽 5칸 | N = 1~5 · 필수 · additional_effect만 |
action_N | ref:puck | 행동 열의 기본 퍽 5칸 | N = 1~5 · 필수 · puck_type 행동 4종만 |
active_item_id | ref:item_active | 기본 액티브 아이템 | 빈 값 = 없음 |
passive_item_N | ref:item_passive | 기본 패시브 아이템 | N = 1~2 · 빈 값 = 없음 · 중복 거부 |
05-5적 데이터
enemy.csv의 용도와 역할
| 구분 | 내용 |
|---|---|
| 용도 | 적 한 종류를 한 행으로 정리한다. 이름 · 일반/보스 구분 · 체력 · 공격력 · 방어력 · 위험 랭크 · 의도 세트 · 연출(외형 · 공격 효과음 · 공격 애니메이션 · 보스전 배경 · BGM)을 담는다. |
| 적 생성 | 전투 시작 전 풀에 등록된 적 ID를 불러와 적을 생성한다. |
| 수치 | 적 스탯을 만들 때 hp_grade · attack_grade · defense_grade가 가리키는 기준값에서 ±stat_variance%(지금 15%)를 고르게 굴린다(소수 그대로 · 화면에는 반올림한 정수). 동일한 적이라도 어느 정도 다른 전투 경험을 만들기 위함이다. 체력은 1, 공격력 · 방어력은 0 밑으로 내려가지 않는다. |
| 보스용 의도 | 컬럼 중boss_intent_id은 첫 턴의 보스 전용 의도를 가져온다(PART 06 「의도 표시」). |
enemy.csv 칸
| 칸 | 값 형식 | 설명 | 범위 |
|---|---|---|---|
enemy_id (키) | int | 적의 고유 번호 | 1 이상 |
name | string | 적의 이름 | 1~14자 |
enemy_type | enum:enemy_type | 일반 · 보스 구분. 엘리트 값은 없다 | normal · boss |
hp_grade | enum:rarity | 체력 랭크. 이 랭크의 grade_base.stat_hp를 기준값으로 쓴다 | f ~ s |
attack_grade | enum:rarity | 공격력 랭크. 이 랭크의 stat_attack을 기준값으로 쓴다 | f ~ s |
defense_grade | enum:rarity | 방어력 랭크. 이 랭크의 stat_defense를 기준값으로 쓴다 | f ~ s |
danger_grade | enum:rarity | 위험 랭크. 처치 골드의 기준값(stat_gold_reward)과 드롭 랭크를 정한다 | f ~ s |
set_id | ref:enemy_ai | 이 적이 쓰는 의도 세트. 여러 적이 한 세트를 공유할 수 있다 | 필수 |
boss_intent_id | ref:intent | 보스가 첫 턴에 무조건 쓰는 보스 전용 의도 | boss면 필수 · 그 외 빈 값 |
visual | path | 외형 스프라이트. 임포터가 그림으로 풀어 적 데이터에 연결한다 | Assets 기준 상대경로 |
attack_sound | path | 공격 효과음 파일 | 빈 값 불허 · 파일이 없으면 거부 |
attack_anim | enum:attack_anim | 공격 애니메이션 종류 | slash · arrow · magic · punch · chomp · scrape |
stage_background | path | 이 보스와 싸우는 동안 쓸 배경 | boss만 채움 · 그 외 빈 값 |
stage_bgm | path | 이 보스와 싸우는 동안 쓸 BGM | boss만 채움 · 그 외 빈 값 |
enemy.csv 예시 행
| enemy_id | name | enemy_type | hp_grade | attack_grade | defense_grade | danger_grade | set_id | boss_intent_id |
|---|---|---|---|---|---|---|---|---|
| 104 | 고블린 | normal | f | e | e | e | 104 | |
| 201 | 정예 고블린 | normal | e | d | f | d | 201 | |
| 9901 | 치킨 게이머 | boss | d | d | f | e | 9901 | 11 |
05-6패시브 데이터
item_passive.csv 칸
| 칸 | 값 형식 | 설명 | 범위 |
|---|---|---|---|
item_id (키) | int | 아이템 번호 | 비거나 겹치면 거부(데이터는 1부터) |
name | string | 아이템 이름 | 1~14자 |
desc | string | 툴팁 설명문 | 0~130자 |
rarity | enum:rarity | 아이템 랭크 | f ~ s |
icon | path | 목록과 팝업 그림(경로#조각 이름) | Assets 기준 상대경로 |
charge_actions | int | 발동까지 필요한 턴 수(턴마다 플레이어 행동이 모두 끝나면 +1 · 발동하면 0으로) | 0 이상 · 0이면 충전 없음 |
activate_when_charged | bool | 충전이 찬 순간(token_charged) 저절로 발동하는가 | 필수(true · false) |
consume_on_use | bool | 발동한 뒤 사라지는가 | 필수(true · false) |
lock_until_battle_end | bool | 한 전투에 한 번만 발동하는가 | 필수(true · false) |
timing | enum:timing | 언제 발동하는가. 이 아이템의 효과 전부가 이 시점 | 필수 · 13값 · instant 불허 |
condition_type | enum:condition_type | 발동 조건의 종류. 비면 항상 | action_is · hp_below · hp_above · battle_won(timing battle_end에서만) · 빈 값 |
condition_value | int | 조건 값. action_is면 puck_type 행동 4종의 번호, hp_*면 체력 % | condition_type이 있을 때 필수(battle_won은 빈 값) · action_is 0~3 · hp_* 1~100 |
effect_N | ref:effect | 실행할 동작 | N = 1~3 · 효과 0건은 허용 목록에 있는 행만 |
value_N | float | 그 동작의 N번째 인자 | item_active.value_N과 같음 |
item_passive.csv 예시 행(설명 · 그림 · 둘째 이후 효과 칸 뺌)
| item_id | name | rarity | charge_actions | activate_when_charged | consume_on_use | lock_until_battle_end | timing | condition_type | condition_value | effect_1 | value_1 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 16 | 용사 보험 증서 | a | 0 | false | true | false | death_threshold | 43 | 50 | ||
| 22 | 치유의 손길 | d | 0 | false | false | false | always | hp_below | 50 | 46 | 30 |
| 49 | 불멸자의 가호 | s | 0 | false | false | true | death_threshold | 58 | 1 |
패시브 아이템 「근력의 장갑」의 토큰 충전
item_passive
28 근력의 장갑
timingafter_actioncondition_typeaction_iscondition_value0effect_147value_11
행동을 적용한 직후, 그 행동이 물리 공격(0)이면 47번 동작(액티브 토큰 · 1회)을 양 1로 실행한다
effect
47 액티브 토큰 · 1회
behaviornumericresource33counts1
33번 수치 항목(액티브 토큰 더하기)을 바꾼다. 충전형이라 counts 1은 턴당 1회
결과물리 공격 행동을 한 턴에는 기본 충전 1(돌리기를 한 턴)에 더해 토큰이 1 더 찬다(한 턴에 한 번)
입력 대기
⑤ 전투 시스템06-1의도 표시
그림 · 입력 대기 화면의 적 의도
| 요소 | 규칙 |
|---|---|
| 표시 형식 | 의도 이름 + 수치(반올림). 수치는 동작이 체력 · 방어 · 회복이고 0보다 클 때만 추가된다. 적 스탯이 바뀌면 다시 계산한다. |
| 표시 구간 | 턴 종료 때 다음 의도 표시 → 적이 행동할 때까지 유지 → 적 행동 직후 비움 → 턴 종료 때 새 의도 표시 순으로 적용한다. |
의도
| 항목 | 규칙 |
|---|---|
| 의도 | 적이 다음 턴에 할 일. 의도 한 행이 동작(effect_N) 1~4개와 값(value_N)을 갖고, 수행할 때 차례대로 실행한다. |
| 고유 능력 | 별도 특수 능력 시스템 없이 의도로 표현한다. 보스의 고유 능력도 보스 전용 의도다. |
분류(kind) | 의도 분류용 컬럼이며, 이 값으로 의도를 다룬다. '강한 공격'과 '일반 공격' 등 효과의 종류가 똑같은 다른 의도들을 이 컬럼으로 분류한다. |
그림 · 적 의도가 정해지고 예고 · 수행되는 차례
intent.csv 칸
| 칸 | 값 형식 | 설명 | 범위 |
|---|---|---|---|
intent_id (키) | int | 의도 번호 | 1 이상 |
name | string | 예고에 뜨는 이름 | 1~10자 |
kind | enum:intent_kind | 의도 분류(위 「분류」) | 13종 중 하나 |
scope | enum:intent_scope | 누가 쓰는 의도인가 | normal · boss |
visual | enum:intent_visual | 적이 의도대로 행동할 때의 연출 묶음 | 필수 · enemy_buff · enemy_debuff · player_debuff · none · enemy_and_player_debuff |
effect_N | ref:effect | 실행할 동작. N은 실행 순서 | N = 1~4 · 앞에서부터 · 보스 전용 의도는 효과 0건 허용 |
value_N | float | N번째 동작의 값 | 실수형 · 안 쓰면 빈 값 |
intent.csv 예시 행(둘째 이후 효과 칸 뺌)
| intent_id | name | kind | scope | visual | effect_1 | value_1 |
|---|---|---|---|---|---|---|
| 1 | 공격 | attack | normal | none | 62 | 100 |
| 6 | 약화 | attack_weaken | normal | player_debuff | 67 | 1 |
| 11 | 치킨 게임 | boss_chicken_game | boss | enemy_and_player_debuff |
의도 목록(intent.csv 10종)
| 의도 | 지속 | 하는 일 |
|---|---|---|
| 공격 | 즉시 | 공격력의 (수치)% 만큼 피해를 입힌다. |
| 방어 | 그 턴 | 플레이어가 행동하기 전에 방어력의 (수치)%만큼 방어값을 올린다. |
| 회복 | 즉시 | (수치)만큼 회복한다. |
| 공격 효율 증가 | 전투 동안 | 적 물리 공격 강화 단계 +1(단계 1 · 2 · 3 = 20 · 40 · 50%) |
| 방어 효율 증가 | 전투 동안 | 적 방어 강화 단계 +1(단계 1 · 2 · 3 = 20 · 40 · 50%) |
| 약화 | 전투 동안 | 플레이어 물리 공격 약화 단계 +1 |
| 회복 금지 | 전투 끝까지 | 플레이어의 회복 금지 |
| 부가효과 무효 | 그 턴 | 발동한 턴에 플레이어의 부가효과 퍽을 계산하지 않는다. |
| 퍽 약화 | 전투 동안 | 무작위 플레이어 퍽 하나의 등급을 1 내린다. 만약 해당 퍽이 이미 최하 등급이면 다시 고른다. |
| 퍽 변화 | 전투 동안 | 무작위 플레이어 퍽 하나를 같은 종류의 다른 퍽으로 바꾼다. |
적 AI
| 항목 | 규칙 |
|---|---|
| AI 세트 | 적마다 AI 세트(enemy_ai) 하나를 쓴다(enemy.set_id). 세트에는 쓸 의도 최대 6개와 의도별 가중치가 있어, 같은 의도 세트를 가진 적이라도 자주 하는 행동이 다르다. |
| 의도 고르기 | 턴 종료 때 세트의 의도 중 하나를 추첨해 다음 턴 의도로 정한다. 해당 턴에 의미가 없는 행동은 후보에서 제외한다. 예) 체력이 가득 찼을 때에는 회복하지 않음 |
| 체력이 낮을 때 | 세트에 기준 체력(low_hp %)이 있으면, 체력이 그 이하로 내려간 뒤부터 낮음 상태 가중치(low_weight_N)로 추첨한다. 예: 기준 30%에 회복 가중치를 평소 0 · 낮음 12로 두면 체력이 낮을 때만 회복을 사용한다. |
| 보스 | 첫 턴은 보스 전용 의도(enemy.boss_intent_id)로 고정하고 전투 시작 때 예고한다(PART 05 「전투 시작 순서」 4). 둘째 턴부터는 세트에서 추첨한다. |
| 수행 | 쌍방 행동 단계에서 정해진 의도대로 행동한다(PART 09 「쌍방 행동 순서」). 방어와 부가효과 무효는 플레이어 행동 전에 먼저 적용된다. |
enemy_ai.csv 칸
| 칸 | 값 형식 | 설명 | 범위 |
|---|---|---|---|
set_id (키) | int | 세트 번호 | 1 이상 |
name | string | 세트 이름("광전사형") | 1~30자 |
low_hp | float | 기준 체력 %. 체력이 이 값 이하면 low_weight_N을 사용한다 | 1 이상 100 미만 · 빈 값 = 없음 · low_weight_N과 함께 써야 함 |
intent_N | ref:intent | 이 세트가 쓰는 의도. N은 세트 안 순번 | N = 1~6 · 앞에서부터 · 보스 의도 거부 |
weight_N | int | 그 의도의 평소 가중치 | 0 이상 · intent_N이 있으면 필수 |
low_weight_N | int | 체력이 기준 체력 이하일 때의 가중치 | 0 이상 · 빈 값 = 평소 가중치 그대로 |
enemy_ai.csv 예시 행(넷째 이후부터 생략)
| set_id | name | low_hp | intent_1 | weight_1 | low_weight_1 | intent_2 | weight_2 | low_weight_2 | intent_3 | weight_3 | low_weight_3 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 101 | 해골 병사 | 1 | 12 | 2 | 12 | ||||||
| 104 | 고블린 | 1 | 6 | 2 | 6 | 6 | 12 |
고블린의 다음 턴 의도
enemy
고블린
enemy_typenormalset_id104
일반 적. 고블린 AI를 사용한다
enemy_ai
고블린
intent_11weight_16intent_22weight_26intent_36weight_312
공격 6 · 방어 6 · 약화 12로 한 번 추첨. low_hp가 비어있어 체력과 상관없이 이 가중치를 적용한다.
intent
6 약화
kindattack_weakeneffect_167value_11
행동 때 물리 공격을 1단계 약화시킨다.
결과매 턴 공격 25% · 방어 25% · 약화 50%. 약화가 나오면 플레이어 물리 공격력이 전투 동안 20% 줄고(단계 규칙은 PART 09 「행동 계산」), 이미 최대 단계면 약화는 추첨에서 빠진다
06-2액티브와 토큰
그림 · 입력 대기 화면
| 요소 | 규칙 |
|---|---|
| 10 액티브 사용 버튼 | 누를 수 없을 때는 버튼이 어두워진다. 쓴 액티브의 연출과 승패 판정이 끝날 때까지는 버튼이 비활성화된다. 상점 안에서는 「상점 나가기」 버튼이 된다. |
| 11 충전 게이지 | 현재 토큰 / 상한. 막대만 있고 숫자는 없다. 발동할 만큼 차면 막대 색이 바뀐다. 커서를 올리면 토큰 수 혹은 소모 골드량이 표시된다. |
| 12 액티브 아이템 칸 | 커서를 올리면 설명 패널이 등장하여 종류 · 이름 · 랭크 · 설명이 표시된다. |
| 토큰 | 돌리기 1회 당 토큰이 1개 충전된다. 아이템 최초 획득 시 토큰이 전부 충전되어 있다. |
그림 · 액티브 사용과 토큰 충전
06-3데이터 구조
item_active.csv 칸
| 칸 | 값 형식 | 설명 | 범위 |
|---|---|---|---|
item_id (키) | int | 아이템 번호 | 1 이상 |
name | string | 아이템 이름 | 1~14자 |
desc | string | 툴팁 설명문 | 0~130자 |
rarity | enum:rarity | 아이템 랭크 | f ~ s |
active_type | enum:active_type | 비용을 내는 방식 | token · stack · gold |
cost | int | 토큰형 = 토큰 비용 · 축적형 = 쌓을 수 있는 최대 토큰 · 골드형 = 내는 골드. 쓰기 전에 골드 · 의도 변경 · 적 생존을 검사해, 하나라도 안 되면 아무것도 실행하지 않고 비용도 내지 않는다. 통과하면 비용을 먼저 내고 효과를 끝까지 실행한다 | 1 이상 · 토큰형 · 축적형은 99 이하 |
effect_N | ref:effect | 실행할 동작. N은 실행 순서 | N = 1~3 · 앞에서부터 · 중간이 비면 거부 · 효과 0건 거부 |
value_N | float | N번째 동작의 인자 | 출처가 있으면 0 이상(100 초과 허용 · 음수 허용 항목 제외) · 안 쓰면 빈 값 |
icon | path | 아이콘 경로 지정 | Assets 기준 경로 |
item_active.csv 예시 행(설명 · 그림 칸 뺌)
| item_id | name | rarity | active_type | cost | effect_1 | value_1 | effect_2 | value_2 | effect_3 | value_3 |
|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 초급 정비도구 | c | token | 5 | 10 | 1 | ||||
| 11 | 이중 가챠 | d | gold | 10 | 17 | 10 | ||||
| 16 | 악마의 동전 | d | token | 5 | 19 | 20 | 12 | 40 | 20 | 40 |
돌리기와 결과
⑤ 전투 시스템07-1슬롯머신
| 열 | 담당 | 시작 상태 | 퍽이 정하는 것 |
|---|---|---|---|
| 행동 열 | 무엇을 할지 — 물리 공격 · 마법 공격 · 방어 · 회복 | 처음부터 열림 | puck_type 행동 4종과 기본 수치 param |
| 배율 열 | 그 행동을 몇 배로 키울지 | 처음부터 열림 | 배율 param ×0.5~×5 — 1 미만(꽝)도 있다 |
| 부가효과 열 | 행동에 덧붙는 특수 효과 | 새 게임 시작 때 잠김 — 첫째 보스 처치로 해금 | 동작 effect_id 하나와 그 양 param |
| 칸 수 | 열마다 5칸이고 칸마다 멈출 확률이 같다(2라인 해금 뒤 열마다 7칸 · 두 줄) | ||
| 행동 수치 | (행동 퍽의 기본 수치 + 그 행동에 더하는 스탯) × 배율. 부가효과 퍽이 그 위에 효과를 더한다 | ||
① 기본
② 3열 개방
③ 2행 개방
그림 · 머신이 가질 수 있는 상태(실제 화면)
머신이 가질 수 있는 상태
| 상태 | 화면 |
|---|---|
| ① 기본 | 행동 퍽과 배율 퍽만 존재하며, 세 번째 열은 비어있다. 각 열마다 5개의 퍽을 넣을 수 있다. |
| ② 3열 개방 | 부가효과 열이 해방되어 행동에 반영된다(메타 시스템 기획서 「퍽 편집과 머신 성장」). |
| ③ 2행 개방 | 머신 틀이 두 줄짜리(2 × 3)로 바뀌고 슬롯머신이 확장된 이미지로 출력되며, 행동이 총 2번 실시된다. 각 열마다 넣을 수 있는 퍽이 7개로 늘어나고, 빈 칸은 임의의 퍽이 지급되어 채워진다. |
| 해금 순서: 보스 처치 횟수를 트리거로 순차적으로 해금한다. 최종 보스는 클리어 = 게임 클리어이므로 무시한다. | |
07-2확률과 작동
| 규칙 | 설명 |
|---|---|
| 시작 구성 | 시작 퍽은 player.csv(PART 05 「시작 상태」)에서 조절하여 추후 다른 캐릭터가 추가되었을 때 개성적으로 조합을 구성할 수 있도록 한다. |
| 입력 방법 | 자기 턴 때 돌리기 버튼을 눌러 슬롯머신을 돌릴 수 있다. |
| 독립 시행 | 각 열마다 돌리기가 각각 시행되는 방식으로 작동한다. |
| 무작위 | 매 칸이 등장할 확률은 일정하며, 보정치가 적용되지 않는다. |
| 편집 | 퍽은 전투 밖에서 같은 종류 열에 덮어쓰기로만 바꾼다. 전투 중 적 행동이 바꾼 퍽은 전투가 끝나면 되돌아간다 |
07-3누르기에서 결과 확정까지
그림 · 리롤 선택 화면
| 요소 | 규칙 |
|---|---|
| 9 돌리기 버튼 | 항상 누를 수 있으나 입력 대기 · 리롤 단계에서만 입력되며 나머지 상황에선 모션만 출력된다. 버튼을 연타하는 모습을 연출하여 게임기의 다음 버튼을 계속 누르는 느낌을 준다. |
| 14 슬롯 머신 | 입력 대기 상태에서 돌리기 버튼을 누르면 등장한다. 돌리기 결과가 확정되면 아래로 내려간다. |
| 15 16 리롤 | 액티브 아이템 효과로 특정 열의 결과를 다시 돌릴 수 있다. 아이템마다 지정된 횟수만큼만 리롤할 수 있다. |
그림 · 돌리기 절차
07-4데이터 구조
puck.csv의 용도와 역할
| 구분 | 내용 |
|---|---|
| 용도 | 슬롯 머신의 칸에 꽂히는 퍽을 정의한다. 행동 · 배율 · 부가효과 세 열 중 어느 열에 들어가는지(puck_type)와 그 칸에 멈췄을 때 하는 일(행동 종류 · 기본 위력 · 배수 · 부가효과 동작)을 담는다. |
| 전투 | 돌리기로 멈춘 칸의 퍽 행을 읽어 그 턴의 행동을 계산한다(PART 09 「행동 계산」). |
| 메타 | 메타의 퍽 편집 · 상점 · 드롭 · 강화와 같은 데이터를 사용한다. rarity가 가격 · 강화비 · 드롭 추첨을, grade가 같은 퍽의 하급 · 중급 · 상급 묶음을 정한다(메타 시스템 기획서 「퍽 편집과 머신 성장」). |
| 참조 | 부가효과 퍽은 effect 에서 효과를 가져온다(PART 08 「효과 규칙」). |
puck.csv 칸
| 칸 | 값 형식 | 설명 | 범위 |
|---|---|---|---|
puck_id (키) | int | 퍽 고유 번호. 세이브가 열 구성을 이 번호로 적는다 | 1 이상 |
name | string | 화면에 뜨는 이름 | 1~12자 |
desc | string | 설명문 | 0~60자 |
puck_type | int | 퍽 종류와 행동 유형을 번호로 구분한다. | 0 물리 공격 · 1 마법 공격 · 2 방어 · 3 회복 · 4 배율 · 5 부가효과 |
param | float | 숫자 값 한 칸. 행동 4종 = 기본 위력 · 배율 = 배수 · 부가효과 = 가리킨 동작의 양 | 행동 정수 0~999 · 배율 0.1~10.0 · 부가효과는 동작이 정한 범위 |
effect_id | ref:effect | 부가효과 퍽이 실행할 효과. | 부가효과일 때 필수 · 그 외에는 공란 |
hit_count | int | 행동 실행 횟수 지정. | 주로 마법 공격에 사용 |
grade | int | 같은 퍽의 등급(하급 · 중급 · 상급)을 묶는 번호. 빈 값 = 등급 없음 = 강화 · 상점 · 드롭에서 제외 | 1 이상 또는 빈 값 · 같은 번호 안 rarity 중복 불가 |
rarity | enum:rarity | 상점 가격 · 강화 비용 책정 · 드롭 추첨에 사용하는 랭크 | f ~ s |
icon | path | 목록 · 팝업 · 열 위 퍽에 뜨는 그림. 여러 장이 든 파일은 경로#조각 이름으로 지정. | Assets 기준 상대경로 |
puck.csv 예시 행(설명 · 그림 칸 뺌)
| puck_id | name | puck_type | param | effect_id | hit_count | grade | rarity |
|---|---|---|---|---|---|---|---|
| 2 | 공격 중급 | 0 | 28 | 0 | c | ||
| 5 | 마법 중급 | 1 | 0 | 2 | 1 | c | |
| 16 | x2 | 4 | 2 | 4 | c | ||
| 23 | 금상첨화 하급 | 5 | 30 | 2 | 6 | e | |
| 777 | 잭팟 | 0 | 777 | s |
효과 시스템
⑤ 전투 시스템08-1효과 구성
effect.csv의 용도와 역할
| 구분 | 내용 |
|---|---|
| 용도 | 게임에 나오는 퍽 · 액티브 · 패시브 · 적 의도 · 인카운터 선택지의 효과를 한 시트에서 관리한다. |
| 행의 범위 | 한 행은 누구에게(actor) 무슨 효과를(behavior · resource) 어떤 기준으로(value_source) 주는지 담는다. 적용하는 수치는 참조되는 쪽의 value_N(퍽은 param)에 적는다. |
| 전투 | 부가효과 퍽 · 액티브 · 패시브 발동 시, 적 행동 시 이 행을 읽어 실행한다(아래 「단계별 효과 발동 시점(전투 한정)」). |
| 참조 | 수치형은 수치 항목(resource), 기능형은 code의 behavior 값을 가리킨다. |
| 메타 | 인카운터 선택지도 같은 시트를 사용한다(메타 시스템 기획서 「인카운터」). |
08-2효과 규칙
그림 · 단계별 효과 발동 시점(전투 한정)
중복 적용되지 않는 경우
| 항목 | 규칙 |
|---|---|
| 토큰 용량 · 체력 상한 배율 | 합치지 않고 한 쪽만 적용(같은 패시브를 두 개 장착해도 하나 몫) |
| 단계 | 강화 · 약화는 따로 세어 서로 상쇄하지 않고, 각각 최대 3단계까지 적용, 초과하는 경우 무시(3단계면 그 의도가 추첨에서 빠진다) |
| 차단류 | 이미 걸려 있으면 같은 종류의 명령 무시 |
| 전투 끝까지 | 회복 차단은 전투 끝까지 유지된다(효과 대상에 따라 플레이어만 또는 양쪽의 회복을 막는다) |
중첩 적용 방식
| 유형 | 항목 | 규칙 |
|---|---|---|
| 동시 | 곱연산 배율 | 겹치면 곱해서 적용 |
| 동시 | 합연산 배율, 단순 수치, 단계 | 겹치면 더해서 적용 |
| 동시 | 적 공격 무효 | 겹치면 횟수가 쌓이며, counts회를 막거나 유지 시간(duration) 중 먼저 만료되는 쪽이 사라진다. |
| 선후 | 패시브 아이템 | 패시브 칸 순서대로 하나씩 실행한다 |
| 선후 | 아이템 하나의 다중 효과 적용 | 한 아이템에 효과가 여럿일 경우 effect_N 순서대로 실행한다 |
아이템 · 퍽을 주는 기능형(지급)은 인카운터 전용이다. 전투 중에 쓰는 효과가 없어 전투 쪽 지급은 만들지 않았다
그림 · effect를 쓰는 곳
effect.csv 칸
| 칸 | 값 형식 | 설명 | 범위 |
|---|---|---|---|
effect_id (키) | int | 동작 고유 번호. 수치형 · 기능형이 같은 번호 범위 | 비거나 겹치면 거부(데이터는 1부터) |
name | string | 시트에서 알아보기 위한 이름 | 1~30자 |
actor | int | 효과를 적용할 대상을 의미한다. | 0 self · 1 opponent |
behavior | enum:behavior | numeric(번호 0)이면 수치형(resource로 고름), 그 밖(번호 1 이상)이면 기능형 동작을 뜻한다. | 필수 · 인자 개수 · 종류는 코드 인자표 |
resource | ref:stat_catalog | 수치형인 경우 수치를 적용할 대상을 지정한다. | behavior = 수치형이면 필수 |
filter | string | 대상 종류. 지급은 grant_target, 의도 변경은 intent_kind(attack만), 보유 퍽 등급 변경은 puck_type | 그 동작이 쓸 때만 · 빈 값 = 전체(지급은 아이템 또는 퍽 50:50 · 의도 변경은 같은 세트의 다른 의도) · 목록 밖 키 거부 |
value_source | enum:value_source | 효과 동작의 기준값을 지정한다. | 필수 · 기능형은 fixed만(일부 동작 예외) · 값마다 쓸 수 있는 시점이 정해져 있음 |
counts | int | 효과를 적용할 횟수를 뜻한다. | 1~99 · 빈 값 |
duration | int | 턴 지속 형태를 사용하는 효과가 지속되는 턴 수를 표시한다. | 소모형 항목일 때 필수(1~99 · -1) |
behavior 값 목록
| 번호 | 값 |
|---|---|
| 0 | numeric(수치형) |
| 1 | reroll(다시 돌리기) |
| 2 | fix_result(결과 고정) |
| 3 | result_rarity(이번 결과 퍽 등급 변경) |
| 4 | top_grade(최고 계보로 변환) |
| 5 | repeat_action(행동 반복) |
| 6 | double_gacha(이중 가챠) |
| 7 | lethal_counter(치명 반격) |
| 8 | revive(부활) |
| 9 | owned_rarity(보유 퍽 등급 변경) |
| 10 | owned_swap(보유 퍽 무작위 교체) |
| 11 | change_intent(의도 변경) |
| 12 | heal_block(회복 차단) |
| 13 | additional_block(부가효과 차단) |
| 14 | guard_break(방어 의도 추가 피해) |
| 15 | instant_kill(즉사) |
| 16 | grant(지급) |
| 17 | random_stat(무작위 기본 스탯 변경) |
value_source 값 목록
| 번호 | 값 |
|---|---|
| 0 | fixed(고정값) |
| 1 | range(−N~+N 정수 무작위) |
| 2 | current_hp(대상 현재 체력 %) |
| 3 | max_hp(대상 최대 체력 %) |
| 4 | actor_attack(쓰는 쪽 공격력 %) |
| 5 | actor_defense(쓰는 쪽 방어력 %) |
| 6 | reel_final(릴 최종값 %) |
| 7 | damage_dealt(준 피해 %) |
| 8 | blocked_damage(막은 피해 %) |
| 9 | overkill(초과 피해 %) |
| 10 | heal_overflow(넘친 회복량 %) |
| 11 | enemy_heal(적 회복량 %) |
| 12 | spent_token(쓴 토큰 1개당) |
actor 값 목록
| 번호 | 값 |
|---|---|
| 0 | self(자신) |
| 1 | opponent(상대) |
timing 값 목록
| 번호 | 값 |
|---|---|
| 0 | always(상시) |
| 1 | battle_start(전투 시작) |
| 2 | turn_start(턴 시작) |
| 3 | before_action(행동 적용 전) |
| 4 | after_action(행동 적용 후) |
| 5 | after_hit(피해를 준 뒤) |
| 6 | after_hurt(피해를 받은 뒤) |
| 7 | after_block(방어로 막았을 때) |
| 8 | player_heal(플레이어 회복 시) |
| 9 | enemy_heal(적 회복 시) |
| 10 | token_charged(토큰 충전 시) |
| 11 | death_threshold(빈사 판정 시) |
| 12 | battle_end(전투 종료) |
grant_target 값 목록
| 번호 | 값 |
|---|---|
| 0 | item(액티브 · 패시브 무작위) |
| 1 | active(액티브) |
| 2 | passive(패시브) |
| 3 | puck(퍽) |
| 빈 값 | 아이템 또는 퍽 50:50 |
전체 19묶음 · 114값은 code.csv에 있다
effect.csv 예시 행
| effect_id | name | actor | behavior | resource | filter | value_source | counts | duration |
|---|---|---|---|---|---|---|---|---|
| 54 | 빈사 확률 보너스 | 0 | numeric | 37 | fixed | |||
| 57 | 체력 회복 · 준 피해 | 0 | numeric | 18 | damage_dealt | |||
| 62 | 체력 피해 · 행위자 공격력 | 1 | numeric | 22 | actor_attack | |||
| 72 | 체력 증감 | 0 | numeric | 18 | fixed | |||
| 27 | 받는 피해 감소 · 턴 · 1회 | 0 | numeric | 30 | fixed | 1 | 1 | |
| 10 | 다시 돌리기 | 0 | reroll | fixed | ||||
| 77 | 보유 퍽 등급 올림 · 영구 · 물리 공격 | 0 | owned_rarity | physical_attack | fixed | 1 |
08-3효과 적용 예시
패시브 아이템 「죽음 전문가」(수치형 · 고정값)
item_passive
44 죽음 전문가
timingbattle_starteffect_154value_120
전투 시작 때 54번 동작(빈사 확률 보너스)을 양 20으로 실행한다
effect
54 빈사 확률 보너스
actor0(self)behaviornumericresource37value_sourcefixed
자신의 37번 수치 항목(빈사 확률 보너스 %)을 고정값으로 바꾼다
결과죽음의 문턱 생존 확률 +20% — 그 전투 동안
패시브 아이템 「흡혈귀의 손톱」(수치형 · 값 출처)
item_passive
47 흡혈귀의 손톱
timingafter_hitcondition_typeaction_iscondition_value0effect_157value_110
물리 공격으로 피해를 입힌 직후 57번 동작(체력 회복 · 준 피해)을 양 10으로 실행한다
effect
57 체력 회복 · 준 피해
actor0(self)behaviornumericresource18value_sourcedamage_dealt
자신의 18번 수치 항목(현재 체력 더하기)을 「준 피해」 기준 %로 바꾼다
결과타격마다 준 피해의 10%만큼 체력을 회복한다
액티브 아이템 「중급 정비도구」(기능형)
item_active
3 중급 정비도구
active_typetokencost6effect_110value_12
토큰 6을 쓰고 10번 동작(다시 돌리기)을 양 2로 실행한다
effect
10 다시 돌리기
actor0(self)behaviorrerollvalue_sourcefixed
기능형 동작 「다시 돌리기」. resource는 빈 값
code
behavior · reroll
code1name다시 돌리기
인자 1 = 다시 돌릴 횟수
결과그 턴 결과 공개 뒤 열을 2번까지 다시 돌린다
적 의도 「공격」(적도 같은 시트를 쓴다)
intent
1 공격
kindattackeffect_162value_1100
적 행동 때 62번 동작(체력 피해 · 행위자 공격력)을 양 100으로 실행한다
effect
62 체력 피해 · 행위자 공격력
actoropponentbehaviornumericresource22value_sourceactor_attack
상대의 22번 수치 항목(체력 피해)을 「행위자 공격력」 기준 %로 바꾼다
결과적 공격력의 100%를 플레이어에게 피해로 준다
부가효과 퍽 「한 번 더 중급」(동작 하나)
puck
21 한 번 더 중급
puck_type5(부가효과)effect_id1param25
행동 적용 때 1번 동작(행동 반복)을 양 25로 실행한다
effect
1 행동 반복
actor0(self)behaviorrepeat_actionvalue_sourcefixed
기능형 동작 「행동 반복」
code
behavior · repeat_action
code5name행동 반복
인자 1 = 반복 행동의 위력(이번 최종값의 %)
결과그 턴의 행동 줄이 모두 끝난 뒤, 이 퍽이 나온 줄의 행동만 그 줄 최종값의 25%로 한 번 더 한다
쌍방 행동
⑤ 전투 시스템09-1쌍방 행동 순서
| 순서 | 하는 일 |
|---|---|
| 1 | 적의 이번 의도가 방어면 적이 먼저 방어값을 올린다(PART 06 「의도 표시」). |
| 2 | 플레이어 행동 — 첫째 줄 → 둘째 줄 순으로 행동을 시행한다. 부가효과는 줄마다 적용한다. |
| 3 | 토큰 — 플레이어 행동이 끝나면 토큰 1을 채운다(상한에서 멈춤 · PART 06 「액티브와 토큰」). |
| 4 | 승패 판정 — 플레이어 행동이 다 끝난 뒤, 체력이 0이 된 쪽이 있으면 PART 11 「승패 판정」을 따른다. |
| 5 | 적 행동 — 방어를 제외한 의도일 때 적이 행동한다. |
| 6 | 턴 종료 — 다시 승패를 판정하고, 둘 다 쓰러지지 않았으면 다음 턴으로 넘긴다(PART 11 「턴 종료 순서」). |
09-2행동 계산
그림 · 실제 전투 화면으로 본 행동 퍽 기본수치에서 받는 피해까지의 계산 순서
특수 규칙
| 분류 | 항목 | 규칙 |
|---|---|---|
| 공통 | 계산 방식 | 전투 관련 수치(체력 · 피해 · 회복 · 방어값 · 스탯 · 행동 수치)는 소수점 그대로 계산하며, 화면에 보일 때는 반올림한 정수로 보인다. 체력은 0.5 미만으로 남았을 때 1로 표기해 오류처럼 보이는 현상을 방지한다. |
| 공통 | 행동이 여럿일 때 | 행마다 ①~⑤를 따로 계산한다. 첫째 줄 → 둘째 줄 순으로 시행하고, 부가효과는 줄마다 적용한다. |
| 공통 | 적 | 플레이어와 같은 계산 공식을 사용한다. |
| ① 행동 퍽 기본수치 | 결과 퍽 변경 | 결과 퍽을 바꾸는 동작은 해당 턴에만 임시로 적용되고, 계산 후 원래대로 돌아간다. 「이번 결과 퍽 등급 변경」은 두 줄의 행동 퍽 가운데 무작위로 고른 퍽의 등급을 바꾸고, 「최고 계보로 변환」은 줄을 읽기 전에 그 행의 퍽 전부를 같은 계열의 가장 높은 퍽으로 바꾼다. |
| ④ 부가효과 발동 | 막힘 | 적 의도가 부가효과 무효면 실행하지 않고 무효 표시를 띄운다. 적이 쓰러진 뒤 남은 행동에서는 실행하지 않는다. |
| ④ 부가효과 발동 | 행동 반복 | 「행동 반복」효과는 행동을 지정 배율로 한 번 더 실행한다. 반복된 행동은 부가효과 · 행동 전후 패시브를 다시 발동하지 않게 해 엔진 효과를 방지한다. |
공격 중급 · x1 · 운명의 도움 하급이 함께 멈춘 턴(위 전투 화면)
puck
2 공격 중급
puck_type0(물리 공격)param28hit_count1
행동 퍽의 기본수치
player
1행
physical_attack30
플레이어의 물리 공격력 수치(패시브 1 힘의 아뮬렛 +15 → 45)
puck
14 x1
puck_type4(배율)param1
배율 퍽의 배율
puck
28 운명의 도움 하급
puck_type5(부가효과)effect_id5param50
결과 배율 퍽 하나에 배율 +0.5
intent
공격 7
방어 의도 없음
이번 턴 적의 방어값 0
결과행동 수치 = (28 + 45) × (1 + 0.5) = 109.5 · 방어 결과 = 109.5 × 100 ÷ (100 + 0) = 109.5 · 데미지 결과 = 109.5(적 체력 140.3 → 30.8)
죽음의 문턱
⑤ 전투 시스템10-1위치와 판정
10-2규칙
그림 · 생존 판정 화면
| 항목 | 규칙 |
|---|---|
| 판정 시점 | 플레이어 체력이 0이 되는 순간 쓰러진 것으로 기록하고, 다음 승패 판정 때 시행한다(PART 11 「승패 판정」). 전투 밖(인카운터)에서는 발생하지 않는다. |
| 기본 확률 | 첫 생존 확률은battle_setting.death_chance%로, 같은 전투 안에서 성공할 때마다 다음 판정에 기준 확률을 곱한다(death_decay%). 효과로 더한 확률에는 곱하지 않는다. 성공하면 최대 체력의 death_revive_hp%(지금 값 30)로 부활한다. 전투 종료 후 초기화된다. |
| 실패 뒤 부활 | 「부활」효과를 보유하고 있을 때, 판정에 실패해도 부활한다. 이때 확률은 실패한 시점을 기준으로 유지한다. |
| 체력 0 도달을 조건으로 하는 효과 | 체력 0 도달을 조건으로 하는 효과를 보유하고 있으면 그 효과가 무조건 발동하며 죽음의 문턱을 시행하지 않는다. |
10-3데이터 구조
battle_setting.csv의 용도와 역할
| 구분 | 내용 |
|---|---|
| 용도 | 죽음의 문턱 확률과 부활 체력 값을 관리한다. 전투와 관련없는 내용은 메타 시스템 기획서 「퍽 편집과 머신 성장」에서 다룬다. |
battle_setting.csv 칸(전투 설정 · 키 칸 없음)
| 칸 | 값 형식 | 설명 | 범위 |
|---|---|---|---|
death_chance | int | 기본 성공 확률 % | 0~100 |
death_decay | int | 성공할 때마다 곱할 확률 % | 0~100 |
death_revive_hp | int | 성공했을 때 회복할 체력의 %(최대체력 기준) | 1~100 |
boss_clear_hp | int | 보스를 쓰러뜨릴 때마다 최대 · 현재 체력에 더하는 양 | 0 이상 |
한 전투에서 여러 번 쓰러질 때
battle_setting
1행
death_chance60death_decay50death_revive_hp30
기본 성공 확률 60%. 성공하면 최대 체력의 30%로 부활하고, 다음 판정의 기본 확률에 50%를 곱한다
item_passive
44 죽음 전문가
timingbattle_starteffect_154value_120
전투 시작 때 성공 확률에 20%를 더한다(PART 08 「효과 적용 예시」)
결과기본 확률은 60 → 30 → 15%로 절반씩 줄고, 더한 20%는 줄지 않아 80 → 50 → 35%로 적용된다. 다음 전투에서는 기본 확률인 60%로 돌아간다.
턴 종료와 전투 종료
⑤ 전투 시스템11-1턴 종료 순서
11-2승패 판정
| 항목 | 규칙 |
|---|---|
| 쓰러짐 | 체력이 0이 되는 순간 쓰러진 것으로 기록한다. 그 뒤에 회복해 체력이 올라가도 기록은 남고, 판정할 때 체력을 0으로 되돌린다. |
| 판정 시점 | 플레이어 행동이 다 끝난 뒤(PART 09 쌍방 행동) · 적 행동이 끝난 뒤 · 액티브 아이템을 쓴 뒤(PART 06 「액티브와 토큰」) |
| 플레이어가 쓰러짐 | PART 10 죽음의 문턱을 시행한다. 살아나면 기록을 지우고 전투를 이어 간다. 살아나지 못하면 패배로 「전투 종료」 |
| 적이 쓰러짐 | 승리로 「전투 종료」 |
| 둘 다 쓰러짐 | 쓰러진 순서대로 보여 준다. 적이 먼저면 적이 쓰러진 뒤 PART 10 죽음의 문턱을 시행한다. 살아나면 승리, 살아나지 못하면 패배 |
| 둘 다 서 있음 | 쌍방 행동이 끝났으면 「턴 종료 순서」, 아니면 남은 행동을 이어 간다 |
11-3전투 종료
적 처치
보상 팝업
그림 · 전투 종료 화면
| 순서 | 전투가 끝날 때 하는 일 |
|---|---|
| 1 | 종료 상태로 — 10 액티브 사용 버튼을 끄고 5 적 체력 · 4 적 의도를 숨긴다 |
| 2 | 승리면 처치 골드를 산정하고, 메타에 넘길 값(「데이터 전달」)을 정한다 |
| 3 | 양쪽의 이번 턴 몫 · 방어값을 지운다(「턴 종료 순서」 1과 같음 · 턴 수 · 다음 의도는 하지 않음) |
| 4 | battle_end 패시브 발동 — 패배면 패배 처리에 묻혀 무시된다 |
| 5 | 승리면 골드를 바로 지급한다(초과 피해 골드 포함 · 마지막 보스는 지급하지 않음) |
| 6 | 전투 후 초기화되는 값을 초기화한다(액티브 골드 비용 · 전투 중 바뀐 퍽 · 장착 효과) |
| 7 | 승리면 보상 진행 — 메타가 받은 위험 랭크에서 퍽 · 아이템을 뽑는다(메타 시스템 기획서 「전투 보상」) · 마지막 보스면 보상 대신 엔딩 |
| 8 | 패배면 세이브를 지우고 패배 패널 → 로비 |
11-4데이터 전달
전투 → 메타(적 처치 때 1회 · 보상 판정용)
| 항목 | 가져오는 곳 |
|---|---|
| 위험 랭크 | 처치한 적 행의 danger_grade |
| 보스 여부 | 적 행의 enemy_type이 boss일 경우 전달 |
| 처치 골드 | 메타에 넘기지 않고 전투가 바로 지급한다(「전투 종료」 5 · 보상 팝업 골드 칸은 0G에서 시작한다). 승리 때 1회, danger_grade가 가리키는 grade_base.stat_gold_reward × gold_rate%(지금 80%)를 가운데로 ±gold_variance%(지금 15%)를 고르게 굴려 반올림한다(0 밑으로 내려가지 않음). 골드 칸 노드면 gold_node_rate%(지금 200%)를 곱하고, 수치 항목 「처치 골드 배율 %」 + 「처치 골드 배율 · 이번 턴 %」만큼 더한 뒤, 「초과 피해 보상 골드 더하기」로 쌓인 값(전투마다 0부터)과 「전투 종료 보상 골드 더하기」를 배율 없이 그대로 더한다 |
| 추가 보상 선택지 수 | 수치 항목 「장착 보상 선택지 더하기」 + 「처치 보상 선택지 더하기」의 합 |