Ren'Py の実行中に rpa を削除する - proudust.github.io

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

実行中に 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)

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


Proudust

Proudust

Virtual cockadoodledoo