クイックスタート link

Ren'Py クイックスタートマニュアルにようこそ。このマニュアルでは、Ren'Py のゲームを簡単な手順でゼロから作る方法を説明します。そのために、簡単なゲーム The Question の作り方をお見せします。マニュアルで使用している例のいくつかは、このデモゲームの一部に含まれています。

Ren'Py ランチャー link

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

始めましょう。 まず、 Ren'Py をダウンロード します。

Ren'Py をダウンロードしたら、それを解凍します。パッケージファイルを右クリックし、「展開」のオプションがあればそれを、なければ「開く」を選びます。プロンプトに従えば Ren'Py の作業用コピーを得られます。

注釈

Ren'Py は、必ずディスクのディレクトリーやフォルダーに展開してください。ZIP ファイルの中から実行しようとすると、適切に動作しません。

Ren'Py を展開したら、実行してみましょう。

  • Windows では、 renpy または renpy.exe プログラムを実行してください。

  • Mac OS X では、 renpy アプリケーションを実行してください。

  • Linux では、 renpy.sh スクリプトを実行してください。

実行すると、Ren'Py ランチャーが動作するはずです。

Ren'Py ランチャーは複数の言語に翻訳されています。言語を変更するには、「preferences」を選択後、希望の言語を選んで下さい。

_images/launcher.png

プロジェクトの選択と起動 先ず The Question のような完成されたゲームを見てみましょう。これには Ren'Py ランチャーを起動し、最初の画面から The Question を選択します。 Launch Project を選んで The Question を起動しましょう。

「The Question」の代わりに 「Tutorial」 を選択しても、同様の手順で Ren'Py のデモンストレーションが見れます。

新しいプロジェクトの作成 ランチャーから「 Create New Project 」を選択して新しいプロジェクトの作成をしてください。ランチャーはプロジェクトの名前を尋ねます。「the_question」 はすでに使われているので 「My Question」 のような違った名前を入力するべきです。ランチャーは次にプロジェクトのカラーテーマを尋ねます。ここで入念に選ぶ必要はありません、単にあなたにとって魅力的なものを選びましょう。これであなたの新しいゲームが選択された状態でランチャーのトップメニューに戻っているでしょう。

簡単なゲーム link

label start:
    "I'll ask her..."

    "Me" "Um... will you..."
    "Me" "Will you be my artist for a visual novel?"

    "Silence."
    "She is shocked, and then..."

    "Sylvie" "Sure, but what is a \"visual novel?\""

これは、Ren'Py のゲームの中で最も簡単なもののひとつでしょう。絵などは一切無く、二人のキャラクターの会話だけを表示します。

これを試すためにはランチャーを開いて「 My Question Project 」を選択し「 Edit File 」から「 script.rpy 」を選択します。 Ren'Py はおそらくあなたが選択したエディターをダウンロード後、テキストエディターを選択するよう求めます。それが完了すると script.rpy はそのエディターで開かれます。 script.rpy の内容をすべて消去して上記の例を script.rpy にコピーして保存してください。

さあ、このゲームを実行してみましょう。ランチャーに戻って、 「Launch Project」 を選択してください。その他のどんな作業をしなくとも、 Ren'Py が起動し、ゲームのロード、セーブ、複数の設定の変更をするメニューが表示されると気づくでしょう。準備が出来たら、「 Start Game 」をクリックして、このゲームをひと通りプレイしてみてください。

この例では Ren'Py でよく使われるステートメントをいくつか使用しています。

1行目は label ステートメントです。label ステートメントは、プログラム内のある場所に名前を与えるのに使います。この例では、 start という名前のラベルを作ります。start ラベルは、ユーザーがメインメニューで「Start Game」をクリックしたときに Ren'Py のスクリプトが始まる場所となる、特別なラベルです。

残りの行は say ステートメントです。say ステートメントには2つの形式があります。第1の形式はある行に文字列 (ダブルクオートで始まり、文字を含み、ダブルクオートで終わるもの) だけがあるものです。これはナレーションやメインキャラクターの思考に使われます。第2の形式は2つの文字列で構成され、前半の文字列はキャラクターの名前で、後半の文字列はそのキャラクターの台詞です。これは会話に使われます。

なお、ここの say ステートメントはすべて4つのスペースでインデントされています。このステートメントは label ステートメントの下にあるブロックだからです。Ren'Py では、ブロックは先行するステートメントに対してインデントされていなければならず、ブロック内のすべてのステートメントは同じ量だけインデントされている必要があります。

文字列がダブルクォーテーションを含むときはそのダブルクォーテーションの前にバックスラッシュを置かなければなりません。これは前述の例の最終行で行われています。

この簡単なゲームは見栄えはしませんが、Ren'Py で動くものを作ることがいかに簡単か、という一例です。少ししたら画像を追加しますが、その前に、キャラクターを宣言する方法を見てみましょう。

初期化 link

init ステートメントは、スクリプトを実行する前に Ren'Py ステートメントのブロックを実行するために使用されます。init ブロックは画像やキャラクターの定義、変更されないゲームのデータ構造の設定、 Ren'Py のカスタマイズを行うために使用されます。init ブロック内のコードでは、ユーザーとのインタラクションやレイヤーの変更、say, menu, scene, show/hide ステートメント、またはそれらを行える関数を呼び出すことはできません。

init ステートメントは予約語 init から始まり、必要に応じて優先度を表す数値が続き、必須のコロンで終わります。優先度が与えられない場合は、既定値の 0 となります。優先度の数値は -999 から 999 までです。この範囲外の数値は Ren'Py のコードのために予約されています。

優先度を使用して init ブロックのコードがいつ実行されるかを決定します。 init ブロックは優先度が低い順に実行されます。あるファイル内の優先度が同じ init ブロックはファイル最初から順に実行されます。ファイル間で優先度が同じブロックの順番は未定義です。

init ブロックは初期化段階ですべて一度実行されます。通常の実行中は制御が init ブロックの終端に達すると、そのブロックの実行は終了し、 init ステートメントに達すると、その init ブロックは実行されず、代わりに制御は次のステートメントに移ります。

キャラクター link

最初の例では、キャラクターがしゃべる度にそのキャラクターの名前を繰り返し打たなければならないことが問題になります。台詞の多いゲームだと、タイプ量が多くなります。また、どちらのキャラクターの名前も同じように表示され、つまらない白いテキストになります。これを解決するために、Ren'Py ではキャラクターを先に定義しておくことができます。これにより、短い名前をキャラクターに関連付け、さらにキャラクター名の色を変えることが出来ます。

define s = Character('Sylvie', color="#c8ffc8")
define m = Character('Me', color="#c8c8ff")

label start:
    "I'll ask her..."

    m "Um... will you..."
    m "Will you be my artist for a visual novel?"

    "Silence."
    "She is shocked, and then..."

    s "Sure, but what is a \"visual novel?\""

1行目と2行目はキャラクターを定義しています。1行目は短い名前が「s」、長い名前が「Sylvie」で、名前が緑色で表示されるキャラクターを定義しています。(色はウェブページで使われているようなRGBの16進数です。)

2行目は、短い名前が「m」、長い名前が「Me」で、名前が赤色で表示されるキャラクターを定義しています。Character の行をコピーし、短い名前、長い名前、色を変えることで、他のキャラクターも定義できます。

また、say ステートメントでもキャラクター名の文字列の代わりに Character オブジェクトを使うように変更しました。これにより, Ren'Py に init ブロックで定義したキャラクターを使うように知らせます。

画像 link

ビジュアルノベルは、画像がなければビジュアルノベルになりません。ゲームに画像を追加してみましょう。

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('Sylvie', color="#c8ffc8")
define m = Character('Me', color="#c8c8ff")

label start:
    scene bg meadow
    show sylvie smile

    "I'll ask her..."

    m "Um... will you..."
    m "Will you be my artist for a visual novel?"

    show sylvie surprised

    "Silence."
    "She is shocked, and then..."

    show sylvie smile

    s "Sure, but what is a \"visual novel?\""

まずは、init ブロックの内部の 2、3、5、6 行目にある image ステートメントを使って画像を宣言します。これらの image ステートメントには画像の名前とその画像があるファイルの名前を与えます。

例えば5行目では、ファイル名「sylvie_smile.png」で見つかる「sylvie smile」という名前の画像を、「sylvie」というタグで定義しています。

12行目にあるのは scene ステートメントです。このステートメントは画面をクリアして「bg meadow」という画像を表示します。次の行は show ステートメントで、「sylvie smile」という画像を画面に表示します。

画像名の最初の部分は画像タグです。ある画像が表示されていて、同じタグを持つ別の画像が画面に現れると、画面の画像は新しい画像で置き換えられます。これは19行目の2つ目の show ステートメントで起きています。19 行目が実行される前は「sylvie smile」が画面上にあり、19行目が実行されるときに「sylvie」タグが同じなので、その画像が「sylvie surprised」で置き換えられます。

Ren'Py が画像ファイルを見つけるためには、画像は対象となるプロジェクトのゲームディレクトリーに置かなければなりません。ゲーム ディレクトリーは「プロジェクト名/game/」にあり、ランチャーの「Game Directory」ボタンをクリックすれば表示できます。 the_question/game/ ディレクトリーから my_question/game/ ディレクトリーに画像をコピーして、この例を実行できるようにしましょう。

Ren'Py はキャラクターと背景を全く区別せず、どちらも画像として同じように扱います。一般に、キャラクターは透過が必要なので PNG またはWEBP ファイルであるべきです。背景は JPEG や PNG, WEBP ファイルにできます。慣例で、背景画像は「bg」タグで始めることになっています。

hide ステートメント Ren'Py は、与えられた画像を非表示にする hide ステートメントもサポートしています。

label leaving:

    s "I'll get right on it!"

    hide sylvie

    "..."

    m "That wasn't what I meant!"

実際には hide はあまり使わないでしょう。キャラクターの表情が変わるときには show が使えますし、全員がいなくなるときは scene が使われます。hide が必要なのは、あるキャラクターがいなくなり、場面は変わらない時だけです。

トランジション link

画像がただ現れたり消えたりするだけではつまらないので、Ren'Py は画面の変化を面白くするトランジションを実装しています。トランジションは前のインタラクション(台詞やメニュー、トランジション) が終わった時点の外観から、scene、show、hide ステートメントの後の外観に画面を変えます。

label start:
    scene bg uni
    show sylvie smile

    s "Oh, hi, do we walk home together?"
    m "Yes..."
    "I said and my voice was already shaking."

    scene bg meadow
    with fade

    "We reached the meadows just outside our hometown."
    "Autumn was so beautiful here."
    "When we were children, we often played here."
    m "Hey... ummm..."

    show sylvie smile
    with dissolve

    "She turned to me and smiled."
    "I'll ask her..."
    m "Ummm... will you..."
    m "Will you be my artist for a visual novel?"

with ステートメントは、使用するトランジションの名前を取ります。よく使うものの一つは dissolve で、ある画面から次の画面に徐々に移行します。便利なトランジションには他に fade があり、真っ黒な画面にフェードアウトし、それから新しい画面にフェードインします。

トランジションが複数の scene、show、hide ステートメントの後に置かれたとき、トランジションはそれらすべてに同時に適用されます。次のように書くとします:


    scene bg meadow
    show sylvie smile
    with dissolve

この場合「bg meadow」と「sylvie smiles」の両方を同時にディゾルブします。一人ずつディゾルブさせたいときは、2つの with ステートメントを書く必要があります:


    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 が使われていますが、これは実際にはユーザーに何も表示せずに Ren'Pyの 先頭スクリーンの内部状態を更新します。

位置 link

デフォルトでは、画像は水平方向には中央に、そして画像の下端が画面の下端に重なるように表示されます。これは背景と1人のキャラクターでは十分ですが、画面に2人以上のキャラクターがいるときは別の位置にするべきです。また、ストーリーによってはキャラクターを移動させたい時もあります。


     show sylvie smile at right

この移動を行うには、show ステートメントに at 節を加えます。at 節は、表示位置を取り、画像をその位置に表示します。Ren'Py は、表示位置を前もっていくつか定義しており、 left はスクリーンの左側に、 right は右側に、 center は水平方向の中央 (デフォルト) に、そして truecenter は水平方向にも垂直方向にも中央に、それぞれ表示します。

ユーザーは独自の表示位置や複雑な動きを定義できますが、それはクイックスタートの範囲外になります。

音楽と効果音 link

ほとんどのゲームではバックグラウンドで曲を再生します。曲は play music ステートメントで再生されます。これは再生する曲のファイル名の文字列かファイル名の文字列のリストをとることが出来、リストが与えられると、その要素が順番に再生されます。


    play music "illurock.ogg"
    play music ["1.ogg", "2.ogg"]

曲を変更するときは fadeout, fadein 節が使用可能で、それらを使用して以前の曲をフェードアウトし、新しい曲をフェードインします。


    play music "illurock.ogg" fadeout 1.0 fadein 1.0

loop 節が与えられるとループし、 noloop 節が与えられるとループしません。 Ren'Py ではオーディオファイルはユーザーが停止するまで自動的にループします。


    play music "illurock.ogg" loop
    play music "illurock.ogg" noloop

音楽は stop music ステートメントで停止できます。これもオプションで fadeout 節を取れます:


    stop music

効果音は play sound ステートメントで再生され、デフォルトではループしません。


    play sound "effect.ogg"

play sound ステートメントは play music ステートメントと同じ節を持てます。

Ren'Py は多くのフォーマットのボイスや音楽をサポートしていますが、OGG Vorbis がおすすめです。画像ファイルのように、ボイスや音楽ファイルはゲームディレクトリーに置かなければなりません。

Pause ステートメント link

pause ステートメントは Ren'Py にクリック待ちをさせます。任意で式が指定可能で、評価されて数字になるとその秒数経過後ポーズは自動的に終了します。

ゲームの終了 link

何も呼び出していない状態で return ステートメントを実行してゲームを終了できます。その前に、ゲームの終了を表す何か、例えばエンディング番号やエンディング名を伝えるのがいいでしょう:


    ".:. Good Ending."

    return

選択肢のないゲーム、キネティックノベルを作るのに必要なことは以上です。それでは、ユーザーに選択肢を提示するために必要なことを見てみましょう。

Python と If ステートメント link

簡単なゲームは (それどころかかなり複雑なゲームでさえ) menu と jump ステートメントだけで作れますが、それを超えるとユーザーの選択を変数に保存して後で取り出すというようなことが必要になります。このために、Ren'Py は Python をサポートしています。

Python サポートは2種類の方法で利用できます。ドル記号で始まる行は単行の Python ステートメントで、キーワード「python:」は Python ステートメントのブロックを導入するために使います。

Python によって、ユーザーの入力に対応したフラグを保存することが簡単になります。ゲームの最初にフラグの初期化だけはしておいてください:

label start:
    $ bl_game = False

そうすれば、選択肢で選択されたフラグをコード内で変更できます:

label hentai:

    $ bl_game = True

    m "Why it's a game with lots of sex."
    s "You mean, like a boy's love game?"
    s "I've always wanted to make one of those."
    s "I'll get right on it!"

    jump marry

そして、後でこれを判定します:

"And so, we became a visual novel creating team."
"We made games and had a lot of fun making them."

if bl_game:
    "Well, apart from that boy's love game she insisted on making."

"And one day..."

もちろん Python の変数は単なる True/False に限定されず、任意の Python の値にできます。変数はプレイヤー名の保存、得点の保存、その他のあらゆる目的に使えます。Ren'Py では Python プログラミング言語を完全に自由に使えるので、いろいろなことができます。

ゲームの公開 link

ゲームを作ったら、公開する前にいくつかやるべきことがあります:

Ren'Py の新しいバージョンをチェックする

Ren'Py の新しいバージョンでは基本的にバグの修正と新機能の追加が行われます。リリース前にランチャーのアップデートボタンを押して Ren'Py を最新バージョンに更新してください。 http://www.renpy.org/latest.html でも新バージョンのダウンロードと更新履歴の確認が出来ます。

スクリプトのチェック

ランチャーの先頭ページから、 「Check Script (Lint) 」を選びましょう。これは様々なユーザーに影響するエラーがないかをチェックします。これらのエラーはmac や Linux プラットフォームのユーザーに影響する可能性があるので、あなたのコンピューターで問題が起こらなくてもそれらすべてを修正することが重要です。

配布物の生成

ランチャーの先頭ページから、「 Build Distributions 」を選びましょう。options.rpy に含まれる情報に基づき、ランチャーはひとつ以上のあなたのゲームのアーカイブを作ります。

テスト

Lint はテストの代わりにはなりません。ゲームを配布する前にテストするのはあなたの責任です。自分では見つけられなかった問題を発見することが多いので、友人にベータテストの手伝いを頼むとよいでしょう。

配布

(Windows, Mac, Linux 用に) 生成されたファイルをウェブのどこかにアップロードし、ダウンロード出来る場所を知らせましょう。おめでとう、ゲームがリリースされました!

リリースされたゲームは、ぜひ games database に登録してください。出来上がったゲームをこれで検索出来ます。

The Question のスクリプト link

ここで 「 The Question 」のすべてのスクリプトを見ることが出来ます。

これから何をする? link

このクイックスタートは、Ren'Py でできることのほんの一部にしか触れていません。簡単のため、Ren'Py の多くの機能を省略しました。Ren'Py にできることを感じ取るには、デモをひと通りプレイするのがおすすめです。Eileen が機能を実演してくれます。

Ren'Py の決定的なガイドとして、残りの(高度な)マニュアルに進むのもいいでしょう。

Ren'Py のウェブサイトには、よくある質問に答える FAQ や、便利なコード例を載せている Cookbook などがあります。質問があれば、Ren'Py の公式フォーラムである Lemma Soft Forums で質問することをお勧めします。ここは Ren'Py コミュニティーの中心になっており、初心者やその質問を歓迎しています。

Ren'Py ビジュアルノベルエンジンを選んでいただき、ありがとうございます。どんなゲームができるか、楽しみにしています!