BGAnimations講座

□はじめに□

お祭り明けの更新です。皆さんは夏コミに行かれましたでしょうか?
Stepmaniaに搭載されているグラフィック関係の機能の中で、特に強力なのがBGAnimationsと言えるでしょう。
もともとEZ2Dancerの背景を再現するために作られた(?)ということもあり、
使いこなせば仮に動画を一切使わなくても手の込んだ背景を作る事ができるのですが、
現状では仕様書が不完全で、ソースコードを直接読まないと全貌を掴む事ができないため、講座を開くに至りました。
dwiで背景を作ろうと思っている方、テーマファイルを作ろうと思っている方、是非ご一読下さい。

bganitest.mpg(1,245kb)
こんな感じのアニメーションもBGAnimationsで実現できます(実際にはここまで細かくグローかかりませんが……)。



□BGAnimationsの書式□

BGAnimationsとして認識されるには条件があります。
専用のディレクトリを一つ作り、その中にBGAnimations.iniというファイル名で保存してください。
ex.曲フォルダ\part1_1\BGAnimations.ini
テーマ\BGAnimations\Screenlogo Background\BGAnimations.ini

BGAnimations.iniの書式は次にようになっています。

[Layer*]
File=*
Type=0-3
Command=*


Layer番号が若いほど下に配置されます。
Fileはgif、png(透過png対応)、jpg、avi、mpgを読み込むことができますが、
実は画像読み込み部が統一されているようで、例えば曲のバナーなどにもaviやmpgを使用する事ができます。
Themeファイル側で曲バナーの規定の大きさを変更することができますので、
曲バナーを640x480にしてムービーの視聴なども面白いかも知れませんね。
またファイルは相対パスを指定することができます。

Typeは0=sprite, 1=stretch, 2=particles, 3=tiles 通常は0を使用してください。
3とした場合以下の命令を使用できます。

TileVelocityX=横移動速度
TileVelocityY=縦移動速度


CommandはBGAnimationsの心臓とも言える部分です。
コマンド,オプション;コマンド,オプション; のように記述しますが、
これに関しましては、実際に作例を見ていただいた方が早いので、もう少し下をご覧下さい。

Themeファイルに使うBGAnimationsの場合はファイルの先頭に

[BGAnimation]
LengthSeconds=任意の数字

で表示時間を指定できます。

実際に書いてみると、このような感じになります。

[Layer1]
File=asdf.png
Type=0
Command=x,50;diffusealpha,1;linear,1;x,400;diffusealpha,0;sleep,50;

[Layer2]
File=fdsa.png
Type=0
Command=zoom,2;rainbow;sleep,50;

このBGAnimationsでは、asdf.pngが1秒かけてフェードアウトしながらx位置50からx位置400に横移動し、
2倍拡大されたfdsa.pngが七色に光ります。

Layer1の1秒分のアニメーションが「linear,1」によって生成されている事にはお気づきでしょうか?
linearは一定のスピードのアニメーションを描画するコマンドで、後述のアニメーション生成コマンドの一つです。
コマンドが左から実行されていくところがポイント。
少々わかりづらいですが、アニメーション生成コマンドは核とも言える部分なので、
手前味噌ですがfoonmix PLUSのtrn_remakeで書かれているBGAnimationsなど見て、よく理解してください。

またもう一つ肝心なのが「sleep」コマンドで、こちらは50秒の動作停止(実質アニメーション終了)を意味します。
最後にsleepを定義しておかないと、うまく動作しない可能性がありますので、動作が不審な場合はsleepを加えてみてください。

□BGAnimationsコマンド一覧□

コマンドはアニメーション生成コマンドとスタティック(静的)コマンド、そしてダイナミック(動的)コマンドがあります。
ダイナミックコマンドはコマンドが読み込まれた瞬間から適用され続けますが、
同時に2つ以上のダイナミックコマンドを使用することはできません(後から読み込まれた方が優先されます)
またダイナミックコマンドはsleepコマンドの影響を受けません。

使用するとStepmaniaがクラッシュしたり、未実装なコマンドはリストに入れていません。

I.アニメーション生成コマンド

linear, accelerate, decelerate, bouncebegin, bounceend, spring, stoptweening, finishtweening, hurrytweening

コマンド名

オプション

説明

linear

時間(秒)

一定スピードのアニメーションを生成
例:linear,1 (1秒)

accelerate

時間(秒)

低速から始まり加速するアニメーションを生成
例:accelerate,0.5 (コンマ30秒)

decelerate

時間(秒)

高速から始まり減速するアニメーションを生成
例:decelerate,2 (2秒)

bouncebegin

時間(秒)

定義の逆のアニメーションを一瞬表示した後、加速アニメーションを生成
例えばzoom,2;bouncebegin,1;zoom,1;なら、一瞬2倍以上ズームしてからzoom,1に向けて加速します。
例:bouncebegin,1 (1秒)

bounceend

時間(秒)

bounceendの逆
例えばzoom,2;bouncebegin,1;zoom,1;なら、zoom,0.8ほどまで動いたところで再びzoom,1に向けて動きます。
例:bouncebegin,1.5 (1秒コンマ30)

spring

時間(秒)

何度かオーバーに往復してから通常のアニメーションを生成
例:spring,3 (3秒)

stoptweening

-

全ての動的コマンド以外の動作を止める
例:stoptweening

finishtweening

-

このコマンドがあるとすべてのアニメーション生成コマンドが無効になる
例:finishtweening

hurrytweening

時間(秒)

このコマンドがあるとすべてのアニメーション生成コマンドの速度が「hurrytweeningで指定した時間*生成コマンド指定速度」となる
例:hurrytweening,0.5



II.スタティックコマンド

sleep, x, y, addx, addy, zoom, zoomx, zoomy, zoomtowidth, zoomtoheight, stretchto, cropleft, croptop, cropright, cropbottom, fadeleft, fadetop, faderight, fadebottom, diffuse, diffuseleftedge, diffuserightedge, diffusetopedge, diffusebottomedge, diffusealpha, diffusecolor, glow, glowmode, rotationx, rotationy, rotationz, scaletofit, animate, setstate, additiveblend, hidden, hibernate

コマンド名

オプション

説明

sleep

時間(秒)

指定した時間だけそのレイヤーの動作を止める
例:sleep,0.5 (コンマ30秒)

x

位置

指定したx(横)位置に移動
例:x,50 (横位置50)

y

位置

指定したy(縦)位置に移動
例:y,300 (縦位置300)

addx

相対位置

負の数を指定すると左に、正の数を指定すると右に移動
例:addx,83 (横位置+83)

addy

相対位置

負の数を指定すると上に、正の数を指定すると下に移動
例:addy,-83 (縦位置-83)

zoom

倍率

指定した倍率に拡大縮小。縦横比はそのまま
例:zoom,2 (2倍)

zoomx

倍率

指定した倍率だけ横に拡大縮小
例:zoomx,1.5 (1.5倍)

zoomy

倍率

指定した倍率だけ縦に拡大縮小
例:zoomy,15 (15倍)

zoomtowidth

ピクセル

指定した大きさ(単位はピクセル)になるよう横に拡大縮小
例:zoomtowidth,256 (256ピクセル)

zoomtoheight

ピクセル

指定した大きさ(単位はピクセル)になるよう縦に拡大縮小
例:zoomtoheight,42.94967296 (42.94967296ピクセル)

stretchto

横開始位置,縦開始位置,横終了位置,縦終了位置

rectで位置と大きさを指定。
例えば0,0,640,480なら画面いっぱい
例:stretchto,50,50,100,100

cropleft

倍率

指定した倍率分だけ左からカット
例:cropleft,0.5 (画面半分ほど左側を消去)

croptop

倍率

指定した倍率分だけ上からカット
例:cropleft,0.5 (画面半分ほど上を消去)

cropright

倍率

指定した倍率分だけ右からカット
例:cropleft,0.25 (画面の1/4ほど右側を消去)

cropbottom

倍率

指定した倍率分だけ下からカット
例:cropleft,0.25 (画面の1/4ほど下を消去)

fadeleft

倍率

指定した倍率分だけ左からフェードアウト
例:cropleft,0.5 (画面半分ほど左側をフェードアウト)

fadetop

倍率

指定した倍率分だけ上からフェードアウト
例:cropleft,0.5 (画面半分ほど上をフェードアウト)

faderight

倍率

指定した倍率分だけ右からフェードアウト
例:cropleft,0.25 (画面の1/4ほど右側をフェードアウト)

fadebottom

倍率

指定した倍率分だけ下からフェードアウト
例:cropleft,0.25 (画面の1/4ほど下をフェードアウト)

diffuse

Rの強さ,Gの強さ,Bの強さ,透明度(どれも倍率)

指定した倍率分だけ色調を変更
例:diffusecolor,1,1,0,1 (青味を抜く)

diffuseleftedge

Rの強さ,Gの強さ,Bの強さ,透明度(どれも倍率)

指定した倍率分だけ色調を変更。画面上で左に行くほどエフェクトが強い

diffuserightedge

Rの強さ,Gの強さ,Bの強さ,透明度(どれも倍率)

指定した倍率分だけ色調を変更。画面上で右に行くほどエフェクトが強い

diffusetopedge

Rの強さ,Gの強さ,Bの強さ,透明度(どれも倍率)

指定した倍率分だけ色調を変更。画面上で上に行くほどエフェクトが強い

diffusebottomedge

Rの強さ,Gの強さ,Bの強さ,透明度(どれも倍率)

指定した倍率分だけ色調を変更。画面上で下に行くほどエフェクトが強い

diffusealpha

透明度(1が最大)

指定した倍率分だけ透明度(アルファ値)を変更
例:diffusealpha,0.5 (50%透明)

glow

Rの強さ,Gの強さ,Bの強さ,明るさ(どれも1が最大)

このコマンドは「glowmode」コマンドによって動作が全く変わる。

glowmodeがwhiten(デフォルト)の場合
diffuseのバージョン違い。明るさは0が100%で、1が真っ白

glowmodeがbrightenの場合
RGBの色味を加算。明るさは0が100%で、1が真っ白

このコマンドは環境によっては正常動作しません。詳しくはStepmania公式サイトのVideo cardsをご覧下さい。

glowmode

whitenもしくはbrighten

glowコマンドのモードを変更する。whiten/brighten以外を指定するとStepmaniaが落ちます

rotationx

角度

横に3次元回転
例:rotationx,180 (左右反転)

rotationy

角度

縦に3次元回転
例:rotationy,-180 (上下反転)

rotationz

角度

平面回転。負の値で反時計回り、正の値で時計回り
例:rotationz,90 (90度時計回りに回転)

scaletofit

横開始位置,縦開始位置,横終了位置,縦終了位置

stretchtoのバージョン違い?

animate

1か0

1でバッファリングアニメーション(後述)開始、0で停止。デフォルトは1
例:animate,0 (アニメーション停止)

setstate

フレーム数

バッファリングアニメーションの指定のフレームにジャンプ
例:setstate,5 (5フレーム目にジャンプ)

additiveblend

透明度倍率

指定した透明度で加算
例:additiveblend,1 (透明度100%で加算)

hidden

1か0

1でレイヤーを隠し、0で出現させる。デフォルトは0
例:hidden,1 (レイヤーを隠す)

hibernate

時間(秒)

最初はレイヤーを隠し、指定した時間が経過した後に出現
例:hibernate,4.126 (4.126秒後に出現)



この他、zbufferやらbackfacecullといったコマンドがある事から、BGAnimationsでも3Dモデルを扱えるのかも知れませんが詳細は不明です。
(バックダンサーでは既に3Dモデルを扱っているのですが……)

III.ダイナミックコマンド

shadowlength, diffuseblink, diffuseshift, glowblink, glowshift, rainbow, wag, pulse, spin, vibrate, stopeffect

コマンド名

オプション

説明

shadowlength

サイズ

指定したサイズの影が右、下にできる。このコマンドはアニメーション生成コマンドがあると動作しない
例:shadowlength,10 (サイズ10の影を生成)

diffuseblink

-

ちかちかと明るさ100%、50%を繰り返す
例:diffuseblink

diffuseshift

-

スムーズに明るさ100%、0%を繰り返す
例:diffuseshift

glowblink

-

ちかちかと明るさ100%、150%を繰り返す
例:glowblink

glowshift

-

スムーズに明るさ100%、150%を繰り返す
例:glowshift

rainbow

-

色が七色にスムーズ変化
例:rainbow

wag

-

左右にぐらぐら回転
例:wag

pulse

-

拡大縮小を繰り返す
例:pulse

spin

-

回転し続ける
例:spin

vibrate

-

細かく震える。正確には上下左右にばらばらに移動
例:vibrate

stopeffect

-

全てのエフェクトを停止する
例:stopeffect



□バッファリングアニメーション□

Stepmaniaは画像のバッファリング(1枚の画像に複数枚並べる)ができます。

ファイル名 *x*.拡張子のように、ファイル名の末尾に半角スペースと*x*を書いてください。
例えば2x3なら横2枚、縦3枚バッファリングされているものと認識されます。

アニメーションする順番は



のように、左から右に、右端になったら下の段の左端に……となっています。
出来上がりましたらBGAnimationsで指定するなり、EDIT画面でスイッチ指定するなりどうぞ。

□spriteを書く□

このままでは各フレームの表示時間を設定することができませんので、spriteファイルを書きましょう。
ファイル名は*.spriteで、これをBGAnimationsで指定することによって認識します。
例:

[Sprite]
Texture=test 5x5.png
Frame0000=0
Delay0000=0.5
Frame0001=1
Delay0001=0.5
Frame0002=2
Delay0002=0.5

紛らわしいですが、Frame****はSprite側のフレーム番号であって、
バッファリング画像側のフレーム番号はFrame****=nのnで指定します。

□最後に□

Stepmaniaはファイル名だけでBGAnimationsを指定する事もできます。
次回のBGAnimations講座][にご期待下さい(本当か?)

foonmix top