March 28, 2007

製作関連のメルマガはじめました。

メルマガ登録・解除
サウンドノベル・クリエイターを目指せ!!
   
バックナンバー
powered by まぐまぐトップページへ


よりディープに語っていこうと思います。

| | Comments (0) | TrackBack (0)

January 02, 2007

28.好感度メーターの表示

カウンタというのは、好感度や所持金額、所持アイテムなど、ゲーム全般におけるパラメータ情報を保存する箱のようなものです。
ユウキノベルではその値を分岐のための条件判断にのみ使用します。

つまり、ユウキノベルではカウンタの値を直接テキストとして表示する事が出来ません。
また、値を利用してグラフを表示する等の命令も用意されていないのです。

けれども、カウンタの使用方法と、条件付自動リンクを理解していれば、
力技的な方法でカウンタの値を画面に表示する事が出来ます。

この方法は本当に「力技」なので、スクリプトを非常に見難くしてしまいます。
ですから、この手法はゲームを一通り完成させた後、改修する形で機能付加するようにしましょう。

先にサンプルを試して下さい。

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

右下に好感度メーターらしきものが表示されています。
選択肢として、女子高生を選ぶと好感度が1上がります。
カラスを選ぶと1下がります。
死神を選ぶと0にリセットされます。

選択肢を選ぶ度に、好感度メーターが変化します。
実際に動かして、基本動作とF5キーによるカウンタ値の変化を確かめてください。

では、解説です。

先ず、カラス、女子高生、死神のアイテム内で
好感度カウンタを増減、あるいはセットします。

.CounterPlus "好感度" -1
.CounterPlus "好感度" 1
.CounterSet "好感度" 0

という命令になりますが、これらはコマンド入力より簡単に入力できます。

次に、上記アイテムが終了した際に、好感度表示のサブルーチンに処理を飛ばします。
具体的には「好感度メーター更新」というアイテムに移行します。
その後、好感度の値に応じて、PNGデータをキャラとして表示します。
このデータは「PNG」フォルダ内に格納されていますので、直接確認しても良いでしょう。
好感度表示が終了したら、メインルーチンに処理を戻します。
しかし、ユウキノベルではサブルーチン処理というものが仕様にありませんので、
自前でサブルーチン復帰処理をさせます。

「好感度表示より復帰」というカウンタを用意しておきます。
このカウンタの値によって、メインルーチンのどのアイテムに戻るか判断し、復帰するようにします。
この処理を行う為には、前提として「好感度メーター更新」処理を行う前に、
「好感度表示より復帰」カウンタの値が正しく設定されている必要があります。
通常は、好感度カウンタの増減と同時に、「好感度表示より復帰」カウンタのセットを行います。

このテクニックで注意すべき点は、
好感度の増減を行った直後に、好感度表示を呼び出すという事です。
すると、プレーヤーは自分の行動がどう評価されたのか、リアルタイムに確認できます。
内部的に好感度カウンタの値が増減したとしても、
自動的にその値が画面に反映されるわけではありません。
好感度表示に処理を移行して、初めて画面上の変化が起きる訳です。
そのようなラグを考慮して、スクリプトを組む必要があります。

また、メインルーチンへの復帰ポイントが8箇所を超える場合、
「好感度更新終了」アイテムは
「好感度更新終了A」「好感度更新終了B」のように
アイテムを多層的に使用します。

具体的には、「好感度更新終了A」において
「好感度表示より復帰」カウンタが8~14の場合で条件判断を行い、
8未満だったら「好感度更新終了B」に処理を飛ばす訳です。
そして、「好感度更新終了B」の中で、
「好感度表示より復帰」カウンタが0~7の場合で条件判断を行うようにします。

このように、「空アイテムを多層的に使用する」というテクニックは、
作品規模が大きい場合、非常によく使われるテクニックです。
それは、ユウキノベルで一度に扱えるリンクの最大が8であるという仕様がある為です。

さて、好感度メーターの表示を説明しましたが、
同じように取得アイテムをアイコンとして画面に表示する等、
応用的な用途が考えられます。


| | Comments (1) | TrackBack (0)

January 01, 2007

27.自動リンクでの条件分岐

選択肢によって物語が分岐するというのは、非常にイメージが掴みやすいものです。
しかし、選択肢に関係なく物語が分岐するというのは、イメージが掴みにくいかもしれません。

一番わかりやすい例は、恋愛物のゲームです。
恋愛物であれば、当然「好感度」というパラメータを持っているはずです。
そして、好感度に応じて物語が変化する訳です。

「アイテムを持っている時に特別なイベントを発生させる」という状況も、
選択肢以外で物語が分岐させたいという一例になります。

この時の処理方法は、選択肢での分岐方法と基本的には同じです。
違う点は「リンク設定」だけです。
「リンク設定」欄がメニューリンクであれば、通常の選択肢による分岐になります。
「リンク設定」欄が自動リンクであれば、カウンタ値を参照して勝手に分岐します。

この事は、前回のサンプルスクリプトをチェックすれば理解できるはずです。

ところが、自動リンクで条件判断を付加する場合、二つ注意点があります。

  1. リンク先が複数ある場合、条件判断のチェックは一番下から上に向かって行われる
  2. 一番上のリンク先は「条件なし」にしておく事が好ましい

具体的に説明します。

Autolink_1

このような場合、下から順に条件判断のチェックがなされるので、
三行目、カウンター2が1以上かどうかが判断されます。
もし1以上であればリンク先アイテム「死神」に移行しますが、
0だった場合は2行目の条件判断チェックに移ります。
二行目、カウンター1が1以上であれば、アイテム「女子高生」に移行します。
0だった場合は1行目のリンク先に移動する訳です。

「下から条件判断がなされる」というのは非常に重要です。
例えば、3行目を「条件なし」にしてしまうと、1行目と2行目は絶対に処理されません。
また2行目の条件を「C1>=2」
3行目の条件を「C1>=1」としてしまうと、
2行目は絶対処理されない事になります。
何故なら、2行目の条件は3行目にも一致するからです。
この場合、3行目と2行目を入れ替える必要がある訳です。

また、論理的な整合性があれば、1行目に条件判断をつけてもスクリプト的にはOKです。
けれど、実用上1行目に条件判断をつける事に意味はありません。
エンディングアイテム以外、アイテムは必ず別アイテムにリンクしなければならないからです。
どんなに条件付のリンク先を設定しても、それらの条件が不一致だった場合を用意する必要があります。
従って、1行目は必ず条件無しにしておいた方が良いのです。

| | Comments (0) | TrackBack (0)

26.選択肢による分岐 その4

今回も選択肢についてですが、実はカウンタの説明だったりします。

カウンタの基本的な使い方は、

  1. 起動時、初期値は0
  2. ある場所を通過した際にカウンタに1をセット
  3. 選択肢の条件に、カウンタ値を参照する

という事です。
ですから、前回講座でやったように、
「Aルートを通ればBルートが発生する」という処理は非常にシンプルに行う事が出来ます。

ところが、
「AルートとBルート、両方通過した場合のみCルートが発生する」
というような、カウンタ値を複合的に参照する場合はどうしたら良いのでしょうか。

ユウキノベルの基本仕様において、条件判断は一つのカウンタしか参照できません。
従って、スクリプト的に二段構えの準備をする必要があります。

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

「AルートとBルート、両方通過した場合のみCルートが発生する」
という処理を行う為に、
「AルートとBルートを通過していたらCルート用カウンタに1をセットする」
という処理を前もって行っておきます。

今回のスクリプトの要件は、
選択肢の場合と同じように、自動リンクの場合でも条件判断を付加出来るという事です。

自動リンクでの条件判断には、幾つか注意点があります。
その詳細は次回講座に譲るとして、今回はスクリプトの流れ、カウンタ値の変化を理解しましょう。

例えば今回、「アナザー1+2」カウンタは繰越しをしない設定になっています。
何故そうなっているのか、自分で考えてみて下さい。
(本当のところ、繰越しをするという設定でも結果は同じです。けれど頭の中でカウンタ値の変化を把握できるという事が大切です)

条件判断の為にテキストが空のアイテムを使用する。

これは、ユウキノベルでは比較的良く使われるテクニックです。
ユウキノベルはあくまでサウンドノベル製作に特化したツールですが、
部分的にどうしてもアドベンチャー的な要素を持たせたい場合があります。
その時に、空アイテムは頻繁に使われる事になります。

| | Comments (0) | TrackBack (0)

25.選択肢による分岐 その3

前回の講座にて、「エンディングを見たら選択肢が増える」という場合を説明しました。

けれども、前回の講座は「わかりやすさ優先」で解説しています。
実用的にはイマイチなので、今回更につっこんだ解説をしてみます。

「エンディングを見たら選択肢が増える」という状況は幾つか考えられます。
プレーヤーを飽きさせないように物語にバリエーションを与える場合があります。
また、推理物であれば状況によってヒントを提示する場合もあるでしょう。
しかし、サウンドノベルファンである私達に印象深いのは、アナザーストーリーへの展開です。

そんな訳で、今回は
AというルートをクリアするとBルートが現れ、
BルートをクリアするとCルートが現れる、
そんなイメージでスクリプトを組んでみました。

今回は先にサンプルを実行して、前回との違いを感じてみて下さい。

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

スクリプトの修正箇所を説明します。

  1. カウンタ「エンディング」を削除し、新規に「アナザー1」「アナザー2」カウンタを作成
  2. カウンタ「エンディング」を削除した事に伴い、ENDアイテム内のカウンタセットを廃止
  3. アイテム「カラス」内で「アナザー1」カウンタに「1」をセット
  4. アイテム「女子高生」内で「アナザー2」カウンタに「1」をセット
  5. アイテム「前振り」での選択肢において、「リンク2、3」に、それぞれ「アナザー1、2」の条件を付加する

スクリプトの流れを辿って、いつカウンタに1がセットされ、いつ選択肢の状態が変化するか、
理論的に把握できるようにテストプレイを行ってください。
(そんなに難しい話ではないはずです)

テストプレイは、「テストプレイ」というボタンを押して実行します。
古いPCを使用している場合、稀にPCが固まる場合があるかもしれません。
なので、テストプレイ直線にスクリプトデータを保存する癖をつけておきましょう。

テストプレイでは、極力デバッグモードを使用します。
テストプレイを開始した直後に、デバッグモードを使用するか、問い合わせがあります。

デバッグモードでは、テストプレイ中にファンクションキー5を押すことによって、
カウンターの値を確認する事が出来ます。
また、テストの為に強制的にカウンタの値を変更することも出来ます。

今回のスクリプトは非常に簡単なものですが、
作業に慣れる為、テストプレイ中にF5キーを押して、カウンタ値がどうなっているか確認してみて下さい。

| | Comments (0) | TrackBack (0)

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)