This page is out of date

You've reached a page on the Ren'Py wiki. Due to massive spam, the wiki hasn't been updated in over 5 years, and much of the information here is very out of date. We've kept it because some of it is of historic interest, but all the information relevant to modern versions of Ren'Py has been moved elsewhere.

Some places to look are:

Please do not create new links to this page.


クイックスタート マニュアル

Ren'Py クイックスタートマニュアルへようこそ。少ない手順でどうやってゼロからゲームを作るかをあなたに伝えるのがこのマニュアルの目的です。そのために、シンプルなゲーム「The Question」の作り方を示します。このマニュアルには多くのサンプルが含まれていますが、それらはデモゲームにも入ってます。

Ren'Py ランチャー

ゲームを作る前に、ランチャーの動作を確認しましょう。ランチャーを使って Ren'Pyプロジェクトの生成、管理、編集、実行ができます。

はじめに

まずは Ren'Py をダウンロードし、解凍しましょう。解凍してできたフォルダの中にあるRen'Pyプログラムを実行するとランチャーが起動します。

プロジェクトの選択

とにかく「The question」をプレイしてみましょう。メニューの「Select Project(プロジェクトの選択)」をクリックし、プロジェクト一覧から「the_question」を選びます。次に、メニューに戻り「Launch(実行)」をクリックすると「The question」が始まります。

プロジェクトを Ren'Py のデモに戻したい場合は、同じ手順で「the_question」の代わりに「demo」を選択してください。

新規プロジェクトの生成

ランチャーのメニューから「New Project(新規プロジェクト)」を選択してください。テンプレートをどれにするか訊ねられるので「template」を選びます。次にプロジェクト名を入力します。「the_question」はすでに存在しているので、ここではそれとは違う名前、「my_question」とします。次に好みの色テーマを選びましょう。これは後で変更可能です。ランチャーのトップメニューに戻ると、今作った新規プロジェクトが選択された状態になっています。

シンプルなゲーム

label start:
    "やっぱり聞いてみよう……"

    "僕" "あのさ、良かったら……"
    "僕" "良かったらノベルゲームの絵を描いてくれないかな。"

    "(沈黙)"
    "彼女はきょとんとした様子で言った"

    "シルヴィー" "え……いいけど、でも、\"ノベルゲーム\"って何?"

これが多分、Ren'Py のゲームの最もシンプルな形でしょう。画像などは出てきませんが、2人のキャラクターの会話が記されています。

とにかく試してみましょう。プロジェクト「My Question」が選択された状態で、ランチャーのトップメニューから「Edit Script(スクリプトの編集)」をクリックすると Ren'Py に付属のテキストエディタが起動します。ゼロから作ることが目的なので、script.rpy の内容を一旦全部消して、上のサンプルをコピー・ペーストしてください。

これで準備完了です。メニューに戻ってプロジェクトを実行しましょう。 上のサンプルには特に書かれていないにも関わらず、Ren'Py の側で用意したセーブ・ロードや設定のメニューが表示されるのがミソです。 では、「Start Game(ゲーム開始)」をクリックして作ったサンプルゲームをプレイしてみてください。

このサンプルには、よく使われる Ren'Py の命令がいくつか入ってます。

1行目はラベル(label)ステートメントです。ラベルは、プログラム中の特定の場所に付ける地名や目印といったものです。この場合「start」という名前のラベルを作っています。この「start」ラベルは特殊なもので、メインメニューの「Start Game」をクリックすると、まずはここから始まると決まっています。

その他の行は発言ステートメントです。このステートメントには2種類あり、1つは単に「ダブルクォーテーション(")」で囲まれたもので、ナレーションや主人公が考えていることに使います。 もう1つは会話のためのもので、引数が2つあります。1つ目は話者の名前、2つ目はセリフです。

発言ステートメントが半角スペース4つでインデントされていることに注意してください。これは、ラベルステートメントの下位ブロックでだからです。Ren'Py では、ブロックは親となる上位のステートメントよりも相対的に多くインデントするようになっており、同じ階層のものは同じ量だけインデントしなければいけません。

セリフの中でダブルクォーテーション(")が出てくる場合、前にバックスラッシュ(または円記号「\」)を付けてエスケープします。上の例では最後の行で使っています。

このサンプルは見栄えはしませんが、Ren'Py を使って「とにかく最低限動くもの」を作るのがいかに簡単か分かったのではないでしょうか。少し後に画像表示の方法なども出てきますが、その前にキャラクターを宣言する方法を見てみましょう。

キャラクター

上のサンプルのやり方では、キャラクターが何か喋るたびに何度も同じキャラクター名を入力しなければならないので大変です。会話の多いゲームだとかなり大変でしょう。また、2人のキャラクターのセリフが同じように表示されます。そこで、Ren'Py では便利な方法を用意しています。キャラクター名の短縮形と、キャラクター毎のセリフの文字色を予め決めておけるのです。

define s = Character('シルヴィー', color="#c8ffc8")
define m = Character('僕', color="#c8c8ff")

label start:
    "やっぱり聞いてみよう……"

    m "あのさ、良かったら……"
    m "ノベルゲーム作ってるんだけど、絵を描いてくれない?"

    "(沈黙)"
    "彼女はきょとんとした様子で言った"

    s "え……いいけど、でも、\"ノベルゲーム\"って何?"

1行目と2行目ではキャラクターを定義しています。1行目ではキャラクター名「Sylvie」の文字色を緑として、短縮名「s」を定義しています。(色はWebページに使われているように、赤、緑、青の3色を16進数で指定します。)

2行目はキャラクター名「Me」の文字色を赤として、短縮名「m」を定義しています。その他のキャラクターも、この行をコピーして短縮名、本来の名前、色を変えることで定義できます。

また、発言ステートメントの部分で本来の長い名前の代わりに短縮名を使っています。このように書いておけば Ren'Py は初期化ブロックでの定義に従って表示します。

画像

ほとんどのビジュアルノベルには画像があります。では、ゲームに画像を加えましょう。

image bg meadow = "meadow.jpg"
image bg uni = "uni.jpg"

image sylvie smile = "sylvie_smile.png"
image sylvie surprised = "sylvie_surprised.png"    

define s = Character('シルヴィー', color="#c8ffc8")
define m = Character('僕', color="#c8c8ff")

label start:
    scene bg meadow
    show sylvie smile

    "やっぱり聞いてみよう……"

    m "あのさ、良かったら……"
    m "良かったらノベルゲームの絵を描いてくれないかな。"

    show sylvie surprised

    "(沈黙)"
    "彼女はきょとんとした様子で言った"

    show sylvie smile

    s "え……いいけど、でも、\"ノベルゲーム\"って何?"

まず新しいこととして、imageステートメントによって画像を宣言します。上の例では、1、2、4、5行目でimageステートメントを使っています。imageステートメントでは、画像名とファイル名を指定します。

たとえば4行目では、「sylvie smile」という名前の画像と「sylvie_smile.png」というファイル名、そして「sylvie」というタグを対応付けています。

11行目にあるsceneステートメントは、画面を消去して「bg meadow」という画像を表示します。その次の行のshowステートメントは「sylvie smile」という画像を画面に表示します。

画像名の前の部分はタグです。すでに画面に画像が表示されている時に同じタグを持つ別の画像を表示した場合、元の画像は後で表示された画像で置き換えられます。上のサンプルの 19行目に出てくる 2番目の show 命令を見てください。 18行目までの流れで画面には「sylvie smile」という画像が表示されています。ここで 19行目が実行されると、ここで表示される画像に同じ「sylvie」タグが付けられているため、「sylvie smile」が「sylvie surprised」へと置き換えられるわけです。

Ren'Py が画像を見つけられるように、画像ファイルは対象となるプロジェクトの game フォルダ内に置かなければなりません。game フォルダはランチャーのメニューの「Game Directory」ボタンをクリックしても開くことができます。

Ren'Py では背景画像と立ち絵との間にあまり違いがなく、同じ「画像」として扱われます。一般的に、立ち絵には透過が必要となるので PNG形式で用意すべきです。背景には JPEG と PNG が使えます。また、慣例により、背景画像には「bg」タグを付けることになっています。

Hideステートメント

指定した画像を隠すには hideステートメントを使います。

    s "すぐに取り掛かるよ!"

    hide sylvie

    "..."

    m "そういう意味じゃなくて。"

hideステートメントを使うことはあまりないでしょう。キャラクターの表情やポーズなどの変化にはshowステートメントを使えばいいですし、画面上のキャラクターを全て消すにはsceneステートメントを使えばいいです。つまり、hideステートメントが必要になるのは、背景はそのままで、あるキャラクターだけ消す場合です。

トランジション

単純に画像を表示したり消したりするのは退屈なので、 Ren'Pyではもっと色々なトランジションを選択できます。トランジションは、最後に表示した画面から、scene、show、hideステートメントによって変化する次の画面にエフェクトを伴って遷移させます。

label start:
    scene bg uni
    show sylvie smile

    s "ねぇ。一緒に帰らない?"
    m "うん……"
    "そう言った僕の声はすでに震えていた。"

    scene bg meadow
    with fade
    
    "町のすぐ外にある牧草地に着いた。"
    "ここの秋はとてもきれいだ。"
    "子供のころ、僕らはここでよく遊んだものだ。"
    m "あの……えーと……"

    show sylvie smile
    with dissolve
    
    "彼女はこっちを振り向き笑った。"
    "やっぱり聞いてみよう。"
    m "あのさ、良かったら……"
    m "良かったらノベルゲームの絵を描いてくれないかな。"

withステートメントはトランジションの名前を取ります。最も一般的なものは dissolve で、次の画面に徐々に変化させます。他に使いやすいトランジションは fade で、一旦画面を黒色にフェードさせてから、新しい画面にもう一度フェードさせます。

複数の scene、show、hide ステートメントの後にトランジションが指定された場合、効果はそれらの全てに対して適用されます。たとえば:

    scene bg meadow
    show sylvie smile
    with dissolve

この場合、"bg meadow" と "sylvie smile" が同時にディゾルブで表示されます。最初に背景をディゾルブで表示し、その後で立ち絵をディゾルブで表示させたい場合は、次のように別々に指定します:

    scene bg meadow
    with dissolve
    show sylvie smile
    with dissolve

この場合、まず meadow をディゾルブさせてから sylvie をディゾルブさせます。meadow を直ちに表示させてから sylvie を表示させたい場合は次のようにします:

    scene bg meadow
    with None
    show sylvie smile
    with dissolve

このように、トランジションなしで単純に画像を切り替えたい場合は None を指定します。

位置の変更

デフォルトでは画像は水平方向の中央に表示され、画像の下端が画面の下端と同じ位置になるように表示されます。キャラクターが1人のときは問題ありませんが、複数のキャラクターを表示する場合は別の場所に表示しなければいけません。また、ストーリー進行に伴ってキャラクターを移動させたいときもあります。

    show sylvie smile at right

位置を変更するには、showステートメントに at 項を追加します。at項に位置を指定すると、画像を指定した位置に表示します。Ren'Pyには既に定義された位置があります。left は画面左側、right は画面右側、center は水平方向の中央(デフォルトの位置)、truecenter は水平、垂直方向とも画面中央です。

もっと細かく位置を指定することもできますが、ここでは割愛します。

音楽とサウンド

ゲームにBGMはつきものです。Ren'Pyでは音楽は再生停止の指示があるまでずっとループ再生されます。音楽は play music ステートメントで再生できます。

    play music "illurock.ogg"

音楽を切り替える際に fadeout 項を指定すると、古い音楽をフェードアウトさせながら次の音楽を再生させます。

    play music "illurock.ogg" fadeout 1.0

音楽の再生を止める場合、stop music ステートメントを使います。これも fadeout 項に対応しています。

    stop music

サウンドエフェクトを再生するには play sound ステートメントを使います:

    play sound "effect.ogg"

Ren'Py は色々な種類の音声フォーマットをサポートしていますが、Ogg Vorbis が推奨されています。画像ファイルと同じく、音声ファイルも game フォルダに置きます。

エンディングの処理

return ステートメントを使うと、何も call されていない場合はゲームを終了します。終わらせる前に、「ここで終り」であることをユーザーにはっきりと伝えると親切でしょう。また、エンディングが複数ある場合は「ハッピーエンド 3」のように、エンディングの種類や番号を表示するのもいいでしょう。

    ".:. ハッピーエンド"

    return

選択肢のないキネティックノベルに必要なものは以上です。ここからはユーザーに選択肢を与えるゲームの作り方を説明します。

メニュー、ラベル、ジャンプ

プレイヤーにメニューから選択肢を選ばせるには menu ステートメントを使います。

    s "え……いいけど、でも、\"ノベルゲーム\"って何?"

menu:
    "絵の付いた物語だよ。":
         jump vn

    "エロゲだよ。":
         jump hentai

label vn:    
    m "絵と音楽の付いた物語だよ。"
    jump marry

label hentai:
    m "エッチなシーンのあるゲームのことだよ。"
    jump marry

label marry:
    scene black
    with dissolve

    "--- 数年後 ---"

この例は Ren'Py におけるメニューの使い方を示しています。menu ステートメントは、ゲーム中にメニューを組み込みます。menu ステートメントは複数の行ブロックを取り、それぞれの文字列にはコロンが付いています。これらの文字列は、ユーザーに表示するメニューの選択肢となります。それぞれの選択肢には、いくつかの Ren'Py ステートメントのブロックが続きます。選択肢が選択されると、続く選択肢が実行されます。

この例では。それぞれのメニューは jump ステートメントを実行します。jump ステートメントは label ステートメントによって定義されたラベルにジャンプします。ラベルにジャンプすると、それに続くコードが実行されます。

上の例では、Sylvie が質問した後、ユーザーに2つの選択肢が与えられます。ユーザーが「絵の付いた物語だよ。」を選択すると、1つ目の jump ステートメントが実行され、vn ラベルにジャンプします。そしてキャラクターが「絵と音楽の付いた物語だよ。」と話し、marry ラベルにジャンプします。

ラベルはゲームディレクトリの .rpy で終わるあらゆるファイルに記述できます。Ren'Py ではファイル名は重要ではなく、ラベルがあればそこにジャンプできます。

PythonとIf文

ここまで見てきた「シンプルなゲーム」では、menu ステートメントと jump ステートメントを使ってきました。ここからは、ユーザーの選択した結果を変数に格納し、後でその値を取り出す方法を紹介します。Ren'Py が Python をサポートしている理由の一つはここにあります。

Pythonを使う方法は2つあります。1行だけで済む場合は行の先頭にドル記号「$」を付けます。複数行の場合はそれをブロックとし、ブロックの頭にキーワード「python:」を付けます。

Pythonを使うと、プレイヤーの選択に応じてフラグを格納することができます。その場合、フラグ用の変数はゲームの最初の方で初期化しておきます:

label start:
    $ bl_game = False

メニューによって選択されたコードでフラグを書き換えるには、次のようにします:

label hentai:

    $ bl_game = True

    m "エッチなシーンのあるゲームのことだよ"
    s "それってBLのゲームみたいなの?"
    s "そういうの作ってみたかったんだ。"
    s "もちろん。やらせて!"

    jump marry

そして後でフラグを調べます:

    "そういう訳で、僕らは一緒にビジュアルノベルを作ることになった。"
    "僕らはいろんなゲームを作り、作ることを楽しんだ。"

    if bl_game:
        "彼女が製作にこだわっていたボーイズラブなゲームは別として、だけど。"

    "そしてある日……"

もちろん、Pythonの変数が受け入れる値は単純なTrue/False値だけではなく、Pythonの任意の値を格納できます。プレイヤー名や点数の格納、その他様々な目的に利用できます。Ren'Py では Python の機能をフルに使えるので、やり方次第であらゆることができます。

ゲームのリリース

ゲームを作成したとき、リリース前にすべきことを以下に挙げます:

options.rpy の編集 新しいゲームの作成時に作られる options.rpy というファイルを修正することで、色々なカスタマイズができます。カスタマイズできる項目の中には、画面の幅や高さのように、ゲーム作りを始める前に決めておくべき項目と、ウィンドウのタイトルなどのようにいつでも変更できるものがあります。

Ren'Py のプラグの追加 このステップは完全にオプションです。(入れてもらえれば嬉しいですし、入れなくても構いません。) ゲームにクレジットを入れる場合、その中に Ren'Py の文字が含まれていますか? 一例として「Made with the Ren'Py visual novel engine. (Ren'Pyビジュアルノベルエンジンを用いて作成しました。)」という文言を提案しますが、単なる提案なので作者に任せます。

これは、あなたの作ったゲームに Ren'Py のクレジットを含めることが Ren'Py を広める上で最も良い方法だからです。そうしてもらえると、あなたの助力によって多くの人に Ren'Py を使ったノベルゲーム作成について知ってもらうことができます。

README ファイルの作成 プロジェクトを収めたディレクトリ(game ディレクトリの一つ上)に README.txt ファイルを置きたいでしょう。Ren'Py にサンプルファイルを含めているので、修正すると良いでしょう。ゲームの再配布などを指定するライセンスについても書いておきましょう。

Ren'Py の新バージョンをチェック Ren'Py はバグを修正したり新しい機能が追加されたときに新バージョンが公開されます。ゲームを公開する前に ダウンロードページ で新バージョンが出ていないかチェックしてください。

スクリプトのチェック ランチャーの「Tools」から「Check Script (Lint)」を選んでください。エラーがないかどうかチェックできます。こうしたエラーは Mac や Linux ユーザーに何らかの影響を与えるかもしれないので、もしあなたが Mac や Linux で動作確認できなくてもチェックしておくことが重要です。

配布物のビルド 「Tools」ページから「distribute」をクリックします。ランチャーはスクリプトをもう一度確認し、いくつかの質問をします。そしてゲームの配布物のビルドをします。

テスト Lint は完璧なものではありません。公開の前には自分でプレイして動作を確認しましょう。

リリース 生成されたファイル(Windows、Mac、Linux向け)をWebなどで公開し、ダウンロードできることを皆に伝えましょう。ゲームがリリースされました。おめでとう!

よろしければ Lemma Soft forums であなたのゲームについて教えてください。

The Question のスクリプト

The Question の完全なスクリプトは ここ で見れます。

もっと知りたい場合は

This Quickstart has barely scratched the surface of what Ren'Py is capable of. For simplicity's sake, we've omitted many features Ren'Py supports. To get a feel for what Ren'Py is capable of, we suggest playing through the demo, and having Eileen demonstrate these features to you.

To learn more about Ren'Py, we suggest starting with the Ren'Py Web Tutorial. To make games where text fills the entire screen, take a look at the NVL-Mode Tutorial. The Cookbook contains recipes that show how to do accomplish various tasks with Ren'Py, from the fairly simple to the complex. The Reference Manual is complex, but contains quite a bit of information on how to do things with Ren'Py.

The most common questions about Ren'Py are answered in the FAQ. If you have questions, we suggest asking them at the Lemma Soft forums, the official forum of Ren'Py. This is the central hub of the Ren'Py community, and we welcome new users, and the questions they bring.

Thank you for choosing the Ren'Py visual novel engine. We look forward to seeing what you can create with it!


この記事は、クイックスタート マニュアルを参考にし、加筆訂正を加えたものです。