1. 이동경로
좀비고등학교의 인간 추적 알고리즘은 AStar path finding을 변형해서 사용하고 있다.
아래는 좀비고의 좀비 이동 회로다.
주의 깊게 보아야할건 좀비와 인간이 1칸 대각선 위치에 서있는 상황이다.
인간이 정지한 상태일 경우, 좀비는 x, y 좌표중 랜덤하게 우선순위가 선택되어 이동한다.
그러나 이동중인 상태일때는 다르다.
인간이 좀비보다 한칸 아래에 있을때는 x좌표 우선, 위에 있을때는 y좌표 우선으로 움직인다.
나머지 위치에 있을 경우는 정지된 상태와 동일하다.
이를 통해 인간과 좀비가 쉽게 겹쳐서 죽어버리는걸 방지했다.
인게임에서 좀비로 널뛰기가 가능한 이유도 위와 같다.
2. 알고리즘
좀비의 이동 루틴은 아래와 같다.
1. 타겟 플레이어의 위치와 이동중인지 여부 가져오기
2. 이동 ( 이때 좀비의 실제 이동속도보다 20% 빨리 이동한다. )
3. 실제 이동속도와 차이난 시간만큼 딜레이
이 때, 좀비가 실제 속도보다 20% 빠르게 이동 후 쉬는 이유는 서버의 계산 지연 때문이다.
좀비가 실제 이동속도랑 동일하게 이동하기를 반복한다면,
서버 상태에 따라 큰 폭으로 좀비의 이동속도가 달라질 것이다.
다음 이동할 칸을 계산하는 알고리즘에 소요되는 시간이 증가한다면 그만큼 좀비는 느리게 움직일것이다.
추가로, 좀비고는 "실제 플레이어의 칸 위치" 를 기반으로 다음 이동위치를 연산한다.
Unity 게임엔진에서는 좌표가 1만큼 변한다고 실제로 1칸이 이동되는것이 아니다.
좀비고에서의 "1칸" 은 32pixel을 차지한다.
인간이 A (1, 1) -> B (1, 2) 로 이동중이라고 가정하겠다.
실제 유니티 엔진에서의 좌표는 (32, 32) -> (32, 64) 로 이동하는것 처럼 보인다.
위의 Unity엔진 좌표값을 가지고 경로를 계산하면, Path finding이 잘못 될 가능성이 크다.
좀비고가 실제 좌표값을 처리하는 방식은 이렇다.
1. 플레이어가 A (1, 1) -> B (1, 2) 로 이동 시작
2. 좀비의 이동경로 계산 { target pos: (1, 1), isMoving: true }
3. 이동
인간이 B로 이동중인 상태여도, B에 도달하기 전까지는 A 의 좌표로 이동을 계산한다.
추가정보
- 인간의 이동속도는 6.4다. (1초에 6.4칸 이동)
- 좀비고의 PPU는 1이다. PPU를 높여버리면 맵 해상도가 낮아진다.
'리버싱 > 좀비고' 카테고리의 다른 글
좀비 이동 알고리즘 구현 (1) | 2024.06.04 |
---|---|
좀비 이동 알고리즘 [2] (0) | 2024.06.02 |
Xigncode application validating bypass (0) | 2024.04.19 |
Slave check cooltime api (0) | 2024.04.13 |
캡챠 복호화 알고리즘 (0) | 2024.04.05 |