NScripterのエフェクトとeffect命令とマスクパターンについて
書いた日:2020/05/02

エフェクト指定の文法

エフェクト指定は画面を更新する際の更新方法を指定する文法で、主にprint/bg命令の引数に用いられる。

bg "hoge.png",0 ;(更新しない) print 1 ;(瞬間表示、ノーウェイトで画面更新する)

こういうやつ。使い方が何種類かある。
@print 1 / bg 0
Aprint [エフェクト種類], [画面更新にかける時間]( ,["マスク画像"])
Beffect [登録番号], [エフェクト種類], [画面更新にかける時間]( ,["マスク画像"])
 print [登録番号]
Cエフェクトプラグインを使った画面更新(このページでは触れない)
effect命令はA(直接指定)のマクロ登録機能と考えてよい。
見た目が同じ数字なのでややこしいが、本体組み込みのエフェクト種類(フェードやカーテン等)とeffectで指定する登録番号の間に関係は無い。
(print等に渡された引数の数に応じてどっちなのか自動判別される)

余計な誤解無きようeffectとセットでnumaliasして名前を付けておくのがよい。

で、どの効果を使うのか

演出上の理由がなければ瞬間表示だけでいい(待ち時間無いからね!)。
現代だと本体組み込みのシャッター/カーテンは少し雑に見えるので、 基本的には全画面クロスフェード(10)とスクロール(11〜14)、モザイクイン(17)、マスク画像使用のクロスフェード(18)のみ使うべきだろう。
サウンドノベルの場面転換など気の利いた切り替え演出を付ける際(かつ本体組み込みのエフェクトで事足りぬ場合)、
マスク画像を用いた自作エフェクト(18)が求められる。

マスク画像周りの仕様

黒から白に向かって更新される。

この例なら右から左に(クロス)フェード。

伝統的な解説・サンプルではbmp形式が用いられているが、現バージョンではもうpng※に揃えよう。
今更透過形式で悩むべきではない。
(※フルカラー/グレースケールやアルファチャンネルの有無は特に問題にならない。
容量を気にするならグレースケール/アルファチャンネル無しが妥当だが、
もう現代はUI素材の容量と戦う時代でもないだろうから…)

■マスク画像のサイズがウィンドウより大きい場合
はみ出た分は無視される。

■マスク画像のサイズがウィンドウの大きさに満たない場合
縦と横で仕様が異なる。
●縦…敷き詰められる。
 640*480の画面に対して640*240のマスク画像を用意した場合、縦に2つ分並んだものとして表示される。
●横…足りない領域が瞬間表示扱いになる。
 640*480の画面に対して320*480のマスク画像を用意した場合、マスクに関わらず右半分は瞬間表示される。

縦の仕様は利用できなくもない※が、横はちょっと使い物にならない。 少なくとも横サイズは画面と揃えるべきだろう。
ややこしいし画面サイズと完全に一致させるのが分かりやすいんじゃないかな。

※左右への単純なフェードや市松模様など

マスク画像の準備

フェードくらいならGIMPあたりでちゃちゃっとグラデーションを作ればよいが、凝ったもんは素材に頼る方が早いかもしれない。
公開してくれている人もいる。 「NScripter マスク画像 素材」とかでググったら何かしら出てくると思う。
ただコミュニティ全盛期の関係で640*480や800*600前提の素材が多かろうと思われるので、ワイド画面用のマスク画像は自作(または加工)する必要がある。
まあ大抵はグラデーション使った各種フェードで十分なんじゃないかな……

ガラスグサに戻る