Ren'py の特徴の一つに、画像変形の構文が極めて簡潔で柔軟なことがあげられます。
Transform と名付けられているものですが、その基本と応用についてここで少し紹介します。
まず基本から。
基本的には、 Transform は画像を変形させて別の画像を返す関数です。
例えば、"image.png"を左右反転して表示したい場合は以下のように書きます。
show expression Transform("image.png", xzoom=-1)
ここで、xzoom=-1 は反転を意味しています。
つまり、"image.png"のかわりに、Transform で変形した新画像を表示しているわけです。
他のプログラムでもお馴染みの書き方です。
しかし、 ren'py にはこれとは別の ATL (Animation and Transformation Language) という書式があり、
これを利用することによって、より簡潔かつ高度な変形が可能になります。
例えば、左右を反転させる場合、
show expression "image.png":
xzoom -1
とより簡略に書くことができます。
ATLの真の利点は、時間経過に寄って変形のパターンを容易に重ねられることです。例えば、
show expression "image.png":
alpha 0 center (.5,.5)
linear 1.0 alpha 1.0
easeout 3.0 zoom 2.0 additive 1.0
は、image.png を画面の中心に1秒掛けて表示.
その後三秒掛けて二倍に拡大しながら、合成モードを加算に変更しています。
同じ変形を元々の Transform で定義して行おうとすると、非常に手間がかかりますが、 ATL なら簡単です。
続いて応用。
Transform は、 ATL の書式により、新しい Transform を定義することもできます。例えば、
transform flip:
xzoom -1
と定義した場合、
show expression flip("image.png")
という形で表示することができるようになります。
ちなみに、
show expression "image.png" at flip
と書いたり
show expression "image.png":
flip
と書くこともできます。
更に、引数を伴って定義することもできます。例えば、
transform zoomout(time):
linear time alpha 0.0 zoom 3.0
ただし、通常の関数定義と違い、いくつか不可能なことがあるので注意して下さい。
何ができないのかは、残念ながら私も十分には把握していません。