Light.vn入門(Ver:12.0.0)

Last-modified: 2021-03-17 (水) 12:02:22

Ver10.8.0の入門ページはこちら
Ver10.2.0の入門ページはこちら
Ver10.0.0の入門ページはこちら
Ver8.0.0の入門ページはこちら
Ver7.6.0の入門ページはこちら
Ver7.0.0の入門ページはこちら
Ver6.0.0の入門ページはこちら


準備をしよう

本体をダウンロード・解凍しよう

本体をダウンロードページからダウンロードしましょう。
ダウンロードしたデータは圧縮されているので、解凍ツール(windowsエクスプローラーやLhazなど)を使用し、好きな場所に解凍しましょう。


フォルダ構成を確認しよう

解凍したフォルダの構成を見てみると、次のようになっています。
収容するファイルの種類が異なるので、確認しておきましょう。

 

  • フォルダ「_export」……出力用のデータが入っているフォルダ。
  • フォルダ「BGM」……音楽データを入れるフォルダ。
  • フォルダ「Config」……コマンドなどについての設定が入っているフォルダ。
  • フォルダ「Fonts」……フォントを入れるフォルダ。
  • フォルダ「Images」……画像データを入れるフォルダ。
  • フォルダ「Maps」……マップデータを入れるフォルダ(Ver12.0.0現在は非対応)。
  • フォルダ「Models」……3Dモデルを入れるフォルダ。
  • フォルダ「Movies」……動画データを入れるフォルダ。
  • フォルダ「Patch」……パッチ作成時に素材を入れるフォルダ。
  • フォルダ「platforms」……エディターのWindowsでの動作を扱うフォルダ。
  • フォルダ「Plugins」……プラグインを入れるフォルダ。
  • フォルダ「SaveData」……セーブデータが作られるフォルダ。
  • フォルダ「Screenshots」……スクリーンショットが入るフォルダ。
  • フォルダ「Scripts」……シナリオやスクリプトを入れるフォルダ。
  • フォルダ「SFX」……効果音を入れるフォルダ。
  • フォルダ「Shaders」……特殊効果を入れるフォルダ。
  • フォルダ「styles」……エディターのWindowsでの様式を扱うフォルダ。
  • フォルダ「Voices」……音声データを入れるフォルダ。
  • LightApp.exe……ゲームアプリケーション。
  • LightEditor.exe……スクリプトエディター。
  • LightTest.exe……環境テストアプリケーション。
  • README.txt……必ず読むべきファイル。
  • setting.xml, setting_dev.xml……エディターおよび作品の設定ファイル。


サンプルをプレイしよう

解凍したフォルダにはサンプルスクリプトがあります。
サンプルスクリプトはLight.vnの機能等を把握するための最良の教科書です。
エディターを開いてF5キーを押せばサンプルスクリプトをテストプレイできるので、制作を始める前にエディターで表示されるスクリプトを眺めながらテストプレイをしてみましょう。
最初は機能を大まかに把握するだけでも大丈夫です。

 


エディターを確認しよう

エディターを起動し、ウィンドウ内の各領域が担う機能を確認しましょう。

 

  • メニューバー(①)
    ウィンドウ内の最上部にあります。
    • ファイル
      • New Project
        新しい制作用フォルダを作成します。
        新しいフォルダには素材ファイルが無いので、自分で素材を用意する必要があります。
      • Save Current Script
        スクリプト領域で表示しているスクリプトを上書き保存します。
        ショートカットキー:CTRL+S
      • Close Project
        エディターを閉じます。
        終了前にダイアログが表示されます。
        ショートカットキー:ALT+F4
    • 表示
      • Preview Scale
        エディター上におけるプレビュー領域の大きさを変更します。
        縦横の大きさを、設定したノベル解像度の「50%」「75%」「100%」「150%」のいずれかから選択できます。
    • 編集
      • 検索・代替
        スクリプト内の語句の検索・置換を行います。
        ショートカットキー:CTRL+F
    • 作品
      • 現在位置からテストプレイ開始/中止
        スクリプト領域に表示しているスクリプトのテストプレイを開始または中止します。
        スクリプト上にカーソル行が存在する場合には、ひとつ下の行からテストプレイを開始します。
        スクリプトファイル自体を参照して動作するので、スクリプト領域上で上書き保存されてない変更はテストプレイに反映されません。
        また、テストプレイ中はスクリプト領域における新たな変更を反映しません。
      • 設定
        作品全体に関する設定や、エディターに用いる文法ファイルの変更等を行います。
      • 配布
        新しいフォルダを作成し、作品を出力します。
    • ヘルプ
      • User Wiki
        ユーザーWikiのトップページにリンクしています。
      • 解説チャンネル
        Light.vn 解説チャンネル(非公式)のYouTubeチャンネルページにリンクしています。
      • Support
        Light.vn 公式サイトのサポートページにリンクしています。
      • Light.vn HP
        Light.vn 公式サイトのトップページにリンクしています。
  • スクリプトタブ(②)
    メニューバーの直下にあります。
    エディターで編集するスクリプトはこの領域に並びます。
    スクリプトタブに表示されていないスクリプトファイルも、フォルダ「Scripts」内に納めていれば出力されます。
    領域の右端には2つのボタンがあり、各スクリプトをエディター表示上から除くには、各スクリプトタブの×マークを選択します。
    • 新規スクリプト
      新しいスクリプトファイルを作成し、スクリプトタブに加えます。
    • 開く
      フォルダ「Scripts」内にあるスクリプトファイルをスクリプトタブに加え、スクリプト領域に表示します。
  • ショートカットボタン(③)
    ウィンドウ内の左端、スクリプトタブの直下にあります。
    スクリプト上にカーソル行が存在する状態でボタンをクリックすると、表記されているコマンドの既定値をカーソル行に記述します。
    一部のコマンドでは素材や座標の指定が必要となるので、説明バー等の指示に従ってください。
    コマンドを手入力するよりも確実性が増すので、ショートカットボタンのあるコマンドはこれを積極的に使用しましょう。
  • プレビュー領域(④)
    ショートカットボタンの右側、スクリプト領域の左側、スクリプトタブの直下にあります。
    テストプレイ時にゲームが表示され、動作します。
    リアルタイムプレビュー機能を使用している場合には、カーソル行までのスクリプトを反映して表示します。
  • スクリプト領域(⑤)
    ウィンドウ内の右端、スクリプトタブの直下にあります。
    編集中のスクリプトを表示します。
    上書き保存をするまで、スクリプト領域上におけるスクリプトの変更はスクリプトファイルに反映されません。
  • 説明バー(⑥)
    プレビュー領域の直下にあります。
    プレビューやテストプレイ、ショートカットボタンに関する説明や指示を表示します。
  • エディター機能タブ(⑦)
    説明バーの直下にあります。
    エディターの一部の動作を設定・変更できます。また、エンジン動作や個体の情報を閲覧できます。
    • 設定
      エディターに関する設定を変更します。各機能を適用する場合にはチェックボックスを選択します。
      • リアルタイムプレビュー
        リアルタイムプレビューを使用します。
      • バウンディングボックス
        各個体の占める領域を示す枠線を表示します。
      • 編集中に背景音楽再生
        カーソル行時点において再生している背景音・背景ボイス・反復効果音を再生します。
        リアルタイムプレビューと合わせて用いると、実際の動作に近い環境を再現できます。
      • 座標系表示
        3Dカメラモード(コマンド「カメラモード 3」)において、プレビュー領域に座標系を表す直線を表示します。
        色の淡いほうが正、濃いほうが負となります(x軸:桃-赤、y軸:黄緑-緑、z軸:紫-青)。
      • マスク表示
        マスクに用いている画像素材を明示します。
      • 編集中に文字窓待機絵表示
        カーソル行時点における文字窓待機絵およびその動作を表示します。
      • スクリプトワードラップ
        スクリプト領域でワードラップ(単語が途中で切れないように改行する機能)を使用します。
    • コマンド
      すべてのコマンドとその説明とを表示します。
    • スクリプト
      現時点で読込中あるいは待機中のスクリプト名・読込行・状態を、スクリプト番号(ID)と併せて表示します。
    • 個体
      現時点で設定されている個体の個体名と座標を表示します。
      見えない個体でも退場していなければここに表示されます。
    • 変数
      現時点で設定されている変数の変数名と変数値を表示します。
    • ログ
      エディターの動作ログを表示します。
  • 情報バー(⑧)
    ウィンドウ内の下端にあります。
    エディターのFPS(毎秒フレーム数)とカーソル座標(エディター領域上の2次元座標)をリアルタイムで表示します。


対応しているファイル形式を確認しよう

Light.vnで素材として使用できるファイル形式は以下のとおりです。
支援外のファイル形式の素材を使用することによるエラーを回避するために、しっかりと確認しましょう

テキストデータ

スクリプトの文字コードには必ず「UTF-8」を使用してください。他の文字コード(「ShiftJIS」等)を使用するとエラーの原因となります。

  • txt(文字コード:UTF-8)

画像データ

  • jpg, jpe, jpeg (arithmetic encoding 除外)
  • png
  • tga

3Dモデル

  • glb

音楽データ

  • ogg
  • wav
  • mp3
  • flac

動画データ

  • mpg(ビデオ側:mpeg1、オーディオ側:mp2)

luaファイル

  • 5.3.2


制作用のフォルダを用意しよう

素材とエディター等を収めるフォルダを用意しましょう。
以下のような方法があります。


  • フォルダを新規作成する
    PC上に制作用のフォルダを新規に作成します。
    ※Ver10.8.0ではこの方法でのプロジェクト作成に失敗する不具合が確認されています。次の更新を待つか、内部公開の修正パッチの適用が必要です。
    1. まず、メニューバーの「ファイル」から「New Project」に移動します。
       
    2. 次に、制作用のフォルダを作る場所を指定します。
    3. 最後に「OK」を選択すれば、指定した場所にプロジェクトファイル一式が作成されます。
      プロジェクトファイル一式にはダウンロードしたものと同じ構成のフォルダとシステム用ファイル、エディター等が含まれているので、あとは各フォルダに素材を入れてゆきましょう。


  • フォルダごとコピーする
    ダウンロードしたフォルダをコピーして任意の場所に貼り付けても制作用フォルダとして用いることができます。
    この場合は素材もコピーされます。したがって、ダウンロードしたフォルダ内にある素材を容易に流用できます。


  • ダウンロードしたフォルダをそのまま使う
    ダウンロードしたフォルダをそのまま制作用フォルダとすることもできます。
    Light.vnで用意されている素材やスクリプトの流用が多いならば、この方法でも可能でしょう。


制作をしよう

※リアルタイムプレビュー機能を使用することを前提としています。


知っておきたいこと

制作を始める前に、Light.vnについて知っておきたいことを紹介しておきます。


スクリプトとエンジンを知ろう

  • Light.vnはエンジンでスクリプトを読込んで様々な動作を行います
    スクリプトとは、エンジンを動かす指示書や台本というイメージに近いものです。
    Light.vnのゲームエンジンは、フォルダ「Scripts」内に収められているスクリプトファイルを読込み、スクリプトの記述を1行ずつ参照し、その行の記述が指示する内容に即した動作を行ってゆきます
  • スクリプトに記述するのは「コマンド」と「テキスト」です。
    「コマンド」は、ゲームエンジンで行える様々な動作や機能を指示するものです(項目参照:コマンド)。
    「テキスト」は、画面上に表示するためのテキストを指します(項目参照:テキスト)。
    スクリプトにおける記述の仕方によって、エンジンは行内の記述がコマンドとテキストのいずれであるのかを判別して動作します。
  • 特定の条件下(テキスト行末尾の「\w」等)において、エンジンはスクリプトの読込みを一時停止して待機状態に入ります。
    待機状態を解除するには、コマンド「続行」の適用が必要となります。
    一般的なノベルゲームにおける「クリックやエンターキーの入力によって進行する機能」は、コマンド「続行」をエンターキーや左クリック等に対してコマンド「キーダウン」等を用いて設定しておく必要があります
    ほぼすべての作品において必須となる機能なので、作品を起動すれば常にそれらのキートリガーが設定されるようなスクリプトを作りましょう(項目参照:キーダウン)。
    というわけで、まずは新しいスクリプトの先頭行に「キーダウン enter 続行」と記述してから、以下の解説をご覧になってください。

    ※以下の解説においては、コマンド「キートリガー 続行」の設定を終えているものとします。


リアルタイムプレビューを活用しよう

  • ある状況のスクリプトの記述の結果を前もって見るのがプレビューです。
    一般的にプレビューはそれを行うためになんらかの動作(「プレビューを表示」ボタンを押す等)を必要としますが、Light.vnではプレビューを即座に反映する機能があります。それが「リアルタイムプレビュー」です。
  • リアルタイムプレビューは、スクリプト記述の追加・変更・更新と同時にその結果をプレビュー領域へ反映する機能です。カーソル行のあるスクリプト行までの結果を反映します。
    リアルタイムプレビューの適用切換は、エディター機能タブの設定(項目参照:エディターを確認しよう)のチェックボックスで行います。
    プレビューに都度の操作を必要としない」「スクリプトの結果確認が迅速かつ容易」という特徴があり、制作において大いに助けとなる機能です。
    例として、「画像の位置を変更する」を挙げます。
    • 「リアルタイムプレビューなし」
      まずは画像座標の記述を変更します。ここで他の個体との位置関係をきっちりと決めたいならば、予め画像等を作っておいて座標を割り出しておく必要があります。
      次にボタンを押す等の操作をしてプレビューを行います。ここでようやく位置関係が判明します。つまり変更や追加が多ければ結果が不明なままの作業時間が増えることになります。
      座標の割り出しを行っていない場合には、たいていここで修正が入ります。プレビューを中止し、座標を変更し、再度プレビューをして結果を確認する。これを何度か繰り返すことになります。
    • 「リアルタイムプレビューあり」
      まずは画像座標の記述を変更します。すると、記述の変更と同時にプレビュー画面の画像の位置も変更されます。つまりプレビューが操作なしになされることになるのです。
      修正の際にも座標記述の修正と同時にプレビューへと反映されるため、「もう少しAから遠ざけたいけれど、Bとのバランスも保ちたい」といった微細な調整とその確認も素早く行うことができます。
  • ゲーム動作に関連する一部のコマンドの結果はリアルタイムプレビューに反映されません。それらのコマンドの動作結果はテストプレイで確認することになります。
    テストプレイでのみ結果の確認が可能なコマンドおよび動作は以下のとおりです。
    • テキストの表示方法に関連するコマンド……「文字速度」「文字出力効果」「文字自動待機」「文字進行」「文字スキップ方式」「バックログ台詞登録」「バックログリセット」
    • 効果時間を持つコマンドの適用過程(最終結果のみ表示)……「変化関連コマンド(効果時間のあるもの)」「音量」
    • 適用されると動作に予測しづらい影響を与えるコマンド……「変数関連コマンド」「ジャンプ」「最終ジャンプ」「砂時計」
    • 瞬間的なオーディオ関連コマンド……「効果音」「ボイス」
    • 基本動作やデータに関わるコマンド……「ゲームエンド」「未使用素材開放」「セーブ(クイック含む)」「ロード(クイック含む)」「セーブ削除」「スクリーンショット」「ダイアログ」「システムメッセージ」「システムエラ」
  • リアルタイムプレビューで表示されるのはスクリプトの1行めからカーソル行までのすべての適用結果です。したがって、スクリプトの特定の部分のみ(特定の栞部分のみ等)をプレビューしたい場合には、状況を再現する記述が必要になる場合があります。
    具体的には、確認したい部分の前(上)で、その部分までの適用結果をコマンド「クリア」等で初期化し、新たに状況反映用の記述を追加してから、コマンド「栞」で部分の開始点を置き、確認したい部分の記述を続けるという処理が必要になります。
    「状況の再現のための記述」とは、その場面に存在する個体や変数の設定のことです。これをしなければ意図しない結果が出ます。仮に意図どおりであったとしても、実際の動作では不具合が生じる可能性があります。

    //////プレビュー部分開始//////

     
    クリア

    //ここまでの結果の初期化をします。

     

    //////////////////////////////////////

    //状況反映用の記述が入ります。

    //////////////////////////////////////

     
    栞 part1

    //コマンド「栞」でプレビュー部分の開始点を作っておくと便利です。

     

    //以下、プレビューしたい部分の記述となります。


検索・置換機能を使おう

  • テキストエディタ等にある検索・置換機能が、エディターには備わっています。特定の文字等を検索したり、それを別の文字等に替えたりすることができます。
    • 「検索式」
      「検索をしたい文字等」を入力します。
    • 「検索」
      カーソルまたは選択範囲の直後から検索を始め、指定した文字等を探し出します。
    • 「代替式」
      「置換結果となる文字等」を入力します。
    • 「代替(次)」
      カーソルまたは選択範囲の直後から検索を始め、指定した文字等を探し出し、探し出した文字等(選択範囲)を置換します。
    • 「代替(全部)」
      検索によって探し出されるすべての文字等を一気に置換します。
    • 「方向」
      検索の方向を設定します。
      通常(「下」)は上から下、左から右へと検索が進みますが、「上」を選択すると方向が反転し、下から上、右から左へと検索が進みます。
    • 「大小文字区分」
      大文字と小文字を区別します。
      検索式が「Osaka」ならば、「osaka」は検索にかかりません。
    • 「独立単語のみ」
      検索語句の前後に文字のないものを検索します。該当語句が単語の一部である場合には検索にかかりません。
      検索式が「me」ならば、「take me home」の「me」は検索にかかり、「home」はかかりません。
      また、スクリプト行に「help me」とだけあれば、行末の「me」が検索にかかります。
    • 「検索式を正規表現として」
      検索式を正規表現の文字列として扱います(項目参照:正規表現に触れてみよう)。
      ただし、検索式に文字列の記憶を使っても代替式にその代入を使うことはできません。代替式には正規表現を使わないということです。


エディター以外でもスクリプトは編集できますが……

  • Light.vnのスクリプト編集にはエディターを用いるのが基本ですが、外部ツール等でスクリプトのテキストファイルを編集することもできます。
    外部ツールはエディターにない機能によって制作の助けとなります。一括置換等も、エディターを開かずにテキストファイルを編集することで可能です。
  • 外部ツール等によるスクリプト編集においては、文字コードの保持が必要となります。
    文字コードとは「テキストファイルのデータと文字との対応を指定するもの」です。異なる文字コードを用いると異なる文字と対応してしまい、結果としてエラーの原因になります。
    Light.vnでは「UTF-8」を文字コードに用いています。したがって、外部ツールを用いる際には他の文字コード(「ShiftJIS」等)に変更してしまわないように注意する必要があります。


ゲームの設定をしよう

制作を始めるにあたって、最初にゲームの諸要素の設定を行いましょう。
設定をするにはメニューバーから「作品」→「設定」→「作品設定」へと進みます。

作品のタイトルを決めよう

  • 「作品タイトル」には、作品のタイトルを入力します。
    入力したタイトルはゲームウィンドウに表示される名前に反映されます。
  • 「作品フォルダ名」には、作品の出力フォルダ名となる英数字を入力します。
    タイトルに関連のあるものにするとよいでしょう。

最初に読込むスクリプトを指定しよう

  • 「スタートスクリプト」には、ゲーム起動時において最初に読込むスクリプトを指定します。
    基本的にはタイトル用のスクリプトとなるでしょう。

解像度・ウィンドウサイズを設定しよう

  • 「作品解像度」には、ゲーム画面の既定解像度を指定します。
    「ウィンドウサイズ」には、ゲームウィンドウの既定サイズを指定します。
    幅と高さの比は4対3か16対9が一般的です。極端な比にすることもできます。
    ここは困ったら同じサイズを指定しましょう。

アイコン画像を指定しよう

  • 「アイコン」には、ウィンドウ上部やタスクバー上に表示されるアイコンに用いる画像を指定します。
  • アイコン画像の対応ファイル形式はLight.vnで支援しているものと同じです。
    サイズは32×32が推奨されています。

ウィンドウに関する設定を決めよう

  • 「ウィンドウサイズ調整」は、プレイヤーが任意でウィンドウサイズ調整を行うことを許可するかどうかを決めます。チェックを入れれば許可になります。
  • 「ウィンドウボーダー無し」は、いわゆるボーダーレスウィンドウにするかどうかを決めます。チェックを入れればボーダーレスウィンドウになります。

ダイアログ用のスクリプトを指定しよう

  • セーブ上書きやロード、ゲーム終了の選択に対して、プレイヤーの意思確認を行うのがダイアログです。
  • ダイアログの表示には個別のスクリプトを用意することになりますが、そのスクリプトを実際にダイアログ表示用にするためには、コマンド「ダイアログスクリプト登録」を用います。
    最初はサンプルのものを参考にしておきましょう(「title.txt」2行め)。
  • コマンド「続行」と同様に、作品の起動直後に必ずコマンド「ダイアログスクリプト登録」が設定されるようにしましょう


テキストを表示しよう

ノベルゲームの基礎であるテキストを画面に表示させてみましょう。


フォントファイルを用意しよう

  • Light.vnはPC内のフォント等を利用しないため、作品内で使用するフォントはフォルダ「Fonts」に入れておく必要があります。
     
  • 使用したいフォントは、必ずライセンスを確認してからフォルダに入れましょう。
    お使いのPCに導入しているフォントの使用に関しても、念の為にライセンスを確認しておきましょう。


読み進めるテキストを表示しよう

項目参照:文字窓使用文字窓テキスト文字自動待機文章消去

  • 一般的なノベルゲームで見られる「入力によってプレイヤーが読み進めるテキスト」は、コマンド「文字窓」「使用文字窓」を用いることで実現できます。
    スクリプトにコマンド「文字窓」「使用文字窓」を設定して、その下に「"」を記述し、なにかテキストを入力してみましょう。
    画面上にテキストが表示されれば、文字窓が正しく設定されているので、以降のテキストは文字窓に表示されてゆきます。
     
  • 文字窓は基本的に画像よりも手前に表示するものなので、レイヤーの数値は大きめに設定しましょう。
  • プレイヤーの入力を待機させるには、テキストの行末に「\w」を記述するか、コマンド「文字自動待機」を設定します。
     
  • 文字窓に表示しているテキストを一旦消してから新しいテキストを表示したい場合には、新しいテキストの行頭に「"」を記述するか、コマンド「文章消去」を設定します。
     
  • テキストは文字窓の領域内に留まるよう折り返して表示されますが、途中で改行させたい場合には、改行位置に「\n」を記入するか、スクリプト上で改行させ、改行するテキストの行頭に「.」を記述します。


テキストを単独で表示しよう

項目参照:文字

  • 他のテキストの影響を受けないテキストを表示させたい場合には、コマンド「文字」を用います。
    文字窓に表示されるテキストと異なり、コマンド「文字」を用いて表示されたテキストは個体として扱われるので、文章表現に則らず、特定のコマンド(コマンド「アウト」等)の設定があるまで表示され続けます。


イメージを表示しよう

物語の舞台や状況、登場キャラクター等を示す画像を画面上に表示させてみましょう。


レイヤーを知ろう

  • レイヤーとは、画面上における個体の表示順のことです。
    個体を設定する際には設定項目として必ず指定します。
    設定済の画像個体に対しては、コマンド「レイヤ」で設定・変更ができます。

    レイヤ ch1 150

    //「ch1」のレイヤーを150に変更します。

  • レイヤーの数値が大きいほど、個体は手前に表示されます
    同じレイヤー上で複数の個体の領域が被る場合には、直近に設定された個体が手前に表示されます。
    • 例として、以下の画像のようなレイヤーを持つ3個体を用います。なお、同じレイヤー100の2個体は、右方が直近に設定された個体です。
       
    • レイヤーの異なる個体では、レイヤーの値の大きい個体が手前になるように表示されます。
       
    • レイヤーの同じ個体では、直近に設定された個体が手前になるように表示されます。


背景を表示しよう

項目参照:背景

  • 背景を表示するには、コマンド「背景」を用います。
    背景は自動的にレイヤーが0になるので、基本的にはレイヤーによる表示順序を考慮する必要がありません(他の個体のレイヤーに負の値を用いなければ問題ありません)。
    また、背景に用いる画像は自動的にウィンドウのサイズに変更されるので、可能ならば既定解像度よりも大きいサイズの画像を用意するといいでしょう。


画像を表示しよう

項目参照:

  • 立ち絵などの画像を表示するには、コマンド「絵」を用います。
    背景は1枚のみ設定できますが、コマンド「絵」では個体名の数だけ個体を設定できます。
  • 画像はレイヤーの影響を受けるので、画像の設定時にはレイヤーの数値に注意しましょう。


透明度を知ろう

項目参照:透明度

  • 透明度とは、0を透明、255を不透明とする尺度です。
    設定済の画像個体に対して、コマンド「透明度」で設定・変更ができます。

    透明度 ch1 150

    //「ch1」の透明度を150に変更します。



背景や画像を交換しよう

項目参照:画像

  • 設定した背景や画像を、個体名や座標を保ったままで別の画像に変更するには、コマンド「画像」を用います。
    ショートカットボタンでは「画像変換」が該当します。
  • 交換したい背景や画像の個体名を指定すれば、その個体に用いる画像素材が変更されます。
    ただし、交換前後の画像のサイズは統一しておく必要があります。
    効果時間を設定すると交換がなめらかに行われます。

     
  • コマンド「背景」「絵」において、画面上に存在する個体の個体名を再び用いることでも画像素材の変更ができます。
    この場合は座標が保持されないので、再設定する必要があります
    また、コマンド「背景」「絵」には効果時間の設定項目が無いので、変更は即座に行われます


音を使おう

場面を演出する音楽を取り入れてみましょう。


BGMを再生しよう

項目参照:背景音

  • BGMを再生するには、コマンド「背景音」を用います。
  • 複数の楽曲をBGMとして同時に再生することはできません
    すでにBGMを再生している場合において、再度コマンド「背景音」を設定すると、BGMが即座に交代されます。
     
  • エディター動作設定において「編集中に背景音楽再生動作」を適用しておくと、カーソル行をエンジンが読込んだ状況において再生される予定のBGMが、エディターでのスクリプトの編集中に再生されます。
    場面想定に役立つので、制作環境に問題が無ければ適用しておくことをおすすめします。

効果音を再生しよう

項目参照:効果音

  • 効果音を再生するには、コマンド「効果音」を用います。
  • BGMと異なり、効果音の再生はテストプレイをしないと確認できません
    また、複数の効果音を同時に再生できます
     

音声を再生しよう

項目参照:ボイス背景ボイスボイス再生

  • 音声を再生するには、コマンド「ボイス」「背景ボイス」を用います。
  • コマンド「ボイス再生」を適用することで、コマンド「ボイス」で直近に再生された音声をもういちど再生することができます。
     


ボタンを作ろう

選択することでコマンドを適用できるボタンを設置しましょう。


コマンドを用いるためのボタンを設置しよう

項目参照:ボタンタッチ素材設定

  • クリックすることでコマンドを適用することができるボタンは、コマンド「ボタン」で実現できます。
    一般的なノベルゲームで見られるオートやスキップを適用するためのボタンの他に、選択肢としても用いることができます。
     

特定のボタンだけが作動するようにしたい時は

項目参照:ボタン単独活性化ボタン全活性化ボタン活性スタック

  • ボタンは上位のレイヤーに存在する画像等によって隠れていたり、コマンド「透明度」によって透明にされていても、領域上でクリックされれば作動します。
     
    ただ、コンフィグ画面やセーブ画面等においては、もともと設置しているボタンを退場させることなく、新たに設置するボタンのみを選択対象にしたい場合もあるでしょう。
    その場合には、予めボタンの個体名の先頭に共通の文字列を使用しておいたうえで、コマンド「ボタン単独活性化」「ボタン活性スタック push」を設定しましょう。このコマンドを設定すると、指定した文字列を個体名の先頭に持つボタンのみが選択対象となります。
     
  • コマンド「ボタン全活性化」を適用すると、適用時点で存在しているボタンのすべてが選択可能になります。
    したがって、メニューからセーブデータ画面を開いてロード確認のダイアログを表示する場合などに、メッセージスクリプト上でコマンド「ボタン全活性化」を設定するようになっていると、ダイアログを退場させてから選択可能になるボタンの中にメニューのボタンが含まれるようになります。
    上記の現象を回避するには、選択対象ボタンの設定にコマンド「ボタン単独活性化」ではなくコマンド「ボタン活性スタック push」を用いたうえで、コマンド「ボタン活性スタック pop」を用います。
    これによって、ひとつ前に選択対象としたボタンが再び選択対象となるため、ダイアログを退場させてから選択可能になるボタンの中にメニューのボタンは含まれません。
     


簡単な効果を使おう

設定した個体にあれこれしてみましょう。


個体を退場させよう

項目参照:アウト

  • ここまで来ると、画面上にたくさんの個体が表示されていて、画面や音が混みあっていることでしょう。
    個体を退場させたい場合には、コマンド「アウト」を用います。
    このコマンドを適用することで、背景・画像・音楽等、設定した個体を退場させることができます。
    効果時間を設定すると、徐々に退場してゆくようにすることができるようになります(フェードアウト)。
     

個体を登場させよう

項目参照:イン背景ボタン

  • ここまでの画像や音の個体はどれも即座に表示・再生されたはずですが、演出によっては、徐々に表示したり、無音から音量を上げたいという場合もあるでしょう。
    その場合には、コマンド「イン」を用います。
  • コマンド「イン」は、対象に指定した個体の素材が画像の場合には、効果時間を設定することで透明から徐々に不透明へと変化させて登場させることができます(フェードイン)。
    対象に指定した個体の素材が音の場合には、効果時間を設定することで無音から徐々に音量を上げながら登場させることができます(フェードイン)。
     
  • コマンド「背景」「絵」「ボタン」は、コマンド名の末尾に「0」を付与して「背景0」「絵0」「ボタン0」とすれば、設定時に透明度を0に設定したうえで登場させます。
    したがって、これらをあらかじめ設定しておいたうえで、コマンド「イン」を適用して視認できるようにすることもできます。
    ただし、ボタンに関しては透明度が0でも作動するということに注意しましょう。

     

個体を移動させよう

項目参照:移動

  • 個体の位置の変更は、コマンドの再設定の他に、コマンド「移動」を用いることでも可能です。
    コマンド名のとおり、このコマンドでは個体を特定の座標まで移動させます。
  • 効果時間を設定すると、移動がなめらかに行われ、移動の軌跡を見ることができるようになります。
     

個体を回転・拡大しよう

項目参照:回転拡大

  • 個体の角度を変更するには、コマンド「回転」を用います。
    回転量ではなく角度を指定する点に注意が必要です。
  • 個体の画面上における表示サイズを変更するには、コマンド「拡大」を用います。
    拡大だけでなく、縮小も可能です。
  • 効果時間を設定すると、徐々に回転や拡大・縮小をしてゆきます。

個体を透明に近づけよう

項目参照:透明度

  • コマンド「透明度」を適用すると、個体を透明に近づけてゆくことができます。
    半透明にしてみたり、透明にして画面上で視認できなくしたりと、演出にも効果を発揮するでしょう。


システムを組み上げよう

スクリプト間を移動したり、一般的な機能を実装して、ゲームシステムを組み上げてみましょう。


コマンド「ジャンプ」でスクリプトを移動しよう

項目参照:ジャンプ

  • ひとつのスクリプトファイルだけでは、実装できる機能に限界がありますし、制作中に物語の区切りを見失いそうになります。
    そこで、複数のスクリプトを用意し、コマンド「ジャンプ」を用いて、読込むスクリプトを移動しましょう。
  • このコマンドを用いると、移動先に指定したスクリプトを読込みます。
    • スクリプトのファイル名のみを記述すると、そのスクリプトの先頭行から読込みを始めます。

       
    • スクリプト上にコマンド「栞」を用いて栞を設定し、スクリプトのファイル名に併せて栞名を記述すると、その栞が存在する行から読込みを始めます。
       
  • このコマンドを用いてスクリプトを移動すると、再びコマンド「ジャンプ」または「スクリプト」を適用しない限り、元のスクリプトには戻りません
    したがって、章を持つ物語などにおいて章間を移動する場合には適していますが、コンフィグやセーブ・ロード画面用のスクリプトに対して用いる場合にはあまり適していません。

コマンド「スクリプト」でスクリプトを参照させよう

項目参照:スクリプトスクリプト終了

  • 読込むスクリプトを移動する方法としては、コマンド「スクリプト」を用いるというものがあります。
    スクリプトの移動そのものや、移動先の指定方法、読込み動作等は、コマンド「ジャンプ」と同様です。
  • このコマンドを用いてスクリプトを移動すると、移動先のスクリプトにおいて「スクリプト終了」と記述された行を読込んだ段階で、元のスクリプトの、コマンド「スクリプト」を適用した行まで戻ってから読込みを再開します
    したがって、画面の状態等を保存しつつ、別のスクリプトによる動作を適用したい場合に適しており、コンフィグやセーブ・ロード画面等のスクリプトへの移動にはコマンド「スクリプト」を用いるほうがよいでしょう。
    1. 読込むスクリプトを用意します。「スクリプト終了」を忘れないように注意しましょう
       
    2. こちらはスクリプトの読込み前の状態です。
       
    3. こちらが読込み後です。「栞 script」から「スクリプト終了」までにあったコマンド「アウト ch_p5」が適用されています。
       
    4. コマンド「ジャンプ」と異なるのは、スクリプトの読込みが完了すると元のスクリプトへ戻ってくる点です。
      したがって、この例においてクリックをすれば新たな絵個体が設定されます。
       

コマンド「待機」にオプションをつけよう

項目参照:待機

  • コマンド「待機」にはオプションを付与することができ、それによってコマンド「続行」の適用以外の方法を待機状態の解除条件にすることができます。
  • オプションに数値を記述すると、その数値の時間だけ待機をして、時間経過とともに待機状態を解除します。

     
  • オプションに「続行禁止」と記述すると、以降の行はコマンド「ジャンプ」等を適用しなければ読込まれなくなります。
    選択肢やボタンの表示後等、プレイヤーがクリック等の入力を行っても待機状態を解除しないようにしたい場合には、このオプションを設定したうえで、以降の行に移動先の栞を設定しておきましょう。
    最も強力な待機状態なので、基本的にはコマンド「待機」を設定すればこのオプションを付与すると考えてもいいかもしれません。
     

オート進行・スキップ機能を実装しよう

項目参照:文字進行オート文字進行スキップ文字進行通常ボタンキーダウン

  • 一般的なノベルゲームで見られるオート進行モードやスキップモードを実装するには、コマンド「文字進行オート」「文字進行スキップ」を用います。
    基本的にはボタンにコマンドとして設定するか、キートリガーとして任意のキーに割り振ります。
  • コマンド「文字進行オート」は、オート進行モードに該当します。
    オート進行モードを適用すると、特定の時間が経過すれば、コマンド「待機」(オプション無し)や、テキスト側から指示される入力待機を自動で解除します。
    したがって、プレイヤーがキーなどを入力しなくてもテキスト表示が進行し、効果や演出も適用されてゆきます。
    待機解除までの時間を変更したい場合には、コンフィグ機能を用いてもらうことになります(項目参照:コンフィグ機能を実装しよう)。
     
  • コマンド「文字進行スキップ」は、スキップモードに該当します。
    スキップモードを適用すると、コマンド「待機」(オプション無し・時間指定)や、テキスト側から指示される入力待機を自動で解除しつつ、一部の演出を省略しながら(効果時間の無効化等)、テキスト表示を高速で進行させます。
    スキップモードによる高速進行は、コマンド「待機 続行禁止」によって一時的に停止できます。スキップモードを解除することなく待機させたい場合にはこのコマンドを用いましょう。

     
  • 両モードとも、解除するにはコマンド「文字進行通常」を適用します。
    サンプルでは変数分岐を用いて両モードのキートリガーの再入力で解除になるようにしてあります。

セーブ機能を実装しよう

項目参照:ボタンタッチ素材設定ボタン単独活性化ボタン全活性化ボタン活性スタック待機セーブセーブ除外範囲セーブ画像除外範囲セーブ削除変数

  • ゲーム作品の必須機能とも言える、セーブ・ロード機能。ここでは、そのうちのセーブ機能を実装しましょう。
    なにも無い状態から作るのはかなり複雑になるので、以下では通常版のサンプルスクリプトにある「sys_save.txt」を参照します。
    また、セーブ画面において設定するボタンの個体名は、共通の文字列を持つこととします(今回は先頭に「sys」、中間に「save」となっています)

     
  • 栞「set_save_settings」以下は、ロード後の動作と、セーブ画面の個体に対する基本設定(セーブ時の記録関連)を行う部分です。
    このあたりはスクリプトに慣れるまではそのままにしておきましょう。
  • 栞「display」以下は、セーブ画面の表示を行う部分です。
    このあたりはスクリプトに慣れるまではそのままにしておきましょう。
  • スクリプトにおいて最初に置かれている2つの変数は、両方を設定することでデータページ機能を用いることができるようになるものです。

    変数 vn_slotsPerPage = 6 //1ページに存在するセーブ・ロードスロット数
    変数 vn_slotPageMax = 10 //セーブ・ロードデータページ数

    データページ機能に関しては、今のところは「ひとつぶんのページを作るだけで、いくつものページを作ることができる機能」という認識でいてください。
    上の変数(vn_slotsPerPage)は、「セーブ画面1ページに表示するセーブスロットの数」を決めるものです。ここで決めた数だけ、セーブスロットを設定することになります。
    下の変数(vn_slotPageMax)は、「セーブ画面を何ページ用意するか」を決めるものです。
  • データページ設定のための変数の直下にある条件分岐は、データページのページそのものを指定するためのものです。これによって、セーブ画面を読込む初回において表示するべきページが指定されないという事態を防ぎます。
    また、ページ指定を初回に限ることによって、次回からはセーブ画面の読込み時に表示されるページが直近に開いていたページになります。

    もし (vn_slotPageCur == undefined) 変数 vn_slotPageCur = 0

  • ページ指定の直下にある変数は、セーブ日時の記録形式を指定するものです。「2020/12/21 13:04:09」のように記録されます。

    変数 vn_save_time_format = "%Y/%m/%d %H:%M:%S"

  • コマンド「セーブ」を適用してセーブデータを記録すると、記録時の画面のスクリーンショットを撮り、そのファイル名を変数「vn_saveimage」に記録します
    変数の代入を用いることで、撮影したスクリーンショットを個体の画像素材として用いることができます。

    絵 sys_save_on_1_image {{ vn_saveimage1 }} 116 127 306 カメラ付着

    また、セーブをすると画面上に存在する個体の情報を記録してロード時に反映します
    ところが、セーブ画面のスクリプトにおいて設定する個体は基本的にスクリーンショットにもセーブデータにも反映させないものですので、コマンド「セーブ除外範囲」を適用します
    これによって、特定の個体がセーブ時のスクリーンショットに記録されず、セーブデータにも記録されなくなります。
  • セーブ画面で設定する個体のレイヤーは基本的に大きくしておきましょう。
  • ボタンに設定するコマンドに、コマンド「セーブ」「セーブ削除」を用いると、ボタンの選択時にダイアログが表示されるようになります。
    また、コマンド「セーブ」を設定したボタンはセーブスロットになります。便利な機能なので、基本的にこれらのコマンドはボタンの設定コマンドとして用いましょう。

    ボタン0 sys_save_on_1_frame 79 116 305 カメラ付着 セーブ 1 245 142
    ボタン0 sys_save_on_1_delete 589 130 306 カメラ付着 セーブ削除 1

  • 変数「vn_saveinfo」には、末尾に記述した番号のスロットにセーブデータが記録された時点の年月日と時刻が記録されます。
    サンプルスクリプトではコマンド「文字」のテキストとして用いられています。

    文字0 sys_save_on_1_info 375 137 306 Helvetica-UltraCompressed.otf 24 カメラ付着 "{{ vn_saveinfo1 }}"

    コマンド「文字」のテキストに変数を代入値として用いる場合には、コマンド「文字」が設定された時点における変数の値を反映しますが、そこから変数の値が変化しても、表示される文字には反映されません
    したがって、セーブ時・セーブデータ削除時・データページ変更時にコマンド「文字」を更新するようなスクリプトを組む必要があります。
    サンプルスクリプトでは、コマンド「待機 ボタン選択」「ジャンプ display_immediate」を用いることで対応しています。

    待機 ボタン選択
    ジャンプ display_immediate

  • もし100ページもあるセーブデータ画面を作ろうと思っても、100ページ分のボタン等を設定する必要はありません。どのページにも同じ数のセーブスロットを表示するのならば、データページ機能を用いるとよいでしょう。
    本来は使用に際してかなり複雑なスクリプトを組む必要があるのですが、サンプルスクリプトどおりにすればほぼ問題なく使用できます。ぜひ踏襲しましょう。
    • サンプルスクリプトで設定しているセーブスロットはスロット番号1~6の6個ですが、それらのセーブスロットはスロット番号が変数「vn_slotPageCur」に従って設定されます。
      「vn_slotPageCur」は、データページのページ番号よりも1小さい値を変数値とする変数です。したがって、ページ番号の表示に用いる際には値を1大きくする必要があります。
    • 栞「page_next」においては、「vn_slotPageCur」の値を増加させる処理と、増加させた値がページ数を超える値になる場合に値を0に初期化する処理とが行われます。

      変数 vn_slotPageCur = ( (vn_slotPageCur + 1) % vn_slotPageMax )
      ジャンプ display_immediate

      まず、式「(vn_slotPageCur + 1)」によって値が1増加します。次に「% vn_slotPageMax」によって増加後の値に関する処理が行われます。
      「%」は剰余(割り算のあまり)を指します。例においては増加後の値を「vn_slotPageMax」(データページのページ数)で割り、そのあまりを求めることになります。
      増加後の値が「vn_slotPageMax」未満であれば、増加後の値がそのまま「vn_slotPageCur」に設定されます。
      増加後の値が「vn_slotPageMax」と同じになれば、増加後の値を「vn_slotPageMax」で割ったあまりは0となるため、「vn_slotPageCur」に設定される値は0になります。
    • 栞「page_pre」においては、「vn_slotPageCur」の値を減少させる処理と、減少させた値が0を下回る値になる場合に値を「vn_slotPageMax」より1小さい値に初期化する処理とが行われます。

      変数 vn_slotPageCur -= 1
      もし ( vn_slotPageCur < 0 ) 変数 vn_slotPageCur = (vn_slotPageMax - 1)
      ジャンプ display_immediate

      まず、コマンド「変数 vn_slotPageCur -= 1」によって値が1減少します。
      次に、減少前の値が0だった場合に対応するために、コマンド「もし ( vn_slotPageCur < 0 ) 変数 vn_slotPageCur = (vn_slotPageMax - 1)」を置き、1ページめからの移動が最終ページになるようにします。
  • セーブ画面を表示する際には、コマンド「スクリプト」を用いるようにしましょう。

ロード機能を実装しよう

項目参照:ボタンタッチ素材設定ボタン単独活性化ボタン全活性化ボタン活性スタック待機ロードセーブ削除

  • ロード機能に関しては、セーブ画面のスクリプトを複製し、コマンド「セーブ」を「ロード」に変えるだけでもスクリプトが完成します。
  • ボタンに設定するコマンドに、コマンド「ロード」を用いると、そのボタンはセーブスロットになり、ボタンの選択時にダイアログが表示されるようになります。
    便利な機能なので、基本的にコマンド「ロード」はボタンの設定コマンドとして用いましょう。
  • ロード画面を表示する際には、コマンド「スクリプト」を用いるようにしましょう。

バックログ機能を実装しよう

項目参照:文字窓バックログ設定バックログ現在話者バックログ改ページ接頭辞バックログスクロールイン待機バックログリセットボタン活性スタックトラックバー

  • ノベルゲームは基本的にテキストが主役となるゲームなので、プレイヤーが読むテキスト量は多くなります。すると、少し前に読んだはずの文章をうっかり忘れてしまったりすることが起こりえます。
    そんな場合に読んだテキストを振り返ることができる機能がバックログ機能です。
    Light.vnではコマンド「バックログ設定」をすることでバックログ機能を用いることができるようになります。
    以下では通常版のサンプルスクリプトにある「sys_backlog.txt」を参考にします。

     
  • バックログとは「文字窓上に表示したテキストを記憶し、その記録を表示する機能」のことを指します。
    エンジンがテキストを記録するようにするためには、コマンド「バックログ設定」を設定してバックログ機能の適用開始を指示する必要があります。
    したがって、テキストの表示を開始する時点において必ずバックログの設定が行われるようなスクリプトを作る必要があります
    具体的には、たとえば文字窓用のスクリプトに、コマンド「スクリプト」を用いてバックログ設定用のスクリプトを呼び出すようにするとよいでしょう。
  • バックログを表示するには文字窓を用いることになるので、コマンド「文字窓」で予めバックログ用の文字窓を設定したうえで、コマンド「バックログ設定」を設定するようにしましょう。

    文字窓 backlog_textbox 200 80 301 900 550 KozMinPro-Light_0.otf 20 カメラ無視
    使用文字窓 backlog_textbox
    文字色 0 0 0 // 255 255 255
    文字陰 0
    文字ワードラップ false
    バックログ設定 backlog_textbox sys2/Backlog_Btn_Sound_01.png sys2/Backlog_Btn_Sound_02.png
    バックログ台詞登録 true
    バックログ改ページ接頭辞 "\n\n"

    ちなみに、コマンド「バックログ設定」においてバックログ表示用に指定された文字窓は退場しますが、コマンド「イン バックログ」できちんと呼び出せるので心配しないでください。
  • バックログは、コマンド「トラックバー」で設定できるスクロールバーによってスクロールを行います。

    トラックバー0 backlog_main_scrollball 1237 236 301 縦 265 vn_backlog_pos 0 100 カメラ無視

    変数名「vn_backlog_pos」は、バックログの表示位置を値に持ちます。トラックバーの操作対象変数にこの変数を設定することで、トラックバーがスクロールバーの役割を担います。
  • バックログのスクロール(表示領域の移動)には、コマンド「バックログスクロール」を用います。キートリガーの適用コマンドとして設定します。

    キーダウン wheel.up バックログスクロール -1
    キーダウン wheel.down バックログスクロール 1

  • バックログは最下部までスクロールされている状態において正のバックログスクロールを入力されると、バックログのスクリプトにおけるあらゆる待機状態を解除し、退場します。
    これには「待機 続行禁止」も含まれるので、注意が必要です。
  • バックログは設定以降に文字窓で表示されるすべてのテキストを記録し続けるので、次第に記録量が増え、表示量も増えます。
    その記録を初期化するには、コマンド「バックログリセット」を用います。
    このコマンドを用いると、バックログとして記録されていたテキストを初期化してから、記録を再開します。バックログ機能そのものを消去するわけではありません。
  • バックログ画面を表示する際には、コマンド「スクリプト」を用いるようにしましょう。

コンフィグ機能を実装しよう

項目参照:ボタンタッチ素材設定ハイライト条件ボタン単独活性化ボタン全活性化ボタン活性スタック待機スクリーン文字スキップ方式トラックバー開く変数

  • ゲームの動作には、テキストや効果等、表示に速さを持つものがあります。また、画面の大きさや音量もゲームに関係してくるでしょう。
    それらをプレイヤー側で調整してもらう機能がコンフィグ機能です。
    以下では通常版のサンプルスクリプトにある、ファイル名に「sys_config」が付いているスクリプトを参考にします。

     
  • 一般にコンフィグ機能で提供する調整項目は、「画面サイズ」「未読部分におけるスキップモードの動作」「テキスト表示速度」「オート進行モード適用時のテキスト表示速度」「オート進行モード適用時の待機時間」「主音量」「BGM音量」「効果音音量」「ボイス音量」です。
    また、各種の情報をコンフィグ画面に表示することもあります。
    これらの中から、作品において必要とされている項目を選んで、コンフィグ画面のスクリプトに追加してゆきましょう。
  • 調整項目「画面サイズ」「未読部分におけるスキップモードの動作」は、それぞれコマンド「スクリーン」「文字スキップ方式」をボタンのコマンドとして設定することで実装します(コマンドの詳細に関しては各項目を参照)。
    それらのボタンは、各コマンドの設定状況に応じた表示に変えることができます。たとえば、未読スキップが適用されている場合には、コマンド「ハイライト条件 sysc_btn_skip0 "vn_sysTextSkipMethod == 0"」が設定されているボタンが「UIクリック時画像(UI活性時画像)」で表示されるようになります。

    タッチ素材設定 sys2/Config_System_Btn_FullScreen_01.png sys2/Config_System_Btn_FullScreen_02.png sys2/Config_System_Btn_FullScreen_Selected.png se_maoudamashii_system47.ogg se_maoudamashii_system48.ogg
    ボタン sysc_btn_win0 236 198 705 カメラ付着 スクリーン 0
    ハイライト条件 sysc_btn_win0 "vn_sysWindowMode == 0"

  • 残る調整項目の実装には、コマンド「トラックバー」を用いましょう。
    トラックバーとは、数値等の大小やその調整を視覚化するためのもので、プレイヤーが直感的に調整することを可能にします。
    調整項目ごとにコマンド「トラックバー」において指定する変数名が異なるので、項目を参照してください。

    トラックバー sysc_tr_TextS 317 335 707 横 770 vn_sysTextSpeed 300 0 カメラ付着

  • 音声素材に関しては、コマンド「トラックバー」の設定項目「変数名」にシステム変数名を記述する他に、コマンド「ボイス」「背景ボイス」の設定項目「音量数値変数」で設定した変数名を記述することもできます。
    これによって、特定のボイス素材のみを調整対象にすることができます。したがって、たとえば特定の登場人物の音声に対して同じ変数名を設定すると、その登場人物のみを対象とする音量の調整項目を設定することができます。

    トラックバー sysc_tr_TextVoiceLight 463 285 707 横 350 gvoice_ace 0 100 カメラ付着

  • 各種の情報には、コマンド「開く」を用いることでサイト等へのリンクを設定することができます。
    制作者のサイトや、素材元のサイトへのリンクとして用いるとよいでしょう。

    ボタン0 sysc_link0 70 615 705 カメラ付着 開く http://twitter.com/lightvn_online

  • コンフィグ画面を表示する際には、コマンド「スクリプト」を用いるようにしましょう。


作品を出力・配布しよう


作品のチェックを繰り返そう

作品の完成を宣言する前に、必ずデバッグと呼ばれる不具合検査と修正を行いましょう。


デバッグをしないと……

  • 長編はもちろん、短編作品であっても、不具合は少なからず存在するものです。
    もしもそれを放置して作品を配布すれば、プレイヤーが困ります
    プレイヤーはプログラムやスクリプトのことをまったく知らない人もいるので、もしもそのような人がプレイ中にエラー表示を出されたらとても驚いてしまいます。
    もちろんそういう事態が発生すれば制作者にも悪影響はありますが、最も困るのはプレイヤーであるということを忘れずにデバッグをするよう心がけましょう
     

デバッグの方法を知ろう

  • 不具合には「制作者のスクリプトの不備によるもの」と「エンジン処理やコマンド動作自体の誤作動によるもの」があります。
    どちらも原因の把握が簡単ではなく、区別するのも難しいです。
    基本的には、「コマンド単体の動作まで絞って確認して、不具合が発生している場合」は後者である可能性が高く、そうでない場合は前者である可能性が高いでしょう。
    また、エラーウィンドウが出る場合にはコマンドの使用要件を満たしていない場合がほとんどであり、したがって前者である可能性が極めて高いです。
    ほとんどの不具合は前者ですが、もしも後者の可能性が高ければ、エンジン制作者の方に報告しましょう。
  • デバッグの方法としては、まず不具合を発見することから始まります。
    検査の細かさには段階がありますが、できる限り細かいものを選ぶようにしましょう。
    また、不具合の中にはリアルタイムプレビューで確認できないものがあるので、テストプレイで確認するようにしましょう。
    以下では粗いものから順に紹介します。また、「前者」「後者」という表現も踏襲します。
    • スキップモードを適用しながらテキストをすべて表示してゆく
      この方法は前者の発見に一定の効果があります。
    • 通常進行でテキストをすべて表示してゆく
      この方法は両者の発見に一定の効果があります。
    • 通常進行でテキスト・各種画面をすべて表示してゆく
      この方法は特に前者の発見に効果があります。
      各種画面にはスクリプトの不備が発生しやすいので、この方法まではぜひやっておきたいです。
    • オート進行でテキストをすべて表示してゆく
      この方法は特に後者の発見に効果があります。
      ただし、そこまで必要ではないかもしれません。
    • 進行モードをランダムに変え、コマンド「続行」を連続で適用しながらテキスト・各種画面をすべて表示してゆく
      クリックやエンターキーを押しまくり、進行モードも変えまくり、とにかくめちゃくちゃな操作を行います。
      ここで発見した不具合は、発生箇所まで戻り、進行モードごとに確認します。
      両者の発見に十分な効果があるものの、果てが無い検査方法なので、適当な段階で切り上げるようにしましょう。
      また、確認箇所や操作等を把握しておかなければ重複が発生して効率がさらに落ちます。
  • 不具合の箇所を確認し、前者と後者のいずれであるかまで把握できれば、修正を行いましょう。
    • 前者であればコマンドごとの動作を再度確認し、wikiの記述等を参考にして、そのコマンド構成で本当に自分が意図している動作になるのかを順番に確認してゆきます。
      • クリックで勝手に進行してしまう場合には、コマンド「待機」のオプション設定のミスである場合が多いです。
      • 意図しないテキストを表示している場合には、変数の代入値のミスや、マクロ機能の影響が考えられます。
      • 分岐ミスは変数の演算を見直してみましょう。
      • コマンド「ジャンプ」「スクリプト」の失敗は、スクリプトファイル名や栞名のミスを考慮しましょう。
      • コマンドの適用抜けは、対象名の指定ミスが考えられます。
        対象の複数指定時には特に発生しやすいです。スペースの挿入や、「,」の付与、「^」を先頭に付与している個体名の先頭に対する「\」の付与等を再確認しましょう。
        スキップモードの仕様である場合もありますが、スキップモードで省略されるのは効果時間なので、設定から行われていない場合には対象名の不備を確認し、それでも確認できない場合には後者である可能性が考えられます。
    • 後者であれば制作者の方に報告し、修正を待ちましょう。
      報告の際には「発生状況」「不具合の内容」「debug.txt」「作品の制作用フォルダと内容物」を揃えて提出します。
  • 「BugTrap」が作動した場合にはエラーが致命的なものであるということなので、この場合にはエンジン制作者の方まで報告しましょう。
    報告の前に、まずBugTrapの画面にあるボタン「More...」を選択します。それによってバグ発生時の記録の一部が表示され、いくつかのボタンが展開されます。
     
    次に、展開されたボタンのうち、「Save...」と書かれているものを選択します。それによって、バグ発生時の状況を把握するためのファイルを収めたzipファイルが作成されるので、報告時にはそれと使用環境に関する説明文書(自分で作成します)とを併せて送りましょう。
     

デバッグを行うタイミングとは

  • デバッグを行うタイミングはいくつかあります。
    可能であれば3回程度は行いましょう。
    • 各種画面のスクリプトが完成した段階
      タイトル画面等の各種画面は、スクリプトが完成したタイミングで確認しておきましょう。
      機能が増えるほど不具合が発生しやすくなるので、画面ごとに確認するように決めておけば、不具合を一度に修正しなければならないという事態を防げます。
    • すべてのコマンドを設定した段階
      コマンドが作品を通して意図どおりに動作しているかを確認します。
      コマンドを設定する度に確認するよりも、いくらかまとめて確認することをおすすめします。
    • 完成宣言直前
      作品の完成を宣言する前に、必ずデバッグを行いましょう。
    • 配布開始直前
      配布を開始する前に、仕上げとして不具合の確認をしておくことをおすすめします。
      特にzip化等の圧縮を行う場合には、解凍した作品のほうでも確認を行えば十分でしょう。


作品を出力しよう

完成までもう少しです。ついに作品が形になります。


出力する作品のプログラム形式を知ろう

  • 素材にファイル形式が存在したように、Light.vnで出力する作品にもプログラム形式が存在します。
    Ver8.4.0で実装されたV2出力は、5種類の形式を制作者側で選択できます。
    Ver12.0.0現在ではそのうちの1種類がベータ提供(正式には実装が完了していない形式)、3種類がアルファ提供(試験の初期段階の形式)です。
    Ver10.6.0でブラウザ出力が大幅強化されましたが、配布時に追加作業が必要となるため、初心者の方は「Windows(C++)」で出力することをおすすめします
    • Windows(C++)
    • OSX(C++)
    • Browser(WebGL)
    • Android
    • iOS

作品を出力して完成させよう

  • 出力作品のプログラム形式を決めたら、いよいよ作品の出力に移りましょう。
    出力には、メニューバーの「作品」から「配布」に移動します。
    • 「作品配布経路」では、出力フォルダを作成する場所を指定します。
      手入力も可能ですが、右隣の「Browse」を利用するほうが確実です。
    • 「作品配布形式」では、決めておいたプログラム形式を選択します。
      出力は何回でも行えるので、予定外の形式を試してみてもいいかもしれません。
  • 項目を設定し終えたら、下部にあるボタン「作品配布開始」を押して出力を開始します。
    完了すればメッセージが表示されるため、ボタン「Cancel」を押して配布用画面を閉じましょう。
  • 作品の公開後に「パッチ」と呼ばれる追加修正・コンテンツを作成したいという場合にも、「配布」でパッチの出力を行います。
    • パッチの作成時には、パッチに用いる素材をフォルダ「Patch」に収めておく必要があります。
       
      この際には既定のフォルダ内に子フォルダを作っている場合において、それをフォルダ「Patch」内にも再現しておく必要があります
      たとえば、フォルダ「Images」内に子フォルダ「ch」を作っている場合には、フォルダ「Patch」内のフォルダ「Images」にも、子フォルダ「ch」を作成する必要があります。
      ただ、基本的には既定のフォルダをコピーして、フォルダ「Patch」内に貼り付けて上書きすれば済みます。
    • パッチを作成すると、「ノベル配布経路」で指定したフォルダ内に「Patch.vndat」という名前のファイルが作成されます。
      このファイルを配布し、プレイヤーに作品のフォルダ内の最上層(「exe」のある層です)へそれを置くようにしてもらえば、パッチの適用は完了します。
       


作品の配布準備を整えよう

ついに作品が完成しました……が、配布前にやっておきたい準備がいくつかあります。


配布形態は決めていますか?

  • 作品の配布にはいくつか方法があります。作品に適したものを選びましょう。
    • 無料作品の場合
      フリーゲームとして配布するには、「自分のサイトにダウンロード経路を作る」「公開フォルダサービスを利用する」「外部フリーゲームサイトを利用する」「即売会等のイベントで配布する」等の方法があります。
      「自分のサイトにダウンロード経路を作る」場合には、自他共に安全性の問題を考慮する必要があります。
      「公開フォルダサービスを利用する」場合には、自身の作品が安全であるということを事前に証明していることが必要とされるでしょう。
      「外部フリーゲーム配布サイトを利用する」場合には、サイト側の審査に通る必要はありますが、安全性を保証してもらうことができます。
      「即売会等のイベントで配布する」場合には、実体としてパッケージを作成する必要があります。
      初めての作品である場合には外部のフリーゲーム配布サイトを利用し、問題を解決できるのであれば他の方法に移行するというのが好ましいでしょう。
    • 有料作品の場合
      有料作品として配布するには「自分のサイトにオンラインショップを作る」「有料作品販売用の外部サイトを利用する」「即売会等のイベントで販売する」等の方法があります。
      「自分のサイトにオンラインショップを作る」場合には、おそらくあなたはもはや同人作品制作者ではないはずです。同人活動であれば、この方法はおすすめしません。
      「有料作品販売用の外部サイトを利用する」場合には、サイト側の手数料や制作費用等を考慮して価格を設定しましょう。
      「即売会等のイベントで販売する」場合には、実体としてパッケージを作成する必要があります。
      初めての作品を販売するのはとても挑戦的ではありますが、金銭の取引には、たとえ少額であっても責任が生じるということも考慮しましょう。
      できれば無料作品で実績を重ねてから挑戦することをおすすめします。

お知らせは決して忘れないように

  • すべての素材を自前で用意するというのはかなり難しく、ほとんどの作品には外部の素材が利用されています。
    そして、外部の素材を利用した場合には、可能な限りクレジット表記を行い、完成や配布を開始する際には素材の使用報告を行いましょう
    中には使用報告を不要とする素材制作者の方もいらっしゃいますが、いずれにせよライセンスの確認はどのような素材であっても必ず行うようにしましょう
  • ゲーム作品においては、慣例として「readme.txt」を作成して、作品に同封します
    「readme.txt」とは、最初のプレイ開始前においてプレイヤーに読んでもらう、ゲームの説明書です(実際に読むプレイヤーは少ないですが、決して不必要というわけではありません)。
    内容としては、「インストール方法」「アンインストール方法」「操作方法」「システム要件」「素材元情報」「制作者情報」等を明記します。
    システム要件には「動作を保証しているOS」として「Windows(XP,7,8,10)」と記述する程度でもよいでしょう。グラフィック要件として「OpenGL2.1以上」というのも記述しておけばとりあえず十分でしょう。
    素材元情報には、可能であればリンクとしてURLを併記しておきましょう。素材の制作者だけでなく、他のゲーム制作者にとっても素材探しの助けとなる場合があります。
  • 作品の宣伝は、できればやっておきたいものです。
    あなたも、共同制作者も、フリー素材等の制作者も、作品が世間に広く知られ、プレイされるほどに、知名度という利益を得ます。
    特にフリー素材等の制作者は、知名度の向上による利益が大きく影響します。たとえあなたからは遠い存在であったとしても、そのことを考慮し、宣伝によってまずは作品自体の知名度が少しでも上がるように努力しましょう。
    宣伝方法に関しては説明を省略しますが、過剰な宣伝は逆効果ですので、効果的かつ効率的な宣伝方法を模索してみてください。

公開後の動きを想定しておこう

  • 配布形態を問わず、作品を公開すればなんらかの変化があります。
    感想を頂いたり、バグ報告を受けることもあるでしょう。
    修正対応以外にも、サイドストーリーの追加等、制作者側から動きたい場合もあるはずです。
    そのような変化を場当たり的にこなそうとすると、なんらかの失敗をする可能性が高まります。
    できれば公開前にそれらの変化を想定し、大まかでもいいので対応を考えておきましょう。


作品の配布を始めよう そして……

完成と配布開始、おめでとうございます!
返ってくるものを眺めながら、これまでを振り返ってみましょう。
そして、もしもまた作りたいと思えたなら……その時にはもう、世界のどこかにあなたの次作を待っている人がきっといますよ。