資料:
スクリーンとスクリーン言語 — Ren'Py Documentation
screen confirm(message, yes_action, no_action): modal True (省略) dismiss action no_action (省略) textbutton _("Yes") action yes_action textbutton _("No!") action no_action
資料:
スクリーンとスクリーン言語 — Ren'Py Documentation
screen confirm(message, yes_action, no_action): modal True (省略) dismiss action no_action (省略) textbutton _("Yes") action yes_action textbutton _("No!") action no_action
引用 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の入っているフォルダに入れる
・ランチャーを起動して、プロジェクトを確認する
導入前に一端こちらで確認することをおすすめ
Ren’Py Cookbook
Ren'Py Cookbook - Lemma Soft Forums
公式フォーラムの再利用可能なコードの置き場所。
色々な場所からまとめてくれている方がいるので最新の情報を得やすいです。
Itch.io
New & popular tools tagged Ren'Py - itch.io
開発ツールの話題の新作タブリンク。
画像・説明が多くてどんなコードか感覚が掴みやすい。
(24/01/26追記)
Visual Novel Assets, Tutorials, and Tools - Collection by Natasha Luna - itch.io
更新頻度の高いitch.ioの素材ブックマーク。こちらをチェックした方が早いかも。
Github
renpy · GitHub Topics · GitHub
GithubのRenpyタグを付けている最新レポジトリのリンク。
参照 little-used history chips - Lemma Soft Forums
資料1 Adding a history/backlog jump button - Lemma Soft Forums
資料2 https://ja.renpy.org/doc/html/config.html#var-config.hard_rollback_limit
資料3 https://ja.renpy.org/doc/html/config.html#var-config.rollback_length
define config.hard_rollback_limit = 128 define config.rollback_length = 128 screen history(): style_prefix "history" for h in _history_list: window: (省略) textbutton "Jump": action Confirm(_('このテキストまでジャンプしますか?'), yes=RollbackToIdentifier(h.rollback_identifier), no=None, confirm_selected=False)
config.rollback_lengthはデフォルトの128より下回ると不安定になるので注意。
名前入力などのスクリーンを挟むなど想定外っぽいことをした場合、挙動がおかしくなる場合があります。
call name_change(1) from _call_name_change call pronoun_change(1) from _pronoun_change $ renpy.block_rollback()
こんな感じでロールバックを防いで応急処置はできます。
参照1:https://www.renpy.cn/forum.php?mod=viewthread&tid=1002&extra=page%3D4
参照2:Little used features screen Load/Save - Lemma Soft Forums
screens_saveload.py
button: (省略) if FileNewest(slot): text "NEW": color "#F0F0EC" #テキストの色 size 30 #テキストのサイズ xpos -24 ypos -35 outlines [ (absolute(3.5), "#A472A9", absolute(0), absolute(0)) ] #テキストのアウトライン anchor(0, 0) #rotate(傾き)のための設定 at transform_save_label_new #transformの名前
image_tranform.rpy
transform transform_save_label_new: rotate -5 # ここから点滅コード linear .6 alpha 0.7 linear .6 alpha 1.0 repeat # 点滅コードおわり
テキストのアウトラインがいらない場合:outlines [ (absolute(3.5), "#A472A9", absolute(0), absolute(0)) ]を削除
点滅がいらない場合:transform transform_save_label_newの点滅コードはじめ~点滅コードおわりを削除
rotate(傾き)も点滅もいらない場合:xanchor 0.0 yanchor 0.0 at transform_save_label_newを削除
すべて英語。
Changelog (Ren'Py 7.x-) — Ren'Py Documentation
・ナイトリー版のドキュメント
・これから追加される機能の説明を確認できる
・安定板と間違えないこと
Renpytom | creating the Ren'Py Visual Novel Engine | Patreon
・開発者のPatreon
・月初に更新される
・追加される機能についての詳しい紹介記事がある
・Patreon有料会員(最低月1ドル)はすべての紹介記事を先読みできる
・なお、90日後に紹介記事は無料公開される
(ランク→一般公開→タイトルにRen'Py Developer Updateが含まれる記事)
・過去の紹介記事もコードをまじえて説明されている場合があり、参考になる
transform zoo: zoom 0.602 transform center: xalign 0.3 define list0 = [zoo, center] layeredimage 0: at list0 always "0_base" group a: attribute a1 default attribute a2
option
renpy.register_style_preference("lang", "0", style.say_dialogue, "xsize",852) renpy.register_style_preference("lang", "1", style.say_dialogue, "xsize",840)
screen
textbutton _("日本語") action [Language(None), StylePreference("lang", "0")] textbutton "English" action [Language("en_us"), StylePreference("lang", "1")]
この例ではsay(本編のダイアログ)の文章の表示域のスタイル設定を変更している。
lang:ここではlangとしているが指定する名前は自由。上のコードと下のコードで利用する名前が合っていればよい。
style.say_dialogue:スタイル設定の名前の前にstyle.~を付けて指定する。
xsize:そのスタイルに合ったプロパティの指定。
840:数値の指定。
参照 Web / HTML5 — Ren'Py Documentation
資料 Creating HTML/Web Builds (Last Tested with 7.5.1.22070801) - Ren'Py All-In-One GUI Template community - itch.io
・progressive_download.txtについて
ブラウザ版をビルドするとgameフォルダと同じ階層に自動生成されるファイル
個人的に設定は全部-がおすすめ
この設定だと使用する素材をゲーム開始前の読み込み中に全て読み込んでくれる
・永続変数の保存のタイミング
ブラウザ版はゲームがセーブされた時に保存される
PC版とは勝手が違うため注意が必要
・ブラウザ版のzip
Web版をビルドすると自動生成される
場所は(プロジェクト名)-(バージョン)-distsフォルダ
参照:スタイルのプロパティー — Ren'Py Documentation
imagebutton action Skip() focus_mask None
focus_maskはデフォルトがTrueですが、Trueの場合ボタンの透明領域もボタンの当たり判定がなくなります。画像ボタンが押しにくいと感じたらfocus_maskをNoneに指定すると押しやすくなる場合があります。
参照
Ren’Py改造メモ(5) – akakyouryuu
Screen Actions, Values, and Functions — Ren'Py Documentation
for page in range(1, 9): textbutton "[page]" action FilePage(page) textbutton _(">") action FilePageNext(max=8, wrap=True)
for page in range(1,9):この書き方だと1~8までページのボタンが表示されます。
FilePageNext
max:これを上のrangeの最大-1に設定すると>ボタンを押しても画面上で表示されているページまでの移動で止まります。逆に言うとこれを設定しないと>ボタンを押せば無限にセーブページを移動できます。
wrap:maxが設定済みかつ最後のファイルページにいる場合、最初のページに戻ります。ボタンがA Q 1 2 3 の並びだった場合、3のページにいる時>ボタンを押すとAに戻ります。
gameフォルダの下ではなく、プロジェクトのフォルダに入れます。
gameフォルダなどと並んでいる所です。
imagemapを使うパーツ画像がいらないポイント&クリックの説明
(ただ当たり判定は矩形になる、古め、2013年ぐらい)
A simple navigation map tutorial - Lemma Soft Forums
imagemapの説明ブログ記事(日本語)
うみのぶどう 【R】イメージマップ(画像選択肢)大勝利
imagebuttonを使ったポイント&クリックのサンプルプロジェクト
(インベントリ機能あり、古め、2013年ぐらい)
Point and Click Sample Project - Lemma Soft Forums
imagebuttonの説明のYoutube動画(英語)
RenPy Tutorial using imagebutton | Point and Click Feature - YouTube
インベントリから調べる箇所にドラッグするシステムの作り方
(英語・内容はだいぶ難しいかも)
While running game code: File "renpy/common/00start.rpy", line 212, in script call call _load_reload_game from _call__load_reload_game_1 File "renpy/common/00keymap.rpy", line 529, in script python hide: File "renpy/common/00keymap.rpy", line 529, in <module> python hide: File "renpy/common/00keymap.rpy", line 540, in _execute_python_hide renpy.load(renpy.session["_reload_slot"]) Exception: Couldn't find a place to stop rolling back. Perhaps the script changed in an incompatible way?
上記のエラーはたまに直近で変数を変更している時などに出ますが気にしなくていいやつです。リロードもしくはロールバックで強制終了になります。