このチュートリアルでは、Suika2を使ってノベルゲームを作成する方法を説明します。
内容はとってもかんたんです。用意はいいですか?さあ、始めましょう!
もしチュートリアルの内容でわからないことがあれば、遠慮なく下のチャットで質問してください!
ここではWindowsを使います。
まずはじめに、 ダウンロード したSuika2のZIPファイルを展開すると、下記のようなフォルダとファイルが作成されます。 これは、Suika2の実行ファイルとサンプルゲームが一緒になったものです。
名前 | 役割 |
anime/ | アニメファイルを格納するフォルダです |
bg/ | 背景画像を格納するフォルダです |
bgm/ | BGMを格納するフォルダです |
cg/ | メッセージボックス等のシステム画像を格納するフォルダです |
ch/ | キャラクタ画像を格納するフォルダです |
conf/ | 設定ファイルを格納するフォルダです |
cv/ | ボイスを格納するフォルダです |
font/ | フォントを格納するフォルダです |
sav/ | セーブデータを格納するフォルダです |
se/ | 効果音を格納するフォルダです |
tools/ | 便利ツールやWeb/Android/iOS用のファイルが入ったフォルダです |
txt/ | シナリオを格納するフォルダです |
wms/ | プラグインを格納するフォルダです |
suika.exe | ゲーム実行用のWindows用アプリです |
suika-pro.exe | ゲーム開発用のWindows用アプリです |
このサンプルゲームに変更を加えてチュートリアルを進めていきます。
まだサンプルゲームをプレイしていなければ、イメージをつかむために、 一度 suika.exe を実行してプレイしてみてください。
サンプルゲームのフォルダ構成を確認していただいたところで、次に移ります。
txt フォルダを開くと、 init.txt というファイルがあります。
このファイルが、ゲームの起動後、最初に読み込まれるスクリプト(Suika2への指示書)です。
init.txt をダブルクリックして開いていただければ、 ただの文字の並び(テキストファイル)であることがわかるはずです。
init.txt をダブルクリックすると開くのは、Windows標準のメモ帳というアプリだと思います。 メモ帳以外にも便利なテキストエディタがたくさんあります。 テキストエディタの選択次第で作業効率が大きく変わります。 Visual Studio Code を使えば、コマンド入力の補完が利用できます。
init.txt がテキストファイルであることを確認していただいたところで、次は背景の表示に移ります。
ここで一度、 init.txt の中身をすべて削除して、次の内容を貼り付け、保存してみてください。
@bg roof.png 1.0 @click
保存したら、 suika.exe を実行してゲームを起動します。
屋上の背景が表示され、クリックを行うと、終了するはずです。
@bg というのが背景を表示する命令(コマンド)で、 roof.png は bg フォルダの中のファイル名、 1.0 は画面の表示が完了するまで(フェードイン)の時間(秒)です。
キャラクタを表示する 背景を表示できたところで、次はキャラクタの表示に移ります。
init.txt の中身をすべて削除して、次の内容を貼り付け、保存してみてください。
@bg roof.png 1.0 @ch center 001-fun.png 1.0 @click
保存したら、ゲームを実行します。
屋上の背景が表示され、続いてキャラクタが表示され、クリックを行うと、終了するはずです。
@ch というのがキャラクタを表示するコマンドで、 center は表示位置(中央)、 001-fun.png は ch フォルダの中のファイル名、 1.0 はフェードインの時間(秒)です。
背景、キャラクタを表示できたところで、次はメッセージとセリフの表示に移ります。
init.txt の中身をすべて削除し、次の内容を貼り付け、保存してみてください。
@bg roof.png 1.0 @ch center 001-fun.png 1.0
メッセージボックスにテキストを表示するのが"メッセージ"です。
みどり「キャラクタの名前を付けたメッセージが"セリフ"です。」 *みどり*キャラクタの名前を付けたメッセージが"セリフ"です。
*みどり*011.ogg*セリフにはボイスをつけることができます。
保存したら、ゲームを実行します。
先ほどのキャラクタが表示されたあと、メッセージとセリフが表示されるはずです。
メッセージとして認識される行は、 普通の文章の行(先頭が @ や * や : ではない行)です。
セリフとして認識される行は、先頭が * で始まる行か、名前「メッセージ」の形式の行です。
メッセージ、セリフを表示できたところで、次はBGMの再生に移ります。
init.txt の中身をすべて削除して、次の内容を貼り付け、保存してみてください。
@bgm 01.ogg @bg roof.png 1.0 @ch center 001-fun.png 1.0
BGMが再生されます。 保存したら、ゲームを実行します。
BGMが再生され、先ほどのキャラクタが表示されるはずです。
@bgm はBGM再生コマンドを表します。 01.ogg は bgm フォルダのファイル名を表します。
再生できるファイルは、44.1kHzのOgg Vorbis形式です。ステレオ、モノラルのどちらでも構いません。
ちなみに、01.ogg を 02.ogg に書き換えて実行してみてください。 曲が変わります。
BGMの再生ができたところで、次は選択肢の表示に移ります。
init.txt の中身をすべて削除して、次の内容を貼り付け、保存してみてください。
@bg roof.png 1.0 @ch center 001-fun.png 1.0 さて、学校へ行くか。 @choose label1 歩いて行こう label2 自転車で行こう label3 やっぱりサボろう :label1 歩いて行くことにした。 @goto end :label2 自転車で行くことにした。 @goto end :label3 今日は休むことにした。 :end 保存したら、ゲームを実行します。
3つの選択肢が表示されるはずです。
@choose は選択肢コマンドを表し、 label1, label2, label3 は選択肢が選ばれたときにジャンプする先のラベルです(後述)。 ラベルと選択肢がセットです。
:label1 は、ジャンプ先として指定されるラベルです。 ラベルの行は、ゲームの見た目の上では何も実行されません。
別な書き方として、次のようなスタイルもあります。 この場合、ラベルは省略できます。 お好みの方法を使ってください。
@bg roof.png 1.0 @ch center 001-fun.png 1.0 さて、学校へ行くか。 <<< switch "歩いて行こう" "自転車で行こう" "やっぱりサボろう" { case: 歩いて行くことにした。 break case: 自転車で行くことにした。 break case: 今日は休むことにした。 break } >>>
選択肢の表示ができたところで、次はフラグを立てて分岐する処理に移ります。
これができればノベルゲームがひとまず形になります。
init.txt の中身をすべて削除して、次の内容を貼り付け、保存してみてください。
@bg roof.png 1.0 @ch center 001-fun.png 1.0
さて、学校へ行くか。
<<< switch "歩いて行こう" "自転車で行こう" "やっぱりサボろう" { case: 歩いて行くことにした。 @set $1 = 1 break case: 自転車で行くことにした。 break case: 今日は休むことにした。 break } >>>
@if $1 == 0 NO_MONEY お金を拾った。 :NO_MONEY
保存したら、ゲームを実行します。
「歩いて行こう」を選択した場合だけ、「お金を拾った。」が表示されるはずです。
ここでは @set と @if を組み合わせています。
@set は、変数設定コマンドを表します。 続く $1 は、変数番号1に値を格納することを意味します。 続く = は、単純な代入であることを意味します(他にも計算ができます)。 1 は、整数の1を代入することを意味します。 変数の初期値は 0 ですので、「歩いて行こう」が選択されたときだけ、変数 $1 の値が 1 になります。
@if は、条件分岐です。 $1 == 0 は、変数 $1 の値が 0 の場合、という条件を意味します。 NO_MONEY は、ラベルの名前です。条件に一致したとき、:NO_MONEY という行にジャンプします。 変数の初期値は 0 ですので、結果として、「歩いて行こう」を選択した場合だけ、「お金を拾った。」が表示されることになります。
変数の使い方は0/1のフラグだけではなく、好感度などの数値を持つこともできます。 詳細はコマンド・リファレンスの @set と @if をご覧ください。 ただ、スクリプトをシンプルに保つためには、なるべく0/1のフラグとして運用する方が望ましいと思います。
ちなみに、@if を便利にした書き方もあります。拡張if文と呼ばれています。 ラベルやジャンプがよくわからないときは、この書き方を使ってみてください。
<<< if $1 == 0 { お金を拾った。 } >>>
難しい、わからない、と感じても、問題ありません。
スクリプト生成を利用すれば、 Web上でフォームに入力するだけで、 シナリオを分岐するスクリプトを生成できます。
シナリオの分岐ができたところで、 ちょっとステップアップして、 タイトル画面やメニュー画面の作成方法を説明します。
init.txt の中身をすべて削除して、次の内容を貼り付け、保存してみてください。
@gui menu.txt :START :LOAD :CONFIG :QUIT
保存したら、とりあえずゲームを実行してみてください。サンプルゲームのタイトル画面が表示されるはずです。
詳しく見ていきます。
@gui menu.txt というコマンドは、メニュー画面(GUIと呼ばれる)を表示するコマンドです。 これは gui フォルダの menu.txt というファイルで設定されているメニュー画面を表示しています。menu.txt はGUIファイルと呼ばれています。
GUIファイルの書き方については、https://suika2.com/doc/title.htmlこちらを参照 してください。
何やら難しそうと思われるかもしれませんが、理解してしまえばとても便利に使えます。
シナリオの分量が大きくなってくると、1つのスクリプトファイルで書くのが大変になります。
そこで、シナリオの章やシーンごとにスクリプトを分割する方法があります。
init.txt のコピーを作成して、second.txt と名付けてください。
init.txt と second.txt の中身をすべて削除し、 次の内容を貼り付け、保存してみてください。
init.txt:
@bg roof.png 1.0 @ch center 001-fun.png 1.0 init.txtの中にいます。 @load second.txt
second.txt:
second.txtに移動しました。
保存したら、ゲームを実行してみてください。
second.txtに移動できたことがわかるはずです。
@loadは、指定されたスクリプトファイルに移動するためのコマンドです。
ここで気をつけたいこととして、ラベルはスクリプトファイル内でのみ有効ということがあります。ジャンプ前のスクリプトファイルで使っていたラベルは、 ジャンプ後のスクリプトファイルからは使うことができません。逆に言うと、異なるスクリプトファイルで同じ名前のラベルを作成することができます。
ゲームリリース時には、素材ファイルがそのまま見えないように、ファイル群を1つのパッケージにまとめます。
この場合、suika-pro.exe を使います。( suika.exeではありません。)
suika-pro.exe を開いて、 メニューの「エクスポート(E)」から、 「Windows向けにエクスポートする」を選択します。
すると、パッケージファイル data01.arc ができあがって、出力されたフォルダが開きます。
配布ファイルには、suika.exe と data01.arc の2点があれば動作します。動画を利用した場合は mov フォルダも必要になります。(動画はパッケージに入らないため)
そのほかのフォルダ(下記)は、配布ファイルに含める必要はありません。
anime bg bgm cg ch conf cv font se txt wms
なお、パッケージとふつうのファイルの両方がある場合、ふつうのファイルが優先的に利用されます。 また、suika-pro.exe ではパッケージ内のファイルを使うことができません。
細かい演出機能はのちのち覚えていくとして、まずはこれでゲームが作れます。
以上でチュートリアルは終わりです。おつかれさまでした。
もしチュートリアルの内容でわからないことがあれば、遠慮なく下のチャットで質問してください!