« November 2006 | Main | January 2007 »

December 31, 2006

24.選択肢による分岐 その2

弟切草やかまいたちをプレイすると、

・エンディング後のリプレイで選択肢が増えていた

という事があります。
ユウキノベルで同じような処理を行う為にはどうしたら良いのでしょうか。

今回はその事について詳しく解説します。

先ず、カウンタというものを理解する必要があります。
カウンタというのは、ゲーム中のパラメータを扱うものです。
例えば、
・どんなルートを通っているか
・推理物やRPG風サウンドノベルであれば、どんなアイテムを持っているか
・恋愛物であれば、好感度の値
・どのエンディングを見たか
等、ゲームの経過状況を数値として保存するのがカウンタの役目になります。

Caunter

前回のサンプルスクリプトを修正しながら説明します。
先ず、新規ボタンを押して新しいカウンタを作ります。
カウンタ名を自分にとってわかりやすい名前に変更します。
初期値はカウンタの使用目的によって、任意に設定します。
範囲はカウンタの使用目的によって、任意に設定します。
「繰越し」というのは、エンディング後のリプレイの際、カウンタの値を引き継ぐかどうかの設定です。
繰越し設定が「しない」の場合、ゲームが起動される度に指定された初期値が使用されます。

今回、「エンディングを見たらリプレイで選択肢が増えた」という事をやりたいので、
繰越しは「する」に設定します。

Caunter2

次に、「end」アイテムにおいてカウンタの値をセットします。
最初にゲームを起動した時点では、初期値「0」がセットされています。
ゲームプレイ時、最後の「end」アイテムにおいてカウンタ値が「1」になるようにセットします。

Caunter3

スクリプトだけを見るとわかりにくい表現ですが、コマンド入力を使用すれば簡単に記述出来ます。

さて、問題は選択肢の部分です。
「前振り」アイテムに選択肢(リンク一覧)が作ってありますが、
そこに新しい選択肢を追加します。
そして、その選択肢には「条件」を指定します。

今回は、エンディングというカウンタに「1」がセットされている場合を条件とします。

Caunter4

このように選択肢を作成すると、「エンディング」カウンタが1の場合にのみ、この選択肢が登場します。
つまり、初回プレイ時には出現しないという訳です。

このような「繰越し」を使った選択肢の処理は、マルチストーリーのサウンドノベルを作る上では必要不可欠になります。

注意点は、ユウキノベルにはオートセーブの機能が無いという事です。
ゲームを完全に終了してしまうと、ゲームを再起動しても繰り越された値は復活しません。
従って、カウンタで繰り越しを使用する場合、手動のセーブシステムを使用する必要があります。
この設定はプロパティから行う事が出来ます。

Caunter5

実際にサンプルスクリプトを起動して、動作を確認してみてください。

「test2.zip」をダウンロード


| | Comments (0) | TrackBack (0)

December 29, 2006

23.選択肢による分岐

選択肢の無いサウンドノベルを製作する場合は、アイテムを自動リンクで連結していきます。
では、選択肢による分岐のあるサウンドノベルを製作する場合はどのようにやるのでしょうか。

以下は実際のスクリプトサンプルです。

「test.zip」をダウンロード

実際にスクリプトを実行して、動作を確認してみて下さい。

Select01
具体的には、この部分が選択肢を管理している場所です。

注意点は以下の通りです。

  1. 選択肢による分岐では、自動リンクではなくメニューリンクを用いる
  2. 一つのアイテムにおいて扱える選択肢は最大8つまで
  3. 選択肢の内容は、リンク一覧にてテキスト部分を編集する
  4. 選択肢の内容は改行しない為、長文を扱えない
  5. 一度作成した選択肢は削除出来ない為、削除の代わりにチェックボックスで動作を無効にする
  6. 水色の矢印ボタンを押すと、選択肢の表示順序を変更できる

とりあえず、サンプルスクリプトをベースに、
選択肢の数を増やしたり、一部を無効にしたり、順序を変更してみて下さい。
自分で動作を検証し、確認すると早く覚えられます。

さて、今回「条件」という項目を解説していません。(サンプル内でも使用していません)
「条件」についてはカウンタの使用方法を理解する必用がある為、
次回講座にてカウンタの使用方法と合わせて説明いたします。

| | Comments (0) | TrackBack (0)

December 28, 2006

22.講座1~21まとめ

講座1~21の内容を全て理解すると、分岐無しのサウンドノベルを製作できるようになります。
補足事項を加えて、全体をまとめてみます。

  • 作業的なまとめ

    1. シナリオをテキスト形式で用意し、テキストエディタ等でユウキノベル用に整形しておく

    2. 絵や音の素材を種類別に用意しておく

      1. 背景画像 JPEG形式

      2. キャラ画像 アルファチャンネル付きPNG形式

      3. BGM MIDI形式

      4. 効果音 OGG形式 (開発時はWAVEでも良い)

      5. 環境音 OGG形式 (開発時はWAVEでも良い)



    3. ファイル名は全角文字を使用できるが、将来吉里吉里に移植し、海外版を製作する予定がある場合は半角英数のみを使用する。

    4. 素材ファイルはフォルダ別に管理し、将来吉里吉里に移植する場合は吉里吉里での管理方法と同じにしておく

    5. ゲームの基本設定はプロパティボタンを押して、まとめて設定する

    6. スクリプトを記述する際は構造化を心がけ、アイテムをサブルーチンとして管理する

    7. 冒頭のタイトル画面はバグにてバッファに残る為、スクリプト冒頭にて画面塗りつぶしを行う

    8. 初心者は極力キャラ表示機能を使用せず、背景画像表示で全てをまかなうように検討する

    9. 背景画像の描写はスクリプトにてフェード効果と時間を設定する事が出来る

    10. キャラ画像の描写では、フェード効果と時間をプロパティでのディフォルト値しか指定できない

    11. 背景やキャラを表示すると、自動的に改頁処理が発生する

    12. 画像のフェード効果における時間は、ウェイトと同じ意味を持つ

    13. BGM、環境音、効果音で3チャンネルを同時再生できる

    14. 環境音をBGMとして利用したい場合は2チャンネルで同時再生できる


  • 製作に関するまとめ

    1. 鉄は熱い内に打てという。製作のモチベーションが落ちる前に作品を完成させろ

    2. 作品を完成させるには速度が大事であり、品質を上げるためには経験が大事になる

    3. 大作をつくる以前に、先ずプロトタイプを量産してスキルアップを行え

    4. 小説が書けないなら、とりあえず青空文庫でGETしろ。何もしないよりは動け

    5. 絵を書けないなら、画像塗りつぶしだけで作れ。それだけでも演出の勉強が出来る

    6. サウンドノベルの場合、見た目より小説本体と効果音に拘れ

    7. 過剰な演出はやるな。ここ一番でたたみかけろ

    8. 漫才と同じで作品冒頭でのつかみが大事だ。冒頭は演出に拘れ

    9. テストプレイは第三者の立場で行え。他人の作品として面白く感じる事が重要

    10. 校正は一通り完成してからまとめて行う。作業の中断はかえって作業効率を落とす

    11. BGMが読書の邪魔にならぬよう注意する。物語の流れの中で自然にスタートし、自然に消す

    12. 章の繋ぎなど、大きな展開部においてタメを作る。画像フェードやBGMフェード等で末端処理を行う

    13. 背景画像に凝るのは構わないが、文字が見えにくくならないように配慮する事


とりあえず、ショートショートや詩等の小品を三時間で1本作る事が出来るようになりましょう。
一連の作業に慣れてしまえば、一時間でも作る事が出来ます。
プロの漫画家は一週間で膨大な作業量をこなしている訳ですが、
それに比較すればサウンドノベルの素材量は極端に少ないものです。
分岐無しの作品であれば、本当に簡単な手順で完成します。
「サウンドノベルを作るのは難しい」という先入観を持たずにチャレンジしてみてください。

| | Comments (0) | TrackBack (0)

21.キャラ(立ち絵)の表示

背景画像に対してキャラの立ち絵を重ね合わせる事が出来ます。
アルファチャンネル(透明度)つきのPNG画像を使用できる為、かまいたちの夜のように、
半透明なシルエット画像を背景画面に重ねる事が可能です。
しかしながら、ユウキノベルでのキャラ表示は仕様上の不備が幾つかあります。
ですから、出来る限り背景画像命令のみで製作した方が仕上がりが良くなります。
キャラ表示における仕様上の不備というのは以下のとおりです。

1.キャラ表示の位置をピクセル単位で指定できない
2.複数キャラの同時表示が不可能(同様に、キャラを複数パーツで構成する事も不可能)
3.背景の場合と違い、フェード効果や時間をスクリプト中で指定できない。(プロパティ指定のみ)
4.表示の際に必ずウェイトが発生するので、口パクアニメをしながら台詞を表示するのは無理
5.キャラを表示する際の優先順位が独特で、制作上管理しにくい

上記の仕様を考察するに、スーパーファミコン版かまいたちの夜であれば、ユウキノベルでも同じようなキャラ表示が出来るという事がわかります。
出来ないのはアニメ的なキャラ表示や、衣装やポーズを合成してキャラ表示するとか、目パチや口パクアニメなど、いわゆる「ビジュアルノベル」的な仕事が出来ないという話です。

このようなユウキノベルならではの欠点を克服するためには、かえってキャラ絵込みの背景画像を用意してしまった方が話が早かったりします。
背景画像であれば、フェード効果や時間をスクリプト内で調整できるからです。
もちろんこの手法は手間もかかり、作品規模が大きければ容量を無駄にします。
ですから、どちらを取るかはバランスの問題になります。
作品規模や場面の状況に応じて使い分ける事が必要になります。

** キャラ表示の実際 **

.CharSet 命令を使用します。
パラメータとして、セット名(キャラ名)、画像ファイル名、表示位置(縦)、表示位置(横)を指定します。
これらはコマンド入力を用いれば簡単に入力できます。

セット名はキャラの名前をそのまま使用すると良いでしょう。
画像ファイルはこの講座ではPNG形式を使用します。
背景はJPG、キャラはPNGという事で使い分ける訳です。
PNGではアルファチャンネルという透明度を画像データに持たせる事が出来ます。
例えば透明度50%でシルエットを作れば、かまいたち風キャラデータになる訳です。
また、一般のキャラ絵においても、キャラの輪郭線をぼかすように、なだらかな値で透明度を指定すると、
背景と重ねた時に自然な仕上がりになります。
(輪郭線の外側において、僅かに背景が透けて見えるという感じになります)
PNG画像において、いかに透明色を扱うかというのは、使用するグラフィックツールによって異なります。
簡易的なグラフィックツールであれば、PNG内の透明色を扱えない場合もあるでしょう。
その点注意が必要ですが、グラフィックツールの選び方や使い方は割愛します。
縦横の表示位置指定は「中央」と上下左右の「画面末端」を基準にするという簡単なものです。
ですから、キャラ位置を正確に決めたい場合、縦または横の画像サイズを画面サイズ(640×480)と同じにする必要があります。

** キャラ表示の際の優先順位について **

キャラ表示命令では、必ずセット名を指定することになっています。
セット名とは通常、キャラの名前をそのまま使えば良いのですが、
機能的な面から言い直すと、グラフィックツールのレイヤー名に相当します。

例えば

.CharSet "主人公" "主人公普通.png" MIDDLE CENTER
.CharSet "主人公" "主人公笑い.png" MIDDLE CENTER

というように指定すれば、画面の真中で主人公が立ち、その後笑顔になるという訳です。
この場合、一枚のレイヤー内でキャラデータが切り替わるというイメージです。

次に、

.CharSet "主人公" "主人公普通.png" MIDDLE RIGHT
.CharSet "脇役A" "脇役A普通.png" MIDDLE LEFT

という場合を考えてみます。

セット名 主人公 と 脇役A はそれぞれ別のレイヤーです。
この例では主人公は右側に立ち、脇役Aは左側に立ちます。
それぞれ別のレイヤーなのですから、キャラを移動させたり、表情を変えても他のキャラに干渉しません。

では以下のようなスクリプトではどのような動作をするでしょう。

.CharSet "主人公" "主人公普通.png" MIDDLE RIGHT
.CharSet "脇役A" "脇役A普通.png" MIDDLE LEFT
.CharSet "脇役A" "脇役A普通.png" MIDDLE CENTER
.CharSet "脇役A" "脇役A普通.png" MIDDLE RIGHT

先ず、主人公が画面右端に表示され、脇役Aは左端に表示されます。
その後、脇役Aは中央、右側に表示されます。(移動するような感じです)
最終的に主人公と脇役Aは画面右側で重なって表示される訳です。
この時、どちらが上でどちらが下になるのかが問題です。

結論を言えば、セット名を定義した順番で上下関係が決まります。
スクリプトの実行順で、セット名が早く出てきた方が背景画面に近い、下側になります。
最後に出てきた方が上側になります。

この事の理解は非常に重要です。
例えば、キャラ絵を背景画面の上にたたせます。
その上に、キャラとして「窓の部分を透明化した家」を表示すれば、キャラが家の中から窓越しに外を見ているという情景を作ることが出来ます。

** キャラの消し方 **

キャラを消すためには
.CharDelete "セット名" 命令を使用します。
画面上に複数のキャラが表示されている場合は、
.CharClear 命令を使用します。

この時に注意すべき点は、上記の命令を使用すると、そのセット名はメモリ上完全に破棄されるという事です。

例えば

.CharSet "主人公" "主人公普通.png" MIDDLE CENTER
.CharSet "脇役A" "脇役A普通.png" MIDDLE CENTER
.CharSet "主人公" "主人公笑い.png" MIDDLE CENTER
.CharSet "脇役A" "脇役A笑い.png" MIDDLE CENTER

上記スクリプトでは、脇役Aはずっと主人公の上に重なった状態で表示されます。
ところが、

.CharSet "主人公" "主人公普通.png" MIDDLE CENTER
.CharSet "脇役A" "脇役A普通.png" MIDDLE CENTER
.CharDelete "主人公"
.CharSet "主人公" "主人公笑い.png" MIDDLE CENTER
.CharSet "脇役A" "脇役A笑い.png" MIDDLE CENTER

このように、3行目で主人公のセットを破棄してしまうと、その時点でメモリ上残っているのは脇役Aのセットのみです。
4行目で新規に”主人公”のセットが最定義されるので、今度は主人公が脇役Aの上に重なる事になります。

つまり、.CharDeleteや.CharClearを使用すると、その都度キャラの優先順位が変動するという事です。

表示の優先順位を管理するというのは以外に面倒なので、キャラの重ねあわせを頻繁に使う場合は、
.CharDeleteや.CharClearを使用しない方が賢明です。
キャラのセットを破棄しなければ、同じ優先順位が保たれるからです。

では、.CharDeleteや.CharClearを使わずに、どのようにしてキャラを消せるでしょうか。
答えは単純で、透明キャラを表示すれば良いのです。
具体的には1ピクセルで構成された透明度100%のPNGデータを表示します。

** レイヤー管理的なキャラ表示 **

サウンドノベル製作ツールは、ユウキノベル以外にも多く存在します。
その中で、有名なツールの殆どがフォトショップ的な画面管理を行っています。
つまり、一番奥に背景があり、その上にレイヤーが何枚も重なるイメージです。
このような機能をユウキノベル上で再現するためには、あらかじめ透明キャラで複数のキャラセットを用意してしまえば良いのです。

講座7にて構造化プログラムの説明をしましたが、
アイテムに「初期処理」を用意するという最大の理由はここにあります。

例えばアイテム「初期処理」にて、以下のような記述をします。

.CharSet "scr1" "png\透明.png" MIDDLE CENTER
.CharSet "scr2" "png\透明.png" MIDDLE CENTER
.CharSet "scr3" "png\back01.png" MIDDLE CENTER
.CharSet "scr4" "png\透明.png" MIDDLE CENTER
.CharSet "scr5" "png\枠01.png" MIDDLE CENTER
.CharSet "scr6" "png\透明.png" MIDDLE CENTER

これは「フィンジアスの少女」にて実際に使われているスクリプトです。

セット名はキャラ名ではなく、レイヤー名(番号)になっています。
SCR5にて、画面全体を覆うフレームを表示しています。
SCR3はフレーム枠の下に表示されている画像で、半透明な「汚れ」みたいなデータです。
この画像は背景画像を暗くし、文字を読みやすくするという目的を持っています。
通常のキャラ表示は1、2、4、6を使用します。
演劇のように、物語の場面状況によって立ち位置が変わります。

このように、最初にキャラセットを定義してしまえば、
グラフィックツールでレイヤーを使用する時と同じ感覚でキャラを表示する事が出来ます。
注意すべき点は.CharDeleteや.CharClearを絶対に使わない事です。
キャラを消したいときは透明なPNGデータを表示してキャラを消します。

この手法の問題点はメモリを食うことです。
けれども今の時代、PCはメモリを贅沢に積んで当たり前になってしまいました。
現代標準的に使用されているPCであれば、640×480の画像を数枚重ねたところで、PCが固まる事は無いはずです。

棚橋プロジェクト作品では、画面全体を汚したり、好感度メーターを表示したり、枠をつけたり等、
そのような画面パーツの一切をキャラの表示機能に頼っています。

ユウキノベルのキャラ表示は他のツールに比べて仕様上の不備があると書きましたが、
機能を理解した上で使いこなせば武器になりますので、ユウキノベルに慣れた人は是非色々挑戦してみて下さい。

| | Comments (2) | TrackBack (1)

20.背景画像の表示

背景画像には、通常の画像ファイル表示と全画面塗りつぶしの2種類があります。
先に全画面塗りつぶしを説明します。

** 全画面塗りつぶし **

.GraphFill 命令を使用します。

色コード、画像の切り替え方法、不透明度をパラメータとして指定します。
これらのパラメータ設定はコマンド入力から簡単に行えるようになっています。

画面塗りつぶしは、例えば以下のような場面で使用します。

1.ユウキノベルは冒頭タイトル画面がクリアされないというバグがあります。
  なので、スクリプト冒頭で背景画面を黒一色で塗りつぶしておくと安心です。
2.登場人物が斬られた際に、一瞬に真っ赤な画像を表示する。
3.登場人物が殴られた際に、一瞬に真っ暗な画像を表示する。
4.風景画に赤50%を重ねて夕暮れを表現する。
5.風景画に黒80%を重ねて夜間を表現する。

** 背景に画像ファイルを表示 **

.GraphLoad 命令を使用します。
パラメータとして、画像ファイル名、画像切り替え方法、切り替え方向、切り替え時間
の4種類を設定します。
ただし、通常は画像ファイル名のみを指定します。
パラメータとして画像ファイル名のみを指定した場合、
残りのパラメータはゲームプロパティとしてディフォルト指定した値が使われます。
(前回講座で説明したとおりです)

画像ファイルは、この講座ではJPEG形式のものを使用します。
その方が管理上、また後々吉里吉里に移植する際に有利です。

画像切り替えに方法は何種類かありますが、演出として使用すべきものなので、
「ここ一番」という場面を選ぶ方が良いでしょう。
いたずらにあれこれ使用すると、ゲームに統一感が失われ、雑な印象を与えてしまいます。

以下はよく使われるフェード効果(画像切り替え方法)の使用例です。(ここ一番の意味がわかるハズ)

1.効果なし

  指定時間を250ミリ秒にします。
 最も高速に画面が切り替わる為、例えばミイラが突然出てくるようなドッキリに使用します。

2.ブレンド

  もっとも頻繁に使用されます。
 滑らかに切り替わるので、指定時間を250ミリにした上で連続に切り替えると、動画的な表現が可能です。
 また、3秒以上の場合は「夕暮れ」や「余韻を持たせた場面転換」に用いる事が出来ます。

3.パズル

 「眩暈」や「気絶状態から目を覚ます」「攻撃による崩壊」などに適しています。

4.風

  横方向の高速移動、移動(距離)を感じさせる場面展開に適しています。

この他にも幾つかのフェード効果がありますが、上記を抑えておくだけで80%はカバー出来るのではないかと思います。

** 時間指定の際の注意点 **

フェード効果ではパラメータに時間を指定し、その時間を使って前画面と新画面が切り替わります。
(記述を省略しても、プロパティのディフォルト値が使用されます)
この時間は、ウェイトと同じ意味を持ちます。
この時間においては、文章表示はストップします。
ですから、画面表示をウェイトの代用として使う場合もあります。

小説の一章から二章へ移行する際等、このような大きな場面展開においては
ある程度のタメを作って、読書にメリハリを与える事が大切になります。
一般的に、章の終わりには以下のような処理が続きます。

1.効果音が鳴っている場合停止する。
2.BGMや環境音が鳴っている場合、フェードアウトする。(例:フェードアウト時間6秒)
3.画像をゆっくり切り替える。(例:ブレンドにて4秒)
4.タメとしてウェイトを入れる。(例:3秒)

******-  音が6秒で消える
****---  画像が4秒で切り替わる
----***  3秒の待ち

標準的にはおよそ以上のようなパターンで章の末端処理(繋ぎ処理)を行います。
実際には作品の性格によって、時間を調節したり、フェード方法を変えるわけです。

例として、講座17で紹介した「sample04」を参照してください。
画像塗りつぶしを用いていますが、音を消しながら画像を切り替えるという実例を見ることが出来ます。

| | Comments (0) | TrackBack (0)

December 27, 2006

19.グラフィックの表示

ユウキノベルでは、背景画像とキャラ(立ち絵)の二種類において、表示方法が用意されています。
とはいえ、ユウキノベルでのキャラ表示は仕様上の不備がある為、他のサウンドノベル製作ツールより扱いにくいものとなっています。
ですから、初心者の方には背景画像表示について確実にマスターする事をお勧めします。
各命令の具体的な使用方法は次回講座に譲りますが、概略を説明しておきます。

1.背景画像の表示

  .GraphLoad命令を使用します。
  背景画像はJPEG形式を使用します。
  実際にはBMP等他の形式でも使用可能ですが、この講座では作業を単純化する為に、
  背景画像=JPEGとして扱うようにします。

2.キャラ(立ち絵)の表示

  .CharSet命令を使用します。
  先ず、キャラ別にセット名というものを決めておきます。
  セット名は自分にわかりやすいものであれば何でも構いません。
  一般的には主人公の名前や脇役の名前などが良いでしょう。
  キャラ表示はセット名に対して、PNG形式の画像を指定します。
  実際にはPNG以外の画像形式も使用可能ですが、この講座では作業を単純化する為に、
  キャラ画像=PNGとして扱うようにします。
  実用的にも、PNGはアルファチャンネルでの透明色を使用できるので非常に便利です。

3.標準的な使用について

  画像表示の際、既に表示されている画像に対して、
  どのような効果で、どれだけの時間を使って画像切り替えを行うか、指定する事が出来ます。
  標準的には、浮かび上がるように段々切り替わっていく「ブレンド」効果を使用します。
  切り替え時間は製作者の好みによるのですが、最初は500ミリ秒を試してみると良いでしょう。
  
  標準的なフェード効果(画像切り替えの方法)や時間は、
  ゲームのプロパティ画面にて設定しておきます。
  
  背景画像は「全般の設定」内にある、「標準のフェード効果」という項目で設定します。
  キャラ(立ち絵)用は「キャラクター表示」内にある、
  「キャラクターの表示効果」を使用します。
  
4.グラフィック表示での注意点

  背景でもキャラでも、グラフィックを表示すると、表示されていた文字はクリアされます。
 つまり、画像表示命令は改頁と同じ機能を含んでいるという事です。
 従って、画像表示命令の直前に改行命令「.NextPage」を使用するのは無意味です。
 また、裏返して言えば、文字を表示させたまま画面を切り替えることは出来ません。
 どうしてもそのような状況を再現したい場合は、文字データを含んだ画像を用意してごまかす必要があります。

| | Comments (60) | TrackBack (1)

« November 2006 | Main | January 2007 »