posted by WizardMania 2014. 2. 17. 10:21

MADCORE



posted by WizardMania 2014. 2. 17. 10:19
배고프냥




그래픽





   

 

    

 


 



프로그래밍


GameTool : 3DMax에서 만든 FBX파일을 Mesh파일로 변환하고변환한 Object들을 큰 맵에 배치함에 효율을 높이기 위해 DirectX를 이용해서 프로젝트 기간 초기에는 툴 제작에 비중을 높였다.

 

 

로그인 : 로그인 버튼은 IME UI를 이용하여 만들었고이미지 처리는 모두 Sprite를 이용하였다. ID Password IME UI를 쓰지 않고 직접 BoundingBox( 충돌체크 박스 )처리하여 클릭 시 입력 할 수 있게 만들었고문자는 모두 string형식으로 받아와 서버로 넘겨주도록 했다클라이언트에서 입력받은 ID Password를 서버에서 확인하고서버에 미리 저장되어있는 ID Password와 비교 후 로그인 처리를 하도록 구현 하였다.

 

로비 : 이미지 처리는 로그인과 마찬가지로 레디 버튼과 채팅 창은 IME UI로 구현 하였고나머지는 Sprite를 이용하였다캐릭터 선택은 BoundingBox처리하였고적 인원수와 로비 대기시간 출력캐릭터 위에 나타나는 각각의 ID Font로 나타냈다.




충돌체크 : 캐릭터와 캐릭터 끼리는 Sphere VS Sphere( 구와 구 )충돌체크를 하였고,미끄러짐 벡터를 적용시켜 서로 부딫히면 미끄러지게 구현하였다. 캐릭터와 건물 끼리는 Sphere VS BoundingBox ( 구와 충돌박스 )충돌체크를 하였다. 맵 안의 건물 BoundingBox Tool에서 좌표값을 입력하여 직접 씌웠다. 캐릭터의 위치가 배경 오브젝트에 겹쳐지는 상황이 발생해서는 안되므로 OBB(Oriented Object Box : 물체를 감싸는 방향성 있는 박스를 사용) 로 배경 메시에 박스를 씌운 다음 그 OBB좌표에 맞춰서 평면을 만들어서 OBB 상자에 붙여 점과 평면 사이의 충돌판정으로 기본적인 충돌을 처리 하였다.

 

인공지능 : 몬스터가 위치한 곳에 큰 Sphere를 씌워 캐릭터가 그 Sphere 안으로 들어오면 몬스터는 제일 먼저 들어온 캐릭터의 좌표를 따라가도록 구현하였다.


스킬 : 각각 캐릭터 타입마다 세 개씩 스킬 함수를 만들었으며스킬 1,2,3키를 누르면 해당 스킬 함수를 호출하게 된다모든 스킬은 Player클래스에서 플레이어 캐릭터 타입에 따라 항상 스킬 사용을 체크하는 함수를 구현하여 각 스킬의 지속시간과 사용시간을 확인하도록 하였다또한 각 스킬에 해당하는 충돌 처리 부분은 충돌 처리하는 클래스인 GameCollision 구현하여  클래스 에서 처리한다.

 

버프 : 보스 몬스터를 죽였을 시에 거점지가 해당 팀의 점령지가 되며 팀 내의 거점지 점령 수에 따라서 버프가 최대 3개가 생성된다거점지의 수에 따라 Player 클래스 에서 버프를 체크하여 버프 이펙트와 능력치가 적용되도록 하였다.


 

사운드 : FMOD 라이브러리를 사용해서 SoundMgr(사운드 관리 클래스)를 만들어 사운드를 구현하였다. 플레이어가 위치한 곳에서 멀어질수록 소리가 작아지도록 구현하였다. 미리 사운드파일 목록을 작성하여 초기화 과정에서 사운드를 저장시킨 다음 사운드가 필요할 때마다 사운드 매니저의 Play()함수를 호출하여 해당 사운드의 enum값을 입력해 사운드를 출력하는 방식이다. 전체 배경음악 같은 경우엔 계속 반복재생이 이루어져야 하기 때문에FMOD_LOOP_NORMAL 옵션을 설정하였다.

이펙트 : 이펙트 Mesh를 가져와서 DirectX 디바이스에 SetRenderState  그리기 옵션을설정하여 해당위치에 적용하여 나타내었으며, 이미지를 이용하여 만든 이펙트는 빌보드를 사용하여 항상 유저의 화면에 정면에서 보이도록 구현하였다.



셰이더, 그림자 : 3D 게임프로그래밍, Directx9를 이용한 3D GAME 프로그래밍 입문, 셰이더 프로그래밍 입문, 책들을 참조하여 캐릭터의 라이팅과 실시간 그림자를 그림자는 케릭터와 건물등 오브젝트를 그리기전에 그림자가 그려질 오브젝트들을 텍스쳐에 그린후 모두 같이 그려지도록 구현 하였다.



posted by WizardMania 2014. 2. 17. 10:12

War of The Gods


게임 설명

게임시간은 단 10분! 10분 안에 제단을 더 많이 차지해라!

10분이 지나기전에 제단 7개를 모두 차지 할 경우 바로 승리를 거머쥔다!

제단을 차지해도 일정시간이 지나면 다시 비활성화 되니, 역전의 기회를 노려라!

제단이 비활성화 되는 시간은 시간이 지남에 따라 증가 한다!

동점으로 끝날경우 SUDDEN DEATH타임이 돌아온다! 고로 무조건 승패는 가려진다!

SUDDEN DEATH타임 때 무조건 1킬을 먼저 따는 팀이 승리!




그래픽










프로그래밍


Server : 클라이언트에서 보낸 패킷을 받아서 서버에서는 모든 유저에게 패킷을 보내고 서버에서는 채팅 및 공격판정등을 구현


Client : 게임화면을 State패턴을 사용하여 Scene이 변경될 때 변경되는 Scene으로 교체를 해주고 Command를 사용하였는데 이것은 서버에서 보내는 패킷을 처리하는 별도의 쓰레드를 사용하며 별도의 쓰레드에서 메인쓰레드로 정보전달하여 사용.

캐릭터에 필요한 데이터는 캐릭터쪽에 넣고, 제단에 필요한 데이터는 제단쪽에 넣어서 사용.


Tool : Tool에서는 MAX에서 변환한 FBXmesh로 전환 및 OBB, AABB박스를 씌울수 있으며 캐릭터의 경우 mesh파일로 전환한 뒤 char파일로 변환하여 char파일에서 무기와 캐릭터의 OBB, ABB를 처리하였고 Map의 경우에는 mesh파일로 전환한 뒤에 각 Map에 들어갈 object를 추가하여 배치를 다하면 .map파일로 저장하여 사용.


1) 서버구현

서버의 시작 및 종료 상태를 표시하며 Client의 채팅을 받고 각 Client에 보내는 역할을 하며게임에 필요한 패킷을 주고 받으며 게임을 실행시키는 역할을 한다.

UID : 서버에 접속한 클라이언트에 번호를 부여하고 보여주는 역할

ID : 각 클라이언의 입력한 ID.

IP : 접속한 클라이언의 IP를 표시.

HOST : 접속한 ClientHOST인지 체크하여 상태를 표시하며 게임룸에서 HOST가 게임 시작할수 있는 역할을 함.

READY: HOST 다음으로 접속한 Client이며 게임 실행이 가능한지 상태를 표시.


2) 콤보, 리스폰 UI 및 리스폰, 무적, 제단 이펙트

콤보는 플레이어가 일정시간에 상대 플레이어를 피격시킬 경우 이어가는 것으로 코드를 작성하였으며 플레이어가 사망시 리스폰게이지가 나오면서 10초가 경과 뒤에 시작한 위치에서 리스폰이 되며 이때 나오는 이펙트가 있으며 PVP게임 특성상 바로 싸움이 일어나서 다시 죽는 것을 방지하여 무적이펙트를 넣어서 3초 동안의 무적을 주는 것으로 함.


3) 스킬

치우의 스킬 같은 경우 Sphere을 사용하여 범위내에 있으면 타격판정이 들어가며 포세이돈의 경우에는 스킬이펙트에 OBB를 사용, 에로스의 경우 바닥부분에 Sphere사용, 호루스의 경우 이펙트에 OBB, 발키리의 경우에는 무기의 OBB로 충돌체크를 하였으며 오공의 경우 Sphere를 사용하였음.


4) GameTool

Tool에서는 Max 작업한 뒤 Fbx로 변환한 파일을 불러온 뒤 mesh파일로 변환하고 캐릭터의 경우 fbx파일을 불러와서 애니메이션이 있는 fbx를 추가하여 mesh파일로 변환하거나 아니면 모두 mesh파일로 변환한 뒤에 애니메이션을 추가를 하고 이 캐릭터 파일을 char파일로 추가한 뒤에 캐릭터의 몸 OBB와 무기에 OBB영역을 구하고 저장을 하면 이 char파일을 이용해서 게임에서 CollisionCheck를 해준다.

Field작업 또한 기본적인 것은 같으나 mesh로 변환한 파일을 하나씩 불러와서 오브젝트 추가를 한 뒤 위치에 맞게 좌표를 입력하여 이동을 시키고 scale을 변형시키게 되면 따로 충돌오브젝트를 추가하여 박스를 크기에 맞게 씌워준다 그리고 또한 오브젝트들의 Rate를 변형 시킬수 있어서 맵디자이너가 위치하고 싶은 곳에 위치를 해놓았다가 오브젝트의 각도를 조정하여 맵에 매치를 시키게 했으며 맵 배치가 끝나면 파일명을 .map로 하였음.