카드 시스템
플레이어가 카드를 사용하는 모든 행동과, 시스템이 카드를 다루는 모든 동작들에 대한 내용을 카드 시스템으로 정리한다. 카드를 다루기 위해 알아야하는 모든 개념들과 동작 원리에 대한 내용을 다룬다.
카드 더미
카드 더미는 손 카드 더미(Hand Cards Pile), 뽑을 카드 더미(Draw Cards Pile), 버려진 카드 더미(Discarded Cards Pile), 제외된 카드 더미(Excluded Cards Pile)로 구성된다. 다음 이미지는 왼쪽에 뽑을 카드 더미, 가운데에 손 카드 더미, 오른쪽에 제외된 카드 더미와 버려진 카드 더미를 나타낸다.
카드 행동 및 동작
카드 뽑기(Draw)는 뽑을 카드 더미에서 카드를 손 카드로 가져오는 행동 및 동작을 의미한다.
카드 뽑기 과정에서는 요청한 개수만큼의 카드를 이동시킨다. 만약 뽑을 카드 더미에 요청한 카드 개수만큼의 카드가 없는 경우 카드 섞기 작업을 진행하여 버려진 카드 더미의 카드들을 뽑을 카드 더미로 이동시킨 후 카드 뽑기 작업을 진행한다.
이후에도 카드가 부족한 경우에는 뽑을 카드가 없다는 메시지를 남긴다. 반대로 다 뽑은 후 손 카드 더미의 카드 숫자가 10장 이상이면 손 카드 수가 10장이 될 때까지 최근에 뽑은 카드 순서로 버린다.
카드 사용하기(Use)는 손 카드에 있는 카드를 사용하는 행동을 의미한다. 카드를 사용하기 전에 먼저 카드를 사용할 조건이 되는지 확인한다. 만약 현재 카드가 사용 불가능한 상태라면 드래그 시에도 카드 사용에 대한 UX가 나타나지 않는다. 현재 카드가 사용 가능한 상태라면 실제로 사용을 시도한다. 카드 사용 후 카드 사용에 필요한 에너지가 충분하지 않거나, 카드 사용 위치가 잘못되었거나 등 여러 조건들에 의해 카드 사용이 실패될 수 있다. 성공적으로 카드를 사용하였다면, 카드 사용 이벤트에 동반된 커스텀 작업들을 수행하고, 에너지를 감소시키고, 카드의 위치를 이동시킨다. 사용된 카드는 각 카드의 특성에 맞게 처리된다. 일반적인 경우 버려진 카드 더미로 이동하고, 카드 특성 상 한번만 이용 가능한 카드라면 제외된 카드 더미로 이동하거나 아예 파괴될 수도 있다. 카드 사용이 끝난 경우 손 카드에 있는 모든 최초 사용 카드(Opener Card)들을 버린다. (최초 사용 카드는 턴이 시작했을 때 처음으로 사용해야 하는 카드 특성을 의미한다.)
카드 버리기(Discard)는 카드 사용 후 버려진 카드로 카드를 이동시키는 행동 및 동작을 의미한다. 버려진 카드는 뽑을 카드 더미에 카드가 부족한 경우 모든 카드를 섞은 후, 다시 뽑을 카드 더미로 이동된다.
카드 제외시키기(Exclude)는 카드 사용 후 제외된 카드 더미로 카드를 이동시키는 행동 및 동작을 의미한다. 제외된 카드는 뽑을 카드 더미로 이동되지 않는다. 다만, 제외된 카드는 예외적인 동작을 통해 다시 되살릴 수도 있다.
카드 파괴하기(Destroy)는 카드 사용 후 카드를 파괴시키는 행동 및 동작을 의미한다. 파괴된 카드는 더미를 갖지 않고, 되살릴 수 없다.
카드 섞기(Shuffle)은 뽑을 카드 더미에 카드가 모자란 경우, 버려진 카드의 모든 카드를 랜덤하게 섞은 후 뽑을 카드 더미로 이동시키는 동작을 의미한다.
카드 생성하기(Create)은 카드를 손 카드, 뽑을 카드, 버려진 카드 중에 카드를 생성시키는 행동 및 동작을 의미한다.
카드 보존하기(Retain)은 턴 종료시에 카드가 계속 손 카드에 남아있도록 하는 동작을 의미한다.
카드 조작(Change Stat)은 카드의 특성이나 스텟을 바꾸는 행동을 의미한다.
손 카드 고르기(Hand Pick)은 손 카드에서 특정 카드들을 선택하는 행동을 의미한다. 선택 후 어떻게 쓰여질 것인지는 상황에 따라 다를 수 있다. 예를 들어 보존할 카드를 2장 선택해야하는 경우 카드 고르기 작업을 통해 플레이어가 손 카드에서 보존시키고자 하는 카드를 선택할 수 있다. 또한 버릴 카드를 선택해야하는 경우도 같은 프로세스로 동작할 수 있다. 손 카드에서 반드시 N장의 카드를 골라야 하는 경우 이 작업은 자동화될 수 있다. 예를 들어 현재 손에 카드가 2장이 있을 때, 카드를 2장 골라서 버려야하는 경우, 굳이 UI를 띄워 2장을 고르는 번거러움 없이 자동으로 버려지게 될 것이다. 다만, 이 작업은 버리지 않는 선택지가 없을 때 해당된다.
더미 카드 고르기(Pile Pick)은 손 카드 외 모든 다른 더미들에서 특정 카드들을 선택하는 행동을 의미한다. 마찬가지로 선택 후 어떻게 쓰여질 것인지는 상황에 따라 다를 수 있다.
카드 턴 시스템
다음은 턴 시작 시, 턴 진행 중, 턴 종료 시로 나누어 동작되는 카드 시스템에 대한 설명이다.
턴 시작 시
먼저 턴 시작 시 생성되어야하는 모든 카드 생성한다. 턴 시작시 시스템적으로 생성되는 카드와, 효과들에 의해 생성되는 카드들이 나뉘어질 수 있다.
그 이후 카드를 드로우 카드 개수만큼 뽑는다. (드로우 카드 개수는 일반적으로는 5 이지만, 플레이어 능력에 따라 달라질 수 있다.)
턴 종료 시
먼저 턴 종료시 이번 턴 보존시킬 카드 개수만큼 카드를 선택하도록 한다. 선택된 카드들은 이번 턴 동안 보존될 카드의 특성을 갖는다. (보존시킬 카드 개수는 일반적으로 0 이지만, 플레이어의 능력에 따라 값이 달라질 수 있다.)
이후 각 카드의 종료 처리 특성에 맞게 카드 처리한다.
카드 특성이 Discard인 경우 버려진 카드 더미로 이동시킨다.
카드 특성이 Exclude인 경우 제외된 카드 더미로 이동시킨다.
카드 특성이 Destroy인 경우 파괴시킨다.
카드 특성이 Retain인 경우 이동 없이 손 카드에 남겨둔다.
카드 인풋 시스템
다음은 카드 UI의 조작 및 인풋 시스템에 대한 설계도이다. 기본적으로 모든 상태는 FSM을 통해 관리된다.
시행착오
카드를 드래그중일 때 다른 카드들은 Disable 상태로 넘어가고 드래그가 끝나는 시점에 Idle 상태로 다시 돌아온다. 그러므로 카드를 사용하는 경우 카드 사용 직후 사용된 카드 외에 다른 카드들은 Idle 상태이기 때문에, 카드의 Play 이후 작업이 길어지게 되면 그 사이에 다른 카드를 사용할 수 있게 된다. 이 경우 문제가 생길 여지가 있는데, 카드를 사용하면서 카드의 특성에 따라 카드 뽑기를 진행하게되면 뽑을 카드 더미에 카드가 없는 경우 카드 섞기 작업까지 진행한다. 이 구간이 길기 때문에 그 사이에 플레이어가 다른 인풋을 넣을 수 있는데, 이때 넣어진 인풋들이 제대로 동작하지 않을 가능성이 있다.
슬레이 더 스파이어의 경우 이 상황에서 유저 인풋을 무시하도록 따로 처리를 하였다.
결과화면
https://www.youtube.com/watch?v=Xl-v82p7fhw