何らかのパラメータをユーザに見せるときに、数値を数値のまま表示するのでなく、一工夫してみると華やかで楽しいかもねと言う一例です。
基本原理としては、ある文字(gauge_fragment)を里々内部関数のtimes関数で必要回数だけ並べる事で、なんだかゲージっぽい何かをでっちあげるというものです。
その際さくらスクリプト\_lを用いて表示される文字間の余白をつめたりだとか、表示例が静止画なので試していただかないと分からないのですが、ミリ秒精密ウェイトを入れる事でバーがにゅにゅっと伸びていく感じを表現してみたりだとか、数値でゲージの色をかえるだとか、そういう小技を使っています。
呼び出し方は(call,gauge,現在値,最大値)です。
例1 バーっぽいゲージ表示
例1:ゲージ記述部
@gauge (call、do、 \![quicksession,true] \f[color,(call,gauge_color,(A0),(A1))] (times、(A0)/(gauge_unit)、 \_w[(gauge_delay)]\_l[@(gauge_shift)](gauge_fragment) ) \f[color,default] (when,(A0)==(A1), [MAX],[(A0)/(A1)]) \![quicksession,false] ) @gauge_unit 5 @gauge_delay 1 @gauge_shift -5 @gauge_fragment l @gauge_color #(iflist,(A0)*100/(A1) ,<=10,ff0000 ,<=20,f39800 ,<=30,e0a000 ,<=40,d0d000 ,<=50,50ff00 ,<=70,00ffff ,<100,0000ff ,==100,ff00ff ) @do (A0)
例1:呼び出し
*テスト : HP: (call,gauge,(HP),(HP最大値)) MP: (call,gauge,(MP),(MP最大値)) SP: (call,gauge,(SP),(SP最大値))
解説
fragmentはアルファベットの小文字のエル'l'で、これを\_l[@-5]で余白を潰しながら並べて表示する事で、あたかも一本のバーのようにみせています。
gauge_unitは「fragment一つが数値いくつをあらわすか」です。
値が1000もある場合に素直にlを1000個並べると、バルーンを飛び出します。
その時gauge_unitが例えば5だと、表示する数は200個になるので、なんとか収まります。
当然表現の精度は落ちてしまいますが。適度にバーを短くするためにもこの辺で調節するといいかと思います。
gauge_delayは、静止画と文章では大変説明しにくいので動かしてみてほしいのですが……。
ゲージが表示されるとき一瞬で表示されるか、少しずつ伸びていく風にするか、と言うのを調整出来ます。
数値が大きいほどゲージの伸びが遅くなります。0で瞬間的に表示。
実態はさくらスクリプト\_wで、各fragmentの間にそれが入っているだけです。
gauge_shiftはfragment間の距離の調節に使います。余白を詰める場合は-の数値です。
例2 大値に対する現在値を分かりやすくしてみた例
例2:ゲージ記述部
@gauge (call、do、 \![quicksession,true] \f[color,(call,gauge_color,(A0),(A1))] (times、(A0)/(gauge_unit)、 \_w[(gauge_delay)]\_l[@(gauge_shift)](gauge_fragment1) ) (times、(A1)/(gauge_unit)-(A0)/(gauge_unit)、 \_w[(gauge_delay)]\_l[@(gauge_shift)](gauge_fragment2) ) \f[color,default] (when,(A0)==(A1), [MAX],[(A0)/(A1)]) \![quicksession,false] ) @gauge_unit 3 @gauge_delay 0 @gauge_shift -1 @gauge_fragment1 ★ @gauge_fragment2 ☆ #以下例1と同様につき略
例2:呼び出し部
*テスト :レベル (call,gauge,(レベル),(レベル最大値))
解説
現在値を表示した後ろに、最大値から現在値を引いたあまり分を並べてるだけです。
例3 某すごく健全な国産ローグライクゲーム風
例3:ゲージ記述部
@gauge (call、do、 \![quicksession,true] \f[color,(call,gauge_color,(A0),(A1))] [ (when、(A0)<=(A1) 、 (when、(A0)%(gauge_unit)>0、 (gauge_frangment1) ) (times、(A0)/(gauge_unit)、 \_w[(gauge_delay)]\_l[@(gauge_shift)](gauge_fragment1) ) 、 (times、(A1)/(gauge_unit)、 \_w[(gauge_delay)]\_l[@(gauge_shift)](gauge_fragment1) ) (gauge_fragment2) ) ] \f[color,default] \![quicksession,false] ) @gauge_unit 50 @gauge_delay 0 @gauge_shift 1 @gauge_fragment1 * @gauge_fragment2 + @gauge_color default @do (A0)
例3:呼び出し部
*テスト 火炎耐性 (call,gauge,176,200) 冷気耐性 (call,gauge,665,200) 電撃耐性 (call,gauge,80,200)
解説
特徴としては最大値を超えたら値がいくらでも+でまとめてしまうことです。
好感度のような、あまり上限値を決めておかない値に対して使えるかもしれません。