最近、ノベル型アドベンチャーに触れたので、
あたしの持ってる知識を提供しようと思います。
(サウンドノベルを作ってるので)
っていうか、それくらいしかできないので・・・
HSPの標準命令だけで作っています♪
<画像>
レイヤー機能等が存在しない為、全てを仮想画面で補います。
①背景
背景の為には2枚の画像を用意します
フェードイン・フェードアウトで使用します
但しその内の1枚は一時的なバッファでOKです
②前景
前景にはBMPを読み込む1枚あれば充分です
透過色は固定した色(例えば0xFF00FFなど)を使用します
注意点としては、背景の数だけbuffer で用意すると、
とんでもない量になるので、随時、読み込む必要があるということです。
640x480の普通のサイズでは、読み込み時間は感じられません。
<音楽>
これはmm系命令だけでは不十分なので、mci命令を使います。
特に9x系マシンでは、mm系命令は正常に動作しない可能性が
あることが分かっています(経験上)。
同じく、随時、読み込みます。
<文章>
一番重要なのは、「外部ファイルを使用する」ということです。
これにより再開発が避けられます。
外部ファイルはテキストファイルで充分です。
①文章を読み込み、表示する。
一応、付属のhsp3util.asでも構わないので、
一文字ずつ表示できるようにします。
外部ファイルを読み込み、一つの大きな変数に代入します。
getstr命令で一行一行読み込みます。
note系命令の方がいいかと。ただ個人的にnote系がキライなので(笑
②アクションを表示する。
改段落のクリック待ちや、改頁のクリック待ち、
背景変更や前景変更、BGM変更や効果音再生、
その他のイベント等には、特殊記号を使用します。
// ---------- テキストファイル ---------- //
これは最初のページです。
-pr
簡単な例です。
-pr
特殊記号を採用すると、
イベントを発生させることができます。
+pg
次のページです。
// -------------------------------------- //
// 動かないサンプル sdim scenario, 96000 bload "scenario.txt", scenario n = 0 // カウンタ page = 0 // ページ数 tmp = "" // 記号用 string = "" // 表示文字 *main // 一行読み込む getstr string, scenario, n n += strsize // 表示文字なら表示 tmp = strmid( string, 0, 1 ) if ( tmp =! "-" ) & ( tmp =! "+" ) { emes string page++ goto *main } // 3文字取り出す tmp = strmid( string, 0, 3 ) // 場合わけ switch ( tmp ) case "-pr" // 改行 // クリック待ち mes swbreak case "+pg" // 改頁 // クリック待ち cls page++ swbreak case "ms" // 音楽再生 swbreak // その他の処理 default swbreak swend goto *main
ページは、"+"の数を数えます。
途中からロードするときは、このmainの前に、
ページ数だけ"+"の行を読み込んで、n の値をセットします。
背景は例えば"-bg001.jpg"などとして、001.jpg を読み込みます。
ページの途中で変更すると表示文字が消えてしまうので、
再描画するための、「現在ページ文字」を記録する必要があります。
色々付け加えることで、機能も充実してくることと思います・・・
なにか謎な点とかあったら、聞いてください。
少しでも参考になれば嬉しいです☆
(もっといい方法があるかもデス。むしろ教えてください(笑))