WzComparerR2 Avatar 저장/내보내기 기능 개선

2018-06-06

필요성

WzComparerR2의 원 버전에는 아바타 저장, 내보내기 기능이 없다. 그리고 나도 사실 아바타 플러그인을 잘 쓰지 않아서 기능 개발에 큰 관심이 없었다. 그런 상황에서 @craftingmod님이 보내주신 Pull Request#에 있는 기능이 전부였다. 단지 여기서 공백 스타일, 함수 이름 정도만 변경하고 1년을 넘게 방치해 두고 있었다.

최근 메이플 인벤에서 한 유저가 이 기능을 언급했고, 현재 내보내기 등의 기능이 전부 GIF로만 되어서 화질이 심각하게 떨어진다는 언급을 해 주었다. 이에 APNG 지원도 추가되었겠다 해당 설정을 끌고 와서 사용할 수 있게 하여 보고자 하였다. 한편 그 메이플 인벤의 원본 글은 최근 일련의 사태 때문인지 삭제된 것으로 보인다.

진행 과정

굉장히 테크니컬하고 소스 코드에 관련된 이야기이지만 매우 간단하게만 적어보자면, 새로 추가된 APNG 관련 기능들이 전부 메인 프로젝트의 PictureBox 클래스 안에만 한정되어 있었다. 이걸 옮기는 건 MonoGame, GraphicsDevice 등으로 너무 스케일이 커져서 포기하고 그나마 wrapper 정도만 Common의 Gif 클래스에 추가하여 옵션을 줄 수 있도록 변경했다.

전체적으로 굉장히 많이 리팩터링을 했고, 라이딩(TamingMob)도 지원하도록 했다.

(구) 진행 과정 창
그림 1 (구) 진행 과정 창

위와 같이 진행 과정 창도 굉장히 밋밋한 디자인이었는데, 이를 바꿔 보기 위해 검색하던 중 윈도 자체의 창을 활용할 수 있다는 정보#를 찾아 이를 적용했다.

여기서 배운 스레드 사용법 등은 QuestDB 만드는 부분에도 동일하게 적용했다. 이건 릴리즈를 해야할 지 말아야 할 지 아직도 모르겠다.

결과

진행 과정 창
그림 2 진행 과정 창

이제 남은 시간을 운영체제에서 알아서 예상해주고, 상태 표시줄에도 진행 상황이 함께 나온다.

만약 이전 버전에서 라이딩 지원만 추가되었다면 아래와 같은 그림이 나왔을 것이다.

태양의 의자 GIF
그림 3 태양의 의자 GIF

배경을 검은색으로 하고 보면 매우 충격적인 그림을 볼 수 있을 것이다. GIF는 팔레트 인덱싱이 되므로 어쩔 수 없다. 그냥 버리고 APNG를 쓰도록 하자. 그러면 아래와 같이 하얀색도 없어지고 훨씬 깔끔하게 나온다. 이 의자에서는 잘 부각되지 않지만 투명한 정도가 큰 화면 이펙트 같은 것들을 보면 굉장히 차이가 크다.

태양의 의자 APNG
그림 4 태양의 의자 APNG

참고로 "태양의 의자"로 생기는 TamingMob의 경로는 Character\TamingMob\01983256.img 이다.

돌아가기


댓글