'2018/04/08'에 해당되는 글 2건

RenPy게임은 사실 허점이 많습니다. 이런 저런 잠금장치를 해봐도 결국 Python이라는 특성상 Py파일을 열 수 있고 엔진의 Py파일을 손대면 이러니저러니 해도 데이터 마이닝을 쉽게 할 수 있습니다.


사실 대다수 게임엔진은 개발자모드 혹은 콘솔진입을 허용합니다. 대표적인 게임이 퀘이크 엔진과 그의 영향을 받은 소스엔진 같은 게임 엔진입니다.


멀리 갈 것도 없이 소스엔진 게임인 half-life를 실행한 상태에서 `키(혹은~키)를 누르면 갑자기 게임 내에서 명령어 창이 뜹니다. 이게 바로 게임 엔진의 콘솔인 것이지요. 일반인들은 이 콘솔을 치트키를 치는 창 정도로 생각하지만 (sv_cheats 1 이런 것)사실은 이 명령창은 개발자의 개발 편의성을 위해 만들어진 것 입니다.


RenPy도 게임엔진이기에 개발자의 편의를 위한 기능을 내장하고 있습니다. 보통 options.rpy파일로 이를 제어하고 있습니다.


우선 매뉴얼을 볼까요?


https://www.renpy.org/doc/html/developer_tools.html

Shift+O키를 누르면 콘솔이 활성화 되고 Shift+R을 누르면 스크립트를 다시 읽어들인다고 합니다. 실시간 스크립트 수정이 필요할 때 아주 좋지요.


하지만 이것을 실제 게이머가 실수로 누르기라도 하면 난감해지겠지요? 어떻게 하는지도 잘 모를 것이고요. 이를 제어하는 일반적인 방법은 다음과 같습니다.


Renpy로 만들던 중에 Options.rpy 파일을 열면

init -1 python hide:
    config.developer = False
    config.console = False

이러한 구문이 있거나 이것과 흡사한 구문이 있습니다.


바로 개발자모드를 활성화 하는 코드입니다. 물론 실제 상용 게임에는 True를 False로 바꿔서 개발자모드 진입을 막습니다. 그리고 파일을 쉽게 읽기 어렵게 하기 위해 rpyc형태로 배포합니다. 한번 컴파일한 형태이지요. 물론 rpyc는 쉽게 디컴파일이 되지만 Python 직접 접근 구문에서 간혹 파일이 깨지기도 합니다. 그러므로 rpyc파일을 디컴파일해서 rpy로 만든 다음 수정해도 되지만 이는 별로 추천하지 않습니다.


무엇보다 Renpy는 Python이기에 위험한 작업 없이도 쉽게 됩니다.


Python은 인터프리터 언어이고 이미 있는 객체의 이름을 다른 객체로 선언하면 이전의 객체는 무시됩니다. 그리고 Renpy는 스크립트를 읽어들일때 이름 순으로 읽습니다. 즉, A로 시작되는 파일을 읽기 시작해서 z로 시작하는 파일로 끝내는 것입니다.


그렇다는 것은 Options.rpy를 읽어들여서 개발자모드가 비활성화 되었다고 한들 z로 시작되는 파일을 읽어서 활성화 되면 개발자모드가 다시 활성화 되는 것입니다.


두근두근 문예부의 경우 이를 비활성화 해 놓았습니다. 막말로 이런 플레이어를 가지고 노는 게임이 개발자모드로 진입하면 이게 게임의 일부분인지 아니면 실수인지 알 길이 없지요.(오류메시지나 블루스크린마저 게임의 일부분으로 써먹는 게임이니까요. 진짜 오류메시지와 구분이 안 갑니다.)


하지만 zzzzz.rpy라는 파일을 game폴더에 만들어 놓고 다음과 같이 적어봅시다.

init -1 python hide:
    config.developer = True
    config.console = True


이렇게 하고 게임을 실행하면...


평상시와 다를 것이 없습니다. 하지만 Shift+O키를 누르면 상황이 달라집니다.

>

어디서 많이 보지 않았나요?

닮았죠?

네 바로 Python 커맨드 창입니다. 직접 여기서 명령을 내려서 제어를 할 수 있습니다.

물론 Python구문뿐 아니라 RenPy모듈도 이미 import 되어 있기에 RenPy명령어도 먹힙니다.


그러므로 개발자 콘솔에서 탈출을 하려면 Python과 똑같이

exit

이 명령을 하면 됩니다.


그럼 한번 치트를 시도해봅시다.


jump credits


이러면 바로 credits라고 정의된 부분으로 바로 점프합니다. (타이틀에서는 먹히지 않습니다. 일단 새 게임을 눌러서 게임이 시작되야 먹힙니다. credits 레이블이 나중에 만들어지기 때문입니다.)


그럼 바로 엔딩 보는 겁니다. 물론 CG는 회수 된 부분 까지만 나오게 됩니다. Monika가 놀라서 뒤집어질 일이 일어난 것이지요. (이래서 데이터 마이닝을 하는 사람은 미스테리 게임을 못합니다. - 언더테일 제작자 왈)


이런 jump기능은 특정 label로 바로 넘어가기 위한 구문으로 실제로 스크립트에 써먹는 구문입니다. 이걸 명령을 때우는 겁니다. Python개발 할 때랑 비슷하지요.


그리고 넘기기가 안 먹히는 구간에서 콘솔을 열고 config.fast_skipping=True를 다시 때려버리면 마구 넘어갑니다. 이 외에도 많은 부분을 뜯어 볼 수 있습니다.


물론 이걸 남용하면 Monika가 그랬던 것처럼 게임이 망가집니다. 주의하세요!

,

더빙패치 :

https://drive.google.com/file/d/1P29VPtgWCW0fsQ-LfR1NrCKzmO-TSDs5/view


이젠 하다하다 한국어 더빙까지 입혔습니다.


유튜브에서 림뽐(https://www.youtube.com/watch?v=516BSRBQS7k)이란 분이 두근두근 문예부의 엔딩을 직접 불러서 올리셨더군요. 이 분말고도 다른 분도 많기는 했지만 한글패치에서 번역된 것과 다르게 직접 개사를 하셔서 상당히 가사 전달력이 좋았습니다.


그래서 혹시나 하고 패치를 만들어도 되는지 물어봤는데

바로 허락해주시더군요.


그래서 냉큼 유튜브의 영상의 음성 편집한 다음 게임에 적용했습니다.


편집은 Audacity를 이용했습니다.

필요한 부분만큼 뚝뚝 자른 다음 잇고 붙이고 잘라낸 다음 효과를 적용해서 마무리 지었습니다. 그리고 (싸구려 헤드셋을 끼고)볼륨 밸런싱 작업도 했습니다.


그 결과...




편집하고 개선하면서 개사되어 바뀐 부분을 수정하고 한국어로 더빙되었기에 필요 없어진 초반에 플레이어를 부르는 부분의 자막을 삭제했습니다. 물론 엔딩곡 부분도 없앨 수 있었지만 엔딩곡은 그래도 가사가 나오는 것이 좋겠다고 생각해서 한글패치에서 만들어진 부분을 살렸습니다.

겸사겸사 스크립트 수정하면서 보컬분의 이름도 추가하고 제 이름도 넣어놓고(...) 진엔딩도 같이 봤습니다. (사실은 개발자 모드로 들어가서 모니카와 싸웠습니다.)



패치 방법은

https://drive.google.com/file/d/1P29VPtgWCW0fsQ-LfR1NrCKzmO-TSDs5/view


위의 링크로 들어가신다음

오른쪽 우의 다운로드 버튼을 눌러서 파일을 다운로드 받으신 다음 한글패치 하듯이 압축을 풀어 그냥 게임 설치된 폴더에 넣어주시면 됩니다. 이왕이면 한글패치 배포사이트에서 같이 배포했으면 하는데 이걸 트위터로 알려야 할지 아니면 그냥 묻어버려야 할지 그것을 잘 모르겠네요.


대사를 입히는 더빙까지는...시간이 오래 걸리겠지요?

,