CGI State: None
document

基本構成ファイル

surfaces.txt
descript.txt

アルファチャンネル

エイリアス/マルチプル

概要


home
  +-ghost
      +-naru
         +-shell
            +-master
              +-surface0.png
              +-surface0a.png
              +-surface0s.png
              ....
              ..
         +-ghost

基本構成ファイル


surface0.png
surface10.png
........
....
..
descript.txt
surfaces.txt
readme.txt
thumbnail.png
*.png


特に省略可能と明記されない限り全てのファイルは必須。


surface[id].png がシェルの実体となるビットマップイメージとなる。最大で 8192枚(surface8191 まで)定義できる。どの ID にどういった表情を割り当てるかはマスタの自由だが、唯一の例外は予約された番号 0 および 10 で、これらはそれぞれ sakura および kero の最も基本的な姿を設定しておく必要がある。また逆に言えばこの 2 枚さえ存在すれば他に全くバリエーションがなくてもそれはシェルとして成立する。

以下に(伝統的に)最もポピュラーな ID の割り振りを示す。


00 素
01 照れ
02 驚き
03 不安
04 落ち込み
05 微笑み
06 目閉じ
07 怒り
08 冷笑
09 照れ怒り
25 歌

10 素
11 刮目
19 歌


surface は座標 (0,0) の色が透過色としてマスクされる。従って抜きたい箇所を座標 (0,0) と同じ色でマスクして作成する。画像のサイズ/色数等に制限はない。

descript.txt はシェル全体の定義ファイルとなる。内容は後述。

surfaces.txt は各 surface 固有の定義ファイルとなる。内容については後述。


thumbnail.png はこのシェルのサムネイルイメージを表す。サムネイルイメージはシェル選択時にガイドとして表示される。フォーマットは png もしくは jpg。png を拡張子 pnr で配置すると座標 (0,0) の色が抜かれた透過 PNG になる。色数やサイズに制限はない。省略可能。省略した場合は何も表示されない。

readme.txt はシェルメニュー上から Read Me! ボタンを選択したときに表示されるテキストファイルである。シェルがマスターシェルである場合はゴーストの配布元とシェルの配布元が一致するためこのファイルはほぼ必要無いが、サプリメントシェルの場合はそれらがバラバラであるため、このファイルを用いて配布元 URL 等をユーザに知らせた方がよい。
残りの画像リソースは descript.txt で使用が定義される実際のデータとなる。

descript.txt


home
  +-ghost
      +-naru
         +-shell
            +-master
               +-descirpt.txt

descript.txt はシェル1つに対して1つ存在し、そのシェルが持つ固有のプロファイルを定義する。


name,冬服
type,shell

sakura.balloon.offsetx,0
sakura.balloon.offsety,80
kero.balloon.offsetx,-20
kero.balloon.offsety,10
sakura.balloon.alignment,none
kero.balloon.alignment,none

shiori.logo.filename,niseshiori_naru.png
shiori.logo.x,16
shiori.logo.y,256

readme,readme.txt


name はこのシェルの名前を表す。服装、もしくはサイズ(100%、80%等)等を表すユニークな文字列をセットする。

type はファイルセットの種別を表す。シェルの場合は識別子 shell をセットする。

balloon.offset* は吹き出しの位置オフセット情報を表す。本体に密着した位置から計算して、x はプラスの値が入っていれば本体側に近づき、マイナスの値が入っていれば本体から遠ざかる。y はプラスの値が入っていれば下へ、マイナスの値が入っていれば上に移動する。

balloon.alignment は吹き出しの位置情報を表す。

none
自動調整、shell の y軸座標が画面中央より左なら右、右なら左に表示
left
常に左
right
常に右

readme は Read Me! ボタンで開かれるこのシェルの説明文ファイルの名前を表す。省略可能。省略時は readme.txt となる。

shiori.* は AI ステートウインドウの描画リソースおよび描画メソッドを表す。logo.x / logo.y で指定された座標に logo.filename で指定された画像が表示される。省略可能。省略した場合は何も表示されない。


名称類にタグや環境変数を含めるとその部分の文字列はセキュリティ上の問題から全て自動的に破棄される。\ および % を使用したいときは \\ および \% でエスケープする。

surfaces.txt


surfaces.txt では各 surface 固有の定義を行う。

本ファイルの定義内容は全て省略可能である。

本ファイルは以下のようなフォーマットを持つ。


surface0
{
collision0,188,25,252,63,Head
collision1,190,92,236,118,Face
collision2,180,191,220,222,Bust
collision3,154,311,248,362,Skirt
point.centerx,212
point.centery,198
point.kinoko.centerx,214
point.kinoko.centery,34

0interval,sometimes
0pattern0,101,10,overlay,168,67
0pattern1,100,10,overlay,168,67
0pattern2,101,10,overlay,168,67
0pattern3,-1,10,overlay,168,67
}

surface10
{
collision0,40,56,95,90,Head
point.centerx,70
point.centery,66
sakura.balloon.offsetx,80
sakura.balloon.offsety,-100
kero.balloon.offsetx,-30
kero.balloon.offsety,20
}

....
..
.


各 surface のエリアがブレスで分割され、その中に当該 surface のエントリが格納される。有効なエントリは以下の通り。


  • バルーンオフセット


    sakura.balloon.offsetx,-4
    sakura.balloon.offsety,0
    kero.balloon.offsetx,0
    kero.balloon.offsety,0


    これらの値は descript.txt で指定したバルーンオフセット値をオーバーライドする。バルーンオフセット値の持つ意味については descript.txt の項を参照。省略可能。


  • 矩形領域定義


    collision0,98,34,191,69,Head
    collision1,105,103,178,150,Face
    collision2,118,212,176,255,Bust

    point.centerx,150
    point.centery,200

    point.kinoko.centerx,150
    point.kinoko.centery,200


    collision[id] はマウスイベント定義データを表す。左から順に left/top/right/bottom/当たり判定識別子。定義された矩形内でマウスイベントが発生すると定義された識別子を伴って SHIORI にイベントが通知され、それによって SHIORI はシェルのどの部分でマウスイベントが発生したかを判別する。上記の例では Head、Face、Bust の当たり判定領域を設定している。最大 32 まで(collisoin31 まで)定義可能。

    point.* は他プロセスとの連携のための座標データを表す。centerx はキャラクタの中心 x 座標、centery は同じく y 座標を表す。省略可能。

    point.kinoko.* は絶対きのこ領域中心点データを表す。centerx はきのこの根本の中心 x 座標、centery は同じく y 座標を表す。省略可能。

  • アルファビットマップ


    surface0.png
    surface0.pna


    alpha channel 定義ファイルを用意することにより surface に alpha 値を付与することができる。alpha 値を与えられた surface はその alpha 値の大きさに従ってその背面の画素を透過して描画を行う。この構造によりいわゆる「半透明」効果を得ることができる。

    alpha channel 定義ファイルの実体は当該 surface と全く同じサイズのグレースケール png ファイル surface[id].pna である。このビットマップの各ピクセルの輝度がそのまま当該 surface の alpha 値として設定される。即ち、完全な黒(輝度 0)で塗られた部分は完全に透明となり、完全な白(輝度 255)で塗られた部分は完全に不透明となる。例示






    上記のような surface を作成した場合、この surface は右上頂点を完全不透明、左下頂点を完全透明とした、アルファグラデーションのかかった surface となる。


  • 制限事項


    アルファブレンドは MAHORO GFX Engine Mode. ULW 時のみ有効となる。従って win9x では使用できず、例え pna があったとしても surface は常に完全に不透明なものとして描画される。

  • エイリアス/マルチプル


    home
     +-ghost
        +-naru
           +-shell
               +-master
                  +-alias.txt
    

    エイリアスを作成することで surface ID を抽象化できる。これは例えば \s[smile] のような状況依存性の低い(具体性の低い)指定で surface を切り替えられることを意味する。また、それよりも重要なのは、1つのエイリアスに複数の ID を assign することにより、一つの ID 指定に対して複数の ID に分岐できるという点である。これは例えば「笑っている」surface を複数枚用意し、「笑え」という指示に対してそれらをランダムに表示させられることを意味している。

    エイリアスは alias.txt で定義する。


    sakura.surface.alias
    {
    normal,[0]
    blush,[1]
    surprise,[2]
    anxious,[3]
    bum,[4]
    smile,[5]
    calm,[6]
    angry,[7]
    sneer,[8]
    sing,[25]
    }

    kero.surface.alias
    {
    normal,[10]
    eyes,[11]
    sing,[19]
    }


    上記のようなエントリを追加すると、\0\s[normal] は \0\s[0]、\1\s[normal] は \1\s[10] と等価となる。

    もっともこのような使い方は現場ではほとんど見かけない。smile など一見分かりやすそうな識別子を定義したところで現場でスクリプトを書いている人間にとっては分かりづらいだけであり、実際には 0,[0] のように即値に対して複数番号を assign することが多い。

    各スコープのエントリはブレス { .... } で適切に囲む必要がある。

    一つのエイリアスに複数の ID を assign する場合は以下のように記述する。


    sakura.surface.alias
    {
    0,[0,1000,2000]
    }


    この場合、\0\s0 で サーフィス 0、1000、2000 のうちどれかがランダムに表示される。

    補足


    シェルと一般的な絵の最も大きな違いは外線のアンチエイリアスが許されないという点である。マスクで色を抜く関係上、外線とマスクの色が混じると、絵としては綺麗に見えても、マスクされた際に単に中途半端な色として抜けないまま残る。従って surface は背景とのアンチエイリアスなしで完全に「くり抜く」必要がある。

    リージョンデータのキャッシュについて


    シェルを実際に使用するとシェルのホームディレクトリに region というディレクトリが作成され、そこにリージョンデータがキャッシュされる。これはいつ消しても問題ない(最終配布ファイルに含める必要はない)。

    戻る