Scenario Converter v1.50
シナリオ出力(ここに貼り付けてください):

画像先行読み込みJavaScriptコード出力:

Preview Mode(IE4/5)
画像先行読み込みJavaScriptコードを出力する。

■このプログラムについて

このプログラムは、 テキスト文章をWeb Novel用の文章フォーマットに自動的に変換してくれるプログラムです。
このプログラムにはWSH版があります。 ( こちらからダウンロード出来ます。
*WSH版では直接ファイルを操作出来る為、 ファイルに張り付ける手間が省けます。

Scenario ConverterはIE4.0/IE5.0/NN4.51動作確認。
PreviewModeをクリックすると、変換した文章ですぐWeb Novelを試す事が出来ます。


■使用方法

このプログラムは、シナリオテキストを、 Web Novel対応のシナリオ形式に変換し、出力するプログラムです。
シナリオテキストについてはある特定の形式で記述します。 例えば以下の様な形式で、シナリオテキストを書きます。


(変換前のテキスト)-------------------------------------------------
・・・・ここはどこだろう?
僕は目が覚めると、見知らぬ場所にいた。
ザザーッ・・・・・
静かな空間に、海の波しぶきの音が響く。
僕は周りを見回す。

人の気配はしない。すごく静かだ・・・・
・・・・ここはどこなんだろう?
・・・・いや、僕は誰なんだろう?
っ!・・・頭が激しく痛む。
何故ここにいるんだ!?
ここはどこなんだ!?

・・・考えれば考えるほど、頭が激しく痛む。なぜ、なにも思い出せないんだろう?
ザザーッ・・・・・・・
!
突然、背後で気配を感じた。
僕は・・・
-------------------------------------------------------------------
上記の文章では、空行を挟んでブロック1(ページ1)・ ブロック2(ページ2)・ブロック3(ページ3)に分けられます。

「・・・ここはどこだろう」という所から「僕は周りを見回す。」という所が 一つのブロックとなり、ここがWebNovelでいうところの1ページ単位となります。
同様に「人の気配はしない。」から「ここはどこなんだ!?」までが二つ目のブロック(二ページ目)、 「・・・考えれば考えるほど、」から「僕は・・・」はまでが三つ目のブロック(三ページ目) となるわけです。
つまり空行の挿入が改頁の合図です。 次のページへ変えたい場合は空行を一行以上挿入して下さい。

ブロック内は更に、改行によって一ラインごとに分かれます
ブロック1を見てみると、
「・・・・ここはどこだろう?」が一行目
「僕は目が覚めると、見知らぬ場所にいた。」が二行目
「ザザーッ・・・・・」が三行目
「静かな空間に、海の波しぶきの音が響く。」四行目
「僕は周りを見回す。」五行目
と分ける事が出来ます。この五行目の次が、 改頁してブロック2の「人の気配はしない。すごく静かだ・・・・」へと繋がるわけです。

シナリオ名を標準の"SCENE1"として、 Scenario Converterで上のテキストを変換すると以下の様なファイルが出力されます。

(変換後シナリオ)---------------------------------------------------
var novel = new Array();
novel["SCENE1"] = new Array();
novel["SCENE1"][0] = new Array();
novel["SCENE1"][0][0] = "・・・・ここはどこだろう?";
novel["SCENE1"][0][1] = "僕は目が覚めると、見知らぬ場所にいた。";
novel["SCENE1"][0][2] = "ザザーッ・・・・・";
novel["SCENE1"][0][3] = "静かな空間に、海の波しぶきの音が響く。";
novel["SCENE1"][0][4] = "僕は周りを見回す。";

novel["SCENE1"][1] = new Array();
novel["SCENE1"][1][0] = "人の気配はしない。すごく静かだ・・・・";
novel["SCENE1"][1][1] = "・・・・ここはどこなんだろう?";
novel["SCENE1"][1][2] = "・・・・いや、僕は誰なんだろう?";
novel["SCENE1"][1][3] = "っ!・・・頭が激しく痛む。";
novel["SCENE1"][1][4] = "何故ここにいるんだ!?";
novel["SCENE1"][1][5] = "ここはどこなんだ!?";

novel["SCENE1"][2] = new Array();
novel["SCENE1"][2][0] = "・・・考えれば考えるほど、頭が激しく痛む。なぜ、なにも思い出せないんだろう?";
novel["SCENE1"][2][1] = "ザザーッ・・・・・・・";
novel["SCENE1"][2][2] = "!";
novel["SCENE1"][2][3] = "突然、背後で気配を感じた。";
novel["SCENE1"][2][4] = "僕は・・・";
-------------------------------------------------------------------
これを別途ファイルに張り付けて、 拡張子.jsを付けて保存すればシナリオファイルの出来あがりです。

なお注意点としては 一つのブロック内では空行を一行でも挿入してはいけません。
空行を一行でも挿入してしまえば、それは違うブロックと認識されてしまいます。 一つのブロック内では空行を入れずに、詰めて書く事を意識してて下さい。

----WebNovel命令の書き方
変換するシナリオファイルにWeb novelの命令を仕込んでおけます。 指定のブロック(ページ)のとこで、「#COMMAND:value」という風に記述します。 "COMMAND"の部分には、Web Novelの命令名を、 valueのとこには代入する値(ファイル名など)を記述します。
なお命令は必ず行頭に記述するようにして下さい。#の前にスペースなどがあった場合、 命令は無効になってしまいます。

(例)--------------------------------------------
#BGIMAGE_0:../_image/001.jpg
人の気配はしない。すごく静かだ・・・・・・・・
ここはどこなんだろう?・・・・
いや、僕は誰なんだろう?
っ!・・・頭が激しく痛む。
何故ここにいるんだ!?
ここはどこなんだ!?
------------------------------------------------

変換すると、、、

------------------------------------------------
novel["SCENE1"][1] = new Array();
novel["SCENE1"][1]["BGIMAGE_0"] = "../_image/001.jpg";
novel["SCENE1"][1][0] = "人の気配はしない。すごく静かだ・・・・";
novel["SCENE1"][1][1] = "・・・・ここはどこなんだろう?";
novel["SCENE1"][1][2] = "・・・・いや、僕は誰なんだろう?";
novel["SCENE1"][1][3] = "っ!・・・頭が激しく痛む。";
novel["SCENE1"][1][4] = "何故ここにいるんだ!?";
novel["SCENE1"][1][5] = "ここはどこなんだ!?";
------------------------------------------------
とのようになります。

----シーン名の変更
シーンの名前(novel[シーン名])の変更を行うときは、 ブロックの一番上の行の行頭に、
@新しいシーン名
と書きます。

(シーン名変更)--------------------------------
#WARP:END,0
#BGIMAGE_0:../_image/001.jpg
人の気配はしない。すごく静かだ・・・・・・・・
ここはどこなんだろう?・・・・
いや、僕は誰なんだろう?
っ!・・・頭が激しく痛む。
何故ここにいるんだ!?
ここはどこなんだ!?


@END
僕は怖くなり明後日の方向に走りだした。

・
・
・
・
・
------------------------------------------------
変換すると、

------------------------------------------------
novel["SCENE1"][0]["WARP"] = "END,0";
novel["SCENE1"][0]["BGIMAGE_0"] = "../_image/001.jpg";
novel["SCENE1"][0][0] = "人の気配はしない。すごく静かだ・・・・・・・・";
novel["SCENE1"][0][1] = "ここはどこなんだろう?・・・・";
novel["SCENE1"][0][2] = "いや、僕は誰なんだろう?";
novel["SCENE1"][0][3] = "っ!・・・頭が激しく痛む。";
novel["SCENE1"][0][4] = "何故ここにいるんだ!?";
novel["SCENE1"][0][5] = "ここはどこなんだ!?";

// Scene : END //
novel["END"] = new Array();
novel["END"][0] = new Array();
novel["END"][0][0] = "僕は怖くなり明後日の方向に走りだした。";

novel["END"][1] = new Array();
novel["END"][1][0] = "・";
novel["END"][1][1] = "・";
novel["END"][1][2] = "・";
novel["END"][1][3] = "・";
novel["END"][1][4] = "・";

------------------------------------------------
上記の例ではWARPという命令を使い、novel["SCENE1"][0][5]("ここはどこなんだ!?")の文章 が読み込まれた後、 自動的にnovel["END"][0][0]("僕は怖くなり明後日の方向に走りだした。")へと飛びます。


----コメント行
行頭が / で始まる文は無視されます。

■マクロ

変換をする上で役立つマクロ命令が幾つかあります。

・$SELECT....$END
間に書かれた複数行の文章をSELECT命令の選択肢として扱います

$SELECTをまず行頭に記述します($の前にスペースなどを空けないで下さい。)
続いて改行して、選択肢1,2,3....を作成します。 そして最後にまた改行して、行頭に$ENDを記述するまでが選択肢の作成エリアです。

選択肢の作成方法は、まず行頭に半角で選択肢の番号を書き、 その後ろに続けて":"(コロン/半角)を記述します。(例:1:  2: 3:など)
コロンの後ろにその選択肢の要素を記述します。 選択肢の要素はHTMLタグの要素と同じく、要素名="データ"の要に記述します。 なおデータは必ず"..."(ダブルクォーテーション)で囲むようにして下さい。
選択肢の要素は以下の通りです。

value:選択時に表示される選択肢のメッセージ。
scene:この選択肢をクリックした時に飛ぶ、移動先のシーン名
page:この選択肢をクリックした時に飛ぶ、移動先(sceneで指定したシナリオ)のページ番号。
code:JavaScriptのコードを埋めこむ事が出来る。

下の例文は、選択肢が3つの場合の例です。 選択肢1をクリックすると、 シナリオファイルの novel["MAIN"][0] のページへとジャンプします。 選択肢2の場合も同様です。選択肢3はジャンプではなく、 code="..."を記述する事により、 クリックされた時にアラートボックスを表示するイベントを起こします。

------------------------------------------------
$SELECT
1:scene="MAIN1" page="0" value="ゲームを開始する"
2:scene="INPUTNAME" page="0" value="名前を変更する"
3:value="クレジット" code="alert('(c) JavaC')"
$END
------------------------------------------------
・$WARP....$END
間に書かれた複数行の文章をWARP命令として扱います。 単純なワープ(移動)などではなく、条件を付けたWARP命令をお使いになる時などに。

$WARPをまず行頭に記述します($の前にスペースなどを空けないで下さい。)
続いて改行して、ワープのパターン1,2....を作成します。 そして最後にまた改行して、行頭に$ENDを記述するまでが選択肢の作成エリアです。

WARPの条件分岐の作成方法は、まず行頭に半角で番号を書き、 その後ろに続けて":"(コロン/半角)を記述します。(例:1:  2: 3:など)
コロンの後ろにそのWARPの要素・条件を記述します。 要素・条件はHTMLタグの要素と同じく、要素名="データ"の要に記述します。 なおデータは必ず"..."(ダブルクォーテーション)で囲むようにして下さい。
選択肢の要素は以下の通りです。

scene:ワープ先のシーン名
page:ワープ先(sceneで指定したシナリオ)のページ番号。
if:この移動を行う為の条件。JavaScriptの演算子を用いる。

下の例文は、flagReader()関数で読みこんだ値によって条件分岐する例文です。 フラグ配列[3]の値が1だった場合、番号1のシーン(SCENE1)へと飛び、 そうでは無い場合は2のシーン(SCENE2)へと飛びます。
------------------------------------------------
$WARP
1:scene="SCENE1" page="0" if="flagReader(3) == 1"
2:scene="SCENE2" page="0"
$END
------------------------------------------------
ちなみに、1から順に優先的に条件判断していくので、
------------------------------------------------
$WARP
1:scene="SCENE1" page="0"
2:scene="SCENE2" page="0" if="flagReader(3) == 1"
$END
------------------------------------------------
と書いた場合、例えフラグ配列[3]の値が1でも、 番号1のシーン(SCENE1)へと飛んでしまいます。

・$FUNCTION....$END
間に書かれた複数行の文章は変換されずに、そのままJavaScriptのコードとして残ります。
フラグ判定の関数や、その他自作関数を定義したい時にお使い下さい。 当然ですが、この間に書かれたコードに問題があった場合実行時にエラーが発生します。

------------------------------------------------
/フラグを判定する一例
$FUNCTION
function judgeEndingMode() {
 if(eval(flagReader(2)) >=2)  {
   alert("OK");
 } else {
   alert("NO");
 }
}
$END
------------------------------------------------
変換後もそのまま残ります。 実行したい時は"COMMAND"命令などを使って呼び出してください。

・$NOBREAK....$END
間に書かれた複数行の文章を一行として扱う。
文章中にHTMLなどを挿入する時、 一行に無理矢理詰めて書くとソースを理解しづらくなります。 このマクロを利用する事によって複数行に分けて書いても、 変換の結果、Web Novelの一行分のデータとして扱う事が出来ます。

------------------------------------------------
$NOBREAK
<div align=CENTER><b>推理狂の館 - Menu</b></div>
<ul>
 <li><a href=# onclick=\"clickSelect('MAIN1,0,0')\">ゲームを開始する</a>
 <li><a href=# onclick=\"clickSelect('INPUTNAME,0,0')\">名前変更</a>
 <li><a href=# onclick=\"clickSelect('CREDIT,0,0')\">クレジット</a>
</ul>
$END
------------------------------------------------
変換後:
novel["SCENE1"][0][0] = "<div align=CENTER><b>推理狂の館 - Menu</b></div><ul> <li><a href=# onclick=\"clickSelect('MAIN1,0,0')\">ゲームを開始する</a> <li><a href=# onclick=\"clickSelect('INPUTNAME,0,0')\">名前変更</a> <li><a href=# onclick=\"clickSelect('CREDIT,0,0')\">クレジット</a></ul>";

・$REPLACE:A,B
変換するテキストに書かれているAという文字をBへと変換します。
ヘッダに書いておくといいでしょう。


■文章作成時の注意


[ BACK ]