基礎編(その十)

ページ名:tutorial_basis_10


デフォルト画像の使用とフォルダ指定


CardWirth には標準画像と音声ファイルがあらかじめ準備されており、それらはいちいちシナリオフォルダに複製しなくとも用いることが出来ます。
今回は、それらの画像をエフェクトブースターで用いる方法について説明します。


CardWirth のフォルダ構成


CardWirth のオフィシャルファンサイトから CardWirth ver1.50 Fullpack をダウンロードして展開すると、以下のようなフォルダ構成になっています(サブフォルダは一部のみ)。


  • CardWirth
    • Data
      • Face
      • Midi : BGM を格納
      • Resource
      • Table : 背景画像を格納
      • Wave : 効果音を格納
    • Help
    • Scenario
    • Scheme
    • SoundFont
    • Tool
    • Yado

Data フォルダは CardWirth エンジンが標準で利用するデータファイルが収められたフォルダです。
Data¥Face フォルダには冒険者の顔画像(メニューサイズ)が格納されていることはたぶんご存知でしょう。同様に Data¥Midi には標準の BGM 、Data¥Table には標準の背景画像、Data¥Wave には標準の効果音がそれぞれ格納されています。


そして WirthBuilder でシナリオを作成する際、これらの標準ファイルを利用するには、ドロップボックスで「デフォルト」を指定してからファイルを選択します。つまり、標準の画像を使用する場合は



ここでデフォルト/オリジナルからデフォルトを選択しますし、効果音を使用する場合にも



ここで同様にデフォルトを選択します。これらの選択が何を意味するかというと


デフォルト
CardWirth の標準データフォルダから画像や効果音を使用する
オリジナル
シナリオフォルダから使用する

ということを意味しているわけです。


エフェクトブースターで標準ファイルを使用する


WirthBuilder 同様に標準ファイルを使用することはエフェクトブースターでも可能で、dirtype パラメータを用いてフォルダを指定します。


選択するフォルダ備考
1その定義ファイルが存在するフォルダdirtype パラメータのデフォルト値
2Data¥Table フォルダ標準の背景画像フォルダ
3Scheme フォルダJPYメーカー用のテンプレートフォルダ*1
4現在プレイ中のシナリオフォルダ(後述)dirdepth パラメータを併用
5Data¥Wave フォルダ標準の効果音フォルダ

つまり、dirtype=2 と指定すれば、おなじみの地図の画像(MapOfWirth.bmp)や冒険者の宿の画像(AdventurersInn.bmp)をシナリオフォルダにコピーせず使えるようになるわけです・・・ユーザさんが画像を差し替えていなければ、ですが。


そのことを、以下の手順に従って作業し、一緒に確認してみましょう。


  1. このチュートリアルの演習に用いているシナリオフォルダにサブフォルダを作成します。名前は effect とでもしておきましょう。
  2. effect フォルダに基礎編(その一)で作ったのと同じ定義ファイル(冒険者の宿.jpy1)を作成します。もちろんコピペで結構です。このとき、MapOfWirth.bmp と AdventurersInn.bmp はコピーしないで下さい。effect フォルダには冒険者の宿.jpy1 だけが存在する状態です。
  3. 演習用のシナリオに新たなエリアを作成します。適当な名前をつけておきましょう。
  4. 上記のエリアの背景に、effect¥冒険者の宿.jpy1 を指定します。

すると、こんな感じのダイアログが続けて表示されるはずです。




そして、何も表示されない真っ暗なエリア画面が現れます。



つまりこれは、エフェクトブースターの定義ファイル(effect¥冒険者の宿.jpy1)が参照している二つのファイルを見つけることが出来なかった、と言っているのです。
ファイルのパスをよく見ると、どちらの画像も effect フォルダに存在することが期待されていることもわかります。
シナリオのフォルダではなく、定義ファイルが存在するフォルダから当該画像が探される、ということは重要なので覚えて置いてください(他のサブフォルダから画像を探す方法については後述します)。


では、この定義ファイルに dirtype=2を付け足してみましょう。付け足すべき箇所は二箇所ありますが、検証のために一つずつやってみます。まずは [init] セクションにのみ加えます。定義ファイルの内容はこんな感じです。


 1: [init]
 2: backwidth=632
 3: backheight=420
 4: dirtype=2
 5: fileName=MapOfWirth.bmp
 6: 
 7: [冒険者の宿]
 8: width=400
 9: height=260
10: fileName=AdventurersInn.bmp
11: position=116,15
12: transparent=0

4 行目に dirtype=2 を加えてみました。この状態で先のエリア画面を開いてみると、まずダイアログが表示されて・・・



こんなエリア画面になるはずです。



何が起きたか、もちろんお分かりですよね。[init] セクションでは標準フォルダから画像を探すよう dirtype=2 を付け加えたので MapOfWirth.bmp を見つけることが出来たのですが、[冒険者の宿] セクションはそれがないので定義ファイルのあるフォルダ(effect)から AdventurersInn.bmp を探そうとし、相変わらず見つからなかったわけです。


では、逆に [冒険者の宿] セクションだけに dirtype=2 を加えてみたらどうなるでしょうか。先のエリア画面を開こうとすると、まずダイアログが表示され・・・



エリア画面自体はこのように表示されます。



先ほどと逆になりましたね。今度は冒険者の宿の画像だけを見つけることができ、背景の地図画像は見つからなかったわけです。
両方のセクションに dirtype 指定を行うとどうなるかは、あなた自身で確認して下さい。


標準の効果音を用いる


同様に、dirtype=5 を指定すると、CardWirth 標準の効果音が使えます。例の「じょわっ!」なら dirtype=5, fileName=使用(気合).wav という具合ですね。
エフェブで音も扱えるの?と思われるかもしれませんが、いくつかの音声ファイルは使えます。これはアニメーションを扱う際に非常に重要です。たとえば、以下のような一連の(どこかで見たような)演出をエフェブで行うとしましょう。


  • ビシュッ!(という刃物を振り回した効果音)
  • 刃物を振り回した軌跡の描画
  • ズバッ!(という肉の斬れる効果音)
  • 画面に血しぶきが飛ぶ描画

こういう一連のシーケンスを一つの定義ファイルに記述できますので、定型化した処理として使いまわすには便利なんですね。逆に言えば、エフェブで効果音を扱えないとすると音を含まない単位でぶつ切れにエフェブ化しなければならないのです。


とはいえ、エフェクトブースターで扱える音声ファイルには制限があります。
それは WAV は可能だが MP3 は不可、というようなことで(WirthBuilder で MP3 が使えるからといってエフェクトブースターでも使えるというものでもないのです)、この辺りの話題についてはいずれアニメを扱う際に詳しく取り上げることにします。


dirtype = 4 が意味するもの


その一方で dirtype = 4 はかなり分かりづらい挙動をする設定です。
dirtype の動作について、まず editor128.chm を引用してみましょう。


ファイルの存在するフォルダのタイプを指定する
dirtype="半角数値"
 ファイルの存在するフォルダの位置を指定します。4(シナリオフォルダ)を利用する場合、 dirdepthの値も必要になります。慣れない内は、JPYメーカーに任せたほうが良いでしょう。
1.このファイルの存在するフォルダ(省略時の値)
2.エンジンの存在するフォルダ¥data¥table
3.エンジンの存在するフォルダ¥scheme
4.現在プレー中のシナリオフォルダ(alphaパラメータ必須)
5.エンジンの存在するフォルダ¥data¥wave


「alpha パラメータ必須」はもちろん「dirdepth パラメータ必須」の誤りでしょう。
そして dirdepth パラメータの項目を読むと、こんな風に説明されています*2


ファイル自身が保存されている場所を指定する
dirdepth="半角数値"
 シナリオの存在するフォルダ(Summary.wsmの存在するフォルダ)を基準とした時に、ファイル自身(つまり、編集中のテキスト。ロードする画像ではない)が幾つ下のサブフォルダに入っているかを指定するものです。
..¥シナリオフォルダ¥sample.jpy1~ならパラメータは0
..¥シナリオフォルダ¥effect¥sample.jpy1~ならパラメータは1になります。


意味が通じるよう忖度しますと、dirtype = 4 がやろうとしていることはエフェブの定義ファイルの場所より dirdepth の分だけフォルダ階層をさかのぼったフォルダを基準とするということのようです。
ところが奇妙なことに dirdepth パラメータは [init] セクション専用のパラメータなんです。この引用ではわかりませんが、元のヘルプファイルでは項目の前に赤い玉が表示されており、[init] 専用であることを示しています。
つまり backwidth や backheight 同様、[init] セクションの中でだけ意味を持つパラメータなので、他のセクションに設定しても無視されてしまうんですね。いまさらあげつらっても仕方ないので「奇妙な仕様」とだけ申しておきます。*3
ですからこの dirtype=4 と dirdepth の挙動については「試して見たけどよく分からなかった」という人がそれなりにいらっしゃるのではないかと思います。


ですがご安心あれ、本チュートリアルはその辺りの動作の検証も分かりやすく行ってみますよ。
まず、先ほどの effect¥冒険者の宿.jpy1 を以下のように編集します。


 1: [init]
 2: backwidth=632
 3: backheight=420
 4: dirdepth=1
 5: fileName=MapOfWirth.bmp
 6: 
 7: [冒険者の宿]
 8: width=400
 9: height=260
10: dirtype=4
11: fileName=AdventurersInn.bmp
12: position=116,15
13: transparent=0

4 行目に dirdepth = 1 パラメータを指定し([init] 専用ですから)、これがシナリオフォルダから一階層深いところにあることを指定します・・・が、[init] セクションそのものには dirtype = 4 を指定しません。
そして 10 行目、[冒険者の宿] セクションには dirtype = 4 を指定します。
つまり先ほどの説明どおりなら、背景の地図画像は表示されず(そして WirthBuilder で開くときにはダイアログによる警告が先にあるでしょう)、冒険者の宿だけが表示されるはずです。ただしこの冒険者の宿は、標準フォルダにある画像ではなく、シナリオフォルダにコピーしたほうですが。


では、エリア画面を開いてみましょう。



予想通りの結果になりましたね。
ではいったんそのエリア画像を閉じてから、シナリオフォルダにコピーした AdventurersInn.bmp をゴミ箱に捨ててください。それからもう一度同じエリアを開きます。その結果は・・・



こうなるはずです。それによって、先ほど表示していた冒険者の宿がシナリオフォルダにあった画像(標準フォルダのそれではなく)であることも分かります。
それを確認できたら、ゴミ箱に捨てた AdventureresInn.bmp を元に戻しておきましょう。こやつにはまだ使い道がありますので・・・もしゴミ箱に残っておらず完全削除してしまった場合は、また Data¥Table から「コピー」しておいてください。まちがって「移動」しないように気をつけましょう。


どうせですから、dirtype=4 および dirdepth の挙動について、もう少し調べてみましょうか。
エフェブの定義ファイルをまた少しいじってみます。


 1: [init]
 2: backwidth=632
 3: backheight=420
 4: fileName=MapOfWirth.bmp
 5: 
 6: [冒険者の宿]
 7: width=400
 8: height=260
 9: dirtype=4
10: dirdepth=1
11: fileName=AdventurersInn.bmp
12: position=116,15
13: transparent=0

9 行目と 10 行目に注目して下さい。[冒険者の宿] セクションに dirtype と dirdepth を記述しました。
一方で [init] セクションからは dirdepth パラメータを削除しています。このエリアを開いてみると・・・



WirthBuilder はどちらの画像も見つけられませんでした。[init] 以外のセクションに dirdepth を指定しても意味がない、ということがこれで分かるでしょう。


ちなみに、更にフォルダを深くした(dirdepth が 2 以上となる)場合ですが・・・これはエフェクトブースター以外のところで少しややこしい話があります。シナリオの制作に( CW 1.50 標準付属の)WirthBuilder を使うか、あるいは CW/Py 対応の XEditor を使うかで、少し事情が変わるのです。


WirthBuilder
WirthBuilder ではシナリオフォルダより2階層以上深い画像ファイルおよびエフェクトブースターの定義ファイルを画像として使うことが出来ません。厳密に言うと、エリア画面(テーブルビューおよびシーンビュー)や、背景変更コンテントで「オリジナル」を選択した際に表示されるファイル一覧の中に、深いサブフォルダにあるファイルが表示されないので、指定できないのです*4。dirdepth=2 以上を指定することも可能で動作もしますが、それはシナリオフォルダより上位のフォルダを指定することになるでしょう。
XEditor
シナリオフォルダより二階層以上深いフォルダのファイルも、問題なく指定できます。

XEditor は優れた機能を持ち導入するメリットは多々ありますが、本チュートリアルは CW 1.50 の標準配布パックを前提として進めているので、ここでは特に取り上げません。
つまり WirthBuilder でのシナリオ制作を前提としますので画像やエフェブの定義ファイルは二階層以上深いフォルダに置いちゃダメというだけにとどめておきます。


以上、だいぶ説明が長くなりましたが、その挙動についてはご理解いただけましたでしょうか。
次の項目ではその具体的な運用(および身も蓋もない代替策)について解説します。


サブフォルダを用いたリソース管理とファイル指定


これは推測ですが、前項で長々と説明した dirtype = 4 の指定が想定している事態とは、おそらく


  • シナリオフォルダ直下ではなく、サブフォルダに定義ファイルが存在する
  • エフェクトブースターの動作に必要な画像ファイル等が、別のサブフォルダに格納されている

というような状況ではないかと思われます。たとえばですが、仮にシナリオ名(=フォルダ名)を ScenarioName としたときに


  • CardWirth
    • Scenario
      • ScenarioName
        • card : NPC やメニューなどのカード画像を格納するフォルダ
        • effect : エフェクトブースターの定義ファイルを格納するフォルダ
        • picture : 背景やセル画像を格納するフォルダ
        • sound : BGM や効果音を格納するフォルダ

というようにフォルダ分けして各種の素材を分類して納めたものとしますね。
その場合、effect フォルダにある定義ファイルから picture フォルダにある画像ファイルを使用する場合、どう記述すれば良いのでしょう。
fileName=picture¥画像名.bmp としてもうまく行きません・・・それは effect フォルダの配下にあるものと解釈されてしまうので、ScenarioName¥effect¥picture¥画像名.bmp を探してしまうからです。


この点、dirtype=4 (および dirdepth=1)を指定しておけば、 fileName=picture¥画像名.bmp で必要なファイル名を指定することが出来るわけです。
一見奇妙な仕様のようでも dirtype=4 にはそれなりの意義がありそうです。好意的に解釈すれば、ですが。


親フォルダは .. で表す


とはいえ、このような機能がなければ(シナリオフォルダ内の)他のフォルダの画像を指定することができない、というほどのことでもないんですよね。
なぜなら、親フォルダは .. (ピリオド二個)だけで表すことができるのですから。


例えばシナリオフォルダ直下に画像ファイル(MapOfWirth.bmp および AdventurersInn.bmp)があり、effect サブフォルダにエフェブの定義ファイル(冒険者の宿.jpy1)が置いてあったという先ほどの状態で、dirtype パラメータを用いなくとも親フォルダにある画像を参照することは可能だったのです。


 1: [init]
 2: backwidth=632
 3: backheight=420
 4: fileName=..¥MapOfWirth.bmp
 5: 
 6: [冒険者の宿]
 7: width=400
 8: height=260
 9: fileName=..¥AdventurersInn.bmp
10: position=116,15
11: transparent=0

4 行目と 9 行目、ファイル名の前に ..¥ とつけられているのが分かりますか。これだけで親フォルダ(ひとつ上の階層)にあるファイルを参照することが出来るのです。
dirtype パラメータが使われていないことに注意して下さい。ここではデフォルト値の 1(定義ファイルのあるフォルダを基準とする)として動作します。


それでは当該エリアを表示させて見ましょう。



ちゃんと表示されましたよね。たったこれだけのことなのです。
これがもし画像ファイルが ScenarioName¥picture フォルダに納められているのなら、fileName=..¥picture¥画像名.bmp というように指定します。


演習問題


シナリオフォルダ内に effect と picture という二つのサブフォルダを作成し、前者にはエフェブ定義ファイルを、後者には MapOfWirth.bmp と AdventurersInn.bmp を移動します。この状態で正しく表示されるよう定義ファイルを修正して下さい。ただし、その際に以下の両方の条件を試してください。

  • dirtype = 1
  • dirtype = 4

まとめとおさらい


今回のポイントは以下の通りです。


  • エフェクトブースターは CardWirth の標準フォルダにある画像を使用することが出来る
  • シナリオフォルダ内にサブフォルダを作った場合は何らかの形でフォルダ名の指定も必要
  • 親フォルダを表すには .. を用いる

今回登場したパラメータは以下の通りです。


パラメータ名機能
dirtype画像や音声などのファイルの格納された場所を指定する
dirdepthdirtype と併用し、ファイル名指定の基準となるフォルダを指定する

次回はエフェクトブースターの話題から少し離れて OS 寄りの話題、フォルダ構造についての基礎的な説明を行います。


今回、最後の方で「親フォルダは .. で表す」と説明しました。
かつてこのようなことはコンピュータを扱う者にとって基礎知識というか一般常識に類することだったのですが、それは昔の話、 MS-DOS などの OS が用いられていた 80 ~ 90 年代前半ころまでのことです。


ですが Microsoft Windows が 90 年代半ばから一般に普及して、もはや二十年以上経ちました。
言い方を変えると、かつてのコンピュータは「仕組みを理解しないと使えない道具」だったのが、「使い方だけ分かっていれば使える道具」になってから二十年以上経ったということです。
それがいけないということではないですし(そうでなければ道具は普及しません)、仕組みなどまったく理解しなくてもいい道具なら言うことはないのですが、残念なことにコンピュータ(特に Windows 搭載コンピュータ)はところどころ「仕組みを理解しないと使えない」時代の名残があちこちに残っているんですね。


その点、以前に十六進法と色の指定について説明したのもそうですが、エフェクトブースターを利用するにはそうした「コンピュータの仕組み」についてのある程度の理解、言ってみれば基礎的な教養がどうしても必要とされるケースがあるわけです。
今回の親フォルダの指定方法もまた、その中のひとつということが出来ます。


そうした考えから、次回もまた一般教養的な内容を扱うことにします*5。既に理解されている方には退屈な内容で、その次に飛ばしていただいて全くかまいません。


戻る:基礎編(その九)

*1 本チュートリアルは JPY メーカーを扱いませんので説明は割愛します
*2 アルファベット順索引に dirdepth の項はありませんが、説明自体は dirtype の二つ上にあります
*3 JPYメーカーとの関連でこのような仕様になっているようですが、とはいえ奇妙で理解しづらく誤解を招きがちなことに変わりはありません
*4 ただし奇妙なことに BGM 変更コンテントや効果音コンテントでは深いフォルダにあるファイルも指定できます
*5 以前 Twitter で実施したアンケートでは CardWirth シナリオ作者の内、プログラミングの経験がある方は 1/3 程度しかいない、ということでした。本チュートリアルは、そのほかの 2/3 のみなさんにも理解していただける内容を目指しています

シェアボタン: このページをSNSに投稿するのに便利です。

コメント

返信元返信をやめる

※ 悪質なユーザーの書き込みは制限します。

最新を表示する

NG表示方式

NGID一覧