2012年11月18日日曜日

シナリオはメモ帳で

ブログタイトル変えました。
凝ったタイトルはセンスが良ければいいんですけど……なんか中二病的な恥ずかしさを開設当初から感じていたので変えました。
「てんこブログ」です。ひねりも何もないタイトルですね。

さて、ADVゲームの作成を進めています。
自作システムでRPGとかはハードルが高いですが、ADVならわりと簡単に出来るのではないかと思います。
すごくテキストが多くなるので、イベントのシナリオは全てメモ帳で進めることにしました。

コモンを組む上でたては様作成の「テキスト読み込みコモン」を参考にさせていただきました。

シナリオ作成の手順はこんな感じです。
①メモ帳にがーっとシナリオを書く(文章表示・立ち絵表示・選択肢など)
②文字列操作→ファイル内容読み込みで書いたシナリオを指定
③読み込んだファイルから一行切出・一文字切出を繰り返す
④命令用の文字列を決めておき、それに応じて分岐する

命令用の文字列というのは、たとえば、文章表示なら文、画像表示なら画、選択肢表示なら>のように記号を決めておきます。

長くなりそうなので以下追記。

私の組んだコモンは以下のような感じです。
青字が文章表示に関するところ。黄色が選択肢分岐に関するところ。
■ループ開始
|■ウェイト:1 フレーム
|■文字列操作:CSelf7[一行切り出し用] =<上1行切出> CSelf6[読み込んだテキスト]
|■文字列操作:CSelf8[一文字切り出し用] =<1文字切出> CSelf7[一行切り出し用]
|■条件分岐(文字): 【1】このコモンEvセルフ変数8 が"文" と同じ 【2】このコモンEvセルフ変数8 が">" と同じ 【3】このコモンEvセルフ変数8 が"<" と同じ
|-◇分岐: 【1】 [ このコモンEvセルフ変数8 が"文" と同じ ]の場合↓
||■ループ開始
|||■文字列操作:CSelf7[一行切り出し用] =<上1行切出> CSelf6[読み込んだテキスト]
|||■文字列操作:CSelf8[一文字切り出し用] =<1文字切出> CSelf7[一行切り出し用]
|||■条件分岐(文字): 【1】このコモンEvセルフ変数8 が"" と同じ

|||-◇分岐: 【1】 [ このコモンEvセルフ変数8 が"" と同じ ]の場合↓
||||■ループ中断
||||■
|||◇分岐終了◇
|||■文字列操作:CSelf9[表示する文章] += CSelf8[一文字切り出し用]
|||■文字列操作:CSelf9[表示する文章] += CSelf7[一行切り出し用]
|||■文字列操作:CSelf9[表示する文章] += "\n"
|||■
||◇ループここまで◇◇
||■文章:\cself[9]
||■文字列操作:CSelf9[表示する文章] = ""
||■
|-◇分岐: 【2】 [ このコモンEvセルフ変数8 が">" と同じ ]の場合↓
||▼ >で選択肢表示
||■変数操作: CSelf10[一時変数] = 0 + 0
||■可変DB書込:DB[4:0:0](:選択肢1表示用)  =  CSelf7[一行切り出し用]
||■ループ開始
|||■変数操作: CSelf10[一時変数] += 1 + 0
|||■文字列操作:CSelf7[一行切り出し用] =<上1行切出> CSelf6[読み込んだテキスト]
|||■文字列操作:CSelf8[一文字切り出し用] =<1文字切出> CSelf7[一行切り出し用]
|||■条件分岐(文字): 【1】このコモンEvセルフ変数8 が">" と同じ 【2】このコモンEvセルフ変数8 が"" と同じ 【3】このコモンEvセルフ変数8 が"┗" と同じ
|||-◇分岐: 【1】 [ このコモンEvセルフ変数8 が">" と同じ ]の場合↓
||||■可変DB書込:DB[4:0:CSelf10[一時変数]]()  =  CSelf7[一行切り出し用]
||||■
|||-◇分岐: 【2】 [ このコモンEvセルフ変数8 が"" と同じ ]の場合↓
||||■ループ中断
||||■
|||-◇分岐: 【3】 [ このコモンEvセルフ変数8 が"┗" と同じ ]の場合↓
||||▼ ジャンプ先をそれぞれ指定
||||■変数操作: CSelf10[一時変数] = 5 + 0
||||■ループ開始
|||||■文字列操作:CSelf8[一文字切り出し用] =<1文字切出> CSelf7[一行切り出し用]
|||||■条件分岐(文字): 【1】このコモンEvセルフ変数8 が"," と同じ 【2】このコモンEvセルフ変数8 が"" と同じ
|||||-◇分岐: 【1】 [ このコモンEvセルフ変数8 が"," と同じ ]の場合↓
||||||■変数操作: CSelf10[一時変数] += 1 + 0
||||||■文字列操作:CSelf8[一文字切り出し用] =<1文字切出> CSelf7[一行切り出し用]
||||||■
|||||-◇分岐: 【2】 [ このコモンEvセルフ変数8 が"" と同じ ]の場合↓
||||||■ループ中断
||||||■
|||||◇分岐終了◇
|||||■可変DB書込:DB[4:0:CSelf10[一時変数]]()  +=  CSelf8[一文字切り出し用]
|||||■
||||◇ループここまで◇◇
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■イベントの挿入: CSelf5[file名(data/] = コモン11:[ ┣選択肢表示 ]
||■変数操作: CSelf10[一時変数] = 0 + 0
||■可変DB書込:DB[4:0:5](:選択肢1のジャンプ先)  =  ""
||■可変DB書込:DB[4:0:6](:選択肢2のジャンプ先)  =  ""
||■可変DB書込:DB[4:0:7](:選択肢3のジャンプ先)  =  ""
||■可変DB書込:DB[4:0:8](:選択肢4のジャンプ先)  =  ""
||■可変DB書込:DB[4:0:9](:選択肢5のジャンプ先)  =  ""
||■ループ開始
|||■条件分岐(文字): 【1】このコモンEvセルフ変数5 が"" と同じ
|||-◇分岐: 【1】 [ このコモンEvセルフ変数5 が"" と同じ ]の場合↓
||||■ループ中断
||||■
|||◇分岐終了◇
|||■文字列操作:CSelf7[一行切り出し用] =<上1行切出> CSelf6[読み込んだテキスト]
|||■文字列操作:CSelf8[一文字切り出し用] =<1文字切出> CSelf7[一行切り出し用]
|||■条件分岐(文字): 【1】このコモンEvセルフ変数8 が"<" と同じ
|||-◇分岐: 【1】 [ このコモンEvセルフ変数8 が"<" と同じ ]の場合↓
||||■条件分岐(文字): 【1】このコモンEvセルフ変数7 が"\cself[5]" と同じ
||||-◇分岐: 【1】 [ このコモンEvセルフ変数7 が"\cself[5]" と同じ ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■
|-◇分岐: 【3】 [ このコモンEvセルフ変数8 が"<" と同じ ]の場合↓
||▼ <終まで行くと分岐終了
||■ループ開始
|||■文字列操作:CSelf7[一行切り出し用] =<上1行切出> CSelf6[読み込んだテキスト]
|||■文字列操作:CSelf8[一文字切り出し用] =<1文字切出> CSelf7[一行切り出し用]
|||■条件分岐(文字): 【1】このコモンEvセルフ変数8 が"<" と同じ
|||-◇分岐: 【1】 [ このコモンEvセルフ変数8 が"<" と同じ ]の場合↓
||||■文字列操作:CSelf8[一文字切り出し用] =<1文字切出> CSelf7[一行切り出し用]
||||■条件分岐(文字): 【1】このコモンEvセルフ変数8 が"終" と同じ
||||-◇分岐: 【1】 [ このコモンEvセルフ変数8 が"終" と同じ ]の場合↓
|||||■ループ中断
|||||■
||||◇分岐終了◇
||||■
|||◇分岐終了◇
|||■
||◇ループここまで◇◇
||■


選択肢の命令はごちゃごちゃしてしまったのでわかりにくいと思いますが。
簡単に言うと「>」の命令で選択肢表示。その下に「┗」の記号を置いてジャンプ先指定というようなことをしています。
選択肢は可変DBに入れておいて、実際に選択肢を画面表示し、プレイヤーに選択してもらうのは呼び出した別のコモンで処理します。
 「<終」で分岐終了です。


例えばメモ帳に以下のようにシナリオを書いたとします。
















で、これをシナリオ読み込みイベントで読み込んで実行させるとこんな感じになります。

▼「文」の下の行から文章表示
















▼>で選択肢表示。三行書いたら3つの選択肢が出ます。
















▼右を選ぶと<右と指定された位置へ















▼<左で書かれた命令の部分は無視し、「<終」というところまでジャンプします。
















▼もう一度最初からやって、今度は左の道を選択してみます。















▼「<左」というところまでジャンプして文章が表示されます。















▼「<終」までくると、分岐終了して共通のメッセージになります。
















たぶん他の基本のADVツールも同じような仕組みだろうと思いました。(使ったことないけど)
命令文がifとかelseとかなだけで?
ウディタでつくる利点は、自分で好きな命令文を組めるところですかね。
「文」とか。シンプルでコマンドを覚える必要がありません。自分で作ってるんだもの。

デメリットとしては、文字列分岐ばかりになるので、動作が重くなるかもしれません。
今のところ、特に重いと感じてはいませんが……。

0 件のコメント:

コメントを投稿