Ren'Py memo

Ren'Pyの個人的なメモ

バックログに立ち絵(レイヤー画像)の顔部分を追加する

引用 add images to history log[works with layeredimages] - Lemma Soft Forums
使用コード GitHub - Moshibit/portraits-for-dialogue-log-in-RenPy-


・MITライセンス
・レイヤー画像形式のみ説明


1.Characterにimageタグを追加する

define narrator = Character("", image=None)
define e = Character("Eileen", image="eileen")

台詞とナレーション — Ren'Py Documentation
顔画像を表示しないCharacterの場合はNoneを指定


2.portaits.rpyをダウンロードしてgameフォルダに入れ、編集する

portraits-for-dialogue-log-in-RenPy-/portrait.rpy at main · Moshibit/portraits-for-dialogue-log-in-RenPy- · GitHub
このリンクからダウンロードしたファイルをgameフォルダ(他のrpyファイルが入っている場所)に入れる

その後portaits.rpyの一番下の方にある130行目をコメントアウトし、131行目行頭の#を消して保存する

#config.history_callbacks.append(image_history_callback)
config.history_callbacks.append(layeredimage_history_callback)


3.screen historyにコードを入れる

screen history():
(省略)
 has fixed:
   yfit True

   add h.image

add h.imageをバックログのスクリーンに追加する
位置を変更したい場合は、add h.image xpos 8 ypos 8 のような感じに書く


4.立ち絵から顔部分を切り抜く

transform backlog_img:
 zoom 0.6
 crop (100, 90, 240, 320)

screen history():
(省略)
 add h.image xpos 8 ypos 1 at backlog_img

このままだと立ち絵全体がバックログにそのまま追加されるので、
transformで縮小・切り抜きをする
cropの数字は左からx, y, width, height
https://ja.renpy.org/doc/html/atl.html#transform-property-crop

立ち絵ごとに切り抜きのtransformを変える場合は、
以下のコードのようにif文を入れるなどする
h.image_tagは1)でCharacterで指定したimageと同じもの

if h.image_tag == "eileen" :
    add h.image xpos 8 ypos 1 at backlog_img
elif h.image_tag == "eileen2":
    add h.image xpos 4 ypos -301 at backlog_img2
elif h.image_tag == "eileen3" :
    add h.image xpos 55 ypos -282 at backlog_img3
elif h.image_tag == "eileen4" :
    add h.image xpos 8 ypos -301 at backlog_img4




余談 顔画像にふちをつける

image color5_line = RoundedFrame(Solid("#F0F0EC00"), radius=6.0, outline_width=1.0, outline_color="#404057E6")

screen history():
(省略)
 add "color5_line" xpos 0 ypos 0 xsize 160 ysize 174
 add h.image

xpos ypos:位置
xsize ysize:ふちの大きさ

Ren'Pyで作った矩形を角丸シェーダーで丸くする - Ren'Py memo
この記事のコードを使用しています べた塗り四角でもよい、上記記事のコードの導入が面倒な場合はSolid("#404057E6")だけでも


余談 エラーを避ける

立ち絵をhide指定している状態でその立ち絵のimageタグが付いているキャラクターがバックログで登場しているとportaits.rpyでエラーが起きる場合があります(レイヤー画像に指定された画像属性を読み取ろうとしてエラーになる)

キャラクターが話しているけれど立ち絵を表示したくない場合は、
別のCharacterを用意してimageをNoneに指定すると良い
例:define e = Character("Eileen", image="eileen")
define e_noface = Character("Eileen", image=None)


余談 実際に動いているプロジェクト例を見る

portraits-for-dialogue-log-in-RenPy-/examples/portrait layeredimages.zip at main · Moshibit/portraits-for-dialogue-log-in-RenPy- · GitHub
・上記のリンクからzipをダウンロードする
・解凍し、renpy.exeの入っているフォルダに入れる
・ランチャーを起動して、プロジェクトを確認する

導入前に一端こちらで確認することをおすすめ