사이드 이미지

많은 비주얼 노벨은 인터페이스의 일부로 말하는 캐릭터의 그림을 표시합니다. Ren'Py에서는 이를 사이드 이미지라고 부르며, 대사의 일부로 사이드 이미지를 자동 선택하고 표시하는 기능을 제공합니다.

사이드 이미지 기능은 Character()를 선언할 때 이미지 태그를 연결했다고 가정합니다.

define e = Character("에일린", image="eileen")

캐릭터가 말하면 Ren'Py가 표시할 사이드 이미지를 찾습니다. 이미지에는 다음이 있어야 합니다.

  • "side" 태그.

  • 말하는 캐릭터에 연결된 이미지 태그에 해당하는 속성. 이 예에서는 "eileen"입니다.

  • 말하는 캐릭터의 이미지 태그에 현재 연결된 속성 중 가능한 한 많은 속성.

Ren'Py는 이 조건에 맞는 이미지를 하나로 결정하려고 합니다. 하나를 찾으면 사이드 이미지로 사용합니다. 없거나 둘 이상이면 표시하지 않습니다.

예를 들어 다음 스크립트가 있다고 가정하겠습니다.

define e = Character("에일린", image="eileen")

image eileen happy = "eileen_happy.png"
image eileen concerned = "eileen_concerned.png"
image eileen space suit = "eileen_space_suit.png"


image side eileen happy = "side_eileen_happy.png"
image side eileen = "side_eileen.png"
image side eileen space = "side_eileen_space.png"
image side eileen suit = "side_eileen_suit.png"

label start:

    show eileen happy

    e "이 대사를 지점 A라고 할게요."

    e concerned "그리고 이 대사는 지점 B예요."

    e space suit "이 대사는 지점 C예요."

A 지점에서는 이미지 태그 "eileen"에 연결된 캐릭터 e가 말합니다. "eileen happy" 이미지가 표시 중이므로 "eileen"은 필수이며 "happy"도 포함할 수 있습니다. "side" 태그와 해당 속성을 최대한 많이 가진 이미지를 찾으면 "side eileen happy"가 일치하므로 Ren'Py가 이를 표시합니다.

B 지점에서는 "eileen concerned" 이미지가 표시 중입니다. "eileen"은 필수이며 "concerned"도 포함할 수 있습니다. "side" 태그와 해당 속성을 최대한 많이 가진 이미지를 찾지만 "side eileen concerned"는 없으므로 "side eileen"이 일치합니다.

C 지점에서는 "eileen space suit" 이미지가 표시 중입니다. "eileen"은 필수이며 "space"와 "suit"도 포함할 수 있습니다. 조건에 맞는 이미지는 "side eileen space"와 "side eileen suit"입니다. 두 이미지의 속성 수가 같으므로 Ren'Py는 어느 쪽도 선택하지 않고 사이드 이미지를 표시하지 않습니다.

화면에 없는 캐릭터

사이드 이미지는 플레이어 캐릭터가 말할 때 그 캐릭터의 이미지를 표시하는 데도 사용할 수 있습니다. 캐릭터에 이미지를 연결하고 이미지 속성을 사용하는 say 구문으로 표시할 사이드 이미지를 선택합니다.

예를 들면 다음과 같습니다.

define p = Character("플레이어", image="player")

image side player happy = "side_player_happy.png"
image side player concerned = "side_player_concerned.png"

label start:

    p happy "이 대사는 'side player happy' 이미지와 함께 표시됩니다."

    p "이 대사도 'side player happy' 이미지와 함께 표시됩니다."

    p concerned "이 대사는 'side player concerned' 이미지와 함께 표시됩니다."

설정 변수와 스토어 변수

설정 변수로 사이드 이미지의 여러 특성을 제어할 수 있습니다.

_side_image_tag = None
define config.side_image_tag = None

_side_image_tag가 None이 아니면 config.side_image_tag보다 우선합니다.

지정하면 현재 말하는 캐릭터에 연결된 이미지 대신 지정한 이미지 태그를 사이드 이미지가 따라갑니다. 예를 들어:

define e = Character("에일린", image="eileen")
define config.side_image_tag = "eileen"

e 캐릭터에 연결된 "eileen" 이미지 태그를 따라가도록 합니다.

define config.side_image_only_not_showing = False

참이면 같은 태그의 이미지가 화면에 이미 표시되어 있지 않을 때만 사이드 이미지를 표시합니다.

_side_image_prefix_tag = None
define config.side_image_prefix_tag = 'side'

_side_image_prefix_tag가 None이 아니면 config.side_image_prefix_tag보다 우선합니다.

사이드 이미지를 찾을 때 사용하는 접두사입니다.

define config.side_image_null = Null()

사이드 이미지를 표시하지 않을 때 사용할 Null 디스플레이어블입니다. 바꿀 수 있지만 다른 Null 객체만 사용할 수 있습니다. 예를 들어 Null(width=200, height=150)처럼 크기를 설정하여 디졸브가 잘리는 것을 방지할 수 있습니다.

define config.side_image_same_transform = None

None이 아니면 새 사이드 이미지가 이전 사이드 이미지와 같은 이미지 태그를 공유할 때 사용할 트랜스폼입니다.

define config.side_image_change_transform = None

None이 아니면 새 사이드 이미지가 이전 이미지와 같은 태그를 공유하지 않거나 둘 중 하나가 없을 때 사용할 트랜스폼입니다.

트랜스폼과 화면 전환

사이드 이미지를 표시할 때마다 config.side_image_same_transform과 config.side_image_change_transform 트랜스폼을 이전 및 새 사이드 이미지 디스플레이어블이라는 두 인수로 호출합니다. 사이드 이미지를 움직이거나 두 이미지 사이에 화면 전환을 적용할 수 있습니다.

다음 코드는 연결된 캐릭터가 바뀌면 사이드 이미지가 밀려 들어오고 나가도록 합니다.

transform change_transform(old, new):
    contains:
        old
        yalign 1.0
        xpos 0.0 xanchor 0.0
        linear 0.2 xanchor 1.0
    contains:
        new
        yalign 1.0
        xpos 0.0 xanchor 1.0
        linear 0.2 xanchor 0.0

define config.side_image_change_transform = change_transform

다음 코드는 캐릭터가 같을 때, 예를 들어 감정이 바뀔 때 이전 사이드 이미지와 새 사이드 이미지 사이에 디졸브를 적용합니다. Dissolve가 올바르게 동작하려면 두 이미지의 크기가 같아야 합니다.

transform same_transform(old, new):
    old
    new with Dissolve(0.2, alpha=True)

define config.side_image_same_transform = same_transform

SideImage()를 축소한다면 Dissolve()에서 밉매핑을 켜는 것이 좋을 수 있습니다.

transform same_transform(old, new):
    old
    new with Dissolve(0.2, alpha=True, mipmap=True)

define config.side_image_same_transform = same_transform

함수

renpy.get_side_image(prefix_tag, image_tag=None, not_showing=None, layer=None)

사이드 이미지로 표시할 이미지를 찾으려고 합니다.

먼저 이미지 속성 집합을 결정합니다. image_tag를 지정하면 해당 태그에서 속성을 가져옵니다. 아니면 현재 캐릭터에 지정한 image 속성에서 가져옵니다. 사용할 속성이 없으면 None을 반환합니다.

이어서 prefix_tag 태그와 다음 속성을 가진 이미지를 찾습니다.

  • 이미지 태그. image_tag 또는 현재 캐릭터에 지정한 image 속성에서 가져옵니다.

  • 이미지 속성들.

해당 이미지가 있으면 반환합니다.

not_showing

True이면 속성을 가져온 태그의 이미지가 현재 표시 중이지 않을 때만 사이드 이미지를 반환합니다. False이면 가능한 한 항상 이미지를 반환합니다. None이면 config.side_image_only_not_showing 값을 사용합니다.

layer

지정하면 이미지 태그와 속성을 찾을 레이어입니다. None이면 태그의 기본 레이어를 사용합니다.

renpy.set_tag_attributes(name, layer=None)

이미지 태그가 표시 중이지 않을 때 해당 태그에 연결된 속성을 설정합니다. 주로 사이드 이미지에 사용할 속성을 직접 설정하는 데 사용합니다.

예를 들어:

$ renpy.set_tag_attributes("lucy mad")
$ renpy.say(l, "나 꽤 화났어.")

다음은:

l mad "나 꽤 화났어."

서로 같습니다.