호환성에 영향을 주는 변경 사항
스크립트나 개발 환경을 수정해야 할 수 있는 변경 사항의 목록입니다. 그 밖의 변경은 기존 스크립트에 영향을 주지 않도록 하는 것을 목표로 합니다.
config.script_version을 설정하면 여기의 변경 사항 상당수를 되돌릴 수 있지만 최신 기능을 사용할 수 없게 됩니다.
GUI의 비호환 변경은 GUI를 다시 생성할 때만 적용되므로 호환되지 않는 GUI 변경 사항에서 설명합니다.
8.5.4
Ren'Py는 이제 Live2D의 베지어 곡선에 Live2D SDK와 동일한 Cardano 해석 방식을 사용합니다. 일부 모션의 동작이 달라질 수 있습니다. 이전 동작으로 되돌리려면 게임에 다음을 추가하세요.
define config.live2d_old_beziers = True
8.5.3
Live2D 이제 Live2D 5.3을 지원하며 필수로 요구합니다. Ren'Py 5.3에서 계속 사용하려면 Live2D를 업데이트해야 할 수 있습니다.
8.5.0
maximum에 의한 크기 증가 xmaximum과 ymaximum 속성으로 컨테이너가 제공하는 크기보다 큰 크기를 요청할 수 있습니다. 이렇게 요청하면 이전 Ren'Py 버전보다 디스플레이어블이 커질 수 있습니다. 이전 동작으로 되돌리려면 게임에 다음을 추가하세요.
define config.maximum_embiggens = False
언어 감지 언어 이름("en")과 지역 이름("us")이 모두 유효한 언어이면 이제 언어 이름을 우선합니다. 둘을 조합한 이름("en_us")은 이 둘보다 우선합니다.
pygame_sdl2 pygame_sdl2 모듈은 더 이상 Ren'Py에 포함되지 않습니다. 대신 호환되는 renpy.pygame 패키지가 포함됩니다. 호환성을 위해 이 패키지에 pygame과 pygame_sdl2 별칭을 지정했으므로 기존 import는 작동합니다.
이전에는 pygame_sdl2를 스토어 네임스페이스로 가져왔지만 이제 제거되었습니다. 필요하면 다음으로 다시 추가할 수 있습니다.
init python:
import renpy.pygame as pygame_sdl2
이미지 디렉터리 config.images_directory 변수는 Ren'Py가 이미지를 검색할 디렉터리 목록인 config.image_directories로 대체되었습니다. 기존 변수를 바꾸는 스크립트는 이전해야 합니다. 예를 들어 다음을:
define config.images_directory = "myimages"
다음과 같이 바꾸세요.
define config.image_directories = [ "myimages" ]
zoom과 Z축 Ren'Py 8.4에서는 zoom 트랜스폼 속성이 X축과 Y축뿐 아니라 Z축에도 적용됩니다. Z축 확대를 예상하지 않은 이전 게임의 동작이 달라질 수 있습니다. 되돌리려면 게임에 다음을 추가하세요.
define config.zoom_zaxis = False
8.4.1
일정 출력 오디오 패닝 8.1.0에서 도입한 일정 출력 오디오 패닝 변경을 되돌릴 수 있습니다. 게임에 다음을 추가하세요.
define config.adjust_audio_amplitude = 1.0 / 0.7071067811865476
8.4.0
자동 오버샘플링 Ren'Py 화면을 충분히 확대하면 더 높은 해상도의 이미지 파일을 찾아 대신 로드할 수 있습니다. 자세한 내용은 문서를 참조하세요. 다음으로 비활성화할 수 있습니다.
define config.automatic_oversampling = None
이전 게임에도 유용하고 문제를 일으킬 가능성이 작으므로 이전 게임을 실행할 때도 자동 오버샘플링은 활성화됩니다.
Show expression. show expression 문이 변경되어 다음은:
show expression "bg washington"
다음과 정확히 같은 동작을 합니다.
show bg washington
이전에는 표현식 자체를 태그로 사용했습니다. 표현식이 문자열이 아니면 show expression 문에 고유 태그를 생성합니다. 다음으로 되돌릴 수 있습니다.
define config.old_show_expression = True
LayeredImage "variant"와 "prefix" 속성에 따옴표 없는 이름을 전달하면 이제 초기화 시 평가할 변수가 아니라 따옴표 없는 문자열로 읽습니다. 문제가 발생할 가능성은 작지만, 발생한다면 다음을 사용하세요.
variant f"{old_expression}"
또한 그룹 이름으로 "multiple"을 사용하는 것은 더 이상 지원하지 않습니다.
제작자 정의 문과 config.label_callbacks 제작자 정의 문은 이제 레이블이 정의되면 config.label_callbacks를 호출합니다. 이를 호출하지 않던 이전 동작으로 되돌리려면 다음을 추가하세요.
define config.cds_label_callbacks = False
메시 패딩 왼쪽이나 위쪽 패딩이 있을 때 mesh_pad의 동작이 변경되었습니다. 이전에는 패딩만큼 자식을 이동했지만, 이제는 자식을 같은 위치에 두고 왼쪽과 위쪽에 패딩을 추가합니다.
작은 GUI의 뷰포트 크기 엄밀히 말해 비호환 변경은 아니지만 기본 GUI를 사용하는 게임에 다음을 추가하는 것이 좋습니다.
style game_menu_viewport:
variant "small"
xsize 1305
휴대전화와 텔레비전에서 메뉴에 스크롤바가 나타나도록 합니다. 1305는 너비 1920 픽셀 게임에 적합합니다. 너비 1280 픽셀이면 870, 3840 픽셀이면 2010을 사용하세요. (다른 해상도는 게임 너비의 0.68배를 내림한 정수를 사용하세요.)
셰이더 순서 이전에는 우선순위가 같은 셰이더 부분의 적용 순서가 정해져 있지 않았습니다. 이제는 셰이더 이름순으로 정렬하여 일관된 순서를 보장하지만, 특정 시스템의 기존 순서와 다를 수 있습니다.
Python 모듈 경로 game/ 디렉터리에서 Python 모듈을 로드하면 __file__에 모듈의 상대 경로를 설정하며, 이 경로는 renpy.open_file()에 전달할 수 있습니다. 이전에는 경우에 따라 __file__에 절대 경로나 상대 경로가 설정되었습니다.
8.3.4 / 7.8.4
크기가 다른 디스플레이어블 간 디졸브, 두 번째. 크기가 다른 디스플레이어블 사이에 ImageDissolve나 AlphaDissolve를 적용하면 결과는 축마다 가장 큰 디스플레이어블의 크기를 사용합니다. 8.1.2 이전 동작(각 축의 가장 작은 크기)으로 되돌리려면 다음을 추가하세요.
define config.dissolve_shrinks = True
ATL의 update 이벤트 제거. 이전 버전은 번역 변경처럼 스크린이 크게 바뀌면 스크린 안의 ATL에 "update" 이벤트를 전달할 수 있었습니다. 전달이 일관되지 않았고 사용되었을 가능성도 작아 제거했습니다.
8.3.0 / 7.8.0
Box_reverse와 Box_align box_reverse 속성은 이제 상자 정렬을 조정하지 않습니다. 정렬하려면 box_align을 1.0으로 설정하거나 다음을 사용하여:
define config.box_reverse_align = true
8.2의 동작을 적용하세요.
유지된 말풍선은 이제 다른 say, menu, call screen 문을 실행할 때 자동으로 제거됩니다. bubble.clear_retain_statements 변수로 제어합니다.
비활성화하려면 다음을 추가하세요.
define bubble.clear_retain_statements = [ ]
ATL이 매개변수에서 자식을 설정하는 방식 ATL 트랜스폼이 받는 매개변수와 전달된 인수에 따라 자식을 설정하는 시점과 방식이 조금 바뀌었습니다. 특히 문서화된 기능만 사용했다면 기존 게임에 영향을 줄 가능성은 작습니다.
old_widget 매개변수가 위치 인수의 값을 받을 때는 더 이상 자식이 설정되지 않습니다. 이는 문서화되지 않은 ATL 화면 전환의 잘못된 사용이었습니다.
transform t(old_widget): ... t("eileen") # will no longer have a child set to the "eileen" image
child 매개변수가 있는 트랜스폼에 child 키워드 인수를 전달하면 이제 자식이 설정됩니다. child 매개변수가 없는 트랜스폼이나 child가 위치 인수로 값을 받는 경우와 같습니다. 이전 문서에서는 이 부분이 모호했습니다.
transform t1(child): ... transform t2(delay=1.0): ... t1(child="eileen happy") # will now have a child set to the "eileen happy" image, but previously didn't. t2(child="eileen happy") # the child is set, as before. t1("eileen happy") # the child is set, as before.
캐릭터 콜백은 캐릭터 콜백 문서에 설명한 여러 추가 인수를 받도록 바뀌었습니다. 알 수 없는 키워드 인수를 무시하도록 작성했어야 하므로 보통 수정이 필요하지 않지만, 그렇지 않다면 콜백을 업데이트해야 할 수 있습니다.
window 문 window show와 window hide는 더 이상 window auto 플래그를 끄지 않습니다. 끄려면 새 window auto False 문을 사용하거나 게임에 다음을 추가하세요.
define config.window_functions_set_auto = True
window hide 뒤에 window show가 나오면 다음 say 문을 미리 확인하여 표시할 창 종류를 정합니다. 이전에는 마지막 say 문을 참조했습니다. 되돌리려면 다음을 추가하세요.
define config.window_next = False
문자열의 이름 변형 __로 시작하고 그 뒤에 __가 다시 나오지 않는 이름은 이제 문자열 안에서도 스크립트의 다른 부분처럼 변형됩니다. 즉 다음은:
$ __foo = 1 "Add one and __foo and you get [1 + __foo]."
다음과 같이 다시 작성됩니다.
$ _m1_script__foo = 1 "Add one and _m1_script__foo and you get [1 + _m1_script__foo]."
비활성화하려면 게임 디렉터리의 01nomunge.rpy 파일에 다음을 작성하세요.
define config.munge_in_strings = False
디스플레이어블 경계 밖 자르기 디스플레이어블보다 큰 상자로 자를 때의 동작이 바뀌었습니다. 이 릴리스부터 Crop(), crop, corner1, corner2에 전달한 값은 디스플레이어블의 원래 경계에 제한되지 않습니다.
Ren'Py 8.2.x와 7.7.x에서는 오른쪽/아래쪽은 디스플레이어블 경계로 제한하고 왼쪽/위쪽은 제한하지 않았습니다. 다음을 추가하면 복원할 수 있습니다.
define config.limit_transform_crop = True
8.2와 7.7 이전에는 값이 실수이면 오른쪽/아래쪽을 디스플레이어블 경계로 제한하고 왼쪽/위쪽은 제한하지 않았습니다. 다음을 추가하면 복원할 수 있습니다.
define config.limit_transform_crop = "only_float"
8.2.2 / 7.7.2
채우기와 Frame 8.2.1 이전의 일부 상황에서 xfill과 yfill 스타일 속성이 Frame, Window, Button을 작게 만들 수 있었습니다. 이제는 크기 증가만 허용합니다. 되돌리려면 다음을 추가하세요.
define config.fill_shrinks_frame = True
8.2.1 / 7.7.1
*세로쓰기 harfbuzz 셰이퍼의 세로쓰기를 개선하여 텍스트가 올바른 위치에 렌더링됩니다. 위치가 달라질 수 있지만 이전 버전이 크게 잘못되어 있었으므로 호환성 define은 제공하지 않습니다.
8.2.0 / 7.7.0
문자열화된 어노테이션과 철회된 PEP 563의 미래 Ren'Py 8.0.2부터 Ren'Py 8의 Python 코드는 항상 from __future__ import annotations 지시문을 적용하여 컴파일되었으며 제작자가 해제할 수 없었습니다.
향후 Python에서 이 변경을 기본값으로 적용하지 않을 가능성이 매우 커져 해당 변경을 되돌렸습니다.
문자열화된 어노테이션을 위해 annotations future를 계속 사용하려면 파일 맨 위에 다음 줄을 추가하세요.
rpy python annotations
텍스트 변경 Ren'Py는 harfbuzz로 글자 형태를 결정하므로 이전과 다른 글리프가 생성되거나 텍스트 간격이 달라질 수 있습니다. harfbuzz 렌더링으로 세로쓰기 위치도 달라졌습니다.
되돌리려면 다음을 추가하세요.
style default:
shaper "freetype"
필요할 때 Emoji 글꼴을 자동으로 사용합니다. 비활성화하려면 다음을 추가하세요.
style default:
emoji_font None
보간 변경 이제 문자열 보간을 Python 표현식으로 처리합니다. 항목 접근자를 사용하는 경우를 제외하면 필드 해석 동작은 대체로 같습니다. 예를 들면 다음과 같습니다.
# Previously
e "[player[money]]" #=> player['money']
# But now
e "[player[money]]" #=> player[money]
되돌리려면 다음을 추가하세요.
define config.interpolate_exprs = False
새 동작으로 게임을 이전하는 동안 다른 개발자가 작업할 수 있도록, 먼저 새 동작을 시도하고 실패하면 이전 동작을 사용하는 대체 모드를 제공합니다. 활성화하려면 다음을 추가하세요.
define config.interpolate_exprs = "fallback"
극좌표 변경 angle과 anchorangle 속성의 각도는 이제 0 이상 360 미만으로 제한됩니다. 이전에는 범위 밖 값의 동작이 정의되지 않았지만, 이제는 범위 안으로 제한합니다. 360도 변화는 더 이상 움직임을 일으키지 않고 0도 변화로 처리합니다.
ATL로 angle과 anchorangle을 애니메이션할 때 방향을 지정하지 않으면 0을 지나더라도 가장 짧은 호를 사용합니다.
실제 게임의 시각적 동작에 영향을 줄 가능성이 작으므로 이 변경들의 호환성 define은 없습니다.
빈 ATL 블록 금지 이전에는 빈 ATL 블록을 허용했지만 이제는 블록이 필요하다는 오류를 보고합니다. 다음을:
show eileen happy:
"..."
다음과 같이 바꾸어야 합니다.
show eileen happy
"..."
빈 ATL 블록이 있는 드문 경우에 해당합니다.
Box Reverse box_reverse 스타일 속성의 동작이 두 가지 면에서 바뀌었습니다.
이전에는
box_reverse가 활성화되면 역순으로 공간을 제공했지만, 이제는 스크린에 디스플레이어블을 나열한 순서대로 제공합니다. 일부 디스플레이어블의 크기가 달라질 수 있습니다.box_wrap이 설정된 hbox는 아래에서 위가 아니라 위에서 아래로 줄바꿈합니다.box_wrap이 설정된 vbox는 오른쪽에서 왼쪽이 아니라 왼쪽에서 오른쪽으로 줄바꿈합니다.
오른쪽에서 왼쪽으로 쓰는 언어의 인터페이스 배치에 box_reverse를 더 유용하게 만들기 위한 변경입니다. 되돌리려면 다음을 추가하세요.
define config.simple_box_reverse = True
build.itch_channels 문서에는 항상 딕셔너리로 설명되어 있었지만 실수로 튜플 목록으로 구현되어 있었습니다. 이제 실제 딕셔너리입니다. 목록 연산을 사용했다면 코드를 변경해야 합니다.
# formerly
$ build.itch_channels.append(("pattern", "channel"))
$ build.itch_channels.extend([("pattern", "channel")])
define build.itch_channels += [("pattern", "channel")]
# now
$ build.itch_channels["pattern"] = "channel"
$ build.itch_channels.update({"pattern": "channel"})
define build.itch_channels["pattern"] = "channel"
define build.itch_channels |= {"pattern": "channel"}
새 position 자료형 위치 자료형 목록에 새 position() 자료형을 추가했습니다. 따라서 이전에 다른 자료형을 반환하던 경우나 게임에서 새 자료형을 전혀 사용하지 않더라도 renpy.get_placement()가 언제든 이 자료형을 반환할 수 있습니다.
이를 막으려면 다음을 추가하세요.
define config.mixed_position = False
DragGroup 추가 동작 변경 DragGroup에 디스플레이어블을 추가하면 이제 기존 요소 아래가 아니라 위에 놓입니다.
이 동작을 변경하려면 다음을 추가하세요.
define config.drag_group_add_top = False
translate 문과 config.statement_callbacks translate 문은 Ren'Py가 자동 생성하는 내부 문을 포함하여 더 이상 config.statement_callbacks를 호출하지 않습니다.
화면 전환의 자식 배치 정보 사용 화면 전환의 자식이 배치 정보를 제공하면 전환 자체에서 사용합니다. ATL 화면 전환 안에서 사용하고 이전 자식과 새 자식이 같은 배치 정보를 제공할 때만 의미가 있습니다.
비활성화하려면 다음을 추가하세요.
define config.transitions_use_child_placement = False
컨테이너의 트랜스폼 이벤트 전달 fixed, hbox, vbox, side, grid, viewport, vpgrid를 포함한 컨테이너는 이제 hover, idle, insensitive, selected_hover, selected_idle 트랜스폼 이벤트를 자식에게 전달합니다. 따라서 버튼의 자식도 자체 트랜스폼으로 해당 이벤트에 반응할 수 있습니다.
비활성화하려면 다음을 추가하세요.
define config.containers_pass_transform_events = set()
say 스크린의 replace 이벤트. say 스크린은 이제 두 번째 이후의 일시 정지에서 "show" 대신 "replace" 트랜스폼 이벤트를 받습니다.
비활성화하려면 다음을 추가하세요.
define config.say_replace_event = False
스크린을 다시 표시해도 hide 이벤트가 취소되지 않음 이전에는 스크린을 숨겼다가 다시 표시하면 같은 스크린의 hide 또는 replace 트랜스폼 이벤트가 취소되고 숨기거나 교체 중인 스크린이 즉시 사라졌습니다. 이제 이벤트가 끝까지 실행됩니다.
비활성화하려면 다음을 추가하세요.
define config.screens_never_cancel_hide = False
8.1.2 / 7.6.2
크기가 다른 디스플레이어블 간 디졸브 크기가 다른 두 디스플레이어블 사이에 디졸브를 적용하면 결과는 축마다 가장 큰 크기를 사용합니다. 이전 동작인 각 축의 최소 크기로 되돌리려면 다음을 추가하세요.
define config.dissolve_shrinks = True
8.1.1 / 7.6.1
Android 키 이전 Google Play에 번들로 올린 게임의 APK가 키 불일치로 거부된다는 보고를 받았습니다. 이전 Ren'Py 릴리스가 번들에 APK 키를 사용한 것이 원인입니다. Play Console에는 다음과 같은 오류가 나타났습니다.
You uploaded an APK that is not signed with the upload certificate. You must use
the same certificate. The upload certificate has fingerprint:
SHA1: ...
and the certificate used to sign the APK you uploaded has fingerprint:
SHA1: ...
완전히 잘못된 키를 사용하는 등 다른 원인도 있을 수 있지만, 다음 방법으로 해결될 수 있습니다.
프로젝트 기본 디렉터리에서
bundle.keystore의 이름을bundle.keystore.bak로 바꿉니다.프로젝트 기본 디렉터리에서
android.keystore를bundle.keystore로 복사합니다.
번들을 다시 빌드하여 업로드합니다.
8.1.0 / 7.6.0
충돌하는 속성 게임에 포함되었을 수 있는 이전 기본 input 스크린에는 충돌하는 스타일 속성이 있습니다. 다음과 같이 수정하세요.
+define config.check_conflicting_properties = True
screen input(prompt):
style_prefix "input"
window:
vbox:
- xalign gui.dialogue_text_xalign
+ xanchor gui.dialogue_text_xalign
xpos gui.dialogue_xpos
xsize gui.dialogue_width
ypos gui.dialogue_ypos
text prompt style "input_prompt"
input id "input"
말풍선 기존 게임에 말풍선을 지원하려면 파일과 스크립트를 추가해야 합니다. 필요한 변경은 말풍선 문서에 있습니다.
Live2D 이제 Live2D Cubism 4 SDK for Native R6_2 이상이 필요합니다. 구버전에서는 실행을 거부할 수 있습니다.
텍스처 메모리 텍스처 메모리 사용량을 더 정확하게 계산합니다. 일반적으로 config.image_cache_size_mb를 33% 높여도 같은 양의 메모리를 사용합니다.
오디오 페이드아웃 오디오를 멈추거나 play로 바꿀 때 튀는 소리를 방지하기 위해 기본적으로 0.016초의 페이드아웃을 적용합니다. config.fadeout_audio 변수로 제어합니다. 비활성화하려면 다음을 사용하세요.
define config.fadeout_audio = 0.0
페이드가 로그 방식으로 바뀌어 사람의 소리 지각 방식에 맞게 더 부드럽게 들립니다. 이전의 선형 페이드로 되돌리려면 다음을 사용하세요.
define config.linear_fades = True
Translate None 문자열, 스타일 또는 python을 번역하지 않는 명시적 translate None 문을 만나면 이제 오류가 발생합니다. 실제로는 드문 경우입니다. 다음을:
translate None start_abcd1234:
e "테스트입니다"
다음으로 바꾸는 것이 좋습니다.
e "테스트입니다" id start_abcd1234
다음으로 이 변경을 되돌릴 수도 있습니다.
define config.check_translate_none = False
키맵 키맵이 크게 바뀌었습니다. 게임에서 기본 키맵을 수정했다면(대개 권장하지 않습니다) 새 keysym을 반영하도록 업데이트해야 합니다.
파일 검색 game/images에서 모든 파일 대신 이미지 파일만 검색합니다. 모든 파일을 검색하려면 다음을 사용하세요.
define config.search_prefixes += [ "images/" ]
검색 경로는 파일 형식이나 확장자보다 용도를 기준으로 합니다. 따라서 renpy.loadable("dlc.jpg")는 game/images/dlc.jpg를 검색하지 않습니다. 이 파일을 찾으려면 renpy.loadable("images/dlc.jpg")를 사용하세요. game/와 game/images 양쪽에서 찾으려면 renpy.loadable("dlc.jpg", "images")를 사용하세요.
Android android.keystore와 bundle.keystore를 rapt 디렉터리 대신 프로젝트 기본 디렉터리에서 찾도록 바뀌었습니다. 프로젝트마다 다른 키로 빌드할 수 있고, 여러 Android 버전에서 같은 키를 사용하도록 하는 데도 도움이 됩니다.
직접 만든 키를 사용하려면 게임을 구성한 뒤 android.json의 update_keystores를 false로 설정하고, rapt/project의 local.properties와 bundle.properties가 원하는 키스토어 파일을 가리키도록 수정하세요.
Android 설정 파일 이름이 .android.json에서 android.json으로 바뀌었습니다. 이전 파일이 있으면 새 파일을 자동 생성합니다.
대사 기록 이제 대사가 표시되는 문을 실행하는 동안에도 기록 목록과 기록 스크린에 대사가 들어갑니다. 이전에는 문이 끝날 때만 들어갔습니다. 문 실행 중에는 kind가 "current"인 대사로 표시합니다.
드물게 이전 동작에 의존하는 게임이라면 다음으로 비활성화할 수 있습니다.
define config.history_current_dialogue = False
Steam appid config.steam_appid가 설정되지 않으면 게임 디렉터리의 기존 steam_appid.txt를 삭제합니다. 잘못된 앱 ID 사용을 방지하기 위한 조치입니다.
고정 레이어 이 릴리스는 기본 레이어 이외의 레이어에 놓인 태그를 자동으로 관리하는 고정 레이어 개념을 도입합니다. 같은 태그 여러 개를 다른 레이어에 동시에 표시해야 하는 드문 게임에서는 원치 않는 동작일 수 있습니다.
고정 레이어를 완전히 끄려면 다음을 추가하세요.
define config.sticky_layers = [ ]
특정 레이어만 고정하지 않으려면 정의에 sticky=False를 추가하세요.
init python:
renpy.add_layer("ptfe", sticky=False)
겹낫표 루비 텍스트 루비 텍스트를 쉽게 작성하는 겹낫표 루비 텍스트를 도입했습니다. 게임에 리터럴 【가 있다면 "【【"처럼 두 번 써야 올바르게 이스케이프됩니다. (엄밀히는 뒤에 전각 세로줄이 있는 경우에만 필요하지만 항상 작동합니다.)
겹낫표 루비 텍스트를 끄려면 다음을 추가하세요.
define config.lenticular_bracket_ruby = False
상수 스토어. 상수 스토어를 도입하고 일부 내장 스토어를 상수로 만들었습니다. 상수 스토어는 초기화 단계 밖에서 바꾸면 안 됩니다. 다음 스토어가 상수입니다.
_errorhandling _gamepad _renpysteam _warper audio achievement build director iap layeredimage updater
초기화 밖에서 이 스토어들의 변수를 바꾸는 게임이라면 다음처럼 스토어를 비상수로 설정할 수 있습니다.
define audio._constant = False
믹서 볼륨은 이제 0.0이 -40 dB(출력), 1.0이 0 dB(출력)인 새 형식으로 지정해야 합니다. 샘플에 volume ** 2를 곱하던 이전 형식을 쓰려면 다음을 사용하세요.
define config.quadratic_volumes = True
또는 config.default_music_volume, config.default_sfx_volume, config.default_voice_volume에 새 기본 볼륨을 정할 수 있습니다. 0.0이나 1.0인 값은 그대로 두어도 됩니다.
at transform과 전역 변수 전역 변수를 사용하는 at transform 블록은 변수 변경 시 다시 평가하지 않습니다. 스크린 밖 ATL의 동작과 같습니다.
전역 변수를 지역 변수에 저장하는 방식으로 수정하는 것이 좋습니다. 다음을:
screen test():
test "테스트":
at transform:
xpos global_xpos
다음으로 바꾸세요.
screen test():
$ local_xpos = global_xpos
test "테스트":
at transform:
xpos local_xpos
다음으로 이 변경을 되돌릴 수 있습니다.
define config.at_transform_compare_full_context = True
8.0.2 / 7.5.2
모달 스크린은 이제 pause 문과 renpy.pause`() 함수의 시간 만료를 막습니다. 의도했던 동작이지만 일부 상황에서 작동하지 않았습니다. 다음으로 되돌릴 수 있습니다.
define config.modal_blocks_pause = False
기본 게임은 이제 기록에서 루비/후리가나 텍스트 태그를 제거하지 않습니다. screens.rpy에서 gui.history_allow_tags를 설정하는 줄을 다음으로 바꾸어야 합니다.
define gui.history_allow_tags = { "alt", "noalt", "rt", "rb", "art" }
게임에서 루비/후리가나 태그를 사용할 때만 필요한 변경입니다.
8.0.0 / 7.5.0
“스토어용 Windows, Mac 및 Linux(Windows, Mac, and Linux for Markets)” 배포판은 이제 zip 안의 내용 앞에 디렉터리 이름과 버전을 붙이지 않습니다. 이전 동작을 유지하려면 다음을 추가하세요.
init python:
build.package("market", "zip", "windows linux mac renpy all", "마켓 배포용 Windows, Mac, Linux")
noalt 텍스트 태그가 기록에서도 작동하게 하려면 screens.rpy의 gui.history_allow_tags에 "noalt"가 포함되도록 수정해야 합니다. 기본값은 다음과 같습니다.
define gui.history_allow_tags = { "alt", "noalt" }
(7.4에서 필요했던 변경이지만 이제야 문서화했습니다.)
7.4 계열 중 Ren'Py의 동작이 변경되어 불러오기를 거슬러 롤백할 때 after_load 레이블과 config.after_load_callbacks에서 수행한 변경을 올바르게 되돌립니다. (이전 동작은 정의되지 않아 일부 변경만 되돌리면서 게임 상태가 일관되지 않을 수 있었습니다.) 불러오기 후 데이터를 이전해야 하는 게임은 이제 renpy.block_rollback()를 호출하여 그 변경의 롤백을 막는 것이 좋습니다.
config.narrator_menu의 기본값이 True로 바뀌었습니다. 기본 screens.rpy에서는 이미 한동안 true였습니다. 드물게 게임에서 false였다면 다음으로 이전 동작을 복원하세요.
define config.narrator_menu = False
메인 메뉴가 끝나면 이제 sound와 voice 채널도 멈춥니다. movie 채널만 멈추던 이전 동작으로 되돌리려면 다음을 추가하세요.
define config.main_menu_stop_channels = [ "movie" ]
call screen으로 호출한 스크린은 기본적으로 롤포워드를 지원하지 않습니다. 발생 가능한 문제는 변경 이력을 참조하세요. roll_forward 속성으로 스크린별로 활성화하거나 다음으로 모든 스크린에 활성화할 수 있습니다.
define config.call_screen_roll_forward = True
key와 timer 문은 이제 vbox나 hbox 안에서 공간을 차지하지 않으며, showif 문도 자식이 숨겨지면 공간을 차지하지 않습니다. 되돌리려면 다음을 사용하세요.
define config.box_skip = False
드래그 디스플레이어블의 focus_mask 기본값이 None으로 바뀌었습니다. 성능은 향상되지만 투명한 픽셀에서도 드래그할 수 있습니다. 되돌리려면 개별 Drag의 focus_mask를 True로 설정하거나 다음으로 전역 설정하세요.
style drag:
focus_mask True
두 방법 모두 성능을 저하시킵니다.
outline_scaling의 기본값이 "linear"로 바뀌었습니다. 창의 크기 배율을 외곽선 크기에 적용한 뒤 정수로 반올림합니다. 비슷한 크기의 외곽선이 여러 개 있으면 일부가 사라질 수 있습니다. 개별 텍스트의 outline_scaling을 "step"으로 설정하거나 다음으로 전역 복원할 수 있습니다.
style default:
outline_scaling "step"
crop_relative 트랜스폼 속성의 기본값이 False에서 True로 바뀌었습니다. 절대 픽셀 수로 자르려면 정수나 absolute 숫자를 사용해야 합니다. 실수를 절대 픽셀 수로 변환하던 이전 기본 동작으로 되돌리려면 다음을 사용하세요.
define config.crop_relative_default = False
다만 이 페이지에만 설명된 대부분의 설정처럼 일부 새 기능과 충돌하여 함께 사용할 수 없습니다. 이 설정은 crop에 적용되며 이제 corner1과 corner2에도 적용됩니다.
lib/ 안의 플랫폼별 디렉터리 이름이 바뀌었습니다. lib/windows-x86_64는 이제 lib/py2-windows-x86_64입니다. Python 3 기반 Ren'Py 8 개발을 지원하기 위한 변경입니다. 이 디렉터리는 문서화된 인터페이스가 아니어서 버전마다 바뀔 수 있지만, sys.executable은 설정되도록 보장합니다.
Vpgrid에는 이제 정원보다 많은 자식을 넣을 수 없습니다. 적게 넣으려면 allow_underfull을 전달하거나 config.allow_underfull_grids를 True로 설정해야 합니다.
레이어 이미지의 자식 배치와 가변 크기 자식의 크기 결정 방식이 바뀌었습니다. 이제 표시 컨텍스트의 사용 가능 영역 대신 화면 전체 크기를 사용할 수 있다고 가정합니다. 다만 xsize, ysize, xysize로 명시적 크기를 지정하면 그 값을 사용합니다. 컨텍스트마다 다르게 표시될 수 있던 이전 동작은 다음으로 복원합니다.
define config.layeredimage_offer_screen = False
개별 layeredimage에 offer_screen 속성을 전달하여 전환할 수도 있습니다.
ATL의 function 문은 이제 두 번 이상 실행되는 경우에만 따라잡기 처리를 막습니다. function에서 ATL이 멈추던 이전 동작으로 되돌리려면 다음을 사용하세요.
define config.atl_function_always_blocks = True
7.4.11
스크린을 표시하거나 숨길 때처럼 기본 포커스 변경이 발생해도 이제 버튼의 unhovered 속성을 실행합니다. 되돌리려면 다음을 사용하세요.
define config.always_unfocus = False
7.4.9
Transform의 xsize나 ysize에 전달한 실수를 이제 사용 가능 영역에 대한 상대 크기로 해석합니다. 되돌리려면 다음을 사용하세요.
define config.relative_transform_size = False
자동 읽기의 레이어, 스크린, 스크린 안 디스플레이어블 읽기 순서가 바뀌어 플레이어에게 가장 가까운 것부터 읽습니다. 이전 순서로 되돌리려면 다음을 사용하세요.
define config.tts_front_to_back = False
7.4.7
xminimum과 xmaximum이 모두 실수이면 최소값을 사용 가능 영역의 비율로 해석합니다. 따라서 xsize에 실수를 지정했을 때 예상대로 작동합니다. 일부 디스플레이어블의 크기가 달라질 수 있습니다. 되돌리려면 다음을 사용하세요.
define config.adjust_minimums = False
ATL 디스플레이어블의 애니메이션은 이제 스크린 표시 시점이 아니라 해당 디스플레이어블이 처음 나타날 때 시작됩니다. 되돌리려면 다음을 사용하세요.
define config.atl_start_on_show = False
입력 커서는 이제 기본적으로 깜박입니다. 변경하려면 다음을 사용하세요.
define config.input_caret_blink = False
7.4.6
7.4.5의 레이어 at 목록 관련 변경을 되돌렸습니다. 새 camera 문은 기본적으로 새 의미를 사용하고 show layer는 이전대로 둡니다.
7.4.5
이 버전으로 만든 게임은 기본적으로 모델 기반 렌더러를 사용합니다. 비활성화하려면 다음을 사용하세요.
define config.gl2 = False
7.4.6에서 되돌림 scene 문은 더 이상 레이어 at 목록을 비우지 않습니다. 비우려면 다음을 사용하세요.
show layer master
여기서 "master"는 레이어 이름입니다. 또는 다음으로 이전 동작을 복원할 수 있습니다.
define config.scene_clears_layer_at_list = True
7.4.3
이제 클릭하여 renpy.transition()으로 시작한 화면 전환을 끝낼 수 있습니다. say나 call screen 문의 with 절처럼 이를 사용하는 곳에도 적용됩니다. 막으려면 다음을 사용하세요.
define config.dismiss_blocking_transitions = False
7.4.1
시간을 지정한 pause는 이제 with Pause(...) 대신 renpy.pause()를 사용합니다. 연속된 여러 일시 정지를 건너뛰려면 각각 클릭해야 합니다. 이전 동작은 다음으로 복원합니다.
define config.pause_with_transition = True
7.4
모바일 플랫폼은 이제 소프트웨어 대신 하드웨어 동영상 재생을 사용합니다. 이전 동작은 다음으로 복원합니다.
define config.hw_video = True
이제 이미지 태그 외에 속성이 하나 이상 있어야 사이드 이미지를 표시합니다. 비활성화하려면 다음을 사용하세요.
define config.side_image_requires_attributes = False
초기화 밖에서 config.mouse 같은 config 변수를 설정하는 것은 원래 지원하지 않았으며, 7.4에서는 작동하지 않습니다. 사용자 지정 마우스 커서에는 default_mouse 변수를 대신 사용하세요.
7.3.3
config.start_callbacks에 등록한 콜백은 이제 항상 default 문 뒤에 실행됩니다. 게임 시작 시에는 default 앞에, 리플레이 시작 시에는 뒤에 실행하던 이전 동작은 다음으로 복원합니다.
define config.early_start_store = True
스크롤바가 있는 viewport나 vpgrid의 minimum, xminimum, yminimum side 속성은 이제 뷰포트만이 아니라 스크롤바와 뷰포트를 포함하는 side에 적용됩니다.
우회하려면 viewport_minimum, viewport_xminimum, viewport_yminimum을 사용하거나 다음을 추가하세요.
define config.compat_viewport_minimum = True
7.3.0
다음과 비슷한 스크린을 만나면 스크린 언어가 이제 "a non-constant keyword argument ... is not allowed after a python block." 오류를 발생시킵니다.
screen test():
default a = 0
button:
$ a = 1
action Return(a)
text "테스트"
action 속성이 Python 대입보다 먼저 실행되어 클릭 시 1이 아니라 0을 반환하기 때문입니다. 검사를 끄려면 다음을:
define config.keyword_after_python = True
게임의 game 디렉터리에 있는 01compat.rpy 파일에 추가하세요. 다만 이전 동작이 유지됩니다.
side 레이아웃의 자식 그리기 순서는 이제 제어 문자열에서 가져옵니다. 이전의 고정 순서는 다음으로 복원합니다.
define config.keep_side_render_order = False
config.say_attribute_transition_callback은 이전 및 새 태그 집합을 전달할 수 있도록 비호환 방식으로 인터페이스가 바뀌었습니다. 이전 인터페이스는 다음으로 복원합니다.
define config.say_attribute_transition_callback_attrs = False
mode 매개변수도 조금 바뀌어 permanent와 temporary 속성 전환이 동시에 발생하면 both를 반환합니다.
7.2.2
config.say_attribute_transition_callback은 새 인수로 표시 중인 이미지를 받습니다.
7.1.1
window auto는 이제 menu 문에 대사나 설명이 연결되어 있는지 확인하여 대사 창을 적절하게 숨기거나 표시합니다. 필요한 정보를 포함하려면 강제 재컴파일(Force Recompile)을 해야 합니다. 이전 게임에서도 작동해야 하지만 다음으로 비활성화하여 이전 동작을 복원할 수 있습니다.
define config.menu_showed_window = True
define config.window_auto_show = [ "say" ]
define config.window_auto_hide = [ "scene", "call screen" ]
엄밀히 비호환 변경은 아니지만 기록 스크린의 수정을 권장합니다. 업데이트 방법은 변경 이력 항목을 참조하세요.
7.1
이미지가 표시되지 않을 때 속성이 있는 say는 이제 지정된 속성만 사용하지 않고 사이드 이미지를 결정합니다. 비활성화하려면 다음을 추가하세요.
define config.say_attributes_use_side_image = False
7.0
자동 이미지는 이제 매우 늦은 초기화 단계 대신 init 0에서 정의됩니다. 이전 동작은 다음으로 복원합니다.
init -1:
define config.late_images_scan = True
Dissolve(), ImageDissolve(), AlphaDissolve()는 이제 기본적으로 alpha=True처럼 원본 디스플레이어블의 알파 채널을 사용합니다. 되돌리려면 다음을 추가하세요.
define config.dissolve_force_alpha = False
이미 표시 중인 동영상 스프라이트를 다시 표시하면 이제 동영상을 다시 재생합니다. 이전 동작은 다음으로 복원합니다.
define config.replay_movie_sprites = False
6.99.13
하이퍼링크 크기는 이제 바깥 텍스트의 크기를 상속합니다. 비활성화하려면 다음을 추가하세요.
define config.hyperlink_inherit_size = False
{nw} 태그는 이제 음성과 자동 읽기가 끝날 때까지 기다린 뒤 진행합니다. 비활성화하려면 다음을 추가하세요.
define config.nw_voice = False
ATL 트랜스폼은 이제 일시 정지나 보간이 발생할 때마다 최소 한 프레임을 표시합니다. 이를 예상하지 않은 게임에서는 한 프레임씩 빠르게 연속 표시될 수 있습니다. 다음으로 비활성화합니다.
define config.atl_one_frame = False
show layer at 문은 이제 다른 ATL 트랜스폼처럼 상태를 유지합니다. 예를 들어 여러 show layer at 문 사이에 오프셋이 유지되는 등 동작이 달라질 수 있습니다. 다음으로 비활성화합니다.
define config.keep_show_layer_state = False
비호환 변경은 아니지만 renpy.list_files()는 이제 표준 순서로 출력을 정렬합니다. 모호했던 동작을 확정합니다. 예를 들어 images 디렉터리에서 여러 파일의 이름이 같으면 예전에는 임의로 하나를 골랐고 시스템마다 달라질 수 있었습니다. 이제 어디서 실행하든 같은 파일을 고릅니다.
6.99.12.3
개발자 모드에서도 이제 시스템 설치 글꼴을 검색하지 않습니다. 사용 중이었다면 글꼴 파일을 game/ 디렉터리에 복사하세요. (글꼴 라이선스가 허용하는지 확인하세요.)
6.99.11
변경 이력에 설명한 대로 style과 translate 문의 실행 순서가 바뀌었습니다. 되돌리려면 다음 코드를 추가하세요.
define config.new_translate_order = False
되돌리면 새 GUI가 작동하지 않을 수 있습니다.
config.quit_action 기본값이 게임 내 컨텍스트에서 종료 확인을 표시하도록 바뀌었습니다. 이전 동작은 다음 코드로 복원합니다.
define config.quit_action = ui.gamemenus("_quit_prompt")
버튼과 창에 지정한 최대 크기를 이제 준수합니다. 비활성화하려면 다음 코드를 추가하세요.
define config.enforce_window_max_size = False
6.99.9
인터페이스 소리는 이제 여러 소리를 동시에 재생하는 "audio" 채널에서 재생합니다. 사용자 지정 sound 채널과 설정이 다를 수 있습니다. config.auto_channels로 audio 채널을 설정하거나 다음 코드를 추가하여 sound 채널을 사용할 수 있습니다.
define config.play_channel = "sound"
6.99.2
이제 이미지 디렉터리(game 아래의 images 디렉터리)를 검색하여 파일명으로 이미지를 정의합니다. 비활성화하려면 다음 코드를 사용하세요.
init python:
config.images_directory = None
6.18
show screen과 call screen은 이제 스크린 예측 로딩 과정에서 인수를 평가할 수 있습니다. 인수 평가에 부수 효과가 있다면 show screen이나 call screen에 새 nopredict 절을 넣어 예측을 막아야 합니다.
스크린도 이제 화면 전환에 참여하여 이전 상태에서 새 상태로 전환됩니다. 비활성화하려면 config.transition_screens를 false로 설정하세요.
같은 태그의 스크린을 교체할 때 상태(예: 트랜스폼 상태)를 전달하기 위해 더 이상 구조적 동등성을 사용하지 않습니다. 대신 use 문의 새 id 속성으로 상태를 명시적으로 전달할 수 있습니다.
6.16
MusicRoom()의 loop 매개변수 의미가 바뀌었습니다. 이전 동작을 원하면 loop와 single_track을 모두 true로 설정하세요.
6.15.7
이제 자동 진행 모드는 "auto-forward" Preference()로 제어해야 합니다. 자동 진행 모드 슬라이더로 제어하려면 config.default_afm_enable을 None으로 설정하세요.
6.14
이전에는 아카이브로 묶은 파일을 archived/로 옮기고 게임 실행이나 아카이브 빌드 시 자동 검색했습니다. 원클릭 빌드로 더 이상 필요하지 않으므로 archived/의 파일을 game 디렉터리로 돌려놓아야 합니다.
MoveTransition()의 인터페이스가 바뀌었습니다. 코드를 다시 작성하지 않으려면 OldMoveTransition으로 이전 버전을 사용할 수 있습니다. (MoveTransition과 팩토리를 함께 쓸 때만 영향이 있습니다.)
Transform()의 비대칭 크기 조절 및 회전 이미지 처리 동작이 바뀌었습니다. 이전 동작이 실제로 사용되었을 가능성은 작습니다.
6.13.8
이전 방식의 문자열 보간이 기본적으로 다시 활성화되었습니다. 6.13부터 6.13.7 사이에 say나 menu 문에서 %를 사용하는 코드를 작성했다면 %%로 바꾸거나 다음 코드를 넣어야 합니다.
init python:
config.old_substitutions = False
6.13
텍스트 동작 변경은 개발 중인 게임에 여러 영향을 줄 수 있습니다. 가장 큰 변화는 새 대괄호 방식 치환의 도입과 이전 백분율 기호 방식 치환의 제거입니다. 다음 코드로 되돌릴 수 있습니다.
init python:
config.old_substitutions = True
config.new_substitutions = False
두 변수를 모두 True로 설정하면 새 방식과 이전 방식 치환을 한 게임에서 함께 사용할 수 있습니다.
기본 자동 줄바꿈 방식도 바뀌었습니다. 문단의 줄 수가 늘지는 않지만 각 줄에 들어가는 단어는 달라질 수 있습니다. 이전 동작은 다음 코드로 복원합니다.
init python:
style.default.layout = "greedy"
style.default.language = "western"
음수 line_spacing 버그를 수정했습니다. 텍스트 블록의 높이가 줄어들 수 있습니다. 이전 동작은 다음으로 복원합니다.
init python:
config.broken_line_spacing = True
마지막으로 새 텍스트 코드는 특히 음수 줄 간격과 함께 사용할 때 느리게 표시되는 텍스트에 시각적 오류를 일으킬 수 있습니다. line_overlap_split을 조정하여 해결해 보세요.
6.12.1
이미지 이름이 고정 이름에서 속성 기반 이름으로 바뀌었습니다. 이전에는 구별되던 이름이 모호해질 수 있습니다. 비활성화하려면 config.image_attributes를 False로 설정하세요.
트랜스폼이나 ATL 블록을 지정하지 않고 이미지를 표시하면 이제 이전에 사용하던 트랜스폼을 계속합니다. 따라서 이미지를 바꿔도 움직임이 이어질 수 있습니다. 이전 동작은 config.keep_running_transform을 False로 설정하여 복원합니다.
Character()의 image 인수 의미가 바뀌었습니다. 이전 의미는 스크린 기반 환경에서 지원하지 않았지만, 호환성을 위해 config.new_character_image_argument를 False로 설정하면 복원할 수 있습니다.
6.12.0
Choice와 nvl_choice 스크린의 items 매개변수 정의가 바뀌었습니다. nvl_choice는 더 이상 권장하지 않으며 NVL 스크린으로 대체되었습니다.
predict 속성이 False가 아니면 이미지 예측 로딩을 위해 언제든 스크린을 호출할 수 있습니다. 이 경우 처음 표시될 때 부수 효과를 일으켜서는 안 됩니다.
성능을 위해 ImageReference의 위치 속성을 이제 무시합니다. style.image_placement의 위치 속성도 무시됩니다. 이전 동작은 config.imagereference_respects_position을 True로 설정하여 복원합니다.
6.11.1
MoveTransition은 이제 이동 중인 디스플레이어블의 xoffset과 yoffset을 반영합니다. 이동용 팩토리 함수도 xoffset과 yoffset을 받습니다. 내장 팩토리는 문제없지만 사용자 정의 팩토리는 추가 매개변수를 사용하거나 무시하도록 수정해야 할 수 있습니다.
6.11.0
config.default_transform의 트랜스폼으로 show와 hide 문에서 표시하는 이미지의 트랜스폼 속성을 초기화합니다. 기본값은xpos와xanchor를 0.5로,ypos와yanchor를 1.0으로 설정합니다.이전에는 초기화되지 않아 0이 기본값이던 스타일 속성들의 기본값이 바뀐 것입니다.
ATL 트랜스폼에
reset을 포함하면 이 속성들을 0으로 재설정할 수 있습니다. 또는 다음 코드로 기본 트랜스폼을 사용하지 않고 이전 동작으로 되돌릴 수 있습니다.init python: style.image_placement.xpos = 0.5 style.image_placement.ypos = 1.0 style.image_placement.xanchor = 0.5 style.image_placement.yanchor = 1.0 config.default_transform = None
트랜스폼이
xpos,ypos,xanchor,yanchor중 특정 위치 속성을 정의하지 않고 자식이 정의한다면 자식의 값을 사용합니다.따라서 한 트랜스폼이 세로 이동을, 다른 트랜스폼이 가로 이동을 제어할 수 있습니다. 이전 동작과 호환되지 않으므로
config.transform_uses_child_position변수로 끌 수 있습니다.init python: config.transform_uses_child_position = False
6.10.0
기본 위치(left, right, center, truecenter, offscreenleft, offscreenright)는 이제 ATL 트랜스폼으로 정의됩니다. 이 위치에 이미지를 표시하면 위치가 기억됩니다. 원치 않으면 다음 코드를 추가하여 위치를 다시 정의해야 합니다.
define left = Position(xalign=0.0) define center = Position(xalign=0.5) define truecenter = Position(xalign=0.5, yalign=0.5) define right = Position(xalign=1.0) define offscreenleft = Position(xpos=0.0, xanchor=1.0) define offscreenright = Position(xpos=1.0, xanchor=0.0)
6.9.2
Ren'Py 6.9.2 이상에서 게임을 이전하려면 게임이 들어 있는 디렉터리를 프로젝트 디렉터리에 복사하세요. 런처에서 “옵션(Options)”, “프로젝트 디렉터리(Projects Directory)”를 클릭하여 프로젝트 디렉터리를 선택할 수 있습니다. 더 오래된 릴리스에서 이전하는 방법은 Ren'Py 6.9.2 릴리스 노트를 참조하세요.