변경 이력 (Ren'Py 6.11~6.99)
6.99.14.3
변경 사항
AlphaMask() 디스플레이어블은 이제 AlphaDissolve가 원래 사용하던 방식처럼 마스크를 자식 디스플레이어블 안에 배치합니다. 따라서 ATL이나 다른 트랜스폼으로 마스크를 만들 수 있습니다.
Transform()으로 완전히 대체된 여러 오래된 이미지 조작기의 사용을 더 이상 권장하지 않으며 문서에서도 제거했습니다.
여러 함수에서 불필요한 Live 접두사를 제거하여 이름을 바꾸었습니다.
LiveComposite는 이제
Composite()입니다.LiveCrop은 이제
Crop()입니다.LiveTile은 이제
Tile()입니다.
이전 이름은 호환성을 위한 별칭으로 유지합니다.
수정 사항
스크린의 for 문 자식에게 스크린 갱신 과정에서 데이터가 제대로 전달되지 않는 문제를 수정했습니다. 화면 전환이 반복되거나 느린 텍스트 표시가 동작하지 않는 등 복잡한 형태로 나타나던 문제입니다.
이제 의도한 대로 가장 최근 저장 슬롯을 선택 색상으로 표시합니다. 새로 만든 게임에 적용되며, 기존 프로젝트는 gui.rpy 끝에 다음을 추가하여 갱신할 수 있습니다.
define gui.slot_button_text_selected_idle_color = gui.selected_color
define gui.slot_button_text_selected_hover_color = gui.hover_color
6.99.14.2에서 도입된, 롤백 후 default 문이 동작하지 않는 문제를 수정했습니다. 저장 파일을 처음 만든 뒤 게임을 갱신한 경우에만 영향을 주었을 것으로 예상합니다.
6.99.14.2
기능과 변경 사항
Ren'Py가 Atom 텍스트 편집기를 지원합니다. 선택하면 Atom을 다운로드하고 language-renpy, renpy-dark-syntax, renpy-light-syntax 플러그인 및 Ren'Py 프로그래밍을 돕는 기본 설정이 포함된 새 프로필을 만듭니다.
이미지 기반 글꼴에 기준선을 지정할 수 있습니다.
기본 GUI의 스크린에 스크롤이 있으면 Page Up과 Page Down 키로 스크롤할 수 있습니다. 새로 만든 프로젝트에서만 동작합니다.
Movie() 디스플레이어블에 동영상 재생 시 호출할 함수를 지정하는 play_callback 인수가 추가되었습니다. 예를 들어 일반 반복 동영상을 대기열에 넣기 전에 전환 동영상을 넣어 매끄럽게 이어지도록 할 수 있습니다.
새 renpy.get_say_image_tag() 함수로 말하는 캐릭터의 이름을 가져올 수 있습니다.
각 줄의 실행에 시간이 걸리지 않는다면 여러 줄이 있는 트랜스폼에서도 ATL 보간을 수행할 수 있습니다.
call에 from 문을 추가해도 번역 식별자가 바뀌지 않습니다. 이 식별자는 자동 음성 재생 코드에도 사용됩니다. 호환성에 영향을 주는 변경이므로 Ren'Py는 이전 방식의 식별자도 계산하여 존재하면 사용합니다.
디스플레이어블을 하나만 찾을 수 있을 때도 _choose_attributes 메서드를 호출합니다. AttributeImage 베타(https://github.com/renpy/ai)를 지원하기 위한 변경입니다.
새 gui.button_image_extension 변수로 Ren'Py 자체를 수정하지 않고도 .webp 버튼 이미지를 사용할 수 있습니다.
텍스트 음성 읽기
시각 장애 사용자를 위한 Ren'Py의 셀프 보이싱 모드를 개선했습니다.
선택된 버튼 뒤에 "selected"를 읽습니다.
막대 뒤에 "bar"를 읽습니다.
새 GUI에서 액션이 사용되는 방식을 더 잘 반영하도록 일부 액션의 셀프 보이싱 정보를 바꾸었습니다.
Ren'Py 내장 대체 텍스트를 번역할 수 있습니다.
일부 셀프 보이싱 출력이 달라질 수 있지만 기존 번역에는 영향을 주지 않을 것입니다.
수정 사항
드물게 저장이나 자동 저장이 저장되지 않은 게임 데이터의 손상을 일으키는 문제를 수정했습니다.
python hide 문을 Python 함수 컨텍스트에서 실행하여 생성기 표현식 같은 구문이 올바르게 컴파일되고 실행됩니다.
전역 레이블을 들여써도 문서에 설명된 대로 동작합니다.
사용자 정의 마우스 커서가 심하게 튀는 회귀 문제를 수정했습니다.
메뉴를 표시한 뒤에도 사이드 이미지가 남는 문제를 수정했습니다.
교체된 스크린에서 표시되지 않는 디스플레이어블의 상태를 더 이상 저장하지 않습니다. 첫 스크린을 다시 표시할 때 디스플레이어블이 이전 상태를 사용하는 문제가 있었습니다.
스크린의 트랜스폼에 show 및 replace 이벤트를 항상 전달합니다. 원래 의도한 동작이며 스크린을 표시할 때 발생할 수 있었지만, 이전에는 캐싱 때문에 일부 show 이벤트가 전달되지 않았습니다.
Alt 키가 필요한 문자도 입력할 수 있습니다. 일부 유럽 언어의 특정 문자를 입력할 때 Alt 키가 필요합니다.
Android 빌드 시스템이 파일이나 디렉터리의 이름을 바꾸지 못하면 포기하기 전에 60초 동안 다시 시도합니다. 바이러스 백신이 Windows의 동작 규칙을 깨뜨리는 문제를 우회하기 위한 시도입니다.
6.99.14.1
이미지 예측 로딩과 캐싱
Ren'Py는 이미지를 텍스처로 바꿀 때 불투명 픽셀의 경계 상자를 찾습니다. config.optimize_texture_bounds가 기본값인 참이면 불투명 픽셀만 이미지 캐시에 저장합니다. 대부분 투명한 레이어 이미지처럼 일부 이미지의 메모리 사용량을 크게 줄일 수 있습니다.
config.cache_surfaces의 기본값이 False로 바뀌었습니다. 이미지 캐시에 필요한 메모리가 절반으로 줄지만 같은 이미지에 여러 이미지 조작기를 적용할 때 느려질 수 있습니다.
이미지 캐시 크기는 이제 기본값이 300메가바이트인 config.image_cache_size_mb로 제어합니다. 새 기본 설정에서는 이미지의 불투명 경계 상자 안의 픽셀마다 4바이트를 사용합니다.
이 세 변경으로 캐시 이미지의 메모리 사용량이 줄어 Ren'Py가 훨씬 더 많은 예측 이미지를 저장할 수 있습니다.
이미지와 스크린을 예측 로딩할 때 renpy.image_size()처럼 디스크를 읽는 함수는 호출하지 않습니다. 느린 호출 때문에 프레임률이 떨어질 위험을 피하기 위해서입니다.
ConditionSwitch() 및 ShowingSwitch()에 predict_all 매개변수가 추가되었습니다. True이면 현재 선택한 디스플레이어블뿐 아니라 모든 디스플레이어블을 예측 로딩합니다. 스프라이트의 모든 감정을 미리 로드하는 데 사용할 수 있습니다.
renpy.start_predict()와 renpy.stop_predict()가 와일드카드 패턴을 받습니다. 예를 들어:
$ renpy.start_predict("eileen *")
태그 eileen으로 시작하는 모든 이미지의 예측 로딩을 시작합니다. 한편:
$ renpy.start_predict("* beach*")
beach 속성이 포함된 모든 이미지와 일치합니다.
F4 키로 이미지 로딩 기록을 표시합니다.
기타 개선 사항
트랜스폼에 경계 상자 안에 들어갈 때까지 이미지를 축소하는 maxsize 속성이 추가되었습니다.
Ren'Py를 다시 로드할 때 Python 표현식 캐시를 유지합니다. 매번 역직렬화하는 것보다 성능이 조금 향상됩니다.
오래된 파일인지 쉽게 알 수 있도록 traceback.txt와 errors.txt 끝에 날짜를 넣습니다.
새 renpy.list_images() 함수는 정의된 모든 이미지의 리스트를 반환합니다.
Drag 디스플레이어블에 mouse_drop 속성이 추가되었습니다. 참이면 가장 많이 겹치는 Drag 대신 마우스 포인터 위치로 놓을 대상을 선택합니다.
스페인어 번역을 갱신했습니다.
기타 수정 사항
ATL의 "on hide" 절이 동작하지 않는 버그를 수정했습니다.
화면 버퍼 전환을 기다릴 때 GIL을 해제하여 음악 재생, 이미지 미리 로딩, 자동 저장 등 백그라운드 스레드 작업이 훨씬 빨라집니다.
Ren'Py 6.99.14
성능
전반적인 성능과 체감 프레임률의 안정성을 높이기 위해 많은 작업을 했습니다.
기기가 AC 전원에 연결되어 있으면 Ren'Py는 일정한 프레임률로 화면을 그리려고 합니다. 배터리로 작동하면 화면 갱신이 디스플레이 버퍼링을 통과하도록 몇 프레임을 그린 뒤 5fps로 돌아갑니다.
Shift+G 메뉴에서 화면 성능을 제어하는 여러 옵션에 접근할 수 있습니다. 위의 GL 성능 변경 외에도 프레임률을 고정하고 프레임이 늦을 때 화면 찢어짐을 허용할 수 있습니다. 느린 기기의 플레이어는 불안정한 프레임률보다 30fps를 선호할 수 있습니다. 느린 기기를 사용하는 플레이어가 많을 것으로 예상되면 다음과 같이 기본값을 정할 수 있습니다.
default preferences.gl_framerate = 30
예측하지 않은 이미지를 디스크에서 로드해야 하는 등의 이유로 프레임 렌더링이 너무 오래 걸리면 Ren'Py는 실제 프레임 표시 시각을 화면 전환과 디스플레이어블의 기준 시간으로 사용하려고 합니다. 따라서 프레임을 생략해야 한다면 첫 프레임과 두 번째 사이가 아니라 일련의 동작의 첫 프레임 전에 생략합니다.
객체가 충분히 생성되면 Ren'Py가 프레임을 그린 직후 직접 가비지 컬렉션을 수행합니다. 그 밖의 시점에 가비지 컬렉터를 실행하는 객체 수 기준은 높였습니다. 게임이 서로를 순환하며 참조하는 객체를 만들지 않으면 수집이 필요 없을 정도로 높습니다. Ren'Py에서도 순환 참조를 만드는 흔한 원인들을 제거했습니다.
대부분의 게임에서는 Ren'Py가 관리하는 가비지 컬렉션으로 인해 발생하던 프레임 저하가 줄거나 사라질 것입니다. config.manage_gc를 False로 설정하면 이전 설정으로 돌아갈 수 있습니다.
기본적으로 Ren'Py는 say나 choice 같은 일시적 스크린과 디스플레이어블을 제거할 때 on "hide" 이벤트 핸들러를 실행하지 않습니다. 핸들러 사용은 드문 반면 존재 여부를 검사하는 비용이 상대적으로 컸기 때문입니다. config.zap_transients를 False로 설정하면 이전 동작으로 돌아갑니다.
Python 표현식을 만날 때마다 컴파일하는 대신 처음 컴파일한 결과를 캐시합니다. 자주 사용되는 ConditionSwitch 및 Ren'Py의 다른 부분이 빨라집니다. 모든 표현식을 컴파일해야 하므로 Ren'Py 6.99.14에서 처음 실행할 때는 게임 시작이 느립니다.
롤백에 필요한 정보를 유지하는 작업을 빠르게 하고 수행 빈도도 줄였습니다. 플레이어 입장에서는 이전보다 더 멀리 롤백할 수 있는 변화로 보일 수 있습니다.
그 밖에도 속도 향상으로만 드러나는 여러 성능 개선이 있습니다. 이번 버전은 첫 개선 단계이며, 함께 포함된 새 성능 프로파일링 프레임워크로 Ren'Py 개발자가 더 개선할 수 있습니다.
여러 캐릭터의 동시 대사
Ren'Py에 여러 캐릭터가 동시에 말하는 시스템을 추가했습니다. 연속된 say 문에 multiple 인수를 지정하여 사용합니다. 예를 들면 다음과 같습니다.
e "이제 Ren'Py에서 여러 캐릭터가 동시에 대사할 수 있어요." (multiple=2)
l "드디어! 몇 년이나 기다렸다고요!" (multiple=2)
대사를 좌우나 위아래로 나누거나 대사창을 하나 또는 둘 사용하는 등 표시 방법이 다양하므로 아직 기본 지원은 제공하지 않습니다. 필요한 스타일 정의는 여러 캐릭터의 동시 대사 문서를 참조하세요.
GUI 환경설정
Ren'Py는 기존 스타일 환경설정 시스템을 대체하는 새 GUI 환경설정 시스템을 지원합니다. 여러 스타일에서 참조할 수 있는 새 GUI 변수에 환경설정을 적용할 수 있습니다.
다음과 같이 작성하여:
define gui.text_font = gui.preference("font", "DejaVuSans.ttf")
환경설정 값에 접근하고, 다음으로:
vbox:
style_prefix "radio"
label _("글꼴")
textbutton _("DejaVu") action gui.SetPreference("font", "DejaVuSans.ttf")
textbutton _("난독증용") action gui.SetPreference("font", "OpenDyslexic-Regular.otf")
설정할 수 있습니다. 자세한 내용은 GUI 환경설정 절을 참조하세요.
툴팁
기존 시스템을 대체하는 새 툴팁 시스템을 추가했습니다. 이전에는 다음과 같이 작성해야 했지만:
default tt = Tooltip("선택한 버튼이 없습니다.")
textbutton "하나.":
action Return(1)
hovered tt.Action("가장 외로운 숫자.")
text tt.value
이제 다음과 같이 작성할 수 있습니다.
textbutton "하나.":
action Return(1)
tooltip "가장 외로운 숫자."
text GetTooltip()
반복 코드를 줄이고 스크린을 읽기 쉽게 하려는 변경입니다. 자세한 내용은 툴팁 절을 참조하세요.
변경 사항
모든 플랫폼에 SSL과 TLS 지원을 추가했습니다. requests 같은 Python 라이브러리와 함께 사용하여 Ren'Py 게임에서 보안 웹 서버에 요청할 수 있습니다. 초기화 시점에 가져온 경우에만 빌드된 배포본에 포함됩니다.
새 im.Data() 이미지 조작기는 웹 서버에서 다운로드한 데이터처럼 압축된 바이너리 데이터로 이미지를 만듭니다.
config.loadable_callback으로 스크립트가 추가로 로드할 수 있는 파일을 Ren'Py에 알릴 수 있습니다.
저장 시 객체 피클링 문제를 진단하고 원인이 된 객체를 보고하려고 합니다. 완전한 보장은 없지만 흔한 문제는 대개 찾을 수 있습니다.
뷰포트에 스크롤바를 지정하면 해당 방향으로 자식에게 큰 공간을 제공합니다. 뷰포트의 보이는 영역이나 그 아래에서 그리는 디스플레이어블의 문제를 방지합니다.
xpos와 xalign이 모호하게 겹치면 xpos를 우선합니다. 같은 스타일에 더 구체적인 속성과 덜 구체적인 속성을 함께 지정한 다른 경우에도 같은 규칙을 적용합니다.
사용자 정의 문에 자체 레이블을 반환하는 label 함수를 지정할 수 있습니다. 따라서 사용자 정의 문으로 점프하거나 호출할 수 있습니다.
새 config.gl_clear_color 변수로 화면을 채우지 못할 때 생기는 상하 또는 좌우 여백의 색상을 정할 수 있습니다.
드래그 앤드 드롭 시스템의 Drag 디스플레이어블에 bottom 메서드를 추가했습니다. Drag를 소속 그룹의 맨 아래로 내릴 수 있습니다.
이전 버전에 추가한 config.cache_surfaces를 문서화했습니다. False이면 메모리 사용량이 줄지만 여러 이미지 조작기가 사용하는 이미지는 느려집니다. 현대적인 Ren'Py에서는 드문 경우일 것입니다.
__로 시작하는 변수나 필드 이름을 파일별 고유 이름으로 바꾸는 이름 변환이 문자열 치환 안에서도 동작합니다.
뷰포트와 vpgrid에 Page Up과 Page Down 키로 스크롤하는 pagekeys 속성을 추가했습니다. arrowkeys 속성도 문서화했습니다.
RAPT가 Java 코드의 소스 및 대상 버전을 1.6으로 컴파일하므로 최신 JDK에서도 빌드할 수 있습니다.
수정 사항
스크린을 서로 다른 시점에 컴파일하면 잘못 표시될 수 있는 문제를 수정했습니다. 다음 특정 조건에서만 발생할 수 있었습니다.
프로젝트의 여러 파일에 스크린이 있습니다.
파일들을 서로 다른 시점에 컴파일했습니다. 배포본을 빌드할 때 모든 파일을 동시에 다시 컴파일하므로 출시된 게임에는 해당하지 않습니다.
이 버전으로 갱신한 뒤 런처의 강제 재컴파일(Force Recompile)을 누르면 해결할 수 있습니다. 개발 중인 게임에서는 수행해도 되지만 출시된 게임에는 필요하지 않습니다.
인터랙티브 디렉터를 여러 상황에서 사용할 수 있도록 개선했습니다.
Android와 iOS에서 Ren'Py가 멈춰 빈 화면이 나타날 수 있는 경쟁 상태를 수정했습니다. 6.99.13에서 도입된 문제였습니다.
6.99.13에서는 경쟁 상태 때문에 드물게 Ren'Py가 동영상 재생 전체를 건너뛰었습니다.
Ren'Py가 AltGr 키를 지원합니다.
콘솔이 한 번도 표시되지 않을 때 print 문이 메모리를 계속 사용하지 않도록 기록하는 콘솔 출력량을 제한합니다.
Ren'Py 6.99.13
튜토리얼과 The Question
함께 제공되는 Tutorial 게임과 예제 게임 The Question의 갱신 버전을 포함합니다.
Tutorial을 대폭 다시 작성하여 두 강의로 구성했습니다. 첫 강의는 Ren'Py로 기본 비주얼 노벨을 만드는 방법을, 두 번째는 더 고급 게임에 필요한 심화 주제를 다룹니다. 현대적인 Ren'Py와 관련이 적은 내용은 제거하고 새 게임에서 권장하는 기능에 집중했습니다.
Tutorial에는 250개가 넘는 예제가 있으며 자신의 프로젝트로 복사할 수 있습니다.
The Question은 Lore가 작성한 새 스크립트로 다시 만들었으며 원본보다 교육 용도에 더 적합합니다. 새 배경으로 갱신하고 Ren'Py 스크립트의 권장 작성 방식을 보여 주도록 했습니다.
두 게임 모두 고해상도 와이드스크린 그래픽과 새 기본 Ren'Py GUI로 현대화했습니다.
현재는 이전 튜토리얼도 배포합니다. 이전 튜토리얼의 번역은 있지만 새 튜토리얼 번역이 없으면 이전 것을 사용합니다.
인터랙티브 디렉터
Ren'Py에 인터랙티브 디렉터 도구를 내장했습니다. 개발 중인 비주얼 노벨 안에서 편집기로 전환하고 프로젝트를 다시 로드하지 않아도 scene, show, hide, with, play, queue, stop, voice 문을 추가할 수 있습니다. 출시되지 않은 게임에서 Shift 없이 D 키를 눌러 사용합니다.
인터랙티브 디렉터는 이전에 Ren'Py 밖에서 비상업적 용도로 무료 사용 가능한 라이선스로 배포했습니다. 이제 Ren'Py의 일부이며 상업적·비상업적 사용을 모두 허용하는 같은 라이선스가 적용됩니다.
새 GUI
새 GUI를 일부 변경했습니다. 버튼은 더 밝게 하고 텍스트는 줄였으며 막대 높이도 조금 줄였습니다. 특히 환경설정 스크린의 게임별 설정을 위한 공간을 확보하려는 목적입니다.
새로 생성한 게임에서는 캐릭터마다 이름 상자의 위치와 모양을 바꿀 수 있습니다. Character에 namebox 접두사 속성을 지정합니다. 예를 들어 namebox_background로 이름 상자 배경을 바꿉니다.
Raspberry Pi
Raspberry Pi 플랫폼을 실험적으로 지원합니다.
Raspberry Pi 포트는 제약과 게임 개발보다 실행에 초점을 둔다는 점에서 Android 및 iOS 포트와 비슷합니다. 다른 플랫폼처럼 사용 가능한 리소스를 고려하여 게임을 설계해야 합니다.
그럼에도 The Question과 새 Tutorial은 $35짜리 Raspberry Pi 3에서 모두 실행됩니다.
하이퍼링크
{a} 텍스트 태그의 하이퍼링크로 레이블에 점프하거나 호출할 수 있습니다. {a=jump:label}은 점프하고 {a=call:label}은 현재 문을 끝내고 호출합니다. {a=show:screen}과 {a=showmenu:screen}은 각각 게임 안과 메뉴 컨텍스트에서 스크린을 표시합니다.
새 config.hyperlink_protocol은 프로토콜이 없는 하이퍼링크의 기본 프로토콜을 정합니다. "jump"이면 {a=mylabel}은 {a=jump:mylabel}과 같습니다.
새 config.hyperlink_handlers는 프로토콜을 함수에 매핑하는 딕셔너리이며 제작자 정의 핸들러를 추가할 수 있습니다.
하이퍼링크가 이를 감싸는 텍스트의 크기를 상속하므로 기본 크기가 아닌 텍스트 안에서도 동작합니다.
인수를 사용하는 say 문
Ren'Py의 say 문은 대사 뒤의 괄호로 인수를 받을 수 있습니다. 예를 들면 다음과 같습니다.
e "저기요!" (what_size=36, what_color="#ffeeee")
이 인수들을 먼저 config.say_argument_callback에 전달하고 이어 캐릭터에 전달합니다. Character()의 기본 구현은 전달된 인수로 새 캐릭터를 만들어 텍스트를 표시합니다.
점프 하이퍼링크와 텍스트를 직접 진행하지 못하게 하는 Character의 새 advance 인수를 함께 사용할 때 유용합니다. 다음과 같이 작성할 수 있습니다.
e "{a=jump:living_room}서쪽{/a}으로 갈까요, 아니면 {a=jump:kitchen}북쪽{/a}으로 갈까요?" (advance=False)
플레이어가 하이퍼링크를 클릭할 때까지 실행이 멈춥니다.
번역
Alexandre Tranchant의 기여로 런처와 기본 프로젝트를 프랑스어로 번역했습니다.
MrStalker의 기여로 런처와 기본 프로젝트를 브라질 포르투갈어로 번역했습니다.
인도네시아어와 중국어 간체 번역을 갱신했습니다.
기타
새 config.preload_fonts는 Ren'Py가 멈출 때 미리 로드할 TrueType 또는 OpenType 글꼴 파일의 리스트를 받습니다. 새 글꼴을 열 때 애니메이션이 멈추는 것을 방지합니다.
오디오 파일을 별도의 실행 스레드에서 엽니다. 느리거나 사용 중인 디스크에서 오디오를 재생하거나 반복할 때 애니메이션이 멈추는 것을 방지합니다.
새 renpy.get_attributes() 함수로 레이어의 이미지 태그에 연결된 속성을 가져올 수 있습니다.
프로젝트 디렉터리에 projects.txt가 있으면 각 줄에 디렉터리의 전체 경로 하나가 들어 있다고 가정합니다. 해당 경로들을 프로젝트로 취급하여 런처에 표시합니다.
현재 문을 끝내고 레이블을 호출하는 새 Call() 액션이 있습니다. Call과 renpy.call()에 추가된 from_current는 현재 문의 시작으로 돌아오게 합니다. 곁이야기를 호출한 뒤 본 이야기로 돌아오는 데 사용할 수 있지만 매우 신중해야 합니다.
환경설정 변수 문서를 별도 페이지로 만들고, 기본값을 직접 설정할 때 default 문이 더 적절함을 명확히 했습니다.
"steam" 패키지 이름을 "market"으로 바꾸어 다른 마켓에서도 똑같이 사용할 수 있음을 반영했습니다.
ATL에서 워퍼가 있는 보간 문은 최소 한 프레임 동안 지속됩니다. 따라서 pause 0도 즉시 끝나지 않고 한 프레임 뒤에 끝나므로 한 프레임 애니메이션을 만들 수 있습니다. 게임에 잠재의식 메시지를 넣는 데 사용하지 마세요.
show later at 문은 다른 트랜스폼 관련 문처럼 트랜스폼 상태를 유지합니다. 큰 변화는 없겠지만 무작위성을 포함한 레이어 트랜스폼을 만들 수 있게 됩니다.
{nw} 텍스트 태그는 음성과 셀프 보이싱이 끝난 뒤에 텍스트가 진행되도록 합니다.
grid와 vpgrid에서 가로 및 세로 간격을 각각 설정하는 xspacing과 yspacing 스타일 속성을 지원합니다.
config.character_id_prefixes는 Character가 디스플레이어블의 스타일을 지정할 때 사용하는 접두사 리스트입니다. what, who, window와 비슷하게 "logo"를 넣으면 logo_xpos와 logo_background 같은 속성으로 id가 "logo"인 디스플레이어블의 logo 및 background 속성을 설정합니다.
Ren'Py가 Python print 함수를 지원합니다. 출력은 log.txt와 Shift+O로 여는 Ren'Py 콘솔에 전달됩니다.
예외 보고 스크린에서 무시(Ignore)를 클릭할 때의 동작을 바꿀 수 있습니다. _ignore_action에 Jump 액션 등을 설정하여 플레이어의 상태를 정리하고 턴을 다시 시작할 수 있습니다.
Ren'Py의 set 유형은 오래된 sets.Set 대신 Python set을 상속합니다. 집합 리터럴도 올바르게 감싸져 롤백에 반영됩니다.
언어를 바꾸면 NVL 모드 텍스트 블록 목록을 비웁니다. 여러 언어가 섞이거나 현재 글꼴로 읽을 수 없는 텍스트가 나타나는 것을 방지합니다.
"text speed"와 "auto-forward time" Preference() 값에 range 인수를 추가하여 제작자가 범위를 지정할 수 있습니다.
새 renpy.filter_text_tags() 함수로 문자열의 텍스트 태그를 필터링할 수 있습니다. 기본 GUI의 대사 기록 스크린에서 태그를 제거하는 데 사용합니다.
스크린 언어에서 use 문에 전달하는 블록에 has 문을 넣을 수 있습니다.
config.developer를 "auto"로 설정하면 초기화 단계 중 True 또는 False로 결정합니다. 이전에는 초기화 중 항상 참이었고 끝난 뒤에만 바뀌었습니다.
세로·가로 또는 양쪽 스크롤바가 있는 뷰포트나 vpgrid에 위치 속성을 지정하면 뷰포트와 스크롤바를 담는 side 컨테이너에 전달합니다. 따라서 다른 디스플레이어블과 같은 구문으로 위치를 지정할 수 있습니다.
Itch.io 지원을 개선했습니다. Windows에서 itch.io 업로드가 안 되는 문제를 수정했습니다. 업로드 채널 표를 갱신하고 butler가 새로 지원하는 Linux bz2 및 Android apk 파일 업로드를 활용합니다.
제작자 정의 문은 일반 실행 시의 함수 외에도 초기화 시점에 함수를 실행할 수 있습니다. 파싱하여 점프할 수 있는 Ren'Py 스크립트 블록도 받을 수 있습니다.
Ren'Py 스크립트의 파싱 시간을 크게 줄였습니다.
_menu 변수가 없으면 초기화 단계의 오류 처리에서 관련 오류가 보고되지 않을 수 있는 문제를 수정했습니다.
PlayCharacterVoice 액션은 캐릭터 음성 재생 중 버튼을 선택 상태로 표시할 수 있습니다.
새 renpy.add_python_directory() 함수로 game의 하위 디렉터리를 Python 경로에 추가할 수 있습니다.
Ren'Py 문서에서 "code"라는 단어를 더 명확한 용어로 바꾸었습니다.
Patreon으로 Ren'Py를 후원할 수 있습니다. 기본적으로 런처에 후원 정보 페이지 링크가 있으며 런처 환경설정에서 숨길 수 있습니다.
Ren'Py 6.99.12.4
콘솔
Ren'Py의 중립적인 스타일에 맞추어 콘솔을 갱신하고 다음 기능을 추가했습니다.
예외 처리 중에도 콘솔을 사용할 수 있습니다. 이전과 마찬가지로 전역 스코프에 접근합니다.
콘솔 기록을 영구 데이터에 유지합니다.
관찰 중인 변수를 저장 파일에 보관하므로 게임을 자동 또는 수동으로 다시 로드할 때 관찰도 복원됩니다.
기타
6.99.4에서 도입된, 기본 입력 스크린과 renpy.input이 동작하지 않는 회귀 버그를 수정했습니다.
ARM 기반 Android 기기에서 비디오 재생 중 SIGBUS 충돌을 일으킬 수 있는 메모리 정렬 문제를 수정했습니다.
롤백하거나 불러올 때 hide 및 replace 애니메이션을 제거합니다. 표시되지 않았던 디스플레이어블에서 hide 애니메이션이 재생되는 것을 방지합니다.
셀프 보이싱을 켜면 자동 진행 모드를 끕니다. 게임이 자동으로 진행되어 읽어 주는 정보가 이미 지난 내용이 되는 것을 방지합니다.
Steam 지원을 켜고 실행하면 오버레이를 확인하고 Steam이 갱신을 요청할 때 화면을 다시 그립니다. Steam 오버레이의 FPS가 높아질 것입니다.
기본적으로 페이드아웃이 오디오 반복 구간을 넘어 이어집니다. 이전에는 트랙 끝에서 멈췄습니다.
iOS 플랫폼에서 아랍어와 히브리어 같은 오른쪽에서 왼쪽으로 쓰는 언어를 지원합니다.
렌더링 잘라내기 버그를 수정했습니다. 주로 frame이나 막대를 그릴 때 1픽셀 겹침이나 빈틈으로 나타났습니다.
아랍어, 인도네시아어, 러시아어 번역을 갱신했습니다.
Ren'Py 6.99.12.3
GUI
Ren'Py에서 텍스트 종류별 모양을 체계적으로 바꿀 수 있습니다. 예를 들어 이름, 대사, 인터페이스, 레이블, 안내문에 서로 다른 크기를 지정할 수 있습니다.
gui 시스템에서 모든 텍스트 속성을 사용할 수 있습니다. 예를 들어 gui.text_outlines로 기본 외곽선을 지정하고 gui.name_text_bold로 캐릭터 이름을 굵게 할 수 있습니다.
위 두 변경을 위해 일부 gui 변수 이름을 더 체계적으로 바꾸었습니다. gui.default_font는 gui.text_font, gui.name_font는 gui.name_text_font가 되었습니다.
gui.text_outlines 및 gui.interface_text_outlines 같은 변수로 GUI 텍스트에 외곽선을 넣을 수 있습니다.
새 GUI의 설계상 이 절의 변경은 새 게임을 만들거나 게임의 GUI를 갱신해야 적용됩니다.
번역
Ria-kon과 Project Gardares의 기여로 러시아어 번역을 갱신하고 현대화했습니다.
Gas의 기여로 이탈리아어 번역을 갱신하고 현대화했습니다.
기타
Android와 iOS에서 비디오 재생 중 발생하는 충돌을 수정했습니다.
Ren'Py의 비유니코드 문자열 기본 인코딩을 파일 시스템 인코딩으로 바꾸었습니다. 6.99.12 이후 비ASCII 시스템에서 발생한 일련의 인코딩 문제를 해결할 것입니다.
개발자 모드에서 시스템에 설치된 글꼴을 더 이상 검색하지 않습니다.
디스플레이어블 상태가 공유되지 않도록 복제하는 경우가 있습니다. 예를 들어 트랜스폼은 표시할 때 복제하여 두 번째로 표시해도 이전 상태가 남지 않게 합니다. 필요한 경우에만 복사하도록 최적화했습니다.
사용자 정의 텍스트 태그를 정의하지 않아도 config.replace_text 콜백을 실행합니다.
필요하지 않은데 텍스트가 잘릴 수 있는 문제를 수정했습니다.
화면에 다른 포커스 가능 요소가 있어도 뷰포트를 드래그할 수 있습니다.
인터랙티브 디렉터 지원 함수를 추가하고 속성 이미지의 기초 지원을 추가했습니다.
Ren'Py 6.99.12
Macintosh 지원
macOS Sierra 지원을 위해 다음을 비롯한 여러 변경을 했습니다.
Ren'Py가 만드는 Macintosh 애플리케이션은 기본적으로 읽기 전용입니다. 저장 파일은 시스템 전역 디렉터리에, 스크린샷은 데스크탑에 저장합니다.
코드 서명이 가능하도록 Mac 애플리케이션의 구성을 바꾸었습니다.
Xcode가 설치되고
build.mac_identity가 올바르게 설정된 Macintosh에서 실행하면 codesign 도구로 패키지에 서명한 뒤 아카이브합니다.Macintosh에서 실행하면 애플리케이션이 포함된 .dmg 파일을 만듭니다. Xcode가 설치되고
build.mac_identity가 설정되어 있으면 패키지에 서명합니다.
따라서 제작자에게 Macintosh와 무료 Developer ID Application 인증서가 있으면 Gatekeeper와 Gatekeeper Path Randomization을 충족하는 다운로드용 Ren'Py 게임을 만들어 배포할 수 있습니다.
모든 데스크톱 플랫폼에서 실행되는 단일 배포본을 만들 수 없게 되어 all(Windows, Mac, Linux) 패키지 유형을 제거했습니다. Windows와 Linux용 pc 유형 및 기존 macOS용 mac 유형으로 대체합니다. 앱 스토어 번들을 위한 새 steam 유형도 있지만 macOS Sierra에서 동작하지 않으므로 최종 사용자 배포용으로는 권장하지 않습니다.
Sierra에서도 이전 Ren'Py로 만든 게임을 실행할 수 있도록 런처를 수정했습니다. 게임을 Ren'Py 디렉터리에 넣고 Ren'Py를 시작한 뒤 런처에서 게임을 선택하여 프로젝트 실행(Launch Project)을 누르면 됩니다.
번역 변경 사항
영어 이외 언어의 프로젝트 생성 지원을 개선했습니다. 새 프로젝트에는 선택한 언어의 인터페이스 문자열 번역을 포함하여 Ren'Py가 플레이어에게 표시하는 텍스트를 번역합니다.
Ren'Py 번역을 한곳에서 관리합니다. 런처를 번역하면 생성되는 게임의 주석도 번역됩니다. 런처와 GUI의 번역 과정은 Ren'Py 번역 페이지에 문서화했으며 문자열을 번역할 합리적인 순서도 제안합니다.
번역에 따라 대체 글꼴을 선택하고 텍스트 크기 같은 정의를 바꾸거나 생성할 프로젝트에 파일을 복사하는 함수들을 추가했습니다.
translate python 블록은 일반 style 문보다 먼저 실행하며 translate style은 둘 뒤에 실행합니다. 6.99.11에서 의도하고 문서화한 변경이지만 구현에 결함이 있어 이제 수정한 구현을 사용합니다.
Python 변경 사항
Ren'Py는 다음이:
from __future__ import absolute_imports, print_function, unicode_literals
참인 것처럼 Python 코드를 컴파일합니다. 실패하면 이 설정 없이 다시 컴파일합니다. 앞으로 나올 Python 3 기반 Ren'Py와 호환되는 새 코드를 작성할 수 있게 하려는 목적입니다.
기존 코드의 영향은 최소화될 것입니다. 다만 문자 문자열에 바이너리 데이터를 담으면 문제가 될 수 있으므로 바이너리 문자열(b"string")을 명시적으로 사용해야 합니다.
기타 변경 및 수정 사항
화면 전환 전에 동적 이미지를 복사합니다. 동적 변수와 with 문을 함께 사용하여 이전 변숫값에서 새 값으로 전환할 수 있습니다.
Ren'Py가 WEBP 이미지 형식을 지원합니다.
인터랙티브 디렉터 도구를 지원하는 수정 사항을 포함합니다.
게임 시작 시 iOS 앱 스토어에 사용 가능한 인앱 구매 가격을 조회합니다. 가격을 표시할 때 게임이 멈추지 않게 합니다.
iOS 앱 스토어 접근 시 표시되는 대화상자를 번역할 수 있습니다.
ShowMenu로 게임 메뉴 스크린에 위치 인수를 전달할 수 있습니다.
6.99.11에서 도입된 ATL 트랜스폼이 반복될 수 있는 문제를 수정했습니다.
first_fit이 동작하지 않는 회귀 문제를 수정했습니다.
새 소리 샘플을 로드할 때 재생 중인 소리가 끊기는 문제를 제거했습니다.
Windows의 itch.io butler 도구 지원을 수정했습니다.
인터페이스를 숨겨도 음성 재생이 중지되지 않습니다.
새 DisableAllInputValues() 액션으로 모든 입력 값을 한꺼번에 비활성화할 수 있습니다.
뷰포트와 vpgrid의 mousewheel 속성에 "change" 값을 추가했습니다. 이벤트가 실제로 뷰포트를 바꿀 때만 소비합니다. 맨 아래에 도달하면 닫히는 대사 기록 창을 구현하려는 필요에서 도입했습니다.
네임스페이스 이름에 점을 포함할 수 있습니다.
새 QueueEvent() 액션은 활성화될 때 키 바인딩 이벤트를 대기열에 넣습니다. 현재 대사에 포커스가 없어도 닫는 새 'dismiss_unfocused' 바인딩을 비롯한 여러 바인딩을 실행할 수 있습니다.
Ren'Py 6.99.11
새 게임 내 GUI
새 기본 GUI를 제공합니다. 게임의 메인 메뉴, 게임 메뉴, 게임 중 스크린을 꾸미는 이 시스템은 이전 테마 및 screens.rpy 시스템을 대체하며 모든 제작자에게 도움이 되도록 설계했습니다.
새 제작자는 일반적인 디자인이기는 해도 처음부터 보기 좋은 GUI를 사용할 수 있습니다. 여러 크기를 선택할 수 있고 밝거나 어두운 배경의 게임을 지원합니다.
중급 제작자는 스크린과 스타일을 직접 다루지 않고도 쉽게 수정할 수 있습니다.
gui네임스페이스 변수와 템플릿 이미지를 바꾸어 GUI의 테마 전체를 바꿀 수 있습니다.고급 제작자는 부분적으로든 전체적으로든 새 GUI를 완전히 교체할 수 있습니다. 새 기반 시스템은 모든 스타일을 적절한 기본값으로 초기화하여 수정을 쉽게 합니다.
5,000단어가 넘는 문서와 코드, 이미지 40개로 GUI 모양 변경을 설명하는 GUI 꾸미기 안내도 제공합니다.
새 GUI에는 여러 새 기능도 추가되었습니다. 일반적으로 사용자 정의 GUI에서도 활용할 수 있는 방식으로 구현했습니다. 주요 기능은 다음과 같습니다.
기본적으로 16:9 와이드스크린 해상도를 지원합니다.
새 GUI는 PC와 가로 방향 모바일 기기를 지원하도록 설계되었습니다. 적절한 경우 iOS 및 Android 인터페이스 지침을 따릅니다.
새 GUI는 대사 기록 또는 다시 읽기 스크린을 기본 지원합니다.
새 GUI에서 파일 페이지에 이름을 붙여 저장 파일을 어느 정도 정리할 수 있습니다.
NVL과 choice 스크린에 튜플 대신 객체 리스트를 매개변수로 전달합니다. 이전 코드와의 호환성을 위해 객체는 튜플로도 동작합니다.
yesno_prompt 스크린의 이름을 confirm으로 바꾸었습니다.
Ren'Py는 클릭하여 계속 표시기에 ctc 스크린을 사용할 수 있습니다.
플랫폼 지원 개선
여러 플랫폼의 Ren'Py 지원을 수정했습니다.
Windows 프리스플래시 표시 시 HighDPI 모드를 올바르게 감지합니다.
Android 빌드 시스템을 다시 작성하여 x86 지원을 추가하고 ARM 지원은 유지하면서 현대화했습니다. RAPT에 여러 의존성을 포함하여 Android 빌드 문제를 수정했습니다.
Android 4.4+에서 내비게이션 바를 포함한 시스템 UI를 숨기는 몰입 모드를 지원합니다. Ren'Py가 화면 전체를 사용할 수 있습니다.
Chrome OS Android Runtime for Chrome 도구로 Android APK를 실행하여 ChromeOS를 지원합니다.
스타일 접두사 지원
스타일 속성에서 prefix_ 치환을 지원합니다. 이전에는 다음과 같이 작성해야 했지만:
style button:
insensitive_background "insensitive_button.png"
idle_background "idle_button.png"
hover_background "hover_button.png"
selected_idle_background "selected_idle_button.png"
selected_hover_background "selected_hover_button.png"
이제 다음과 같이 작성할 수 있습니다.
style button:
background "[prefix_]button.png"
스타일과 비슷한 방식으로 접두사를 검색합니다. selected_idle_background를 찾을 때 selected_idle_background.png, idle_background.png, background.png 순서로 찾습니다.
스타일 속성
window와 button에 padding 및 margin 스타일 속성을 지정할 수 있습니다. 네 방향의 안쪽 및 바깥쪽 여백을 튜플로 받을 수 있습니다.
새 base_bar 스타일 속성은 왼쪽과 오른쪽 또는 위쪽과 아래쪽 막대를 같은 값으로 설정합니다. 손잡이 이미지를 사용하는 슬라이더나 스크롤바의 배경을 설정할 수 있습니다.
스크린 언어의 fixed 문과 Fixed()에 xfit 및 yfit를 지정할 수 있습니다. 참이면 해당 축으로 모든 자식을 포함하는 크기까지 줄어듭니다.
button과 window가 xmaximum 및 ymaximum 스타일 속성을 완전히 따릅니다.
튜플의 첫 요소로 xoffset을, 두 번째로 yoffset을 설정하는 offset 스타일 속성을 추가했습니다.
번역 및 스타일 문의 실행 순서 변경
아래의 스타일 실행 지연 여부를 결정하는 config.defer_styles를 추가했습니다. 평가 시점에 참이면 해당 스타일을 지연 목록에 넣습니다. 새 GUI에서 호출하는 gui.init()이 이를 참으로 설정합니다.
번역에서 새 GUI 글꼴을 쉽게 변경하도록 translate python, style, translate style의 실행 순서를 바꾸었습니다. 모든 문을 실행한 뒤 게임이 시작되거나 언어가 바뀌면 다음 과정이 진행됩니다.
gui스토어를 초기화 종료 시의 상태로 되돌립니다. gui.`name`으로 정의한 모든 변수가 있는 스토어입니다.현재 언어를 language로 하는 모든
translatelanguagepython문을 실행합니다.지연된 모든
style문을 실행합니다.현재 언어가 None이 아니면 이를 language로 하는 모든
translatelanguagestyle문을 실행합니다.config.change_language_callbacks의 콜백을 호출합니다.
config.new_translate_order를 False로 설정하면 translate language style, translate language python 및 콜백만 실행하는 이전 동작으로 돌아갑니다.
지역 레이블
Ren'Py는 다른 레이블 안에 범위가 한정되는 레이블을 지원합니다. 다음과 같이 작성할 수 있습니다.
label day1:
menu:
"늦잠을 잘까?"
"예":
jump .afternoon
"아니요":
jump .morning
label .morning:
"아침이다."
label .afternoon:
"오후다."
이 코드의 .morning과 .afternoon은 day1 바로 뒤의 코드에서 직접 점프할 수 있고, 다른 코드에서는 day1.morning이나 day1.afternoon으로 점프할 수 있습니다.
트랜스폼
트랜스폼이 내부 디스플레이어블을 여러 번 반복 배치하는 xtile 및 ytile 속성을 지원합니다.
트랜스폼에 xpan 및 ypan 속성을 추가했습니다. 0~360도의 각도를 받으며 범위 밖 값은 범위 안으로 제한합니다. 해당 각도만큼 이미지를 가로나 세로로 이동하여 360도 파노라마 이미지를 재현할 수 있습니다.
번역
새 프로젝트를 생성할 때 런처 프로젝트의 번역으로 새 게임의 모든 문자열을 번역합니다.
런처와 튜토리얼의 베트남어 번역을 추가했습니다. 기여한 Thuong Nguyen Huu에게 감사드립니다.
런처와 기본 프로젝트의 인도네시아어 번역을 추가했습니다. 기여한 Pratomo Asta Nugraha에게 감사드립니다.
시험용 piglatin 번역을 자동 생성할 수 있습니다.
기타
새 nvl_narrator 캐릭터를 NVL 모드의 서술자로 사용할 수 있습니다.
define 문으로 Ren'Py 키워드와 같은 이름의 변수를 정의할 수 있습니다. 예를 들어 "define menu = nvl_menu"가 동작합니다.
Frame()에 테두리를 하나의 객체로 묶은 Borders()를 지정할 수 있습니다. Borders의 padding 필드는 새 padding 스타일 속성에 전달할 수 있습니다.
button, textbutton, imagebutton, hotspot에 선택 및 입력 가능 여부를 직접 제어하는 selected와 sensitive 속성을 추가했습니다.
button, textbutton, imagebutton, hotspot에 keysym 및 alternate_keysym 바인딩을 지정하여 키를 연결할 수 있습니다. 해당 키를 누르면 기본 또는 대체 액션을 실행합니다.
한 프로젝트의 문자열 번역을 추출하여 다른 프로젝트에 적용할 수 있습니다. 반대 방향으로도 적용하여 영어 -> 러시아어 인터페이스 번역을 러시아어 -> 영어로 바꿀 수 있습니다.
뷰포트와 vpgrid의 arrowkeys 속성으로 방향키 및 컨트롤러의 방향 패드 스크롤을 지원합니다.
뷰포트와 vpgrid의 mousewheel을 "horizontal"로 설정하면 마우스 휠로 가로 스크롤할 수 있습니다.
InputValue에 Enter를 누르면 값을 반환하는 returnable 속성이 추가되었습니다.
주 화면의 재생 빈도를 반환하는 renpy.get_refresh_rate() 함수를 지원합니다. 최근접 이웃 모드의 게임이 Commodore 64처럼 정수 픽셀 단위로 움직일 수 있습니다.
build.itch_project를 설정하면 게임을 itch.io에 자동 업로드할 수 있습니다.
config.after_load_callbacks에 불러오기가 끝난 뒤 실행할 콜백 함수들을 지정할 수 있습니다.
플랫폼별 텍스트 음성 변환 음성을 선택하는 config.tts_voice 변수를 추가했습니다.
config.quit_action의 기본값이 게임 인터페이스 위에 종료 확인을 표시하는 Quit()으로 바뀌었습니다.
config.afm_voice_delay를 추가했습니다. 자동 진행 모드에서 음성이 끝난 뒤 텍스트 진행 전 잠시 기다리게 할 수 있습니다.
새 "video sprites" Preference()로 성능이 부족한 하드웨어에서 비디오 스프라이트를 끄고 대체 이미지를 사용할 수 있습니다.
진행 표시기에 Shift+Alt+P뿐 아니라 F2로도 접근할 수 있습니다. 기존 단축키도 PC 플랫폼에서 안정적으로 동작하도록 수정했습니다.
Ren'Py 6.99.10
수정 사항
일부 플레이어와 제작자에게 영향을 준 여러 회귀 문제를 수정했습니다. Ren'Py 6.99.9에서 갱신할 것을 강력히 권장합니다.
DirectInput 게임패드나 조이스틱을 독점 모드로 여는 문제 때문에 Ren'Py가 시작되지 않을 수 있었습니다.
일부 Android 기기에서는 라이브러리 미리 로딩 실패로 Ren'Py가 시작되지 않았습니다.
번역
George Economidis가 기여한 런처의 새 그리스어 번역을 포함합니다.
기타 변경 사항
input 위젯이 입력 값을 받습니다. 입력으로 변수, 필드, 딕셔너리를 직접 갱신할 수 있으며 여러 입력을 동시에 표시할 수 있습니다.
새 key_event 스타일 속성은 버튼의 자식에게 이벤트를 전달할 시점을 제어합니다. 버튼이 입력 값의 포커스를 제어하면 참으로 설정해야 할 수 있습니다.
새 vpgrid 위젯은 뷰포트와 격자의 특징을 조합하고 더 효율적으로 렌더링합니다. 모든 격자 요소의 크기가 같아야 하며 플레이어에게 보이는 요소만 렌더링합니다.
yesno_prompt의 이름을 confirm으로 바꾸었습니다. confirm 스크린이 없으면 이전 이름을 별칭으로 유지합니다.
help 스크린이 있으면 Help() 액션이 사용합니다.
건너뛰기 중 소리가 한꺼번에 쏟아지지 않도록 audio 채널은 한 번에 소리 하나만 재생합니다.
새 init offset 문으로 init, init python, define, default, style, transform 등 초기화 시점 문들의 우선순위에 오프셋을 적용할 수 있습니다.
image 문의 기본 초기화 우선순위를 990에서 500으로 바꾸었습니다. init offset에서 더 큰 오프셋을 써도 -999~999 범위를 벗어나지 않게 합니다.
기능을 명확히 드러내도록 style_group UI 속성을 style_prefix로 바꾸었습니다. 이전 코드와의 호환을 위해 기존 이름도 동작합니다. 새 style_suffix 속성으로 같은 스크린 코드를 여러 스타일 접두사와 함께 재사용할 수 있습니다.
style_prefix UI 속성을 삽입되는 블록에도 적용할 수 있습니다.
새 GamepadExists() 함수와 GamepadCalibrate() 액션으로 스크린 언어에서 게임패드를 감지하고 보정할 수 있습니다.
압축 수준을 낮추어 스크린샷 촬영 시간을 줄였습니다.
Ren'Py가 다운로드하는 Android SDK를 r24.4.1로 갱신했습니다.
Ren'Py 6.99.9
오디오와 동영상 재생 지원을 완전히 다시 작성하여 이전 구현에서는 불가능했던 여러 기능을 추가했습니다. 다음이 포함됩니다.
간결한 표기법으로 오디오 파일을 부분 재생할 수 있습니다. 시작과 끝, 두 번째 이후 반복의 시작점을 지정할 수 있으며 비슷한 표기법으로 무음을 대기열에 넣을 수도 있습니다.
새 기본 채널
audio를 추가했습니다.sound와 달리 시스템 성능 범위 내에서 여러 오디오 파일을 동시에 재생합니다.새
PauseAudio()액션으로 필요에 따라 오디오를 일시 정지하거나 재개할 수 있습니다.새
renpy.music.get_pos()및renpy.music.get_duration()는 각각 채널의 현재 재생 위치와 전체 길이를 반환합니다.AudioPositionValue()로 움직이는 막대의 값으로 표시할 수 있습니다.동영상의 프레임률이 모두 같으면 시스템 성능 범위 내에서 여러 개를 동시에 재생할 수 있습니다.
동영상이 끝나면 끊김 없이 반복합니다.
색상 정보와 알파 채널을 담은 두 동영상으로 구성된 동영상 스프라이트를 지원합니다. 현대적인 동영상 형식은 더 높은 색상 깊이와 훨씬 좋은 압축률을 제공하므로 애니메이션 GIF보다 우수한 대안입니다. 시스템 성능 범위 내에서 모바일을 포함한 모든 플랫폼에서 지원합니다.
동기화를 위해 동영상에 오디오 트랙이 있을 필요가 없습니다.
오디오 채널에서 동영상 파일을 재생할 수 있으며 이 경우 오디오 트랙만 재생합니다.
play 및 queue 문이 audio 네임스페이스에서 파일명 표현식을 평가하므로 오디오 파일에 짧은 별칭을 붙일 수 있습니다.
기본 오디오 샘플률을 48킬로헤르츠로 높여 음질이 조금 향상될 것입니다.
오디오와 동영상 재생에 ffmpeg 3.0을 사용합니다. 기본 배포본에 VP9 비디오 및 Opus 오디오 코덱 지원을 추가했습니다. Opus는 음성과 음악에 자동으로 적응하므로 모든 제작자가 사용을 고려할 만합니다.
버그 수정
Windows에서 시스템 전체 DPI 배율을 켜면 전체 화면 창이 잘못된 쪽에 표시되는 버그를 수정했습니다.
Drag.snap 애니메이션을 수정했습니다.
기타
새 config.speaking_attribute 변수로 캐릭터가 말하기 시작할 때 이미지에 속성을 자동으로 적용하고, 해당 속성을 제거할 때 [원문 문장이 여기서 끝납니다.]
이미지 속성이 있는 say 문이 config.tag_layer를 따릅니다.
ARC Welder 도구로 Android 패키지를 Chrome 애플리케이션으로 변환하는 실험적 지원을 포함합니다.
패키지 빌드에 사용할 수 있는 형식으로 아카이브하지 않은 디렉터리를 문서화했습니다.
마우스가 뷰포트를 벗어나면 가장자리 스크롤이 멈춥니다.
셀프 보이싱을 켤 때 나타나는 안내문을 번역할 수 있습니다. Shift+Alt+D로 셀프 보이싱 디버그 모드에 접근할 수 있습니다.
Preference() 액션으로 기본 외 믹서의 음량도 조절할 수 있습니다.
문자별로 텍스트의 알파 채널을 제어하는 새 {alpha} 텍스트 태그를 추가했습니다.
{image} 텍스트 태그로 넣은 이미지도 일반적인 배치 규칙을 따릅니다. 이미지 정의 시 ypos, yoffset, yanchor를 지정하면 동작합니다.
EndReplay() 액션에 다시 보기를 끝낼지 플레이어에게 묻는 confirm 인수를 추가했습니다.
새 renpy.run() 함수로 액션이나 액션 리스트를 실행하는 문서화된 방법을 제공합니다.
세로쓰기 텍스트의 선명도를 높였습니다.
스크린 언어에서 adjust_spacing 스타일 속성을 사용할 수 있습니다.
Quit()의 confirm 기본값은 None입니다. 메인 메뉴가 아닌 경우에만 종료 확인을 요청합니다.
새 "rollback side" Preference()로 화면 가장자리를 터치해 롤백할 수 있습니다. 기본적으로 모바일에서는 왼쪽이며 데스크톱에서는 꺼져 있습니다.
config.developer의 기본값은 "auto"입니다. auto이면 개발 중에는 참, 배포할 때는 거짓입니다.
Ren'Py 6.99.8
이징 함수
Nyaatrap의 기여로 ATL에서 Robert Penner의 이징 함수를 지원합니다. 보간 속도를 높이거나 낮추고 일부는 목표를 지나치게 하여 더 보기 좋고 자연스러운 움직임을 만듭니다.
새 이징 함수는 워퍼 절에 문서화했습니다.
사이드 이미지
side 태그 이미지를 사용하는 새 방식의 사이드 이미지 기능을 전면 개선했습니다. 바뀔 때마다 ATL 트랜스폼과 화면 전환을 적용할 수 있습니다. 캐릭터가 바뀔 때와 그대로일 때 다른 트랜스폼을 사용할 수 있습니다.
전체 설명은 사이드 이미지 절을 참조하세요.
PushMove 화면 전환
새 화면 전환 PushMove()와 pushright(또는 pushleft, pushtop, pushbottom)를 Ren'Py에 추가했습니다.
기타
Ren'Py가 각 텍스트 블록 끝에 공백을 추가하던 주요 버그를 수정했습니다. 이로 인해 텍스트와 다른 인터페이스 부분의 배치가 바뀔 수 있었습니다. 공백을 추가한 변경을 되돌리므로 6.99.7보다 작아지고 6.99.6 및 이전과는 같은 크기가 됩니다.
Windows에서 HighDPI("retina") 디스플레이를 지원하여 화면의 실제 해상도로 텍스트를 표시합니다.
대부분의 데스크톱 플랫폼에서 올바르게 최대화됩니다. Ren'Py 창과 시작 단추가 겹칠 수 있는 Windows 7 및 이전은 예외입니다.
per_interact 메서드에서 현재 상호작용이 재시작이 아닌 첫 실행인지 확인하는 renpy.is_start_interact()를 추가했습니다.
새 renpy.maximum_framerate()는 지정한 시간 동안 Ren'Py가 그리는 프레임률을 높입니다. Steam 지원 기능에서 오버레이가 부드럽게 움직이도록 사용합니다.
config.default_music_volume, config.default_sfx_volume, config.default_voice_volume로 각 믹서의 기본값을 설정할 수 있습니다.
새 config.overlay_screens는 기존 스크린 도입 전 방식의 오버레이가 표시될 때 함께 표시하고 그 밖에는 숨길 스크린 리스트를 받습니다. Replay처럼 여러 곳에서 게임에 진입해도 스크린을 게임 인터페이스의 상시 요소로 쉽게 유지할 수 있습니다.
마우스가 게임 창을 벗어나면 포커스를 지우고 unhover 이벤트를 발생시킵니다.
hbox와 vbox가 xminimum 및 yminimum를 지원하며 따라서 xsize, ysize, xysize, area도 지원합니다.
새 PlayCharacterVoice() 액션으로 캐릭터의 음성 음량에 맞추어 샘플을 재생할 수 있습니다.
대사 추출(Extract Dialogue) 스크린에 여러 옵션을 추가했습니다.
중국어 번체 번역을 갱신했습니다.
Ren'Py 6.99.7
동적 이미지
Ren'Py에 동적 이미지를 추가했습니다. 다음과 같이 작성할 수 있습니다.
image eileen happy = "eileen [outfit] happy"
output 변숫값을 상호작용마다 최소 한 번 보간하는 디스플레이어블을 만듭니다. 보간한 문자열로 실제 사용할 다른 디스플레이어블을 찾습니다.
동적 이미지는 디스플레이어블이 필요한 모든 곳에서 사용할 수 있으며, 문자열은 디스플레이어블로 해석되는 것이면 됩니다. 예를 들어 옷 입히기 게임의 지루하고 반복적인 조건 전환을 다음 코드로 대체할 수 있습니다.
image eileen dressup = LiveComposite(
(300, 600),
(0, 0), "eileen_base.png",
(0, 0), "eileen_top_[top].png",
(0, 0), "eileen_bottom_[bottom].png",
(0, 0), "eileen_accessory_[accessory].png",
)
스크린 언어의 add 문에서 동적 이미지를 사용할 수 있습니다.
for item in inventory:
add "store_[item].png"
이 경우 스크린과 전역 스코프 모두에서 변수를 찾습니다.
define 개선 사항
define으로 config와 persistent 변수도 정의할 수 있습니다. 다음 코드가
define config.screen_width = 1280
define config.screen_height = 720
의도대로 작동합니다. 영구 변수는 특별하게 동작하여 다음 코드는
define persistent.unlocked_endings = [ ]
unlocked_endings가 아직 설정되지 않은 경우에만 값을 설정합니다.
Android/iOS
리모컨의 Android SELECT 키로 대사를 진행하고 버튼과 바 등을 선택할 수 있습니다. 대부분의 TV 기반 Android 콘솔을 지원하게 됩니다.
OUYA 전용 지원을 제거했습니다. 일반 TV 기반 Android 콘솔로는 계속 지원될 것입니다.
새 config.save_on_mobile_background와 config.quit_on_mobile_background로 Android나 iOS 앱이 포커스를 잃을 때 다양한 대응 전략을 선택합니다.
게임 내 돈 구매에 관한 Apple 정책 준수를 돕기 위해 iOS에만 소모성 인앱 구매를 추가했습니다.
기타
알 수 없는 게임패드를 Shift+G 메뉴에서 보정할 수 있습니다.
새 config.replace_text로 텍스트를 바꿀 수 있습니다. 예를 들어 연속 하이픈을 en 대시나 em 대시로 바꿀 수 있습니다.
skip_indicator 스크린이 있으면 기본 표시기 대신 사용합니다.
런처에서 F5로 현재 프로젝트를 실행합니다.
리플레이를 나오면 건너뛰기를 비활성화합니다.
제작자 정의 문이 예측할 문을 반환할 수 있습니다.
핀란드어와 중국어 번체 번역을 갱신했습니다.
새 adjust_spacing은 실제 그리기 해상도 텍스트의 간격을 표시 해상도 간격에 맞출지 제어합니다. False이면 extend 후 자간 변경을 막을 수 있지만, 텍스트 크기 변화에 맞는 GUI가 필요합니다. 눈에 띄는 표시 오류를 막기 위해 입력 텍스트에는 False입니다.
다음 버그를 수정했습니다.
비ASCII 사용자 이름일 때 스크립트 백업 문제.
여러 인수로 예측한 스크린이 이미지 예측에서는 한 번만 예측되던 문제.
Mac OS X에서 창이 가려지거나 화면 밖이면 VSYNC가 실패해 CPU가 100%가 되던 문제. 이제 실패를 감지하고 자체 프레임 속도를 제한합니다.
클리핑한 서피스의 하위 서피스가 작동하지 않아 여러 기본 테마의 스크롤바가 잘못 표시되던 문제.
런처에서 테마를 고르기 어렵던 문제.
창 크기 조절 시 하이퍼링크의 마우스 반응 위치가 어긋나던 문제.
window show가 빈 창에 narrator를 사용하도록 했습니다. character 네임스페이스의 캐릭터에도 문제가 있었습니다.
일부 텍스트 태그 주위의 줄바꿈이 표시되지 않던 문제.
창 크기 조절 시 밑줄에 작은 틈이 생기던 문제.
여러 하드웨어의 소프트웨어 렌더러 문제.
scene에서 속성 순서를 바꾼 이미지 이름을 lint가 인식하지 못하던 문제.
여러 게임 인스턴스의 업적 병합 중 충돌.
하이퍼링크가 하나 이상인 텍스트 블록이 여러 개면 잘못 강조되던 문제.
여러 문서 문제.
Ren'Py 6.99.6
HighDPI/Retina
HighDPI/Retina를 지원합니다. Retina가 있는 iOS나 Mac OS X에서 자동 사용합니다.
모든 플랫폼에서 게임 설정 해상도가 아닌 화면 해상도로 텍스트를 그려 크게 확대해도 선명합니다. 문자 크기와 자간 변동으로 창 크기에 따라 배치와 줄바꿈이 달라질 수 있으므로 제작자는 유의해야 합니다.
효과를 최대화하려고 DejaVuSans를 2.35로 갱신하고 DejaVuSans-Bold를 추가했습니다. DejaVuSans.ttf의 굵은 버전을 요청하면 자동 사용합니다.
게임패드
SDL2 컨트롤러 API로 지원합니다. Xbox와 비슷한 표준 버튼 매핑을 제공합니다.
백업
변경된 게임의 .rpy를 자동 백업합니다. 저장 파일과 같은 플랫폼별 위치에 둡니다.
그 밖의 개선
새 achievement.sync()와 achievement.Sync로 로컬과 Steam 같은 백엔드 사이에서 업적을 동기화합니다.
아카이브 검색의 주요 버그를 수정했습니다. 아카이브의 images/를 항상은 아니지만 종종 검색하지 못했습니다. images/를 아카이브에 넣는 게임은 6.99.5에서 업그레이드할 것을 강력히 권장합니다.
game에서 파일을 못 찾으면 images/도 검색합니다. config.search_prefixes로 제어합니다.
디스플레이어블 문에서만 허용하던 style_group을 스크린도 받습니다.
스크린 언어 문이 arguments, properties로 추가 위치 인수 리스트와 속성 딕셔너리를 각각 받습니다.
새 Color로 색 공간 변환과 색 이론 연산을 수행합니다.
game/python-packages에서 pip로 설치한 순수 Python 패키지를 사용할 수 있습니다. 새 게임 자체 및 외부 Python 모듈과 패키지 문서를 참고하세요.
Renios가 iPhone 4와 5용 32비트 시뮬레이터 컴파일을 지원합니다.
한국어와 러시아어 번역을 개선했습니다.
자동 진행이 켜지면 일시 정지가 자동으로 끝납니다.
Ren'Py 6.99.5
시작
특히 Android와 iOS의 시작 시간을 줄이기 위해 많은 작업을 했습니다. 변환, 분석, 컴파일 결과를 캐시하여 게임이 바뀌지 않으면 작업을 줄이는 방식이 주효했습니다. 효과를 모두 얻으려면 런처 첫 화면에서 전체 재컴파일(Full Recompile)을 수행하세요.
데스크톱 사전 시작 화면을 pygame_sdl2로 재작성해 빨라졌습니다.
새 config.minimum_presplash_time으로 데스크톱·Android 사전 시작 화면과 iOS 시작 화면을 최소 시간 동안 표시해 브랜딩에 유용하게 합니다.
패키지에 script_version.rpy와 script_version.rpyc 대신 script_version.txt를 추가하여 패키징으로 스크립트가 바뀌지 않게 합니다. bytecode.rpyb도 game/cache로 옮겼으며 다른 캐시 파일이 함께 있습니다.
iOS
renios를 여러 가지 개선했습니다. 일부는 Apple App Store 승인을 위해 필요했습니다. 6.99.5 야간 빌드로 여러 게임이 승인받았습니다.
SDL 2.0.4 rc1로 갱신해 iOS 8 호환성을 높이고 시작이 끝날 때까지 launchscreen을 유지합니다. ios-presplash는 불필요해져 제거했습니다.
그 밖의 개선
템플릿의 중국어 간체 번역을 추가하고 한국어와 아랍어를 갱신했습니다.
ATL에 update 이벤트를 추가했습니다. 불러오기나 스타일·번역 변경 등 스크린이 처음부터 재생성되는 드물지만 가능한 경우에 호출합니다.
SetMute(), ToggleMute()와 모든 믹서를 음소거하는 "all mute" Preferences()를 추가했습니다.
hinting으로 글꼴 힌팅을 제어합니다.
config.nearest_neighbor로 모든 이미지에 최근접 이웃 보간을 기본 적용해 확대해도 픽셀 아트가 선명하도록 합니다.
새 renpy.predicting()은 예측용 스크린 실행 중이면 참입니다.
새 renpy.return_statement()은 return에 대응하는 Python 함수입니다.
새 _dismiss_pause와 _skipping으로 줄별로 일시 정지와 건너뛰기를 제어합니다.
Render.canvas()의 Canvas에 get_surface()가 추가되었습니다. Ren'Py에서 쓸 수 있는 형식의 pygame_sdl2 Surface를 반환하며 Pygame 그리기로 조작할 수 있습니다.
새 _get_voice_info()는 실행 중인 say 문에 연결된 음성 정보 객체를 반환합니다.
Ren'Py 6.99.4
새 default 문을 추가했습니다. 현재 게임에서 default가 설정하지 않은 변수에 시작이나 불러오기 시 기본값을 설정합니다. start에서 한꺼번에 초기화하는 대신 관련 코드 근처에서 저장 변수를 초기화할 수 있습니다.
define이나 default가 Ren'Py 또는 Python 내장 이름을 재정의하면 lint가 경고합니다.
use 문이 블록을 받고 transclude로 스크린에 삽입합니다. 스크린 코드 블록을 감싸는 문을 만들 수 있습니다.
use로 변환되는 제작자 정의 문도 지원해 스크린 언어 문법을 확장할 수 있습니다.
제작자 정의 디스플레이어블에서 새 Render.place()를 쓸 수 있습니다. 디스플레이어블을 렌더링하고 배치 알고리즘으로 포함 사각형에 놓습니다.
steam 모듈 가져오기 오류를 log.txt에 기록합니다.
초기화 과정 각 부분의 시간을 log.txt에 기록합니다.
모바일에서는 첫 상호작용 시작까지 주 창 생성을 미룹니다. 시작 중 검정 화면이 한동안 보이는 것을 방지합니다.
Apple 패키지 검증 통과를 위해 iOS 지원을 여러 가지 개선했습니다.
런처에 Android 기기의 logcat 정보를 가져오는 버튼을 넣었습니다.
런처가 rapt와 renios 버전이 Ren'Py 본체와 같은지 검사합니다.
수정 사항
이벤트 입력 대기 중 전역 인터프리터 잠금을 해제하지 않던 성능 문제를 수정했습니다. 이미지 사전 로더와 자동 저장 같은 백그라운드 스레드에 문제를 줄 수 있었습니다.
시작 시 스크린을 한 번만 분석하도록 보장합니다. 이전에는 스타일과 언어 설정마다 여러 번 분석해 특히 모바일 시작이 오래 걸렸습니다.
음량 곡선을 더 정확하고 지각에 맞게 바꿨습니다. 이전에는 특히 0에서 10%로 급격히 뛰는 등 문제가 있었습니다. 플레이어가 음량 설정을 다시 조절해야 할 수 있습니다.
갤러리 슬라이드 쇼 타이머가 여러 이미지에서 반복합니다.
맨 아래 텍스트 줄에서 하강부의 외곽선까지 포함하도록 텍스트 블릿을 확장했습니다.
draggroup 밖의 Drag도 위치를 스냅할 수 있습니다.
갤러리가 잠긴 이미지와 열린 이미지를 올바르게 순회합니다. 이전에는 뒤바뀌어 next_unlocked가 양쪽을 모두 순회했습니다.
텍스처 할당 시 외곽선 크기를 고려해 맨 아래 외곽선이 잘리지 않게 합니다.
한 프레임 안에서 내부 트랜스폼의 xpos, ypos 등을 외부로 전달합니다. 이전에는 한 프레임 늦어 중첩 트랜스폼이 지연되거나 완료되지 않을 수 있었습니다.
Ren'Py 6.99.3
불필요한 zipfile.txt를 써 문제를 일으킬 수 있던 디버그 코드를 제거했습니다.
Ren'Py 6.99.2
game 아래 images 디렉터리를 지원합니다. 내부와 하위 디렉터리의 이미지를 자동 정의하므로 단순한 게임에서는 image 문이 필요 없어질 것입니다.
새 AlphaMask()로 다른 디스플레이어블의 알파 채널을 마스크로 사용합니다.
Android와 iOS 에뮬레이터가 화면 키보드를 모의합니다.
이전 버전에서 망가졌던 진행 함수 부분에 한해 업적 API를 일부 바꿨습니다.
SetScreenVariable처럼 현재 스크린에 의존하는 액션도 hovered와 unhovered에서 작동합니다.
증분 다운로드에 실패하면 포기하기 전에 전체 파일을 다운로드하도록 업데이터를 개선했습니다.
Android 빌드 시 apk를 데스크톱 배포판용 dists에 복사합니다.
RestartStatement()를 추가했습니다.
renpy.reset_physical_size()와 ui.screen_id()를 추가했습니다.
스크린 key가 activate_sound를 받아 키 입력 시 쉽게 소리를 재생할 수 있습니다.
ui.interact()를 문서화했습니다.
중국어 간체와 한국어 번역, 이탈리아어 템플릿을 갱신했습니다.
Ren'Py 6.99.1
renpy.load_image(), renpy.load_surface(), renpy.get_showing_tags()를 추가했습니다.
Ren'Py 6.99
SDL2
SDL2 기반으로 Pygame API를 재구현한 Pygame_SDL2를 사용합니다. 역사상 가장 큰 변경 중 하나이며 이번과 향후 버전의 많은 개선을 위한 기반입니다.
iOS 지원
iOS를 지원합니다. 개발하려면 Macintosh, Xcode, 유료 iOS 개발자 프로그램 가입이 필요합니다. 테스트용 iPad나 iPhone도 강력히 권장합니다.
Xcode 프로젝트 생성과 최신 게임 버전으로의 갱신을 지원합니다. Xcode에서 설정을 바꾸고 디버그 및 배포 빌드를 만듭니다.
iOS 7 이상을 지원합니다. 동영상이 기기 지원 형식의 전체 화면으로 제한되는 것을 제외하면 거의 모든 Ren'Py를 지원합니다.
현재 기본 스크린은 iOS에 특히 잘 맞지는 않습니다. App Store 제출 전에 터치에 적합하고 Apple 지침을 준수하도록 사용자 지정해야 합니다.
추가 정보와 iOS 앱 설명에 반드시 포함할 저작권 고지는 iOS 문서를 참고하세요.
Android 지원
SDL2 기반으로 재작성해 데스크톱과 동등한 지원을 제공합니다. 개선은 다음과 같습니다.
사용자가 원하는 방향에 맞춰 화면 회전을 지원합니다.
가격 조회와 Google·Amazon 스토어를 함께 지원하는 단일 .apk 등 인앱 구매를 개선했습니다.
데스크톱·iOS와 같은 오디오 코드로 팬과 페이드 음량 등을 지원합니다. 같은 사운드 파일을 세 플랫폼에서 사용할 수 있습니다.
키보드 입력을 지원합니다.
아랍어와 히브리어 같은 양방향 텍스트 언어를 지원합니다.
설치 경로가 길면 Android SDK를 자동 압축 해제하지 못하던 문제 등 여러 버그를 수정했습니다.
추가 정보와 앱 설명에 포함해야 할 저작권 고지는 Android 문서를 참고하세요.
Steam
Steam API의 Python 바인딩을 함께 배포합니다. Ren'Py 빌드 과정에서 만들어 앞으로 함께 유지보수됩니다.
사용법은 Ren'Py 개발자에게 직접 문의하세요. 다음을 제공합니다.
초기화.
사용자 통계와 업적.
같은 개발자의 다른 설치된 앱 조회.
DLC 지원.
구매 흐름 실행을 포함한 게임 내 오버레이.
세션 티켓.
필요에 따라 Ren'Py와 통합할 예정입니다. 현재는 Steam 업적을 새 Ren'Py 업적 API에 연결합니다.
배포 개선
런처가 call에 from 절을 추가하여 다음을
call dayplanner
아래처럼 자동 변환할 수 있습니다.
call dayplanner from __call_dayplanner
실제로 레이블인 from 절은 게임 변경 후 복귀 위치를 찾도록 돕습니다. 배포 사이 크게 바뀌는 게임의 문제 해결에 도움이 될 것입니다.
약 2GB보다 큰 게임을 패키징하면 ZIP64 아카이브를 만듭니다. 작은 zip보다 호환성이 낮을 수 있습니다.
언어와 번역
튜토리얼의 러시아어 번역과 런처의 핀란드어 번역을 추가했습니다.
SDL2가 지원하는 Linux 외 모든 플랫폼에서 입력기(IME)를 지원합니다. 중국어, 일본어, 한국어처럼 복잡한 비ASCII 텍스트를 입력할 수 있습니다.
클립보드 음성 출력
Shift+C로 클립보드 음성 출력을 사용합니다.
텍스트를 클립보드에 복사하는 자체 음성 출력 방식입니다. 화면 읽기 프로그램이 플레이어가 선호하는 설정으로 읽을 수 있습니다.
그 밖의 개선
상위 수준 업적 API를 추가했습니다.
Android와 iOS 터치 제스처 인식을 지원합니다.
런처 편집 버튼을 숨겨 편집기 창을 터무니없이 많이 열지 못하게 할 수 있습니다.
번역 생성 시 문자열을 비워 둘지 개발자가 선택합니다.
새 AddToSet(), RemoveFromSet(), ToggleSetMembership()는 집합과 인벤토리처럼 집합으로 쓰는 리스트를 조작합니다.
끌어 놓기의 Drag가 focus_mask를 지원합니다.
스타일 시스템을 단순화해 메모리와 시작 시간을 줄였습니다.
새 renpy.suspend_rollback()은 롤백을 허용하면서 체크포인트 기록을 중지합니다.
RENPY_GL_CHECK_ERRORS가 OpenGL/ANGLE 함수 호출과 오류 기록을 제어합니다.
Shift+Alt+P 또는 위-아래-왼쪽-오른쪽-왼쪽-오른쪽 스와이프로 완료 진행 표시기를 전환합니다.
이번 버전부터 dict와 set 컴프리헨션도 롤백을 지원하도록 감쌉니다.
Ren'Py 6.18.3
스크린 언어에 showif 문을 추가했습니다. 조건에 따라 자식을 표시하거나 숨기며 자식이 ATL이면 해당 과정을 관리하는 이벤트를 전달합니다.
이미지 예측이 복귀 스택을 모형화해 call과 return을 통과합니다. 이전에는 call 다음 return이 예측을 막았습니다.
메인 메뉴에서 start 호출을 예측해 게임 시작 직후 예상하지 못한 이미지 로딩을 줄입니다.
ATL on에 쉼표로 구분한 이벤트 이름 리스트를 지정할 수 있습니다.
새 updater.UpdateVersion()은 서버에 연결해 업데이트 여부를 판단합니다.
새 renpy.invoke_in_thread()는 백그라운드에서 함수를 실행하고 완료되면 상호작용을 다시 시작합니다.
자체 음성 출력에서는 {w}, {p}를 무시합니다.
중국어 번체와 러시아어를 갱신했습니다.
버그 수정
숨기는 트랜스폼이 시간을 건너뛸 수 있던 회귀 버그를 수정했습니다.
예측 중 실행된 자식 블록이면 조건이 거짓이어도 if가 자식을 표시하던 버그를 수정했습니다.
SetScreenVariable과 ToggleScreenVariable을 실제로는 순수하지 않은데 순수 함수로 선언했던 문제를 해결했습니다. 순수 함수로 재구현했습니다.
상호작용 사이에 입력 점유가 이전되지 않아 응답하지 않던 문제를 수정했습니다.
Ren'Py 6.18.2
define이 스토어 이름을 받고 say는 기본 스토어보다 character를 먼저 찾습니다. 따라서 다음처럼 쓰면
define character.e = Character("에일린")
다음 say 문이
e "안녕, 세상아."
e를 다른 용도로 쓰면서도 계속 작동합니다.
config.image_cache_size의 기본 캐시를 8화면에서 16화면 분량으로 늘렸습니다.
새 crop_relative가 True이면 crop의 실수를 변환된 자식의 너비나 높이 비율로 해석합니다. 예를 들어 (0.5, 0.0, 0.5, 1.0)은 오른쪽 아래 사분면을 잘라냅니다.
새 keyboard_focus가 거짓이면 버튼, 바, 이미지맵 핫스폿을 키보드 포커스 대상에서 제외합니다.
Mousearea가 focus_mask를 따라 사각형이 아닌 영역도 만들 수 있습니다.
게임과 Ren'Py 자체의 메모리를 분석하는 renpy.profile_memory(), renpy.diff_memory()를 포함합니다. 새 renpy.profile_rollback()은 내부 롤백 기록의 메모리를 구체적으로 보여 줍니다.
자체 음성 출력을 켜면 끄는 방법을 알립니다.
반복 변수가 다른 곳에서 define된 상수인 경우 등 스크린 for 분석의 미묘한 버그를 수정했습니다.
Civalin이 기여한 런처와 템플릿의 중국어 번체를 추가했습니다.
Ren'Py 6.18.1
임시 캐릭터용 새 Placeholder()를 포함합니다. 정의되지 않은 이미지에도 사용합니다.
새 Character 유사 객체 sv는 자체 음성 출력 중 설명 텍스트를 표시하고 읽을 수 있습니다.
스크린 ATL은 자신이 처음 표시될 때 실행됩니다. 이전에는 포함 스크린이 처음 표시될 때 시작했으므로 나중에 트랜스폼을 바꾸면 일부가 건너뛰어졌습니다.
NoJoker가 기여한 독일어 템플릿이 포함됩니다.
Ren'Py 6.18
스크린 언어 개선
새 구현으로 원래보다 훨씬 빨라질 수 있습니다. 이전에는 상호작용마다 처음부터 평가했지만 이제는 큰 부분을 점진적으로 재사용합니다. 성능을 최대화하는 방법은 새 스크린 언어 최적화 문서를 참고하세요.
특히 매개변수 목록을 정의하면 성능이 좋아집니다. 받는 값이 없어도 빈 목록을 정의해야 합니다.
최적화를 위해 use가 매개변수 목록 있는 스크린을 호출하면 그 목록의 변수만 갱신합니다. 이전에 문서화되지 않은 동작의 변경입니다.
디스플레이어블 내부 첫 항목이 if이면 그 안에서 속성을 전달할 수 있습니다. 예를 들어 다음은
text "에일린":
if eileen_mad:
color "#fcc"
else:
color "#cfc"
이제 작동합니다.
스크린 예측의 이점이 커져 여러 방식으로 개선했습니다.
기본적으로
show screen과call screen의 인수로 예측합니다. 어느 문에든 부수 효과가 있으면 예측 중에도 발생할 수 있어 위험합니다. 완화를 위해 두 문 모두 예측을 막는nopredict절을 받습니다.실행되지 않을 if 절 내부 이미지도 예측하려고 하며 문 예측 중 오류를 무시합니다.
renpy.start_predict_screen()과renpy.stop_predict_screen()로 매개변수 있는 스크린을 포함해 사용할 이미지를 수동 예측할 수 있습니다.
이제 renpy.profile_screen()으로 스크린 프로파일링을 지원합니다.
화면 전환 전에 표시 중인 스크린의 복사본을 만들도록 변경했습니다. 따라서 전환으로 스크린 갱신을 보여 줄 수 있습니다. 예를 들어 바의 값을 늘린 뒤 dissolve로 새로 늘어난 부분을 나타나게 할 수 있습니다.
이미지 예측 로딩
자동 예측이 실패하는 경우에 이미지를 수동 예측하는 공식 지원 방식이 추가되었습니다. renpy.start_predict()는 예측을 시작하고 renpy.stop_predict()는 중지합니다.
접근성
화면의 텍스트를 시각 장애가 있는 플레이어에게 읽어 주는 자체 음성 출력 모드를 지원합니다. v 키로 활성화합니다. 자세한 내용은 자체 음성 출력 문서를 읽어 보세요.
새 alt 스타일 속성으로 대체 텍스트를 지정하여 이미지맵 구성 요소와 이름이 불완전한 버튼도 읽어 줄 수 있습니다.
런처 환경설정에 큰 글자 모드가 추가되었습니다. 텍스트 크기와 대비를 높입니다.
Android 인앱 구매
이번 버전에는 Android 인앱 구매용 상위 수준 인터페이스가 포함되어 있습니다. 현재 Google Play와 Amazon App Store를 지원합니다.
픽셀 아트
이미지의 최근접 이웃 필터링을 지원합니다. 화면 픽셀이 단일 텍스처 픽셀에 대응하도록 보장하여 픽셀 아트에 적합한 확대 방식을 제공합니다. 새 nearest 트랜스폼 속성으로 활성화합니다.
새 config.adjust_view_size() 콜백으로 Ren'Py 뷰포트를 창 크기 또는 전체 화면의 화면 크기와 다르게 설정할 수 있습니다. 예를 들어 원래 크기의 정수 배수로 제한할 수 있습니다.
음성 개선
Character()의 voice_tag와 새 VoiceVolume() 값으로 캐릭터별 음량을 조절할 수 있습니다.
새 config.emphasize_audio_channels로 특정 채널을 강조할 수 있습니다. 강조 채널이 재생 중이면 나머지 음량을 낮추고, 어느 강조 채널도 재생하지 않으면 정상으로 복원합니다. [ 'voice' ]로 설정하면 음악과 다른 소리보다 음성을 강조할 수 있습니다.
OS X 버그 우회
Mac OS X 10.9 버그를 우회하기 위해 Macintosh에서는 항상 주 모니터에서 열립니다.
기타
몇 가지 제한 아래 캐릭터 이름에 비ASCII 문자를 사용할 수 있습니다. Python 코드는 비ASCII 식별자를 허용하지 않으므로 define으로 정의하고 Python 코드 밖에서 사용해야 합니다.
imagebutton과 imagemap의 auto가 이미지 파일명뿐 아니라 이미지 이름도 받습니다.
새 renpy.image_exists()는 이미지가 정의되어 있으면 참을 반환합니다.
gallery_nav 스크린으로 갤러리 탐색을 사용자 지정할 수 있습니다.
새 renpy.count_dialogue_blocks()와 renpy.count_seen_dialogue_blocks()는 전체 대사 블록 수와 현재 사용자가 어느 플레이에서든 본 블록 수를 반환합니다. 몇 가지 주의 사항은 있지만 게임을 얼마나 보았는지 나타낼 수 있습니다.
config.autosave_on_choice는 선택지에서, config.autosave_on_quit는 종료, return, 저장 슬롯 불러오기로 게임이 끝나기 직전에 자동 저장할지 결정합니다.
새 events 트랜스폼 속성은 자식에게 이벤트를 전달할지 결정합니다. 일부 자식이 이벤트를 받으면 안 되는 ATL 트랜스폼에서 유용합니다.
config.save_dump로 켜는 저장 덤프를 저장 전에 수행하므로 피클 직렬화 문제를 디버깅하는 데 훨씬 유용해졌습니다.
NVLCharacter()에 show_ 인수를 전달하면 접두사를 제거하고 nvl 스크린에 전달합니다.
번역
Oshi-Shinobu가 기여한 런처와 템플릿 게임의 이탈리아어 번역을 추가했습니다.
Mrstalker가 기여한 템플릿 게임의 포르투갈어 번역을 추가했습니다.
Huanxuantian이 기여한 런처의 중국어 간체 번역을 추가했습니다.
Ren'Py 6.17.7
이번 버전에는 여러 Android 변경이 포함됩니다.
RAPT가 최신 SDK를 사용하도록 갱신되었습니다. 빌드 문제가 있으면 SDK를 다시 설치하세요.
RAPT에 Ren'Py 복사본을 포함하지 않습니다. 대신 Ren'Py가 RAPT용 빌드 게임에 자신을 넣습니다. 따라서 Android 패키지에 Ren'Py 수정 사항을 포함할 수 있습니다.
Emmanuel Marty와 Winter Wolves가 기여한 하위 수준 인앱 구매 구현입니다. Google Play와 Amazon App Store를 지원합니다. 상위 수준 구현으로 감쌀 예정이므로 현재는 문서화하지 않습니다.
Windows, Mac OS X, Linux에서 발생한 오디오·동영상 동기화 문제를 수정했습니다.
Ren'Py 6.17.6
Marcel이 기여한 런처의 독일어 번역을 추가했습니다.
Baekansi가 기여한 런처와 템플릿 게임의 한국어 번역을 추가했습니다.
일부 Mac OS X 컴퓨터에서 런처가 시작되지 않던 문제를 우회했습니다.
Ren'Py 6.17.5
번역
Renoa가 기여한 런처와 템플릿 게임의 아랍어 번역이 포함됩니다.
일본어와 스페인어 번역을 갱신했습니다.
변경 사항
트레이스백이 일반적으로 문을 구현하는 Ren'Py 함수 대신 스크립트 문을 보고하도록 변경했습니다.
renpy.pause()는 대기 시간이 0일 때만 롤백 가능한 체크포인트를 설정합니다. 짧은 일시 정지가 롤백을 막는 것을 방지합니다.
새 renpy.queue_event()로 사용자 인터페이스 코드에서 Ren'Py 이벤트를 예약할 수 있습니다. 예를 들어 사용자 정의 컨트롤러에 연결한 직렬 포트의 명령을 수신할 수 있습니다.
RENPY_SKIP_MAIN_MENU와 RENPY_SKIP_SPLASHSCREEN 환경 변수를 설정하면 각각 메인 메뉴와 시작 화면을 건너뜁니다.
RENPY_TIMEWARP 환경 변수로 시간을 빠르게 하거나 느리게 할 수 있습니다.
config.autoreload를 True로 설정하고 Shift+R을 누르면 실험적인 새 자동 재로딩 시스템을 전환할 수 있습니다.
수정 사항
6.17.4에서 Shift+R이 심각한 메모리 누수를 일으키던 회귀 버그를 수정했습니다. 다른 Shift+R 문제도 여러 개 수정했습니다.
다시 시작한 ATL 트랜스폼 안에서 화면 전환이 제대로 작동하지 않던 문제를 수정했습니다.
잘못 문서화되어 있었고 작동도 멈췄던 --warp를 복구하고 문서를 개선했습니다.
Ren'Py 6.17.4
다시 불러오기
Shift+R 재로딩을 전면 재작성했습니다.
재로딩으로 발생하던 여러 심각한 메모리 누수를 없애기 위해 필요했습니다.
Android
출시 당시 최신 Android SDK와 Ant를 사용하도록 갱신했습니다. 이전 버전 사용으로 인한 빌드 문제가 해결될 것입니다.
Amazon Fire TV를 인식하고 지원합니다. 감지하면 "firetv" 스크린 변형을 선택합니다. 이 기기로 게임을 전송하기 위해 Remote ADB 프로토콜을 통한 Android 연결도 지원합니다.
기타
MoveTransition을 포함한 상호작용을 다시 시작할 때의 문제를 수정했습니다.
화면보다 큰 이미지맵을 지원하여 뷰포트 안에 놓을 수 있습니다.
say, choice, nvl choice 스크린의 레이어를 선택할 수 있습니다. config.say_layer, config.choice_layer, config.nvl_layer를 참고하세요.
창과 바 이미지 예측을 개선했습니다.
Ren'Py 6.17
스타일
디스플레이어블 모양을 설정하는 스타일 시스템을 처음부터 재작성했습니다. 새 스타일 생성 시간이 이전의 일부에 불과할 만큼 줄었습니다. 모든 디스플레이어블이 연결된 스타일을 만들므로 성능이 크게 향상될 수 있습니다.
Python 대신 스타일을 정의하는 새 style 문도 도입했습니다. 물론 이전 방식도 완전히 지원합니다. 다음과 같이 길고 반복적인 코드는
init python:
style.quick_button_text.set_parent('default')
style.quick_button_text.size = 12
style.quick_button_text.idle_color = "#8888"
style.quick_button_text.hover_color = "#ccc"
아래로 바꿀 수 있습니다.
style quick_button_text is default:
size 12
idle_color "#8888"
hover_color "#ccc"
마지막으로 Shift+I 스타일 검사기를 재작성했습니다.
문법 변경
새 style 문 외에도 네 가지 문법 변경이 있습니다.
단순 표현식의 정의를 확장했습니다. ATL과 스크린 언어 등에서 사용하는 단순 표현식은 이제 lambda나 삼항 연산자(... if ... else ...)가 없는 모든 Python 표현식을 포함합니다.
따라서 다음과 같은 코드가
show logo: xpos 800 / 2
이제 유효합니다. 이전에는 표현식을 괄호로 감싸야 했습니다.
새
show layer로 레이어 전체에 트랜스폼이나 ATL을 적용할 수 있습니다. 문법은 다음과 같습니다.show layer master at flip
또는 다음과 같습니다.
show layer master: xalign 0.5 yalign 0.5 rotate 180
새
window auto로 대사창을 자동 표시하고 숨길 수 있습니다. 기본적으로say전에 표시하고scene전에 숨기지만 사용자 지정할 수 있습니다.init을 다른 문과 결합할 수 있도록 확장했습니다. "init 1 image = ...", "init -2 define name = ..." 등을 쓸 수 있습니다.
번역
프랑스어와 러시아어 템플릿 게임 및 런처 번역을 추가했습니다.
Android
RAPT(Ren'Py Android Packaging Tool)를 따로 다운로드할 필요가 없어졌습니다. Android 빌드 요청 시 런처가 다운로드하며 Ren'Py 업데이터로 갱신합니다.
버튼에 Android의 길게 누르기와 데스크톱의 오른쪽 클릭으로 실행하는 대체 액션을 지정할 수 있습니다.
Android 시스템이 종료하기 전에 환경설정을 포함한 영구 데이터를 저장하지 않던 버그와 일부 Android 2.3 시스템 호환성을 깨뜨린 회귀 버그를 수정했습니다.
새 환경설정과 변경
Preferences()로 접근하는 새 환경설정 두 개가 있습니다.
"auto-forward after click"은 클릭이 자동 진행을 멈출지 제어합니다.
"show empty window"는 "window show"와 "window auto"가 빈 창을 표시할지 결정합니다.
둘 다 기본 환경설정 스크린에는 없지만 원하는 개발자가 추가할 수 있습니다.
변경된 환경설정은 하나입니다.
"display"의 새 "any window" 옵션은 전체 화면에서 이전 창 크기로 복원합니다.
기타
ShowMenu()로 표시할 스크린에 인수를 전달할 수 있습니다.
input에 픽셀 수로 입력란 크기를 제한하는 pixel_width 속성이 추가되었습니다.
새 xsize, ysize, xysize로 디스플레이어블 크기를 직접 설정할 수 있습니다.
focus_mask가 포커스를 받아야 할 때 참을 반환하는 호출 가능 객체를 받습니다. 이런 함수를 작성할 수 있다면 현재의 픽셀 불투명도 검사보다 훨씬 빠를 수 있습니다.
Viewport가 xfill과 yfill을 따릅니다. 기본 스타일은 둘 다 참입니다. False이면 내용이 뷰포트 전체를 채우지 않을 때 내용에 맞춰 줄어듭니다.
새 renpy.get_image_bounds()로 모든 Transform이 적용된 표시 이미지의 경계 상자를 얻습니다.
새 renpy.retain_after_load()로 스크린에서 바꾼 데이터를 불러오기 후에도 유지할 수 있습니다.
새 xsize, ysize, xysize로 크기 변경 가능한 디스플레이어블의 크기를 직접 설정할 수 있습니다.
일부 속성만 지정한 이미지와 대사의 사이드 이미지 예측을 개선했습니다. 제작자 정의 문의 예측도 문서대로 작동합니다.
Ren'Py 6.16.2
런처와 템플릿 게임의 스페인어 번역을 추가했습니다.
마우스를 지원할 때 위치를 얻는 새 renpy.get_mouse_pos()를 추가했습니다.
Ren'Py 6.16
Android
Android 지원을 런처에 통합했습니다. 크기 때문에 RAPT는 여전히 따로 다운로드하지만 Ren'Py 디렉터리에 넣으면 런처에서 다음 작업을 할 수 있습니다.
Android SDK 설치.
프로젝트를 Android 앱으로 설정.
Android 앱 빌드와 설치.
Android 휴대폰, 태블릿, TV 기반 콘솔을 모의하는 모드로 실행할 수 있습니다.
OUYA 같은 TV 기반 Android 콘솔을 지원합니다. OUYA를 별도로 감지하고 적절한 변형을 고를 수 있습니다.
Android 포트에 일부 동영상 재생 지원을 추가했습니다. 전체 화면과 Android 지원 코덱으로 제한되며 아쉽게도 데스크톱 Ren'Py와 겹치는 코덱이 적지만, 컷신 재생에는 충분할 수 있습니다.
새 스크린 변형 "large", "medium", "small"은 시각적 크기를, "touch", "tv", "pc"는 입력 기기를 나타냅니다. TV는 멀리 있어 small로 취급합니다.
Android에서 세로쓰기를 표시할 수 있습니다.
저장, 불러오기, 영구 데이터 개선
하위 수준 저장/불러오기 API를 개편했습니다. 원하는 슬롯을 찾기 위해 전부 검사하지 않고 정보를 직접 얻을 수 있습니다. 새 함수는 renpy.list_slots(), renpy.newest_slot(), renpy.slot_mtime(), renpy.slot_json(), renpy.slot_screenshot()입니다.
상위 수준에서는 최신 슬롯일 때 참인 FileNewest()가 추가되었습니다. FilePageNext()와 FilePagePrevious()는 정해진 페이지 수를 순환하는 wrap 인수를 지원합니다.
저장 파일에 임의 JSON 정보를 추가할 수 있습니다. 비주얼 노벨의 현재 경로, 시뮬레이션의 날짜와 돈, RPG의 파티 구성 같은 저장별 정보를 저장과 불러오기 스크린에서 얻을 수 있습니다.
JSON 정보는 config.save_json_callbacks로 만들고 하위 수준 renpy.slot_json() 또는 상위 수준 FileJson()으로 접근합니다.
가능하면 사용자 공용 저장 디렉터리뿐 아니라 게임과 함께 저장합니다. USB나 네트워크 공유에 둔 게임의 저장을 여러 컴퓨터에서 쓸 수 있습니다. 양쪽에 있으면 최신 파일이 우선합니다.
네트워크 공유의 저장 파일이 바뀌면 내용을 자동 재검사하고 현재 상호작용을 다시 시작합니다. 저장과 불러오기 스크린이 갱신되어 파일을 불러올 수 있게 됩니다.
메인 메뉴에서는 자동 저장하지 않습니다.
영구 데이터도 양쪽에 저장하며 서로 다르면 병합합니다. 기본적으로 각 필드의 최신 갱신값을 사용하지만, 플레이어가 본 엔딩의 집합 같은 경우에는 적절하지 않습니다. 새 renpy.register_persistent()로 다른 병합 동작을 등록할 수 있습니다.
음성
스크립트를 voice 문으로 채우지 않고도 음성을 재생하도록 지원합니다. 두 가지 새 기능으로 이루어집니다.
런처의 새 대사 추출(Extract Dialogue)은 탭 구분 파일로 대사를 추출합니다. 각 레코드에 캐릭터, 대사, 파일명과 줄 번호, 줄의 고유 식별자가 포함됩니다.
config.auto_voice에 고유 식별자로 서식 처리할 파일명 패턴을 지정합니다. 해당 파일이 있고 다른 음성이 재생 중이 아니면 음성으로 사용합니다.
새 음성 환경설정도 있습니다. "voice sustain"은 여러 상호작용에 걸쳐 음성을 유지할지, "wait for voice"는 자동 진행이 음성 완료를 기다릴지 결정합니다.
이미지 갤러리와 음악 감상실
갤러리에 다음, 이전, 슬라이드 쇼, 돌아가기 버튼의 탐색 오버레이를 표시할 수 있습니다. 제작자는 한 버튼의 이미지 사이 또는 여러 버튼 사이에서 이동할지 선택합니다.
음악 감상실은 무작위 곡 재생과 무작위 순서, 반복, 선택한 단일 곡만 재생할지를 설정할 수 있습니다.
텍스트 렌더링
문자 경계 상자를 벗어나는 글꼴 부분도 렌더링합니다. 특히 힌팅과 안티앨리어싱 텍스트가 잘리는 것을 막지만 경계 상자가 매우 부정확한 글꼴은 배치가 잘못된 것처럼 보일 수 있습니다.
일본어
런처를 일본어로 번역했습니다. 환경설정에서 언어를 바꿀 수 있습니다.
기본 일본어 글꼴과 번역된 인터페이스를 사용하는 일본어 템플릿 게임이 추가되었습니다.
문서 상당 부분이 일본어로 번역되었습니다. 다음에서 볼 수 있습니다.
문서
문서를 개선했습니다. 다음 페이지를 새로 추가하거나 이전 위키 문서에서 옮겼습니다.
그 밖에도 많은 문서를 개선하고 편집했습니다.
기타
기본 빠른 메뉴에 롤백과 빠른 건너뛰기를 추가했습니다. 템플릿 screens.rpy에 있는 기능이므로 게임에 복사해야 할 수 있습니다.
기본 yes_no 스크린에서 오른쪽 클릭으로 아니요를 선택합니다. 템플릿 screens.rpy의 기능이므로 게임에 복사해야 할 수 있습니다.
빠른 건너뛰기가 읽은 텍스트에 도달하면 멈춥니다.
build.destination으로 배포판 빌드 파일을 둘 디렉터리를 선택할 수 있습니다.
마우스 진입과 이탈에는 반응하지만 클릭 시 유용한 동작을 하지 않는 버튼용 NullAction이 추가되었습니다.
ConditionSwitch가 훨씬 빨라졌습니다.
비정상적인 타임스탬프의 파일에는 현재 시각을 부여합니다.
버그 수정
여러 버그를 수정했습니다. 주요 수정은 다음과 같습니다.
Windows 시작 시 화면을 재시작하던 문제를 수정했습니다. 이 문제로 그래픽 카드를 느리다고 잘못 판단해 관련 오류 메시지가 표시될 수 있었습니다.
비ASCII 문자가 있는 Python 코드의 컴파일 실패 시 올바른 오류 메시지가 나오지 않던 문제를 수정했습니다.
Ren'Py 6.15.6
Android 플랫폼 개선이 포함됩니다.
애셋은 APK와 확장 파일에서만 읽습니다.
로그와 트레이스백은 외부 저장소에 둡니다.
이전 Ren'Py의 저장이 있는 경우를 제외하고 저장 파일도 외부 저장소에 둡니다.
클리핑이 없는 일반적인 경우의 GL2 셰이더를 단순화했습니다. Android에서 눈에 띄게 빨라지며 다른 플랫폼도 향상될 수 있습니다.
끌어 놓기 문제를 수정했습니다. 수정에 기여한 Kinsman에게 감사드립니다.
Skip()이 건너뛰기 표시기를 실행합니다. 다음 메뉴까지 건너뛰는 새 fast 매개변수도 지원합니다.
매우 오래된 게임과의 호환성을 위한 여러 작은 변경이 있습니다. 이제 Ren'Py 5 데모도 실행됩니다.
Ren'Py 6.15.5
두 새 기능을 추가했습니다.
GL 렌더러가 가산 혼합을 지원합니다. ATL이나
Transform()에서additive로 켭니다. 소프트웨어 렌더러에서는 작동하지 않으므로 제작자가 그 경우를 처리해야 합니다.새
Flatten()은 여러 텍스처를 하나로 합칩니다.LiveComposite()처럼 겹치는 텍스처가 여럿인 디스플레이어블에 0부터 1 사이alpha를 적용할 때의 잘못된 동작을 막을 수 있습니다.
다음 문제도 수정했습니다.
기본 인수 앞의 공백을 건너뜁니다. 이전에는 일부 경우 파싱 오류가 발생했습니다.
zip과 tar의 파일 및 디렉터리 UNIX 권한을 각각 644와 755로 설정합니다. 이전의 666과 777은 사용자 umask를 따르지 않는 도구로 풀 때 보안 문제를 일으켰습니다. Info-zip에 이 문제가 있었습니다.
글꼴 자동 힌팅을 기본 활성화해 이전 배포판과 렌더링 호환성을 복원했습니다.
최신 libav로 빌드하며 이를 요구합니다. libav가 있으면 최신 ffmpeg와도 작동할 것입니다.
전체 화면 진입과 이탈 시 Window 메뉴에 여러 창이 생기지 않도록 함께 배포하는 SDL을 수정했습니다.
Ren'Py 6.15.4
대부분의 64비트 Linux에서 Ren'Py 6.14.x와 6.15.0-3이 실행되지 않게 하던 컴파일 문제를 수정했습니다.
이미지 예측이 더 세밀해졌으며 화면 애니메이션 중에도 수행할 수 있습니다.
새 build.exclude_empty_directories가 빈 디렉터리의 배포 포함 여부를 결정합니다. 기본값은 참이며, 이전에는 플랫폼별로 달랐습니다.
Ren'Py 6.15
번역 프레임워크
종합적인 번역 프레임워크를 포함합니다. 한 번의 언어 선택으로 대사, 메뉴와 UI 텍스트, 이미지와 파일, 스타일 등을 바꿀 수 있습니다.
번역자가 대사를 나누거나 합칠 수 있습니다. 새 번역 블록 안에는 대부분의 Ren'Py 문을 허용하므로 조건 같은 논리로 언어에 맞게 조정할 수 있습니다.
런처의 새 번역 생성(Generate Translations)은 전체 스크립트가 있는 승인된 번역 작업에서 새 언어의 빈 번역 파일을 생성합니다.
일본어 지원 개선
Ren'Py 6.15에는 일본어 지원을 개선하는 여러 변경이 있습니다.
튜토리얼 게임을 일본어로 번역했으며 환경설정 메뉴에서 선택할 수 있습니다.
Koichi Akabe가 튜토리얼을 번역했습니다.
텍스트의
vertical과 hbox의 새box_reverse로 세로쓰기를 지원합니다. 대사, 메뉴, 그 밖의 텍스트를 세로로 표시할 수 있습니다.Koichi Akabe가 세로쓰기 지원을 작성했습니다.
줄바꿈 알고리즘을 Unicode 6.2에 맞췄습니다. CSS3 Text 모듈의 옵션에 기반한 "japanese-strict", "japanese-normal", "japanese-loose" 세 언어도 추가하여 작은 가나와 특수 문자 주변의 줄바꿈을 더 세밀히 제어합니다.
새
renpy.language_tailor()로 문자의 줄바꿈 클래스를 바꾸어 추가 조정할 수 있습니다.
콘솔
새 디버그 콘솔에서 스크립트와 Python 문을 대화형으로 실행하고 결과를 바로 볼 수 있습니다. 개발자 모드나 config.console이 True일 때 Shift+O로 엽니다.
콘솔로 다음을 할 수 있습니다.
레이블로 이동.
Ren'Py 스크립트 문을 대화형으로 시험.
Python 표현식이나 문을 평가하고 결과 확인.
게임 진행에 따라 Python 표현식 추적.
콘솔은 원래 Shiz, C, delta가 작성했습니다.
스크린 매개변수
레이블과 트랜스폼처럼 이름 있는 매개변수를 받습니다. 다음과 같이 쓸 수 있습니다.
screen top_text(s, size=36):
text s xalign 0.5 size size
그리고 다음과 같습니다.
show screen top_text("잘 작동해요!")
리플레이 갤러리
장면 리플레이를 지원합니다. 게임 시작 후에도 메인 메뉴나 게임 메뉴 스크린 등 어디서든 호출할 수 있습니다. 끝나면 스크린이나 Python 코드 안이라도 호출 위치로 돌아갑니다. 리플레이 안에서 롤백은 작동하지만 저장과 불러오기는 비활성화됩니다.
Replay()는 리플레이를 시작합니다. renpy.end_replay()는 진행 중이면 끝내고, 그 밖에는 무시합니다.
음성 개선
음성 재생을 여러 가지 개선했습니다. 새 config.voice_filename_format으로 voice에 파일명 일부만 쓸 수 있습니다. Character()의 새 voice_tag와 SetVoiceMute(), ToggleVoiceMute()로 캐릭터별 음소거가 가능하며, 새 VoiceReplay()로 현재 음성을 다시 재생합니다.
런처 개선
몇 가지 런처 개선이 있습니다.
탐색 페이지의 파일 패널에 새 스크립트 파일을 만드는 버튼이 있습니다.
번역 템플릿을 생성할 수 있으며 번역 프레임워크로 런처 자체도 번역할 수 있습니다.
스킨을 일부 지원합니다. 기본 배치는 고정이지만 배경 이미지와 색상을 바꿀 수 있습니다. 스킨 문서를 참고하세요.
Macintosh 변경
64비트 지원 프로세서와 Mac OS X 10.6 이상이 필요합니다.
패키징 개선
게임 파일 배치를 일부 바꿨습니다. 작은 실행 프로그램을 제외한 플랫폼별 바이너리는 모두 lib/ 아래에 있습니다. Ren'Py 자체는 renpy/에 있으며, 핵심 부분인 common/은 renpy/common/으로 옮겼습니다.
모든 데스크톱에서 이름만 바꾸고 수정하지 않은 Python 바이너리를 사용합니다. 이전에는 플랫폼별 바이너리였습니다. 라이브러리 일부는 데스크톱 빌드 간 공유합니다.
Linux 프로세스 이름은 python 대신 게임 이름이 됩니다.
그 밖의 변경
뷰포트가 가장자리 스크롤을 지원합니다. 마우스가 설정한 거리 안으로 접근하면 스크롤합니다.
대부분의 키보드 키가 자동 반복됩니다.
config.key_repeat로 반복 속도를 제어합니다.메뉴에서도 사이드 이미지를 사용할 수 있습니다.
config.enter_yesno_transition과config.exit_yesno_transition으로 예/아니요 창의 표시 및 숨김 전환을 각각 정의합니다.viewport 문이 마우스가 변에 접근하면 자동 스크롤하는 가장자리 스크롤을 지원합니다.
새
transform_anchor는 기준점을 확대와 회전의 중심으로 사용합니다. 예를 들어 이미지 중심뿐 아니라 오른쪽 아래 모서리를 중심으로 회전할 수 있습니다.Ren'Py의 일부인 common을 renpy/common으로 옮겼습니다. 거대한 00screens.rpy는 작은 파일 여러 개로 나눴습니다.
새
box_reverse와order_reverse는 vbox와 hbox 자식의 배치 순서 및 그리기 순서를 각각 제어합니다.xoffset과 yoffset이 실수를 받아 subpixel이 참이면 더 정밀하게 배치합니다.
버튼의
child스타일 속성을 스크린 언어에서도 사용할 수 있습니다.새
config.enter_yesno_transition과config.exit_yesno_transition으로 확인 창 진입과 이탈의 화면 전환을 지정합니다.기본 빌드에 Python decimal 모듈이 포함됩니다.
버그 수정
다음 버그 등을 수정했습니다.
GitHub 버그 37: 크기가 정수가 아닐 때 LiveTile이 충돌하던 문제.
GitHub 버그 41:
renpy.loadable()이 Android 패키지 내부 파일을 검색하지 못하던 문제.GitHub 버그 42: 읽기 전용 디렉터리의 게임도 런처에서 실행할 수 있습니다.
GitHub 버그 45: 스크린 숨김으로 아래 스크린도 숨겨질 때 실패하던 문제.
GitHub 버그 46: 가득 찬 이미지 캐시에서 이미지를 제거하지 못해 메모리 누수가 계속 늘어나던 문제.
GitHub 버그 50: 세로 바가 좌우 키로 스크롤되던 문제와, 화면을 나가는 동안 잡은 바가 계속 잡힌 상태여서 추가 입력을 막던 문제.
GitHub 버그 51: 롤백 후 slow_done 콜백을 호출하지 않던 문제.
GitHub 버그 56, GitHub 버그 57:
renpy.loadable()이 Android 애셋에서 작동합니다.GitHub 버그 60: {p}, {w} 바로 뒤에 텍스트 태그가 있으면 제대로 작동하지 않던 문제.
GitHub 버그 61: end_game_transition이 설정되고 게임 재시작 시 사라지는 변수를 스크린에서 사용해도 충돌하지 않습니다.
GitHub 버그 65: 롤백 리스트에 숫자를 곱하면 항상 롤백 리스트가 나옵니다.
Windows에서 Editra가 더 잘 작동할 것입니다.
매개변수 없는 레이블에도
renpy.call()을 사용할 수 있습니다.오류 처리용 스타일을 구성할 수 없을 때 오류 처리 자체가 실패하던 문제를 수정했습니다.
python early에 문법 오류가 있으면 오류 처리에 실패하던 문제를 수정했습니다.
Ren'Py 6.14
Ren'Py 런처 재작성
런처를 재작성했습니다. 개선 사항은 다음과 같습니다.
Dischan 비주얼 노벨 팀의 Doomfest가 만든 새 시각 디자인.
스크립트·게임 디렉터리와 자주 쓰는 스크립트 파일을 바로 열 수 있습니다.
스크립트 탐색을 지원합니다. label, define, transform, screen, 호출 가능 객체의 이름을 클릭하면 정의 위치를 편집기로 엽니다.
개별 스크립트 파일에도 접근할 수 있습니다.
클릭 한 번으로 프로젝트를 빌드합니다. 여러 단계 대신 한 번 클릭하면 다음을 수행합니다.
게임 스크립트에서 빌드 설정을 읽습니다.
필요한 아카이브를 빌드합니다.
아카이브와 업데이트 파일을 생성합니다.
Ren'Py 업데이터로 Ren'Py를 갱신하고 편집기를 다운로드할 수 있습니다.
Editra와 텍스트 편집
대부분의 사용자에게 Editra를 권장합니다. 런처와 통신하며 Ren'Py 스크립트 편집을 지원하는 플러그인을 개발했습니다.
아직 베타지만 빠르고 가벼우며 코드 편집 지원이 좋습니다. 활성화할 수 있는 맞춤법 검사기도 있어 대사와 다른 문자열을 검사합니다.
설치되지 않은 Editra를 선택하면 자동 다운로드합니다.
jEdit도 계속 지원하며 Editra가 완전히 지원하지 않는 중국어, 일본어, 한국어 등에 권장합니다. 선택하면 자동 다운로드합니다.
시스템별 파일 연결로 편집할 수도 있습니다. 다만 정확한 줄로 커서를 보내지는 않습니다.
Ren'Py 웹 업데이터
적절히 설정하고 소수의 업데이트 파일을 올린 웹 서버에서 변경 사항을 받아 Ren'Py 자체와 개별 게임을 갱신하는 업데이터를 포함합니다.
zsync로 로컬 파일과 서버 파일 사이의 최소 변경만 다운로드합니다. 서버의 파일 한 세트로 프로젝트의 모든 이전 버전을 갱신할 수 있습니다.
추가 설정 가능한 기본 업데이터 인터페이스도 포함합니다.
트랜스폼 변경
더 정확하고 쉽게 사용할 수 있도록 동작을 바꿨습니다.
xzoom과 yzoom을 회전 전에 적용합니다. 따라서 회전해도 모양이 유지됩니다. 이전에는 회전하면서 모양이 바뀌었습니다.
xzoom과 yzoom에 음수를 지정해 이미지를 뒤집을 수 있습니다. 배치 코드도 이를 고려해 올바르게 놓습니다.
변경에 기여한 Edwin에게 감사드립니다.
스크린 언어, 디스플레이어블, 화면 전환 개선
Textbutton과 Label이
text\_접두사 속성을 받습니다. text_를 제거하고 내부 텍스트에 전달합니다.Viewport에 scrollbars를 지정하면 뷰포트를 조절하는 스크롤바를 만듭니다.
Viewport의 새 xinitial, yinitial로 초기 위치를 제어합니다.
스크린 블록에 여러 has 문을 둘 수 있습니다. 자식 하나를 받는 위젯도 has를 받을 수 있습니다.
입력 텍스트 안에서 좌우 방향키를 지원합니다. Edwin의 기여에 감사드립니다.
MoveTransition()을 재작성했습니다. 트랜스폼으로 진입·이탈 이미지 위치를 제어하고 이동 이미지 위치 사이를 보간할 수 있습니다.
롤백 개선
새
renpy.fix_rollback()로 롤백 중 내린 결정까지 고정할 수 있습니다. 사용자는 앞뒤로 이동할 수 있지만 처음 플레이 때와 같은 선택만 할 수 있습니다.fix_rollback에 기여한 Edwin에게 감사드립니다.
call screen에서 점프로 나간 경우에도 롤포워드가 작동합니다.
동영상 개선
재생 지원을 일부 재작성해 견고성, 속도, 프레임 안정성을 높였습니다. 프레임 손실을 줄이고 너무 많이 손실되어 멈추는 문제도 방지할 것입니다.
WebM 동영상 형식을 지원합니다.
이미지 불러오기 기록
config.developer가 참이면 이미지 불러오기 내부 기록을 유지합니다.
_image_load_log 스크린에서 접근합니다. 이미지를 불러온 뒤 몇 초간 파일명을 표시하며 예측 로딩이면 흰색, 예측하지 못했으면 분홍색입니다.
파일 액션과 함수
스크린 함수 두 개를 추가하고 액션 두 개를 변경했습니다.
새
FileUsedSlots()는 현재 페이지의 사용 중인 슬롯 리스트를 반환합니다.새
FileCurrentPage()는 현재 페이지 이름을 반환합니다.FileSave()와FileAction()은 슬롯 이름이 None이면 현재 시각 기반의 미사용 슬롯을 사용합니다.
이를 조합하면 사용자가 새 슬롯을 추가할 수 있는 저장 슬롯 목록을 만들 수 있습니다.
여러 스토어 지원
Python 코드를 실행할 여러 네임스페이스인 스토어를 지원합니다. 변수는 기본 스토어와 같은 방식으로 저장, 불러오기, 롤백됩니다.
Python 블록에 in 절을 지정해 접근합니다. 예를 들면 다음과 같습니다.
init python in stats:
def reset():
"""
Code to reset the statistics.
"""
사용자 스토어는 "store" 패키지 안에 두고 기본 스토어는 패키지 자체입니다. 패키지 사이에서 이름을 가져올 수 있습니다.
init python:
from store.stats import reset
init python in stats:
from store import ToggleField
스토어는 init python 실행 순서에 영향을 주지 않습니다. 이름을 가져올 블록보다 앞선 블록에서 정의해야 합니다.
플랫폼 지원과 라이브러리 갱신
Linux 지원을 변경했습니다.
Linux에서 x86 외에 x86_64 CPU도 지원합니다. 실행 시 셸 스크립트가 플랫폼을 자동 판단합니다.
Linux 버전은 이제 2009년대 Ubuntu 10.04 Lucid의 라이브러리에 링크합니다. 이전에는 2006년 Dapper였습니다. 더 오래된 Linux는 지원하지 않습니다.
여러 의존 라이브러리를 갱신했습니다. 일부 변경은 다음과 같습니다.
Python을 2.7.3으로 갱신했습니다.
Pygame을 1.9.1로 갱신했습니다.
GLEW를 1.7.0으로 갱신했습니다. 일부 Linux의 OpenGL 문제가 해결될 수 있습니다.
LibAV를 0.7.6으로 갱신하고 CPU 감지를 활성화해 컴파일했습니다.
그 밖의 변경
renpy.call()로 Python 안에서 Ren'Py 레이블 호출을 시작할 수 있습니다. 중요한 제약이 있으며 호출 즉시 현재 문을 끝냅니다.액션 자리에 중첩 액션 리스트를 지정할 수 있습니다. 펼친 뒤 실행합니다.
브라우저에서 URL을 여는
OpenURL()을 추가했습니다.OpenGL 창 크기 조절 허용 여부를 결정하는
config.gl_resize를 추가했습니다.명령줄 인수 처리를 재작성했습니다. 특히 lint는 이제 다음
renpy.sh <gamename> lint
명령으로 실행합니다. renpy.exe에서도 작동합니다.
시작 시 게임 정보를 JSON 파일로 덤프할 수 있습니다. 다른 도구에서 런처와 같은 코드 탐색을 제공하는 데 도움이 됩니다.
거의 쓰이지 않는 원격 제어 기능을 제거했습니다.
config.gl_resize가 GL 모드 게임의 크기 조절을 제어합니다.SleepKirby 등의 문서 수정이 있습니다.
Apricotorange가 NVL 모드 튜토리얼을 Sphinx로 옮겼습니다.
config.developer가 True이면 기본적으로 소리와 음악 파일 오류를 보고합니다.
Ren'Py 6.13.9
새 RAPT로 Android 패키징이 훨씬 쉬워졌습니다. 시스템의 빌드 환경을 반자동으로 구성하고 패키지를 빌드해 기기에 설치합니다.
편집기 문제를 해결하려고 6.14 편집기 시스템을 백포트했습니다. 설정 방식이 바뀌었으므로 텍스트 편집기 연동을 참고하세요.
새 config.save_dump는 저장마다 save_dump.txt를 만듭니다. 저장 내용을 설명하므로 파일이 지나치게 커지는 원인을 찾을 수 있습니다.
일부 Linux에서 충돌하는 Mesa 버그를 우회했습니다.
다음 버그를 수정했습니다.
기본 texwrap이 문자 너비를 실수로 표현합니다. 정수가 아닌 자간 때문에 텍스트가 경계 상자를 넘던 문제를 수정합니다.
선택지를 올바르게 기록합니다.
파일 접근에 시스템 인코딩 대신 유니코드를 사용합니다. 비ASCII 이름의 디렉터리에 있을 때 충돌하던 문제를 방지합니다.
ANGLE의 focus_mask를 수정했습니다.
디스플레이어블에 소수 픽셀 크기를 사용할 수 있어 확대하는 이미지가 화면 중심에 정확히 머무를 수 있습니다.
스크린 저장마다 불필요한 디스플레이어블 트리를 저장해 파일이 커지고 저장이 느려지던 문제를 수정했습니다.
텍스처 테스트 실패 후 다른 렌더링 방식을 시도하지 않아 "Textures are not rendering properly." 예외가 발생하던 문제.
Render.fill의 충돌.
Ren'Py 6.13.8
사이드 이미지를 한 캐릭터로 제한하거나 화면 밖 캐릭터만 표시할 수 있습니다. config.side_image_tag와 config.side_image_only_not_showing을 참고하세요.
각 Python 블록 끝에 호출할 함수 리스트인 config.python_callbacks를 추가했습니다.
그래픽 카드의 기능을 검사합니다. 텍스처 사각형을 그릴 수 없으면 다른 렌더러를 사용합니다.
새 방식과 함께 이전 문자열 보간도 기본 활성화됩니다.
libpng 1.5와 호환됩니다. 패치에 기여한 James Broadhead에게 감사드립니다.
다음 버그를 수정했습니다.
일부 잘못된 글꼴 처리 중 충돌.
글자를 표시할 때 너무 오래 대기하던 문제.
소수 자간 사용 시 텍스트 블록에서 한 픽셀이 잘리던 문제.
시간이 아주 먼 미래나 과거일 때 충돌.
종료 확인 창에서 롤포워드하면 즉시 종료되던 문제.
없는 디렉터리를 검색 경로에 넣으면 충돌하던 문제. 이 때문에 최신 버전에서 Katawa Shoujo가 시작되지 않았습니다.
스크린이 저장 파일에 포함되어 크기가 지나치게 커지던 문제.
Ren'Py 6.13
텍스트 재작성
텍스트 표시를 처음부터 재작성했습니다. 많은 새 기능 외에 배치와 표시가 훨씬 빨라지고 코드도 더 깔끔해졌습니다.
새로 지원하는 기능 일부는 다음과 같습니다.
대괄호 변수 보간입니다. 다음처럼 쓸 수 있습니다.
"총 [max_score]점 중 [score]점을 획득했습니다."새 보간은 say와 menu뿐 아니라 모든 표시 텍스트에 적용합니다. 스크린에서는 지역 변수에도 접근할 수 있습니다.
PEP 3101 서식을 지원하므로 변수뿐 아니라 필드와 항목도 표시할 수 있습니다.
rt,rb태그와ruby_style로 후리가나라고도 하는 루비 텍스트를 지원합니다.새
cps태그로 표시 속도를 제어합니다.기본적으로 유니코드 알고리즘으로 줄바꿈 가능 지점을 찾습니다. 동서양 언어가 섞인 줄도 올바르게 처리합니다. 일부 한국어에 맞지 않으므로 한글 구간을 공백에서만 나누는 korean-with-spaces도 구현했습니다.
language로 선택합니다.실제 나눌 지점은 마지막을 제외한 줄의 불균형을 최소화하는 Knuth-Plass 알고리즘으로 정합니다. 자동 줄바꿈 없이 화면보다 큰 Text를 만드는 nobreak도 지원합니다.
layout으로 선택합니다.새
newline_indent는 줄바꿈 뒤 들여쓰기 여부를 결정합니다.새
line_leading은 줄 위에 여백을 넣습니다. 루비 텍스트를 놓을 수 있습니다.표시 전에 텍스트를 자동 번역할 수 있습니다. 향후 주요 버전에서 개선할 예정입니다.
DirectX 지원
2010년 2월 DirectX 업데이트가 설치된 Windows에서 OpenGL 2.0 이상이 없으면 ANGLE 계층을 통해 DirectX를 사용합니다. ANGLE은 Firefox와 Google Chrome도 사용합니다. 드라이버가 OpenGL보다 DirectX를 훨씬 잘 지원하는 넷북에서도 하드웨어 렌더링을 사용할 수 있습니다.
시작 시 그래픽 기능을 검사합니다. 소프트웨어 렌더러이거나 속도가 지나치게 느리면 사용자에게 경고합니다. 경고에는 그래픽 드라이버 갱신을 설명하는 renpy.org 페이지 링크가 있습니다.
DirectX와 OpenGL 모두 게임을 렌더링할 수 없을 때만 소프트웨어를 사용합니다. 소프트웨어 화면 배율 조절은 더 단순하지만 느린 버전으로 교체했습니다.
그 밖의 변경
초기화 이후 스타일을 변경하고 영구 데이터에 저장하는 스타일 환경설정 시스템을 포함합니다. 대사 글꼴, 크기, 색상 선택 등을 제공할 수 있습니다.
스크린 기반 이미지 갤러리와 음악 감상실을 지원합니다. 이미지와 음악 표시를 쉽게 하는 액션을 제공하는 클래스들로 이루어집니다. 해당 액션을 쓰는 스크린은 제작자가 만들어야 합니다.
새 게임의 기본 screens.rpy에 빠른 메뉴가 있습니다. 빠른 저장, 빠른 불러오기, 저장, 건너뛰기 전환, 자동 진행 전환, 환경설정 버튼을 추가합니다.
새 테마 5개와 여러 색상 구성을 포함합니다.
여러 액션을 추가했습니다.
SelectedIf()는 버튼 선택 표시를,SetMixer()는 믹서의 특정 값을 설정합니다.Rollback()과RollForward()로 버튼에 롤백 등을 연결할 수 있습니다.6.12에서 실수로 바뀐 xfill과 yfill을 원래 동작으로 복원했습니다.
Dissolve()와ImageDissolve()가 time_warp를 받습니다.Frame()에서 네 방향 테두리를 각각 지정할 수 있습니다.caret으로 입력 커서를 사용자 지정합니다.renpy.displayable()를 사용자에게 공개했습니다.타이머가 호출 가능 객체 하나뿐 아니라 액션 리스트도 받습니다.
Android 패키지에서 이미지, 음악, 글꼴 등의 파일을 불러올 수 있습니다.
사용자 정의 문이 직접 파싱할 블록을 받을 수 있습니다.
다음 문서를 작성했습니다.
문서에 여러 색인을 추가하고 스타일을 갱신했습니다.
jpeg를 빠르게 불러오는 libjpeg-turbo와 동영상 형식 호환성을 개선하는 libav 0.7.1을 사용합니다.
iLiad 지원을 제거했습니다.
주 배포판에서 PowerPC 지원을 제거했습니다. 웹사이트에서 별도로 다운로드할 수 있습니다.
새 테마와 색상 구성에 기여한 Aleema에게 감사드립니다.
Ren'Py 6.12.2
다음 변경이 포함됩니다.
매개변수가 있는 ATL 트랜스폼을 올바르게 컴파일합니다.
MultipleTransition이 일시 정지와 함께 작동합니다.
동영상 재생 중 종료 액션을 실행하면 마우스를 표시합니다.
전환 중 게임 메뉴 진입 시 멈추던 문제를 수정했습니다.
RENPY_SCALE_FAST가 다시 작동합니다.
더 최신 ffmpeg로 컴파일됩니다.
게임을 다시 시작하면 건너뛰기가 끝납니다.
게임을 눈에 띄게 느리게 하던 텍스처 업로드 문제를 수정했습니다.
넷북 같은 작은 모니터에서 더 나은 기본 창 크기를 선택합니다.
xfill은 vbox에서, yfill은 hbox에서 작동합니다.
클릭하여 진행 기능을 수정했습니다.
사이드 이미지를 수정했습니다.
문서를 수정했습니다.
패치에 기여한 David Gowers와 zhangning에게 감사드립니다.
Ren'Py 6.12.1
이미지 속성
이미지 표시가 속성 기반으로 바뀌었습니다. 이름은 태그와 0개 이상의 속성으로 이루어집니다. 속성 순서는 중요하지 않아, 정의할 때와 다른 순서로 지정해 표시할 수 있습니다.
속성은 유지되기도 합니다. 새 이미지를 표시할 때 가능한 많은 기존 속성을 유지하려고 시도합니다.
예를 들어 다음 이미지들이 있다면
image eileen beach happy = "eileen_beach_happy.png"
image eileen beach woozy = "eileen_beach_woozy.png"
첫 이미지를 다음 명령으로 표시할 수 있습니다.
show eileen happy beach
순서는 중요하지 않으므로 "eileen beach happy"를 표시합니다. 이어 다음 show 문을 실행하면
show eileen woozy
"eileen beach woozy"가 표시됩니다. 다른 이미지가 없다고 가정합니다. "eileen happy woozy"도 있으면 모호성 오류가 발생합니다.
속성 없이 태그만 표시하면 현재 속성을 유지합니다. 다음 코드로
show eileen at right
속성을 바꾸지 않고 Eileen을 화면 오른쪽에 표시할 수 있습니다.
say 속성. say 문의 일부로 이미지 속성을 갱신할 수 있습니다. 캐릭터의 image에 연결할 이미지 이름을 지정하고, say 문 대사 문자열 앞에 속성을 지정하면 연결된 이미지에 적용합니다.
예를 들어 다음과 같이 캐릭터를 정의했다면
define e = Character('에일린', image="eileen")
다음 코드는
e woozy "햇볕을 너무 오래 쬔 것 같아요."
아래와 같습니다.
show eileen woozy
e "햇볕을 너무 오래 쬔 것 같아요."
eileen 태그 이미지가 표시 중일 때 적용됩니다.
사이드 이미지. 새 사이드 이미지 구현으로 일반 이미지처럼 정의하고 스크린에 쉽게 통합할 수 있습니다.
트랜스폼 유지. 트랜스폼이나 ATL 없이 이미지를 표시하면 같은 태그가 이전에 쓰던 트랜스폼을 이어갑니다. 이전에는 멈췄습니다.
오류 처리
새 예외 처리 프레임워크를 도입했습니다. 항상 충돌하는 대신 화면에 오류를 표시하고 상황에 맞는 다음 선택지를 제공합니다.
롤백(Rollback)
다시 불러오기(Reload)
무시(Ignore)
트레이스백 열기(Open Traceback)
종료(Quit)
편집기가 정의되어 있으면 파일명과 줄 번호를 클릭해 해당 줄을 엽니다.
예외와 파싱 오류를 처리하는 데 사용합니다.
기타
OpenGL 모드에서 실행 간 창 크기를 기억합니다. config.save_physical_size로 끌 수 있으며 이전 환경설정 시스템이라면 끄는 것이 적절할 수 있습니다. 화면 설정의 "Window"는 원래 크기의 100%로 맞춥니다.
중심 위치를 정하는 xcenter, ycenter 위치 및 트랜스폼 속성을 추가했습니다.
renpy.vibrate()로 Android 진동을 요청합니다.
하이퍼링크 스타일, 콜백, 포커스 함수를 hyperlink_functions로 옮겨 스타일별로 바꿀 수 있습니다.
들여쓰기 오류는 잘못 들여쓴 줄의 앞줄이 아니라 해당 줄에 보고합니다.
스크린 지역 변수를 바꾸는 SetScreenVariable(), ToggleScreenVariable()를 추가했습니다.
파일명에서 개인 정보를 줄이려고 시도합니다. 가능하면 파일 시스템 루트 대신 게임 기본 또는 Ren'Py 기본 디렉터리의 상대 경로로 보고합니다.
새 box_wrap으로 hbox와 vbox가 포함 영역의 끝에서 자동으로 다음 줄이나 열로 넘어갑니다.
액션에 Action.unhovered()를 둘 수 있습니다. hovered에 지정한 액션이 포커스를 잃으면 호출합니다.
스크린 툴팁을 쉽게 정의하는 Tooltip을 추가했습니다.
텍스트가 할당 영역을 넘는 경우의 기록을 제어하는 config.debug_text_overflow를 추가했습니다.
시스템 믹서를 조절하지 않으므로 Ren'Py 안에서 시스템 음량을 올릴 수 없습니다. 세 플랫폼 모두 다른 앱에 영향을 주는 예측하기 어려운 음량 변화 등의 버그가 있었기 때문입니다.
새 기능과 함께 새 설명서에 화면 전환을 문서화했습니다.
아카이브를 ASCII 문자순으로 자동 감지합니다. config.archives를 참고하세요.
버그 수정:
Launchpad 버그 734137 - 타이머가 롤백에 참여하지 않습니다.
Launchpad 버그 735187 - {nw} 사용 시 멈추던 문제입니다. 원인을 찾아 준 Franck_v에게 감사드립니다.
Ren'Py 6.12.0
Android 지원
Android를 지원합니다. 이미지 디졸브와 동영상 재생은 추가하지 못했지만 기능 대부분을 지원합니다. 게임을 패키징해 Android 마켓에서 배포할 수 있을 것입니다.
Android 지원을 위해 다음을 변경했습니다.
OpenGL 렌더러를 OpenGL ES까지 확장했습니다.
성능 때문에 표시 시스템 상당 부분을 Cython으로 재작성했습니다. 다른 플랫폼도 빨라질 것입니다.
Android 수명 주기를 지원합니다. 기기 중단 시 자동 저장하고 재개 시 필요하면 다시 불러옵니다.
스크린 변형 개념을 추가했습니다. 한 게임에 컴퓨터용 마우스 인터페이스와 Android 스마트폰·태블릿용 터치 인터페이스 등 여러 UI를 제공할 수 있습니다.
게임을 Ren'Py와 별도로 패키징하는 시스템을 만들었습니다. Android NDK 없이 패키지를 빌드할 수 있습니다. Android SDK, Java, Python, Ant와 많은 인내심은 여전히 필요합니다.
renpy.display 패키지에 여러 바이너리 모듈을 만듭니다. _renpy.so와 같은 곳에 두면 자동 인식할 것입니다.
새 위젯과 디스플레이어블
SpriteManager를 추가했습니다. 비슷한 스프라이트를 고성능으로 많이 그립니다. 대부분 비슷하다면 수백 개 입자까지 처리할 수 있습니다.
Mousearea를 추가했습니다. 영역에 마우스가 들어오거나 나가면 hovered와 unhovered를 호출합니다. 포커스 체계에 참여하지 않아 안에 버튼과 바를 넣을 수 있습니다.
끌어 놓기 위젯과 디스플레이어블을 추가했습니다. 다음을 지원할 수 있습니다.
사용자가 창 위치 바꾸기.
카드 게임.
인벤토리 시스템.
끌어서 순서 바꾸기.
이미지 예측 로딩
이미지 사용 예측이 개선되었습니다. 일반 진행뿐 아니라 클릭 한 번으로 열 스크린의 이미지도 예측합니다. 일반 진행에서는 게임 메뉴 첫 스크린, 게임 메뉴에서는 나머지 메뉴 스크린과 메인 메뉴 복귀 시 이미지를 예측합니다. 자동으로 수행하지만 스크린을 사용할 때만 적용됩니다.
predict가 False가 아니면 이미지 예측을 위해 언제든 스크린을 호출할 수 있습니다. 따라서 표시 자체에 부수 효과가 있으면 안 됩니다. 보통의 버튼 클릭이나 바 변경 시 부수 효과는 괜찮습니다.
스크린 언어 이미지맵의 핫스폿 캐시를 지원합니다. config.developer가 참이면 game/cache/에 각 핫스폿의 이미지 데이터를 담은 PNG를 씁니다. 캐시가 있으면 config.developer와 관계없이 원본 대신 불러옵니다. 보통 훨씬 작아 로딩을 빠르게 하고 이미지 캐시 부담을 줄여 성능을 높입니다. 스크린 언어 이미지맵에만 적용하며 config.imagemap_cache로 끌 수 있습니다.
따라서 renpy.cache_pin()의 필요가 대부분 사라질 것입니다. 오류는 아니지만 잘못된 이미지를 고정하면 불필요한 메모리를 씁니다.
스크린
데모에서 쓰며 새 게임에 기본 설치되는 스크린을 함께 배포합니다. template/game/screens.rpy를 프로젝트에 복사할 수 있습니다. 일부 스타일 변경 등 이전 배치 시스템과 완전히 호환되지 않으므로 게임에서 명시적으로 도입해야 합니다.
Choice와 NVL의 items 정의가 바뀌어 새 버전에 맞게 게임을 수정해야 합니다.
show_로 시작하는 캐릭터 인수를 Say 스크린에 전달합니다. show_side_image와 show_two_window 등을 사용할 수 있으며 기본 스크린도 지원합니다.
새 config.imagemap_auto_function으로 이미지맵과 이미지 버튼의 auto 해석을 제어합니다.
위의 이미지맵 캐시는 스크린에만 적용됩니다.
FilePageName()과 FileSlotName()으로 슬롯 이름을 쉽게 지정합니다.
그 밖의 개선
Ren'Py 6.12에는 다른 개선도 있습니다.
새 설명서 작성을 계속했으며 특히 디스플레이어블 문서를 재작성했습니다.
스크린샷 촬영 시
config.screenshot_callback을 호출합니다. 기본 구현은 저장 위치를 알립니다.opengl.txt를 대체하고 다른 하위 시스템도 기록하는 log.txt를 만듭니다.
스크린 언어에 누락된 여러 속성을 추가했습니다.
파일명을 대소문자 구분 없이 취급하므로 Linux 파일명 불일치 문제가 없어질 것입니다.
버그 수정
Launchpad 버그 680266 - 동적 디스플레이어블이 이를 사용하는 Transform보다 먼저 갱신되도록 보장합니다.
Launchpad 버그 683412 - 셰이더 컴파일 실패 시 충돌하지 않습니다.
시스템 음량이 음소거 없이 0이 되었을 때 충돌하던 버그를 수정했습니다.
OpenGL에서
Render.canvas()가 작동하지 않던 버그를 수정했습니다.
Ren'Py 6.11.2
새 기능
Aleema가 기여한 네 새 테마가 포함됩니다. 런처의 테마 선택(Choose Theme)으로 보고 바꿀 수 있습니다.
소프트웨어 갱신
jEdit를 대부분의 플러그인을 실행할 수 있는 지원 버전 4.3.2로 갱신했습니다.
동작 변경
기본 실제 창의 최대 높이를 화면보다 102픽셀 작게 했습니다. 화면보다 너무 커 조절하지 못하는 창 생성을 막을 것입니다.
버튼은 포커스가 있을 때만 자식에게 키 이벤트를 전달합니다. 자식으로 key 문을 넣어 포커스가 있을 때만 실행하게 할 수 있습니다.
이미지 순서 변경을 올바르게 처리하도록 MoveTransition을 재작성했습니다. 이전에는 순서가 정의되지 않았으므로 동작이 달라질 수 있습니다.
버그 수정
소리가 제대로 반복되지 않던 회귀 버그 Launchpad 버그 647686을 수정했습니다.
insensitive 이미지가 없을 때 비활성 핫스폿이 ground 대신 idle을 사용하던 Launchpad 버그 661983을 수정했습니다.
설정 여부와 관계없이 alpha=True처럼 렌더링되던 ImageDissolve의 Launchpad 버그 647324를 수정했습니다.
창 닫기 버튼 후 "No"를 선택하면 게임이 시작되던 문제를 수정했습니다.
delay가 1.0이 아니면 AnimatedValue가 제대로 작동하지 않던 문제를 수정했습니다. Scout에게 감사드립니다.
OpenGL 배율 조절 시 동영상이 잘못 표시되던 문제를 수정했습니다.
Ren'Py 6.11.1
새 기능
AlphaBlend()와 AlphaDissolve()를 추가했습니다. 두 디스플레이어블을 받아 세 번째의 알파 채널로 혼합합니다. 세 번째는 보통 애니메이션으로 시간에 따라 효과를 바꿀 수 있습니다.
새 모드 시스템으로 상호작용 종류 변경 시 콜백을 호출합니다. 예를 들어 전환 전에 자동으로 창을 숨길 수 있습니다.
스크린 언어 이미지맵은 전체 화면 대신 ground 이미지 크기만 차지합니다. 화면 아래 등 다른 위치에 배치하기 쉬워집니다.
이미지맵의 alpha가 기본 참이면 idle이나 hover의 불투명 부분 위에서만 포커스를 받습니다. 거짓이면 영역 안 어디서든 받습니다.
가능할 때 현재 포커스 좌표를 반환하는 renpy.focus_coordinates()를 추가했습니다.
새 renpy.notify()와 Notify()로 빠른 저장이나 스크린샷 완료 같은 짧은 상태 메시지를 쉽게 표시합니다.
새 HideInterface()로 스크린 언어 액션에서 인터페이스를 잠시 숨깁니다.
개발자 메뉴에 game 디렉터리의 모든 파일을 나열하는 명령을 추가했습니다.
웹 서버에서 데이터를 얻는 Python 표준 urllib와 urllib2를 함께 배포합니다.
최신 사전 배포판으로 쉽게 갱신하는 실험적 업데이터를 포함합니다. 런처 메인 화면에서 Shift+U로 갱신합니다.
수정 사항
MoveTransition()이 xoffset과 yoffset을 따릅니다.
스크린 언어 이미지맵의 여러 버그를 수정했습니다.
잘못된 텍스처 유닛 검사로 인한 #626303을 수정했습니다. tmrwiz에게 감사드립니다.
zoom, xzoom, yzoom이 0이어도 0으로 나누기 예외가 나지 않습니다.
시계 및 반시계 방향 공전이 작동합니다.
배율 조절 소프트웨어 렌더러와 GL 사이의 전환 시 배율 버그를 수정했습니다.
기본 포커스를 지정할 때 숨겨진 스크린을 고려하지 않습니다.
max_is_zero가 True인 FieldValue가 제대로 작동합니다. SleepKirby에게 감사드립니다.
Ren'Py 6.11.0
OpenGL 지원
이제 다음에 의존합니다.
Python 2.6
OpenGL
GL Extension Wrangler Library: http://glew.sourceforge.net/
argparse Python 모듈: http://code.google.com/p/argparse/
지원되는 컴퓨터에서는 OpenGL 하드웨어 가속을 활용합니다. 사용자에게 보이는 변경은 다음과 같습니다.
표준 창 제어로 크기를 바꾸거나 최대화할 수 있습니다. 창과 게임의 화면비가 다르면 검정 여백을 추가합니다.
전체 화면에서도 모니터 해상도를 바꾸지 않습니다. 다른 화면비의 모니터에서 왜곡되는 것을 방지합니다.
그래픽 드라이버에서 끄지 않았다면 수직 동기화를 사용해 화면 찢어짐을 없앱니다.
GPU 렌더링을 사용하므로 대부분의 상황에서 더 빠르게 그릴 것입니다.
소프트웨어 렌더링도 지원하며 그래픽 카드 설정이 잘못되었다고 감지하면 자동 전환합니다.
창 크기를 바꿔 OpenGL 모드인지 확인할 수 있습니다. 조절 가능하면 OpenGL, 아니면 소프트웨어입니다.
스크린과 스크린 언어
UI 일부를 새 스크린 언어로 선언적으로 지정하는 스크린 시스템을 도입했습니다. 게임 밖 메뉴와 게임 내 스크린을 사용자 지정하던 레이아웃, 오버레이 함수, 이미지맵 등의 방식을 대체합니다.
이전 게임 메뉴 사용자 지정용 레이아웃 시스템은 특히 이미지맵 레이아웃에 문제가 있었습니다. 스크린이 단일 목적이라 메인 메뉴에서 빠른 저장 불러오기 같은 기능도 많은 Python 코드 없이는 어려웠습니다.
새 시스템은 Action과 BarValue 형태로 기능 모음을 제공해 해결합니다. 필요한 기능을 골라 스크린에 추가할 수 있습니다.
트랜스폼 변경
트랜스폼에
xpos,ypos,xanchor,yanchor가 없고 자식에는 있으면 자식에서 가져옵니다.한 트랜스폼이 세로 이동, 다른 것이 가로 이동을 제어할 수 있습니다. 이전 동작과 호환되지 않으므로
config.transform_uses_child_position로 끌 수 있습니다.새 config.default_transform으로 더 구체적인 트랜스폼이 없는 이미지의 초기 속성을 정합니다. 기본값 center는 화면 아래 가운데에 표시합니다.
동작이 달라질 수 있습니다. 이미지를 표시한 뒤 트랜스폼으로 다시 표시하면 왼쪽 위 대신 아래 가운데로 초기화됩니다. reset으로 왼쪽 위로 복원할 수 있습니다.
Transform과 ui.transform의 인수에 스타일 접두사를 붙일 수 있습니다. ui.transform(idle_rotate=30, hover_rotate=90)이 작동합니다.
회전 후 여백을 제어하는 rotate_pad를 추가했습니다. 기본값이 아닌 False로 설정하면 (100, 50)을 90도 회전한 크기가 (50, 100)이 됩니다.
그 밖의 변경
문서를 재작성하고 있습니다. 이 변경 이력도 문서의 일부로 관리합니다.
한 매개변수로 여러 속성을 설정하는 복합 스타일 속성을 지원합니다. 새 속성은 다음과 같습니다.
pos - 두 값을 받아 xpos와 ypos를 설정합니다.
anchor - 두 값을 받아 xanchor와 yanchor를 설정합니다.
align - 두 값을 받아 xalign과 yalign, 따라서 xpos, ypos, xanchor, yanchor도 설정합니다.
area - (x, y, height, width)를 받아 사각형 안에 배치하도록 속성 설정을 시도합니다. xpos, ypos, xanchor, yanchor, xfill, yfill, xminimum, yminimum, xmaximum, ymaximum을 설정합니다.
ui.add가 트랜스폼 속성을 키워드로 받습니다. 하나라도 있으면 화면에 추가할 디스플레이어블을 감싸는 트랜스폼을 만듭니다.
새
LiveTile()은 큰 메모리 소모 없이 자식을 타일링합니다.config.quit_action은 창 모서리 닫기 버튼의 액션, config.game_menu_action은 게임 메뉴 진입 시 액션을 지정합니다.config.screenshot_crop은 스크린샷 키를 누를 때 저장할 영역을 제어합니다.renpy.music.register_channel()에 file_prefix와 file_suffix를 추가했습니다. 해당 채널의 파일명 앞뒤에 각각 붙입니다.새
renpy.list_files()는 game과 아카이브의 파일 리스트를 반환합니다. 직접 자동 이미지 로딩을 작성하는 등 여러 용도로 사용할 수 있습니다.Character와 Text의 상호작용을 재작성해 텍스트를 한 번만 토큰화합니다. ADVCharacter와 NVLCharacter의 일부 메서드가 바뀌었으므로 상속한 코드를 확인해야 합니다.
배포 코드를 launcher/distribute.py로 옮겼습니다. 명령줄에서 실행해 셸 스크립트 등의 자동화 과정으로 배포판을 빌드할 수 있습니다.
화면에 투명 영역이 있고
config.developer가 참이면 체크무늬로 채웁니다.새
input,side,grid,fixed스타일을 만들었으며 대응 디스플레이어블의 기본값으로 사용합니다.초기화 시 없는 스타일에 접근하면 첫 밑줄에서 나눕니다. 뒤 부분이 기존 스타일이면 오류 대신 새 스타일을 만듭니다.
Python ast 모듈을 사용하도록 컴파일러를 재작성했습니다. 성능과 문법 오류 처리가 개선될 것입니다.
따라서 Python 2.6을 함께 배포하고 요구합니다.
다음 번호의 버그를 수정했습니다.
520276 - cps가 중단되면 ctc가 나타나지 않던 문제.
526297 - 축소 시 im.Rotozoom()이 충돌하던 문제. 보고와 수정에 기여한 Spiky Caterpillar에게 감사드립니다.
543785 - 프로젝트 디렉터리 선택 시 런처 버그.
583112 - 동영상 디스플레이어블 표시 중 롤백하면 프레임이 남던 문제.
595532 - 튜토리얼의 잘못된 텍스트. Viliam Búr에게 감사드립니다.
다른 버그도 수정했습니다.
Displayable 내부 show와 hide의 이름을 바꿔 사용자 정의 디스플레이어블에서 다시 사용할 수 있습니다.
Fade가 사용하는 MultipleTransition을 재작성해 발생하던 문제들을 수정했습니다.
다음 상호작용 전 nvl clear 여부를 판단할 때 Character의 condition을 고려합니다.