메아리 저널

앙골모아 2.0​

별로 도움이 되지 않는 것 같은 메아리 첫 페이지를 자주 보는 사람이라면 어제 희대의 이상한 BMS 플레이어 앙골모아가 갑자기 2.0 alpha 1을 찍었음(!)을 알 수 있을 것이다. 참고로 앙골모아는 2009년에 마지막으로 커밋을 했으니 3년만의 커밋인데(…), 저작권 연도를 보면 원래 개발을 2~3년에 한 번씩 한다는 매우 중요한 사실을 알 수 있다.

본래 앙골모아는 원래 코드를 줄일 요량으로 만들었으며(1.0-final이 15K1를 찍었음) 당연히 기능이고 뭐고 최소화한 프로그램이었지만, 어쩌다 보니까 쓸만한 크로스플랫폼 BMS 플레이어가 없는 상황이 계속 되다 보니까 실질적으로는 “최신”(이것도 웃긴게, “최신”이라고 하는 것이 2003~4년이다) BMS 확장을 지원하는 거의 유일한 크로스플랫폼 BMS 플레이어가 되어 버렸다. 그래서 1.0을 마지막으로 정리해서 내 놓을 때는 ‘시바 이거 더 이상 개발 안 해’라고 생각하고 있었으나, 생각을 조금 바꿔서 (어차피 이 쪽에 관심 가지고 있는 사람들도 없잖아?) 아주 핵심적인 기능만 기준으로 계속 개발하기로 했다. 물론 지난 개발 전적을 생각하면 개발 속도는 더럽게 느리겠지만….

뭐 그래서, 2.0 alpha 1까지 들어 간 기능은 이런 게 있다.

  • 호환성 관련해서 상당히 많은 부분을 뜯어 고쳤다. 이제 엔디안 관련된 문제는 별로 없을 것이다. 사실 의도적으로 이렇게 짠 건 아닌데 반대 엔디안으로 테스트를 해 본 적이 없어서 드러나지 않은 문제가 상당수 있었다.
  • 옵션을 좀 더 멀쩡하게 갈아 엎었다. 이제 ./angolmois foo.bme vw 3.0 이런 웃기지도 않은 옵션(…) 대신 ./angolmois foo.bme --viewer --no-fullscreen -a 3.0 식으로 쓸 수 있다. 참고로 getopt 안 쓰고 하느라 좀 머리를 굴렸다.
  • 옵션 갈아 엎는 김에 한 키에 여러 키보드 키를 대응시키는 기능을 추가했다. 이 기능은 생각보다 간단하지 않은데, 심지어 이런 기능이 있는 BMS 플레이어들 중에서도 처리를 대강 대충 하는 경향이 있다. 앙골모아에서는 귀찮다는 이유로 여러 키보드 키 중 한 개 이상이 눌려 있으면 계속 눌려 있는(즉 롱노트라면 눌려 있는 상태로 유지되는) 것으로 가정하였다.
  • viewer 모드에서 제대로 된 오토 플레이가 동작한다. 즉, 스코어와 콤보가 제대로 올라간다.
  • 게이지가 좀 더 짜졌다. 옛날에는 MISS 시 게이지의 2.3%가 깎였지만 이제는 6% 정도 깎인다(다만 앙골모아는 MISS와 BAD의 게이지 하락 폭이 달라서 매우 빡센 건 아니다). 그리고 올라가는 속도도 좀 조정해서 한 노트에 1% 이상 올라가는 일이 없도록 하였다. 1.0 게이지는 당시 내가 리듬잇2에서 클리어할 수 있는 곡은 앙골모아에서도 클리어할 수 있고 못 하는 곡은 못 하도록 의도는 했는데 게이지가 훨씬 후했던 것으로 판명이 나 버렸다. 2.0에서는 평균적으로 ☆12로 인정받는 곡을 내가 아슬아슬하게 클리어3할 수 있을 정도로 재조정했다.
  • 리소스 로딩 속도를 개선했다(…). 1초에 리소스가 30개 이상 로딩이 잘 안 되던 옛날 컴퓨터에서는 전혀 깨닫지 못 했는데, SDL_Flip이 수직 동기화에 영향을 받아서 1초에 로딩 가능한 리소스 수가 제한되어 있었다. 이래서 사람은 SSD를 쓰고 봐야 합니다.
  • 이제 공식적으로 ogg/mp3 키음을 지원하고, 최근 경향에 발맞춰 동영상도 어느 정도 지원한다. 동영상 지원에 smpeg를 사용하고 있어서 MPEG-1만 지원하긴 하지만 어차피 호환성 때문에 아무도 다른 걸 안 쓰므로 웬만한 건 잘 도는 것 같다.
  • 별 건 아니지만 F3/F4로 속도 조절을 할 때 삑 하는 소리가 나도록 했다. 안 나니까 헷갈리더라.
  • 옛날보다 코드가 100배 정도 깔끔해졌다.

이 버전이 “alpha 1”이라는 말은 물론 그 뒤에도 좀 손을 볼 게 남아 있다는 소리다. 당장 생각하고 있는 것으로는 다음과 같은 것이 있다.

  • 코드를 좀 더 정리한다. 기존 코드에 비하면 상당히 정리된 상태긴 하지만 여전히 정리가 되지 않은 부분이 많고, 코드 구성도 산만함의 극치이다. 워낙에 초기 코드가 기괴했던 터라, 코드를 제대로 정리하면 코드 길이가 오히려 “줄어들” 것으로 기대하고 있다. (나름대로 2천줄을 마지노선으로 잡고 있는 터라…)
  • 비슷한 의미에서, 라이브러리나 표준 함수들로 해치울 수 있는 것들을 일일이 수작업으로 하고 있는 코드들은 모두 걷어 낸다.
  • 리플레이 기능을 만든다. 물론 리플레이 파일을 만들려면 처음에 옵션을 줘야 한다. (이게 귀찮다면 셸 스크립트로 shell을 만들어서 써도 된다. 사실 이렇게 쓰는게 앙골모아의 최소주의 철학에 더 걸맞다!)
  • 비트콘 지원을 할 수 있는지 확인해 봐서 되면 지원하도록 한다. 사실 윈도라면 Joy2Key가 있긴 하지만, SDL이 조이스틱 입력을 지원하니 가능하면 바로 되게 하는 게 낫지 않을까 싶다.
  • 게임 종료 후 결과 화면을 좀 더 개선해 볼 수도 있을 것 같다.

최근 추이로 볼 때 다음 개발은 2014년이 될 것 같지만… 여하튼 theseit는 죽었어도 앙골모아는 안 죽었으니까 희망을 놓지 말자.


  1. 1만 5천 줄이 아니라 1만 5천 바이트다… 지금 생각하면 줄일 여지는 훨씬 많다. 큰 어려움 없이 1만 바이트 아래로 줄일 수도 있을 것이다. 

  2. 게다가 리듬잇은 BMS 플레이어 중에서도 판정·게이지가 매우 후한 것으로 잘 알려져 있다. 나중에 루브잇에서 다소 어려워졌으나 그래도 여전히 후한 축. 

  3. 앙골모아는 게이지 30%(=150/512)가 클리어 기준이므로, 이 기준을 그대로 IIDX나 그와 비슷한 판정·게이지를 가진 플레이어로 가지고 가면 클리어를 못 하는 게 맞다. 


텀블러를 씁니다.