적 AI

Status
작업 완료
분류
전투
설명

AI들의 상태와 턴을 기준으로 구현된 행동 정리

딤당자
U
Untitled
U
Untitled
U
Untitled
U
Untitled
최종 편집 일시
Jul 2, 2024 9:09 AM
최종 편집자
U
Untitled
History

1. 적 유닛 정의

1.1. 적 유닛 상태 정의

1️⃣
미인식 상태
image
  • 시야 내에 적대 유닛이 없는 상태
    • 일반적으로 소음 발생 타일(목표 타일)이 없음
    • 소음 발생 타일(목표 타일)이 있더라도
      • 그 타일로 이동하지 못한 경우
      • 시야 밖에서 공격한 대상이 있으나 별견 못한 경우
  • 시야 방향을 가리키는 화살표가 회색으로 되어있음.
2️⃣
추적 상태
image
  • 알람으로 인해 적 위치를 인식했으나, 공격 가능 범위 내에 적이 없는 상태.
  • 시야 방향을 가리키는 화살표가 주황색으로 되어있음.
  • 실제 시야에는 방향성이 사라지고, 전 방위를 보게 됨 (화살표는 상태 변경에 대한 인지 목적으로만 사용)
  • 시야가 공격 범위 대체
3️⃣
인식 상태
image
  • 알람으로 인해 적 위치를 인식했으며, 공격 가능 범위 내에 적이 있는 상태.
  • 시야 방향을 가리키는 화살표가 붉은색으로 되어있음.
  • 실제 시야에는 방향성이 사라지고, 전 방위를 보게 됨 (화살표는 상태 변경에 대한 인지 목적으로만 사용)
  • 시야가 공격 범위 대체

1.2. 적 유닛 행동 정의

History상황 분류적 유닛 상태동작비고
적 진영 턴 시작
적 개인 턴 시작
적 개인 턴 시작

이후 지형지물에 한해 공격 가능

적 개인 턴 시작

각 유닛 별 [탐색 스킬 목록]에 등록된 스킬 중 가장 앞의 스킬 시행

적이 PC 발견

자신도 알람을 들은 것으로 판정(즉시 추적) 알람으로 인한 즉시 추적일 경우 무시

적이 PC 발견
적이 PC 발견

2. 알람 시스템

2.1. 알람 시스템 정의

💡
적 유닛 기준, 적대적 대상을 인식했을 때 주변의 아군을 불러모으는 현상

2.2. 발동 조건

1️⃣
플레이어 적대 유닛 중
🅰️
미인식 상태의 유닛의 시야 내에
2️⃣
적대 관계에 있는 유닛이 진입

2.3. 발동 효과

1️⃣
발동 조건 달성 시점의 타일에 정지 후 알람 애니메이션 출력
2️⃣
진입한 유닛은 목표 유닛이 됨
3️⃣
자신 주변의 알람 범위 내 아군 AI를 목표 유닛 추적 상태로 만듬
🗣
알람 범위
  • 알람이 효과를 가지는 범위
  • 알람 범위가 n이면 TP n을 소모해서 이동할 수 있는 거리 전체를 의미
    • 즉, 벽이 있을 경우 벽을 통과하지 못함
    • 문이 있을 경우, 열림/닫힘 상태와 무관하게 통과하여 판정
  • 기본 알람 범위 : 7
    • 단, 스컬커에 한하여 10으로 적용
4️⃣
알람을 발동한 유닛에게서 가까운 순서대로 목표 유닛에 대해 공격 준비, 즉시 추적 시행
동시에 여러 유닛이 알람 사용 조건을 만족하는 경우,
1️⃣
가까운 순서대로 위 절차 수행
🅰️
알람을 이미 들은 상태라면 알람 시행하지 않음

3. 길찾기 규칙

3.1. 목표 유닛/타일

3.1.1. 목표 유닛

  • 유닛이 [즉시추적], [공격을 하지 않을 때] 행동하는 기준
  • 동시에 하나씩만 존재하며, 이미 존재할 경우 새로 설정하면 덮어씌움
🅰️
설정 조건
  1. 시야 내 적이 없던 상태에서 적을 발견
  2. 알람으로 적을 공유받음
🅱️
해제 조건
  • 해당 유닛 사망

3.1.2. 목표 타일

  • 유닛이 [즉시 추적], [공격을 하지 않을 때] 행동하는 기준
  • 동시에 하나씩만 존재하며, 이미 존재할 경우 새로 설정하면 덮어씌움
🅰️
설정 조건
  1. 목표 유닛이 사망(해당 위치로)
🅱️
해제 조건
  • 해당 타일을 시야로 확인

3.2. 적 유닛 동작

3.2.1. 적 유닛 동작 정의

1️⃣
접근
  • 알람 등에 즉각적으로 반응하거나, 눈에 보이는 적에게 다가가는 상황
  • 발견된 경로 중, [정지 위치 > 도착지] 순으로 우선순위를 판정하여 선택
2️⃣
추적
  • [추적 상태]의 적이 목표를 찾아 이동하는 상태
  • 발견된 경로 중 [도착지 > 정지 위치 > 비용] 순으로 우선순위를 판정하여 선택
3️⃣
공격 준비
  1. 목표 유닛과 각 목표 유닛을 칠 수 있는 위치를 파악
  2. 모든 칠 수 있는 위치에 대해 경로 탐색
  3. 다음의 기준에 따라 경로 우선순위 설정
  4. 1️⃣
    낮은 비용
    2️⃣
    칠 수 있는 목표 중 가장 높은 타겟 우선순위
    1. FacingTile(시야 방향)이면 가장 우선
    2. 자신으로부터 가까운 위치
    3. 낮은 HP
  5. 가능한 경로가 없다면, 목록의 다음 스킬로 진행
  6. 목록 내 모든 스킬을 1~4를 진행하며 검사했으나 이동에 실패했다면 [추적]

3.2.2. 조건 별 적 유닛 동작

History조건조건 상세동작
-

시작 조건을 동시에 만족할 때

동작 중복

동작 시행 중 다른 동작의 시작 조건이 만족될 때

자신의 턴

적 AI의 소속 턴에서 해당 유닛이 움직일 차례가 되었을 때

소음 반응

소음 범위 내 적 AI 유닛이 존재할 때

알람 반응

알람을 들었을 때

피격

스킬 타겟이 되었을 때

적 최초 발견

적을 처음 발견했을 때

3.3. 길찾기 순서

3.3.1. 길찾기 로직

History판단 순서행동 분류판단 기준동작
0
1
상태 체크/외부 원인

기본 상태가 DisableState, DisableMove

2
상태 체크/외부 원인

[알람]에 의한 즉시 추적

3
자기 턴 행동

시야 내 적이 있다면

4
자기 턴 행동

목표 [유닛 / 타일]이 존재하는 경우

5
자기 턴 행동

위 조건을 모두 만족하지 않는다면

3.3.2. AI Position

History이름요약

아무 행동도 하지 않음

시야 내 3칸 이내의 랜덤 타일을 목표로 지정

초기 위치가 아니면 초기 위치를 목표 타일로

다음 탐색 위치를 목표로 지정 (Waypoint로 지정)

Player Group Unit들의 위치를 목적지’들’로 지정

3.4. 경로 판정

3.4.1. 경로 판정 로직

History경로 차단 매개동작
없음
변종방어벽플레이어

3.4.2. 경로 판정 노드

1️⃣
목적지
  • 가려는 타일
  • 목표 유닛을 쫓을 경우, 해당 유닛의 위치
2️⃣
거리
  • 노드 간 비교 용도로만 사용
    • 그리드 거리 우선 기준
    • 그리드 거리가 같다면 직선 거리가 짧은 쪽 우선
    • 목적지가 여럿이라면 → 모든 목적지에 대해 계산 후 가장 낮은 값을 사용한다.
3️⃣
최적거리
  • 도착지 거리가 이 값 미만이면 목적지에 달성한 것으로 보고 해당 노드에서 더 이동하는 경로를 찾지 않는다.
    • 타일을 목표로 삼고 이동할 때 = 1 (해당 타일에 도착 했을 때)
    • 유닛을 목표로 삼고 이동할 때 = 1.4 (인접한 타일까지 인정 - 유닛이 점유한 타일에 함께 위치할 수 없으므로)
4️⃣
비용
  • 기본적으로 이동에 필요한 타일 수
    • 도중에 Breakable이 있을 시 +0.5
    • TP제한 이하는 동일한 것으로 취급
5️⃣
도착지
  • 경로의 마지막 위치와 목적지 까지의 거리
  • 벽을 제외한 다른 유닛이 존재하더라도 도착지가 될 수 있다.
  • 도착지 거리는 최적 거리 미만이 될 수 없다. (= 둘중 높은 값으로 맞춰짐)
6️⃣
정지 위치
  • 잠적인 경로는 존재하지만, 도중에 멈춰야 하는 위치와 목적지까지의 거리
    • 통과 할 수 없는 장애물 이 있을 경우, 경로 중 장애물 직전 위치가 된다.
    • 경로 길이가 TP제한보다 길 경우, 제한만큼만 이동한 위치가 된다.
    • 통과할 수 있는 장애물이 있을 경우, 경로 중 마지막 빈칸이 된다.

4. 특수 동작

History동작요약

목표 타일이 존재하는 경우 이동을 종료한 위치 주변에 장애물이 있는 경우 공격을 시행