Anne의 Tank 이해하기: 추격, 목표 선택과 지형 판단
상호작용 가능한 12개 3D 장면으로 Tank가 연속 점프하고 목표를 바꾸며 사다리 입구에서 감속하는 이유와 1.x, 2.0, 2.1의 행동 차이를 설명합니다.
먼저 Tank의 동작을 하나의 흐름으로 이어 보기
같은 Tank도 공터에서는 연속으로 점프하지만 벽 모서리에서는 방향을 틀 수 있고 사다리 앞에서는 갑자기 감속합니다. 플레이어는 이런 변화를 모두 ‘속도를 올렸다’거나 ‘AI가 이상하다’고 여기기 쉽습니다. Anne의 ai_tank3을 관찰할 때는 네 가지를 차례로 묻는 편이 더 유용합니다. 누구를 목표로 골랐는가, 경로는 어디로 가려 하는가, 이번 점프는 안전한가, 가까워진 뒤 주먹질할 것인가 돌을 던질 것인가입니다.
이 글은 이 서버의 행동을 이해하려는 플레이어를 위한 것이며 문제를 조사하는 서버 운영자를 위해 매개변수와 소스 코드 진입점도 남깁니다. 범위는 ai_tank3이 제어하는 AI Tank입니다. Tank 체력, 캠페인 생성 진행도, 화염 규칙과 각 게임 모드의 모든 변경값을 여기서 일괄 지정하지는 않습니다. 방에서 사용하는 모드, 플러그인 버전과 실제 설정이 ‘지난번 다른 서버에서 본 경험’보다 문제를 더 잘 설명합니다.
이 3D 비교를 사용하는 방법
시연 왼쪽의 주황색은 리팩터링 전 1.0.0.13이고 오른쪽 초록색은 리팩터링 후 버전이며 2.0과 2.1을 전환할 수 있습니다. 파란색 인물은 생존자입니다. 먼저 장면을 고르고 주요 순간을 클릭하면 두 화면을 계속 동시에 보는 것보다 목표 선택, 점프 방향, 특정 동작 종료 후 상태 복구 중 어디에서 차이가 나는지 쉽게 확인할 수 있습니다.
드래그로 화면을 회전하고 휠로 확대/축소하며 오른쪽 버튼으로 이동합니다. 모바일에서는 한 손가락으로 회전하고 두 손가락으로 확대/축소할 수 있습니다. 위에서 보기는 추격 경로에, 옆에서 보기는 사다리, 낮은 천장과 낙하에 적합합니다. 두 화면은 기본적으로 시점이 동기화되며 타임라인을 드래그할 수 있고 재생 속도는 0.25배에서 2배까지 선택할 수 있습니다. 버튼이나 입력란에 초점이 없을 때 스페이스바로 재생을 전환하고 좌우 방향키로 한 번에 0.1초씩 이동합니다. 첫 두 장면에서는 여섯 단계 난이도와 능동 좌우 연속 점프도 전환할 수 있습니다.
세 버전은 각각 무엇을 해결했는가
| 비교 버전 | 주요 변경 사항 | 볼 때 주의할 점 |
|---|---|---|
| 1.0.0.13 | 연속 점프, 일부 경로 추종, 머리 위 탑승 처리와 투석 선행량이 이미 있습니다. | 구버전이 우회나 예측을 전혀 못하는 것은 아닙니다. 예시는 구버전이 제대로 처리하지 못할 수 있는 분기에 초점을 맞춥니다. |
| 2.0.0 | 경로 판단, 목표 선택, 머리 위 막힘 처리와 후퇴 명령을 일관된 흐름으로 정리했습니다. | 사다리 입구 감속, 길찾기 비용에 따른 목표 선택, 후퇴 후 정상 행동 복구가 이번 버전의 핵심입니다. |
| 2.1.0 개발 스냅샷 | 공중 경로 연결, 원거리에서 점프마다 좌우 교대, 안전한 일반 낙하에서 속도를 유지하는 연결을 추가했습니다. | 새 로직과 관련 없는 장면에서는 2.0과 2.1이 같게 보일 수 있습니다. |
버전 차이를 이해하려면 먼저 규칙과 매개변수를 구분해야 합니다. 경로가 직선 추격을 지원하는지, 사다리 입구에서 양보해야 하는지, 목표 선택에 도달 가능성을 고려하는지는 행동 규칙입니다. 연속 점프 상한, 점프마다 적용되는 추진력, 측면 점프 편향각과 방향 전환 하한은 난이도 매개변수입니다. 난이도를 높인다고 Tank가 벽을 통과하거나 사다리를 무시하거나 모든 안전 검사를 취소하는 것은 아닙니다.
왜 가까운 사람을 두고 먼 사람을 쫓는가
화면에서 가까워 보여도 발밑에서 걸어갈 수 있다는 뜻은 아닙니다. 플랫폼 위의 A와 Tank 사이 직선거리는 짧지만 실제 경로는 반대편 사다리까지 돌아가야 할 수 있습니다. 지상의 B는 더 멀어도 경로를 따라 더 쉽게 도달할 수 있습니다. 2.0부터 통합 목표 선택기는 구간화된 길찾기 비용으로 목표를 비교하며 붙잡힘, 쓰러짐, 안전실 등의 필터 규칙도 그대로 사용합니다.
여기서 ‘길찾기 거리’는 구간화한 근삿값이며 매번 맵 전체의 최단 경로를 계산하지 않습니다. 두 사람이 조금 움직일 때마다 Tank가 고개를 돌리지 않도록 목표 전환에는 뚜렷한 이득이 필요하며 약 2초간 목표를 유지합니다. 사다리를 오르는 동안에는 목표도 동결됩니다. 따라서 잠시 기존 대상을 계속 쫓는 것은 더 가까운 목표를 찾지 못해서가 아니라 현재 추격을 유지하는 것일 수도 있습니다.
보이더라도 먼저 그 길로 갈 수 있는지 확인
2.0부터 점프 방향은 먼저 NextBot의 경로 스냅샷을 참조합니다. 목표가 보이고 비슷한 높이에 있으며 경로 자체가 목표 방향으로 전진하는 것을 지원할 때만 예상 위치로 직선 추격할 수 있습니다. 조건을 충족하지 않으면 경로 위의 도달 가능한 선행 지점을 추종합니다. 투명 창, 높은 플랫폼 가장자리나 벽 너머로 보이는 사람은 시각적 거리만으로 안전한 경로를 결정할 수 없습니다.
2.1은 이 판단을 공중까지 확장했습니다. 약 0.05초마다 목표나 안전한 선행 지점을 갱신하여 모서리를 지난 뒤 다음 구간으로 이어갈 수 있습니다. 경로 추종은 1°의 작은 각도 차이부터 부드럽게 보정하고 직선 추격은 해당 난이도의 각도 하한을 사용합니다. 검사 주기와 방향 전환 반응은 같은 값이 아니므로 0.3초의 부드러운 반응 매개변수가 0.3초마다 한 번만 경로를 본다는 뜻은 아닙니다. 급한 각도, 가림, 검사 예산 부족 상황에서는 여전히 착지한 뒤 방향을 틀 수 있습니다.
좌우 연속 점프와 공중 추종은 서로 다른 기능
좌우 연속 점프는 각 점프의 측면 편향각을 바꿉니다. 2.1에서는 목표가 600 hu보다 멀고 같은 높이에서 보이며 경로가 직선 추격을 지원하고 이번 점프가 사다리 같은 특수 구간을 넘어가지 않아야 합니다. 첫 좌우 방향은 무작위이고 착지를 확인한 뒤 다음 점프에서 방향을 바꾸며 공중에서 무작위로 뒤집히지 않습니다. 목표에 가까워지거나 경로가 꺾이거나 측면이 막히면 편향각을 취소하고 안전한 정상 추격 방향으로 돌아갑니다. hu는 맵에서 사용하는 Hammer 거리 단위입니다.
공중 추종은 다른 상황을 해결합니다. Tank가 점프한 뒤 생존자가 옆으로 이동하여 기존 방향이 더는 맞지 않는 경우입니다. 2.1은 다음 점프에서 방향을 다시 잡을 때까지 기다리는 대신 허용된 각도 범위에서 계속 부드럽게 보정할 수 있습니다. 보정 전에 남은 비행 경로도 검증합니다. 스냅샷이 무효이고 직선 추격 조건도 충족하지 않으면 관성을 유지합니다. 이는 무조건적인 추적이 아니며 공중에서 마음대로 방향을 바꿀 수 있다는 뜻도 아닙니다.
따라서 근접한 뒤 좌우 움직임이 사라졌다고 기능이 고장 난 것은 아니며, 방향을 바꾼 플레이어를 즉시 따라가지 않았다고 반응이 느린 것도 아닐 수 있습니다. 먼저 거리와 경로를 보고 그다음 난이도를 확인하세요. 시연의 첫 두 장면은 방향 전환 차이를 분리하기 위해 양쪽에 같은 단계의 속도 매개변수를 사용하며 구버전의 모든 기본 설정을 그대로 재현하지는 않습니다.
여섯 단계 매개변수: 어떤 값이 추격 감각을 결정하는가
아래는 2026-09-16 작업 트리의 동적 설정에 있는 Tank 값입니다. 앞의 다섯 단계는 자동으로 선택될 수 있고 Neri는 수동으로 활성화해야 하는 고정 단계입니다. 표의 상한은 설정 제한이며 생성 순간부터 그 속도가 나온다는 뜻도, 애니메이션에서 측정한 평균 속도도 아닙니다. 지형, 안전 검사와 모드별 재정의로 실제 속도는 더 낮아질 수 있습니다. Alone은 전용 재정의 항목으로 Tank 연속 점프를 끌 수 있습니다.
| 난이도 | 점프 중단 거리(hu) | 연속 점프 속도 상한 | 착지 후 다음 점프 추진력 | 첫 점프 추진력 비율 |
|---|---|---|---|---|
| 쉬움 | 220 | 500 | 40 | 0% |
| 보통 | 190 | 600 | 48 | 20% |
| 어려움 | 160 | 700 | 55 | 40% |
| 전문가 | 135 | 800 | 60 | 60% |
| 극한 | 120 | 800 | 65 | 80% |
| Neri | 120 | 1000 | 65 | 100% |
점프 중단 거리가 클수록 마지막 구간에서 더 일찍 정상 추격으로 돌아갑니다. 이는 주먹의 명중 거리가 아닙니다. 첫 점프 비율은 달리기에서 첫 점프로 들어갈 때 얻는 추가 추진력에만 영향을 주며 쉬움 단계의 0%가 점프할 수 없다는 뜻은 아닙니다. 착지 후 다시 점프할 때는 여전히 전체 추진력을 사용하므로 첫 점프 모습만으로 전체 추격 속도를 판단할 수 없습니다.
| 난이도 | 직선 추격 보정 하한 | 좌우 연속 점프 편향각 | 돌 투사 후 보호 시간(초) |
|---|---|---|---|
| 쉬움 | 10° | 8° | 0 |
| 보통 | 8° | 10° | 0.05 |
| 어려움 | 6° | 12° | 0.10 |
| 전문가 | 5° | 15° | 0.15 |
| 극한 | 4° | 18° | 0.20 |
| Neri | 3° | 20° | 0.25 |
여섯 단계 모두 능동 측면 점프 시작 거리는 600 hu이고 직선 추격 보정 상한은 89°로 같습니다. 각도 하한이 작을수록 작은 횡이동에도 더 일찍 보정이 시작됩니다. 돌 보호는 막 던진 돌 엔티티에 적용되며 AI와 플레이어 Tank 모두에 해당합니다. Tank 본체의 무적 시간이 아닙니다. 이 보호는 3D 시연에서 사격으로 시뮬레이션하지도 않았습니다.
좁은 길, 낮은 천장과 사다리: 점프 중단이 올바른 이동일 수 있음
통로에 틈이 있어 보여도 Tank의 충돌체가 연속 점프로 통과할 수 있다는 뜻은 아닙니다. 2.0은 지상에서 점프하기 전에 이미 전체 경로를 검사합니다. 2.1은 공중에서 방향을 바꾼 뒤 남은 포물선과 상승 구간까지 추가로 검사하여 착지 지점만 보고 중간의 벽이나 천장을 놓치는 일을 막습니다. 측면 점프 후보가 안전하지 않으면 먼저 정상 방향으로 돌아가고 필요하면 지상에서 달려 통과합니다.
사다리 입구에서는 기본 사다리 오르기 동작에 능동적으로 길을 양보합니다. 경로에 곧 오를 사다리가 표시되면 거리에 따라 미리 속도를 제한하고 양보 범위에 들어가면 점프를 멈춰 달리기 속도로 낮추며, 사다리에 오르면 방향과 목표를 고정합니다. 반대로 옆의 무관한 사다리를 지나기만 할 때는 최신 경로 스냅샷이 오작동을 막습니다. 스냅샷이 무효가 되면 사다리 엔티티 검사로 되돌아가므로 사다리 옆에서는 언제나 점프를 계속한다고 단정할 수 없습니다.
플랫폼 가장자리: 때로는 감속하고 때로는 바로 뛰어넘는 이유
2.0은 56 hu를 넘는 경로상의 낙하에 비교적 보수적인 제한을 적용하여 보통 점프 속도를 먼저 낮춘 뒤 가장자리까지 걸어가 자연스럽게 낙하합니다. 2.1은 경로가 명확하고 낙차가 256 hu 이하인 일반 낙하에 속도 유지 연결을 추가했습니다. 실제 아래층 높이로 더 긴 체공 시간을 계산하고 전체 비행 경로를 검사하며 착지 지점과 충돌체 네 모서리 아래에 지면 지지가 있는지 확인합니다. 검사를 통과해야만 속도를 유지해 뛰어넘습니다.
이 기능은 절벽을 보면 곧바로 뛰어내린다는 뜻이 아닙니다. 경로가 없거나 착지 지점이 불확실하거나 중간에 벽이나 낮은 천장이 있거나, 앞에 사다리 입구나 점프 간격이 있거나, 낙차가 더 깊으면 여전히 제한됩니다. 가장자리에서 능동적으로 지그재그하거나 점프 중 투석하지도 않습니다. 낙하 단계에서는 검증된 방향의 관성을 유지하며 ‘다음 점프 연결’은 착지 후에 일어나지 공중에서 다시 점프하는 것이 아닙니다. 시연은 200 hu 플랫폼을 사용하며 2.0으로 전환해 두 처리 방식을 볼 수 있습니다.
머리 위 막힘: 대체 목표가 있을 때와 한 명만 남았을 때의 차이
생존자는 위에 있고 Tank는 아래에서 계속 닿지 못할 때, 먼저 실제로 도달할 수 없는 막힌 위치와 위로 올라가는 길을 찾는 상황을 구분해야 합니다. 사다리나 오르기로 도달 가능한 목표에는 더 긴 관찰 시간을 주어 Tank가 막 사다리를 오르려 할 때 막힘 처리로 중단되는 일을 막습니다. 정체되었고 도달할 수 없다고 확인한 뒤 다른 적격 목표가 있으면 원래 목표를 10초 동안 차단하고 통합 목표 선택기가 다른 사람을 고르게 합니다.
대체 목표가 없으면 후퇴 투석으로 처리합니다. 도달 가능한 후퇴 지점을 찾아 필요한 공간을 확보한 뒤 투석을 재개합니다. 2.0의 핵심 수정은 후퇴 명령의 마무리를 통일한 것입니다. 도착, 시간 초과, 정체 또는 계획 종료 시 모두 RESET하여 정상 행동 제어권을 돌려줍니다. 그렇지 않으면 후퇴 지점을 골랐더라도 오래된 MOVE 명령에 남아 계속 서 있을 수 있습니다. 후퇴할 수 없고 거리가 허용되면 제자리에서 돌을 던질 수 있지만 너무 가까우면 억지로 던지지 않습니다.
Tank 머리 위에 올라타도 안전하다는 뜻은 아님
머리 위에 올라타는 것과 옆의 높은 플랫폼에 서는 것은 다른 상황입니다. 구버전도 이미 머리 위 탑승을 감지해 위로 주먹을 휘두를 수 있었습니다. 2.0은 일반 주먹질과 추가 위쪽 휘두르기를 유지하며 약 3초 동안 계속 맞히지 못하면 먼저 후퇴하지 않고 그 자리에서 탑승자에게 돌을 던집니다. 수평거리가 영에 가까울 때도 조준 대체 처리를 두어 일반 원거리 투척에만 맞는 계산이 방향을 잃지 않게 합니다.
시연은 계속 맞히지 못하는 분기를 의도적으로 보여 주므로 시간이 지난 뒤 투석으로 전환하는 모습이 나옵니다. 위쪽 주먹질이 명중할 수 있으면 그 시점까지 기다리지 않고 계속 주먹질할 수 있습니다. 인물을 머리 위에 세우면 반드시 성공하는 공략으로 여기는 것은 맵 구조, 판정 위치와 플러그인 버전 같은 전제를 무시합니다.
투석은 예상 위치를 조준하지만 여전히 빗나갈 수 있음
투석 준비 동작의 위치와 돌이 실제로 손을 떠나는 위치는 다릅니다. 2.0은 실제 투사 훅에서 진짜 돌 시작점으로 낮은 탄도 궤적을 구한 뒤 중력과 비행 시간을 반영해 목표 선행량을 보정합니다. 이 투석이 머리 위 막힘 처리의 강제 계획에 속하면 계획 목표를 우선하며 가장 가까운 보이는 목표로 갑자기 덮어쓰지 않습니다.
선행량은 목표 움직임의 추정에 의존합니다. 생존자가 갑자기 되돌아가거나 장애물에 가리거나 목표 상태가 바뀌면 예상 위치와 실제 위치가 달라질 수 있으므로 ‘예측한다’가 ‘반드시 맞힌다’는 뜻은 아닙니다. 구버전에도 선행량과 점프 중 투석이 있으며 달라진 점은 투사 지점, 탄도와 목표 선택의 일관성입니다. 애니메이션은 이 관계만 보여 주며 명중률을 제공하지 않고, 애니메이션 속 돌의 궤적 높이로 실제 서버를 보정할 수도 없습니다.
메커니즘을 네 가지 실전 관찰 요점으로 바꾸기
- 먼저 방 설정 확인:현재 모드와 AI 단계를 확인한 뒤 이 글의 매개변수를 적용할 수 있는지 판단하세요. Neri, Alone이나 다른 서버에서의 경험을 모든 Anne 방의 공통 규칙으로 여기지 마세요.
- 몸만 보지 말고 경로를 읽기:어느 쪽으로 벽을 돌려 하는지, 사다리 입구에 가까운지, 낙차 아래에 이동 가능한 길이 있는지 확인하세요. 단순히 직선거리를 늘리는 것보다 경로를 다시 선택하게 만드는 지형에 더 주목할 가치가 있습니다.
- 근접했을 때 목표 다시 확인:측면 점프 취소, 연속 점프 중단 또는 잠시 기존 목표 유지는 모두 예상된 행동일 수 있습니다. 팀원은 서로 지원할 수 있는 사선을 유지하고 Tank가 잠시 등을 보였다고 같은 퇴로에 몰리지 마세요.
- 투석할 때 투사 지점과 착지 지점 보기:엄폐물, 이동 방향과 팀원 위치를 함께 고려하세요. 예측 탄도는 예상 위치를 따라가지만 갑작스러운 방향 전환이 효과적인지는 여전히 거리와 지형에 좌우됩니다. 시연의 회피 방법을 보장된 방법으로 여기지 마세요.
이 관찰 요점은 한 번의 교전을 설명하는 데 도움이 될 뿐 만능 위치를 알려 주지는 않습니다. 팀이 서로 구조할 수 있는지, 퇴로가 일반 감염자에게 막혔는지, 누군가 붙잡혔는지가 연속 점프 궤적 하나를 따로 연구하는 것보다 대개 더 시급합니다. 전투 역할 분담과 Boss 진행도에 대한 입문 설명은 아래 Tank와 Witch 글에서 이어서 볼 수 있습니다.
행동이 이상할 때 유용한 기록을 남기는 방법
먼저 맵, 위치, 게임 모드, AI 단계, 플러그인 버전과 당시 각 생존자의 대략적인 위치를 기록하세요. 영상에는 이상 동작 전후의 전체 과정을 가능한 한 남기세요. 점프 전에 목표를 보았는지, 방금 사다리나 가장자리를 지났는지, 목표를 바꾸기 전에 이미 정체되었는지, 후퇴 후 추격을 재개했는지 확인할 수 있어야 합니다. 마지막의 ‘가만히 서 있는’ 한 프레임만으로는 안전한 양보, 도달 가능한 경로 없음과 실제 상태 잔류를 구분하기 어렵습니다.
제보할 때 가장 가까운 시연 장면을 첨부할 수 있지만 실제 서버와 예시의 차이를 밝혀야 합니다. 예를 들어 200 hu 플랫폼이 아니거나 머리 위에 낮은 천장이 있거나 경로가 착지 지점으로 이어지지 않을 수 있습니다. 시연 경로는 손으로 지정한 참고선이고 인물은 관찰을 위해 확대했으며 라벨은 지형에 가려지지 않습니다. 첫 두 장면은 0.773초로 고정된 체공 시간의 단순 계산을 사용하고 나머지 장면은 주요 프레임으로 상태 전환을 설명합니다. 실제 조사는 여전히 맵 nav, 충돌과 서버 로그를 확인해야 합니다.
버전 근거와 추후 확인
이 글과 사이트 내 시연은 함께 다시 확인할 수 있는 설명 버전을 고정했습니다. 1.x 비교 기준선은 c6b201e14^, 2.0은 c6b201e14, 2.1은 2026-09-16 개발 작업 트리입니다. 이후 플러그인이 계속 발전하면 장면 설명, 동적 설정과 이 글의 매개변수를 함께 확인해야 합니다. 개발 스냅샷은 새 설계를 설명할 수 있지만 현재 특정 방이 바로 이 코드를 실행한다는 증거는 아닙니다.
- 경로와 이동
- ai_tank3/path.inc, movement.inc: 경로 선행 지점, 특수 구간, 지상 연속 점프, 공중 보정과 낙하 경로 검사.
- 목표 선택과 막힌 위치 처리
- ai_tank3/target.inc, overhead.inc, command.inc: 통합 목표 선택, 머리 위 탑승과 머리 위 막힘 판정, 후퇴 계획과 명령 초기화.
- 공격과 난이도
- ai_tank3/combat.inc와 configs/AnneHappy/dynamic_ai_difficulty.cfg: 투사 지점, 낮은 탄도 선행량, 공격 제약과 여섯 단계 행동 매개변수.