フワフワソが「ソラとピヨちゃん」や「宮本県」を作るブログ(フワフワソ・ラウンジnew!)

ラノベとテクノを愛するふわふわがノベルゲームを作っています。あと日常のことやイベントの告知なども。スクリプト関連の記事は自分用の備忘録です

Nscripterとairnovelの違いとは?AIRNOVEL技術を高速習得ーその6

記事 第1回~5回

NscripterからAIRNOVELに移植する技術を高速で習得する - フワフワソ・ラウンジ(NEW!)

NscripterからAIRNOVELに移植する技術を高速で習得するーその2 - フワフワソ・ラウンジ(NEW!)

*勉強会の資料も紹介*NscripterからAIRNOVELに移植を高速習得ーその3 - フワフワソ・ラウンジ(NEW!)

クラウドファンディング御礼と、AIRNOVEL技術を高速習得ーその4 - フワフワソ・ラウンジ(NEW!)

 AIRNOVEL技術を高速習得ーその5 - フワフワソ・ラウンジ(NEW!)

 

●自分用宿題

さてこれからアイテム用のボタンを作るぞーっと意気込んで、常駐ボタンを作るために読んでおきたい自分用の宿題をまとめました。

 

ボタンは選択に関わるので選択の基本

AIRNovelをさわろう! 選択肢を扱う

ボタンについて

AIRNovelをさわろう! ボタンを使用する

AIRNovelをさわろう! コントロールボタンを作る

AIRNovelをさわろう! ボタンいろいろ

AIRNovelをさわろう! 複数の文字レイヤを扱う

選択には変数が必須なので、変数関連

AIRNovelをさわろう! 変数操作

AIRNovelをさわろう! 変数に代入、変数参照

AIRNovelをさわろう! 変数の値を確認する

AIRNovelをさわろう! &計算

 

だいたいこのへんを勉強すればボタンが作れるようになる気がしています。(まだ勉強してない)

さてその前に。

 

●オリジナルの素材を使ってみる

前回の記事でフォルダの構造とかが分かったので、

試しに自分の素材をAIRNOVELに放り込んで、サンプルゲームのスクリプトで動かしてみることにしました。

とりあえず何も考えずにタイトル画面の画像を入れ替えてみました。

位置が全然合ってないですが、ちゃんと表示されました。

f:id:fuwafuwaso:20151115141322p:plain

その流れで、anbookesの表記も直しました。

サンプルゲームの「空を飛べたら」の右上の「編集」のところクリックして、タイトルとか著作者とか書き換えました。

まるで完成したみたいですね!でもこの時点では中身はまだ「空を飛べたら」です。

f:id:fuwafuwaso:20151115141412p:plain

↓ちなみにアイコンの画像は、このicon.jpgを入れ替えてピヨちゃんにしました。

 画像のサイズは適当でしたが、anbooksが勝手に縮小してくれました。

f:id:fuwafuwaso:20151115141424p:plain

さて、BGMもオリジナルのファイルに入れ替えてみたのですが、問題発生。

音が鳴らないのです!

Nスクoggファイルだったので、そのoggファイルをairnovelのフォルダに入れて、main.anの     ; *** タイトル開始共通処理 *** という箇所のBGMのファイル名を書き換えてみたのですが・・。

鳴りません! 動作ログでエラーも出てます。

おかしい・・airnovelはoggに対応したはずなのに・・。

などと思いつつ公式サイトを見てると、こんなのを発見

電子演劇部 ANOggo:ogg/oggo再生とoggo生成ツール

ウインドウに放り込むだけのお手軽ツールなので、やってみました。

これでできたoggoファイルを使ってみると、ちゃんと音が出ました。

 

公式サイトにogg対応と書いてるのになぜなのか?

質問してみました。

 

フワフワソ

夕街さんたびたびすみません・・oggファイルが鳴らないのですが、type error:error #1034 というのが出ます。年初のブログを見ると、ひょっとしてoggo に変換しないとダメなんでしょうか? ANoggoで変換したら鳴りました。oggのままはまだ非対応だったのでしょうか?

夕街さん
oggそのものは再生できるのですが、一部エラーになる物があるようです……。数分の長さのoggだと再生開始までに時間が掛かるようなので、内部的にoggoという中間形式を採用しています。(だからビルドで自動生成しているわけです)
oggをフォルダに置き、ANBooksでビルド環境を整えてビルドすると、oggo に自動変換するようになってます。それまでは手動変換か、後々暗号化不要ならm4aというファイル形式もオススメです。

ANOggoで「【Only Play】oggo ファイルを生成せず、ogg / oggo ファイルを再生するだけ」というのがあります。つまり技術的にoggを再生できているわけです。

フワフワソ

なるほど・・うちのがその一部エラーになるやつに引っかかってたんですね。

 

というわけで、oggには普通に対応してます。(内部的には、ビルドのときに自動でoggoに変換される)

しかし、ビルド前のテストプレイのときoggでエラー出る人は、ANOggoでoggoに変換したファイルを使えばいい。

というのが分かりました。

(ちなみにANOggoで変換すると、変換元の「~.ogg」と同一フォルダに「~.oggo」ファイルができます。AIRNOVELは拡張子でファイル名を区別しておらず、しかも同じファイル名のファイルが2個あるとエラーが出るので、「~.ogg」と「~.oggo」を同一ファイルとみなしてエラーが出ます。変換前の「~.ogg」は消すか、ゲームフォルダの外に移動させましょう)

 

余談ですが、なぜoggか?というと、mp3は権利関係のめんどくささがあるらしく、Nスクではほとんどoggしかサポートしていない状態でした。なので、Nスクからの移植をしようとすると、手持ちの素材がoggになってるのです。

新規でゲーム作ろうという人は、評判とかを調べて、お好みの形式の音楽ファイルを使えばいいと思います。

 

●レイヤーの重なり順を調べる

さて次は、立ち絵を表示したり、いよいよ常駐ボタンを作る作業に入ろうかと思いました。

過去記事で触れたように、絵やボタンはlayerに表示されます。

layerの重なり順が絵の重なり順になるので、どのlayerにどの絵を表示させるか把握しないといけません。

layerの重なり順は、add_layでlayerを定義した順番になります。

 

そこで、サンプルゲームのスクリプトを調べて、どんな名前のlayerをどんな順番で定義してるのか調べようとしました。

まずはmain.anを調べます。main.anは一番最初に参照されるスクリプトファイルだからです。なぜ一番最初なのかというと、

↓ここで設定されてるからだと思います。ウインドウ右上の「編集」を押したときに出てくる画面

f:id:fuwafuwaso:20151116120243p:plain

 (ウインドウの大きさなんかもここでいじれるみたいですね・・)

 

というわけで、main.anを見てみました。

layerを定義する命令の「add_lay」を探します。

f:id:fuwafuwaso:20151116120343p:plain

 まず1番目の丸つけたところ。ここで背景(base)、立ち絵3枚(0,1,2)、文字表示用(mes)、の5枚を定義してます。ここは分かりやすい。

そして2番目の丸の所。ここは後から分かったのですが、プラグイン(swf)の中で定義してます。swfファイルは中をのぞく技術力がないので、ノータッチです。

3番目の丸の所。ここはマクロを定義してるsub.anに飛んでます。sub.anの中でいくつかのlayerを定義して、sub.anを読み終えると、最後にreturnで戻ってきます。

続いて_yesno.anに飛んで、ここでもまたlayerを定義してます。

もうわけが分からなくなりつつありますが、結論から言うと、

 

①システムをカスタマイズするつもりがない人は、最初の丸の所だけいじればOK! です。→OKじゃなかった!追記あり

layerを増やしたければ、↓こんなふうにすればOKです。

 [add_lay layer=base class=grp]
    [add_lay layer=0 class=grp]
    [add_lay layer=1 class=grp]
    [add_lay layer=2 class=grp]

    [add_lay layer=3 class=grp]
    [add_lay layer=4 class=grp]
    [add_lay layer=mes class=txt]

(layer3,4を追加した)

 add_layの定義順でlayerの重なり順が決まるわけですから、システムのlayerはこの後に定義してるので、システム関連の画像(コンフィグ画面とかテキストウインドウとかセーブとか栞のボタンとか)は、立ち絵の上に来るようになっています。

(その理屈から言うと、シナリオのスクリプトsss_000.anは順番的に一番最後に読み込むので、シナリオの中でadd_layをやっちゃうと、システムのさらに上にlayerができちゃっておかしなことになりそう、とか思ったりしますが、検証してないのでよく分かりません。add_layはmain.anのこの場所でやるのが安全っぽいです)

追記

sub.anのところにこんな記述が!
; 表示されるレイヤ(セーブ・スナップショットなどの対象)
[let name="dsp_lays_grp" text="base,0,1,2"]    ; 画像

ここに増やしたレイヤー足さないといけないようですね!

[let name="dsp_lays_grp" text="base,0,1,2,3,4"]    ; 画像

って感じにするのかな?

 

②立ち絵のlayerが3枚あれば十分だという人は、どこもいじらなくてOK! 

(背景にlayer名 base を使い、立ち絵にlayer名 0,1,2 を使うというのを覚えてれば十分です)

③システムをカスタマイズしたいという人は?

 スクリプトを全部調べてlayerの順番を把握するのは大変ですね。
 そこでこれ!

f:id:fuwafuwaso:20151113050050p:plain

「右クリックで詳細モード」です。
前の記事で、右クリすると重いので、左クリック推奨!と何度も書いた部分ですが、ここで右クリです。
そして、開いた画面から、「レイヤ構造3D」っていうところを押します
↓すると・・!

f:id:fuwafuwaso:20151117030708p:plain

うおおお!なんじゃこりゃ!かっこいい。
マウスでぐりぐりっと回転出来ます。レイヤ名と、配置してある画像が3Dになって、重なり順が一目瞭然。
↓「レイヤ構造詳細」ってところを押すと、リストでも表示されます。
 レイヤの名前と種類がすぐに分かります。

f:id:fuwafuwaso:20151116124641p:plain

また、変数をチェック出来る項目もあるので、ゲームの進行状況で、「今この変数の中身どうなってるんだー」と気になったときには、これで調べればバッチリみたいですね。(まだ調べてないのでバッチリ!と断言はできませんが・・勉強しながら書いていくスタイルの記事なので、すべてがそんな視点なのをご了承ください)
 

 ちなみにsub.anのほうですが、add_layでいくつかのlayerを定義しているのですが、 add_layするより先にlay layerしてるlayerがあります。

フワフワソは非常に混乱しました。「layerはadd_layで定義してやらないと使えないはずなのに・・なぜ定義より先に、使う命令(lay layer)が来てるんだ?」「ひょっとしてもっと前のどこかでadd_layしてたのか?」

しかしいくら探しても見つかりません・・。

もうどうしようもないので夕街さんに助けを求めました。

 

フワフワソ

mes_sysmen と_syslay.mesは、add_layよりlay layerが先になってるように見えるんですが、順番は関係ないんでしょうか? ぼくの中ではスクリプトは書いた順番に機能するという思いがありまし て、lay layerの前にadd_layが見当たらなかったので、ひょっとしてもっと前にどこかで定義してるのではと思ったのです

夕街さん

必ず先に定義しているはずです〜

フワフワソ

たとえばmes_sysmenuなんですが、; マクロ システムメニュー表示切り替え でadd_layしてますが、直前にlay layerしてます。また、もっと前の ; マクロ システムメニュー描画処理 で、clear_layしてます。これはどう理解すればいいんでしょうか?

夕街さん
マクロを「定義」しても、まだ誰も「使って」ないからです

フワフワソ

なるほど!よくわかりました><;遅くにありがとうございました~~!

 

心で理解出来ました。

sub.anはマクロの「定義」なので、実行節のほうではまだ未使用、だから順番が逆になる書き方してもOKだったようですね。

なぜ夕街さんがそういう書き方したのかまでは理解が及びませんが・・。

自分でやるときには、add_layを先にやることにしようと思います。

自分で作ったアイテムアイコンの置き場所も目処がついてきました。sub.anのどこかに、マクロとして書いて置いて、必要に応じて使うようにすれば良さそうです。

 

また、他にも気になったことを聞きました。

フワフワソ

拡張子付きのレイヤ名は何らかの意味があるんでしょうか?("_syslay.mes"と"mes"など、拡張子部分と同じ名前のレイヤがあったりもするので)

夕街さん

レイヤ名はルール無用ですー 漢字や日本語でもイイです、算木文字とか妙な記号でなければ

「_syslay.mes」とかもテンプレを作る際に自分ルールで決めただけで、「システム系の」「文字レイヤ」ぐらいの意味です

 

上記のadd_layの順番の話と合わせて、sub.anの内容を分析してみたいという人には、なんらかのヒントになるかなと思います。
まとめですが、sub.anについてはマクロなので
訂正
(sub.anにマクロじゃない部分もありました!
 冒頭の
 ;*********************************************************
 ;    定数
 ;*********************************************************
 というところは見ておく必要がありそうです。
 効果音に使うファイルを定義したりしてます!)
sub.anの「マクロと書いてある部分」については、
システムをカスタマイズするという人以外は中身を理解する必要は全くなく、ノータッチでいいと思います。(全部理解しようと思うと、制作を投げ出すことにつながりそうです)
フワフワソはlayerの順番を知りたくて、必死に見ていました。記事では順番が前後しましたが、「レイヤ構造3D」や「レイヤ構造詳細」には後から気がついたのです。これを使えば、layerについてはあまり悩まなくて済みそうです。
 
 
●おおざっぱな感想。総論的な。
 Nscripterとairnovelの違いとは?
 
Nスクで *defineの定義節にあたるのが、airnovelの main.anと、sub.anのマクロじゃない部分
Nスクで *startの実行節にあたるのが、airnovelの ss_000.an
Nスクで デフォルトのシステムメニューにあたるのが、airnovelの sub.anのマクロ部分
(main.an、ss_000.an、sub.anはサンプルゲームのファイル名)
 
Nスクではデフォルトのシステムメニューは、基本的にユーザーがスクリプトを覗くこともいじることもできないようになってました。もっとかっこよくしたい!と思った場合には、同じ機能を持つサブルーチンをイチから自分で作る必要がありました。
それがいわゆるシステムカスタマイズというやつで、多くのサイトでソースが公開されていました。(たとえば、マウスホイールで文字送りというのもデフォルトでは未実装だし、アルバムの機能もありません。テキストウインドウに常駐してるセーブロードなどのボタンもないし、それらはカスタマイズで作る必要がありました)
 
airnovelの場合は、デフォルトで基本的なシステムメニューが一通り入ってます。アルバムもあるし、テキストウインドウのボタンも、ノベルゲームにおよそ必要と思われるものが全部あります。
しかもそれらはsub.anを覗くことで、自分でさらにカスタマイズすることもできます。
ここらへんはairnovelの親切なところでもあり、わかりにくいところでもあるかと思います。
Nスクはデフォルトのシステムに手を触れられないようにしてあることで、ある意味いじれる部分を切り捨てて少なくしたことで、初心者に優しくなっていたかと思います。
airnovelはサンプルゲームという形で、デフォルトのシステムをいろいろ提供しているので、それをそのまま使えば、初心者にも優しく、わりと見栄えのするゲームはできると思います。
ところが、デフォルトのシステムまで中身をのぞけるようになっているため、初心者が「sub.anも理解しなくちゃいけない」と考えると、魔界に迷い込んでしまい、制作を投げ出す可能性があるかと思います。(フワフワソがいちいち夕街さんに聞いてしまったように、sub.anのマクロ部分は初心者にすぐ分かるようなスクリプトになってないです)
初心者は、sub.anの「マクロ部分」はデフォルトの機能を作ってる部分だからノータッチ!というくらいの割り切りでいいかと思います。
 
中級者くらいで、サイトで公開されているマクロを追加したい、となったときに、sub.anやmain.anの任意のところにコピペで追加したりという感じで、sub.anに手を付ければいいかと思います。また、画面サイズやウインドウの位置を変えたいとなったときに、sub.anの、画面やウインドウ関連のxy座標を意味してると思われるところの数字を変更してみたり・・。
 
というわけで、初心者は main.anとss_000.an、あとsub.anの「定数」部分に専念することで、Nスクと同じようにゲームを作れる、というのを自分なりの結論にしようかと思います。
(自分はややこしいところに手を出し、カスタマイズのボタンを作ろうとしているわけですが・・)
 ↑
sub.anが全部マクロだと思ってたら、マクロじゃない「定数」という部分もあったので、若干記事訂正しました。