今のところ、ある程度触れるのはNScripter、吉里吉里くらいです。それ以外はろくに触ったことないです。だから仕様とかマニュアルをざっと読んでみた、あくまで印象です。
Airnovelも触ってみましたが、どうにも更新で失敗しやすくて苦手意識を持ちました。FLASHで作ったゲーム部分の流用は、プラグインにしないとダメでした。
ミニゲームを考えなければ、動きのあるノベルが比較的楽に作れます。プラグインが存在し、欲しい機能がなければActionScriptでゴリゴリ書く必要があります。
但し、FLASHはブラウザでの表示は今後できなくなるようです。
2016年現在では、Ren’Pyとティラノスクリプトを触っています。どちらもクロスプラットフォームで、甲乙つけがたいくらい魅力的です。
AirnovelやCatsystem2なんかもすごく良さそう。メッセージレイヤ複数使えるし、画像動かすの楽そう。ただこれらはユーザーに何か入力を求めるときに、面倒そうだ。主人公の名前だとか、数値の入力だとか。その命令について触れていない……と思う。
特にCatsysyem2とかNSCに記述が似てて、鬼デキる。GUIがちょっと使える。でもちょっと様子見。
Yurisは商業だし、デフォルトで使える機能は多い。MIDIが使えないのが、個人的には残念だが問題ない。デフォルト以外の処理は難しそう。
LiveMakerにも手を出したけど、残念な脳みそと根性がなかったため、シネマが使えませんでした。メッセージレイヤーが複数使えればよかった。あと大したことしてなくても、容量がでかいのが嫌。画像の独自形式も実は嫌。
更にOSの互換性は吉里吉里・NSCの方が安定して動く。あくまで私の環境では、だけど。
Ren’Py推し
はっきり言って、Ren’Pyはほとんど完成形だったと思う。バックログがなくて、巻き戻しという時点で新しい。従来システムに慣れていると取っつきにくい。
その代り、デフォルトシステムでほぼ何もしなくていい。ギャラリーはサンプルはあれど、自作せねばならないが。
問題としては本家が英語であり、日本語wikiのみに頼らざるを得ない点と、複雑なことをしたくてもチュートリアル以外のサンプルが見つけられない点。Pythonが直接書けるのはいいことだけどね。
Ren’Py内部で使用中のライブラリがPy2SDL移行中であるため、現在のRen’Pyではpygameとの互換性が薄い。
尤も、普通のノベルを作るにあたっては何の問題もない。演出面でも色々できる。
PC、Android版は全部ビルド可能だが、iOS版はxcodeを利用するため、Macを持っていないとビルドできないことに注意。
ティラノスクリプトも推し
ティラノスクリプトはHTMLで作られているために、本気で全てのプラットフォームに対応している。
とは言え、ブラウザ間の問題がない訳ではなく、CHROMEでプレイすることを推奨したい。不具合がない訳ではないが対応が早いため、今後も期待できる。
有料版GUIのティラノビルダーもあるが、あれはスクリプトに慣れた人には辛い。初心者向きです。
javascriptやjqueryの知識があれば、どんな難しいこともできる。万能だが、パフォーマンスについては未知数。
ツール変遷
ゲームスクリプトを始めたのはRPGツクール2000から。どうしてもクリアできないRPGをいじったのがきっかけだったかな。うん、反則はダメなんだけど。
次にNSCに移って、カスタマイズで投げて、吉里吉里をいじったりした。HTMLライクなところがいいのだが、複雑なことをしたくなるとTJSを使う羽目になった。
しばらくTJSかじって、オブジェクトが作れるようになった。プラグインはまだ上手くできない。マクロなら余裕。吉里吉里を学んだ後は、NSCが恐ろしく簡単に見えてきた。
この二つを触ったお陰で色々と見えてきた。できることは概ね同じ。
吉里吉里はメッセージレイヤが複数使えるが、NSCは1つだけ。(Lua使えばいけるだろうけど)以前スプライトで無理矢理メッセージレイヤーもどきを作ったことがあるが、結局使ってない。
NSCはLua処理を抜くと、基本的に単一処理だけど、吉里吉里は並列処理ができる。
また文字を表示しつつ、画像を動かす際にも吉里吉里がデフォルトで対応していた。吉里吉里はプラグインも多い。Susie使える。と言うか何でも使えそう。
こう言うと万能だけど、吉里吉里はトランジションさえ面倒なのさ。いちいち表とか裏とか考えないと駄目だし、レイヤー単位のトランジションはすっごい限られている。裏が非表示の、レイヤーごとのトランジションとかできません。不透明度0にすればいけるのかな?
でもメモリを喰うので、素直にBacklayとベースレイヤーのトランジションが無難でした。
だからNSCの方が覚えることが少ない意味で簡単です。
NSCもプラグインあるけどね。Susie使えるし。システムカスタマイズは……多分NSCの方が面倒臭い。整数しか使えないのだよ……。
吉里吉里はプログラミング慣れている人なら、関数だのクラスだのすぐに使える。
NSCはそういった意味ではかなり不自由で、工夫する必要がある。あどばんすどガイド本がないと、難しいだろう。
ちなみにLuaが使えるなら、NSCはLuaでほとんどやればいいと思う。乗っ取りができるそうなので。あれ、でもNSCでやる意味あんのかソレ?
カスタマイズは覚悟
フラグが多くて面倒臭いことするなら吉里吉里、ただの読み進める感じのノベルならNscripterで楽ができるのかなーと思います。
文系が真剣にカスタマイズしようとすると、きっと死にます。理解できる人はいいなあ。システムカスタマイズは凝ると死ぬ。ただ最近のNSはLuaを使える様になったので、できることが増えた分、煩雑さも増しました。もう吉里吉里と変わらないかもしれない。
純正のNSのデフォルト機能のみという制限を設けて、初めて初心者が使えるようなLVです。
どっかの偉い人が言っていた。「ゲーム制作にかかる労力と時間を度外視してはいけない。スクリプトエンジンの存在意義はゲーム作りにかかる負担を減らすこと」 だと。TJS言語で組むくらいなら、まだC言語の方がいいと言う人もいる。
確かに吉里吉里の場合TJSならKAG、NSならNscripterよりLuaの方が速い。けれどもスクリプトは一朝一夕で組めるものじゃない。予想外のエラーは当たり前で、簡単なもの以外は余程テストを重ねないと使い物にならないというのが本音。
今回エンジン本体だけでなく、テキストエディタとプラグインや素材、勉強サイトに助けられました。本当に皆様に感謝しています。なければ続けられなかった。
マニュアルに記載されている様に、通常にない機能が欲しい時、純正の機能だけだと人間の作業能率が著しく悪い時に使った方がいい。(繰り返しの処理がある時とか)
シナリオは分けろ
シナリオが複雑になる前に、断片ごとにシナリオファイルを分けておくことをお勧めする。バーをスクロールして、いちいちラベルを探すのが面倒で。
連番のありがたみ
連番で管理すると、スクリプト上で楽ができることもあった。まあ、分かりやすい名前をつけるのも必要でしたー。関数やマクロを活用しろと言うのが、身に染みて分かりました。
構造体って何? 食べれるの?
これは経験で分かったことなんですが……。何かのパラメーターを一括で管理したいとき、構造体(多分、変数とか関数をまとめたもの)で管理したろーとか思ったのですが、……まず関数とかクラスそのものが理解できませんでしたね。
変数代入とか、計算とか、繰り返し処理とか、そ-ゆーのなら分かったんですけど。実際何かやるぞ、となったとき、何をどうしたらいいのかすら、よく分からんかったです。
配列の中に配列とか、辞書配列の中に辞書配列は使えるのか、とか凄い初心者でした。使えるんですね……。変数自体が辞書だから、マニュアルに書いてある辞書配列とは、辞書の辞書ということだ。ビジュアルで表すなら、きっとファイラーのディレクトリみてーなものだと認識しました。
その後、関数が何たるかをあらゆる勉強サイトから学び、要するに処理をまとめたサブルーチンですね、という結論に行き着く。クラス内だとメソッドとか呼ぶらしい。
プロパティ
プロパティは未だによく分からん。関数と何が違うのって感じで。関数よりももっと簡単な記述しか使わないときに使う、かな? ぶっちゃけクラス内でしか威力を発揮しない。
代入値を選り分けるくらいかなー。あんまり長く処理を書くものじゃないのか。変数は代入値を拒むことができない。プロパティは変数代わりに使えるが、条件付けで代入を拒むことができる。
クラス? 学校の組み分けですか?
クラス。コイツが一番の意味不明だった。「宇宙人語ですか、コノヤロー!」と何度泣いたことか。
今のところ、クラスはレシピとか型紙という認識。自動車に例える本もあった。部品がどーのこーので組み立てるとか。当時の私の脳ミソじゃ理解できなかったぞ、コンチキショー。
クラスとは作品を作るための規格である。オブジェクトが作品。作品を形作る部品こそ、関数だの変数だのといったもの。
ここまで理解するのに、えらいかかった。でも根性で一年くらい使って、やっと覚えました。
クラス内の関数は、オブジェクトを作らないとアクセスできないことを覚えた。アクセス方法は、辞書配列みたいだった。時間の管理とか、訪問回数の管理とかはオブジェクト作りました。
私が初めて本格的にいじったスクリプトがTJSでした。故にプログラミングでは当たり前のことを、普通に知りません。セーブ&ロードに対応させたはずのオブジェクトを読み込まない事態がありました。よく分かんないから、適当にプラグインクラスを継承させて、fの変数に入れておけば、間違いないと踏んでいたのですが。
あと正規表現は難しいですが、理解すると、ものすごく便利です。慣れないと書換え作業が頻繁に起こりますが、これを使うと軽減されます。パターン置き換え、気難しいけど愛してる。
最初からPLAYと、ロードしてのPLAYでは明らかに違ったので、コードを見直してみました。するとオブジェクトを初回時にしか作ってなかった。確かに変数は保存したけど、読み出しができてない。と言うかバグる。ない器に保存した変数を入れることは不可能。ゲーム起動時にオブジェクトを作る必要があった。
オブジェクトを、吉里吉里を起動する度に作る必要があるとか知りませんでした。
これからスクリプトに携わろうとする人、覚悟して挑んで下さい。そんな勇者の助けになりたいので、スクリプトは自由に参照して構いません。但し、まんまパクらないで下さい。すごい汚いから、いないと思うが。