準備をしよう
本体をダウンロード・解凍しよう
本体をダウンロードページからダウンロードしましょう。
ダウンロードしたデータは圧縮されているので、解凍ツール(windowsエクスプローラーやLhazなど)を使用し、好きな場所に解凍しましょう。
フォルダ構成を確認しよう
解凍したフォルダの構成を見てみると、次のようになっています。
収容するファイルの種類が異なるので、確認しておきましょう。
- フォルダ「_export」……配布する際に使用するものを収めているフォルダ。
- フォルダ「BGM」……音楽データを入れるフォルダ。
- フォルダ「Config」……コマンドなどについての設定が入っているフォルダ。
- フォルダ「Dlls」……エンジンの動作に用いられるファイルが入っているフォルダ。
- フォルダ「Fonts」……フォントを入れるフォルダ。
- フォルダ「Images」……画像データを入れるフォルダ。
- フォルダ「Movies」……動画データを入れるフォルダ。
- フォルダ「Particles」……パーティクル効果の素材を入れるフォルダ。
- フォルダ「Patch」……パッチ作成時に素材を入れるフォルダ。
- フォルダ「SaveData」……セーブデータが作られるフォルダ。
- フォルダ「Scripts」……シナリオを入れるフォルダ。
- フォルダ「SFX」……効果音を入れるフォルダ。
- フォルダ「Shaders」……特殊効果を入れるフォルダ。
- フォルダ「Voices」……音声データを入れるフォルダ。
- Light.exe……ゲームアプリケーション。
- LightEditor.exe……スクリプトエディター。
- README.txt……必ず読むべきファイル。
- setting.xml……エディターの設定ファイル。
サンプルをプレイしよう
解凍したフォルダにはサンプルスクリプトがあります。
サンプルスクリプトはLight.vnの機能等を把握するための最良の教科書です。
エディターを開いてF5キーを押せばサンプルスクリプトをテストプレイできるので、制作を始める前にエディターで表示されるスクリプトを眺めながらテストプレイをしてみましょう。
最初は機能を大まかに把握するだけでも大丈夫です。
エディターを確認しよう
エディターを起動し、ウィンドウ内の各領域が担う機能を確認しましょう。
- メニューバー
ウィンドウ内の最上部にあります。
- ファイル
- 新規プロジェクト作成
新しい制作用フォルダを作成します。
新しいフォルダには素材ファイルが無いので、自分で素材を用意する必要があります。 - 新規スクリプト
新しいスクリプトファイルを作成し、スクリプトタブに追加します。 - 現在スクリプトを保存
スクリプト領域で表示しているスクリプトを上書き保存します。
ショートカットキー:CTRL+S - Light.vnを終了
エディターを閉じます。
終了前にダイアログが表示されます。
終了時にはスクリプト領域で保存しているスクリプトを自動で上書き保存します。
ショートカットキー:ALT+F4
- 新規プロジェクト作成
- 表示
- プレビュー画面拡大
エディター上におけるプレビュー領域の大きさを変更します。
縦横の大きさを、設定したノベル解像度の「50%」「75%」「100%」のいずれかから選択できます。
- プレビュー画面拡大
- ノベル
- 現在位置からテストプレイ開始/中止
スクリプト領域に表示しているスクリプトのテストプレイを開始または中止します。
スクリプト上にカーソル行が存在する場合には、ひとつ下の行からテストプレイを開始します。
スクリプトファイル自体を参照して動作するので、スクリプト領域上で上書き保存されてない変更はテストプレイに反映されません。
また、テストプレイ中はスクリプト領域における新たな変更を反映しません。 - ノベル設定
ゲーム全体に関する設定や、エディターに用いる文法ファイルの変更等を行います。 - ノベル配布
新しいフォルダを作成し、作品を出力します。
- 現在位置からテストプレイ開始/中止
- ヘルプ
- 支援ファイルフォーマット
Light.vnで使用できる素材のファイル形式を表示します。 - Light.vnについて
Light.vnの紹介文を表示します。
- 支援ファイルフォーマット
- スクリプトタブ
メニューバーの直下にあります。
エディターで編集するスクリプトはこの領域に並びます。
スクリプトタブに表示されていないスクリプトファイルも、フォルダ「Scripts」内に納めていれば出力されます。
領域の右端には3つのボタンがあります。
- 新規スクリプト
機能はメニューバーの「新規スクリプト」と同様です。 - 開く
フォルダ「Scripts」内にあるスクリプトファイルをスクリプトタブに加え、スクリプト領域に表示します。 - 閉じる
スクリプト領域で表示しているスクリプトをスクリプトタブから除きます。
スクリプトを削除するのではありません。
- ショートカットボタン
ウィンドウ内の左端、スクリプトタブの直下にあります。
スクリプト上にカーソル行が存在する状態でボタンをクリックすると、表記されているコマンドの既定値をカーソル行に記述します。
一部のコマンドでは素材や座標の指定が必要となるので、説明バー等の指示に従ってください。
コマンドを手入力するよりも確実性が増すので、ショートカットボタンのあるコマンドはこれを積極的に使用しましょう。
- プレビュー領域
ショートカットボタンの右側、スクリプト領域の左側、スクリプトタブの直下にあります。
テストプレイ時にゲームが表示され、動作します。
リアルタイムプレビュー機能を使用している場合には、カーソル行までのスクリプトを反映して表示します。
- スクリプト領域
ウィンドウ内の右端、スクリプトタブの直下にあります。
編集中のスクリプトを表示します。
上書き保存をするまで、スクリプト領域上におけるスクリプトの変更はスクリプトファイルに反映されません。
スクリプトタブでスクリプトを移動する際には、変更が自動でスクリプトファイルに反映されます。
- 説明バー
プレビュー領域の直下にあります。
プレビューやテストプレイ、ショートカットボタンに関する説明や指示を表示します。
- スクリプト状態
説明バーの直下、左側にあります。
スクリプトの読込みに関するゲームエンジンの動作状態を表示します。
- エディター動作設定
スクリプト状態の直下にあります。
エディターの一部の動作を設定・変更できます。
- commands
説明バーの直下、中央にあります。
すべてのコマンドとその説明とを表示します。
- 情報バー
ウィンドウ内の下端にあります。
エディターの動作状態に関する情報をリアルタイムで表示します。
対応しているファイル形式を確認しよう
Light.vnで素材として使用できるファイル形式は以下のとおりです(LightEditor記載分:Ver6.0.0)。
支援外のファイル形式の素材を使用するとエラーを出す場合がありますので、しっかりと確認しましょう。
最新のものは「支援ファイルフォーマット」から確認できます。
テキストデータ
- txt(文字コード:UTF-8)
画像データ
- bmp
- png
- tga
- jpg
- gif
- psd
- hdr
- pic
音楽データ
mp3は法律上の問題で支援していません
- ogg
- wav
- flac
- aiff
- au
- raw
- paf
- svx
- nist
- voc
- ircam
- w64
- mat4
- mat5
- pvf
- htk
- sds
- avr
- sd2
- caf
- wve
- mpc2k
- rf64
制作用のフォルダを用意しよう
素材とエディター等を収めるフォルダを用意しましょう。
以下のような方法があります。
- フォルダを新規作成する
あなたのPC上に制作用のフォルダを新規に作成します。
まず、メニューバーの「ファイル」から「新規プロジェクト」に移動します。
次に、制作用のフォルダを作る場所を指定します。
最後に「OK」を選択すれば、指定した場所に「Light.vn-new」というフォルダが作成されます。
フォルダ内にはダウンロードしたものと同じ構成のフォルダとファイル、エディター等が収められているので、あとは各フォルダに素材を入れてゆきましょう。
- フォルダごとコピーする
ダウンロードしたフォルダをコピーして任意の場所に貼り付けても制作用フォルダとして用いることができます。
この場合は素材もコピーされます。したがって、ダウンロードしたフォルダ内にある素材を容易に流用できます。
- ダウンロードしたフォルダをそのまま使う
ダウンロードしたフォルダをそのまま制作用フォルダとすることもできます。
Light.vnで用意されている素材やスクリプトの流用が多いならば、この方法でも可能でしょう。
制作をしよう
※リアルタイムプレビュー機能を使用することを前提としています。
知っておきたいこと
いくつかのコマンドや個体に共通する要素があるので、先に紹介しておきます。
スクリプトとエンジンを知ろう
- 「Light.vnはエンジンでスクリプトを読込んで様々な動作を行います」
一文で書き表すなら上記のようになるのですが、もう少し細かく説明します。 - スクリプトとは、エンジンを動かす指示書や台本というイメージに近いものです。
Light.vnのゲームエンジンは、フォルダ「Scripts」内に収められているスクリプトファイルを読込み、スクリプトの記述を1行ずつ参照し、その行の記述が指示する内容に即した動作を行ってゆきます。 - スクリプトに記述するのは「コマンド」と「テキスト」です。
「コマンド」は、ゲームエンジンで行える様々な動作や機能を指示するものです(項目参照:コマンド)。
「テキスト」は、画面上に表示するためのテキストを指します(項目参照:テキスト)。
スクリプトにおける記述の仕方によって、エンジンは行内の記述がコマンドとテキストのいずれであるのかを判別して動作します。 - 特定の条件下(テキスト行末尾の「\w」等)において、エンジンはスクリプトの読込みを一時停止して待機状態に入ります。
待機状態を解除するには、コマンド「続行」の適用が必要となります。
一般的なノベルゲームにおける「クリックやエンターキーの入力によって進行する機能」は、コマンド「続行」をエンターキーや左クリック等に対してコマンド「キートリガー」を用いて設定しておく必要があります。
ほぼすべての作品において必須となる機能なので、ゲームを起動すれば常にそれらのキートリガーが設定されるようなスクリプトを作りましょう(項目参照:キートリガー)。
というわけで、まずは新しいスクリプトの先頭行に「キートリガー enter 続行」と記述してから、以下の解説をご覧になってください。
※以下の解説においては、コマンド「キートリガー 続行」の設定を終えているものとします。
レイヤーを知ろう
- レイヤーとは、画面上における個体の表示順のことです。
個体を設定する際には設定項目として必ず指定します。 - レイヤーの数値が大きいほど、個体は手前に表示されます。
同じレイヤー上で複数の個体の領域が被る場合には、直近に設定された個体が手前に表示されます。
透明度を知ろう
項目参照:透明度
- 透明度とは、0を透明、255を不透明とする尺度です。
コマンド「透明度」で設定・変更ができます。
検索・置換機能を使おう
項目参照:正規表現に触れてみよう
- テキストエディタ等でよく見かける検索・置換機能ですが、Light.vnにもそれらの機能は存在します。
- 「検索」は、スクリプト内の記述から特定の文字や単語、語句を探し出します。「CTRL」+「F」で検索の小ウィンドウを出すことができます。
- 「Text to Find:」には「検索をしたい文字等」を入力します。
- 「Find Next」で、カーソルまたは選択範囲の直後から検索を始め、指定した文字等を探し出します。
- 「置換」は、スクリプト内の記述から特定の文字や単語、語句を探し出し、別の単語に置き換えます。「CTRL」+「H」で置換の小ウィンドウを出すことができます。
- 「Text to Find:」には「置換をしたい文字等」を、「Replace with:」には「置換結果となる文字等」を、それぞれ入力します。
- 「Find Next」で、カーソルまたは選択範囲の直後から検索を始め、指定した文字等を探し出します。
- 「Replace」で、探し出した文字等(選択範囲)を置換します。
- 「Replace all」で、検索によって探し出されるすべての文字等を一気に置換します。
- 検索・置換機能には、文字等を探し出す際のオプションがあります。「Options」でオプションのチェックボックスを表示できます。
- 「Case Sensitive」
大文字と小文字を区別します。 - 「Search up」
通常は上から下、左から右へと検索が進みますが、これを選択すると方向が反転し、下から上、右から左へと検索が進みます。 - 「Match whole Word」
完全一致することが条件になります。 - 「Regular Expression」
正規表現を使用します(正規表現については別項を参照)。 - 「Wildcards」
ワイルドカードを使用します(ワイルドカードに関する記述は後日追加)。
- 「Case Sensitive」
ゲームの設定をしよう
制作を始めるにあたって、最初にゲームの諸要素の設定を行いましょう。
設定をするにはメニューバーから「ノベル」→「ノベル設定」へと進みます。
作品のタイトルを決めよう
- 「ノベルタイトル」には、作品のタイトルを入力します。
入力したタイトルはゲームウィンドウに表示される名前に反映されます。 - 「ノベルフォルダ名」には、作品の出力フォルダ名となる英数字を入力します。
タイトルに関連のあるものにするとよいでしょう。
最初に読込むスクリプトを指定しよう
- 「スタートスクリプト」には、ゲーム起動時において最初に読込むスクリプトを指定します。
基本的にはタイトル用のスクリプトとなるでしょう。
解像度を設定しよう
- 「ノベル解像度」には、ゲーム画面の既定解像度(ゲーム画面の大きさ)を指定します。
幅と高さの比は4対3か16対9が一般的です。
極端な比にすることもできます。
ダイアログ用のスクリプトを指定しよう
- 「メッセージスクリプト」には、コマンド「ダイアログ」を設定したり、ウィンドウの閉じるボタンを選択した場合において読込むスクリプトを指定します。
最初はサンプルのものを参考にしておきましょう。
アイコン画像を指定しよう
- 「アイコン」には、ウィンドウ上部やタスクバー上に表示されるアイコンに用いる画像を指定します。
- アイコン画像の対応ファイル形式はLight.vnで支援しているものと同じです。
サイズは32×32が推奨されています。
テキストを表示しよう
ノベルゲームの基礎であるテキストを画面に表示させてみましょう。
フォントファイルを用意しよう
- Light.vnはPC内のフォント等を利用しないため、作品内で使用するフォントはフォルダ「Fonts」に入れておく必要があります。
- 使用したいフォントは、必ずライセンスを確認してからフォルダに入れましょう。
お使いのPCに導入しているフォントの使用に関しても、念の為にライセンスを確認しておきましょう。
読み進めるテキストを表示しよう
項目参照:文字窓・使用文字窓・テキスト・文字自動待機・文章消去
- 一般的なノベルゲームで見られる「入力によってプレイヤーが読み進めるテキスト」は、コマンド「文字窓」「使用文字窓」を用いることで実現できます。
スクリプトにコマンド「文字窓」「使用文字窓」を設定して、その下に「"」を記述し、なにかテキストを入力してみましょう。
画面上にテキストが表示されれば、文字窓が正しく設定されているので、以降のテキストは文字窓に表示されてゆきます。 - 文字窓は基本的に画像よりも手前に表示するものなので、レイヤーの数値は大きめに設定しましょう。
- プレイヤーの入力を待機させるには、テキストの行末に「\w」を記述するか、コマンド「文字自動待機」を設定します。
- 文字窓に表示しているテキストを一旦消してから新しいテキストを表示したい場合には、新しいテキストの行頭に「"」を記述するか、コマンド「文章消去」を設定します。
- テキストは文字窓の領域内に留まるよう折り返して表示されますが、途中で改行させたい場合には、スクリプト上で改行させ、改行するテキストの行頭に「.」を記述します。
テキストを単独で表示しよう
項目参照:文字
- 他のテキストの影響を受けないテキストを表示させたい場合には、コマンド「文字」を用います。
文字窓に表示されるテキストと異なり、コマンド「文字」を用いて表示されたテキストは個体として扱われるので、文章表現に則らず、特定のコマンド(コマンド「アウト」等)の設定があるまで表示され続けます。
イメージを表示しよう
物語の舞台や状況、登場キャラクター等を示す画像を画面上に表示させてみましょう。
背景を表示しよう
項目参照:背景
- 背景を表示するには、コマンド「背景」を用います。
背景は自動的にレイヤーが最も下になるので、レイヤーによる表示順序を考慮する必要がありません。
また、背景に用いる画像は自動的にウィンドウのサイズに変更されるので、可能ならば既定解像度よりも大きいサイズの画像を用意するといいでしょう。
画像を表示しよう
項目参照:絵
- 立ち絵などの画像を表示するには、コマンド「絵」を用います。
背景は1枚のみ設定できますが、コマンド「絵」では個体名の数だけ個体を設定できます。 - 画像はレイヤーの影響を受けるので、画像の設定時にはレイヤーの数値に注意しましょう。
背景や画像を交換しよう
項目参照:画像
- 設定した背景や画像を、個体名や座標を保ったままで別の画像に変更するには、コマンド「画像」を用います。
ショートカットボタンでは「画像変換」が該当します。 - 交換したい背景や画像の個体名を指定すれば、その個体に用いる画像素材が変更されます。
効果時間を設定すると交換がなめらかに行われます。 - コマンド「背景」「絵」において、画面上に存在する個体の個体名を再び用いることでも画像素材の変更ができます。
この場合は座標が保持されないので、再設定する必要があります。
また、コマンド「背景」「絵」には効果時間の設定項目が無いので、変更は即座に行われます。
音を使おう
場面を演出する音楽を取り入れてみましょう。
BGMを再生しよう
項目参照:背景音
- BGMを再生するには、コマンド「背景音」を用います。
- 複数の楽曲をBGMとして同時に再生することはできません。
- すでにBGMを再生している場合において、再度コマンド「背景音」を設定すると、BGMが即座に交代されます。
- エディター動作設定において「編集中に背景音楽再生動作」を適用しておくと、カーソル行をエンジンが読込んだ状況において再生される予定のBGMが、エディターでのスクリプトの編集中に再生されます。
場面想定に役立つので、制作環境に問題が無ければ適用しておくことをおすすめします。
効果音を再生しよう
項目参照:効果音
- 効果音を再生するには、コマンド「効果音」を用います。
- BGMと異なり、効果音の再生はテストプレイをしないと確認できません。
また、複数の効果音を同時に再生できます。
音声を再生しよう
- 音声を再生するには、コマンド「ボイス」「背景ボイス」を用います。
- コマンド「ボイス再生」を適用することで、コマンド「ボイス」で直近に再生された音声をもういちど再生することができます。
ボタンを作ろう
選択することでコマンドを適用できるボタンを設置しましょう。
コマンドを用いるためのボタンを設置しよう
- クリックすることでコマンドを適用することができるボタンは、コマンド「ボタン」で実現できます。
一般的なノベルゲームで見られるオートやスキップを適用するためのボタンの他に、選択肢としても用いることができます。
特定のボタンだけが作動するようにしたい時は
項目参照:ボタン活性領域
- ボタンは上位のレイヤーに存在する画像等によって隠れていたり、コマンド「透明度」によって透明にされていても、領域上でクリックされれば作動します。
ただ、コンフィグ画面やセーブ画面等においては、もともと設置しているボタンを退場させることなく、新たに設置するボタンのみを選択対象にしたい場合もあるでしょう。
その場合には、選択対象に含めたいボタンを設定する前に、コマンド「ボタン活性領域」を設定しておきましょう。
このコマンドを設定すると、以降の行から「script_fin」と記述された行を読込むまでの間に設置されたボタンのみが選択対象となります。
簡単な効果を使おう
設定した個体にあれこれしてみましょう。
個体を退場させよう
項目参照:アウト
- ここまで来ると、画面上にたくさんの個体が表示されていて、画面や音が混みあっていることでしょう。
個体を退場させたい場合には、コマンド「アウト」を用います。
このコマンドを適用することで、背景・画像・音楽等、設定した個体を退場させることができます。 - 効果時間を設定すると、徐々に退場してゆくようにすることができるようになります(フェードアウト)。
個体を登場させよう
- ここまでの画像や音の個体はどれも即座に表示・再生されたはずですが、演出によっては、徐々に表示したり、無音から音量を上げたいという場合もあるでしょう。
その場合には、コマンド「イン」を用います。 - コマンド「イン」は、対象に指定した個体の素材が画像の場合には、効果時間を設定することで透明から徐々に不透明へと変化させて登場させることができます(フェードイン)。
対象に指定した個体の素材が音の場合には、効果時間を設定することで無音から徐々に音量を上げながら登場させることができます(フェードイン)。 - コマンド「背景」「絵」「ボタン」は、コマンド名の末尾に「0」を付与して「背景0」「絵0」「ボタン0」とすれば、設定時に透明度を0に設定したうえで登場させます。
したがって、これらをあらかじめ設定しておいたうえで、コマンド「イン」を適用して視認できるようにすることもできます。
ただし、ボタンに関しては透明度が0でも作動するということに注意しましょう。
個体を移動させよう
項目参照:移動
- 個体の位置の変更は、コマンドの再設定の他に、コマンド「移動」を用いることでも可能です。
コマンド名のとおり、このコマンドでは個体を特定の座標まで移動させます。 - 効果時間を設定すると、移動がなめらかに行われ、移動の軌跡を見ることができるようになります。
個体を拡大しよう
項目参照:拡大
- 個体の画面上における表示サイズを変更するには、コマンド「拡大」を用います。
拡大だけでなく、縮小も可能です。 - 効果時間を設定すると、徐々に拡大や縮小をしてゆきます。
個体を透明に近づけよう
項目参照:透明度
- コマンド「透明度」を適用すると、個体を透明に近づけてゆくことができます。
半透明にしてみたり、透明にして画面上で視認できなくしたりと、演出にも効果を発揮するでしょう。
システムを組み上げよう
スクリプト間を移動したり、一般的な機能を実装して、ゲームシステムを組み上げてみましょう。
コマンド「ジャンプ」でスクリプトを移動しよう
- ひとつのスクリプトファイルだけでは、実装できる機能に限界がありますし、制作中に物語の区切りを見失いそうになります。
そこで、複数のスクリプトを用意し、コマンド「ジャンプ」を用いて、読込むスクリプトを移動しましょう。 - このコマンドを用いると、移動先に指定したスクリプトを読込みます。
スクリプトのファイル名のみを記述すると、そのスクリプトの先頭行から読込みを始めます。
スクリプト上にコマンド「栞」を用いて栞を設定し、スクリプトのファイル名に併せて栞名を記述すると、その栞が存在する行から読込みを始めます。 - このコマンドを用いてスクリプトを移動すると、再びコマンド「ジャンプ」または「スクリプト」を適用しない限り、元のスクリプトには戻りません。
したがって、章を持つ物語などにおいて章間を移動する場合には適していますが、コンフィグやセーブ・ロード画面用のスクリプトに対して用いる場合にはあまり適していません。
コマンド「スクリプト」でスクリプトを参照させよう
- 読込むスクリプトを移動する方法としては、コマンド「スクリプト」を用いるというものがあります。
スクリプトの移動そのものや、移動先の指定方法、読込み動作等は、コマンド「ジャンプ」と同様です。 - このコマンドを用いてスクリプトを移動すると、移動先のスクリプトにおいて「script_fin」と記述された行を読込んだ段階で、元のスクリプトの、コマンド「スクリプト」を適用した行まで戻ってから読込みを再開します。
したがって、画面の状態等を保存しつつ、別のスクリプトによる動作を適用したい場合に適しており、コンフィグやセーブ・ロード画面等のスクリプトへの移動にはコマンド「スクリプト」を用いるほうがよいでしょう。
コマンド「待機」にオプションをつけよう
項目参照:待機
- コマンド「待機」にはオプションを付与することができ、それによってコマンド「続行」の適用以外の方法を待機状態の解除条件にすることができます。
- オプションに数値を記述すると、その数値の時間だけ待機をして、時間経過とともに待機状態を解除します。
- オプションに「一般進入防止」と記述すると、以降の行はコマンド「ジャンプ」等を適用しなければ読込まれなくなります。
選択肢やボタンの表示後等、プレイヤーがクリック等の入力を行っても待機状態を解除しないようにしたい場合には、このオプションを設定したうえで、以降の行に移動先の栞を設定しておきましょう。
最も強力な待機状態なので、基本的にはコマンド「待機」を設定すればこのオプションを付与すると考えてもいいかもしれません。
オート進行・スキップ機能を実装しよう
- 一般的なノベルゲームで見られるオート進行モードやスキップモードを実装するには、コマンド「文字進行」を用います。
基本的にはボタンにコマンドとして設定するか、キートリガーとして任意のキーに割り振ります。 - コマンド「文字進行 1」「文字進行 *1」は、オート進行モードに該当します。
オート進行モードを適用すると、特定の時間が経過すれば、コマンド「待機」(オプション無し)や、テキスト側から指示される入力待機を自動で解除します。
したがって、プレイヤーがキーなどを入力しなくてもテキスト表示が進行し、効果や演出も適用されてゆきます。
待機解除までの時間を変更したい場合には、コンフィグ機能を用いてもらうことになります(項目参照:コンフィグ機能を実装しよう)。 - コマンド「文字進行 2」「文字進行 *2」は、スキップモードに該当します。
スキップモードを適用すると、コマンド「待機」(オプション無し・時間指定)や、テキスト側から指示される入力待機を自動で解除しつつ、一部の演出を省略しながら(効果時間の無効化等)、テキスト表示を高速で進行させます。
スキップモードによる高速進行は、コマンド「待機 一般進入防止」によって一時的に停止できます。スキップモードを解除することなく待機させたい場合にはこのコマンドを用いましょう。
セーブ機能を実装しよう
項目参照:ボタン・ボタン活性領域・待機・セーブ・セーブ削除・データページ変更・変数
- ゲーム作品の必須機能とも言える、セーブ・ロード機能。ここでは、そのうちのセーブ機能を実装しましょう。
なにも無い状態から作るのはかなり複雑になるので、以下では通常版のサンプルスクリプトにある「sys_save.txt」を参考にします。 - まずは、どのような状況でセーブ画面を表示してもセーブ画面以外のボタンを誤作動させないようにするために、コマンド「ボタン活性領域」を記述しておきます。
システム系のスクリプトにはほぼ必須となる作業です。 - 直後の行にある2つの変数は、両方を設定することでデータページ機能を用いることができるようになるものです。
データページ機能に関しては、今のところは「ひとつぶんのページを作るだけで、いくつものページを作ることができる機能」という認識でいてください。
上の変数(vn_slotsPerPage)は、「セーブ画面1ページに表示するセーブスロットの数」を決めるものです。ここで決めた数だけ、セーブスロットを設定することになります。
下の変数(vn_slotPageMax)は、「セーブ画面を何ページ用意するか」を決めるものです。
どちらも、変更する場合にはスペースを消さないように注意しましょう。 - コマンド「セーブ」を適用してセーブデータを記録すると、記録時の画面のスクリーンショットを撮り、ボタンの画像素材として用います。
また、画面上に存在する個体の情報を記録し、ロード時に反映します。
ところが、セーブ画面のスクリプトにおいて設定する個体は基本的にスクリーンショットにもセーブデータにも反映させないものですので、個体名を命名する際には先頭に「~」を記述します。
これによって個体はセーブ時のスクリーンショットに記録されず、セーブデータにも記録されなくなります。 - セーブ画面で設定する個体のレイヤーは基本的に大きくしておきましょう。
- ボタンに設定するコマンドに、コマンド「セーブ」「セーブ削除」を用いると、ボタンの選択時にダイアログが表示されるようになり、コマンド「セーブ」を設定したボタンはセーブスロットになります。
便利な機能なので、基本的にこれらのコマンドはボタンの設定コマンドとして用いましょう。 - 変数「vn_saveinfo」には、末尾に記述した番号のスロットにセーブデータが記録された時点の年月日と時刻が記録されます。
サンプルスクリプトではコマンド「文字」のテキストとして用いられています。
コマンド「文字」のテキストに変数を代入値として用いる場合には、コマンド「文字」が設定された時点における変数の値を反映しますが、そこから変数の値が変化しても、表示される文字には反映されません。
したがって、セーブ時・セーブデータ削除時・データページ変更時にコマンド「文字」を更新するようなスクリプトを組む必要があります。
サンプルスクリプトでは、コマンド「待機 ボタン選択」「ジャンプ display_info」を用いることで対応しています。 - もし100ページもあるセーブデータ画面を作ろうと思っても、100ページ分のボタン等を設定する必要はありません。どのページにも同じ数のセーブスロットを表示するのならば、データページ機能を用いるとよいでしょう。
サンプルスクリプトで設定しているセーブスロットはスロット番号1~6の6個ですが、コマンド「データページ変更」を用いると、エンジン側で自動的にスロット番号を変更します。
したがって、冒頭で設定した2つの変数の積の数だけのセーブスロットを、1ページ分のスロットを設定するだけで作ることができます。
本来は使用に際してかなり複雑なスクリプトを組む必要があるのですが、サンプルスクリプトどおりにすればほぼ問題なく使用できます。ぜひ踏襲しましょう。 - セーブ画面を表示する際には、コマンド「スクリプト」を用いるようにしましょう。
ロード機能を実装しよう
項目参照:ボタン・ボタン活性領域・待機・ロード・セーブ削除・データページ変更
- ロード機能に関しては、セーブ画面のスクリプトを複製し、コマンド「セーブ」を「ロード」に変えるだけでもスクリプトが完成します。
- ボタンに設定するコマンドに、コマンド「ロード」を用いると、そのボタンはセーブスロットになり、ボタンの選択時にダイアログが表示されるようになります。
便利な機能なので、基本的にコマンド「ロード」はボタンの設定コマンドとして用いましょう。 - ロード画面を表示する際には、コマンド「スクリプト」を用いるようにしましょう。
バックログ機能を実装しよう
項目参照:文字窓・バックログ設定・イン・待機・バックログリセット
- ノベルゲームは基本的にテキストが主役となるゲームなので、プレイヤーが読むテキスト量は多くなります。すると、少し前に読んだはずの文章をうっかり忘れてしまったりすることが起こりえます。
そんな場合に読んだテキストを振り返ることができる機能がバックログ機能です。
Light.vnではコマンド「バックログ設定」をすることでバックログ機能を用いることができるようになります。
以下では通常版のサンプルスクリプトにある「sys_backlog.txt」を参考にします。 - バックログとは「文字窓上に表示したテキストを記憶し、その記録を表示する機能」のことを指します。
エンジンがテキストを記録するようにするためには、コマンド「バックログ設定」を設定してバックログ機能の適用開始を指示する必要があります。
したがって、テキストの表示を開始する時点において必ずバックログの設定が行われるようなスクリプトを作る必要があります。
具体的には、たとえば文字窓用のスクリプトに、コマンド「スクリプト」を用いてバックログ設定用のスクリプトを呼び出すようにするとよいでしょう。 - バックログを表示するには文字窓を用いることになるので、コマンド「文字窓」で予めバックログ用の文字窓を設定したうえで、コマンド「バックログ設定」を設定するようにしましょう。
ちなみに、コマンド「バックログ設定」においてバックログ表示用に指定された文字窓は退場しますが、コマンド「イン バックログ」できちんと呼び出せるので心配しないでください。 - バックログは最下部までスクロールされている状態においてホイールダウンを入力されると、バックログのスクリプトにおけるあらゆる待機状態を解除し、退場します。
これには「待機 一般進入防止」も含まれるので、注意が必要です。 - バックログは設定以降に文字窓で表示されるすべてのテキストを記録し続けるので、次第に記録量が増え、表示量も増えます。
その記録を初期化するには、コマンド「バックログリセット」を用います。
このコマンドを用いると、バックログとして記録されていたテキストを初期化してから、記録を再開します。バックログ機能そのものを消去するわけではありません。
コンフィグ機能を実装しよう
項目参照:ボタン・ボタン活性領域・待機・スクリーン・文字スキップ方式・トラックバー・開く
- ゲームの動作には、テキストや効果等、表示に速さを持つものがあります。また、画面の大きさや音量もゲームに関係してくるでしょう。
それらをプレイヤー側で調整してもらう機能がコンフィグ機能です。
以下では通常版のサンプルスクリプトにある、ファイル名に「sys_config」が付いているスクリプトを参考にします。 - まずはセーブ・ロード画面のスクリプトと同様に、コマンド「ボタン活性領域」を記述しておきます。
- 一般にコンフィグ機能で提供する調整項目は、「画面サイズ」「未読部分におけるスキップモードの動作」「テキスト表示速度」「オート進行モード適用時のテキスト表示速度」「オート進行モード適用時の待機時間」「主音量」「BGM音量」「効果音音量」「ボイス音量」です。
また、各種の情報をコンフィグ画面に表示することもあります。
これらの中から、作品において必要とされている項目を選んで、コンフィグ画面のスクリプトに追加してゆきましょう。 - 調整項目「画面サイズ」「未読部分におけるスキップモードの動作」は、それぞれコマンド「スクリーン」「文字スキップ方式」をボタンのコマンドとして設定することで実装します(コマンドの詳細に関しては各項目を参照)。
- 残る調整項目の実装には、コマンド「トラックバー」を用いましょう。
トラックバーとは、数値等の大小やその調整を視覚化するためのもので、プレイヤーが直感的に調整することを可能にします。
調整項目ごとにコマンド「トラックバー」において指定する変数名が異なるので、項目を参照してください。- 音声素材に関しては、コマンド「トラックバー」の設定項目「変数名」に「ボイス」と記述する他に、コマンド「ボイス」「背景ボイス」の設定項目「音量数値変数」で設定した変数名を記述することもできます。
これによって、特定のボイス素材のみを調整対象にすることができます。したがって、たとえば特定の登場人物の音声に対して同じ変数名を設定すると、その登場人物のみを対象とする音量の調整項目を設定することができます。
- 音声素材に関しては、コマンド「トラックバー」の設定項目「変数名」に「ボイス」と記述する他に、コマンド「ボイス」「背景ボイス」の設定項目「音量数値変数」で設定した変数名を記述することもできます。
- 各種の情報には、コマンド「開く」を用いることでサイト等へのリンクを設定することができます。
制作者のサイトや、素材元のサイトへのリンクとして用いるとよいでしょう。 - コンフィグ画面を表示する際には、コマンド「スクリプト」を用いるようにしましょう。
作品を出力・配布しよう
作品のチェックを繰り返そう
作品の完成を宣言する前に、必ずデバッグと呼ばれる不具合検査と修正を行いましょう。
デバッグをしないと……
- 長編はもちろん、短編作品であっても、不具合は少なからず存在するものです。
もしもそれを放置して作品を配布すれば、プレイヤーが困ります。
プレイヤーはプログラムやスクリプトのことをまったく知らない人もいるので、もしもそのような人がプレイ中にエラー表示を出されたらとても驚いてしまいます。
もちろんそういう事態が発生すれば制作者にも悪影響はありますが、最も困るのはプレイヤーであるということを忘れずにデバッグをするよう心がけましょう。
デバッグの方法を知ろう
- 不具合には「制作者のスクリプトの不備によるもの」と「エンジン処理やコマンド動作自体の誤作動によるもの」があります。
どちらも原因の把握が簡単ではなく、区別するのも難しいです。
基本的には、「コマンド単体の動作まで絞って確認して、不具合が発生している場合」は後者である可能性が高く、そうでない場合は前者である可能性が高いでしょう。
また、エラーウィンドウが出る場合にはコマンドの使用要件を満たしていない場合がほとんどであり、したがって前者である可能性が極めて高いです。
ほとんどの不具合は前者ですが、もしも後者の可能性が高ければ、エンジン制作者の方に報告しましょう。 - デバッグの方法としては、まず不具合を発見することから始まります。
検査の細かさには段階がありますが、できる限り細かいものを選ぶようにしましょう。
また、不具合の中にはリアルタイムプレビューで確認できないものがあるので、テストプレイで確認するようにしましょう。
以下では粗いものから順に紹介します。また、「前者」「後者」という表現も踏襲します。- スキップモードを適用しながらテキストをすべて表示してゆく
この方法は前者の発見に一定の効果があります。 - 通常進行でテキストをすべて表示してゆく
この方法は両者の発見に一定の効果があります。 - 通常進行でテキスト・各種画面をすべて表示してゆく
この方法は特に前者の発見に効果があります。
各種画面にはスクリプトの不備が発生しやすいので、この方法まではぜひやっておきたいです。 - オート進行でテキストをすべて表示してゆく
この方法は特に後者の発見に効果があります。
ただし、そこまで必要ではないかもしれません。 - 進行モードをランダムに変え、コマンド「続行」を連続で適用しながらテキスト・各種画面をすべて表示してゆく
クリックやエンターキーを押しまくり、進行モードも変えまくり、とにかくめちゃくちゃな操作を行います。
ここで発見した不具合は、発生箇所まで戻り、進行モードごとに確認します。
両者の発見に十分な効果があるものの、果てが無い検査方法なので、適当な段階で切り上げるようにしましょう。
また、確認箇所や操作等を把握しておかなければ重複が発生して効率がさらに落ちます。
- スキップモードを適用しながらテキストをすべて表示してゆく
- 不具合の箇所を確認し、前者と後者のいずれであるかまで把握できれば、修正を行いましょう。
- 前者であればコマンドごとの動作を再度確認し、wikiの記述等を参考にして、そのコマンド構成で本当に自分が意図している動作になるのかを順番に確認してゆきます。
- クリックで勝手に進行してしまう場合には、コマンド「待機」のオプション設定のミスである場合が多いです。
- 意図しないテキストを表示している場合には、変数の代入値のミスや、マクロ機能の影響が考えられます。
- 分岐ミスは変数の演算を見直してみましょう。
- コマンド「ジャンプ」「スクリプト」の失敗は、スクリプトファイル名や栞名のミスを考慮しましょう。
- コマンドの適用抜けは、対象名の指定ミスが考えられます。
対象の複数指定時には特に発生しやすいです。スペースの挿入や、「,」の付与、「~」や「~」を先頭に付与している個体名への、先頭に対する「\」の付与等を再確認しましょう。
スキップモードの仕様である場合もありますが、スキップモードで省略されるのは効果時間なので、設定から行われていない場合には対象名の不備を確認し、それでも確認できない場合には後者である可能性が考えられます。
- 後者であれば制作者の方に報告し、修正を待ちましょう。
報告の際には「発生状況」「不具合の内容」「debug.txt」「作品の制作用フォルダと内容物」を揃えて提出します。
- 前者であればコマンドごとの動作を再度確認し、wikiの記述等を参考にして、そのコマンド構成で本当に自分が意図している動作になるのかを順番に確認してゆきます。
- 「BugTrap」が作動した場合にはエラーが致命的なものであるということなので、この場合にはエンジン制作者の方まで報告しましょう。
報告の前に、まずBugTrapの画面にあるボタン「More...」を選択します。それによってバグ発生時の記録の一部が表示され、いくつかのボタンが展開されます。
次に、展開されたボタンのうち、「Save...」と書かれているものを選択します。それによって、バグ発生時の状況を把握するためのファイルを収めたzipファイルが作成されるので、報告時にはそれと使用環境に関する説明文書(自分で作成します)とを併せて送りましょう。
デバッグを行うタイミングとは
- デバッグを行うタイミングはいくつかあります。
可能であれば3回程度は行いましょう。- 各種画面のスクリプトが完成した段階
タイトル画面等の各種画面は、スクリプトが完成したタイミングで確認しておきましょう。
機能が増えるほど不具合が発生しやすくなるので、画面ごとに確認するように決めておけば、不具合を一度に修正しなければならないという事態を防げます。 - すべてのコマンドを設定した段階
コマンドが作品を通して意図どおりに動作しているかを確認します。
コマンドを設定する度に確認するよりも、いくらかまとめて確認することをおすすめします。 - 完成宣言直前
作品の完成を宣言する前に、必ずデバッグを行いましょう。 - 配布開始直前
配布を開始する前に、仕上げとして不具合の確認をしておくことをおすすめします。
特にzip化等の圧縮を行う場合には、解凍した作品のほうでも確認を行えば十分でしょう。
- 各種画面のスクリプトが完成した段階
作品を出力しよう
完成までもう少しです。ついに作品が形になります。
出力する作品のプログラム形式を知ろう
- 素材にファイル形式が存在したように、Light.vnで出力する作品にもプログラム形式が存在します。
形式は、大別すれば2種類、細かく区別すれば5種類の形式を制作者側で選択できます。
Ver4.5.0現在ではそのうちの4種類がベータ提供(正式には実装が完了していない形式)なので、基本的には「Windows(C++)」で出力することをおすすめします。- 「C++」というプログラム言語を用いる形式
これがLight.vnにおける作品出力の基本的な形式になります。
対応OSは「Windows」で、対応バージョンは「XP」「7」「8」「10」で、「VISTA」は保証外です。 - 「HTML5」というプログラム言語を用いる形式
Ver4.5.0現在ではベータ提供となっています。
対応OSは「Windows」「OS X(Mac系)」「Linux」で、「Browser」はブラウザ(あなたがこのページを閲覧するために用いているものです)での動作に適した形式となっています。
正式実装となれば、配布形態の多様化が見込めます。
- 「C++」というプログラム言語を用いる形式
作品を出力して完成させよう
- 出力作品のプログラム形式を決めたら、いよいよ作品の出力に移りましょう。
出力には、メニューバーの「ノベル」から「ノベル配布」に移動します。- 「ノベル配布経路」では、出力フォルダを作成する場所を指定します。
手入力も可能ですが、右隣の「Browse(...)」を利用するほうが確実です。 - 「ノベル配布形式」では、決めておいたプログラム形式を選択します。
出力は何回でも行えるので、予定外の形式を試してみてもいいかもしれません。 - 「Safe Modeで配布」とは、出力した作品がウイルス対策ソフト等にウイルスとして誤検出されないような構成の出力フォルダを作成します。
ウイルス対策ソフトに誤検出されると、最悪の場合には作品のデータを消去されてしまうので、そのような事態を回避したい場合には適用しておくようにしましょう。
- 「ノベル配布経路」では、出力フォルダを作成する場所を指定します。
- 項目を設定し終えたら、下部にあるボタン「ノベル配布開始」を押して出力を開始します。
完了すれば、メッセージの表示とともに、ボタン「Cancel」が「Finish」に変わるので、それを押して配布用画面を閉じましょう。 - 作品の公開後に「パッチ」と呼ばれる追加修正・コンテンツを作成したいという場合にも、「ノベル配布」でパッチの出力を行います。
- パッチの作成時には、パッチに用いる素材をフォルダ「Patch」に収めておく必要があります。
この際には既定のフォルダ内に子フォルダを作っている場合において、それをフォルダ「Patch」内にも再現しておく必要があります。
たとえば、フォルダ「Images」内に子フォルダ「ch」を作っている場合には、フォルダ「Patch」内のフォルダ「Images」にも、子フォルダ「ch」を作成する必要があります。
ただ、基本的には既定のフォルダをコピーして、フォルダ「Patch」内に貼り付けて上書きすれば済みます。 - パッチを作成すると、「ノベル配布経路」で指定したフォルダ内に「Patch.vndat」という名前のファイルが作成されます。
このファイルを配布し、プレイヤーに作品のフォルダ内の最上層(「exe」のある層です)へそれを置くようにしてもらえば、パッチの適用は完了します。
- パッチの作成時には、パッチに用いる素材をフォルダ「Patch」に収めておく必要があります。
作品の配布準備を整えよう
ついに作品が完成しました……が、配布前にやっておきたい準備がいくつかあります。
配布形態は決めていますか?
- 作品の配布にはいくつか方法があります。作品に適したものを選びましょう。
- 無料作品の場合
フリーゲームとして配布するには、「自分のサイトにダウンロード経路を作る」「公開フォルダサービスを利用する」「外部フリーゲームサイトを利用する」「即売会等のイベントで配布する」等の方法があります。
「自分のサイトにダウンロード経路を作る」場合には、自他共に安全性の問題を考慮する必要があります。
「公開フォルダサービスを利用する」場合には、自身の作品が安全であるということを事前に証明していることが必要とされるでしょう。
「外部フリーゲーム配布サイトを利用する」場合には、サイト側の審査に通る必要はありますが、安全性を保証してもらうことができます。
「即売会等のイベントで配布する」場合には、実体としてパッケージを作成する必要があります。
初めての作品である場合には外部のフリーゲーム配布サイトを利用し、問題を解決できるのであれば他の方法に移行するというのが好ましいでしょう。 - 有料作品の場合
有料作品として配布するには「自分のサイトにオンラインショップを作る」「有料作品販売用の外部サイトを利用する」「即売会等のイベントで販売する」等の方法があります。
「自分のサイトにオンラインショップを作る」場合には、おそらくあなたはもはや同人作品制作者ではないはずです。同人活動であれば、この方法はおすすめしません。
「有料作品販売用の外部サイトを利用する」場合には、サイト側の手数料や制作費用等を考慮して価格を設定しましょう。
「即売会等のイベントで販売する」場合には、実体としてパッケージを作成する必要があります。
初めての作品を販売するのはとても挑戦的ではありますが、金銭の取引には、たとえ少額であっても責任が生じるということも考慮しましょう。
できれば無料作品で実績を重ねてから挑戦することをおすすめします。
- 無料作品の場合
お知らせは決して忘れないように
- すべての素材を自前で用意するというのはかなり難しく、ほとんどの作品には外部の素材が利用されています。
そして、外部の素材を利用した場合には、可能な限りクレジット表記を行い、完成や配布を開始する際には素材の使用報告を行いましょう。
中には使用報告を不要とする素材制作者の方もいらっしゃいますが、いずれにせよライセンスの確認はどのような素材であっても必ず行うようにしましょう。 - ゲーム作品においては、慣例として「readme.txt」を作成して、作品に同封します。
「readme.txt」とは、最初のプレイ開始前においてプレイヤーに読んでもらう、ゲームの説明書です(実際に読むプレイヤーは少ないですが、決して不必要というわけではありません)。
内容としては、「インストール方法」「アンインストール方法」「操作方法」「システム要件」「素材元情報」「制作者情報」等を明記します。
システム要件には「動作を保証しているOS」として「Windows(XP,7,8,10)」と記述する程度でもよいでしょう。グラフィック要件として「OpenGL2.1以上」というのも記述しておけばとりあえず十分でしょう。
素材元情報には、可能であればリンクとしてURLを併記しておきましょう。素材の制作者だけでなく、他のゲーム制作者にとっても素材探しの助けとなる場合があります。 - 作品の宣伝は、できればやっておきたいものです。
あなたも、共同制作者も、フリー素材等の制作者も、作品が世間に広く知られ、プレイされるほどに、知名度という利益を得ます。
特にフリー素材等の制作者は、知名度の向上による利益が大きく影響します。たとえあなたからは遠い存在であったとしても、そのことを考慮し、宣伝によってまずは作品自体の知名度が少しでも上がるように努力しましょう。
宣伝方法に関しては説明を省略しますが、過剰な宣伝は逆効果ですので、効果的かつ効率的な宣伝方法を模索してみてください。
公開後の動きを想定しておこう
- 配布形態を問わず、作品を公開すればなんらかの変化があります。
感想を頂いたり、バグ報告を受けることもあるでしょう。
修正対応以外にも、サイドストーリーの追加等、制作者側から動きたい場合もあるはずです。
そのような変化を場当たり的にこなそうとすると、なんらかの失敗をする可能性が高まります。
できれば公開前にそれらの変化を想定し、大まかでもいいので対応を考えておきましょう。
作品の配布を始めよう そして……
完成と配布開始、おめでとうございます!
返ってくるものを眺めながら、これまでを振り返ってみましょう。
そして、もしもまた作りたいと思えたなら……その時にはもう、世界のどこかにあなたの次作を待っている人がきっといますよ。