吉里吉里2/KAG3 で気をつける点 - 後半

吉里吉里2/KAG3 で気をつける点 - 前半 - 見上げれば、空ではコンソールなどのデバッグ支援ウィンドウの対策を行いました。今回は任意のスクリプトの実行についてみていきます。


まず、一般的な吉里吉里2/KAG3 における処理の流れをおおまかに記述します。

  1. 吉里吉里本体 (krkr.eXe) の起動
  2. 指定のフォルダまたはアーカイブ (*.xp3) 内の startup.tjs の実行
  3. system/Initialize.tjs の実行
    • 吉里吉里本体と同じ位置にある video フォルダを自動検索パスに追加
    • フォルダまたはアーカイブ内の scenario フォルダなどを追加
    • 吉里吉里本体と同じ位置にある image.xp3 などのアーカイブがあれば追加
    • 吉里吉里本体と同じ位置にある patch.xp3 などのパッチを探して追加
    • system/Config.tjs の読み込み
    • MainWindow.tjs など各種スクリプト (*.tjs) の読み込み
    • Override.tjs があれば読み込み
    • 吉里吉里本体と同じ位置に Override2.tjs があれば読み込み
    • KAGWindow クラスのオブジェクト作成・初期化
    • AfterInit.tjs があれば読み込み
    • 吉里吉里本体と同じ位置に AfterInit2.tjs があれば読み込み
    • コマンドラインオプションの -ovr の値を TJS として実行
    • first.ks を実行
  4. first.ks の内容に従って文字や画像を描画したりなんやら


自動検索パスについてですが、 KAG3 では通常 epilogue.ks や risa_smile.png など読み込むファイルの名前はフォルダを指定せずにファイル名のみを記述します。

[image layer="0" page="fore" storage="risa_smile"]
りさ:「ありがとっ!」[p]
[jump storage="epilogue.ks"]

KAG システムは指定された名前のファイルがないか自動検索パスに設定したフォルダやアーカイブを探していき、みつかったファイルが読み込まれます。自動検索パスに追加したタイミングが後のものほど優先されます。


そのうえで先程の処理される順番リストを見てみると、デフォルトの状態では image.xp3 や video フォルダなどが存在すると、その中にあるファイルは読み込み対象となります。もっとも video フォルダは優先度が最低なので気にしないとして、 image.xp3 などの各アーカイブはプロジェクトフォルダ/アーカイブよりも優先度が高くなります。
そのため、既存のファイルと同名のファイルが含まれていると意図しないコードを実行してしまう可能性がでてきます。


ですので image.xp3 などの分割アーカイブは必要なければ読み込まないようにしてもよいでしょう。


それ以上に吉里吉里本体と同じフォルダに置いておくだけで直接読み込まれる Override2.tjs と AfterInit2.tjs は対策をとったほうがよいでしょう。これらのファイルは基本的に制作側は使用しないものなのでなくても構いません。 Initialize.tjs 内の記述をコメントで無効にするか削除します。また、コマンドラインオプション -ovr に関しても同様です。


次は、存在すると実行される Override.tjs と AfterInit.tjs ですが、必要なければこれも読み込まないようにするのもよいでしょう。
特に AfterInit.tjs は KAGWindow クラスのオブジェクトを生成したあとに実行されるため、実体に対して何かはたらきかけるにはちょうどよいタイミングに読み込まれます。悪意をもって読み込ませるにはちょうどよいファイルです。また、必要になれば first.ks の先頭に TJS スクリプトを記述するか別途ファイルを読み込むようにすることでタイミング的に同じことが行えますので、さくっと封じてしまうのも手です。


Override2.tjs/AfterInit2.tjs/-ovr とは違って image.xp3 などのアーカイブや Override.tjs などは(一般的にはあまりありませんが)リリース後必要になる可能性があります。そのとき Initialize.tjs 内で読み込まないようにしてしまっていると困る事態になります。
というのも Initialize.tjs 内でパッチの設定を行っているため、 Initialize.tjs 自身はパッチの影響を受けません。ですので、自動検索パスの設定を変えることは非常に困難となります。


どちらにせよ、パッチという、どうしても塞げない道があるのでわからなければ無理に触らなくてもいいかと。


この手のことは完全に防ぐことはできないので、適当なところで諦めるのが大事だと思います。特に同人なら尚更。最低限 Override2.tjs, AfterInit2.tjs, -ovr だけ塞いで、あとデバッグ支援ウィンドウ周りを防いだら、多分少しは違うと思います。


まとめると

  • デバッグ支援ウィンドウを無効にする(前エントリ参照)
  • Initialize.tjs を修正して Override2.tjs/AfterInit2.tjs/-ovr は無効にすべき
  • 利用しない Override.tjs/AfterInit.tjs を無効にしてもよい
  • 利用しない *.xp3 を自動検索パスに追加しないようにしてもよい
    • ただし Initialize.tjs はパッチによる変更が効かないのでリリース後に利用する必要が出てきたときに大変困る
    • Initialize.tjs はパッチによる変更が効かない
  • パッチの機能は削ぐことはできないのであんまり効果がない
  • 完全に防ぐことはできないないの諦めて作品作りを頑張る
  • 結論がこれなので、竜頭蛇尾というか記事としてしょんぼり


東北の吉里吉里ですが、落ち着いたらまた訪れたいですね。

あと、前にハンドル:ばくの名前で吉里吉里の記事を書いてたのですが、ドメインの契約が切れてそのままになってるので、どうしたものかと思っています。はてなの書き方も少し馴染めないですし。うーむ