Ren'Py memo

Ren'Pyの個人的なメモ

Renpy Auto Highlightを実装する

コードのライセンス

#  Auto Highlight Ren'Py Module
#  2021 Daniel Westfall <SoDaRa2595@gmail.com>

#  http://twitter.com/sodara9
#  I'd appreciate being given credit if you do end up using it! :D Would really
#  make my day to know I helped some people out!
#  http://opensource.org/licenses/mit-license.php
#  Github: https://github.com/SoDaRa/Auto-Highlight
#  itch.io: https://wattson.itch.io/renpy-auto-highlight

説明

今話している人の立ち絵に自動でフォーカスをくれて、
話していない人の立ち絵は暗くしてくれる素晴らしい機能です。
ピンとこない方は上記のitch.ioページの親切なGIFを見ればすぐに分かります。


ソースコード内の解説の一部を日本語訳して引用

""" セットアップ(重要) """
- これを動作させるためには、このファイルをプロジェクトに置くだけでなく、さらに2つのことを行う必要があります。
- まず、これをサポートするために、character定義を設定する必要があります。

example:
define eil = Character("Eileen", callback = name_callback, cb_name = "eileen")

- cb_name は,関数 'name_callback''name' パラメータを提供します.
- Renpy が say_with_arguments をサポートしていることを忘れないでください。

- そのため、以下のようにすれば、特定の行に対して引数を指定することができます:
eil "I think someone else should be focused" (cb_name = "pileen")

- 最後に、特別なナレーターが全てのスプライトを非フォーカス化したりすることを望むなら、これをコピーすればいい。
define narrator = Character(callback = name_callback, cb_name = None)
- 次に、すべての画像にsprite_highlightトランスフォームを適用する必要があります。layeredimagesを使っている人にとっては、これはとても簡単なことです。一例として

layeredimages eileen:
at sprite_highlight('eileen')
...

- ただし、個別のスプライトを使う場合は、これがすべてのスプライトに適用されていることを確認する必要があります。

image eileen happy = At('eileen_happy', sprite_highlight('eileen'))
image eileen sad = At('eileen_sad', sprite_highlight('eileen'))

あるいは、ATLの例がお望みなら

image eileen happy:
'eileen_happy'
function SpriteFocus('eileen')
""" 一般的な注釈 """
- このファイルは、これを使用する画像を定義するスクリプトの前にコンパイルする必要があります。
  そのため、このファイルの名前は00auto-highlight.rpyとし、その手助けをしています。
- 同じスプライトハイライト名を共有したいすべてのイメージが、同じイメージタグを使用していることを確認してください。
""" 変数 """
- sprite_focus - (Dictionary) 誰をアニメーションさせるかを知らせるために使用され、時にはタイミングデータを保持することがある。SpriteFocus __call__関数で項目を追加することができます。defineを使うことにしたのは、その状態がストーリーに影響しないことと、プレイヤーがゲームを閉じたときに安全にクリアできるためです。そして、再び起動したときに、必要な項目が追加されるだけです。プレイセッションの間、ステータスを維持したい場合は、「define」を「default」に変更します。

- speaking_char - (Varient) 現在の発言キャラクターが誰であるかを知るために、キャラクターコールバックによって操作されます。現在どのキャラクターが話しているかを追跡します。name_callbackで更新され、SpriteFocus __call__でチェックされ、スプライトのキャラクターが話しているかどうか判断されます。

実装する

1. rpyを入れる
ダウンロードした00auto-highlight.rpyをgameフォルダに入れる(エディタで表示すると下線で真っ赤になるが気にしない)

2.layeredimageの中身を作る

layeredimageの名前を"1"にする場合は、

layeredimageの画像名の例

このように名前を付ける。
意味わかんなくなるな……という人はTaro_eye_eye1とかでもいい。

3.layeredimageを定義
オートハイライトを付けるため、at sprite_highlight('1')を追加する。
1はlayeredimageの名前を指定する。そこが共通するならlayeredimage inuhiko: at sprite_highright("inuhiko")でもよい。

    layeredimage 1:
        at sprite_highlight('1')
        always "1_base"
        group a:
            attribute a1 default
            attribute a2
            attribute a3
            attribute a4
            attribute a5
        group b:
            attribute b1 default
            attribute b2
            attribute b3
        group c:
            attribute c1 default
            attribute c2
            attribute c3
            attribute c4
            attribute c5
            attribute c6
        group d:
            attribute d1 default
            attribute d2
            attribute d4
            attribute d5

4.Character変数の編集
callback=name_callback は共通、cb_nameはlayeredimageの名前を入力する

    define S = Character("[persistent.name_keep]", callback=name_callback, cb_name='0')
    define I = Character(_('戌彦'), kind=S, cb_name = "1")
    define A = Character(_('あやみー'), kind=S, cb_name = "2")
    define K = Character(_('クグさん'), kind=S, cb_name = "3")

5.ナレーター話す時は誰もフォーカスを当てたくない場合(任意)

define narrator = Character(callback = name_callback, cb_name = None)

とする。