한중일 입력기와 게임에서의 Esc 키 버그
최근에, 꽤 오래된 “Spec Ops: The Line"이란 3인칭 슈팅 게임을 즐기고 있습니다. 하도 오래된 게임이다 보니, 자잘한 버그가 많은 편인데, 예를 들자면 게임의 일부 부분이 주사율에 맞춰져 있어 만약 모니터가 고주사율 모니터면 클리어가 거의 불가능에 가까워진다거나, 아니면 전체화면 모드로 진입 시 다중 모니터들의 해상도가 깨져버리는 문제 등이 있죠.
하지만 이런 버그들 중 가장 짜증나는 버그는 게임을 일시정지할 수 없다는 점이었습니다. Esc 키를 눌러 일시중지 메뉴를 키려고 시도하면, 메뉴가 순간적으로 나타났다가 바로 사라져버리는 현상이 나타났습니다. 임시방편 해결책으로, 게임에서 Alt-Tab해서 나간 다음, 다시 진입 후 게임이 다시 화면에 그려지기 전 재빠르게 Esc 키를 두번 누르면 그제서야 메뉴가 사라지지 않았습니다.
운이 없게도, 일시정지 메뉴 외에는 게임에서 저장하고 나가는 방법이 없기 때문에 무슨 문제인지 알아내려고 했습니다. 이상하게도, 온라인에서 동일한 증상을 겪고 있는 사용자들을 확인활 수 없었습니다. SOTL은 최근에 스팀에서 게시가 삭제된 만큼, 관심이 예전보다 살짝 높아져 만약 모두에게 문제가 되는 부분이라면 온라인에 올라올 수 밖에 없다고 생각했습니다. 이걸 겪고 있는 사용자들이 없다면, 남은 선택지로는 게임이 제 환경과 시스템과 함께 작동하는 과정에서 생기는 버그일 수 밖에 없죠.
일단, 윈도우가 여러 입력 기기 때문에 예상치 못한 이상한 짓을 하는지 확인해보기 위해 모든 외장 키보드와 마우스를 연결 해제해 봤습니다. 하지만 버그가 지속되자, 입력기를 한글 입력기에서 영어로 바꾸니 곧바로 버그가 사라졌습니다…?
그래서 온라인에서 검색해보니, 다른 게임들에서도 이러한 버그가 있었습니다:
왜 그런진 모르겠지만, 제 예상으로는:
한중일 입력기는 영어와 다르게 한 글자를 입력할 때마다 여러 키조합을 통해서 글자를 입력합니다. 영어로는 ‘a’ 한 입력이 글자 하나에 부합하지만, 한국어는 ‘가’를 입력하려면 ‘r’ 키와 ‘k’ 키를 눌러야 하는 것처럼 말이죠.
그럼 만약 ‘가’ 대신 ‘ㄱ’와 ‘ㅏ’를 분리해서 입력하고 싶다면 어떻게 해야 할까요? 만약 입력 도중 Esc 키를 누르게 된다면 입력기가 알파 문자 (즉, 한국어에선 글자의 첫 자음) 입력 모드로 전환한 다음, 다음 글자를 조합하기 위해서 키 입력을 기다리게 됩니다.
제 예상으로는 IME에서 Esc 키에 대한 이벤트를 전송할 때, 프로그램에다가 알파 문자 입력 모드로 전환됨을 알리는 이벤트를 추가로 전송하는 듯 합니다. 이렇게 이벤트를 전송하면 프로그램이 현재 작성되고 있는 글자 아래에 있는 밑줄을 취소하고, 사용자는 다음으로 누르는 키들이 새로운 글자를 조합하는데 사용됨을 알 수 있죠. 이때 Esc 키를 기다리고 있는 게임 엔진들은, Esc 키를 한번 눌렀음에도 불구하고 두 번 누른 것이라고 착각해버리고 버그가 발생하는 듯합니다.
아쉽게도, KeyboardStateView for Windows와 같은 프로그램으로 증상 재현을 시도해봤지만 실패했습니다. 아마도 한중일 입력기와 테스트해 볼 생각조차 하지 못한 버그투성이 게임 엔진 코드 탓인 듯 합니다. 꽤 이상한 버그네요!