바이브코딩으로 게임 만들기 #11 — 깃발 시스템 + 심플 대형

자동 전투 게임에서 플레이어가 할 수 있는 게 뭘지 고민했다. 유닛이 알아서 싸우는데 플레이어가 개입하는 재미를 어떻게 줄 수 있을까. 나온 답이 깃발 시스템이다.

깃발 4종

집결(1번), 돌격(2번), 방어(3번), 퇴각(4번). 키보드 숫자키에 배치했다. 각 깃발은 맵에 배치되고 아군 유닛들이 해당 깃발을 목표로 행동 방식을 바꾼다.

깃발마다 버프도 다르게 줬다. 돌격 깃발은 ATK 증가, 방어 깃발은 DEF 증가, 집결은 SPEED 증가, 퇴각은 HEAL 효과. 단순한 이동 명령이 아니라 전략적 선택에 의미를 주고 싶었다.

비헤이비어 트리 연동

깃발 명령을 받으면 비헤이비어 트리가 다른 행동을 해야 한다. BTMoveToFlag는 현재 활성 깃발 위치로 이동하는 태스크다. BTRetreat는 퇴각 깃발일 때만 실행되어 전투를 포기하고 돌아온다. BTIdle은 방어 깃발에서 제자리를 지키는 행동이다.

FlagManager Autoload에서 현재 활성 깃발 정보를 들고 있고, BT 태스크에서 FlagManager를 참조해서 어떤 깃발이 활성화됐는지 확인한다.

3열 그리드 대형

깃발 위치로 유닛들이 몰리면 다 겹쳐버린다. 깃발 주변에 대형 슬롯을 만들어서 유닛들이 각자 다른 위치를 차지하게 했다.

구조는 단순하다. 3열 그리드로 슬롯을 미리 계산해두고, 유닛이 대형에 합류하면 빈 슬롯을 하나 배정받는다. Warrior는 앞줄, Lancer와 Monk는 중간, Archer는 뒤에 배치되도록 유닛 타입별로 우선 슬롯 열을 다르게 했다. 슬롯마다 ±16픽셀 랜덤 오프셋을 줘서 완벽한 격자 느낌은 줄였다.

정리하자면

깃발 시스템은 자동 전투에 플레이어 개입 포인트를 만드는 좋은 방법이었다. 대형 시스템이 없으면 유닛들이 한 점에 몰려서 게임 화면이 지저분해진다. 이 두 가지를 같이 구현하니까 전투가 훨씬 보기 좋아졌다.