선택의 결과를 늦추는 기술 — 기억 시스템
감정 시스템(3계층), 컨텍스트 시스템(장면 조건). 두 개를 만들었다. 세 번째이자 마지막 핵심 시스템이 남았다. 기억 시스템이다.
기존 미연시의 문제 중 하나가 "결과가 즉시 보인다"는 것이었다. 좋은 선택을 하면 바로 긍정적 반응, 나쁜 선택을 하면 바로 부정적 반응. 이러면 선택이 퀴즈가 된다.
현실의 관계에서 선택의 결과는 즉시 나오지 않는다. 오늘 한 말이 다음 달에 돌아올 수 있다. 배려라고 생각한 행동이 나중에 상처로 해석될 수 있다. 이 "지연"이 관계에 무게를 만든다.
플래그의 누적
기억 시스템의 기본 단위는 플래그다. 플레이어의 선택을 기록하는 변수들.
default flags = {
"did_not_ask": 0, # 중요한 순간에 묻지 않은 횟수
"avoided_confession": 0, # 고백을 미룬 횟수
"missed_timing": 0, # 타이밍을 놓친 횟수
"protected_but_lied": 0, # 보호하려고 거짓말한 횟수
"shared_umbrella": False, # 우산을 나눠 쓴 적 있는지
"saw_with_rival": False, # 라이벌과 함께 있는 걸 목격했는지
"broke_promise": False # 약속을 어긴 적 있는지
}
핵심은 이거다. "한 번"이 아니라 "패턴"을 추적한다. did_not_ask가 1이면 한 번 놓친 거다. 3이면 패턴이다. "이 사람은 중요한 순간마다 묻지 않는 사람"이 된다.
지연 귀결: 지금 선택, 나중에 결과
이 시스템의 핵심 기법이 "지연 귀결"이다.
초반에 플레이어가 선택한다.
"지금은 묻지 않는다"
이 순간에는 배려처럼 보인다. 상대가 힘들어 보이니까 지금은 건드리지 말자. 성숙한 선택처럼 느껴진다.
중반에는 관계가 유지된다. 별 문제가 없어 보인다.
후반에 캐릭터가 말한다.
"넌 항상 중요한 순간에 아무것도 묻지 않았어."
이 한 줄이 플레이어를 찌른다. 내가 배려라고 생각했던 게, 상대에게는 무관심으로 느껴졌다는 거다. 그리고 이건 한 번이 아니라 여러 번 반복된 패턴이다.
지금 선택한 것이 나중에 의미가 바뀐다. 이게 기억 시스템의 핵심이다.
좋은 선택이 비극이 되는 구조
AI와 이 패턴을 집중적으로 파봤다. 플레이어를 가장 강하게 아프게 하는 구조는 "나쁜 선택을 벌주는 것"이 아니라, **"좋은 선택처럼 보였던 것을 비극으로 바꾸는 것"**이다.
몇 가지 패턴을 정리했다.
배려의 역설 — "무리해서 말하지 않아도 된다"를 선택한다. 배려처럼 보인다. 하지만 누적되면 "너는 나를 제대로 보지 않았다"가 된다.
보호의 역설 — 상대를 지키려고 거짓말한다. 선의다. 하지만 나중에 진실이 드러나면 "왜 나를 믿지 않았느냐"가 된다. 거짓말의 내용이 아니라 신뢰의 부재가 상처가 된다.
존중의 역설 — 상대의 결정을 존중한다고 놓아준다. 성숙해 보인다. 하지만 상대가 원했던 건 잡아주는 거였다. "존중한다고 했지만 사실은 회피한 거잖아."
이 세 가지는 전부 겉으로는 좋은 선택이다. 하지만 관계의 맥락에서는 치명적이다. 그리고 플레이어가 이걸 깨닫는 건 한참 후다. 이때의 감정은 단순한 슬픔이 아니라, 자기 판단에 대한 후회다. "내가 틀렸구나."
AI가 이걸 정리하면서 한 말이 인상적이었다. "플레이어를 슬프게 하려면, 나쁜 선택을 벌주는 게 아니라 좋은 선택처럼 보였던 것을 비극으로 바꿔야 한다." 정확하다.
기억의 재해석
기억 시스템의 또 다른 기능은 과거 장면의 재해석이다.
초반에 봤던 장면이, 후반에 다른 정보가 추가되면서 완전히 다른 의미를 갖게 되는 구조.
예를 들어, 초반에 캐릭터가 "괜찮아, 별일 아니야"라고 했던 장면. 그때는 그냥 넘어갔다. 후반에 그 순간 캐릭터가 실은 엄청 힘든 상황이었다는 걸 알게 된다. 그때 돌아가서 "괜찮아?"라고 물었어야 했다. 하지만 이미 늦었다.
이걸 구현하려면 플래그 체크만으로는 부족하고, 같은 장면을 다른 맥락에서 다시 보여주는 구조가 필요하다. 회상 장면이나, 상대 시점에서의 재구성 같은 기법.
if flags["did_not_ask"] >= 2 and story_phase == "late":
# 과거 장면 회상 - 이번에는 상대 시점
jump flashback_their_perspective
3개 시스템의 통합
이제 세 개의 시스템이 갖춰졌다.
- 감정 시스템 — 캐릭터의 내면 상태 추적 (3계층)
- 컨텍스트 시스템 — 장면의 조건 추적 (장소, 시간, 날씨, 분위기)
- 기억 시스템 — 선택의 누적과 지연 귀결
실제 장면은 이 세 개의 조합으로 열린다.
감정 상태가 특정 조건을 충족하고, 장면 컨텍스트가 맞고, 과거 플래그가 쌓여 있으면 — 특정 이벤트가 발생한다. 이 세 가지가 동시에 작동하기 때문에, 같은 시점에서도 플레이어에 따라 완전히 다른 장면을 경험하게 된다.
이건 복잡하다. 하지만 이 복잡함이 "관계가 진짜처럼 느껴지는" 이유다. 현실의 관계도 감정과 상황과 기억의 조합으로 움직이니까.
AI에게 이 시스템의 관리 복잡도에 대해 물었더니, "사람이 직접 모든 조합을 관리하는 건 불가능에 가깝지만, 핵심 장면 20~30개만 이 구조로 만들고 나머지는 단순 분기로 처리하면 현실적"이라고 했다. 맞는 판단이다. 모든 장면에 3중 조건을 거는 건 오버엔지니어링이다. 감정적으로 중요한 장면에만 이 구조를 적용하면 된다.
기억이 만드는 감정의 무게
이 시스템을 설계하면서 가장 흥미로웠던 건, 기억의 무게라는 개념이었다.
같은 이벤트도 과거에 비슷한 경험이 있었는지에 따라 무게가 달라진다. 처음 약속을 어기는 건 실수일 수 있다. 두 번째는 패턴이 된다. 세 번째는 성격이 된다.
이걸 시스템으로 표현하면, 같은 이벤트라도 플래그 누적에 따라 감정 변화량이 달라지는 구조가 된다.
def apply_broken_promise():
flags["broke_promise"] += 1
count = flags["broke_promise"]
if count == 1:
rel["trust"] -= 5 # 실수
elif count == 2:
rel["trust"] -= 10 # 패턴
rel["resentment"] += 5
else:
rel["trust"] -= 20 # 성격
rel["resentment"] += 10
첫 번째는 "그럴 수 있지". 두 번째는 "또?" 세 번째는 "이 사람은 원래 이런 사람이구나." 같은 행동이 반복될수록 해석이 바뀌고, 감정의 크기가 달라진다.
이건 현실의 관계에서도 정확히 그렇게 작동한다. 한 번의 잘못은 용서할 수 있지만, 패턴화된 잘못은 관계의 본질을 바꾼다. 이 원리를 시스템에 넣으면, 선택이 진짜 무게를 갖게 된다.
다음 편에서는 이 시스템 위에서 살아갈 캐릭터를 만든다. 행동과 내면이 다른, 단순하지 않은 인물을 어떻게 설계하는가.
다음 편: 행동과 내면이 다른 캐릭터를 만드는 법
댓글
댓글 쓰기