WSN追加案: メッセージの新書式

Issue #714 new
k4nagatsuki repo owner created an issue

既存のメッセージの書式は柔軟性に欠けており、拡張すると容易に前方互換性を壊してしまいます。また、#M&R等、簡単には表示できない文字列があります。

これらの問題は小手先で仕様をいじっても改善できません。新しい書式を設け、メッセージ・セリフコンテントのオプションで既存の書式と新書式とを切り替えられるようにするべきです。

新書式は充分に柔軟・簡単・強力なものである必要があります。今のところ.NET風に{ }で囲った部分に諸々の指定を行う事で特殊な表示を指定するというような形を考えていますが({File:<パス>}でイメージファイルの表示等)、それがベターかは充分な議論・検証を経なければ分かりません。

以下に、新書式に最低限必要な要件をまとめておきます。

  • 全ての文字列が容易に表示できる。
  • 任意の状態変数値を表示できる。
  • 選択メンバ名等、既存の書式と同等のシステム文字列を表示できる。
  • 部分的に文字色の変更ができる。
  • 任意のイメージファイルを表示できる。
    • 透過色の使用・不使用を選択できる。
  • ふりがな・傍点を振る事ができる。
  • 後方互換性がある。仕様を拡張しても過去のデータが壊れない。
  • 分かりやすく覚えやすい。
    • できれば既存の書式と似たような感覚で使えるとよいが、無理はしない。

以下のような機能も考えられますが、これは当面実現しなくてもよいと私は考えています。

  • 部分的にフォントを変更できる。
  • 部分的に文字サイズを変更できる。
  • PCのイメージを表示できる。

既存の議論、issue #151,#152,#455,#713及びcwxeditorのissue 260も参照してください。

Comments (6)

  1. k4nagatsuki reporter

    具体的な仕様を1つ、叩き台として挙げておきます。

    • 以下は既存の書式と同じように使用できます。
      • $...$%...%による状態変数値の表示。
      • #M#Tなどによるキャラクター名等の表示。
      • #*によるスキン・シナリオ内イメージ表示。
      • &ではじまる色指定。
    • {Command:Value}あるいは{Command:Value1:Value2}という書式で、特殊な値を表示できます。
    • \の次の文字は、特殊な意味を持たない普通の文字として扱います。これをエスケープといいます。
      • これにより、普通の文字として{を使いたい場合は\{と記述できます。同様に&#\&\#と記述できます。\そのものは\\です。

    Commandには次のものが使えるようにします。存在しなかったり、値の記述が不完全なコマンドは{}内が全て無視されて空文字列になります。

    • FIle ... イメージファイルのパスを指定する事で、その画像を表示します。
      • Value1には記述します。パス記述内では\によるエスケープは無効です。イメージファイルはカードイメージ等と同様のアルゴリズムで検索され、見つからなかった場合は表示されません。Windows以外でも、パスの大文字・小文字は区別されません。
      • Value2は省略可能ですが、,区切りで1つないし複数のオプションを指定できます。
        • Mask ... マスク色を有効にする。
        • TopLeft・TopMiddle・TopRight・CenterLeft・CenterMiddle・CenterRight・BottomLeft・BottomMiddle・BottomRight ... それぞれイメージの配置方法を指定します。たとえばTopLeftの場合、表示枠の左上にイメージの左上が来るように、BottomRightの場合は枠の右下にイメージの右下が来るように配置されます。デフォルトはTopLeftです。
      • 競合するオプションを複数指定した場合は最後のものが有効です。
      • 例: {File:Image1.png}で、Image1.pngを左上寄せで表示します。マスク色は無効です。
      • 例: {File:Material/Image2.png:Mask,Center}で、Material/Image2.pngを中央寄せで表示します。マスク色は有効です。
    • Step ... ステップ値の表示。Valueにパスを記述します。パス記述内では\によるエスケープは無効です。状態変数が見つからなかった場合は空文字列になります。パスの大文字・小文字は区別されます。
    • Flag ... フラグ値の表示。ステップ値と同様です。
    • Color ... 文字色を変更します。Valueに#FFFFFFという形式でRGB値を指定します。色指定が不正な場合は何もしません。色指定では大文字・小文字をどちらでも使えます。
      • 例: {Color:#FF0000}で以降の文字を赤くします。
    • Name ... PC名や宿名等、プレイヤー側に属するデータを表示します。Valueに1~6の番号を指定する事でPC名を、M・U・R・T・Y・I・Cで既存書式と同様の名前を、SelectedPlayerで選択メンバ番号を表示します。大文字・小文字は区別されません。
    • Ruby ... Value1を表示し、その上にValue2で記述されたふりがなを表示します。いずれのValueもエスケープは有効です。
      • ふりがなの表示には複雑な規則が必要になるので別途定める事とします。実装依存とするべきかもしれません。HTML Rubyの仕様が参考に鳴るはずです。
      • ふりがなが1つでもあるメッセージは全行で行間を広げます。各行の高さが1.5倍となり、0.5行分がふりがな用に確保されます。全体の表示可能行数は7行から5行に減少します。
    • Dot ... 傍点を表示します。Valueに傍点が振られる対象となる文字列を指定します。エスケープは有効です。ふりがな同様に行間の拡張が行われます。

    Commandの記述では大文字・小文字は区別されません。

    :について。この記号はコマンドの値やオプションを区切るために使用されます。将来は3つ以上のValueを持つコマンドが現れるかもしれません。その場合の記法は{Command:Value1:Value2:Value3}のようになるでしょう。上記のコマンドも暗黙のうちにValue3以降を持っており、それが無視されていると仮定する事ができます。従って、区切りの:がいくつ連なっていても、それは無視される空の値がいくつか存在しているだけという事になります。要するに、{Color:#000000::}のような記述は文法エラーにはなりません。

    コマンドが文字列の終わりまで}で閉じられなかった場合は、まるごと空文字列になります。

  2. k4nagatsuki reporter

    Fileですが、絶対座標を指定して表示できるようにした方がいいかもしれません。以下のような感じではどうでしょうか。

    • 例: {File.bmp:Mask:X=100:Y=150}で、X座標がメッセージウィンドウの左端から100px、Y座標顔が上端から150pxとなります。
    • TopLeft等の位置指定子と競合した場合は、あとから指定されたものが有効となります。
  3. tachi gigas

    お疲れ様です。

    話を膨らませてしまって恐縮ですが、イメージの表示で、PC画像も表示できたら1コマ上で掛け合いが出来るなぁとか思ったりもします。今ですと、1001以上のレイヤでメッセージ上に表示するしかなく、そうなるとバックログに表示されません。

  4. tachi gigas

    っと。失礼しました。精査不足でした。

    他に表示できればというものがあるか考えてみます。

  5. Log in to comment