한 번 더!는 보물 상자 앞에서 지금 열지, 한 번 더 누를지만 고르는 원정 게임입니다. 한 번 더를 누르면 적힌 성공률로 상자 등급이 오르고, 실패하면 함정이 터지면서 보상이 깨집니다. 첫 배포 때는 늘 멈추는 것도 늘 미는 것도 답이 아니게 밸런스를 시뮬레이터로 맞췄고, 그 이야기는 지난 개발기에 적었습니다.

이번에 세 가지를 더했습니다.

  • 갈림길: 층마다 상자 넷 가운데 둘은 후보 상자 두 개를 미리 보고 하나를 고릅니다.
  • 굴림 공개: 한 번 더를 누르면 실제로 굴린 숫자가 성공률 옆에 멈춰 보입니다.
  • 오늘의 원정: 한국 날짜로 던전을 정해, 그날은 누구나 같은 던전을 만납니다.

셋 다 "보이는 대로 된다"는 이 게임의 약속을 한 걸음씩 넓히는 일이었고, 셋 다 재 보기 전에는 확신할 수 없는 질문을 하나씩 남겼습니다.

휴대폰 세로 화면 세 장이 나란히 있다. 첫째 "갈림길" 은 PICK ONE 제목 아래 왼쪽 상자와 오른쪽 상자 카드 두 장이다. 두 카드 모두 일반에서 시작하고 가시 함정 피해 5이며, 왼쪽은 녹슨 자물쇠 +8%p 에 전설 금화 111, 오른쪽은 보통 자물쇠에 전설 금화 96이고, 칸 사이 성공률이 왼쪽 86%, 66%, 48%, 오른쪽 78%, 58%, 40% 로 적혀 있다. 카드마다 맨 아래에 이 상자 고르기 단추가 있다. 둘째 "굴림 공개" 는 함정이 터져 기울어진 잿빛 상자와 흩어지는 가시 조각 아래에 "굴림 78 ≥ 78 실패" 알약과 노란 아슬아슬 표시가 있다. 셋째 "오늘의 원정 결산" 은 "9월 30일 원정, 첫 도전 기록입니다" 줄 아래 쓰러졌다, 금화 60, 지하 4층에서 쓰러진 층 줄, 기록 표에 아까운 실패 84 ≥ 78 과 아슬한 성공 70 < 72 가 있고, 다시 도전과 결과 공유 단추 아래에 "결과와 주소를 복사했습니다" 안내가 보인다

선택지를 늘리면 정말 깊어질까

갈림길 카드에는 상자 방에서 보는 정보가 그대로 들어 있습니다. 자물쇠, 함정, 보상 사다리 네 칸, 칸 사이 성공률까지. 고른 쪽이 그대로 상자 방이 되고, 거기서 다시 열지 밀지를 고릅니다.

걱정은 두 가지였습니다. 두 상자가 늘 비슷하면 갈림길은 누를 단추가 하나 늘어난 것일 뿐입니다. 반대로 한쪽이 늘 뻔히 좋으면 그것도 선택이 아닙니다. "선택지가 늘었으니 깊어졌겠지"는 느낌일 뿐이라, 이번에도 재 보기로 했습니다.

어떻게 잴지가 문제였습니다. 갈림길을 넣기 전과 뒤의 점수를 견주면 될 것 같지만, 그러면 던전 자체가 달라집니다. 갈림길 자리의 상자는 새 씨앗으로 만들어지니, 점수 차이에 갈림길 선택 말고 다른 것이 섞입니다. 그래서 대조군을 두었습니다.

  • 매번 따져 고르는 봇: 화면에 보이는 정보를 읽고 기댓값이 큰 쪽을 고르는 봇입니다. 갈림길에서도 두 상자를 같은 계산으로 매겨 큰 쪽을 고릅니다.
  • 같은 봇, 갈림길은 늘 왼쪽: 상자 앞에서는 똑같이 계산하지만, 갈림길에서만 고르지 않고 늘 왼쪽을 집습니다.

두 봇은 같은 씨앗으로 같은 던전을 돕니다. 같은 판이면 같은 상자, 같은 갈림길, 같은 굴림을 만나고, 다른 것은 갈림길에서 무엇을 집었는지뿐입니다. 판마다 두 점수의 차를 내어 평균을 내면 잡음이 크게 줄어듭니다.

평균 점수완주
매번 따져 고름67784.7%
같은 봇, 갈림길은 늘 왼쪽55580.5%
판마다 짝지은 차122 (표준오차 5.3, 8,000판)

갈림길에서 고르는 것만으로 최선 점수의 18% 가 갈립니다. 우연으로 보기엔 표준오차의 스무 배가 넘는 차이입니다. 이걸 합격 기준 13번째로 코드에 넣었습니다. 나중에 수치를 바꾸다 이 차이가 표준오차 두 배 아래로 내려가면 시뮬레이터가 실패로 끝납니다.

사람에 가까운 단순한 전략에도 갈림길 어림을 줬습니다. 첫 성공률이 높고 희귀에서 시작하는 쪽을 고르되, 체력이 절반 아래면 첫 실패가 덜 아픈 쪽을 고릅니다. 이 전략은 지난번 423점에서 471점이 됐습니다. 다만 이건 던전이 다른 두 버전끼리의 비교라 짝지은 차가 아니고, 그래서 따로 기준으로 걸지는 않았습니다.

부작용도 있었습니다. 고를 수 있는 만큼 조금 쉬워졌습니다. 따져 고르는 봇의 완주율은 80.5% 에서 84.7% 로, 사람형 전략은 40.7% 에서 44.2% 로 올랐습니다. 둘 다 기준(봇은 90% 미만, 사람형은 30~60%) 안이라 그대로 두었습니다.

짐작이 또 한 번 틀렸다

고정 습관 전략(늘 바로 열기, 늘 서사까지 같은 것)은 갈림길에서 늘 왼쪽을 집게 했습니다. 고르지 않는 것과 같으니 점수도 지난번과 똑같겠지 하고 저장소 문서에 그렇게 적었다가, 개발기를 쓰려고 표를 나란히 놓고서야 틀린 걸 알았습니다. 늘 바로 열기는 224.7점에서 225.6점, 늘 서사까지는 401.2점에서 404.2점으로 조금씩 달랐습니다.

앞에서 대조군을 둔 이유와 같은 까닭입니다. 갈림길의 왼쪽 상자는 예전 그 자리 상자와 씨앗이 달라, 같은 분포에서 나온 다른 상자입니다. 평균은 오차 안에서 비슷하지만 판 하나하나는 다릅니다. 대조군은 제대로 설계해 놓고 문서에는 거꾸로 적은 셈이라, 문장을 고쳐 두었습니다.

미리 본 상자가 그대로 나온다는 약속

갈림길에서 제일 중요한 건 본 것과 받는 것이 같아야 한다는 점입니다. 카드에 전설 금화 111이라 적혀 있었는데 고르고 나니 다른 숫자가 나오면, 정직한 표시라는 말은 거짓말이 됩니다.

그래서 후보 두 상자는 방에 들어서는 순간 보상과 실패 대가, 굴림까지 전부 미리 굴려 둡니다. 고르는 행동은 둘 중 하나를 집을 뿐, 아무것도 다시 굴리지 않습니다. 규칙 검사는 무작위로 판을 돌리며 갈림길을 39,779번 고르게 하고, 고른 상자의 사다리, 칸마다 성공률, 함정, 자물쇠가 미리 본 카드와 한 글자도 다르지 않은지 봅니다. 어긋남은 0이었습니다.

이 검사가 진짜로 잡는지도 확인했습니다. 규칙을 일부러 망가뜨려 고른 것과 반대 상자를 주는 사본을 만들어 돌리면 검사가 실패로 잡아냅니다. 화면 쪽은 실시간으로 게임을 끝까지 두는 검사 봇이 맡습니다. 진짜 마우스로 카드를 누르고, 카드에 적힌 첫 성공률과 고른 뒤 한 번 더 단추의 성공률이 같은지 화면 글자끼리 견줍니다.

굴림을 보여 주기로 했다

지난번까지는 성공률만 보여 주고 결과는 "성공"과 "실패"로만 알렸습니다. 성공률이 정직해도, 실패한 순간에는 정말 그 확률대로 굴렸는지 의심이 드는 게 사람 마음입니다. 그래서 이제는 굴린 숫자를 보여 줍니다. 0부터 99까지 굴린 수가 성공률보다 작으면 성공이고, 화면에는 "굴림 29 < 86 성공", "굴림 78 ≥ 78 실패"처럼 나옵니다. 차이가 2 이내면 노란 "아슬아슬" 표시가 붙습니다.

숫자는 0.3초쯤 빙글빙글 돌다가 멈춥니다. 이건 겉모습일 뿐이라는 걸 분명히 해 두고 싶습니다. 결과는 단추를 누른 순간 규칙이 이미 정했고, 도는 숫자는 그 결과를 향해 멈추는 연출입니다. 위 그림의 "78 ≥ 78"은 연출용으로 만든 장면이 아니라, 씨앗 117번 판의 첫 상자에서 첫 번째로 누른 실제 굴림입니다. 성공률 78% 에서 78이 나왔으니, 실패 가운데 가장 아슬한 실패입니다.

결산 화면에는 그 판의 가장 아까운 실패와 가장 아슬한 성공이 한 줄씩 남습니다. 규칙 검사는 이 기록이 늘 가장 가까운 것만 남기는지 보고, 기록을 먼 것으로 덮어쓰게 망가뜨린 사본도 잡아냅니다.

제 도구에도 함정이 하나 있었습니다. 화면을 찍는 도구는 "함정이 터진 순간" 같은 장면을 찍으려고 결과를 강제로 정합니다. 그런데 굴림을 보여 주기 시작하자, 강제로 실패시킨 장면에 "29 < 86 실패"처럼 앞뒤가 안 맞는 숫자가 찍힐 수 있었습니다. 게임에서는 강제를 쓰지 않으니 사람은 볼 일이 없지만, 찍어 둔 그림이 거짓말을 하면 안 되니 검증용으로 강제할 때만 보여 주는 굴림을 결과에 맞추게 했습니다. 그리고 이 글의 그림에는 강제하지 않은 굴림만 썼습니다.

모두가 같은 던전, 오늘의 원정

첫 배포 때 시뮬레이터에서 전략을 짝지어 비교하려고, 방마다 난수 씨앗을 판 씨앗과 층과 방 번호로 만들어 두었습니다. 이 설계 덕분에 오늘의 원정은 거의 공짜였습니다. 판 씨앗을 날짜로 정하기만 하면 그날은 누구나 같은 상자, 같은 갈림길, 같은 함정, 같은 굴림, 같은 상인 물건을 만납니다.

대신 새 문제가 생겼습니다. 굴림까지 같으니 두 번째 도전부터는 어느 상자에서 밀면 붙는지 알고 칩니다. 하루에 한 번만 하게 막는 방법도 있지만, 한 판이 5분이면 다시 해 보고 싶은 게 당연합니다. 그래서 막지 않고 기록을 나눴습니다. 첫 도전 기록과 최고 기록을 따로 남기고, 결산의 날짜 줄과 공유하는 글에도 "첫 도전"인지 "3번째 도전"인지 적습니다. 친구와 견줄 때는 첫 도전끼리 견주면 됩니다.

결과 공유는 휴대폰에서는 기기의 공유 창을 띄우고, 컴퓨터에서는 클립보드에 복사합니다. 클립보드 복사는 창에 포커스가 없거나 권한이 없으면 브라우저가 자주 거절해서, 그것마저 막히면 공유할 글을 화면의 글상자에 띄워 직접 복사할 수 있게 했습니다. 공유하는 주소에는 날짜가 들어 있어, 받은 사람이 누르면 그날의 던전이 열립니다.

같은 판을 다시 돌려 잡은, 첫 배포 때부터의 버그

실시간 검사 봇은 방에 들어설 때마다 화면 위쪽의 체력과 금화가 규칙이 가진 값과 같은지 봅니다. 오늘의 원정으로 한 판을 돌리자 1층 네 번째 방부터 화면 체력이 규칙보다 1 낮게 나오기 시작했고, 끝날 때까지 계속 1씩 낮았습니다. 규칙은 24인데 화면은 23이었습니다.

범인은 출혈 저주였습니다. 방에 들어설 때마다 체력을 1 깎는 저주입니다. 규칙은 방에 들어서는 순간 이미 1을 깎습니다. 그런데 화면은 방에 들어서면서 체력 표시를 규칙 값(이미 깎인 값)으로 맞춘 뒤, 출혈 연출이 끝날 때 1을 한 번 더 깎고 있었습니다. 점수는 규칙 값으로 매기니 맞았고, 틀린 건 화면 숫자뿐이었습니다. 첫 배포 때부터 있던 버그였는데, 그동안 검사한 판들이 출혈 저주를 한 번도 안 만나서 드러나지 않았습니다.

고치는 건 간단했습니다. 출혈이 있는 방에서는 깎이기 전 체력에서 시작해 연출이 한 번만 깎게 했습니다. 확인은 더 간단했습니다. 오늘의 원정은 날짜가 같으면 던전이 같고, 검사 봇은 같은 상황에서 늘 같은 것을 고르니, 같은 판을 그대로 다시 돌릴 수 있었습니다.

누름성공 / 실패점수화면·규칙 체력 불일치
고치기 전148 / 633방 8곳
고친 뒤148 / 6330

누른 횟수와 성공, 실패, 점수까지 똑같았고, 불일치만 사라졌습니다. 이 게임을 결정론으로 짠 덕을 이번엔 버그 잡는 데서 봤습니다.

검사 도구도 의심해야 했다

이번에는 재는 쪽에서도 두 번 헷갈렸습니다.

  • 밸런스 숫자가 저절로 바뀐 줄 알았습니다. 같은 규칙인데 최선 전략이 679점에서 677점이 됐습니다. 씨앗은 고정이라 이상했는데, 알고 보니 앞의 실행은 1,500판, 뒤의 실행은 2,000판이었습니다. 규칙을 의심하기 전에 실행 조건부터 견줬어야 했습니다.
  • 남의 게임 화면이 찍혔습니다. 화면을 찍던 도중 두 장에 전혀 다른 게임의 캐릭터 카드가 찍혔습니다. 같은 컴퓨터에서 돌던 다른 프로젝트의 검사 도구가 같은 브라우저 디버깅 포트를 써서, 제 도구가 띄운 탭을 가져간 것이었습니다. 페이지 오류는 하나도 없어서 통과로 보였습니다. 지금은 포트를 따로 쓰고, 찍기 직전에 탭 주소가 이 게임인지 확인해 아니면 실패로 셉니다.

그날은 다른 작업들 때문에 컴퓨터 CPU 가 100% 였습니다. 그래서 화면이 얼마나 부드럽게 도는지(초당 프레임)는 그날 잰 값으로 판단하지 않았습니다.

지금 숫자

전략평균 점수완주
매번 따져 고름 (봇)677 ± 1384.7%
같은 봇, 갈림길은 늘 왼쪽 (대조군)555 ± 1180.5%
체력 보고 문턱 (사람형)471 ± 1144.2%
늘 서사까지404 ± 1120.4%
늘 바로 열기226 ± 286.5%
늘 희귀까지202 ± 353.8%
반반 무작위163 ± 428.2%
늘 전설까지114 ± 50.4%

평균의 ± 는 95% 구간입니다. 합격 기준 13개를 모두 통과합니다. 늘 바로 열면 최선의 33%, 늘 끝까지 밀면 17% 점수에 그치고, 보이는 정보를 읽는 전략은 가장 잘한 고정 습관보다 짝지은 차로 273점 높습니다.

아직 확인하지 못한 것

휴대폰의 공유 창과 진동(함정, 문지기, 전설, 쓰러짐 때 짧게 울림)은 검사용 브라우저에서 띄울 수 없어 실제 휴대폰에서 아직 확인하지 못했습니다. 휴대폰 화면은 크롬의 모바일 에뮬레이션으로 확인했고, 실제 휴대폰에서 돌려 본 횟수는 아직 적습니다. 오늘의 원정을 휴대폰에서 한 판 하시고 결과 공유를 눌러 보시면, 그게 이 기능의 첫 실기기 확인이 됩니다.