Ren'Py は 配布物のビルドをサポートしています。ランチャーの「 Build Distributions 」を選択すると、 Ren'Py は自分自身とそのプロジェクトをスキャンし、配布物に含まれるファイルを決定し、必要なアーカイブを生成してパッケージとアップデートファイルのビルドをします。
なにも設定しないと、 Ren'Py は以下の種類のパッケージをビルドします。
Windows x86_64 と Linux x86_64 をターゲートとする zip ファイルです。
build.directory_name
が付加されていない zip ファイルです。
インテルプロセッサ上の Mac OS X をターゲットとする、マックアプリケーションを含む zip ファイルです。ゲームデータはアプリケーションに含まれ、ユーザーに対してひとつのファイルとして提供されます。
Windows x86_64 をターゲットとする zip ファイルです。
itch.io や Steam のようなソフトウェアのストアで必要な情報を含む配布物です。これは直接実行されるわけではありません(おそらく Mac では動作しません)が、app ストアへのアップロードプロセスで必要です。
警告
Ren'Py が生成する zip と tar.bz2 ファイルは Ren'Py がLinux や Macintosh で起動するために必要なパーミッション情報を含んでいます。
Windows 上で zip ファイルを解凍して再圧縮すると、 Linux や Macintosh 上でのそのファイルの実行は未サポートになります。
ビルド処理は build 名前空間にある変数の設定と関数の呼び出しによって設定出来ます。これは init python
ブロック内から実行されなければなりません。標準ではこれらの設定は options.rpy
で設定されます。
多くのゲームが使用するいくつかの基本的な変数と関数があります。
build.name
= "..." linkこれを使用して、設定されていなければ自動的に build.directory_name と build.executable_name を生成します。これにはスペースやコロン、セミコロンを含めてはいけません。
build.directory_name
= "..." linkアーカイブファイル内のディレクトリー名を決定するためにこれは使われます。例えばこれが 「 mygame-1.0 」に設定されると、プロジェクトの Linux バージョンは「 mygame-1.0-linux 」に解凍されます。
パッケージファイルが出力されるディレクトリー名を決定するためにもこれは使われます。例えば、 build.directory_name を mygame-1.0 に設定すると、ベースディレクトリーの親フォルダーに存在する mygame-1.0-dists にアーカイブファイルが出力されます。
この変数にはスペースやコロン、セミコロンなど特殊な文字は含めてはいけません。設定されていなければデフォルトで build.name
-config.version
になります。
build.executable_name
= "..." linkこの変数はユーザーがゲームを開始するためにクリックする実行ファイルの名前を制御します。
この変数にはスペースやコロン、セミコロンなど特殊な文字を含めてはいけません。設定されないとデフォルトで build.name
です。
例えば、これが 「 mygame 」に設定されると、ユーザーは Windows では mygame.exe, Linux では mygame.sh, Machintoshでは mygame.app を実行することになります。
ビルドをカスタマイズするために、ゲームのベースディレクトリーに含められる2つのファイルがあります。
Windows 上で使用されるアイコンです。
Macintosh 上で使用されるアイコンです。
これらのアイコンファイルは特別なフォーマットです。これらを変換するためにプログラムやウェブサービス ( https://anyconv.com/png-to-ico-converter/ や https://anyconv.com/png-to-icns-converter/ のような ) を使用する必要があるでしょう。
ビルド処理は最初に Ren'Py 自身とゲームのファイルをファイルリストに分類します。これらのファイルリストは続いてパッケージファイルに追加されます。
分類は buildclassify 関数で実行されます。これはファイル名のパターンと、スペースで区切られたファイルリストを受け取ります。パターンは最初から最後までマッチされますが、最初のマッチが優先されます ( より限定的なパターンが次に続いていた場合もです ) 。パターンには以下の特別な文字が含まれるでしょう。
ディレクトリーの区切り。
ディレクトリーの区切り以外のすべての文字にマッチします。
すべての文字にマッチします。
例:
すべてのテキストファイルにマッチします。
ゲームディレクトリーのテキストファイルにマッチします。
デフォルトではファイルが分類されるファイルリストが 7 つあります ( Ren'Py は本体のファイルをそれらのうち最初の 6 つに分類します )。
これらのファイルはすべてのパッケージと Android ビルドに含まれます。
これらのファイルは Linux をターゲットとするパッケージに含まれます。
これらのファイルは Macintosh をターゲットとするパッケージに含まれます。
これらのファイルは Winddows をターゲットとするパッケージに含まれます。
これらのファイルは Ren'Py エンジンファイルを必要とするパッケージに含まれます(Linux, Macintosh, Windows)。
これらのファイルは Android ビルドに含まれます。
この有効なファイルリストのセットは build.classify()
にその file_list
引数として新しい名前を渡して拡張できます。
ファイルはアーカイブにも分類できます。デフォルトでは "archive" アーカイブが宣言されています。
これらのファイルは archive.rpa アーカイブに含まれます。
このアーカイブのセットは build.archive()
関数を使用して拡張できます。
他に分類されていないファイルは「 all 」ファイルリストに入れられます。
配布物からファイルを除外するためには、それらをNoneまたは空の文字列に分類します。この場合、パターン末尾の * and ** が少なくとも1つの文字に当てはまるべきです。
例
# Include README.txt
build.classify("README.txt", "all")
# But exclude all other txt files.
build.classify("**.txt", None)
# Add png and jpg files in the game directory into an archive.
build.classify("game/**.png", "archive")
build.classify("game/**.jpg", "archive")
パターンを引数に build.documentation 関教を呼び出すとドキュメントとしてそれらのパターンにマッチするファイルをマークします。ドキュメントファイルは Macintosh アプリではアプリケーション内部と外部の両方に含まれます。
例えば、ベースディレクトリーにあるすべてのテキストと html ファイルをドキュメントとしてマークする方法は次の通りです
build.documentation("*.txt")
build.documentation("*.html")
Ren'Py のビルド処理に新しいパッケージの種類を追加もできます。これはパッケージの名前と含めるべきファイルリストの文字列を引数に build. package 関数を呼び出して行います。
通常版のゲームとボーナス要素を追加したものをビルドしたいとすると、ボーナスファイルを「 bonus 」ファイルリストに分類して、次のように all-premium パッケージを宣言します。
# Declare a new archive belonging to a new "bonus" file list.
build.archive("bonus_archive", "bonus")
# Put the bonus files into the new archive.
build.classify("game/bonus/**", "bonus_archive")
# Declare the package.
build.package("all-premium", "zip", "windows mac linux all bonus")
サポートされるタイプは対応するフォーマットで生成される "zip" と "tar.bz2" 、ファイルを含むディレクトリーを作成する "directory" です。
Ren'Py は複数ファイルのひとつのアーカイブへの統合をサポートしています。それほど安全ではありませんが、これは単純なコピーからファイルを守ります。
デフォルトでは「 archive 」ファイルリストに分類されたすべてのファイルは、 all ファイルリストに含まれる archive.rpa アーカイブに置かれます。
build.archive を呼び出して新しいアーカイブと、それらが含まれるファイルリストを宣言できます( all ファイルリスト以外を使うことはめったにありませんが)。あるアーカイブを使って、ファイルをその名前のリストに分類します。
例えば、以下のコードは画像を image.rpa に、スクリプトを script.rpa に保存します
# Declare two archives.
build.archive("scripts", "all")
build.archive("images", "all")
# Put script files into the scripts archive.
build.classify("game/**.rpy", "scripts")
build.classify("game/**.rpyc", "scripts")
# Put images into the images archive.
build.classify("game/**.jpg", "images")
build.classify("game/**.png", "images")
空のアーカイブはビルドされません。
ただあなたのゲームをアーカイブすることについてちょっと考えてみてください。ファイルをオープンなままにしておけばあなたの頃にはなかった将来のプラットフォームで、誰かがゲームを実行する助けになるでしょう。
ゲームがアーリーアクセスや Patreon のようなプラットフォームから配布されるときのように複数のリリースを作成するとき、以前の .rpyc ファイルを置いておくことが必要になります。.rpyc ファイルにはセーブがロードできると保証するために必要な情報が含まれるため、これらのファイルが抜けると問題が起きます。
同時に Ren'Py はこれらのファイルが変更されると game ディレクトリーの .rpyc ファイルを更新しするため、バージョンコントロールに含めるには不適当にします。
この問題を解決するために Ren'Py は .rpyc ファイルを以前の配布物から game ディレクトリーと一緒にある old-game ディレクトリーに配置します。 old-game/ のディレクトリ構造は game/ のディレクトリ構造に一致するべきです。例えば game/scripts/day1.rpyc は old-game/scripts/day1.rpyc に移動されるはずです。 old-game の .rpyc ファイル以外のファイルは無視されます。
old-game の使用の利点は old-game の .rpyc ファイルはチェックされ、 .rpyc ファイルを生成するときに Ren'Py は常に 既知のソースから開始する点です。これは変更の少ない一人の開発者のゲームに対しては恐らく必要ないでしょうが、 old-game は変更が大きいゲームの開発で便利でしょう。
.rpyc ファイルが変更されたゲームのセーブをロードするのにどのように役立つかのさらなる情報は以下で見つかります :
ストアによっては Ren'Py アプリの必要環境を尋ねることがあります。これはゲームによりますが、こちらが一般的なビジュアルノベルの最低環境となります。
Windows
Version: Windows 7 以上
CPU: 2.0 Ghz 64-bit Intel互換
Graphics: OpenGL 3.0 または DirectX 11
macOS
CPU: 2.0 Ghz 64-bit 互換(Apple silicon は Rosetta2 によるサポートです)
Linux
CPU: 2.0 Ghz 64-bit Intel互換
ディスクスペースの要求量は完全にあなたのゲームの容量次第であり、CPU と RAM の要求もまたゲームにより変動します。 Ren'Py は特定の拡張が利用可能な OpenGL2 下でも起動します。
build.
archive
(name, file_list=u'all') linkアーカイブの存在を宣言し、その name が利用可能なアーカイブ名のリストに追加されます。これは build.classify()
にも渡せます。
一つ以上のファイルが name に分類されると、 name.rpa がアーカイブとしてビルドされ、次のように指定した file_list を含むパッケージに含まれます。
build.archive("secret", "windows")
何らかのファイルが build.classify()
関数を使って "secret" アーカイブに含まれると、そのファイルは Windows のビルドで secret.rpa アーカイブに含まれることになります。
build.classify()
関数と同様に、file_list として与えられた名前がファイルリスト名として存在しない場合には、その名前を作成して、有効なファイルリストのセットに追加します。
build.
classify
(pattern, file_list) linkpattern にマッチするファイルを file_list に分類します。 file_list はアーカイブ名でもあります。
file_list として与えられた名前がアーカイブやファイルリストの名前として存在しなければ、それを作成して有効なファイルリストのセットに追加します。
build.
clear
() linkファイルを分類するために使用したパターンのリストをクリアします。
build.
documentation
(pattern) linkドキュメントにマッチするパターンを宣言します。 mac アプリのビルドではこのパターンにマッチしたドキュメントは二度保存されます。 - 一度目は app パッケージ内に、二度目はその外部です。
build.
executable
(pattern) linkサポートするプラットフォーム ( Linux や Mac ) で実行可能ファイルとしてマークするパターンを追加します。
build.
package
(name, format, file_lists, description=None, update=True, dlc=False, hidden=False) linkパッケージツールにビルドされるパッケージを宣言します。
パッケージ名
パッケージのフォーマットで、スペースで区切られた以下のリストの文字列です。 :
zip ファイル
tar.bz2 ファイル
ファイルを含むディレクトリー
ファイルを含む Macintosh DMG
Macintosh 用のアプリケーションを含む zip ファイル
Macintosh 用のアプリケーションを含むディレクトリー
dmg を含む Machintosh ドライブ
build.directory_name
が先頭に付かない zip ファイルです。
build.directory_name
が先頭に付かない zip ファイルです。
文字列が空だと何もビルドされません。
そのパッケージに含まれるファイルリストのリストです。
ビルドするパッケージに対する任意の説明文です。
True ならこのパッケージ向けのアップデータもビルドされます。
True の場合、 update ディレクトリーは無しとなり、 zip や tar.bz2 ファイルが単独の DLC モードでビルドされます。
True ならこれはランチャーのパッケージリストでは非表示になります。
以下の変数はビルドプロセスのさらなる機能を提供します。
build.allow_integrated_gpu
= True link組み込みと外付けの GPU が両方あるプラットフォームでは、組み込みの GPU で起動するようにします。現在これは Mac OS X でのみサポートされます。
build.destination
= "{directory_name}-dists" linkアーカイブファイルが出力されるディレクトリーへのパスを与えます。これは絶対または相対パスです。相対パスはプロジェクトのディレクトリーから始まります。
以下の値は str.format
関数を使用して置換します。
{directory_name}
build.directory_name の値です。
{executable_name}
build.executable_name の値です。
{version}
build.version の値です。
build.change_icon_i686
= True linkTrue かつ icon.ico が存在すれば 32-bit Windows 実行ファイルのアイコンが変更されます。 false なら、アイコンは変更されません。これを false にすると一部のアンチウイルスの後検出を防げかもしれません。
build.exclude_empty_directories
= True linkTrue の場合は空のディレクトリー (アーカイビングの時点で空になるディレクトリーを含む) が生成されたパッケージから除外され、 False の場合は空のディレクトリーも含まれます。
build.include_i686
= True linkTrue なら、 32bit x86 プロセッサでの動作で必要とするファイルが Linux と Mac のビルドに含まれます。 false ならこれらのファイルは含まれません。
build.include_old_themes
= True linkTrue なら、Ren'Py 6.99.9以前に存在していたテーマのサポートに必要なファイルがビルドに含まれます。False ならそのようなファイルは除外されます。
gui.init()
が呼び出されるとこれは False に設定されます。
build.itch_project
= None linkこれを設定すると Ren'Py ランチャーはあなたのプロジェクトを itch.io にアップロードできるようになります。これは itch で登録されたプロジェクトの名前に設定するべきです (例 "renpytom/the-question")。
いったんこれが設定されると、配布物の生成後、 "Build distributions", "Upload to itch.io" をクリックしてアップロードできます。
build.mac_info_plist
= { } linkこれは文字列を文字列に対応させる辞書であり、Macの info.plist ファイルのキーを追加、または置換するのに使用できます。