새로운 목표 - PC로 제어가능한 닌텐도 스위치 컨트롤러 만들기
Posted 2020. 1. 28. 07:19, Filed under: 개발닌텐도 스위치의 신작 "모여봐요 동물의 숲"이 2020년 3월 20일에 출시될 예정이다. 지금으로부터 약 한 달 반 후이다. 얼마 전 시연 동영상을 보았는데 일단 시연상으로는 조작이 복잡하지 않고 시점이 고정되어 있어 Twitch Plays 처럼 커뮤니티 플레이를 하기 좋아보이는 점들이 몇 가지 있었다.
Twitch Plays 란 트위치 채팅창에 left, right 등의 지정된 키워드를 입력하면 게임 컨트롤러의 해당 키가 눌려, 시청자들이 채팅 참여를 통해 함께 플레이를 할 수 있는 것을 말한다. 이에 대한 상세한 이해는 나무위키의 Twitch Plays Pokémon 문서 참고. 최근 라이브 채팅을 인식하여 시청자들이 이상형 월드컵에 투표할 수 있는 시스템을 javascript 로 만든 경험이 있는데, 나름 흥미로워서 저런 것도 한 번 직접 만들어보고 싶다는 생각이 들었다. 마침 예전에 TV 녹화를 할 때 쓰던 캡쳐보드도 있어서 닌텐도 스위치를 방송에 띄울 수 있는 환경은 갖춰져있다.
이미 경험이 있기에 채팅을 읽는 것은 크게 어려운 일이 아니나, 문제는 Nintendo Switch의 입력을 PC에서 컨트롤하는 것이었다. 가장 무식한 방법은 조이콘을 분해하여 접점에 직접 신호를 가하거나 서보모터를 이용해 물리적으로 조이콘의 버튼을 누르는 것이겠으나, 활용 가능한 많은 오픈소스 코드들이 이미 github에 있었다.
- progmem / Switch-Fightstick
- jake-white / PCtoSwitch
- wchill / SwitchInputEmulator
- lulzsun / SwitchKBMEmulator
- ebith / Switch-Fightstick
- ItsDeidara / CommunityController
HORIPAD 또는 Pokken Tournament Pro Pad 라는 이름의 스위치 호환 컨트롤러를 리버스 엔지니어링한 내용을 바탕으로, 아두이노를 해당 컨트롤러로 인식시켜 기능을 구현하는 듯하다. 훑어보니 대략적인 계획이 세워졌다. 일단 작업을 최소한으로 줄이기 위하여, 애초에 Twitch Plays 를 위한 목적으로 개발된 가장 마지막의 CommunityController 를 기본으로 참고할 것이다. 다만 아두이노-시리얼 송수신-라즈베리파이-PC 의 구조를 사용하지 않고, USB(PC) to Serial 을 활용해 라즈베리파이 없이 PC로 아두이노를 바로 제어할 계획이다.
서랍을 뒤져보니 예전에 아두이노를 가지고 놀 때, 그리고 졸업작품을 만들 때 구매해뒀던 부품들이 꽤 있었다.
예전에 PC에서 원격으로 리모콘 송수신을 하기위해 사뒀던 PL-2303HX 칩셋의 USB to TTL 보드가 있었지만, 당시 몇가지 고생을 했던 기억이 있어서 그래도 괜찮은 편이라고 알려진 FT232 칩셋의 제품을 새로 구매해 사용해보기로 했다. 그리고 아두이노 우노도 호환 보드로 새로 샀다. 일단 문서에서 시키는대로 아두이노 우노로 해보고, 잘 되면 다른 도전을 해볼 생각이다.
이런저런 아이디어가 많으나, 일단 기본 기능들이 잘 동작하는 것을 먼저 확인한 후에 기능을 구현할 예정이다.
- 미국 NIST(표준기술연구소)의 시간을 화면에 띄우기 (딜레이 확인용)
- 짧은 주기의 화면 캡쳐 및 캡쳐된 이미지 분석을 통해
1. 게임 종료 시도를 인식 및 차단
2. 게임 내 선택지가 존재하는 경우 이를 인식, 투표 시스템을 도입하여 시청자 투표로 고를 수 있게함. - 주기적으로 게임을 자동 저장하기
- 별도의 통계 페이지 만들기 (채팅 입력 수, 플레이 시간, 입력된 명령어 수 등)
- 도네이션을 받아 특정 사용자에게 일정 시간 제어 권한 양도하기 (Max. n분)
딜레이를 감안하여 도네이션 후 n초 후 부터 권한 양도 시작 (시작/종료 시간을 표시)
1분 간 아무런 입력이 없을 시 권한 해제됨
누적된 예약 시간에 따라 제어에 필요한 가격이 상승 - 편하게 명령어 입력이 가능한 브라우저 확장기능 개발 (클릭으로 명령어 입력, 명령어 자동완성, 채팅에서 명령어 표시 ON/OFF 등)
- Anarchy, Democracy 모드 전환
- 커맨드 투표 현황을 시각화 (예: 캐릭터의 전후좌우에 화살표를 표시하고, 투표 정도에 따라 회색-파란색-빨간색 으로 표시)
- 스페셜 이벤트 - 매 정각에 임의의 유저에게 n분간 권한을 위임
1분간 아무 입력 없을 시 권한 해제됨 - Joycon 을 PC에 연결하여 직접 조작한 움직임을 레코딩, 아두이노 컨트롤러로 보내기
주말밖에 시간이 없을 것 같은데 3월 20일까지 구현 가능할지가 의문이다. 그리고 게임이 나와봐야 할겠지만 커뮤니티 플레이에 적합한 게임일지도 궁금하기는 하다. 아무래도 게임에 맞게 명령어를 커스텀해야 하는 과정도 있으니 시간이 더 걸릴 수도 있을듯하다.
다음 글: PC로 제어가능한 닌텐도 스위치 컨트롤러 제작기 - 1. 아두이노에 POKKEN CONTROLLER 펌웨어 설치하기