궁 미로 PalaceMaze TIL 5
현지화는 번역만이 아니라 자판 문제이기도 하다
오른쪽 Ctrl이 안 눌렸다
한 키보드로 두 명이 노는 구조라 키를 좌우로 갈랐다. 왼손은 R D F G와 왼쪽 Shift·Ctrl, 오른손은 방향키와 오른쪽 Shift·Ctrl. 거울처럼 대칭이라 헷갈리지 않는 배치다.
눌러 보니 오른쪽 Ctrl만 아무 반응이 없었다. 다른 열한 개는 다 들어오는데 그것만 한 번도 안 들어왔다. 오른쪽 Alt도 같았다.
한국어 키보드는 그 자리가 한/영 키와 한자 키다. 모양은 Ctrl·Alt처럼 생겼는데 실제로 보내는 신호가 다르다. 윈도우의 입력기(IME — 한글을 조합해 주는 시스템)가 한글 전환으로 가로채서 게임까지 오지 않는다.
판단에 쓰는 방식
키 배치는 손가락이 닿는 자리만 보고 정하면 안 된다. 그 자판이 어느 나라 것인지에 따라 같은 자리가 다른 키다.
이건 번역 문제와 결이 다르다. 글자를 바꾸는 게 아니라 물리적으로 없는 키를 쓰려 한 것이다. 앞서 Unreal Engine MCP TIL 2에서 에디터 표시 언어 때문에 블루프린트 노드 이름이 한글로 바뀌어 고생한 적이 있는데, 그건 소프트웨어 안의 이름이었고 이번엔 자판 자체였다.
오른손 영역에서 안전하게 쓸 수 있는 조합키는 오른쪽 Shift까지다. 그래서 두 번째 플레이어의 점프를 /로 옮겼다. 오른쪽 Shift 바로 옆이라 방향키에서 손을 안 떼고 누를 수 있다.
같은 판에서 키 매트릭스(키보드 안의 격자 회로)도 걱정했다. 같은 줄에 걸친 키를 여러 개 누르면 일부가 씹히는 고스팅 현상이 있어서, 두 사람이 각자 대각선으로 달리면 최소 네 개가 동시에 눌린다. 여덟 개까지 눌러 봤는데 하나도 안 씹혔다. 이 키보드는 N키 롤오버(동시에 누른 키를 전부 보고하는 방식)를 지원한다.
맞아도 재보기 전에는 모른다
내가 물어서 쟀다
한 키보드로 두 명이 논다. 그러면 키를 눌렀을 때 그 신호가 어디로 가는지가 문제가 된다. 두 갈래가 있다.
둘 모두에게 간다 각자 "나는 이 키만 듣는다"고 정해 두면 끝난다
한 명에게만 간다 그 한 명이 전부 받아서 나머지 몫을 대신 전달해야 한다
게임 안에서 사람마다 번호가 붙는다. 이걸 플레이어 인덱스라고 하고, 각 사람에게는 입력을 받아 처리하는 플레이어 컨트롤러가 하나씩 붙는다. 질문은 이렇게 바뀐다. 2번 플레이어의 컨트롤러도 키보드를 보는가.
Claude는 이미 “1번에게만 간다”로 판단하고 그 위에 구조를 지어 놓은 상태였다. 근거를 물으니 캐릭터가 하나만 움직이더라는 관찰과, 원래 그렇다고 알려져 있다는 것이었다. 둘 다 정황이었다.
그래서 재보자고 했다. 게임에게 매 순간 “2번 플레이어 기준으로 지금 위쪽 방향키가 눌려 있니?”를 묻게 하고, 내가 그 키를 3초 눌렀다. 수백 번 물어본 셈인데 한 번도 눌렸다는 대답이 없었다.
판단은 맞았다. 하지만 맞았다는 것과 확인했다는 것은 다르다. 틀렸으면 그 위에 지은 구조를 전부 다시 짜야 했다.
판단에 쓰는 방식
추측 위에 구조를 지을 거면, 그 추측을 재는 데 얼마나 드는지 먼저 본다. 이번 것은 몇 분이었다. 몇 분으로 하루치 작업의 전제를 확인할 수 있으면 재는 게 맞다.
그리고 이건 도구의 한계와 성격이 다르다. 도구가 막으면 대개 다른 길이 있지만(Unreal Engine MCP TIL 2·궁 미로 PalaceMaze TIL 2에서 그랬다), 플랫폼이 정해 둔 것은 우회로 자체가 없다. 그래서 더더욱 어느 쪽인지 먼저 재야 한다. 우회로를 찾을지 설계를 맞출지가 거기서 갈린다.
이번엔 설계를 맞췄다. 입력을 받는 자리를 하나로 정하고, 그 하나가 열두 개 키를 전부 읽어 “이건 1번 거, 저건 2번 거” 하고 나눠 준다. 2번 플레이어의 컨트롤러는 화면과 카메라만 맡는다.
상태는 겪는 주체마다 따로 둔다
둘이 같이 서니 한 명이 지워졌다
문과 상자 앞에는 보이지 않는 발판이 깔려 있다. 그 위에 올라서면 오버랩(두 물체가 겹쳤다는 신호)이 발생하고, 올라선 사람만 문을 열 수 있다.
처음에는 발판마다 “지금 누가 올라와 있나”를 숫자 하나로 적었다. 아무도 없으면 빈 값, 1번이면 1, 2번이면 2.
둘이 같이 문 앞에 섰더니 2번이 문을 못 열었다. 1번이 먼저 올라가서 숫자가 1이었고, 2번이 올라와도 덮어쓰지 않았다. 덮어쓰게 했으면 이번엔 1번이 못 열었을 것이다. 한 명만 나가도 기록이 통째로 지워졌다.
“누가 올라와 있나”를 하나로 적을 수 있다고 본 게 잘못이었다. 칸이 하나라 동시에 둘을 담지 못한다.
판단에 쓰는 방식
여러 주체가 같은 것을 동시에 겪을 수 있으면, 상태도 주체마다 따로 있어야 한다. 1번이 올라왔는지와 2번이 올라왔는지는 별개의 사실이고, 한 칸에 욱여넣으면 나중 것이 앞 것을 지운다.
바꾸고 나니 나가는 처리도 자연스러워졌다. 예전에는 누가 나가든 전부 지웠는데, 이제는 나간 사람 것만 지운다. 남은 사람은 계속 열 수 있다.
혼자 하는 게임을 둘이 하는 게임으로 바꿀 때 가장 많이 걸리는 자리가 여기일 것 같다. 혼자일 때는 “열려 있나”, “누가 있나”를 하나로 적어도 아무 문제가 없다.
계산으로 맞추는 대신 배치로 없앤다
출발선을 어떻게 공평하게 할까
둘이 같은 미로에서 먼저 나가는 쪽이 이기는 게임이다. 그러면 출발 위치가 공평해야 한다.
처음에는 두 사람을 서로 다른 마당에 두고 출구까지 거리를 계산해 맞추는 걸 생각했다. 그런데 이 미로는 DFS(한 방향으로 끝까지 파고들다 막히면 되돌아오는 길 뚫기 방식)로 만들어서, 마당이 다르면 출구까지 실제로 걸어야 하는 거리가 다르다. 직선거리가 같아도 길이 다르면 소용없다.
그래서 두 사람을 같은 마당에 나란히 세웠다. 같은 칸에서 출발하면 출구까지 경로가 정확히 같다. 계산할 것이 없다.
판단에 쓰는 방식
공평함을 숫자로 맞추려 하면 검증할 것이 계속 늘어난다. 미로를 다시 뚫을 때마다 다시 재야 하고, 길이 바뀌면 어긋난다.
조건을 계산으로 만족시키는 대신, 구조상 어길 수 없게 배치하면 검증이 사라진다. 같은 칸에서 출발하는 한 경로 길이는 항상 같다. 미로가 바뀌어도 그렇다.
앞서 궁 미로 PalaceMaze TIL 1에서 상자 보상을 나눌 때도 비슷한 선택을 했다. 어느 상자에 무엇이 들었는지 관리하는 대신, 섞어 둔 목록에서 순서대로 꺼내게 했더니 “어느 상자인가”를 알 필요가 없어졌다.