DirectX9과 C++로 횡스크롤 격투 게임을 만들면서 가장 크게 느낀 건, 격투 게임의 재미는 결국 “판정이 납득되느냐”에 달려 있다는 점이었다.
<기본 전투 장면 이미지 필요>
적이 계속 생성되는 구조라 전투 템포를 유지해야 했고, 입력 반응과 타격 판정이 조금만 어긋나도 게임이 바로 답답해졌다.
더 킹오브 파이터즈 같은 감각을 목표로 잡았기 때문에 애니메이션 프레임, 히트 타이밍, 경직 시간을 한 세트로 봐야 했다.
초기 구현에서는 단순 충돌 검사로 공격을 처리했는데, 한 번의 공격이 여러 번 들어가거나 반대로 맞아야 할 타이밍에 판정이 비는 문제가 나왔다.
<히트박스/허트박스 디버그 화면 이미지 필요>
그래서 공격 상태를 선딜, 활성, 후딜로 분리하고 활성 프레임에서만 히트박스가 켜지게 바꿨다.
또 히트박스와 허트박스를 분리하고 히트 ID를 도입해서 같은 공격이 같은 대상에게 중복 적용되지 않도록 막았다.
이 변경 이후 타격감이 훨씬 안정됐고, 플레이어 입장에서 “왜 맞았는지”가 더 명확해졌다.
적 스폰 쪽은 단순 랜덤 생성이 아니라 웨이브 매니저로 주기와 동시 등장 수를 제어했다.
<웨이브 증가 구간 이미지 필요>
이렇게 하니 난이도 조절이 쉬워졌고, 특정 구간에서 성능이 급락하는 문제도 같이 줄일 수 있었다.
엔진 구조는 렌더링 루프, 입력 처리, 리소스 관리를 분리해서 병목 지점을 추적하기 쉽게 만들었다.
실제로 디버깅할 때는 렌더링 상태 누수나 리소스 수명 주기 문제가 반복됐는데, 구조를 분리해 둔 덕분에 원인 파악 속도가 빨랐다.
적용한 기술은 DirectX9, C++, AABB 충돌 판정, 프레임 기반 상태머신, 웨이브 스케줄링이었다.
알고리즘 자체는 거창하지 않았지만, 이 요소들을 전투 감각에 맞게 튜닝하는 데 대부분의 시간을 썼다.
P.S
이 프로젝트는 격투 게임에서 좋은 액션은 화려한 이펙트보다 판정 알고리즘과 상태 전이의 일관성에서 나온다는 걸 확인하게 만든 작업인 것 같다.