http://eelglass.g1.xrea.com/game/NScripter_for_other_genre.htmlに移転しました。
Googleはbotくんに検出させてください。

NScrの深淵: 書いた日:2017/02/16
「NScripterはノベル以外のジャンルにどこまで食らい付けるのか」について私見を述べるページ。
想定されるプラットフォームはPC(ONScripterやスマホ向けエンジンは考慮しないってことね)、
想定する競合エンジンは2D系統とする(3Dエンジン活用する人はここを見ないと思われるので)。

予備知識(聞いたことがある単語は読む必要なし)

■ミリ秒

1000分の1秒。NScripterにおいても時間の基本単位(エフェクトやウェイトの時間指定など)なので、見覚えはあるはず。 毎回ミリ秒と書くのは大変なので単位(ms)を用いて表すことも多い。

■(ゲーム)エンジン

NScripterやツクールやUnreal Engineなどを広義に指す。

■(モニタの)リフレッシュレート

「このページを表示しているディスプレイが一秒間に何回画面を描き直しているか」を表す数値。単位はヘルツ(Hz)。 PC・タブレットなら60Hz以上であると思って問題ない。 更新間隔に描画タイミングを合わせてチラ付き(ティアリング)を無くす「垂直同期」という描画方法も存在するが、NScripterには関係がない。 そんなわけで、以後このページでは存在を無視する。

■フレームレート

ゲーム(に限らない)が「1秒間に何回画面を更新しているか」を表す数値。 一般に「○○fps」の形で表される(frames per second=秒毎フレーム)。 1秒は1000ミリ秒なので、そこから「1フレームに何ミリ秒かけてよいか」を逆算できる。
フレームレート描画回数1フレームにかけてよい時間
30fps一秒に30回約33.3ミリ秒
60fps一秒に60回約16.7ミリ秒
ゲームにおける負荷は90%近くが描画である。描画が間に合わない場合、
@「仕方ないから省略しよう」(フレームスキップ、3Dゲームに多い)
A「仕方ないからゲームの処理を遅らせてでも描画しよう(処理落ち、ゲームスピードが落ちる、2Dゲームに多い)
どちらかの処理を選ぶことになるが、NScripterでフレームスキップを実現するのはそもそも簡単ではない。したがってパフォーマンス上の問題は以後処理落ちを前提とする。
ここから製作者側の考えは「処理落ちしないように負荷を抑えよう」と「まあ多少処理落ちしてもいいや」に分かれ、 便宜上前者は「固定フレームレート」後者は「可変フレームレート」と呼ばれる。PCゲームでは特に固定フレームレートが好まれるが、実際に全く処理落ちしない作品は意外に少ない。
デザイン上極端に処理落ちを排除しなければならないのは「(公平性を確保する必要がある)PC向けSTG」くらいであり、「露骨に落ちなければバレない」の精神でも問題ないといえばない。
SFC時代の名作アクションも、そのほとんどが「気付かない程度に処理落ちする」箇所を含んでいる。
ゲームプレイに支障をきたすほどの処理落ちは論外として、微細な処理落ちはオンライン対戦やリプレイの公平性(STGなど画面がスローであることが有利に働いてしまうジャンル)において問題になる。

余談:
@「負荷が重い場所で自主的にフレームレートを落とそう(30fps等に適宜切り替え、見た目上のカクつきを抑える)」という考え方もある(狭義の可変フレームレート)
Aどんな人間の目にもはっきりと処理落ちが分かるのは60fps→54fpsあたりから。数字を出さなければ案外気付かないものです
Bツクール2000は「60fps・アニメーションのみ20fps」という形式を採用している。NSLuaでは再現できない(毎フレーム画面全体を更新する場合、再現しても効果がない)

■画面の更新(再描画)、フレーム

「内部的に更新された情報」を現実の画面に反映(描画)する行為。
スプライトの読み込みとprint命令を思い浮かべればよい。

素のNScripterにおいては以下の状況で実行される。

実行タイミング説明欠点
print 内部的に効率化されているようで、「前回の描画から見た目が変わったらしい領域(無効領域、dirty pixels)」のみ再描画している 特殊な条件下で奇妙な描画が起きる
repaint 何も考えず画面全体を再描画する。 サウンドノベル用途においてはパフォーマンス上の無駄が多い(重いと書かれている・推奨されていない理由)
暗黙的なprint ボタン待ち命令やアニメーション実行中など、「当然再描画を伴うであろう処理」は内部的にprint相当の再描画が行われる。
これらのうち、「定期的に」実行されるのは3番目の処理。

ボタン待ち中は入力判定ごとに再描画が掛かり得る(複合ボタンの処理)。判定実行頻度は明かされていないが、
@ 「通常の用途で不便しない程度には細かい」
A 「新ボタン命令の方が圧倒的に反応が良い」
の二点については経験的に知られている。

アニメーションは指定したミリ秒ごとに更新「しようと」する。
あまりに無茶な数字、たとえば1ミリ秒ごとにアニメーションしろと命じても描画は間に合わない。

命令としてのprintは当然呼び出したときに実行される。
サウンドノベルにおいては「ムダなくまとめて描画しよう」でパフォーマンス上十分であるため、
「それがいつか?」
「どのくらい時間が掛かるか?」
について通常気にされることはない。
ノベル以外の用途(のうちミリ秒と戦わねばならないジャンル)においては、
どうせNSLuaを用いることになるのでやはり気にされることはない。

フレームレートの概念下においては、画面全体の更新1回をもって「1フレーム」と見なす。
画面を部分部分再描画している場合は適当に考える。

(人類はかつてインターレースのような特殊な描画技法を発明したが、NScripterには関係ないので省略する)

■NScripterを使うそもそもの動機(あるいは必然性)

あなたがなぜ「サウンドノベル以外のジャンル」でNScripterを採用しようと思ったか。

@既存のNScripter製ゲームを見た
実際、「NScripterで作られたノベル以外のジャンル」もフリーあるいはシェアウェアとして完成した状態で世に出ている。
ジャンルは経営シミュレーション、ターン制バトルロワイアル、ノンフィールドRPG、DRPG、音ゲー、クイズ、パズルと幅広い。
完成したゲームとして世に出ている事実はジャンルをカバーする最強最大の保証だ。
それらのうちどれかが刺さった結果、「同じツールで」と考える人がいるかもしれない。

A「気付いちゃった、このジャンルNスクで作れるんじゃね?」
そうなんですよ。

Bサウンドノベルエンジンである利点を活かしたい
(ノベル以外のジャンル)を作ろうと思い立つならば、逆説的だが動機としては十分にあり得る。
ノベルエンジンであるがゆえに「ノベル的な演出」を行うための機能が一通り揃っている。
つまり「ちょっとしたイベントシーン」のために追加の処理を書いたり探したりする必要がない。
一方でノベル以外を想定した命令も一通り備わっており、特にLua込みなら2Dゲームの多くをカバーできる。
実際、機能上のバランスは良い。問題になってくるのはパフォーマンスが足りるかどうかである。

C恐らくはあなたが文法をよく知っていること
追加の知識なしで済むなら、それにこしたことはない。
とはいえ、「特化エンジンを選ばないことで生じる余計な手間」の大きさ次第では話が変わってくる。

D珍しさ目当て
遊ぶゲームのエンジンを気にする人がどれだけ世にいるかはさておき……
「エンジン知名度に対して、ノベル以外のジャンル内では飽和していないツール」という美味しいポジションではあるかもしれない。
ツクールでいう「デフォ戦が見向きされなくなった」現象、
現代的3Dエンジンでいう「そのアセットサンプルまんまじゃね?」現象とは無縁でいられる。
「ノベルエンジンでノベル以外のジャンルを作る」はゲームで遊ぶ人相手なら頑張りが伝わる。
Q.何でわざわざそんな事するの?

ジャンルごとの適性

「2DエンジンとしてのNScripter(NSLua使用)がどの程度のパフォーマンスを発揮するか」に関しては、
・計算は早いが透過と半透明が苦手
・640×480・60fpsならクオリティ上限はSFC前期程度
・どちらか諦めれば中期後期も狙える
と理解すればおよそ正しい。

その上で向き不向きの早見表、各ジャンルにおける詳細の順に記載する。異論は受け付けない。

ジャンル 総合的な向き不向き Lua込みの適性 NScripterの適性 fpsの概念 競合するエンジン
育成/経営/戦略シミュレーション、
SRPG、クイズ、パズル
ない 強力なものはない
ノンフィールドRPG・ダンジョンRPG ない 近代ツクール、2000
音ゲー ある 音ゲークローンエンジン
フィールド付きRPG ある ツクール
格闘ゲーム、RTS ある mugen、3Dエンジン
アクション、2Dシューティング × ある 各種汎用・専用エンジン
3Dゲーム × × × ある 3Dエンジン
◎/○…恐らく困ることはない、制作に向いている
△…理論上作れるが作業時に何らかの問題に直面する、競合候補が強力すぎる
×…正気の沙汰ではない

■育成/経営/戦略シミュレーション、SRPG、クイズ、パズル

前例も複数あり、機能面・性能面の問題もない。Lua抜きでも無理なく作れるはず。
技術的に悩む可能性があるとすれば戦略シムの画面スクロール(頭の中でやり方想像できますか?)。
各種シミュレーションは基本的に変数を弄り回す機会が多くなるため、使えるならLua相当の機能を使った方がもちろん楽。

競合する特化エンジンはそもそも存在しなかったり、拡張性を欠いたり、別に汎用エンジンでよくねってものだったり。
あえて言えば他のあらゆる汎用エンジンが競合対象になるが、どの道フルスクラッチに近い形で開発せざるを得ないジャンルではある。
一番慣れているツールを使えばよい。

■ノンフィールドRPG・ダンジョンRPG

並べてかんがえてみよう。
他の選択肢 制作の手間 NScripterの長所 ツクールの長所
ツクール2000 独自描画/戦闘を自分で組む限り、コア部分を作る手間は大して変わらない。 むしろ変数などを楽に扱えるNScripterの方が下手をすると楽かもしれない。 GUIとテキストファイルのたたかい。 (2000にも非公式エディタが複数存在するが、今は考慮しない) @解像度。 2000は320×240の倍角表示なので、必然的に一枚絵やフォントはSFCドット絵になる。ゲームの性質次第では気にする人もいる。
A機能面で上回っている点。変数の扱い、外部ファイルの読み込みなど。
その圧倒的資産(そざい)は今日もフリーゲームを支えている。ドット芸万歳。
「2000製の変態的にすごいフリゲ」には固定層が付いているため、良いものを適切に作れば相応に評価される。
(「過去の名作が立ちはだかる」とイコールではあるが)
僕はツクール2000が好きです。
近代ツクール 近代ツクールは公開されているスクリプトを組み合わせてコア部分を省力に作れる。
RPG隣接ジャンルに必要なスクリプト素材は概ねカバーされているため、最大限利用すれば手間は圧倒的に削減される。
自分で複雑なシステムを組むなら、近代ツクールはコード書いてね(ruby→javascript)と開き直っており手間はそれほど変わらない。
動作の軽さ、というか近代ツクールが異様なまでに重い。
それだけで触る気が薄れる人間もここに一人いる。
あの人たちバッテリー食い過ぎません? なんで?
僕は近代ツクールが苦手です(重さ、デフォ素材の頭身、戦闘の背景うねうねエフェクト、あのうねうねエフェクト!)。
とはいえRPG用途として見た場合、そのスクリプト資産は決して無視できない(NScripterの場合は半ばフルスクラッチになる)。
「本来のVXは妙ちくりんな縦横比だが大抵4:3にカスタマイズされている=結果的にNScripterとほとんど同じ解像度」
といった事情により、グラフィック素材の差はない。
そもそも「フィールドを廃したRPG」は紙とペンとサイコロから生まれたジャンルであり(※)、 「最もシンプルなひな形を作る分には」書くべきスクリプトの量・厄介なジャンル特有の仕様は(比較的)少ない。
強力な競合相手こそいるものの、ある程度NScripterに習熟しているなら採用は十分に現実的。 このジャンルにおいて一番のネックはグラフィック素材の確保。見込みある?
※人間がやるには計算式が複雑過ぎる作品もあるが

■音ゲー

リズムゲームもここで扱う。
描画パフォーマンス自体は十分足りている。 プログラム難度もそう高いものではない。

唯一問題になるのは「最も細かい音符・休符の間隔に入力受け付け頻度が間に合うか?」という点。 「入力を正確に拾えなかったり、処理落ちしたりする音ゲー」を想像してほしい。 温情抜きだとクソゲー扱いされかねず、その意味で描画パフォーマンスをある程度気にする必要が出てくる。
結論のみ言うと、(新ボタンやLuaを使うなら)演出が豪華すぎない限りは間に合う。

詳細ジャンル 補足 制作上のネック
音ゲー 音ゲー作らんと思い立つ人ならみんな知っていそうだが、BPM(beats per minute、曲が1分間(60000ミリ秒)にいくつの4分音符を打つペースか)という概念がある(心拍数みたいなものだよ)。
特別な事をしていなければ120前後の曲が多く、ミッキーマウス・マーチやめざせポケモンマスターはbpm120。 下限近くのテンポはお葬式じみており、現行の国歌はbpm70である。 一方で商業音ゲー用の高難度曲はbpm240を超えるものもざら。 さらに曲の途中でテンポが変化することもあり、ゲームとしての難易度上昇に拍車をかける、あのアレ。
bpm240×32分音符あたりまで考慮するなら、およそ数十ミリ秒に一回判定を行う必要がある。 それ自体は素のNScripterでも恐らく間に合う(Luaなら余裕である)が、より細かく判定グレードを付けるなら秒間60回に迫るペースの判定が必要になるかもしれない。
譜面データの作成。楽譜またはmidiファイル、恐らくどちらか一方は必須。
なお、既存の音ゲーフォーマットに曲を乗せたいだけならクローンエンジン使った方が早い。
リズムゲーム リズム天国系クローン。 入力間隔の最小単位に余裕がある分、いわゆる音ゲーより「プログラム難度は」大幅に低い。 ちゃんと面白いの作れるか?
音ゲーは入力受け付けについて学ぶ課題曲のような側面も有しており、ツクール2000で無理矢理作られた作品も複数存在する。 全てはあなたの頑張り次第、音ゲーの明日を切り拓くのはあなたかもしれない。
リズムゲームに関しては二次創作もののシェアウェアやツクール2000で無理矢理作られた作品も複数存在する。 全てはあなたの頑張り次第、リズムゲーの明日をきりひらくのはあなたかもしれない。

■フィールド付きRPG

素のNScripterではdraw命令に頼りまくる事になりそうだが、Luaを使うならパフォーマンス上も機能上も一応賄える。何なら30fps固定にしてしまえばSFC後期の演出も十分に再現できる。
本当にNScripterを使う必然性があるのか、今一度考え直してみてほしい。
あなたが大量の一枚絵を用意できる美術家なら話は別だが、そうでなければマップチップを理解することになる。 マップ上の1マス□を田と4分割して考え、自然な境界線を生成するために編み出された人類の遺産であり、これを用いてフィールドマップの海岸線を生成したりする。
ツクール2000あたりの解説サイトを参照した上で今一度考え直してみてほしい

■格闘ゲーム、RTS

RTSは簡単に拡大縮小できる3Dエンジン使った方がいいんじゃないかな 画面倍率固定を前提とするならば、こじんまりした作りのRTSなら比較的スムーズに作れると思う。 ユニットの大きさやエフェクトの数次第で60fps固定は怪しそうだが、是非遊んでみたい。

格ゲーのパフォーマンス事情は他と同じ(刺し合いゲーならオブジェクトも多くならないので、むしろ他ジャンルより楽かもしれない。コンボゲーはさすがに厳しい)。 さすがに格ゲーツクールという時代でもない(当時から微妙だったし)が、このジャンルは明らかにmugenと競合する。 しかもmugenはLuaを使っている。どうするよ?

■アクション、2Dシューティング

サイト内のライブラリ(NSLisichka)、素材のうち権利が僕に属するものは必要なら自由に使ってください。 ※そうでない素材・プラグインは配布元参照。  なお、現時点で自機グラフィック用に借りたMMDモデルは配布終了しているようです。

先回りしておくと、目指すところが東方クローンなら東方弾幕風あたりを使った方が早い。
3D演出(背景)を活用するならば3D機能を持ったエンジンが良い。
そうではないSTGを作ろうと思うならば、当然STGに対してそれなりの拘りがあるはず。競合ツールで痒い所に手が届かなければ、一から自作した方が幸せになる事も少なくない。 (「動かすだけなら簡単」と言われるジャンルであり、実際名作凡作を問わずフルスクラッチのSTGは多い。)

素のNScripterにおいては、非弾幕STGならばどうにかなるかもしれない。
弾幕STGとなると、計算・描画パフォーマンスの関係で素のNScripterには厳しくなってくる。
かつてサンプルを作った先人が存在するが、固定背景・極小敵でもフレームレートが危うい。

Luaを使うとどうなのか。60fpsターゲットならLua必須である
NSLuaの直接描画(高機能なblt命令と考えればよい、NScripterが有する中で最速の描画である)を使うことになる。 機能面では(他のエンジンでコードを書けるなら)全く問題ないが、パフォーマンスは許容範囲の下限スレスレとなる。

@ 640×480の画面領域をフルに使う
A 60fpsを基本とする(処理落ちを避ける)
B 最低環境(安いタブレット)まで動作環境に含める
この条件下では、初期スーファミ相当の演出でギリギリだと思った方がよい。 つまり全画面多重スクロール背景(背景や画面手前にかかる霧、網目越しに映る背景など)は諦めた方がよい。
NSDSpは(60fpsを視野に入れるなら)やや遅く、640×480サイズの透過背景を重ねるだけで60fps達成のための余裕はほとんどなくなる。 イベントシーンのみ30fpsにするなど涙ぐましい工夫を行うか、オプションでグラフィック設定を用意するか。
いずれにせよ2Dゲームの華である多重スクロールに弱いのは惜しい点である。 30fpsに絞る、そもそもの画面サイズを落とすなど妥協すればまったく余裕だが、解像度を落とすのもフレームレートを落とすのも相応に覚悟が要る行為。

なお、ここまでの話は640×480をフルに使うSTGを前提にしている。
「画面を更新せずに済む領域」が大きい縦STGの場合、話は全く異なる。
横9:縦16はピクセルに直すと270×480に相当し、この場合常に更新するべき領域は半分未満に抑えられる。

アクションゲームに関しても事情は似ている。 半透明エフェクトや多重スクロールはSTG以上に2Dの華であるため、目指す描画クオリティがどの程度であるか(そして実現する上で性能が足りるか)考える必要がある。 アクションゲームはPCにおいても多少の処理落ちまでなら許容されている節があり、その意味で神経質になる機会は減るかもしれない。

■3Dゲーム

ははっ

結局のところ

「2Dゲームは頑張れば全ジャンル作れるけど、60fpsターゲットなら重そうな描画に苦労するよ」が2017年時点でのパフォーマンスのライン。
あとは自分の習得済み技能と相談。
しかしモバイル向けゲームが台頭した昨今、相対的にPC向け用途で「ノベル以外(特に従来の操作性をタッチデバイスに移植できないジャンル)」をNScripterで作る必然性は高まっているのではないでしょうか。
さあみんなも彫刻刀でパンを削ろう。

ガラスグサに戻る