게임의 특정 상황에 대한 상호작용 분석해보기
분석하는 상황
LOL에서 내셔 남작을 사냥하는 순간을 떠올려보자
각각의 팀에서 내셔 남작을 사냥할 때, 여러 공격과 스킬이 들어갈 것이고,
최종적으로 내셔 남작을 빼았은 팀에게 그 버프가 들어갈 것이다
필요한 시스템?
먼저 클라이언트 <-> 서버 구조를 기반으로 할 것
(멀티 플레이 게임이므로)
클라이언트에 필요한 기능?
-
서버로 ‘특정한 스킬’을 사용하거나 이동하였다고 ‘적용’하는 요청 과정 필요
-> 클라이언트에서 북치고 장구쳐도 서버가 그것이 ‘올바른 요청’이었는지 확인하는 것이 필요
(핵쓰고 평타가 999뜨면 안되므로)
-> 세부적으로는 ‘플레이어 입력’과 그에 따른 요청일 듯하다 -
서버의 ‘결과’를 수령하고 출력
-> 위의 요청뿐 아니라, 다른 플레이어가 적용하는 행동도 이에 포함
(내가 이동하는 것 뿐 아니라, 다른 플레이어나 npc의 행동도 같이 수령하고 화면에 적용한다)
-> 그렇기에 보통 클라이언트는 서버에서 일어난 ‘결과’를 출력하는 것이라 말하기도 한다
(ex : 대미지 수치 띄우기, 오브젝트 누가 먹었나 알림, 아군 탈주 알림 등)
서버에 필요한 기능?
-
공격 판정 계산
-> 완전한 즉발 스킬이 아니라면, ‘투사체’, ‘원형이나 부채꼴 범위’ 등이
‘피격 판정’이 있는 오브젝트에 닿았는지 확인할 필요가 있다
(아군인지 적군인지 부터, ‘적군’이 ‘재간둥이’같은 스킬상태인지 등등)
-> 따라서 클라이언트에서 올라온 ‘스킬 사용 판정’에 따라
사용한 스킬의 판정을 확인한다
(ex : 스킬 사용자 : A , 스킬 ID : B, 스킬 레벨 : C, 스킬 부가효과 : D 등)
(스킬 ID에 따라 스킬을 분류하는 시스템이나 매니저가 있을 시, 간략해질 수 있다 생각) -
캐릭터의 스텟 적용 Or 부가효과, 스킬 관리자
-> 아이템이나 각종 버프를 어떻게 처리할지에 따라 하나 혹은 2개 이상의 시스템이 구현되었을 것이라 생각- 캐릭터에 스텟을 적용하는 경우
- 도란검 등을 산 경우 그 아이템에 적힌 스텟과 부가효과 등을 해당 캐릭터에 적용하는 방식
- 마찬가지로 내셔,드래곤, 레드, 블루 같은 오브젝트 처치 보상이나 캐릭터의 버프, 디버프에 대한 적용도 가능
- 실제로는 지속효과와 아이템, 패시브 등의 세부적인 스텟 적용 방식이 다르기에
더 세부적인 시스템이 내부에 있을 것이라 추측
- 도란검 등을 산 경우 그 아이템에 적힌 스텟과 부가효과 등을 해당 캐릭터에 적용하는 방식
- 부가효과, 스킬 관리자
- 각 스킬의 독특한 효과나 유니크한 아이템 효과를 부가효과로 나누어 각각의 ID로 관리하는 방식
- 또한 스킬은 이와 별도로 ‘자원 소모량, 사정거리, 쿨타임, 스킬 레벨’ 등 과 같은 추가적인 요소를 관리
- 잭스의 반격 스킬을 예로 들자면
범위 공격에 대한 피해 n% 감소
평타 회피
공격 부가효과 : 최대 체력 피해
공격 부가효과 : 스킬 지속시간 중 일반 공격 회피시 피해량 증가
공격 부가효과 : 기절
등이 ‘스킬’에 ‘부가효과’로 붙어있을것으로 추측
- 각 스킬의 독특한 효과나 유니크한 아이템 효과를 부가효과로 나누어 각각의 ID로 관리하는 방식
- 캐릭터에 스텟을 적용하는 경우
저장용 스킬 (딱히 바뀔일 없는 수치들)
- 스킬 ID
- 스킬 사용 주체
- 스킬 타입 (아군 지정 회복 등?)
- vector<레벨 별 마나 소모량>
- vector<레벨 별 사정거리>
- vector<레벨 별 쿨타임>
- vector<레벨 별 수치 A>
- vector<레벨 별 수치 B>
- vector<부가효과>
실제 사용 스킬(저장용 스킬에서 가져와서 대미지 계산 등에 쓰이는 진짜 스킬?)
- 스킬 ID (이걸로 저장용 스킬에서 찾아쓸 수 있다)
- 사용 플레이어
- 스킬 레빌 (이것만 알면 저장용에서 마나 소모량 등을 다 가져다 쓸 수 있음)
- vector<추가 부가효과>
(내가 생각해본 예시이며, 실제로는 이보다 더 정교하며 효율적이라 생각해본다)
- 대미지 계산 및 사망 처리
-> 공격자의 ‘스텟’과 실제 발생한 ‘공격’의 적용된 ‘부가효과’를 가져와
총대미지를 계산하고 이를 피격자에게 적용한다
(피격 디버프나 공격자에게 반사 등의 부가효과가 있다면 이때 적용될듯)
-> 피격자의 체력이 0이하인 경우에 따라서
‘사망 처리’를 진행
(불사 라던가, 사망 후 부활에 따른 각종 예외처리가 있을듯?)
-> 사망에 따른 공격자에 대한 ‘보상’을 적용
(골드 및 추가 보상)
분석 결과
바론을 잡는 한순간에
‘캐릭터’, ‘스텟과 아이템’, ‘피격과 공격’, ‘스킬과 부가효과’ 등
매우 다채로운 시스템이 녹아져있었다
더 세부적으로 나가면
‘NPC와 AI’, ‘맵과 오브젝트’와 같은 추가적인 주제도 생각해볼 법 하다
(바론의 타입, 공격 패턴 및 생성 주기 등등)
이러한 과정을 ‘역설계’라고도 부르며
개발 실력을 늘리는 하나의 방법이라 하는 듯 하다
댓글남기기