_ren.py 파일: Python으로 작성하는 Ren'Py
복잡한 게임에서는 대부분이 Python 코드이고, 이를 Ren'Py에 전달하기 위한 init python: 같은 Ren'Py 문이 조금만 포함된 파일을 사용할 수 있습니다. Ren'Py는 이렇게 Python 비중이 높은 파일을 작성하는 다른 방법을 제공합니다. 이름이 _ren.py로 끝나는 파일은 Python 문법으로 작성할 수 있으며, 이후 Ren'Py 스크립트로 변환되어 처리됩니다.
이 방식을 사용하는 주된 이유는 두 가지입니다.
_ren.py 문법을 사용하면 모든 Python 줄 앞에 필요한 한 단계의 추가 들여쓰기를 없앨 수 있습니다.
편집기에서 Python 전용 도구로 _ren.py 파일을 열 수 있으므로, Ren'Py 안에 포함된 Python 코드에서는 지원하지 않는 코드 분석과 리팩터링을 수행할 수 있습니다.
Python 안의 Ren'Py 파일은 actions_ren.py처럼 이름이 _ren.py로 끝납니다. 이 파일은 .rpy 파일과 같은 유니코드 순서로 처리되므로 actions_ren.py는 actions.rpy가 처리될 위치에서 처리됩니다. 기본 이름이 같은 _ren.py 파일과 .rpy 파일이 함께 있으면 오류입니다. 예를 들어 actions.rpy와 actions_ren.py는 충돌하므로 같은 디렉터리에 둘 다 있으면 오류가 발생합니다.
문법과 변환
Python 안의 Ren'Py 파일에는 세 종류의 구간이 있습니다.
파일의 처음에는 무시되는 구간이 하나 있습니다. 여기에 편집기와 다른 도구에 도움이 되는 Python 가져오기나 구문을 넣을 수 있지만, 게임의 일부가 아니며 Ren'Py에서 실행하지 않습니다.
Ren'Py 스크립트를 담는 하나 이상의 Ren'Py 구간입니다. Ren'Py 스크립트는 일반적으로 Python 구간을 도입하고 해당 Python 코드의 들여쓰기도 설정합니다.
Ren'Py 구간은 단독 줄의
"""renpy로 시작하고 단독 줄의"""로 끝납니다. 시작과 끝 모두 들여쓰기 없이 줄 맨 앞에 놓아야 합니다. 어느 쪽이든 들여쓰기가 있으면 파일이 올바르게 처리되지 않습니다.하나 이상의 Python 구간입니다. Python 구간은 Ren'Py 구간 뒤에 오며, 그 구간에서 공백만 있거나 주석인 줄을 제외한 마지막 줄과 같은 수준으로 들여씁니다. 그 줄이 콜론(:)으로 끝나면 Python 코드를 공백 4개만큼 더 들여씁니다.
이 변환으로 메모리에 .rpy 파일과 동등한 내용이 만들어지고 일반적인 방식으로 컴파일됩니다. 특히 Python 안의 Ren'Py는 독립된 모듈이 아니라 Ren'Py 스토어에서 실행되며, Python 코드에는 롤백과 저장/불러오기를 가능하게 하는 변환이 적용됩니다. Python 문과 롤백을 참고하세요.
예제
다음은 _ren.py 파일의 예입니다.
# This is not included in the game. It's here so that an editor knows
# the type of strength.
strength = 100
"""renpy
init python:
"""
class BoostStrength(Action):
"""
Boosts the strength of the player by 10.
"""
def __call__(self):
global strength
strength += 10
renpy.restart_interaction()
이 파일은 다음과 같이 변환됩니다. 빈 줄 일부는 생략했습니다.
init python:
class BoostStrength(Action):
"""
Boosts the strength of the player by 10.
"""
def __call__(self):
global strength
strength += 10
renpy.restart_interaction()