普通の履歴を使用する(ついでに表示中の文字をセーブロード画面に表示する)
注意: 原因は不明ですが、履歴を開くと最下部より少しだけ上になってしまうことがあります。
原因がわかった人がいたら連絡おねがいします。
v6.15.3で修正されました。
Ren’Pyの特徴の一つはロールバックなんですが、普通のテキスト履歴も使いたい。
やはり需要はあるのか、cookbookにそのものずばりがありました。
まずは以下のページの指示に従ってください。
テキストの履歴と音声のリプレイ
その後フォーラムで色々改造されたり、Ren’Pyのバージョンアップで互換性がなくなったりした部分がありましたので、各改造点をまとめて現在(v6.15.7)のRen’Pyでも動作するようにバグ修正したものを配布しておきます。readback.rpy
wikiのものと比較して、スクロールバーを使用しないNVLモードライクな履歴が使用可能となっています。また、改造する部分が被っていたので、現在表示中の文字もセーブして、セーブロード画面に表示する機能をつけました。これはセーブロード画面に説明分を載せると排他的です。
14/10/14 更に履歴から任意にロールバック可能になりました。
config.readback_buffer_length = 100 # 履歴に記録する行数です。readback_nvl_pageがTrueなら意味はありません。 config.readback_full = False # ロールバックを完全に置き換えるかどうかです。Trueならファイルを置くだけでロールバックの代わりに動作します。 config.readback_scroll_step = 300 ホイールでどれだけスクロールするかを決めます。readback_nvl_pageがTrueなら意味はありません。 config.readback_disallowed_tags = ["size"] # 無視するタグのリストです。 config.readback_choice_prefix = ">> " # 選んだ選択肢の前に表示されます。 config.readback_space_after_nvl_clear = True # nvl clear 使用時にスペースを置く、または改ページするかどうか。 config.readback_nvl_page = True # スクロールバーを使用しないnvl モードライクな表示法を使用する。 config.readback_max_line = 5 # config.readback_nvl_page がTrueの時の1ページの行数です。 config.readback_max_page = 10 # config.readback_nvl_page がTrueの時の最大ページ数です。 config.readback_rollback = True #config.readback_nvl_page がTrueならテキスト履歴から任意にロールバック可能にします。 config.store_save_info = 20 # 0でなければ、現在表示している文字のうちセーブする文字数です。
マウスホイールで読み進めたい方はreadback_fullをFalseにしてください。
また、スクロールバーを使う通常のものは割と重いのでNVLモードライクな方をおすすめします。
現在表示中の文字をセーブスロットに表示したいならさらに以下のコードを`nvl`スクリーンに追加します。
for who, what, who_id, what_id, window_id in dialogue: window: id window_id has hbox: spacing 10 if who is not None: text who id who_id text what id what_id# 追加部分↓
$ store_current_line(who, what) <= Here!
# 追加部分↑
これで表示中の文字もセーブした場合は、以下のようにして文字列を取り出せます。
$ save_name = FileSaveName(name)
後はスロットの横にでも表示してください。
ここでロールバックとテキスト履歴の好きな方を設定画面から選べるようにします。
まず、config.readback_fullの値をFalseにしてください。
次にscreens.rpyのscreen sayを以下のように編集します。
screen say:
# Defaults for side_image and two_window
default side_image = None
default two_window = False
# 追加部分↓
if not persistent.rollback:
key "rollback" action [SetVariable("yvalue", 1.0), ShowMenu("text_history")]
# 追加部分↑
これで変数persistent.rollbackの真偽によってロールバックかテキスト履歴が使われます。
同様に、screen choiceやnvlにも追加してください。クイックメニューに追加するのが一番楽だと思ます。
後は設定画面に項目を追加するだけです。
後、使用すべきActionに[SetVariable(“yvalue”, 1.0), ShowMenu(“text_history”)]と書かれていますが、このままnavigationに追加するとタイトル画面でも使えてしまったり、クイックメニューではボタン表示がおかしかったりするので履歴を表示するAction ReadBackを追加しておきました。
デザインを変えたい人は好きな様にスタイルなりスクリーンなりを改造してください。