전체 스크린샷
 
launch character 노드로 더블 점프를 구현하는 것에서 아이디어를 얻어 구현했다.
 
 
내가 구현한 대쉬는

  • 플레이어가 정지해 있는 경우 플레이어가 보는 방향으로 빠르게 이동
  • 플레이어가 이동중인 경우 플레이어가 이동중인 방향으로 빠르게 이동
  • Z축 이동에는 영향을 끼치지 않음

위 기능을 가지고 있다. 
 
 
위 블루프린트는 다음과 같은 흐름을 가진다.
 

1. 플레이어의 상태(정지, 이동) 확인

  1. Get Velocity 노드 사용
  2. Vector Length 노드를 사용한 값과 0을 비교, Boolean으로 정지한 경우와 이동중인 경우를 나누어 각각 구현

 

2. 플레이어가 정지해 있는 경우

  1. Get Actor Forward Vector 노드를 사용
  2. 일정값을 곱하여 Launch Character 노드에 연결하여 플레이어가 보는 방향으로의 대쉬를 구현

 

3. 플레이어가 이동중인 경우

  1. Get Velocity 노드를 사용, 이 중 z값만 0과 비교하여 수직이동이 이루어지는지 확인
  2. Boolean으로 수직이동이 없는 경우(=플레이어가 지면에 있는 경우)와 수직이동이 포함된 경우(=플레이어가 공중에 있는 경우)를 나누어 각각 구현

 

4. 플레이어가 지면에 있는 경우

  1. Get Velocity 노드로 구한 값을 Split
  2. Z값을 0으로 한 Velocity를 Make Vector을 사용하여 생성
  3. Normalize 노드를 사용하여 이동 방향을 하고 일정값을 곱함
  4. 4-3의 값을 Launch Character 노드에 연결, 플레이어 이동방향으로의 대쉬를 구현

 

5. 플레이어가 공중에 있는 경우

  1. 4-3 이후 Clamp 노드를 사용해 이동 속도의 최대값을 정함

 
 
※플레이어가 공중에 있는 경우에는 대쉬 속도가 너무 빠르고 이동 거리가 길어져 위와 같은 방법으로 제한을 두었음
 

*이 블로그의 모든 글은 개인 공부를 위한 것입니다.

 

https://youtu.be/KW4JlxAEAE0

 

주요 질문 정리

 

 

Q. 해당 파트의 레벨 디자인을 진행하기 위해 디렉터로부터 받은 정보는 무엇인가? 무엇이 포함되어야 한다고 했는가?

 

A. 받은 것은 두 문단뿐이다. 게임의 전체적인 내용을 담은 거대한 엑셀 문서가 있었는데, 그 중 두 셀이 박물관 파트에 할당되어 있었다. 그 내용은 '조엘이 엘리에게 수영을 가르친다', '박물관에는 조엘과 엘리가 파이어플라이에 대해 대립하게 하는 요소가 있다'이다. 

 

 

 

 

Q. 어떻게 작업을 시작했는가? 먼저 스케치를 해 보는지, 아니면 곧장 3D툴로 작업하는지?

 

A. 곧장 3D 블록메시 작업을 하는 편이다. 대부분의 너티독 직원들이 그렇게 한다. 실제 게임과 가장 가까운 버전으로 갈 수 있는 가장 간단하고 빠른 방법이다.

 

 

 

 

Q. 그렇다면 만든 블록메시에서 실제로 엘리를 ps4컨트롤러, 게임과 동일한 카메라로 플레이할 수 있는가?

 

A. 그렇다. 똑같은 카메라, 똑같은 애니메이션으로 플레이해볼 수 있다. 우리가 곧바로 3D작업을 시작하는 이유이기도 하다.

 

 

 

 

Q. 이 레벨은 넓고 오픈된 야외 공간에서 시작된다. 어떻게 플레이어를 유인하는가?

 

A. 자연적인 장애물을 이용하려고 하는 편이다. (이 장면에서는) 플레이어에게 '나는 이 물에 뛰어들어 저 바위벽을 기어올라가진 않을 거야'라는 생각을 하도록 했다. 또는 많은 경우 연기smoke와 거울, 아트팀의 도움이 있다.

 

 

 

 

Q. 노티독의 게임들은 위니, 색, 라이팅을 통해 플레이어를 유도하는 것으로 알려져 있다. 이 레벨이서 그런 기법을 사용했는가?

 

A. 조엘이 엘리를 리드해주는 방법을 사용했다. 앞서나가는 조엘의 모습은 마치 '따라와,'라고 하는 것 같다. 그러다가 이것이 플립되는 연출을 사용했다. 

 

조엘은 멈춰서고, 엘리 앞에는 수풀에 가려진 빛이 있다. 조엘은 꼭 이렇게 말하는 것 같다. '좋아, 나는 그녀가 이것을 궁금해하게 할 거야.' 

 

뒤에 이어지는 중요 포인트 장면

 

 

 

 

 

 

실무적인 부분에서 가장 궁금했던 내용은 초반의 질문에 모두 담겼다. 이후에는 전투 없이 스토리텔링을 담당하는 레벨의 구성과 동선을 어떤 의도로, 어떤 방법으로 작업해 나갔는지에 대한 이야기를 나눈다. 

좋아하는 몇 가지 게임만 반복해서 플레이하는 경향이 있어 이를 극복하고자 기록을 시작했다.

특히 콘솔 AAA작, 오픈월드 게임을 주력으로 플레이하고자 한다.

특별한 감상이나 분석 없이 플레이 진척도만을 기록하고자 한다.

 

첫 번째로 해 볼 게임은 2013년 goty 다수 수상작 The Last of Us 이다.

다만, 원작 게임은 ps3 독점작이기에 2022년 리메이크한 steam판을 플레이했다.

 

 

1일차에 이어 조엘이 엘리와 단 둘이 여행하게 되는 과정을 설명하는 초반 파트를 플레이했다.

격리 구역에서 벗어나 과거에 도심이었던 구역을 지나 중앙청 건물에 진입, 이후 탈출했다.

AI Controller 의 컴포넌트 탭에서 AI Perception을 추가해 AI에게 주변 상황을 인지할 수 있는 능력을 부여할 수 있다.

 

디테일 패널의 AI퍼셉션에서 AI가 가질 수 있는 감각(시각, 청각 등)을 추가할 수 있고, 이 중 어떤것이 가장 주도적인 감각인지도 설정이 가능하다.

 

AI 시야(Sight) 인덱스 설정

시각 반경: 해당 반경 내의 것을 AI는 인지할 수 있다.

시야 상실 반경: 시각 반경 내에 들어왔던 것이라도 시야 상실 반경 밖으로 벗어나면 AI는 볼 수 없게 된다.

주변 시야 반각도: 시야각을 말하는 것으로, 반각도이므로 전체 시야각은 해당 값의 두 배를 생각하면 된다.

최대 수명: AI가 인지한 것을 기억할 수 있는 시간을 뜻한다.

플레이어 캐릭터 bp가 사용하는 애니메이션 블루프린트가 몇가지 변수를 세팅하고 간단한 스테이트 변환을 처리하는 법

 

 

ABP_PlayerCharacter은 BP_PlayerCharacter의 애님 클래스이다.

 

BP_PlayerCharacter은 현재 기본 캐릭터 메시와 기본 카메라, wasd 입력에 따른 걷기 기능을 가지고 있다.

애니메이션이 적용되어 있지 않기 때문에 입력이 없을 때에는 부자연스러운 정자세로 서 있고, 걸을 때는 정자세 상태를 유지한 채 위치만 이동한다.

 

 

아래는 캐릭터가 가만히 있을 때, 걸을 때 자연스러워 보이기 위한 애니메이션을 추가하는 방법이다.

 

 

1. 애니메이션 블루프린트(이하 ABP)를 생성하고 프리뷰 메시를 선택한다.

-프리뷰 메시는 좌측 상단에서 애니메이션 프리뷰를 보여줄 마네킹이다.

 

2. BP_PlayerCharacter(이하 캐릭터 BP)의 애님 클래스를 방금 생성한 ABP로 지정한다.

 

3. ABP이벤트그래프에 아래 노드를 추가한다.

 

-본 ABP를 소유하는 액터를 불러오고, 캐릭터BP로 형변환해 Player Character이라는 이름의 변수로 만든다.

-Player Character의 Character Movement component를 get해 character Movement라는 이름의 변수로 만든다.

-위 두 단계로 Player Character, Character Movement를 셋하고 원할 때마다 불러올 수 있게 된다.

 

Character Movement Component에 대한 이해는 공식 문서를 참고.

https://dev.epicgames.com/documentation/en-us/unreal-engine/understanding-networked-movement-in-the-character-movement-component-for-unreal-engine

 

4. ABP의 애님그래프에 'Locomotion'이라는 State Machine을 추가하고 output pose에 연결한다.

-locomotion은 한 상태에서 다른 상태/한 장소에서 다른 장소로 이동할 수 있는 능력이나 이동을 말한다. 플레이어의 상태를 저장하는 데 쓰이는 상태 머신의 이름으로 쓰인다.

 

5. locomotion 내에 두 개의 state를 생성하고 각각 이름을 idle, walk라고 한다. 

 

6. 각각의 state(상태) 내부에 해당 상태에 출력할 애니메이션을 추가하여 output 노드에 연결한다.

-빨간 노드는 하나의 애니메이션이다. 사진 속 노드는 Mf_idle이라는 애니메이션으로, 해당 노드를 output노드에 연결하면캐릭터 bp는 idle 상태에서 mf_idle 애니메이션을 출력하게 된다.

-초록 노드는 랜덤으로 애니메이션을 출력해 준다. 디테일 패널에서 애니메이션 시퀀스를 여러 개 추가하고 플레이 확률을 지정할 수 있다. 현재 이 노드가 아웃풋과 연결되어 있으므로 캐릭터 bp는 해당 노드 안의 애니메이션을 랜덤으로 플레이한다. 

 

7. locomotion에서 idle과 walk 상태를 양 방향 모두 화살표로 연결해 준다. 

-화살표 방향대로 상태가 변화할 수 있다. idle에서 walk상태로의 트랜지션, 반대의 경우 모두 가능하다.

-화살표 근처에 생성되는 동그란 아이콘을 클릭하여 트랜지션의 조건을 정할 수 있다.

 

8. 트랜지션 조건 찾기

-idle에서 walk로 : 플레이어 캐릭터가 이동하고 있는 경우 walk로 상태를 이행시켜주어야 한다. 

-walk에서 idle로 : 플레이어 캐릭터가 이동하지 않는 경우 idle로 상태를 이행시켜주어야 한다.

따라서 플레이어 캐릭터의 속력(speed)이 0을 초과하는 경우 walk, 캐릭터의 속력이 0인 경우 idle상태라고 볼 수 있다. 

 

9. 트랜지션 조건 세팅하기

-플레이어의 speed라는 변수는  abp의 이벤트 그래프에서 만든다.

-speed와 0의 크기비교 불리언은 상태 간의 이행 규칙 내부에서 설정한다. 

 

 

 

 

즉, abp로 플레이어의 상태를 정의하고, 각 상태에 적절한 애니메이션을 배치하고, 상태간 이행을 연결하고, 이행 규칙을 정할 수 있다.

UE5에서 기본적으로 제공하는 tps 모드를 사용하면 기본적으로 플레이어 캐릭터가 보는 방향과 상관없이 카메라를 이리저리 돌릴 수 있다. 

 

이 경우 플레이어가 바라보는 방향과 플레이어 캐릭터가 이동하는 방향이 다를 수도 있다. 

대부분의 tps게임처럼 플레이어가 화면을 통해 보는 방향과 플레이어 캐릭터가 바라보는(+조준하는)방향이 일치하도록 하고 싶은 경우 다음 세팅을 한다.

 

 

 

1. 플레이어 캐릭터 블루프린트를 연다

ue5 기본 tps 모드인 경우 BP_ThirdPersonCharacter 파일을 연다. 

 

2. 디테일 창에서 'orient rotation to movement'를 찾아 토글을 꺼준다

한글로는 '무브먼트 방향으로 회전 조정'

 

 

3. 디테일 창에서 'Use controller rotation Yaw'를 찾아 토글을 켜준다

한글로는 '컨트롤러 회전 요 사용'

 

 

 

이제 마우스 이동에 따른 화면 방향과 플레이어 캐릭터가 보는 방향이 일치한다.

 

 

https://www.unrealengine.com/ko/lesson-plans?tags=hour%20of%20code

 

에픽게임즈에서 제공하는 튜토리얼(링크)와 예제파일(이미지)

해당 프로젝트 파일을 사용하는 튜토리얼은 5강까지 있는 듯하다. 

 

 

1강은 각 창의 기능 설명, 액터 배치 등 가장 기초적인 것이어서 생략한다.

 

 

2강 링크

https://www.unrealengine.com/ko/lesson-plans/moving-platforms-and-checkpoints-loops-and-boolean-variables-in-unreal-engine

 

2강에서 다루는 내용은 boolean을 사용하는 간단한 블루프린트 사용법과 sequence animation 이다

 

 

1. boolean을 사용하는 블루프린트

 

프로젝트가 제공하는  체크포인트 BP(BluePrint)를 맵에 설치한다.

스태틱 매시와 콜리전, 체크포인트 텍스트와 화살표로 구성되어 있다.

이 중 화살표는 체크포인트에 플레이어 캐릭터가 로드될 때 캐릭터가 향하는 방향을 나타내는 것으로, hidden in game 이 적용되어 있다.

 

해당 bp의 이벤트 그래프

 

섹션 1: 플레이어가 sphere_coil 콜리전에 접촉한 경우 이벤트를 시작한다.

섹션 2: 해당 체크포인트가 이미 활성화되었는지 체크한다. 만약 이미 활성화되었다면(true) 아무것도 하지 않고, 비활성화 상태라면(false) 'Checkpoint Enabled' booldean을 on 상태로 셋한다.

섹션 3:  체크포인트의 색깔을 바꾸어 체크포인트가 활성화되었음을 플레이어에게 알려준다.

섹션 4: 게임 모드에 cast한다. Casting = Call = Talking to 로 생각하면 된다. 게임모드에게 플레이어 스폰 위치를 체크포인트 위치로 셋하라고 말한다. 

섹션 5: 체크포인트에서 효과음을 출력해 체크포인트가 활성화되었음을 플레이어에게 알려준다. 

 

섹션 3,5는 기능상 없어도 되지만 플레이어가 변화를 쉽게 알아차릴 수 있도록 돕는 장치이다.

영문으로는 “quality of life” feature 라고 한다.

 

 

 

2. sequence animation

 

시퀀스를 이용해 움직이는 발판을 만드는 실습을 진행했다.

 

 

1선택한 액터의 트랙을 생성한다

2프레임에 핑을 찍고 액터의 위치를 조정한다

 

프리미어 프로의 모션 기능과 유사하여 어렵지 않았다. 

에픽게임즈가 제공하는 컨텐츠나 마켓플레이스에서 구매한 컨텐츠를 프로젝트에 추가하려고 할 때 버전이 맞지 않는 경우 다음 방법을 사용한다.

 

 

 

언리얼 엔진 5.3버전에 추가해볼 애니메이션 팩. 5.2버전까지만 지원하는 팩이다.

'프로젝트에 추가'를 클릭한다.

 

 

 

 

기본적으로 에셋이 지원하지 않는 버전은 나타나지 않는다. 

 

'모든 프로젝트를 표시합니다' 체크박스를 클릭한다.

 

 

 

 

5.3버전의 프로젝트를 선택하면 경고 메세지가 나타난다.

버전 선택을 클릭한다.

 

 

 

 

지원하는 버전을 선택했다.

이제 언리얼 엔진 5.3버전에서 해당 애니메이션 팩을 사용할 수 있다.

 

지금은 최대한 비슷한 버전을 사용하는 예를 들었지만 언리얼 4,5 끼리도 에셋에 따라 호환이 가능하기도 하다. 

https://www.thisisgame.com/webzine/special/nboard/11/?n=190335

 

오버워치 2 게섯거라! 2024년은 '히어로 슈팅'의 해?

넷이즈부터 밸브까지

www.thisisgame.com

 
예전부터 갖고 있던 궁금증을 싹 풀어주는 기사를 보게 되어 내 경험과 함께 정리하는 글을 쓰려고 한다.
 
 
 
오버워치 같은 게임 어디 없나?
 
잠시 오버워치에 질렸을 때 했던 생각이다. 오버워치2 출시 직후 5대 5 전투와 UI 변화에 적응이 어려워서였다. 다른 온라인 fps 하고 싶은데, 서든어택이나 배틀그라운드 말고. 어디 오버워치 같은 게임 없나?
 
나에게 '오버워치 같은 게임'이란
 
1. fps이며,
2. 다양한 스킬을 가진 캐릭터들이 존재하고,
3. 총 한두방에 죽어버리지 않아 전장에서 지속적인 생존 및 플레이가 가능하고,
4. 죽는다고 해도 곧장 리스폰해 계속할 수 있는 게임
 
을 말했다. 당시(그리고 지금도) 발로란트나 에이펙스 레전드가 한창 인기를 끌었지만, 오버워치같은 게임은 아니었다. 그 때 오버워치의 장르를 정확히 알고 싶어 서치했을 때 나온 단어는 '하이퍼 fps'였다.
 
https://www.gameinsight.co.kr/news/articleView.html?idxno=9568

 

오버워치는 하이퍼 FPS? 도대체 하이퍼 FPS가 뭐야?

지난 5월 5일. 블리자드 엔터테인먼트의 신작 온라인게임 오버워치의 오픈베타 서비스가 시작됐다. 오픈베타 서비스 시작과 동시에 국내 PC방 점유율 리서치 사이트인 게임트릭스에서 4.89%의 점

www.gameinsight.co.kr

 
위 기사에 따르면 하이퍼 FPS는 밀리터리 FPS와는 전혀 다른 공방양상 스타일을 가진다. 하이퍼 FPS의 플레이어블 캐릭터들은 보통 빠른 속도와 시원시원한 점프로 맵을 빠르게 이동한다. 맵은 여러 층으로 이루어져 있고 점프 컨트롤을 강요하는 경우가 많다. 맵에서 스폰되는 아이템을 획득해야 게임을 유리하게 진행할 수 있어 아이템의 위치 숙지가 필요하다. 대부분의 경우 총을 두세방 맞아도 죽지 않기 때문에 상대방의 뒤를 잡더라도 실력에 따라 역으로 당할 수도 있다.
 
하이퍼 FPS의 대표적인 게임은 둠 시리즈, 퀘이크 시리즈이다. 누군가는 퀘이크 시리즈로부터 '하이퍼 FPS'라는 장르의 분류가 이루어졌다고도 한다. 
 
하지만 오버워치를 하이퍼 FPS라고 하기엔 무리가 있어 보였다. 빠르게 이동할 수 있고, 대개의 경우 피격되어도 곧장 죽지 않아 플레이를 이어나갈 수 있다는 점에서는 장르의 정의에 부합했지만 그에 더해 오버워치에는 AOS 게임의 특징도 뚜렷하게 나타났다. 단순히 상대를 죽여서 킬 수를 올리는 것보다 전장의 목표를 위해 위치를 선점하고, 적의 진입을 막고, 궁극기를 사용해 판을 뒤집는 것이 중요했다. 장르를 설명하기 위해서는 오버워치의 영웅, 캐릭터에 대한 주목이 필요해 보였다.
 
 
 

히어로 슈터란 1인칭 혹은 3인칭 PvP 슈팅 장르에 각 캐릭터의 고유 능력이나 '궁극기'와 같은 요소를 강조한 게임을 일컫는 단어다. 대표적으로 밸브의 <팀 포트리스 2>와 블리자드의 <오버워치>가 있다. 
플레이어는 고유한 속성, 기술, 무기, 궁극기 등을 가지고 있는 사전에 만들어진 '영웅' 캐릭터를 선택해 두 팀으로 나뉘어 경쟁한다. 팀워크가 강하게 요구되며 각 영웅 간의 조합이 중요하다. 개성 있는 영웅들이 존재하는 만큼 캐릭터의 움직임이 빠른 편이기도 하다.

 
 
본문 맨 처음에 첨부한 기사(<오버워치 2 게섯거라! 2024년은 '히어로 슈팅'의 해?>, 디스이즈게임)의 내용이다. 
 
이거구나! 싶었다. 오버워치 전투에서 가장 중요한 것은 영웅이다. 몇백 시간을 플레이해 전장을 속속들이 알고 2, 3인분을 가볍게 해내는 유저도 처음 해보는 영웅을 고르면 처참한 스탯표를 보게 된다(물론, 처음부터 잘 하는 유저도 있지만 일반적으로). 영웅마다 궁극기는 물론이고 이동기, CC기, 심지어 마우스 좌클릭으로 하는 기본 공격까지 모든 것이 다르기 때문이다.
 
같은 공격 역할(딜러), 지원 역할(힐러)라고 해도 영웅마다 전투 시 자리잡아야 하는 위치, 취해야 하는 플레이 스타일, 아군을 위해 해야 하는 일이 전혀 다르다. 공격 역할을 예로 들면 솔져:76은 중장거리에서 적의 접근을 견제하며 데미지를 줘야 하고, 트레이서는 적에게 근접해 적군의 진영을 흐트러 놓기, 일명 어그로를 끌어야 한다. 솔져는 메인딜러로써 딜을 충분히 못 넣으면, 트레이서는 서브딜러로써 '변수'를 내 주지 않으면 팀원의 질책을 받기 쉽다. 때문에 오버워치에서는 영웅의 조합이 팀원 개개인의 실력만큼이나 중요하다. 궁극기 상성이 잘 맞는 영웅 조합은 초창기부터 지금까지 꾸준하게 보일 정도다. 
 
오버워치는 2016년 5월 오픈베타 서비스 시작 이후 한달만에 국내 PC방 점유율 5.54%→27.05%로 급상승하며 이후 약 1년동안 리그오브레전드와 1, 2위를 다퉜다. 게임의 흥행으로 영웅 캐릭터의 이미지와 대사는 물론 해당 영웅 유저들의 경향까지도 밈화되어 짤방, 패러디, 심지어 연하장이나 청첩장으로까지 사용되었다. 캐서디의 궁극기 대사 '석양이 진다'를 이용한 말장난이나 짤방을 한 번이라도 보지 못한 내 또래는 드물 것이다. 이렇게 오버워치의 영웅들의 인지도가 높았던 이유는 오버워치가 일부 헤비 게이머들뿐 아니라 평소에 FPS게임을 즐기지 않던 라이트 유저들도 끌어들였기 때문이다. 밝은 분위기의 전장과 그에 어울리는 배경음악, 만화적 느낌이 가미된 반실사 3D 그래픽, 호감형 외관의 영웅들로 당시 부진함을 보이던 밀리터리 FPS보다 진입장벽을크게 낮췄다. 또한 에임 피지컬이 좋지 않아도 적절한 영웅 선택으로 어느정도 무마가 가능하고, 초보도 궁극기로 게임의 흐름을 뒤집을 수도 있어 당시에는 누구나 플레이하는 게임이었다.
 
초보도 스킬과 궁극기를 사용해 팀에 기여할 수 있다는 점은 오버워치뿐 아니라 히어로 슈팅 장르의 큰 특징이다. 영웅의 고유한 스킬은 초보에게는 참여와 기여의 기회를 주고, 숙련자에게는 다양한 전술과 기발한 플레이를 시도할 수 있는 기반이 된다. 이미 숙련된 영웅 외에 새로운 영웅을 플레이하며 플레이 풀을 넓혀가는 것도 게임을 즐기는 방법이기에 라이브 운영하기 좋은 장르기도 하다. 실제로 오버워치 2는 짝수 시즌마다 새로운 영웅을 공개하고, 꾸준히 영웅간의 밸런스 조절을 제공해 플레이어가 지속적으로 도전하고 재미를 느끼도록 유도하고 있다.
 
 
 
그렇다면 다시, 
오버워치 같은 게임 어디 없나? 
 
 
위 기사에 따르면 넷이즈의 <마블 라이벌즈>가 정보를 공개했으며, 밸브에서 유출된 <데드록>, 파이어워크 스튜디오가 공개한 <콩코드>가 있다. 또한 오버워치와 마찬가지로 팀 포트리스 2가 여전히 서비스 중이다. 오버워치 2, 팀 포트리스 2 외 서비스 중인 타 인기 타이틀이 없어 여전히 하이퍼 슈팅 시장은 블루오션이다. 잘 만들기 힘든 장르라는 반증이기도 한 셈이다. 
 
개인적으로 마블 라이벌즈의 출시가 무척 기대된다. 스파이더맨, 아이언맨, 블랙 위도우 등 인지도 있는 영웅으로 마블 영화를 연상시키는 플레이를 할 수 있을지부터 영웅 간 상호대사, 전투 중 특수 대사 등 부가적인 요소 역시 궁금하다. 워낙 인기 IP니 초반부터 유저가 몰릴 것 같은데, 출시되자마자 왁자지껄한 분위기를 느끼며 플레이하고 싶다. 
 
 

https://gamecodi.com/7820/%EC%96%B8%EB%A6%AC%EC%96%BC-%EB%A6%AC%EC%86%8C%EC%8A%A4%ED%8C%A9-%EC%84%A4%EC%B9%98%EC%8B%9C-%EC%9D%BC%EB%B6%80-%EA%B2%80%EC%9D%80%EC%83%89%EC%9C%BC%EB%A1%9C-%EB%A0%8C%EB%8D%94%EB%A7%81-%EB%90%98%EB%8A%94%EA%B2%BD%EC%9A%B0

+ Recent posts