개발자 도구
Ren'Py에는 개발 작업을 편리하게 해 주는 여러 기능이 있습니다. 상당수는 config.developer 변수를 True로 설정해야 작동합니다.
Lint
런처에서 실행할 수 있는 Lint 도구는 게임의 잠재적 오류나 최적화 문제를 검사하고 개발팀에 개선 방법을 안내합니다. 일부 오류는 다른 플랫폼의 사용자에게만 영향을 주므로, 로컬 환경에서 재현되지 않더라도 모든 오류를 이해하고 수정하는 것이 좋습니다.
Lint는 게임에 관한 유용한 정보와 통계도 제공합니다.
Lint를 사용하더라도 철저한 테스트는 별도로 해야 합니다.
Shift+O 콘솔
디버그 콘솔에서는 Ren'Py 스크립트와 Python 문을 대화형으로 실행하고 결과를 즉시 확인할 수 있습니다. 개발자 모드이거나 config.console이 True이면 사용할 수 있으며, Shift+O를 눌러 엽니다.
콘솔에서는 다음을 수행할 수 있습니다.
레이블로 이동합니다.
Ren'Py 스크립트 문을 대화형으로 시험합니다.
Python 표현식이나 문을 평가하여 결과를 확인합니다.
게임이 진행되는 동안 Python 표현식을 추적합니다.
명령:
clear: 콘솔 기록을 지웁니다.
escape: 유니코드 문자열의 유니코드 문자를 이스케이프하여 표시합니다.
exit: 콘솔을 종료합니다.
help: 이 도움말을 표시합니다.
help <expr>: <expr>의 서명과 문서를 표시합니다.
jump <label>: 레이블로 이동합니다.
load <slot>: 슬롯에서 게임을 불러옵니다.
long: 콘솔에서 객체의 표현을 생략 없이 출력합니다.
reload: 스크립트를 갱신하여 게임을 다시 로드합니다.
save <slot>: 게임을 슬롯에 저장합니다.
short: 콘솔에서 객체의 표현을 줄여 표시합니다(기본값).
stack: 반환 스택을 출력합니다.
unescape: 유니코드 문자열의 유니코드 문자 이스케이프를 끄고 그대로 출력합니다(기본값).
unwatch <expression>: 표현식 감시를 중단합니다.
unwatchall: 모든 표현식 감시를 중단합니다.
watch <expression>: Python 표현식을 감시합니다.
watch short: 추적하는 표현식을 줄여 표시합니다(기본값).
watch long: 추적하는 표현식을 그대로 표시합니다.
<renpy script statement>: 문을 실행합니다.
<python expression or statement>: 표현식이나 문을 실행합니다.
Shift+E 편집기 지원
Shift+E를 누르면 기본 텍스트 편집기로 현재 문이 작성된 스크립트 파일의 해당 줄을 엽니다. 기본 편집기는 런처에서 설정하며 텍스트 편집기 통합으로 사용자 지정할 수 있습니다.
Shift+R 다시 로드
config.developer가 True일 때 Shift+R을 누르면 현재 게임을 저장하고 게임 스크립트를 다시 로드한 다음 게임을 불러옵니다. 대개 Shift+R을 누르기 전에 실행한 문 중 변경되지 않은 마지막 문으로 돌아갑니다.
처음 다시 로드한 뒤에는 자동 다시 로드 모드가 됩니다. 마지막 다시 로드 이후 접근한 파일이 변경되면 게임을 다시 로드합니다.
따라서 외부 편집기에서 스크립트를 수정한 뒤 Ren'Py를 종료하고 재시작하지 않아도 변경 결과를 확인할 수 있습니다.
다시 로드해도 변수 값과 장면 목록을 포함한 게임 상태는 유지됩니다. 따라서 이 상태에 영향을 주는 문을 수정했다면 롤백한 뒤 해당 문을 다시 실행해야 변경 결과를 볼 수 있습니다.
리플레이에서는 Shift+R 다시 로드가 작동하지 않습니다.
다음 함수로 순수 Python에서도 같은 동작을 수행할 수 있습니다. 개발자 모드에서만 사용하도록 마련된 함수입니다.
- renpy.get_autoreload()
자동 다시 로드 플래그를 가져옵니다.
- renpy.reload_script()
Ren'Py가 게임을 저장하고 스크립트를 다시 로드한 뒤 저장 데이터를 불러오도록 합니다.
개발 중에만 호출해야 합니다. Windows, macOS, Linux에서는 작동하지만 다른 플랫폼에서는 작동하지 않을 수 있습니다.
- renpy.set_autoreload(autoreload)
파일 변경 후 게임을 자동으로 다시 로드할지 정하는 플래그를 설정합니다.
renpy.reload_script()로 게임을 다시 로드하기 전까지는 자동 다시 로드가 완전히 활성화되지 않습니다.
Shift+I 스타일 검사
config.developer가 true일 때 Shift+I를 누르면 스타일 검사를 수행합니다. 마우스 아래의 디스플레이어블을 화면에 그린 순서대로 나열합니다. 즉, 목록의 마지막 디스플레이어블이 가장 위에 있습니다. 각 디스플레이어블의 종류, 사용 중인 스타일, 렌더링 크기를 표시합니다.
스타일 이름을 클릭하면 디스플레이어블이 상속하는 스타일과 각 스타일이 최종 디스플레이어블에 제공하는 속성을 표시합니다.
> 빠른 건너뛰기
config.developer 또는 config.fast_skipping이 True일 때 fast_skip 키(기본값은 ">")를 누르면 다음 중요한 상호 작용까지 즉시 건너뜁니다. 여기서 중요한 상호 작용은 say 문, 화면 전환 또는 pause 명령으로 발생하지 않는 상호 작용입니다. 보통 다음 메뉴까지 건너뛰지만, 사용자가 정의한 상호 작용이 발생해도 멈춥니다.
특정 줄로 워프
Ren'Py는 개발자가 게임 전체를 플레이하지 않고도 스크립트의 특정 줄로 워프하는 기능을 지원합니다. 여러 주의 사항이 있지만 실시간 미리 보기에 유용할 수 있습니다.
워프하려면 Ren'Py를 실행할 때 --warp 명령줄 인수 뒤에 파일명:줄번호를 지정하세요. 예를 들면 다음과 같습니다.
renpy.exe my_project --warp script.rpy:458
(여기서 my_project는 프로젝트 기본 디렉터리의 전체 경로입니다.)
워프를 요청하면 Ren'Py는 먼저 프로그램의 모든 scene 문을 찾습니다. 그런 다음 scene 문에서 게임 내 도달 가능한 각 문까지의 경로를 찾으려고 시도합니다. 지정한 줄 또는 그 이전에 있는 문 중 가장 가까운 도달 가능한 문을 선택하고, 그 문에서 scene 문까지 거슬러 올라가며 경로를 기록합니다. 이어서 scene 문과 경로에서 발견한 모든 show 및 hide 문을 실행합니다. 마지막으로 찾은 문으로 제어를 넘깁니다.
워프 기능에는 상당히 중요한 주의 사항이 있습니다. 먼저 경로 하나만 검사하므로 특정 실행 경로는 반영해도 다른 경로에 있는 버그는 놓칠 수 있습니다. 일반적으로 이 경로는 게임 로직을 고려하지 않으므로 실제로 도달할 수 없는 경로일 수도 있습니다. (이는 제어 흐름이 복잡한 게임, 특히 Python을 많이 사용하는 게임에서 주로 문제가 됩니다.
가장 큰 문제는 워프 대상 문 이전의 Python이 실행되지 않는다는 점입니다. 따라서 모든 변수가 초기화되지 않은 상태라서 사용 시 충돌이 발생할 수 있습니다. 이를 해결하려면 after_warp 레이블을 정의하세요. 워프 후 대상 문을 실행하기 전에 호출되는 레이블이며, 여기서 프로그램의 변수를 준비한 다음 반환하여 미리 보기로 돌아갈 수 있습니다.
워프 기능을 사용하려면 config.developer가 True여야 합니다.
디버그 함수
- renpy.filename_line_override(filename: str, line: int)
파일명과 줄 번호를 임시로 재정의합니다. 컨텍스트 관리자이며 다음과 같이 사용합니다.
with renpy.filename_line_override("myfile.rpy", 42): # ...
- renpy.get_filename_line()
현재 문의 파일명과 줄 번호를 나타내는 쌍을 반환합니다.
- renpy.log(msg)
config.log가 설정되어 있지 않으면 아무것도 하지 않습니다. 설정되어 있으면 로그 파일을 열고(아직 열려 있지 않은 경우), 메시지를config.log_width열에 맞게 서식화한 뒤 로그 파일에 출력합니다.
- renpy.unwatch(expr)
주어진 Python 표현식의 감시를 중단합니다.
- renpy.warp_to_line(warp_spec)
파일명:줄번호 쌍을 인수로 받아 해당 줄 번호 앞의 문으로 워프하려고 시도합니다.
--warp 명령과 동일하게 작동합니다.
- renpy.watch(expr)
주어진 Python 표현식을 화면 오른쪽 위에 표시하여 감시합니다.
런처 사용자 지정
Ren'Py 런처에서 클릭할 수 있는 파일과 디렉터리를 지정할 수 있습니다. 다음 내용으로 project.json을 만드세요.
{
"renpy_launcher":
{
"open_directory":
{
"game": "game",
"base": ".",
"images": "game/images",
"audio": "game/audio",
"gui": "game/gui"
},
"edit_file":
{
"script.rpy": "game/script.rpy",
"options.rpy": "game/options.rpy",
"gui.rpy": "game/gui.rpy",
"screens.rpy": "game/screens.rpy"
}
}
}
파일이 이미 있다면 renpy_launcher 키와 그 아래 내용을 추가하여 편집하세요. 그런 다음 딕셔너리를 수정해 표시할 파일과 디렉터리를 바꿀 수 있습니다.