変更履歴 (Ren'Py 7.x-) link

また、 非互換の変更 のリストもあります。

8.2.0 / 7.7.0 link

Harfbuzzの統合 link

Ren'Py はテキスト整形に Harfbuzz ライブラリーを使うようになりました。 Ren'Py のすべてのバージョンで Harfbuzz を使用して freetype authinter に追加情報を提供します。

Ren'Py 8 では、Harfbuzz によってテキスト整形の他、文脈やテキストの言語に基づいてgtlph の並び替えや選択も行われます。これらは ブラーフミー/インド系文字のような複雑なテキスト整形を必要とするか筆記体をサポートするために必要です(適切な言語をサポートするフォントを提供する必要があります)。

新しい shaper style プロパティーは、古いバージョンの Ren'Py との互換性のために、テキストに使用されるシェイパーを制御します。

Variable フォント link

Ren'Py は OpenType variable フォントをサポートするようになりました。これらのフォントは1つ以上の可変軸を使用して描画方法を変更します。例えば、"weight" 軸はフォントの太さを、"width" 軸はフォントの幅を制御します。

Variable フォントのサポートには、Ren'Py 8とharfbuzz shaperが必要です。

Variable フォントをサポートするために、 Ren'Py は instanceaxis スタイルプロパティー、 instanceaxis テキストタグ、 renpy.variable_font_info() 関数を追加しました。

詳細は variable fonts documentation を参照してください。

フォントヒンティング link

新しい hinting モード "auto-light" では垂直方向のヒンティングのみ処理します。

スタイルが使用毎にヒンティングを制御出来るのに対し、新しい config.font_hinting 変数はフォントヒンティングをフォント毎に有効化できるようにします。

define config.font_hinting["MyFont.tff"] = "bytecode"

MyFont.ttf に対して、バイトコードのヒンティングを有効化しました。

置換の改善 link

文字列の置換は、単なるフィールドではなく、Python 式として扱われるようになりました。同じではありませんが、この概念は Python の f-string を扱ったことのある人には馴染み深いと感じるでしょう。これにより、いくつかのロジックを直接組み込めます。

default exp = 1000

label start:
    e "I am level [exp // 225]!" # Will show "I am level 4!"

変数が文字列に置換されるとき、 interpolation 名前空間があれば、その名前空間で置換する値が検索されます。例

define t = "Not shown."
define interpolate.t = "Shown."

label start:
    e "[t]" # Will show "Shown."

吹き出しの改善 link

Ren'Py 8.1 で追加された吹き出し機能に吹き出しを保持する新たに方法が追加されました。吹き出しは一度に1つずつポップアップし、明示的に排除されるまで画面に表示されたままになります。詳しくは speech bubble documentation を参照してください。

新しい bubble.properties_callback 変数には、発言している画像タグに基づいて吹き出しのプロパティー名のリストをフィルタリングする関数を与えられます。これにより、すべてのキャラクターではなく、いくつかのキャラクターに特化した吹き出しを持てるようになります。

いくつかの変更が連携して、吹き出しの表示と非表示をアニメーション化する transform を適用できるようになりました。1例を Bubble スクリーン のドキュメントに含めています。

Position 型と ATL 補間 link

linear 1. xpos .6 のようなステートメントであるATL 補間(interpolation) (テキストの置換(interpolation)とは関係ありません)が異なる型の補間を受けつけるようになりました。これにより次のように以前のドキュメントでは反対され、動作しなかったことが出来るようになります。

transform mixed:
    xycenter (520, 300)
    easein 3. align (.0, .0)

label muxed:
    show a at Transform(pos=(.5, .6))

    "..."

    show a at Transform(pos=(520, 150))

この新機能の実装の一部として、新しい position という position タイプが追加され、位置やサイズの絶対要素と相対要素両方を与えられるようになりました。例えば、 xsize position(-10, .5) と指定すると Displayable は水平方向のスペースの半分から10ピクセルを引いたスペースを占領します。

開発ツール link

新しく "Skip splashscreen" オプションがランチャーの preferences セクションに追加されました。チェックされると、開始時に splashscreen ラベルをスキップするようにします。

新しい 'Show Filename and Line' オプションは shift+D で開ける開発者メニューから利用可能です。有効化されると現在のステートメントのファイル名と行番号が表示されます。そのファイル名と行番号を押すと、可能ならデフォルトテキストエディタでそのファイルを指定の行で開きます。

データアクション link

データアクション がドキュメントに記載され、まとめられました。これらのアクションはそのデータに何をするかを表すデータ管理方法 (Set-, Toggle-, Cycle-, Increment-) と変更するデータの種類を表すデータの対象 (-Variable, -ScreenVariable, -LocalVariable, -Field, -Dict) を使用して再実装されました。

このリリースでは 2 つの新しい管理方法を追加しました :

  • Cycle- アクション (CycleVariable, CycleLocalVariable, CycleField...) は値のリストを受け取り、そのアクションが実行されるたび (i.e ボタンがクリックされるたび) そのターゲットの値をそのリストでの次の要素に変更します。

  • Increment- アクション (IncrementVariable, IncrementDict, IncrementField...) はある値 (デフォルトでは1) をターゲットの値に追加します。これらはフィールドを小さくするのにも使えます。

LocalVariableValue bar value と LocalVariableInputValue input value が追加されました。

HTTPS/HTTP Fetch link

Ren'Pyは新しい renpy.fetch関数を使って、HTTPS/HTTP Fetch をより良くサポートするようになりました。Requests ライブラリは引き続きデスクトップとモバイルでサポートされていますが(Ren'Pyの内部で使用されています) :

  • HTTPS と HTTP URL に対する GET, POST, PUT リクエストのサポート

  • ウェブプラットフォームのルールに従って、ウェブプラットフォームからの取得をサポートします。

  • ダウンロード中ゲームを停止しません。

  • バイトまたは JSON にエンコードされたオブジェクトとしてデータを受け取られます。

  • バイト、文字列、または JSON からデコードされたオブジェクトとしてデータを返せます。

アクセス性 link

スクリーン言語の Displayable で使用できる新しい group_alt プロパティーにより、制作者は関連する Displayable のグループの1つが最初に話される時に話されるテキストを指定できます。

スクリーン言語の Displayable オブジェクトで使用可能な新しい extra_alt プロパティーはその Displayable オブジェクトに関する追加情報を提供するために '?' キーが押されたときに話されるテキストを制作者が指定できるようにします。

これらのプロパティーは、子プロパティーでより具体的な値によってオーバーライドされない限り、どちらも displayable の子プロパティーに継承されます。

新しい renpy.alt() 関数を使用して、セルフボイスシステムを使用してテキストを話せます。

__future__ in python link

Ren'Pyで実行されるPythonコードに対して、 __future__ compiler ディレクティブ を渡せるようになりました。これは、適用したい .rpy ファイルの先頭に rpy python xxx を記述して行います。 xxx は将来の機能の名前です。例 :

rpy python annotations

翻訳の改善 link

ほとんどの台詞に対し、 Ren'Py が翻訳をサポートするために生成するオブジェクトが3分の1になりました。これにより、起動時間を短縮し、メモリ使用量を減らせます。

加えて、 Ren'Py は翻訳が必要になるまで翻訳の読み込みを延期できるようになりました。これにより、ゲームが巨大で多くの言語が存在する場合の起動時間を改善できます。

遅延翻訳読み込みはデフォルトでは無効になっています。 :ref:`deferred-translations`のドキュメントに有効にする方法と注意点が記載されています。

Scene, Show, Hide トランジション link

新しく scene、show、hide トランジションが withステートメントやwindow show トランジションが続かない一連の scene、show、hide ステートメント後に、自動的に実行できるようになりました。

これは新しい _scene_show_hide_transition 変数で設定され、 Scene, Show, Hide 後の自動トランジション に記載されています。

Android link

Android ビルドシステムは、最新バージョンの Gradle と Android Gradle プラグインを使用するように更新されました。このため Ren'Py は Java の最新の長期サポートバージョンである Java 21 をサポートするとともに必要となったことを意味します。

Ren'Py に一連の変更が加えられ、2GB 以上のゲームを Android や iOS デバイスにダウンロードできるようになりました。これを行う方法は Downloader for Large Games on Mobile に記載されています。基本的にはデバイスにダウンロードされる非常に短いゲームと、短いゲームの実行時にデバイスにダウンロードされる大きなゲームの 2 つのゲームを作成する必要があります。

android でのユーザーに表示されるバージョンは build.version から取得されるようになりました。このデフォルトは config.version です。

rapt/prototype プロジェクトに配置したアセットは、ビルドされたプロジェクトに配置されます。

Android のビルド プロセスで生成されるファイルの名前にはバージョン番号が含まれるため、ビルドを区別しやすくなりました。

Web link

Ren'Py がウェブプラットフォーム上でフルスクリーンになる方法が変更され、デスクトップとモバイルの両方のウェブブラウザとの互換性が向上しました。

Ren'Py は、ブラウザがクリックを検知してオーディオを再生できるように、開始時に透明な div でゲームを覆うようになりました。クリックをゲームにプロキシし、この検出が終了するとdivを非表示にします。

HTTPS/HTTP Fetch 関数が Web プラットフォームでサポートされるようになり、Web ページは他の Web ページと同じルール (CORS) に従って HTTPS および HTTP 要求を行えます。

アップデータの変更 link

Ren'Py Updater は新しいフォーマットを使うように書き直されて、完全に Ren'Py で実装されました。これによりより多くの Web ホストと互換性が持ち、初めて https をサポートします。

アップデーターは、初回実行時に署名キーを作成し、生成された更新にそのキーで署名します。アップデーターが実行されると、そのキーで更新が実行されているかどうかがチェックされます。これにより安全な更新を生成するための余分な作業がなくなりました。

翻訳 link

ランチャーと the questionにデンマーク語の翻訳が追加されました。

多くの翻訳が更新されました。

新機能 link

新しい config.layer_transforms 変数により レイヤー毎や config.layers のすべてのレイヤーに適用される transform のリストを指定できるようになりました。

新しい Continue アクションは、 (デフォルトでは、自動保存とクイック保存を含む)最後の保存をロードします。これは、メインメニューからゲームを続行するための使用を意図しています。

新しい ruby_line_leading スタイルプロパティーは、ルビテキスト (ふりがな) を含めるための行の上の追加行を制御します。これは通常、既存の line_leading プロパティよりも少ないスペースを使用します。

"reset" を引数として :func:'Preference' を呼び出すことで、設定をデフォルト値にリセットできるようになりました。

新しい defaultdict クラスがデフォルトの Ren'Py の名前空間にあります。これは Python の collections.defaultdict に似ていますが、ロールバックに参加します。

新しい MultiRevertable クラスは、ロールバック可能なオブジェクトとデータ構造(リスト、セット、dictなど)の両方を持つクラスを定義できるようにします。

新しい config.pass_controller_events 変数と新しくドキュメントに記載された config.pass_joystick_events 変数により、ゲームはコントローラーとジョイスティックのイベントに直接アクセスできるようになりました。

新しい renpy.get_screen_variable`と :var:`renpy.get_screen_variable により、特に Action サブクラスでスクリーン変数にアクセスできるようになりました。

新しい build.time 変数には、ゲームがビルドされた時刻が設定されます。

新しい build.info 変数により、ビルド時に情報を保存し、配布されたゲームでそれを読み返せます。

presplash 画像の左上端のピクセルが透明な場合、プリプラッシュは1ビットの透明度を持つウィンドウに表示されます。

新しい EditFile() アクションはファイルのある行をテキストエディタで開こうとします。

SVGファイルの仮想dpiが Image() の新しいパラメータ dpi で設定できようになりました。

新しい CopyToClipboard() アクションはテキストをクリップボードにコピーします。

新しい関数 renpy.confirm() を使用して python から confirm スクリーンを使用できます。

新しい renpy.reset_all_contexts() 関数はスタックから全てのコンテキストを削除し、次のステートメントから継続する新しいコンテキストを作成します。これを使用してロード時やエラー発生時にゲームを完全にリセットできます。

新しい renpy.last_say() 関数は最後の say ステートメントの情報を返します。

新しい iap.request_review() 関数を使用して、 Google Play と Apple App Store でのゲームのレビューをプレイヤーに要求できます。

新しい gui.history_spacing 変数は新しく作成されたゲームでの履歴間のスペースを制御します。

nw テキストタグが値を取れるようになり、タグを含む行はその値の秒数後、自動的に終了します。一般的な "{w=2}{nw}" が "{nw=2}" と書けるようになりました。

Moviekeep_last_frame パラメーターを取るようになりました。 True を指定すると、ループしない movie は動画終了後に最後のフレームを表示します。

jump expression ステートメントに ".local_name" という形でローカルラベル名を指定できるようになりました。以前は "global_name" または "global_name.local_name" だけが使用可能でした。

ユーザー定義スクリーン言語ステートメント が他のスクリーン言語ステートメントから全てのプロパティーをコピーできるようになりました。

新しい renpy.invoke_in_main_thread() 関数を、Pythonスレッドから使用して Ren'Py のメインスレッドの関数を呼び出せます(ほとんどのRen'Py関数はメインスレッドからのみ呼び出せます)。

その他の変更 link

ランチャーは template-projects をサポートするようになりました。これらはデフォルトの GUI を置き換えるプロジェクトでの使用を意図しています。新しいプロジェクトを作成するときにテンプレートプロジェクトが選択された場合、Ren'Py はテンプレートプロジェクトをコピーし、名前と翻訳を更新しますが、スクリプトファイルやイメージには変更を加えません。

ランチャーは空白を減らすためにわずかに再設計され、翻訳のためのスペースは確保しつつ、いくつかの画面でより多くのオプションを表示できるようになりました。

コマンドラインインターフェイス がドキュメントに記載され、コマンドラインから Ren'Py プロジェクトをビルドできるようになりました。

その他の変更 link

screen に適用される非表示と置換の transform イベントが、同じ画面が再表示された場合でも、常に最後まで実行できるようになりました。これにより、 say screenや bubble screen のようなすぐに再表示される可能性のある screen で transform イベントを使用できます。

コンテナ(fixed、hbox、vbox、side、grid、viewport、vpgridなど)は、 transform イベント(hover, idle, insensitive, selected_hover, selected_idle)を子に渡すようになり、ボタンの子がそれらのイベントに応答する独自の transform を持てるようになりました。

persistent._clear() は永続変数を更新する default ステートメントを再実行し、永続変数が完全に初期化解除されるのを避けられます。

focus_mask によって使用されるピクセルの透明度確認は、透明でないピクセルのバウンディングボックス内にある場合にのみ GPU を使用するようになり、場合によってはパフォーマンスが向上します。

Ren'Py はすべてのプラットフォームで GL2 レンダラーをデフォルトで使用し、config.gl2 変数を無視するようになりました。これは古いGLレンダラーにはGL2レンダラーにはない問題があるためです。古いハードウェアでは、shift+G を押して直接有効にするとまだ GL レンダラーを使えます。

次の場合、 PCプラットフォーム(Windows、Mac、Linux)では、ゲームウィンドウが移動すると、その位置が保存されます。ウィンドウの位置は、ゲームが再び実行されたときに復元されます :

  • プレイヤーの画面レイアウトが変更されていない

  • ウィンドウがすべてプレイヤーのモニター範囲に収まっている

そうでなければ、ウィンドウはプライマリ画面の中心になります。

(Steam Deckを含む)コントローラーでは、Bボタンの機能がゲームメニューの表示・非表示に変更されました。Bボタンの以前の動作(ボタンの代替関数の選択)は Xに移動しました。

android と iosから、デフォルトではないハードウェアビデオの再生パスが除去されました。このパスは Ren'Py がサポートしているビデオフォーマットのサブセットをサポートしていたため、2020年以降はデフォルトではありませんでした。

Ren'Py は angle および anchorangle プロパティーに指定された角度が 0 度以上 360 度未満の範囲にあることを強制するようになりました。以前は、この範囲外の角度は未定義の動作をしていました。360度の変更はもはや動きを引き起こさず、代わりに0度の変更として扱われます。

ATLで angleanchorangle をアニメーションする場合、方向を指定しないと、0を通る場合でも最短の円弧が使用されます。

Ren'Py は ATL ブロックが存在してもそのブロックが空である場合にエラーを生成するようになりました(例えば、 show eileen happy: の後にインデントされた行がない場合など)。

右から左への言語と互換性のあるインターフェイスを作るために、 box_reverse スタイルプロパティーは2つの方法で動作を変更しました :

  • box_reverse が有効な場合、スペースは displayable の提供順と同じ順で提供されます。以前は逆順でした。これはいくつかの Displayable のサイズを変更するかもしれません。

  • box_wrap が設定された hbox は下から上ではなく、上から下に折り返すようになりました。 box_wrap が設定された vbox は右から左ではなく左から右に折り返すようになりました。

あるファイルによりオートリロードが発生するとき、 Ren'Py はそのファイルがあるディレクトリーすべての親ディレクトリーで git のロックファイルの存在を確認するようになりました。オートリロードは git の処理が完了し、ロックファイルがなくなるまで延期されます。

以前はサポートされていなかった色空間変換を含む AV1 ムービーは Ren'Py をクラッシュさせる可能性がありましたが、現在は正しく再生されます。

websockets パッケージが Ren'Py 8 に含まれるようになりました。これは Ren'Py のデスクトップおよびモバイル (ウェブではない) 版から websocket ベースの API に接続するために使用できます。このパッケージは Python 3 に依存しているため、Ren'Py 7 には含まれていません。

8.1.3 / 7.6.3 link

変更点 link

Ren'Py が config.gl2 を macOS では True と考えるようになりました。これは新しいバージョンの macOS gl2 レンダラーの window リサイズにいくつかの修正がありましたが、 gl レンダラーにはなかったためです。

ビデオ再生の MMX アクセラレーターが Windows と Linux で再度有効になりました。

The way the Steam Deck keyboard is shown has changed. They keyboard is now shown, once, when a text input is displayed. By default, the keyboard is shown at the top of the screen, and the keyboard will only be shown once. If it's hidden (for example, the Steam button is pressed), the player needs to hit Steam+X to show it. This works around issues with the Steam Deck.

32-bit windows Live2DライブラリがRen'Py 7にインストールされるようになりました。このライブラリを入手するには Live2D を再インストールする必要があるかもしれません。

修正 link

キーがテキストに紐付けられない問題 (例えば、 "K_r" ではなく "r" キーシンボル)が修正されました。

いくつかのドキュメントの修正がありました。

ゲーム開始時にロールバックが動作しない問題を修正しました。

8.1.2 / 7.6.2 link

変更点 link

多くのドキュメントが改善されました。

renpy.classify() を使用する場合、ディレクトリが /. で終わらないパターンにマッチするようになりました(例えば、 "renpy.app" は renpy.app ディレクトリーにマッチします)。

ATL が変更され、 transform を継続するか再始動するかを決定するのに詳細な比較をするようになりました。つまりその transform が使用するグローバル変数が変更された場合、 transform が再始動されます。

viewport の子のスタイルが drag のフォーカスを得たときに変わらなくなりました。これは滅多に使用されませんでしたが、スタイルの変更により drag が遅くなったり失敗することがありました。

ロード時に、ユーザーとのインタラクションがある最後のステートメントの後にゲームがロールバックされるようになりました(以前は現在のステートメントの開始にロールバックしていました)。これによりロードによるロールバックが他のロールバックと一致するようになりました。

_autosave 変数が、終了時や選択肢を含む強制自動保存よりも優先されるようになりました。

PYTHON* 変数は、ランチャーから Ren'Py プロジェクトを起動するときに環境変数からフィルタリングされます。

セルフボイシングモードでは、Ren'Pyはたとえ通知ウィンドウが消えても、セルフボイシング通知がプレーヤーに完全に伝わるようにしました。

セルフボイシングは、プレイヤーに近いスクリーンを、プレイヤーから遠いスクリーンより先に話すようになりました。

Frame() は、描画するフレームが両方の次元で少なくとも1ピクセルの大きさであることを保証するようになりました。

renpy.pause() can now roll forward to calls and jumps from screens.

web ブラウザでは、 "display" : "window" preference のフルスクリーンモードが無効になりました。

スキップ中はマウスボタンを隠せるようになりました。

修正 link

web 版でのフルスクリーン化の問題を修正しました。

Ren'Py 8 ランチャーはシステムエンコーディングで表現できないパスにあっても Windows でゲームを起動できるようになりました。

game/ ディレクトリーから Python をインポートする機能が改善され、 Python の PEP 302 への遵守が改善されました。

GamepadExist() がドキュメントの記載どおりに動作するようになりました。この修正の副作用として、開発者モードで gamepad screen が Help に表示されるようになりました。

An issue analyzing nested comprehensions in screen has been fixed, fixing a case where nested comprehensions could cause default variables to not be available.

アニメーション中にインタラクションが再開しても viewport の惰性が続くようになりました。

play (および renpy.music.play()) への if_changed 節がループを考慮して維持するようになりました。

Linuxでの VS Code の起動が修正されました。

Ren'Py 7 でのいくつかのクラッシュが修正されました。

Movie 関数は再生前に関連するチャンネルの存在を保証するようになりました。これによりセーブファイルから Movie をロードしたときの問題を修正できます。

8.1.1 / 7.6.1 link

Android link

Android用のキーを作成するとき、Ren'PyはAPKとPlay Bundleで同じキーを使うようになりました。新しいゲームでは異なるキーを使用する必要はありません(既存のゲームについては、Ren'Pyは既存の別々のキーを使い続けます)。

Google Play に bundle 版としてアップロードされたゲームの APK キーが異なるとして拒否されたとの報告を受けました。これは Ren'Py の古いリリースでバンドル用の APK キーが使われていたことが原因でした。この問題の解決方法は 非互換の変更 に書かれています。

修正 link

"system cursor" Preference()config.mouse_displayable にも適用されるようになりました。以前は config.mouse を無効にするのみでした。

Web オーディオは終了時間を duration ではなく、時間として扱うようになりました。

オーディオボリュームとパンがロールバックに参加できない問題が修正されました。

必要な属性がすべて存在しないにもかかわらず、 Live2D が画像を選択できた問題を修正しました。

ビデオの開始、終了、ループ時間のサポートが復活しました。

hotspot の元となる imagemap の画像が const でない場合、 hotspot を const にできなくなりました。

macOS でウィンドウをリサイズ出来ない問題が修正されました。

font ディレクトリーのフォントに対する lint の問題が修正されました。

オブジェクトクラスを継承していたクラスがそのオブジェクトクラスを継承しないように変更されると、 Ren'Py がクラッシュすることがありました。 Ren'Py はこのエラーを診断するようになり、 config.ex_rollback_classes でこのエラーを抑制できるようになりました。このエラーは開発者にのみ表示され、それ以外は無視されます。

その他の変更 link

The Ren'Py sync screens now use styles prefixed with sync, allowing basic customization without having to edit the screens.

Ren'py はテキスト編集が出来ないときはテキスト入力メソッドを無効化します。このときインプットメソッドのスペースキー使用が有効であったとしてもスペースキーでゲームを進められます。

ATL トランジションがアニメーション時間軸を使用するようになりました。これはインタラクションが再スタートするまでは一般的に以前と同じ動作ですが、以前はトランジションが正しく再スタートしないことがよくありました。

Preference にはデフォルトがなくなりました。つまり、 default ステートメントを使用してすべての preference を変更できます。

The absolute() type, used to represent absolute amounts of pixels, now ensures the result of mathematical operations with integers and floats remain absolute numbers. This fixes a class of problems where operations performed on absolutes could produce the incorrect type, leading to layout problems.

Live2D は attribute_filter の評価後にモーションをチェックするようになり、新しいモーションがあれば以前のモーションを維持しないようになりました。

8.1 / 7.6 link

ドキュメントの改善と修正 link

多くのドキュメントの改善と修正があり、それらの多くは変更履歴にありません。

ドキュメントにダークテーマを含む新しいテーマが導入されました。

Ren'Py 同期 link

Ren'Py Sync は、 Ren'Py プロジェクトの一環として運用されるサーバーを使って、デバイス間でセーブファイルを簡単に移動できるようにする新機能です。例えば、プレイヤーが出かけるとき、自分のコンピュータで "Upload Sync" をクリックしてセーブファイルをアップロードし、ショートコードを取得します。その後、携帯電話のゲームのコピーで "Download Sync" を選択し、コードを入力すれば、旅行中もプレイを継続できます。

Ren'Py Sync はプライバシーを考慮して設計されており、セーブは暗号化され、そのゲームのタイトルのハッシュのみがサーバーに送信されます。

Ren'Py Sync は新しい UploadSyncDownloadSync アクションで有効になります。

吹き出しによる台詞 link

Ren'Pyに新しい 吹き出し 台詞システムが追加されました。これはコミックのような吹き出しで台詞を表示する包括的なシステムで、吹き出しの位置を変えたり、吹き出しの見た目を対話的に変更できるインタラクティブなエディタを含んでいます。

既存のゲームに吹き出しサポートを追加するには、ゲームにファイルとスクリプトを追加する必要があります。吹き出しのドキュメントに必要な変更が記述されています。

プラットフォームの改善 link

Web link

Ren'Py 8.1 を使って、 web ブラウザ内で動作するゲームを作成できるようになりました。 web ブラウザ内で動作する場合、 Ren'Py は Python 3.11 を使用します(他のプラットフォームでは3.9を使用します)。

Ren'Py 8.1 では、 Ren'Py を使ってブラウザ内で動作するプログレッシブ Web アプリを作成できます。ブラウザやプラットフォームによっては、ネイティブアプリケーションに似た方法でデバイスに web ゲームをインストールできます。他のプラットフォームでは、 Web アプリをホーム画面に固定できます。

新たに Preference() に "web cache preload" が追加されました。有効にすると、ゲームはすべてのゲームデータをウェブサーバーからデバイスにダウンロードします。オンラインの場合、ゲームはダウンロードされたデータをチェックし、必要な場合のみ新しいデータをダウンロードします。オフラインの場合、ゲームはダウンロードしたデータを使用します。

Ren'Py がウェブプラットフォーム上で動画を再生できるようになりました。ブラウザがサポートしている動画だけが再生できます。

Macintosh link

Mac では、 Ren'Py は現在、 Intel と Apple Silicon の両方のプロセッサでネイティブに動作するユニバーサルバイナリを使用しています。

Android link

Android では、 android.keystore ファイルと bundle.keystore ファイルが、 rapt ディレクトリーではなく、プロジェクトのベースディレクトリーにあることが期待されるように変更されました。これにより、プロジェクトを異なるキーでビルドできるようになり、複数の Android バージョンで同じキーを使用できるようになります。

新しい "Generate Keys" ボタンを押すと、古い keystore ファイルが存在する場合、 Ren'Py が古いファイルをプロジェクトにコピーするよう提案します。

android 設定ファイルの名前が .android.json から android.json に変更されました。古いファイルが存在する場合は、Ren'Py が自動的に新しいファイルを作成します。

スティッキーレイヤー link

スティッキーレイヤーとは、あるタグがその上に表示されると、非表示にされるか、他のスティッキーレイヤーに表示されるまで、そのタグのデフォルトレイヤーとして扱われるレイヤーのことです。

つまり、デフォルト以外のレイヤーにタグを表示して、そのレイヤーがスティッキーであれば、レイヤーを指定しなくとも、 show または say ステートメントによって設定された属性で更新されることを意味します。

以下の例では、eileen のデフォルトレイヤーが master で、near がスティッキーレイヤーである前提となります

show eileen onlayer near
eileen happy "Hello there!"  # will now work, where previously it would not
show eileen excited          # implicit onlayer near
hide eileen                  # implicit onlayer near
show eileen                  # implicit onlayer master, eileen's default

この機能のデフォルトでは、 master レイヤーと renpy.add_layer() で作成されたレイヤーは、新しいパラメータ sticky=False が渡されない限り、スティッキーになります。

detached レイヤーと Layer Displayable link

detached レイヤーは自動的にシーンに追加されないユーザー定義のレイヤーです。detached レイヤーは新しい Layer displayable を使って表示され、他のレイヤーの上に表示できます。

この意図の1つは、シェーダーやその他の transform 効果をタグのグループに適用できるようにしながら、 show や say ステートメントなどの他のシステムで通常通りに動作できるようにすることです。また、同じレイヤーの複数回表示もできます。たとえば、反射や、同じチャンネルを表示する複数のテレビなどです。

detached レイヤーは一般的なレイヤーと同じようにはシーン構築に参加しないので、 add_layer() を通してではなく config.detached_layers で直接定義され、同時にスティッキーレイヤーとしても扱われます。

新しい画像フォーマットとオーバーサンプリング link

このリリースでは 2 つの新しい画像フォーマットを追加しました :

  • AV1 Image File Format(AVIF)は、最新の圧縮技術を使い、JPEG、PNG、WebPよりも小さなファイルを生成する新しい画像フォーマットです。多くの場合、画像をAVIFに変換して画質を犠牲にせずサイズを小さくできます。

  • SVG files are a vector graphics format used on the web. Ren'Py supports a SVG files containing a subset of SVGs capability. (Notably, Ren'Py does not support text in SVG files.) Ren'Py will automatically oversample (or undersample) SVGs when the game is scaled, to ensure the SVGs remain sharp at any resolution, similar to the way it oversamples text. This makes svgs a reasonable choice for interface elements that need to remain sharp.

Ren'Py の今回のリリースでは、 PNG, JPEG, WebP, AVIF のようなラスター画像のオーバーサンプリングもサポートしています。これらの画像では、ファイル名に @ と数字を含めることでオーバーサンプリングが行われます。例えば、 "eileen happy@2.png" は2倍オーバーサンプリングされます。これにより、コードの変更を最小限に抑えながら、ゲームのリマスター版を簡単に作られます。イメージマニピュレーターは、今では時代遅れですが、古いゲームでは一般的なもので、オーバーサンプリングイメージをサポートしています。

ラスター画像に対するオーバーサンプリングでは画像ファイルは完全な解像度で読み込まれますが、オーバーサンプリング係数によって小さくなったかのように扱われます。例えば、 1000x1000 の画像が係数 2 でオーバーサンプリングされた場合、レイアウトでは 500x500 の画像として扱われます。ゲームが拡大されても、画像データのすべてが画像のシャープさを保って利用出来ます。

新しい config.physical_width 変数と config.physical_height 変数を一緒に使って画像のオーバーサンプリングをすると、ゲームのレイアウトを調整せずにゲームの解像度をアップグレードすることもできます。

AV1 Video link

Ren'Py が最新の AV1 ビデオフォーマットに対応しました。AV1 は WEBM と MKV コンテナでサポートされています。AV1 の動画は、以前のベストコーデックであった VP9 でエンコードされた同等の品質の動画よりも 30% ほどミニサイズになるはずです。

新しい AV1 フォーマットは、デコードにより多くの CPU を必要とすることに注意してください。 VP9 をスムーズに再生できるハードウェアでも、 AV1 では苦労する可能性があります。

オーディオ link

ミキサーは、オーディオ機器やコンピュータのボリュームコントロールと同じように、デシベル(電力)で動作するようになりました。ミキサースライダーが空の場合は最大音量より-40dB、バーがいっぱいの場合は0dB、つまり最大音量を表します。これによりミキサーをよりダイナミックにします。以前は音量スライダーはほとんど最低付近でした。今は音量は人間が感じるのと同様に増減します。

config.default_music_volume, config.default_sfx_volume, config.default_voice_volume などのミキサーのデフォルトボリュームをコントロールする変数が、0.0 が -40 dB で 1.0 が 0dB で動作するように変更になりました。 Preferences.set_mixer()Preferences.get_mixer() 関数と同様に SetCharacterVolume() も動作します。

オーディオのフェードインとフェードアウト機能も、この音量を使って動作します。これにより、フェードしていることが最後だけでなく、フェードアウトやフェードインの全過程にわたって明瞭になります。オーディオフェードの実装も、非常に短い長さのフェードができるように書き直されました。以前は、フェード時間が短すぎるとエラーが発生していました。

config.fadeout_audio 変数(config.fade_music からリネームされました)は、オーディオを停止するとき、または play を使用してオーディオを変更するときに使用されるデフォルトのフェードアウトを制御します ( queue では使用されません)。デフォルト値は 0.016 秒になり、オーディオが突然停止した時に発生していたポップノイズがなくなりました。

音声のパンニング(renpy.music.set_pan())が一定音量になったので、音声をパンニングしても音量が変わらないようになりました。

ドラッグ可能 viewport link

ユーザーが viewport を、その内部のボタンや他の Displayable にフォーカスが当たっていても、ドラッグできるようになりました。 Ren'Py は、ユーザーのドラッグを検知して、 viewport ポートにフォーカスを移すようになり、 viewport が移動できるようになりました。

viewportsvpgridsdraggable プロパティは "touch" のような screen variant を受け取られるようになりました。この場合、その viewport は touch が有効な場合にのみドラッグ可能になります。

_ren.py Files - Ren'Py in Python link

新しい _ren.py ファイルフォーマット により、 Ren'Py スクリプトが Python ファイルに組み込められるようになりました。例

"""renpy
init python:
"""

flag = True

これは次と等しいです。

init python:

    flag = True

この新しいフォーマットにより Python の多いクリプトファイルが Ren'Py スクリプトとして実行できるまま Python用のツールで編集できるようになります。

定数 store link

Ren'Py で 名前付き store をその store の _constant 変数を設定して定数として宣言できるようになりました。 True なら、 定数 store 内の変数はセーブされず、その store からのみアクセス可能なオブジェクトはロールバックに参加しません。

定数 store を宣言する理由は、 store と変数ごとにロールバックのサポートに必要なロールバックがあるためです。 store を定数として宣言するとそれらのオーバーヘッドをなくせます。

以下の store はデフォルトで constant として宣言されています。

_errorhandling _gamepad _renpysteam _sync _warper audio achievement build director iap layeredimage updater

定数 store の変数は初期化中では変更可能ですが、初期化後は変更してはいけません。

隅付きかっこのルビテキスト link

ルビテキスト: 読みや訳に使うメインの文字の上にある小さな文字を、全角隅付きかっこ( 【】 )で囲み、全角または半角の縦線文字 (|または |) で区切って書けるようになりました。例

e "Ruby can be used for furigana (【東|とう】 【京|きょう】)."

e "It's also used for translations (【東京|Tokyo】)."

文章中では左隅付きかっこ (【) は二重の "【【" にしてルビテキストの始まりとして解釈されないようにします。例

e "【【This is not | ruby text.】"

アクセス性 link

新しい config.tts_substitutions 変数は、ゲームがセルフボイスのための置換ルールを提供できるようにします。これは、音声合成エンジンによって間違って発音される可能性のある単語の発音を、制作者がコントロールできるようにするためのものです。

例 :

define config.tts_substitutions = [
    ("Ren'Py", "Ren Pie"),
]

Ren'Py という単語を、セルフボイスが話すたびに「Ren Pie」と発音するようになります。

セルフボイシングは、ボイスボリュームミキサーを尊重するようになりました。

トークンのセキュリティを守る link

Ren'Py は セキュリティー で説明されているように、セーブファイルをデバイス間で移動するときにトークンを使ってユーザーに警告するようになりました。

この仕組みは特定のコンピュータで Ren'Py を初めて実行したときにトークンを生成して機能します。このトークンはセーブファイルや永続データに含まれます。異なるコンピュータのトークンがセーブファイルで見つかった場合、ユーザーに警告が表示され、続行するかどうか尋ねます。 yes を選択した場合、そのコンピュータからの保存をすべて自動的に受け入れるかどうかを尋ねられます。

永続的なデータは、現在のコンピューターまたはトークンが受け入れられたコンピューターのものであればロードされます。

セーブトークンをサポートするバージョンの Ren'Py でゲームを初めて実行したとき、そのゲームに存在するすべてのセーブファイルがチェックされ、それらのファイルにトークンが存在しない場合はトークンが追加されます。これにより、Ren'Py 8.1/7.6 以降のバージョンへのアップグレード時にプロンプトが表示されるのを防げます。

可能性があるときにセキュリティーの警告をエンドユーザーが受け取れることは重要なので、意図的にこの機能を無効にする方法はありません。

新しい検索パス link

game ディレクトリーで見つからないとき、 Ren'Py はオーディオファイルを game/audio ディレクトリーで、フォントファイルを game/fonts ディレクトリーで検索するようになりました。画像はまだ game/images ディレクトリーで検索されますが、他のファイルはここでは見つからないでしょう。

新規 3D Stage プロパティー link

3D ステージに影響する新しいプロパティーがあります。

point_to

カメラが向く座標または、スプライトが向く座標を選択するか、スプライトをカメラに向けます。

xrotate, yrotate, zrotate

スプライトまたはカメラを指定の軸中心で回転します。

orientation

スプライトまたはカメラを一度に 3 つの軸中心に最短経路で回転します。

Live2D link

Ren'Py は Live2D Cubism Editor 4.2 の新機能をサポートするようになりました。これらの機能をサポートするため、 Cubism 4 Sdk for Native R6_2 以降を使用する必要があります。

Live2D は x86_64 Android でサポートされるようになりました。

新しい Live2D.blend_opacity メソッドにより Live2D update_function が Live2D model の透明度を変更できるようになりました。

ランチャーとエンジンの翻訳 link

機械翻訳を使用してランチャーとエンジンが使用する文字列を可能な限り更新しました。これにより、何年も更新されていない翻訳が更新されました。

これらの翻訳を改善したい場合は、そうすることができます。 launcher/game/tl/language にある .rpy ファイルを編集して、私たちに送ってください。その際には、"Automatic translation"の行を削除してください。

次の言語は自動翻訳により更新されました :

  • フィンランド語

  • フランス語

  • ドイツ語

  • ギリシャ語

  • インドネシア語

  • イタリア語

  • 日本語

  • 韓国語

  • ポルトガル語

  • ポーランド後

  • ロシア語

  • 簡体字

  • トルコ語

  • ウクライナ語

次のの翻訳が手動で更新されました。

  • フランス語

  • ポーランド後

  • スペイン語

  • 日本語

  • ウクライナ語

Conflicting properties link

Setting two conflicting style or transform properties at the same time, for example xalign and pos, or ycenter and yanchor, has always been undefined. The actual behavior has always been changing across versions of Ren'Py, in particular between Python 2 and Python 3.

The new config.check_conflicting_properties variable makes Ren'Py raise an error when such a conflict is detected. Due to a mistake in the former default input screen, this variable is only enabled in newly-created projects. Nonetheless, it is strongly advised to define it to True in all projects, to fix all revealed conflicts, and to keep it to True afterwards.

さらなる新機能 link

input displayable が複数行の入力を受け取るようになりました。

新しい JSONDB システムにより、開発者はゲームスクリプトと一緒に保存できる JSON ファイルにデータを保存できるようになりました。例えば JSONDB を使用して吹き出しの情報を保存できます。

新しい areapicker displayable は、プレイヤーが画面上のエリアを選択できるようにするツールに利用出来ます。

Moviegroup 引数を取れるようになりました。 Movie があるグループ内にあり、起動時点で同じグループの別の Movie が前のフレームに表示されていた場合、 Movie は以前の Movie の最後の画像を表示します。これはムービーのスプライトをシームレスに切り替えるためのものです。

新しい config.file_slotname_callback 変数により、開発者はファイルスロット名の生成方法をカスタマイズできます。この応用として、セーブスロットに接頭辞を付けられます(例えば、DLCセーブと非DLCセーブを選択するため)。新しい autosave_prefix_callback により、オートセーブに同様に接頭辞を付けられます。

開発者(Shift+D)メニューからアクセスできる新しいツールで、永続的なデータを見られます。

Interactive director は画像から属性を削除するステートメントを作成できるようになりました。

show screenhide screen, call screen ステートメントが expressionas, onlayer, zorder, with 節が受け取られるようになりました。これらは showhide ステートメントの対応する節と同じ意味です。

renpy.include_module() 関数を使って rpym ファイルの init ブロックをゲーム他の init ブロックに挟見込むようにロードできるようになりました。

新しい "voice after game menu " preference は、ゲームメニューが表示された後も音声が再生され続けるかどうかを制御します。

ユーザー定義のステートメントで、 default ステートメントの実行と同時に関数を実行できるようになりました。これは init フェーズの後、ゲームが始まる前、セーブがロードされた時、ロールバックの後、lint の前、そして潜在的にはその他の時です。

新しい config.after_default_callbacks は、 default ステートメントが実行された直後にコールバックを実行するようにしました。

interactive director では、属性名を右クリックして属性を否定できるようになりました。

The Text() displayable now takes a new tokenized argument. When true, the Text displayable expects to take a list of tokens taken from a custom text tag.

2 つの新しいレイヤーが Ren'Py の一部になりました。 "top" レイヤーは他のレイヤーよりも上に表示され、トランジションには参加しません。これは、常に表示される情報を表示するのに便利です。 "bottom" レイヤーは他のレイヤーの下に表示されます。 bottom レイヤーは、常にアクティブな状態でキーを扱うのに便利です。

Ren'Py は C90 エンコーディングのタイフォントをサポートするようになりました。これはユニコードのプライベート領域を使用し、基本文字、母音、子音マークを組み合わせた字体を提供します。 C90 エンコーディングをサポートするタイフォントを選択し、language を "thaic90" に設定するとこれは有効化されます。

マウスのキーシンボルにマウスボタンが押されたときのキーボードモディファイアの状態に対応するモディファイアが指定できるようになりました。例えば "shift_mouseup_1" はシフトキーを推したままマウスボタン1を離すとトリガーされます。

キーシンボルが作り直されて、 num ロックがオフの時は (矢印やホームキーのように) テンキーに紐付けられるようになりました。 the keymap はテンキーをよりよく利用するために作り直されました

通常、非表示になっているものと同じタグや名前を持つ displayable やスクリーンが表示されると、その非表示になっている displayable やスクリーンが削除され、非表示の transform はキャンセルされます。新しい show_cancels_hide トランスフォームプロパティーは、この動作を制御します。

(shift+Oでアクセスできる)コンソールの help コマンドが式を受け取られるようになしました。その場合、その式が参照する関数やクラスに対する pydoc ドキュメントを表示します。

新しい renpy.get_translation_identifier() 関数は台詞の現在行に対するユニークな識別子を返します。

新しい config.scene_callbacks 関数には scene ステートメントが実行されるか renpy.scene() 関数が呼び出されると呼び出される関数のリストが含まれます。

size テキストタグが乗数を取るようになったので、次のような書き方が可能です。

"{size=*2}This is double size{/size} and {size=*0.5}this is half size{/size}."

dismiss displayable がどのキーシンボルがその dimiss を実行するかを指定する keysym プロパティーを受け取られるようになりました。

新しく config.autosave_callback 変数はバックグラウンドでのオートセーブ完了後に実行されるようになりました。

新しい renpy.music.pump() 関数を呼び出すと、オーディオの変更を次のインタラクションの開始時ではなく、即座に反映させられるようになりました。主な用途としては、サウンドを再生し、そのすぐ後フェードアウトさせられます(デフォルトでは、play の後に stop が続くとそのトラックは再生されず、したがってフェードアウトもされません)。

新しい renpy.clear_attributes() 関数を使用すると、画像タグに付けられたすべての属性をクリアできます。以前の方法では、画像の表示と非表示を繰り返して必要があり、その結果、画面上の画像の配置もリセットされてしまいました。この関数ではそのようなことはありません。

新しい config.font_name_map 変数では、フォントファイルや フォントグループ に名前をつけられます。これまでは {font} タグ内でフォントグループを使用する方法はありませんでしたが、簡単に使用できるようになりました。

Scroll アクションは delay パラメーターを受け取るようになり、スクロール短時間アニメーションするようになりました。

新しい preferences.audio_when_unfocused preference で他のウィンドウを選択時に音声をポーズできるようになりました。

screen 言語の for ループが continuebreak ステートメントをサポートするようになりました。

適用するファイルの一行目に rpy monologue none ステートメントを使用するとダイアログの モノローグモード を無効にできるようになりました。

その他の変更 link

極座標のモーションプロパティ (around, radius, angle) は楕円ではなく円形のモーションを生成するようになりました。半径には利用可能な最小の幅と高さを使用し、高さとして算出された距離をスケーリングします。新しい anchoraround, anchorradius, anchorangle プロパティーは、極座標を使用してアンカーを配置できます。

Lint は到達されることのないステートメントをチェックし、そのステートメントを報告するようになりました。

Lint は使用されなくなった翻訳をチェックし、それらを報告するようになりました。

build.itch_channels 変数を使用してチャンネルを設定し、 itch.io を更新できるようになりました。

三重引用符で囲まれた文字列が一重引用符で囲まれた文字列が使用できるほとんどの場所で使用できるようになりました。最も顕著なのは、スクリーンで三重引用符で囲まれた文字列を使えるようになったことです。例

screen example():
    text """\
line 1
line 2
line 3"""

これにより 1 つのテキスト Displayable 内に 3 つの行を作成できます。

最大化されたウィンドウの状態が preference に保存されるようになり、ゲームを終了したときにゲームが最大化されていれば、次に再開したときにも最大化されます。

スクリーン言語 Displayable は最初の行に at transform を配置できるようになりました。

text "Spinny text" at transform:
    rotate 0.0
    linear 2.0 rotate 360.0
    repeat

スクリーン言語ステートメントが at プロパティーと at transform ブロックの両方を持てるようになりましたが、プロパティーが優先されます。

(接頭辞 __ がつく)ローカル変数が f-strings で使用されるようになりました。

セルフボイシングが有効なときは {nw} タグがセルフボイシングの終了を待つようになりました。

selected_insensitive スタイル接頭辞が生成されるようになり、 selectedselected_insensitive イベントは適切なときに transform に渡されるようになりました。

id つきの Displayable に prefer_screen_to_id プロパティーを指定出来るようになりました。これは、 スクリーンが提供するプロパティが Displayable 識別子によって提供されたプロパティーより優先するかを制御します。デフォルトでは、 Displayable 識別子によって提供されたプロパティーが優先します。

fadein 節は音声トラックをキューするときに使用できます。

Ren'Py は Steam Deck での BOverlayNeedsPresent の呼び出しを制限し、フリーズの問題を防ぐようになりました。

台詞は、その台詞が表示されるステートメントの間、ヒストリーリストにあるようになりました(つまりヒストリースクリーンに表示されます)。以前は、台詞の終了後にのみ表示されていました。

config.steam_appid が設定されていない場合、Ren'Py は game ディレクトリーに存在する steam_appid.txt ファイルを削除します。これは間違った app ID が使われるのを防ぐためです。

ミュート時にオーディオの音量が保持されるようになりました(これはゲームがミュートされても音量が0にならないことを意味します)。

非自己終了タグはテキストブロックの最後で閉じられることが明示的にドキュメントに記載されました。これは多くのバージョンの Ren'Py の動作でしたが、 lint の警告が発生していました。現在は、次は明示的に有効です

e "{size+=20}This is big!"

セルフボイシングと自動読み進めが同時に有効化されるようになりました。この場合、自動読み進めは台詞にフォーカスがあるときのみ実行されます。

Ren'Py は grid や vgrid を満杯にしなくてよくなりました。必要ならグリッドは null で埋められます。

renpy.register_statement()execute_init 引数は、 init_priority 引数を尊重するようになりました。以前は、すべての execute_init 関数は init 優先度 0 で実行されていました。

config.label_callback 変数は config.label_callbacks に名前が変更され、コールバック関数のリストを受け取れるようになりました。

ドキュメントの多くの関数、クラス、アクションのシグネチャ(引数の意味)が修正され、より安全に使用できるようになった。

Ren'Py は以前すべての空白スペースを 1 つのスペースにまとめていましたが、全角表意文字のスペース \u3000 のような非標準のスペースをサポートするようになりました。

8.0.3 / 7.5.3 link

セキュリティー link

MOD やセーブファイルの共有がセキュリティに与える影響について、プレイヤーが理解できるよう、ドキュメントに セキュリティー のページを新たに設けました。

変更と修正 link

Ren'Py が Android 13 に対応する Android API レベル 33 をターゲットに更新され、Google Play ストアに新しいゲームを追加できるようになりました。Play Billing ライブラリがバージョン 5 に更新されました。

:func::renpy.load_module でロードされたモジュール内の Init ステートメントが、 init-priority の順番で実行されるようになりました。

Lint は config.adjust_attributes を尊重するようになりました。

ブラーで透明になる場合に対応しました。

台詞をキャプションとして使用しているメニューの途中で翻訳言語が変わった場合、その台詞を追加した say ステートメントの最初にゲームをジャンプさせて、再翻訳を可能にするようになりました。

ゲームを開発しているとき、 Ren'Py は gui.preference() の最初の使用でデフォルトが指定されていない場合にエラーを出すようになりました。これは、そのような場合に実行時に起こりうるエラーをより明確にするものです。

多くのドキュメントが改善されました。

このリリースでは、Matrix を使用する transform プロパティーが正しくアニメーションされない可能性のある Matrix の等式に関する問題が修正されました。

Ren'Py はラムダ式に関連付けられた変数を適切に解析できるようになりました。

このリリースで、ウクライナ語のチュートリアルと The question がが追加され、ランチャーの翻訳が更新しました。

8.0.2 / 7.5.2 link

修正 link

オートリロード(shift+R)の動作にいくつか変更があり、エラー発生後やRen'Pyが謝った状態にあるときのリロードでRen'Pyが不正なセーブを作成しないようにしました。これらの変更の目標は変更前のセーブファイルを保持し、再利用することです。

Ren'Py 0.68 秒以下のフェードイン、フェードアウトを処理できるようになりました。以前はそのような短いフェードイン、アウトはアンダーフローを起こし、フェードが発生しませんでした。このリリースでは、フェードイン、アウトの正確な時間は厳密には保証されません。

achievement.steam (または _renpysteam) のいくつかの関数が achievement.steamapi の最実装時に機能しなくなっていた問題が修正されました。

aarch64上でランチャーから配布物のビルドが出来ない問題が修正されました。

store に大量の変数があるとき、 CPU とメモリーの使用が極端になる問題を修正しました。

異なる言語で保存されたセーブスロットのロードでも config.after_load_transition が実行されるようになりました。

Ren'Py 8 でアプリ内課金(IAP)を妨げていたいくつかの問題が修正されました。

チュートリアルゲームでサンプルコードが、英語以外の言語で動作していなかった問題が修正されました。

Tinydialogs が Ren'Py の配布物のソースコードに含まれるようになりました。

デフォルトフォーカスの変更 link

ボタンやバーのようなフォーカス可能な Displayable の default_focus プロパティーにいくつかの変更があります。このプロパティーは Displayable の追加、削除時に、 Ren'Py にデフォルトフォーカスを取得する Displayable を選択させます。

次が新しいルールです。 :

  • マウスが使用されているとき、フォーカスはマウスに従い、 default_focus は無視されます。

  • 他のものより大きい default_focus の Displayable が表示されると、それにフォーカスが与えられます。

  • 最大の default_focus の Displayable が非表示されると、次に大きい0でない default_focus の Displayable にフォーカスが渡されます。

目標はマウスユーザーを邪魔しない、キーボードとコントローラー共通のナビゲーション制御のサポートです。

その他改善 link

Ren'Py will now warn when encountering an explicit translate None statement that does not translate strings, styles, or python.

Ren'Py will now predict dialogue followed by the extend special character, and if it can prove that the extend will always occur, will take the extended text into account when determining line breaking and spacing.

Ren'Py ドキュメントに多くの編集修正や改善がありました。

コンソールが改善され、より多くの Python 3 の型を表示するようになりました。

設定されていれば、 MouseDisplayable()default_mouse を参照するようになりました。

Ren'Py 8 の Python ブロックでは from __future__ import annotations ステートメントがあるかのようにコンパイルされるようになりました。

モーダルスクリーンや dismiss ステートメントは pause ステートメントや renpy.pause() の終わりをブロックするようになりました。以前まではこの場合は未定義で、バージョンごとに違っていました。

macOS 上でスケールのことなるディスプレイ間をゲームウィンドウが移動したときに、適切に調整するようになりました。

Command-C と Command-V は macOS 上でコピーペーストのように動作するようになりました。

screens.rpy のデフォルトの input スクリーンはその vbox の xalignxpos 間が衝突しないように変更されました。 xalign を xanchor に変更しました。

開発者モードでサウンドカードがなくても Ren'Py は起動するようになりました。オーディオハードウェアのエラーは log.txt にかき出されるようになりました。

日本語の翻訳が更新されました。

新しく作成されたゲームでは、もう ruby/furigana テキストタグはフィルターされません。

8.0.1 / 7.5.1 link

改善 link

Matias B により、ランチャーがウクライナ語に対応しました。

Web ポートではオーディオファイルがループするときそれを再利用して、メモリ使用量を削減するようになりました。

MouseDisplayable() 内で使用される ATL transform がマウス変更のたびにリセットされるようになりました。以前は未定義でした。

コンソールから使用される trace スクリーンがフレームごとに更新されるようになりました。

多くのドキュメントが改善されました。

修正 link

代替テキストが最初から最後の順で再生されるようになりました。8.0での変更が代替テキストの再生順を逆転していました。

CropMove トランジションが正しく動作しない原因となる丸め誤差が修正されました。

ズームインとズームアウトトランジションが機能しない不具合を修正しました。

Movie Displayable が再び単一のファイル名だけでなく、ムービーファイルのリストも受け取って再生できるようになりました。

Androidでのビルドに関する問題が修正されました。

Function() アクションの引数比較にオブジェクト識別子が使用されるようになりました。これにより、あるアクションが引数が同じであっても、同じでない場合(例えば、2つの空のリスト)、アクションが不正に再利用される問題を防ぐことができます。

Steamの統計情報を取得・設定する際の不具合を修正しました。

dismiss が正常にモードルになりました。

8.0 / 7.5 link

Python 3 サポート (Ren'Py 8.0) link

Ren'Py 8.0 は Python 言語の最新メジャーバージョンである Python 3 で動作します。

あなたのゲームで Python の使用が最低限 ( 例えば単にキャラクター名やフラグの保存など ) であれば、以前と同様に動作するはずです。そうでなければ下記を読み進めてください。

Python 3 への移行により十年以上にわたる Python 言語とライブラリーの改善を、 What's new in Python で述べられているように、 Ren'Py の開発者が利用可能になります。 Python 3 の変更はここで述べるには多すぎるので、上記と他の Python について述べているウェブサイトをチェックしてください。

あなたの Ren'Py ゲームで利用可能になった物を少し述べると :

  • 関数はキーワード専用パラメーターを持てるようになりました(ラベルや transform, screen のパラメーターリストでもサポートされます)。

  • 関数の引数と返り値に型情報の注釈をつけられます (Python でのみのサポートです )

  • フォーマットされた文字列リテラルを使えるようになりました。これは f "characters/{character}.chr" のような文字列で、中括弧内のテキストは、Ren'Py のダイアログで置換が機能するのと同様に、フォーマットされた Python 変数に置き換えられます。これは、 Python でのみ利用可能で、純粋な Ren'Py のステートメントではほとんど利用できません。

Python 2.7 と 3.9 の間の 10 のメジャーリリースには大量のその他の改善があるので、改善されたすべては上記と他の Python のドキュメントを読んでください(訳注: 日本語で特に重要に思えるのは、変数名に日本語が可能になったことで、画像タグ、属性、ラベルなどを日本語の単語にできるようになりました)。

最大の利点は Ren'Py が Python ソフトウェア財団がもはやサポートしない Python 2.7 を離れるため、 Ren'Py 8.0 への移行は Ren'Py の将来の確保の助けになることです。.

高度な Python を使用していれば、少し変更しなければいけないことがあります。

  • Python 3 では、割り算は常に整数ではなく浮動小数を返します ( 例えば 3 / 2 は 1 ではなく 1.5 になりました ) 。 // 演算子を使用すれば整数として割れます。この変更は浮動小数が整数とは異なる扱いとなる Ren'Py の位置決めに影響します。

  • Python 3 では、辞書の keys, items, values メソッドはリストではなく views を返すようになりました。iterkeys, iteritems, itervalues メソッドはサポートされません。xrange メソッドはなくなり、range はもうリストを返しません。

  • Except 節は、except Exception, e: という古い構文がサポートされていないため、 except Exception as e: のように書かなければならなくなりました。

  • すべての文字列はデフォルトで unicode になり (Ren'Py は数年前からこれを強制しています)、ファイルはデフォルトで text モードで開かれます ( しかし、 renpy.file() はファイルをバイナリモードで開きます。これは renpy.open_file() という名前に変更され、デフォルトのエンコーディングを使用できるようになりました)。

  • 多くの Python モジュールはリネームされました。

これは包括的なリストではありません。

Ren'Py は Python 標準ライブラリの縮小版を伴って公開されているため、すべての Python モジュールが Ren'Py で利用できるわけではありません。有効に活用できる物が欠けていて、特にそのモジュールがライブラリへの依存を必要としない場合は私たちに知らせてください。 asyncawait は利用可能ですが、Ren'Pyはコルーチンを直接サポートしていません。

Ren'Py 8.0 には Python 3.9.10 が含まれており、 Windows と macOS, Linux, Android, iOS プラットフォームで利用可能です。ウェブプラットフォームは将来のリリースでサポート予定です。

Ren'Py 8 で動作しているとき、 Ren'Py は Python でいう -O フラグに相当するものなしで動作するようになりました。つまり docstrings と assert ステートメントが利用可能になったということです。

私たちの経験では、多くのゲーム、特にゲームの状態を管理するために主に Ren'Py API を通じて Python を使用しているゲームでも修正なしで動作します。 Ren'Py 8 で 2006年までさかのぼり、修正されていない Ren'Py のゲームを実行できました。

Python 2.7 サポートの継続 (Ren'Py 7.5) link

Ren'Py 7.5 は Ren'Py 8.0 と同時にリリースされます。これは、Python 2.7 を必要とする開発中(あるいはリリース後にメンテナンス中)のゲームに対応するため、Python 2.7 で動作するバージョンの Ren'Py を引き続き提供するためです。

今回のリリースでは、Ren'Py 8.0 がまだサポートしていない Web プラットフォームを Ren'Py 7.5 でもサポートしました。

このリリースでは、Ren'Py 7.5 と Ren'Py 8.0 は同じ機能をサポートするはずです。

私たちは、コミュニティが Ren'Py 8.x に移行したことが確認できるまで、あるいは Python のエコシステムの変化によって Python 2 での Ren'Py のサポートが維持できなくなるまで、Ren'Py 7.x のサポートを継続する予定です。

あなたのゲームを Ren'Py 8 でテストしてください。多くのゲームでは、ほとんど、あるいはまったく変更が必要ありません。もし何らかの理由で Ren'Py 8 に移植できない場合は、その理由を教えてください。

プラットフォームサポートの変更 link

このリリースでは 64bit ARM Linux プラットフォーム (linux-aarch64) のサポートが追加されました。 Ubuntu 20.04をベースにしていますが、Chromebookでテストされており、64bit ARM プラットフォームでも動作するはずです。

Ren'Py のゲームを ARM Linux 上で動かす方法は、新しい ARM Linux SDK パッケージをダウンロードし、projects ディレクトリにゲームを配置し、それを使ってゲームを起動します。 Linux 配布物が作成されるときにARM Linux SDKのファイルが存在すれば、それらは含まれて、 ARM 上で起動できるゲームが作成されますが、サイズの関係でこれはデフォルトではありません。

Ren'Py 8 への移行に伴い、次のプラットフォームのサポートを除去しました。

  • 32-bit x86 Windows (i686)

  • 32-bit x86 Linux (i686)

これは、32-bit x86 コンピューティングの陳腐化を反映しています。これらのプラットフォームは Ren'Py 7.5 では引き続きサポートされていますが、Ren'Py 8 ではサポートされません。

Web and ChromeOS link

ウェブプラットフォームは現在 Ren'Py 7.5 でのみサポートされています。

Safari と Chrome の Web ブラウザの変更により、Ren'Py が使用するメモリが約 50 倍になり、Web ブラウザのスタックメモリが不足したときに RangeError が発生するようになりました。Ren'Py 7.5 では、ウェブブラウザの内部で使用されるメモリ量を減らすための変更を行いました。その結果、iOS デバイスを含め、Chrome と Safari で Ren'Py が再び動作するようになりました。

新しい config.webaudio_required_types 変数には、ゲームで使用されるオーディオファイルの MIME タイプのリストを指定するできます。 Ren'Py は、すべての MIME タイプがブラウザでサポートされている場合のみ、ウェブブラウザのウェブオーディオシステムを再生に使用します。そうでない場合は、 webasm が再生に使用されますが、コンピュータの速度が遅い場合、スキップが発生しやすくなります。

config.webaudio_required_types 変数は、ogg または opus オーディオを使用するゲームを Safari で実行できるようにするためのもので、ゲームが mp3 オーディオしか使用しない場合は変更できます。

web 配布物にセーブファイルをインポートするとき、 Ren'Py は再起動せずにセーブファイルのリストを更新するようになりました。

ChromeOS デバイス上で Android アプリとして動作時に "chromeos" スクリーンバージョンが選択されるようになりました。

Ren'Py が ARM Chromebooks 上で実行できるようになりました。

Android/iOS link

Androidの設定では、アプリ内課金に使用するストアを再び尋ねられます。ストアなしを選択した場合、購入をサポートするためのライブラリはプロジェクトに含まれません。これらのライブラリには課金権限が含まれており、購入が行われない場合でも、アプリ内課金をサポートしているものとしてフラグが立てられます。

以前ライブラリの問題のため、 renpy.input() 関数と input Displayable は Android 上での IME ベースの入力はサポートされていないことがドキュメントに記載されました(訳注: スクリーンキーボード )。

iOSでは、OpenGL ESの呼び出しは、ネイティブのMetalグラフィックスシステムに変換されます。これにより、最近のApple製デバイスとの互換性が向上し、Apple SiliconベースのデバイスでiOSシミュレータの下でアプリケーションを実行する際の問題が修正されるはずです。

Steam, Steam Deck, Epic Games Store link

このリリースでは、 Steam サポートがコールバックを含む Steamworks API 全体にアクセスできる新しい ctypes ベースのバインディングによるものに書き直されました。 Steam サポートは achievement モジュール によって提供され、変更はありませんが、上級 Python プログラマはより多くの Steam 機能にアクセスできるようになりました。

Steam が アクティブのとき、 Ren'Py は "steam" variant を有効化するようになりました。

このリリースでは、Steam Deck ハードウェアのビルトインサポートが含まれています。このサポートには、 renpy.input() が呼ばれたときに、自動的にオンスクリーンキーボードを表示する機能が含まれています。 Steam Deck はまた、Ren'Py に "steam_deck", "steam", "medium", "touch" という variant を有効にさせます。

Ren'Py on Steam Deck Guide は、あなたのゲームをSteamプラットフォームで認証するためのガイドです。テスト用のSteam Deckを提供してくれたValveに感謝します。

"Windows、Mac、Linux for Markets" 配布物は、作成されるZIPファイルの内容の前にディレクトリ名とバージョン番号を付けないように変更され、Steamへのリリースごとに起動設定を更新する必要がなくなりました。このため、一度だけ起動設定の更新が必要になる場合があります。

Ren'Py は Epic Games Store からの様々なコマンドライン引数を無視することにより、EGS からの起動をサポートするようになりました。

Visual Studio Code link

Ren'Py は Visual Studio Code のダウンロードと使用、および Ren'Py Language 拡張のダウンロードをサポートしました。

Ren'Py 言語拡張はシンタックスハイライト、スニペット、補間、色のプレビュー、ドキュメント、定義ジャンプ、関数シグネチャ 、エラー診断、アウトラインなどを含む Ren'Py のリッチなサポートを提供します。

Visual Studio Code also has a large system of extensions, including spell-checkers, that can be used with the Ren'Py Language extension.

Visual Studio Code はエディター設定に移動して、ダウンロードを選択すればアクティベートできます。 It's also possible to configure Ren'Py to use a system install of Ren'Py with extensions that you choose.

Dismiss, Nearrect, フォーカスされた矩形 link

2 つの新しい Displayable が Ren'Py に追加され、ドロップダウンメニューやプルダウンメニュー、ツールチップのような使用事例で役に立ちます。

dismiss displayable は一般的にモーダルフレームの後ろで使用され、アクティベートされるとアクションを起こします。これにより、特にプレイヤーがフレーム外をクリックしたような場合にフレームを非表示にできます。

nearrect displayable は、スクリーン上の矩形の上または下に displayable を配置します。これは、ボタンの上にツールチップを表示したり、ボタンの下にドロップダウンメニューを表示するのに使用できます (ドロップダウンメニューの例は nearrect で、ツールチップの例は tooltips で説明されています) 。

nearrect によりそばに配置される矩形は、スクリーン上の現在のボタンの位置を保存できる新しい CaptureFocus() アクションによって保存できます。保存された後、 GetFocusRect() 関数でそのフォーカスされた矩形を取得し、 ClearFocus() で保存したフォーカスをクリアできます。また ToggleFocus() アクションでは現在のフォーカス状態に基づいてフォーカスを保存したりクリアしたりできます。

ATL と Transform link

ATL 補間の部分でブロックを含めるようになりました。つまり次のような記述が可能になり

linear 2.0:
    xalign 1.0
    yalign 1.0

次と等価です。

linear 2.0 xalign 1.0 yalign 1.0

ATL トランジション特別な ATL キーワードパラメータ がドキュメントに記載されました。

pause 0 ステートメントが、常に1フレームを表示するように特殊化され、少なくとも1フレームが表示されることを保証する唯一の方法となりました。6.99.13 以降、Ren'Py は 1 フレーム表示を保証するためにさまざまな方法を試し、その多くが視覚的な不具合につながっていました。

ATL image がイメージボタンの子の一つに使用されたとき、表示のたびに出現時間軸が始まります。

crop_relative transform プロパティーのデフォルトが True に変更されました。

The function statement will now block execution only if producing a delay, which allows transforms using it to behave more naturally when catching up with an inherited timebase.

Boxes, Grids, Vpgrids link

vboxhbox 内の (keytimer, 条件が False の showif のような) スペースを取らない Displayable は spacing で囲まれなくなりました。これらの Displayable はグリッドのような他のレイアウトではまだスペースをとります。

rowscols の両方が指定された時、 overfull な vpgrid が不許可になりました。

underfull な vpgrid があると、 allow_underfull プロパティか config.allow_underfull_grids で警告が抑制されない限り、エラーが発生するようになりました。

cols と rows の両方が指定された vpgrid は含まれる子が rows * cols より少ない場合、 underfull になります。 cols と rows のどちらかを指定した vpgrid は、子の数が指定した値の倍数でない場合、 underfull になります。

Call Screen と Roll Forward link

ロールフォワード機能は call screen ステートメントではデフォルトで無効になりました。一般的なケースでは安全でなく、混乱を招くからです。ロールフォワードが保持するスクリーンの副作用は、そのスクリーンの戻り値、またはスクリーンがジャンプする場合のジャンプ位置だけであることが問題です。変数の変更や音楽の再生など、他の副作用を持つアクションは、ロールフォワードによって保存されませんでした。

ロールフォワードは特定のスクリーンでは安全かもしれません。そのため、スクリーン上で新しい roll_forward プロパティを有効にすることで、スクリーンごとに有効にすることができます。ゲーム内のすべてのスクリーンがロールフォワードをサポートしている場合、新しい config.call_screen_roll_forward 変数で有効にできます。

新機能 link

show screenhide screen, call screen ステートメントが expression 修飾子が受け取れるようになりました。これで Python 式で screen の名前を与えられるます。

新しく "main" ボリュームが追加され、 Preferences() からアクセスできます。メインボリュームは他のボリュームに掛けられるのでゲーム全体の音量を操作できます。

新しい config.preserve_volume_when_muted 変数で Ren'Py はチャンネルがミュートでも現在の音量を表示するようになります。

Ren'Py の temporary ディレクトリーをクリーンアップするボタンが、ランチャーの環境設定画面に追加されました。これにより、これらのファイルを削除し、Ren'Py が必要とする容量を減らせます。

新しい config.choice_empty_window 変数により、選択肢メニューが表示されたときに表示される空のウィンドウをカスタマイズできます。使用目的は次のとおりです。

define config.choice_empty_window = extend

これは選択肢メニューのキャプションとして台詞の最後の行を繰り返します。

key displayable が capture プロパティーをサポートするようになりました。これは押したキーがインタラクションを終了しない場合、他にイベントが渡されるかを制御します。

language スタイルプロパティの新しい値 "anywhere" は、Ren'Py が文字列のどこでも改行できるようにするもので、幅の固定が優先されるときのためのものです。

renpy.pause() の新しい predict 引数により renpy.start_predict()renpy.start_predict_screen() による予測を含めて、画像予測が終了するまでポーズできるようになりました。

台詞を抽出する際に、デフォルト以外の言語を選択できるようになりました。

スクリーン言語の add ステートメントが alt プロパティを取るようになり、次のように書けるようになりました。

screen test():
    add "icon.png" alt "The Icon"

Hide() アクションは、 None を受け取ると、現在のスクリーンを隠すようになりました。

Placeholder()text 引数を取るようになりました。これは自動的に決定されたテキストを、作成者が指定した何かで上書きするものです。

renpy.dynamic() 関数が dynamic 名前空間に変数を作成するようになりました。

新しい config.always_shown_screens 変数で (メインおよびゲームメニューでも) 常に表示されるスクリーンを定義できるようになりました。既存の config.overlay_screens も参照してください。

OpenGL viewport の location と size がシェーダーで u_vieweport として利用できるようになりました。

新しい RENPY_PATH_TO_SAVES 環境変数で Ren'Py がシステムのセーブを保存する場所を制御出来るようになりました。 RENPY_MULTIPERSISTENT 環境変数がドキュメントに記載され、永続データに対して同じことを行います。

新しく config.at_exit_callbacks 関数がゲーム終了時に呼び出されます。これは開発者により追加で作成されたデータをゲームが保存出来るように意図されています。

config.default_attribute_callbacks 変数はあるタグに対してゲームがデフォルト属性を指定できるようにします。これは他の属性との衝突がないときに使用されます。

その他の変更 link

It is now possible to copy from renpy.input() with ctrl-C, and paste with ctrl-V. When text input is displayed, ctrl will no longer cause skipping to happen.

renpy.file() 関数は renpy.open_file() に変更されました。 以前の名前も残されています。特定のエンコーディングでファイルを開く encoding 引数が増えました。

focus_mask スタイルプロパティーは drag displayable に対してデフォルトで None になりました。これによりパフォーマンスが改善しますが、 Displayable はピクセルの透明部分でもドラッグ出来るようになりました。

オーディオ名前空間にファイルを追加すると、 Ren'Py は flac ファイルをスキャンするようになりました。

選択肢のキャプションに使用される say ステートメントでも他の say ステートメント同様に永続的、一時的画像属性が受け取られるようになりました。

すべての位置プロパティーが gui 変数としてボタンに渡せるようになりました 例えば

define gui.navigation_button_text_hover_yoffset = -3

上記が動作します。

モーダルな frames の動作が変更されました。モーダルフレームはその内部でマウスイベントをとどめ、他の Displayable にはフォーカスを移せますが、全体がその後ろにある displayable にはフォーカスを移さなくなりました。

新しい config.main_menu_stop_channels 変数はメインメニューに入ったときに停止するチャンネルを制御します。

レイヤー画像には、レンダリング時につねに画面全体のサイズが渡されるようになりました。以前は、レイヤー画像はレイアウト(hbox、vbox、side など)内で使用される場合、レイヤー画像に提供されるスペースが変わり、相対位置も変わる可能性がありました(これは滅多にありませんが、報告されました) レイヤー画像の新しい offer_screen プロパティは、この動作を制御します。

Character()interact を False で定義した場合、あるいは Character を非インタラクティブな方法で使用した場合でも、関連するファイルが存在すれば、自動的に音声が再生されるようになりました。

window auto が say や menu-with-caption ステートメントの前にウィンドウを表示する場合、 Ren'Py は発言する キャラクター が NVL と ADV のどちらを使っているかを自動的に判断し、正しいウィンドウを表示するようになりました。以前は、say ステートメントの最後の キャラクター が使用されていました。

activate_sound は drag Displayable アクティベート時に再生します。

VariableValue()FieldValue(), DictValue() Bar Value は Return() を呼び出して、特定の値を返すためにインタラクションを発生できるようになりました。

新しく始めたゲームでは、台詞とナレーションに対する adjust_spacing プロパティーが False に設定されるようになりました。これにより、ゲームのサイズが変更されたときにテキストの間隔が変更される可能性がありますが、その代わりに extend が使用されたときにテキストの間隔が安定するようになりました。

チャンネルの再生、停止がそのチャンネルのポーズを解除するようになりました。

新しい preferences.audio_when_minimized preference でウィンドウの最小化時にゲーム音声をポーズできるようになりました。

outline_scaling のデフォルトが "linear" になりました。

Ren'Py で使用されている SDL のバージョンが非ウェブプラットフォームで 2.0.20 になりました。

多くの翻訳が更新されました。

jEdit エディタは、Ren'Py との連携がほぼ終了したため、削除されました。しかし、 v7.4.0 からのバージョンを解凍すれば、ランチャーで選択できるようになるはずです。

Versioning link

Ren'Py の完全なバージョン番号は major.minor.patch.YYMMDDCCnu になりました。 :

  • YY は最新のコミットの2桁の年です。

  • MM そのコミットの月です。

  • DD はそのコミットの日にちです。

  • CC はその日のコミット番号です。

  • n はナイトリービルドであればつきます。

  • u は非公式のビルドであればあります。

7.4.11 link

gui.variant デコレータ link

新しく gui.variant デコレータが Ren'Py に追加されました。これで関数を variant 名でデコレートすると、ゲームの最初の開始時と gui の再構築時 ( gui.rebuild() 呼び出し時と gui preference 変更時、翻訳変更時) にその variant がアクティブならその関数を実行するようになるはずです。

これは次のように使用して

init python:

    @gui.variant
    def small():

        ## Font sizes.
        gui.text_size = gui.scale(30)
        gui.name_text_size = gui.scale(36)
        # ...

次の置き換えを想定しています。

init python:

    if renpy.variant("small"):
        ## Font sizes.
        gui.text_size = gui.scale(30)
        gui.name_text_size = gui.scale(36)
        # ...

これは一回のみ実行され、 gui が再構築されると変更は失われます。

修正 link

新しい config.mouse_focus_clickthrough 変数は、ゲームウィンドウがフォーカスされる原因となるクリックが通常通りに処理されるかどうかを決定します。

ランチャーは現在、config.mouse_focus_clickthrough trueで実行されるので、ゲームを起動するのに1回のクリックしかかからなくなります。

Input の caret_blink プロパティーがスクリーン言語から渡せるようになりました。

When a Live2D motion contains a curve with a shorter duration then the motion it is part of, the last value of the curve is retained to the end of the motion.

Displayable が他のタイプの Displayable に置き換えられる希な問題が対策されました。これはゲームが更新された後のセーブでのみ起きるはずです。

モーダル Displayable はパーズの終了を防ぐようになりました。

いくつかのケースで画像が表示されない問題を修正しました (displayable が無効な場合) 。

ムービーの開始によりパーズ中のサウンとがアンポーズすることがなくなりました。

AudioData オブジェクトが永続データに保存されなくなりました。そのようなオブジェクトがもしあれば、ロード時に除去されます。

renpy.android や renpy.ios のようなプラットフォーム変数は、 iOS や Android をエミュレートしているときはエミュレーションしているプラットフォームに追随するようになりました。

iOS と Android エミュレータで mobile_rollback_side が使用されるようになりました (訳注 preferences.mobile_rollback_side 参考) 。

Ren'Py は dsiplayable (またはその置き換え) が表示され続けていればフォーカスが変わっても常に unhovered アクションを実行するようになりました。以前までは他のスクリーンの表示でフォーカスを失うと実行されませんでした。

config.log が true なら選択肢の選択が適切に記録されるようになりました。

新しい gui.variant() 関数により gui.rebuild() を呼び出す標準 gui が gui variants をリセット する問題に対処できます。

Web ブラウザではマイフレームごとにプログレッシブダウンロードした画像をチェックし、アニメーション中に画像をロード出来るようになりました。

Live2D now uses saturation arithmetic to combine motion fadeins and fadeouts, such that if the fadein contributes 80% of a parameter value, and the fadeout contributes 20% of the value, 100% of the value comes from the two motions. (Previously, the fadein and fadeout were applied independently, such that together, the fadein and fadeout would contribute 84% of the value, with the remaining 16% taken from the default.)

When fading from one sequence of Live2D motions to another, the original sequence ends when a motion fades out.

トランジション用に以前の状態でスクリーンを保存するとき、 layer_at_list と カメラリストは以前の状態から所得され予想外の変更を防ぎます。

gl_depth プロパティーは、Ren'Py の動作とより一致する GL_LEQUALS を使用するようになりました。

matrix に対する 4 要素のコンストラクタが修正されました。

Ren'Py は、Android アプリ バンドル (AAB) ファイルを作成するときに Android ビルド ディレクトリをクリーンアップし、複数のゲームやファイルが削除された単一のゲームをパッケージ化する際に発生する可能性のある問題を防ぎます。

Live2d では、 Displayable 上で同じモーションが繰り返されるときにシームレスなアニメーションが適切に処理されるようになりました ( 例えば、 show eileen m1 m1 m2m1 がシームレスになります。

Chrome OS デバイスでマウスの動きが追跡されるようになりました。これにより、クリックの間にマウスカーソルが非表示になることを防げます。

ChromeOS でウィンドウの一部がレンダリングされる問題が解決されました。

Screen での transclude の問題が修正されました。

perspectivemesh True の両方を持つ transform が表示されない問題が修正されました。

ボタンは、ImageReferences を介してアクセスされる子ではなく、直接子に transform の状態を伝達するようになりました。

repeat_ 修飾子をゲームパッドイベントに適用できるようになりました。

新しい config.debug_prediction 変数が config.debug_image_cache から分割されました。これは予測エラーのコンソールおよび log.txt へのログ記録を制御し、後者の変数がドキュメントに記載されたとおりに動作するようにします。

翻訳 link

ドイツ語、インドネシア語、ポルトガル語、ロシア語の翻訳が更新されました。

7.4.10 link

修正 link

このリリースでは、大きなイメージ ( 最大テクスチャ サイズより大きい、ほとんどのプラットフォームでは 4096x4069 ) が gl2 レンダラで表示されない問題が修正されました。

{nw} タグで終わるダイアログの行は、音声の終了を待たなくなりました。

( extend キャラクターで作成されたものを含み) {fast} を含むダイアログの行は前のステートメントの音声を維持します。

これらは v7.4.9 での変更の補足です (変更を記載していませんでした)が、時間指定のある {w} と {p} テキストタグは、進む前にボイスの再生停止まで待機しなくなりました。

focus_mask プロパティーは遅くなる可能性がありますが、異常な速度低下を修正するためのいくつかの変更が含まれています。可能ならこれを避けるのが最善ですが ( v7.5 現在では True ですが、drag のデフォルトは None に変更される予定です)、 True であっても一部スピードがアップするはずです。

Live2D サポートは、デフォルトでは log.txt へのログを記録しなくなりました。そのログ記録は、 config.log_live2d_loading で戻ります。

Android store の自動検知の問題を修正しました。

翻訳 link

インドネシア語とスペイン語の翻訳が更新されました。

7.4.9 link

Android link

このリリースでは、Android App Bundle形式のサポートから始まり、ゲームをGoogle Playにアップロードするために必要となる、Ren'PyのAndroidサポートに大きな変更が加えられています。

バンドルは APK とは異なる署名を使用するため、 APK から バンドルにテストのため切り替えるとき、ゲームをアンインストールと再インストールする必要があります。

Google Playで実行すると、Ren'PyはPlay AssetDeliveryを使用してゲームデータをプレーヤーのデバイスに配信します。これには、以前のバージョンのRen'Pyと同じ2 GBの制限があり、ゲーム内の各ファイルは4つの500MBアセットパックの1つに自動的に割り当てられます。すべてのアセットパックが配信される前にゲームが開始された場合、Ren'Pyは配信が完了するのを待ってから開始します。

Play Asset Deliveryがゲームのアセットをダウンロードしているときに、android-presplash.jpgの代わりに新しいandroid-downloading.jpgファイルが使用されます。この画面の上にプログレスバーが表示されます。

Ren'Pyは、デバイスにサイドロードする 2GB の APK の構築と他のアプリストアへの提供も引き続きサポートしています。

Ren'Pyは、AndroidSDKのバージョン30に対してビルドするようになりました。

Ren'Pyは、Android11デバイスでのワイヤレスデバッグをサポートしています。

Androidの構成プロセスから多くの質問が削除され、プロセスが簡素化されました。特に、Ren'Pyはパッケージのバージョン数値を自動的に管理するようになったため、ビルドごとにそのバージョンをインクリメントする必要がなくなりました。

Ren'Pyは、外部ファイルディレクトリでアーカイブを検索し、見つかった場合は自動的にそのアーカイブを使用します。これにより、パッチ、更新、および追加のアセットをユーザーに配布できます。

Android API を呼び出すライブラリ Pyjnius が含まれていることがドキュメントに記載されました。

新しい build.android_permissions 変数、 renpy.check_permission()renpy.request_permission() 関数により Ren'Py 自身が使用する権限をこえてそれらを要求出来るようにします。

Android の key を生成するとき、 Ren'Py はスクリプトファイルと同じ場所にそれらをバックアップしますが、あなた自身でのバックアップの代わりにはなりません。

Android や他のプラットフォームで発生するスクリーンショットが真っ黒になる問題が (おそらく) 修正されました。

セーブと log.txt の権限は、 Android で明示的に管理されるようになり、これらのファイルをグループで読み取り可能にして、プレーヤーがログとファイルにアクセスできるようにします。

iOS link

更新された iOS ビルドプロセスは最初の生成後、画面設定を起動し、未使用のスキーマがないより完璧なプロジェクトを作成します。

いつものように Ren'Py が更新されるたびに iOS プロジェクトは新しく生成する必要があります。

Pyobjus が Ren'Py に含まれていることが記載されました。 Pyobjus ライブラリーはゲームが iOS や macOS 上でAPI を呼び出せるようにします。

アップデータの変更 link

Ren'Pyアップデーターが改善されました。 httpsを介して更新をダウンロードできるようになりましたが、必要な変更だけでなく更新ファイル全体をダウンロードする必要があるため、効率は低下します。

ランチャーの preference から更新を毎日チェックするを選択できるようになりました。これにより、Ren'Pyは1日に1回更新をチェックし、更新ボタンが存在する場合はそれを強調表示します。

Camera/Perspective 改善 link

Using the camera statement in non-trivial manners, such as to apply perspective, could cause problems with several transitions, most notably the move transitions. This has been fixed, and so these transitions should work.

サブサーフェースの取得を必要とする操作 ( たとえばスライドやワイプトランジション、またはビューポートの使用)は、 perspetive transform に適用された場合は機能しませんでした。これは修正されましたが動作にはテクスチャへのレンダリング操作が必要であり、パフォーマンスの低下が望ましいかどうかを判断するのは作成者に任されています。

アクセス性 link

shift+A アクセス性メニューでハイコントラストテキストの有効化が出来るようになりました。これはすべてのテキストを黒い背景の上に明るい文字で表示します。これはハイコントラストがゲーム体験に必要なプレイヤーを意図しています。

叙述テキスト ( alt キャラクター ) はもう叙述テキストが無効ならウィンドウをフェードインしません。

セルフボイシングがレイヤーや、スクリーン、 レイヤー上に直接配置されている Displayable を読み上げる順番が変更されました。最後に描画された (プレイヤーに近い) スクリーンや Displayable から順に読み上げられます。これはスクリーンや layout Displayable 中の Displayable には適用されず、それらはまだ最初から最後の順に読み上げられます。

モーダルスクリーンはそのスクリーンの内容が読み上げられた後セルフボイシングを止めます。

Transform プロパティー link

xsizeysize transform プロパティーの振る舞いが少し変わり、対応するスタイルのプロパティーにより合うようになりました。それらにはピクセル数のみが使用されていましたが、ピクセル数を表す int や、 absolute, 利用可能なスペースのでの割合を示す float` のいずれかを表す "position" を受け取れるようになりました。以前のラッパーである size は非推奨となり、新しいラッパー xysize で代用するべきです。

その他 link

bar スクリーン言語ステートメントの新しいプロパティー released によりバーがリリースされたときのアクションが追加されました。

key スクリーン言語ステートメントが keysyms のリストを受け取れることがドキュメントに記載されました。

Linux で Ren'Py が "C" ロケーションを検知するとUTF-8 ファイルシステムのサポートが有効になります。これは このロケーションを使用する Steam Linux との互換性改善を意図します。

ランチャーのポルトガル語の翻訳が追加されました。

ミュージックルームがポーズとアンポーズをトグルする TogglePause ボタンを含むよう更新されました。

セーフモードで Ren'Py を開始する --safe-mode フラグが追加されました。

ミュートがムービーもミュートするようになりました。

解析ファイルが際限なく肥大し、 Ren'Py の起動が遅くなる問題を修正しました。解析ファイルはゲームスクリプトが再コンパイルされるときに縮小されます。

The hover_sound:properef:`activate_sound` プロパティーがバーに適用されるようになりました。

ATL でイベントをディスパッチするときに、 selected_ 接頭辞を持つイベントが処理されない場合、接頭辞が取り除かれてイベントが再度照合されます。つまり、 `` selected_hover``ハンドラーが存在しない場合、 `` hover``ハンドラーが代わりに `` selected_hover`` を処理することを意味し、 `` selected_idle``も同様です。

Ren'Py のバージョン末尾にアルファベットがつけられるようになりました。接頭辞 n が Ren'Py のナイトリービルドにつき、接頭辞 u は非公式なビルドにつけられます。

default ステートメントはロールバックのたびに適用されるようになりました。

ボタンのテキストが変化しない問題を修正しました。

7.4.8 link

修正 link

これはロールバックによりリストや辞書、セットその他のオブジェクトが破壊される主な問題を修正します。7.4.7を使用している人は更新を推奨します。

整数でないアウトラインによるクラッシュを修正しました。

ビューポートの正しいサイズがエッジスクロールとマウススクロールに使用されるようになりました。

ゲームコントローラの検出が改善しました。

新機能 link

PauseAction() または renpy.music.set_pause() を使用してビデオを再生しているチャンネルを停止できるようになりました。

ムービーのデフォルトチャンネルが config.single_movie_channel で設定されるようになりました。

変更点 link

開発者モードでは、画像がないときプレースホルダー(灰色の幽霊少女)の表示の代わりにエラーを報告するようになりました。

The text window will not be shown before being hidden by the centered and vcentered characters.

Shift+O のコンソールでゲームの状態を変更した地点までのロールバックでロールバックの作用を戻さなくなりました。さらに1ステップロールバックします。

7.4.7 link

Web と Web Audio link

webプラットフォームでオーディオを再生する方法が書き直されました。他のプラットフォームのようにffmpeを使用する代わりに、webバージョンではブラウザ組み込みのオーディオプレイヤーでファイルを再生するようになりました。これはマルチスレッドであることが多く、webバージョンで発生する音飛びや音割れを防ぎます。

web プラットフォームでサポートされるファイルフォーマットはブラウザでサポートされるフォーマットとなりました。これはモダンな web ブラウザでは Opus, Ogg で、 Safari では MP3 も加わります(Safari での後述の問題も参照してください)。

新しい config.audio_filename_callback によりweb やその他プラットフォームえ再生時にオーディオファイル名を調整できるようになりました。

ブラウザでサポートされていれば 'v' キーでのセルフボイシングが web 版で動作するようになりました。

Ren'Py でサポートするブラウザーは https://bugs.webkit.org/show_bug.cgi?id=227421 のため webkit ベースの物に限定されます。つまり iOS 上のすべてのブラウザと特に M 1 MacOS 上の Safari に影響します。 Ren'Py でこの問題を修正するすべはありません。

iOS link

iOS ビルダはより新しいバージョンの Clang でコンパイルされるようになり、他の方法では必要となる pillarboxing (さらに悪いときは pillarboxing と letterboxing の両方)なしで 12 世代 iPhone と 2世代 iPhone SE で動作できます。

M1 Mac で iOS シミュレータ用に Ren'Py をコンパイルできますが、シミュレータ自身がランタイムエラーを出します。

Input link

input Displayable では複数の新機能をサポートしました。特に以下の機能が動作するようになりました。 :

  • 単語の左への移動 (Ctrl-Left, Macでは Alt-Left)

  • 単語の右への移動 (Ctrl-Right, Macでは Alt-Right)

  • 単語の削除 (Ctrl-Backspace,Mac では Alt-Backspace)

  • 行の削除 (Windows-Backspace, Mac では Command-Backspace)

さらに通常の Home と End に加えて mac では Command-Left と Command-Right で行頭行末に移動するようになりました。

入力キャッレットは注目を集めるために点滅するようになりました。点滅頻度は config.input_caret_blink 変数で制御できます。

その他 link

Preferences() 関数はレンダーおよびアクセス性メニューへアクセスするアクションを返せるようになりました。

新しい関数 renpy.set_focus() は displayable のフォーカスを設定します。マウスを少しでも動かすとこのフォーカスは変更します。

レイヤー画像で属性に指定された transform プロパティーがグループに指定された物より優先されるようになりました。以前までは align がグループに指定され xalign が属性に指定されるときなどに衝突が発生し得ました。

コンソールで設定された以前の変数にロールバックで戻れるようになりました。

新しい mark_label_seen()mark_label_unseen() で既読ラベルを操作できます。

新しい mark_audio_seen()mark_audio_unseen() でオーディオファイルが視聴済みか設定出来るようになりました。

新しい mark_image_seen()mark_image_unseen() で画像をすでに見たかの状態を操作できるようになりました。

スクリーン内の ATL transform はその ATL transform を含むスクリーンが最初に表示されたときではなく、 ATL transform が最初に表示されたときに開始します。

新しい config.autosave_on_input 変数は入力画面で自動保存するかを制御します。

キーワード引数の後に位置引数が来るとエラーを報告するようになりますた。

xsizeysize に浮動小数を使用して適切な結果になるように出来ました。以前浮動小数は2倍で適用されたので、 xsize() に 0.5 を指定すると現在の利用可能な領域の 1/2 ではなく 1/4 を表しました。

永続データをクリアする persistent._clear() メソッドがドキュメントに記述されました。

スペイン語の翻訳が更新されました。

Atom が更新されました。

7.4.6 link

camera ステートメント link

新しい camera ステートメントは 3D ステージシステムでの使用が意図されてます。このステートメントは show layer ステートメントと似ていますが、レイヤー名を必要とせず、 scene ステートメントの実行でクリアされません。

次のようなコードを書けば

camera:
    perspective True

3D Stage システムが有効化されます。

この一環で、 show layerscene ステートメントが v7.4.4 以前の振る舞いに戻り、 scene ステートメントは transform のリストをクリアします。

モデル Displayable link

新しい Model displayable はモデルベースのレンダラーで使用されるモデルを作成する方法を提供します。現在、このクラスでは複数のテクスチャのある 2D モデルを制作でき、組み込みの transform 同様に動作するカスタム transform を制作できます。

この Displayable はまだ 3D をサポートしませんが、将来的に対応が期待されます。

その他改善 link

The Atom text editor has been updated, and the language-renpy plugin associated with it has been updated to support the new keywords introduced in recent versions of Ren'Py.

コントローラーを使用するとすぐにマウスカーソルを隠すようになりました。

修正 link

ビルドプロセスのミスで nightly バージョンにはあった iOS でのコンパイルの修正がこのリリースに反映されていませんでした。

Ren'Py のウィンドウがフォーカスを失っているとモーダルスクリーンで時間が止まらない問題

ブラーシェーダのイテレーションの数が制限され、 webgl デバイスとの互換性が向上しました。

強制再コンパイルのオプションがチェックされていれば renpy/ ディレクトリの python ファイルを再コンパイルするようになりました。これにより何らかの理由によりそれらのファイルが再コンパイルされても制作者のシステムでの Ren'Py へのパスが含まれなくなりました。

ATL はアニメーション時間軸使用時に表示される最初のフレームをスキップするようになりました。

Ren'Py はもうロールバック後に時間指定のないパーズをしません。

7.4.5 link

モデルベースのレンダラー link

v7.4.5 でリリースされたゲームではモデルベースのレンダラーがデフォルトになりました。これを無効化するには config.gl2 を False にしてください。

モデルベースのレンダラー使用時に、 "3D Stage" をサポートするようになりました。これは奥行きをスプライトに追加して遠近補正をしたズームと移動、回転を可能にして、 displayable の 3D への変換やその他多くの新しい演出を可能します。詳細は 3D Stage を参照してください。

3D ステージの促進のため、 scene ステートメントは renpy.layer_at_list()show layer でレイヤーに適用された transform をクリアしなくなりました。

新しい Swing() トランジションはモデルベースのレンダラーが有効なら使用可能です。これは垂直または水平な軸中心にシーンを三次元的に回転して、以前のシーンから切り替えます。

新しい blend transform プロパティーにより合成関数が指定できるようになりました。合成関数は既に描画されているピクセルへどのようにピクセルを描画するかを制御します。すでにサポートされていた "normal" と "add" 合成関数に加えて新しく "multipy", "min", "max" 関数が追加されました。

Mouse link

ハードウェアマウスサポートのためにいくつもの変更と改善があり、GPUがサポートされるハードウェアマウスのサイズを制限することが記載されました。

新しい config.mouse_displayable 変数と MouseDisplayable() Displayable を使用して v7.3 ヤそれ以前で実行されていたのと近い方法でハードウェアマウスをソフトウェアのもので置き換えられるようになりました。

新機能 link

新しい renpy.screenshot_to_bytes() 関数はスクリーンショットを撮り、それを im.Data() に渡せるバイトオブジェクトととして保存します。これらのオブジェクトは大きいですが、通常または永続的なセーブに保存可能です。

新しい renpy.music.get_loop() 関数はチャンネル上でループに設定されている音声のリストを返し、その保存と再生を可能にします。

The renpy.input() 関数と input displayable がプレイヤーに表示する文字をマスクする文字を指定する mask パラメータを取るようになりました。これはパスワードテキストを隠すのに使用できます。

ランチャーにダークテーマが追加されました。

新しい config.adjust_attributes コールバックにより、表示時に画像属性を所得して自身のリストで置き換えられるようになります。例えば、これにより eileen happy を LayerdImage に作用する eileen happy_eyes happy_mouse に置き換えられます。

コマンドラインから lint を実行するとき、 --error-code オプションを与えて lint 失敗時に Ren'Py がエラーコードを返すようにできます。

Layer トランジションがインタラクションの終了後も永続するようになりました。

ロールバック後のポーズを避けて、ロールバックがより対話的なステートメントで止まるようにしました。

音声再生時に、あるチャンネルのオーディオファイルの開始時間を他のチャンネルのオーディオファイルの時間に同期できるようになりました。

Android link

Android上でビルドされる必要のあるパッケージの一部が Ren'Py に含まれました。これは Bintray の終了によるエラーを修正します。このエラーは Ren'Py 7.4.4 の新規インストールで Android 版をビルドすることを妨げます。

Ren'Py が Android でプレスプラッシュスクリーンを表示する方法が変更されました。プレスプラッシュはOpenGL 層の新規トップレイヤーである Java boostrap により表示されます。これは SDL 2d レンダリングで表示していた v7.4 に対して新しいアプローチとなります。この変更は Android デバイスの互換性を改善し、開始時の暗転を防ぎます。

この変更の一環で、 Ren'Py がプレスプラッシュ画像をスケーリングする方法が変更され、利用可能な領域にフィットするよう(アスペクト比を無視して)拡大するようになります。

特定の Android デバイスでブラーが適切に動作しない問題が修正されました。

Android でのあまり使用されていないビデオとオーディオファイルのフォーマットの再生の問題を修正しました。

Android 向けの修正ではプロジェクトの再生が必要となるため、Android 設定の質問 "Do you want to automatically update the Java source code?" で "Yes" と答えてください。

その他プラットフォーム link

Webベータ版が更新されました。

iOS 14.5.1以降のモバイル版 Safari の退行により、Ren'Pyはそれらのプラットフォームでスタートしません。モバイル版Safari の問題は可能な回避策がなく、Apple にコンタクトするようプレイヤーにプロンプトを表示します。この退行はモバイル版Safariのシェルを使用する Chrome や firefox のような他のブラウザにも影響します。

iOS 向けのビルドが修正されました。

macOS での Steam 向けのビルドが修正されました。

macOS アプリケーションの署名と認証が修正されました。

その他修正 link

デフォルトの level-of-detail bias は -0.5 に設定されており、 config.gl_lod_bias で変更できます。これにより Ren'Py の bias をスケールダウンできますが、以前の bias により画像の端がギザギザになります。

Ren'Py でのモーダルスクリーンの扱いを改善するいくつかの改善があります。

7.4.4 link

old-game ディレクトリー link

(アーリーアクセスやパトロン向けリリースのように)複数のリリースを作成するクリエータ向けに、 old-game ディレクトリをサポートするようになりました。これは以前のリリースの game ディレクトリーのコピーです。 .rpyc ファイルを生成するときこのディレクトリの .rpyc ファイルの情報を使用します。 .rpyc ファイルはゲームロード時に使用されるので、複数のゲーム開発者によって作成されたゲームのロードに役立ちます。

詳細は documentation を参照してください。

修正 link

ジェスチャーやコントローラーで発生していたクラッシュを修正しました。

windows での Web 版配布物の生成でのクラッシュを修正しました。

実績用の永続データのバックエンドが進行状態のクリアをサポートしました。

Live2D が他のパラメータで不透明度をリセットするようになりました。

再起動時に最大化されたウィンドウのサイズを変更しなくなりました。

その他 link

モデルベースのレンダラーでサポートされる新しい blend_func GL プロパティーが追加されました。 GL 合成機能がカスタマイズ可能になり、 Ren'Py が新しい合成モードをサポート出来るようにします。

Live2D が加算、乗算合成モードをサポートしました。

renpy ネームスペースでの default や define ステートメントがエラーになりました。

preferences object の過去に未記載だったメソッドをいくつか記載しました。これらのメソッドにより現在のボリュームやミュートの値の所得や設定が可能になります。

7.4.3 link

Windows link

アイコンを変更するコードが書き直され、追加されていたソフトウェアとアイコン以外の余計なデータを含まない実行ファイルを生成するようになりました。これはいくつかのアンチウイルスの語検出を防ぎます。

Ren'Py はWindowsの Universal C Runtime にリンクされるようになります。これにより Ren'Py が動作する Windows のバージョンが特定の修正がされた Vista まで上がります。これは Ren'Py を現代化するとともにアンチウイルスの語検出を防ぎます。

Ren'Py は Nvidia GPU でのスレッド最適化を無効にします。スレッド最適化は Ren'Py にはあまり作用せず、 Ren'Py が望まない場所でのポーズ(この変更で修正されるオーディオのグリッチとして表れる)を発生させます。

DirectX が利用可能で OpenGL がそうで無ければ、自動的に DirectX を使用して Open GL ES をエミュレートする ANGLE ライブラリーを使用するようになりました。これは v7.4 では適切に動作しませんでした。ウィンドウは Ren'Py が異なるビデオシステムを試行する間、複数回表れては消得ますが、これは仕様です。

Android link

非モデルベースのレンダラーで Android が レンダラーの状況を変更したときに適切にテクスチャの割り当てを除去できるようになりました。これはしばしばディゾルブ時にランダムに起きる画面のグリッチを防ぎます。

実際にゲームが開始するときにフォーカスがあるかチェックするようになりました。これによりプレイヤーがゲームが完全にスタートする前にアプリケーション外にでた場合の問題を修正します。ゲーム開始時にフォーカスを失うと保存と終了をし、ゲームに戻ると再起動するようになりました。

一般的に Android デバイスとの互換性が改善されました。

新機能 link

config.main_menu_music_fadein 変数が追加され、メインメニューでフェードインできるようになりました。

新しく renpy.get_zorder_list()renpy.change_zorder() が追加され、画像とスクリーンの zorder を表示後に変更できるようになりました。

ウィンドウとフレームが modal スタイルプロパティーを取れるようになりました。これはスクリーンの modal プロパティーに似ていますが、ウィンドウやフレームの境界内にマウスがあるときのみ適用されます。プレイヤーが他のボタンを使用できるようにしつつそのウィンドウの背後のボタンを押せないようにするのに使用できます。

Live2D() Displayable が直接パラメータを更新できるようにする update_function 引数を取るようになりました。

使用しているフォントがその文字をサポートしていれば絵文字やその他の基本多言語面以外の文字を表示できるようになりました。現在、モノクロの字体を生成するフォントレンダリングシステムを使用して絵文字は表示されます。

FontGroup クラスでフォント内部の文字を置き換えられるようになりました。

AlphaMask() のマスク部分の Displayable がフォーカス可能になり新しいエフェクトが可能になりました。

プレイヤーがロードできない画像ファイルを無視できるようになりました。

The new renpy.get_sdl_dll() and renpy.get_sdl_window_pointer() functions make it possible to access the SDL DLL using ctypes. This may make it possible to implement functionality that is in SDL, but Ren'Py does not provide access to.

renpy.transition()with 節のあるステートメントで導入されたトランジションを止められるようになりました。

文字列を選択された言語に翻訳する renpy.translate_string() 関数がドキュメントに記載されました。

ミドルクリックや h キーの押下で発生するウィンドウの非表示をカスタマイズする hide_window ラベルを作成できるようになりました。

mesh_pad transform プロパティーと gl_pixel_perfect gl プロパティーのような、シェーダーをテキストに適用後にピクセルパーフェクトなレンダリング処理を可能にする新しいプロパティー追加されました。

renpy.input() 関数は show_ で始まるプロパティーを受け取って input スクリーンに渡すようになりました。

Color クラスに rgba プロパティーが追加され、これは rgba タプルを返します。

以前からの機能 link

起動時の設定変数の変更は未サポートなので起動時に config.mouse を変更しないでマウスカーソルを変更できるようにする方法として default_mouse 変数は7.4 で導入されました。

その他修正 link

フォーカスの問題を発生させる複数のモーダルスクリーンが正常に処理されない問題を修正しました。

Lint は Windows では Windowsスタイルの改行でファイルを生成します。

SDL エラーメッセージは Windows のシステムエンコードでデコードされ、可読性が上がります。

Python でのクオートで囲まれたユニコード文字の問題を修正しました。

0 から 1 までの blur transform プロパティーの値が適切に動作するようになりました。

{done} テキストタグが定義どおりに動作するようになりました。

Ren'Py is better at checking for GL load failures and falling back to older libraries.

Apps built for macOS should enable HighDPI mode.

翻訳 link

Ren'Py のドキュメントは被诅咒的章鱼と逆转咸鱼により簡体字と繁体字の両方の翻訳に対応しました。

フランス語の翻訳が更新されました。

7.4.2 link

修正と変更 link

新しい config.context_fadeout_musicconfig.context_fadein_music 変数はゲームのロード時やその他の音楽の変更を伴うコンテキスト変更時に音楽をフェード可能にします。

Ren'Py は Live2D motion と expression ファイルをディレクトリ名ではなく拡張子(.motion3.json と .exp3.json)で検索するようになりました。

新しい build.include_i686 変数は 32-bit バージョンの Ren'Py がビルドに含まれるかを決定します。 32-bit バイナリーを含めなければダウンロードサイズを削減し、過剰なアンチウイルスソフトの後検出を防げます。

新しい build.change_icon_i686 は i686 バージョン用のアイコンが変更されないようにします。これによりアンチウイルスソフトの後検出を防げます。

Ren'Py は Ren'Py の動作中でもスクリーンセイバーやスリープを有効にするようになりました。

MacOs で(緑のボタンで実行される)オペレーティングシステムのフルスクリーンによりリサイズが無効になり、ウィンドウが通常のサイズに戻れなくなる問題を修正しました。

rasberry pi で webp 画像を表示するとクラッシュする問題を修正しました。

このリリースではビルドミスによるファイルの不足を修正しました。 :

  • say.vbs ファイルが不足し、 self-voicing が Windows で動作していませんでした。

  • ANGLE をサポートする様々なファイルが不足し、 DirectX レンダリングが動作していませんでした。

Android link

Samsung デバイスで拡大ショートカットが有効だとゲームが反応しなくなる機知の問題を修正中です。

macOS で JVM の検出がより堅実になり、ブラウザプラグインとの衝突が起こりにくくなりました。

現行の Ren'Py は JVM のソースに AdoptOpenJDK の使用を推奨します。

7.4.1 link

Pause ステートメントの変更 link

時間指定の pause ステートメントの動作が変更しました。次のコードは

pause 1.0

次と等価です。

$ renpy.pause(1.0)

次とは等価ではありません。

with Pause(1.0)

つまり実際のポーズを期待する他の機能は pause ステートメント中でも動作するようになりました。

モーダルスクリーンはもう pause ステートメントや renpy.pause() をブロックしません。つまり pause はその上にモーダルスクリーンが表示されていても完了できます。

Say ステートメントの Id 節 link

say ステートメントの id 節を拡張し、以前の say ステートメント id を指定できるようにしました。これはオリジナルの言語のタイプミスをその翻訳の更新をせずに修正するような、オリジナルの言語の say ステートメントを変更するのに便利です。

使用には、単に id を say ステートメントに追加し、そのステートメントの id を続ければよいです。

e "This used to have a typo." id start_61b861a2

Live2D link

Live2D support has a default_fade argument added, which can change the default duration of fades at the start and end of motions and expressions.

Live2D でのタプルエラーを修正しました。

コントローラーブロックリスト link

Nintendo Switch Pro コントローラーはUSBでPCに接続されると、ジョイスティックとして動作して不正確なデータを送信しないために、初期化シーケンスを要求します。

Ren'Py 7.4.0 このシーケンスの送信を試みましたが、直接USBバスへアクセスする必要があり、コンピュータをクラッシュし、長時間のフリーズを起こしかねないません。この機能は Ren'Py に含めるには好ましくないです。

よって Switch Pro コントローラーは新しいコントローラーブロックリストに追加され、Ren'Py では動作しません。

macOS link

MacOS の最低サポートバージョンは 10.10(Yosemi) になりました。 Ren'Py 7.4 はこのバージョンでは動作しないので、これはこのバージョンの再サポートとなります。

MacOs 10.10( Big Sur) でプロジェクトディレクトリの選択が動作しない問題を修正しました。

iOS ビルドに加えて Pyobjus が Ren'Py の macOS ビルドに組み込まれました。このライブラリは Cocoa APIへのアクセスを可能にします。

Android link

Ren'Py 7.4.1 のプレリリースがSamung Galaxy S5のような古いAndroidデバイスではでは動作しない問題が報告されていました。問題の発生するデバイスのサンプルを得て、必要な新バージョンをリリースしました。

翻訳 link

スペイン語の翻訳が更新されました。

その他修正 link

SSE3をサポートするコンピュータ上でRen'Pyが動作しているとき特定のサイズのムービーでクラッシュする可能性がある問題を修正しました。

ムービー再生はビデオデコードに複数のコアを使用するようになりました。

Windows で 100% 以外の DPI で動作しているとウィンドウサイズが拡大される問題を修正しました。

Ren'Py は GL2 を要求するゲームで GL や ANGLE を使用しているときのように未サポートのレンダラーが選択されている時に警告をしなくなりました。

いくつかのケースで、 say 属性が表示されない問題を修正しますた。

デフォルトファイルエンコーディングに UTF-8 を使用しないコンピュータ上で MultiPersistent が動作しない問題が修正されました。

rpy python3 が有効時の Python のコンパイルフラグは改善されました。

gui.about で使用されるようなトリプルクウォート文字列が正常に評価されない問題を修正しました。

Ren'Py はリロード中にそのパスを検出するようになりました。

Ren’Py はレンダラーが要求するすべての機能が動的にロード可能かを確定し、そうでなければ様々なレンダラーを試行します。

あるステートメント開始後に作成されたタイマーは適切にロールバックに参加するようになり、タイマーがまだ切れていないポイントにロールバックすると、時間切れになるようになりました。

Ren'Py は Ren'Py の動作中でもスクリーンセイバーを有効にするようになりました。

動的変数がロールバック中動的にならない問題を修正しました。

あるサイズを指定されると、hbox と vbox Displayable はその子を Ren'Py 7.4 でそれらの子がされるのと同様に配置されるようにないました。

新しい mipmap スタイルプロパティーが Dissolve()ImageDissolve(), AlphaDissolve() トランジション, AlphaMask(), Movie(), Text() displayables, 一般的なテキストに適用されます。このプロパティーはそれらの Displayable に作成されたテクスチャに mipmap を作成するか制御します。 mipmap を作成しないようにすると低速なPCでレンダリングスピードが改善するでしょうが、スケールダウン時にゆがみが生じます。指定がなければこのプロパティーのデフォルトは config.mipmap_dissolves または config.mipmap_movies, config.mipmap_text に適切に従います。

self-voicing preference が変更され、より適切な選択状態を提供するようになりました。

Lint が翻訳によって2回分析結果を報告するようになりました。

7.4.0 link

モデルベースのレンダラー link

このリリースには新しいモデルベースのレンダラーがあります。これは Ren'Py 6.10 で追加された元の OpenGL レンダラーを補強(最終的には置き換えを予定しています)し、ユーザーのディスプレイへのテキストや画像の描画を担当する Ren'Py の要素です。このレンダラーはモダンな GPU(グラフィックカードやプロセッサー組み込みのGPU) でのハードウェアの存在をより有効活用して処理を改善し、能力を増強します。このレンダラーは OpenGL 2.2 または DirectX 9.0c, 11 をサポートするデスクトップコンピューターとモバイルデバイス、OpenGL ES 3をサポートする組み込みデバイスをサポートします。

モデルベースのレンダラーでの最大の変化は Ren'Py はもう 2 次元の平面内の矩形画像に制限されないということです。代わりに Ren'Py は三次元空間での三角形で構成されるメッシュを使用するように変換します。既存の矩形スプライトは同じ方法で表示されますが、これは Ren'Py を 非矩形のメッシュ、最終的には完全な3次元ジオメトリに解放ます。

メッシュジオメトリーに加え、モデルベースのレンダラーは Ren'Py に含まれるものと制作者によってゲームの一部として指定されたシェーダーの両方をサポートします。シェーダーは GPU で動作する小さなプログラムで、ジオメトリとピクセルデータを処理してあらゆる種類のグラフィカルエフェクトを出来るようにします。

モデルベースのレンダラーでは新しい高速なテクスチャーのロードシステムを実施します。これはテクスチャーのロードのうち重い部分 alpha premultiplication を CPU から GPU に移します。

モデルベースのレンダラーは GPU にロードされる各テクスチャーのミップマップも作成します。ミップマップは一連の GPU に保存されるテクスチャの軽量なものです。ミップマップを作成して使用することで、エイリアシングの出現なしに Ren'Py は画像を元のサイズの 50% 以下に圧縮できるようになりました。これは得に 4K モニター用に作成されたアセットが 1080P や小さなモニターで使用されたときに差が出ます。

For this release, the Model-Based Renderer is opt in, with that opt-in controlled by the config.gl2 variable. As we gain more experience with it, it is intended to be come the default Ren'Py renderer.

Live2D link

モデルベースのレンダラーにより有効化される機能の1つは Live2D で作成されたスプライトの表示のサポートです。彼らの技術を使用する配布する前にに、あなたは Live2D, Inc と契約する必要があるので Ren'Py はあなたが個別に Live2D Cubism をダウンロードするよう要求します。

Ren'Py は Live2D のモデルの表示をサポートし、表情を変更し、1つ以上のモーションをキューできます。これは Ren'Py の画像属性システムに組み込まれます。 Ren'Py は属性変更時のあるモーションから他のモーションへの滑らかにつながるようサポートします。

Matrixcolor と Blur link

モデルベースのレンダリングにより transform に matrixcolor や blur のような新機能が有効になりました。

(ATL Transform を含む) Transform は新しく matrixcolor プロパティーをサポートします。これは matrix または時間により変化する matrix を作成するオブジェクトであり、その transform の子を変色するのに使用します。

以前のバージョンの Ren'Py では im.MatrixColor() 画像マニピュレータをサポートしていましたが、新しいプロパティーはかなり改善されました。画像マニピュレータはしばしば秒ちかくかかり、リアルタイムでの使用には遅すぎ、また 1 つの画像に制限されていました。新しい transform プロパティーは必要ならフレームごとに更新できるほど高速でどの Displayable にも適用できます。 matrixcolor を使用する transform をレイヤーに使用してレイヤー全体を変色できるようになり別画像を用意しなくともゲームをセピア調や白黒にできるようになりました。

There are a few difference between the image manipulator and the transform property versions of matrixcolor, as the new version uses 4x4 matrices and premultiplied alpha color, so the new property can't use the same matrices. Instead, there are number of new ColorMatrix objects that need to be used.

transform は新しく blur プロパティーもサポートし、ピクセル数の数値で指定して displayable の子にブラーを掛けます。

Python 2/Python 3 互換モード link

Ren''Py はまだ Python3 をサポートしていませんが、このリリースには Python2 と 3 の両方で動作するスクリプトを書き始められるようするいくつかの機能を含みます。

まず、 Ren'Py は future を使用して標準ライブラリに互換性を提供します。 名前の変更が発生したときはその Python3 での名前を使用してモジュールをインポートできるようになりました。

When a .rpy file begins with the new rpy python 3 statement, the file is compiled in a Python 3 compatibility mode. The two changes this causes are:

  • Ren'Py は除算に対する変更を含む Python 3 のセマンティクスをエミュレートするモードでファイルをコンパイルします。Python 3 では 1/2 は 0 はなく .5 です。式の型に対するこの変更により、 Displayable の位置が変化するかもしれません。 1//2 では元のセマンティクスを維持します。

  • Ren'Py は辞書の振舞を変更して .rpy ファイルからその items, keys, values メソッドが直接呼び出されるとリストではなく view を返すようになります。これらの変化はそれらメソッドに対する Python 3 セマンティクスと同一ですが、保存やロールバックへの参加の前に明示的にリストに変更する必要があります。

ライブラリの更新とプラットフォーム対応の改善 link

Ren'Py 7.4 ではビルドシステムがやり直され、複数のビルドシステム

As a result of this, the list of platforms that Ren'Py officially supports has changed slightly. Here's the latest list of what is supported:

プラットフォーム

CPU

Note

Linux

x86_64

最低バージョンを Ubuntu 16.04 に引き上げました。

Linux

i686

最低バージョンを Ubuntu 16.04 に引き上げました。

Linux

i686

最低バージョンを Ubuntu 16.04 に引き上げました。

Linux

armv7l

Raspberry Pi のサポートは Raspian Buster を使用します。

Windows

x86_64

64bit の Windows Vista 以降への新しいポートです。

Windows

i686

最低バージョンを Windows Vista に上げました。

macOS

x86_64

macOS 10.10+

Android

armv7a

Android 4.4 KitKat

Android

arm64

Android 5.0 Lollipop

Android

x86_64

Android 5.0 Lollipop

iOS

arm64

All 64-bit iOS devices, iOS 11.0+

iOS

x86_64

The 64-bit iOS simulator, iOS 11.0+

Web

webasm

Modern web browsers

Ren'Py が新しくサポートする最大のプラットフォームは 64bit Windows でありすべての主要なデスクトップとモバイルプラットフォーム上の 64bit でRen'Py が利用できます。必要なら新しい renpy.bits 変数を使用して Ren'Py が 32bit と 64bit プラットフォーム上のどちらで動作しているかを決められます(例えば config.image_cache_size_mb を適切に設定するため)。

このリリースサポートを失うプラットフォームは 32bit (armv71) iOS デバイスです。これらのデバイスはもはや Apple にサポートされておらず、Ren'Py が要求するレベルのOpen GL ES をサポートしません。

Web link

Ren'Py は新しい互換技術のおかげでブラウザ上で明かに早くなりました。

Webプラットフォーム向けにビルドされたゲームはゲームの進行と共に画像やオーディオファイルをサーバーからダウンロードできるようになりました。メモリー同様に画像または音声が予測されるとダウンロードが開始します。

タッチベースのデバイス上のwebブラウザで動作するとき、Ren'Py はWeb assemblyのゲームに対するWebブラウザでのキーボード入力の難しさに対処するためタッチベースのキーボードを表示するようになりました。

ロード中のスプラッシュスクリーンではアニメーション WebP を含む WebP フォーマットを使用できます。

追加の Python モジュールが提供されて Python 環境が native の Ren'Py に近付きました。

iOS ブラウザーの素ポートを改善しました。

Steam link

Ren'Py ランチャーから "preferences", "Install libraries", "Install Steam Support" を選択して Steam サポートをインストール出来るようになりました。

config.steam_appid 変数は自動的に steam_appid.txt ファイルをあなたに作成します。これは define ステートメントを使用するか python early block で設定されるか必要があります。

翻訳 link

簡体字、日本語、韓国語の翻訳が更新されunifiedフォントが使用されるようになりました。tutorial, the question が日本語訳されました。

このリリースで、Neoteus の貢献により、Tutorial ゲームに簡体字語の翻訳が追加されました。

価値低落と削減 link

上述したように Ren'Py はもう Windows XP をサポートしません。

上述したように Ren'Py はもう32bit iOS デバイスをサポートしません。

Editra テキストエディタのダウンロードの選択はなくなりました。Editra は 5 年間更新されず、元々の配布サイトがなくなりました。

完全にはなくなっていませんが、ソフトウェアレンダラーは設定により簡易化または除去されました。GPU ベースのレンダラーによりグラフィックの表示を妨げる問題についてのプレイヤーへの情報を制限することを意図しています。

その他 link

コントローラーのサポートが改善しました。リピートがサポートされるようになり、Ren'Pyが使用するライブラリはより多くの人気のゲームコントローラーをサポートするようになりました。

Ren'Py は Android と iOS デバイスでのムービー再生にソフトウェアを使用するようになったためビデオ再生をサポートするすべてのプラットフォームで同じファイルを使用できます。

config.mouse を使用したマウスカーソルの定義は SDL2 のカラーカーソル API を使用するようになり、ハードウェアアクセラレーションが利用できマウス移動のラグが減少しました。

define ステートメントを使用して辞書のキーを設定できるようになりました。

# Ren'Py was started in 2004.
define age["eileen"] = 2020 - 2004

define ステートメントは += と |= も取れるので、適切な更新処理を適用できます。

define config.keymap['dismiss'] += [ 'K_KP_PLUS' ]

# This assumes endings is a set.
define endings |= { "best" }

新しい volume 節を playqueue に使用してあるオーディオファイルが再生しているときの相対的なオーディオチャンネルの音量を指定できるようになりました。

Transform の新しい fit プロパティーは異なるアスペクト比のサイズに画像をフィットさせる様々な方法を提供します。例えば、指定のサイズ以内に十分に収まるようスケーリングされたり、指定のサイズを完全に覆うようできます。

xpanypan Transform プロパティーはもう提供された Displayable のサイズを 倍加せず、位置 Transform プロパティーとの組み合わせを簡単にします。

renpy.input() 関数は何を許可する、またはしないかを決めるときに通常の式を取れるようになりました。

Grid はそのグリッドの外側、グリッドを内包する viewport の内側に適用される margin スタイルプロパティーをとるようになりました。

Ren'Py はテキストをセルフボイシングで発音されるが表示されなくする {alt} テキストタグをサポートします。その反対の {noalt} テキストタグもサポートします。

ランチャーウィンドウは必要ならリサイズできるようになりました。デフォルトサイズに戻すボタンがランチャー設定に追加されました。

新しい build.mac_info_plist 変数は mac app を簡単にカスタマイズできるようにします。

requests ライブラリーが Ren'Py に追加され、 Web へのアクセスがずっと簡単になりました。

キーボードのポーズボタンを押すとプレイヤーにゲームメニューを表示します。

7.3.5 link

修正 link

On desktop platforms, the presplash screen has been reworked so that it will not cause the window to become nonresponsive if clicked.

The iOS port has been updated to include modules that have been newly added to Ren'Py, allowing the compilation of iOS apps.

その他の変更 link

The audio directory, which automatically defines names in the audio namespace, has been made visible in the launcher, and is added to newly-created projects.

The new config.exception_handler callback allows an application to replace Ren'Py's exception handling system in its entirety.

7.3.4 link

修正 link

This release fixes major graphics glitches that were introduced in 7.3.3.

  • On Windows, textures would fail to be reloaded when switching from fullscreen to windowed mode or vice-versa. This would cause the wrong texture to be displayed.

  • On all platforms, graphical glitches could occur when Flatten() was used.

その他の変更 link

Dynamic images can now include "[prefix_]" everywhere, and especially when add has been used to add a dynamic image to buttons, drags, and similar focusable objects.

Creator-defined screen language statements may now take if statements as children.

The drag and drop system has been improved to better interact with updated screens.

7.3.3 link

オーディオ link

Ren'Py now supports an audio directory, which automatically defines names in the audio namespace. This makes it possible to have a file named game/audio/overture.ogg, and play it using:

play music overture

The new AudioData() class allows you to provide compressed audio data to Ren'Py, either generated programatically or taken from a source other than a file. To support this, the Python wave and sunau modules are now packaged with Ren'Py.

An issue with enabling the mixing of mono sound files has been fixed. This issue caused many WAV files not to play. (We still don't recommend the use of WAV files.)

プラットフォーム link

Ren'Py is now distributed as a signed and notarized binary on the Mac. As this process takes a very long time to accomplish, the ability to sign macOS binaries has been removed from Ren'Py itself, in favor of external scripts that take care of the signing and notarization process.

The minimum version supported by the Android port has been lowered to Android 19 (Android 4.4 KitKat).

The web port of Ren'Py has seen a number of changes:

  • Screen variants are now detected and set.

  • Fullscreen support has been improved, though the user may need to click to enable fullscreen.

  • Leaving the web page is detected, so persistent data may be saved.

  • 'game.zip' can now be renamed. 'DEFAULT_GAME_FILENAME' in index.html controls this.

  • Portable HTTP requests (native+renpyweb): see https://github.com/renpy/renpyweb/blob/master/utils/asyncrequest.rpy

  • Enable networking in Python web port for testing WebSockets, transparently available through the Python 'socket' module

  • HTTP Cache-Control allows for smoother game updates.

  • The pygame.draw module is now included, allowing Canvas support.

  • WebGL の互換性が改善しました。

その他の変更 link

During profiling conducted for the GL Rewrite project, it became clear that the switch to framebuffer objects in 7.3.0 was the cause of certain performance regressions. By changing how FBOs are used, Ren'Py performance has been improved.

The renpy.input() function can now be given the name of a screen that is used to prompt the user for input.

The creation of list, dicts, and sets inside of screen language is now analyzed correctly. This will allow more displayables to be analyzed as constant, improving screen performance.

The notify screen is now hidden on rollback.

The NVL mode screen indicates that it shows the window, which prevents problems when window show is in effect.

When a Call() with from_current set to true occurs during a multi-part statement (like a menu with dialogue), control is restored to the first part of that multi-part statement (thus causing the dialogue to be displayed).

More functions now use a tag's default layer.

renpy.is_init_phase() 関数が追加されました。

Automatic voice now works for dialogue that is part of a menu statement.

Support for GLES1 has been dropped. (It hadn't been used for years.)

The SelectedIf() and SensitiveIf() actions can now take other actions as arguments.

Many BarValues now take a force_step argument, which forces changes to the bar to be rounded to the nearest step value.

Frame() now allows the tile argument to be the string "integer", which tiles the contents of the frame an integer number of times.

Character() now allows the name argument to be a function or callable object when dynamic is true.

翻訳 link

韓国語とスペイン語の翻訳が更新されました。

7.3.2 link

修正 link

Fix a regression in the platform variables, caused by the previous release.

翻訳 link

Update the Spanish translation.

7.3.1 link

変更点 link

Descriptive text (text that is intended to be show when self-voicing is enabled, so that scenes can be described to the vision impaired) has been updated. Descriptive text is now accessed using the alt character (the old sv character has been retained as an alias.) It's also now possible to display descriptive text using a custom character, rather than the narrator.

Ren'Py now always initializes the media playback system, so that a movie can be played even if no audio will be played.

The default property of most displayables, which is used to choose a displayable to be focused by default, has been renamed to default_focus so that it does not conflict with the default statement. It also now takes an integer, with the displayable with the highest focus number getting focus.

The Flatten() displayable now passes positions from the child.

Seeded random number generators created with renpy.random.Random now support rollback.

When emulating Android or iOS, the platform variables (like renpy.android, renpy.ios, renpy.windows, and renpy.mobile) are set properly.

Renpyweb now stores the date and time that a save file was created.

修正 link

This release fixes a fairly major issue that could cause screens that interpolate text to not update, or update improperly.

This release properly runs the image prediction routine from the image prediction thread.

A problem with the {clear} text tag has been fixed.

The config.end_game_transition, which was not working properly in most circumstances, has been fixed.

翻訳 link

ロシア語と韓国語とスペイン語の翻訳が更新されました。

7.3.0 link

Renpyweb link

Courtesy of Sylvain Beucler, Ren'Py now can generate distributions for the the HTML5 web platforms, capable of running on modern web browsers that support the Web Assembly standard. This is intended for small games and demonstrations of larger games, as right now the implementation downloads the full game to the web browser before running any of it.

Web support is marked as beta, as there are cases where problem with the web platform (most notably, a lack of threading) cause problems such as sound glitches if an image takes too long to load. As a result, it is possible to have a Ren'Py game that works well on all other platforms, but not in the web browser. As web browsers themselves improve, we will improve our implementation and eventually remove the beta tag.

Building a web distribution can be done from the new "Web" button on the Ren'Py launcher. The launcher now includes a small web server, that can be used to launch the game in a creator's web browser for test purposes.

ユーザー定義ステートメント link

Ren'Py's creator-defined statements, and the Lexer objects that are used by them, have been extended to improve the functionality in many ways. With respect to the Lexer:

  • It is now possible to ask the Lexer object to parse a single line as a Ren'Py statement, or all the lines remaining in the block as Ren'Py statements.

  • It is now possible to ask the lexer to catch errors, so as to limit the scope of errors to a part of a creator-defined statement rather than the whole statement.

The renpy.register_statement() function has new arguments to enable new functionality.

  • Statement prediction can be controlled by the predict_all and predict_next arguments, which predict all possible next statements or take a function that determines what will run next, respectively.

  • The new post_execute argument lets one specify an execute function that is run as the next statement - the one after the creator-defined statement. This allows a pattern where a statement runs, executes the block inside it, and then runs something after the block to clean it up. (For example, an event that serves as a label, and then jumps back to a dispatcher when it is done.)

  • The new post_label argument lets one specify a function to supply the a label that goes after the creator-defined statement, which can function like the from clause to the call statement.

Ren'Py now stores the result of parsing a creator-defined statement in the .rpyc files. While this allows for more complex syntax and faster startup, it means that it may be necessary to force a recompile if you change a creator-defined statement's parse function

スクリーン言語の改善 link

It is now possible to supply an as clause to a screen language displayable. This is especially useful with drags, as it lets the screen capture the drag object and call methods on it as necessary.

The on statement can now take a list of events.

A screen now takes a sensitive property, which determines if it is possible to interact with the screen at all.

Ren'Py will now produce an error when a non-constant property follows a Python statement, inside screen language. (This was very rare, and almost always a mistake.)

テキスト改善 link

Ren'Py now includes support for self-closing custom text tags, which are custom text tags that do not require as closing text tag.

Ren'Py now supports three new flags that can be applied when formatting text:

  • "[varname!u]" forces the text to upper-case.

  • "[varname!l]" forces the text to lower-case.

  • "[varname!c]" forces the first letter of the text to upper-case, capitalizing it.

Android と iOS の改善 link

Ren'Py now uses Framebuffer Objects on any device that claims to support it. As a result focus_mask now works on Android and iOS.

Ren'Py now produces 64-bit arm binaries for Android. These will be required by the Google Play store later this year.

Text input on Android was rewritten again, to fix problems where the user was unable to advance. Completion was eliminated, as it was the source of the problems. While languages that require input methods will need a larger rewrite to function, Ren'Py should now properly handle all direct input keyboards.

翻訳 link

The Ren'Py launcher and sample project have been translated into Turkish by Arda Güler.

The Ren'Py tutorial game has been translated into Spanish by Moshibit.

フランス語、日本語、韓国語、ロシア語、スペイン語の翻訳が更新されました。

その他改善 link

The side displayable now renders its children in the order they are provided in the control string.

The say statement, menu statement, and renpy.call_screen statements now take a _mode argument, which specifies the mode Ren'Py goes into when these statements occur.

The renpy.show_screen()renpy.call_screen() 関数は zorder 引数を取るようになりました。

Ren'Py will now play a mono sound file with the same volume as a stereo sound file, rather than sending half the energy to each ear.

The new config.load_failed_label specifies a label that is jumped to when a load fails because Ren'Py can no longer find the current statement. This makes it possible to a game to implement its own recovery mechanism.

The new config.notify variable makes it possible to intercept the notification system and do your own thing.

The interface of config.say_attribute_transition_callback has been changed in an incompatible way, to allow sets of old and new tags to be given.

Action and BarValue now support a get_tooltip method, which allows the object to supply a default tooltip.

修正 link

A problem that could cause Ren'Py to drop certain characters, especially accent markers in Arabic, has been fixed.

The filename of the internal copy of OpenDyslexic has been changed so as not to cause problems with copies distributed with games.

7.2.2 link

Ren'Py now supports a new Accessibility menu, which can be accessed by pressing the "a" key. This menu, which is intended to be used by players, let's the player override the game font, change the scaling and spacing of text, and enable self-voicing.

Ren'Py will now allow files in the public game directory (/mnt/sdcard/Android/package/files/game) to override those included with the game proper. This has been listed as a feature in 7.2.0, but didn't work right.

Ren'Py will now include temporary image attributes in the say statements generated as part of the translation process.

When uploading to itch.io, Ren'Py now downloads butler itself. This means there is no longer a dependence on the location or structure of the Itch app, as there was before.

The bar values DictValue(), FieldValue(), VariableValue(), and ScreenVariableValue() all take a new action parameter, which gives an action that is performed each time the value changes.

The rollback system has been optimized to reduce the amount of garbage that needs to be collected.

7.2.1 link

iOS の改善 link

Ren'Py will now set the version field for the iOS application when generating a project.

Ren'Py will now look for the files ios-icon.png and ios-launchimage.png, and use them to generate the icon and launch image in the sizes required for iOS.

その他改善 link

The renpy.in_rollback() function returns True when in the rollback that occurs immediately after a load. This makes it possible to use:

python:
    if not renpy.in_rollback():
        renpy.run(ShowMenu('save'))

To display a save menu during an initial playthough, but not during loading or rollback.

config.say_attribute_transition_callback now exists, making it possible to select the transition to use on a per-say-statement basis.

新しい RENPY_SEARCHPATH 環境変数は config.searchpath を起動時に変更できます。

修正 link

Ren'Py has been audited to make sure that the semantics of == and != match, whenever == was redefined.

There was a fix to problems that might occur when a transform is added to a screen using the add statement.

The way extend processes arguments was changed to ensure that newer arguments take priority over arguments given to the statement being extended.

Ren'Py now properly considers the scope when comparing dynamic images for equality. This fixes an issue that prevented some dynamic images from updating when part of a screen.

A crash when config.save_dump is true on macOS has been fixed.

A crash when config.profile is true has been fixed.

Ren'Py now explicitly asks for text (as opposed to email, password, phone number etc) input on Android when the keyboard is displayed.

An issue has been fixed that prevented roll-forward from working through a menu statement.

Fixes a bug that prevents roll-forward through a menu.

7.2.0 link

一時的な画像属性を伴う say link

Ren'Py now supports temporary say attributes. Just like regular say attributes, these are included as part of the say statement. However, these temporary say attributes are reverted once the dialogue has finished. For example, in the script:

show eileen happy

e "I'm happy."

e @ vhappy "I'm really happy!"

e "I'm still happy."

In the first line and last line of dialogues, Eileen is using her happy emotion. The vhappy emotion is shown before the second line of dialogue, and replaced with the previous emotion (happy in this case), before it.

Text link

There have been a number of text changes that affect text when a window is scaled to a non-default size:

  • The text is now aligned on its baseline, rather than at the top of the text. This is relevant when an absolute outline offset is used.

  • It is now possible to choose how the outline scales when the window is scaled. This is done with the outline_scaling style property.

When positioning a Text object, the yanchor property can be renpy.BASELINE. When it is, the anchor is set to the baseline of the first line of the text.

ステートメント link

The new window auto show and window auto hide statements allow automatic dialogue window management to continue while showing or hiding the dialogue window.

The show screen and hide screen statements now take a with clause, that works the same way it does with show and hide.

The screen language use statement now can take an expression clause, that makes it take an expression rather than a literal screen name. This allows a variable to be used when selecting the screen that is included. See Use for more details.

変更点 link

新しい関数 :func:`renpy.is_skipping`は Ren'Py 現在スキップ中か報告します。

The input displayable now takes a new copypaste property, which when true allows copying with ctrl+C and pasting with ctrl+V. This is enabled in the console and launcher.

Preference("display", "window") now avoids creating a window bigger than the screen, and will be selected if the current window size is the maximum window size, if the size selected with gui.init() is bigger than the maximum window size.

Creator defined statements now have a few more lexer methods available, making it possible to to parse arguments, image name components, labels, and delimited python.

The renpy.force_autosave() function takes a new argument, that causes the autosave to block until it completes.

The ctc screen now takes a number of new parameters, if required.

The new im.Blur() image manipulator can blur an image. Thanks to Mal Graty for contributing it.

LayeredImage groups now support a multiple property, which allows multiple attributes in the same group to be displayed at the same time. This is useful because it allows the auto-definition function of a group to be applied to non-conflicting images.

Ren'Py will remain fullscreen when the mouse changes desktops, and will avoid shrinking a maximized window during a reload.

The config.allow_duplicate_labels variable can be defined or set in an init python block to allow duplicate labels to be defined in a game.

The Movie() displayable can now be told not to loop, and displays the associated static image when it stops looping. It also can take an image that is displayed before the movie proper starts.

Android の変更 link

The downloading of the Android SDK has been updated to fix a change in the provided tools that prevented things from downloading.

An explicit action is now given to the keyboard, to make sure the enter key works.

Ren'Py now uses the Amazon payment APIs when sideloaded onto a device made by Amazon, allowing their payment system to be tested on a dual-store APK.

Ren'Py will now allow files in the public game directory (/mnt/sdcard/Android/package/files/game) to override those included with the game proper.

修正 link

A bug preventing Ren'Py from displaying zero or negative-width characters (such as certain diacritics) has been fixed.

An issue that prevented Ren'Py from updating a displayable that was added to a screen with transform properties has been fixed.

The order of drags within a drag group is now preserved when an interaction restart occurs.

Size-changing properties like xysize now apply to a Drag and not the space it can move around in.

A bug that could cause a transparent, black, or gray line to appear on the bottom line of a screen during a dissolve has been fixed.

画像フォントのサポートの後戻りが修正されました。

Creating a new file from the navigation menu of the launcher now works.

Menu sets now work again.

Ren'Py will no longer crash if an incomparable type is given to Function() and other actions.

A case where rolling forward would fail is now fixed.

A problem that prevented the Steam overlay from showing up on macOS was fixed.

7.1.3 link

This was a quick re-release of 7.1.2 in order to fix a single bug, which was that a test change had been left in causing config.default_language to be set on initial startup.

7.1.2 link

改善 link

Ren'Py's screen language now support the inclusion of anonymous ATL transforms. It's now possible to write:

screen hello_title():
    text "Hello.":
        at transform:
            align (0.5, 0.5) alpha 0.0
            linear 0.5 alpha 1.0

The new SetLocalVariable() and ToggleLocalVariable() actions make it possible to set variables inside used screens.

The new config.menu_include_disabled variable determines if menus should include entries disabled by an if clause.

Shift-keybindings (like Shift+I and Shift+R) now work in the Android emulation mode.

Ren'Py now better reports errors in text tags that require a value but are not given one.

The new _version variable indicates the version of the game itself that was used when a new game is first created. This only stores the version at game creation - after that, it's up to the creator to keep it updated.

The Movie() displayable now supports a new mode the color data and alpha mask data are placed side-by-side in the same file. This prevents issues where a main and mask movie could go out of sync.

The FilePageNext() and FilePagePrevious() functions now take arguments that control if the they can bring the player to the auto or quick save pages.

The new config.skip_sounds variables determines if Ren'Py will skip non-looping audio files that are played while Ren'Py is skipping.

翻訳 link

Ren'Py now has the ability to automatically detect the locale of the user's system, and use it to set the language. Please see config.enable_language_autodetect and the Translation documentation for how this works.

The French, German, Korean, Russian, and Simplified Chinese translations have been updated.

修正 link

A Windows-specific bug that caused RTL (the support for languages like Arabic and Hebrew) to corrupt the second half of text strings has been fixed. This should prevent garbage characters from being displayed when rendering those languages.

Ren'Py will now report an error if a game accesses an image that does not exist, but has as a prefix an image that does exist. Before this change, if eileen happy exists and eileen happy unknown was shown, the additional attribute would be ignored.

Lint has been improved to deal with images that take attributes that are not in the image name, like layered images.

Ren'Py generates choice menu images that are suitable for use on the phone.

Android の修正 link

As Ren'Py's new Android support only worked well on a 64-bit version of Java 8, we make that 64-bit requirement explicit.

7.1.1 link

ヒストリーの修正 link

This release fixes an issue with Ren'Py's history screen. The problem occurred when a line of dialogue contained a quoted square bracket, so something like:

"I [[think] I'm having a problem."

When this occurs, the string "I [think] I'm having a problem." is added to the history. Ren'Py would then display that in history, substitute the think variable, and crash.

This is fixed by adding substitute False to the history screen. This is done to new projects, but for existing ones you'll need to make the fix yourself. Here's the new history screen:

screen history():

    tag menu

    ## Avoid predicting this screen, as it can be very large.
    predict False

    use game_menu(_("History"), scroll=("vpgrid" if gui.history_height else "viewport"), yinitial=1.0):

        style_prefix "history"

        for h in _history_list:

            window:

                ## This lays things out properly if history_height is None.
                has fixed:
                    yfit True

                if h.who:

                    label h.who:
                        style "history_name"
                        substitute False

                        ## Take the color of the who text from the Character, if set.
                        if "color" in h.who_args:
                            text_color h.who_args["color"]

                $ what = renpy.filter_text_tags(h.what, allow=gui.history_allow_tags)
                text what substitute False

        if not _history_list:
            label _("The dialogue history is empty.")

The new lines are the ones with substitute False on them. You'll want to make this change to your history screen to prevent his problem from happening.

Android の改善 link

Ren'Py now sets the amount of memory used by the Android build tool to the Google-set default of 1536 megabytes. To change this, edit rapt/project/gradle.properties. To make sure you're capable of building larger games, please make sure your computer has a 64-bit version of Java 8.

Ren'Py explicitly tells Android to pass the Enter key to an input.

Ren'Py now crops and sizes the icon correctly for versions of Android below Android 8 (Oreo).

Ren'Py gives a different numeric version number to the x86_64 apk. This will allow both x86_64 and armeabi-v7a builds to be uploaded to Google Play and other stores, rather than having to first created one build and then the other, manually changing the version numbers between.

その他改善 link

Ren'Py now handles the (lack of) drawing of zero width characters itself, preventing such characters from appearing as squares in text if the font does not support the zero width character.

Ren'Py supports the use of non-breaking space and zero-width non-breaking space characters to prevent images in text from being wrapped.

Ren'Py supports the a new "nestled-close" value for the ctc_position parameter of Character(). This value prevents there from being a break between the click-to-continue indicator and the other lines.

Drags (in drag-and-drop) now support alternate clicks. (Right clicks on desktop and long-clicks on touch platforms.)

修正 link

The SetVariable() and ToggleVariable() functions have been extended to accept namespaces and fields. So it's now possible to have actions like SetVariable("hero.strength", hero.strength + 1) or ToggleVariable("persistent.alternate_perspective").

Automatic management of the dialogue window (as enabled by the window auto statement) now considers if an in-game menu has a dialogue or caption associated with it, and handles that appropriately.

The source code to the embedded version of fribidi that Ren'Py is expected to build with is now included in the -source archive.

There have been a number of fixes to the voice sustain preference to make it work better with history and the voice replay action.

7.1 link

Android link

This release sees a major rewrite of Ren'Py's support for Android to modernize it. This is required so Ren'Py games can be uploaded to the Google Play store. Some of these changes may require you to update a game's files. Most notably, the format of icons has changed, so the icons will need to be redone.

The minimum version of Android that Ren'Py will run on has been raised to Android 19 (aka 4.4 KitKat), while it targets Android 28 (aka 9 Pie).

The x86_64 architecture has been added, while x86 has been dropped. (Some x86 devices may be able to run the arm platform version through binary translation layers.)

モノローグモード link

It's now possible to write multiple blocks of dialogue or narration at once, using triple-quoted strings. For example:

e """
This is one block of dialogue.

And this is a second block.
"""

will create two blocks of dialogue. See モノローグモード for more info.

There is also a new {clear} text tag that works with monologue. When the {clear} tag is part of a line by itself, it is the equivalent of the nvl clear statement. See NVL Monlologue Mode for more about this.

Say-With-Attribute Change link

There has been a change to the way a say-with-attributes is handled when there is not an image with the tag displaying. Previously, Ren'Py would use the attributes given in the most recent say-with-attributes statement to selected the side image to show.

Now, Ren'Py will use the provided attributes and existing attributes to resolve the side image. This makes a say-with-attributes that occurs when an image is not showing work the same way as when it is. When the attributes do not select a single side image, Ren'Py will select the image with all of the given attributes, and the most possible of the existing attributes.

The rationale for this change is to help with side images that are defined as layered images, where providing only the attributes that change makes sense.

アップデータの変更 link

The updater for Ren'Py itself now asks you to select the update channel each time you go to update. The purpose of this is to make it clear which channel you're updating to each time you update, so you don't accidentally update to a prerelease or nightly version after a release comes out.

As part of this, you might see the Prerelease channel missing for some updates. That's normal – unlike in previous versions, the channel only appears when there are prereleases available.

翻訳 link

The Ren'Py launcher, template game, and The Question have been translated into the Latin script of Malay by Muhammad Nur Hidayat Yasuyoshi.

韓国語の翻訳が更新されました。

It is now possible to translate the strings used by RAPT into non-English languages.

その他 link

Ren'Py can now automatically save the game upon quit, in a reliable fashion. (As compared to the previous autosave, which could fail or be cycled out.) This is controlled by the _quit_slot variable.

File actions (like FileSave(), FileLoad(), and FileAction()) can now take a slot=True argument. When this is given, the action loads a named slot, without involving the page.

The developer menu (accessed through Shift+D) can now display a screen that shows the attributes associated with displayed and hidden images.

Added renpy.transform_text(), a function to transform text without touching text tags or interpolation.

Buttons created using the make_buttons method of a Gallery object now inherit from the empty style, and not button. This prevents properties from the button style from causing problems.

The code to finish displaying text is now called from the event method, as if the mouse button was clicked. This helps prevent interaction ends when menus are up.

Displayable prefixes are supported when evaluating auto images in imagebuttons and image maps.

A bug that caused an error in an NVL-mode statement if the next statement was an NVL-mode statement with an undefined character name has been fixed.

When two ATL transforms are nested, the state from both is propagated, not just the outermost.

Ren'Py now updates dynamic images that are used in windows, bars, and frames. (And derived displayables, like buttons and imagemaps.)

An issue that caused Ren'Py to consume 100% of a core when modal True was given has been fixed.

Ren'Py now includes a copy of fribidi, rather than requiring an OS-installed version.

The new box_wrap_spacing allows control of the spacing between rows or columns introduced by box_wrap.

The adjust_spacing style property can now take "horizontal" and "vertical" as values, causing text spacing to be adjusted in only the specified direction.

LayerdImageProxy can now take an interpolated string.

The new config.context_callback is called when starting the game or entering a new context, like a menu context. It can be used to stop voice or sounds from playing when entering that context.

The Drag() displayable (and the screen language equivalent, drag) have grown a new activated property. This is callback that is called when the user first clicks the mouse on a drag. (Before it starts moving.)

7.0 link

Ren'Py 7.0 marks the completion of over a decade of development since Ren'Py 6 that brought features like ATL, Screen Language, OpenGL and DirectX acceleration, support for the Android and iOS platforms, Translation, Accessibility, and so much more.

For releases between 6.0 and 7.0, see the other entries in this changelog, and the older changelog on the Ren'Py website. The rest of this entry contains the differences between 7.0 and 6.99.14.3.

レイヤー画像 link

A layered image is a new way of defining images for use in Ren'Py. It's intended to be used with a sprite that has been created in Photoshop or some other program as a series of layers. The layered image system can use the attributes the image was displayed with and Python conditions to determine what layers to display.

Layered images are intended to be a replacement for the use of Composite() and ConditionSwitch() to define layered images. It includes a language that makes defining such images simpler, and Ren'Py can generate portions of the definitions from appropriately named files. It also integrates better with the rest of Ren'Py, as attributes can be predicted in ways that a ConditionSwitch cannot, and layered images work with the interactive director.

辞書トランジション link

Dict Transitions makes it possible to use the with statement and certain other functions to apply transitions to one or more layers. Ren'Py will not pause for these transitions to occur. Dict transitions make it possible – and even convenient – to have a transition apply to the sprites alone while dialogue is being displayed.

変更点 link

The old tutorial and old templates are no longer included with Ren'Py. They can still be used with new version of Ren'Py if copied into this or later versions.

The new Scroll() action makes it possible to have buttons that change the position of a viewport or the value of a bar.

The Dissolve(), ImageDissolve(), and AlphaDissolve() transitions now respect the alpha channels of their source displayables, as if given the alpha=True argument. As omitting the alpha channel is no longer an optimization, this change allows the same transitions to be used in more places.

Automatic image definitions now take place at init level 0, rather than an init level of greater than 999. This allows renpy.has_image() to be used in init blocks.

The interactive director now has a button that allows you to choose if it is displayed at the top or the bottom of the screen.

The screen language for statement now takes an index clause:

for i index i.name in party:
    ...

When provided, it should return a unique value that can map information like button and transform state to the object it originates from.

There is now alternate ruby text, allowing two kinds of ruby text to be displayed at once (such as a translation and pronunciation guide).

The new displayable prefix system make it possible to define your own displayables that can be accessed using strings, the same way that images, image files, and solids have a string form.

Ren'Py now supports creating .zip files that have single files (such as .rpa files) that are larger than 2GB. As this requires the use of the Zip64 standard, unpacking such files may not be supported on some platforms, most notably Windows XP.

The new renpy.get_hidden_tags() function returns the set of tags that have attributes but or otherwise hidden, while the renpy.get_showing_tags() function can return a list of tags in sorted order.

Showing a movie sprite a second time will now replay the movie from the start, for consistency with ATL and other animations.

The documentation has received an editing pass, courtesy of Craig P. Donson.

翻訳 link

The Ren'Py tutorial and The Question now have French translations, thanks to Alexandre Tranchant.

日本語とロシア語の翻訳が更新されました。

修正 link

This fixes a regression that prevented screens from handling the hide or replaced events when the screen was not being shown. (This might be the case when the player is skipping through the game.)

An issue that caused the interactive director to be translated into Russian when the default (English) language was being used has been fixed.

The Composite(), Crop() and Tile() displayables are now actually available under their new names.

An issue that could cause Ren'Py to roll back to an incorrect place when accessing the console has been fixed. This could cause the console to display incorrect data, while in the console itself.

更に古い変更履歴 link

The changelogs for some Ren'Py 6 versions can be found here, with older changelogs being found at: