Project

DirectX 2D 케이던스 오브 하이랄 모작

HYuk 2021. 9. 1. 19:21
728x90

케이던스 오브 하이랄(모작) - YouTube

DirectX 9 2D

제작기간 : 약 1개월

제작 인원 : 1인

Cadence Of Hyrule (케이던스 오브 하이랄)

____________________________________________________________________________

구현 내용

 

1. 플레이어 기능

[4방향 이동 및 공격]

-> Z버퍼와 각 타일에 옵션을 부여하여 타일의 특성을 부여 (1층 ~ 3층, 얼음 타일 등)

-> Z버퍼를 이용함으로써, 타일 뒤에 렌더 효과(2층 타일 뒤에 있으면 캐릭터가 가려지는 등)도 얻을 수 있었음

[비트에 맞춰 이동]

-> 비트바를 list로 관리하여 bpm에 맞게 생성하고, front의 비트 바가 가운데 충돌 영역에 도달 시에만 키가 입력되는 방식으로 구현

[인벤토리]

-> 각각 무기, 방패, 횃불, 링, 신발의 인벤토리 칸을 벡터로 관리하고 포인터를 캐릭터가 들고 있도록 구현

각 인벤토리에는 하나의 포인터만 들고 있을 수 있고 다른 아이템 획득시 필드에 내려놓음

해당 포인터가 필드와 인벤토리에 있을때를 구분하여 렌더링

[상태이상]

-> 플레이어가 얼음상태시 무적이 되며, 일정 턴을 받아도 제자리에서 움직이지 못하게 구현

 

2. 아이템 기능

[무기]

-> 소드(한칸), 브로드 소드(가로 3칸), 창(세로 2칸)으로 각 무기 소지시, 키를 눌렀을 때 해당 방향으로 몬스터 여부를 체크한 뒤, 공격 모션 또는 이동 모션을 취함

[방패]

-> 방패를 들고 있는 방향으로 Rect를 생성하여 해당 영역에 투사체 충돌시 투사체의 방향을 바꿔줌

[횃불]

-> 알파값 조절을 이용하여 동굴에서 횃불 효과 구현, 캐릭터가 소지시 특정 오브젝트에 대하여 상호작용 구현

[링]

-> 몬스터 사망시 카운트를 증가시켜 일정 카운트 도달 시 체력 회복 효과 구현

 

3. 몬스터 기능

[공통 기능]

-> 몬스터는 비트 바가 없어질때마다 턴을 한 개씩 받으며 행동하도록 구현

[길 찾기 기능]

-> ASTAR 알고리즘을 이용하여 길 찾기 구현, 각 턴마다 길을 찾는 방식으로 최적화

[공격 기능]

-> 플레이어가 위치한 타일을 탐색하여, 숨거나 추적하여 공격하는 등의 기능 구현

 

[중간보스]

-> 중간 보스방에 입장하면 활성화

-> 대각선 위치에 있을 경우 ASTAR 알고리즘을 이용하여, 플레이어를 추적하고, 플레이어가 가로나 세로의 직선에 위치 존재하면 거리에 따라 원거리 또는 근거리 공격

 

[보스]

-> 순간이동하며 공격하는 패턴 3가지 구현

기본적으로 랜덤패턴이나 바로 직전 패턴을 저장한 후, 다음 패턴이 직전 패턴과 동일할 경우 패턴 재설정

패턴 1) 바깥쪽 타일에 랜덤으로 얼음 마법을 발사하는 마법사 생성

패턴 2) 플레이어가 위치한 곳에 고드름을 떨어트려 공격하며, 공격 후 해당 타일을 얼음 타일로 변경

패턴 3) 플레이어를 추적하는 얼음 몬스터 생성하며, 몬스터가 지나간 자리는 얼음 타일로 변경

 

4. 타일 기능

[얼음 타일]

-> 플레이어가 도착 시 플레이어가 기존에 향하던 방향으로 비트 바에 맞춰 이동시킴

-> 보스가 바꾸는 얼음 타일은 기존 타일의 정보를 싱글톤인 TileMgr의 list에 저장하여 보관하고 있다가 일정 시간이 지나면, 다시 하나씩 정보를 가져와서 적용시켜 녹는 효과 구현

 

5. 상점 기능

[상인]

-> 소지금을 비교해 아이템 구매 가능

[노래]

-> 상인과 플레이어 간의 타일 거리를 계산하여, 일정 거리 안으로 들어오게되면 상인의 노랫소리 볼륨을 조정

 

6. 기타 기능

[리듬판정]

초록색 비트 바는 스테이지 시작 시 세팅된 비트에 맞게 생성되고, 삼각형 안쪽으로 들어왔을 때 키를 누르면 일반 판정, 둘이 겹쳤을 때 누르면 좋은 판정을 하여, 반짝이는 이펙트 추가 및 일정 수 이상 좋은 판정 시, 적을 죽였을 경우 보수가 높아짐

[그림자]

-> 각 그림자가 필요한 객체마다 Scale과 Rotation을 조정하고 RGB 값을 뺀 텍스처를 먼저 렌더 한 후, 실 객체를 렌더 하는 방식으로 구현

-> 타일의 그림자 같은 경우 해당 타일과 왼쪽 타일의 층을 비교하여 그림자 출력 여부 결정

[컷 씬]

-> 플레이어를 따라다니는 카메라 락을 잠시 해제한 후, 특정 위치로 이동하면서 레터박스를 생성시켜 컷씬효과 구현

 

 

 

728x90