선택형 대화 게임의 화면은 단순합니다. 대사 세 개 가운데 하나를 고르면 결과가 나옵니다. 하지만 무대 5개, 배역 2개, 루트마다 10개 장면, 장면마다 따로 만든 오답 엔딩까지 붙으면 조건문이 금세 감당하기 어려워집니다. 각본대로를 만들며 가장 중요하게 본 것은 화면의 개수가 아니라 한 판의 진행 상황과 오래 남을 수집 기록을 분리하는 일이었습니다.

대사와 실행 코드를 나눕니다

장면마다 들어가는 정보는 거의 같습니다.

  • 현재 대사와 말하는 사람
  • 선택지 세 개
  • 선택지가 정답인지 아닌지
  • 오답일 때 보여 줄 엔딩 번호와 문구
  • 정답 뒤에 이어질 다음 장면

이 내용을 클릭 처리 코드의 조건문에 모두 넣으면 대사 한 줄을 고칠 때도 실행 로직을 건드려야 합니다. 루트별 대사를 배열이나 JSON 파일에 모아 두고, 실행 코드는 ‘현재 장면을 읽고 선택 결과를 반영한다’는 역할만 맡기는 편이 훨씬 안전합니다.

저장에 쓰는 고유 번호는 화면에 보이는 제목과 따로 둡니다. 엔딩 이름은 나중에 바뀔 수 있지만 저장 키까지 달라지면 이미 모은 도감이 끊깁니다. 무대-배역-장면-선택지처럼 서로 겹치지 않고 오래 유지할 수 있는 키가 필요합니다.

상태를 세 덩어리로 나눕니다

1. 지금 플레이 중인 판

현재 무대와 배역, 장면, 남은 힌트와 이어하기 횟수입니다. 새 루트를 시작할 때 모두 처음으로 돌아갑니다.

2. 계속 남아야 할 수집 기록

이미 본 배드엔딩 번호와 완료한 루트입니다. 한 판이 끝나도 브라우저 저장공간에 남아야 합니다.

3. 잠깐 필요한 화면 상태

선택지가 잠겼는지, 결과 효과가 재생 중인지, 팝업 창이 열렸는지 같은 값입니다. 새로고침 뒤까지 복원할 필요가 없습니다.

세 종류를 한 객체에 섞어 두면 이어하기를 눌렀는데 애니메이션 도중 상태까지 되살아나거나, 새 루트를 시작하는 순간 엔딩 도감까지 지워지는 문제가 생기기 쉽습니다.

저장은 선택이 확정되자마자 합니다

도감 저장을 결과 화면의 닫기 버튼에 걸어 두면, 이용자가 탭을 닫거나 새로고침했을 때 방금 본 엔딩이 사라질 수 있습니다. 오답이 확정되는 순간 엔딩 번호를 수집 기록에 넣고 저장한 다음, 결과 효과를 보여 주는 순서가 안전합니다.

저장 데이터에는 버전도 함께 적습니다. 업데이트로 구조가 바뀌었을 때 예전 기록을 새 형식으로 옮기거나, 바꿀 수 없는 항목만 제외할 수 있기 때문입니다. 모든 기록을 갑자기 초기화하기보다 살릴 수 있는 부분은 살리는 편이 좋습니다.

대사가 많을수록 자동 검사와 사람 검수를 나눕니다

모든 장면에 선택지가 세 개인지, 정답이 정확히 하나인지, 배드엔딩 번호가 겹치지 않는지는 직접 플레이하기 전에 코드로 확인할 수 있습니다. 대사가 많아질수록 구조 검사와 재미 검수를 따로 해야 합니다. 자동 검사는 빠진 값과 중복을 찾고, 사람은 대사가 실제로 웃기고 앞뒤 맥락에 맞는지 살펴봅니다.

이 글의 관련 게임: 게임 소개와 플레이 페이지로 이동

참고한 자료