오늘 오전에 부위 파괴에 전부를 걸었다는 글을 올리면서 "재미있는지는 아직 모른다"고 썼습니다. 몇 시간 뒤에 알게 됐습니다. 직접 해보니 "컨트롤도 어렵고 총체적 난국"이었습니다.

조작이 어려운 게 아니라 시점이 틀렸다

처음엔 조작 문제인 줄 알았습니다. 짚어 보니 아니었습니다. 원인은 카메라였습니다.

이 게임은 부위를 조준하는 게 전부인데, 쿼터뷰에서는 부위가 화면에서 겹칩니다. 15m 밖에 있는 로봇의 머리와 다리가 화면에서 몇 픽셀 차이입니다. 그걸 마우스로 골라 맞히라는 건 고르는 게임이 아니라 픽셀 맞히기 게임입니다.

조작이 어려웠던 것도 같은 뿌리였습니다. 쿼터뷰에서는 카메라가 8방향으로 스냅될 때마다 WASD가 가리키는 방향이 바뀝니다. 방금 오른쪽이던 게 카메라를 돌리면 위가 됩니다.

그래서 횡스크롤로 바꿨습니다. 옆에서 보면 머리에서 발까지가 화면 세로 전체로 펼쳐집니다. 조준 축이 그냥 눈에 보입니다. 그리고 화면의 왼쪽은 언제나 왼쪽이라 헷갈릴 자리가 없습니다.

몸은 좌우만 봅니다. 세로 조준은 팔이 맡습니다. 마우스를 올리면 머리를, 내리면 다리를 겨눕니다. 부위를 고르는 조작이 그대로 팔 각도가 됩니다. 어깨가 크게 따라가고 손목이 나머지를 맞춥니다. 손목만 꺾으면 총만 까딱거려서 겨누는 것처럼 안 보입니다.

처음 설계에서 이걸 이미 검토했었다

부끄러운 부분은 여기입니다. 첫 설계 문서에 이렇게 적혀 있습니다. "사이드뷰는 부위는 선명하지만 다수전의 포위 압박이 죽는다."

두 축을 비교해서 쿼터뷰를 골랐던 겁니다. 비교는 했는데 가중치를 틀렸습니다. 부위 조준 정밀도가 포위 압박보다 훨씬 중요한 축이었고, 그건 만들어서 해보기 전에는 알 수 없는 것이었습니다.

다행인 건 갈아엎은 게 많지 않다는 점입니다. 모델도, 다리 IK도, 부위 파괴도, 열도, 조달도, 웨이브도, 파괴 연출도 전부 그대로 삽니다. 바뀐 건 카메라와 입력, 그리고 AI가 쓰는 축뿐입니다.

평면이 되니 점프가 필요해졌다

한 축 위에 서게 되니 피할 곳이 없어졌습니다. 그래서 점프를 넣었습니다.

지상 점프는 공짜고 공중 점프는 열을 먹습니다. 기체 등과 종아리에 노즐을 이미 그려 놨으니 "다리로 뛰는 것"과 "추진기로 뜨는 것"이 그림과 규칙 양쪽에서 갈립니다. 그리고 그게 "한 번 더 뛸까, 열을 아낄까"라는 선택이 됩니다. 정점은 약 2.8m로 기체 키의 2/3쯤이라 적을 뛰어넘을 수 있습니다.

공중에서는 방향 전환이 55%로 줄어듭니다. 자유롭게 바꿀 수 있으면 점프가 결단이 아니게 됩니다. 그리고 AI도 상대가 머리 위로 뛰면 따라 뜁니다. 안 그러면 점프 한 번으로 근접형이 무력해집니다.

여기서 두 번 물렸습니다. 공중에서 다리를 접지 않으면 발을 지면에 맞추려고 다리가 땅까지 쭉 뻗어서 허공에 매달린 그림이 됩니다. 그리고 지면 보정을 공중에서도 걸면 뛴 높이만큼 골반이 도로 내려와서 점프가 화면에서 통째로 상쇄됩니다. 뛰는데 안 뛰는 것처럼 보입니다.

나머지 지적 네 개

"초반엔 무기 안 들기로 하지 않았어?" — 시작 지점에 조각을 깔아 놨는데 그게 자석 범위 안이라 가만히 서 있어도 몇 초 만에 무기가 생겼습니다. 맨손으로 시작하는 설계가 시작하자마자 무너진 겁니다. 이제 깔지 않고, 웨이브 보급도 자석 밖으로 밀었습니다. 첫 무기는 맨손으로 1웨이브를 때려눕혀서 나온 조각으로 만드는 게 맞습니다.

"격파 후 챙길 시간이 없다" — 웨이브 사이 휴식이 4.5초였습니다. 부순 파츠를 회수하는 게 이 게임의 보상인데 다음 적이 바로 나오면 주울 틈이 없습니다. 9초로 늘렸습니다.

"적이 나랑 똑같이 생겼다" — 역할별로 도색과 실루엣 조각을 넣었습니다. 돌격형은 붉은색에 뿔, 사수형은 푸른색에 조준경, 방패형은 국방색에 어깨판, 자폭형은 노란색에 경고 원. 누가 누군지 읽혀야 "어느 부위를 부술까"라는 판단이 섭니다.

"적이 뒤로 도망가며 쏘는데 붙지 못하고 죽는다" — 속도가 같으면 뒤로 걸으며 쏘는 쪽이 무조건 이깁니다. 뒤로 걷는 속도를 58%로 낮추고, 유지 거리를 당기고, 바짝 붙으면 더 물러나지 않게 했습니다. 대시는 예외로 둬서 치고 빠지는 건 남겼습니다. 소크 테스트에서 근접권에 머무는 시간이 0.4초에서 3.2초로 늘었습니다. 싸움이 실제로 붙습니다.

"컨트롤이 어렵다" — 부위 조준 보조를 넣었습니다. 마우스 근처의 부위로 스냅되고, 잡힌 부위가 노란 링과 HUD에 뜹니다. 이 게임의 조작은 "어느 부위를 부술까"를 고르는 것이지 움직이는 표적의 팔 한 짝을 픽셀 단위로 맞히는 정밀도 싸움이 아닙니다. 어디를 겨눌지는 사람이 정하고, 그 부위에 정확히 맞추는 일만 게임이 돕습니다.

짐작으로 최적화하지 않는다

"엄청 버벅인다"는 말도 같이 들었습니다. 여기서 감으로 깎기 시작하면 엉뚱한 걸 깎습니다. 그래서 먼저 쟀습니다. HUD에 프레임과 드로우콜과 삼각형과 노드 수를 띄우고, 그게 어디서 나오는지를 소유자별로도 셌습니다. 로봇에서 나오는지 파편에서 나오는지 탄에서 나오는지 모르면 고칠 수가 없으니까요.

재보니 적이 한 대뿐인데도 드로우콜 551에 삼각형 258k였습니다. 웨이브가 커지면 그대로 곱해집니다.

가장 컸던 건 조각 하나의 면 수였습니다. 로봇 한 대가 조각 60개로 이뤄져 있으니 조각 하나를 줄이면 60배로 돌아옵니다. 단면을 18각에서 12각으로, 링을 16에서 10으로 줄이니 삼각형이 258k에서 75k가 됐습니다. 눈으로는 차이를 못 느낍니다.

그다음은 그림자였습니다. 그림자 패스는 모든 메시를 한 번 더 그립니다. 파편이나 불꽃이나 기름 자국까지 그림자를 만들 이유가 없어서 껐더니 드로우콜이 70 줄었습니다.

그리고 탄을 쏠 때마다 메시를 새로 굽고 있었습니다. 개틀링이면 초당 열 번입니다. 탄과 불꽃과 연기와 자국의 메시를 공유하게 바꾸니 프레임이 튀는 게 사라졌습니다.

최종적으로 드로우콜 551→345, 삼각형 258k→75k입니다.

아직 안 끝났다

성능은 데스크톱에서 60fps를 유지하는 것까지 확인했습니다. 웹에서 실제로 몇 프레임이 나오는지는 사람이 열어서 HUD 숫자를 봐야 압니다. 브라우저 창이 화면에 표시되지 않으면 렌더링 자체가 멈춰서 여기서는 못 잽니다. 측정을 시도했더니 fps 1에 드로우콜 0이 나왔습니다.

그리고 만들면서 또 하나 물렸습니다. 돌격형이 대시를 남발하다가 스스로 과열해서 2.5초씩 멈춰 서느라 붙지도 못했고, 웨이브 소크가 180초 무승부로 끝났습니다. AI도 열이 절반을 넘으면 대시하지 않게 했습니다. 규칙을 만들면 AI도 그 규칙 안에서 살아야 합니다.

오전에 "재미있는지 모른다"고 썼던 질문은 절반쯤 답이 나왔습니다. 재미 이전에 조작이 안 됐던 것이고, 그건 고쳤습니다. 진짜 판정은 다시 해봐야 나옵니다.