Ren'Py memo

Ren'Pyの個人的なメモ

サイドイメージを喋る時だけ表示or常時表示

参考:Change Side Image Expressions [SOLVED] - Lemma Soft Forums

(追記2023/02/23)常時表示の方法が違いました!!!すみません!!

layerdimageでサイドイメージ(メッセージボックスの横の顔イメージ)を
表示する方法備忘録です。画像を普通に表示するときとあまり変わらない?はず!

キャラクターが喋る時だけ表示する

地の文、または他のキャラクターが話している時に非表示にするやり方。

Characterの定義

    define S = Character("[persistent.name_keep]", color="#965778",ctc="ctc_blink", ctc_pause="ctc_blink",ctc_position="nestled",what_prefix=" 「",what_suffix="」",image="0")
(省略)

いっぱい書いてますが最後のimage="0"が重要です。
0は数値ではなく後述のlayerdimageの名前です(ややこしい)

layerdimageの定義

    layeredimage side 0:
        always "0_base"
(省略)

layerdimageの横にsideを付け足します。
これでSideimage()が表示される場所にこの画像が出るようになります。

screens.rpy

screen say(who, what):
    (省略)
       add SideImage() xalign -0.08 yalign 0.65

多分デフォルトだとこう書いてあると思うので、変更しなくて大丈夫です。

キャラクターを常時表示する

地の文または他のキャラクターが話している時だろうがずっと表示するやり方。

サイドイメージの優先表示設定をする
options.rpy

    define config.side_image_tag = "test"

サイドイメージ — Ren'Py Documentation
話しているキャラではなくここに設定されたtagを持ったCharacterが優先されてsideに表示されます。

Characterの定義

    define narrator = Character("", image="test")
    define t = Character(_('tes'), image="test")

もし心の声的なナレーター表示もサイドイメージを表示したい場合は
narratorを指定し、同じimageのタグを書きます。

layerdimageの定義

    layeredimage 1:
        always "1_base"
(省略)

    image side test = LayeredImageProxy("1")

side付け足しなし。最後の行を同じimageのタグの名前で書き、Layeredimageの名前を指定します。
これ今あまりわかってないで足していますが多分大事なやつです。

SIdeimageの追加
screens.rpy

screen say(who, what):
    (省略)
            add SideImage() xalign -0.08 yalign 0.65

sideimageです!!!!!!!
自分だとlayeredimageを直接指定して変数で変更している
余談戦法でやっていたので勘違いしてました。ごめんなさい!!

本編での書き方
script.rpy

    narrator a3 b2 c2 d2"てすてす"
    t a2 b2 c2 d2"てすてす"

Characterの定義で指定したキャラがサイドに表示され、表情が変更できます!

余談

※ ここからは真似しなくていい&読まなくていいやつです

私はどうしても e happy "セリフ"みたいな前半が長くなる書き方(?)が苦手で
eだけで収めたい!!!!!!!!がためにすごい変なやり方しています。

こんなやり方です。

・Characterにimageを紐づけない
・サイドイメージに使うlayerdimageを変数で表情を操作するようにする

layerdimageの定義

    layeredimage 0:
        always "0_base"

        if emo[0] == "b2" :
            "0_b_b2"
(省略)

        if emo[1] == "c2" :
            "0_c_c2"
        elif emo[1] == "c3" :
            "0_c_c3"
(省略)

        if emo[2] == "d2" :
            "0_d_d2"
        elif emo[2] == "d3" :
            "0_d_d3"
(省略)

実際表情をつけるときの書き方

   $ emo = ["b2","c5","d4"]
   S"わ~~無茶苦茶だ~~"

これをやるとe happyみたいな書き方をしなくていいんですが、
表情にトランジションがききません。真似しないほうがいい。解散!!!!

(前の間違ってた記述のさらし首)

Characterの定義

    define S = Character("[persistent.name_keep]", color="#965778",ctc="ctc_blink", ctc_pause="ctc_blink",ctc_position="nestled",what_prefix=" 「",what_suffix="」",image="0")
(省略)

前述と変わりません。私自身はややこしいやり方してるので消していますが、
e happy "セリフ"みたいな書き方で進める場合はここと紐づけてていいと思います。
layerdimageの定義

    layeredimage 0:
        always "0_base"
(省略)

layerdimageの横にsideを付け足しま……せん!
screens.rpy

screen say(who, what):
    (省略)
       add "0" xalign -0.08 yalign 0.65

ずっと表示する予定のlayerdimageの名前を貼り付けます。
これで常時表示されます。変数で囲って必要な場合は消すとかもできそうです!