총싸움 게임에서 부위 파괴는 대개 장식입니다. 헤드샷 배수가 붙고 나머지는 그냥 체력이 깎입니다. FPS Arena는 그걸 진짜 축으로 만들어 보려고 했습니다. 맞은 자리의 블럭이 실제로 떨어져 나가고, 어디를 잃었는지가 다음 몇 초를 바꾸는 구조입니다.

처음 규칙은 한 번도 발동하지 않았다

처음에는 당연하게 만들었습니다. 팔에 맞으면 데미지 배수를 낮게 주고, 누적 피해가 일정선을 넘으면 팔이 부러진다. 코드로는 멀쩡했고 화면에서도 블럭이 떨어졌습니다.

그리고 봇 7명을 20초 동안 싸우게 하는 계측을 돌렸더니 부위 파괴 0회가 나왔습니다.

이유는 단순했습니다. 팔이 부러질 만큼 팔을 맞히려면 그 사이 몸 체력이 먼저 0이 됩니다. 사람은 죽는 게 먼저고, 팔은 그 전에 절대 안 부러집니다. 시스템 전체가 도달 불가능한 코드였던 겁니다.

그래서 팔다리에 자기 체력을 따로 줬습니다. 몸 체력과 별개로 돌아가고, 팔은 몸보다 빨리 닳습니다. 같은 계측을 다시 돌리니 20초에 7~10회가 나왔습니다.

규칙이 켜지는지 확인하지 않으면, 잘 설계된 죽은 코드를 만들게 됩니다.

한쪽 팔로 무장해제하지 않는 이유

부러진 팔이 하는 일은 이렇습니다.

부위부러지면
머리즉사 (샷건 펠릿·나이프 제외)
탄퍼짐 2.6배, 재장전 1.6배 느려짐
양팔사격 불가
다리이동 -35%, 양다리면 -60% + 점프 불가

처음엔 팔 하나만 부러져도 총을 못 들게 할 생각이었습니다. 그게 더 무겁고 더 정직해 보였으니까요. 그런데 교전이 0.5초 안에 끝나는 게임에서 한 방에 무장해제되면, 반격할 기회 없이 죽는 3초를 구경만 하게 됩니다. 선택지가 사라지는 건 난이도가 아니라 그냥 관전입니다.

그래서 기본값은 "악화"고 양팔이 다 나가야 "무력화"입니다. 한쪽만 부러진 상태는 여전히 싸울 수 있지만 확실히 불리하고, 그 상태에서 수리 키트까지 갈지 지금 교전할지가 판단이 됩니다.

떨어져 나간 팔은 맞지 않는다

부위가 부러지는 순간 남은 블럭이 몸에서 통째로 분리돼 강체로 튕겨 나갑니다. 총알이 온 방향으로 밀려나고 몇 초 굴러다니다 사라집니다.

여기서 반드시 같이 해야 하는 게 있습니다. 떨어져 나간 부위는 히트박스도 같이 끕니다. 없는 팔에 총알이 맞고 히트마커가 뜨면, 플레이어는 자기 눈을 믿을 수 없게 됩니다. 회복으로 블럭이 돌아오면 히트박스도 같이 돌아옵니다.

사라지는 방식도 알파 페이드가 아니라 블럭이 하나씩 쪼그라드는 쪽을 골랐습니다. 반투명으로 그리면 겹친 블럭끼리 서로 비쳐서 지저분하고, 웹 빌드가 쓰는 렌더러에서는 결과가 또 달라집니다. 스케일은 어디서든 똑같이 보입니다.

봇이 머리를 노리게 두면 안 된다

머리는 즉사입니다. 그런데 초기 계측에서 명중 29발 중 4발이 헤드샷이었고, 그게 전부 즉사라 킬의 절반 이상이 헤드샷이었습니다. 플레이어 입장에서는 아무 예고 없이 죽는 게임이 됩니다.

원인이 두 개였습니다. 복셀 머리가 정면 실루엣의 38%를 차지할 만큼 크고, 봇의 세로 조준 오차가 딱 그 높이까지 올라갔습니다.

  • 머리 히트박스를 보이는 블럭의 82%로 줄였습니다 (장르 표준이기도 합니다)
  • 봇 조준점을 가슴 위로 낮췄습니다
  • 세로 오차를 가로의 절반으로 좁혔습니다 — 세로로 흩어지는 게 곧 헤드샷이기 때문입니다

헤드샷 비중이 14%에서 4% 아래로 내려갔고, 대신 부위 파괴가 늘었습니다. 압박의 형태가 "즉사당함"에서 "다쳐서 불리해짐"으로 옮겨간 겁니다. 헤드샷은 봇이 노려서 내는 게 아니라 탄퍼짐으로 가끔 얻어걸려야 합니다.

부러진 채로 맵을 가로지르게 만든다

수리 키트는 맵 네 귀퉁이에 흩어 놓았습니다. 팔이 부러진 상태로 가장 먼 곳까지 가야 한다는 뜻입니다. 탄약은 반대로 중앙 경사로 근처, 가장 위험한 자리에 둡니다.

부위 파괴가 그냥 페널티로 끝나면 "재수 없었네"가 됩니다. 회복 지점이 멀어야 그 페널티가 동선을 만드는 압박이 됩니다.