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가 그랬던 것처럼 게임이 망가집니다. 주의하세요!

,

RenPy로 만들어진 게임은 기본 언어가 Python이라서 성능이 생각보다 많이 좋지 못합니다.


심지어 아직도 Python2.7을 사용하기 때문에 3.x에서 해결된 GIL이슈가 아직도 현재 진행형입니다. 고작 2D게임 주제에 무슨 성능 이슈냐! 라고 하시는 분도 있을 것입니다. 그런데 나름 2D게임에서도 3D 효과를 쓰거나 투명도를 잔뜩 쓰는 경우 성능 이슈를 겪을 수 있습니다. 그리고 빠른 프레임을 원한다면 더 하지요.


이러한 RenPy로 만들어진 게임은 대략 다음과 같습니다.


Long Live The Queen

두근두근 문예부

아날로그


등등


일단 RenPy게임에서 성능 이슈라긴 뭐하지만 묘한 성능 이슈를 여기서 겪었습니다.


..JUST MONICA

뒷 배경을 보면 알파값을 심하게 써서 살짝 버벅거림이 눈에 띄더군요. 이유를 잘 몰랐는데 아래의 페이지에서 원인을 알 수 있었습니다.


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


아마도 OpenGL설정이 제대로 되지 않아서 성능 이슈가 생긴 듯 합니다. 그럴 때는 여기에 나온 대로 Shift+G를 누른 다음


여기서 Force OpenGL Renderer를 선택하시면 됩니다. 강제로 OpenGL로 돌아가면서 성능 이슈가 조금이나마 나을 겁니다. 전 어찌된 영문인지 Software로 잠시 들어갔었던 듯 합니다.


만약 LLVM Pipe 등의 Software OpenGL 렌더러를 쓰신다면 반대로 Force Software Renderer를 쓰시면 조금이나마 나아집니다. 그런데 이런 경우는 요즘 많이 없을 듯 하네요.


참고로 Windows에서는 DirectX 렌더링이 뜨기도 하는데 이걸 쓰면 성능이 더 나아지기도 합니다. 그런데 Windows에서는 어눌한 해킹드라이버를 쓴다거나 하지 않는다면 OpenGL 2.0로 굴러가지 못하는 경우가 없습니다. 그냥 일반적으로 기본 설정으로 하다가 이상하다 싶으면 강제 설정을 하시면 됩니다.

,

음... 이건 뭐라고 해야하나..

아무튼 대단한 게임이 있습니다. 게다가 무료지요.


뭐라고 해야하지...?


뭐... 자세한 것은 그렇다고 치고 일단 한국어화 패치 사이트는 여기입니다.


https://sites.google.com/view/dokidokikor


여기에 게임의 모든 것을 설명한...것은 아니고 아무튼 잘 번역이 되어있습니다.


이 게임은...일단 미소녀 연예 시뮬레이터의 일종...이라고 하는데 일단 일종이라는 표현을 빌려서... 에휴.. 모르겠다. 아무튼 아는 사람은 다 알테니 게임에 대한 설명은 넘어가겠습니다.


일단 저는 내용 스포일러를 다 당했기 때문에 그렇다 치겠습니다.


이 게임은 지원 OS가 Windows, Mac, Linux입니다.


스팀판이 있다고 하니까 따로 구하기 귀찮아서 스팀에서 설치하려고 하니...


리눅스 지원이 안된다고 나오네요? 리눅스 지원된다고 알고 있었는데 이유가 뭔지 몰라서 공식 홈페이지에 가봤습니다.


https://teamsalvato.itch.io/ddlc



여깁니다. 어차피 무료이니 여기서 다운로드 버튼을 눌러보면 리눅스, 맥, 윈도버전을 다운로드 받을 수 있게 해놓았겠지요.


하하... 게임이 마음에 들면 기부해 달라고 하네요. 네 마음에 드신다면 여기서 필요한 만큼 금액을 적어서 Paypal이나 기타 방법으로 기부를 하시면 됩니다. 일단 저는... 무료로 해보기 위해서 "No, Thanks. Just take me Download." 를 위치고 다운로드를 하기로 했습니다. 그런데 10달러정도는 기부할 만한 게임입니다. 여러가지 의미로 말이지요...


펭귄그림이 윈도용과 함께 있군요. 그러니까 윈도용과 리눅스용은 공용판이었나 봅니다. Windows용을 다운로드 받으면 되겠군요.


다운로드 받은 ddlc-win.zip 압축을 풀어주시면...


요렇게 나옵니다. 여기서 DDLC.sh를 실행하면 됩니다.


음.. 실행 잘 되네요. 그럼 한글 패치를 해봅시다.


https://sites.google.com/view/dokidokikor


여기가 한글패치 배포 사이트입니다. 여기서 우린 스팀판이 아닌(스팀판을 굴릴래야 굴릴 수가 없으니...)일반 사용자 버전을 다운로드 받으면 되겠습니다.


스팀판 패치는 안 먹히니 이걸 다운로드 받으시면 됩니다.


그리고 압축파일의 내용을 그대로 설치된 곳에 풀어서 덮으시면 됩니다.

(렌파이 엔진의 일부도 갈아엎은 듯 합니다. 몇 년전에 제가 Long Live The Queen 작업할 때 비슷한 짓을 했었지요. 이후 해당 기능이 이식되면서 패치를 내려버리긴 했습니다.)


이제 다시 실행해 보겠습니다.


... 윈도와 리눅스의 차이를 아십니까?


권한이 날아가 버렸네요!

이런 빌어먹을 작업을 해야한다는 것이 더 슬픕니다. 마이너는 이래서 슬픈 겁니다.


하지만 권한따윈 복구해주면 됩니다.


게임이 설치된 곳에서

sudo chmod +x lib/linux-x86_64/DDLC

sudo chmod +x lib/linux-i686/DDLC


이렇게 해주면 실행 권한이 다시 살아납니다.


터미널에 이런저런 내용이 뜨면서 실행이 됩니다.


굳이 터미널로 실행한 이유는 뭐냐고요?


.... 이 게임을 해보시면 압니다. 한국어로 아래에 뜨는 경고문 보이시죠? 이것하고 묘하게 관련이 깊습니다.

해커는 역시 터미널을 봐야 직성이 풀린다고 해야할까요...?


저기 있는 SyntaxWarning부터 신경쓰이기 시작하면 이 게임을 아주 잘 아시는 겁니다.



그런데 새 게임을 눌러보니 한글 입력이 안 되네요?

그래서 한글입력을 할 수 있게 Tkinter를 이용해서 한글 입력이 되게끔 수정한 패치를 같이 공개합니다.


http://moordev.tistory.com/246

두근두근 문예부! 리눅스용 한글입력 개삽질



마지막으로...


리눅스에서의 너는 어떤지 한번 보자꾸나.

> 터미널을 같이 띄우는 이유는 이런일이 일어나기 때문입니다.(스포일러 약간 함유.게임을 할 것이라면 누르지 마세요. 주의)




,