본문 바로가기

블로그 / 개발일지

AvoidNow 경쟁 모드 설계: 대시 하나로 피하기와 밀치기를 같이 한다

최대 4명이 마지막 생존자를 가리는 AvoidNow 경쟁 모드의 대시 밀치기 규칙을 정리했다. 밀치기 버튼을 따로 두지 않은 이유와 44px, 650px/s, 0.3초라는 숫자의 의미.

Salmonholic ·· 4분 읽기

거대 공룡 다리와 발자국 경고 사이에 원시인 두 명이 서 있는 AvoidNow 멀티플레이 화면

AvoidNow의 경쟁 모드는 규칙이 짧다. 최대 4명이 같은 아레나에서 공룡을 피하고, 마지막까지 살아남은 사람이 이긴다. 부활은 없다. 여기에 한 가지를 더했다. 대시로 상대에게 부딪히면 상대를 밀어낼 수 있다. 이 글은 그 밀치기를 어떻게 정했는지에 대한 기록이다. 같은 날 만든 협동 모드는 협동 모드의 부활 규칙에 썼다.

세 가지 안 중에서 고른 것

밀치기는 9월 26일 권위 서버를 처음 올린 커밋 9a49747에 들어갔다. 결정 기록에는 세 가지 안이 적혀 있다.

안 내용
A (구현) 대시로 부딪히면 상대를 짧게 밀어냄. 밀린 쪽은 0.3초 조작 불가
B 밀치기 전용 버튼을 대시와 분리
C 밀린 쪽이 장판 위면 추가 피해

결정 목록에서 추천안으로 굵게 표시한 A안을 먼저 구현해 두었고, 지금도 그대로다. 다른 두 안을 넣지 않은 이유는 이렇다. 버튼을 따로 두는 B안은 모바일에서 문제가 된다. 모바일 조작은 왼쪽 가상 조이스틱과 오른쪽 아래 대시 버튼 하나뿐이다. 버튼을 하나 더 넣으면 엄지가 누를 곳이 늘어난다. C안은 밀린 결과를 이미 장판이 처리해 준다. 발자국 위로 밀려나면 그 발에 맞는 건 원래 규칙이라, 따로 추가 피해를 얹으면 같은 실수에 두 번 벌을 주는 셈이 된다.

A안의 재미는 대시가 두 가지 일을 한다는 데 있다. 대시는 0.2초 동안 무적이라 장판을 뚫는 회피 수단이다. 쿨타임은 1.1초다. 상대를 밀려고 대시를 쓰면, 바로 다음에 떨어지는 발을 대시로 넘을 수 없다. 공격하면 방어가 약해진다. 버튼 하나로 이런 선택이 생긴다.

멀티플레이 메뉴 화면 멀티플레이 메뉴. 빠른 매칭과 방 만들기가 협동, 경쟁으로 나뉜다.

숫자 세 개: 44px, 650px/s, 0.3초

규칙은 서버 공유 코드의 상수 세 개로 정해진다.

상수 값 뜻
밀치기 거리 44px 대시 중인 사람의 발밑에서 이 거리 안에 들어온 상대가 밀린다
밀리는 속도 650px/s 밀린 순간 상대의 속도
기절 시간 0.3초 이 동안 이동 입력과 대시가 막힌다

판정은 매 틱 한다. 대시 중인 사람이 있으면, 44px 안에 있는 살아 있는 상대 중 이미 기절하지 않은 사람을 민다. 방향은 나에게서 상대 쪽이다. 둘이 완전히 겹쳐 있으면 내 대시 방향으로 민다.

밀린 사람은 650px/s로 튕겨 나간 뒤, 기절 동안 입력이 막힌 채 이동 가속도(초당 2400px/s)만큼 느려진다. 계산하면 약 88px 밀려난다. 캐릭터의 발밑 판정 원 반지름이 16px이고 걸어가는 공룡의 발 크기가 115px이니, 발자국 가장자리에 서 있던 사람을 발자국 한가운데로 보내기에 충분한 거리다. 반대로 탁 트인 곳에서 밀면 별일이 없다. 밀치기가 위험한 건 장판이 깔려 있을 때뿐이다.

기절 판정은 클라이언트의 이동 예측에도 똑같이 들어 있다. 내 캐릭터는 서버 응답을 기다리지 않고 먼저 움직이는데, 예측 코드에 기절이 없으면 밀린 뒤에도 내 화면에서는 계속 걸어가다가 서버 위치로 끌려가게 된다.

누가 이겼는지 정하는 법

경쟁은 두 명 이상이 시작했을 때만 “마지막 생존자” 규칙이 적용된다. 살아 있는 사람이 한 명 이하가 되는 순간 판이 끝난다.

  • 한 명이 남으면 그 사람이 이긴다.
  • 마지막 둘이 같은 순간에 쓰러지면, 쓰러진 시각이 가장 늦은 사람을 승자로 한다.
  • 접속이 끊겨 떠난 사람은 승자 후보에서 뺀다.

경쟁 방에 혼자 들어가서 시작하면 어떻게 될까. “살아 있는 사람이 한 명 이하면 끝”을 그대로 적용하면 시작하자마자 끝나 버린다. 서버 테스트에 “경쟁 방에 혼자 들어가도 바로 끝나지 않는다”는 케이스를 넣어 두었다. 혼자 시작한 경쟁 방은 싱글처럼 쓰러질 때까지 이어진다.

경쟁에서도 공룡은 누구의 편도 아니다. 나를 노리는 발과 익룡은 살아 있는 사람 중 한 명을 무작위로 골라 따라간다. 패턴 간격은 협동과 같은 규칙으로 살아 있는 인원이 많을수록 촘촘해진다. 네 명이 모두 살아 있으면 혼자 할 때보다 두 배 자주 나온다. 여기에 상대가 밀어 넣을 수까지 있으니, 장판 옆에 서 있는 것 자체가 협동보다 위험하다. 아슬아슬 점수를 노리고 발자국 가장자리에 붙어 있으면 대시 한 번에 판이 끝날 수 있다.

테스트 한 줄로 지키는 것

밀치기 테스트는 짧다. 두 사람을 30px 떨어뜨려 세우고, 한 사람이 상대 쪽으로 대시를 누른다. 한 틱 뒤 상대에게 밀치기 효과가 나왔는지, 상대의 가로 속도가 300px/s를 넘는지 확인한다. 그다음 상대를 쓰러뜨리고 대시한 쪽이 승자가 되는지 본다.

화면에서는 밀치기가 나면 화면이 짧게 흔들리고 흙먼지가 튀고 부딪히는 소리가 난다. 경쟁 랭킹은 협동과 달리 사람마다 한 줄씩 올라간다. 다른 사람을 밀어서 이기는 게 치사해 보일 수도 있지만, 해 보면 서로 대시 쿨타임을 보며 눈치를 보는 시간이 꽤 재미있다. AvoidNow 게임 페이지에서 멀티플레이를 누르고 빠른 매칭 (경쟁)을 고르면 된다.

#AvoidNow#경쟁 모드#멀티플레이#게임 디자인#개발일지

함께 읽으면 좋은 글

전체 글 →