Ren'Py Visual Novel Engine Logo 8.3.0 Documentation

始めよう

  • クイックスタート
  • GUI カスタマイズガイド

Ren'Py 言語

  • 言語の基本
  • ラベルと制御フロー
  • 台詞とナレーション
  • 画像の表示
  • 選択肢
  • Python ステートメント
  • 条件分岐用ステートメント
  • オーディオ
  • オーディオフィルター
  • ムービー
  • ボイス

テキスト、Displayable、 transform、トランジション

  • テキスト
  • 翻訳
  • Displayable
  • Transform
  • Transform プロパティー
  • トランジション
  • Matrixcolor
  • レイヤー画像
  • 3D ステージ
  • Live2D Cubism

Ren'Py のカスタマイズ

  • スタイル
  • スタイルのプロパティー
  • スクリーンとスクリーン言語
  • Screen Actions, Values および Functions
  • 特別な名前のスクリーン
  • スクリーン言語の最適化
  • Config 変数
  • Preference 変数
  • Store 変数
  • カスタムマウスカーソル
  • テキストシェーダー

ツール

  • ランチャー
  • 開発ツール
  • Interactive Director

その他の機能

  • NVL モード
  • 吹き出し
  • テキスト入力
  • サイドイメージ
  • イメージギャラリー、ミュージックルーム、リプレイアクション
    • イメージギャラリー
      • Gallery
        • Gallery.transition
        • Gallery.locked_button
        • Gallery.hover_border
        • Gallery.idle_border
        • Gallery.unlocked_advance
        • Gallery.navigation
        • Gallery.span_buttons
        • Gallery.slideshow_delay
        • Gallery.Action()
        • Gallery.Next()
        • Gallery.Previous()
        • Gallery.Return()
        • Gallery.ToggleSlideshow()
        • Gallery.allprior()
        • Gallery.button()
        • Gallery.condition()
        • Gallery.get_fraction()
        • Gallery.image()
        • Gallery.make_button()
        • Gallery.transform()
        • Gallery.unlock()
        • Gallery.unlock_image()
    • ミュージックルーム
      • MusicRoom
        • MusicRoom.Next()
        • MusicRoom.Play()
        • MusicRoom.Previous()
        • MusicRoom.RandomPlay()
        • MusicRoom.SetLoop()
        • MusicRoom.SetShuffle()
        • MusicRoom.SetSingleTrack()
        • MusicRoom.Stop()
        • MusicRoom.ToggleLoop()
        • MusicRoom.TogglePause()
        • MusicRoom.TogglePlay()
        • MusicRoom.ToggleShuffle()
        • MusicRoom.ToggleSingleTrack()
        • MusicRoom.add()
        • MusicRoom.is_unlocked()
    • リプレイ
      • EndReplay()
      • Replay()
      • renpy.call_replay()
      • renpy.end_replay()
  • ドラッグ&ドロップ
  • Sprite
  • キーマップのカスタマイズ
  • 実績
  • テキスト履歴
  • 複数キャラクターダイアログ
  • スプラッシュスクリーンとプレスプラッシュ
  • Ren'Py ゲームのライフサイクル

Python と Ren'Py

  • ステートメントに相当するもの
  • セーブ、ロード、ロールバック
  • 永続データ
  • 高度な GUI
  • スクリーンと Python
  • ユーザー定義 Displayable
  • ユーザー定義ステートメント
  • カスタムテキストタグ
  • キャラクターコールバック
  • ファイルアクセス
  • Color クラス
  • Matrix
  • モデルベースのレンダリング
  • その他の関数と変数
  • _ren.py ファイル - Ren'Py in Python
  • HTTPS/HTTP Fetch
  • スクリーンショット

ビルド、更新、他のプラットフォーム

  • 配布物のビルド
  • Android
  • iOS
  • Web / HTML5
  • Chrome OS/Chromebook
  • Raspberry Pi
  • アプリ内課金
  • HTTPS/HTTP Updater
  • モバイル上の巨大なゲームのためのダウンローダー
  • ジェスチャー

エンドユーザー向けドキュメント

  • セキュリティー
  • 問題への対処
  • 環境変数
  • セルフボイシング機能

ライブラリおよびツール開発者向けドキュメント

  • テンプレートプログラム
  • コマンドラインインターフェイス

エンジン開発者向けドキュメント

  • エディターとの統合
  • スキン
  • Ren'Py の翻訳

変更点、ライセンス、クレジット

  • 変更履歴 (Ren'Py 7.x-)
  • 変更履歴 (Ren'Py 6.11 - 6.99)
  • 非互換の変更
  • ライセンス
  • クレジット
  • Ren'Py 開発のスポンサー
Ren'Py Visual Novel Engine
  • イメージギャラリー、ミュージックルーム、リプレイアクション
  • Edit on GitHub

イメージギャラリー、ミュージックルーム、リプレイアクション link

イメージギャラリー link

イメージギャラリーはプレイヤーが画像をアンロックしたらそれらの画像を閲覧可能にするスクリーンです。スクリーンには関連付けられた1つ以上のボタンがあり、各ボタンには1つ以上の関連付けられた画像があります。ボタンと画像には、アンロックされたかどうかを決定する条件があります。

イメージギャラリーは Gallery クラスのインスタンスによって管理されます。 Gallery クラスの1つのインスタンスを複数のイメージギャラリースクリーンで共有も可能です。

ギャラリーには、それに関連付けられた1つ以上のボタンが、ボタンにはそれに関連づけられた1つ以上の画像が、各画像にはそれに関連づけられた1つ以上の displayable があります。条件はボタンと画像に代入できます。ボタンは関連づけられたすべての条件が満たされた上で、そのボタンに関連づけられた少なくとも1つの画像がアンロックされるとアンロックされます。画像は関連づけられたすべての条件が満たされるとアンロックされます。

イメージギャラリーの作成は以下の4ステップで構成されます。

  1. Gallery のインスタンスを作成します。

  2. ボタンや画像とともに、ボタンや画像がアンロックされるかどうかを決定する条件をギャラリーに追加します。これには数ステップが必要です。

    1. Gallery.button() を呼び出して、新しいボタンを宣言します。

    2. 任意で Gallery.unlock() または Gallery.condition() を呼び出して1つ以上のアンロック用の条件をボタンに追加します。

    3. 1つまたは複数の displayable を引数にして Gallery.image() を呼び出して画像を宣言します。 あるいは便利なメソッドの Gallery.unlock_image() を代わりに呼び出します。

    4. 任意で Gallery.transform() を呼び出して displayable に transform を関連づけます。

    5. 任意で Gallery.unlock() 、 Gallery.condition() 、 Gallery.allprior() のいずれかを呼び出して、1つ以上のアンロック用の条件を画像に追加します。

    追加の画像はステップ3-5を繰り返すことでボタンに追加でき、一方で追加のボタンは5つすべてのステップを繰り返してギャラリーに追加できます。

  3. イメージギャラリースクリーンを作成します。スクリーンには背景を表示し、ユーザーがほかのイメージギャラリーを開いたり、メインメニューやその他のメニューに戻れるようにナビゲーションを含めるべきです。

  4. イメージギャラリースクリーンを表示するためのコードをメインまたはその他のメニューに追加します。

例

init python:

    # Step 1. Create the gallery object.
    g = Gallery()

    # Step 2. Add buttons and images to the gallery.

    # A button with an image that is always unlocked.
    g.button("title")
    g.image("title")

    # A button that contains an image that automatically unlocks.
    g.button("dawn")
    g.image("dawn1")
    g.unlock("dawn1")

    # This button has multiple images assocated with it. We use unlock_image
    # so we don't have to call both .image and .unlock. We also apply a
    # transform to the first image.
    g.button("dark")
    g.unlock_image("bigbeach1")
    g.transform(slowpan)
    g.unlock_image("beach1 mary")
    g.unlock_image("beach2")
    g.unlock_image("beach3")

    # This button has a condition associated with it, allowing the game
    # to choose which images unlock.
    g.button("end1")
    g.condition("persistent.unlock_1")
    g.image("transfer")
    g.image("moonpic")
    g.image("girlpic")
    g.image("nogirlpic")
    g.image("bad_ending")

    g.button("end2")
    g.condition("persistent.unlock_2")
    g.image("library")
    g.image("beach1 nomoon")
    g.image("bad_ending")

    # The last image in this button has an condition associated with it,
    # so it will only unlock if the user gets both endings.
    g.button("end3")
    g.condition("persistent.unlock_3")
    g.image("littlemary2")
    g.image("littlemary")
    g.image("good_ending")
    g.condition("persistent.unlock_3 and persistent.unlock_4")

    g.button("end4")
    g.condition("persistent.unlock_4")
    g.image("hospital1")
    g.image("hospital2")
    g.image("hospital3")
    g.image("heaven")
    g.image("white")
    g.image("good_ending")
    g.condition("persistent.unlock_3 and persistent.unlock_4")

    # The final two buttons contain images that show multiple pictures
    # at the same time. This can be used to compose character art onto
    # a background.
    g.button("dawn mary")
    g.unlock_image("dawn1", "mary dawn wistful")
    g.unlock_image("dawn1", "mary dawn smiling")
    g.unlock_image("dawn1", "mary dawn vhappy")

    g.button("dark mary")
    g.unlock_image("beach2", "mary dark wistful")
    g.unlock_image("beach2", "mary dark smiling")
    g.unlock_image("beach2", "mary dark vhappy")

    # The transition used when switching images.
    g.transition = dissolve

# Step 3. The gallery screen we use.
screen gallery:

    # Ensure this replaces the main menu.
    tag menu

    # The background.
    add "beach2"

    # A grid of buttons.
    grid 3 3:

        xfill True
        yfill True

        # Call make_button to show a particular button.
        add g.make_button("dark", "gal-dark.png", xalign=0.5, yalign=0.5)
        add g.make_button("dawn", "gal-dawn.png", xalign=0.5, yalign=0.5)
        add g.make_button("end1", "gal-end1.png", xalign=0.5, yalign=0.5)

        add g.make_button("end2", "gal-end2.png", xalign=0.5, yalign=0.5)
        add g.make_button("end3", "gal-end3.png", xalign=0.5, yalign=0.5)
        add g.make_button("end4", "gal-end4.png", xalign=0.5, yalign=0.5)

        add g.make_button("dark mary", "gal-dark_mary.png", xalign=0.5, yalign=0.5)
        add g.make_button("dawn mary", "gal-dawn_mary.png", xalign=0.5, yalign=0.5)
        add g.make_button("title", "title.png", xalign=0.5, yalign=0.5)


    # The screen is responsible for returning to the main menu. It could also
    # navigate to other gallery screens.
    textbutton "Return" action Return() xalign 0.5 yalign 0.5

ステップ4はゲームがどのように構成されているかで変化しますが、方法の一つは

textbutton "Gallery" action ShowMenu("gallery")

メインメニューのスクリーンへの上記の行の追加です。

class Gallery link

このクラスは画像のロックと一つ以上の画像を表示するアクションと、そのアクションを使用するためのボタンを作成するメソッドを提供してイメージギャラリーの作成をサポートします。

transition link

画像を変更するときに使用されるトランジション

locked_button link

ロックされたボタンに対する make_button で使用されるデフォルトの displayable

hover_border link

make_button で使用されるデフォルトの hover border

idle_border link

make_button で使用されるデフォルトの idle border

unlocked_advance link

True なら gallery はアンロックされた画像にのみ進みます。

navigation link

True なら gallery はナビゲーションとスライドショーボタンを画像の手前に表示します。

ナビゲーションの外観をカスタマイズするためには gallery_navigation スクリーンを上書きしてください。デフォルトスクリーンは renpy/common/00gallery.rpy で定義されています。

span_buttons link

True なら gallery はボタン間を移動します。

slideshow_delay link

スライドショーモードで gallery が画像を進行する時間です。

image_screen = "_gallery"

このギャラリーの個々の画像を表示するためのスクリーンです。このスクリーンには次のキーワード引数が渡されます。 :

locked

その画像がロックされていれば True です。

displayables

ユーザーに表示される transform が適用された Displayable のリストです。

index

1 から始まる表示される画像のインデックスです。

count

現在のボタンに紐付けられた画像の数です。

gallery

image gallery オブジェクト

show_ を Gallery.image と Gallery.unlock_image の呼び出し時の追加引数の接頭辞にすれば、それらの引数も渡せます。

デフォルトは renpy/common/00gallery.rpy の末尾で定義されています。

Action(name) link

与えられたボタン名に関連づけられる画像を表示するアクション

Next(unlocked=False) link

gallery 中の次の画像に進みます。

unlocked

True ならアンロックされた画像のみ対象とします。

Previous(unlocked=False) link

gallery 中の以前の画像に戻ります。

unlocked

True ならアンロックされた画像のみ対象とします。

Return() link

gallery の画像表示を停止します。

ToggleSlideshow() link

スライドショーモードをトグルします。

allprior() link

現在のボタンに関連づけられているすべての前の画像がアンロックされていたら条件が満されるアンロック用の条件を追加します。

button(name) link

name と名付けられた新しいボタンを作成します。

name

その名前のボタンが作成されます。

condition(expression) link

式の評価が True なら条件が満たされるアンロック用の条件を追加します。

expression

python 式の文字列

get_fraction(name, format='{seen}/{total}') link

name の名前のボタンに関連づけられたすべての画像とアンロックされた画像の数の割合の文字列を返します。

format

python の数字の体裁を整えるためのフォーマット文字列です。これには置換される三つの値を持たせられます。 :

{seen}

見たことのある画像の数

{total}

そのボタンのすべての画像の数

{locked}

まだロックされている画像の数

image(*displayables, **properties) link

新しい画像を現在のボタンに追加します。ここでは画像は一つ以上の displayable で構成されます。

show_ で始まるプロパティーはその接頭辞をとったものが gallery.image_screen スクリーンに追加のキーワード引数として渡されます。

make_button(name, unlocked, locked=None, hover_border=None, idle_border=None, style=None, **properties) link

これは与えられたボタン名に関連づけられた画像を表示するボタンを作成します。

name

その名前のボタンが作成されます。

unlocked

アンロックされた時にこのボタンに表示される displayable

locked

ロックされているときにこのボタンに表示される displayable. None なら gallery オブジェクトの locked_button フィールドが代わりに使われます。

hover_border

このボタンがアンロックされ、フォーカスされている時にオーバーレイされる displayable 。None なら gallery オブジェクトの hover_border フィールドが代わりに使われます。

idle_border

このボタンがアンロックされ、フォーカスされていない時にオーバーレイされる displayable 。None なら gallery オブジェクトの idle_border フィールドが代わりに使われます。

style

ボタンが継承するスタイルです。None なら、 border などが継承されないようデフォルトの "empty" スタイルが使用されます。

追加のキーワード引数は作成されたボタンオブジェクトのスタイルプロパティーになります。

transform(*transforms) link

登録された最後の画像に transform を適用します。これは画像が持つ displayable と同じ数の transform を引数にして呼び出されるべきです。

transform が None なら、デフォルトの transform が使用されます。

unlock(*images) link

引数として一つ以上の画像名を受け取り、すべてのその名前の画像がプレイヤーに閲覧されると条件が満されるアンロック用の条件を追加します。画像名は文字列として指定されるべきです。

unlock_image(*images, **properties) link

image と unlock を同じパラメーター (show_ で始まるキーワード引数は image にのみ渡されます) で呼び出すのと等しい便利なメソッドです。これは画像が一度でも閲覧されれば表示されるようにします。

画像は画像名の文字列として指定されるべきです。

ミュージックルーム link

ミュージックルームは ユーザーがゲームからミュージックトラックを選択して再生できるようにするスクリーンです。これらのトラックはユーザーがあるゲームを最初にプレイし始めるときには多分ロックされていて、ユーザーがゲーム中にその曲を聴くとアンロックされるでしょう。

ミュージックルームは MusicRoom クラスのインスタンスによって管理されます。複数のミュージックルームスクリーンを持つために、1つのゲームに1つ以上の MusicRoom インスタンスが存在できます。ミュージックルームの作成は以下の4ステップから構成されます。

  1. MusicRoom のインスタンスを作成します。 MusicRoom は曲を再生するチャンネルや曲のフェードアウトやフェードインにかかる時間を制御するためのパラメーターを受け取ります。

  2. インスタンスにミュージックファイルを追加します。

  3. button や imagebutton, hotspot 用のアクションを作成するために、MusicRoom のインスタンスを使用してスクリーンを作成します。

    使用されるアクションは MusicRoom のインスタンスのメンバ関数なので、 MusicRoom のインスタンスが mr なら mr.Play("track1.ogg") が play アクションの使用法となります。

  4. ミュージックルームのスクリーンをメインメニューやエクストラメニューに追加します。

例

init python:

    # Step 1. Create a MusicRoom instance.
    mr = MusicRoom(fadeout=1.0)

    # Step 2. Add music files.
    mr.add("track1.ogg", always_unlocked=True)
    mr.add("track2.ogg")
    mr.add("track3.ogg")


# Step 3. Create the music room screen.
screen music_room:

    tag menu

    frame:
        has vbox

        # The buttons that play each track.
        textbutton "Track 1" action mr.Play("track1.ogg")
        textbutton "Track 2" action mr.Play("track2.ogg")
        textbutton "Track 3" action mr.Play("track3.ogg")

        null height 20

        # Buttons that let us advance tracks.
        textbutton "Next" action mr.Next()
        textbutton "Previous" action mr.Previous()

        null height 20

        # The button that lets the user exit the music room.
        textbutton "Main Menu" action ShowMenu("main_menu")

    # Start the music playing on entry to the music room.
    on "replace" action mr.Play()

    # Restore the main menu music upon leaving.
    on "replaced" action Play("music", "track1.ogg")

ステップ4はゲームがどのように構成されているかで変化しますが、方法の一つは

textbutton "Music Room" action ShowMenu("music_room")

メインメニューのスクリーンへの上記の行の追加です。

Preferences() 関数、 特に Preferences("music volume") を使用すると、ボリュームスライダーをミュージックルームに含めることが可能です。

class MusicRoom(channel='music', fadeout=0.0, fadein=0.0, loop=True, single_track=False, shuffle=False, stop_action=None) link

ミュージックルームはユーザーによってアンロックされる一連の曲と、そのリストから順番に登録された曲を再生するアクションを含みます。

channel

このミュージックルームが処理されるチャンネル

fadeout

トラックを変更するときに古い曲をフェードアウトするのにかける秒数

fadein

トラックを変更するときに新しい曲をフェードインするのにかける秒数

loop

プライリストの終端にたどり着いたときにループするか停止するかを決定します。

single_track

True なら一つのトラックのみが再生されます。 loop が True ならそのトラックがループします。そうでなければそのトラックが終了すると再生が停止します。

shuffle

True ならトラックはシャッフルされ、シャッフルされた順に再生されます。 False ならトラックは MusicRoom に追加された順に再生されます。

stop_action

曲が停止したときに実行されるアクションです。

Single_track と shuffle は互いに矛盾します。いちどに片方のみ True にしてください ( siingle_track と shuffle を設定するアクションではこれを実施しています )。

Next() link

ミュージックルームにプレイリストの次のアンロックされたファイルを再生させるアクションです。

Play(filename=None) link

ミュージックルームに音楽を再生させるアクションです。 filename が与えられた場合、そのファイルが再生されます。それ以外の場合は再生中の音楽を再生し直すか(アンロックされている場合)、あるいは最初のファイルが再生されます。

filename が与えられている場合、このアクションのボタンは filename がロックされている間は選択不能となり、 filename が再生中なら選択された状態となります。

Previous() link

プレイリストの前のアンロックされたファイルをミュージックルームに再生させるアクション。

RandomPlay() link

このアクションはアンロックされたトラックからランダムに選択してミュージックルームに再生を開始させます。

SetLoop(value) link

このアクションは loop の値を設定します。

SetShuffle(value) link

このアクションは shuffle の値を設定します。

SetSingleTrack(value) link

このアクションは single_track の値を設定します。

Stop() link

このアクションは曲を停止します。

ToggleLoop() link

このアクションは loop の値をトグルします。

TogglePause() link

音楽再生中ならそれをポーズまたはポーズ解除します。

このボタンは曲がポーズされているとき選択状態になります。

TogglePlay() link

曲が再生中でなければこのアクションは最初のアンロックされたトラックを再生します。そうでなければ現在再生中の曲を停止します。

このボタンはどの曲が再生されているときでも選択状態にあります。

ToggleShuffle() link

このアクションは shuffle の値をトグルします。

ToggleSingleTrack() link

このアクションは single_track の値をトグルします。

add(filename, always_unlocked=False, action=None) link

ミュージックルームにミュージックファイル filename を追加します。ミュージックルームは追加された順にアンロックされたファイルを再生します。

always_unlocked

True ならそのミュージックファイルは常にアンロックされた状態です。これはそれがゲーム内で再生される前にもファイルがミュージックルームに表示されるようにします。

action

アクションか、アクションのリストです。このファイルが再生される時に呼び出されます。

例えばこれらのアクションは、ファイルの再生によってスクリーンや背景、説明文を変更するときに使われます。

is_unlocked(filename) link

filename がアンロック ( または always unlocked ) されていれば True を返し、まだロックされていれば False を返します。

リプレイ link

Ren'Py にはメインメニューやゲームメニューからシークエンス(訳注 物語の1シーンをシークエンスと呼ぶ) を再生する機能もあります。これはプレイヤーが重要なシークエンスを繰り返せるようにするシークエンスギャラリーを作成するのに使えます。シークエンスが終わると、 Ren'Py はリプレイを実行した場所に戻ります。

シークエンスリプレイは Start() アクションを使用しても可能です。2つのモードの違いは :

  • リプレイはどんなスクリーンからでも実行可能な一方、 Start はメインメニューかメインメニューから表示されたスクリーン内でしか使用できません。

  • リプレイが終わると、リプレイが実行された場所に制御が返されます。その場所はメインメニューかゲームメニュー内があり得ます。例えばゲーム進行中にリプレイが呼び出された場合、ゲームの状態は保存されます。

  • リプレイモードではセーブは無効化されます。リロードもセーブを必要とするため無効となります。

  • リプレイモードで renpy.end_replay() を呼び出すとリプレイは終了します。ノーマルモードでは end_replay は何もしません。

リプレイモードを利用するためには、シークエンスがラベルで始まり、 renpy.end_replay() で終わるべきです。シークエンスはレイヤーと変数が同じであることを当然としてはいけません。それらはノーマルモードとリプレイモードでは全く違うこともあり得ます ( リプレイでは一旦画面をブラックアウトしてからラベルが実行されます )。

例

    "And finally, I met the wizard himself."

label meaning_of_life:

    scene revelation

    "Mage" "What is the meaning of life, you say?"

    "Mage" "I've thought about it long and hard. A long time, I've
            spent pondering that very thing."

    "Mage" "And I'll say - the answer - the meaning of life
            itself..."

    "Mage" "Is forty-three."

    $ renpy.end_replay()

    "Mage" "Something like that, anyway."

シークエンスがこのように定義されると、リプレイは Replay アクションで実行できます

textbutton "The meaning of life" action Replay("meaning_of_life")

リプレイモードで使われる store 変数が一つあります :

_in_replay link

リプレイモードではこれはリプレイが開始されたラベル(呼び出されたラベルであって呼び出し元のラベルではありません)を返し、そうでなければこれは None です。

さらに config.enter_replay_transition と config.exit_replay_transition はリプレイ開始時と終了時にそれぞれ使用されます。 config.replay_scope はリプレイ開始時にリセットされる store に変数を追加します。リプレイ中の右クリックではpreferences スクリーンを表示するように、デフォルトでは _game_menu_screen を設定します。

以下の変数とアクションはリプレイモードで実行されます。

EndReplay(confirm=True) link

現在のリプレイを終了します。

confirm

True ならリプレイを終了する前にユーザーに確認を促します。

Replay(label, scope={}, locked=None) link

リプレイとして label を開始するアクション

scope

変数名を値に対応付ける辞書です。これらの値はリプレイに入るときに設定されます。

locked

True の場合、このアクションは無効となり、呼び出されても何もしません。 False なら通常どおり振る舞います。 None の場合はそのラベルがこれまでのプレイで未読ならばロックします。

renpy.call_replay(label, scope={}) link

リプレイモードでラベルを呼び出します。

scope 引数を使用して、リプレイ用のコンテキストでの変数の値を初期化できます。

renpy.end_replay() link

リプレイ中ならリプレイを即座に中止し、そうでなければ何もしません。

Previous Next

Built with Sphinx using a theme provided by Read the Docs.