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

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

画像操作やクロスフェードの話。AIRNOVEL技術を高速習得-その7

記事 第1回~6回

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

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

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

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

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

Nscripterとairnovelの違いとは?AIRNOVEL技術を高速習得ーその6 - フワフワソ・ラウンジ(NEW!)

 

前記事、初心者はsub.anはいじらなくてOK!と一度書いたのですが、よく見たらsub.anの「定数」というところも見て置いた方が良さそうなので、訂正しました。

(クリックの効果音とか、スクリーンショットの対象レイヤとか決めてる。それも変えなくてもいいという人は見なくてもOKです)

 

●作業中の罠

属性「 」は異常です

というエラーが出る問題。原因は、全角空白。

タグ[ ]の中に全角空白が入ってるとエラーが出ます。タグの中で受け付けるのは半角空白のみ!

(全角を受け付けたりするときもあるが、いつか必ずエラーにつながるのでダメ)

対策:テキストエディタの設定で、全角空白を見えるようにしておく。

(meryだと、表示→記号のところから設定)

つまらないところでつまずいてしまったら悲しいので要注意です。

ここをよく読んでおくとよいのかも

http://famibee.web.fc2.com/tag_dev/dev.htm#f_and_g4pro

 

 *** fn: line:0(UncaughtErr)【Error】TypeError: Error #1009

というエラーが山のように出てanbooksがフリーズする問題。

長時間anbooksを起動したままテストプレイを繰り返してたら発生。anbooks再起動で解決したものの、原因が分からず、夕街さんに問い合わせ。

夕街さん

オーバーフローかもです、再起動でお願いいたします。ビルド版では起こっていません

フワフワソ

ありがとうございます!スクリプトに問題があったわけじゃなさそうですね^q^

ビルド版で起こらないというので問題なさそうです。

ちなみに数日くらいanbooks立ち上げたまま、スクリプト修正→テストプレイ繰り返してたかもしれません。同じエラーが出た場合は参考までに。

 

 

f:id:fuwafuwaso:20151121135425j:plain

  (開発中画面。とりあえずアイテムボタンまで実装。「栞を挟む」ボタンが、アイテムボタンの代用)

 

●改造のときのヒントというか自分用メモ

*レイヤーの追加について

 ・立ち絵同時表示3人より増やしたいとき→main.anの冒頭をいじる。

  だけで済まない。sub.anで「; 表示されるレイヤ(セーブ・スナップショットなどの対象)」のところなどもいじらなきゃいけない。

  ; マクロ 場面転換 [macro name="grp"]のところも、[img layer= を追加しておく。(場面転換のときに画像消さなくていいというときは、追加しなくていい)

([grp]だと、立ち絵レイヤ0,1,2と背景も含めた画面全体を出したり消したりできる。[grp]で操作する立ち絵レイヤをもっと増やしたいときはsub.anの該当場所をいじる。; レイヤ切り替え・メインの[img layer=0 となってるところを、コピペで増やして[img layer=3  [img layer=4 みたいに追加する)

 

・文字ウインドウ(つまりボタン用)を増やすとき→main.anの冒頭をいじる。

  だけでは済まない。sub.anで「; 表示されるレイヤ(セーブ・スナップショットなどの対象)」のところなどもいじらなきゃいけない。

 ; マクロ 場面転換 [macro name="grp"]の中に、増やしたボタンレイヤを消す命令clear_lay入れておくと、[grp]で場面転換するときに一緒にボタンが消える。

(場面転換でボタンを消したくないときは[grp]の中はいじらず、以下のようにすると、タイトル画面に戻るときだけボタンが消える。

 *title_sys の[grp bg="black" sys_menu=false b_alpha=0]の前あたりに、増やしたボタンレイヤを消す命令clear_lay入れておく。つまり、タイトルに戻るときにボタンを消す。

  同様に、ss_000.anでタイトルに戻る部分の、[grp bg="white" time=2000 sys_menu=false]の前あたりに、増やしたボタンレイヤを消す命令clear_lay入れておく)

 

grpやルール画像について

grpでルール画像が使える
[grp bg="背景画像" rule="ルール画像" time=変化させる時間]

grpはタグじゃなくマクロなので、マクロリファレンスを見る

マクロリファレンスに、ルール画像についての言及はないように見える。(記述漏れ?)

 ・ルール画像はNスクのように.bmpは使えない。

また、小さいルール画像をタイル状に埋め尽くしてもくれないので、最初から埋め尽くした画像を使うor作る

・ルール画像の指定がないと、普通にフェードインになる

   [grp bg="背景画像" time=変化させる時間]

 

*音楽の指定

    [bgm fn="音楽ファイル名" time=クロスフェードにかける時間(省略で0)]

 これもマクロリファレンスを参照。

 しかしこのマクロ[bgm]は、一般的なクロスフェード(フェードアウトしつつフェードイン)ではなく、前の曲のフェードアウトを終えてから、次の曲をスタートさせる仕様。つまり、再生用のトラックが一個しかない。クロスフェード大好きなフワフワソにとっては、ちょっと使いづらかった。

 何とかクロスフェード出来ないかと、SEのトラックをBGM用にしたりじたばたしてたのですが、そうこうしている間に、夕街さんがAIRNOVELをアップデートしてくださいました。

電子演劇部 【23:55更新】AIRNovel&ANBooks更新:厳密なBGMクロスフェード

 これによって、曲同士が重なり合いながら変化するというクロスフェードが可能になります。夕街さんありがとうございます!

 (delay=を指定することによって、次曲の始まるタイミングを遅らせることもできるので、たとえば、[bgm fn=曲名 time=500 delay=500]のように指定すれば、以前と同様の、「前の曲のフェードアウトを終えてから、次の曲をスタートさせる」という再生方法もできます。また現状、time=の記述を省略すると再生出来ない不具合もあるようですが、そのうち修正されるかと思います。対策としては、time=0で指定すればOK)

*フワフワソ流クロスフェードの使い方

 ソラとピヨちゃんでは、DJのプレイスタイルを真似た手法を使っています。

・雑踏の音など、自然音型のBGM→クロスフェードに10秒くらいかけて(time=10000)→次の曲

 これによって、雑踏の音の中からだんだん音楽が立ち上がってくるような効果が得られます。アニメのクライマックスとかで、ドラマが進行しながらだんだんエンディングテーマがかぶさってくる手法、かっこいいですよね。イメージとしてはあんな感じです。ここぞというところでは、20秒とか30秒とかかけてもいいかもしれません。

・リズムがないアンビエント系のBGM→クロスフェードに時間をかけて→リズムのある曲

 これもいい感じです。

 リズムがないBGM(or自然音系のBGM)と、リズムのあるBGMは、時間をかけたクロスフェードがうまく合います。

・リズムのあるBGM→クロスフェードは素早く(time=200とか500とか)→リズムのある曲

 リズムのある曲同士をつなぐときには、重なった部分でリズムのばらつきが汚くなるので、素早くクロスフェードさせます。

 

*音楽ファイルの形式について

せっかくのogg対応でしたが、どうもうちの環境ではうまく動きません。過去記事に書いたようにoggoならちゃんと動くと思っていましたが、フェードインが働かないのです。また、再生時にプチノイズが入る現象もあり、フワフワソはファイルをmp3に変換して使用しています。

ちなみにmp3を使う場合、mp3のライセンスは、ゲーム組み込みのときに5000部売れたら2500ドル=30万円くらい

mp3licensing.jp | よくあるご質問 | 開発者・メーカー用

mp3licensing.jp | ライセンス実施料 | ゲーム

m4aの場合、ライセンス料は無料のようです。

↓「AACには使用料がかかりますか」のところ

http://www.vialicensing.jp/licensing/aac-faq.aspx

現状では、airnovelはm4aをビルドのとき暗号化出来ないのですが、airnovelは今後m4aを研究していく方向のようです。

なのでフワフワソは当面mp3を使うことにすることにしました。m4aの本格対応を待ちたいと思います。

 

*立ち絵の指定、[fg]タグについて

[fg]はマクロリファレンスに解説がない。

[fg fn="画像名" layer=レイヤ名 pos=l rule="ルール画像" time=変化時間]

ルール画像も指定出来る。(timeでルール効果の時間書かないとだめ。書かないと一瞬で表示されて、ルールが適用されないので)

posについてはタグ[layer]のところ参照。表示位置に関連した命令

[fg]は、全体としては[grp]と似たようなものか

AIRNovel 機能ギャラリー

「立ち絵を簡単に扱う」のところの[fg2]も参考

 

 *複数の画像の同時操作

[fg]だと複数の画像の同時操作がよくわからないので、自分でタグ打った。

  ↓

複数のレイヤの画像を同時にいじる方法。

[trans]で ” ” の中で , で区切れば複数のレイヤを指定出来る。ボタンのレイヤも指定出来るので、立ち絵とボタンを同時に出したりもできる。

 

・ルール画像を適用しつつ、レイヤ5と6の画像を同時に出す

[lay layer=5  fn="画像1" visible=true page=back]
[lay layer=6 fn="画像2"  top=300 left=500 visible=true page=back join=true]
[trans layer="5,6" rule="ルール画像" time=変化時間]
[wt]

(「 rule="ルール画像"」を書かなければ、普通にフェードになる)

(top=300 left=500は、表示位置の指定。指定なしだと、画像1と画像2が同じ場所に表示されるので)

 

・ルール画像を適用しつつ、レイヤ5と6の画像を同時に消す

[clear_lay layer=5 page=back]
[clear_lay layer=6 page=back]
[trans layer="5,6" rule="ルール画像" time=変化時間]
[wt]

 

・レイヤ5と6を同時に消す。ルール画像なし

 [clear_lay layer="5,6" page=both]

>clear_layの場合は、レイヤ名(半角カンマ区切りで複数レイヤを指定可能)

transとclear_layが複数レイヤを処理できるみたいだけど、たいていのlayに関する命令は、一つのレイヤだけを対象としてる。

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が全部マクロだと思ってたら、マクロじゃない「定数」という部分もあったので、若干記事訂正しました。

AIRNOVEL技術を高速習得ーその5

自分がはじめてNスクでゲームを作るときには、検索しまくって多くのサイトを参考にさせていただきました。そのときの経験を元に、こんなことをつぶやいたら、さっそくさんから「頼りにしてます」とのお言葉をいただいて、モチベが上がりましたフワフワソです。

自分で勉強しながらのメモ的な記事なので、正確さ等は 保証対象外ですが、何らかの参考になれましたら幸いです。

 

 記事 第1回~4回

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

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

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

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

 

●AIRNOVELを実際にいじくる手順

f:id:fuwafuwaso:20151114191438p:plain

何をするにも、このanbooksのウインドウから行います。

「最初から読む」を左クリックでゲームのテストプレイができるのは前回記事で書きました。(右クリックだと詳細モードになってすごく重い)

そしてスクリプトや素材などが入った、ゲームの中身のフォルダをいじくるには、「桜の樹の下には」と書いてあるところをクリックします。(実際にはそれぞれのゲームタイトルになるでしょうが)

なんか右にアイコンっぽいのがありますが、それとは関係なく、「桜の樹の下には」の行を押せばフォルダが開きます。

↓開いたフォルダの中身がこれ。最終的には、これらを全部合体させて暗号化してゲームのファイルにするのかと思います。(その作業もanbooksがやってくれるはず?)

f:id:fuwafuwaso:20151114192152p:plain
制作風景としては、

1)anbooksを起動して

2)「桜の樹の下には」のところをクリックしてゲームの中身のフォルダを開いて

3)フォルダの中にあるスクリプト拡張子.anのファイル)をテキストエディタで開いていじくって

4)画像とか音楽の素材フォルダに、オリジナルの素材を追加して

5)「最初から読む」でテストプレイ

この繰り返しになるかと思います。

要するにanbooksのクリックすべき場所は、上記の2カ所。

押せるところいっぱいありますが、当分は2カ所を覚えてればいいのかなと思います。

 

*フォルダの中身を見て気付いた点

workフォルダに夕街さんがサンプルゲームの画像を制作したときのpsdファイルが入ってる。コンフィグ画面のカスタマイズはフォトショップでこれをいじればOK! →configフォルダの_config.jpgを自作のものに差し替える

scenarioフォルダにスクリプトのファイルが3つ入ってる

  ss_000.an シナリオ。ここをもっぱらいじくる。(シナリオが増えたら  ss_001.an、ss_002.anみたいにファイルを増やしていく) 

  sub.an マクロとかの定義(文字ウインドウの設定なども)

  main.an 一番最初に参照するスタート地点。

scenarioフォルダにテキストウインドウの背景画像が入ってる。

  wafuu1.pngとwafuu1w.png(「空を飛べたら」の場合、hakkou1.png

  これを自作の画像と差し替えればよい。

menuフォルダにタイトル画面のjpgとボタンのjpgが入ってる

 (タイトル画面など、このjpgを自作に差し替えればOK)

  その他入ってるもの

  _submenu.an(右クリックのサブメニューのスクリプト

  _submenu.png(右クリックのサブメニューの背景)

systemフォルダにシステム関係のいろいろな.anファイルが入ってる

  改造のためのコメントがついてるが、とりあえず触らない方がよさげ?

ruleフォルダにいわゆるrule画像が入ってる。

  画面切り替えの時の効果を変えられるアレ。素材配布サイトなどからお借りして、効果を増やすと吉。

縦サンプル「桜の樹の下には」と横サンプル「空を飛べたら」の違い

 夕街さんのサンプル「桜の樹の下には」をベースに、黒柴亭さんが横バージョンにしたサンプルが「空を飛べたら」。

 スクリプトの違いを見ることで、他者がサンプルを改造するときの手の付け所が分かるのでは? と思って双方を見比べる。

 後で聞いたところ、「桜の樹の下には」も「空を飛べたら」も、スクリプトは夕街さんが書いたとのこと。(黒柴亭さんが担当したのは、シナリオのみ)

 ↓見比べた結果

*双方とも基本的な機能に絞ってるので、スクリプトにあまり違いはなかった。
 フォルダの構造も一緒。

 単純に、「桜の樹の下には」を横書きに直した基本フォーマットが「空を飛べたら」と考えていいかも。

*システムの見た目の違いである「コンフィグ画面やテキストウインドウの画像など」は、フォルダの中にある画像の差し替えで行ってる

*テキストの縦表示or横表示は、sub.anでマクロを定義し、ss_000.anで呼び出して実行.。

ss_000.anで

; *** テキストレイヤ縦書き中設定 ***

  [txt_lay_v_center b_alpha=0 fcol=0x000000]

などとなってるところを

; *** テキストレイヤ横書きWide下設定 ***
[txt_lay_h_bottom_wide]

 に差し替えで横にしてる。

[txt_lay_h_bottom_wide]については、「桜の樹の下には」のsub.anで最初から横書き用のマクロ定義がされてるので、「空を飛べたら」ではそれを使ってる。sub.anをいじれば自分で表示位置を調整できる。(のちほど詳しく触れます)

*テキストウインドウにくっついてる「設定」や「栞」などのボタン位置も、sub.anで設定する。

; マクロ システムメニュー描画処理

以降に書いてある部分で、ボタンの位置や向きを調整。

桜の樹の下には」では、 rotation=-90という命令でボタンを90度回転させて表示させてる。 left=&sysmenu_left2というのも続けて書いてあるが、よくわからない。「空を飛べたら」には書いてない。

ボタン画像のファイル名共通の接頭語「Mnu」で検索するとボタン画像に関係する命令の箇所が分かる。

 

 ↓

【フワフワソの目標】

画面サイズをHD比率にしたかったり、テキストウインドウの大きさを変えたかったりするので、上記を理解する必要がある。

オリジナルゲームを作るとき、画面サイズもテキストウインドウの大きさも「空を飛べたら」と同じでいいよーっていう人はウインドウやボタンの画像差し替えくらいでよいかも?

「システムの見た目はオリジナルじゃなくていい!中身で勝負だ!」という人は、最低限、コンフィグの画像を差し替えればOK。「空を飛べたら」のままだと、天狗の画像になってしまう。(「桜の樹の下には」では水芭蕉の画像)

↓この画像を差し替える。色々重なってるように見えて、これが一枚のjpg。
 (この画像を作るためのpsdファイルもworkフォルダに入ってる)

f:id:fuwafuwaso:20151113152116j:plain

 

というわけで、画面サイズのカスタマイズをどうやればいいのかはだいだい理解出来ました。sub.anのマクロの、ボタンや文字表示に関連するところの、x座標y座標の数字を変更すればいいのです。

ここは問題なくできそうな予感がするので、実際の作業は後回しにすることにします。

 

↓うちの場合、一番重要なのがこれです

 【フワフワソの目標2】

取り調べ用システム用に、アイテムアイコンを画面上に多数配置したい。

「画面上のアイテムアイコンを押す→アイテムの内容の拡大画像表示」をやりたい。

イメージとしては、アルバム画面の挙動が似てるかと思われるが、アルバム画面とは違い、同時にテキストの読み進めもできるようにしたい。

なので、アルバム画面よりは、テキストウインドウにくっついてる「栞や設定、セーブロードなどの常駐ボタン」に仕組みが似てる。

というわけで、そのあたりのスクリプトを参照して改造することにする。

具体的にはsub.anの

; マクロ システムメニュー描画処理

というところが常駐ボタンの設定なので、公式サイトのタグ辞典を見ながら、どのタグがどんなことやってるのか、読み解いていくことにする。

ここが喫緊の課題。


; マクロ システムメニュー描画処理の読み解きを始めた結果

 いきなりつまずきました。意味が分からない!

 [let name=l text=%l|0]

 let name=l text=  ここまでは分かります。変数lにtext=以降に書いてあることを代入しろという意味です。

 しかしその後の %l|0 は? 本家サイトや瀬戸様のサイトを必死で見てたらなんとなくは分かりましたが、なぜそうなるのかがわかりません。ひどくぼんやりしてます。
 他のマクロを見ていると、似ているのを見つけました。

 [let name=l text=%l|40]
 これは変数lに40を入れろという命令です。
 そしてその変数lの40が、テキスト表示のY座標として使用されています。

 ここでフワフワソは理解を諦め、「そういうものなんだ」と把握することにしました。これはつまり、電気釜の仕組みは分からないが、どう操作すればご飯が炊けるかは分かる、という方向です。[let name=l text=%l|0]の細部の意味は分からないけど、lに0を代入してるタグである。[let name=l text=%l|40]と書けば、lに40を代入するタグになる。そういうことです。

 その理解でホントにいいのか確認したかったのと、他にも疑問点があったので、夕街さんに質問してみました。

 

フワフワソ

桜の樹と空を飛べたらのsub.anを見比べています。

「空を飛べたら」の
; マクロ システムメニュー描画処理
[let name=l text=%l|0]
がよく分かりません。
これは単純に変数lに0を入れる書式と考えていいでしょうか?

夕街さん

答1)[let name=l text=%l|0] は「変数lに0を入れる書式」で正解です

フワフワソ

また、

; マクロ テキストレイヤ縦書き左設定
を見ると、

[let name="l" text=%l|40]という表記があります。
変数lが””で囲まれていますが、[let name=l text=%l|0]で””がないのは単なる省略でしょうか? それとも意味が違ってくるのでしょうか?

夕街さん

答2)【変数lが””で囲まれて】いることには意味がなく、ここでは同じですね。ややこしいのでない方がいい気がします。

フワフワソ

「桜の樹」の
; マクロ システムメニュー描画処理
では
[let name=l text=%l|40]

[let name=w text=%w|292]

という定義があります。
ここで定義した変数lとwを実際に使用しているのは、
; マクロ テキストレイヤ縦書き左設定

の箇所かと思いますが、そちらでももう一度
[let name="l" text=%l|40]
[let name="w" text=%w|292]

の定義がされています。(今度は””付き)
これは、念のためにもう一回定義した、あるいは本当は2回も必要なくて、
; マクロ システムメニュー描画処理
での
[let name=l text=%l|40]

[let name=w text=%w|292]

は不要だったと考えてもいいでしょうか?

夕街さん

答3)【[let name=l text=%l|40]】が二回出てくるのも重複だし、ムダと云えばムダですね。「あるマクロがあるマクロを呼ぶ、逆方向はない、そして呼ばれる方が単独で他から呼ばれない」というルールを徹底していれば問題ないです。【不要だったと考えてもいい】です

こういう感じでチョイチョイ美しくないコードがあり、お恥ずかしいです(_ _)

フワフワソ

「空を飛べたら」では
; マクロ テキストレイヤ縦書き左設定

のマクロは使っていないので、変数lとwの定義は不要ではないかとも思います。
すると、[let name=l text=%l|0]
は書く必要がなかったタグのようにも思えてきます。
「空を飛べたら」の[let name=l text=%l|0]も、なくてもよかったという理解でいいでしょうか?

夕街さん

まぁ、安全策で置いといてもイイかなと(´ω⊂

 

とてもよく分かりました、夕街さんお忙しいところありがとうございます!

 

*念のために補足ですが、変数に数値を代入する書式は、必ずしもこの [let name=l text=%l|0]という書式ではなく、通常はもっと分かりやすいので、解説サイトを参照してください。

 %l| というややこしい部分は、「このマクロ内」ではこうなっているということで、なぜなのかはフワフワソの理解を超えているということです。

また、””(クオーテーション)の要不要についても、「このマクロ内」では、あってもなくても同じ扱いでしたが、””(クオーテーション)の有無で意味が変わってくる場合もあるので、そこも解説サイトを参照してください。

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

AIRNovelをさわろう! 変数操作

↓ ”” や | について

http://famibee.web.fc2.com/tag_dev/dev.htm#f_and_g4pro

↓ ”” について(.anprj の場合)

http://famibee.web.fc2.com/tag_dev/dev.htm#anprjFile

↓%についての解説。フワフワソの頭脳がギブアップした部分><;

AIRNovelをさわろう! マクロに値を持って行く2


%や | については、凝ったことをしなければ、通常は使わずにゲーム作れるのではないかと思います。
フワフワソには理解が無理なので、使わずにゲームを作ろうと思います。^q^