引用 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の入っているフォルダに入れる
・ランチャーを起動して、プロジェクトを確認する
導入前に一端こちらで確認することをおすすめ