Skip to Content
🎭 경험 표기법 리서치게임 디자인 문서

게임 디자인 문서: ink, Twine, 환경 서사, 상태 추적

개요

게임 디자인 문서(GDD, Game Design Document)는 비디오 게임의 경험을 기록하고 설계하는 도구다. 특히 인터랙티브 내러티브(interactive narrative) 게임은 이머시브 경험과 유사한 문제를 다룬다: 비선형적 경로, 플레이어의 선택, 상태 추적, 분기 토폴로지.

핵심 도구:

  • ink: Inkle Studios가 개발한 스크립팅 언어. 상태 기반 분기 내러티브.
  • Twine: 텍스트 기반 인터랙티브 픽션을 위한 오픈소스 도구. 비주얼 노드 에디터.
  • 환경 서사(Environmental Narrative): 레벨 디자인과 오브제를 통한 스토리텔링.
  • 상태 추적(State Tracking): 플레이어의 행동과 게임 세계 변화를 기록하는 시스템.

출처:


ink: 상태 기반 분기 내러티브

정의

ink는 Inkle Studios가 개발한 마크업 언어로, 인터랙티브 내러티브를 작성하는 데 특화되어 있다. 80 Days, Heaven’s Vault, A Highland Song 등 Inkle의 모든 게임에 사용되었으며, 다른 인디 게임(Bury Me My Love, Where the Water Tastes Like Wine)에도 채택되었다.

핵심 특징:

  • 텍스트 기반: 순수 텍스트 파일로 작성 (.ink 파일).
  • 선택지 시스템: 플레이어에게 선택지를 제시하고 분기.
  • 상태 추적: 변수, 함수, 조건문으로 플레이어의 선택을 기억하고 게임 세계 변화.
  • Unity/Unreal 통합: 게임 엔진에 플러그인으로 삽입 가능.
  • 웹 배포 가능: 게임 엔진 없이도 웹페이지로 배포 가능.

기본 문법

1. 콘텐츠와 선택지

You arrive at the village square. * [Go to the inn] You enter the warm inn. * [Visit the blacksmith] The blacksmith greets you.

2. Knots & Diverts (노트와 전환)

=== village_square === You are in the village square. * [Go to inn] -> inn * [Go to blacksmith] -> blacksmith === inn === You enter the inn. -> END === blacksmith === The blacksmith is working. -> END
  • ===로 섹션(knot) 정의
  • -> 로 다른 섹션으로 이동(divert)

3. 변수와 상태 추적

VAR has_key = false VAR gold = 100 === door === {has_key: You unlock the door. - else: The door is locked. } * [Try to open] {has_key: You walk through. | It won't budge.}
  • VAR로 전역 변수 정의
  • {condition: true_text | false_text} 조건부 텍스트
  • 플레이어의 행동을 상태(state)로 저장

4. 조건부 선택지

* {gold >= 50} [Buy sword (50 gold)] ~ gold = gold - 50 You buy a sword.
  • {condition} 조건 충족 시에만 선택지 표시
  • ~ 코드 실행 (변수 변경)

5. 방문 횟수 추적

=== forest === You enter the forest. { - forest == 1: It's your first time here. - forest == 2: You've been here before. - else: You know this place well. }
  • ink는 자동으로 각 knot의 방문 횟수를 추적
  • knot_name 변수로 접근 가능

6. Lists (복잡한 상태)

LIST Inventory = sword, shield, potion LIST CharacterTraits = brave, cunning, kind ~ Inventory += sword ~ CharacterTraits += brave {Inventory has sword: You have a sword.} {CharacterTraits has brave and kind: You are brave and kind.}
  • 복수 값을 가질 수 있는 상태
  • 아이템 인벤토리, 캐릭터 특성, 관계 등 표현

분기 토폴로지 (Branching Topology)

ink의 강력함은 상태 기반 분기에 있다.

단순 분기 (Tree):

시작 → [A 또는 B] → 각각 다른 결말

상태 기반 분기 (State Machine):

시작 → [선택 A] → 상태 변화 → 이후 선택지가 달라짐

예시:

VAR helped_old_man = false === village === * [Help old man] ~ helped_old_man = true You help the old man. He thanks you. -> village_after === village_after === {helped_old_man: The old man waves at you. * [Talk to him] -> old_man_gives_reward - else: The old man ignores you. }
  • 플레이어의 과거 선택이 미래의 선택지와 결과를 바꿈
  • 단순 트리가 아닌 그물망(web) 구조

이머시브 경험에의 적용

  • 터치포인트의 조건부 가용성: “이미 X를 했다면 Y가 열린다”
  • 관객 행동 추적: ink의 변수처럼, 관객이 어떤 터치포인트를 경험했는지 추적
  • 상태 머신: 관객의 상태(긴장/이완, 호기심/만족 등)를 변수로 표현
  • 비선형 서사: 순서가 정해지지 않은 터치포인트들 간 조건부 연결

한계:

  • ink는 텍스트 기반. 물리적 공간, 감각, 관계는 직접 표기 불가.
  • → ink의 상태 추적 메커니즘만 빌려오고, 표기 형식은 확장 필요.

Twine: 비주얼 노드 기반 인터랙티브 픽션

정의

Twine오픈소스 도구로, 인터랙티브 픽션을 비주얼 노드 에디터로 작성할 수 있게 한다. 각 “passage(구절)“를 노드로 표현하고, 링크로 연결하여 스토리를 구성.

핵심 특징:

  • 비주얼 에디터: 포스트잇과 실처럼 노드를 배치하고 연결.
  • 제로 코드 가능: 기본 스토리는 코드 없이 작성 가능.
  • 확장 가능: 변수, CSS, JavaScript로 복잡한 로직 추가 가능.
  • HTML 배포: 웹페이지 하나로 배포. 어디서나 플레이 가능.
  • Story Formats: Harlowe, SugarCube, Chapbook 등 여러 엔진 선택 가능.

기본 구조

1. Passage (구절/노드)

:: Village Square You are in the village square. [[Go to the inn->Inn]] [[Visit the blacksmith->Blacksmith]] :: Inn You enter the inn. [[Return to square->Village Square]] :: Blacksmith The blacksmith is working. [[Return to square->Village Square]]
  • :: 제목으로 각 passage 정의
  • [[텍스트->대상]]으로 링크

2. 비주얼 에디터

  • Twine 앱에서 각 passage가 상자(box)로 표시됨
  • 링크는 화살표로 자동 연결
  • 드래그 앤 드롭으로 재배치
  • 전체 스토리 구조를 한눈에 파악 가능

3. 변수 (SugarCube)

<<set $hasKey to false>> <<set $gold to 100>> <<if $hasKey>> You unlock the door. <<else>> The door is locked. <</if>> <<link "Buy sword (50 gold)">> <<if $gold >= 50>> <<set $gold to $gold - 50>> You buy a sword. <<else>> Not enough gold. <</if>> <</link>>
  • <<set>>, <<if>>, <<link>> 등 매크로 사용
  • Story Format마다 문법 다름

ink vs Twine 비교

측면inkTwine
표현 방식텍스트 파일 (코드 같은 느낌)비주얼 노드 (포스트잇 같은 느낌)
학습 곡선중간 (마크업 언어 학습 필요)낮음 (드래그 앤 드롭)
복잡한 로직강함 (Lists, 함수, 조건부)중간 (Story Format 의존)
게임 엔진 통합쉬움 (Unity 플러그인)어려움 (HTML 통합 복잡)
웹 배포가능 (inky 도구로)매우 쉬움 (HTML 직접 생성)
협업Git 친화적 (텍스트 diff)어려움 (바이너리 포맷)

이머시브 경험에의 적용

  • Twine의 비주얼 노드 구조 = 이머시브 경험의 공간 + 터치포인트 맵.
  • 각 노드 = 하나의 터치포인트 또는 공간.
  • 화살표 = 가능한 이동 경로.
  • 전체 경험 구조를 한눈에 파악 가능.

한계:

  • Twine도 ink처럼 텍스트 중심. 감각, 공간, 시간 표기 부족.
  • 비주얼 노드는 공간적 배치를 암시하지만, 실제 물리적 공간과 일치하지 않음.

빌려올 것:

  • 비주얼 맵핑: 전체 구조를 노드+링크로 시각화.
  • 상태 추적: 변수로 관객 상태 기록.

환경 서사 (Environmental Narrative)

정의

환경 서사레벨 디자인과 오브제 배치를 통해 스토리를 전달하는 기법이다. 플레이어가 환경을 탐색하면서 간접적으로 이야기를 발견한다.

대표 게임:

  • Bioshock: 폐허 된 Rapture 도시. 오디오 로그, 낙서, 오브제 배치로 과거 사건 재구성.
  • Gone Home: 텅 빈 집. 편지, 사진, 물건 배치로 가족의 이야기 추리.
  • What Remains of Edith Finch: 가족 구성원들의 방. 각 방의 오브제가 그들의 삶 암시.
  • Unpacking: 짐 풀기 게임. 오브제를 통해 주인공의 인생 단계 서사.

핵심 원리

1. “보여주기, 말하지 않기” (Show, Don’t Tell)

  • 텍스트/대화로 설명하지 않고, 환경이 말하게 함.
  • 예: “이 집 주인은 화가였다” (말함) vs 이젤, 물감, 미완성 그림이 방 안에 (보임).

2. 오브제의 의미 (Object Semiotics)

  • 각 오브제는 기호. 조합하면 서사.
  • 예 (Unpacking):
    • 첫 이사: 아이 방 (장난감, 학교 교과서)
    • 두 번째 이사: 대학 기숙사 (포스터, 게임기)
    • 세 번째 이사: 연인과 동거 (두 사람의 물건이 섞임)
    • 네 번째 이사: 홀로 독립 (연인의 물건 사라짐)
    • 다섯 번째 이사: 새 가족 (아기 방 준비)

3. 공간의 레이어링 (Spatial Layering)

  • 여러 시간대의 흔적이 공간에 쌓임.
  • 예 (Bioshock): 벽의 총알 자국, 피 얼룩, 바리케이드 → 과거 전투 추정.

4. 탐색의 보상 (Exploration Reward)

  • 플레이어가 자발적으로 탐색하도록 유도.
  • 숨겨진 공간, 상호작용 가능한 오브제로 보상.

게임 디자인 문서에서의 표기

환경 서사는 GDD의 레벨 디자인 섹션에 기록:

표기 요소:

  1. 레벨 맵: 공간 평면도 + 오브제 배치.
  2. 오브제 리스트: 각 오브제의 위치, 의미, 플레이어가 추론할 수 있는 정보.
  3. 레이어링 다이어그램: 시간대별로 추가된 요소들.
  4. 탐색 플로우: 플레이어가 발견하는 순서(권장). 비선형이므로 “가능한 경로들”.

예시 (Gone Home 스타일):

[방 이름: 큰딸의 방] 오브제 배치: - 책상 위: 학교 성적표 (C학점) → 학업 부진 암시 - 침대 밑: 숨겨진 일기장 → 클릭 시 읽을 수 있음. 비밀 연애 암시. - 벽: 펑크 밴드 포스터 → 반항적 성향 - 쓰레기통: 찢어진 편지 → 부모와의 갈등 서사적 의도: 플레이어는 이 오브제들을 조합하여 "딸이 가족과 갈등 중이며, 비밀스럽게 연인과 도망칠 계획"이라는 결론에 도달.

이머시브 경험에의 적용

  • 완벽히 일치: 이머시브 경험도 환경과 오브제를 통한 서사.
  • 예: 집 안의 포스트잇, 냉장고 쪽지, 개인 물건 → 관객이 스스로 “이 집 주인은 누구인가?” 추론.
  • Unpacking 모델: 캐리어 짐 풀기 = 오브제를 통한 페르소나 입기.

표기 방법:

  • 공간 평면도 + 오브제 배치 레이어.
  • 각 오브제의 서사적 의도 기술.
  • 관객이 추론할 수 있는 정보의 레이어.

상태 추적 (State Tracking)

정의

상태 추적은 플레이어의 행동과 게임 세계의 변화를 변수로 기록하고, 이를 바탕으로 게임 진행을 분기시키는 시스템.

핵심 개념

1. Global Variables (전역 변수)

  • 게임 전체에서 접근 가능한 상태.
  • 예: player_health, has_key, npc_trust_level.

2. Persistent State (영구 상태)

  • 저장되고 불러와지는 상태.
  • 예: 세이브 파일, 체크포인트.

3. Conditional Logic (조건부 로직)

  • 상태에 따라 다른 결과.
  • 예: if (has_key) { open_door(); } else { show_message("Locked"); }

4. State Machine (상태 기계)

  • 게임 세계나 NPC의 상태를 유한 상태 기계(FSM, Finite State Machine)로 모델링.
  • 예: NPC 상태: Idle → Patrol → Alert → Attack → Dead

5. Flag System (플래그 시스템)

  • Boolean 변수로 이벤트 발생 여부 추적.
  • 예: quest_completed, met_character_A, saw_cutscene_B.

상태 추적 표기 (GDD)

방법 1: 변수 리스트

전역 변수: - player_gold: int (초기값 100) - has_sword: bool (초기값 false) - npc_bob_friendship: int (0~100, 초기값 50) 플래그: - visited_village: bool - helped_old_man: bool - defeated_boss: bool

방법 2: 상태 머신 다이어그램

[NPC 상태 머신: 주민] ┌──────┐ 관객 접근 ┌──────┐ │ Idle │ ─────────> │ Greet│ └──────┘ └──────┘ ↑ │ │ 시간 경과 │ 관객 대화 시도 │ ↓ │ ┌──────┐ └────────────── │ Talk │ └──────┘

방법 3: 의존 그래프 (Dependency Graph)

[퀘스트 A 완료] ──┐ ├──> [퀘스트 C 시작 가능] [퀘스트 B 완료] ──┘ [아이템 X 획득] ──> [지역 Y 진입 가능]

이머시브 경험에의 적용

  • 관객 상태 추적: 어떤 터치포인트를 경험했는가?
  • 조건부 터치포인트: “이미 A를 했다면 B가 활성화”
  • 관객의 감정 상태: 변수로 추적 (긴장도, 이완도, 호기심 등)
  • NPC(주민) 상태 머신: 주민이 관객에게 반응하는 방식

표기 방법:

  • ink처럼 변수 시스템 차용.
  • 상태 머신 다이어그램.
  • 의존 그래프 (터치포인트 간 조건부 연결).

한계와 비판

1. 텍스트/디지털 중심

  • ink와 Twine 모두 텍스트 기반. 물리적 공간, 신체, 감각은 직접 표기 불가.
  • 이머시브 경험은 다감각적, 공간적 → 보완 시스템 필요.

2. 단독 플레이어 가정

  • 게임은 대부분 한 명의 플레이어 가정.
  • 이머시브 경험은 여러 관객 동시에 → 상태 추적 복잡도 폭증.
  • 해결: 개별 추적 vs 집단 패턴 추적 (Xenakis 확률적 접근).

3. 결정론적 상태 머신

  • 게임의 상태 머신은 명확한 규칙.
  • 이머시브 경험은 인간 관객의 예측 불가능성 → 확률적/유연한 시스템 필요.

4. 완전 통제 가능성 가정

  • 게임 디자이너는 모든 변수를 통제.
  • 이머시브 경험은 관객의 자율성 → 통제 불가능한 변수 많음.

이머시브 경험 프레임워크에 빌려올 아이디어

1. 상태 추적 시스템 (ink)

  • 관객의 행동을 변수로 기록: visited_house_A, read_postit_B, talked_to_resident_C.
  • 조건부 터치포인트: “이미 X를 했다면 Y 가능”.

2. 비주얼 노드 맵 (Twine)

  • 전체 터치포인트를 노드+링크로 시각화.
  • 공간 평면도 위에 노드를 배치하면 공간+경험 통합 맵.

3. 환경 서사 (Environmental Narrative)

  • 오브제를 통한 간접 서사.
  • 각 오브제의 서사적 의도 명시.
  • “보여주기, 말하지 않기” = 마중물 원칙.

4. 상태 머신 (FSM)

  • 주민(배우)의 상태를 FSM으로: Idle → Greet → Talk → Farewell.
  • 관객의 상태도 가능: Curious → Engaged → Relaxed → Reflective.

5. 의존 그래프 (Dependency Graph)

  • 터치포인트 간 조건부 연결을 그래프로.
  • 방향성 있는 화살표: A → B (A를 먼저 해야 B 가능).
  • 비방향성: A ↔ B (순서 무관).

6. 플래그 시스템

  • Boolean으로 이벤트 발생 여부 추적.
  • 단순하지만 강력. 복잡한 조건도 Boolean 조합으로 표현 가능.

7. 분기 토폴로지 시각화

  • ink/Twine처럼 전체 경험의 분기 구조를 한눈에.
  • 선형 vs 비선형 vs 순환 구조가 명확히.

주요 도구 및 자료

ink:

Twine:

비교 자료:

환경 서사 사례:

  • Unpacking GDC talk (찾을 수 있다면)
  • What Remains of Edith Finch post-mortem

결론

게임 디자인 문서, 특히 ink의 상태 추적, Twine의 비주얼 노드 구조, 환경 서사는 이머시브 경험 표기에 직접 적용 가능하다. 게임 디자인은 이미 비선형 경로, 플레이어 선택, 조건부 분기를 수십 년간 다뤄왔다.

이머시브 프레임워크에 적용 시 핵심 원칙:

  1. 상태 추적: ink처럼 관객 행동을 변수로 기록.
  2. 비주얼 맵: Twine처럼 터치포인트를 노드+링크로 시각화.
  3. 환경 서사: 오브제의 서사적 의도 명시. “보여주기, 말하지 않기”.
  4. 상태 머신: 주민/관객의 상태를 FSM으로 모델링.
  5. 의존 그래프: 터치포인트 간 조건부 연결.
  6. 분기 토폴로지: 전체 경험의 분기 구조 시각화.

게임 디자인의 상태 추적 메커니즘은 이머시브 경험의 가변적 행위성을 표기하는 핵심 도구다. 다만 게임의 디지털/단독 플레이어 가정은 이머시브 경험의 물리적/다중 관객 현실과 다르므로, 보완이 필요하다.