#21: 전투 시스템 개선
Coding/Devlog

#21: 전투 시스템 개선

분석

게임의 코어 시스템만 만든 채로 테스트 플레이를 해봤는데, 문제가 많았다. 물리엔진 오류(서로 부딪히면 적이 날라가버림)이나 일정 경우에 페이탈 에러가 뜨기도 했다. 해본 결과 가장 문제는 "전투가 재미없다"였다. 왜 그럴까? 다크소울3와 엘든링을 플레이하며 분석을 해봤다. 크게 2가지 문제로 나누었다.

  1. 위협적이지 않은 AI
    AI는 굉장히 방어적이다. 문제는 방어적이면 방패라도 들고 있던가해서 플레이어가 무턱대고 공격하지 못하도록 해야 하는데, 아직 방패 구현이 되어 있지 않아서 그냥 샌드백이었다. 이를 위해서 AI를 좀더 공격적으로 만들 필요가 있다.
  2. 리스크가 없는 공격
    플레이어의 공격 모션이 적에 비해서 아주 빨라서 공격하기가 너무 쉽고, 적은 어떤 공격이라고 맞으면 휘청거리니 가까이 다가가서 패면 죽어버린다.

공격적인 AI

현재 AI는 Offensive Area - Deffensive Area를 가지고 있고, Deffensive Area에서는 공격하지 않는다. 그러니까 플레이어가 접근하고 나서 공격하려고 하면 적 AI는 늦게 대처할 수 밖에 없다. 선공할 수 있도록 해야 한다. 그러니까 Deffensive Area에서도 공격해야 한다. 공격은 맞지 않더라도 짧은 공격을 할 수 있고, 아니면 점프 공격과 같은 공격과 접근을 한꺼번에 할 수 있다.

위험한 공격 특징 1 - 적과 동등하거나 느린 공격 속도

소울라이크 게임에서 캐릭터가 공격을 하는 것은 많은 리스크를 가진다. 무기의 리치도 그것에 영향을 많이 미칠 수 있는데, 일단 지금은 제쳐둔다. 이번 업데이트에 집중하는 것은 프레임이다.

공격 애니메이션은 크게 3가지로 나눈다. 준비(공격하기 위해 자세를 잡음) - 접촉(실제로 콜라이더가 생성되어 공격이 이뤄짐) - 회복(움직이거나 다음 공격을 위해 자세를 원래로 돌림). 이 때, 플레이어 입장에서 위험한 순간은 준비회복이다. 강한 공격일수록 이 구간이 길다. 다크소울로 예를 들어보자.

  준비 접촉 회복(다시 움직일때까지)
직검 32 4 24
대형 망치 58 6 56

다크소울3에서 직검은 공격 애니메이션에서 준비에 32프레임, 접촉에 4프레임을 쓴다. 다크소울은 60프레임 고정이니까 실제로 마우스를 클릭한 후에 0.5초 후에나 공격할 수 있고, 공격하다가 맞거나 하면 취소된다. 그런데 대형 망치는 아예 58프레임이나 쓴다. 마우스 클릭 후 1초 후에 공격하는 것이다. 당연히 회복도 길다. 대형 망치를 한번 때리고 다시 움직이는데 걸리는 시간이 2초다. 그러니까 플레이어는 한번 공격할 때마다 생각해야 한다.

문제는 플레이어는 맞지 않고 적을 죽이기 원할텐데, 자신의 공격 준비시간이 보통 적보다 길거나 비슷하다는 것이다. 그러니까 적이 공격하는 걸 보고 공격하면 무조건 맞는다. 그래서 플레이어는 안전하게 플레이하려면 한번 피하고 때려야 한다.

위험한 공격의 특징 2 - 경직도(Poise)

소울게임의 모든 캐릭터는 Poise를 가지고 있다. Poise가 높은 몬스터는 맞아도 애니메이션이 취소되지 않는다. 그러니까 내가 먼저 때리게 됐어도 상대가 경직도가 높으면 나도 맞게 되는 것이다. 보통 중갑을 입고 있는 기사 몬스터들이 그렇다. 이러면 전투는 선공 싸움이 아니라, 패턴을 분석하게 된다. 좀더 흥미로워지는 것이다. 내가 날렵한 공격을 할 수 있어도 이게 낮은 Poise 공격이라면 상대의 자세가 무너지지 않으므로 빠르게 회피해야 한다.

구현

1. 공격적인 AI

현재 AI의 비헤비어 트리는 다음과 같다.

이중 '방어 범위 안'에서 점프 공격을 하는 비율을 높게 했다.

2. 적과 비슷한 공격 속도

개선 전
개선 후

3. 경직(Poise) 시스템

Poise는 일정시간 내에 설정된 데미지 이상을 받으면 히트 애니메이션이 재생되도록 설정했다.

낮은 경직 내성을 가진 몬스터
높은 경직 내성을 가진 몬스터