LoginSignup
2
0

More than 3 years have passed since last update.

Ren'Py の実行中に rpa を削除する

Posted at

実行中に rpa を削除するという暴挙をした時のメモ

結論

init python ブロック で削除する

この場合 rpa 内のスクリプトが読み込まれてしまっているので、再起動または終了する必要がある。

1. persistent に削除フラグを保存してスクリプトの再読み込み

persistent.uninstall = True
renpy.save_persistent()
renpy.utter_restart()

2. init python ブロックで persistent の削除フラグが立っていたら、 rpa と persistent の削除フラグを削除

import os
try: os.unlink(config.basedir + "/game/*.rpa")
except: pass
persistent.uninstall = False
renpy.save_persistent()

3. 終了・または再起動
終了の場合は renpy.quit()、再起動ならタイトル表示後に renpy.utter_restart()
タイトル表示後で再起動処理を挟める場所が思いつかないので、終了してしまうのが一番早いと思う。

スクリプトの実行タイミング

起動時

  • python early ブロックconfig は使える
  • init * python ブロック (* の数値が小さい順)
  • translate * python ブロック (* は現在の言語)
    • リソースがロードされ、以降リソース入り rpa はロックされて削除できない

タイトルへ戻った時

  • translate * python ブロック (* は現在の言語)

renpy.change_language(*)

  • translate * python ブロック (* は変更後の言語)

renpy.utter_restart()

起動時と同じ
renpy.utter_restart() はタイトル前に実行すると無言で落ちる

renpy.reload_script()

起動時と同じだが、translate * python ブロックがなぜか 3 回くらい呼ばれる
あと画面にリロード中であることがデカデカと表示される
renpy.reload_script() はタイトル前に実行すると無言で落ちる

renpy.full_restart()

タイトルへ戻った時と同じ
renpy.full_restart()python early ブロック、init * python ブロックで実行すると落ちる。translate * python ブロック では落ちない。

renpy.quit(relaunch=True)

そもそも再起動されない。ソースコードを読む限り、起動時と同じはず。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0