Changelog (Ren'Py 7.x-) link

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`と :func:`mark_audio_unseen() でオーディオファイルが視聴済みか設定出来るようになりました。

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

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

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

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

xsizeysize に浮動小数を使用して適切な結果になるように出来ました。以前浮動小数は2倍で適用されたので、 :func:`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

Atomエディターとその language-renpy プラグインが更新され、最近のバージョンの 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 <preference-variables> の過去に未記載だったメソッドをいくつか記載しました。これらのメソッドにより現在のボリュームやミュートの値の所得や設定が可能になります。

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 がフォーカス可能になり新しいエフェクトが可能になりました。

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

renpy.get_sdl_dll()renpy.get_sdl_window_pointer() 関数により ctypes から SDL DLL にアクセス出来るようになりました。これにより SDL に含まれるが Ren'Py にない機能を実装できるようになりました。

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 は GL のロード失敗を確認したら、旧ライブラリに戻るようになりました。

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 サポートに default_fade 引数が追加されました。これは motion と expression の最初と最後のフェードのデフォルト時間を変更します。

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 や小さなモニターで使用されたときに差が出ます。

本リリースではモデルベースのレンダラーはオプションであり、 config.gl2 変数で制御します。さらに実験を済ませれば、 Ren'Py のデフォルトのレンダラーになるはずです。

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 をレイヤーに使用してレイヤー全体を変色できるようになり別画像を用意しなくともゲームをセピア調や白黒にできるようになりました。

画像マニピュレータと transform プロパティーの matrixcolor には少し違いがあり、新しいバージョンは 4x4 のマトリックスと premultiplied alpha color を使用するので新しい プロパティーは同じマトリックスを使用できません。変わりにいくつもの新しい ColorMatrix オブジェクトがあります。

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

Python 2/Python 3 互換モード link

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

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

.rpyc ファイルが rpy python 3 で始まるなら、そのファイルは Python 3 互換モードでコンパイルされます。これには 2 つの変更を含みます。 :

  • 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 ではビルドシステムがやり直され、複数のビルドシステム

この結果として Ren'Py が公式にサポートするプラットフォームのリストがわずかに変更しました。こちらが最新のサポートリストとなります。 :

プラットフォーム

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-createrd 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

Audio 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.)

Platforms 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 fullscren.
  • 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 compatibility has been improved.

その他の変更 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 dialouge to be displayed).

More functions now use a tag's default layer.

The renpy.is_init_phase() function has been added.

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

The Korean and Spanish translations have been updated.

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 impared) 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

The Russian, Korean, and Spanish translations were updated.

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.)

Text Improvements 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.

French, Japanese, Korean, Russian and Spanish translations have been updated for this release.

その他改善 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 tak 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

Temporary Say Attributes 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.

Statements 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

The new renpy.is_skipping() function reports if Ren'Py is currently skipping.

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.

A regression in support for imagefonts 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 Simplifed 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

History Fix 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.)

Monologue Mode 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.

The Korean translation has been significantly updated.

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.

Dict Transitions 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.

The Japanese and Russian translations have been updated.

修正 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: