hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
アドベンチャーエンジン/シナリオスクリプト - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

アドベンチャーエンジン

シナリオスクリプト †

ここはHSP開発wikiで研究中のアドベンチャーエンジンで動作するシナリオデータに関するページです。

シナリオスクリプトとは、アドベンチャーエンジン(シナリオプレーヤー)で再生するための脚本データのこと。
キャラクターのセリフや行動、イベント、条件分岐などを記述している。

通常はプログラマーではなくシナリオライターが担当するため理解しやすい書式が使われている。
単にスクリプトとかシナリオとも言うが、ここではHSPのスクリプトや普通の文章で書いたシナリオとを明確に区別するためとりあえずこの名称を使用した。

↑

シナリオスクリプトの仕様(検討中) †

シナリオスクリプトの望ましい命令形式とスタイルなどを協議しましょう。
解決した問題は、対する結論とセットにしておきたいと思います。
不足や思った事があれば追加してください。

↑

基本書式 †

シナリオスクリプトはノートパッドなどのテキストエディタで編集のできるテキストファイルである。
シナリオスクリプトに書いたテキストは通常読み込まれるとそのまま画面に表示されるメッセージやセリフとなる。

メッセージやセリフを表示するのに特別な書式は用いず、表示したい文章をそのまま入力すればよい。
また文章の途中で改行させても、改行は無視されるため、エディタの画面に収まらないほど長い文章を、ファイル上では改行して書くことができる。

つまり、

こんにちわ、世界。アドベンチャーエンジンを作りましょう!

エンジンの世界は広大です。

と書けば

こんにちわ、世界。アドベンチャーエンジンを作りましょう!エンジンの世界は広大です。

と画面に表示される。

もしあなたが改行させたり、セリフの位置・大きさ・色・表示速度の変更、音楽の再生、画像の表示などを行いたいときは、シナリオファイルに以下の特別な書式を用いて、画面に変化を与えることができる。
この特別な書式を、命令もしくはコマンドと呼ぶこととする。

  • 基本的な文章の表示に関する仕様を書いてみました。これは現状に沿っ...ってなかったorzテキスト上の改行は画面でも改行するのですね?というわけで本当のことを書くようお願いします。 -- kz3 2006-10-24 (火) 09:39:50
  • わかりましたっ☆でも、いい例が見つからニャい(^^; -- りさ 2006-10-24 (火) 12:23:37
  • 例が間違ってる...;;えっとつまり上ではシナリオファイル上の改行は、画面上には反映しない、と説明しているのですが、現状はシナリオファイル上の改行は画面上でも改行していますよね。シナリオ本文の基本としてシナリオファイル中の本文の改行は画面でも改行するのかしないのかという仕様を決めましょう、ということでした。もし、「する」なら改行を無視して次の行の文章を前の文章の後ろにくっつけて表示するような命令が必要になるでしょうし、「しない」なら次の文章を改行して表示する命令が必要になるということです...。(ここでの改行はクリック待ち改行ではありません。) -- kz3 2006-10-24 (火) 13:11:12
  • そんでもって「こんにちわ世界」はプログラミング共通の挨拶...なんてことはまぁいいか^^; -- kz3 2006-10-24 (火) 13:12:09
  • あっそういう意味だったんデスかぁ。Hello, World ですよねっ(^^ あれって日本語にすると、「こんにちわ世界」なんですかっ(^^!? それにしときましょう! -- りさ 2006-10-24 (火) 16:47:07
  • 今のところ、こ〜んな感じで想定してるのですが、意図された通りになってるでしょうか(^^? -- りさ 2006-10-24 (火) 16:52:59
  • いい感じの説明ですね。これはこのまま決定稿でいけそうな気がします。改行の取扱いもこれでいいと思いますし。 -- GENKI? 2006-10-24 (火) 22:20:07
  • えっとつまり、改行はそのまま画面に反映されて、次の行のセリフを前の行のセリフの後ろから表示したい時は「#-1」とするようですね、そうすると...ちょっと説明を修正しました。ここでは単純にシナリオファイル上の複数行のセリフが画面にどう表示されるのかだけを説明して「#-1」などの命令は下の命令書式(必要なコマンド)の方で取り上げていきましょう。 -- kz3 2006-10-24 (火) 22:51:14
  • そうデス☆それが一番分かり易いかなぁ〜って思います☆ -- りさ 2006-10-25 (水) 00:55:06

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White
↑

命令書式 †

命令は命令記号 [ ] で囲むことにより、命令として判断される。

例えば文字色を変更するcolor命令の場合、

[ color 255, 128, 0 ] メッセージ

と書けば、

メッセージ

と表示される。

また、[ ] を表示するために、7種類の EscapeSequence? を用意する。

\[   \]   \{   \}   \\   \/   \*

と書けば、

[   ]   {   }   \   /   *

と表示される。

(テキストをなるべくそのまま表示したいので、HSPコメントの ; は削除しようかと思っています☆)

以下命令形式の草案は臨場感を出すために命令を仮にcmdとし、パラメータ名をprm、パラメータ値をvalとします。

HSP形式:

cmd val1, val2, val3
アドベンチャーエンジンを作ろう!
  • 長所
    • HSPユーザーには見慣れた形式で覚えやすい。
  • 短所
    • セリフ入力に制限がかかる。
      現在予定している書き方(命令を使用しない)では、書き出しにアルファベットが使えない(命令や変数との区別がつかないため。)
      回避方法として、「mes "セリフ"」とすればいいが、ライターへの負担が大きい。(というかそれじゃHSPスクリプトを解釈するのと大して変わらない)
    • 入力するパラメータ入力場所を間違えると最悪の場合エラーで停止する。

HTML形式:

<cmd prm1=val1 prm2=val2 prm3=val3>
アドベンチャーエンジンを作ろう!
</cmd>
  • そもそも(タグ形式)は必要か?
  • 開始タグと終了タグがペアで無ければならない?
  • <BR>タグのように1つで完結すもタイプのものはあるか?又は必要か?
  • 要素名の順序は好きに書く事が出来る?
  • 要素名はどれでも省略できる?
  • パラメーターは必ず "" で囲まなければいけない?
  • 要素名を<color 255,255,255>の様に、省略できるか?
  • @ , # は <@> , <#> の様に書く事が出来るか?
  • < > や要素どうしの間に、スペースを書いてもいい?
  • 長所
    • パラメータが多い命令では入力が楽。
    • パラメータの要素名を間違えてもエラーにならず、何らかの出力を出せる。
    • セリフの文字装飾の指定がしやすい。
    • 命令の場所とそうでない場所の見分けが付けやすい。全体がみやすくなる。
    • 1行に複数の命令を記述することができる。(対応するかどうかは別。)
  • 短所
    • 閉じカッコがめんどくさい。
    • 終了タグがめんどくさい。
    • セリフの文字装飾の指定をされると実際の処理が大変そう?

タグ形式:

<cmd val1, val2, val3>
アドベンチャーエンジンを作ろう!
  • HSP形式にタグ<>を付けた形式。
  • シナリオ本文と命令文とが明確でライターさんにも優しい。
  • HTML形式とは違い、</命令>は無し。
  • 故に命令文の先頭と末尾のタグ<>は、この部分が命令です、と解析エンジンに指示する以外の何者でもない。
  • その他(加筆修正OK)
  • 長所
    • 命令の場所とそうでない場所の見分けが付けやすい。全体がみやすくなる。
    • 1行に複数の命令を記述することができる。(対応するかどうかは別。)
  • 短所
    • 入力するパラメータ入力場所を間違えると最悪の場合エラーで停止する。
    • 閉じカッコがめんどくさい。

ファニー形式:

#cmd val1, val2, val3
アドベンチャーエンジンを作ろう!
  • 命令の前に、この行が命令であることを示すファニー文字*1をくっつける。
  • 「#」はあくまで例
  • Kirikiri/KAGにもこのような書式(@)が含まれている。
  • ラベル(*)と紛れる
  • 長所
    • 1文字目で命令かどうかの判別ができるので処理が楽。
    • 命令の場所とそうでない場所の見分けが付けやすい。全体がみやすくなる。
  • 短所
    • HSPに見慣れていると、見た目がかっこ悪い?
    • 入力するパラメータ入力場所を間違えると最悪の場合エラーで停止する。
    • ファニー文字面倒くさい
↑

書式に対する疑問質問議論など †

  • 一番下のコメント欄は全体に対するコメント欄にして、書式の議論はここのコメント欄を使ってはどうでしょうか。 -- GENKI? 2006-10-21 (土) 00:45:06
  • HSP形式の命令後の「=」は不要だと思います。区切りにするならスペースで十分ですし、どうしても必要なら「,」が妥当です。(「=」では文としての意味も成り立ちませんし…。)また、HSP形式は引数が多いと省略した場合間違えやすいので、引数の上限を決めておいたほうがいいかもしれません。 -- GENKI? 2006-10-21 (土) 00:52:38
  • HTML形式についての意見を… -- GENKI? 2006-10-21 (土) 01:07:33
    • タグ形式は1命令あたりの書く量が多い欠点があります。シナリオはデータ量が大きいためわずかな違いが大きな違いにつながり、ライターの仕事量が増大します。覚えるのは最初だけですが、書くのは最後までです。
    • 終了タグは省略可能なも(例えば<BR>のような)のとそうでない物に分けるべきかな?閉じ忘れやスペルミスによるエラーを防ぐため、終了タグが不要な場合は極力使わないでいいようになった方がいいと思います。
    • 要素名は順番入れ替え自由、スペースの数も自由。としたほうがいいでしょう。見やすいスクリプトはデバッグもしやすい。
    • 要素の省略は構文解析時は関係ありませんね。命令実行時の処理で決まります。
  • = は必要ないかもですね・・・そのほうがわかり易いかと思ったんですが、使ってみて不必要な気がしてきています。 -- りさ 2006-10-21 (土) 13:10:15
  • 必要かどうかですが、それは形式上、メリットもデメリットも持っていて、判断しがたいと思います。 現状では使用可能にしたいと思っています。どうでしょう(^^? -- りさ 2006-10-21 (土) 13:11:01
  • 「=」を使った場合、問題は変数の扱いをどうするかでしょうか。 -- GENKI? 2006-10-21 (土) 13:47:48
  • 変数は3次元配列を作って実現しようかと考えています☆メインページに載せておきますので、読んでみてください(^^ -- りさ 2006-10-21 (土) 23:46:38
  • 処理の中身じゃなくて表記の仕方のほうです。命令に=使っちゃうと変数を表記するときに区別つきにくいんじゃないかなと思いました。ファニー文字をつけて区別しても直感的に混乱を招くんじゃないかと…。 -- GENKI? 2006-10-22 (日) 01:47:26
  • 命令には = をしないようにしますネ☆それなら、区別は一目瞭然かもデス(^^ -- りさ 2006-10-22 (日) 02:18:13
  • セリフ行ではアルファベットで書き出すと区別が付かなくなりそうですね。命令は頭に@など記号をつけるとか、またはセリフ行は書き出し手前行と最終行の次の行に記号をつけるとか、セリフには半角アルファベットを使えないとか、どれかをやったほうがいいかも。 -- GENKI? 2006-10-22 (日) 02:44:27
  • あ、@は頁変更待ちで使ってましたね。ともかく、上にも書いてあるファニー形式のことです。 -- GENKI? 2006-10-22 (日) 02:46:38
  • 個人的にはファニー形式は見た目がなー、となんとなく思ってしまうのですが、プログラム的(最初の1文字目で判定できる)にもユーザー的(セリフ行に制限がかからない)にも違いが明確になることで都合がいいっぽいです。ちなみにファニー文字をセリフ行頭で使いたいときは、osakanaさんが言うようにエスケープシーケンスのように\をつけて対応するとかでしょうね。 -- GENKI? 2006-10-22 (日) 03:22:38
  • 命令にはファニー文字を付けたほうがいいでしょうか(^^?スゴク迷ってます・・。 -- りさ 2006-10-23 (月) 13:03:46
  • まずは大別してみましょうか。命令(AVGエンジンというシステムがシナリオ本文と異なり特別に解釈するテキスト)はシナリオファイル上(つまりシナリオ書く人の視点)特に本文と区別はしない(=HSP形式)のか、命令用の特別の書式を用いて区別する(HTML・タグ・ファニー形式)のかという具合に。区別するしないはあくまでシナリオファイル上です。あくまで読み込むデータのフォーマット(シナリオファイルの仕様)に基づいてプログラムの内部構造が決まってくると思います。 -- kz3 2006-10-23 (月) 14:45:33
  • いや違うかも...。まぁいいや...。言っちゃおしまいかもだけど、最終的にはりささんの決断で...なんてったってりさエンジンなのだから^^; -- kz3 2006-10-23 (月) 14:47:25
  • ユーザーに負担がかからないのは重要ですけど、ユーザーが分かり易く使えるのも重要デスよね☆そうなるとどの書式が優れているのやら・・(^^? -- りさ 2006-10-23 (月) 19:11:52
  • とても大きなプロジェクトになりそうですし、ここまでもみんなの協力がなければ出来ませんでした☆みんなで考えてみんなで作れたらなぁと思います(^^☆ -- りさ 2006-10-23 (月) 19:13:53
  • どういう理由でこうすべきか、をちゃんと書かずに来ちゃってるところあると思うので、とりあえずそれぞれの書式の性質から決まってくる長所短所を挙げてみました。ほかにもあると思うのであげてください。 -- GENKI? 2006-10-23 (月) 23:16:01
  • 大別するにはまず、現状の把握・確認ですかね。 -- GENKI? 2006-10-24 (火) 01:14:23
  • 分かり易いデスね☆これを見ると、HTML形式は除外出来そうです(^^ -- りさ 2006-10-24 (火) 02:28:24
  • そしてファニー形式とタグ形式がほぼ同じだということも分かりました☆つまり、HSPかファニーか・・・ですね・・・う〜〜〜ん(^^; -- りさ 2006-10-24 (火) 02:29:43
  • タグ形式のところ勘違いしてました。(^ ^;;; りささんありがとう。 -- GENKI? 2006-10-24 (火) 22:26:57
  • どれがいいかではなく、どこがいいか、だと思います。HTML形式なら文章中の文字装飾指定のしやすさは1番ですし、HSP形式ではテキストデータの入力にはやっかいな問題をかかえていたりします。どこがAVGに都合がよくてどこが原因かを絞り込んで、いいとこどりをするのがいいんじゃないでしょうか。 -- GENKI? 2006-10-24 (火) 22:35:50
  • アタシの個人的な意見では、ユーザーにとって「ファニー文字」が予想外に面倒なのではないかと思います☆メインプログラムはファニー文字を使用した方がスムーズにいきますし、動作も明確なんでイイんですよね。けど・・・確かにかっこ悪いかも(笑) -- りさ 2006-10-25 (水) 14:16:58
  • wikiもある意味、べたで書いたテキストがそのままwabページ内のテキストとして表示され、webページに何か変化を与えるときは特別の書式を書きますね。たとえば#contentsなどのブロック型プラグインはある意味ファニー形式ですね。一方&(color){};などのインライン型プラグインは本文の一部分に変化を与えるタグ形式、HTML形式ですよね。
    いやHTMLというと改行を改行とするシナリオスクリプトの仕様には適切でない表現かもしれませんが、シナリオスクリプトの命令にもブロック命令とインライン命令というのを導入するのはどうですか? -- kz3 2006-10-25 (水) 15:31:07
  • サンプルを見ていると、たとえば信号機の●●●を書くなら...
  • ブロックは{ 〜 }でインラインは一行ってことですか(^^?? -- りさ 2006-10-25 (水) 18:30:49
  • もしそうなら、確かに改行に意味を持たせるのも考えものデスねぇ〜( ̄ω ̄;; -- りさ 2006-10-25 (水) 18:34:57
  • 逆ですよ。ブロックは一行でインラインは{ 〜 }です。Wikiではインラインは文中のどこに入れてもよく、ブロックはそれができません。…という説明でいいですか?(^ ^; -- GENKI? 2006-10-25 (水) 23:20:19
  • 改行はシナリオスクリプトを見やすくするために使うことがある(セリフや文章は途切れるところまでがやたらと長いことがあるため。)…と考えるとHTMLを書くときのように改行は改行命令を使ったほうがよいのかもしれませんね。 -- GENKI? 2006-10-25 (水) 23:37:49
  • 仕様考察に関して考え方を一つ思い出したのでちょっとかきます。前にどこかの本に書いてあった考え方ですが、プログラムにシナリオを埋め込んでいくのではなく、シナリオに命令を埋め込んでいくイメージで考えてはどうでしょう。シナリオに命令を挿入していくイメージです。シナリオを書いてからシナリオスクリプトへ直していく…という作業流れを考えるとこの考え方が負担が一番軽そうです。 -- GENKI? 2006-10-25 (水) 23:56:38
  • あっ。ブロックが一行ですかっ(汗) 確かに、見やすくする為・・とかもありますね〜。RPNが解決できたら、改行命令入れてみますね。(改行命令で改行は簡単だけど、通常時に改行しないのが難しそうデス☆ -- りさ 2006-10-26 (木) 13:14:44
  • (いやいや私もGENKIさんと同じ考えだったんですよ実は...)「通常時に改行しない」というのはつまり、基本書式で本文中の改行を改行とする、のを改行とせずに、改行命令で改行するというように変更ということですね。あと今のところ、表示可能領域内での折り返しには対応されていないですが将来的には一文字づつの描画になるのでしょうね...表示中の表示速度のアップダウンも考えると...。(これはメモ書き程度で...) -- kz3 2006-10-26 (木) 14:10:04
  • あ、そうですGENKIさん。たとえば画面の背景画像はセリフの表示に比べると固定されていますよね(いや背景が揺らめきながらセリフ表示という場面もあるかも...雪が降るってKAGのサンプルにもあったな...)、そういう静的な命令、たとえば...
    +  ブロック命令例
    こういったタイプの命令にファニー形式(ブロック命令)を使い、逆に文字装飾などは(本文の改行を改行としないとして)
    (type.1)
    [color 255]●[/color][color 255,255]●[/color][color 0,0,255]●[/color]
    こういったタイプの命令にHTML形式(インライン命令)を使うとか...。ただこういう書き方(KAGもこんなんだったような)は今のところ出来ないことになっているので、タグ形式(ファニーと大差ない)で...
    +  type.2
    このように書けばいいのかな。まぁブロック(ファニー・タグ形式)とインライン(HTML形式)の両方を使うという案を出したのは、一つに決められなければ両方使っちゃえ、という安易な考えです。 -- kz3 2006-10-26 (木) 14:11:51
    [color 255]●[/color][color 255,255]●[/color][color 0,0,255]●[/color]
    だと、この場合はRGB値とネストレベルを保存して置かないとダメですよね。それが必要ないなら、
    [color 255]●[color 255,255]●[color 0,0,255]●[color 255]
    ってなるんでしょうか?
    現在は一行一行読んでますが、一行に複数の処理を書けた方が便利ですね。
    かってに名前つけちゃいましたけど、(type.2)は明らかに読み辛いし書き辛いカモ(汗)
    でも統一したいという気持ちもありますので、[ 〜 ] にしちゃおっかなぁ〜。どうでしょうか(^^??
    +  []タグ案
    とりあえずは、こんな感じで。
    それと、考えたんですけど、表示文字の方を"" で囲むってのもアリな気がするんですが、どう思われますか?
    +  表示する文字を""で囲む案
    みたいな感じで☆表示速度は speed 命令で、影文字はshadow命令で、囲文字はsurround命令で、折り返しはwrap命令で、一応、用意はしています。wrap命令は半角に対応していないので、「実装」にはまだ時間がかかりそうです。-- りさ 2006-10-26 (木) 16:31:00
  • タグ形式とファニー形式の決定的な違いは閉じカッコの存在です。閉じカッコをつけるというのは1行に複数命令を記述することを考慮しているという意味合いがあります。
    type.2のように書くなら閉じカッコはなくても言い訳で、それなら書かないほうが楽なのでこの場合はファニー形式のほうがよさそうです。
    type.1は終了タグが結構面倒かなーという気がしますし、閉じる必要もないなという気がします。HSPのCOLOR命令のように設定したら設定かえるまでそのまんまというのがいいかなと。
    type.2は読みにくいという意見もあるし(そう思う)、colorのような命令は↓この(名前ないのでtype.3と書いとこう)書式が一番かなという気がします。
    +  type.3
    ただ…これどうやって実装すればいいのか私ではちょっとイメージ湧きません。orz -- GENKI? 2006-10-26 (木) 21:55:25
  • ダブルクォーテーションで囲むのはテキストの量(比率)考えると大変だと思いますよ。(というか作業に飽きそう^ ^;) -- GENKI? 2006-10-26 (木) 22:04:28
  • 表示可能領域内での折り返しはコンテスト終わってからHSP3に移殖しようかなと…思ってたんですが、HSP2仕様でそのまま貼り付けちゃおうかな? -- GENKI? 2006-10-26 (木) 22:06:33
  • ダブルクォーテーションは厳しいですかぁ・・・大きなシナリオだったら、そうなのかも知れませんね☆サンプル書いてる程度じゃ、楽なんですけど(笑) -- りさ 2006-10-26 (木) 22:15:29
  • type.3 を使う方向で進めてみますね。初期とは全然違う仕様になったんで、変更に時間かかるかもです☆ -- りさ 2006-10-26 (木) 22:18:06
  • 自動改行のサンプルをモジュール開発室の方にあげてきました。 -- GENKI? 2006-10-26 (木) 23:12:55
  • 自動改行も考えてたより難しいですね。前回表示した場所が、ぎりぎりの一文字手前とかだったら・・・(涙) -- りさ 2006-10-26 (木) 23:37:31
  • 命令ですが、[ ] は変数に使って、<cmd val,val> って感じにしようかと思います☆この方が見やすい気がしますし、慣れてる書式だと思います(^^ -- りさ 2006-10-26 (木) 23:39:35
    例えば、命令書式がこのような場合、ラベルやコメントやクリック待ちなんていうのは、どうしたらいいんでしょう??
    +  <>タグ案
    なんでしょうか、やっぱり・・・(^^???
  • クリック待ち改行は絶対「#」ですか?記号は残しておけばあとから何かに使えるかも知れませんよ〜。KAGでは改行させるのに[r]、クリック待ち改行に[l]を使っていますね。どれも([,],r,l)(半角入力時に)シフトキーを押さずに指一本だけでコマンドが入力できますね。<>の場合は(半角入力時)Shift+'ね'or'る'など入力するのに指二本要します。あ、あと思ったけど計算式にも符号(<,>)が出てきますね。 -- kz3 2006-10-27 (金) 05:34:51
  • あとコメントはコマンドではないのでタグでくくる必要はないと思いますよ。
  • 計算式に<>が出てくると言ったら*/も出てくる...計算を行うコマンドって今はあったかな?例えば... -- kz3 2006-10-27 (金) 05:55:14
    +  式を計算するコマンド案[]タグ例
    のようなタグ内の文字列式を計算するというコマンドがあればタグに<>が使え...るには使えるが処理が増えますね^^;。たとえば、<calc $x = 1>1>とか。いや最後の閉じタグを見つければいいだけだから増えるって言うほど増えないか...でも見た目はどうでしょう? -- kz3
  • あうあう・・迂闊でした(汗)
    演算時の< >と混ざっちゃいますネ。そうなると< > 以外に2種類の括弧が必要になりそうです。
    +  変数使用時のタグ例
    あっ、でもこれでも充分な気が・・・☆ (変数代入時に {x} = にするかは別として)
  • タグ形式の[ ]とファニー文字についてちょっと考察…。 -- GENKI? 2006-10-27 (金) 23:15:59
    +  考察
    • ↓の新書式サンプルをいじってもらえれば分かりますが、
      [color 255,255[c]
      なんていう省略を可能にしています。これならば、一つの記号で、省略もできますし・・・。
      今のところ、[ から、次の ] か [ か 改行まで、を一つの命令とする仕様で決めかけているんですが、
      これでマズイこととかあるでしょうか(^^?
      GENKIさんのいうように # を使ってもいいんですが、できれば使う記号を少なくしたいんデス -- りさ
    • あっ、逆に言えば、命令内での改行に耐えられないか・・・(涙)う〜〜ん、命令内は、改行=終端としちゃってもいいでしょうか?? -- りさ 2006-10-28 (土) 00:03:40
    • ふむふむ、みにくいかな?という気もしたけど、みにくいと感じる人は ] 付ければいいという選択肢があるわけですね。よさそうな感じがします。 -- GENKI? 2006-10-28 (土) 01:46:33
    • しかし、switchのようにパラメータを改行したほうがみやすくなる命令もありそうですね。あ、でも命令を分割すれば対応できそうな気もする…。ほかには「ここで改行してますが命令のパラメータは次の行に続きます。」という感じの意味合いの記号(文字列?)を使うのも手かも。 -- GENKI? 2006-10-28 (土) 01:47:15
    • 命令内で改行することが必要だったら、そうしなきゃデスね☆ -- りさ 2006-10-30 (月) 23:25:10

    ↑

    新書式サンプル †

    一応、こんな感じかなぁと思うので、実行してみてくださいm(_ _)m

    判定などが緩く、少し変わったことをすればエラーになりますが、
    どんなもんかニャンっって気分で試して下さい☆

    >>(スクリプトはメインページに移動・更新しました)<<

    感想をいただけるとアリガたいデス。
    「ファイル数が多くて面倒だっ」っていう感想でも構いません(笑)・・・ごめんなさい(汗) -- りさ

    • 試してみました。[c]になてる^^。一行に複数のコマンド書けるのもイイですね!確かにこの書式の方が見やすいと思います。<BR>があるといいっていつか言おうと思ってたんですが、[br]実装してたのね; --osakana
    • こっちはzipでまとめて公開してもいいかもしれません。 --osakana
    • 感想ありがとうございます(^^全体が見やすくなりましたよねっ☆ zip圧縮してもいいんですが、そうなるとウィルスどうのこうのっていう心配があったりしまセンか?? -- りさ
    ↑

    タグ・ファニー文字を読む †

      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
    
     
     
     
     
     
     
     
     
     
     
     
     
    
        text = "[color 255,128,0]アドベンチャーエンジンです。"
     
        mes
        mes "0         1         2         3         4        "
        mes "0123456789012345678901234567890123456789012345789"
        mes text
        mes
     
        repeat ( strlen( text ) )
            if peek( text, cnt ) = '[' :mes "cnt = "+cnt
        loop
        stop
    • 実行して貰えれば分かると思うんですが、peekで読むと日本語の一部にも反応しちゃいます(涙)-- りさ
      • wpeekで読むといいんじゃないでしょうか? -- 2006-10-26 (木) 18:35:40
      • wpeek で読んだとき、2バイト目には何を指定するんでしょう?すいません -- りさ
    • レス遅れました〜テスト完璧じゃないですが。どうでしょ?でも他にもかぶってるのがあったらこれではダメなんですよね
        1
        2
        3
        4
        5
      
       
       
       
       
       
      
      repeat ( strlen( text ) )
              if peek(text, cnt) = 0x81 : f = 1
              if (f = 0) & (peek(text, cnt) = 0x5b) : mes cnt : f = 0
              if peek(text, cnt) = 0x5b : f = 0
          loop
    • サンプルありがとうございます!
      やってみたんですけど、text の文字を変えただけで記号を拾わなくなっちゃいマシタ(^^;
      もし日本語と重なるのがこれだけだったら、楽なんですけど・・・ -- りさ
    • また'['限定ですが。。。
    • 一応書いて見たんですが、どうなんでしょう?自信無いヨ。(下から移動[修正2]) --osakana
      +  全角判定0.3
    • つまり全角と半角で扱いを分けるというわけデスねっ(^^ナルほどナルほど☆ ちなみに1バイト1バイト読み込んでいく方法では判定不可能なんでしょうか(^^?? --りさ
    • いえ、やっぱりこれで充分でした★スミマセン(汗) サンプルを参考に関数を作って、使わせていただきますm(_ _)m -- りさ
    +  半角判定関数
    • どうぞ!こき使って下さい(^3^
      半角の時1にするなら
      (p1<=$80)|(($a0<=p1)&(p1<=$df))
      の方がいいかも知れません。 --osakana
    • マクロの方が良いかも!って事で速度比べてみたら、
      確かにマクロの方が早かったですがそれほど大差は付きませんでした。 --osakana
    • あっ〜★そういうことだったんデスね\^^/osakanaさんありがとうございます◇
      ページ下でkz3さんが、マクロっていってたので、ずっと探してたりしたんですが、
      この判定の部分がそのままマクロになりますもんねっ(# ̄v ̄#)気付きませんでした・・・頭ワル☆
      (p1<=$80・・そデスね、^1の意味ないデスね、一番早い方法調べてきます--りさ
    • 機能拡張したものをString/改行の2バイト文字判定/_mbsbtypeにおいときました。ご活用下さい。 -- GENKI?
    • あっ、ワカリマシタっ( ̄◇ ̄/ 是非参考にさせていただきますデス★ -- りさ
    ↑

    必要な命令 †

    最低限シナリオを書くのに必要な命令を提案してください

    [ Cmd p1, p2, ... ]
    Cmd機能p1p2p3p4p5p6p7p8p9p10p11p12実装種類
    *ラベル*ラベル名済(書式)
    //単行コメント//コメント内容済(書式)
    /*〜*/複行コメント/*コメント内容*/済(書式)
    {〜}式演算式済(書式)
    Await一時停止(ms)済プログラム制御
    BG_IMG背景変更
    (スタティック)
    "ファイル名"済描画
    BG_Color背景色変更
    (スタティック)
    RGB済描画
    BG_FadeCover?背景変更
    (フェード・カバー)
    "ファイル名"ステップ間隔(ms)済描画
    BG_FadeCross?背景変更
    (フェード・クロス)
    "ファイル名"ステップ間隔(ms)済描画
    BG_Cartain背景変更
    (カーテン)
    "ファイル名"ON種OFF種ステップ軸正負間隔RGBON/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繰り返し処理繰り返し回数処理の内容済プログラム制御
    Returngosubでのジャンプから戻る済プログラム制御
    SaveData?データのセーブファイル操作
    Shadow影文字設定距離x距離yRGB済文字列操作
    Sound_Play効果音再生"ファイル名"済マルチメディア制御
    Speed文字表示速度待ち時間(ms)済文字列操作
    Stop実行停止済プログラム制御
    Surround囲文字設定距離0=鋭角
    1=丸角
    RGB済文字列操作
    Var式演算式済(書式)
    Wait一時停止(10ms)済プログラム制御
    Wrap文字表示限界0=なし
    1=折り返し
    2=切捨て
    文字数(byte)済文字列操作
    • 実際の使用例のイメージ。
      入力例:
      Var {name} = "太郎"
      私の名前は{name}です。
      出力:
      私の名前は太郎です。
    • 変数の使用例
      • 文中への挿入。(例「私の名前はnameです。」)
      • パラメータ保持(体力や経験値、イベントフラグなど。)
      • 条件分岐(フラグによるシナリオ分岐などに使用。)
      • 計算(例「a = 2*b*b+c」)
    • 代入命令の入力イメージです。どれがいいでしょうか?
      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
        -- GENKI?
    • 上で書いた「男の子・女の子」の例をサンプル5として、メインにUPしまシタ★ こんな感じになってマス(コード変更したので全部DOWNしなきゃかもデスが・・)。-- りさ
    • あっ、これはイイかもデス☆
      { があるところから } までが、式というわけですネ(^^?
      少しGENKI?さんのを変更してみたんですが( z の代入のところ)、
      省略じゃない場合はこんな二重括弧になるんでしょうか??
      それからずっと気になってたんですが、半角スペースも無視した方がいいでしょうか?
      タブかスペースを無視しないと、インデントができないんです(笑)-- りさ
↑

計算命令 †

 式を出力せずに記述する命令の書き方についてです。
イメージこんなのです。

[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はその他。

  • 1シリーズ
    • 変数一つ一つを個別に{}で閉じるやり方。 -- GENKI?
  • 2シリーズ
    • {〜}内がすべて式、というふうにとらえたやり方。2-2は2-1から、2-5は2-4から[ ]を省略したもの。
      2-3は2-1から命令を省略したもの。 -- GENKI?
  • Aシリーズ
    • A-1は計算内容を出力する…という位置付けでいいでしょうか?逆にこれ以外は計算しても出力しないということで…。
      A-2は命令との混同が問題になりそうです。なんとかなりそうではありますが…。 -- GENKI?

'議論'

  • こんなのデキてるっ(^^ 「A-1 が値を出力する」という考えになりますと、
    [ str x = a + b ]
    [ var x = a + b ]
    と用意しなきゃならない気もしてきますね〜・・・・。
  • でも一番理想なのは、GENKIさんもosakanaさんも指摘してくださってる、A-1 と A-2 なんデス。 問題はA-2 を命令 or 式 の判別ができるか・・・という点なんです。
  • 2-3 にするのもアリな気がしてきます。1 シリーズはちょっと大変かなぁなんて思うんですけど☆ -- りさ
    x ++           // x をインクリメント
    pos -10        // ( -10, 0 ) にカレントポジション移動
    こういうのを判断できますでしょうか・・・。基準が分からない・・(><; でも A-1 と A-2 を見るとどうしてもコレ実装したいデス(^^! -- りさ
  • やっぱり1シリーズはちょっと問題ありか。(^ ^; 他に考えられるパターンありますか? -- GENKI?
  • A-1の価の出力…書いてはみたものの、実際どうなるんだろう?(^ ^;
    +  考察
    代入した場合Xを返すのか式の評価となるのか…?とりあえずコンテスト終わったし演算処理の開発の方みてきます。orz -- GENKI?
    +  MDL_FORMULA.AS
↑

[if]命令 †

その前に、endif の動作を決定しないとマズイってことが分かりました、スミマセン(涙

[if x == 5]
[if y == 5]みんな5[else]かたっぽ5[endif★]
[else]
[if y == 5]かたっぽ5[else]みんな5じゃない[endif★]
[endif]

この★マークのendifをハズしちゃうと、どういう処理になるんでしょうか?? -- りさ
ネスト限界でエラーになるか、ファイルの最後をendifとみなすか…、やっぱり「endifが見つかりません」とエラー停止というところでしょうか。-- GENKI?

  • ということは、if => if => else => else => でエラーを出せばいいということデスよね(^^? -- りさ
    [ if ] の仕様を考えてみようと思います。
  • 単純に if - else - endif を考えた場合、 1 byte フラグの ON / OFF で使命を果たすことができマス。
  • ご存知の通り、 if には「ネスト」という構造が存在し、これのそれは gosub repeat とは全く異なりマス。

これはネストレベル=3までのサンプル構造です。

+  NestSample_lev3
  1. if を読み込んだら、式を判定する。
    • 真なら行へ移動。else にぶつかったら、endif まで飛ぶ。
    • 偽ならelse へ移動。
  2. if と endif が必ず同じ数になるのであれば、if-endif のペアで考えれてネストの深さを計る。
  • やっぱりif文の構造はムズカシイです(^^;;未だに実装できず(涙)-- りさ
  • こういう構造もありかしら?
    [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]
    同じく負担増・・。
    良く考えたら[end_if]☆[else]や[end_else]☆[end_if]星の所になんか書かれたら終わりジャン!
    破綻してました。すみません。。。 --osakana
    • (爆)これなら、[end_else]と[end_if]が必ず隣同士で起きますから、あんまり・・�堯福�x ̄! -- りさ
  • if - else - endif 、こんなのはどうでしょう? (旧 if もそのまま残してあるので命令名は ifs になっています。)
    filediff_if_20061123.hsp( main.hsp と lbl_command.hsp への変更点のみです。)
    ifs 命令テスト用のシナリオ。filescenario_test_if.txt
    単純な処理なので ifs - endif 間でループやジャンプで出入りするとおかしくなります。 -- naznyark? 2006-11-24 (金) 01:36:31
  • って、まだ書式検討段階でしたか・・・。 -- naznyark? 2006-11-24 (金) 01:36:31
↑

変数 - コメント †

  • HSP形式命令に = を使用しなくなったので、= は「代入記号」として扱います(^^ - りさ
  • 変数がどういう状況で使用されるのかあげてみました。 「=」の有無で変数かどうか判断すると文中への挿入の場合に例外的な書き方が必要になりそうです。(例「私の名前は+name+です。」のような連結記号が必要?) というわけで頭にファニー文字を推奨です。そうすれば「=」も単なる演算子の一つとして使えますし…。なんだか私の思考がどんどんKAGに傾倒しつつあるような…。(-_-;;) - GENKI?
  • 使いやすい方がいいんで、方向性は正しいんじゃないでしょうか☆ -- りさ
  • りささんが変数に[ ]を使うというので、やっと気が付きました。文中に変数入れるなら閉じカッコ的なものがないと区別できない場合があるのですね。orz 前言撤回です。 -- GENKI?
  • ハイ(^^/ そデス。2006-10-26現在では$name$を採用しています。これは[ ] が日本語とダブってうまく読み込めなかったからデス☆ -- りさ
↑

ラベル †

gotoおよびgosubなどで使用する。
書式

*label


↑

サンプル †

シナリオスクリプトのサンプルです。
使用方法はアドベンチャーエンジンのサンプルをご覧下さい。

+  scenario.txt
↑

コメント †

+  過去ログ
  • やはり 0x??5B には普通に使われる文字が複数割り当てられているんですね、例も挙げていただいてありがとうございますm(__)m まだ全角に対応できていませんが、osakanaさんに書いていただいた(上にある)サンプルを参考に、対処してみたいと思います☆「Shift-JISと決め打ち」で充分かとも思いますので、まずわShift-JISについて調べてみます(^^v -- りさ 2006-10-29 (日) 17:56:16
  • おかげさまで全角・半角の判定ができました(^^ありがとうございましたm(_ _)m -- りさ 2006-11-02 (木) 10:00:24

  • ↑

    シナリオファイルの構成 †

    +  シナリオファイルを構成する要素
    • それぞれはこんな感じの意味ですか? - GENKI?
      • シナリオ:シナリオスクリプトにおけるもっとも大きい区分。1話。シナリオからシナリオへの分岐・移動でゲームが進行される。
      • シーン :各イベントなどによって実行される区分。シーンからシーンへの分岐・移動でゲームが進行される。
      • ページ :キャラクター1人が1回のセリフを担当する部分。1カット。
      • ブロック:情景(会話、移動、モノローグ、などのモード切替や背景やBGMの設定)などを定義するような区画。通常1シーンに1つで、シーン冒頭に定義する。
      • ラベル :(シーンとの違いは?)『概念は同じじゃないでしょうか?スクリとしたラベル・シナリオとしたシーン -- りさ』
    • 選択肢などユーザー入力を受け付ける部分はどうなるんでしょう? - GENKI?
    • 選択肢の命令を作るのが王道だと思います☆選択肢とラベル名の組み合わせで分岐が実現できますので - りさ

    *1 perlで変数の前につけるみょうちくりんな文字
    添付ファイル:
    filescenario_test_if.txt
    213件 [詳細]
    filediff_if_20061123.hsp
    201件 [詳細]
    トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
    Last-modified: 2007-04-08 (日) 02:38:39 (2436d)