낚시 게임을 올리고 나서 받은 제보가 비슷한 모양이었습니다. "배에서 내렸는데 원투가 안 된다", "낚시하다 승선 시점으로 옮기면 배가 안 움직인다", "해변에 올라가니 게임이 멈췄다".

셋 다 막혀 있는 게 맞았습니다. 그리고 셋 다 막힌 이유를 아무 데도 말하지 않고 있었습니다.

사유는 있는데 볼 수 없는 곳에 있었습니다

원투 건이 제일 얄궂었습니다. 기법을 켜는 함수는 자세가 안 맞으면 거절 사유를 문장으로 써 두고 실패를 돌려줍니다. 만들어져 있었습니다.

그 문장이 나오는 곳이 측면 패널의 작은 칩인데, 그 패널은 낚시 중에 숨겨집니다.

그러니 서 있는 자리에 안 맞는 기법으로 키를 누르면 화면에서는 정말 아무 일도 일어나지 않습니다. 플레이어는 버튼이 고장났다고 결론짓고, 그 결론이 틀리지 않습니다. 아무도 볼 수 없는 거절은 무반응과 구별할 방법이 없습니다.

자세 거절과 속도 거절을 둘 다 화면 중앙으로 올렸습니다. 배에서 내리고 타는 것도 같은 문제였습니다 — 채비가 나가 있거나 고기를 걸고 있으면 말없이 실패했습니다. 이제 각각 이유를 말합니다.

참고로 원투는 원래 해변에서도 배에서도 됩니다. 막히는 건 캐스팅·트롤링·지깅처럼 배에서만 되는 기법을 해변에서 쓰려 할 때이고, 이제 그 문장이 보입니다.

잠금을 잘못된 것에 묶어 뒀습니다

배가 안 움직인다는 건 고장이 아니라 의도한 잠금이었습니다. 루어를 물에 넣은 채로 배를 몰면 안 되니까요.

그런데 잠금을 "낚시 모드에 있는가"에 묶어 뒀습니다. 지켜야 할 규칙은 "루어를 물에 넣은 채로 몰지 않는다"이지 "낚싯대를 들면 못 움직인다"가 아닙니다.

모드로 묶어 두니 갑판에 서서 낚싯대만 들고 있어도 배가 얼어붙었습니다. 그게 낚시 모드 시간의 대부분입니다. 플레이어가 조타가 고장났다고 느낀 바로 그 상태죠. 게다가 승선 시점은 운전하려고 고르는 뷰라, 하필 그 순간에 안 움직입니다.

잠금을 줄이 나가 있는지에 묶었습니다. 그리고 잠겼을 때 이동 키를 누르면 이유를 말합니다. 모드에 들어갈 때가 아니라 조작 입력에 걸었습니다 — 플레이어에게 질문이 생긴 바로 그 순간에 도착해야 하고, 그 답이 되는 키도 같이 알려 줘야 하니까요.

헤드리스로 직접 굴려 확인했습니다.

항해 중 0.012 · 낚싯대만 꺼냄 0.012 · 1차 캐스팅 0.000+안내
회수 0.023 · 2차 캐스팅 0.000+안내

낚싯대를 들었을 뿐일 때는 예전처럼 움직이고, 줄이 나갔을 때만 잠깁니다.

계산은 해 놓고 아무도 안 읽었습니다

배를 해변에 올리면 게임이 그냥 멈췄습니다. 메시지도 없고 빠져나올 방법도 없었습니다.

좌초 정도를 나타내는 값은 매 프레임 계산되고 있었습니다. 쓰인 적이 없을 뿐입니다.

리셋 키가 있긴 했는데, 리셋 키는 아무도 알려주지 않은 문제의 답으로 자기를 내세우지 않습니다. 알려 주고, 빠져나올 길을 둘 줬습니다.

후진으로 밀어내기 — 다만 그냥 뒤로 미는 게 아닙니다. 선체가 모래 위에 있으면 추진기가 밀 것이 없어서 키를 누른 채 아무 일도 안 일어납니다. 그건 이미 처해 있는 상태와 똑같습니다. 그래서 뒤가 아니라 깊은 쪽으로 밀게 했습니다. 뱃머리부터 비스듬히 올라간 배는 올라간 길로 내려와야 합니다. 실측 4.02m 빠져나와 선체 아래가 -0.45m가 됩니다.

또 하나는 내려서 뭍에서 낚는 것입니다. 하선은 원래 바다 쪽을 보게 되어 있으니 그대로 낚시가 됩니다.

캐스팅이 바다 높이만 물어봤습니다

같은 갈래에서 나온 버그가 하나 더 있었습니다. 캐스팅이 착수 판정을 할 때 바다 높이만 물어봤습니다. 그래서 해변 너머로 던진 루어가 해수면 높이에 "착수"해서 모래를 뚫고 신나게 낚시를 했습니다.

수면 위 지형이면 걸림입니다. 채비가 이미 걸림 상태를 다룰 줄 알고 있었고, 넘겨 던졌을 때 실제로 일어나는 일이기도 합니다.

물고기가 섬 위에서 뛰었습니다

물고기를 바닥 위 0.45m에 붙들어 두는 처리가 있는데, 그 바닥이 무엇인지는 신경 쓰지 않았습니다. 해변으로 흘러든 개체가 모래를 타고 올라가 계속 갔습니다. 헤엄치고, 도약하는 종은 뛰기까지 했습니다.

붙드는 처리는 시킨 대로 했을 뿐입니다. 물이 어디서 끝나는지 아무도 알려주지 않았죠.

높이를 고쳐 내리는 대신 이동 자체를 거부했습니다. 높이만 붙들면 물가에 줄지어 좌초한 모양이 되는데 그것도 똑같이 이상합니다. 이동을 되돌리고 내리막으로 조향합니다 — 내리막이 곧 물입니다.

남는 것

다섯 건이 다른 코드에서 나왔는데 모양이 같습니다. 판단은 옳았고, 그 판단을 사람에게 전달하는 부분이 없었습니다.

거절 사유를 만들어 두고 숨겨진 패널에 적었고, 좌초를 계산해 두고 읽지 않았고, 물고기를 붙들면서 물의 경계는 안 알려줬습니다. 각각은 작은 누락인데, 플레이어에게는 전부 똑같이 "고장"으로 도착합니다.

거절할 때 사유를 만드는 것까지가 절반이고, 그게 화면에 도착하는지 확인하는 것이 나머지 절반입니다.