ROGUEFORGE / 개발 일지

같이 하는 판이
끊기지 않게

· 멀티플레이

모닥불 곁에 선 캐릭터 둘과 나무 옆 한 명. 각 캐릭터 머리 위에 숲지기, 모험가, 모험가라는 이름이 떠 있고, 같은 이름인 두 모험가는 이름 색이 서로 다르다
셋이 함께할 때. 머리 위에 캐릭터 이름이 뜨고, 이름이 같으면 색으로 구분한다.

이번 주에는 친구와 같이 하는 판을 손봤습니다. 참가한 사람의 조작이 덜 끊기고, 연결이 잠깐 흔들려도 판이 끝나지 않고, 다음에 다시 모였을 때 하던 그대로 이어지게 하는 것이 목표였습니다.

참가한 쪽의 조작

함께하는 판의 세계는 방장의 컴퓨터가 정합니다. 참가한 사람은 자기 조작을 방장에게 보내고 결과를 받아 화면에 그립니다. 그 사이의 지연 동안 화면이 멈춰 있지 않도록, 참가한 쪽도 자기 캐릭터의 걷기·구르기·채집·공격·스킬을 먼저 계산해 보여 주고, 방장의 결과가 오면 차이만큼 부드럽게 맞춥니다.

이 미리 계산을 방장이 실제로 처리하는 순서와 같게 맞췄습니다. 순서가 다르면 같은 조작도 결과가 조금씩 달라서, 방장 결과가 올 때마다 캐릭터가 뒤로 끌려가는 것처럼 보였습니다. 조작은 묶어서 보내되 직전 네 번의 조작을 매번 함께 실어, 와이파이처럼 가끔 한두 개가 빠지는 연결에서도 조작이 사라지지 않게 했습니다.

통신량을 줄였습니다

방장이 참가자에게 보내는 세계 상태를 압축하고, 자주 바뀌지 않는 정보는 바뀔 때만 보내도록 나눴습니다. 참가자 세 명 기준으로 방장이 한 번 상태를 만드는 시간은 최대 37ms에서 4.8ms로, 참가자 한 명이 받는 양은 초당 약 200KB에서 45KB로 줄었습니다. 전투 중에는 약 4분의 1입니다.

잠깐 끊겨도 그 자리에

연결이 끊기면 예전에는 바로 로비로 돌아갔습니다. 이제는 같은 세계에 남은 채 다시 연결을 시도하고, 1분 안에 다시 이어지면 그대로 계속합니다. 방장의 응답이 늦어지면 화면 위에 안내가 뜹니다.

다음에 만나도 그대로

같이 하던 사람이 같은 캐릭터로 다시 들어오면 그 사람의 가방, 장비, 골드, 거점과 저장고가 그대로 돌아옵니다. 들어오는 순서가 바뀌어도, 그사이 방장이 혼자 플레이했어도 이어집니다. 캐릭터마다 고유한 신원을 저장해 두고 그것으로 자리를 찾기 때문입니다. 떠난 자리가 그사이 건물 등으로 막혔으면, 가장 가까운 빈자리에서 시작합니다.

서로를 찾기

둘 이상이 모이면 캐릭터 머리 위에 이름이 뜹니다. 같은 이름이 여럿이면 색으로 구분합니다. 이름 옆에는 나중에 칭호를 붙일 자리를 비워 두었습니다.

거점 창에서 내 위치 공유하기를 켜면 다른 사람의 미니맵과 세계 지도에 내 위치가 보입니다. 미니맵 안에 있으면 동그라미로, 바깥에 있으면 테두리에 방향을 가리키는 삼각형으로 표시됩니다.

방 코드와 함께 줍기

친구 목록에 없어도 방 코드만 있으면 들어올 수 있습니다. 방을 연 사람의 화면 왼쪽 위에는 방 코드와 대기 상태가 보이고, 누가 들어오거나 나가면 알려 줍니다. 가방에서 바닥에 내려놓은 아이템은 함께하는 사람이 약 2초 뒤부터 주울 수 있습니다. 내려놓은 사람 본인은 5초 뒤부터 다시 줍습니다.