텍스트 어드벤처에서 연속 행동을 입력받았을 때, 어디까지 실행하고 멈췄는지 알리는 법
한 번의 입력에 담긴 여러 행동이 중간에 막혔다면, 무엇이 이미 반영됐고 어느 단계가 실패했으며 무엇은 아직 시작하지 않았는지 알려야 합니다. 복합 명령 실행 보고서로 연결 표현의 규칙, 행동 간 의존 관계, 다시 입력할 때 이어서 실행할 수 있는 조건과 범위를 명확히 정리합니다.

들어가며
연속된 행동을 입력받으면 먼저 지시를 나누고, 미리 정한 규칙에 따라 하나씩 처리합니다. 중간에 막히면 ‘완료’, ‘현재 막힌 단계’, ‘미시작’을 명확히 구분하고, 이미 반영된 결과는 유지해야 합니다. ‘문이 닫혀 있어 계속할 수 없습니다’라고만 답해 플레이어가 램프를 집어 들었는지, 커튼은 건드렸는지 추측하게 해서는 안 됩니다.
이 글에서는 ‘램프를 집어 들고, 어두운 방에 들어가고, 커튼을 젖힌다’라는 입력을 결과를 대조할 수 있는 실행 보고서로 바꿔 봅니다. 아래의 상황, 규칙, 응답은 모두 교육 목적으로 설계한 가상의 예시입니다. 실제 사용자 경험이나 실측 결과, 직접 테스트한 기록이 아니며, DramaFork의 제품 기능을 나타내지도 않습니다.
연결 표현이 실행 순서를 어떻게 정하는지 먼저 약속하기
한 문장에 동사가 세 개 있다고 해서 세 행동이 함께 일어날 수 있는 것은 아닙니다. 이 예시에서는 쉼표로 이어진 행동을 적힌 순서대로 처리합니다. ‘그런 다음’은 앞 단계가 끝난 뒤에야 다음 단계를 시작하라는 명시적인 지시로 봅니다. 어느 한 단계가 막히면 해당 입력의 후속 행동은 모두 멈춥니다. 이런 입력을 받기 전에 이 규칙을 설명해야 합니다.
따라서 ‘램프를 집어 들고, 그런 다음 어두운 방에 들어가고, 그런 다음 커튼을 젖힌다’는 세 단계의 실행 대기열이 됩니다. 다른 상황에서는 세 번째 행동을 독립적으로 실행할 수 있더라도, 실패한 두 번째 단계를 건너뛰어 임의로 실행해서는 안 됩니다. 플레이어가 순서를 지정했기 때문입니다.
‘동시에’에는 별도의 규칙이 필요합니다. 제작자는 먼저 행동들을 병렬로 실행할 수 있는지 확인한 뒤, 입력된 행동 묶음 전체를 받아들일지 결정해야 합니다. 이 예시의 세 행동은 동시에 처리하기에 적합하지 않습니다. 인물은 아직 문밖에 있어 실내 커튼에 곧바로 손을 댈 수 없기 때문입니다. 플레이어가 동시 실행을 요구한다면 이렇게 답할 수 있습니다. ‘이 행동들은 동시에 실행할 수 없습니다. 이번에는 어떤 행동도 아직 시작하지 않았습니다. 순서대로 실행하도록 다시 입력해 주세요.’ ‘동시에’를 몰래 ‘그런 다음’으로 바꿔서는 안 됩니다.
실제로 병렬 실행을 허용하는 상황이라면, 한 행동의 실패가 다른 행동에 영향을 주는지, 각 결과는 언제 반영되는지도 따로 설명해야 합니다. 이 글의 보고서는 순차 실행 대기열만 다루며, 병렬 행동 묶음을 억지로 하나의 실행 순서로 배열하지 않습니다.
행동의 의존 관계와 중단 규칙을 따로 기록하기
초기 상태를 정합니다. 오일 램프는 문밖 탁자 위에 있고, 인물은 아무것도 들지 않은 채 어두운 방의 닫힌 문 앞에 서 있습니다. 커튼은 방 안에 있습니다. 여기서는 문이 닫혀 있으면 곧바로 들어갈 수 없다는 규칙만 둡니다. 문이 잠겨 있다고 추가로 추론하거나, 플레이어 대신 문을 여는 행동을 끼워 넣지 않습니다.
먼저 행동과 완료 조건을 나눕니다.
| 단계 | 행동 | 시작 전 확인 사항 | 완료 후 대조할 수 있는 상태 |
|---|---|---|---|
| 하나 | 오일 램프 집어 들기 | 램프에 손이 닿고 집어 들 수 있음 | 램프가 탁자 위에서 손으로 옮겨짐 |
| 둘 | 어두운 방에 들어가기 | 첫 단계가 완료됐고 입구를 통과할 수 있음 | 인물이 어두운 방 안에 있음 |
| 셋 | 커튼 젖히기 | 두 번째 단계가 완료됐고 커튼에 손이 닿음 | 드리워져 있던 커튼이 젖혀짐 |
여기에는 두 종류의 관계가 있습니다. ‘램프를 집어 든 뒤 방에 들어간다’는 입력 순서에서 비롯됩니다. 이 예시는 방에 들어가려면 반드시 램프를 들고 있어야 한다고 정하지 않았습니다. 반면 ‘안으로 들어가야 커튼에 손이 닿는다’는 장면의 공간적 조건에서 비롯됩니다. 둘을 구분해야 명령을 고쳐 쓴 뒤에도 어떤 제약이 여전히 유효한지 알 수 있습니다.
중단 규칙도 ‘의존 조건을 충족하지 못하면 멈춘다’라고만 적어서는 부족합니다. 이 예시는 막힌 행동이 나오면 남은 대기열 전체를 중단합니다. ‘그런 다음’이 어디까지 실행되는지 예측할 수 있게 하기 위해서입니다. 다만 이 규칙을 따르면 뒤에 독립적으로 실행 가능한 행동이 있더라도 플레이어가 별도로 입력할 때까지 기다려야 합니다. 작품에서 실패한 행동을 건너뛰고 계속 실행하도록 허용한다면, 미리 그 규칙을 알리고 행동별로 결과를 보고해야 합니다. 그때그때 규칙을 바꿔서는 안 됩니다.
보고서를 채운 뒤 플레이어가 이해할 문장으로 다듬기
재사용할 수 있는 보고서 항목은 다음과 같습니다. 원래 입력|연결 표현 규칙|행동 분해|의존 관계|중단 지점|이미 반영된 결과|남은 지시|이어서 실행할 조건. 서술문을 쓰기 전에 이 항목부터 채우면 문장을 매끄럽게 다듬다가 완료 범위를 빠뜨리는 일을 방지할 수 있습니다.
이 예시를 모두 채우면 다음과 같습니다.
- 원래 입력: 램프를 집어 들고, 어두운 방에 들어가고, 커튼을 젖힌다.
- 연결 표현 규칙: 순서대로 실행하며, 막히면 후속 행동을 중단한다.
- 행동 분해: 하나, 램프 집어 들기. 둘, 들어가기. 셋, 커튼 젖히기.
- 의존 관계: 둘은 하나 다음에 실행한다. 셋은 둘 다음에 실행하며, 대상에 손이 닿으려면 방 안으로 들어가야 한다.
- 중단 지점: 두 번째 단계. 문이 닫혀 있어 들어가지 못했다.
- 이미 반영된 결과: 오일 램프를 손에 들고 있으며, 인물은 여전히 문밖에 있다. 이 예시에서 이번에 막힌 시도는 다른 상태 변화를 일으키지 않았다.
- 남은 지시: 어두운 방에 들어가기, 커튼 젖히기. 들어가기는 시도했지만 완료하지 못했고, 커튼 젖히기는 아직 시작하지 않았다.
- 이어서 실행할 조건: 먼저 입구를 통과할 수 있게 한 뒤 플레이어가 남은 행동을 입력한다. 이 명령은 자동 재개를 위해 대기 상태로 남지 않는다.
플레이어에게 보여 줄 문장은 한 문단으로 다듬을 수 있습니다. ‘탁자에서 오일 램프를 집어 들었습니다. 어두운 방의 문이 닫혀 있어 들어가지 못했고, 여전히 램프를 든 채 문밖에 서 있습니다. 이 명령은 어두운 방에 들어가는 단계에서 멈췄습니다. 커튼을 젖히는 행동은 아직 시작하지 않았으며, 커튼에는 손대지 않았습니다. 입구를 통과할 수 있게 되면 “어두운 방에 들어가고, 그런 다음 커튼을 젖힌다”를 다시 입력해 주세요.’
이 응답은 이미 일어난 일을 먼저 알리고, 장애물을 설명한 다음, 남은 행동의 범위를 정합니다. 중간에 막혔다고 명령 전체가 무효가 된 것처럼 쓰지도 않고, 그 기회에 플레이어 대신 문을 열지도 않습니다.
세 가지 결과로 완료 범위 점검하기
원고를 검토할 때는 같은 초기 상태에서 세 가지 경우를 각각 가정하고, 매번 필요한 조건만 바꿉니다. 앞선 검토의 결과를 다음 검토에 슬쩍 가져와서는 안 됩니다.
첫 단계에서 실패: 오일 램프가 고정돼 있어 집어 들 수 없다고 가정합니다. 보고서는 이렇게 써야 합니다. ‘오일 램프를 집어 들지 못했습니다. 램프는 여전히 탁자 위에 있으며, 이 명령은 첫 단계에서 멈췄습니다. 어두운 방에 들어가기와 커튼 젖히기는 모두 아직 시작하지 않았습니다.’ 완료된 단계가 하나도 없으므로 ‘램프를 들고 문 앞으로 다가갔다’라고 쓸 수 없습니다.
중간에 실패: 앞서 사용한, 방문이 닫힌 설정을 적용합니다. 첫 단계는 완료됐고, 두 번째 단계는 막혔으며, 세 번째 단계는 시작하지 않았습니다. 인물의 위치, 램프의 위치, 커튼의 상태를 확인합니다. 각각 문밖, 손에 든 상태, 드리워진 상태여야 합니다.
모두 완료: 문이 열려 있고 길을 통과할 수 있으며, 커튼에 손이 닿고 젖힐 수도 있다고 가정합니다. 응답은 이렇게 쓸 수 있습니다. ‘오일 램프를 집어 들고 어두운 방에 들어가 커튼을 젖혔습니다. 세 단계가 모두 완료됐습니다. 램프는 손에 들고 있고, 당신은 방 안에 있으며, 커튼은 젖혀져 있습니다. 남은 지시는 없습니다.’
이는 텍스트로 진행한 시뮬레이션이지, 성공률을 검증한 결과가 아닙니다. ‘미완료’가 ‘아무 영향도 없음’을 뜻하지 않는다는 점도 주의해야 합니다. 실패한 행동이 물품을 소모하거나 위치를 바꿨다면, 실제로 일어난 결과를 보고서에 추가해야 합니다. 이 예시에서는 그런 변화가 없다고 명시했지만, 그 설정을 모든 실패 행동에 일반화해서는 안 됩니다.
다시 입력하면 현재 상태를 기준으로 이어서 실행하기
이어서 실행할 때 가장 혼동이 적은 방법은 막힌 행동과 그 뒤의 행동만 입력하는 것입니다. 중간에 막힌 뒤 플레이어는 먼저 입구 문제를 해결하고, ‘어두운 방에 들어가고, 그런 다음 커튼을 젖힌다’를 입력합니다. 램프를 다시 집어 들 필요는 없습니다. 중단 보고서의 남은 지시는 그대로 복사해 이어서 실행할 입력문으로 쓸 수 있습니다.
플레이어가 원래의 세 단계 명령을 그대로 다시 보낸다면, 제작자는 반복 행동을 어떻게 처리할지 명확히 정해야 합니다. 이 예시에서는 다음과 같이 약속할 수 있습니다. 같은 램프를 여전히 들고 있다면 ‘램프 집어 들기’를 ‘목표 상태가 이미 충족돼 이번에는 반복 실행하지 않음’으로 기록하고, 들어갈 수 있는 조건을 다시 확인합니다. 문이 아직 닫혀 있다면 두 번째 단계에서 다시 멈춥니다. 램프를 내려놓은 상태라면 이전의 완료 기록을 그대로 적용할 수 없습니다.
이 처리는 현재 상태로 목표 달성 여부를 확인할 수 있는 행동에만 적합합니다. ‘문 두드리기’나 ‘물 한 모금 마시기’는 다시 하면 새로운 결과가 생길 수 있으므로, 문구가 같다는 이유만으로 건너뛸 수 없습니다. 플레이어가 실패한 행동을 재시도하려는 것인지, 같은 행동을 한 번 더 하려는 것인지 판단할 수 없다면 먼저 뜻을 확인하고, 이번에는 아직 실행하지 않았다고 알려야 합니다.
원고를 넘기기 전에 각 동사를 완료, 막힘, 미시작으로 분류하고, 최종 상태와 이어서 실행할 입력문이 일치하는지 확인합니다. 이 보고서는 행동과 대상이 모두 명확한 순차 명령에 적용됩니다. 대상의 모호함을 해결하는 용도가 아니며, 실패할 때마다 단서나 서사적 보상을 덧붙이라고 요구하는 것도 아닙니다.






