テキスト link

Ren'Py にはテキストを表示する方法がいくつかあります。ユーザーにテキストを表示する方法としてまず考えられるのは saymenu ステートメントです。スクリーン言語ステートメント text, textbutton, や label を使ってユーザーインタフェースにテキストを表示することもよくあります。これらやその他の関数は Text() displayable を作成し、それをスクリーンに表示します。

テキスト displayable の役割はユーザーにテキストを表示する工程の管理です。テキスト displayable は次の順序にそって処理されます:

  1. テキストを翻訳する。

  2. データをテキストに置換する。

  3. スタイルとテキストタグを使ってテキストの体裁を整える。

  4. 整えられたテキストをレイアウトする。

  5. テキストをスクリーンに描画する。

この章では Ren'Py のテキスト表示に焦点を当てます。

エスケープ文字 link

Ren'Py のテキスト表示を制御する文字が 3 つあります。クリエータはこれらの文字がエンジンに誤解釈されないよう気をつける必要があります。

\(バックスラッシュ)

バックスラッシュ文字は Ren'Py 、または Python の文字列を書くときの導入に使われます。よく使うエスケープコードは:

\" (バックスラッシュ-ダブルクォート)

ダブルクオートで囲まれた文字列にダブルクオートを含めます。

\' (バックスラッシュ-クォート)

シングルクオートで囲まれた文字列にシングルクオートを含めます。

\ (バックスラッシュ-スペース)

Ren'Py の文字列にスペースを含めます。デフォルトの Ren'Py スクリプトのテキストでは、連続する空白は一つのスペース文字に折りたたまれます。

\n (バックスラッシュ-n)

テキストに改行文字を含めます。

\\ (バックスラッシュ-バックスラッシュ)

テキストにバックスラッシュ文字を含めます。

\% (バックスラッシュ-パーセント)

テキストに保護されたパーセント文字を含めます。 %% としても書けます。 :どちらの保護でも、最終的に1つ % 文字が書かれます。

[ (左角括弧)

左角括弧はテキストへ値の置換を導入するために使われます。テキストに左角括弧自体を含めるには二重にして、 [[ と書いてください。

{ (左波括弧)

左波括弧はテキストタグを導入するために使われます。テキストに左波括弧自体を含めるには二重にして、 {{ と書いてください。

[ (左角括弧)

左角括弧を使用してルビ/ふりがなテキストを導入します。テキストに左角括弧自体を含めるには二重にして、 【【 と書いてください。

データの置換 link

Ren'Py ではテキスト文字列が表示される前にデータを置換できます。例えば、プレイヤー名が playername 変数に保存されているとすると、台詞をこのように書けます:

g "Welcome to the Nekomimi Institute, [playername]!"

Ren'Py では次の順で変数を検索します。 :

  • スクリーンで使用されるときはスクリーン変数

  • interpolate 名前空間で見つかる変数

  • グローバル名前空間で見つかる変数

Ren'Py の置換は単なる変数に限りません。どのような妥当な python 式も置換できます。ですから、次のコードも書けます

g "My first name is [player.names[0]]."

数を表示するときにはフォーマット化コードを適用できます。次のコードは、浮動小数点数を小数第 2 位まで表示します

g "I like you [100.0 * points / max_points:.2] percent!"

Ren'Py の文字列フォーマットは PEP 3101 文字列フォーマット化構文を引き継いでいます。Ren'Py では { をテキストタグに使うので、文字列フォーマットには [ を使います。

Python でサポートされている !s!r 変換フラグに加え、 Ren'Py は他にもいくつかのフラグをサポートします。 !q 変換フラグはテキストタグが適切にクォートされていることを保証し、表示する文字列を望まない形式の構造にしません。例

g "Don't pull a fast one on me, [playername!q]."

!t 変換フラグは置換した文字列を翻訳します。

if points > 5:
    $ mood = _("happy")
else:
    $ mood = _("annoyed")

g "I'm [mood!t] to see you."

!i 変換フラグは置換された文字列をさらに置換します。

define earned_points_info = _("[points]{image=points.png} earned points")
g "I'm happy to see you you have [earned_points_info!ti]."

これは置換を含むテキストを置換するのに使用するべきです。スクリーン言語で役立つでしょう。 Const Text も参照してください。

!u フラグはテキストを大文字に、 !l フラグは小文字にします。 !c フラグは最初の一文字にのみ作用し、大文字にします。これらのフラグは組み合わせ可能で、 !cl は最初の文字を大文字、残りを小文字にします。

注意点として :

  • フラグの指定順は結果を変更しません。 : !cl!lc と同じく動作します。

  • また、感嘆符は無視されるので前のルールを回避できません : !l!c!c!l!cl と同じです。

変換は次の順で実施されます。 :

  1. r/s (repr または str)

  2. t (translate)

  3. i (recursive interpolation)

  4. q (quoting)

  5. u (uppercase)

  6. l (lowercase)

  7. c (capitalize)

スタイリングとテキストタグ link

Ren'Py でテキストにスタイル情報を与える方法は 2 つあります。1 つめはテキストのブロック全体に適用されるスタイルを使う方法です。詳細は スタイルシステム 、特に テキストスタイルプロパティー の節を参照してください。

2 つ目はテキストタグを使う方法です。テキストタグはテキストブロックの一部にスタイルを適用するのに向いています。行ごとに同じテキストタグを適用しているようなら、代わりにスタイルの使用を考えてください。

ここに2種類のテキストタグがあります。テキストタグには自動的に閉じるもの(*訳注 自己終了タグ)と、閉じタグを指定できるものがあります。閉じタグはスラッシュ (/) で始まり、先入れ先出しの順で閉じられます。各閉じタグは対応するタグの開始と一致しなければなりません。そうでなければ Ren'Py は lint で警告を出します。

# This line is correct.
"Plain {b}Bold {i}Bold-Italic{/i} Bold{/b} Plain"

# This line is incorrect, and will cause incorrect behavior.
"Plain {b}Bold {i}Bold-Italic{/b} Italic{/i} Plain"

すべてのテキストタグを閉じる必要はありません。 Ren'Py はそのテキストブロックの末尾ですべての開かれているタグを閉じます。例

"{size=+20}This is big!"

テキストタグには引数を取るものがあります。この場合、タグ名に等号 (=)、引数が続きます。引数には右波括弧文字 (}) を含められません。引数の意味は、テキストタグによって変わります。

全体のテキストタグ link

以下のタグはテキスト全体に適用されます:

a link

アンカータグは自身からその閉じタグまでの間にハイパーリンクを作成します。ハイパーリンクの働きは hyperlink_functions スタイルプロパティーで制御でき、デフォルトの処理は次のように働きます。

  • 引数が jump: で始まるなら、残りの引数はジャンプ先のラベルです。

  • 引数が call: で始まるなら、残りの引数は呼び出し先のラベルです。通常、呼び出しは現在の Ren'Py ステートメントを終わらせます。

  • 引数が call_in_new_context: で始まるなら、残りの引数は( renpy.call_in_new_context() を使用して)新しいコンテキストで呼び出すラベルです。

  • 引数が show: で始まるなら、残りの引数は表示するスクリーンです。

  • 引数が showmenu: で始まるなら、残りの引数は表示するゲーム内選択肢のスクリーンです。

  • そうでなければ、引数はシステムのウェブブラウザで開かれるURLです。

引数にプロトコルセクションはなく、 config.hyperlink_protocol がそのために用意されています。 config.hyperlink_protocol が "jump" に設定されると、 {a=label} と {a=jump:label} は等しくなります。制作者は config.hyperlink_handlers を使って新しいプロトコルを定義できます。

label test:

    e "Why don't you visit {a=https://renpy.org}Ren'Py's home page{/a}?"

    e "Or {a=jump:more_text}here for more info{/a}."

    return

label more_text:

    e "In Hot Springs, Arkansas, there's a statue of Al Capone you can take a picture with."

    e "That's more info, but not the kind you wanted, is it?"

    return
alpha link

alpha テキストタグは自身と閉じたタグ間のテキストを指定の不透明度でレンダリングします。不透明度は 0.0から1.0までの値で、それぞれ完全な透明と不透明に対応します。値の接頭辞に+ または - があると、不透明度はその数だけ変更されます。値の接頭辞が * なら不透明度はその数で乗算されます。:

"{alpha=0.1}This text is barely readable!{/alpha}"
"{alpha=-0.1}This text is 10 percent more transparent than the default.{/alpha}"
"{alpha=*0.5}This text is half as opaque as the default.{/alpha}"
alt link

alt タグはテキストが表示されないようにする一方、読み上げ機能では利用可能にします。

g "Good to see you! {image=heart.png}{alt}heart{/alt}"

alt 文字も参照してください。

art link

代替ルビタグは自身からその閉じタグまでの間のテキストをルビの内容としてマークします。詳細は ルビテキスト の節をご覧ください。

b link

ボールドタグは自身からその閉じタグまでの間をボールドフォントでレンダリングします。:

"An example of {b}bold test{/b}."
color link

カラーテキストタグは自身からその閉じタグまでの間を指定された色でレンダリングします。色は #rgb, #rgba, #rrggbb, または #rrggbbaa の形式にしてください。:

"{color=#f00}Red{/color}, {color=#00ff00}Green{/color}, {color=#0000ffff}Blue{/color}"
cps link

秒あたり文字数タグは自身からその閉じタグまでの間のテキストにおける、テキスト表示の速度を設定します。引数がアスタリスクで始まっていたら、それが現在のテキスト速度に乗ぜられます。そうでなければ、テキストを表示する速度を秒あたりの文字数で与えます。

"{cps=20}Fixed Speed{/cps} {cps=*2}Double Speed{/cps}
font link

フォントタグは自身からその閉じタグまでの間を指定されたフォントでレンダリングします。引数は、使用するフォントのファイル名です。

"Try out the {font=mikachan.ttf}mikachan font{/font}."
i link

イタリックタグは自身からその閉じタグまでの間をイタリック体でレンダリングします。

"Visit the {i}leaning tower of Pisa{/i}."
image link

イメージタグはテキストに画像を挿入する自己終了タグです。画像はテキスト一行の高さであるべきです。引数は画像のファイル名または、image ステートメントで定義された画像でなければなりません。

g "Good to see you! {image=heart.png}{alt}heart{/alt}"
k link

カーニングタグは自身からその閉じタグまでの間の文字のカーニングを調整します。これは浮動小数点数の引数を取り、それが各カーニングペアに加えられるカーニングのピクセル数を与えます(負数にしてカーニングを減ずることもできます)。

"{k=-.5}Negative{/k} Normal {k=.5}Positive{/k}"
noalt link

noalt タグはテキストが読み上げ機能で発話されないようにします。これは alt タグと共に使用され、アクセス可能な視覚的なオプションを提供します。

g "Good to see you! {noalt}<3{/noalt}{alt}heart{/alt}"
outlinecolor link

outlinecolor テキストタグは(影を含む)すべてのアウトラインを指定の色に変更します。色は #rgb, #rgba, #rrggbb, または #rrggbbaa の形式にしてください(訳注 このタグは既存のアウトラインの色を変更するものなので、変更前にアウトラインがなければ機能しません。通常アウトラインを使用しない場合、このタグを使用するには予め透明なアウトラインを使用するなどの必要があります)。:

"Let's have a {outlinecolor=#00ff00}Green{/outlinecolor} outline."
plain link

plain タグはテキストから太字、イタリック、下線、打ち消し線をなくします。

"{b}This is bold. {plain}This is not.{/plain} This is bold.{/b}"
rb link

ルビ下部タグは自身からその閉じタグまでの間のテキストをルビをふる対象としてマークします。詳細は ルビテキスト の節をご覧ください。

rt link

ルビ上部タグは自身からその閉じタグまでの間のテキストをルビの内容としてマークします。詳細は ルビテキスト の節をご覧ください。

s link

打ち消し線タグは自身からその閉じタグまでの間のテキストに打ち消し線を引きます。

g "It's good {s}to see you{/s}."
shader link

shader タグは、テキストのセクションにテキストシェーダーを適用します。引数は、適用するシェーダーの名前です。:

"This text is {shader=jitter:speed=3}jittery{/shader}."

詳細については、テキストシェーダー を参照してください。

size link

サイズタグは自身からその閉じタグまでの間のテキストの大きさを変更します。引数は整数で、+ か - を前置できます。引数が整数だけなら、その大きさに設定されます。そうでなければ、大きさが指定された分だけ増減されます。

"{size=+10}Bigger{/size} {size=-10}Smaller{/size} {size=24}24 px{/size}."

* が先頭にくる浮動小数も指定でき、この場合、サイズはその数を掛けられた上で丸められます。

"{size=*2}Twice as big{/size} {size=*0.5}half as big.{/size}"
space link

スペースタグはテキストに水平スペースを挿入する自己終了タグです。引数として追加されるスペースのピクセル数を与える整数を取ります。

"Before the space.{space=30}After the space."
u link

下線タグは自身からその閉じタグまでの間のテキストに下線を引きます。

g "It's good to {u}see{/u} you."
vspace link

vスペースタグはテキストの行間に垂直スペースを挿入する自己終了タグです。引数として追加されるスペースのピクセル数を与える整数を取ります。

"Line 1{vspace=30}Line 2"
# link

# で始まるテキストタグは無視されますが、これを加えて翻訳時に文字列を区別できます。

"New{#playlist}"

台詞のテキストタグ link

台詞にのみ適用されるテキストタグです :

w link

ウェイトタグはユーザーがクリックして読み進めるまで待機する自己終了タグです。引数を与えられると、その引数は数字と解釈され、待機はその秒数が経過後に自動的に終了します。

"Line 1{w} Line 1{w=1.0} Line 1"
p link

段落ポーズタグは自己終了タグです。これは現在の段落を終了し、ユーザーがクリックして読み進めるのを待ちます。引数を与えられると、その引数が数字として解釈され、それだけの時間が経過すると自動的に待機が終了します。

"Line 1{p}Line 2{p=1.0}Line 3"
nw link

ノーウェイトタグは現在の行が最後まで表示されきった時点で台詞を自動的に消し去る自己終了タグです。

g "Looks like they're{nw}"
show trebuchet
g "Looks like they're{fast} playing with their trebuchet again."

引数を与えられると、その引数は数字と解釈され、待機はその秒数が経過後に自動的に終了します。

g "I'm gonna fall in a few seconds!{nw=2}"
show g_gone

no-wait タグはセルフボイスが完了するまで進行を待ちます。

fast link

テキストの行内に fast タグがあると、低速テキストモードであっても、その前にあるテキストがすべて瞬間表示されます。

g "Looks like they're{nw}"
show trebuchet
g "Looks like they're{fast} playing with their trebuchet again."

あれば {fast} タグは以前の行からボイスを継続します。

done link

doneタグ後のテキストは表示されません。これにより、 adjust_spacing が True のときでもレイアウトが変化しないようにしてテキストが飛び回らないようにします。

done タグがあると、その台詞の行はヒストリーバッファに追加されません。 nw タグがあるなら、 done タグより前にあるべきです。

g "Looks like they're{nw}{done} playing with their trebuchet again."
show trebuchet
g "Looks like they're{fast} playing with their trebuchet again."
clear link

clear テキストタグは NVL モノローグモード でのみ意味があります。テキストブロックを終了しない他は nvl clear ステートメントと同じことをします。

"""
Block 1 on page 1.

Block 2 on page 1.

{clear}

Block 1 on page 2.

etc.
"""

Pythonを使用して カスタムテキストタグ も定義出来ます。

スタイルテキストタグ link

Ren'Py はスタイルにアクセス出来るテキストタグもサポートしています。これらは、タグ名が空であるようなテキストタグです。この場合、引数はスタイルの名前として解釈されます。 例えば {=mystyle} タグは mystyle スタイルにアクセスします。

タグと対応する閉じタグとの間のテキストはそのスタイルで定義された次のプロパティーを持ちます。 :

  • antialias

  • font

  • size

  • bold

  • italic

  • underline

  • strikethrough

  • color

  • black_color

  • kerning

英語以外の言語 link

Ren'Py のデフォルトフォントには、英語やその他多くの文字が含まれています。容量の都合から、中国語、日本語、韓国語などに必要な文字は含まれていません(訳注 付属の日本語フォントには常用漢字しか含まれません)。あるプロジェクトでこれらの言語をサポートするためには、まず使用するフォントを変更しなければなりません。

これだけの設定で、Ren'Py は世界の殆どの言語をサポートするでしょう。しかし、韓国語は分かち書きをするかしないかを選べます。Ren'Py には韓国語の分かち書きをサポートする特別なモードがあり、このコードで有効にできます

define gui.language = "korean-with-spaces"

これは gui.rpy の "unicode" のデフォルトから変更可能です。

日本語には複数の改行方法があります。「 japanese-normal 」から始めて、改行の機会を増やす、または減らすために、それぞれ 「 japanese-loose 」または「 japanese-strict 」への変更を勧めます。

define gui.language = "japanese-loose"

表意文字の言語には改行が多いです。高速だが不正確な改行アルゴリズムを有効にするには、このコードを使ってください

define gui.language = "greedy"

高速な改行アルゴリズムは、NVL モードのような莫大な量のテキストを表示するゲームでなければ必要有りません。

改行アルゴリズムは renpy.language_tailor() 関数を使用して更に設定出来ます。

縦書き link

vertical スタイルが適切に設定されていると、Ren'Py は縦書きテキストを生成します。そのテキストは上から下。右から左に書かれます(訳注: 標準のsay, nvl スクリーンは縦書きをサポートしていません。 参照)。

縦書きテキストに作用する2つのテキストタグがあります。

horiz link

縦書きテキスト内に横書きテキストを含めます。

vert link

横書きテキスト内に縦書きテキストを含めます(これは縦向きの回転を行いません)。

注釈

フォントが縦書きテキストの情報を含んでいない場合、Ren'Py は横書きテキストの情報から縦書き用の情報を生成しようとします。行間隔は Ren'Py のリリースごとに異なる可能性があります。

ルビテキスト link

ルビテキスト (ふりがな表記とも言います) は、文字や単語の上に小さなテキストを配置する方法です。貴方のゲームでルビテキストをサポートするためには必要な手順があります。

まずは、ルビテキストのスタイルを設定します。次のスタイル変更が必要です:

  1. ルビテキストに十分な垂直スペースを残すために、 line_leadingruby_line_leading プロパティーを使います。

  2. 新しく名前をつけたスタイルを作ります。このスタイルの size などのプロパティーは、ルビテキストに合うように設定します。

  3. 新しいスタイル yoffse を設定し、ルビテキストがベースラインの上に来るようにします。

  4. テキストスタイルの ruby_style フィールドは、 dialogue と history window text の両方で新しく作成されたスタイルに設定されるべきです。

style ruby_style is default:
    size 12
    yoffset -20
    color None # Use the same color as the parent text.

style say_dialogue:
    ruby_line_leading 12
    ruby_style style.ruby_style

style history_text:
    ruby_line_leading 12
    ruby_style style.ruby_style

(style.style_name を使用してこの目的でスタイルを参照します)

一旦 Ren'Py が設定されると、ルビテキストが 2 つの方法で組み込めるようになります。

隅付きかっこ ルビテキストはそれを2バイトの隅付き括弧 (【】) で囲み、1バイトまたは2バイトの縦線 (| または |) で上下のテキストを分けて書けます。例

e "Ruby can be used for furigana (【東|とう】 【京|きょう】)."

e "It's also used for translations (【東京|Tokyo】)."

ルビテキストは縦線があるときのみ実行されます。隅付き括弧自体は二重にして台詞に含められます。隅付き括弧のルビテキストは他のテキストタグを含みません。

{rt} と {rb} テキストタグ {rt} タグは、1文字以上の文字がルビテキストとして表示されるようにマークします。ルビテキストの前に {rb} タグで囲まれたテキストがあると、ルビはその上で中央寄せされます。そうでなければ、直前の一文字の上で中央寄せされます。

e "Ruby can be used for furigana (東{rt}とう{/rt} 京{rt}きょう{/rt})."

e "It's also used for translations ({rb}東京{/rb}{rt}Tokyo{/rt})."

クリエータは、ルビテキストがテキストの境界を超えないようにしなければなりません。そのようなエラーが起こらないように、そのテキストの先頭や左右に文字間のスペースを開ける必要があるかもしれません。

Ren'Py は代替テキストタグもサポートします。これは {rt} の代わりに {art} テキストタグで始まり、( ruby_style の代わりに) altruby_style プロパティーを使用します。

フォント link

Ren'Py は Truetype/OpenType フォントと画像ベースのフォントをサポートしています。

Truetype や OpenType フォントは、フォントファイルの名前を与えて指定できます。ファイルはゲームディレクトリーにあるか、アーカイブファイルのひとつでなければなりません。

Ren'Py は、複数のフォントを定義している Truetype コレクションもサポートしています。コレクションにアクセスするときは、0 ベースのフォントインデクス、アットマーク、そしてファイル名の順に使ってください。例えば、「 0@font.ttc 」がコレクションの最初のフォントなら、次は「 1@font.ttc 」、などとなります。

フォントファイルを探すときにそのファイルが見つからなければ Ren'Py は game/fonts ディレクトリーで探します。例えば、 test.ttf を探すとき、 Ren'Py は game/test.ttf を探し、次に game/fonts/test.ttf を探します。

フォントの置き換え link

config.font_replacement_map 変数は、フォントを対応付けるのに使われます。フォントのファイル名、ボールド体、イタリック体の組合せをべつの同様の組合せと対応付けられます。これにより、自動的に生成されるイタリック体の代わりに適切なイタリック体を使用できます。

このようなマッピングによって Deja Vu Sans font のイタリック版を公式の斜体版に置き換えます (web で斜体版をダウンロードする必要があります)。

init python:
    config.font_replacement_map["DejaVuSans.ttf", False, True] = ("DejaVuSans-Oblique.ttf", False, False)

このマッピングでイタリックテキストの見た目が向上します。

フォント名とエイリア link

config.font_name_map 変数を使用してフォントの名前やエイリアスを指定出来ます。これにより 2 つのことが可能になります : まず {font} タグを使用した台詞をより短く、簡単に使用できるようにします。 : 第二にそれらのタグで フォントグループ が使用出来るようにします

define config.font_name_map["jap"] = "electroharmonix.ttf"
define config.font_name_map["tjap"] = FontGroup().add("OrthodoxHerbertarian.ttf", "A", "Z").add("electroharmonix.ttf", None, None)

label yamato:
    e "Sorry, what does {font=jap}Black holes and revelations{/font} mean ?"
    y "You pronounce it {font=tjap}Black Holes And Revelations{/font}." # the capital letters appear in OrthodoxHerbertarian

画像ベースのフォント link

画像ベースのフォントは、次の登録関数の何れかを呼び出いて登録できます。画像ベースのフォントの登録には、名前、大きさ、ボールド体、イタリック体、下線付きを指定する必要があります。これらすべてのプロパティーが登録されたフォントに合致すれば、その登録されたフォントが使われます。

renpy.register_bmfont(name=None, size=None, bold=False, italics=False, underline=False, filename=None) link

これは、与えられた詳細の BMFont を登録します。なお、size, bold, italic, および underline はすべて (マッチングに使われる) 助言的なものであり、フォントの外見を変えるものではありません。

BMPFont を作成するツールは BMFont home page をご覧ください。Ren'Py は、filename パラメーターが BMFont テキストフォーマットのファイルであるとを想定しており、それは 32-bit フォントを記述するものです。アルファチャンネルにはフォント情報がなければならず、 Red, Green, および Blue チャンネルにはそれぞれの色が設定されているはず。画像ファイル、カーニング、その他の制御情報は BMPFont から読み取られます。

Ren'Py の全てのインタフェースが確実にレンダリングできるように、BMFont にはラテン文字と一般的な句読点を含めることを推奨します。

name

登録するフォントの名前で、文字列です。

size

登録するフォントのサイズで、整数です。

bold

登録するフォントがボールド体であるかどうかの 真偽値です。

italics

登録するフォントがイタリック体であるかどうかの 真偽値です。

underline

このパラメーターは無視されます。

filename

BMFont 制御情報を含むファイルです。

renpy.register_mudgefont(name=None, size=None, bold=False, italics=False, underline=False, filename=None, xml=None, spacewidth=10, default_kern=0, kerns={}) link

これは、指定の書体で MudgeFont を登録します。なお、size, bold, italic, および underline はすべて (マッチングに使われる) 助言的なものであり、フォントの外見を変えるものではありません。

MudgeFonts を作成するツールについては、 MudgeFont home page をご覧ください。Ren'Py は、MudgeFont xml ファイルに見つかった文字コードが Unicode 文字番号であると想定しており、負の文字コードを無視します。

name

登録するフォントの名前で、文字列です。

size

登録するフォントのサイズで、整数です。

bold

登録するフォントがボールド体であるかどうかの 真偽値です。

italics

登録するフォントがイタリック体であるかどうかの 真偽値です。

underline

このパラメーターは無視されます。

filename

MudgeFont 画像を含むファイルの文字列です。この画像は通常 TGA ファイルですが、PNG その他の Ren'Py がサポートするフォーマットにもできます。

xml

MudgeFont ツールによって生成された情報を含む xml ファイルです。

spacewidth

空白文字の幅で、整数のピクセル数です。

default_kern

文字間のデフォルトのカーニング間隔で、ピクセル数です。

kerns

二文字の文字列から、その文字間に使われるカーニング間隔へのマップです。

renpy.register_sfont(name=None, size=None, bold=False, italics=False, underline=False, filename=None, spacewidth=10, baseline=None, default_kern=0, kerns={}, charset='!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~') link

これは、指定の書体で SFont を登録します。なお、size, bold, italic, および underline はすべて (マッチングに使われる) 助言的なものであり、フォントの外見を変えるものではありません。

SFont についてのさらなる情報

name

登録するフォントの名前で、文字列です。

size

登録するフォントのサイズで、整数です。

bold

登録するフォントがボールド体であるかどうかの 真偽値です。

italics

登録するフォントがイタリック体であるかどうかの 真偽値です。

underline

このパラメーターは無視されます。

filename

登録するフォントの名前で、文字列です。

spacewidth

空白文字の幅で、整数のピクセル数です。

baseline

フォントの上端からベースライン (文字を置く不可視のライン) までのピクセルの整数での距離です。このフォントが他のフォントと合成されるときには、ベースラインで合わせられます。負の値だと代わりにフォントの下端からの距離になり、 None だとベースラインとの距離は高さと同じになります(つまりフォントの最下端になります)。

default_kern

文字間のデフォルトのカーニング間隔で、ピクセル数です。

kerns

二文字の文字列から、その文字間に使われるカーニング間隔へのマップです。

charset

フォントの文字セットです。画像で見つかる順に文字を含む文字列です。SFont用のデフォルトの文字セットは次の通りです。

! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _
` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~

BMFont は Ren'Py がサポートする三つの画像フォント中では最も完全なものなので、新しいプロジェクトでは推奨します。 BMFont の使用例は次の通りです

init python:
    renpy.register_bmfont("bmfont", 22, filename="bmfont.fnt")

define ebf = Character('Eileen', what_font="bmfont", what_size=22)

label demo_bmfont:

    ebf "Finally, Ren'Py supports BMFonts."

フォントグループ link

マルチ言語のゲームを作成するとき、制作者が意図した雰囲気を保ちつつ、一つのフォントですべてのゲームが使用するシステムをカバーすることは多分不可能です。これをサポートするために、 Ren'Py はフォントグループをサポートして二つ以上のフォントから文字を受け取って一つのフォントに合成出来るようにします。

フォントグループを作成するためには、 FontGroup オブジェクトを作成し、その .add メソッドを一回以上呼び出してください。フォントグループはフォント名が使用可能などこででも使用できます。 add メソッドはユニコードの文字コードの最初と最後を引数に受け取って範囲とし、ある文字コードに対してはそれをカバーする最初の範囲が使用されます。

style default:
    font FontGroup().add("english.ttf", 0x0020, 0x007f).add("japanese.ttf", 0x0000, 0xffff)
class FontGroup link

フォントグループは一つのフォントとして使用されます。

add(font, start, end, target=None, target_increment=False) link

font と文字の範囲を関連づけます。

start

範囲の始まりです。これは一文字の文字列か、ユニコードのコードポイントの整数です。

end

範囲の終わりです。これは1文字の文字列か、ユニコードコードポイントの整数です。 start が None ならこれは無視されます。

target

与えられれば、特定の範囲の文字を、 target_increment の設定に合わせて指定のフォントの特定の文字に割り当てます。これは1文字の文字列またはユニコードコードポイントの整数です。その文字が既に追加されていればこれは無視されます。

target_increment

True なら、 [start, end] の範囲が [target, target+end-start] の範囲に対応付けられます。 False なら、その範囲の全ての文字がそのターゲット文字に関連づけられます。

複数回の .add() 呼び出しが同じ文字を含めるときは最初の呼び出しが優先されます。

これは FontGroup を返すので、何回も .add() を呼び出して数珠つなぎに出来ます。

remap(cha, target) link

1つまたは複数の文字をある単一の文字にリマップします。

cha

リマップする文字または文字群です。これは一文字の文字列か、ユニコードコードポイントの整数、またはそのどちらかのイテレータです。

target

リマップ先の文字です。これは1文字の文字列又はユニコードコードポイントの整数です。

(add や remap により)既にリマップされているどの指定の文字も無視されますが、その FontGroup にデフォルトフォントが無ければ、どんな文字も先に追加されていなければなりません。

同じ理由で、このメソッドも FontGroup を返します。

FontGroup には config.font_name_map を使用した名前は指定できますが、 フォントとしてファイルパスを受け取るのみで、変数を使用して定義された名前やエイリアスは認識しません。

Text Displayables link

テキストは displayable としても使えます。これによりテキストに transform を適用し、画像であるかのように transform して画面上を移動させられます。

class ParameterizedText(style='default', **properties) link

これは追加の文字列パラメーターを表示可能な displayable で、文字列を画像のように表示出来ます。これは通常は予め定義された text 画像の内部で使用されます。

show text "Hello, World" at truecenter
with dissolve
pause 1
hide text
with dissolve

ParameterizedText を直接使用して、別のスタイルプロパティーを持つ同じ画像を定義出来ます。例えば次のように書けます。

image top_text = ParameterizedText(xalign=0.5, yalign=0.0)

label start:
    show top_text "This text is shown at the center-top of the screen"
class Text(text, slow=None, scope=None, substitute=None, slow_done=None, *, tokenized=False, **properties) link

テキストを画面に表示する displayable です。

text

画面に表示するテキストです。これは文字列か、文字列または displayable のリストにできます。

slow

テキストの表示を低速にして一文字づつ打ち出されるようにするかを決定します。None であれば、低速テキストモードは slow_cps スタイルプロパティーによって決定されます。そうでなければ、低速テキストモードを使用するかはこのパラメーターの真偽値によって決定されます。

scope

None を設定するか、テキスト置換を行うための追加のスコープを提供する辞書を指定します。

substitute

True なら、テキスト置換が行われます。 False なら行われません。None なら、 config.new_substitutions で制御されます。

slow_done

None でなく、低速テキストモード (slow パラメーターを参照してください) が有効ならば、これはそのテキストの表示が完了したときに引数なしで呼び出される呼び出し可能オブジェクト、または関数です。

tokenized

True なら、 text には文字列ではなくトークンのリスト期待されます。トークンについてはは カスタムテキストタグ を参照ください。

**properties

他の Displayable のように、 Text も (とりわけ) mipmap プロパティーを含むスタイルプロパティーを受け取ります。

テキストユーソリティー関数 link

renpy.filter_text_tags(s, allow=None, deny=None) link

テキストタグがフィルターされた s のコピーを返します。 allowdeny キーワード引数のどちらかが指定されなければなりません。

allow

許可されたタグのセットです。タグがこのリストになければ、除去されます。

deny

拒否されるタグのセットです。タグがこのリストになければ、文字列に保持されます。

renpy.substitute(s, scope=None, translate=True) link

翻訳と新しいスタイルフォーマットを文字列 s に適用します。

scope

None またはフォーマットに使用されるデフォルトの store に追加するスコープです。

translate

翻訳するかを決定します。

翻訳とフォーマットが終了した文字列を返します。

renpy.transform_text(s, function) link

テキストタグと置換部分はそのままに、 s を変換します。

function

実行するテキストに対応する引数で呼び出される関数で、実行するテキストを置き換えた文字列を返すべきです。

init python:
    def upper(s):
        return s.upper()

$ upper_string = renpy.transform_text("{b}Not Upper{/b}", upper)

低速テキストについて link

Ren'Py では、クリエータやユーザーがテキストの表示を低速にできます。この場合、Ren'Py はテキストをテクスチャにレンダリングし、そのテクスチャからスクリーンに長方形をレンダリングします。

残念ながらこれにより、文字が重複するときにレンダリングが乱れることがあります。このレンダリングの乱れを最小限にするためには、 line_leading および line_spacing を十分大きくとり、行が重複しないようにしてください。最初の行の文字の下部が切り捨てられている、特に line_spacing が負であるなら、 line_overlap_split を増やすことも考えてください。

字詰めをしても水平方向の乱れは起こりえますが、この乱れはたった 1 フレームだけなのでそれほど深刻ではありません。

乱れはメニューやその他のユーザーインターフェースのテキストのような静的なテキストでは問題になりません。

テキストオーバーフローの記録 link

Ren'Py はテキストが許可されたエリアからあふれた場合に記録出来ます。テキストオーバーフローの記録を有効化するためには、次の手順が必要です。

  1. config.debug_text_overflow 変数を True にしましょう。

  2. xmaximumymaximum スタイルをテキストdisplayable かそれを囲むものに適切に設定しましょう。

  3. ゲームを起動します。

利用可能なエリアを超えてテキストが表示されると、 Ren'Py は text_overflow.txt ファイルにエラーを記録します。

Variable フォント link

Ren'Py は OpenType の Variable フォントをサポートしています。これらのフォントは、太さや幅といった複数の軸をサポートしており、これらの軸の値に基づいてフォントの表示を変えられます。 Variable フォントは軸に対して異なる値を提供する名前付きインスタンスも持ちます。例えば、 "bold" という名前のインスタンスは、おそらくフォントの太字バージョンを提供し、 "regular" はより通常のバージョンになります。

Variable フォントは shaper スタイルプロパティーで制御される harfbuzz テキストシェイパーの使用を必要とします。これが設定されると、 instance プロパティーは指定されたインスタンスを選択し、 axis プロパティーは1つ以上の軸の値を設定します。

これらは gui システムでも設定できます。例えば、次のように使えます

define gui.text_font = "nunito.ttf"
define gui.text_instance = "light"
define gui.text_axis = {"width" : 125}

これは light インスタンスを使用し、幅をワイドにします。

インスタンスが指定されなければ、 Ren'Py のデフォルトは、太字でないテキストには "regular", 太字のテキストには "bold" となります。

Variable フォントの使用をサポートするテキストタグが2つあります。

instance link

インスタンスタグは使用されるインスタンスを変更します。例

"This is {instance=heavy}heavy{/instance} text."

インスタンスタグが使用されると、 axis プロパティーは上書きされます。

axis link

axis タグは、1 つまたは複数の軸の値を変更します。例えば

"This is {axis:width=125}wide{/axis} text."

axis タグは複数回使用でき、その値は組み合わされます。

"This is {axis:width=125}{axis:weight=200}wide and bold{/axis}{/axis} text."

等号の右辺の値は浮動小数点数であることが期待されます。

フォントの利用可能なインスタンスと軸を取得するには、 renpy.variable_font_info() 関数を使用します。この関数はコンソールからの呼び出しを想定しています。この関数にアクセスするには、shift+Oを押してコンソールを開き、次のように入力します

renpy.variable_font_info("nunito.ttf")

これは nunito.ttf フォントの情報を表示します。

renpy.variable_font_info(font) link

Variable フォントに関する情報を返し、そのフォントが利用不能なら None を返します。

font

フォント名の文字列です。

返り値は次のフィールドを持つオブジェクトです。 :

instance

キーがフォントの名前付きインスタンスの名前である辞書(例えば、 'light', 'regular', 'bold', 'heavy') です。値は無視できます。

axis

フォントの軸の名前を、以下のフィールドを持つオブジェクトにマッピングする辞書です :

minimum

軸の最小値です。

default

軸のデフォルト値です。

maximum

軸の最大値です。

この関数が返すオブジェクトとその中のデータを変更してはいけません。

この関数は、Ren Pyの表示が初期化された後にコンソールから呼び出されることのみを想定しており、人が読める形式で出力されます。