텍스트 게임 실패 상태: 좌절 상황과 입력 또는 전송 문제 구분하는 법
채팅 스타일의 텍스트 게임에서 턴이 성공하지 못했다고 해서 항상 플레이어가 잘못된 선택을 했다는 의미는 아닙니다. 장면 내에서 타당한 이야기상의 좌절에 도달했을 수도 있고, 게임이 해당 표현을 지원하지 않을 수도 있으며, 캐릭터가 행동하는 데 필요한 지식이 부족하거나, 메시지가 제대로 전송되지 않았을 수도 있습니다. 이러한 상황들은 저마다 다른 피드백과 각기 다른 재시도 효과를 필요로 합니다. 먼저 원인을 분류한 다음, 무엇이 바뀌었는지 그리고 다음에 어떤 일이 일어날 수 있는지 플레이어에게 알려주세요.
무엇이 실패했는지 묻는 것부터 시작하기
실용적인 첫 번째 질문은 바로 이것입니다. 게임이 의도된 행동을 이해하고 이야기 속에서 이를 해결(resolve)했는가? 만약 그렇다면, 그 결과는 좌절 상황일 수 있습니다. 그렇지 않다면 문제가 입력인지, 캐릭터의 정보인지, 아니면 시스템의 전송 문제인지 판단하세요. 이 4단계 구분은 인터랙티브 픽션 시스템이 파싱, 세계 규칙, 스토리 흐름, 실행 취소(undo) 동작을 분리하는 방식에서 착안한 디자인 보조 도구이며, 보편적인 기술 표준은 아닙니다. 예를 들어 Inform 문서에서는 파서와 시뮬레이션된 세계 모델을 게임의 별개 구성 요소로 설명하며, 파서는 명령어가 일치하지 않은 여러 가지 서로 다른 이유를 보고할 수 있습니다. (Inform 6 Designer’s Manual: Introduction, Inform 6 Designer’s Manual §33: Helping the parser out of trouble)
메시지를 게임의 응답 계약(response contract)의 일부로 다루세요. 메시지는 세 가지 질문에 답해야 합니다. 무슨 일이 일어났는가, 이야기의 상태가 바뀌었는가, 그리고 플레이어가 이제 무엇을 할 수 있는가. “종이배는 건너편 강둑에 닿기 전에 뒤집힙니다. 접힌 쪽지는 여전히 당신의 손에 있습니다. 더 넓은 수로를 시도해보거나 다른 건너편 이동 방법을 선택할 수 있습니다”와 같은 짧은 문장은 좌절 상황, 유지된 아이템, 다음 단계를 명확하게 보여줍니다.
1. 타당한 이야기상의 좌절
게임이 행동을 이해하고, 현재 장면에 비추어 확인한 뒤, 세계관 내의 결과를 의도적으로 도출해 냈을 때 좌절 상황이 적절합니다. 플레이어가 한 번에 너무 많은 도서관 책을 들고 가려다 한 권이 근처 의자로 미끄러져 떨어질 수도 있습니다. 또는 얕은 개울 건너편에 닿기 전에 종이배에 물이 찰 수도 있습니다. 이 결과는 상호작용을 플레이어에 대한 평가로 만들지 않으면서도 불편하거나 뜻밖의 상황이 될 수 있습니다.
핵심적인 특징은 상태 변화입니다. 장면에서 배가 가라앉았다고 나온다면, 그 결과는 스토리 내에서 사실이어야 합니다. 플레이어가 그것을 건져낼 수 있다면 방법을 설명하고, 배가 사라졌다면 같은 텍스트를 다시 시도해도 그 사건이 취소되지 않는다는 점을 명확히 해야 합니다. 재시도는 다른 배를 만들거나, 다른 경로를 선택하거나, 변화된 장면에서 이어 나가는 것을 의미할 수 있습니다. 정확한 선택지는 게임의 규칙에 따라 달라집니다.
유용한 좌절 메시지는 시도된 행동, 결과, 그리고 가능한 후속 조치를 언급합니다. 단지 결과가 좋지 않았다는 이유만으로 지원되는 행동을 입력 오류처럼 포장해서는 안 됩니다. 반대로, 게임이 스토리 상태를 실제로 바꾸지 않았다면 어떠한 결과가 발생한 것처럼 암시하지 마세요. 이러한 구분을 통해 플레이어는 자신이 새로운 상황에서 이어 나가는 중인지, 아니면 처리되지 않은 명령어를 수정하는 중인지 이해할 수 있습니다.
2. 지원되지 않는 입력: 게임이 표현을 해석할 수 없음
지원되지 않는 입력이란 시스템이 플레이어의 메시지를 지원하는 행동에 매핑할 수 없음을 의미합니다. 게임이 몇 가지 버튼 선택지만 허용하는 장면에서 플레이어가 “제빵사에게 살구에 대해 물어보기”라고 입력하거나, 파서가 인식하지 못하는 이름을 사용할 수 있습니다. 이는 플레이어의 아이디어가 지닌 질이 아니라, 인터페이스의 수용 범위에 대해 말해줄 뿐입니다.
인터랙티브 픽션 파서는 유용한 피드백이 왜 구체적이어야 하는지 잘 보여줍니다. Inform은 인식할 수 없는 동사, 불분명한 지칭 대상, 너무 부족한 입력, 보이지 않는 대상에 대해 각기 다른 오류를 나열합니다. 또한 매뉴얼에서는 게임이 일반적인 파서 오류를 어떻게 더 유익한 메시지로 대체할 수 있는지 보여줍니다. (Inform 7 §18.35: Printing a parser error) 채팅 게임이라면 다음과 같이 간결하게 응답할 수 있습니다. “여기서는 ‘살구에 대해 물어보기’를 해석할 수 없습니다. 배달에 대해 물어보거나 계산대에서 대화 주제를 선택할 수 있습니다.”
수정 경로를 제공하세요. 인터페이스에 따라 이는 인식 가능한 선택지를 보여주거나, 핵심적인 질문 하나를 던져 명확히 하도록 하거나, 플레이어에게 다른 말로 다시 표현해 보라고 권하는 것을 의미할 수 있습니다. 지원되지 않는 명령어를 이야기 속 실패로 서술하지 마세요. 어떤 행동도 실행되지 않았다면 이를 명확히 밝혀야 합니다. 이전 장면을 그대로 유지하고, 수정된 입력을 보내는 것은 스토리 사건을 되감는 것이 아니라 같은 순간을 다시 시도하는 것임을 명확히 하세요.
3. 캐릭터 지식 부족: 타당한 질문이지만 아직 답이 없음
때로는 입력 내용을 이해할 수 있지만, 캐릭터가 그에 따라 행동할 만큼 충분히 알지 못할 수 있습니다. 가게 점원이 영수증을 확인하기 전에, 플레이어가 점원에게 소포가 어디로 배달되었는지 물어볼 수 있습니다. 게임은 질문을 인식하면서도 명확한 답을 올바르게 유보할 수 있습니다.
이는 지원되지 않는 입력과는 다릅니다. 주제나 행동 자체는 타당하며, 그 한계는 이야기 속 캐릭터가 가진 정보에 기인합니다. 그 경계를 분명하게 표시하세요. 예를 들어 다음과 같습니다. “미나는 배달 전표를 보지 못했기 때문에 거리 이름을 말할 수 없습니다. 소포 라벨은 여전히 계산대 위에 놓여 있습니다.” 플레이어가 라벨을 살펴보거나 다른 사람에게 물어보거나 나중에 다시 올 수 있다면 그 경로를 언급하세요. 그렇지 않다면 힌트를 지어내거나 질문이 잘못된 것처럼 다루기보다는 실제로 알려진 사실을 말해주세요.
이 응답이 시간을 진행시키거나 상태를 변경하는지 결정하세요. 질문하는 것이 게임 세계 내의 정상적인 행동이라면, 게임은 해당 대화를 기록하거나 나중에 캐릭터가 반응하는 방식을 변경할 수 있습니다. 게임이 지식 관련 질문을 소모 없는(free) 행동으로 의도했다면, 장면을 보존하고 다른 질문이 이어질 수 있도록 하세요. 플레이어가 정보를 요청하는 과정에서 기회가 조용히 소모되었는지 추측하게 해서는 안 됩니다.
4. 기술적 전송 실패: 행동이 스토리에 도달조차 못했을 수 있음
전송 실패는 이야기 외부에서 발생합니다. 응답 시간이 초과되거나, 두 번 나타나거나, 문장 중간에 멈추는 식입니다. 게임은 행동이 처리되었음을 확실히 알지 못한다면 캐릭터가 행동했다거나 스토리가 진행되었다고 안전하게 주장할 수 없습니다. 이는 이야기 속 결과인 “배달원이 주소를 찾지 못했습니다”와 같은 세계관 내 메시지와는 구별됩니다.
명확한 상태 표현을 사용하고 알려진 상태를 보고하세요. 게임이 해당 턴이 처리되지 않았음을 확인할 수 있다면 그렇게 알리고 플레이어가 다시 보낼 수 있도록 하세요. 턴의 처리 여부를 확인할 수 없다면 행동이 두 번 실행될 수 있으므로 무작정 반복하도록 유도하지 마세요. 불확실성을 짧게 설명하고 현재 장면을 확인하거나 마지막으로 확인된 시점부터 다시 시작할 수 있는 방법을 제공하세요. 이는 입력 불일치와 스토리 결과를 구별해야 할 필요성에서 착안한 디자인 권장 사항입니다. 인용된 픽션 시스템들이 채팅 전송 실패에 대한 보편적인 프로토콜을 규정하고 있지는 않습니다.
전송이 복구되면 마지막으로 확인된 메시지를 복원하거나 장면과 완료된 것으로 확인된 가장 최근 행동의 간결한 요약을 보여주세요. 요약은 새로운 스토리 턴이 아니라 요약으로 표시해야 합니다. 플레이어가 재전송을 선택하는 경우, 그것이 새로운 시도로 처리되는지 여부를 명확히 하세요. 이러한 사소한 투명성이 중복 행동을 의도적인 반복으로 오인하는 것을 방지합니다.
재시도(Retry), 실행 취소(Undo), 이어하기(Resume)의 의미 분리하기
이 단어들은 서로 다른 상태 효과를 나타내므로 혼용하지 마세요. 재시도(Retry)는 현재 상태에서 행동을 다시 제출하는 것이며, 이미 발생한 결과를 조용히 지워서는 안 됩니다. 실행 취소(Undo)는 이전 상태를 복원합니다. 이어하기(Resume)는 중단 후 마지막으로 확인된 상태에서 계속 진행합니다. 다시 시작(Restart)은 이야기를 처음부터 다시 시작합니다.
Twine의 Harlowe 매뉴얼에서는 실행 취소(undo)를 이전 구절(passage)로 돌아가고 현재 구절에서 이루어진 변수 변경 사항을 지우는 것으로 설명하며, 다시 시작(restart)은 페이지를 새로고침하여 이야기를 다시 시작하는 것으로 설명합니다. 또한 실행 취소 기록에 제한이 있을 수 있음을 언급합니다. 이러한 메커니즘은 컨트롤이 모호한 “다시 시도” 라벨에 의존하는 대신 그 적용 범위를 명확히 전달해야 하는 이유를 잘 보여줍니다. (Harlowe 3.3.8 Manual: undo and restart)
간결한 결정 순서는 인터페이스의 일관성을 유지하는 데 도움이 됩니다.
게임이 행동을 이해하고 해결했는가? 그렇다면 이야기 속 결과와 남아 있는 상태를 보고하세요.
시스템이 해당 표현을 지원되는 행동에 매핑하지 못했는가? 해석할 수 없는 부분을 설명하고 수정 경로를 제시하며, 장면을 유지하세요.
행동은 이해되었으나 캐릭터에게 정보가 부족한가? 지식의 한계와 더 많은 정보를 얻을 수 있는 이야기 속 방법을 설명하세요.
처리 또는 전송이 불확실한가? 확인된 내용을 밝히고 확인하거나 계속 진행할 수 있는 안전한 방법을 제공하세요.
플레이어가 되돌아가길 원한다면 컨트롤에 “실행 취소(Undo)”라고 표시하고 복원되는 순간이나 변경 사항을 명시하세요. “다시 시작(Restart)”은 처음부터 시작하는 용도로만 남겨두세요.
각 실패 메시지를 위한 간단한 일관성 검사
응답을 배포하기 전에 스토리 상태와 대조하여 확인하세요. 좌절 상황을 설명하고 있다면, 세계가 실제로 변화했는가? 지원되지 않는 입력을 설명하고 있다면, 게임이 행동이 발생한 것처럼 꾸며내지 않았는가? 캐릭터에게 지식이 부족하다면, 응답이 이를 명령어 누락과 구별하고 있는가? 전송이 실패했다면, 플레이어는 턴이 처리되었는지 알고 있는가? 마지막으로, 재시도나 이어하기 컨트롤이 라벨이 약속한 대로 동작하는가?
텍스트 게임은 피드백을 통해 플레이어가 캐릭터가 경험한 것과 인터페이스가 수행하지 못한 것을 구별할 수 있을 때 공정하게 느껴집니다. 명확한 결과는 스토리를 보존하고, 구체적인 입력 안내는 다른 시도를 가능하게 하며, 솔직한 지식의 한계는 픽션의 일관성을 유지하고, 명확히 규정된 복구 경로는 플레이어에게 신뢰할 수 있는 앞으로의 진행 방향을 제공합니다.
