Web / HTML5 link

Ren'Py は Web ブラウザ上でのゲーム実行をサポートしています。これは、WebAssembly 向けにコンパイルされたバージョンの Ren'Py によって実行されており、可能な限り Ren'Py をブラウザ上で動作させられるようにします。このページでは、ブラウザでの動作の制限を説明して、あなたのゲームがうまく動作するように設計する手助けをするとともに、Web用にゲームをビルドする方法を説明します。

制限 link

ウェブブラウザ内で動作するすべてのゲームと同様に、Ren'Pyのゲームにもさまざまな制限があります。その中には、ブラウザのサンドボックスによって課されるものもあれば、ゲームを実行できるようにするまでにダウンロードする必要があるデータの量を減らすために選ばれているものもあります。

いくつかの制限とは次の物です :

  • ビデオはブラウザの組み込みの動画再生方法を使用して再生します。これは再生可能なフォーマットをブラウザでサポートされたものに制限し、 renpy.movie_cutscene() のみサポートされます。

  • 音声再生は高速なブラウザの音声フォーマットまたは低速だがより多くのフォーマットをサポートする Ren'Py 組み込みの音声を使用します。後の章を参照してください。

  • Web 版はマルチスレッドをサポートしていないため、 renpy.invoke_in_thread() のような関数や Python の threading モジュールはサポートされません。デスクトップやモバイルの Ren'Py では、画像をバックグラウンドでプリロード出来ますが、 Web 版では出来ないため、画像のロードがフレームレートの不具合を引き起こす可能性があります。

  • ネットワークはサポートされていません。これは意外かもしれませんが、ブラウザのサンドボックスは Ren'Py の任意のネットワーク要求を禁止します。つまり、ソケットとリクエストライブラリは、Webブラウザ上で実行するとエラーを返します。

ゲームをホストする場所によってはさらに制限される可能性もあります。ホスティングプロバイダによっては、ゲームのサイズやプロジェクトの一部として含められるファイル数を制限しているところがあります。例えば、 itch.io はこれらの制限を記載しています。ブラウザは他にも制限を課しており、サイズが 50MB を超えるファイルはキャッシュされないので、ゲームが実行されるたびに大きなファイルがダウンロードされることになります。

対応ブラウザー link

私たちは、Chrome、Edge、Firefox、Safari などの常用ブラウザと、iOS や Android でのこれらのブラウザのモバイル版の最新版で Ren'Py が動作するように心がけています。他のブラウザでも Ren'Py が動作するかもしれませんが、それはそのブラウザが WebAssembly や Ren'Py が必要とするその他の機能をサポートしているかどうかによります。

Ren'Py は多くの最新のウェブ機能を必要としており、これらの機能がブロックされていたり、無効になっていると動作しません。

Ren'Py の動作を維持するように努めていますが、 Ren'Py はブラウザの能力の限界に挑戦しているため、ブラウザの変更によってゲームを実行できなくなる可能性があります。私たちはブラウザのベンダーと協力してブラウザが動作し続けるように努力していますが、ブラウザの変更によってゲームの更新が必要になる可能性もあります。

ゲームのパッケージング link

Ren'Pyのゲームは、ランチャーの「Web(Beta)」セクションを使用して、web用にパッケージ化できます。このセクションには、主に4つのオプションがあります。

Web アプリケーションのビルドをする

これは、ウェブ用にあなたのゲームをパッケージングします。ゲーム全体を含む web.zip ファイルと、ゲームを構成する個々のファイルを含むフォルダを作成します(実際にはこのフォルダからのゲーム実行はサポートされておらず、ゲームはウェブサーバによってホストされる必要があります)。

ビルドしてブラウザで開く

これは、ウェブ用にあなたのゲームをパッケージングし、テストのためにローカルウェブブラウザで起動します。ゲームを提供する web サーバーをコンピュータ上で実行し、その web サーバーにアクセスするブラウザを開きます。

これはあなたのゲームをテストする通常の方法となります。

ブラウザで開く

ビルド処理はせず、コンピュータ上の web サーバーにアクセスする web ブラウザを開きます。

ビルドしたディレクトリーを開く

ビルド処理で生成されたファイルを含むフォルダーを開きます。

ゲームのアップロード link

一旦ゲームをビルドしたら、公開サーバーにアップロードしなければいけません。 itch.io のようなゲームのホスティングサーバーに、ファイルのすべてを含んでいる web.zip ファイルをアップロードする必要があります。他のホスティングサーバーでは生成された web ディレクトリ内のすべてのファイルをアップロードする必要があります。

自身でゲームをホスティングしているなら、 web サーバーが application/wasm MIME タイプを使用して .wasm ファイルを提供するか確認してください。そうするとゲームのロードを高速化でき、警告の発生を防げます。

プレスプラッシュ link

Web プラットフォームはそのままでもデフォルトのプレスプラッシュ画像を使用します。上書きするには web-presplash, .jpg または .png, .webp を名前に持つ画像を用意してください。デフォルトのものを置き換えます。

必要ならアニメーションするプレスプラッシュ画像を .webp 形式で使用できます。

アイコン link

ウェブページのアイコンは、 web-icon.png という名前で画像ファイルをプロジェクトのベースディレクトリーに置いてカスタマイズできます。この画像の解像度は512x512以上で、幅と高さは等しくなければなりません。カスタム画像が指定されないとデフォルトの Ren'Py アイコンが使用されます。

プログレッシブダウンロード link

Ren'Py はプログレッシブダウンロード機能をサポートしています。これはプロジェクトのベースディレクトリーにある progressive_download.txt という名前のファイルを編集して設定できます。もしこのファイルがなければ最初に web 用にゲームをパッケージングするときに作成されます。このファイルのデフォルトの内容は次の通りです。

# RenPyWeb progressive download rules - first match applies"
# '+' = progressive download, '-' = keep in game.zip (default)
# See https://www.renpy.org/doc/html/build.html#classifying-and-ignoring-files for matching
#
# +/- type path
- image game/gui/**
+ image game/**
+ music game/audio/**
+ voice game/voice/**

このファイルはどのファイルがゲーム開始前にダウンロードされるかを決定し、これらは要求時にダウンロードされます。 #で始まる行はコメントです。 - で始まる行はゲームが始まるときにダウンロードされ、通常は開始画面で使用されます。 + で始まる行は必要ならダウンロードされるべきファイルです。

2 列目はファイルのタイプと Ren'Py がこれらのタイプをどう扱うかを決定します。タイプは次となります :

image

画像ファイルは、その画像にピクセレーションを適用されたバージョンに置き換えられ、その画像の読み込み時に完全な画像に置き換えられます。多くの場合、Ren'Py は画像を予測して完全な画像が必要になる前に読み込めるので、ピクセレーションを適用された画像はこの読み込みが間に合わなかった場合にのみ表示されることになります。

完全な画像が読み込まれないなら、間違ったデータがwebサーバーにある可能性があります。

music

音声ファイルは無音ファイルに置き換えられ、読み込み完了後に再生されます。

voice

ボイスファイルは無音に置き換えられ、読み込み完了後に再生されます。

最後に、最後の列はマッチするパスとなります。

オーディオとビデオ link

広告の音声再生停止を意図したブラウザの制限のため、ゲーム内をユーザーが少なくとも一回はクリックするまでは効果音と音楽のファイルは再生されません。

Ren'Py では音声ファイルを再生するのに2つの方法があります。1つめはブラウザの web 音声システムの使用であり、2つ目は自前の再生システムの使用です。web音声システムはより高速ですが、 Safari では OGG 形式はサポートされません。

config.webaudio_required_types 変数はブラウザがサポートするタイプを調べてどの音声システムが使用されるかを制御します。ゲームで mp3 のみ使用するなら、次のように変更します

define config.webaudio_required_types = [ "audio/mpeg" ]

ビデオの再生もサポートされます。2つの変数でこれを制御します。 :

config.web_video_base

これはウェブブラウザ上でムービーを再生するとき、ムービーファイル名に追加して再生するムービーの完全な URL になる URLです。ディレクトリを含められるので "https://share.renpy.org/movies-for-mygame/" ともできます。

これはあなたのゲームの残りと異なるサーバーで動画をホストしたいならば便利です。

config.web_video_prompt

iOS 上のモバイルの Safari では、デフォルトでは音声付きのムービーを再生するにはクリックが必要です。この変数はプレイヤーにクリックを促すのに使用されるメッセージを与えます。

Safari に関連する機能がまだ 1 つあります。 Safari は webm のような近代的なフォーマットをサポートしないので、 webvideo のサポートは古くなります。このため最初に読み込みに失敗すると URL の拡張子付を .mp4 に置き換えて試します。つまり Safari では https://share.renpy.org/oa4_launch.webm が未サポートなので読み込みに失敗し、 https://share.renpy.org/oa4_launch.mp4 があればそれを試します。

Javascript link

emscripten の 3 つの関数を使用して Ren'Py は Javascript を実行できます。このモジュールは web ブラウザ内で実行されているときのみあり、テストは renpy.emscripten を使用してできます。使用前にはモジュールのインポートが必要です。

emscripten.run_script(script) link

指定の Javascript のスクリプトを実行します。これは結果を返しません。

emscripten.run_script_int(script) link

指定の Javascript スクリプトを実行し、整数として結果を返します。

emscripten.run_script_string(script) link

指定の Javascript スクリプトを実行し、文字列として結果を返します。

web/index.html ファイルを編集して Ren'Py が呼び出せるスクリプトを記述してゲームに javascript の関数を追加できます。このファイルは Ren'py の更新時に置き換えられるので注意してください。

Javascript は window.renpy_exc や window.renpy_get, window.renpy_set 関数を使用して Ren'Py でも実行できます。これらの関数のドキュメントは web/renpy-pre.js を参照してください。

バイトコードキャッシュ link

Ren'Py 8.1 ではダウンロード前に python を バイトコードにコンパイルする必要があるため、読み込みには時間がかかります。これを避けるため、バイトコードは次のようにしてキャッシュされます。 :

  • ブラウザでゲームを開き、プレスプラッシュの表示中に F12 を押して javascript コンソールを開きます。

  • javascript コンソールで downloadBytecode() を入力してください。ブラウザに bytecode-311.rpyb をダウンロードさせます。

  • これをゲームの game/cache ディレクトリに設置して再ビルドしてください。

ハンバーガーメニュー link

ハンバーガーメニューは3つのオプションを持つゲームの左上に表示されるメニューです。

セーブのインポート

ユーザーに Ren'Py のセーブファイルと永続データをブラウザにアップロードさせます。

セーブのエクスポート

ユーザーに Ren'Py のセーブファイルと永続データを含む zip ファイルをダウンロードさせます。このファイルは異なるブラウザにアップロード出来、セーブのバックアップや解凍してデスクトップ上のゲームでロードもできます。

Ren'Py log

デバッグ用の出力を含む Ren'Py のログをダウンロードします。