Ren'Py

Ren'Py（レンパイ）は、ビジュアルノベルの制作を容易にするフリーソフトウェアエンジンである。NScripterのような他の有名なビジュアルノベルエンジンとは異なり、Ren'Pyは英語圏で多く用いられており、300以上のゲームが英語で製作されている。Ren'Pyの名前は、「恋愛」ゲームと、エンジンの開発言語であるPythonに由来している。2012年3月より、日本語のサイトが開設された。
特徴.
Ren'Pyには、多くのビジュアルノベルで必要とされる機能が含まれており、ストーリーの分岐、ゲームのセーブやロード、前の場面へのロールバック、様々なトランジションなどがある。Ren'Pyのスクリプトは脚本に似た構文で書かれ、追加的にPythonコードのブロックを含めることで独自の拡張機能を実装できる。さらに、ゲームの配布においてスクリプトを難読化・アーカイブすること（配布物のビルド）で著作権侵害を軽減させるためのツールが含まれている。
ゲームエンジンは主にPythonで書かれているが、レンダリング処理などはCythonとCで書かれている。スクリプトの解析などは一貫してPythonが使われており、スクリプトはゲームの実行前にコンパイル済みのコードに変換される。スクリプト中にはPythonのコードを埋め込むことができる一方で、画像の描画やアニメーションの記述に用いられるATL(Animation and Transformation Language)は英語の構文に似ており、スクリプトの可読性が高い。
ソフトウェアライセンス.
Ren'Pyは、フリーかつオープンソースのソフトウェアであるが、MITライセンスを採用しておりコピーレフトではない（緩やかなライセンスである）ため、プロプライエタリな作品に使用することも妨げられない。また、作品を販売すること（商用利用）も可能である。
多言語対応.
Ren'Pyに含まれている機能を用いることで、1つのゲームを多言語に翻訳することができる。より一般的なソフトウェアではgettextなどが用いられるが、Ren'Pyではビジュアルノベルに適した独自のフレームワークに基づいて設計されており、ユーザーの選択によって言語が切り替わる。
当該言語の表示には対応するフォントが必要だが、SDKにもモトヤLシーダ3等幅などのフォントが同梱されており利用可能なほか、作者自ら任意のフォントファイルを作品に同梱させ配布することも可能である。
OpenGLによるレンダリング.
画像の変換操作(回転・移動・拡大等)にはOpenGLを利用しており、描画の高速化を図っている。一方で、三次元効果には対応していない。
Pythonによる拡張.
ゲームスクリプト中にはPythonのコードを記述できる。ゲームの開発者は、ストーリーの分岐に欠かせないフラグの管理をPythonのコードとして記述する他、Ren'Pyに含まれていない画面効果などを実装できる。プログラムの記述に一貫してPythonを用いることで、ゲーム開発者はポインター操作や変数の型付けといった、ゲームストーリーの製作とは直接関係ないことに割く時間を減らすことができる。
動作環境.
Ren'PyはPythonとPygameによって作られており、公式にAndroid、iOS、Linux、macOS、Windowsでの動作がサポートされている。また、Arch Linux、Ubuntu、Debian、Gentooのリポジトリに取り込まれている。
文法.
Ren'Pyのコードは、その開発言語のPythonと同じように、字下げレベルが文法的意味を持っている。この理由の一つは、Ren'PyのコードがPythonのコードを含むからである。以下に、最も簡単なRen'Pyのコードを示す。
label start:
 "エイリーン" "Ren'Pyのゲームへようこそ"
上記のコードは、画面下の会話ウィンドウに、話し手として「エイリーン」を、話す内容として「Ren'Pyのゲームへようこそ」を表示する。
Ren'Pyの特徴の一つにキャラクターオブジェクトが存在する。キャラクターオブジェクトは内部的には関数として機能し、話し手の名前やウィンドウスタイルの状態などはキャラクターオブジェクトによって切り替える。
define e = Character("エイリーン", color="#0f0", kind=nvl)
label start:
 e "Ren'Pyのゲームへようこそ"
上記のコードは、NVLウィンドウ上にキャラクター名を緑色で描画する。
スクリプト中にはpythonステートメントを含めることができ、この内部では任意のPythonのコードを実行できる。次に、Pythonのコードを含む例を示す。
label start:
 "エイリーン" "Pythonコードを実行します。"
 python:
 some_function() # 任意のPythonコード
 "エイリーン" "実行しました。"
その他の言語仕様については、Language Basics や クイックスタートマニュアル で説明されている。