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.


FAQ

このページには、Ren'Pyについてのよくある質問と、その回答が集めてあります。ここにある回答は、Ren'Pyを始めたばかりの人たちにとって、役に立つものとなるでしょう。

テキスト表示のテクニック

ナレーションテキストのスタイルを変えるには?

キャラクターを指定しないときのテキストのスタイルを設定するには、特殊なキャラクターである "narrator" を再定義します。キャラクター定義の第1引数にはキャラクター名が必要ですが、ここに "None" を設定することで、キャラクター名を表示しないようにできます。

$ narrator = Character(None, window_left_padding=160)

これによって、話し手となるキャラクターが指定されないときの、テキストの表示方法をカスタマイズすることができます。次のようなスクリプトを書けば、カスタマイズした内容が反映されます。

"このテキストは narrator キャラクターのスタイルで表示されます。"
bob "このテキストは bob のスタイルで表示されます。"

ダイアログにクオーテーションマーク (") を入れるには?

クオーテーションマークを画面上に表示するには、そのまえにバックスラッシュ (\) を挿入します。シングルクオーテーションマーク (') を用いる場合には、バックスラッシュを挿入する必要はありません。

"\"君の記事はいいね!\" と彼は言った。"

行の途中で一時停止したり、改行したりするには?

特別なコマンドを使うことで、ダイアログの行の途中で一時停止したり、改行したりできます。とくに、{p}{w}\n は、よく使うコマンドです。

\n を挿入すると、そのあとのテキストを次の行に送ります。

e "買物に行きたいなあ。\nでも、お金も貯めたいし……。"

このスクリプトは、次のように表示されます。

買物に行きたいなあ。
でも、お金も貯めたいし……。

テキスト表示の途中で一時停止するには、{p} または {w} を使ってください。 {w} はマウスクリックのあと、そのまま続けてテキストを表示します。 {p} を使うと、一時停止後に表示されるテキストは次の行に送られます。

一時停止はデフォルトではプレイヤーがマウスをクリックするまで待ちますが、停止時間を指定して再開させることもできます。次のスクリプトは、"でも、お金も貯めたいし……。" を表示する前に1秒間停止したあと、行を改めて再開します。

e "買物に行きたいなあ。{p=1.0)でも、お金も貯めたいし……。"

ダイアログの中に画像を埋め込むには?

{image=yourimage.jpg} と記述すると、ダイアログテキストの中に画像を埋め込むことができます。 "yourimage.jpg" の部分を、使いたい画像のパスに変えてください。

ダイアログの中の一部分だけ色・サイズを変えるには?

もしあなたが一部の単語や文章だけを他と違う色やサイズで表示したいなら、テキストタグを使って変えることができます。

文字の色を変えるには、{color} タグを使います。

"{color=#000}この部分の色が変わります。{/color} ここは変わりません。"

"#000" の部分を、使いたい色に変えてください。

文字のサイズを変えるには、{size} タグを使ってください。

"{size=12}この部分のサイズが変わります。{/size} ここは変わりません。"

"12" の部分を、お好きなサイズに変えてください。

文字サイズは相対的に変えることもできます。{size=+12} はそれまでより12ポイント大きいサイズで、{size=-12} は12ポイント小さいサイズで文字を表示します。

"{size=+12}大きく表示します。{/size} {size=-12}小さく表示します。{/size}"

デフォルトのフォントを変えるには?

Ren'Pyには、あらかじめoption.rpyファイルの中に、ゲーム全体で使われるフォントを変更するためのコードが記述してあります。

style.default.font = "fontname.ttf"

これを有効にするには、行の先頭にある"#"を消してコメントを無効化し、"fontname.ttf"の部分をお好きなフォントファイル名に置き換えてください。

ダイアログテキストと選択肢を同時に表示するには?

ADVモードのデフォルトでは、選択肢はそれ単独で表示され、このときダイアログウィンドウは消えてしまいます。両方を同時に表示させるには、ダイアログテキストをmenuヘッダーの下にインデントして入れるだけです。

menu:
    e "このセリフはダイアログウィンドウに表示されます。"
    "選択肢1":
        "Yep."
    "選択肢2":
        "Still yep."

テキストの中に変数値を入れるには?

テキストの中で変数を表示するには、変数名をブラケット ([) で囲います。

$ pots = 4
"ポーションが [pots] つあります。"

$ food = "アップルソース"
"[food] でお願いします。"

もしあなたが古いバージョンのスクリプトを使っていて、以前のスタイルである%()s%()dを使いたい場合は、次のスクリプトを追加しなければなりません。

config.old_substitutions = True

同様に、新しいブラケットを用いたスタイルを使いたくなければ、これを無効にできます。

config.new_substitutions = False

逆転裁判のように、テキストが表示されるときにサウンドを鳴らすには?

"typewriter" エフェクトを使うには、次のコードを使ってください。

init python:
    def callback(event, **kwargs):
        if event == "show":
            renpy.music.play("godawful-beeping-noise.ogg", channel="sound")
        elif event == "slow_done" or event == "end":
            renpy.music.stop(channel="sound")

このコードをスクリプトの最初に置き、キャラクター定義のときにこれをコールバック関数として指定してください(ここでのコールバック関数名は"callback"です)。あとはいつものようにキャラクターに喋らせるだけです。

init:
    $ pw = Character("Phoenix Wright", callback=callback)


label start:

    pw "どうして「逆転裁判」では人がいつも死んでしまうの?"
    pw "たぶん、あのビープ音が気を狂わせるからだよ!"

見た目のカスタマイズ

キャラクターが話すときにグラフィックを表示するには?

サイドイメージ(いわゆる「顔グラ」)を表示したい、と思っている人がいるでしょう。 これを実現するには、キャラクターを定義するときにshow_side_imageオプションでdisplayableオブジェクトを指定してください。

$ eside = Character('Eileen',
                color="#c8ffc8",
                window_left_padding=160,
                show_side_image=Image("eileen_side.png", xalign=0.0, yalign=1.0))

Renpyfaq sideimage.jpgこのコードでは、画像が左寄せで表示されます。"xalign=1.0"とすれば、右寄せで表示できます。 パディングを調整して、画像とテキストが重ならないように気をつけてください。

もし表示されている別の画像をもとにしたサイドイメージを表示したいなら、が使えます。別の画像に依存せず、ひとつのサイドイメージ枠で画像を切り替えて使いたい場合は、ConditionSwitchを検討してください

キャラクター名を専用枠で表示するには?

いわゆる「名前ウィンドウ」を使いたいですか?もしキャラクター名をメインウィンドウの外側に表示させたいなら、キャラクター定義の際に次のように各必要があります。

$ e = Character("Eileen", show_two_window=True)

キャラクター名ウィンドウの揃え位置、背景や他の属性を変更するには、次のようにします。

    style.say_who_window.background = Frame("frame.png", 15, 15) #Background skin
    style.say_who_window.xalign = 0.0
    style.say_who_window.yalign = 1.0
    #style.say_who_window.xpos = 100 #For precise placement
    #style.say_who_window.ypos = 100 #For precise placement
    style.say_who_window.left_padding = 15
    style.say_who_window.top_padding = 15
    style.say_who_window.right_padding = 15
    style.say_who_window.bottom_padding = 15
    style.say_who_window.xminimum = 150
    style.say_who_window.yminimum = 15
    style.say_who_window.xfill = False

テキストを両端揃えで表示するには?

まず、両端揃えにするための専用のスタイルを定義しなければなりません。たとえば、justify_styleというスタイルを定義するとします。

$ style.create("justify_style", "default", u"(text) 両端揃えスタイル")

最初の引数は新しいスタイルの名前です。2番目は親となるスタイルの名前か、上のようにdefaultを指定します。

さらに、次のコードを記述します。

$ style.justify_style.justify = True

構文は style.スタイル名.プロパティ名です。この場合、スタイル名はjustify_style、プロパティ名はjustifyです。

上の例では、Pythonステートメントを表す$記号を用いて、両端揃えのスタイルを有効化しています。

スタイルを使ったプロパティの設定方法は、次の場所で見ることができます。1

最後に、スタイルをキャラクターに結びつけます。

$ char = Character(what_style = "justify_style")

ここでは、justify_styleオプションだけを設定したキャラクタを定義しています。

$ m = Character('Man', kind=char)
$ w = Character('Woman', kind=char)

justify_styleスタイルを用いて複数のキャラクターを定義したければ、Character関数の中で"kind=char"を使い、キャラクターを継承させます。

メインメニューをカスタマイズするには?

メインメニューやゲームメニュー画面の背景画像を設定するには、options.rpyファイルに記述されているコードを利用します。

mm_root = "mm_bg.jpg", #メインメニューの背景
gm_root = "gm_bg.jpg", #ゲームメニューの背景

もし単色塗りの背景を使いたければ、16進数の色コードを指定することもできます。

もしメインメニューにBGMを追加したければ、options.rpy内の次のコードを見つけてください。

## メインメニューで流れる曲

    config.main_menu_music = "main.mp3"

"main.mp3"の部分を、流したい曲のファイル名に変えてください。

メインメニューに表示されるボタンの位置を変えたい場合は、screens.rpyファイルにある位置に関するコードを変更します (6.12+)。

screen main_menu:

    # 他のメニュー画面も置き換える
    tag menu

    # メインメニューの背景
    window:
        style "mm_root"

    # メインメニューで表示されるボタン
    frame:
        style_group "mm"
        xalign .50
        yalign .75

        has vbox

        textbutton _("Start Game") action Start()
        textbutton _("Load Game") action ShowMenu("load")
        textbutton _("Extras") action ShowMenu("extras")
        textbutton _("Preferences") action ShowMenu("preferences")
        textbutton _("Help") action Help()
        textbutton _("Quit") action Quit(confirm=False)

これをたとえば、次のように変更します。

# The main menu buttons.
    frame:
        style_group "mm"
        xalign .50
        yalign .75

0.5 は中央、0.75 は 3/4 の位置を表します。


もし古いバージョンのRen'Pyを使っている場合は、options.rpyを編集してメインフレームを調整できます。これはデフォルトではコメントアウトされています。

style.mm_menu_frame.xpos = 0.5 #横位置、中央
style.mm_menu_frame.ypos = 0.75 #縦位置、上から3/4 
style.mm_menu_frame.xanchor = 0.5 #横アンカー、中央
style.mm_menu_frame.yanchor = 0.5 #縦アンカー、中央

イメージマップを使うには?

イメージマップは、二つの画像を組み合わせて、クリック可能な「ホットスポット」を持つひとつの画像を自動的に作りだす機能です。ホットスポットとは、マウスに反応する画像上の領域のことです。1枚目の画像はマウスによるイベントのない状態で表示される画像で、"Ground" imageと呼ばれます。2枚目の画像はマウスがホットスポット上に乗ったときに表示される画像で、"Hover" imageと呼びます。この例では、マウスを乗せることによって赤いボックスが黄色に変わります。コードは Screen Language (6.11+) にあるものを使っています。

screen example_imagemap:
    imagemap:
        ground "Ground.jpg"
        hover "Hover.jpg"

        hotspot (8, 200, 78, 78) clicked Return("swim")
        hotspot (204, 50, 78, 78) clicked Return("science")
        hotspot (452, 79, 78, 78) clicked Return("art")
        hotspot (602, 316, 78, 78) clicked Return("go home")
        
label example:
    
    call screen example_imagemap
    
    $ result = _return
    
    if result == "swim":
        e "You picked swimming!"
    elif result == "science":
        e "You picked science!"
    elif result == "art":
        e "You picked art!"
    elif result == "go home":
        e "You went home!"

    return

"Ground" Image "Hover" Image"ground.jpg"と"hover.jpg"の部分に、あなたが使いたい2枚の画像を指定してください。このコードが動作するには、必ず2枚の画像が必要です (デフォルト用と、マウスが乗ったとき用)

hotspot のあとにある数字は、ホットスポットの座標です。この値は親ボックスを基準として、(左端の位置, 上端の位置, ホットスポットの幅, ホットスポットの高さ)を表します。

イメージマップ上に配置されたホットスポットではいろいろなことができますが、基本的にはクリックされたときにある値を返すようになっています。クリックされたときの動作を決めるために、それぞれのホットスポットごとに適切な値を返すようにしてください。上の例では、"result"変数に、どのホットスポットがクリックされたかを表す値が格納されます。もしプレイヤーが"science"ホットスポットをクリックすれば、result変数には"science"が格納されます。その次の部分では、result変数に入っている値に応じて何をするかを決めています。

イメージマップが提供している機能以上のことが必要なら、かわりに背景画像の上でのイメージボタン が利用できます。

イメージマップについてのさらなる情報は、 ここを参照してください

ゲームメニューでイメージマップを利用するには?

一般的なメニューのカスタマイズ方法は、 ここを参照してください


ゲームメニューでイメージマップを利用するのは、設定することが多いためやや大変です。カスタマイズの程度によって、必要な画像数は変わります。

メニューレイアウトに必要な画像:

Ground

Idle

Hover

Idle (Selected)

Hover (Selected)

メインメニュー画面

n/a

X

X

n/a

n/a

はい/いいえ選択画面

X

X

X

n/a

n/a

ロード/セーブ画面

X

X

X

X

X

設定画面

X

X

X

X

X

ナビゲーション画面

X

X

X

X

X

Imagemap States
Imagemap States

Ground: マウスイベントに関係のない、背景画像です。この後ろにはさらにoptions.rpyファイルの"gmroot"変数で指定した画像が表示されるので、ここで指定する画像は画面と同じサイズでなくても構いません。これはつまり、メニュー部分以外の領域が透明になっている画像を使うべきだということです。この画像はまた、ボタンが無効化 (disabled) されているときにも使われます。

Idle: この画像は、ボタンやスイッチが選択されていない (unselected) 状態のときに使われます。「選択されていない」とは、ボタンの状態が「オン」ではないが、クリック可能であるということです。

Hover: この画像は、ボタンやスイッチが選択されておらず、かつマウスがボタン上に乗っているとき (unselected and hovered over) に表示されます。もしマウスが乗った場合でも画像を変えたくなければ、Idleで指定した画像と同じものを指定してください。

Selected Idle: この画像は、ボタンやスイッチが選択されている (selected) 状態のときに使われます。「選択されている」とは、ボタンがクリック可能で、かつ「オン」の状態のときです。

Selected Hover: この画像は、ボタンやスイッチが選択されていて、かつマウスがボタン上に乗っているとき (selected and hovered over) に表示されます。もしマウスが乗った場合でも画像を変えたくなければ、Selected Idleで指定した画像と同じものを指定してください。

ノート: ゲーム画面におけるナビゲーションバーは、メインメニューを除くメニュー画面の中で用いられるべきではありません。これはまた別のイメージマップとして、新たに実装する必要があります。ここを参照してください。

テキストのセンタリングを行うには?

Ren'Py には、"centered" と呼ばれるデフォルトのキャラクターが存在します。これは次のように使用します。

centered "このテキストは画面上でセンタリングされて表示されます。"

他の属性を付け加えるために、新たに別のキャラクターを定義することもできます(あるいは、centeredキャラクターをオーバーライドすることもできます)。

    $ outline = Character(None,
                          what_size=20, #フォントサイズ
                          what_xalign=0.5, #テキストをウィンドウ中央に配置
                          window_xalign=0.5, #ウィンドウを横位置中央に配置
                          window_yalign=0.5, #ウィンドウを縦位置中央に配置
                          what_text_align=0.5, #テキストをウィンドウ中央に配置(念のため)
                          window_background=None,#ウィンドウを消してテキスト表示だけにする
                          what_outlines=[(3, "#000000", 2, 2), (3, "#282", 0, 0)],
                          #アウトライン
                          what_slow_cps=20 #テキスト表示速度
                          )

実行時に画像を拡大/縮小するには?

100を超える画像をすべてPhotoshopでリサイズするのは気の遠くなる話ですし、実行時に画像の拡大縮小ができれば、と思うことでしょう。では、その方法をお見せしましょう。

理想的には、画像の変換には ATL を用いるべきです。

show yourimage:
    zoom 0.5

これはyourimageを半分のサイズに縮小する方法ですが、次の方法も使えます。

init:
    image cyan small = im.Scale("cyan.png", 16, 32)

この例では、image 文を使っており、"cyan.png" が読み込まれる画像のファイル名です。16はピクセル幅で、32が高さになります。

im.FactorScaleを使って、1より小さい小数値を拡大率として指定することもできます。たとえば、画像を半分に縮小したいなら、次のようにします。

init:
    image cyan small = im.FactorScale("cyan.png", .5, .5)

もし画像を拡大したい場合でも、im.Scaleを使ってピクセル単位で幅を指定するか、im.FactorScaleを使って拡大率を指定します。画像を2倍に引き延ばしたいなら、im.FactorScaleで幅と高さに2を指定してください。

im.Scale と im.FactorScale は、プロパティとして bilinear=True を指定できます。この指定によって、拡大縮小の時の補間方法としてデフォルトのニアレストネイバー法(最近ピクセル補間)ではなく、バイリニア法(線形補間)を利用できます。詳しくは Wikipediaの記事 を参照してください。

これらの機能についてのさらなる情報は、ドキュメント (im.Scale, im.FactorScale) を参照してください。

メニューボタンのテキストを変更するには?

Ren'Py 6.12 以降では、screens.rpy に設定があります。 screen main_menu、あるいは screen navigation の記述を見つけ、その部分の設定を変更してください。


古いバージョンの Ren'Py を使っている場合は、次のコードをどこか適切な場所に挿入します。

config.main_menu = [
        (u"はじめから", "start", "True"),
        (u"続きから", _intra_jumps("load_screen", "main_game_transition"), "True"),
        (u"環境設定", _intra_jumps("preferences_screen", "main_game_transition"), "True"),
        (u"終了", ui.jumps("_quit"), "True")
        ]

各行の最初にある値を、表示させたいテキストで置き換えてください。たとえば、"続きから"を"ロード"に置き換えることができます。そのほかの部分は、とくに意図しない限り変更しないでください。

ゲーム中で表示されるメニューのボタンを変更するには、次のコードを使います。

config.game_menu = [
        ( None, u"戻る", ui.jumps("_return"), 'True'),
        ( "preferences", u"環境設定", _intra_jumps("preferences_screen", "intra_transition"), 'True' ),
        ( "save", u"セーブ", _intra_jumps("save_screen", "intra_transition"), 'not main_menu' ),
        ( "load", u"続きから", _intra_jumps("load_screen", "intra_transition"), 'True'),
        ( None, u"メインメニュー", ui.callsinnewcontext("_main_menu_prompt"), 'not main_menu' ),
        ( None, u"終了", ui.callsinnewcontext("_quit_prompt"), 'True' ),
        ]

今度は各行の2番目の値を変更しますが、基本的には上と同じです。

プレイ情報(日付・スコアなど)を表示するには?

Ren'Py には、デフォルトで3つのレイヤーがあります。最も上にあるレイヤーは、"overlay"と呼ばれています。

show_date = True
month = "January"
day = 1

def date_overlay():
    if show_date:
        ui.text(month + " %d" % day, size=20, color="#ffffff")

config.overlay_functions.append(date_overlay)

この例では、"month" は現在の月の名前で、"day"は日付を表す整数値です。"if show_date" の部分で、日付表示のオン/オフを切り替えています。"show_date" が True か False かに関わらず、ゲーム開始時前にこの値を設定するようにしてください。

ゲームのアイコンを変えるには?

ウィンドウの左上にあるアイコンを変えるには、次のコードを使用します。

config.window_icon = "yourgameicon.png"

この画像は、MacOSX におけるドックやアプリケーション切り替えの際にも使われますので、256x256以上で透過背景の画像にすることを検討してください。

もし実行ファイルのアイコンを変えたい場合には、画像ファイルを "icon.ico"、あるいは Mac の場合には "icon.icns" として保存し、ゲームディレクトリに配置してください (このディレクトリは "game" ディレクトリではなく、その一つ上のディレクトリです) 。 Ren'Py は頒布パッケージを作成する際に、このアイコンファイルを ".exe" ファイルに取り込みます。もしうまくいかなければ、resource explorer などを利用して手動で置き換えてください。Xcode のインストールされた MacOSX を使っているのであれば、Icon Composer ユーティリティで icon.ico と icon.icns の両方を生成できます。

イメージマップを使わずにメインメニューをカスタマイズするには?

Ren'Py 6.12 以降では、ゲームを起動するときに screens.rpy が読み込まれます。このファイルはゲーム中で用いられるすべての画面のコードを含んでおり、スクリーン記述言語 (SL) を用いて編集できます。ファイル中の screen main_menu の記述を探して、編集を行ってください。

古いバージョンでは、オリジナルの UI 関数を使うことができます(現在では推奨されていません)。

label main_menu:
    scene mainmenu

    $ ui.vbox(xpos=0.5, ypos=0.5)
    $ ui.imagebutton("newgame1.png", "newgame2.png", clicked=ui.returns("start"))
    $ ui.imagebutton("loadgame1.png", "loadgame2.png", clicked=ui.returns("load"))
    $ ui.imagebutton("options1.png", "options2.png", clicked=ui.returns("prefs"))
    $ ui.imagebutton("exit1.png", "exit2.png", clicked=ui.returns("quit"))
    $ ui.close()
        
    
    $ result = ui.interact()
    
    if result == "start":
        hide mainmenu
        $ renpy.jump_out_of_context("start")
        
        
    elif result == "load":
        jump load_screen
        
    elif result == "prefs":
        jump preferences_screen
            
    elif result == "quit":
        $ renpy.quit()

    return

グラフィックと音楽の指定を置き換えるだけで、すぐに使うことができます!

[あらゆるもの] (anything) の表示を変えるには?

Ren'Py プロジェクトのすべての要素は、スタイル処理によって見た目を変えることができます。ボタン、ボックス、行やテキストはすべて、それがどのように見えるかを決めるための style プロパティを持っています。options.rpyscreens.rpy といったファイルを見れば、ゲーム起動時に読み込まれるスタイル指定を見つけることができます。たとえば、次のようなものです。

style.default.size = 22

これらの文は、次の構文に従っています。

style.スタイル名.プロパティ名 = 値

スタイル名: 変更したいスタイルの名前です。これについては、下のスタイルインスペクターの項も参照してください。

プロパティ名: 指定したスタイルについて、何を変更したいかを指定します。プロパティの一覧は ここにあります

値: 数値、画像や音声のファイル名、色コードなど、プロパティとして設定する値です。

スタイルの親子関係

"default" は、ゲーム中のすべてのテキストが従うスタイルです。つまり、上のコードは、テキストフォントのサイズを22に変えていることになります。スタイルにはすべての要素が従うスタイル("parent" style、親スタイル)と、それを継承しつつ一部のスタイルを変更したもの("child" style、子スタイル)があります。スタイル変更を行うときには、親子関係をつねに考えておくべきです。

style.button_text.text = 30
style.button_text.color = "#000"

style.pref_button_text.color = "#FFF"

"button_text" は親スタイル、"pref_button_text" は "button_text" から派生した子スタイルです。したがって、"button_text" と "pref_button_text" のテキストサイズは同じく30ですが、"button_text" のフォントカラーは黒で、"pref_button_text.color" では白になります。子スタイルで再定義されないプロパティは、すべて親スタイルから引き継がれます。

スタイルインスペクター

Ren'Py には、スタイルインスペクターと呼ばれる機能があります。config.developer を True にした状態(これがデフォルトです)でゲームを起動してください。そして、要素の上にマウスポインタを置きます。テキストの場合は線が細いので、少し難しいかもしれません。そうしたら、SHIFT + I キーを押してください。次のようなポップアップが表示されるはずです。

古いバージョンでは、このように表示されます。

このスクリーンでは、マウスポインタのある要素に影響を及ぼしているすべてのスタイル指定を見ることができます。ほとんどの場合は、最後にあるスタイルを見ることになるでしょう。この例では、ダイアログボックスのキャラクター名ウィンドウを対象としました。キャラクター名の表示を変えているスタイルは、一番最後にある say_label だということがわかります。

スタイルについてひととおり見てきたので、もうどんなプロパティでも編集することができますね。もしコードをどこに書くべきか分からなければ、とりあえずoptions.rpyの最後に書いてください。

ゲームデザイン

Princess Makerのように、スケジュールのあるシミュレーションを作るには?

DSE Framework Dating-Sim framework が ここ から利用できます。必要に合わせて、カスタマイズを行ってください。このフレームワークについての情報は、 ここ を参照してください。

Fate Stay/Nightのように、画面全体にテキストを表示するには?

NVL-mode Example Ren'Py には、NVLと呼ばれる特別なテキストモードがあります。これについての詳しい情報は、ここを参照してください.

RPGを作るには?

残念ながら、現時点ではロールプレイングゲームを作るためのフレームワークはありません。Ren'Pyはそのようなゲームのためにデザインされたわけではないので、戦闘システムや所持品リスト、そのほか必要なものすべてを自作しなければなりません。

それでもRPGを作りたいと思うなら、CookbookのRPG Frameや、ParsonSyunOwenによるFighting Fantasy demoが、役に立つかもしれません。

Ren'Pyで作成したゲームを販売することはできますか?

"The Ren'Py license does two things:

- Prevents you from claiming you wrote Ren'Py.
- Disclaims any warranty liability on my behalf.

The LGPL (which is the controlling license for distribution of Ren'Py games) also 
requires that you have a link to http://www.renpy.org/dl/lgpl/ as part of your game."

- PyTom

訳:

"Ren'Pyは、次の二つを規定しています:

- あなた自身がRen'Pyを作成したと主張しないこと。
- 私にはいかなる保証責任もないこと。

Ren'Pyの配布ライセンスであるLGPLはさらに、ゲームの一部にhttp://www.renpy.org/dl/lgpl/へのリンクを含めることを求めています。"

-PyTom

版権素材を用いた二次創作ゲームは作れますか?

(次を参照してください: Can I sell my game?)

音楽や背景素材、キャラクター、その他のツールはどこで手に入りますか?

OELVN wikiにはフリーで使える素材やその他諸々があるので、チェックするとよいでしょう。あるいは、Lemma Soft Recruitment forumsで質問することもできます。

テクニカルな部分

ゲーム終了後にメインメニューに戻るには?

$ renpy.full_restart()

このコードは、メインメニューにジャンプし、すべての音楽や効果音を停止するので、ゲームスクリプトの最後の最後にこれを記述してください。(訳注: おそらくこれを書いた人は、ゲームの最後以外でこれを使うことを望んでいません。関数名を見れば分かりますが、これはすべてをなかったことにしてゲームを再起動する関数です。)

メニューが表示されている間でも、テキストボックスが表示され続けるようにするには?

次のように、"menu"ヘッダーの後ろにインデントされた行を挿入します。

menu:
    "リンゴはどこ?"
    "あっちだよ":
        jump lie
    "ここにあるよ":
        jump truth

フェード (Fade) とディゾルブ (Dissolve) の違いは?

Ren'Py のデフォルトでは、一般にフェードと呼ばれる、画像の透明度を徐々に変える2つのタイプのトランジションが用意されています。

ディゾルブ (Dissolve) 一枚の画像をフェードアウトさせます。これは背景またはキャラクターに対して適用されますが、"with dissolve" を利用した場合にはその画像だけがフェードイン/アウトします。

show eileen with dissolve

フェード (Fade) ディゾルブをかける前に、スクリーン全体をブラックにします。もしキャラクターに対して "with fade" を適用した場合、スクリーン全体が消えてしまいます!

show bg forest with fade

フェードやディゾルブのタイミングを調整するには?

Dissolve ディゾルブを再定義するか、あるいは次のようにして新しいトランジションを作成できます。

$ dissolve = Dissolve(0.5)

0.5という数値は、トランジションに何秒かけるかを表しています。この値を2.0とすれば、これは2秒間かけてディゾルブすることになります。

Fade フェードを再定義するか、あるいは次のようにして新しいトランジションを作成できます。

$ fade = Fade(0.5, 0, 0.5)

3つの数字は、フェードの段階ごとに何秒かけるかを示しています。3つの段階は、最初の画像のフェードアウト、ブラックスクリーン、次の画像のフェードインです。

トランジションに違う名前をつけると、オリジナルのフェードやディゾルブを残したまま新しいトランジションを定義することもできます。新しいトランジションも、これまでと同じ方法で呼び出すことができます。

$ slow_dissolve = Dissolve(3.0)

show Bunny with slow_dissolve

ゲームスクリプトを複数のファイルに分割するには?

複数のスクリプトファイルを扱うときには、2つのことを知っておく必要があります。ひとつは、gameディレクトリ下にある.rpyで終わるすべてのファイルを、Ren'Pyはスクリプトファイルとして扱うということです。そしてもうひとつは、Ren'Pyは複数のファイルを単にひとつの巨大なファイルとして扱うということです。

これはつまり、あるスクリプトファイルで定義されたラベルや画像、変数は、別のスクリプトファイルでも利用できるということです。一つのファイルに書かれているときと同じように、異なるファイルに書かれたラベルへとジャンプしたり、コードを呼び出したりすることができます。

二つのファイルに分かれた短いゲームをご紹介しましょう。まず、これが"script.rpy"の内容です。

image bg script = "bg_script.jpg"
image bg day1 = "bg_day1.jpg"

label start:
    scene bg script

    "これはscript.rpyです。" 
    
    "クリックすると、違うファイルにジャンプします。"

    jump day1

そしてこれが、"day1.rpy"の内容です。

label day1:

    "day1.rpyに来ました。"

    scene bg day1

    "このように、違うファイルで定義された画像や変数にもアクセスできます。"

    # ... さらに続く ...

ゲームスクリプトの構成方法は、個人個人の好みの問題です。あるゲームはひとつかふたつのスクリプトファイルで、またあるゲームは30を超えるスクリプトで構成されることもあります。

ロールバック機能を無効化するには?

ロールバックはRen'Pyエンジンの高度な機能で、きちんとした理由があって実装されています。もしプレイヤーがどこまでもロールバックするのを防ぎたいなら、renpy.block_rollback関数を使うことができます。この関数がコールされると、プレイヤーはそれより以前へのロールバックができなくなります。

一方、このコードは、ロールバック機能を完全に無効化します。このコードはinitブロックに記述してください。

$ config.rollback_enabled = False

ゲーム内メニューへのアクセスを無効化するには?

デフォルトでは、ESCキーか右クリックすればいつでも、ロード/セーブや環境設定などを行うゲームメニューにアクセスできます。これを無効化するには、デフォルトメニュースクリーンにNoneをセットします。

$_game_menu_screen = None

メニューを復活させたいときには、ポップアップするスクリーンの値をセットします(デフォルトでは、これはセーブメニューです)。

$_game_menu_screen = "save_screen"

次のコードを使うと、右クリック/ESCキーを押したときに別のスクリーンへと飛ばすことができます。

$_game_menu_screen = "custom_screen"

この例では、"custom_screen"ラベルがスクリプトのどこかに存在すると想定しています。

マウスの座標を取得するには?

残念ながら、現時点ではマウスの座標を取得する方法はありません。Ren'Pyは多くのタイプのコントローラーに対応できるように設計されているからです。

"... it is possible to get mouse coordinates in Ren'Py - just use a user-defined displayable."
-PyTom

訳:

"... Ren'Pyでマウス座標を取得することはできます――ユーザー定義のdisplayableを使えば、の話ですが。"
-PyTom

イメージマップのホットスポットを利用すれば、ある程度マウスの位置を取得することはできます。あるいは知識が必要ですが、開発者ツール (Shift+D) の"Image Location Picker" を使うこともできます。この場合、マウス座標は画像の位置として取得されます。

v6.17 現在 renpy.get_mouse_pos() を使用して座標を所得可能です。

セーブされたゲームデータを削除するには?

バージョン 6.9.3 以降

Ren'Py のランチャーで "Tools" を選択し、"Delete Persistent" を選びます。

バージョン 6.9.2 - 6.9.0

データが保存されたフォルダを手動で削除します。一般的なWindowsマシンでは、次の場所にあります。

C:\Documents and Settings\YOURNAME\Application Data\RenPy

"YOURNAME"は、コンピューター上でのユーザー名です。このフォルダの中にあるデータを消してください。

バージョン 6.9.0 未満

セーブデータはRen'Py内のゲームフォルダの中に、"Saves" フォルダとして存在します。このフォルダの中にあるデータを消してください。

ゲームのリリース前に、セーブデータを消去する必要がありますか?

ありません。Ren'Py はスクリプトをコンパイルする際に、セーブデータや永続データをエクスポートしません。セーブデータの保存場所を "game" フォルダ内に変更しない限り、リリースの際にセーブデータを消す必要はありません。もし変更している場合は、"saves" フォルダーを見つけて、消去する必要があります。"game" フォルダ内に "saves" フォルダが存在しなければ、問題ありません。

インデントの働きは?ブロックとは何ですか?

Ren'Py、そしてPythonのブロックがどう働くのかを理解するのは大変なことです、あなたがサンプルコードを自分のゲームに組み込もうとしているなら、とくにです。Ren'PyとPythonは、インデントについて細かい規則があります――ここでは、ブロックがどのように作られているかを見ていきます。

Renpy-blocks.png
Renpy-blocks.png

上の画像では、いくつかの行をまとめた色の付いたラインが「ブロック」を表しています。このブロックは入れ子構造になっており、それぞれブロックの開始位置となる一行に「属して」います。

たとえばこの例では、選択肢である "Say hello" と "igonore her" は、'menu:'の行に「属して」いることになります。

ブロック内部の行はすべて、それを「所有する」行よりもさらに深くインデントされていなければなりません。上の例では、メニューに属する行はすべて "menu:" の行よりも深くインデントされています。もし二つの行が同じブロックに属し、同じレベルにあるなら、そのインデント量は等しくなければなりません。インデントやインデント解除はブロックの制御だけに用いられるので、もしそれまでに存在しないインデント量の、ブロック開始行でない行が出現すると、Ren'PyやPythonはエラーを返します。

ブロックを開始するための行は、常にコロン (':') で終わります。それ以外の行はコロン以外の文字で終わりますし、ブロック開始行以降の行はさらにインデントされなければなりません。

ブロックは、その開始行と同じかそれより浅いインデントレベルの行が出てくるまで続きます。上の例では、"python:" で始まったブロックは "e" で始まる行の手前まで続き、会話に戻ります――なぜなら、"e" で始まる行は、"python:" で始まる行と同じインデントを持つからです。

ブロックは、さらに別のブロックを含みます――上の例では、グレーのラインで表されたブロックはオレンジの "python:" のブロックに「含まれて」おり、さらにそれはブルーの "label start:" のブロックに含まれています。

ブロックを用いる理由の一つは、.rpy ファイルが Ren'Py スクリプトと Python の、二つの種類のコードを含むからです。Python のコード*を記述するために を使って Python のブロックを開始したら、その中では Python のコードを書かなければならず、"show eileen happy" や "menu:" といった通常の Ren'Py のスクリプトは使えません。Python コードの中から Ren'Py のスクリプトに戻る方法は、インデントを戻してブロックを終了することだけです。上の例でいえば、ピンクの部分は Python のブロックであり、Python のコードを記述しなければなりません。

さらに、'$' マークを使って Ren'Py スクリプトのエリアで Python の一行コードを書くとき、'$' マークは使えません―― Python コードの中では、このマークは Ren'Py スクリプトとして解釈されないからです。

* ここでいう Python のコードとは、"init python:" あるいは他の修飾詞付きの 'init' ブロックも含まれます。

ゲームファイルを外から見えないようにするには?

ゲームをリリースする前に、ゲームで使うすべてのファイルをひとつのアーカイブファイルへとパッケージングすることができます。これを行うには Ren'Py ランチャーの中の "Archive Files" メニューを使用してください。このメニューをクリックすると、アーカイブファイルの名前と、どのファイルをアーカイブするかを指定できます。アーカイブして隠したいファイルの種類をここに追加してください。

アーカイブ処理が終わると、"game" フォルダーにあったすべてのファイルが、"archived" フォルダーへと移動されます。もし再びファイルの修正が必要になったら、アーカイブを削除し、"archived" フォルダーの中身をすべて "game" フォルダーに戻してください。アーカイブを残したまま古いファイルを書き換えると、ふたつのバージョンのスクリプトが混在することになり、クラッシュを引き起こします。

したがって、アーカイブ処理は、配布するための準備が完全に整ったあとに行うのが一番いいでしょう。

互換性

ユニコード文字 (中国語・日本語など) を使うには?

[renpy/doc/cookbook/Chinese_and_Japanese この記事] に、Ren'Py で特殊な文字を使うための方法があります。

もしキャラクター名や他のタイトルなどでユニコード文字を使いたい場合は、単にクオーテーションマークの前に "u" をつけるだけです。

config.window_title = u"尾張国の女"
$ h = DynamicCharacter("hname", color="#FCE1E8")
$ hname = u"はる"

さらに詳しい情報は、Cookbook の中の [renpy/doc/cookbook/Cookbook ローカリゼーション] を参照してください。

Ren'Py で Flash は使えますか?

使えません。現状では、Ren'Py は Flash のファイルをサポートしていません。

Ren'Py でアニメーション GIF は使えますか?

使えません。Ren'Py はアニメーション GIF をサポートしていませんし、サポートの予定もありません。 アニメーションを使いたい場合は、Animation関数を使うか、理想的には複数の画像からアニメーションを構成する機能である ATL を用います。

手元のビデオや音楽が、Ren'Py で再生できないのですが?

使用可能なコーデックのリストを参照して、そのファイルがあるかどうか探してください。もしなければ、適当なフォーマットに変換する必要があります。

Ren'Py は iPhone のような他のプラットフォームでも利用できますか?

たぶん、いやきっと、無理でしょう。Apple EULA は iPhone や iPod, iPad などの自社製品上で Ren'Py を動かせないとしていますし(訳注: これはおそらく、Python のインタープリタを含んでいるからです)、NintendoDS などのデバイスでは、Ren'Py が動かせるほどのメモリを積んでいません。

いまのところ、Android では動作します。

トラブルシューティング

メニューアイテムは、プレイヤーが選択したときの動作を表すコード(つまり、「ブロック」)をかならず含まなければなりません。このコードはかならずメニューアイテムの行よりも深くインデントされている必要があります。正しく整形されたメニューの例は、 http://www.renpy.org/wiki/renpy/doc/tutorials/Quickstart#Menus.2C_Labels.2C_and_Jumps を参照してください。

アーカイブを行っても "archived" フォルダーが現れません!

"archived" フォルダーは、"game" フォルダーと同じく、プロジェクトディレクトリのひとつ下にできるはずです。もしこのフォルダーが見つからない場合は、OSによって隠されているかもしれません。Windows のデフォルトでは、「隠しフォルダ」のマークの付いたフォルダは表示されないため、アーカイブフォルダを表示するには、フォルダセッティングを変更する必要があるかもしれません。

Windows Vista: フォルダ画面で Alt キーを押し、メニューバーを表示させます。ツール -> フォルダーオプションの「表示」タグを開き、「隠しファイル、隠しフォルダー、および隠しドライブを表示する」を選択します。

"couldn't find file [yourfile.jpg]" が表示され続けるのですが?

何らかの問題により、Ren'Py がファイルを見つけられないのかもしれません。チェックリストを試してください。

ファイルの場所を正しく指定していますか?

Ren'Py でクオーテーションを用いてファイルを指定した場合 ("trees.jpg") 、game フォルダの直下のみを検索します。もしそれ以外のフォルダにファイルを置いているなら、指定する際にそれを記述しなければなりません。たとえば、画像ファイルを "BG" フォルダの中に置いているなら、画像指定は "BG/trees.jpg" とします。

コード中の名前と実際のファイル名が一致していますか?

ファイル名をコードに記述するときにはコピーアンドペーストを使い、目で見て写すのはやめましょう。つまらないミスを減らすためです。Ren'Py は大文字小文字を区別します (case-sensitive)。フォルダもファイルも同じように、同じキャピタリゼーションを使ってください。これはとくに、複数のOSで動くゲームを作るときに重要です。

拡張子は合っていますか?

フォルダオプションを変更して、すべてのファイルの拡張子が見えるようにしてください。デフォルトではふつう、拡張子は見えないようになっています。ゲームを開発するときには拡張子は重要ですので、今すぐ設定をしましょう。

:{| style="border:darkgray solid 1px;background-color:#E5E5E5;padding: 0px 2px 2px 2px;" |

もしあるファイルの拡張子が見えている(たとえば "trees.jpg" など)のに、他のファイルの拡張子が 見えない 場合、".jpg" はファイル名の一部であって、本当の拡張子ではないかもしれません!

|}

拡張子の表示を切り替えるには、OSのフォルダオプションメニューを開き、「拡張子を隠す」オプションを無効にしてください。

Windows Vista: Click "Organize" at the top of any folder view, and then "Folder and search options." Click the "View" tab, and untick "Hide extensions for known file types." You should now be able to see all the extension of your files within folders!

Windows XP: Click "Tools", and then "Folder Options." Click the "View" tab, and untick "Hide extensions for known file types." You should now be able to see all the extension of your files within folders!

Mac OS X: To enable this on a global basis, activate Finder, go to Finder -> Preferences... -> Advanced and check "Show all file extensions". Note that Mac OS X can also display filenames on a per-file basis, which is preferred to the global version; If a filename is not displayed, select the file, press Command+I (or right-click and select Show Info) and uncheck "Hide Extension". To do this for multiple files, select all of them and press Alt+Command+I instead.

ここまでできたら、ファイルの拡張子が Ren'Py で指定したものと合っているかどうかを確認してください。よくある間違いは、".jpeg" と書くべきところを ".jpg" と書くことです。

コードは正しいのに、イメージマップが壊れて見えるのですが?

最新の Ren'Py では、スペースを省くためにメニュー画像をキャッシュ使用とします。ゲームフォルダーの中をのぞくと、 "cache" という名前のフォルダーがあると思います。自分でメニューを作り直した場合、古いバージョンのキャッシュによって新しいバージョンの見え方がおかしくなることがあります。この場合は、"cache" フォルダーを削除すれば解決するはずです。

次のコードによって、キャッシュを完全に無効にすることもできます。

config.imagemap_cache = False

カスタマイズしたメインメニューにジャンプしないことがあるのですが?

もしカスタマイズしたメインメニューの他に Ren'Py のデフォルトのメニューを残しているなら、ふたつのバージョンが衝突しているため、どちらかを取り除く必要があります。Screen language の実装では、Ren'Py は screens.rpy に記述された構成を使ってゲームを開始します。もし自分の独自のメニューを使い、 screens.rpy のコードを使用しないのであれば、screen main_menu の部分をコメントアウトするか、コードを削除してください。