장면이 감정을 밀어올린다 — 컨텍스트 시스템

 


감정 시스템을 설계했다. 3계층 모델로 캐릭터의 성향, 순간 감정, 관계 상태를 분리했다. 사랑을 직접 올리지 않고 조건 조합으로 발생시키는 구조도 잡았다.

그런데 AI와 대화를 이어가면서 빠진 조각이 하나 보였다. 감정만 추적하면 반쪽이라는 거다.

"괜찮아?"

이 한마디를 생각해보자. 비 오는 밤, 집 앞, 단둘이 있을 때 이 말을 들으면 — 걱정과 보호, 친밀감이 올라간다. 학교 복도, 점심시간, 친구들 사이에서 이 말을 들으면 — 가벼운 안부일 뿐이다. 싸운 직후, 추운 저녁에 이 말을 들으면 — 화해 시도이고, 미안함이 섞여 있다.

대사는 같다. 감정이 다르다. 차이를 만드는 건 장면이다.

장면 상태(Scene Context)

AI가 제안한 구조는 이렇다. 감정 변수와 별개로, 장면의 상태를 추적하는 딕셔너리를 두는 것.

default scene_ctx = {
    "location": "classroom",
    "time": "noon",
    "weather": "clear",
    "privacy": 0,        # 0=공개, 1=반공개, 2=둘만
    "mood": "neutral"    # calm / warm / tense / lonely / nostalgic
}

그리고 이벤트는 감정만 보지 말고, 감정 + 장면 조건으로 열어야 한다.

if trust >= 40 and scene_ctx["time"] == "night" and scene_ctx["weather"] == "rain" and scene_ctx["privacy"] >= 1:
    jump vulnerable_conversation

신뢰가 40 이상이고, 밤이고, 비가 오고, 어느 정도 사적인 공간이면 — 속마음을 꺼내는 대화가 열린다. 이러면 왜 그 장면에서 그런 이야기가 나왔는지가 납득된다.

장소는 배경이 아니라 심리 증폭기

AI와 장소의 역할을 정리했다. 단순한 배경이 아니라, 각 장소가 특정 감정을 증폭하는 기능을 한다.

교실 — 사회성의 공간. 체면, 시선, 공개적 긴장. 여기서의 대화는 항상 "다른 사람이 볼 수 있다"는 제약 아래 놓인다. 솔직해지기 어려운 공간.

옥상/빈 교실 — 고립의 공간. 비밀스러운 대화, 고백, 단절. 둘만의 공간이 만드는 긴장감. 여기서는 일상에서 못 하는 말이 나온다.

집 앞/현관 — 경계선의 공간. 들어갈까 말까. 관계 진전 직전의 망설임. "여기서 헤어진다"와 "여기서 들어간다"의 갈림길.

버스 정류장/역 — 타이밍의 공간. 잠깐의 우연. 놓치면 끝나는 순간. 이별과 만남이 교차하는 장소.

축제/놀이공원 — 들뜸의 공간. 평소와 다른 분위기. 관계 오인이 쉽고, 질투 유발도 쉬움. 일상에서 벗어난 감정이 나온다.

이 각각의 장소가 감정에 다른 색을 입힌다. 같은 "고백" 이벤트라도 교실에서 하는 것과 옥상에서 하는 것과 버스 정류장에서 하는 건 완전히 다른 장면이 된다.

날씨는 장식이 아니라 트리거

날씨도 단순한 비주얼 효과가 아니다. 감정 트리거로 작동한다.

 — 고립을 만든다. 우연한 밀착(우산 공유), 감정 노출, 기억 강화. 비 오는 날의 대화는 맑은 날보다 무겁게 느껴진다. 물리적으로 가까워질 핑계가 생기니까.

 — 정지감을 만든다. 특별한 하루, 회상, 약속. 시간이 멈춘 듯한 느낌. 눈이 내리는 장면은 일상에서 벗어난 감각을 준다.

맑음 — 일상성. 밝은 관계, 가벼운 대화. 감정보다 행동 중심의 장면에 적합하다.

흐림 — 미해결 감정. 예감. 무거운 대화의 전조. 뭔가 일어날 것 같은 불안감.

그리고 여기서 중요한 설계 결정이 하나 있다. 날씨는 플레이어가 선택할 수 없다. 현실에서도 그렇지 않은가. 날씨는 통제할 수 없는 변수다. 만나러 가는 중에 눈이 많이 와서 못 갈 수도 있고, 헤어지자고 말하는 날 갑자기 비가 올 수도 있다. 이 통제 불가능성이 오히려 감정을 강하게 만든다. 내가 고른 게 아닌데 이 상황이 됐다는 무력감. 그게 관계의 현실성을 만든다.

시스템적으로는 날씨를 서사적 배치(특정 이벤트에 맞춘 고정 날씨)와 반랜덤(확률 기반이지만 서사에 방해되지 않는 범위)을 섞어서 운영하면 된다. 핵심 장면의 날씨는 시나리오가 결정하고, 일상 장면의 날씨는 시스템이 결정하는 구조.

AI가 이걸 정리해줬을 때, "날씨를 감정의 메타포로 쓰는 건 문학에서 이미 오래된 기법"이라고 했다. pathetic fallacy — 감정을 자연 환경에 투영하는 수법. 미연시에서도 같은 원리가 작동한다. 다만 미연시에서는 이걸 시스템으로 구현할 수 있다는 차이가 있다. 그리고 플레이어가 통제할 수 없게 만들면, 날씨는 단순한 배경이 아니라 운명처럼 작동한다.

시간대의 감정적 의미

시간대도 중요한 컨텍스트다.

아침 — 시작. 어색함. 아직 감정이 정리 안 됨. 전날 밤의 일을 오전에 다시 마주하는 어색함.

오후 — 현실적. 사건 진행. 일상의 시간. 관계보다 행동이 중심.

저녁 — 감정이 느슨해짐. 하루의 피로가 방어벽을 낮춘다. 깊은 대화에 진입하기 쉬운 시간.

 — 솔직함. 외로움. 상실 공포, 고백, 후회와 잘 붙는 시간. 밤에 하는 말은 낮보다 무겁다. 이건 현실에서도 마찬가지다. 밤에 보낸 문자를 아침에 후회하는 경험은 누구나 있다.

같은 이벤트, 다른 장면

이 시스템의 힘을 보여주는 예시 하나. 우산 이벤트.

if scene_ctx["weather"] == "rain":
    if rel["trust"] >= 30:
        "그는 자연스럽게 우산을 내 쪽으로 기울였다."
        $ rel["affection"] += 3
        $ flags["shared_umbrella"] = True
    else:
        "같이 쓰고 가자고는 했지만, 어색한 침묵만 길어졌다."
        $ rel["tension"] += 2

같은 비, 같은 우산. 관계 상태에 따라 완전히 다른 장면이 된다. 신뢰가 쌓인 관계에서는 자연스러운 친밀감으로 이어지고, 아직 어색한 관계에서는 긴장만 높아진다.

이게 컨텍스트 시스템의 핵심이다. 같은 이벤트도 조건에 따라 다른 감정을 만든다.

최소 시작 세트

AI와 정리한 현실적인 시작 세트는 이 정도다.

  • 장소 5개
  • 시간대 4개 (아침, 오후, 저녁, 밤)
  • 날씨 4개 (맑음, 흐림, 비, 눈)
  • 분위기 5개 (calm, warm, tense, lonely, nostalgic)
  • 프라이버시 3단계 (공개, 반공개, 둘만)

이 정도만으로도 5 x 4 x 4 x 5 x 3 = 1,200개의 컨텍스트 조합이 나온다. 물론 전부 다 구현할 필요는 없다. 핵심 장면에서 의미 있는 조합만 골라서 분기를 만들면 된다.

AI에게 "이 조합 중 감정적으로 가장 강력한 것 10개를 골라봐"라고 했더니, 흥미로운 결과가 나왔다. 밤+비+둘만+tense, 저녁+맑음+둘만+nostalgic 같은 조합이 상위에 올랐다. AI의 선택이 내 직감과 대부분 일치했지만, 몇 개는 의외였다. "아침+맑음+공개+calm"이 높은 순위에 있었는데, AI의 설명은 "폭풍 전의 고요함으로 쓸 수 있다"는 것이었다. 반전의 배경으로서의 일상. 이건 내가 못 떠올린 관점이었다.

중요한 건 플레이어가 "왜 이 장면에서 이런 감정이 나왔는지"를 자연스럽게 납득하는 거다. 비 오는 밤에 둘만 있으니까 속마음이 나온 거다. 축제 날 사람 많은 곳에서 만났으니까 평소와 다른 모습을 본 거다. 이 납득감이 감정의 진정성을 만든다.

다음 편에서는 세 번째 핵심 시스템을 다룬다. 기억 시스템. 선택의 결과를 즉시 보여주지 않고, 나중에 터뜨리는 기술.


다음 편: 선택의 결과를 늦추는 기술 — 기억 시스템 설계

댓글

이 블로그의 인기 게시물

사랑을 직접 올리지 않는 설계

감정을 변수로 옮기다 — 3계층 감정 모델

시작의 충동 — "타로 웹앱을 만들어볼까?"