| hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。 |
ここはHSP開発wikiで研究中のアドベンチャーエンジンで動作するシナリオデータに関するページです。
シナリオスクリプトとは、アドベンチャーエンジン(シナリオプレーヤー)で再生するための脚本データのこと。
キャラクターのセリフや行動、イベント、条件分岐などを記述している。
通常はプログラマーではなくシナリオライターが担当するため理解しやすい書式が使われている。
単にスクリプトとかシナリオとも言うが、ここではHSPのスクリプトや普通の文章で書いたシナリオとを明確に区別するためとりあえずこの名称を使用した。
シナリオスクリプトの望ましい命令形式とスタイルなどを協議しましょう。
解決した問題は、対する結論とセットにしておきたいと思います。
不足や思った事があれば追加してください。
|
シナリオスクリプトはノートパッドなどのテキストエディタで編集のできるテキストファイルである。 メッセージやセリフを表示するのに特別な書式は用いず、表示したい文章をそのまま入力すればよい。 つまり、 こんにちわ、世界。アドベンチャーエンジンを作りましょう! エンジンの世界は広大です。 と書けば こんにちわ、世界。アドベンチャーエンジンを作りましょう!エンジンの世界は広大です。 と画面に表示される。 もしあなたが改行させたり、セリフの位置・大きさ・色・表示速度の変更、音楽の再生、画像の表示などを行いたいときは、シナリオファイルに以下の特別な書式を用いて、画面に変化を与えることができる。 |
|
命令は命令記号 [ ] で囲むことにより、命令として判断される。 [ color 255, 128, 0 ] メッセージ と書けば、
と表示される。 \[ \] \{ \} \\ \/ \*
と書けば、 [ ] { } \ / *
と表示される。 |
以下命令形式の草案は臨場感を出すために命令を仮にcmdとし、パラメータ名をprm、パラメータ値をvalとします。
HSP形式:
cmd val1, val2, val3 アドベンチャーエンジンを作ろう!
HTML形式:
<cmd prm1=val1 prm2=val2 prm3=val3> アドベンチャーエンジンを作ろう! </cmd>
タグ形式:
<cmd val1, val2, val3> アドベンチャーエンジンを作ろう!
ファニー形式:
#cmd val1, val2, val3 アドベンチャーエンジンを作ろう!
| + | ブロック命令例 |
@bgimg "sample1.jpg" |
(type.1) [color 255]●[/color][color 255,255]●[/color][color 0,0,255]●[/color]こういったタイプの命令にHTML形式(インライン命令)を使うとか...。ただこういう書き方(KAGもこんなんだったような)は今のところ出来ないことになっているので、タグ形式(ファニーと大差ない)で...
| + | type.2 |
(type.2) [color 255] ● [color 255,255] ● [color 0,0,255] ● |
[color 255]●[/color][color 255,255]●[/color][color 0,0,255]●[/color]だと、この場合はRGB値とネストレベルを保存して置かないとダメですよね。それが必要ないなら、
[color 255]●[color 255,255]●[color 0,0,255]●[color 255]ってなるんでしょうか?
| + | []タグ案 |
[bgimg "sample1.jpg"] [color 255] ● [color 255, 128] ● |
| + | 表示する文字を""で囲む案 |
color 255 "●" color 255, 128 "●" |
| + | type.3 |
(type.3) [color 255]●[color 255,255]●[color 0,0,255]●[color 255] |
| + | <>タグ案 |
<cmdA prm1, prm2, prm3, ...>こんにちわ、世界!<cmdB prm1> <*label> <//comment> <#> |
| + | 式を計算するコマンド案[]タグ例 |
[calc $op1 = 1] [calc $op2 = 1] [cals $ans = $op1 + $op2] ; 変数の扱いは現行と違うかも知れないけど本題は上の命令 $op1足す$op2は$ansです。 |
| + | 変数使用時のタグ例 |
[color 255,128,0]
[var x = 20]
There are {x}pens on the table.
|
| + | 考察 |
シナリオスクリプトイメージ
#color 0,0,0 #Val $name$ = "太郎" 私の[color 255,0,0]名前[color 0,0,0]は$name$です。出力イメージ
color命令書式 [color 0,0,0] //標準書式 #color 0,0,0 //省略書式
Val命令 [Val $name$ = "太郎"] //標準書式 #Val $name$ = "太郎" //省略書式
処理の分割イメージ
命令とパラメータ
| |||||||||||||||||||||||||||||||||||||||||||||||
[color 255,255[c]なんていう省略を可能にしています。これならば、一つの記号で、省略もできますし・・・。
一応、こんな感じかなぁと思うので、実行してみてくださいm(_ _)m
判定などが緩く、少し変わったことをすればエラーになりますが、
どんなもんかニャンっって気分で試して下さい☆
>>(スクリプトはメインページに移動・更新しました)<<
感想をいただけるとアリガたいデス。
「ファイル数が多くて面倒だっ」っていう感想でも構いません(笑)・・・ごめんなさい(汗) -- りさ
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 | |
| + | 全角判定0.3 |
![]()
|
| + | 半角判定関数 |
![]()
|
(p1<=$80)|(($a0<=p1)&(p1<=$df))の方がいいかも知れません。 --osakana
最低限シナリオを書くのに必要な命令を提案してください
| [ Cmd p1, p2, ... ] | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Cmd | 機能 | p1 | p2 | p3 | p4 | p5 | p6 | p7 | p8 | p9 | p10 | p11 | p12 | 実装 | 種類 |
| * | ラベル | *ラベル名 | 済 | (書式) | |||||||||||
| // | 単行コメント | //コメント内容 | 済 | (書式) | |||||||||||
| /*〜*/ | 複行コメント | /*コメント内容*/ | 済 | (書式) | |||||||||||
| {〜} | 式演算 | 式 | 済 | (書式) | |||||||||||
| Await | 一時停止(ms) | 済 | プログラム制御 | ||||||||||||
| BG_IMG | 背景変更 (スタティック) | "ファイル名" | 済 | 描画 | |||||||||||
| BG_Color | 背景色変更 (スタティック) | R | G | B | 済 | 描画 | |||||||||
| BG_FadeCover? | 背景変更 (フェード・カバー) | "ファイル名" | ステップ | 間隔(ms) | 済 | 描画 | |||||||||
| BG_FadeCross? | 背景変更 (フェード・クロス) | "ファイル名" | ステップ | 間隔(ms) | 済 | 描画 | |||||||||
| BG_Cartain | 背景変更 (カーテン) | "ファイル名" | ON種 | OFF種 | ステップ | 軸 | 正負 | 間隔 | R | G | B | ON/OFF間隔 | 文字 | 済 | 描画 |
| Button | ボタン | "文字列" | *ラベル名 | 済 | オブジェクト制御 | ||||||||||
| C | キー入力待ち | 改行数 | 済 | プログラム制御 | |||||||||||
| CNew | キー入力待ち +頁変更待ち | 改行数 | 済 | プログラム制御 | |||||||||||
| Color | 文字色設定 | RGBの赤 | RGBの緑 | RGBの青 | 済 | 文字列操作 | |||||||||
| End | 実行終了 | 済 | プログラム制御 | ||||||||||||
| Font | フォント設定 | "フォント名" | サイズ | スタイル | 済 | 文字列操作 | |||||||||
| Frame | フレーム設定 | "ファイル名" | 座標x | 座標y | 透過率 | 済 | 描画 | ||||||||
| Gosub | 指定ラベルにジャンプ | *ラベル名 | 済 | プログラム制御 | |||||||||||
| Goto | 指定ラベルに1wayジャンプ | *ラベル名 | 済 | プログラム制御 | |||||||||||
| If 〜 Else 〜 | 条件分岐 | 条件式 | 真の場合の動作 | 偽の場合の動作 | プログラム制御 | ||||||||||
| Input | 文字列入力 | オブジェクト制御 | |||||||||||||
| Link | リンクの配置 | "選択項目1" | *ラベル名 | "選択項目2" | *ラベル名 | ... | オブジェクト制御 | ||||||||
| LoadData? | データのロード | ファイル操作 | |||||||||||||
| LoadScript? | 他スクリプトファイル読み込み | ファイル操作 | |||||||||||||
| Mes | 文字列描画 | "文字列" | 済 | 画面制御 | |||||||||||
| Music_Play | 音楽再生 | "ファイル名" | 済 | マルチメディア制御 | |||||||||||
| Music_Stop | 音楽停止 | 済 | マルチメディア制御 | ||||||||||||
| New | 画面クリア&頁変更 | 済 | プログラム制御 | ||||||||||||
| Pos | 初期位置設定 | 座標x | 座標y | 済 | 画面制御 | ||||||||||
| Redraw | 描画スイッチ | モード(0-3) | 済 | 画面制御 | |||||||||||
| Repeat 〜 Loop | 繰り返し処理 | 繰り返し回数 | 処理の内容 | 済 | プログラム制御 | ||||||||||
| Return | gosubでのジャンプから戻る | 済 | プログラム制御 | ||||||||||||
| SaveData? | データのセーブ | ファイル操作 | |||||||||||||
| Shadow | 影文字設定 | 距離x | 距離y | R | G | B | 済 | 文字列操作 | |||||||
| Sound_Play | 効果音再生 | "ファイル名" | 済 | マルチメディア制御 | |||||||||||
| Speed | 文字表示速度 | 待ち時間(ms) | 済 | 文字列操作 | |||||||||||
| Stop | 実行停止 | 済 | プログラム制御 | ||||||||||||
| Surround | 囲文字設定 | 距離 | 0=鋭角 1=丸角 | R | G | B | 済 | 文字列操作 | |||||||
| Var | 式演算 | 式 | 済 | (書式) | |||||||||||
| Wait | 一時停止(10ms) | 済 | プログラム制御 | ||||||||||||
| Wrap | 文字表示限界 | 0=なし 1=折り返し 2=切捨て | 文字数(byte) | 済 | 文字列操作 | ||||||||||
Var {name} = "太郎"
私の名前は{name}です。
出力:
私の名前は太郎です。
1| Var {name} = "太郎"
2| @Var {name} = "太郎"
3| [Manage name = "name" value = "太郎"]
4| Var {name} ,"太郎"
5| [Var {name}, "太郎"]
6| [Var name = "太郎"]
7| [ {name} = "太郎" ]
8| [ name = "次郎" ]
9| @Var name = "太郎"
| + | 代入命令の入力ログ |
|
| + | if〜else〜endif その2 |
{ y = 128 } ;表示
[ calc z = 255 ] ;非表示({ }は省略している)
[ { x = 255 } ] ;非表示
[ if { (y == x)
&(z != x) } ]
yは{x}です。
[ else ]
yは{x}じゃないです。
[ if z == x ]
zは{x}です。
[ endif ]
[ endif ]
これの出力
128 yは255じゃないです。 zは255です。 |
式を出力せずに記述する命令の書き方についてです。
イメージこんなのです。
[calc {x = "こんにちは"}]
とりあえず考えられる書式を列挙してみました。
1-1| [ calc {x} = {a} + {b}]
1-2| @calc {x} = {a} + {b}
1-3| [ {x} = {a} + {b} ]
-----------------------------
2-1| [ calc {x = a + b} ]
2-2| @calc {x = a + b}
2-3| [ {x = a + b} ]
2-4| [ calc x = a + b ]
2-5| @calc x = a + b
-----------------------------
A-1| { x = a + b }
A-2| [ x = a + b ]
Aを除いて、それぞれ○-1が基本形で、続く○-2、○-3、…は省略形という位置付けです。Aはその他。
'議論'
[ str x = a + b ] [ var x = a + b ]と用意しなきゃならない気もしてきますね〜・・・・。
x ++ // x をインクリメント pos -10 // ( -10, 0 ) にカレントポジション移動こういうのを判断できますでしょうか・・・。基準が分からない・・(><; でも A-1 と A-2 を見るとどうしてもコレ実装したいデス(^^! -- りさ
| + | 考察 |
イメージ
[{x = 3}]
式は{ x = 1 + 2 }
Xは{ 1 + 2 }です。
出力
式は1 ;真なので1? Xは3です。 {{ }} //もしくは
[[ ]] //とか。
表示したい時はカッコ1つ、表示しない時2つ。又はその逆(表示したい時2つ) --osakana
|
| + | MDL_FORMULA.AS |
x = 5 // 5 を x に代入する。代入演算子が複数ある場合は、一番左側の変数の値を返す。 k == 2 // 2 と x を等価か判断します。x が 2 なら 1 を それ以外なら 0 を返します。 5-2 // 3 を返します。if 命令なんかで使うと常にTRUE 扱いです。var 命令は無視デス。
|
その前に、endif の動作を決定しないとマズイってことが分かりました、スミマセン(涙
[if x == 5] [if y == 5]みんな5[else]かたっぽ5[endif★] [else] [if y == 5]かたっぽ5[else]みんな5じゃない[endif★] [endif]
この★マークのendifをハズしちゃうと、どういう処理になるんでしょうか?? -- りさ
ネスト限界でエラーになるか、ファイルの最後をendifとみなすか…、やっぱり「endifが見つかりません」とエラー停止というところでしょうか。-- GENKI?
これはネストレベル=3までのサンプル構造です。
| + | NestSample_lev3 |
|
[if x == 5] [if y == 5]みんな5[end_if] [else]かたっぽ5[end_else] [end_if] [else] [if y == 5]かたっぽ5[end_if] [else]みんな5じゃない[end_else] [end_else]ライターさんの負担増・・。
[if x == 5] [if y == 5]みんな5[else]かたっぽ5[end_else][end_if] [else] [if y == 5]かたっぽ5[else]みんな5じゃない[end_else][end_if] [end_else] [end_if]同じく負担増・・。
gotoおよびgosubなどで使用する。
書式
*label
シナリオスクリプトのサンプルです。
使用方法はアドベンチャーエンジンのサンプルをご覧下さい。
| + | scenario.txt |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 | |
| + | 過去ログ |
|
| + | シナリオファイルを構成する要素 |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||